11 commits - plugins/calendar plugins/kolab_addressbook plugins/kolab_zpush plugins/libkolab plugins/owncloud plugins/tasklist

Thomas Brüderli bruederli at kolabsys.com
Mon Jul 30 14:38:29 CEST 2012


 dev/null                                                        |binary
 plugins/calendar/calendar.php                                   |    8 
 plugins/calendar/calendar_base.js                               |    2 
 plugins/calendar/calendar_ui.js                                 |   14 
 plugins/calendar/lib/calendar_ui.php                            |   12 
 plugins/calendar/package.xml                                    |   80 
 plugins/calendar/skins/.htaccess                                |    2 
 plugins/calendar/skins/classic/README                           |    5 
 plugins/calendar/skins/classic/calendar.css                     | 1268 ++++++++++
 plugins/calendar/skins/classic/fullcalendar.css                 |  724 +++++
 plugins/calendar/skins/classic/iehacks.css                      |   88 
 plugins/calendar/skins/classic/images/attendee-status.gif       |binary
 plugins/calendar/skins/classic/images/badge_confidential.gif    |binary
 plugins/calendar/skins/classic/images/badge_confidential.png    |binary
 plugins/calendar/skins/classic/images/badge_private.gif         |binary
 plugins/calendar/skins/classic/images/badge_private.png         |binary
 plugins/calendar/skins/classic/images/calendar-blue.png         |binary
 plugins/calendar/skins/classic/images/calendar.gif              |binary
 plugins/calendar/skins/classic/images/calendar.png              |binary
 plugins/calendar/skins/classic/images/calendars.gif             |binary
 plugins/calendar/skins/classic/images/calendars.png             |binary
 plugins/calendar/skins/classic/images/eventicons.gif            |binary
 plugins/calendar/skins/classic/images/export.png                |binary
 plugins/calendar/skins/classic/images/freebusy-colors.gif       |binary
 plugins/calendar/skins/classic/images/freebusy-colors.png       |binary
 plugins/calendar/skins/classic/images/invitation.png            |binary
 plugins/calendar/skins/classic/images/listheader.gif            |binary
 plugins/calendar/skins/classic/images/loading_blue.gif          |binary
 plugins/calendar/skins/classic/images/minicolors-all.png        |binary
 plugins/calendar/skins/classic/images/minicolors-handles.gif    |binary
 plugins/calendar/skins/classic/images/preview.png               |binary
 plugins/calendar/skins/classic/images/print.png                 |binary
 plugins/calendar/skins/classic/images/spacer.gif                |binary
 plugins/calendar/skins/classic/images/toggle.gif                |binary
 plugins/calendar/skins/classic/images/toolbar.gif               |binary
 plugins/calendar/skins/classic/images/toolbar.png               |binary
 plugins/calendar/skins/classic/jquery.miniColors.css            |  106 
 plugins/calendar/skins/classic/print.css                        |  208 +
 plugins/calendar/skins/classic/print.iehacks.css                |   25 
 plugins/calendar/skins/classic/templates/attachment.html        |   26 
 plugins/calendar/skins/classic/templates/calendar.html          |  201 +
 plugins/calendar/skins/classic/templates/eventedit.html         |  103 
 plugins/calendar/skins/classic/templates/freebusylegend.html    |    7 
 plugins/calendar/skins/classic/templates/itipattend.html        |   21 
 plugins/calendar/skins/classic/templates/kolabacl.html          |   13 
 plugins/calendar/skins/classic/templates/kolabform.html         |    7 
 plugins/calendar/skins/classic/templates/print.html             |   28 
 plugins/calendar/skins/default/README                           |    5 
 plugins/calendar/skins/default/calendar.css                     | 1268 ----------
 plugins/calendar/skins/default/fullcalendar.css                 |  724 -----
 plugins/calendar/skins/default/iehacks.css                      |   88 
 plugins/calendar/skins/default/jquery.miniColors.css            |  106 
 plugins/calendar/skins/default/print.css                        |  208 -
 plugins/calendar/skins/default/print.iehacks.css                |   25 
 plugins/calendar/skins/default/templates/attachment.html        |   26 
 plugins/calendar/skins/default/templates/calendar.html          |  201 -
 plugins/calendar/skins/default/templates/eventedit.html         |  103 
 plugins/calendar/skins/default/templates/freebusylegend.html    |    7 
 plugins/calendar/skins/default/templates/itipattend.html        |   21 
 plugins/calendar/skins/default/templates/kolabacl.html          |   13 
 plugins/calendar/skins/default/templates/kolabform.html         |    7 
 plugins/calendar/skins/default/templates/print.html             |   28 
 plugins/kolab_addressbook/package.xml                           |    8 
 plugins/kolab_addressbook/skins/classic/kolab_addressbook.css   |   35 
 plugins/kolab_addressbook/skins/classic/kolab_folders.gif       |binary
 plugins/kolab_addressbook/skins/classic/kolab_folders.png       |binary
 plugins/kolab_addressbook/skins/classic/templates/bookedit.html |   27 
 plugins/kolab_addressbook/skins/default/kolab_addressbook.css   |   35 
 plugins/kolab_addressbook/skins/default/templates/bookedit.html |   27 
 plugins/kolab_zpush/package.xml                                 |   14 
 plugins/kolab_zpush/skins/classic/alarm-clock.png               |binary
 plugins/kolab_zpush/skins/classic/config.css                    |  119 
 plugins/kolab_zpush/skins/classic/deviceactions.png             |binary
 plugins/kolab_zpush/skins/classic/foldertypes.png               |binary
 plugins/kolab_zpush/skins/classic/pointer-left.gif              |binary
 plugins/kolab_zpush/skins/classic/synchronize.png               |binary
 plugins/kolab_zpush/skins/classic/templates/config.html         |   63 
 plugins/kolab_zpush/skins/default/config.css                    |  119 
 plugins/kolab_zpush/skins/default/templates/config.html         |   63 
 plugins/libkolab/lib/kolab_format_task.php                      |    2 
 plugins/owncloud/owncloud.php                                   |    7 
 plugins/owncloud/skins/classic/cloud.png                        |binary
 plugins/owncloud/skins/classic/owncloud.css                     |   12 
 plugins/owncloud/skins/classic/templates/owncloud.html          |   19 
 plugins/owncloud/skins/default/owncloud.css                     |   12 
 plugins/owncloud/skins/default/templates/owncloud.html          |   19 
 plugins/tasklist/drivers/database/SQL/mysql.sql                 |    2 
 plugins/tasklist/drivers/database/tasklist_database_driver.php  |    4 
 plugins/tasklist/drivers/kolab/tasklist_kolab_driver.php        |   14 
 plugins/tasklist/drivers/tasklist_driver.php                    |    4 
 plugins/tasklist/localization/de_CH.inc                         |    7 
 plugins/tasklist/localization/en_US.inc                         |    7 
 plugins/tasklist/skins/larry/buttons.png                        |binary
 plugins/tasklist/skins/larry/tasklist.css                       |    5 
 plugins/tasklist/skins/larry/templates/mainview.html            |   39 
 plugins/tasklist/skins/larry/templates/taskedit.html            |   39 
 plugins/tasklist/tasklist.js                                    |  135 -
 plugins/tasklist/tasklist.php                                   |  154 +
 plugins/tasklist/tasklist_base.js                               |   94 
 plugins/tasklist/tasklist_ui.php                                |   25 
 100 files changed, 3609 insertions(+), 3279 deletions(-)

New commits:
commit babdbbc2142475c494ab50c78a32cbee2acb4879
Author: Thomas Bruederli <thomas at roundcube.net>
Date:   Sun Jul 29 17:37:25 2012 +0200

    Icon + better text for email message menu entry

diff --git a/plugins/tasklist/localization/de_CH.inc b/plugins/tasklist/localization/de_CH.inc
index a0b7a8e..a702a70 100644
--- a/plugins/tasklist/localization/de_CH.inc
+++ b/plugins/tasklist/localization/de_CH.inc
@@ -8,6 +8,7 @@ $labels['tags'] = 'Tags';
 
 $labels['newtask'] = 'Neue Aufgabe';
 $labels['createnewtask'] = 'Neue Aufgabe eingeben (z.B. Samstag, Rasenmähen)';
+$labels['createfrommail'] = 'Als Aufgabe speichern';
 $labels['mark'] = 'Markieren';
 $labels['unmark'] = 'Markierung aufheben';
 $labels['edit'] = 'Bearbeiten';
diff --git a/plugins/tasklist/localization/en_US.inc b/plugins/tasklist/localization/en_US.inc
index 8ade264..ccf9358 100644
--- a/plugins/tasklist/localization/en_US.inc
+++ b/plugins/tasklist/localization/en_US.inc
@@ -8,7 +8,7 @@ $labels['tags'] = 'Tags';
 
 $labels['newtask'] = 'New Task';
 $labels['createnewtask'] = 'Create new Task (e.g. Saturday, Mow the lawn)';
-$labels['createfrommail'] = 'Create new task from email';
+$labels['createfrommail'] = 'Save as task';
 $labels['mark'] = 'Mark';
 $labels['unmark'] = 'Unmark';
 $labels['edit'] = 'Edit';
diff --git a/plugins/tasklist/skins/larry/buttons.png b/plugins/tasklist/skins/larry/buttons.png
index 909530f..954db33 100644
Binary files a/plugins/tasklist/skins/larry/buttons.png and b/plugins/tasklist/skins/larry/buttons.png differ
diff --git a/plugins/tasklist/skins/larry/tasklist.css b/plugins/tasklist/skins/larry/tasklist.css
index 4619914..ad7d05a 100644
--- a/plugins/tasklist/skins/larry/tasklist.css
+++ b/plugins/tasklist/skins/larry/tasklist.css
@@ -22,6 +22,11 @@
 	background-position: 0 -26px;
 }
 
+ul.toolbarmenu li span.icon.taskadd {
+	background-image: url(buttons.png);
+	background-position: -4px -90px;
+}
+
 #sidebar {
 	position: absolute;
 	top: 0;


commit 8040c271c510c68672b64b3aa1864af5f00f4116
Author: Thomas Bruederli <thomas at roundcube.net>
Date:   Sun Jul 29 17:21:28 2012 +0200

    Add forgotten file for create task from email feature

diff --git a/plugins/tasklist/tasklist_base.js b/plugins/tasklist/tasklist_base.js
new file mode 100644
index 0000000..3b1673b
--- /dev/null
+++ b/plugins/tasklist/tasklist_base.js
@@ -0,0 +1,94 @@
+/**
+ * Client scripts for the Tasklist plugin
+ *
+ * @version @package_version@
+ * @author Thomas Bruederli <bruederli at kolabsys.com>
+ *
+ * Copyright (C) 2012, Kolab Systems AG <contact at kolabsys.com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+ 
+function rcube_tasklist(settings)
+{
+    /* private vars */
+    var ui_loaded = false;
+    var me = this;
+
+    /*  public members  */
+    this.ui;
+
+    /* public methods */
+    this.create_from_mail = create_from_mail;
+    this.mail2taskdialog = mail2task_dialog;
+
+
+    /**
+     * Open a new task dialog prefilled with contents from the currently selected mail message
+     */
+    function create_from_mail()
+    {
+        var uid;
+        if ((uid = rcmail.get_single_uid())) {
+            // load calendar UI (scripts and edit dialog template)
+            if (!ui_loaded) {
+                $.when(
+                    $.getScript('./plugins/tasklist/tasklist.js'),
+                    $.getScript('./plugins/tasklist/jquery.tagedit.js'),
+                    $.get(rcmail.url('tasks/inlineui'), function(html){ $(document.body).append(html); }, 'html')
+                ).then(function() {
+                    // register attachments form
+                    // rcmail.gui_object('attachmentlist', 'attachmentlist');
+
+                    ui_loaded = true;
+                    me.ui = new rcube_tasklist_ui(settings);
+                    create_from_mail();  // start over
+                });
+                return;
+            }
+            else {
+                // get message contents for task dialog
+                var lock = rcmail.set_busy(true, 'loading');
+                rcmail.http_post('tasks/mail2task', {
+                    '_mbox': rcmail.env.mailbox,
+                    '_uid': uid
+                }, lock);
+            }
+        }
+    }
+
+    /**
+     * Callback function to put the given task properties into the dialog
+     */
+    function mail2task_dialog(prop)
+    {
+        this.ui.edit_task(null, 'new', prop);
+    }
+
+}
+
+/* tasklist plugin initialization (for email task) */
+window.rcmail && rcmail.env.task == 'mail' && rcmail.addEventListener('init', function(evt) {
+    var tasks = new rcube_tasklist(rcmail.env.tasklist_settings);
+
+    rcmail.register_command('tasklist-create-from-mail', function() { tasks.create_from_mail() });
+    rcmail.addEventListener('plugin.mail2taskdialog', function(p){ tasks.mail2taskdialog(p) });
+    rcmail.addEventListener('plugin.unlock_saving', function(p){ tasks.ui && tasks.ui.unlock_saving(); });
+
+    if (rcmail.env.action != 'show')
+        rcmail.env.message_commands.push('tasklist-create-from-mail');
+    else
+        rcmail.enable_command('tasklist-create-from-mail', true);
+});
+


