--- ../git/horde/kronolith/js/goto.js	2011-10-06 09:28:20.000000000 +0200
+++ kronolith/js/goto.js	2011-11-14 17:26:55.000000000 +0100
@@ -37,6 +37,10 @@
         case 'week':
             url = this.weekurl;
             break;
+			
+        case 'workweek':
+            url = this.workweekurl;
+            break;
 
         case 'year':
             url = this.yearurl;
@@ -65,4 +69,5 @@
 document.observe('Horde_Calendar:select', KronolithGoto.calendarSelect.bindAsEventListener(KronolithGoto, 'day'));
 document.observe('Horde_Calendar:selectMonth', KronolithGoto.calendarSelect.bindAsEventListener(KronolithGoto, 'month'));
 document.observe('Horde_Calendar:selectWeek', KronolithGoto.calendarSelect.bindAsEventListener(KronolithGoto, 'week'));
+document.observe('Horde_Calendar:selectWorkweek', KronolithGoto.calendarSelect.bindAsEventListener(KronolithGoto, 'workweek'));
 document.observe('Horde_Calendar:selectYear', KronolithGoto.calendarSelect.bindAsEventListener(KronolithGoto, 'year'));
--- ../git/horde/kronolith/js/kronolith.js	2011-11-14 09:10:14.000000000 +0100
+++ kronolith/js/kronolith.js	2011-11-14 17:47:40.000000000 +0100
@@ -334,6 +334,7 @@
         switch (loc) {
         case 'day':
         case 'week':
+        case 'workweek':
         case 'month':
         case 'year':
         case 'agenda':
@@ -346,6 +347,7 @@
             case 'day':
             case 'agenda':
             case 'week':
+            case 'workweek':
             case 'month':
             case 'year':
                 var date = locParts.shift();
@@ -360,6 +362,7 @@
                     ((loc == 'year') ||
                      (loc == 'month' && date.getMonth() == this.date.getMonth()) ||
                      (loc == 'week' && date.getRealWeek() == this.date.getRealWeek()) ||
+                     (loc == 'workweek' && date.getRealWeek() == this.date.getRealWeek()) ||
                      ((loc == 'day'  || loc == 'agenda') && date.dateString() == this.date.dateString()))) {
                          this.addHistory(fullloc);
                          this.loadNextView();
@@ -376,7 +379,7 @@
                         duration: this.effectDur,
                         queue: 'end',
                         afterFinish: function() {
-                            if (loc == 'week' || loc == 'day') {
+                            if (loc == 'week' || loc == 'workweek' || loc == 'day') {
                                 this.calculateRowSizes(loc + 'Sizes', 'kronolithView' + locCap);
                                 if ($('kronolithTimeMarker')) {
                                     this.positionTimeMarker();
@@ -686,6 +689,7 @@
                 hourRow = hourRow.next('tr');
             }
             day = dates[0].clone();
+            
             for (i = 0; i < 7; i++) {
                 dateString = day.dateString();
                 this.allDays['kronolithAllDay' + dateString] = td.down('div');
@@ -710,6 +714,63 @@
             }
             break;
 
+        case 'workweek':
+            this.dayEvents = [];
+            this.dayGroups = [];
+            this.allDayEvents = [];
+            this.allDays = {};
+            this.eventsWeek = {};
+            var div = $('kronolithEventsWorkweek').down('div'),
+                th = $('kronolithViewWorkweekHead').down('.kronolithWeekDay'),
+                td = $('kronolithViewWorkweekHead').down('tbody td').next('td'),
+                hourRow = $('kronolithViewWorkweekBody').down('tr'),
+                dates = this.viewDates(date, view),
+                today = Date.today(),
+                day, dateString, i, hourCol;
+
+            $('kronolithViewWorkweek')
+                .down('caption span')
+                .update(this.setTitle(dates[0].toString('d') + ' - ' + dates[1].toString('d')));
+
+            for (i = 0; i < 24; i++) {
+                day = dates[0].clone();
+                hourCol = hourRow.down('td').next('td');
+                while (hourCol) {
+                    hourCol.removeClassName('kronolithToday');
+                    if (day.equals(today)) {
+                        hourCol.addClassName('kronolithToday');
+                    }
+                    hourCol = hourCol.next('td');
+                    day.next().day();
+                }
+                hourRow = hourRow.next('tr');
+            }
+            day = dates[0].clone();
+            
+            for (i = 0; i < 5; i++) {
+                dateString = day.dateString();
+                this.allDays['kronolithAllDay' + dateString] = td.down('div');
+                this.eventsWeek['kronolithEventsWorkweek' + dateString] = div;
+                div.store('date', dateString)
+                    .writeAttribute('id', 'kronolithEventsWorkweek' + dateString);
+                th.store('date', dateString)
+                    .down('span').update(day.toString('dddd, d'));
+                td.removeClassName('kronolithToday');
+                this.allDays['kronolithAllDay' + dateString]
+                    .writeAttribute('id', 'kronolithAllDay' + dateString)
+                    .store('date', dateString);
+                if (day.equals(today)) {
+                    td.addClassName('kronolithToday');
+                    this.addTimeMarker('kronolithEventsWorkweek' + dateString);
+                }
+                new Drop(td.down('div'));
+                div = div.next('div');
+                th = th.next('td');
+                td = td.next('td');
+                day.next().day();
+            }
+            break;
+
         case 'month':
             var tbody = $('kronolithViewMonthBody'),
                 dates = this.viewDates(date, view),
@@ -786,7 +847,7 @@
      */
     closeView: function(loc)
     {
-        $w('Day Week Month Year Tasks Agenda').each(function(a) {
+        $w('Day Workweek Week Month Year Tasks Agenda').each(function(a) {
             a = $('kronolithNav' + a);
             if (a) {
                 a.removeClassName('on');
@@ -999,6 +1060,18 @@
                 return;
             }
             break;
+        case 'workweek':
+            if ($('kronolithTimeMarker').up().retrieve('date') != today.dateString()) {
+                var newContainer = this.eventsWeek['kronolithEventsWorkweek' + today.dateString()];
+                $('kronolithTimeMarker').remove();
+                if (newContainer) {
+                    this.addTimeMarker(newContainer);
+                } else {
+                    this.timeMarker.stop();
+                }
+                return;
+            }
+            break;
         default:
             $('kronolithTimeMarker').remove();
             this.timeMarker.stop();
@@ -1077,6 +1150,7 @@
             if (view &&
                 ((view == 'month' && this.date.between(dates[0], dates[1])) ||
                  (view == 'week' && day.between(week[0], week[1])) ||
+                 (view == 'workweek' && day.between(week[0], week[1])) ||
                  (view == 'day' && day.equals(this.date)) ||
                  (view == 'agenda' && !day.isBefore(date) && day.isBefore(date7)))) {
                 td.addClassName('kronolithSelected');
@@ -1229,7 +1303,7 @@
     loadCalendar: function(type, calendar)
     {
         if (Kronolith.conf.calendars[type][calendar].show &&
-            $w('day week month year agenda').include(this.view)) {
+            $w('day workweek week month year agenda').include(this.view)) {
             var dates = this.viewDates(this.date, this.view);
             this.deleteCache([type, calendar]);
             this.loadEvents(dates[0], dates[1], this.view, [[type, calendar]]);
@@ -1305,6 +1379,7 @@
 
         case 'year':
         case 'week':
+        case 'workweek':
         case 'day':
             if (Object.isUndefined(this.ecache.get(type)) ||
                 Object.isUndefined(this.ecache.get(type).get(calendar))) {
@@ -1507,6 +1582,7 @@
 
         if (this.view == 'day' ||
             this.view == 'week' ||
+            this.view == 'workweek' ||
             this.view == 'month' ||
             this.view == 'agenda' ||
             (this.view == 'year' && !$H(this.eventsLoading).size())) {
@@ -1533,6 +1609,7 @@
         switch (view) {
         case 'day':
         case 'week':
+        case 'workweek':
             // The day and week views require the view to be completely
             // loaded, to correctly calculate the dimensions.
             if (this.viewLoading.size() || this.view != view) {
@@ -1558,20 +1635,34 @@
             date = day.dateString();
             switch (view) {
             case 'day':
+                this.dayEvents = [];
+                this.dayGroups = [];
+                this.allDayEvents = [];
+                $$('.kronolithEvent').invoke('remove');
+                break;
+                
             case 'week':
                 this.dayEvents = [];
                 this.dayGroups = [];
                 this.allDayEvents = [];
-                if (view == 'day') {
-                    $$('.kronolithEvent').invoke('remove');
-                } else {
-                    this.eventsWeek['kronolithEventsWeek' + date]
-                        .select('.kronolithEvent')
-                        .invoke('remove');
-                    this.allDays['kronolithAllDay' + date]
-                        .childElements()
-                        .invoke('remove');
-                }
+                this.eventsWeek['kronolithEventsWeek' + date]
+                    .select('.kronolithEvent')
+                    .invoke('remove');
+                this.allDays['kronolithAllDay' + date]
+                    .childElements()
+                    .invoke('remove');
+                break;
+                
+            case 'workweek':
+                this.dayEvents = [];
+                this.dayGroups = [];
+                this.allDayEvents = [];
+                this.eventsWeek['kronolithEventsWorkweek' + date]
+                    .select('.kronolithEvent')
+                    .invoke('remove');
+                this.allDays['kronolithAllDay' + date]
+                    .childElements()
+                    .invoke('remove');
                 break;
 
             case 'month':
@@ -1793,6 +1884,7 @@
         switch (view) {
         case 'day':
         case 'week':
+        case 'workweek':
             var storage = view + 'Sizes',
                 div = _createElement(event),
                 margin = view == 'day' ? 1 : 3,
@@ -1804,6 +1896,38 @@
             if (event.value.al) {
                 if (view == 'day') {
                     $('kronolithViewDay').down('.kronolithAllDayContainer').insert(div.setStyle(style));
+                } else if (view == 'workweek') {
+                    var allDay = this.allDays['kronolithAllDay' + date],
+                        existing = allDay.childElements(),
+                        weekHead = $('kronolithViewWorkweekHead');
+                    if (existing.size() == 3) {
+                        if (existing[2].className != 'kronolithMore') {
+                            existing[2].purge();
+                            existing[2].remove();
+                            allDay.insert({ bottom: new Element('span', { className: 'kronolithMore' }).store('date', date).insert(Kronolith.text.more) });
+                        }
+                    } else {
+                        allDay.insert(div.setStyle(style));
+                        if (event.value.pe) {
+                            div.addClassName('kronolithEditable');
+                            var layout = div.getLayout(),
+                                minLeft = weekHead.down('.kronolithFirstCol').getWidth() + this[storage].spacing + (parseInt(div.getStyle('marginLeft'), 10) || 0),
+                                minTop = weekHead.down('thead').getHeight() + this[storage].spacing + (parseInt(div.getStyle('marginTop'), 10) || 0),
+                                maxLeft = weekHead.getWidth() - layout.get('margin-box-width'),
+                                maxTop = weekHead.down('thead').getHeight() + weekHead.down('.kronolithAllDay').getHeight(),
+                                opts = {
+                                    threshold: 5,
+                                    parentElement: function() {
+                                        return $('kronolithViewWorkweek').down('.kronolithViewHead');
+                                    },
+                                    snap: function(x, y) {
+                                        return [Math.min(Math.max(x, minLeft), maxLeft),
+                                                Math.min(Math.max(y, minTop), maxTop - div.getHeight())];
+                                    }
+                                };
+                            new Drag(event.value.nodeId, opts);
+                        }
+                    }
                 } else {
                     var allDay = this.allDays['kronolithAllDay' + date],
                         existing = allDay.childElements(),
@@ -1843,7 +1967,7 @@
             var midnight = this.parseDate(date),
                 resizable = event.value.pe && (Object.isUndefined(event.value.vl) || event.value.vl),
                 innerDiv = new Element('div', { className: 'kronolithEventInfo' }),
-                parentElement = view == 'day' ? $('kronolithEventsDay') : this.eventsWeek['kronolithEventsWeek' + date],
+                parentElement = view == 'day' ? $('kronolithEventsDay') : view == 'workweek' ? this.eventsWeek['kronolithEventsWorkweek' + date] : this.eventsWeek['kronolithEventsWeek' + date],
                 minHeight = 0,
                 draggerTop, draggerBottom;
             if (event.value.fi) {
@@ -1971,12 +2095,18 @@
                     maxLeft = this.eventsWeek['kronolithEventsWeek' + dates[1].dateString()].offsetLeft - this.eventsWeek['kronolithEventsWeek' + date].offsetLeft;
                     stepX = (maxLeft - minLeft) / 6;
                 }
+                if (view == 'workweek') {
+                    var dates = this.viewDates(midnight, view);
+                    minLeft = this.eventsWeek['kronolithEventsWorkweek' + dates[0].dateString()].offsetLeft - this.eventsWeek['kronolithEventsWorkweek' + date].offsetLeft;
+                    maxLeft = this.eventsWeek['kronolithEventsWorkweek' + dates[1].dateString()].offsetLeft - this.eventsWeek['kronolithEventsWorkweek' + date].offsetLeft;
+                    stepX = (maxLeft - minLeft) / 4;
+                }
                 var d = new Drag(div, {
                     threshold: 5,
                     nodrop: true,
                     parentElement: function() { return parentElement; },
                     snap: function(x, y) {
-                        x = (view == 'week')
+                        x = ((view == 'week') || (view == 'workweek'))
                             ? Math.max(minLeft, stepX * ((Math.min(maxLeft, x - (x < 0 ? stepX : 0)) + stepX / 2) / stepX | 0))
                             : 0;
                         y = Math.max(0, step * (Math.min(maxDiv, y - this.scrollTop) / step | 0));
@@ -2124,6 +2254,7 @@
     {
         switch (this.view) {
         case 'week':
+        case 'workweek':
         case 'day':
             dates.each(function(date) {
                 date = this.parseDate(date);
@@ -3653,6 +3784,11 @@
             start.moveToBeginOfWeek(Kronolith.conf.week_start);
             end.moveToEndOfWeek(Kronolith.conf.week_start);
             break;
+        case 'workweek':
+            start.moveToBeginOfWeek(Kronolith.conf.week_start);
+            end.moveToEndOfWeek(Kronolith.conf.week_start);
+            end.add(-2).days();
+            break;
         case 'month':
             start.setDate(1);
             start.moveToBeginOfWeek(Kronolith.conf.week_start);
@@ -4221,6 +4357,7 @@
                                       if ((this.view == 'month' &&
                                            Kronolith.conf.max_events) ||
                                           this.view == 'week' ||
+                                          this.view == 'workweek' ||
                                           this.view == 'day') {
                                           days = this.findEventDays(cal, eventid);
                                       }
@@ -4330,6 +4467,7 @@
 
             case 'kronolithNavDay':
             case 'kronolithNavWeek':
+            case 'kronolithNavWorkweek':
             case 'kronolithNavMonth':
             case 'kronolithNavYear':
             case 'kronolithNavAgenda':
@@ -4494,7 +4632,7 @@
             case 'kronolithDateChoice':
             case 'kronolithGotoToday':
                 var view = this.view;
-                if (!$w('day week month year agenda').include(view)) {
+                if (!$w('day workweek week month year agenda').include(view)) {
                     view = Kronolith.conf.login_view;
                 }
                 this.go(view + ':' + new Date().dateString());
@@ -4511,6 +4649,7 @@
                     newDate.add(offset).day();
                     break;
                 case 'week':
+                case 'workweek':
                     newDate.add(offset).week();
                     break;
                 case 'month':
@@ -4856,6 +4995,7 @@
                                   if ((this.view == 'month' &&
                                        Kronolith.conf.max_events) ||
                                       this.view == 'week' ||
+                                      this.view == 'workweek' ||
                                       this.view == 'day') {
                                       days = this.findEventDays(cal, eventid);
                                   }
@@ -4897,10 +5037,14 @@
             elt.up().addClassName('kronolithSelected');
             DragDrop.Drags.getDrag(elt).top = elt.cumulativeOffset().top;
         } else if (elt.hasClassName('kronolithEditable')) {
-            elt.addClassName('kronolithSelected').setStyle({ left: 0, width: this.view == 'week' ? '90%' : '95%', zIndex: 1 });
+            elt.addClassName('kronolithSelected').setStyle({ left: 0, width: (this.view == 'week' || this.view == 'workweek') ? '90%' : '95%', zIndex: 1 });
         }
 
-        this.scrollTop = $(this.view == 'day' ? 'kronolithViewDay' : 'kronolithViewWeek').down('.kronolithViewBody').scrollTop;
+        switch (this.view) {
+            case 'day': this.scrollTop = $('kronolithViewDay').down('.kronolithViewBody').scrollTop; break;
+            case 'week': this.scrollTop = $('kronolithViewWeek').down('.kronolithViewBody').scrollTop; break;
+            case 'workweek': this.scrollTop = $('kronolithViewWorkweek').down('.kronolithViewBody').scrollTop; break;
+        }
         this.scrollLast = this.scrollTop;
     },
 
@@ -4918,11 +5062,11 @@
 
         if (elt.hasClassName('kronolithDragger')) {
             // Resizing the event.
-            var div = elt.up(),
-                top = drag.ghost.cumulativeOffset().top,
-                scrollTop = $(this.view == 'day' ? 'kronolithViewDay' : 'kronolithViewWeek').down('.kronolithViewBody').scrollTop,
-                offset = 0,
-                height;
+            switch (this.view) {
+                case 'day': var div = elt.up(), top = drag.ghost.cumulativeOffset().top, scrollTop = $('kronolithViewDay').down('.kronolithViewBody').scrollTop, offset = 0, height; break;
+                case 'week': var div = elt.up(), top = drag.ghost.cumulativeOffset().top, scrollTop = $('kronolithViewWeek').down('.kronolithViewBody').scrollTop, offset = 0, height; break;
+                case 'workweek': var div = elt.up(), top = drag.ghost.cumulativeOffset().top, scrollTop = $('kronolithViewWorkweek').down('.kronolithViewBody').scrollTop, offset = 0, height; break;
+            }
 
             // Check if view has scrolled since last call.
             if (scrollTop != this.scrollLast) {
@@ -4954,7 +5098,7 @@
             if (Object.isUndefined(drag.innerDiv)) {
                 drag.innerDiv = drag.ghost.down('.kronolithEventInfo');
             }
-            if (this.view == 'week') {
+            if ((this.view == 'week') || (this.view == 'workweek')) {
                 var offsetX = Math.round(drag.ghost.offsetLeft / drag.stepX);
                 event.offsetDays = offsetX;
                 this.calculateEventDates(event, storage, step, drag.ghost.offsetTop, drag.divHeight, event.start.clone().addDays(offsetX), event.end.clone().addDays(offsetX));
@@ -4964,7 +5108,7 @@
             }
             event.offsetTop = drag.ghost.offsetTop - drag.startTop;
             drag.innerDiv.update('(' + event.start.toString(Kronolith.conf.time_format) + ' - ' + event.end.toString(Kronolith.conf.time_format) + ') ' + event.t.escapeHTML());
-            elt.clonePosition(drag.ghost, { offsetLeft: this.view == 'week' ? -2 : 0 });
+            elt.clonePosition(drag.ghost, { offsetLeft: (this.view == 'week' || this.view == 'workweek') ? -2 : 0 });
         }
     },
 
--- ../git/horde/kronolith/templates/index/index.inc	2011-10-10 08:55:23.000000000 +0200
+++ kronolith/templates/index/index.inc	2011-11-14 17:26:55.000000000 +0100
@@ -48,13 +48,14 @@
   <div id="kronolithNav">
     <ul>
       <li><a id="kronolithNavDay" accesskey="1"><span><?php echo _("Day") ?></span></a></li>
-      <li><a id="kronolithNavWeek" accesskey="2"><span><?php echo _("Week") ?></span></a></li>
-      <li><a id="kronolithNavMonth" accesskey="3"><span><?php echo _("Month") ?></span></a></li>
-      <li><a id="kronolithNavYear" accesskey="4"><span><?php echo _("Year") ?></span></a></li>
+      <li><a id="kronolithNavWorkweek" accesskey="2"><span><?php echo _("Week") ?></span></a></li>
+      <li><a id="kronolithNavWeek" accesskey="3"><span><?php echo _("Week") ?></span></a></li>
+      <li><a id="kronolithNavMonth" accesskey="4"><span><?php echo _("Month") ?></span></a></li>
+      <li><a id="kronolithNavYear" accesskey="5"><span><?php echo _("Year") ?></span></a></li>
     <?php if (Kronolith::hasApiPermission('tasks')): ?>
-      <li><a id="kronolithNavTasks" accesskey="5"><span><?php echo _("Tasks") ?></span></a></li>
+      <li><a id="kronolithNavTasks" accesskey="6"><span><?php echo _("Tasks") ?></span></a></li>
     <?php endif; ?>
-      <li><a id="kronolithNavAgenda" accesskey="<?php echo Kronolith::hasApiPermission('tasks') ? 6 : 5 ?>"><span><?php echo _("Agenda") ?></span></a></li>
+      <li><a id="kronolithNavAgenda" accesskey="<?php echo Kronolith::hasApiPermission('tasks') ? 7 : 6 ?>"><span><?php echo _("Agenda") ?></span></a></li>
     </ul>
   </div>
 </div>
@@ -174,6 +175,7 @@
 <div id="kronolithLoading" style="display:none"></div>
 <?php
 require dirname(__FILE__) . '/month.inc';
+require dirname(__FILE__) . '/workweek.inc';
 require dirname(__FILE__) . '/week.inc';
 require dirname(__FILE__) . '/day.inc';
 require dirname(__FILE__) . '/year.inc';
--- ../git/horde/kronolith/templates/index/workweek.inc	1970-01-01 01:00:00.000000000 +0100
+++ kronolith/templates/index/workweek.inc	2011-09-22 10:31:36.000000000 +0200
@@ -0,0 +1,71 @@
+<div id="kronolithViewWorkweek" style="display:none">
+
+<table class="kronolithView kronolithViewDay">
+  <caption>
+    <span>&nbsp;</span>
+    <span class="kronolithNavigation">
+      <a class="kronolithPrev" title="<?php echo _("Previous") ?>">&lt;</a>
+      <a class="kronolithGotoToday"><?php echo Horde::highlightAccessKey(_("_Today"), $todayAccessKey) ?></a>
+      <a class="kronolithNext" title="<?php echo _("Next") ?>">&gt;</a>
+      <a class="kronolithPrint" onclick="print()" title="<?php echo _("Print") ?>"><span><?php echo _("Print") ?></span></a>
+    </span>
+  </caption>
+</table>
+
+<div class="kronolithViewHead">
+<table id="kronolithViewWorkweekHead" class="kronolithView kronolithViewDay">
+  <thead><tr>
+    <td class="kronolithFirstCol"><div id="kronolithLoadingworkweek" class="kronolithLoading"></div></td>
+    <td class="kronolithWeekDay"><span>&nbsp;</span></td>
+    <td class="kronolithWeekDay"><span>&nbsp;</span></td>
+    <td class="kronolithWeekDay"><span>&nbsp;</span></td>
+    <td class="kronolithWeekDay"><span>&nbsp;</span></td>
+    <td class="kronolithWeekDay"><span>&nbsp;</span></td>
+  </tr></thead>
+  <tbody>
+    <tr class="kronolithAllDay">
+      <td class="kronolithFirstCol"><span><?php echo _("All day") ?></span></td>
+      <td><div class="kronolithAllDayContainer">
+      </div></td>
+      <td><div class="kronolithAllDayContainer">
+      </div></td>
+      <td><div class="kronolithAllDayContainer">
+      </div></td>
+      <td><div class="kronolithAllDayContainer">
+      </div></td>
+      <td><div class="kronolithAllDayContainer">
+      </div></td>
+    </tr>
+  </tbody>
+</table>
+</div>
+
+<div class="kronolithViewBody">
+<div class="kronolithViewBodyContainer">
+
+<table class="kronolithView kronolithViewDay">
+  <tbody id="kronolithViewWorkweekBody">
+    <?php for ($i = 0; $i < 24; $i++): ?>
+    <tr<?php if ($i < 9 || $i > 19) echo ' class="kronolithNight"' ?>>
+      <td class="kronolithFirstCol"><span><?php echo $ampm ? ($i % 12 ? ($i % 12): 12) : $i ?>:00</span></td>
+      <td>&nbsp;</td>
+      <td>&nbsp;</td>
+      <td>&nbsp;</td>
+      <td>&nbsp;</td>
+      <td>&nbsp;</td>
+    </tr>
+    <?php endfor; ?>
+  </tbody>
+</table>
+<div id="kronolithEventsWorkweek">
+  <div class="kronolithEventsWorkweek"></div>
+  <div class="kronolithEventsWorkweek"></div>
+  <div class="kronolithEventsWorkweek"></div>
+  <div class="kronolithEventsWorkweek"></div>
+  <div class="kronolithEventsWorkweek"></div>
+</div>
+
+</div>
+</div>
+
+</div>
--- ../git/horde/kronolith/themes/default/screen.css	2011-11-14 09:10:14.000000000 +0100
+++ kronolith/themes/default/screen.css	2011-11-14 17:28:33.000000000 +0100
@@ -116,6 +116,13 @@
     padding: 3px;
     font-size: 90%;
 }
+.workweek-eventbox {
+    -moz-border-radius: 10px;
+    -webkit-border-radius: 10px;
+    border-radius: 10px;
+    padding: 3px;
+    font-size: 90%;
+}
 .day-eventbox {
     -moz-border-radius: 10px;
     -webkit-border-radius: 10px;
@@ -146,7 +153,7 @@
     text-decoration: none;
     background: #e9e9e9;
 }
-.week {
+.week, .workweek {
     float: left;
     font-size: 90%;
     padding-left: 2px;
@@ -384,7 +391,7 @@
 #kronolithLoadingday, #kronolithLoadingmonth {
     top: 22px;
 }
-#kronolithLoadingweek {
+#kronolithLoadingweek, #kronolithLoadingworkweek {
     top: 0;
 }
 #kronolithLoadingtasks, #kronolithLoadingagenda {
@@ -488,7 +495,7 @@
 #kronolithNavDay {
     background-image: url("graphics/dayview.png");
 }
-#kronolithNavWeek {
+#kronolithNavWeek, #kronolithNavWorkweek {
     background-image: url("graphics/weekview.png");
 }
 #kronolithNavMonth {
@@ -1181,7 +1188,7 @@
     bottom: 3px;
     left: 22px;
 }
-#kronolithEventsWeek {
+#kronolithEventsWeek, #kronolithEventsWorkweek {
     position: absolute;
     top: 1px;
     right: 0;
@@ -1194,7 +1201,13 @@
     height: 100%;
     width: 14.285714%;
 }
-.kronolithEventsWeek div.kronolithEvent {
+.kronolithEventsWorkweek {
+    position: relative;
+    float: left;
+    height: 100%;
+    width: 20%;
+}
+.kronolithEventsWeek div.kronolithEvent, .kronolithEventsWorkweek div.kronolithEvent {
     margin: 0 1px;
 }
 
@@ -1454,7 +1467,9 @@
     float: left;
     margin: 0 2px 2px 0;
 }
-#kronolithViewDay div.kronolithEvent, #kronolithViewWeek div.kronolithEvent {
+#kronolithViewDay div.kronolithEvent, 
+#kronolithViewWeek div.kronolithEvent, 
+#kronolithViewWorkweek div.kronolithEvent {
     position: absolute;
     opacity: .8;
     filter: alpha(opacity=80);
@@ -1464,7 +1479,8 @@
 }
 #kronolithViewMonth div.kronolithEvent,
 #kronolithViewDay .kronolithViewHead div.kronolithEvent,
-#kronolithViewWeek .kronolithViewHead div.kronolithEvent {
+#kronolithViewWeek .kronolithViewHead div.kronolithEvent, 
+#kronolithViewWorkweek .kronolithViewHead div.kronolithEvent {
     position: relative;
     width: auto;
     line-height: 15px;
@@ -1479,13 +1495,15 @@
     font-size: 90%;
 }
 #kronolithViewDay .kronolithViewHead div.kronolithEvent,
-#kronolithViewWeek .kronolithViewHead div.kronolithEvent {
+#kronolithViewWeek .kronolithViewHead div.kronolithEvent, 
+#kronolithViewWorkweek .kronolithViewHead div.kronolithEvent {
     white-space: nowrap;
 }
 #kronolithViewDay .kronolithViewHead div.kronolithEvent {
     float: left;
 }
-#kronolithViewWeek .kronolithViewHead div.kronolithEvent {
+#kronolithViewWeek .kronolithViewHead div.kronolithEvent, 
+#kronolithViewWorkweek .kronolithViewHead div.kronolithEvent {
     margin-right: 10%;
 }
 div.kronolithEvent .kronolithDragger {