root/trunk/deployment/webadmin/webapp/resources/default/default/default.xsl

Revision 1240 (checked in by johnsa, 6 years ago)

web clients:

- more work on rdates forms
- "deleted" calendar made visible
- swap free/busy colors
- update free/busy access form to use

common access control form

Line 
1 <?xml version="1.0" encoding="UTF-8"?>
2 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
3   <xsl:output
4       method="html"
5       indent="yes"
6       media-type="text/html"
7       doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN"
8       doctype-system="http://www.w3.org/TR/html4/strict.dtd"
9       standalone="yes"
10       omit-xml-declaration="yes"/>
11    <xsl:strip-space elements="*"/>
12
13   <!-- ======================================== -->
14   <!--      BEDEWORK ADMIN CLIENT STYLESHEET     -->
15   <!-- ========================================= -->
16
17   <!-- **********************************************************************
18     Copyright 2006 Rensselaer Polytechnic Institute. All worldwide rights reserved.
19
20     Redistribution and use of this distribution in source and binary forms,
21     with or without modification, are permitted provided that:
22        The above copyright notice and this permission notice appear in all
23         copies and supporting documentation;
24
25         The name, identifiers, and trademarks of Rensselaer Polytechnic
26         Institute are not used in advertising or publicity without the
27         express prior written permission of Rensselaer Polytechnic Institute;
28
29     DISCLAIMER: The software is distributed" AS IS" without any express or
30     implied warranty, including but not limited to, any implied warranties
31     of merchantability or fitness for a particular purpose or any warrant)'
32     of non-infringement of any current or pending patent rights. The authors
33     of the software make no representations about the suitability of this
34     software for any particular purpose. The entire risk as to the quality
35     and performance of the software is with the user. Should the software
36     prove defective, the user assumes the cost of all necessary servicing,
37     repair or correction. In particular, neither Rensselaer Polytechnic
38     Institute, nor the authors of the software are liable for any indirect,
39     special, consequential, or incidental damages related to the software,
40     to the maximum extent the law permits. -->
41
42   <!-- DEFINE INCLUDES -->
43   <xsl:include href="/bedework-common/default/default/errors.xsl"/>
44   <xsl:include href="/bedework-common/default/default/messages.xsl"/>
45
46   <!-- DEFINE GLOBAL CONSTANTS -->
47   <!-- URL of html resources (images, css, other html); by default this is
48        set to the application root, but for the admin client
49        this should be changed to point to a
50        web server over https to avoid mixed content errors, e.g.,
51   <xsl:variable name="resourcesRoot" select="'https://mywebserver.edu/myresourcesdir'"/>
52     -->
53   <xsl:variable name="resourcesRoot" select="/bedeworkadmin/approot"/>
54
55   <!-- URL of the XSL template directory -->
56   <!-- The approot is an appropriate place to put
57        included stylesheets and xml fragments. These are generally
58        referenced relatively (like errors.xsl and messages.xsl above);
59        this variable is here for your convenience if you choose to
60        reference it explicitly.  It is not used in this stylesheet, however,
61        and can be safely removed if you so choose. -->
62   <xsl:variable name="appRoot" select="/bedeworkadmin/approot"/>
63
64   <!-- Properly encoded prefixes to the application actions; use these to build
65        urls; allows the application to be used without cookies or within a portal.
66        we will probably change the way we create these before long (e.g. build them
67        dynamically in the xslt). -->
68   <xsl:variable name="setup" select="/bedeworkadmin/urlPrefixes/setup/a/@href"/>
69   <xsl:variable name="logout" select="/bedeworkadmin/urlPrefixes/logout/a/@href"/>
70   <xsl:variable name="search" select="/bedeworkadmin/urlPrefixes/search/search/a/@href"/>
71   <xsl:variable name="search-next" select="/bedeworkadmin/urlPrefixes/search/next/a/@href"/>
72   <!-- events -->
73   <xsl:variable name="event-showEvent" select="/bedeworkadmin/urlPrefixes/event/showEvent/a/@href"/>
74   <xsl:variable name="event-showModForm" select="/bedeworkadmin/urlPrefixes/event/showModForm/a/@href"/>
75   <xsl:variable name="event-showUpdateList" select="/bedeworkadmin/urlPrefixes/event/showUpdateList/a/@href"/>
76   <xsl:variable name="event-showDeleteConfirm" select="/bedeworkadmin/urlPrefixes/event/showDeleteConfirm/a/@href"/>
77   <xsl:variable name="event-initAddEvent" select="/bedeworkadmin/urlPrefixes/event/initAddEvent/a/@href"/>
78   <xsl:variable name="event-initUpdateEvent" select="/bedeworkadmin/urlPrefixes/event/initUpdateEvent/a/@href"/>
79   <xsl:variable name="event-delete" select="/bedeworkadmin/urlPrefixes/event/delete/a/@href"/>
80   <xsl:variable name="event-fetchForDisplay" select="/bedeworkadmin/urlPrefixes/event/fetchForDisplay/a/@href"/>
81   <xsl:variable name="event-fetchForUpdate" select="/bedeworkadmin/urlPrefixes/event/fetchForUpdate/a/@href"/>
82   <xsl:variable name="event-update" select="/bedeworkadmin/urlPrefixes/event/update/a/@href"/>
83   <xsl:variable name="event-selectCalForEvent" select="/bedeworkadmin/urlPrefixes/event/selectCalForEvent/a/@href"/>
84   <xsl:variable name="event-showRdates" select="/bedeworkadmin/urlPrefixes/event/showRdates"/>
85   <xsl:variable name="event-setRdate" select="/bedeworkadmin/urlPrefixes/event/setRdate"/>
86   <xsl:variable name="event-initUpload" select="/bedeworkadmin/urlPrefixes/event/initUpload/a/@href"/>
87   <xsl:variable name="event-upload" select="/bedeworkadmin/urlPrefixes/event/upload/a/@href"/>
88   <!-- contacts -->
89   <xsl:variable name="contact-showContact" select="/bedeworkadmin/urlPrefixes/contact/showContact/a/@href"/>
90   <xsl:variable name="contact-showReferenced" select="/bedeworkadmin/urlPrefixes/contact/showReferenced/a/@href"/>
91   <xsl:variable name="contact-showModForm" select="/bedeworkadmin/urlPrefixes/contact/showModForm/a/@href"/>
92   <xsl:variable name="contact-showUpdateList" select="/bedeworkadmin/urlPrefixes/contact/showUpdateList/a/@href"/>
93   <xsl:variable name="contact-showDeleteConfirm" select="/bedeworkadmin/urlPrefixes/contact/showDeleteConfirm/a/@href"/>
94   <xsl:variable name="contact-initAdd" select="/bedeworkadmin/urlPrefixes/contact/initAdd/a/@href"/>
95   <xsl:variable name="contact-initUpdate" select="/bedeworkadmin/urlPrefixes/contact/initUpdate/a/@href"/>
96   <xsl:variable name="contact-delete" select="/bedeworkadmin/urlPrefixes/contact/delete/a/@href"/>
97   <xsl:variable name="contact-fetchForDisplay" select="/bedeworkadmin/urlPrefixes/contact/fetchForDisplay/a/@href"/>
98   <xsl:variable name="contact-fetchForUpdate" select="/bedeworkadmin/urlPrefixes/contact/fetchForUpdate/a/@href"/>
99   <xsl:variable name="contact-update" select="/bedeworkadmin/urlPrefixes/contact/update/a/@href"/>
100   <!-- locations -->
101   <xsl:variable name="location-showLocation" select="/bedeworkadmin/urlPrefixes/location/showLocation/a/@href"/>
102   <xsl:variable name="location-showReferenced" select="/bedeworkadmin/urlPrefixes/location/showReferenced/a/@href"/>
103   <xsl:variable name="location-showModForm" select="/bedeworkadmin/urlPrefixes/location/showModForm/a/@href"/>
104   <xsl:variable name="location-showUpdateList" select="/bedeworkadmin/urlPrefixes/location/showUpdateList/a/@href"/>
105   <xsl:variable name="location-showDeleteConfirm" select="/bedeworkadmin/urlPrefixes/location/showDeleteConfirm/a/@href"/>
106   <xsl:variable name="location-initAdd" select="/bedeworkadmin/urlPrefixes/location/initAdd/a/@href"/>
107   <xsl:variable name="location-initUpdate" select="/bedeworkadmin/urlPrefixes/location/initUpdate/a/@href"/>
108   <xsl:variable name="location-delete" select="/bedeworkadmin/urlPrefixes/location/delete/a/@href"/>
109   <xsl:variable name="location-fetchForDisplay" select="/bedeworkadmin/urlPrefixes/location/fetchForDisplay/a/@href"/>
110   <xsl:variable name="location-fetchForUpdate" select="/bedeworkadmin/urlPrefixes/location/fetchForUpdate/a/@href"/>
111   <xsl:variable name="location-update" select="/bedeworkadmin/urlPrefixes/location/update/a/@href"/>
112   <!-- categories -->
113   <xsl:variable name="category-showReferenced" select="/bedeworkadmin/urlPrefixes/category/showReferenced/a/@href"/>
114   <xsl:variable name="category-showModForm" select="/bedeworkadmin/urlPrefixes/category/showModForm/a/@href"/>
115   <xsl:variable name="category-showUpdateList" select="/bedeworkadmin/urlPrefixes/category/showUpdateList/a/@href"/>
116   <xsl:variable name="category-showDeleteConfirm" select="/bedeworkadmin/urlPrefixes/category/showDeleteConfirm/a/@href"/>
117   <xsl:variable name="category-initAdd" select="/bedeworkadmin/urlPrefixes/category/initAdd/a/@href"/>
118   <xsl:variable name="category-initUpdate" select="/bedeworkadmin/urlPrefixes/category/initUpdate/a/@href"/>
119   <xsl:variable name="category-delete" select="/bedeworkadmin/urlPrefixes/category/delete/a/@href"/>
120   <xsl:variable name="category-fetchForUpdate" select="/bedeworkadmin/urlPrefixes/category/fetchForUpdate/a/@href"/>
121   <xsl:variable name="category-update" select="/bedeworkadmin/urlPrefixes/category/update/a/@href"/>
122   <!-- calendars -->
123   <xsl:variable name="calendar-fetch" select="/bedeworkadmin/urlPrefixes/calendar/fetch/a/@href"/>
124   <xsl:variable name="calendar-fetchDescriptions" select="/bedeworkadmin/urlPrefixes/calendar/fetchDescriptions/a/@href"/>
125   <xsl:variable name="calendar-initAdd" select="/bedeworkadmin/urlPrefixes/calendar/initAdd/a/@href"/>
126   <xsl:variable name="calendar-delete" select="/bedeworkadmin/urlPrefixes/calendar/delete/a/@href"/>
127   <xsl:variable name="calendar-fetchForDisplay" select="/bedeworkadmin/urlPrefixes/calendar/fetchForDisplay/a/@href"/>
128   <xsl:variable name="calendar-fetchForUpdate" select="/bedeworkadmin/urlPrefixes/calendar/fetchForUpdate/a/@href"/>
129   <xsl:variable name="calendar-update" select="/bedeworkadmin/urlPrefixes/calendar/update/a/@href"/>
130   <xsl:variable name="calendar-setAccess" select="/bedeworkadmin/urlPrefixes/calendar/setAccess/a/@href"/>
131   <!-- subscriptions -->
132   <xsl:variable name="subscriptions-fetch" select="/bedeworkadmin/urlPrefixes/subscriptions/fetch/a/@href"/>
133   <xsl:variable name="subscriptions-fetchForUpdate" select="/bedeworkadmin/urlPrefixes/subscriptions/fetchForUpdate/a/@href"/>
134   <xsl:variable name="subscriptions-initAdd" select="/bedeworkadmin/urlPrefixes/subscriptions/initAdd/a/@href"/>
135   <xsl:variable name="subscriptions-subscribe" select="/bedeworkadmin/urlPrefixes/subscriptions/subscribe/a/@href"/>
136   <!-- views -->
137   <xsl:variable name="view-fetch" select="/bedeworkadmin/urlPrefixes/view/fetch/a/@href"/>
138   <xsl:variable name="view-fetchForUpdate" select="/bedeworkadmin/urlPrefixes/view/fetchForUpdate/a/@href"/>
139   <xsl:variable name="view-addView" select="/bedeworkadmin/urlPrefixes/view/addView/a/@href"/>
140   <xsl:variable name="view-update" select="/bedeworkadmin/urlPrefixes/view/update/a/@href"/>
141   <xsl:variable name="view-remove" select="/bedeworkadmin/urlPrefixes/view/remove/a/@href"/>
142   <!-- system -->
143   <xsl:variable name="system-fetch" select="/bedeworkadmin/urlPrefixes/system/fetch/a/@href"/>
144   <xsl:variable name="system-update" select="/bedeworkadmin/urlPrefixes/system/update/a/@href"/>
145   <!-- calsuites -->
146   <xsl:variable name="calsuite-fetch" select="/bedeworkadmin/urlPrefixes/calsuite/fetch/a/@href"/>
147   <xsl:variable name="calsuite-fetchForUpdate" select="/bedeworkadmin/urlPrefixes/calsuite/fetchForUpdate/a/@href"/>
148   <xsl:variable name="calsuite-add" select="/bedeworkadmin/urlPrefixes/calsuite/add/a/@href"/>
149   <xsl:variable name="calsuite-update" select="/bedeworkadmin/urlPrefixes/calsuite/update/a/@href"/>
150   <xsl:variable name="calsuite-showAddForm" select="/bedeworkadmin/urlPrefixes/calsuite/showAddForm/a/@href"/>
151   <xsl:variable name="calsuite-setAccess" select="/bedeworkadmin/urlPrefixes/calsuite/setAccess/a/@href"/>
152   <xsl:variable name="calsuite-fetchPrefsForUpdate" select="/bedeworkadmin/urlPrefixes/calsuite/fetchPrefsForUpdate/a/@href"/>
153   <xsl:variable name="calsuite-updatePrefs" select="/bedeworkadmin/urlPrefixes/calsuite/updatePrefs/a/@href"/>
154   <!-- timezones and stats -->
155   <xsl:variable name="timezones-initUpload" select="/bedeworkadmin/urlPrefixes/timezones/initUpload/a/@href"/>
156   <xsl:variable name="timezones-upload" select="/bedeworkadmin/urlPrefixes/timezones/upload/a/@href"/>
157   <xsl:variable name="stats-update" select="/bedeworkadmin/urlPrefixes/stats/update/a/@href"/>
158   <!-- authuser and prefs -->
159   <xsl:variable name="authuser-showModForm" select="/bedeworkadmin/urlPrefixes/authuser/showModForm/a/@href"/>
160   <xsl:variable name="authuser-showUpdateList" select="/bedeworkadmin/urlPrefixes/authuser/showUpdateList/a/@href"/>
161   <xsl:variable name="authuser-initUpdate" select="/bedeworkadmin/urlPrefixes/authuser/initUpdate/a/@href"/>
162   <xsl:variable name="authuser-fetchForUpdate" select="/bedeworkadmin/urlPrefixes/authuser/fetchForUpdate/a/@href"/>
163   <xsl:variable name="authuser-update" select="/bedeworkadmin/urlPrefixes/authuser/update/a/@href"/>
164   <xsl:variable name="prefs-fetchForUpdate" select="/bedeworkadmin/urlPrefixes/prefs/fetchForUpdate/a/@href"/>
165   <xsl:variable name="prefs-update" select="/bedeworkadmin/urlPrefixes/prefs/update/a/@href"/>
166   <!-- admin groups -->
167   <xsl:variable name="admingroup-showModForm" select="/bedeworkadmin/urlPrefixes/admingroup/showModForm/a/@href"/>
168   <xsl:variable name="admingroup-showModMembersForm" select="/bedeworkadmin/urlPrefixes/admingroup/showModMembersForm/a/@href"/>
169   <xsl:variable name="admingroup-showUpdateList" select="/bedeworkadmin/urlPrefixes/admingroup/showUpdateList/a/@href"/>
170   <xsl:variable name="admingroup-showChooseGroup" select="/bedeworkadmin/urlPrefixes/admingroup/showChooseGroup/a/@href"/>
171   <xsl:variable name="admingroup-showDeleteConfirm" select="/bedeworkadmin/urlPrefixes/admingroup/showDeleteConfirm/a/@href"/>
172   <xsl:variable name="admingroup-initAdd" select="/bedeworkadmin/urlPrefixes/admingroup/initAdd/a/@href"/>
173   <xsl:variable name="admingroup-initUpdate" select="/bedeworkadmin/urlPrefixes/admingroup/initUpdate/a/@href"/>
174   <xsl:variable name="admingroup-delete" select="/bedeworkadmin/urlPrefixes/admingroup/delete/a/@href"/>
175   <xsl:variable name="admingroup-fetchUpdateList" select="/bedeworkadmin/urlPrefixes/admingroup/fetchUpdateList/a/@href"/>
176   <xsl:variable name="admingroup-fetchForUpdate" select="/bedeworkadmin/urlPrefixes/admingroup/fetchForUpdate/a/@href"/>
177   <xsl:variable name="admingroup-fetchForUpdateMembers" select="/bedeworkadmin/urlPrefixes/admingroup/fetchForUpdateMembers/a/@href"/>
178   <xsl:variable name="admingroup-update" select="/bedeworkadmin/urlPrefixes/admingroup/update/a/@href"/>
179   <xsl:variable name="admingroup-updateMembers" select="/bedeworkadmin/urlPrefixes/admingroup/updateMembers/a/@href"/>
180   <xsl:variable name="admingroup-switch" select="/bedeworkadmin/urlPrefixes/admingroup/switch/a/@href"/>
181
182   <!-- URL of the web application - includes web context -->
183   <xsl:variable name="urlPrefix" select="/bedeworkadmin/urlprefix"/>
184
185   <!-- Other generally useful global variables -->
186   <xsl:variable name="publicCal">/cal</xsl:variable>
187
188   <!--==== MAIN TEMPLATE  ====-->
189   <xsl:template match="/">
190     <html lang="en">
191       <head>
192         <title>Calendar Admin: Events Calendar Administration</title>
193         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
194         <link rel="stylesheet" href="{$resourcesRoot}/default/default/default.css"/>
195         <link rel="stylesheet" href="{$resourcesRoot}/default/default/subColors.css"/>
196         <xsl:if test="/bedeworkadmin/page='modEvent' or
197                       /bedeworkadmin/page='rdates'">
198           <script type="text/javascript" src="{$resourcesRoot}/resources/bedework.js">&#160;</script>
199           <script type="text/javascript" src="{$resourcesRoot}/resources/bwClock.js">&#160;</script>
200           <link rel="stylesheet" href="{$resourcesRoot}/resources/bwClock.css"/>
201           <script type="text/javascript" src="/bedework-common/javascript/dojo/dojo.js">&#160;</script>
202           <script type="text/javascript" src="{$resourcesRoot}/resources/bedeworkEventForm.js">&#160;</script>
203         </xsl:if>
204         <xsl:if test="/bedeworkadmin/page='upload' or /bedeworkadmin/page='selectCalForEvent'">
205           <script type="text/javascript" src="{$resourcesRoot}/resources/bedework.js">&#160;</script>
206         </xsl:if>
207         <xsl:if test="/bedeworkadmin/page='calendarDescriptions' or /bedeworkadmin/page='displayCalendar'">
208           <link rel="stylesheet" href="{$resourcesRoot}/resources/calendarDescriptions.css"/>
209         </xsl:if>
210         <link rel="icon" type="image/ico" href="{$resourcesRoot}/resources/bedework.ico" />
211         <script language="JavaScript" type="text/javascript">
212           <xsl:comment>
213         <![CDATA[
214         // places the cursor in the first available form element when the page is loaded
215         // (if a form exists on the page)
216         function focusFirstElement() {
217           if (window.document.forms[0]) {
218             window.document.forms[0].elements[0].focus();
219           }
220         }]]>
221         </xsl:comment>
222         </script>
223       </head>
224       <body onLoad="focusFirstElement()">
225         <xsl:choose>
226           <xsl:when test="/bedeworkadmin/page='selectCalForEvent'">
227             <xsl:call-template name="selectCalForEvent"/>
228           </xsl:when>
229           <xsl:when test="/bedeworkadmin/page='rdates'">
230             <xsl:call-template name="rdates"/>
231           </xsl:when>
232           <xsl:otherwise>
233             <xsl:call-template name="header"/>
234             <div id="content">
235               <xsl:choose>
236                 <xsl:when test="/bedeworkadmin/page='eventList'">
237                   <xsl:call-template name="eventList"/>
238                 </xsl:when>
239                 <xsl:when test="/bedeworkadmin/page='modEvent'">
240                   <xsl:apply-templates select="/bedeworkadmin/formElements" mode="modEvent"/>
241                 </xsl:when>
242                 <xsl:when test="/bedeworkadmin/page='displayEvent' or /bedeworkadmin/page='deleteEventConfirm'">
243                   <xsl:apply-templates select="/bedeworkadmin/event" mode="displayEvent"/>
244                 </xsl:when>
245                 <xsl:when test="/bedeworkadmin/page='contactList'">
246                   <xsl:call-template name="contactList"/>
247                 </xsl:when>
248                 <xsl:when test="/bedeworkadmin/page='modContact'">
249                   <xsl:call-template name="modContact"/>
250                 </xsl:when>
251                 <xsl:when test="/bedeworkadmin/page='deleteContactConfirm' or /bedeworkadmin/page='contactReferenced'">
252                   <xsl:call-template name="deleteContactConfirm"/>
253                 </xsl:when>
254                 <xsl:when test="/bedeworkadmin/page='locationList'">
255                   <xsl:call-template name="locationList"/>
256                 </xsl:when>
257                 <xsl:when test="/bedeworkadmin/page='modLocation'">
258                   <xsl:call-template name="modLocation"/>
259                 </xsl:when>
260                 <xsl:when test="/bedeworkadmin/page='deleteLocationConfirm'">
261                   <xsl:call-template name="deleteLocationConfirm"/>
262                 </xsl:when>
263                 <xsl:when test="/bedeworkadmin/page='categoryList'">
264                   <xsl:call-template name="categoryList"/>
265                 </xsl:when>
266                 <xsl:when test="/bedeworkadmin/page='modCategory'">
267                   <xsl:call-template name="modCategory"/>
268                 </xsl:when>
269                 <xsl:when test="/bedeworkadmin/page='deleteCategoryConfirm'">
270                   <xsl:call-template name="deleteCategoryConfirm"/>
271                 </xsl:when>
272                 <xsl:when test="/bedeworkadmin/page='calendarList' or /bedeworkadmin/page='calendarDescriptions' or /bedeworkadmin/page='displayCalendar' or /bedeworkadmin/page='modCalendar' or /bedeworkadmin/page='deleteCalendarConfirm' or /bedeworkadmin/page='calendarReferenced'">
273                   <xsl:apply-templates select="/bedeworkadmin/calendars"/>
274                 </xsl:when>
275                 <xsl:when test="/bedeworkadmin/page='subscriptions' or /bedeworkadmin/page='modSubscription'">
276                   <xsl:apply-templates select="/bedeworkadmin/subscriptions"/>
277                 </xsl:when>
278                 <xsl:when test="/bedeworkadmin/page='views'">
279                   <xsl:apply-templates select="/bedeworkadmin/views" mode="viewList"/>
280                 </xsl:when>
281                 <xsl:when test="/bedeworkadmin/page='modView'">
282                   <xsl:call-template name="modView"/>
283                 </xsl:when>
284                 <xsl:when test="/bedeworkadmin/page='deleteViewConfirm'">
285                   <xsl:call-template name="deleteViewConfirm"/>
286                 </xsl:when>
287                 <xsl:when test="/bedeworkadmin/page='modSyspars'">
288                   <xsl:call-template name="modSyspars"/>
289                 </xsl:when>
290                 <xsl:when test="/bedeworkadmin/page='calSuiteList'">
291                   <xsl:apply-templates select="/bedeworkadmin/calSuites" mode="calSuiteList"/>
292                 </xsl:when>
293                 <xsl:when test="/bedeworkadmin/page='addCalSuite'">
294                   <xsl:call-template name="addCalSuite"/>
295                 </xsl:when>
296                 <xsl:when test="/bedeworkadmin/page='modCalSuite'">
297                   <xsl:apply-templates select="/bedeworkadmin/calSuite"/>
298                 </xsl:when>
299                 <xsl:when test="/bedeworkadmin/page='calSuitePrefs'">
300                   <xsl:call-template name="calSuitePrefs"/>
301                 </xsl:when>
302                 <xsl:when test="/bedeworkadmin/page='authUserList'">
303                   <xsl:call-template name="authUserList"/>
304                 </xsl:when>
305                 <xsl:when test="/bedeworkadmin/page='modAuthUser'">
306                   <xsl:call-template name="modAuthUser"/>
307                 </xsl:when>
308                 <xsl:when test="/bedeworkadmin/page='modPrefs'">
309                   <xsl:call-template name="modPrefs"/>
310                 </xsl:when>
311                 <xsl:when test="/bedeworkadmin/page='chooseGroup'">
312                   <xsl:apply-templates select="/bedeworkadmin/groups" mode="chooseGroup"/>
313                 </xsl:when>
314                 <xsl:when test="/bedeworkadmin/page='adminGroupList'">
315                   <xsl:call-template name="listAdminGroups"/>
316                 </xsl:when>
317                 <xsl:when test="/bedeworkadmin/page='modAdminGroup'">
318                   <xsl:call-template name="modAdminGroup"/>
319                 </xsl:when>
320                 <xsl:when test="/bedeworkadmin/page='modAdminGroupMembers'">
321                   <xsl:call-template name="modAdminGroupMembers"/>
322                 </xsl:when>
323                 <xsl:when test="/bedeworkadmin/page='deleteAdminGroupConfirm'">
324                   <xsl:call-template name="deleteAdminGroupConfirm"/>
325                 </xsl:when>
326                 <xsl:when test="/bedeworkadmin/page='searchResult'">
327                   <xsl:call-template name="searchResult"/>
328                 </xsl:when>
329                 <xsl:when test="/bedeworkadmin/page='noGroup'">
330                   <h2>No administrative group</h2>
331                   <p>Your userid has not been assigned to an administrative group.
332                     Please inform your administrator.</p>
333                 </xsl:when>
334                 <xsl:when test="/bedeworkadmin/page='upload'">
335                   <xsl:call-template name="upload"/>
336                 </xsl:when>
337                 <xsl:when test="/bedeworkadmin/page='uploadTimezones'">
338                   <xsl:call-template name="uploadTimezones"/>
339                 </xsl:when>
340                 <xsl:when test="/bedeworkadmin/page='showSysStats'">
341                   <xsl:apply-templates select="/bedeworkadmin/sysStats" mode="showSysStats"/>
342                 </xsl:when>
343                 <xsl:when test="/bedeworkadmin/page='noAccess'">
344                   <h2>No Access</h2>
345                   <p>
346                     You have no access to the action you just attempted. If you believe
347                     you should have access and the problem persists, contact your
348                     administrator.
349                   </p>
350                   <p>
351                     <a href="{$setup}">continue</a>
352                   </p>
353                 </xsl:when>
354                 <xsl:when test="/bedeworkadmin/page='error'">
355                   <h2>Application error</h2>
356                   <p>An application error occurred.</p>
357                   <p>
358                     <a href="{$setup}">continue</a>
359                   </p>
360                 </xsl:when>
361                 <xsl:otherwise>
362                   <xsl:call-template name="mainMenu"/>
363                 </xsl:otherwise>
364               </xsl:choose>
365             </div>
366             <!-- footer -->
367             <xsl:call-template name="footer"/>
368           </xsl:otherwise>
369         </xsl:choose>
370       </body>
371     </html>
372   </xsl:template>
373
374
375   <!--==== HEADER TEMPLATES and NAVIGATION  ====-->
376
377   <xsl:template name="header">
378     <div id="header">
379       <a href="/bedework/">
380         <img id="logo"
381             alt="logo"
382             src="{$resourcesRoot}/resources/bedeworkAdminLogo.gif"
383             width="217"
384             height="40"
385             border="0"/>
386       </a>
387       <!-- set the page heading: -->
388       <h1>
389         <xsl:choose>
390           <xsl:when test="/bedeworkadmin/page='modEvent' or /bedeworkadmin/page='eventList' or /bedeworkadmin/page='displayEvent'">
391             Manage Events
392           </xsl:when>
393           <xsl:when test="/bedeworkadmin/page='contactList' or /bedeworkadmin/page='modContact' or /bedeworkadmin/page='deleteContactConfirm'">
394             Manage Contacts
395           </xsl:when>
396           <xsl:when test="/bedeworkadmin/page='locationList' or /bedeworkadmin/page='modLocation' or /bedeworkadmin/page='deleteLocationConfirm'">
397             Manage Locations
398           </xsl:when>
399           <xsl:when test="/bedeworkadmin/page='calendarList' or /bedeworkadmin/page='modCalendar' or /bedeworkadmin/page='calendarReferenced' or /bedeworkadmin/page='deleteCalendarConfirm'">
400             Manage Calendars
401           </xsl:when>
402           <xsl:when test="/bedeworkadmin/page='calendarDescriptions' or /bedeworkadmin/page='displayCalendar'">
403             Public Calendars
404           </xsl:when>
405           <xsl:when test="/bedeworkadmin/page='subscriptions' or /bedeworkadmin/page='modSubscription'">
406             Manage Subscriptions
407           </xsl:when>
408           <xsl:when test="/bedeworkadmin/page='views' or /bedeworkadmin/page='modView'">
409             Manage Views
410           </xsl:when>
411           <xsl:when test="/bedeworkadmin/page='modSyspars'">
412             Manage System Preferences
413           </xsl:when>
414           <xsl:when test="/bedeworkadmin/page='authUserList' or /bedeworkadmin/page='modAuthUser'">
415             Manage Public Events Administrators
416           </xsl:when>
417           <xsl:when test="/bedeworkadmin/page='chooseGroup'">
418             Choose Administrative Group
419           </xsl:when>
420           <xsl:when test="/bedeworkadmin/page='adminGroupList' or /bedeworkadmin/page='modAdminGroup' or /bedeworkadmin/page='modAdminGroup' or /bedeworkadmin/page='modAdminGroupMembers'">
421             Manage Administrative Groups
422           </xsl:when>
423           <xsl:when test="/bedeworkadmin/page='noGroup'">
424             No Administrative Group
425           </xsl:when>
426           <xsl:when test="/bedeworkadmin/page='uploadTimezones'">
427             Manage Time Zones
428           </xsl:when>
429           <xsl:when test="/bedeworkadmin/page='noAccess'">
430             Access Denied
431           </xsl:when>
432           <xsl:when test="/bedeworkadmin/page='error'">
433             Error
434           </xsl:when>
435           <xsl:otherwise>
436             Bedework Calendar Administration
437           </xsl:otherwise>
438         </xsl:choose>
439       </h1>
440
441       <xsl:call-template name="messagesAndErrors"/>
442
443     </div>
444     <table id="statusBarTable">
445       <tr>
446         <td class="leftCell">
447           <a href="{$setup}">Main Menu</a> |
448           <a href="{$publicCal}" target="calendar">Launch Calendar</a> |
449           <a href="{$logout}">Log Out</a>
450         </td>
451         <xsl:if test="/bedeworkadmin/userInfo/user">
452           <td class="rightCell">
453             <xsl:if test="/bedeworkadmin/currentCalSuite/name">
454               Calendar Suite:
455               <span class="status">
456                 <xsl:value-of select="/bedeworkadmin/currentCalSuite/name"/>
457               </span>
458               &#160;
459             </xsl:if>
460             Logged in as:
461             <span class="status">
462               <xsl:value-of select="/bedeworkadmin/userInfo/user"/>
463             </span>
464             &#160;
465             <xsl:if test="/bedeworkadmin/userInfo/group">
466               Group:
467               <span class="status">
468                 <xsl:value-of select="/bedeworkadmin/userInfo/group"/>
469               </span>
470             </xsl:if>
471           </td>
472         </xsl:if>
473       </tr>
474     </table>
475     <div id="titleBar">
476       CALENDAR of EVENTS
477     </div>
478   </xsl:template>
479
480   <xsl:template name="messagesAndErrors">
481     <xsl:if test="/bedeworkadmin/message">
482       <ul id="messages">
483         <xsl:for-each select="/bedeworkadmin/message">
484           <li><xsl:apply-templates select="."/></li>
485         </xsl:for-each>
486       </ul>
487     </xsl:if>
488     <xsl:if test="/bedeworkadmin/error">
489       <ul id="errors">
490         <xsl:for-each select="/bedeworkadmin/error">
491           <li><xsl:apply-templates select="."/></li>
492         </xsl:for-each>
493       </ul>
494     </xsl:if>
495   </xsl:template>
496
497   <!--==============================================-->
498   <!--==============================================-->
499   <!--============= PAGE TEMPLATES =================-->
500   <!--==============================================-->
501   <!--==============================================-->
502
503   <!--+++++++++++++++ Main Menu ++++++++++++++++++++-->
504   <xsl:template name="mainMenu">
505     <div id="adminLeftColumn">
506       <h2 class="menuTitle">Main Menu</h2>
507       <table id="mainMenuTable">
508         <tr>
509           <th>Events</th>
510           <td>
511             <a id="addEventLink" href="{$event-initAddEvent}">
512               Add
513             </a>
514           </td>
515           <td>
516             <a href="{$event-initUpdateEvent}">
517               Edit / Delete
518             </a>
519           </td>
520           <!--
521           Disable direct selection by ID; we'll need to find another way
522           of quickly getting to events: search and grid views should be implemented. -->
523           <!--
524           <td>
525             Event ID:
526             <xsl:copy-of select="/bedeworkadmin/formElements/*"/>
527           </td>-->
528         </tr>
529         <tr>
530           <th>Contacts</th>
531           <td>
532             <a id="addContactLink" href="{$contact-initAdd}">
533               Add
534             </a>
535           </td>
536           <td>
537             <a href="{$contact-initUpdate}">
538               Edit / Delete
539             </a>
540           </td>
541         </tr>
542         <tr>
543           <th>Locations</th>
544           <td>
545             <a id="addLocationLink" href="{$location-initAdd}">
546               Add
547             </a>
548           </td>
549           <td>
550             <a href="{$location-initUpdate}">
551               Edit / Delete
552             </a>
553           </td>
554         </tr>
555         <tr>
556           <th>Categories</th>
557           <td>
558             <a id="addCategoryLink" href="{$category-initAdd}">
559               Add
560             </a>
561           </td>
562           <td>
563             <a href="{$category-initUpdate}">
564               Edit / Delete
565             </a>
566           </td>
567         </tr>
568       </table>
569
570       <h4 class="menuTitle">Event search:</h4>
571       <form name="searchForm" method="post" action="{$search}" id="searchForm">
572         <input type="text" name="query" size="30">
573           <xsl:attribute name="value"><xsl:value-of select="/bedeworkadmin/searchResults/query"/></xsl:attribute>
574         </input>
575         <input type="submit" name="submit" value="go"/>
576         <div id="searchFields">
577           Limit:
578           <input type="radio" name="searchLimits" value="fromToday" checked="checked"/>today forward
579           <input type="radio" name="searchLimits" value="beforeToday"/>past dates
580           <input type="radio" name="searchLimits" value="none"/>all dates
581         </div>
582       </form>
583
584     </div>
585
586     <div id="adminRightColumn">
587       <xsl:if test="/bedeworkadmin/currentCalSuite/currentAccess/current-user-privilege-set/privilege/write or /bedeworkadmin/userInfo/superUser='true'">
588         <h4 class="menuTitle">
589           Manage calendar suite:
590           <em><xsl:value-of select="/bedeworkadmin/currentCalSuite/name"/>
591           </em>
592         </h4>
593         <ul class="adminMenu">
594           <li>
595             <a href="{$calendar-fetch}">
596               Manage calendars
597             </a>
598           </li>
599           <li>
600             <a href="{$subscriptions-fetch}">
601               Manage subscriptions
602             </a>
603           </li>
604           <li>
605             <a href="{$view-fetch}">
606               Manage views
607             </a>
608           </li>
609           <li>
610             <a href="{$calsuite-fetchPrefsForUpdate}">
611               Manage preferences
612             </a>
613           </li>
614           <li>
615             <a href="{$event-initUpload}">
616               Upload iCAL file
617             </a>
618           </li>
619         </ul>
620       </xsl:if>
621
622       <xsl:if test="/bedeworkadmin/userInfo/contentAdminUser='true'">
623         <h4 class="menuTitle">Manage users:</h4>
624         <ul class="adminMenu">
625           <xsl:if test="/bedeworkadmin/userInfo/userMaintOK='true'">
626             <li>
627               <a href="{$authuser-initUpdate}">
628                 Manage public event administrators
629               </a>
630             </li>
631           </xsl:if>
632           <xsl:if test="/bedeworkadmin/userInfo/adminGroupMaintOk='true'">
633             <li>
634               <a href="{$admingroup-initUpdate}">
635                 Manage admin groups
636               </a>
637             </li>
638           </xsl:if>
639           <li>
640             <a href="{$admingroup-switch}">
641               Choose/change group...
642             </a>
643           </li>
644           <xsl:if test="/bedeworkadmin/userInfo/userMaintOK='true'">
645             <li>
646               <form action="{$prefs-fetchForUpdate}" method="post">
647                 Edit user preferences (enter userid):<br/>
648                 <input type="text" name="user" size="15"/>
649                 <input type="submit" name="getPrefs" value="go"/>
650               </form>
651             </li>
652           </xsl:if>
653         </ul>
654       </xsl:if>
655
656       <xsl:if test="/bedeworkadmin/userInfo/superUser='true'">
657         <h4 class="menuTitle">Super user features:</h4>
658         <ul class="adminMenu">
659           <li>
660             <a href="{$calsuite-fetch}">
661               Manage calendar suites
662             </a>
663           </li>
664           <li>
665             <a href="{$system-fetch}">
666               Manage system preferences
667             </a>
668           </li>
669           <li>
670             <a href="{$timezones-initUpload}">
671               Upload and replace system timezones
672             </a>
673           </li>
674           <li>
675             System statistics:
676             <ul>
677               <li>
678                 <a href="{$stats-update}&amp;fetch=yes">
679                   admin web client
680                 </a>
681               </li>
682               <li>
683                 <a href="{$publicCal}/stats.do" target="pubClient">
684                   public web client
685                 </a>
686               </li>
687             </ul>
688           </li>
689         </ul>
690       </xsl:if>
691     </div>
692   </xsl:template>
693
694   <!--++++++++++++++++++ Events ++++++++++++++++++++-->
695   <xsl:template name="eventList">
696     <h2>Edit Events</h2>
697     <p>
698       Select the event that you would like to update:
699       <input type="button" name="return" value="Add new event" onclick="javascript:location.replace('{$event-initAddEvent}')"/>
700     </p>
701
702     <form name="peForm" method="post" action="{$event-initUpdateEvent}">
703       <table>
704         <tr>
705           <td style="padding-right: 1em;">Show:</td>
706           <td>
707             <xsl:copy-of select="/bedeworkadmin/formElements/form/listAllSwitchFalse/*"/>
708             Active
709           </td>
710           <td>
711             <xsl:copy-of select="/bedeworkadmin/formElements/form/listAllSwitchTrue/*"/>
712             All
713           </td>
714         </tr>
715       </table>
716     </form>
717
718     <table id="commonListTable">
719       <tr>
720         <th>Title</th>
721         <th>Start Date</th>
722         <th>End Date</th>
723         <th>Calendar</th>
724         <th>Description</th>
725       </tr>
726
727       <xsl:for-each select="/bedeworkadmin/events/event">
728         <xsl:variable name="subscriptionId" select="subscription/id"/>
729         <xsl:variable name="calPath" select="calendar/encodedPath"/>
730         <xsl:variable name="guid" select="guid"/>
731         <xsl:variable name="recurrenceId" select="recurrenceId"/>
732         <tr>
733           <td>
734             <a href="{$event-fetchForUpdate}&amp;subid={$subscriptionId}&amp;calPath={$calPath}&amp;guid={$guid}&amp;recurrenceId={$recurrenceId}">
735               <xsl:value-of select="summary"/>
736             </a>
737           </td>
738           <td class="date">
739             <xsl:value-of select="start/longdate"/>,
740             <xsl:value-of select="start/time"/>
741           </td>
742           <td class="date">
743             <xsl:value-of select="end/longdate"/>,
744             <xsl:value-of select="end/time"/>
745           </td>
746           <td>
747             <xsl:value-of select="calendar/name"/>
748           </td>
749           <td>
750             <xsl:value-of select="description"/>
751             <xsl:if test="recurring = 'true'">
752               <div class="recurrenceEditLinks">
753                 Recurring event.
754                 Edit:
755                 <a href="{$event-fetchForUpdate}&amp;subid={$subscriptionId}&amp;calPath={$calPath}&amp;guid={$guid}">
756                   master
757                 </a> |
758                 <a href="{$event-fetchForUpdate}&amp;subid={$subscriptionId}&amp;calPath={$calPath}&amp;guid={$guid}&amp;recurrenceId={$recurrenceId}">
759                   instance
760                 </a>
761               </div>
762             </xsl:if>
763           </td>
764         </tr>
765       </xsl:for-each>
766     </table>
767   </xsl:template>
768
769   <xsl:template match="formElements" mode="modEvent">
770     <xsl:variable name="subscriptionId" select="subscriptionId"/>
771     <xsl:variable name="calPathEncoded" select="form/calendar/encodedPath"/>
772     <xsl:variable name="calPath" select="form/calendar/path"/>
773     <xsl:variable name="guid" select="guid"/>
774     <xsl:variable name="recurrenceId" select="recurrenceId"/>
775
776     <h2>Event Information</h2>
777
778     <xsl:variable name="modEventAction" select="form/@action"/>
779     <form name="eventForm" method="post" action="{$modEventAction}" onsubmit="setEventFields(this)">
780       <table class="eventFormTable">
781         <tr>
782           <td class="fieldName">
783             Title:
784           </td>
785           <td>
786             <xsl:copy-of select="form/title/*"/>
787           </td>
788         </tr>
789         <tr>
790           <td class="fieldName">
791             Calendar:**
792           </td>
793           <td>
794             <xsl:if test="form/calendar/preferred/select/option">
795               <select name="prefCalendarId">
796                 <option value="-1">
797                   Select preferred:
798                 </option>
799                 <xsl:copy-of select="form/calendar/preferred/select/*"/>
800               </select>
801               or Calendar (all):
802             </xsl:if>
803             <select name="calendarId">
804               <option value="-1">
805                 Select:
806               </option>
807               <xsl:copy-of select="form/calendar/all/select/*"/>
808             </select>
809             <xsl:text> </xsl:text>
810             <span id="calDescriptionsLink">
811               <a href="javascript:launchSimpleWindow('{$calendar-fetchDescriptions}')">calendar descriptions</a>
812             </span>
813           </td>
814         </tr>
815
816         <tr>
817           <td class="fieldName">
818             Date &amp; Time:
819           </td>
820           <td>
821             <!-- Set the timefields class for the first load of the page;
822                  subsequent changes will take place using javascript without a
823                  page reload. -->
824             <xsl:variable name="timeFieldsClass">
825               <xsl:choose>
826                 <xsl:when test="form/allDay/input/@checked='checked'">invisible</xsl:when>
827                 <xsl:otherwise>timeFields</xsl:otherwise>
828               </xsl:choose>
829             </xsl:variable>
830             <xsl:choose>
831               <xsl:when test="form/allDay/input/@checked='checked'">
832                 <input type="checkbox" name="allDayFlag" onclick="swapAllDayEvent(this)" value="on" checked="checked"/>
833                 <input type="hidden" name="eventStartDate.dateOnly" value="on" id="allDayStartDateField"/>
834                 <input type="hidden" name="eventEndDate.dateOnly" value="on" id="allDayEndDateField"/>
835               </xsl:when>
836               <xsl:otherwise>
837                 <input type="checkbox" name="allDayFlag" onclick="swapAllDayEvent(this)" value="off"/>
838                 <input type="hidden" name="eventStartDate.dateOnly" value="off" id="allDayStartDateField"/>
839                 <input type="hidden" name="eventEndDate.dateOnly" value="off" id="allDayEndDateField"/>
840               </xsl:otherwise>
841             </xsl:choose>
842             all day (anniversary)
843
844             <!-- floating event: no timezone (and not UTC) -->
845             <xsl:choose>
846               <xsl:when test="form/floating/input/@checked='checked'">
847                 <input type="checkbox" name="floatingFlag" id="floatingFlag" onclick="swapFloatingTime(this)" value="on" checked="checked"/>
848                 <input type="hidden" name="eventStartDate.floating" value="on" id="startFloating"/>
849                 <input type="hidden" name="eventEndDate.floating" value="on" id="endFloating"/>
850               </xsl:when>
851               <xsl:otherwise>
852                 <input type="checkbox" name="floatingFlag" id="floatingFlag" onclick="swapFloatingTime(this)" value="off"/>
853                 <input type="hidden" name="eventStartDate.floating" value="off" id="startFloating"/>
854                 <input type="hidden" name="eventEndDate.floating" value="off" id="endFloating"/>
855               </xsl:otherwise>
856             </xsl:choose>
857             floating
858
859             <!-- store time as coordinated universal time (UTC) -->
860             <xsl:choose>
861               <xsl:when test="form/storeUTC/input/@checked='checked'">
862                 <input type="checkbox" name="storeUTCFlag" id="storeUTCFlag" onclick="swapStoreUTC(this)" value="on" checked="checked"/>
863                 <input type="hidden" name="eventStartDate.storeUTC" value="on" id="startStoreUTC"/>
864                 <input type="hidden" name="eventEndDate.storeUTC" value="on" id="endStoreUTC"/>
865               </xsl:when>
866               <xsl:otherwise>
867                 <input type="checkbox" name="storeUTCFlag" id="storeUTCFlag" onclick="swapStoreUTC(this)" value="off"/>
868                 <input type="hidden" name="eventStartDate.storeUTC" value="off" id="startStoreUTC"/>
869                 <input type="hidden" name="eventEndDate.storeUTC" value="off" id="endStoreUTC"/>
870               </xsl:otherwise>
871             </xsl:choose>
872             store as UTC
873
874             <br/>
875             <div class="dateStartEndBox">
876               <strong>Start:</strong>
877               <div class="dateFields">
878                 <span class="startDateLabel">Date </span>
879                 <span dojoType="dropdowndatepicker" formatLength="medium" value="today" saveFormat="yyyyMMdd" id="bwEventWidgetStartDate" iconURL="{$resourcesRoot}/resources/calIcon.gif">
880                   <xsl:attribute name="value"><xsl:value-of select="form/start/rfc3339DateTime"/></xsl:attribute>
881                   <xsl:text> </xsl:text>
882                 </span>
883                 <input type="hidden" name="eventStartDate.year">
884                   <xsl:attribute name="value"><xsl:value-of select="form/start/yearText/input/@value"/></xsl:attribute>
885                 </input>
886                 <input type="hidden" name="eventStartDate.month">
887                   <xsl:attribute name="value"><xsl:value-of select="form/start/month/select/option[@selected = 'selected']/@value"/></xsl:attribute>
888                 </input>
889                 <input type="hidden" name="eventStartDate.day">
890                   <xsl:attribute name="value"><xsl:value-of select="form/start/day/select/option[@selected = 'selected']/@value"/></xsl:attribute>
891                 </input>
892                 <!--<xsl:copy-of select="form/start/month/*"/>
893                 <xsl:copy-of select="form/start/day/*"/>
894                 <xsl:choose>
895                   <xsl:when test="/bedeworkadmin/creating = 'true'">
896                     <xsl:copy-of select="form/start/year/*"/>
897                   </xsl:when>
898                   <xsl:otherwise>
899                     <xsl:copy-of select="form/start/yearText/*"/>
900                   </xsl:otherwise>
901                 </xsl:choose>-->
902               </div>
903               <!--
904               <script language="JavaScript" type="text/javascript">
905                 <xsl:comment>
906                 startDateDynCalWidget = new dynCalendar('startDateDynCalWidget', <xsl:value-of select="number(form/start/yearText/input/@value)"/>, <xsl:value-of select="number(form/start/month/select/option[@selected='selected']/@value)-1"/>, <xsl:value-of select="number(form/start/day/select/option[@selected='selected']/@value)"/>, 'startDateCalWidgetCallback',true,'<xsl:value-of select="$resourcesRoot"/>/resources/');
907                 </xsl:comment>
908               </script>-->
909               <div class="{$timeFieldsClass}" id="startTimeFields">
910                 <span id="calWidgetStartTimeHider" class="show">
911                   <xsl:copy-of select="form/start/hour/*"/>
912                   <xsl:copy-of select="form/start/minute/*"/>
913                   <xsl:if test="form/start/ampm">
914                     <xsl:copy-of select="form/start/ampm/*"/>
915                   </xsl:if>
916                   <xsl:text> </xsl:text>
917                   <a href="javascript:bwClockLaunch('eventStartDate');"><img src="{$resourcesRoot}/resources/clockIcon.gif" width="16" height="15" border="0"/></a>
918
919                   <select name="eventStartDate.tzid" id="startTzid" class="timezones">
920                     <xsl:if test="form/floating/input/@checked='checked'"><xsl:attribute name="disabled">true</xsl:attribute></xsl:if>
921                     <option value="-1">select timezone...</option>
922                     <xsl:variable name="startTzId" select="form/start/tzid"/>
923                     <xsl:for-each select="/bedeworkadmin/timezones/timezone">
924                       <option>
925                         <xsl:attribute name="value"><xsl:value-of select="id"/></xsl:attribute>
926                         <xsl:if test="$startTzId = id"><xsl:attribute name="selected">selected</xsl:attribute></xsl:if>
927                         <xsl:value-of select="name"/>
928                       </option>
929                     </xsl:for-each>
930                   </select>
931                 </span>
932               </div>
933             </div>
934             <div class="dateStartEndBox">
935               <strong>End:</strong>
936               <xsl:choose>
937                 <xsl:when test="form/end/type='E'">
938                   <input type="radio" name="eventEndType" value="E" checked="checked" onClick="changeClass('endDateTime','shown');changeClass('endDuration','invisible');"/>
939                 </xsl:when>
940                 <xsl:otherwise>
941                   <input type="radio" name="eventEndType" value="E" onClick="changeClass('endDateTime','shown');changeClass('endDuration','invisible');"/>
942                 </xsl:otherwise>
943               </xsl:choose>
944               Date
945               <xsl:variable name="endDateTimeClass">
946                 <xsl:choose>
947                   <xsl:when test="form/end/type='E'">shown</xsl:when>
948                   <xsl:otherwise>invisible</xsl:otherwise>
949                 </xsl:choose>
950               </xsl:variable>
951               <div class="{$endDateTimeClass}" id="endDateTime">
952                 <div class="dateFields">
953                   <span dojoType="dropdowndatepicker" formatLength="medium" value="today" saveFormat="yyyyMMdd" id="bwEventWidgetEndDate" iconURL="{$resourcesRoot}/resources/calIcon.gif">
954                     <xsl:attribute name="value"><xsl:value-of select="form/end/rfc3339DateTime"/></xsl:attribute>
955                     <xsl:text> </xsl:text>
956                   </span>
957                   <input type="hidden" name="eventEndDate.year">
958                     <xsl:attribute name="value"><xsl:value-of select="form/end/dateTime/yearText/input/@value"/></xsl:attribute>
959                   </input>
960                   <input type="hidden" name="eventEndDate.month">
961                     <xsl:attribute name="value"><xsl:value-of select="form/end/dateTime/month/select/option[@selected = 'selected']/@value"/></xsl:attribute>
962                   </input>
963                   <input type="hidden" name="eventEndDate.day">
964                     <xsl:attribute name="value"><xsl:value-of select="form/end/dateTime/day/select/option[@selected = 'selected']/@value"/></xsl:attribute>
965                   </input>
966                   <!--<xsl:copy-of select="form/end/dateTime/month/*"/>
967                   <xsl:copy-of select="form/end/dateTime/day/*"/>
968                   <xsl:choose>
969                     <xsl:when test="/bedeworkadmin/creating = 'true'">
970                       <xsl:copy-of select="form/end/dateTime/year/*"/>
971                     </xsl:when>
972                     <xsl:otherwise>
973                       <xsl:copy-of select="form/end/dateTime/yearText/*"/>
974                     </xsl:otherwise>
975                   </xsl:choose>-->
976                 </div>
977                 <!--<script language="JavaScript" type="text/javascript">
978                   <xsl:comment>
979                   endDateDynCalWidget = new dynCalendar('endDateDynCalWidget', <xsl:value-of select="number(form/start/yearText/input/@value)"/>, <xsl:value-of select="number(form/start/month/select/option[@selected='selected']/@value)-1"/>, <xsl:value-of select="number(form/start/day/select/option[@selected='selected']/@value)"/>, 'endDateCalWidgetCallback',true,'<xsl:value-of select="$resourcesRoot"/>/resources/');
980                 </xsl:comment>
981                 </script>-->
982                 <div class="{$timeFieldsClass}" id="endTimeFields">
983                   <span id="calWidgetEndTimeHider" class="show">
984                     <xsl:copy-of select="form/end/dateTime/hour/*"/>
985                     <xsl:copy-of select="form/end/dateTime/minute/*"/>
986                     <xsl:if test="form/end/dateTime/ampm">
987                       <xsl:copy-of select="form/end/dateTime/ampm/*"/>
988                     </xsl:if>
989                     <xsl:text> </xsl:text>
990                     <a href="javascript:bwClockLaunch('eventEndDate');"><img src="{$resourcesRoot}/resources/clockIcon.gif" width="16" height="15" border="0"/></a>
991
992                     <select name="eventEndDate.tzid" id="endTzid" class="timezones">
993                       <xsl:if test="form/floating/input/@checked='checked'"><xsl:attribute name="disabled">true</xsl:attribute></xsl:if>
994                       <option value="-1">select timezone...</option>
995                       <xsl:variable name="endTzId" select="form/end/dateTime/tzid"/>
996                       <xsl:for-each select="/bedeworkadmin/timezones/timezone">
997                         <option>
998                           <xsl:attribute name="value"><xsl:value-of select="id"/></xsl:attribute>
999                           <xsl:if test="$endTzId = id"><xsl:attribute name="selected">selected</xsl:attribute></xsl:if>
1000                           <xsl:value-of select="name"/>
1001                         </option>
1002                       </xsl:for-each>
1003                     </select>
1004                   </span>
1005                 </div>
1006               </div>
1007               <br/>
1008               <div id="clock" class="invisible">
1009                 <xsl:call-template name="clock"/>
1010               </div>
1011               <div class="dateFields">
1012                 <xsl:choose>
1013                   <xsl:when test="form/end/type='D'">
1014                     <input type="radio" name="eventEndType" value="D" checked="checked" onClick="changeClass('endDateTime','invisible');changeClass('endDuration','shown');"/>
1015                   </xsl:when>
1016                   <xsl:otherwise>
1017                     <input type="radio" name="eventEndType" value="D" onClick="changeClass('endDateTime','invisible');changeClass('endDuration','shown');"/>
1018                   </xsl:otherwise>
1019                 </xsl:choose>
1020                 Duration
1021                 <xsl:variable name="endDurationClass">
1022                   <xsl:choose>
1023                     <xsl:when test="form/end/type='D'">shown</xsl:when>
1024                     <xsl:otherwise>invisible</xsl:otherwise>
1025                   </xsl:choose>
1026                 </xsl:variable>
1027                 <xsl:variable name="durationHrMinClass">
1028                   <xsl:choose>
1029                     <xsl:when test="form/allDay/input/@checked='checked'">invisible</xsl:when>
1030                     <xsl:otherwise>shown</xsl:otherwise>
1031                   </xsl:choose>
1032                 </xsl:variable>
1033                 <div class="{$endDurationClass}" id="endDuration">
1034                   <xsl:choose>
1035                     <xsl:when test="form/end/duration/weeks/input/@value = '0'">
1036                     <!-- we are using day, hour, minute format -->
1037                     <!-- must send either no week value or week value of 0 (zero) -->
1038                       <div class="durationBox">
1039                         <input type="radio" name="eventDuration.type" value="daytime" onclick="swapDurationType('daytime')" checked="checked"/>
1040                         <xsl:variable name="daysStr" select="form/end/duration/days/input/@value"/>
1041                         <input type="text" name="eventDuration.daysStr" size="2" value="{$daysStr}" id="durationDays"/>days
1042                         <span id="durationHrMin" class="{$durationHrMinClass}">
1043                           <xsl:variable name="hoursStr" select="form/end/duration/hours/input/@value"/>
1044                           <input type="text" name="eventDuration.hoursStr" size="2" value="{$hoursStr}" id="durationHours"/>hours
1045                           <xsl:variable name="minutesStr" select="form/end/duration/minutes/input/@value"/>
1046                           <input type="text" name="eventDuration.minutesStr" size="2" value="{$minutesStr}" id="durationMinutes"/>minutes
1047                         </span>
1048                       </div>
1049                       <span class="durationSpacerText">or</span>
1050                       <div class="durationBox">
1051                         <input type="radio" name="eventDuration.type" value="weeks" onclick="swapDurationType('week')"/>
1052                         <xsl:variable name="weeksStr" select="form/end/duration/weeks/input/@value"/>
1053                         <input type="text" name="eventDuration.weeksStr" size="2" value="{$weeksStr}" id="durationWeeks" disabled="true"/>weeks
1054                       </div>
1055                     </xsl:when>
1056                     <xsl:otherwise>
1057                       <!-- we are using week format -->
1058                       <div class="durationBox">
1059                         <input type="radio" name="eventDuration.type" value="daytime" onclick="swapDurationType('daytime')"/>
1060                         <xsl:variable name="daysStr" select="form/end/duration/days/input/@value"/>
1061                         <input type="text" name="eventDuration.daysStr" size="2" value="{$daysStr}" id="durationDays" disabled="true"/>days
1062                         <span id="durationHrMin" class="{$durationHrMinClass}">
1063                           <xsl:variable name="hoursStr" select="form/end/duration/hours/input/@value"/>
1064                           <input type="text" name="eventDuration.hoursStr" size="2" value="{$hoursStr}" id="durationHours" disabled="true"/>hours
1065                           <xsl:variable name="minutesStr" select="form/end/duration/minutes/input/@value"/>
1066                           <input type="text" name="eventDuration.minutesStr" size="2" value="{$minutesStr}" id="durationMinutes" disabled="true"/>minutes
1067                         </span>
1068                       </div>
1069                       <span class="durationSpacerText">or</span>
1070                       <div class="durationBox">
1071                         <input type="radio" name="eventDuration.type" value="weeks" onclick="swapDurationType('week')" checked="checked"/>
1072                         <xsl:variable name="weeksStr" select="form/end/duration/weeks/input/@value"/>
1073                         <input type="text" name="eventDuration.weeksStr" size="2" value="{$weeksStr}" id="durationWeeks"/>weeks
1074                       </div>
1075                     </xsl:otherwise>
1076                   </xsl:choose>
1077                 </div>
1078               </div>
1079               <br/>
1080               <div class="dateFields" id="noDuration">
1081                 <xsl:choose>
1082                   <xsl:when test="form/end/type='N'">
1083                     <input type="radio" name="eventEndType" value="N" checked="checked" onClick="changeClass('endDateTime','invisible');changeClass('endDuration','invisible');"/>
1084                   </xsl:when>
1085                   <xsl:otherwise>
1086                     <input type="radio" name="eventEndType" value="N" onClick="changeClass('endDateTime','invisible');changeClass('endDuration','invisible');"/>
1087                   </xsl:otherwise>
1088                 </xsl:choose>
1089                 This event has no duration / end date
1090               </div>
1091             </div>
1092           </td>
1093         </tr>
1094         <!-- Recurrence fields -->
1095         <!-- ================= -->
1096         <tr>
1097           <td class="fieldName">
1098             Recurrence:
1099           </td>
1100           <td>
1101             <xsl:choose>
1102               <xsl:when test="recurrenceId != ''">
1103                 <!-- recurrence instances can not themselves recur,
1104                      so provide access to master event -->
1105                 <em>This event is a recurrence instance.</em><br/>
1106                 <a href="{$event-fetchForUpdate}&amp;subid={$subscriptionId}&amp;calPath={$calPath}&amp;guid={$guid}" title="edit master (recurring event)">edit master event</a>
1107               </xsl:when>
1108               <xsl:otherwise>
1109                 <!-- has recurrenceId, so is master -->
1110
1111                 <div id="recurringSwitch">
1112                   <!-- set or remove "recurring" and show or hide all recurrence fields: -->
1113                   <input type="radio" name="recurring" value="true" onclick="swapRecurrence(this)">
1114                     <xsl:if test="form/recurringEntity = 'true'"><xsl:attribute name="checked">checked</xsl:attribute></xsl:if>
1115                   </input> event recurs
1116                   <input type="radio" name="recurring" value="false" onclick="swapRecurrence(this)">
1117                     <xsl:if test="form/recurringEntity = 'false'"><xsl:attribute name="checked">checked</xsl:attribute></xsl:if>
1118                   </input> event does not recur
1119                 </div>
1120
1121                 <!-- wrapper for all recurrence fields (rrules and rdates): -->
1122                 <div id="recurrenceFields" class="invisible">
1123                   <xsl:if test="form/recurringEntity = 'true'"><xsl:attribute name="class">visible</xsl:attribute></xsl:if>
1124
1125                   <!-- show or hide rrules fields: -->
1126                   <input type="checkbox" name="rrulesFlag" onclick="swapRrules(this)" value="on"/>
1127                   <span id="rrulesSwitch">
1128                     <xsl:choose>
1129                       <xsl:when test="form/recurrence">
1130                         change recurrence rules
1131                       </xsl:when>
1132                       <xsl:otherwise>
1133                         create recurrence rules
1134                       </xsl:otherwise>
1135                     </xsl:choose>
1136                   </span>
1137                   <span id="rrulesUiSwitch" class="invisible">
1138                     <input type="checkbox" name="rrulesUiSwitch" value="advanced" onchange="swapVisible(this,'advancedRrules')"/>
1139                     show advanced recurrence rules
1140                   </span>
1141
1142                   <xsl:if test="form/recurrence">
1143                     <!-- Output descriptive recurrence rules information.  Probably not
1144                          complete yet. Replace all strings so can be
1145                          more easily internationalized. -->
1146                     <div id="recurrenceInfo">
1147                       Every
1148                       <xsl:choose>
1149                         <xsl:when test="form/recurrence/interval &gt; 1">
1150                           <xsl:value-of select="form/recurrence/interval"/>
1151                         </xsl:when>
1152                       </xsl:choose>
1153                       <xsl:text> </xsl:text>
1154                       <xsl:choose>
1155                         <xsl:when test="form/recurrence/freq = 'HOURLY'">hour</xsl:when>
1156                         <xsl:when test="form/recurrence/freq = 'DAILY'">day</xsl:when>
1157                         <xsl:when test="form/recurrence/freq = 'WEEKLY'">week</xsl:when>
1158                         <xsl:when test="form/recurrence/freq = 'MONTHLY'">month</xsl:when>
1159                         <xsl:when test="form/recurrence/freq = 'YEARLY'">year</xsl:when>
1160                       </xsl:choose><xsl:if test="form/recurrence/interval &gt; 1">s</xsl:if>
1161                       <xsl:text> </xsl:text>
1162
1163                       <xsl:if test="form/recurrence/byday">
1164                         <xsl:for-each select="form/recurrence/byday/pos">
1165                           <xsl:if test="position() != 1"> and </xsl:if>
1166                           on
1167                           <xsl:choose>
1168                             <xsl:when test="@val='1'">
1169                               the first
1170                             </xsl:when>
1171                             <xsl:when test="@val='2'">
1172                               the second
1173                             </xsl:when>
1174                             <xsl:when test="@val='3'">
1175                               the third
1176                             </xsl:when>
1177                             <xsl:when test="@val='4'">
1178                               the fourth
1179                             </xsl:when>
1180                             <xsl:when test="@val='5'">
1181                               the fifth
1182                             </xsl:when>
1183                             <xsl:when test="@val='-1'">
1184                               the last
1185                             </xsl:when>
1186                             <!-- don't output "every" -->
1187                             <!--<xsl:otherwise>
1188                               every
1189                             </xsl:otherwise>-->
1190                           </xsl:choose>
1191                           <xsl:for-each select="day">
1192                             <xsl:if test="position() != 1 and position() = last()"> and </xsl:if>
1193                             <xsl:variable name="dayVal" select="."/>
1194                             <xsl:variable name="dayPos">
1195                               <xsl:for-each select="/bedeworkadmin/recurdayvals/val">
1196                                 <xsl:if test="node() = $dayVal"><xsl:value-of select="position()"/></xsl:if>
1197                               </xsl:for-each>
1198                             </xsl:variable>
1199                             <xsl:value-of select="/bedeworkadmin/shortdaynames/val[position() = $dayPos]"/>
1200                             <xsl:if test="position() != last()">, </xsl:if>
1201                           </xsl:for-each>
1202                         </xsl:for-each>
1203                       </xsl:if>
1204
1205                       <xsl:if test="form/recurrence/bymonth">
1206                         in
1207                         <xsl:for-each select="form/recurrence/bymonth/val">
1208                           <xsl:if test="position() != 1 and position() = last()"> and </xsl:if>
1209                           <xsl:variable name="monthNum" select="number(.)"/>
1210                           <xsl:value-of select="/bedeworkadmin/monthlabels/val[position() = $monthNum]"/>
1211                           <xsl:if test="position() != last()">, </xsl:if>
1212                         </xsl:for-each>
1213                       </xsl:if>
1214
1215                       <xsl:if test="form/recurrence/bymonthday">
1216                         on the
1217                         <xsl:apply-templates select="form/recurrence/bymonthday/val" mode="weekMonthYearNumbers"/>
1218                         day<xsl:if test="form/recurrence/bymonthday/val[position()=2]">s</xsl:if> of the month
1219                       </xsl:if>
1220
1221                       <xsl:if test="form/recurrence/byyearday">
1222                         on the
1223                         <xsl:apply-templates select="form/recurrence/byyearday/val" mode="weekMonthYearNumbers"/>
1224                         day<xsl:if test="form/recurrence/byyearday/val[position()=2]">s</xsl:if> of the year
1225                       </xsl:if>
1226
1227                       <xsl:if test="form/recurrence/byweekno">
1228                         in the
1229                         <xsl:apply-templates select="form/recurrence/byweekno/val" mode="weekMonthYearNumbers"/>
1230                         week<xsl:if test="form/recurrence/byweekno/val[position()=2]">s</xsl:if> of the year
1231                       </xsl:if>
1232
1233                       repeating
1234                       <xsl:choose>
1235                         <xsl:when test="form/recurrence/count = '-1'">forever</xsl:when>
1236                         <xsl:when test="form/recurrence/until">
1237                           <xsl:value-of select="form/recurrence/until"/>
1238                         </xsl:when>
1239                         <xsl:otherwise>
1240                           <xsl:value-of select="form/recurrence/count"/>
1241                           time<xsl:if test="form/recurrence/count &gt; 1">s</xsl:if>
1242                         </xsl:otherwise>
1243                       </xsl:choose>
1244                     </div>
1245                   </xsl:if>
1246
1247                   <!-- set these dynamically when form is submitted -->
1248                   <input type="hidden" name="interval" value=""/>
1249                   <input type="hidden" name="count" value=""/>
1250                   <input type="hidden" name="until" value=""/>
1251                   <input type="hidden" name="byday" value=""/>
1252                   <input type="hidden" name="bymonthday" value=""/>
1253                   <input type="hidden" name="bymonth" value=""/>
1254                   <input type="hidden" name="byweekno" value=""/>
1255                   <input type="hidden" name="byyearday" value=""/>
1256                   <input type="hidden" name="wkst" value=""/>
1257                   <input type="hidden" name="setpos" value=""/>
1258
1259                   <!-- wrapper for rrules: -->
1260                   <table id="rrulesTable" cellspacing="0" class="invisible">
1261                     <tr>
1262                       <td id="recurrenceFrequency" rowspan="2">
1263                         <strong>Frequency:</strong><br/>
1264                         <input type="radio" name="freq" value="NONE" onclick="showRrules(this.value)" checked="checked"/>none<br/>
1265                         <!--<input type="radio" name="freq" value="HOURLY" onclick="showRrules(this.value)"/>hourly<br/>-->
1266                         <input type="radio" name="freq" value="DAILY" onclick="showRrules(this.value)"/>daily<br/>
1267                         <input type="radio" name="freq" value="WEEKLY" onclick="showRrules(this.value)"/>weekly<br/>
1268                         <input type="radio" name="freq" value="MONTHLY" onclick="showRrules(this.value)"/>monthly<br/>
1269                         <input type="radio" name="freq" value="YEARLY" onclick="showRrules(this.value)"/>yearly
1270                       </td>
1271                       <!-- recurrence count, until, forever -->
1272                       <td id="recurrenceUntil">
1273                         <div id="noneRecurrenceRules">
1274                           no recurrence rules
1275                         </div>
1276                         <div id="recurrenceUntilRules" class="invisible">
1277                           <strong>Repeat:</strong>
1278                           <p>
1279                             <input type="radio" name="recurCountUntil" value="forever">
1280                               <xsl:if test="not(form/recurring) or form/recurring/count = '-1'">
1281                                 <xsl:attribute name="checked">checked</xsl:attribute>
1282                               </xsl:if>
1283                             </input>
1284                             forever
1285                             <input type="radio" name="recurCountUntil" value="count" id="recurCount">
1286                               <xsl:if test="form/recurring/count != '-1'">
1287                                 <xsl:attribute name="checked">checked</xsl:attribute>
1288                               </xsl:if>
1289                             </input>
1290                             <input type="text" value="1" size="2" name="countHolder"  onfocus="selectRecurCountUntil('recurCount')">
1291                               <xsl:if test="form/recurring/count and form/recurring/count != '-1'">
1292                                 <xsl:attribute name="value"><xsl:value-of select="form/recurring/count"/></xsl:attribute>
1293                               </xsl:if>
1294                             </input>
1295                             time(s)
1296                             <input type="radio" name="recurCountUntil" value="until" id="recurUntil">
1297                               <xsl:if test="form/recurring/until">
1298                                 <xsl:attribute name="checked">checked</xsl:attribute>
1299                               </xsl:if>
1300                             </input>
1301                             until
1302                             <span id="untilHolder">
1303                               <span dojoType="dropdowndatepicker" formatLength="medium" value="today" saveFormat="yyyyMMdd" id="bwEventWidgetUntilDate" iconURL="{$resourcesRoot}/resources/calIcon.gif">
1304                                 <xsl:attribute name="value"><xsl:value-of select="form/start/rfc3339DateTime"/></xsl:attribute>
1305                                 <xsl:text> </xsl:text>
1306                               </span>
1307                             </span>
1308                           </p>
1309                         </div>
1310                       </td>
1311                     </tr>
1312                     <tr>
1313                       <td id="advancedRrules" class="invisible">
1314                         <!-- hourly -->
1315                         <div id="hourlyRecurrenceRules" class="invisible">
1316                           <p>
1317                             <strong>Interval:</strong>
1318                             every
1319                             <input type="text" name="hourlyInterval" size="2" value="1">
1320                               <xsl:if test="form/recurrence/interval">
1321                                 <xsl:attribute name="value"><xsl:value-of select="form/recurrence/interval"/></xsl:attribute>
1322                               </xsl:if>
1323                             </input>
1324                             hour(s)
1325                           </p>
1326                         </div>
1327                         <!-- daily -->
1328                         <div id="dailyRecurrenceRules" class="invisible">
1329                           <p>
1330                             <strong>Interval:</strong>
1331                             every
1332                             <input type="text" name="dailyInterval" size="2" value="1">
1333                               <xsl:if test="form/recurrence/interval">
1334                                 <xsl:attribute name="value"><xsl:value-of select="form/recurrence/interval"/></xsl:attribute>
1335                               </xsl:if>
1336                             </input>
1337                             day(s)
1338                           </p>
1339                           <p>
1340                             <input type="checkbox" name="swapDayMonthCheckBoxList" value="" onclick="swapVisible(this,'dayMonthCheckBoxList')"/>
1341                             in these months:
1342                             <div id="dayMonthCheckBoxList" class="invisible">
1343                               <xsl:for-each select="/bedeworkadmin/monthlabels/val">
1344                                 <xsl:variable name="pos"><xsl:value-of select="position()"/></xsl:variable>
1345                                 <span class="chkBoxListItem">
1346                                   <input type="checkbox" name="dayMonths">
1347                                     <xsl:attribute name="value"><xsl:value-of select="/bedeworkadmin/monthvalues/val[position() = $pos]"/></xsl:attribute>
1348                                   </input>
1349                                   <xsl:value-of select="."/>
1350                                 </span>
1351                                 <xsl:if test="$pos mod 6 = 0"><br/></xsl:if>
1352                               </xsl:for-each>
1353                             </div>
1354                           </p>
1355                           <!--<p>
1356                             <input type="checkbox" name="swapDaySetPos" value="" onclick="swapVisible(this,'daySetPos')"/>
1357                             limit to:
1358                             <div id="daySetPos" class="invisible">
1359                             </div>
1360                           </p>-->
1361                         </div>
1362                         <!-- weekly -->
1363                         <div id="weeklyRecurrenceRules" class="invisible">
1364                           <p>
1365                             <strong>Interval:</strong>
1366                             every
1367                             <input type="text" name="weeklyInterval" size="2" value="1">
1368                               <xsl:if test="form/recurrence/interval">
1369                                 <xsl:attribute name="value"><xsl:value-of select="form/recurrence/interval"/></xsl:attribute>
1370                               </xsl:if>
1371                             </input>
1372                             week(s) on:
1373                           </p>
1374                           <p>
1375                             <div id="weekRecurFields">
1376                               <xsl:call-template name="byDayChkBoxList">
1377                                 <xsl:with-param name="name">byDayWeek</xsl:with-param>
1378                               </xsl:call-template>
1379                             </div>
1380                           </p>
1381                           <p class="weekRecurLinks">
1382                             <a href="javascript:recurSelectWeekdays('weekRecurFields')">select weekdays</a> |
1383                             <a href="javascript:recurSelectWeekends('weekRecurFields')">select weekends</a>
1384                           </p>
1385                           <p>
1386                             Week start:
1387                             <select name="weekWkst">
1388                               <xsl:for-each select="/bedeworkadmin/shortdaynames/val">
1389                                 <xsl:variable name="pos" select="position()"/>
1390                                 <option>
1391                                   <xsl:attribute name="value"><xsl:value-of select="/bedeworkadmin/recurdayvals/val[position() = $pos]"/></xsl:attribute>
1392                                   <xsl:value-of select="."/>
1393                                 </option>
1394                               </xsl:for-each>
1395                             </select>
1396                           </p>
1397                         </div>
1398                         <!-- monthly -->
1399                         <div id="monthlyRecurrenceRules" class="invisible">
1400                           <p>
1401                             <strong>Interval:</strong>
1402                             every
1403                             <input type="text" name="monthlyInterval" size="2" value="1">
1404                               <xsl:if test="form/recurrence/interval">
1405                                 <xsl:attribute name="value"><xsl:value-of select="form/recurrence/interval"/></xsl:attribute>
1406                               </xsl:if>
1407                             </input>
1408                             month(s)
1409                           </p>
1410                           <div id="monthRecurFields">
1411                             <div id="monthRecurFields1">
1412                               on
1413                               <select name="bymonthposPos1" width="7em" onchange="changeClass('monthRecurFields2','shown')">
1414                                 <xsl:call-template name="recurrenceDayPosOptions"/>
1415                               </select>
1416                               <xsl:call-template name="byDayChkBoxList"/>
1417                             </div>
1418                             <xsl:call-template name="buildRecurFields">
1419                               <xsl:with-param name="current">2</xsl:with-param>
1420                               <xsl:with-param name="total">10</xsl:with-param>
1421                               <xsl:with-param name="name">month</xsl:with-param>
1422                             </xsl:call-template>
1423                           </div>
1424                           <p>
1425                             <input type="checkbox" name="swapMonthDaysCheckBoxList" value="" onclick="swapVisible(this,'monthDaysCheckBoxList')"/>
1426                             on these days:<br/>
1427                             <div id="monthDaysCheckBoxList" class="invisible">
1428                               <xsl:call-template name="buildCheckboxList">
1429                                 <xsl:with-param name="current">1</xsl:with-param>
1430                                 <xsl:with-param name="end">31</xsl:with-param>
1431                                 <xsl:with-param name="name">monthDayBoxes</xsl:with-param>
1432                               </xsl:call-template>
1433                             </div>
1434                           </p>
1435                         </div>
1436                         <!-- yearly -->
1437                         <div id="yearlyRecurrenceRules" class="invisible">
1438                           <p>
1439                             <strong>Interval:</strong>
1440                             every
1441                             <input type="text" name="yearlyInterval" size="2" value="1">
1442                               <xsl:if test="form/recurrence/interval">
1443                                 <xsl:attribute name="value"><xsl:value-of select="form/recurrence/interval"/></xsl:attribute>
1444                               </xsl:if>
1445                             </input>
1446                             years(s)
1447                           </p>
1448                           <div id="yearRecurFields">
1449                             <div id="yearRecurFields1">
1450                               on
1451                               <select name="byyearposPos1" width="7em" onchange="changeClass('yearRecurFields2','shown')">
1452                                 <xsl:call-template name="recurrenceDayPosOptions"/>
1453                               </select>
1454                               <xsl:call-template name="byDayChkBoxList"/>
1455                             </div>
1456                             <xsl:call-template name="buildRecurFields">
1457                               <xsl:with-param name="current">2</xsl:with-param>
1458                               <xsl:with-param name="total">10</xsl:with-param>
1459                               <xsl:with-param name="name">year</xsl:with-param>
1460                             </xsl:call-template>
1461                           </div>
1462                           <p>
1463                             <input type="checkbox" name="swapYearMonthCheckBoxList" value="" onclick="swapVisible(this,'yearMonthCheckBoxList')"/>
1464                             in these months:
1465                             <div id="yearMonthCheckBoxList" class="invisible">
1466                               <xsl:for-each select="/bedeworkadmin/monthlabels/val">
1467                                 <xsl:variable name="pos"><xsl:value-of select="position()"/></xsl:variable>
1468                                 <span class="chkBoxListItem">
1469                                   <input type="checkbox" name="yearMonths">
1470                                     <xsl:attribute name="value"><xsl:value-of select="/bedeworkadmin/monthvalues/val[position() = $pos]"/></xsl:attribute>
1471                                   </input>
1472                                   <xsl:value-of select="."/>
1473                                 </span>
1474                                 <xsl:if test="$pos mod 6 = 0"><br/></xsl:if>
1475                               </xsl:for-each>
1476                             </div>
1477                           </p>
1478                           <p>
1479                             <input type="checkbox" name="swapYearMonthDaysCheckBoxList" value="" onclick="swapVisible(this,'yearMonthDaysCheckBoxList')"/>
1480                             on these days of the month:<br/>
1481                             <div id="yearMonthDaysCheckBoxList" class="invisible">
1482                               <xsl:call-template name="buildCheckboxList">
1483                                 <xsl:with-param name="current">1</xsl:with-param>
1484                                 <xsl:with-param name="end">31</xsl:with-param>
1485                                 <xsl:with-param name="name">yearMonthDayBoxes</xsl:with-param>
1486                               </xsl:call-template>
1487                             </div>
1488                           </p>
1489                           <p>
1490                             <input type="checkbox" name="swapYearWeeksCheckBoxList" value="" onclick="swapVisible(this,'yearWeeksCheckBoxList')"/>
1491                             in these weeks of the year:<br/>
1492                             <div id="yearWeeksCheckBoxList" class="invisible">
1493                               <xsl:call-template name="buildCheckboxList">
1494                                 <xsl:with-param name="current">1</xsl:with-param>
1495                                 <xsl:with-param name="end">53</xsl:with-param>
1496                                 <xsl:with-param name="name">yearWeekBoxes</xsl:with-param>
1497                               </xsl:call-template>
1498                             </div>
1499                           </p>
1500                           <p>
1501                             <input type="checkbox" name="swapYearDaysCheckBoxList" value="" onclick="swapVisible(this,'yearDaysCheckBoxList')"/>
1502                             on these days of the year:<br/>
1503                             <div id="yearDaysCheckBoxList" class="invisible">
1504                               <xsl:call-template name="buildCheckboxList">
1505                                 <xsl:with-param name="current">1</xsl:with-param>
1506                                 <xsl:with-param name="end">366</xsl:with-param>
1507                                 <xsl:with-param name="name">yearDayBoxes</xsl:with-param>
1508                               </xsl:call-template>
1509                             </div>
1510                           </p>
1511                           <p>
1512                             Week start:
1513                             <select name="yearWkst">
1514                               <xsl:for-each select="/bedeworkadmin/shortdaynames/val">
1515                                 <xsl:variable name="pos" select="position()"/>
1516                                 <option>
1517                                   <xsl:attribute name="value"><xsl:value-of select="/bedeworkadmin/recurdayvals/val[position() = $pos]"/></xsl:attribute>
1518                                   <xsl:value-of select="."/>
1519                                 </option>
1520                               </xsl:for-each>
1521                             </select>
1522                           </p>
1523                         </div>
1524                       </td>
1525                     </tr>
1526                   </table>
1527                   <!-- recurrence dates (rdates) -->
1528                   <div id="recurrenceDatesButton">
1529                     <input type="button" value="add/remove recurrence dates" onclick="launchSizedWindow('{$event-showRdates}','560','400')"/>
1530                   </div>
1531                 </div>
1532               </xsl:otherwise>
1533             </xsl:choose>
1534           </td>
1535         </tr>
1536         <!--  Status  -->
1537         <tr>
1538           <td class="fieldName">
1539             Status:
1540           </td>
1541           <td>
1542             <xsl:choose>
1543               <xsl:when test="form/status = 'TENTATIVE'">
1544                 <input type="radio" name="event.status" value="CONFIRMED"/>confirmed <input type="radio" name="event.status" value="TENTATIVE" checked="checked"/>tentative <input type="radio" name="event.status" value="CANCELLED"/>cancelled
1545               </xsl:when>
1546               <xsl:when test="form/status = 'CANCELLED'">
1547                 <input type="radio" name="event.status" value="CONFIRMED"/>confirmed <input type="radio" name="event.status" value="TENTATIVE"/>tentative <input type="radio" name="event.status" value="CANCELLED" checked="checked"/>cancelled
1548               </xsl:when>
1549               <xsl:otherwise>
1550                 <input type="radio" name="event.status" value="CONFIRMED" checked="checked"/>confirmed <input type="radio" name="event.status" value="TENTATIVE"/>tentative <input type="radio" name="event.status" value="CANCELLED"/>cancelled
1551               </xsl:otherwise>
1552             </xsl:choose>
1553           </td>
1554         </tr>
1555         <!--  Description  -->
1556         <tr>
1557           <td class="fieldName">
1558             Description:
1559           </td>
1560           <td>
1561             <xsl:copy-of select="form/desc/*"/>
1562             <div class="fieldInfo">
1563               Enter all pertinent information, including the academic titles of
1564               all speakers and/or participants.
1565               <span class="maxCharNotice">(<xsl:value-of select="form/descLength"/> characters max.)</span>
1566             </div>
1567           </td>
1568         </tr>
1569         <!-- Cost -->
1570         <tr>
1571           <td class="optional">
1572             Price:
1573           </td>
1574           <td>
1575             <xsl:copy-of select="form/cost/*"/>
1576             <xsl:text> </xsl:text>
1577             <span class="fieldInfo">(optional: if any, and place to purchase tickets)</span>
1578           </td>
1579         </tr>
1580         <!-- Url -->
1581         <tr>
1582           <td class="optional">
1583             URL:
1584           </td>
1585           <td>
1586             <xsl:copy-of select="form/link/*"/>
1587             <xsl:text> </xsl:text>
1588             <span class="fieldInfo">(optional: for more information about the event)</span>
1589           </td>
1590         </tr>
1591         <!-- Location -->
1592         <tr>
1593           <td class="fieldName">
1594             Location:**
1595           </td>
1596           <td>
1597             <xsl:if test="form/location/preferred/select/option">
1598               <select name="prefLocationId" id="eventFormPrefLocationList">
1599                 <option value="-1">
1600                   Select preferred:
1601                 </option>
1602                 <xsl:copy-of select="form/location/preferred/select/*"/>
1603               </select>
1604               or Location (all):
1605             </xsl:if>
1606             <select name="allLocationId" id="eventFormLocationList">
1607               <option value="-1">
1608                 Select:
1609               </option>
1610               <xsl:copy-of select="form/location/all/select/*"/>
1611             </select>
1612           </td>
1613         </tr>
1614
1615         <xsl:if test="form/location/address">
1616           <tr>
1617             <td class="fieldName" colspan="2">
1618               <span class="std-text">
1619                 <span class="bold">or</span> add</span>
1620             </td>
1621           </tr>
1622           <tr>
1623             <td class="fieldName">
1624               Address:
1625             </td>
1626             <td>
1627               <xsl:variable name="addressFieldName" select="form/location/address/input/@name"/>
1628               <xsl:variable name="calLocations">
1629                 <xsl:for-each select="form/location/all/select/option">"<xsl:value-of select="."/>"<xsl:if test="position()!=last()">,</xsl:if>
1630                 </xsl:for-each>
1631               </xsl:variable>
1632               <input type="text" size="30" name="{$addressFieldName}" autocomplete="off" onfocus="autoComplete(this,event,new Array({$calLocations}));"/>
1633               <div class="fieldInfo">
1634                 Please include room, building, and campus (if not Seattle).
1635               </div>
1636             </td>
1637           </tr>
1638           <tr>
1639             <td class="optional">
1640               <span class="std-text">Location URL:</span>
1641             </td>
1642             <td>
1643               <xsl:copy-of select="form/location/link/*"/>
1644               <xsl:text> </xsl:text>
1645               <span class="fieldInfo">(optional: for information about the location)</span>
1646             </td>
1647           </tr>
1648         </xsl:if>
1649
1650         <!-- Contact -->
1651         <tr>
1652           <td class="fieldName">
1653             Contact:**
1654           </td>
1655           <td>
1656             <xsl:if test="form/contact/preferred/select/option">
1657               <select name="prefContactId" id="eventFormContactList">
1658                 <option value="-1">
1659                   Select preferred:
1660                 </option>option>
1661                 <xsl:copy-of select="form/contact/preferred/select/*"/>
1662               </select>
1663               or Contact (all):
1664             </xsl:if>
1665             <select name="allContactId" id="eventFormPrefContactList">
1666               <option value="-1">
1667                 Select:
1668               </option>
1669               <xsl:copy-of select="form/contact/all/select/*"/>
1670             </select>
1671           </td>
1672         </tr>
1673
1674
1675         <!--  Category  -->
1676         <tr>
1677           <td class="fieldName">
1678             Categories:**
1679           </td>
1680           <td>
1681             <xsl:if test="form/categories/preferred/category and /bedeworkadmin/creating='true'">
1682               <input type="radio" name="categoryCheckboxes" value="preferred" checked="checked" onclick="changeClass('preferredCategoryCheckboxes','shown');changeClass('allCategoryCheckboxes','invisible');"/>show preferred
1683               <input type="radio" name="categoryCheckboxes" value="all" onclick="changeClass('preferredCategoryCheckboxes','invisible');changeClass('allCategoryCheckboxes','shown')"/>show all<br/>
1684               <table cellpadding="0" id="preferredCategoryCheckboxes">
1685                 <tr>
1686                   <xsl:variable name="catCount" select="count(form/categories/preferred/category)"/>
1687                   <td>
1688                     <xsl:for-each select="form/categories/preferred/category[position() &lt;= ceiling($catCount div 2)]">
1689                       <input type="checkbox" name="categoryKey">
1690                         <xsl:attribute name="value"><xsl:value-of select="keyword"/></xsl:attribute>
1691                         <xsl:attribute name="id">pref-<xsl:value-of select="keyword"/></xsl:attribute>
1692                         <xsl:attribute name="onchange">setCatChBx('pref-<xsl:value-of select="keyword"/>','all-<xsl:value-of select="keyword"/>')</xsl:attribute>
1693                         <xsl:if test="keyword = ../../current//category/keyword"><xsl:attribute name="checked">checked</xsl:attribute></xsl:if>
1694                         <xsl:value-of select="keyword"/>
1695                       </input><br/>
1696                     </xsl:for-each>
1697                   </td>
1698                   <td>
1699                     <xsl:for-each select="form/categories/preferred/category[position() &gt; ceiling($catCount div 2)]">
1700                       <input type="checkbox" name="categoryKey">
1701                         <xsl:attribute name="value"><xsl:value-of select="keyword"/></xsl:attribute>
1702                         <xsl:attribute name="id">pref-<xsl:value-of select="keyword"/></xsl:attribute>
1703                         <xsl:attribute name="onchange">setCatChBx('pref-<xsl:value-of select="keyword"/>','all-<xsl:value-of select="keyword"/>')</xsl:attribute>
1704                         <xsl:if test="keyword = ../../current//category/keyword"><xsl:attribute name="checked">checked</xsl:attribute></xsl:if>
1705                         <xsl:value-of select="keyword"/>
1706                       </input><br/>
1707                     </xsl:for-each>
1708                   </td>
1709                 </tr>
1710               </table>
1711             </xsl:if>
1712             <table cellpadding="0" id="allCategoryCheckboxes">
1713               <xsl:if test="form/categories/preferred/category and /bedeworkadmin/creating='true'">
1714                 <xsl:attribute name="class">invisible</xsl:attribute>
1715               </xsl:if>
1716               <tr>
1717                 <xsl:variable name="catCount" select="count(form/categories/all/category)"/>
1718                 <td>
1719                   <xsl:for-each select="form/categories/all/category[position() &lt;= ceiling($catCount div 2)]">
1720                     <input type="checkbox" name="categoryKey">
1721                       <xsl:attribute name="value"><xsl:value-of select="keyword"/></xsl:attribute>
1722                       <xsl:if test="/bedeworkadmin/creating='true'">
1723                         <xsl:attribute name="id">all-<xsl:value-of select="keyword"/></xsl:attribute>
1724                         <xsl:attribute name="onchange">setCatChBx('all-<xsl:value-of select="keyword"/>','pref-<xsl:value-of select="keyword"/>')</xsl:attribute>
1725                       </xsl:if>
1726                       <xsl:if test="keyword = ../../current//category/keyword">
1727                         <xsl:attribute name="checked">checked</xsl:attribute>
1728                       </xsl:if>
1729                       <xsl:value-of select="keyword"/>
1730                     </input><br/>
1731                   </xsl:for-each>
1732                 </td>
1733                 <td>
1734                   <xsl:for-each select="form/categories/all/category[position() &gt; ceiling($catCount div 2)]">
1735                     <input type="checkbox" name="categoryKey">
1736                       <xsl:attribute name="value"><xsl:value-of select="keyword"/></xsl:attribute>
1737                       <xsl:if test="/bedeworkadmin/creating='true'">
1738                         <xsl:attribute name="id">all-<xsl:value-of select="keyword"/></xsl:attribute>
1739                         <xsl:attribute name="onchange">setCatChBx('all-<xsl:value-of select="keyword"/>','pref-<xsl:value-of select="keyword"/>')</xsl:attribute>
1740                       </xsl:if>
1741                       <xsl:if test="keyword = ../../current//category/keyword">
1742                         <xsl:attribute name="checked">checked</xsl:attribute>
1743                       </xsl:if>
1744                       <xsl:value-of select="keyword"/>
1745                     </input><br/>
1746                   </xsl:for-each>
1747                 </td>
1748               </tr>
1749             </table>
1750           </td>
1751         </tr>
1752         <!-- note -->
1753         <tr>
1754           <td colspan="2" style="padding-top: 1em;">
1755             <span class="fieldInfo">
1756               **<strong>If "preferred values" are enabled</strong>
1757               by your administrator, the category, location, and contact lists will
1758               contain only those value you've used previously.  If you don't find the value
1759               you need in one of these lists, use the "all" list adjacent to each
1760               of these fields.  The event you select from the "all" list will be added
1761               to your preferred list from that point on.  <strong>Note: if you don't
1762               find a location or contact at all, you can add a new one from the
1763               <a href="{$setup}">main menu</a>.</strong>
1764               Only administrators can create categories, however.
1765               To make sure you've used the
1766               correct category, please see the
1767               <a href="" target="_blank">Calendar Definitions</a>
1768             </span>
1769           </td>
1770         </tr>
1771
1772         <xsl:if test="form/contact/name">
1773           <tr>
1774             <td class="fieldName" colspan="2">
1775               <span class="std-text">
1776                 <span class="bold">or</span> add</span>
1777             </td>
1778           </tr>
1779           <tr>
1780             <td class="fieldName">
1781               Contact (name):
1782             </td>
1783             <td>
1784               <xsl:copy-of select="form/contact/name/*"/>
1785             </td>
1786           </tr>
1787           <tr>
1788             <td class="fieldName">
1789               Contact Phone Number:
1790             </td>
1791             <td>
1792               <xsl:copy-of select="form/contact/phone/*"/>
1793               <xsl:text> </xsl:text>
1794               <span class="fieldInfo">(optional)</span>
1795             </td>
1796           </tr>
1797           <tr>
1798             <td class="optional">
1799               Contact's URL:
1800             </td>
1801             <td>
1802               <xsl:copy-of select="form/contact/link/*"/>
1803               <xsl:text> </xsl:text>
1804               <span class="fieldInfo">(optional)</span>
1805             </td>
1806           </tr>
1807           <tr>
1808             <td class="optional">
1809               Contact Email Address:
1810             </td>
1811             <td>
1812               <xsl:copy-of select="form/contact/email/*"/>
1813               <xsl:text> </xsl:text>
1814               <span class="fieldInfo">(optional)</span> test
1815               <div id="contactEmailAlert">&#160;</div> <!-- space for email warning -->
1816             </td>
1817           </tr>
1818         </xsl:if>
1819       </table>
1820
1821       <table border="0" id="submitTable">
1822         <tr>
1823           <xsl:choose>
1824             <xsl:when test="/bedeworkadmin/creating='true'">
1825               <td>
1826                 <input type="submit" name="addEvent" value="Add Event"/>
1827                 <input type="submit" name="cancelled" value="Cancel"/>
1828                 <input type="reset" value="Clear"/>
1829               </td>
1830             </xsl:when>
1831             <xsl:otherwise>
1832               <td>
1833                 <input type="submit" name="updateEvent" value="Update Event"/>
1834                 <input type="submit" name="cancelled" value="Cancel"/>
1835                 <input type="submit" name="copy" value="Duplicate Event"/>
1836               </td>
1837               <td align="right">
1838                 <input type="submit" name="delete" value="Delete Event"/>
1839               </td>
1840             </xsl:otherwise>
1841           </xsl:choose>
1842         </tr>
1843       </table>
1844     </form>
1845   </xsl:template>
1846
1847   <xsl:template match="val" mode="weekMonthYearNumbers">
1848     <xsl:if test="position() != 1 and position() = last()"> and </xsl:if>
1849     <xsl:value-of select="."/><xsl:choose>
1850       <xsl:when test="substring(., string-length(.)-1, 2) = '11' or
1851                       substring(., string-length(.)-1, 2) = '12' or
1852                       substring(., string-length(.)-1, 2) = '13'">th</xsl:when>
1853       <xsl:when test="substring(., string-length(.), 1) = '1'">st</xsl:when>
1854       <xsl:when test="substring(., string-length(.), 1) = '2'">nd</xsl:when>
1855       <xsl:when test="substring(., string-length(.), 1) = '3'">rd</xsl:when>
1856       <xsl:otherwise>th</xsl:otherwise>
1857     </xsl:choose>
1858     <xsl:if test="position() != last()">, </xsl:if>
1859   </xsl:template>
1860
1861   <xsl:template name="byDayChkBoxList">
1862     <xsl:param name="name"/>
1863     <xsl:for-each select="/bedeworkadmin/shortdaynames/val">
1864       <xsl:variable name="pos" select="position()"/>
1865       <input type="checkbox">
1866         <xsl:attribute name="value"><xsl:value-of select="/bedeworkadmin/recurdayvals/val[position() = $pos]"/></xsl:attribute>
1867         <xsl:attribute name="name"><xsl:value-of select="$name"/></xsl:attribute>
1868       </input>
1869       <xsl:value-of select="."/>
1870     </xsl:for-each>
1871   </xsl:template>
1872
1873   <xsl:template name="buildCheckboxList">
1874     <xsl:param name="current"/>
1875     <xsl:param name="end"/>
1876     <xsl:param name="name"/>
1877     <xsl:param name="splitter">10</xsl:param>
1878     <span class="chkBoxListItem">
1879       <input type="checkbox">
1880         <xsl:attribute name="name"><xsl:value-of select="$name"/></xsl:attribute>
1881         <xsl:attribute name="value"><xsl:value-of select="$current"/></xsl:attribute>
1882       </input>
1883       <xsl:value-of select="$current"/>
1884     </span>
1885     <xsl:if test="$current mod $splitter = 0"><br/></xsl:if>
1886     <xsl:if test="$current = $end"><br/></xsl:if>
1887     <xsl:if test="$current &lt; $end">
1888       <xsl:call-template name="buildCheckboxList">
1889         <xsl:with-param name="current"><xsl:value-of select="$current + 1"/></xsl:with-param>
1890         <xsl:with-param name="end"><xsl:value-of select="$end"/></xsl:with-param>
1891         <xsl:with-param name="name"><xsl:value-of select="$name"/></xsl:with-param>
1892       </xsl:call-template>
1893     </xsl:if>
1894   </xsl:template>
1895
1896   <xsl:template name="recurrenceDayPosOptions">
1897     <option value="0">none</option>
1898     <option value="1">the first</option>
1899     <option value="2">the second</option>
1900     <option value="3">the third</option>
1901     <option value="4">the fourth</option>
1902     <option value="5">the fifth</option>
1903     <option value="-1">the last</option>
1904     <option value="">every</option>
1905   </xsl:template>
1906
1907   <xsl:template name="buildRecurFields">
1908     <xsl:param name="current"/>
1909     <xsl:param name="total"/>
1910     <xsl:param name="name"/>
1911     <div class="invisible">
1912       <xsl:attribute name="id"><xsl:value-of select="$name"/>RecurFields<xsl:value-of select="$current"/></xsl:attribute>
1913       and
1914       <select width="12em">
1915         <xsl:attribute name="name">by<xsl:value-of select="$name"/>posPos<xsl:value-of select="$current"/></xsl:attribute>
1916         <xsl:if test="$current != $total">
1917           <xsl:attribute name="onchange">changeClass('<xsl:value-of select="$name"/>RecurFields<xsl:value-of select="$current+1"/>','shown')</xsl:attribute>
1918         </xsl:if>
1919         <xsl:call-template name="recurrenceDayPosOptions"/>
1920       </select>
1921       <xsl:call-template name="byDayChkBoxList"/>
1922     </div>
1923     <xsl:if test="$current &lt; $total">
1924       <xsl:call-template name="buildRecurFields">
1925         <xsl:with-param name="current"><xsl:value-of select="$current+1"/></xsl:with-param>
1926         <xsl:with-param name="total"><xsl:value-of select="$total"/></xsl:with-param>
1927         <xsl:with-param name="name"><xsl:value-of select="$name"/></xsl:with-param>
1928       </xsl:call-template>
1929     </xsl:if>
1930   </xsl:template>
1931
1932   <xsl:template name="buildNumberOptions">
1933     <xsl:param name="current"/>
1934     <xsl:param name="total"/>
1935     <option value="{$current}"><xsl:value-of select="$current"/></option>
1936     <xsl:if test="$current &lt; $total">
1937       <xsl:call-template name="buildNumberOptions">
1938         <xsl:with-param name="current"><xsl:value-of select="$current+1"/></xsl:with-param>
1939         <xsl:with-param name="total"><xsl:value-of select="$total"/></xsl:with-param>
1940       </xsl:call-template>
1941     </xsl:if>
1942   </xsl:template>
1943
1944   <xsl:template name="clock">
1945     <div id="bwClock">
1946       <!-- Bedework 24-Hour Clock time selection widget
1947            used with resources/bwClock.js and resources/bwClock.css -->
1948       <div id="bwClockClock">
1949         <img id="clockMap" src="{$resourcesRoot}/resources/clockMap.gif" width="368" height="368" border="0" alt="" usemap="#bwClockMap" />
1950       </div>
1951       <div id="bwClockCover">
1952         &#160;
1953         <!-- this is a special effect div used simply to cover the pixelated edge
1954              where the clock meets the clock box title --></div>
1955       <div id="bwClockBox">
1956         <h2>
1957           Bedework 24-Hour Clock
1958         </h2>
1959         <div id="bwClockDateTypeIndicator">
1960           type
1961         </div>
1962         <div id="bwClockTime">
1963           select time
1964         </div>
1965         <div id="bwClockSwitch">
1966           switch
1967         </div>
1968         <div id="bwClockCloseText">
1969           close
1970         </div>
1971         <div id="bwClockCloseButton">
1972           <a href="javascript:bwClockClose();">X</a>
1973         </div>
1974       </div>
1975       <map name="bwClockMap" id="bwClockMap">
1976         <area shape="rect" alt="close clock" title="close clock" coords="160,167, 200,200" href="javascript:bwClockClose()"/>
1977         <area shape="poly" alt="minute 00:55" title="minute 00:55" coords="156,164, 169,155, 156,107, 123,128" href="javascript:bwClockUpdateDateTimeForm('minute','55')" />
1978         <area shape="poly" alt="minute 00:50" title="minute 00:50" coords="150,175, 156,164, 123,128, 103,161" href="javascript:bwClockUpdateDateTimeForm('minute','50')" />
1979         <area shape="poly" alt="minute 00:45" title="minute 00:45" coords="150,191, 150,175, 103,161, 103,206" href="javascript:bwClockUpdateDateTimeForm('minute','45')" />
1980         <area shape="poly" alt="minute 00:40" title="minute 00:40" coords="158,208, 150,191, 105,206, 123,237" href="javascript:bwClockUpdateDateTimeForm('minute','40')" />
1981         <area shape="poly" alt="minute 00:35" title="minute 00:35" coords="171,218, 158,208, 123,238, 158,261" href="javascript:bwClockUpdateDateTimeForm('minute','35')" />
1982         <area shape="poly" alt="minute 00:30" title="minute 00:30" coords="193,218, 172,218, 158,263, 209,263" href="javascript:bwClockUpdateDateTimeForm('minute','30')" />
1983         <area shape="poly" alt="minute 00:25" title="minute 00:25" coords="209,210, 193,218, 209,261, 241,240" href="javascript:bwClockUpdateDateTimeForm('minute','25')" />
1984         <area shape="poly" alt="minute 00:20" title="minute 00:20" coords="216,196, 209,210, 241,240, 261,206" href="javascript:bwClockUpdateDateTimeForm('minute','20')" />
1985         <area shape="poly" alt="minute 00:15" title="minute 00:15" coords="216,178, 216,196, 261,206, 261,159" href="javascript:bwClockUpdateDateTimeForm('minute','15')" />
1986         <area shape="poly" alt="minute 00:10" title="minute 00:10" coords="209,164, 216,178, 261,159, 240,126" href="javascript:bwClockUpdateDateTimeForm('minute','10')" />
1987         <area shape="poly" alt="minute 00:05" title="minute 00:05" coords="196,155, 209,164, 238,126, 206,107" href="javascript:bwClockUpdateDateTimeForm('minute','5')" />
1988         <area shape="poly" alt="minute 00:00" title="minute 00:00" coords="169,155, 196,155, 206,105, 156,105" href="javascript:bwClockUpdateDateTimeForm('minute','0')" />
1989         <area shape="poly" alt="11 PM, 2300 hour" title="11 PM, 2300 hour" coords="150,102, 172,96, 158,1, 114,14" href="javascript:bwClockUpdateDateTimeForm('hour','23')" />
1990         <area shape="poly" alt="10 PM, 2200 hour" title="10 PM, 2200 hour" coords="131,114, 150,102, 114,14, 74,36" href="javascript:bwClockUpdateDateTimeForm('hour','22')" />
1991         <area shape="poly" alt="9 PM, 2100 hour" title="9 PM, 2100 hour" coords="111,132, 131,114, 74,36, 40,69" href="javascript:bwClockUpdateDateTimeForm('hour','21')" />
1992         <area shape="poly" alt="8 PM, 2000 hour" title="8 PM, 2000 hour" coords="101,149, 111,132, 40,69, 15,113" href="javascript:bwClockUpdateDateTimeForm('hour','20')" />
1993         <area shape="poly" alt="7 PM, 1900 hour" title="7 PM, 1900 hour" coords="95,170, 101,149, 15,113, 1,159" href="javascript:bwClockUpdateDateTimeForm('hour','19')" />
1994         <area shape="poly" alt="6 PM, 1800 hour" title="6 PM, 1800 hour" coords="95,196, 95,170, 0,159, 0,204" href="javascript:bwClockUpdateDateTimeForm('hour','18')" />
1995         <area shape="poly" alt="5 PM, 1700 hour" title="5 PM, 1700 hour" coords="103,225, 95,196, 1,205, 16,256" href="javascript:bwClockUpdateDateTimeForm('hour','17')" />
1996         <area shape="poly" alt="4 PM, 1600 hour" title="4 PM, 1600 hour" coords="116,245, 103,225, 16,256, 41,298" href="javascript:bwClockUpdateDateTimeForm('hour','16')" />
1997         <area shape="poly" alt="3 PM, 1500 hour" title="3 PM, 1500 hour" coords="134,259, 117,245, 41,298, 76,332" href="javascript:bwClockUpdateDateTimeForm('hour','15')" />
1998         <area shape="poly" alt="2 PM, 1400 hour" title="2 PM, 1400 hour" coords="150,268, 134,259, 76,333, 121,355" href="javascript:bwClockUpdateDateTimeForm('hour','14')" />
1999         <area shape="poly" alt="1 PM, 1300 hour" title="1 PM, 1300 hour" coords="169,273, 150,268, 120,356, 165,365" href="javascript:bwClockUpdateDateTimeForm('hour','13')" />
2000         <area shape="poly" alt="Noon, 1200 hour" title="Noon, 1200 hour" coords="193,273, 169,273, 165,365, 210,364" href="javascript:bwClockUpdateDateTimeForm('hour','12')" />
2001         <area shape="poly" alt="11 AM, 1100 hour" title="11 AM, 1100 hour" coords="214,270, 193,273, 210,363, 252,352" href="javascript:bwClockUpdateDateTimeForm('hour','11')" />
2002         <area shape="poly" alt="10 AM, 1000 hour" title="10 AM, 1000 hour" coords="232,259, 214,270, 252,352, 291,330" href="javascript:bwClockUpdateDateTimeForm('hour','10')" />
2003         <area shape="poly" alt="9 AM, 0900 hour" title="9 AM, 0900 hour" coords="251,240, 232,258, 291,330, 323,301" href="javascript:bwClockUpdateDateTimeForm('hour','9')" />
2004         <area shape="poly" alt="8 AM, 0800 hour" title="8 AM, 0800 hour" coords="263,219, 251,239, 323,301, 349,261" href="javascript:bwClockUpdateDateTimeForm('hour','8')" />
2005         <area shape="poly" alt="7 AM, 0700 hour" title="7 AM, 0700 hour" coords="269,194, 263,219, 349,261, 363,212" href="javascript:bwClockUpdateDateTimeForm('hour','7')" />
2006         <area shape="poly" alt="6 AM, 0600 hour" title="6 AM, 0600 hour" coords="269,172, 269,193, 363,212, 363,155" href="javascript:bwClockUpdateDateTimeForm('hour','6')" />
2007         <area shape="poly" alt="5 AM, 0500 hour" title="5 AM, 0500 hour" coords="263,150, 269,172, 363,155, 351,109" href="javascript:bwClockUpdateDateTimeForm('hour','5')" />
2008         <area shape="poly" alt="4 AM, 0400 hour" title="4 AM, 0400 hour" coords="251,130, 263,150, 351,109, 325,68" href="javascript:bwClockUpdateDateTimeForm('hour','4')" />
2009         <area shape="poly" alt="3 AM, 0300 hour" title="3 AM, 0300 hour" coords="234,112, 251,130, 325,67, 295,37" href="javascript:bwClockUpdateDateTimeForm('hour','3')" />
2010         <area shape="poly" alt="2 AM, 0200 hour" title="2 AM, 0200 hour" coords="221,102, 234,112, 295,37, 247,11" href="javascript:bwClockUpdateDateTimeForm('hour','2')" />
2011         <area shape="poly" alt="1 AM, 0100 hour" title="1 AM, 0100 hour" coords="196,96, 221,102, 247,10, 209,-1, 201,61, 206,64, 205,74, 199,75" href="javascript:bwClockUpdateDateTimeForm('hour','1')" />
2012         <area shape="poly" alt="Midnight, 0000 hour" title="Midnight, 0000 hour" coords="172,96, 169,74, 161,73, 161,65, 168,63, 158,-1, 209,-1, 201,61, 200,62, 206,64, 205,74, 198,75, 196,96, 183,95" href="javascript:bwClockUpdateDateTimeForm('hour','0')" />
2013       </map>
2014     </div>
2015   </xsl:template>
2016
2017   <xsl:template name="rdates">
2018     <div id="bwDialogBox">
2019       <form name="rdatesForm" id="rdates" action="{$event-setRdate}" method="post" onsubmit="setRdateDatetime(this)">
2020         <h4 id="dialogTitle">
2021           Add / Remove Recurrence Dates
2022         </h4>
2023         <div id="raContent">
2024
2025             <div class="dateStartEndBox" id="rdatesFormFields">
2026               <div class="dateFields">
2027                 <input name="eventRdate.date"
2028                        dojoType="dropdowndatepicker"
2029                        formatLength="medium"
2030                        value="today"
2031                        saveFormat="yyyyMMdd"
2032                        id="bwEventWidgeRdate"
2033                        iconURL="{$resourcesRoot}/resources/calIcon.gif"/>
2034               </div>
2035               <div id="rdateTimeFields" class="timeFields">
2036                <select name="eventRdate.hour">
2037                   <option value="00">00</option>
2038                   <option value="01">01</option>
2039                   <option value="02">02</option>
2040                   <option value="03">03</option>
2041                   <option value="04">04</option>
2042                   <option value="05">05</option>
2043                   <option value="06">06</option>
2044                   <option value="07">07</option>
2045                   <option value="08">08</option>
2046                   <option value="09">09</option>
2047                   <option value="10">10</option>
2048                   <option value="11">11</option>
2049                   <option value="12" selected="selected">12</option>
2050                   <option value="13">13</option>
2051                   <option value="14">14</option>
2052                   <option value="15">15</option>
2053                   <option value="16">16</option>
2054                   <option value="17">17</option>
2055                   <option value="18">18</option>
2056                   <option value="19">19</option>
2057                   <option value="20">20</option>
2058                   <option value="21">21</option>
2059                   <option value="22">22</option>
2060                   <option value="23">23</option>
2061                 </select>
2062                 <select name="eventRdate.minute">
2063                   <option value="00" selected="selected">00</option>
2064                   <option value="05">05</option>
2065                   <option value="10">10</option>
2066                   <option value="15">15</option>
2067                   <option value="20">20</option>
2068                   <option value="25">25</option>
2069                   <option value="30">30</option>
2070                   <option value="35">35</option>
2071                   <option value="40">40</option>
2072                   <option value="45">45</option>
2073                   <option value="50">50</option>
2074                   <option value="55">55</option>
2075                 </select>
2076                <xsl:text> </xsl:text>
2077
2078                 <select name="tzid" id="rdateTzid" class="timezones">
2079                   <xsl:if test="form/floating/input/@checked='checked'"><xsl:attribute name="disabled">disabled</xsl:attribute></xsl:if>
2080                   <option value="-1">select timezone...</option>
2081                   <xsl:variable name="rdateTzId" select="/bedeworkadmin/rdates/tzid"/>
2082                   <xsl:for-each select="/bedeworkadmin/timezones/timezone">
2083                     <option>
2084                       <xsl:attribute name="value"><xsl:value-of select="id"/></xsl:attribute>
2085                       <xsl:if test="$rdateTzId = id"><xsl:attribute name="selected">selected</xsl:attribute></xsl:if>
2086                       <xsl:value-of select="name"/>
2087                     </option>
2088                   </xsl:for-each>
2089                 </select>
2090               </div>
2091               <xsl:text> </xsl:text>
2092               <input type="submit" value="add"/>
2093               <br/>
2094               <!-- dateonly (anniversary) event: this is temporary - should be determined by the main event -->
2095               <input type="checkbox" name="dateOnly" id="rdateDateOnly" onclick="swapRdateAllDay(this)" value="on"/>
2096               all day
2097               <!-- floating event: no timezone (and not UTC) -->
2098               <input type="checkbox" name="floating" id="rdateFloating" onclick="swapRdateFloatingTime(this)" value="on"/>
2099               floating
2100               <!-- store time as coordinated universal time (UTC) -->
2101               <input type="checkbox" name="storeUTC" id="rdateStoreUTC" onclick="swapRdateStoreUTC(this)" value="on"/>
2102               store as UTC
2103             </div>
2104
2105             <xsl:call-template name="messagesAndErrors"/>
2106
2107             <table cellspacing="0" id="rdatesTable">
2108               <tr>
2109                 <th colspan="2">Recurrence Dates</th>
2110               </tr>
2111               <xsl:for-each select="/bedeworkadmin/rdates/rdate">
2112                 <tr>
2113                   <td>
2114                     <xsl:value-of select="longdate"/>
2115                     <xsl:if test="allday='false'">
2116                       <xsl:value-of select="time"/>
2117                       <xsl:if test="floating='false'">
2118                         <xsl:value-of select="timezone/id"/>
2119                       </xsl:if>
2120                     </xsl:if>
2121                   </td>
2122                   <td class="trash">
2123                     <xsl:variable name="datetime"><xsl:value-of select="unformatted"/></xsl:variable>
2124                     <xsl:variable name="tzid" select="timezone/id"/>
2125                     <xsl:variable name="dateOnly"><xsl:if test="dateOnly = 'true'">&amp;dateOnly=true</xsl:if></xsl:variable>
2126                     <xsl:variable name="floating"><xsl:if test="floating = 'true'">&amp;floating=true</xsl:if></xsl:variable>
2127                     <xsl:variable name="storeUTC"><xsl:if test="utc = 'true'">&amp;storeUTC=true</xsl:if></xsl:variable>
2128                     <a href="{$event-setRdate}&amp;datetime={$datetime}&amp;tzid={$tzid}{$dateOnly}{$floating}{$storeUTC}&amp;delete=true" title="remove">
2129                       <img src="{$resourcesRoot}/resources/trashIcon.gif" width="13" height="13" border="0" alt="remove"/>
2130                     </a>
2131                   </td>
2132                 </tr>
2133               </xsl:for-each>
2134             </table>
2135
2136           <input type="button" value="done" onclick="window.close()"/>
2137         </div>
2138       </form>
2139     </div>
2140   </xsl:template>
2141
2142   <xsl:template match="event" mode="displayEvent">
2143     <xsl:variable name="calPath" select="calendar/path"/>
2144     <xsl:variable name="guid" select="guid"/>
2145     <xsl:variable name="recurrenceId" select="recurrenceId"/>
2146
2147     <xsl:choose>
2148       <xsl:when test="/bedeworkadmin/page='deleteEventConfirm'">
2149
2150         <h2>Ok to delete this event?</h2>
2151         <p style="width: 400px;">Note: we do not encourage deletion of old but correct events; we prefer to keep
2152            old events for historical reasons.  Please remove only those events
2153            that are truly erroneous.</p>
2154         <p id="confirmButtons">
2155           <form action="{$event-delete}" method="post">
2156             <input type="submit" name="cancelled" value="Cancel"/>
2157             <input type="submit" name="delete" value="Delete"/>
2158             <input type="hidden" name="calPath" value="{$calPath}"/>
2159             <input type="hidden" name="guid" value="{$guid}"/>
2160             <input type="hidden" name="recurrenceId" value="{$recurrenceId}"/>
2161           </form>
2162         </p>
2163       </xsl:when>
2164       <xsl:otherwise>
2165         <h2>Event Information</h2>
2166       </xsl:otherwise>
2167     </xsl:choose>
2168
2169     <table class="eventFormTable">
2170       <tr>
2171         <th>
2172           Title:
2173         </th>
2174         <td>
2175           <strong><xsl:value-of select="summary"/></strong>
2176         </td>
2177       </tr>
2178
2179       <tr>
2180         <th>
2181           When:
2182         </th>
2183         <td>
2184           <xsl:value-of select="start/dayname"/>, <xsl:value-of select="start/longdate"/><xsl:text> </xsl:text>
2185           <xsl:if test="start/allday = 'false'">
2186             <span class="time"><xsl:value-of select="start/time"/></span>
2187           </xsl:if>
2188           <xsl:if test="(end/longdate != start/longdate) or
2189                         ((end/longdate = start/longdate) and (end/time != start/time))"> - </xsl:if>
2190           <xsl:if test="end/longdate != start/longdate">
2191             <xsl:value-of select="substring(end/dayname,1,3)"/>, <xsl:value-of select="end/longdate"/><xsl:text> </xsl:text>
2192           </xsl:if>
2193           <xsl:choose>
2194             <xsl:when test="start/allday = 'true'">
2195               <span class="time"><em>(all day)</em></span>
2196             </xsl:when>
2197             <xsl:when test="end/longdate != start/longdate">
2198               <span class="time"><xsl:value-of select="end/time"/></span>
2199             </xsl:when>
2200             <xsl:when test="end/time != start/time">
2201               <span class="time"><xsl:value-of select="end/time"/></span>
2202             </xsl:when>
2203           </xsl:choose>
2204         </td>
2205       </tr>
2206
2207       <tr>
2208         <th>
2209           Calendar:
2210         </th>
2211         <td>
2212           <xsl:value-of select="calendar/path"/>
2213         </td>
2214       </tr>
2215
2216       <!--  Description  -->
2217       <tr>
2218         <th>
2219           Description:
2220         </th>
2221         <td>
2222           <xsl:value-of select="description"/>
2223         </td>
2224       </tr>
2225       <!-- Cost -->
2226       <tr>
2227         <th class="optional">
2228           Price:
2229         </th>
2230         <td>
2231           <xsl:value-of select="cost"/>
2232         </td>
2233       </tr>
2234       <!-- Url -->
2235       <tr>
2236         <th class="optional">
2237           URL:
2238         </th>
2239         <td>
2240           <xsl:variable name="eventLink" select="link"/>
2241           <a href="{$eventLink}">
2242             <xsl:value-of select="link"/>
2243           </a>
2244         </td>
2245       </tr>
2246
2247       <!-- Location -->
2248       <tr>
2249         <th>
2250           Location:
2251         </th>
2252         <td>
2253           <xsl:value-of select="location/address"/><br/>
2254           <xsl:value-of select="location/subaddress"/>
2255         </td>
2256       </tr>
2257
2258       <!-- Contact -->
2259       <tr>
2260         <th>
2261           Contact:
2262         </th>
2263         <td>
2264           <xsl:value-of select="contact/name"/><br/>
2265           <xsl:value-of select="contact/phone"/><br/>
2266           <xsl:variable name="mailto" select="email"/>
2267           <a href="mailto:{$mailto}"><xsl:value-of select="email"/></a>
2268           <xsl:variable name="link" select="link"/>
2269           <a href="mailto:{$link}"><xsl:value-of select="link"/></a>
2270         </td>
2271       </tr>
2272
2273       <!-- Owner -->
2274       <tr>
2275         <th>
2276           Owner:
2277         </th>
2278         <td>
2279           <strong><xsl:value-of select="creator"/></strong>
2280         </td>
2281       </tr>
2282
2283       <!--  Categories  -->
2284       <tr>
2285         <th>
2286           Categories:
2287         </th>
2288         <td>
2289           <xsl:for-each select="categories/category">
2290             <xsl:value-of select="word"/><br/>
2291           </xsl:for-each>
2292         </td>
2293       </tr>
2294
2295     </table>
2296
2297     <p>
2298       <xsl:if test="/bedeworkadmin/canEdit = 'true' or /bedeworkadmin/userInfo/superUser = 'true'">
2299         <input type="button" name="return" value="Edit event" onclick="javascript:location.replace('{$event-fetchForUpdate}&amp;calPath={$calPath}&amp;guid={$guid}&amp;recurrenceId={$recurrenceId}')"/>
2300       </xsl:if>
2301
2302       <input type="button" name="return" value="Back" onclick="javascript:history.back()"/>
2303     </p>
2304   </xsl:template>
2305
2306   <!--+++++++++++++++ Contacts ++++++++++++++++++++-->
2307   <xsl:template name="contactList">
2308     <h2>Edit Contacts</h2>
2309     <p>
2310       Select the contact you would like to update:
2311       <input type="button" name="return" value="Add new contact" onclick="javascript:location.replace('{$contact-initAdd}')"/>
2312     </p>
2313
2314     <table id="commonListTable">
2315       <tr>
2316         <th>Name</th>
2317         <th>Phone</th>
2318         <th>Email</th>
2319         <th>URL</th>
2320       </tr>
2321
2322       <xsl:for-each select="/bedeworkadmin/contacts/contact">
2323         <tr>
2324           <td>
2325             <xsl:copy-of select="name" />
2326           </td>
2327           <td>
2328             <xsl:value-of select="phone" />
2329           </td>
2330           <td>
2331             <xsl:variable name="email" select="email"/>
2332             <a href="mailto:{$email}">
2333               <xsl:value-of select="email"/>
2334             </a>
2335           </td>
2336           <td>
2337             <xsl:variable name="link" select="link" />
2338             <a href="{$link}" target="linktest">
2339               <xsl:value-of select="link" />
2340             </a>
2341           </td>
2342         </tr>
2343       </xsl:for-each>
2344     </table>
2345   </xsl:template>
2346
2347   <xsl:template name="modContact">
2348     <form action="{$contact-update}" method="post">
2349       <h2>Contact Information</h2>
2350
2351       <table id="eventFormTable">
2352         <tr>
2353           <td class="fieldName">
2354             Contact:
2355           </td>
2356           <td>
2357             <xsl:copy-of select="/bedeworkadmin/formElements/form/name/*"/>
2358           </td>
2359         </tr>
2360         <tr>
2361           <td class="fieldName">
2362             Contact Phone Number:
2363           </td>
2364           <td>
2365             <xsl:copy-of select="/bedeworkadmin/formElements/form/phone/*"/>
2366             <span class="fieldInfo"> (optional)</span>
2367           </td>
2368         </tr>
2369         <tr>
2370           <td class="optional">
2371             Contact's URL:
2372           </td>
2373           <td>
2374             <xsl:copy-of select="/bedeworkadmin/formElements/form/link/*"/>
2375             <span class="fieldInfo"> (optional)</span>
2376           </td>
2377         </tr>
2378         <tr>
2379           <td class="optional">
2380             Contact Email Address:
2381           </td>
2382           <td>
2383             <xsl:copy-of select="/bedeworkadmin/formElements/form/email/*"/>
2384             <span class="fieldInfo"> (optional)</span>
2385           </td>
2386         </tr>
2387       </table>
2388
2389       <table border="0" id="submitTable">
2390         <tr>
2391           <xsl:choose>
2392             <xsl:when test="/bedeworkadmin/creating='true'">
2393               <td>
2394                 <input type="submit" name="addContact" value="Add Contact"/>
2395                 <input type="submit" name="cancelled" value="Cancel"/>
2396                 <input type="reset" value="Clear"/>
2397               </td>
2398             </xsl:when>
2399             <xsl:otherwise>
2400               <td>
2401                 <input type="submit" name="updateContact" value="Update Contact"/>
2402                 <input type="submit" name="cancelled" value="Cancel"/>
2403                 <input type="reset" value="Reset"/>
2404               </td>
2405               <td align="right">
2406                 <input type="submit" name="delete" value="Delete Contact"/>
2407               </td>
2408             </xsl:otherwise>
2409           </xsl:choose>
2410         </tr>
2411       </table>
2412
2413     </form>
2414   </xsl:template>
2415
2416   <xsl:template name="deleteContactConfirm">
2417     <h2>Ok to delete this contact?</h2>
2418     <p id="confirmButtons">
2419       <xsl:copy-of select="/bedeworkadmin/formElements/*"/>
2420     </p>
2421
2422     <table class="eventFormTable">
2423       <tr>
2424         <th>Name</th>
2425         <td>
2426           <xsl:value-of select="/bedeworkadmin/contact/name" />
2427         </td>
2428       </tr>
2429       <tr>
2430         <th>Phone</th>
2431         <td>
2432           <xsl:value-of select="/bedeworkadmin/contact/phone" />
2433         </td>
2434       </tr>
2435       <tr>
2436         <th>Email</th>
2437         <td>
2438           <xsl:value-of select="/bedeworkadmin/contact/email" />
2439         </td>
2440       </tr>
2441       <tr>
2442         <th>URL</th>
2443         <td>
2444           <xsl:value-of select="/bedeworkadmin/contact/link" />
2445         </td>
2446       </tr>
2447     </table>
2448   </xsl:template>
2449
2450    <!--+++++++++++++++ Locations ++++++++++++++++++++-->
2451   <xsl:template name="locationList">
2452     <h2>Edit Locations</h2>
2453     <p>
2454       Select the location that you would like to update:
2455       <input type="button" name="return" value="Add new location" onclick="javascript:location.replace('{$location-initAdd}')"/>
2456     </p>
2457
2458     <table id="commonListTable">
2459       <tr>
2460         <th>Address</th>
2461         <th>Subaddress</th>
2462         <th>URL</th>
2463       </tr>
2464
2465       <xsl:for-each select="/bedeworkadmin/locations/location">
2466         <tr>
2467           <td>
2468             <xsl:copy-of select="address/*"/>
2469           </td>
2470           <td>
2471             <xsl:value-of select="subaddress"/>
2472           </td>
2473           <td>
2474             <xsl:variable name="link" select="link" />
2475             <a href="{$link}" target="linktest">
2476               <xsl:value-of select="link" />
2477             </a>
2478           </td>
2479         </tr>
2480       </xsl:for-each>
2481     </table>
2482   </xsl:template>
2483
2484   <xsl:template name="modLocation">
2485     <xsl:choose>
2486       <xsl:when test="/bedeworkadmin/creating='true'">
2487         <h2>Add Location</h2>
2488       </xsl:when>
2489       <xsl:otherwise>
2490         <h2>Update Location</h2>
2491       </xsl:otherwise>
2492     </xsl:choose>
2493
2494     <form action="{$location-update}" method="post">
2495       <table id="eventFormTable">
2496         <tr>
2497           <td class="fieldName">
2498             Address:
2499           </td>
2500           <td>
2501             <xsl:copy-of select="/bedeworkadmin/formElements/form/address/*"/>
2502           </td>
2503         </tr>
2504         <tr>
2505           <td class="optional">
2506             Subaddress:
2507           </td>
2508           <td>
2509             <xsl:copy-of select="/bedeworkadmin/formElements/form/subaddress/*"/>
2510             <span class="fieldInfo"> (optional)</span>
2511           </td>
2512         </tr>
2513         <tr>
2514           <td class="optional">
2515             Location's URL:
2516           </td>
2517           <td>
2518             <xsl:copy-of select="/bedeworkadmin/formElements/form/link/*"/>
2519             <span class="fieldInfo"> (optional)</span>
2520           </td>
2521         </tr>
2522       </table>
2523
2524       <table border="0" id="submitTable">
2525         <tr>
2526           <xsl:choose>
2527             <xsl:when test="/bedeworkadmin/creating='true'">
2528               <td>
2529                 <input type="submit" name="addLocation" value="Add Location"/>
2530                 <input type="submit" name="cancelled" value="Cancel"/>
2531                 <input type="reset" value="Clear"/>
2532               </td>
2533             </xsl:when>
2534             <xsl:otherwise>
2535               <td>
2536                 <input type="submit" name="updateLocation" value="Update Location"/>
2537                 <input type="submit" name="cancelled" value="Cancel"/>
2538                 <input type="reset" value="Reset"/>
2539               </td>
2540               <td align="right">
2541                 <input type="submit" name="delete" value="Delete Location"/>
2542               </td>
2543             </xsl:otherwise>
2544           </xsl:choose>
2545         </tr>
2546       </table>
2547     </form>
2548   </xsl:template>
2549
2550   <xsl:template name="deleteLocationConfirm">
2551     <h2>Ok to delete this location?</h2>
2552     <p id="confirmButtons">
2553       <xsl:copy-of select="/bedeworkadmin/formElements/*"/>
2554     </p>
2555
2556     <table class="eventFormTable">
2557       <tr>
2558         <td class="fieldName">
2559             Address:
2560           </td>
2561         <td>
2562           <xsl:value-of select="/bedeworkadmin/location/address"/>
2563         </td>
2564       </tr>
2565       <tr>
2566         <td class="optional">
2567             Subaddress:
2568           </td>
2569         <td>
2570           <xsl:value-of select="/bedeworkadmin/location/subaddress"/>
2571         </td>
2572       </tr>
2573       <tr>
2574         <td class="optional">
2575             Location's URL:
2576           </td>
2577         <td>
2578           <xsl:variable name="link" select="/bedeworkadmin/location/link"/>
2579           <a href="{$link}">
2580             <xsl:value-of select="/bedeworkadmin/location/link"/>
2581           </a>
2582         </td>
2583       </tr>
2584     </table>
2585   </xsl:template>
2586
2587   <!--+++++++++++++++ Categories ++++++++++++++++++++-->
2588   <xsl:template name="categoryList">
2589     <h2>Edit Categories</h2>
2590     <p>
2591       Select the category you would like to update:
2592       <input type="button" name="return" value="Add new category" onclick="javascript:location.replace('{$category-initAdd}')"/>
2593     </p>
2594
2595     <table id="commonListTable">
2596       <tr>
2597         <th>Keyword</th>
2598         <th>Description</th>
2599       </tr>
2600
2601       <xsl:for-each select="/bedeworkadmin/categories/category">
2602         <xsl:variable name="categoryKey" select="normalize-space(keyword)"/>
2603         <tr>
2604           <td>
2605             <a href="{$category-fetchForUpdate}&amp;categoryKey={$categoryKey}">
2606               <xsl:value-of select="keyword"/>
2607             </a>
2608           </td>
2609           <td>
2610             <xsl:value-of select="desc"/>
2611           </td>
2612         </tr>
2613       </xsl:for-each>
2614     </table>
2615   </xsl:template>
2616
2617   <xsl:template name="modCategory">
2618     <xsl:choose>
2619       <xsl:when test="/bedeworkadmin/creating='true'">
2620         <h2>Add Category</h2>
2621         <form action="{$category-update}" method="post">
2622           <table id="eventFormTable">
2623             <tr>
2624               <td class="fieldName">
2625                 Keyword:
2626               </td>
2627               <td>
2628                 <input type="text" name="categoryWord.value" value="" size="40"/>
2629               </td>
2630             </tr>
2631             <tr>
2632               <td class="optional">
2633                 Description:
2634               </td>
2635               <td>
2636                 <textarea name="categoryDesc.value" rows="3" cols="60">
2637                 </textarea>
2638               </td>
2639             </tr>
2640           </table>
2641           <table border="0" id="submitTable">
2642             <tr>
2643               <td>
2644                 <input type="submit" name="addCategory" value="Add Category"/>
2645                 <input type="submit" name="cancelled" value="Cancel"/>
2646                 <input type="reset" value="Clear"/>
2647               </td>
2648             </tr>
2649           </table>
2650         </form>
2651       </xsl:when>
2652       <xsl:otherwise>
2653         <h2>Update Category</h2>
2654         <form action="{$category-update}" method="post">
2655           <table id="eventFormTable">
2656             <tr>
2657               <td class="fieldName">
2658             Keyword:
2659             </td>
2660               <td>
2661                 <xsl:variable name="keyword" select="normalize-space(/bedeworkadmin/currentCategory/category/keyword)"/>
2662                 <input type="text" name="categoryWord.value" value="{$keyword}" size="40"/>
2663               </td>
2664             </tr>
2665             <tr>
2666               <td class="optional">
2667             Description:
2668             </td>
2669               <td>
2670                 <textarea name="categoryDesc.value" rows="3" cols="60">
2671                   <xsl:value-of select="normalize-space(/bedeworkadmin/currentCategory/category/desc)"/>
2672                 </textarea>
2673               </td>
2674             </tr>
2675           </table>
2676
2677           <table border="0" id="submitTable">
2678             <tr>
2679               <td>
2680                 <input type="submit" name="updateCategory" value="Update Category"/>
2681                 <input type="submit" name="cancelled" value="Cancel"/>
2682                 <input type="reset" value="Reset"/>
2683               </td>
2684               <td align="right">
2685                 <input type="submit" name="delete" value="Delete Category"/>
2686               </td>
2687             </tr>
2688           </table>
2689         </form>
2690       </xsl:otherwise>
2691     </xsl:choose>
2692
2693
2694   </xsl:template>
2695
2696   <xsl:template name="deleteCategoryConfirm">
2697     <h2>Ok to delete this category?</h2>
2698
2699
2700     <table class="eventFormTable">
2701       <tr>
2702         <td class="fieldName">
2703           Keyword:
2704         </td>
2705         <td>
2706           <xsl:value-of select="/bedeworkadmin/currentCategory/category/keyword"/>
2707         </td>
2708       </tr>
2709       <tr>
2710         <td class="optional">
2711           Description:
2712         </td>
2713         <td>
2714           <xsl:value-of select="/bedeworkadmin/currentCategory/category/desc"/>
2715         </td>
2716       </tr>
2717     </table>
2718
2719     <form action="{$category-delete}" method="post">
2720       <input type="submit" name="updateCategory" value="Yes: Delete Category"/>
2721       <input type="submit" name="cancelled" value="No: Cancel"/>
2722     </form>
2723   </xsl:template>
2724
2725 <!--+++++++++++++++ Calendars ++++++++++++++++++++-->
2726   <xsl:template match="calendars">
2727     <table id="calendarTable">
2728       <tr>
2729         <td class="cals">
2730           <h3>Public calendars</h3>
2731           <ul id="calendarTree">
2732             <xsl:choose>
2733               <xsl:when test="/bedeworkadmin/page='calendarDescriptions' or /bedeworkadmin/page='displayCalendar'">
2734                 <xsl:apply-templates select="calendar" mode="listForDisplay"/>
2735               </xsl:when>
2736               <xsl:otherwise>
2737                 <xsl:apply-templates select="calendar" mode="listForUpdate"/>
2738               </xsl:otherwise>
2739             </xsl:choose>
2740           </ul>
2741         </td>
2742         <td class="calendarContent">
2743           <xsl:choose>
2744             <xsl:when test="/bedeworkadmin/page='calendarList' or /bedeworkadmin/page='calendarReferenced'">
2745               <xsl:call-template name="calendarList"/>
2746             </xsl:when>
2747             <xsl:when test="/bedeworkadmin/page='calendarDescriptions'">
2748               <xsl:call-template name="calendarDescriptions"/>
2749             </xsl:when>
2750             <xsl:when test="/bedeworkadmin/page='displayCalendar'">
2751               <xsl:apply-templates select="/bedeworkadmin/currentCalendar" mode="displayCalendar"/>
2752             </xsl:when>
2753             <xsl:when test="/bedeworkadmin/page='deleteCalendarConfirm'">
2754               <xsl:apply-templates select="/bedeworkadmin/currentCalendar" mode="deleteCalendarConfirm"/>
2755             </xsl:when>
2756             <xsl:when test="/bedeworkadmin/creating='true'">
2757               <xsl:apply-templates select="/bedeworkadmin/currentCalendar" mode="addCalendar"/>
2758             </xsl:when>
2759             <xsl:otherwise>
2760               <xsl:apply-templates select="/bedeworkadmin/currentCalendar" mode="modCalendar"/>
2761             </xsl:otherwise>
2762           </xsl:choose>
2763         </td>
2764       </tr>
2765     </table>
2766   </xsl:template>
2767
2768   <xsl:template match="calendar" mode="listForUpdate">
2769     <xsl:variable name="calPath" select="encodedPath"/>
2770     <xsl:variable name="itemClass">
2771       <xsl:choose>
2772         <xsl:when test="calendarCollection='false'">folder</xsl:when>
2773         <xsl:otherwise>calendar</xsl:otherwise>
2774       </xsl:choose>
2775     </xsl:variable>
2776     <li class="{$itemClass}">
2777       <a href="{$calendar-fetchForUpdate}&amp;calPath={$calPath}" title="update">
2778         <xsl:value-of select="name"/>
2779       </a>
2780       <xsl:if test="calendarCollection='false'">
2781         <xsl:text> </xsl:text>
2782         <a href="{$calendar-initAdd}&amp;calPath={$calPath}" title="add a calendar or folder">
2783           <img src="{$resourcesRoot}/resources/calAddIcon.gif" width="13" height="13" alt="add a calendar or folder" border="0"/>
2784         </a>
2785       </xsl:if>
2786       <xsl:if test="calendar">
2787         <ul>
2788           <xsl:apply-templates select="calendar" mode="listForUpdate">
2789             <!--<xsl:sort select="title" order="ascending" case-order="upper-first"/>--></xsl:apply-templates>
2790         </ul>
2791       </xsl:if>
2792     </li>
2793   </xsl:template>
2794
2795   <xsl:template match="calendar" mode="listForDisplay">
2796     <xsl:variable name="calPath" select="encodedPath"/>
2797     <xsl:variable name="itemClass">
2798       <xsl:choose>
2799         <xsl:when test="calendarCollection='false'">folder</xsl:when>
2800         <xsl:otherwise>calendar</xsl:otherwise>
2801       </xsl:choose>
2802     </xsl:variable>
2803     <li class="{$itemClass}">
2804       <a href="{$calendar-fetchForDisplay}&amp;calPath={$calPath}" title="display">
2805         <xsl:value-of select="name"/>
2806       </a>
2807       <xsl:if test="calendar">
2808         <ul>
2809           <xsl:apply-templates select="calendar" mode="listForDisplay">
2810             <!--<xsl:sort select="title" order="ascending" case-order="upper-first"/>--></xsl:apply-templates>
2811         </ul>
2812       </xsl:if>
2813     </li>
2814   </xsl:template>
2815
2816   <xsl:template match="currentCalendar" mode="addCalendar">
2817     <h3>Add Calendar / Folder</h3>
2818     <form name="addCalForm" action="{$calendar-update}">
2819       <table class="eventFormTable">
2820         <tr>
2821           <th>Name:</th>
2822           <td>
2823             <xsl:variable name="curCalName" select="name"/>
2824             <input name="calendar.name" value="{$curCalName}" size="40"/>
2825           </td>
2826         </tr>
2827         <tr>
2828           <th>Summary:</th>
2829           <td>
2830             <xsl:variable name="curCalSummary" select="summary"/>
2831             <input type="text" name="calendar.summary" value="{$curCalSummary}" size="40"/>
2832           </td>
2833         </tr>
2834         <tr>
2835           <th>Description:</th>
2836           <td>
2837             <textarea name="calendar.description" cols="40" rows="4">
2838               <xsl:value-of select="desc"/>
2839             </textarea>
2840           </td>
2841         </tr>
2842         <tr>
2843           <th>Calendar/Folder:</th>
2844           <td>
2845             <xsl:choose>
2846               <xsl:when test="calendarCollection='true'">
2847                 <input type="radio" value="true" name="calendarCollection" checked="checked"/> Calendar
2848                 <input type="radio" value="false" name="calendarCollection"/> Folder
2849               </xsl:when>
2850               <xsl:otherwise>
2851                 <input type="radio" value="true" name="calendarCollection"/> Calendar
2852                 <input type="radio" value="false" name="calendarCollection" checked="checked"/> Folder
2853               </xsl:otherwise>
2854             </xsl:choose>
2855           </td>
2856         </tr>
2857       </table>
2858
2859       <table border="0" id="submitTable">
2860         <tr>
2861           <td>
2862             <input type="submit" name="addCalendar" value="Add Calendar/Folder"/>
2863             <input type="submit" name="cancelled" value="Cancel"/>
2864             <input type="reset" value="Clear"/>
2865           </td>
2866         </tr>
2867       </table>
2868     </form>
2869     <div id="sharingBox">
2870       <h3>Sharing</h3>
2871       Sharing may be added to a calendar once created.
2872     </div>
2873   </xsl:template>
2874
2875   <xsl:template match="currentCalendar" mode="modCalendar">
2876     <xsl:choose>
2877       <xsl:when test="calendarCollection='true'">
2878         <h3>Modify Calendar</h3>
2879       </xsl:when>
2880       <xsl:otherwise>
2881         <h3>Modify Folder</h3>
2882       </xsl:otherwise>
2883     </xsl:choose>
2884     <form name="modCalForm" action="{$calendar-update}">
2885       <table class="eventFormTable">
2886         <tr>
2887           <th>Path:</th>
2888           <td>
2889             <xsl:value-of select="path"/>
2890           </td>
2891         </tr>
2892         <tr>
2893           <th>Name:</th>
2894           <td>
2895             <xsl:value-of select="name"/>
2896           </td>
2897         </tr>
2898         <tr>
2899           <th>Mailing List ID:</th>
2900           <td>
2901             <xsl:value-of select="mailListId"/>
2902           </td>
2903         </tr>
2904         <tr>
2905           <th>Summary:</th>
2906           <td>
2907             <xsl:variable name="curCalSummary" select="summary"/>
2908             <input type="text" name="calendar.summary" value="{$curCalSummary}" size="40"/>
2909           </td>
2910         </tr>
2911         <tr>
2912           <th>Description:</th>
2913           <td>
2914             <textarea name="calendar.description" cols="40" rows="4">
2915               <xsl:value-of select="desc"/>
2916             </textarea>
2917           </td>
2918         </tr>
2919         <tr>
2920           <th>Calendar/Folder:</th>
2921           <td>
2922             <xsl:choose>
2923               <xsl:when test="calendarCollection='true'">
2924                 <input type="radio" value="true" name="calendarCollection" checked="checked"/> Calendar
2925                 <input type="radio" value="false" name="calendarCollection"/> Folder
2926               </xsl:when>
2927               <xsl:otherwise>
2928                 <input type="radio" value="true" name="calendarCollection"/> Calendar
2929                 <input type="radio" value="false" name="calendarCollection" checked="checked"/> Folder
2930               </xsl:otherwise>
2931             </xsl:choose>
2932           </td>
2933         </tr>
2934       </table>
2935
2936       <table border="0" id="submitTable">
2937         <tr>
2938           <td>
2939             <xsl:choose>
2940               <xsl:when test="calendarCollection='true'">
2941                 <input type="submit" name="updateCalendar" value="Update Calendar"/>
2942               </xsl:when>
2943               <xsl:otherwise>
2944                 <input type="submit" name="updateCalendar" value="Update Folder"/>
2945               </xsl:otherwise>
2946             </xsl:choose>
2947             <input type="submit" name="cancelled" value="Cancel"/>
2948             <input type="reset" value="Reset"/>
2949           </td>
2950           <td align="right">
2951             <xsl:choose>
2952               <xsl:when test="calendarCollection='true'">
2953                 <input type="submit" name="delete" value="Delete Calendar"/>
2954               </xsl:when>
2955               <xsl:otherwise>
2956                 <input type="submit" name="delete" value="Delete Folder"/>
2957               </xsl:otherwise>
2958             </xsl:choose>
2959           </td>
2960         </tr>
2961       </table>
2962     </form>
2963
2964
2965     <div id="sharingBox">
2966       <xsl:variable name="calPath" select="path"/>
2967       <xsl:variable name="encodedCalPath" select="encodedPath"/>
2968       <xsl:if test="currentAccess/current-user-privilege-set/privilege/read-acl or /bedeworkadmin/userInfo/superUser='true'">
2969         <h3>Sharing</h3>
2970         <table class="common" id="sharing">
2971           <tr>
2972             <th class="commonHeader">Who:</th>
2973             <th class="commonHeader">Current access:</th>
2974             <th class="commonHeader">Source:</th>
2975           </tr>
2976           <xsl:for-each select="acl/ace">
2977             <xsl:variable name="who">
2978               <xsl:choose>
2979                 <xsl:when test="invert">
2980                   <xsl:choose>
2981                     <xsl:when test="invert/principal/href"><xsl:value-of select="normalize-space(invert/principal/href)"/></xsl:when>
2982                     <xsl:when test="invert/principal/property"><xsl:value-of select="name(invert/principal/property/*)"/></xsl:when>
2983                     <xsl:otherwise><xsl:value-of select="name(invert/principal/*)"/></xsl:otherwise>
2984                   </xsl:choose>
2985                 </xsl:when>
2986                 <xsl:otherwise>
2987                   <xsl:choose>
2988                     <xsl:when test="principal/href"><xsl:value-of select="normalize-space(principal/href)"/></xsl:when>
2989                     <xsl:when test="principal/property"><xsl:value-of select="name(principal/property/*)"/></xsl:when>
2990                     <xsl:otherwise><xsl:value-of select="name(principal/*)"/></xsl:otherwise>
2991                   </xsl:choose>
2992                 </xsl:otherwise>
2993               </xsl:choose>
2994             </xsl:variable>
2995             <tr>
2996             <th class="thin">
2997                 <xsl:if test="invert">
2998                   Not
2999                 </xsl:if>
3000                 <xsl:choose>
3001                   <xsl:when test="contains($who,/bedeworkadmin/syspars/userPrincipalRoot)">
3002                     <img src="{$resourcesRoot}/resources/userIcon.gif" width="13" height="13" border="0" alt="user"/>
3003                     <xsl:value-of select="substring-after(substring-after($who,normalize-space(/bedeworkadmin/syspars/userPrincipalRoot)),'/')"/>
3004                   </xsl:when>
3005                   <xsl:when test="contains($who,/bedeworkadmin/syspars/groupPrincipalRoot)">
3006                     <img src="{$resourcesRoot}/resources/groupIcon.gif" width="13" height="13" border="0" alt="group"/>
3007                     <xsl:value-of select="substring-after(substring-after($who,normalize-space(/bedeworkadmin/syspars/groupPrincipalRoot)),'/')"/>
3008                   </xsl:when>
3009                   <xsl:when test="invert and $who='owner'">
3010                     <xsl:value-of select="$who"/> (other)
3011                   </xsl:when>
3012                   <xsl:otherwise>
3013                     <xsl:value-of select="$who"/>
3014                   </xsl:otherwise>
3015                 </xsl:choose>
3016               </th>
3017               <td>
3018                 <xsl:for-each select="grant/node()">
3019                   <xsl:value-of select="name(.)"/>&#160;&#160;
3020                 </xsl:for-each>
3021                 <xsl:for-each select="deny/node()">
3022                   <xsl:choose>
3023                     <xsl:when test="name(.)='all'">
3024                       none
3025                     </xsl:when>
3026                     <xsl:otherwise>
3027                       deny-<xsl:value-of select="name(.)"/>
3028                     </xsl:otherwise>
3029                   </xsl:choose>
3030                   &#160;&#160;
3031                 </xsl:for-each>
3032               </td>
3033               <td>
3034                 <xsl:choose>
3035                   <xsl:when test="inherited">
3036                     inherited from:
3037                     <a>
3038                       <xsl:attribute name="href"><xsl:value-of select="$calendar-fetchForUpdate"/>&amp;calPath=<xsl:value-of select="inherited/href"/></xsl:attribute>
3039                       <xsl:value-of select="inherited/href"/>
3040                     </a>
3041                   </xsl:when>
3042                   <xsl:otherwise>
3043                     local:
3044                     <xsl:variable name="whoType">
3045                       <xsl:choose>
3046                         <xsl:when test="contains($who,/bedeworkadmin/syspars/userPrincipalRoot)">user</xsl:when>
3047                         <xsl:when test="contains($who,/bedeworkadmin/syspars/groupPrincipalRoot)">group</xsl:when>
3048                         <xsl:when test="$who='authenticated'">auth</xsl:when>
3049                         <xsl:when test="invert/principal/property/owner">other</xsl:when>
3050                         <xsl:when test="principal/property"><xsl:value-of select="name(principal/property/*)"/></xsl:when>
3051                         <xsl:when test="invert/principal/property"><xsl:value-of select="name(invert/principal/property/*)"/></xsl:when>
3052                         <xsl:otherwise></xsl:otherwise>
3053                       </xsl:choose>
3054                     </xsl:variable>
3055                     <xsl:variable name="shortWho">
3056                       <xsl:choose>
3057                         <xsl:when test="contains($who,/bedeworkadmin/syspars/userPrincipalRoot)"><xsl:value-of select="substring-after(substring-after($who,normalize-space(/bedeworkadmin/syspars/userPrincipalRoot)),'/')"/></xsl:when>
3058                         <xsl:when test="contains($who,/bedeworkadmin/syspars/groupPrincipalRoot)"><xsl:value-of select="substring-after(substring-after($who,normalize-space(/bedeworkadmin/syspars/groupPrincipalRoot)),'/')"/></xsl:when>
3059                         <xsl:otherwise></xsl:otherwise> <!-- if not user or group, send no who -->
3060                       </xsl:choose>
3061                     </xsl:variable>
3062                     <xsl:choose>
3063                       <xsl:when test="invert">
3064                         <a href="{$calendar-setAccess}&amp;calPath={$encodedCalPath}&amp;how=default&amp;who={$shortWho}&amp;whoType={$whoType}&amp;notWho=yes">
3065                           reset to default
3066                         </a>
3067                       </xsl:when>
3068                       <xsl:otherwise>
3069                         <a href="{$calendar-setAccess}&amp;calPath={$encodedCalPath}&amp;how=default&amp;who={$shortWho}&amp;whoType={$whoType}">
3070                           reset to default
3071                         </a>
3072                       </xsl:otherwise>
3073                     </xsl:choose>
3074                   </xsl:otherwise>
3075                 </xsl:choose>
3076               </td>
3077             </tr>
3078           </xsl:for-each>
3079         </table>
3080       </xsl:if>
3081
3082       <xsl:if test="currentAccess/current-user-privilege-set/privilege/write-acl or /bedeworkadmin/userInfo/superUser='true'">
3083         <form name="calendarShareForm" action="{$calendar-setAccess}" id="shareForm" method="post">
3084           <input type="hidden" name="calPath" value="{$calPath}"/>
3085           <table cellspacing="0" id="shareFormTable" class="common">
3086             <tr>
3087               <th colspan="2" class="commonHeader">Set access:</th>
3088             </tr>
3089             <tr class="subhead">
3090               <th>Who:</th>
3091               <th>Rights:</th>
3092             </tr>
3093             <tr>
3094               <td>
3095                 <input type="text" name="who" size="20"/>
3096                 <br/>
3097                 <input type="radio" value="user" name="whoType" checked="checked"/> user
3098                 <input type="radio" value="group" name="whoType"/> group
3099                 <p>OR</p>
3100                 <p>
3101                   <input type="radio" value="auth" name="whoType"/> all authorized users<br/>
3102                   <input type="radio" value="other" name="whoType"/> other users<br/>
3103                   <input type="radio" value="owner" name="whoType"/> owner
3104                 </p>
3105                 <!-- we may never use the invert action ...it is probably
3106                      too confusing, and can be achieved in other ways -->
3107                 <!--
3108                 <p class="padTop">
3109                   <input type="checkbox" value="yes" name="notWho"/> invert (deny)
3110                 </p>-->
3111               </td>
3112               <td>
3113                 <ul id="howList">
3114                   <li>
3115                     <input type="radio" value="A" name="how"/>
3116                     <strong>All</strong> (read, write, delete)</li>
3117                   <li class="padTop">
3118                     <input type="radio" value="R" name="how" checked="checked"/>
3119                     <strong>Read</strong> (content, access, freebusy)
3120                   </li>
3121                   <li>
3122                     <input type="radio" value="f" name="how"/> Read freebusy only
3123                   </li>
3124                   <li class="padTop">
3125                     <input type="radio" value="Rc" name="how"/>
3126                     <strong>Read</strong> and <strong>Write content only</strong>
3127                   </li>
3128                   <li class="padTop">
3129                     <input type="radio" value="W" name="how"/>
3130                     <strong>Write and delete</strong> (content, access, properties)
3131                   </li>
3132                   <li>
3133                     <input type="radio" value="c" name="how"/> Write content only
3134                   </li>
3135                   <li>
3136                     <input type="radio" value="u" name="how"/> Delete only
3137                   </li>
3138                   <li class="padTop">
3139                     <input type="radio" value="N" name="how"/>
3140                     <strong>None</strong>
3141                   </li>
3142                   <!--
3143                   <li class="padTop">
3144                     <input type="radio" value="default" name="how"/>
3145                     <strong>Restore default access</strong>
3146                   </li>-->
3147                 </ul>
3148               </td>
3149             </tr>
3150           </table>
3151           <input type="submit" name="submit" value="Submit"/>
3152         </form>
3153       </xsl:if>
3154     </div>
3155   </xsl:template>
3156
3157   <xsl:template name="calendarList">
3158     <h3>Manage Calendars</h3>
3159     <ul>
3160       <li>Select an item from the calendar list on the left to modify
3161       a calendar or folder.</li>
3162       <li>Select the
3163       <img src="{$resourcesRoot}/resources/calAddIcon.gif" width="13" height="13" alt="true" border="0"/>
3164       icon to add a new calendar or folder to the tree.
3165         <ul>
3166           <li>Folders may only contain calendars and subfolders.</li>
3167           <li>Calendars may only contain events (and other calendar items).</li>
3168           <li>
3169             If a calendar is empty, it may be converted to a folder and vice
3170             versa.  If a calendar or folder are not empty, it may not be
3171             converted.
3172           </li>
3173         </ul>
3174       </li>
3175     </ul>
3176   </xsl:template>
3177
3178   <xsl:template name="calendarDescriptions">
3179     <h2>Calendar Information</h2>
3180     <ul>
3181       <li>Select an item from the calendar tree on the left to view all information
3182       about that calendar or folder.  The tree on the left represents the calendar
3183       heirarchy.</li>
3184     </ul>
3185
3186     <p>
3187       <strong>All Calendar Descriptions:</strong>
3188     </p>
3189     <table id="flatCalendarDescriptions" cellspacing="0">
3190       <tr>
3191         <th>Name</th>
3192         <th>Description</th>
3193       </tr>
3194       <xsl:for-each select="//calendar">
3195         <xsl:variable name="descClass">
3196           <xsl:choose>
3197             <xsl:when test="position() mod 2 = 0">even</xsl:when>
3198             <xsl:otherwise>odd</xsl:otherwise>
3199           </xsl:choose>
3200         </xsl:variable>
3201         <tr class="{$descClass}">
3202           <td>
3203             <xsl:value-of select="name"/>
3204           </td>
3205           <td>
3206             <xsl:value-of select="desc"/>
3207           </td>
3208         </tr>
3209       </xsl:for-each>
3210     </table>
3211   </xsl:template>
3212
3213   <xsl:template match="currentCalendar" mode="displayCalendar">
3214     <h2>Calendar Information</h2>
3215     <table class="eventFormTable">
3216       <tr>
3217         <th>Name:</th>
3218         <td>
3219           <xsl:value-of select="name"/>
3220         </td>
3221       </tr>
3222       <tr>
3223         <th>Path:</th>
3224         <td>
3225           <xsl:value-of select="path"/>
3226         </td>
3227       </tr>
3228       <tr>
3229         <th>Summary:</th>
3230         <td>
3231           <xsl:value-of select="summary"/>
3232         </td>
3233       </tr>
3234       <tr>
3235         <th>Description:</th>
3236         <td>
3237           <xsl:value-of select="desc"/>
3238         </td>
3239       </tr>
3240     </table>
3241   </xsl:template>
3242
3243   <xsl:template match="currentCalendar" mode="deleteCalendarConfirm">
3244     <xsl:choose>
3245       <xsl:when test="calendarCollection='true'">
3246         <h3>Delete Calendar</h3>
3247         <p>
3248           The following calendar will be deleted.  Continue?
3249         </p>
3250       </xsl:when>
3251       <xsl:otherwise>
3252         <h3>Delete Folder</h3>
3253         <p>
3254           The following folder <em>and all its contents</em> will be deleted.
3255           Continue?
3256         </p>
3257       </xsl:otherwise>
3258     </xsl:choose>
3259
3260     <form name="delCalForm" action="{$calendar-delete}">
3261       <table class="eventFormTable">
3262         <tr>
3263           <th>Path:</th>
3264           <td>
3265             <xsl:value-of select="path"/>
3266           </td>
3267         </tr>
3268         <tr>
3269           <th>Name:</th>
3270           <td>
3271             <xsl:value-of select="name"/>
3272           </td>
3273         </tr>
3274         <tr>
3275           <th>Summary:</th>
3276           <td>
3277             <xsl:value-of select="summary"/>
3278           </td>
3279         </tr>
3280         <tr>
3281           <th>Description:</th>
3282           <td>
3283             <xsl:value-of select="desc"/>
3284           </td>
3285         </tr>
3286       </table>
3287
3288       <table border="0" id="submitTable">
3289         <tr>
3290           <td>
3291             <input type="submit" name="cancelled" value="Cancel"/>
3292           </td>
3293           <td align="right">
3294             <xsl:choose>
3295               <xsl:when test="calendarCollection='true'">
3296                 <input type="submit" name="delete" value="Yes: Delete Calendar!"/>
3297               </xsl:when>
3298               <xsl:otherwise>
3299                 <input type="submit" name="delete" value="Yes: Delete Folder!"/>
3300               </xsl:otherwise>
3301             </xsl:choose>
3302           </td>
3303         </tr>
3304       </table>
3305     </form>
3306   </xsl:template>
3307
3308   <!-- the selectCalForEvent listing creates a calendar tree in a pop-up window -->
3309   <xsl:template name="selectCalForEvent">
3310     <div id="calTreeBlock">
3311       <h2>Select a calendar</h2>
3312       <!--<form name="toggleCals" action="{$event-selectCalForEvent}">
3313         <xsl:choose>
3314           <xsl:when test="/bedeworkadmin/appvar[key='showAllCalsForEvent']/value = 'true'">
3315             <input type="radio" name="setappvar" value="showAllCalsForEvent(false)" onclick="submit()"/>
3316             show only writable calendars
3317             <input type="radio" name="setappvar" value="showAllCalsForEvent(true)" checked="checked" onclick="submit()"/>
3318             show all calendars
3319           </xsl:when>
3320           <xsl:otherwise>
3321             <input type="radio" name="setappvar" value="showAllCalsForEvent(false)" checked="checked" onclick="submit()"/>
3322             show only writable calendars
3323             <input type="radio" name="setappvar" value="showAllCalsForEvent(true)" onclick="submit()"/>
3324             show all calendars
3325           </xsl:otherwise>
3326         </xsl:choose>
3327       </form>-->
3328       <h4>Calendars</h4>
3329       <ul id="calendarTree">
3330         <xsl:apply-templates select="/bedeworkadmin/calendars/calendar" mode="selectCalForEventCalTree"/>
3331       </ul>
3332     </div>
3333   </xsl:template>
3334
3335   <xsl:template match="calendar" mode="selectCalForEventCalTree">
3336     <xsl:variable name="id" select="id"/>
3337     <li>
3338       <xsl:attribute name="class">
3339         <xsl:choose>
3340           <xsl:when test="calendarCollection='false'">folder</xsl:when>
3341           <xsl:otherwise>calendar</xsl:otherwise>
3342         </xsl:choose>
3343       </xsl:attribute>
3344       <xsl:variable name="calPath" select="path"/><!-- not the encodedPath when put in a form - otherwise it gets double encoded -->
3345       <xsl:variable name="calDisplay" select="path"/>
3346       <xsl:choose>
3347         <xsl:when test="currentAccess/current-user-privilege-set/privilege/write-content and (calendarCollection = 'true')">
3348           <a href="javascript:updateEventFormCalendar('{$calPath}','{$calDisplay}')">
3349             <strong>
3350               <xsl:value-of select="name"/>
3351             </strong>
3352           </a>
3353         </xsl:when>
3354         <xsl:otherwise>
3355           <xsl:value-of select="name"/>
3356         </xsl:otherwise>
3357       </xsl:choose>
3358       <xsl:if test="calendar">
3359         <ul>
3360           <xsl:apply-templates select="calendar" mode="selectCalForEventCalTree"/>
3361         </ul>
3362       </xsl:if>
3363     </li>
3364   </xsl:template>
3365
3366   <!--+++++++++++++++ Subscriptions ++++++++++++++++++++-->
3367   <xsl:template match="subscriptions">
3368     <table id="subsTable">
3369       <tr>
3370         <td class="cals">
3371           <h3>Public calendars</h3>
3372           <p class="smaller">
3373             Select a calendar below to add a <em><strong>new</strong>
3374             </em>
3375             internal subscription. <!-- or
3376             <a href="{$subscriptions-initAdd}&amp;calUri=please enter a calendar uri">
3377             subscribe to an external calendar</a>.-->
3378           </p>
3379           <ul id="calendarTree">
3380             <xsl:apply-templates select="/bedeworkadmin/subscriptions/subscribe/calendars/calendar" mode="subscribe"/>
3381           </ul>
3382         </td>
3383         <td class="subs">
3384           <xsl:choose>
3385             <xsl:when test="/bedeworkadmin/page='subscriptions'">
3386               <xsl:call-template name="subscriptionList"/>
3387             </xsl:when>
3388             <xsl:when test="/bedeworkadmin/creating='true'">
3389               <xsl:apply-templates select="subscription" mode="addSubscription"/>
3390             </xsl:when>
3391             <xsl:otherwise>
3392               <xsl:apply-templates select="subscription" mode="modSubscription"/>
3393             </xsl:otherwise>
3394           </xsl:choose>
3395         </td>
3396       </tr>
3397     </table>
3398   </xsl:template>
3399
3400   <xsl:template match="calendar" mode="subscribe">
3401     <xsl:variable name="calPath" select="encodedPath"/>
3402     <xsl:variable name="itemClass">
3403       <xsl:choose>
3404         <xsl:when test="calendarCollection='false'">folder</xsl:when>
3405         <xsl:otherwise>calendar</xsl:otherwise>
3406       </xsl:choose>
3407     </xsl:variable>
3408     <li class="{$itemClass}">
3409       <a href="{$subscriptions-initAdd}&amp;calPath={$calPath}">
3410         <xsl:value-of select="name"/>
3411       </a>
3412       <xsl:if test="calendar">
3413         <ul>
3414           <xsl:apply-templates select="calendar" mode="subscribe">
3415             <!--<xsl:sort select="title" order="ascending" case-order="upper-first"/>--></xsl:apply-templates>
3416         </ul>
3417       </xsl:if>
3418     </li>
3419   </xsl:template>
3420
3421   <xsl:template match="subscription" mode="addSubscription">
3422     <h2>Add New Subscription</h2>
3423     <p class="note">*the subsciption name must be unique</p>
3424     <form name="subscribeForm" action="{$subscriptions-subscribe}" method="post">
3425       <table class="eventFormTable">
3426         <tr>
3427           <th>Name*:</th>
3428           <td>
3429             <xsl:variable name="subName" select="name"/>
3430             <input type="text" value="{$subName}" name="subscription.name" size="60"/>
3431           </td>
3432         </tr>
3433         <xsl:if test="internal='false'">
3434           <tr>
3435             <th>Uri:</th>
3436             <td>
3437               <xsl:variable name="subUri" select="uri"/>
3438               <input type="text" value="{$subUri}" name="subscription.uri" size="60"/>
3439             </td>
3440           </tr>
3441         </xsl:if>
3442         <tr>
3443           <th>Display:</th>
3444           <td>
3445             <input type="radio" value="true" name="subscription.display" checked="checked"/> yes
3446             <input type="radio" value="false" name="subscription.display"/> no
3447           </td>
3448         </tr>
3449         <xsl:if test="/bedeworkadmin/userInfo/superUser='true'">
3450           <tr>
3451             <th>Unremovable:</th>
3452             <td>
3453               <input type="radio" value="true" name="unremoveable" size="60"/> true
3454               <input type="radio" value="false" name="unremoveable" size="60" checked="checked"/> false
3455             </td>
3456           </tr>
3457         </xsl:if>
3458         <tr>
3459           <th>Style:</th>
3460           <td>
3461             <xsl:variable name="subStyle" select="style"/>
3462             <input type="text" value="{$subStyle}" name="subscription.style" size="50"/>
3463             <div style="width: 400px">
3464               Enter a css class to style events rendered in the list and grid
3465               views.  Leave blank to render with the default colors, or select from
3466               one of the system-wide choices:
3467               <select name="bwColors" onchange="document.subscribeForm['subscription.style'].value = this.value">
3468                 <option value="">default</option>
3469                 <xsl:for-each select="document('subColors.xml')/subscriptionColors/color">
3470                   <xsl:variable name="subColor" select="."/>
3471                   <option value="{$subColor}" class="{$subColor}">
3472                     <xsl:value-of select="@name"/>
3473                   </option>
3474                 </xsl:for-each>
3475               </select>
3476               <p class="note">Note: This class is added alongside the default class used
3477               in the list and grid views.  It does not replace it, so create your
3478               style appropriately.</p>
3479             </div>
3480           </td>
3481         </tr>
3482       </table>
3483       <table border="0" id="submitTable">
3484         <tr>
3485           <td>
3486             <input type="submit" name="addSubscription" value="Add Subscription"/>
3487             <input type="submit" name="cancelled" value="Cancel"/>
3488             <input type="reset" value="Clear"/>
3489           </td>
3490         </tr>
3491       </table>
3492     </form>
3493   </xsl:template>
3494
3495   <xsl:template match="subscription" mode="modSubscription">
3496     <h2>Modify Subscription</h2>
3497     <form name="subscribeForm" action="{$subscriptions-subscribe}" method="post">
3498       <table class="eventFormTable">
3499         <tr>
3500           <th>Name*:</th>
3501           <td>
3502             <xsl:value-of select="name"/>
3503             <xsl:variable name="subName" select="name"/>
3504             <input type="hidden" value="{$subName}" name="name"/>
3505           </td>
3506         </tr>
3507         <xsl:choose>
3508           <xsl:when test="internal='false'">
3509             <tr>
3510               <th>Uri:</th>
3511               <td>
3512                 <xsl:variable name="subUri" select="uri"/>
3513                 <input type="text" value="{$subUri}" name="subscription.uri" size="60"/>
3514               </td>
3515             </tr>
3516           </xsl:when>
3517           <xsl:otherwise>
3518             <tr>
3519               <th>Uri:</th>
3520               <td>
3521                 <xsl:value-of select="uri"/>
3522               </td>
3523             </tr>
3524           </xsl:otherwise>
3525         </xsl:choose>
3526         <tr>
3527           <th>Display:</th>
3528           <td>
3529             <xsl:choose>
3530               <xsl:when test="display='true'">
3531                 <input type="radio" value="true" name="subscription.display" checked="checked"/> yes
3532                 <input type="radio" value="false" name="subscription.display"/> no
3533               </xsl:when>
3534               <xsl:otherwise>
3535                 <input type="radio" value="true" name="subscription.display"/> yes
3536                 <input type="radio" value="false" name="subscription.display" checked="checked"/> no
3537               </xsl:otherwise>
3538             </xsl:choose>
3539           </td>
3540         </tr>
3541         <xsl:if test="/bedeworkadmin/userInfo/superUser='true'">
3542           <tr>
3543             <th>Unremovable:</th>
3544             <td>
3545               <xsl:choose>
3546                 <xsl:when test="unremoveable='true'">
3547                   <input type="radio" value="true" name="unremoveable" size="60" checked="checked"/> true
3548                   <input type="radio" value="false" name="unremoveable" size="60"/> false
3549                 </xsl:when>
3550                 <xsl:otherwise>
3551                   <input type="radio" value="true" name="unremoveable" size="60"/> true
3552                   <input type="radio" value="false" name="unremoveable" size="60" checked="checked"/> false
3553                 </xsl:otherwise>
3554               </xsl:choose>
3555             </td>
3556           </tr>
3557         </xsl:if>
3558         <tr>
3559           <th>Style:</th>
3560           <td>
3561             <xsl:variable name="subStyle" select="style"/>
3562             <input type="text" value="{$subStyle}" name="subscription.style" size="60"/>
3563             <div style="width: 400px">
3564               Enter a css class to style events rendered in the list and grid
3565               views.  Leave blank to render with the default colors, or select from
3566               one of the system-wide choices:
3567               <select name="bwColors" onchange="document.subscribeForm['subscription.style'].value = this.value">
3568                 <option value="">default</option>
3569                 <xsl:for-each select="document('subColors.xml')/subscriptionColors/color">
3570                   <xsl:variable name="subColor" select="."/>
3571                   <option value="{$subColor}" class="{$subColor}">
3572                     <xsl:value-of select="@name"/>
3573                   </option>
3574                 </xsl:for-each>
3575               </select>
3576               <p class="note">Note: This class is added alongside the default class used
3577               in the list and grid views.  It does not replace it, so create your
3578               style appropriately.</p>
3579             </div>
3580           </td>
3581         </tr>
3582       </table>
3583       <table border="0" id="submitTable">
3584         <tr>
3585           <td>
3586             <input type="submit" name="updateSubscription" value="Update Subscription"/>
3587             <input type="submit" name="cancelled" value="Cancel"/>
3588             <input type="reset" value="Reset"/>
3589           </td>
3590           <td align="right">
3591             <input type="submit" name="delete" value="Delete Subscription"/>
3592           </td>
3593         </tr>
3594       </table>
3595     </form>
3596   </xsl:template>
3597
3598   <xsl:template name="subscriptionList">
3599     <h3>Current subscriptions</h3>
3600     <table id="commonListTable">
3601       <tr>
3602         <th>Name</th>
3603         <th>URI</th>
3604         <th>Style</th>
3605         <th>Display</th>
3606         <th>Unremovable</th>
3607         <th>External</th>
3608         <th>Deleted?</th>
3609       </tr>
3610       <xsl:for-each select="subscription">
3611         <!--<xsl:sort select="name" order="ascending" case-order="upper-first"/>-->
3612         <tr>
3613           <td>
3614             <xsl:variable name="subname" select="name"/>
3615             <a href="{$subscriptions-fetchForUpdate}&amp;subname={$subname}">
3616               <xsl:value-of select="name"/>
3617             </a>
3618           </td>
3619           <td>
3620             <xsl:value-of select="uri"/>
3621           </td>
3622           <td>
3623             <xsl:value-of select="style"/>
3624           </td>
3625           <td class="center">
3626             <xsl:if test="display='true'">
3627               <img src="{$resourcesRoot}/resources/greenCheckIcon.gif" width="13" height="13" alt="true" border="0"/>
3628             </xsl:if>
3629           </td>
3630           <td class="center">
3631             <xsl:if test="unremoveable='true'">
3632               <img src="{$resourcesRoot}/resources/redCheckIcon.gif" width="13" height="13" alt="true" border="0"/>
3633             </xsl:if>
3634           </td>
3635           <td class="center">
3636             <xsl:if test="internal='false'">
3637               <img src="{$resourcesRoot}/resources/greenCheckIcon.gif" width="13" height="13" alt="true" border="0"/>
3638             </xsl:if>
3639           </td>
3640           <td class="center">
3641             <xsl:if test="calendarDeleted='true'">
3642               <img src="{$resourcesRoot}/resources/redCheckIcon.gif" width="13" height="13" alt="true" border="0"/>
3643             </xsl:if>
3644           </td>
3645         </tr>
3646       </xsl:for-each>
3647     </table>
3648     <!--<h4><a href="{$subscriptions-initAdd}&amp;calUri=please enter a calendar uri">Subscribe to a remote calendar</a> (by URI)</h4>-->
3649   </xsl:template>
3650
3651   <!--+++++++++++++++ Views ++++++++++++++++++++-->
3652   <xsl:template match="views" mode="viewList">
3653
3654     <h3>Add a new view</h3>
3655     <form name="addView" action="{$view-addView}" method="post">
3656       <input type="text" name="name" size="60"/>
3657       <input type="submit" value="add view" name="addview"/>
3658     </form>
3659
3660     <h3>Views</h3>
3661     <table id="commonListTable">
3662       <tr>
3663         <th>Name</th>
3664         <th>Included subscriptions</th>
3665       </tr>
3666
3667       <xsl:for-each select="view">
3668         <!--<xsl:sort select="name" order="ascending" case-order="upper-first"/>-->
3669         <tr>
3670           <td>
3671             <xsl:variable name="viewName" select="name"/>
3672             <a href="{$view-fetchForUpdate}&amp;name={$viewName}">
3673               <xsl:value-of select="name"/>
3674             </a>
3675           </td>
3676           <td>
3677             <xsl:for-each select="subscriptions/subscription">
3678               <xsl:value-of select="name"/>
3679               <xsl:if test="position()!=last()">, </xsl:if>
3680             </xsl:for-each>
3681           </td>
3682         </tr>
3683       </xsl:for-each>
3684     </table>
3685   </xsl:template>
3686
3687   <xsl:template name="modView">
3688     <h2>Update View</h2>
3689     <xsl:variable name="viewName" select="/bedeworkadmin/views/view/name"/>
3690     <h3 class="viewName">
3691       <xsl:value-of select="$viewName"/>
3692     </h3>
3693     <table id="viewsTable">
3694       <tr>
3695         <td class="subs">
3696           <h3>Available Subscriptions:</h3>
3697
3698           <table class="subscriptionsListSubs">
3699             <xsl:for-each select="/bedeworkadmin/subscriptions/subscription">
3700               <!--<xsl:sort select="name" order="ascending" case-order="upper-first"/>-->
3701               <xsl:if test="not(/bedeworkadmin/views/view/subscriptions/subscription/name=name)">
3702                 <tr>
3703                   <td>
3704                     <xsl:value-of select="name"/>
3705                   </td>
3706                   <td class="arrows">
3707                     <xsl:variable name="subAddName" select="name"/>
3708                     <a href="{$view-update}&amp;name={$viewName}&amp;add={$subAddName}">
3709                       <img src="{$resourcesRoot}/resources/arrowRight.gif"
3710                           width="13" height="13" border="0"
3711                           alt="add subscription"/>
3712                     </a>
3713                   </td>
3714                 </tr>
3715               </xsl:if>
3716             </xsl:for-each>
3717           </table>
3718         </td>
3719         <td class="view">
3720           <h3>Active Subscriptions:</h3>
3721           <table class="subscriptionsListView">
3722             <xsl:for-each select="/bedeworkadmin/views/view/subscriptions/subscription">
3723               <!--<xsl:sort select="name" order="ascending" case-order="upper-first"/>-->
3724               <tr>
3725                 <td class="arrows">
3726                   <xsl:variable name="subRemoveName" select="name"/>
3727                   <a href="{$view-update}&amp;name={$viewName}&amp;remove={$subRemoveName}">
3728                     <img src="{$resourcesRoot}/resources/arrowLeft.gif"
3729                         width="13" height="13" border="0"
3730                         alt="add subscription"/>
3731                   </a>
3732                 </td>
3733                 <td>
3734                   <xsl:value-of select="name"/>
3735                 </td>
3736               </tr>
3737             </xsl:for-each>
3738           </table>
3739         </td>
3740       </tr>
3741     </table>
3742     <table border="0" id="submitTable">
3743       <tr>
3744         <td>
3745           <input type="button" name="return" value="Return to Views Listing" onclick="javascript:location.replace('{$view-fetch}')"/>
3746         </td>
3747         <td align="right">
3748           <form name="deleteViewForm" action="{$view-fetchForUpdate}" method="post">
3749             <input type="submit" name="deleteButton" value="Delete View"/>
3750             <input type="hidden" name="name" value="{$viewName}"/>
3751             <input type="hidden" name="delete" value="yes"/>
3752           </form>
3753         </td>
3754       </tr>
3755     </table>
3756   </xsl:template>
3757
3758   <xsl:template name="deleteViewConfirm">
3759     <h2>Remove View?</h2>
3760
3761     <xsl:variable name="viewName" select="/bedeworkadmin/views/view/name"/>
3762     <p>The following view will be removed. Continue?</p>
3763
3764     <h3 class="viewName">
3765       <xsl:value-of select="$viewName"/>
3766     </h3>
3767     <form name="removeView" action="{$view-remove}">
3768       <input type="hidden" name="name" value="{$viewName}"/>
3769       <input type="submit" name="delete" value="Yes: Remove View"/>
3770       <input type="submit" name="cancelled" value="No: Cancel"/>
3771     </form>
3772
3773   </xsl:template>
3774
3775   <!--==== UPLOAD ====-->
3776   <xsl:template name="upload">
3777   <!-- The name "eventForm" is referenced by several javascript functions. Do not
3778     change it without modifying includes.js -->
3779     <form name="eventForm" method="post" action="{$event-upload}" id="standardForm" enctype="multipart/form-data">
3780       <h2>Upload iCAL File</h2>
3781       <table class="common" cellspacing="0">
3782         <tr>
3783           <td class="fieldname">
3784             Filename:
3785           </td>
3786           <td align="left">
3787             <input type="file" name="uploadFile" size="60" />
3788           </td>
3789         </tr>
3790         <tr>
3791           <td class="fieldname padMeTop">
3792             Into calendar:
3793           </td>
3794           <td align="left" class="padMeTop">
3795             <input type="hidden" name="newCalPath" value=""/>
3796             <span id="bwEventCalDisplay">
3797               <em>none selected</em>
3798             </span>
3799             <xsl:text> </xsl:text>
3800             [<a href="javascript:launchCalSelectWindow('{$event-selectCalForEvent}')" class="small">change</a>]
3801           </td>
3802         </tr>
3803         <!--<tr>
3804           <td class="fieldname padMeTop">
3805             Effects free/busy:
3806           </td>
3807           <td align="left" class="padMeTop">
3808             <input type="radio" value="" name="transparency" checked="checked"/> accept event's settings<br/>
3809             <input type="radio" value="OPAQUE" name="transparency"/> yes <span class="note">(opaque: event status affects your free/busy)</span><br/>
3810             <input type="radio" value="TRANSPARENT" name="transparency"/> no <span class="note">(transparent: event status does not affect your free/busy)</span><br/>
3811           </td>
3812         </tr>-->
3813         <tr>
3814           <td class="fieldname padMeTop">
3815             Status:
3816           </td>
3817           <td align="left" class="padMeTop">
3818             <input type="radio" value="" name="status" checked="checked"/> accept event's status<br/>
3819             <input type="radio" value="CONFIRMED" name="status"/> confirmed<br/>
3820             <input type="radio" value="TENTATIVE" name="status"/> tentative<br/>
3821             <input type="radio" value="CANCELLED" name="status"/> cancelled<br/>
3822           </td>
3823         </tr>
3824       </table>
3825       <table border="0" id="submitTable">
3826         <tr>
3827           <td>
3828             <input name="submit" type="submit" value="Continue"/>
3829             <input name="cancelled" type="submit" value="Cancel"/>
3830           </td>
3831         </tr>
3832       </table>
3833     </form>
3834   </xsl:template>
3835
3836   <!--+++++++++++++++ System Parameters (preferences) ++++++++++++++++++++-->
3837   <xsl:template name="modSyspars">
3838     <h2>Modify System Preferences/Parameters</h2>
3839     <p>
3840       Do not change unless you know what you're doing.<br/>
3841       Changes to these parameters have wide impact on the system.
3842     </p>
3843     <form name="systemParamsForm" action="{$system-update}" method="post">
3844       <table class="eventFormTable params">
3845         <tr>
3846           <th>System name:</th>
3847           <td>
3848             <xsl:variable name="sysname" select="/bedeworkadmin/system/name"/>
3849             <xsl:value-of select="$sysname"/>
3850             <div class="desc">
3851               Name for this system. Cannot be changed.
3852             </div>
3853           </td>
3854         </tr>
3855         <tr>
3856           <th>Default timezone:</th>
3857           <td>
3858             <xsl:variable name="tzid" select="/bedeworkadmin/system/tzid"/>
3859
3860             <select name="tzid">
3861               <option value="-1">select timezone...</option>
3862               <xsl:for-each select="/bedeworkadmin/timezones/timezone">
3863                 <option>
3864                   <xsl:attribute name="value"><xsl:value-of select="id"/></xsl:attribute>
3865                   <xsl:if test="/bedeworkadmin/system/tzid = id"><xsl:attribute name="selected">selected</xsl:attribute></xsl:if>
3866                   <xsl:value-of select="name"/>
3867                 </option>
3868               </xsl:for-each>
3869             </select>
3870
3871             <div class="desc">
3872               Default timezone id for date/time values. This should normally be your local timezone.
3873             </div>
3874           </td>
3875         </tr>
3876         <tr>
3877           <th>System id:</th>
3878           <td>
3879             <xsl:variable name="systemid" select="/bedeworkadmin/system/systemid"/>
3880             <xsl:value-of select="$systemid"/>
3881             <div class="desc">
3882               System id used when building uids and identifying users. Should not be changed.
3883             </div>
3884           </td>
3885         </tr>
3886         <tr>
3887           <th>Principal Root:</th>
3888           <td>
3889             <xsl:variable name="proot" select="/bedeworkadmin/system/principalRoot"/>
3890             <input value="{$proot}" name="principalRoot" size="0"/>
3891             <div class="desc">
3892               Used in WebDAV and CalDAV access to define root of user and group principal trees.
3893             </div>
3894           </td>
3895         </tr>
3896         <tr>
3897           <th>User Principal Root:</th>
3898           <td>
3899             <xsl:variable name="uproot" select="/bedeworkadmin/system/userPrincipalRoot"/>
3900             <input value="{$uproot}" name="userPrincipalRoot" size="0"/>
3901             <div class="desc">
3902               Used in WebDAV and CalDAV access to define root of user principal subtree.
3903             </div>
3904           </td>
3905         </tr>
3906         <tr>
3907           <th>Group Principal Root:</th>
3908           <td>
3909             <xsl:variable name="gproot" select="/bedeworkadmin/system/groupPrincipalRoot"/>
3910             <input value="{$gproot}" name="groupPrincipalRoot" size="0"/>
3911             <div class="desc">
3912               Used in WebDAV and CalDAV access to define root of group principal subtree.
3913             </div>
3914           </td>
3915         </tr>
3916         <tr>
3917           <th>Public Calendar Root:</th>
3918           <td>
3919             <xsl:variable name="publicCalendarRoot" select="/bedeworkadmin/system/publicCalendarRoot"/>
3920             <xsl:value-of select="$publicCalendarRoot"/>
3921             <div class="desc">
3922               Name for public calendars root directory. Should not be changed.
3923             </div>
3924           </td>
3925         </tr>
3926         <tr>
3927           <th>User Calendar Root:</th>
3928           <td>
3929             <xsl:variable name="userCalendarRoot" select="/bedeworkadmin/system/userCalendarRoot"/>
3930             <xsl:value-of select="$userCalendarRoot"/>
3931             <div class="desc">
3932               Name for user calendars root directory. Should not be changed.
3933             </div>
3934           </td>
3935         </tr>
3936         <tr>
3937           <th>User Calendar Default name:</th>
3938           <td>
3939             <xsl:variable name="userDefaultCalendar" select="/bedeworkadmin/system/userDefaultCalendar"/>
3940             <input value="{$userDefaultCalendar}" name="userDefaultCalendar" />
3941             <div class="desc">
3942               Default name for user calendar. Used when initialising user. Possibly can be changed.
3943             </div>
3944           </td>
3945         </tr>
3946         <tr>
3947           <th>Trash Calendar Default name:</th>
3948           <td>
3949             <xsl:variable name="defaultTrashCalendar" select="/bedeworkadmin/system/defaultTrashCalendar"/>
3950             <input value="{$defaultTrashCalendar}" name="defaultTrashCalendar" />
3951             <div class="desc">
3952               Default name for user trash calendar. Used when initialising user. Possibly can be changed.
3953             </div>
3954           </td>
3955         </tr>
3956         <tr>
3957           <th>User Inbox Default name:</th>
3958           <td>
3959             <xsl:variable name="userInbox" select="/bedeworkadmin/system/userInbox"/>
3960             <input value="{$userInbox}" name="userInbox" />
3961             <div class="desc">
3962               Default name for user inbox. Used when initialising user. Possibly can be changed.
3963             </div>
3964           </td>
3965         </tr>
3966         <tr>
3967           <th>User Outbox Default name:</th>
3968           <td>
3969             <xsl:variable name="userOutbox" select="/bedeworkadmin/system/userOutbox"/>
3970             <input value="{$userOutbox}" name="userOutbox" />
3971             <div class="desc">
3972               Default name for user outbox. Used when initialising user. Possibly can be changed.
3973             </div>
3974           </td>
3975         </tr>
3976         <tr>
3977           <th>User Deleted Calendar Default name:</th>
3978           <td>
3979             <xsl:variable name="deletedCalendar" select="/bedeworkadmin/system/deletedCalendar"/>
3980             <input value="{$deletedCalendar}" name="deletedCalendar" />
3981             <div class="desc">
3982               Default name for user calendar used to hold deleted items. Used when initialising user. Possibly can be changed.
3983             </div>
3984           </td>
3985         </tr>
3986         <tr>
3987           <th>User Busy Calendar Default name:</th>
3988           <td>
3989             <xsl:variable name="busyCalendar" select="/bedeworkadmin/system/busyCalendar"/>
3990             <input value="{$busyCalendar}" name="busyCalendar" />
3991             <div class="desc">
3992               Default name for user busy time calendar. Used when initialising user. Possibly can be changed.
3993             </div>
3994           </td>
3995         </tr>
3996         <tr>
3997           <th>Default user view name:</th>
3998           <td>
3999             <xsl:variable name="defaultViewName" select="/bedeworkadmin/system/defaultUserViewName"/>
4000             <input value="{$defaultViewName}" name="defaultUserViewName" />
4001             <div class="desc">
4002               Name used for default view created when a new user is added
4003             </div>
4004           </td>
4005         </tr>
4006         <tr>
4007           <th>Http connections per user:</th>
4008           <td>
4009             <xsl:variable name="httpPerUser" select="/bedeworkadmin/system/httpConnectionsPerUser"/>
4010             <input value="{$httpPerUser}" name="httpConnectionsPerUser" />
4011             <div class="desc">
4012             </div>
4013           </td>
4014         </tr>
4015         <tr>
4016           <th>Http connections per host:</th>
4017           <td>
4018             <xsl:variable name="httpPerHost" select="/bedeworkadmin/system/httpConnectionsPerHost"/>
4019             <input value="{$httpPerHost}" name="httpConnectionsPerHost" />
4020             <div class="desc">
4021             </div>
4022           </td>
4023         </tr>
4024         <tr>
4025           <th>Total http connections:</th>
4026           <td>
4027             <xsl:variable name="httpTotal" select="/bedeworkadmin/system/httpConnections"/>
4028             <input value="{$httpTotal}" name="httpConnections" />
4029             <div class="desc">
4030             </div>
4031           </td>
4032         </tr>
4033         <tr>
4034           <th>Maximum length of public event description:</th>
4035           <td>
4036             <xsl:variable name="maxPublicDescriptionLength" select="/bedeworkadmin/system/maxPublicDescriptionLength"/>
4037             <input value="{$maxPublicDescriptionLength}" name="maxPublicDescriptionLength" />
4038             <div class="desc">
4039             </div>
4040           </td>
4041         </tr>
4042         <tr>
4043           <th>Maximum length of user event description:</th>
4044           <td>
4045             <xsl:variable name="maxUserDescriptionLength" select="/bedeworkadmin/system/maxUserDescriptionLength"/>
4046             <input value="{$maxUserDescriptionLength}" name="maxUserDescriptionLength" />
4047             <div class="desc">
4048             </div>
4049           </td>
4050         </tr>
4051         <tr>
4052           <th>Maximum size of a user entity:</th>
4053           <td>
4054             <xsl:variable name="maxUserEntitySize" select="/bedeworkadmin/system/maxUserEntitySize"/>
4055             <input value="{$maxUserEntitySize}" name="maxUserEntitySize" />
4056             <div class="desc">
4057             </div>
4058           </td>
4059         </tr>
4060         <tr>
4061           <th>Default user quota:</th>
4062           <td>
4063             <xsl:variable name="defaultUserQuota" select="/bedeworkadmin/system/defaultUserQuota"/>
4064             <input value="{$defaultUserQuota}" name="defaultUserQuota" />
4065             <div class="desc">
4066             </div>
4067           </td>
4068         </tr>
4069         <tr>
4070           <th>Max recurring instances:</th>
4071           <td>
4072             <xsl:variable name="maxInstances" select="/bedeworkadmin/system/maxInstances"/>
4073             <input value="{$maxInstances}" name="maxInstances" />
4074             <div class="desc">
4075               Used to limit recurring events to reasonable numbers of instances.
4076             </div>
4077           </td>
4078         </tr>
4079         <tr>
4080           <th>Max recurring years:</th>
4081           <td>
4082             <xsl:variable name="maxYears" select="/bedeworkadmin/system/maxYears"/>
4083             <input value="{$maxYears}" name="maxYears" />
4084             <div class="desc">
4085               Used to limit recurring events to reasonable period of time.
4086             </div>
4087           </td>
4088         </tr>
4089         <tr>
4090           <th>User authorisation class:</th>
4091           <td>
4092             <xsl:variable name="userauthClass" select="/bedeworkadmin/system/userauthClass"/>
4093             <input value="{$userauthClass}" name="userauthClass" class="wide"/>
4094             <div class="desc">
4095               Class used to determine authorisation (not authentication) for
4096               administrative users. Should probably only be changed on rebuild.
4097             </div>
4098           </td>
4099         </tr>
4100         <tr>
4101           <th>Mailer class:</th>
4102           <td>
4103             <xsl:variable name="mailerClass" select="/bedeworkadmin/system/mailerClass"/>
4104             <input value="{$mailerClass}" name="mailerClass" class="wide"/>
4105             <div class="desc">
4106               Class used to mail events. Should probably only be changed on rebuild.
4107             </div>
4108           </td>
4109         </tr>
4110         <tr>
4111           <th>Admin groups class:</th>
4112           <td>
4113             <xsl:variable name="admingroupsClass" select="/bedeworkadmin/system/admingroupsClass"/>
4114             <input value="{$admingroupsClass}" name="admingroupsClass" class="wide"/>
4115             <div class="desc">
4116               Class used to query and maintain groups for
4117               administrative users. Should probably only be changed on rebuild.
4118             </div>
4119           </td>
4120         </tr>
4121         <tr>
4122           <th>User groups class:</th>
4123           <td>
4124             <xsl:variable name="usergroupsClass" select="/bedeworkadmin/system/usergroupsClass"/>
4125             <input value="{$usergroupsClass}" name="usergroupsClass" class="wide"/>
4126             <div class="desc">
4127               Class used to query and maintain groups for
4128               non-administrative users. Should probably only be changed on rebuild.
4129             </div>
4130           </td>
4131         </tr>
4132         <tr>
4133           <th>Directory browsing disallowed:</th>
4134           <td>
4135             <xsl:variable name="directoryBrowsingDisallowed" select="/bedeworkadmin/system/directoryBrowsingDisallowed"/>
4136             <input value="{$directoryBrowsingDisallowed}" name="directoryBrowsingDisallowed" />
4137             <div class="desc">
4138               True if the server hosting the xsl disallows directory browsing.
4139             </div>
4140           </td>
4141         </tr>
4142         <tr>
4143           <th>Index root:</th>
4144           <td>
4145             <xsl:variable name="indexRoot" select="/bedeworkadmin/system/indexRoot"/>
4146             <input value="{$indexRoot}" name="indexRoot" class="wide"/>
4147             <div class="desc">
4148               Root for the event indexes. Should only be changed if the indexes are moved/copied
4149             </div>
4150           </td>
4151         </tr>
4152       </table>
4153       <table border="0" id="submitTable">
4154         <tr>
4155           <td>
4156             <input type="submit" name="updateSystemParams" value="Update"/>
4157             <input type="submit" name="cancelled" value="Cancel"/>
4158             <input type="reset" value="Reset"/>
4159           </td>
4160         </tr>
4161       </table>
4162     </form>
4163   </xsl:template>
4164
4165   <!--+++++++++++++++ Calendar Suites (calsuite) ++++++++++++++++++++-->
4166   <xsl:template match="calSuites" mode="calSuiteList">
4167     <h2>Manage Calendar Suites</h2>
4168
4169     <h4>Calendar suites:</h4>
4170     <p>
4171       <input type="button" name="return" value="Add calendar suite" onclick="javascript:location.replace('{$calsuite-showAddForm}')"/>
4172     </p>
4173
4174     <ul>
4175       <xsl:for-each select="calSuite">
4176         <li>
4177           <xsl:variable name="name" select="name"/>
4178           <a href="{$calsuite-fetchForUpdate}&amp;name={$name}">
4179             <xsl:value-of select="name"/>
4180           </a>
4181         </li>
4182       </xsl:for-each>
4183     </ul>
4184
4185   </xsl:template>
4186
4187   <xsl:template name="addCalSuite">
4188     <h2>Add Calendar Suite</h2>
4189     <form name="calSuiteForm" action="{$calsuite-add}" method="post">
4190       <table class="eventFormTable">
4191         <tr>
4192           <th>Name:</th>
4193           <td>
4194             <input name="name" size="20"/>
4195           </td>
4196           <td>
4197             Name of your calendar suite
4198           </td>
4199         </tr>
4200         <tr>
4201           <th>Group:</th>
4202           <td>
4203             <input name="groupName" size="20"/>
4204           </td>
4205           <td>
4206             Name of admin group which contains event administrators and event owner to which preferences for the suite are attached
4207           </td>
4208         </tr>
4209         <tr>
4210           <th>Root calendar:</th>
4211           <td>
4212             <input name="calPath" size="20"/>
4213           </td>
4214           <td>
4215             Path of root calendar (not required if suite only consists of subscriptions and views)
4216           </td>
4217         </tr>
4218       </table>
4219       <table border="0" id="submitTable">
4220         <tr>
4221           <td>
4222             <input type="submit" name="updateCalSuite" value="Add"/>
4223             <input type="submit" name="cancelled" value="Cancel"/>
4224             <input type="reset" value="Reset"/>
4225           </td>
4226         </tr>
4227       </table>
4228     </form>
4229   </xsl:template>
4230
4231   <xsl:template match="calSuite" name="modCalSuite">
4232     <h2>Modify Calendar Suite</h2>
4233     <xsl:variable name="calSuiteName" select="name"/>
4234     <form name="calSuiteForm" action="{$calsuite-update}" method="post">
4235       <table class="eventFormTable">
4236         <tr>
4237           <th>Name:</th>
4238           <td>
4239             <input name="name" value="{$calSuiteName}" size="20"/>
4240           </td>
4241           <td>
4242             Name of your calendar suite
4243           </td>
4244         </tr>
4245         <tr>
4246           <th>Group:</th>
4247           <td>
4248             <xsl:variable name="group" select="group"/>
4249             <input name="groupName" value="{$group}" size="20"/>
4250           </td>
4251           <td>
4252             Name of admin group which contains event administrators and event owner to which preferences for the suite are attached
4253           </td>
4254         </tr>
4255         <tr>
4256           <th>Root calendar:</th>
4257           <td>
4258             <xsl:variable name="calPath" select="calPath"/>
4259             <input name="calPath" value="{$calPath}" size="20"/>
4260           </td>
4261           <td>
4262             Path of root calendar (not required if suite only consists of subscriptions and views)
4263           </td>
4264         </tr>
4265       </table>
4266       <table border="0" id="submitTable">
4267         <tr>
4268           <td>
4269             <input type="submit" name="updateCalSuite" value="Update"/>
4270             <input type="submit" name="cancelled" value="Cancel"/>
4271             <input type="reset" value="Reset"/>
4272           </td>
4273         </tr>
4274       </table>
4275     </form>
4276     <!--<div id="sharingBox">
4277       <h3>Manage suite administrators</h3>
4278       <table class="common">
4279         <tr>
4280           <th class="commonHeader" colspan="2">Current access:</th>
4281         </tr>
4282
4283         <xsl:for-each select="acl/ace">
4284           <tr>
4285             <th class="thin">
4286               <xsl:choose>
4287                 <xsl:when test="invert">
4288                   <em>Deny to
4289                   <xsl:choose>
4290                     <xsl:when test="invert/principal/href">
4291                       <xsl:value-of select="invert/principal/href"/>
4292                       </xsl:when>
4293                       <xsl:when test="invert/principal/property">
4294                         <xsl:value-of select="name(invert/principal/property/*)"/>
4295                       </xsl:when>
4296                       <xsl:otherwise>
4297                         <xsl:value-of select="name(invert/principal/*)"/>
4298                       </xsl:otherwise>
4299                     </xsl:choose>
4300                   </em>
4301                 </xsl:when>
4302                 <xsl:otherwise>
4303                   <xsl:choose>
4304                     <xsl:when test="principal/href">
4305                       <xsl:value-of select="principal/href"/>
4306                     </xsl:when>
4307                     <xsl:when test="principal/property">
4308                       <xsl:value-of select="name(principal/property/*)"/>
4309                     </xsl:when>
4310                     <xsl:otherwise>
4311                       <xsl:value-of select="name(principal/*)"/>
4312                     </xsl:otherwise>
4313                   </xsl:choose>
4314                 </xsl:otherwise>
4315               </xsl:choose>
4316             </th>
4317             <td>
4318               <xsl:for-each select="grant/node()">
4319                 <xsl:value-of select="name(.)"/>&#160;&#160;
4320               </xsl:for-each>
4321             </td>
4322           </tr>
4323         </xsl:for-each>
4324       </table>
4325       <form name="calsuiteShareForm" action="{$calsuite-setAccess}" id="shareForm" method="post">
4326         <input type="hidden" name="calSuiteName" value="{$calSuiteName}"/>
4327         <input type="hidden" name="how" value="RW" />
4328         <p>
4329           Add administrator:<br/>
4330           <input type="text" name="who" size="20"/>
4331           <input type="radio" value="user" name="whoType" checked="checked"/> user
4332           <input type="radio" value="group" name="whoType"/> group
4333         </p>
4334         <input type="submit" name="submit" value="Submit"/>
4335       </form>
4336     </div>-->
4337
4338     <div id="sharingBox">
4339       <xsl:variable name="calPath" select="path"/>
4340       <xsl:variable name="encodedCalPath" select="encodedPath"/>
4341       <xsl:if test="currentAccess/current-user-privilege-set/privilege/read-acl or /bedeworkadmin/userInfo/superUser='true'">
4342         <h3>Manage suite administrators</h3>
4343         <table class="common" id="sharing">
4344           <tr>
4345             <th class="commonHeader">Who:</th>
4346             <th class="commonHeader">Current access:</th>
4347             <th class="commonHeader">Source:</th>
4348           </tr>
4349           <xsl:for-each select="acl/ace">
4350             <xsl:variable name="who">
4351               <xsl:choose>
4352                 <xsl:when test="invert">
4353                   <xsl:choose>
4354                     <xsl:when test="invert/principal/href"><xsl:value-of select="normalize-space(invert/principal/href)"/></xsl:when>
4355                     <xsl:when test="invert/principal/property"><xsl:value-of select="name(invert/principal/property/*)"/></xsl:when>
4356                     <xsl:otherwise><xsl:value-of select="name(invert/principal/*)"/></xsl:otherwise>
4357                   </xsl:choose>
4358                 </xsl:when>
4359                 <xsl:otherwise>
4360                   <xsl:choose>
4361                     <xsl:when test="principal/href"><xsl:value-of select="normalize-space(principal/href)"/></xsl:when>
4362                     <xsl:when test="principal/property"><xsl:value-of select="name(principal/property/*)"/></xsl:when>
4363                     <xsl:otherwise><xsl:value-of select="name(principal/*)"/></xsl:otherwise>
4364                   </xsl:choose>
4365                 </xsl:otherwise>
4366               </xsl:choose>
4367             </xsl:variable>
4368             <tr>
4369             <th class="thin">
4370                 <xsl:if test="invert">
4371                   Not
4372                 </xsl:if>
4373                 <xsl:choose>
4374                   <xsl:when test="contains($who,/bedeworkadmin/syspars/userPrincipalRoot)">
4375                     <img src="{$resourcesRoot}/resources/userIcon.gif" width="13" height="13" border="0" alt="user"/>
4376                     <xsl:value-of select="substring-after(substring-after($who,normalize-space(/bedeworkadmin/syspars/userPrincipalRoot)),'/')"/>
4377                   </xsl:when>
4378                   <xsl:when test="contains($who,/bedeworkadmin/syspars/groupPrincipalRoot)">
4379                     <img src="{$resourcesRoot}/resources/groupIcon.gif" width="13" height="13" border="0" alt="group"/>
4380                     <xsl:value-of select="substring-after(substring-after($who,normalize-space(/bedeworkadmin/syspars/groupPrincipalRoot)),'/')"/>
4381                   </xsl:when>
4382                   <xsl:when test="invert and $who='owner'">
4383                     <xsl:value-of select="$who"/> (other)
4384                   </xsl:when>
4385                   <xsl:otherwise>
4386                     <xsl:value-of select="$who"/>
4387                   </xsl:otherwise>
4388                 </xsl:choose>
4389               </th>
4390               <td>
4391                 <xsl:for-each select="grant/node()">
4392                   <xsl:value-of select="name(.)"/>&#160;&#160;
4393                 </xsl:for-each>
4394                 <xsl:for-each select="deny/node()">
4395                   <xsl:choose>
4396                     <xsl:when test="name(.)='all'">
4397                       none
4398                     </xsl:when>
4399                     <xsl:otherwise>
4400                       deny-<xsl:value-of select="name(.)"/>
4401                     </xsl:otherwise>
4402                   </xsl:choose>
4403                   &#160;&#160;
4404                 </xsl:for-each>
4405               </td>
4406               <td>
4407                 <xsl:choose>
4408                   <xsl:when test="inherited">
4409                     inherited from:
4410                     <a>
4411                       <xsl:attribute name="href"><xsl:value-of select="$calendar-fetchForUpdate"/>&amp;calPath=<xsl:value-of select="inherited/href"/></xsl:attribute>
4412                       <xsl:value-of select="inherited/href"/>
4413                     </a>
4414                   </xsl:when>
4415                   <xsl:otherwise>
4416                     local:
4417                     <xsl:variable name="whoType">
4418                       <xsl:choose>
4419                         <xsl:when test="contains($who,/bedeworkadmin/syspars/userPrincipalRoot)">user</xsl:when>
4420                         <xsl:when test="contains($who,/bedeworkadmin/syspars/groupPrincipalRoot)">group</xsl:when>
4421                         <xsl:when test="$who='authenticated'">auth</xsl:when>
4422                         <xsl:when test="invert/principal/property/owner">other</xsl:when>
4423                         <xsl:when test="principal/property"><xsl:value-of select="name(principal/property/*)"/></xsl:when>
4424                         <xsl:when test="invert/principal/property"><xsl:value-of select="name(invert/principal/property/*)"/></xsl:when>
4425                         <xsl:otherwise></xsl:otherwise>
4426                       </xsl:choose>
4427                     </xsl:variable>
4428                     <xsl:variable name="shortWho">
4429                       <xsl:choose>
4430                         <xsl:when test="contains($who,/bedeworkadmin/syspars/userPrincipalRoot)"><xsl:value-of select="substring-after(substring-after($who,normalize-space(/bedeworkadmin/syspars/userPrincipalRoot)),'/')"/></xsl:when>
4431                         <xsl:when test="contains($who,/bedeworkadmin/syspars/groupPrincipalRoot)"><xsl:value-of select="substring-after(substring-after($who,normalize-space(/bedeworkadmin/syspars/groupPrincipalRoot)),'/')"/></xsl:when>
4432                         <xsl:otherwise></xsl:otherwise> <!-- if not user or group, send no who -->
4433                       </xsl:choose>
4434                     </xsl:variable>
4435                     <xsl:choose>
4436                       <xsl:when test="invert">
4437                         <a href="{$calsuite-setAccess}&amp;calSuiteName={$calSuiteName}&amp;how=default&amp;who={$shortWho}&amp;whoType={$whoType}&amp;notWho=yes">
4438                           reset to default
4439                         </a>
4440                       </xsl:when>
4441                       <xsl:otherwise>
4442                         <a href="{$calsuite-setAccess}&amp;calSuiteName={$calSuiteName}&amp;how=default&amp;who={$shortWho}&amp;whoType={$whoType}">
4443                           reset to default
4444                         </a>
4445                       </xsl:otherwise>
4446                     </xsl:choose>
4447                   </xsl:otherwise>
4448                 </xsl:choose>
4449               </td>
4450             </tr>
4451           </xsl:for-each>
4452         </table>
4453       </xsl:if>
4454
4455       <xsl:if test="currentAccess/current-user-privilege-set/privilege/write-acl or /bedeworkadmin/userInfo/superUser='true'">
4456         <form name="calsuiteShareForm" action="{$calsuite-setAccess}" id="shareForm" method="post">
4457           <input type="hidden" name="calSuiteName" value="{$calSuiteName}"/>
4458           <table cellspacing="0" id="shareFormTable" class="common">
4459             <tr>
4460               <th colspan="2" class="commonHeader">Set access:</th>
4461             </tr>
4462             <tr class="subhead">
4463               <th>Who:</th>
4464               <th>Rights:</th>
4465             </tr>
4466             <tr>
4467               <td>
4468                 <input type="text" name="who" size="20"/>
4469                 <br/>
4470                 <input type="radio" value="user" name="whoType" checked="checked"/> user
4471                 <input type="radio" value="group" name="whoType"/> group
4472                 <p>OR</p>
4473                 <p>
4474                   <input type="radio" value="auth" name="whoType"/> all authorized users<br/>
4475                   <input type="radio" value="other" name="whoType"/> other users<br/>
4476                   <input type="radio" value="owner" name="whoType"/> owner
4477                 </p>
4478                 <!-- we may never use the invert action ...it is probably
4479                      too confusing, and can be achieved in other ways -->
4480                 <!--
4481                 <p class="padTop">
4482                   <input type="checkbox" value="yes" name="notWho"/> invert (deny)
4483                 </p>-->
4484               </td>
4485               <td>
4486                 <ul id="howList">
4487                   <li>
4488                     <input type="radio" value="A" name="how"/>
4489                     <strong>All</strong> (read, write, delete)</li>
4490                   <li class="padTop">
4491                     <input type="radio" value="R" name="how"/>
4492                     <strong>Read</strong> (content, access, freebusy)
4493                   </li>
4494                   <li>
4495                     <input type="radio" value="f" name="how"/> Read freebusy only
4496                   </li>
4497                   <li class="padTop">
4498                     <input type="radio" value="Rc" name="how" checked="checked"/>
4499                     <strong>Read</strong> and <strong>Write content only</strong>
4500                   </li>
4501                   <li class="padTop">
4502                     <input type="radio" value="W" name="how"/>
4503                     <strong>Write and delete</strong> (content, access, properties)
4504                   </li>
4505                   <li>
4506                     <input type="radio" value="c" name="how"/> Write content only
4507                   </li>
4508                   <li>
4509                     <input type="radio" value="u" name="how"/> Delete only
4510                   </li>
4511                   <li class="padTop">
4512                     <input type="radio" value="N" name="how"/>
4513                     <strong>None</strong>
4514                   </li>
4515                 </ul>
4516               </td>
4517             </tr>
4518           </table>
4519           <input type="submit" name="submit" value="Submit"/>
4520         </form>
4521       </xsl:if>
4522     </div>
4523   </xsl:template>
4524
4525   <xsl:template name="calSuitePrefs">
4526     <h2>Edit Calendar Suite Preferences</h2>
4527     <form name="userPrefsForm" method="post" action="{$calsuite-updatePrefs}">
4528       <table id="eventFormTable">
4529         <tr>
4530           <td class="fieldName">
4531             Calendar Suite:
4532           </td>
4533           <td>
4534             <xsl:value-of select="/bedeworkadmin/currentCalSuite/name"/>
4535           </td>
4536         </tr>
4537         <tr>
4538           <td class="fieldName">
4539             Preferred view:
4540           </td>
4541           <td>
4542             <xsl:variable name="preferredView" select="/bedeworkadmin/prefs/preferredView"/>
4543             <input type="text" name="preferredView" value="{$preferredView}" size="40"/>
4544           </td>
4545         </tr>
4546         <tr>
4547           <td class="fieldName">
4548             Preferred view period:
4549           </td>
4550           <td>
4551             <xsl:variable name="preferredViewPeriod" select="/bedeworkadmin/prefs/preferredViewPeriod"/>
4552             <select name="viewPeriod">
4553               <!-- picking the selected item could be done with javascript. for
4554                    now, this will do.  -->
4555               <xsl:choose>
4556                 <xsl:when test="$preferredViewPeriod = 'dayView'">
4557                   <option value="dayView" selected="selected">day</option>
4558                 </xsl:when>
4559                 <xsl:otherwise>
4560                   <option value="dayView">day</option>
4561                 </xsl:otherwise>
4562               </xsl:choose>
4563               <xsl:choose>
4564                 <xsl:when test="$preferredViewPeriod = 'todayView'">
4565                   <option value="todayView" selected="selected">today</option>
4566                 </xsl:when>
4567                 <xsl:otherwise>
4568                   <option value="todayView">today</option>
4569                 </xsl:otherwise>
4570               </xsl:choose>
4571               <xsl:choose>
4572                 <xsl:when test="$preferredViewPeriod = 'weekView'">
4573                   <option value="weekView" selected="selected">week</option>
4574                 </xsl:when>
4575                 <xsl:otherwise>
4576                   <option value="weekView">week</option>
4577                 </xsl:otherwise>
4578               </xsl:choose>
4579               <xsl:choose>
4580                 <xsl:when test="$preferredViewPeriod = 'monthView'">
4581                   <option value="monthView" selected="selected">month</option>
4582                 </xsl:when>
4583                 <xsl:otherwise>
4584                   <option value="monthView">month</option>
4585                 </xsl:otherwise>
4586               </xsl:choose>
4587               <xsl:choose>
4588                 <xsl:when test="$preferredViewPeriod = 'yearView'">
4589                   <option value="yearView" selected="selected">year</option>
4590                 </xsl:when>
4591                 <xsl:otherwise>
4592                   <option value="yearView">year</option>
4593                 </xsl:otherwise>
4594               </xsl:choose>
4595             </select>
4596           </td>
4597         </tr>
4598         <tr>
4599           <td class="fieldName">
4600             Skin name:
4601           </td>
4602           <td>
4603             <xsl:variable name="skinName" select="/bedeworkadmin/prefs/skinName"/>
4604             <input type="text" name="skin" value="{$skinName}" size="40"/>
4605           </td>
4606         </tr>
4607         <tr>
4608           <td class="fieldName">
4609             Skin style:
4610           </td>
4611           <td>
4612             <xsl:variable name="skinStyle" select="/bedeworkadmin/prefs/skinStyle"/>
4613             <input type="text" name="skinStyle" value="{$skinStyle}" size="40"/>
4614           </td>
4615         </tr>
4616       </table>
4617       <br />
4618
4619       <input type="submit" name="modPrefs" value="Update"/>
4620       <input type="reset" value="Reset"/>
4621       <input type="submit" name="cancelled" value="Cancel"/>
4622     </form>
4623   </xsl:template>
4624
4625   <!--+++++++++++++++ Timezones ++++++++++++++++++++-->
4626   <xsl:template name="uploadTimezones">
4627     <h2>Upload Timezones</h2>
4628     <form name="peForm" method="post" action="{$timezones-upload}" enctype="multipart/form-data">
4629       <input type="file" name="uploadFile" size="40" value=""/>
4630       <input type="submit" name="doUpload" value="Upload Timezones"/>
4631       <input type="submit" name="cancelled" value="Cancel"/>
4632     </form>
4633   </xsl:template>
4634
4635   <!--+++++++++++++++ Authuser ++++++++++++++++++++-->
4636   <xsl:template name="authUserList">
4637     <h2>Modify Administrators</h2>
4638
4639     <div id="authUserInputForms">
4640       <form name="getUserRolesForm" action="{$authuser-fetchForUpdate}" method="post">
4641         Edit admin roles by userid: <input type="text" name="editAuthUserId" size="20"/>
4642         <input type="submit" value="go" name="submit"/>
4643       </form>
4644     </div>
4645
4646     <table id="commonListTable">
4647       <tr>
4648         <th>UserId</th>
4649         <th>Roles</th>
4650         <th></th>
4651       </tr>
4652
4653       <xsl:for-each select="bedeworkadmin/authUsers/authUser">
4654         <!--<xsl:sort select="account" order="ascending" case-order="upper-first"/>-->
4655         <tr>
4656           <td>
4657             <xsl:value-of select="account"/>
4658           </td>
4659           <td>
4660             <xsl:if test="publicEventUser='true'">
4661               publicEvent; <xsl:text> </xsl:text>
4662             </xsl:if>
4663             <xsl:if test="superUser='true'">
4664               superUser; <xsl:text> </xsl:text>
4665             </xsl:if>
4666             <xsl:if test="alertUser='true'">
4667               alert; <xsl:text> </xsl:text>
4668             </xsl:if>
4669           </td>
4670           <td>
4671             <xsl:variable name="account" select="account"/>
4672             <a href="{$authuser-fetchForUpdate}&amp;editAuthUserId={$account}">
4673               edit
4674             </a>
4675           </td>
4676         </tr>
4677       </xsl:for-each>
4678     </table>
4679   </xsl:template>
4680
4681   <xsl:template name="modAuthUser">
4682     <h2>Update Administrator</h2>
4683     <xsl:variable name="modAuthUserAction" select="/bedeworkadmin/formElements/form/@action"/>
4684     <form action="{$modAuthUserAction}" method="post">
4685       <table id="eventFormTable">
4686         <tr>
4687           <td class="fieldName">
4688             Account:
4689           </td>
4690           <td>
4691             <xsl:value-of select="/bedeworkadmin/formElements/form/account"/>
4692           </td>
4693         </tr>
4694         <tr>
4695           <td class="fieldName">
4696             Alerts:
4697           </td>
4698           <td>
4699             <xsl:copy-of select="/bedeworkadmin/formElements/form/alerts/*"/>
4700           </td>
4701         </tr>
4702         <tr>
4703           <td class="fieldName">
4704             Public Events:
4705           </td>
4706           <td>
4707             <xsl:copy-of select="/bedeworkadmin/formElements/form/publicEvents/*"/>
4708           </td>
4709         </tr>
4710         <tr>
4711           <td class="fieldName">
4712             Super User:
4713           </td>
4714           <td>
4715             <xsl:copy-of select="/bedeworkadmin/formElements/form/superUser/*"/>
4716           </td>
4717         </tr>
4718         <!--<tr>
4719           <td class="optional">
4720             Email:
4721           </td>
4722           <td>
4723             <xsl:copy-of select="/bedeworkadmin/formElements/form/email/*"/>
4724             <span class="fieldInfo"></span>
4725           </td>
4726         </tr>
4727         <tr>
4728           <td class="optional">
4729             Phone:
4730           </td>
4731           <td>
4732             <xsl:copy-of select="/bedeworkadmin/formElements/form/phone/*"/>
4733             <span class="fieldInfo"></span>
4734           </td>
4735         </tr>
4736         <tr>
4737           <td class="optional">
4738             Department:
4739           </td>
4740           <td>
4741             <xsl:copy-of select="/bedeworkadmin/formElements/form/dept/*"/>
4742             <span class="fieldInfo"></span>
4743           </td>
4744         </tr>
4745         <tr>
4746           <td class="optional">
4747             Last name:
4748           </td>
4749           <td>
4750             <xsl:copy-of select="/bedeworkadmin/formElements/form/lastName/*"/>
4751             <span class="fieldInfo"></span>
4752           </td>
4753         </tr>
4754         <tr>
4755           <td class="optional">
4756             First name:
4757           </td>
4758           <td>
4759             <xsl:copy-of select="/bedeworkadmin/formElements/form/firstName/*"/>
4760             <span class="fieldInfo"></span>
4761           </td>
4762         </tr>-->
4763       </table>
4764       <br />
4765
4766       <input type="submit" name="modAuthUser" value="Update"/>
4767       <input type="reset" value="Reset"/>
4768       <input type="submit" name="cancelled" value="Cancel"/>
4769     </form>
4770   </xsl:template>
4771
4772   <!--+++++++++++++++ User Prefs ++++++++++++++++++++-->
4773   <xsl:template name="modPrefs">
4774     <h2>Edit User Preferences</h2>
4775     <form name="userPrefsForm" method="post" action="{$prefs-update}">
4776       <table id="eventFormTable">
4777         <tr>
4778           <td class="fieldName">
4779             User:
4780           </td>
4781           <td>
4782             <xsl:value-of select="/bedeworkadmin/prefs/user"/>
4783             <xsl:variable name="user" select="/bedeworkadmin/prefs/user"/>
4784             <input type="hidden" name="user" value="{$user}"/>
4785           </td>
4786         </tr>
4787         <tr>
4788           <td class="fieldName">
4789             Preferred view:
4790           </td>
4791           <td>
4792             <xsl:variable name="preferredView" select="/bedeworkadmin/prefs/preferredView"/>
4793             <input type="text" name="preferredView" value="{$preferredView}" size="40"/>
4794           </td>
4795         </tr>
4796         <tr>
4797           <td class="fieldName">
4798             Preferred view period:
4799           </td>
4800           <td>
4801             <xsl:variable name="preferredViewPeriod" select="/bedeworkadmin/prefs/preferredViewPeriod"/>
4802             <select name="viewPeriod">
4803               <!-- picking the selected item could be done with javascript. for
4804                    now, this will do.  -->
4805               <xsl:choose>
4806                 <xsl:when test="$preferredViewPeriod = 'dayView'">
4807                   <option value="dayView" selected="selected">day</option>
4808                 </xsl:when>
4809                 <xsl:otherwise>
4810                   <option value="dayView">day</option>
4811                 </xsl:otherwise>
4812               </xsl:choose>
4813               <xsl:choose>
4814                 <xsl:when test="$preferredViewPeriod = 'todayView'">
4815                   <option value="todayView" selected="selected">today</option>
4816                 </xsl:when>
4817                 <xsl:otherwise>
4818                   <option value="todayView">today</option>
4819                 </xsl:otherwise>
4820               </xsl:choose>
4821               <xsl:choose>
4822                 <xsl:when test="$preferredViewPeriod = 'weekView'">
4823                   <option value="weekView" selected="selected">week</option>
4824                 </xsl:when>
4825                 <xsl:otherwise>
4826                   <option value="weekView">week</option>
4827                 </xsl:otherwise>
4828               </xsl:choose>
4829               <xsl:choose>
4830                 <xsl:when test="$preferredViewPeriod = 'monthView'">
4831                   <option value="monthView" selected="selected">month</option>
4832                 </xsl:when>
4833                 <xsl:otherwise>
4834                   <option value="monthView">month</option>
4835                 </xsl:otherwise>
4836               </xsl:choose>
4837               <xsl:choose>
4838                 <xsl:when test="$preferredViewPeriod = 'yearView'">
4839                   <option value="yearView" selected="selected">year</option>
4840                 </xsl:when>
4841                 <xsl:otherwise>
4842                   <option value="yearView">year</option>
4843                 </xsl:otherwise>
4844               </xsl:choose>
4845             </select>
4846           </td>
4847         </tr>
4848         <tr>
4849           <td class="fieldName">
4850             Skin name:
4851           </td>
4852           <td>
4853             <xsl:variable name="skinName" select="/bedeworkadmin/prefs/skinName"/>
4854             <input type="text" name="skin" value="{$skinName}" size="40"/>
4855           </td>
4856         </tr>
4857         <tr>
4858           <td class="fieldName">
4859             Skin style:
4860           </td>
4861           <td>
4862             <xsl:variable name="skinStyle" select="/bedeworkadmin/prefs/skinStyle"/>
4863             <input type="text" name="skinStyle" value="{$skinStyle}" size="40"/>
4864           </td>
4865         </tr>
4866       </table>
4867       <br />
4868
4869       <input type="submit" name="modPrefs" value="Update"/>
4870       <input type="reset" value="Reset"/>
4871       <input type="submit" name="cancelled" value="Cancel"/>
4872     </form>
4873   </xsl:template>
4874
4875   <!--+++++++++++++++ Admin Groups ++++++++++++++++++++-->
4876   <xsl:template name="listAdminGroups">
4877     <h2>Modify Groups</h2>
4878     <form name="adminGroupMembersForm" method="post" action="{$admingroup-initUpdate}">
4879       <xsl:choose>
4880         <xsl:when test="/bedeworkadmin/groups/showMembers='true'">
4881           <input type="radio" name="showAgMembers" value="false" onclick="document.adminGroupMembersForm.submit();"/>
4882           Hide members
4883           <input type="radio" name="showAgMembers" value="true" checked="checked" onclick="document.adminGroupMembersForm.submit();"/>
4884           Show members
4885         </xsl:when>
4886         <xsl:otherwise>
4887           <input type="radio" name="showAgMembers" value="false" checked="checked" onclick="document.adminGroupMembersForm.submit();"/>
4888           Hide members
4889           <input type="radio" name="showAgMembers" value="true" onclick="document.adminGroupMembersForm.submit();"/>
4890           Show members
4891         </xsl:otherwise>
4892       </xsl:choose>
4893     </form>
4894
4895     <p>Click on the group name to modify the group owner or description.<br/>
4896     Click "add/remove members" to modify group membership.</p>
4897     <p>
4898       <input type="button" name="return" onclick="javascript:location.replace('{$admingroup-initAdd}')" value="Add a new group"/>
4899     </p>
4900     <table id="commonListTable">
4901       <tr>
4902         <th>Name</th>
4903         <th>Description</th>
4904         <xsl:if test="/bedeworkadmin/groups/showMembers='true'">
4905           <th>Members</th>
4906         </xsl:if>
4907         <th></th>
4908       </tr>
4909       <xsl:for-each select="/bedeworkadmin/groups/group">
4910         <!--<xsl:sort select="name" order="ascending" case-order="upper-first"/>-->
4911         <xsl:variable name="groupName" select="name"/>
4912         <tr>
4913           <td>
4914             <a href="{$admingroup-fetchForUpdate}&amp;adminGroupName={$groupName}">
4915               <xsl:value-of select="name"/>
4916             </a>
4917           </td>
4918           <td>
4919             <xsl:value-of select="desc"/>
4920           </td>
4921           <xsl:if test="/bedeworkadmin/groups/showMembers='true'">
4922             <td>
4923               <xsl:for-each select="members/member/account">
4924                 <xsl:value-of select="."/>&#160;
4925               </xsl:for-each>
4926             </td>
4927           </xsl:if>
4928           <td>
4929             <a href="{$admingroup-fetchForUpdateMembers}&amp;adminGroupName={$groupName}">Add/Remove members</a>
4930           </td>
4931         </tr>
4932       </xsl:for-each>
4933     </table>
4934     <p>
4935       <input type="button" name="return" onclick="javascript:location.replace('{$admingroup-initAdd}')" value="Add a new group"/>
4936     </p>
4937   </xsl:template>
4938
4939   <xsl:template match="groups" mode="chooseGroup">
4940     <h2>Choose Your Administrative Group</h2>
4941
4942     <table id="commonListTable">
4943
4944       <tr>
4945         <th>Name</th>
4946         <th>Description</th>
4947       </tr>
4948
4949       <xsl:for-each select="group">
4950         <!--<xsl:sort select="name" order="ascending" case-order="upper-first"/>-->
4951         <tr>
4952           <td>
4953             <xsl:variable name="admGroupName" select="name"/>
4954             <a href="{$setup}&amp;adminGroupName={$admGroupName}">
4955               <xsl:copy-of select="name"/>
4956             </a>
4957           </td>
4958           <td>
4959             <xsl:value-of select="desc"/>
4960           </td>
4961         </tr>
4962       </xsl:for-each>
4963     </table>
4964   </xsl:template>
4965
4966   <xsl:template name="modAdminGroup">
4967     <xsl:choose>
4968       <xsl:when test="/bedeworkadmin/creating = 'true'">
4969         <h2>Add Group</h2>
4970       </xsl:when>
4971       <xsl:otherwise>
4972         <h2>Modify Group</h2>
4973       </xsl:otherwise>
4974     </xsl:choose>
4975     <form name="peForm" method="post" action="{$admingroup-update}">
4976       <table id="adminGroupFormTable">
4977         <tr>
4978           <td class="fieldName">
4979             Name:
4980           </td>
4981           <td>
4982             <xsl:choose>
4983               <xsl:when test="/bedeworkadmin/creating = 'true'">
4984                 <xsl:copy-of select="/bedeworkadmin/formElements/form/name/*"/>
4985               </xsl:when>
4986               <xsl:otherwise>
4987                 <xsl:value-of select="/bedeworkadmin/formElements/form/name"/>
4988               </xsl:otherwise>
4989             </xsl:choose>
4990           </td>
4991         </tr>
4992         <tr>
4993           <td class="fieldName">
4994             Description:
4995           </td>
4996           <td>
4997             <xsl:copy-of select="/bedeworkadmin/formElements/form/desc/*"/>
4998           </td>
4999         </tr>
5000         <tr>
5001           <td class="fieldName">
5002             Group owner:
5003           </td>
5004           <td>
5005             <xsl:copy-of select="/bedeworkadmin/formElements/form/groupOwner/*"/>
5006           </td>
5007         </tr>
5008         <tr>
5009           <td class="fieldName">
5010             Events owner:
5011           </td>
5012           <td>
5013             <xsl:copy-of select="/bedeworkadmin/formElements/form/eventsOwner/*"/>
5014           </td>
5015         </tr>
5016       </table>
5017       <table border="0" id="submitTable">
5018         <tr>
5019           <td>
5020             <xsl:choose>
5021               <xsl:when test="/bedeworkadmin/creating = 'true'">
5022                 <input type="submit" name="updateAdminGroup" value="Add Admin Group"/>
5023                 <input type="submit" name="cancelled" value="Cancel"/>
5024                 <input type="reset" value="Clear"/>
5025               </xsl:when>
5026               <xsl:otherwise>
5027                 <input type="submit" name="updateAdminGroup" value="Update Admin Group"/>
5028                 <input type="submit" name="cancelled" value="Cancel"/>
5029                 <input type="reset" value="Reset"/>
5030               </xsl:otherwise>
5031             </xsl:choose>
5032           </td>
5033           <td align="right">
5034             <input type="submit" name="delete" value="Delete"/>
5035           </td>
5036         </tr>
5037       </table>
5038     </form>
5039   </xsl:template>
5040
5041   <xsl:template name="modAdminGroupMembers">
5042     <h2>Update Group Membership</h2>
5043     <p>Enter a userid (for user or group) and click "add" to update group membership.
5044     Click the trash icon to remove a user from the group.</p>
5045
5046     <form name="adminGroupMembersForm" method="post" action="{$admingroup-updateMembers}">
5047       <p>Add member:
5048         <input type="text" name="updGroupMember" size="15"/>
5049         <input type="radio" value="user" name="kind" checked="checked"/>user
5050         <input type="radio" value="group" name="kind"/>group
5051         <input type="submit" name="addGroupMember" value="Add"/>
5052       </p>
5053     </form>
5054     <p>
5055       <input type="button" name="return" onclick="javascript:location.replace('{$admingroup-initUpdate}')" value="Return to Admin Group listing"/>
5056     </p>
5057
5058     <table id="adminGroupFormTable">
5059       <tr>
5060         <td class="fieldName">
5061           Name:
5062         </td>
5063         <td>
5064           <xsl:value-of select="/bedeworkadmin/adminGroup/name"/>
5065         </td>
5066       </tr>
5067       <tr>
5068         <td class="fieldName">
5069           Members:
5070         </td>
5071         <td>
5072           <table id="memberAccountList">
5073             <xsl:for-each select="/bedeworkadmin/adminGroup/members/member">
5074               <xsl:choose>
5075                 <xsl:when test="kind='0'"><!-- kind = user -->
5076                   <tr>
5077                     <td>
5078                       <img src="{$resourcesRoot}/resources/userIcon.gif" width="13" height="13" border="0" alt="user"/>
5079                     </td>
5080                     <td>
5081                       <xsl:value-of select="account"/>
5082                     </td>
5083                     <td>
5084                       <xsl:variable name="acct" select="account"/>
5085                       <a href="{$admingroup-updateMembers}&amp;removeGroupMember={$acct}&amp;kind=user" title="remove">
5086                         <img src="{$resourcesRoot}/resources/trashIcon.gif" width="13" height="13" border="0" alt="remove"/>
5087                       </a>
5088                     </td>
5089                   </tr>
5090                 </xsl:when>
5091                 <xsl:otherwise><!-- kind = group -->
5092                   <tr>
5093                     <td>
5094                       <img src="{$resourcesRoot}/resources/groupIcon.gif" width="13" height="13" border="0" alt="group"/>
5095                     </td>
5096                     <td>
5097                       <strong>
5098                         <xsl:value-of select="account"/>
5099                       </strong>
5100                     </td>
5101                     <td>
5102                       <xsl:variable name="acct" select="account"/>
5103                       <a href="{$admingroup-updateMembers}&amp;removeGroupMember={$acct}&amp;kind=group" title="remove">
5104                         <img src="{$resourcesRoot}/resources/trashIcon.gif" width="13" height="13" border="0" alt="remove"/>
5105                       </a>
5106                     </td>
5107                   </tr>
5108                 </xsl:otherwise>
5109               </xsl:choose>
5110             </xsl:for-each>
5111           </table>
5112         </td>
5113       </tr>
5114     </table>
5115     <p>
5116       <img src="{$resourcesRoot}/resources/userIcon.gif" width="13" height="13" border="0" alt="user"/> user,
5117       <img src="{$resourcesRoot}/resources/groupIcon.gif" width="13" height="13" border="0" alt="group"/>
5118       <xsl:text> </xsl:text>
5119       <strong>group</strong>
5120     </p>
5121   </xsl:template>
5122
5123   <xsl:template name="deleteAdminGroupConfirm">
5124     <h2>Delete Admin Group?</h2>
5125     <p>The following group will be deleted. Continue?</p>
5126     <p>
5127       <strong>
5128         <xsl:value-of select="/bedeworkadmin/groups/group/name"/>
5129       </strong>:
5130       <xsl:value-of select="/bedeworkadmin/groups/group/desc"/>
5131     </p>
5132     <form name="adminGroupDelete" method="post" action="{$admingroup-delete}">
5133       <input type="submit" name="removeAdminGroupOK" value="Yes: Delete!"/>
5134       <input type="submit" name="cancelled" value="No: Cancel"/>
5135     </form>
5136   </xsl:template>
5137
5138   <!--+++++++++++++++ System Stats ++++++++++++++++++++-->
5139
5140   <xsl:template match="sysStats" mode="showSysStats">
5141     <h2>System Statistics</h2>
5142
5143     <p>
5144       Stats collection:
5145     </p>
5146     <ul>
5147       <li>
5148         <a href="{$stats-update}&amp;enable=yes">enable</a> |
5149         <a href="{$stats-update}&amp;disable=yes">disable</a>
5150       </li>
5151       <li>
5152         <a href="{$stats-update}&amp;fetch=yes">fetch statistics</a>
5153       </li>
5154       <li>
5155         <a href="{$stats-update}&amp;dump=yes">dump stats to log</a>
5156       </li>
5157     </ul>
5158     <table id="statsTable" cellpadding="0">
5159       <xsl:for-each select="*">
5160         <xsl:choose>
5161           <xsl:when test="name(.) = 'header'">
5162             <tr>
5163               <th colspan="2">
5164                 <xsl:value-of select="."/>
5165               </th>
5166             </tr>
5167           </xsl:when>
5168           <xsl:otherwise>
5169             <tr>
5170               <td class="label">
5171                 <xsl:value-of select="label"/>
5172               </td>
5173               <td class="value">
5174                 <xsl:value-of select="value"/>
5175               </td>
5176             </tr>
5177           </xsl:otherwise>
5178         </xsl:choose>
5179       </xsl:for-each>
5180     </table>
5181   </xsl:template>
5182
5183   <!--==== SEARCH RESULT ====-->
5184   <xsl:template name="searchResult">
5185     <h2 class="bwStatusConfirmed">
5186       <div id="searchFilter">
5187         <form name="searchForm" method="post" action="{$search}">
5188           Search:
5189           <input type="text" name="query" size="15">
5190             <xsl:attribute name="value"><xsl:value-of select="/bedeworkadmin/searchResults/query"/></xsl:attribute>
5191           </input>
5192           <input type="submit" name="submit" value="go"/>
5193           Limit:
5194           <xsl:choose>
5195             <xsl:when test="/bedeworkadmin/searchResults/searchLimits = 'beforeToday'">
5196               <input type="radio" name="searchLimits" value="fromToday"/>today forward
5197               <input type="radio" name="searchLimits" value="beforeToday" checked="checked"/>past dates
5198               <input type="radio" name="searchLimits" value="none"/>all dates
5199             </xsl:when>
5200             <xsl:when test="/bedeworkadmin/searchResults/searchLimits = 'none'">
5201               <input type="radio" name="searchLimits" value="fromToday"/>today forward
5202               <input type="radio" name="searchLimits" value="beforeToday"/>past dates
5203               <input type="radio" name="searchLimits" value="none" checked="checked"/>all dates
5204             </xsl:when>
5205             <xsl:otherwise>
5206               <input type="radio" name="searchLimits" value="fromToday" checked="checked"/>today forward
5207               <input type="radio" name="searchLimits" value="beforeToday"/>past dates
5208               <input type="radio" name="searchLimits" value="none"/>all dates
5209             </xsl:otherwise>
5210           </xsl:choose>
5211         </form>
5212       </div>
5213       Search Result
5214     </h2>
5215     <table id="searchTable" cellpadding="0" cellspacing="0">
5216       <tr>
5217         <th colspan="5">
5218           <xsl:if test="/bedeworkadmin/searchResults/numPages &gt; 1">
5219             <xsl:variable name="curPage" select="/bedeworkadmin/searchResults/curPage"/>
5220             <div id="searchPageForm">
5221               page:
5222               <xsl:if test="/bedeworkadmin/searchResults/curPage != 1">
5223                 <xsl:variable name="prevPage" select="number($curPage) - 1"/>
5224                 &lt;<a href="{$search-next}&amp;pageNum={$prevPage}">prev</a>
5225               </xsl:if>
5226               <xsl:text> </xsl:text>
5227
5228               <xsl:call-template name="searchResultPageNav">
5229                 <xsl:with-param name="page">
5230                   <xsl:choose>
5231                     <xsl:when test="number($curPage) - 10 &lt; 1">1</xsl:when>
5232                     <xsl:otherwise><xsl:value-of select="number($curPage) - 6"/></xsl:otherwise>
5233                   </xsl:choose>
5234                 </xsl:with-param>
5235               </xsl:call-template>
5236
5237               <xsl:text> </xsl:text>
5238               <xsl:choose>
5239                 <xsl:when test="$curPage != /bedeworkadmin/searchResults/numPages">
5240                   <xsl:variable name="nextPage" select="number($curPage) + 1"/>
5241                   <a href="{$search-next}&amp;pageNum={$nextPage}">next</a>&gt;
5242                 </xsl:when>
5243                 <xsl:otherwise>
5244                   <span class="hidden">next&gt;</span><!-- occupy the space to keep the navigation from moving around -->
5245                 </xsl:otherwise>
5246               </xsl:choose>
5247             </div>
5248           </xsl:if>
5249           <xsl:value-of select="/bedeworkadmin/searchResults/resultSize"/>
5250           result<xsl:if test="/bedeworkadmin/searchResults/resultSize != 1">s</xsl:if> returned
5251           for <em><xsl:value-of select="/bedeworkadmin/searchResults/query"/></em>
5252         </th>
5253       </tr>
5254       <xsl:if test="/bedeworkadmin/searchResults/searchResult">
5255         <tr class="fieldNames">
5256           <td>
5257             relevance
5258           </td>
5259           <td>
5260             summary
5261           </td>
5262           <td>
5263             date &amp; time
5264           </td>
5265           <td>
5266             calendar
5267           </td>
5268           <td>
5269             location
5270           </td>
5271         </tr>
5272       </xsl:if>
5273       <xsl:for-each select="/bedeworkadmin/searchResults/searchResult">
5274         <xsl:variable name="subscriptionId" select="event/subscription/id"/>
5275         <xsl:variable name="calPath" select="event/calendar/encodedPath"/>
5276         <xsl:variable name="guid" select="event/guid"/>
5277         <xsl:variable name="recurrenceId" select="event/recurrenceId"/>
5278         <tr>
5279           <td class="relevance">
5280             <xsl:value-of select="ceiling(number(score)*100)"/>%
5281             <img src="{$resourcesRoot}/images/spacer.gif" height="4" class="searchRelevance">
5282               <xsl:attribute name="width"><xsl:value-of select="ceiling((number(score)*100) div 1.5)"/></xsl:attribute>
5283             </img>
5284           </td>
5285           <td>
5286             <a href="{$event-fetchForDisplay}&amp;subid={$subscriptionId}&amp;calPath={$calPath}&amp;guid={$guid}&amp;recurrenceId={$recurrenceId}">
5287               <xsl:value-of select="event/summary"/>
5288             </a>
5289           </td>
5290           <td>
5291             <xsl:value-of select="event/start/longdate"/>
5292             <xsl:text> </xsl:text>
5293             <xsl:value-of select="event/start/time"/>
5294             <xsl:choose>
5295               <xsl:when test="event/start/longdate != event/end/longdate">
5296                 - <xsl:value-of select="event/start/longdate"/>
5297                 <xsl:text> </xsl:text>
5298                 <xsl:value-of select="event/end/time"/>
5299               </xsl:when>
5300               <xsl:when test="event/start/time != event/end/time">
5301                 - <xsl:value-of select="event/end/time"/>
5302               </xsl:when>
5303             </xsl:choose>
5304           </td>
5305           <td>
5306             <xsl:value-of select="event/calendar/name"/>
5307           </td>
5308           <td>
5309             <xsl:value-of select="event/location/address"/>
5310           </td>
5311         </tr>
5312       </xsl:for-each>
5313     </table>
5314   </xsl:template>
5315
5316   <xsl:template name="searchResultPageNav">
5317     <xsl:param name="page">1</xsl:param>
5318     <xsl:variable name="curPage" select="/bedeworkadmin/searchResults/curPage"/>
5319     <xsl:variable name="numPages" select="/bedeworkadmin/searchResults/numPages"/>
5320     <xsl:variable name="endPage">
5321       <xsl:choose>
5322         <xsl:when test="number($curPage) + 6 &gt; number($numPages)"><xsl:value-of select="$numPages"/></xsl:when>
5323         <xsl:otherwise><xsl:value-of select="number($curPage) + 6"/></xsl:otherwise>
5324       </xsl:choose>
5325     </xsl:variable>
5326     <xsl:choose>
5327       <xsl:when test="$page = $curPage">
5328         <xsl:value-of select="$page"/>
5329       </xsl:when>
5330       <xsl:otherwise>
5331         <a href="{$search-next}&amp;pageNum={$page}">
5332           <xsl:value-of select="$page"/>
5333         </a>
5334       </xsl:otherwise>
5335     </xsl:choose>
5336     <xsl:text> </xsl:text>
5337     <xsl:if test="$page &lt; $endPage">
5338        <xsl:call-template name="searchResultPageNav">
5339          <xsl:with-param name="page" select="number($page)+1"/>
5340       </xsl:call-template>
5341     </xsl:if>
5342   </xsl:template>
5343
5344   <!--==== FOOTER ====-->
5345   <xsl:template name="footer">
5346     <div id="footer">
5347       <a href="http://www.bedework.org/">Bedework Website</a> |
5348       <!-- Enable the following two items when debugging skins only -->
5349       <a href="?noxslt=yes">show XML</a> |
5350       <a href="?refreshXslt=yes">refresh XSLT</a>
5351     </div>
5352   </xsl:template>
5353 </xsl:stylesheet>
Note: See TracBrowser for help on using the browser.