commit fd1f107b4c0701f1f8e8e5f29b5cd8c2f5a0a84c
Author: Thomas Bruederli <thomas at roundcube.net>
Date:   Sun Jul 29 17:20:19 2012 +0200

    Create Task from Email feature (#896)

diff --git a/plugins/tasklist/localization/en_US.inc b/plugins/tasklist/localization/en_US.inc
index 9c1aeef..8ade264 100644
--- a/plugins/tasklist/localization/en_US.inc
+++ b/plugins/tasklist/localization/en_US.inc
@@ -8,6 +8,7 @@ $labels['tags'] = 'Tags';
 
 $labels['newtask'] = 'New Task';
 $labels['createnewtask'] = 'Create new Task (e.g. Saturday, Mow the lawn)';
+$labels['createfrommail'] = 'Create new task from email';
 $labels['mark'] = 'Mark';
 $labels['unmark'] = 'Unmark';
 $labels['edit'] = 'Edit';
diff --git a/plugins/tasklist/skins/larry/templates/mainview.html b/plugins/tasklist/skins/larry/templates/mainview.html
index e98db77..114b7ec 100644
--- a/plugins/tasklist/skins/larry/templates/mainview.html
+++ b/plugins/tasklist/skins/larry/templates/mainview.html
@@ -122,45 +122,7 @@
 	</div>
 </div>
 
-<div id="taskedit">
-	<form id="taskeditform" action="#" method="post" enctype="multipart/form-data">
-		<div class="form-section">
-			<label for="edit-title"><roundcube:label name="tasklist.title" /></label>
-			<br />
-			<input type="text" class="text" name="title" id="edit-title" size="60" tabindex="1" />
-		</div>
-		<div class="form-section">
-			<label for="edit-description"><roundcube:label name="tasklist.description" /></label>
-			<br />
-			<textarea name="description" id="edit-description" class="text" rows="5" cols="60" tabindex="2"></textarea>
-		</div>
-		<div class="form-section">
-			<label for="edit-tags"><roundcube:label name="tasklist.tags" /></label>
-			<roundcube:object name="plugin.tags_editline" id="edit-tagline" class="tagedit" tabindex="3" />
-		</div>
-		<div class="form-section">
-			<label for="edit-date"><roundcube:label name="tasklist.datetime" /></label>
-			<input type="text" name="date" size="10" id="edit-date" tabindex="20" />  
-			<input type="text" name="time" size="6" id="edit-time" tabindex="21" />
-			<a href="#nodate" style="margin-left:1em" class="edit-nodate" rel="#edit-date,#edit-time"><roundcube:label name="tasklist.nodate" /></a>
-		</div>
-		<div class="form-section">
-			<label for="edit-startdate"><roundcube:label name="tasklist.start" /></label>
-			<input type="text" name="startdate" size="10" id="edit-startdate" tabindex="23" />  
-			<input type="text" name="starttime" size="6" id="edit-starttime" tabindex="24" />
-			<a href="#nodate" style="margin-left:1em" class="edit-nodate" rel="#edit-startdate,#edit-starttime"><roundcube:label name="tasklist.nodate" /></a>
-		</div>
-		<div class="form-section">
-			<label for="edit-completeness"><roundcube:label name="tasklist.complete" /></label>
-			<input type="text" name="title" id="edit-completeness" size="3"  tabindex="25" /> %
-			<div id="edit-completeness-slider"></div>
-		</div>
-		<div class="form-section" id="tasklist-select">
-			<label for="edit-tasklist"><roundcube:label name="tasklist.list" /></label>
-			<roundcube:object name="plugin.tasklist_select" id="edit-tasklist" tabindex="26" />
-		</div>
-	</form>
-</div>
+<roundcube:include file="/templates/taskedit.html" />
 
 <div id="tasklistform" class="uidialog">
 	<roundcube:object name="plugin.tasklist_editform" />
diff --git a/plugins/tasklist/skins/larry/templates/taskedit.html b/plugins/tasklist/skins/larry/templates/taskedit.html
new file mode 100644
index 0000000..cdce896
--- /dev/null
+++ b/plugins/tasklist/skins/larry/templates/taskedit.html
@@ -0,0 +1,39 @@
+<div id="taskedit">
+	<form id="taskeditform" action="#" method="post" enctype="multipart/form-data">
+		<div class="form-section">
+			<label for="edit-title"><roundcube:label name="tasklist.title" /></label>
+			<br />
+			<input type="text" class="text" name="title" id="edit-title" size="60" tabindex="1" />
+		</div>
+		<div class="form-section">
+			<label for="edit-description"><roundcube:label name="tasklist.description" /></label>
+			<br />
+			<textarea name="description" id="edit-description" class="text" rows="5" cols="60" tabindex="2"></textarea>
+		</div>
+		<div class="form-section">
+			<label for="edit-tags"><roundcube:label name="tasklist.tags" /></label>
+			<roundcube:object name="plugin.tags_editline" id="edit-tagline" class="tagedit" tabindex="3" />
+		</div>
+		<div class="form-section">
+			<label for="edit-date"><roundcube:label name="tasklist.datetime" /></label>
+			<input type="text" name="date" size="10" id="edit-date" tabindex="20" />  
+			<input type="text" name="time" size="6" id="edit-time" tabindex="21" />
+			<a href="#nodate" style="margin-left:1em" class="edit-nodate" rel="#edit-date,#edit-time"><roundcube:label name="tasklist.nodate" /></a>
+		</div>
+		<div class="form-section">
+			<label for="edit-startdate"><roundcube:label name="tasklist.start" /></label>
+			<input type="text" name="startdate" size="10" id="edit-startdate" tabindex="23" />  
+			<input type="text" name="starttime" size="6" id="edit-starttime" tabindex="24" />
+			<a href="#nodate" style="margin-left:1em" class="edit-nodate" rel="#edit-startdate,#edit-starttime"><roundcube:label name="tasklist.nodate" /></a>
+		</div>
+		<div class="form-section">
+			<label for="edit-completeness"><roundcube:label name="tasklist.complete" /></label>
+			<input type="text" name="title" id="edit-completeness" size="3"  tabindex="25" /> %
+			<div id="edit-completeness-slider"></div>
+		</div>
+		<div class="form-section" id="tasklist-select">
+			<label for="edit-tasklist"><roundcube:label name="tasklist.list" /></label>
+			<roundcube:object name="plugin.tasklist_select" id="edit-tasklist" tabindex="26" />
+		</div>
+	</form>
+</div>
diff --git a/plugins/tasklist/tasklist.js b/plugins/tasklist/tasklist.js
index c1522d0..39636d6 100644
--- a/plugins/tasklist/tasklist.js
+++ b/plugins/tasklist/tasklist.js
@@ -20,7 +20,7 @@
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
  */
  
-function rcube_tasklist(settings)
+function rcube_tasklist_ui(settings)
 {
     /*  constants  */
     var FILTER_MASK_ALL = 0;
@@ -58,7 +58,6 @@ function rcube_tasklist(settings)
     var listdata = {};
     var tags = [];
     var draghelper;
-    var completeness_slider;
     var search_request;
     var search_query;
     var me = this;
@@ -91,6 +90,21 @@ function rcube_tasklist(settings)
     this.reset_search = reset_search;
     this.list_remove = list_remove;
     this.list_edit_dialog = list_edit_dialog;
+    this.unlock_saving = unlock_saving;
+
+
+    /* basic initializations */
+
+    var completeness_slider = $('#edit-completeness-slider').slider({
+        range: 'min',
+        slide: function(e, ui){
+            var v = completeness_slider.slider('value');
+            if (v >= 98) v = 100;
+            if (v <= 2)  v = 0;
+            $('#edit-completeness').val(v);
+        }
+    });
+    $('#edit-completeness').change(function(e){ completeness_slider.slider('value', parseInt(this.value)) });
 
 
     /**
@@ -118,7 +132,7 @@ function rcube_tasklist(settings)
         rcmail.addEventListener('plugin.insert_tasklist', insert_list);
         rcmail.addEventListener('plugin.update_tasklist', update_list);
         rcmail.addEventListener('plugin.reload_data', function(){ list_tasks(null); });
-        rcmail.addEventListener('plugin.unlock_saving', function(p){ rcmail.set_busy(false, null, saving_lock); });
+        rcmail.addEventListener('plugin.unlock_saving', unlock_saving);
 
         // start loading tasks
         fetch_counts();
@@ -277,22 +291,11 @@ function rcube_tasklist(settings)
             }
         });
 
-        completeness_slider = $('#edit-completeness-slider').slider({
-            range: 'min',
-            slide: function(e, ui){
-                var v = completeness_slider.slider('value');
-                if (v >= 98) v = 100;
-                if (v <= 2)  v = 0;
-                $('#edit-completeness').val(v);
-            }
-        });
-        $('#edit-completeness').change(function(e){ completeness_slider.slider('value', parseInt(this.value)) });
-
         // handle global document clicks: close popup menus
         $(document.body).click(clear_popups);
 
         // extended datepicker settings
-        extended_datepicker_settings = $.extend({
+        var extended_datepicker_settings = $.extend({
             showButtonPanel: true,
             beforeShow: function(input, inst) {
                 setTimeout(function(){
@@ -462,7 +465,7 @@ function rcube_tasklist(settings)
     {
         if (!rcmail.busy) {
             saving_lock = rcmail.set_busy(true, 'tasklist.savingdata');
-            rcmail.http_post('task', { action:action, t:rec, filter:filtermask });
+            rcmail.http_post('tasks/task', { action:action, t:rec, filter:filtermask });
             return true;
         }
         
@@ -470,6 +473,15 @@ function rcube_tasklist(settings)
     }
 
     /**
+     * Remove saving lock and free the UI for new input
+     */
+    function unlock_saving()
+    {
+        if (saving_lock)
+            rcmail.set_busy(false, null, saving_lock);
+    }
+
+    /**
      * Render the given task into the tasks list
      */
     function render_task(rec, replace)
@@ -1241,7 +1253,7 @@ jQuery.fn.sortElements = (function(){
 var rctasks;
 window.rcmail && rcmail.addEventListener('init', function(evt) {
 
-  rctasks = new rcube_tasklist(rcmail.env.tasklist_settings);
+  rctasks = new rcube_tasklist_ui(rcmail.env.tasklist_settings);
 
   // register button commands
   rcmail.register_command('newtask', function(){ rctasks.edit_task(null, 'new', {}); }, true);
diff --git a/plugins/tasklist/tasklist.php b/plugins/tasklist/tasklist.php
index 6b205e9..4247e14 100644
--- a/plugins/tasklist/tasklist.php
+++ b/plugins/tasklist/tasklist.php
@@ -81,6 +81,29 @@ class tasklist extends rcube_plugin
             $this->register_action('tasklist', array($this, 'tasklist_action'));
             $this->register_action('counts', array($this, 'fetch_counts'));
             $this->register_action('fetch', array($this, 'fetch_tasks'));
+            $this->register_action('inlineui', array($this, 'get_inline_ui'));
+            $this->register_action('mail2task', array($this, 'mail_message2task'));
+        }
+        else if ($this->rc->task == 'mail') {
+            // TODO: register hooks to catch ical/vtodo email attachments
+            if ($this->rc->action == 'show' || $this->rc->action == 'preview') {
+                // $this->add_hook('message_load', array($this, 'mail_message_load'));
+                // $this->add_hook('template_object_messagebody', array($this, 'mail_messagebody_html'));
+            }
+
+            // add 'Create event' item to message menu
+            if ($this->api->output->type == 'html') {
+                $this->api->add_content(html::tag('li', null, 
+                    $this->api->output->button(array(
+                        'command'  => 'tasklist-create-from-mail',
+                        'label'    => 'tasklist.createfrommail',
+                        'type'     => 'link',
+                        'classact' => 'icon taskaddlink active',
+                        'class'    => 'icon taskaddlink',
+                        'innerclass' => 'icon taskadd',
+                    ))),
+                'messagemenu');
+            }
         }
 
         if (!$this->rc->output->ajax_call && !$this->rc->output->env['framed']) {
@@ -525,6 +548,89 @@ class tasklist extends rcube_plugin
     }
 
 
+    /**
+     *
+     */
+    public function get_inline_ui()
+    {
+        foreach (array('save','cancel','savingdata') as $label)
+            $texts['tasklist.'.$label] = $this->gettext($label);
+
+        $texts['tasklist.newtask'] = $this->gettext('createfrommail');
+
+        $this->ui->init_templates();
+        echo $this->api->output->parse('tasklist.taskedit', false, false);
+        echo html::tag('script', array('type' => 'text/javascript'),
+            "rcmail.set_env('tasklists', " . json_encode($this->api->output->env['tasklists']) . ");\n".
+//            "rcmail.set_env('deleteicon', '" . $this->api->output->env['deleteicon'] . "');\n".
+//            "rcmail.set_env('cancelicon', '" . $this->api->output->env['cancelicon'] . "');\n".
+//            "rcmail.set_env('loadingicon', '" . $this->api->output->env['loadingicon'] . "');\n".
+            "rcmail.add_label(" . json_encode($texts) . ");\n"
+        );
+        exit;
+    }
+
+
+    /*******  Email related function *******/
+
+    public function mail_message2task()
+    {
+        $uid = get_input_value('_uid', RCUBE_INPUT_POST);
+        $mbox = get_input_value('_mbox', RCUBE_INPUT_POST);
+        $task = array();
+
+        // establish imap connection
+        $imap = $this->rc->get_storage();
+        $imap->set_mailbox($mbox);
+        $message = new rcube_message($uid);
+
+        if ($message->headers) {
+            $task['title'] = trim($message->subject);
+            $task['description'] = trim($message->first_text_part());
+/*
+            // copy mail attachments to event
+            if ($message->attachments) {
+              $eventid = 'cal:';
+              if (!is_array($_SESSION['event_session']) || $_SESSION['event_session']['id'] != $eventid) {
+                $_SESSION['event_session'] = array();
+                $_SESSION['event_session']['id'] = $eventid;
+                $_SESSION['event_session']['attachments'] = array();
+              }
+
+              foreach ((array)$message->attachments as $part) {
+                $attachment = array(
+                  'data' => $imap->get_message_part($uid, $part->mime_id, $part),
+                  'size' => $part->size,
+                  'name' => $part->filename,
+                  'mimetype' => $part->mimetype,
+                  'group' => $eventid,
+                );
+
+                $attachment = $this->rc->plugins->exec_hook('attachment_save', $attachment);
+
+                if ($attachment['status'] && !$attachment['abort']) {
+                  $id = $attachment['id'];
+
+                  // store new attachment in session
+                  unset($attachment['status'], $attachment['abort'], $attachment['data']);
+                  $_SESSION['event_session']['attachments'][$id] = $attachment;
+
+                  $attachment['id'] = 'rcmfile' . $attachment['id'];  # add prefix to consider it 'new'
+                  $event['attachments'][] = $attachment;
+                }
+              }
+            }
+*/
+            $this->rc->output->command('plugin.mail2taskdialog', $task);
+        }
+        else {
+            $this->rc->output->command('display_message', $this->gettext('messageopenerror'), 'error');
+        }
+
+        $this->rc->output->send();
+    }
+
+
     /*******  Utility functions  *******/
 
     /**
diff --git a/plugins/tasklist/tasklist_ui.php b/plugins/tasklist/tasklist_ui.php
index a5f3520..43f79c9 100644
--- a/plugins/tasklist/tasklist_ui.php
+++ b/plugins/tasklist/tasklist_ui.php
@@ -52,6 +52,18 @@ class tasklist_ui
         ), 'taskbar');
 
         $this->plugin->include_stylesheet($this->plugin->local_skin_path() . '/tasklist.css');
+        $this->plugin->include_script('tasklist_base.js');
+
+        // copy config to client
+        $defaults = $this->plugin->defaults;
+        $settings = array(
+            'date_format' => $this->rc->config->get('date_format', $defaults['date_format']),
+            'time_format' => $this->rc->config->get('time_format', $defaults['time_format']),
+            'first_day' => $this->rc->config->get('calendar_first_day', $defaults['first_day']),
+        );
+
+        $this->rc->output->set_env('tasklist_settings', $settings);
+
         $this->ready = true;
   }
 
@@ -72,16 +84,6 @@ class tasklist_ui
 
         $this->plugin->include_script('jquery.tagedit.js');
         $this->plugin->include_script('tasklist.js');
-
-        // copy config to client
-        $defaults = $this->plugin->defaults;
-        $settings = array(
-            'date_format' => $this->rc->config->get('date_format', $defaults['date_format']),
-            'time_format' => $this->rc->config->get('time_format', $defaults['time_format']),
-            'first_day' => $this->rc->config->get('calendar_first_day', $defaults['first_day']),
-        );
-        
-        $this->rc->output->set_env('tasklist_settings', $settings);
     }
 
     /**


commit 7a8fbddf0dcd9e2525625c27d07d1d7969d4f49c
Author: Thomas Bruederli <thomas at roundcube.net>
Date:   Sun Jul 29 17:18:15 2012 +0200

    Encapsulate unlock_saving callback function

diff --git a/plugins/calendar/calendar_base.js b/plugins/calendar/calendar_base.js
index 54388bd..a77af01 100644
--- a/plugins/calendar/calendar_base.js
+++ b/plugins/calendar/calendar_base.js
@@ -284,7 +284,7 @@ window.rcmail && rcmail.addEventListener('init', function(evt) {
       
       rcmail.register_command('calendar-create-from-mail', function() { cal.create_from_mail() });
       rcmail.addEventListener('plugin.mail2event_dialog', function(p){ cal.mail2event_dialog(p) });
-      rcmail.addEventListener('plugin.unlock_saving', function(p){ rcmail.set_busy(false, null, cal.ui.saving_lock); });
+      rcmail.addEventListener('plugin.unlock_saving', function(p){ cal.ui.unlock_saving(); });
       
       if (rcmail.env.action != 'show') {
         rcmail.env.message_commands.push('calendar-create-from-mail');
diff --git a/plugins/calendar/calendar_ui.js b/plugins/calendar/calendar_ui.js
index 4a54ca5..67339bf 100644
--- a/plugins/calendar/calendar_ui.js
+++ b/plugins/calendar/calendar_ui.js
@@ -33,7 +33,7 @@ function rcube_calendar_ui(settings)
     this.selected_event = null;
     this.selected_calendar = null;
     this.search_request = null;
-    this.saving_lock = null;
+    this.saving_lock;
 
 
     /***  private vars  ***/
@@ -1714,6 +1714,15 @@ function rcube_calendar_ui(settings)
 
     /*** public methods ***/
 
+    /**
+     * Remove saving lock and free the UI for new input
+     */
+    this.unlock_saving = function()
+    {
+        if (me.saving_lock)
+            rcmail.set_busy(false, null, me.saving_lock);
+    };
+
     // opens calendar day-view in a popup
     this.fisheye_view = function(date)
     {
@@ -2703,7 +2712,6 @@ function rcube_calendar_ui(settings)
 
 /* calendar plugin initialization */
 window.rcmail && rcmail.addEventListener('init', function(evt) {
-
   // configure toolbar buttons
   rcmail.register_command('addevent', function(){ cal.add_event(); }, true);
   rcmail.register_command('print', function(){ cal.print_calendars(); }, true);
@@ -2723,7 +2731,7 @@ window.rcmail && rcmail.addEventListener('init', function(evt) {
   // register callback commands
   rcmail.addEventListener('plugin.display_alarms', function(alarms){ cal.display_alarms(alarms); });
   rcmail.addEventListener('plugin.destroy_source', function(p){ cal.calendar_destroy_source(p.id); });
-  rcmail.addEventListener('plugin.unlock_saving', function(p){ rcmail.set_busy(false, null, cal.saving_lock); });
+  rcmail.addEventListener('plugin.unlock_saving', function(p){ cal.unlock_saving(); });
   rcmail.addEventListener('plugin.refresh_calendar', function(p){ cal.refresh(p); });
   rcmail.addEventListener('plugin.import_success', function(p){ cal.import_success(p); });
 


commit e140b7852c221a43ec71913adc3fbc1dc1b338bb
Author: Thomas Bruederli <thomas at roundcube.net>
Date:   Sun Jul 29 16:50:15 2012 +0200

    Redirect to classig skin

diff --git a/plugins/calendar/skins/.htaccess b/plugins/calendar/skins/.htaccess
index 740f1a9..734b6cd 100644
--- a/plugins/calendar/skins/.htaccess
+++ b/plugins/calendar/skins/.htaccess
@@ -2,4 +2,4 @@
 RewriteEngine On
 RewriteCond  %{REQUEST_FILENAME}  !-f
 RewriteCond  %{REQUEST_FILENAME}  !-d
-RewriteRule  larry/(.*)           %{REQUEST_URI}/../../default/$1  [qsappend,last]
+RewriteRule  larry/(.*)           %{REQUEST_URI}/../../classic/$1  [qsappend,last]


commit 12d2e8b993bffa9ee85fe4aa9066d90835e7cba1
Merge: 6385460 5720e0f
Author: Thomas Bruederli <thomas at roundcube.net>
Date:   Sun Jul 29 15:41:26 2012 +0200

    Merge branch 'master' of ssh://git.kolabsys.com/git/roundcube



commit 638546023c57d0dc1a17ad78799ddd89fc14fac6
Author: Thomas Bruederli <thomas at roundcube.net>
Date:   Sun Jul 29 15:41:00 2012 +0200

    Renamed old default skin folders to 'classic' in order to align with the upcoming change in Roundcube core

diff --git a/plugins/calendar/calendar.php b/plugins/calendar/calendar.php
index dd33a0b..77719c7 100644
--- a/plugins/calendar/calendar.php
+++ b/plugins/calendar/calendar.php
@@ -459,7 +459,7 @@ class calendar extends rcube_plugin
 
         // include color picker
         $this->include_script('lib/js/jquery.miniColors.min.js');
-        $this->include_stylesheet('skins/' .$this->rc->config->get('skin') . '/jquery.miniColors.css');
+        $this->include_stylesheet($this->local_skin_path() . '/jquery.miniColors.css');
         $this->rc->output->set_env('mscolors', $this->driver->get_color_values());
         $this->rc->output->add_script('$("input.colors").miniColors({ colorValues:rcmail.env.mscolors })', 'docready');
       }
@@ -1942,9 +1942,9 @@ class calendar extends rcube_plugin
     }
     
     // Add CSS stylesheets to the page header
-    $skin = $this->rc->config->get('skin');
-    $this->include_stylesheet('skins/' . $skin . '/fullcalendar.css');
-    $this->include_stylesheet('skins/' . $skin . '/print.css');
+    $skin_path = $this->local_skin_path();
+    $this->include_stylesheet($skin_path . '/fullcalendar.css');
+    $this->include_stylesheet($skin_path . '/print.css');
     
     // Add JS files to the page header
     $this->include_script('print.js');
diff --git a/plugins/calendar/lib/calendar_ui.php b/plugins/calendar/lib/calendar_ui.php
index 9615cff..a063a4d 100644
--- a/plugins/calendar/lib/calendar_ui.php
+++ b/plugins/calendar/lib/calendar_ui.php
@@ -59,8 +59,8 @@ class calendar_ui
     $this->cal->include_script('lib/js/fullcalendar.js');
     $this->cal->include_script('calendar_base.js');
     
-    $skin = $this->rc->config->get('skin');
-    $this->cal->include_stylesheet('skins/' . $skin . '/calendar.css');
+    $skin_path = $this->cal->local_skin_path();
+    $this->cal->include_stylesheet($skin_path . '/calendar.css');
     
     $this->ready = true;
   }
@@ -99,9 +99,9 @@ class calendar_ui
    */
   public function addCSS()
   {
-    $skin = $this->rc->config->get('skin');
-    $this->cal->include_stylesheet('skins/' . $skin . '/fullcalendar.css');
-    $this->cal->include_stylesheet('skins/' . $skin . '/jquery.miniColors.css');
+    $skin_path = $this->cal->local_skin_path();
+    $this->cal->include_stylesheet($skin_path . '/fullcalendar.css');
+    $this->cal->include_stylesheet($skin_path . '/jquery.miniColors.css');
   }
 
   /**
@@ -648,7 +648,7 @@ class calendar_ui
     if (!$attrib['id'])
       $attrib['id'] = 'rcmAttachmentList';
 
-    $skin_path = $this->rc->config->get('skin_path');
+    $skin_path = $this->cal->local_skin_path();
     if ($attrib['deleteicon']) {
       $_SESSION['calendar_deleteicon'] = $skin_path . $attrib['deleteicon'];
       $this->rc->output->set_env('deleteicon', $skin_path . $attrib['deleteicon']);
diff --git a/plugins/calendar/package.xml b/plugins/calendar/package.xml
index 1284430..1dc6625 100644
--- a/plugins/calendar/package.xml
+++ b/plugins/calendar/package.xml
@@ -113,46 +113,46 @@
 			</file>
 
 
-			<file name="skins/default/calendar.css" role="data"></file>
-			<file name="skins/default/fullcalendar.css" role="data"></file>
-			<file name="skins/default/fullcalendar.print.css" role="data"></file>
-			<file name="skins/default/iehacks.css" role="data"></file>
-			<file name="skins/default/jquery.miniColors.css" role="data"></file>
-			<file name="skins/default/print.css" role="data"></file>
-			<file name="skins/default/print.iehacks.css" role="data"></file>
-			<file name="skins/default/images/attendee-status.gif" role="data"></file>
-			<file name="skins/default/images/badge_confidential.gif" role="data"></file>
-			<file name="skins/default/images/badge_confidential.png" role="data"></file>
-			<file name="skins/default/images/badge_private.gif" role="data"></file>
-			<file name="skins/default/images/badge_private.png" role="data"></file>
-			<file name="skins/default/images/calendar-blue.png" role="data"></file>
-			<file name="skins/default/images/calendar.gif" role="data"></file>
-			<file name="skins/default/images/calendar.png" role="data"></file>
-			<file name="skins/default/images/calendars.gif" role="data"></file>
-			<file name="skins/default/images/calendars.png" role="data"></file>
-			<file name="skins/default/images/eventicons.gif" role="data"></file>
-			<file name="skins/default/images/export.png" role="data"></file>
-			<file name="skins/default/images/freebusy-colors.gif" role="data"></file>
-			<file name="skins/default/images/freebusy-colors.png" role="data"></file>
-			<file name="skins/default/images/invitation.png" role="data"></file>
-			<file name="skins/default/images/listheader.gif" role="data"></file>
-			<file name="skins/default/images/loading_blue.gif" role="data"></file>
-			<file name="skins/default/images/minicolors-all.png" role="data"></file>
-			<file name="skins/default/images/minicolors-handles.gif" role="data"></file>
-			<file name="skins/default/images/preview.png" role="data"></file>
-			<file name="skins/default/images/print.png" role="data"></file>
-			<file name="skins/default/images/spacer.gif" role="data"></file>
-			<file name="skins/default/images/toggle.gif" role="data"></file>
-			<file name="skins/default/images/toolbar.gif" role="data"></file>
-			<file name="skins/default/images/toolbar.png" role="data"></file>
-			<file name="skins/default/templates/attachment.html" role="data"></file>
-			<file name="skins/default/templates/calendar.html" role="data"></file>
-			<file name="skins/default/templates/eventedit.html" role="data"></file>
-			<file name="skins/default/templates/freebusylegend.html" role="data"></file>
-			<file name="skins/default/templates/itipattend.html" role="data"></file>
-			<file name="skins/default/templates/kolabacl.html" role="data"></file>
-			<file name="skins/default/templates/kolabform.html" role="data"></file>
-			<file name="skins/default/templates/print.html" role="data"></file>
+			<file name="skins/classic/calendar.css" role="data"></file>
+			<file name="skins/classic/fullcalendar.css" role="data"></file>
+			<file name="skins/classic/fullcalendar.print.css" role="data"></file>
+			<file name="skins/classic/iehacks.css" role="data"></file>
+			<file name="skins/classic/jquery.miniColors.css" role="data"></file>
+			<file name="skins/classic/print.css" role="data"></file>
+			<file name="skins/classic/print.iehacks.css" role="data"></file>
+			<file name="skins/classic/images/attendee-status.gif" role="data"></file>
+			<file name="skins/classic/images/badge_confidential.gif" role="data"></file>
+			<file name="skins/classic/images/badge_confidential.png" role="data"></file>
+			<file name="skins/classic/images/badge_private.gif" role="data"></file>
+			<file name="skins/classic/images/badge_private.png" role="data"></file>
+			<file name="skins/classic/images/calendar-blue.png" role="data"></file>
+			<file name="skins/classic/images/calendar.gif" role="data"></file>
+			<file name="skins/classic/images/calendar.png" role="data"></file>
+			<file name="skins/classic/images/calendars.gif" role="data"></file>
+			<file name="skins/classic/images/calendars.png" role="data"></file>
+			<file name="skins/classic/images/eventicons.gif" role="data"></file>
+			<file name="skins/classic/images/export.png" role="data"></file>
+			<file name="skins/classic/images/freebusy-colors.gif" role="data"></file>
+			<file name="skins/classic/images/freebusy-colors.png" role="data"></file>
+			<file name="skins/classic/images/invitation.png" role="data"></file>
+			<file name="skins/classic/images/listheader.gif" role="data"></file>
+			<file name="skins/classic/images/loading_blue.gif" role="data"></file>
+			<file name="skins/classic/images/minicolors-all.png" role="data"></file>
+			<file name="skins/classic/images/minicolors-handles.gif" role="data"></file>
+			<file name="skins/classic/images/preview.png" role="data"></file>
+			<file name="skins/classic/images/print.png" role="data"></file>
+			<file name="skins/classic/images/spacer.gif" role="data"></file>
+			<file name="skins/classic/images/toggle.gif" role="data"></file>
+			<file name="skins/classic/images/toolbar.gif" role="data"></file>
+			<file name="skins/classic/images/toolbar.png" role="data"></file>
+			<file name="skins/classic/templates/attachment.html" role="data"></file>
+			<file name="skins/classic/templates/calendar.html" role="data"></file>
+			<file name="skins/classic/templates/eventedit.html" role="data"></file>
+			<file name="skins/classic/templates/freebusylegend.html" role="data"></file>
+			<file name="skins/classic/templates/itipattend.html" role="data"></file>
+			<file name="skins/classic/templates/kolabacl.html" role="data"></file>
+			<file name="skins/classic/templates/kolabform.html" role="data"></file>
+			<file name="skins/classic/templates/print.html" role="data"></file>
 
 			<file name="config.inc.php.dist" role="data"></file>
 			<file name="LICENSE" role="data"></file>
diff --git a/plugins/calendar/skins/classic/README b/plugins/calendar/skins/classic/README
new file mode 100644
index 0000000..ccd513a
--- /dev/null
+++ b/plugins/calendar/skins/classic/README
@@ -0,0 +1,5 @@
+Icons by Fugue Icons <http://p.yusukekamiyamane.com/>
+
+Copyright (C) 2010 Yusuke Kamiyamane. All rights reserved.
+The icons are licensed under a Creative Commons Attribution
+3.0 license. <http://creativecommons.org/licenses/by/3.0/>
diff --git a/plugins/calendar/skins/classic/calendar.css b/plugins/calendar/skins/classic/calendar.css
new file mode 100644
index 0000000..21dcb1b
--- /dev/null
+++ b/plugins/calendar/skins/classic/calendar.css
@@ -0,0 +1,1268 @@
+/*** Style for Calendar plugin ***/
+
+body.calendarmain {
+	overflow: hidden;
+}
+
+#taskbar a.button-calendar {
+	background: url(images/calendar.png) 0px 1px no-repeat;
+}
+
+/* hack for IE 6/7 */
+* html #taskbar a.button-calendar {
+	background-image: url(images/calendar.gif);
+}
+
+#main {
+	position: absolute;
+	clear: both;
+	top: 90px;
+	left: 0;
+	right: 0;
+	bottom: 10px;
+}
+
+#calendarsidebar {
+	position: absolute;
+	top: 37px;
+	left: 10px;
+	bottom: 0;
+	width: 230px;
+}
+
+#datepicker {
+	width: 100%;
+}
+
+#datepicker .ui-datepicker {
+	width: 97% !important;
+	box-shadow: none;
+	-moz-box-shadow: none;
+	-webkit-box-shadow: none;
+}
+
+#datepicker .ui-datepicker-activerange a {
+	border-color: #c33;
+	color: #a22;
+}
+
+#datepicker .ui-datepicker-activerange a.ui-state-active {
+	color: #fff;
+}
+
+#datepicker .ui-priority-secondary {
+	opacity: 0.4;
+}
+
+#datepicker td.ui-datepicker-week-col {
+	cursor: pointer;
+}
+
+#calendarsidebartoggle {
+	position: absolute;
+	left: 244px;
+	width: 8px;
+	top: 37px;
+	bottom: 0;
+	background: url(images/toggle.gif) 0 48% no-repeat transparent;
+	cursor: pointer;
+}
+
+div.sidebarclosed {
+	background-position: -8px 48% !important;
+}
+
+#calendarsidebartoggle:hover {
+	background-color: #ddd;
+}
+
+#calendar {
+	position: absolute;
+	top: 0;
+	left: 256px;
+	right: 10px;
+	bottom: 0;
+}
+
+#print {
+	width: 680px;
+}
+
+pre {
+ font-family: "Lucida Grande", Verdana, Arial, Helvetica, sans-serif;
+}
+
+#calendars {
+	position: absolute;
+	top: 220px;
+	left: 0;
+	bottom: 0;
+	right: 0;
+	background-color: #F9F9F9;
+	border: 1px solid #999999;
+	overflow: hidden;
+}
+
+#calendarslist {
+	list-style: none;
+	margin: 0;
+	padding: 0;
+}
+
+#attachmentlist li,
+#calendarslist li {
+	margin: 0;
+	padding: 1px;
+	display: block;
+	background: #fff;
+	border-bottom: 1px solid #EBEBEB;
+	white-space: nowrap;
+}
+
+#calendarslist li label {
+	display: block;
+}
+
+#calendarslist li span.handle {
+	cursor: default;
+	background: url(images/calendars.png) 0 -2px no-repeat;
+	display: inline-block;
+	width: 20px;
+}
+
+#calendarslist li input {
+	margin-right: 5px;
+}
+
+#calendarslist li.selected {
+	background-color: #ccc;
+	border-bottom: 1px solid #bbb;
+}
+
+#calendarslist li.selected span {
+	font-weight: bold;
+}
+
+#calendarslist li.readonly span.handle {
+    background-position: 0 -20px;
+}
+
+#calendarslist li.other span.handle {
+    background-position: 0 -38px;
+}
+
+#calendarslist li.other.readonly span.handle {
+    background-position: 0 -56px;
+}
+
+#calendarslist li.shared span.handle {
+    background-position: 0 -74px;
+}
+
+#calendarslist li.shared.readonly span.handle {
+    background-position: 0 -92px;
+}
+
+#calfeedurl {
+	width: 98%;
+	background: #fbfbfb;
+	padding: 4px;
+	margin-bottom: 1em;
+	resize: none;
+}
+
+#agendalist {
+	width: 100%;
+	margin: 0 auto;
+	margin-top: 60px;
+	border: 1px solid #C1DAD7;
+	display: none;
+}
+
+#agendalist table {
+	width: 100%;
+}
+
+#agendalist td,
+#agendalist th {
+	border-right: 1px solid #C1DAD7;
+	border-bottom: 1px solid #C1DAD7;
+	background: #fff;
+	padding: 6px 6px 6px 12px;
+}
+
+#agendalist tr {
+	vertical-align: top;
+}
+
+#agendalist th {
+	font-weight: bold;
+}
+
+#calendartoolbar {
+	position: absolute;
+	top: 45px;
+	left: 256px;
+	height: 35px;
+}
+
+#calendartoolbar a {
+	padding-right: 10px;
+}
+
+#calendartoolbar a.button,
+#calendartoolbar a.buttonPas {
+	display: block;
+	float: left;
+	width: 32px;
+	height: 32px;
+	padding: 0;
+	margin-right: 10px;
+	overflow: hidden;
+	background: url(images/toolbar.png) 0 0 no-repeat transparent;
+	opacity: 0.99; /* this is needed to make buttons appear correctly in Chrome */
+}
+
+#calendartoolbar a.buttonPas {
+	opacity: 0.35;
+}
+
+#calendartoolbar a.addeventSel {
+	background-position: 0 -32px;
+}
+
+#calendartoolbar a.delete {
+  background-position: -32px 0;
+}
+
+#calendartoolbar a.deleteSel {
+  background-position: -32px -32px;
+}
+
+#calendartoolbar a.print {
+  background-position: -64px 0;
+}
+
+#calendartoolbar a.printSel {
+  background-position: -64px -32px;
+}
+
+#calendartoolbar a.export {
+	background-position: -128px 0;
+}
+
+#calendartoolbar a.exportSel {
+	background-position: -128px -32px;
+}
+
+#quicksearchbar {
+	right: 4px;
+}
+
+div.uidialog {
+	display: none;
+}
+
+#user {
+	position: absolute;
+	top: 10px;
+	right: 100px;
+	left: 100px;
+	text-align: center;
+}
+
+a.morelink {
+	font-size: 90%;
+	color: #C33;
+	text-decoration: none;
+}
+
+a.morelink:hover {
+	text-decoration: underline;
+}
+
+a.miniColors-trigger {
+	margin-top: -3px;
+}
+
+#attachmentcontainer {
+	position: absolute;
+	top: 80px;
+	left: 20px;
+	right: 20px;
+	bottom: 20px;
+}
+
+#attachmentframe {
+	width: 100%;
+	height: 100%;
+	border: 1px solid #999999;
+	background-color: #F9F9F9;
+}
+
+#partheader {
+	position: absolute;
+	top: 20px;
+	left: 220px;
+	right: 20px;
+	height: 40px;
+}
+
+#partheader table td {
+	padding-left: 2px;
+	padding-right: 4px;
+	vertical-align: middle;
+	font-size: 11px;
+}
+
+#partheader table td.title {
+	color: #666;
+	font-weight: bold;
+}
+
+.attachments-list ul {
+	margin: 0px;
+	padding: 0px;
+	list-style-image: none;
+	list-style-type: none;
+}
+
+.attachments-list ul li {
+	height: 18px;
+	font-size: 12px;
+	padding-top: 2px;
+	padding-right: 8px;
+	white-space: nowrap;
+}
+
+.attachments-list ul li img {
+	padding-right: 2px;
+	vertical-align: middle;
+}
+
+.attachments-list ul li a {
+	text-decoration: none;
+}
+
+.attachments-list ul li a:hover {
+	text-decoration: underline;
+}
+
+#attachmentlist {
+	margin: 0 -0.8em;
+}
+
+#attachmentlist li {
+	padding: 2px 2px 3px 0.8em;
+}
+
+#eventshow .attachments-list ul li {
+	float: left;
+}
+
+#edit-attachments-form {
+	padding-top: 1.2em;
+}
+
+#edit-attachments-form .buttons {
+	margin: 0.5em 0;
+}
+
+#event-attendees span.attendee {
+	padding-right: 18px;
+	margin-right: 0.5em;
+	background: url(images/attendee-status.gif) right 0 no-repeat;
+}
+
+#event-attendees span.attendee a.mailtolink {
+	text-decoration: none;
+	white-space: nowrap;
+}
+
+#event-attendees span.attendee a.mailtolink:hover {
+	text-decoration: underline;
+}
+
+#event-attendees span.accepted {
+	background-position: right -20px;
+}
+
+#event-attendees span.declined {
+	background-position: right -40px;
+}
+
+#event-attendees span.tentative {
+	background-position: right -60px;
+}
+
+#event-attendees span.organizer {
+	background-position: right -80px;
+}
+
+/* jQuery UI overrides */
+
+#eventshow h1 {
+	font-size: 20px;
+	margin: 0.1em 0 0.4em 0;
+}
+
+#eventshow label,
+#eventshow h5.label {
+	font-weight: normal;
+	font-size: 0.9em;
+	color: #999;
+	margin: 0 0 0.2em 0;
+}
+
+#eventshow {
+	margin: 0 -0.2em;
+}
+
+#eventshow.sensitivity-private {
+	background: url(images/badge_private.png) top right no-repeat;
+}
+
+#eventshow.sensitivity-confidential {
+	background: url(images/badge_confidential.png) top right no-repeat;
+}
+
+.sensitivity-private #event-title {
+	margin-right: 50px;
+}
+
+.sensitivity-confidential #event-title {
+	margin-right: 60px;
+}
+
+#eventshow div.event-line {
+	margin-top: 0.1em;
+	margin-bottom: 0.3em;
+}
+
+#eventedit {
+	position: relative;
+	padding: 0.5em 0.1em;
+}
+
+#eventedit input.text,
+#eventedit textarea {
+	width: 97%;
+}
+
+#eventtabs {
+	position: relative;
+	padding: 0;
+	border: 0;
+	border-radius: 0;
+}
+
+div.form-section,
+#eventshow div.event-section,
+#eventtabs div.event-section {
+	margin-top: 0.2em;
+	margin-bottom: 0.8em;
+}
+
+#eventtabs .tabsbar {
+	position: absolute;
+	top: 0;
+}
+
+#eventtabs .ui-tabs-panel {
+	padding: 1em 0.8em;
+	border: 1px solid #aaa;
+	border-width: 0 1px 1px 1px;
+}
+
+#eventtabs .ui-tabs-nav {
+	background: none;
+	padding: 0;
+	border-width: 0 0 1px 0;
+	border-radius: 0;
+}
+
+#eventtabs .border-after {
+	padding-bottom: 0.6em;
+	margin-bottom: 0.6em;
+	border-bottom: 1px solid #999;
+}
+
+#eventshow label,
+#eventedit label,
+.form-section label {
+	display: inline-block;
+	min-width: 7em;
+	padding-right: 0.5em;
+}
+
+#eventedit .formtable td.label {
+	min-width: 6em;
+}
+
+td.topalign {
+	vertical-align: top;
+}
+
+#eventedit label.weekday,
+#eventedit label.monthday {
+	min-width: 3em;
+}
+
+#eventedit label.month {
+	min-width: 5em;
+}
+
+#edit-recurrence-yearly-bymonthblock {
+	margin-left: 7.5em;
+}
+
+#eventedit .recurrence-form {
+	display: none;
+}
+
+#eventedit .formtable td {
+	padding: 0.2em 0;
+}
+
+.ui-dialog .event-update-confirm {
+	padding: 0 0.5em 0.5em 0.5em;
+}
+
+.event-dialog-message,
+.event-update-confirm .message {
+	margin-top: 0.5em;
+	padding: 0.8em;
+	background-color: #F7FDCB;
+	border: 1px solid #C2D071;
+}
+
+.event-dialog-message .message,
+.event-update-confirm .message {
+	margin-bottom: 0.5em;
+}
+
+.edit-recurring-warning .savemode {
+	padding-left: 20px;
+}
+
+.event-update-confirm .savemode {
+	padding-left: 30px;
+}
+
+.event-dialog-message span.ui-icon,
+.event-update-confirm span.ui-icon {
+	float: left;
+	margin: 0 7px 20px 0;
+}
+
+.event-dialog-message label,
+.event-update-confirm label {
+	min-width: 3em;
+	padding-right: 1em;
+}
+
+.event-update-confirm a.button {
+	margin: 0 0.5em 0 0.2em;
+	min-width: 5em;
+}
+
+#event-rsvp,
+#edit-attendees-notify {
+	margin: 0.3em 0;
+	padding: 0.5em;
+	background-color: #F7FDCB;
+	border: 1px solid #C2D071;
+}
+
+#edit-attendees-table {
+	width: 100%;
+	display: table;
+	table-layout: fixed;
+	border-collapse: collapse;
+	border: 1px solid #ccc;
+}
+
+#edit-attendees-table td {
+	padding: 3px;
+	border-bottom: 1px solid #ccc;
+}
+
+#edit-attendees-table td.role {
+	width: 8em;
+}
+
+#edit-attendees-table td.availability,
+#edit-attendees-table td.confirmstate {
+	width: 4em;
+}
+
+#edit-attendees-table td.options {
+	width: 3em;
+	text-align: right;
+	padding-right: 4px;
+}
+
+#edit-attendees-table td.name {
+	width: auto;
+	white-space: nowrap;
+	overflow: hidden;
+	text-overflow: ellipsis;
+}
+
+#edit-attendees-table thead td {
+	background: url(images/listheader.gif) top left repeat-x #CCC;
+}
+
+#edit-attendees-form {
+	position: relative;
+	margin-top: 1em;
+}
+
+#edit-attendees-form #edit-attendee-schedule {
+	position: absolute;
+	top: 0;
+	right: 0;
+}
+
+#edit-attendees-table select.edit-attendee-role {
+	border: 0;
+	padding: 2px;
+	background: white;
+}
+
+.availability img.availabilityicon {
+	margin: 1px;
+	width: 14px;
+	height: 14px;
+	border-radius: 4px;
+	-moz-border-radius: 4px;
+}
+
+.availability img.availabilityicon.loading {
+	background: url(images/loading_blue.gif) center no-repeat;
+}
+
+#schedule-freebusy-times td.unknown,
+.availability img.availabilityicon.unknown {
+	background: #ddd;
+}
+
+#schedule-freebusy-times td.free,
+.availability img.availabilityicon.free {
+	background: #0c0;
+}
+
+#schedule-freebusy-times td.busy,
+.availability img.availabilityicon.busy {
+	background: #c00;
+}
+
+#schedule-freebusy-times td.tentative,
+.availability img.availabilityicon.tentative {
+	background: #66d;
+}
+
+#schedule-freebusy-times td.out-of-office,
+.availability img.availabilityicon.out-of-office {
+	background: #f0b400;
+}
+
+#schedule-freebusy-times td.all-busy,
+#schedule-freebusy-times td.all-tentative,
+#schedule-freebusy-times td.all-out-of-office {
+	background-image: url(images/freebusy-colors.png);
+	background-position: top right;
+	background-repeat: no-repeat;
+}
+
+#schedule-freebusy-times td.all-tentative {
+	background-position: right -40px;
+}
+
+#schedule-freebusy-times td.all-out-of-office {
+	background-position: right -80px;
+}
+
+#edit-attendees-legend {
+	margin-top: 3em;
+	margin-bottom: 0.5em;
+}
+
+#edit-attendees-legend .legend {
+	margin-right: 2em;
+	white-space: nowrap;
+}
+
+#edit-attendees-legend img.availabilityicon {
+	vertical-align: middle;
+}
+
+#edit-attendees-table tbody td.confirmstate {
+	overflow: hidden;
+	white-space: nowrap;
+	text-indent: -2000%;
+}
+
+#edit-attendees-table td.confirmstate span {
+	display: block;
+	width: 20px;
+	background: url(images/attendee-status.gif) 5px 0 no-repeat;
+}
+
+#edit-attendees-table td.confirmstate span.needs-action {
+}
+
+#edit-attendees-table td.confirmstate span.accepted {
+	background-position: 5px -20px;
+}
+
+#edit-attendees-table td.confirmstate span.declined {
+	background-position: 5px -40px;
+}
+
+#edit-attendees-table td.confirmstate span.tentative {
+	background-position: 5px -60px;
+}
+
+#attendees-freebusy-table {
+	width: 100%;
+	table-layout: fixed;
+	border-collapse: collapse;
+	margin: 0.5em 0;
+}
+
+#attendees-freebusy-table td.attendees {
+	width: 18em;
+	border: 1px solid #ccc;
+	vertical-align: top;
+	overflow: hidden;
+}
+
+#attendees-freebusy-table td.times {
+	width: auto;
+	vertical-align: top;
+	border: 1px solid #ccc;
+}
+
+#attendees-freebusy-table div.scroll {
+	position: relative;
+	overflow: auto;
+}
+
+#attendees-freebusy-table h3.boxtitle {
+	margin: 0;
+	height: auto !important;
+	border-color: #ccc;
+}
+
+.attendees-list .attendee {
+	padding: 3px 4px 3px 1px;
+	background: url(images/attendee-status.gif) 2px -97px no-repeat;
+	white-space: nowrap;
+}
+
+.attendees-list a.attendee-role-toggle {
+	display: inline-block;
+	width: 16px;
+	margin-right: 3px;
+	cursor: pointer;
+}
+
+.attendees-list div.attendee {
+	border-top: 1px solid #ccc;
+}
+
+.attendees-list span.attendee {
+	padding-left: 20px;
+	margin-right: 2em;
+}
+
+.attendees-list .organizer {
+	background-position: 3px -77px;
+}
+
+.attendees-list .opt-participant {
+	background-position: 2px -117px;
+}
+
+.attendees-list .chair {
+	background-position: 2px -137px;
+}
+
+.attendees-list .loading {
+	background: url(images/loading_blue.gif) 1px 50% no-repeat;
+}
+
+.attendees-list .total {
+	background: none;
+	padding-left: 4px;
+	font-weight: bold;
+}
+
+.attendees-list .spacer,
+#schedule-freebusy-times tr.spacer td {
+	background: 0;
+	font-size: 50%;
+}
+
+#schedule-freebusy-times {
+	border-collapse: collapse;
+	width: 100%;
+}
+
+#schedule-freebusy-times td {
+	padding: 3px;
+	border: 1px solid #ccc;
+}
+
+#schedule-freebusy-times tr.dates th {
+	border-color: #aaa;
+	border-style: solid;
+	border-width: 0 1px 0 1px;
+	white-space: nowrap;
+}
+
+#attendees-freebusy-table div.timesheader,
+#schedule-freebusy-times tr.times td {
+	min-width: 30px;
+	font-size: 9px;
+	padding: 5px 2px 6px 2px;
+	text-align: center;
+}
+
+#schedule-freebusy-times tr.times td.allday {
+	min-width: 60px;
+}
+
+#schedule-freebusy-times tr.times td {
+	cursor: pointer;
+}
+
+#schedule-event-time {
+	position: absolute;
+	border: 2px solid #333;
+	background: #777;
+	background: rgba(60, 60, 60, 0.6);
+	opacity: 0.5;
+	border-radius: 4px;
+	cursor: move;
+	filter: alpha(opacity=40); /* IE8 */
+}
+
+#eventfreebusy .schedule-options {
+	position: relative;
+	margin-bottom: 1.5em;
+}
+
+#eventfreebusy .schedule-buttons {
+	position: absolute;
+	top: 0;
+	right: 0;
+}
+
+#eventfreebusy .schedule-find-buttons {
+	padding-bottom:0.5em;
+}
+
+#eventfreebusy .schedule-find-buttons button {
+	min-width: 9em;
+	text-align: center;
+}
+
+span.edit-alarm-set {
+	white-space: nowrap;
+}
+
+a.dropdown-link {
+	color: #CC0000;
+	font-size: 12px;
+	text-decoration: none;
+}
+
+a.dropdown-link:after {
+	content: ' â–¼';
+	font-size: 11px;
+	color: #666;
+}
+
+#eventedit .ui-tabs-panel {
+	min-height: 20em;
+}
+
+.alarm-item {
+	margin: 0.4em 0 1em 0;
+}
+
+.alarm-item .event-title {
+	font-size: 14px;
+	margin: 0.1em 0 0.3em 0;
+}
+
+.alarm-item div.event-section {
+	margin-top: 0.1em;
+	margin-bottom: 0.3em;
+}
+
+.alarm-item .alarm-actions {
+	margin-top: 0.4em;
+}
+
+.alarm-item div.alarm-actions a {
+	color: #CC0000;
+	margin-right: 0.8em;
+	text-decoration: none;
+}
+
+a.alarm-action-snooze:after {
+	content: ' â–¼';
+	font-size: 10px;
+	color: #666;
+}
+
+#alarm-snooze-dropdown {
+	z-index: 5000;
+}
+
+.ui-dialog-buttonset a.dropdown-link {
+	margin-right: 1em;
+}
+
+.ui-datepicker-calendar .ui-datepicker-today .ui-state-default {
+	border-color: #cccccc;
+	background: #ffffcc;
+	color: #000;
+}
+
+.ui-datepicker-calendar .ui-datepicker-week-col {
+	text-align: right;
+	padding-right: 0.5em;
+}
+
+.ui-datepicker th {
+    padding: 0.3em 0;
+    font-size: 10px;
+}
+
+.ui-datepicker td span,
+.ui-datepicker td a {
+	padding-left: 0.1em;
+}
+
+.ui-autocomplete {
+	max-height: 160px;
+	overflow-y: auto;
+	overflow-x: hidden;
+}
+
+.ui-autocomplete .ui-menu-item {
+	white-space: nowrap;
+}
+
+* html .ui-autocomplete {
+	height: 160px;
+}
+
+span.spacer {
+	padding-left: 3em;
+}
+
+#agendaoptions {
+	position: absolute;
+	left: 0;
+	right: 0;
+	bottom: 0;
+	height: auto;
+	z-index: 200;
+	border: 1px solid #ccc;
+	padding: 2px 5px 1px;
+	font-size: 90%;
+}
+
+#agendaoptions label {
+	color: #444;
+	text-shadow: 1px 1px #eee;
+	padding-right: 0.5em;
+}
+
+#calendar-kolabform {
+	position: relative;
+	padding-top: 24px;
+	margin: 0 -8px;
+	min-width: 660px;
+	min-height: 400px;
+}
+
+#calendar-kolabform div.tabsbar {
+	top: 0;
+	right: 2px;
+	left: 2px;
+	height: 24px;
+}
+
+#calendar-kolabform fieldset.tabbed {
+	background-color: #fff;
+	margin-top: 0;
+}
+
+#calendar-kolabform span.tablink {
+	background-color: #e8e8e9;
+	background-image: -moz-linear-gradient(center top, #f4f4f4, #e6e6e6);
+	background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0.0, #f4f4f4), color-stop(1.0, #e6e6e6));
+	filter: progid:DXImageTransform.Microsoft.gradient(enabled='true', startColorstr=#f4f4f4, endColorstr=#e6e6e6, GradientType=0);
+	height: 24px !important;
+}
+
+#calendar-kolabform span.tablink-selected {
+	background: #fff;
+	height: 25px !important;
+}
+
+#calendar-kolabform span.tablink a,
+#calendar-kolabform span.tablink-selected a {
+	background: none;
+	border: 1px solid #AAAAAA;
+	border-top-left-radius: 2px;
+	border-top-right-radius: 2px;
+	padding: 4px 10px 0 10px;
+	margin-left: 0;
+}
+
+#calendar-kolabform table td.title {
+  font-weight: bold;
+  white-space: nowrap;
+  color: #666;
+  padding-right: 10px;
+}
+
+
+/* fullcalendar style overrides */
+
+.rcube-fc-content {
+	position: absolute !important;
+	top: 37px;
+	left: 0;
+	right: 0;
+	bottom: 0;
+	overflow: hidden;
+}
+
+.fc-event-title {
+	font-weight: bold;
+}
+
+.fc-event-hori .fc-event-title {
+	font-weight: normal;
+	white-space: nowrap;
+}
+
+.fc-event-hori .fc-event-time {
+	white-space: nowrap;
+	font-weight: normal !important;
+	font-size: 10px;
+	padding-right: 0.6em;
+}
+
+.fc-grid .fc-event-time {
+	font-weight: normal !important;
+	padding-right: 0.3em;
+}
+
+.fc-event-cateories {
+	font-style:italic; 
+}
+
+div.fc-event-location {
+	font-size: 90%;
+}
+
+.fc-more-link {
+	color: #999;
+	padding-top: 1px;
+	cursor: pointer;
+}
+
+.fc-agenda-slots td div {
+	height: 22px;
+}
+
+.fc-mon, .fc-tue, .fc-wed, .fc-thu, .fc-fri {
+	background-color: #fdfdfd;
+}
+
+.fc-widget-header {
+	background-color: #fff;
+}
+
+.fc-icon-alarms,
+.fc-icon-sensitive,
+.fc-icon-recurring {
+	display: inline-block;
+	width: 11px;
+	height: 11px;
+	background: url(images/eventicons.gif) 0 0 no-repeat;
+	margin-left: 3px;
+	line-height: 10px;
+}
+
+.fc-icon-alarms {
+	background-position: 0 -13px;
+}
+
+.fc-icon-sensitive {
+	background-position: 0 -25px;
+}
+
+.fc-list-section .fc-event {
+	cursor: pointer;
+}
+
+.fc-view-list div.fc-list-header,
+.fc-view-table td.fc-list-header,
+#edit-attendees-table thead td {
+	padding: 3px;
+	background: #dddddd;
+	background-image: -moz-linear-gradient(center top, #f4f4f4, #d2d2d2);
+	background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0.00, #f4f4f4), color-stop(1.00, #d2d2d2));
+	filter: progid:DXImageTransform.Microsoft.gradient(enabled='true', startColorstr=#f4f4f4, endColorstr=#d2d2d2, GradientType=0);
+	font-weight: bold;
+	color: #333;
+}
+
+.fc-view-list .fc-event-skin .fc-event-content {
+	background: #F6F6F6;
+	padding: 2px;
+}
+
+.fc-view-list .fc-event-skin .fc-event-title,
+.fc-view-list .fc-event-skin .fc-event-location {
+	color: #333;
+}
+
+.fc-view-table col.fc-event-location {
+	width: 20%;
+}
+
+.fc-listappend {
+	text-align: center;
+	margin: 1em 0;
+}
+
+.fc-listappend .message {
+	padding: 0.5em;
+	margin-bottom: 0.5em;
+	font-size: 150%;
+	color: #999;
+}
+
+.fc-listappend .formlinks a {
+	font-size: 12px;
+	padding: 0 0.3em;
+}
+
+.fc-event-temp {
+	opacity: 0.4;
+	filter: alpha(opacity=40); /* IE8 */
+}
+
+/* Settings section */
+
+fieldset #calendarcategories div {
+	margin-bottom: 0.3em;
+}
+
+/* Invitation UI in mail */
+
+#messagemenu li a.calendarlink {
+	background-image: url(images/calendars.png);
+	background-position: 7px -109px;
+	background-repeat: no-repeat;
+}
+
+div.calendar-invitebox {
+	min-height: 20px;
+	margin: 5px 8px;
+	padding: 3px 6px 6px 34px;
+	border: 1px solid #C2D071;
+	background: url(images/calendar.png) 6px 5px no-repeat #F7FDCB;
+}
+
+div.calendar-invitebox td.ititle {
+	font-weight: bold;
+	padding-right: 0.5em;
+}
+
+div.calendar-invitebox td.label {
+	color: #666;
+	padding-right: 1em;
+}
+
+#event-rsvp .rsvp-buttons,
+div.calendar-invitebox .rsvp-status,
+div.calendar-invitebox .rsvp-buttons {
+	margin-top: 0.5em;
+}
+
+#event-rsvp input.button,
+div.calendar-invitebox input.button,
+div.calendar-invitebox select {
+	font-size: 11px;
+	margin-right: 0.5em;
+}
+
+div.calendar-invitebox .calendar-select {
+	font-size: 11px;
+	margin-left: 1em;
+}
+
+div.calendar-invitebox .rsvp-status.loading {
+	color: #666;
+	padding: 1px 0 2px 24px;
+	background: url(images/loading_blue.gif) top left no-repeat;
+}
+
+div.calendar-invitebox .rsvp-status.declined,
+div.calendar-invitebox .rsvp-status.tentative,
+div.calendar-invitebox .rsvp-status.accepted {
+	padding: 0 0 1px 22px;
+	background: url(images/attendee-status.gif) 2px -20px no-repeat;
+}
+
+div.calendar-invitebox .rsvp-status.declined {
+	background-position: 2px -40px;
+}
+
+div.calendar-invitebox .rsvp-status.tentative {
+	background-position: 2px -60px;
+}
+
+/* iTIP attend reply page */
+
+.calendaritipattend .centerbox {
+	width: 40em;
+	margin: 80px auto;
+	padding: 10px 10px 10px 90px;
+	border: 1px solid #ccc;
+	box-shadow: 1px 1px 24px #ccc;
+	-moz-box-shadow: 1px 1px 18px #ccc;
+	-webkit-box-shadow: #ccc 1px 1px 18px;
+	background: url(images/invitation.png) 10px 10px no-repeat #fbfbfb;
+}
+
+.calendaritipattend .calendar-invitebox {
+	background: none;
+	padding-left: 0;
+	border: 0;
+	margin: 0 0 2em 0;
+}
+
+.calendaritipattend .calendar-invitebox .rsvp-status {
+	margin-top: 2.5em;
+	font-size: 110%;
+	font-weight: bold;
+}
+
+.calendaritipattend .calendar-invitebox td.title,
+.calendaritipattend .calendar-invitebox td.ititle {
+	font-size: 120%;
+}
+
diff --git a/plugins/calendar/skins/classic/fullcalendar.css b/plugins/calendar/skins/classic/fullcalendar.css
new file mode 100644
index 0000000..17f1b37
--- /dev/null
+++ b/plugins/calendar/skins/classic/fullcalendar.css
@@ -0,0 +1,724 @@
+/*
+ * FullCalendar v1.5.3-rcube-0.7.1 Stylesheet
+ *
+ * Copyright (c) 2011 Adam Shaw
+ * Copyright (c) 2011, Kolab Systems AG
+ * Dual licensed under the MIT and GPL licenses, located in
+ * MIT-LICENSE.txt and GPL-LICENSE.txt respectively.
+ *
+ * Date: Mon Feb 13 23:00:46 2012 +0100
+ *
+ */
+
+
+.fc {
+	direction: ltr;
+	text-align: left;
+	}
+	
+.fc table {
+	border-collapse: collapse;
+	border-spacing: 0;
+	}
+	
+html .fc,
+.fc table {
+	font-size: 1em;
+	}
+	
+.fc td,
+.fc th {
+	padding: 0;
+	vertical-align: top;
+	}
+
+
+
+/* Header
+------------------------------------------------------------------------*/
+
+.fc-header td {
+	white-space: nowrap;
+	}
+
+.fc-header-left {
+	width: 25%;
+	text-align: left;
+	}
+	
+.fc-header-center {
+	text-align: center;
+	}
+	
+.fc-header-right {
+	width: 25%;
+	text-align: right;
+	}
+	
+.fc-header-title {
+	display: inline-block;
+	vertical-align: top;
+	}
+	
+.fc-header-title h2 {
+	margin-top: 0;
+	white-space: nowrap;
+	}
+	
+.fc .fc-header-space {
+	padding-left: 10px;
+	}
+	
+.fc-header .fc-button {
+	margin-bottom: 1em;
+	vertical-align: top;
+	}
+	
+/* buttons edges butting together */
+
+.fc-header .fc-button {
+	margin-right: -1px;
+	}
+	
+.fc-header .fc-corner-right {
+	margin-right: 1px; /* back to normal */
+	}
+	
+.fc-header .ui-corner-right {
+	margin-right: 0; /* back to normal */
+	}
+	
+/* button layering (for border precedence) */
+	
+.fc-header .fc-state-hover,
+.fc-header .ui-state-hover {
+	z-index: 2;
+	}
+	
+.fc-header .fc-state-down {
+	z-index: 3;
+	}
+
+.fc-header .fc-state-active,
+.fc-header .ui-state-active {
+	z-index: 4;
+	}
+	
+	
+	
+/* Content
+------------------------------------------------------------------------*/
+	
+.fc-content {
+	clear: both;
+	}
+	
+.fc-view {
+	width: 100%; /* needed for view switching (when view is absolute) */
+	overflow: hidden;
+	}
+	
+	
+
+/* Cell Styles
+------------------------------------------------------------------------*/
+
+.fc-widget-header,    /* <th>, usually */
+.fc-widget-content {  /* <td>, usually */
+	border: 1px solid #ccc;
+	}
+	
+.fc-state-highlight { /* <td> today cell */ /* TODO: add .fc-today to <th> */
+	background: #ffc;
+	}
+	
+.fc-cell-overlay { /* semi-transparent rectangle while dragging */
+	background: #9cf;
+	opacity: .2;
+	filter: alpha(opacity=20); /* for IE */
+	}
+	
+
+
+/* Buttons
+------------------------------------------------------------------------*/
+
+.fc-button {
+	position: relative;
+	display: inline-block;
+	cursor: pointer;
+	}
+	
+.fc-state-default { /* non-theme */
+	border-style: solid;
+	border-width: 1px 0;
+	}
+	
+.fc-button-inner {
+	position: relative;
+	float: left;
+	overflow: hidden;
+	}
+	
+.fc-state-default .fc-button-inner { /* non-theme */
+	border-style: solid;
+	border-width: 0 1px;
+	}
+	
+.fc-button-content {
+	position: relative;
+	float: left;
+	height: 1.9em;
+	line-height: 1.9em;
+	padding: 0 .6em;
+	white-space: nowrap;
+	}
+	
+/* icon (for jquery ui) */
+	
+.fc-button-content .fc-icon-wrap {
+	position: relative;
+	float: left;
+	top: 50%;
+	}
+	
+.fc-button-content .ui-icon {
+	position: relative;
+	float: left;
+	margin-top: -50%;
+	*margin-top: 0;
+	*top: -50%;
+	}
+	
+/* gloss effect */
+	
+.fc-state-default .fc-button-effect {
+	position: absolute;
+	top: 50%;
+	left: 0;
+	}
+	
+.fc-state-default .fc-button-effect span {
+	position: absolute;
+	top: -100px;
+	left: 0;
+	width: 500px;
+	height: 100px;
+	border-width: 100px 0 0 1px;
+	border-style: solid;
+	border-color: #fff;
+	background: #444;
+	opacity: .09;
+	filter: alpha(opacity=9);
+	}
+	
+/* button states (determines colors)  */
+	
+.fc-state-default,
+.fc-state-default .fc-button-inner {
+	border-style: solid;
+	border-color: #ccc #bbb #aaa;
+	background: #F3F3F3;
+	color: #000;
+	}
+	
+.fc-state-hover,
+.fc-state-hover .fc-button-inner {
+	border-color: #999;
+	}
+	
+.fc-state-down,
+.fc-state-down .fc-button-inner {
+	border-color: #555;
+	background: #777;
+	}
+	
+.fc-state-active,
+.fc-state-active .fc-button-inner {
+	border-color: #555;
+	background: #777;
+	color: #fff;
+	}
+	
+.fc-state-disabled,
+.fc-state-disabled .fc-button-inner {
+	color: #999;
+	border-color: #ddd;
+	}
+	
+.fc-state-disabled {
+	cursor: default;
+	}
+	
+.fc-state-disabled .fc-button-effect {
+	display: none;
+	}
+	
+	
+
+/* Global Event Styles
+------------------------------------------------------------------------*/
+	 
+.fc-event {
+	border-style: solid;
+	border-width: 0;
+	font-size: .85em;
+	cursor: default;
+	}
+	
+a.fc-event,
+.fc-event-draggable {
+	cursor: pointer;
+	}
+	
+a.fc-event {
+	text-decoration: none;
+	}
+	
+.fc-rtl .fc-event {
+	text-align: right;
+	}
+	
+.fc-event-skin {
+	border-color: #36c;     /* default BORDER color */
+	background-color: #36c; /* default BACKGROUND color */
+	color: #fff;            /* default TEXT color */
+	}
+	
+.fc-event-inner {
+	position: relative;
+	width: 100%;
+	height: 100%;
+	border-style: solid;
+	border-width: 0;
+	overflow: hidden;
+	}
+	
+.fc-event-time,
+.fc-event-title {
+	padding: 0 1px;
+	}
+	
+.fc .ui-resizable-handle { /*** TODO: don't use ui-resizable anymore, change class ***/
+	display: block;
+	position: absolute;
+	z-index: 99999;
+	overflow: hidden; /* hacky spaces (IE6/7) */
+	font-size: 300%;  /* */
+	line-height: 50%; /* */
+	}
+	
+	
+	
+/* Horizontal Events
+------------------------------------------------------------------------*/
+
+.fc-event-hori {
+	border-width: 1px 0;
+	margin-bottom: 1px;
+	}
+	
+/* resizable */
+	
+.fc-event-hori .ui-resizable-e {
+	top: 0           !important; /* importants override pre jquery ui 1.7 styles */
+	right: -3px      !important;
+	width: 7px       !important;
+	height: 100%     !important;
+	cursor: e-resize;
+	}
+	
+.fc-event-hori .ui-resizable-w {
+	top: 0           !important;
+	left: -3px       !important;
+	width: 7px       !important;
+	height: 100%     !important;
+	cursor: w-resize;
+	}
+	
+.fc-event-hori .ui-resizable-handle {
+	_padding-bottom: 14px; /* IE6 had 0 height */
+	}
+	
+	
+	
+/* Fake Rounded Corners (for buttons and events)
+------------------------------------------------------------*/
+	
+.fc-corner-left {
+	margin-left: 1px;
+	}
+	
+.fc-corner-left .fc-button-inner,
+.fc-corner-left .fc-event-inner {
+	margin-left: -1px;
+	}
+	
+.fc-corner-right {
+	margin-right: 1px;
+	}
+	
+.fc-corner-right .fc-button-inner,
+.fc-corner-right .fc-event-inner {
+	margin-right: -1px;
+	}
+	
+.fc-corner-top {
+	margin-top: 1px;
+	}
+	
+.fc-corner-top .fc-event-inner {
+	margin-top: -1px;
+	}
+	
+.fc-corner-bottom {
+	margin-bottom: 1px;
+	}
+	
+.fc-corner-bottom .fc-event-inner {
+	margin-bottom: -1px;
+	}
+	
+	
+	
+/* Fake Rounded Corners SPECIFICALLY FOR EVENTS
+-----------------------------------------------------------------*/
+	
+.fc-corner-left .fc-event-inner {
+	border-left-width: 1px;
+	}
+	
+.fc-corner-right .fc-event-inner {
+	border-right-width: 1px;
+	}
+	
+.fc-corner-top .fc-event-inner {
+	border-top-width: 1px;
+	}
+	
+.fc-corner-bottom .fc-event-inner {
+	border-bottom-width: 1px;
+	}
+	
+	
+	
+/* Reusable Separate-border Table
+------------------------------------------------------------*/
+
+table.fc-border-separate {
+	border-collapse: separate;
+	}
+	
+.fc-border-separate th,
+.fc-border-separate td {
+	border-width: 1px 0 0 1px;
+	}
+	
+.fc-border-separate th.fc-last,
+.fc-border-separate td.fc-last {
+	border-right-width: 1px;
+	}
+	
+.fc-border-separate tr.fc-last th,
+.fc-border-separate tr.fc-last td {
+	border-bottom-width: 1px;
+	}
+	
+.fc-border-separate tbody tr.fc-first td,
+.fc-border-separate tbody tr.fc-first th {
+	border-top-width: 0;
+	}
+	
+	
+
+/* Month View, Basic Week View, Basic Day View
+------------------------------------------------------------------------*/
+
+.fc-grid th {
+	text-align: center;
+	}
+	
+.fc-grid .fc-day-number {
+	float: right;
+	padding: 0 2px;
+	}
+	
+.fc-grid .fc-other-month .fc-day-number {
+	opacity: 0.3;
+	filter: alpha(opacity=30); /* for IE */
+	/* opacity with small font can sometimes look too faded
+	   might want to set the 'color' property instead
+	   making day-numbers bold also fixes the problem */
+	}
+	
+.fc-grid .fc-day-content {
+	clear: both;
+	padding: 2px 2px 1px; /* distance between events and day edges */
+	}
+	
+/* event styles */
+	
+.fc-grid .fc-event-time {
+	font-weight: bold;
+	}
+	
+/* right-to-left */
+	
+.fc-rtl .fc-grid .fc-day-number {
+	float: left;
+	}
+	
+.fc-rtl .fc-grid .fc-event-time {
+	float: right;
+	}
+	
+.fc-more-link {
+	font-size: 0.85em;
+	white-space: nowrap;
+	text-decoration: none;
+	cursor: pointer;
+	padding: 1px;
+}
+
+/* Agenda Week View, Agenda Day View
+------------------------------------------------------------------------*/
+
+.fc-agenda table {
+	border-collapse: separate;
+	}
+	
+.fc-agenda-days th {
+	text-align: center;
+	}
+	
+.fc-agenda .fc-agenda-axis {
+	width: 50px;
+	padding: 0 4px;
+	vertical-align: middle;
+	text-align: right;
+	white-space: nowrap;
+	font-weight: normal;
+	}
+	
+.fc-agenda .fc-day-content {
+	padding: 2px 2px 1px;
+	}
+	
+/* make axis border take precedence */
+	
+.fc-agenda-days .fc-agenda-axis {
+	border-right-width: 1px;
+	}
+	
+.fc-agenda-days .fc-col0 {
+	border-left-width: 0;
+	}
+	
+/* all-day area */
+	
+.fc-agenda-allday th {
+	border-width: 0 1px;
+	}
+	
+.fc-agenda-allday .fc-day-content {
+	min-height: 34px; /* TODO: doesnt work well in quirksmode */
+	_height: 34px;
+	}
+	
+/* divider (between all-day and slots) */
+	
+.fc-agenda-divider-inner {
+	height: 2px;
+	overflow: hidden;
+	}
+	
+.fc-widget-header .fc-agenda-divider-inner {
+	background: #eee;
+	}
+	
+/* slot rows */
+	
+.fc-agenda-slots th {
+	border-width: 1px 1px 0;
+	}
+	
+.fc-agenda-slots td {
+	border-width: 1px 0 0;
+	background: none;
+	}
+	
+.fc-agenda-slots td div {
+	height: 20px;
+	}
+	
+.fc-agenda-slots tr.fc-slot0 th,
+.fc-agenda-slots tr.fc-slot0 td {
+	border-top-width: 0;
+	}
+
+.fc-agenda-slots tr.fc-minor th,
+.fc-agenda-slots tr.fc-minor td {
+	border-top-style: dotted;
+	}
+	
+.fc-agenda-slots tr.fc-minor th.ui-widget-header {
+	*border-top-style: solid; /* doesn't work with background in IE6/7 */
+	}
+	
+
+
+/* Vertical Events
+------------------------------------------------------------------------*/
+
+.fc-event-vert {
+	border-width: 0 1px;
+	}
+	
+.fc-event-vert .fc-event-head,
+.fc-event-vert .fc-event-content {
+	position: relative;
+	z-index: 2;
+	width: 100%;
+	overflow: hidden;
+	}
+	
+.fc-event-vert .fc-event-time {
+	white-space: nowrap;
+	font-size: 10px;
+	}
+	
+.fc-event-vert .fc-event-bg { /* makes the event lighter w/ a semi-transparent overlay  */
+	position: absolute;
+	z-index: 1;
+	top: 0;
+	left: 0;
+	width: 100%;
+	height: 100%;
+	background: #fff;
+	opacity: .3;
+	filter: alpha(opacity=30);
+	}
+	
+.fc .ui-draggable-dragging .fc-event-bg, /* TODO: something nicer like .fc-opacity */
+.fc-select-helper .fc-event-bg {
+	display: none\9; /* for IE6/7/8. nested opacity filters while dragging don't work */
+	}
+	
+/* resizable */
+	
+.fc-event-vert .ui-resizable-s {
+	bottom: 0        !important; /* importants override pre jquery ui 1.7 styles */
+	width: 100%      !important;
+	height: 8px      !important;
+	overflow: hidden !important;
+	line-height: 8px !important;
+	font-size: 11px  !important;
+	font-family: monospace;
+	text-align: center;
+	cursor: s-resize;
+	}
+	
+.fc-agenda .ui-resizable-resizing { /* TODO: better selector */
+	_overflow: hidden;
+	}
+	
+.fc-timeline {
+	position: absolute;
+	width: 100%;
+	left: 0;
+	margin: 0;
+	padding: 0;
+	border: none;
+	border-top: 2px solid #3ec400;
+	z-index: 999;
+}
+
+/* List view  (by bruederli at kolabsys.com)
+------------------------------------------------------------------------*/
+
+.fc-view-list,
+.fc-view-table {
+	border: 1px solid #ccc;
+	width: auto;
+}
+
+.fc-view-list .fc-list-header,
+.fc-view-table td.fc-list-header {
+	border-width: 0;
+	border-bottom-width: 1px;
+	padding: 3px 5px;
+}
+
+.fc-view-table .fc-first td.fc-list-header {
+	border-top-width: 0;
+}
+
+.fc-list-section {
+	padding: 4px 2px;
+	border-width: 0;
+	border-bottom-width: 1px;
+}
+
+.fc-view-list .fc-last {
+	border-bottom-width: 0;
+}
+
+.fc-list-section .fc-event {
+	position: relative;
+	margin: 1px 2px 3px 2px;
+}
+
+.fc-view-table tr.fc-event td {
+	padding: 2px;
+	border-bottom: 1px solid #ccc;
+}
+
+.fc-view-table tr.fc-event td.fc-event-handle {
+	padding: 3px 8px 3px 3px;
+}
+
+.fc-view-table .fc-event-handle .fc-event-skin {
+	border-radius: 2px;
+	-moz-border-radius: 2px;
+}
+
+.fc-view-table .fc-event-handle .fc-event-inner {
+	display: block;
+	width: 8px;
+	height: 10px;
+	border-radius: 2px;
+	-moz-border-radius: 2px;
+}
+
+.fc-view-table table {
+	table-layout: fixed;
+	width: 100%;
+}
+
+.fc-view-table col.fc-event-handle {
+	width: 18px;
+}
+
+.fc-event-handle .fc-event-inner {
+	border-color: inherit;
+	background-color: inherit;
+}
+
+.fc-view-table col.fc-event-date {
+	width: 7em;
+}
+
+.fc-view-table .fc-list-day col.fc-event-date {
+	width: 1px;
+}
+
+.fc-view-table col.fc-event-time {
+	width: 8em;
+}
+
+.fc-view-table td.fc-event-date,
+.fc-view-table td.fc-event-time {
+	white-space: nowrap;
+	padding-right: 1em;
+}
+
diff --git a/plugins/calendar/skins/classic/iehacks.css b/plugins/calendar/skins/classic/iehacks.css
new file mode 100644
index 0000000..831266f
--- /dev/null
+++ b/plugins/calendar/skins/classic/iehacks.css
@@ -0,0 +1,88 @@
+/* CSS hacks for IE 6/7 */
+
+#main {
+	width: expression(Math.max(300, parseInt(document.documentElement.clientWidth)-10)+'px');
+	height: expression(Math.max(300, parseInt(document.documentElement.clientHeight)-100)+'px');
+}
+
+#sidebar,
+#sidebartoggle {
+	height: expression((parseInt(this.parentNode.offsetHeight)-37)+'px');
+}
+
+#calendar {
+	width: expression((parseInt(this.parentNode.offsetWidth)-parseInt(document.getElementById('sidebartoggle').offsetWidth)-parseInt(document.getElementById('sidebartoggle').offsetLeft)-4)+'px');
+	height: expression(parseInt(this.parentNode.offsetHeight)+'px');
+}
+
+#calendars {
+	height: expression((parseInt(this.parentNode.offsetHeight)-220)+'px');
+}
+
+#agendaoptions {
+	width: expression((parseInt(this.parentNode.offsetWidth)-12)+'px');
+}
+
+#calendartoolbar a.buttonPas {
+	filter: alpha(opacity=35);
+}
+
+html #calendartoolbar a.button,
+html #calendartoolbar a.buttonPas {
+	background-image: url(images/toolbar.gif);
+}
+
+#datepicker a.ui-priority-secondary {
+	filter: alpha(opacity=40);
+}
+
+#calendarslist li span {
+	background-image: url(images/calendars.gif);
+}
+
+#datepicker .ui-widget-header {
+	width: 102%;
+}
+
+#eventshow.sensitivity-private {
+	background-image: url(images/badge_private.gif);
+}
+
+#eventshow.sensitivity-confidential {
+	background-image: url(images/badge_confidential.gif);
+}
+
+.fc-day-content {
+	cursor: default;
+}
+
+.fc-header-title h2 {
+	font-size: 16px;
+}
+
+.fc-event-temp .fc-event-bg {
+	display: none; /* nested opacity filters while dragging don't work */
+}
+
+#schedule-event-time {
+	filter: alpha(opacity=40);
+}
+
+#eventfreebusy .schedule-buttons,
+#edit-attendees-form #edit-attendee-schedule {
+	right: 0.6em;
+}
+
+#schedule-freebusy-times td.all-busy,
+#schedule-freebusy-times td.all-tentative,
+#schedule-freebusy-times td.all-out-of-office {
+	background-image: url('images/freebusy-colors.gif');
+}
+
+#schedule-freebusy-times tr.times td.allday {
+	width: expression(Math.max(60, parseInt(this.offsetWidth))+'px');
+}
+
+.ui-dialog .ui-dialog-titlebar {
+	width: expression((parseInt(this.parentNode.offsetWidth)-26)+'px');
+}
diff --git a/plugins/calendar/skins/classic/images/attendee-status.gif b/plugins/calendar/skins/classic/images/attendee-status.gif
new file mode 100644
index 0000000..5c08aae
Binary files /dev/null and b/plugins/calendar/skins/classic/images/attendee-status.gif differ
diff --git a/plugins/calendar/skins/classic/images/badge_confidential.gif b/plugins/calendar/skins/classic/images/badge_confidential.gif
new file mode 100644
index 0000000..ce6b2a0
Binary files /dev/null and b/plugins/calendar/skins/classic/images/badge_confidential.gif differ
diff --git a/plugins/calendar/skins/classic/images/badge_confidential.png b/plugins/calendar/skins/classic/images/badge_confidential.png
new file mode 100644
index 0000000..e12e788
Binary files /dev/null and b/plugins/calendar/skins/classic/images/badge_confidential.png differ
diff --git a/plugins/calendar/skins/classic/images/badge_private.gif b/plugins/calendar/skins/classic/images/badge_private.gif
new file mode 100644
index 0000000..900ed73
Binary files /dev/null and b/plugins/calendar/skins/classic/images/badge_private.gif differ
diff --git a/plugins/calendar/skins/classic/images/badge_private.png b/plugins/calendar/skins/classic/images/badge_private.png
new file mode 100644
index 0000000..acf3207
Binary files /dev/null and b/plugins/calendar/skins/classic/images/badge_private.png differ
diff --git a/plugins/calendar/skins/classic/images/calendar-blue.png b/plugins/calendar/skins/classic/images/calendar-blue.png
new file mode 100644
index 0000000..95c9452
Binary files /dev/null and b/plugins/calendar/skins/classic/images/calendar-blue.png differ
diff --git a/plugins/calendar/skins/classic/images/calendar.gif b/plugins/calendar/skins/classic/images/calendar.gif
new file mode 100644
index 0000000..4b25de0
Binary files /dev/null and b/plugins/calendar/skins/classic/images/calendar.gif differ
diff --git a/plugins/calendar/skins/classic/images/calendar.png b/plugins/calendar/skins/classic/images/calendar.png
new file mode 100644
index 0000000..caab8a3
Binary files /dev/null and b/plugins/calendar/skins/classic/images/calendar.png differ
diff --git a/plugins/calendar/skins/classic/images/calendars.gif b/plugins/calendar/skins/classic/images/calendars.gif
new file mode 100644
index 0000000..cf12ebd
Binary files /dev/null and b/plugins/calendar/skins/classic/images/calendars.gif differ
diff --git a/plugins/calendar/skins/classic/images/calendars.png b/plugins/calendar/skins/classic/images/calendars.png
new file mode 100644
index 0000000..feb3945
Binary files /dev/null and b/plugins/calendar/skins/classic/images/calendars.png differ
diff --git a/plugins/calendar/skins/classic/images/eventicons.gif b/plugins/calendar/skins/classic/images/eventicons.gif
new file mode 100644
index 0000000..7adbdeb
Binary files /dev/null and b/plugins/calendar/skins/classic/images/eventicons.gif differ
diff --git a/plugins/calendar/skins/classic/images/export.png b/plugins/calendar/skins/classic/images/export.png
new file mode 100644
index 0000000..d02781d
Binary files /dev/null and b/plugins/calendar/skins/classic/images/export.png differ
diff --git a/plugins/calendar/skins/classic/images/freebusy-colors.gif b/plugins/calendar/skins/classic/images/freebusy-colors.gif
new file mode 100644
index 0000000..699f4b9
Binary files /dev/null and b/plugins/calendar/skins/classic/images/freebusy-colors.gif differ
diff --git a/plugins/calendar/skins/classic/images/freebusy-colors.png b/plugins/calendar/skins/classic/images/freebusy-colors.png
new file mode 100644
index 0000000..ca37cd0
Binary files /dev/null and b/plugins/calendar/skins/classic/images/freebusy-colors.png differ
diff --git a/plugins/calendar/skins/classic/images/invitation.png b/plugins/calendar/skins/classic/images/invitation.png
new file mode 100644
index 0000000..f3df83a
Binary files /dev/null and b/plugins/calendar/skins/classic/images/invitation.png differ
diff --git a/plugins/calendar/skins/classic/images/listheader.gif b/plugins/calendar/skins/classic/images/listheader.gif
new file mode 100644
index 0000000..bf77a11
Binary files /dev/null and b/plugins/calendar/skins/classic/images/listheader.gif differ
diff --git a/plugins/calendar/skins/classic/images/loading_blue.gif b/plugins/calendar/skins/classic/images/loading_blue.gif
new file mode 100644
index 0000000..2ea6b19
Binary files /dev/null and b/plugins/calendar/skins/classic/images/loading_blue.gif differ
diff --git a/plugins/calendar/skins/classic/images/minicolors-all.png b/plugins/calendar/skins/classic/images/minicolors-all.png
new file mode 100644
index 0000000..001ed88
Binary files /dev/null and b/plugins/calendar/skins/classic/images/minicolors-all.png differ
diff --git a/plugins/calendar/skins/classic/images/minicolors-handles.gif b/plugins/calendar/skins/classic/images/minicolors-handles.gif
new file mode 100644
index 0000000..9aa9f75
Binary files /dev/null and b/plugins/calendar/skins/classic/images/minicolors-handles.gif differ
diff --git a/plugins/calendar/skins/classic/images/preview.png b/plugins/calendar/skins/classic/images/preview.png
new file mode 100644
index 0000000..75f43aa
Binary files /dev/null and b/plugins/calendar/skins/classic/images/preview.png differ
diff --git a/plugins/calendar/skins/classic/images/print.png b/plugins/calendar/skins/classic/images/print.png
new file mode 100644
index 0000000..52dd67e
Binary files /dev/null and b/plugins/calendar/skins/classic/images/print.png differ
diff --git a/plugins/calendar/skins/classic/images/spacer.gif b/plugins/calendar/skins/classic/images/spacer.gif
new file mode 100644
index 0000000..c749aaf
Binary files /dev/null and b/plugins/calendar/skins/classic/images/spacer.gif differ
diff --git a/plugins/calendar/skins/classic/images/toggle.gif b/plugins/calendar/skins/classic/images/toggle.gif
new file mode 100644
index 0000000..d3be86f
Binary files /dev/null and b/plugins/calendar/skins/classic/images/toggle.gif differ
diff --git a/plugins/calendar/skins/classic/images/toolbar.gif b/plugins/calendar/skins/classic/images/toolbar.gif
new file mode 100644
index 0000000..2cf2693
Binary files /dev/null and b/plugins/calendar/skins/classic/images/toolbar.gif differ
diff --git a/plugins/calendar/skins/classic/images/toolbar.png b/plugins/calendar/skins/classic/images/toolbar.png
new file mode 100644
index 0000000..94beddb
Binary files /dev/null and b/plugins/calendar/skins/classic/images/toolbar.png differ
diff --git a/plugins/calendar/skins/classic/jquery.miniColors.css b/plugins/calendar/skins/classic/jquery.miniColors.css
new file mode 100644
index 0000000..dc7c4a7
--- /dev/null
+++ b/plugins/calendar/skins/classic/jquery.miniColors.css
@@ -0,0 +1,106 @@
+.miniColors-trigger {
+	height: 22px;
+	width: 22px;
+	background: url('images/minicolors-all.png') -170px 0 no-repeat;
+	vertical-align: middle;
+	margin: 0 .25em;
+	display: inline-block;
+	outline: none;
+}
+
+.miniColors-selector {
+	position: absolute;
+	width: 175px;
+	height: 150px;
+	background: #FFF;
+	border: solid 1px #BBB;
+	-moz-box-shadow: 0 0 6px rgba(0, 0, 0, .25);
+	-webkit-box-shadow: 0 0 6px rgba(0, 0, 0, .25);
+	box-shadow: 0 0 6px rgba(0, 0, 0, .25);
+	-moz-border-radius: 5px;
+	-webkit-border-radius: 5px;
+	border-radius: 5px;
+	padding: 5px;
+	z-index: 999999;
+}
+
+.miniColors-selector.black {
+	background: #000;
+	border-color: #000;
+}
+
+.miniColors-colors {
+	position: absolute;
+	top: 5px;
+	left: 5px;
+	width: 150px;
+	height: 150px;
+	background: url('images/minicolors-all.png') top left no-repeat;
+	cursor: crosshair;
+}
+
+.miniColors-hues {
+	position: absolute;
+	top: 5px;
+	left: 160px;
+	width: 20px;
+	height: 150px;
+	background: url('images/minicolors-all.png') -150px 0 no-repeat;
+	cursor: crosshair;
+}
+
+.miniColors-colorPicker {
+	position: absolute;
+	width: 11px;
+	height: 11px;
+	background: url('images/minicolors-all.png') -170px -28px no-repeat;
+}
+
+.miniColors-huePicker {
+	position: absolute;
+	left: -3px;
+	width: 26px;
+	height: 3px;
+	background: url('images/minicolors-all.png') -170px -24px no-repeat;
+	overflow: hidden;
+}
+
+.miniColors-presets {
+	position: absolute;
+	left: 185px;
+	top: 5px;
+	width: 60px;
+}
+
+.miniColors-colorPreset {
+	float: left;
+	width: 18px;
+	height: 15px;
+	margin: 2px;
+	border: 1px solid #333;
+	cursor: pointer;
+}
+
+.miniColors-colorPreset-active {
+	border: 2px dotted #666;
+	margin: 1px;
+}
+
+/* Hacks for IE6/7 */
+
+* html .miniColors-colors {
+	background-image: none;
+	filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='plugins/calendar/skins/default/images/minicolors-all.png', sizingMethod='crop');
+}
+
+* html .miniColors-colorPicker {
+	background: url('images/minicolors-handles.gif') 0 -28px no-repeat;
+}
+
+* html .miniColors-huePicker {
+	background: url('images/minicolors-handles.gif') 0 -24px no-repeat;
+}
+
+* html .miniColors-trigger {
+	background: url('images/minicolors-handles.gif') 0 0 no-repeat;
+}
diff --git a/plugins/calendar/skins/classic/print.css b/plugins/calendar/skins/classic/print.css
new file mode 100644
index 0000000..3c9bd71
--- /dev/null
+++ b/plugins/calendar/skins/classic/print.css
@@ -0,0 +1,208 @@
+/*** Printing styles for Calendar plugin ***/
+
+body {
+	margin: 0;
+	color: #000;
+	background: #fff;
+}
+
+body, td, th, div, p, h3, select, input, textarea {
+	font-family: "Lucida Grande", Verdana, Arial, Helvetica, sans-serif;
+	font-size: 8pt;
+}
+
+#calendar {
+	position: relative;
+	top: 0;
+	left: 0;
+	height: auto;
+	margin: 5em auto 0 auto;
+	overflow: visible;
+}
+
+#calendar .fc-header-right {
+	padding-right: 0;
+}
+
+#printconfig {
+	position: fixed;
+	top: 0;
+	left: 0;
+	width: 100%;
+	z-index: 10000;
+	padding: 0.5em;
+	background: #ebebeb;
+	border-bottom: 1px solid #999;
+	box-shadow: 0 3px 4px #ccc;
+	-moz-box-shadow: 0 3px 4px #ccc;
+	-webkit-box-shadow: 0 3px 4px #ccc;
+}
+
+#printconfig .prop {
+	padding-right: 2em;
+}
+
+#message {
+	position: absolute;
+	top: 5.5em;
+	left: 1em;
+}
+
+#message div.loading {
+	color: #666;
+	font-style: italic;
+}
+
+#calendarlist {
+	list-style-type: square;
+	margin: 2em 0;
+	padding-left: 1em;
+}
+
+#calendarlist li {
+	float: left;
+	padding-left: 0;
+	padding-right: 3em;
+	margin-left: 0;
+	font-weight: bold;
+}
+
+#calendarlist input {
+	display: none;
+}
+
+.calwidth {
+	width: 700px;
+	margin: 0 auto;
+}
+
+.rightalign {
+	float: right;
+	padding-top: 0.3em;
+}
+
+ at media print {
+	.noprint,
+	.fc-header-right span {
+		display: none;
+	}
+	
+	#calendar {
+		margin-top: 0;
+	}
+}
+
+/* fullcalendar style overrides */
+
+.fc-view {
+	overflow: visible;
+}
+
+.fc-event-skin,
+.fc-event-inner .fc-event-skin {
+	color: black;
+	background-color: #fff !important;
+}
+
+.fc-event-title {
+	font-weight: bold;
+}
+
+.fc-event-hori .fc-event-title {
+	font-weight: normal;
+	white-space: nowrap;
+}
+
+.fc-event-hori .fc-event-time {
+	white-space: nowrap;
+	font-weight: normal !important;
+	font-size: 10px;
+	padding-right: 0.6em;
+}
+
+.fc-grid .fc-event-time {
+	font-weight: normal !important;
+	padding-right: 0.3em;
+}
+
+.fc-event-cateories {
+	font-style: italic;
+}
+
+div.fc-event-location {
+	font-size: 90%;
+}
+
+.fc-agenda-slots td div {
+	height: 1.4em;
+}
+
+.fc-widget-header,
+.fc-mon, .fc-tue, .fc-wed, .fc-thu, .fc-fri {
+	background-color: #fff;
+}
+
+.fc-widget-header, .fc-widget-content {
+	border-color: #ccc;
+}
+
+.fc-icon-alarms,
+.fc-icon-recurring {
+	display: inline-block;
+	width: 11px;
+	height: 11px;
+	background: url('images/eventicons.gif') 0 0 no-repeat;
+	margin-left: 3px;
+	line-height: 10px;
+}
+
+.fc-icon-alarms {
+	background-position: 0 -13px;
+}
+
+.fc-view-list, .fc-view-table {
+	border: 0;
+}
+
+.fc-view-list div.fc-list-header,
+.fc-view-table td.fc-list-header {
+	padding: 0.3em;
+	background: #fff;
+	font-weight: bold;
+	font-size: 1.2em;
+	color: #333;
+	border-color: #333;
+	border-style: solid;
+	border-width: 1px 0;
+	filter: none;
+}
+
+.fc-list-section .fc-event {
+	cursor: auto;
+}
+
+.fc-view-table tr.fc-event td,
+.fc-view-table tr.fc-event td.fc-event-handle {
+	border-color: #999;
+	padding-top: 0.5em;
+	padding-bottom: 0.5em;
+}
+
+.fc-view-table tr.fc-last td {
+	border: 0;
+}
+
+.fc-view-table tr.fc-event .fc-event-description {
+	padding-left: 2em;
+	padding-top: 0em;
+}
+
+.fc-event-vert .fc-event-description {
+	font-size: 90%;
+	font-style: italic;
+}
+
+
+.fc-view-table col.fc-event-location {
+	width: 20%;
+}
diff --git a/plugins/calendar/skins/classic/print.iehacks.css b/plugins/calendar/skins/classic/print.iehacks.css
new file mode 100644
index 0000000..986f004
--- /dev/null
+++ b/plugins/calendar/skins/classic/print.iehacks.css
@@ -0,0 +1,25 @@
+/* CSS hacks for IE 6/7 */
+
+#calendar {
+	top: 5em;
+}
+
+.calwidth {
+	width: 172mm;
+}
+
+.fc-header-title h2 {
+	font-size: 16px;
+}
+
+#calendarlist li {
+	float: none;
+	padding: 0;
+	margin-left: 1em;
+}
+
+ at media print {
+	#calendar {
+		top: 0;
+	}
+}
\ No newline at end of file
diff --git a/plugins/calendar/skins/classic/templates/attachment.html b/plugins/calendar/skins/classic/templates/attachment.html
new file mode 100644
index 0000000..34d4da6
--- /dev/null
+++ b/plugins/calendar/skins/classic/templates/attachment.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+</head>
+<body class="extwin">
+
+<roundcube:include file="/includes/header.html" />
+
+<div id="partheader">
+<roundcube:object name="plugin.attachmentcontrols" cellpadding="2" cellspacing="0" />
+
+<div style="position:absolute; top:2px; right:0; width:12em; text-align:right">
+  [<a href="#close" class="closelink" onclick="self.close()"><roundcube:label name="close" /></a>]
+</div>
+</div>
+
+
+<div id="attachmentcontainer">
+<roundcube:object name="plugin.attachmentframe" id="attachmentframe" width="100%" height="100%" />
+</div>
+
+</body>
+</html>
+
diff --git a/plugins/calendar/skins/classic/templates/calendar.html b/plugins/calendar/skins/classic/templates/calendar.html
new file mode 100644
index 0000000..a22056d
--- /dev/null
+++ b/plugins/calendar/skins/classic/templates/calendar.html
@@ -0,0 +1,201 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+<script type="text/javascript" src="/functions.js"></script>
+<!--[if lte IE 7]><link rel="stylesheet" type="text/css" href="./plugins/calendar/skins/default/iehacks.css" /><![endif]-->
+</head>
+<body class="calendarmain">
+
+<roundcube:include file="/includes/taskbar.html" />
+<roundcube:include file="/includes/header.html" />
+
+<div id="main">
+  <div id="calendarsidebar">
+    <div id="datepicker"></div>
+    <div id="calendars" style="visibility:hidden">
+      <div class="boxtitle"><roundcube:label name="calendar.calendars" /></div>
+      <div class="boxlistcontent">
+      <roundcube:object name="plugin.calendar_list" id="calendarslist" />
+      </div>
+      <div class="boxfooter">
+        <roundcube:button command="calendar-create" type="link" title="calendar.createcalendar" class="buttonPas addgroup" classAct="button addgroup" content=" " />
+        <roundcube:button name="calendaroptionslink" id="calendaroptionslink" type="link" title="calendaractions" class="button groupactions" onclick="rcmail_ui.show_popup('calendaroptions');return false" content=" " />
+      </div>
+    </div>
+  </div>
+  <div id="calendarsidebartoggle"></div>
+  <div id="calendar">
+    <roundcube:object name="plugin.angenda_options" class="boxfooter" id="agendaoptions" />
+  </div>
+</div>
+
+<div id="calendaroptionsmenu" class="popupmenu">
+  <ul>
+    <li><roundcube:button command="calendar-edit" label="calendar.edit" classAct="active" /></li>
+    <li><roundcube:button command="calendar-remove" label="calendar.remove" classAct="active" /></li>
+    <li><roundcube:button command="events-import" label="calendar.importevents" classAct="active" /></li>
+    <li><roundcube:button command="calendar-showurl" label="calendar.showurl" classAct="active" /></li>
+    <roundcube:if condition="env:calendar_driver == 'kolab'" />
+    <li class="separator_above"><roundcube:button command="folders" task="settings" type="link" label="managefolders" classAct="active" /></li>
+    <roundcube:endif />
+  </ul>
+</div>
+
+<div id="eventshow" class="uidialog">
+  <h1 id="event-title">Event Title</h1>
+  <div class="event-section" id="event-location">Location</div>
+  <div class="event-section" id="event-date">From-To</div>
+  <div class="event-section" id="event-description">
+    <h5 class="label"><roundcube:label name="calendar.description" /></h5>
+    <div class="event-text"></div>
+  </div>
+  <div class="event-section" id="event-repeat">
+    <h5 class="label"><roundcube:label name="calendar.repeat" /></h5>
+    <div class="event-text"></div>
+  </div>
+  <div class="event-section" id="event-alarm">
+    <h5 class="label"><roundcube:label name="calendar.alarms" /></h5>
+    <div class="event-text"></div>
+  </div>
+  <div class="event-section" id="event-attendees">
+    <h5 class="label"><roundcube:label name="calendar.tabattendees" /></h5>
+    <div class="event-text"></div>
+  </div>
+  <div class="event-line" id="event-calendar">
+    <label><roundcube:label name="calendar.calendar" /></label>
+    <span class="event-text">Default</span>
+  </div>
+  <div class="event-line" id="event-category">
+    <label><roundcube:label name="calendar.category" /></label>
+    <span class="event-text"></span>
+  </div>
+  <div class="event-line" id="event-free-busy">
+    <label><roundcube:label name="calendar.freebusy" /></label>
+    <span class="event-text"></span>
+  </div>
+  <div class="event-line" id="event-priority">
+    <label><roundcube:label name="calendar.priority" /></label>
+    <span class="event-text"></span>
+  </div>
+  <div class="event-line" id="event-sensitivity">
+    <label><roundcube:label name="calendar.sensitivity" /></label>
+    <span class="event-text"></span>
+  </div>
+  <div class="event-section" id="event-attachments">
+    <label><roundcube:label name="attachments" /></label>
+    <div class="event-text attachments-list"></div>
+  </div>
+  
+  <roundcube:object name="plugin.event_rsvp_buttons" id="event-rsvp" style="display:none" />
+</div>
+
+<roundcube:include file="/templates/eventedit.html" />
+
+<div id="eventfreebusy" class="uidialog">
+  <roundcube:object name="plugin.attendees_freebusy_table" id="attendees-freebusy-table" cellspacing="0" cellpadding="0" border="0" />
+  
+  <div class="schedule-options">
+     
+    <div class="schedule-buttons">
+      <button id="shedule-freebusy-prev" title="<roundcube:label name='previouspage' />">◄</button><button id="shedule-freebusy-next" title="<roundcube:label name='nextpage' />">►</button>
+    </div>
+  </div>
+  
+  <div style="float:left; width:28em">
+    <div class="form-section">
+      <label for="schedule-startdate"><roundcube:label name="calendar.start" /></label>
+      <input type="text" name="startdate" size="10" id="schedule-startdate" disabled="true" />  
+      <input type="text" name="starttime" size="6" id="schedule-starttime" disabled="true" />
+    </div>
+    <div class="form-section">
+      <label for="schedule-enddate"><roundcube:label name="calendar.end" /></label>
+      <input type="text" name="enddate" size="10" id="schedule-enddate" disabled="true" />  
+      <input type="text" name="endtime" size="6"  id="schedule-endtime" disabled="true" />
+    </div>
+  </div>
+  <div style="float:left">
+    <div class="schedule-find-buttons">
+      <button id="shedule-find-prev">◄ <roundcube:label name="calendar.prevslot" /></button>
+      <button id="shedule-find-next"><roundcube:label name="calendar.nextslot" /> ►</button>
+    </div>
+    <div class="schedule-options">
+      <label><input type="checkbox" id="schedule-freebusy-workinghours" value="1" /><roundcube:label name="calendar.onlyworkinghours" /></label>
+    </div>
+  </div>
+  <br style="clear:both;" />
+  
+  <roundcube:include file="/templates/freebusylegend.html" />
+  <div class="attendees-list">
+    <span class="attendee organizer"><roundcube:label name="calendar.roleorganizer" /></span>
+    <span class="attendee req-participant"><roundcube:label name="calendar.rolerequired" /></span>
+    <span class="attendee opt-participant"><roundcube:label name="calendar.roleoptional" /></span>
+    <span class="attendee chair"><roundcube:label name="calendar.roleresource" /></span>
+  </div>
+</div>
+
+<div id="calendarform" class="uidialog">
+  <roundcube:label name="loading" />
+</div>
+
+<div id="eventsimport" class="uidialog">
+  <roundcube:object name="plugin.events_import_form" id="events-import-form" uploadFieldSize="30" />
+</div>
+
+<div id="calendarurlbox" class="uidialog">
+  <p><roundcube:label name="calendar.showurldescription" /></p>
+  <textarea id="calfeedurl" rows="2" readonly="readonly"></textarea>
+</div>
+
+<div id="alarm-snooze-dropdown" class="popupmenu">
+  <roundcube:object name="plugin.snooze_select" type="ul" />
+</div>
+
+<div id="calendartoolbar">
+  <roundcube:button command="addevent" type="link" class="buttonPas addevent" classAct="button addevent" classSel="button addeventSel" title="calendar.new_event" content=" " />
+  <roundcube:button command="print" type="link" class="buttonPas print" classAct="button print" classSel="button printSel" title="calendar.print" content=" " />
+  <roundcube:button command="export" type="link" class="buttonPas export" classAct="button export" classSel="button exportSel" title="calendar.export" content=" " />
+  <roundcube:container name="toolbar" id="calendartoolbar" />
+</div>
+
+<div id="quicksearchbar">
+<roundcube:button name="searchmenulink" id="searchmenulink" image="/images/icons/glass.png" />
+<roundcube:object name="plugin.searchform" id="quicksearchbox" />
+<roundcube:button command="reset-search" id="searchreset" image="/images/icons/reset.gif" title="resetsearch" />
+</div>
+
+<roundcube:object name="plugin.calendar_css" />
+
+<script type="text/javascript">
+
+// use skin functions to handle popup-menus
+rcube_init_mail_ui();
+rcmail_ui.popups.calendaroptions = { id:'calendaroptionsmenu', above:1, obj:$('#calendaroptionsmenu') };
+
+$(document).ready(function(e){
+  // initialize sidebar toggle
+  $('#calendarsidebartoggle').click(function() {
+    var width = $(this).data('sidebarwidth');
+    var offset = $(this).data('offset');
+    var $sidebar = $('#calendarsidebar'), time = 250;
+    
+    if ($sidebar.is(':visible')) {
+      $sidebar.animate({ left:'-'+(width+10)+'px' }, time, function(){ $('#calendarsidebar').hide(); });
+      $(this).animate({ left:'8px'}, time, function(){ $('#calendarsidebartoggle').addClass('sidebarclosed') });
+      $('#calendar').animate({ left:'20px'}, time, function(){ $(this).fullCalendar('render'); });
+    }
+    else {
+      $sidebar.show().animate({ left:'10px' }, time);
+      $(this).animate({ left:offset+'px'}, time, function(){ $('#calendarsidebartoggle').removeClass('sidebarclosed'); });
+      $('#calendar').animate({ left:(width+16)+'px'}, time, function(){ $(this).fullCalendar('render'); });
+    }
+  })
+  .data('offset', $('#calendarsidebartoggle').position().left)
+  .data('sidebarwidth', $('#calendarsidebar').width() + $('#calendarsidebar').position().left);
+});
+
+</script>
+
+</body>
+</html>
diff --git a/plugins/calendar/skins/classic/templates/eventedit.html b/plugins/calendar/skins/classic/templates/eventedit.html
new file mode 100644
index 0000000..3548478
--- /dev/null
+++ b/plugins/calendar/skins/classic/templates/eventedit.html
@@ -0,0 +1,103 @@
+<div id="eventedit" class="uidialog">
+  <form id="eventtabs" action="#" method="post" enctype="multipart/form-data">
+    <ul>
+      <li><a href="#event-tab-1"><roundcube:label name="calendar.tabsummary" /></a></li>
+      <li id="edit-tab-recurrence"><a href="#event-tab-2"><roundcube:label name="calendar.tabrecurrence" /></a></li>
+      <li id="edit-tab-attendees"><a href="#event-tab-3"><roundcube:label name="calendar.tabattendees" /></a></li>
+      <li id="edit-tab-attachments"><a href="#event-tab-4"><roundcube:label name="calendar.tabattachments" /></a></li>
+    </ul>
+    <!-- basic info -->
+    <div id="event-tab-1">
+      <div class="event-section">
+        <label for="edit-title"><roundcube:label name="calendar.title" /></label>
+        <br />
+        <input type="text" class="text" name="title" id="edit-title" size="40" />
+      </div>
+      <div class="event-section">
+        <label for="edit-location"><roundcube:label name="calendar.location" /></label>
+        <br />
+        <input type="text" class="text" name="location" id="edit-location" size="40" />
+      </div>
+      <div class="event-section">
+        <label for="edit-description"><roundcube:label name="calendar.description" /></label>
+        <br />
+        <textarea name="description" id="edit-description" class="text" rows="5" cols="40"></textarea>
+      </div>
+      <div class="event-section">
+        <label style="float:right;padding-right:0.5em"><input type="checkbox" name="allday" id="edit-allday" value="1" /><roundcube:label name="calendar.all-day" /></label>
+        <label for="edit-startdate"><roundcube:label name="calendar.start" /></label>
+        <input type="text" name="startdate" size="10" id="edit-startdate" />  
+        <input type="text" name="starttime" size="6" id="edit-starttime" />
+      </div>
+      <div class="event-section">
+        <label for="edit-enddate"><roundcube:label name="calendar.end" /></label>
+        <input type="text" name="enddate" size="10" id="edit-enddate" />  
+        <input type="text" name="endtime" size="6"  id="edit-endtime" />
+      </div>
+      <div class="event-section" id="edit-alarms">
+        <label for="edit-alarm"><roundcube:label name="calendar.alarms" /></label>
+        <roundcube:object name="plugin.alarm_select" />
+      </div>
+      <div class="event-section" id="calendar-select">
+        <label for="edit-calendar"><roundcube:label name="calendar.calendar" /></label>
+        <roundcube:object name="plugin.calendar_select" id="edit-calendar" />
+      </div>
+      <div class="event-section">
+        <label for="edit-categories"><roundcube:label name="calendar.category" /></label>
+        <roundcube:object name="plugin.category_select" id="edit-categories" />
+      </div>
+      <div class="event-section">
+        <label for="edit-free-busy"><roundcube:label name="calendar.freebusy" /></label>
+        <roundcube:object name="plugin.freebusy_select" id="edit-free-busy" />
+      </div>
+      <div class="event-section">
+        <label for="edit-priority"><roundcube:label name="calendar.priority" /></label>
+        <roundcube:object name="plugin.priority_select" id="edit-priority" />
+      </div>
+      <div class="event-section">
+        <label for="edit-sensitivity"><roundcube:label name="calendar.sensitivity" /></label>
+        <roundcube:object name="plugin.sensitivity_select" id="edit-sensitivity" />
+      </div>
+    </div>
+    <!-- recurrence settings -->
+    <div id="event-tab-2">
+      <div class="event-section border-after">
+        <roundcube:object name="plugin.recurrence_form" part="frequency" />
+      </div>
+      <div class="recurrence-form border-after" id="recurrence-form-daily">
+        <roundcube:object name="plugin.recurrence_form" part="daily" class="event-section" />
+      </div>
+      <div class="recurrence-form border-after" id="recurrence-form-weekly">
+        <roundcube:object name="plugin.recurrence_form" part="weekly" class="event-section" />
+      </div>
+      <div class="recurrence-form border-after" id="recurrence-form-monthly">
+        <roundcube:object name="plugin.recurrence_form" part="monthly" class="event-section" />
+      </div>
+      <div class="recurrence-form border-after" id="recurrence-form-yearly">
+        <roundcube:object name="plugin.recurrence_form" part="yearly" class="event-section" />
+      </div>
+      <div class="recurrence-form" id="recurrence-form-until">
+        <roundcube:object name="plugin.recurrence_form" part="until" class="event-section" />
+      </div>
+    </div>
+    <!-- attendees list -->
+    <div id="event-tab-3">
+      <roundcube:object name="plugin.attendees_list" id="edit-attendees-table" cellspacing="0" cellpadding="0" border="0" />
+      <roundcube:object name="plugin.attendees_form" id="edit-attendees-form" />
+      <roundcube:include file="/templates/freebusylegend.html" />
+    </div>
+    <!-- attachments list (with upload form) -->
+    <div id="event-tab-4">
+      <div id="edit-attachments" class="attachments-list">
+        <roundcube:object name="plugin.attachments_list" id="attachmentlist" deleteIcon="/images/icons/delete.png" cancelIcon="/images/icons/delete.png" loadingIcon="/images/display/loading_blue.gif" />
+      </div>
+      <div id="edit-attachments-form">
+        <roundcube:object name="plugin.attachments_form" id="calendar-attachment-form" attachmentFieldSize="30" />
+      </div>
+    </div>
+  </form>
+
+  <roundcube:object name="plugin.edit_attendees_notify" id="edit-attendees-notify" class="event-dialog-message" style="display:none" />
+  <roundcube:object name="plugin.edit_recurring_warning" class="event-dialog-message edit-recurring-warning" style="display:none" />
+  <div id="edit-localchanges-warning" class="event-dialog-message" style="display:none"><roundcube:label name="calendar.localchangeswarning" /></div>
+</div>
\ No newline at end of file
diff --git a/plugins/calendar/skins/classic/templates/freebusylegend.html b/plugins/calendar/skins/classic/templates/freebusylegend.html
new file mode 100644
index 0000000..5cc01a1
--- /dev/null
+++ b/plugins/calendar/skins/classic/templates/freebusylegend.html
@@ -0,0 +1,7 @@
+  <div id="edit-attendees-legend" class="availability">
+    <span class="legend"><img class="availabilityicon free" src="./program/blank.gif" /> <roundcube:label name="calendar.availfree" /></span>
+    <span class="legend"><img class="availabilityicon busy" src="./program/blank.gif" /> <roundcube:label name="calendar.availbusy" /></span>
+    <span class="legend"><img class="availabilityicon tentative" src="./program/blank.gif" /> <roundcube:label name="calendar.availtentative" /></span>
+    <span class="legend"><img class="availabilityicon out-of-office" src="./program/blank.gif" /> <roundcube:label name="calendar.availoutofoffice" /></span>
+    <span class="legend"><img class="availabilityicon unknown" src="./program/blank.gif" /> <roundcube:label name="calendar.availunknown" /></span>
+  </div>
diff --git a/plugins/calendar/skins/classic/templates/itipattend.html b/plugins/calendar/skins/classic/templates/itipattend.html
new file mode 100644
index 0000000..84968b5
--- /dev/null
+++ b/plugins/calendar/skins/classic/templates/itipattend.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+</head>
+<body class="calendaritipattend">
+
+<roundcube:object name="logo" src="/images/roundcube_logo.png" id="logo" border="0" style="margin:0 11px" />
+
+<roundcube:object name="message" id="message" />
+
+<div class="centerbox">
+	<roundcube:object name="plugin.event_inviteform" />
+	<roundcube:object name="plugin.event_invitebox" class="calendar-invitebox" />
+	<roundcube:object name="plugin.event_rsvp_buttons" type="submit" iname="rsvp" id="event-rsvp" />
+	</form>
+</div>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/calendar/skins/classic/templates/kolabacl.html b/plugins/calendar/skins/classic/templates/kolabacl.html
new file mode 100644
index 0000000..668a670
--- /dev/null
+++ b/plugins/calendar/skins/classic/templates/kolabacl.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+<script type="text/javascript" src="/functions.js"></script>
+</head>
+<body class="iframe" style="background:#fff; margin:0">
+
+<roundcube:object name="folderacl" />
+
+</body>
+</html>
diff --git a/plugins/calendar/skins/classic/templates/kolabform.html b/plugins/calendar/skins/classic/templates/kolabform.html
new file mode 100644
index 0000000..a74481a
--- /dev/null
+++ b/plugins/calendar/skins/classic/templates/kolabform.html
@@ -0,0 +1,7 @@
+<div id="calendar-kolabform">
+  <roundcube:object name="calendarform" />
+</div>
+<script type="text/javascript">rcube_init_tabs('calendar-kolabform');</script>
+<style type="text/css">
+#calendarpropform { min-width:680px }
+</style>
\ No newline at end of file
diff --git a/plugins/calendar/skins/classic/templates/print.html b/plugins/calendar/skins/classic/templates/print.html
new file mode 100644
index 0000000..3fc85f3
--- /dev/null
+++ b/plugins/calendar/skins/classic/templates/print.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+</head>
+<body class="calendarprint">
+
+<div id="printconfig" class="noprint">
+  <div class="calwidth">
+    <a href="#close" onclick="window.close()" class="rightalign"><roundcube:label name="close" /></a>
+    <span class="prop"><input type="button" id="printme" value="<roundcube:label name='print' />" onclick="window.print()"></span>
+    <span class="prop"><label><input type="checkbox" id="propdescription" checked="checked" /> <roundcube:label name="calendar.printdescriptions" /></label></span>
+  </div>
+</div>
+
+<roundcube:object name="message" id="message" class="noprint" />
+
+<div id="calendar" class="calwidth"></div>
+
+<div class="calwidth">
+  <roundcube:object name="plugin.calendar_list" activeonly="true" id="calendarlist" />
+</div>
+
+<roundcube:object name="plugin.calendar_css" printmode="true" />
+
+<!--[if lte IE 7]><link rel="stylesheet" type="text/css" href="./plugins/calendar/skins/default/print.iehacks.css" /><![endif]-->
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/calendar/skins/default/README b/plugins/calendar/skins/default/README
deleted file mode 100644
index ccd513a..0000000
--- a/plugins/calendar/skins/default/README
+++ /dev/null
@@ -1,5 +0,0 @@
-Icons by Fugue Icons <http://p.yusukekamiyamane.com/>
-
-Copyright (C) 2010 Yusuke Kamiyamane. All rights reserved.
-The icons are licensed under a Creative Commons Attribution
-3.0 license. <http://creativecommons.org/licenses/by/3.0/>
diff --git a/plugins/calendar/skins/default/calendar.css b/plugins/calendar/skins/default/calendar.css
deleted file mode 100644
index 21dcb1b..0000000
--- a/plugins/calendar/skins/default/calendar.css
+++ /dev/null
@@ -1,1268 +0,0 @@
-/*** Style for Calendar plugin ***/
-
-body.calendarmain {
-	overflow: hidden;
-}
-
-#taskbar a.button-calendar {
-	background: url(images/calendar.png) 0px 1px no-repeat;
-}
-
-/* hack for IE 6/7 */
-* html #taskbar a.button-calendar {
-	background-image: url(images/calendar.gif);
-}
-
-#main {
-	position: absolute;
-	clear: both;
-	top: 90px;
-	left: 0;
-	right: 0;
-	bottom: 10px;
-}
-
-#calendarsidebar {
-	position: absolute;
-	top: 37px;
-	left: 10px;
-	bottom: 0;
-	width: 230px;
-}
-
-#datepicker {
-	width: 100%;
-}
-
-#datepicker .ui-datepicker {
-	width: 97% !important;
-	box-shadow: none;
-	-moz-box-shadow: none;
-	-webkit-box-shadow: none;
-}
-
-#datepicker .ui-datepicker-activerange a {
-	border-color: #c33;
-	color: #a22;
-}
-
-#datepicker .ui-datepicker-activerange a.ui-state-active {
-	color: #fff;
-}
-
-#datepicker .ui-priority-secondary {
-	opacity: 0.4;
-}
-
-#datepicker td.ui-datepicker-week-col {
-	cursor: pointer;
-}
-
-#calendarsidebartoggle {
-	position: absolute;
-	left: 244px;
-	width: 8px;
-	top: 37px;
-	bottom: 0;
-	background: url(images/toggle.gif) 0 48% no-repeat transparent;
-	cursor: pointer;
-}
-
-div.sidebarclosed {
-	background-position: -8px 48% !important;
-}
-
-#calendarsidebartoggle:hover {
-	background-color: #ddd;
-}
-
-#calendar {
-	position: absolute;
-	top: 0;
-	left: 256px;
-	right: 10px;
-	bottom: 0;
-}
-
-#print {
-	width: 680px;
-}
-
-pre {
- font-family: "Lucida Grande", Verdana, Arial, Helvetica, sans-serif;
-}
-
-#calendars {
-	position: absolute;
-	top: 220px;
-	left: 0;
-	bottom: 0;
-	right: 0;
-	background-color: #F9F9F9;
-	border: 1px solid #999999;
-	overflow: hidden;
-}
-
-#calendarslist {
-	list-style: none;
-	margin: 0;
-	padding: 0;
-}
-
-#attachmentlist li,
-#calendarslist li {
-	margin: 0;
-	padding: 1px;
-	display: block;
-	background: #fff;
-	border-bottom: 1px solid #EBEBEB;
-	white-space: nowrap;
-}
-
-#calendarslist li label {
-	display: block;
-}
-
-#calendarslist li span.handle {
-	cursor: default;
-	background: url(images/calendars.png) 0 -2px no-repeat;
-	display: inline-block;
-	width: 20px;
-}
-
-#calendarslist li input {
-	margin-right: 5px;
-}
-
-#calendarslist li.selected {
-	background-color: #ccc;
-	border-bottom: 1px solid #bbb;
-}
-
-#calendarslist li.selected span {
-	font-weight: bold;
-}
-
-#calendarslist li.readonly span.handle {
-    background-position: 0 -20px;
-}
-
-#calendarslist li.other span.handle {
-    background-position: 0 -38px;
-}
-
-#calendarslist li.other.readonly span.handle {
-    background-position: 0 -56px;
-}
-
-#calendarslist li.shared span.handle {
-    background-position: 0 -74px;
-}
-
-#calendarslist li.shared.readonly span.handle {
-    background-position: 0 -92px;
-}
-
-#calfeedurl {
-	width: 98%;
-	background: #fbfbfb;
-	padding: 4px;
-	margin-bottom: 1em;
-	resize: none;
-}
-
-#agendalist {
-	width: 100%;
-	margin: 0 auto;
-	margin-top: 60px;
-	border: 1px solid #C1DAD7;
-	display: none;
-}
-
-#agendalist table {
-	width: 100%;
-}
-
-#agendalist td,
-#agendalist th {
-	border-right: 1px solid #C1DAD7;
-	border-bottom: 1px solid #C1DAD7;
-	background: #fff;
-	padding: 6px 6px 6px 12px;
-}
-
-#agendalist tr {
-	vertical-align: top;
-}
-
-#agendalist th {
-	font-weight: bold;
-}
-
-#calendartoolbar {
-	position: absolute;
-	top: 45px;
-	left: 256px;
-	height: 35px;
-}
-
-#calendartoolbar a {
-	padding-right: 10px;
-}
-
-#calendartoolbar a.button,
-#calendartoolbar a.buttonPas {
-	display: block;
-	float: left;
-	width: 32px;
-	height: 32px;
-	padding: 0;
-	margin-right: 10px;
-	overflow: hidden;
-	background: url(images/toolbar.png) 0 0 no-repeat transparent;
-	opacity: 0.99; /* this is needed to make buttons appear correctly in Chrome */
-}
-
-#calendartoolbar a.buttonPas {
-	opacity: 0.35;
-}
-
-#calendartoolbar a.addeventSel {
-	background-position: 0 -32px;
-}
-
-#calendartoolbar a.delete {
-  background-position: -32px 0;
-}
-
-#calendartoolbar a.deleteSel {
-  background-position: -32px -32px;
-}
-
-#calendartoolbar a.print {
-  background-position: -64px 0;
-}
-
-#calendartoolbar a.printSel {
-  background-position: -64px -32px;
-}
-
-#calendartoolbar a.export {
-	background-position: -128px 0;
-}
-
-#calendartoolbar a.exportSel {
-	background-position: -128px -32px;
-}
-
-#quicksearchbar {
-	right: 4px;
-}
-
-div.uidialog {
-	display: none;
-}
-
-#user {
-	position: absolute;
-	top: 10px;
-	right: 100px;
-	left: 100px;
-	text-align: center;
-}
-
-a.morelink {
-	font-size: 90%;
-	color: #C33;
-	text-decoration: none;
-}
-
-a.morelink:hover {
-	text-decoration: underline;
-}
-
-a.miniColors-trigger {
-	margin-top: -3px;
-}
-
-#attachmentcontainer {
-	position: absolute;
-	top: 80px;
-	left: 20px;
-	right: 20px;
-	bottom: 20px;
-}
-
-#attachmentframe {
-	width: 100%;
-	height: 100%;
-	border: 1px solid #999999;
-	background-color: #F9F9F9;
-}
-
-#partheader {
-	position: absolute;
-	top: 20px;
-	left: 220px;
-	right: 20px;
-	height: 40px;
-}
-
-#partheader table td {
-	padding-left: 2px;
-	padding-right: 4px;
-	vertical-align: middle;
-	font-size: 11px;
-}
-
-#partheader table td.title {
-	color: #666;
-	font-weight: bold;
-}
-
-.attachments-list ul {
-	margin: 0px;
-	padding: 0px;
-	list-style-image: none;
-	list-style-type: none;
-}
-
-.attachments-list ul li {
-	height: 18px;
-	font-size: 12px;
-	padding-top: 2px;
-	padding-right: 8px;
-	white-space: nowrap;
-}
-
-.attachments-list ul li img {
-	padding-right: 2px;
-	vertical-align: middle;
-}
-
-.attachments-list ul li a {
-	text-decoration: none;
-}
-
-.attachments-list ul li a:hover {
-	text-decoration: underline;
-}
-
-#attachmentlist {
-	margin: 0 -0.8em;
-}
-
-#attachmentlist li {
-	padding: 2px 2px 3px 0.8em;
-}
-
-#eventshow .attachments-list ul li {
-	float: left;
-}
-
-#edit-attachments-form {
-	padding-top: 1.2em;
-}
-
-#edit-attachments-form .buttons {
-	margin: 0.5em 0;
-}
-
-#event-attendees span.attendee {
-	padding-right: 18px;
-	margin-right: 0.5em;
-	background: url(images/attendee-status.gif) right 0 no-repeat;
-}
-
-#event-attendees span.attendee a.mailtolink {
-	text-decoration: none;
-	white-space: nowrap;
-}
-
-#event-attendees span.attendee a.mailtolink:hover {
-	text-decoration: underline;
-}
-
-#event-attendees span.accepted {
-	background-position: right -20px;
-}
-
-#event-attendees span.declined {
-	background-position: right -40px;
-}
-
-#event-attendees span.tentative {
-	background-position: right -60px;
-}
-
-#event-attendees span.organizer {
-	background-position: right -80px;
-}
-
-/* jQuery UI overrides */
-
-#eventshow h1 {
-	font-size: 20px;
-	margin: 0.1em 0 0.4em 0;
-}
-
-#eventshow label,
-#eventshow h5.label {
-	font-weight: normal;
-	font-size: 0.9em;
-	color: #999;
-	margin: 0 0 0.2em 0;
-}
-
-#eventshow {
-	margin: 0 -0.2em;
-}
-
-#eventshow.sensitivity-private {
-	background: url(images/badge_private.png) top right no-repeat;
-}
-
-#eventshow.sensitivity-confidential {
-	background: url(images/badge_confidential.png) top right no-repeat;
-}
-
-.sensitivity-private #event-title {
-	margin-right: 50px;
-}
-
-.sensitivity-confidential #event-title {
-	margin-right: 60px;
-}
-
-#eventshow div.event-line {
-	margin-top: 0.1em;
-	margin-bottom: 0.3em;
-}
-
-#eventedit {
-	position: relative;
-	padding: 0.5em 0.1em;
-}
-
-#eventedit input.text,
-#eventedit textarea {
-	width: 97%;
-}
-
-#eventtabs {
-	position: relative;
-	padding: 0;
-	border: 0;
-	border-radius: 0;
-}
-
-div.form-section,
-#eventshow div.event-section,
-#eventtabs div.event-section {
-	margin-top: 0.2em;
-	margin-bottom: 0.8em;
-}
-
-#eventtabs .tabsbar {
-	position: absolute;
-	top: 0;
-}
-
-#eventtabs .ui-tabs-panel {
-	padding: 1em 0.8em;
-	border: 1px solid #aaa;
-	border-width: 0 1px 1px 1px;
-}
-
-#eventtabs .ui-tabs-nav {
-	background: none;
-	padding: 0;
-	border-width: 0 0 1px 0;
-	border-radius: 0;
-}
-
-#eventtabs .border-after {
-	padding-bottom: 0.6em;
-	margin-bottom: 0.6em;
-	border-bottom: 1px solid #999;
-}
-
-#eventshow label,
-#eventedit label,
-.form-section label {
-	display: inline-block;
-	min-width: 7em;
-	padding-right: 0.5em;
-}
-
-#eventedit .formtable td.label {
-	min-width: 6em;
-}
-
-td.topalign {
-	vertical-align: top;
-}
-
-#eventedit label.weekday,
-#eventedit label.monthday {
-	min-width: 3em;
-}
-
-#eventedit label.month {
-	min-width: 5em;
-}
-
-#edit-recurrence-yearly-bymonthblock {
-	margin-left: 7.5em;
-}
-
-#eventedit .recurrence-form {
-	display: none;
-}
-
-#eventedit .formtable td {
-	padding: 0.2em 0;
-}
-
-.ui-dialog .event-update-confirm {
-	padding: 0 0.5em 0.5em 0.5em;
-}
-
-.event-dialog-message,
-.event-update-confirm .message {
-	margin-top: 0.5em;
-	padding: 0.8em;
-	background-color: #F7FDCB;
-	border: 1px solid #C2D071;
-}
-
-.event-dialog-message .message,
-.event-update-confirm .message {
-	margin-bottom: 0.5em;
-}
-
-.edit-recurring-warning .savemode {
-	padding-left: 20px;
-}
-
-.event-update-confirm .savemode {
-	padding-left: 30px;
-}
-
-.event-dialog-message span.ui-icon,
-.event-update-confirm span.ui-icon {
-	float: left;
-	margin: 0 7px 20px 0;
-}
-
-.event-dialog-message label,
-.event-update-confirm label {
-	min-width: 3em;
-	padding-right: 1em;
-}
-
-.event-update-confirm a.button {
-	margin: 0 0.5em 0 0.2em;
-	min-width: 5em;
-}
-
-#event-rsvp,
-#edit-attendees-notify {
-	margin: 0.3em 0;
-	padding: 0.5em;
-	background-color: #F7FDCB;
-	border: 1px solid #C2D071;
-}
-
-#edit-attendees-table {
-	width: 100%;
-	display: table;
-	table-layout: fixed;
-	border-collapse: collapse;
-	border: 1px solid #ccc;
-}
-
-#edit-attendees-table td {
-	padding: 3px;
-	border-bottom: 1px solid #ccc;
-}
-
-#edit-attendees-table td.role {
-	width: 8em;
-}
-
-#edit-attendees-table td.availability,
-#edit-attendees-table td.confirmstate {
-	width: 4em;
-}
-
-#edit-attendees-table td.options {
-	width: 3em;
-	text-align: right;
-	padding-right: 4px;
-}
-
-#edit-attendees-table td.name {
-	width: auto;
-	white-space: nowrap;
-	overflow: hidden;
-	text-overflow: ellipsis;
-}
-
-#edit-attendees-table thead td {
-	background: url(images/listheader.gif) top left repeat-x #CCC;
-}
-
-#edit-attendees-form {
-	position: relative;
-	margin-top: 1em;
-}
-
-#edit-attendees-form #edit-attendee-schedule {
-	position: absolute;
-	top: 0;
-	right: 0;
-}
-
-#edit-attendees-table select.edit-attendee-role {
-	border: 0;
-	padding: 2px;
-	background: white;
-}
-
-.availability img.availabilityicon {
-	margin: 1px;
-	width: 14px;
-	height: 14px;
-	border-radius: 4px;
-	-moz-border-radius: 4px;
-}
-
-.availability img.availabilityicon.loading {
-	background: url(images/loading_blue.gif) center no-repeat;
-}
-
-#schedule-freebusy-times td.unknown,
-.availability img.availabilityicon.unknown {
-	background: #ddd;
-}
-
-#schedule-freebusy-times td.free,
-.availability img.availabilityicon.free {
-	background: #0c0;
-}
-
-#schedule-freebusy-times td.busy,
-.availability img.availabilityicon.busy {
-	background: #c00;
-}
-
-#schedule-freebusy-times td.tentative,
-.availability img.availabilityicon.tentative {
-	background: #66d;
-}
-
-#schedule-freebusy-times td.out-of-office,
-.availability img.availabilityicon.out-of-office {
-	background: #f0b400;
-}
-
-#schedule-freebusy-times td.all-busy,
-#schedule-freebusy-times td.all-tentative,
-#schedule-freebusy-times td.all-out-of-office {
-	background-image: url(images/freebusy-colors.png);
-	background-position: top right;
-	background-repeat: no-repeat;
-}
-
-#schedule-freebusy-times td.all-tentative {
-	background-position: right -40px;
-}
-
-#schedule-freebusy-times td.all-out-of-office {
-	background-position: right -80px;
-}
-
-#edit-attendees-legend {
-	margin-top: 3em;
-	margin-bottom: 0.5em;
-}
-
-#edit-attendees-legend .legend {
-	margin-right: 2em;
-	white-space: nowrap;
-}
-
-#edit-attendees-legend img.availabilityicon {
-	vertical-align: middle;
-}
-
-#edit-attendees-table tbody td.confirmstate {
-	overflow: hidden;
-	white-space: nowrap;
-	text-indent: -2000%;
-}
-
-#edit-attendees-table td.confirmstate span {
-	display: block;
-	width: 20px;
-	background: url(images/attendee-status.gif) 5px 0 no-repeat;
-}
-
-#edit-attendees-table td.confirmstate span.needs-action {
-}
-
-#edit-attendees-table td.confirmstate span.accepted {
-	background-position: 5px -20px;
-}
-
-#edit-attendees-table td.confirmstate span.declined {
-	background-position: 5px -40px;
-}
-
-#edit-attendees-table td.confirmstate span.tentative {
-	background-position: 5px -60px;
-}
-
-#attendees-freebusy-table {
-	width: 100%;
-	table-layout: fixed;
-	border-collapse: collapse;
-	margin: 0.5em 0;
-}
-
-#attendees-freebusy-table td.attendees {
-	width: 18em;
-	border: 1px solid #ccc;
-	vertical-align: top;
-	overflow: hidden;
-}
-
-#attendees-freebusy-table td.times {
-	width: auto;
-	vertical-align: top;
-	border: 1px solid #ccc;
-}
-
-#attendees-freebusy-table div.scroll {
-	position: relative;
-	overflow: auto;
-}
-
-#attendees-freebusy-table h3.boxtitle {
-	margin: 0;
-	height: auto !important;
-	border-color: #ccc;
-}
-
-.attendees-list .attendee {
-	padding: 3px 4px 3px 1px;
-	background: url(images/attendee-status.gif) 2px -97px no-repeat;
-	white-space: nowrap;
-}
-
-.attendees-list a.attendee-role-toggle {
-	display: inline-block;
-	width: 16px;
-	margin-right: 3px;
-	cursor: pointer;
-}
-
-.attendees-list div.attendee {
-	border-top: 1px solid #ccc;
-}
-
-.attendees-list span.attendee {
-	padding-left: 20px;
-	margin-right: 2em;
-}
-
-.attendees-list .organizer {
-	background-position: 3px -77px;
-}
-
-.attendees-list .opt-participant {
-	background-position: 2px -117px;
-}
-
-.attendees-list .chair {
-	background-position: 2px -137px;
-}
-
-.attendees-list .loading {
-	background: url(images/loading_blue.gif) 1px 50% no-repeat;
-}
-
-.attendees-list .total {
-	background: none;
-	padding-left: 4px;
-	font-weight: bold;
-}
-
-.attendees-list .spacer,
-#schedule-freebusy-times tr.spacer td {
-	background: 0;
-	font-size: 50%;
-}
-
-#schedule-freebusy-times {
-	border-collapse: collapse;
-	width: 100%;
-}
-
-#schedule-freebusy-times td {
-	padding: 3px;
-	border: 1px solid #ccc;
-}
-
-#schedule-freebusy-times tr.dates th {
-	border-color: #aaa;
-	border-style: solid;
-	border-width: 0 1px 0 1px;
-	white-space: nowrap;
-}
-
-#attendees-freebusy-table div.timesheader,
-#schedule-freebusy-times tr.times td {
-	min-width: 30px;
-	font-size: 9px;
-	padding: 5px 2px 6px 2px;
-	text-align: center;
-}
-
-#schedule-freebusy-times tr.times td.allday {
-	min-width: 60px;
-}
-
-#schedule-freebusy-times tr.times td {
-	cursor: pointer;
-}
-
-#schedule-event-time {
-	position: absolute;
-	border: 2px solid #333;
-	background: #777;
-	background: rgba(60, 60, 60, 0.6);
-	opacity: 0.5;
-	border-radius: 4px;
-	cursor: move;
-	filter: alpha(opacity=40); /* IE8 */
-}
-
-#eventfreebusy .schedule-options {
-	position: relative;
-	margin-bottom: 1.5em;
-}
-
-#eventfreebusy .schedule-buttons {
-	position: absolute;
-	top: 0;
-	right: 0;
-}
-
-#eventfreebusy .schedule-find-buttons {
-	padding-bottom:0.5em;
-}
-
-#eventfreebusy .schedule-find-buttons button {
-	min-width: 9em;
-	text-align: center;
-}
-
-span.edit-alarm-set {
-	white-space: nowrap;
-}
-
-a.dropdown-link {
-	color: #CC0000;
-	font-size: 12px;
-	text-decoration: none;
-}
-
-a.dropdown-link:after {
-	content: ' â–¼';
-	font-size: 11px;
-	color: #666;
-}
-
-#eventedit .ui-tabs-panel {
-	min-height: 20em;
-}
-
-.alarm-item {
-	margin: 0.4em 0 1em 0;
-}
-
-.alarm-item .event-title {
-	font-size: 14px;
-	margin: 0.1em 0 0.3em 0;
-}
-
-.alarm-item div.event-section {
-	margin-top: 0.1em;
-	margin-bottom: 0.3em;
-}
-
-.alarm-item .alarm-actions {
-	margin-top: 0.4em;
-}
-
-.alarm-item div.alarm-actions a {
-	color: #CC0000;
-	margin-right: 0.8em;
-	text-decoration: none;
-}
-
-a.alarm-action-snooze:after {
-	content: ' â–¼';
-	font-size: 10px;
-	color: #666;
-}
-
-#alarm-snooze-dropdown {
-	z-index: 5000;
-}
-
-.ui-dialog-buttonset a.dropdown-link {
-	margin-right: 1em;
-}
-
-.ui-datepicker-calendar .ui-datepicker-today .ui-state-default {
-	border-color: #cccccc;
-	background: #ffffcc;
-	color: #000;
-}
-
-.ui-datepicker-calendar .ui-datepicker-week-col {
-	text-align: right;
-	padding-right: 0.5em;
-}
-
-.ui-datepicker th {
-    padding: 0.3em 0;
-    font-size: 10px;
-}
-
-.ui-datepicker td span,
-.ui-datepicker td a {
-	padding-left: 0.1em;
-}
-
-.ui-autocomplete {
-	max-height: 160px;
-	overflow-y: auto;
-	overflow-x: hidden;
-}
-
-.ui-autocomplete .ui-menu-item {
-	white-space: nowrap;
-}
-
-* html .ui-autocomplete {
-	height: 160px;
-}
-
-span.spacer {
-	padding-left: 3em;
-}
-
-#agendaoptions {
-	position: absolute;
-	left: 0;
-	right: 0;
-	bottom: 0;
-	height: auto;
-	z-index: 200;
-	border: 1px solid #ccc;
-	padding: 2px 5px 1px;
-	font-size: 90%;
-}
-
-#agendaoptions label {
-	color: #444;
-	text-shadow: 1px 1px #eee;
-	padding-right: 0.5em;
-}
-
-#calendar-kolabform {
-	position: relative;
-	padding-top: 24px;
-	margin: 0 -8px;
-	min-width: 660px;
-	min-height: 400px;
-}
-
-#calendar-kolabform div.tabsbar {
-	top: 0;
-	right: 2px;
-	left: 2px;
-	height: 24px;
-}
-
-#calendar-kolabform fieldset.tabbed {
-	background-color: #fff;
-	margin-top: 0;
-}
-
-#calendar-kolabform span.tablink {
-	background-color: #e8e8e9;
-	background-image: -moz-linear-gradient(center top, #f4f4f4, #e6e6e6);
-	background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0.0, #f4f4f4), color-stop(1.0, #e6e6e6));
-	filter: progid:DXImageTransform.Microsoft.gradient(enabled='true', startColorstr=#f4f4f4, endColorstr=#e6e6e6, GradientType=0);
-	height: 24px !important;
-}
-
-#calendar-kolabform span.tablink-selected {
-	background: #fff;
-	height: 25px !important;
-}
-
-#calendar-kolabform span.tablink a,
-#calendar-kolabform span.tablink-selected a {
-	background: none;
-	border: 1px solid #AAAAAA;
-	border-top-left-radius: 2px;
-	border-top-right-radius: 2px;
-	padding: 4px 10px 0 10px;
-	margin-left: 0;
-}
-
-#calendar-kolabform table td.title {
-  font-weight: bold;
-  white-space: nowrap;
-  color: #666;
-  padding-right: 10px;
-}
-
-
-/* fullcalendar style overrides */
-
-.rcube-fc-content {
-	position: absolute !important;
-	top: 37px;
-	left: 0;
-	right: 0;
-	bottom: 0;
-	overflow: hidden;
-}
-
-.fc-event-title {
-	font-weight: bold;
-}
-
-.fc-event-hori .fc-event-title {
-	font-weight: normal;
-	white-space: nowrap;
-}
-
-.fc-event-hori .fc-event-time {
-	white-space: nowrap;
-	font-weight: normal !important;
-	font-size: 10px;
-	padding-right: 0.6em;
-}
-
-.fc-grid .fc-event-time {
-	font-weight: normal !important;
-	padding-right: 0.3em;
-}
-
-.fc-event-cateories {
-	font-style:italic; 
-}
-
-div.fc-event-location {
-	font-size: 90%;
-}
-
-.fc-more-link {
-	color: #999;
-	padding-top: 1px;
-	cursor: pointer;
-}
-
-.fc-agenda-slots td div {
-	height: 22px;
-}
-
-.fc-mon, .fc-tue, .fc-wed, .fc-thu, .fc-fri {
-	background-color: #fdfdfd;
-}
-
-.fc-widget-header {
-	background-color: #fff;
-}
-
-.fc-icon-alarms,
-.fc-icon-sensitive,
-.fc-icon-recurring {
-	display: inline-block;
-	width: 11px;
-	height: 11px;
-	background: url(images/eventicons.gif) 0 0 no-repeat;
-	margin-left: 3px;
-	line-height: 10px;
-}
-
-.fc-icon-alarms {
-	background-position: 0 -13px;
-}
-
-.fc-icon-sensitive {
-	background-position: 0 -25px;
-}
-
-.fc-list-section .fc-event {
-	cursor: pointer;
-}
-
-.fc-view-list div.fc-list-header,
-.fc-view-table td.fc-list-header,
-#edit-attendees-table thead td {
-	padding: 3px;
-	background: #dddddd;
-	background-image: -moz-linear-gradient(center top, #f4f4f4, #d2d2d2);
-	background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0.00, #f4f4f4), color-stop(1.00, #d2d2d2));
-	filter: progid:DXImageTransform.Microsoft.gradient(enabled='true', startColorstr=#f4f4f4, endColorstr=#d2d2d2, GradientType=0);
-	font-weight: bold;
-	color: #333;
-}
-
-.fc-view-list .fc-event-skin .fc-event-content {
-	background: #F6F6F6;
-	padding: 2px;
-}
-
-.fc-view-list .fc-event-skin .fc-event-title,
-.fc-view-list .fc-event-skin .fc-event-location {
-	color: #333;
-}
-
-.fc-view-table col.fc-event-location {
-	width: 20%;
-}
-
-.fc-listappend {
-	text-align: center;
-	margin: 1em 0;
-}
-
-.fc-listappend .message {
-	padding: 0.5em;
-	margin-bottom: 0.5em;
-	font-size: 150%;
-	color: #999;
-}
-
-.fc-listappend .formlinks a {
-	font-size: 12px;
-	padding: 0 0.3em;
-}
-
-.fc-event-temp {
-	opacity: 0.4;
-	filter: alpha(opacity=40); /* IE8 */
-}
-
-/* Settings section */
-
-fieldset #calendarcategories div {
-	margin-bottom: 0.3em;
-}
-
-/* Invitation UI in mail */
-
-#messagemenu li a.calendarlink {
-	background-image: url(images/calendars.png);
-	background-position: 7px -109px;
-	background-repeat: no-repeat;
-}
-
-div.calendar-invitebox {
-	min-height: 20px;
-	margin: 5px 8px;
-	padding: 3px 6px 6px 34px;
-	border: 1px solid #C2D071;
-	background: url(images/calendar.png) 6px 5px no-repeat #F7FDCB;
-}
-
-div.calendar-invitebox td.ititle {
-	font-weight: bold;
-	padding-right: 0.5em;
-}
-
-div.calendar-invitebox td.label {
-	color: #666;
-	padding-right: 1em;
-}
-
-#event-rsvp .rsvp-buttons,
-div.calendar-invitebox .rsvp-status,
-div.calendar-invitebox .rsvp-buttons {
-	margin-top: 0.5em;
-}
-
-#event-rsvp input.button,
-div.calendar-invitebox input.button,
-div.calendar-invitebox select {
-	font-size: 11px;
-	margin-right: 0.5em;
-}
-
-div.calendar-invitebox .calendar-select {
-	font-size: 11px;
-	margin-left: 1em;
-}
-
-div.calendar-invitebox .rsvp-status.loading {
-	color: #666;
-	padding: 1px 0 2px 24px;
-	background: url(images/loading_blue.gif) top left no-repeat;
-}
-
-div.calendar-invitebox .rsvp-status.declined,
-div.calendar-invitebox .rsvp-status.tentative,
-div.calendar-invitebox .rsvp-status.accepted {
-	padding: 0 0 1px 22px;
-	background: url(images/attendee-status.gif) 2px -20px no-repeat;
-}
-
-div.calendar-invitebox .rsvp-status.declined {
-	background-position: 2px -40px;
-}
-
-div.calendar-invitebox .rsvp-status.tentative {
-	background-position: 2px -60px;
-}
-
-/* iTIP attend reply page */
-
-.calendaritipattend .centerbox {
-	width: 40em;
-	margin: 80px auto;
-	padding: 10px 10px 10px 90px;
-	border: 1px solid #ccc;
-	box-shadow: 1px 1px 24px #ccc;
-	-moz-box-shadow: 1px 1px 18px #ccc;
-	-webkit-box-shadow: #ccc 1px 1px 18px;
-	background: url(images/invitation.png) 10px 10px no-repeat #fbfbfb;
-}
-
-.calendaritipattend .calendar-invitebox {
-	background: none;
-	padding-left: 0;
-	border: 0;
-	margin: 0 0 2em 0;
-}
-
-.calendaritipattend .calendar-invitebox .rsvp-status {
-	margin-top: 2.5em;
-	font-size: 110%;
-	font-weight: bold;
-}
-
-.calendaritipattend .calendar-invitebox td.title,
-.calendaritipattend .calendar-invitebox td.ititle {
-	font-size: 120%;
-}
-
diff --git a/plugins/calendar/skins/default/fullcalendar.css b/plugins/calendar/skins/default/fullcalendar.css
deleted file mode 100644
index 17f1b37..0000000
--- a/plugins/calendar/skins/default/fullcalendar.css
+++ /dev/null
@@ -1,724 +0,0 @@
-/*
- * FullCalendar v1.5.3-rcube-0.7.1 Stylesheet
- *
- * Copyright (c) 2011 Adam Shaw
- * Copyright (c) 2011, Kolab Systems AG
- * Dual licensed under the MIT and GPL licenses, located in
- * MIT-LICENSE.txt and GPL-LICENSE.txt respectively.
- *
- * Date: Mon Feb 13 23:00:46 2012 +0100
- *
- */
-
-
-.fc {
-	direction: ltr;
-	text-align: left;
-	}
-	
-.fc table {
-	border-collapse: collapse;
-	border-spacing: 0;
-	}
-	
-html .fc,
-.fc table {
-	font-size: 1em;
-	}
-	
-.fc td,
-.fc th {
-	padding: 0;
-	vertical-align: top;
-	}
-
-
-
-/* Header
-------------------------------------------------------------------------*/
-
-.fc-header td {
-	white-space: nowrap;
-	}
-
-.fc-header-left {
-	width: 25%;
-	text-align: left;
-	}
-	
-.fc-header-center {
-	text-align: center;
-	}
-	
-.fc-header-right {
-	width: 25%;
-	text-align: right;
-	}
-	
-.fc-header-title {
-	display: inline-block;
-	vertical-align: top;
-	}
-	
-.fc-header-title h2 {
-	margin-top: 0;
-	white-space: nowrap;
-	}
-	
-.fc .fc-header-space {
-	padding-left: 10px;
-	}
-	
-.fc-header .fc-button {
-	margin-bottom: 1em;
-	vertical-align: top;
-	}
-	
-/* buttons edges butting together */
-
-.fc-header .fc-button {
-	margin-right: -1px;
-	}
-	
-.fc-header .fc-corner-right {
-	margin-right: 1px; /* back to normal */
-	}
-	
-.fc-header .ui-corner-right {
-	margin-right: 0; /* back to normal */
-	}
-	
-/* button layering (for border precedence) */
-	
-.fc-header .fc-state-hover,
-.fc-header .ui-state-hover {
-	z-index: 2;
-	}
-	
-.fc-header .fc-state-down {
-	z-index: 3;
-	}
-
-.fc-header .fc-state-active,
-.fc-header .ui-state-active {
-	z-index: 4;
-	}
-	
-	
-	
-/* Content
-------------------------------------------------------------------------*/
-	
-.fc-content {
-	clear: both;
-	}
-	
-.fc-view {
-	width: 100%; /* needed for view switching (when view is absolute) */
-	overflow: hidden;
-	}
-	
-	
-
-/* Cell Styles
-------------------------------------------------------------------------*/
-
-.fc-widget-header,    /* <th>, usually */
-.fc-widget-content {  /* <td>, usually */
-	border: 1px solid #ccc;
-	}
-	
-.fc-state-highlight { /* <td> today cell */ /* TODO: add .fc-today to <th> */
-	background: #ffc;
-	}
-	
-.fc-cell-overlay { /* semi-transparent rectangle while dragging */
-	background: #9cf;
-	opacity: .2;
-	filter: alpha(opacity=20); /* for IE */
-	}
-	
-
-
-/* Buttons
-------------------------------------------------------------------------*/
-
-.fc-button {
-	position: relative;
-	display: inline-block;
-	cursor: pointer;
-	}
-	
-.fc-state-default { /* non-theme */
-	border-style: solid;
-	border-width: 1px 0;
-	}
-	
-.fc-button-inner {
-	position: relative;
-	float: left;
-	overflow: hidden;
-	}
-	
-.fc-state-default .fc-button-inner { /* non-theme */
-	border-style: solid;
-	border-width: 0 1px;
-	}
-	
-.fc-button-content {
-	position: relative;
-	float: left;
-	height: 1.9em;
-	line-height: 1.9em;
-	padding: 0 .6em;
-	white-space: nowrap;
-	}
-	
-/* icon (for jquery ui) */
-	
-.fc-button-content .fc-icon-wrap {
-	position: relative;
-	float: left;
-	top: 50%;
-	}
-	
-.fc-button-content .ui-icon {
-	position: relative;
-	float: left;
-	margin-top: -50%;
-	*margin-top: 0;
-	*top: -50%;
-	}
-	
-/* gloss effect */
-	
-.fc-state-default .fc-button-effect {
-	position: absolute;
-	top: 50%;
-	left: 0;
-	}
-	
-.fc-state-default .fc-button-effect span {
-	position: absolute;
-	top: -100px;
-	left: 0;
-	width: 500px;
-	height: 100px;
-	border-width: 100px 0 0 1px;
-	border-style: solid;
-	border-color: #fff;
-	background: #444;
-	opacity: .09;
-	filter: alpha(opacity=9);
-	}
-	
-/* button states (determines colors)  */
-	
-.fc-state-default,
-.fc-state-default .fc-button-inner {
-	border-style: solid;
-	border-color: #ccc #bbb #aaa;
-	background: #F3F3F3;
-	color: #000;
-	}
-	
-.fc-state-hover,
-.fc-state-hover .fc-button-inner {
-	border-color: #999;
-	}
-	
-.fc-state-down,
-.fc-state-down .fc-button-inner {
-	border-color: #555;
-	background: #777;
-	}
-	
-.fc-state-active,
-.fc-state-active .fc-button-inner {
-	border-color: #555;
-	background: #777;
-	color: #fff;
-	}
-	
-.fc-state-disabled,
-.fc-state-disabled .fc-button-inner {
-	color: #999;
-	border-color: #ddd;
-	}
-	
-.fc-state-disabled {
-	cursor: default;
-	}
-	
-.fc-state-disabled .fc-button-effect {
-	display: none;
-	}
-	
-	
-
-/* Global Event Styles
-------------------------------------------------------------------------*/
-	 
-.fc-event {
-	border-style: solid;
-	border-width: 0;
-	font-size: .85em;
-	cursor: default;
-	}
-	
-a.fc-event,
-.fc-event-draggable {
-	cursor: pointer;
-	}
-	
-a.fc-event {
-	text-decoration: none;
-	}
-	
-.fc-rtl .fc-event {
-	text-align: right;
-	}
-	
-.fc-event-skin {
-	border-color: #36c;     /* default BORDER color */
-	background-color: #36c; /* default BACKGROUND color */
-	color: #fff;            /* default TEXT color */
-	}
-	
-.fc-event-inner {
-	position: relative;
-	width: 100%;
-	height: 100%;
-	border-style: solid;
-	border-width: 0;
-	overflow: hidden;
-	}
-	
-.fc-event-time,
-.fc-event-title {
-	padding: 0 1px;
-	}
-	
-.fc .ui-resizable-handle { /*** TODO: don't use ui-resizable anymore, change class ***/
-	display: block;
-	position: absolute;
-	z-index: 99999;
-	overflow: hidden; /* hacky spaces (IE6/7) */
-	font-size: 300%;  /* */
-	line-height: 50%; /* */
-	}
-	
-	
-	
-/* Horizontal Events
-------------------------------------------------------------------------*/
-
-.fc-event-hori {
-	border-width: 1px 0;
-	margin-bottom: 1px;
-	}
-	
-/* resizable */
-	
-.fc-event-hori .ui-resizable-e {
-	top: 0           !important; /* importants override pre jquery ui 1.7 styles */
-	right: -3px      !important;
-	width: 7px       !important;
-	height: 100%     !important;
-	cursor: e-resize;
-	}
-	
-.fc-event-hori .ui-resizable-w {
-	top: 0           !important;
-	left: -3px       !important;
-	width: 7px       !important;
-	height: 100%     !important;
-	cursor: w-resize;
-	}
-	
-.fc-event-hori .ui-resizable-handle {
-	_padding-bottom: 14px; /* IE6 had 0 height */
-	}
-	
-	
-	
-/* Fake Rounded Corners (for buttons and events)
-------------------------------------------------------------*/
-	
-.fc-corner-left {
-	margin-left: 1px;
-	}
-	
-.fc-corner-left .fc-button-inner,
-.fc-corner-left .fc-event-inner {
-	margin-left: -1px;
-	}
-	
-.fc-corner-right {
-	margin-right: 1px;
-	}
-	
-.fc-corner-right .fc-button-inner,
-.fc-corner-right .fc-event-inner {
-	margin-right: -1px;
-	}
-	
-.fc-corner-top {
-	margin-top: 1px;
-	}
-	
-.fc-corner-top .fc-event-inner {
-	margin-top: -1px;
-	}
-	
-.fc-corner-bottom {
-	margin-bottom: 1px;
-	}
-	
-.fc-corner-bottom .fc-event-inner {
-	margin-bottom: -1px;
-	}
-	
-	
-	
-/* Fake Rounded Corners SPECIFICALLY FOR EVENTS
------------------------------------------------------------------*/
-	
-.fc-corner-left .fc-event-inner {
-	border-left-width: 1px;
-	}
-	
-.fc-corner-right .fc-event-inner {
-	border-right-width: 1px;
-	}
-	
-.fc-corner-top .fc-event-inner {
-	border-top-width: 1px;
-	}
-	
-.fc-corner-bottom .fc-event-inner {
-	border-bottom-width: 1px;
-	}
-	
-	
-	
-/* Reusable Separate-border Table
-------------------------------------------------------------*/
-
-table.fc-border-separate {
-	border-collapse: separate;
-	}
-	
-.fc-border-separate th,
-.fc-border-separate td {
-	border-width: 1px 0 0 1px;
-	}
-	
-.fc-border-separate th.fc-last,
-.fc-border-separate td.fc-last {
-	border-right-width: 1px;
-	}
-	
-.fc-border-separate tr.fc-last th,
-.fc-border-separate tr.fc-last td {
-	border-bottom-width: 1px;
-	}
-	
-.fc-border-separate tbody tr.fc-first td,
-.fc-border-separate tbody tr.fc-first th {
-	border-top-width: 0;
-	}
-	
-	
-
-/* Month View, Basic Week View, Basic Day View
-------------------------------------------------------------------------*/
-
-.fc-grid th {
-	text-align: center;
-	}
-	
-.fc-grid .fc-day-number {
-	float: right;
-	padding: 0 2px;
-	}
-	
-.fc-grid .fc-other-month .fc-day-number {
-	opacity: 0.3;
-	filter: alpha(opacity=30); /* for IE */
-	/* opacity with small font can sometimes look too faded
-	   might want to set the 'color' property instead
-	   making day-numbers bold also fixes the problem */
-	}
-	
-.fc-grid .fc-day-content {
-	clear: both;
-	padding: 2px 2px 1px; /* distance between events and day edges */
-	}
-	
-/* event styles */
-	
-.fc-grid .fc-event-time {
-	font-weight: bold;
-	}
-	
-/* right-to-left */
-	
-.fc-rtl .fc-grid .fc-day-number {
-	float: left;
-	}
-	
-.fc-rtl .fc-grid .fc-event-time {
-	float: right;
-	}
-	
-.fc-more-link {
-	font-size: 0.85em;
-	white-space: nowrap;
-	text-decoration: none;
-	cursor: pointer;
-	padding: 1px;
-}
-
-/* Agenda Week View, Agenda Day View
-------------------------------------------------------------------------*/
-
-.fc-agenda table {
-	border-collapse: separate;
-	}
-	
-.fc-agenda-days th {
-	text-align: center;
-	}
-	
-.fc-agenda .fc-agenda-axis {
-	width: 50px;
-	padding: 0 4px;
-	vertical-align: middle;
-	text-align: right;
-	white-space: nowrap;
-	font-weight: normal;
-	}
-	
-.fc-agenda .fc-day-content {
-	padding: 2px 2px 1px;
-	}
-	
-/* make axis border take precedence */
-	
-.fc-agenda-days .fc-agenda-axis {
-	border-right-width: 1px;
-	}
-	
-.fc-agenda-days .fc-col0 {
-	border-left-width: 0;
-	}
-	
-/* all-day area */
-	
-.fc-agenda-allday th {
-	border-width: 0 1px;
-	}
-	
-.fc-agenda-allday .fc-day-content {
-	min-height: 34px; /* TODO: doesnt work well in quirksmode */
-	_height: 34px;
-	}
-	
-/* divider (between all-day and slots) */
-	
-.fc-agenda-divider-inner {
-	height: 2px;
-	overflow: hidden;
-	}
-	
-.fc-widget-header .fc-agenda-divider-inner {
-	background: #eee;
-	}
-	
-/* slot rows */
-	
-.fc-agenda-slots th {
-	border-width: 1px 1px 0;
-	}
-	
-.fc-agenda-slots td {
-	border-width: 1px 0 0;
-	background: none;
-	}
-	
-.fc-agenda-slots td div {
-	height: 20px;
-	}
-	
-.fc-agenda-slots tr.fc-slot0 th,
-.fc-agenda-slots tr.fc-slot0 td {
-	border-top-width: 0;
-	}
-
-.fc-agenda-slots tr.fc-minor th,
-.fc-agenda-slots tr.fc-minor td {
-	border-top-style: dotted;
-	}
-	
-.fc-agenda-slots tr.fc-minor th.ui-widget-header {
-	*border-top-style: solid; /* doesn't work with background in IE6/7 */
-	}
-	
-
-
-/* Vertical Events
-------------------------------------------------------------------------*/
-
-.fc-event-vert {
-	border-width: 0 1px;
-	}
-	
-.fc-event-vert .fc-event-head,
-.fc-event-vert .fc-event-content {
-	position: relative;
-	z-index: 2;
-	width: 100%;
-	overflow: hidden;
-	}
-	
-.fc-event-vert .fc-event-time {
-	white-space: nowrap;
-	font-size: 10px;
-	}
-	
-.fc-event-vert .fc-event-bg { /* makes the event lighter w/ a semi-transparent overlay  */
-	position: absolute;
-	z-index: 1;
-	top: 0;
-	left: 0;
-	width: 100%;
-	height: 100%;
-	background: #fff;
-	opacity: .3;
-	filter: alpha(opacity=30);
-	}
-	
-.fc .ui-draggable-dragging .fc-event-bg, /* TODO: something nicer like .fc-opacity */
-.fc-select-helper .fc-event-bg {
-	display: none\9; /* for IE6/7/8. nested opacity filters while dragging don't work */
-	}
-	
-/* resizable */
-	
-.fc-event-vert .ui-resizable-s {
-	bottom: 0        !important; /* importants override pre jquery ui 1.7 styles */
-	width: 100%      !important;
-	height: 8px      !important;
-	overflow: hidden !important;
-	line-height: 8px !important;
-	font-size: 11px  !important;
-	font-family: monospace;
-	text-align: center;
-	cursor: s-resize;
-	}
-	
-.fc-agenda .ui-resizable-resizing { /* TODO: better selector */
-	_overflow: hidden;
-	}
-	
-.fc-timeline {
-	position: absolute;
-	width: 100%;
-	left: 0;
-	margin: 0;
-	padding: 0;
-	border: none;
-	border-top: 2px solid #3ec400;
-	z-index: 999;
-}
-
-/* List view  (by bruederli at kolabsys.com)
-------------------------------------------------------------------------*/
-
-.fc-view-list,
-.fc-view-table {
-	border: 1px solid #ccc;
-	width: auto;
-}
-
-.fc-view-list .fc-list-header,
-.fc-view-table td.fc-list-header {
-	border-width: 0;
-	border-bottom-width: 1px;
-	padding: 3px 5px;
-}
-
-.fc-view-table .fc-first td.fc-list-header {
-	border-top-width: 0;
-}
-
-.fc-list-section {
-	padding: 4px 2px;
-	border-width: 0;
-	border-bottom-width: 1px;
-}
-
-.fc-view-list .fc-last {
-	border-bottom-width: 0;
-}
-
-.fc-list-section .fc-event {
-	position: relative;
-	margin: 1px 2px 3px 2px;
-}
-
-.fc-view-table tr.fc-event td {
-	padding: 2px;
-	border-bottom: 1px solid #ccc;
-}
-
-.fc-view-table tr.fc-event td.fc-event-handle {
-	padding: 3px 8px 3px 3px;
-}
-
-.fc-view-table .fc-event-handle .fc-event-skin {
-	border-radius: 2px;
-	-moz-border-radius: 2px;
-}
-
-.fc-view-table .fc-event-handle .fc-event-inner {
-	display: block;
-	width: 8px;
-	height: 10px;
-	border-radius: 2px;
-	-moz-border-radius: 2px;
-}
-
-.fc-view-table table {
-	table-layout: fixed;
-	width: 100%;
-}
-
-.fc-view-table col.fc-event-handle {
-	width: 18px;
-}
-
-.fc-event-handle .fc-event-inner {
-	border-color: inherit;
-	background-color: inherit;
-}
-
-.fc-view-table col.fc-event-date {
-	width: 7em;
-}
-
-.fc-view-table .fc-list-day col.fc-event-date {
-	width: 1px;
-}
-
-.fc-view-table col.fc-event-time {
-	width: 8em;
-}
-
-.fc-view-table td.fc-event-date,
-.fc-view-table td.fc-event-time {
-	white-space: nowrap;
-	padding-right: 1em;
-}
-
diff --git a/plugins/calendar/skins/default/iehacks.css b/plugins/calendar/skins/default/iehacks.css
deleted file mode 100644
index 831266f..0000000
--- a/plugins/calendar/skins/default/iehacks.css
+++ /dev/null
@@ -1,88 +0,0 @@
-/* CSS hacks for IE 6/7 */
-
-#main {
-	width: expression(Math.max(300, parseInt(document.documentElement.clientWidth)-10)+'px');
-	height: expression(Math.max(300, parseInt(document.documentElement.clientHeight)-100)+'px');
-}
-
-#sidebar,
-#sidebartoggle {
-	height: expression((parseInt(this.parentNode.offsetHeight)-37)+'px');
-}
-
-#calendar {
-	width: expression((parseInt(this.parentNode.offsetWidth)-parseInt(document.getElementById('sidebartoggle').offsetWidth)-parseInt(document.getElementById('sidebartoggle').offsetLeft)-4)+'px');
-	height: expression(parseInt(this.parentNode.offsetHeight)+'px');
-}
-
-#calendars {
-	height: expression((parseInt(this.parentNode.offsetHeight)-220)+'px');
-}
-
-#agendaoptions {
-	width: expression((parseInt(this.parentNode.offsetWidth)-12)+'px');
-}
-
-#calendartoolbar a.buttonPas {
-	filter: alpha(opacity=35);
-}
-
-html #calendartoolbar a.button,
-html #calendartoolbar a.buttonPas {
-	background-image: url(images/toolbar.gif);
-}
-
-#datepicker a.ui-priority-secondary {
-	filter: alpha(opacity=40);
-}
-
-#calendarslist li span {
-	background-image: url(images/calendars.gif);
-}
-
-#datepicker .ui-widget-header {
-	width: 102%;
-}
-
-#eventshow.sensitivity-private {
-	background-image: url(images/badge_private.gif);
-}
-
-#eventshow.sensitivity-confidential {
-	background-image: url(images/badge_confidential.gif);
-}
-
-.fc-day-content {
-	cursor: default;
-}
-
-.fc-header-title h2 {
-	font-size: 16px;
-}
-
-.fc-event-temp .fc-event-bg {
-	display: none; /* nested opacity filters while dragging don't work */
-}
-
-#schedule-event-time {
-	filter: alpha(opacity=40);
-}
-
-#eventfreebusy .schedule-buttons,
-#edit-attendees-form #edit-attendee-schedule {
-	right: 0.6em;
-}
-
-#schedule-freebusy-times td.all-busy,
-#schedule-freebusy-times td.all-tentative,
-#schedule-freebusy-times td.all-out-of-office {
-	background-image: url('images/freebusy-colors.gif');
-}
-
-#schedule-freebusy-times tr.times td.allday {
-	width: expression(Math.max(60, parseInt(this.offsetWidth))+'px');
-}
-
-.ui-dialog .ui-dialog-titlebar {
-	width: expression((parseInt(this.parentNode.offsetWidth)-26)+'px');
-}
diff --git a/plugins/calendar/skins/default/images/attendee-status.gif b/plugins/calendar/skins/default/images/attendee-status.gif
deleted file mode 100644
index 5c08aae..0000000
Binary files a/plugins/calendar/skins/default/images/attendee-status.gif and /dev/null differ
diff --git a/plugins/calendar/skins/default/images/badge_confidential.gif b/plugins/calendar/skins/default/images/badge_confidential.gif
deleted file mode 100644
index ce6b2a0..0000000
Binary files a/plugins/calendar/skins/default/images/badge_confidential.gif and /dev/null differ
diff --git a/plugins/calendar/skins/default/images/badge_confidential.png b/plugins/calendar/skins/default/images/badge_confidential.png
deleted file mode 100644
index e12e788..0000000
Binary files a/plugins/calendar/skins/default/images/badge_confidential.png and /dev/null differ
diff --git a/plugins/calendar/skins/default/images/badge_private.gif b/plugins/calendar/skins/default/images/badge_private.gif
deleted file mode 100644
index 900ed73..0000000
Binary files a/plugins/calendar/skins/default/images/badge_private.gif and /dev/null differ
diff --git a/plugins/calendar/skins/default/images/badge_private.png b/plugins/calendar/skins/default/images/badge_private.png
deleted file mode 100644
index acf3207..0000000
Binary files a/plugins/calendar/skins/default/images/badge_private.png and /dev/null differ
diff --git a/plugins/calendar/skins/default/images/calendar-blue.png b/plugins/calendar/skins/default/images/calendar-blue.png
deleted file mode 100644
index 95c9452..0000000
Binary files a/plugins/calendar/skins/default/images/calendar-blue.png and /dev/null differ
diff --git a/plugins/calendar/skins/default/images/calendar.gif b/plugins/calendar/skins/default/images/calendar.gif
deleted file mode 100644
index 4b25de0..0000000
Binary files a/plugins/calendar/skins/default/images/calendar.gif and /dev/null differ
diff --git a/plugins/calendar/skins/default/images/calendar.png b/plugins/calendar/skins/default/images/calendar.png
deleted file mode 100644
index caab8a3..0000000
Binary files a/plugins/calendar/skins/default/images/calendar.png and /dev/null differ
diff --git a/plugins/calendar/skins/default/images/calendars.gif b/plugins/calendar/skins/default/images/calendars.gif
deleted file mode 100644
index cf12ebd..0000000
Binary files a/plugins/calendar/skins/default/images/calendars.gif and /dev/null differ
diff --git a/plugins/calendar/skins/default/images/calendars.png b/plugins/calendar/skins/default/images/calendars.png
deleted file mode 100644
index feb3945..0000000
Binary files a/plugins/calendar/skins/default/images/calendars.png and /dev/null differ
diff --git a/plugins/calendar/skins/default/images/eventicons.gif b/plugins/calendar/skins/default/images/eventicons.gif
deleted file mode 100644
index 7adbdeb..0000000
Binary files a/plugins/calendar/skins/default/images/eventicons.gif and /dev/null differ
diff --git a/plugins/calendar/skins/default/images/export.png b/plugins/calendar/skins/default/images/export.png
deleted file mode 100644
index d02781d..0000000
Binary files a/plugins/calendar/skins/default/images/export.png and /dev/null differ
diff --git a/plugins/calendar/skins/default/images/freebusy-colors.gif b/plugins/calendar/skins/default/images/freebusy-colors.gif
deleted file mode 100644
index 699f4b9..0000000
Binary files a/plugins/calendar/skins/default/images/freebusy-colors.gif and /dev/null differ
diff --git a/plugins/calendar/skins/default/images/freebusy-colors.png b/plugins/calendar/skins/default/images/freebusy-colors.png
deleted file mode 100644
index ca37cd0..0000000
Binary files a/plugins/calendar/skins/default/images/freebusy-colors.png and /dev/null differ
diff --git a/plugins/calendar/skins/default/images/invitation.png b/plugins/calendar/skins/default/images/invitation.png
deleted file mode 100644
index f3df83a..0000000
Binary files a/plugins/calendar/skins/default/images/invitation.png and /dev/null differ
diff --git a/plugins/calendar/skins/default/images/listheader.gif b/plugins/calendar/skins/default/images/listheader.gif
deleted file mode 100644
index bf77a11..0000000
Binary files a/plugins/calendar/skins/default/images/listheader.gif and /dev/null differ
diff --git a/plugins/calendar/skins/default/images/loading_blue.gif b/plugins/calendar/skins/default/images/loading_blue.gif
deleted file mode 100644
index 2ea6b19..0000000
Binary files a/plugins/calendar/skins/default/images/loading_blue.gif and /dev/null differ
diff --git a/plugins/calendar/skins/default/images/minicolors-all.png b/plugins/calendar/skins/default/images/minicolors-all.png
deleted file mode 100644
index 001ed88..0000000
Binary files a/plugins/calendar/skins/default/images/minicolors-all.png and /dev/null differ
diff --git a/plugins/calendar/skins/default/images/minicolors-handles.gif b/plugins/calendar/skins/default/images/minicolors-handles.gif
deleted file mode 100644
index 9aa9f75..0000000
Binary files a/plugins/calendar/skins/default/images/minicolors-handles.gif and /dev/null differ
diff --git a/plugins/calendar/skins/default/images/preview.png b/plugins/calendar/skins/default/images/preview.png
deleted file mode 100644
index 75f43aa..0000000
Binary files a/plugins/calendar/skins/default/images/preview.png and /dev/null differ
diff --git a/plugins/calendar/skins/default/images/print.png b/plugins/calendar/skins/default/images/print.png
deleted file mode 100644
index 52dd67e..0000000
Binary files a/plugins/calendar/skins/default/images/print.png and /dev/null differ
diff --git a/plugins/calendar/skins/default/images/spacer.gif b/plugins/calendar/skins/default/images/spacer.gif
deleted file mode 100644
index c749aaf..0000000
Binary files a/plugins/calendar/skins/default/images/spacer.gif and /dev/null differ
diff --git a/plugins/calendar/skins/default/images/toggle.gif b/plugins/calendar/skins/default/images/toggle.gif
deleted file mode 100644
index d3be86f..0000000
Binary files a/plugins/calendar/skins/default/images/toggle.gif and /dev/null differ
diff --git a/plugins/calendar/skins/default/images/toolbar.gif b/plugins/calendar/skins/default/images/toolbar.gif
deleted file mode 100644
index 2cf2693..0000000
Binary files a/plugins/calendar/skins/default/images/toolbar.gif and /dev/null differ
diff --git a/plugins/calendar/skins/default/images/toolbar.png b/plugins/calendar/skins/default/images/toolbar.png
deleted file mode 100644
index 94beddb..0000000
Binary files a/plugins/calendar/skins/default/images/toolbar.png and /dev/null differ
diff --git a/plugins/calendar/skins/default/jquery.miniColors.css b/plugins/calendar/skins/default/jquery.miniColors.css
deleted file mode 100644
index dc7c4a7..0000000
--- a/plugins/calendar/skins/default/jquery.miniColors.css
+++ /dev/null
@@ -1,106 +0,0 @@
-.miniColors-trigger {
-	height: 22px;
-	width: 22px;
-	background: url('images/minicolors-all.png') -170px 0 no-repeat;
-	vertical-align: middle;
-	margin: 0 .25em;
-	display: inline-block;
-	outline: none;
-}
-
-.miniColors-selector {
-	position: absolute;
-	width: 175px;
-	height: 150px;
-	background: #FFF;
-	border: solid 1px #BBB;
-	-moz-box-shadow: 0 0 6px rgba(0, 0, 0, .25);
-	-webkit-box-shadow: 0 0 6px rgba(0, 0, 0, .25);
-	box-shadow: 0 0 6px rgba(0, 0, 0, .25);
-	-moz-border-radius: 5px;
-	-webkit-border-radius: 5px;
-	border-radius: 5px;
-	padding: 5px;
-	z-index: 999999;
-}
-
-.miniColors-selector.black {
-	background: #000;
-	border-color: #000;
-}
-
-.miniColors-colors {
-	position: absolute;
-	top: 5px;
-	left: 5px;
-	width: 150px;
-	height: 150px;
-	background: url('images/minicolors-all.png') top left no-repeat;
-	cursor: crosshair;
-}
-
-.miniColors-hues {
-	position: absolute;
-	top: 5px;
-	left: 160px;
-	width: 20px;
-	height: 150px;
-	background: url('images/minicolors-all.png') -150px 0 no-repeat;
-	cursor: crosshair;
-}
-
-.miniColors-colorPicker {
-	position: absolute;
-	width: 11px;
-	height: 11px;
-	background: url('images/minicolors-all.png') -170px -28px no-repeat;
-}
-
-.miniColors-huePicker {
-	position: absolute;
-	left: -3px;
-	width: 26px;
-	height: 3px;
-	background: url('images/minicolors-all.png') -170px -24px no-repeat;
-	overflow: hidden;
-}
-
-.miniColors-presets {
-	position: absolute;
-	left: 185px;
-	top: 5px;
-	width: 60px;
-}
-
-.miniColors-colorPreset {
-	float: left;
-	width: 18px;
-	height: 15px;
-	margin: 2px;
-	border: 1px solid #333;
-	cursor: pointer;
-}
-
-.miniColors-colorPreset-active {
-	border: 2px dotted #666;
-	margin: 1px;
-}
-
-/* Hacks for IE6/7 */
-
-* html .miniColors-colors {
-	background-image: none;
-	filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='plugins/calendar/skins/default/images/minicolors-all.png', sizingMethod='crop');
-}
-
-* html .miniColors-colorPicker {
-	background: url('images/minicolors-handles.gif') 0 -28px no-repeat;
-}
-
-* html .miniColors-huePicker {
-	background: url('images/minicolors-handles.gif') 0 -24px no-repeat;
-}
-
-* html .miniColors-trigger {
-	background: url('images/minicolors-handles.gif') 0 0 no-repeat;
-}
diff --git a/plugins/calendar/skins/default/print.css b/plugins/calendar/skins/default/print.css
deleted file mode 100644
index 3c9bd71..0000000
--- a/plugins/calendar/skins/default/print.css
+++ /dev/null
@@ -1,208 +0,0 @@
-/*** Printing styles for Calendar plugin ***/
-
-body {
-	margin: 0;
-	color: #000;
-	background: #fff;
-}
-
-body, td, th, div, p, h3, select, input, textarea {
-	font-family: "Lucida Grande", Verdana, Arial, Helvetica, sans-serif;
-	font-size: 8pt;
-}
-
-#calendar {
-	position: relative;
-	top: 0;
-	left: 0;
-	height: auto;
-	margin: 5em auto 0 auto;
-	overflow: visible;
-}
-
-#calendar .fc-header-right {
-	padding-right: 0;
-}
-
-#printconfig {
-	position: fixed;
-	top: 0;
-	left: 0;
-	width: 100%;
-	z-index: 10000;
-	padding: 0.5em;
-	background: #ebebeb;
-	border-bottom: 1px solid #999;
-	box-shadow: 0 3px 4px #ccc;
-	-moz-box-shadow: 0 3px 4px #ccc;
-	-webkit-box-shadow: 0 3px 4px #ccc;
-}
-
-#printconfig .prop {
-	padding-right: 2em;
-}
-
-#message {
-	position: absolute;
-	top: 5.5em;
-	left: 1em;
-}
-
-#message div.loading {
-	color: #666;
-	font-style: italic;
-}
-
-#calendarlist {
-	list-style-type: square;
-	margin: 2em 0;
-	padding-left: 1em;
-}
-
-#calendarlist li {
-	float: left;
-	padding-left: 0;
-	padding-right: 3em;
-	margin-left: 0;
-	font-weight: bold;
-}
-
-#calendarlist input {
-	display: none;
-}
-
-.calwidth {
-	width: 700px;
-	margin: 0 auto;
-}
-
-.rightalign {
-	float: right;
-	padding-top: 0.3em;
-}
-
- at media print {
-	.noprint,
-	.fc-header-right span {
-		display: none;
-	}
-	
-	#calendar {
-		margin-top: 0;
-	}
-}
-
-/* fullcalendar style overrides */
-
-.fc-view {
-	overflow: visible;
-}
-
-.fc-event-skin,
-.fc-event-inner .fc-event-skin {
-	color: black;
-	background-color: #fff !important;
-}
-
-.fc-event-title {
-	font-weight: bold;
-}
-
-.fc-event-hori .fc-event-title {
-	font-weight: normal;
-	white-space: nowrap;
-}
-
-.fc-event-hori .fc-event-time {
-	white-space: nowrap;
-	font-weight: normal !important;
-	font-size: 10px;
-	padding-right: 0.6em;
-}
-
-.fc-grid .fc-event-time {
-	font-weight: normal !important;
-	padding-right: 0.3em;
-}
-
-.fc-event-cateories {
-	font-style: italic;
-}
-
-div.fc-event-location {
-	font-size: 90%;
-}
-
-.fc-agenda-slots td div {
-	height: 1.4em;
-}
-
-.fc-widget-header,
-.fc-mon, .fc-tue, .fc-wed, .fc-thu, .fc-fri {
-	background-color: #fff;
-}
-
-.fc-widget-header, .fc-widget-content {
-	border-color: #ccc;
-}
-
-.fc-icon-alarms,
-.fc-icon-recurring {
-	display: inline-block;
-	width: 11px;
-	height: 11px;
-	background: url('images/eventicons.gif') 0 0 no-repeat;
-	margin-left: 3px;
-	line-height: 10px;
-}
-
-.fc-icon-alarms {
-	background-position: 0 -13px;
-}
-
-.fc-view-list, .fc-view-table {
-	border: 0;
-}
-
-.fc-view-list div.fc-list-header,
-.fc-view-table td.fc-list-header {
-	padding: 0.3em;
-	background: #fff;
-	font-weight: bold;
-	font-size: 1.2em;
-	color: #333;
-	border-color: #333;
-	border-style: solid;
-	border-width: 1px 0;
-	filter: none;
-}
-
-.fc-list-section .fc-event {
-	cursor: auto;
-}
-
-.fc-view-table tr.fc-event td,
-.fc-view-table tr.fc-event td.fc-event-handle {
-	border-color: #999;
-	padding-top: 0.5em;
-	padding-bottom: 0.5em;
-}
-
-.fc-view-table tr.fc-last td {
-	border: 0;
-}
-
-.fc-view-table tr.fc-event .fc-event-description {
-	padding-left: 2em;
-	padding-top: 0em;
-}
-
-.fc-event-vert .fc-event-description {
-	font-size: 90%;
-	font-style: italic;
-}
-
-
-.fc-view-table col.fc-event-location {
-	width: 20%;
-}
diff --git a/plugins/calendar/skins/default/print.iehacks.css b/plugins/calendar/skins/default/print.iehacks.css
deleted file mode 100644
index 986f004..0000000
--- a/plugins/calendar/skins/default/print.iehacks.css
+++ /dev/null
@@ -1,25 +0,0 @@
-/* CSS hacks for IE 6/7 */
-
-#calendar {
-	top: 5em;
-}
-
-.calwidth {
-	width: 172mm;
-}
-
-.fc-header-title h2 {
-	font-size: 16px;
-}
-
-#calendarlist li {
-	float: none;
-	padding: 0;
-	margin-left: 1em;
-}
-
- at media print {
-	#calendar {
-		top: 0;
-	}
-}
\ No newline at end of file
diff --git a/plugins/calendar/skins/default/templates/attachment.html b/plugins/calendar/skins/default/templates/attachment.html
deleted file mode 100644
index 34d4da6..0000000
--- a/plugins/calendar/skins/default/templates/attachment.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<title><roundcube:object name="pagetitle" /></title>
-<roundcube:include file="/includes/links.html" />
-</head>
-<body class="extwin">
-
-<roundcube:include file="/includes/header.html" />
-
-<div id="partheader">
-<roundcube:object name="plugin.attachmentcontrols" cellpadding="2" cellspacing="0" />
-
-<div style="position:absolute; top:2px; right:0; width:12em; text-align:right">
-  [<a href="#close" class="closelink" onclick="self.close()"><roundcube:label name="close" /></a>]
-</div>
-</div>
-
-
-<div id="attachmentcontainer">
-<roundcube:object name="plugin.attachmentframe" id="attachmentframe" width="100%" height="100%" />
-</div>
-
-</body>
-</html>
-
diff --git a/plugins/calendar/skins/default/templates/calendar.html b/plugins/calendar/skins/default/templates/calendar.html
deleted file mode 100644
index a22056d..0000000
--- a/plugins/calendar/skins/default/templates/calendar.html
+++ /dev/null
@@ -1,201 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<title><roundcube:object name="pagetitle" /></title>
-<roundcube:include file="/includes/links.html" />
-<script type="text/javascript" src="/functions.js"></script>
-<!--[if lte IE 7]><link rel="stylesheet" type="text/css" href="./plugins/calendar/skins/default/iehacks.css" /><![endif]-->
-</head>
-<body class="calendarmain">
-
-<roundcube:include file="/includes/taskbar.html" />
-<roundcube:include file="/includes/header.html" />
-
-<div id="main">
-  <div id="calendarsidebar">
-    <div id="datepicker"></div>
-    <div id="calendars" style="visibility:hidden">
-      <div class="boxtitle"><roundcube:label name="calendar.calendars" /></div>
-      <div class="boxlistcontent">
-      <roundcube:object name="plugin.calendar_list" id="calendarslist" />
-      </div>
-      <div class="boxfooter">
-        <roundcube:button command="calendar-create" type="link" title="calendar.createcalendar" class="buttonPas addgroup" classAct="button addgroup" content=" " />
-        <roundcube:button name="calendaroptionslink" id="calendaroptionslink" type="link" title="calendaractions" class="button groupactions" onclick="rcmail_ui.show_popup('calendaroptions');return false" content=" " />
-      </div>
-    </div>
-  </div>
-  <div id="calendarsidebartoggle"></div>
-  <div id="calendar">
-    <roundcube:object name="plugin.angenda_options" class="boxfooter" id="agendaoptions" />
-  </div>
-</div>
-
-<div id="calendaroptionsmenu" class="popupmenu">
-  <ul>
-    <li><roundcube:button command="calendar-edit" label="calendar.edit" classAct="active" /></li>
-    <li><roundcube:button command="calendar-remove" label="calendar.remove" classAct="active" /></li>
-    <li><roundcube:button command="events-import" label="calendar.importevents" classAct="active" /></li>
-    <li><roundcube:button command="calendar-showurl" label="calendar.showurl" classAct="active" /></li>
-    <roundcube:if condition="env:calendar_driver == 'kolab'" />
-    <li class="separator_above"><roundcube:button command="folders" task="settings" type="link" label="managefolders" classAct="active" /></li>
-    <roundcube:endif />
-  </ul>
-</div>
-
-<div id="eventshow" class="uidialog">
-  <h1 id="event-title">Event Title</h1>
-  <div class="event-section" id="event-location">Location</div>
-  <div class="event-section" id="event-date">From-To</div>
-  <div class="event-section" id="event-description">
-    <h5 class="label"><roundcube:label name="calendar.description" /></h5>
-    <div class="event-text"></div>
-  </div>
-  <div class="event-section" id="event-repeat">
-    <h5 class="label"><roundcube:label name="calendar.repeat" /></h5>
-    <div class="event-text"></div>
-  </div>
-  <div class="event-section" id="event-alarm">
-    <h5 class="label"><roundcube:label name="calendar.alarms" /></h5>
-    <div class="event-text"></div>
-  </div>
-  <div class="event-section" id="event-attendees">
-    <h5 class="label"><roundcube:label name="calendar.tabattendees" /></h5>
-    <div class="event-text"></div>
-  </div>
-  <div class="event-line" id="event-calendar">
-    <label><roundcube:label name="calendar.calendar" /></label>
-    <span class="event-text">Default</span>
-  </div>
-  <div class="event-line" id="event-category">
-    <label><roundcube:label name="calendar.category" /></label>
-    <span class="event-text"></span>
-  </div>
-  <div class="event-line" id="event-free-busy">
-    <label><roundcube:label name="calendar.freebusy" /></label>
-    <span class="event-text"></span>
-  </div>
-  <div class="event-line" id="event-priority">
-    <label><roundcube:label name="calendar.priority" /></label>
-    <span class="event-text"></span>
-  </div>
-  <div class="event-line" id="event-sensitivity">
-    <label><roundcube:label name="calendar.sensitivity" /></label>
-    <span class="event-text"></span>
-  </div>
-  <div class="event-section" id="event-attachments">
-    <label><roundcube:label name="attachments" /></label>
-    <div class="event-text attachments-list"></div>
-  </div>
-  
-  <roundcube:object name="plugin.event_rsvp_buttons" id="event-rsvp" style="display:none" />
-</div>
-
-<roundcube:include file="/templates/eventedit.html" />
-
-<div id="eventfreebusy" class="uidialog">
-  <roundcube:object name="plugin.attendees_freebusy_table" id="attendees-freebusy-table" cellspacing="0" cellpadding="0" border="0" />
-  
-  <div class="schedule-options">
-     
-    <div class="schedule-buttons">
-      <button id="shedule-freebusy-prev" title="<roundcube:label name='previouspage' />">◄</button><button id="shedule-freebusy-next" title="<roundcube:label name='nextpage' />">►</button>
-    </div>
-  </div>
-  
-  <div style="float:left; width:28em">
-    <div class="form-section">
-      <label for="schedule-startdate"><roundcube:label name="calendar.start" /></label>
-      <input type="text" name="startdate" size="10" id="schedule-startdate" disabled="true" />  
-      <input type="text" name="starttime" size="6" id="schedule-starttime" disabled="true" />
-    </div>
-    <div class="form-section">
-      <label for="schedule-enddate"><roundcube:label name="calendar.end" /></label>
-      <input type="text" name="enddate" size="10" id="schedule-enddate" disabled="true" />  
-      <input type="text" name="endtime" size="6"  id="schedule-endtime" disabled="true" />
-    </div>
-  </div>
-  <div style="float:left">
-    <div class="schedule-find-buttons">
-      <button id="shedule-find-prev">◄ <roundcube:label name="calendar.prevslot" /></button>
-      <button id="shedule-find-next"><roundcube:label name="calendar.nextslot" /> ►</button>
-    </div>
-    <div class="schedule-options">
-      <label><input type="checkbox" id="schedule-freebusy-workinghours" value="1" /><roundcube:label name="calendar.onlyworkinghours" /></label>
-    </div>
-  </div>
-  <br style="clear:both;" />
-  
-  <roundcube:include file="/templates/freebusylegend.html" />
-  <div class="attendees-list">
-    <span class="attendee organizer"><roundcube:label name="calendar.roleorganizer" /></span>
-    <span class="attendee req-participant"><roundcube:label name="calendar.rolerequired" /></span>
-    <span class="attendee opt-participant"><roundcube:label name="calendar.roleoptional" /></span>
-    <span class="attendee chair"><roundcube:label name="calendar.roleresource" /></span>
-  </div>
-</div>
-
-<div id="calendarform" class="uidialog">
-  <roundcube:label name="loading" />
-</div>
-
-<div id="eventsimport" class="uidialog">
-  <roundcube:object name="plugin.events_import_form" id="events-import-form" uploadFieldSize="30" />
-</div>
-
-<div id="calendarurlbox" class="uidialog">
-  <p><roundcube:label name="calendar.showurldescription" /></p>
-  <textarea id="calfeedurl" rows="2" readonly="readonly"></textarea>
-</div>
-
-<div id="alarm-snooze-dropdown" class="popupmenu">
-  <roundcube:object name="plugin.snooze_select" type="ul" />
-</div>
-
-<div id="calendartoolbar">
-  <roundcube:button command="addevent" type="link" class="buttonPas addevent" classAct="button addevent" classSel="button addeventSel" title="calendar.new_event" content=" " />
-  <roundcube:button command="print" type="link" class="buttonPas print" classAct="button print" classSel="button printSel" title="calendar.print" content=" " />
-  <roundcube:button command="export" type="link" class="buttonPas export" classAct="button export" classSel="button exportSel" title="calendar.export" content=" " />
-  <roundcube:container name="toolbar" id="calendartoolbar" />
-</div>
-
-<div id="quicksearchbar">
-<roundcube:button name="searchmenulink" id="searchmenulink" image="/images/icons/glass.png" />
-<roundcube:object name="plugin.searchform" id="quicksearchbox" />
-<roundcube:button command="reset-search" id="searchreset" image="/images/icons/reset.gif" title="resetsearch" />
-</div>
-
-<roundcube:object name="plugin.calendar_css" />
-
-<script type="text/javascript">
-
-// use skin functions to handle popup-menus
-rcube_init_mail_ui();
-rcmail_ui.popups.calendaroptions = { id:'calendaroptionsmenu', above:1, obj:$('#calendaroptionsmenu') };
-
-$(document).ready(function(e){
-  // initialize sidebar toggle
-  $('#calendarsidebartoggle').click(function() {
-    var width = $(this).data('sidebarwidth');
-    var offset = $(this).data('offset');
-    var $sidebar = $('#calendarsidebar'), time = 250;
-    
-    if ($sidebar.is(':visible')) {
-      $sidebar.animate({ left:'-'+(width+10)+'px' }, time, function(){ $('#calendarsidebar').hide(); });
-      $(this).animate({ left:'8px'}, time, function(){ $('#calendarsidebartoggle').addClass('sidebarclosed') });
-      $('#calendar').animate({ left:'20px'}, time, function(){ $(this).fullCalendar('render'); });
-    }
-    else {
-      $sidebar.show().animate({ left:'10px' }, time);
-      $(this).animate({ left:offset+'px'}, time, function(){ $('#calendarsidebartoggle').removeClass('sidebarclosed'); });
-      $('#calendar').animate({ left:(width+16)+'px'}, time, function(){ $(this).fullCalendar('render'); });
-    }
-  })
-  .data('offset', $('#calendarsidebartoggle').position().left)
-  .data('sidebarwidth', $('#calendarsidebar').width() + $('#calendarsidebar').position().left);
-});
-
-</script>
-
-</body>
-</html>
diff --git a/plugins/calendar/skins/default/templates/eventedit.html b/plugins/calendar/skins/default/templates/eventedit.html
deleted file mode 100644
index 3548478..0000000
--- a/plugins/calendar/skins/default/templates/eventedit.html
+++ /dev/null
@@ -1,103 +0,0 @@
-<div id="eventedit" class="uidialog">
-  <form id="eventtabs" action="#" method="post" enctype="multipart/form-data">
-    <ul>
-      <li><a href="#event-tab-1"><roundcube:label name="calendar.tabsummary" /></a></li>
-      <li id="edit-tab-recurrence"><a href="#event-tab-2"><roundcube:label name="calendar.tabrecurrence" /></a></li>
-      <li id="edit-tab-attendees"><a href="#event-tab-3"><roundcube:label name="calendar.tabattendees" /></a></li>
-      <li id="edit-tab-attachments"><a href="#event-tab-4"><roundcube:label name="calendar.tabattachments" /></a></li>
-    </ul>
-    <!-- basic info -->
-    <div id="event-tab-1">
-      <div class="event-section">
-        <label for="edit-title"><roundcube:label name="calendar.title" /></label>
-        <br />
-        <input type="text" class="text" name="title" id="edit-title" size="40" />
-      </div>
-      <div class="event-section">
-        <label for="edit-location"><roundcube:label name="calendar.location" /></label>
-        <br />
-        <input type="text" class="text" name="location" id="edit-location" size="40" />
-      </div>
-      <div class="event-section">
-        <label for="edit-description"><roundcube:label name="calendar.description" /></label>
-        <br />
-        <textarea name="description" id="edit-description" class="text" rows="5" cols="40"></textarea>
-      </div>
-      <div class="event-section">
-        <label style="float:right;padding-right:0.5em"><input type="checkbox" name="allday" id="edit-allday" value="1" /><roundcube:label name="calendar.all-day" /></label>
-        <label for="edit-startdate"><roundcube:label name="calendar.start" /></label>
-        <input type="text" name="startdate" size="10" id="edit-startdate" />  
-        <input type="text" name="starttime" size="6" id="edit-starttime" />
-      </div>
-      <div class="event-section">
-        <label for="edit-enddate"><roundcube:label name="calendar.end" /></label>
-        <input type="text" name="enddate" size="10" id="edit-enddate" />  
-        <input type="text" name="endtime" size="6"  id="edit-endtime" />
-      </div>
-      <div class="event-section" id="edit-alarms">
-        <label for="edit-alarm"><roundcube:label name="calendar.alarms" /></label>
-        <roundcube:object name="plugin.alarm_select" />
-      </div>
-      <div class="event-section" id="calendar-select">
-        <label for="edit-calendar"><roundcube:label name="calendar.calendar" /></label>
-        <roundcube:object name="plugin.calendar_select" id="edit-calendar" />
-      </div>
-      <div class="event-section">
-        <label for="edit-categories"><roundcube:label name="calendar.category" /></label>
-        <roundcube:object name="plugin.category_select" id="edit-categories" />
-      </div>
-      <div class="event-section">
-        <label for="edit-free-busy"><roundcube:label name="calendar.freebusy" /></label>
-        <roundcube:object name="plugin.freebusy_select" id="edit-free-busy" />
-      </div>
-      <div class="event-section">
-        <label for="edit-priority"><roundcube:label name="calendar.priority" /></label>
-        <roundcube:object name="plugin.priority_select" id="edit-priority" />
-      </div>
-      <div class="event-section">
-        <label for="edit-sensitivity"><roundcube:label name="calendar.sensitivity" /></label>
-        <roundcube:object name="plugin.sensitivity_select" id="edit-sensitivity" />
-      </div>
-    </div>
-    <!-- recurrence settings -->
-    <div id="event-tab-2">
-      <div class="event-section border-after">
-        <roundcube:object name="plugin.recurrence_form" part="frequency" />
-      </div>
-      <div class="recurrence-form border-after" id="recurrence-form-daily">
-        <roundcube:object name="plugin.recurrence_form" part="daily" class="event-section" />
-      </div>
-      <div class="recurrence-form border-after" id="recurrence-form-weekly">
-        <roundcube:object name="plugin.recurrence_form" part="weekly" class="event-section" />
-      </div>
-      <div class="recurrence-form border-after" id="recurrence-form-monthly">
-        <roundcube:object name="plugin.recurrence_form" part="monthly" class="event-section" />
-      </div>
-      <div class="recurrence-form border-after" id="recurrence-form-yearly">
-        <roundcube:object name="plugin.recurrence_form" part="yearly" class="event-section" />
-      </div>
-      <div class="recurrence-form" id="recurrence-form-until">
-        <roundcube:object name="plugin.recurrence_form" part="until" class="event-section" />
-      </div>
-    </div>
-    <!-- attendees list -->
-    <div id="event-tab-3">
-      <roundcube:object name="plugin.attendees_list" id="edit-attendees-table" cellspacing="0" cellpadding="0" border="0" />
-      <roundcube:object name="plugin.attendees_form" id="edit-attendees-form" />
-      <roundcube:include file="/templates/freebusylegend.html" />
-    </div>
-    <!-- attachments list (with upload form) -->
-    <div id="event-tab-4">
-      <div id="edit-attachments" class="attachments-list">
-        <roundcube:object name="plugin.attachments_list" id="attachmentlist" deleteIcon="/images/icons/delete.png" cancelIcon="/images/icons/delete.png" loadingIcon="/images/display/loading_blue.gif" />
-      </div>
-      <div id="edit-attachments-form">
-        <roundcube:object name="plugin.attachments_form" id="calendar-attachment-form" attachmentFieldSize="30" />
-      </div>
-    </div>
-  </form>
-
-  <roundcube:object name="plugin.edit_attendees_notify" id="edit-attendees-notify" class="event-dialog-message" style="display:none" />
-  <roundcube:object name="plugin.edit_recurring_warning" class="event-dialog-message edit-recurring-warning" style="display:none" />
-  <div id="edit-localchanges-warning" class="event-dialog-message" style="display:none"><roundcube:label name="calendar.localchangeswarning" /></div>
-</div>
\ No newline at end of file
diff --git a/plugins/calendar/skins/default/templates/freebusylegend.html b/plugins/calendar/skins/default/templates/freebusylegend.html
deleted file mode 100644
index 5cc01a1..0000000
--- a/plugins/calendar/skins/default/templates/freebusylegend.html
+++ /dev/null
@@ -1,7 +0,0 @@
-  <div id="edit-attendees-legend" class="availability">
-    <span class="legend"><img class="availabilityicon free" src="./program/blank.gif" /> <roundcube:label name="calendar.availfree" /></span>
-    <span class="legend"><img class="availabilityicon busy" src="./program/blank.gif" /> <roundcube:label name="calendar.availbusy" /></span>
-    <span class="legend"><img class="availabilityicon tentative" src="./program/blank.gif" /> <roundcube:label name="calendar.availtentative" /></span>
-    <span class="legend"><img class="availabilityicon out-of-office" src="./program/blank.gif" /> <roundcube:label name="calendar.availoutofoffice" /></span>
-    <span class="legend"><img class="availabilityicon unknown" src="./program/blank.gif" /> <roundcube:label name="calendar.availunknown" /></span>
-  </div>
diff --git a/plugins/calendar/skins/default/templates/itipattend.html b/plugins/calendar/skins/default/templates/itipattend.html
deleted file mode 100644
index 84968b5..0000000
--- a/plugins/calendar/skins/default/templates/itipattend.html
+++ /dev/null
@@ -1,21 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<title><roundcube:object name="pagetitle" /></title>
-<roundcube:include file="/includes/links.html" />
-</head>
-<body class="calendaritipattend">
-
-<roundcube:object name="logo" src="/images/roundcube_logo.png" id="logo" border="0" style="margin:0 11px" />
-
-<roundcube:object name="message" id="message" />
-
-<div class="centerbox">
-	<roundcube:object name="plugin.event_inviteform" />
-	<roundcube:object name="plugin.event_invitebox" class="calendar-invitebox" />
-	<roundcube:object name="plugin.event_rsvp_buttons" type="submit" iname="rsvp" id="event-rsvp" />
-	</form>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/plugins/calendar/skins/default/templates/kolabacl.html b/plugins/calendar/skins/default/templates/kolabacl.html
deleted file mode 100644
index 668a670..0000000
--- a/plugins/calendar/skins/default/templates/kolabacl.html
+++ /dev/null
@@ -1,13 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<title><roundcube:object name="pagetitle" /></title>
-<roundcube:include file="/includes/links.html" />
-<script type="text/javascript" src="/functions.js"></script>
-</head>
-<body class="iframe" style="background:#fff; margin:0">
-
-<roundcube:object name="folderacl" />
-
-</body>
-</html>
diff --git a/plugins/calendar/skins/default/templates/kolabform.html b/plugins/calendar/skins/default/templates/kolabform.html
deleted file mode 100644
index a74481a..0000000
--- a/plugins/calendar/skins/default/templates/kolabform.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<div id="calendar-kolabform">
-  <roundcube:object name="calendarform" />
-</div>
-<script type="text/javascript">rcube_init_tabs('calendar-kolabform');</script>
-<style type="text/css">
-#calendarpropform { min-width:680px }
-</style>
\ No newline at end of file
diff --git a/plugins/calendar/skins/default/templates/print.html b/plugins/calendar/skins/default/templates/print.html
deleted file mode 100644
index 3fc85f3..0000000
--- a/plugins/calendar/skins/default/templates/print.html
+++ /dev/null
@@ -1,28 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<title><roundcube:object name="pagetitle" /></title>
-</head>
-<body class="calendarprint">
-
-<div id="printconfig" class="noprint">
-  <div class="calwidth">
-    <a href="#close" onclick="window.close()" class="rightalign"><roundcube:label name="close" /></a>
-    <span class="prop"><input type="button" id="printme" value="<roundcube:label name='print' />" onclick="window.print()"></span>
-    <span class="prop"><label><input type="checkbox" id="propdescription" checked="checked" /> <roundcube:label name="calendar.printdescriptions" /></label></span>
-  </div>
-</div>
-
-<roundcube:object name="message" id="message" class="noprint" />
-
-<div id="calendar" class="calwidth"></div>
-
-<div class="calwidth">
-  <roundcube:object name="plugin.calendar_list" activeonly="true" id="calendarlist" />
-</div>
-
-<roundcube:object name="plugin.calendar_css" printmode="true" />
-
-<!--[if lte IE 7]><link rel="stylesheet" type="text/css" href="./plugins/calendar/skins/default/print.iehacks.css" /><![endif]-->
-</body>
-</html>
\ No newline at end of file
diff --git a/plugins/kolab_addressbook/package.xml b/plugins/kolab_addressbook/package.xml
index 61015a7..73e26a4 100644
--- a/plugins/kolab_addressbook/package.xml
+++ b/plugins/kolab_addressbook/package.xml
@@ -44,10 +44,10 @@
 			<file name="lib/rcube_kolab_contacts.php" role="php"></file>
 			<file name="config.inc.php.dist" role="data"></file>
 			<file name="LICENSE" role="data"></file>
