<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- 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>

	<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 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>