root/trunk/deployment/websubmit/webapp/resources/demoskins/default/default/default.xsl

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

websubmit: more preparation

  • Property svn:eol-style set to LF
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="xhtml"
5   indent="no"
6   media-type="text/html"
7   doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
8   doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
9   standalone="yes"
10   omit-xml-declaration="yes"/>
11
12   <!-- ========================================================= -->
13   <!--         PUBLIC EVENTS SUBMISSION CALENDAR STYLESHEET      -->
14   <!-- ========================================================= -->
15
16   <!-- **********************************************************************
17     Copyright 2007 Rensselaer Polytechnic Institute. All worldwide rights reserved.
18
19     Redistribution and use of this distribution in source and binary forms,
20     with or without modification, are permitted provided that:
21        The above copyright notice and this permission notice appear in all
22         copies and supporting documentation;
23
24         The name, identifiers, and trademarks of Rensselaer Polytechnic
25         Institute are not used in advertising or publicity without the
26         express prior written permission of Rensselaer Polytechnic Institute;
27
28     DISCLAIMER: The software is distributed" AS IS" without any express or
29     implied warranty, including but not limited to, any implied warranties
30     of merchantability or fitness for a particular purpose or any warrant)'
31     of non-infringement of any current or pending patent rights. The authors
32     of the software make no representations about the suitability of this
33     software for any particular purpose. The entire risk as to the quality
34     and performance of the software is with the user. Should the software
35     prove defective, the user assumes the cost of all necessary servicing,
36     repair or correction. In particular, neither Rensselaer Polytechnic
37     Institute, nor the authors of the software are liable for any indirect,
38     special, consequential, or incidental damages related to the software,
39     to the maximum extent the law permits. -->
40
41   <!-- DEFINE INCLUDES -->
42   <xsl:include href="../../../bedework-common/default/default/errors.xsl"/>
43   <xsl:include href="../../../bedework-common/default/default/messages.xsl"/>
44
45   <!-- DEFINE GLOBAL CONSTANTS -->
46   <!-- URL of html resources (images, css, other html); by default this is
47        set to the application root, but for the personal calendar
48        this should be changed to point to a
49        web server over https to avoid mixed content errors, e.g.,
50   <xsl:variable name="resourcesRoot">https://mywebserver.edu/myresourcesdir</xsl:variable>
51     -->
52   <xsl:variable name="resourcesRoot" select="/bedework/approot"/>
53
54   <!-- URL of the XSL template directory -->
55   <!-- The approot is an appropriate place to put
56        included stylesheets and xml fragments. These are generally
57        referenced relatively (like errors.xsl and messages.xsl above);
58        this variable is here for your convenience if you choose to
59        reference it explicitly.  It is not used in this stylesheet, however,
60        and can be safely removed if you so choose. -->
61   <xsl:variable name="appRoot" select="/bedework/approot"/>
62
63   <!-- Properly encoded prefixes to the application actions; use these to build
64        urls; allows the application to be used without cookies or within a portal.
65        These urls are rewritten in header.jsp and simply passed through for use
66        here. Every url includes a query string (either ?b=de or a real query
67        string) so that all links constructed in this stylesheet may begin the
68        query string with an ampersand. -->
69   <!-- main -->
70   <xsl:variable name="setup" select="/bedework/urlPrefixes/setup"/>
71   <xsl:variable name="initEvent" select="/bedework/urlPrefixes/event/initEvent"/>
72   <xsl:variable name="addEvent" select="/bedework/urlPrefixes/event/addEvent"/>
73   <xsl:variable name="editEvent" select="/bedework/urlPrefixes/event/editEvent"/>
74   <xsl:variable name="gotoEditEvent" select="/bedework/urlPrefixes/event/gotoEditEvent"/>
75   <xsl:variable name="updateEvent" select="/bedework/urlPrefixes/event/updateEvent"/>
76   <xsl:variable name="delEvent" select="/bedework/urlPrefixes/event/delEvent"/>
77   <xsl:variable name="initUpload" select="/bedework/urlPrefixes/misc/initUpload/a/@href"/>
78   <xsl:variable name="upload" select="/bedework/urlPrefixes/misc/upload/a/@href"/>
79
80   <!-- URL of the web application - includes web context -->
81   <xsl:variable name="urlPrefix" select="/bedework/urlprefix"/>
82
83   <!-- Other generally useful global variables -->
84   <xsl:variable name="prevdate" select="/bedework/previousdate"/>
85   <xsl:variable name="nextdate" select="/bedework/nextdate"/>
86   <xsl:variable name="curdate" select="/bedework/currentdate/date"/>
87   <xsl:variable name="skin">default</xsl:variable>
88   <xsl:variable name="publicCal">/cal</xsl:variable>
89
90   <!-- the following variable can be set to "true" or "false";
91        to use dojo widgets and fancier UI features, set to false - these are
92        not guaranteed to work in portals -->
93   <xsl:variable name="portalFriendly">false</xsl:variable>
94
95  <!-- BEGIN MAIN TEMPLATE -->
96   <xsl:template match="/">
97     <html lang="en">
98       <head>
99         <xsl:call-template name="headSection"/>
100       </head>
101       <body>
102         <div id="bedework"><!-- main wrapper div -->
103           <xsl:call-template name="headBar"/>
104           <xsl:call-template name="messagesAndErrors"/>
105             <div id="bodyContent">
106               <xsl:choose>
107                 <xsl:when test="/bedework/page='editEvent'">
108                   <xsl:apply-templates select="/bedework/formElements" mode="editEvent"/>
109                 </xsl:when>
110                 <xsl:when test="/bedework/page='upload'">
111                   <xsl:call-template name="upload" />
112                 </xsl:when>
113                 <xsl:otherwise>
114                   <!-- add event -->
115                   <xsl:apply-templates select="/bedework/formElements" mode="addEvent"/>
116                 </xsl:otherwise>
117               </xsl:choose>
118             </div>
119           <!-- footer -->
120           <xsl:call-template name="footer"/>
121         </div>
122       </body>
123     </html>
124   </xsl:template>
125
126   <!--==== HEAD SECTION  ====-->
127   <xsl:template name="headSection">
128     <title>Bedework: Submit a Public Event</title>
129     <meta name="robots" content="noindex,nofollow"/>
130     <meta content="text/html;charset=utf-8" http-equiv="Content-Type" />
131     <link rel="stylesheet" href="{$resourcesRoot}/default/default/default.css"/>
132     <link rel="icon" type="image/ico" href="{$resourcesRoot}/resources/bedework.ico" />
133     <!-- note: the non-breaking spaces in the script bodies below are to avoid
134          losing the script closing tags (which avoids browser problems) -->
135     <script type="text/javascript" src="{$resourcesRoot}/resources/bedework.js">&#160;</script>
136     <script type="text/javascript" src="{$resourcesRoot}/resources/bwClock.js">&#160;</script>
137     <link rel="stylesheet" href="{$resourcesRoot}/resources/bwClock.css"/>
138     <script type="text/javascript" src="/bedework-common/javascript/dojo/dojo.js">&#160;</script>
139     <script type="text/javascript" src="{$resourcesRoot}/resources/bedeworkEventForm.js">&#160;</script>
140     <script type="text/javascript" src="{$resourcesRoot}/resources/bedeworkAccess.js">&#160;</script>
141     <xsl:if test="$portalFriendly = 'true'">
142       <script type="text/javascript" src="{$resourcesRoot}/resources/dynCalendarWidget.js">&#160;</script>
143       <link rel="stylesheet" href="{$resourcesRoot}/resources/dynCalendarWidget.css"/>
144     </xsl:if>
145     <script type="text/javascript">
146       <xsl:comment>
147       <![CDATA[
148       function focusElement(id) {
149       // focuses element by id
150         document.getElementById(id).focus();
151       }
152       ]]>
153       </xsl:comment>
154     </script>
155   </xsl:template>
156
157   <!--==== HEADER TEMPLATES and NAVIGATION  ====-->
158
159   <xsl:template name="messagesAndErrors">
160     <xsl:if test="/bedework/message">
161       <ul id="messages">
162         <xsl:for-each select="/bedework/message">
163           <li><xsl:apply-templates select="."/></li>
164         </xsl:for-each>
165       </ul>
166     </xsl:if>
167     <xsl:if test="/bedework/error">
168       <ul id="errors">
169         <xsl:for-each select="/bedework/error">
170           <li><xsl:apply-templates select="."/></li>
171         </xsl:for-each>
172       </ul>
173     </xsl:if>
174   </xsl:template>
175
176   <xsl:template name="headBar">
177     <div id="headBar">
178       <a href="/bedework/" id="logo">
179         <img src="{$resourcesRoot}/resources/bedeworkLogo.gif" width="292" height="75" border="0" alt="Bedework"/>
180       </a>
181       <h2>Submit an Event</h2>
182     </div>
183   </xsl:template>
184
185   <!--==== ADD EVENT ====-->
186   <xsl:template match="formElements" mode="addEvent">
187   <!-- The name "eventForm" is referenced by several javascript functions. Do not
188     change it without modifying bedework.js -->
189     <form name="eventForm" method="post" action="{$addEvent}" id="standardForm" onsubmit="setEventFields(this)">
190       <h2>
191         <span class="formButtons">
192           <input name="submit" type="submit" value="save"/>
193           <input name="cancelled" type="submit" value="cancel"/>
194         </span>
195         <xsl:choose>
196           <xsl:when test="form/entityType = '2'">Add Task</xsl:when>
197           <xsl:when test="form/scheduleMethod = '2'">Add Meeting</xsl:when>
198           <xsl:otherwise>Add Event</xsl:otherwise>
199         </xsl:choose>
200       </h2>
201       <xsl:apply-templates select="." mode="eventForm"/>
202     </form>
203   </xsl:template>
204
205   <!--==== EDIT EVENT ====-->
206   <xsl:template match="formElements" mode="editEvent">
207     <!-- The name "eventForm" is referenced by several javascript functions. Do not
208     change it without modifying bedework.js -->
209     <form name="eventForm" method="post" action="{$updateEvent}" id="standardForm" onsubmit="setEventFields(this)">
210       <h2>
211         <span class="formButtons">
212           <input name="submit" type="submit" value="save"/>
213           <input name="cancelled" type="submit" value="cancel"/>
214         </span>
215         <xsl:choose>
216           <xsl:when test="form/entityType = '2'">Edit Task</xsl:when>
217           <xsl:when test="form/scheduleMethod = '2'">Edit Meeting</xsl:when>
218           <xsl:otherwise>Edit Event</xsl:otherwise>
219         </xsl:choose>
220       </h2>
221       <xsl:apply-templates select="." mode="eventForm"/>
222     </form>
223   </xsl:template>
224
225
226   <!--==== ADD and EDIT EVENT FORM ====-->
227   <xsl:template match="formElements" mode="eventForm">
228     <xsl:variable name="subscriptionId" select="subscriptionId"/>
229     <xsl:variable name="calPathEncoded" select="form/calendar/encodedPath"/>
230     <xsl:variable name="calPath" select="form/calendar/path"/>
231     <xsl:variable name="guid" select="guid"/>
232     <xsl:variable name="recurrenceId" select="recurrenceId"/>
233     <input type="hidden" name="endType" value="date"/>
234
235       <!-- event info for edit event -->
236       <xsl:if test="/bedework/creating != 'true'">
237         <table class="common" cellspacing="0">
238           <tr>
239             <th colspan="2" class="commonHeader">
240               <div id="eventActions">
241                 <xsl:choose>
242                   <xsl:when test="recurrenceId != ''">
243                     <img src="{$resourcesRoot}/resources/trashIcon.gif" width="13" height="13" border="0" alt="delete"/>
244                     Delete:
245                     <a href="{$delEvent}&amp;subid={$subscriptionId}&amp;calPath={$calPath}&amp;guid={$guid}" title="delete master (recurring event)">all</a>,
246                     <a href="{$delEvent}&amp;subid={$subscriptionId}&amp;calPath={$calPath}&amp;guid={$guid}&amp;recurrenceId={$recurrenceId}" title="delete instance (recurring event)">instance</a>
247                   </xsl:when>
248                   <xsl:otherwise>
249                     <a href="{$delEvent}&amp;subid={$subscriptionId}&amp;calPath={$calPath}&amp;guid={$guid}&amp;recurrenceId={$recurrenceId}" title="delete event">
250                       <img src="{$resourcesRoot}/resources/trashIcon.gif" width="13" height="13" border="0" alt="delete"/>
251                       Delete
252                       <xsl:if test="form/recurringEntity='true'">
253                         all
254                       </xsl:if>
255                     </a>
256                   </xsl:otherwise>
257                 </xsl:choose>
258               </div>
259               <!-- Display type of event -->
260               <xsl:variable name="entityType">
261                 <xsl:choose>
262                   <xsl:when test="entityType = '2'">Task</xsl:when>
263                   <xsl:when test="scheduleMethod = '2'">Meeting</xsl:when>
264                   <xsl:otherwise>Event</xsl:otherwise>
265                 </xsl:choose>
266               </xsl:variable>
267               <xsl:if test="form/recurringEntity='true' or recurrenceId != ''">
268                 Recurring
269               </xsl:if>
270               <xsl:choose>
271                 <xsl:when test="form">
272                   <!-- just a placeholder: need to add owner to the jsp -->
273                   Personal <xsl:value-of select="$entityType"/>
274                 </xsl:when>
275                 <xsl:when test="public = 'true'">
276                   Public <xsl:value-of select="$entityType"/>
277                 </xsl:when>
278                 <xsl:otherwise>
279                   <xsl:value-of select="$entityType"/> (<xsl:value-of select="calendar/owner"/>)
280                 </xsl:otherwise>
281               </xsl:choose>
282               <xsl:if test="form/recurringEntity='true' and recurrenceId = ''">
283                 <xsl:text> </xsl:text>
284                 <em>(recurrence master)</em>
285               </xsl:if>
286             </th>
287           </tr>
288         </table>
289       </xsl:if>
290
291       <!-- event form submenu -->
292       <ul id="eventFormTabs" class="submenu">
293         <li class="selected">
294           <a href="javascript:setTab('eventFormTabs',0); show('bwEventTab-Basic'); hide('bwEventTab-Details','bwEventTab-Recurrence','bwEventTab-Access','bwEventTab-Scheduling');">
295             basic
296           </a>
297         </li>
298         <li>
299           <a href="javascript:setTab('eventFormTabs',1); show('bwEventTab-Details'); hide('bwEventTab-Basic','bwEventTab-Recurrence','bwEventTab-Access','bwEventTab-Scheduling');">
300             details
301           </a>
302         </li>
303         <li>
304           <a href="javascript:setTab('eventFormTabs',2); show('bwEventTab-Recurrence'); hide('bwEventTab-Details','bwEventTab-Basic','bwEventTab-Access','bwEventTab-Scheduling');">
305             recurrence
306           </a>
307         </li>
308         <li>
309           <a href="javascript:setTab('eventFormTabs',3); show('bwEventTab-Scheduling'); hide('bwEventTab-Basic','bwEventTab-Details','bwEventTab-Recurrence','bwEventTab-Access');">
310             scheduling
311           </a>
312         </li>
313         <li>
314           <a href="javascript:setTab('eventFormTabs',4); show('bwEventTab-Access'); hide('bwEventTab-Details','bwEventTab-Basic','bwEventTab-Recurrence','bwEventTab-Scheduling');">
315             access
316           </a>
317         </li>
318       </ul>
319
320     <!-- Basic tab -->
321     <!-- ============== -->
322     <!-- this tab is visible by default -->
323     <div id="bwEventTab-Basic">
324       <table cellspacing="0" class="common dottedBorder">
325         <!--  Calendar in which to place event  -->
326         <tr>
327           <td class="fieldname">
328             Calendar:
329           </td>
330           <td class="fieldval">
331             <!-- the string "user/" should not be hard coded; fix this -->
332             <xsl:variable name="userPath">user/<xsl:value-of select="/bedework/userid"/></xsl:variable>
333             <xsl:variable name="writableCalendars">
334               <xsl:value-of select="
335                 count(/bedework/myCalendars//calendar[calType = '1' and
336                        currentAccess/current-user-privilege-set/privilege/write-content]) +
337                 count(/bedework/mySubscriptions//calendar[calType = '1' and
338                        currentAccess/current-user-privilege-set/privilege/write-content and
339                        (not(contains(path,$userPath)))])"/>
340             </xsl:variable>
341             <xsl:choose>
342               <xsl:when test="$writableCalendars = 1">
343                 <!-- there is only 1 writable calendar, so find it by looking down both trees at once -->
344                 <xsl:variable name="newCalPath"><xsl:value-of select="/bedework/myCalendars//calendar[calType = '1' and
345                          currentAccess/current-user-privilege-set/privilege/write-content]/path"/><xsl:value-of select="/bedework/mySubscriptions//calendar[calType = '1' and
346                        currentAccess/current-user-privilege-set/privilege/write-content and
347                        (not(contains(path,$userPath)))]/path"/></xsl:variable>
348
349                 <input type="hidden" name="newCalPath" value="{$newCalPath}"/>
350
351                 <xsl:variable name="userFullPath"><xsl:value-of select="$userPath"/>/</xsl:variable>
352                 <span id="bwEventCalDisplay">
353                   <xsl:choose>
354                     <xsl:when test="contains($newCalPath,$userFullPath)">
355                       <xsl:value-of select="substring-after($newCalPath,$userFullPath)"/>
356                     </xsl:when>
357                     <xsl:otherwise>
358                       <xsl:value-of select="$newCalPath"/>
359                     </xsl:otherwise>
360                   </xsl:choose>
361                 </span>
362               </xsl:when>
363               <xsl:otherwise>
364                 <input type="hidden" name="newCalPath" id="bwNewCalPathField">
365                   <xsl:attribute name="value"><xsl:value-of select="form/calendar/path"/></xsl:attribute>
366                 </input>
367
368                 <xsl:variable name="userFullPath"><xsl:value-of select="$userPath"/>/</xsl:variable>
369                 <span id="bwEventCalDisplay">
370                   <xsl:choose>
371                     <xsl:when test="contains(form/calendar/path,$userFullPath)">
372                       <xsl:value-of select="substring-after(form/calendar/path,$userFullPath)"/>
373                     </xsl:when>
374                     <xsl:otherwise>
375                       <xsl:value-of select="form/calendar/path"/>
376                     </xsl:otherwise>
377                   </xsl:choose>
378                   <xsl:text> </xsl:text>
379                   <!-- this final text element is required to avoid an empty
380                        span element which is improperly rendered in the browser -->
381                 </span>
382
383               </xsl:otherwise>
384             </xsl:choose>
385           </td>
386         </tr>
387         <!--  Summary (title) of event  -->
388         <tr>
389           <td class="fieldname">
390             Title:
391           </td>
392           <td class="fieldval">
393             <xsl:variable name="title" select="form/title/input/@value"/>
394             <input type="text" name="summary" size="80" value="{$title}" id="bwEventTitle"/>
395           </td>
396         </tr>
397
398         <!--  Date and Time -->
399         <!--  ============= -->
400         <tr>
401           <td class="fieldname">
402             Date &amp; Time:
403           </td>
404           <td class="fieldval">
405             <!-- Set the timefields class for the first load of the page;
406                  subsequent changes will take place using javascript without a
407                  page reload. -->
408             <xsl:variable name="timeFieldsClass">
409               <xsl:choose>
410                 <xsl:when test="form/allDay/input/@checked='checked'">invisible</xsl:when>
411                 <xsl:otherwise>timeFields</xsl:otherwise>
412               </xsl:choose>
413             </xsl:variable>
414
415             <!-- date only event: anniversary event - often interpreted as "all day event" -->
416             <xsl:choose>
417               <xsl:when test="form/allDay/input/@checked='checked'">
418                 <input type="checkbox" name="allDayFlag" onclick="swapAllDayEvent(this)" value="on" checked="checked"/>
419                 <input type="hidden" name="eventStartDate.dateOnly" value="true" id="allDayStartDateField"/>
420                 <input type="hidden" name="eventEndDate.dateOnly" value="true" id="allDayEndDateField"/>
421               </xsl:when>
422               <xsl:otherwise>
423                 <input type="checkbox" name="allDayFlag" onclick="swapAllDayEvent(this)" value="off"/>
424                 <input type="hidden" name="eventStartDate.dateOnly" value="false" id="allDayStartDateField"/>
425                 <input type="hidden" name="eventEndDate.dateOnly" value="false" id="allDayEndDateField"/>
426               </xsl:otherwise>
427             </xsl:choose>
428             all day
429
430             <!-- floating event: no timezone (and not UTC) -->
431             <xsl:choose>
432               <xsl:when test="form/floating/input/@checked='checked'">
433                 <input type="checkbox" name="floatingFlag" id="floatingFlag" onclick="swapFloatingTime(this)" value="on" checked="checked"/>
434                 <input type="hidden" name="eventStartDate.floating" value="true" id="startFloating"/>
435                 <input type="hidden" name="eventEndDate.floating" value="true" id="endFloating"/>
436               </xsl:when>
437               <xsl:otherwise>
438                 <input type="checkbox" name="floatingFlag" id="floatingFlag" onclick="swapFloatingTime(this)" value="off"/>
439                 <input type="hidden" name="eventStartDate.floating" value="false" id="startFloating"/>
440                 <input type="hidden" name="eventEndDate.floating" value="false" id="endFloating"/>
441               </xsl:otherwise>
442             </xsl:choose>
443             floating
444
445             <!-- store time as coordinated universal time (UTC) -->
446             <xsl:choose>
447               <xsl:when test="form/storeUTC/input/@checked='checked'">
448                 <input type="checkbox" name="storeUTCFlag" id="storeUTCFlag" onclick="swapStoreUTC(this)" value="on" checked="checked"/>
449                 <input type="hidden" name="eventStartDate.storeUTC" value="true" id="startStoreUTC"/>
450                 <input type="hidden" name="eventEndDate.storeUTC" value="true" id="endStoreUTC"/>
451               </xsl:when>
452               <xsl:otherwise>
453                 <input type="checkbox" name="storeUTCFlag" id="storeUTCFlag" onclick="swapStoreUTC(this)" value="off"/>
454                 <input type="hidden" name="eventStartDate.storeUTC" value="false" id="startStoreUTC"/>
455                 <input type="hidden" name="eventEndDate.storeUTC" value="false" id="endStoreUTC"/>
456               </xsl:otherwise>
457             </xsl:choose>
458             store as UTC
459
460             <br/>
461             <div class="dateStartEndBox">
462               <strong>Start:</strong>
463               <div class="dateFields">
464                 <span class="startDateLabel">Date </span>
465                 <xsl:choose>
466                   <xsl:when test="$portalFriendly = 'true'">
467                     <xsl:copy-of select="/bedework/formElements/form/start/month/*"/>
468                     <xsl:copy-of select="/bedework/formElements/form/start/day/*"/>
469                     <xsl:choose>
470                       <xsl:when test="/bedework/creating = 'true'">
471                         <xsl:copy-of select="/bedework/formElements/form/start/year/*"/>
472                       </xsl:when>
473                       <xsl:otherwise>
474                         <xsl:copy-of select="/bedework/formElements/form/start/yearText/*"/>
475                       </xsl:otherwise>
476                     </xsl:choose>
477                     <script language="JavaScript" type="text/javascript">
478                       <xsl:comment>
479                       startDateDynCalWidget = new dynCalendar('startDateDynCalWidget', <xsl:value-of select="number(/bedework/formElements/form/start/yearText/input/@value)"/>, <xsl:value-of select="number(/bedework/formElements/form/start/month/select/option[@selected='selected']/@value)-1"/>, <xsl:value-of select="number(/bedework/formElements/form/start/day/select/option[@selected='selected']/@value)"/>, 'startDateCalWidgetCallback', '<xsl:value-of select="$resourcesRoot"/>/resources/');
480                       </xsl:comment>
481                     </script>
482                   </xsl:when>
483                   <xsl:otherwise>
484                     <span dojoType="dropdowndatepicker" formatLength="medium" value="today" saveFormat="yyyyMMdd" id="bwEventWidgetStartDate" iconURL="{$resourcesRoot}/resources/calIcon.gif">
485                       <xsl:attribute name="value"><xsl:value-of select="form/start/rfc3339DateTime"/></xsl:attribute>
486                       <xsl:text> </xsl:text>
487                     </span>
488                     <input type="hidden" name="eventStartDate.year">
489                       <xsl:attribute name="value"><xsl:value-of select="form/start/yearText/input/@value"/></xsl:attribute>
490                     </input>
491                     <input type="hidden" name="eventStartDate.month">
492                       <xsl:attribute name="value"><xsl:value-of select="form/start/month/select/option[@selected = 'selected']/@value"/></xsl:attribute>
493                     </input>
494                     <input type="hidden" name="eventStartDate.day">
495                       <xsl:attribute name="value"><xsl:value-of select="form/start/day/select/option[@selected = 'selected']/@value"/></xsl:attribute>
496                     </input>
497                   </xsl:otherwise>
498                 </xsl:choose>
499               </div>
500               <div class="{$timeFieldsClass}" id="startTimeFields">
501                 <span id="calWidgetStartTimeHider" class="show">
502                   <xsl:copy-of select="form/start/hour/*"/>
503                   <xsl:copy-of select="form/start/minute/*"/>
504                   <xsl:if test="form/start/ampm">
505                     <xsl:copy-of select="form/start/ampm/*"/>
506                   </xsl:if>
507                   <xsl:text> </xsl:text>
508                   <a href="javascript:bwClockLaunch('eventStartDate');"><img src="{$resourcesRoot}/resources/clockIcon.gif" width="16" height="15" border="0" alt="bwClock"/></a>
509
510                   <select name="eventStartDate.tzid" id="startTzid" class="timezones">
511                     <xsl:if test="form/floating/input/@checked='checked'"><xsl:attribute name="disabled">disabled</xsl:attribute></xsl:if>
512                     <option value="-1">select timezone...</option>
513                     <xsl:variable name="startTzId" select="form/start/tzid"/>
514                     <xsl:for-each select="/bedework/timezones/timezone">
515                       <option>
516                         <xsl:attribute name="value"><xsl:value-of select="id"/></xsl:attribute>
517                         <xsl:if test="$startTzId = id"><xsl:attribute name="selected">selected</xsl:attribute></xsl:if>
518                         <xsl:value-of select="name"/>
519                       </option>
520                     </xsl:for-each>
521                   </select>
522                 </span>
523               </div>
524             </div>
525             <div class="dateStartEndBox">
526               <strong>
527                 <xsl:choose>
528                   <xsl:when test="form/entityType = '2'">Due:</xsl:when>
529                   <xsl:otherwise>End:</xsl:otherwise>
530                 </xsl:choose>
531               </strong>
532               <xsl:choose>
533                 <xsl:when test="form/end/type='E'">
534                   <input type="radio" name="eventEndType" value="E" checked="checked" onclick="changeClass('endDateTime','shown');changeClass('endDuration','invisible');"/>
535                 </xsl:when>
536                 <xsl:otherwise>
537                   <input type="radio" name="eventEndType" value="E" onclick="changeClass('endDateTime','shown');changeClass('endDuration','invisible');"/>
538                 </xsl:otherwise>
539               </xsl:choose>
540               Date
541               <xsl:variable name="endDateTimeClass">
542                 <xsl:choose>
543                   <xsl:when test="form/end/type='E'">shown</xsl:when>
544                   <xsl:otherwise>invisible</xsl:otherwise>
545                 </xsl:choose>
546               </xsl:variable>
547               <div class="{$endDateTimeClass}" id="endDateTime">
548                 <div class="dateFields">
549                   <xsl:choose>
550                     <xsl:when test="$portalFriendly = 'true'">
551                       <xsl:copy-of select="/bedework/formElements/form/end/dateTime/month/*"/>
552                       <xsl:copy-of select="/bedework/formElements/form/end/dateTime/day/*"/>
553                       <xsl:choose>
554                         <xsl:when test="/bedework/creating = 'true'">
555                           <xsl:copy-of select="/bedework/formElements/form/end/dateTime/year/*"/>
556                         </xsl:when>
557                         <xsl:otherwise>
558                           <xsl:copy-of select="/bedework/formElements/form/end/dateTime/yearText/*"/>
559                         </xsl:otherwise>
560                       </xsl:choose>
561                       <script language="JavaScript" type="text/javascript">
562                       <xsl:comment>
563                         endDateDynCalWidget = new dynCalendar('endDateDynCalWidget', <xsl:value-of select="number(/bedework/formElements/form/start/yearText/input/@value)"/>, <xsl:value-of select="number(/bedework/formElements/form/start/month/select/option[@selected='selected']/@value)-1"/>, <xsl:value-of select="number(/bedework/formElements/form/start/day/select/option[@selected='selected']/@value)"/>, 'endDateCalWidgetCallback', '<xsl:value-of select="$resourcesRoot"/>/resources/');
564                       </xsl:comment>
565                       </script>
566                     </xsl:when>
567                     <xsl:otherwise>
568                       <span dojoType="dropdowndatepicker" formatLength="medium" value="today" saveFormat="yyyyMMdd" id="bwEventWidgetEndDate" iconURL="{$resourcesRoot}/resources/calIcon.gif">
569                         <xsl:attribute name="value"><xsl:value-of select="form/end/rfc3339DateTime"/></xsl:attribute>
570                         <xsl:text> </xsl:text>
571                       </span>
572                       <input type="hidden" name="eventEndDate.year">
573                         <xsl:attribute name="value"><xsl:value-of select="form/end/dateTime/yearText/input/@value"/></xsl:attribute>
574                       </input>
575                       <input type="hidden" name="eventEndDate.month">
576                         <xsl:attribute name="value"><xsl:value-of select="form/end/dateTime/month/select/option[@selected = 'selected']/@value"/></xsl:attribute>
577                       </input>
578                       <input type="hidden" name="eventEndDate.day">
579                         <xsl:attribute name="value"><xsl:value-of select="form/end/dateTime/day/select/option[@selected = 'selected']/@value"/></xsl:attribute>
580                       </input>
581                     </xsl:otherwise>
582                   </xsl:choose>
583                 </div>
584                 <div class="{$timeFieldsClass}" id="endTimeFields">
585                   <span id="calWidgetEndTimeHider" class="show">
586                     <xsl:copy-of select="form/end/dateTime/hour/*"/>
587                     <xsl:copy-of select="form/end/dateTime/minute/*"/>
588                     <xsl:if test="form/end/dateTime/ampm">
589                       <xsl:copy-of select="form/end/dateTime/ampm/*"/>
590                     </xsl:if>
591                     <xsl:text> </xsl:text>
592                     <a href="javascript:bwClockLaunch('eventEndDate');"><img src="{$resourcesRoot}/resources/clockIcon.gif" width="16" height="15" border="0" alt="bwClock"/></a>
593
594                     <select name="eventEndDate.tzid" id="endTzid" class="timezones">
595                       <xsl:if test="form/floating/input/@checked='checked'"><xsl:attribute name="disabled">disabled</xsl:attribute></xsl:if>
596                       <option value="-1">select timezone...</option>
597                       <xsl:variable name="endTzId" select="form/end/dateTime/tzid"/>
598                       <xsl:for-each select="/bedework/timezones/timezone">
599                         <option>
600                           <xsl:attribute name="value"><xsl:value-of select="id"/></xsl:attribute>
601                             <xsl:if test="$endTzId = id"><xsl:attribute name="selected">selected</xsl:attribute></xsl:if>
602                           <xsl:value-of select="name"/>
603                         </option>
604                       </xsl:for-each>
605                     </select>
606                   </span>
607                 </div>
608               </div><br/>
609               <div id="clock" class="invisible">
610                 <xsl:call-template name="clock"/>
611               </div>
612               <div class="dateFields">
613                 <xsl:choose>
614                   <xsl:when test="form/end/type='D'">
615                     <input type="radio" name="eventEndType" value="D" checked="checked" onclick="changeClass('endDateTime','invisible');changeClass('endDuration','shown');"/>
616                   </xsl:when>
617                   <xsl:otherwise>
618                     <input type="radio" name="eventEndType" value="D" onclick="changeClass('endDateTime','invisible');changeClass('endDuration','shown');"/>
619                   </xsl:otherwise>
620                 </xsl:choose>
621                 Duration
622                 <xsl:variable name="endDurationClass">
623                   <xsl:choose>
624                     <xsl:when test="form/end/type='D'">shown</xsl:when>
625                     <xsl:otherwise>invisible</xsl:otherwise>
626                   </xsl:choose>
627                 </xsl:variable>
628                 <xsl:variable name="durationHrMinClass">
629                   <xsl:choose>
630                     <xsl:when test="form/allDay/input/@checked='checked'">invisible</xsl:when>
631                     <xsl:otherwise>shown</xsl:otherwise>
632                   </xsl:choose>
633                 </xsl:variable>
634                 <div class="{$endDurationClass}" id="endDuration">
635                   <xsl:choose>
636                     <xsl:when test="form/end/duration/weeks/input/@value = '0'">
637                     <!-- we are using day, hour, minute format -->
638                     <!-- must send either no week value or week value of 0 (zero) -->
639                       <div class="durationBox">
640                         <input type="radio" name="eventDuration.type" value="daytime" onclick="swapDurationType('daytime')" checked="checked"/>
641                         <xsl:variable name="daysStr" select="form/end/duration/days/input/@value"/>
642                         <input type="text" name="eventDuration.daysStr" size="2" value="{$daysStr}" id="durationDays"/>days
643                         <span id="durationHrMin" class="{$durationHrMinClass}">
644                           <xsl:variable name="hoursStr" select="form/end/duration/hours/input/@value"/>
645                           <input type="text" name="eventDuration.hoursStr" size="2" value="{$hoursStr}" id="durationHours"/>hours
646                           <xsl:variable name="minutesStr" select="form/end/duration/minutes/input/@value"/>
647                           <input type="text" name="eventDuration.minutesStr" size="2" value="{$minutesStr}" id="durationMinutes"/>minutes
648                         </span>
649                       </div>
650                       <span class="durationSpacerText">or</span>
651                       <div class="durationBox">
652                         <input type="radio" name="eventDuration.type" value="weeks" onclick="swapDurationType('week')"/>
653                         <xsl:variable name="weeksStr" select="form/end/duration/weeks/input/@value"/>
654                         <input type="text" name="eventDuration.weeksStr" size="2" value="{$weeksStr}" id="durationWeeks" disabled="disabled"/>weeks
655                       </div>
656                     </xsl:when>
657                     <xsl:otherwise>
658                       <!-- we are using week format -->
659                       <div class="durationBox">
660                         <input type="radio" name="eventDuration.type" value="daytime" onclick="swapDurationType('daytime')"/>
661                         <xsl:variable name="daysStr" select="form/end/duration/days/input/@value"/>
662                         <input type="text" name="eventDuration.daysStr" size="2" value="{$daysStr}" id="durationDays" disabled="disabled"/>days
663                         <span id="durationHrMin" class="{$durationHrMinClass}">
664                           <xsl:variable name="hoursStr" select="form/end/duration/hours/input/@value"/>
665                           <input type="text" name="eventDuration.hoursStr" size="2" value="{$hoursStr}" id="durationHours" disabled="disabled"/>hours
666                           <xsl:variable name="minutesStr" select="form/end/duration/minutes/input/@value"/>
667                           <input type="text" name="eventDuration.minutesStr" size="2" value="{$minutesStr}" id="durationMinutes" disabled="disabled"/>minutes
668                         </span>
669                       </div>
670                       <span class="durationSpacerText">or</span>
671                       <div class="durationBox">
672                         <input type="radio" name="eventDuration.type" value="weeks" onclick="swapDurationType('week')" checked="checked"/>
673                         <xsl:variable name="weeksStr" select="form/end/duration/weeks/input/@value"/>
674                         <input type="text" name="eventDuration.weeksStr" size="2" value="{$weeksStr}" id="durationWeeks"/>weeks
675                       </div>
676                     </xsl:otherwise>
677                   </xsl:choose>
678                 </div>
679               </div><br/>
680               <div class="dateFields" id="noDuration">
681                 <xsl:choose>
682                   <xsl:when test="form/end/type='N'">
683                     <input type="radio" name="eventEndType" value="N" checked="checked" onclick="changeClass('endDateTime','invisible');changeClass('endDuration','invisible');"/>
684                   </xsl:when>
685                   <xsl:otherwise>
686                     <input type="radio" name="eventEndType" value="N" onclick="changeClass('endDateTime','invisible');changeClass('endDuration','invisible');"/>
687                   </xsl:otherwise>
688                 </xsl:choose>
689                 This
690                 <xsl:choose>
691                   <xsl:when test="form/entityType = '2'">task</xsl:when>
692                   <xsl:otherwise>event</xsl:otherwise>
693                 </xsl:choose>
694                 has no duration / end date
695               </div>
696             </div>
697           </td>
698         </tr>
699
700         <!--  Percent Complete (only for Tasks)  -->
701         <xsl:if test="form/entityType = '2'">
702           <tr>
703             <td class="fieldname">
704               % Complete:
705             </td>
706             <td class="fieldval" align="left">
707               <input type="text" name="event.percentComplete" size="3" maxlength="3">
708                 <xsl:attribute name="value"><xsl:value-of select="form/percentComplete"/></xsl:attribute>
709               </input>%
710             </td>
711           </tr>
712         </xsl:if>
713
714         <!--  Transparency  -->
715         <tr>
716           <td class="fieldname padMeTop">
717             Effects free/busy:
718           </td>
719           <td align="left" class="padMeTop">
720             <input type="radio" value="OPAQUE" name="transparency">
721               <xsl:if test="form/transparency = 'OPAQUE'">
722                 <xsl:attribute name="checked">checked</xsl:attribute>
723               </xsl:if>
724             </input>
725             yes <span class="note">(opaque: event status affects your free/busy)</span><br/>
726
727             <input type="radio" value="TRANSPARENT" name="transparency">
728               <xsl:if test="form/transparency = 'TRANSPARENT'">
729                 <xsl:attribute name="checked">checked</xsl:attribute>
730               </xsl:if>
731             </input>
732             no <span class="note">(transparent: event status does not affect your free/busy)</span><br/>
733           </td>
734         </tr>
735
736         <!--  Category  -->
737         <tr>
738           <td class="fieldname">
739             Categories:
740           </td>
741           <td class="fieldval" align="left">
742             <xsl:variable name="catCount" select="count(form/categories/all/category)"/>
743             <xsl:choose>
744               <xsl:when test="not(form/categories/all/category)">
745                 no categories defined
746               </xsl:when>
747               <xsl:otherwise>
748                 <table cellpadding="0" id="allCategoryCheckboxes">
749                   <tr>
750                     <td>
751                       <xsl:for-each select="form/categories/all/category[position() &lt;= ceiling($catCount div 2)]">
752                         <input type="checkbox" name="categoryKey">
753                           <xsl:attribute name="value"><xsl:value-of select="keyword"/></xsl:attribute>
754                           <xsl:if test="keyword = form/categories/current//category/keyword"><xsl:attribute name="checked">checked</xsl:attribute></xsl:if>
755                           <xsl:value-of select="keyword"/>
756                         </input><br/>
757                       </xsl:for-each>
758                     </td>
759                     <td>
760                       <xsl:for-each select="form/categories/all/category[position() &gt; ceiling($catCount div 2)]">
761                         <input type="checkbox" name="categoryKey">
762                           <xsl:attribute name="value"><xsl:value-of select="keyword"/></xsl:attribute>
763                           <xsl:if test="keyword = form/categories/current//category/keyword"><xsl:attribute name="checked">checked</xsl:attribute></xsl:if>
764                           <xsl:value-of select="keyword"/>
765                         </input><br/>
766                       </xsl:for-each>
767                     </td>
768                   </tr>
769                 </table>
770               </xsl:otherwise>
771             </xsl:choose>
772           </td>
773         </tr>
774       </table>
775     </div>
776
777     <!-- Details tab -->
778     <!-- ============== -->
779     <div id="bwEventTab-Details" class="invisible">
780       <table cellspacing="0" class="common dottedBorder">
781         <!--  Location  -->
782         <tr>
783           <td class="fieldname">Location:</td>
784           <td class="fieldval" align="left">
785             <span class="std-text">choose: </span>
786             <span id="eventFormLocationList">
787               <select name="locationUid">
788                 <option value="">select...</option>
789                 <xsl:copy-of select="form/location/locationmenu/select/*"/>
790               </select>
791             </span>
792             <span class="std-text"> or add new: </span>
793             <input type="text" name="locationAddress.value" value="" />
794           </td>
795         </tr>
796         <!--  Link (url associated with event)  -->
797         <tr>
798           <td class="fieldname">Event Link:</td>
799           <td class="fieldval">
800             <xsl:variable name="link" select="form/link/input/@value"/>
801             <input type="text" name="event.link" size="80" value="{$link}"/>
802           </td>
803         </tr>
804         <!--  Description  -->
805         <tr>
806           <td class="fieldname">Description:</td>
807           <td class="fieldval">
808             <xsl:choose>
809               <xsl:when test="normalize-space(form/desc/textarea) = ''">
810                 <textarea name="description" cols="60" rows="4">
811                   <xsl:text> </xsl:text>
812                 </textarea>
813                 <!-- keep this space to avoid browser
814                 rendering errors when the text area is empty -->
815               </xsl:when>
816               <xsl:otherwise>
817                 <textarea name="description" cols="60" rows="4">
818                   <xsl:value-of select="form/desc/textarea"/>
819                 </textarea>
820               </xsl:otherwise>
821             </xsl:choose>
822           </td>
823         </tr>
824         <!--  Status  -->
825         <tr>
826           <td class="fieldname">
827             Status:
828           </td>
829           <td class="fieldval">
830             <input type="radio" name="eventStatus" value="CONFIRMED">
831               <xsl:if test="form/status = 'CONFIRMED' or /bedework/creating = 'true' or form/status = ''"><xsl:attribute name="checked">checked</xsl:attribute></xsl:if>
832             </input>
833             confirmed
834             <input type="radio" name="eventStatus" value="TENTATIVE">
835               <xsl:if test="form/status = 'TENTATIVE'"><xsl:attribute name="checked">checked</xsl:attribute></xsl:if>
836             </input>
837             tentative
838             <input type="radio" name="eventStatus" value="CANCELLED">
839               <xsl:if test="form/status = 'CANCELLED'"><xsl:attribute name="checked">checked</xsl:attribute></xsl:if>
840             </input>
841             cancelled
842           </td>
843         </tr>
844         <!--  Transparency  -->
845         <xsl:if test="entityType != '2'"><!-- no transparency for Tasks -->
846           <tr>
847             <td class="fieldname">
848               Effects free/busy:
849             </td>
850             <td class="fieldval">
851               <xsl:choose>
852                 <xsl:when test="form/transparency = 'TRANSPARENT'">
853                   <input type="radio" name="event.transparency" value="OPAQUE"/>yes <span class="note">(opaque: event status affects your free/busy)</span><br/>
854                   <input type="radio" name="event.transparency" value="TRANSPARENT" checked="checked"/>no <span class="note">(transparent: event status does not affect your free/busy)</span>
855                 </xsl:when>
856                 <xsl:otherwise>
857                   <input type="radio" name="event.transparency" value="OPAQUE" checked="checked"/>yes <span class="note">(opaque: event status affects your free/busy)</span><br/>
858                   <input type="radio" name="event.transparency" value="TRANSPARENT"/>no <span class="note">(transparent: event status does not affect your free/busy)</span>
859                 </xsl:otherwise>
860               </xsl:choose>
861             </td>
862           </tr>
863         </xsl:if>
864       </table>
865     </div>
866
867
868     <!-- Recurrence tab -->
869     <!-- ============== -->
870     <div id="bwEventTab-Recurrence" class="invisible">
871       <xsl:choose>
872         <xsl:when test="recurrenceId != ''">
873           <!-- recurrence instances can not themselves recur,
874                so provide access to master event -->
875           <em>This event is a recurrence instance.</em><br/>
876           <a href="{$editEvent}&amp;subid={$subscriptionId}&amp;calPath={$calPath}&amp;guid={$guid}" title="edit master (recurring event)">edit master event</a>
877         </xsl:when>
878         <xsl:otherwise>
879           <!-- has recurrenceId, so is master -->
880
881           <div id="recurringSwitch">
882             <!-- set or remove "recurring" and show or hide all recurrence fields: -->
883             <input type="radio" name="recurring" value="true" onclick="swapRecurrence(this)">
884               <xsl:if test="form/recurringEntity = 'true'"><xsl:attribute name="checked">checked</xsl:attribute></xsl:if>
885             </input> event recurs
886             <input type="radio" name="recurring" value="false" onclick="swapRecurrence(this)">
887               <xsl:if test="form/recurringEntity = 'false'"><xsl:attribute name="checked">checked</xsl:attribute></xsl:if>
888             </input> event does not recur
889           </div>
890
891           <!-- wrapper for all recurrence fields (rrules and rdates): -->
892           <div id="recurrenceFields" class="invisible">
893             <xsl:if test="form/recurringEntity = 'true'"><xsl:attribute name="class">visible</xsl:attribute></xsl:if>
894
895             <h4>Recurrence Rules</h4>
896             <!-- show or hide rrules fields when editing: -->
897             <xsl:if test="form/recurrence">
898               <input type="checkbox" name="rrulesFlag" onclick="swapRrules(this)" value="on"/>
899               <span id="rrulesSwitch">
900                 change recurrence rules
901               </span>
902             </xsl:if>
903             <span id="rrulesUiSwitch">
904               <xsl:if test="form/recurrence">
905                 <xsl:attribute name="class">invisible</xsl:attribute>
906               </xsl:if>
907               <input type="checkbox" name="rrulesUiSwitch" value="advanced" onchange="swapVisible(this,'advancedRrules')"/>
908               show advanced recurrence rules
909             </span>
910
911             <xsl:if test="form/recurrence">
912               <!-- Output descriptive recurrence rules information.  Probably not
913                    complete yet. Replace all strings so can be
914                    more easily internationalized. -->
915               <div id="recurrenceInfo">
916                 Every
917                 <xsl:choose>
918                   <xsl:when test="form/recurrence/interval &gt; 1">
919                     <xsl:value-of select="form/recurrence/interval"/>
920                   </xsl:when>
921                 </xsl:choose>
922                 <xsl:text> </xsl:text>
923                 <xsl:choose>
924                   <xsl:when test="form/recurrence/freq = 'HOURLY'">hour</xsl:when>
925                   <xsl:when test="form/recurrence/freq = 'DAILY'">day</xsl:when>
926                   <xsl:when test="form/recurrence/freq = 'WEEKLY'">week</xsl:when>
927                   <xsl:when test="form/recurrence/freq = 'MONTHLY'">month</xsl:when>
928                   <xsl:when test="form/recurrence/freq = 'YEARLY'">year</xsl:when>
929                 </xsl:choose><xsl:if test="form/recurrence/interval &gt; 1">s</xsl:if>
930                 <xsl:text> </xsl:text>
931
932                 <xsl:if test="form/recurrence/byday">
933                   <xsl:for-each select="form/recurrence/byday/pos">
934                     <xsl:if test="position() != 1"> and </xsl:if>
935                     on
936                     <xsl:choose>
937                       <xsl:when test="@val='1'">
938                         the first
939                       </xsl:when>
940                       <xsl:when test="@val='2'">
941                         the second
942                       </xsl:when>
943                       <xsl:when test="@val='3'">
944                         the third
945                       </xsl:when>
946                       <xsl:when test="@val='4'">
947                         the fourth
948                       </xsl:when>
949                       <xsl:when test="@val='5'">
950                         the fifth
951                       </xsl:when>
952                       <xsl:when test="@val='-1'">
953                         the last
954                       </xsl:when>
955                       <!-- don't output "every" -->
956                       <!--<xsl:otherwise>
957                         every
958                       </xsl:otherwise>-->
959                     </xsl:choose>
960                     <xsl:for-each select="day">
961                       <xsl:if test="position() != 1 and position() = last()"> and </xsl:if>
962                       <xsl:variable name="dayVal" select="."/>
963                       <xsl:variable name="dayPos">
964                         <xsl:for-each select="/bedework/recurdayvals/val">
965                           <xsl:if test="node() = $dayVal"><xsl:value-of select="position()"/></xsl:if>
966                         </xsl:for-each>
967                       </xsl:variable>
968                       <xsl:value-of select="/bedework/shortdaynames/val[position() = $dayPos]"/>
969                       <xsl:if test="position() != last()">, </xsl:if>
970                     </xsl:for-each>
971                   </xsl:for-each>
972                 </xsl:if>
973
974                 <xsl:if test="form/recurrence/bymonth">
975                   in
976                   <xsl:for-each select="form/recurrence/bymonth/val">
977                     <xsl:if test="position() != 1 and position() = last()"> and </xsl:if>
978                     <xsl:variable name="monthNum" select="number(.)"/>
979                     <xsl:value-of select="/bedework/monthlabels/val[position() = $monthNum]"/>
980                     <xsl:if test="position() != last()">, </xsl:if>
981                   </xsl:for-each>
982                 </xsl:if>
983
984                 <xsl:if test="form/recurrence/bymonthday">
985                   on the
986                   <xsl:apply-templates select="form/recurrence/bymonthday/val" mode="weekMonthYearNumbers"/>
987                   day<xsl:if test="form/recurrence/bymonthday/val[position()=2]">s</xsl:if> of the month
988                 </xsl:if>
989
990                 <xsl:if test="form/recurrence/byyearday">
991                   on the
992                   <xsl:apply-templates select="form/recurrence/byyearday/val" mode="weekMonthYearNumbers"/>
993                   day<xsl:if test="form/recurrence/byyearday/val[position()=2]">s</xsl:if> of the year
994                 </xsl:if>
995
996                 <xsl:if test="form/recurrence/byweekno">
997                   in the
998                   <xsl:apply-templates select="form/recurrence/byweekno/val" mode="weekMonthYearNumbers"/>
999                   week<xsl:if test="form/recurrence/byweekno/val[position()=2]">s</xsl:if> of the year
1000                 </xsl:if>
1001
1002                 repeating
1003                 <xsl:choose>
1004                   <xsl:when test="form/recurrence/count = '-1'">forever</xsl:when>
1005                   <xsl:when test="form/recurrence/until">
1006                     until <xsl:value-of select="substring(form/recurrence/until,1,4)"/>-<xsl:value-of select="substring(form/recurrence/until,5,2)"/>-<xsl:value-of select="substring(form/recurrence/until,7,2)"/>
1007                   </xsl:when>
1008                   <xsl:otherwise>
1009                     <xsl:value-of select="form/recurrence/count"/>
1010                     time<xsl:if test="form/recurrence/count &gt; 1">s</xsl:if>
1011                   </xsl:otherwise>
1012                 </xsl:choose>
1013               </div>
1014             </xsl:if>
1015
1016             <!-- set these dynamically when form is submitted -->
1017             <input type="hidden" name="interval" value=""/>
1018             <input type="hidden" name="count" value=""/>
1019             <input type="hidden" name="until" value=""/>
1020             <input type="hidden" name="byday" value=""/>
1021             <input type="hidden" name="bymonthday" value=""/>
1022             <input type="hidden" name="bymonth" value=""/>
1023             <input type="hidden" name="byweekno" value=""/>
1024             <input type="hidden" name="byyearday" value=""/>
1025             <input type="hidden" name="wkst" value=""/>
1026             <input type="hidden" name="setpos" value=""/>
1027
1028             <!-- wrapper for rrules: -->
1029             <table id="rrulesTable" cellspacing="0">
1030               <xsl:if test="form/recurrence">
1031                 <xsl:attribute name="class">invisible</xsl:attribute>
1032               </xsl:if>
1033               <tr>
1034                 <td id="recurrenceFrequency" rowspan="2">
1035                   <em>Frequency:</em><br/>
1036                   <input type="radio" name="freq" value="NONE" onclick="showRrules(this.value)" checked="checked"/>none<br/>
1037                   <!--<input type="radio" name="freq" value="HOURLY" onclick="showRrules(this.value)"/>hourly<br/>-->
1038                   <input type="radio" name="freq" value="DAILY" onclick="showRrules(this.value)"/>daily<br/>
1039                   <input type="radio" name="freq" value="WEEKLY" onclick="showRrules(this.value)"/>weekly<br/>
1040                   <input type="radio" name="freq" value="MONTHLY" onclick="showRrules(this.value)"/>monthly<br/>
1041                   <input type="radio" name="freq" value="YEARLY" onclick="showRrules(this.value)"/>yearly
1042                 </td>
1043                 <!-- recurrence count, until, forever -->
1044                 <td id="recurrenceUntil">
1045                   <div id="noneRecurrenceRules">
1046                     no recurrence rules
1047                   </div>
1048                   <div id="recurrenceUntilRules" class="invisible">
1049                     <em>Repeat:</em>
1050                     <p>
1051                       <input type="radio" name="recurCountUntil" value="forever">
1052                         <xsl:if test="not(form/recurring) or form/recurring/count = '-1'">
1053                           <xsl:attribute name="checked">checked</xsl:attribute>
1054                         </xsl:if>
1055                       </input>
1056                       forever
1057                       <input type="radio" name="recurCountUntil" value="count" id="recurCount">
1058                         <xsl:if test="form/recurring/count != '-1'">
1059                           <xsl:attribute name="checked">checked</xsl:attribute>
1060                         </xsl:if>
1061                       </input>
1062                       <input type="text" value="1" size="2" name="countHolder"  onfocus="selectRecurCountUntil('recurCount')">
1063                         <xsl:if test="form/recurring/count and form/recurring/count != '-1'">
1064                           <xsl:attribute name="value"><xsl:value-of select="form/recurring/count"/></xsl:attribute>
1065                         </xsl:if>
1066                       </input>
1067                       time(s)
1068                       <input type="radio" name="recurCountUntil" value="until" id="recurUntil">
1069                         <xsl:if test="form/recurring/until">
1070                           <xsl:attribute name="checked">checked</xsl:attribute>
1071                         </xsl:if>
1072                       </input>
1073                       until
1074                       <span id="untilHolder">
1075                         <span dojoType="dropdowndatepicker" formatLength="medium" value="today" saveFormat="yyyyMMdd" id="bwEventWidgetUntilDate" iconURL="{$resourcesRoot}/resources/calIcon.gif">
1076                           <xsl:attribute name="value"><xsl:value-of select="form/start/rfc3339DateTime"/></xsl:attribute>
1077                           <xsl:text> </xsl:text>
1078                         </span>
1079                       </span>
1080                     </p>
1081                   </div>
1082                 </td>
1083               </tr>
1084               <tr>
1085                 <td id="advancedRrules" class="invisible">
1086                   <!-- hourly -->
1087                   <div id="hourlyRecurrenceRules" class="invisible">
1088                     <p>
1089                       <em>Interval:</em>
1090                       every
1091                       <input type="text" name="hourlyInterval" size="2" value="1">
1092                         <xsl:if test="form/recurrence/interval">
1093                           <xsl:attribute name="value"><xsl:value-of select="form/recurrence/interval"/></xsl:attribute>
1094                         </xsl:if>
1095                       </input>
1096                       hour(s)
1097                     </p>
1098                   </div>
1099                   <!-- daily -->
1100                   <div id="dailyRecurrenceRules" class="invisible">
1101                     <p>
1102                       <em>Interval:</em>
1103                       every
1104                       <input type="text" name="dailyInterval" size="2" value="1">
1105                         <xsl:if test="form/recurrence/interval">
1106                           <xsl:attribute name="value"><xsl:value-of select="form/recurrence/interval"/></xsl:attribute>
1107                         </xsl:if>
1108                       </input>
1109                       day(s)
1110                     </p>
1111                     <p>
1112                       <input type="checkbox" name="swapDayMonthCheckBoxList" value="" onclick="swapVisible(this,'dayMonthCheckBoxList')"/>
1113                       in these months:
1114                       <div id="dayMonthCheckBoxList" class="invisible">
1115                         <xsl:for-each select="/bedework/monthlabels/val">
1116                           <xsl:variable name="pos"><xsl:value-of select="position()"/></xsl:variable>
1117                           <span class="chkBoxListItem">
1118                             <input type="checkbox" name="dayMonths">
1119                               <xsl:attribute name="value"><xsl:value-of select="/bedework/monthvalues/val[position() = $pos]"/></xsl:attribute>
1120                             </input>
1121                             <xsl:value-of select="."/>
1122                           </span>
1123                           <xsl:if test="$pos mod 6 = 0"><br/></xsl:if>
1124                         </xsl:for-each>
1125                       </div>
1126                     </p>
1127                     <!--<p>
1128                       <input type="checkbox" name="swapDaySetPos" value="" onclick="swapVisible(this,'daySetPos')"/>
1129                       limit to:
1130                       <div id="daySetPos" class="invisible">
1131                       </div>
1132                     </p>-->
1133                   </div>
1134                   <!-- weekly -->
1135                   <div id="weeklyRecurrenceRules" class="invisible">
1136                     <p>
1137                       <em>Interval:</em>
1138                       every
1139                       <input type="text" name="weeklyInterval" size="2" value="1">
1140                         <xsl:if test="form/recurrence/interval">
1141                           <xsl:attribute name="value"><xsl:value-of select="form/recurrence/interval"/></xsl:attribute>
1142                         </xsl:if>
1143                       </input>
1144                       week(s) on:
1145                     </p>
1146                     <p>
1147                       <div id="weekRecurFields">
1148                         <xsl:call-template name="byDayChkBoxList">
1149                           <xsl:with-param name="name">byDayWeek</xsl:with-param>
1150                         </xsl:call-template>
1151                       </div>
1152                     </p>
1153                     <p class="weekRecurLinks">
1154                       <a href="javascript:recurSelectWeekdays('weekRecurFields')">select weekdays</a> |
1155                       <a href="javascript:recurSelectWeekends('weekRecurFields')">select weekends</a>
1156                     </p>
1157                     <p>
1158                       Week start:
1159                       <select name="weekWkst">
1160                         <xsl:for-each select="/bedework/shortdaynames/val">
1161                           <xsl:variable name="pos" select="position()"/>
1162                           <option>
1163                             <xsl:attribute name="value"><xsl:value-of select="/bedework/recurdayvals/val[position() = $pos]"/></xsl:attribute>
1164                             <xsl:value-of select="."/>
1165                           </option>
1166                         </xsl:for-each>
1167                       </select>
1168                     </p>
1169                   </div>
1170                   <!-- monthly -->
1171                   <div id="monthlyRecurrenceRules" class="invisible">
1172                     <p>
1173                       <em>Interval:</em>
1174                       every
1175                       <input type="text" name="monthlyInterval" size="2" value="1">
1176                         <xsl:if test="form/recurrence/interval">
1177                           <xsl:attribute name="value"><xsl:value-of select="form/recurrence/interval"/></xsl:attribute>
1178                         </xsl:if>
1179                       </input>
1180                       month(s)
1181                     </p>
1182                     <div id="monthRecurFields">
1183                       <div id="monthRecurFields1">
1184                         on
1185                         <select name="bymonthposPos1" width="7em" onchange="changeClass('monthRecurFields2','shown')">
1186                           <xsl:call-template name="recurrenceDayPosOptions"/>
1187                         </select>
1188                         <xsl:call-template name="byDayChkBoxList"/>
1189                       </div>
1190                       <xsl:call-template name="buildRecurFields">
1191                         <xsl:with-param name="current">2</xsl:with-param>
1192                         <xsl:with-param name="total">10</xsl:with-param>
1193                         <xsl:with-param name="name">month</xsl:with-param>
1194                       </xsl:call-template>
1195                     </div>
1196                     <p>
1197                       <input type="checkbox" name="swapMonthDaysCheckBoxList" value="" onclick="swapVisible(this,'monthDaysCheckBoxList')"/>
1198                       on these days:<br/>
1199                       <div id="monthDaysCheckBoxList" class="invisible">
1200                         <xsl:call-template name="buildCheckboxList">
1201                           <xsl:with-param name="current">1</xsl:with-param>
1202                           <xsl:with-param name="end">31</xsl:with-param>
1203                           <xsl:with-param name="name">monthDayBoxes</xsl:with-param>
1204                         </xsl:call-template>
1205                       </div>
1206                     </p>
1207                   </div>
1208                   <!-- yearly -->
1209                   <div id="yearlyRecurrenceRules" class="invisible">
1210                     <p>
1211                       <em>Interval:</em>
1212                       every
1213                       <input type="text" name="yearlyInterval" size="2" value="1">
1214                         <xsl:if test="form/recurrence/interval">
1215                           <xsl:attribute name="value"><xsl:value-of select="form/recurrence/interval"/></xsl:attribute>
1216                         </xsl:if>
1217                       </input>
1218                       years(s)
1219                     </p>
1220                     <div id="yearRecurFields">
1221                       <div id="yearRecurFields1">
1222                         on
1223                         <select name="byyearposPos1" width="7em" onchange="changeClass('yearRecurFields2','shown')">
1224                           <xsl:call-template name="recurrenceDayPosOptions"/>
1225                         </select>
1226                         <xsl:call-template name="byDayChkBoxList"/>
1227                       </div>
1228                       <xsl:call-template name="buildRecurFields">
1229                         <xsl:with-param name="current">2</xsl:with-param>
1230                         <xsl:with-param name="total">10</xsl:with-param>
1231                         <xsl:with-param name="name">year</xsl:with-param>
1232                       </xsl:call-template>
1233                     </div>
1234                     <p>
1235                       <input type="checkbox" name="swapYearMonthCheckBoxList" value="" onclick="swapVisible(this,'yearMonthCheckBoxList')"/>
1236                       in these months:
1237                       <div id="yearMonthCheckBoxList" class="invisible">
1238                         <xsl:for-each select="/bedework/monthlabels/val">
1239                           <xsl:variable name="pos"><xsl:value-of select="position()"/></xsl:variable>
1240                           <span class="chkBoxListItem">
1241                             <input type="checkbox" name="yearMonths">
1242                               <xsl:attribute name="value"><xsl:value-of select="/bedework/monthvalues/val[position() = $pos]"/></xsl:attribute>
1243                             </input>
1244                             <xsl:value-of select="."/>
1245                           </span>
1246                           <xsl:if test="$pos mod 6 = 0"><br/></xsl:if>
1247                         </xsl:for-each>
1248                       </div>
1249                     </p>
1250                     <p>
1251                       <input type="checkbox" name="swapYearMonthDaysCheckBoxList" value="" onclick="swapVisible(this,'yearMonthDaysCheckBoxList')"/>
1252                       on these days of the month:<br/>
1253                       <div id="yearMonthDaysCheckBoxList" class="invisible">
1254                         <xsl:call-template name="buildCheckboxList">
1255                           <xsl:with-param name="current">1</xsl:with-param>
1256                           <xsl:with-param name="end">31</xsl:with-param>
1257                           <xsl:with-param name="name">yearMonthDayBoxes</xsl:with-param>
1258                         </xsl:call-template>
1259                       </div>
1260                     </p>
1261                     <p>
1262                       <input type="checkbox" name="swapYearWeeksCheckBoxList" value="" onclick="swapVisible(this,'yearWeeksCheckBoxList')"/>
1263                       in these weeks of the year:<br/>
1264                       <div id="yearWeeksCheckBoxList" class="invisible">
1265                         <xsl:call-template name="buildCheckboxList">
1266                           <xsl:with-param name="current">1</xsl:with-param>
1267                           <xsl:with-param name="end">53</xsl:with-param>
1268                           <xsl:with-param name="name">yearWeekBoxes</xsl:with-param>
1269                         </xsl:call-template>
1270                       </div>
1271                     </p>
1272                     <p>
1273                       <input type="checkbox" name="swapYearDaysCheckBoxList" value="" onclick="swapVisible(this,'yearDaysCheckBoxList')"/>
1274                       on these days of the year:<br/>
1275                       <div id="yearDaysCheckBoxList" class="invisible">
1276                         <xsl:call-template name="buildCheckboxList">
1277                           <xsl:with-param name="current">1</xsl:with-param>
1278                           <xsl:with-param name="end">366</xsl:with-param>
1279                           <xsl:with-param name="name">yearDayBoxes</xsl:with-param>
1280                         </xsl:call-template>
1281                       </div>
1282                     </p>
1283                     <p>
1284                       Week start:
1285                       <select name="yearWkst">
1286                         <xsl:for-each select="/bedework/shortdaynames/val">
1287                           <xsl:variable name="pos" select="position()"/>
1288                           <option>
1289                             <xsl:attribute name="value"><xsl:value-of select="/bedework/recurdayvals/val[position() = $pos]"/></xsl:attribute>
1290                             <xsl:value-of select="."/>
1291                           </option>
1292                         </xsl:for-each>
1293                       </select>
1294                     </p>
1295                   </div>
1296                 </td>
1297               </tr>
1298             </table>
1299
1300             <h4>
1301               Recurrence and Exception Dates
1302             </h4>
1303             <div id="raContent">
1304               <div class="dateStartEndBox" id="rdatesFormFields">
1305                 <!-- dateonly event: this is temporary - should be determined by the main event -->
1306                 <input type="checkbox" name="dateOnly" id="rdateDateOnly" onclick="swapRdateAllDay(this)" value="true"/>
1307                 all day
1308                 <!-- floating event: no timezone (and not UTC) -->
1309                 <input type="checkbox" name="floating" id="rdateFloating" onclick="swapRdateFloatingTime(this)" value="true"/>
1310                 floating
1311                 <!-- store time as coordinated universal time (UTC) -->
1312                 <input type="checkbox" name="storeUTC" id="rdateStoreUTC" onclick="swapRdateStoreUTC(this)" value="true"/>
1313                 store as UTC<br/>
1314                 <div class="dateFields">
1315                   <input name="eventRdate.date"
1316                          dojoType="dropdowndatepicker"
1317                          formatLength="medium"
1318                          value="today"
1319                          saveFormat="yyyyMMdd"
1320                          id="bwEventWidgeRdate"
1321                          iconURL="{$resourcesRoot}/resources/calIcon.gif"/>
1322                 </div>
1323                 <div id="rdateTimeFields" class="timeFields">
1324                  <select name="eventRdate.hour">
1325                     <option value="00">00</option>
1326                     <option value="01">01</option>
1327                     <option value="02">02</option>
1328                     <option value="03">03</option>
1329                     <option value="04">04</option>
1330                     <option value="05">05</option>
1331                     <option value="06">06</option>
1332                     <option value="07">07</option>
1333                     <option value="08">08</option>
1334                     <option value="09">09</option>
1335                     <option value="10">10</option>
1336                     <option value="11">11</option>
1337                     <option value="12" selected="selected">12</option>
1338                     <option value="13">13</option>
1339                     <option value="14">14</option>
1340                     <option value="15">15</option>
1341                     <option value="16">16</option>
1342                     <option value="17">17</option>
1343                     <option value="18">18</option>
1344                     <option value="19">19</option>
1345                     <option value="20">20</option>
1346                     <option value="21">21</option>
1347                     <option value="22">22</option>
1348                     <option value="23">23</option>
1349                   </select>
1350                   <select name="eventRdate.minute">
1351                     <option value="00" selected="selected">00</option>
1352                     <option value="05">05</option>
1353                     <option value="10">10</option>
1354                     <option value="15">15</option>
1355                     <option value="20">20</option>
1356                     <option value="25">25</option>
1357                     <option value="30">30</option>
1358                     <option value="35">35</option>
1359                     <option value="40">40</option>
1360                     <option value="45">45</option>
1361                     <option value="50">50</option>
1362                     <option value="55">55</option>
1363                   </select>
1364                  <xsl:text> </xsl:text>
1365
1366                   <select name="tzid" id="rdateTzid" class="timezones">
1367                     <xsl:if test="form/floating/input/@checked='checked'"><xsl:attribute name="disabled">disabled</xsl:attribute></xsl:if>
1368                     <option value="">select timezone...</option>
1369                     <xsl:variable name="rdateTzId" select="/bedework/now/defaultTzid"/>
1370                     <xsl:for-each select="/bedework/timezones/timezone">
1371                       <option>
1372                         <xsl:attribute name="value"><xsl:value-of select="id"/></xsl:attribute>
1373                         <xsl:if test="$rdateTzId = id"><xsl:attribute name="selected">selected</xsl:attribute></xsl:if>
1374                         <xsl:value-of select="name"/>
1375                       </option>
1376                     </xsl:for-each>
1377                   </select>
1378                 </div>
1379                 <xsl:text> </xsl:text>
1380                 <!--bwRdates.update() accepts: date, time, allDay, floating, utc, tzid-->
1381                 <input type="button" name="rdate" value="add recurrence" onclick="bwRdates.update(this.form['eventRdate.date'].value,this.form['eventRdate.hour'].value + this.form['eventRdate.minute'].value,false,false,false,this.form.tzid.value)"/>
1382                 <input type="button" name="exdate" value="add exception" onclick="bwExdates.update(this.form['eventRdate.date'].value,this.form['eventRdate.hour'].value + this.form['eventRdate.minute'].value,false,false,false,this.form.tzid.value)"/>
1383
1384                 <input type="hidden" name="rdates" value="" id="bwRdatesField" />
1385                 <!-- if there are no recurrence dates, the following table will show -->
1386                 <table cellspacing="0" class="invisible" id="bwCurrentRdatesNone">
1387                   <tr><th>Recurrence Dates</th></tr>
1388                   <tr><td>No recurrence dates</td></tr>
1389                 </table>
1390
1391                 <!-- if there are recurrence dates, the following table will show -->
1392                 <table cellspacing="0" class="invisible" id="bwCurrentRdates">
1393                   <tr>
1394                     <th colspan="4">Recurrence Dates</th>
1395                   </tr>
1396                   <tr class="colNames">
1397                     <td>Date</td>
1398                     <td>Time</td>
1399                     <td>TZid</td>
1400                     <td></td>
1401                   </tr>
1402                 </table>
1403
1404                 <input type="hidden" name="exdates" value="" id="bwExdatesField" />
1405                 <!-- if there are no exception dates, the following table will show -->
1406                 <table cellspacing="0" class="invisible" id="bwCurrentExdatesNone">
1407                   <tr><th>Exception Dates</th></tr>
1408                   <tr><td>No exception dates</td></tr>
1409                 </table>
1410
1411                 <!-- if there are exception dates, the following table will show -->
1412                 <table cellspacing="0" class="invisible" id="bwCurrentExdates">
1413                   <tr>
1414                     <th colspan="4">Exception Dates</th>
1415                   </tr>
1416                   <tr class="colNames">
1417                     <td>Date</td>
1418                     <td>Time</td>
1419                     <td>TZid</td>
1420                     <td></td>
1421                   </tr>
1422                 </table>
1423                 <p>
1424                   Exception dates may also be created by deleting an instance
1425                   of a recurring event.
1426                 </p>
1427               </div>
1428             </div>
1429           </div>
1430         </xsl:otherwise>
1431       </xsl:choose>
1432     </div>
1433
1434     <div class="eventSubmitButtons">
1435       <xsl:choose>
1436         <xsl:when test="form/scheduleMethod = '2'">
1437           <input name="submit" type="submit" value="save"/>
1438           <input name="submitAndSend" type="submit" value="save &amp; send invitations"/>
1439         </xsl:when>
1440         <xsl:otherwise>
1441           <input name="submit" type="submit" value="save"/>
1442         </xsl:otherwise>
1443       </xsl:choose>
1444       <input name="cancelled" type="submit" value="cancel"/>
1445     </div>
1446   </xsl:template>
1447
1448   <xsl:template match="val" mode="weekMonthYearNumbers">
1449     <xsl:if test="position() != 1 and position() = last()"> and </xsl:if>
1450     <xsl:value-of select="."/><xsl:choose>
1451       <xsl:when test="substring(., string-length(.)-1, 2) = '11' or
1452                       substring(., string-length(.)-1, 2) = '12' or
1453                       substring(., string-length(.)-1, 2) = '13'">th</xsl:when>
1454       <xsl:when test="substring(., string-length(.), 1) = '1'">st</xsl:when>
1455       <xsl:when test="substring(., string-length(.), 1) = '2'">nd</xsl:when>
1456       <xsl:when test="substring(., string-length(.), 1) = '3'">rd</xsl:when>
1457       <xsl:otherwise>th</xsl:otherwise>
1458     </xsl:choose>
1459     <xsl:if test="position() != last()">, </xsl:if>
1460   </xsl:template>
1461
1462   <xsl:template name="byDayChkBoxList">
1463     <xsl:param name="name"/>
1464     <xsl:for-each select="/bedework/shortdaynames/val">
1465       <xsl:variable name="pos" select="position()"/>
1466       <input type="checkbox">
1467         <xsl:attribute name="value"><xsl:value-of select="/bedework/recurdayvals/val[position() = $pos]"/></xsl:attribute>
1468         <xsl:attribute name="name"><xsl:value-of select="$name"/></xsl:attribute>
1469       </input>
1470       <xsl:value-of select="."/>
1471     </xsl:for-each>
1472   </xsl:template>
1473
1474   <xsl:template name="buildCheckboxList">
1475     <xsl:param name="current"/>
1476     <xsl:param name="end"/>
1477     <xsl:param name="name"/>
1478     <xsl:param name="splitter">10</xsl:param>
1479     <span class="chkBoxListItem">
1480       <input type="checkbox">
1481         <xsl:attribute name="name"><xsl:value-of select="$name"/></xsl:attribute>
1482         <xsl:attribute name="value"><xsl:value-of select="$current"/></xsl:attribute>
1483       </input>
1484       <xsl:value-of select="$current"/>
1485     </span>
1486     <xsl:if test="$current mod $splitter = 0"><br/></xsl:if>
1487     <xsl:if test="$current = $end"><br/></xsl:if>
1488     <xsl:if test="$current &lt; $end">
1489       <xsl:call-template name="buildCheckboxList">
1490         <xsl:with-param name="current"><xsl:value-of select="$current + 1"/></xsl:with-param>
1491         <xsl:with-param name="end"><xsl:value-of select="$end"/></xsl:with-param>
1492         <xsl:with-param name="name"><xsl:value-of select="$name"/></xsl:with-param>
1493       </xsl:call-template>
1494     </xsl:if>
1495   </xsl:template>
1496
1497   <xsl:template name="recurrenceDayPosOptions">
1498     <option value="0">none</option>
1499     <option value="1">the first</option>
1500     <option value="2">the second</option>
1501     <option value="3">the third</option>
1502     <option value="4">the fourth</option>
1503     <option value="5">the fifth</option>
1504     <option value="-1">the last</option>
1505     <option value="">every</option>
1506   </xsl:template>
1507
1508   <xsl:template name="buildRecurFields">
1509     <xsl:param name="current"/>
1510     <xsl:param name="total"/>
1511     <xsl:param name="name"/>
1512     <div class="invisible">
1513       <xsl:attribute name="id"><xsl:value-of select="$name"/>RecurFields<xsl:value-of select="$current"/></xsl:attribute>
1514       and
1515       <select width="12em">
1516         <xsl:attribute name="name">by<xsl:value-of select="$name"/>posPos<xsl:value-of select="$current"/></xsl:attribute>
1517         <xsl:if test="$current != $total">
1518           <xsl:attribute name="onchange">changeClass('<xsl:value-of select="$name"/>RecurFields<xsl:value-of select="$current+1"/>','shown')</xsl:attribute>
1519         </xsl:if>
1520         <xsl:call-template name="recurrenceDayPosOptions"/>
1521       </select>
1522       <xsl:call-template name="byDayChkBoxList"/>
1523     </div>
1524     <xsl:if test="$current &lt; $total">
1525       <xsl:call-template name="buildRecurFields">
1526         <xsl:with-param name="current"><xsl:value-of select="$current+1"/></xsl:with-param>
1527         <xsl:with-param name="total"><xsl:value-of select="$total"/></xsl:with-param>
1528         <xsl:with-param name="name"><xsl:value-of select="$name"/></xsl:with-param>
1529       </xsl:call-template>
1530     </xsl:if>
1531   </xsl:template>
1532
1533   <xsl:template name="buildNumberOptions">
1534     <xsl:param name="current"/>
1535     <xsl:param name="total"/>
1536     <option value="{$current}"><xsl:value-of select="$current"/></option>
1537     <xsl:if test="$current &lt; $total">
1538       <xsl:call-template name="buildNumberOptions">
1539         <xsl:with-param name="current"><xsl:value-of select="$current+1"/></xsl:with-param>
1540         <xsl:with-param name="total"><xsl:value-of select="$total"/></xsl:with-param>
1541       </xsl:call-template>
1542     </xsl:if>
1543   </xsl:template>
1544
1545   <xsl:template name="clock">
1546     <div id="bwClock">
1547       <!-- Bedework 24-Hour Clock time selection widget
1548            used with resources/bwClock.js and resources/bwClock.css -->
1549       <xsl:variable name="hour24" select="/bedework/hour24"/><!-- true or false -->
1550       <div id="bwClockClock">
1551         <img id="clockMap" src="{$resourcesRoot}/resources/clockMap.gif" width="368" height="368" border="0" alt="bwClock" usemap="#bwClockMap" />
1552       </div>
1553       <div id="bwClockCover">
1554         &#160;
1555         <!-- this is a special effect div used simply to cover the pixelated edge
1556              where the clock meets the clock box title -->
1557       </div>
1558       <div id="bwClockBox">
1559         <h2>
1560           Bedework 24-Hour Clock
1561         </h2>
1562         <div id="bwClockDateTypeIndicator">
1563           type
1564         </div>
1565         <div id="bwClockTime">
1566           select time
1567         </div>
1568         <div id="bwClockSwitch">
1569           switch
1570         </div>
1571         <div id="bwClockCloseText">
1572           close
1573         </div>
1574         <div id="bwClockCloseButton">
1575           <a href="javascript:bwClockClose();">X</a>
1576         </div>
1577       </div>
1578       <map name="bwClockMap" id="bwClockMap">
1579         <area shape="rect" alt="close clock" title="close clock" coords="160,167, 200,200" href="javascript:bwClockClose()"/>
1580         <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')" />
1581         <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')" />
1582         <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')" />
1583         <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')" />
1584         <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')" />
1585         <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')" />
1586         <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')" />
1587         <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')" />
1588         <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')" />
1589         <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')" />
1590         <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')" />
1591         <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')" />
1592         <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',{$hour24})" />
1593         <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',{$hour24})" />
1594         <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',{$hour24})" />
1595         <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',{$hour24})" />
1596         <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',{$hour24})" />
1597         <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',{$hour24})" />
1598         <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',{$hour24})" />
1599         <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',{$hour24})" />
1600         <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',{$hour24})" />
1601         <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',{$hour24})" />
1602         <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',{$hour24})" />
1603         <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',{$hour24})" />
1604         <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',{$hour24})" />
1605         <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',{$hour24})" />
1606         <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',{$hour24})" />
1607         <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',{$hour24})" />
1608         <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',{$hour24})" />
1609         <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',{$hour24})" />
1610         <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',{$hour24})" />
1611         <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',{$hour24})" />
1612         <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',{$hour24})" />
1613         <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',{$hour24})" />
1614         <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',{$hour24})" />
1615         <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',{$hour24})" />
1616       </map>
1617     </div>
1618   </xsl:template>
1619
1620   <!--==== UPLOAD ====-->
1621   <xsl:template name="upload">
1622   <!-- The name "eventForm" is referenced by several javascript functions. Do not
1623     change it without modifying bedework.js -->
1624     <form name="eventForm" method="post" action="{$upload}" id="standardForm"  enctype="multipart/form-data">
1625       <h2>Upload iCAL File</h2>
1626       <table class="common" cellspacing="0">
1627         <tr>
1628           <td class="fieldname">
1629             Filename:
1630           </td>
1631           <td align="left">
1632             <input type="file" name="uploadFile" size="60" />
1633           </td>
1634         </tr>
1635         <tr>
1636           <td class="fieldname padMeTop">
1637             Into calendar:
1638           </td>
1639           <td align="left" class="padMeTop">
1640             <input type="hidden" name="newCalPath" id="bwNewCalPathField" value=""/>
1641             <span id="bwEventCalDisplay">
1642               <em>default calendar</em>
1643             </span>
1644           </td>
1645         </tr>
1646         <tr>
1647           <td class="fieldname padMeTop">
1648             Effects free/busy:
1649           </td>
1650           <td align="left" class="padMeTop">
1651             <input type="radio" value="" name="transparency" checked="checked"/> accept event's settings<br/>
1652             <input type="radio" value="OPAQUE" name="transparency"/> yes <span class="note">(opaque: event status affects your free/busy)</span><br/>
1653             <input type="radio" value="TRANSPARENT" name="transparency"/> no <span class="note">(transparent: event status does not affect your free/busy)</span><br/>
1654           </td>
1655         </tr>
1656         <tr>
1657           <td class="fieldname padMeTop">
1658             Status:
1659           </td>
1660           <td align="left" class="padMeTop">
1661             <input type="radio" value="" name="status" checked="checked"/> accept event's status<br/>
1662             <input type="radio" value="CONFIRMED" name="status"/> confirmed<br/>
1663             <input type="radio" value="TENTATIVE" name="status"/> tentative<br/>
1664             <input type="radio" value="CANCELLED" name="status"/> cancelled<br/>
1665           </td>
1666         </tr>
1667       </table>
1668       <table border="0" id="submitTable">
1669         <tr>
1670           <td>
1671             <input name="submit" type="submit" value="Continue"/>
1672             <input name="cancelled" type="submit" value="cancel"/>
1673           </td>
1674         </tr>
1675       </table>
1676     </form>
1677   </xsl:template>
1678
1679   <!--==== UTILITY TEMPLATES ====-->
1680
1681   <!-- time formatter (should be extended as needed) -->
1682   <xsl:template name="timeFormatter">
1683     <xsl:param name="timeString"/><!-- required -->
1684     <xsl:param name="showMinutes">yes</xsl:param>
1685     <xsl:param name="showAmPm">yes</xsl:param>
1686     <xsl:param name="hour24">no</xsl:param>
1687     <xsl:variable name="hour" select="number(substring($timeString,1,2))"/>
1688     <xsl:variable name="minutes" select="substring($timeString,3,2)"/>
1689     <xsl:variable name="AmPm">
1690       <xsl:choose>
1691         <xsl:when test="$hour &lt; 12">AM</xsl:when>
1692         <xsl:otherwise>PM</xsl:otherwise>
1693       </xsl:choose>
1694     </xsl:variable>
1695     <xsl:choose>
1696       <xsl:when test="hour24 = 'yes'">
1697         <xsl:value-of select="$hour"/><!--
1698      --><xsl:if test="$showMinutes = 'yes'">:<xsl:value-of select="$minutes"/></xsl:if>
1699       </xsl:when>
1700       <xsl:otherwise>
1701         <xsl:choose>
1702           <xsl:when test="$hour = 0">12</xsl:when>
1703           <xsl:when test="$hour &lt; 13"><xsl:value-of select="$hour"/></xsl:when>
1704           <xsl:otherwise><xsl:value-of select="$hour - 12"/></xsl:otherwise>
1705         </xsl:choose><!--
1706      --><xsl:if test="$showMinutes = 'yes'">:<xsl:value-of select="$minutes"/></xsl:if>
1707         <xsl:if test="$showAmPm = 'yes'">
1708           <xsl:text> </xsl:text>
1709           <xsl:value-of select="$AmPm"/>
1710         </xsl:if>
1711       </xsl:otherwise>
1712     </xsl:choose>
1713   </xsl:template>
1714
1715   <!-- search and replace template taken from
1716        http://www.biglist.com/lists/xsl-list/archives/200211/msg00337.html -->
1717   <xsl:template name="replace">
1718     <xsl:param name="string" select="''"/>
1719     <xsl:param name="pattern" select="''"/>
1720     <xsl:param name="replacement" select="''"/>
1721     <xsl:choose>
1722       <xsl:when test="$pattern != '' and $string != '' and contains($string, $pattern)">
1723         <xsl:value-of select="substring-before($string, $pattern)"/>
1724         <xsl:copy-of select="$replacement"/>
1725         <xsl:call-template name="replace">
1726           <xsl:with-param name="string" select="substring-after($string, $pattern)"/>
1727           <xsl:with-param name="pattern" select="$pattern"/>
1728           <xsl:with-param name="replacement" select="$replacement"/>
1729         </xsl:call-template>
1730       </xsl:when>
1731       <xsl:otherwise>
1732         <xsl:value-of select="$string"/>
1733       </xsl:otherwise>
1734     </xsl:choose>
1735   </xsl:template>
1736
1737   <!--==== FOOTER ====-->
1738   <xsl:template name="footer">
1739     <div id="footer">
1740       Demonstration calendar; place footer information here.
1741     </div>
1742     <table id="skinSelectorTable" border="0" cellpadding="0" cellspacing="0">
1743       <tr>
1744         <td class="leftCell">
1745           <a href="http://www.bedework.org/">Bedework Website</a> |
1746           <a href="?noxslt=yes">show XML</a> |
1747           <a href="?refreshXslt=yes">refresh XSLT</a>
1748         </td>
1749         <td class="rightCell">
1750           <!--<form name="skinSelectForm" method="post" action="{$setup}">
1751             skin selector:
1752             <select name="skinNameSticky" onchange="submit()">
1753               <option>select a skin</option>
1754               <option value="default">Demo Calendar</option>
1755               <option value="rensselaer">Rensselaer</option>
1756               <option value="washington">Washington</option>
1757             </select>
1758           </form>-->
1759         </td>
1760       </tr>
1761     </table>
1762   </xsl:template>
1763 </xsl:stylesheet>
Note: See TracBrowser for help on using the browser.