-			<file name="skins/default/kolab_addressbook.css" role="data"></file>
-			<file name="skins/default/kolab_folders.gif" role="data"></file>
-			<file name="skins/default/kolab_folders.png" role="data"></file>
-			<file name="skins/default/templates/bookedit.html" role="data"></file>
+			<file name="skins/classic/kolab_addressbook.css" role="data"></file>
+			<file name="skins/classic/kolab_folders.gif" role="data"></file>
+			<file name="skins/classic/kolab_folders.png" role="data"></file>
+			<file name="skins/classic/templates/bookedit.html" role="data"></file>
 			<file name="skins/larry/kolab_addressbook.css" role="data"></file>
 			<file name="skins/larry/templates/bookedit.html" role="data"></file>
 			<file name="localization/de_CH.inc" role="data"></file>
diff --git a/plugins/kolab_addressbook/skins/classic/kolab_addressbook.css b/plugins/kolab_addressbook/skins/classic/kolab_addressbook.css
new file mode 100644
index 0000000..da3abed
--- /dev/null
+++ b/plugins/kolab_addressbook/skins/classic/kolab_addressbook.css
@@ -0,0 +1,35 @@
+#directorylist li.addressbook.readonly
+{
+  /* don't use 'background' to not reset background color */
+  background-image: url(kolab_folders.png);
+  background-position: 5px 0px;
+  background-repeat: no-repeat;
+}
+
+#directorylist li.addressbook.shared
+{
+  background-image: url(kolab_folders.png);
+  background-position: 5px -54px;
+  background-repeat: no-repeat;
+}
+
+#directorylist li.addressbook.shared.readonly
+{
+  background-image: url(kolab_folders.png);
+  background-position: 5px -72px;
+  background-repeat: no-repeat;
+}
+
+#directorylist li.addressbook.other
+{
+  background-image: url(kolab_folders.png);
+  background-position: 5px -18px;
+  background-repeat: no-repeat;
+}
+
+#directorylist li.addressbook.other.readonly
+{
+  background-image: url(kolab_folders.png);
+  background-position: 5px -36px;
+  background-repeat: no-repeat;
+}
diff --git a/plugins/kolab_addressbook/skins/classic/kolab_folders.gif b/plugins/kolab_addressbook/skins/classic/kolab_folders.gif
new file mode 100644
index 0000000..3ac6fc4
Binary files /dev/null and b/plugins/kolab_addressbook/skins/classic/kolab_folders.gif differ
diff --git a/plugins/kolab_addressbook/skins/classic/kolab_folders.png b/plugins/kolab_addressbook/skins/classic/kolab_folders.png
new file mode 100644
index 0000000..95a192e
Binary files /dev/null and b/plugins/kolab_addressbook/skins/classic/kolab_folders.png differ
diff --git a/plugins/kolab_addressbook/skins/classic/templates/bookedit.html b/plugins/kolab_addressbook/skins/classic/templates/bookedit.html
new file mode 100644
index 0000000..717ed8c
--- /dev/null
+++ b/plugins/kolab_addressbook/skins/classic/templates/bookedit.html
@@ -0,0 +1,27 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+<link rel="stylesheet" type="text/css" href="/settings.css" />
+<script type="text/javascript" src="/functions.js"></script>
+</head>
+<body class="iframe">
+
+<div id="folder-title" class="boxtitle"><roundcube:label name="kolab_addressbook.bookproperties" /></div>
+
+<div id="folder-details" class="boxcontent">
+  <roundcube:object name="bookdetails" />
+  <p>
+<!--
+    <roundcube:if condition="!strlen(request:_source)" />
+    <input type="button" value="<roundcube:label name="cancel" />" class="button" onclick="history.back()" /> 
+    <roundcube:endif />
+-->
+    <roundcube:button command="book-save" type="input" class="button mainaction" label="save" />
+  </p>
+</div>
+<script type="text/javascript">rcube_init_tabs('folder-details > form')</script>
+
+</body>
+</html>
diff --git a/plugins/kolab_addressbook/skins/default/kolab_addressbook.css b/plugins/kolab_addressbook/skins/default/kolab_addressbook.css
deleted file mode 100644
index da3abed..0000000
--- a/plugins/kolab_addressbook/skins/default/kolab_addressbook.css
+++ /dev/null
@@ -1,35 +0,0 @@
-#directorylist li.addressbook.readonly
-{
-  /* don't use 'background' to not reset background color */
-  background-image: url(kolab_folders.png);
-  background-position: 5px 0px;
-  background-repeat: no-repeat;
-}
-
-#directorylist li.addressbook.shared
-{
-  background-image: url(kolab_folders.png);
-  background-position: 5px -54px;
-  background-repeat: no-repeat;
-}
-
-#directorylist li.addressbook.shared.readonly
-{
-  background-image: url(kolab_folders.png);
-  background-position: 5px -72px;
-  background-repeat: no-repeat;
-}
-
-#directorylist li.addressbook.other
-{
-  background-image: url(kolab_folders.png);
-  background-position: 5px -18px;
-  background-repeat: no-repeat;
-}
-
-#directorylist li.addressbook.other.readonly
-{
-  background-image: url(kolab_folders.png);
-  background-position: 5px -36px;
-  background-repeat: no-repeat;
-}
diff --git a/plugins/kolab_addressbook/skins/default/kolab_folders.gif b/plugins/kolab_addressbook/skins/default/kolab_folders.gif
deleted file mode 100644
index 3ac6fc4..0000000
Binary files a/plugins/kolab_addressbook/skins/default/kolab_folders.gif and /dev/null differ
diff --git a/plugins/kolab_addressbook/skins/default/kolab_folders.png b/plugins/kolab_addressbook/skins/default/kolab_folders.png
deleted file mode 100644
index 95a192e..0000000
Binary files a/plugins/kolab_addressbook/skins/default/kolab_folders.png and /dev/null differ
diff --git a/plugins/kolab_addressbook/skins/default/templates/bookedit.html b/plugins/kolab_addressbook/skins/default/templates/bookedit.html
deleted file mode 100644
index 717ed8c..0000000
--- a/plugins/kolab_addressbook/skins/default/templates/bookedit.html
+++ /dev/null
@@ -1,27 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<title><roundcube:object name="pagetitle" /></title>
-<roundcube:include file="/includes/links.html" />
-<link rel="stylesheet" type="text/css" href="/settings.css" />
-<script type="text/javascript" src="/functions.js"></script>
-</head>
-<body class="iframe">
-
-<div id="folder-title" class="boxtitle"><roundcube:label name="kolab_addressbook.bookproperties" /></div>
-
-<div id="folder-details" class="boxcontent">
-  <roundcube:object name="bookdetails" />
-  <p>
-<!--
-    <roundcube:if condition="!strlen(request:_source)" />
-    <input type="button" value="<roundcube:label name="cancel" />" class="button" onclick="history.back()" /> 
-    <roundcube:endif />
--->
-    <roundcube:button command="book-save" type="input" class="button mainaction" label="save" />
-  </p>
-</div>
-<script type="text/javascript">rcube_init_tabs('folder-details > form')</script>
-
-</body>
-</html>
diff --git a/plugins/kolab_zpush/package.xml b/plugins/kolab_zpush/package.xml
index ef6dfd7..ffa27d0 100644
--- a/plugins/kolab_zpush/package.xml
+++ b/plugins/kolab_zpush/package.xml
@@ -32,13 +32,13 @@
 			<file name="localization/de_DE.inc" role="data"></file>
 			<file name="localization/en_US.inc" role="data"></file>
 			<file name="localization/pl_PL.inc" role="data"></file>
-			<file name="skins/default/templates/config.html" role="data"></file>
-			<file name="skins/default/config.css" role="data"></file>
-			<file name="skins/default/alarm-clock.png" role="data"></file>
-			<file name="skins/default/deviceactions.png" role="data"></file>
-			<file name="skins/default/foldertypes.png" role="data"></file>
-			<file name="skins/default/pointer-left.gif" role="data"></file>
-			<file name="skins/default/synchronize.png" role="data"></file>
+			<file name="skins/classic/templates/config.html" role="data"></file>
+			<file name="skins/classic/config.css" role="data"></file>
+			<file name="skins/classic/alarm-clock.png" role="data"></file>
+			<file name="skins/classic/deviceactions.png" role="data"></file>
+			<file name="skins/classic/foldertypes.png" role="data"></file>
+			<file name="skins/classic/pointer-left.gif" role="data"></file>
+			<file name="skins/classic/synchronize.png" role="data"></file>
 			<file name="skins/larry/templates/config.html" role="data"></file>
 			<file name="skins/larry/config.css" role="data"></file>
 			<file name="skins/larry/alarm-clock.png" role="data"></file>
diff --git a/plugins/kolab_zpush/skins/classic/alarm-clock.png b/plugins/kolab_zpush/skins/classic/alarm-clock.png
new file mode 100755
index 0000000..518bdc1
Binary files /dev/null and b/plugins/kolab_zpush/skins/classic/alarm-clock.png differ
diff --git a/plugins/kolab_zpush/skins/classic/config.css b/plugins/kolab_zpush/skins/classic/config.css
new file mode 100644
index 0000000..a3f0f18
--- /dev/null
+++ b/plugins/kolab_zpush/skins/classic/config.css
@@ -0,0 +1,119 @@
+/* Stylesheets for the Kolab Z-Push configuration UI */
+#configform {
+	padding-top: 15px;
+}
+
+#devices-table {
+	width: 100%;
+	table-layout: fixed;
+}
+
+#devices-table td {
+	cursor: pointer;
+}
+
+#devices-table td span.devicetype {
+	padding-left: 1em;
+	font-style: italic;
+	color: #666;
+}
+
+#devices-table tr.selected td span.devicetype {
+	color: #ccc;
+}
+
+.boxfooter a.button.delete,
+.boxfooter a.buttonPas.delete {
+	background-image: url(deviceactions.png);
+}
+
+div.subscriptionblock {
+	float: left;
+	margin: 0.5em 3em 2em 0;
+	padding: 0;
+	border: 1px solid #ddd;
+}
+
+div.subscriptionblock h3 {
+	font-size: 12px;
+	color: #333;
+	margin: 0 0 0.4em 0;
+	padding: 4px 4px 5px 30px;
+	background: url(foldertypes.png) 4px 4px no-repeat #fbfbfb;
+}
+
+div.subscriptionblock h3.contact {
+	background-position: 4px -16px;
+}
+
+div.subscriptionblock h3.event {
+	background-position: 4px -36px;
+}
+
+div.subscriptionblock h3.task {
+	background-position: 4px -56x;
+}
+
+div.subscriptionblock h3.note {
+	background-position: 4px -76px;
+}
+
+#foldersubscriptions thead td {
+	color: #999;
+	font-weight: bold;
+	padding: 3px 5px;
+	min-width: 2em;
+}
+
+#foldersubscriptions tbody td {
+	padding: 2px 5px;
+	border-top: 1px solid #ddd;
+}
+
+#foldersubscriptions td label {
+	display: block;
+}
+
+#foldersubscriptions td.mailbox {
+	padding-right: 3em;
+	padding-left: 2px;
+	min-width: 12em;
+}
+
+#foldersubscriptions td.virtual {
+	color: #999;
+}
+
+#foldersubscriptions {
+	overflow: auto;
+	max-height: 400px;
+	margin-top: 0.5em;
+}
+
+#introtext {
+	position: absolute;
+	top: 12px;
+	left: 5px;
+	padding-left: 10px;
+	max-width: 40em;
+}
+
+#introtext .pointer-left {
+	position: absolute;
+	top: 0;
+	left: 0;
+	width: 14px;
+	height: 100%;
+	background: url(pointer-left.gif) right center no-repeat;
+}
+
+#introtext .inner {
+	border: 3px solid #e7e7e7;
+	background: #fff;
+}
+
+#introtext .bordered {
+	padding: 12px;
+	border: 1px solid #ccc;
+	background: #fff;
+}
diff --git a/plugins/kolab_zpush/skins/classic/deviceactions.png b/plugins/kolab_zpush/skins/classic/deviceactions.png
new file mode 100644
index 0000000..a542df9
Binary files /dev/null and b/plugins/kolab_zpush/skins/classic/deviceactions.png differ
diff --git a/plugins/kolab_zpush/skins/classic/foldertypes.png b/plugins/kolab_zpush/skins/classic/foldertypes.png
new file mode 100644
index 0000000..4950296
Binary files /dev/null and b/plugins/kolab_zpush/skins/classic/foldertypes.png differ
diff --git a/plugins/kolab_zpush/skins/classic/pointer-left.gif b/plugins/kolab_zpush/skins/classic/pointer-left.gif
new file mode 100644
index 0000000..b2de585
Binary files /dev/null and b/plugins/kolab_zpush/skins/classic/pointer-left.gif differ
diff --git a/plugins/kolab_zpush/skins/classic/synchronize.png b/plugins/kolab_zpush/skins/classic/synchronize.png
new file mode 100755
index 0000000..ba5ebd1
Binary files /dev/null and b/plugins/kolab_zpush/skins/classic/synchronize.png differ
diff --git a/plugins/kolab_zpush/skins/classic/templates/config.html b/plugins/kolab_zpush/skins/classic/templates/config.html
new file mode 100644
index 0000000..beb062f
--- /dev/null
+++ b/plugins/kolab_zpush/skins/classic/templates/config.html
@@ -0,0 +1,63 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+<script type="text/javascript" src="/functions.js"></script>
+<script type="text/javascript" src="/splitter.js"></script>
+</head>
+<body>
+
+<roundcube:include file="/includes/taskbar.html" />
+<roundcube:include file="/includes/header.html" />
+<roundcube:include file="/includes/settingstabs.html" />
+
+<div id="mainscreen">
+
+<div id="sectionslist">
+<div id="directorylist-title" class="boxtitle"><roundcube:label name="kolab_zpush.devices" /></div>
+<div class="boxlistcontent">
+	<roundcube:object name="plugin.devicelist" id="devices-table" class="records-table" cellspacing="0" />
+</div>
+<div class="boxfooter">
+	<roundcube:button type="link" command="plugin.delete-device" title="kolab_zpush.deletedevice" class="buttonPas delete" classAct="button delete" content=" " />
+</div>
+</div>
+
+<div id="prefs-box">
+	<div class="boxtitle" style="display:none"><roundcube:label name="kolab_zpush.syncsettings"></div>
+	<form action="#" method="post" id="configform" class="boxcontent" style="display:none">
+		<fieldset>
+			<legend><roundcube:label name="kolab_zpush.deviceconfig" /></legend>
+			<roundcube:object name="plugin.deviceconfigform" form="configform" />
+		</fieldset>
+		<fieldset>
+			<legend><roundcube:label name="kolab_zpush.folderstosync" /></legend>
+			<roundcube:object name="plugin.foldersubscriptions" form="configform" id="foldersubscriptions" syncicon="synchronize.png" alarmicon="alarm-clock.png" />
+		</fieldset>
+		<p class="formbuttons">
+			<roundcube:button type="input" class="button mainaction" command="plugin.save-config" label="save" />
+			<roundcube:button type="input" class="button" command="plugin.delete-device" label="kolab_zpush.deletedevice" />
+		</p>
+	</form>
+	<div id="introtext">
+		<div class="inner"><div class="bordered">
+			<roundcube:if condition="env:devicecount" />
+				<roundcube:label name="kolab_zpush.introtext" />
+			<roundcube:else />
+				<roundcube:label name="kolab_zpush.nodevices" html="true" />
+			<roundcube:endif />
+		</div></div>
+		<div class="pointer-left"></div>
+	</div>
+</div>
+
+</div>
+
+<script type="text/javascript">
+	var viewsplit = new rcube_splitter({ id:'devicelistsplitter', p1: 'sectionslist', p2: 'prefs-box', orientation: 'v', relative: true, start: 195 });
+	rcmail.add_onload('viewsplit.init()');
+</script>
+
+</body>
+</html>
diff --git a/plugins/kolab_zpush/skins/default/alarm-clock.png b/plugins/kolab_zpush/skins/default/alarm-clock.png
deleted file mode 100755
index 518bdc1..0000000
Binary files a/plugins/kolab_zpush/skins/default/alarm-clock.png and /dev/null differ
diff --git a/plugins/kolab_zpush/skins/default/config.css b/plugins/kolab_zpush/skins/default/config.css
deleted file mode 100644
index a3f0f18..0000000
--- a/plugins/kolab_zpush/skins/default/config.css
+++ /dev/null
@@ -1,119 +0,0 @@
-/* Stylesheets for the Kolab Z-Push configuration UI */
-#configform {
-	padding-top: 15px;
-}
-
-#devices-table {
-	width: 100%;
-	table-layout: fixed;
-}
-
-#devices-table td {
-	cursor: pointer;
-}
-
-#devices-table td span.devicetype {
-	padding-left: 1em;
-	font-style: italic;
-	color: #666;
-}
-
-#devices-table tr.selected td span.devicetype {
-	color: #ccc;
-}
-
-.boxfooter a.button.delete,
-.boxfooter a.buttonPas.delete {
-	background-image: url(deviceactions.png);
-}
-
-div.subscriptionblock {
-	float: left;
-	margin: 0.5em 3em 2em 0;
-	padding: 0;
-	border: 1px solid #ddd;
-}
-
-div.subscriptionblock h3 {
-	font-size: 12px;
-	color: #333;
-	margin: 0 0 0.4em 0;
-	padding: 4px 4px 5px 30px;
-	background: url(foldertypes.png) 4px 4px no-repeat #fbfbfb;
-}
-
-div.subscriptionblock h3.contact {
-	background-position: 4px -16px;
-}
-
-div.subscriptionblock h3.event {
-	background-position: 4px -36px;
-}
-
-div.subscriptionblock h3.task {
-	background-position: 4px -56x;
-}
-
-div.subscriptionblock h3.note {
-	background-position: 4px -76px;
-}
-
-#foldersubscriptions thead td {
-	color: #999;
-	font-weight: bold;
-	padding: 3px 5px;
-	min-width: 2em;
-}
-
-#foldersubscriptions tbody td {
-	padding: 2px 5px;
-	border-top: 1px solid #ddd;
-}
-
-#foldersubscriptions td label {
-	display: block;
-}
-
-#foldersubscriptions td.mailbox {
-	padding-right: 3em;
-	padding-left: 2px;
-	min-width: 12em;
-}
-
-#foldersubscriptions td.virtual {
-	color: #999;
-}
-
-#foldersubscriptions {
-	overflow: auto;
-	max-height: 400px;
-	margin-top: 0.5em;
-}
-
-#introtext {
-	position: absolute;
-	top: 12px;
-	left: 5px;
-	padding-left: 10px;
-	max-width: 40em;
-}
-
-#introtext .pointer-left {
-	position: absolute;
-	top: 0;
-	left: 0;
-	width: 14px;
-	height: 100%;
-	background: url(pointer-left.gif) right center no-repeat;
-}
-
-#introtext .inner {
-	border: 3px solid #e7e7e7;
-	background: #fff;
-}
-
-#introtext .bordered {
-	padding: 12px;
-	border: 1px solid #ccc;
-	background: #fff;
-}
diff --git a/plugins/kolab_zpush/skins/default/deviceactions.png b/plugins/kolab_zpush/skins/default/deviceactions.png
deleted file mode 100644
index a542df9..0000000
Binary files a/plugins/kolab_zpush/skins/default/deviceactions.png and /dev/null differ
diff --git a/plugins/kolab_zpush/skins/default/foldertypes.png b/plugins/kolab_zpush/skins/default/foldertypes.png
deleted file mode 100644
index 4950296..0000000
Binary files a/plugins/kolab_zpush/skins/default/foldertypes.png and /dev/null differ
diff --git a/plugins/kolab_zpush/skins/default/pointer-left.gif b/plugins/kolab_zpush/skins/default/pointer-left.gif
deleted file mode 100644
index b2de585..0000000
Binary files a/plugins/kolab_zpush/skins/default/pointer-left.gif and /dev/null differ
diff --git a/plugins/kolab_zpush/skins/default/synchronize.png b/plugins/kolab_zpush/skins/default/synchronize.png
deleted file mode 100755
index ba5ebd1..0000000
Binary files a/plugins/kolab_zpush/skins/default/synchronize.png and /dev/null differ
diff --git a/plugins/kolab_zpush/skins/default/templates/config.html b/plugins/kolab_zpush/skins/default/templates/config.html
deleted file mode 100644
index beb062f..0000000
--- a/plugins/kolab_zpush/skins/default/templates/config.html
+++ /dev/null
@@ -1,63 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<title><roundcube:object name="pagetitle" /></title>
-<roundcube:include file="/includes/links.html" />
-<script type="text/javascript" src="/functions.js"></script>
-<script type="text/javascript" src="/splitter.js"></script>
-</head>
-<body>
-
-<roundcube:include file="/includes/taskbar.html" />
-<roundcube:include file="/includes/header.html" />
-<roundcube:include file="/includes/settingstabs.html" />
-
-<div id="mainscreen">
-
-<div id="sectionslist">
-<div id="directorylist-title" class="boxtitle"><roundcube:label name="kolab_zpush.devices" /></div>
-<div class="boxlistcontent">
-	<roundcube:object name="plugin.devicelist" id="devices-table" class="records-table" cellspacing="0" />
-</div>
-<div class="boxfooter">
-	<roundcube:button type="link" command="plugin.delete-device" title="kolab_zpush.deletedevice" class="buttonPas delete" classAct="button delete" content=" " />
-</div>
-</div>
-
-<div id="prefs-box">
-	<div class="boxtitle" style="display:none"><roundcube:label name="kolab_zpush.syncsettings"></div>
-	<form action="#" method="post" id="configform" class="boxcontent" style="display:none">
-		<fieldset>
-			<legend><roundcube:label name="kolab_zpush.deviceconfig" /></legend>
-			<roundcube:object name="plugin.deviceconfigform" form="configform" />
-		</fieldset>
-		<fieldset>
-			<legend><roundcube:label name="kolab_zpush.folderstosync" /></legend>
-			<roundcube:object name="plugin.foldersubscriptions" form="configform" id="foldersubscriptions" syncicon="synchronize.png" alarmicon="alarm-clock.png" />
-		</fieldset>
-		<p class="formbuttons">
-			<roundcube:button type="input" class="button mainaction" command="plugin.save-config" label="save" />
-			<roundcube:button type="input" class="button" command="plugin.delete-device" label="kolab_zpush.deletedevice" />
-		</p>
-	</form>
-	<div id="introtext">
-		<div class="inner"><div class="bordered">
-			<roundcube:if condition="env:devicecount" />
-				<roundcube:label name="kolab_zpush.introtext" />
-			<roundcube:else />
-				<roundcube:label name="kolab_zpush.nodevices" html="true" />
-			<roundcube:endif />
-		</div></div>
-		<div class="pointer-left"></div>
-	</div>
-</div>
-
-</div>
-
-<script type="text/javascript">
-	var viewsplit = new rcube_splitter({ id:'devicelistsplitter', p1: 'sectionslist', p2: 'prefs-box', orientation: 'v', relative: true, start: 195 });
-	rcmail.add_onload('viewsplit.init()');
-</script>
-
-</body>
-</html>
diff --git a/plugins/owncloud/owncloud.php b/plugins/owncloud/owncloud.php
index d847cc3..09edcee 100644
--- a/plugins/owncloud/owncloud.php
+++ b/plugins/owncloud/owncloud.php
@@ -46,13 +46,8 @@ class owncloud extends rcube_plugin
 	        'label'	=> 'owncloud.owncloud',
             ), 'taskbar');
 
-        $skin = $rcmail->config->get('skin');
-        if (!file_exists($this->home."/skins/$skin/owncloud.css")) {
-	        $skin = 'default';
-        }
-
         // add style for taskbar button (must be here) and Help UI    
-        $this->include_stylesheet("skins/$skin/owncloud.css");
+        $this->include_stylesheet($this->local_skin_path()."/owncloud.css");
     }
 
     function action()
diff --git a/plugins/owncloud/skins/classic/cloud.png b/plugins/owncloud/skins/classic/cloud.png
new file mode 100644
index 0000000..15a288f
Binary files /dev/null and b/plugins/owncloud/skins/classic/cloud.png differ
diff --git a/plugins/owncloud/skins/classic/owncloud.css b/plugins/owncloud/skins/classic/owncloud.css
new file mode 100644
index 0000000..920b730
--- /dev/null
+++ b/plugins/owncloud/skins/classic/owncloud.css
@@ -0,0 +1,12 @@
+/***** ownCloud plugin styles *****/
+
+#taskbar a.button-owncloud
+{
+  background-image: url(cloud.png);
+}
+
+.owncloud-box
+{
+  overflow: auto;  
+  background-color: #F2F2F2;
+}
diff --git a/plugins/owncloud/skins/classic/templates/owncloud.html b/plugins/owncloud/skins/classic/templates/owncloud.html
new file mode 100644
index 0000000..efbd362
--- /dev/null
+++ b/plugins/owncloud/skins/classic/templates/owncloud.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+<link rel="stylesheet" type="text/css" href="/this/owncloud.css" />
+<link rel="stylesheet" type="text/css" href="/settings.css" />
+</head>
+<body>
+
+<roundcube:include file="/includes/taskbar.html" />
+<roundcube:include file="/includes/header.html" />
+
+<div id="mainscreen" class="box owncloud-box">
+  <roundcube:object name="owncloudframe" />
+</div>
+
+</body>
+</html>
diff --git a/plugins/owncloud/skins/default/cloud.png b/plugins/owncloud/skins/default/cloud.png
deleted file mode 100644
index 15a288f..0000000
Binary files a/plugins/owncloud/skins/default/cloud.png and /dev/null differ
diff --git a/plugins/owncloud/skins/default/owncloud.css b/plugins/owncloud/skins/default/owncloud.css
deleted file mode 100644
index 920b730..0000000
--- a/plugins/owncloud/skins/default/owncloud.css
+++ /dev/null
@@ -1,12 +0,0 @@
-/***** ownCloud plugin styles *****/
-
-#taskbar a.button-owncloud
-{
-  background-image: url(cloud.png);
-}
-
-.owncloud-box
-{
-  overflow: auto;  
-  background-color: #F2F2F2;
-}
diff --git a/plugins/owncloud/skins/default/templates/owncloud.html b/plugins/owncloud/skins/default/templates/owncloud.html
deleted file mode 100644
index efbd362..0000000
--- a/plugins/owncloud/skins/default/templates/owncloud.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<title><roundcube:object name="pagetitle" /></title>
-<roundcube:include file="/includes/links.html" />
-<link rel="stylesheet" type="text/css" href="/this/owncloud.css" />
-<link rel="stylesheet" type="text/css" href="/settings.css" />
-</head>
-<body>
-
-<roundcube:include file="/includes/taskbar.html" />
-<roundcube:include file="/includes/header.html" />
-
-<div id="mainscreen" class="box owncloud-box">
-  <roundcube:object name="owncloudframe" />
-</div>
-
-</body>
-</html>


commit 0825c3d293c069c4d6d3453158400fe779e847fa
Author: Thomas Bruederli <thomas at roundcube.net>
Date:   Sun Jul 29 14:04:17 2012 +0200

    Adjust filter masks considering start/due dates

diff --git a/plugins/tasklist/tasklist.php b/plugins/tasklist/tasklist.php
index d65a3f0..6b205e9 100644
--- a/plugins/tasklist/tasklist.php
+++ b/plugins/tasklist/tasklist.php
@@ -352,7 +352,7 @@ class tasklist extends rcube_plugin
         $search = get_input_value('q', RCUBE_INPUT_GPC);
         $filter = array('mask' => $f, 'search' => $search);
         $lists = get_input_value('lists', RCUBE_INPUT_GPC);;
-
+/*
         // convert magic date filters into a real date range
         switch ($f) {
         case self::FILTER_MASK_TODAY:
@@ -383,7 +383,7 @@ class tasklist extends rcube_plugin
             break;
 
         }
-
+*/
         $data = $tags = $this->task_tree = $this->task_titles = array();
         foreach ($this->driver->list_tasks($filter, $lists) as $rec) {
             if ($rec['parent_id']) {
@@ -484,23 +484,27 @@ class tasklist extends rcube_plugin
             $week_date = new DateTime('now + 7 days', $this->timezone);
             $weeklimit = $week_date->format('Y-m-d');
         }
-        
+
         $mask = 0;
+        $start = $rec['startdate'] ?: '1900-00-00';
+
         if ($rec['flagged'])
             $mask |= self::FILTER_MASK_FLAGGED;
         if ($rec['complete'] == 1.0)
             $mask |= self::FILTER_MASK_COMPLETE;
+
         if (empty($rec['date']))
             $mask |= self::FILTER_MASK_NODATE;
-        else if ($rec['date'] == $today)
-            $mask |= self::FILTER_MASK_TODAY;
-        else if ($rec['date'] == $tomorrow)
-            $mask |= self::FILTER_MASK_TOMORROW;
         else if ($rec['date'] < $today)
             $mask |= self::FILTER_MASK_OVERDUE;
-        else if ($rec['date'] > $tomorrow && $rec['date'] <= $weeklimit)
-            $mask |= self::FILTER_MASK_LATER;
-        else if ($rec['date'] > $weeklimit)
+
+        if ($rec['date'] >= $today && $start <= $today)
+            $mask |= self::FILTER_MASK_TODAY;
+        if ($rec['date'] >= $tomorrow && $start <= $tomorrow)
+            $mask |= self::FILTER_MASK_TOMORROW;
+        if (($start > $tomorrow || $rec['date'] > $tomorrow) && $rec['date'] <= $weeklimit)
+            $mask |= self::FILTER_MASK_WEEK;
+        if ($start > $weeklimit || $rec['date'] > $weeklimit)
             $mask |= self::FILTER_MASK_LATER;
 
         return $mask;


commit 1b55957fefee1bf57e31c7de9aa0c42ee56e773e
Author: Thomas Bruederli <thomas at roundcube.net>
Date:   Sun Jul 29 13:38:44 2012 +0200

    Correctly save date-only task start dates

diff --git a/plugins/libkolab/lib/kolab_format_task.php b/plugins/libkolab/lib/kolab_format_task.php
index 4433cf6..b041b08 100644
--- a/plugins/libkolab/lib/kolab_format_task.php
+++ b/plugins/libkolab/lib/kolab_format_task.php
@@ -49,7 +49,7 @@ class kolab_format_task extends kolab_format_xcal
         $this->obj->setPercentComplete(intval($object['complete']));
 
         if (isset($object['start']))
-            $this->obj->setStart(self::get_datetime($object['start']));
+            $this->obj->setStart(self::get_datetime($object['start'], null, $object['start']->_dateonly));
 
         $this->obj->setDue(self::get_datetime($object['due'], null, $object['due']->_dateonly));
 


commit 78077bcb0af8233797861f4e90b3a1b354426fba
Author: Thomas Bruederli <thomas at roundcube.net>
Date:   Sun Jul 29 13:36:16 2012 +0200

    Handle start date/time; fix task list sorting

diff --git a/plugins/tasklist/drivers/database/SQL/mysql.sql b/plugins/tasklist/drivers/database/SQL/mysql.sql
index 18f130d..6906ab6 100644
--- a/plugins/tasklist/drivers/database/SQL/mysql.sql
+++ b/plugins/tasklist/drivers/database/SQL/mysql.sql
@@ -32,6 +32,8 @@ CREATE TABLE `tasks` (
   `tags` text,
   `date` varchar(10) DEFAULT NULL,
   `time` varchar(5) DEFAULT NULL,
+  `startdate` varchar(10) DEFAULT NULL,
+  `starttime` varchar(5) DEFAULT NULL,
   `flagged` tinyint(4) NOT NULL DEFAULT '0',
   `complete` float NOT NULL DEFAULT '0',
   `alarms` varchar(255) NOT NULL,
diff --git a/plugins/tasklist/drivers/database/tasklist_database_driver.php b/plugins/tasklist/drivers/database/tasklist_database_driver.php
index b9aeba0..acc8fa0 100644
--- a/plugins/tasklist/drivers/database/tasklist_database_driver.php
+++ b/plugins/tasklist/drivers/database/tasklist_database_driver.php
@@ -343,7 +343,7 @@ class tasklist_database_driver extends tasklist_driver
     {
         $rec['id'] = $rec['task_id'];
         $rec['list'] = $rec['tasklist_id'];
-        $rec['changed'] = strtotime($rec['changed']);
+        $rec['changed'] = new DateTime($rec['changed']);
         $rec['tags'] = array_filter(explode(',', $rec['tags']));
 
         if (!$rec['parent_id'])
@@ -409,7 +409,7 @@ class tasklist_database_driver extends tasklist_driver
             if (isset($prop[$col]))
                 $sql_set[] = $this->rc->db->quote_identifier($col) . '=' . $this->rc->db->quote($prop[$col]);
         }
-        foreach (array('parent_id', 'date', 'time') as $col) {
+        foreach (array('parent_id', 'date', 'time', 'startdate', 'starttime') as $col) {
             if (isset($prop[$col]))
                 $sql_set[] = $this->rc->db->quote_identifier($col) . '=' . (empty($prop[$col]) ? 'NULL' : $this->rc->db->quote($prop[$col]));
         }
diff --git a/plugins/tasklist/drivers/kolab/tasklist_kolab_driver.php b/plugins/tasklist/drivers/kolab/tasklist_kolab_driver.php
index 66e4912..7322e1f 100644
--- a/plugins/tasklist/drivers/kolab/tasklist_kolab_driver.php
+++ b/plugins/tasklist/drivers/kolab/tasklist_kolab_driver.php
@@ -337,8 +337,13 @@ class tasklist_kolab_driver extends tasklist_driver
             $task['date'] = $record['due']->format('Y-m-d');
             $task['time'] = $record['due']->format('h:i');
         }
+        // convert from DateTime to internal date format
+        if (is_a($record['start'], 'DateTime')) {
+            $task['startdate'] = $record['start']->format('Y-m-d');
+            $task['starttime'] = $record['start']->format('h:i');
+        }
         if (is_a($record['dtstamp'], 'DateTime')) {
-            $task['changed'] = $record['dtstamp']->format('U');
+            $task['changed'] = $record['dtstamp'];
         }
 
         return $task;
@@ -360,6 +365,13 @@ class tasklist_kolab_driver extends tasklist_driver
             unset($object['date']);
         }
 
+        if (!empty($task['startdate'])) {
+            $object['start'] = new DateTime($task['startdate'].' '.$task['starttime'], $this->plugin->timezone);
+            if (empty($task['starttime']))
+                $object['start']->_dateonly = true;
+            unset($object['startdate']);
+        }
+
         $object['complete'] = $task['complete'] * 100;
         if ($task['complete'] == 1.0)
             $object['status'] = 'COMPLETED';
diff --git a/plugins/tasklist/drivers/tasklist_driver.php b/plugins/tasklist/drivers/tasklist_driver.php
index 6b93dc1..c86eca8 100644
--- a/plugins/tasklist/drivers/tasklist_driver.php
+++ b/plugins/tasklist/drivers/tasklist_driver.php
@@ -30,12 +30,14 @@
   *     'parent_id' => 'ID of parent task',  // null if top-level task
   *           'uid' => 'Unique identifier of this task',
   *          'list' => 'Task list identifier to add the task to or where the task is stored',
-  *       'changed' => <unixtime>, // Last modification date of record
+  *       'changed' => <DateTime>,  // Last modification date/time of the record
   *         'title' => 'Event title/summary',
   *   'description' => 'Event description',
   *          'tags' => array(),      // List of tags for this task
   *          'date' => 'Due date',   // as string of format YYYY-MM-DD or null if no date is set
   *          'time' => 'Due time',   // as string of format hh::ii or null if no due time is set
+  *     'startdate' => 'Start date'  // Delay start of the task until that date
+  *     'starttime' => 'Start time'  // ...and time
   *    'categories' => 'Task category',
   *       'flagged' => 'Boolean value whether this record is flagged',
   *      'complete' => 'Float value representing the completeness state (range 0..1)',
diff --git a/plugins/tasklist/localization/de_CH.inc b/plugins/tasklist/localization/de_CH.inc
index eaf075a..a0b7a8e 100644
--- a/plugins/tasklist/localization/de_CH.inc
+++ b/plugins/tasklist/localization/de_CH.inc
@@ -2,8 +2,8 @@
 
 $labels = array();
 $labels['navtitle'] = 'Aufgaben';
-$labels['lists'] = 'Ressourcen';
-$labels['list'] = 'Ressource';
+$labels['lists'] = 'Aufgabenlisten';
+$labels['list'] = 'Liste';
 $labels['tags'] = 'Tags';
 
 $labels['newtask'] = 'Neue Aufgabe';
@@ -15,6 +15,7 @@ $labels['delete'] = 'Löschen';
 $labels['title'] = 'Titel';
 $labels['description'] = 'Beschreibung';
 $labels['datetime'] = 'Datum/Zeit';
+$labels['start'] = 'Beginn';
 
 $labels['all'] = 'Alle';
 $labels['flagged'] = 'Markiert';
@@ -51,3 +52,4 @@ $labels['next'] = 'nächsten';
 $labels['savingdata'] = 'Daten werden gespeichert...';
 $labels['errorsaving'] = 'Fehler beim Speichern.';
 $labels['notasksfound'] = 'Für die aktuellen Kriterien wurden keine Aufgaben gefunden.';
+$labels['invalidstartduedates'] = 'Beginn der Aufgabe darf nicht grösser als das Enddatum sein.';
diff --git a/plugins/tasklist/localization/en_US.inc b/plugins/tasklist/localization/en_US.inc
index b7d9d16..9c1aeef 100644
--- a/plugins/tasklist/localization/en_US.inc
+++ b/plugins/tasklist/localization/en_US.inc
@@ -2,8 +2,8 @@
 
 $labels = array();
 $labels['navtitle'] = 'Tasks';
-$labels['lists'] = 'Resources';
-$labels['list'] = 'Resource';
+$labels['lists'] = 'Tasklists';
+$labels['list'] = 'Tasklist';
 $labels['tags'] = 'Tags';
 
 $labels['newtask'] = 'New Task';
@@ -15,6 +15,7 @@ $labels['delete'] = 'Delete';
 $labels['title'] = 'Title';
 $labels['description'] = 'Description';
 $labels['datetime'] = 'Date/Time';
+$labels['start'] = 'Start';
 
 $labels['all'] = 'All';
 $labels['flagged'] = 'Flagged';
@@ -51,3 +52,4 @@ $labels['next'] = 'next';
 $labels['savingdata'] = 'Saving data...';
 $labels['errorsaving'] = 'Failed to save data.';
 $labels['notasksfound'] = 'No tasks found for the given criteria';
+$labels['invalidstartduedates'] = 'Start date must not be greater than due date.';
diff --git a/plugins/tasklist/skins/larry/templates/mainview.html b/plugins/tasklist/skins/larry/templates/mainview.html
index 603e34f..e98db77 100644
--- a/plugins/tasklist/skins/larry/templates/mainview.html
+++ b/plugins/tasklist/skins/larry/templates/mainview.html
@@ -107,6 +107,11 @@
 		<span class="task-text"></span>
 		<span id="task-time"></span>
 	</div>
+	<div id="task-start" class="form-section">
+		<label><roundcube:label name="tasklist.start" /></label>
+		<span class="task-text"></span>
+		<span id="task-starttime"></span>
+	</div>
 	<div id="task-list" class="form-section">
 		<label><roundcube:label name="tasklist.list" /></label>
 		<span class="task-text"></span>
@@ -137,16 +142,22 @@
 			<label for="edit-date"><roundcube:label name="tasklist.datetime" /></label>
 			<input type="text" name="date" size="10" id="edit-date" tabindex="20" />  
 			<input type="text" name="time" size="6" id="edit-time" tabindex="21" />
-			<a href="#nodate" style="margin-left:1em" id="edit-nodate"><roundcube:label name="tasklist.nodate" /></a>
+			<a href="#nodate" style="margin-left:1em" class="edit-nodate" rel="#edit-date,#edit-time"><roundcube:label name="tasklist.nodate" /></a>
+		</div>
+		<div class="form-section">
+			<label for="edit-startdate"><roundcube:label name="tasklist.start" /></label>
+			<input type="text" name="startdate" size="10" id="edit-startdate" tabindex="23" />  
+			<input type="text" name="starttime" size="6" id="edit-starttime" tabindex="24" />
+			<a href="#nodate" style="margin-left:1em" class="edit-nodate" rel="#edit-startdate,#edit-starttime"><roundcube:label name="tasklist.nodate" /></a>
 		</div>
 		<div class="form-section">
 			<label for="edit-completeness"><roundcube:label name="tasklist.complete" /></label>
-			<input type="text" name="title" id="edit-completeness" size="3"  tabindex="23" /> %
+			<input type="text" name="title" id="edit-completeness" size="3"  tabindex="25" /> %
 			<div id="edit-completeness-slider"></div>
 		</div>
 		<div class="form-section" id="tasklist-select">
 			<label for="edit-tasklist"><roundcube:label name="tasklist.list" /></label>
-			<roundcube:object name="plugin.tasklist_select" id="edit-tasklist" tabindex="24" />
+			<roundcube:object name="plugin.tasklist_select" id="edit-tasklist" tabindex="26" />
 		</div>
 	</form>
 </div>
diff --git a/plugins/tasklist/tasklist.js b/plugins/tasklist/tasklist.js
index 77a37f4..c1522d0 100644
--- a/plugins/tasklist/tasklist.js
+++ b/plugins/tasklist/tasklist.js
@@ -54,6 +54,7 @@ function rcube_tasklist(settings)
     var saving_lock;
     var ui_loading;
     var taskcounts = {};
+    var listindex = [];
     var listdata = {};
     var tags = [];
     var draghelper;
@@ -354,12 +355,14 @@ function rcube_tasklist(settings)
     function data_ready(response)
     {
         listdata = {};
+        listindex = [];
         loadstate.lists = response.lists;
         loadstate.filter = response.filter;
         loadstate.search = response.search;
 
         for (var i=0; i < response.data.length; i++) {
             listdata[response.data[i].id] = response.data[i];
+            listindex.push(response.data[i].id);
         }
 
         render_tasklist();
@@ -373,12 +376,13 @@ function rcube_tasklist(settings)
     function render_tasklist()
     {
         // clear display
-        var rec,
+        var id, rec,
             count = 0,
             msgbox = $('#listmessagebox').hide(),
             list = $(rcmail.gui_objects.resultlist).html('');
 
-        for (var id in listdata) {
+        for (var i=0; i < listindex.length; i++) {
+            id = listindex[i];
             rec = listdata[id];
             if (match_filter(rec)) {
                 render_task(rec);
@@ -436,9 +440,18 @@ function rcube_tasklist(settings)
      */
     function update_taskitem(rec)
     {
-        var id = rec.id;
+        var id = rec.id,
+            oldid = rec.tempid || id;
+            oldindex = listindex.indexOf(oldid);
+
+        if (oldindex >= 0)
+            listindex[oldindex] = id;
+        else
+            listindex.push(id);
+
         listdata[id] = rec;
-        render_task(rec, rec.tempid || id);
+
+        render_task(rec, oldid);
         append_tags(rec.tags || []);
     }
 
@@ -525,7 +538,7 @@ function rcube_tasklist(settings)
      */
     function resort_task(rec, li, animated)
     {
-        var dir = 0, next_li, next_id, next_rec;
+        var dir = 0, index, slice, next_li, next_id, next_rec;
 
         // animated moving
         var insert_animated = function(li, before, after) {
@@ -542,6 +555,13 @@ function rcube_tasklist(settings)
             });
         }
 
+        // remove from list index
+        var oldindex = listindex.indexOf(rec.id);
+        if (oldindex >= 0) {
+            slice = listindex.slice(0,oldindex);
+            listindex = slice.concat(listindex.slice(oldindex+1));
+        }
+
         // find the right place to insert the task item
         li.siblings().each(function(i, elem){
             next_li = $(elem);
@@ -558,17 +578,26 @@ function rcube_tasklist(settings)
             }
             else if (next_rec && next_li && task_cmp(rec, next_rec) < 0) {
                 if (animated) insert_animated(li, next_li);
-                else          li.insertBefore(next_li)
+                else          li.insertBefore(next_li);
                 next_li = null;
                 return false;
             }
         });
 
+        index = listindex.indexOf(next_id);
+
         if (next_li) {
             if (animated) insert_animated(li, null, next_li);
             else          li.insertAfter(next_li);
+            index++;
+        }
+
+        // insert into list index
+        if (next_id && index >= 0) {
+            slice = listindex.slice(0,index);
+            slice.push(rec.id);
+            listindex = slice.concat(listindex.slice(index));
         }
-        return;
     }
 
     /**
@@ -617,15 +646,19 @@ function rcube_tasklist(settings)
     {
         var drag_id = draggable.data('id'),
             parent_id = $(this).data('id'),
-            rec = listdata[parent_id];
+            drag_rec = listdata[drag_id],
+            drop_rec = listdata[parent_id];
+
+        if (drop_rec && drop_rec.list != drag_rec.list)
+            return false;
 
-        if (parent_id == listdata[drag_id].parent_id)
+        if (parent_id == drag_rec.parent_id)
             return false;
 
-        while (rec && rec.parent_id) {
-            if (rec.parent_id == drag_id)
+        while (drop_rec && drop_rec.parent_id) {
+            if (drop_rec.parent_id == drag_id)
                 return false;
-            rec = listdata[rec.parent_id];
+            drop_rec = listdata[drop_rec.parent_id];
         }
 
         return true;
@@ -672,6 +705,8 @@ function rcube_tasklist(settings)
         $('#task-description').html(text2html(rec.description || '', 300, 6))[(rec.description ? 'show' : 'hide')]();
         $('#task-date')[(rec.date ? 'show' : 'hide')]().children('.task-text').html(Q(rec.date || rcmail.gettext('nodate','tasklist')));
         $('#task-time').html(Q(rec.time || ''));
+        $('#task-start')[(rec.startdate ? 'show' : 'hide')]().children('.task-text').html(Q(rec.startdate || ''));
+        $('#task-starttime').html(Q(rec.starttime || ''));
         $('#task-completeness .task-text').html(((rec.complete || 0) * 100) + '%');
         $('#task-list .task-text').html(Q(me.tasklists[rec.list] ? me.tasklists[rec.list].name : ''));
 
@@ -732,6 +767,8 @@ function rcube_tasklist(settings)
         var description = $('#edit-description').val(rec.description || '');
         var recdate = $('#edit-date').val(rec.date || '').datepicker(datepicker_settings);
         var rectime = $('#edit-time').val(rec.time || '');
+        var recstartdate = $('#edit-startdate').val(rec.startdate || '').datepicker(datepicker_settings);
+        var recstarttime = $('#edit-starttime').val(rec.starttime || '');
         var complete = $('#edit-completeness').val((rec.complete || 0) * 100);
         completeness_slider.slider('value', complete.val());
         var tasklist = $('#edit-tasklist').val(rec.list || 0); // .prop('disabled', rec.parent_id ? true : false);
@@ -755,22 +792,31 @@ function rcube_tasklist(settings)
             texts: { removeLinkTitle: rcmail.gettext('removetag', 'tasklist') }
         });
 
-        $('#edit-nodate').unbind('click').click(function(){
-            recdate.val('');
-            rectime.val('');
+        $('a.edit-nodate').unbind('click').click(function(){
+            var sel = $(this).attr('rel');
+            if (sel) $(sel).val('');
             return false;
         })
 
         // define dialog buttons
         var buttons = {};
         buttons[rcmail.gettext('save', 'tasklist')] = function() {
-            me.selected_task.title = title.val();
-            me.selected_task.description = description.val();
-            me.selected_task.date = recdate.val();
-            me.selected_task.time = rectime.val();
-            me.selected_task.list = tasklist.val();
+            // copy form field contents into task object to save
+            $.each({ title:title, description:description, date:recdate, time:rectime, startdate:recstartdate, starttime:recstarttime, list:tasklist }, function(key,input){
+                me.selected_task[key] = input.val();
+            });
             me.selected_task.tags = [];
 
+            // do some basic input validation
+            if (me.selected_task.startdate && me.selected_task.date) {
+                var startdate = $.datepicker.parseDate(datepicker_settings.dateFormat, me.selected_task.startdate, datepicker_settings);
+                var duedate = $.datepicker.parseDate(datepicker_settings.dateFormat, me.selected_task.date, datepicker_settings);
+                if (startdate > duedate) {
+                    alert(rcmail.gettext('invalidstartduedates', 'tasklist'));
+                    return false;
+                }
+            }
+
             $('input[name="tags[]"]', rcmail.gui_objects.edittagline).each(function(i,elem){
                 if (elem.value)
                     me.selected_task.tags.push(elem.value);
@@ -812,9 +858,10 @@ function rcube_tasklist(settings)
             $dialog.dialog('destroy').remove();
           },
           buttons: buttons,
+          minHeight: 340,
           minWidth: 500,
           width: 580
-        }).append(editform.show());  // adding form content AFTERWARDS massively speeds up opening on IE6
+        }).append(editform.show());  // adding form content AFTERWARDS massively speeds up opening on IE
 
         title.select();
     }
diff --git a/plugins/tasklist/tasklist.php b/plugins/tasklist/tasklist.php
index 0ba4260..d65a3f0 100644
--- a/plugins/tasklist/tasklist.php
+++ b/plugins/tasklist/tasklist.php
@@ -261,6 +261,18 @@ class tasklist extends rcube_plugin
             }
         }
 
+        if (!empty($rec['startdate'])) {
+            try {
+                $date = new DateTime($rec['startdate'] . ' ' . $rec['starttime'], $this->timezone);
+                $rec['startdate'] = $date->format('Y-m-d');
+                if (!empty($rec['starttime']))
+                    $rec['starttime'] = $date->format('H:i');
+            }
+            catch (Exception $e) {
+                $rec['startdate'] = $rec['starttime'] = null;
+            }
+        }
+
         return $rec;
     }
 
@@ -400,6 +412,7 @@ class tasklist extends rcube_plugin
         $rec['mask'] = $this->filter_mask($rec);
         $rec['flagged'] = intval($rec['flagged']);
         $rec['complete'] = floatval($rec['complete']);
+        $rec['changed'] = is_object($rec['changed']) ? $rec['changed']->format('U') : null;
 
         if ($rec['date']) {
             try {
@@ -417,6 +430,17 @@ class tasklist extends rcube_plugin
             $rec['_hasdate'] = 0;
         }
 
+        if ($rec['startdate']) {
+            try {
+                $date = new DateTime($rec['startdate'] . ' ' . $rec['starttime'], $this->timezone);
+                $rec['startdatetime'] = intval($date->format('U'));
+                $rec['startdate'] = $date->format($this->rc->config->get('date_format', 'Y-m-d'));
+            }
+            catch (Exception $e) {
+                $rec['startdate'] = $rec['startdatetime'] = null;
+            }
+        }
+
         if (!isset($rec['_depth'])) {
             $rec['_depth'] = 0;
             $parent_id = $this->task_tree[$rec['id']];


commit e6fff6a96a1b96212949fbca414ab1deff29a2c9
Author: Thomas Bruederli <thomas at roundcube.net>
Date:   Sun Jul 29 11:29:34 2012 +0200

    Use rcube_plugin::local_skin_path() to properly read skin setting

diff --git a/plugins/tasklist/tasklist_ui.php b/plugins/tasklist/tasklist_ui.php
index 420260c..a5f3520 100644
--- a/plugins/tasklist/tasklist_ui.php
+++ b/plugins/tasklist/tasklist_ui.php
@@ -51,8 +51,7 @@ class tasklist_ui
             'label'   => 'tasklist.navtitle',
         ), 'taskbar');
 
-        $skin = $this->rc->config->get('skin');
-        $this->plugin->include_stylesheet('skins/' . $skin . '/tasklist.css');
+        $this->plugin->include_stylesheet($this->plugin->local_skin_path() . '/tasklist.css');
         $this->ready = true;
   }
 





More information about the commits mailing list