[evolvis-commits] r11977: Merge from 4. 6dev Branch↵

mirabilos at evolvis.org mirabilos at evolvis.org
Thu Feb 24 18:31:32 CET 2011


Author: mirabilos
Date: 2011-02-24 18:31:31 +0100 (Thu, 24 Feb 2011)
New Revision: 11977

Added:
   trunk/gforge_base/evolvisforge-5.1/gforge/common/docman/Parsedata.class
   trunk/gforge_base/evolvisforge-5.1/gforge/common/docman/engine/
   trunk/gforge_base/evolvisforge-5.1/gforge/common/docman/engine/majwords.php
   trunk/gforge_base/evolvisforge-5.1/gforge/common/docman/engine/majwords.sh
   trunk/gforge_base/evolvisforge-5.1/gforge/common/docman/engine/parser_list.txt
   trunk/gforge_base/evolvisforge-5.1/gforge/common/docman/engine/parser_oo.php
   trunk/gforge_base/evolvisforge-5.1/gforge/common/docman/engine/parser_pdf.php.php
   trunk/gforge_base/evolvisforge-5.1/gforge/common/docman/engine/parser_text.inc.php
   trunk/gforge_base/evolvisforge-5.1/gforge/common/docman/engine/parser_text.php
   trunk/gforge_base/evolvisforge-5.1/gforge/cronjobs/ftp_create_group_access.php
   trunk/gforge_base/evolvisforge-5.1/gforge/cronjobs/gforge-db-backup.sh
   trunk/gforge_base/evolvisforge-5.1/gforge/db/20051103_transiciel_motscle_document.sql
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/AUTHORS
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/COPYING
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/ChangeLog
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/bin/
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/common/
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/common/languages/
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/common/languages/Base.tab
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/common/languages/French.tab
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/common/projects_hierarchy-init.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/common/projects_hierarchyPlugin.class
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/db/
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/db/projects_hierarchy-init.sql
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/etc/
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/etc/plugins/
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/etc/plugins/projects_hierarchy/
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/add_link.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/add_son.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/del_father.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/del_son.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/dtree.css
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/dtree.js
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/hierarchy_utils.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/img/
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/img/base.gif
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/img/cd.gif
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/img/empty.gif
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/img/folder.gif
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/img/folderopen.gif
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/img/globe.gif
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/img/imgfolder.gif
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/img/join.gif
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/img/joinbottom.gif
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/img/line.gif
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/img/minus.gif
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/img/minusbottom.gif
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/img/musicfolder.gif
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/img/nolines_minus.gif
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/img/nolines_plus.gif
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/img/page.gif
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/img/plus.gif
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/img/plusbottom.gif
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/img/question.gif
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/img/trash.gif
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/index.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/softwaremap.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/wait_son.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/quota_management/
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/quota_management/INSTALL
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/quota_management/bin/
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/quota_management/common/
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/quota_management/common/languages/
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/quota_management/common/languages/Base.tab
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/quota_management/common/quota_management-init.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/quota_management/common/quota_managementPlugin.class
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/quota_management/cronjobs/
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/quota_management/cronjobs/quota_update.pl
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/quota_management/db/
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/quota_management/db/quota_management-init.sql
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/quota_management/etc/
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/quota_management/etc/plugins/
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/quota_management/etc/plugins/quota_management/
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/quota_management/www/
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/quota_management/www/index.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/quota_management/www/quota.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/quota_management/www/quota_admin.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/quota_management/www/quota_project.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/AUTHORS
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/COPYING
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/ChangeLog
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/README
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/bin/
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/common/
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/common/languages/
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/common/languages/Base.tab
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/common/languages/French.tab
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/common/webcalendar-init.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/common/webcalendarPlugin.class
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/db/
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/db/webcalendar-init.sql
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/etc/
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/etc/plugins/
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/etc/plugins/webcalendar/
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/script/
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/script/webcalendar-init.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/.project
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/AUTHORS
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/GPL.html
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/NEWS
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/README.html
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/UPGRADING.html
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/activity_log.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/add_entry.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/admin.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/admin_handler.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/adminhome.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/approve_entry.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/assistant_edit.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/assistant_edit_handler.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/availability.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/category.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/category_handler.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/circle.gif
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/colors.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/datesel.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/day.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/del_entry.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/del_layer.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/docs/
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/docs/README
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/docs/WebCalendar-Database.html
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/docs/WebCalendar-DeveloperGuide.html
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/docs/WebCalendar-Styling.html
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/docs/WebCalendar-SysAdmin.html
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/docs/newwin.gif
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/edit_entry.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/edit_entry_handler.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/edit_layer.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/edit_layer_handler.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/edit_nonusers.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/edit_nonusers_handler.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/edit_report.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/edit_report_handler.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/edit_template.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/edit_user.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/edit_user_handler.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/export.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/export_handler.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/favicon.ico
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/gradient.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/group_edit.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/group_edit_handler.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/groups.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/help.gif
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/help_admin.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/help_bug.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/help_edit_entry.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/help_import.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/help_index.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/help_layers.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/help_pref.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/htmlarea-3.0rc1.zip
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/import.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/import_handler.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/import_ical.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/import_palmdesktop.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/import_vcal.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/config.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/connect.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/dbtable.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/functions.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/help_trailer.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/index.html
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/index.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/init.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/js.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/js/
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/js/admin.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/js/assistant_edit.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/js/availability.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/js/colors.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/js/datesel.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/js/edit_entry.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/js/edit_layer.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/js/export.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/js/popups.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/js/pref.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/js/purge.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/js/search.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/js/users.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/js/usersel.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/js/view_d.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/js/views_edit.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/js/visible.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/php-dbi.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/print_styles.css
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/settings.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/settings.php.orig
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/site_extras.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/styles.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/trailer.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/translate.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/user-app-postnuke.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/user-ldap.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/user-nis.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/user.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/validate.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/index.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/index2.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/install-datebook.patch
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/install/
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/install/index.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/layers.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/layers_toggle.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/leftarrow.gif
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/leftarrowsmall.gif
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/list_unapproved.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/login.gif
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/login.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/month.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/new.gif
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/nonusers.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/nonusers_handler.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/pix.gif
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/pixb.gif
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/pref.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/pref_handler.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/publish.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/purge.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/reject_entry.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/report.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/rightarrow.gif
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/rightarrowsmall.gif
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/search.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/search_handler.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/select_user.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/set_entry_cat.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/spacer.gif
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/tables-db2.sql
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/tables-ibase.sql
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/tables-mysql.sql
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/tables-oracle.sql
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/tables-postgres.sql
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/tools/
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/tools/check_translation.pl
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/tools/convert_passwords.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/tools/palm_datebook.pl
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/tools/send_reminders.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/tools/summary.txt
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/tools/translation_summary.pl
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/tools/update_all.pl
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/tools/update_translation.pl
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/tools/upgrade_to_0.9.7.pl
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Basque.txt
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Bulgarian.txt
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Catalan.txt
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Chinese-Big5.txt
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Chinese-GB2312.txt
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Czech.txt
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Danish.txt
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Dutch.txt
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/English-US.txt
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Estonian.txt
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Finnish.txt
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/French.txt
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Galician.txt
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/German.txt
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Holo-Big5.txt
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Hungarian.txt
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Icelandic.txt
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Italian.txt
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Japanese-eucjp.txt
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Japanese-utf8.txt
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Japanese.txt
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Korean.txt
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Norwegian.txt
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Polish.txt
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Portuguese.txt
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Portuguese_BR.txt
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Romanian.txt
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Russian.txt
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Spanish.txt
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Swedish.txt
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Turkish.txt
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Welsh.txt
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/upcoming.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/users.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/usersel.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/view_d.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/view_entry.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/view_l.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/view_m.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/view_t.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/view_v.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/view_w.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/views.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/views_edit.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/views_edit_handler.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/week.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/week_details.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/week_ssi.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/ws/
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/ws/get_events.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/ws/get_reminders.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/ws/login.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/year.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/docman/include/vtemplate.class.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/docman/search.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/docman/search.tpl.html
   trunk/gforge_base/evolvisforge-5.1/gforge/www/env.inc.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/include/unicode.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/COPYING
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/README.txt
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/Theme.class
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/css/
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/css/theme.css
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/bottomtab-new/
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/bottomtab-new/middle.gif
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/bottomtab-new/selected-middle.gif
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/bottomtab-new/selected-separator.gif
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/bottomtab-new/separator.gif
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/box-grad.png
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/box-topleft.png
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/box-topright.png
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/clear.png
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/header/
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/header/top-logo.blank.gif
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/header/top-logo.gif
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/header/top-middle.gif
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/header/top-right.gif
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/adddoc12.png
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/caret.png
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/cfolder15.png
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/check.png
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/cvs16b.png
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/docman16b.png
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/forum20g.png
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/forum20w.png
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/ftp16b.png
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/halfcheck.png
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/home16b.png
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/index.png
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/mail16b.png
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/mail16d.png
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/mail16w.png
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/manual16c.png
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/msg.png
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/ofolder15.png
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/pencil.png
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/rss.png
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/save.png
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/survey16b.png
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/taskman20g.png
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/taskman20w.png
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/tracker20g.png
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/tracker20w.png
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/trash-x.png
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/trash.png
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/write16w.png
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/xmail16w.png
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/t.png
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/t2.png
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/toptab-new/
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/toptab-new/left.gif
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/toptab-new/middle.gif
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/toptab-new/right.gif
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/toptab-new/selected-left.gif
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/toptab-new/selected-middle.gif
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/toptab-new/selected-right.gif
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/vert-grad.png
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/help.css
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/help_dirview.html
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/help_log.html
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/help_query.html
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/help_rootview.html
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/images/
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/images/annotate.png
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/images/back.png
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/images/back_small.png
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/images/broken.png
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/images/chalk.jpg
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/images/cvsgraph_16x16.png
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/images/cvsgraph_32x32.png
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/images/diff.png
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/images/dir.png
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/images/down.png
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/images/download.png
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/images/feed-icon-16x16.jpg
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/images/forward.png
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/images/list.png
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/images/log.png
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/images/logo.png
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/images/text.png
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/images/up.png
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/images/view.png
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/styles.css
Removed:
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/
Modified:
   trunk/gforge_base/evolvisforge-5.1/gforge/ChangeLog
   trunk/gforge_base/evolvisforge-5.1/gforge/common/docman/Document.class
   trunk/gforge_base/evolvisforge-5.1/gforge/common/forum/Forum.class
   trunk/gforge_base/evolvisforge-5.1/gforge/common/include/GForge.class
   trunk/gforge_base/evolvisforge-5.1/gforge/common/include/Group.class
   trunk/gforge_base/evolvisforge-5.1/gforge/common/include/Role.class
   trunk/gforge_base/evolvisforge-5.1/gforge/common/include/User.class
   trunk/gforge_base/evolvisforge-5.1/gforge/common/reporting/ReportSetup.class
   trunk/gforge_base/evolvisforge-5.1/gforge/deb-specific/db-upgrade.pl
   trunk/gforge_base/evolvisforge-5.1/gforge/debian/changelog
   trunk/gforge_base/evolvisforge-5.1/gforge/debian/control
   trunk/gforge_base/evolvisforge-5.1/gforge/debian/gforge-db-postgresql.cron.d
   trunk/gforge_base/evolvisforge-5.1/gforge/debian/gforge-ftp-proftpd.cron.d
   trunk/gforge_base/evolvisforge-5.1/gforge/debian/gforge-plugins.dirs
   trunk/gforge_base/evolvisforge-5.1/gforge/debian/rules
   trunk/gforge_base/evolvisforge-5.1/gforge/etc/local.d/30homegroupother
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/fckeditor/common/fckeditorPlugin.class
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/mediawiki/usr/share/mediawiki1.7/includes/GFUser.class.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/mediawiki/usr/share/mediawiki1.7/includes/GForgePre.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/mediawiki/usr/share/mediawiki1.7/skins/GForge.php
   trunk/gforge_base/evolvisforge-5.1/gforge/plugins/scmccase/common/CCasePlugin.class
   trunk/gforge_base/evolvisforge-5.1/gforge/www/404.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/account/change_email-complete.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/account/change_email.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/account/change_pw.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/account/editsshkeys.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/account/first.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/account/index.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/account/login.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/account/logout.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/account/lostlogin.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/account/lostpw.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/account/pending-resend.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/account/register.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/account/setlang.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/account/unsubscribe.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/account/verify.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/activity/index.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/admin_table.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/approve-pending.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/configman.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/cronman.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/database.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/groupdelete.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/groupedit.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/grouplist.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/index.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/languages/admintabfiles.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/languages/gettabfiles.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/languages/loadtabfiles.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/massmail.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/pluginman.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/responses_admin.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/search.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/trove/trove_cat_add.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/trove/trove_cat_edit.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/trove/trove_cat_list.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/unsubscribe.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/useredit.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/userlist.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/vhost.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/dbimage.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/developer/diary.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/developer/index.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/developer/monitor.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/developer/rate.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/docman/admin/index.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/docman/display_doc.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/docman/doceditor.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/docman/include/DocumentGroupHTML.class
   trunk/gforge_base/evolvisforge-5.1/gforge/www/docman/include/doc_utils.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/docman/index.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/docman/new.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/docman/view.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/download.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/export/forum.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/export/index.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/export/projhtml.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/export/projnews.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/export/projtitl.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/export/rss20_activity.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/export/rss20_newreleases.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/export/rss20_news.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/export/rss20_projects.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/export/rss_project.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/export/rss_sfnewreleases.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/export/rss_sfnews.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/export/rss_sfprojects.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/export/tracker.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/export/trove_tree.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/forum/admin/attachments.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/forum/admin/index.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/forum/admin/monitor.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/forum/admin/pending.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/forum/admin/pendingmsgdetail.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/forum/attachment.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/forum/forum.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/forum/include/AttachManager.class
   trunk/gforge_base/evolvisforge-5.1/gforge/www/forum/include/ForumHTML.class
   trunk/gforge_base/evolvisforge-5.1/gforge/www/forum/index.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/forum/message.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/forum/monitor.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/forum/myforums.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/forum/new.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/forum/save.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/frs/admin/deletepackage.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/frs/admin/deleterelease.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/frs/admin/editrelease.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/frs/admin/index.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/frs/admin/qrs.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/frs/admin/showreleases.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/frs/download.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/frs/index.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/frs/monitor.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/frs/shownotes.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/help/index.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/help/tracker.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/help/trove_cat.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/include/Layout.class
   trunk/gforge_base/evolvisforge-5.1/gforge/www/include/LayoutSF.class
   trunk/gforge_base/evolvisforge-5.1/gforge/www/include/exit.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/include/features_boxes.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/include/html.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/include/languages/Base.tab
   trunk/gforge_base/evolvisforge-5.1/gforge/www/include/languages/French.tab
   trunk/gforge_base/evolvisforge-5.1/gforge/www/include/logger.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/include/pre.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/include/project_home.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/include/project_summary.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/include/trove.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/include/user_home.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/include/vote_function.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/index.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/index_std.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/mail/admin/deletelist.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/mail/admin/index.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/mail/index.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/my/bookmark_add.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/my/bookmark_delete.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/my/bookmark_edit.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/my/diary.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/my/index.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/my/rmproject.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/new/index.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/news/admin/index.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/news/admin/news_admin_utils.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/news/index.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/news/news_utils.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/news/submit.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/notepad.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/people/admin/index.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/people/createjob.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/people/editjob.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/people/editprofile.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/people/helpwanted-latest.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/people/index.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/people/people_utils.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/people/viewjob.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/people/viewprofile.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/pm/add_task.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/pm/admin/index.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/pm/browse_task.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/pm/calendar.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/pm/gantt.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/pm/ganttofuser.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/pm/include/ProjectTaskHTML.class
   trunk/gforge_base/evolvisforge-5.1/gforge/www/pm/index.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/pm/mod_task.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/pm/reporting/index.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/pm/task.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/project/admin/database.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/project/admin/editgroupinfo.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/project/admin/editimages.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/project/admin/group_trove.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/project/admin/history.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/project/admin/index.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/project/admin/massadd.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/project/admin/massfinish.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/project/admin/project_admin_utils.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/project/admin/roleedit.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/project/admin/vhost.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/project/index.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/project/memberlist.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/project/report/index.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/project/request.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/project/stats/index.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/projects
   trunk/gforge_base/evolvisforge-5.1/gforge/www/register/projectinfo.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/groupadded.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/groupadded_graph.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/groupcum.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/groupcum_graph.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/index.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/projectact.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/projectact_graph.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/projecttime.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/projecttime_graph.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/rebuild.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/siteact.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/siteact_graph.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/sitetime.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/sitetime_graph.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/sitetimebar.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/sitetimebar_graph.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/timeadd.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/timecategory.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/toolspie.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/toolspie_graph.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/trackerpie_graph.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/useract.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/useract_graph.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/useradded.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/useradded_graph.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/usercum.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/usercum_graph.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/usersummary.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/usertime.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/usertime_graph.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/scm/admin/index.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/scm/index.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/scm/reporting/commits_graph.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/scm/reporting/commitstime_graph.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/scm/reporting/index.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/scm/viewvc.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/search/advanced_search.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/search/include/renderers/ArtifactHtmlSearchRenderer.class
   trunk/gforge_base/evolvisforge-5.1/gforge/www/search/include/renderers/DocsHtmlSearchRenderer.class
   trunk/gforge_base/evolvisforge-5.1/gforge/www/search/include/renderers/ForumHtmlSearchRenderer.class
   trunk/gforge_base/evolvisforge-5.1/gforge/www/search/include/renderers/ForumsHtmlSearchRenderer.class
   trunk/gforge_base/evolvisforge-5.1/gforge/www/search/include/renderers/FrsHtmlSearchRenderer.class
   trunk/gforge_base/evolvisforge-5.1/gforge/www/search/include/renderers/NewsHtmlSearchRenderer.class
   trunk/gforge_base/evolvisforge-5.1/gforge/www/search/include/renderers/PeopleHtmlSearchRenderer.class
   trunk/gforge_base/evolvisforge-5.1/gforge/www/search/include/renderers/ProjectHtmlSearchRenderer.class
   trunk/gforge_base/evolvisforge-5.1/gforge/www/search/include/renderers/SkillHtmlSearchRenderer.class
   trunk/gforge_base/evolvisforge-5.1/gforge/www/search/include/renderers/TasksHtmlSearchRenderer.class
   trunk/gforge_base/evolvisforge-5.1/gforge/www/search/include/renderers/TrackersHtmlSearchRenderer.class
   trunk/gforge_base/evolvisforge-5.1/gforge/www/search/index.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/sendmessage.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/snapshots.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/snippet/add_snippet_to_package.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/snippet/addversion.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/snippet/browse.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/snippet/delete.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/snippet/detail.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/snippet/download.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/snippet/index.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/snippet/package.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/snippet/snippet_utils.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/snippet/submit.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/softwaremap/trove_list.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/source.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/stats/graphs.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/stats/i18n.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/stats/index.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/stats/lastlogins.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/stats/projects.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/stats/site_stats_utils.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/stats/users_graph.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/stats/views_graph.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/survey/admin/add_question.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/survey/admin/add_survey.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/survey/admin/edit_question.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/survey/admin/edit_survey.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/survey/admin/graphs.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/survey/admin/index.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/survey/admin/question.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/survey/admin/show_questions.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/survey/admin/show_results.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/survey/admin/show_results_aggregate.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/survey/admin/show_results_comments.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/survey/admin/show_results_csv.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/survey/admin/show_results_individual.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/survey/admin/survey.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/survey/include/SurveyHTML.class
   trunk/gforge_base/evolvisforge-5.1/gforge/www/survey/index.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/survey/privacy.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/survey/rating_resp.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/survey/survey.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/survey/survey_resp.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/tarballs.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge-classic/css/theme.css
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge-simple-theme/Theme.class
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/lite/Theme.class
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/osx/Theme.class
   trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/ultralite/Theme.class
   trunk/gforge_base/evolvisforge-5.1/gforge/www/top/index.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/top/mostactive.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/top/toplist.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/top/topusers.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/add.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/admin/ind.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/admin/index.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/browse.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/detail.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/download.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/include/ArtifactHtml.class
   trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/ind.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/index.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/mod-limited.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/mod.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/query.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/reporting/index.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/reporting/trackeract_graph.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/reporting/trackerpie_graph.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/taskmgr.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/tracker.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/users
Log:
Merge from 4.6dev Branch


Modified: trunk/gforge_base/evolvisforge-5.1/gforge/ChangeLog
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/ChangeLog	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/ChangeLog	2011-02-24 17:31:31 UTC (rev 11977)
@@ -1,4 +1,3 @@
-
 2006-10-04 Christian Bayle <bayle at debian.org>
  	* remove use of deprecated user_ismember function in layout.class
 	* Allow opening of /etc/gforge/local.inc readonly in configman.php,

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/common/docman/Document.class
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/common/docman/Document.class	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/common/docman/Document.class	2011-02-24 17:31:31 UTC (rev 11977)
@@ -34,6 +34,7 @@
 */
 
 require_once('common/include/Error.class');
+require_once('common/docman/Parsedata.class');
 
 class Document extends Error {
 
@@ -49,7 +50,12 @@
 	 *
 	 * @var	 object  $Group.
 	 */
-	var $Group; //group object
+	  /**
+       * The Search engine path.
+       *
+       * @var  string $engine_path
+       */
+       var $engine_path;
 
 	/**
 	 *  Constructor.
@@ -59,7 +65,7 @@
 	 *  @param  array	The associative array of data.
 	 *	@return	boolean	success.
 	 */
-	function Document(&$Group, $docid=false, $arr=false) {
+	function Document(&$Group, $docid=false, $arr=false, $engine = "") {
 		$this->Error();
 		if (!$Group || !is_object($Group)) {
 			$this->setNotValidGroupObjectError();
@@ -94,6 +100,7 @@
 				}
 			}
 		}
+		$this->engine_path = $engine;
 		return true;
 	}
 
@@ -145,11 +152,17 @@
 			function_exists('mb_detect_encoding')) {
 			$data = mb_convert_encoding($data,'UTF-8',mb_detect_encoding($data));
 		}
-		
+		$data1 = $data;
+
+         // key words for in-document search
+         $kw = new Parsedata ($this->engine_path);
+         $kwords = $kw->get_parse_data (stripslashes($data1), htmlspecialchars($title1), htmlspecialchars($description), $filetype);
+         // $kwords = "";
+
 		$filesize = strlen($data);
 
 		$sql="INSERT INTO doc_data (group_id,title,description,createdate,doc_group,
-			stateid,language_id,filename,filetype,filesize,data,created_by)
+			stateid,language_id,filename,filetype,filesize,data,data_words,created_by)
 			VALUES ('".$this->Group->getId()."',
 			'". htmlspecialchars($title) ."',
 			'". htmlspecialchars($description) ."',
@@ -161,6 +174,7 @@
 			'$filetype',
 			'$filesize',
 			'". base64_encode(stripslashes($data)) ."',
+			'$kwords',
 			'$user_id')";
 
 		db_begin();

Added: trunk/gforge_base/evolvisforge-5.1/gforge/common/docman/Parsedata.class
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/common/docman/Parsedata.class	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/common/docman/Parsedata.class	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,124 @@
+<?php
+/**
+ * GForge Doc Mgr Facility
+ *
+ * 
+ * Fabio Bertagnin november 2005
+ *
+ * @version   $Id: 04_IMPROVDOC_75_document_specific_search_engine.dpatch,v 1.1 2006/01/11 17:02:45 fabio Exp $
+ *
+ * This file is part of GForge.
+ *
+ * GForge is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ * 
+ * GForge 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GForge; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+
+/*
+	Document Manager
+
+	by Fabio Bertagnin
+
+*/
+
+
+class Parsedata {
+	/**
+	 *  Constructor.
+	 *
+	 *	@param
+	 *	@return
+	 */
+	 var $parsers;
+	 var $p_path = "";
+	 
+	function Parsedata($ppath="") 
+	{
+		$this->p_path = $ppath;
+		$p = get_parser_list ($ppath);
+		$this->parsers = $p;
+		return true;
+	}
+	function get_parse_data ($data, $title, $description, $filetype)
+	{
+		$parser = "";
+		$rep = "";
+		$data1 = $data;
+		if (array_key_exists($filetype, $this->parsers))
+		{ 
+			// parse data if good parser exists
+			$parser = $this->p_path.$this->parsers[$filetype];
+			$filename = rand(10000,99999);
+			$filename = "/tmp/gfd$filename.tmp";
+			$fp = fopen ($filename, "w");
+			fwrite ($fp, $data1);
+			fclose ($fp);
+			
+			$cmd = "$parser $filename";
+			echo "cmd $cmd<br />";
+			$rep = shell_exec ($cmd);
+			echo "rep : <br />$rep<br />";
+			unlink ("$filename");
+			
+			// pour tests et debug
+			// echo "parser $parser<br />";
+			// echo "$rep<br /><br />";
+			// exit();
+		}
+		// alwais parse titre and description
+		$data2 = utf8_decode(" $title");
+		$data2 .= utf8_decode(" $description");
+		// $data2 = ereg_replace ("\n", " ", $data2);
+		// temporary file for traitement
+		$filename = rand(10000,99999);
+		$filename = "/tmp/gfi$filename.tmp";
+		$fp = fopen ($filename, "w");
+		fwrite ($fp, $data2);
+		fclose ($fp);
+		$cmd = $this->p_path.$this->parsers["text/plain"];
+		$cmd = "$cmd $filename";
+		$rep1 = shell_exec ($cmd);
+		return ereg_replace ("\n", " ", "$rep $rep1");
+	}
+	
+	
+	function print_debug ($text)
+	{
+		echo "$text \n";
+		ob_flush();
+	}
+}
+
+function get_parser_list ($parser_path)
+{
+	$file = $parser_path."parser_list.txt";
+	$rep = array();
+	$fp = fopen ($file, "r");
+	if ($fp)
+	{
+		$buff = fread($fp, 2048);
+		$a1 = explode ("\n", $buff);
+		foreach ($a1 as $a)
+		{
+			if (trim($a) != "" && substr($a, 0,1) != "#")
+			{
+				$a2 = explode ("\t", $a);
+				$rep[$a2[0]] = $a2[1];
+			}
+		}
+	}
+	return $rep;
+}
+
+?>
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/common/docman/engine/majwords.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/common/docman/engine/majwords.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/common/docman/engine/majwords.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,66 @@
+#! /usr/bin/php4 -f
+<?php
+/**
+ * GForge Doc Search engine
+ *
+ * 
+ * Fabio Bertagnin November 2005
+ *
+ * @version   $Id: 04_IMPROVDOC_75_document_specific_search_engine.dpatch,v 1.1 2006/01/11 17:02:45 fabio Exp $
+ */
+
+require_once('pre.php');
+require_once('www/docman/include/doc_utils.php');
+require_once('common/docman/Parsedata.class');
+require_once('common/docman/Document.class');
+require_once('common/docman/DocumentFactory.class');
+require_once('common/docman/DocumentGroupFactory.class');
+
+$p = new Parsedata ("$sys_engine_path");
+// print_debug(print_r($p->get_parser_list (),true));
+
+$timestarttrait = microtime_float();
+// documents list
+$sql = "SELECT docid, group_id, filename, title, createdate, filename, description, filetype, data FROM doc_data \n";
+$resarr = array();
+$result=db_query($sql);
+if ($result)
+{
+	while ($arr = db_fetch_array($result))
+	{
+		$resarr[] = $arr;
+	}
+}
+
+$compt = 0;
+$rapp = "";
+foreach ($resarr as $item)
+{
+	$compt++;
+	$timestart = microtime_float();
+	$data1 = base64_decode($item["data"]);
+	$lenin = strlen($data1);
+	$res = $p->get_parse_data ($data1, $item["title"], $item["description"], $item["filetype"]);
+	$len = strlen($res);
+	$sql = "UPDATE doc_data SET data_words = '$res' WHERE docid = $item[docid] ";
+	db_query($sql);
+	$timeend = microtime_float();
+	$timetrait = $timeend - $timestart;
+	print_debug ("analyze $item[filename]  type=$item[filetype]  octets in=$lenin  octets out=$len   time=$timetrait sec");
+}
+$timeendtrait = microtime_float();
+$timetot = $timeendtrait - $timestarttrait;
+print_debug ("End analyze : $compt files, $timetot secs.");
+
+
+function print_debug ($text)
+{
+	echo "$text\n";
+}
+
+function microtime_float()
+{
+  list($usec, $sec) = explode(" ", microtime());
+  return ((float)$usec + (float)$sec);
+}
+?>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/common/docman/engine/majwords.sh
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/common/docman/engine/majwords.sh	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/common/docman/engine/majwords.sh	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,2 @@
+#!/bin/sh
+./majwords.php -d include_path=/etc/gforge:/usr/share/gforge:/usr/share/gforge/www/include

Added: trunk/gforge_base/evolvisforge-5.1/gforge/common/docman/engine/parser_list.txt
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/common/docman/engine/parser_list.txt	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/common/docman/engine/parser_list.txt	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,8 @@
+# parser_list.txt
+# Liste des documents connus avec le parseur associé
+# Cette liste est utilisée pour fabriquer les mots clé pour la recherche dans le contenu des documents
+# Le format texte est traité directement par un parseur approprié (engine/parser_text.py).
+# Les autres formats doivent être convertis au format texte avant d'être envoyées au parseur de base.
+text/plain	parser_text.php
+application/pdf	parser_pdf.php
+application/vnd.sun.xml.writer	parser_oo.php

Added: trunk/gforge_base/evolvisforge-5.1/gforge/common/docman/engine/parser_oo.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/common/docman/engine/parser_oo.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/common/docman/engine/parser_oo.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,33 @@
+#! /usr/bin/php4 -f
+<?php
+/**
+ * GForge Doc Search Utilities
+ *
+ * 
+ * Fabio Bertagnin November 2005
+ *
+ */
+ 
+require_once("parser_text.inc.php");
+
+
+if ($argc != 2)
+{
+	echo "Usage : parser_oo.php <filename>\n";
+	exit (1);
+}
+
+$fichin = $argv[1];
+if (!is_file($fichin)) exit (1);
+$fichout = "/tmp/gfo".rand(10000, 99999).".tmp";
+$cmd = "/usr/bin/perl /usr/bin/ooo2txt.pl $fichin > $fichout";
+$res = shell_exec($cmd);
+
+
+$rep = parser_text($fichout);
+// envoi du résultat sur stdout
+echo "$rep";
+// efface les fichiers témporaires
+unlink ($fichout);
+
+?>
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/common/docman/engine/parser_pdf.php.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/common/docman/engine/parser_pdf.php.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/common/docman/engine/parser_pdf.php.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,33 @@
+#! /usr/bin/php4 -f
+<?php
+/**
+ * GForge Doc Search Utilities
+ *
+ * 
+ * Fabio Bertagnin November 2005
+ *
+ */
+ 
+require_once("parser_text.inc.php");
+
+
+if ($argc != 2)
+{
+	echo "Usage : parser_pdf.php <filename>\n";
+	exit (1);
+}
+
+$fichin = $argv[1];
+if (!is_file($fichin)) exit (1);
+$fichout = "/tmp/gfo".rand(10000, 99999).".tmp";
+$cmd = "/usr/bin/pdftotext $fichin - > $fichout";
+$res = shell_exec($cmd);
+
+
+$rep = parser_text($fichout);
+// envoi du résultat sur stdout
+echo "$rep";
+// efface les fichiers témporaires
+unlink ($fichout);
+
+?>
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/common/docman/engine/parser_text.inc.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/common/docman/engine/parser_text.inc.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/common/docman/engine/parser_text.inc.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,64 @@
+<?php
+/**
+ * GForge Doc Search Utilities
+ *
+ * 
+ * Fabio Bertagnin November 2005
+ *
+ */
+
+function parser_text($fichin)
+{
+	$tstart = microtime_float();
+	if (!is_file($fichin)) return "";
+	$fp = fopen ($fichin, "r");
+	$buff = fread ($fp, filesize($fichin));
+	// tout en minuscules
+	$buff = mb_strtolower($buff);
+	// élimination d'éventuels caractères unicode encore présents
+	$buff = mb_convert_encoding ($buff, "ascii");
+	// élimination caractères avec accents 
+	// et caractères spéciaux
+	$buff = suppression_diacritics($buff);
+	// tous les mots dans un tableau
+	$a = explode(" ", $buff);
+	//sort($a);
+	// élimination des doublons
+	$a = array_unique($a);
+	// envoi du résultat sur stdout
+	$rep = print_list($a);
+	return $rep;
+}
+
+function print_list ($list)
+{
+	$rep = "";
+	foreach ($list as $el)
+	{
+		if (strlen($el) > 1) $rep .= "$el ";
+	}
+	return $rep;
+}
+
+function suppression_diacritics($text)
+{
+	$b = $text;
+	$b = strtr($b, "éêèëàâäîïùûüôöç", "eeeeaaaiiuuuooc");
+	$b = strtr($b, "\t\r\n?.*'\":;,#![]()", "                 ");
+	return $b;
+}
+
+function microtime_float()
+{
+  list($usec, $sec) = explode(" ", microtime());
+  return ((float)$usec + (float)$sec);
+}
+
+
+function print_debug ($text)
+{
+	echo "$text <br />\n";
+	ob_flush();
+}
+
+?>
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/common/docman/engine/parser_text.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/common/docman/engine/parser_text.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/common/docman/engine/parser_text.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,27 @@
+#! /usr/bin/php4 -f
+<?php
+/**
+ * GForge Doc Search Utilities
+ *
+ * 
+ * Fabio Bertagnin November 2005
+ *
+ */
+ 
+require_once("parser_text.inc.php");
+
+if ($argc != 2)
+{
+	echo "Usage : parser_oo.php <filename>\n";
+	exit (1);
+}
+$fichin = $argv[1];
+if (!is_file($fichin)) exit (1);
+
+$rep = parser_text($fichin);
+// envoi du résultat sur stdout
+echo "$rep";
+// efface le fichier source
+unlink ($fichin);
+
+?>
\ No newline at end of file

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/common/forum/Forum.class
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/common/forum/Forum.class	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/common/forum/Forum.class	2011-02-24 17:31:31 UTC (rev 11977)
@@ -268,7 +268,7 @@
 	 *	@return	int	The unix time.
 	 */
 	function getSavedDate() {
-		if ($this->save_date) {
+		if (@$this->save_date) {
 			return $this->save_date;
 		} else {
 			if (session_loggedin()) {

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/common/include/GForge.class
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/common/include/GForge.class	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/common/include/GForge.class	2011-02-24 17:31:31 UTC (rev 11977)
@@ -21,6 +21,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('common/include/Error.class');
 class GForge extends Error {
 
 	/**

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/common/include/Group.class
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/common/include/Group.class	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/common/include/Group.class	2011-02-24 17:31:31 UTC (rev 11977)
@@ -2082,6 +2082,13 @@
 
 		$this->sendApprovalEmail();
 		$this->addHistory('approved', 'x');
+		
+		//plugin webcal
+			//change assistant for webcal
+			
+			$params[0] = $idadmin_group ;
+			$params[1] = $this->getID();
+			plugin_hook('change_cal_permission_default',$params);	
 
 		return true;
 	}

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/common/include/Role.class
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/common/include/Role.class	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/common/include/Role.class	2011-02-24 17:31:31 UTC (rev 11977)
@@ -42,14 +42,15 @@
 	'trackeradmin'=>array('0','2'),
 	'tracker'=>array('-1','0','1','2','3'),
 	'pmadmin'=>array('0','2'),
-	'pm'=>array('-1','0','1','2','3'));
+	'pm'=>array('-1','0','1','2','3'),
+	'webcal'=>array('0','1','2'));
 
 	var $defaults=array(
-		'Admin'=>array( 'projectadmin'=>'A', 'frs'=>'1', 'scm'=>'1', 'docman'=>'1', 'forumadmin'=>'2', 'forum'=>'2', 'trackeradmin'=>'2', 'tracker'=>'2', 'pmadmin'=>'2', 'pm'=>'2' ),
-		'Senior Developer'=>array( 'projectadmin'=>'0', 'frs'=>'1', 'scm'=>'1', 'docman'=>'1', 'forumadmin'=>'2', 'forum'=>'2', 'trackeradmin'=>'2', 'tracker'=>'2', 'pmadmin'=>'2', 'pm'=>'2' ),
-		'Junior Developer'=>array( 'projectadmin'=>'0', 'frs'=>'0', 'scm'=>'1', 'docman'=>'0', 'forumadmin'=>'0', 'forum'=>'1', 'trackeradmin'=>'0', 'tracker'=>'1', 'pmadmin'=>'0', 'pm'=>'1' ),
-		'Doc Writer'=>array( 'projectadmin'=>'0', 'frs'=>'0', 'scm'=>'0', 'docman'=>'1', 'forumadmin'=>'0', 'forum'=>'1', 'trackeradmin'=>'0', 'tracker'=>'0', 'pmadmin'=>'0', 'pm'=>'0' ),
-		'Support Tech'=>array( 'projectadmin'=>'0', 'frs'=>'0', 'scm'=>'0', 'docman'=>'1', 'forumadmin'=>'0', 'forum'=>'1', 'trackeradmin'=>'0', 'tracker'=>'2', 'pmadmin'=>'0', 'pm'=>'0' )
+		'Admin'=>array( 'projectadmin'=>'A', 'frs'=>'1', 'scm'=>'1', 'docman'=>'1', 'forumadmin'=>'2', 'forum'=>'2', 'trackeradmin'=>'2', 'tracker'=>'2', 'pmadmin'=>'2', 'pm'=>'2', 'webcal'=>'1' ),
+		'Senior Developer'=>array( 'projectadmin'=>'0', 'frs'=>'1', 'scm'=>'1', 'docman'=>'1', 'forumadmin'=>'2', 'forum'=>'2', 'trackeradmin'=>'2', 'tracker'=>'2', 'pmadmin'=>'2', 'pm'=>'2', 'webcal'=>'2' ),
+		'Junior Developer'=>array( 'projectadmin'=>'0', 'frs'=>'0', 'scm'=>'1', 'docman'=>'0', 'forumadmin'=>'0', 'forum'=>'1', 'trackeradmin'=>'0', 'tracker'=>'1', 'pmadmin'=>'0', 'pm'=>'1', 'webcal'=>'2' ),
+		'Doc Writer'=>array( 'projectadmin'=>'0', 'frs'=>'0', 'scm'=>'0', 'docman'=>'1', 'forumadmin'=>'0', 'forum'=>'1', 'trackeradmin'=>'0', 'tracker'=>'0', 'pmadmin'=>'0', 'pm'=>'0' , 'webcal'=>'2'),
+		'Support Tech'=>array( 'projectadmin'=>'0', 'frs'=>'0', 'scm'=>'0', 'docman'=>'1', 'forumadmin'=>'0', 'forum'=>'1', 'trackeradmin'=>'0', 'tracker'=>'2', 'pmadmin'=>'0', 'pm'=>'0' , 'webcal'=>'2')
 	);
 	
 	/**

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/common/include/User.class
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/common/include/User.class	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/common/include/User.class	2011-02-24 17:31:31 UTC (rev 11977)
@@ -586,6 +586,10 @@
 				}
 			}
 			db_commit();
+			
+			//plugin webcalendar, create cal_user
+			plugin_hook('add_cal_user',$this->getID());
+			
 			return true;
 		}
 	}

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/common/reporting/ReportSetup.class
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/common/reporting/ReportSetup.class	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/common/reporting/ReportSetup.class	2011-02-24 17:31:31 UTC (rev 11977)
@@ -440,6 +440,7 @@
 		$this->setError('backfill_users_added_daily:: Could Not Get Start Date');
 		return false;
 	}
+	$i = 0;
 	while (true) {
 		$day=($today-($i*REPORT_DAY_SPAN));
 		if (!$this->users_added_daily($day)) {
@@ -483,6 +484,7 @@
 		$this->setError('backfill_groups_added_daily:: Could Not Get Start Date');
 		return false;
 	}
+	$i = 0;
 	while (true) {
 		$day=($today-($i*REPORT_DAY_SPAN));
 		if (!$this->groups_added_daily($day)) {
@@ -678,6 +680,7 @@
 		$this->setError('backfill_users_cum_daily:: Could Not Get Start Date');
 		return false;
 	}
+	$i = 0;
 	while (true) {
 		$day=$today-($i*REPORT_DAY_SPAN);
 		if (!$this->users_cum_daily($day)) {
@@ -721,6 +724,7 @@
 		$this->setError('backfill_groups_cum_daily:: Could Not Get Start Date');
 		return false;
 	}
+	$i = 0;
 	while (true) {
 		$day=$today-($i*REPORT_DAY_SPAN);
 		if (!$this->groups_cum_daily($day)) {
@@ -972,6 +976,7 @@
 		$this->setError('backfill_user_act_daily:: Could Not Get Start Date');
 		return false;
 	}
+	$i = 0;
 	while (true) {
 		$day=$today-($i*REPORT_DAY_SPAN);
 		if (!$this->user_act_daily($day)) {
@@ -1185,6 +1190,7 @@
 		$this->setError('backfill_group_act_daily:: Could Not Get Start Date');
 		return false;
 	}
+	$i = 0;
 	while (true) {
 		$day=$today-($i*REPORT_DAY_SPAN);
 		if (!$this->group_act_daily($day)) {

Added: trunk/gforge_base/evolvisforge-5.1/gforge/cronjobs/ftp_create_group_access.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/cronjobs/ftp_create_group_access.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/cronjobs/ftp_create_group_access.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,99 @@
+#! /usr/bin/php4 -f
+<?php
+/**
+ * 
+ * Fabio Bertagnin nov 2005
+ * fbertatnin at mail.transiciel.com
+ *
+ * @version   $Id: 06_IMPROVSFTP_80_ftp_improvement.dpatch,v 1.1 2006/01/11 17:02:45 fabio Exp $
+ *
+ * This file is part of GForge.
+ *
+ * GForge is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GForge 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GForge; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+require ('squal_pre.php');
+require ('common/include/cron_utils.php');
+
+
+$users = array();
+
+$chroot_dir = $sys_chroot;
+$ftp_dir = $sys_ftp_upload_dir."/pub/";
+$home_dir = $chroot_dir.$homedir_prefix."/";
+
+
+$SQL = "SELECT groups.group_id, group_name, unix_group_name, ";
+$SQL .= "user_group.user_id, ";
+$SQL .= "users.user_name ";
+$SQL .= "FROM groups ";
+$SQL .= "JOIN user_group ON user_group.group_id = groups.group_id ";
+$SQL .= "JOIN users ON users.user_id = user_group.user_id ";
+$SQL .= "ORDER BY group_id ";
+$res_db = db_query($SQL);
+if ($res_db)
+{
+        while($e = db_fetch_array($res_db))
+        {
+                $users["$e[user_id]"]["user_name"] = "$e[user_name]";
+                $users["$e[user_id]"]["user_groups"][] = "$e[unix_group_name]";
+        }
+}
+foreach ($users as $u)
+{
+        $dir = "$home_dir"."$u[user_name]"."/pub";
+        //$cmd = "cd $dir";
+        //$res = execute($cmd);
+        if (is_dir("$home_dir"."$u[user_name]"))
+        {
+                foreach ($u["user_groups"] as $g)
+                {
+                        if (is_dir("$ftp_dir"."$g"))
+                        {
+                                if (is_dir("$dir/$g"))
+                                {
+                                        $cmd = "/bin/umount $dir/$g";
+                                        $res = execute($cmd);
+                                        $cmd = "/bin/rmdir $dir/$g";
+                                        $res = execute($cmd);
+                                }
+                                if (!is_dir($dir))
+                                {
+                                        $cmd = "/bin/mkdir $dir";
+                                        $res = execute($cmd);
+                                }
+                                $cmd = "/bin/mkdir $dir/$g";
+                                $res = execute($cmd);
+                                $cmd = "/bin/mount --bind $ftp_dir"."$g $dir/$g";
+                                $res = execute($cmd);
+                                echo "allow $u[user_name] to access at $dir/$g\n";
+                        }
+                }
+        }
+}
+
+function print_debug($text)
+{
+        echo "$text\n";
+}
+
+function execute($cmd)
+{
+        // print_debug ("cmd= ".$cmd);
+        $res = shell_exec($cmd);
+        // print_debug ("res= ".$res);
+        return $res;
+}
+?>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/cronjobs/gforge-db-backup.sh
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/cronjobs/gforge-db-backup.sh	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/cronjobs/gforge-db-backup.sh	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,47 @@
+#!/bin/sh
+
+# This script does personal backups to a rsync backup server. You will end up
+# with a 7 day rotating incremental backup. The incrementals will go
+# into subdirectories named after the day of the week, and the current
+# full backup goes into a directory called "current"
+
+if [ $(id -u) != 0 ] ; then
+    echo "You must be root to run this, please enter passwd"
+    exec su -c "$0 $1"
+fi
+
+# directory to backup
+BDIR="/var/lib/gforge/chroot /var/lib/mailman /etc"
+PATTERNS="mailman postgresql exim4 gforge"
+
+DEST="/var/lib/gforge/backup"
+
+# BACKUPDIR=`date --date yesterday +%A`
+BACKUPDIR=`date +%A`
+# BACKUPDIR=`date --date tomorrow +%A`
+# BACKUPDIR=`date --date "2 days" +%A`
+OPTS="--force --ignore-errors --delete --backup --backup-dir=$DEST/$BACKUPDIR -a"
+
+[ ! -d ${DEST} ] && mkdir ${DEST}
+[ ! -d ${DEST}/postgres ] && mkdir ${DEST}/postgres
+[ ! -d ${DEST}/debconf ] && mkdir ${DEST}/debconf
+
+echo "Backuping data from $BDIR"
+# the following line clears the last weeks incremental directory
+[ -d $DEST/emptydir ] || mkdir $DEST/emptydir
+rsync --delete -a $DEST/emptydir/ $DEST/$BACKUPDIR/
+rmdir $DEST/emptydir
+
+# now the actual transfer
+rsync $OPTS $BDIR $DEST/current
+
+echo "Dumping database"
+su -s /bin/bash postgres -c "pg_dump -F c -d gforge" | gzip -c > ${DEST}/postgres/gforge.dump.gz
+
+echo "Dumping debconf keys"
+for PAT in $PATTERNS
+do
+        debconf-copydb configdb stdout -c Name:stdout -c Driver:Pipe -c InFd:none \
+                --pattern='^'${PAT}'/' > ${DEST}/debconf/${PAT}.txt
+        chmod 0700 ${DEST}/debconf/${PAT}.txt
+done

Added: trunk/gforge_base/evolvisforge-5.1/gforge/db/20051103_transiciel_motscle_document.sql
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/db/20051103_transiciel_motscle_document.sql	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/db/20051103_transiciel_motscle_document.sql	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,9 @@
+--- Modification de la base gforge pour permettre la recherche dans le contenu des documents stockés
+--- Fabio Bertagnin - Transiciel Technologies
+--- fbertagnin at mail.transiciel.com
+--- 03/11/2005
+
+ALTER TABLE doc_data ADD COLUMN data_words TEXT;
+ALTER TABLE doc_data ALTER data_words SET DEFAULT '';
+UPDATE doc_data SET data_words = '';
+ALTER TABLE doc_data ALTER data_words SET NOT NULL;
\ No newline at end of file

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/deb-specific/db-upgrade.pl
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/deb-specific/db-upgrade.pl	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/deb-specific/db-upgrade.pl	2011-02-24 17:31:31 UTC (rev 11977)
@@ -2829,7 +2829,10 @@
         $dbh->commit () ;
     }
 
-
+	
+	&update_with_sql("20051103_transiciel_motscle_document","4.6-1");
+	
+	
     ########################### INSERT HERE #################################
 
     &debug ("It seems your database $action went well and smoothly. That's cool.") ;

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/debian/changelog
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/debian/changelog	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/debian/changelog	2011-02-24 17:31:31 UTC (rev 11977)
@@ -1,4 +1,4 @@
-gforge (4.5.14-25+955) unstable; urgency=low
+gforge (4.5.14-25+963) unstable; urgency=low
 
   * Merged Branch_4_5 into trunk after svn conversion
   essentially debian and deb-specific dir, setup and install-apache.sh too

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/debian/control
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/debian/control	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/debian/control	2011-02-24 17:31:31 UTC (rev 11977)
@@ -187,7 +187,7 @@
 
 Package: gforge-ftp-proftpd
 Architecture: all
-Depends: gforge-common, gforge-shell, proftpd, perl, debianutils (>= 1.7), debconf (>= 1.0.32) | debconf-2.0
+Depends: gforge-common, gforge-shell, proftpd, perl, debianutils (>= 1.7), debconf (>= 1.0.32) | debconf-2.0, php4-cli
 Provides: gforge-ftp
 Conflicts: gforge-ftp
 Description: collaborative development tool - FTP management (using ProFTPd)

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/debian/gforge-db-postgresql.cron.d
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/debian/gforge-db-postgresql.cron.d	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/debian/gforge-db-postgresql.cron.d	2011-02-24 17:31:31 UTC (rev 11977)
@@ -2,6 +2,9 @@
 # Regular cron jobs for the gforge-db-postgresql package
 #
 
+# Daily reporting process
+25 7 * * * gforge [ -x /usr/lib/gforge/bin/reporting_cron.php ] && /usr/lib/gforge/bin/reporting_cron.php -d include_path=/etc/gforge:/usr/share/gforge/:/usr/share/gforge/www/include > /dev/null 2>&1
+
 # Recalculate user popularity metric
 25 1 * * * gforge [ -x /usr/lib/gforge/bin/calculate_user_metric.php ] && /usr/lib/gforge/bin/calculate_user_metric.php -d include_path=/etc/gforge:/usr/share/gforge/:/usr/share/gforge/www/include > /dev/null 2>&1
 
@@ -33,7 +36,7 @@
 45 0 * * * gforge [ -x /usr/lib/gforge/bin/db_stats_agg.php ] && /usr/lib/gforge/bin/db_stats_agg.php -d include_path=/etc/gforge:/usr/share/gforge/:/usr/share/gforge/www/include > /dev/null 2>&1
 
 # Hourly sending of mass e-mailings
-48 * * * * gforge [ -x /usr/lib/gforge/bin/massmail.php ] && /usr/lib/gforge/bin/massmail.php -d include_path=/etc/gforge:/usr/share/gforge/:/usr/share/gforge/www/include > /dev/null 2>&1
+48 * * * * root [ -x /usr/lib/gforge/bin/massmail.php ] && /usr/lib/gforge/bin/massmail.php -d include_path=/etc/gforge:/usr/share/gforge/:/usr/share/gforge/www/include > /dev/null 2>&1
 
 # Weekly db vacuum
 50 2 * * Mon gforge [ -x /usr/lib/gforge/bin/vacuum.php ] && /usr/lib/gforge/bin/vacuum.php -d include_path=/etc/gforge:/usr/share/gforge/:/usr/share/gforge/www/include > /dev/null 2>&1
@@ -43,3 +46,7 @@
 
 # Daily mail for not approved news
 30 17 * * * root [ -x /usr/lib/gforge/bin/get_news_notapproved.pl ] && /usr/lib/gforge/bin/get_news_notapproved.pl -d include_path=/etc/gforge:/usr/share/gforge/:/usr/share/gforge/www/include > /dev/null 2>&1
+
+# Daily incremental backup to /backup
+# we have to discuss this 
+#15 23 * * * root [ -x /usr/lib/gforge/bin/gforge-db-backup.sh ] && /usr/lib/gforge/bin/gforge-db-backup.sh > /dev/null 2>&1

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/debian/gforge-ftp-proftpd.cron.d
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/debian/gforge-ftp-proftpd.cron.d	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/debian/gforge-ftp-proftpd.cron.d	2011-02-24 17:31:31 UTC (rev 11977)
@@ -4,3 +4,7 @@
 
 # FTP update
 0 * * * * root [ -x /usr/lib/gforge/bin/install-ftp.sh ] && /usr/lib/gforge/bin/install-ftp.sh update > /dev/null 2>&1
+
+# create and mount project directory in user's home directory
+# added by fabio bertagnin nov 2005
+0 * * * * root [ -x /usr/lib/gforge/bin/ftp_create_group_access.php ] && /usr/bin/php4 -d include_path=/etc/gforge:/usr/share/gforge/:/usr/share/gforge/www/include /usr/lib/gforge/bin/ftp_create_group_access.php > /dev/null 2>&1
\ No newline at end of file

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/debian/gforge-plugins.dirs
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/debian/gforge-plugins.dirs	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/debian/gforge-plugins.dirs	2011-02-24 17:31:31 UTC (rev 11977)
@@ -8,6 +8,7 @@
 usr/share/gforge/www/include
 usr/sbin
 var/lib/gforge/www/plugins
+var/lib/gforge/www/plugins/webcalendar/www/includes
 var/lib/gforge/etc
 var/lib/gforge/etc/templates
 bin

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/debian/rules
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/debian/rules	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/debian/rules	2011-02-24 17:31:31 UTC (rev 11977)
@@ -72,6 +72,7 @@
 	chown www-data:www-data $(CURDIR)/debian/gforge-plugins/var/lib/gforge/www/plugins
 	chmod 755 $(CURDIR)/debian/gforge-plugins/usr/share/gforge/plugins/*/sbin/*
 	chmod 755 $(CURDIR)/debian/gforge-plugins/usr/share/gforge/plugins/*/bin/*
+	rm -f $(CURDIR)/debian/gforge-plugins/usr/share/gforge/plugins/*/COPYING
 	# mediawiki plugin
 	cp -r $(CURDIR)/debian/gforge-plugins/usr/share/gforge/plugins/mediawiki/usr $(CURDIR)/debian/gforge-plugins/
 	rm -rf $(CURDIR)/debian/gforge-plugins/usr/share/gforge/plugins/mediawiki/usr
@@ -86,6 +87,19 @@
 	# scmsvn plugin
 	install -m 755 deb-specific/install-svn.sh     $(CURDIR)/debian/gforge-plugins/usr/lib/gforge/bin/
 	cp -r deb-specific/scmsvn/cronjobs/* $(CURDIR)/debian/gforge-plugins/usr/share/gforge/plugins/scmsvn/cronjobs
+	# cvstracker plugin
+	chmod +x $(CURDIR)/debian/gforge-plugins/usr/share/gforge/plugins/svntracker/postcommit.example
+	# fckeditor plugin
+	chmod +x $(CURDIR)/debian/gforge-plugins/usr/share/gforge/plugins/fckeditor/www/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.pl
+	chmod +x $(CURDIR)/debian/gforge-plugins/usr/share/gforge/plugins/fckeditor/www/editor/filemanager/browser/mcpuk/connectors/php/Commands/helpers/*.cgi
+	# webcalendar plugin
+	mv $(CURDIR)/debian/gforge-plugins/usr/share/gforge/plugins/webcalendar/www/includes/settings.php \
+		$(CURDIR)/debian/gforge-plugins/var/lib/gforge/www/plugins/webcalendar/www/includes
+	chown www-data $(CURDIR)/debian/gforge-plugins/var/lib/gforge/www/plugins/webcalendar/www/includes/settings.php
+	chmod 600 $(CURDIR)/debian/gforge-plugins/var/lib/gforge/www/plugins/webcalendar/www/includes/settings.php
+	ln -s /var/lib/gforge/www/plugins/webcalendar/www/includes/settings.php \
+		$(CURDIR)/debian/gforge-plugins/usr/share/gforge/plugins/webcalendar/www/includes/settings.php
+	chmod +x $(CURDIR)/debian/gforge-plugins/usr/share/gforge/plugins/webcalendar/www/tools/*.pl
 
 	# gforge-common
 	install -m 644 etc/httpd.d/[0-9][0-9]*            $(CURDIR)/debian/gforge-common/usr/share/gforge/etc/httpd.d/
@@ -122,6 +136,7 @@
 	find $(CURDIR)/debian/gforge-web-apache/usr/share/gforge/ -name CVS -type d | xargs rm -rf
 	find $(CURDIR)/debian/gforge-web-apache/usr/share/gforge/ -name .cvsignore | xargs rm -f
 	find $(CURDIR)/debian/gforge-web-apache -name \*.uu -type f | xargs rm -f
+	rm -f $(CURDIR)/debian/gforge-web-apache/usr/share/gforge/www/themes/gforge/COPYING
 	find $(CURDIR)/debian/gforge-web-apache/usr/share/gforge/www -type d -exec chmod 0755 {} \;
 	find $(CURDIR)/debian/gforge-web-apache/usr/share/gforge/www -type f -exec chmod 0644 {} \;
 	find $(CURDIR)/debian/gforge-web-apache/usr/share/gforge/www -name '*.py' -exec chmod 0755 {} \;
@@ -180,9 +195,15 @@
 	install -m 644 cronjobs/stats_site.inc        $(CURDIR)/debian/gforge-db-postgresql/usr/share/gforge/cronjobs/
 	install -m 644 cronjobs/stats_projects.inc    $(CURDIR)/debian/gforge-db-postgresql/usr/share/gforge/cronjobs/
 	#
+	install -m 755 cronjobs/reporting_cron.php $(CURDIR)/debian/gforge-db-postgresql/usr/lib/gforge/bin/
+	# 
 	install -m 755 cronjobs/db_stats_agg.php $(CURDIR)/debian/gforge-db-postgresql/usr/lib/gforge/bin/
 	install -m 755 cronjobs/massmail.php $(CURDIR)/debian/gforge-db-postgresql/usr/lib/gforge/bin/
 	install -m 755 cronjobs/vacuum.php $(CURDIR)/debian/gforge-db-postgresql/usr/lib/gforge/bin/
+	install -m 755 cronjobs/gforge-db-backup.sh $(CURDIR)/debian/gforge-db-postgresql/usr/lib/gforge/bin/
+	#
+	install -m 755 cronjobs/ftp_create_group_access.php $(CURDIR)/debian/gforge-ftp-proftpd/usr/lib/gforge/bin/
+	#
 	install -m 755 deb-specific/stats_projects_logparse.pl $(CURDIR)/debian/gforge-db-postgresql/usr/lib/gforge/bin/
 	install -m 755 deb-specific/get_news_notapproved.pl $(CURDIR)/debian/gforge-db-postgresql/usr/lib/gforge/bin/
 	install -m 755 deb-specific/install-db.sh $(CURDIR)/debian/gforge-db-postgresql/usr/lib/gforge/bin/

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/etc/local.d/30homegroupother
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/etc/local.d/30homegroupother	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/etc/local.d/30homegroupother	2011-02-24 17:31:31 UTC (rev 11977)
@@ -29,6 +29,7 @@
 //             you will break the html_image function in include/html.php
 //
 $sys_urlroot='{sys_urlroot}';
+$sys_urlprefix='';
 
 // Name of the system as a whole (needed by various utils and titles)
 $sys_name='{system_name}';

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/fckeditor/common/fckeditorPlugin.class
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/fckeditor/common/fckeditorPlugin.class	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/fckeditor/common/fckeditorPlugin.class	2011-02-24 17:31:31 UTC (rev 11977)
@@ -28,7 +28,7 @@
  *
  */
 
-require_once("www/plugins/fckeditor/fckeditor.php");
+require_once($GLOBALS['sys_plugins_path']."fckeditor/www/fckeditor.php");
 
 class fckeditorPlugin extends Plugin {
 	function fckeditorPlugin () {

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/mediawiki/usr/share/mediawiki1.7/includes/GFUser.class.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/mediawiki/usr/share/mediawiki1.7/includes/GFUser.class.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/mediawiki/usr/share/mediawiki1.7/includes/GFUser.class.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -356,6 +356,24 @@
 	function isLoggedIn() {
 		return $this->is_logged_in;
 	}
+
+	function setUpTheme() {
+//
+//	An optimization in session_getdata lets us pre-fetch this in most cases.....
+//
+		if (!$this->data_array['dirname']) {
+			$res=db_query("SELECT dirname FROM themes WHERE theme_id='".$this->getThemeID()."'");
+			$this->theme=db_result($res,0,'dirname');
+		} else {
+			$this->theme=$this->data_array['dirname'];
+		}
+		if (is_file($GLOBALS['sys_themeroot'].$this->theme.'/Theme.class')) {
+			$GLOBALS['sys_theme']=$this->theme;
+		} else {
+			$this->theme=$GLOBALS['sys_theme'];
+		}
+		return $this->theme;
+	}
 }
 
 // Local Variables:

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/mediawiki/usr/share/mediawiki1.7/includes/GForgePre.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/mediawiki/usr/share/mediawiki1.7/includes/GForgePre.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/mediawiki/usr/share/mediawiki1.7/includes/GForgePre.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -41,7 +41,7 @@
 */
 
 //library to determine browser settings
-//require_once('www/include/browser.php');
+require_once('www/include/browser.php');
 
 //base error library for new objects
 require_once('common/include/Error.class');
@@ -151,7 +151,7 @@
 if (session_loggedin()) {
 	//set up the user's timezone if they are logged in
 	$LUSER =& session_get_user();
-	//$LUSER->setUpTheme();
+	$LUSER->setUpTheme();
 	//header('Cache-Control: private');
 	$GLOBALS['G_USERNAME']=$GLOBALS['G_SESSION']->getUnixName();
 }

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/mediawiki/usr/share/mediawiki1.7/skins/GForge.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/mediawiki/usr/share/mediawiki1.7/skins/GForge.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/mediawiki/usr/share/mediawiki1.7/skins/GForge.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -90,33 +90,7 @@
 		<?php $this->html('headscripts') ?>
 
 	<!-- GFORGE Stylesheet BEGIN -->
-	<?php
-		/* check if a personalized css stylesheet exist, if yes include only
-   		this stylesheet
-   		new stylesheets should use the <themename>.css file
-		*/
-		$theme_cssfile=$GLOBALS['sys_themeroot'].$GLOBALS['sys_theme'].'/css/'.$GLOBALS['sys_theme'].'.css';
-		if (file_exists($theme_cssfile)){
-			echo '
-	<link rel="stylesheet" type="text/css" href="/themes/'.$GLOBALS['sys_theme'].'/css/'.$GLOBALS['sys_theme'].'.css"/>
-			';
-		} else {
-		/* if this is not our case, then include the compatibility stylesheet
-   		that contains all removed styles from the code and check if a
-   		custom stylesheet exists. 
-   		Used for compatibility with existing stylesheets
-		*/
-		?>
-	<link rel="stylesheet" type="text/css" href="/themes/css/gforge-compat.css" />
-		<?php
-		$theme_cssfile=$GLOBALS['sys_themeroot'].$GLOBALS['sys_theme'].'/css/theme.css';
-		if (file_exists($theme_cssfile)){
-			echo '
-	<link rel="stylesheet" type="text/css" href="/themes/'.$GLOBALS['sys_theme'].'/css/theme.css" />
-			';
-		}
-	}
-?>
+	<?php $GLOBALS['HTML']->headerCSS(); ?>
 	<!-- GFORGE Stylesheet END -->
 </head>
 
@@ -125,69 +99,7 @@
  class="<?php $this->text('nsclass') ?> <?php $this->text('dir') ?>">
 
 	<!-- GFORGE BodyHeader BEGIN -->
-<table border="0" width="100%" cellspacing="0" cellpadding="0" id="headertable" >
-	<tr>
-		<td><a href="/"><?php echo html_image('logo.png',198,52,array('border'=>'0')); ?></a></td>
-		<td><?php echo $GLOBALS['HTML']->searchBox(); ?></td>
-		<td align="right"><?php
-			global $Language;
-			if (session_loggedin()) {
-				?>
-				<a class="lnkutility" href="/account/logout.php?return_to=<?php echo $_SERVER['REQUEST_URI']; ?>"><?php echo $Language->getText('common','logout'); ?></a><br />
-				<a class="lnkutility" href="/account/"><?php echo $Language->getText('common','myaccount'); ?></a>
-				<?php
-			} else {
-				?>
-				<b><a class="lnkutility" href="/account/login.php?return_to=<?php echo $_SERVER['REQUEST_URI']; ?>"><?php echo $Language->getText('common','login'); ?></a></b><br />
-				<b><a class="lnkutility" href="/account/register.php"><?php echo $Language->getText('common','newaccount'); ?></a></b>
-				<?php
-			}
-			echo $GLOBALS['HTML']->quickNav();
-
-		?></td>
-		<td>  </td>
-	</tr>
-
-</table>
-<table border="0" width="100%" cellspacing="0" cellpadding="0" >
-	<tr>
-		<td> </td>
-		<td colspan="3">
-		<?php echo $GLOBALS['HTML']->outerTabs($params); ?>
-		</td>
-		<td> </td>
-	</tr>
-	<tr>
-		<td align="left" class="toptab" width="9"><img src="<?php echo $GLOBALS['HTML']->imgroot; ?>tabs/topleft.png" height="9" width="9" alt="" /></td>
-		<td class="toptab" width="30"><img src="<?php echo $GLOBALS['HTML']->imgroot; ?>clear.png" width="30" height="1" alt="" /></td>
-		<td class="toptab"><img src="<?php echo $GLOBALS['HTML']->imgroot; ?>clear.png" width="1" height="1" alt="" /></td>
-		<td class="toptab" width="30"><img src="<?php echo $GLOBALS['HTML']->imgroot; ?>clear.png" width="30" height="1" alt="" /></td>
-		<td align="right" class="toptab" width="9"><img src="<?php echo $GLOBALS['HTML']->imgroot; ?>tabs/topright.png" height="9" width="9" alt="" /></td>
-	</tr>
-	<tr>
-		<!-- Outer body row -->
-		<td class="toptab"><img src="<?php echo $GLOBALS['HTML']->imgroot; ?>clear.png" width="10" height="1" alt="" /></td>
-		<td valign="top" width="99%" class="toptab" colspan="3">
-			<!-- Inner Tabs / Shell -->
-			<table border="0" width="100%" cellspacing="0" cellpadding="0">
-			<?php if (isset($params['group']) && $params['group']) { ?>
-			<tr>
-				<td> </td>
-				<td>
-				<?php echo $GLOBALS['HTML']->projectTabs($params['toptab'],$params['group']); ?>
-				</td>
-				<td> </td>
-			</tr>
-			<?php } ?>
-			<tr>
-				<td align="left" class="projecttab" width="9"><img src="<?php echo $GLOBALS['HTML']->imgroot; ?>tabs/topleft-inner.png" height="9" width="9" alt="" /></td>
-				<td class="projecttab" ><img src="<?php echo $GLOBALS['HTML']->imgroot; ?>clear.png" width="1" height="1" alt="" /></td>
-				<td align="right" class="projecttab"  width="9"><img src="<?php echo $GLOBALS['HTML']->imgroot; ?>tabs/topright-inner.png" height="9" width="9" alt="" /></td>
-			</tr>
-
-			<tr>
-				<td class="projecttab" ><img src="<?php echo $GLOBALS['HTML']->imgroot; ?>clear.png" width="10" height="1" alt="" /></td>
-				<td valign="top" width="99%" class="projecttab" >
+	<?php $GLOBALS['HTML']->bodyHeader($params); ?>
 	<!-- GFORGE BodyHeader END -->
 
 	<div id="globalWrapper">

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/AUTHORS
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/AUTHORS	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/AUTHORS	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,2 @@
+Fabien Regnier <fabien.regnier at sogeti.com>
+Julien Jeany <julien.jeany at sogeti.com>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/COPYING
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/COPYING	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/COPYING	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,341 @@
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) 19yy  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 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 General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) 19yy name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
+

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/common/languages/Base.tab
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/common/languages/Base.tab	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/common/languages/Base.tab	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,41 @@
+#/**
+#  *
+#  * projects_hierarchy message catalog (English)
+#  *
+#  * GForge: Breaking Down the Barriers to Open Source Development
+#  * Copyright 1999-2001 (c) VA Linux Systems
+#  *                2005 (c) Daniel Pérez <danielperez.arg at gmail.com>
+#  * http://sourceforge.net
+#  * Here you can add your own language customizations
+#  *
+#  *
+#  */
+user_home	view_projects_hierarchy	View Personal projects_hierarchy
+project_admin	projects_hierarchy	View the projects_hierarchy Administration
+project_admin	link	Link Type
+project_admin	del	Delete
+project_admin	allow	Authorize
+project_admin	wait	Waiting
+project_admin	share	Share
+project_admin	navi	Navigation
+project_admin	add_link	Add a link
+project_admin	validation_wait	Father waiting for validation
+project_admin	hierarchy	Modify the hierarchy
+project_admin	save_son	Add son project
+project_admin	alert_del	Do you really want to delete this link ?
+project_admin	father	Project's parent
+project_admin	alert_allow	Do you really want to authorize this project ?
+project_admin	display_link	Link list
+project_admin	share_link	Share link
+project_admin	navi_link	Navigation link
+project_admin	com_father	Commentary of father :
+project_admin	com	Commentary :
+project_admin	choice_project	Select a project : 
+project_tree	cat	By Category
+project_tree	tree	By hierarchy
+project_tree	tree_project	Project Tree
+project_home	project_father	Parent project
+project_home	project_son	Child project
+project_home	hierarchy_title	Linked projects
+project_home	hierarchy_no	No linked project avalaible
+project_home	link	Links

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/common/languages/French.tab
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/common/languages/French.tab	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/common/languages/French.tab	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,41 @@
+#/**
+#  *
+#  * projects_hierarchy message catalog (English)
+#  *
+#  * GForge: Breaking Down the Barriers to Open Source Development
+#  * Copyright 1999-2001 (c) VA Linux Systems
+#  *                2005 (c) Daniel Pérez <danielperez.arg at gmail.com>
+#  * http://sourceforge.net
+#  * Here you can add your own language customizations
+#  *
+#  *
+#  */
+user_home	view_projects_hierarchy	View Personal projects_hierarchy
+project_admin	projects_hierarchy	View the projects_hierarchy Administration
+project_admin	link	Type de lien
+project_admin	del	Supprimer
+project_admin	allow	Autoriser
+project_admin	wait	En attente
+project_admin	share	Partagé
+project_admin	navi	Navigation
+project_admin	add_link	Ajouter un lien
+project_admin	validation_wait	Père en attente de validation
+project_admin	hierarchy	Modifier la Hiérarchie
+project_admin	save_son	Ajouter un fils
+project_admin	alert_del	Etes vous sûr de vouloir supprimer le lien?
+project_admin	father	Parent du projet
+project_admin	alert_allow	Etes vous sûr de vouloir autoriser ce projet?
+project_admin	display_link	Liste des liens
+project_admin	share_link	Partage de ressources
+project_admin	navi_link	Lien de navigation
+project_admin	com_father	Commentaire du père :
+project_admin	com	Commentaire :
+project_admin	choice_project	Choix du projet :
+project_tree	cat	Par catégorie
+project_tree	tree	Par hiérarchie
+project_tree	tree_project	Arbre des projets
+project_home	project_father	Projet père
+project_home	project_son	Projet fils
+project_home	hierarchy_title	Les projets liés
+project_home	hierarchy_no	Pas de projets liés
+project_home	link	Liens

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/common/projects_hierarchy-init.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/common/projects_hierarchy-init.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/common/projects_hierarchy-init.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,33 @@
+<?php
+
+/**
+ *
+ * This file is part of GForge.
+ *
+ * GForge is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GForge 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GForge; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+ */
+
+require_once ('projects_hierarchyPlugin.class') ;
+
+$projects_hierarchyPluginObject = new projects_hierarchyPlugin ;
+
+register_plugin ($projects_hierarchyPluginObject) ;
+
+// Local Variables:
+// mode: php
+// c-file-style: "bsd"
+// End:
+
+?>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/common/projects_hierarchyPlugin.class
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/common/projects_hierarchyPlugin.class	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/common/projects_hierarchyPlugin.class	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,391 @@
+<?php
+
+/**
+ * projects_hierarchyPlugin Class
+ *
+ *
+ * This file is part of GForge.
+ *
+ * GForge is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GForge 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GForge; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+ */
+
+class projects_hierarchyPlugin extends Plugin {
+	function projects_hierarchyPlugin () {
+		$this->Plugin() ;
+		$this->name = "projects_hierarchy" ;
+		$this->text = "projects_hierarchy!" ; // To show in the tabs, use...
+		$this->hooks[] = "user_personal_links";//to make a link to the user´s personal part of the plugin
+		$this->hooks[] = "usermenu" ;
+		$this->hooks[] = "groupmenu" ;	// To put into the project tabs
+		$this->hooks[] = "groupisactivecheckbox" ; // The "use ..." checkbox in editgroupinfo
+		$this->hooks[] = "groupisactivecheckboxpost" ; //
+		$this->hooks[] = "userisactivecheckbox" ; // The "use ..." checkbox in user account
+		$this->hooks[] = "userisactivecheckboxpost" ; //
+		$this->hooks[] = "project_admin_plugins"; // to show up in the admin page fro group
+		$this->hooks[] = "admin_project_link"; // to add son to a project
+		$this->hooks[] = "project_home_link"; // to see father and sons in project home
+		$this->hooks[] = "tree"; // to see the tree of projects
+		$this->hooks[] = "delete_link"; // to delete link
+	}
+
+	function CallHook ($hookname, $params) {
+		global $use_projects_hierarchyplugin,$G_SESSION,$HTML,$Language;
+		$group_id=$params['group'];
+		if ($hookname == "usermenu") {
+			$text = $this->text; // this is what shows in the tab
+			if ($G_SESSION->usesPlugin("projects_hierarchy")) {
+				$param = '?type=user&id=' . $G_SESSION->getId() . "&pluginname=" . $this->name; // we indicate the part we´re calling is the user one
+				echo ' | ' . $HTML->PrintSubMenu (array ($text),
+						  array ('/plugins/projects_hierarchy/index.php' . $param ));				
+			}
+		} elseif ($hookname == "groupmenu") {
+			$project = &group_get_object($group_id);
+			if (!$project || !is_object($project)) {
+				return;
+			}
+			if ($project->isError()) {
+				return;
+			}
+			if (!$project->isProject()) {
+				return;
+			}
+			if ( $project->usesPlugin ( $this->name ) ) {
+				$params['TITLES'][]=$this->text;
+				$params['DIRS'][]='/plugins/projects_hierarchy/index.php?type=group&id=' . $group_id . "&pluginname=" . $this->name; // we indicate the part we´re calling is the project one
+			} else {
+				//$params['TITLES'][]=$this->text." is [Off]";
+			}	
+			(($params['toptab'] == $this->name) ? $params['selected']=(count($params['TITLES'])-1) : '' );
+		} elseif ($hookname == "groupisactivecheckbox") {
+			//Check if the group is active
+		} elseif ($hookname == "groupisactivecheckboxpost") {
+			// this code actually activates/deactivates the plugin after the form was submitted in the project edit public info page
+			$group = &group_get_object($group_id);
+			$use_projects_hierarchyplugin = getStringFromRequest('use_projects_hierarchyplugin');
+			if ( $use_projects_hierarchyplugin == 1 ) {
+				$group->setPluginUse ( $this->name );
+			} else {
+				$group->setPluginUse ( $this->name, false );
+			}
+		} elseif ($hookname == "userisactivecheckbox") {
+			//check if user is active
+			// this code creates the checkbox in the user account manteinance page to activate/deactivate the plugin
+		} elseif ($hookname == "userisactivecheckboxpost") {
+			// this code actually activates/deactivates the plugin after the form was submitted in the user account manteinance page
+			$user = $params['user'];
+			$use_projects_hierarchyplugin = getStringFromRequest('use_projects_hierarchyplugin');
+			if ( $use_projects_hierarchyplugin == 1 ) {
+				$user->setPluginUse ( $this->name );
+			} else {
+				$user->setPluginUse ( $this->name, false );
+			}
+			echo "<tr>";
+			echo "<td>";
+			echo ' <input type="CHECKBOX" name="use_projects_hierarchyplugin" value="1" ';
+			// CHECKED OR UNCHECKED?
+			if ( $user->usesPlugin ( $this->name ) ) {
+				echo "CHECKED";
+			}
+			echo ">    Use ".$this->text." Plugin";
+			echo "</td>";
+			echo "</tr>";
+		} elseif ($hookname == "user_personal_links") {
+			global $Language;
+			// this displays the link in the user´s profile page to it´s personal projects_hierarchy (if you want other sto access it, youll have to change the permissions in the index.php
+			$userid = $params['user_id'];
+			$user = user_get_object($userid);
+			$text = $params['text'];
+			//check if the user has the plugin activated
+			if ($user->usesPlugin($this->name)) {
+				echo '	<p>
+					<a href="/plugins/projects_hierarchy/index.php?id=' . $userid . '&type=user&pluginname=' . $this->name . '">' . $Language->getText('user_home','view_projects_hierarchy') .'</a></p>';
+			}
+		} elseif ($hookname == "project_admin_plugins") {
+			global $Language;
+			// this displays the link in the project admin options page to it´s  projects_hierarchy administration
+			$group_id = $params['group_id'];
+			$group = &group_get_object($group_id);
+			if ( $group->usesPlugin ( $this->name ) ) {
+				echo '<a href="/plugins/projects_hierarchy/index.php?id=' . $group->getID() . '&type=admin&pluginname=' . $this->name . '">' . $Language->getText('project_admin','projects_hierarchy') . '</a><br />';
+			}
+		}												    
+		elseif ($hookname == "tree") {
+			
+			header('Location: ../plugins/projects_hierarchy/softwaremap.php');
+			
+		} 
+		elseif ($hookname == "project_home_link") {
+			// ############################## Display link
+			$group_id = $params;
+			echo $HTML->boxTop($Language->getText('project_home','hierarchy_title'));
+			$cpt_project = 0 ;
+			// father request
+			$query = "SELECT DISTINCT group_id,unix_group_name,group_name FROM groups,plugin_projects_hierarchy WHERE plugin_projects_hierarchy.link_type ='shar' AND plugin_projects_hierarchy.activated='t' AND groups.group_id=plugin_projects_hierarchy.project_id AND plugin_projects_hierarchy.sub_project_id=".$group_id;
+			$res = db_query($query);
+			echo db_error();
+			while ($row = db_fetch_array($res)) {
+				echo "<img src=\"themes/gforge/images/ic/forum20g.png\" border=\"0\"> ".$Language->getText('project_home','project_father').": <a href=\"/projects/".$row['unix_group_name']."\">" . $row['group_name'] . "</a><br/>";
+				$cpt_project ++;
+			}
+			
+			if($cpt_project != 0){
+			print '<hr size="1" />';
+			}
+			$cpt_temp = $cpt_project ;
+			// sons request
+			$query = "SELECT DISTINCT group_id,unix_group_name,group_name,com FROM groups,plugin_projects_hierarchy WHERE plugin_projects_hierarchy.link_type ='shar' AND plugin_projects_hierarchy.activated='t' AND groups.group_id=plugin_projects_hierarchy.sub_project_id AND plugin_projects_hierarchy.project_id=".$group_id;
+			$res = db_query($query);
+			echo db_error();
+			while ($row = db_fetch_array($res)) {
+				echo "<img src=\"themes/gforge/images/ic/forum20g.png\" border=\"0\"> ".$Language->getText('project_home','project_son')." : <a href=\"/projects/".$row['unix_group_name']."\">" . $row['group_name'] . "</a> : ".$row['com']."<br/>";
+				$cpt_project ++;
+			}
+			
+			
+			if($cpt_project != $cpt_temp){
+			print '<hr size="1" />';
+			}
+			$cpt_temp = $cpt_project ;
+			
+			// links if project is father
+			$query = "SELECT DISTINCT group_id,unix_group_name,group_name,com FROM groups,plugin_projects_hierarchy WHERE plugin_projects_hierarchy.link_type ='navi' AND plugin_projects_hierarchy.activated='t' AND groups.group_id=plugin_projects_hierarchy.sub_project_id AND plugin_projects_hierarchy.project_id=".$group_id;
+			$res = db_query($query);
+			echo db_error();
+			while ($row = db_fetch_array($res)) {
+				echo "<img src=\"themes/gforge/images/ic/forum20g.png\" border=\"0\"> ".$Language->getText('project_home','link')." : <a href=\"/projects/".$row['unix_group_name']."\">" . $row['group_name'] . "</a> :  ".$row['com']."<br/>";
+				$cpt_project ++;
+			}
+			// links if project is son
+			$query = "SELECT DISTINCT group_id,unix_group_name,group_name,com FROM groups,plugin_projects_hierarchy WHERE plugin_projects_hierarchy.link_type ='navi' AND plugin_projects_hierarchy.activated='t' AND groups.group_id=plugin_projects_hierarchy.project_id AND plugin_projects_hierarchy.sub_project_id=".$group_id;
+			$res = db_query($query);
+			echo db_error();
+			while ($row = db_fetch_array($res)) {
+				echo "<img src=\"themes/gforge/images/ic/forum20g.png\" border=\"0\"> ".$Language->getText('project_home','link')." : <a href=\"/projects/".$row['unix_group_name']."\">" . $row['group_name'] . "</a><br/>";
+				$cpt_project ++;
+			}
+			
+			
+			
+			if($cpt_project != $cpt_temp){
+			print '<hr size="1" />';
+			}
+			
+			if($cpt_project == 0){
+			echo $Language->getText('project_home','hierarchy_no');	
+			print '<hr size="1" />';
+			}
+			
+			echo $HTML->boxBottom();
+			
+		}
+		elseif ($hookname == "admin_project_link") {
+			//modif pour hierarchie par Fabien le 10/10/06
+			//add files add_son.php, del_father.php,del_son.php,wait_son.php and hierarchy_utils.php
+			
+			include('../../plugins/projects_hierarchy/hierarchy_utils.php');
+			$group_id = $params ;
+			echo $HTML->boxMiddle($Language->getText('project_admin','hierarchy'));
+			echo '<form action="../../plugins/projects_hierarchy/add_son.php?group_id='.$group_id.'" method="POST" name="formson">';
+			//include('hierarchy_utils.php');
+			//select box of sons
+			echo '<table><tr>';
+			echo '<td>'.$Language->getText('project_admin','choice_project').'</td><td>'.son_box($group_id,'sub_project_id','0').'</td><td> </td>' ;
+			echo '</tr><tr>' ;
+			echo '<td>'.$Language->getText('project_admin','com').'</td><td> <input type="text" size="50" value="" name="com"></td>' ;
+			//echo type_son_box();
+			echo '<td><input type="submit"  name="son" value="'.$Language->getText('project_admin','save_son').'"></td></tr></table></form>';
+			echo '<br/>';
+			echo '<form action="../../plugins/projects_hierarchy/add_link.php?group_id='.$group_id.'" method="POST" name="formlink">';
+			//include('hierarchy_utils.php');
+			//select box of sons
+			echo '<table><tr>';
+			echo '<td>'.$Language->getText('project_admin','choice_project').'</td><td>'.link_box($group_id,'sub_project_id','0').'</td><td> </td>';
+			echo '</tr><tr>' ;
+			echo '<td>'.$Language->getText('project_admin','com').'</td><td><input type="text" size="50" value="" name="com"></td>' ;
+			echo '<td><input type="submit"  name="son" value="'.$Language->getText('project_admin','add_link').'"></td></tr></table></form>';
+			echo '<br/>';
+			//select all the sons of the current project
+			$sql_son = "SELECT group_id,group_name,unix_group_name,sub_project_id, activated,link_type,com FROM groups,plugin_projects_hierarchy WHERE " .
+					"	(	groups.group_id = plugin_projects_hierarchy.sub_project_id " .
+					"AND plugin_projects_hierarchy.project_id = ".$group_id.")" ;
+							
+			
+			$res_son=db_query($sql_son)or die(db_error());
+			if (!$res_son || db_numrows($res_son) < 1) {
+				
+			}
+			else {
+				//display of sons
+				$cpt_son = 1 ;
+				echo $Language->getText('project_admin','display_link');
+				echo '<table>';
+				$i = 0;
+				while($row_son = db_fetch_array($res_son)){
+						$i++;
+						echo '<tr>';
+						echo '<td>';
+						//link to the project
+						echo "<a href=\"../../projects/".$row_son['unix_group_name']."\">".$row_son['group_name']."</a>";
+						echo '</td>'; 
+						
+						echo '<td>';
+						if($row_son[link_type] == 'navi'){
+						echo $Language->getText('project_admin','navi_link');	
+						}
+						else {
+						echo $Language->getText('project_admin','share_link');
+						}
+						echo '</td>';
+						
+						echo '<td>';
+						if($row_son[activated] == 'f'){
+							echo $Language->getText('project_admin','wait');
+						}
+						else {
+							print "<b>".$Language->getText('project_admin','allow')."</b>";
+						}
+						echo '</td>';
+						echo "<td><a href='#' onclick='if(confirm(\"".$Language->getText('project_admin','alert_del')."\")){window.location.href=\"../../plugins/projects_hierarchy/del_son.php?group_id=".$group_id."&sub_group_id=".$row_son['sub_project_id']."\"}'}>".$Language->getText('project_admin','del')."</a></td>";
+						echo "<tr><td colspan='4'>".$Language->getText('project_admin','com')." <i>".$row_son[com]."</i>";
+						echo '</td></tr>';
+					}
+				
+			}
+			//select  navigation link by father
+			$sql_son = "SELECT group_id,group_name,unix_group_name,project_id, activated,link_type,com FROM groups,plugin_projects_hierarchy WHERE " .
+							" (	groups.group_id = plugin_projects_hierarchy.project_id " .
+					"AND plugin_projects_hierarchy.sub_project_id = ".$group_id." AND plugin_projects_hierarchy.link_type = 'navi') ";
+			
+			$res_son=db_query($sql_son)or die(db_error());
+			if (!$res_son || db_numrows($res_son) < 1) {
+				if($cpt_son == 1 ){
+				echo '</table>';
+				}
+			}
+			else {
+				//display of sons 
+				if($cpt_son != 1 ){
+				echo $Language->getText('project_admin','display_link');
+				echo '<table>';
+				}
+				
+				$i = 0;
+				while($row_son = db_fetch_array($res_son)){
+						$i++;
+						echo '<tr>';
+						echo '<td>';
+						//link to the project
+						echo "<a href=\"../../projects/".$row_son['unix_group_name']."\">".$row_son['group_name']."</a>";
+						echo '</td>'; 
+						
+						echo '<td>';
+						if($row_son[link_type] == 'navi'){
+						echo $Language->getText('project_admin','navi_link');
+						}
+						else {
+						echo $Language->getText('project_admin','share_link');	
+						}
+						echo '</td>';
+						
+						echo '<td>';
+						if($row_son[activated] == 'f'){
+						//echo $Language->getText('project_admin','wait');
+						echo "<td><a href='#' onclick='if(confirm(\"".$Language->getText('project_admin','alert_allow')."\")){window.location.href=\"../../plugins/projects_hierarchy/wait_son.php?sub_group_id=".$group_id."&group_id=".$row_son['project_id']."\"}'}>".$Language->getText('project_admin','allow')."</a></td>";
+						}
+						else {
+							print "<b>".$Language->getText('project_admin','allow')."</b>";
+						}
+						echo '</td>';
+						echo "<td><a href='#' onclick='if(confirm(\"".$Language->getText('project_admin','alert_del')."\")){window.location.href=\"../../plugins/projects_hierarchy/del_father.php?group_id=".$row_son['project_id']."&sub_group_id=".$group_id."\"}'}>".$Language->getText('project_admin','del')."</a></td>";
+						echo "<tr><td colspan='4'>".$Language->getText('project_admin','com_father')." <i>".$row_son['com']."</i></td>";
+						echo '</tr>';
+					}
+				echo '</table>';
+			}
+			
+			//research allowing father
+			$sql_father = "SELECT group_id,group_name,unix_group_name,project_id,com FROM groups,plugin_projects_hierarchy WHERE " .
+					"		groups.group_id = plugin_projects_hierarchy.project_id " .
+					"AND plugin_projects_hierarchy.sub_project_id = ".$group_id."".
+					"		AND plugin_projects_hierarchy.activated = true AND plugin_projects_hierarchy.link_type = 'shar'";
+					//print $sql_wait;
+			$res_father=db_query($sql_father)or die(db_error());
+			if (!$res_father || db_numrows($res_father) < 1) {
+				
+				}
+				else {
+					//display of the father of the current project
+					echo '<table><tr><td colspan=\"2\">';	
+					echo $Language->getText('project_admin','father');
+					echo '</td></tr>';	
+					while ($row_father = db_fetch_array($res_father)) {
+					echo '<tr>';
+					echo '<td>';
+					echo "<a href=\"../../projects/".$row_father['unix_group_name']."\">".$row_father['group_name']."</a>";
+					echo '</td><td>';
+					echo "<td><a href='#' onclick='if(confirm(\"".$Language->getText('project_admin','alert_del')."\")){window.location.href=\"../../plugins/projects_hierarchy/del_father.php?sub_group_id=".$group_id."&group_id=".$row_father['group_id']."\"}'}>".$Language->getText('project_admin','del')."</a></td>";
+					echo '</td></tr>';
+					}
+					echo '</table>';
+				}
+			
+			  
+			//research waiting fathers
+			$sql_wait = "SELECT group_id,group_name,unix_group_name,project_id,link_type,com FROM groups,plugin_projects_hierarchy WHERE " .
+					"		groups.group_id = plugin_projects_hierarchy.project_id " .
+					"AND plugin_projects_hierarchy.sub_project_id = ".$group_id."".
+					"		AND plugin_projects_hierarchy.activated = false AND plugin_projects_hierarchy.link_type = 'shar'";
+					//print $sql_wait;
+			$res_wait=db_query($sql_wait)or die(db_error());
+			if (!$res_wait || db_numrows($res_wait) < 1) {
+				
+				}
+				else { 
+					//display of waiting fathers
+					echo '<table><tr><td colspan=\"2\">';	
+					echo $Language->getText('project_admin','validation_wait');
+					echo '</td></tr>';	
+					while ($row_wait = db_fetch_array($res_wait)) {
+					echo '<tr>';
+					echo '<td>';
+					echo "<a href=\"../../projects/".$row_wait[unix_group_name]."\">".$row_wait[group_name]."</a>";
+					echo '</td>';
+					echo'<td>';
+					echo "<td><a href='#' onclick='if(confirm(\"".$Language->getText('project_admin','alert_allow')."\")){window.location.href=\"../../plugins/projects_hierarchy/wait_son.php?sub_group_id=".$group_id."&group_id=".$row_wait[group_id]."\"}'}>".$Language->getText('project_admin','allow')."</a></td>";
+					echo '</td><td>';
+					echo "<td><a href='#' onclick='if(confirm(\"".$Language->getText('project_admin','alert_del')."\")){window.location.href=\"../../plugins/projects_hierarchy/del_father.php?sub_group_id=".$group_id."&group_id=".$row_wait[group_id]."\"}'}>".$Language->getText('project_admin','del')."</a></td>";
+					echo "</td><tr><td colspan='3'>".$Language->getText('project_admin','com_father')." <i>".$row_wait[com]."</i>";
+					echo '</td></tr>';
+					}
+					echo '</table>';
+				}				
+				
+			
+		} 
+		elseif ($hookname == "delete_link") {
+			
+			$sql = "DELETE FROM plugin_projects_hierarchy WHERE project_id = ".$params." OR sub_project_id = ".$params." ";
+			$res_son=db_query($sql);
+		} 
+		
+	}
+}
+
+// Local Variables:
+// mode: php
+// c-file-style: "bsd"
+// End:
+
+?>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/db/projects_hierarchy-init.sql
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/db/projects_hierarchy-init.sql	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/db/projects_hierarchy-init.sql	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,9 @@
+CREATE TABLE plugin_projects_hierarchy (
+	project_id integer DEFAULT 0 NOT NULL,
+	sub_project_id integer DEFAULT 0 NOT NULL,
+	link_type char(4) DEFAULT 'navi' NOT NULL,
+	activated boolean DEFAULT false NOT NULL,
+	com char(255) NOT NULL
+	);
+
+INSERT INTO plugins (plugin_name,plugin_desc) VALUES ('hierarchy','Hierarchy GForge Plugin');
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/add_link.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/add_link.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/add_link.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,42 @@
+<?php
+/**
+ * Role Editing Page
+ *
+ * Copyright 2004 (c) GForge LLC
+ *
+ * @version   $Id: add_son.php,v 1.0 2006/10/10 15:00:00 fregnier Exp $
+ * @author Fabien Regnier fabien.regnier at sogeti.com
+ * @date 2006-10-10
+ *
+ * This file is part of GForge.
+ *
+ * GForge is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GForge 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GForge; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+require_once('pre.php');
+session_require(array('group'=>$group_id,'admin_flags'=>'A'));
+//add link between two projects
+$sql = "INSERT INTO plugin_projects_hierarchy (project_id ,sub_project_id,link_type,com) VALUES ('".$_GET['group_id']."' , '".$_POST['sub_project_id']."', 'navi','".$_POST['com']."')";
+//print "<br>".$sql;
+db_begin();
+$test = db_query($sql) or die(db_error());
+db_commit();
+
+
+?>
+<script>
+//back to the administration 
+window.location.href = "/project/admin/index.php?group_id=<?php print $_GET['group_id'] ?>";
+</script>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/add_son.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/add_son.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/add_son.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,42 @@
+<?php
+/**
+ * Role Editing Page
+ *
+ * Copyright 2004 (c) GForge LLC
+ *
+ * @version   $Id: add_son.php,v 1.0 2006/10/10 15:00:00 fregnier Exp $
+ * @author Fabien Regnier fabien.regnier at sogeti.com
+ * @date 2006-10-10
+ *
+ * This file is part of GForge.
+ *
+ * GForge is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GForge 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GForge; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+require_once('pre.php');
+session_require(array('group'=>$group_id,'admin_flags'=>'A'));
+//add link between two projects
+$sql = "INSERT INTO plugin_projects_hierarchy (project_id ,sub_project_id,link_type,com) VALUES ('".$_GET['group_id']."' , '".$_POST['sub_project_id']."', 'shar','".$_POST['com']."')";
+//print "<br>".$sql;
+db_begin();
+$test = db_query($sql) or die(db_error());
+db_commit();
+
+
+?>
+<script>
+//back to the administration 
+window.location.href = "/project/admin/index.php?group_id=<?php print $_GET['group_id'] ?>";
+</script>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/del_father.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/del_father.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/del_father.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,45 @@
+<?php
+/**
+ * Role Editing Page
+ *
+ * Copyright 2004 (c) GForge LLC
+ *
+ * @version   $Id: del_father.php,v 1.0 2006/10/10 15:00:00 fregnier Exp $
+ * @author Fabien Regnier fabien.regnier at sogeti.com
+ * @date 2006-10-10
+ *
+ * This file is part of GForge.
+ *
+ * GForge is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GForge 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GForge; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+require_once('pre.php');
+session_require(array('group'=>$group_id,'admin_flags'=>'A'));
+//plugin webcal
+$params[0] =  $_GET['sub_group_id'] ;
+$params[1] =  $_GET['group_id'] ;
+plugin_hook('del_cal_link_father',$params);
+//del link between two projects
+$sql = "DELETE FROM plugin_projects_hierarchy WHERE project_id  = '".$_GET['group_id']."' AND sub_project_id = '".$_GET['sub_group_id']."'";
+//print "<br>".$sql;
+db_begin();
+$test = db_query($sql) or die(db_error());
+db_commit();
+
+?>
+<script>
+//back to the admin's page (son)
+window.location.href = "/project/admin/index.php?group_id=<?php print $_GET['sub_group_id'] ?>";
+</script>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/del_son.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/del_son.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/del_son.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,45 @@
+<?php
+/**
+ * Role Editing Page
+ *
+ * Copyright 2004 (c) GForge LLC
+ *
+ * @version   $Id: del_son.php,v 1.0 2006/10/10 15:00:00 fregnier Exp $
+ * @author Fabien Regnier fabien.regnier at sogeti.com
+ * @date 2006-10-10
+ *
+ * This file is part of GForge.
+ *
+ * GForge is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GForge 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GForge; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+require_once('pre.php');
+session_require(array('group'=>$group_id,'admin_flags'=>'A'));
+//plugin webcal
+$params[0] =  $_GET['sub_group_id'] ;
+$params[1] =  $_GET['group_id'] ;
+plugin_hook('del_cal_link_father',$params);
+//del link between two projects
+$sql = "DELETE FROM plugin_projects_hierarchy WHERE project_id  = '".$_GET['group_id']."' AND sub_project_id = '".$_GET['sub_group_id']."'";
+//print "<br>".$sql;
+db_begin();
+$test = db_query($sql) or die(db_error());
+db_commit();
+
+?>
+<script>
+//back to the administration (father)
+window.location.href = "/project/admin/index.php?group_id=<?php print $_GET['group_id'] ?>";
+</script>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/dtree.css
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/dtree.css	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/dtree.css	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,34 @@
+/*--------------------------------------------------|
+| dTree 2.05 | www.destroydrop.com/javascript/tree/ |
+|---------------------------------------------------|
+| Copyright (c) 2002-2003 Geir Landrö               |
+|--------------------------------------------------*/
+
+.dtree {
+	font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;
+	font-size: 11px;
+	color: #666;
+	white-space: nowrap;
+}
+.dtree img {
+	border: 0px;
+	vertical-align: middle;
+}
+.dtree a {
+	color: #333;
+	text-decoration: none;
+}
+.dtree a.node, .dtree a.nodeSel {
+	white-space: nowrap;
+	padding: 1px 2px 1px 2px;
+}
+.dtree a.node:hover, .dtree a.nodeSel:hover {
+	color: #333;
+	text-decoration: underline;
+}
+.dtree a.nodeSel {
+	background-color: #c0d2ec;
+}
+.dtree .clip {
+	overflow: hidden;
+}
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/dtree.js
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/dtree.js	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/dtree.js	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,693 @@
+/*--------------------------------------------------|
+
+| dTree 2.05 | www.destroydrop.com/javascript/tree/ |
+
+|---------------------------------------------------|
+
+| Copyright (c) 2002-2003 Geir Landrö               |
+
+|                                                   |
+
+| This script can be used freely as long as all     |
+
+| copyright messages are intact.                    |
+
+|                                                   |
+
+| Updated: 17.04.2003                               |
+
+|--------------------------------------------------*/
+
+
+
+// Node object
+
+function Node(id, pid, name, url, title, target, icon, iconOpen, open) {
+
+	this.id = id;
+
+	this.pid = pid;
+
+	this.name = name;
+
+	this.url = url;
+
+	this.title = title;
+
+	this.target = target;
+
+	this.icon = icon;
+
+	this.iconOpen = iconOpen;
+
+	this._io = open || false;
+
+	this._is = false;
+
+	this._ls = false;
+
+	this._hc = false;
+
+	this._ai = 0;
+
+	this._p;
+
+};
+
+
+
+// Tree object
+
+function dTree(objName) {
+
+	this.config = {
+
+		target					: null,
+
+		folderLinks			: true,
+
+		useSelection		: true,
+
+		useCookies			: true,
+
+		useLines				: true,
+
+		useIcons				: true,
+
+		useStatusText		: false,
+
+		closeSameLevel	: false,
+
+		inOrder					: false
+
+	}
+
+	this.icon = {
+
+		root				: 'img/base.gif',
+
+		folder			: 'img/folder.gif',
+
+		folderOpen	: 'img/folderopen.gif',
+
+		node				: 'img/page.gif',
+
+		empty				: 'img/empty.gif',
+
+		line				: 'img/line.gif',
+
+		join				: 'img/join.gif',
+
+		joinBottom	: 'img/joinbottom.gif',
+
+		plus				: 'img/plus.gif',
+
+		plusBottom	: 'img/plusbottom.gif',
+
+		minus				: 'img/minus.gif',
+
+		minusBottom	: 'img/minusbottom.gif',
+
+		nlPlus			: 'img/nolines_plus.gif',
+
+		nlMinus			: 'img/nolines_minus.gif'
+
+	};
+
+	this.obj = objName;
+
+	this.aNodes = [];
+
+	this.aIndent = [];
+
+	this.root = new Node(-1);
+
+	this.selectedNode = null;
+
+	this.selectedFound = false;
+
+	this.completed = false;
+
+};
+
+
+
+// Adds a new node to the node array
+
+dTree.prototype.add = function(id, pid, name, url, title, target, icon, iconOpen, open) {
+
+	this.aNodes[this.aNodes.length] = new Node(id, pid, name, url, title, target, icon, iconOpen, open);
+
+};
+
+
+
+// Open/close all nodes
+
+dTree.prototype.openAll = function() {
+
+	this.oAll(true);
+
+};
+
+dTree.prototype.closeAll = function() {
+
+	this.oAll(false);
+
+};
+
+
+
+// Outputs the tree to the page
+
+dTree.prototype.toString = function() {
+
+	var str = '<div class="dtree">\n';
+
+	if (document.getElementById) {
+
+		if (this.config.useCookies) this.selectedNode = this.getSelected();
+
+		str += this.addNode(this.root);
+
+	} else str += 'Browser not supported.';
+
+	str += '</div>';
+
+	if (!this.selectedFound) this.selectedNode = null;
+
+	this.completed = true;
+
+	return str;
+
+};
+
+
+
+// Creates the tree structure
+
+dTree.prototype.addNode = function(pNode) {
+
+	var str = '';
+
+	var n=0;
+
+	if (this.config.inOrder) n = pNode._ai;
+
+	for (n; n<this.aNodes.length; n++) {
+
+		if (this.aNodes[n].pid == pNode.id) {
+
+			var cn = this.aNodes[n];
+
+			cn._p = pNode;
+
+			cn._ai = n;
+
+			this.setCS(cn);
+
+			if (!cn.target && this.config.target) cn.target = this.config.target;
+
+			if (cn._hc && !cn._io && this.config.useCookies) cn._io = this.isOpen(cn.id);
+
+			if (!this.config.folderLinks && cn._hc) cn.url = null;
+
+			if (this.config.useSelection && cn.id == this.selectedNode && !this.selectedFound) {
+
+					cn._is = true;
+
+					this.selectedNode = n;
+
+					this.selectedFound = true;
+
+			}
+
+			str += this.node(cn, n);
+
+			if (cn._ls) break;
+
+		}
+
+	}
+
+	return str;
+
+};
+
+
+
+// Creates the node icon, url and text
+
+dTree.prototype.node = function(node, nodeId) {
+
+	var str = '<div class="dTreeNode">' + this.indent(node, nodeId);
+
+	if (this.config.useIcons) {
+
+		if (!node.icon) node.icon = (this.root.id == node.pid) ? this.icon.root : ((node._hc) ? this.icon.folder : this.icon.node);
+
+		if (!node.iconOpen) node.iconOpen = (node._hc) ? this.icon.folderOpen : this.icon.node;
+
+		if (this.root.id == node.pid) {
+
+			node.icon = this.icon.root;
+
+			node.iconOpen = this.icon.root;
+
+		}
+
+		str += '<img id="i' + this.obj + nodeId + '" src="' + ((node._io) ? node.iconOpen : node.icon) + '" alt="" />';
+
+	}
+
+	if (node.url) {
+
+		str += '<a id="s' + this.obj + nodeId + '" class="' + ((this.config.useSelection) ? ((node._is ? 'nodeSel' : 'node')) : 'node') + '" href="' + node.url + '"';
+
+		if (node.title) str += ' title="' + node.title + '"';
+
+		if (node.target) str += ' target="' + node.target + '"';
+
+		if (this.config.useStatusText) str += ' onmouseover="window.status=\'' + node.name + '\';return true;" onmouseout="window.status=\'\';return true;" ';
+
+		if (this.config.useSelection && ((node._hc && this.config.folderLinks) || !node._hc))
+
+			str += ' onclick="javascript: ' + this.obj + '.s(' + nodeId + ');"';
+
+		str += '>';
+
+	}
+
+	else if ((!this.config.folderLinks || !node.url) && node._hc && node.pid != this.root.id)
+
+		str += '<a href="javascript: ' + this.obj + '.o(' + nodeId + ');" class="node">';
+
+	str += node.name;
+
+	if (node.url || ((!this.config.folderLinks || !node.url) && node._hc)) str += '</a>';
+
+	str += '</div>';
+
+	if (node._hc) {
+
+		str += '<div id="d' + this.obj + nodeId + '" class="clip" style="display:' + ((this.root.id == node.pid || node._io) ? 'block' : 'none') + ';">';
+
+		str += this.addNode(node);
+
+		str += '</div>';
+
+	}
+
+	this.aIndent.pop();
+
+	return str;
+
+};
+
+
+
+// Adds the empty and line icons
+
+dTree.prototype.indent = function(node, nodeId) {
+
+	var str = '';
+
+	if (this.root.id != node.pid) {
+
+		for (var n=0; n<this.aIndent.length; n++)
+
+			str += '<img src="' + ( (this.aIndent[n] == 1 && this.config.useLines) ? this.icon.line : this.icon.empty ) + '" alt="" />';
+
+		(node._ls) ? this.aIndent.push(0) : this.aIndent.push(1);
+
+		if (node._hc) {
+
+			str += '<a href="javascript: ' + this.obj + '.o(' + nodeId + ');"><img id="j' + this.obj + nodeId + '" src="';
+
+			if (!this.config.useLines) str += (node._io) ? this.icon.nlMinus : this.icon.nlPlus;
+
+			else str += ( (node._io) ? ((node._ls && this.config.useLines) ? this.icon.minusBottom : this.icon.minus) : ((node._ls && this.config.useLines) ? this.icon.plusBottom : this.icon.plus ) );
+
+			str += '" alt="" /></a>';
+
+		} else str += '<img src="' + ( (this.config.useLines) ? ((node._ls) ? this.icon.joinBottom : this.icon.join ) : this.icon.empty) + '" alt="" />';
+
+	}
+
+	return str;
+
+};
+
+
+
+// Checks if a node has any children and if it is the last sibling
+
+dTree.prototype.setCS = function(node) {
+
+	var lastId;
+
+	for (var n=0; n<this.aNodes.length; n++) {
+
+		if (this.aNodes[n].pid == node.id) node._hc = true;
+
+		if (this.aNodes[n].pid == node.pid) lastId = this.aNodes[n].id;
+
+	}
+
+	if (lastId==node.id) node._ls = true;
+
+};
+
+
+
+// Returns the selected node
+
+dTree.prototype.getSelected = function() {
+
+	var sn = this.getCookie('cs' + this.obj);
+
+	return (sn) ? sn : null;
+
+};
+
+
+
+// Highlights the selected node
+
+dTree.prototype.s = function(id) {
+
+	if (!this.config.useSelection) return;
+
+	var cn = this.aNodes[id];
+
+	if (cn._hc && !this.config.folderLinks) return;
+
+	if (this.selectedNode != id) {
+
+		if (this.selectedNode || this.selectedNode==0) {
+
+			eOld = document.getElementById("s" + this.obj + this.selectedNode);
+
+			eOld.className = "node";
+
+		}
+
+		eNew = document.getElementById("s" + this.obj + id);
+
+		eNew.className = "nodeSel";
+
+		this.selectedNode = id;
+
+		if (this.config.useCookies) this.setCookie('cs' + this.obj, cn.id);
+
+	}
+
+};
+
+
+
+// Toggle Open or close
+
+dTree.prototype.o = function(id) {
+
+	var cn = this.aNodes[id];
+
+	this.nodeStatus(!cn._io, id, cn._ls);
+
+	cn._io = !cn._io;
+
+	if (this.config.closeSameLevel) this.closeLevel(cn);
+
+	if (this.config.useCookies) this.updateCookie();
+
+};
+
+
+
+// Open or close all nodes
+
+dTree.prototype.oAll = function(status) {
+
+	for (var n=0; n<this.aNodes.length; n++) {
+
+		if (this.aNodes[n]._hc && this.aNodes[n].pid != this.root.id) {
+
+			this.nodeStatus(status, n, this.aNodes[n]._ls)
+
+			this.aNodes[n]._io = status;
+
+		}
+
+	}
+
+	if (this.config.useCookies) this.updateCookie();
+
+};
+
+
+
+// Opens the tree to a specific node
+
+dTree.prototype.openTo = function(nId, bSelect, bFirst) {
+
+	if (!bFirst) {
+
+		for (var n=0; n<this.aNodes.length; n++) {
+
+			if (this.aNodes[n].id == nId) {
+
+				nId=n;
+
+				break;
+
+			}
+
+		}
+
+	}
+
+	var cn=this.aNodes[nId];
+
+	if (cn.pid==this.root.id || !cn._p) return;
+
+	cn._io = true;
+
+	cn._is = bSelect;
+
+	if (this.completed && cn._hc) this.nodeStatus(true, cn._ai, cn._ls);
+
+	if (this.completed && bSelect) this.s(cn._ai);
+
+	else if (bSelect) this._sn=cn._ai;
+
+	this.openTo(cn._p._ai, false, true);
+
+};
+
+
+
+// Closes all nodes on the same level as certain node
+
+dTree.prototype.closeLevel = function(node) {
+
+	for (var n=0; n<this.aNodes.length; n++) {
+
+		if (this.aNodes[n].pid == node.pid && this.aNodes[n].id != node.id && this.aNodes[n]._hc) {
+
+			this.nodeStatus(false, n, this.aNodes[n]._ls);
+
+			this.aNodes[n]._io = false;
+
+			this.closeAllChildren(this.aNodes[n]);
+
+		}
+
+	}
+
+}
+
+
+
+// Closes all children of a node
+
+dTree.prototype.closeAllChildren = function(node) {
+
+	for (var n=0; n<this.aNodes.length; n++) {
+
+		if (this.aNodes[n].pid == node.id && this.aNodes[n]._hc) {
+
+			if (this.aNodes[n]._io) this.nodeStatus(false, n, this.aNodes[n]._ls);
+
+			this.aNodes[n]._io = false;
+
+			this.closeAllChildren(this.aNodes[n]);		
+
+		}
+
+	}
+
+}
+
+
+
+// Change the status of a node(open or closed)
+
+dTree.prototype.nodeStatus = function(status, id, bottom) {
+
+	eDiv	= document.getElementById('d' + this.obj + id);
+
+	eJoin	= document.getElementById('j' + this.obj + id);
+
+	if (this.config.useIcons) {
+
+		eIcon	= document.getElementById('i' + this.obj + id);
+
+		eIcon.src = (status) ? this.aNodes[id].iconOpen : this.aNodes[id].icon;
+
+	}
+
+	eJoin.src = (this.config.useLines)?
+
+	((status)?((bottom)?this.icon.minusBottom:this.icon.minus):((bottom)?this.icon.plusBottom:this.icon.plus)):
+
+	((status)?this.icon.nlMinus:this.icon.nlPlus);
+
+	eDiv.style.display = (status) ? 'block': 'none';
+
+};
+
+
+
+
+
+// [Cookie] Clears a cookie
+
+dTree.prototype.clearCookie = function() {
+
+	var now = new Date();
+
+	var yesterday = new Date(now.getTime() - 1000 * 60 * 60 * 24);
+
+	this.setCookie('co'+this.obj, 'cookieValue', yesterday);
+
+	this.setCookie('cs'+this.obj, 'cookieValue', yesterday);
+
+};
+
+
+
+// [Cookie] Sets value in a cookie
+
+dTree.prototype.setCookie = function(cookieName, cookieValue, expires, path, domain, secure) {
+
+	document.cookie =
+
+		escape(cookieName) + '=' + escape(cookieValue)
+
+		+ (expires ? '; expires=' + expires.toGMTString() : '')
+
+		+ (path ? '; path=' + path : '')
+
+		+ (domain ? '; domain=' + domain : '')
+
+		+ (secure ? '; secure' : '');
+
+};
+
+
+
+// [Cookie] Gets a value from a cookie
+
+dTree.prototype.getCookie = function(cookieName) {
+
+	var cookieValue = '';
+
+	var posName = document.cookie.indexOf(escape(cookieName) + '=');
+
+	if (posName != -1) {
+
+		var posValue = posName + (escape(cookieName) + '=').length;
+
+		var endPos = document.cookie.indexOf(';', posValue);
+
+		if (endPos != -1) cookieValue = unescape(document.cookie.substring(posValue, endPos));
+
+		else cookieValue = unescape(document.cookie.substring(posValue));
+
+	}
+
+	return (cookieValue);
+
+};
+
+
+
+// [Cookie] Returns ids of open nodes as a string
+
+dTree.prototype.updateCookie = function() {
+
+	var str = '';
+
+	for (var n=0; n<this.aNodes.length; n++) {
+
+		if (this.aNodes[n]._io && this.aNodes[n].pid != this.root.id) {
+
+			if (str) str += '.';
+
+			str += this.aNodes[n].id;
+
+		}
+
+	}
+
+	this.setCookie('co' + this.obj, str);
+
+};
+
+
+
+// [Cookie] Checks if a node id is in a cookie
+
+dTree.prototype.isOpen = function(id) {
+
+	var aOpen = this.getCookie('co' + this.obj).split('.');
+
+	for (var n=0; n<aOpen.length; n++)
+
+		if (aOpen[n] == id) return true;
+
+	return false;
+
+};
+
+
+
+// If Push and pop is not implemented by the browser
+
+if (!Array.prototype.push) {
+
+	Array.prototype.push = function array_push() {
+
+		for(var i=0;i<arguments.length;i++)
+
+			this[this.length]=arguments[i];
+
+		return this.length;
+
+	}
+
+};
+
+if (!Array.prototype.pop) {
+
+	Array.prototype.pop = function array_pop() {
+
+		lastElement = this[this.length-1];
+
+		this.length = Math.max(this.length-1,0);
+
+		return lastElement;
+
+	}
+
+};
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/hierarchy_utils.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/hierarchy_utils.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/hierarchy_utils.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,93 @@
+<?php
+/*
+ * Copyright 2004 GForge, LLC
+ *
+ * @version   $Id: hierarchy_utils.php,v 1.0 2006/10/10 15:00:00 fregnier Exp $
+ * @author Fabien Regnier fabien.regnier at sogeti.com
+ * @date 2006-10-10
+ *
+ * This file is part of GForge.
+ *
+ * GForge is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GForge 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GForge; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+ 
+ function son_box ($group_id,$name,$selected='xzxzxz') {
+	global $son;
+	if (!$son) {
+		
+		$family = get_family($group_id);
+		if($family != NULL){
+		
+		reset($family);
+			while (list($key, $val) = each($family)) {		
+			$cond .= " AND group_id != ".$val." ";
+			}
+			
+		}
+		$son=db_query("SELECT group_id,group_name,register_time FROM groups " .
+		"WHERE status='A' AND type_id=1 AND group_id != ".$group_id." " .$cond.
+		"AND group_id NOT IN (SELECT sub_project_id FROM plugin_projects_hierarchy WHERE link_type = 'shar')" );
+	
+	
+	}
+	return html_build_select_box($son,$name,$selected,false);
+}
+
+ function link_box ($group_id,$name,$selected='xzxzxz') {
+	global $link;
+	if (!$link) {
+		$link=db_query("SELECT group_id,group_name,register_time FROM groups " .
+		"WHERE  status='A' AND type_id=1 AND group_id != ".$group_id." " .
+		"AND  group_id NOT IN (SELECT sub_project_id FROM plugin_projects_hierarchy WHERE project_id = ".$group_id." )".
+		" AND group_id NOT IN (SELECT project_id FROM plugin_projects_hierarchy WHERE sub_project_id = ".$group_id." )");
+	
+	
+	}
+	return html_build_select_box($link,$name,$selected,false);
+}
+
+
+ function type_son_box () {
+ 	global $Language;
+	return "<select name='link_type' onchange=\"javascript:" .
+			"if(this.value!= 0){" .
+			"document.formson.son.disabled=false" .
+			"}" .
+			"else {" .
+			"document.formson.son.disabled=true" .
+			"}\">" .
+			"\n<option value='0' selected=\"selected\" >".$Language->getText('project_admin','link')."</option>\n" .
+			"<option value='shar'>".$Language->getText('project_admin','share')."</option>\n" .
+			"<option value='navi' >".$Language->getText('project_admin','navi')."</option>\n" .
+			"</select>";
+	}
+
+//search all the family,all ancestor 
+function get_family($group_id,$family='',$cpt=0){
+	$req = "SELECT project_id FROM plugin_projects_hierarchy WHERE sub_project_id = ".$group_id." ";
+	$res=db_query($req)or die(db_error());
+	if (!$res || db_numrows($res) < 1) {
+		//return $family;
+	}
+	else {
+		$row = db_fetch_array($res);	
+		$family[$cpt] = $row['project_id'];
+		$cpt++;
+		return get_family($row['project_id'],$family,$cpt);
+	}
+	
+	return $family;
+}
+?>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/img/base.gif
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/img/base.gif	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/img/base.gif	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,2 @@
+GIF89a  ÷  ûúüùøúiÍÿŒßÿ¾¸ÇkÎÿðïóÙÿ˜åÿFF™ôóöòòòQÁÿìëïK¾ÿ´´ÜƒƒµÞÝéÏÏÒwjŠ¯ðÿƒÛÿ”Š£óòõóòöÔÔ×mdßßàÌÌÓ­­ÇŸ³ËšÎë±°ÄÐÌׇ|˜œçÿ¶°Â¼»×|×ÿÖÖÛ»»ÖQQ™nn¡ŸŸÆ3²ÿ9µÿÑÐڍàÿl_—Œ¦V¯îÉýÿ  ¿~×ÿ éÿxÔÿk‰ØÎÉԐºÞùùúýüýÞÞßÃÃÑžèÿÒÑà´´ÕÃÃÌöõøÜÛä‚v”p„¿–äÿÂÜÊÉÝ~z·ééé{£rlÔÔåk`‡‘‡ ¦ž²âââjÎÿ_QvyÕÿ…¨^PucÊÿ½nn»ºááâ®ðÿÞÞëÀ½Ï­ðÿÓÓÓììì[[™eWz´´Éª¢¶›’©ee¥ÂúÿÈÃÐÂöeZŽ¥®Þqp¥Š‡´WÄÿƒ¥¥Ñ´óÿ“·îîîÚÚ变Ïääç§Ìèg¤æ‘¹Ð±©¼ááïbÉÿÕÔæVÃÿ¡§ÀznðîòližÜÛãšš¿³Çã_§è——ÉFF¢œ˜±g†È;¶ÿ¢ÐãŠÞÿ\•ãTÃÿÂÂ×8±þÄ¿ÍÔÔᏠ±ßÜä¾óù®®ÌO·ùq¼ô¾¾ÓÎÎÖÄÃÜ­­Âµe[‚‰¨àÿÿÿ                                                                                                                                                                                                                                                                                    !ù  £ ,       í G	¸O!;IP¬ ` ÃQa2ññ)$:˜„høp”K{aš‘Ì‘&tÅáã]æP°1À
+Ÿ!+]ä11 Á/j‰¢`%‘CSn¨p JF¬	`IÄ •£JÈpÀ špLh Ö"-m¥„M¶+ÿè™´¦E¡ ¨áØÑɝr%H@ˆDÑ•^êôYÀ%š è\[iÉ1=$má+#t’²á'*²h8#µ#/‹@”é`ÈÊA)ÁÈ•+dâPº ¶¹óç ;
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/img/cd.gif
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/img/cd.gif	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/img/cd.gif	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,3 @@
+GIF89a  ³ ``a²²ÅøöûÛÙÿž¤†ÉÉÊåäþÎÎûù×ÿõêÿææ达虙Ìÿÿÿÿÿÿ!ù   ,       œðÉg)ÖˆÉå"†#(ÇËÖ	… ’Ç0 …Ö®ã”òÌÔŽ‰! Ó‘dˆäi1!4QbzHÊ f À@( \ïP(L
+Œ®·  (iÐäó€"Ðè³ëHS	.
+m[H2E`f,IV9,X—%.s(‘˜wžmD+­sm5*+'m )¾¿¾ ;
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/img/empty.gif
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/img/empty.gif	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/img/empty.gif	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1 @@
+GIF89a  ‘     ÿÿÿ€€€ÿÿÿ!ù   ,       œ©Ëí£œ´Ú‹³Þœ ;
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/img/folder.gif
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/img/folder.gif	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/img/folder.gif	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,4 @@
+GIF89a  Õ  ûûûïïïÛ·RÌ™4äääÁÁÁ£q*···žlº‡"œjÉ–1½Š%³™gÛ·qµ‚ n˘3ÿÿº°~Å’-§uÇ”/¦¦¦¥s
+·„«yÈ•0À(ÆÆÆ®|šh¨v¬zÿÔoÿø“ëëëÿÿœÿÛuÿäÿ¶¶ÿÿÿÿÿ™                                                      !ù  . ,       ‘@—pH,È¤Ò5L @9`Y)”az@`0¤¡ØD•Àpbm»Û£ÏÑ:ÙïøÖ1Ä´þ€+C-%‰Š‹-…B-*“”•-	.-)žŸ-™
+-(¦§¨-!™
+-$¯°±-|Bg "	C +ÉÊËD &ÒÓÔRKJA ;
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/img/folderopen.gif
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/img/folderopen.gif	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/img/folderopen.gif	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,5 @@
+GIF89a  Õ  ïïï¥s
+ûûûÌ™4ÁÁÁäääšh n˘3É–1žlœjúûü···ÿÿ¥Æšðäz½Š%Ï¢&§u°~â³C*¢p
+³µ‚·„׸@Ú¿lÿë„™g÷ð‰¦¦¦âÁPÉ !ýÕp¤rÿׄº‡"£qÈ•0ÆÆƬzÿäÿÛuÿï‰ëë붶¶ÿø“Æšÿÿœÿÿ™ÿÿÿ                                 !ù  5 ,       •ÀšpH,È¤R8 (€@9 YKaz¬Ê¾_ZĤÉ`(€!‚n[­ªÔ0AƒÙïxÙ¤!Œùÿ€~!'/}3mm31%†51ˆxw21#
+ ’-žŸž"’2+ª«+5œ3,¶·¶|B§ÀÀ$
+ D/ÎÏÐE .Ö×ØRKIA ;
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/img/globe.gif
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/img/globe.gif	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/img/globe.gif	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,3 @@
+GIF89a  ÷  úûürB§ƒê<·ÿ=¢~ÍÐ>¤cÈÂÈÐ6›}ãõiÎ7œ„’¢• ®bl}3K~G¨n)M‰:x°¹ÆÏ›ÿLXoóôödr€it…g2uÙ]¯§¸Ä_iy-‚ÊE¤R~|ቢ±ÓÚßHc¿Ÿ¡X¾U£àuˆ–E›æ	9Ÿöøú>’L±ÅÛë)f‰àãæ;¶§)S²x„–
+þïñó–üîïñ%L±J¾%$‰]bÁûþüj¼g¶†Ùx¦ÜÿÛíø˜™m«¼ªî͏’mÏ>¸æÅH’ZÅ-VÃáŒa¥ä ƒÃ×rÂúq°ä…@qºêvx‰ÆG­öÂßóÈû{k]n
+œÐ$~Õl‡Éï*¨P†Çã[ev~+5SŽ}Ð~+Y2Y‘ Ñòƒ±w–¬O³¢7œ'ŠÍm'Kdž7gmèB`ÅjÂÉÑ`¿ÿ"¦ÿ>£»ÈÐhÌC³ÿàÿ‚“£&—ãðôö©¸ÑÕہÀê; uŠœERo”Èé\ÃN³é¯P¶ÎÞèS]p=£$õc<gco€Œ¬_ºÁÒèöþÿÿb¾·’t9ŠÉàùë‚ÈzµÙYÅù•×°]N6V¶¡¢Žà¶)C”pÕ—¼_³êŸÑòJ™Ìt:>cŒ[‰ªhD`ÆÜëõ‰œ¬’¬ºeÊWÁƒF†2HxYź¢ÿæè똩·ÁçùHUrŽÁå&hÀ*†™¨†QÁS|B®Øó_j{€Ä¡\˜Â¹Ûñô`²éS¸p}Ž˜þQ¶äîõ“¡¯^t‹[Á1bÀ[¬âfbßòúE™ß›ÌîŸqÌøÝ|¿êmÁ¹-F‰‹Þ¨4_ÂvÔWŠÝ»ÿÿÿ                                                                                                !ù  ß ,       ÿ ¿	H°U5l¥ªü!8°ˆ˜lÃ&‰²IR¯S¯~Kc€V(oK:‘r„é›.@ƒÅª±íDMºÈ¹rD†lz(2-N ðò±æAS˜Á5¤:ž £0#Á)£ŒAôË	ƨ ¢#Ajz´X²–ƒ2š½ñÄeÁ-¤xP“äÒ€V¬ê@"ÁCv¼Àj°Å™ =ŠSAÁcX,{ö#À1ðœ3+Ù@J{Dhs`$&¸ø$Š„Yî8¢hYñ˜3‹ՊtÂÂ.n(XA³¡-C„92óãFP4b©Ð”$‘k̍@; |±HÕ…\Ýêó Y[ TÒÈ¿¿ÿÿß ;
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/img/imgfolder.gif
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/img/imgfolder.gif	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/img/imgfolder.gif	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,7 @@
+GIF89a  æ  ïïï¥s
+žÿÿ†jÁÁÁ···ûûûÿó’ꥤ¢šh®¯¯ð¡‹ Ÿœäää©©©¥ÿÆÆƲ³µµ·ºÿÿ¥ n{nœjžlƒ~râ³C÷ð‰Ú¿l˜•Š…}‹‚ÿׄ¤r³Ï¢&ÿë„™gåß„âÁP˘3É !£u“‰Ì™4¢p
+É–1°~œš–¸º¾ølB¬zååå׸@Æš†wýÕp§u£qðäz¦¦¦ÿø“ÿäÿÛuÿï‰ëëëfŠ¦ÿÿœ¶¶¶ûúüÆšÿÿÿÿÿ™                                                                                                                                                                     !ù  I ,       Ë€I‚ƒ„……1	
+0+ †IE–—–“EŸE“EB«BE7D†,EBGBE*"/’‚(	µGG»4G3›‚.
+µ2Ê&C9¦IFÞßàÞ'$:±ÝHCéêéHF æFè=õö=CF8æ ó@
+H!…†æÌ⣡CjŒP`.É?$?2j̸ÃF	nI92D‹
+.(àA€DbÊœIÀA! ArêÜ	ÀÀ¤Ÿ… ;
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/img/join.gif
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/img/join.gif	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/img/join.gif	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1 @@
+GIF89a  € €€€ÿÿÿ!ù   ,       Œ€Ëí«žœ(Òë,ÞGùj4–bI¨¤®A ;
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/img/joinbottom.gif
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/img/joinbottom.gif	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/img/joinbottom.gif	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1 @@
+GIF89a  € €€€ÿÿÿ!ù   ,       Œ€Ëí«žœ(Òë,ÞGùjÜH–扦F ;
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/img/line.gif
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/img/line.gif	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/img/line.gif	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1 @@
+GIF89a  € €€€ÿÿÿ!ù   ,       Œ€Ëí«žœ(Òë,ÞGóí}W(Ndùœh ;
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/img/minus.gif
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/img/minus.gif	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/img/minus.gif	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1 @@
+GIF89a  ‘ ‚‚‚€€€   ÿÿÿ!ù   ,       'œ?Ëí«žœ¡Zû"ÌM3€ˆ"”e‚*šˆ:,k¼ÙuM¶ܺ»ß ;
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/img/minusbottom.gif
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/img/minusbottom.gif	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/img/minusbottom.gif	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1 @@
+GIF89a  ‘ €€€   ÿÿÿ   !ù   ,       &”/€Ëí«žœ Zû"ÌM3€ˆ”e‚*šˆ:,k¼ÙuMöçz^  ;
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/img/musicfolder.gif
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/img/musicfolder.gif	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/img/musicfolder.gif	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,10 @@
+GIF89a  æI ÿø“ï¼Wœ™¬ïïï_`«¥s
+ÿà{ûûûÌ™4Ýßö44gäääÁÁÁÿôŽ~|ÚNNšÉ–1ddÅúûüùùù···šhœjÿÔožl˘3 nÿë…šnßßߏ*Ï׸@£qÞÞÞÚ¿l™g¤rÆšcccÿë„»½ÿ‰‰‰÷ð‰µ‚·„îîîÆÆÆ¿¿¿¦¦¦§uÄÄÄžqèÛÚÉ !½Š%ðäzÈ•0âÁP¢p
+—okÿï‰þþþuml00dÅÁíÿÛuëëëÿÿœÆš¶¶¶ÿÿÿÿÿ™                                                                                                                                                                     !ù  I ,       Ö€I‚ƒ„@5>„‹„@"Œ“Ž@0.Œ9@?‹G¨*<@3„§DHHDDG7-,4ƒGD
+ƸD@¨'/ƒG Ò
+
+
+ÒD2‚EÞÞA)A		AE:(!FÝ·DãA#EHëIöD ïåAòVØÐo€½|pà@@€
+6XÈw`Ÿ2¸I…|I"B²$I&HpT±€K—%vhÀ`¡B„00³§O
+B´¨ÑO“’.
+ ;
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/img/nolines_minus.gif
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/img/nolines_minus.gif	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/img/nolines_minus.gif	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1 @@
+GIF89a  ÷ ‚‚‚€€€                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          !ù   ,       : H° Áƒ*\˜0€Ã‡ Ñ E„f´8àŸG6jœXq$F’!BdȲ¥Ë—0 ;
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/img/nolines_plus.gif
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/img/nolines_plus.gif	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/img/nolines_plus.gif	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1 @@
+GIF89a  ÷ ‚‚‚€€€                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          !ù   ,       C H° Áƒ*\˜0€Ã‡ Q࿁fpQàFƒÿ‰9àcÁKVäˆq%A“/!BdH³¦Í›8 ;
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/img/page.gif
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/img/page.gif	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/img/page.gif	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,3 @@
+GIF89a  æ  ûûûïïïøûÿíöÿÁÁÁäääýýýØëÿÀßÿþÿÿóùÿÃáÿôôõùùù•Ãkt¥Îçÿ^aU§í“ªÒzƒ°ÀÀÿÙá턛ʊ¨Ùäñÿ‘¸ê’¼ïs~°õúÿ÷÷÷£ËÍæÿºÝÿØåömw¨ejš‡¡ÒŽ¼³åŒ®ßÎÓÿöúÿgmžüýÿ}‰¶”¿òÆÆÆþþþÛç÷ip¢oz¬r|®t€²‡©ÜÑéÿÉäÿ···ëë붶¶éõÿux£áðÿÛíÿÿÿÿ                                                                                                                                                                                             !ù  A ,       £€A‚ƒ„…†‡ˆ.6‹Œ65 ‡@ 
+5†0@¡	15†'¢"5±/†(¡<<)9†,¸¹<??4¿…%*
+¹>>Ç73Ê„Î<ÐÆ7 #ÕƒºÚ?788ß‚&ÙÑäæ2éA-í7å+òöæB×£ Áƒ*@`‡Ã‡	0 €Ž‹/vBÄÑP  ;
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/img/plus.gif
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/img/plus.gif	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/img/plus.gif	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1 @@
+GIF89a  ‘ €€€   ÿÿÿ   !ù   ,       *”/€Ëí«žœ Zû"Ì'ÍhžnÁy&ª¢‰gŒªS’ÙuM:½÷¼¯+  ;
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/img/plusbottom.gif
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/img/plusbottom.gif	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/img/plusbottom.gif	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1 @@
+GIF89a  ‘ €€€   ÿÿÿ   !ù   ,       )”/€Ëí«žœ Zû"Ì'ÍhžnÁy&ª¢‰gŒªS’ÙuMúÎ÷~_  ;
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/img/question.gif
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/img/question.gif	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/img/question.gif	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,3 @@
+GIF89a  ÷¥ ãôÿþÿÿÖìÿùÿÿøÿÿÒìÿÃçÿúÿÿªÁÖÝßåÊÎØÞàæMeŠôøû³ÖõÕíÿëøÿååä±Öôëúÿèõÿ ²Æ·ÂÏÚÝäÜãêéõýž¨»/ÁÁÌîþÿíÿÿâçì.\Ñïÿ¢¸ËïýÿfõôòÉçÿ_j†çìñóûÿÎçÿïííÌëÿšµÊNy«ÞïÿpŸÎÙîÿüÿÿåúÿ*HtÁØî³Üÿ·×õÆåÿßáçe‡¯lŠ­ßôÿ×ðÿ‚“³Úæͽ¾É®½Ò›½Úe‰­Ä÷ÿñÿÿàïý|¦ß”¶×£®ÂËíÿs˜ÉÙæpÉêÿ^ÏèÿzÜðÿ7X¥7Y¦ËÏØ)Fš]Ý½ÇÐÜîÿfv”]k‰ÊåÿÝðÿÞá蚥ºKhŒÏîÿïóö)U÷øùæîö¯µÅ®¿Ï7Ehˆ—¯•²ÏLl–´Êââÿÿkˆ§]k‡ÅãüÕçøìöÿÖß鱶Äxóÿÿ\p¯ÊäÖëÿÇéÿc´nw‘¨·ÊEBcuïúÿ³¸Å¦Èùðÿÿæòÿ>Œ8Y¤Ïêÿ¨ÊçÉÎ×Ùòÿ¸Õ퓸ØÑëÿÑøÿfpŠd•éPqÀÀ×ìÛßæ0_™¶ÒÇÛ自ÊOXŽ¿äýÃÌØÐéÿïô÷Äå÷$=Œ·ÖøÉÞòÈÔßBd”ÿÿÿ                                                                                                                                                                                                                                                                                 !ù  ¥ ,       ñ K	H° Á2ƐZØ`ÓƒQ”X¨èÏ™…èü°b!©LP®x$%„ ™¤¤H9¨)
+ª(ªÓ€9šø £„  -d´Q 0K…Fü0DâS /zbÌÅD …# ^L!…ÀN8X4	Ž@4rxp *F¢tAä(.õ( ÂÃ'‡™Àñ$ÎŽ>)‰¨BŒ>R6xZbàÆVúiÁˆ(I‘° 1 !	
+H5¼±”HÓžG©tbŽ-Â`²¡ƒLš:	r`SdTàÁp‘ ¹Áx.8ŸN0  ;
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/img/trash.gif
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/img/trash.gif	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/img/trash.gif	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,3 @@
+GIF89a  ÷” ™Éïÿ¢Óÿ“Éý³ßÿÍòÿ!¦!ýýýêêê­Ùÿ¢¢¢áááÓÓÓœ­­âõÿuuuùùùûûûQ¹Q‚¿÷ééézºó­­­„¿ô‘‘‘kmmÖóÿgggÛýÿ½æÿ¯¯¯°°°®ÅÅôôôÑÑÑÐÒÒ¡¡¡öööÏÏÏ£Ôÿu}}ÑïÞ•••Ëòýµæ¿¼ÚòàøþÅéýÂÚð°ÝÿØØØìðð¼åÿÎôÿ°Þþ‡ª•Êþ~¼õŒÒÈù„•Èù„ÁøqÆq€€€“¬¼´´´ÑêýñññÀÛÛäÿÿÛùúÙûÿ™ÏùÌçÿ³ãù{{{àààÂìÏèèèððð­ÈÒÃëÿ½½½Ó÷ÿ~́»»»ããã‰ÃùÁæüÜéí¼çüÆûÚùï§ÑôÌÒÒÒÃíüòòò¿éýs¶ìs¶ðóóóŠ™™³âùŠŠŠžžžÂêÿ÷ûþ÷÷÷ŒÃõÃìÏoµï™Åè¥Ðí}ˁw„ŽÆçÿãðûsssÊÊʽäÿïï便¥êüÿ¸Üþ»ãßÛæ𡱱 ÖÎÚüÿØúÿ¨×ÿˆˆÄê߶äúqqqäääßÿÿ¯½½ÞÞÞ¥Îøèùï´àÿ²×øpppA³AÞÿÿ                                                                                                                                                                                                                                                                                                                                    !ù  ” ,       ø )	H° Á‚l õÀÑhA›ƒíx¹àj’ £2pÊTȱc̤˜Är’0h­PÄ‘•-[vañF’‘"(f	@”¨!  HÒˆŒ-H%GB•/JëIÃh `(™ãâ‡$I~n¨¸2ðÏ€·úœ5BG :
+áfB’-5$àHÒ‹B <g	•G'0àdÒ†)%jD#!Iðáp†	˜g) ¥Ãšƒ@ ˆdA/A#jЀG†;¬$Š`ˆ	
+H삧‰Ô!è¡ðâ³C ;
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/index.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/index.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/index.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,109 @@
+<?php
+
+/*
+ * projects_hierarchy plugin
+ *
+ * Daniel Perez <danielperez.arg at gmail.com>
+ *
+ * This is an example to watch things in action. You can obviously modify things and logic as you see fit
+ */
+
+require_once('pre.php');
+require_once ('plugins/projects_hierarchy/config.php');
+
+// the header that displays for the user portion of the plugin
+function projects_hierarchy_Project_Header($params) {                                                                                                                                         
+	global $DOCUMENT_ROOT,$HTML,$id,$Language;                                                                            
+	$params['toptab']='projects_hierarchy'; 
+	$params['group']=$id;
+	
+	/*                                                                                                                                                              
+		Show horizontal links                                                                                                                                   
+	*/                                                                                                                                                              
+	site_project_header($params);														
+}
+
+// the header that displays for the project portion of the plugin
+function projects_hierarchy_User_Header($params) {
+	global $DOCUMENT_ROOT,$HTML,$user_id,$Language;                                                                            
+	$params['toptab']='projects_hierarchy'; 
+	$params['user']=$user_id;
+
+	/*                                                                                                                                                              
+	 Show horizontal links                                                                                                                                   
+	 */                                                                                                                                                              
+	site_user_header($params);    
+}
+
+
+	$user = session_get_user(); // get the session user
+
+	if (!$user || !is_object($user) || $user->isError() || !$user->isActive()) {
+		exit_error("Invalid User", "Cannot Process your request for this user.");
+	}
+
+	$type = getStringFromRequest('type');
+	$id = getStringFromRequest('id');
+	$pluginname = getStringFromRequest('pluginname');
+	
+	if (!$type) {
+		exit_error("Cannot Process your request","No TYPE specified"); // you can create items in Base.tab and customize this messages
+	} elseif (!$id) { 
+		exit_error("Cannot Process your request","No ID specified");
+	} else {
+		if ($type == 'group') {
+			$group = group_get_object($id);
+			if ( !$group) {
+				exit_error("Invalid Project", "Inexistent Project");
+			}
+			if ( ! ($group->usesPlugin ( $pluginname )) ) {//check if the group has the projects_hierarchy plugin active
+				exit_error("Error", "First activate the $pluginname plugin through the Project's Admin Interface");			
+			}
+			$userperm = $group->getPermission($user);//we´ll check if the user belongs to the group (optional)
+			if ( !$userperm->IsMember()) {
+				exit_error("Access Denied", "You are not a member of this project");
+			}
+			// other perms checks here...
+			projects_hierarchy_Project_Header(array('title'=>$pluginname . ' Project Plugin!','pagename'=>"$pluginname",'sectionvals'=>array(group_getname($id))));    
+			// DO THE STUFF FOR THE PROJECT PART HERE
+			echo "We are in the Project projects_hierarchy plugin <br>";
+			echo "Greetings from planet " . $world; // $world comes from the config file in /etc
+		} elseif ($type == 'user') {
+			$realuser = user_get_object($id);// 
+			if (!($realuser) || !($realuser->usesPlugin($pluginname))) {
+				exit_error("Error", "First activate the User's $pluginname plugin through Account Manteinance Page");
+			}
+			if ( (!$user) || ($user->getID() != $id)) { // if someone else tried to access the private projects_hierarchy part of this user
+				exit_error("Access Denied", "You cannot access other user's personal $pluginname");
+			}
+			projects_hierarchy_User_Header(array('title'=>'My '.$pluginname,'pagename'=>"$pluginname",'sectionvals'=>array($realuser->getUnixName())));    
+			// DO THE STUFF FOR THE USER PART HERE
+			echo "We are in the User projects_hierarchy plugin <br>";
+			echo "Greetings from planet " . $world; // $world comes from the config file in /etc
+		} elseif ($type == 'admin') {
+			$group = group_get_object($id);
+			if ( !$group) {
+				exit_error("Invalid Project", "Inexistent Project");
+			}
+			if ( ! ($group->usesPlugin ( $pluginname )) ) {//check if the group has the projects_hierarchy plugin active
+				exit_error("Error", "First activate the $pluginname plugin through the Project's Admin Interface");			
+			}
+			$userperm = $group->getPermission($user);//we´ll check if the user belongs to the group
+			if ( !$userperm->IsMember()) {
+				exit_error("Access Denied", "You are not a member of this project");
+			}
+			//only project admin can access here
+			if ( $userperm->isAdmin() ) {
+				projects_hierarchy_Project_Header(array('title'=>$pluginname . ' Project Plugin!','pagename'=>"$pluginname",'sectionvals'=>array(group_getname($id))));    
+				// DO THE STUFF FOR THE PROJECT ADMINISTRATION PART HERE
+				echo "We are in the Project projects_hierarchy plugin <font color=\"#ff0000\">ADMINISTRATION</font> <br>";
+				echo "Greetings from planet " . $world; // $world comes from the config file in /etc
+			} else {
+				exit_error("Access Denied", "You are not a project Admin");
+			}
+		}
+	}	 
+	
+	site_project_footer(array());
+
+?>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/softwaremap.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/softwaremap.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/softwaremap.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,427 @@
+<?php
+/**
+  *
+  * SourceForge Trove Software Map
+  *
+  * SourceForge: Breaking Down the Barriers to Open Source Development
+  * Copyright 1999-2001 (c) VA Linux Systems
+  * http://sourceforge.net
+  *
+  * @version   $Id: trove_list.php,v 1.2 2005/11/28 13:29:52 uid20157 Exp $
+  *
+  */
+
+session_start();
+require_once('pre.php');    
+require_once('www/include/trove.php');
+require_once('../../../www/docman/include/doc_utils.php');
+
+if (!$sys_use_trove) {
+	exit_disabled();
+}
+
+//we check if the user has already chosen the tree
+if(isset($_GET['cat'])){
+	$_SESSION['cat'] = $_GET['cat'];
+}
+
+// assign default. 18 is 'topic'
+if (!isset($form_cat) || !$form_cat) {
+	$form_cat = $default_trove_cat;
+}
+
+$form_cat = intval($form_cat);
+
+// get info about current folder
+$res_trove_cat = db_query("
+	SELECT *
+	FROM trove_cat
+	WHERE trove_cat_id='$form_cat' ORDER BY fullname");
+
+if (db_numrows($res_trove_cat) < 1) {
+	exit_error(
+		$Language->getText('trove_list','invalid_category_title'),
+		$Language->getText('trove_list','invalid_category_text').': '.db_error()
+	);
+}
+
+$HTML->header(array('title'=>$Language->getText('trove_list','title'),'pagename'=>'softwaremap'));
+
+//rajout fab a mettre dans head
+?>
+<link rel="StyleSheet" href="dtree.css" type="text/css" />
+	<script type="text/javascript" src="dtree.js"></script>
+<?php
+//fin rajout
+
+print "<b><a href=\"./softwaremap.php?cat=c\">".$Language->getText('project_tree','cat')."</a> | <a href=\"./softwaremap.php?cat=t\">".$Language->getText('project_tree','tree')."</a></b>";
+
+echo'
+	<hr />';
+
+if($_SESSION['cat'] != 't'){
+		$row_trove_cat = db_fetch_array($res_trove_cat);
+		
+		// #####################################
+		// this section limits search and requeries if there are discrim elements
+		
+		$discrim_url = '';
+		$discrim_desc = '';
+		
+		if (isset($discrim) && $discrim) {
+			unset ($discrim_queryalias);
+			unset ($discrim_queryand);
+			unset ($discrim_url_b);
+		
+			// commas are ANDs
+			$expl_discrim = explode(',',$discrim);
+		
+			// need one link for each "get out of this limit" links
+			$discrim_url = '&discrim=';
+		
+			$lims=sizeof($expl_discrim);
+			if ($lims > 6) {
+				$lims=6;
+			}
+		
+			// one per argument	
+			for ($i=0;$i<$lims;$i++) {
+				// make sure these are all ints, no url trickery
+				$expl_discrim[$i] = intval($expl_discrim[$i]);
+		
+				// need one aliased table for everything
+		//[CB]		$discrim_queryalias .= ', trove_group_link trove_group_link_'.$i.' ';
+				$discrim_queryalias .= ', trove_agg trove_agg_'.$i.' ';
+				
+				// need additional AND entries for aliased tables
+		//[CB]		$discrim_queryand .= 'AND trove_group_link_'.$i.'.trove_cat_id='
+		//[CB]			.$expl_discrim[$i].' AND trove_group_link_'.$i.'.group_id='
+		//[CB]			.'trove_group_link.group_id ';
+				$discrim_queryand .= 'AND trove_agg_'.$i.'.trove_cat_id='
+					.$expl_discrim[$i].' AND trove_agg_'.$i.'.group_id='
+					.'trove_agg.group_id ';
+		
+				// must build query string for all urls
+				if ($i==0) {
+					$discrim_url .= $expl_discrim[$i];
+				} else {
+					$discrim_url .= ','.$expl_discrim[$i];
+				}
+				// must also do this for EACH "get out of this limit" links
+				// convoluted logic to build urls for these, but works quickly
+				for ($j=0;$j<sizeof($expl_discrim);$j++) {
+					if ($i!=$j) {
+						if (!$discrim_url_b[$j]) {
+							$discrim_url_b[$j] = '&discrim='.$expl_discrim[$i];
+						} else {
+							$discrim_url_b[$j] .= ','.$expl_discrim[$i];
+						}
+					}
+				}
+		
+			}
+		
+			// build text for top of page on what viewier is seeing
+			$discrim_desc = '<span style="color:red;font-size:smaller">'.$Language->getText('trove_list','limiting_view').':
+		</span>';
+			
+			for ($i=0;$i<sizeof($expl_discrim);$i++) {
+				$discrim_desc .= '<br />       '
+					.trove_getfullpath($expl_discrim[$i])
+					.' <a href="softwaremap.php?form_cat='.$form_cat
+					.$discrim_url_b[$i].'">['.$Language->getText('trove_list','remove_filter').']'
+					.'</a>';
+			}
+			$discrim_desc .= "<hr />\n";
+		} 
+		
+		// #######################################
+		
+		print '<p>'. (isset($discrim_desc) ? $discrim_desc : '') . '</p>';
+		
+		// ######## two column table for key on right
+		// first print all parent cats and current cat
+		print '<table width="100%" border="0" cellspacing="0" cellpadding="0">
+		<tr valign="top"><td><span style="font-family:arial,helvetica">';
+		$folders = explode(" :: ",$row_trove_cat['fullpath']);
+		$folders_ids = explode(" :: ",$row_trove_cat['fullpath_ids']);
+		$folders_len = count($folders);
+		for ($i=0;$i<$folders_len;$i++) {
+			for ($sp=0;$sp<($i*2);$sp++) {
+				print "   ";
+			}
+			echo html_image("ic/ofolder15.png",'15','13',array());
+			print "  ";
+			// no anchor for current cat
+			if ($folders_ids[$i] != $form_cat) {
+				print '<a href="softwaremap.php?form_cat='
+					.$folders_ids[$i].$discrim_url.'">';
+			} else {
+				print '<strong>';
+			}
+			print $folders[$i];
+			if ($folders_ids[$i] != $form_cat) {
+				print '</a>';
+			} else {
+				print '</strong>';
+			}
+			print "<br />\n";
+		}
+		
+		// print subcategories
+		$res_sub = db_query("
+			SELECT trove_cat.trove_cat_id AS trove_cat_id,
+				trove_cat.fullname AS fullname,
+				trove_treesums.subprojects AS subprojects
+			FROM trove_cat LEFT JOIN trove_treesums USING (trove_cat_id) 
+			WHERE (
+				trove_treesums.limit_1=0 
+				OR trove_treesums.limit_1 IS NULL
+			) AND " // need no discriminators
+			."trove_cat.parent='$form_cat'
+			ORDER BY fullname
+		", -1, 0, SYS_DB_TROVE);
+		echo db_error();
+		
+		while ($row_sub = db_fetch_array($res_sub)) {
+			for ($sp=0;$sp<($folders_len*2);$sp++) {
+				print "   ";
+			}
+			print ('<a href="softwaremap.php?form_cat='.$row_sub['trove_cat_id'].$discrim_url.'">');
+			echo html_image("ic/cfolder15.png",'15','13',array());
+			print ('  '.$row_sub['fullname'].'</a> <em>('.
+				$Language->getText('trove_list','projects',array($row_sub['subprojects']?$row_sub['subprojects']:'0'))
+				.')</em><br />');
+				
+		}
+		// ########### right column: root level
+		print '</span></td><td><span style="font-family:arial,helvetica">';
+		// here we print list of root level categories, and use open folder for current
+		$res_rootcat = db_query("
+			SELECT trove_cat_id,fullname
+			FROM trove_cat
+			WHERE parent=0
+			AND trove_cat_id!=0
+			ORDER BY fullname");
+		echo db_error();
+		
+		print $Language->getText('trove_list','browse_by').':';
+		while ($row_rootcat = db_fetch_array($res_rootcat)) {
+			// print open folder if current, otherwise closed
+			// also make anchor if not current
+			print ('<br />');
+			if (($row_rootcat['trove_cat_id'] == $row_trove_cat['root_parent'])
+				|| ($row_rootcat['trove_cat_id'] == $row_trove_cat['trove_cat_id'])) {
+				echo html_image('ic/ofolder15.png','15','13',array());
+				print ('  <strong>'.$row_rootcat['fullname']."</strong>\n");
+			} else {
+				print ('<a href="softwaremap.php?form_cat='
+					.$row_rootcat['trove_cat_id'].$discrim_url.'">');
+				echo html_image('ic/cfolder15.png','15','13',array());
+				print ('  '.$row_rootcat['fullname']."\n");
+				print ('</a>');
+			}
+		}
+		print '</span></td></tr></table>';
+		?>
+		<hr />
+		<?php
+		// one listing for each project
+		
+		if(!isset($discrim_queryalias)) {
+			$discrim_queryalias = '';
+		}
+		
+		if(!isset($discrim_queryand)) {
+			$discrim_queryand = '';
+		}
+		
+		$res_grp = db_query("
+			SELECT * 
+			FROM trove_agg
+			$discrim_queryalias
+			WHERE trove_agg.trove_cat_id='$form_cat'
+			$discrim_queryand
+			ORDER BY trove_agg.trove_cat_id ASC, trove_agg.ranking ASC
+		", $TROVE_HARDQUERYLIMIT, 0, SYS_DB_TROVE);
+		echo db_error();
+		$querytotalcount = db_numrows($res_grp);
+			
+		// #################################################################
+		// limit/offset display
+		
+		// no funny stuff with get vars
+		
+		if (!isset($page) || !is_numeric($page)) {
+			$page = 1;
+		}
+		
+		// store this as a var so it can be printed later as well
+		$html_limit = '<span style="text-align:center;font-size:smaller">';
+		if ($querytotalcount == $TROVE_HARDQUERYLIMIT){
+			$html_limit .= 'More than ';
+			$html_limit .= $Language->getText('trove_list','more_than',array($querytotalcount));
+			
+			}
+		$html_limit .= $Language->getText('trove_list','number_of_projects',array($querytotalcount));
+		
+		// only display pages stuff if there is more to display
+		if ($querytotalcount > $TROVE_BROWSELIMIT) {
+			$html_limit .= ' Displaying '.$TROVE_BROWSELIMIT.' per page. Projects sorted by activity ranking.<br />';
+		
+			// display all the numbers
+			for ($i=1;$i<=ceil($querytotalcount/$TROVE_BROWSELIMIT);$i++) {
+				$html_limit .= ' ';
+				if ($page != $i) {
+					$html_limit .= '<a href="softwaremap.php?form_cat='.$form_cat;
+					$html_limit .= $discrim_url.'&page='.$i;
+					$html_limit .= '">';
+				} else $html_limit .= '<strong>';
+				$html_limit .= '<'.$i.'>';
+				if ($page != $i) {
+					$html_limit .= '</a>';
+				} else $html_limit .= '</strong>';
+				$html_limit .= ' ';
+			}
+		}
+		
+		$html_limit .= '</span>';
+		
+		print $html_limit."<hr />\n";
+		
+		// #################################################################
+		// print actual project listings
+		// note that the for loop starts at 1, not 0
+		for ($i_proj=1;$i_proj<=$querytotalcount;$i_proj++) { 
+			$row_grp = db_fetch_array($res_grp);
+		
+			// check to see if row is in page range
+			if (($i_proj > (($page-1)*$TROVE_BROWSELIMIT)) && ($i_proj <= ($page*$TROVE_BROWSELIMIT))) {
+				$viewthisrow = 1;
+			} else {
+				$viewthisrow = 0;
+			}	
+		
+			if ($row_grp && $viewthisrow) {
+				print '<table border="0" cellpadding="0" width="100%"><tr valign="top"><td colspan="2"><span style="font-family:arial,helvetica">';
+				print "$i_proj. <a href=\"/projects/". strtolower($row_grp['unix_group_name']) ."/\"><strong>"
+					.htmlspecialchars($row_grp['group_name'])."</strong></a> ";
+				if ($row_grp['short_description']) {
+					print "- " . htmlspecialchars($row_grp['short_description']);
+				}
+		
+				print '<br /> ';
+				// extra description
+				print '</span></td></tr><tr valign="top"><td><span style="font-family:arial,helvetica">';
+				// list all trove categories
+				print trove_getcatlisting($row_grp['group_id'],1,0);
+		
+				print '</span></td>'."\n".'<td align="right"><span style="font-family:arial,helvetica">'; // now the right side of the display
+				print 'Activity Percentile: <strong>'. number_format($row_grp['percentile'],2) .'</strong>';
+				print '<br />Activity Ranking: <strong>'. number_format($row_grp['ranking'],2) .'</strong>';
+				print '<br />Register Date: <strong>'.date($sys_datefmt,$row_grp['register_time']).'</strong>';
+				print '</span></td></tr>';
+		/*
+		                if ($row_grp['jobs_count']) {
+		                	print '<tr><td colspan="2" align="center">'
+		                              .'<a href="/people/?group_id='.$row_grp['group_id'].'">[This project needs help]</a></td></td>';
+		                }
+		*/
+		                print '</table>';
+				print '<hr />';
+			} // end if for row and range chacking
+		}
+		
+		// print bottom navigation if there are more projects to display
+		if ($querytotalcount > $TROVE_BROWSELIMIT) {
+			print $html_limit;
+		}
+		
+		
+		// print '<p><FONT size="-1">This listing was produced by the following query: '
+		//	.$query_projlist.'</FONT>';
+}
+else {
+		function build_tree() {
+			global $project_name ;
+			$query = "select p1.group_id as father_id,p1.unix_group_name as father_unix_name,p1.group_name as father_name,p2.group_id as son_id,p2.unix_group_name as son_unix_name,p2.group_name as son_name from groups as p1,groups as p2,plugin_projects_hierarchy where p1.group_id=plugin_projects_hierarchy.project_id and p2.group_id=plugin_projects_hierarchy.sub_project_id and plugin_projects_hierarchy.activated='t' AND plugin_projects_hierarchy.link_type='shar'";
+			$res = db_query($query);
+			echo db_error();
+			// construction du tableau associatif
+			// key = name of the father
+			// value = list of sons
+			while ($row = db_fetch_array($res)) {
+				//$tree[$row['father_name']][] = $row['son_name'];
+				$tree[$row['father_id']][] = $row['son_id'];
+				//get the unix name of the project 
+				$project_name[$row['father_id']][0] = $row['father_name'];
+				$project_name[$row['son_id']][0] = $row['son_name'];
+				$project_name[$row['father_id']][1] = $row['father_unix_name'];
+				$project_name[$row['son_id']][1] = $row['son_unix_name'];
+			}
+			return $tree;
+		}
+		
+		function aff_tree($tree, $lvl) {
+			global $project_name ;
+			global $Language ;
+			
+			echo "<br/>";
+			$arbre = "" ;
+			$cpt_pere = 0 ;
+			
+			while (list($key, $sons) = each($tree)) {
+				//echo $key . "<br/>";
+				//we build a array with id of father and son.
+				//If no father --> 0
+				if(!$arbre[$key] != 0){ 
+				$arbre[$key] = 0 ;
+				}
+				$cpt_pere = $key;
+				foreach ($sons as $son) {
+					//echo " " . $son . "<br/>";
+					$arbre[$son] = $cpt_pere; 
+				}
+				
+			}
+			
+			echo '<table ><tr><td>';
+			
+			?>
+			<script type="text/javascript">
+				<!--
+			//add files dtress.css, dtree.js et du dossier img
+				d = new dTree('d');	
+				d.add(0,-1,'<?php echo $Language->getText('project_tree','tree_project');?>');
+				<?
+				reset($arbre);
+				//construction automatique de l'arbre format : (num_fils, num_pere,nom,nom_unix)
+				while (list($key2, $sons2) = each($arbre)) {
+				print "d.add(".$key2.",".$sons2.",'".$project_name[$key2][0]."','/projects/".$project_name[$key2][1]."');\n";
+				}
+				?>
+		
+				document.write(d);
+		
+				
+			</script>
+			<?php
+			echo '</td></tr></table>';
+		}
+		
+		/*function aff_node($node, $lvl) {
+			for ($i = 0; $i < $lvl; ++$i) {
+				echo " ";
+			}
+			echo $node . "<br/>";
+		}*/
+		
+		$tree = build_tree();
+		aff_tree($tree, 0);
+
+}
+docman_display_documents($nested_groups,$df,$is_editor);
+
+$HTML->footer(array());
+
+?>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/wait_son.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/wait_son.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/projects_hierarchy/www/wait_son.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,45 @@
+<?php
+/**
+ * Role Editing Page
+ *
+ * Copyright 2004 (c) GForge LLC
+ *
+ * @version   $Id: wait_son.php,v 1.0 2006/10/10 15:00:00 fregnier Exp $
+ * @author Fabien Regnier fabien.regnier at sogeti.com
+ * @date 2006-10-10
+ *
+ * This file is part of GForge.
+ *
+ * GForge is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GForge 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GForge; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+require_once('pre.php');
+session_require(array('group'=>$group_id,'admin_flags'=>'A'));
+//update the link when the son allow the father
+$sql = "UPDATE plugin_projects_hierarchy SET activated = true WHERE project_id  = '".$_GET['group_id']."' AND sub_project_id = '".$_GET['sub_group_id']."'";
+//print "<br>".$sql;
+db_begin();
+$test = db_query($sql) or die(db_error());
+db_commit();
+//plugin webcal
+$params[0] =  $_GET['sub_group_id'] ;
+$params[1] =  $_GET['group_id'] ;
+plugin_hook('add_cal_link_father',$params);
+
+?>
+<script>
+//back to the administration (son) 
+window.location.href = "/project/admin/index.php?group_id=<?php print $_GET['sub_group_id'] ?>";
+</script>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/quota_management/INSTALL
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/quota_management/INSTALL	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/quota_management/INSTALL	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,5 @@
+edit cron
+
+0 * * * * root [ -x /usr/share/gforge/plugins/quota_management/cronjobs/quota_update.pl ] && /usr/share/gforge/plugins/quota_management/cronjobs/quota_update.pl > /dev/null 2>&1
+
+

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/quota_management/common/languages/Base.tab
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/quota_management/common/languages/Base.tab	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/quota_management/common/languages/Base.tab	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,65 @@
+#/**
+#  *
+#  * quota_management message catalog (English)
+#  *
+#  * GForge: Breaking Down the Barriers to Open Source Development
+#  * Copyright 1999-2001 (c) VA Linux Systems
+#  *                2005 (c) Daniel Pérez <danielperez.arg at gmail.com>
+#  * http://sourceforge.net
+#  * Here you can add your own language customizations
+#  *
+#  *
+#  */
+user_home	view_quota_management	View Personal quota_management
+project_admin	quota_management	View the quota_management Administration
+admin_quotas	quotas_title	Ressources usage and quota
+admin_quotas	quotas_admin_title	Quota Manager Admin
+admin_quotas	projects_space_label	Projects ressources use
+admin_quotas	projects_space_modif	Projects disk quota
+admin_quotas	users_space_label	Users disk use
+admin_quotas	id	id
+admin_quotas	mbytes	Mb
+admin_quotas	name	name
+admin_quotas	database	database
+admin_quotas	disk	disk
+admin_quotas	project	project
+admin_quotas	project_expl	Ftp, Home
+admin_quotas	disk_scm	scm
+admin_quotas	disk_scm_expl	Cvs, Svn
+admin_quotas	disk_other	others
+admin_quotas	disk_other_expl	Download - without quota control
+admin_quotas	total	total
+admin_quotas	quota_hard_name	disk quota hard
+admin_quotas	quota_soft_name	disk quota soft
+admin_quotas	modify_button	Modify
+admin_quotas	quota_val_invalid	Input error : Hard quota must be greater than soft quota
+admin_quotas	quota_val_update_success	Successfully updated quota
+project_admin_utils	quotas	Quota
+project_admin_quotas	title	Project quota manager
+project_admin_quotas	documents_title	Documents
+project_admin_quotas	search_engine_title	Documents search engine
+project_admin_quotas	news_title	News
+project_admin_quotas	forums_title	Forums
+project_admin_quotas	table_head_name	quota type
+project_admin_quotas	table_head_nb	quantity
+project_admin_quotas	table_head_size	size
+project_admin_quotas	table_quota_size	quota
+project_admin_quotas	size_metric	Mb
+project_admin_quotas	total_label	Total
+project_admin_quotas	upload_title	Download project directory
+project_admin_quotas	home_title	Home project directory
+project_admin_quotas	ftp_title	Ftp project directory
+project_admin_quotas	cvs_title	CVS project directory
+project_admin_quotas	svn_title	Subversion project directory
+project_admin_quotas	database_space_label	Database
+project_admin_quotas	disk_space_label	Disk space
+project_admin_quotas	quota_space_label	Quota disk management
+project_admin_quotas	quota_settings_label	Quota settings
+project_admin_quotas	quota_soft_label	Quota soft
+project_admin_quotas	quota_hard_label	Quota hard
+project_admin_quotas	quota_group1_label	Home, Ftp
+project_admin_quotas	quota_groupscm_label	Cvs, Svn
+project_admin_quotas	quota_exceed	Quota exceeded
+project_admin_quotas	with_ftp_home	With ftp and home quota control
+project_admin_quotas	with_scm	With cvs and svn quota control
+project_admin_quotas	without	Without quota control

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/quota_management/common/quota_management-init.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/quota_management/common/quota_management-init.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/quota_management/common/quota_management-init.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,33 @@
+<?php
+
+/**
+ *
+ * This file is part of GForge.
+ *
+ * GForge is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GForge 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GForge; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+ */
+
+require_once ('quota_managementPlugin.class') ;
+
+$quota_managementPluginObject = new quota_managementPlugin ;
+
+register_plugin ($quota_managementPluginObject) ;
+
+// Local Variables:
+// mode: php
+// c-file-style: "bsd"
+// End:
+
+?>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/quota_management/common/quota_managementPlugin.class
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/quota_management/common/quota_managementPlugin.class	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/quota_management/common/quota_managementPlugin.class	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,160 @@
+<?php
+
+/**
+ * quota_managementPlugin Class
+ *
+ *
+ * This file is part of GForge.
+ *
+ * GForge is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GForge 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GForge; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+ */
+
+class quota_managementPlugin extends Plugin {
+	function quota_managementPlugin () {
+		$this->Plugin() ;
+		$this->name = "quota_management" ;
+		$this->text = "quota_management!" ; // To show in the tabs, use...
+		$this->hooks[] = "user_personal_links";//to make a link to the user´s personal part of the plugin
+		$this->hooks[] = "usermenu" ;
+		$this->hooks[] = "groupmenu" ;	// To put into the project tabs
+		$this->hooks[] = "groupisactivecheckbox" ; // The "use ..." checkbox in editgroupinfo
+		$this->hooks[] = "groupisactivecheckboxpost" ; //
+		$this->hooks[] = "userisactivecheckbox" ; // The "use ..." checkbox in user account
+		$this->hooks[] = "userisactivecheckboxpost" ; //
+		$this->hooks[] = "project_admin_plugins"; // to show up in the admin page fro group
+		$this->hooks[] = "quota_admin_tab"; // to show in admin
+		$this->hooks[] = "quota_label_project_admin"; // to show in admin project
+		$this->hooks[] = "quota_link_project_admin"; // to show in admin project
+	}
+
+	function CallHook ($hookname, $params) {
+		global $use_quota_managementplugin,$G_SESSION,$HTML,$Language;
+		$group_id=$params['group'];
+		if ($hookname == "usermenu") {
+			$text = $this->text; // this is what shows in the tab
+			if ($G_SESSION->usesPlugin("quota_management")) {
+				$param = '?type=user&id=' . $G_SESSION->getId() . "&pluginname=" . $this->name; // we indicate the part we´re calling is the user one
+				echo ' | ' . $HTML->PrintSubMenu (array ($text),
+						  array ('/plugins/quota_management/index.php' . $param ));				
+			}
+		} elseif ($hookname == "groupmenu") {
+			$project = &group_get_object($group_id);
+			if (!$project || !is_object($project)) {
+				return;
+			}
+			if ($project->isError()) {
+				return;
+			}
+			if (!$project->isProject()) {
+				return;
+			}
+			if ( $project->usesPlugin ( $this->name ) ) {
+				$params['TITLES'][]=$this->text;
+				$params['DIRS'][]='/plugins/quota_management/index.php?type=group&id=' . $group_id . "&pluginname=" . $this->name; // we indicate the part we´re calling is the project one
+			} else {
+			//	$params['TITLES'][]=$this->text." is [Off]";
+			}	
+			(($params['toptab'] == $this->name) ? $params['selected']=(count($params['TITLES'])-1) : '' );
+		} elseif ($hookname == "groupisactivecheckbox") {
+			//Check if the group is active
+		} elseif ($hookname == "groupisactivecheckboxpost") {
+			// this code actually activates/deactivates the plugin after the form was submitted in the project edit public info page
+			$group = &group_get_object($group_id);
+			$use_quota_managementplugin = getStringFromRequest('use_quota_managementplugin');
+			if ( $use_quota_managementplugin == 1 ) {
+				$group->setPluginUse ( $this->name );
+			} else {
+				$group->setPluginUse ( $this->name, false );
+			}
+		} elseif ($hookname == "userisactivecheckbox") {
+			//check if user is active
+			// this code creates the checkbox in the user account manteinance page to activate/deactivate the plugin
+			$user = $params['user'];
+			echo "<tr>";
+			echo "<td>";
+			echo ' <input type="CHECKBOX" name="use_quota_managementplugin" value="1" ';
+			// CHECKED OR UNCHECKED?
+			if ( $user->usesPlugin ( $this->name ) ) {
+				echo "CHECKED";
+ 			}
+			echo ">    Use ".$this->text." Plugin";
+			echo "</td>";
+			echo "</tr>";
+		} elseif ($hookname == "userisactivecheckboxpost") {
+			// this code actually activates/deactivates the plugin after the form was submitted in the user account manteinance page
+			$user = $params['user'];
+			$use_quota_managementplugin = getStringFromRequest('use_quota_managementplugin');
+			if ( $use_quota_managementplugin == 1 ) {
+				$user->setPluginUse ( $this->name );
+			} else {
+				$user->setPluginUse ( $this->name, false );
+			}
+			echo "<tr>";
+			echo "<td>";
+			echo ' <input type="CHECKBOX" name="use_quota_managementplugin" value="1" ';
+			// CHECKED OR UNCHECKED?
+			if ( $user->usesPlugin ( $this->name ) ) {
+				echo "CHECKED";
+			}
+			echo ">    Use ".$this->text." Plugin";
+			echo "</td>";
+			echo "</tr>";
+		} elseif ($hookname == "user_personal_links") {
+			global $Language;
+			// this displays the link in the user´s profile page to it´s personal quota_management (if you want other sto access it, youll have to change the permissions in the index.php
+			$userid = $params['user_id'];
+			$user = user_get_object($userid);
+			$text = $params['text'];
+			//check if the user has the plugin activated
+			if ($user->usesPlugin($this->name)) {
+				echo '	<p>
+					<a href="/plugins/quota_management/index.php?id=' . $userid . '&type=user&pluginname=' . $this->name . '">' . $Language->getText('user_home','view_quota_management') .'</a></p>';
+			}
+		} elseif ($hookname == "project_admin_plugins") {
+			global $Language;
+			// this displays the link in the project admin options page to it´s  quota_management administration
+			$group_id = $params['group_id'];
+			$group = &group_get_object($group_id);
+			if ( $group->usesPlugin ( $this->name ) ) {
+				echo '<a href="/plugins/quota_management/index.php?id=' . $group->getID() . '&type=admin&pluginname=' . $this->name . '">' . $Language->getText('project_admin','quota_management') . '</a><br />';
+			}
+		}												    
+		elseif ($hookname == "blahblahblah") {
+			// ...
+		} 
+		elseif ($hookname == "quota_admin_tab") {
+			// www/admin/index.php line 167
+			// ...
+			?>
+			 <li><a href="/plugins/quota_management/quota.php"><?php echo $Language->getText('admin_quotas','quotas_title'); ?></a></li>
+			<?php
+		} 
+		elseif ($hookname == "quota_label_project_admin") {
+			// www/project/admin/project_admin_utils.php line 80
+			$labels[] = $Language->getText('project_admin_utils','quotas');
+		} 
+		elseif ($hookname == "quota_link_project_admin") {
+			// www/project/admin/project_admin_utils.php line 99
+			 $links[] = '/plugins/quota_management/quota.php?group_id='.$group_id;
+		}
+	}
+}
+
+// Local Variables:
+// mode: php
+// c-file-style: "bsd"
+// End:
+
+?>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/quota_management/cronjobs/quota_update.pl
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/quota_management/cronjobs/quota_update.pl	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/quota_management/cronjobs/quota_update.pl	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,64 @@
+#!/usr/bin/perl
+#
+# **
+# * Quota management support.
+# *
+# * Copyright 2005 (c) Sogeti-Transiciel Technologies
+# *
+# * @author Olivier Fourdan ofourdan at mail.transiciel.com
+# * @date 2005-11-21
+# *
+# * This file is released under the GNU GPL license.
+# *
+# **
+
+use DBI;
+use Quota;
+
+require("/usr/lib/gforge/lib/include.pl");
+
+my $BLOCK_SIZE=$ENV{'BLOCK_SIZE'} || 1024;
+
+sub set_quota
+{
+    my ($gid, $group_name, $quota_soft, $quota_hard) = @_;
+    my $dev = Quota::getqcarg ($grpdir_prefix);
+    my ($bc,$bs,$bh,$bt, $ic,$is,$ih,$it) = Quota::query ($dev, $gid, 1);
+
+    print  "Setting Quota for group \"$group_name\" ($gid) on device \"$dev\":\n";
+    printf "  - Current usage is %i blocks (%.2f Mb).\n", $bc, $bc / $BLOCK_SIZE;
+    print  "  - Current limits: $bs blocks soft, $bh blocks hard.\n";
+    Quota::setqlim ($dev, $gid, $quota_soft, $quota_hard, 0, 0, 0, 1);
+    Quota::sync ($dev);
+    ($bc,$bs,$bh,$bt, $ic,$is,$ih,$it) = Quota::query ($dev, $gid, 1);
+    print  "  - New limits: $bs blocks soft, $bh blocks hard.\n";
+}
+
+sub update_quota
+{
+    $sql = "SELECT unix_group_name, quota_soft, quota_hard FROM groups";
+    $res = $dbh->prepare($sql);
+    $res->execute();
+
+    while ( my ($group, $quota_soft, $quota_hard) = $res->fetchrow())
+    {
+        my $scm_group = "scm_" . $group ;
+        my $gid = getgrnam($group);
+        if ($gid)
+        {
+            &set_quota ($gid, $group, $quota_soft, $quota_hard);
+        }
+
+        # Also set limits for the scm group, as it's a different one....
+        $gid = getgrnam($scm_group);
+        if ($gid)
+        {
+            &set_quota ($gid, $scm_group, $quota_soft, $quota_hard);
+        }
+
+    }
+}
+
+### Main ###
+&db_connect;
+&update_quota;
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/quota_management/db/quota_management-init.sql
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/quota_management/db/quota_management-init.sql	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/quota_management/db/quota_management-init.sql	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,17 @@
+-- **
+-- * Quota management support.
+-- *
+-- * Copyright 2005 (c) Sogeti-Transiciel Technologies
+-- *
+-- * @author Olivier Fourdan ofourdan at mail.transiciel.com
+-- * @date 2005-11-15
+-- *
+-- * This file is released under the GNU GPL license.
+-- *
+-- **
+ALTER TABLE groups ADD COLUMN quota_soft int;
+ALTER TABLE groups ALTER COLUMN quota_soft SET DEFAULT 0;
+ALTER TABLE groups ADD COLUMN quota_hard int;
+ALTER TABLE groups ALTER COLUMN quota_hard SET DEFAULT 0;
+UPDATE groups SET quota_soft=0;
+UPDATE groups SET quota_hard=0;
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/quota_management/www/index.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/quota_management/www/index.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/quota_management/www/index.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,107 @@
+<?php
+
+/*
+ * quota_management plugin
+ *
+ * Daniel Perez <danielperez.arg at gmail.com>
+ *
+ * This is an example to watch things in action. You can obviously modify things and logic as you see fit
+ */
+
+require_once('pre.php');
+require_once ('plugins/quota_management/config.php');
+
+// the header that displays for the user portion of the plugin
+function quota_management_Project_Header($params) {                                                                                                                                         
+	global $DOCUMENT_ROOT,$HTML,$id,$Language;                                                                            
+	$params['toptab']='quota_management'; 
+	$params['group']=$id;
+	/*                                                                                                                                                              
+		Show horizontal links                                                                                                                                   
+	*/                                                                                                                                                              
+	site_project_header($params);														
+}
+
+// the header that displays for the project portion of the plugin
+function quota_management_User_Header($params) {
+	global $DOCUMENT_ROOT,$HTML,$user_id,$Language;                                                                            
+	$params['toptab']='quota_management'; 
+	$params['user']=$user_id;
+	/*                                                                                                                                                              
+	 Show horizontal links                                                                                                                                   
+	 */                                                                                                                                                              
+	site_user_header($params);    
+}
+
+
+	$user = session_get_user(); // get the session user
+
+	if (!$user || !is_object($user) || $user->isError() || !$user->isActive()) {
+		exit_error("Invalid User", "Cannot Process your request for this user.");
+	}
+
+	$type = getStringFromRequest('type');
+	$id = getStringFromRequest('id');
+	$pluginname = getStringFromRequest('pluginname');
+	
+	if (!$type) {
+		exit_error("Cannot Process your request","No TYPE specified"); // you can create items in Base.tab and customize this messages
+	} elseif (!$id) {
+		exit_error("Cannot Process your request","No ID specified");
+	} else {
+		if ($type == 'group') {
+			$group = group_get_object($id);
+			if ( !$group) {
+				exit_error("Invalid Project", "Inexistent Project");
+			}
+			if ( ! ($group->usesPlugin ( $pluginname )) ) {//check if the group has the quota_management plugin active
+				exit_error("Error", "First activate the $pluginname plugin through the Project's Admin Interface");			
+			}
+			$userperm = $group->getPermission($user);//we´ll check if the user belongs to the group (optional)
+			if ( !$userperm->IsMember()) {
+				exit_error("Access Denied", "You are not a member of this project");
+			}
+			// other perms checks here...
+			quota_management_Project_Header(array('title'=>$pluginname . ' Project Plugin!','pagename'=>"$pluginname",'sectionvals'=>array(group_getname($id))));    
+			// DO THE STUFF FOR THE PROJECT PART HERE
+			echo "We are in the Project quota_management plugin <br>";
+			echo "Greetings from planet " . $world; // $world comes from the config file in /etc
+		} elseif ($type == 'user') {
+			$realuser = user_get_object($id);// 
+			if (!($realuser) || !($realuser->usesPlugin($pluginname))) {
+				exit_error("Error", "First activate the User's $pluginname plugin through Account Manteinance Page");
+			}
+			if ( (!$user) || ($user->getID() != $id)) { // if someone else tried to access the private quota_management part of this user
+				exit_error("Access Denied", "You cannot access other user's personal $pluginname");
+			}
+			quota_management_User_Header(array('title'=>'My '.$pluginname,'pagename'=>"$pluginname",'sectionvals'=>array($realuser->getUnixName())));    
+			// DO THE STUFF FOR THE USER PART HERE
+			echo "We are in the User quota_management plugin <br>";
+			echo "Greetings from planet " . $world; // $world comes from the config file in /etc
+		} elseif ($type == 'admin') {
+			$group = group_get_object($id);
+			if ( !$group) {
+				exit_error("Invalid Project", "Inexistent Project");
+			}
+			if ( ! ($group->usesPlugin ( $pluginname )) ) {//check if the group has the quota_management plugin active
+				exit_error("Error", "First activate the $pluginname plugin through the Project's Admin Interface");			
+			}
+			$userperm = $group->getPermission($user);//we´ll check if the user belongs to the group
+			if ( !$userperm->IsMember()) {
+				exit_error("Access Denied", "You are not a member of this project");
+			}
+			//only project admin can access here
+			if ( $userperm->isAdmin() ) {
+				quota_management_Project_Header(array('title'=>$pluginname . ' Project Plugin!','pagename'=>"$pluginname",'sectionvals'=>array(group_getname($id))));    
+				// DO THE STUFF FOR THE PROJECT ADMINISTRATION PART HERE
+				echo "We are in the Project quota_management plugin <font color=\"#ff0000\">ADMINISTRATION</font> <br>";
+				echo "Greetings from planet " . $world; // $world comes from the config file in /etc
+			} else {
+				exit_error("Access Denied", "You are not a project Admin");
+			}
+		}
+	}	 
+	
+	site_project_footer(array());
+
+?>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/quota_management/www/quota.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/quota_management/www/quota.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/quota_management/www/quota.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,448 @@
+<?php
+/**
+ * Project Admin page to manage quotas disk and database
+ *
+ * 
+ * Fabio Bertagnin November 2005
+ *
+ * @version   $Id: 08_IMPROVQUOTA_90_quota_management.dpatch,v 1.1 2006/01/11 17:02:45 fabio Exp $
+ *
+ * This file is part of GForge.
+ *
+ * GForge is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GForge 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GForge; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+
+require_once('pre.php');
+require_once('www/admin/admin_utils.php');
+
+$_quota_block_size = 1024;
+$_quota_block_size = trim(shell_exec("echo $BLOCK_SIZE")) + 0;
+if ($_quota_block_size == 0) $_quota_block_size = 1024;
+
+site_admin_header(array('title'=>$Language->getText('admin_index','title')));
+?>
+<h4>
+	<?php echo $Language->getText('admin_quotas','quotas_title'); ?>
+	    
+	<a href="quota_admin.php">Admin</a>
+</h4>
+<?php
+// stock projects infos in array
+$quotas = array();
+
+// all projects list
+$SQL = "SELECT group_id, group_name, unix_group_name, quota_soft, quota_hard FROM groups ORDER BY group_id ";
+$res_db = db_query($SQL);
+if (db_numrows($res_db) > 0) 
+{
+	while($e = db_fetch_array($res_db))
+	{
+		$quotas["$e[group_id]"]["group_id"] = $e["group_id"];
+		$quotas["$e[group_id]"]["name"] = $e["group_name"];
+		$quotas["$e[group_id]"]["unix_name"] = $e["unix_group_name"];
+		$quotas["$e[group_id]"]["database_size"] = 0;
+		$quotas["$e[group_id]"]["disk_size_other"] = 0;
+		$quotas["$e[group_id]"]["disk_size_1"] = 0;
+		$quotas["$e[group_id]"]["disk_size_scm"] = 0;
+		$quotas["$e[group_id]"]["quota_hard"] = $e["quota_hard"] * $_quota_block_size;
+		$quotas["$e[group_id]"]["quota_soft"] = $e["quota_soft"] * $_quota_block_size;
+	}
+}
+
+// documents database size
+$SQL = "SELECT group_id, SUM(octet_length(data)) as size, SUM(octet_length(data_words)) as size1 ";
+$SQL .= "FROM doc_data ";
+$SQL .= "GROUP BY group_id ";
+$res_db = db_query($SQL);
+if (db_numrows($res_db) > 0) 
+{
+	while($e = db_fetch_array($res_db))
+	{
+		$q = array();
+		print_debug("doc grp=$e[group_id] size=$e[size]");
+		$quotas["$e[group_id]"]["database_size"] += $e["size"];
+		$quotas["$e[group_id]"]["database_size"] += $e["size1"];
+	}
+}
+
+// news database size
+$SQL = "SELECT group_id, SUM(octet_length(summary) + octet_length(details)) as size \n";
+$SQL .= "FROM news_bytes \n";
+$SQL .= "GROUP BY group_id \n";
+$res_db = db_query($SQL);
+if (db_numrows($res_db) > 0) 
+{
+	while($e = db_fetch_array($res_db))
+	{
+		print_debug("news grp=$e[group_id] size=$e[size]");
+		$quotas["$e[group_id]"]["database_size"] += $e["size"];
+	}
+}
+
+// forums database size
+$SQL = "SELECT forum_group_list.group_id as group_id, SUM(octet_length(subject)+octet_length(body)) as size \n"; 
+$SQL .= "FROM forum \n";
+$SQL .= "INNER JOIN forum_group_list \n";
+$SQL .= "ON forum.group_forum_id = forum_group_list.group_forum_id \n";
+$SQL .= "GROUP BY group_id \n";
+$res_db = db_query($SQL);
+if (db_numrows($res_db) > 0) 
+{
+	while($e = db_fetch_array($res_db))
+	{
+		print_debug("forum grp=$e[group_id] size=$e[size]");
+		$quotas["$e[group_id]"]["database_size"] += convert_bytes_to_mega($e["size"]);
+	}
+}
+
+// disk space size
+$chroot_dir = $sys_chroot;
+$ftp_dir = $sys_ftp_upload_dir."/pub/";
+$upload_dir = $sys_upload_dir;
+$group_dir = $chroot_dir.$groupdir_prefix."/";
+$cvs_dir = $chroot_dir.$cvsdir_prefix."/";
+$svn_dir = $chroot_dir.$svndir_prefix."/";
+
+
+foreach ($quotas as $p)
+{
+	$group_id = $p["group_id"];
+	// upload dir disk space
+	$dir = $upload_dir .  $p["unix_name"];
+	$size = get_dir_size($dir);
+	$quotas["$group_id"]["disk_size_other"] += $size;
+	print_debug("upload=$dir size=$size");
+	// ftp dir disk space
+	$dir = $ftp_dir .  $p["unix_name"];
+	$size = get_dir_size($dir);
+	$quotas["$group_id"]["disk_size_1"] += $size;
+	print_debug("ftp=$dir size=$size");
+	// home dir disk space
+	$dir = $group_dir .  $p["unix_name"];
+	$size = get_dir_size($dir);
+	$quotas["$group_id"]["disk_size_1"] += $size;
+	print_debug("home=$dir size=$size");
+	// cvs dir disk space
+	$dir = $cvs_dir .  $p["unix_name"];
+	$size = get_dir_size($dir);
+	$quotas["$group_id"]["disk_size_scm"] += $size;
+	print_debug("cvs=$dir size=$size");
+	// svn dir disk space
+	$dir = $svn_dir .  $p["unix_name"];
+	$size = get_dir_size($dir);
+	$quotas["$group_id"]["disk_size_scm"] += $size;
+	print_debug("svn=$dir size=$size");
+}
+
+// users disk space size
+$chroot_dir = $sys_chroot;
+$ftp_dir = $chroot_dir."/home/users/";
+$users = array();
+$SQL = "SELECT user_id, user_name, realname, unix_status FROM users ORDER BY user_id ";
+$res_db = db_query($SQL);
+if (db_numrows($res_db) > 0) 
+{
+	while($e = db_fetch_array($res_db))
+	{
+		print_debug("users name=$e[user_name] status=$e[unix_status]");
+		if ($e["unix_status"] != "N")
+		{
+			$users["$e[user_id]"]["user_id"] = $e["user_id"];
+			$users["$e[user_id]"]["user_name"] = "$e[user_name]";
+			$users["$e[user_id]"]["realname"] = "$e[realname]";
+			$users["$e[user_id]"]["unix_status"] = "$e[unix_status]";
+			$users["$e[user_id]"]["disk_size"] = 0;
+		}
+	}
+}
+foreach ($users as $u)
+{
+	print_debug("---------------------------------------");
+	$user_id = $u["user_id"];
+	$dir = $ftp_dir .  $u["user_name"];
+	$size = get_dir_size($dir);
+	$users["$user_id"]["disk_size"] += convert_bytes_to_mega($size);
+	print_debug("$user_id user=$u[user_name] dir=$dir size=$size");
+}
+
+?>
+<table width="800px" cellpadding="2" cellspacing="0" border="0">
+	<tr style="">
+		<td style="border-top:thick solid #808080;font-weight:bold" colspan="3">
+			<?php echo $Language->getText('admin_quotas','projects_space_label'); ?>
+		</td>
+		<td style="border-top:thick solid #808080" colspan="7">
+			<span style="font-size:10px">
+				( 
+				<?php echo $Language->getText('admin_quotas','project'); ?>* : 
+				<?php echo $Language->getText('admin_quotas','project_expl'); ?>
+				      
+				<?php echo $Language->getText('admin_quotas','disk_scm'); ?>* : 
+				<?php echo $Language->getText('admin_quotas','disk_scm_expl'); ?>
+				      
+				<?php echo $Language->getText('admin_quotas','disk_other'); ?>* : 
+				<?php echo $Language->getText('admin_quotas','disk_other_expl'); ?>
+				 )
+			</span>
+		</td>
+	</tr>
+	<tr>
+		<td style="border-top:thin solid #808080">
+			<?php echo $Language->getText('admin_quotas','id'); ?>
+		</td>
+		<td style="border-top:thin solid #808080">
+			<?php echo $Language->getText('admin_quotas','name'); ?>
+		</td>
+		<td style="border-top:thin solid #808080"><br /></td>
+		<td style="border-top:thin solid #808080;background:#e0e0e0" align="right">
+			<?php echo $Language->getText('admin_quotas','database'); ?>
+		</td>
+		<td style="border-top:thin solid #808080;background:#e0e0e0" align="right">
+			<?php echo $Language->getText('admin_quotas','project'); ?>*
+		</td>
+		<td style="border-top:thin solid #808080;background:#e0e0e0" align="right">
+			<?php echo $Language->getText('admin_quotas','disk_scm'); ?>*
+		</td>
+		<td style="border-top:thin solid #808080;background:#e0e0e0" align="right">
+			<?php echo $Language->getText('admin_quotas','disk_other'); ?>*
+		</td>
+		<td style="border-top:thin solid #808080;background:#e0e0e0" align="right">
+			<?php echo $Language->getText('admin_quotas','total'); ?>
+		</td>
+		<td style="border-top:thin solid #808080" align="right">
+			<?php echo $Language->getText('admin_quotas','quota_soft_name'); ?>
+		</td>
+		<td style="border-top:thin solid #808080" align="right">
+			<?php echo $Language->getText('admin_quotas','quota_hard_name'); ?>
+		</td>
+	</tr>
+	<?php
+	$total_database = 0;
+	$total_disk = 0;
+	foreach ($quotas as $q)
+	{
+		$total_database += $q["database_size"];
+		$total_disk_1 += $q["disk_size_1"];
+		$total_disk_other += $q["disk_size_other"];
+		$total_disk_scm += $q["disk_size_scm"];
+		$total_disk += $q["disk_size_1"]+$q["disk_size_scm"]+$q["disk_size_other"];
+		$local_disk_size = $q["database_size"]+$q["disk_size_1"]+$q["disk_size_scm"]+$q["disk_size_other"];
+		$color1 = "#e0e0e0";
+		$color2 = "#ffffff";
+		$color0 = $color1;
+		$colorq = $color2;
+		if ($q["quota_soft"] > 0) 
+		{
+			$color0 = "#E5ECB1";
+			$colorq = $color0;
+		}
+		// echo "size $q[disk_size] quota $q[quota_soft] <br />";
+		if (($q["disk_size_1"] > $q["quota_soft"] || $q["disk_size_scm"] > $q["quota_soft"]) && $q["quota_soft"] > 0)
+		{
+			$color1 = "#FF9898";
+			$color2 = "#FFDCDC";
+			$color0 = $color1;
+			$colorq = $color2;
+		}
+		?>
+		<tr>
+			<td style="border-top:thin solid #808080;background:<?php echo $color2; ?>"><?php echo $q["group_id"]; ?></td>
+			<td style="border-top:thin solid #808080;background:<?php echo $color2; ?>">
+				<a href="quota_project.php?group_id=<?php echo $q["group_id"]; ?>">
+					<?php echo $q["unix_name"]; ?>
+				</a>
+			</td>
+			<td style="border-top:thin solid #808080;background:<?php echo $color2; ?>">
+				<?php echo $q["name"]; ?>
+			</td>
+			<td style="border-top:thin solid #808080;background:<?php echo $color1; ?>" align="right">
+				<?php echo add_numbers_separator(convert_bytes_to_mega($q["database_size"])); ?>
+				<?php echo $Language->getText('admin_quotas','mbytes'); ?>
+			</td>
+			<td style="border-top:thin solid #808080;background:<?php echo $color0; ?>" align="right">
+				<?php echo add_numbers_separator(convert_bytes_to_mega($q["disk_size_1"])); ?>
+				<?php echo $Language->getText('admin_quotas','mbytes'); ?>
+			</td>
+			<td style="border-top:thin solid #808080;background:<?php echo $color0; ?>" align="right">
+				<?php echo add_numbers_separator(convert_bytes_to_mega($q["disk_size_scm"])); ?>
+				<?php echo $Language->getText('admin_quotas','mbytes'); ?>
+			</td>
+			<td style="border-top:thin solid #808080;background:<?php echo $color1; ?>" align="right">
+				<?php echo add_numbers_separator(convert_bytes_to_mega($q["disk_size_other"])); ?>
+				<?php echo $Language->getText('admin_quotas','mbytes'); ?>
+			</td>
+			<td style="border-top:thin solid #808080;background:<?php echo $color1; ?>;font-weight:bold" align="right">
+				<?php echo add_numbers_separator(convert_bytes_to_mega($local_disk_size)); ?> 
+				<?php echo $Language->getText('admin_quotas','mbytes'); ?>
+			</td>
+			<td style="border-top:thin solid #808080;background:<?php echo $colorq; ?>" align="right">
+				<?php 
+					if ($q["quota_soft"] > 0)
+					{
+						echo add_numbers_separator(convert_bytes_to_mega($q["quota_soft"])); 
+						echo " ";
+						echo $Language->getText('admin_quotas','mbytes'); 
+					}
+					else
+					{
+						echo "---";
+					}
+				?>
+			</td>
+			<td style="border-top:thin solid #808080;background:<?php echo $colorq; ?>" align="right">
+				<?php 
+					if ($q["quota_hard"] > 0)
+					{
+						echo add_numbers_separator(convert_bytes_to_mega($q["quota_hard"])); 
+						echo " ";
+						echo $Language->getText('admin_quotas','mbytes'); 
+					}
+					else
+					{
+						echo "---";
+					}
+				?>
+			</td>
+		</tr>
+		<?php
+	}
+?>
+	<tr style="font-weight:bold">
+		<td style="border-top:thick solid #808080;border-bottom:thick solid #808080"><br /></td>
+		<td style="border-top:thick solid #808080;border-bottom:thick solid #808080">
+			<?php echo $Language->getText('admin_quotas','total'); ?>
+		</td>
+		<td style="border-top:thick solid #808080;border-bottom:thick solid #808080"><br /></td>
+		<td style="border-top:thick solid #808080;border-bottom:thick solid #808080;background:#e0e0e0" align="right">
+			<?php echo add_numbers_separator(convert_bytes_to_mega($total_database)); ?>
+			<?php echo $Language->getText('admin_quotas','mbytes'); ?>
+		</td>
+		<td style="border-top:thick solid #808080;border-bottom:thick solid #808080;background:#e0e0e0" align="right">
+			<?php echo add_numbers_separator(convert_bytes_to_mega($total_disk_1)); ?>
+			<?php echo $Language->getText('admin_quotas','mbytes'); ?>
+		</td>
+		<td style="border-top:thick solid #808080;border-bottom:thick solid #808080;background:#e0e0e0" align="right">
+			<?php echo add_numbers_separator(convert_bytes_to_mega($total_disk_scm)); ?>
+			<?php echo $Language->getText('admin_quotas','mbytes'); ?>
+		</td>
+		<td style="border-top:thick solid #808080;border-bottom:thick solid #808080;background:#e0e0e0" align="right">
+			<?php echo add_numbers_separator(convert_bytes_to_mega($total_disk_other)); ?>
+			<?php echo $Language->getText('admin_quotas','mbytes'); ?>
+		</td>
+		<td style="border-top:thick solid #808080;border-bottom:thick solid #808080;background:#e0e0e0" align="right">
+			<?php echo add_numbers_separator(convert_bytes_to_mega($total_database+$total_disk_1+$total_disk_scm+$total_disk_other)); ?>
+			<?php echo $Language->getText('admin_quotas','mbytes'); ?>
+		</td>
+		<td style="border-top:thick solid #808080;border-bottom:thick solid #808080"><br /></td>
+		<td style="border-top:thick solid #808080;border-bottom:thick solid #808080"><br /></td>
+	</tr>
+</table>
+<br />
+<br />
+<table width="700px" cellpadding="2" cellspacing="0" border="0">
+	<tr style="font-weight:bold">
+		<td style="border-top:thick solid #808080" colspan="6">
+			<?php echo $Language->getText('admin_quotas','users_space_label'); ?>
+		</td>
+	</tr>
+	<tr>
+		<td style="border-top:thin solid #808080"><?php echo $Language->getText('admin_quotas','id'); ?></td>
+		<td style="border-top:thin solid #808080"><?php echo $Language->getText('admin_quotas','name'); ?></td>
+		<td style="border-top:thin solid #808080"><br /></td>
+		<td style="border-top:thin solid #808080"><br /></td>
+		<td style="border-top:thin solid #808080"><br /></td>
+		<td style="border-top:thin solid #808080" align="right">
+			<?php echo $Language->getText('admin_quotas','disk'); ?>
+		</td>
+	</tr>
+	<?php
+	$total = 0;
+	foreach ($users as $u)
+	{
+		$total += $u["disk_size"];
+		?>
+		<tr>
+			<td style="border-top:thin solid #808080"><?php echo $u["user_id"]; ?></td>
+			<td style="border-top:thin solid #808080"><?php echo $u["user_name"]; ?></td>
+			<td style="border-top:thin solid #808080"><?php echo $u["realname"]; ?></td>
+			<td style="border-top:thin solid #808080"><br /></td>
+			<td style="border-top:thin solid #808080"><br /></td>
+			<td style="border-top:thin solid #808080" align="right">
+				<?php echo add_numbers_separator($u["disk_size"]); ?>
+				<?php echo $Language->getText('admin_quotas','mbytes'); ?>
+			</td>
+		</tr>
+		<?php
+	}
+?>
+	<tr style="font-weight:bold">
+		<td style="border-top:thick solid #808080;border-bottom:thick solid #808080"><br /></td>
+		<td style="border-top:thick solid #808080;border-bottom:thick solid #808080">
+			<?php echo $Language->getText('admin_quotas','total'); ?>
+		</td>
+		<td style="border-top:thick solid #808080;border-bottom:thick solid #808080"><br /></td>
+		<td style="border-top:thick solid #808080;border-bottom:thick solid #808080"><br /></td>
+		<td style="border-top:thick solid #808080;border-bottom:thick solid #808080"><br /></td>
+		<td style="border-top:thick solid #808080;border-bottom:thick solid #808080" align="right">
+			<?php echo add_numbers_separator($total); ?>
+			<?php echo $Language->getText('admin_quotas','mbytes'); ?>
+		</td>
+	</tr>
+</table>
+<?php
+
+
+print_debug(print_r($quotas, true));
+print_debug(print_r($users, true));
+
+site_admin_footer(array());
+?>
+
+<?php
+
+function convert_bytes_to_mega ($mega)
+{
+	$b = round($mega / (1024*1024), 0);
+	return $b;
+}
+
+function print_debug ($text)
+{
+//	echo "<pre>$text</pre>";
+}
+function add_numbers_separator ($val, $sep=' ')
+{
+	$size = "$val";
+	$size = strrev($size);
+	$size = wordwrap($size, 3, $sep, 1);
+	$size = strrev($size);
+	return $size;
+}
+function get_dir_size ($dir)
+{
+	$size = "";
+	$cmd = "/usr/bin/du -bs $dir";
+	$res = shell_exec ($cmd);
+	$a = explode("\t", $res);
+	if (isset($a[1])) $size = $a[0];
+	return "$size";
+}
+
+?>
+
+
+
+

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/quota_management/www/quota_admin.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/quota_management/www/quota_admin.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/quota_management/www/quota_admin.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,194 @@
+<?php
+/**
+ * Project Admin page to manage quotas disk and database
+ *
+ * 
+ * Fabio Bertagnin November 2005
+ *
+ * @version   $Id: 08_IMPROVQUOTA_90_quota_management.dpatch,v 1.1 2006/01/11 17:02:45 fabio Exp $
+ *
+ * This file is part of GForge.
+ *
+ * GForge is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GForge 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GForge; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+
+require_once('pre.php');
+require_once('www/admin/admin_utils.php');
+
+
+$_quota_block_size = 1024;
+$_quota_block_size = trim(shell_exec("echo $BLOCK_SIZE")) + 0;
+if ($_quota_block_size == 0) $_quota_block_size = 1024;
+
+// session_require(array('group'=>$group_id,'admin_flags'=>'A'));
+
+site_admin_header(array('title'=>$Language->getText('admin_index','title')));
+
+
+?>
+<h4>
+	<a href="quota.php"><?php echo $Language->getText('admin_quotas','quotas_title'); ?></a>
+	  
+	<?php echo $Language->getText('admin_quotas','quotas_admin_title'); ?>
+</h4>
+<?php
+
+// echo "<pre>".print_r($_POST, true)."</pre>";
+
+// quota update 
+if ($_POST["cmd"] == "maj")
+{
+	$qs = $_POST["qs"] * $_quota_block_size;
+	$qh = $_POST["qh"] * $_quota_block_size;
+	if ($qs > $qh)
+	{
+		$message = utf8_encode($Language->getText('admin_quotas','quota_val_invalid'));
+		echo "<h3 style=\"color:red\">$message</h3>";
+	}
+	else
+	{
+		$SQL = "UPDATE groups SET quota_soft = $qs, quota_hard = $qh WHERE group_id = $_POST[group_id] ";
+		db_query($SQL);
+		$message = utf8_encode($Language->getText('admin_quotas','quota_val_update_success'));
+		echo "<h3 style=\"color:red\">$message</h3>";
+	}
+}
+
+
+// stock projects infos in array
+$quotas = array();
+
+// all projects list
+$SQL = "SELECT group_id, group_name, unix_group_name, quota_soft, quota_hard FROM groups ORDER BY group_id ";
+$res_db = db_query($SQL);
+if (db_numrows($res_db) > 0) 
+{
+	while($e = db_fetch_array($res_db))
+	{
+		$qh = $e["quota_hard"] / $_quota_block_size;
+		$qs = $e["quota_soft"] / $_quota_block_size;
+		$quotas["$e[group_id]"]["group_id"] = $e["group_id"];
+		$quotas["$e[group_id]"]["name"] = $e["group_name"];
+		$quotas["$e[group_id]"]["unix_name"] = $e["unix_group_name"];
+		$quotas["$e[group_id]"]["database_size"] = 0;
+		$quotas["$e[group_id]"]["disk_size"] = 0;
+		$quotas["$e[group_id]"]["quota_hard"] = $qh;
+		$quotas["$e[group_id]"]["quota_soft"] = $qs;
+	}
+}
+
+
+
+?>
+<table width="700px" cellpadding="2" cellspacing="0" border="0">
+	<tr style="font-weight:bold">
+		<td style="border-top:thick solid #808080" colspan="6"><?php echo $Language->getText('admin_quotas','projects_space_modif'); ?></td>
+	</tr>
+	<tr>
+		<td style="border-top:thin solid #808080"><?php echo $Language->getText('admin_quotas','id'); ?></td>
+		<td style="border-top:thin solid #808080"><?php echo $Language->getText('admin_quotas','name'); ?></td>
+		<td style="border-top:thin solid #808080"><br /></td>
+		<td style="border-top:thin solid #808080" align="right"><?php echo $Language->getText('admin_quotas','quota_soft_name'); ?></td>
+		<td style="border-top:thin solid #808080" align="right"><?php echo $Language->getText('admin_quotas','quota_hard_name'); ?></td>
+		<td style="border-top:thin solid #808080"><br /></td>
+	</tr>
+	<?php
+	$total_database = 0;
+	$total_disk = 0;
+	foreach ($quotas as $q)
+	{
+		$total_database += $q["database_size"];
+		$total_disk += $q["disk_size"];
+		?>
+		<form action="quota_admin.php" method="POST">
+		<input type="hidden" name="cmd" value="maj" />
+		<input type="hidden" name="group_id" value="<?php echo $q["group_id"]; ?>" />
+		<tr>
+			<td style="border-top:thin solid #808080"><?php echo $q["group_id"]; ?></td>
+			<td style="border-top:thin solid #808080"><a href="/project/admin/quota.php?group_id=<?php echo $q["group_id"]; ?>">
+				<?php echo $q["unix_name"]; ?>
+			</a></td>
+			<td style="border-top:thin solid #808080"><?php echo $q["name"]; ?></td>
+			<td style="border-top:thin solid #808080" align="right">
+				<input type="text" name="qs" 
+					size="12" 
+					value="<?php echo $q["quota_soft"]; ?>" 
+					style="background:#ffffd0;text-align:right" /> 
+					<?php echo $Language->getText('admin_quotas','mbytes'); ?>
+			</td>
+			<td style="border-top:thin solid #808080" align="right">
+				<input type="text" name="qh" 
+					size="12" 
+					value="<?php echo $q["quota_hard"]; ?>" 
+					style="background:#ffffd0;text-align:right" /> 
+				<?php echo $Language->getText('admin_quotas','mbytes'); ?>
+			</td>
+			<td style="border-top:thin solid #808080" align="right">
+				<input type="submit" value="<?php echo $Language->getText('admin_quotas','modify_button'); ?>" />
+			</td>
+		</tr>
+		</form>
+		<?php
+	}
+?>
+	<tr style="font-weight:bold">
+		<td style="border-top:thick solid #808080;border-bottom:thick solid #808080"><br /></td>
+		<td style="border-top:thick solid #808080;border-bottom:thick solid #808080"><br /></td>
+		<td style="border-top:thick solid #808080;border-bottom:thick solid #808080"><br /></td>
+		<td style="border-top:thick solid #808080;border-bottom:thick solid #808080"><br /></td>
+		<td style="border-top:thick solid #808080;border-bottom:thick solid #808080"><br /></td>
+		<td style="border-top:thick solid #808080;border-bottom:thick solid #808080"><br /></td>
+	</tr>
+</table>
+<br />
+<br />
+<?php
+
+
+print_debug(print_r($quotas, true));
+print_debug(print_r($users, true));
+
+site_admin_footer(array());
+?>
+
+<?php
+function print_debug ($text)
+{
+//	echo "<pre>$text</pre>";
+}
+function add_numbers_separator ($val, $sep=' ')
+{
+	$size = "$val";
+	$size = strrev($size);
+	$size = wordwrap($size, 3, $sep, 1);
+	$size = strrev($size);
+	return $size;
+}
+function get_dir_size ($dir)
+{
+	$size = "";
+	$cmd = "/usr/bin/du -bs $dir";
+	$res = shell_exec ($cmd);
+	$a = explode("\t", $res);
+	if (isset($a[1])) $size = $a[0];
+	return "$size";
+}
+
+?>
+
+
+
+

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/quota_management/www/quota_project.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/quota_management/www/quota_project.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/quota_management/www/quota_project.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,407 @@
+<?php
+/**
+ * Project Admin page to manage quotas project
+ *
+ * Portions Copyright 1999-2001 (c) VA Linux Systems
+ * The rest Copyright 2002-2004 (c) GForge Team
+ * http://gforge.org/
+ *
+ * @version   $Id: 08_IMPROVQUOTA_90_quota_management.dpatch,v 1.1 2006/01/11 17:02:45 fabio Exp $
+ *
+ * This file is part of GForge.
+ *
+ * GForge is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GForge 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GForge; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+
+require_once('pre.php');
+require_once('www/project/admin/project_admin_utils.php');
+
+if (!$sys_use_project_vhost) {
+	exit_disabled();
+}
+
+session_require(array('group'=>$group_id,'admin_flags'=>'A'));
+
+$group = &group_get_object($group_id);
+
+if (!$group || !is_object($group)) {
+        exit_error('Error','Error creating group object');
+} else if ($group->isError()) {
+        exit_error('ERROR',$group->getErrorMessage());
+}
+
+
+project_admin_header(array('title'=>$Language->getText('project_admin_quotas','title'),'group'=>$group->getID(),'pagename'=>'project_admin_quotas','sectionvals'=>array(group_getname($group_id))));
+?>
+
+<h4><?php echo $Language->getText('project_admin_quotas','title'); ?></h4>
+
+<?php
+$quotas = array();
+$SQL = "SELECT SUM(octet_length(data)) as size, SUM(octet_length(data_words)) as size1, count(*) as nb ";
+$SQL .= "FROM doc_data ";
+$SQL .= "WHERE group_id = '$group_id' ";
+$res_db = db_query($SQL);
+$q = array();
+$q["name"] = $Language->getText('project_admin_quotas','documents_title');
+$q["nb"] = 0; $q["size"] = 0;
+$q1 = array();
+$q1["name"] = $Language->getText('project_admin_quotas','search_engine_title');
+$q["size"] = 0;
+if (db_numrows($res_db) > 0) 
+{
+	$e = db_fetch_array($res_db);
+	$q["nb"] = $e["nb"];
+	$q["size"] = $e["size"];
+	// $q1["nb"] = $e["nb"];
+	$q1["size"] = $e["size1"];
+}
+$quotas[0] = $q;
+$quotas[1] = $q1;
+
+$SQL = "SELECT SUM(octet_length(summary) + octet_length(details)) as size, count(*) as nb FROM news_bytes WHERE group_id = '$group_id' ";
+$res_db = db_query($SQL);
+$q = array();
+$q["name"] = $Language->getText('project_admin_quotas','news_title');
+$q["nb"] = 0; $q["size"] = 0;
+if (db_numrows($res_db) > 0) 
+{
+	$e = db_fetch_array($res_db);
+	$q["nb"] = $e["nb"];
+	$q["size"] = $e["size"];
+}
+$quotas[2] = $q;
+
+
+$SQL = "SELECT SUM(octet_length(subject)+octet_length(body)) as size, count(*) as nb FROM forum INNER JOIN forum_group_list ";
+$SQL .= "ON forum.group_forum_id = forum_group_list.group_forum_id WHERE group_id = '$group_id' ";
+$res_db = db_query($SQL);
+$q = array();
+$q["name"] = $Language->getText('project_admin_quotas','forums_title');
+$q["nb"] = 0; $q["size"] = 0;
+if (db_numrows($res_db) > 0) 
+{
+	$e = db_fetch_array($res_db);
+	$q["nb"] = $e["nb"];
+	$q["size"] = $e["size"];
+}
+$quotas[3] = $q;
+
+$quotas_disk = array();
+
+// espace disque
+// disk_total_space
+$_quota_block_size = 1024;
+$_quota_block_size = trim(shell_exec("echo $BLOCK_SIZE")) + 0;
+if ($_quota_block_size == 0) $_quota_block_size = 1024;
+$quota_soft = "";
+$quota_hard = "";
+$SQL = "SELECT quota_soft, quota_hard FROM groups WHERE group_id = $group_id";
+$res_db = db_query($SQL);
+if (db_numrows($res_db) > 0) 
+{
+	$e = db_fetch_array($res_db);
+	$quota_hard = $e["quota_hard"];
+	$quota_soft = $e["quota_soft"];
+	$quota_hard = round(($_quota_block_size * $quota_hard) / (1024*1024), 0);
+	$quota_soft = round(($_quota_block_size * $quota_soft) / (1024*1024), 0);
+}
+
+$quota_tot_other = 0;
+$quota_tot_1 = 0;
+$quota_tot_scm = 0;
+
+$upload_dir = $sys_upload_dir .  $group->getUnixName();
+$chroot_dir = $sys_chroot;
+$ftp_dir = $sys_ftp_upload_dir."/pub/".$group->getUnixName();
+$group_dir = $chroot_dir.$groupdir_prefix . "/" . $group->getUnixName();
+$cvs_dir = $chroot_dir.$cvsdir_prefix . "/" . $group->getUnixName();
+$svn_dir = $chroot_dir.$svndir_prefix . "/" . $group->getUnixName();
+
+$q["name"] = $Language->getText('project_admin_quotas','upload_title');
+$q["path"] = "$upload_dir";
+$q["quota_label"] = $Language->getText('project_admin_quotas','without');
+$q["size"] = get_dir_size ("$upload_dir");
+$quota_tot_other += $q["size"];
+$quotas_disk[] = $q;
+
+$q["name"] = $Language->getText('project_admin_quotas','home_title');
+$q["path"] = "$group_dir"; $q["size"] = get_dir_size ("$group_dir");
+$q["quota_label"] = $Language->getText('project_admin_quotas','with_ftp_home');
+$quota_tot_1 += $q["size"];
+$quotas_disk[] = $q;
+
+$q["name"] = $Language->getText('project_admin_quotas','ftp_title');
+$q["path"] = "$ftp_dir"; $q["size"] = get_dir_size ("$ftp_dir");
+$q["quota_label"] = $Language->getText('project_admin_quotas','with_ftp_home');
+$quota_tot_1 += $q["size"];
+$quotas_disk[] = $q;
+
+$q["name"] = $Language->getText('project_admin_quotas','cvs_title');
+$q["path"] = "$cvs_dir"; $q["size"] = get_dir_size ("$cvs_dir");
+$q["quota_label"] = $Language->getText('project_admin_quotas','with_scm');
+$quota_tot_scm += $q["size"];
+$quotas_disk[] = $q;
+
+$q["name"] = $Language->getText('project_admin_quotas','svn_title');
+$q["path"] = "$svn_dir"; $q["size"] = get_dir_size ("$svn_dir");
+$q["quota_label"] = $Language->getText('project_admin_quotas','with_scm');
+$quota_tot_scm += $q["size"];
+$quotas_disk[] = $q;
+
+//echo "chroot = $chroot_dir <br />";
+//echo "ftp = $ftp_dir <br />";
+// echo "group = $group_dir <br />";
+// echo "svn = $svn_dir <br />";
+// echo "cvs = $cvs_dir <br />";
+
+
+
+
+
+// print_debug(print_r($quotas, true));
+?>
+
+<table width="500px" cellpadding="2" cellspacing="0" border="0">
+	<tr style="font-weight:bold">
+		<td colspan="3" style="border-top:thick solid #808080" align="center"><?php echo $Language->getText('project_admin_quotas','database_space_label'); ?></td>
+	</tr>
+	<tr style="font-weight:bold">
+		<td style="border-top:thin solid #808080"><?php echo $Language->getText('project_admin_quotas','table_head_name'); ?></td>
+		<td style="border-top:thin solid #808080" align="right"><?php echo $Language->getText('project_admin_quotas','table_head_nb'); ?></td>
+		<td style="border-top:thin solid #808080" align="right"><?php echo $Language->getText('project_admin_quotas','table_head_size'); ?></td>
+	</tr>
+<?php 
+	$sizetot = 0;
+foreach ($quotas as $q) 
+{ 
+	if ($q["size"] != "")
+	{
+		$sizetot += $q["size"];
+		?>
+			<tr>
+				<td style="border-top:thin solid #808080"><?php echo $q["name"]; ?></td>
+				<td style="border-top:thin solid #808080" align="right"><?php echo $q["nb"]; ?></td>
+				<td style="border-top:thin solid #808080" align="right"><?php echo add_numbers_separator(convert_bytes_to_mega($q["size"]))." ".$Language->getText('project_admin_quotas','size_metric'); ?></td>
+			</tr>
+<?php 
+	} 
+}
+?>
+	<tr style="font-weight:bold">
+		<td style="border-top:thick solid #808080;border-bottom:thick solid #808080">
+			<?php echo $Language->getText('project_admin_quotas','total_label'); ?>
+		</td>
+		<td style="border-top:thick solid #808080;border-bottom:thick solid #808080"> </td>
+		<td style="border-top:thick solid #808080;border-bottom:thick solid #808080" align="right">
+			<?php echo add_numbers_separator(convert_bytes_to_mega($sizetot))." ".$Language->getText('project_admin_quotas','size_metric'); ?>
+		</td>
+	</tr>
+</table>
+<br />
+<br />
+<table width="500px" cellpadding="2" cellspacing="0" border="0">
+	<tr style="font-weight:bold">
+		<td colspan="3" style="border-top:thick solid #808080" align="center">
+			<?php echo $Language->getText('project_admin_quotas','disk_space_label'); ?>
+		</td>
+	</tr>
+	<tr style="font-weight:bold">
+		<td style="border-top:thin solid #808080">
+			<?php echo $Language->getText('project_admin_quotas','table_head_name'); ?>
+		</td>
+		<td style="border-top:thin solid #808080" align="right"> </td>
+		<td style="border-top:thin solid #808080" align="right">
+			<?php echo $Language->getText('project_admin_quotas','table_head_size'); ?>
+		</td>
+	</tr>
+<?php 
+	$sizetot = 0;
+foreach ($quotas_disk as $q) 
+{ 
+	if ($q["size"] != "")
+	{
+		$sizetot += $q["size"];
+?>
+	<tr>
+		<td style="border-top:thin solid #808080"><?php echo $q["name"]; ?></td>
+		<td style="border-top:thin solid #808080" align="right">
+			<?php echo $q["quota_label"]; ?> 
+		</td>
+		<td style="border-top:thin solid #808080" align="right">
+			<?php echo add_numbers_separator(convert_bytes_to_mega($q["size"]))." ".$Language->getText('project_admin_quotas','size_metric'); ?>
+		</td>
+	</tr>
+<?php 
+	} 
+}
+?>
+	<tr style="font-weight:bold">
+		<td style="border-top:thick solid #808080;border-bottom:thick solid #808080"><?php echo $Language->getText('project_admin_quotas','total_label'); ?></td>
+		<td style="border-top:thick solid #808080;border-bottom:thick solid #808080"> </td>
+		<td style="border-top:thick solid #808080;border-bottom:thick solid #808080" align="right">
+			<?php echo add_numbers_separator(convert_bytes_to_mega($sizetot))." ".$Language->getText('project_admin_quotas','size_metric'); ?>
+		</td>
+	</tr>
+</table>
+<br />
+<br />
+
+
+<?php
+	
+	$color1 = "#ffffff";
+	$color2 = "#ffffff";
+	$msg1 = " ";
+	$msg2 = " ";
+	$qs = $quota_soft * 1024 * 1024;
+	if (($quota_tot_1+0) > ($qs+0) && ($qs+0) > 0)
+	{
+		$color1 = "#FFDCDC";
+		$msg1 = $Language->getText('project_admin_quotas','quota_exceed');
+	}
+	if (($quota_tot_scm+0) > ($qs+0) && ($qs+0) > 0)
+	{
+		$color2 = "#FFDCDC";
+		$msg2 = $Language->getText('project_admin_quotas','quota_exceed');
+	}
+?>
+
+<table width="500px" cellpadding="2" cellspacing="0" border="0">
+	<tr style="font-weight:bold">
+		<td colspan="4" style="border-top:thick solid #808080" align="center"><?php echo $Language->getText('project_admin_quotas','quota_space_label'); ?></td>
+	</tr>
+	<tr style="font-weight:bold">
+		<td style="border-top:thin solid #808080">
+			<?php echo $Language->getText('project_admin_quotas','quota_settings_label'); ?>
+		</td>
+		<td style="border-top:thin solid #808080;font-weight:bold" align="right">
+			 
+		</td>
+		<td style="border-top:thin solid #808080" align="right">
+			<?php echo $Language->getText('project_admin_quotas','quota_soft_label'); ?>
+		</td>
+		<td style="border-top:thin solid #808080" align="right">
+			<?php echo $Language->getText('project_admin_quotas','quota_hard_label'); ?>
+		</td>
+	</tr>
+	<tr style="background:<?php echo $color1; ?>">
+		<td style="border-top:thin solid #808080">
+			<?php echo $Language->getText('project_admin_quotas','quota_group1_label'); ?>
+		</td>
+		<td style="border-top:thin solid #808080;font-weight:bold;color:red" align="right">
+			<?php echo $msg1; ?>
+		</td>
+		<td style="border-top:thin solid #808080" align="right">
+			<?php 
+				if ($quota_soft == 0)
+				{
+					echo "---";
+				}
+				else
+				{
+					echo "$quota_soft";  
+					echo $Language->getText('admin_quotas','mbytes'); 
+				}
+			?>
+		</td>
+		<td style="border-top:thin solid #808080" align="right">
+			<?php 
+				if ($quota_hard == 0)
+				{
+					echo "---";
+				}
+				else
+				{
+					echo "$quota_hard";  
+					echo $Language->getText('admin_quotas','mbytes'); 
+				}
+			?>
+		</td>
+	</tr>
+	<tr style="background:<?php echo $color2; ?>">
+		<td style="border-top:thin solid #808080">
+			<?php echo $Language->getText('project_admin_quotas','quota_groupscm_label'); ?>
+		</td>
+		<td style="border-top:thin solid #808080;font-weight:bold;color:red" align="right">
+			<?php echo $msg2; ?>
+		</td>
+		<td style="border-top:thin solid #808080" align="right">
+			<?php 
+				if ($quota_soft == 0)
+				{
+					echo "---";
+				}
+				else
+				{
+					echo "$quota_soft";  
+					echo $Language->getText('admin_quotas','mbytes'); 
+				}
+			?>
+			</td>
+		<td style="border-top:thin solid #808080" align="right">
+			<?php 
+				if ($quota_hard == 0)
+				{
+					echo "---";
+				}
+				else
+				{
+					echo "$quota_hard";  
+					echo $Language->getText('admin_quotas','mbytes'); 
+				}
+			?>
+		</td>
+	</tr>
+	<tr style="font-weight:bold">
+		<td colspan="4" style="border-top:thick solid #808080" align="center"> </td>
+	</tr>
+</table>
+
+
+<?php project_admin_footer(array()); ?>
+
+<?php
+function print_debug ($text)
+{
+	echo "<pre>$text</pre>";
+}
+
+function convert_bytes_to_mega ($mega)
+{
+	$b = round($mega / (1024*1024), 0);
+	return $b;
+}
+
+function add_numbers_separator ($val, $sep=' ')
+{
+	$size = "$val";
+	$size = strrev($size);
+	$size = wordwrap($size, 3, $sep, 1);
+	$size = strrev($size);
+	return $size;
+}
+
+function get_dir_size ($dir)
+{
+	$size = "";
+	$cmd = "/usr/bin/du -bs $dir";
+	$res = shell_exec ($cmd);
+	$a = explode("\t", $res);
+	if (isset($a[1])) $size = $a[0];
+	return "$size";
+}
+?>
\ No newline at end of file

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/scmccase/common/CCasePlugin.class
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/scmccase/common/CCasePlugin.class	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/scmccase/common/CCasePlugin.class	2011-02-24 17:31:31 UTC (rev 11977)
@@ -35,7 +35,7 @@
 		$this->hooks[] = "group_approved";
 		$this->hooks[] = "scm_plugin";
 
-                require_once('/etc/gforge/plugins/scmccase/config.php') ;
+                require_once('plugins/scmccase/config.php') ;
 		
 		$this->default_ccase_server = $default_ccase_server ;
 		$this->this_server = $this_server ;

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/AUTHORS
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/AUTHORS	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/AUTHORS	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,2 @@
+Fabien Regnier <fabien.regnier at sogeti.com>
+Julien Jeany <julien.jeany at sogeti.com>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/COPYING
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/COPYING	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/COPYING	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,341 @@
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) 19yy  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 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 General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) 19yy name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
+

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/README
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/README	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/README	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,4 @@
+Change owner of www/includes/settings.php
+The owner must be apache
+
+chown www-data www/includes/settings.php

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/common/languages/Base.tab
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/common/languages/Base.tab	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/common/languages/Base.tab	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,16 @@
+#/**
+#  *
+#  * webcalendar message catalog (English)
+#  *
+#  * GForge: Breaking Down the Barriers to Open Source Development
+#  * Copyright 1999-2001 (c) VA Linux Systems
+#  *                2005 (c) Daniel Pérez <danielperez.arg at gmail.com>
+#  * http://sourceforge.net
+#  * Here you can add your own language customizations
+#  *
+#  *
+#  */
+user_home	view_webcalendar	View Personal webcalendar
+project_admin	webcalendar	View the webcalendar Administration
+webcalendar_user	allow	You are not allowed to see this calendar.
+webcalendar_user	nocalendar	No calendar for this group.

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/common/languages/French.tab
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/common/languages/French.tab	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/common/languages/French.tab	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,16 @@
+#/**
+#  *
+#  * webcalendar message catalog (English)
+#  *
+#  * GForge: Breaking Down the Barriers to Open Source Development
+#  * Copyright 1999-2001 (c) VA Linux Systems
+#  *                2005 (c) Daniel Pérez <danielperez.arg at gmail.com>
+#  * http://sourceforge.net
+#  * Here you can add your own language customizations
+#  *
+#  *
+#  */
+user_home	view_webcalendar	Voir le calendrier personnel
+project_admin	webcalendar	Voir l'administration WebCalendar
+webcalendar_user	allow	Vous n'êtes pas autorisé à voir ce calendrier!!!
+webcalendar_user	nocalendar	Pas de calendrier pour ce Groupe!!

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/common/webcalendar-init.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/common/webcalendar-init.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/common/webcalendar-init.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,33 @@
+<?php
+
+/**
+ *
+ * This file is part of GForge.
+ *
+ * GForge is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GForge 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GForge; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+ */
+
+require_once ('webcalendarPlugin.class') ;
+
+$webcalendarPluginObject = new webcalendarPlugin ;
+
+register_plugin ($webcalendarPluginObject) ;
+
+// Local Variables:
+// mode: php
+// c-file-style: "bsd"
+// End:
+
+?>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/common/webcalendarPlugin.class
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/common/webcalendarPlugin.class	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/common/webcalendarPlugin.class	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,533 @@
+<?php
+
+/**
+ * webcalendarPlugin Class
+ *
+ *
+ * This file is part of GForge.
+ *
+ * GForge is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GForge 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GForge; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+ */
+
+class webcalendarPlugin extends Plugin {
+	function webcalendarPlugin () {
+		$this->Plugin() ;
+		$this->name = "webcalendar" ;
+		$this->text = "Webcalendar" ; // To show in the tabs, use...
+		$this->hooks[] = "user_personal_links";//to make a link to the user´s personal part of the plugin
+		$this->hooks[] = "usermenu" ;
+		$this->hooks[] = "groupmenu" ;	// To put into the project tabs
+		$this->hooks[] = "groupisactivecheckbox" ; // The "use ..." checkbox in editgroupinfo
+		$this->hooks[] = "groupisactivecheckboxpost" ; //
+		$this->hooks[] = "userisactivecheckbox" ; // The "use ..." checkbox in user account
+		$this->hooks[] = "userisactivecheckboxpost" ; //
+		$this->hooks[] = "project_admin_plugins"; // to show up in the admin page fro group
+		$this->hooks[] = "call_user_cal"; // to show the calendar of the user (file my/index.php line 434)
+		$this->hooks[] = "call_user_js"; // call a function when you click on webcal (file my/index.php line 434)
+		$this->hooks[] = "call_group_cal"; // to show the calendar of the group (file layout.class ligne 627)
+		//$this->hooks[] = "iframe_group_calendar"; // to show the calendar of the group (file  ligne 627)
+		$this->hooks[] = "add_cal_user"; //add a gforge user in calendar base 
+		$this->hooks[] = "del_cal_user"; //dell a gforge user in calendar base
+		$this->hooks[] = "add_cal_group"; //add a group user in calendar base
+		$this->hooks[] = "del_cal_group"; //del a gforge user in calendar base
+		$this->hooks[] = "change_cal_permission"; //change permission pour webcal user (admin or not)
+		$this->hooks[] = "change_cal_permission_default"; //change permission pour webcal user (admin or not)
+		$this->hooks[] = "change_cal_permission_auto"; //change permission pour webcal user when you modify role
+		$this->hooks[] = "add_cal_link_father"; // add a link between son and father
+		$this->hooks[] = "del_cal_link_father"; // del a link between son and father
+		$this->hooks[] = "add_cal_link_father_event"; // add a link between son and father
+		$this->hooks[] = "change_cal_password"; //change the password a webcal user
+		$this->hooks[] = "change_cal_mail"; //change the mail a webcal user
+	        $this->hooks[] = "cal_link_group"; //a link to group calendar
+	}
+
+	function CallHook ($hookname, $params) {
+		global $use_webcalendarplugin,$G_SESSION,$HTML,$Language;
+		$group_id=$params['group'];
+		if ($hookname == "usermenu") {
+			$text = $this->text; // this is what shows in the tab
+			if ($G_SESSION->usesPlugin("webcalendar")) {
+				$param = '?type=user&id=' . $G_SESSION->getId() . "&pluginname=" . $this->name; // we indicate the part we´re calling is the user one
+				echo ' | ' . $HTML->PrintSubMenu (array ($text),
+						  array ('/plugins/webcalendar/index.php' . $param ));				
+			}
+		} elseif ($hookname == "groupmenu") {
+			$project = &group_get_object($group_id);
+			if (!$project || !is_object($project)) {
+				return;
+			}
+			if ($project->isError()) {
+				return;
+			}
+			if (!$project->isProject()) {
+				return;
+			}
+			if ( !$project->usesPlugin ( $this->name ) ) {
+				$params['TITLES'][]=$this->text;
+				$params['DIRS'][]='/plugins/webcalendar/index2.php?type=group&group_id='.$group_id;
+				} else {
+				$params['TITLES'][]=$this->text." is [Off]";
+			}	
+			(($params['toptab'] == $this->name) ? $params['selected']=(count($params['TITLES'])-1) : '' );
+		} elseif ($hookname == "groupisactivecheckbox") {
+			///Check if the group is active
+		} elseif ($hookname == "groupisactivecheckboxpost") {
+			// this code actually activates/deactivates the plugin after the form was submitted in the project edit public info page
+			$group = &group_get_object($group_id);
+			$use_webcalendarplugin = getStringFromRequest('use_webcalendarplugin');
+			if ( $use_webcalendarplugin == 1 ) {
+				$group->setPluginUse ( $this->name );
+			} else {
+				$group->setPluginUse ( $this->name, false );
+			}
+		} elseif ($hookname == "userisactivecheckbox") {
+			//check if user is active
+			// this code creates the checkbox in the user account manteinance page to activate/deactivate the plugin
+		} elseif ($hookname == "userisactivecheckboxpost") {
+			// this code actually activates/deactivates the plugin after the form was submitted in the user account manteinance page
+			$user = $params['user'];
+			$use_webcalendarplugin = getStringFromRequest('use_webcalendarplugin');
+			if ( $use_webcalendarplugin == 1 ) {
+				$user->setPluginUse ( $this->name );
+			} else {
+				$user->setPluginUse ( $this->name, false );
+			}
+			echo "<tr>";
+			echo "<td>";
+			echo ' <input type="CHECKBOX" name="use_webcalendarplugin" value="1" ';
+			// CHECKED OR UNCHECKED?
+			if ( $user->usesPlugin ( $this->name ) ) {
+				echo "CHECKED";
+			}
+			echo ">    Use ".$this->text." Plugin";
+			echo "</td>";
+			echo "</tr>";
+		} elseif ($hookname == "user_personal_links") {
+			global $Language;
+			// this displays the link in the user´s profile page to it´s personal webcalendar (if you want other sto access it, youll have to change the permissions in the index.php
+			$userid = $params['user_id'];
+			$user = user_get_object($userid);
+			$text = $params['text'];
+			//check if the user has the plugin activated
+			if ($user->usesPlugin($this->name)) {
+				echo '	<p>
+					<a href="/plugins/webcalendar/index.php?id=' . $userid . '&type=user&pluginname=' . $this->name . '">' . $Language->getText('user_home','view_webcalendar') .'</a></p>';
+			}
+		} elseif ($hookname == "project_admin_plugins") {
+			global $Language;
+			// this displays the link in the project admin options page to it´s  webcalendar administration
+			$group_id = $params['group_id'];
+			$group = &group_get_object($group_id);
+			
+			if ( $group->usesPlugin ( $this->name ) ) {
+				echo '<a href="/plugins/webcalendar/index.php?id=' . $group->getID() . '&type=admin&pluginname=' . $this->name . '">' . $Language->getText('project_admin','webcalendar') . '</a><br />';
+			}
+			
+		}												    
+		elseif ($hookname == "call_user_cal") {
+			//my/index.php line 365
+			?>
+			
+			<div id="cal" class="tabbertab" title="WebCalendar"  >
+			<table width="100%" cellspacing="0" cellpadding="0" border="0" ><tr align="center" ><td >
+			<iframe name="webcal" src="/plugins/webcalendar/login.php?type=user" border=no scrolling="yes" width="100%" height="700"></iframe>
+			</td></tr></table>
+			</div>
+			<script>
+			function reload_webcal() {
+			frames['webcal'].location.replace('/plugins/webcalendar/login.php?type=user');
+			
+			}
+			</script>
+			<?php		
+		}
+		elseif ($hookname == "call_user_js") {
+			// my/index.php line 67
+			
+			?>
+			onclick="reload_webcal()"
+			<?php		
+		}
+		elseif ($hookname == "add_cal_user") { 
+				//argument user_id
+				//user.class line 590
+				//admin/userlist.php line 129
+				$query = "SELECT user_name,user_pw,email FROM users WHERE user_id = '".$params."'";
+				$res = db_query($query);
+				$row = db_fetch_array($res);
+				$cal_query = "INSERT INTO webcal_user (cal_login, cal_passwd, cal_email,cal_firstname, cal_is_admin) VALUES ('" . $row['user_name'] . "','" . $row['user_pw'] . "','" . $row['email'] . "','" . $row['user_name'] . "','N')";
+				$res_cal = db_query($cal_query);	
+		}
+		elseif ($hookname == "del_cal_user") { 
+				//argument user_id
+				//admin/userlist.php line 122
+				$query = "SELECT user_name,user_pw,email FROM users WHERE user_id = '".$params."'";
+				$res = db_query($query);
+				$row = db_fetch_array($res);
+				$cal_query = "DELETE FROM webcal_user WHERE cal_login = '" . $row['user_name'] . "'";
+				$res_cal = db_query($cal_query);	
+				db_query("DELETE FROM webcal_asst WHERE cal_boss = '" . $row['user_name'] . "' OR cal_assistant = '" . $row['user_name'] . "'");
+				db_query("DELETE FROM webcal_entry_user WHERE cal_login = '" . $row['user_name'] . "' ");
+		}
+		elseif ($hookname == "add_cal_group") {
+				//argument group_id
+				//approve_pending.php line 69,80 
+				$query = "SELECT  unix_group_name,groups.group_id,group_name,email FROM groups,users,user_group WHERE groups.group_id = '".$params."' AND groups.group_id = user_group.group_id AND user_group.user_id = users.user_id AND user_group.admin_flags = 'A' ";
+				$res = db_query($query);
+				$row = db_fetch_array($res);
+				$cal_query = "INSERT INTO webcal_user (cal_login, cal_passwd, cal_firstname,cal_email) VALUES ('" . $row['unix_group_name'] . "','cccc','" . addslashes($row['group_name']) . "','".$row['email']."')";
+				$res_cal = db_query($cal_query);
+				
+		
+		}
+		elseif ($hookname == "del_cal_group") {
+				//argument group_id
+				//approve_pending.php line 90 
+				$query = "SELECT  unix_group_name,group_id,group_name FROM groups WHERE group_id = '".$params."' ";
+				$res = db_query($query);
+				$row = db_fetch_array($res);
+				$cal_query = "DELETE FROM webcal_user WHERE cal_login = '" . $row['unix_group_name'] . "'";
+				$res_cal = db_query($cal_query);
+				db_query("DELETE FROM webcal_asst WHERE cal_boss = '" . $row['unix_group_name'] . "' OR cal_assistant = '" . $row['unix_group_name'] . "'");
+				db_query("DELETE FROM webcal_entry_user WHERE cal_login = '" . $row['unix_group_name'] . "' ");
+		}
+		elseif ($hookname == "change_cal_permission") {
+				//argument user_id -> $params[0]et group_id -> $params[1]
+				//project/admin/index.php line 72,87,103
+				//project/admin/massfinish.php line 50
+				
+				
+				
+				$query_flags = "SELECT value,admin_flags FROM user_group,role_setting WHERE role_setting.role_id = user_group.role_id AND user_group.user_id = '".$params[0]."' AND user_group.group_id = '".$params[1]."' AND role_setting.section_name = 'webcal'";
+				
+				$res = db_query($query_flags);
+				$row_flags = db_fetch_array($res);
+				
+				//get user name :
+				$query_nom_boss = "SELECT unix_group_name FROM groups WHERE group_id = '".$params[1]."' ";
+				$res_nom_boss = db_query($query_nom_boss);
+				$row_nom_boss = db_fetch_array($res_nom_boss);
+				
+				
+				$query_nom_user = "SELECT user_name,email FROM users WHERE user_id = '".$params[0]."' ";
+				$res_nom_user = db_query($query_nom_user);
+				$row_nom_user = db_fetch_array($res_nom_user);
+				
+				//flag verification
+				$query_flags = "SELECT COUNT(*) FROM webcal_asst WHERE cal_boss = '".$row_nom_boss['unix_group_name']."' AND cal_assistant = '".$row_nom_user['user_name']."'";
+				$res = db_query($query_flags);
+				$row_num = db_fetch_array($res);
+				
+				//select email
+				$query_mail ="SELECT cal_email FROM webcal_user WHERE  cal_login = '".$row_nom_boss['unix_group_name']."'";			
+				$res_mail = db_query($query_mail);
+				$row_mail = db_fetch_array($res_mail);	
+				$mail = $row_mail['cal_email'] ;
+				
+				//if group admin
+				if($params[1] == 1){
+				$query_flags_admin = "SELECT admin_flags FROM user_group WHERE user_id = '".$params[0]."' AND group_id = '".$params[1]."'";
+				$res_flags_admin = db_query($query_flags_admin);
+				$row_flags_admin = db_fetch_array($res_flags_admin);
+					if(trim($row_flags_admin['admin_flags']) == 'A'  ) {
+						$update_admin = "UPDATE webcal_user SET cal_is_admin = 'Y' WHERE cal_login = '".$row_nom_user['user_name']."'" ;
+					}
+					else {
+						$update_admin = "UPDATE webcal_user SET cal_is_admin = 'N' WHERE cal_login = '".$row_nom_user['user_name']."'" ;
+				
+					}
+					db_query($update_admin);
+				
+				}
+				
+				if(($row_num[0] != 1 ) && ($row_flags['value'] == 1)){
+					
+				$insert_ass =  "INSERT INTO webcal_asst (cal_boss, cal_assistant) VALUES ('".$row_nom_boss['unix_group_name']."','".$row_nom_user['user_name']."')";	
+				$res_insert  = db_query($insert_ass);
+				
+				//we add email of the new admin
+				$mail = str_replace($row_nom_user['email'],"",$mail);
+				$mail = str_replace(",".$row_nom_user['email'],"",$mail);
+								
+				if($mail == ""){
+					$virgule = "";	
+					}
+				else {
+					$virgule = ",";	
+					}
+									
+				$mail = $mail.$virgule.$row_nom_user['email'] ;
+				
+				
+				
+				//$mail = $row_mail['cal_email'].",".$row_nom_user['email'] ;
+				$update = "UPDATE webcal_user SET cal_email = '".trim($mail,',')."' WHERE cal_login = '".$row_nom_boss['unix_group_name']."'" ;
+				db_query($update);
+				}
+				elseif($row_num[0] == 1 && ($row_flags['value'] != 1)){
+				$del_ass = "DELETE FROM webcal_asst WHERE cal_boss = '".$row_nom_boss['unix_group_name']."' AND cal_assistant = '".$row_nom_user['user_name']."'";
+				$res_del = db_query($del_ass);	
+				
+				//we del email of the old admin
+				$mail = str_replace(",".$row_nom_user['email'],"",$row_mail['cal_email']) ;
+				$update = "UPDATE webcal_user SET cal_email = '".$mail."' WHERE cal_login = '".$row_nom_boss['unix_group_name']."'" ;
+				db_query($update);
+				}
+				
+				
+		}
+		elseif ($hookname == "change_cal_permission_default") {
+				//argument user_id -> $params[0]et group_id -> $params[1]
+				// Group.class line 2085
+				//$query_flags = "SELECT value FROM user_group,role_setting WHERE role_setting.role_id = user_group.role_id AND user_group.user_id = '".$params[0]."' AND user_group.group_id = '".$params[1]."' AND role_setting.section_name = 'test'";
+				
+				$query_flags = "SELECT admin_flags FROM user_group WHERE user_id = '".$params[0]."' AND group_id = '".$params[1]."'";
+				$res = db_query($query_flags);
+				$row_flags = db_fetch_array($res);
+				 
+				
+				
+				//get user name
+				$query_nom_boss = "SELECT unix_group_name FROM groups WHERE group_id = '".$params[1]."' ";
+				$res_nom_boss = db_query($query_nom_boss);
+				$row_nom_boss = db_fetch_array($res_nom_boss);
+				
+				
+				$query_nom_user = "SELECT user_name,email FROM users WHERE user_id = '".$params[0]."' ";
+				$res_nom_user = db_query($query_nom_user);
+				$row_nom_user = db_fetch_array($res_nom_user);
+				
+				//verif du flag sur webcal
+				$query_flags = "SELECT COUNT(*) FROM webcal_asst WHERE cal_boss = '".$row_nom_boss['unix_group_name']."' AND cal_assistant = '".$row_nom_user['user_name']."'";
+				$res = db_query($query_flags);
+				$row_num = db_fetch_array($res);
+				
+				 //select email
+				$query_mail ="SELECT cal_email FROM webcal_user WHERE  cal_login = '".$row_nom_boss['unix_group_name']."'";			
+				$res_mail = db_query($query_mail);
+				$row_mail = db_fetch_array($res_mail);
+				$mail = $row_mail['cal_email']; 
+				
+				if(($row_num[0] != 1 ) && (trim($row_flags['admin_flags']) == 'A')){
+					//recuperer le nom du user et du group
+				$insert_ass =  "INSERT INTO webcal_asst (cal_boss, cal_assistant) VALUES ('".$row_nom_boss['unix_group_name']."','".$row_nom_user['user_name']."')";	
+				$res_insert  = db_query($insert_ass);
+				
+				//we add email of the new admin
+				$mail = str_replace($row_nom_user['email'],"",$mail);
+				$mail = str_replace(",".$row_nom_user['email'],"",$mail);
+								
+				if($mail == ""){
+					$virgule = "";	
+					}
+				else {
+					$virgule = ",";	
+					}
+									
+				$mail = $mail.$virgule.$row_nom_user['email'] ;
+								
+				//$mail = $row_mail['cal_email'].",".$row_nom_user['email'] ;
+				$update = "UPDATE webcal_user SET cal_email = '".trim($mail,',')."' WHERE cal_login = '".$row_nom_boss['unix_group_name']."'" ;
+				db_query($update);
+				}
+				elseif($row_num[0] == 1 && (trim($row_flags['admin_flags']) != 'A')){
+				$del_ass = "DELETE FROM webcal_asst WHERE cal_boss = '".$row_nom_boss['unix_group_name']."' AND cal_assistant = '".$row_nom_user['user_name']."'";
+				$res_del = db_query($del_ass);	
+				
+				//we del email of the old admin
+				$mail = str_replace(",".$row_nom_user['email'],"",$row_mail['cal_email']) ;
+				$update = "UPDATE webcal_user SET cal_email = '".$mail."' WHERE cal_login = '".$row_nom_boss['unix_group_name']."'" ;
+				db_query($update);
+				}
+				
+		}
+		elseif ($hookname == "change_cal_permission_auto") {
+				//argument $params group_id
+				// project/admin/roleedit.php line 85
+				
+				$query_flags = "SELECT value, user_id FROM user_group,role_setting WHERE role_setting.role_id = user_group.role_id AND role_setting.section_name = 'webcal' AND group_id = '".$params."'" ;				
+				$res = db_query($query_flags);
+				if($res){
+						while( $row_flags = db_fetch_array($res)){
+						
+						
+						
+								//get the group and user names
+								$query_nom_boss = "SELECT unix_group_name FROM groups WHERE group_id = '".$params."' ";
+								$res_nom_boss = db_query($query_nom_boss);
+								$row_nom_boss = db_fetch_array($res_nom_boss);
+								
+								
+								$query_nom_user = "SELECT user_name,email FROM users WHERE user_id = '".$row_flags['user_id']."' ";
+								$res_nom_user = db_query($query_nom_user);
+								$row_nom_user = db_fetch_array($res_nom_user);
+								
+								//verif if the user is admin
+								$query_flags = "SELECT COUNT(*) FROM webcal_asst WHERE cal_boss = '".$row_nom_boss['unix_group_name']."' AND cal_assistant = '".$row_nom_user['user_name']."'";
+								$res_count = db_query($query_flags);
+								$row_num = db_fetch_array($res_count);
+								 								
+								//select email
+								$query_mail ="SELECT cal_email FROM webcal_user WHERE  cal_login = '".$row_nom_boss['unix_group_name']."'";			
+								$res_mail = db_query($query_mail);
+								$row_mail = db_fetch_array($res_mail);
+								$mail = $row_mail['cal_email'];
+								
+								if(($row_num[0] != 1 ) && ($row_flags['value'] == 1)){
+								//recuperer le nom du user et du group
+								$insert_ass =  "INSERT INTO webcal_asst (cal_boss, cal_assistant) VALUES ('".$row_nom_boss['unix_group_name']."','".$row_nom_user['user_name']."')";	
+								$res_insert  = db_query($insert_ass);
+								
+								//we add email of the new admin
+								$mail = str_replace($row_nom_user['email'],"",$mail);
+								$mail = str_replace(",".$row_nom_user['email'],"",$mail);
+								
+								if($mail == ""){
+									$virgule = "";	
+									}
+									else {
+									$virgule = ",";	
+									}
+									
+								$mail = $mail.$virgule.$row_nom_user['email'] ;
+								
+								//$mail = $row_mail['cal_email'].",".$row_nom_user['email'] ;
+								$update = "UPDATE webcal_user SET cal_email = '".trim($mail,',')."' WHERE cal_login = '".$row_nom_boss['unix_group_name']."'" ;
+								db_query($update);
+								
+								}
+								elseif($row_num[0] == 1 && ($row_flags['value'] != 1)){
+								$del_ass = "DELETE FROM webcal_asst WHERE cal_boss = '".$row_nom_boss['unix_group_name']."' AND cal_assistant = '".$row_nom_user['user_name']."'";
+								$res_del = db_query($del_ass);	
+								
+								//we del email of the old admin
+								$mail = str_replace(",".$row_nom_user['email'],"",$row_mail['cal_email']) ;
+								$update = "UPDATE webcal_user SET cal_email = '".$mail."' WHERE cal_login = '".$row_nom_boss['unix_group_name']."'" ;
+								db_query($update);
+								}
+						}
+				}
+				
+		}
+		elseif ($hookname == "add_cal_link_father") {
+				//argument id du fils --> $params[0], id du pere--> $params[1]
+				//plugin hierachy wait_son.php line 36
+				$query_hierarchy = "select p1.group_id as father_id,p1.unix_group_name as father_unix_name,p1.group_name as father_name,p2.group_id as son_id,p2.unix_group_name as son_unix_name,p2.group_name as son_name from groups as p1,groups as p2,plugin_projects_hierarchy where p1.group_id=plugin_projects_hierarchy.project_id AND plugin_projects_hierarchy.project_id = '".$params[1]."' and p2.group_id=plugin_projects_hierarchy.sub_project_id AND plugin_projects_hierarchy.sub_project_id = '".$params[0]."'and plugin_projects_hierarchy.activated='t' AND plugin_projects_hierarchy.link_type='shar'";
+				$res_hierarchy = db_query($query_hierarchy);
+				if($res_hierarchy){
+						while($row_hierarchy = db_fetch_array($res_hierarchy)) {
+							$query_entry = "SELECT cal_id FROM webcal_entry_user WHERE cal_login = '".$row_hierarchy['son_unix_name']."' AND cal_status = 'A'" ;
+							$res_entry = db_query($query_entry);
+							if($res_entry){
+								while($row_entry = db_fetch_array($res_entry)) {
+								$insert_entry = "INSERT INTO webcal_entry_user (cal_id,cal_login,cal_status) VALUES ('".$row_entry['cal_id']."','".$row_hierarchy['father_unix_name']."','A')";	
+								$res_insert_entry = db_query($insert_entry);
+								}
+							}
+						}	
+						
+					}
+		}
+		elseif ($hookname == "add_cal_link_father_event") {
+				//argument name of the son --> $params[0], id_cal--> $params[1]
+				//webcalendar/edit_entry_handler.php line 390
+				//webcalendar/approve_entry.php line 21
+				$query_nom = "SELECT group_id FROM groups WHERE unix_group_name = '".$params[0]."'";
+				$res_nom = db_query($query_nom);
+				$row_nom = db_fetch_array($res_nom);
+				$query_pere = "SELECT project_id, unix_group_name FROM plugin_projects_hierarchy, groups WHERE plugin_projects_hierarchy.project_id = groups.group_id AND sub_project_id = '".$row_nom['group_id']."' AND link_type = 'shar' AND activated = true";
+				$res_pere = db_query($query_pere);
+				if($res_pere){
+					$row_pere = db_fetch_array($res_pere);
+					$insert_entry = "INSERT INTO webcal_entry_user (cal_id,cal_login,cal_status) VALUES ('".$params[1]."','".$row_pere['unix_group_name']."','A')";	
+					$res_insert  = db_query($insert_entry);
+				}
+				
+		}
+		elseif ($hookname == "del_cal_link_father") {
+				//argument id son --> $params[0], id father--> $params[1]
+				//plugin hierachy wait_son.php line 36
+				$query_hierarchy = "select p1.group_id as father_id,p1.unix_group_name as father_unix_name,p1.group_name as father_name,p2.group_id as son_id,p2.unix_group_name as son_unix_name,p2.group_name as son_name from groups as p1,groups as p2,plugin_projects_hierarchy where p1.group_id=plugin_projects_hierarchy.project_id AND plugin_projects_hierarchy.project_id = '".$params[1]."' and p2.group_id=plugin_projects_hierarchy.sub_project_id AND plugin_projects_hierarchy.sub_project_id = '".$params[0]."'and plugin_projects_hierarchy.activated='t' AND plugin_projects_hierarchy.link_type='shar'";
+				$res_hierarchy = db_query($query_hierarchy);
+				if($res_hierarchy){
+						while($row_hierarchy = db_fetch_array($res_hierarchy)) {
+							$query_entry = "SELECT cal_id FROM webcal_entry_user WHERE cal_login = '".$row_hierarchy['son_unix_name']."' " ;
+							$res_entry = db_query($query_entry);
+							if($res_entry){
+								while($row_entry = db_fetch_array($res_entry)) {
+								$insert_entry = "DELETE FROM webcal_entry_user WHERE cal_id = '".$row_entry['cal_id']."' AND cal_login = '".$row_hierarchy['father_unix_name']."'";	
+								$res_insert_entry = db_query($insert_entry);
+								}
+							}
+						}	
+						
+					}
+		}
+		elseif ($hookname == "del_cal_link_father_event") {
+				//argument id son --> $params[0], id_cal--> $params[1]
+				
+		}
+		elseif ($hookname == "change_cal_password") {
+				//argument user_id
+				//account/change_pw.php line 79
+				$query_name = "SELECT user_name,user_pw,email  FROM users WHERE user_id = '".$params."'" ;
+				$res_name = db_query($query_name);
+				$row_name = db_fetch_array($res_name);
+				
+				$update = "UPDATE webcal_user SET cal_passwd = '".$row_name['user_pw']."', cal_email = '".$row_name['email']."' WHERE cal_login = '".$row_name['user_name']."'";
+				$res_update = db_query($update); 
+						
+		}
+		elseif ($hookname == "change_cal_mail") {
+				//argument user_id
+				//account/change_email-complete.php line 63
+				 
+				$query_name = "SELECT user_name,user_pw,email  FROM users WHERE user_id = '".$params."'" ;
+				$res_name = db_query($query_name);
+				$row_name = db_fetch_array($res_name);
+				
+				$query_old = "SELECT cal_email FROM webcal_user WHERE cal_login = '".$row_name['user_name']."'" ;
+				$res_old = db_query($query_old);
+				$row_old = db_fetch_array($res_old);
+				
+				//get all the cal_login where you need to change mail
+				$query_all_mail = "SELECT cal_login, cal_email FROM webcal_user WHERE cal_email LIKE '%".$row_old['cal_email']."%'" ;
+				$res_all_mail = db_query($query_all_mail);
+				print $query_all_mail;
+				while($row_all_mail = db_fetch_array($res_all_mail)){
+					$mail = str_replace($row_old['cal_email'],$row_name['email'],$row_all_mail['cal_email']);
+					$update = "UPDATE webcal_user SET cal_passwd = '".$row_name['user_pw']."', cal_email = '".$mail."' WHERE cal_login = '".$row_all_mail['cal_login']."'";
+					$res_update = db_query($update); 
+					
+				}
+								
+						
+		}
+		elseif ($hookname == "cal_link_group" ){
+		// www/include/project_home.php line 418
+		//params = group_id
+		print '<hr size="1" />';
+		print '<a href="/plugins/webcalendar/index2.php?type=group&group_id='.$params.'">Webcalendar</a> ';
+		}
+		 
+	}
+}
+
+// Local Variables:
+// mode: php
+// c-file-style: "bsd"
+// End:
+
+?>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/db/webcalendar-init.sql
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/db/webcalendar-init.sql	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/db/webcalendar-init.sql	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,372 @@
+CREATE TABLE webcal_user (
+  cal_login VARCHAR(25) NOT NULL,
+  cal_passwd VARCHAR(32),
+  cal_lastname VARCHAR(25),
+  cal_firstname VARCHAR(25),
+  cal_is_admin CHAR(1) DEFAULT 'N',
+  cal_email VARCHAR(75),
+  PRIMARY KEY ( cal_login )
+);
+
+INSERT INTO webcal_user ( cal_login, cal_passwd, cal_lastname, cal_firstname, cal_is_admin ) VALUES ( 'admin', '21232f297a57a5a743894a0e4a801fc3', 'Administrator', 'Default', 'Y' );
+
+
+CREATE TABLE webcal_entry (
+  cal_id INT NOT NULL,
+  cal_group_id INT,
+  cal_ext_for_id INT NULL,
+  cal_create_by VARCHAR(25) NOT NULL,
+  cal_date INT NOT NULL,
+  cal_time INT,
+  cal_mod_date INT,
+  cal_mod_time INT,
+  cal_duration INT NOT NULL,
+  cal_priority INT DEFAULT 2,
+  cal_type CHAR(1) DEFAULT 'E',
+  cal_access CHAR(1) DEFAULT 'P',
+  cal_name VARCHAR(80) NOT NULL,
+  cal_description TEXT,
+  PRIMARY KEY ( cal_id )
+);
+
+
+CREATE TABLE webcal_entry_repeats (
+   cal_id INT DEFAULT '0' NOT NULL,
+   cal_type VARCHAR(20),
+   cal_end INT,
+   cal_frequency INT DEFAULT '1',
+   cal_days CHAR(7),
+   PRIMARY KEY (cal_id)
+);
+
+
+CREATE TABLE webcal_entry_repeats_not (
+  cal_id INT NOT NULL,
+  cal_date INT NOT NULL,
+  PRIMARY KEY ( cal_id, cal_date )
+);
+
+
+CREATE TABLE webcal_entry_user (
+  cal_id int DEFAULT '0' NOT NULL,
+  cal_login varchar(25) DEFAULT '' NOT NULL, 
+  cal_status char(1) DEFAULT 'A' NOT NULL,
+  cal_category INT DEFAULT NULL,
+  PRIMARY KEY ( cal_id,cal_login )
+);
+
+
+CREATE TABLE webcal_entry_ext_user (
+  cal_id INT DEFAULT 0 NOT NULL,
+  cal_fullname VARCHAR(50) NOT NULL,
+  cal_email VARCHAR(75) NOT NULL,
+  PRIMARY KEY ( cal_id, cal_fullname )
+);
+
+
+CREATE TABLE webcal_user_pref (
+  cal_login varchar(25) NOT NULL,
+  cal_setting varchar(25) NOT NULL,
+  cal_value varchar(100),
+  PRIMARY KEY ( cal_login, cal_setting )
+);
+
+
+
+CREATE TABLE webcal_user_layers (
+  cal_layerid INT DEFAULT '0' NOT NULL,
+  cal_login varchar(25) NOT NULL,
+  cal_layeruser varchar(25) NOT NULL,
+  cal_color varchar(25),
+  cal_dups CHAR(1) DEFAULT 'N',
+  PRIMARY KEY ( cal_login, cal_layeruser )
+);
+
+
+
+CREATE TABLE webcal_site_extras (
+  cal_id INT DEFAULT '0' NOT NULL,
+  cal_name VARCHAR(25) NOT NULL,
+  cal_type INT NOT NULL,
+  cal_date INT DEFAULT '0',
+  cal_remind INT DEFAULT '0',
+  cal_data TEXT,
+  PRIMARY KEY ( cal_id, cal_name, cal_type )
+);
+
+
+CREATE TABLE webcal_reminder_log (
+  cal_id INT DEFAULT '0' NOT NULL,
+  cal_name VARCHAR(25) NOT NULL,
+  cal_event_date INT NOT NULL DEFAULT 0,
+  cal_last_sent INT NOT NULL DEFAULT 0,
+  PRIMARY KEY ( cal_id, cal_name, cal_event_date )
+);
+
+CREATE TABLE webcal_group (
+  cal_group_id INT NOT NULL,
+  cal_owner VARCHAR(25) NOT NULL,
+  cal_name VARCHAR(50) NOT NULL,
+  cal_last_update INT NOT NULL,
+  PRIMARY KEY ( cal_group_id )
+);
+
+CREATE TABLE webcal_group_user (
+  cal_group_id INT NOT NULL,
+  cal_login VARCHAR(25) NOT NULL,
+  PRIMARY KEY ( cal_group_id, cal_login )
+);
+
+CREATE TABLE webcal_view (
+  cal_view_id INT NOT NULL,
+  cal_owner VARCHAR(25) NOT NULL,
+  cal_name VARCHAR(50) NOT NULL,
+  cal_view_type CHAR(1),
+  cal_is_global CHAR(1) DEFAULT 'N' NOT NULL,
+  PRIMARY KEY ( cal_view_id )
+);
+
+CREATE TABLE webcal_view_user (
+  cal_view_id INT NOT NULL,
+  cal_login VARCHAR(25) NOT NULL,
+  PRIMARY KEY ( cal_view_id, cal_login )
+);
+
+CREATE TABLE webcal_config (
+  cal_setting VARCHAR(50) NOT NULL,
+  cal_value VARCHAR(100) NOT NULL,
+  PRIMARY KEY ( cal_setting )
+);
+
+
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'application_name', 'WebCalendar' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'LANGUAGE', 'Browser-defined' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'demo_mode', 'N' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'require_approvals', 'Y' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'groups_enabled', 'N' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'user_sees_only_his_groups', 'N' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'categories_enabled', 'N' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'allow_conflicts', 'N' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'conflict_repeat_months', '6' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'disable_priority_field', 'N' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'disable_access_field', 'N' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'disable_participants_field', 'N' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'disable_repeating_field', 'N' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'allow_view_other', 'Y' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'email_fallback_from', 'youremailhere' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'remember_last_login', 'Y' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'allow_color_customization', 'Y' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('BGCOLOR','#FFFFFF');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('TEXTCOLOR','#000000');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('H2COLOR','#000000');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('CELLBG','#C0C0C0');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('WEEKENDBG','#D0D0D0');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('TABLEBG','#000000');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('THBG','#FFFFFF');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('THFG','#000000');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('POPUP_FG','#000000');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('POPUP_BG','#FFFFFF');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('TODAYCELLBG','#FFFF33');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'STARTVIEW', 'week.php' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'WEEK_START', '0' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'TIME_FORMAT', '12' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'DISPLAY_UNAPPROVED', 'Y' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'DISPLAY_WEEKNUMBER', 'Y' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'WORK_DAY_START_HOUR', '8' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'WORK_DAY_END_HOUR', '17' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'send_email', 'N' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'EMAIL_REMINDER', 'Y' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'EMAIL_EVENT_ADDED', 'Y' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'EMAIL_EVENT_UPDATED', 'Y' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'EMAIL_EVENT_DELETED', 'Y' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'EMAIL_EVENT_REJECTED', 'Y' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('auto_refresh', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('nonuser_enabled', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('allow_html_description', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('reports_enabled', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('DISPLAY_WEEKENDS', 'Y');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('DISPLAY_DESC_PRINT_DAY', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('DATE_FORMAT', '__month__ __dd__, __yyyy__');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('TIME_SLOTS', '12');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('TIMED_EVT_LEN', 'D');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('PUBLISH_ENABLED', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('DATE_FORMAT_MY', '__month__ __yyyy__');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('DATE_FORMAT_MD', '__month__ __dd__');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('CUSTOM_SCRIPT', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('CUSTOM_HEADER', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('CUSTOM_TRAILER', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('bold_days_in_year', 'Y');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('site_extras_in_popup', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('add_link_in_views', 'Y');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('allow_conflict_override', 'Y');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('limit_appts', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('limit_appts_number', '6');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('public_access', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('public_access_default_visible', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('public_access_default_selected', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('public_access_others', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('public_access_can_add', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('public_access_add_needs_approval', 'Y');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('public_access_view_part', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('nonuser_at_top', 'Y');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('allow_external_users', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('external_notifications', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('external_reminders', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('enable_gradients', 'N');
+
+
+
+CREATE TABLE webcal_entry_log (
+  cal_log_id INT NOT NULL,
+  cal_entry_id INT NOT NULL,
+  cal_login VARCHAR(25) NOT NULL,
+  cal_user_cal VARCHAR(25) NOT NULL,
+  cal_type CHAR(1) NOT NULL,
+  cal_date INT NOT NULL,
+  cal_time INT NOT NULL,
+  cal_text TEXT,
+  PRIMARY KEY ( cal_log_id )
+);
+
+
+CREATE TABLE webcal_categories (
+  cat_id INT NOT NULL,
+  cat_owner VARCHAR(25),
+  cat_name VARCHAR(80) NOT NULL,
+  PRIMARY KEY ( cat_id )
+);
+
+CREATE TABLE webcal_asst (
+  cal_boss VARCHAR(25) NOT NULL,
+  cal_assistant VARCHAR(25) NOT NULL,
+  PRIMARY KEY ( cal_boss, cal_assistant )
+);
+
+CREATE TABLE webcal_nonuser_cals (
+  cal_login VARCHAR(25) NOT NULL,
+  cal_lastname VARCHAR(25) NULL,
+  cal_firstname VARCHAR(25) NULL,
+  cal_admin VARCHAR(25) NOT NULL,
+  PRIMARY KEY ( cal_login )
+);
+
+CREATE TABLE webcal_import (
+  cal_import_id INT NOT NULL,
+  cal_name VARCHAR(50) NULL,
+  cal_date INT NOT NULL,
+  cal_type VARCHAR(10) NOT NULL,
+  cal_login VARCHAR(25) NULL,
+  PRIMARY KEY ( cal_import_id )
+);
+
+CREATE TABLE webcal_import_data (
+  cal_import_id INT NOT NULL,
+  cal_id INT NOT NULL,
+  cal_login VARCHAR(25) NOT NULL,
+  cal_import_type VARCHAR(15) NOT NULL,
+  cal_external_id VARCHAR(200) NULL,
+  PRIMARY KEY  ( cal_id, cal_login )
+);
+
+
+CREATE TABLE webcal_report (
+  cal_login VARCHAR(25) NOT NULL,
+  cal_report_id INT NOT NULL,
+  cal_is_global CHAR(1) DEFAULT 'N' NOT NULL,
+  cal_report_type VARCHAR(20) NOT NULL,
+  cal_include_header CHAR(1) DEFAULT 'Y' NOT NULL,
+  cal_report_name VARCHAR(50) NOT NULL,
+  cal_time_range INT NOT NULL,
+  cal_user VARCHAR(25) NULL,
+  cal_allow_nav CHAR(1) DEFAULT 'Y',
+  cal_cat_id INT NULL,
+  cal_include_empty CHAR(1) DEFAULT 'N',
+  cal_show_in_trailer CHAR(1) DEFAULT 'N',
+  cal_update_date INT NOT NULL,
+  PRIMARY KEY ( cal_report_id )
+);
+
+CREATE TABLE webcal_report_template (
+  cal_report_id INT NOT NULL,
+  cal_template_type CHAR(1) NOT NULL,
+  cal_template_text TEXT,
+  PRIMARY KEY ( cal_report_id, cal_template_type )
+);
+
+
+
+

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/script/webcalendar-init.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/script/webcalendar-init.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/script/webcalendar-init.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,162 @@
+<?php
+
+
+//create the config file for webcalendar
+$fichier_conf = "<?\n" . 
+		"install_password: 764b9c698569b4e77fd69db363fef414" .
+		"\ndb_type: postgresql" .
+		"\ndb_host: ".$sys_gfdbhost.
+		"\ndb_database: ".$sys_gfdbname.
+		"\ndb_login: ".$sys_gfdbuser.
+		"\ndb_password: ".$sys_gfdbpasswd.
+		"\ndb_persistent: true" .
+		"\nsingle_user_login:" . 
+		"\nreadonly: false" .
+		"\nuse_http_auth: false" .
+		"\nsingle_user: false" .
+		"\nuser_inc: user.php" .
+		"\n?>" ;
+
+$handle = fopen($sys_plugins_path . $pluginname . "/www/includes/settings.php", "w");
+fwrite($handle,$fichier_conf);
+fclose($handle);
+
+//user
+$query = "SELECT user_name,user_pw,email,user_id FROM users WHERE NOT user_name='None' ";
+$res = db_query($query);
+echo db_error();
+while ($row = db_fetch_array($res)) {
+	//verify if admin
+	$query_flags = "SELECT COUNT(*) FROM user_group WHERE user_id = '".$row['user_id']."' AND admin_flags = 'A'  AND group_id = '1'";
+	$res_flags = db_query($query_flags) ;
+	$row_flags = db_fetch_array($res_flags) ;
+	$cal_query = "INSERT INTO webcal_user (cal_login, cal_passwd, cal_email,cal_firstname, cal_is_admin) VALUES ('" . $row['user_name'] . "','" . $row['user_pw'] . "','" . $row['email'] . "','" . $row['user_name'] . "'";
+	if ($row_flags[0] == 1)
+		$cal_query .= ",'Y')";
+	else
+		$cal_query .= ",'N')";
+		
+	$cal_res = db_query($cal_query);
+
+}
+
+//group
+
+$query2 = "SELECT  unix_group_name,groups.group_id,group_name,email FROM groups,users,user_group WHERE groups.group_id >5 AND groups.group_id = user_group.group_id AND user_group.user_id = users.user_id AND user_group.admin_flags = 'A' ";
+$res2 = db_query($query2);
+while ($row2 = db_fetch_array($res2)) {
+	$cal_query2 = "INSERT INTO webcal_user (cal_login, cal_passwd, cal_firstname,cal_email) VALUES ('" . $row2['unix_group_name'] . "','qdkqshjddoshd','" . addslashes($row2['group_name']) . "','" . $row2['email'] . "')";
+
+	
+	//get for admin of project
+	$query_user_group = "SELECT user_group.user_id,user_name,email from user_group,users WHERE user_group.user_id = users.user_id AND group_id = '".$row2['group_id']."' AND admin_flags = 'A'" ;
+	//print $query_user_group ;
+	$res_user_group = db_query($query_user_group);
+	
+	//get the email of the admin
+	$query_mail ="SELECT cal_email FROM webcal_user WHERE  cal_login = '".$row2['unix_group_name']."'";			
+	$res_mail = db_query($query_mail);
+	$row_mail = db_fetch_array($res_mail);	
+	$mail = $row_mail['cal_email'];
+	
+	if($res_user_group){
+		while($row_user_group = db_fetch_array($res_user_group)) {
+			$insert_ass = "INSERT INTO webcal_asst (cal_boss, cal_assistant) VALUES ('".$row2['unix_group_name']."','".$row_user_group['user_name']."')"; 
+			$cal_res = db_query($insert_ass);
+			
+			//add email
+			$mail = str_replace($row_user_group['email'],"",$mail);
+			$mail = str_replace(",".$row_user_group['email'],"",$mail);
+			
+			if($mail == ""){
+			$virgule = "";	
+			}
+			else {
+			$virgule = ",";	
+			}
+			$mail = $mail.$virgule.$row_user_group['email'] ;
+			
+		}	
+			$update = "UPDATE webcal_user SET cal_email = '".trim($mail,',')."' WHERE cal_login = '".$row2['unix_group_name']."'" ;
+			db_query($update);
+			
+	} 
+	$cal_res = db_query($cal_query2); 
+
+}
+
+
+//link
+
+$query_hierarchy = "select p1.group_id as father_id,p1.unix_group_name as father_unix_name,p1.group_name as father_name,p2.group_id as son_id,p2.unix_group_name as son_unix_name,p2.group_name as son_name from groups as p1,groups as p2,plugin_projects_hierarchy where p1.group_id=plugin_projects_hierarchy.project_id and p2.group_id=plugin_projects_hierarchy.sub_project_id and plugin_projects_hierarchy.activated='t' AND plugin_projects_hierarchy.link_type='shar'";
+$res_hierarchy = db_query($query_hierarchy);
+if($res_hierarchy){
+		while($row_hierarchy = db_fetch_array($res_hierarchy)) {
+			$query_entry = "SELECT cal_id FROM webcal_entry_user WHERE cal_login = '".$row_hierarchy['son_unix_name']."' AND cal_status = 'A'" ;
+			$res_entry = db_query($query_entry);
+			if($res_entry){
+				while($row_entry = db_fetch_array($res_entry)) {
+				$insert_entry = "INSERT INTO webcal_entry_user (cal_id,cal_login,cal_status) VALUES ('".$row_entry['cal_id']."','".$row_hierarchy['father_unix_name']."','A')";	
+				$res_insert_entry = db_query($insert_entry);
+				}
+			}
+		}	
+		
+	}  
+
+//admin
+	
+$query_flags = "SELECT value, user_id, group_id FROM user_group,role_setting WHERE role_setting.role_id = user_group.role_id AND role_setting.section_name = 'webcal'" ;				
+				//$query_flags = "SELECT admin_flags FROM user_group WHERE user_id = '".$params[0]."' AND group_id = '".$params[1]."'";
+				$res = db_query($query_flags);
+				if($res){
+						while( $row_flags = db_fetch_array($res)){
+						
+						
+						
+								//get user name :
+								$query_nom_boss = "SELECT unix_group_name FROM groups WHERE group_id = '".$row_flags['group_id']."' ";
+								$res_nom_boss = db_query($query_nom_boss);
+								$row_nom_boss = db_fetch_array($res_nom_boss);
+								
+								
+								$query_nom_user = "SELECT user_name FROM users WHERE user_id = '".$row_flags['user_id']."' ";
+								$res_nom_user = db_query($query_nom_user);
+								$row_nom_user = db_fetch_array($res_nom_user);
+								
+								//webcal admin flags
+								$query_flags = "SELECT COUNT(*) FROM webcal_asst WHERE cal_boss = '".$row_nom_boss['unix_group_name']."' AND cal_assistant = '".$row_nom_user['user_name']."'";
+								$res_count = db_query($query_flags);
+								$row_num = db_fetch_array($res_count);
+								
+								//select email
+								$query_mail ="SELECT cal_email FROM webcal_user WHERE  cal_login = '".$row_nom_boss['unix_group_name']."'";			
+								$res_mail = db_query($query_mail);
+								$row_mail = db_fetch_array($res_mail);	
+								
+								if(($row_num[0] != 1 ) && ($row_flags['value'] == 1)){
+								//recuperer le nom du user et du group
+								$insert_ass =  "INSERT INTO webcal_asst (cal_boss, cal_assistant) VALUES ('".$row_nom_boss['unix_group_name']."','".$row_nom_user['user_name']."')";	
+								$res_insert  = db_query($insert_ass);
+								
+								//we add email of the new admin
+								$mail = $row_mail['cal_email'].",".$row_nom_user['email'] ;
+								$update = "UPDATE webcal_user SET cal_email = '".$mail."' WHERE cal_login = '".$row_nom_boss['unix_group_name']."'" ;
+								db_query($update);
+								}
+								elseif($row_num[0] == 1 && ($row_flags['value'] != 1)){
+								$del_ass = "DELETE FROM webcal_asst WHERE cal_boss = '".$row_nom_boss['unix_group_name']."' AND cal_assistant = '".$row_nom_user['user_name']."'";
+								$res_del = db_query($del_ass);
+								
+								//we del email of the old admin
+								$mail = str_replace(",".$row_nom_user['email'],"",$row_mail['cal_email']) ;
+								$update = "UPDATE webcal_user SET cal_email = '".$mail."' WHERE cal_login = '".$row_nom_boss['unix_group_name']."'" ;
+								db_query($update);	
+								}
+						}
+				}
+
+				
+
+
+?>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/.project
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/.project	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/.project	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>webcalendar</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>net.sourceforge.phpeclipse.parserbuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>net.sourceforge.phpeclipse.phpnature</nature>
+	</natures>
+</projectDescription>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/AUTHORS
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/AUTHORS	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/AUTHORS	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,75 @@
+Most of the code was written by Craig Knudsen <cknudsen at cknudsen.com>
+
+Other code (new features and bug fixes) provided by (and probably many others that I have inadvertantly missed):
+	Jukka Aittola <Jukka.Aittola at hut.fi>
+	Mike Baptiste <baptiste at cc-concepts.com>
+	Ralph Bossler <rbossler at gmx.de>
+	Toby Cabot <toby at toby.cabot@pobox.com>
+	Antonio Costa <accmdq at esoterica.pt>
+	Lachlan Cox <lachie at zip.com.au>
+	Matthew Crosby <mcrosby at marthon.org>
+	Dominik Fischer <dfischer at megla.de>
+	Tollef Fog Heen <tollef at add.no>
+	T.R. Fullhart <kayos at kayos.org>
+	Ken Harris <kharris at lhinfo.com>
+	Florian Helmberger <fh at enemy.org>
+	Michiel Holtkamp <michiel at reseau.nl>
+	Jeff Hoover <jhoov at thebusstop.net>
+	Lucie Houel <lyly134 at caramail.com>
+	Peter Huetmannsberger <huetmann at site38.ping.at>
+	Thomas James <tbjames at bellsouth.net>
+	Ian R. Justman <ianj at calweb.com>
+	Thorsten Klein <klein at lfm.rwth-aachen.de>
+	Ulrich Leodolter <ulrich at lab1.psy.univie.ac.at>
+	Benoit Maisonny <benoit at synclude.com>
+	Jonathan Mark <jhmark at xenops.com>
+	Ed Palmer <palmered at users.sourceforge.net>
+	Otto Paukner <Otto.Paukner at m-v-l.de>
+	Paul Reisdorf <preisdorf at binus.net>
+	Adam Roben <adam.roben at gmail.com>
+	David Rodrigues <drodrig at netextensions.com>
+	Adam Shantz <adamATadamshantzDOTcom>
+	Andy Skunza <askunza at dynamix-ltd.com>
+	Oliver Teuber <teuber at devicen.de>
+	Romuald Texier <romuald at idp9001.com>
+	Frederic Tyndiuk [email address suppressed]
+	Jan Willamowius <jan at mobile.de>
+	Vadim Zaliva <lord at crocodile.org>
+
+Translations:
+	Danish:
+		Allan Thraen <allan at 12go.dk>
+	Dutch:
+		Marcel van der Boom <marcel at hsdev.com>
+		Patrick Gutlich <pgutlich at casema.net>
+		Klaus Spithost <k.spithost at it-works.nl>
+	French:
+		Luc Capronnier
+		Olivier Piquerez <Piquerez at topd.ch>
+		Yves Moenner <yves.moenner at mailcity.com>
+		Romuald Texier <romualdt at free.fr>
+	German:
+		Markus Egartner <markus.egartner at kh.hallein.at>
+		Ralph Bossler <rbossler at gmx.de>
+		Peter Huetmannsberger <huetmann at site38.ping.at>
+	Italian:
+		Simone Cortesi <simone at cortesi.com>
+	Korean:
+		Joonyup Jeon <goodwill at wowbook.com>
+	Norwegian:
+		Pål Løberg/Magni Onsøien <initio at initio.no>
+	Portuguese:
+		Antonio Costa <accmdq at mail.esoterica.pt>
+		Nuno Lopes <nuno.lopes at maxitel.com>
+	Portuguese/Brazil:
+		Sérgio Oliveira <sloliv at terra.com.br>
+	Romanian:
+		Dan Protopopescu <protopop at physics.gla.ac.uk>
+	Russian:
+		Andre E. Bar'yudin <baryudin at pob.huji.ac.il>
+	Spanish:
+		Pedro Del Medico <pdmp at interhoster.com>
+	Swedish:
+		Jesper Thörn <jesper at thorn.as>
+	Turkish:
+		Atilla Kazanci <support at dig-it-berlin.de>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/GPL.html
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/GPL.html	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/GPL.html	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,558 @@
+<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 2.0//EN">
+<HTML>
+<HEAD>
+<TITLE>GNU General Public License - GNU Project - Free Software Foundation (FSF)</TITLE>
+<LINK REV="made" HREF="mailto:webmasters at www.gnu.org">
+<BASE HREF="http://www.gnu.org/licenses/gpl.html">
+</HEAD>
+<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#1F00FF" ALINK="#FF0000" VLINK="#9900DD">
+<H1>GNU General Public License</H1>
+<A HREF="/graphics/philosophicalgnu.html"><IMG SRC="/graphics/philosophical-gnu-sm.jpg"
+   ALT=" [image of a Philosophical GNU] "
+   WIDTH="160" HEIGHT="200"></A>
+
+<!-- Please keep this list alphabetical -->
+<!-- tower, gpl.ja.html is Japanese translation of THIS PAGE, -->
+<!-- NOT translation of GPL itself(gpl.ja.html contains the original --> 
+<!-- English version). So please do not remove the following. -->
+<!-- Thanks -mhatta -->
+<!-- The same for the Czech page. The entire text of GPL is not -->
+<!-- translated on this page. Thanks Sisao -->
+
+[ 
+  <A HREF="/licenses/gpl.cs.html">Czech</A>
+| <A HREF="/licenses/gpl.html">English</A>
+| <A HREF="/licenses/gpl.ja.html">Japanese</A>
+]
+
+<!-- It is best to not enumerate the translations here in a menu bar, -->
+<!-- It is best to have the users follow this link, so they have the FSF' -->
+<!-- explanation about translations being unofficial, etc. -->
+
+<P>
+<UL>
+  <LI><A HREF="/licenses/gpl-violation.html"><EM>What to do if you see a
+       possible GPL violation</EM></A>
+  <LI><A HREF="/licenses/translations.html"><EM>Translations
+       of the GPL</EM></A>
+  <LI><A HREF="/licenses/gpl-faq.html"><EM>GPL Frequently Asked Questions</EM></A>
+  <LI>The GNU General Public License (GPL)
+       <A HREF="/licenses/gpl.txt">in plain text format</A>
+  <LI>The GNU General Public License (GPL)
+       <A HREF="/licenses/gpl.texi">in Texinfo format</A>
+</UL>
+<P>       
+<HR>
+
+<P>
+
+<H2>Table of Contents</H2>
+<UL>
+
+  <LI><A NAME="TOC1" HREF="gpl.html#SEC1">GNU GENERAL PUBLIC LICENSE</A>
+<UL>
+<LI><A NAME="TOC2" HREF="gpl.html#SEC2">Preamble</A>
+<LI><A NAME="TOC3" HREF="gpl.html#SEC3">TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION</A>
+<LI><A NAME="TOC4" HREF="gpl.html#SEC4">How to Apply These Terms to Your New Programs</A>
+
+</UL>
+</UL>
+
+<P>
+
+<HR>
+
+<P>
+
+
+
+<H2><A NAME="SEC1" HREF="gpl.html#TOC1">GNU GENERAL PUBLIC LICENSE</A></H2>
+<P>
+Version 2, June 1991
+
+</P>
+
+<PRE>
+Copyright (C) 1989, 1991 Free Software Foundation, Inc.  
+59 Temple Place - Suite 330, Boston, MA  02111-1307, USA
+
+Everyone is permitted to copy and distribute verbatim copies
+of this license document, but changing it is not allowed.
+</PRE>
+
+
+
+<H2><A NAME="SEC2" HREF="gpl.html#TOC2">Preamble</A></H2>
+
+<P>
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+</P>
+<P>
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+</P>
+<P>
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+</P>
+<P>
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+</P>
+<P>
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+</P>
+<P>
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+</P>
+<P>
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+</P>
+<P>
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+</P>
+
+
+<H2><A NAME="SEC3" HREF="gpl.html#TOC3">TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION</A></H2>
+
+
+<P>
+
+<STRONG>0.</STRONG>
+ This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+<P>
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+<P>
+
+<STRONG>1.</STRONG>
+ You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+<P>
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+<P>
+
+<STRONG>2.</STRONG>
+ You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+<P>
+
+<UL>
+
+<LI><STRONG>a)</STRONG>
+     You must cause the modified files to carry prominent notices
+     stating that you changed the files and the date of any change.
+
+<P>
+<LI><STRONG>b)</STRONG>
+     You must cause any work that you distribute or publish, that in
+     whole or in part contains or is derived from the Program or any
+     part thereof, to be licensed as a whole at no charge to all third
+     parties under the terms of this License.
+
+<P>
+<LI><STRONG>c)</STRONG>
+     If the modified program normally reads commands interactively
+     when run, you must cause it, when started running for such
+     interactive use in the most ordinary way, to print or display an
+     announcement including an appropriate copyright notice and a
+     notice that there is no warranty (or else, saying that you provide
+     a warranty) and that users may redistribute the program under
+     these conditions, and telling the user how to view a copy of this
+     License.  (Exception: if the Program itself is interactive but
+     does not normally print such an announcement, your work based on
+     the Program is not required to print an announcement.)
+</UL>
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+<P>
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+<P>
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+<P>
+
+<STRONG>3.</STRONG>
+ You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+
+<!-- we use this doubled UL to get the sub-sections indented, -->
+<!-- while making the bullets as unobvious as possible. -->
+<UL>
+
+<LI><STRONG>a)</STRONG>
+     Accompany it with the complete corresponding machine-readable
+     source code, which must be distributed under the terms of Sections
+     1 and 2 above on a medium customarily used for software interchange; or,
+
+<P>
+<LI><STRONG>b)</STRONG>
+     Accompany it with a written offer, valid for at least three
+     years, to give any third party, for a charge no more than your
+     cost of physically performing source distribution, a complete
+     machine-readable copy of the corresponding source code, to be
+     distributed under the terms of Sections 1 and 2 above on a medium
+     customarily used for software interchange; or,
+
+<P>
+<LI><STRONG>c)</STRONG>
+     Accompany it with the information you received as to the offer
+     to distribute corresponding source code.  (This alternative is
+     allowed only for noncommercial distribution and only if you
+     received the program in object code or executable form with such
+     an offer, in accord with Subsection b above.)
+</UL>
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+<P>
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+<P>
+
+<STRONG>4.</STRONG>
+ You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+<P>
+
+<STRONG>5.</STRONG>
+ You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+<P>
+
+<STRONG>6.</STRONG>
+ Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+<P>
+
+<STRONG>7.</STRONG>
+ If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+<P>
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+<P>
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+<P>
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+<P>
+
+<STRONG>8.</STRONG>
+ If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+<P>
+
+<STRONG>9.</STRONG>
+ The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+<P>
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+<P>
+
+
+<STRONG>10.</STRONG>
+ If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+
+
+<P><STRONG>NO WARRANTY</STRONG></P>
+
+<P>
+
+<STRONG>11.</STRONG>
+ BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+<P>
+
+<STRONG>12.</STRONG>
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+<P>
+
+
+<H2>END OF TERMS AND CONDITIONS</H2>
+
+
+
+<H2><A NAME="SEC4" HREF="gpl.html#TOC4">How to Apply These Terms to Your New Programs</A></H2>
+
+<P>
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+</P>
+<P>
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+</P>
+
+<PRE>
+<VAR>one line to give the program's name and an idea of what it does.</VAR>
+Copyright (C) <VAR>yyyy</VAR>  <VAR>name of author</VAR>
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+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 General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+</PRE>
+
+<P>
+Also add information on how to contact you by electronic and paper mail.
+
+</P>
+<P>
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+</P>
+
+<PRE>
+Gnomovision version 69, Copyright (C) <VAR>year</VAR> <VAR>name of author</VAR>
+Gnomovision comes with ABSOLUTELY NO WARRANTY; for details
+type `show w'.  This is free software, and you are welcome
+to redistribute it under certain conditions; type `show c' 
+for details.
+</PRE>
+
+<P>
+The hypothetical commands <SAMP>`show w'</SAMP> and <SAMP>`show c'</SAMP> should show
+the appropriate parts of the General Public License.  Of course, the
+commands you use may be called something other than <SAMP>`show w'</SAMP> and
+<SAMP>`show c'</SAMP>; they could even be mouse-clicks or menu items--whatever
+suits your program.
+
+</P>
+<P>
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+</P>
+
+<PRE>
+Yoyodyne, Inc., hereby disclaims all copyright
+interest in the program `Gnomovision'
+(which makes passes at compilers) written 
+by James Hacker.
+
+<VAR>signature of Ty Coon</VAR>, 1 April 1989
+Ty Coon, President of Vice
+</PRE>
+
+<P>
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
+
+<HR>
+
+Return to <A HREF="/home.html">GNU's home page</A>.
+<P>
+FSF & GNU inquiries & questions to
+<A HREF="mailto:gnu at gnu.org"><EM>gnu at gnu.org</EM></A>.
+Other <A HREF="/home.html#ContactInfo">ways to contact</A> the FSF.
+<P>
+Comments on these web pages to
+<A HREF="mailto:webmasters at www.gnu.org"><EM>webmasters at www.gnu.org</EM></A>,
+send other questions to
+<A HREF="mailto:gnu at gnu.org"><EM>gnu at gnu.org</EM></A>.
+<P>
+Copyright notice above.<BR>
+Free Software Foundation, Inc.,
+59 Temple Place - Suite 330, Boston, MA  02111,  USA
+<P>
+Updated:
+<!-- hhmts start -->
+Last modified: Sun Jul 15 13:13:30 CEST 2001
+<!-- hhmts end -->
+<HR>
+</BODY>
+</HTML>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/NEWS
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/NEWS	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/NEWS	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,279 @@
+Version 1.0.4 (07 Jun 2006)
+  - Security fix: do not allow setting of "includedir" via URL when
+    register_globals is enabled in php.ini
+  - Updated Portugues translation
+Version 1.0.3 (11 Apr 2006)
+  - Patch 1456375: Day view - "Description" not translated, improper
+    handling of HTML in description
+  - Fixed bug 1444923: system settings error on save when ovrd=1 is used
+  - Fixed bug 1420859: Problems with overriding conflict
+  - Fixed bug 1445535: tables-db2.sql NULL usage was incorrect
+  - Patch 1279537: Don't display confidential events in upcoming.php
+  - Fixed bug 1406428: Bug in endhour
+  - Fixed bug 1438181: DBI Interbase-Firebird connection call has
+    wrong parameters
+  - Fixed bug 1279804: send_reminders.php fails in v1.0.1
+  - Fixed bug 1417585: vCal export of forever repeating events fails for Palm
+  - Fixed bug 1417529: Can't change public access layers
+  - Fixed bug 1397766: Tomorrow Report fails to This Week
+  - Fixed bug 1374014: Prefs page displays option to modify
+    Public Access calendar..
+  - Fixed bug 1382217 Glitch in handling of public access prefs
+  - Added support for DB2
+  - The following translations were updated:
+    Greek (new), Hungarian
+Version 1.0.2 (06 Dec 2005)
+  - Fixed vuln in layers: published vulnerability in layers_toggle.php
+    was fixed
+  - Security fixes: fixes for activity_log.php, export_handler.php,
+    edit_template.php, pref_handler.php and admin_handler.php
+    that deal with SQL Injection
+  - Fixed bug 1349621: Information disclosure vulnerabililty on failed login
+  - Fixed bug 1353363: publish.php logic error for public user?
+  - Fixed bug 1328589: typo in del_entry for read-only calendars.
+  - Added new time range options for reports: next 14/30/60/90/180/365 days
+    This allows reports to show events starting with current date
+  - Fixed bug: undefined variable warning in export_handler.php
+  - Fixed the following bug reports on SourceForge:
+    1296294: Javascript error when saving with empty description on IE
+    1265575: Bug in get_all_dates()
+  - Other bugs fixed:
+    + Added Romanian, Turkish, Welsh to config.php in places where they were
+      missing.
+  - New Features / Enhancements / Changes:
+  - The following translations were updated:
+    Czech, German, Polish
+Version 1.0.1 (19 Aug 2005)
+  - Fixed the following bug reports on SourceForge:
+      1221434: Improved iCal import support for BYMONTHDAY in ics
+      1261571: Overriding a conflict when name has double quotes
+      1233798: Catagory settings for Boss/Assistant not working
+      1245755: Unbalanced span tags
+      1211309: Notification message language incorrect
+      1204229: "Untimed event" default broken since bug 1202127 fix
+      1205680: upcoming.php was including unapproved.  will now use
+        user preferences for displaying unapproved.
+      1212667: Install script - Database Type Problem
+      1218113: iCal ATTENDEE error if event is deleted
+  - Other bugs fixed:
+    - Fixed bug: use of & in report.php and view_entry.php
+    + Fixed bug: include path problems for opening settings.php file
+    + Fixed security: exploit allows execution of code downloaded from
+      remote server
+    + URLs in month.php did not include '?'
+    + Category was lost wan clicking on prev/next month in month.php
+    + Fixed login looping related to register_long_arrays
+  - New Features / Enhancements / Changes:
+    + Applied patch 1171807: reminder sent late if cron run at exact
+      second of reminder (was accidentally not included in 1.0.0)
+  - The following translations were updated:
+    + Danish, French, German, Norwegian, Polish, Portuguese_BR
+
+Version 1.0.0 (17 May 2005) aka "Buster"
+  - Fixed the following bug reports on SourceForge:
+      1202127: [ 1187734 ] Timezone offset problems still exist
+      1201821: Bypass user_sees_only_his_groups
+      1193835: Creator cannot "edit" a nonuser-event after Admin changes it.
+      1193579: Untimed shows up wrong in edit page
+      1189515: Possible to create blank usernames
+      1190687: users.php called as public
+      1190699: export.php available to public
+      1190704: public can access assistant_edit.php
+      1103215: Invalid work hours
+      1187734: Timezone offset problem
+      1120897: Conflict with exceptions
+      1181682: Report with no name entered -> phantom report!
+      1179423: private events displayed on reports
+      1183714: Translation error
+      1154432: vCal import from Mozilla fails to translate quoted-printable
+      1176164: iCalendar import fatally corrupts database
+      1181682: Reports with just spaces for a name cannot be edited
+      1179403: Availability selection fails when Time Format =24
+      1065461: timezone offset & all-day events
+      1107253: time zone offset
+      1140453: Time zone offset in email notifications
+      1148602: External Recipients with same name fails
+      1160167: 12AM Events cause display problems in edit_entry.php
+      1158769: Category lost when modifing event by Admin
+      1168686: Month display collides with minicals on Safari
+      1168682: RC3 Language Detection Broken for Safari.
+      1169403: Public Access not default selected if Particiapants not shown. 
+      1169078: Bad function call in import_handler.php
+      1168092: Overlapping events display problem
+      1167281: View_l loses colour for "today"
+      1167790: class="selectedday" assignments in other than day.php
+      1162486: Path exposure issue with view_entry.php
+
+  - Other bugs fixed:
+    + Fixed problem with ical import weekly BYDAY parsing in import_ical.php
+    + Fixed problem with missing $cat_id in week and day URLs in month.php
+    + Fixed problem with second edit of a single event in a repeating series 
+      losing linkage with the original event.
+    + Fixed problem with views_edit.php, select groups not returning menbers
+    + Fixed problem with 12AM event not adding hour=0 to URL in week.php
+    + Fixed day.php rendering problem in Safar
+    + Applied bug fix 1151442: Overlapping events display error in week.php
+
+  - New Features / Enhancements / Changes:
+    + Split import/export back to two separate links & pages
+    + Moved contents of scheduling tab to details tab
+    + Updated install/index.php to improve security and display advanced php info
+    + Added new default webcal_config values to all sql table definition files
+    + Removed most instances of htmlentities as unneeded
+    + Admin no longer needs to approve Public events that they create
+    + Added option to set LDAP_OPT_PROTOCOL_VERSION in user-ldap.php
+    + Updated install web page to work better on Windows systems.
+      Added display of current PHP settings.
+    + When viewing a report, if allow_html_description is enabled but no HTML
+      is found in an event description, use nl2br to preserve plain text
+      formatting.
+
+  - The following translations were updated:
+    + Danish, Finnish, German, French, Japanese, Norwegian, Polish
+
+---------------------------------------------------------------------------
+
+Version 1.0RC3 (11 Mar 2005)
+  - Fixed the following bug reports on SourceForge:
+      1156729: Global-view with no valid user creates a non-translatable message
+      1152863: Japanese strings munged by reports.php and upcoming.php
+      1124461: Apostrophe in Text Aborts Translation
+      1154854: Nonuser cals not showing up in views
+      1154007: Highlight today in Year view
+      1088772: Nonuser calendar w/ Public as default participant
+      1145390: Merge arrays with array_merge vs + in view_t.php
+      1151442: Overlapping events display error in day.php
+      1146037: Availibility legend size not dynamic and not centered in IE.
+      1148603: Assistants can't view Bosses Unapproved Events.
+      1145342: Category selection not tranferred to edit_entry page.
+      1118121: get_admins in user-ldap has bad search
+      1123508: RC3 browser language detection always returns none.
+      1112787: missing charset in upcoming.php
+  - Other bugs fixed:
+    + Fixed problem with upcoming.php header. xml:lang and lang were set to full 
+      LANGUAGE value, not abbreviation.
+    + Fixed problem with upcoming.php with "You are not Authorized" error message
+      being sent without a header. 
+    + Fixed problem with popups.php with long text strings going off screen.
+      Maximum width is now configurable.
+    + Fixed issue with Application Name containing ? characters in logon.php.
+      If Application Name = "Title" then translate, else use Admin defined 
+      name and run through htmlspecialchars
+    + Fixed issues with display_small_month URLs. Extra & if no $user specified.
+    - Add meta tag for charset since MSIE requires it.
+    + Fixed broken advanced search that would not allowing searching other
+      users' calendars.  Also added searching non-user calendars.
+    + Added javascript that enables visibility of the start/end time or
+      duration on the edit_entry page from availability.php
+    + Fixed printer friendly view problem. With refresh on, the refresh URL
+      reverted to the regular page
+    + Fixed date_selection_html function to include values for day control
+    + Purge events was not deleting from webcal_entry_ext_user table
+    + Fixed issues with ODBC returning 'invalid db_type'
+    + Fixed issue where month.php and mini-calendar today highlight
+      based on server time
+  - New Features / Enhancements / Changes:
+    + Added 'Public Access' to Manage Calendar of: list, if Admin. 
+    + Allow user-created views to be the default view set in user preferences.
+      After saving or deleting an event, the user will return to this page.
+    + Replaced popups.php code with new knoppix based code. This should eliminate
+      the problems with popups going off screen. Popups also follow the cursor now,
+      but can be disabled in the file.
+    + Replaced all instances of forms[0] in javascript with the real form
+      names. This will allow WebCalendar to co-exist with other forms on
+      the same page.
+    + Added patch to allow TLS with LDAP
+    + Added patch 900968: Add outlook-style availability popup
+    + Added global views (available to all users)
+    + Added option to select all users for a view (rather than having
+      to select all users in the list).  If users are added later, they
+      will be automatically included in the view.
+    + Converted comments for use with phpDocumentor
+  - The following translations were updated:
+    + Dutch, Japanese (utf8, euc-jp, shift-jis), Spanish, German
+
+---------------------------------------------------------------------------
+
+Version 1.0RC2 (09 Feb 2005)
+  - Fixed the following bugs reports on SourceForge:
+      1116008: Got "invalid user" error when clicking on '+' icon
+               to add new event
+  - Other bugs fixed:
+    + Fixed a problem with the Repeat Tab on edit_entry page, if disabled, 
+      the SAVE button was hidden as well.
+  - New Features / Enhancements / Changes:
+    + Modified the way settings.php file is read to handle unix/dos/mac
+      format and also check main directory and include directory.
+    + In day and week view, time slots with events will now use a different
+      background color than time slots that are empty.  (This restores
+      how this worked a couple of versions ago.)
+    + Many code changes were made to prevent the "undefined variable"
+      warning that users may get if they have the PHP error_reporting
+      setting enabled.
+    + Documentation updated to System Administrator Guide including
+      new instructions for setting up reminders on Windows.
+  - The following translations were updated:
+    + Czech
+
+---------------------------------------------------------------------------
+
+Version 1.0RC1 (04 Feb 2005)
+  - Fixed the following bugs reports on SourceForge:
+       824268: Emails notifications used wront timezone
+       931096: Restrict views and view edits to owner of that view
+       986774: Editing category as assistant was not working
+      1061746: layout issues with views (daily)
+      1066440: End Time increased by timezone offset
+      1085337: Categories combo-box in month.php in assistant mode
+      1088857: SQL bug affecting ODBC users when viewing event
+      1101823: Problem importing palm desktop datebook.dat file
+      1102167: custom header when non-admin user
+      1109141: Email notifications where using sender language
+               rather than recipient language
+      1109323: Error in LDAP function for getting list of admins
+      1087604: Vanishing Layers / cookies
+      1086357: repeating details display
+      1085846: SQL error in when listing users on some databases
+      1085971: repeat tab does not display details
+      1074403: Day View is not accounting for server offset
+  - Other bugs fixed:
+    + Security fix: Fixed protential problem if a user attempts to login
+      with a username that has charaters that will affect the database.
+    + When using web-based authentication, two database connections
+      were being opened and only one was being closed.
+    + vCal import was completely broken
+    + Fixed problem using htmlarea where event description would not be saved
+    + View Event page would not display links to edit/delete under
+      some circumstances
+    + Fixes for WN web server
+    + Removed duplicate trailer from edit user page (when using a custom
+      trailer)
+  - New Features / Enhancements:
+    + MS SQL Server is now suppported
+    + If php.ini setting for "file_uploads" is not enabled, then indicate
+      this on the import page
+    + Streamlined layers.php & made layers only be displayed when layers
+      are enabled
+    + Updated Admin docs for content & xhtml/css validity
+    + Added new documentation in docs directory:
+      WebCalendar-Functions.html
+      WebCalendar-DeveloperGuide.html
+      WebCalendar-Styling.html
+    + Fixed various xhtml/css issues
+    + Updated reading of settings file to better handle when file
+      is not in exact format we are expecting.
+    + Added database sanity check
+    + Updated default color scheme (Will only apply to new installs)
+    + When html is allowed in event description, still replace newline with
+      html break in view page and event popup if the user did not use any html.
+    + Fixing users.php so it only shows a single user's info when the user
+      isn't an admin
+    + Added ability to authenticate users with postnuke user info.
+    + Added support for automatic gradient background images for table cells
+  - The following translations were updated:
+    + Japanese (with support for 3 character sets)
+    + Romanian (new)
+    + French
+    + German
+    + Italian
+    + Norwegian

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/README.html
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/README.html	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/README.html	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE html
+	PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+	"DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+    <head>
+<title>WebCalendar README</title>
+<style type="text/css">
+<!--
+body {
+	background-color: #FFFFFF;
+	font-family: arial, verdana;
+}
+a {
+	text-decoration: none;
+}
+dt {
+	font-weight: bold;
+}
+tr {
+	background-color: #606080;
+}
+td {
+	background-color: #E0E0E0;
+        vertical-align: top;
+}
+h3 {
+	background-color: #191970;
+	color: #FFFFFF;
+	padding: 5px;
+}
+-->
+</style>
+</head>
+<body>
+<h2>WebCalendar README</h2>
+
+<table style="border-width:0px;" cellpadding="10">
+<tr><td style="font-weight:bold;">
+	URL:</td><td>
+	<a href="http://www.k5n.us/webcalendar.php">www.k5n.us/webcalendar.php</a>
+</td></tr>
+
+<tr><td style="vertical-align:top; font-weight:bold;">Developers:</td>
+<td valign="top">Craig Knudsen,
+<script language="JavaScript">
+document.write ("<a href=\"mailto:cknudsen" );
+document.write ( "@cknudsen.com\">cknudsen@" );
+document.writeln ( "cknudsen.com</a>," );
+</script>
+<a href="http://www.k5n.us/">http://www.k5n.us</a><br />
+	Jeff Hoover<br />
+	Adam Shantz, <a href="mailto:adamATadamshantzDOTcom">adamATadamshantzDOTcom</a>,
+	<a href="http://adamshantz.com">adamshantz.com</a>
+</td></tr>
+
+<tr><td style="font-weight:bold;">Documentation:</td><td>
+	<a href="docs/WebCalendar-SysAdmin.html">System Administrator's Guide</a> (Installation instructions, FAQ)<br />
+	User Manual (<a href="http://sourceforge.net/project/showfiles.php?group_id=3870&package_id=112017">download</a>)<br />
+	<a href="UPGRADING.html">Upgrading Instructions</a>
+	(<strong>Required</strong> when upgrading from an older version)<br />
+	<a href="GPL.html">License</a><br />
+	<a href="ChangeLog">History of Changes</a><br />
+	<a href="http://webcalendar.sourceforge.net/demo/">Online Demo</a>
+</td></tr>
+
+<tr><td style="font-weight:bold;">Developer Resources:</td><td>
+	<a href="http://sourceforge.net/projects/webcalendar/">Sourceforge.net Home</a><br />
+        <a href="http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/*checkout*/webcalendar/webcalendar/docs/WebCalendar-Functions.html?rev=HEAD&content-type=text/html">WebCalendar-Functions.html</a><br/>
+        <a href="http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/*checkout*/webcalendar/webcalendar/docs/WebCalendar-Database.html?rev=HEAD&content-type=text/html">WebCalendar-Database.html</a><br/>
+        <a href="http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/*checkout*/webcalendar/webcalendar/docs/WebCalendar-DeveloperGuide.html?rev=HEAD&content-type=text/html">WebCalendar-DeveloperGuide.html</a><br/>
+
+	<a href="http://sourceforge.net/forum/forum.php?forum_id=11588">Help/Troubleshooting Forum</a><br />
+	<a href="http://sourceforge.net/forum/forum.php?forum_id=11587">Open Discussion Forum</a><br />
+	<a href="http://sourceforge.net/tracker/?group_id=3870&atid=103870">Bug Reports</a><br />
+	<a href="http://sourceforge.net/tracker/?group_id=3870&atid=303870">Patches</a><br />
+	<a href="https://sourceforge.net/project/showfiles.php?group_id=3870">Latest Version</a>
+</td></tr>
+</table>
+
+<h3>Note</h3>
+	<p>For a complete feature list, system requirements, and installation instructions, please see the <a href="docs/WebCalendar-SysAdmin.html">WebCalendar System Administrator's Guide</a>.</p>
+
+<h3>Outstanding issues</h3>
+<ul>
+	<li>Updated translatations (some are slightly out of date)</li>
+</ul>
+
+<h3>Possible features for future releases</h3>
+<ul>
+	<li>See <a href="http://www.k5n.us/webcalendar.php?topic=Plans">Plans</a> on the WebCalendar home page.</li>
+</ul>
+</body>
+</html>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/UPGRADING.html
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/UPGRADING.html	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/UPGRADING.html	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,477 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE html
+    PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "DTD/xhtml1-transitional.dtd">
+    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+	    <head>
+<title>WebCalendar Upgrading Notes</title>
+<style type="text/css">
+	body {
+		font-family: arial, verdana;
+		background-color: #FFFFFF;
+	}
+	a {
+		text-decoration: none;
+	}
+	dt {
+		font-weight: bold;
+	}
+	tr {
+		background-color: #606080;
+		color: #F0F0F0;
+	}
+	td {
+		background-color: #C0C0C0;
+	}
+	.colorheader {
+		background-color: #6060C0;
+	}
+	.valid {
+		border-width: 0px;
+	}
+	pre {
+		font-family: courier, monospace;
+		border: 1px solid blue;
+		background-color: #EEEEFF;
+		padding: 4px;
+		margin-left: 25px;
+		margin-right: 25px;
+	}
+</style>
+</head>
+<body>
+<h2>WebCalendar Upgrading Notes</h2>
+
+<p>Below are the steps needed to upgrade from a previous version.
+Select your current version from the list below. If you are more 
+than one version behind (i.e. the current version is v0.9.45, 
+and you're using 0.9.39), click the "next.." link at the end of 
+each section to move to the next version. Always follow the versions 
+in sequence.</p>
+<hr />
+
+<h4>I'm using..</h4>
+<ul>
+	<li>
+		<a href="UPGRADING.html#1dot0RC1">0.9.45 or 1.0RC1</a></li><li>
+		<a href="UPGRADING.html#dot945">0.9.44</a></li><li>
+		<a href="UPGRADING.html#dot944">0.9.43</a></li><li>
+		<a href="UPGRADING.html#dot943">0.9.42</a></li><li>
+		<a href="UPGRADING.html#dot942">0.9.41</a></li><li>
+		<a href="UPGRADING.html#dot941">0.9.40</a></li><li>
+		<a href="UPGRADING.html#dot940">0.9.39</a></li><li>
+		<a href="UPGRADING.html#dot939">0.9.38</a></li><li>
+		<a href="UPGRADING.html#dot938">0.9.37</a></li><li>
+		<a href="UPGRADING.html#dot937">0.9.36 or 0.9.35</a></li><li>
+		<a href="UPGRADING.html#dot935">0.9.34 - 0.9.27</a></li><li>
+		<a href="UPGRADING.html#dot927">0.9.26 - 0.9.22</a></li><li>
+		<a href="UPGRADING.html#dot922">0.9.21 - 0.9.14</a></li><li>
+		<a href="UPGRADING.html#dot914">0.9.13 or 0.9.12</a></li><li>
+		<a href="UPGRADING.html#dot912">0.9.11 - 0.9.07</a></li><li>
+		<a href="UPGRADING.html#dot907">0.9.06 - 0.9.01</a></li><li>
+		<a href="UPGRADING.html#dot901">0.9</a>
+	</li>
+</ul>
+<hr />
+
+<h4><a id="dot901">To upgrade from v0.9 to v0.9.01:</a></h4>
+<p>You need to create the table cal_user_pref in tables.sql. 
+You need to create the table cal_entry_user in tables.sql that 
+was mistakenly created as "cal_event_user" in the 0.9 release.</p>
+<a href="UPGRADING.html#dot907">next..</a>
+<hr />
+
+<h4><a id="dot907">To upgrade from v0.9.01 to v0.9.07:</a></h4>
+<p>Entirely new tables are used. Use the following commands to 
+convert your existing MySQL tables to the new tables:</p>
+<pre>
+cd tools
+./upgrade_to_0.9.7.pl
+mysql intranet < commands.sql
+</pre>
+<p>where "intranet" is the name of the MySQL database that contains 
+your WebCalendar tables.</p>
+<a href="UPGRADING.html#dot912">next..</a>
+<hr />
+
+<h4><a id="dot912">To upgrade from v0.9.07 - v0.9.11 to v0.9.12:</a></h4>
+<p>To fix a bug in the handing of events at midnight, all the 
+entries with NULL for cal_time are changed to -1. Use the 
+following SQL command:</p>
+	<pre>update webcal_entry set cal_time = -1 where cal_time is null;</pre>
+<a href="UPGRADING.html#dot914">next..</a>
+<hr />
+
+<h4><a id="dot914">To upgrade from v0.9.12 or v0.9.13 to v0.9.14:</a></h4>
+<p>A new table was added to support repeating events. Look at 
+tables-mysql.sql, tables-oracle.sql, or tables-postgres.sql. 
+Execute the SQL for creating the webcal_entry_repeats. For MySQL, 
+the SQL is:</p>
+<pre>
+CREATE TABLE webcal_entry_repeats (
+	cal_id INT DEFAULT '0' NOT NULL,
+	cal_type VARCHAR(20),
+	cal_end INT,
+	cal_frequency INT DEFAULT '1',
+	cal_days CHAR(7),
+	PRIMARY KEY (cal_id)
+);
+</pre>
+<a href="UPGRADING.html#dot922">next..</a>
+<hr />
+
+<h4><a id="dot922">To upgrade from v0.9.14 - v0.9.21 to v0.9.22:</a></h4>
+<p>A new table was added to support layering. Look at 
+tables-mysql.sql, tables-oracle.sql, or tables-postgres.sql. 
+Execute the SQL for creating the webcal_entry_repeats. For MySQL, 
+the SQL is:</p>
+<pre>
+CREATE TABLE webcal_user_layers (
+	cal_layerid INT DEFAULT '0' NOT NULL,
+	cal_login varchar(25) NOT NULL,
+	cal_layeruser varchar(25) NOT NULL,
+	cal_color varchar(25) NULL,
+	cal_dups CHAR(1) DEFAULT 'N',
+	PRIMARY KEY ( cal_login, cal_layeruser )
+);
+</pre>
+<a href="UPGRADING.html#dot927">next..</a>
+<hr />
+
+<h4><a id="dot927">To upgrade from v0.9.22 - v0.9.26 to v0.9.27:</a></h4>
+<p>Two new tables were added for custom event fields and reminders. 
+Look at tables-mysql.sql, tables-oracle.sql, or tables-postgres.sql. 
+Execute the SQL for creating webcal_site_extras and webcal_reminder_log. 
+For MySQL and PostgreSQL, the SQL is:</p>
+<pre>
+CREATE TABLE webcal_site_extras (
+	cal_id INT DEFAULT '0' NOT NULL,
+	cal_name VARCHAR(25) NOT NULL,
+	cal_type INT NOT NULL,
+	cal_date INT DEFAULT '0',
+	cal_remind INT DEFAULT '0',
+	cal_data TEXT,
+	PRIMARY KEY ( cal_id, cal_name, cal_type )
+);
+CREATE TABLE webcal_reminder_log (
+	cal_id INT DEFAULT '0' NOT NULL,
+	cal_name VARCHAR(25) NOT NULL,
+	cal_event_date INT NOT NULL DEFAULT 0,
+	cal_last_sent INT NOT NULL DEFAULT 0,
+	PRIMARY KEY ( cal_id, cal_name, cal_event_date )
+);
+</pre>
+<p>For Oracle, the SQL is:</p>
+<pre>
+CREATE TABLE webcal_site_extras (
+	cal_id INT DEFAULT '0' NOT NULL,
+	cal_name VARCHAR(25) NOT NULL,
+	cal_type INT NOT NULL,
+	cal_date INT DEFAULT '0',
+	cal_remind INT DEFAULT '0',
+	cal_data LONG,
+	PRIMARY KEY ( cal_id, cal_name, cal_type )
+);
+CREATE TABLE webcal_reminder_log (
+	cal_id INT DEFAULT '0' NOT NULL,
+	cal_name VARCHAR(25) NOT NULL,
+	cal_event_date INT NOT NULL DEFAULT 0,
+	cal_last_sent INT NOT NULL DEFAULT 0,
+	PRIMARY KEY ( cal_id, cal_name, cal_event_date )
+);
+</pre>
+<p>You will also need to setup the tools/send_reminders.php script 
+to be run periodically. I would recommend once an hour. For 
+Linux/UNIX, this is simple. Just use cron and add a line to 
+your crontab file that looks like:</p>
+	<pre>1 * * * * cd /some/directory/webcalendar/tools; ./send_reminders.php</pre>
+<p>This will tell cron to run the script at one minute after the hour. 
+Windows users will have to find another way to run the script. 
+There are ports/look-a-likes of cron for Windows, so look around.</p>
+<a href="UPGRADING.html#dot935">next..</a>
+<hr />
+
+<h4><a id="dot935">To upgrade from v0.9.27 - v0.9.34 to v0.9.35:</a></h4>
+<p>Six new tables were added for group support, views, system 
+settings and activity logs. Look at tables-mysql.sql, 
+tables-oracle.sql, or tables-postgres.sql for these 
+new tables: webcal_group, webcal_group_user, 
+webcal_view, webcal_view_user, wecbal_config, webcal_entry_log. 
+After adding these tables, be sure to go to the System Settings page 
+(admin.php) since you will be missing some config stuff in your 
+database that you can add from the System Settings page. 
+For MySQL and PostgreSQL, the SQL is:</p>
+<pre>
+CREATE TABLE webcal_group (
+	cal_group_id INT NOT NULL,
+	cal_owner VARCHAR(25) NULL,
+	cal_name VARCHAR(50) NOT NULL,
+	cal_last_update INT NOT NULL,
+	PRIMARY KEY ( cal_group_id )
+);
+CREATE TABLE webcal_group_user (
+	cal_group_id INT NOT NULL,
+	cal_login VARCHAR(25) NOT NULL,
+	PRIMARY KEY ( cal_group_id, cal_login )
+);
+CREATE TABLE webcal_view (
+	cal_view_id INT NOT NULL,
+	cal_owner VARCHAR(25) NOT NULL,
+	cal_name VARCHAR(50) NOT NULL,
+	cal_view_type CHAR(1),
+	PRIMARY KEY ( cal_view_id )
+);
+CREATE TABLE webcal_view_user (
+	cal_view_id INT NOT NULL,
+	cal_login VARCHAR(25) NOT NULL,
+	PRIMARY KEY ( cal_view_id, cal_login )
+);
+CREATE TABLE webcal_config (
+	cal_setting VARCHAR(50) NOT NULL,
+	cal_value VARCHAR(50) NULL,
+	PRIMARY KEY ( cal_setting )
+);
+CREATE TABLE webcal_entry_log (
+	cal_log_id INT NOT NULL,
+	cal_entry_id INT NOT NULL,
+	cal_login VARCHAR(25) NOT NULL,
+	cal_type CHAR(1) NOT NULL,
+	cal_date INT NOT NULL,
+	cal_time INT NULL,
+	cal_text TEXT,
+	PRIMARY KEY ( cal_log_id )
+);
+</pre>
+<a href="UPGRADING.html#dot937">next..</a>
+<hr />
+
+<h4><a id="dot937">To upgrade from v0.9.35 or v0.9.36 to v0.9.37:</a></h4>
+<p>The webcal_entry_log table was modified, and a new table 
+webcal_entry_repeats_not was created. Use the following SQL 
+to modify your table for MySQL and PostgreSQL:</p>
+<pre>
+ALTER TABLE webcal_entry_log ADD cal_user_cal VARCHAR(25);
+CREATE TABLE webcal_entry_repeats_not (
+	cal_id INT NOT NULL,
+	cal_date INT NOT NULL,
+	PRIMARY KEY ( cal_id, cal_date )
+);
+</pre>
+<a href="UPGRADING.html#dot938">next..</a>
+<hr />
+
+<h4><a id="dot938">To upgrade from v0.9.37 to v0.9.38:</a></h4>
+<p>The webcal_entry_user table was modified, and a new table 
+webcal_categories was created. Use the following SQL 
+to modify your table for MySQL and PostgreSQL:</p>
+<pre>
+ALTER TABLE webcal_entry_user ADD cal_category INT DEFAULT NULL;
+CREATE TABLE webcal_categories (
+	cat_id INT NOT NULL,
+	cat_owner VARCHAR(25),
+	cat_name VARCHAR(80) NOT NULL,
+	PRIMARY KEY ( cat_id )
+);
+</pre>
+<a href="UPGRADING.html#dot939">next..</a>
+<hr />
+
+<h4><a id="dot939">To upgrade from v0.9.38 to v0.9.39:</a></h4>
+<p>The names of the date settings in the database were modified. 
+All old data settings need to be removed from the database.</p>
+<pre>
+DELETE FROM webcal_config WHERE cal_setting LIKE 'DATE_FORMAT%';
+DELETE FROM webcal_user_pref WHERE cal_setting LIKE 'DATE_FORMAT%';
+</pre>
+<a href="UPGRADING.html#dot940">next..</a>
+<hr />
+
+<h4><a id="dot940">To upgrade from v0.9.39 to v0.9.40:</a></h4>
+<p>Two new tables were created: webcal_asst and webcal_entry_ext_user. 
+And the column cal_ext_for_id was added to the webcal_entry table. 
+Use the following SQL for MySQL and PostgreSQL:</p>
+<pre>
+CREATE TABLE webcal_asst (
+	cal_boss VARCHAR(25) NOT NULL,
+	cal_assistant VARCHAR(25) NOT NULL,
+	PRIMARY KEY ( cal_boss, cal_assistant )
+);
+CREATE TABLE webcal_entry_ext_user (
+	cal_id INT DEFAULT 0 NOT NULL,
+	cal_fullname VARCHAR(50) NOT NULL,
+	cal_email VARCHAR(75) NULL,
+	PRIMARY KEY ( cal_id, cal_fullname )
+);
+ALTER TABLE webcal_entry ADD cal_ext_for_id INT NULL;
+</pre>
+<p>For Oracle, use VARCHAR2 instead of VARCHAR.</p>
+<a href="UPGRADING.html#dot941">next..</a>
+<hr />
+
+<h4><a id="dot941">To upgrade from v0.9.40 to v0.9.41:</a></h4>
+<p>One new table was added: webcal_nonuser_cals. 
+Use the following SQL for MySQL and PostgreSQL:</p>
+<pre>
+CREATE TABLE webcal_nonuser_cals (
+	cal_login VARCHAR(25) NOT NULL,
+	cal_lastname VARCHAR(25),
+	cal_firstname VARCHAR(25),
+	cal_admin VARCHAR(25) NOT NULL,
+	PRIMARY KEY ( cal_login )
+);
+</pre>
+<p>For Oracle, use VARCHAR2 instead of VARCHAR and LONG instead of TEXT.</p>
+<a href="UPGRADING.html#dot942">next..</a>
+<hr />
+
+<h4><a id="dot942">To upgrade from v0.9.41 to v0.9.42:</a></h4>
+<p>Three new tables were added: webcal_report, 
+webcal_report_template, and webcal_import_data. 
+Use the following SQL for MySQL and PostgreSQL:</p>
+<pre>
+CREATE TABLE webcal_report (
+	cal_login VARCHAR(25) NOT NULL,
+	cal_report_id INT NOT NULL,
+	cal_is_global CHAR(1) DEFAULT 'N' NOT NULL,
+	cal_report_type VARCHAR(20) NOT NULL,
+	cal_include_header CHAR(1) DEFAULT 'Y' NOT NULL,
+	cal_report_name VARCHAR(50) NOT NULL,
+	cal_time_range INT NOT NULL,
+	cal_user VARCHAR(25) NULL,
+	cal_allow_nav CHAR(1) DEFAULT 'Y',
+	cal_cat_id INT NULL,
+	cal_include_empty CHAR(1) DEFAULT 'N',
+	cal_show_in_trailer CHAR(1) DEFAULT 'N',
+	cal_update_date INT NOT NULL,
+	PRIMARY KEY ( cal_report_id )
+);
+CREATE TABLE webcal_report_template (
+	cal_report_id INT NOT NULL,
+	cal_template_type CHAR(1) NOT NULL,
+	cal_template_text TEXT,
+	PRIMARY KEY ( cal_report_id, cal_template_type )
+);
+CREATE TABLE webcal_import_data (
+	cal_id int NOT NULL,
+	cal_login VARCHAR(25) NOT NULL,
+	cal_import_type VARCHAR(15) NOT NULL,
+	cal_external_id VARCHAR(200) NULL,
+	PRIMARY KEY  ( cal_id, cal_login )
+);
+</pre>
+<p>For Oracle, use VARCHAR2 instead of VARCHAR.</p>
+<a href="UPGRADING.html#dot943">next..</a>
+<hr />
+
+<h4><a id="dot943">To upgrade from v0.9.42 to v0.9.43:</a></h4>
+<p>User passwords are now stored using md5 and require the webcal_user 
+table to be altered to accomodate larger password data. 
+Use the following SQL for MySQL:</p>
+<pre>
+ALTER TABLE webcal_user MODIFY cal_passwd VARCHAR(32) NULL;
+DROP TABLE webcal_import_data;
+CREATE TABLE webcal_import (
+	cal_import_id INT NOT NULL,
+	cal_name VARCHAR(50) NULL,
+	cal_date INT NOT NULL,
+	cal_type VARCHAR(10) NOT NULL,
+	cal_login VARCHAR(25) NULL,
+	PRIMARY KEY ( cal_import_id )
+);
+CREATE TABLE webcal_import_data (
+	cal_import_id INT NOT NULL,
+	cal_id INT NOT NULL,
+	cal_login VARCHAR(25) NOT NULL,
+	cal_import_type VARCHAR(15) NOT NULL,
+	cal_external_id VARCHAR(200) NULL,
+	PRIMARY KEY  ( cal_id, cal_login )
+);
+</pre>
+
+<p>Postgres does not allow you to modify an existing table column.
+Instead of the initial ALTER command above, issue the following
+commands below.  You <b>will not need to run</b> the convert_passwords
+script below since this will <b>set all user's passwords to 'admin'</b>.</p>
+
+<pre>
+ALTER TABLE webcal_user RENAME COLUMN cal_passwd to cal_oldpass;
+ALTER TABLE webcal_user ADD COLUMN cal_passwd VARCHAR(32) NULL;
+UPDATE webcal_user SET cal_passwd = '21232f297a57a5a743894a0e4a801fc3';
+</pre>
+
+<p>For Oracle, use VARCHAR2 instead of VARCHAR. 
+On very old MySQL installations (not sure which version), if you get 
+a parse error, you can try the following instead:</p>
+<pre>ALTER TABLE webcal_user CHANGE cal_passwd cal_passwd VARCHAR(32) NULL;</pre>
+
+<p>Next, you will need to run the script found in the <tt>tools</tt> 
+subdirectory.  This will convert all your passwords from plain text 
+to md5.  You can either run this from the command line (if you have 
+a standalone version of PHP compiled):</p>
+<pre>
+cd tools
+php convert_passwords.php
+</pre>
+
+<p>If you do not have a standalone version of PHP, you can just type in 
+the URL to access the script in your browser:
+</p><p>
+<tt>http://yourcalendarurl/tools/convert_passwords.php</tt><br /></p>
+
+<p>Delete all webcalendar_login browser cookies. Details should be available on 
+your local browser help section.
+</p>
+
+<a href="UPGRADING.html#dot944">next..</a>
+<hr />
+
+<h4><a id="dot944">To upgrade from v0.9.43 to v0.9.44:</a></h4>
+<p>No manual changes required for upgrading from 0.9.43 to 0.9.44.</p>
+<a href="UPGRADING.html#dot945">next..</a>
+<hr />
+
+<h4><a id="dot945">To upgrade from v0.9.44 to v0.9.45:</a></h4>
+<p>There are no database changes from 0.9.44 to 0.9.45.
+However, the database settings were moved from <tt>includes/config.php</tt>
+to a new file <tt>includes/settings.php</tt>.
+This new file does not exist until you create it.</p>
+<p>The first time you attempt to access WebCalendar with the new 0.9.45 files,
+your browser will be redirected to a web-based admin page for configuring
+the database settings.  You will need to make sure the <tt>includes</tt>
+directory is writable by the web server user.
+The simplest solution is to make it writable by all users until you
+have correctly setup your database connection.  Then, you can change it
+to more restrictive permissions.
+</p>
+<p>After saving your database settings, be sure to setup an install
+password via this same web page so that other users may not change
+your database settings.</p>
+<a href="UPGRADING.html#1dot0RC1">next..</a>
+<hr />
+
+<h4><a id="1dot0RC1">To upgrade from v0.9.45 or 1.0RC1 to v1.0RC2:</a></h4>
+<p>There are no database changes from 0.9.45 to 1.0RC2.
+</p>
+<a href="UPGRADING.html#1dot0RC3">next..</a>
+<hr />
+
+<h4><a id="1dot0RC3">To upgrade from v1.0RC2 to v1.0RC3 or 1.0.0:</a></h4>
+<p>The <tt>webcal_view</tt> table was modified.
+Execute the following SQL to update your database:
+</p>
+<pre>
+ALTER TABLE webcal_view ADD cal_is_global CHAR(1) DEFAULT 'N' NOT NULL;
+UPDATE webcal_user_pref SET cal_value = 'day.php' WHERE cal_value = 'day' AND cal_setting = 'STARTVIEW';
+UPDATE webcal_user_pref SET cal_value = 'week.php' WHERE cal_value = 'week' AND cal_setting = 'STARTVIEW';
+UPDATE webcal_user_pref SET cal_value = 'month.php' WHERE cal_value = 'month' AND cal_setting = 'STARTVIEW';
+UPDATE webcal_user_pref SET cal_value = 'year.php' WHERE cal_value = 'year' AND cal_setting = 'STARTVIEW';
+UPDATE webcal_config SET cal_value = 'week.php' WHERE cal_setting = 'STARTVIEW';
+</pre>
+<hr />
+
+<p>
+<a href="http://validator.w3.org/check?uri=referer"><img
+ src="http://www.w3.org/Icons/valid-xhtml10"
+ alt="Valid XHTML 1.0!" class="valid"  /></a>
+</p>
+</body></html>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/activity_log.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/activity_log.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/activity_log.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,113 @@
+<?php
+include_once 'includes/init.php';
+include_once 'includes/site_extras.php';
+$PAGE_SIZE = 25;
+print_header();
+
+echo "<h3>" . translate("Activity Log") . "</h3>\n";
+
+echo "<a title=\"" . translate("Admin") . "\" class=\"nav\" href=\"adminhome.php\">« " . translate("Admin") . "</a><br /><br />\n";
+
+echo "<table>\n";
+echo "<tr><th class=\"usr\">\n" .
+  translate("User") . "</th><th class=\"cal\">\n" .
+  translate("Calendar") . "</th><th class=\"scheduled\">\n" .
+  translate("Date") . "/" . translate("Time") . "</th><th class=\"dsc\">\n" .
+  translate("Event") . "</th><th class=\"action\">\n" .
+  translate("Action") . "\n</th></tr>\n";
+$sql = "SELECT webcal_entry_log.cal_login, webcal_entry_log.cal_user_cal, " .
+  "webcal_entry_log.cal_type, webcal_entry_log.cal_date, " .
+  "webcal_entry_log.cal_time, webcal_entry.cal_id, " .
+  "webcal_entry.cal_name, webcal_entry_log.cal_log_id " .
+  "FROM webcal_entry_log, webcal_entry " .
+  "WHERE webcal_entry_log.cal_entry_id = webcal_entry.cal_id ";
+$startid = getIntValue ( 'startid', true );
+if ( ! empty ( $startid ) )
+  $sql .= "AND webcal_entry_log.cal_log_id <= $startid ";
+$sql .= "ORDER BY webcal_entry_log.cal_log_id DESC";
+$res = dbi_query ( $sql );
+
+$nextpage = "";
+
+if ( $res ) {
+  $num = 0;
+  while ( $row = dbi_fetch_row ( $res ) ) {
+    $num++;
+    if ( $num > $PAGE_SIZE ) {
+      $nextpage = $row[7];
+      break;
+    } else {
+	echo "<tr";
+		if ( $num % 2 ) {
+			echo " class=\"odd\"";
+		}
+	echo "><td>\n" .
+        $row[0] . "</td><td>\n" .
+        $row[1] . "</td><td>\n" . 
+        date_to_str ( $row[3] ) . " " .
+        display_time ( $row[4] ) . "</td><td>\n" . 
+        "<a title=\"" .
+        htmlspecialchars($row[6]) . "\" href=\"view_entry.php?id=$row[5]\">" .
+        htmlspecialchars($row[6]) . "</a></td><td>\n";
+      if ( $row[2] == $LOG_CREATE )
+        etranslate("Event created");
+      else if ( $row[2] == $LOG_APPROVE )
+        etranslate("Event approved");
+      else if ( $row[2] == $LOG_REJECT )
+        etranslate("Event rejected");
+      else if ( $row[2] == $LOG_UPDATE )
+        etranslate("Event updated");
+      else if ( $row[2] == $LOG_DELETE )
+        etranslate("Event deleted");
+      else if ( $row[2] == $LOG_NOTIFICATION )
+        etranslate("Notification sent");
+      else if ( $row[2] == $LOG_REMINDER )
+        etranslate("Reminder sent");
+      else
+        echo "???";
+      echo "\n</td></tr>\n";
+    }
+  }
+  dbi_free_result ( $res );
+} else {
+  echo translate("Database error") . ": " . dbi_error ();
+}
+?>
+</table><br />
+<div class="navigation">
+<?php
+//go BACK in time
+if ( ! empty ( $nextpage ) ) {
+  echo "<a title=\"" . 
+  	translate("Previous") . " $PAGE_SIZE " . 
+	translate("Events") . "\" class=\"prev\" href=\"activity_log.php?startid=$nextpage\">" . 
+  	translate("Previous") . " $PAGE_SIZE " . 
+	translate("Events") . "</a>\n";
+}
+
+if ( ! empty ( $startid ) ) {
+  $previd = $startid + $PAGE_SIZE;
+  $res = dbi_query ( "SELECT MAX(cal_log_id) FROM " .
+    "webcal_entry_log" );
+  if ( $res ) {
+    if ( $row = dbi_fetch_row ( $res ) ) {
+      if ( $row[0] <= $previd ) {
+        $prevarg = '';
+      } else {
+        $prevarg = "?startid=$previd";
+      }
+      //go FORWARD in time
+      echo "<a title=\"" . 
+  	translate("Next") . " $PAGE_SIZE " . 
+	translate("Events") . "\" class=\"next\" href=\"activity_log.php$prevarg\">" . 
+  	translate("Next") . " $PAGE_SIZE " . 
+	translate("Events") . "</a><br />\n";
+    }
+    dbi_free_result ( $res );
+  }
+}
+?>
+</div>
+<?php print_trailer(); ?>
+</body>
+</html>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/add_entry.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/add_entry.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/add_entry.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,53 @@
+<?php
+include_once 'includes/init.php';
+load_user_categories();
+
+$error = "";
+
+// Only proceed if id was passed
+if ( $id > 0 ) {
+
+  // double check to make sure user doesn't already have the event
+  $is_my_event = false;
+  $sql = "SELECT cal_id FROM webcal_entry_user " .
+    "WHERE cal_login = '$login' AND cal_id = $id";
+  $res = dbi_query ( $sql );
+  if ( $res ) {
+    $row = dbi_fetch_row ( $res );
+    if ( $row[0] == $id ) {
+      $is_my_event = true;
+      echo "Event # " . $id . " is already on your calendar.";
+      exit;
+    }
+    dbi_free_result ( $res );
+  }
+
+  // Now lets make sure the user is allowed to add the event (not private)
+
+  $sql = "SELECT cal_access FROM webcal_entry WHERE cal_id = " . $id;
+  $res = dbi_query ( $sql );
+  if ( ! $res ) {
+    echo translate("Invalid entry id") . ": $id";
+    exit;
+  }
+  $row = dbi_fetch_row ( $res );
+
+  if ( $row[0] == "R" && ! $is_my_event ) {
+    $is_private = true;
+    etranslate("This is a private event and may not be added to your calendar.");
+    exit;
+  } else {
+    $is_private = false;
+  }
+
+  // add the event
+  if ( $readonly == "N" && ! $is_my_event && ! $is_private )  {
+    if ( ! dbi_query ( "INSERT INTO webcal_entry_user ( cal_id, cal_login, cal_status ) VALUES ( $id, '$login', 'A' )") ) {
+      $error = translate("Error adding event") . ": " . dbi_error ();
+    }
+  }
+}
+
+send_to_preferred_view ("","user=".$_GET['user']);
+exit;
+?>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/admin.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/admin.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/admin.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,694 @@
+<?php
+include_once 'includes/init.php';
+
+function print_color_sample ( $color ) {
+  echo "<table style=\"border-width:0px;\"><tr><td style=\"background-color:$color;\">  </td></tr></table>";
+}
+
+
+// I know we've already loaded the global settings above, but read them
+// in again and store them in a different place because they may have
+// been superceded by local user preferences.
+// We will store value in the array $s[].
+$res = dbi_query ( "SELECT cal_setting, cal_value FROM webcal_config" );
+$s = array ();
+if ( $res ) {
+  while ( $row = dbi_fetch_row ( $res ) ) {
+    $setting = $row[0];
+    $value = $row[1];
+    $s[$setting] = $value;
+    //echo "Setting '$setting' to '$value' <br />\n";
+  }
+  dbi_free_result ( $res );
+}
+
+$BodyX = 'onload="public_handler(); eu_handler(); email_handler();"';
+$INC = array('js/admin.php','js/visible.php');
+print_header ( $INC, '', $BodyX );
+?>
+
+<h2><?php etranslate("System Settings")?> <img src="help.gif" alt="<?php etranslate("Help")?>" class="help" onclick="window.open ( 'help_admin.php', 'cal_help', 'dependent,menubar,scrollbars,height=400,width=400,innerHeight=420,outerWidth=420');" /></h2>
+<?php
+$error = false;
+
+if ( ! $is_admin ) {
+  etranslate ( "You are not authorized" );
+  $error = true;
+}
+if ( ! $error ) {
+ echo "<a title=\"" . translate("Admin") . "\" class=\"nav\" href=\"adminhome.php\">« " . translate("Admin") . "</a><br /><br />\n";
+}
+
+if ( empty ( $ovrd ) && ! $error ) {
+  echo "<blockquote>" . translate ( "Note" ) . ": " .
+    "<a href=\"pref.php\">" .
+    translate ( "Your user preferences" ) . "</a> " .
+    translate ( "may be affecting the appearance of this page.") . " " .
+    "<a href=\"admin.php?ovrd=1\">" .
+    translate ( "Click here" ) . " " .
+    translate ( "to not use your user preferences when viewing this page" ) .
+    ".</a></blockquote>\n";
+} else if ( ! $error ) {
+  echo "<blockquote>" . translate ( "Note" ) . ": " .
+    "<a href=\"pref.php\">" .
+    translate ( "Your user preferences" ) . "</a> " .
+    translate ( "are being ignored while viewing this page.") . " " .
+    "<a href=\"admin.php\">" .
+    translate ( "Click here" ) . " " .
+    translate ( "to load your user preferences when viewing this page" ) .
+    ".</a></blockquote>\n";
+}
+
+if ( ! $error ) {
+?>
+
+<form action="admin_handler.php" method="post" onsubmit="return valid_form(this);" name="prefform">
+<table style="border-width:0px;"><tr><td>
+ <input type="submit" value="<?php etranslate("Save")?>" name="" />
+</td></tr></table>
+<br />
+
+<?php if ( ! empty ( $ovrd ) ) { ?>
+  <input type="hidden" name="ovrd" id="ovrd" value="1" />
+<?php } ?>
+
+<!-- TABS -->
+<div id="tabs">
+ <span class="tabfor" id="tab_settings"><a href="#tabsettings" onclick="return showTab('settings')"><?php etranslate("Settings")?></a></span>
+ <span class="tabbak" id="tab_public"><a href="#tabpublic" onclick="return showTab('public')"><?php etranslate("Public Access")?></a></span>
+ <span class="tabbak" id="tab_groups"><a href="#tabgroups" onclick="return showTab('groups')"><?php etranslate("Groups")?></a></span>
+ <span class="tabbak" id="tab_nonuser"><a href="#tabnonuser" onclick="return showTab('nonuser')"><?php etranslate("NonUser Calendars")?></a></span>
+ <span class="tabbak" id="tab_other"><a href="#tabother" onclick="return showTab('other')"><?php etranslate("Other")?></a></span>
+ <span class="tabbak" id="tab_email"><a href="#tabemail" onclick="return showTab('email')"><?php etranslate("Email")?></a></span>
+ <span class="tabbak" id="tab_colors" title="<?php etooltip("colors-help")?>"><a href="#tabcolors" onclick="return showTab('colors')"><?php etranslate("Colors")?></a></span>
+</div>
+
+<!-- TABS BODY -->
+<div id="tabscontent">
+ <!-- DETAILS -->
+ <a name="tabsettings"></a>
+ <div id="tabscontent_settings">
+ <table cellspacing="0" cellpadding="3">
+ <tr><td class="tooltip" title="<?php etooltip("app-name-help")?>">
+  <label for="admin_application_name"><?php etranslate("Application Name")?>:</label></td><td>
+  <input type="text" size="40" name="admin_application_name" id="admin_application_name" value="<?php 
+   echo htmlspecialchars ( $application_name );
+  ?>" />
+ </td></tr>
+ <tr><td class="tooltip" title="<?php etooltip("server-url-help")?>">
+  <label for="admin_server_url"><?php etranslate("Server URL")?>:</label></td><td>
+  <input type="text" size="40" name="admin_server_url" id="admin_server_url" value="<?php 
+   echo htmlspecialchars ( $server_url );
+  ?>" />
+ </td></tr>
+ <tr><td class="tooltipselect" title="<?php etooltip("language-help");?>">
+  <label for="admin_language"><?php etranslate("Language")?>:</label></td><td>
+  <select name="admin_LANGUAGE" id="admin_language">
+   <?php
+    reset ( $languages );
+    while ( list ( $key, $val ) = each ( $languages ) ) {
+     echo "<option value=\"" . $val . "\"";
+     if ( $val == $s['LANGUAGE'] ) echo " selected=\"selected\"";
+     echo ">" . $key . "</option>\n";
+    }
+   ?>
+  </select><br />
+  <?php etranslate("Your browser default language is"); echo " "; etranslate(get_browser_language()); echo "."; ?>
+ </td></tr>
+ <tr><td class="tooltip" title="<?php etooltip("fonts-help") ?>">
+  <label for="admin_fonts"><?php etranslate("Fonts")?>:</label></td><td>
+  <input type="text" size="40" name="admin_FONTS" id="admin_fonts" value="<?php 
+            echo htmlspecialchars ( $FONTS );
+           ?>" />
+ </td></tr>
+ <tr><td class="tooltip" title="<?php etooltip("custom-script-help");?>">
+  <?php etranslate("Custom script/stylesheet")?>:</td><td>
+  <label><input type="radio" name="admin_CUSTOM_SCRIPT" value="Y"<?php if ( $s["CUSTOM_SCRIPT"] == "Y" ) echo " checked=\"checked\"";?> /> <?php etranslate("Yes")?></label> 
+  <label><input type="radio" name="admin_CUSTOM_SCRIPT" value="N"<?php if ( $s["CUSTOM_SCRIPT"] != "Y" ) echo " checked=\"checked\"";?> /> <?php etranslate("No")?></label>  
+  <input type="button" value="<?php etranslate("Edit");?>..." onclick="window.open('edit_template.php?type=S','cal_template','dependent,menubar,scrollbars,height=500,width=500,outerHeight=520,outerWidth=520');" name="" />
+ </td></tr>
+ <tr><td class="tooltip" title="<?php etooltip("custom-header-help");?>">
+  <?php etranslate("Custom header")?>:</td><td>
+  <label><input type="radio" name="admin_CUSTOM_HEADER" value="Y"<?php if ( $s["CUSTOM_HEADER"] == "Y" ) echo " checked=\"checked\"";?> /> <?php etranslate("Yes")?></label> 
+  <label><input type="radio" name="admin_CUSTOM_HEADER" value="N"<?php if ( $s["CUSTOM_HEADER"] != "Y" ) echo " checked=\"checked\"";?> /> <?php etranslate("No")?></label>  
+  <input type="button" value="<?php etranslate("Edit");?>..." onclick="window.open('edit_template.php?type=H','cal_template','dependent,menubar,scrollbars,height=500,width=500,outerHeight=520,outerWidth=520');" name="" />
+ </td></tr>
+ <tr><td class="tooltip" title="<?php etooltip("custom-trailer-help");?>">
+  <?php etranslate("Custom trailer")?>:</td><td>
+  <label><input type="radio" name="admin_CUSTOM_TRAILER" value="Y"<?php if ( $s["CUSTOM_TRAILER"] == "Y" ) echo " checked=\"checked\"";?> /> <?php etranslate("Yes")?></label> 
+  <label><input type="radio" name="admin_CUSTOM_TRAILER" value="N"<?php if ( $s["CUSTOM_TRAILER"] != "Y" ) echo " checked=\"checked\"";?> /> <?php etranslate("No")?></label>  
+  <input type="button" value="<?php etranslate("Edit");?>..." onclick="window.open('edit_template.php?type=T','cal_template','dependent,menubar,scrollbars,height=500,width=500,outerHeight=520,outerWidth=520');" name="" />
+ </td></tr>
+ <tr><td class="tooltip" title="<?php etooltip("preferred-view-help");?>">
+  <label for="admin_startview"><?php etranslate("Preferred view")?>:</label></td><td>
+  <select name="admin_STARTVIEW" id="admin_startview">
+   <option value="day.php"<?php 
+      if ( $s["STARTVIEW"] == "day.php" ) echo " selected=\"selected\"";
+     ?>><?php etranslate("Day")?></option>
+   <option value="week.php"<?php 
+      if ( $s["STARTVIEW"] == "week.php" ) echo " selected=\"selected\"";
+     ?>><?php etranslate("Week")?></option>
+   <option value="month.php" <?php 
+      if ( $s["STARTVIEW"] == "month.php" ) echo " selected=\"selected\"";
+     ?>><?php etranslate("Month")?></option>
+   <option value="year.php" <?php 
+      if ( $s["STARTVIEW"] == "year.php" ) echo " selected=\"selected\"";
+     ?>><?php etranslate("Year")?></option>
+  </select>
+ </td></tr>
+ <tr><td class="tooltip" title="<?php etooltip("display-weekends-help");?>">
+  <?php etranslate("Display weekends in week view")?>:</td><td>
+  <label><input type="radio" name="admin_DISPLAY_WEEKENDS" value="Y" <?php if ( $s["DISPLAY_WEEKENDS"] != "N" ) echo " checked=\"checked\"";?> /> <?php etranslate("Yes")?></label> 
+  <label><input type="radio" name="admin_DISPLAY_WEEKENDS" value="N" <?php if ( $s["DISPLAY_WEEKENDS"] == "N" ) echo " checked=\"checked\"";?> /> <?php etranslate("No")?></label>
+ </td></tr>
+ <tr><td class="tooltip" title="<?php etooltip("yearly-shows-events-help");?>">
+  <?php etranslate("Display days with events in bold in month and year views")?>:</td><td>
+  <label><input type="radio" name="admin_bold_days_in_year" value="Y" <?php if ( $s["bold_days_in_year"] == "Y" ) echo " checked=\"checked\"";?> /> <?php etranslate("Yes")?></label> 
+  <label><input type="radio" name="admin_bold_days_in_year" value="N" <?php if ( $s["bold_days_in_year"] != "Y" ) echo " checked=\"checked\"";?> /> <?php etranslate("No")?></label>
+ </td></tr>
+ <tr><td class="tooltip" title="<?php etooltip("display-desc-print-day-help");?>">
+  <?php etranslate("Display description in printer day view")?>:</td><td>
+  <label><input type="radio" name="admin_DISPLAY_DESC_PRINT_DAY" value="Y" <?php if ( $s["DISPLAY_DESC_PRINT_DAY"] == "Y" ) echo " checked=\"checked\"";?> /> <?php etranslate("Yes")?></label> 
+  <label><input type="radio" name="admin_DISPLAY_DESC_PRINT_DAY" value="N" <?php if ( $s["DISPLAY_DESC_PRINT_DAY"] != "Y" ) echo " checked=\"checked\"";?> /> <?php etranslate("No")?></label>
+ </td></tr>
+ <tr><td class="tooltipselect" title="<?php etooltip("date-format-help");?>">
+  <?php etranslate("Date format")?>:</td><td>
+  <select name="admin_DATE_FORMAT">
+   <?php
+    // You can add new date formats below if you want.
+    // but also add in pref.php
+    $datestyles = array (
+     "__month__ __dd__, __yyyy__", translate("December") . " 31, 2000",
+     "__dd__ __month__, __yyyy__", "31 " . translate("December") . ", 2000",
+     "__dd__-__month__-__yyyy__", "31-" . translate("December") . "-2000",
+     "__dd__-__month__-__yy__", "31-" . translate("December") . "-00",
+     "__mm__/__dd__/__yyyy__", "12/31/2000",
+     "__mm__/__dd__/__yy__", "12/31/00",
+     "__mm__-__dd__-__yyyy__", "12-31-2000",
+     "__mm__-__dd__-__yy__", "12-31-00",
+     "__yyyy__-__mm__-__dd__", "2000-12-31",
+     "__yy__-__mm__-__dd__", "00-12-31",
+     "__yyyy__/__mm__/__dd__", "2000/12/31",
+     "__yy__/__mm__/__dd__", "00/12/31",
+     "__dd__/__mm__/__yyyy__", "31/12/2000",
+     "__dd__/__mm__/__yy__", "31/12/00",
+     "__dd__-__mm__-__yyyy__", "31-12-2000",
+     "__dd__-__mm__-__yy__", "31-12-00"
+    );
+    for ( $i = 0; $i < count ( $datestyles ); $i += 2 ) {
+     echo "<option value=\"" . $datestyles[$i] . "\"";
+     if ( $s["DATE_FORMAT"] == $datestyles[$i] )
+      echo " selected=\"selected\"";
+     echo ">" . $datestyles[$i + 1] . "</option>\n";
+    }
+   ?>
+  </select><br />
+
+  <select name="admin_DATE_FORMAT_MY">
+   <?php
+    // Date format for a month and year (with no day of the month)
+    // You can add new date formats below if you want
+    // but also add in admin.php
+    $datestyles = array (
+     "__month__ __yyyy__", translate("December") . " 2000",
+     "__month__ __yy__", translate("December") . " 00",
+     "__month__-__yyyy__", translate("December") . "-2000",
+     "__month__-__yy__", translate("December") . "-00",
+     "__mm__/__yyyy__", "12/2000",
+     "__mm__/__yy__", "12/00",
+     "__mm__-__yyyy__", "12-2000",
+     "__mm__-__yy__", "12-00",
+     "__yyyy__-__mm__", "2000-12",
+     "__yy__-__mm__", "00-12",
+     "__yyyy__/__mm__", "2000/12",
+     "__yy__/__mm__", "00/12"
+    );
+    for ( $i = 0; $i < count ( $datestyles ); $i += 2 ) {
+     echo "<option value=\"" . $datestyles[$i] . "\"";
+     if ( $s["DATE_FORMAT_MY"] == $datestyles[$i] )
+      echo " selected=\"selected\"";
+     echo ">" . $datestyles[$i + 1] . "</option>\n";
+    }
+   ?>
+  </select><br />
+
+  <select name="admin_DATE_FORMAT_MD">
+   <?php
+    // Date format for a month and day (with no year displayed)
+    // You can add new date formats below if you want.
+    // but also add in admin.php
+    $datestyles = array (
+     "__month__ __dd__", translate("December") . " 31",
+     "__month__-__dd__", translate("December") . "-31",
+     "__mm__/__dd__", "12/31",
+     "__mm__-__dd__", "12-31",
+     "__dd__/__mm__", "31/12",
+     "__dd__-__mm__", "31-12"
+    );
+    for ( $i = 0; $i < count ( $datestyles ); $i += 2 ) {
+     echo "<option value=\"" . $datestyles[$i] . "\"";
+     if ( $s["DATE_FORMAT_MD"] == $datestyles[$i] )
+      echo " selected=\"selected\"";
+     echo ">" . $datestyles[$i + 1] . "</option>\n";
+    }
+   ?>
+  </select>
+ </td></tr>
+ <tr><td class="tooltip" title="<?php etooltip("time-format-help")?>">
+  <?php etranslate("Time format")?>:</td><td>
+  <label><input type="radio" name="admin_TIME_FORMAT" value="12" <?php if ( $s["TIME_FORMAT"] == "12" ) echo " checked=\"checked\"";?> /> <?php etranslate("12 hour")?></label> 
+  <label><input type="radio" name="admin_TIME_FORMAT" value="24" <?php if ( $s["TIME_FORMAT"] != "12" ) echo " checked=\"checked\"";?> /> <?php etranslate("24 hour")?></label>
+ </td></tr>
+ <tr><td class="tooltip" title="<?php etooltip("time-interval-help")?>">
+  <label for="admin_time_int"><?php etranslate("Time interval")?>:</label></td><td>
+  <select name="admin_TIME_SLOTS" id="admin_time_int">
+   <option value="24" <?php if ( $s["TIME_SLOTS"] == "24" ) echo " selected=\"selected\""?>>1 <?php etranslate("hour")?></option>
+   <option value="48" <?php if ( $s["TIME_SLOTS"] == "48" ) echo " selected=\"selected\""?>>30 <?php etranslate("minutes")?></option>
+   <option value="72" <?php if ( $s["TIME_SLOTS"] == "72" ) echo " selected=\"selected\""?>>20 <?php etranslate("minutes")?></option>
+   <option value="144" <?php if ( $s["TIME_SLOTS"] == "144" ) echo " selected=\"selected\""?>>10 <?php etranslate("minutes")?></option>
+  </select>
+ </td></tr>
+ <tr><td class="tooltip" title="<?php etooltip("auto-refresh-help");?>">
+  <?php etranslate("Auto-refresh calendars")?>:</td><td>
+  <label><input type="radio" name="admin_auto_refresh" value="Y" <?php if ( $s["auto_refresh"] == "Y" ) echo " checked=\"checked\"";?> /> <?php etranslate("Yes")?></label> 
+  <label><input type="radio" name="admin_auto_refresh" value="N" <?php if ( $s["auto_refresh"] != "Y" ) echo " checked=\"checked\"";?> /> <?php etranslate("No")?></label>
+ </td></tr>
+ <tr><td class="tooltip" title="<?php etooltip("auto-refresh-time-help");?>">
+      <?php etranslate("Auto-refresh time")?>:</td><td>
+  <input type="text" name="admin_auto_refresh_time" size="4" value="<?php if ( empty ( $s["auto_refresh_time"] ) ) echo "0"; else echo $s["auto_refresh_time"]; ?>" /> <?php etranslate("minutes")?>
+ </td></tr>
+ <tr><td class="tooltip" title="<?php etooltip("require-approvals-help");?>">
+  <?php etranslate("Require event approvals")?>:</td><td>
+  <label><input type="radio" name="admin_require_approvals" value="Y" <?php if ( $s["require_approvals"] != "N" ) echo " checked=\"checked\"";?> /> <?php etranslate("Yes")?></label> 
+  <label><input type="radio" name="admin_require_approvals" value="N" <?php if ( $s["require_approvals"] == "N" ) echo " checked=\"checked\"";?> /> <?php etranslate("No")?></label>
+ </td></tr>
+ <tr><td class="tooltip" title="<?php etooltip("display-unapproved-help");?>">
+      <?php etranslate("Display unapproved")?>:</td><td>
+  <label><input type="radio" name="admin_DISPLAY_UNAPPROVED" value="Y" <?php if ( $s["DISPLAY_UNAPPROVED"] != "N" ) echo " checked=\"checked\"";?> /> <?php etranslate("Yes")?></label> 
+  <label><input type="radio" name="admin_DISPLAY_UNAPPROVED" value="N" <?php if ( $s["DISPLAY_UNAPPROVED"] == "N" ) echo " checked=\"checked\"";?> /> <?php etranslate("No")?></label>
+ </td></tr>
+ <tr><td class="tooltip" title="<?php etooltip("display-week-number-help")?>">
+  <?php etranslate("Display week number")?>:</td><td>
+  <label><input type="radio" name="admin_DISPLAY_WEEKNUMBER" value="Y" <?php if ( $s["DISPLAY_WEEKNUMBER"] != "N" ) echo " checked=\"checked\"";?> /> <?php etranslate("Yes")?></label> 
+  <label><input type="radio" name="admin_DISPLAY_WEEKNUMBER" value="N" <?php if ( $s["DISPLAY_WEEKNUMBER"] == "N" ) echo " checked=\"checked\"";?> /> <?php etranslate("No")?></label>
+ </td></tr>
+ <tr><td class="tooltip" title="<?php etooltip("display-week-starts-on")?>">
+  <?php etranslate("Week starts on")?>:</td><td>
+  <label><input type="radio" name="admin_WEEK_START" value="0" <?php if ( $s["WEEK_START"] != "1" ) echo " checked=\"checked\"";?> /> <?php etranslate("Sunday")?></label> 
+  <label><input type="radio" name="admin_WEEK_START" value="1" <?php if ( $s["WEEK_START"] == "1" ) echo " checked=\"checked\"";?> /> <?php etranslate("Monday")?></label>
+ </td></tr>
+ <tr><td class="tooltip" title="<?php etooltip("work-hours-help")?>">
+  <?php etranslate("Work hours")?>:</td><td>
+  <label for="workstart"><?php etranslate("From")?> </label>
+  <select name="admin_WORK_DAY_START_HOUR" id="workstart">
+   <?php
+    for ( $i = 0; $i < 24; $i++ ) {
+     echo "<option value=\"$i\"" .
+      ( $i == $s["WORK_DAY_START_HOUR"] ? " selected=\"selected\"" : "" ) .
+     ">" . display_time ( $i * 10000, 1 ) . "</option>\n";
+    }
+   ?>
+  </select> 
+  <label for="workend"><?php etranslate("to")?> </label>
+  <select name="admin_WORK_DAY_END_HOUR" id="workend">
+   <?php
+    for ( $i = 0; $i < 24; $i++ ) {
+     echo "<option value=\"$i\"" .
+      ( $i == $s["WORK_DAY_END_HOUR"] ? " selected=\"selected\"" : "" ) .
+     ">" . display_time ( $i * 10000, 1 ) . "</option>\n";
+    }
+   ?>
+  </select>
+ </td></tr>
+ <tr><td class="tooltip" title="<?php etooltip("disable-priority-field-help")?>">
+  <?php etranslate("Disable Priority field")?>:</td><td>
+  <label><input type="radio" name="admin_disable_priority_field" value="Y"<?php if ( $s["disable_priority_field"] != "N" ) echo " checked=\"checked\"";?> /> <?php etranslate("Yes")?></label> 
+  <label><input type="radio" name="admin_disable_priority_field" value="N"<?php if ( $s["disable_priority_field"] == "N" ) echo " checked=\"checked\"";?> /> <?php etranslate("No")?></label>
+ </td></tr>
+ <tr><td class="tooltip" title="<?php etooltip("disable-access-field-help")?>">
+  <?php etranslate("Disable Access field")?>:</td><td>
+  <label><input type="radio" name="admin_disable_access_field" value="Y"<?php if ( $s["disable_access_field"] != "N" ) echo " checked=\"checked\"";?> /> <?php etranslate("Yes")?></label> 
+  <label><input type="radio" name="admin_disable_access_field" value="N"<?php if ( $s["disable_access_field"] == "N" ) echo " checked=\"checked\"";?> /> <?php etranslate("No")?></label>
+ </td></tr>
+ <tr><td class="tooltip" title="<?php etooltip("disable-participants-field-help")?>">
+  <?php etranslate("Disable Participants field")?>:</td><td>
+  <label><input type="radio" name="admin_disable_participants_field" value="Y" <?php if ( $s["disable_participants_field"] != "N" ) echo " checked=\"checked\"";?> /> <?php etranslate("Yes")?></label> 
+  <label><input type="radio" name="admin_disable_participants_field" value="N" <?php if ( $s["disable_participants_field"] == "N" ) echo " checked=\"checked\"";?> /> <?php etranslate("No")?></label>
+ </td></tr>
+ <tr><td class="tooltip" title="<?php etooltip("disable-repeating-field-help")?>">
+  <?php etranslate("Disable Repeating field")?>:</td><td>
+  <label><input type="radio" name="admin_disable_repeating_field" value="Y" <?php if ( $s["disable_repeating_field"] != "N" ) echo " checked=\"checked\"";?> /> <?php etranslate("Yes")?></label> 
+  <label><input type="radio" name="admin_disable_repeating_field" value="N" <?php if ( $s["disable_repeating_field"] == "N" ) echo " checked=\"checked\"";?> /> <?php etranslate("No")?></label>
+ </td></tr>
+ <tr><td class="tooltip" title="<?php etooltip("popup-includes-siteextras-help")?>">
+  <?php etranslate("Display Site Extras in popup")?>:</td><td>
+  <label><input type="radio" name="admin_site_extras_in_popup" value="Y" <?php if ( $s["site_extras_in_popup"] == "Y" ) echo " checked=\"checked\"";?> /> <?php etranslate("Yes")?></label> 
+  <label><input type="radio" name="admin_site_extras_in_popup" value="N" <?php if ( $s["site_extras_in_popup"] != "Y" ) echo " checked=\"checked\"";?> /> <?php etranslate("No")?></label>
+ </td></tr>
+ <tr><td class="tooltip" title="<?php etooltip("allow-html-description-help")?>">
+  <?php etranslate("Allow HTML in Description")?>:</td><td>
+  <label><input type="radio" name="admin_allow_html_description" value="Y" <?php if ( $s["allow_html_description"] == "Y" ) echo " checked=\"checked\"";?> /> <?php etranslate("Yes")?></label> 
+  <label><input type="radio" name="admin_allow_html_description" value="N" <?php if ( $s["allow_html_description"] != "Y" ) echo " checked=\"checked\"";?> /> <?php etranslate("No")?></label>
+ </td></tr>
+ <tr><td class="tooltip" title="<?php etooltip("allow-view-other-help")?>">
+  <?php etranslate("Allow viewing other user's calendars")?>:</td><td>
+  <label><input type="radio" name="admin_allow_view_other" value="Y" <?php if ( $s["allow_view_other"] != "N" ) echo " checked=\"checked\"";?> /> <?php etranslate("Yes")?></label> 
+  <label><input type="radio" name="admin_allow_view_other" value="N" <?php if ( $s["allow_view_other"] == "N" ) echo " checked=\"checked\"";?> /> <?php etranslate("No")?></label>
+ </td></tr>
+ <tr><td class="tooltip" title="<?php etooltip("allow-view-add-help")?>">
+  <?php etranslate("Include add event link in views")?>:</td><td>
+  <label><input type="radio" name="admin_add_link_in_views" value="Y" <?php if ( $s["add_link_in_views"] != "N" ) echo " checked=\"checked\"";?> /> <?php etranslate("Yes")?></label> 
+  <label><input type="radio" name="admin_add_link_in_views" value="N" <?php if ( $s["add_link_in_views"] == "N" ) echo " checked=\"checked\"";?> /> <?php etranslate("No")?></label>
+ </td></tr>
+ <tr><td class="tooltip" title="<?php etooltip("remember-last-login-help")?>">
+  <?php etranslate("Remember last login")?>:</td><td>
+  <label><input type="radio" name="admin_remember_last_login" value="Y" <?php if ( $s["remember_last_login"] != "N" ) echo " checked=\"checked\"";?> /> <?php etranslate("Yes")?></label> 
+  <label><input type="radio" name="admin_remember_last_login" value="N" <?php if ( $s["remember_last_login"] == "N" ) echo " checked=\"checked\"";?> /> <?php etranslate("No")?></label>
+ </td></tr>
+ <tr><td class="tooltip" title="<?php etooltip("conflict-check-help")?>">
+  <?php etranslate("Check for event conflicts")?>:</td><td>
+  <label><input type="radio" name="admin_allow_conflicts" value="N" <?php if ( $s["allow_conflicts"] == "N" ) echo " checked=\"checked\"";?> /> <?php etranslate("Yes")?></label> 
+  <label><input type="radio" name="admin_allow_conflicts" value="Y" <?php if ( $s["allow_conflicts"] != "N" ) echo " checked=\"checked\"";?> /> <?php etranslate("No")?></label>
+ </td></tr>
+ <tr><td class="tooltip" title="<?php etooltip("conflict-months-help")?>">
+      <?php etranslate("Conflict checking months")?>:</td><td>
+  <input type="text" size="3" name="admin_conflict_repeat_months" value="<?php echo htmlspecialchars ( $conflict_repeat_months );?>" />
+ </td></tr>
+ <tr><td class="tooltip" title="<?php etooltip("conflict-check-override-help")?>">
+      <?php etranslate("Allow users to override conflicts")?>:</td><td>
+  <label><input type="radio" name="admin_allow_conflict_override" value="Y" <?php if ( $s["allow_conflict_override"] == "Y" ) echo " checked=\"checked\"";?> /> <?php etranslate("Yes")?></label> 
+  <label><input type="radio" name="admin_allow_conflict_override" value="N" <?php if ( $s["allow_conflict_override"] != "Y" ) echo " checked=\"checked\"";?> /> <?php etranslate("No")?></label>
+ </td></tr>
+ <tr><td class="tooltip" title="<?php etooltip("limit-appts-help")?>">
+  <?php etranslate("Limit number of timed events per day")?>:</td><td>
+  <label><input type="radio" name="admin_limit_appts" value="Y" <?php if ( $s["limit_appts"] == "Y" ) echo " checked=\"checked\"";?> /> <?php etranslate("Yes")?></label> 
+  <label><input type="radio" name="admin_limit_appts" value="N" <?php if ( $s["limit_appts"] != "Y" ) echo " checked=\"checked\"";?> /> <?php etranslate("No")?></label>
+ </td></tr>
+ <tr><td class="tooltip" title="<?php etooltip("limit-appts-number-help")?>">
+      <?php etranslate("Maximum timed events per day")?>:</td><td>
+  <input type="text" size="3" name="admin_limit_appts_number" value="<?php echo htmlspecialchars ( $limit_appts_number );?>" />
+ </td></tr>
+ <tr><td class="tooltip" title="<?php etooltip("timed-evt-len-help")?>">
+  <?php etranslate("Specify timed event length by")?>:</td><td>
+  <label><input type="radio" name="admin_TIMED_EVT_LEN" value="D" <?php if ( $s["TIMED_EVT_LEN"] != "E" ) echo " checked=\"checked\"";?> /> <?php etranslate("Duration")?></label> 
+  <label><input type="radio" name="admin_TIMED_EVT_LEN" value="E" <?php if ( $s["TIMED_EVT_LEN"] == "E" ) echo " checked=\"checked\"";?> /> <?php etranslate("End Time")?></label>
+ </td></tr>
+</table>
+</div>
+<!-- END SETTINGS -->
+
+
+<!--
+// <h3><?php etranslate("Plugins")?></h3>
+// <table class="standard" cellspacing="1" cellpadding="2">
+// <tr><td class="tooltip" title="<?php etooltip("plugins-enabled-help");?>"><?php etranslate("Enable Plugins")?>:</td>
+//   <td><label><input type="radio" name="admin_plugins_enabled" value="Y" <?php if ( $s["plugins_enabled"] == "Y" ) echo " checked=\"checked\"";?> /> <?php etranslate("Yes")?></label> 
+//       <label><input type="radio" name="admin_plugins_enabled" value="N" <?php if ( $s["plugins_enabled"] != "Y" ) echo " checked=\"checked\"";?> /> <?php etranslate("No")?></label>
+//</td></tr>
+
+// <?php
+// if ( $plugins_enabled == "Y" ) {
+//   $plugins = get_plugin_list ( true );
+
+//   for ( $i = 0; $i < count ( $plugins ); $i++ ) {
+//     $val = $s[$plugins[$i] . ".plugin_status"];
+//     echo "<tr><td class=\"tooltip\" title=\"" .
+//       tooltip("plugins-sort-key-help") . "\">   " .
+//       translate("Plugin") . " " . $plugins[$i] . ":</td>\n";
+//     echo "<td><input type=\"radio\" name=\"admin_" .
+//        $plugins[$i] . "_plugin_status\" value=\"Y\" ";
+//     if ( $val != "N" ) echo " checked=\"checked\"";
+//     echo " /> " . translate("Yes");
+//     echo "<input type=\"radio\" name=\"admin_" .
+//        $plugins[$i] . "_plugin_status\" VALUE=\"N\" ";
+//     if ( $val == "N" ) echo " checked=\"checked\"";
+//     echo " /> " . translate("No") . "</td></tr>\n";
+//   }
+// }
+// ?>
+//</table>
+-->
+
+<!-- BEGIN PUBLIC ACCESS -->
+<a name="tabpublic"></a>
+<div id="tabscontent_public">
+ <table cellspacing="0" cellpadding="3">
+  <tr><td class="tooltip" title="<?php etooltip("allow-public-access-help")?>">
+   <?php etranslate("Allow public access")?>:</td><td>
+   <label><input type="radio" name="admin_public_access" value="Y" <?php if ( $s["public_access"] == "Y" ) echo " checked=\"checked\"";?> onclick="public_handler()" /> <?php etranslate("Yes")?></label> 
+   <label><input type="radio" name="admin_public_access" value="N" <?php if ( $s["public_access"] != "Y" ) echo " checked=\"checked\"";?> onclick="public_handler()" /> <?php etranslate("No")?></label>
+  </td></tr>
+  <tr id="pa1"><td class="tooltip" title="<?php etooltip("public-access-default-visible")?>">
+       <?php etranslate("Public access visible by default")?>:</td><td>
+   <label><input type="radio" name="admin_public_access_default_visible" value="Y" <?php if ( $s["public_access_default_visible"] == "Y" ) echo " checked=\"checked\"";?> /> <?php etranslate("Yes")?></label> 
+   <label><input type="radio" name="admin_public_access_default_visible" value="N" <?php if ( $s["public_access_default_visible"] != "Y" ) echo " checked=\"checked\"";?> /> <?php etranslate("No")?></label>
+  </td></tr>
+  <tr id="pa2"><td class="tooltip" title="<?php etooltip("public-access-default-selected")?>">
+       <?php etranslate("Public access is default participant")?>:</td><td>
+   <label><input type="radio" name="admin_public_access_default_selected" value="Y" <?php if ( $s["public_access_default_selected"] == "Y" ) echo " checked=\"checked\"";?> /> <?php etranslate("Yes")?></label> 
+   <label><input type="radio" name="admin_public_access_default_selected" value="N" <?php if ( $s["public_access_default_selected"] != "Y" ) echo " checked=\"checked\"";?> /> <?php etranslate("No")?></label>
+  </td></tr>
+  <tr id="pa3"><td class="tooltip" title="<?php etooltip("public-access-view-others-help")?>">
+       <?php etranslate("Public access can view other users")?>:</td><td>
+   <label><input type="radio" name="admin_public_access_others" value="Y" <?php if ( $s["public_access_others"] == "Y" ) echo " checked=\"checked\"";?> /> <?php etranslate("Yes")?></label> 
+   <label><input type="radio" name="admin_public_access_others" value="N" <?php if ( $s["public_access_others"] != "Y" ) echo " checked=\"checked\"";?> /> <?php etranslate("No")?></label>
+  </td></tr>
+  <tr id="pa4"><td class="tooltip" title="<?php etooltip("public-access-can-add-help")?>">
+       <?php etranslate("Public access can add events")?>:</td><td>
+   <label><input type="radio" name="admin_public_access_can_add" value="Y" <?php if ( $s["public_access_can_add"] == "Y" ) echo " checked=\"checked\"";?> /> <?php etranslate("Yes")?></label> 
+   <label><input type="radio" name="admin_public_access_can_add" value="N" <?php if ( $s["public_access_can_add"] != "Y" ) echo " checked=\"checked\"";?> /> <?php etranslate("No")?></label>
+  </td></tr>
+  <tr id="pa5"><td class="tooltip" title="<?php etooltip("public-access-add-requires-approval-help")?>">
+       <?php etranslate("Public access new events require approval")?>:</td><td>
+   <label><input type="radio" name="admin_public_access_add_needs_approval" value="Y" <?php if ( $s["public_access_add_needs_approval"] != "N" ) echo " checked=\"checked\"";?> /> <?php etranslate("Yes")?></label> 
+   <label><input type="radio" name="admin_public_access_add_needs_approval" value="N" <?php if ( $s["public_access_add_needs_approval"] == "N" ) echo " checked=\"checked\"";?> /> <?php etranslate("No")?></label>
+  </td></tr>
+  <tr id="pa6"><td class="tooltip" title="<?php etooltip("public-access-sees-participants-help")?>">
+       <?php etranslate("Public access can view participants")?>:</td><td>
+   <label><input type="radio" name="admin_public_access_view_part" value="Y" <?php if ( $s["public_access_view_part"] != "N" ) echo " checked=\"checked\"";?> /> <?php etranslate("Yes")?></label> 
+   <label><input type="radio" name="admin_public_access_view_part" value="N" <?php if ( $s["public_access_view_part"] == "N" ) echo " checked=\"checked\"";?> /> <?php etranslate("No")?></label>
+  </td></tr>
+</table>
+</div>
+
+<!-- BEGIN GROUPS -->
+<div id="tabscontent_groups">
+<table cellspacing="0" cellpadding="3">
+ <tr><td class="tooltip" title="<?php etooltip("groups-enabled-help")?>">
+  <?php etranslate("Groups enabled")?>:</td><td>
+  <label><input type="radio" name="admin_groups_enabled" value="Y" <?php if ( $s["groups_enabled"] == "Y" ) echo " checked=\"checked\"";?> /> <?php etranslate("Yes")?></label> 
+  <label><input type="radio" name="admin_groups_enabled" value="N" <?php if ( $s["groups_enabled"] != "Y" ) echo " checked=\"checked\"";?> /> <?php etranslate("No")?></label>
+ </td></tr>
+ <tr><td class="tooltip" title="<?php etooltip("user-sees-his-group-help")?>">
+  <?php etranslate("User sees only his groups")?>:</td><td>
+  <label><input type="radio" name="admin_user_sees_only_his_groups" value="Y" <?php if ( $s["user_sees_only_his_groups"] == "Y" ) echo " checked=\"checked\"";?> /> <?php etranslate("Yes")?></label> 
+  <label><input type="radio" name="admin_user_sees_only_his_groups" value="N" <?php if ( $s["user_sees_only_his_groups"] != "Y" ) echo " checked=\"checked\"";?> /> <?php etranslate("No")?></label>
+ </td></tr>
+</table>
+</div>
+
+<!-- BEGIN NONUSER -->
+<div id="tabscontent_nonuser">
+<table cellspacing="0" cellpadding="3">
+ <tr><td class="tooltip" title="<?php etooltip("nonuser-enabled-help")?>">
+  <?php etranslate("Nonuser enabled")?>:</td><td>
+  <label><input type="radio" name="admin_nonuser_enabled" value="Y" <?php if ( $s["nonuser_enabled"] == "Y" ) echo " checked=\"checked\"";?> /> <?php etranslate("Yes")?></label> 
+  <label><input type="radio" name="admin_nonuser_enabled" value="N" <?php if ( $s["nonuser_enabled"] != "Y" ) echo " checked=\"checked\"";?> /> <?php etranslate("No")?></label>
+ </td></tr>
+ <tr><td class="tooltip" title="<?php etooltip("nonuser-list-help")?>">
+  <?php etranslate("Nonuser list")?>:</td><td>
+  <label><input type="radio" name="admin_nonuser_at_top" value="Y" <?php if ( $s["nonuser_at_top"] == "Y" ) echo " checked=\"checked\"";?> /> <?php etranslate("Top")?></label> 
+  <label><input type="radio" name="admin_nonuser_at_top" value="N" <?php if ( $s["nonuser_at_top"] != "Y" ) echo " checked=\"checked\"";?> /> <?php etranslate("Bottom")?></label>
+</td></tr>
+</table>
+</div>
+
+<!-- BEGIN REPORTS -->
+<div id="tabscontent_other">
+<table cellspacing="0" cellpadding="3">
+<tr><td class="tooltip" title="<?php etooltip("reports-enabled-help")?>">
+ <?php etranslate("Reports enabled")?>:</td><td>
+ <label><input type="radio" name="admin_reports_enabled" value="Y" <?php if ( $s["reports_enabled"] == "Y" ) echo " checked=\"checked\"";?> /> <?php etranslate("Yes")?></label> 
+ <label><input type="radio" name="admin_reports_enabled" value="N" <?php if ( $s["reports_enabled"] != "Y" ) echo " checked=\"checked\"";?> /> <?php etranslate("No")?></label>
+</td></tr>
+</table>
+
+<!-- BEGIN PUBLISHING -->
+<table cellspacing="0" cellpadding="3">
+<tr><td class="tooltip" title="<?php etooltip("subscriptions-enabled-help")?>">
+ <?php etranslate("Allow remote subscriptions")?>:</td><td>
+ <label><input type="radio" name="admin_PUBLISH_ENABLED" value="Y" <?php if ( $s["PUBLISH_ENABLED"] == "Y" ) echo " checked=\"checked\"";?> /> <?php etranslate("Yes")?></label> 
+ <label><input type="radio" name="admin_PUBLISH_ENABLED" value="N" <?php if ( $s["PUBLISH_ENABLED"] != "Y" ) echo " checked=\"checked\"";?> /> <?php etranslate("No")?></label>
+</td></tr>
+</table>
+
+<!-- BEGIN CATEGORIES -->
+<table cellspacing="0" cellpadding="3">
+ <tr><td class="tooltip" title="<?php etooltip("categories-enabled-help")?>">
+  <?php etranslate("Categories enabled")?>:</td><td>
+  <label><input type="radio" name="admin_categories_enabled" value="Y" <?php if ( $s["categories_enabled"] == "Y" ) echo " checked=\"checked\"";?> /> <?php etranslate("Yes")?></label> 
+  <label><input type="radio" name="admin_categories_enabled" value="N" <?php if ( $s["categories_enabled"] != "Y" ) echo " checked=\"checked\"";?> /> <?php etranslate("No")?></label>
+ </td></tr>
+</table>
+
+<!-- BEGIN EXT PARTICIPANTS -->
+<table cellspacing="0" cellpadding="3">
+ <tr><td class="tooltip" title="<?php etooltip("allow-external-users-help")?>">
+  <?php etranslate("Allow external users")?>:</td><td>
+  <label><input type="radio" name="admin_allow_external_users" value="Y" <?php if ( $s["allow_external_users"] == "Y" ) echo " checked=\"checked\"";?> onclick="eu_handler()" /> <?php etranslate("Yes")?></label> 
+  <label><input type="radio" name="admin_allow_external_users" value="N" <?php if ( $s["allow_external_users"] != "Y" ) echo " checked=\"checked\"";?> onclick="eu_handler()" /> <?php etranslate("No")?></label>
+ </td></tr>
+ <tr id="eu1"><td class="tooltip" title="<?php etooltip("external-can-receive-notification-help")?>">
+      <?php etranslate("External users can receive email notifications")?>:</td><td>
+  <label><input type="radio" name="admin_external_notifications" value="Y" <?php if ( $s["external_notifications"] == "Y" ) echo " checked=\"checked\"";?> /> <?php etranslate("Yes")?></label> 
+  <label><input type="radio" name="admin_external_notifications" value="N" <?php if ( $s["external_notifications"] != "Y" ) echo " checked=\"checked\"";?> /> <?php etranslate("No")?></label>
+ </td></tr>
+ <tr id="eu2"><td class="tooltip" title="<?php etooltip("external-can-receive-reminder-help")?>">
+      <?php etranslate("External users can receive email reminders")?>:</td><td>
+  <label><input type="radio" name="admin_external_reminders" value="Y" <?php if ( $s["external_reminders"] == "Y" ) echo " checked=\"checked\"";?> /> <?php etranslate("Yes")?></label> 
+  <label><input type="radio" name="admin_external_reminders" value="N" <?php if ( $s["external_reminders"] != "Y" ) echo " checked=\"checked\"";?> /> <?php etranslate("No")?></label>
+ </td></tr>
+</table>
+</div>
+
+<!-- BEGIN EMAIL -->
+<div id="tabscontent_email">
+<table cellspacing="0" cellpadding="3">
+<tr><td class="tooltip" title="<?php etooltip("email-enabled-help")?>">
+ <?php etranslate("Email enabled")?>:</td><td>
+ <label><input type="radio" name="admin_send_email" value="Y" <?php if ( $s["send_email"] == "Y" ) echo " checked=\"checked\"";?> onclick="email_handler()" /> <?php etranslate("Yes")?></label> 
+ <label><input type="radio" name="admin_send_email" value="N" <?php if ( $s["send_email"] != "Y" ) echo " checked=\"checked\"";?> onclick="email_handler()" /> <?php etranslate("No")?></label>
+</td></tr>
+<tr id="em1"><td class="tooltip" title="<?php etooltip("email-default-sender")?>">
+     <?php etranslate("Default sender address")?>:</td><td>
+ <input type="text" size="30" name="admin_email_fallback_from" value="<?php echo htmlspecialchars ($email_fallback_from );?>" />
+</td></tr>
+<tr id="em2"><td colspan="2" style="font-weight:bold;">
+ <?php etranslate("Default user settings")?>:
+</td></tr>
+<tr id="em3"><td class="tooltip" title="<?php etooltip("email-event-reminders-help")?>">
+     <?php etranslate("Event reminders")?>:</td><td>
+ <label><input type="radio" name="admin_EMAIL_REMINDER" value="Y" <?php if ( $s["EMAIL_REMINDER"] != "N" ) echo " checked=\"checked\"";?> /> <?php etranslate("Yes")?></label> 
+ <label><input type="radio" name="admin_EMAIL_REMINDER" value="N" <?php if ( $s["EMAIL_REMINDER"] == "N" ) echo " checked=\"checked\"";?> /> <?php etranslate("No")?></label>
+</td></tr>
+<tr id="em4"><td class="tooltip" title="<?php etooltip("email-event-added")?>">
+     <?php etranslate("Events added to my calendar")?>:</td><td>
+ <label><input type="radio" name="admin_EMAIL_EVENT_ADDED" value="Y" <?php if ( $s["EMAIL_EVENT_ADDED"] != "N" ) echo " checked=\"checked\"";?> /> <?php etranslate("Yes")?></label> 
+ <label><input type="radio" name="admin_EMAIL_EVENT_ADDED" value="N" <?php if ( $s["EMAIL_EVENT_ADDED"] == "N" ) echo " checked=\"checked\"";?> /> <?php etranslate("No")?></label>
+</td></tr>
+<tr id="em5"><td class="tooltip" title="<?php etooltip("email-event-updated")?>">
+     <?php etranslate("Events updated on my calendar")?>:</td><td>
+ <label><input type="radio" name="admin_EMAIL_EVENT_UPDATED" value="Y" <?php if ( $s["EMAIL_EVENT_UPDATED"] != "N" ) echo " checked=\"checked\"";?> /> <?php etranslate("Yes")?></label> 
+ <label><input type="radio" name="admin_EMAIL_EVENT_UPDATED" value="N" <?php if ( $s["EMAIL_EVENT_UPDATED"] == "N" ) echo " checked=\"checked\"";?> /> <?php etranslate("No")?></label>
+</td></tr>
+<tr id="em6"><td class="tooltip" title="<?php etooltip("email-event-deleted");?>">
+     <?php etranslate("Events removed from my calendar")?>:</td><td>
+ <label><input type="radio" name="admin_EMAIL_EVENT_DELETED" value="Y" <?php if ( $s["EMAIL_EVENT_DELETED"] != "N" ) echo " checked=\"checked\"";?> /> <?php etranslate("Yes")?></label> 
+ <label><input type="radio" name="admin_EMAIL_EVENT_DELETED" value="N" <?php if ( $s["EMAIL_EVENT_DELETED"] == "N" ) echo " checked=\"checked\"";?> /> <?php etranslate("No")?></label>
+</td></tr>
+<tr id="em7"><td class="tooltip" title="<?php etooltip("email-event-rejected")?>">
+     <?php etranslate("Event rejected by participant")?>:</td><td>
+ <label><input type="radio" name="admin_EMAIL_EVENT_REJECTED" value="Y" <?php if ( $s["EMAIL_EVENT_REJECTED"] != "N" ) echo " checked=\"checked\"";?> /> <?php etranslate("Yes")?></label> 
+ <label><input type="radio" name="admin_EMAIL_EVENT_REJECTED" value="N" <?php if ( $s["EMAIL_EVENT_REJECTED"] == "N" ) echo " checked=\"checked\"";?> /> <?php etranslate("No")?></label>
+</td></tr>
+</table>
+</div>
+
+<!-- BEGIN COLORS -->
+<div id="tabscontent_colors">
+<table cellspacing="0" cellpadding="3">
+<tr><td><label>
+ <?php etranslate("Allow user to customize colors")?>:</label></td><td colspan="3">
+ <label><input type="radio" name="admin_allow_color_customization" value="Y"<?php if ( $s["allow_color_customization"] != "N" ) echo " checked=\"checked\"";?> /> <?php etranslate("Yes")?></label> 
+ <label><input type="radio" name="admin_allow_color_customization" value="N"<?php if ( $s["allow_color_customization"] == "N" ) echo " checked=\"checked\"";?> /> <?php etranslate("No")?></label>
+</td></tr>
+<tr><td><label>
+ <?php etranslate("Enable gradient images for background colors")?>:</label></td><td colspan="3">
+<?php if ( function_exists ( "imagepng" ) ) { ?>
+ <label><input type="radio" name="admin_enable_gradients" value="Y"<?php if ( $s["enable_gradients"] != "N" ) echo " checked=\"checked\"";?> /> <?php etranslate("Yes")?></label> 
+ <label><input type="radio" name="admin_enable_gradients" value="N"<?php if ( $s["enable_gradients"] == "N" ) echo " checked=\"checked\"";?> /> <?php etranslate("No")?></label>
+<?php } else {
+        etranslate("Not available");
+      } ?>
+</td></tr>
+<tr><td>
+ <label for="docbg"><?php etranslate("Document background")?>:</td><td>
+ <input type="text" name="admin_BGCOLOR" id="docbg" size="8" maxlength="7" value="<?php echo $s["BGCOLOR"]; ?>" onkeyup="updateColor(this);" /></td><td class="sample" style="background-color:<?php echo $s["BGCOLOR"]?>;">
+      </td><td>
+ <input type="button" onclick="selectColor('admin_BGCOLOR')" value="<?php etranslate("Select")?>..." name="" />
+</td></tr>
+<tr><td>
+ <label for="doctitle"><?php etranslate("Document title")?>:</td><td>
+ <input type="text" name="admin_H2COLOR" id="doctitle" size="8" maxlength="7" value="<?php echo $s["H2COLOR"]; ?>" onkeyup="updateColor(this);" /></td><td class="sample" style="background-color:<?php echo $s["H2COLOR"]?>;">
+      </td><td>
+ <input type="button" onclick="selectColor('admin_H2COLOR')" value="<?php etranslate("Select")?>..." name="" />
+</td></tr>
+<tr><td>
+ <label for="doctext"><?php etranslate("Document text")?>:</label></td><td>
+ <input type="text" name="admin_TEXTCOLOR" id="doctext" size="8" maxlength="7" value="<?php echo $s["TEXTCOLOR"]; ?>" onkeyup="updateColor(this);" /></td><td class="sample" style="background-color:<?php echo $s["TEXTCOLOR"]?>;">
+      </td><td>
+ <input type="button" onclick="selectColor('admin_TEXTCOLOR')" value="<?php etranslate("Select")?>..." name="" />
+</td></tr>
+<tr><td>
+ <label for="tblgrid"><?php etranslate("Table grid color")?>:</label></td><td>
+ <input type="text" name="admin_TABLEBG" id="tblgrid" size="8" maxlength="7" value="<?php echo $s["TABLEBG"]; ?>" onkeyup="updateColor(this);" /></td><td class="sample" style="background-color:<?php echo $s["TABLEBG"]?>;">
+      </td><td>
+ <input type="button" onclick="selectColor('admin_TABLEBG')" value="<?php etranslate("Select")?>..." name="" />
+</td></tr>
+<tr><td>
+ <label for="thbg"><?php etranslate("Table header background")?>:</label></td><td>
+ <input type="text" name="admin_THBG" id="thbg" size="8" maxlength="7" value="<?php echo $s["THBG"]; ?>" onkeyup="updateColor(this);" /></td><td class="sample" style="background-color:<?php echo $s["THBG"]?>;">
+      </td><td>
+ <input type="button" onclick="selectColor('admin_THBG')" value="<?php etranslate("Select")?>..." name="" />
+</td></tr>
+<tr><td>
+ <label for="thfg"><?php etranslate("Table header text")?>:</label></td><td>
+ <input type="text" name="admin_THFG" id="thfg" size="8" maxlength="7" value="<?php echo $s["THFG"]; ?>" onkeyup="updateColor(this);" /></td><td class="sample" style="background-color:<?php echo $s["THFG"]?>;">
+      </td><td>
+ <input type="button" onclick="selectColor('admin_THFG')" value="<?php etranslate("Select")?>..." name="" />
+</td></tr>
+<tr><td>
+ <label for="tdbg"><?php etranslate("Table cell background")?>:<label></td><td>
+ <input type="text" name="admin_CELLBG" id="tdbg" size="8" maxlength="7" value="<?php echo $s["CELLBG"]; ?>" onkeyup="updateColor(this);" /></td><td class="sample" style="background-color:<?php echo $s["CELLBG"]?>;">
+      </td><td>
+ <input type="button" onclick="selectColor('admin_CELLBG')" value="<?php etranslate("Select")?>..." name="" />
+</td></tr>
+<tr><td>
+ <label for="tdbgtoday"><?php etranslate("Table cell background for current day")?>:</label></td><td>
+ <input type="text" name="admin_TODAYCELLBG" id="tdbgtoday" size="8" maxlength="7" value="<?php echo $s["TODAYCELLBG"]; ?>" onkeyup="updateColor(this);" /></td><td class="sample" style="background-color:<?php echo $s["TODAYCELLBG"]?>;">
+      </td><td>
+ <input type="button" onclick="selectColor('admin_TODAYCELLBG')" value="<?php etranslate("Select")?>..." name="" />
+</td></tr>
+<tr><td>
+ <label for="tdbgweekend"><?php etranslate("Table cell background for weekends")?>:</label></td><td>
+ <input type="text" name="admin_WEEKENDBG" id="tdbgweekend" size="8" maxlength="7" value="<?php echo $s["WEEKENDBG"]; ?>" onkeyup="updateColor(this);" /></td><td class="sample" style="background-color:<?php echo $s["WEEKENDBG"]?>;">
+      </td><td>
+ <input type="button" onclick="selectColor('admin_WEEKENDBG')" value="<?php etranslate("Select")?>..." name="" />
+</td></tr>
+<tr><td>
+ <label for="popupbg"><?php etranslate("Event popup background")?>:</label></td><td>
+ <input type="text" name="admin_POPUP_BG" id="popupbg" size="8" maxlength="7" value="<?php echo $s["POPUP_BG"]; ?>" onkeyup="updateColor(this);" /></td><td class="sample" style="background-color:<?php echo $s["POPUP_BG"]?>;">
+      </td><td>
+ <input type="button" onclick="selectColor('admin_POPUP_BG')" value="<?php etranslate("Select")?>..." name="" />
+</td></tr>
+<tr><td>
+ <label for="popupfg"><?php etranslate("Event popup text")?>:</label></td><td>
+ <input type="text" name="admin_POPUP_FG" id="popupfg" size="8" maxlength="7" value="<?php echo $s["POPUP_FG"]; ?>" onkeyup="updateColor(this);" /></td><td class="sample" style="background-color:<?php echo $s["POPUP_FG"]?>;">
+      </td><td>
+ <input type="button" onclick="selectColor('admin_POPUP_FG')" value="<?php etranslate("Select")?>..." name="" />
+</td></tr>
+</table>
+</div>
+</div>
+
+<br /><br />
+<div style="border-width:0px;">
+ <input type="submit" value="<?php etranslate("Save")?>" name="" />
+</div>
+</form>
+
+<?php } // if $error ?>
+
+<?php print_trailer (); ?>
+</body>
+</html>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/admin_handler.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/admin_handler.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/admin_handler.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,63 @@
+<?php
+/* $Id: admin_handler.php,v 1.7.4.4 2006/03/23 16:06:06 cknudsen Exp $ */
+include_once 'includes/init.php';
+
+$error = "";
+
+if ( ! $is_admin ) {
+  $error = translate("You are not authorized");
+}
+
+if ( $error == "" ) {
+  while ( list ( $key, $value ) = each ( $HTTP_POST_VARS ) ) {
+    $setting = substr ( $key, 6 );
+    if ( $key == 'ovrd'  )
+      continue;
+    // validate key name.  should start with "admin_" and not include
+    // any unusual characters that might cause SQL injection
+    if ( ! preg_match ( '/admin_[A-Za-z0-9_]+$/', $key ) ) {
+      die_miserable_death ( 'Invalid admin setting name "' .
+        $key . '"' );
+    }
+    if ( strlen ( $setting ) > 0 ) {
+      $sql = "DELETE FROM webcal_config WHERE cal_setting = '$setting'";
+      if ( ! dbi_query ( $sql ) ) {
+        $error = translate("Error") . ": " . dbi_error () .
+          "<br /><br /><span style=\"font-weight:bold;\">SQL:</span> $sql";
+        break;
+      }
+      if ( strlen ( $value ) > 0 ) {
+        $sql = "INSERT INTO webcal_config " .
+          "( cal_setting, cal_value ) VALUES " .
+          "( '$setting', '$value' )";
+        if ( ! dbi_query ( $sql ) ) {
+          $error = translate("Error") . ": " . dbi_error () .
+            "<br /><br /><span style=\"font-weight:bold;\">SQL:</span> $sql";
+          break;
+        }
+      }
+    }
+  }
+}
+
+if ( empty ( $error ) ) {
+  if ( empty ( $ovrd ) )
+    do_redirect ( "admin.php" );
+  else
+    do_redirect ( "admin.php?ovrd=$ovrd" );
+}
+
+print_header();
+?>
+
+<h2><?php etranslate("Error")?></h2>
+
+<?php etranslate("The following error occurred")?>:
+<blockquote>
+<?php echo $error; ?>
+</blockquote>
+
+<?php print_trailer(); ?>
+
+</body>
+</html>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/adminhome.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/adminhome.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/adminhome.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,143 @@
+<?php
+/*
+	$Id: adminhome.php,v 1.15 2005/01/19 13:54:13 cknudsen Exp $
+
+	Page Description:
+		Serves as the home page for administrative functions.
+	Input Parameters:
+		None
+	Security:
+		Users will see different options available on this page.
+ */
+include_once 'includes/init.php';
+
+$COLUMNS = 3;
+
+$style = "<style type=\"text/css\">
+table.admin {
+	padding: 5px;
+	border: 1px solid #000000;
+";
+if ( function_exists ("imagepng") &&
+  ( empty ($GLOBALS['enable_gradients']) || $GLOBALS['enable_gradients'] == 'Y' ) ) {
+	$style .= "	background-image: url(\"gradient.php?height=300&base=ccc&percent=10\");\n";
+} else {
+	$style .= "	background-color: #CCCCCC;\n";
+}
+$style .= "
+}
+table.admin td {
+	padding: 20px;
+	text-align: center;
+}
+.admin td a {
+	padding: 10px;
+	width: 200px;
+	text-align: center;
+	background-color: #CCCCCC;
+	border-top: 1px solid #EEEEEE;
+	border-left: 1px solid #EEEEEE;
+	border-bottom: 1px solid #777777;
+	border-right: 1px solid #777777;
+}
+.admin td a:hover {
+	padding: 10px;
+	width: 200px;
+	text-align: center;
+	background-color: #AAAAAA;
+	border-top: 1px solid #777777;
+	border-left: 1px solid #777777;
+	border-bottom: 1px solid #EEEEEE;
+	border-right: 1px solid #EEEEEE;
+}
+</style>
+";
+print_header('', $style);
+
+$names = array ();
+$links = array ();
+
+if ($is_admin) {
+	$names[] = translate("System Settings");
+	$links[] = "admin.php";
+}
+
+$names[] = translate("Preferences");
+$links[] = "pref.php";
+//remove user admin
+/*
+if ( $is_admin ) {
+	$names[] = translate("Users");
+	$links[] = "users.php";
+} else {
+	$names[] = translate("Account");
+	$links[] = "users.php";
+}
+*/
+
+if ( $single_user != 'Y' ) {
+	$names[] = translate("Assistants");
+	$links[] = "assistant_edit.php";
+}
+
+if ( $categories_enabled == 'Y' ) {
+	$names[] = translate("Categories");
+	$links[] = "category.php";
+}
+
+$names[] = translate("Views");
+$links[] = "views.php";
+
+$names[] = translate("Layers");
+$links[] = "layers.php";
+
+if ( $reports_enabled == 'Y' ) {
+	$names[] = translate("Reports");
+	$links[] = "report.php";
+}
+
+if ( $is_admin ) {
+	$names[] = translate("Delete Events");
+	$links[] = "purge.php";
+
+	$names[] = translate("Activity Log");
+	$links[] = "activity_log.php";
+}
+
+if ( $is_admin && ! empty ($public_access) && $public_access == 'Y' ) {
+	$names[] = translate("Public Preferences");
+	$links[] = "pref.php?public=1";
+}
+
+if ( $is_admin && ! empty ( $public_access ) && $public_access == 'Y' &&
+	$public_access_can_add == 'Y' && $public_access_add_needs_approval == 'Y' ) {
+	$names[] = translate("Unapproved Public Events");
+	$links[] = "list_unapproved.php?user=__public__";
+}
+?>
+
+<h2><?php etranslate("Administrative Tools")?></h2>
+
+<table class="admin">
+<?php
+	for ( $i = 0; $i < count ($names); $i++ ) {
+		if ( $i % $COLUMNS == 0 )
+			echo "<tr>\n";
+			echo "<td>";
+		if ( ! empty ($links[$i]) )
+			echo "<a href=\"$links[$i]\">";
+		echo $names[$i];
+		if ( ! empty ($links[$i]) )
+			echo "</a>";
+		echo "</td>\n";
+		if ($i % $COLUMNS == $COLUMNS - 1)
+			echo "</tr>\n";
+	}
+	if ( $i % $COLUMNS != 0 )
+		echo "</tr>\n";
+?>
+</table>
+
+<?php print_trailer(); ?>
+</body>
+</html>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/approve_entry.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/approve_entry.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/approve_entry.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,55 @@
+<?php
+include_once 'includes/init.php';
+load_user_categories();
+
+$error = "";
+
+if ( $readonly == 'Y' ) {
+  $error = translate("You are not authorized");
+}
+
+// Allow administrators to approve public events
+if ( $public_access == "Y" && ! empty ( $public ) && $is_admin )
+  $app_user = "__public__";
+else
+  $app_user = ( $is_assistant || $is_nonuser_admin ? $user : $login );
+
+if ( empty ( $error ) && $id > 0 ) {
+  if ( ! dbi_query ( "UPDATE webcal_entry_user SET cal_status = 'A' " .
+    "WHERE cal_login = '$app_user' AND cal_id = $id" ) ) {
+    $error = translate("Error approving event") . ": " . dbi_error ();
+    //plugin add father
+    $params[0] = $app_user ;
+    $params[1] = $id ;
+    plugin_hook('add_cal_link_father_event',$params);
+    
+  } else {
+    activity_log ( $id, $login, $app_user, $LOG_APPROVE, "" );
+  }
+  // Update any extension events related to this one.
+  $res = dbi_query ( "SELECT cal_id FROM webcal_entry " .
+    "WHERE cal_ext_for_id = $id" );
+  if ( $res ) {
+    if ( $row = dbi_fetch_row ( $res ) ) {
+      $ext_id = $row[0];
+      if ( ! dbi_query ( "UPDATE webcal_entry_user SET cal_status = 'A' " .
+        "WHERE cal_login = '$app_user' AND cal_id = $ext_id" ) ) {
+        $error = translate("Error approving event") . ": " . dbi_error ();
+      }
+    }
+    dbi_free_result ( $res );
+  }
+}
+
+if ( empty ( $error ) ) {
+  if ( ! empty ( $ret ) && $ret == "list" )
+    do_redirect ( "list_unapproved.php?user=$app_user" );
+  else
+    do_redirect ( "view_entry.php?id=$id&user=$app_user" );
+  exit;
+}
+print_header ();
+echo "<h2>" . translate("Error") . "</h2>\n";
+echo "<p>" . $error . "</p>\n";
+print_trailer ();
+?>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/assistant_edit.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/assistant_edit.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/assistant_edit.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,78 @@
+<?php
+include_once 'includes/init.php';
+
+if ( empty ( $login) || $login == "__public__" ) {
+  // do not allow public access
+  do_redirect ( empty ( $STARTVIEW ) ? "month.php" : "$STARTVIEW" );
+  exit;
+}
+
+if ($user != $login)
+  $user = (($is_admin || $is_nonuser_admin) && $user) ? $user : $login;
+
+if ( $groups_enabled == "Y" ) {
+  $INC = array('js/assistant_edit.php');
+} else {
+  $INC = '';
+}
+print_header($INC);
+?>
+
+<form action="assistant_edit_handler.php" method="post" name="assistanteditform">
+<?php
+  if ($user) echo "<input type=\"hidden\" name=\"user\" value=\"$user\" />\n";
+  if ( $is_nonuser_admin ) {
+    nonuser_load_variables ( $user, "nonuser" );
+    echo "<h2>" . $nonuserfullname . " " . translate("Assistants")
+        ."<br />\n-- " . translate("Admin mode") . " --</h2>\n";
+  } else {
+    echo "<h2>" . translate("Your assistants") . "</h2>\n";
+  }
+?>
+<a title="<?php etranslate("Admin") ?>" class="nav" href="adminhome.php">« <?php etranslate("Admin") ?></a><br /><br />
+
+<table style="border-width:0px;">
+<tr><td style="vertical-align:top;">
+	<label for="users"><?php etranslate("Assistants"); ?>:</label></td><td>
+	<select name="users[]" id="users" size="10" multiple="multiple">
+<?php
+  // get list of all users
+  $users = get_my_users ();
+  // get list of users for this view
+  $sql = "SELECT cal_boss, cal_assistant FROM webcal_asst WHERE cal_boss = '$user'";
+  $res = dbi_query ( $sql );
+  if ( $res ) {
+    while ( $row = dbi_fetch_row ( $res ) ) {
+      $assistantuser[$row[1]] = 1;
+    }
+    dbi_free_result ( $res );
+  }
+  for ( $i = 0; $i < count ( $users ); $i++ ) {
+    $u = $users[$i]['cal_login'];
+    if ($u == $login ) continue;
+    if ($u == '__public__' ) continue;
+    echo "<option value=\"$u\"";
+    if ( ! empty ( $assistantuser[$u] ) ) {
+      echo " selected=\"selected\"";
+    }
+    echo ">" . $users[$i]['cal_fullname'] . "</option>\n";
+  }
+?>
+</select>
+<?php
+if ( $groups_enabled == "Y" ) {
+  echo "<input type=\"button\" onclick=\"selectUsers()\" value=\"" .
+    translate("Select") . "...\" />\n";
+}
+?>
+</td></tr>
+<tr><td colspan="2" style="text-align:center;">
+<br />
+<input type="submit" name="action" value="<?php etranslate("Save"); ?>" />
+</td></tr>
+</table>
+</form>
+
+<?php print_trailer(); ?>
+</body>
+</html>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/assistant_edit_handler.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/assistant_edit_handler.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/assistant_edit_handler.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,37 @@
+<?php
+include_once 'includes/init.php';
+
+$error = "";
+if ($user != $login)
+  $user = ( ($is_admin || $is_nonuser_admin) && $user ) ? $user : $login;
+
+# update user list
+dbi_query ( "DELETE FROM webcal_asst WHERE cal_boss = '$user'" );
+if ( ! empty ( $users ) ){
+  for ( $i = 0; $i < count ( $users ); $i++ ) {
+    dbi_query ( "INSERT INTO webcal_asst ( cal_boss, cal_assistant ) " .
+      "VALUES ( '$user', '$users[$i]' )" );
+  }
+}
+
+$url = "assistant_edit.php";
+if (($is_admin || $is_nonuser_admin) && $login != $user )
+   $url = $url . (strpos($url, "?") === false ? "?" : "&") . "user=$user";
+do_redirect ( $url );
+
+print_header();
+?>
+<h2><?php etranslate("Error")?></h2>
+
+<blockquote>
+<?php
+
+echo $error;
+//if ( $sql != "" )
+//  echo "<br /><br /><span style=\"font-weight:bold;\">SQL:</span> $sql";
+//?>
+</blockquote>
+
+<?php print_trailer(); ?>
+</body>
+</html>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/availability.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/availability.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/availability.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,75 @@
+<?php
+/*
+ * Page Description:
+ *	Display a timebar view of a single day.
+ *
+ * Input Parameters:
+ *	month (*) - specify the starting month of the timebar
+ *	day (*) - specify the starting day of the timebar
+ *	year (*) - specify the starting year of the timebar
+ *	users (*) - csv of users to include
+ *	(*) required field
+	*
+ * Security:
+ *	Must have "allow view others" enabled ($allow_view_other) in
+ *	  System Settings unless the user is an admin user ($is_admin).
+ */
+
+include_once 'includes/init.php';
+
+// Don't allow users to use this feature if "allow view others" is
+// disabled.
+if ( $allow_view_other == "N" && ! $is_admin ) {
+  // not allowed...
+  exit;
+}
+
+// input args in URL
+// users: list of comma-separated users
+if ( empty ( $users ) ) {
+  echo "Program Error: No users specified!"; exit;
+} else if ( empty ( $year ) ) {
+  echo "Program Error: No year specified!"; exit;
+} else if ( empty ( $month ) ) {
+  echo "Program Error: No month specified!"; exit;
+} else if ( empty ( $day ) ) {
+  echo "Program Error: No day specified!"; exit;
+}
+
+$INC = array ( 'js/availability.php' );
+print_header($INC, '', "onload=\"focus();\"", true );
+
+$span = ($WORK_DAY_END_HOUR - $WORK_DAY_START_HOUR) * 3 + 1;
+if (strlen($month) == 1) $month = '0'.$month;   // add leading zeros
+if (strlen($day) == 1) $day = '0'.$day;         // add leading zeros
+$date = $year.$month.$day;
+$time = mktime(0,0,0,$month,$day,$year);
+$wday = strftime ( "%w", $time );
+$base_url = "?users=$users";
+$prev_url = $base_url."&year=".  strftime('%Y', $time - 86400)
+                     ."&month=". strftime('%m', $time - 86400)
+                     ."&day=".   strftime('%d', $time - 86400);
+$next_url = $base_url."&year=".  strftime('%Y', $time + 86400)
+                     ."&month=". strftime('%m', $time + 86400)
+                     ."&day=".   strftime('%d', $time + 86400);
+
+$users = explode(",",$users);
+?>
+
+<div style="border-width:0px; width:99%;">
+<a title="<?php etranslate("Previous")?>" class="prev" href="<?php echo $prev_url ?>"><img src="leftarrow.gif" class="prevnext" alt="<?php etranslate("Previous")?>" /></a>
+<a title="<?php etranslate("Next")?>" class="next" href="<?php echo $next_url ?>"><img src="rightarrow.gif" class="prevnext" alt="<?php etranslate("Next")?>" /></a>
+<div class="title">
+<span class="date"><?php 
+  printf ( "%s, %s %d, %d", weekday_name ( $wday ), month_name ( $month - 1 ), $day, $year ); 
+?></span><br />
+</div></div>
+<br />
+
+<form action="availability.php" method="post">
+<?php daily_matrix($date,$users); ?>
+</form>
+
+<?php print_trailer ( false, true, true ); ?>
+
+</body></html>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/category.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/category.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/category.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,101 @@
+<?php
+include_once 'includes/init.php';
+
+// load user and global cats
+load_user_categories ();
+
+$error = "";
+
+if ( $categories_enabled == "N" ) {
+  send_to_preferred_view ();
+  exit;
+}
+
+// If editing, make sure they are editing their own
+// (or they are an admin user).
+if ( ! empty ( $id ) ) {
+  $res = dbi_query ( "SELECT cat_id, cat_owner FROM webcal_categories WHERE " .
+    "cat_id = $id" );
+  if ( $res ) {
+    if ( $row = dbi_fetch_row ( $res ) ) {
+      if ( $row[0] != $id )
+        $error = translate ( "Invalid entry id" ) . ": " . $id;
+      else if ( $row[1] != $login && ! $is_admin )
+        $error = translate ( "You are not authorized" ) . ".";
+    }
+    dbi_free_result ( $res );
+  } else {
+    $error = translate("Database error") . ": " . dbi_error ();
+  }
+}
+
+print_header();
+?>
+<h2><?php etranslate("Categories")?></h2>
+<a title="<?php etranslate("Admin") ?>" class="nav" href="adminhome.php">« <?php etranslate("Admin") ?></a><br /><br />
+<?php
+
+if ( empty ( $add ) )
+  $add = 0;
+
+// Adding/Editing category
+if ( ( ( $add == '1' ) || ( ! empty ( $id ) ) ) && empty ( $error ) ) {
+  $button = translate("Add");
+  ?>
+  <form action="category_handler.php" method="post">
+  <?php
+  if ( ! empty ( $id ) ) {
+    echo "<input name=\"id\" type=\"hidden\" value=\"$id\" />";
+    $button = translate("Save");
+    $catname = $categories[$id];
+    $catowner = $category_owners[$id];
+  } else {
+    $catname = '';
+  }
+  ?>
+  <?php etranslate("Category Name")?>: <input type="text" name="catname" size="20" value="<?php echo htmlspecialchars ( $catname ); ?>" />
+  <br />
+  <?php if ( $is_admin && empty ( $id ) ) { ?>
+    <?php etranslate("Global")?>:
+      <label><input type="radio" name="isglobal" value="N" <?php if ( ! empty ( $catowner ) || empty ( $id ) ) echo " checked=\"checked\"";?> /> <?php etranslate("No")?></label>  
+      <label><input type="radio" name="isglobal" value="Y" <?php if ( empty ( $catowner ) && ! empty ( $id ) ) echo " checked=\"checked\"";?> /> <?php etranslate("Yes")?></label>
+  <?php } ?>
+  <br /><br />
+  <input type="submit" name="action" value="<?php echo $button;?>" />
+  <?php if ( ! empty ( $id ) ) {  ?>
+	<input type="submit" name="action" value="<?php etranslate("Delete");?>" onclick="return confirm('<?php etranslate("Are you sure you want to delete this entry?"); ?>')" />
+  <?php }  ?>
+  </form>
+  <?php
+} else if ( empty ( $error ) ) {
+  // Displaying Categories
+  $global_found = false;
+  if ( ! empty ( $categories ) ) {
+    echo "<ul>";
+    foreach ( $categories as $K => $V ) {
+      echo "<li>";
+      if ( $category_owners[$K] == $login || $is_admin )
+        echo "<a href=\"category.php?id=$K\">$V</a>";
+      else
+        echo $V;
+      if ( empty ( $category_owners[$K] ) ) {
+        echo "<sup>*</sup>";
+	$global_found = true;
+      }
+      echo "</li>\n";
+    }
+    echo "</ul>";
+  }
+  if ( $global_found )
+    echo "<br /><br />\n<sup>*</sup> " . translate ( "Global" );
+  echo "<p><a href=\"category.php?add=1\">" . translate("Add New Category") . "</a></p><br />\n";
+}
+
+if ( ! empty ( $error ) ) {
+  echo "<span style=\"font-weight:bold;\">" . translate ( "Error" ) . ":</span>" . $error;
+}
+?>
+
+<?php print_trailer(); ?>
+</body>
+</html>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/category_handler.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/category_handler.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/category_handler.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,92 @@
+<?php
+include_once 'includes/init.php';
+
+// does the category belong to the user?
+$is_my_event = false;
+if ( empty ( $id ) ) {
+  $is_my_event = true; // new event
+} else {
+  $res = dbi_query ( "SELECT cat_id, cat_owner FROM webcal_categories " .
+    "WHERE cat_id = $id" );
+  if ( $res ) {
+    $row = dbi_fetch_row ( $res );
+    if ( $row[0] == $id && $row[1] == $login )
+      $is_my_event = true;
+    else if ( $row[0] == $id && empty ( $row[1] ) && $is_admin )
+      $is_my_event = true; // global category
+    dbi_free_result ( $res );
+  } else {
+    $error = translate("Database error") . ": " . dbi_error ();
+  }
+}
+
+if ( ! $is_my_event )
+  $error = translate ( "You are not authorized" ) . ".";
+
+
+if ( empty ( $error ) &&
+  ( $action == "Delete" || $action == translate ("Delete") ) ) {
+  // delete this category
+  if ( $is_admin ) {
+    if ( ! dbi_query ( "DELETE FROM webcal_categories " .
+      "WHERE cat_id = $id AND " .
+      "( cat_owner = '$login' OR cat_owner IS NULL )" ) )
+      $error = translate ("Database error") . ": " . dbi_error();
+  } else {
+    if ( ! dbi_query ( "DELETE FROM webcal_categories " .
+      "WHERE cat_id = $id AND cat_owner = '$login'" ) )
+      $error = translate ("Database error") . ": " . dbi_error();
+  }
+      
+  // Set any events in this category to NULL
+  if ( ! dbi_query ( "UPDATE webcal_entry_user SET cal_category = NULL " .
+    "WHERE cal_category = $id" ) )
+    $error = translate ("Database error") . ": " . dbi_error();
+} else if ( empty ( $error ) ) {
+  if ( ! empty ( $id ) ) {
+    # update (don't let them change global status)
+    $sql = "UPDATE webcal_categories SET cat_name = '$catname' " .
+      "WHERE cat_id = $id";
+    if ( ! dbi_query ( $sql ) ) {
+      $error = translate ("Database error") . ": " . dbi_error();
+    }
+  } else {
+    // add new category
+    // get new id
+    $res = dbi_query ( "SELECT MAX(cat_id) FROM webcal_categories" );
+    if ( $res ) {
+      $row = dbi_fetch_row ( $res );
+      $id = $row[0] + 1;
+      dbi_free_result ( $res );
+      if ( $is_admin ) {
+        if ( $isglobal == "Y" )
+          $catowner = "NULL";
+        else
+          $catowner = "'$login'";
+      } else
+        $catowner = "'$login'";
+      $sql = "INSERT INTO webcal_categories " .
+        "( cat_id, cat_owner, cat_name ) " .
+        "VALUES ( $id, $catowner, '$catname' )";
+      if ( ! dbi_query ( $sql ) ) {
+        $error = translate ("Database error") . ": " . dbi_error();
+      }
+    } else {
+      $error = translate ("Database error") . ": " . dbi_error();
+    }
+  }
+}
+if ( empty ( $error ) )
+  do_redirect ( "category.php" );
+
+print_header();
+?>
+<h2><?php etranslate("Error")?></h2>
+
+<blockquote>
+<?php echo $error; ?>
+</blockquote>
+
+<?php print_trailer(); ?>
+</body>
+</html>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/circle.gif
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/circle.gif	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/circle.gif	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1 @@
+GIF89a  ¡  ÿÿÿDƒÇ,T€   !ù    ,       D&{ËžN´Ú ;
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/colors.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/colors.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/colors.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,58 @@
+<?php
+include_once 'includes/init.php';
+$INC = array('js/colors.php');
+print_header($INC,'','',true);
+
+$colors = array("00", "33", "66", "99", "CC", "FF");
+$grayscale = array("FFFFFF","DDDDDD","C0C0C0","969696","808080","646464","4B4B4B","242424","000000");
+$green1 = array("FF", "CC", "99");
+$green2 = array("66", "33", "00");
+
+?>
+
+<div style="text-align:center;">
+<table style="border-collapse: separate;border: none;background-color:#000000;border-spacing: 1px;">
+<?php
+// First green array 
+for ($r=0; $r<count($colors); $r++){     //the red colors loop
+  echo "<tr>\n"; 
+  for ($g=0; $g<count($green1); $g++){   //the green colors loop
+    for ($b=0; $b<count($colors); $b++){ //iterate through the six blue colors
+      $c = $colors[$r].$green1[$g].$colors[$b];
+      echo "<td style=\"background-color:#" . $c . ";\"><a href=\"javascript:sendColor('#" . $c .
+        "')\"><img src=\"spacer.gif\" class=\"color\" alt=\"\" /></a></td>\n";
+    } //End of b-blue innermost loop
+  } //End of g-green loop
+  echo "</tr>\n"; // close row 
+} //End of r-red outermost loop
+
+// second green array
+for ($r=0; $r<count($colors); $r++){     //the red colors loop
+  echo "<tr>\n"; 
+  for ($g=0; $g<count($green2); $g++){   //the green colors loop
+    for ($b=0; $b<count($colors); $b++){ //iterate through the six blue colors
+      $c = $colors[$r].$green2[$g].$colors[$b];
+      echo "<td style=\"background-color:#" . $c . ";\"><a href=\"javascript:sendColor('#" . $c .
+        "')\"><img src=\"spacer.gif\" class=\"color\" alt=\"\" /></a></td>\n";
+    } //End of b-blue innermost loop
+  } //End of g-green loop
+  echo "</tr>\n"; // close row 
+} //End of r-red outermost loop
+?>
+</table>
+<br />
+<table style="border-collapse: separate;border: none;background-color:#000000;border-spacing: 1px;"><tr>
+<?php
+for ($gs=0; $gs<count($grayscale); $gs++){     
+  $c = $grayscale[$gs];
+  echo "<td style=\"background-color:#" . $c . ";\"><a href=\"javascript:sendColor('#" . $c .
+       "')\"><img src=\"spacer.gif\" class=\"color\" alt=\"\" /></a></td>\n";
+} 
+?>
+</tr></table>
+
+</div>
+
+<?php print_trailer ( false, false, true ); ?>
+</body>
+</html>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/datesel.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/datesel.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/datesel.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,83 @@
+<?php
+/* $Id: datesel.php,v 1.31 2005/03/11 13:59:51 cknudsen Exp $ */
+include_once 'includes/init.php';
+
+// month and year are being overwritten so we will copy vars to fix.
+// this will make datesel.php still work where ever it is called from.
+// The values $fday, $fmonth and $fyear hold the form variable names
+// to update when the user selects a date.  (This is needed in
+// the js/datesel.php file that gets included below.)
+$fday = getGetValue ( "fday" );
+$fmonth = getGetValue ( "fmonth" );
+$fyear = getGetValue ( "fyear" );
+
+$INC = array('js/datesel.php');
+print_header($INC,'','',true);
+
+if ( strlen ( $date ) > 0 ) {
+  $thisyear = substr ( $date, 0, 4 );
+  $thismonth = substr ( $date, 4, 2 );
+} else {
+  $thismonth = date("m");
+  $thisyear = date("Y");
+}
+
+$next = mktime ( 3, 0, 0, $thismonth + 1, 1, $thisyear );
+$nextyear = date ( "Y", $next );
+$nextmonth = date ( "m", $next );
+$nextdate = date ( "Ym", $next ) . "01";
+
+$prev = mktime ( 3, 0, 0, $thismonth - 1, 1, $thisyear );
+$prevyear = date ( "Y", $prev );
+$prevmonth = date ( "m", $prev );
+$prevdate = date ( "Ym", $prev ) . "01";
+
+?>
+
+<div style="text-align:center;">
+<table align="center" class="minical">
+<tr>
+<td><a title="<?php etranslate("Previous")?>"  class="prev" href="datesel.php?form=<?php echo $form?>&fday=<?php echo $fday?>&fmonth=<?php echo $fmonth?>&fyear=<?php echo $fyear?>&date=<?php echo $prevdate?>"><img src="leftarrowsmall.gif"  alt="<?php etranslate("Previous")?>" /></a></td>
+<th colspan="5"><?php echo month_name ( $thismonth - 1 ) . " " . $thisyear;?></th>
+<td><a title="<?php etranslate("Next")?>"class="next"  href="datesel.php?form=<?php echo $form?>&fday=<?php echo $fday?>&fmonth=<?php echo $fmonth?>&fyear=<?php echo $fyear?>&date=<?php echo $nextdate?>"><img src="rightarrowsmall.gif"  alt="<?php etranslate("Next")?>" /></a></td>
+</tr>
+<?php
+echo "<tr class=\"day\">\n";
+if ( $WEEK_START == 0 ) echo "<td>" .
+  weekday_short_name ( 0 ) . "</td>\n";
+for ( $i = 1; $i < 7; $i++ ) {
+  echo "<td>" .
+    weekday_short_name ( $i ) . "</td>\n";
+}
+if ( $WEEK_START == 1 ) echo "<td>" .
+  weekday_short_name ( 0 ) . "</td>\n";
+echo "</tr>\n";
+if ( $WEEK_START == "1" )
+  $wkstart = get_monday_before ( $thisyear, $thismonth, 1 );
+else
+  $wkstart = get_sunday_before ( $thisyear, $thismonth, 1 );
+$monthstart = mktime ( 3, 0, 0, $thismonth, 1, $thisyear );
+$monthend = mktime ( 3, 0, 0, $thismonth + 1, 0, $thisyear );
+for ( $i = $wkstart; date ( "Ymd", $i ) <= date ( "Ymd", $monthend );
+  $i += ( 24 * 3600 * 7 ) ) {
+  echo "<tr>\n";
+  for ( $j = 0; $j < 7; $j++ ) {
+    $date = $i + ( $j * 24 * 3600 );
+    if ( date ( "Ymd", $date ) >= date ( "Ymd", $monthstart ) &&
+      date ( "Ymd", $date ) <= date ( "Ymd", $monthend ) ) {
+      echo "<td><a href=\"javascript:sendDate('" .
+        date ( "Ymd", $date ) . "')\">" .
+        date ( "j", $date ) . "</a></td>\n";
+    } else {
+      echo "<td></td>\n";
+    }
+  }
+  echo "</tr>\n";
+}
+?>
+</table>
+</div>
+
+<?php print_trailer ( false, true, true ); ?>
+</body>
+</html>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/day.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/day.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/day.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,120 @@
+<?php
+include_once 'includes/init.php';
+
+if (($user != $login) && $is_nonuser_admin)
+  load_user_layers ($user);
+else
+  load_user_layers ();
+
+load_user_categories ();
+
+$wday = strftime ( "%w", mktime ( 3, 0, 0, $thismonth, $thisday, $thisyear ) );
+
+$now = mktime ( 3, 0, 0, $thismonth, $thisday, $thisyear );
+$nowYmd = date ( "Ymd", $now );
+
+$next = mktime ( 3, 0, 0, $thismonth, $thisday + 1, $thisyear );
+$nextYmd = date ( "Ymd", $next );
+$nextyear = date ( "Y", $next );
+$nextmonth = date ( "m", $next );
+$nextday = date ( "d", $next );
+
+$prev = mktime ( 3, 0, 0, $thismonth, $thisday - 1, $thisyear );
+$prevYmd = date ( "Ymd", $prev );
+$prevyear = date ( "Y", $prev );
+$prevmonth = date ( "m", $prev );
+$prevday = date ( "d", $prev );
+
+if ( ! empty ( $bold_days_in_year ) && $bold_days_in_year == 'Y' ) {
+ $boldDays = true;
+} else {
+ $boldDays = false;
+}
+
+$startdate = sprintf ( "%04d%02d01", $thisyear, $thismonth );
+$enddate = sprintf ( "%04d%02d31", $thisyear, $thismonth );
+
+$HeadX = '';
+if ( $auto_refresh == "Y" && ! empty ( $auto_refresh_time ) ) {
+  $refresh = $auto_refresh_time * 60; // convert to seconds
+  $HeadX = "<meta http-equiv=\"refresh\" content=\"$refresh; url=day.php?$u_url" .
+    "date=$nowYmd$caturl" . ( ! empty ( $friendly ) ? "&friendly=1" : "") . "\" />\n";
+}
+$INC = array('js/popups.php');
+print_header($INC,$HeadX);
+?>
+
+<?php
+/* Pre-Load the repeated events for quckier access */
+$repeated_events = read_repeated_events ( empty ( $user ) ? $login : $user,
+  $cat_id, $startdate  );
+
+/* Pre-load the non-repeating events for quicker access */
+$events = read_events ( empty ( $user ) ? $login : $user, $startdate, $enddate,
+  $cat_id  );
+?>
+
+<table>
+<tr><td style="vertical-align:top; width:82%;">
+<div style="border-width:0px;">
+<a title="<?php etranslate("Next"); ?>" class="next" href="day.php?<?php echo $u_url;?>date=<?php echo $nextYmd . $caturl;?>"><img src="rightarrow.gif" alt="<?php etranslate("Next"); ?>" /></a>
+<a title="<?php etranslate("Previous"); ?>" class="prev" href="day.php?<?php echo $u_url;?>date=<?php echo $prevYmd . $caturl;?>"><img src="leftarrow.gif" alt="<?php etranslate("Previous"); ?>" /></a>
+<div class="title">
+<span class="date"><?php
+  echo date_to_str ( $nowYmd );
+?></span>
+<span class="user"><?php
+  // display current calendar's user (if not in single user)
+  if ( $single_user == "N" ) {
+    echo "<br />";
+    echo $user_fullname;
+  }
+  if ( $is_nonuser_admin )
+    echo "<br />-- " . translate("Admin mode") . " --";
+  if ( $is_assistant )
+    echo "<br />-- " . translate("Assistant mode") . " --";
+?></span>
+<?php
+  if ( $categories_enabled == "Y" && (!$user || ($user == $login || $is_assistant ))) {
+    echo "<br />\n<br />\n";
+    print_category_menu( 'day', sprintf ( "%04d%02d%02d",$thisyear, $thismonth, $thisday ), $cat_id );
+  }
+?>
+</div>
+</div>
+</td>
+<td style="vertical-align:top;" rowspan="2">
+<!-- START MINICAL -->
+<div class="minicalcontainer">
+<?php display_small_month ( $thismonth, $thisyear, true ); ?>
+</div>
+</td></tr><tr><td>
+<table class="glance" cellspacing="0" cellpadding="0">
+<?php
+if ( empty ( $TIME_SLOTS ) )
+  $TIME_SLOTS = 24;
+
+print_day_at_a_glance ( date ( "Ymd", $now ),
+  empty ( $user ) ? $login : $user, $can_add );
+?>
+</table>
+</td>
+</tr></table>
+<br />
+<?php
+ if ( ! empty ( $eventinfo ) ) echo $eventinfo;
+
+  display_unapproved_events ( ( $is_assistant || $is_nonuser_admin ? $user : $login ) );
+?>
+<br />
+<a title="<?php etranslate("Generate printer-friendly version")?>" class="printer" href="day.php?<?php
+  echo $u_url;
+  if ( $thisyear ) {
+    echo "year=$thisyear&month=$thismonth&day=$thisday&";
+  }
+  if ( ! empty ( $cat_id ) ) echo "cat_id=$cat_id&";
+?>friendly=1" target="cal_printer_friendly" onmouseover="window.status = '<?php etranslate("Generate printer-friendly version")?>'">[<?php etranslate("Printer Friendly")?>]</a>
+
+<?php print_trailer (); ?>
+</body>
+</html>
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/del_entry.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/del_entry.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/del_entry.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,236 @@
+<?php
+include_once 'includes/init.php';
+
+$my_event = false;
+$can_edit = false;
+
+// First, check to see if this user should be able to delete this event.
+if ( $id > 0 ) {
+  // first see who has access to edit this entry
+  if ( $is_admin ) {
+    $can_edit = true;
+  } else if ( $readonly == "Y" ) {
+    $can_edit = false;
+  } else {
+    $can_edit = false;
+    $sql = "SELECT webcal_entry.cal_id FROM webcal_entry, " .
+      "webcal_entry_user WHERE webcal_entry.cal_id = " .
+      "webcal_entry_user.cal_id AND webcal_entry.cal_id = $id " .
+      "AND (webcal_entry.cal_create_by = '$login' " .
+      "OR webcal_entry_user.cal_login = '$login')";
+    $res = dbi_query ( $sql );
+    if ( $res ) {
+      $row = dbi_fetch_row ( $res );
+      if ( $row && $row[0] > 0 )
+        $can_edit = true;
+      dbi_free_result ( $res );
+    }
+  }
+}
+
+// See who owns the event.  Owner should be able to delete.
+$res = dbi_query (
+  "SELECT cal_create_by FROM webcal_entry WHERE cal_id = $id" );
+if ( $res ) {
+  $row = dbi_fetch_row ( $res );
+  $owner = $row[0];
+  dbi_free_result ( $res );
+  
+  
+  if ( $owner == $login || $is_assistant && ( $user == $owner ) || $is_nonuser_admin && ( $user == $owner ) ) {
+    $my_event = true;
+    $can_edit = true;
+  }
+  
+}
+
+if ( $readonly == 'Y' )
+  $can_edit = false;
+
+if ( ! $can_edit ) {
+  $error = translate ( "You are not authorized" );
+}
+
+// Is this a repeating event?
+$event_repeats = false;
+$res = dbi_query ( "SELECT COUNT(cal_id) FROM webcal_entry_repeats " .
+  "WHERE cal_id = $id" );
+if ( $res ) {
+  $row = dbi_fetch_row ( $res );
+  if ( $row[0] > 0 )
+    $event_repeats = true;
+  dbi_free_result ( $res );
+}
+$override_repeat = false;
+if ( ! empty ( $date ) && $event_repeats && ! empty ( $override ) ) {
+  $override_repeat = true;
+}
+
+if ( $id > 0 && empty ( $error ) ) {
+  if ( ! empty ( $date ) ) {
+    $thisdate = $date;
+  } else {
+    $res = dbi_query ( "SELECT cal_date FROM webcal_entry WHERE cal_id = $id" );
+    if ( $res ) {
+      // date format is 19991231
+      $row = dbi_fetch_row ( $res );
+      $thisdate = $row[0];
+    }
+  }
+
+  // Only allow delete of webcal_entry & webcal_entry_repeats
+  // if owner or admin, not participant.
+   
+  if ( $is_admin || $my_event ) {
+	// Email participants that the event was deleted
+    // First, get list of participants (with status Approved or
+    // Waiting on approval).
+    $sql = "SELECT cal_login FROM webcal_entry_user WHERE cal_id = $id " .
+      "AND cal_status IN ('A','W')";
+    $res = dbi_query ( $sql );
+    $partlogin = array ();
+    if ( $res ) {
+      while ( $row = dbi_fetch_row ( $res ) ) {
+        if ( $row[0] != $login )
+   $partlogin[] = $row[0];
+      }
+      dbi_free_result($res);
+    }
+	$partlogin[] = $login ;
+    // Get event name
+    $sql = "SELECT cal_name, cal_date, cal_time " .
+      "FROM webcal_entry WHERE cal_id = $id";
+    $res = dbi_query($sql);
+    if ( $res ) {
+      $row = dbi_fetch_row ( $res );
+      $name = $row[0];
+      $eventdate = $row[1];
+      $eventtime = $row[2];
+      dbi_free_result ( $res );
+    }
+    $TIME_FORMAT=24;
+    for ( $i = 0; $i < count ( $partlogin ); $i++ ) {
+      // Log the deletion
+   //   activity_log ( $id, $login, $partlogin[$i], $LOG_DELETE, "" );
+
+      $do_send = get_pref_setting ( $partlogin[$i], "EMAIL_EVENT_DELETED" );
+      $user_TZ = get_pref_setting ( $partlogin[$i], "TZ_OFFSET" );
+      $user_language = get_pref_setting ( $partlogin[$i], "LANGUAGE" );
+      user_load_variables ( $partlogin[$i], "temp" );
+      // Want date/time in user's timezone
+      if ( $eventtime != '-1' ) { 
+        $eventtime += ( $user_TZ * 10000 );
+        if ( $eventtime < 0 ) {
+          $eventtime += 240000;
+        } else if ( $eventtime >= 240000 ) {
+          $eventtime -= 240000;
+        }
+      }  
+               
+      if ( /*$partlogin[$i] != $login &&*/ $do_send == "Y" && boss_must_be_notified ( $login, $partlogin[$i] ) && 
+        strlen ( $tempemail ) && $send_email != "N" ) {
+         if (($GLOBALS['LANGUAGE'] != $user_language) && ! empty ( $user_language ) && ( $user_language != 'none' )){
+          reset_language ( $user_language );
+        }
+        $msg = translate("Hello") . ", " . $tempfullname . ".\n\n" .
+          translate("An appointment has been canceled for you by") .
+          " " . $login_fullname .  ".\n" .
+          translate("The subject was") . " \"" . $name . "\"\n" .
+          translate("Date") . ": " . date_to_str ($thisdate) . "\n";
+          if ( $eventtime != '-1' ) $msg .= translate("Time") . ": " . display_time ($eventtime, true);
+          $msg .= "\n\n";
+        if ( strlen ( $login_email ) )
+          $extra_hdrs = "From: $login_email\r\nX-Mailer: " .
+            translate($application_name);
+        else
+          $extra_hdrs = "From: $email_fallback_from\r\nX-Mailer: " .
+            translate($application_name);
+        mail ( $tempemail,
+          translate($application_name) . " " .
+   translate("Notification") . ": " . $name,
+         utf8_deconde(html_to_8bits ($msg)), $extra_hdrs );
+      }
+    }
+
+    // Instead of deleting from the database... mark it as deleted
+    // by setting the status for each participant to "D" (instead
+    // of "A"/Accepted, "W"/Waiting-on-approval or "R"/Rejected)
+    if ( $override_repeat ) {
+      dbi_query ( "INSERT INTO webcal_entry_repeats_not ( cal_id, cal_date ) " .
+        "VALUES ( $id, $date )" );
+      // Should we log this to the activity log???
+    } else {
+      // If it's a repeating event, delete any event exceptions
+      // that were entered.
+      if ( $event_repeats ) {
+ $res = dbi_query ( "SELECT cal_id FROM webcal_entry " .
+   "WHERE cal_group_id = $id" );
+        if ( $res ) {
+   $ex_events = array ();
+          while ( $row = dbi_fetch_row ( $res ) ) {
+     $ex_events[] = $row[0];
+   }
+          dbi_free_result ( $res );
+          for ( $i = 0; $i < count ( $ex_events ); $i++ ) {
+     $res = dbi_query ( "SELECT cal_login FROM " .
+              "webcal_entry_user WHERE cal_id = $ex_events[$i]" );
+            if ( $res ) {
+              $delusers = array ();
+              while ( $row = dbi_fetch_row ( $res ) ) {
+                $delusers[] = $row[0];
+              }
+              dbi_free_result ( $res );
+              for ( $j = 0; $j < count ( $delusers ); $j++ ) {
+                // Log the deletion
+         activity_log ( $ex_events[$i], $login, $delusers[$j],
+                  $LOG_DELETE, "" );
+                dbi_query ( "UPDATE webcal_entry_user SET cal_status = 'D' " .
+           "WHERE cal_id = $ex_events[$i] " .
+                  "AND cal_login = '$delusers[$j]'" );
+              }
+            }
+          }
+ }
+      }
+
+      // Now, mark event as deleted for all users.
+      dbi_query ( "UPDATE webcal_entry_user SET cal_status = 'D' " .
+        "WHERE cal_id = $id" );
+    }
+  } else {
+    // Not the owner of the event and are not the admin.
+    // Just delete the event from this user's calendar.
+    // We could just set the status to 'D' instead of deleting.
+    // (but we would need to make some changes to edit_entry_handler.php
+    // to accomodate this).
+    dbi_query ( "DELETE FROM webcal_entry_user " .
+      "WHERE cal_id = $id AND cal_login = '$login'" );
+    activity_log ( $id, $login, $login, $LOG_REJECT, "" );
+  }
+}
+
+$ret = getValue ( "ret" );
+if ( ! empty ( $ret ) && $ret == "list" ) {
+  $url = "list_unapproved.php";
+  if ( ! empty ( $user ) )
+    $url .= "?user=$user";
+} else {
+  $url = get_preferred_view ( "", empty ( $user ) ? "" : "user=$user" );
+}
+
+if ( empty ( $error ) ) {
+  do_redirect ( $url );
+  exit;
+}
+print_header();
+?>
+
+<h2><?php etranslate("Error")?></h2>
+<blockquote>
+<?php echo $error; ?>
+</blockquote>
+
+<?php print_trailer(); ?>
+
+</body>
+</html>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/del_layer.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/del_layer.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/del_layer.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,33 @@
+<?php
+include_once 'includes/init.php';
+
+if ( $allow_view_other != 'Y' ) {
+  print_header ();
+  etranslate("You are not authorized");
+  print_trailer ();
+  exit;
+}
+
+$updating_public = false;
+if ( $is_admin && ! empty ( $public ) && $public_access == "Y" ) {
+  $updating_public = true;
+  $layer_user = "__public__";
+} else {
+  $layer_user = $login;
+}
+
+load_user_layers ( $layer_user, 1 );
+
+if ( strlen ( $layers[$id]['cal_layeruser'] ) > 0 &&
+  ( $is_admin || $readonly == "N" ) ) {
+  $layeruser = $layers[$id]['cal_layeruser'];
+
+  dbi_query ( "DELETE FROM webcal_user_layers " .
+    "WHERE cal_login = '$layer_user' AND cal_layeruser = '$layeruser'" );
+}
+
+if ( $updating_public )
+  do_redirect ( "layers.php?public=1" );
+else
+  do_redirect ( "layers.php" );
+?>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/docs/README
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/docs/README	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/docs/README	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,53 @@
+WebCalendar Documentation
+-------------------------------------------------------------
+
+WebCalendar-Database.html
+  Describes the database tables in WebCalendar
+  Can be regenerated (if you have perl and make installed) by typing "make".
+
+WebCalendar-UserManual.html
+  Instructions for end users
+
+WebCalendar-SysAdmin.html
+  Instructions for system administrators on installing and configuring
+  WebCalendar
+
+WebCalendar-DeveloperGuide.html
+  Guidelines for developers wanting to make changes to WebCalendar
+
+WebCalendar-Functions.html
+  Documentation on the internal WebCalendar functions used throughout
+  the application
+  Can be regenerated (if you have perl and make installed) by typing "make".
+
+faqs.html
+  This is generated from the FAQs of in WebCalendar-SysAdmin.html and
+  WebCalendar-UserManual.html.  If you have perl and make,
+  typing "make" should generate this file.  This file is not a complete
+  HTML file.  It is intended to be inserted into the body of another
+  HTML page.  You can see it in use at:
+    http://www.k5n.us/webcalendar.php?topic=FAQ
+
+
+Tools
+-------------------------------------------------------------
+
+sql2html.pl
+  Perl tool to generate documentation on the database structure
+  (WebCalendar-Database.html) using comments found in tables-mysql.sql.
+
+php2html.pl
+  Perl tool to generate documentation (somewhat like javadoc) on
+  internal WebCalendar functions (WebCalendar-Functions.html) using
+  the comments found in the PHP code.
+
+extractfaqs.pl
+  Perl tool to pull the FAQs out of the documentation to create one
+  set of FAQs that can be included in another HTML page.  (This is used
+  to create a single FAQ page on the WebCalendar home page.)
+
+Makefile
+  Used by the 'make' command to create files that are generated from
+  other files.
+
+

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/docs/WebCalendar-Database.html
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/docs/WebCalendar-Database.html	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/docs/WebCalendar-Database.html	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,229 @@
+<html>
+
+<head>
+
+	<title>WebCalendar Database Documentation</title>
+
+</head>
+
+<body style="background-color:#FFFFFF;">
+
+<h2>WebCalendar Database Documentation</h2>
+
+<table style="border-width:0px;">
+
+	<tr><td>
+		Home Page:</td><td>
+		<a href="http://webcalendar.sourceforge.net/">http://webcalendar.sourceforge.net/</a>
+	</td></tr>
+	<tr><td>
+		Author:</td><td>
+		<a href="http://www.cknudsen.com">Craig Knudsen</a>, <a href="mailto:cknudsen at cknudsen.com">cknudsen at cknudsen.com</a>
+	</td></tr>
+	<tr><td style="vertical-align:top;">
+		Version:</td><td>
+		v1.0.0<br />
+		$Id: WebCalendar-Database.html,v 1.15 2005/05/17 13:06:04 cknudsen Exp $
+	</td></tr>
+	<tr><td style="vertical-align:top;">
+		Last updated:</td><td>$Date: 2005/05/17 13:06:04 $<br/>(by $Author: cknudsen $)</td><td>
+	</td></tr>
+</table>
+
+<blockquote>
+	This file is generated from <tt>tables-mysql.sql</tt>. Below are the definitions of all WebCalendar tables along with some descriptions of how each table is used. Column names shown in red are the primary keys for that table.
+	<br /><br />
+	If you update the SQL for WebCalendar, use the sql2html.pl script to regenerate this file.
+</blockquote>
+<br /><br />
+
+<h2>List of Tables</h2>
+<ul>
+<li><a href="#webcal_asst">webcal_asst</a></li>
+<li><a href="#webcal_categories">webcal_categories</a></li>
+<li><a href="#webcal_config">webcal_config</a></li>
+<li><a href="#webcal_entry">webcal_entry</a></li>
+<li><a href="#webcal_entry_ext_user">webcal_entry_ext_user</a></li>
+<li><a href="#webcal_entry_log">webcal_entry_log</a></li>
+<li><a href="#webcal_entry_repeats">webcal_entry_repeats</a></li>
+<li><a href="#webcal_entry_repeats_not">webcal_entry_repeats_not</a></li>
+<li><a href="#webcal_entry_user">webcal_entry_user</a></li>
+<li><a href="#webcal_group">webcal_group</a></li>
+<li><a href="#webcal_group_user">webcal_group_user</a></li>
+<li><a href="#webcal_import">webcal_import</a></li>
+<li><a href="#webcal_import_data">webcal_import_data</a></li>
+<li><a href="#webcal_nonuser_cals">webcal_nonuser_cals</a></li>
+<li><a href="#webcal_reminder_log">webcal_reminder_log</a></li>
+<li><a href="#webcal_report">webcal_report</a></li>
+<li><a href="#webcal_report_template">webcal_report_template</a></li>
+<li><a href="#webcal_site_extras">webcal_site_extras</a></li>
+<li><a href="#webcal_user">webcal_user</a></li>
+<li><a href="#webcal_user_layers">webcal_user_layers</a></li>
+<li><a href="#webcal_user_pref">webcal_user_pref</a></li>
+<li><a href="#webcal_view">webcal_view</a></li>
+<li><a href="#webcal_view_user">webcal_view_user</a></li>
+</ul>
+<hr />
+<br /><br />
+<h3><a name="webcal_asst">webcal_asst</a></h3>
+<blockquote>
+ Define assitant/boss relationship. <br /><br />
+<table style="border-width:0px;"><tr><th style="vertical-align:top; background-color:#C0C0C0;">Column Name</th><th style="vertical-align:top; background-color:#C0C0C0;">Type</th><th style="vertical-align:top; background-color:#C0C0C0;">Length</th><th style="vertical-align:top; background-color:#C0C0C0;">Null</th><th style="vertical-align:top; background-color:#C0C0C0;">Default</th><th style="vertical-align:top; background-color:#C0C0C0;">Description</th></tr>
+<tr><td style="vertical-align:top; background-color:#E0E0E0;"><span style="font-weight:bold; color:#A00000;">cal_boss</span></td><td style="vertical-align:top; background-color:#E0E0E0;">VARCHAR</td><td style="vertical-align:top; background-color:#E0E0E0;">25</td><td style="vertical-align:top; background-color:#E0E0E0;">N</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;"> user login of boss </td><tr><td style="vertical-align:top; background-color:#E0E0E0;"><span style="font-weight:bold; color:#A00000;">cal_assistant</span></td><td style="vertical-align:top; background-color:#E0E0E0;">VARCHAR</td><td style="vertical-align:top; background-color:#E0E0E0;">25</td><td style="vertical-align:top; background-color:#E0E0E0;">N</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;"> user login of assistant </td></table>
+</blockquote>
+<br /><br />
+<h3><a name="webcal_categories">webcal_categories</a></h3>
+<blockquote>
+ Defines user categories. Categories can be specific to a user or global.  When a category is global, the cat_owner field will be NULL.  (Only an admin user can create a global category.) <br /><br />
+<table style="border-width:0px;"><tr><th style="vertical-align:top; background-color:#C0C0C0;">Column Name</th><th style="vertical-align:top; background-color:#C0C0C0;">Type</th><th style="vertical-align:top; background-color:#C0C0C0;">Length</th><th style="vertical-align:top; background-color:#C0C0C0;">Null</th><th style="vertical-align:top; background-color:#C0C0C0;">Default</th><th style="vertical-align:top; background-color:#C0C0C0;">Description</th></tr>
+<tr><td style="vertical-align:top; background-color:#E0E0E0;"><span style="font-weight:bold; color:#A00000;">cat_id</span></td><td style="vertical-align:top; background-color:#E0E0E0;">INT</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;">N</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;"> unique category id </td><tr><td style="vertical-align:top; background-color:#E0E0E0;">cat_owner</td><td style="vertical-align:top; background-color:#E0E0E0;">VARCHAR</td><td style="vertical-align:top; background-color:#E0E0E0;">25</td><td style="vertical-align:top; background-color:#E0E0E0;">Y</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;"> user login of category owner. If this is NULL, then it is a global category </td><tr><td style="vertical-align:top; background-color:#E0E0E0;">cat_name</td><td style="vertical-align:top; background-color:#E0E0E0;">VARCHAR</td><td style="vertical-align:top; background-color:#E0E0E0;">80</td><td style="vertical-align:top; background-color:#E0E0E0;">N</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;"> category name </td></table>
+</blockquote>
+<br /><br />
+<h3><a name="webcal_config">webcal_config</a></h3>
+<blockquote>
+ System settings (set by the admin interface in admin.php) <br /><br />
+<table style="border-width:0px;"><tr><th style="vertical-align:top; background-color:#C0C0C0;">Column Name</th><th style="vertical-align:top; background-color:#C0C0C0;">Type</th><th style="vertical-align:top; background-color:#C0C0C0;">Length</th><th style="vertical-align:top; background-color:#C0C0C0;">Null</th><th style="vertical-align:top; background-color:#C0C0C0;">Default</th><th style="vertical-align:top; background-color:#C0C0C0;">Description</th></tr>
+<tr><td style="vertical-align:top; background-color:#E0E0E0;"><span style="font-weight:bold; color:#A00000;">cal_setting</span></td><td style="vertical-align:top; background-color:#E0E0E0;">VARCHAR</td><td style="vertical-align:top; background-color:#E0E0E0;">50</td><td style="vertical-align:top; background-color:#E0E0E0;">N</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;"> setting name </td><tr><td style="vertical-align:top; background-color:#E0E0E0;">cal_value</td><td style="vertical-align:top; background-color:#E0E0E0;">VARCHAR</td><td style="vertical-align:top; background-color:#E0E0E0;">100</td><td style="vertical-align:top; background-color:#E0E0E0;">Y</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;"> setting value </td></table>
+</blockquote>
+<br /><br />
+<h3><a name="webcal_entry">webcal_entry</a></h3>
+<blockquote>
+ Defines a calendar event.  Each event in the system has one entry in this table unless the event starts before midnight and ends after midnight. In that case a secondary event will be created with cal_ext_for_id set to the cal_id of the original entry. The following tables contain additional information about each event:<ul> <li><a href="#webcal_entry_user">webcal_entry_user</a> -  lists participants in the event and specifies the status (accepted,  rejected) and category of each participant.</li> <li><a href="#webcal_entry_repeats">webcal_entry_repeats</a> -  contains information if the event repeats.</li> <li><a href="#webcal_entry_repeats_not">webcal_entry_repeats_not</a> -  specifies which dates the repeating event does not repeat (because  they were deleted or modified for just that date by the user)</li> <li><a href="#webcal_entry_log">webcal_entry_log</a> -  provides a history of changes to this event.</li> <li><a href="#webcal_site_extras">webcal_site_extras</a> -  stores event data as defined in site_extras.php (such as reminders and  other custom event fields).</li> </ul> <br /><br />
+<table style="border-width:0px;"><tr><th style="vertical-align:top; background-color:#C0C0C0;">Column Name</th><th style="vertical-align:top; background-color:#C0C0C0;">Type</th><th style="vertical-align:top; background-color:#C0C0C0;">Length</th><th style="vertical-align:top; background-color:#C0C0C0;">Null</th><th style="vertical-align:top; background-color:#C0C0C0;">Default</th><th style="vertical-align:top; background-color:#C0C0C0;">Description</th></tr>
+<tr><td style="vertical-align:top; background-color:#E0E0E0;"><span style="font-weight:bold; color:#A00000;">cal_id</span></td><td style="vertical-align:top; background-color:#E0E0E0;">INT</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;">N</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;"> cal_id is unique integer id for event </td><tr><td style="vertical-align:top; background-color:#E0E0E0;">cal_group_id</td><td style="vertical-align:top; background-color:#E0E0E0;">INT</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;">Y</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;"> cal_group_id: the parent event id if this event is overriding an occurrence of a repeating event </td><tr><td style="vertical-align:top; background-color:#E0E0E0;">cal_ext_for_id</td><td style="vertical-align:top; background-color:#E0E0E0;">INT</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;">Y</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;"> used when an event goes past midnight into the next day, in which case an additional entry in this table will use this field to indicate the original event cal_id </td><tr><td style="vertical-align:top; background-color:#E0E0E0;">cal_create_by</td><td style="vertical-align:top; background-color:#E0E0E0;">VARCHAR</td><td style="vertical-align:top; background-color:#E0E0E0;">25</td><td style="vertical-align:top; background-color:#E0E0E0;">N</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;"> user login of user that created the event </td><tr><td style="vertical-align:top; background-color:#E0E0E0;">cal_date</td><td style="vertical-align:top; background-color:#E0E0E0;">INT</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;">N</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;"> date of event (in YYYYMMDD format) </td><tr><td style="vertical-align:top; background-color:#E0E0E0;">cal_time</td><td style="vertical-align:top; background-color:#E0E0E0;">INT</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;">Y</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;"> event time (in HHMMSS format) </td><tr><td style="vertical-align:top; background-color:#E0E0E0;">cal_mod_date</td><td style="vertical-align:top; background-color:#E0E0E0;">INT</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;">Y</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;"> date the event was last modified (in YYYYMMDD format) </td><tr><td style="vertical-align:top; background-color:#E0E0E0;">cal_mod_time</td><td style="vertical-align:top; background-color:#E0E0E0;">INT</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;">Y</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;"> time the event was last modified (in HHMMSS format) </td><tr><td style="vertical-align:top; background-color:#E0E0E0;">cal_duration</td><td style="vertical-align:top; background-color:#E0E0E0;">INT</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;">N</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;"> duration of event in minutes </td><tr><td style="vertical-align:top; background-color:#E0E0E0;">cal_priority</td><td style="vertical-align:top; background-color:#E0E0E0;">INT</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;">Y</td><td style="vertical-align:top; background-color:#E0E0E0;">2</td><td style="vertical-align:top; background-color:#E0E0E0;"> event priority: 1=Low, 2=Med, 3=High </td><tr><td style="vertical-align:top; background-color:#E0E0E0;">cal_type</td><td style="vertical-align:top; background-color:#E0E0E0;">CHAR</td><td style="vertical-align:top; background-color:#E0E0E0;">1</td><td style="vertical-align:top; background-color:#E0E0E0;">Y</td><td style="vertical-align:top; background-color:#E0E0E0;">'E'</td><td style="vertical-align:top; background-color:#E0E0E0;"> 'E' = Event, 'M' = Repeating event </td><tr><td style="vertical-align:top; background-color:#E0E0E0;">cal_access</td><td style="vertical-align:top; background-color:#E0E0E0;">CHAR</td><td style="vertical-align:top; background-color:#E0E0E0;">1</td><td style="vertical-align:top; background-color:#E0E0E0;">Y</td><td style="vertical-align:top; background-color:#E0E0E0;">'P'</td><td style="vertical-align:top; background-color:#E0E0E0;"> 'P' = Public, 'R' = Confidential (others can see time allocated but not what it is) </td><tr><td style="vertical-align:top; background-color:#E0E0E0;">cal_name</td><td style="vertical-align:top; background-color:#E0E0E0;">VARCHAR</td><td style="vertical-align:top; background-color:#E0E0E0;">80</td><td style="vertical-align:top; background-color:#E0E0E0;">N</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;"> brief description of event </td><tr><td style="vertical-align:top; background-color:#E0E0E0;">cal_description</td><td style="vertical-align:top; background-color:#E0E0E0;">TEXT</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;">Y</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;"> full description of event </td></table>
+</blockquote>
+<br /><br />
+<h3><a name="webcal_entry_ext_user">webcal_entry_ext_user</a></h3>
+<blockquote>
+ This table associates one or more external users (people who do not have a WebCalendar login) with an event by the event id. An event must still have at least one WebCalendar user associated with it.  This table is not used unless external users are enabled in system settings. The event can be found in <a href="#webcal_entry">webcal_entry</a>. <br /><br />
+<table style="border-width:0px;"><tr><th style="vertical-align:top; background-color:#C0C0C0;">Column Name</th><th style="vertical-align:top; background-color:#C0C0C0;">Type</th><th style="vertical-align:top; background-color:#C0C0C0;">Length</th><th style="vertical-align:top; background-color:#C0C0C0;">Null</th><th style="vertical-align:top; background-color:#C0C0C0;">Default</th><th style="vertical-align:top; background-color:#C0C0C0;">Description</th></tr>
+<tr><td style="vertical-align:top; background-color:#E0E0E0;"><span style="font-weight:bold; color:#A00000;">cal_id</span></td><td style="vertical-align:top; background-color:#E0E0E0;">INT</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;">N</td><td style="vertical-align:top; background-color:#E0E0E0;">0</td><td style="vertical-align:top; background-color:#E0E0E0;"> event id </td><tr><td style="vertical-align:top; background-color:#E0E0E0;"><span style="font-weight:bold; color:#A00000;">cal_fullname</span></td><td style="vertical-align:top; background-color:#E0E0E0;">VARCHAR</td><td style="vertical-align:top; background-color:#E0E0E0;">50</td><td style="vertical-align:top; background-color:#E0E0E0;">N</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;"> external user fill name </td><tr><td style="vertical-align:top; background-color:#E0E0E0;">cal_email</td><td style="vertical-align:top; background-color:#E0E0E0;">VARCHAR</td><td style="vertical-align:top; background-color:#E0E0E0;">75</td><td style="vertical-align:top; background-color:#E0E0E0;">Y</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;"> external user email (for sending a reminder) </td></table>
+</blockquote>
+<br /><br />
+<h3><a name="webcal_entry_log">webcal_entry_log</a></h3>
+<blockquote>
+ Activity log for an event. <br /><br />
+<table style="border-width:0px;"><tr><th style="vertical-align:top; background-color:#C0C0C0;">Column Name</th><th style="vertical-align:top; background-color:#C0C0C0;">Type</th><th style="vertical-align:top; background-color:#C0C0C0;">Length</th><th style="vertical-align:top; background-color:#C0C0C0;">Null</th><th style="vertical-align:top; background-color:#C0C0C0;">Default</th><th style="vertical-align:top; background-color:#C0C0C0;">Description</th></tr>
+<tr><td style="vertical-align:top; background-color:#E0E0E0;"><span style="font-weight:bold; color:#A00000;">cal_log_id</span></td><td style="vertical-align:top; background-color:#E0E0E0;">INT</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;">N</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;"> unique id of this log entry </td><tr><td style="vertical-align:top; background-color:#E0E0E0;">cal_entry_id</td><td style="vertical-align:top; background-color:#E0E0E0;">INT</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;">N</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;"> event id </td><tr><td style="vertical-align:top; background-color:#E0E0E0;">cal_login</td><td style="vertical-align:top; background-color:#E0E0E0;">VARCHAR</td><td style="vertical-align:top; background-color:#E0E0E0;">25</td><td style="vertical-align:top; background-color:#E0E0E0;">N</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;"> user who performed this action </td><tr><td style="vertical-align:top; background-color:#E0E0E0;">cal_user_cal</td><td style="vertical-align:top; background-color:#E0E0E0;">VARCHAR</td><td style="vertical-align:top; background-color:#E0E0E0;">25</td><td style="vertical-align:top; background-color:#E0E0E0;">Y</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;"> user of calendar affected </td><tr><td style="vertical-align:top; background-color:#E0E0E0;">cal_type</td><td style="vertical-align:top; background-color:#E0E0E0;">CHAR</td><td style="vertical-align:top; background-color:#E0E0E0;">1</td><td style="vertical-align:top; background-color:#E0E0E0;">N</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;"> log types: <ul> <li>C: Created</li> <li>A: Approved/Confirmed by user</li> <li>R: Rejected by user</li> <li>U: Updated by user</li> <li>M: Mail Notification sent</li> <li>E: Reminder sent</li> </ul></td><tr><td style="vertical-align:top; background-color:#E0E0E0;">cal_date</td><td style="vertical-align:top; background-color:#E0E0E0;">INT</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;">N</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;"> date in YYYYMMDD format </td><tr><td style="vertical-align:top; background-color:#E0E0E0;">cal_time</td><td style="vertical-align:top; background-color:#E0E0E0;">INT</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;">Y</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;"> time in HHMMSS format </td><tr><td style="vertical-align:top; background-color:#E0E0E0;">cal_text</td><td style="vertical-align:top; background-color:#E0E0E0;">TEXT</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;">Y</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;"> optional text </td></table>
+</blockquote>
+<br /><br />
+<h3><a name="webcal_entry_repeats">webcal_entry_repeats</a></h3>
+<blockquote>
+ Defines repeating info about an event. The event is defined in <a href="#webcal_entry">webcal_entry</a>. <br /><br />
+<table style="border-width:0px;"><tr><th style="vertical-align:top; background-color:#C0C0C0;">Column Name</th><th style="vertical-align:top; background-color:#C0C0C0;">Type</th><th style="vertical-align:top; background-color:#C0C0C0;">Length</th><th style="vertical-align:top; background-color:#C0C0C0;">Null</th><th style="vertical-align:top; background-color:#C0C0C0;">Default</th><th style="vertical-align:top; background-color:#C0C0C0;">Description</th></tr>
+<tr><td style="vertical-align:top; background-color:#E0E0E0;"><span style="font-weight:bold; color:#A00000;">cal_id</span></td><td style="vertical-align:top; background-color:#E0E0E0;">INT</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;">N</td><td style="vertical-align:top; background-color:#E0E0E0;">0</td><td style="vertical-align:top; background-color:#E0E0E0;"> event id </td><tr><td style="vertical-align:top; background-color:#E0E0E0;">cal_type</td><td style="vertical-align:top; background-color:#E0E0E0;">VARCHAR</td><td style="vertical-align:top; background-color:#E0E0E0;">20</td><td style="vertical-align:top; background-color:#E0E0E0;">Y</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;"> type of repeating:<ul> <li>daily - repeats daily</li> <li>monthlyByDate - repeats on same day of the month</li> <li>monthlyByDayR - repeats on same weekday of the month (counting weeks from the end of the month is in last Monday)</li> <li>monthlyByDay - repeats on specified weekday (2nd Monday, for example)</li> <li>weekly - repeats every week</li> <li>yearly - repeats on same date every year</li> </td><tr><td style="vertical-align:top; background-color:#E0E0E0;">cal_end</td><td style="vertical-align:top; background-color:#E0E0E0;">INT</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;">Y</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;"> end date for repeating event (in YYYYMMDD format) </td><tr><td style="vertical-align:top; background-color:#E0E0E0;">cal_frequency</td><td style="vertical-align:top; background-color:#E0E0E0;">INT</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;">Y</td><td style="vertical-align:top; background-color:#E0E0E0;">1</td><td style="vertical-align:top; background-color:#E0E0E0;"> frequency of repeat: 1 = every, 2 = every other, 3 = every 3rd, etc. </td><tr><td style="vertical-align:top; background-color:#E0E0E0;">cal_days</td><td style="vertical-align:top; background-color:#E0E0E0;">CHAR</td><td style="vertical-align:top; background-color:#E0E0E0;">7</td><td style="vertical-align:top; background-color:#E0E0E0;">Y</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;"> which days of the week does it repeat on (only applies when cal_type = 'weekly' </td></table>
+</blockquote>
+<br /><br />
+<h3><a name="webcal_entry_repeats_not">webcal_entry_repeats_not</a></h3>
+<blockquote>
+ This table specifies which dates in a repeating event have either been deleted or replaced with a replacement event for that day.  When replaced, the cal_group_id (I know... not the best name, but it was not being used) column will be set to the original event.  That way the user can delete the original event and (at the same time) delete any exception events. <br /><br />
+<table style="border-width:0px;"><tr><th style="vertical-align:top; background-color:#C0C0C0;">Column Name</th><th style="vertical-align:top; background-color:#C0C0C0;">Type</th><th style="vertical-align:top; background-color:#C0C0C0;">Length</th><th style="vertical-align:top; background-color:#C0C0C0;">Null</th><th style="vertical-align:top; background-color:#C0C0C0;">Default</th><th style="vertical-align:top; background-color:#C0C0C0;">Description</th></tr>
+<tr><td style="vertical-align:top; background-color:#E0E0E0;"><span style="font-weight:bold; color:#A00000;">cal_id</span></td><td style="vertical-align:top; background-color:#E0E0E0;">INT</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;">N</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;"> event id of repeating event </td><tr><td style="vertical-align:top; background-color:#E0E0E0;"><span style="font-weight:bold; color:#A00000;">cal_date</span></td><td style="vertical-align:top; background-color:#E0E0E0;">INT</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;">N</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;"> cal_date: date event should not repeat (in YYYYMMDD format) </td></table>
+</blockquote>
+<br /><br />
+<h3><a name="webcal_entry_user">webcal_entry_user</a></h3>
+<blockquote>
+ This table associates one or more users with an event by the event id. The event can be found in <a href="#webcal_entry">webcal_entry</a>. <br /><br />
+<table style="border-width:0px;"><tr><th style="vertical-align:top; background-color:#C0C0C0;">Column Name</th><th style="vertical-align:top; background-color:#C0C0C0;">Type</th><th style="vertical-align:top; background-color:#C0C0C0;">Length</th><th style="vertical-align:top; background-color:#C0C0C0;">Null</th><th style="vertical-align:top; background-color:#C0C0C0;">Default</th><th style="vertical-align:top; background-color:#C0C0C0;">Description</th></tr>
+<tr><td style="vertical-align:top; background-color:#E0E0E0;"><span style="font-weight:bold; color:#A00000;">cal_id</span></td><td style="vertical-align:top; background-color:#E0E0E0;">INT</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;">N</td><td style="vertical-align:top; background-color:#E0E0E0;">0</td><td style="vertical-align:top; background-color:#E0E0E0;"> event id </td><tr><td style="vertical-align:top; background-color:#E0E0E0;"><span style="font-weight:bold; color:#A00000;">cal_login</span></td><td style="vertical-align:top; background-color:#E0E0E0;">VARCHAR</td><td style="vertical-align:top; background-color:#E0E0E0;">25</td><td style="vertical-align:top; background-color:#E0E0E0;">N</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;"> participant in the event </td><tr><td style="vertical-align:top; background-color:#E0E0E0;">cal_status</td><td style="vertical-align:top; background-color:#E0E0E0;">CHAR</td><td style="vertical-align:top; background-color:#E0E0E0;">1</td><td style="vertical-align:top; background-color:#E0E0E0;">Y</td><td style="vertical-align:top; background-color:#E0E0E0;">'A'</td><td style="vertical-align:top; background-color:#E0E0E0;"> status of event for this user: <ul> <li>A=Accepted</li> <li>R=Rejected</li> <li>W=Waiting</li> </ul></td><tr><td style="vertical-align:top; background-color:#E0E0E0;">cal_category</td><td style="vertical-align:top; background-color:#E0E0E0;">INT</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;">Y</td><td style="vertical-align:top; background-color:#E0E0E0;">NULL</td><td style="vertical-align:top; background-color:#E0E0E0;"> category of the event for this user </td></table>
+</blockquote>
+<br /><br />
+<h3><a name="webcal_group">webcal_group</a></h3>
+<blockquote>
+ Define a group.  Group members can be found in <a href="#webcal_group_user">webcal_group_user</a>. <br /><br />
+<table style="border-width:0px;"><tr><th style="vertical-align:top; background-color:#C0C0C0;">Column Name</th><th style="vertical-align:top; background-color:#C0C0C0;">Type</th><th style="vertical-align:top; background-color:#C0C0C0;">Length</th><th style="vertical-align:top; background-color:#C0C0C0;">Null</th><th style="vertical-align:top; background-color:#C0C0C0;">Default</th><th style="vertical-align:top; background-color:#C0C0C0;">Description</th></tr>
+<tr><td style="vertical-align:top; background-color:#E0E0E0;"><span style="font-weight:bold; color:#A00000;">cal_group_id</span></td><td style="vertical-align:top; background-color:#E0E0E0;">INT</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;">N</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;"> unique group id </td><tr><td style="vertical-align:top; background-color:#E0E0E0;">cal_owner</td><td style="vertical-align:top; background-color:#E0E0E0;">VARCHAR</td><td style="vertical-align:top; background-color:#E0E0E0;">25</td><td style="vertical-align:top; background-color:#E0E0E0;">Y</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;"> user login of user that created this group </td><tr><td style="vertical-align:top; background-color:#E0E0E0;">cal_name</td><td style="vertical-align:top; background-color:#E0E0E0;">VARCHAR</td><td style="vertical-align:top; background-color:#E0E0E0;">50</td><td style="vertical-align:top; background-color:#E0E0E0;">N</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;"> name of the group </td><tr><td style="vertical-align:top; background-color:#E0E0E0;">cal_last_update</td><td style="vertical-align:top; background-color:#E0E0E0;">INT</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;">N</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;"> date last updated (in YYYYMMDD format) </td></table>
+</blockquote>
+<br /><br />
+<h3><a name="webcal_group_user">webcal_group_user</a></h3>
+<blockquote>
+ Specify users in a group.  The group is defined in <a href="#webcal_group">webcal_group</a>. <br /><br />
+<table style="border-width:0px;"><tr><th style="vertical-align:top; background-color:#C0C0C0;">Column Name</th><th style="vertical-align:top; background-color:#C0C0C0;">Type</th><th style="vertical-align:top; background-color:#C0C0C0;">Length</th><th style="vertical-align:top; background-color:#C0C0C0;">Null</th><th style="vertical-align:top; background-color:#C0C0C0;">Default</th><th style="vertical-align:top; background-color:#C0C0C0;">Description</th></tr>
+<tr><td style="vertical-align:top; background-color:#E0E0E0;"><span style="font-weight:bold; color:#A00000;">cal_group_id</span></td><td style="vertical-align:top; background-color:#E0E0E0;">INT</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;">N</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;"> group id </td><tr><td style="vertical-align:top; background-color:#E0E0E0;"><span style="font-weight:bold; color:#A00000;">cal_login</span></td><td style="vertical-align:top; background-color:#E0E0E0;">VARCHAR</td><td style="vertical-align:top; background-color:#E0E0E0;">25</td><td style="vertical-align:top; background-color:#E0E0E0;">N</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;"> user login </td></table>
+</blockquote>
+<br /><br />
+<h3><a name="webcal_import">webcal_import</a></h3>
+<blockquote>
+ Used to track import data (one row per import) <br /><br />
+<table style="border-width:0px;"><tr><th style="vertical-align:top; background-color:#C0C0C0;">Column Name</th><th style="vertical-align:top; background-color:#C0C0C0;">Type</th><th style="vertical-align:top; background-color:#C0C0C0;">Length</th><th style="vertical-align:top; background-color:#C0C0C0;">Null</th><th style="vertical-align:top; background-color:#C0C0C0;">Default</th><th style="vertical-align:top; background-color:#C0C0C0;">Description</th></tr>
+<tr><td style="vertical-align:top; background-color:#E0E0E0;"><span style="font-weight:bold; color:#A00000;">cal_import_id</span></td><td style="vertical-align:top; background-color:#E0E0E0;">INT</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;">N</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;"> unique id for import </td><tr><td style="vertical-align:top; background-color:#E0E0E0;">cal_name</td><td style="vertical-align:top; background-color:#E0E0E0;">VARCHAR</td><td style="vertical-align:top; background-color:#E0E0E0;">50</td><td style="vertical-align:top; background-color:#E0E0E0;">Y</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;"> name of import (optional) </td><tr><td style="vertical-align:top; background-color:#E0E0E0;">cal_date</td><td style="vertical-align:top; background-color:#E0E0E0;">INT</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;">N</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;"> date of import (YYYYMMDD format) </td><tr><td style="vertical-align:top; background-color:#E0E0E0;">cal_type</td><td style="vertical-align:top; background-color:#E0E0E0;">VARCHAR</td><td style="vertical-align:top; background-color:#E0E0E0;">10</td><td style="vertical-align:top; background-color:#E0E0E0;">N</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;"> type of import (ical, vcal, palm) </td><tr><td style="vertical-align:top; background-color:#E0E0E0;">cal_login</td><td style="vertical-align:top; background-color:#E0E0E0;">VARCHAR</td><td style="vertical-align:top; background-color:#E0E0E0;">25</td><td style="vertical-align:top; background-color:#E0E0E0;">Y</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;"> user who performed the import </td></table>
+</blockquote>
+<br /><br />
+<h3><a name="webcal_import_data">webcal_import_data</a></h3>
+<blockquote>
+ Used to track import data (one row per event) <br /><br />
+<table style="border-width:0px;"><tr><th style="vertical-align:top; background-color:#C0C0C0;">Column Name</th><th style="vertical-align:top; background-color:#C0C0C0;">Type</th><th style="vertical-align:top; background-color:#C0C0C0;">Length</th><th style="vertical-align:top; background-color:#C0C0C0;">Null</th><th style="vertical-align:top; background-color:#C0C0C0;">Default</th><th style="vertical-align:top; background-color:#C0C0C0;">Description</th></tr>
+<tr><td style="vertical-align:top; background-color:#E0E0E0;">cal_import_id</td><td style="vertical-align:top; background-color:#E0E0E0;">INT</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;">N</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;"> import id (from webcal_import table) </td><tr><td style="vertical-align:top; background-color:#E0E0E0;"><span style="font-weight:bold; color:#A00000;">cal_id</span></td><td style="vertical-align:top; background-color:#E0E0E0;">INT</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;">N</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;"> event id in WebCalendar </td><tr><td style="vertical-align:top; background-color:#E0E0E0;"><span style="font-weight:bold; color:#A00000;">cal_login</span></td><td style="vertical-align:top; background-color:#E0E0E0;">VARCHAR</td><td style="vertical-align:top; background-color:#E0E0E0;">25</td><td style="vertical-align:top; background-color:#E0E0E0;">N</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;"> user login </td><tr><td style="vertical-align:top; background-color:#E0E0E0;">cal_import_type</td><td style="vertical-align:top; background-color:#E0E0E0;">VARCHAR</td><td style="vertical-align:top; background-color:#E0E0E0;">15</td><td style="vertical-align:top; background-color:#E0E0E0;">N</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;"> type of import: 'palm', 'vcal', 'ical' or 'publish' </td><tr><td style="vertical-align:top; background-color:#E0E0E0;">cal_external_id</td><td style="vertical-align:top; background-color:#E0E0E0;">VARCHAR</td><td style="vertical-align:top; background-color:#E0E0E0;">200</td><td style="vertical-align:top; background-color:#E0E0E0;">Y</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;"> external id used in external calendar system (for example, UID in iCal) </td></table>
+</blockquote>
+<br /><br />
+<h3><a name="webcal_nonuser_cals">webcal_nonuser_cals</a></h3>
+<blockquote>
+ Defines non-user calendars. <br /><br />
+<table style="border-width:0px;"><tr><th style="vertical-align:top; background-color:#C0C0C0;">Column Name</th><th style="vertical-align:top; background-color:#C0C0C0;">Type</th><th style="vertical-align:top; background-color:#C0C0C0;">Length</th><th style="vertical-align:top; background-color:#C0C0C0;">Null</th><th style="vertical-align:top; background-color:#C0C0C0;">Default</th><th style="vertical-align:top; background-color:#C0C0C0;">Description</th></tr>
+<tr><td style="vertical-align:top; background-color:#E0E0E0;"><span style="font-weight:bold; color:#A00000;">cal_login</span></td><td style="vertical-align:top; background-color:#E0E0E0;">VARCHAR</td><td style="vertical-align:top; background-color:#E0E0E0;">25</td><td style="vertical-align:top; background-color:#E0E0E0;">N</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;"> the unique id for the calendar </td><tr><td style="vertical-align:top; background-color:#E0E0E0;">cal_lastname</td><td style="vertical-align:top; background-color:#E0E0E0;">VARCHAR</td><td style="vertical-align:top; background-color:#E0E0E0;">25</td><td style="vertical-align:top; background-color:#E0E0E0;">Y</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;"> calendar's last name </td><tr><td style="vertical-align:top; background-color:#E0E0E0;">cal_firstname</td><td style="vertical-align:top; background-color:#E0E0E0;">VARCHAR</td><td style="vertical-align:top; background-color:#E0E0E0;">25</td><td style="vertical-align:top; background-color:#E0E0E0;">Y</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;"> calendar's first name </td><tr><td style="vertical-align:top; background-color:#E0E0E0;">cal_admin</td><td style="vertical-align:top; background-color:#E0E0E0;">VARCHAR</td><td style="vertical-align:top; background-color:#E0E0E0;">25</td><td style="vertical-align:top; background-color:#E0E0E0;">N</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;"> who is the calendar administrator </td></table>
+</blockquote>
+<br /><br />
+<h3><a name="webcal_reminder_log">webcal_reminder_log</a></h3>
+<blockquote>
+ This table keeps a history of when reminders get sent. <br /><br />
+<table style="border-width:0px;"><tr><th style="vertical-align:top; background-color:#C0C0C0;">Column Name</th><th style="vertical-align:top; background-color:#C0C0C0;">Type</th><th style="vertical-align:top; background-color:#C0C0C0;">Length</th><th style="vertical-align:top; background-color:#C0C0C0;">Null</th><th style="vertical-align:top; background-color:#C0C0C0;">Default</th><th style="vertical-align:top; background-color:#C0C0C0;">Description</th></tr>
+<tr><td style="vertical-align:top; background-color:#E0E0E0;"><span style="font-weight:bold; color:#A00000;">cal_id</span></td><td style="vertical-align:top; background-color:#E0E0E0;">INT</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;">N</td><td style="vertical-align:top; background-color:#E0E0E0;">0</td><td style="vertical-align:top; background-color:#E0E0E0;"> event id </td><tr><td style="vertical-align:top; background-color:#E0E0E0;"><span style="font-weight:bold; color:#A00000;">cal_name</span></td><td style="vertical-align:top; background-color:#E0E0E0;">VARCHAR</td><td style="vertical-align:top; background-color:#E0E0E0;">25</td><td style="vertical-align:top; background-color:#E0E0E0;">N</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;"> extra type (see site_extras.php) </td><tr><td style="vertical-align:top; background-color:#E0E0E0;"><span style="font-weight:bold; color:#A00000;">cal_event_date</span></td><td style="vertical-align:top; background-color:#E0E0E0;">INT</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;">N</td><td style="vertical-align:top; background-color:#E0E0E0;">0</td><td style="vertical-align:top; background-color:#E0E0E0;"> the event date we are sending reminder for (in YYYYMMDD format) </td><tr><td style="vertical-align:top; background-color:#E0E0E0;">cal_last_sent</td><td style="vertical-align:top; background-color:#E0E0E0;">INT</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;">N</td><td style="vertical-align:top; background-color:#E0E0E0;">0</td><td style="vertical-align:top; background-color:#E0E0E0;"> the date/time we last sent a reminder (in UNIX time format) </td></table>
+</blockquote>
+<br /><br />
+<h3><a name="webcal_report">webcal_report</a></h3>
+<blockquote>
+ Defines a custom report created by a user. <br /><br />
+<table style="border-width:0px;"><tr><th style="vertical-align:top; background-color:#C0C0C0;">Column Name</th><th style="vertical-align:top; background-color:#C0C0C0;">Type</th><th style="vertical-align:top; background-color:#C0C0C0;">Length</th><th style="vertical-align:top; background-color:#C0C0C0;">Null</th><th style="vertical-align:top; background-color:#C0C0C0;">Default</th><th style="vertical-align:top; background-color:#C0C0C0;">Description</th></tr>
+<tr><td style="vertical-align:top; background-color:#E0E0E0;">cal_login</td><td style="vertical-align:top; background-color:#E0E0E0;">VARCHAR</td><td style="vertical-align:top; background-color:#E0E0E0;">25</td><td style="vertical-align:top; background-color:#E0E0E0;">N</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;"> creator of report </td><tr><td style="vertical-align:top; background-color:#E0E0E0;"><span style="font-weight:bold; color:#A00000;">cal_report_id</span></td><td style="vertical-align:top; background-color:#E0E0E0;">INT</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;">N</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;"> unique id of this report </td><tr><td style="vertical-align:top; background-color:#E0E0E0;">cal_is_global</td><td style="vertical-align:top; background-color:#E0E0E0;">CHAR</td><td style="vertical-align:top; background-color:#E0E0E0;">1</td><td style="vertical-align:top; background-color:#E0E0E0;">N</td><td style="vertical-align:top; background-color:#E0E0E0;">'N'</td><td style="vertical-align:top; background-color:#E0E0E0;"> is this a global report (can it be accessed by other users) ('Y' or 'N') </td><tr><td style="vertical-align:top; background-color:#E0E0E0;">cal_report_type</td><td style="vertical-align:top; background-color:#E0E0E0;">VARCHAR</td><td style="vertical-align:top; background-color:#E0E0E0;">20</td><td style="vertical-align:top; background-color:#E0E0E0;">N</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;"> format of report (html, plain or csv) </td><tr><td style="vertical-align:top; background-color:#E0E0E0;">cal_include_header</td><td style="vertical-align:top; background-color:#E0E0E0;">CHAR</td><td style="vertical-align:top; background-color:#E0E0E0;">1</td><td style="vertical-align:top; background-color:#E0E0E0;">N</td><td style="vertical-align:top; background-color:#E0E0E0;">'Y'</td><td style="vertical-align:top; background-color:#E0E0E0;"> if cal_report_type is 'html', should the default HTML header and trailer be included? ('Y' or 'N') </td><tr><td style="vertical-align:top; background-color:#E0E0E0;">cal_report_name</td><td style="vertical-align:top; background-color:#E0E0E0;">VARCHAR</td><td style="vertical-align:top; background-color:#E0E0E0;">50</td><td style="vertical-align:top; background-color:#E0E0E0;">N</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;"> name of the report </td><tr><td style="vertical-align:top; background-color:#E0E0E0;">cal_time_range</td><td style="vertical-align:top; background-color:#E0E0E0;">INT</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;">N</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;"> time range for report: <ul> <li>0 = tomorrow</li> <li>1 = today</li> <li>2 = yesterday</li> <li>3 = day before yesterday</li> <li>10 = next week</li> <li>11 = current week</li> <li>12 = last week</li> <li>13 = week before last</li> <li>20 = next week and week after</li> <li>21 = current week and next week</li> <li>22 = last week and this week</li> <li>23 = last two weeks</li> <li>30 = next month</li> <li>31 = current month</li> <li>32 = last month</li> <li>33 = month before last</li> <li>40 = next year</li> <li>41 = current year</li> <li>42 = last year</li> <li>43 = year before last</li> </ul> </td><tr><td style="vertical-align:top; background-color:#E0E0E0;">cal_user</td><td style="vertical-align:top; background-color:#E0E0E0;">VARCHAR</td><td style="vertical-align:top; background-color:#E0E0E0;">25</td><td style="vertical-align:top; background-color:#E0E0E0;">Y</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;"> user calendar to display (NULL indicates current user) </td><tr><td style="vertical-align:top; background-color:#E0E0E0;">cal_allow_nav</td><td style="vertical-align:top; background-color:#E0E0E0;">CHAR</td><td style="vertical-align:top; background-color:#E0E0E0;">1</td><td style="vertical-align:top; background-color:#E0E0E0;">Y</td><td style="vertical-align:top; background-color:#E0E0E0;">'Y'</td><td style="vertical-align:top; background-color:#E0E0E0;"> allow user to navigate to different dates with next/previous ('Y' or 'N') </td><tr><td style="vertical-align:top; background-color:#E0E0E0;">cal_cat_id</td><td style="vertical-align:top; background-color:#E0E0E0;">INT</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;">Y</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;"> category to filter on (optional) </td><tr><td style="vertical-align:top; background-color:#E0E0E0;">cal_include_empty</td><td style="vertical-align:top; background-color:#E0E0E0;">CHAR</td><td style="vertical-align:top; background-color:#E0E0E0;">1</td><td style="vertical-align:top; background-color:#E0E0E0;">Y</td><td style="vertical-align:top; background-color:#E0E0E0;">'N'</td><td style="vertical-align:top; background-color:#E0E0E0;"> include empty dates in report ('Y' or 'N') </td><tr><td style="vertical-align:top; background-color:#E0E0E0;">cal_show_in_trailer</td><td style="vertical-align:top; background-color:#E0E0E0;">CHAR</td><td style="vertical-align:top; background-color:#E0E0E0;">1</td><td style="vertical-align:top; background-color:#E0E0E0;">Y</td><td style="vertical-align:top; background-color:#E0E0E0;">'N'</td><td style="vertical-align:top; background-color:#E0E0E0;"> include a link for this report in the "Go to" section of the navigation in the page trailer ('Y' or 'N') </td><tr><td style="vertical-align:top; background-color:#E0E0E0;">cal_update_date</td><td style="vertical-align:top; background-color:#E0E0E0;">INT</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;">N</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;"> date created or last updated (in YYYYMMDD format) </td></table>
+</blockquote>
+<br /><br />
+<h3><a name="webcal_report_template">webcal_report_template</a></h3>
+<blockquote>
+ Defines one of the templates used for a report. Each report has three templates: <ol> <li>Page template - Defines the entire page (except for header and   footer).  The following variables can be defined:   <ul>     <li>${days}<sup>*</sup> - the HTML of all dates (generated from the Date template)</li>   </ul></li> <li>Date template - Defines events for one day.  If the report   is for a week or month, then the results of each day will be   concatenated and used as the ${days} variable in the Page template.   The following variables can be defined:   <ul>     <li>${events}<sup>*</sup> - the HTML of all events          for the data (generated from the Event template)</li>     <li>${date} - the date</li>     <li>${fulldate} - date (includes weekday)</li>   </ul></li> <li>Event template - Defines a single event.      The following variables can be defined:   <ul>     <li>${name}<sup>*</sup> - Brief Description of event</li>     <li>${description} - Full Description of event</li>     <li>${date} - Date of event</li>     <li>${fulldate} - Date of event (includes weekday)</li>     <li>${time} - Time of event (4:00pm - 4:30pm)</li>     <li>${starttime} - Start time of event</li>     <li>${endtime} - End time of event</li>     <li>${duration} - Duration of event (in minutes)</li>     <li>${priority} - Priority of event</li>     <li>${href} - URL to view event details</li>   </ul></li> </ol> <sup>*</sup> denotes a required template variable <br /><br />
+<table style="border-width:0px;"><tr><th style="vertical-align:top; background-color:#C0C0C0;">Column Name</th><th style="vertical-align:top; background-color:#C0C0C0;">Type</th><th style="vertical-align:top; background-color:#C0C0C0;">Length</th><th style="vertical-align:top; background-color:#C0C0C0;">Null</th><th style="vertical-align:top; background-color:#C0C0C0;">Default</th><th style="vertical-align:top; background-color:#C0C0C0;">Description</th></tr>
+<tr><td style="vertical-align:top; background-color:#E0E0E0;"><span style="font-weight:bold; color:#A00000;">cal_report_id</span></td><td style="vertical-align:top; background-color:#E0E0E0;">INT</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;">N</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;"> report id (in webcal_report table) </td><tr><td style="vertical-align:top; background-color:#E0E0E0;"><span style="font-weight:bold; color:#A00000;">cal_template_type</span></td><td style="vertical-align:top; background-color:#E0E0E0;">CHAR</td><td style="vertical-align:top; background-color:#E0E0E0;">1</td><td style="vertical-align:top; background-color:#E0E0E0;">N</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;"> type of template: <ul> <li>'P': page template represents entire document</li> <li>'D': date template represents a single day of events</li> <li>'E': event template represents a single event</li> </ul> </td><tr><td style="vertical-align:top; background-color:#E0E0E0;">cal_template_text</td><td style="vertical-align:top; background-color:#E0E0E0;">TEXT</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;">Y</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;"> text of template </td></table>
+</blockquote>
+<br /><br />
+<h3><a name="webcal_site_extras">webcal_site_extras</a></h3>
+<blockquote>
+ This table holds data for site extra fields (customized in site_extra.php). <br /><br />
+<table style="border-width:0px;"><tr><th style="vertical-align:top; background-color:#C0C0C0;">Column Name</th><th style="vertical-align:top; background-color:#C0C0C0;">Type</th><th style="vertical-align:top; background-color:#C0C0C0;">Length</th><th style="vertical-align:top; background-color:#C0C0C0;">Null</th><th style="vertical-align:top; background-color:#C0C0C0;">Default</th><th style="vertical-align:top; background-color:#C0C0C0;">Description</th></tr>
+<tr><td style="vertical-align:top; background-color:#E0E0E0;"><span style="font-weight:bold; color:#A00000;">cal_id</span></td><td style="vertical-align:top; background-color:#E0E0E0;">INT</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;">N</td><td style="vertical-align:top; background-color:#E0E0E0;">0</td><td style="vertical-align:top; background-color:#E0E0E0;"> event id </td><tr><td style="vertical-align:top; background-color:#E0E0E0;"><span style="font-weight:bold; color:#A00000;">cal_name</span></td><td style="vertical-align:top; background-color:#E0E0E0;">VARCHAR</td><td style="vertical-align:top; background-color:#E0E0E0;">25</td><td style="vertical-align:top; background-color:#E0E0E0;">N</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;"> the brief name of this type (first field in $site_extra array) </td><tr><td style="vertical-align:top; background-color:#E0E0E0;"><span style="font-weight:bold; color:#A00000;">cal_type</span></td><td style="vertical-align:top; background-color:#E0E0E0;">INT</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;">N</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;"> $EXTRA_URL, $EXTRA_DATE, etc. </td><tr><td style="vertical-align:top; background-color:#E0E0E0;">cal_date</td><td style="vertical-align:top; background-color:#E0E0E0;">INT</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;">Y</td><td style="vertical-align:top; background-color:#E0E0E0;">0</td><td style="vertical-align:top; background-color:#E0E0E0;"> only used for $EXTRA_DATE type fields (in YYYYMMDD format) </td><tr><td style="vertical-align:top; background-color:#E0E0E0;">cal_remind</td><td style="vertical-align:top; background-color:#E0E0E0;">INT</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;">Y</td><td style="vertical-align:top; background-color:#E0E0E0;">0</td><td style="vertical-align:top; background-color:#E0E0E0;"> how many minutes before event should a reminder be sent </td><tr><td style="vertical-align:top; background-color:#E0E0E0;">cal_data</td><td style="vertical-align:top; background-color:#E0E0E0;">TEXT</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;">Y</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;"> used to store text data </td></table>
+</blockquote>
+<br /><br />
+<h3><a name="webcal_user">webcal_user</a></h3>
+<blockquote>
+ Defines a WebCalendar user. <br /><br />
+<table style="border-width:0px;"><tr><th style="vertical-align:top; background-color:#C0C0C0;">Column Name</th><th style="vertical-align:top; background-color:#C0C0C0;">Type</th><th style="vertical-align:top; background-color:#C0C0C0;">Length</th><th style="vertical-align:top; background-color:#C0C0C0;">Null</th><th style="vertical-align:top; background-color:#C0C0C0;">Default</th><th style="vertical-align:top; background-color:#C0C0C0;">Description</th></tr>
+<tr><td style="vertical-align:top; background-color:#E0E0E0;"><span style="font-weight:bold; color:#A00000;">cal_login</span></td><td style="vertical-align:top; background-color:#E0E0E0;">VARCHAR</td><td style="vertical-align:top; background-color:#E0E0E0;">25</td><td style="vertical-align:top; background-color:#E0E0E0;">N</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;"> the unique user login </td><tr><td style="vertical-align:top; background-color:#E0E0E0;">cal_passwd</td><td style="vertical-align:top; background-color:#E0E0E0;">VARCHAR</td><td style="vertical-align:top; background-color:#E0E0E0;">32</td><td style="vertical-align:top; background-color:#E0E0E0;">Y</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;"> the user's password. (not used for http or ldap authentication) </td><tr><td style="vertical-align:top; background-color:#E0E0E0;">cal_lastname</td><td style="vertical-align:top; background-color:#E0E0E0;">VARCHAR</td><td style="vertical-align:top; background-color:#E0E0E0;">25</td><td style="vertical-align:top; background-color:#E0E0E0;">Y</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;"> user's last name </td><tr><td style="vertical-align:top; background-color:#E0E0E0;">cal_firstname</td><td style="vertical-align:top; background-color:#E0E0E0;">VARCHAR</td><td style="vertical-align:top; background-color:#E0E0E0;">25</td><td style="vertical-align:top; background-color:#E0E0E0;">Y</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;"> user's first name </td><tr><td style="vertical-align:top; background-color:#E0E0E0;">cal_is_admin</td><td style="vertical-align:top; background-color:#E0E0E0;">CHAR</td><td style="vertical-align:top; background-color:#E0E0E0;">1</td><td style="vertical-align:top; background-color:#E0E0E0;">Y</td><td style="vertical-align:top; background-color:#E0E0E0;">'N'</td><td style="vertical-align:top; background-color:#E0E0E0;"> is the user a WebCalendar administrator ('Y' = yes, 'N' = no) </td><tr><td style="vertical-align:top; background-color:#E0E0E0;">cal_email</td><td style="vertical-align:top; background-color:#E0E0E0;">VARCHAR</td><td style="vertical-align:top; background-color:#E0E0E0;">75</td><td style="vertical-align:top; background-color:#E0E0E0;">Y</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;"> user's email address </td></table>
+</blockquote>
+<br /><br />
+<h3><a name="webcal_user_layers">webcal_user_layers</a></h3>
+<blockquote>
+ Define layers for a user. <br /><br />
+<table style="border-width:0px;"><tr><th style="vertical-align:top; background-color:#C0C0C0;">Column Name</th><th style="vertical-align:top; background-color:#C0C0C0;">Type</th><th style="vertical-align:top; background-color:#C0C0C0;">Length</th><th style="vertical-align:top; background-color:#C0C0C0;">Null</th><th style="vertical-align:top; background-color:#C0C0C0;">Default</th><th style="vertical-align:top; background-color:#C0C0C0;">Description</th></tr>
+<tr><td style="vertical-align:top; background-color:#E0E0E0;">cal_layerid</td><td style="vertical-align:top; background-color:#E0E0E0;">INT</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;">N</td><td style="vertical-align:top; background-color:#E0E0E0;">0</td><td style="vertical-align:top; background-color:#E0E0E0;"> unique layer id </td><tr><td style="vertical-align:top; background-color:#E0E0E0;"><span style="font-weight:bold; color:#A00000;">cal_login</span></td><td style="vertical-align:top; background-color:#E0E0E0;">VARCHAR</td><td style="vertical-align:top; background-color:#E0E0E0;">25</td><td style="vertical-align:top; background-color:#E0E0E0;">N</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;"> login of owner of this layer </td><tr><td style="vertical-align:top; background-color:#E0E0E0;"><span style="font-weight:bold; color:#A00000;">cal_layeruser</span></td><td style="vertical-align:top; background-color:#E0E0E0;">VARCHAR</td><td style="vertical-align:top; background-color:#E0E0E0;">25</td><td style="vertical-align:top; background-color:#E0E0E0;">N</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;"> login name of user that this layer represents </td><tr><td style="vertical-align:top; background-color:#E0E0E0;">cal_color</td><td style="vertical-align:top; background-color:#E0E0E0;">VARCHAR</td><td style="vertical-align:top; background-color:#E0E0E0;">25</td><td style="vertical-align:top; background-color:#E0E0E0;">Y</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;"> color to display this layer in </td><tr><td style="vertical-align:top; background-color:#E0E0E0;">cal_dups</td><td style="vertical-align:top; background-color:#E0E0E0;">CHAR</td><td style="vertical-align:top; background-color:#E0E0E0;">1</td><td style="vertical-align:top; background-color:#E0E0E0;">Y</td><td style="vertical-align:top; background-color:#E0E0E0;">'N'</td><td style="vertical-align:top; background-color:#E0E0E0;"> show duplicates ('N' or 'Y') </td></table>
+</blockquote>
+<br /><br />
+<h3><a name="webcal_user_pref">webcal_user_pref</a></h3>
+<blockquote>
+ Specify preferences for a user. Most preferences are set via pref.php. Values in this table are loaded after system settings found in <a href="#webcal_config">webcal_config</a>. <br /><br />
+<table style="border-width:0px;"><tr><th style="vertical-align:top; background-color:#C0C0C0;">Column Name</th><th style="vertical-align:top; background-color:#C0C0C0;">Type</th><th style="vertical-align:top; background-color:#C0C0C0;">Length</th><th style="vertical-align:top; background-color:#C0C0C0;">Null</th><th style="vertical-align:top; background-color:#C0C0C0;">Default</th><th style="vertical-align:top; background-color:#C0C0C0;">Description</th></tr>
+<tr><td style="vertical-align:top; background-color:#E0E0E0;"><span style="font-weight:bold; color:#A00000;">cal_login</span></td><td style="vertical-align:top; background-color:#E0E0E0;">VARCHAR</td><td style="vertical-align:top; background-color:#E0E0E0;">25</td><td style="vertical-align:top; background-color:#E0E0E0;">N</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;"> user login </td><tr><td style="vertical-align:top; background-color:#E0E0E0;"><span style="font-weight:bold; color:#A00000;">cal_setting</span></td><td style="vertical-align:top; background-color:#E0E0E0;">VARCHAR</td><td style="vertical-align:top; background-color:#E0E0E0;">25</td><td style="vertical-align:top; background-color:#E0E0E0;">N</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;"> setting name </td><tr><td style="vertical-align:top; background-color:#E0E0E0;">cal_value</td><td style="vertical-align:top; background-color:#E0E0E0;">VARCHAR</td><td style="vertical-align:top; background-color:#E0E0E0;">100</td><td style="vertical-align:top; background-color:#E0E0E0;">Y</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;"> setting value </td></table>
+</blockquote>
+<br /><br />
+<h3><a name="webcal_view">webcal_view</a></h3>
+<blockquote>
+ A "view" allows a user to put the calendars of multiple users all on one page.  A "view" is valid only for the owner (cal_owner) of the view.  Users for the view are in <a href="#webcal_view_user">webcal_view_user</a>. <br /><br />
+<table style="border-width:0px;"><tr><th style="vertical-align:top; background-color:#C0C0C0;">Column Name</th><th style="vertical-align:top; background-color:#C0C0C0;">Type</th><th style="vertical-align:top; background-color:#C0C0C0;">Length</th><th style="vertical-align:top; background-color:#C0C0C0;">Null</th><th style="vertical-align:top; background-color:#C0C0C0;">Default</th><th style="vertical-align:top; background-color:#C0C0C0;">Description</th></tr>
+<tr><td style="vertical-align:top; background-color:#E0E0E0;"><span style="font-weight:bold; color:#A00000;">cal_view_id</span></td><td style="vertical-align:top; background-color:#E0E0E0;">INT</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;">N</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;"> unique view id </td><tr><td style="vertical-align:top; background-color:#E0E0E0;">cal_owner</td><td style="vertical-align:top; background-color:#E0E0E0;">VARCHAR</td><td style="vertical-align:top; background-color:#E0E0E0;">25</td><td style="vertical-align:top; background-color:#E0E0E0;">N</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;"> login name of owner of this view </td><tr><td style="vertical-align:top; background-color:#E0E0E0;">cal_name</td><td style="vertical-align:top; background-color:#E0E0E0;">VARCHAR</td><td style="vertical-align:top; background-color:#E0E0E0;">50</td><td style="vertical-align:top; background-color:#E0E0E0;">N</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;"> name of view </td><tr><td style="vertical-align:top; background-color:#E0E0E0;">cal_view_type</td><td style="vertical-align:top; background-color:#E0E0E0;">CHAR</td><td style="vertical-align:top; background-color:#E0E0E0;">1</td><td style="vertical-align:top; background-color:#E0E0E0;">Y</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;"> "W" for week view, "D" for day view, "M" for month view </td><tr><td style="vertical-align:top; background-color:#E0E0E0;">cal_is_global</td><td style="vertical-align:top; background-color:#E0E0E0;">CHAR</td><td style="vertical-align:top; background-color:#E0E0E0;">1</td><td style="vertical-align:top; background-color:#E0E0E0;">N</td><td style="vertical-align:top; background-color:#E0E0E0;">'N'</td><td style="vertical-align:top; background-color:#E0E0E0;"> is this a global view (can it be accessed by other users) ('Y' or 'N') </td></table>
+</blockquote>
+<br /><br />
+<h3><a name="webcal_view_user">webcal_view_user</a></h3>
+<blockquote>
+ Specify users in a view. See <a href="#webcal_view">webcal_view</a>. <br /><br />
+<table style="border-width:0px;"><tr><th style="vertical-align:top; background-color:#C0C0C0;">Column Name</th><th style="vertical-align:top; background-color:#C0C0C0;">Type</th><th style="vertical-align:top; background-color:#C0C0C0;">Length</th><th style="vertical-align:top; background-color:#C0C0C0;">Null</th><th style="vertical-align:top; background-color:#C0C0C0;">Default</th><th style="vertical-align:top; background-color:#C0C0C0;">Description</th></tr>
+<tr><td style="vertical-align:top; background-color:#E0E0E0;"><span style="font-weight:bold; color:#A00000;">cal_view_id</span></td><td style="vertical-align:top; background-color:#E0E0E0;">INT</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;">N</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;"> view id </td><tr><td style="vertical-align:top; background-color:#E0E0E0;"><span style="font-weight:bold; color:#A00000;">cal_login</span></td><td style="vertical-align:top; background-color:#E0E0E0;">VARCHAR</td><td style="vertical-align:top; background-color:#E0E0E0;">25</td><td style="vertical-align:top; background-color:#E0E0E0;">N</td><td style="vertical-align:top; background-color:#E0E0E0;"> </td><td style="vertical-align:top; background-color:#E0E0E0;"> a user in the view </td></table>
+</blockquote>
+</body>
+</html>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/docs/WebCalendar-DeveloperGuide.html
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/docs/WebCalendar-DeveloperGuide.html	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/docs/WebCalendar-DeveloperGuide.html	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,401 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE html
+  PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>WebCalendar Developer Guide</title>
+<style type="text/css">
+body {
+  background-color: #FFFFFF;
+  font-family: Arial, Helvetica, sans-serif;
+}
+a {
+  text-decoration: none;
+}
+dt {
+  font-weight: bold;
+  margin-left: 25px;
+  margin-top: 20px;
+}
+.valid {
+  border-width: 0px;
+}
+pre {
+  font-family: courier, monospace;
+  font-size: 14px;
+  border: 1px solid #0000FF;
+  background-color: #EEEEFF;
+  padding: 4px;
+  margin-left: 25px;
+  margin-right: 25px;
+}
+tr {
+  background-color: #606080;
+  color: #F0F0F0;
+}
+td {
+  vertical-align: top;
+}
+th {
+  background-color: #000000;
+}
+.colorheader {
+  background-color: #000000;
+  color: #FFFFFF;
+  margin-left: 3px;
+  margin-right: 3px;
+  padding: 2px;
+}
+.newwin {
+  border-width: 0px;
+}
+.tip {
+  font-weight: bold;
+  background-color: #FFFF00;
+  border: 1px solid #000000;
+  padding: 1px;
+  padding-left: 5px;
+  padding-right: 5px;
+  margin-right: 10px;
+}
+.note {
+  font-weight: bold;
+  background-color: blue;
+  color: #FFFFFF;
+  border: 1px solid #000000;
+  padding: 2px;
+}
+hr {
+  margin-bottom: 7px;
+}
+h2 {
+  background-color: #191970;
+  color: #FFFFFF;
+  padding: 5px;
+}
+.top {
+  text-align: right;
+}
+</style>
+</head>
+<body>
+<h1>WebCalendar Developer Guide</h1>
+
+<h2>Table of Contents</h2>
+<ul>
+  <li><a href="#intro">Introduction</a></li>
+  <li><a href="#requirements">System Requirements</a></li>
+  <li><a href="#getcode">Getting The Code</a></li>
+  <li><a href="#conventions">Conventions</a></li>
+		<li><a href="#standards">Coding Standards</a></li>
+  <li><a href="#patch">Creating a Patch</a></li>
+  <li><a href="#translations">Translations and Languages</a></li>
+  <li><a href="#faq">FAQ</a></li>
+  <li><a href="#resources">Resources</a></li>
+</ul>
+<hr />
+
+<a name="intro"></a>
+<h2>Introduction</h2>
+
+<p>WebCalendar is written in PHP.  Although originally written
+  for PHP3, only PHP4 is officially supported.  (It should also
+  work on PHP5, but testing has not been completed yet.)
+</p>
+
+<div class="top"><a href="#" target="_top">↑ top</a></div>
+<hr />
+
+<a name="Tools"></a>
+<h2>Tools</h2>
+<p>The following tools will be helpful in WebCalendar development:
+</p>
+
+<ul>
+  <li><a href="http://www.perl.org">perl</a>:
+      Perl is used to check translation files to see what translations
+      are missing.
+      If you are using Windows, perl is included as part of the
+      <a href="http://www.cygwin.com">cygwin</a> package.
+      </li>
+  <li>make: The "make" command is used when generating WebCalendar
+      documentation in the <tt>docs</tt> directory.
+      The "make" command is standard on Linux if you install
+      certain development packages.
+      If you are using Windows, make is included as part of the
+      <a href="http://www.cygwin.com">cygwin</a> package.
+      </li>
+  <li><a href="http://www.gnu.org/software/patch/patch.html">patch</a>:
+      The "patch" command is used to apply patches posted
+      on the SourceForge patches area.
+      </li>
+  <li>diff: The "diff" command is used to create patches posted
+      on the SourceForge patches area.
+      </li>
+  <li><a href="https://www.cvshome.org/">CVS</a>:
+      Configuration management is managed using CVS.
+      </li>
+  <li>Access to Internet Explorer, Mozilla/Firefox, 
+      and Apple Safari.  We try to test on all three of these
+      platforms whenever we make any HTML or JavaScript changes.
+      If you do not have access to all these, please test your changes
+      on as many of these browsers as you have access to.
+      </li>
+
+</ul>
+
+<p><span class="tip">TIP</span> If you are developing on a
+Windows system, the <a href="http://www.cygwin.com">Cygwin package</a>
+will provide command line tools that
+include perl, make, patch, diff and cvs.
+</p>
+
+<div class="top"><a href="#" target="_top">↑ top</a></div>
+<hr />
+
+<a name="getcode"></a>
+<h2>Getting The Code</h2>
+
+<p>You should always be using the latest code in CVS.
+You can obtain the latest code using anonymous CVS.
+(You do not
+need to be an authorized WebCalendar developer).
+Use the following commands to checkout the latest code from
+CVS:
+</p>
+<pre>
+cvs -d:pserver:anonymous at cvs.sourceforge.net:/cvsroot/webcalendar login 
+cvs -z3 -d:pserver:anonymous at cvs.sourceforge.net:/cvsroot/webcalendar co webcalendar
+</pre>
+<p>This will create a <tt>webcalendar</tt> directory.
+You should run these commands from one of the directories that
+your web server is configured to use.
+For example, on some Linux systems, the Apache document root is
+configured to be <tt>/var/www/html</tt>.  So,
+you would change directories to that directories before
+checking the code out of CVS.
+</p>
+
+<p>You only need to perform this checkout once.
+After the initial checkout, you can update your code with the following
+command (run this command from inside the toplevel WebCalendar directory):
+</p>
+<pre>cvs update -d
+</pre>
+<p>If you have modified any of the WebCalendar files,
+CVS will attempt to merge your changes with any changes to the
+same file in the new code from CVS.
+</p>
+<p>
+For example, if you modified the <tt>includes/functions.php</tt> file
+on your system and a WebCalendar developer also modified this file
+in CVS, then when you perform the CVS update, the changes will be
+merged.  If the merge fails, you will see a file with a <tt>.rej</tt>
+extension and another with <tt>.orig</tt>.
+</p>
+
+<div class="top"><a href="#" target="_top">↑ top</a></div>
+<a name="conventions"></a>
+<h2>Conventions</h2>
+<p>
+The following conventions have been adopted by WebCalendar (although
+they have not been 100% enforced, so you will see exceptions):
+</p>
+<ul>
+<li>Function names: Use lowercase with an underscore '_' when naming
+  functions.<br/>Example: dbi_query
+  </li>
+<li>Database table names: All db tables are prefixed with "webcal_" and
+    are lowercase using underscores.
+    <br/>Example: webcal_user_pref
+    </li>
+<li>PHP function comments: <a href="phpdoc/" title="WebCalendar Function Documenation">Function documentation</a> is generated using
+    <a href="http://www.phpdoc.org/" title="phpDocumentor">phpDocumentor</a>.
+    Each function should be preceded by a DocBlock.  See the phpDocumentor website for
+    <a href="http://manual.phpdoc.org/HTMLSmartyConverter/HandS/phpDocumentor/tutorial_phpDocumentor.howto.pkg.html#basics.docblock"
+      title="DocBlocks">information about DocBlocks and DocBlock syntax</a>, and see
+    <a href="http://cvs.sourceforge.net/viewcvs.py/webcalendar/webcalendar/includes/functions.php?view=markup"><tt>includes/functions.php</tt></a>
+    for examples.
+    </li>
+<li>ChangeLog: if you have access to commit your changes to CVS, please
+   put an entry at the top of the ChangeLog file that describes the
+   change.  If the change fixes a specific SourceForge bug, then
+   include the bug id in the description.
+   </li>
+</ul>
+
+<div class="top"><a href="#" target="_top">↑ top</a></div>
+<a name="standards"></a>
+<h2>Coding Standards</h2>
+<p>
+The following coding standards have been adopted by WebCalendar (although
+they have not been 100% implemented).
+</p>
+<ul>
+<li>Indenting: Two spaces (ASCII 0x20) for each level. Wrapped lines should also be
+    indented 2 spaces if these spaces will not affect output.  
+    </li>
+<li>Tabs (ASCII 0x09): This character will not be used. Replace all
+     occurrences with ASCII 0x20. This may affect indenting, so please
+					double check before committing to CVS or posting.  
+    </li>
+<li>File Format: Unix format only (LF ASCII 0x0A), no Windows or Mac format files.
+    </li>
+<li>PHP file comments: Each file should have a file header.
+    <br/>
+    See <a href="http://cvs.sourceforge.net/viewcvs.py/webcalendar/webcalendar/report.php?view=markup"><tt>report.php</tt></a> as an example.
+    </li>
+<li>Use double quotes around html attributes
+    </li>
+<li>If/Else: Always us {} when not using inline format. Either of the following
+    is acceptable based on logic complexity.
+  <pre>				
+if ( foo == 1 ) {
+  bar = true;
+} else {
+  bar = false;
+}
+or  
+bar = ( foo == 1 )? true : false ;
+			</pre>
+    </li>
+<li>Function Calls/Declarations: Use spaces inside and around  parenthesis ()
+  <pre>
+Declaration: function getGetValue ( $name ) {
+Call: bar = getGetValue ( $name );
+</pre>
+    </li>
+</ul>
+
+<div class="top"><a href="#" target="_top">↑ top</a></div>
+<a name="patch"></a>
+<h2>Creating a Patch File</h2>
+
+<p>TODO</p>
+
+
+<div class="top"><a href="#" target="_top">↑ top</a></div>
+<a name="translations"></a>
+<h2>Translations and Languages</h2>
+
+<p>
+When adding or modifying WebCalendar code, all displayed text should be translatable.
+The following tips will ensure new text can be translated quickly and efficiently.</p>
+<ul>
+<li>Translate: All displayable text should be sent to the <em>translate
+    ()</em> function, which returns the text translated in the user's language of choice. 
+    A variation of this function is <em>etranslate ()</em>, which includes and echo command.
+    </li>
+<li>Htmlentities: 	When used, this function tag should include the current charset when displaying database
+    results. This will be most important when dealing with languages such as Japanese that
+				tend to contain charactes that would otherwise be non-displayable. Although this is not the perfect
+				solution, it seems to suffice for our purposes. Possibly, a  better technique would be to 
+				use the charset of the original creator of the data, but this is beyond current capabilities.	<br />
+				For reference see:
+	<pre><a href="http://us3.php.net/manual/en/function.htmlentities.php">
+http://us3.php.net/manual/en/function.htmlentities.php</a>
+	</pre>
+				</li>	
+<li>TODO: Add procedures for updating Language.txt files
+    </li>	
+</ul>
+
+<div class="top"><a href="#" target="_top">↑ top</a></div>
+<a name="faq"></a>
+<h2>Frequently Asked Questions</h2>
+<dl>
+<!-- START FAQ: Developing -->
+  <dt>Why aren't you using PHP sessions?</dt>
+  <dd>We are still considering using PHP4 sessions.
+      In fact, the <tt>install/index.php</tt> page <i>does</i>
+      use PHP sessions.
+      The cookie-based solution that WebCalendar uses is simple,
+      and it will work with all versions of PHP.
+      </dd>
+  <dt>Why aren't you using ADODB for database access?</dt>
+  <dd>Again, this would be overkill for what we need.  ADODB is a fairly
+      large project,
+      so I'm partial to my leaner php-dbi.php solution.</dd>
+  <dt>Why aren't you using the PEAR database functions?</dt>
+  <dd>WebCalendar pre-dates the PEAR database functions.
+      There does not seem to be sufficient reason to switch
+      from our existing code at this point.</dd>
+  <dt>Why aren't you using a template engine like smarty?</dt>
+  <dd>WebCalendar pre-dates most of the template engines out there.
+      We are currently evaluating some of the templating options
+      and may consider moving to one of the template systems in
+      the future.</dd>
+  <dt>How do I install a patch?</dt>
+  <dd>Different patches are applied differently. 
+      Some patches just contain an updated file.
+      In that case, you should be able to use replace the old file
+      with the new (assuming the new file and your install are based
+      on the same version of WebCalendar). <br/><br/>
+      Others are patch files, which usually have a <tt>.diff</tt>
+      or <tt>.patch</tt> file extension.
+      In order to use one of these files, you need the
+      <a href="http://www.gnu.org/software/patch/patch.html">GNU patch</a>
+      program.
+      (This should be installed on all Linux systems and you can get a
+      version for Windows. I use the patch program that comes with
+      <a href="http://www.cygwin.com">cygwin</a> on windows.)
+      I would recommend testing the patch on your install first using the
+      <tt>--dry-run</tt> option. 
+      <br/><br/>
+      For example, if the patch file is called <tt>calmods.diff</tt>,
+      then you would use:
+      <pre>patch --dry-run < calmods.diff</pre>
+      If the program says it cannot determine which file to patch,
+      try adding -p1: 
+      <pre>patch --dry-run -p1 < calmods.diff </pre>
+      <br/><br/>
+      If it goes through all the changes successfully, do the same
+      command without the <tt>--dry-run</tt> option to install the patch.
+      If it says "hunk failed", then the patch cannot be applied without
+      hand-merging files. This essentially means that the patch was
+      based on a version of WebCalendar that is too different than
+      the version that you have installed, so it was unable to determine
+      how to apply some of the changes in the patch file. 
+      </dd>
+ 
+<!-- END FAQ -->
+</dl>
+
+<div class="top"><a href="#" target="_top">↑ top</a></div>
+<a name="resources"></a>
+<h2>Resources</h2>
+<p>
+The following resources may be helpful:
+</p>
+
+<ul>
+<li>The <a href="http://cvs.sourceforge.net/viewcvs.py/webcalendar/webcalendar/TODO?view=markup">TODO</a> file in CVS contains
+  ideas for future enhancements.
+   </li>
+<li>The <a href="http://sourceforge.net/forum/forum.php?forum_id=11587">Open
+  Discussion</a> forum on SourceForge is a good place to ask
+  questions about WebCalendar development.
+  </li>
+<li><a href="http://sourceforge.net/bugs/?group_id=3870">Bug Reports</a>
+  on SourceForge.
+  </li>
+<li><a href="phpdoc/">WebCalendar Function Documentation
+  </li>
+<li><a href="http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/*checkout*/webcalendar/webcalendar/docs/WebCalendar-Database.html?rev=HEAD&content-type=text/html">WebCalendar-Database.html</a> describes the WebCalendar database schema
+  </li>
+<li><a href="http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/*checkout*/webcalendar/webcalendar/docs/WebCalendar-Styling.html?rev=HEAD&content-type=text/html">WebCalendar-Styling.html</a> describes how WebCalendar uses CSS
+  </li>
+</ul>
+
+<div class="top"><a href="#" target="_top">↑ top</a></div>
+<hr />
+<p>
+<b>Last Update:</b> $Id: WebCalendar-DeveloperGuide.html,v 1.6 2005/03/08 02:52:33 cknudsen Exp $
+<br/>
+  <a href="http://validator.w3.org/check?uri=referer"><img 
+    src="http://www.w3.org/Icons/valid-xhtml10" 
+    alt="Valid XHTML 1.0!" class="valid" /></a>
+</p>
+</body>
+</html>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/docs/WebCalendar-Styling.html
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/docs/WebCalendar-Styling.html	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/docs/WebCalendar-Styling.html	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,398 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+	"DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+	<title>WebCalendar Styling HOWTO</title>
+	<style type="text/css">
+		body {
+			background-color: #FFFFFF;
+			font-family: arial, sans-serif;
+			padding: 0px 40px;
+		}
+		h1, h2 {
+			margin-left: -20px;
+		}
+		p {
+			text-indent: 3ex;
+		}
+		code {
+			font-weight: bold;
+		}
+		dt {
+			font-family: monospace;
+			font-weight: bold;
+		}
+		div.example {
+			width: 350px;
+			margin: 0px auto;
+		}
+		div.example pre {
+			border: 1px solid blue;
+			background-color: #EEEEFF;
+			padding: 5px;
+			margin: 0px;
+		}
+		div.example p {
+			text-align: center;
+			font-style: italic;
+			font-size: small;
+			margin: 0px;
+		}
+		table {
+			margin: 0px auto;
+			border-collapse: collapse;
+		}
+		td, th {
+			padding: 3px;
+			border: 1px solid gray;
+		}
+		td {
+			font-family: monospace;
+		}
+	</style>
+</head>
+<body>
+	<h1>WebCalendar Styling HOWTO</h1>
+
+	<strong>NOTE:</strong> THIS DOCUMENTATION IS STILL UNDER CONSTRUCTION.<br />
+
+	<h2><a id="toc">Table of Contents</a></h2>
+
+	<ol><li>
+		<a href="#intro">Introduction</a></li><li>
+		<a href="#classes">Classes</a></li><li>
+		<a href="#order">Styling Order of Precedence</a></li><li>
+		<a href="#indiv">Styling for Individual Pages</a>
+	</li></ol>
+
+	<h2><a id="intro" href="#toc">Introduction</a></h2>
+
+	<p>WebCalendar offers an easy-to-use method for customizing colors via the Admin Panel. This document provides a more technical, in depth analysis of WebCalendar's styling system.  Please note: The WebCalendar styling system is still under construction. We plan on continuing to enhance functionality, and available options in the future.</p>
+
+	<p>WebCalendar uses <a title="W3C CSS homepage" href="http://www.w3.org/Style/CSS">CSS</a> to format its content. For an introduction to CSS, you may wish to read 
+	<a title="Starting with HTML + CSS" href="http://www.w3.org/Style/Examples/011/firstcss">Starting with HTML + CSS</a>, and/or 
+	<a title="Dave Raggett's Introduction to CSS" href="http://www.w3.org/MarkUp/Guide/Style">Dave Raggett's Introduction to CSS</a>. The technical specifications are available at the <abbr title="World Wide Web Consortium">W3C</abbr>:</p>
+	<ul><li>
+		<a href="http://www.w3.org/TR/CSS1" title="Cascading Style Sheets, Level 1">CSS 1</a></li><li>
+		<a href="http://www.w3.org/TR/CSS21" title="Cascading Style Sheets, Level 2 Revision 1">CSS 2.1</a>
+	</li></ul>
+
+	<h2><a id="classes" href="#toc">Trinity</a></h2>
+
+	<p>WebCalendar's style system is built to be flexible, standardized, and clear. Understanding how each of these components work in conjunction with one another, as well as individually is key to gaining the full benefit of the ability to customize the look & feel of your WebCalendar without having to modify any PHP, or HTML. The remainder of this document will provide you with the information necessary to fully understand each of these components, and how they work together.</p>
+
+	<h3>Structure</h3>
+
+	<p>WebCalendar can be easily customized site-wide, or page-by-page. In other words, you can easily make every page in WebCalendar look similar to one another, or completely different from one another. WebCalendar achieves this effect by uniquely identifying each page.Each page in WebCalendar (obviously) has a filename. WebCalendar automatically takes each filename, removes any underscores (_), as well as the extension (.php), and assigns the resulting value as an ID attribute on that page's body tag. For example, the page "edit_entry.php" would have the following body tag: <body id="editentry">. If you don't want to customize individual pages, you can disregard this information.</p>
+
+	<p>If you want to customize the look of a single page in WebCalendar, prefix all selectors for that page with its <code><body></code>'s <code>id</code>.  For example, to create styles that only apply to <code>month.php</code>, simply prefix all the selectors with <code>#month</code>.  The <code>id</code> for each page is shown below.</p>
+	<a id="bodyids"></a>
+	<table>
+		<tr><th>
+			Page</th><th>
+			Body ID
+		</th></tr>
+		<tr><td>
+			activity_log.php</td><td>
+			activitylog
+		</td></tr>
+		<tr><td>
+			add_entry.php</td><td>
+			addentry
+		</td></tr>
+		<tr><td>
+			admin.php</td><td>
+			admin
+		</td></tr>
+		<tr><td>
+			adminhome.php</td><td>
+			adminhome
+		</td></tr>
+		<tr><td>
+			approve_entry.php</td><td>
+			approveentry
+		</td></tr>
+		<tr><td>
+			assistant_edit.php</td><td>
+			assistantedit
+		</td></tr>
+		<tr><td>
+			category.php</td><td>
+			category
+		</td></tr>
+		<tr><td>
+			day.php</td><td>
+			day
+		</td></tr>
+		<tr><td>
+			del_entry.php</td><td>
+			delentry
+		</td></tr>
+		<tr><td>
+			del_layer.php</td><td>
+			dellayer
+		</td></tr>
+		<tr><td>
+			edit_entry.php</td><td>
+			editentry
+		</td></tr>
+		<tr><td>
+			edit_layer.php</td><td>
+			editlayer
+		</td></tr>
+		<tr><td>
+			edit_report.php</td><td>
+			editreport
+		</td></tr>
+		<tr><td>
+			edit_template.php</td><td>
+			edittemplate
+		</td></tr>
+		<tr><td>
+			edit_user.php</td><td>
+			edituser
+		</td></tr>
+		<tr><td>
+			export.php</td><td>
+			export
+		</td></tr>
+		<tr><td>
+			group_edit.php</td><td>
+			groupedit
+		</td></tr>
+		<tr><td>
+			groups.php</td><td>
+			groups
+		</td></tr>
+		<tr><td>
+			help_admin.php</td><td>
+			helpadmin
+		</td></tr>
+		<tr><td>
+			help_bug.php</td><td>
+			helpbug
+		</td></tr>
+		<tr><td>
+			help_edit_entry.php</td><td>
+			helpeditentry
+		</td></tr>
+		<tr><td>
+			help_import.php</td><td>
+			helpimport
+		</td></tr>
+		<tr><td>
+			help_index.php</td><td>
+			helpindex
+		</td></tr>
+		<tr><td>
+			help_layers.php</td><td>
+			helplayers
+		</td></tr>
+		<tr><td>
+			help_pref.php</td><td>
+			helppref
+		</td></tr>
+		<tr><td>
+			import.php</td><td>
+			import
+		</td></tr>
+		<tr><td>
+			index.php</td><td>
+			index
+		</td></tr>
+		<tr><td>
+			layers.php</td><td>
+			layers
+		</td></tr>
+		<tr><td>
+			layers_toggle.php</td><td>
+			layerstoggle
+		</td></tr>
+		<tr><td>
+			list_unapproved.php</td><td>
+			listunapproved
+		</td></tr>
+		<tr><td>
+			login.php</td><td>
+			login
+		</td></tr>
+		<tr><td>
+			month.php</td><td>
+			month
+		</td></tr>
+		<tr><td>
+			nonusers.php</td><td>
+			nonusers
+		</td></tr>
+		<tr><td>
+			pref.php</td><td>
+			pref
+		</td></tr>
+		<tr><td>
+			publish.php</td><td>
+			publish
+		</td></tr>
+		<tr><td>
+			purge.php</td><td>
+			purge
+		</td></tr>
+		<tr><td>
+			reject_entry.php</td><td>
+			rejectentry
+		</td></tr>
+		<tr><td>
+			report.php</td><td>
+			report
+		</td></tr>
+		<tr><td>
+			search.php</td><td>
+			search
+		</td></tr>
+		<tr><td>
+			select_user.php</td><td>
+			selectuser
+		</td></tr>
+		<tr><td>
+			set_entry_cat.php</td><td>
+			setentrycat
+		</td></tr>
+		<tr><td>
+			upcoming.php</td><td>
+			upcoming
+		</td></tr>
+		<tr><td>
+			users.php</td><td>
+			users
+		</td></tr>
+		<tr><td>
+			usersel.php</td><td>
+			usersel
+		</td></tr>
+		<tr><td>
+			view_d.php</td><td>
+			viewd
+		</td></tr>
+		<tr><td>
+			view_entry.php</td><td>
+			viewentry
+		</td></tr>
+		<tr><td>
+			view_l.php</td><td>
+			viewl
+		</td></tr>
+		<tr><td>
+			view_m.php</td><td>
+			viewm
+		</td></tr>
+		<tr><td>
+			view_t.php</td><td>
+			viewt
+		</td></tr>
+		<tr><td>
+			view_v.php</td><td>
+			viewv
+		</td></tr>
+		<tr><td>
+			view_w.php</td><td>
+			vieww
+		</td></tr>
+		<tr><td>
+			views.php</td><td>
+			views
+		</td></tr>
+		<tr><td>
+			views_edit.php</td><td>
+			viewsedit
+		</td></tr>
+		<tr><td>
+			week.php</td><td>
+			week
+		</td></tr>
+		<tr><td>
+			week_details.php</td><td>
+			weekdetails
+		</td></tr>
+		<tr><td>
+			year.php</td><td>
+			year
+		</td></tr>
+	</table>
+
+	<p>WebCalendar has two basic types of calendars: full-sized calendars, and mini-calendars. Each of these types use a specific structure. Full-sized calendars are organized using the structure outlined below. The header of the page is a div with the "title" class (i.e. <code><div class="title"></code>). Within that div, there are several spans each with its own class. These classes include:
+	<ul><li>
+		weeknumber</li><li>
+		view</li><li>
+		date
+	</li></ul>
+	Also within this div are the left & right navigation arrows. The left arrow link has the "prev" class, and the right arrow link has the "next" class. Pages that have mini-calendars in place of the arrows use "prevmonth" and "nextmonth" with the ID attribute.</p>
+	<p>Structurally, the header of pages with a full-sized calendar will look similar to:</p>
+	<div class="example">
+		<a id="ex1"></a>
+		<pre><div class="title">
+	<span class="weeknumber"></span>
+	<span class="view"></span>
+	<span class="date"></span>
+</div>
+</pre>
+		<p>Example 1</p>
+	</div>
+	
+	<p>Below the "title" div is a table with the "main" class. This is the full-size calendar itself. There are a variety of options available in styling the calendar. First, there are two types of cells in a table: tableheaders (<code><th></code> tags), and tablecells (<code><td></code> tags). WebCalendar distinguishes between <em>column</em> tableheaders & <em>row</em> tableheaders. Headers containing dates, or days of the week utilize the classes <em>today</em>, and <em>weekend</em>. To style tableheaders for Monday through Friday, while today is eDays of the week that are not Saturday or Sunday, and that are also not today's date, can be styled by simply referring to the "th" tag itself. Alternatively, if you don't want to style tableheaders according to the weekend, or today colors, you can simply omit this style from the stylesheet. Row tableheaders (when they don't contain dates) are always styled using the class, "row".</p>
+	<p>Tablecells (td tags) within the "main" calendar table follow the same structure as tableheaders with dates, or days. Therefore, tablecells that fall on the weekend, will have the "weekend" class. If the cell is on today's date, but it's not on Saturday or Sunday, the cell will have the "today" class. If the cell is not on the weekend, nor today's date, it doesn't get a class (in this case, style these cells similar to how you styled tableheaders without a class). If the cell is both on the weekend, and on today's date, it has "weekend today" as the value for the class attribute. Below are some examples to help illustrate.</p>
+	<p>If you're customizing month.php & want tablecells (td tags) on today's date to have a red background, you would use:</p>
+	<div class="example">
+		<a id="ex1"></a>
+		<pre>#month td.today {
+	background-color: red;
+}</pre>
+		<p>Example 1</p>
+	</div>
+
+	<p>Similarly, if customizing month.php & you want tablecells occuring on the weekend to have a thin black border with 10 pixels of padding on each side, you would use:</p>
+	<div class="example">
+		<a id="ex2"></a>
+		<pre>#month td.weekend {
+	border: 1px solid black;
+	padding: 10px;
+}</pre>
+		<p>Example 2</p>
+	</div>
+
+	<p>Clearly there will be times when tablecells will be both on the weekend, as well as on today's date. In such an instance, styles from each of the classes are combined. For example, if today is a Saturday, the HTML for that cell would be <code><td class="weekend today"></code>. Using the classes from examples one & two above, this cell would have a red background, with a thin black border, and 10 pixels of padding on each side.</p>
+	
+	<p>Now say the styles had looked like this:</p>
+	<div class="example">
+		<a id="ex2"></a>
+		<pre>.today {
+	background-color: red;
+}
+
+.weekend {
+	border: 1px solid black;
+	padding: 10px;
+	<em>background-color: blue;</em>
+}
+
+.hasevents {
+	font-weight: bold;
+}</pre>
+		<p>Example 2</p>
+	</div>
+
+	<p>Note that both the <code>today</code> class and the <code>weekend</code> class have a <code>background-color</code> definition.  So does our example <code><td></code> (which belongs to both the <code>today</code> and <code>weekend</code> classes) end up with a red background or a blue one? This conflict is decided by the <a href="#order">Styling Order of Precedence</a>.</p>
+
+	<h2><a id="order" href="#toc">Styling Order of Precedence</a></h2>
+
+	<p>When conflicts arise between styles (as in <a href="#ex2">Example 2</a> above), the definition from the class with the highest precedence is chosen. The order of precedence is:</p>
+
+	<ol title="Styling Order of Precedence"><li>
+		<code>today</code></li><li>
+		<code>hasevents</code></li><li>
+		<code>weekend</code></li><li>
+		<code>empty</code>
+	</li></ol>
+
+	<p>This says that styles defined for the <code>today</code> class will be chosen styles for the <code>hasevents</code> class when there is a conflict, styles for the <code>hasevents</code> class will be chosen over styles for the <code>weekend</code> class, and so on.</p>
+</body>
+</html>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/docs/WebCalendar-SysAdmin.html
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/docs/WebCalendar-SysAdmin.html	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/docs/WebCalendar-SysAdmin.html	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,1580 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE html
+    PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "DTD/xhtml1-transitional.dtd">
+    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+     <head>
+<title>WebCalendar System Administrator's Guide</title>
+<style type="text/css">
+body {
+ background-color: #FFFFFF;
+ font-family: Arial, Helvetica, sans-serif;
+}
+a {
+ text-decoration: none;
+}
+dt {
+ font-weight: bold;
+ margin-left: 25px;
+ margin-top: 20px;
+}
+.valid {
+ border-width: 0px;
+}
+pre {
+ font-family: courier, monospace;
+ font-size: 14px;
+ border: 1px solid #0000FF;
+ background-color: #EEEEFF;
+ padding: 4px;
+ margin-left: 25px;
+ margin-right: 25px;
+}
+tr {
+ background-color: #606080;
+ color: #F0F0F0;
+}
+td {
+ vertical-align: top;
+}
+th {
+ background-color: #000000;
+}
+.colorheader {
+ background-color: #000000;
+ color: #FFFFFF;
+ margin-left: 3px;
+ margin-right: 3px;
+ padding: 2px;
+}
+.newwin {
+ border-width: 0px;
+}
+.tip {
+ font-weight: bold;
+ background-color: #FFFF00;
+ border: 1px solid #000000;
+ padding: 1px;
+ padding-left: 5px;
+ padding-right: 5px;
+ margin-right: 10px;
+}
+.note {
+ font-weight: bold;
+ background-color: blue;
+ color: #FFFFFF;
+ border: 1px solid #000000;
+ padding: 2px;
+}
+hr {
+ margin-bottom: 7px;
+}
+h2 {
+ background-color: #191970;
+ color: #FFFFFF;
+ padding: 5px;
+}
+.top {
+ text-align: right;
+}
+</style>
+</head>
+<body>
+<h1>WebCalendar System Administrator's Guide</h1>
+<p><strong>WebCalendar Version:</strong> 1.0.0</p>
+
+<h2>Table of Contents</h2>
+<ul>
+ <li><a href="#intro">Introduction</a></li>
+ <li><a href="#requirements">System Requirements</a></li>
+ <li><a href="#fileunpacking">File Unpacking</a></li>
+ <li><a href="#dbsetup">Database Setup</a></li>
+ <li><a href="#appsetup">Application Setup</a></li>
+ <li><a href="#reminders">Setting Up Email Reminders</a></li>
+ <li><a href="#systemsettings">System Settings</a></li>
+ <li><a href="#siteextras">Custom Event Fields</a></li>
+ <li><a href="#faq">FAQ</a></li>
+ <li><a href="#trouble">Troubleshooting</a></li>
+ <li><a href="#help">Getting Help</a></li>
+ <li><a href="#license">Licensing</a></li>
+ <li><a href="#glossary">Glossary</a></li>
+ <li><a href="#appendixA">Appendix A: Database Setup with phpMyAdmin</a></li>
+ <li><a href="#appendixB">Appendix B: Setting Up Reminders on Windows</a></li>
+ <li><a href="#appendixC">Appendix C: Displaying Upcoming Events on Your Site</a></li>
+ <li><a href="#appendixD">Appendix D: How To Configure For LDAP</a></li>
+</ul>
+<hr />
+
+<a name="intro"></a>
+<h2>Introduction</h2>
+
+<p>WebCalender is an open source PHP-based multi-user calendar.</p>
+
+ <p><strong>Features:</strong></p>
+ <ul>
+  <li>Multi-user support</li>
+  <li>Group support</li>
+  <li>View day-at-glance</li>
+  <li>View month-at-glance</li>
+  <li>View week-at-glance</li>
+  <li>View year-at-glance</li>
+  <li>View another user's calendar</li>
+  <li>View multiple users' calendars at the same time</li>
+  <li>View one or more users' calendar via layers on top of your own calendar</li>
+  <li>Public calendar (that requires no login) where anonymous users
+    submit events that are approved by an administrator</li>
+  <li>Add/Edit/Delete users</li>
+  <li>Add/Edit/Delete events</li>
+  <li>Repeating events</li>
+  <li>Custom event fields</li>
+  <li>Search interface for calendar entries</li>
+  <li>User-configurable preferences for colors, 12/24 time format,
+    Week start on Sun or Mon, default work hours</li>
+  <li>Online help</li>
+  <li>Checks for scheduling conflicts</li>
+  <li>Support for multiple timezones</li>
+  <li>Users can accept or reject events added by another user to their calendar</li>
+  <li>Email reminders</li>
+  <li>Email notifications for new events</li>
+  <li>Support for 30 different languages:
+  <ul>
+   <li>Basque</li>
+   <li>Bulgarian</li>
+   <li>Catalan</li>
+   <li>繁體中文(Big5)</li>
+   <li>简体中文(GB2312)</li>
+   <li>Czech</li>
+   <li>Danish</li>
+   <li>Deutsch (German)</li>
+   <li>English</li>
+   <li>Español (Spanish)</li>
+   <li>Estonian</li>
+   <li>Français (French)</li>
+   <li>Galician</li>
+   <li>Hollands (Dutch)</li>
+   <li>Holo (Taiwanese)</li>
+   <li>Hungarian</li>
+   <li>Icelandic</li>
+   <li>Italiano (Italian)</li>
+   <li>Japanese</li>
+   <li>Korean</li>
+   <li>Norsk (Norwegian)</li>
+   <li>Polish</li>
+   <li>Portuguese</li>
+   <li>Portuguese/Brazil</li>
+   <li>Romanian</li>
+   <li>Русско (Russian)</li>
+   <li>Suomalainen (Finnish)</li>
+   <li>Svensk (Swedish)</li>
+   <li>Turkish</li>
+   <li>Welsh</li>
+  </ul>
+ </li>
+ <li>Exporting to and importing from:
+  <ul>
+   <li>Palm Pilot</li>
+   <li>iCal</li>
+   <li>vCal</li>
+  </ul>
+ </li>
+ <li>Authentication using:
+  <ul>
+   <li>LDAP</li>
+   <li>HTTP authentication</li>
+   <li>NIS</li>
+   <li>web-based</li>
+  </ul>
+ </li>
+ <li>Activity log that tracks:
+  <ul>
+   <li>event creation</li>
+   <li>event updates</li>
+   <li>event acceptance</li>
+   <li>event rejection</li>
+   <li>email notifications</li>
+   <li>email reminders</li>
+  </ul>
+ </li>
+</ul>
+<div class="top"><a href="#" target="_top">↑ top</a></div>
+<hr />
+
+<a name="requirements"></a>
+<h2>System Requirements</h2>
+ <ul>
+  <li>PHP 4 (PHP 5 not yet tested) with <tt>magic_quotes_gpc</tt> enabled</li>
+  <li>Database (see <a href="#database">below</a>)</li>
+  <li>CSS-enabled browser</li>
+  <li>JavaScript-enabled browser</li>
+  <li>If not using HTTP-based authentication, then browser cookies are required</li>
+ </ul>
+ <p><strong>Recommended:</strong></p>
+ <ul>
+  <li>pilot-link (if exporting to Palm):
+  <a href="http://sourceforge.net/project/?group_id=2158">http://sourceforge.net/project/?group_id=2158</a> <a href="http://sourceforge.net/project/?group_id=2158" title="Open in new window" target="_new"><img src="newwin.gif" alt="new" class="newwin" /></a></li>
+ </ul>
+ <p><a name="database">You must have one of the following databases installed</a>:</p>
+ <ul>
+  <li>MySQL</li>
+  <li>Oracle 8</li>
+  <li>PostgreSQL</li>
+  <li>Interbase</li>
+  <li>MS SQL Server</li>
+  <li>ODBC (PHP ODBC includes support for Adabas D, IBM DB2, Solid and Sybase SQL Anywhere as well as ODBC)</li>
+ </ul>
+ <p>For the database you choose, you must have its drivers built into
+  PHP.  For example, to use MySQL, PHP must be compiled with MySQL
+  support (which is the default setting when installing PHP).
+  See the PHP pages (<a href="http://www.php.net">www.php.net</a> <a href="http://www.php.net" title="Open in new window" target="_new"><img src="newwin.gif" alt="new" class="newwin" /></a>)
+  for more information on setting up PHP.</p>
+ <p>No optional PHP packages (other than MySQL) are required for this
+  application.  However, PHP shoud be compiled with <tt>--enable-track-vars</tt>
+  on some systems.</p>
+ <p>Make sure that <tt>magic_quotes_gpc</tt> in <tt>php.ini</tt>
+  is turned on (otherwise, you will get an error message when you try to access WebCalendar.)</p>
+ <p><span class="tip">TIP</span> If you are using Apache
+  as your web server and if you cannot or do not want to enable
+  <tt>magic_quotes_gpc</tt> for your entire site, you can enable
+  it just for WebCalendar.
+  Create a <tt>.htaccess</tt> file in the toplevel WebCalendar
+  directory that contains a single line:</p>
+  <pre>php_value magic_quotes_gpc 1</pre>
+  <p>(For this to work with Apache, you must have the Apache
+  <tt>AllowOverride All</tt> directive enabled for the directory
+  where WebCalendar is installed.
+  Additionally, PHP must be running as an Apache module, not
+  a CGI.)</p>
+
+ <p>You can run PHP either as a CGI or an Apache module.  You'll get better
+  performance with PHP setup as a module.  Not only will you not have to
+  deal with the CGI performance hit, but you'll be able to use PHP's
+  database connection pooling.  Additionally, this application can use
+  a form/cookie-based authentication or traditional HTTP authentication.
+  For traditional HTTP authentication, PHP must be built as an Apache
+  module.</p>
+ <p>If you are planning on using email reminders, you will need to build
+  PHP as a CGI in order to run the <tt>send_reminders.php</tt> script.  I would
+  strongly recommend building a module-based PHP for your web server
+  and then a second PHP build to create the CGI version.</p>
+ <p><span class="tip">TIP</span> Some Linux distributions come with both a module-based PHP
+  with Apache and a standalone PHP binary.
+  Check for <tt>/usr/bin/php</tt> to see if you already have the
+  PHP standalone executable.  If it's there, you can use
+  the following command to see what version of PHP you have:</p>
+ <pre>/usr/bin/php -v</pre>
+<div class="top"><a href="#" target="_top">↑ top</a></div>
+<hr />
+
+<a name="fileunpacking"></a>
+<h2>File Unpacking</h2>
+ <p>Unpack the calendar software in its own directory somewhere where
+  your web server will find it.  (See your web server docs for info.)</p>
+ <p>By default, WebCalendar should create its own directory
+  when you unpack it.  The new directory name will typically
+  contain the version name (such as <tt>WebCalendar-0.9.41</tt>).
+  You can rename this directory after unpacking the files if you
+  prefer a directory name like <tt>calendar</tt> or <tt>webcalendar</tt>.
+  Keep in mind that unless you remap the directory (via your web server's
+  configuration settings), it will be part of the URL for the calendar.</p>
+<div class="top"><a href="#" target="_top">↑ top</a></div>
+<hr />
+
+<a name="dbsetup"></a>
+ <h2>Database Setup</h2>
+ <p>There are three steps in setting up the database:</p>
+ <ol>
+  <li>Creating the database</li>
+  <li>Creating the user</li>
+  <li>Creating the required tables</li>
+ </ol>
+ <p>Follow the steps outlined below for the database you are using.
+  When complete, a single user account will be created
+  with the <strong>login "admin" and password "admin"</strong>, which you are encouraged
+  to use to create your own account.</p>
+ <p><span class="note">Note:</span> In the examples below, text in <strong>bold</strong>
+  represents text that you must type in.</p>
+         <p><span class="note">Security:</span> The default values for database, login, and
+  password (<strong>intranet</strong>, <strong>webcalendar</strong>, and <strong>webcal01</strong>) are for demonstration purposes only
+  and should never be used in a production environment.</p>
+ <h3 class="colorheader">MySQL</h3>
+ <p>The following will create a database named "intranet".</p>
+<pre><strong>mysqladmin create intranet</strong></pre>
+ <p>Next, create the database user account that will be used to access the database.</p>
+ <pre><strong>mysql --user=root mysql</strong>
+mysql> <strong>GRANT ALL PRIVILEGES ON *.* TO webcalendar at localhost
+IDENTIFIED BY 'webcal01' WITH GRANT OPTION;</strong>
+mysql> <strong>FLUSH PRIVILEGES;</strong>
+mysql> <strong>QUIT</strong></pre>
+ <p>If you will be accessing MySQL from a different machine than
+  the one running the web server, repeat the command above
+  and replace 'localhost' with the hostname of the other machine.</p>
+ <p>Create the calendar tables using the supplied <tt>tables-mysql.sql</tt> file:</p>
+ <pre><strong>mysql intranet < tables-mysql.sql</strong></pre>
+ <p>In the above example, "intranet" is the name of your database.</p>
+
+ <p><span class="note">Note:</span> If you are using
+ <a href="http://www.phpmyadmin.net">phpMyAdmin</a> to
+ manage your MySQL database, follow the
+ instructions in <a href="#appendixA">Appendix A</a>.
+ </p>
+
+ <h3 class="colorheader">Oracle</h3>
+ <p>The following will create a tablespace named "webcalendar".
+  From the command line, startup sqlplus and
+  issue the following command:</p>
+ <pre><strong>sqlplus</strong>
+SQL> <strong>CREATE TABLESPACE webcalendar
+DATAFILE 'webcalendar.dat' SIZE 10M
+AUTOEXTEND ON NEXT 10M MAXSIZE 40M;</strong></pre>
+ <p>Next, create the database user account that will be used to access the database.</p>
+ <pre><strong>sqlplus</strong>
+SQL> <strong>CREATE USER webcalendar IDENTIFIED BY webcal01
+DEFAULT TABLESPACE webcalendar;</strong>
+SQL> <strong>GRANT dba TO webcalendar;</strong>
+SQL> <strong>quit</strong></pre>
+ <p>Create the calendar tables using the supplied <tt>tables-oracle.sql</tt> file:</p>
+ <pre><strong>sqlplus webcalendar/webcal01</strong>
+SQL> <strong>@tables-oracle;</strong>
+SQL> <strong>quit</strong></pre>
+
+ <h3 class="colorheader">PostgreSQL</h3>
+ <p>The following will create a database named "webcalendar".
+  From the command line, startup psql and
+  issue the following command:</p>
+ <pre><strong>create database webcalendar;
+\c webcalendar
+\i tables-postgres.sql
+\q</strong></pre>
+
+ <h3 class="colorheader">Interbase</h3>
+ <p>The following will create a database named "WEBCAL.gdb".
+  From the command line, startup usql and
+  issue the following command:</p>
+ <pre><strong>CREATE DATABASE 'WEBCAL.gdb';</strong></pre>
+
+ <p>Create the calendar tables using the supplied <tt>tables-ibase.sql</tt> file:</p>
+ <pre><strong>isql
+connect /path/WEBCAL.gdb;
+input path/table-ibase.sql;</strong></pre>
+
+ <h3 class="colorheader">ODBC</h3>
+ <p>Setup will depend on which database you are using.
+  When it comes time to create the tables,
+  the <tt>tables-postgres.sql</tt> file should work for most
+  databases.</p>
+   <h3 class="colorheader">MSSQL</h3>
+ <p>Create a database, <strong>intranet,</strong>  and add a user, <strong>webcalendar</strong>, to access this database. The user should be granted public, db_datareader,
+   and db_datawriter privileges. Open SQL Query Analyzer then open
+   the file <tt>tables-postgres.sql</tt>. Make sure you have identified <strong>intranet</strong> as the target database and Execute the contents of the sql file.</p>
+          <div class="top"><a href="#" target="_top">↑ top</a></div>
+<hr />
+
+<a name="appsetup"></a>
+ <h2>Application Setup</h2>
+ <p>Next, you will need to run the web-based database setup script
+ (simply direct your browser to your new WebCalendar location).
+ You will need to modify the permissions of the <tt>includes</tt>
+ directory.  On Linux/UNIX, you should change this directory
+ to be read/write for all users (<tt>chmod 777 includes</tt>).
+ On Windows, change this directory to have full access for all users
+ using Windows Explorer. Changing the write permissions will allow the web-based
+ database configuration tool to create the <tt>settings.php</tt> file.</p>
+ 
+ <p><span class="tip">TIP</span> After you have created the
+ <tt>settings.php</tt> file (with the "Save Settings" button),
+ you can change the permissions back to a more restrictive setting.</p>
+ 
+ <p>After you test and save your database settings, you
+ will be prompted to enter an installation password.
+ <b>Write this password down somewhere.</b> There is no way to reset 
+ this password. If you forget this password and need to change your database settings, 
+ you will need to manually edit the <tt>settings.php</tt> file with a text editor.</p>
+ 
+ <p>If you choose not to use the web-based database configuration
+ tool, you can manually edit the <tt>settings.php</tt> file.
+ There is an example file <tt>settings.php.orig</tt> that you
+ can use as a starting point. Simply rename this file to <tt>settings.php</tt>. 
+ You will need to set the values as follows in <tt>settings.php</tt>:</p>
+ <p>To configure your database access. Set the values for:</p>
+ <table class="distinguish">
+  <tr><td>
+   db_type</td>
+  <td>
+   One of "mysql", "oracle", "postgresql", "odbc",
+   "mssql",
+   or "ibase"
+  </td>
+  </tr>
+  <tr><td>
+   db_host</td><td>
+   The hostname that database is running on.
+   (Use localhost if it's the same machine as 
+   the web server.) (This variable is not used with ODBC)
+  </td></tr>
+  <tr><td>
+   db_login</td><td>
+   The database login
+  </td></tr>
+  <tr><td>
+   db_password</td><td>
+   The database password for the above login
+  </td></tr>
+  <tr><td>
+   db_database</td><td>
+   The name of the database that the calendar 
+   tables reside in.  ("intranet" in the <a href="#dbsetup">examples above</a>.) 
+   For ODBC, this should be the DSN.
+  </td></tr>
+  <tr><td>
+   db_persistent</td><td>
+   Enable use of persistent (pooled) database connections. 
+   This should typically be enabled.
+  </td></tr>
+ </table>
+
+ <p>You can configure the calendar to run in single-user<a href="#g_singleuser">*</a> mode or 
+ multi-user<a href="#g_multiuser">*</a> mode. If this is your first time using the 
+ calendar, it's easier to try single-user. You can always switch to multi-user 
+ later. Leave <tt>single_user</tt> set to "N" (the default) for multi-user or set 
+ it to "Y" and set the value of <tt>single_user_login</tt> to a login name of your liking 
+ to set the system to single-user mode. (And be sure to set the value of 
+ <tt>single_user_login</tt> to the login that you would choose if you decide to switch 
+ to multi-user mode some day.)</p>
+ <p><span class="note">Note:</span> If you do decide to switch from single-user mode to multi-user mode,
+  make sure you add in a user to the system for the login you set the
+  <tt>single_user_login</tt> variable to.  You will need to do this via the
+  database (mysql, sqlplus, etc.)  Look in the <tt>tables-mysql.sql</tt>
+  (or <tt>tables-oracle.sql</tt>, etc.) to see the example of adding in the "admin" user.</p>
+ <p>If you are setting up a multi-user calendar, you will need to choose
+  how your users are authenticated. You must change the settings of 
+  <tt>use_http_auth</tt> and <tt>user_inc</tt>
+  to setup which authentication method to use.</p>
+ <p>You currently have four choices:</p>
+ <ol>
+  <li>Web-based authentication (login/passwords verified in the WebCalendar database):<br />
+   <tt>use_http_auth = false</tt><br />
+   <tt>user_inc = user.php</tt>
+  </li>
+  <li>HTTP-based authentication (login/passwords verified by the web server):<br />
+   <tt>use_http_auth = true</tt><br />
+   <tt>user_inc = user.php</tt><br />
+   ... and don't forget to setup your web server to handle user
+   authentication.<br />
+          <span class="note">Note:</span> In order to use HTTP-based authentication,
+    PHP must be setup as a module for your server rather than a CGI.
+  </li>
+  <li>NIS-based authentication (login/passwords verified by NIS):<br />
+   <tt>use_http_auth = false</tt><br />
+   <tt>user_inc = user-nis.php</tt><br />
+   Additional configuration settings will need to be set
+   in <tt>includes/user-nis.php</tt>.
+  </li>
+  <li>LDAP-based authentication (login/passwords verified by LDAP server):<br />
+   <tt>use_http_auth = false</tt><br />
+   <tt>user_inc = user-ldap.php</tt><br />
+   Additional configuration settings will need to be set
+   in <tt>includes/user-ldap.php</tt>.
+  </li>
+ </ol>
+    <p>Keep in mind that if you want to use reminders, you will need to
+  setup the <tt>send_reminders.php</tt> script (see below) and keep your admin
+  setting for "Email enabled" set to "Yes" on the admin settings page.</p>
+    <p>At this point, your WebCalendar installation should be up and running.
+  To access WebCalendar open up your favorite web browser and
+  type in the URL.  The URL will depend on where you installed
+  WebCalendar.</p>
+    <p>When you unpacked/unzipped the WebCalendar distribution, it typically
+  creates a directory that includes the version number.
+  For example, if the zip file was named <tt>WebCalendar-0.9.99.zip</tt>
+  (or <tt>WebCalendar-0.9.99.tar.gz</tt>), then there
+  should be a <tt>WebCalendar-0.9.99</tt> directory.  For convenience, you
+  can rename this directory so that the URL does not include the version
+  number.  On Windows, you can do this from the Windows Explorer.
+  On Linux/UNIX, you can use the <tt>mv</tt> command to rename the directory.
+  Supposing you renamed the <tt>WebCalendar-0.9.99</tt> directory to just
+  be <tt>calendar</tt>, and you unpacked/unzipped the files into your toplevel
+  web server directory, the URL would be:</p>
+    <pre>http://yourserverhere/calendar/index.php</pre>
+ <p>If you have not previously configured your database settings,
+  you will be automatically redirected to a web page for
+  configuring your database settings. After you have configured the database, 
+  use the URL again to access WebCalendar.</p>
+    <p>If you have configured your web server to use <tt>index.php</tt> as the
+  default index page for a directory, you can omit that from the URL.
+  On a single-user system, your browser should be redirected to week.php
+  initially. On a multi-user system, your browser should be redirected to login.php
+  so that you can login.</p>
+ <p><span class="tip">TIP</span> On a multi-user system, the only user account created
+ during installation has the username of "admin" and a password of "admin". You should create 
+ a new admin account and delete this one for security reasons.</p>
+<div class="top"><a href="#" target="_top">↑ top</a></div>
+<hr />
+
+<a name="users"></a>
+ <h2>Creating Users</h2>
+ <p>After logging in as an admin user (the initial username is "admin" with
+  password "admin"), you will see a common set of links at the bottom
+  of each page.  Follow these steps to create a new user:</p>
+ <ol>
+  <li>Login to WebCalendar as an admin user</li>
+  <li>Click on the "Admin" link at the bottom of any WebCalendar page</li>
+  <li>Click on the "Users" button</li>
+  <li>Click on the "Add New User" link</li>
+  <li>Fill out the form with details for the new user (email address is optional)</li>
+  <li>Click on the "Save" button</li>
+ </ol>
+ <p><span class="tip">TIP</span> On a single-user system, you do not need to create any users.</p>
+ <p><span class="tip">TIP</span> For an event calendar, you do not need to create a user for the "public user".</p>
+<div class="top"><a href="#" target="_top">↑ top</a></div>
+<hr />
+
+<a name="reminders"></a>
+ <h2>Setting Up Email Reminders</h2>
+ <p>PHP does not come with a utility for executing time-based jobs.
+  So, in order to check periodically for email reminders, a shell
+  script was written in PHP.  You will need two things to get this working:</p>
+ <ol>
+  <li>You should have a version of PHP built as a CGI (so that you can run
+    php from the command line).  This does not mean you must build all
+    of PHP as a CGI.  You can still build PHP as a module for your web
+  server and then build the CGI-based PHP later.<br />
+    <span class="note">Note:</span> Many Linux distributions and some Windows LAMP packages
+    come with the PHP built for CGI.</li>
+  <li>You must setup cron (on Linux/UNIX) or something like cron for Windows
+  to run the <tt>send_reminders.php</tt> script periodically.</li>
+ </ol>
+ <p>Building PHP as a CGI is outside the scope of these instructions.  But,
+  if you read the PHP instructions, you'll see that the default build
+  settings will build the CGI-based PHP.  If you really can't do this
+  (perhaps you don't have permission to install anything new on the
+  system), skip down a couple of paragraphs to an alternate solution
+  that does not require PHP CGI.</p>
+ <p>For Linux/UNIX users, add the following line to the crontab entry of
+  a user.  (This would be the same user that the web server
+  process runs as.)</p>
+ <pre><tt>1 * * * * cd /some/directory/webcalendar/tools; ./send_reminders.php</tt></pre>
+    <p>Of course, replace the directory location to wherever the
+  <tt>send_reminders.php</tt> file can be found.  If you moved this out of the
+  tools directory (which is recommended for security reasons),
+  be sure to update <tt>send_reminders.php</tt> since it needs
+  to know where to find other WebCalendar files.</p>
+    <p>If you cannot setup PHP as a CGI or have no idea how, you can leave
+  <tt>send_reminders.php</tt> in its current location and access it via a URL.
+  IMHO, this is not the best choice, but it still works.  Setup a cron
+  job to access the URL.  For Linux/UNIX users, add the following line to
+  the crontab entry of a user.</p>
+ <pre><tt>1 * * * * wget http://yourserverhere/webcalendardirectoryhere/tools/send_reminders.php > /dev/null</tt></pre>
+  <p>You should test this from the command line first to make sure your setup is 
+  correct. If you do not have <tt>wget</tt> installed on your system, you can use 
+  any tool (lynx, perl script, etc.) that is capable of making an HTTP request for this.</p>
+<div class="top"><a href="#" target="_top">↑ top</a></div>
+<hr />
+
+<a name="systemsettings"></a>
+ <h2>System Settings</h2>
+ <p>System Settings allows the administrator to control what features are available to users 
+ as well as default values for certain features.</p>
+ <p>Many of these settings can be overridden by users in their Preferences (such as color).</p>
+ <h3>Settings</h3>
+ <dl>
+  <dt>Application Name</dt>
+  <dd>Specifies the document title (typically displayed in the window title bar 
+  of most browsers)</dd>
+  <dt>Server URL</dt>
+  <dd>Specifies the base URL of the calendar. This information is needed to 
+  accurately include URLs in email messages (Notifications and Reminders).</dd>
+  <dt>Language</dt>
+   <dd>Specifies the default language setting for all users.</dd>
+  <dt>Fonts</dt>
+   <dd>Specifies your preferred font.  Multiple font names should be comma-separated.</dd>
+  <dt>Preferred View</dt>
+   <dd>Specify if users should see the day, week, month, or year after loggin in.</dd>
+  <dt>Display weekends in view</dt>
+  <dd>Specifies default setting for if Saturdays and Sundays should appear in the 
+  calendar when viewing a month or week</dd>
+  <dt>Date format</dt>
+   <dd>Specifies the default format for displaying dates</dd>
+  <dt>Time format</dt>
+   <dd>Specifies the default time format as either 12-hour (3:45pm) or 24-hour (15:14)</dd>
+  <dt>Time interval</dt>
+  <dd>Specify the default number of minutes each time block represents in the day and 
+  week display</dd>
+  <dt>Auto-referesh calendars</dt>
+  <dd>If set to "yes," the day, week, and month pages will automatically 
+  reload after a specified duration</dd>
+  <dt>Auto-refresh time</dt>
+  <dd>Specifies how long to wait before the auto-refresh should force a page 
+  to be reloaded</dd>
+  <dt>Display unapproved</dt>
+  <dd>Specifies whether events that have been added to a calendar but not yet 
+  approved should display on the calendar (in a different color)</dd>
+  <dt>Display week number</dt>
+   <dd>Specifies whether the week number should be displayed in month and week views</dd>
+  <dt>Week starts on</dt>
+   <dd>Specifies if week start on Sunday or Monday</dd>
+  <dt>Work hours</dt>
+   <dd>Specifies the default time range to display in day and week views</dd>
+  <dt>Disable Priority field</dt>
+   <dd>If enabled, the Priority field will not be used</dd>
+  <dt>Disable Access field</dt>
+   <dd>If enabled, the Access field will not be used</dd>
+  <dt>Disable Participants field</dt>
+  <dd>If enabled, the Participants field will not be used, and users will not be 
+  able to add events to any calendar other than their own.</dd>
+  <dt>Disable Repeating field</dt>
+   <dd>If enabled, users will not be able to create repeating events</dd>
+  <dt>Allow viewing other user's calendars</dt>
+   <dd>If enabled, users will be able to view the calendar of another user</dd>
+  <dt>Allow public access</dt>
+  <dd>If enabled, anonymous users will be able to view the public access 
+  calendar without logging in.</dd>
+  <dt>Public access can view other users</dt>
+   <dd>If enabled, anonymous users will be able to view the calendars of other users</dd>
+  <dt>Public access can add events</dt>
+   <dd>If enabled, anonymous users will be able to submit new events.</dd>
+  <dt>Public access new events require approval</dt>
+  <dd>If enabled, events submitted to the public access calendar (by anonymous 
+  users) will require approval by an admin user.  If not enabled, then new events 
+  will appear on the public access calendar as soon as they are submitted.</dd>
+  <dt>Include add event link in views</dt>
+  <dd>If enabled, Views will include a link to quickly add events to the 
+  specified user's calendar.</dd>
+  <dt>Allow external users</dt>
+  <dd>If enabled, the create/edit event page will contain a text area to include 
+  the names (and optional email address) of event participants that are not calendar users.</dd>
+  <dt>External users can receive email notifications</dt>
+  <dd>If enabled, event participants entered into the External Participants 
+  area will receive email notifications at the same time as calendar users (if an email 
+  address was specified for the Exernal Participant).</dd>
+  <dt>External users can receive email reminders</dt>
+  <dd>If enabled, event participants entered into the External Participants 
+  area will receive email reminders at the same time as calendar users (if an email 
+  address was specified for the Exernal Participant).</dd>
+  <dt>Remember last login</dt>
+   <dd>If enabled, when a returning calendar user reaches the login page, their login name will be pre-filled with the last login username that they entered.  (The password field will still be blank.)</dd>
+  <dt>Check for event conflicts</dt>
+   <dd>Specifies if the system should check for scheduling conflicts when a user adds or updates an event.</dd>
+  <dt>Conflict checking months</dt>
+   <dd>If conflict checking is enabled, this specifies how many months past the initial date the system will check for conflicts when a user adds or updates a repeating event.</dd>
+  <dt>Allow users to override conflicts</dt>
+   <dd>If enabled, users will be warned when there is an event conflict and be presented with the option of scheduling the event anyhow.</dd>
+  <dt>Limit number of timed events per day</dt>
+   <dd>If enabled, users can can be limited to a specific number of timed events per day</dd>
+  <dt>Maximum timed events per day</dt>
+   <dd>Specifies that maximum number of events that can be scheduled in one day of any one user.</dd>
+ </dl>
+ <h3>Groups</h3>
+ <dl>
+  <dt>Groups enabled</dt>
+   <dd>Specifies if group features should be enabled</dd>
+  <dt>User sees only his group</dt>
+   <dd>If enabled, users will be unaware of any users that are not in the same group as the user.</dd>
+ </dl>
+ <h3>Categories</h3>
+ <dl>
+  <dt>Cagtegoies enabled</dt>
+   <dd>Specifies if category features should be enabled</dd>
+ </dl>
+ <h3>Email</h3>
+ <dl>
+  <dt>Email enabled</dt>
+   <dd>Specifies if email functionality should be enabled.  If set to "No," then no email messages will be sent at any time.</dd>
+  <dt>Default sender address</dt>
+   <dd>Specifies the email originator to use when the system sends out email Notifications and Reminders</dd>
+  <dt>Event reminders</dt>
+     <dd>Specifies if email reminders for events that include a reminder should be sent</dd>
+  <dt>Events added to my calendar</dt>
+     <dd>Specifies if the system should send email when an event is added</dd>
+  <dt>Events updated on my calendar</dt>
+     <dd>Specifies if the system should send email when an event is updated</dd>
+  <dt>Events removed from my calendar</dt>
+     <dd>Specifies if the system should send email when an event is deleted</dd>
+  <dt>Event rejected by participant</dt>
+     <dd>Specifies if the system should send email when a participant to an event rejects the event</dd>
+ </dl>
+ <h3>Colors</h3>
+ <dl>
+  <dt>Allow user to customize colors</dt>
+   <dd>Specifies whether color settings should be available to users in their Preferences</dd>
+  <dt>Document background</dt>
+     <dd>Specifies the background color of all pages</dd>
+  <dt>Document title</dt>
+     <dd>Specifies the color of page title on each page</dd>
+  <dt>Document text</dt>
+     <dd>Specifies the default text color on each page</dd>
+  <dt>Table grid color</dt>
+     <dd>Specifies color of the lines that make HTML table grids on each page</dd>
+  <dt>Table header background</dt>
+     <dd>Specifies the default background for the heading of any HTML table</dd>
+  <dt>Table header text</dt>
+     <dd>Specifies the default text color for the heading of any HTML table</dd>
+  <dt>Table cell background</dt>
+     <dd>Specifies the background color for table cells</dd>
+  <dt>Table cell background for current day</dt>
+     <dd>Specifies the background color for the table cell containing the current date</dd>
+  <dt>Table cell background for weekend</dt>
+   <dd>Specifies the background color for table cells that represent a Saturday or Sunday</dd>
+  <dt>Event popup background</dt>
+   <dd>Specifies the background color of event popup areas</dd>
+  <dt>Event popup text</dt>
+   <dd>Specifies the text color of event popup areas</dd>
+ </dl>
+<div class="top"><a href="#" target="_top">↑ top</a></div>
+<hr />
+
+<a name="siteextras"></a>
+ <h2>Custom Event Fields</h2>
+ <p>You may want to customize the event-specific fields found in
+  the <tt>includes/site_extras.php</tt> field.
+  If this is your first time using the calendar, you can skip
+  this step and come back later since this step
+  is <i>optional</i>.</p>
+ <p>You can use this feature to add extra
+  fields to your calendar events.  For example, you can add a URL,
+  a contact email address, or a location.</p>
+ <p>By default, this file is configured with
+  a single reminder field that allows the user to specify how long
+  before the event the reminder should be sent.</p>
+ <p><span class="tip">TIP</span> See <a href="#reminders">instructions</a> on setting
+  up reminders to enable sending of reminders.</p>
+ <p>When defining a new custom field, the following types listed below
+  are available. "Arg 1" and "Arg 2" have different meaning depending on the type
+  of field.  In some cases, "Arg 1" and "Arg 2" are not used.</p>
+ <center>
+  <table style="width: 100%;">
+   <tr><th>
+    Type</th><th>
+    Description</th><th>
+    Arg 1</th><th>
+    Arg 2
+   </th></tr>
+   <tr><td>
+    <tt>EXTRA_TEXT</tt></td><td>
+    Allows the user to enter a single line of text</td><td>
+    Specifies the size of the text form element as it would appear in the 
+    following ("NN" would be replaced with Arg 1):<br />
+       <tt><input size="NN" ...</tt></td><td>
+    N/A
+   </td></tr>
+   <tr><td>
+    <tt>EXTRA_MULTILINETEXT</tt></td><td>
+    Allows the user to enter multiple lines of text</td><td>
+    Specifies how many characters wide the textform element should be as it 
+    would appear in the following ("NN" would be replaced with Arg 1):<br />
+       <tt><textarea cols="NN" ...</tt></td><td>
+    Specifies how many lines long the textform element should be as it would 
+    appear in the following ("NN" would be replaced with Arg 1):<br />
+       <tt><textarea rows="NN" ...</tt>
+   </td></tr>
+   <tr><td>
+    <tt>EXTRA_URL</tt></td><td>
+    Allows the user to enter a single line of text and will be displayed as a 
+    link when viewed</td><td>
+    N/A</td><td>
+    N/A
+   </td></tr>
+   <tr><td>
+    <tt>EXTRA_DATE</tt></td><td>
+    Allows the user to select a date using the standard date selection form 
+    elements</td><td>
+    N/A</td><td>
+    N/A
+   </td></tr>
+   <tr><td>
+    <tt>EXTRA_EMAIL</tt></td><td>
+    Allows the user to enter a single line of text and will be displayed as 
+    a mailto URL link</td><td>
+    N/A</td><td>
+    N/A
+   </td></tr>
+   <tr><td>
+    <tt>EXTRA_REMINDER</tt></td><td>
+    Allows the user to specify if a reminder should be sent out for 
+    the event</td><td>
+    Specifies how many minutes before the event that the reminder 
+    should be sent. </td><td>
+    Specifies other reminder-specific options. The following options are available:
+     <ul>
+      <li><tt>$EXTRA_REMINDER_WITH_DATE</tt></li>
+      <li><tt>$EXTRA_REMINDER_WITH_OFFSET</tt></li>
+      <li><tt>$EXTRA_REMINDER_DEFAULT_YES</tt></li>
+     </ul>
+    If more than one option is needed, they should be or-ed together with 
+    the <tt>|</tt> character.
+   </td></tr>
+   <tr><td>
+    <tt>EXTRA_REMINDER_DATE</tt></td><td>
+    Allows the user to specify if a reminder should be sent out for the event 
+    and and what time it should be sent</td><td>
+    Specifies the default for how many minutes before the event that the 
+    reminder should be sent. The user can override this when they create/edit 
+    the event.</td><td>
+    Specifies other reminder-specific options. The following options are available:
+     <ul>
+      <li><tt>$EXTRA_REMINDER_WITH_DATE</tt></li>
+      <li><tt>$EXTRA_REMINDER_WITH_OFFSET</tt></li>
+      <li><tt>$EXTRA_REMINDER_DEFAULT_YES</tt></li>
+        </ul>
+    If more than one option is needed, they should be or-ed together with 
+    the <tt>|</tt> character.
+   </td></tr>
+   <tr><td>
+    <tt>EXTRA_SELECTION_LIST</tt></td><td>
+    Presents the user with a selection list (single selection) to choose from</td><td>
+    Specifies the list of available options using the PHP <tt>array</tt> 
+    function</td><td>
+    N/A
+   </td></tr>
+  </table>
+ </center>
+<div class="top"><a href="#" target="_top">↑ top</a></div>
+<hr />
+
+<a name="faq"></a>
+ <h2>Frequently Asked Questions</h2>
+ <dl>
+<!-- cek: leave these comments here... extractfaqs.pl looks for them -->
+<!-- START FAQ: Installation/Setup -->
+  <dt>How do I setup PHP, MySQL and Apache on Windows?</dt>
+   <dd>The easiest way to do this is to try one of the prepackaged bundles that will install all of these for you:
+    <ul>
+   <li><a href="http://www.foxserv.net/">FoxServ</a> <a href="http://www.foxserv.net" title="Open in new window" target="_new"><img src="newwin.gif" alt="new" class="newwin" /></a></li>
+   <li><a href="http://www.sokkit.net/">Sokkit</a> <a href="http://www.sokkit.net" title="Open in new window" target="_new"><img src="newwin.gif" alt="new" class="newwin" /></a> (formlery PHPTriad)</li>
+    </ul>
+  </dd>
+ <dt>How do I setup PHP, MySQL and Apache on UNIX/Linux?</dt>
+  <dd>There are many online instructions on how to do this. Here are a few:
+    <ul>
+   <li><a href="http://www.onlamp.com/pub/a/php/2000/11/17/php_admin.html">ONLamp.com: Basic Installtion of PHP on a Unix System</a> <a href="http://www.onlamp.com/pub/a/php/2000/11/17/php_admin.html" title="Open in new window" target="_new"><img src="newwin.gif" alt="new" class="newwin" /></a></li>
+   <li><a href="http://www.devshed.com/Server_Side/PHP/SoothinglySeamless/">Developer Shed: The Soothingly Seamless Setup of Apache, SSL, MySQL and PHP</a> <a href="http://www.devshed.com/Server_Side/PHP/SoothinglySeamless/" title="Open in new window" target="_new"><img src="newwin.gif" alt="new" class="newwin" /></a></li>
+   <li><a href="http://www.linuxhelp.net/guides/lamp/">Linux Help: LAMP Guide</a> <a href="http://www.linuxhelp.net/guides/lamp/" title="Open in new window" target="_new"><img src="newwin.gif" alt="new" class="newwin" /></a></li>
+   <li><a href="http://www.php.net/manual/en/installation.php">PHP.net</a> <a href="http://www.php.net/manual/en/installation.php" title="Open in new window" target="_new"><img src="newwin.gif" alt="new" class="newwin" /></a></li>
+    </ul>
+  </dd>
+ <dt>I've finished the install.  What is the login to WebCalendar?</dt>
+  <dd>After the initial creation of the database tables, there will
+    be a single user account created with the username "admin" and
+    the password set to "admin" as well.
+    <br /><span class="note">Note:</span> This account is intended to get your started.
+    You should create a new admin account and delete this one.</dd>
+ <dt><a name="samplepublic">I want to use WebCalendar as an events calendar for
+    my organization.  How do I set it up to do this?</a></dt>
+  <dd>You will want to setup WebCalendar to use public access.
+    <ol>
+    <li>Setup your <tt>settings.php</tt> file as a multi-user
+      system (see <a href="#appsetup">instructions</a>).</li>
+    <li>In System Settings, set "Allow public access" to "Yes."</li>
+    <li>If you want people to be able to submit new events
+      through public access, set "Public access can add events"
+      to "Yes."</li>
+    <li>If you set "Public access can add events" to "Yes",
+      set the setting for "Public access new events
+      require approval" to your liking.  If you set this to "Yes,"
+      an admin user will need to approve any new events before
+      they will appear on the public access calendar.</li>
+    <li>Login using one of the accounts you have setup.
+       Add a new event, and select "Public User" as one of the
+       participants.</li>
+    <li>If you have enabled "Require event approvals" in your
+       System Settings, then you will need to approve the new
+       event.  Choose the "Unapproved Events" at the bottom
+       of any page (you must be an admin user to access this).
+       You will be presented with a list of unapproved events
+       (for both the current user and for the Public User account).
+       Approve the new event for the Public User.</li>
+    <li>Go to the Login page.  You will see a "Access public calendar"
+       link that will bring you to the calendar for public access.</li>
+    <li>By default, the index.php page should send users to
+       the public calendar.</li>
+    </ol>
+  </dd>
+
+ <dt>How can I add holidays to the calendar?</dt>
+ <dd>There is no built-in support for holidays because it is
+ not necessary.  You can add holidays into WebCalendar by importing
+ one of the many iCal holiday files that are freely available.
+ A good resource for free iCal files is
+ <a href="http://www.icalshare.com">iCalShare
+        <img src="newwin.gif" alt="new" class="newwin" /></a>.
+ For example, the U.S. holiday ics file can be downloaded from:
+ <blockquote>
+ <a href="http://icalshare.com/article.php?story=20020912105939521">http://icalshare.com/article.php?story=20020912105939521
+        <img src="newwin.gif" alt="new" class="newwin" /></a>
+ </blockquote>
+ If you don't want each individual user to have to import
+ the holiday calendar, you can use nonuser calendars.
+ First, make sure nonuser calendars are enabled in your
+ system settings.  Then, from Admin->Users, you can
+ access nonuser calendars.  Create a new nonuser calendar
+ (such as "usholidays").  Then, notify your users that they
+ can add this nonuser calendar as a layer to their own
+ calendar in order to see the holidays.
+ </dd>
+
+ <dt>Why are deleted events still present in the database?</dt>
+  <dd>When you delete an event from your calendar, it is not
+    deleted from the database.  Instead, it is marked as deleted.
+    This allows the system administrator access to information
+    even after it is deleted.</dd>
+ <dt>Can I setup more than one public calendar?</dt>
+  <dd>You cannot directly setup two public calendars. However,
+    there are two options for emulating this type of functionality:
+    <ul>
+    <li>You can <a href="WebCalendar-UserManual.html#categories">create global categories</a> and point users to the calendar with only a certain category displayed.</li>
+    <li>You can setup multiple NonUser calendars and enable
+        public access viewing of other users' calendars.
+        You can then link directly to the calendar of one of
+        the NonUser calendars, or you can 
+        <a href="WebCalendar-UserManual.html#views">setup a view</a>
+        that contains the calendar of one or more of the NonUser calendars.</li>
+    </ul>
+    </dd>
+ <dt>How do I change the title "Public Access" at the top of
+ the calendar?</dt>
+  <dd>In the file <tt>translations/English-US.txt</tt>,
+  change the line that says "Public Access" to what you want
+  it to say on the right side.<br/><br/>Example: 
+  <pre>Public Access: Foobar Event Calendar</pre>
+  </dd>
+ <dt>Can I embed WebCalendar as a component on another web page?</dt>
+  <dd>WebCalendar is meant to be run as a standalone web application.
+    You can customize the appearance of WebCalendar to match your existing
+    site.
+    To do this, In System Settings, set both "Custom header" and
+  "Custom trailer" to "Yes" and press the "Edit" button to enter the
+    header and trailer content.
+    <br />
+    If you are looking to just include a list of upcoming events in one
+    of your web pages, you can use the <tt>upcoming.php</tt> page in
+    WebCalendar to do this.  Edit the top of this file to configure options.
+    (These settings will likely move into System Settings in subsequent release.)
+    You can then use an <tt>iframe</tt> elsewhere on your web site as
+    in the example below:
+    <pre><iframe height="250" width="300" scrolling="yes" src="upcoming.php"></iframe></pre>
+    Include this HTML anywhere on any of your pages.
+    By default, the events from the public calendar will be loaded (so
+    you must have "Public Access" enabled in System Settings).
+    You can override this with another user's calendar.
+    (See <tt>upcoming.php</tt> for instructions on this.)
+  </dd>
+ <dt>How do I add a new translation?</dt>
+  <dd>
+  It's a fairly simple process.  If you've ever translated a C-based app
+     that used GNU's gettext tool, then you'll have no problem.  The I18N
+     support was based on GNU's <a href="http://www.gnu.org/software/gettext/gettext.html">gettext</a> <a href="http://www.gnu.org/software/gettext/gettext.html" title="Open in new window" target="_new"><img src="newwin.gif" alt="new" class="newwin" /></a>.  Here's what you need to do.
+     <ol>
+     <li>look in the "translations" directory</li>
+     <li>copy the <tt>English-US.txt</tt> file into what you'd like to call your
+       language data file.  (e.g. <tt>cp English-US.txt French.txt</tt>)</li>
+     <li>Now translate all the text to the _right_ of the ":" into the
+       new language.  Do <i>not</i> alter the text to the left of the ":".</li>
+     <li>When you're done making changes, move into the "tools" directory.
+       Run the <tt>check_translation.pl</tt> script on your new data file to make
+       sure you have all the needed translations.
+       (e.g. <tt>perl check_translation.pl French</tt>)</li>
+     <li>Add the new language to both the $languages array and the
+       $browser_languages arrays defined in <tt>includes/config.php</tt>.</li>
+     <li>Test it out... </li>
+  <li>Post a copy of your translation (along with your changes to <tt>includes/config.php</tt>) to the <a href="http://sourceforge.net/tracker/?group_id=3870&atid=303870">SourceForge Patches</a> <a href="http://sourceforge.net/tracker/?group_id=3870&atid=303870" title="Open in new window" target="_new"><img src="newwin.gif" alt="new" class="newwin" /></a> for WebCalendar.</li>
+     </ol>
+  </dd>
+ <dt>How do I update an existing translation?</dt>
+  <dd>Just open up the translation file in the <tt>translations</tt> directory
+     with your favorite text editor (like vi, vim, emacs, pico, Notepad, etc.).
+     In particular look for places where missing translations are indicated.
+     All missing translations should be marked with a
+  "<< MISSING >>" note.
+  and typically the English version of the translation will also be included on the following line (as in the example below):
+    <pre># << MISSING >>
+# Edit:
+#</pre><br />
+  For some text, an abberviation may be used rather than the English text.
+  In those cases, the full text will be noted as in the following example:
+  <pre># << MISSING >>
+# custom-script-help:
+# English text: Allows entry of custom Javascript or stylesheet text that
+# will be inserted into the HTML "head" section of every page.
+#</pre><br />
+     When you're done making changes, move into the <tt>tools</tt> directory.
+       Run the <tt>check_translation.pl</tt> script on your new data file to make
+       sure you have all the needed translations:
+  <pre><tt>perl check_translation.pl French</tt></pre>
+     Post a copy of your translation to the 
+  <a href="http://sourceforge.net/tracker/?group_id=3870&atid=303870">SourceForge Patches</a> <a href="http://sourceforge.net/tracker/?group_id=3870&atid=303870" title="Open in new window" target="_new"><img src="newwin.gif" alt="new" class="newwin" /></a> for WebCalendar.</dd>
+
+<!-- END FAQ -->
+ </dl>
+<div class="top"><a href="#" target="_top">↑ top</a></div>
+<hr />
+
+<a name="trouble"></a>
+ <h2>Troubleshooting</h2>
+    <dl>
+<!-- cek: leave these comments here... extractfaqs.pl looks for them -->
+<!-- START FAQ: Troubleshooting -->
+ <dt>I get error messages about undefined variables when I try to view any page.</dt>
+  <dd>On newer versions of PHP, the default setting of PHP is to display
+    messages when an undefined variable is referenced.  To prevent
+    these messages from being displayed, change the setting of <tt>error_reporting</tt>
+    in your <tt>php.ini</tt> file to be:
+    <pre>error_reporting = E_ALL & ~E_NOTICE</pre>
+    Alternately, you can disable any error messages from being displayed
+    in the browser and have them logged to a file.  (See the comments
+    included in the <tt>php.ini</tt> file for instructions on how to do this.)</dd>
+ <dt>I get errors when trying to add an event that contains a single quotation.</dt>
+  <dd>WebCalendar is designed to work with PHP's
+  <tt>magic_quotes_gpc</tt> feature (configured in <tt>php.ini</tt>).
+  If you do not have this enabled (<tt>On</tt> in <tt>php.ini</tt>),
+  you may get errors when adding events.
+  In WebCalendar version 0.9.43 or later, you will always get an error
+  message telling you to update <tt>php.ini</tt> if <tt>magic_quotes_gpc</tt>
+  is set to <tt>Off</tt>.
+  <br/><br/>
+  <span class="tip">TIP</span> If you are using Apache
+  as your web server and if you cannot or do not want to enable
+  <tt>magic_quotes_gpc</tt> for your entire site, you can enable
+  it just for WebCalendar.
+  Create a <tt>.htaccess</tt> file in the toplevel WebCalendar
+  directory that contains a single line:
+  <pre>php_value magic_quotes_gpc 1</pre>
+  <p>(For this to work with Apache, you must have the Apache
+  <tt>AllowOverride All</tt> directive enabled for the directory
+  where WebCalendar is installed.
+  Additionally, PHP must be running as an Apache module, not
+  a CGI.)</p>
+  <br />
+  <span class="note">Note for Oracle and PostgreSQL:</span> You must also change the value of
+  <tt>magic_quotes_sybase</tt> to <tt>On</tt> within the <tt>php.ini</tt>
+  settings.</dd>
+ <dt>I get an error message from PHP saying "Call to undefined function: ..."</dt>
+  <dd>This tells you that your version of PHP is missing something that
+    WebCalendar needs.  If the function mentioned is a database login
+  function (<em>ociplogin</em>, <em>mysql_pconnect</em>, <em>ibase_connect</em>, <em>pg_pconnect</em>), 
+  then you probably do not have the needed database support for your database 
+  compiled into PHP.
+    If the function is not a database connect call, then check the
+    <a href="http://www.php.net/manual/en/">PHP manual</a> <a href="http://www.php.net/manual/en/" title="Open in new window" target="_new"><img src="newwin.gif" alt="new" class="newwin" /></a> 
+    to see if the function requires a specific version of PHP.  You
+    may have an out-dated version of PHP that requires upgrading.</dd>
+ <dt>When I try and view certain pages, nothing happens for 30 seconds, then I get a time-out error.</dt>
+  <dd>On slower or very busy servers, it can take some time for the server
+    to get all the events.  Most PHP installations have a built-in timeout
+    out of 30 seconds and will interrupt any request that takes longer than
+    that.  This is most likely to happen on the year-long custom report or
+    on the month view when layers are being used.  If you have access,
+    you can increase the time-out value for PHP in the <tt>php.ini</tt>
+    file by changing the setting of the <tt>max_execution_time</tt> setting.</dd>
+ <dt>I get an error message that says "Can't connect to local MySQL server through socket '/tmp/mysql.sock'."</dt>
+  <dd>This is a PHP/MySQL configuration issue. The value of <tt>mysql.default_socket</tt>
+  in your <tt>php.ini</tt> file must match the value of <tt>socket</tt> in your 
+  <tt>my.cnf</tt> file. Edit the <tt>php.ini</tt> file to fix this problem.</dd>
+ <dt>I am not receiving any email messages from WebCalendar.</dt>
+  <dd>WebCalendar sends two types of email messages:
+    Notifications<a href="#g_notification">*</a> and Reminders<a href="#g_reminder">*</a>. 
+  Check the following if you are not receiving any email:
+    <ol>
+   <li>You have defined a valid SMTP server in your PHP configuration file 
+    <tt>php.ini</tt>.  (The setting is "SMTP" in the "mail_function" section.)</li>
+   <li>In WebCalendar's System Settings, you have set the "Email Enabled" setting to "Yes".</li>
+   <li>In WebCalendar's System Settings, make sure you have the "Default sender address" 
+   to something.
+   <br /><span class="note">Note:</span>
+          Some mail system will reject mail that has a "From" address
+          that is a different domain from the originating SMTP server.
+          So, if your SMTP server is smtp.mydomain.com and your "Default sender address" 
+   is calendar at someotherdomain.com, some mail systems may bounce the mail back.</li>
+       <li>For a Notification, make sure you have the type of Notification
+           set to "Yes" in the user's Preferences.</li>
+       <li>For a Reminder:
+    <ul>
+            <li>Make sure you have "Event reminders" set to "Yes" in the user's Preferences.</li>
+     <li>Make sure you have <a href="#reminders">setup a cron job</a> to periodically 
+      run the <tt>send_reminders.php</tt> script.</li>
+    </ul>
+   </li>
+    </ol>
+  </dd>
+ <dt>Some of the pages are displaying text in English rather than <insert your language here></dt>
+  <dd>The translations have been submitted at various points of WebCalendar development. 
+   Some have not been updated to include newer features.</dd>
+ <dt>The text that I entered in the <a href="#siteextras">Custom Event Fields</a> is not being translated 
+  to different languages.</dt>
+  <dd>You will need to add an entry in each of the translation files for any text you add 
+   into the Custom Event Fields.</dd>
+ <dt>How do I get the most recent version of WebCalendar?</dt>
+  <dd>You can download the latest public release from SourceForge's
+  <a href="http://sourceforge.net/project/showfiles.php?group_id=3870">file list for WebCalendar</a> <a href="http://sourceforge.net/project/showfiles.php?group_id=3870" title="Open in new window" target="_new"><img src="newwin.gif" alt="new" class="newwin" /></a>.
+    <br />
+    You can download the latest development code from the CVS server using
+  the <a href="http://sourceforge.net/cvs/?group_id=3870">instructions provided by SourceForge</a> <a href="http://sourceforge.net/cvs/?group_id=3870" title="Open in new window" target="_new"><img src="newwin.gif" alt="new" class="newwin" /></a>.  (You will need a CVS client to do this.)</dd>
+ <dt>How do I install a patch file listed on SourceForge's
+    <a href="http://sourceforge.net/tracker?group_id=3870&atid=303870">list of WebCalendar patches</a> <a href="http://sourceforge.net/tracker?group_id=3870&atid=303870" title="Open in new window" target="_new"><img src="newwin.gif" alt="new" class="newwin" /></a>?</dt>
+  <dd>Most patches are distributed as context diffs.  That means they were produced using the UNIX <tt>diff</tt> command with the <tt>-C</tt> option.  The patches are intended to be used with the <a href="http://www.fsf.org/software/patch/patch.html">GNU patch</a> <a href="http://www.fsf.org/software/patch/patch.html" title="Open in new window" target="_new"><img src="newwin.gif" alt="new" class="newwin" /></a> program. This program is standard on most Linux systems and can be obtained as part of the <a href="http://www.cygwin.com">Cygwin</a> <a href="http://www.cygwin.com" title="Open in new window" target="_new"><img src="newwin.gif" alt="new" class="newwin" /></a> package for Windows. Mac OS X will have the patch program installed if they install the developer tools CD.</dd>
+ <dt>I forgot/lost my admin password.  How can I reset it?</dt>
+  <dd>The easiest way is to admin a new admin user and then use that
+    new user to reset the password for your old admin account.
+    Assuming you have deleted the original 'admin' login, you can use
+    the following SQL to insert a new admin user into the database:
+    <pre>INSERT INTO webcal_user ( cal_login, cal_passwd, cal_lastname,
+cal_firstname, cal_is_admin ) VALUES
+( 'admin', '21232f297a57a5a743894a0e4a801fc3', 'Administrator',
+'Default', 'Y' );</pre>
+    This will add a user with login 'admin' and password 'admin' to the database.
+    If you still have a user named 'admin', then replace 'admin' in the above
+    SQL with a different username.
+  </dd>
+ <dt>I get a database error indicating table <tt>webcal_config</tt> does not exist.</dt>
+  <dd>This is the first table that WebCalendar tries to access, so it 
+   typically means one of the following:
+   <ul>
+    <li>You have not created the database tables as described in the instructions</li>
+    <li>You have the wrong database name specified in your 
+    <tt>includes/settings.php</tt> file</li>
+   </ul>
+  </dd>
+<!-- END FAQ -->
+</dl>
+<div class="top"><a href="#" target="_top">↑ top</a></div>
+<hr />
+
+<a name="help"></a>
+ <h2>Getting Help</h2>
+ <p>Try the Help/Troubleshooting forum for WebCalendar, hosted at SourceForge.net:</p>
+ <pre><a href="https://sourceforge.net/forum/forum.php?forum_id=11588">https://sourceforge.net/forum/forum.php?forum_id=11588</a> <a href="http://sourceforge.net/forum/forum.php?forum_id=11588" title="Open in new window" target="_new"><img src="newwin.gif" alt="new" class="newwin" /></a></pre>
+ <p>If you encounter a bug, please check the 
+  <a href="http://sourceforge.net/tracker/?group_id=3870&atid=103870">list of open and pending bugs</a> <a href="http://sourceforge.net/tracker/?group_id=3870&atid=103870" title="Open in new window" target="_new"><img src="newwin.gif" alt="new" class="newwin" /></a>.
+  If you do <strong>not</strong> see anything similar, submit a new bug.
+ </p>
+<div class="top"><a href="#" target="_top">↑ top</a></div>
+<hr />
+
+<a name="license"></a>
+ <h2>Licensing</h2>
+ <p>WebCalendar is distributed under the open source
+  <a href="http://www.gnu.org/licenses/gpl.html">GNU General Public License</a> <a href="http://www.gnu.org/licenses/gpl.html" title="Open in new window" target="_new"><img src="newwin.gif" alt="new" class="newwin" /></a>.
+  If you have questions about this license, please
+  read their <a href="http://www.gnu.org/licenses/gpl-faq.html">GPL FAQ</a> <a href="http://www.gnu.org/licenses/gpl-faq.html" title="Open in new window" target="_new"><img src="newwin.gif" alt="new" class="newwin" /></a>.
+ </p>
+<div class="top"><a href="#" target="_top">↑ top</a></div>
+<hr />
+
+<a name="glossary"></a>
+ <h2>Glossary</h2>
+ <dl>
+  <dt><a name="g_activitylog">Activity Log</a></dt>
+   <dd>A summary of recent updates to calendar data</dd>
+  <dt><a name="g_assistant">Assistant</a></dt>
+   <dd>A calendar user that has been designated by another calendar user
+    (the Boss) to help manage their calendar</dd>
+  <dt><a name="g_boss">Boss</a></dt>
+   <dd>A calendar user that has designated another calendar user
+    (the Assistant) to help manage his calendar</dd>
+  <dt><a name="g_externaluser">External User</a></dt>
+   <dd>A calendar participant that does not have a calendar user account</dd>
+  <dt><a name="g_group">Group</a></dt>
+   <dd>A mechanism of dividing up a large set of users into smaller sets of users</dd>
+  <dt><a name="g_layer">Layer</a></dt>
+   <dd>A function that allows a user to overlay another user's calendar
+    on top of his own calendar so that the standard day, week and month
+    pages show both his own and the layered user's events</dd>
+  <dt><a name="g_ldap">LDAP</a></dt>
+   <dd>LDAP (Lighweight Directory Access Protocol) is an Internet protocol 
+    used to maintain user directories</dd>
+  <dt><a name="g_mulituser">Multi-User Mode</a></dt>
+   <dd>When WebCalendar is configued in Multi-User Mode,
+    there can be multiple user accounts, each with his
+    own calendar.  Unless Public Access is enalbed, all users 
+    will be required to login before they can access the system.</dd>
+  <dt><a name="g_nis">NIS</a></dt>
+   <dd>NIS (Network Information Service) is a UNIX-based user authentication 
+    system for managing user directories in a network</dd>
+  <dt><a name="g_nonuser">NonUser Calendar</a></dt>
+   <dd>A participant to a calendar event that is not a calendar user.  This is typically used either as a resource (conference room,
+  laptop computer) that needs to be shared or as a shared calendar
+  that other users overlay onto their own calendar using layers (company-wide calendar,
+  holiday calendar, etc.)</dd>
+  <dt><a name="g_notification">Notification</a></dt>
+   <dd>An email message that is sent when an event is added, removed
+    or updated in the user's calendar by another user</dd>
+  <dt><a name="g_preferredview">Preferred View</a></dt>
+   <dd>The standard page (day, week, month or year) that will
+    be presented to the user after logging in
+    (set in user <a href="#pref">Preferences</a>)</dd>
+  <dt><a name="g_preferredview">Public Access</a></dt>
+   <dd>A <a href="#systemsettings">System Setting</a> that will allow anonymous users
+    to access the calendar.
+    See the <a href="#samplepublic">simple instructions</a> for
+    setting this up in the <a href="#faq">FAQ section</a>.
+    (Requires WebCalendar to be configued in Multi-User Mode).</dd>
+  <dt><a name="g_reminder">Reminder</a></dt>
+   <dd>An email message that is sent before an event to remind
+    the participant</dd>
+  <dt><a name="g_singleuser">Single-User Mode</a></dt>
+   <dd>When WebCalendar is configued in Single-User Mode,
+    there is no concept of users.  You will be managing a single
+    calendar and no login will be required.
+    Anyone accessing this calendar will have full privileges to
+    view, add, edit and delete all events.</dd>
+  <dt><a name="g_timeinterval">Time Interval</a></dt>
+   <dd>The amount of time each "block" will represent in
+    either the day or week view
+    (set in user <a href="#pref">Preferences</a>)</dd>
+  <dt><a name="g_view">View</a></dt>
+   <dd>A customized page that presents the events of selected users</dd>
+  <dt><a name="g_workhours">Work Hours</a></dt>
+   <dd>The default hours to show in the week and day view where
+    events are displayed in blocks of time (set in
+    user <a href="#pref">Preferences</a>)</dd>
+ </dl>
+<div class="top"><a href="#" target="_top">↑ top</a></div>
+<hr />
+
+<a name="appendixA"></a>
+ <h2>Appendix A: Using phpMyAdmin</h2>
+<p>
+If you have <a href="http://www.phpmyadmin.net">phpMyAdmin</a>
+installed and configured to manage your MySQL database, use the
+following steps to setup WebCalendar.
+(The following information is based on phpMyAdmin version 2.6.1.)
+</p>
+<ol>
+<li>On the initial phpMyAdmin page, under the "MySQL" heading, the first
+  option should be "Create new database."  Enter the name you have
+  chosen for the database and press the "Create" button.
+  (The default database name used by WebCalendar is "intranet".)
+  After pressing the "Create" button, it should say:
+  "Database <your database name here> has been created." </li>
+<li>Click on the home icon (the small house) in the left-side
+   navigation.  This will bring you back to your phpMyAdmin home page.</li>
+<li>(Optional) Create new MySQL user.  If you already have
+    a MySQL login that you would like to use, you can skip this step.</li>
+<li><ul>
+  <li>Click on the "Privileges" link under the "MySQL" heading.</li>
+  <li>Below any existing users listed, click on the link "Add a new User."</li>
+  <li>Fill in the details of your new database user.
+      The default username for WebCalendar is "webcalendar"
+      with a password of "webcal01".
+      Leave the "Host" field set to "Any host".</li>
+  <li>From the list of "Global privileges", be sure to select:
+      SELECT, INSERT, UPDATE, DELETE, FILE, CREATE, ALTER, INDEX, DROP </li>
+  <li>Click on the "Go" button.</li>
+  <li>You should see a page that says "You have added a new user."</li>
+</ul></li>
+<li>Click on the "Databases" tab at the top of the page.</li>
+<li>From the list of databases on the page, click on the name
+    of the database that you created.</li>
+<li>Click on the "SQL" tab at the top of the page.</li>
+<li>At the bottom of the page, there is an area to upload a SQL file.
+    Click on the "Browse" button and select the <tt>tables-mysql.sql</tt>
+    file in the WebCalendar toplevel directory.
+    Then, press the "Go" button.</li>
+<li>The top of the page should say "Your SQL-query has been executed
+    successfully."</li>
+<li>You have now finished creating the WebCalendar database tables.</li>
+
+</ol>
+
+<div class="top"><a href="#" target="_top">↑ top</a></div>
+<hr />
+
+<a name="appendixB"></a>
+<h2>Appendix B: Setting Up Reminders on Windows</h2>
+
+<p>You have two options to choose from when setting up email
+   reminders on a Windows platform.
+   You can either install a cron package for Windows,
+   or you can use the Windows Task Scheduler.
+</p>
+
+<h3>Installing a Cron Package</h3>
+<p>
+If you install a cron package for Windows, you will need to setup
+to setup a cron job.
+(UNIX cron is a tool for used to run tasks as specified times anywhere
+from every minute to once a year.)
+</p>
+<p>
+First, you should create a <tt>sendreminders.bat</tt> file
+that contains a single line:
+</p>
+<pre>C:\your\path\to\php.exe C:\your\path\to\webcalendar\tools\send_reminders.php</pre>
+<p>You can place this <tt>sendreminders.bat</tt> file anywhere on your
+file system.
+</p>
+<p>Next, you need to setup the cron job.
+The crontab entry should look like
+the following (replace with the correct path to your
+newly created <tt>sendreminders.bat</tt> file):
+</p>
+
+<pre>1 * * * * C:\your\path\to\sendreminders.bat</pre>
+
+<p>The "1 * * * *" will tell the cron schedule to run this task
+at 1 after the hour all day long (12:01am, 1:01am, 2:01am, etc.)
+If you only want to run it once per day, you could use:
+</p>
+<pre>1 4 * * * C:\your\path\to\sendreminders.bat</pre>
+<p>This would tell the cron scheduler to run the task at 4:01am
+every day.
+For more information about the syntax of cron, check the documentation
+for the package you have installed or
+view the UNIX man page for crontab
+(like <a href="http://www.rt.com/man/crontab.5.html"
+  target="_blank">this one</a>).
+</p>
+
+
+<p>There are many cron packages for Windows available.
+   Below is a list of packages to choose from.
+   (Note: use at your own risk.  These links are provided
+   for information only.)
+</p>
+
+<ul>
+  <li><a href="http://cronw.sourceforge.net/"
+    target="_blank">CRONw</a> (open source) </li>
+  <li><a href="http://www.gold-software.com/VisualCron-review11507.htm"
+    target="_blank">VisualCron</a> (freeware)</li>
+  <li><a href="http://www.nncron.ru"
+    target="_blank">nnCron</a> (freeware and commercial versions)</li>
+  <li><a href="http://surguy.net/articles/icron.xml"
+    target="_blank">iCron</a> </li>
+  <li><a href="http://p.clark.home.mindspring.com/jcron/index.html"
+    target="_blank">jCron</a> (freeware) </li>
+</ul>
+
+<h3>Using the Windows Task Schedule</h3>
+
+<p>Follow the steps listed below to setup a new task
+   in the Windows Task Scheduler.
+   (These instructions were created with Windows XP Professional.
+   Other versions of Windows might be different.)
+</p>
+
+<ol>
+
+<li>Create a new batch file called <tt>sendreminders.bat</tt>.
+    The contents of this file should be a single line:
+    <pre>C:\your\path\to\php.exe C:\your\path\to\webcalendar\tools\send_reminders.php</pre>
+  </li>
+
+<li>On Windows XP, go to Control Panel</li>
+<li>Double-click on "Scheduled Tasks."
+  This brings up a window that says "Scheduled Task Wizard" </li>
+ 
+<li>Click on "Browse..." </li>
+ 
+<li>Select the location of your newly created
+    <tt>sendreminders.bat</tt> file.</li>
+<li>Click on "Open" </li>
+ 
+<li>Change the name of the task. "WebCalendar Reminders" is a good name.
+  </li>
+ 
+<li>Select how often to perform this task.  Select "Daily." </li>
+<li>Click on "Next" </li>
+ 
+<li>Select the start time, then click "Next".
+    If you are planning on sending out reminders throughout the
+    day, pick a time shortly after midnight. </li>
+ 
+<li> Enter your user password as required. Click on "Next." </li>
+ 
+<li> Select the checkbox "Open advanced properites". </li>
+<li> Click on "Finish." </li>
+ 
+<li> Under the "Schedule" tab, click on "Advanced." </li>
+
+<li> Click on "Repeat Task" and fill in the details of how often
+     the job should run.
+     For example, you can set it to run "every 15 minutes", then
+     click on "until" and set that time to 11:30pm.
+  </li>
+</ol>
+
+
+<div class="top"><a href="#" target="_top">↑ top</a></div>
+<hr />
+
+<a name="appendixC"></a>
+<h2>Appendix C: Displaying Upcoming Events on Your Site</h2>
+
+<p>
+If you would like to list upcoming events somewhere on a page on your site
+(someplace other than the WebCalendar pages),
+you can use the <tt>upcoming.php</tt> page to do this.
+This page is intended to be included in other pages using the
+<tt>iframe</tt> tag.
+</p>
+<p>You may need to modify some of the variables near the top of
+<tt>upcoming.php</tt> with a text editor:
+</p>
+<table border="0" style="margin-left: 20px; margin-right: 20px;">
+
+<tr><td valign="top">$public_must_be_enabled</td>
+  <td>
+      Specifies if Public Access must be enabled in System Settings
+      for this page to be viewed.
+      <br/>Default setting: false
+  </td></tr>
+
+<tr><td valign="top">$display_link</td>
+  <td>
+      Specifies if events should have a link to the URL
+      within WebCalendar to view the event.
+      <br/>Default setting: true
+  </td></tr>
+
+<tr><td valign="top">$link_target</td>
+  <td>
+      Specifies the name of the window that be used for
+      the link target.
+      <br/>Default setting: _top
+  </td></tr>
+
+<tr><td valign="top">$numDays</td>
+  <td>
+      Specifies how many days of events should be listed.
+      <br/>Can override this by passing "num" in within the URL
+           with "upcoming.php?num=60"
+      <br/>Default setting: 30
+  </td></tr>
+
+<tr><td valign="top">$maxEvents</td>
+  <td>
+      Specifies the maximum number of events to list.
+      <br/>Default setting: 10
+  </td></tr>
+
+<tr><td valign="top">$username</td>
+  <td>
+      The login of the calendar to display upcoming events for.
+      If you want to see upcoming events for user login "joe",
+      then you would change this to "joe".
+      <br/>Default setting: __public__ (The public calendar)
+  </td></tr>
+
+<tr><td valign="top">$allow_user_override</td>
+  <td>
+      Specifies whether the calendar user can be specified in the URL
+      (in which case the $username setting will be ignored) using
+      a URL like "upcoming.php?user=joe".
+      <br/>Default setting: true
+  </td></tr>
+
+<tr><td valign="top">$load_layers</td>
+  <td>
+      Specifies if the calendar user's layers should also be
+      included in the upcoming events.
+      <br/>Note: Layers must be enabled in the user's preferences.
+      <br/>Default setting: true
+  </td></tr>
+
+<tr><td valign="top">$cat_id</td>
+  <td>
+      Specifies a category id to filter events on.
+      <br/>Note: Categories must be enabled in System Settings.
+      <br/>Default setting: (empty)
+  </td></tr>
+
+</table>
+
+<p>Below is an example of how you would include <tt>upcoming.php</tt>
+   in a simple HTML page.</p>
+<pre>
+<html><head><title>ACME Home Page</title></head>
+<body>
+<h1>Welcome to the ACME Home Page</h1>
+<h2>News</h2><
+p>No news....</p>
+<h2>Upcoming Events</h2>
+<iframe src="upcoming.php" width="400" height="400" name="califrame" />
+</body>
+</html>
+</pre>
+
+
+<p><span class="tip">TIP</span>
+  The <a href="http://www.w3schools.com/tags/tag_iframe.asp"
+  target="_blank">W3 Schools</a> site provides documentation
+  about the different options that you can use
+  with the <tt>iframe</tt> tag.
+</p>
+
+
+<div class="top"><a href="#" target="_top">↑ top</a></div>
+<hr />
+
+<a name="appendixD"></a>
+<h2>Appendix D: How To Configure For LDAP</h2>
+
+<p>Configuring WebCalendar to use an existing LDAP directory is fairly 
+simple.  It is know to work with OpenLDAP and Novell Edirectory and 
+should work with other systems as well. <span class="note">Note:</span> 
+If you use LDAP, the group functionailty of WebCalendar does not yet work.   
+</p>
+
+<p>To configure WebCalendar to use LDAP, do the following:</p>
+<ol>
+ <li>Configure <tt>settings.php</tt></li>
+ <li>Configure <tt>includes/user-ldap.php</tt></li>
+</ol>
+
+<p>The first step is to set WebCalendar to use LDAP authentication in 
+<tt>settings.php</tt>.  Instructions on to do this can be found in the
+<a href="#appsetup">Application Setup</a> section above.
+In summary, the following should be set:<br />
+<tt>use_http_auth = false</tt><br />
+<tt>user_inc = user-ldap.php</tt><br />
+</p>
+
+<p>The next step is a little more work and involves editing the 
+<tt>includes/user-ldap.php</tt> file with a text editor.  You will have
+to set several configuration variables.  If you don't know what to set 
+the variables to, consult your LDAP system administrator.  Documentation 
+exists for all variables in the file.  Finally, users have gotten LDAP 
+working with OpenLDAP and Novell Edirectory by just changing the 
+following:</p>
+
+<table border="0" style="margin-left: 20px; margin-right: 20px;">
+
+<tr><td valign="top">$ldap_server</td>
+  <td>
+      FQDN or IP address of the LDAP server (or localhost).
+      <br />ex. 'ldapserver.company.com'
+  </td></tr>
+
+<tr><td valign="top">$ldap_base_dn</td>
+  <td>
+      Specifies the base DN used to search for users
+      <br />ex. 'ou=people,dc=company,dc=com' or 'o=context,ou=subcontext'
+  </td></tr>
+
+<tr><td valign="top">$ldap_admin_group_name</td>
+  <td>
+      Specifies a group (complete DN) with admin rights for WebCalendar
+      <br />You might have to create one in LDAP 
+      <br />ex. 'cn=it,ou=group,dc=company,dc=com'
+  </td></tr>
+
+</table>
+
+<h3>Using SSL with LDAP</h3>
+<p>If the LDAP server will accept connections over SSL, simply add 'ldaps://'
+to the beginning of <tt>$ldap_server</tt>.  <br />Example: ldaps://ldapserver.company.com
+</p>
+
+<h3>Using TLS with LDAP</h3>
+<p>If the LDAP server is set up to use TLS, just set <tt>$ldap_start_tls = true</tt>.
+</p>
+
+
+<div class="top"><a href="#" target="_top">↑ top</a></div>
+<hr />
+<p>
+ <a href="http://validator.w3.org/check?uri=referer"><img 
+  src="http://www.w3.org/Icons/valid-xhtml10" 
+  alt="Valid XHTML 1.0!" class="valid" /></a>
+</p>
+</body>
+</html>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/docs/newwin.gif
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/docs/newwin.gif	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/docs/newwin.gif	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,3 @@
+GIF89a  ÷     ÿÿÿ÷÷ÿçïÿ E½ UÎ QÆ M½aÖ YÎ UÆ]ÎaεÏïŒÃÿœËÿ¥Ïÿ­Óÿçóÿï÷ÿ÷ûÿŒÇÿ”ËÿœÏÿ¥Óÿ­×ÿµÛÿ½ßÿÆãÿÎçÿÖëÿÞïÿœÓÿ¥×ÿ­Ûÿµßÿ½ãÿ¥ÛÿÆçÿÎëÿµãÿÖïÿÞóÿÆëÿç÷ÿïûÿ÷ÿÿÿÿÿ                                                   x b û x x <Ôwzb ìÿÿÿ    û  b tù ª›õw³›õwøa $  8c ,ú 0ú     ËDùw b Í‹õwØ 7õwb b     7õw   (       ``           üø     äù ðˆúwˆõwÿÿÿÿ7õwV”öwq”öwàEüwd”öw`b @b b  àýÌù    (ú ðˆúw õwÿÿÿÿd”öw„öw   8   b     W ¸H    tù     tú ðˆúwˆõwÿÿÿÿ7õw!ïçw       -ïçw yÔw  @    ð_  àý  @           b Dú     °ÿ 	Héw˜éwÿÿÿÿ-ïçw\WC b  yÔw  @     às>ºšÄ`úêš»šÄðB¡>ºšÄ    {  $      newwin.gif      û hj    Ôø û 4û ðˆúwxõwÿÿÿÿ:ŠõwÔ¦çw     å¦çw yÔw                DÚD §j |Ü «j {†H ÿÿÿÿhj žÚD §j sÐD hj !ù  / ,      @q _¼€€Áƒ @€40@‘"$(À1'T¨"…I“N¤ Èá„-„Á’E
+(D”(±b!Á‘.fÜØq!£
+`R,y2EÊ•Y2¤ð¤žR©BÔ0ӧŠ`+2 ;
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/edit_entry.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/edit_entry.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/edit_entry.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,820 @@
+<?php
+/*
+ * $Id: edit_entry.php,v 1.91.2.2 2006/03/15 03:14:54 umcesrjones Exp $
+ *
+ * Description:
+ * Presents page to edit/add an event
+ *
+ * Notes:
+ * If htmlarea is installed, users can use WYSIWYG editing.
+ * SysAdmin must enable HTML for event full descriptions.
+ * The htmlarea files should be installed so that the htmlarea.php
+ * file is in ../includes/htmlarea/htmlarea.php
+ * The htmlarea code can be downloaded from:
+ *  http://www.htmlarea.com
+ * TODO
+ * This file will not pass XHTML validation with HTMLArea enabled
+ */
+include_once 'includes/init.php';
+include_once 'includes/site_extras.php';
+
+load_user_categories ();
+
+// Default for using tabs is enabled
+if ( empty ( $EVENT_EDIT_TABS ) )
+  $EVENT_EDIT_TABS = 'Y'; // default
+$useTabs = ( $EVENT_EDIT_TABS == 'Y' );
+
+// make sure this is not a read-only calendar
+$can_edit = false;
+
+// Public access can only add events, not edit.
+if ( $login == "__public__" && $id > 0 ) {
+  $id = 0;
+}
+
+$external_users = "";
+$participants = array ();
+
+if ( $readonly == 'Y' ) {
+  $can_edit = false;
+} else if ( ! empty ( $id ) && $id > 0 ) {
+  // first see who has access to edit this entry
+  if ( $is_admin ) {
+    $can_edit = true;
+  } else {
+    $can_edit = false;
+    if ( $readonly == "N" || $is_admin ) {
+      $sql = "SELECT webcal_entry.cal_id FROM webcal_entry, " .
+        "webcal_entry_user WHERE webcal_entry.cal_id = " .
+        "webcal_entry_user.cal_id AND webcal_entry.cal_id = $id " .
+        "AND (webcal_entry.cal_create_by = '$login' " .
+        "OR webcal_entry_user.cal_login = '$login')";
+      $res = dbi_query ( $sql );
+      if ( $res ) {
+        $row = dbi_fetch_row ( $res );
+        if ( $row && $row[0] > 0 )
+          $can_edit = true;
+        dbi_free_result ( $res );
+      }
+    }
+  }
+  $sql = "SELECT cal_create_by, cal_date, cal_time, cal_mod_date, " .
+    "cal_mod_time, cal_duration, cal_priority, cal_type, cal_access, " .
+    "cal_name, cal_description, cal_group_id FROM webcal_entry WHERE cal_id = " . $id;
+  $res = dbi_query ( $sql );
+  if ( $res ) {
+    $row = dbi_fetch_row ( $res );
+    if ( ! empty ( $override ) && ! empty ( $date ) ) {
+      // Leave $cal_date to what was set in URL with date=YYYYMMDD
+      $cal_date = $date;
+    } else {
+      $cal_date = $row[1];
+    }
+    $create_by = $row[0];
+    if (( $user == $create_by ) && ( $is_assistant || $is_nonuser_admin )) $can_edit = true;
+    
+    $year = (int) ( $cal_date / 10000 );
+    $month = ( $cal_date / 100 ) % 100;
+    $day = $cal_date % 100;
+    $time = $row[2];
+    // test for AllDay event, if so, don't adjust time
+    if ( $time > 0  || ( $time == 0 &&  $row[5] != 1440 ) ) { /* -1 = no time specified */
+      $time += ( ! empty ( $TZ_OFFSET )?$TZ_OFFSET : 0)  * 10000;
+      if ( $time > 240000 ) {
+        $time -= 240000;
+        $gmt = mktime ( 3, 0, 0, $month, $day, $year );
+        $gmt += $ONE_DAY;
+        $month = date ( "m", $gmt );
+        $day = date ( "d", $gmt );
+        $year = date ( "Y", $gmt );
+      } else if ( $time < 0 ) {
+        $time += 240000;
+        $gmt = mktime ( 3, 0, 0, $month, $day, $year );
+        $gmt -= $ONE_DAY;
+        $month = date ( "m", $gmt );
+        $day = date ( "d", $gmt );
+        $year = date ( "Y", $gmt );
+      }
+      // Set alterted date
+      $cal_date = sprintf("%04d%02d%02d",$year,$month,$day);
+    }
+    if ( $time >= 0 ) {
+      $hour = floor($time / 10000);
+      $minute = ( $time / 100 ) % 100;
+      $duration = $row[5];
+    } else {
+      $duration = "";
+      $hour = -1;
+    }
+    $priority = $row[6];
+    $type = $row[7];
+    $access = $row[8];
+    $name = $row[9];
+    $description = $row[10];
+    $parent = $row[11];
+    // check for repeating event info...
+    // but not if we are overriding a single entry of an already repeating
+    // event... confusing, eh?
+    if ( ! empty ( $override ) ) {
+      $rpt_type = "none";
+      $rpt_end = 0;
+      $rpt_end_date = $cal_date;
+      $rpt_freq = 1;
+      $rpt_days = "nnnnnnn";
+      $rpt_sun = $rpt_mon = $rpt_tue = $rpt_wed =
+        $rpt_thu = $rpt_fri = $rpt_sat = false;
+    } else {
+      $res = dbi_query ( "SELECT cal_id, cal_type, cal_end, " .
+        "cal_frequency, cal_days FROM webcal_entry_repeats " .
+        "WHERE cal_id = $id" );
+      if ( $res ) {
+        if ( $row = dbi_fetch_row ( $res ) ) {
+          $rpt_type = $row[1];
+          if ( $row[2] > 0 )
+            $rpt_end = date_to_epoch ( $row[2] );
+          else
+            $rpt_end = 0;
+          $rpt_end_date = $row[2];
+          $rpt_freq = $row[3];
+          $rpt_days = $row[4];
+          $rpt_sun  = ( substr ( $rpt_days, 0, 1 ) == 'y' );
+          $rpt_mon  = ( substr ( $rpt_days, 1, 1 ) == 'y' );
+          $rpt_tue  = ( substr ( $rpt_days, 2, 1 ) == 'y' );
+          $rpt_wed  = ( substr ( $rpt_days, 3, 1 ) == 'y' );
+          $rpt_thu  = ( substr ( $rpt_days, 4, 1 ) == 'y' );
+          $rpt_fri  = ( substr ( $rpt_days, 5, 1 ) == 'y' );
+          $rpt_sat  = ( substr ( $rpt_days, 6, 1 ) == 'y' );
+        }
+      }
+    }
+    
+  }
+  $sql = "SELECT cal_login, cal_category FROM webcal_entry_user WHERE cal_id = $id";
+  $res = dbi_query ( $sql );
+  if ( $res ) {
+    while ( $row = dbi_fetch_row ( $res ) ) {
+      $participants[$row[0]] = 1;
+      if ($login == $row[0]) $cat_id = $row[1];
+      if ( ( $is_assistant  || $is_admin ) && $user == $row[0]) $cat_id = $row[1];
+    }
+  }
+  if ( ! empty ( $allow_external_users ) && $allow_external_users == "Y" ) {
+    $external_users = event_get_external_users ( $id );
+  }
+} else {
+  // New event.
+  $id = 0; // to avoid warnings below about use of undefined var
+  // Anything other then testing for strlen breaks either hour=0 or no hour in URL
+  if ( strlen ( $hour ) ) {
+    $time = $hour * 100;
+  } else {
+    $time = -1;
+    $hour = -1;
+  }
+  if ( ! empty ( $defusers ) ) {
+    $tmp_ar = explode ( ",", $defusers );
+    for ( $i = 0; $i < count ( $tmp_ar ); $i++ ) {
+      $participants[$tmp_ar[$i]] = 1;
+    }
+  }
+  if ( $readonly == "N" ) {
+    // If public, then make sure we can add events
+    if ( $login == '__public__' ) {
+      if ( $public_access_can_add )
+        $can_edit = true;
+    } else {
+      // not public user
+        $can_edit = true;
+    }
+  }
+}
+if ( ! empty ( $year ) && $year )
+  $thisyear = $year;
+if ( ! empty ( $month ) && $month )
+  $thismonth = $month;
+if ( ! empty ( $day ) && $day )
+  $thisday = $day;
+if ( empty ( $rpt_type ) || ! $rpt_type )
+  $rpt_type = "none";
+
+// avoid error for using undefined vars
+if ( ! isset ( $hour ) )
+  $hour = -1;
+if ( empty ( $duration ) )
+  $duration = 0;
+if ( $duration == ( 24 * 60 ) ) {
+  $hour = $minute = $duration = "";
+  $allday = "Y";
+} else
+  $allday = "N";
+if ( empty ( $name ) )
+  $name = "";
+if ( empty ( $description ) )
+  $description = "";
+if ( empty ( $priority ) )
+  $priority = 0;
+if ( empty ( $access ) )
+  $access = "";
+if ( empty ( $rpt_freq ) )
+  $rpt_freq = 0;
+if ( empty ( $rpt_end_date ) )
+  $rpt_end_date = 0;
+
+if ( ( empty ( $year ) || ! $year ) &&
+  ( empty ( $month ) || ! $month ) &&
+  ( ! empty ( $date ) && strlen ( $date ) ) ) {
+  $thisyear = $year = substr ( $date, 0, 4 );
+  $thismonth = $month = substr ( $date, 4, 2 );
+  $thisday = $day = substr ( $date, 6, 2 );
+  $cal_date = $date;
+} else {
+  if ( empty ( $cal_date ) )
+    $cal_date = date ( "Ymd" );
+}
+if ( empty ( $thisyear ) )
+  $thisdate = date ( "Ymd" );
+else {
+  $thisdate = sprintf ( "%04d%02d%02d",
+    empty ( $thisyear ) ? date ( "Y" ) : $thisyear,
+    empty ( $thismonth ) ? date ( "m" ) : $thismonth,
+    empty ( $thisday ) ? date ( "d" ) : $thisday );
+}
+if ( empty ( $cal_date ) || ! $cal_date )
+  $cal_date = $thisdate;
+
+if ( $allow_html_description == "Y" ){
+  // Allow HTML in description
+  // If they have installed the htmlarea widget, make use of it
+  $textareasize = 'rows="15" cols="50"';
+  if ( file_exists ( "includes/htmlarea/htmlarea.php" ) ) {
+    $BodyX = 'onload="initEditor();timetype_handler();rpttype_handler()"';
+    $INC = array ( 'htmlarea/htmlarea.php', 'js/edit_entry.php',
+      'js/visible.php', 'htmlarea/core.php' );
+  } else {
+    // No htmlarea files found...
+    $BodyX = 'onload="timetype_handler();rpttype_handler()"';
+    $INC = array ( 'js/edit_entry.php', 'js/visible.php' );
+  }
+} else {
+  $textareasize = 'rows="5" cols="40"';
+  $BodyX = 'onload="timetype_handler();rpttype_handler()"';
+  $INC = array('js/edit_entry.php','js/visible.php');
+}
+
+print_header ( $INC, '', $BodyX );
+?>
+
+
+<h2><?php if ( $id ) echo translate("Edit Entry"); else echo translate("Add Entry"); ?> <img src="help.gif" alt="<?php etranslate("Help")?>" class="help" onclick="window.open ( 'help_edit_entry.php<?php if ( empty ( $id ) ) echo "?add=1"; ?>', 'cal_help', 'dependent,menubar,scrollbars,height=400,width=400,innerHeight=420,outerWidth=420');" /></h2>
+
+<?php
+ if ( $can_edit ) {
+
+?>
+<form action="edit_entry_handler.php" method="post" name="editentryform">
+
+<?php
+if ( ! empty ( $id ) && ( empty ( $copy ) || $copy != '1' ) ) echo "<input type=\"hidden\" name=\"id\" value=\"$id\" />\n";
+// we need an additional hidden input field
+echo "<input type=\"hidden\" name=\"entry_changed\" value=\"\" />\n";
+
+// are we overriding an entry from a repeating event...
+if ( ! empty ( $override ) ) {
+  echo "<input type=\"hidden\" name=\"override\" value=\"1\" />\n";
+  echo "<input type=\"hidden\" name=\"override_date\" value=\"$cal_date\" />\n";
+}
+// if assistant, need to remember boss = user
+if ( $is_assistant || $is_nonuser_admin || ! empty ( $user ) )
+   echo "<input type=\"hidden\" name=\"user\" value=\"$user\" />\n";
+
+// if has cal_group_id was set, need to send parent = $parent
+if ( ! empty ( $parent ) )
+   echo "<input type=\"hidden\" name=\"parent\" value=\"$parent\" />\n";
+
+?>
+
+<!-- TABS -->
+<?php if ( $useTabs ) { ?>
+<div id="tabs">
+ <span class="tabfor" id="tab_details"><a href="#tabdetails" onclick="return showTab('details')"><?php etranslate("Details") ?></a></span>
+ <?php if ( $disable_participants_field != "Y" ) { ?>
+   <span class="tabbak" id="tab_participants"><a href="#tabparticipants" onclick="return showTab('participants')"><?php etranslate("Participants") ?></a></span>
+ <?php } ?> 
+ <?php if ( $disable_repeating_field != "Y" ) { ?>
+   <span class="tabbak" id="tab_pete"><a href="#tabpete" onclick="return showTab('pete')"><?php etranslate("Repeat") ?></a></span>
+ <?php } ?>
+</div>
+<?php } ?>
+
+<!-- TABS BODY -->
+<?php if ( $useTabs ) { ?>
+<div id="tabscontent">
+ <!-- DETAILS -->
+ <a name="tabdetails"></a>
+ <div id="tabscontent_details">
+<?php } ?>
+  <table style="border-width:0px;">
+   <tr><td style="width:14%;" class="tooltip" title="<?php etooltip("brief-description-help")?>">
+    <label for="entry_brief"><?php etranslate("Brief Description")?>:</label></td><td>
+    <input type="text" name="name" id="entry_brief" size="25" value="<?php 
+     echo htmlspecialchars ( $name );
+    ?>" /></td><td style="width:35%;">
+   </td></tr>
+   <tr><td style="vertical-align:top;" class="tooltip" title="<?php etooltip("full-description-help")?>">
+    <label for="entry_full"><?php etranslate("Full Description")?>:</label></td><td>
+    <textarea name="description" id="entry_full" <?php
+     echo $textareasize;
+    ?>><?php
+     echo htmlspecialchars ( $description );
+    ?></textarea></td><td style="vertical-align:top;">
+
+<?php if (( ! empty ( $categories ) ) || ( $disable_access_field != "Y" ) || 
+         ( $disable_priority_field != "Y" ) ){ // new table for extra fields ?>
+    <table>
+<?php } ?>
+<?php if ( $disable_access_field != "Y" ) { ?>
+      <tr><td class="tooltip" title="<?php etooltip("access-help")?>">
+       <label for="entry_access"><?php etranslate("Access")?>:</label></td><td>
+       <select name="access" id="entry_access">
+        <option value="P"<?php if ( $access == "P" || ! strlen ( $access ) ) echo " selected=\"selected\"";?>><?php etranslate("Public")?></option>
+        <option value="R"<?php if ( $access == "R" ) echo " selected=\"selected\"";?>><?php etranslate("Confidential")?></option>
+       </select>
+       </td></tr>
+<?php } ?>
+<?php if ( $disable_priority_field != "Y" ) { ?>
+     <tr><td class="tooltip" title="<?php etooltip("priority-help")?>">
+      <label for="entry_prio"><?php etranslate("Priority")?>: </label></td><td>
+      <select name="priority" id="entry_prio">
+       <option value="1"<?php if ( $priority == 1 ) echo " selected=\"selected\"";?>><?php etranslate("Low")?></option>
+       <option value="2"<?php if ( $priority == 2 || $priority == 0 ) echo " selected=\"selected\"";?>><?php etranslate("Medium")?></option>
+       <option value="3"<?php if ( $priority == 3 ) echo " selected=\"selected\"";?>><?php etranslate("High")?></option>
+      </select>
+     </td></tr>
+<?php } ?>
+<?php if ( ! empty ( $categories ) ) { ?>
+     <tr><td class="tooltip" title="<?php etooltip("category-help")?>">
+      <label for="entry_categories"><?php etranslate("Category")?>: </label></td><td>
+      <select name="cat_id" id="entry_categories">
+       <option value=""><?php etranslate("None")?></option>
+     <?php
+      foreach( $categories as $K => $V ){
+       echo "       <option value=\"$K\"";
+       if ( $cat_id == $K ) echo " selected=\"selected\"";
+       echo ">$V</option>\n";
+      }
+     ?>
+      </select>
+     </td></tr>
+<?php } //end if (! empty ($categories)) ?>
+<?php if (( ! empty ( $categories ) ) || ( $disable_access_field != "Y" ) || 
+         ( $disable_priority_field != "Y" ) ){ // end the table ?>
+   </table>
+    
+<?php } ?>
+  </td></tr>
+  <tr><td class="tooltip" title="<?php etooltip("date-help")?>">
+   <?php etranslate("Date")?>:</td><td colspan="2">
+   <?php
+    print_date_selection ( "", $cal_date );
+   ?>
+  </td></tr>
+  <tr><td> </td><td colspan="2">
+   <select name="timetype" onchange="timetype_handler()">
+    <option value="U" <?php if ( $allday != "Y" && $hour == -1 ) echo " selected=\"selected\""?>><?php etranslate("Untimed event"); ?></option>
+    <option value="T" <?php if ( $allday != "Y" && $hour >= 0 ) echo " selected=\"selected\""?>><?php etranslate("Timed event"); ?></option>
+    <option value="A" <?php if ( $allday == "Y" ) echo " selected=\"selected\""?>><?php etranslate("All day event"); ?></option>
+   </select>
+  </td></tr>
+  <tr id="timeentrystart"><td class="tooltip" title="<?php etooltip("time-help")?>">
+   <?php echo translate("Time") . ":"; ?></td><td colspan="2">
+<?php
+$h12 = $hour;
+$amsel = " checked=\"checked\""; $pmsel = "";
+if ( $TIME_FORMAT == "12" ) {
+  if ( $h12 < 12 ) {
+    $amsel = " checked=\"checked\""; $pmsel = "";
+  } else {
+    $amsel = ""; $pmsel = " checked=\"checked\"";
+  }
+  $h12 %= 12;
+  if ( $h12 == 0 ) $h12 = 12;
+}
+if ( $time < 0 )
+  $h12 = "";
+?>
+   <input type="text" name="hour" size="2" value="<?php 
+    if ( $time >= 0 && $allday != 'Y' ) echo $h12;
+   ?>" maxlength="2" />:<input type="text" name="minute" size="2" value="<?php 
+    if ( $time >= 0 && $allday != "Y" ) printf ( "%02d", $minute );
+   ?>" maxlength="2" />
+<?php
+if ( $TIME_FORMAT == "12" ) {
+  echo "<label><input type=\"radio\" name=\"ampm\" value=\"am\" $amsel /> " .
+    translate("am") . "</label>\n";
+  echo "<label><input type=\"radio\" name=\"ampm\" value=\"pm\" $pmsel /> " .
+    translate("pm") . "</label>\n";
+}
+?>
+
+<?php
+  $dur_h = (int)( $duration / 60 );
+  $dur_m = $duration % 60;
+
+if ($GLOBALS['TIMED_EVT_LEN'] != 'E') { ?>
+   </td></tr>
+  <tr id="timeentryduration"><td>
+  <span class="tooltip" title="<?php 
+   etooltip("duration-help")
+  ?>"><?php 
+   etranslate("Duration")
+  ?>: </span></td><td colspan="2">
+  <input type="text" name="duration_h" id="duration_h" size="2" maxlength="2" value="<?php 
+   if ( $allday != "Y" ) printf ( "%d", $dur_h );
+  ?>" />:<input type="text" name="duration_m" id="duration_m" size="2" maxlength="2" value="<?php 
+   if ( $allday != "Y" ) 
+    printf ( "%02d", $dur_m );
+  ?>" /> (<label for="duration_h"><?php 
+   echo translate("hours")
+  ?></label>: <label for="duration_m"><?php 
+   echo translate("minutes")
+  ?></label>)
+ </td></tr>
+<?php } else {
+if ( $id ) {
+  $t_h12 = $h12;
+  if ( $TIME_FORMAT == "12" ) {
+    // Convert to a twenty-four hour time scale
+    if ( !empty ( $amsel ) && $t_h12 == 12 )
+      $t_h12 = 0;
+    if ( !empty ( $pmsel ) && $t_h12 < 12 )
+      $t_h12 += 12;
+  } //end 12-hour time format
+
+  // Add duration
+  $endhour = $t_h12 + $dur_h;
+  $endminute = $minute + $dur_m;
+  $endhour = $endhour + (int)( $endminute / 60 );
+  $endminute %= 60;
+
+  if ( $TIME_FORMAT == "12" ) {
+    // Convert back to a standard time format
+    if ( $endhour < 12 ) {
+      $endamsel = " checked=\"checked\""; $endpmsel = "";
+    } else {
+      $endamsel = ""; $endpmsel = " checked=\"checked\"";
+    } //end if ( $endhour < 12 )
+    $endhour %= 12;
+    if ( $endhour == 0 ) $endhour = 12;
+  } //end if ( $TIME_FORMAT == "12" )
+} else {
+  $endhour = $h12;
+  $endminute = $minute;
+  $endamsel = $amsel;
+  $endpmsel = $pmsel;
+} //end if ( $id )
+if ( $allday != "Y" && $hour == -1 ) {
+  $endhour = "";
+  $endminute = "";
+} //end if ( $allday != "Y" && $hour == -1 )
+?>
+ <span id="timeentryend" class="tooltip" title="<?php etooltip("end-time-help")?>"> - 
+  <input type="text" name="endhour" size="2" value="<?php 
+   if ( $allday != "Y" ) echo $endhour;
+  ?>" maxlength="2" />:<input type="text" name="endminute" size="2" value="<?php 
+   if ( $time >= 0 && $allday != "Y" ) printf ( "%02d", $endminute );
+  ?>" maxlength="2" />
+  <?php
+   if ( $TIME_FORMAT == "12" ) {
+    echo "<label><input type=\"radio\" name=\"endampm\" value=\"am\" $endamsel /> " .
+     translate("am") . "</label>\n";
+    echo "<label><input type=\"radio\" name=\"endampm\" value=\"pm\" $endpmsel /> " .
+     translate("pm") . "</label>\n";
+   }
+  ?>
+ </span>
+</td></tr>
+<?php } ?>
+</table>
+<table>
+<?php
+// site-specific extra fields (see site_extras.php)
+// load any site-specific fields and display them
+if ( $id > 0 )
+  $extras = get_site_extra_fields ( $id );
+for ( $i = 0; $i < count ( $site_extras ); $i++ ) {
+  $extra_name = $site_extras[$i][0];
+  $extra_descr = $site_extras[$i][1];
+  $extra_type = $site_extras[$i][2];
+  $extra_arg1 = $site_extras[$i][3];
+  $extra_arg2 = $site_extras[$i][4];
+  //echo "<tr><td>Extra " . $extra_name . " - " . $site_extras[$i][2] . 
+  //  " - " . $extras[$extra_name]['cal_name'] .
+  //  "arg1: $extra_arg1, arg2: $extra_arg2 </td></tr>\n";
+  if ( $extra_type == $EXTRA_MULTILINETEXT )
+    echo "<tr><td style=\"vertical-align:top; font-weight:bold;\"><br />\n";
+  else
+    echo "<tr><td style=\"font-weight:bold;\">";
+  echo translate ( $extra_descr ) .  ":</td><td>\n";
+  if ( $extra_type == $EXTRA_URL ) {
+    echo "<input type=\"text\" size=\"50\" name=\"" . $extra_name .
+      "\" value=\"" . ( empty ( $extras[$extra_name]['cal_data'] ) ?
+      "" : htmlspecialchars ( $extras[$extra_name]['cal_data'] ) ) . "\" />";
+  } else if ( $extra_type == $EXTRA_EMAIL ) {
+    echo "<input type=\"text\" size=\"30\" name=\"" . $extra_name . "\" value=\"" . ( empty ( $extras[$extra_name]['cal_data'] ) ?
+      "" : htmlspecialchars ( $extras[$extra_name]['cal_data'] ) ) . "\" />";
+  } else if ( $extra_type == $EXTRA_DATE ) {
+    if ( ! empty ( $extras[$extra_name]['cal_date'] ) )
+      print_date_selection ( $extra_name, $extras[$extra_name]['cal_date'] );
+    else
+      print_date_selection ( $extra_name, $cal_date );
+  } else if ( $extra_type == $EXTRA_TEXT ) {
+    $size = ( $extra_arg1 > 0 ? $extra_arg1 : 50 );
+    echo "<input type=\"text\" size=\"" . $size . "\" name=\"" . $extra_name .
+      "\" value=\"" . ( empty ( $extras[$extra_name]['cal_data'] ) ?
+      "" : htmlspecialchars ( $extras[$extra_name]['cal_data'] ) ) . "\" />";
+  } else if ( $extra_type == $EXTRA_MULTILINETEXT ) {
+    $cols = ( $extra_arg1 > 0 ? $extra_arg1 : 50 );
+    $rows = ( $extra_arg2 > 0 ? $extra_arg2 : 5 );
+    echo "<textarea rows=\"" . $rows . "\" cols=\"" . $cols . "\" name=\"" . $extra_name . "\">" . ( empty ( $extras[$extra_name]['cal_data'] ) ?
+      "" : htmlspecialchars ( $extras[$extra_name]['cal_data'] ) ) . "</textarea>";
+  } else if ( $extra_type == $EXTRA_USER ) {
+    // show list of calendar users...
+    echo "<select name=\"" . $extra_name . "\">\n";
+    echo "<option value=\"\">None</option>\n";
+    $userlist = get_my_users ();
+    for ( $j = 0; $j < count ( $userlist ); $j++ ) {
+      echo "<option value=\"" . $userlist[$j]['cal_login'] . "\"";
+        if ( ! empty ( $extras[$extra_name]['cal_data'] ) &&
+          $userlist[$j]['cal_login'] == $extras[$extra_name]['cal_data'] )
+          echo " selected=\"selected\"";
+        echo ">" . $userlist[$j]['cal_fullname'] . "</option>\n";
+    }
+    echo "</select>\n";
+  } else if ( $extra_type == $EXTRA_REMINDER ) {
+    $rem_status = 0; // don't send
+    echo "<label><input type=\"radio\" name=\"" . $extra_name . "\" value=\"1\"";
+    if ( empty ( $id ) ) {
+      // adding event... check default
+      if ( ( $extra_arg2 & $EXTRA_REMINDER_DEFAULT_YES ) > 0 )
+        $rem_status = 1;
+    } else {
+      // editing event... check status
+      if ( ! empty ( $extras[$extra_name]['cal_remind'] ) )
+        $rem_status = 1;
+    }
+    if ( $rem_status )
+      echo " checked=\"checked\"";
+    echo " />";
+    etranslate ( "Yes" );
+    echo "</label> <label><input type=\"radio\" name=\"" . $extra_name . "\" value=\"0\"";
+    if ( ! $rem_status )
+      echo " checked=\"checked\"";
+    echo " />";
+    etranslate ( "No" );
+    echo "</label>  ";
+    if ( ( $extra_arg2 & $EXTRA_REMINDER_WITH_DATE ) > 0 ) {
+      if ( ! empty ( $extras[$extra_name]['cal_date'] ) &&
+        $extras[$extra_name]['cal_date'] > 0 )
+        print_date_selection ( $extra_name, $extras[$extra_name]['cal_date'] );
+      else
+        print_date_selection ( $extra_name, $cal_date );
+    } else if ( ( $extra_arg2 & $EXTRA_REMINDER_WITH_OFFSET ) > 0 ) {
+      if ( ! empty ( $extras[$extra_name]['cal_data'] ) )
+        $minutes = $extras[$extra_name]['cal_data'];
+      else
+        $minutes = $extra_arg1;
+      // will be specified in total minutes
+      $d = (int) ( $minutes / ( 24 * 60 ) );
+      $minutes -= ( $d * 24 * 60 );
+      $h = (int) ( $minutes / 60 );
+      $minutes -= ( $h * 60 );
+      echo "<label><input type=\"text\" size=\"2\" name=\"" . $extra_name .
+        "_days\" value=\"$d\" /> " .  translate("days") . "</label> \n";
+      echo "<label><input type=\"text\" size=\"2\" name=\"" . $extra_name .
+        "_hours\" value=\"$h\" /> " .  translate("hours") . "</label> \n";
+      echo "<label><input type=\"text\" size=\"2\" name=\"" . $extra_name .
+        "_minutes\" value=\"$minutes\" /> " .  translate("minutes") . " " . translate("before event") . "</label>";
+    }
+  } else if ( $extra_type == $EXTRA_SELECTLIST ) {
+    // show custom select list.
+    echo "<select name=\"" . $extra_name . "\">\n";
+    if ( is_array ( $extra_arg1 ) ) {
+      for ( $j = 0; $j < count ( $extra_arg1 ); $j++ ) {
+        echo "<option";
+        if ( ! empty ( $extras[$extra_name]['cal_data'] ) &&
+          $extra_arg1[$j] == $extras[$extra_name]['cal_data'] )
+          echo " selected=\"selected\"";
+        echo ">" . $extra_arg1[$j] . "</option>\n";
+      }
+    }
+    echo "</select>\n";
+  }
+  echo "</td></tr>\n";
+}
+// end site-specific extra fields
+?>
+</table>
+<?php if ( $useTabs ) { ?>
+</div>
+<?php } /* $useTabs */ ?>
+
+<!-- PARTICIPANTS -->
+<?php if ( $useTabs ) { ?>
+<a name="tabparticipants"></a>
+<div id="tabscontent_participants">
+<?php } /* $useTabs */ ?>
+<table>
+<?php
+// Only ask for participants if we are multi-user.
+$show_participants = ( $disable_participants_field != "Y" );
+if ( $is_admin )
+  $show_participants = true;
+if ( $login == "__public__" && $public_access_others != "Y" )
+  $show_participants = false;
+
+if ( $single_user == "N" && $show_participants ) {
+  $userlist = get_my_users ();
+  if ($nonuser_enabled == "Y" ) {
+    $nonusers = get_nonuser_cals ();
+    $userlist = ($nonuser_at_top == "Y") ? array_merge($nonusers, $userlist) : array_merge($userlist, $nonusers);
+  }
+  $num_users = 0;
+  $size = 0;
+  $users = "";
+  for ( $i = 0; $i < count ( $userlist ); $i++ ) {
+    $l = $userlist[$i]['cal_login'];
+    $size++;
+    $users .= "<option value=\"" . $l . "\"";
+    if ( $id > 0 ) {
+      if ( ! empty ($participants[$l]) )
+        $users .= " selected=\"selected\"";
+    } else {
+      if ( ! empty ($defusers) ) {
+        // default selection of participants was in the URL
+        if ( ! empty ( $participants[$l] ) )
+          $users .= " selected=\"selected\"";
+      } else {
+        if ( ($l == $login && ! $is_assistant  && ! $is_nonuser_admin) || (! empty ($user) && $l == $user) )
+          $users .= " selected=\"selected\"";
+      }
+      if ( $l == '__public__' &&
+        ! empty ($public_access_default_selected) &&
+         $public_access_default_selected == 'Y' )
+           $users .= " selected=\"selected\"";
+    }
+    $users .= ">" . $userlist[$i]['cal_fullname'] . "</option>\n";
+  }
+
+  if ( $size > 50 )
+    $size = 15;
+  else if ( $size > 5 )
+    $size = 5;
+  print "<tr title=\"" . 
+ tooltip("participants-help") . "\"><td class=\"tooltipselect\">\n<label for=\"entry_part\">" . 
+ translate("Participants") . ":</label></td><td>\n";
+  print "<select name=\"participants[]\" id=\"entry_part\" size=\"$size\" multiple=\"multiple\">$users\n";
+  print "</select>\n";
+  if ( $groups_enabled == "Y" ) {
+    echo "<input type=\"button\" onclick=\"selectUsers()\" value=\"" .
+      translate("Select") . "...\" />\n";
+  }
+  echo "<input type=\"button\" onclick=\"showSchedule()\" value=\"" .
+    translate("Availability") . "...\" />\n";
+  print "</td></tr>\n";
+
+  // external users
+  if ( ! empty ( $allow_external_users ) && $allow_external_users == "Y" ) {
+    print "<tr title=\"" .
+      tooltip("external-participants-help") . "\"><td style=\"vertical-align:top;\" class=\"tooltip\">\n<label for=\"entry_extpart\">" .
+      translate("External Participants") . ":</label></td><td>\n";
+    print "<textarea name=\"externalparticipants\" id=\"entry_extpart\" rows=\"5\" cols=\"40\">";
+    print $external_users . "</textarea>\n</td></tr>\n";
+  }
+}
+?>
+</table>
+<?php if ( $useTabs ) { ?>
+</div>
+<?php } /* $useTabs */ ?>
+
+<!-- REPEATING INFO -->
+<?php if ( $disable_repeating_field != "Y" ) { ?>
+<?php if ( $useTabs ) { ?>
+<a name="tabpete"></a>
+<div id="tabscontent_pete">
+<?php } /* $useTabs */ ?>
+<table>
+<tr style="vertical-align:top;"><td class="tooltip" title="<?php etooltip("repeat-type-help")?>">
+ <label for="rpttype"><?php etranslate("Repeat Type")?>:</label></td><td>
+ <select name="rpt_type" id="rpttype" onchange="rpttype_handler()">
+<?php
+ echo "  <option value=\"none\"" . 
+  ( strcmp ( $rpt_type, 'none' ) == 0 ? " selected=\"selected\"" : "" ) . ">" . 
+  translate("None") . 
+ "</option>\n";
+ echo "  <option value=\"daily\"" . 
+  ( strcmp ( $rpt_type, 'daily' ) == 0 ? " selected=\"selected\"" : "" ) . ">" . 
+  translate("Daily") . 
+ "</option>\n";
+ echo "  <option value=\"weekly\"" . 
+  ( strcmp ( $rpt_type, 'weekly' ) == 0 ? " selected=\"selected\"" : "" ) . ">" . 
+  translate("Weekly") . 
+ "</option>\n";
+ echo "  <option value=\"monthlyByDay\"" . 
+  ( strcmp ( $rpt_type, 'monthlyByDay' ) == 0 ? " selected=\"selected\"" : "" ) . ">" . 
+  translate("Monthly") . " (" . translate("by day") . ")" . "
+ </option>\n";
+ echo "  <option value=\"monthlyByDayR\"" . 
+  ( strcmp ( $rpt_type, 'monthlyByDayR' ) == 0 ? " selected=\"selected\"" : "" ) . ">" . 
+  translate("Monthly") . " (" . translate("by day (from end)") . ")" . 
+ "</option>\n";
+ echo "  <option value=\"monthlyByDate\"" . 
+  ( strcmp ( $rpt_type, 'monthlyByDate' ) == 0 ? " selected=\"selected\"" : "" ) . ">" . 
+  translate("Monthly") . " (" . translate("by date") . ")" . 
+ "</option>\n";
+ echo "  <option value=\"yearly\"" . 
+  ( strcmp ( $rpt_type, 'yearly' ) == 0 ? " selected=\"selected\"" : "" ) . ">" . 
+  translate("Yearly") . 
+ "</option>\n";
+?>
+ </select>
+</td></tr>
+<tr id="rptenddate" style="visibility:hidden;"><td class="tooltip" title="<?php etooltip("repeat-end-date-help")?>">
+ <?php etranslate("Repeat End Date")?>:</td><td>
+ <label><input type="checkbox" name="rpt_end_use" value="y" <?php 
+  echo ( ! empty ( $rpt_end ) ? " checked=\"checked\"" : "" ); 
+ ?> /> <?php etranslate("Use end date")?></label>
+    
+ <span class="end_day_selection"><?php
+  print_date_selection ( "rpt_", $rpt_end_date ? $rpt_end_date : $cal_date )
+ ?></span>
+</td></tr>
+<tr id="rptfreq" style="visibility:hidden;" title="<?php etooltip("repeat-frequency-help")?>"><td class="tooltip">
+ <label for="entry_freq"><?php etranslate("Frequency")?>:</label></td><td>
+ <input type="text" name="rpt_freq" id="entry_freq" size="4" maxlength="4" value="<?php echo $rpt_freq; ?>" />
+</td></tr>
+<tr id="rptday" style="visibility:hidden;" title="<?php etooltip("repeat-day-help")?>"><td class="tooltip">
+ <?php etranslate("Repeat Day")?>: </td><td>
+ <?php
+  if( $WEEK_START != 1)
+   echo "<label><input type=\"checkbox\" name=\"rpt_sun\" value=\"y\"" 
+    . (!empty($rpt_sun)?" checked=\"checked\"":"") . " /> " . translate("Sunday") . 
+   "</label>\n";
+  echo "<label><input type=\"checkbox\" name=\"rpt_mon\" value=\"y\"" 
+   . (!empty($rpt_mon)?" checked=\"checked\"":"") . " /> " . translate("Monday") . 
+  "</label>\n";
+  echo "<label><input type=\"checkbox\" name=\"rpt_tue\" value=\"y\"" 
+   . (!empty($rpt_tue)?" checked=\"checked\"":"") . " /> " . translate("Tuesday") . 
+  "</label>\n";
+  echo "<label><input type=\"checkbox\" name=\"rpt_wed\" value=\"y\"" 
+   . (!empty($rpt_wed)?" checked=\"checked\"":"") . " /> " . translate("Wednesday") . 
+  "</label>\n";
+  echo "<label><input type=\"checkbox\" name=\"rpt_thu\" value=\"y\"" 
+   . (!empty($rpt_thu)?" checked=\"checked\"":"") . " /> " . translate("Thursday") . 
+  "</label>\n";
+  echo "<label><input type=\"checkbox\" name=\"rpt_fri\" value=\"y\"" 
+   . (!empty($rpt_fri)?" checked=\"checked\"":"") . " /> " . translate("Friday") . 
+  "</label>\n";
+  echo "<label><input type=\"checkbox\" name=\"rpt_sat\" value=\"y\"" 
+   . (!empty($rpt_sat)?" checked=\"checked\"":"") . " /> " . translate("Saturday") . 
+  "</label>\n";
+  if( $WEEK_START == 1)
+   echo "<label><input type=\"checkbox\" name=\"rpt_sun\" value=\"y\"" 
+    . (!empty($rpt_sun)?" checked=\"checked\"":"") . " /> " . translate("Sunday") . 
+   "</label>\n";
+ ?></td></tr>
+</table>
+
+<?php if ( $useTabs ) { ?>
+</div> <!-- End tabscontent_pete -->
+<?php } /* $useTabs */ ?>
+<?php } ?>
+</div> <!-- End tabscontent -->
+<table  style="border-width:0px;">
+<tr><td>
+ <script type="text/javascript">
+<!-- <![CDATA[
+  document.writeln ( '<input type="button" value="<?php etranslate("Save")?>" onclick="validate_and_submit()" />' );
+//]]> -->
+ </script>
+ <noscript>
+  <input type="submit" value="<?php etranslate("Save")?>" />
+ </noscript>
+</td></tr>
+</table>
+<input type="hidden" name="participant_list" value="" />
+</form>
+
+<?php if ( $id > 0 && ( $login == $create_by || $single_user == "Y" || $is_admin ) ) { ?>
+ <a href="del_entry.php?id=<?php echo $id;?>" onclick="return confirm('<?php etranslate("Are you sure you want to delete this entry?")?>');"><?php etranslate("Delete entry")?></a><br />
+<?php 
+ } //end if clause for delete link
+} else { 
+  echo translate("You are not authorized to edit this entry") . ".";
+} //end if ( $can_edit )
+?>
+
+<?php print_trailer(); ?>
+</body>
+</html>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/edit_entry_handler.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/edit_entry_handler.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/edit_entry_handler.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,896 @@
+<?php
+require_once('pre.php');
+include_once 'includes/init.php';
+include_once 'includes/site_extras.php';
+load_user_categories ();
+
+$error = "";
+
+$do_override = false;
+$old_id = -1;
+if ( ! empty ( $override ) && ! empty ( $override_date ) ) {
+  // override date specified.  user is going to create an exception
+  // to a repeating event.
+  $do_override = true;
+  $old_id = $id;
+}
+// Remember previous cal_goup_id if present
+$old_id = ( ! empty ( $parent ) ? $parent : $old_id );
+
+if ( empty ( $TZ_OFFSET ) ) {
+  $TZ_OFFSET = 0;
+}
+
+if ( empty ( $endhour ) ) {
+  $endhour = 0;
+}
+// Modify the time to be server time rather than user time.
+if ( ! empty ( $hour ) && ( $timetype == 'T' ) ) {
+  // Convert to 24 hour before subtracting TZ_OFFSET so am/pm isn't confused.
+  // Note this obsoltes any code in the file below that deals with am/pm
+  // so the code can be deleted
+  if ( $TIME_FORMAT == '12' && $hour < 12 ) {
+    if ( $ampm == 'pm' )
+     $hour += 12;
+  } elseif ($TIME_FORMAT == '12' && $hour == '12' && $ampm == 'am' ) {
+    $hour = 0;
+  }
+  if ( $GLOBALS['TIMED_EVT_LEN'] == 'E') {
+    if ( isset ( $endhour ) && $TIME_FORMAT == '12' ) {
+      // Convert end time to a twenty-four hour time scale.
+      if ( $endampm == 'pm' && $endhour < 12 ) {
+        $endhour += 12;
+      } elseif ( $endampm == 'am' && $endhour == 12 ) {
+        $endhour = 0;
+      }
+    }
+  }
+  $TIME_FORMAT=24;
+  $hour -= $TZ_OFFSET;
+  if ( $hour < 0 ) {
+    $hour += 24;
+    // adjust date
+    $date = mktime ( 3, 0, 0, $month, $day, $year );
+    $date -= $ONE_DAY;
+    $month = date ( "m", $date );
+    $day = date ( "d", $date );
+    $year = date ( "Y", $date );
+  }
+  if ( $hour >= 24 ) {
+    $hour -= 24;
+    // adjust date
+    $date = mktime ( 3, 0, 0, $month, $day, $year );
+    $date += $ONE_DAY;
+    $month = date ( "m", $date );
+    $day = date ( "d", $date );
+    $year = date ( "Y", $date );
+  }
+
+  // Must adjust $endhour too
+  if ($TZ_OFFSET) {
+    $endhour -= $TZ_OFFSET;
+    if ( $endhour < 0 )   $endhour += 24;
+    if ( $endhour >= 24 ) $endhour -= 24;
+  }
+}
+
+// Make sure this user is really allowed to edit this event.
+// Otherwise, someone could hand type in the URL to edit someone else's
+// event.
+// Can edit if:
+//   - new event
+//   - user is admin
+//   - user created event
+//   - user is participant
+$can_edit = false;
+// value may be needed later for recreating event
+$old_create_by = ( ! empty ( $user )? $user : '');
+if ( empty ( $id ) ) {
+  // New event...
+  $can_edit = true;
+} else {
+  // event owner or assistant event ?
+  $sql = "SELECT cal_create_by FROM webcal_entry WHERE cal_id = '$id'";
+  $res = dbi_query($sql);
+  if ($res) {
+    $row = dbi_fetch_row ( $res );
+    // value may be needed later for recreating event
+    $old_create_by = $row[0];
+    if (( $row[0] == $login ) || (( $user == $row[0] ) && ( $is_assistant || $is_nonuser_admin )))
+      $can_edit = true;
+    dbi_free_result ( $res );
+  } else
+    $error = translate("Database error") . ": " . dbi_error ();
+}
+if ( $is_admin ) {
+  $can_edit = true;
+}
+if ( empty ( $error ) && ! $can_edit ) {
+  // is user a participant of that event ?
+  $sql = "SELECT cal_id FROM webcal_entry_user WHERE cal_id = '$id' " .
+    "AND cal_login = '$login' AND cal_status IN ('W','A')";
+  $res = dbi_query ( $sql );
+  if ($res) {
+    $row = dbi_fetch_row ( $res );
+    if ( ! empty( $row[0] ) )
+      $can_edit = true; // is participant
+    dbi_free_result ( $res );
+  } else
+    $error = translate("Database error") . ": " . dbi_error ();
+}
+
+if ( ! $can_edit && empty ( $error ) ) {
+  $error = translate ( "You are not authorized" );
+}
+
+// If display of participants is disabled, set the participant list
+// to the event creator.  This also works for single-user mode.
+// Basically, if no participants were selected (because there
+// was no selection list available in the form or because the user
+// refused to select any participant from the list), then we will
+// assume the only participant is the current user.
+if ( empty ( $participants[0] ) ) {
+  $participants[0] = $login;
+  // There might be a better way to do this, but if Admin sets this value,
+  // WebCalendar should respect it
+  if ( ! empty ( $public_access_default_selected ) &&
+    $public_access_default_selected == "Y" ) {
+    $participants[1] = "__public__";     
+  }
+}
+// If "all day event" was selected, then we set the event time
+// to be 12AM with a duration of 24 hours.
+// We don't actually store the "all day event" flag per se.  This method
+// makes conflict checking much simpler.  We just need to make sure
+// that we don't screw up the day view (which normally starts the
+// view with the first timed event).
+// Note that if someone actually wants to create an event that starts
+// at midnight and lasts exactly 24 hours, it will be treated in the
+// same manner.
+
+$duration_h = getValue ( "duration_h" );
+$duration_m = getValue ( "duration_m" );
+
+if ( $timetype == "A" ) {
+  $duration_h = 24;
+  $duration_m = 0;
+  $hour = 0;
+  $minute = 0;
+}
+
+$duration = ( $duration_h * 60 ) + $duration_m;
+if ( $hour > 0 && $timetype != 'U' ) {
+  if ( $TIME_FORMAT == '12' ) {
+    $ampmt = $ampm;
+    //This way, a user can pick am and still
+    //enter a 24 hour clock time.
+    if ($hour > 12 && $ampm == 'am') {
+      $ampmt = 'pm';
+    }
+    $hour %= 12;
+    if ( $ampmt == 'pm' ) {
+      $hour += 12;
+    }
+  }
+}
+//echo "SERVER HOUR: $hour $ampm";
+
+if ( $GLOBALS['TIMED_EVT_LEN'] == 'E' && $timetype == "T" ) {
+    if ( ! isset ( $endhour ) ) {
+        $duration = 0;
+    } else {
+      // Calculate duration.
+      $endmins = ( 60 * (int) ( $endhour ) ) + $endminute;
+      $startmins = ( 60 * $hour ) + $minute;
+      $duration = $endmins - $startmins;
+    }
+    if ( $duration < 0 ) {
+        $duration = 0;
+    }
+}
+
+// handle external participants
+$ext_names = array ();
+$ext_emails = array ();
+$matches = array ();
+$ext_count = 0;
+if ( $single_user == "N" &&
+  ! empty ( $allow_external_users ) && 
+  $allow_external_users == "Y" &&
+  ! empty ( $externalparticipants ) ) {
+  $lines = explode ( "\n", $externalparticipants );
+  if ( ! is_array ( $lines ) ) {
+    $lines = array ( $externalparticipants );
+  }
+  if ( is_array ( $lines ) ) {
+    for ( $i = 0; $i < count ( $lines ); $i++ ) {
+      $ext_words = explode ( " ", $lines[$i] );
+      if ( ! is_array ( $ext_words ) ) {
+        $ext_words = array ( $lines[$i] );
+      }
+      if ( is_array ( $ext_words ) ) {
+        $ext_names[$ext_count] = "";
+        $ext_emails[$ext_count] = "";
+        for ( $j = 0; $j < count ( $ext_words ); $j++ ) {
+          // use regexp matching to pull email address out
+          $ext_words[$j] = chop ( $ext_words[$j] ); // remove \r if there is one
+          if ( preg_match ( "/<?\\S+@\\S+\\.\\S+>?/", $ext_words[$j],
+            $matches ) ) {
+            $ext_emails[$ext_count] = $matches[0];
+            $ext_emails[$ext_count] = preg_replace ( "/[<>]/", "",
+              $ext_emails[$ext_count] );
+          } else {
+            if ( strlen ( $ext_names[$ext_count] ) ) {
+              $ext_names[$ext_count] .= " ";
+            }
+            $ext_names[$ext_count] .= $ext_words[$j];
+          }
+        }
+        // Test for duplicate Names
+        if ( $i > 0 ) {
+          for ( $k = $i ; $k > 0 ; $k-- ) {
+            if ( $ext_names[$i] == $ext_names[$k] ) { 
+              $ext_names[$i]  .= "[$k]";     
+            }
+          }
+        }
+        if ( strlen ( $ext_emails[$ext_count] ) &&
+          empty ( $ext_names[$ext_count] ) ) {
+          $ext_names[$ext_count] = $ext_emails[$ext_count];
+        }
+        $ext_count++;
+      }
+    }
+  }
+}
+
+// first check for any schedule conflicts
+if ( empty ( $allow_conflict_override ) || $allow_conflict_override != "Y" ) {
+  $confirm_conflicts = ""; // security precaution
+}
+if ( $allow_conflicts != "Y" && empty ( $confirm_conflicts ) &&
+  strlen ( $hour ) > 0 && $timetype != 'U' ) {
+  $date = mktime ( 3, 0, 0, $month, $day, $year );
+  $str_cal_date = date ( "Ymd", $date );
+  if ( strlen ( $hour ) > 0 ) {
+    $str_cal_time = sprintf ( "%02d%02d00", $hour, $minute );
+  }
+  if ( ! empty ( $rpt_end_use ) ) {
+    $endt = mktime ( 3, 0, 0, $rpt_month, $rpt_day,$rpt_year );
+  } else {
+    $endt = 'NULL';
+  }
+
+  if ($rpt_type == 'weekly') {
+    $dayst = ( empty( $rpt_sun )  ? 'n' : 'y' )
+      . (  empty( $rpt_mon )  ? 'n' : 'y' )
+      . (  empty( $rpt_tue )  ? 'n' : 'y' )
+      . (  empty( $rpt_wed )  ? 'n' : 'y' )
+      . (  empty( $rpt_thu )  ? 'n' : 'y' )
+      . (  empty( $rpt_fri )  ? 'n' : 'y' )
+      . (  empty( $rpt_sat )  ? 'n' : 'y' );
+  } else {
+    $dayst = "nnnnnnn";
+  }
+
+  // Load exception days... but not for a new event (which can't have
+  // exception dates yet)
+  $ex_days = array ();
+  if ( ! empty ( $id ) ) {
+    $res = dbi_query ( "SELECT cal_date FROM webcal_entry_repeats_not " .
+      "WHERE cal_id = $id" );
+    if ( $res ) {
+      while ( $row = dbi_fetch_row ( $res ) ) {
+        $ex_days[] = $row[0];
+      }
+      dbi_free_result ( $res );
+    } else {
+      $error = translate("Database error") . ": " . dbi_error ();
+    }
+  }
+
+  $dates = get_all_dates ( $date, $rpt_type, $endt, $dayst,
+    $ex_days, $rpt_freq );
+    
+  $conflicts = check_for_conflicts ( $dates, $duration, $hour, $minute,
+    $participants, $login, empty ( $id ) ? 0 : $id );
+}
+if ( empty ( $error ) && ! empty ( $conflicts ) ) {
+  $error = translate("The following conflicts with the suggested time") .
+    ": <ul>$conflicts</ul>";
+}
+//Avoid Undefined variable message
+$msg = '';
+if ( empty ( $error ) ) {
+  $newevent = true;
+  // now add the entries
+  if ( empty ( $id ) || $do_override ) {
+    $res = dbi_query ( "SELECT MAX(cal_id) FROM webcal_entry" );
+    if ( $res ) {
+      $row = dbi_fetch_row ( $res );
+      $id = $row[0] + 1;
+      dbi_free_result ( $res );
+    } else {
+      $id = 1;
+    }
+  } else {
+    $newevent = false;
+    // save old status values of participants
+    $sql = "SELECT cal_login, cal_status, cal_category FROM webcal_entry_user " .
+      "WHERE cal_id = $id ";
+    $res = dbi_query ( $sql );
+    if ( $res ) {
+      for ( $i = 0; $tmprow = dbi_fetch_row ( $res ); $i++ ) {
+        $old_status[$tmprow[0]] = $tmprow[1]; 
+        $old_category[$tmprow[0]] = $tmprow[2];
+      }
+      dbi_free_result ( $res );
+    } else {
+      $error = translate("Database error") . ": " . dbi_error ();
+    }
+    if ( empty ( $error ) ) {
+      dbi_query ( "DELETE FROM webcal_entry WHERE cal_id = $id" );
+      dbi_query ( "DELETE FROM webcal_entry_user WHERE cal_id = $id" );
+      dbi_query ( "DELETE FROM webcal_entry_ext_user WHERE cal_id = $id" );
+      dbi_query ( "DELETE FROM webcal_entry_repeats WHERE cal_id = $id" );
+      dbi_query ( "DELETE FROM webcal_site_extras WHERE cal_id = $id" );
+    }
+    $newevent = false;
+  }
+
+  if ( $do_override ) {
+    $sql = "INSERT INTO webcal_entry_repeats_not ( cal_id, cal_date ) " .
+      "VALUES ( $old_id, $override_date )";
+    if ( ! dbi_query ( $sql ) ) {
+      $error = translate("Database error") . ": " . dbi_error ();
+    }
+  }
+  $sql = "INSERT INTO webcal_entry ( cal_id, " .
+    ( $old_id > 0 ? " cal_group_id, " : "" ) .
+    "cal_create_by, cal_date, " .
+    "cal_time, cal_mod_date, cal_mod_time, cal_duration, cal_priority, " .
+    "cal_access, cal_type, cal_name, cal_description ) " .
+    "VALUES ( $id, " .
+    ( $old_id > 0 ? " $old_id, " : "" ) .
+    "'" . ( ! empty ( $old_create_by ) && 
+      ( ( $is_admin && ! $newevent ) || $is_assistant || 
+      $is_nonuser_admin ) ? $old_create_by : $login ) . "', ";
+    
+  $date = mktime ( 3, 0, 0, $month, $day, $year );
+  $sql .= date ( "Ymd", $date ) . ", ";
+  if ( strlen ( $hour ) > 0 && $timetype != 'U' ) {
+    $sql .= sprintf ( "%02d%02d00, ", $hour, $minute );
+  } else {
+    $sql .= "-1, ";
+  }
+  $sql .= date ( "Ymd" ) . ", " . date ( "Gis" ) . ", ";
+  $sql .= sprintf ( "%d, ", $duration );
+  $sql .= ! empty ( $priority ) ? sprintf ( "%d,", $priority ) : "2,";
+  $sql .= empty ( $access ) ? "'P', " : "'$access', ";
+  if (  ! empty ( $rpt_type ) && $rpt_type != 'none' ) {
+    $sql .= "'M', ";
+  } else {
+    $sql .= "'E', ";
+  }
+
+  if ( strlen ( $name ) == 0 ) {
+    $name = translate("Unnamed Event");
+  }
+  $sql .= "'" . $name .  "', ";
+  if ( strlen ( $description ) == 0 ) {
+    $description = $name;
+  }
+  $sql .= "'" . $description . "' )";
+  
+  if ( empty ( $error ) ) {
+    if ( ! dbi_query ( $sql ) ) {
+      $error = translate("Database error") . ": " . dbi_error ();
+    }
+    else {
+    //mettre le plugin
+    //add father 
+    $params[0] = $user ;
+    $params[1] = $id ;
+    plugin_hook('add_cal_link_father_event',$params);
+    }
+  }
+
+  // log add/update
+  activity_log ( $id, $login, ($is_assistant || $is_nonuser_admin ? $user : $login),
+    $newevent ? $LOG_CREATE : $LOG_UPDATE, "" );
+  
+  if ( $single_user == "Y" ) {
+    $participants[0] = $single_user_login;
+  }
+
+  // check if participants have been removed and send out emails
+  if ( ! $newevent && count ( $old_status ) > 0 ) {  // nur bei Update!!!
+    while ( list ( $old_participant, $dummy ) = each ( $old_status ) ) {
+      $found_flag = false;
+      for ( $i = 0; $i < count ( $participants ); $i++ ) {
+        if ( $participants[$i] == $old_participant ) {
+          $found_flag = true;
+          break;
+        }
+      }
+     $is_nonuser_admin = user_is_nonuser_admin ( $login, $old_participant );
+      // Don't send mail if we are editing a non-user calendar
+      // and we are the admin
+      if ( !$found_flag && !$is_nonuser_admin) {
+        // only send mail if their email address is filled in
+        $do_send = get_pref_setting ( $old_participant, "EMAIL_EVENT_DELETED" );
+        $user_TZ = get_pref_setting ( $old_participant, "TZ_OFFSET" );
+        $user_language = get_pref_setting ( $old_participant, "LANGUAGE" );
+        user_load_variables ( $old_participant, "temp" );
+        if ( $old_participant != $login && strlen ( $tempemail ) &&
+          $do_send == "Y" && $send_email != "N" ) {
+
+          // Want date/time in user's timezone
+          $user_hour = $hour + $user_TZ;
+          if ( $user_hour < 0 ) {
+            $user_hour += 24;
+            // adjust date
+            $user_date = mktime ( 3, 0, 0, $month, $day, $year );
+            $user_date -= $ONE_DAY;
+            $user_month = date ( "m", $date );
+            $user_day = date ( "d", $date );
+            $user_year = date ( "Y", $date );
+          } elseif ( $user_hour >= 24 ) {
+            $user_hour -= 24;
+            // adjust date
+            $user_date = mktime ( 3, 0, 0, $month, $day, $year );
+            $user_date += $ONE_DAY;
+            $user_month = date ( "m", $date );
+            $user_day = date ( "d", $date );
+            $user_year = date ( "Y", $date );
+          } else {
+            $user_month = $month;
+            $user_day = $day;
+            $user_year = $year;
+          }
+          if (($GLOBALS['LANGUAGE'] != $user_language) && 
+            ! empty ( $user_language ) && ( $user_language != 'none' )){
+            reset_language ( $user_language );
+          }
+          //do_debug($user_language);    
+          $fmtdate = sprintf ( "%04d%02d%02d", $user_year, $user_month, $user_day );
+          $msg = translate("Hello") . ", " . $tempfullname . ".\n\n" .
+            translate("An appointment has been canceled for you by") .
+            " " . $login_fullname .  ". " .
+            translate("The subject was") . " \"" . $name . "\"\n\n" .
+            translate("The description is") . " \"" . $description . "\"\n" .
+            translate("Date") . ": " . date_to_str ( $fmtdate ) . "\n" .
+            ( ( empty ( $user_hour ) && empty ( $minute ) ) ? "" :
+            translate("Time") . ": " .
+              display_time ( ( $user_hour * 10000 ) + ( $minute * 100 ), true ) ) .
+            "\n\n\n";
+          // add URL to event, if we can figure it out
+          /*
+          if ( ! empty ( $server_url ) ) {
+            $url = $server_url .  "view_entry.php?id=" .  $id;
+            $msg .= $url . "\n\n";
+          }
+        */
+          if ( strlen ( $login_email ) ) {
+            $extra_hdrs = "From: $login_email\r\nX-Mailer: " . translate($application_name);
+          } else {
+            $extra_hdrs = "From: $email_fallback_from\r\nX-Mailer: " . translate($application_name);
+          }
+          mail ( $tempemail,
+            translate($application_name) . " " . translate("Notification") . ": " . $name,
+            utf8_decode(html_to_8bits ($msg)), $extra_hdrs );
+          activity_log ( $id, $login, $old_participant, $LOG_NOTIFICATION,
+     "User removed from participants list" );
+        }
+      }
+    }
+  }
+
+  // now add participants and send out notifications
+   
+  for ( $i = 0; $i < count ( $participants ); $i++ ) {
+    $my_cat_id = "";
+    
+    // Is the person adding the nonuser calendar admin
+    $is_nonuser_admin = user_is_nonuser_admin ( $login, $participants[$i] );
+
+    // if public access, require approval unless
+    // $public_access_add_needs_approval is set to "N"
+    if ( $login == "__public__" ) {
+      if ( ! empty ( $public_access_add_needs_approval ) &&
+        $public_access_add_needs_approval == "N" ) {
+        $status = "A"; // no approval needed
+      } else {
+        // Approval required
+        $status = "W"; // approval required
+      }
+      $my_cat_id = $cat_id;
+    } else if ( ! $newevent ) {
+      // keep the old status if no email will be sent
+        $send_user_mail = ( empty ( $old_status[$participants[$i]] ) ||
+          $entry_changed ) ?  true : false;
+        $tmp_status = ( ! empty ( $old_status[$participants[$i]] ) && ! $send_user_mail ) ?
+          $old_status[$participants[$i]] : "W";
+      $status = ( $participants[$i] != $login && boss_must_approve_event ( $login, $participants[$i] ) && $require_approvals == "Y" && ! $is_nonuser_admin ) ?
+        $tmp_status : "A";
+      $tmp_cat = ( ! empty ( $old_category[$participants[$i]]) ) ?
+        $old_category[$participants[$i]] : 'NULL';
+      $tmp_cat = ( $participants[$i] == $user ) ? $cat_id : $tmp_cat;
+      // Allow cat to be changed for public access (if admin user)
+      if ( $participants[$i] == "__public__" && $is_admin ) {
+        $tmp_cat = $cat_id;
+      }
+
+      // If user is admin and this event was previously approved for public,
+      // keep it as approved even though date/time may have changed
+      // This goes against stricter security, but it confuses users to have
+      // to re-approve events they already approved.
+      if ( $participants[$i] == "__public__" && $is_admin &&
+        $old_status['__public__'] == 'A' ) {
+        $status = 'A';
+      }
+      $my_cat_id = ( $participants[$i] != $login ) ? $tmp_cat : $cat_id;
+      // If user is admin and
+      // if it's a global cat, then set it for other users as well.
+      if ( $is_admin && ! empty ( $categories[$cat_id] ) &&
+        empty ( $category_owners[$cat_id] ) ) {
+        // found categ. and owner set to NULL; it is global
+        $my_cat_id = $cat_id;
+      }
+    } else {  // New Event
+    
+      $send_user_mail = true;
+      $status = ( $participants[$i] != $login && 
+        boss_must_approve_event ( $login, $participants[$i] ) && 
+        $require_approvals == "Y" && ! $is_nonuser_admin ) ?
+        "W" : "A";
+      // If admin, no need to approve Public Access Events
+      if ( $participants[$i] == "__public__" && $is_admin ) {
+        $status = "A";
+      }
+      if ( $participants[$i] == $login ) {
+        $my_cat_id = $cat_id;
+      } else {
+        // if it's a global cat, then set it for other users as well.
+        if ( ! empty ( $categories[$cat_id] ) &&
+          empty ( $category_owners[$cat_id] ) ) {
+          // found cat. and owner set to NULL; it is global
+          $my_cat_id = $cat_id;
+        } else {
+          // not global category
+          $my_cat_id = 'NULL';
+        }
+      }
+    }
+    
+    // Some users report that they get an error on duplicate keys
+    // on the following add... As a safety measure, delete any
+    // existing entry with the id.  Ignore the result.
+    dbi_query ( "DELETE FROM webcal_entry_user WHERE cal_id = $id " .
+      "AND cal_login = '$participants[$i]'" );
+    if ( empty ( $my_cat_id ) ) $my_cat_id = 'NULL';
+    $sql = "INSERT INTO webcal_entry_user " .
+      "( cal_id, cal_login, cal_status, cal_category ) VALUES ( $id, '" .
+      $participants[$i] . "', '$status', $my_cat_id )";
+    if ( ! dbi_query ( $sql ) ) {
+      $error = translate("Database error") . ": " . dbi_error ();
+      break;
+    } else {
+      // Don't send mail if we are editing a non-user calendar
+      // and we are the admin
+      if (!$is_nonuser_admin) {
+        $from = $user_email;
+        if ( empty ( $from ) && ! empty ( $email_fallback_from ) )
+          $from = $email_fallback_from;
+        // only send mail if their email address is filled in
+        $do_send = get_pref_setting ( $participants[$i],
+           $newevent ? "EMAIL_EVENT_ADDED" : "EMAIL_EVENT_UPDATED" );
+        $user_TZ = get_pref_setting ( $participants[$i], "TZ_OFFSET" );
+        $user_language = get_pref_setting ( $participants[$i], "LANGUAGE" );
+        user_load_variables ( $participants[$i], "temp" );
+        
+        
+        if ( $participants[$i] != $login && 
+          boss_must_be_notified ( $login, $participants[$i] ) && 
+          strlen ( $tempemail ) &&
+          $do_send == "Y" && $send_user_mail && $send_email != "N" ) {
+		
+          // Want date/time in user's timezone
+          $user_hour = $hour + $user_TZ;
+          if ( $user_hour < 0 ) {
+            $user_hour += 24;
+            // adjust date
+            $user_date = mktime ( 3, 0, 0, $month, $day, $year );
+            $user_date -= $ONE_DAY;
+            $user_month = date ( "m", $date );
+            $user_day = date ( "d", $date );
+            $user_year = date ( "Y", $date );
+          } elseif ( $user_hour >= 24 ) {
+            $user_hour -= 24;
+            // adjust date
+            $user_date = mktime ( 3, 0, 0, $month, $day, $year );
+            $user_date += $ONE_DAY;
+            $user_month = date ( "m", $date );
+            $user_day = date ( "d", $date );
+            $user_year = date ( "Y", $date );
+          } else {
+            $user_month = $month;
+            $user_day = $day;
+            $user_year = $year;
+          }
+          if (($GLOBALS['LANGUAGE'] != $user_language) && 
+            ! empty ( $user_language ) && ( $user_language != 'none' )) {
+             reset_language ( $user_language );
+          }
+          //do_debug($user_language);
+          $fmtdate = sprintf ( "%04d%02d%02d", $user_year, $user_month, $user_day );
+          $msg = translate("Hello") . ", " . $tempfullname . ".\n\n";
+          if ( $newevent || ( empty ( $old_status[$participants[$i]] ) ) ) {
+            $msg .= translate("A new appointment has been made for you by");
+          } else {
+            $msg .= translate("An appointment has been updated by");
+          }
+          $msg .= " " . $login_fullname .  ". " .
+            translate("The subject is") . " \"" . $name . "\"\n\n" .
+            translate("The description is") . " \"" . $description . "\"\n" .
+            translate("Date") . ": " . date_to_str ( $fmtdate ) . "\n" .
+            ( ( empty ( $user_hour ) && empty ( $minute ) ) ? "" :
+            translate("Time") . ": " .
+            display_time ( ( $user_hour * 10000 ) + ( $minute * 100 ), true ) . "\n" ) .
+            translate("Please look on") . " " . translate($application_name) . " " .
+            ( $require_approvals == "Y" ?
+            translate("to accept or reject this appointment") :
+            translate("to view this appointment") ) . ".";
+          // add URL to event, if we can figure it out
+        /*
+          if ( ! empty ( $server_url ) ) {
+            $url = $server_url .  "view_entry.php?id=" .  $id;
+            $msg .= "\n\n" . $url;
+          }
+          */
+          if ( strlen ( $from ) ) {
+            $extra_hdrs = "From: $from\r\nX-Mailer: " . translate($application_name);
+          } else {
+            $extra_hdrs = "X-Mailer: " . translate($application_name);
+          }
+          	
+        
+         mail ( $tempemail,
+            translate($application_name) . " " . translate("Notification") . ": " . $name,
+            utf8_decode(html_to_8bits ($msg)), $extra_hdrs );
+          activity_log ( $id, $login, $participants[$i], $LOG_NOTIFICATION, "" );
+          
+        }
+      }
+    }
+  }
+
+  // add external participants
+  // send notification if enabled.
+  if ( is_array ( $ext_names ) && is_array ( $ext_emails ) ) {
+    for ( $i = 0; $i < count ( $ext_names ); $i++ ) {
+      if ( strlen ( $ext_names[$i] ) ) {
+        $sql = "INSERT INTO webcal_entry_ext_user " .
+          "( cal_id, cal_fullname, cal_email ) VALUES ( " .
+          "$id, '$ext_names[$i]', ";
+        if ( strlen ( $ext_emails[$i] ) ) {
+          $sql .= "'$ext_emails[$i]' )";
+        } else {
+          $sql .= "NULL )";
+        }
+        if ( ! dbi_query ( $sql ) ) {
+          $error = translate("Database error") . ": " . dbi_error ();
+        }
+        // send mail notification if enabled
+        // TODO: move this code into a function...
+        if ( $external_notifications == "Y" && $send_email != "N" &&
+          strlen ( $ext_emails[$i] ) > 0 ) {
+          $fmtdate = sprintf ( "%04d%02d%02d", $year, $month, $day );
+          // Strip [\d] from duplicate Names before emailing
+          $ext_names[$i] = trim(preg_replace( '/\[[\d]]/', "", $ext_names[$i]) );
+          $msg = translate("Hello") . ", " . $ext_names[$i] . ".\n\n";
+          if ( $newevent ) {
+            $msg .= translate("A new appointment has been made for you by");
+          } else {
+            $msg .= translate("An appointment has been updated by");
+          }
+          $msg .= " " . $login_fullname .  ". " .
+            translate("The subject is") . " \"" . $name . "\"\n\n" .
+            translate("The description is") . " \"" . $description . "\"\n" .
+            translate("Date") . ": " . date_to_str ( $fmtdate ) . "\n" .
+            ( ( empty ( $hour ) && empty ( $minute ) ) ? "" :
+            translate("Time") . ": " .
+            display_time ( ( $hour * 10000 ) + ( $minute * 100 ) ) . "\n" ) .
+            translate("Please look on") . " " . translate($application_name) .
+            ".";
+          // add URL to event, if we can figure it out
+        /*
+          if ( ! empty ( $server_url ) ) {
+            $url = $server_url .  "view_entry.php?id=" .  $id;
+            $msg .= "\n\n" . $url;
+          }
+          */
+          if ( strlen ( $from ) ) {
+            $extra_hdrs = "From: $from\r\nX-Mailer: " . translate($application_name);
+          } else {
+            $extra_hdrs = "X-Mailer: " . translate($application_name);
+          }
+          mail ( $ext_emails[$i],
+            translate($application_name) . " " .
+            translate("Notification") . ": " . $name,
+            utf8_decode(html_to_8bits ($msg)), $extra_hdrs );
+        
+        }
+      }
+    }
+  }
+
+  // add site extras
+  for ( $i = 0; $i < count ( $site_extras ) && empty ( $error ); $i++ ) {
+    $sql = "";
+    $extra_name = $site_extras[$i][0];
+    $extra_type = $site_extras[$i][2];
+    $extra_arg1 = $site_extras[$i][3];
+    $extra_arg2 = $site_extras[$i][4];
+    $value = $$extra_name;
+    //echo "Looking for $extra_name... value = " . $value . " ... type = " .
+    // $extra_type . "<br />\n";
+    if ( strlen ( $$extra_name ) || $extra_type == $EXTRA_DATE ) {
+      if ( $extra_type == $EXTRA_URL || $extra_type == $EXTRA_EMAIL ||
+        $extra_type == $EXTRA_TEXT || $extra_type == $EXTRA_USER ||
+        $extra_type == $EXTRA_MULTILINETEXT ||
+        $extra_type == $EXTRA_SELECTLIST  ) {
+        $sql = "INSERT INTO webcal_site_extras " .
+          "( cal_id, cal_name, cal_type, cal_data ) VALUES ( " .
+          "$id, '$extra_name', $extra_type, '$value' )";
+      } else if ( $extra_type == $EXTRA_REMINDER && $value == "1" ) {
+        if ( ( $extra_arg2 & $EXTRA_REMINDER_WITH_DATE ) > 0 ) {
+          $yname = $extra_name . "year";
+          $mname = $extra_name . "month";
+          $dname = $extra_name . "day";
+          $edate = sprintf ( "%04d%02d%02d", $$yname, $$mname, $$dname );
+          $sql = "INSERT INTO webcal_site_extras " .
+            "( cal_id, cal_name, cal_type, cal_remind, cal_date ) VALUES ( " .
+            "$id, '$extra_name', $extra_type, 1, $edate )";
+        } else if ( ( $extra_arg2 & $EXTRA_REMINDER_WITH_OFFSET ) > 0 ) {
+          $dname = $extra_name . "_days";
+          $hname = $extra_name . "_hours";
+          $mname = $extra_name . "_minutes";
+          $minutes = ( $$dname * 24 * 60 ) + ( $$hname * 60 ) + $$mname;
+          $sql = "INSERT INTO webcal_site_extras " .
+            "( cal_id, cal_name, cal_type, cal_remind, cal_data ) VALUES ( " .
+            "$id, '$extra_name', $extra_type, 1, '" . $minutes . "' )";
+        } else {
+          $sql = "INSERT INTO webcal_site_extras " .
+          "( cal_id, cal_name, cal_type, cal_remind ) VALUES ( " .
+          "$id, '$extra_name', $extra_type, 1 )";
+        }
+      } else if ( $extra_type == $EXTRA_DATE )  {
+        $yname = $extra_name . "year";
+        $mname = $extra_name . "month";
+        $dname = $extra_name . "day";
+        $edate = sprintf ( "%04d%02d%02d", $$yname, $$mname, $$dname );
+        $sql = "INSERT INTO webcal_site_extras " .
+          "( cal_id, cal_name, cal_type, cal_date ) VALUES ( " .
+          "$id, '$extra_name', $extra_type, $edate )";
+      }
+    }
+    if ( strlen ( $sql ) && empty ( $error ) ) {
+      //echo "SQL: $sql<BR>\n";
+      if ( ! dbi_query ( $sql ) ) {
+        $error = translate("Database error") . ": " . dbi_error ();
+      }
+    }
+  }
+
+  // clearly, we want to delete the old repeats, before inserting new...
+  if ( empty ( $error ) ) {
+    if ( ! dbi_query ( "DELETE FROM webcal_entry_repeats WHERE cal_id = $id") ) {
+      $error = translate("Database error") . ": " . dbi_error ();
+    }
+    // add repeating info
+    if ( ! empty ( $rpt_type ) && strlen ( $rpt_type ) && $rpt_type != 'none' ) {
+      $freq = ( $rpt_freq ? $rpt_freq : 1 );
+      if ( ! empty ( $rpt_end_use  ) ) {
+        $end = sprintf ( "%04d%02d%02d", $rpt_year, $rpt_month, $rpt_day );
+      } else {
+        $end = 'NULL';
+      }
+      if ($rpt_type == 'weekly') {
+        $days = ( empty( $rpt_sun )  ? 'n' : 'y' )
+          . (  empty( $rpt_mon )  ? 'n' : 'y' )
+          . (  empty( $rpt_tue )  ? 'n' : 'y' )
+          . (  empty( $rpt_wed )  ? 'n' : 'y' )
+          . (  empty( $rpt_thu )  ? 'n' : 'y' )
+          . (  empty( $rpt_fri )  ? 'n' : 'y' )
+          . (  empty( $rpt_sat )  ? 'n' : 'y' );
+      } else {
+        $days = "nnnnnnn";
+      }
+  
+      $sql = "INSERT INTO webcal_entry_repeats ( cal_id, " .
+        "cal_type, cal_end, cal_days, cal_frequency ) VALUES " .
+        "( $id, '$rpt_type', $end, '$days', $freq )";
+      dbi_query ( $sql );
+      $msg .= "<span style=\"font-weight:bold;\">SQL:</span> $sql<br />\n<br />";
+    }
+  }
+}
+
+// If we were editing this event, then go back to the last view (week, day,
+// month).  If this is a new event, then go to the preferred view for
+// the date range that this event was added to.
+if ( empty ( $error ) ) {
+  $xdate = sprintf ( "%04d%02d%02d", $year, $month, $day );
+  $user_args = ( empty ( $user ) ? '' : "user=$user" );
+  send_to_preferred_view ( $xdate, $user_args );
+}
+
+print_header();
+if ( strlen ( $conflicts ) ) { 
+?>
+<h2><?php etranslate("Scheduling Conflict")?></h2>
+
+<?php etranslate("Your suggested time of")?> <span style="font-weight:bold;">
+<?php
+  if ( ! empty ( $allday ) && $allday == "Y" ) {
+    etranslate("All day event");
+  } else {
+    $time = sprintf ( "%d%02d00", $hour, $minute );
+    echo display_time ( $time );
+    if ( $duration > 0 )
+      echo "-" . display_time ( add_duration ( $time, $duration ) );
+  }
+?></span> <?php etranslate("conflicts with the following existing calendar entries")?>:
+<ul>
+<?php echo $conflicts; ?>
+</ul>
+
+<?php
+// user can confirm conflicts
+  echo "<form name=\"confirm\" method=\"post\">\n";
+  if ( ! is_array ( $_POST ) && is_array ( $HTTP_POST_VARS ) )
+    $_POST = $HTTP_POST_VARS;
+  foreach ($_POST as $xkey=>$xval ) {
+    if (is_array($xval)) {
+      $xkey.="[]";
+      foreach ( $xval as $ykey=>$yval ) {
+        if (get_magic_quotes_gpc())
+          $yval = stripslashes($yval);
+        $yval = htmlentities  ( $yval );
+        echo "<input type=\"hidden\" name=\"$xkey\" value=\"$yval\" />\n";
+      }
+    } else {
+      if (get_magic_quotes_gpc())
+        $xval = stripslashes($xval);
+      $xval = htmlentities ( $xval );
+      echo "<input type=\"hidden\" name=\"$xkey\" value=\"$xval\" />\n";
+    }
+  }
+?>
+<table>
+ <tr>
+<?php
+  // Allow them to override a conflict if server settings allow it
+  if ( ! empty ( $allow_conflict_override ) &&
+    $allow_conflict_override == "Y" ) {
+    echo "<td><input type=\"submit\" name=\"confirm_conflicts\" " .
+      "value=\"" . translate("Save") . "\" /></td>\n";
+  }
+?>
+   <td><input type="button" value="<?php etranslate("Cancel")?>" 
+onclick="history.back()" /><td>
+ </tr>
+</table>
+</form>
+
+<?php } else { ?>
+<h2><?php etranslate("Error")?></h2>
+<blockquote>
+<?php echo $error; ?>
+</blockquote>
+<?php } ?>
+
+<?php print_trailer(); ?>
+</body>
+</html>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/edit_layer.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/edit_layer.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/edit_layer.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,107 @@
+<?php
+include_once 'includes/init.php';
+
+if ( $allow_view_other != 'Y' ) {
+  print_header ();
+  etranslate("You are not authorized");
+  print_trailer ();
+  exit;
+}
+
+$updating_public = false;
+if ( $is_admin && ! empty ( $public ) && $public_access == "Y" ) {
+  $updating_public = true;
+  $layer_user = "__public__";
+} else {
+  $layer_user = $login;
+}
+
+load_user_layers ( $layer_user, 1 );
+
+$INC = array('js/edit_layer.php');
+print_header($INC);
+?>
+
+<h2><?php
+if ( $updating_public )
+  echo translate($PUBLIC_ACCESS_FULLNAME) . " ";
+
+if ( ! empty ( $layers[$id]['cal_layeruser'] ) )
+  etranslate("Edit Layer");
+else
+  etranslate("Add Layer");
+?> <img src="help.gif" alt="<?php etranslate("Help")?>" class="help" onclick="window.open ( 'help_layers.php', 'cal_help', 'dependent,menubar,scrollbars,height=400,width=400,innerHeight=420,outerWidth=420' );" /></h2>
+
+<form action="edit_layer_handler.php" method="post" onsubmit="return valid_form(this);" name="prefform">
+
+<?php if ( $updating_public ) { ?>
+	<input type="hidden" name="public" value="1" />
+<?php } ?>
+
+<table style="border-width:0px;">
+<?php
+if ( $single_user == "N" ) {
+  $userlist = get_my_users ();
+  if ($nonuser_enabled == "Y" ) {
+    $nonusers = get_nonuser_cals ();
+    $userlist = ($nonuser_at_top == "Y") ? array_merge($nonusers, $userlist) : array_merge($userlist, $nonusers);
+  }
+  $num_users = 0;
+  $size = 0;
+  $users = "";
+  for ( $i = 0; $i < count ( $userlist ); $i++ ) {
+    if ( $userlist[$i]['cal_login'] != $layer_user ) {
+      $size++;
+      $users .= "<option value=\"" . $userlist[$i]['cal_login'] . "\"";
+      if ( ! empty ( $layers[$id]['cal_layeruser'] ) ) {
+        if ( $layers[$id]['cal_layeruser'] == $userlist[$i]['cal_login'] )
+          $users .= " selected=\"selected\"";
+      } 
+      $users .= ">" . $userlist[$i]['cal_fullname'] . "</option>\n";
+    }
+  }
+  if ( $size > 50 )
+    $size = 15;
+  else if ( $size > 5 )
+    $size = 5;
+  if ( $size >= 1 ) {
+	print "<tr><td style=\"vertical-align:top;\">\n<label for=\"layeruser\">" .
+      translate("Source") . ":</label></td><td>\n";
+    print "<select name=\"layeruser\" id=\"layeruser\" size=\"1\">$users\n";
+    print "</select>\n";
+    print "</td></tr>\n";
+  }
+}
+?>
+<tr><td>
+	<label for="layercolor"><?php etranslate("Color")?>:</label></td><td>
+	<input type="text" name="layercolor" id="layercolor" size="7" maxlength="7" value="<?php echo empty ( $layers[$id]['cal_color'] ) ? "" :  $layers[$id]['cal_color']; ?>" />
+	<input type="button" onclick="selectColor('layercolor')" value="<?php etranslate("Select")?>..." />
+</td></tr>
+<tr><td style="font-weight:bold;">
+	<?php etranslate("Duplicates")?>:</td><td>
+	<label><input type="checkbox" name="dups" value="Y"<?php 
+		if (! empty ($layers[$id]['cal_dups']) && $layers[$id]['cal_dups'] == 'Y') 
+			echo " checked=\"checked\"";
+	?> /> <?php etranslate("Show layer events that are the same as your own")?></label>
+</td></tr>
+<tr><td colspan="2">
+	<input type="submit" value="<?php etranslate("Save")?>" />
+</td></tr>
+<?php
+// If a layer already exists put a 'Delete Layer' link
+if ( ! empty ( $layers[$id]['cal_layeruser'] ) ) { ?>
+<tr><td>
+	<br /><a title="<?php etranslate("Delete layer")?>" href="del_layer.php?id=<?php echo $id; if ( $updating_public ) echo "&public=1"; ?>" onclick="return confirm('<?php etranslate("Are you sure you want to delete this layer?")?>');"><?php etranslate("Delete layer")?></a><br />
+</td></tr>
+<?php }  // end 'Delete Layer' link ?>
+</table>
+
+<?php if ( ! empty ( $layers[$id]['cal_layeruser'] ) )
+	echo "<input type=\"hidden\" name=\"id\" value=\"$id\" />\n";
+?>
+</form>
+
+<?php print_trailer(); ?>
+</body>
+</html>
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/edit_layer_handler.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/edit_layer_handler.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/edit_layer_handler.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,81 @@
+<?php
+include_once 'includes/init.php';
+
+$error = "";
+
+if ( $allow_view_other != 'Y' ) {
+  $error = translate("You are not authorized");
+}
+
+if ( empty ( $dups ) )
+  $dups = 'N';
+
+$updating_public = false;
+if ( $is_admin && ! empty ( $public ) && $public_access == "Y" ) {
+  $updating_public = true;
+  $layer_user = "__public__";
+} else {
+  $layer_user = $login;
+}
+
+if ( $layer_user == $layeruser )
+  $error = translate ("You cannot create a layer for yourself") . ".";
+
+load_user_layers ( $layer_user, 1 );
+
+if ( ! empty ( $layeruser ) && $error == "" ) {
+  // existing layer entry
+  if ( ! empty ( $layers[$id]['cal_layeruser'] ) ) {
+    // update existing layer entry for this user
+    $layerid = $layers[$id]['cal_layerid'];
+
+    dbi_query ( "UPDATE webcal_user_layers SET cal_layeruser = '$layeruser', cal_color = '$layercolor', cal_dups = '$dups' WHERE cal_layerid = '$layerid'");
+
+  } else {
+    // new layer entry
+    // check for existing layer for user.  can only have one layer per user
+    $res = dbi_query ( "SELECT COUNT(cal_layerid) FROM webcal_user_layers " .
+      "WHERE cal_login = '$layer_user' AND cal_layeruser = '$layeruser'" );
+    if ( $res ) {
+      $row = dbi_fetch_row ( $res );
+      if ( $row[0] > 0 ) {
+        $error = translate ("You can only create one layer for each user") . ".";
+      }
+      dbi_free_result ( $res );
+    }
+    if ( $error == "" ) {
+      $res = dbi_query ( "SELECT MAX(cal_layerid) FROM webcal_user_layers" );
+      if ( $res ) {
+        $row = dbi_fetch_row ( $res );
+        $layerid = $row[0] + 1;
+      } else {
+        $layerid = 1;
+      }
+      dbi_query ( "INSERT INTO webcal_user_layers ( ".
+        "cal_layerid, cal_login, cal_layeruser, cal_color, cal_dups ) " .
+	"VALUES ('$layerid', '$layer_user', '$layeruser', " .
+	"'$layercolor', '$dups')");
+    }
+  }
+}
+
+if ( $error == "" ) {
+  if ( $updating_public )
+    do_redirect ( "layers.php?public=1" );
+  else
+    do_redirect ( "layers.php" );
+  exit;
+}
+
+print_header();
+?>
+
+<h2><?php etranslate("Error")?></h2>
+<blockquote>
+<?php echo $error; ?>
+</blockquote>
+
+<?php print_trailer(); ?>
+
+</body>
+</html>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/edit_nonusers.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/edit_nonusers.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/edit_nonusers.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,83 @@
+<?php
+include_once 'includes/init.php';
+print_header( '', '', '', true );
+
+if ( ! $is_admin ) {
+  echo "<h2>" . translate("Error") . "</h2>\n" . 
+  		translate("You are not authorized") . ".\n";
+  echo "</body>\n</html>";
+  exit;
+}
+if ( ! $NONUSER_PREFIX ) {
+  echo "<h2>" . translate("Error") . "</h2>\n" . 
+  		translate("NONUSER_PREFIX not set") . ".\n";
+  echo "</body>\n</html>";
+  exit;
+}
+$add = getValue ( "add" );
+$nid = getValue ( "nid" );
+
+// Adding/Editing nonuser calendar
+if (( ($add == '1') || (! empty ($nid)) ) && empty ($error)) {
+  $userlist = get_my_users ();
+  $button = translate("Add");
+  $nid = clean_html($nid);
+?>
+
+<form action="edit_nonusers_handler.php" method="post">
+  <?php
+  if ( ! empty ( $nid ) ) {
+    nonuser_load_variables ( $nid, 'nonusertemp_' );
+    $id_display = "$nid <input type=\"hidden\" name=\"nid\" value=\"$nid\" />";
+    $button = translate("Save");
+    $nonusertemp_login = substr($nonusertemp_login, strlen($NONUSER_PREFIX));
+  } else {
+    $id_display = "<input type=\"text\" name=\"nid\" id=\"calid\" size=\"20\" maxlength=\"20\" /> " . translate ("word characters only");
+  }
+  ?>
+<h2><?php
+  if ( ! empty ( $nid ) ) {
+	nonuser_load_variables ( $nid, 'nonusertemp_' );
+	echo translate("Edit User");
+  } else {
+	echo translate("Add User");
+  }
+?></h2>
+<table>
+	<tr><td>
+		<label for="calid"><?php etranslate("Calendar ID")?>:</label></td><td>
+		<?php echo $id_display ?>
+	</td></tr>
+	<tr><td>
+		<label for="nfirstname"><?php etranslate("First Name")?>:</label></td><td>
+		<input type="text" name="nfirstname" id="nfirstname" size="20" maxlength="25" value="<?php echo empty ( $nonusertemp_firstname ) ? '' : htmlspecialchars ( $nonusertemp_firstname ); ?>" />
+	</td></tr>
+	<tr><td>
+		<label for="nlastname"><?php etranslate("Last Name")?>:</label></td><td>
+		<input type="text" name="nlastname" id="nlastname" size="20" maxlength="25" value="<?php echo empty ( $nonusertemp_lastname ) ? '' : htmlspecialchars ( $nonusertemp_lastname ); ?>" />
+	</td></tr>
+	<tr><td>
+		<label for="nadmin"><?php etranslate("Admin")?>:</label></td><td>
+		<select name="nadmin" id="nadmin">
+<?php
+  for ( $i = 0; $i < count ( $userlist ); $i++ ) {
+	echo "<option value=\"".$userlist[$i]['cal_login']."\"";
+	if (! empty ( $nonusertemp_admin ) &&
+            $nonusertemp_admin == $userlist[$i]['cal_login'] ) 
+		echo " selected=\"selected\"";
+	echo ">".$userlist[$i]['cal_fullname']."</option>\n";
+  }
+?>
+		</select>
+	</td></tr>
+</table>
+  <br />
+  <input type="submit" name="action" value="<?php echo $button;?>" />
+  <?php if ( ! empty ( $nid ) ) {  ?>
+    <input type="submit" name="action" value="<?php etranslate("Delete");?>" onclick="return confirm('<?php etranslate("Are you sure you want to delete this entry?"); ?>')" />
+  <?php }  ?>
+  </form>
+<?php } ?>
+<?php print_trailer ( false, true, true ); ?>
+</body>
+</html>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/edit_nonusers_handler.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/edit_nonusers_handler.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/edit_nonusers_handler.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,102 @@
+<?php
+include_once 'includes/init.php';
+load_user_layers ();
+
+if ( ! $is_admin ) {
+  echo "<h2>" . translate("Error") .
+    "</h2>" . translate("You are not authorized") . ".\n";
+  echo "</body>\n</html>";
+  exit;
+}
+$error = "";
+
+if ( $action == "Delete" || $action == translate ("Delete") ) {
+  // delete this nonuser calendar
+  $user = $nid;
+
+  // Get event ids for all events this user is a participant
+  $events = array ();
+  $res = dbi_query ( "SELECT webcal_entry.cal_id " .
+    "FROM webcal_entry, webcal_entry_user " .
+    "WHERE webcal_entry.cal_id = webcal_entry_user.cal_id " .
+    "AND webcal_entry_user.cal_login = '$user'" );
+  if ( $res ) {
+    while ( $row = dbi_fetch_row ( $res ) ) {
+      $events[] = $row[0];
+    }
+  }
+
+  // Now count number of participants in each event...
+  // If just 1, then save id to be deleted
+  $delete_em = array ();
+  for ( $i = 0; $i < count ( $events ); $i++ ) {
+    $res = dbi_query ( "SELECT COUNT(*) FROM webcal_entry_user " .
+      "WHERE cal_id = " . $events[$i] );
+    if ( $res ) {
+      if ( $row = dbi_fetch_row ( $res ) ) {
+        if ( $row[0] == 1 )
+	  $delete_em[] = $events[$i];
+      }
+      dbi_free_result ( $res );
+    }
+  }
+  // Now delete events that were just for this user
+  for ( $i = 0; $i < count ( $delete_em ); $i++ ) {
+    dbi_query ( "DELETE FROM webcal_entry WHERE cal_id = " . $delete_em[$i] );
+  }
+
+  // Delete user participation from events
+  dbi_query ( "DELETE FROM webcal_entry_user WHERE cal_login = '$user'" );
+
+  // Delete any layers other users may have that point to this user.
+  dbi_query ( "DELETE FROM webcal_user_layers WHERE cal_layeruser = '$user'" );
+
+  // Delete user
+  if ( ! dbi_query ( "DELETE FROM webcal_nonuser_cals WHERE cal_login = '$user'" ) )
+     $error = translate ("Database error") . ": " . dbi_error();
+
+} else {
+  if ( $action == "Save" || $action == translate ("Save") ) {
+  // Updating
+    $sql = "UPDATE webcal_nonuser_cals SET ";
+    if ($nlastname) $sql .= " cal_lastname = '$nlastname', ";
+    if ($nfirstname) $sql .= " cal_firstname = '$nfirstname', ";
+    $sql .= "cal_admin = '$nadmin' WHERE cal_login = '$nid'";
+    if ( ! dbi_query ( $sql ) ) {
+      $error = translate ("Database error") . ": " . dbi_error();
+    }
+  } else {
+  // Adding
+    if (preg_match( "/^[\w]+$/", $nid )) {
+      $nid = $NONUSER_PREFIX.$nid;
+      $sql = "INSERT INTO webcal_nonuser_cals " .
+      "( cal_login, cal_firstname, cal_lastname, cal_admin ) " .
+      "VALUES ( '$nid', '$nfirstname', '$nlastname', '$nadmin' )";
+      if ( ! dbi_query ( $sql ) ) {
+        $error = translate ("Database error") . ": " . dbi_error();
+      }
+    } else {
+      $error = translate ("Calendar ID")." ".translate ("word characters only").".";
+    }
+  }
+}
+
+if ( ! empty ( $error ) ) {
+  print_header( '', '', '', true );
+?>
+
+<h2><?php etranslate("Error")?></h2>
+
+<blockquote>
+<?php
+echo $error;
+//if ( $sql != "" )
+//  echo "<br /><br /><b>SQL:</b> $sql";
+//?>
+</blockquote>
+</body>
+</html>
+<?php } else if ( empty ( $error ) ) {
+?><html><head></head><body onload="alert('<?php etranslate("Changes successfully saved");?>'); window.parent.location.href='users.php';">
+</body></html>
+<?php } ?>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/edit_report.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/edit_report.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/edit_report.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,398 @@
+<?php
+/*
+ * $Id: edit_report.php,v 1.24.2.2 2006/01/05 14:22:34 umcesrjones Exp $
+ *
+ * Page Description:
+ * This page will present the HTML form to add or edit a report.
+ *
+ * Input Parameters:
+ * report_id (optional) - the report id of the report to edit.
+ *   If blank, user is adding a new report.
+ * public (optional) - If set to '1' and user is an admin user,
+ *   then we are creating a report for the public user.
+ *
+ * Security:
+ * If system setting $reports_enabled is set to anything other than
+ *   'Y', then don't allow access to this page.
+ * If $allow_view_other is 'N', then do not allow selection of
+ *   participants.
+ * If not an admin user, only report creator (cal_login in webcal_report)
+ *   can edit/delete report.
+ */
+include_once 'includes/init.php';
+load_user_categories ();
+
+$updating_public = false;
+$error = "";
+
+if ( empty ( $reports_enabled ) || $reports_enabled != 'Y' ) {
+  $error = translate ( "You are not authorized" ) . ".";
+}
+
+if ( $is_admin && ! empty ( $public ) && $public_access == "Y" ) {
+  $updating_public = true;
+  $report_user = "__public__";
+} else {
+  $report_user = '';
+}
+
+$report_id = getIntValue ( "report_id", true );
+
+$adding_report = false;
+if ( empty ( $report_id ) ) {
+  $adding_report = true;
+  $report_id = -1;
+  $include_header = 'Y';
+  $report_is_global = 'N';
+  $report_allow_nav = 'Y';
+}
+
+$show_participants = true;
+if ( $single_user == 'Y' || $disable_participants_field == 'Y' ) {
+  $show_participants = false;
+}
+
+if ( $login == "__public__" ) {
+  $error = translate ( "You are not authorized" );
+}
+
+$charset = ( ! empty ( $LANGUAGE )?translate("charset"): "iso-8859-1" );
+
+// Set date range options
+$ranges = array (
+  "0" => translate ( "Tomorrow" ),
+  "1" => translate ( "Today" ),
+  "2" => translate ( "Yesterday" ),
+  "3" => translate ( "Day before yesterday" ),
+  "10" => translate ( "Next week" ),
+  "11" => translate ( "This week" ),
+  "12" => translate ( "Last week" ),
+  "13" => translate ( "Week before last" ),
+  "20" => translate ( "Next week and week after" ),
+  "21" => translate ( "This week and next week" ),
+  "22" => translate ( "Last week and this week" ),
+  "23" => translate ( "Last two weeks" ),
+  "30" => translate ( "Next month" ),
+  "31" => translate ( "This month" ),
+  "32" => translate ( "Last month" ),
+  "33" => translate ( "Month before last" ),
+  "40" => translate ( "Next year" ),
+  "41" => translate ( "This year" ),
+  "42" => translate ( "Last year" ),
+  "43" => translate ( "Year before last" ),
+  "50" => translate ( "Next 14 days" ),
+  "51" => translate ( "Next 30 days" ),
+  "52" => translate ( "Next 60 days" ),
+  "53" => translate ( "Next 90 days" ),
+  "54" => translate ( "Next 180 days" ),
+  "55" => translate ( "Next 365 days" ),
+);
+
+// Get list of users that the current user can see
+if ( empty ( $error ) && $show_participants ) {
+  $userlist = get_my_users ();
+  if ($nonuser_enabled == "Y" ) {
+    $nonusers = get_nonuser_cals ();
+    $userlist = ($nonuser_at_top == "Y") ? array_merge($nonusers, $userlist) : 
+      array_merge($userlist, $nonusers);
+  }
+}
+
+// Default values
+$page_template = "<dl>\${days}</dl>";
+$day_template = "<dt><b>\${date}</b></dt>\n<dd><dl>\${events}</dl></dd>";
+$event_template = "<dt>\${name}</dt>\n<dd>" .
+  "<b>" . translate ( "Date" ) . ":</b> \${date}<br />\n" .
+  "<b>" . translate ( "Time" ) . ":</b> \${time}<br />\n" .
+  "\${description}</dd>\n";
+
+if ( empty ( $error ) && $report_id >= 0 ) {
+  $sql = "SELECT cal_login, cal_report_id, cal_is_global, " .
+    "cal_report_type, cal_include_header, cal_report_name, " .
+    "cal_time_range, cal_user, cal_allow_nav, cal_cat_id, " .
+    "cal_include_empty, cal_show_in_trailer, cal_update_date " .
+    "FROM webcal_report " .
+    "WHERE cal_report_id = $report_id";
+  //echo "SQL: $sql<br /><br />";
+  $res = dbi_query ( $sql );
+  if ( $res ) {
+    if ( $row = dbi_fetch_row ( $res ) ) {
+      $i = 0;
+      $report_login = $row[$i++];
+      $report_id = $row[$i++];
+      $report_is_global = $row[$i++];
+      $report_type = $row[$i++];
+      $report_include_header = $row[$i++];
+      $report_name = $row[$i++];
+      $report_time_range = $row[$i++];
+      $report_user = $row[$i++];
+      $report_allow_nav = $row[$i++];
+      $report_cat_id = $row[$i++];
+      $report_include_empty = $row[$i++];
+      $report_show_in_trailer = $row[$i++];
+      $report_update_date = $row[$i++];
+
+      // Check permissions.
+      if ( $show_participants && ! empty ( $report_user ) ) {
+        $user_is_in_list = false;
+        for ( $i = 0; $i < count ( $userlist ); $i++ ) {
+          if ( $report_user == $userlist[$i]['cal_login'] ) {
+            $user_is_in_list = true;
+          }
+        }
+        if ( ! $user_is_in_list && $report_login != $login && ! $is_admin ) {
+          $error = translate ( "You are not authorized" );
+        }
+      }
+      if ( ! $is_admin && $login != $report_login ) {
+        // If not admin, only creator can edit/delete the event
+        $error = translate ( "You are not authorized" );
+      }
+      
+      // If we are editing a public user report we need to set $updating_public
+      if ( $is_admin && $report_login == "__public__" ) {
+        $updating_public = true;
+       }
+        
+    } else {
+      $error = translate ( "Invalid report id" ) . ": $report_id";
+    }
+    dbi_free_result ( $res );
+  } else {
+    $error = translate("Database error") . ": " . dbi_error ();
+  }
+  $res = dbi_query ( "SELECT cal_template_type, cal_template_text " .
+    "FROM webcal_report_template " .
+    "WHERE cal_report_id = $report_id" );
+  if ( $res ) {
+    while ( $row = dbi_fetch_row ( $res ) ) {
+      if ( $row[0] == 'P' ) {
+        $page_template = $row[1];
+      } else if ( $row[0] == 'D' ) {
+        $day_template = $row[1];
+      } else if ( $row[0] == 'E' ) {
+        $event_template = $row[1];
+      }
+    }
+    dbi_free_result ( $res );
+  }
+} else {
+  // default values for new report
+  $report_login = $login;
+  $report_id = -1;
+  $report_is_global = 'N';
+  $report_type = 'html';
+  $report_include_header = 'Y';
+  $report_name = translate("Unnamed Report");
+  $report_time_range = 11; // current week
+  //$report_user already set
+  $report_allow_nav = 'Y';
+  $report_cat_id = '';
+  $report_include_empty = 'N';
+  $report_show_in_trailer = 'N';
+  $report_update_date = '';
+}
+
+print_header();
+//echo "report_id: $report_id <br />\n";
+//echo "report_name: $report_name <br />\n";
+//echo "report_user: $report_user <br />\n";
+?>
+
+<h2><?php
+if ( $updating_public ) {
+  echo translate($PUBLIC_ACCESS_FULLNAME) . " ";
+}
+if ( $adding_report ) {
+  etranslate("Add Report");
+} else {
+  etranslate("Edit Report");
+}
+?></h2>
+
+<?php
+if ( ! empty ( $error ) ) {
+  echo $error;
+  include_once "includes/trailer.php";
+  exit;
+}
+?>
+
+
+<form action="edit_report_handler.php" method="post" name="reportform">
+<?php if ( $updating_public ) { ?>
+  <input type="hidden" name="public" value="1" />
+<?php } ?>
+<?php if ( ! $adding_report ) { ?>
+  <input type="hidden" name="report_id" value="<?php echo $report_id?>" />
+<?php } ?>
+
+<table style="border-width:0px;">
+ <tr><td>
+  <label for="rpt_name"><?php etranslate("Report name")?>:</label></td><td>
+  <input type="text" name="report_name" id="rpt_name" size="40" maxlength="50"
+    value="<?php echo  $report_name; ?>" />
+ </td></tr>
+<?php
+if ( $show_participants ) {
+  $users = "<option value=\"\"";
+  if ( empty ( $report_user ) ) {
+    $users .= " selected=\"selected\"";
+  }
+  $users .= ">" . translate ( "Current User" ) . "</option>\n";
+  for ( $i = 0; $i < count ( $userlist ); $i++ ) {
+    $users .= "<option value=\"" . $userlist[$i]['cal_login'] . "\"";
+    if ( ! empty ( $report_user ) ) {
+      if ( $report_user == $userlist[$i]['cal_login'] ) {
+        $users .= " selected=\"selected\"";
+      }
+    } 
+    $users .= ">" . $userlist[$i]['cal_fullname'] . "</option>\n";
+  }
+  print "<tr><td><label for=\"rpt_user\">" .
+    translate("User") . ":</label></td>\n";
+  print "<td><select name=\"report_user\" id=\"rpt_user\" size=\"1\">$users\n";
+  print "</select>\n";
+  print "</td></tr>\n";
+}
+?>
+
+<?php if ( $is_admin ) { ?>
+<tr><td><label>
+ <?php etranslate("Global")?>:</label></td><td>
+ <label><input type="radio" name="is_global" value="Y"
+  <?php if ( $report_is_global != 'N' ) echo " checked=\"checked\""; ?> 
+    /> <?php etranslate("Yes") ?></label>   
+  <label><input type="radio" name="is_global" value="N"
+    <?php if ( $report_is_global == 'N' ) echo " checked=\"checked\""; ?>
+    /> <?php etranslate("No") ?></label>
+</td></tr>
+<?php } ?>
+
+<?php
+// The report will always be shown in the trailer for the creator
+// of the report.  For admin users who create a global report,
+// allow option of adding to all users trailer.
+if ( $is_admin ) {
+?>
+<tr><td><label>
+ <?php etranslate("Include link in trailer")?>:</label></td><td>
+ <label><input type="radio" name="show_in_trailer" value="Y"
+  <?php if ( $report_show_in_trailer != 'N' ) echo " checked=\"checked\""; ?> 
+  /> <?php etranslate("Yes") ?></label>   
+ <label><input type="radio" name="show_in_trailer" value="N"
+  <?php if ( $report_show_in_trailer == 'N' ) echo " checked=\"checked\""; ?> 
+  /> <?php etranslate("No") ?></label>
+</td></tr>
+<?php } ?>
+<tr><td><label>
+ <?php etranslate("Include standard header/trailer")?>:    
+   </label></td><td>
+ <label><input type="radio" name="include_header" value="Y"
+   <?php if ( $report_include_header != 'N' ) echo " checked=\"checked\""; ?> 
+   /> <?php etranslate("Yes") ?></label>   
+ <label><input type="radio" name="include_header" value="N"
+   <?php if ( $report_include_header == 'N' ) echo " checked=\"checked\""; ?> 
+   /> <?php etranslate("No") ?></label>
+</td></tr>
+<tr><td>
+ <label for="rpt_time_range"><?php etranslate("Date range")?>:</label></td><td>
+ <select name="time_range" id="rpt_time_range">
+  <?php
+    while ( list ( $num, $descr ) = each ( $ranges ) ) {
+      echo "<option value=\"$num\"";
+      if ( $report_time_range == $num ) {
+        echo " selected=\"selected\"";
+      }
+      echo ">$descr</option>\n";
+    }
+  ?></select>
+</td></tr>
+<tr><td>
+ <label for="rpt_cat_id"><?php etranslate("Category")?>:</label></td><td>
+ <select name="cat_id" id="rpt_cat_id">
+  <option value=""><?php etranslate("None") ?></option>
+  <?php
+    while ( list ( $cat_id, $descr ) = each ( $categories ) ) {
+      echo "<option value=\"$cat_id\"";
+      if ( $report_cat_id == $cat_id ) {
+        echo " selected=\"selected\"";
+      }
+      echo ">$descr</option>\n";
+    }
+  ?></select>
+</td></tr>
+<tr><td><label>
+ <?php etranslate("Include previous/next links")?>:</label></td><td>
+ <label><input type="radio" name="allow_nav" value="Y"
+   <?php if ( $report_allow_nav != 'N' ) echo " checked=\"checked\""; ?> 
+   /> <?php etranslate("Yes") ?></label>   
+ <label><input type="radio" name="allow_nav" value="N"
+   <?php if ( $report_allow_nav == 'N' ) echo " checked=\"checked\""; ?> 
+   /> <?php etranslate("No") ?></label>
+</td></tr>
+<tr><td><label>
+ <?php etranslate("Include empty dates")?>:</label></td><td>
+ <label><input type="radio" name="include_empty" value="Y"
+   <?php if ( $report_include_empty != 'N' ) echo " checked=\"checked\""; ?> 
+   /> <?php etranslate("Yes") ?></label>   
+ <label><input type="radio" name="include_empty" value="N"
+   <?php if ( $report_include_empty == 'N' ) echo " checked=\"checked\""; ?> 
+   /> <?php etranslate("No") ?></label>
+</td></tr>
+</table>
+
+<table style="border-width:0px;">
+ <tr><td> </td><td> </td><td><label>
+  <?php etranslate("Template variables")?></label>
+ </td></tr>
+ <tr><td valign="top"><label>
+  <?php etranslate("Page template")?>:</label></td><td>
+  <textarea rows="12" cols="60" name="page_template">
+    <?php echo htmlentities ( $page_template, ENT_COMPAT, $charset )?>
+  </textarea></td><td style="vertical-align:top;">
+  <tt>${days}</tt><br />
+  <tt>${report_id}</tt><br />
+ </td></tr>
+ <tr><td valign="top"><label>
+  <?php etranslate("Day template")?>:</label></td><td>
+  <textarea rows="12" cols="60" name="day_template">
+    <?php echo htmlentities ( $day_template, ENT_COMPAT, $charset )?>
+  </textarea></td><td style="vertical-align:top;">
+  <tt>${events}</tt><br />
+  <tt>${date}</tt><br />
+  <tt>${fulldate}</tt><br />
+  <tt>${report_id}</tt><br />
+ </td></tr>
+ <tr><td valign="top"><label>
+  <?php etranslate("Event template")?>:</label></td><td>
+  <textarea rows="12" cols="60" name="event_template">
+    <?php echo htmlentities ( $event_template, ENT_COMPAT, $charset )?>
+  </textarea></td><td style="vertical-align:top;">
+  <tt>${name}</tt><br />
+  <tt>${description}</tt><br />
+  <tt>${date}</tt><br />
+  <tt>${fulldate}</tt><br />
+  <tt>${time}</tt><br />
+  <tt>${starttime}</tt><br />
+  <tt>${endtime}</tt><br />
+  <tt>${duration}</tt><br />
+  <tt>${priority}</tt><br />
+  <tt>${href}</tt><br />
+  <tt>${user}</tt><br />
+  <tt>${report_id}</tt> 
+ </td></tr>
+ <tr><td colspan="2">
+  <input type="submit" value="<?php etranslate("Save")?>" />
+<?php if ( ! $adding_report ) { ?>
+    <input type="submit" name="action" 
+  value="<?php etranslate("Delete");?>"
+  onclick="return confirm('<?php etranslate("Are you sure you want to delete this report?")?>');" />
+<?php } ?>
+ </td></tr>
+</table>
+</form>
+
+<?php print_trailer(); ?>
+</body>
+</html>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/edit_report_handler.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/edit_report_handler.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/edit_report_handler.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,262 @@
+<?php
+/*
+ * $Id: edit_report_handler.php,v 1.11.2.1 2006/01/05 14:22:34 umcesrjones Exp $
+ *
+ * Page Description:
+ *	This page will handle the form submission from edit_report.php
+ *	and either add, update or delete a report.
+ *
+ * Input Parameters:
+ *	report_id (optional) - the report id of the report to edit.
+ *	  If blank, user is adding a new report.
+ *	public (optional) - If set to '1' and user is an admin user,
+ *	  then we are creating a report for the public user.
+ *	report_name
+ *	report_user
+ *	is_global (Y or N)
+ *	include_header (Y or N)
+ *	time_range
+ *	cat_id
+ *	allow_nav
+ *	include_empty
+ *	show_in_trailer
+ *	action (if 'delete' button pressed)
+ *	page_template
+ *	day_template
+ *	event_template
+ *
+ * Security:
+ *	Same as in edit_report.php...
+ *	If system setting $reports_enabled is set to anything other than
+ *	  'Y', then don't allow access to this page.
+ *	If $allow_view_other is 'N', then do not allow selection of
+ *	  participants.
+ *	Can only delete/edit an event if you are the creator of the event
+ *	  or you are an admin user.
+ */
+include_once 'includes/init.php';
+load_user_categories ();
+
+$error = "";
+$report_id = getIntValue ( "report_id", true );
+
+if ( empty ( $reports_enabled ) || $reports_enabled != 'Y' ) {
+  $error = translate ( "You are not authorized" ) . ".";
+}
+
+$updating_public = false;
+if ( $is_admin && ! empty ( $public ) && $public_access == "Y" ) {
+  $updating_public = true;
+}
+
+if ( $single_user == 'Y' || $disable_participants_field == 'Y' ) {
+  $report_user = '';
+}
+
+if ( ! $is_admin )
+  $is_global = 'N';
+
+$adding_report = ( empty ( $report_id ) || $report_id <= 0 );
+
+// Check permissions
+// Can only edit/delete if you created the event or your are an admin.
+if ( empty ( $error ) && $single_user != 'N' && ! empty ( $report_id ) &&
+  $report_id > 0 && ! $is_admin ) {
+  $res = dbi_query ( "SELECT cal_login FROM webcal_report " .
+     "WHERE report_id = $report_id" );
+  if ( $res ) {
+    if ( $row = dbi_fetch_row ( $res ) ) {
+      if ( $row[0] != $login ) {
+        $error = translate("You are not authorized");
+      }
+    } else {
+      $error = "No such report id";
+    }
+    dbi_free_result ( $res );
+  } else {
+    $error = translate("Database error" ) . ": " . dbi_error ();
+  }
+}
+
+// Validate templates to make sure the required variables are found.
+// Page template must include ${days}
+if ( empty ( $error ) ) {
+  if ( ! strstr ( $page_template, '${days}' ) ) {
+    $error = "<p>" . translate ( "Error" ) . " [" .
+      translate ( "Page template" ) . "]: " .
+      str_replace ( " N ", ' <tt>${days}</tt> ',
+        translate ( "Variable N not found" ) ) .
+      ".";
+  }
+  // Day template must include ${events}
+  if ( ! strstr ( $day_template, '${events}' ) ) {
+    if ( ! empty ( $error ) )
+      $error .= "</p>";
+    $error .= "<p>" . translate ( "Error" ) . " [" .
+      translate ( "Day template" ) . "]: " .
+      str_replace ( " N ", ' <tt>${events}</tt> ',
+        translate ( "Variable N not found" ) ) .
+      ".";
+  }
+  // Event template must include ${name}
+  if ( ! strstr ( $event_template, '${name}' ) ) {
+    if ( ! empty ( $error ) )
+      $error .= "</p>";
+    $error .= "<p>" . translate ( "Error" ) . " [" .
+      translate ( "Event template" ) . "]: " .
+      str_replace ( " N ", ' <tt>${name}</tt> ',
+        translate ( "Variable N not found" ) ) .
+      ".";
+  }
+}
+
+if ( empty ( $error ) && ! empty ( $report_id ) &&
+  ( $action == "Delete" || $action == translate ( "Delete" ) ) ) {
+  if ( ! dbi_query ( "DELETE FROM webcal_report_template " .
+    "WHERE cal_report_id = $report_id" ) )
+    $error = translate("Database error") . ": " . dbi_error ();
+  if ( empty ( $error ) &
+    ! dbi_query ( "DELETE FROM webcal_report " .
+    "WHERE cal_report_id = $report_id" ) )
+    $error = translate("Database error") . ": " . dbi_error ();
+  // send back to main report listing page
+  if ( empty ( $error ) )
+    do_redirect ( "report.php" );
+}
+
+if ( empty ( $error ) ) {
+  $names = array ();
+  $values = array ();
+
+  $names[] = "cal_login";
+  $values[] = ( $updating_public ? "'__public__'" : "'$login'" );
+
+  $names[] .= "cal_update_date";
+  $values[] = date ( "Ymd" );
+
+  $names[] = "cal_report_type";
+  $values[] = "'html'";
+
+  $names[] = "cal_report_name";
+  if ( empty ( $report_name ) || trim ( $report_name ) == '' )
+    $report_name = translate ( "Unnamed Report" );
+  $values[] = "'$report_name'";
+
+  $names[] = "cal_user";
+  if ( ! $is_admin || empty ( $report_user ) ) {
+    $values[] = "NULL";
+  } else {
+    $values[] = "'$report_user'";
+  }
+
+  $names[] = "cal_include_header";
+  if ( empty ( $include_header ) || $include_header != 'Y' ) {
+    $values[] = "'N'";
+  } else {
+    $values[] = "'Y'";
+  }
+
+  $names[] = "cal_time_range";
+  $values[] = ( ! isset ( $time_range ) ? 11 : $time_range );
+
+  $names[] = "cal_cat_id";
+  $values[] = ( empty ( $cat_id ) ? "NULL" : $cat_id );
+
+  $names[] = "cal_allow_nav";
+  $values[] = ( empty ( $allow_nav ) || $allow_nav != 'Y' ) ? "'N'" : "'Y'";
+
+  $names[] = "cal_include_empty";
+  $values[] = ( empty ( $include_empty ) || $include_empty != 'Y' ) ? "'N'" : "'Y'";
+
+  $names[] = "cal_is_global";
+  $values[] = ( empty ( $is_global ) || $is_global != 'Y' ) ? "'N'" : "'Y'";
+
+  $names[] = "cal_show_in_trailer";
+  $values[] = ( empty ( $show_in_trailer ) || $show_in_trailer != 'Y' ) ? "'N'" : "'Y'";
+
+  if ( $adding_report ) {
+    $res = dbi_query ( "SELECT MAX(cal_report_id) FROM webcal_report" );
+    $newid = 1;
+    if ( $res ) {
+      if ( $row = dbi_fetch_row ( $res ) ) {
+        $newid = $row[0] + 1;
+      }
+      dbi_free_result ( $res );
+    }
+    $names[] = "cal_report_id";
+    $values[] = $newid;
+    $sql = "INSERT INTO webcal_report ( ";
+    for ( $i = 0; $i < count ( $names ); $i++ ) {
+      if ( $i > 0 )
+        $sql .= ", ";
+      $sql .= $names[$i];
+    }
+    $sql .= " ) VALUES ( ";
+    for ( $i = 0; $i < count ( $values ); $i++ ) {
+      if ( $i > 0 )
+        $sql .= ", ";
+      $sql .= $values[$i];
+    }
+    $sql .= " )";
+    $report_id = $newid;
+  } else {
+    $sql = "UPDATE webcal_report SET ";
+    for ( $i = 0; $i < count ( $names ); $i++ ) {
+      if ( $i > 0 )
+        $sql .= ", ";
+      $sql .= "$names[$i] = $values[$i]";
+    }
+    $sql .= " WHERE cal_report_id = $report_id";
+  }
+  //echo "SQL: $sql"; exit;
+}
+
+
+if ( empty ( $error ) ) {
+  if ( ! dbi_query ( $sql ) ) {
+    $error = translate ( "Database error" ) . ": " . dbi_error ();
+  }
+}
+
+if ( empty ( $error ) ) {
+  if ( ! $adding_report ) {
+    if ( ! dbi_query ( "DELETE FROM webcal_report_template " .
+      "WHERE cal_report_id = $report_id" ) )
+      $error = translate("Database error") . ": " . dbi_error ();
+  }
+  if ( empty ( $error ) &&
+    ! dbi_query ( "INSERT INTO webcal_report_template " .
+    "( cal_report_id, cal_template_type, cal_template_text ) VALUES ( " .
+    "$report_id, 'P', '$page_template' )" ) )
+    $error = translate("Database error") . ": " . dbi_error ();
+  if ( empty ( $error ) &&
+    ! dbi_query ( "INSERT INTO webcal_report_template " .
+    "( cal_report_id, cal_template_type, cal_template_text ) VALUES ( " .
+    "$report_id, 'D', '$day_template' )" ) )
+    $error = translate("Database error") . ": " . dbi_error ();
+  if ( empty ( $error ) &&
+    ! dbi_query ( "INSERT INTO webcal_report_template " .
+    "( cal_report_id, cal_template_type, cal_template_text ) VALUES ( " .
+    "$report_id, 'E', '$event_template' )" ) )
+    $error = translate("Database error") . ": " . dbi_error ();
+}
+
+if ( empty ( $error ) ) {
+  if ( $updating_public )
+    do_redirect ( "report.php?public=1" );
+  else
+    do_redirect ( "report.php" );
+  exit;
+}
+
+print_header();
+?>
+
+<h2><?php etranslate("Error")?></h2>
+<blockquote>
+<?php echo  $error ; ?>
+</blockquote>
+
+<?php print_trailer(); ?>
+</body>
+</html>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/edit_template.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/edit_template.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/edit_template.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,99 @@
+<?php
+/*
+ * $Id: edit_template.php,v 1.9.2.1 2005/11/28 22:22:51 cknudsen Exp $
+ *
+ * Page Description:
+ *	This page will present the HTML form to edit an entry
+ *	in the cal_report table, and this page will also process the
+ *	form.
+ *	This is only used for editing the custom header/trailer.
+ *	The report_id is always 0.
+ *
+ * Input Parameters:
+ *	type - "header" or "trailer"
+ *
+ * Security:
+ *	Admin permissions are checked in connect.php.
+ */
+include_once 'includes/init.php';
+
+$report_id = 0;
+$error = '';
+
+$type = getValue ( "type", "S|H|T", true );
+$cur = '';
+$found = false;
+
+// Get existing value.
+$res = dbi_query ( "SELECT cal_template_text " .
+  "FROM webcal_report_template " .
+  "WHERE cal_template_type = '$type' AND caL_report_id = 0" );
+if ( $res ) {
+  if ( $row = dbi_fetch_row ( $res ) ) {
+    $cur = $row[0];
+    $found = true;
+  }
+  dbi_free_result ( $res );
+}
+
+if ( empty ( $REQUEST_METHOD ) )
+  $REQUEST_METHOD = $_SERVER['REQUEST_METHOD'];
+
+// Handle form submission
+if ( $REQUEST_METHOD == 'POST' ) {
+  $template = getPostValue ( "template" );
+  //echo "Template: " .  $template  . "<br />\n"; exit;
+  if ( $found ) {
+    $sql = "UPDATE webcal_report_template " .
+      "SET cal_template_text = '$template' " .
+      "WHERE cal_template_type = '$type' AND cal_report_id = 0";
+  } else {
+    $sql = "INSERT INTO webcal_report_template " .
+      "( cal_template_type, cal_report_id, cal_template_text ) " .
+      "VALUES ( '$type', 0, '$template' )";
+  }
+  if ( ! dbi_query ( $sql ) ) {
+    $error = translate("Database error") . ": " . dbi_error ();
+  } else {
+    //echo "SQL: $sql <br />\n";
+    echo "<html>\n<head>\n</head>\n<body onload=\"window.close();\">\nDone</body>\n</html>";
+    exit;
+  }
+}
+
+print_header( '', '', '', true );
+//echo "report_id: $report_id <br />\n";
+//echo "report_name: $report_name <br />\n";
+//echo "report_user: $report_user <br />\n";
+?>
+
+<h2><?php
+if ( $type == 'S' )
+  etranslate("Edit Custom Script/Stylesheet");
+else if ( $type == 'H' )
+  etranslate("Edit Custom Header");
+else
+  etranslate("Edit Custom Trailer");
+?></h2>
+
+<?php
+if ( ! empty ( $error ) ) {
+  echo "<h2>" . translate("Error") . "</h2>\n" .
+    $error . "\n";
+} else {
+?>
+<form action="edit_template.php" method="post" name="reportform">
+
+<input type="hidden" name="type" value="<?php echo $type;?>" />
+<textarea rows="15" cols="60" name="template"><?php echo htmlspecialchars ( $cur )?></textarea>
+
+<br />
+<input type="button" value="<?php etranslate("Cancel")?>" onclick="window.close();" />
+<input type="submit" value="<?php etranslate("Save")?>" />
+</form>
+
+<?php }
+	print_trailer ( false, true, true );
+?>
+</body>
+</html>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/edit_user.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/edit_user.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/edit_user.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,143 @@
+<?php
+/* $Id: edit_user.php,v 1.41 2005/02/26 06:49:45 cknudsen Exp $ */
+include_once 'includes/init.php';
+
+if ( ! $is_admin )
+  $user = $login;
+
+// cannot edit public user.
+if ( $user == '__public__' )
+  $user = $login;
+
+// don't allow them to create new users if it's not allowed
+if ( empty ( $user ) ) {
+  // asking to create a new user
+  if ( ! $is_admin ) {
+    // must be admin...
+    do_redirect ( empty ( $STARTVIEW ) ? "month.php" : "$STARTVIEW" );
+    exit;
+  }
+  if ( ! $admin_can_add_user ) {
+    // if adding users is not allowed...
+    do_redirect ( empty ( $STARTVIEW ) ? "month.php" : "$STARTVIEW" );
+    exit;
+  }
+}
+
+$disableCustom = true;
+
+print_header ( '', '', '', $disableCustom );
+?>
+<table style="border-width:0px;">
+<tr><td style="vertical-align:top; width:50%;">
+<h2><?php
+	if ( ! empty ( $user ) ) {
+		user_load_variables ( $user, "u" );
+		echo translate("Edit User");
+	} else {
+		echo translate("Add User");
+	}
+?></h2>
+<form action="edit_user_handler.php" method="post">
+<input type="hidden" name="formtype" value="edituser" />
+<?php
+	if ( empty ( $user ) ) {
+		echo "<input type=\"hidden\" name=\"add\" value=\"1\" />\n";
+	}
+?>
+<table style="border-width:0px;">
+	<tr><td>
+		<label for="username"><?php etranslate("Username")?>:</label></td><td>
+  <?php
+    if ( ! empty ( $user ) ) {
+      if ( $is_admin )
+        echo $user . "<input name=\"user\" type=\"hidden\" value=\"" .
+          htmlspecialchars ( $user ) . "\" />\n";
+      else
+        echo $user;
+    } else {
+      echo "<input type=\"text\" name=\"user\" id=\"username\" size=\"25\" maxlength=\"25\" />\n";
+    }
+?>
+	</td></tr>
+	<tr><td>
+		<label for="ufirstname"><?php etranslate("First Name")?>:</label></td><td>
+		<input type="text" name="ufirstname" id="ufirstname" size="20" value="<?php echo empty ( $ufirstname ) ? '' : htmlspecialchars ( $ufirstname );?>" />
+	</td></tr>
+	<tr><td>
+		<label for="ulastname"><?php etranslate("Last Name")?>:</label></td><td>
+		<input type="text" name="ulastname" id="ulastname" size="20" value="<?php echo empty ( $ulastname ) ? '' : htmlspecialchars ( $ulastname );?>" />
+	</td></tr>
+	<tr><td>
+		<label for="uemail"><?php etranslate("E-mail address")?>:</label></td><td>
+		<input type="text" name="uemail" id="uemail" size="20" value="<?php echo empty ( $uemail ) ? '' : htmlspecialchars ( $uemail );?>" />
+	</td></tr>
+<?php if ( empty ( $user ) && ! $use_http_auth && $user_can_update_password ) { ?>
+	<tr><td>
+		<label for="pass1"><?php etranslate("Password")?>:</label></td><td>
+		<input name="upassword1" id="pass1" size="15" value="" type="password" />
+	</td></tr>
+	<tr><td>
+		<label for="pass2"><?php etranslate("Password")?> (<?php etranslate("again")?>):</label></td><td>
+		<input name="upassword2" id="pass2" size="15" value="" type="password" />
+	</td></tr>
+<?php }
+if ( $is_admin ) { ?>
+	<tr><td style="font-weight:bold;">
+		<?php etranslate("Admin")?>:</td><td>
+		<label><input type="radio" name="uis_admin" value="Y"<?php if ( ! empty ( $uis_admin ) && $uis_admin == "Y" ) echo " checked=\"checked\"";?> /> <?php etranslate("Yes")?></label> 
+		<label><input type="radio" name="uis_admin" value="N"<?php if ( empty ( $uis_admin ) || $uis_admin != "Y" ) echo " checked=\"checked\"";?> /> <?php etranslate("No")?></label>
+	</td></tr>
+<?php } //end if ($is_admin ) ?>
+	<tr><td colspan="2">
+		<?php if ( $demo_mode == "Y" ) { ?>
+			<input type="button" value="<?php etranslate("Save")?>" onclick="alert('<?php etranslate("Disabled for demo")?>')" />
+			<?php if ( $is_admin && ! empty ( $user ) ) { ?>
+				<input type="submit" name="action" value="<?php etranslate("Delete")?>" onclick="alert('<?php etranslate("Disabled for demo")?>')" />
+			<?php } //end if ( $demo_mode == "Y" ) ?>
+		<?php } else { ?>
+			<input type="submit" value="<?php etranslate("Save")?>" />
+			<?php if ( $is_admin && ! empty ( $user ) ) {
+				if ( $admin_can_delete_user ) ?>
+				<input type="submit" name="action" value="<?php etranslate("Delete")?>" onclick="return confirm('<?php etranslate("Are you sure you want to delete this user?"); ?>')" />
+			<?php } ?>
+		<?php } ?>
+	</td></tr>
+</table>
+</form>
+
+<?php if ( ! empty ( $user ) && ! $use_http_auth &&
+  ( isset ( $user_can_update_password ) && $user_can_update_password ) ) { ?>
+</td><td>  </td>
+<td style="vertical-align:top;">
+
+<h2><?php etranslate("Change Password")?></h2>
+<form action="edit_user_handler.php" method="post">
+<input type="hidden" name="formtype" value="setpassword" />
+<?php if ( $is_admin ) { ?>
+	<input type="hidden" name="user" value="<?php echo $user;?>" />
+<?php } ?>
+<table style="border-width:0px;">
+	<tr><td>
+		<label for="newpass1"><?php etranslate("New Password")?>:</label></td><td>
+		<input name="upassword1" id="newpass1" type="password" size="15" />
+	</td></tr>
+	<tr><td>
+		<label for="newpass2"><?php etranslate("New Password")?> (<?php etranslate("again")?>):</label></td><td>
+		<input name="upassword2" id="newpass2" type="password" size="15" />
+	</td></tr>
+	<tr><td colspan="2">
+		<?php if ( $demo_mode == "Y" ) { ?>
+			<input type="button" value="<?php etranslate("Set Password")?>" onclick="alert('<?php etranslate("Disabled for demo")?>')" />
+		<?php } else { ?>
+			<input type="submit" value="<?php etranslate("Set Password")?>" />
+		<?php } ?>
+	</td></tr>
+</table>
+</form>
+<?php } ?>
+</td></tr></table>
+
+<?php print_trailer ( false, true, true ); ?>
+</body>
+</html>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/edit_user_handler.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/edit_user_handler.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/edit_user_handler.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,93 @@
+<?php
+/* $Id */
+
+// There is the potential for a lot of mischief from users trying to
+// access this file in ways the shouldn't.  Users may try to type in
+// a URL to get around functions that are not being displayed on the
+// web page to them. 
+
+include_once 'includes/init.php';
+load_user_layers ();
+
+$error = "";
+if ( ! $is_admin )
+  $user = $login;
+$action = getValue ( "action" );
+
+// Handle delete
+if ( ( $action == "Delete" || $action == translate ("Delete") ) &&
+  $formtype == "edituser" ) {
+  if ( $is_admin ) {
+    if ( $admin_can_delete_user ) {
+      user_delete_user ( $user ); // will also delete user's events
+    } else {
+      $error = translate("Deleting users not supported") . ".";
+    }
+  } else {
+    $error = translate("You are not authorized") . ".";
+  }
+}
+
+// Handle update of password
+else if ( $formtype == "setpassword" && strlen ( $user ) ) {
+  if ( $upassword1 != $upassword2 ) {
+    $error = translate("The passwords were not identical") . ".";
+  } else if ( strlen ( $upassword1 ) ) {
+    if ( $user_can_update_password )
+      user_update_user_password ( $user, $upassword1 );
+    else
+      $error = translate("You are not authorized") . ".";
+  } else
+    $error = translate("You have not entered a password") . ".";
+}
+
+// Handle update of user info
+else if ( $formtype == "edituser" ) {
+  if ( strlen ( $add ) && $is_admin ) {
+    if ( $upassword1 != $upassword2 ) { 
+      $error = translate( "The passwords were not identical" ) . "."; 
+    } else {
+      if ( addslashes ( $user ) != $user ) {
+        // This error should get caught before here anyhow, so
+        // no need to translate this.  This is just in case :-)
+        $error = "Invalid characters in login.";
+      } else if ( empty ( $user ) || $user == "" ) {
+        // Username can not be blank. This is currently the only place that 
+        // calls user_add_user that is located in $user_inc
+        $error = translate( "Username can not be blank" ) . ".";
+      } else {
+        user_add_user ( $user, $upassword1, $ufirstname, $ulastname,
+          $uemail, $uis_admin );
+      }
+    }
+  } else if ( strlen ( $add ) && ! $is_admin ) {
+    $error = translate("You are not authorized") . ".";
+  } else {
+    // Don't allow a user to change themself to an admin by setting
+    // uis_admin in the URL by hand.  They must be admin beforehand.
+    if ( ! $is_admin )
+      $uis_admin = "N";
+    user_update_user ( $user, $ufirstname, $ulastname,
+      $uemail, $uis_admin );
+  }
+}
+
+$nextURL = empty ( $is_admin ) ? "adminhome.php" : "users.php";
+
+if ( ! empty ( $error ) ) {
+  print_header( '', '', '', true );
+
+?>
+<h2><?php etranslate("Error")?></h2>
+<blockquote>
+<?php
+echo $error;
+//if ( $sql != "" )
+//  echo "<br /><br /><strong>SQL:</strong> $sql";
+//?>
+</blockquote>
+</body>
+</html>
+<?php } else if ( empty ($error) ) {
+?><html><head></head><body onload="alert('<?php etranslate("Changes successfully saved");?>'); window.parent.location.href='<?php echo $nextURL;?>';">
+</body></html><?php } ?>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/export.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/export.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/export.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,149 @@
+<?php
+/*
+ * Page Description:
+ *	This page will present the user with forms for exporting calendar
+ *  events.
+ *
+ * Input Parameters:
+ *	None
+ *
+ */
+include_once 'includes/init.php';
+
+if ( empty ( $login) || $login == "__public__" ) {
+  // do not allow public access
+  do_redirect ( empty ( $STARTVIEW ) ? "month.php" : "$STARTVIEW" );
+  exit;
+}
+
+$INC = array('js/export.php');
+print_header($INC);
+?>
+
+<h2><?php etranslate("Export")?></h2>
+
+<form action="export_handler.php" method="post" name="exportform">
+<table style="border-width:0px;">
+<tr><td>
+	<label for="exformat"><?php etranslate("Export format")?>:</label></td><td>
+	<select name="format" id="exformat">
+		<option value="ical">iCalendar</option>
+		<option value="vcal">vCalendar</option>
+		<option value="pilot-csv">Pilot-datebook CSV (<?php etranslate("Palm Pilot")?>)</option>
+		<option value="pilot-text">Install-datebook (<?php etranslate("Palm Pilot")?>)</option>
+	</select>
+</td></tr>
+<?php  // Only include layers if they are enabled.
+	if ( ! empty ( $LAYERS_STATUS ) && $LAYERS_STATUS == 'Y' ) {
+?>
+<tr><td> 
+	</td><td>
+	<input type="checkbox" name="include_layers" id="include_layers" value="y" />
+	<label for="include_layers"><?php etranslate("Include all layers")?></label>
+</td></tr>
+<?php } ?>
+
+<tr><td> 
+	</td><td>
+	<input type="checkbox" name="use_all_dates" id="exportall" value="y" />
+	<label for="exportall"><?php etranslate("Export all dates")?></label>
+</td></tr>
+<tr><td>
+	<label><?php etranslate("Start date")?>:</label></td><td>
+	<select name="fromday">
+		<?php
+			$day = date ( "d" );
+			for ( $i = 1; $i <= 31; $i++ ) echo "<option" . ( $i == $day ? " selected=\"selected\"" : "" ) . ">$i</option>\n";
+		?>
+	</select>
+	<select name="frommonth">
+		<?php
+			$month = date ( "m" );
+			$year = date ( "Y" );
+			for ( $i = 1; $i <= 12; $i++ ) {
+				$m = month_short_name ( $i - 1 );
+				print "<option value=\"$i\"" . ( $i == $month ? " selected=\"selected\"" : "" ) . ">$m</option>\n";
+			}
+		?>
+	</select>
+	<select name="fromyear">
+		<?php
+			$year = date ( "Y" ) - 1;
+			for ( $i = -1; $i < 5; $i++ ) {
+				$y = date ( "Y" ) + $i;
+				print "<option value=\"$y\"" . ( $y == $year ? " selected=\"selected\"" : "" ) . ">$y</option>\n";
+			}
+		?>
+	</select>
+	<input type="button" onclick="selectDate('fromday','frommonth','fromyear', '', event)" value="<?php etranslate("Select")?>..." />
+</td></tr>
+
+<tr><td>
+	<label><?php etranslate("End date")?>:</label></td><td>
+	<select name="endday">
+		<?php
+			$day = date ( "d" );
+			for ( $i = 1; $i <= 31; $i++ ) echo "<option" . ( $i == $day ? " selected=\"selected\"" : "" ) . ">$i</option>\n";
+		?>
+	</select>
+	<select name="endmonth">
+		<?php
+			$month = date ( "m" );
+			$year = date ( "Y" );
+			for ( $i = 1; $i <= 12; $i++ ) {
+				$m = month_short_name ( $i - 1 );
+				print "<option value=\"$i\"" . ( $i == $month ? " selected=\"selected\"" : "" ) . ">$m</option>\n";
+			}
+		?>
+	</select>
+	<select name="endyear">
+		<?php
+			$year = date ( "Y" ) + 1;
+			for ( $i = -1; $i < 5; $i++ ) {
+				$y = date ( "Y" ) + $i;
+				print "<option value=\"$y\"" . ( $y == $year ? " selected=\"selected\"" : "" ) . ">$y</option>\n";
+			}
+		?>
+	</select>
+	<input type="button" onclick="selectDate('endday','endmonth','endyear', '', event)" value="<?php etranslate("Select")?>..." />
+</td></tr>
+
+<tr><td>
+	<label><?php etranslate("Modified since")?>:</label></td><td>
+	<select name="modday">
+		<?php
+			$week_ago = mktime ( 0, 0, 0, date ( "m" ), date ( "d" ) - 7, date ( "Y" ) );
+			$day = date ( "d", $week_ago );
+			for ( $i = 1; $i <= 31; $i++ ) echo "<option" . ( $i == $day ? " selected=\"selected\"" : "" ) . ">$i</option>\n";
+		?>
+	</select>
+	<select name="modmonth">
+		<?php
+			$month = date ( "m", $week_ago );
+			$year = date ( "Y", $week_ago );
+			for ( $i = 1; $i <= 12; $i++ ) {
+				$m = month_short_name ( $i - 1 );
+				print "<option value=\"$i\"" . ( $i == $month ? " selected=\"selected\"" : "" ) . ">$m</option>\n";
+			}
+		?>
+	</select>
+	<select name="modyear">
+		<?php
+			$year = date ( "Y", $week_ago );
+			for ( $i = -1; $i < 5; $i++ ) {
+				$y = date ( "Y" ) + $i;
+				print "<option value=\"$y\"" . ( $y == $year ? " selected=\"selected\"" : "" ) . ">$y</option>\n";
+			}
+		?>
+	</select>
+	<input type="button" onclick="selectDate('modday','modmonth','modyear', '', event)" value="<?php etranslate("Select")?>..." />
+</td></tr>
+
+<tr><td colspan="2">
+	<input type="submit" value="<?php etranslate("Export");?>" />
+</td></tr>
+</table>
+</form>
+<?php print_trailer (); ?>
+</body>
+</html>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/export_handler.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/export_handler.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/export_handler.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,1077 @@
+<?php
+/*
+ * $Id: export_handler.php,v 1.29.2.5 2006/01/28 22:40:51 umcesrjones Exp $
+ *
+ * Description:
+ *	Handler for exporting webcalendar events to various formats.
+ *
+ * Comments:
+ *	All-day events and untimed events are treated differently.  An
+ *	all-day event is a 12am event with duration 24 hours.  We store
+ *	untimed events with a start time of -1 in the webcalendar database.
+ *
+ *********************************************************************/
+include_once 'includes/init.php';
+
+if ( ! empty ( $PROGRAM_VERSION ) ) {
+  $prodid = "PRODID:-//WebCalendar-$PROGRAM_VERSION";
+} else if ( preg_match ( "/v(\d\S+) /", $GLOBALS['PROGRAM_NAME'], $matches ) ) {
+  $prodid = "PRODID:-//WebCalendar-$matches[1]";
+} else {
+  $prodid = "PRODID:-//WebCalendar-UnknownVersion";
+}
+
+if ( empty ( $user ) || $user == $login )
+  load_user_layers ();
+
+function export_get_event_entry($id) {
+  global $use_all_dates, $include_layers, $fromyear,$frommonth,$fromday,
+    $endyear,$endmonth,$endday,$modyear,$modmonth,$modday,$login;
+  global $DISPLAY_UNAPPROVED, $layers;
+
+  // We export repeating events only with the pilot-datebook CSV format
+  $sql = "SELECT webcal_entry.cal_id, webcal_entry.cal_name " .
+    ", webcal_entry.cal_priority, webcal_entry.cal_date " .
+    ", webcal_entry.cal_time " .
+    ", webcal_entry_user.cal_status, webcal_entry.cal_create_by " .
+    ", webcal_entry.cal_access, webcal_entry.cal_duration " .
+    ", webcal_entry.cal_description " .
+    ", webcal_entry_user.cal_category " .
+    "FROM webcal_entry, webcal_entry_user ";
+
+  if ($id == "all") {
+      $sql .= "WHERE webcal_entry.cal_id = webcal_entry_user.cal_id AND " .
+	" ( webcal_entry_user.cal_login = '" . $login . "'";
+      if ( ! empty ( $user ) && $user != $login ) {
+        $sql .= " OR webcal_entry_user.cal_login = '$user'";
+      } else if ( $include_layers && $layers ) {
+        foreach ( $layers as $layer ) {
+          $sql .= " OR webcal_entry_user.cal_login = '" .
+            $layer['cal_layeruser'] . "'";
+        }
+      }
+      $sql .= " ) ";
+
+	if (!$use_all_dates) {
+	  $startdate = sprintf ( "%04d%02d%02d", $fromyear, $frommonth, $fromday );
+	  $enddate = sprintf ( "%04d%02d%02d", $endyear, $endmonth, $endday );
+	  $sql .= " AND webcal_entry.cal_date >= $startdate " .
+	    "AND webcal_entry.cal_date <= $enddate";
+	  $moddate = sprintf ( "%04d%02d%02d", $modyear, $modmonth, $modday );
+	  $sql .= " AND webcal_entry.cal_mod_date >= $moddate";
+	}
+  } else {
+      $sql .= "WHERE webcal_entry.cal_id = '$id' AND " .
+	"webcal_entry_user.cal_id = '$id' AND " .
+	"( webcal_entry_user.cal_login = '" . $login . "'";
+        // TODO: add support for user in URL so we can export from other
+        // calendars, particularly non-user calendars.
+	//"webcal_entry_user.cal_id = '$id'";
+      if ( ! empty ( $user )  && $user != $login ) {
+        $sql .= " OR webcal_entry_user.cal_login = '$user'";
+      } else if ( $layers ) {
+        foreach ( $layers as $layer ) {
+          $sql .= " OR webcal_entry_user.cal_login = '" .
+             $layer['cal_layeruser'] . "'";
+        }
+      }
+      $sql .= " ) ";
+  } //end if $id=all
+
+  if ( $DISPLAY_UNAPPROVED == "N"  || $login == "__public__" )
+    $sql .= " AND webcal_entry_user.cal_status = 'A'";
+  else
+    $sql .= " AND webcal_entry_user.cal_status IN ('W','A')";
+
+  $sql .= " ORDER BY webcal_entry.cal_date";
+
+  //echo "SQL: $sql <p>";
+  $res = dbi_query ( $sql );
+
+  return $res;
+} //end function export_get_event_entry($id)
+
+function export_quoted_printable_encode($car) {
+  $res = "";
+
+  if ((ord($car) >= 33 && ord($car) <= 60) || (ord($car) >= 62 && ord($car) <= 126) || 
+      ord($car) == 9 || ord($car) == 32) {
+      $res = $car;
+  } else {
+      $res = sprintf("=%02X", ord($car));
+  } //end if
+
+  return $res;
+} //end function export_quoted_printable_encode
+
+function export_fold_lines($string, $encoding="none", $limit=76) {
+  $len = strlen($string);
+  $fold = $limit; 
+  $res = array();
+  $row = "";
+  $enc = "";
+  $lwsp = 0; // position of the last linear whitespace (where to fold)
+  $res_ind = 0; // row index
+  $start_encode = 0; // we start encoding only after the ":" caracter is encountered
+
+  if (strcmp($encoding,"quotedprintable") == 0)
+    $fold--; // must take into account the soft line break
+
+  for ($i = 0; $i < $len; $i++) {
+      $enc = $string[$i];
+
+	if ($start_encode) {
+	  if (strcmp($encoding,"quotedprintable") == 0)
+	    $enc = export_quoted_printable_encode($string[$i]);
+	  else if (strcmp($encoding,"utf8") == 0)
+	    $enc = utf8_encode($string[$i]);
+	}
+
+	if ($string[$i] == ":")
+	  $start_encode = 1;
+
+	if ((strlen($row) + strlen($enc)) > $fold) {
+	  $delta = 0;
+
+	  if ($lwsp == 0)
+	    $lwsp = $fold - 1; // the folding will occur in the middle of a word
+
+	  if ($row[$lwsp] == " " || $row[$lwsp] == "\t")
+	    $delta = -1;
+
+	  $res[$res_ind] = substr($row, 0, $lwsp+1+$delta);
+
+	  if (strcmp($encoding,"quotedprintable") == 0)
+	    $res[$res_ind] .= "="; // soft line break;
+
+	  $row = substr($row, $lwsp+1);
+
+	  $row = " " . $row;
+
+	  if ($delta == -1 && strcmp($encoding,"utf8") == 0)
+	    $row = " " . $row;
+
+	  if ($res_ind == 0)
+	    $fold--; //reduce row length of 1 to take into account the whitespace at the beginning of lines
+
+	  $res_ind++; // next line
+
+	  $lwsp = 0;
+	} //end if ((strlen($row) + strlen($enc)) > $fold)
+
+      $row .= $enc;
+
+      if ($string[$i] == " " || $string[$i] == "\t" || $string[$i] == ";" || $string[$i] == ",")
+	$lwsp = strlen($row) - 1;
+
+      if ($string[$i] == ":" && (strcmp($encoding,"quotedprintable") == 0))
+	$lwsp = strlen($row) - 1; // we cut at ':' only for quoted printable
+    } //end for ($i = 0; $i < $len; $i++)
+
+  $res[$res_ind] = $row; // Add last row (or first if no folding is necessary)
+
+  return $res;
+} //end function export_fold_lines($string, $encoding="none", $limit=76)
+
+function export_get_attendee($id, $export) {
+  global $login;
+
+  $request = "SELECT webcal_entry_user.cal_login, webcal_entry_user.cal_status, " .
+    " webcal_entry.cal_create_by " . 
+    "FROM webcal_entry_user LEFT JOIN  webcal_entry " .
+    " ON webcal_entry_user.cal_id = webcal_entry.cal_id " .
+    " WHERE webcal_entry_user.cal_id = '$id' AND webcal_entry_user.cal_status <> 'D'";
+
+  $att_res =  dbi_query($request);
+
+  $count = 0;
+
+  $attendee = array();
+  $entry_array = array();
+
+  while ($entry = dbi_fetch_row($att_res)) {
+      $entry_array[$count++] = $entry;
+  }
+
+  dbi_free_result($att_res);
+
+  $count = 0;
+
+  while (list($key,$row) = each($entry_array)) {
+      $request = "SELECT cal_firstname, cal_lastname, cal_email, cal_login " .
+        " FROM webcal_user where cal_login = '". $row[0] . "'";
+
+      $user_res = dbi_query($request);
+
+      $user = dbi_fetch_row($user_res);
+
+      dbi_free_result($user_res);
+
+	if (count($user) > 0) {
+	  $attendee[$count] = "ATTENDEE;ROLE=";
+	  $attendee[$count] .=	($row[2] == $user[3]) ? "OWNER;" : "ATTENDEE;";
+	  $attendee[$count] .= "STATUS=";
+
+	  switch ($row[1]) {
+	    case 'A':
+	      $attendee[$count] .= "CONFIRMED";
+	      break;
+	    case 'R':
+	      $attendee[$count] .= "DECLINED";
+	      break;
+	    case 'W':
+	      $attendee[$count] .= "SENT";
+	      break;
+	    default:
+	      continue;
+	  } //end switch
+
+	  if (strcmp($export,"vcal") == 0)
+	    $attendee[$count] .= ";ENCODING=QUOTED-PRINTABLE";
+
+	  $attendee[$count] .= ":$user[0] $user[1] <$user[2]>";
+
+	  $count++;
+	} //end if (count($user) > 0)
+  } //end while
+
+  return $attendee;
+} //end function export_get_attendee($id, $export)
+
+function export_time($date, $duration, $time, $texport) {
+  $year = (int) substr($date,0,-4);
+  $month = (int) substr($date,-4,2);
+  $day = (int) substr($date,-2,2);
+
+  if ( $time == -1 ) {
+      // untimed event
+      $hour = 0;
+      $min = 0;
+      $sec = 0;
+      $duration = 24 * 60 * 60;
+      $str_duration = "1D";
+
+      $start_tmstamp = mktime($hour, $min, $sec, $month, $day, $year);
+
+      $start_date = date("Ymd", $start_tmstamp);
+      echo "DTSTART;VALUE=DATE:$start_date\r\n";
+  } else {
+      // timed event or all-day event
+      $hour = (int) substr($time,0,-4);
+      $min = (int) substr($time,-4,2);
+      $sec = (int) substr($time,-2,2);
+      $str_duration = "T" . $duration . "M";
+      $duration = $duration * 60;
+
+      $start_tmstamp = mktime($hour, $min, $sec, $month, $day, $year);
+
+      $utc_start = export_get_utc_date($date, $time);
+      echo "DTSTART:$utc_start\r\n";
+  }
+
+  if (strcmp($texport,"ical") == 0) {
+      $utc_dtstamp = export_get_utc_date(date("Ymd", mktime()),
+        date("His", mktime()));
+      echo "DTSTAMP:$utc_dtstamp\r\n";
+
+	if ($time == -1) {
+          // untimed event
+	  $end_tmstamp = $start_tmstamp + 24*60*60;
+	  $utc_end = date("Ymd", $end_tmstamp);
+	  echo "DTEND;VALUE=DATE:$utc_end\r\n";
+	} else {
+	  $end_tmstamp = $start_tmstamp + $duration;
+	  $utc_end = export_get_utc_date(date("Ymd", $end_tmstamp), date("His", $end_tmstamp));
+	  echo "DTEND:$utc_end\r\n";
+	}
+  } elseif (strcmp($texport,"vcal") == 0) {
+	if ($time == -1) {
+	  $end_tmstamp = $start_tmstamp + 24*60*60;
+	  $utc_end = date("Ymd", $end_tmstamp);
+	  echo "DTEND:$utc_end\r\n";
+	} else {
+	  $end_tmstamp = $start_tmstamp + $duration;
+	  $utc_end = export_get_utc_date(date("Ymd", $end_tmstamp), date("His", $end_tmstamp));
+	  echo "DTEND:$utc_end\r\n";
+	}
+  } else {
+      echo "DURATION:P$str_duration\r\n";
+  }
+}
+
+function export_recurrence_ical($id, $date) {
+  $sql = "SELECT cal_date FROM webcal_entry_repeats_not WHERE cal_id = '$id'";
+
+  $res = dbi_query($sql);
+
+  if ($res) {
+      $exdate = array();
+      $i = 0;
+	while ($row = dbi_fetch_row($res)) {
+	  $exdate[$i] = $row[0];
+	  $i++;
+	}
+  }
+
+  dbi_free_result($res);
+
+  $sql = "SELECT webcal_entry_repeats.cal_type, webcal_entry_repeats.cal_end, "
+    . "webcal_entry_repeats.cal_frequency, webcal_entry_repeats.cal_days, webcal_entry.cal_time"
+    . " FROM webcal_entry, webcal_entry_repeats WHERE webcal_entry_repeats.cal_id = '$id'"
+    . "AND webcal_entry.cal_id = '$id'";
+
+  $res = dbi_query($sql);
+
+  if ($res)
+    $row = dbi_fetch_row($res);
+
+  if ($row) {
+      $type = $row[0];
+      $end = $row[1];
+      $freq = $row[2];
+      $day = $row[3];
+      $time = $row[4];
+      $str_day = array( 'SU','MO','TU','WE','TH','FR','SA' );
+      $byday = "";
+
+      echo "RRULE:";
+
+      /* recurrence frequency */
+      switch ($type) {
+	case 'daily' :
+	  echo "FREQ=DAILY";
+	  break;
+	case 'weekly' :
+	  echo "FREQ=WEEKLY";
+	  break;
+	case 'monthlyByDay':
+	case 'monthlyByDate' :
+	  echo "FREQ=MONTHLY";
+	  break;
+	case 'yearly' :
+	  echo "FREQ=YEARLY";
+	  break;
+      }
+
+      echo ";INTERVAL=$freq";
+
+      if ($type == "weekly") {
+	  if ($day != "nnnnnnn") {
+	      echo ";BYDAY=";
+		for ($i = 0; $i < strlen($day); $i++) {
+		  if ($day[$i] == 'y') {
+		      $byday .= $str_day[$i] .",";
+		  }
+		}
+	      $byday = substr($byday, 0, strlen($byday)-1); // suppress last ','
+	      echo $byday;
+	  }
+      } elseif ($type == "monthlyByDate") {
+	  $day = (int) substr($date,-2,2);
+
+	  echo ";BYMONTHDAY=$day";
+      } elseif ($type == "monthlyByDay") {
+	  echo ";BYDAY=";
+
+	  $year = (int) substr($date,0,-4);
+	  $month = (int) substr($date,-4,2);
+	  $day = (int) substr($date,-2,2);
+
+	  $stamp = mktime(0, 0, 0, $month, $day, $year);
+
+	  $date_array = getdate($stamp);
+
+	  echo $str_day[$date_array['wday']];
+
+	  $next_stamp = $stamp + 7 * 24 * 60 * 60;
+
+	  $next_date_array = getdate($next_stamp);
+
+	  if ($date_array['mon'] != $next_date_array['mon'])
+	    $pos = -1;
+	  else {
+	      $pos = (int) ($day / 7);
+
+	      if (($day % 7) > 0) {
+		  $pos++;
+	      }
+	   }
+	  echo ";BYSETPOS=$pos";
+      }
+
+      if (!empty($end))	{
+	  echo ";UNTIL=";
+
+	  $utc = export_get_utc_date($end, $time);
+
+	  echo $utc;
+      }
+
+      echo "\r\n";
+
+      if (count($exdate) > 0) {
+	  $string = "EXDATE:";
+	  $i = 0;
+	  while ($i < count($exdate)) {
+	      $date = export_get_utc_date($exdate[$i],$time);
+	      $string .= "$date,";
+	      $i++;
+	  }
+
+	  $string = substr($string, 0, strlen($string)-1); // suppress last ','
+
+	  $string = export_fold_lines($string);
+
+	  while (list($key,$value) = each($string))
+	    echo "$value\r\n";
+      }
+    }
+}
+
+function export_recurrence_vcal($id, $date) {
+  $sql = "SELECT cal_date FROM webcal_entry_repeats_not WHERE cal_id = '$id'";
+  $res = dbi_query($sql);
+
+  if ($res) {
+    $exdate = array();
+    while ($row = dbi_fetch_row($res)) {
+      $exdate[] = $row[0];
+    }
+  }
+
+  dbi_free_result($res);
+
+  $sql = "SELECT webcal_entry_repeats.cal_type, webcal_entry_repeats.cal_end, "
+    . "webcal_entry_repeats.cal_frequency, webcal_entry_repeats.cal_days, webcal_entry.cal_time"
+    . " FROM webcal_entry, webcal_entry_repeats WHERE webcal_entry_repeats.cal_id = '$id'"
+    . "AND webcal_entry.cal_id = '$id'";
+
+  $res = dbi_query($sql);
+  $row = dbi_fetch_row($res);
+
+  //echo $sql;exit;
+
+  if ($row) {
+      $type = $row[0];
+      $end = $row[1];
+      $freq = $row[2];
+      $day = $row[3];
+      $time = $row[4];
+      $str_day = array('SU','MO','TU','WE','TH','FR','SA');
+      $byday = "";
+
+      echo "RRULE:";
+
+      /* recurrence frequency */
+      switch ($type) {
+	case 'daily' :
+	  echo "D";
+	  break;
+	case 'weekly' :
+	  echo "W";
+	  break;
+	case 'monthlyByDay':
+	  echo "MP";
+	  break;
+	case 'monthlyByDayR':
+	  echo "MP";
+	  break;
+	case 'monthlyByDate' :
+	  echo "MD";
+	  break;
+	case 'yearly' :
+	  echo "YM";
+	  break;
+      }
+
+      echo $freq." ";
+
+	if ($type == "weekly") {
+	  if ($day != "nnnnnnn") {
+	    for ($i=0; $i < strlen($day); $i++) {
+	      if ($day[$i] == 'y') {
+		$byday .= $str_day[$i] ." ";
+              }
+	    }
+	    echo $byday;
+          }
+	} elseif ($type == "monthlyByDate") {
+	  $day = (int) substr($date,-2,2);
+	  echo "$day ";
+	} elseif (($type == "monthlyByDay") || ($type == "monthlyByDayR")) {
+	  $year = (int) substr($date,0,-4);
+	  $month = (int) substr($date,-4,2);
+	  $day = (int) substr($date,-2,2);
+
+	  $stamp = mktime(0, 0, 0, $month, $day, $year);
+	  $date_array = getdate($stamp);
+          $day_no = $str_day[$date_array['wday']];
+
+	  $next_stamp = $stamp + 7 * 24 * 60 * 60;
+	  $next_date_array = getdate($next_stamp);
+
+	  if ($date_array['mon'] != $next_date_array['mon']) {
+	    $pos = 5;
+	  } else {
+	    $pos = (int) ($day / 7);
+            if (($day % 7) > 0) {
+              $pos++;
+            }
+	   }
+	  echo $pos."+ $day_no ";
+	} elseif ($type == "yearly") {
+          $month = (int) substr($date,-4,2);
+          echo "$month ";
+	}
+
+	// End Date - For all types
+	if (!empty($end)) {
+	  //echo export_get_utc_date($end, $time);
+	  echo $end;
+	} else {
+	  echo "20311231";
+	}
+
+      echo "\r\n";
+
+    // Repeating Exceptions
+    $num = count($exdate);
+    if ($num > 0) {
+      $string = "EXDATE:";
+
+      for ($i=0;$i<$num;$i++) {
+        $string .= $exdate[$i]."T000000,";
+      }
+      echo rtrim($string,",")."\r\n";
+    }
+
+  }
+}
+
+
+/*
+ * Create a date-time format (e.g. "20041130T123000Z") that is
+ * converted from local timezone to GMT.
+ */
+function export_get_utc_date($date, $time=0) {
+  $year = (int) substr($date,0,-4);
+  $month = (int) substr($date,-4,2);
+  $day = (int) substr($date,-2,2);
+
+  if ($time <= 0) {
+      $hour = 0;
+      $min = 0;
+      $sec = 0;
+  } else {
+      $hour = (int) substr($time,0,-4);
+      $min = (int) substr($time,-4,2);
+      $sec = (int) substr($time,-2,2);
+  }
+
+  $tmstamp = mktime($hour, $min, $sec, $month, $day, $year);
+
+  $utc_date = gmdate("Ymd", $tmstamp);
+  $utc_hour = gmdate("His", $tmstamp);
+
+  $utc = sprintf ("%sT%sZ", $utc_date, $utc_hour);
+
+  return $utc;
+}
+
+function export_alarm_vcal($id,$date,$time=0) {
+  $sql = "SELECT cal_data FROM webcal_site_extras " .
+         "WHERE cal_id = $id AND cal_type = 7 AND cal_remind = 1";
+  $res = dbi_query ( $sql );
+  $row = dbi_fetch_row ( $res );
+  dbi_free_result ( $res );
+
+  if ($row) {
+    echo "DALARM:";
+    $offset = $row[0] * 60; // How many seconds
+    $year = (int) substr($date,0,-4);
+    $month = (int) substr($date,-4,2);
+    $day = (int) substr($date,-2,2);
+    $hour = ($time > 0) ? (int) substr($time,0,-4) : 0;
+    $min  = ($time > 0) ? (int) substr($time,-4,2) : 0;
+    $sec  = ($time > 0) ? (int) substr($time,-2,2) : 0;
+    $stamp = mktime($hour, $min, $sec, $month, $day, $year);
+    $atime = $stamp - $offset;
+    echo gmdate("Ymd\THis\Z", $atime)."\r\n";
+  }
+}
+
+
+function export_alarm_ical($id, $description) {
+  $sql = "SELECT cal_data FROM webcal_site_extras " .
+         "WHERE cal_id = $id AND cal_type = 7 AND cal_remind = 1";
+  $res = dbi_query ( $sql );
+  $row = dbi_fetch_row ( $res );
+  dbi_free_result ( $res );
+
+  if ($row) {
+    echo "BEGIN:VALARM\r\n";
+    echo "TRIGGER:-PT".$row[0]."M\r\n";
+    echo "ACTION:DISPLAY\r\n";
+
+    $array = export_fold_lines($description,"utf8");
+    while (list($key,$value) = each($array)) {
+      echo "$value\r\n";
+    }
+
+    echo "END:VALARM\r\n";
+  }
+}
+
+
+function generate_uid() {
+  $rand = mt_rand(1000000,9999999);
+
+  $utc_id_date = gmdate("Ymd", mktime());
+  $utc_id_hour = gmdate("His", mktime());
+  $pid = getmypid() or die ("System error");
+  $host = getenv("SERVER_NAME");
+
+  return sprintf ("%sT%sZ-%d-%d@%s", $utc_id_date, $utc_id_hour, $rand, $pid, $host);
+}
+
+
+function export_vcal ($id) {
+  global $prodid;
+  header ( "Content-Type: text/x-vcalendar" );
+  //header ( "Content-Type: text/plain" );
+
+  $res = export_get_event_entry($id);
+
+  $entry_array = array();
+  $count = 0;
+
+  while ( $entry = dbi_fetch_row($res) ) {
+      $entry_array[$count++] = $entry;
+  }
+
+  dbi_free_result($res);
+
+  if (count($entry_array) > 0) {
+    echo "BEGIN:VCALENDAR\r\n";
+    echo "$prodid\r\n";
+    echo "VERSION:1.0\r\n";
+
+    /* Time Zone
+	$tzdate = mktime();
+	$gmdate = gmmktime();
+	$tzdiff = ($gmdate - $tzdate) / 60 / 60; //FIXME only hours are represented
+
+	$tz = sprintf("%02d", $tzdiff);
+
+	echo "TZ:";
+	echo ($tzdiff >= 0) ? "+" : "-";
+	echo "$tz\r\n";
+
+    */
+  }
+
+  while (list($key,$row) = each($entry_array)) {
+      $uid = $row[0];
+      $export_uid = generate_uid();
+      $name = $row[1];
+      $priority = $row[2];
+      $date = $row[3];
+      $time = $row[4];
+      $status = $row[5];
+      $create_by = $row[6];
+      $access = $row[7];
+      $duration = $row[8];
+      $description = $row[9];
+
+      /* Start of event */
+      echo "BEGIN:VEVENT\r\n";
+
+      /* UID of the event (folded to 76 char) */
+      $export_uid = "UID:$export_uid";
+      $array = export_fold_lines($export_uid);
+      while (list($key,$value) = each($array))
+	echo "$value\r\n";
+
+      /* SUMMARY of the event (folded to 76 char) */
+      $name = preg_replace("/\\\\/", "\\\\\\", $name); // ??
+      $name = "SUMMARY;ENCODING=QUOTED-PRINTABLE:" . $name;
+      $array = export_fold_lines($name,"quotedprintable");
+
+      while (list($key,$value) = each($array))
+	echo "$value\r\n";
+
+      /* DESCRIPTION if any (folded to 76 char) */
+      if ($description != "") {
+	  $description = preg_replace("/\\\\/", "\\\\\\", $description); // ??
+	  $description = "DESCRIPTION;ENCODING=QUOTED-PRINTABLE:" . $description;
+	  $array = export_fold_lines($description,"quotedprintable");
+	  while (list($key,$value) = each($array))
+	    echo "$value\r\n";
+      } //end if ($description != "")
+
+      /* CLASS either "PRIVATE" or "PUBLIC" (the default) */
+      if ($access == "R") {
+	  echo "CLASS:PRIVATE\r\n";
+      } else {
+	  echo "CLASS:PUBLIC\r\n";
+      }
+
+      // ATTENDEE of the event
+      $attendee = export_get_attendee($row[0], "vcal");
+
+      for ($i = 0; $i < count($attendee); $i++) {
+	  $attendee[$i] = export_fold_lines($attendee[$i],"quotedprintable");
+	  while (list($key,$value) = each($attendee[$i]))
+	    echo "$value\r\n";
+      }
+
+      /* Time - all times are utc */
+      export_time($date, $duration, $time, "vcal");
+
+      export_recurrence_vcal($uid, $date);
+
+      // FIXME: handle alarms
+      export_alarm_vcal($uid,$date,$time);
+
+      /* Goodbye event */
+      echo "END:VEVENT\n";
+    } //end while (list($key,$row) = each($entry_array))
+
+  if (count($entry_array) > 0)
+    echo "END:VCALENDAR\r\n";
+} //end function
+
+function export_ical ($id) {
+  global $prodid;
+
+  header ( "Content-Type: text/calendar" );
+  //header ( "Content-Type: text/plain" );
+
+  $res = export_get_event_entry($id);
+
+  $entry_array = array();
+  $count = 0;
+
+  while ( $entry = dbi_fetch_row($res) ) {
+      $entry_array[$count++] = $entry;
+  }
+
+  if ($count > 0) {
+    echo "BEGIN:VCALENDAR\r\n";
+    echo "$prodid\r\n";
+    echo "VERSION:2.0\r\n";
+    echo "METHOD:PUBLISH\r\n";
+  }
+
+  while (list($key,$row) = each($entry_array)) {
+      $uid = $row[0];
+      $export_uid = generate_uid();
+      $name = $row[1];
+      $priority = $row[2];
+      $date = $row[3];
+      $time = $row[4];
+      $status = $row[5];
+      $create_by = $row[6];
+      $access = $row[7];
+      $duration = $row[8];
+      $description = $row[9];
+
+      /* Start of event */
+      echo "BEGIN:VEVENT\r\n";
+
+      /* UID of the event (folded to 76 char) */
+      $array = export_fold_lines("UID:$export_uid");
+      while (list($key,$value) = each($array))
+	echo "$value\r\n";
+
+      $name = preg_replace("/\r/", "", $name);
+      //$name = preg_replace("/\n/", "\\n", $name); //PER RFC2445
+      $name = preg_replace("/\\\\/", "\\\\\\", $name); // ??
+      $description = preg_replace("/\r/", "", $description);
+      //$description = preg_replace("/\n/", "\\n", $description); //PER RFC2445
+      $description = preg_replace("/\\\\/", "\\\\\\", $description); // ??
+
+      /* SUMMARY of the event (folded to 76 char) */
+      $name = "SUMMARY:" . $name;
+      $array = export_fold_lines($name,"utf8");
+
+      while (list($key,$value) = each($array))
+	echo "$value\r\n";
+
+      /* DESCRIPTION if any (folded to 76 char) */
+      if ($description != "") {
+	  $description = "DESCRIPTION:" . $description;
+	  $array = export_fold_lines($description,"utf8");
+	  while (list($key,$value) = each($array))
+	    echo "$value\r\n";
+      }
+
+      /* CLASS either "PRIVATE" or "PUBLIC" (the default) */
+      if ($access == "R") {
+	  echo "CLASS:PRIVATE\r\n";
+      } else {
+	  echo "CLASS:PUBLIC\r\n";
+      }
+
+      // ATTENDEE of the event
+      $attendee = export_get_attendee($row[0], "ical");
+
+      for ($i = 0; $i < count($attendee); $i++) {
+	  $attendee[$i] = export_fold_lines($attendee[$i],"utf8");
+	  while (list($key,$value) = each($attendee[$i]))
+	    echo "$value\r\n";
+      }
+
+      /* Time - all times are utc */
+      export_time($date, $duration, $time, "ical");
+
+      /* Recurrence */
+      export_recurrence_ical($uid, $date);
+
+      // FIXME: handle alarms
+      export_alarm_ical($uid, $description);
+
+      /* Goodbye event */
+      echo "END:VEVENT\r\n";
+    } //end while (list($key,$row) = each($entry_array))
+
+  if ($count > 0)
+    echo "END:VCALENDAR\r\n";
+} //end function
+
+
+// convert time in ("hhmmss") format, plus duration (as a number of
+// minutes), to end time ($hour = number of hours, $min = number of
+// minutes).
+// FIXME: doesn't handle wrap to next day correctly.
+function get_end_time ( $time, $duration, &$hour, &$min) {
+  $hour = (int) ( $time / 10000 );
+  $min = ( $time / 100 ) % 100;
+  $minutes = $hour * 60 + $min + $duration;
+  $hour = $minutes / 60;
+  $min = $minutes % 60;
+}
+
+// convert calendar date to a format suitable for the install-datebook
+// utility (part of pilot-link)
+function pilot_date_time ( $date, $time, $duration, $csv=false ) {
+  $year = (int) ( $date / 10000 );
+  $month = (int) ( $date / 100 ) % 100;
+  $mday = $date % 100;
+  get_end_time ( $time, $duration, $hour, $min );
+
+  // Assume that the user is in the same timezone as server
+  $tz_offset = date ( "Z" ); // in seconds
+  $tzh = (int) ( $tz_offset / 3600 );
+  $tzm = (int) ( $tz_offset / 60 ) % 60;
+  if ( $tzh < 0 ) {
+    $tzsign = "-";
+    $tzh = abs ( $tzh );
+  } else
+    $tzsign = "+";
+
+  if ( $csv )
+    return sprintf ( "%04d-%02d-%02d%s%02d:%02d:00",
+		     $year, $month, $mday, $csv, $hour, $min );
+  else
+    return sprintf ( "%04d/%02d/%02d %02d%02d  GMT%s%d%02d",
+		     $year, $month, $mday, $hour, $min, $tzsign, $tzh, $tzm );
+} //end function
+
+function export_install_datebook ($id) {
+  $res = export_get_event_entry($id);
+
+  while ( $row = dbi_fetch_row ( $res ) ) {
+    $start_time = pilot_date_time ( $row[3], $row[4], 0 );
+    $end_time = pilot_date_time ( $row[3], $row[4], $row[8] );
+    printf ( "%s\t%s\t\t%s\n",
+	     $start_time, $end_time, $row[1] );
+    echo "Start time: $start_time\n";
+    echo "End time: $end_time\n";
+    echo "Duration: $row[8]\n";
+    echo "Name: $row[1]\n";
+  }
+} //end function
+
+function get_cal_ent_extras($id, $from, $where = false) {
+  $res = dbi_query( "SELECT * FROM $from WHERE cal_id='$id'".	( $where?"AND ( $where );":';') );
+  if ( $res )
+    return ( dbi_fetch_row($res) );
+  else
+    return ( false );
+} //end function
+
+function export_pilot_csv ($id) {
+  /* to be imported to a Palm with:
+   *		pilot-datebook -r csv -f webcalendar-export.txt -w hotsync
+   */
+
+  $res = export_get_event_entry($id);
+
+  echo "uid,attributes,category,untimed,beginDate,beginTime,endDate,endTime,description,note,alarm,advance,advanceUnit,repeatType,repeatForever,repeatEnd,repeatFrequency,repeatDay,repeatWeekdays,repeatWeekstart\n";
+  while ( $row = dbi_fetch_row ( $res ) ) {
+    // uid (long)
+    echo $row[0], ',';
+    // attributes (int)
+    //  128 = 0x80 : Deleted
+    //   64 = 0x40 : Dirty
+    //   32 = 0x20 : Busy
+    //   16 = 0x10 : Secret/Private
+    echo ($row[7] == 'R')?'16,':'0,';
+    // category (int: 0=Unfiled)
+    echo '0,';
+    // untimed (int: 0=Appointment, 1=Untimed)
+    // note: Palm "Untimed" is WebCalendar "AllDay"
+    if ( $row[4] < 0 ) {
+      echo
+	'1,',				// untimed
+	substr($row[3],0,4), '-',	// beginDate (str: YYYY-MM-DD) + beginTime
+	substr($row[3],4,2), '-',
+	substr($row[3],6,2), ',00:00:00,',
+	substr($row[3],0,4), '-',	// endDate + endTime
+	substr($row[3],4,2), '-',
+	substr($row[3],6,2), ',00:00:00,';
+    } else {
+      echo '0,', // untimed
+	pilot_date_time($row[3], $row[4], 0, ','), ',',	// beginDate,beginTime
+	pilot_date_time($row[3], $row[4], $row[8], ','), ',';	//endDate,endTime
+    } //end if ( $row[4] < 0 )
+    // description (str)
+    echo '"', preg_replace("/\x0D?\n/", "\\n", $row[1]), '",';
+    // note (str)
+    echo '"', preg_replace("/\x0D?\n/", "\\n", $row[9]), '",';
+    // alarm, advance, advanceUnit
+    // alarm (int: 0=no alarm, 1=alarm)
+    // FIXME: verify if WebCal. DB interpreted correctly
+    // advance (int), advanceUnit (int: 0=minutes, 1=hours, 2=days)
+    // FIXME: better adjust unit
+    $ext = get_cal_ent_extras($row[0], 'webcal_site_extras', "cal_name = 'Reminder' AND cal_remind = 1");
+    if ( $ext )
+      echo '1,', $ext[5], ',0,';
+    else
+      echo '0,0,0,';
+    // repeat:
+    // repeatType (int: 0=none, 1=daily, 2=weekly, 3=monthly, 4=monthly/weekday,
+    // repeatForever (int: 0=not forever, 1=forever)                   5=yearly)
+    // repeatEnd (time)
+    // repeatFrequency (int)
+    // repeatDay (int: day# or 0..6=Sun..Sat 1st, 7..13 2nd, 14..20 3rd,
+    //					21..27 4th,  28-34 last week)
+    // repeatWeekdays (int: add - 1=Sun,2=Mon,4=Tue,8=Wed,16=Thu,32=Fri,64=Sat)
+    // repeatWeekstart (int)
+    $ext = get_cal_ent_extras($row[0], 'webcal_entry_repeats');
+    if ( $ext ) {
+      switch ( $ext[1] ) {
+	case 'daily':		$repType = 1; break;
+	case 'weekly':		$repType = 2; break;
+	case 'monthlyByDate':	$repType = 3; break;
+	case 'monthlyByDay':	$repType = 4; break;
+	case 'yearly':		$repType = 5; break;
+	default:			$repType = 0;
+      }
+    } else $repType = 0;
+    if ( $repType ) {
+      echo $repType, ',';		// repeatType
+      if ( $ext[2] ) {
+	echo '0,', 			// repeatForever
+	  substr($ext[2],0,4), '-',	// repeatEnd
+	  substr($ext[2],4,2), '-',
+	  substr($ext[2],6,2), ' 00:00:00,';
+      } else
+	echo '1,,';	// repeatForever,repeatEnd
+      echo $ext[3], ',';// repeatFrequency
+      switch ( $repType ) {
+	case 2:	// weekly
+	  echo '0,', bindec(strtr(strrev($ext[4]),'yn','10')) ,",1\n";
+	  break;
+	case 3:	// monthly/weekday
+		// repeatDay (0..6=Sun..Sat 1st, 7..13 2nd, 14..20 3rd,
+		// 21..27 4th,  28-34 last week)
+		echo floor( substr($row[3], 6, 2) / 7) *7
+		  + date( 'w', date_to_epoch($row[3]) ), ",0,0\n";
+		break;
+	case 1:	// daily
+	case 4:	// monthly
+	case 5:	// yearly
+		echo "0,0,0\n";
+      } //end switch
+    } else
+      echo "0,0,,0,0,0,0\n";
+    } //end if ( $repType )
+} //end function
+
+function transmit_header ( $mime, $file ) {
+  header ( "Content-Type: application/octet-stream" );
+  //header ( "Content-Type: $mime" );
+  header ( 'Content-Disposition: attachment; filename="' . $file .  '"');
+  header ( 'Pragma: no-cache');
+  header ( 'Cache-Control: no-cache' );
+} //end function
+
+/*******************************************/
+/*** Let's go ***/
+/*******************************************/
+
+$id = getIntValue  ( 'id', true );
+$format = getValue  ( 'format' );
+if ( $format != 'ical' && $format != 'vcal' && $format != 'pilot-csv' &&
+  $format != 'pilot-text' )
+  die_miserable_death ( "Invalid format '" . $format . "'" );
+
+$use_all_dates = getPostValue  ( 'use_all_dates' );
+if ( $use_all_dates != 'y' )
+  $use_all_dates = '';
+
+$include_layers = getPostValue  ( 'include_layers' );
+if ( $include_layers != 'y' )
+ $include_layers = '';
+
+$fromyear = getIntValue  ( 'fromyear', true );
+$frommonth = getIntValue  ( 'frommonth', true );
+$fromday = getIntValue  ( 'fromday', true );
+$endyear = getIntValue  ( 'endyear', true );
+$endmonth = getIntValue  ( 'endmonth', true );
+$endday = getIntValue  ( 'endday', true );
+$modyear = getIntValue  ( 'modyear', true );
+$modmonth = getIntValue  ( 'modmonth', true );
+$modday = getIntValue  ( 'modday', true );
+
+mt_srand((float) microtime()*1000000);
+
+if (empty($id)) {
+  $id = "all";
+}
+
+if ($format == "ical") {
+  transmit_header ( 'text/ical', "webcalendar-$id.ics" );
+  export_ical($id);
+} elseif ($format == "vcal") {
+  transmit_header ( 'text/vcal', "webcalendar-$id.vcs" );
+  export_vcal($id);
+} elseif ($format == "pilot-csv") {
+  transmit_header ( 'text/csv', "webcalendar-$id.csv" );
+  export_pilot_csv ( $id );
+} elseif ($format == "pilot-text") {
+  transmit_header('text/plain', "webcalendar-$id.txt" );
+  export_install_datebook($id);
+} else {
+  //exit;
+
+  print_header();
+
+  echo "<h2>";
+  etranslate("Export");
+  echo " ";
+  etranslate("Error");
+  echo "</h2>\n";
+  echo "<span style=\"font-weight:bold;\">";
+  etranslate("Error");
+  echo ":</span> ";
+  echo translate("export format not defined or incorrect") . ".";
+  echo "<br />\n";
+
+  print_trailer ();
+
+  echo " </body>\n";
+  echo "</html>";
+} //end if ($format == "ical")

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/favicon.ico
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/favicon.ico	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/favicon.ico	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,4 @@
+            ¨     (       @         €                  ãÞÖãÞÕÛÕ;²­°¡Ÿ±Ÿž±«••¢‹Š—ƒ‚ž‘ÅÀ¸ÝØÏãÞÖãÞÕãÞÕãÞÕãÞÕãÞÖãÞÕãÞÕãÞÕãÞÖãÞÖãÞÕãÞÖãÞÖãÞÕãÞÕãÞÖãÞÖãÞÕîêâßÙÒ½°¬Æ¹¹È¹¸Ä´°É¸´Æ²­¸£ž©’‘ ‰‰‘|°ª¤ÖÔÎÚÖÎÚÖÎÚÖÎÚÖÎÙ×ÐÚÖÎÚÖÎÚÖÎÚÖÏÙ×ÐÚÖÎÚÖÏÙ×ÐÜØÐàÜÓåáÚëçßîêáéç൲ÓÈÈÓ·èÙÃÿøçõØÑóÏÆÿöáåÒ¸¹ž¡‡‡‡qp™—”´²¬µ³­µ³­µ³­´´¯µ³­µ³­µ³­µ³®´´¯µ³­µ³®µ³¯¸¶°Â¿¹ÒÐÊâàÚïìäËÿÖÌÌ×Á´õÚµÿðÏÿöáþöçþôãÿõÜþëÇòϧ´’‚„„i[Zjifqpmqpmqpmppmqpmqpmqpmqpmppmqpmqpmppmwvr‡†‚££žÅÄ¿âàÙË¿¾ãÓË꺑úÖ©ýçÁÿñÒÿóØÿó×ÿïÎüá·ùΞã©{®Ž„–ud¸wáŽáŽáŽáŽáŽáŽáŽáŽáŽáŽáŽä‘ׇ…`9utr¤£ŸÑÏÊß×ÒÜ·¡ó°yøÆ”úÕ¨ûá¹îÛ¸ôÞº÷Û³÷ÍŸ÷¿‹ñ§mº†j¤‹·œýÝ°þß³þà¶þâ¹þã¼ÿå¿ÿæÁÿçÄÿéÇÿêÊÿëÌÿíÐÿìËé¯V‰b:‹‰†Ã¿»ëææÚŸ}îžkö¹ƒ÷ÀŒÖ¯†„v_Q at p]I®ƒ^ò«qëŠPÆvN¬––¦•ŒæÙÉéÝÎìâÕêáÕêâ×êãÚëäÝîéäìéåìéæìêèìëêïõüýäÀÓƒ}zw¼·´îêêÛšyì¡yù͝ù͝կ†zpc*$Šu]Ò§}ô­såu<Æj@±œœœ‘‘ËËÌÎÎ϶¶·ÉÉÊÍÍÎÍÍÍÏÏз·¸ÅÅÆÍÍÎÍÍÍÐÐлÀÇêѬЉyvs¹´°ëâÝඛù̝üÞ³ýä¼þéÂþêÄŠ€kQH:ܾ—øСô°wÄ‚]¶¤¤½µµýýþÿÿÿÇÈÈôôõüüüýýýÿÿÿÉÉÊêëëýþýüüüÿÿÿ×Ûâæ̥ψxus¸³¯à͹èÒÄóͤþéÂÿïÌÿòÒÿòÔöéÉ—ŽzxlXóөﻍߏ³¡¡ÒÌÌùùùûûûÆÆÇðññøøøøøøþþþÉÉÉèèèùùøøøøÿÿÿÕÙàç̤ψxur¸³¯Ù°|îçåçÈ°þìÊÿóØÿöàÿöâÿõÝÿóÖêÚ¹ýá¸Ó©ŒÈ¶³¶¨¨ñððÿÿÿÿÿÿÍÉÆü÷òÿÿùÿÿúÿÿÿÐÌÈìììþþþýýýÿÿÿØÜãæˢψxur¸³¯è£9ÛÎÆêáßéлùëÖÿøéõØÍóÏÁÿôÝ÷äÅݽ£Ìº·³££ÊÇÇÝÝÞáááãáᬻÌÈÚòÍà÷ÎãøÏçû©¿ÒÕ×ÙääãäääçççÈÍÓæʡψxur·²¯ì¢+Û¼‘ÔÌÎëäãèÙÑéØÎæÌÂäŸäÐÁÛȽÖÉǽ¯¯ª¤¥ÎÎÏÐÐÑÑÑÑÙÔÏXªô¤þ*žý.•ý1Šü9’û»ÇÐÑÏÍÎÎÏÒÒÒ»ÀÇæʠψwtq¶±­ì¢+ểÑÒØàÙÙáÙÙêãâíåãêâßãÚØÓÈÈÍÁÁèååÅÅÆûüûýýýÿþþÿÿÿb¼þÅÿ%»ÿ/©ÿ6—ÿ=•üáìõÿþûüüüÿÿÿ×Ûáæɜψwtp¶±¬ì¢+â½…ÑÖÜùùúîëëäÝÝÙÓÓÆ¿¿ÝÖÖçããø÷÷øøøÆÆÆøøøøøøúúúÿÿü`½ýÖÿÍÿ%½ÿ*­ÿ9ûÞèòýú÷øøøÿÿÿÕÙàæǛχwsp¶±¬ì¢+⾇ÖÚáÿÿÿÿÿÿÿÿÿðððËËÌÿÿÿÿÿÿÿÿÿþþþÉÉÉÿÿÿÿÿÿÿÿÿÿÿÿ_Âþ ðÿåÿÔÿÄÿ3¦ûåìøÿÿýþþþÿÿÿÙÝãåƘχvspµ°«ë£,ãÀŒ¿ÃËÚÚÚØØÙÚÚÛÎÎϾ¾¿àààÞÞßàààÜÜݼ¼½ÝÝÝÞÞÞßßßäàÞS´ù ×ÿÒÿ
+Æþ¼þ*£þÉÐÝáÞÛÝÝÞàààÄÈÐåŗΈtsq´¯ªë¢,äÁ½ÂÉÖ××ÕÕÖ××ØÏÏϸ¸¹ÑÑÑÐÐÑÒÒÒÏÏз·¸ÐÐÐÐÐÑÑÑÑÕÓÑ›³Î¨Æï®Ìò¯Íó±Ñö”´ÖÄÈËÑÑÐÐÐÑÕÕÕ½ÁÈæŖΈtrp´¯ªì¡+äÀÓØßÿÿÿüüüÿÿÿñññÉÉÊýþþüüüÿÿÿúúúÇÇÈûüüüüüþþþÿÿÿÎÉÄüõïÿþ÷ÿþøÿÿýÒËÅëëëýþþýýýÿÿÿ×ÜâåÒφvqp³¯©ì¢,äÒÖÝüüüøøøýýýîîîÇÇÈúúúøøøûûûöööÅÆÇøøøøøøúúùüüüÆÇÇðññøøøùùùÿÿÿÉÉÉèèèùùùøøøÿÿÿÕÙàäχwsp²®©ê¢,äÔÖÚáÿÿÿÿÿÿÿÿÿôôôÊÊËÿÿÿÿÿÿÿÿÿýýýÈÈÉÿÿÿþÿÿÿÿÿÿÿÿÉÉÊ÷÷÷ÿÿÿÿÿÿÿÿÿÌÌÌîîîÿÿÿÿÿÿÿÿÿÙÝääÀÎ†rrn²®©ê¢,æƘ¾ÃËÚÛÝÙÚÛÜÜÞÑÒÔ¸¹»ÚÚÜÙÚÛÛÜÝ×ØÚ¶¸ºØÙÛÙÚÛÚÛÝÛÜÞ·¸»ÔÕ×ÙÚÜÚÛÝÜÝ๺½ÎÏÒÙÛÜÚÛÝÜÞáÁÆÏåÁÎ†sqn²­¨ëž+÷קáÜÕÞÖÌÞÖÌÞÕÊÞÕÉàÖÊÞÓÆÝÓÄÝÒÁÝÑÀàÓÁÝнÝϼÜλÜκÞѽÜκÜ͸ÜͶÜ̵ÝθÛÌ´ÛʳÛȬÛÉ®ÞÒÁõΔ΃spm²­¨ë*þÞ¯ÿüöÿíÓÿêÌÿéËÿéÉÿèÇÿæÅÿåÃÿåÁÿä¾ÿã¼ÿâ¹ÿá·ÿß´ÿß³ÿÞ²þÞ±þÝ°þÝ®þÜ­þÛ«ýÚ©ýÚ§üÙ¦ýÖŸüã¾úѕ΁sqm°«¦ëž*ýâ¼ýÍ„ø¥ö¨ö¨ö¨ö¨!÷¨"÷¨$÷©$÷©%÷©'÷©(÷©(÷©)÷©*÷©*÷ª+øª,÷ª-øª.ø«.ø«/ø«/ø«0øª1û³Fùʃ؈spm±¬§ëŸ.ÿÛ«÷¦ä¨ åªåªå«å«æ¬
+æ¬
+æ®æ®æ¯æ¯æ¯ç°ç°ç±!è±%è²(è²+é³.é³1é´4é´7éµ:è·Aò§ü¹W͈ tpm°¬¦ì¡1ÿÛ§ó¢à  â¡ ã¡ ã¢ ã¢ ä£ ä£ ä¤ ä¤ ä¥ ä¥ ä¥ å¦ å¦ å§ å§ å¨ å¨ æ© æ© æ© æ©æªä¬í£ý·TÏ‹&yuq³®©î¢/ÿä»÷¦!ލ Þ’ ß’ ß“ ß“ à” à” à• à• à– à– à– á— á— á˜ á™ áš áš â› â› âœ âœ ãœ á ðš þÁlÔŽ"‡„»¶±ð 1þçÄÿëÎû¶SùµLúµLú¶Kú¶KúµKùµJùµIùµIùµHùµHù´Gù´Gù´Fù´Eù³Eù³Dù³Dù³Cù³Cù²Bù²Bù²Aù°Aû˃úÓšÚŒ¤ŸšÊľàÀ ó¶Zÿâ·ÿçÃÿå¿ÿå¾ÿä¼ÿä»ÿã»ÿãºÿâ¸ÿá¶þàµþß´þß³þÞ±þÝ°þÝ®þÜ­ýÛ«ýÛ©ýÚ©üÚ¨üÙ¦üØ¥ü×£üפûÕŸè§G¹šzÁ¼¶ØÒÌáÛÔÞìè¤Rç Aãœ@âœ?âœ?âœ?âœ?âœ?âœ?âœ?âœ?âœ?âœ?âœ?âœ?âœ?âœ?âœ?âœ?âœ?â?â?â?â?âœ=ßœJÇ®—ËÆÀØÒÌáÛÔäÞ×âÜÕÞØÑÛÕÎØÒÌÖÐÊÖÐÊÖÐÊÖÐÊÖÐÊÖÐÊÖÐÊÖÐÊÖÐÊÖÐÊÖÐÊÖÐÊÖÐÊÖÐÊÖÐÊÖÐÊÖÐÊÖÐÊÖÐÊÖÐÊÖÐÊÖÐÊØÒÌÛÕÎÞØÑâÜÕäÞ×                                                                                                                                
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/gradient.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/gradient.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/gradient.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,330 @@
+<?php
+/*
+ * $Id: gradient.php,v 1.5 2005/01/19 13:54:13 cknudsen Exp $
+ *
+ * Description:
+ *	Generate a gradient image for use as a background image.
+ *	Requires gd module.
+ *
+ * Input Parameters:
+ *	height		Height of output image (ignored for horizontal gradient)
+ * 	width		Width of output image (ignored for vertical gradient)
+ *	colors		Number of colors to generate
+ *	direction	Direction gradient should go
+ *			Currently limited to multiples of 90 degrees
+ *			0 means left-to-right, 90 means bottom-to-top,
+ *			180 means right-to-left, 270 means top-to-bottom
+ *
+ * Notes:
+ *	One of the following two pairs of input parameters should be used
+ *	to specify the colors for the gradient:
+ *		1. color1, color2 - End colors of gradient specified
+ *		   as "color1=RRGGBB" or "color1=RGB"
+ *		2. base, percent - `base' is specified the same way as
+ *		   `color1' and `color2'
+ *		   `percent' is the amount the components of `base'
+ *		   should be increased
+ *	For example, given "base=445566&percent=50", the starting and
+ *	ending colors of the gradient will be:
+ *		Start:
+ *			Red: 44 (hex) | 68 (dec)
+ *			Green: 55 (hex) | 85 (dec)
+ *			Blue: 66 (hex) | 102 (dec)
+ *		End:
+ *			Red: 44 + (50% of FF) =
+ *			     CC (hex) | 68 + (50% of 255) = 196 (dec)
+ *			Green: 55 + (50% of FF) =
+ *			       DD (hex) | 85 + (50% of 255) = 203 (dec)
+ *			Blue: 66 + (50% of FF) =
+ *			      EE (hex) | 102 + (50% of 255) = 230 (dec)
+ *
+ *	So it is entirely equivalent to say "base=445566&percent=50" OR
+ *	"color1=445566&color2=CCDDEE"
+ *
+ *	Since this file does not use any other WebCalendar file, it could
+ *	be used by other PHP apps.
+ *
+ * TODO:
+ *	Allow directions which are not multiples of 90 degrees so that
+ *	we can have diagonal gradients.
+ *
+ * Security:
+ *	No security restrictions by user.
+ *	Limit height and width parameters to 600 so a malicious user cannot
+ *	request a 10Gb image 8-)
+ */
+ 
+$MAX_HEIGHT = 600;
+$MAX_WIDTH = 600;
+$MIN_COLORS = 4;
+$MAX_COLORS = 256;
+$DEFAULTS = array(
+              'colors' => 32,
+              'direction' => 90,
+              'height' => 50,
+              'width' => 50,
+              'color1' => 'ccc',
+              'color2' => 'eee',
+              'percent' => 15
+            );
+
+// Get a value from a GET URL
+function getGetValue ( $name ) {
+  if ( isset ( $_GET[$name] ) ) {
+    return $_GET[$name];
+  }
+
+  if ( ! isset ( $HTTP_GET_VARS ) ) {
+    return null;
+  }
+
+  if ( ! isset ( $HTTP_GET_VARS[$name] ) ) {
+    return null;
+  }
+
+  return ( $HTTP_GET_VARS[$name] );
+}
+
+/*
+ * Turn an HTML color (like 'AABBCC') into an array of decimal RGB values
+ *
+ * Parameters:
+ *	$color - HTML color specification in 'RRGGBB' or 'RGB' format
+ *
+ * Return value:
+ *	array('red' => $red_val, 'green' => $green_val, 'blue' => $blue_val)
+ */
+function colorToRGB ( $color ) {
+  if ( strlen ( $color ) == 6 ) {
+    $red = hexdec ( substr ( $color, 0, 2 ) );
+    $green = hexdec ( substr ( $color, 2, 2 ) );
+    $blue = hexdec ( substr ( $color, 4, 2 ) );
+  } else if ( strlen ( $color ) == 3 ) {
+    $red_hex = substr ( $color, 0, 1 );
+    $red_hex .= $red_hex;
+
+    $green_hex = substr ( $color, 1, 1 );
+    $green_hex .= $green_hex;
+
+    $blue_hex = substr ( $color, 2, 1 );
+    $blue_hex .= $blue_hex;
+
+    $red = hexdec ( $red_hex );
+    $green = hexdec ( $green_hex );
+    $blue = hexdec ( $blue_hex );
+  } else {
+    // Invalid color specification
+    return false;
+  }
+
+  return array('red' => $red, 'green' => $green, 'blue' => $blue);
+}
+
+$direction = getGetValue ( 'direction' );
+if ( $direction === null || ( $direction % 90 ) != 0 ) {
+  $direction = $DEFAULTS['direction'];
+} else {
+  while ( $direction > 360 ) {
+    $direction -= 360;
+  }
+}
+
+if ( $direction == 90 || $direction == 270 ) {
+  // Vertical gradient
+
+  $height = getGetValue ( 'height' );
+  if ( empty ( $height ) ) {
+    $height = $DEFAULTS['height'];
+  }
+
+  if ( $height > $MAX_HEIGHT ) {
+    $height = $MAX_HEIGHT;
+  }
+
+  $width = 1;
+} else {
+  // Horizontal gradient
+
+  $width = getGetValue ( 'width' );
+  if ( empty ( $width ) ) {
+    $width = $DEFAULTS['width'];
+  }
+
+  if ( $width > $MAX_WIDTH ) {
+    $width = $MAX_WIDTH;
+  }
+
+  $height = 1;
+}
+
+$numcolors = getGetValue ( 'colors' );
+if ( empty ( $numcolors ) ) {
+  $numcolors = $DEFAULTS['colors'];
+} else {
+  if ( preg_match ( '/^\d+$/', $numcolors ) ) {
+    if ( $numcolors < $MIN_COLORS ) {
+      $numcolors = $MIN_COLORS;
+    } else if ( $numcolors > $MAX_COLORS ) {
+      $numcolors = $MAX_COLORS;
+    }
+  } else {
+    $numcolors = $DEFAULTS['colors'];
+  }
+}
+
+// Get colors
+$base = getGetValue ( 'base' );
+if ( $base === null ) {
+  $color1 = getGetValue ( 'color1' );
+} else {
+  $color1 = $base;
+}
+
+if ( $color1 === null ) {
+  $color1 = colorToRGB ( $DEFAULTS['color1'] );
+} else {
+  if ( preg_match ( "/^#?([0-9a-fA-F]{3,6})/", $color1, $matches ) ) {
+    $color1 = colorToRGB ( $matches[1] );
+  } else {
+    $color1 = colorToRGB ( $DEFAULTS['color1'] );
+  }
+}
+
+if ( $base === null ) {
+  $color2 = getGetValue ( 'color2' );
+  if ( $color2 === null ) {
+    $color2 = colorToRGB ( $DEFAULTS['color2'] );
+  } else {
+    if ( preg_match ( "/^#?([0-9a-fA-F]{3,6})/", $color2, $matches ) ) {
+      $color2 = colorToRGB ( $matches[1] );
+    } else {
+      $color2 = colorToRGB ( $DEFAULTS['color2'] );
+    }
+  }
+} else {
+  $color2 = $color1;
+
+  $percent = getGetValue ( 'percent' );
+  if ( $percent === null || $percent < 0 || $percent > 100 ) {
+    $percent = $DEFAULTS['percent'];
+  }
+
+  $color2['red'] = min ( $color2['red'] + $percent * 255 / 100 , 255 );
+  $color2['green'] = min ( $color2['green'] + $percent * 255 / 100, 255 );
+  $color2['blue'] = min ( $color2['blue'] + $percent * 255 / 100, 255 );
+
+}
+
+$image = imagecreate ( $width, $height );
+
+// Allocate array of colors
+$colors = array ();
+
+$deltared = $color2['red'] - $color1['red'];
+$deltagreen = $color2['green'] - $color1['green'];
+$deltablue = $color2['blue'] - $color1['blue'];
+
+for ( $i = 0; $i < $numcolors; $i++ ) {
+  $thisred =
+    min ( $color1['red'] + ( $deltared * $i / ( $numcolors - 1 ) ), 255 );
+
+  $thisgreen =
+    min ( $color1['green'] + ( $deltagreen * $i / ( $numcolors - 1 ) ), 255 );
+
+  $thisblue =
+    min ( $color1['blue'] + ( $deltablue * $i / ( $numcolors - 1 ) ), 255 );
+
+  $thisred = floor ( $thisred );
+  $thisgreen = floor ( $thisgreen );
+  $thisblue = floor ( $thisblue );
+
+  $colors[$i] = imagecolorallocate ( $image, $thisred, $thisgreen, $thisblue );
+}
+
+switch ( $direction ) {
+  case 0:
+    $x1 = 0;
+    $x2 = 0;
+
+    $y1 = 0;
+    $y2 = $height - 1;
+
+    $dx = 1;
+    $dy = 0;
+
+    $dim = $width;
+    break;
+  case 90:
+    $x1 = 0;
+    $x2 = $width - 1;
+
+    $y1 = $height - 1;
+    $y2 = $height - 1;
+
+    $dx = 0;
+    $dy = -1;
+
+    $dim = $height;
+    break;
+  case 180:
+    $x1 = $width - 1;
+    $x2 = $width - 1;
+
+    $y1 = 0;
+    $y2 = $height - 1;
+
+    $dx = -1;
+    $dy = 0;
+
+    $dim = $width;
+    break;
+  case 270:
+    $x1 = 0;
+    $x2 = $width - 1;
+
+    $y1 = 0;
+    $y2 = 0;
+
+    $dx = 0;
+    $dy = 1;
+
+    $dim = $height;
+    break;
+}
+
+$i = 0;
+while ( $x1 >= 0 && $x1 < $width
+        && $x2 >= 0 && $x2 < $width
+        && $y1 >= 0 && $y1 < $height
+        && $y2 >= 0 && $y2 < $height ) {
+
+  // Which color for this line?
+  $ind = floor ( $numcolors * $i / $dim );
+  if ( $ind >= $numcolors ) {
+    $ind = $numcolors;
+  }
+
+  imageline ( $image, $x1, $y1, $x2, $y2, $colors[$ind] );
+
+  $x1 += $dx;
+  $y1 += $dy;
+
+  $x2 += $dx;
+  $y2 += $dy;
+
+  $i++;
+}
+
+
+if ( function_exists ( "imagepng" ) ) {
+  Header ( "Content-type: image/png" );
+  imagepng ( $image );
+} else if ( function_exists ( "imagegif" ) ) {
+  Header ( "Content-type: image/gif" );
+  imagegif ( $image );
+} else {
+  echo "No image formats supported!<br />\n";
+}
+
+imagedestroy ( $image );
+?>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/group_edit.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/group_edit.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/group_edit.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,103 @@
+<?php
+include_once 'includes/init.php';
+print_header( '', '', '', true );
+?>
+
+<form action="group_edit_handler.php" method="post">
+<?php
+$newgroup = true;
+$groupname = "";
+$groupowner = "";
+$groupupdated = "";
+
+
+if ( empty ( $id ) ) {
+  $groupname = translate("Unnamed Group");
+} else {
+  $newgroup = false;
+  // get group by id
+  $res = dbi_query ( "SELECT cal_owner, cal_name, cal_last_update, cal_owner " .
+    "FROM webcal_group WHERE cal_group_id = $id" );
+  if ( $res ) {
+    if ( $row = dbi_fetch_row ( $res ) ) {
+      $groupname = $row[1];
+      $groupupdated = $row[2];
+      user_load_variables ( $row[3], "temp" );
+      $groupowner = $tempfullname;
+    }
+    dbi_fetch_row ( $res );
+  }
+}
+
+
+if ( $newgroup ) {
+  $v = array ();
+  echo "<h2>" . translate("Add Group") . "</h2>\n";
+  echo "<input type=\"hidden\" name=\"add\" value=\"1\" />\n";
+} else {
+  echo "<h2>" . translate("Edit Group") . "</h2>\n";
+  echo "<input type=\"hidden\" name=\"id\" value=\"$id\" />";
+}
+?>
+
+<table style="border-width:0px;">
+<tr><td style="font-weight:bold;">
+	<label for="groupname"><?php etranslate("Group name")?>:</label></td><td>
+	<input type="text" name="groupname" id="groupname" size="20" value="<?php echo htmlspecialchars ( $groupname );?>" />
+</td></tr>
+<?php if ( ! $newgroup ) { ?>
+	<tr><td style="vertical-align:top; font-weight:bold;">
+		<?php etranslate("Updated"); ?>:</td><td>
+		<?php echo date_to_str ( $groupupdated ); ?>
+	</td></tr>
+	<tr><td style="vertical-align:top; font-weight:bold;">
+		<?php etranslate("Created by"); ?>:</td><td>
+		<?php echo $groupowner; ?>
+	</td></tr>
+<?php } ?>
+<tr><td style="vertical-align:top; font-weight:bold;">
+	<label for="users"><?php etranslate("Users"); ?>:</label></td><td>
+	<select name="users[]" id="users" size="10" multiple="multiple">
+<?php
+  // get list of all users
+  $users = user_get_users ();
+  if ($nonuser_enabled == "Y" ) {
+    $nonusers = get_nonuser_cals ();
+    $users = ($nonuser_at_top == "Y") ? array_merge($nonusers, $users) : array_merge($users, $nonusers);
+  }
+
+  // get list of users for this group
+  if ( ! $newgroup ) {
+    $sql = "SELECT cal_login FROM webcal_group_user WHERE cal_group_id = $id";
+    $res = dbi_query ( $sql );
+    if ( $res ) {
+      while ( $row = dbi_fetch_row ( $res ) ) {
+        $groupuser[$row[0]] = 1;
+      }
+      dbi_free_result ( $res );
+    }
+  }
+  for ( $i = 0; $i < count ( $users ); $i++ ) {
+    $u = $users[$i]['cal_login'];
+    echo "<option value=\"$u\" ";
+    if ( ! empty ( $groupuser[$u] ) ) {
+      echo " selected=\"selected\"";
+    }
+    echo ">" . $users[$i]['cal_fullname'] . "</option>\n";
+  }
+?>
+	</select>
+</td></tr>
+<tr><td colspan="2" style="text-align:center;">
+	<br /><input type="submit" name="action" value="<?php if ( $newgroup ) etranslate("Add"); else etranslate("Save"); ?>" />
+	<?php if ( ! $newgroup ) { ?>
+		<input type="submit" name="action" value="<?php etranslate("Delete")?>" onclick="return confirm('<?php etranslate("Are you sure you want to delete this entry?"); ?>')" />
+	<?php } ?>
+</td></tr>
+</table>
+</form>
+
+<?php print_trailer ( false, true, true ); ?>
+
+</body>
+</html>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/group_edit_handler.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/group_edit_handler.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/group_edit_handler.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,72 @@
+<?php
+include_once 'includes/init.php';
+
+if ( ! $is_admin ) {
+  $error = "You are not authorized";
+} else  {
+  if ( $action == "Delete" || $action == translate ("Delete") ) {
+    // delete this group
+    dbi_query ( "DELETE FROM webcal_group WHERE cal_group_id = $id " );
+    dbi_query ( "DELETE FROM webcal_group_user WHERE cal_group_id = $id " );
+  } else {
+    $date = date ( "Ymd" );
+    if ( empty ( $groupname ) ) {
+      $error = translate("You must specify a group name");
+    }
+    else if ( ! empty ( $id ) ) {
+      # update
+      if ( ! dbi_query ( "UPDATE webcal_group SET cal_name = " .
+        "'$groupname', cal_last_update = $date " .
+        "WHERE cal_group_id = $id" ) ) {
+        $error = translate ("Database error") . ": " . dbi_error();
+      }
+    } else {
+      # new... get new id first
+      $res = dbi_query ( "SELECT MAX(cal_group_id) FROM webcal_group" );
+      if ( $res ) {
+        $row = dbi_fetch_row ( $res );
+        $id = $row[0];
+        $id++;
+        dbi_free_result ( $res );
+        $sql = "INSERT INTO webcal_group " .
+          "( cal_group_id, cal_owner, cal_name, cal_last_update ) VALUES ( " .
+          "$id, '$login', '$groupname', $date )";
+        if ( ! dbi_query ( $sql ) ) {
+          $error = translate ("Database error") . ": " . dbi_error();
+        }
+      } else {
+        $error = translate ("Database error") . ": " . dbi_error();
+      }
+    }
+  
+    # update user list
+    if ( $error == "" &&  ! empty ( $users ) ) {
+      dbi_query ( "DELETE FROM webcal_group_user WHERE cal_group_id = $id" );
+      for ( $i = 0; $i < count ( $users ); $i++ ) {
+        dbi_query ( "INSERT INTO webcal_group_user ( cal_group_id, cal_login ) " .
+          "VALUES ( $id, '$users[$i]' )" );
+      }
+    }
+  }
+}
+
+if ( ! empty ( $error ) ) {
+  print_header( '', '', '', true );
+
+?>
+<h2><?php etranslate("Error")?></h2>
+
+<blockquote>
+<?php
+
+echo $error;
+//if ( $sql != "" )
+//  echo "<br /><br /><strong>SQL:</strong> $sql";
+//?>
+</blockquote>
+</body>
+</html>
+<?php } else if ( empty ( $error ) ) {
+?><html><head></head><body onload="alert('<?php etranslate("Changes successfully saved");?>'); window.parent.location.href='users.php';">
+</body></html>
+<?php } ?>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/groups.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/groups.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/groups.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,29 @@
+	<a name="tabgroups"></a>
+	<div id="tabscontent_groups">
+		<?php
+			echo "<a title=\"" . 
+				translate("Add New Group") . "\" href=\"group_edit.php\" target=\"grpiframe\" onclick=\"javascript:show('grpiframe');\">" . 
+				translate("Add New Group") . "</a><br />\n";
+		?>
+			<?php
+			 $count = 0;
+				$lastrow = 0;
+				$res = dbi_query ( "SELECT cal_group_id, cal_name FROM webcal_group ORDER BY cal_name" );
+				if ( $res ) {
+					while ( $row = dbi_fetch_row ( $res ) ) {
+					  if ( $count == 0 ) {
+						  echo "<ul>\n";
+						}
+					echo "<li><a title=\"" . 
+						$row[1] . "\" href=\"group_edit.php?id=" . $row[0] . "\" target=\"grpiframe\" onclick=\"javascript:show('grpiframe');\">" . 
+						$row[1] . "</a></li>\n";
+						$count++;
+						$lastrow = $row[0];
+					}
+					if ( $count > 0 ) { echo "</ul>\n"; }
+				 dbi_free_result ( $res );
+				}
+
+			echo "<iframe src=\"group_edit.php?id=" . $lastrow . "\" name=\"grpiframe\" id=\"grpiframe\" style=\"width:90%;border-width:0px; height:325px;\"></iframe>";
+		?>
+</div>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/help.gif
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/help.gif	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/help.gif	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,3 @@
+GIF89a  æ  ÿÿÿåååâââàààÞÞÞÜÜÜÕÕÕÓÓÓÐÐÐËËËÆÆÆÄÄÄÂÂÂÀÀÀ¾¾¾»»»¹¹¹···µµµ«««©©©§§§¤¤¤¢¢¢   žžžœœœ•••ŠŠŠ‡‡‡………}}}yyywwwuuummmkkkeeecccaaa___[[[YYYWWWTTTRRRNNNHHHFFFDDDBBB@@@>>>:::888666444---+++)))'''$$$"""ÿÿÿ                                                                                                                                                                  !ù  I ,       ž€I‚I	ƒ‹‹I š $ƒš(+š)–
+š/3š1"!	!(1:š5'%)‰*6š=5.03
+Ð-š>:048;.Ê87>A@#3;?B@ð@@I $&,9šHFAþƒ(XÐè¡é‘‹dä RdÈ!A*	âD¼ˆƒ ;
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/help_admin.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/help_admin.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/help_admin.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,290 @@
+<?php
+include_once 'includes/init.php';
+print_header('', '', '', true);
+?>
+
+<h2><?php etranslate("Help")?>: <?php etranslate("System Settings")?></h2>
+
+<h3><?php etranslate("Settings")?></h3>
+<table style="border-width:0px;">
+<tr><td class="help">
+ <?php etranslate("Application Name")?>:</td><td>
+ <?php etranslate("app-name-help")?>
+</td></tr>
+<tr><td class="help">
+ <?php etranslate("Server URL")?>:</td><td>
+ <?php etranslate("server-url-help")?>
+</td></tr>
+<tr><td class="help">
+ <?php etranslate("Language")?>:</td><td>
+ <?php etranslate("language-help")?>
+</td></tr>
+<tr><td class="help">
+ <?php etranslate("Fonts")?>:</td><td>
+ <?php etranslate("fonts-help")?>
+</td></tr>
+<tr><td class="help">
+ <?php etranslate("Custom script/stylesheet")?>:</td><td>
+ <?php etranslate("custom-script-help")?>
+</td></tr>
+<tr><td class="help">
+ <?php etranslate("Custom header")?>:</td><td>
+ <?php etranslate("custom-header-help")?>
+</td></tr>
+<tr><td class="help">
+ <?php etranslate("Custom trailer")?>:</td><td>
+ <?php etranslate("custom-trailer-help")?>
+</td></tr>
+<tr><td class="help">
+ <?php etranslate("Preferred view")?>:</td><td>
+ <?php etranslate("preferred-view-help")?>
+</td></tr>
+<tr><td class="help">
+ <?php etranslate("Display weekends in week view")?>:</td><td>
+ <?php etranslate("display-weekends-help")?>
+</td></tr>
+<tr><td class="help">
+ <?php etranslate("Display days with events in bold in year view")?>:</td><td>
+ <?php etranslate("yearly-shows-events-help")?>
+</td></tr>
+<tr><td class="help">
+ <?php etranslate("Display description in printer day view")?>:</td><td>
+ <?php etranslate("display-desc-print-day-help")?>
+</td></tr>
+<tr><td class="help">
+ <?php etranslate("Date format")?>:</td><td>
+ <?php etranslate("date-format-help")?>
+</td></tr>
+<tr><td class="help">
+ <?php etranslate("Time format")?>:</td><td>
+ <?php etranslate("time-format-help")?>
+</td></tr>
+<tr><td class="help">
+ <?php etranslate("Time interval")?>:</td><td>
+ <?php etranslate("time-interval-help")?>
+</td></tr>
+<tr><td class="help">
+ <?php etranslate("Auto-refresh calendars")?>:</td><td>
+ <?php etranslate("auto-refresh-help")?>
+</td></tr>
+<tr><td class="help">
+ <?php etranslate("Auto-refresh time")?>:</td><td>
+ <?php etranslate("auto-refresh-time-help")?>
+</td></tr>
+<tr><td class="help">
+ <?php etranslate("Require event approvals")?>:</td><td>
+ <?php etranslate("require-approvals-help")?>
+</td></tr>
+<tr><td class="help">
+ <?php etranslate("Display unapproved")?>:</td><td>
+ <?php etranslate("display-unapproved-help")?>
+</td></tr>
+<tr><td class="help">
+ <?php etranslate("Display week number")?>:</td><td>
+ <?php etranslate("display-week-number-help")?>
+</td></tr>
+<tr><td class="help">
+ <?php etranslate("Week starts on")?>:</td><td>
+ <?php etranslate("display-week-starts-on")?>
+</td></tr>
+<tr><td class="help">
+ <?php etranslate("Work hours")?>:</td><td>
+ <?php etranslate("work-hours-help")?>
+</td></tr>
+<tr><td class="help">
+ <?php etranslate("Disable Priority field")?>:</td><td>
+ <?php etranslate("disable-priority-field-help")?>
+</td></tr>
+<tr><td class="help">
+ <?php etranslate("Disable Access field")?>:</td><td>
+ <?php etranslate("disable-access-field-help")?>
+</td></tr>
+<tr><td class="help">
+ <?php etranslate("Disable Participants field")?>:</td><td>
+ <?php etranslate("disable-participants-field-help")?>
+</td></tr>
+<tr><td class="help">
+ <?php etranslate("Disable Repeating field")?>:</td><td>
+ <?php etranslate("disable-repeating-field-help")?>
+</td></tr>
+<tr><td class="help">
+ <?php etranslate("Display Site Extras in popup")?>:</td><td>
+ <?php etranslate("popup-includes-siteextras-help")?>
+</td></tr>
+<tr><td class="help">
+ <?php etranslate("Allow HTML in Description")?>:</td><td>
+ <?php etranslate("allow-html-description-help")?>
+</td></tr>
+<tr><td class="help">
+ <?php etranslate("Allow viewing other user's calendars")?>:</td><td>
+ <?php etranslate("allow-view-other-help")?>
+</td></tr>
+<tr><td class="help">
+ <?php etranslate("Include add event link in views")?>:</td><td>
+ <?php etranslate("allow-view-add-help")?>
+</td></tr>
+<tr><td class="help">
+ <?php etranslate("Remember last login")?>:</td><td>
+ <?php etranslate("remember-last-login-help")?>
+</td></tr>
+<tr><td class="help">
+ <?php etranslate("Check for event conflicts")?>:</td><td>
+ <?php etranslate("conflict-check-help")?>
+</td></tr>
+<tr><td class="help">
+ <?php etranslate("Conflict checking months")?>:</td><td>
+ <?php etranslate("conflict-months-help")?>
+</td></tr>
+<tr><td class="help">
+ <?php etranslate("Allow users to override conflicts")?>:</td><td>
+ <?php etranslate("conflict-check-override-help")?>
+</td></tr>
+<tr><td class="help">
+ <?php etranslate("Limit number of timed events per day")?>:</td><td>
+ <?php etranslate("limit-appts-help")?>
+</td></tr>
+<tr><td class="help">
+ <?php etranslate("Maximum timed events per day")?>:</td><td>
+ <?php etranslate("limit-appts-number-help")?>
+</td></tr>
+<tr><td class="help">
+ <?php etranslate("Specify timed event length by")?>:</td><td>
+ <?php etranslate("timed-evt-len-help")?>
+</td></tr>
+</table>
+<h3><?php etranslate("Public Access")?></h3>
+<table style="border-width:0px;">
+<tr><td class="help">
+ <?php etranslate("Allow public access")?>:</td><td>
+ <?php etranslate("allow-public-access-help")?>
+</td></tr>
+<tr><td class="help">
+ <?php etranslate("Public access visible by default")?>:</td><td>
+ <?php etranslate("public-access-default-visible")?>
+</td></tr>
+<tr><td class="help">
+ <?php etranslate("Public access is default participant")?>:</td><td>
+ <?php etranslate("public-access-default-selected")?>
+</td></tr>
+<tr><td class="help">
+ <?php etranslate("Public access can view other users")?>:</td><td>
+ <?php etranslate("public-access-view-others-help")?>
+</td></tr>
+<tr><td class="help">
+ <?php etranslate("Public access can add events")?>:</td><td>
+ <?php etranslate("public-access-can-add-help")?>
+</td></tr>
+<tr><td class="help">
+ <?php etranslate("Public access new events require approval")?>:</td><td>
+ <?php etranslate("public-access-add-requires-approval-help")?>
+</td></tr>
+<tr><td class="help">
+ <?php etranslate("Public access can view participants")?>:</td><td>
+ <?php etranslate("public-access-sees-participants-help")?>
+</td></tr>
+</table>
+<h3><?php etranslate("Groups")?></h3>
+<table style="border-width:0px;">
+<tr><td class="help">
+ <?php etranslate("Groups enabled")?>:</td><td>
+ <?php etranslate("groups-enabled-help")?>
+</td></tr>
+<tr><td class="help">
+ <?php etranslate("User sees only his groups")?>:</td><td>
+ <?php etranslate("user-sees-his-group-help")?>
+</td></tr>
+</table>
+
+
+<h3><?php etranslate("Nonuser")?></h3>
+<table style="border-width:0px;">
+<tr><td class="help">
+ <?php etranslate("Nonuser enabled")?>:</td><td>
+ <?php etranslate("nonuser-enabled-help")?>
+</td></tr>
+<tr><td class="help">
+ <?php etranslate("Nonuser list")?>:</td><td>
+ <?php etranslate("nonuser-list-help")?>
+</td></tr>
+</table>
+
+<h3><?php etranslate("Other")?></h3>
+<table style="border-width:0px;">
+<tr><td class="help">
+ <?php etranslate("Reports enabled")?>:</td><td>
+ <?php etranslate("reports-enabled-help")?>
+</td></tr>
+<tr><td class="help">
+ <?php etranslate("Allow remote subscriptions")?>:</td><td>
+ <?php etranslate("subscriptions-enabled-help")?>
+</td></tr>
+<tr><td class="help">
+ <?php etranslate("Categories enabled")?>:</td><td>
+ <?php etranslate("categories-enabled-help")?>
+</td></tr>
+<tr><td class="help">
+ <?php etranslate("Allow external users")?>:</td><td>
+ <?php etranslate("allow-external-users-help")?>
+</td></tr>
+<tr><td class="help">
+ <?php etranslate("External users can receive email notifications")?>:</td><td>
+ <?php etranslate("external-can-receive-notification-help")?>
+</td></tr>
+<tr><td class="help">
+ <?php etranslate("External users can receive email reminders")?>:</td><td>
+ <?php etranslate("external-can-receive-reminder-help")?>
+</td></tr>
+</table>
+
+
+<h3><?php etranslate("Email")?></h3>
+<table style="border-width:0px;">
+<tr><td class="help">
+ <?php etranslate("Email enabled")?>:</td><td>
+ <?php etranslate("email-enabled-help")?>
+</td></tr>
+<tr><td class="help">
+ <?php etranslate("Default sender address")?>:</td><td>
+ <?php etranslate("email-default-sender")?>
+</td></tr>
+<tr><td class="help">
+ <?php etranslate("Event reminders")?>:</td><td>
+ <?php etranslate("email-event-reminders-help")?>
+</td></tr>
+<tr><td class="help">
+ <?php etranslate("Events added to my calendar")?>:</td><td>
+ <?php etranslate("email-event-added")?>
+</td></tr>
+<tr><td class="help">
+ <?php etranslate("Events updated on my calendar")?>:</td><td>
+ <?php etranslate("email-event-updated")?>
+</td></tr>
+<tr><td class="help">
+ <?php etranslate("Events removed from my calendar")?>:</td><td>
+ <?php etranslate("email-event-deleted")?>
+</td></tr>
+<tr><td class="help">
+ <?php etranslate("Event rejected by participant")?>:</td><td>
+ <?php etranslate("email-event-rejected")?>
+</td></tr>
+</table>
+
+<h3><?php etranslate("Colors")?></h3>
+<table style="border-width:0px;">
+<tr><td class="help">
+ <?php etranslate("Allow user to customize colors")?>:</td><td>
+ <?php etranslate("user-customize-color")?>
+</td></tr>
+<tr><td class="help">
+ <?php etranslate("Enable gradient images for background colors")?>:</td><td>
+ <?php etranslate("enable-gradient-help")?>
+</td></tr>
+<tr><td class="help">
+ <?php etranslate("Manually entering color values")?>:</td><td>
+ <?php etranslate("colors-help")?>
+</td></tr>
+</table>
+
+<?php include_once "includes/help_trailer.php"; ?>
+</body>
+</html>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/help_bug.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/help_bug.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/help_bug.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,58 @@
+<?php
+	include_once 'includes/init.php';
+	print_header('','','',true);
+?>
+
+<h2><?php etranslate("Report Bug")?></h2>
+
+<?php 
+	//No need to translate the text below since I want all bugs
+	//reported in English.
+	//Americans only speak English, of course ;-)
+?>
+Please include all the information below when reporting a bug.
+<?php if ( $LANGUAGE != "English-US" ) { ?>
+	Also.. when reporting a bug, please use <strong>English</strong> rather than <?php echo $LANGUAGE?>.
+<?php } ?>
+
+<form action="http://sourceforge.net/tracker/" target="_new">
+	<input type="hidden" name="func" value="add" />
+	<input type="hidden" name="group_id" value="3870" />
+	<input type="hidden" name="atid" value="103870" />
+	<input type="submit" value="<?php etranslate("Report Bug")?>" />
+</form>
+<br /><br />
+
+<h3><?php etranslate("System Settings")?></h3>
+<?php
+if ( empty ( $SERVER_SOFTWARE ) )
+  $SERVER_SOFTWARE = $_SERVER["SERVER_SOFTWARE"];
+if ( empty ( $HTTP_USER_AGENT ) )
+  $HTTP_USER_AGENT = $_SERVER["HTTP_USER_AGENT"];
+if ( empty ( $HTTP_USER_AGENT ) )
+  $HTTP_USER_AGENT = $_SERVER["HTTP_USER_AGENT"];
+
+echo "<pre>";
+printf ( "%-25s: %s\n", "PROGRAM_NAME", $PROGRAM_NAME );
+printf ( "%-25s: %s\n", "SERVER_SOFTWARE", $SERVER_SOFTWARE );
+printf ( "%-25s: %s\n", "Web Browser", $HTTP_USER_AGENT );
+printf ( "%-25s: %s\n", "db_type", $db_type );
+printf ( "%-25s: %s\n", "readonly", $readonly );
+printf ( "%-25s: %s\n", "single_user", $single_user );
+printf ( "%-25s: %s\n", "single_user_login", $single_user_login );
+printf ( "%-25s: %s\n", "use_http_auth", $use_http_auth ? "true" : "false" );
+printf ( "%-25s: %s\n", "user_inc", $user_inc );
+
+$res = dbi_query ( "SELECT cal_setting, cal_value FROM webcal_config" );
+if ( $res ) {
+  while ( $row = dbi_fetch_row ( $res ) ) {
+    printf ( "%-25s: %s\n", $row[0], $row[1] );
+  }
+  dbi_free_result ( $res );
+}
+echo "</pre>\n";
+
+include_once "includes/help_trailer.php";
+?>
+</body>
+</html>
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/help_edit_entry.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/help_edit_entry.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/help_edit_entry.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,81 @@
+<?php
+	include_once 'includes/init.php';
+	print_header('','','',true);
+?>
+
+<h2><?php etranslate("Help")?>: <?php etranslate("Adding/Editing Calendar Entries")?></h2>
+
+<table style="border-width:0px;">
+	<tr><td class="help">
+		<?php etranslate("Brief Description")?>:</td><td>
+		<?php etranslate("brief-description-help")?>
+	</td></tr>
+	<tr><td class="help">
+		<?php etranslate("Full Description")?>:</td><td>
+		<?php etranslate("full-description-help")?>
+	</td></tr>
+	<tr><td class="help">
+		<?php etranslate("Date")?>:</td><td>
+		<?php etranslate("date-help")?>
+	</td></tr>
+	<tr><td class="help">
+		<?php etranslate("Time")?>:</td><td>
+		<?php etranslate("time-help")?>
+	</td></tr>
+   <?php if ( $GLOBALS['TIMED_EVT_LEN'] != 'E' ) { ?>
+	<tr><td class="help">
+		<?php etranslate("Duration")?>:</td><td>
+		<?php etranslate("duration-help")?>
+	</td></tr>
+   <?php } else { ?>
+	<tr><td class="help">
+ 		<?php etranslate("End Time")?>:</td><td>
+ 		<?php etranslate("end-time-help")?>
+ 	</td></tr>
+   <?php } ?>
+	<?php if ( $disable_priority_field != "Y" ) { ?>
+		<tr><td class="help">
+			<?php etranslate("Priority")?>:</td><td>
+			<?php etranslate("priority-help")?>
+		</td></tr>
+	<?php } ?>
+	<?php if ( $disable_access_field != "Y" ) { ?>
+		<tr><td class="help">
+			<?php etranslate("Access")?>:</td><td>
+			<?php etranslate("access-help")?>
+		</td></tr>
+	<?php } ?>
+	<?php
+		$show_participants = ( $disable_participants_field != "Y" );
+		if ( $is_admin )
+			$show_participants = true;
+		if ( $single_user == "N" && $show_participants ) { ?>
+			<tr><td class="help">
+				<?php etranslate("Participants")?>:</td><td>
+				<?php etranslate("participants-help")?>
+			</td></tr>
+		<?php } ?>
+	<?php if ( $disable_repeating_field != "Y" ) { ?>
+		<tr><td class="help">
+			<?php etranslate("Repeat Type")?>:</td><td>
+			<?php etranslate("repeat-type-help")?>
+		</td></tr>
+		<tr><td class="help">
+			<?php etranslate("Repeat End Date")?>:</td><td>
+			<?php etranslate("repeat-end-date-help")?>
+		</td></tr>
+		<tr><td class="help">
+			<?php etranslate("Repeat Day")?>:</td><td>
+			<?php etranslate("repeat-day-help")?>
+		</td></tr>
+		<tr><td class="help">
+			<?php etranslate("Frequency")?>:</td><td>
+			<?php etranslate("repeat-frequency-help")?>
+		</td></tr>
+	<?php } ?>
+</table>
+
+<?php include_once "includes/help_trailer.php"; ?>
+
+</body>
+</html>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/help_import.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/help_import.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/help_import.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,38 @@
+<?php
+	include_once 'includes/init.php';
+	print_header('','','',true);
+?>
+
+<h2><?php etranslate("Help")?>: <?php etranslate("Import")?></h2>
+
+<h3><?php etranslate("Palm Desktop")?></h3>
+	<?php etranslate("This form will allow you to import entries from the Palm Desktop Datebook."); ?><br />
+	<?php etranslate("It should be located in your Palm directory in <tt>datebook/datebook.dat</tt> in a subdirectory named by your username.") ?><br /><br />
+
+<?php etranslate("The following entries will not be imported")?>:
+	<ul>
+		<li><?php etranslate("Entries older than the current date")?></li>
+		<li><?php etranslate("Entries created in the Palm Desktop that have not been HotSync'd")?></li>
+	</ul>
+	<br /><br />
+
+	<?php etranslate("Anything imported from Palm will be overwritten during the next import (unless the event date has passed).") ?>
+	<?php etranslate("Therefore, updates should be made in the Palm Desktop.");?>
+
+<h3><?php etranslate("vCal")?></h3>
+	<?php etranslate("This form will import vCalendar (.vcs) 1.0 events");?>.<br /><br />
+
+<?php etranslate("The following formats have been tested");?>:
+	<ul>
+		<li><?php etranslate("Palm Desktop 4"); ?></li>
+		<li><?php etranslate("Lotus Organizer 6"); ?></li>
+		<li><?php etranslate("Microsoft Outlook 2002"); ?></li>
+	</ul>
+
+<h3><?php etranslate("iCalendar")?></h3>
+	<p><?php etranslate("This form will import iCalendar (.ics) events");?>.
+	<?php etranslate("Enabling <b>Overwrite Prior Import</b> will cause events imported previously that used the same UID as an event from the new import file to be marked as deleted.  This should allow an updated iCalendar file to be imported without creating duplicates."); ?></p>
+
+<?php include_once "includes/help_trailer.php"; ?>
+</body>
+</html>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/help_index.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/help_index.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/help_index.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,20 @@
+<?php
+	include_once 'includes/init.php';
+	print_header('','','',true);
+?>
+
+<h2><?php etranslate("Help Index")?></h2>
+<ul>
+	<li><a title="<?php etranslate("Adding/Editing Calendar Entries")?>" href="help_edit_entry.php"><?php etranslate("Adding/Editing Calendar Entries")?></a></li>
+	<li><a title="<?php etranslate("Layers")?>" href="help_layers.php"><?php etranslate("Layers")?></a></li>
+	<li><a title="<?php etranslate("Import")?>" href="help_import.php"><?php etranslate("Import")?></a></li>
+	<li><a title="<?php etranslate("Preferences")?>" href="help_pref.php"><?php etranslate("Preferences")?></a></li>
+	<?php if ( $is_admin ) { ?>
+		<li><a title="<?php etranslate("System Settings")?>" href="help_admin.php"><?php etranslate("System Settings")?></a></li>
+	<?php } ?>
+	<li><a title="<?php etranslate("Report Bug")?>" href="help_bug.php"><?php etranslate("Report Bug")?></a></li>
+</ul>
+
+<?php include_once "includes/help_trailer.php"; ?>
+</body>
+</html>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/help_layers.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/help_layers.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/help_layers.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,48 @@
+<?php
+include_once 'includes/init.php';
+print_header('','','',true);
+?>
+
+<h2><?php etranslate("Help")?>: <?php etranslate("Layers")?></h2>
+
+<table style="border-width:0px;">
+	<tr><td colspan="2">
+		<?php etranslate("Layers are useful for displaying other users' events in your own calendar.  You can specifiy the user and the color the events will be displayed in.")?>
+	</td></tr>
+	<tr><td colspan="2"> </td></tr>
+	<tr><td class="help">
+		<?php etranslate("Add/Edit/Delete")?>:</td><td>
+		<?php etranslate("Clicking the Edit Layers link in the admin section at the bottom of the page will allow you to add/edit/delete layers.")?>
+	</td></tr>
+	<tr><td class="help">
+		<?php etranslate("Source")?>:</td><td>
+		<?php etranslate("Specifies the user that you would like to see displayed in your calendar.")?>
+	</td></tr>
+	<tr><td class="help">
+		<?php etranslate("Colors")?>:</td><td>
+		<?php etranslate("The text color of the new layer that will be displayed in your calendar.")?>
+	</td></tr>
+	<tr><td class="help">
+		<?php etranslate("Duplicates")?>:</td><td>
+		<?php etranslate("If checked, events that are duplicates of your events will be shown.")?>
+	</td></tr>
+	<tr><td class="help">
+		<?php etranslate("Disabling")?>:</td><td>
+		<?php etranslate("Press the Disable Layers link in the admin section at the bottom of the page to turn off layers.")?>
+	</td></tr>
+	<tr><td class="help">
+		<?php etranslate("Enabling")?>:</td><td>
+		<?php etranslate("Press the Enable Layers link in the admin section at the bottom of the page to turn on layers.")?>
+	</td></tr>
+</table>
+<br /><br />
+
+<?php if ( $allow_color_customization ) { ?>
+	<h3><?php etranslate("Colors")?></h3>
+	<?php etranslate("colors-help")?>
+	<br /><br />
+<?php } // if $allow_color_customization ?>
+
+<?php include_once "includes/help_trailer.php"; ?>
+</body>
+</html>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/help_pref.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/help_pref.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/help_pref.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,137 @@
+<?php
+include_once 'includes/init.php';
+print_header('','','',true);
+?>
+
+<h2><?php etranslate("Help")?>: <?php etranslate("Preferences")?></h2>
+
+<h3><?php etranslate("Settings")?></h3>
+<table style="border-width:0px;">
+ <tr><td class="help">
+  <?php etranslate("Language")?>:</td><td>
+  <?php etranslate("language-help")?>
+ </td></tr>
+  <tr><td class="help">
+  <?php etranslate("Timezone Offset")?>:</td><td>
+  <?php etranslate("tz-help")?>
+ </td></tr>
+ <tr><td class="help">
+  <?php etranslate("Fonts")?>:</td><td>
+  <?php etranslate("fonts-help")?>
+ </td></tr>
+ <tr><td class="help">
+  <?php etranslate("Preferred view")?>:</td><td>
+  <?php etranslate("preferred-view-help")?>
+ </td></tr>
+ <tr><td class="help">
+  <?php etranslate("Display weekends in week view")?>:</td><td>
+  <?php etranslate("display-weekends-help")?>
+ </td></tr>
+ <tr><td class="help">
+  <?php etranslate("Display description in printer day view")?>:</td><td>
+  <?php etranslate("display-desc-print-day-help")?>
+ </td></tr>
+ <tr><td class="help">
+  <?php etranslate("Date format")?>:</td><td>
+  <?php etranslate("date-format-help")?>
+ </td></tr>
+ <tr><td class="help">
+  <?php etranslate("Time format")?>:</td><td>
+  <?php etranslate("time-format-help")?>
+ </td></tr>
+ <tr><td class="help">
+  <?php etranslate("Time interval")?>:</td><td>
+  <?php etranslate("time-interval-help")?>
+ </td></tr>
+  <tr><td class="help">
+  <?php etranslate("Auto-refresh calendars")?>:</td><td>
+  <?php etranslate("auto-refresh-help")?>
+ </td></tr>
+  <tr><td class="help">
+  <?php etranslate("Auto-refresh time")?>:</td><td>
+  <?php etranslate("auto-refresh-time-help")?>
+ </td></tr>
+ <tr><td class="help">
+  <?php etranslate("Display unapproved")?>:</td><td>
+  <?php etranslate("display-unapproved-help")?>
+ </td></tr>
+ <tr><td class="help">
+  <?php etranslate("Display week number")?>:</td><td>
+  <?php etranslate("display-week-number-help")?>
+ </td></tr>
+ <tr><td class="help">
+  <?php etranslate("Week starts on")?>:</td><td>
+  <?php etranslate("display-week-starts-on")?>
+ </td></tr>
+ <tr><td class="help">
+  <?php etranslate("Work hours")?>:</td><td>
+  <?php etranslate("work-hours-help")?>
+ </td></tr>
+ <tr><td class="help">
+   <?php etranslate("Specify timed event length by")?>:</td><td>
+   <?php etranslate("timed-evt-len-help")?>
+  </td></tr>
+ <tr><td class="help">
+  <?php etranslate("Default Category")?>:</td><td>
+  <?php etranslate("default-category-help")?>
+ </td></tr>
+</table>
+<br /><br />
+
+<h3><?php etranslate("Email")?></h3>
+<table style="border-width:0px;">
+ <tr><td class="help">
+  <?php etranslate("Event reminders")?>:</td><td>
+  <?php etranslate("email-event-reminders-help")?>
+ </td></tr>
+ <tr><td class="help">
+  <?php etranslate("Events added to my calendar")?>:</td><td>
+  <?php etranslate("email-event-added")?>
+ </td></tr>
+ <tr><td class="help">
+  <?php etranslate("Events updated on my calendar")?>:</td><td>
+  <?php etranslate("email-event-updated")?>
+ </td></tr>
+ <tr><td class="help">
+  <?php etranslate("Events removed from my calendar")?>:</td><td>
+  <?php etranslate("email-event-deleted")?>
+ </td></tr>
+ <tr><td class="help">
+  <?php etranslate("Event rejected by participant")?>:</td><td>
+  <?php etranslate("email-event-rejected")?>
+ </td></tr>
+</table>
+
+<h3><?php etranslate("When I am the boss")?></h3>
+<table style="border-width:0px;">
+ <tr><td class="help">
+  <?php etranslate("Email me event notification")?>:</td><td>
+  <?php etranslate("email-boss-notifications-help")?>
+ </td></tr>
+ <tr><td class="help">
+  <?php etranslate("I want to approve events")?>:</td><td>
+  <?php etranslate("boss-approve-event-help")?>
+ </td></tr>
+</table>
+<?php if ( $PUBLISH_ENABLED == 'Y' ) { ?>
+ <h3><?php etranslate("Subscribe/Publish")?></h3>
+ <table style="border-width:0px;">
+  <tr><td class="help">
+   <?php etranslate("Allow remote subscriptions")?>:</td><td>
+   <?php etranslate("allow-remote-subscriptions-help")?>
+  </td></tr>
+  <tr><td class="help">
+   <?php etranslate("URL")?>:</td><td>
+   <?php etranslate("remote-subscriptions-url-help")?>
+  </td></tr>
+ </table>
+<?php } ?>
+
+<?php if ( $allow_color_customization == 'Y' ) { ?>
+ <h3><?php etranslate("Colors")?></h3>
+ <?php etranslate("colors-help")?>
+ <br /><br />
+<?php } // if $allow_color_customization ?>
+<?php include_once "includes/help_trailer.php"; ?>
+</body>
+</html>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/htmlarea-3.0rc1.zip
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/htmlarea-3.0rc1.zip	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/htmlarea-3.0rc1.zip	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,1685 @@
+PK
+     &1              includes/htmlarea/UT	 8]­AT]­AUx õõPK    ê…}1¸`1¿s-  FÄ    includes/htmlarea/ChangeLogUT	 蘫A5]­AUx õõÄ\]{Û¶’¾¶š‹¹+ÉIÚ³Ûã¤9͇ۺÓ®l÷óñ‘„š$X‚´¬ü­s³÷çí;€‚DJv”ìîUb3ƒ™w> '}=zôdôøŸ„8×s©ÅKùÁB<˵ó]f™Í­Çü¿ÔäRϾ™,fÇ*ÿn‡¢Ìš™.ìñ+SÔê¶>WEsÜ÷þœdê—RU²Ö¯Æœ4e*k•Š¹’©ªìj‘ÂÐ Þê¹,®­˜ËY¥‹£ÃÃ'~þòñÛ¤‚òêWYÉY%˹=Vô÷¨l8åÑÔB´+Î͝eRÔF$•‰BŠgåsYklE˜©x6©ÄñsNß¾;½¼2©	ØUéIC»š,Å‹Tæâ·JÏæõ˜i›×y&1%o?¡/h
+™eÂ?«å¯•²VLM6áèJÕTJèúðÀ}C¯•*­°º˜eJØR& \Zñ§bb˧‡§˜®K}/¾gïhò&·b‘vtÄ´½Â3õÆÌÀ•öÿBcÖ¤©AâRȦŸkð_3UØ±Sk@’ªÔC+
+#J£G(ÏÄ«¹Œ$úÍÇKtkS}‹%Kc­†°Ä¤™ñË™‚Ó+™éYq•°¸Ç3=vÞýÞØZO—ý/35­ûß89n¼š@¡¯7&sYå²ì<6™©®&³þçÓžçe‡È´›¼û´CXª2U«Í§?$x51Yºå•†¬u²å¥…v_o›Ô6“­o:¼ðoš–!ƒvo¾Ÿ«¬óͼ#OÒŒÍgü¿ÎC¬SÔ®µ[^å¦ê|EºpU›~ɃêŽà3mÁÜ&ë{_MGt¥´]1U*5gDQÓ§¡VÞt&Á±Z@ÒUÚ=¶Ìt¨ï Žõu§Ø‹…TÅU.ou®?¨­ïuÑ}¦*PM†µsª&Æ©-Ž)kþ8õïEd¿^dêV’žˆŸñÏ
+óˆ¼NñêüRÌ*Ó”±Ïx¼‡Ï¨Ìï*©G°ßS=ßæÙ‰¨p€¤…MÇbš•xÌcýóQajeǤ+O¾áw<¤çeÆœHÕ-®æò¶¬¡dšb’ðV¤ºQ¦Z
+þxëê0‰aûG_í±ý52àmS‘/«hyA/<<¦±äãלìe©²ìÕ\%ת:¶ôÇ(¡¿F™™ÁŠ$3=¼{l£=_î3’½6?‰n/À—ÒT5¢É•HMÒä8Ôà›³3 [l“ÌÉEÖ&Nà(Nð­™,pF€iÚ'[¥ ‹Î+ÛÌ žv Ç:9êz¨Jåæ†Ý"Hqö@Áã‚{²/lÔy;891˜Vóá°lnõìô(’ú£—zëä‡÷×é!˜N_A¼Û7F¤¹Õ*™»¹VPÀ¤àƒ/^8!¾/4ƒø’àýØcë%´5±àöHÀyª\èÒ6ùGê&}í-ëÈÇ~~x0"Ù@Hb¤þŒ‡zÕ|.j9³G?/Ì¥œÇÀU `7 ϤÁV©œ-âì’SU=%¼•›‡âÇwçoNN v-=|ý˹¨šìÃøã׍—˜¨ºö§ëdôŸ0âºÆŸ@êx“‰?‰ÆË'æúdtü¿bø0€ÙzFëò¡.@â–ûFñY¬Ž&¡V"¾ÕB$¦ \54ž µ’Éüð@lò#/KëæÀijFº¼¶ÜSÑj¬_Ŀé¢çéq»ð¨`31ÎÜÓêâÁ…‚”ë÷büùïÍù¸	Dœªügs/ÀÁ×~TÞÞSWüv¼8;uè¡5
+ERZcõ˜Úþñ`H’éƒê³ñ˜‹ð€©ÉÄ=/dyÛMF‰X{£hõûp¦Î
+=…BxceµäÙ¦M‘˜Të%Ë´eÞ`iÉÒ˜#¡2í‚\7Ûb˜o"Äá1! i]ñÑçæ^&
+$ÍJµ[®"-O*KÏ€¡äòÞõvЉ<¶Ö5¹¦Šÿ¶k«2j­"]5€ØRvOQF†òË/FòÃÙ9ñs¦èé>VÏ’¹)AÀåQk¼Ä¿DúB.‡zËB¡«·üW©QöŠŽ"$0•`:—p¼¾ø‚e
+ÝPä{oœp°r$|,q͵Vþ¶Ã©"¥™V^òÉÁç
+·­\"«k	öí× ÂïÐE(ó|DæÜÉÁ”Mi6öJQ‘LD‚ÈìZ at W tKVTXS<¬‘×-‡<ep
+†ÏSŧ ”¤ižÀþ5#„údDÄÚÍljˍ`y›î»JužÙΤ7#bbß‹%ôMâ¨l¾[·‚/9Ê™6µUnb”a‡R-¡îœèŠÄ51†‡( ”Õ¸¾­‡Žƒ0[<ªG⌊çüSAá=ub©à¹	¬®äÒê왼XÇΊ$kÈìÈ‚½´DÀ„ø‰ì¦ˆè‰0²ñp¥à_~‚ÿ?´¤L§{֗˳”¢ ÃƒJÕMEÇmªU–R¾Žì'Ì«àôjs…ú£ÈöæËb<Éë!«/lúၮ9aT‡yd±Ä Ê©É,ñŽ°ÖuÞDÃb‰ŒÒo4©dË
+ƒê)ëxíiøéE;»dÐIì8bôz,d2q°Á}¶˜kB`†+7h17|`ãq* n˜¡˜*ÑSô¹îƒNF!Þ*v;€fKÎÕÉ2$Î^¾õó%¡±w.¨Å ë\_+ñšÎ4	ƒ%›åB·Š\ʱËÓQ„øïaËö	;|þ’œõ%NK¥áýˆ.GæF/æ`9Ø$èYÃÿ`DŒ˜ó0vg
+	²ºŠ$'dYf:ÖøÇÿø‰)B—ó8@<ä°'&]i€ðVû’œâk¸ß I¿˜¹r••“ˆÌ'{¦Ø«¦7û
+}ø·&[Jq9¯—ÕR^›ÉûÑWûË»“ÅOULB´È{ºc‘Ãק‚ŒŒÍØ*Åj¿çpE`ïOr6ÓLÄWàêèɾŒUnW§ð—…†ÝˆV]ÍþèÏŸ¨]ŒËX¢‚tŒÐ
+ÐKÃYqñIÝÅ_Fù蒊Ï? À^ÇÛ‹•è50/¬°?dꃱÝÅáWÀ Süà“ø°ÁEš©jH¦sÊþÁ|†Uªkœv3¡Ù6¸àñ?kÊíBý‰¹ýûsO¨3u
+ðÜ
+
+éìs&’@¿÷ï´ÃÜÀ`<
+*²Llì’¹ù  "r38¡‰L®·YœÝ»]Ó='þß"
+tU¤ þ…RêboÀƒGI(ø­Šà¬€S <7Šwìò®¾þSpyɈϩl–QÊ€5‚T+‚’eU_ÀO'ðVàl)‹#8ÿzÓSÂg¨LJ¸î¸’uQü9WqCYøCÄÕ9Ìód!Ž[B£êg¶Íþo|ï퓳ºNuV0Ëù¬7ŲõF	P¼÷ÔµÖ³Ù»ðÿ.ü^jUÌÆe1[Ó}bx<.·¼Ù8컪ÕÅî÷1‹ú‡ÝcQm_½ÝÈê¿pœ_}âŠ9h<
+¨ÉUŒsUi¼/¹ºyi­êe¤÷P„˜¸ú{ÕÊŒlãÚáøýÖáدÔ$Pr‹íG¼Í{öø›·tä)(ôsƒ
+§ŒC3hvi)ndÖ(Ô?sŸ) ÃVÔøêôòUo‹w6ßí‹éÂQQÖv•úƒ„1¶ºMTID­+|G©O¸n‚)Ž¬W1l‚²¤ÀÎÅép’L×
+@ÁgW±õ…¤\Ì¦Ž)(74AM‰_¡Ä>8ÛíÜqìJ¸é<	›ZÚ.ÆÊ
+À–®35äϼ—‹ÛoÕÌJQ\£ÆáÁ[S-ÔlSÅ–ëòF—— &VÖ=ªNYmT돖ùÉ`WяöŽû2,. áèí}½PÜ*ØøT¼ªˆu–ãQ ÂÙq<WñŽ‡ÏŽœ="ÞoVó~ßèzÞÈMì#柠ox|V××êF'Ñâ{ [^|î`ójR©?jh³^W7ýFWxðV-rYÄ‚Ø-ðâ7Åš3¼¹£TNø¼5K »×º˜‹·2HØ#@ºÃ«r„R}ÏÆ€N¡ž U\=—ëI(¤®å—¢òÀá&ÃCø(”ÍVŸ·9Ö7ï.(Ý~ñîÍÑš9ò¹øÓX†€\0ƒÌÀxZom1Õ_…¯4µ²|´W¹“/äÊNo±b,¿-N98R“±sÕ¥Uï5fx³g…v˜ÞJNdBK}–$ïñ#Œ¦9¬G¬͔”Ò¹¢¨DNÉ ó*Áºj.²Ò§”•p	ì0ƒµ1b°ŠöœM z‹3ç:UÒ툫Ty¢·ßJO]ñêWìÙ|Ë(ÎÁ<ÝH˜cݹ´4Qiëg\€¥ë
+ܨøKQyÆï–{*sªáÓÜ\ïàå†4K†Ùš<´§ÂUe¨AVÎÑÓ“ñâaÔ þÔÑ>ÿ‹óõ¾ÞM$âF5äô-¹†7°)²ÉjÊñ?´5Mýœ-Wú·OøÕVqÕÏÓïÞ¶ %JŦÖÔJçÇ?[fûã³×qéÜ@,Á:ÈÒ6×,ˆo¼rZvEÅÙ®m)í
+ô¶–Ê&Ǹ“1k±é;²Q~•õüD<à€·=­µ¬ÉÉ5ܲjj½p[I¥ÝY>¡Kø_ÒÀ
+ÄÖTê“çîjéáA
+ÈZ‚¾ÇÇqèýÅW}º!¸8m‡y:³AªÛ&¹f;Dô‡ZbÚ”p^*NRþ”²ŸÄ¼	™Î)ò)NDÝ}*ÎæÂRðìtèŽ;?pߝ30Öžº
+gt€¿.N–‘¦cœ}ʳBu&š(¦ökSUHŠ&KøD'²±\	Õõx<¦dìµNaö4²ŒZGëña%ŸJýÑh
+^(à±l|ßP07ïûü©çÚ(pŠsüņD°Ôq$¸?*¬{ѵ’2]IõkÕp3óµ¹”/ƒç<˜'{m‰Ö:í9»ïšG‰añàƒ^¾¸<¥¶‘P<¡d=M°šD·5ä|æò†\ÂPÿíáAë2*,„Ì]ÊÌÞ“ŽzጅøQŠ_|!žŸl¦,ãþA+Éb”šåÕoÉkq²…>~—ÌpÜ)âP‘Ý_1ÖÆ: "QJÞ?\'ÀæIg.®;£ýˆo¿}l?ïkâ¼ädV¸¸â¬ 8)ˆ(<¤«d[“g¹z%¼õVÌþÊk~¬C-Ò
+§tP+_@¡Œ@e²®¿¹üêQ(D	Ž}¨‘#3읹5epvþCÈšÙ¶ÉÜ×)Èø]O°;šŠ‚u‹“£³¦"Oå„4ȘBXùüÄ4oØ·¸ÅØðÉA†×~Ÿ€uí¹}gÓGëÚ	AˆÑ60 at c$”®î E4=ÕÔÇäÁŽ¹ÉVŒ`Ð[ΩAS,¨iÄŸ™®õ
+öçË ¾…ýøóy±Àç­rŸPqÖ5>|‡À+XU6ãÄô± ‰µ¼VT`­ØsMœ¦ã>¡"&ô`Jp¼‡·Át%þôp¤ÍžxàÊvi¡-µ‡5®bL‰ÑkW,¤¯È'vñδ\ᇠzJ«:Æà¨{}¢
+¤°¡§ÞâÐn¹H]m`¥ï³ÿe„eçJµf2ÒÿOÈŠ·i4² ­:‘„›‚á…ëm‰Ø’«„!ß•ìÄ덄edí· %Êsi?´I®(w78ÚÛ@¿ãëÖŒKöÀ@é|ò|Ø ªBƐÁ.WÓ)ÎeÀQ¨m.«g÷©àV+.Óë]òˆ7º3/è™æRHö®åy‹Å8וÃ	eÓW¤k±AÛý $G‡—-9eVTÆÔc`…·jZ5å
+H£_{Ðð}%g|
+èLèGíéy·ÓÌfÀнaYB¿ëÐÔb££°G¾eeÄèp®Ó>ë°V<jó%YãðáÖÊFÛ5o›Iª«õåÖ?huY…½v2¾ÑñAcZ õ¾+GìiÛø´ÓWæm¥©±×»êó=Ÿ½kjžŽègv‰!¹g1¸8ýç÷g§¯“+FøRŒR1>†]»Bç|xâP!J{ÿr;lÕ
+0ë†R/ÙÒ×Ç!™ °~Ðhû꣋¶HÀ¿”l9=™®q¬ê>Bl2­«Æ_fXy3)§IßáÃâg„粊°âã}ÒÓj-!û=µ0η-þ“)$ý%N«ÂÖÑò{Õv{‡ÎkÏÚjg{Gô;ÞvÈN÷´Ãs¯©Lÿw|Û_ÒÛ2ꎹ"\³¥ºiÚ¾9Àù ¦"ÏÓ^ÞYáý£Nèû–¥‰¾Gõ¥çô\8O—~ûü•ÉKò´ÛF”™ø§ã¢v±¶C¸ÓãL¤t©ô½r+76;»­%‡6'ÈKˆˆ<¼ÒÇÿÊÈ çfîېh¯(@+u¿ÆqNšmoèX¬¨kЋÖ'\Ï{ŸÝPˆ"\Ýýñ3Ä%\βq¦ŸxLú1HuJÉ-¨ˆo¸¨Û¼Ü_€¾nŒNÝhT¹g€j)šiçÍÓˆ«]
+»mœqWrß™‹ÙdU¥¸öW+>tá÷ìà?ÑÈ_´8u¼Ýš¹Ë<\]¥ÙìŠR÷¤Œ…]ÕÀƒa
+—¥æ¥Hp4¨
+ÝGí»òL‚n‡ò4áTÅðÉYÊ)o•ÛôoÛêÝ+lté…KMk2‚S½³Oí¸%˜Êħ9Cá…®{ã©Z‹ÿ6SKÑÐuý꾤‹)œ”pöˆ&0ˆÛèH]gëŽ$H.šï3±q$¨Aa es]û¨trMx?¤ÚxÇ2¡.J·Y°‰»†B±ô‹Øîѵ¶á¸IvG«¦ËTç9¦ÛÊÂ.m­rм*ém3œ…tw݉èÜ£ô¸FçŠJk„ÔfÊ°sÁG<.­ðr½*“™QEµÑø↊D¤ô3|;k….ÉD±Y¾ä_Âøkï•Ñ;æÙfAùh†l)ß²RY¬E›@qîyï9]îò•ԍëÙä°qg)øjàB‚ š5.²žAíýeôdŸŸïè	K±¤üþ‰-€—ҝøG0Ðà…N³ú?pÁd”ŠmÅÛvíFµ²í¹Ëõ7î‚{oCTûÀ%UkY Ü€p§ŒƒxÊÿ¦ïw%õã½õfî59º“çU N‹:Vy9ör£¶ù2·)I<•ðÒ_`£t#±XœUvJêÊÞRø;8¯|¶@é€X«öˆgÖ ¹´†U×C¨„¿åy}ïªIŸ¦†«º¬±ÝC
+]L¥K¿F“+wðMoU³¿¼Ø)ïµx Û¬ÝiÌn6Z·Ü™ê[»;`×Ý[WÿŸ?$p÷¸}V÷ú×î,ÀÖf¤³#?÷Ân\ç[µPæÈFäó•(éf¡Kƒ;”Êñálq¾!	ØÕ¾"
+÷€„wüØ	=+‹Yˆ­òR›Õvê.©8Ò_ˬåäÔ—ÐZ²ÂÏQõ,Ý{?ÆÓe8&•¹½¥DñÑÝ–!
+>½»º)¯S‡%/kò—ÿoò4MyyûiçlÉ\ëí5£QmF×ǵ|Ý'rßÊ×yß•ù±)f²ÚÌ^…Bsüu›mÉÚ»£²¹Û>߇ÊH	Îõuö÷¿Yqir3[êÈ>Þ·õ’Í~8/od}³cùŸHŸÄÏÝÔ´ÑâŸX„ý‡*\ˆµÝCò’¶n¦Óš
+É¢PªåVƒ]Á«ËPTå˜uyôEMèT4áfÉ°Éoö²V=XÝÅ#ꋘ(ºóŠ=¨Î=¡G øÞ*uWáG$ºÍж®š¤n*‘·Ï­q*”š(ˆóömGDÔ¸è~„o’S@!Tf#böÑÆíGY»¾è¦žŽ¾éi¦ãwgô{eŠÛÓÊû½œh#.Ü·¨ßeðÜì‡=ÓÇÝÈkÓF\ø„ËšÛ¸.’ômxÇF[’>ávT—¤äÃÝΏYýŸJËÿ¾~+³›êi-·©pd:ü…á¨á¥í~öý/çÏ©½ÚÝÜO¼˜‚~‘[	@§RÆ-§þ§½kÿmÛºÂ?;§ý¥”ÔiÚΆ%µÝiI“Âv²baP"e3–D”ì8ýÎë¾ÈK™¤ê h=`›ÃÇÕå}œsîy|Ÿ3LV=39(Egf—=~vY5Æ7ÎÓdÊ'û™Ì@CèßéP3Q¶Þ‹EÀ]‘£ÊQ±Ê¬v,n¥¦ÇI)M=´$”ü=M­¿só÷ÅØüMZþþ
+’õÄù÷§´pþ]”/€<øÑ\p¿˜Sú­[X¥¶KûïÕùØê_n•½äkówa}óõ†³O} §ò˜u
+p£FN[
+~òÎSYƒ6îùà¦ajþ€‡<œ±	>l#jÞù0û…”åßî®ýjøÎ<É/š>[RÖ>Jø
+žÍZŒJÖzP²öc’5î»ÑûžÌ³›Æ_‰Ïª¯g×íÞ ¿_³7šÍ%>Ùp8Ø•qw³ýOÓôîgšÍO~•ŸiÖ’×_S“=WrPɈñÇï?%ÄxŽ8BƒñsǯËE{—.&ž‹2§¥‹…ç¢hu÷¢¨w÷¢èy÷¢¥ð+7”¢¯Ü(jïh[À½³ðõGL÷âÒ{Qîu±Ü‹…o<¯Ýñ¬äGމܾ×]Tn Y§¢gÙÇéµñ+T«ª·­K´
+äW\ïdéùê+I÷ã5é|vq´ Ó"ðŸÙ’@¨†A:0Î
+çÞÅÕDË
+è¨XÜT€N¶˜Åš°³1Ög{hZ
+Ë."©”û¢lüåûW†™Tlj•£x€HãÄÉñ¥ÔbL9—§Âàà^1þçÑ‘N$pÖi3C´‰NP…T<'‚©Š§$[›ŽxX9îg»`©~=ChåpÿÊQHt­ÀW)÷Ñ×KÊ{z4ø‘*³
+8w–*]šTîÐl`㝷É
+­åá=µËcS¦ß/·ÁI2›²ÿć{èvÐ÷D±é9¦á	«isÍ
+ÀfJ³GýOy
+Rg<Œ\£‘3²¯*ó‚~c©U¡Síï¶}—ú¬†„Ësö»5Û{©3JB{~*:ð(]TÃiNXkŒ@Ív^gãæô’¼±ïÀGå+[ᇦÊ;Tӝ
+F꣝7/ONƒ‡Ç'£woƒwGÁé¿G'ÁÁ»ŸÞÿrøö,”ÑiðßÑ›7Á«Ãàä<rpøæðôðÀÚ‘bjusŸ}—YÿØ&Ÿ˜v*â%
+Ÿ€†5Fí
+×óQÙ%‘áù~\ð‹8“›uwyÆ7<hj”í¼ŠzÕo
+–J‹OEžÒB½mm§^aËjÞ×ÙÎ&,¹7üŒ%˜—It"nùzEÁ¬Ö–ïø’ûw=þé݁±ý0Ú÷;Ú¦fÎ’÷Ï) 4ÂIfù…ƒ×ÕĖߧ¼0ÚðZøp8Á´¬UbøWœ3у»ä+¸K:¹´ì")ÚTq•ì9,ü%ÇÁÚÞjoWðk\OÉI*ö Ï–{1pÍCLåò‚wTFÅì•œBZ¿ÔŽhóŠ:®A¦M¹¤BcŒ…pNô£Y‚U2扠aõX#(R
+¿á :bÜ{“™FͲz#É$è~!d	N7‡Ö©Œ¨¯ÊóAPO
+C ~蔫u—.\zÂLðc¼ö¸$’8›Jöâ6arï-Eà.2ªÙ@„˜*‰×G|䬚ôqtx†%&‰hFt˜A—çè)غ †~R¥i/²[\hTJÀ)药øRxÏ üÖ溋é.Gø–Vˆ‡ˆ˜%9â@Î¥šå&W—O.>x!™K¶‚±œ¥FÂÄ(t{þÄ.	45)¬¼†ÜR,XQÃáu0(§ŠQ½ˆàÒ“Û+û2øvøÕz%7`–Hf	.‡E>!֝ÙMt­ESõþø·ÞCåq±Ýo4+æÖ>bù2½c¬J’f»æ!Ðý§tÿÃ×ÛçaÉ?,ù?ý’÷;¯8`ˆEˆå*
+	"Ïœ×ÅØ`•¥5O]Õ¾Ô(L¥»Û¶hA©IxÈ/V]Z-/uoÛ³é6m›MQjªÌyöÕ{Þ…µà¬~àŒujpÓ„i°å–mÞ=]Ps‡†kçŠFvt˦PØn
+nX-ÅZ¶Y‚Õ–µDíÖ²~½Ô2<ÒaØR¸Ô ÉÒMº2X_¾ï”,ÞÎÚÏ“k8S
+ø	×¢ÇC½0è–uü½|
+ÓžCC¬úút"±f}¶‡l².é(Ûß…¾•Ì2ÂÄ„¨œ±¹™µS·¶¹lcSæÌžàg* bEÀŸ‚5A²Ñ—Tù2È°“x—pcWTåNU	¼<ñ´†ò9R at A¯)ñ'Y‡p¶ ¡pŒ»_ԁÆZ‡wÍâS+AûìUUƒÉ;ˆÈÅŒ
+›Ö%5Õ(*D@)\Qà àéTH¤!œ*·­æ[Mœã`o7Û߃c	âѾ`8eª»gW½öDϺðlHá½|%’
+  ôzoѲ¤\4Ý‚ÂŽ‡u«†F8¥°@¼h8T¼–! ¼F7cânlúÙ0Y¨düÐj+4T,FsIþ˜àOçË•ÓZìå ‰
+ü"Ž],£…Ã"‹
+î=. ªÁ@ÅŒ W§ðž™šr…¼Î]yMdͦ+ËìÑ’5âòHbânTw¸ÿѬÖïÏr#©±.-=l€t™R¦ýJsBÃ檭ö¼{A»E›äùðùY@ÿ ‰-âg(ß+Cý—_XÌ›*€ë8œƒW3€<“„‚å€B×Ñ‘P2ão;ˆß0WÅ:)ªs¼…½é¾@çb5bÛ2ŒVIE/AÌ‘Í ygùß<¾°,[Üö–”·kZ}Ñ6Ü˜í¼¾RlŽká¤b9,H#KúK–·÷ç	¯ü>ºWÂhÉ‘ZÍž‰ÀªÒÑÆÌ0lÖøjœñÆÒÖ#„zæ®ÅXÅÿÍ5ž4lX¹kh´ŸÜ&ƒ	yÄ
+4Q9§bòy‹ì¶¨*®÷8*+o$c\“XÝ@nr^åíûú‘½É+ÏdR}*0„
+8˜æijíÇäVP	J,ˆÁ2LØ™Ñ˜tmE!S])”⓵<ÙBˆË1ŒÓ_ME°Fõî‹2BUAðé4éXLi|FÉ„ÆÒE°–uÔm–ÌXka×#qhˆ
+k0NÖ´0‹–E‚äüW£PŽa
+Ê%fìÌ|ŒgÑ%ý½i·¨n6û}=³„=!§<ºm^²
+*¡¢á´óîµÕõ-Ê}ïkµ‡¥oZ *ÏæÅÔ«4ëB3bA_–ãä™Oߢ¬øþ>ýŽ$n·(Ã'”LÞŒbãðnb;RÓ)¨4ôœ0øõ8À˜ý0ÔmÁ úfïÿ Æ“k÷È5×·P€ˆpÍ@êƒÊáÚYU%úÀ^pä4>Ú:
+O¬ju
+ĶU.!SõËk??Ü«÷§§ïÞËîèí#Z°»4ÍÃMñžhÀÊÈDmL0	î»Û$>³¶Ó6 µmĬËA_)@|Û„)¬þlÉÅ]ù=9Ô05
+ËSŽ1l4}”º¥R:Eõ~ë!Lï;Ìw@µE\Öë8üre"òØcQÆ	3âÆI‰[~œ˜Xø` Æõözå1ª±•¿ÿðìéó<càkÙ0²d)#DFŠe³
+˜|Ã܁ØZ¡B´0D*™NªžË—DÔ@P)Ìq†IäLƒ‘É ‘n›î)«¤_Ô=‡ëd&ªIÓ§0Ȉ
+á©1åùŸ°Ù2Þ@Ù'Öß"›Â•…º¬i3yni	!B
+rÕ‚íeW⍛ ¬ã¬ç3ÊxV¦™`/’£¦Ö¢ÄG®6g¿>³‰lŠ«$YR&†ÊnW6¸FWÆÙf¿|;GÎÆPqÛè½!«¨# ÇÔ³]-º¾ëF
+ÓÍz—¹ìgpXF()BÔHm|‰àˆ›L0K÷îÞ­KtìvÊèàŠþqp’g.µ³z6;â,LXãÈâÔùI¯r¤IfŽ°k^nz¹ Wdëï8Ö"a$+_qWÕ±*Ed0äÓƒAA4€ì¾A…_úl†¨†ÉSm	r®ŸV]î.æ5ötìËÙì%¬ì‚2“ÌZe”fé >pÏ)‡Œf9²1%¿ëDfQ‹¶¬uÑ¥äBeOŒ„ÚP$ŠÏ¶OÕ)>i¬0!B
+œÐýŽ’Aðòב“ RQMùÃÎÀ¹¯X´™è(6Ž¼r¯èç‚ ‰µ=Œ¸Ç(¸H8󼝊³ià`&
+\òó(&õò¼`’IгϟÎT«pl” SfEA!å‘è
+³UñfÕu¼µ‹¥YŽÈ&-\¶‹Js@4#]öÇ#û
+½µÌ™„) úì‚õ`…äîf9ŽÔüjW#¾ã8øa¸ñ¨Iw¨ÓK´º\PÖîõÊu‰ÕÞYëoaútŠ°.Ç zCB˜;¬‰«‡5ÁÛÐÙëÂÒÐ¥p‡}è/÷©q Ôä¦ü¿\k¸m¡Õåœh’”ûˆ ¼*k#2cÑ*EžbÇ›¢@7K|°®˜'òRõ>¦¶òÌ=[‹wÀN+5î£y&ã3³·Õã›pJê,{ÈÔ×Ö%ÔJžÒcܦ$ûš¸¿Y¢Ž>ô'ùp›mÞDT|
+ÕNjze¯•L²
+üJ5ߧnBfâkÏD»=S‚ø@WˆÐ+.°l*u?‚ïÕ³ã1ҵϝ*eÃ;t&c·§ð³#‰¼"<“³¢@ˆ<
+/…–1›­Ò%ÒÑR0r4¸!Áq#Áã®
+<ÔEöƒv9Úר%+.¨Yaö|óW:}ò)+Jç4	gŠÖS$¯ãDèVã'ú(¤¡€µž¬þ Ÿ“!±–®¸ô$Õp8Ï«-SÊRXC¢¹Gû¶ÿÙ£Äí]ôQ¼Ög/8•AûMH[Ó	íÂ@ÓÄã!Y²oug¿rÔ£˜¶jªâ.E×­º:Ù Á¤ŸLŸç²e4A×u´@¿ -sK+"jyJ1 ù±^d
+hè‡ÃÊ…¡Õζ0ÈÂzÇèÕÝÆðôÕ`FøOšÅHýØï˜1Ø.hJ’P?ó¬“[È_úºVEZ†æ5?Õ<ÞS¤‹ì9ùMrQFé¡Áõ!ZT¹Ò°3Ûs2éT>§¼}%/ú÷#Œ­ò5È‹8.zEt	[óÒwM·žn=_§\šŠQ`My3	09Ÿ¢e&{BN§e6ƒî[Ÿ×2ÕØ]2œQ^G³Ý2EпíF¨ Ý|a"¦ dð	 'c͵®;ÛaVÀT´%@–ú]æ1K“Ù:fÇ_O3îô„;±×)7É·þ	nÏExæŠDØÌ°×°UÐ»É ÌxK¾…Á¥™´4Ëç› $sé²4ÇÀ_¤žåöëdd/ÀêžJ¶d+a]¬á YÜ‚òù<ôž´…‚‹óÝã;Ò?a¨Îä½…À¾ã@W‹7ÐH0‹nÁ´y¡•é9jdŒìù’~ddø‰ÁŒJýÛ8ô)g^*o4h7ç•ãˆHè»ÎÇšSÐ}ÂýǽDŽÍM˜ÉõðEòy¹k-°-œ%3;;ôÍïg<)Øã‘­Ú=,ÏqÛð²X|!ea…YBzD4¸¾F‡þºçÖGڝg,5À|ðôäÕûŸƒ£Ño,]R¤ž'˜yʸêøœbVÄí@æmž`db?#mt‹'uÂøØwÙ"Fú8ÕÈÐ#É7àûc	>n±Ó$ŽoÿgMæÖêƒ!‚i²B©X$\‹ƒ¼vÄÒÖ´ÇI–_D‹ô‹*dªaØÞòHƒÝWHá®Ù<”5?ôJ9šK¦pȪáîïÚ¹ÆxßÇ6>0ißûfš–´5‹]ÐaX¸¡s0gE~òýDˆi†auvaü–)ó„CÚÒYêë!F©·9>
+沉VªÅŸ@l£6£Ü L1ÀõF’ »òÉÑMŒÜÇÉ®^úV\Át5Å
+ ½ÌšùmÝh1æNsaƒl$³€#Þq£‰i;ñ­Î­Á½Åÿ@ËB¸ø8”¢r³@)4a W9ì+­ÃŒ<¢¶¾ó®¬¶(!8PU‚IgÌη
+È.^¤‚1qÂà~Áôh{‹[Œøg„æ×g˜“9¨ÂÒL&Ë¥ö‹Ý»Ú…ÓÚ¼¹Iâ-Z]ù^–_‹×+—;d¡¨Úó*!¥ìÇï=¿v”gèÙæƒ"S‰ú~=q`‡'.­6ä4¡åÛuêmoê @M+\ßòUÇÙƨ_&=¥à¿î¬žøV£8†Ÿ¯—é„œH w.ç(XÒé-;_Kl%:àЧ’ž(œæis(%€Ì8I„¶¤óè ¾m9/u€–TÌšºc•»&þ˜‘”¼™=#×{Uñ²’‚ŸV–Ó<úDÙ‹B¤Ñá÷L-¬’È…<91‚¶Ÿ²»=’*K](Õ
+E¾N‹Fƒb-©ßµêkz=î%D¨("›-RŒ 3ûh¼ž$âôñ$ä¾´ "6ùì‡×aðíÓ×Ô)Œ4s˜™ÔNž^¤øf;&‡Ûùxì
+Ÿ>;ó©?eѾ…G¸ÄVh†· ¯ø•ô£*‹E8“á'Ž`búgÒ)ÉNâõŽ&”êGꄼQqõB>Kò!AÚ3·äó×Ô1‹}´Áš´½žŒý\¾Ho0¹¦ÿ^]ktÓçæ;^GðöôUù"šàó¨â×¥˜ÎùøÂ}ê¹¾¬t’µWõj¥c6€¹ÊÔ¦çHF\s+EósRs·äU]£`ûÔÞ©Œ…Ü!':îÜò}<EU®Uæ×tÅ5Oœµ}â÷MÍ­¹Æd0·ÐoS½VÀøÁI2©9ÝZ¬+³ƒ~äò5ô0;×Ìáô|}Nç j溜êýÔæåe,…ZF^´Î%^W{îE9—Ò\87ê(!Ò´Á°uíÁ½óú6»A©Yó kd̓¬¹YÃ9êKá§'`ÆqʦAËŸ
+Ÿ-»b•…VÊ•Z5mñsN:¾ƒÏìÿåÚç;}t‹ŸòL@ $0ÃÕçUMŽÒ¯µïÓÿPK    %C~1ÞF4êa  “
+    includes/htmlarea/core.phpUT	 ¶t¬AC[­AUx õõíWßoÛ6~ÿáÀ‹Ò9ö~¼ÙI€45Ú m
+,ú°-$.it\¯Èÿ¾;Š¶eÇN;dÃ&yßÝ}÷ñHúÜ©i€°˜â™ø%þ’²ç‡‡Ò*Xg`fZʙɃ²”Qa'³cøzx ¥8‡w·Þ_8”™@Üâ®$sq<bX€Á rÛ44¡F(­Öv®LanA+ƒ‚µC>óÁ6êoýέ»÷kwý
+
+:0cp ‡aæ”R{LÞ8¼¬(°d’[SªjÄa„Zy ?£ÀRÎt€vzæ¢? ã¾ÃJù€îõ,k²˜0€* =CÍâ¤VZ½v6X«ƒš¶³ïTUkú§”‰ëåÕÈ
+— Xܵ¹ö+U®@hõ[ ¯ˆY¥qÙ–!Z.‹’µ	¦zl?){?sÎÎLÁÊÄ©ŸJ¹–ÞŸ}müŸÅ¹è8ðܹh‰Ý|SÄ£8
+r¢ñˆ'—•fꘆ‰týéÌ×Ù‚ë;!eܳ5gÇ‚È¢ˆÅ`
+M"×,I0+½¿½ºRÄM¨e`S2É%§µÄOÒ›
+}øO¤1xõ¿@vd%€W.ÚªsäZå÷ï¤)4ºP/•ëªH¡ù¹
+y
+ÙÖ0Q-=F&ƒÍÅpé7E®ŒGRÜõ/ç·,HøXÂ%ËÔ: ÑN¼Q‡£-䂺ÉsÐkóMl9Ç$î›à¨uÑ÷çQ'VOPñæ—¤L"#qÅe×$‘÷­’ȶ½ ®k7T×Gú²CñË¢ô ÄUdn?^2Þ–l“J7tp¼3–£·Â䟃 |9r$œPnmU‘Nøç 1übìåFç}Íßè4Óõÿ/°÷¢{ÙLuD¿äa=°šK·¯	¨²åqÝWþNa§?ìÚYÊi=“r~4?µŸOĝ֭ûì]aóþŠ’~N®þ.Mµ<ÇùqýÆ>`&òZ:êfè(“_·çǼ1ºK6V´>V €D|åÿó{;øôÛ%_F¦ZIºÑš­hÛÇùÉ'Øɏr`B®eƒd—XÛ›¹¥ñšºõE¸YfŸ™Mš(äŽkU:Âìçmû¤Laçté阯­É’Ô¤\hÙôÙó%ØG¼'Aº™ü¼5Á„o³_:}[·â:õ‹VÉÏž–Û;fó$|NÔûe½»ïuÕ›Úž8?êÁQÒìÑFø묍{J§ñMXèXä‰-$¥‰Ìï«èá$·Úº!ü€e1"­õ[ükÈ—^^%~Úu‹~«!2N•C4#º-›pRÊFéÅk,…#µjûŽWÛ¥»½µÓ7*±n5ß=‹®ñõ›o_ÍöÝâ7^3V'U–e\‡†÷ÈÔÑÆ¥½8¦½AûÆÒÞã•­ã¦
+ÊŽMVÚxÚÕâôê„ëP/Ÿùš³SUž•q&öû©ÎÈýŒ¯\ôÆõPK    ê…}1­ÃÛ  '	    includes/htmlarea/dialog.jsUT	 蘫AYV­AUx õõUmoÛ6þlþ7¡hmD•4¶¸ÐuÝ`Á4[QCA“g‹	E
+$eÇúßw$%¿$^°Ö€ßÈ{{ž{î4èÃx¥¯Ôk‹V/Š	<‡7¦ÞX¹,=ùÎ&“Ïéã¤öh÷r…Þå
+nªœNy1èS˜ëR:à[_m¼äW¼»çÙ&¸“3,Œ…Æ!"(2ÑçG1JŒô»±^íb~±ÑÌò2%Û³µ}
+KÞxwùþÃÏ€BzJ`±VŒc…:%|åñÎ3Âø=,$*áRÉ?ÑÕ¢Q
+œi,ˍ@`Z€0Üå°’Nz¢Ç×ãñz½.Ž10Þ–ò'ZGeC`Qà
+•©QÀ|W²d~`ŸŒNy¡ºn\IW³öäR\€L™eqãòœçÿùxr:>û&ß]œŸ]¼|	ÉÞÞÕðdÐo[aše	ُÑ=eÌ­#²o:0óäž:çA:ýÌ[L©Íîª ¸ÔÎ#1šôÏÜ4ŽzÊ*t5I­­ñd-õ–ÊÌѸ©æ–PÆ¢Ñ<tRÃƪX<
+¢‘~ÿú=¹€¡ßÔhñf3È-p!5Š,ÙôÒ
+¬¥f=íQM5s|P\:l+l“/k”'¿ÏôNÙ‹Kä·æ·õ•L©f:螆Â;šô¢ýÛUÐÐ:8C\í
+ïL«ž>…oN
+®ŒCÑ‚8¼ZÞ¸aÈÚëýr}õkÀâ£ó¦ŽCši‚ª"ÌÔæF‘ ¨‰Ûrr"©¾±J’®BÄe8å
+¨³$Db³SÓbë7MCÐ¥á4yžiŸ?d#a?“µ‡Æ‹°‰$#f—Ž&ÖT©y+f%›+Ü…#ƒ&Œ­Ûy¼‰û]ùuQ|j¹ÕN@$ã¬d©Ä,=èA|ea®çÌδɩŒ¦ýYÓhͺ›µ¾œNòî¿28Ùã¸5*˜»`oÑÉOçlƒ.‹½OU¹¼OC€iÂ符ž!m¬
+[PD+Í8²ØNÙÑípÝŠo'1&DRØš8à´€o³Žhþ¾4ü*C+œRë¯ðÊÄ/è= µ¨Ñƒ"ª0¡G€’Ùq +³Â¯ÂzßõáÞwÿ_ˆ»†Å–Ž¦‡Ý6D=ªlØ¿<mßaж$yL¦ôõªx²)ê¥/§pµ½üKžœü=êRTŒž
+M½·SÀ›°d8=ˆñu‰:ö U¨ãÓ³÷`‡lÝ©2Õ-îEüVcÎö¼—þEËH^XÕ½®•;
+áàH8ˆû„³ØîØ—ðþPK    °f~1%åÓS!  .    includes/htmlarea/htmlarea.cssUT	 œ³¬AYV­AUx õõÅWKoÛ8¾È ,Б«:N`8ØÃvƒ¢{+РwZ¤,b)Q i»ä¿ïð!ŠÔ«É¢‹=	Éápß|3ZUºæXRŒ~ =.þ>HqlÈ]•eyž././VAd¥…à{,яË„Š£TBî¡%>r}oöbïZ‹æ.¨=j1!¬9ìлö«ý­Ý_wOHB¥;S‚3íf…àæ§ï#;T~Ú¯?W˜ˆóÔ"H‚®§I74Þs
+Ž—¢ÑY‰kÆ¿í`³5¾>QIpƒ¯nT¦¨d+§Øw
+†ËÑ´ZVL4½KhèœäŠã=å ‚“C n¼êé+{ëœKÁB¸“ =Ò¯z:ÎKY²5–ÖXÃìú̈®àxë×5!3~:£?
+ˆª·üI¸·ãB³½FóŸ$UŠgkˆ‰Alîë#wÚÖE/æHbæÏk+°ràj‡C³i²VrqÞ¡ŠB›ë –ax
+°RÐFSy?K3 Œ}^òú)S¸ÄšÑX2®FÌÛ
+¿-.˜þ†~GëÛ×öŬß3¿
+¾­Ö·K¯(ÚbÅD(¦™ ¿$åØ ')Œ›§¥^p-ÈI_6Á8e!Èù°ÖîüFœ®EÀuCt^ßíÁ(Êi¡=+:¢CŽ¿LpⲚ녳]e€µ(m¡ZÓF9±„5Ar#{”Æú¨Þãóο+×[l:pûÓG~B×ÏJÁ8ï½Ïý¿’R„'íÖ›è-¸Êó—©ÜÔ‡!¡DÅ ã-ܯ¢®0
+SZÃͨd¸ØÌQóè¢õòòâí81̆þúõÞ[Dæâ Ð«OfùÀN¯Ñ›·6(îÄÏ@Ó]v®-?Å
+Vd˜2nÿë¾24)/_³¦=ê~éë-¬
+›ÐG;nÚy1®ÒëQ­pÜ*…ºÿRá–™îÞK&Ë<ß&€+Ëm\„{~ÖqÖàF>βo¿ñp¶Ž÷Ξ5÷‚“™ž4ex2hAûàB$Ž±uuw‡G¤[uˆý¡(ç›é‚‘YÅ8Ô`’«p»…JL¢¿ÙƒDÅ~v
+‚Öóý¥³ÀÝûÓ¼4 •àÖsšÿ¯ü¦m1¿ç6ïÞª¨„€ªè‹)=nDч¡ëÒùê·qÚç'‰è/ç¼	æ¦	¶”½t!‚Ùˆ¨ÝcX@@tÐ}êÄØvõԡ΄+±á„ù‘:¢ë‡—wyþÛ”©jZ÷°Ûho†4‹8=Іtß‚	eÄo•föPT6ì¦@ÿiÐiµ=„°S:t¬ÿSÌÛ7ϬOòrƒ+³dÝ1RZ)sÌšp0¤)1äÆÀ<µ¦'û<¢ÇM`ÏÁ,+©BÌÌLz¦w¨²Ž’b2úï:ãŒÇìîFš PK    x~1\`ð©òN  Z   includes/htmlarea/htmlarea.phpUT	 XѬAC[­AUx õõÌ<ksÛF’Ÿ•*ÿ‡1*µm
+”d;ÉR¶R’,'ܲ%ŸÄ¬7'ëT 0$aƒ QJâÿ~ý˜@Ú’®j«N[›€3ÓÝ3=ýž™ˆ—UT&E-êÛB¾òjyS>…×!·zû¾ļ^¤¥Åõ³`[l‰£¼¸-“Ù¼~Ô»ÛÛ»[ðç"ÉjY†Q\Ë:ÏÓ*ˆòEZ£€ÐŒçI%"›åuIñî·ó±¨êðÁXLóR4•~%¥HaHVÉ ¾©{„…0½ÏË:ɳŠèÇ·YXFs&óxF“1cÄ´D~?}øý!㤥,Ò0’™1Á—¸òÖ¸/¦‰L㊧üº¦MšŠ*oJ˜l”ÇR„Y,â<ªúâ:©’ØSÃÁ`¹\ë800Sù§,+˜¶@.ÆòZ¦y!c1¹ï’y˜ˆÃð<cºB#u7X$Õ<Ï
+¶ïGñ¶§|ªú×b'xñwdÁóÁöî`ûïbûïÃg?
+Ÿÿ(TßâûGßáÿÄsâª)SñJx°KiËj 1¼=e†¥a6Ãq2ÃöGß%Sá£ÌäÓ6&RÕe’ͼžøóÑw0Ñ·2¼–BÞ _Ò[‘gRLÂès•†Õ\„ ysè–¶1h{†Î¯@íž?øx³;}òý /6›=˜×!S$¦²¬}ïÃÁÙÉèä—ak– ‡ }¢’õc!~ÏÜiÒ`:Ð{–I8I¥¨sžKÍ4Ie%Š°žï	ØxU”r
+»>ÅMP:D8©ò´©%ìƒ– Ü0GÍÛ;˜45¢ˆ`8 •2
+Qh°õæÃ(!Þ4%Ð/ÅRŠerX—·8§4ãÕ‰EyYJb2b_ÊM (Ê|BS›†IxȤc77‘q¸§°W‹æZ5¥DŠsÜ·PàÖ7áL®Ýt–‹î®w¤ÆýÔùÛ|)Ë£°’~gÏÖ›žÛp®†e†"“KñëøÝ[2Jùä,x5.èî(ñ i½öÕsj™Ÿ3B8zÍ­I
+Z7m²ŠAìkÐ>06›&3^ò@	¢¹Œ>Ÿ7EIƇe¾¬dé÷xä†Ã.Æ@Œj²XN“LÆŠW(rÑZ\pD­Ä§
+‡S] þàQøê½2†°‚Û³=¸6Õ£—éôâ6¼CSÓ]ÞVÉòvæÙî"mf	ßWâÏ/.Êd!Ë1X½IX®!ˆ½¿eq¾ÚÉÿ«‘T‹?(ËðÖwÖàˆóZU¯ö>Çilí8ÍQSÕùBQš†À0§svšáŸ
+šþ=R…ÑœeE7÷Qø3	¶4W-Ø q¸­Zwã_ö”’fVù´ˆ\(@ùZ´|Úp  󢻉Ùì+ÛvѲWO…g}1/¼>IÀÆø‰î¸8	Ó|îà[ƒŠ¼hŠe’Ý1ÕpàÁWK/¡áÄåžZÉ\Â’-Sƒ™¬Sr­Õáí8œ„é{8Êë]l0
+\~	¾·Ìb§ïú1´Îa
+ßñ-qSÆ €>ÚGb	PÚë+^j©Ìfh‘Ÿ>M”FYþºóŠÈ~¨©ùž
+qX¤øGP•(
+ñEBsÝÀ™aQ€“:š'iìsOo}Ô“vŸe‰¶¿”3ySÀö›í=;¾ª™@cà¿ü8øëeïcõÄ¿øñ±þ˜í_>í
+H‰]+l òXýòý௏YïÉϽýÞÇìçAÒ¢-? z‰ßû ÈRË
+Ì$†+ünÃPÁ8PGÚüãÉ"Îjr­Â0"ñpØÀ=Ë$³íaSçdY¨y.)0tÚYTdF¾˜ö‚=
+Q~ꦂP¢üYÃsÓ!™­ùŒaÞ$‹f!ªä‰à¨íh?Ä¿Ñîhxcf ~wÛ “óÅñíu˜bÔ²œ'ÑœqTá¢@÷ò+j🙋o€yƒ‹z±½½‡èv»h`LlÑg`ƒ!Z(A6€„¨
+%Sôf˹$ÿOsP¶U…œm1#K…Ãx%F8á´T„gMt]6–Eà¬ð7¢°>ƒŽR‚o‡x•ÐS8Œý}VapúÆ·2¦—Ø»¬˜úôBˆ•©êÛÔ®C/!™"'Œæj,`8' +µå<{?-Cˆë?äeÌ;ô·¢T†àvES€½«ÚlügX%Ž>ͨ¹ËšCU~;{{ßiNÔpÇôpÓHüõ—mƒ!{*žhýíoÂý,Â:šû?xÒû8 [ñq€v¢×3îÈÒ;“3ñƒïwÐH,‡ w«ÒÓK3í%`h5°
+H~AuÒwe<y"Ž S;}7úo§Åø×c1>=}{xp½â‰ØúÚuó˜Q¶BÔ|@FÖsP%Ü0öÚ(¹®¤ƒû¯Ñ ÃÃŒ‘€¦È2%ĘWøI ‚Á¼"
+ÓåQ‹orµ”òŠëac{5g&cŒa›`IdbÞ¹D€ ÀÙdn¬“¹†ê.BF„K>&ø]¡,伈lBEÁ?Dßf¡¤PXcd¾¨R*fe»“¨c ÷¦6j{;!¼)p'ôú}ð²/܃*¿®§yš¤yôyµ³j&Ê)bWSÀjìO‰æ	‚ 33yì‰P æ88)ÐÍñߥ„_öIŽpÞ“<±=©CHïÕHYÂÎ1<›Ï`õʼ™ÍדþÒ’LÁL‰´úIÜ0§êÎo´Bë"&ø­ÇÓGkü+ã…&=r´ŒL­âvƒ´§9Í
+b‡¤¶?WGCŒ	9ëæñl Ä@MJáÀøó™éá(Ò]Â
+‘ÓŒ~‡˜Df€ïÒq·ZP0bGRÞd·©7Ä•lb¦›öç2½–u…ý*̪- L7i^ÞQÞ€õ/ʼn\*Hµ€ì÷Õw‘g9í¼‚úEæå,	ÄŒõэV¤3÷…ÿî»ÔÆázXM?úwNqLha‚âÑzC ½“Ò?e‡™&uͿ,`•µ‚âªçhïkø¥:!Àž¡FW›(vöƒ¼´Þáÿ$ ¢„‰o‡åÁÛþζjõvUã3hÜՍÏTãsh|®Ÿ«ÆШ‘z/TãÂß5#P?
+ÿÙºñGoe²Æb˜ùþ*ÙTí Ä\OX·îRën§õµ>ë´>§ÖçÖÔú¢ÓúµêYŸà¼RlRùwÇ%˜\l
+Õ'w¼¡%@‚N£KÙ]";Ÿs0ìQmÒZL:tT&î
+ÍÝ9_öE´ˆûXyP	‡䍌ŽÀ¯Ãñ¡““ã€^¿F¯ÉTþ6Ÿžœ!±$W‚¹¸Ÿ4_>æáÌs¨NêìmRՐüsR…NÔ½B’ˆ~iœ}1ŠÐíS Ìñ	F”h~£ñèôD\zŒþ¶Â7Yñ/–A0½"R
+˜½|âhêü&¿ZÙÈÅY+a¤Ü‘\Þ2©(ÚšQ-‹k{Z2?aE
+ˆMbdFgR<Ñ¡M'ÈmB>Yi rÎÎÌ°¢Nä³tðØ?,Î*¢Ó<þ¢ß­sL¢†k àÏdëœôö)ÌÛzk ¶t
+.aBº/\Úl&K¬Åd)il°7J
+Ô2Õ˜5àã¹æïÚ4¢¢j^…\(òªJ0‡ÂÆ0öc½?kÐAx§`äbn¬»°
+sÓ'Ó)¬¢nž_ån«’Ò¡ˆå4lÒšâ»Åá#PŠ76©uiV•Èt¤½…•‡-ò™ i´óÓIÏ•iP‚!]q}!à‹PDÐS2h[Ì…?>}}:$F`ô¨ÂؽŽÇ.uú5Äœƒ’5ÉlœT<žèÀVžA,ˆP{"ǼŽôE*¬HUçš&sÒʯL/ÆN¨øÞ¡
+¢d|ÅÖâ
+»‚Y2…VšNß‘d0SmÅAXo$ɱa™°ÌâæîûcW¡Åo"<"ñ›ïY*fÐý	ÙÈÑÒjDï¼RZš<øþÛÑ©CTÇÎLЍ¤bÍä”—Š	ʝVîR*BÉb±´œ ›hýƒ‹·**b°É³ì
+GÜŸ˜»¯ã¾EîÈDõ† z0I•¬¥h¿EóL'†$y0EN(VbÒ¢÷F%&†œø`‚”á8ZM©B^ÆèzR0#Dõ”´+Š*ö]eÍâÞE½B¶Éº„avà˜V)O¨ã¡Ä[ò*7#’¯%&O`dG&K¢œ²]a‚~¢:ås×i茲oÐAùÅuȘ$’(½äAé$ˆP×Õtv
+6+µDœä”÷*Œ>ÏÀÈeñb“s³Þ®ˆ´S]¢û«ig*ý²óhûÚ,ÚR¶É´Ú8->È	H%'Ø$•ÙçûSlåçX9쮓"‡Üà]£Þt²‚ß]%WºäjŒ'ÜՍ±ÁÖ®hÀCi+1ªð@„Æùl–rŒ(Î鮄Þ9¥(!gî]Ë°T¨É6:ÎÒ°„0혚Ú<p^RfWTæ‡ÄúÞìM*£µüâÒ¡4ÑJcû½©pYÆñâóÂÝ´`‡A13i‘À÷¦ 1¶#®\[9Øõ—"…üU„„F‘Áa
+·r‡VöˆÆ™ü
+vT.tôUmÅQƒ60E·ˆ£¦ã4Ú‰ºÆ 
+Œ>Vq@ã=Ð7aá#:¸„œ¬˜äa©#qtdN¹‘½TRòœöÐ'Á¶«:hâÖ4-³¥Íi¾•…—Kl€GmHûa1ž[?%Òª²1x²¾ò3„û„±J­©”£“7>70GŒ…2ÁÕs{	0ü]çw	0–»Ï¾z$ÀŽoèئ.@ù)á„mðÌé€Øv$ª[EŠ¡ƒPà­']Ìh_Cñ=Ôlº4r…§ôWIÌçæ,šâ10«[t¹‚¸«j:ûçÃ\è\÷Â[ÜnqØà]ŠW4bã¢[—©Óôª¦¤H§ëo¾¬
+Øs:X|åML3¼•Xòö7ûbóå íoööÄ—>Γí“`”A€SÒ×\àz¸ra.n¯x¦J9ð uAw¥x  ÕÔÜڏºÜs™ Îy‚¢©æþ…‡¹íXN‘‰Ã—±W‹=n–ÚqucM¡qö÷ t!%E ;äür.ÝÀv\Ë,ÁÚ
+j…£^=±ñºÇtkÏí®Ú*R)g°u²<äY˜
+•5íQS'5hõ17+¶¦TïÚùéYÓ(Ét­–ún›*Ò`çQëVŠl½Ä¹-x ëtê‹ðóbç²}·P<î)éSÁƒh¼sŸ«Uƒ
+ô: ±x¼öŠbÙ¾t/ûtÍÝ-{›èɁÑá;‡†ÏÊÎh5×—ÛZº…u\}ÅðÑw°…ºˆŠ£±ÚôB@,E5ݪå<ê Dš”àÊ᳘> %qB3VãÁÞ,º	©j fz­*l¬¬†"‰û„Í”i“û¤'x
+­¯Ôf¡¬^5D Ú	Ô¢ƒ¶úŽ¶ôQ£ñ‹P¶4ékNMÛ˜ ¾ ©J»_£ô'usÅ9VåÓ¡hѧ?uÙƒkº+éb®W ðöŒ-¸1A†&©D‡¦Z—1H꘡"
+omeÕØ	3ÅtÀ¦˜âü}ݐipÞ)šÌƒMW¤î(ä[\­¿oØúBÎê•Ê4»~-º/}ÛL—`‚Ž’:aÂä™™ujáSñ|•àUpñ²Ø×3¥’—ÁÊE©À=t$ȹAåƒ2Ü©}=i6/h倕à•Í…¶R +Ws7x$äáêRé*ëH½ê²õñÙÙ陸è,{8l¯örø1K²kp±µ?ê^)ë¦Ìì½Í/ì3èž-•Ñå
+`B’Äíµ®žä]ðœ¿b’Ñ{¶®ˆcÞ¯ÁXÅù’f~ bõËš5:âµÖ×i’•ºmýeÍ<µ#úÍ°ëîœ_C£¹#<Rjµ
+;~4¾¤»ª÷–Wq¹'(šÙkaW¢¶‚=ÐàÓÒ€f&ƒ­†üÐÄàs½–c·¼Ñ¼íf—ÅËæf»'ùe)›#öªŸK
+jÏ«È<©;¡YŸ·%¬œës€MŸŸ	q„.Àèý rÆ:½7£½;^ÉñÞGKŠks˜ÿæÁÆÿMÛÔ=üÿß
+÷Ÿ›äƒuîÛ,|¥b§=Whøˆ|¥=!Çç‹üZÝ:VÒ3@–mi©•N€­Ó£÷à7õ©<…rö
+*^°E•'Í
+!f‡OFîàÆSýŠ0Å2MIÍÏ™èJðIŽÌ\=òQÕõUJ@&ÀJųÁFþø$Èí°ÁŸU¡²98ãsX?;˜Ê÷„¹ód.Û =H²8‰ðΕðØIš¦æÈL›Ô¤ü”®CB÷œ×Ítj™É­¹®+åXŽÂ0óI‰KÁ@]ÙÛêÝ©ªÕ¸šÊópܾ½Ìë\Ü[͍¸ÃI‹0±D0îÐ	ˆú}t«o×om}û¯ÄöžÐ9
+êÏ'À3‹›Ó)ðŸ ÜŧK¼„
+|&(
+äeF·ø¹ÑÌe¸¿h³`Ø«ÚgD€gç²g0l0ø®ÿÂÿ¢¹Bl›DÒÿÔGPpÿ}ò*~3„6>þ×øàìø`«ÒQ²¾ú©wnd¼µ“
+ÉAšº{æ¾¢=«»ŸKèW9l/ZÏ ÞìJ"öqKüVµ\lm%—æáR/Ðy´ßëí݇l4#:§ÌÃ)³ðµlèFµ«|póaˆÃÛQì0 ý91Aņ öóÊ‚×."zõÔÈ<ÏÑoÈÜ[ƨ¢ü¼£r¼ô•~’â,̪諸½Kß}Ѫ¥¡nÒÝŒ¢ïs	L(È9ÞQà•yd5ûkXâ䚥C½°²¦ÀZmî)EROO<Õ蹚Œ+]ôÒâÞBÔÏ{êÉU™/g[ªQ_âRá)ýòWçsj†Ys/.j=é#“ÔÍKí-<òFøŽÓÓý‹ô™e0tè5¡3c\ávqã9‘LÓs°=	?=\Óû­•^Å>÷yA0M|õ|xúúw®[ÿ»IJuhtÜwn a6γM,7bÝä8˜ÍŐñÁáÛãÀ,|Âïu¾±tìo-½5G†WÝz‡¿Š«ôÌHë¢huáæã*pX›¢6ΖÿW–Rn4ûjÄ¢)b£¥ø¨Gò“-á*ߦ:½Á÷B.&°½ù”­À芔ßdÄæ2¯˜ÂþT™9ÆøVR9P³ÚÊåM|™nÅ´’5ÞÓs$2}°DÈwÁÍÓ±iÀ<jO÷Hݨ)›Ò£‚yüªÎ$o:kÛp2+u·ÌZ_ÛÞØ°ÏÙ™¡©ðeÚ|¯UáCÉ üÉ40Õ÷‘e牪‹tçÁˆÕ#ÇË›\Î]#ÅÜo‰ë¦ñ¯
+;³øê¾ÂŸø•¹r‹Þj¡7Ж|×ëMG’ìƒ1WèÕÁ^Öl½‹òÅ$çèåLF˜„Ñ>#±‘> g Si„(+˜¨H‡ü&£UƲ¢ªºÇ§£ŽõE8Þõé™™‰#¼ú¦V—’ñü
+ ½v2óh)–«‚~}ãÖøó‚ÕÑy[lt©Õ-╦ÎíïÖ!V;A³0ª¼à 2%31+¡æ=Îpµ^ð¬´ÛW:,Öªök+ä+õÃ<u¯šHôøVYBqȤ78ÞüG2¾¬¼
+6±_½îT/æ’Å4É-'ŽP%‡Et¼8þ‡ð†tÆ<‹”ܘ™bµÑ]2¾¾2oÕ>¸Ï|2Êœ¬;7ù°J,K,›óËíœÃ¼Û¹h‘º$ºa姵ûÿÛÝ·7·mdùþ­[5ßæ¦"2¦HÉ™dçJ–²Ž­$ÚIb¯­ÌÔ^ÉQ$DÂ&	AJV&þî·Ï³O
+ŠJ2[·îTMLݍ~ž>Ïßq$ʼCÇýMúÃ
+«Æ–M¿T„ÒpÁŽÈW^`O58g¢BÈFl`,c6òêšPWàÊr׌®CKÇ­PfœR²Ç˜vù­øS²€6†j_{>A'ò<…íz0bá?ÖÄìj/±9ZW­´ff÷£^~ÔM	žìÆÈnì‚4‰ôaðN<¨wv`ïÂ4£½ñ^üØNáÐ
+µ+ï§3å ÚoN¿?}~ÞáÒì¼}È^:p„PŒà_Q1˜Áµ¨hLs%Tƒ×`6rE1Âw-:U8™‹Þ"?´S»h(àNN¨g‚áª
+ᢹ¦ùñl9nwÒ<Ñ«P‡PY&¼ց*è½X,¾±RëÜuëG7	í¼c*¸[q!øÛ¢¦@NÁ6V,‚
+\ø§7м°Éãխ‰kÐ"ü+¼8ig#¬$[ïø]Éâh6ÝÀùÚ#!×·ˆšiÕj_—xì
+j.Þ“²!QÁ&V*æc›o at 2‡oumùÅÃûJ£¸6¼éÛ‰OþFþÎï`Íßð¾ô+xìÔmO¦f ;|x/·Ùö­g­Nøü—õý*_¡àw'èýÝŽ[,rƒY½q"»Bë,eL"”ñÅÙßF‰u#[Oý›©geÅ´·[RÓ
+Äô~ª¹7 Ãr˜j^Cï¼Gn‹}ú)œØ­®½pÏÉ!Ï“øÆ¢õæ]à5h½!– `…*x…âÍA£î&üGLXYæã¹Æ/r®
+1Zl¥@¥ÿ?ö!Lé“·ÛmD(ûùÛ‡î¿-oshüÏoUèy¥?i2tÜYê~q…¯¶Ü¿€øGÁèá•ÍÖSPÁÌ­ïzš®T§ÂƦ7î¬p↓ü–ñKY»Á»÷{[‘ý;l1¸ùn¾§'V°MGPÁ­±†¾cMZ€°KÅž‘²BËáGiûuà°o§¡Ø~ÀÀg#În~ØcªŽd[õÈΕcÔϼ¼Ê³ä+÷á¹ëh/»ác})xã y
+u)ÅâÃÍÜTûý“±åÊn¹Qà›ŽTh´1ü
+„ÂËÿœ!û>o¸7Ü[éŽûÉXÆí‘ž‚?­n:ø‹hÀÍ[ßd^WØW: ³ã{.¸àjŠžðZô¥YÊùMÚkÝ{¤ª®j¯¡º/ %²i}%_öÃøiþ~ò¬Æ|•ÍÑö¾"2¨­‡Ôá^áñkef!´ãâäae™‘@b0odòQÏï~<¦¢†¿1».b»*CBÄç¢ÿsûâìümçò¢Ýûì«Îå[6õBoãT'ÀÀJ§È€wÅ¢Ž÷Þ4dS/‚Nÿ•ÅûÔIg-ȦÅ=åÇòPÝTC2ôÚ2†f.2Ù¤†¹À—oƒ#÷àýxÿ†ÔðmøíV¥D>ŸgKÀ:¦1Æ46ÁþÀ97b3[Éÿ$<ûÇ;ðH¬ªÍÖÑ7-À@$„>|½¥SWD>ù„±Šw[ë¥Å‹Ó÷ðšà	ù{Ûoᙕã‹Ö«t5i¡„£$Ùωch^®0D-¸É³[WÎ
+z“vk‘²NÅ•k˜óeF‚0±㾎F&Ú‚îä7‘—áìät!Y²´C‹{›y@,è¡`à'œ.öT†aÍ‹9æcƒ%¿Š¹AqÆ‘!DEQ$²m5Ø`[s>Aì"Rh¶€¢VݬåÇÙ*è7¬½cŠ«è¬2™âɦåjN½ °€ìØ"0ɍ˜¯[:`ÈÏÐwíj•^Y£ÛC-Ø+®¯Hów`(X´öî;døÜÑ—‹oÏO }v¬Ûbùž'SÜ6¶!*Š:œ"y!)îµ¼Õ.Qt¬íÒ ƒë`¥{vŒ‹ì@8zTùk¬Ð–¦Ã	—= µAªö«îåsxÞ…p°r=˜å+Ýlz8MO$wµ³'$˜¤ží-1&f¯à‡„íà-yÝs››¾‡VÞï-ËÀÃeMùÒž!І®®fåäÊ	Ü7/ço|“+F¼lrñÖª€c…(¨Šûcø2;ŠêMåÃr~T)Í/ÜDc4‚a¸ýQ®õA%0•‚~á&wrš,Ú,[M
+ðCB3é[^ÚHˬW±´ÉÈrFrIóÖ®H	8GzñsLYÀÿÀ.ÂHº¾ûëÂ]I-º·Û
+BÖs>¾Óà
+{zÈæӍ—ÏÙ·*ºáXž)æÜV}%´ªNFŸªê=t0bÜhëÐe|QÅ9ûæõ³N™Î0øç±
+´øF„ß,ZP›íÖ`šÎß÷àìWˆR 6aÜ+ê°v€~Ü3\—«6xXÃÊð•c3À®¯6‚“¨RT‘½Ï 1wÍ>Æ#¸^‘ã0£ÑûÝ ·x#´áŽDÿ¥°Ê3ˆ°½S ôo ŠÛ÷ì´£$ð‘ÞU(«Ds‹õìï*¦²Šø¶Xÿûµ:T^Ïҥۙߩ »}¯íï·‚£S
+€)í™\¢ÏEJ.Ý
+
+ÐþˆÅqUf@…è ]ž
+62¸@—po‚ÀÞZàõX¯I;KšvP™¹Mj^·E¼>Í›¿|Ûðe¬ˆmK»ú]}µqe¹¿{âìKÍÈŸ¹¶Y}ùýK½RÊò£u8d£îÒ
+â»UœŸ«bzø8,ÍQ¬ g˜«E%Zk<U_i]­}_ÌŒU_ó­?nL‡#Å]h¼^çÅ-ǧˆ?î^uêpmÔÉtq¯gY:/ÙðÈPùè$?ZÙá?M¤ñ¯pv²Dõus]Oª¥u‘¡ëPÏ~xõòõù³Ï•?[P	&?¿äÓi
+A“¸4ÀñÆ®‹ñœ+5ÖXúJ’¼T×L×"0R±^än3Ìи&ÁY>ÃÊÖ;•’
+È­ÅCàËðïtÛi&Uç¸'rcƒƒÕò.IÇi>'!	±Î‰üEAïäÖ$]‘”ïF6*d ú2‘þîXiå&ƒü7éã¸…»—=waOâ8¾/”pÛ–ÑÌÛ~¼Ýä`_xŠšuƒ¿È¡É!º‰ š¹†z­ª^bsß<H<Ì6þ Kr/¼°œ›Üž;óùx.é-ÄüõÑ2š%Â/Kh³<sù>´[¸ËÖò€pÃžÂ“K1³áãÇø`øõ9j6Cà áz³%Kêí>…çÉÄ]#Ç­]w죕ÜóÝVÒ?Ù­~OÐ	v®‹7ð?ù6?LöŽ’ ¶¤/†
+{ðuGižö©È¨úá°üÌ P{çéjÆ+Ã×`rù1¬z¡$Õñ‡Ó¢ÌbITÌ:mêÒg 2",öHz¯º”8ålõ‚s5¨fRŽ	[”TF‘6»I+t‹ªî²íÆK¸ÛÕ㣗ìƳsvÚÛA×=Ni‘–飥¦ðlÄ®]UR~¼T8ª¦Äæ¾…3+UÛèÚéi¯Q`òx*]1^À<žàkG9KBj«³=fh MFÛHyD)Å@Ö­^‚Ÿ:îõ|Ôä	-Õ
+H4`Ðÿu“‹–«Äv5ø¹ ¨áÐàF¬ðs´LÇ-‚ßÙ	ŒO®aÝ7‰xÒ¿dò	Îq`ïo‚öiWPP:ÏÅwºÕJçw’܆îMã—èè‹×$˜—P²äNpVâ§GþPq'~öÄ´¦  2NüûVµpBf©V*ÜåæŠjãIçaå<W»›<ùb_fÈtŠëlîT­@ï¹3U™ù½°2AcˆXï£ÍiÂP'‡ i @hj&Âkžcj8Sé6…\e`{­ÅŒX/¬n³lŽ_+ã*Q×¾)u>¡´O…Å…#ª®¡7I»]M-ul†Óq{Z‡“Ú7ÂüŠ£šÿ|èž…¥Ñþj;UI€C]¤7¨«-ÖJ’/±×mP}×è÷hç!ïꇗ/N[Æ9(B/“w¸
+¯$Êwb…hñXi©'Ú/êµãC™PÑ "œÔõuK˜¾!Þ“°N}¯kfå¢ÌÄèE`ç%²tp‰ûjn›†*¾o³Ðfùî[i¿'î›ã@."RŠ‚¸E	_ºwÐû<Ýz~ç÷OïoÞy»Ì(n4ïü.ã×æ¶#6§NÃ~·u,Pà={;ne÷Ù‹"þh¸H-á’^yQe2-žfZZ‰|™7xº+öjæúžsð5s†ú¾[}f8 íÙP9
+,èCЏñ~…ã‘6iéûC§JîI"l^ÝÑ=_Çí¾DÑ“¿d%	$®–˜©d¾0é<ÁjñùçÚnÎ?9hYªUáúýÃ*ëïßXþ¿BV7ð×_ÍÛxùÿàž;21.–w‡É«ïúöp“ßÐXŸ¹$&ˆÁKsÍ‘¡¼
+à%Æ8fEg²´ac‚˱H1­!E¦z‘&1rz×5‰^Œ’\>9ØÜc{A+ܐ0i ~tDöNXî +$dÞ–ƒå(X|`爻’áÛ_aËO,	¢uaÊÛ&Œº±'ÃNðü»cž¸U“ó.hËèÒnn_h€ÏŒ‚Î@ÓéßV(@À-x,Lÿý{æÕå(K‡½c|(¾HøX%ãÊJ/ gî!üãO„ˆ$õ ÷|kûƒnîŠlR(>ž.¸¸¹Uñ§Ó	.³0ûϽEIýtŸ¢ç·›+ržÛô²ê[¬ÜÝFUÏû…£Á’æˆL¨±d›Z)H·‰s⪒aÕ7œ¿õn6•½nH;/pûçÃJò0–?†ñófª0!) ºvP|’ŸJI[ÌIDõÀÃè<p¢59AæÛ'?VÌú¶w5IË+î7mcø˜‘Ò=%3TZO¿!Àýô¥¾HôÌ0£Ë5ÊÁ@UMÜJ»¶ï·ÚdúWØ¿ò©²ÛéÞ/o;í‹g{ÿþÁ¿úcIÿêÕŽt“éûÿ÷ÿϽùX.ˆ)¦ÜC¤—'a:gxô9k¹v>vj/1slØÝ+Äã=ÆñbÖBZ¥'…–ršœ6d?mŠZh –\—¶ªùv×~€üª„Ñ¥¶õ”sÉÂQ;Þá ÿ.½IéénR.‡Ç»¾Û4 ×…ÝwíS¡“ÖÑ°Œ­Öp…-…M&y2u¡(#cõÛ¬–\¢	H¨ßQ‡ܚDZ½©Y(‘är؏ød`—Í\Ër÷ä?òd׆Ž¶¡i>	#ÑAëÔÇßöi“][­ÎÆÎœ¾8;ù:ùéüìû³ó³ÓßÉׄXt6œ>MJ‚!FvGBû0ÝbrSÌhÊÞ¶‹¢ÄÀ?ˆÅ¾KþžeÙ/Ó¤
+Vçä?’*f5PÁõ¬ìÄÙ‰+hý94¿J^™üLØã¶Þþ/j— 9(‹]ƒÅjH$·À0È4ûÂS¬Ëååܨd7Ùe-±ÕøbÙôâÓù \\¹×ðÖ+CÁ}rÕ–]([$éÊý3X¯²2Ò'ƽøù²üõäígýqÞÝ•oõûZìé"¹øÙ½íÍÞ³ïϾýñ0á-øü+ºR˜îåXÒ·´Njýf ëËÖ»l_ô¥¨J·t¸O’532ª§ƒÄvkPïÆÓ<(‘GJLÃ"ÓX™õ4(³žžØ¥Ü(È´‚`,ÝåúnÁŠù8òË¾ékÿ…Åx ‹O³ÙIãÝ»æ_öõu?>y…“õ²oÍåWfÓC™·{woYàg1‹±+PûèWåêÀ×ÒJRåÍ,]®Îù“aE¼û/«u]E .CŽýüŽšó=ü®Þ€X˜Eå~¸Ö^ˆ‹¯ÉÉì!<pP‰Ó®ê¨2¸E:7­Ö4å7÷–Y,³{ËL.ö¾|ÓUdÿ§l¶XÝéöûÕUä}73ý²'Õ’†Ê䍯_Q7\™W'ÕsœÌ×ïŒn
+Ó*])¦#BÄ{Á¬9àå!v;qœH›ßŸè{áèjDwù®p—÷ºD`³¯ÁífH'É‘`Ñó	ÐËêã^¯G¬ïN}Ãó‰ÿù¬s’|æÆzyPYŸ
+ÅùÌS¥úÓOžÐdÅáæ/?õÕ¢çºZÜ粏Uâ+Cø—±Û#ù¬²½DQ‡è£±‰˜©>nÐ?º£4Ì^g£ez[¿²+* Rjßäe> ÄlÔkOòÑ(›ç¥ñ¯i&¾q[hîC.AE>Ô¯²>û3²š#a{(ð@Ë^†™`ó±’E9Ȇ)QÝm}Jö PÿVíJÆ"XB{+~ȍ+†lì-S×þ†Z¬ÜÞA õÐ]UÛ-ÉOàUÖ€²fÍôJ[QéÉÙ¹_arPÇaÎÓE9)T•6\/Nc­Úh:wÃìÄExuîz#Ôfúñcú:”|U”*X؇ÀZÓ<~³ÊbT½P)pMA×EÅ	•þk­³^9ɯŠpgo¯öyƤëC5Èó:iÛͪ:/˜+£*ÅGˆ’³®ŒÐñ¾ØWj©]éóEXz/9@€b	Äö\M«Þoªª+†²ê ÌÞÞ}
+Ö3>.¯é3“bºWY“L@G¨ñ’ØñÈÞÙÔgȵMŸŸV{(§›ö{SéÓöƒ‰ïD=Ž‚yÈñÇ}¶ÑöIhó0ˆÖ}E2BÇWÐÞ vZæ¹y]S¡~éL%4.ÉïÕ˽j}.­µ ldñÕ<;¶ŒœÇs>“Ç|f-™ ÿ(ì~ͬ¦Ã‡…¼!Ê’“T,P~j‡
+rN0È†‰jaRT‰n&lpy¿Í½ÞÙÁGÞµŠËØꐒؙí6‚«ì‹bð׸(ÐÞìñÛÝŽr	@ã¢äž»„|ÇšÚU²êJ,
+—\>¯"0JtKSÔCª±­ioBQ?­ké#œ(	M…¿ƒ˜:yZÌ1T?ŒÃë=˜®—ÊBÔñÂÆÁ0ýœné²ÍhšÑâ!ŸEɹXÝ›UÀ3¨‹„ªá†½Žw4;˜`"j´‹Ãb7ÆØGZgs´µ"vx9WHHõèJ<V¨PæÓ†e	vyDÂ^µûG—ågýNøùvëèÒcq±%M+[Œ×“C@–!i¨ÜՉܙj—̉p¯rf
+
+?ÆmÞ¬SN/â·WѽzÍ×Ô"aéVn@­5ê:BSliÇ'‡›z¿²A7Tnê ™ŒzFó|’.ŸÃ³ýƒAG»ec¶˜‘‰@T—ã©°*…„dyŒÌ\ÿÎçÏPÅ0pל&Ú Êl(ýŽ­dvTžið¯AÿæmQŒÐî} 8:ó¾áÐ#Àí nScþù€´º¡‡­oÅ69t’`JÝݨ5Ü6üLÓEyOve¾¬‘Gþºxÿ6 (yÚì6ÉtzÇô¹ìm¤ÎÐ0uí×_“¶ýBüÔB·kÓ¸]ð`X)Ž&Õ˜‡è²‹q+ø2N,{ñ>µ8þ›þgÐsýðô_<vRÙ´Ôú=4€Á…EÖVtä.³)0kðšZu[ÚÃ3&dÁC‹x
+æ#K/Ó¢x¿—¯öÖ1êsšF›\†TÐOË5 €B¯ú.¨Æ/Ø'»ªá•É›¹> ž]¢P·qHÛ&Ü*Ô­aWL‹xr¶[°¥@ßðu¶¼ã´£ƒ·Ø§NôjÂv±‰à´q8
+ÆÐ8ñá6“†	öo)Wí»gÏÿ
+°ŠSë³ï	Ö.…Î
+CGPžÉéôà`cò<B‡+µ:kEè%/h{ÂéZй~N0¼ZÞâ¦Uxý,zX³·œì.Ž;ã†Ý¦Ôõ’¡1!ÓùS,D„©‚…š©Ž çeRÓåP7ÜÒïê´Š—ï×_¹ì#†½x÷¶G±{íý.•…gSC–rl¡§C1ú²óøq¸=êþ™Q4ʦdU`bÇP‚¢
+º¬•ï¾OsŠÉÚ­Ôsf6|Ú–QÄON-È C¾)q;¸d‰Ü•iÄÛyµLç%¡ôsºœ+=²Sív‚ÉÚºûñn›^ú^ÉÒÞxAW›âõM:˧œp!^	_PëïÀX­õ†n €5$ïwüó<Ç°½–mEŒù
+ä«Ô‰KÔÿ®7ô‘·eÒé	¨FDùÂý Zç8£›X3¶#¡Ü«ŒÈO8VÅiÁXMzêʝ`ÓG*Ëå#8yùn6‘:¹·hï Y¹Q³Ÿ¿†ëE
+;APq$INñxžãt¥¨PlXmnFš>ûb„+`ò,WS\“)¤Òµ(ÔÜ|Ñ<¦;¾%ðÎÖ®{ ;°õ»ª†Ûī̈å€òÄá“èÏ²%<«©#­*˜W¥Žœã«hCàL|èNP^Œ?vkºcnHÕà¿#æ)"_…OãUàZXvŠ;ý*éêÁEñ’ƒdrz­æ’9(éÒkÂhíÛˆ¨†¼P¨ìznuþè梯1¿Jæÿ¦$6 †Qfa”¡à‹¸çäòzÍø¯½jš3¯™¤ŽÀy{¶z£­ʪø:;ÃBÇÖìXŽŽõž6\9â mš-¸ào-D’÷kxÖ.E3ZÄ¢ÃGÎ7‡m(ól:ÅꢳÄö{#WxåOþós
+. RnO,WÏ)¯^¶Ô2N⋼D¨€#ËrC;=øÏ9xûW˜ïÏA•‰¸B6ôã˧¸‰NЪ eçRöqtŒW¶‚¯ç×Î{Õ¬‚~ö¨÷	ÄPäõf¶Í[Œ'kggî!Ž^¤«´í¾ÉmM³nO«.¥y‰‚ ^?Ú´ß`Ò‡m2ÓW­ó¦tÛZ°ÐéhDŸÇ&”šÚ€v^V'N+(s`˜ÒïN.g?h¤’Ɖ>8HúŸÑ‚¾xùü§N<¿úæõ³oñ¬®;aþ2÷ßá_=´”¡Ò)”_ðe
+•íM‡hÅ"úUþ\P,fÙÌGø{úý©OïþMSøÇÍàýH˜o1g½!Ô‚—n?¼µ1P÷Naó†™1ìfdí-^‹õ,A`¾s§C(²;yŠòØÉŸB;”Ü#„÷“-3OÔ¥SÎZ:)Ö‰$Ù|„襦üÝÑ °2nqïÂÍÔ|;bÞî.„ø*BC[p‚«éõ§Ù]Î0MÛŒñO ÊgÔß“0°ÿ¨^Wê!ŒWråzã®L:}ŠÕ^6hÃ!Ùó¥"0œRaýnאc,{U­Wé‡7nYMÂÂÿv•	T}<Îa5Ëâ¼Bùî¿-–Ž@Éõ²(œä»ì&ßn7OŠ[dNùœ€»JÚÞtDcžÜÏ!lõe1åi*\n{ßW8áªú˜TO€²Ëxê-
+hëÅ\̋ፋ…s²èN†ãqcW4PzJ|}úé§ÒãÚ¥ìù
+üä©£FMèMÒò¹Œ6(‹ŽÁÒ–Ú—I‹ÓÿþK²]tD`ûY¯Þs„¼#C«ë i
+íSilg`l‹ªäeA’ÈáVeVKå—„qqö`NJ ib|·§WÖ<ÝW³Y,ƒ)™3dRP9NÍA‡Æ5õŽ!	ÂènWT))G2ÐœÇ榓K…Ç«ðT¥Ç!à,h¬ÌĻɦ£´mÐë†(ØêÅú0ëe¼Òj(üT½Ù*D_þðGöØUŽ©«è·7^á-â#$Õ*g™OÚèÀùŸ¼¾Èëù[»­}êøc.Ï<O(üèTÓ¥VãHï‘fêÝ®³Êö#Ÿñàî6K<
+,òÇû–³ Êؐ ¬®‘KE”2I¦¢4ãÁ™í²8¯¤yOTö¿’ݐ›±\eè¤ÑºvÑÑ40/WË5`ch¥&œ¾^¦cŸyÚŸAAf@€U)Sß/¸o¸ˆI	eºZ!’M¦Š!
+c82Þ{FÙ@ „Š~Ä;ŬﴟˆÊ k‰È‘®¬(£©BKÛoøÛB8ÝZÁÜnDppTÑ–/×ö±„ÿÄ6sé6-h®É1õC^"ȐßÛ†¤Ü!,$5xW¬—èR
+ùÉ6LÚÝ£jb[Iî5ÊŽÄЈVYóÖ†­/ýªn~¼êÏÓq¸w÷¯?•.w™¤@ó^µ%ÅIçóY›t3ÑØ„|Øq
+„ß%0ÞâÞž&†˜íƒMW´íè¿N¢@=¦,oèâ=ù¦,´8ÂØÓo
+Z,nœ3¦Êˆì•J]ÉR¤FZãê+­U'U"ûfŠ.1²Ì’E¦×ñ¥2½çl§§×›õ†ÐÚU1¿Jfy9)Š.F}€ä0*$ÂÖILÄʳŸ™eîk[YžÝ£ûó|ŸÏ_±©û»	¶ëÆÚWV’9‰)6v¤7͘GŠÂ¼ÿsú‰˜Äà¡0wÌáss†ÕêÛGüöõ:ԁgx F°}M€ô=¨À¬øð³ÝÖnÁ«V§KM“Û–Ä¿äMºEyƒýI`Ûñ¸ –ñ‹<cÌ9ÂhÆ]àã°IKèð¼ÿ‡pÌÐ’ÕÒª1 î¬ìC6dÃG»E›jµôˆàwz4s¬B¦=`tԐäi†|,‡tC“GÆË´×ԝFµ0Wµ»(­l!j!íÍÝñ|“¦töEWÅ„F}1í|ôÜN˜™M»ñ3µUJy+˜FémÖ»jøÛivÛLƒ±€˜®ž‘`’Pcª(¸F0=JKð·h‘¦îl–Ž³–$šF50’ÀS½%¸ É ™%ç4›˜ oVŒòë;RÚ8Š´ ½wŠÚUî¿h	~lS‚	Ð+ERIÜOÁhQƯî¥aTŽˆX>ëÎÀç•Ý!mV	°NÉ Š{{JFŸ,—C dôGHÊÜ+¥détEMSA÷'¿`ÔryAj% B3•ÜŸüêdÿꣻøݤXæ¿øw|·8Ò>¸âÒÛÉ䟭²Lf°ñðê漄n«Ï‡Ù4~B5¥ÿúɸdãIî)4›‡ðàÕH´Û†\6PKJ³¾Ñ¨/	æž¡äKÎ2#[{ܬe¡|hÞ’'oÜ“\
+•UŸk²½¬¨î¢XRýO>P’ˆÍL_U´JSâj'_؍8Êá‹,ÇÎ]¢þÆgRÅxãÁéiÉñÃáÙIØ[ʺqUè µ¸Ê@°õìzóë¯ —ßil\ËØýuÿ§ál¶´·t4þi<ÅúéÉZñî¿á*ÂD¤
+9G/?ºŠ6Ý çŒÙõ¯”q¶½„šÉ"‹ýÏ‘·f]P»ÃÔvfb)ªo nUÕmðª¥~œáÖ«_êHO#åñ{ø‰Œ¸¥†¾Ý·;¸ˆ¡Ogæ?ÄÛ§<æ¸òëy¾j½½÷8js[žH!ZìÔÎSóq„óPdÚ¤·ã‡hf‘ŽFµføá=Í|ö×
+qÒãÛ„`±OSÊOtíaTÙ>AjéR€=–µÌžY->ªÙCñá'—Õ„wôÁwöƒÃbÊ|§›¿8jø¢ÉXXÁí™{W’- ž¦.3R2 .–µ#`ÂBªQuLçjT™©vjà=4›³xÖ¡ª‰¥årDÛ„ú†wp˜ÛË[ö&®CÄbF?YUì"lîˆ?èo§?ž'ß=ûñÅ÷§¯'‘»EÐÍ«qÿæôûÓççœ_d¢+ÁbDóÀ¢F”°Ë †aÑMøÆ‹þÇÞp9w%Ñq›‘%°Ù´'þàà¤i=¹ßzH
+ÿ—†bñqgøZL]ÎÜlšlu¨íT°ÿÉ@Zˆg+d»ub1Aïù8”k„Ì…¥[ÞÁºBP
+È´>(ŸBJDÈÃbR4‡½E›bOª¡') <ِpW#)$É.¢ €“Ká±@ 4ã4{»zÜÔÓë@~ÍP’j”“µ—µ|’3VâƒoÆÚ‰â·sÿ]D銣%دš>œÎ^t“ŸÎº–ox8/V;Ø0IJÁ¿õ˜Æsö¢zÔ±[°/	¾çÂ4ïméõÙ¯ÛJ„Ǥ#}……j<&>ÕÄëD€{™7ÁÀF"k™èjYymø|Qˆ*µiož®	0À·çÅëñÀÝ£qJnÒ;‘ÃJa”™f&¼¾»ÝXg‹ÆÓÒr0'Gc’¤ ?Ïn!	 fGŒÁuý¸¸¶ñáÞ”R„æÞQˆå,†~vºW®´g s[oY™Ä‰äècò«Ö”yP‹*qÞ<·4“ôÊ?n	¬%LK‹/žãyÑ…„аà7ùî;Ù/+áO
+Ø…_£Íå5µäZ/¦Ð–sBJþÜ÷ÇwYÙENûøË?ïw)?ÕñŸÿ²¦1²ôì]up¦ß‹lYóTÞÄúæÇvßÐ!m8ð¸¯Ü–€ÄáSTC	<÷IJbú7EO'›N qf$Â)r—ŸH˜UN…µPoÛP+8’5&j…¯…Lç'V»X[夸dÓÐ\»?* °ÊœI»°;°ži6hpè ÒQÇ¥øŽí¦*Ãõª²¦ÃbqWy„Ü4Ó'
+X©¢wÀÇHîåüg«E½^ùz@Óæüe–&µ~š/–ùM>ÍÆŽÞ14,Ü	p5¤CwÏ—ÉóõªÿÜ
+ºý%ÿØ}0Š1 »BÈt¸^FÖ3%]ÿ9Y¼ü«ˆC,1œÌ¡
+¸†Ð÷…ñ{År\m•8`c”hNgLMn—&‚[HŸQ¸šæÌiÔk©Èn'w·¯‡ý¾ùlŸvX–Òr”ÍŠ¾ÓUšì¤A$u}W£º6uycáîœ:’j÷†‚=0¬!ŒãÀÌæŠÇ}¹?4¢¬þ>iqž’·x1÷»Ì
+ûž<àthn‹ˆÝ¬¢JóîZÏL83˜C*LŒØÖèóÌX1,5P¿ÝÒâ±95taAWj¯„¤[É b_çàûÒàÀb3`áÍ=¶}׺TªµºÝÝ ß7î6ÉãÕA¸„ÊJë¥î]Ò*o‡ÿ‘TXÍî^A/ªHµ0)VØ	zÌ£®–SW¾6¥tVG<„å:Nbð$uëÝMÏ•†w˜€¬7ä’±|5|M`}(rÊ{í¼R•Ýt×N7ØŒÿû×ÓÿÍ„#ôø7ËM®‰UŠ£…®¸;Ž,‚ùªXPB8YîJD¨­J”FqÝT†%¯-*ãço°{Èk@ÈÑXÝÝÜ—âøâx¹µ/‚þbûŠ–¾(˜zßg«É²X'
+ŧ¾8c%ã/œÕ
+A!°l(¾¬§û+^ú]­40æ
+…	&¤h(uçK!ã/uãKßpn¦à¾/¨Œ_X–`ÈR¤¿a݃Ý0ôe÷IõÁçÕ®>ø¢úàK>¤Ü)«;bBÉ:¯	È×nÛz’Øp¦µd±catòó^º[t½Êä¼ðYñŒh喍éÙ6O
+´†hþ"7	(‘0$×=/Lˆž'¨UÚw@áž@ÚpwË šg­ê‘Ùz:X&}Ñ,n&4®áؤÂÿ1ÜC€BB-¤XdT©A7_OAPw˜…Ñø$<ZNXœØËdc0ù†4
+©SK7ù"LÛ€¿GvÜE5îšú@ÚDêx=1twWó%
+©Isøer20ÚÔ²p€ÌawÑîa¾áGå3Y&AˆW=ÿ®awHÐ~PÚ7ã[áx#˜´¶Ä»ƒ ÞAŠÕ>®Ýµ(°ÿòµ®­R~9Ô©l\ÒÆ[ûmùÁ^€ó9„GN#Óu$ccS®¾æˆÅ:5-¥Ðu
+ð´WÃVݪýMØÔI
+œZ®W¬ÞˆPýG.¥[”ÒøWÈ…ü%n2Ɂ¦2¹h~ÀΦUæì‡v¡%O¢·&Ž´ÿ:ú#M³”!æ¿“o~úñùùÙËß›OCwGn7ä×9)³ïøt‚ï<½ÉÇ)^t®ü³1lžª2	°  acÒ<.­Y™C–ÞGÇÉÇ)ÆˁlÚBˆ-W°ú|›ry´6}¦Ry–¹
+]L‡ª‚xÕTÊU«Þæóƪî©‹êGì±_·AGæ=¦C—¬DímÍv°Ðà™`Û›jPÁ,ªzV at o©aÆ…sÚ¬j[Ÿró±ñžÎžùµE,óRZÕ³¤Iþ0º*»}©‰©,	Š½
+Ì¥Аû«§áon†|î<¿¶ÚûgÐ@›6˜`uë§+-)HNµÚw$i§¥›ôu:í&@çì}V܇÷ð™žæN"â4:‘ƒN=t¶È1¶‚,EªcBU[˜S‘£ÙÜËyÍä>g˜î]à.@©®°32+Ë¡¡Äåãç›þ¶5ÇTåu¦%B‹X
+¦ûG‘1’SjÚë@q)’/z_Øí÷f½ ´ƒlô5“À(Î{“òÞÕÎà›õÀ}ëÉþþ“ƒ'û²Nâh i13¤ûËO(ÞM³9y6]LÒž†Ésœ|ëM±\Þu)®·$f(¥÷=¶âûù¹ëé~¥Ÿâsõ4~}­ÒÚ7Õúy‰ZVÐÕÕ”.Ääæ+Î\µÁiºzPÔ$%q¿þZñãov1»s”qé™oE©¡-Õ©Ñ[uÝý!¯€xvI¿vô§ÿSa#`,éG]cø1”+$w	²¥¤@‚J5‡µ½f£ÝcÄ}#ebM'YKQó±$´£q‡Mg>çæ¿õl%HfP~SäzÄT¾E­ª1_`v){=¦£Qݦà(vn_äLrÏ4ƒ®vµJ‡R’@jvgµ
+TgœÔ»Xþ{ð±r,zÛV Q9ÜHõ>—õN—¶Ç«Ä˜"ê-Ií‹ü­íqýÓ¤ÿfl”=xÆÌ·ä™Ú¿ÞLc[OªÑbæ«æ©ºé‘oÒ×ëA%C·{E‡áo,ŸùTövân0ÊÄ}÷Éj¢ÞºéA^-‹E:N#„«:Úç §_¹
+?Š¾lh
+@úŠ$Òeƒ.ÉÚªeŒ=1ÙD–ÌJÇÏj׊æäÈ!Í‘¹êÝË‹½½SèÔҤˋtÉu)ͳ¢ßËEg;Á•KΠÄ²­Â‘Úf¦*ð‚X!
+Ç‚³¯X]‹J³GÕ®B.ôˆ´‰ªÝ¨¡?laÍÜvyÃ2G–±âX]eRBCƒ@8^˜AÛäNC‚îÿ`´@œËÔ5CîÍ –´ž&Å4M“iŽ€ÌhµÉä ™<I&Ÿ'“?'“/’É—É?Öº‘H4Ê
+L0Zƒ¢V×…c¾VèŠÏ	ÑÜöB0š6xtmí¡—@N‚lÿX+WæX]·-ŠÒ]—€ÑÐ01C-ASƒ#`'Jß“ ¹y<*Š¾™%”‘²?¦	Åã2ø}#s§m‘-aÕ(uzâ¬C?€¹S	»”öÞ̨¼NçC¯jÆRO1BÄCÞP”–Ù8û°`/%|¶^Ï}|,óy좄¾SbD‡û¯Ïøi?w“Ö§élqDÇ#Rè)š®šËœp™ñ†2—ž<áb°¹ ¼HfYê8ÖÝÖ.ÀÚߢ­ïp|^f¿ˆg3U:#w3¯—jé?ß R6, fµo3pySj`ï×iîN}/92®ŸG!–êåK¯Ð*PLDÕÛ!O“œ2âP	9§Xb[Ž3]Qø	«E»nhð ¡ìÒå(yñòD§	¢·#V›¥;›ç·^½Æߤ„©A¨Ç¨’¡Z³Õñ/}S&Ža):8<ŒŠ‰ôUA®Vx¬ÃÞ°†â+,Ñp¾9x„cAà(mì·Ž¨ €ª,ö"è0ÜBY±×bŠ÷I7àüÒƒ£ƒJz“]Í“c– Íߢ¨võ©e™Lê"£î=:¤×§W<Ýààw“Łûÿ“ª³8€xº'±d;=ÇDÅdRV’çž©ëÛ¹3ÙDm̦2÷š6ì€G´*ƒ_¹°‚ŠË&G}óÆñÓ/Ùw°¬O¯M0QqXXy§¸ TA#sq’!ˆÇidÃÜ]Î&»Ts³9swx3Za‚ƒ«Yñ˯¬ €3÷Ù¯W³r©ˆæ†1¢íœÞùH8+9Å7öJíf;¢r½|„n2w’j?rvúEï zÅÒ‰8O¾`3‰£¹o8\Ò¦“;8bGüDÉÊ€•*Ü}ç¢çKÃÙKØ—è½ã~–”§$óå¸1òdœÞy
+«MÚtxx€t‰yU$ß=;?Mþ3½Iß áŽñŸ4z%‰èüFù5«JÍ° ÀÂ?ÿ	‰<©á ?ÜQwý#
+á@„½ãçÀ°tƒØ½èI;(‹)x…@ð…ùÎz>6ŒóõaÝ#0F
+êo[£GY¸ð[ìmE©TWy‚'ˆk¡+®^/ÕFy»TP|y*ú7³³xû0-*üòé”WE.Y®¼ù<ÊìíKÃÓUÚÙ2Íâ¼ñܘ/;6€ìŠðƒØ.~Žt!†Md}Sæ€B¨¶î¬‚_ü,¯Ñ-{O¶@Ã}EêX§Û‘=}‚Ómæ['0Jb€üÖ¬S¼	Í3ò<hÓY§7i¥ÙþæF©óø„Ú(~zõêôõógoN¹ŽÝѼ{&AX¿äìçO:L½ªÉpL(¯Ð‚
+êêö‚dßaG2È\2Åp:6g*ÓË™{\ÇÉî±ã>½;—ãENP«ðMö•«Ù?Açp¾
+=4F.Sa ¼?„"gn¡’dÐÒvÍ·%fõü‡ÂkíÔ³j›î¾Þ|Sϵ¿ú&dØ\×6!IÏøÒ _H©É»Â(¤Àä3='K?
+IóŒÛGæz$¸12[>Jõg_sÓí©.'œÀ|@SLg»ûé|P.ŽvÁ}s`%{Žú¿e€)MáDUpRpz‰uõ‹'ì'fèaÞ»vÿçËò³OúŽkè7.] %œJ~‘ùÚÚ^StÑ_üR<ùCÀƒ+côhoOWÇèxo—˜š¤«ë½£bàu*Ê®&ƒ]8Að,Qªˆ¬ºÁQ©Á”2ŒßPÅ#±’2e-’)Èk"w‡aÜ0|i…qßáH®sŒŒ÷à_^ò¼øù²ÿöñ'ý®“%TÇ¥–ëùˆSnsM‘`	ª~hkTÏI±l:÷Ýžåjö*Üò0´áLŒFD>"†‡—Ô2s»4ç;%[º[
+mó`~nC MùÕáeÿ’Gցü”8¼Oh€÷
+Î˽ÍC£%g¿{¿à žV·z¥²°¾Ÿ—åc?ã÷lÔ¥YïS…Ʀǃ=ºª(rvi2_Ï™â÷9µl¯Œš›Y¡di¨ºp5˜€Š4Ÿn‡¹/&íI± —Ÿé]ç.; 7p¯H’äžQ>ÞˆâQ˜pt§	—‚ÍxÐãM}¼I>Mö?|ólD”‹o’““ä/Ê«¾:øÒ¾ã´\Ëm<êpÄ!¢2ë¯üê´Ž"vÁIö!¹ËtænSš\Ô²”ªe	æ:ωêr.>è¸a	Ýt̼¡@ÿ'VI{#¬j{|?ܲywüpû‰£ã|UBSêïà*µG¡N¸=sô— Wh·ö1W£÷™pÏA§>Áu¤>æ8¶an³]Ô¡Nß3¿ê–^ܦcK¼i7.²®2†}Ã@—þ1–ãd]¿19?ïPLÛx`zOÛ¼Ýëõ:¤TÞÛ³éðp @7ú®”»Ê.Ûî?í‹ý½ÿí¨ŒûÙÝøçe§¯ªš¾—žµ“ÙQìÍ“k¤õq¬ÀS`+ðyè×pÿ”)|³pÊ[ûúô«G‰û}7ÈÈëvn;ŽAvsDhZ¤+>%·àffIsbP ,½0ð„‘å: åú·m“§äðEbÔo—|ð3ÈÑAÀ7ä̃€Õyro”8ÌŠ‘##Œ.‘.¼Íž1´óI²B°•IqûÔâpãª1;=¥6Ã,%ªãîà6üÇè;Äּø}ÑGÔRÊ Ž På!aœ‘—?²uÔ´+Lq׃—ÓÐÙÝ
+¸|ö<£*
+è™&¢Ú’7w•:QR àç9«ºx. z¸v+…SAºš”
+üU>W8+àwº„W»å$à/ô0;%Œæ†¶ÈŽGþ¿ÑB-ŽD9‚?àžö]×ð7ÒÈ"Ê4Tá™CbuHo
+ƒ·ÊQÓ‘Ý¡ܘŽ»/d%s3oSZ3Øn&÷¶R¨GýKd½?a9KJÉÝ1ø+Q/·›l€ŸÂO<ŸákɲÅ:c~…xe‡1„†wÔç09ƒ œ¹;n”î6VÒg$m%h/ää^Ä{•dÿXƒ<]x›¶—º”WÈÍÌ]ãڐ¿0õ"þ6½CŒû„0xª%CÈ$`ºZ“©Z4µ½bù>EÜxb	Ü8Jê Ê
+HúU
+€ü ¾Ë,]:⍉ŠXž+µÃª+Œ»†Zï¨[d¿¾;°qV TŸLį;óN&/ïJrÙ¦ˆcßBùõÝ9	ÙPÙ[œsò–ôªå½½<99NöQ)„± ðú"ÛA"-ñÞ9fôt]°×[6=j ãOûd=ù¿PK
+     !€~1              includes/htmlarea/images/UT	 Žß¬AT]­AUx õõPK    ê…}1y¶‘!T   W   %  includes/htmlarea/images/ed_about.gifUT	 蘫AZV­AUx õõs÷t³°Lbbh`d ‚ÿÿÿ+þd2t@|“^O灷ü>!%~³Ö$E¿«Îˆx¦+#Ù0iÖ´´ëik~,úü¦­Â¦­2¿‘ÃßÖ‹‘Á PK    ê…}1ºôB   E   ,  includes/htmlarea/images/ed_align_center.gifUT	 蘫AZV­AUx õõs÷t³°Lbbh`d ‚ÿÿÿ+þd2t@|“LOÿÊÓoÍùéñºtgóÙJù"‘]/Nmscd° PK    ê…}1yh¥ŒB   E   -  includes/htmlarea/images/ed_align_justify.gifUT	 蘫AZV­AUx õõs÷t³°Lbbh`d ‚ÿÿÿ+þd2t@|“LOÿÊÓoÍùlÛµ´ÔòýµDyá ÇAaÏOmsgd° PK    ê…}1u|ÌB   E   *  includes/htmlarea/images/ed_align_left.gifUT	 蘫AZV­AUx õõs÷t³°Lbbh`d ‚ÿÿÿ+þd2t@|“LOÿÊÓoÍùl뵶mGþ5Ïû¢iÉALÏOmó`d° PK    ê…}1†ö¶A   D   +  includes/htmlarea/images/ed_align_right.gifUT	 蘫AZV­AUx õõs÷t³°Lbbh`d ‚ÿÿÿ+þd2t@|“tOÿÊÓoÍù|ÓùeîÎæÜJÁR';_œÚÆÊ`
+ PK    ê…}1Ríƒ+6   8   %  includes/htmlarea/images/ed_blank.gifUT	 蘫A蘫AUx õõs÷t³°Lbbh``øÿÿ?ƒâOF Å "@2Lü-ý+O¿å_<gË­îÍ÷æˆ3X PK    ê…}1ඦ‹      '  includes/htmlarea/images/ed_charmap.gifUT	 蘫A蘫AUx õõs÷t³°LbbXÄÎÐÀÐpàÀ†††ÿ@ "þƒâOFv0H-sHÅ®;÷”ìÄ›§nn;¸~Á±£¼M¢5=UKS%^\Ü·Œ›ûh‹Ã~&ucÁ´‰&ì°þV#Ø °<#²ï‹€ô·w'±*]ÿÂ럢:ãçÑÍ÷?XØ02X PK    ê…}1+à異   µ   (  includes/htmlarea/images/ed_color_bg.gifUT	 蘫AZV­AUx õõs÷t³°LbbØÌÍÀÐÂÀPÍÐÒÒR]]ýŸÿÿg` aJ1 ÅŸ,ŒÜ: È–¤‚“ž«§zÝ]ûyÛ¼ï¾Q‹8nEÌ:=aéÕ]Íü}ºžMœm8È$T©$8èH”ÍÉ­0Ùz9Q›ƒÉÒê­¶<û4µfì²gn©qX±Z›ÉÒ)@ýŽfPˆ™rK«ˆ ƒ5 PK    ê…}1­zü—   «   (  includes/htmlarea/images/ed_color_fg.gifUT	 蘫AZV­AUx õõs÷t³°LbbØÌÅÀÐÂÀPÍÐÒÒR]]ýŸÿÿg` a0³âOF.dKDÀIOm_‹líËGä—WÈZvMï\¶š•¯@f÷½„;Îù·$ÝgŠm¯äd1P™dtƒ/À‘A@¡ˆíÂá®
+QlÎ17ÝŠœ#ÈdÚxV¤ùýÚ=q‚ŒÖ PK    ê…}1“/­k   n   $  includes/htmlarea/images/ed_copy.gifUT	 蘫AZV­AUx õõs÷t³°Lbb˜ÈÌÀÀÐ ÄÿÁ@ñ'#3ƒP„$ÏÀd?§åi1þÛœ‹ºÔÙ·šœ¸ÇøhEŽXg“Ý‹•Ji­vZ/c.Ì>VÕÀ œØÀžÃ¢¸õÓÏΙ«¾vi00X PK    ê…}1eI ï?   C   &  includes/htmlarea/images/ed_custom.gifUT	 蘫A蘫AUx õõs÷t³°Lbbh`d ‚ÿÿÿ+þd2t@|“TOÿÊÓoù39°y©®+¼ý§ðZEç\Ïe¯²D¬PK    ê…}1a»aZ   [   #  includes/htmlarea/images/ed_cut.gifUT	 蘫AZV­AUx õõs÷t³°Lbb˜ÈÄÀÀÐ Äÿÿÿ’Š?Y˜t€l<“Δþ•§¥¿K͹äR˜Z±û\LnÂE†)n\[BO¯óÕ:òUçò—Eë­q¶³2X PK    ê…}1H±V   Z   &  includes/htmlarea/images/ed_delete.gifUT	 蘫A蘫AUx õõs÷t³°Lbb˜ÈÄðÿÿ(©ø“…‘‰AÈf É30iOé_yú­SBἈàk7ºö–Ì¿ž°@Ùn¾gÛÍ“žÓ×,	ç>˜Ü±:ä=·ƒ5 PK    ê…}19âøG   J   +  includes/htmlarea/images/ed_format_bold.gifUT	 蘫AZV­AUx õõs÷t³°Lbbh`d ‚ÿÿÿ+þd2t@|“bOÿÊÓoÿ7Ì1ºf{lúÛ·±>õzEMRb9þÉǘ•Á PK
+     ê…}1zÖn²M   M   -  includes/htmlarea/images/ed_format_italic.gifUT	 蘫AZV­AUx õõGIF89a  ‘ {{{„„„   ÿÿÿ!ù   ,       œ©Ë퍘3Ž,¨vÍE(X—ðAe¶îG ;PK    ê…}1"+K   N   -  includes/htmlarea/images/ed_format_strike.gifUT	 蘫AZV­AUx õõs÷t³°Lbbh`d ‚ÿÿÿ+þd2t@|“jOÿÊÓo¹”8.-Î5íù' RyjÚÛh/¥ÅÛËN‡´}ë}îÃÈ`
+ PK    ê…}1Ä!úIL   N   *  includes/htmlarea/images/ed_format_sub.gifUT	 蘫AZV­AUx õõs÷t³°Lbb˜ÈÄÀÀÐ Äÿÿÿ’Š?Y˜t€l<“ü”þ•§ß¾w2âŠ|;WêóôP†Š)•Y+­¦½ã>îËÈ`
+ PK    ê…}1”w¢¨I   M   *  includes/htmlarea/images/ed_format_sup.gifUT	 蘫AZV­AUx õõs÷t³°Lbb˜ÈÄÐÀ ÿÿÿ’Š?Y˜t at B y&¹)ý+Oç2Èt]üµ¡U‡åqbÜŠ‰*šæÛöŽ{;+ƒ5 PK    ê…}1Ù1þOT   U   0  includes/htmlarea/images/ed_format_underline.gifUT	 蘫AZV­AUx õõs÷t³°Lbb˜ÈÄP]]ÍÀÀðÿÿ ©ø“…‘‰AÈf É30©Mé_yúíÿ&ž¤Kjþe»ãþ”ú¨ë=1o[!ÉÀ°IØEùZìs«Xk PK    ê…}1¤!¥æC   F   $  includes/htmlarea/images/ed_help.gifUT	 蘫A蘫AUx õõs÷t³°Lbbh`d ‚ÿÿÿ+þd2t@|“lOÿÊÓoù™g(øÇŸ¼vÎqáÒg†YOOn{ÄÀ`
+ PK
+     ê…}1c¦SXF   F   "  includes/htmlarea/images/ed_hr.gifUT	 蘫AZV­AUx õõGIF89a  ‘ 333™™™ÿÿÿ   !ù   ,       ”©Ëí£œ´‹³>¡ûVâH–æ© ;PK    ê…}1?ïbH   K   $  includes/htmlarea/images/ed_html.gifUT	 蘫AZV­AUx õõs÷t³°Lbbh`d ‚ÿÿÿ+þd2t@|“ROÿÊÓoù
+>]-?œû¥ÖóF¥jEæ)«éG?ù\wgd° PK    ê…}1IÅ‚Ü‘   ”   %  includes/htmlarea/images/ed_image.gifUT	 蘫AZV­AUx õõs÷t³°LbbXÄÎÀÐ „
+@²¡áÿÿ²020°3è ¹ µÌ‘»îü˜é¸zi[¯ÂŽ÷	Ûxšçe(hE‡Éè+Ê/
+Û÷ÃQcÕµýÌ36˜í’mšâ´Áük¤‡Òê/6rš>aª×ö1pô‘Û^Ó°¥J—µþÞ\ý,»þï'°0X PK    ê…}1¶Ç_!U   W   +  includes/htmlarea/images/ed_indent_less.gifUT	 蘫AZV­AUx õõs÷t³°Lbb˜ÈÄÀÀÐÄÿÿÿ’Š?Y˜t€l<“Æ”þ•’¯×7ålöê`uØ&·AönJCZX›ÛöLÝI÷*Žž¾sã×®ïŒÖ PK    ê…}1ïˆ?äU   W   +  includes/htmlarea/images/ed_indent_more.gifUT	 蘫AZV­AUx õõs÷t³°Lbb˜ÈÄÀÀÐÄÿÿÿ’Š?Y˜t€l<“Æ”þ•’¯×7ålöê`uئ´AònJCZYƒûö–E­i÷*Žž¾sc׎ïŒÖ PK
+     ê…}1ã-ë®Y   Y   -  includes/htmlarea/images/ed_left_to_right.gifUT	 蘫AZV­AUx õõGIF89a  ‘ „   ÿÿÿ   !ù   ,       *”©ËíS˜ D^À¬UÝGmJ7j™™ WÈyÇZ)t²Ï÷þ)  ;PK
+     ê…}1›OÖa   a   $  includes/htmlarea/images/ed_link.gifUT	 蘫AZV­AUx õõGIF89a  ‘ €€€ÿÿÿ   ÿÿÿ!ù   ,       2œ©Ëíã ¢Vc+84„Syà6_†
+¨ægPåL§Ù:©œ†d~+e~’¢ñˆL2
+ ;PK    ê…}1Ý~		N   P   +  includes/htmlarea/images/ed_list_bullet.gifUT	 蘫A蘫AUx õõs÷t³°Lbb˜ÈÄÀÀÐÄÿÿÿ’Š?Y˜t€l<“â”þ•§Ùî_aV»Q}±gÏï-µŠnYÚ—=xÙ›RÖòʧ˜•Á PK    ê…}1`iÎP   R   (  includes/htmlarea/images/ed_list_num.gifUT	 蘫A蘫AUx õõs÷t³°Lbb˜ÈÄÀÀÐÄÿÿÿ’Š?Y˜t€l<“ò”þ•§9ö0^5[­¤¨úF-_iìÌ©®UkÂf-—Ø´-‚Á PK    ê…}1zKÊ^…   ‹   %  includes/htmlarea/images/ed_paste.gifUT	 蘫AZV­AUx õõs÷t³°LbbXÄÆÐÐ D
+
+ÿÿ3üb(©ø“…‘AÈf ©e`ÈØuçß…©‘‹óÄD22ä$²ÍMZ4#NÁõMRӏÎýóõþ80ú‹ôŸ¯În ÄéÖØ+ñ×±QkÙç™!ëWðn~ê%ðËÍCyÚBÖ PK
+     ê…}1¡oǽP   P   $  includes/htmlarea/images/ed_redo.gifUT	 蘫AZV­AUx õõGIF89a  ‘ €€€  €ÿÿÿ   !ù   ,       !”©Ëíï@˜J4OM›‹ì-”Òacr™'@îÇòL¿ ;PK
+     ê…}1tÃ7©X   X   -  includes/htmlarea/images/ed_right_to_left.gifUT	 蘫AZV­AUx õõGIF89a  ‘ „   ÿÿÿ   !ù   ,       )”©Ëíÿ‚p
+ŠÀ²Ø ­pdžF–á5~Í™©	œ½,dÐøÎ÷~R  ;PK    ê…}1ufˆ      $  includes/htmlarea/images/ed_save.gifUT	 蘫A蘫AUx õõs÷t³°LbbXÄÊpçΝ`øÿÿ?”ÅŸ,Œ¬: H-sHÄ®;ÿ&zjçºL8ø[UÐàæ³Â§YZ«wÊïñÚ}lGZªÙ̝®¼…ó…Þø2	ß	ÔXåUé)/2eŽÖ¶Ó"›8fœÏøÁ˜±ûþÛFk PK
+     ê…}1£ýÉh   h   +  includes/htmlarea/images/ed_show_border.gifUT	 蘫A蘫AUx õõGIF89a  ‘  3™   ÿÿÿ   !ù   ,       9”©Ëíc˜´Ú`ؼw,hÞ¸蔥íšg:Ÿ,­æ™éö«Œ«Åx+]¬U„ÝXÂÚòe  ;PK    ê…}1D(…      (  includes/htmlarea/images/ed_splitcel.gifUT	 蘫A蘫AUx õõs÷t³°LgcXÄÂÀÀÐÀð€,	Š?YXt@Zæ]wþœò\=WùõÙãÒMm=ªÎeLKùYZðmj£ Ã×¹‹{³¸â7K^Ápb‰P at LNKÀ#Ÿ)‡o®i\öhGLçªU7¾}½Úv Þ’m÷Žû*T¬PK
+     ê…}1A·Q   Q   $  includes/htmlarea/images/ed_undo.gifUT	 蘫AZV­AUx õõGIF89a  ‘ €€€  €ÿÿÿ   !ù   ,       "”©Ëíc4€EVíìy&Ž	ÈU¨ÑIÀ*ÅòL×L ;PK    ê…}1"^ô^   a   0  includes/htmlarea/images/fullscreen_maximize.gifUT	 蘫A蘫AUx õõs÷t³°Lbbh`d ‚ÿÿÿ+þd2t@|“EOÿJ¶·÷E"Ò—qÆn(H?2ýXçÕÍ­«ÚW®ª\?õXQå¥ïYñ_:¯´pÄvDL	Û¹ p'Ðk PK    ê…}1Á ËÊ_   a   0  includes/htmlarea/images/fullscreen_minimize.gifUT	 蘫A蘫AUx õõs÷t³°Lbbh`d ‚ÿÿÿ+þd2t@|“EOÿJŽ·û™:Š¯^^RÙ÷´*7bÙÔnÓ„w.[URÚsb×¢oOexçzfs´Ðf-P7‰ì9ûd¦ƒ5 PK    ê…}1©5¦ás   y   )  includes/htmlarea/images/insert_table.gifUT	 蘫A蘫AUx õõs÷t³°LbbXÄÂÀ`<“áÿÿÿgÎœ’0 ø“…‘…AÄ©e`¶óØuçß„ÏÕ¼Z
+g«OR/JPàqêZõ2rÞ[®ÕOî[ü;U³ç¸C”šûž¿áiÇž\í:r)Õª3bý&k PK    ê…}14àrŠz  @    includes/htmlarea/index.htmlUT	 蘫A蘫AUx õõ¥YmsÛ6þî_±ÇÎ$ö(ú%NZYV.±Ý֝¤ñÔn3½^ç"!	g’`	вÒé¿g’%Åɵ<&	`}{öYhø·ówg7?_]з7oßÐՏ¯ß\žQ'ÉåÅÍ×Ir~sîGŽú‡Irñ}4ÚÎl‘vˆ†3)2~À£U6—#žùª–‚â˜ìLÒ¤–²Gic¬.Ô1Î%é2W¥$™)«ëaâ×íx!Æ.0Ã.*yYyo“Ô˜Èo@Ä»öh¬³ýN]Úx"
+•/4•ºž*Ñ‹¬*¤¡RΩօ(£ž‘µšœÐX¤·ÓZ7e§:×õ€¾˜Lð½}Ùßß?¡?Â>ý\ŒeŽ=ø±ÈÕ´P­¦3{B•È2UNc÷: ýþ‘,VVŽj¿ãu&ëx¬-ôÐAuOFç*£/„íüaâÔu†L¼%ù‘6ÍÔ¹9§Ñ$×ÂvÇðò7oÑSJÙ{@GÕý	Ö*ã\N ñ`åSw`þØ~hãR™ç¦)Fû‘{‚Ý»??¶yi½|á׌Ò\s9#G£Ÿdm”.„l„áÑQß=/E$«2>)ð™KaäR`ÐîPЬ–“Ó¨öÃq©­4}©h¾‘û6LÄhï/œ€\D£3]T*—ÁmíYÚ‰aÊ[QôèpÿýrðÕàèůôÍÛ›¿¤ÿµnêT~„pûtŝ
+fÖVƒ$1“~)mRÕú¿2µ&A>êÜÄlN¢ÑgNd“­žÏ0!ˆDqxœlˆá¸NFaÖ€¨Ú=:9ʐø$Ìô‰.-Íu}kH•Fe’°S5®õ@á'5F²ÄR—±±¢ÌDÑD
+ÛÔ’TQ岐¥…[UI—x¨a™ æâ¾BÊÉšŽûǤkK‹q UMïU™a‚<z«?¨<tÐ?Z™µ+ÊESåÂbQ±×cÁcš·Æñ±ŒÕZ8Eø 
+ê	ÏBô-L?˜½zÔf©®Lh(Z|]
+ź‰Ôª;é¼ÝOu.—_oÚ¯ì}§ØvAÙ¢u:óëÏ—/Ý2h¦LX21# Œ"èõõyì‹B®RYÙ_SÿÙ,(“w2ו̂°¦²šî<¾ÐaÿˆÆÚ¦dB‘Û_ÊÁü6¢ÅG•J
+efZ#[Þª™PôZ|Ð¥S~Ë76u‘–¢„	D#¦Ò¥§yWxTÕY\‰Ú.0ZT¢T•†æÀÜ~zåQËHASÓ«±n,½Ö÷.â2	Ù9Ö¸¯ó™^Ù`>QÖ ñ7£ev8zçS'“…âCjòð„ç\-ñDÞN“¤0µsR›DÎ$HúNkÎ~^СYHÕaُïãà%†‹jaá5³¾ç?ÈÍ0aÏnÔÐÌo<´vtÃsÞuB€ZvÌ©tF@¼;`…A- %÷¶N‹Ê×bƒqV÷Û~Ž
+¦‚'ãt&Ó[ ÏÆùÝ0ñ0€Õèö…	ªqÍSϼ Çtp^WÖt’J¥ŒX˜m¹á­C›²‹ñ¥–¿5ŠõãJφ9™¦ªtm1Þ	ãÓ }n1Ãëç˜`ÒÀ\¢ÖÕÿžs^„ð˜yö¤lÑ]ä9£. ž ì1®˜ß‰r»ðzÀÓ4o˜ÌГܞ8ZúdjOzîµ%Éý~Ÿ?:¼á èi†jÒ•ÇÏОó€ù%ÊI³n€¹²3:óVŠý[LmÓȲ‚²‹Q¶€’îp(cP”Â.ävùLŸ,b6°ÌÖOåÆȏ­»Dpir•ˆç0}ï­ì7L:ð`„¹,(‚l­U„éJÕêÆù]$`¶Ér |éÏpl)hðnS‚šÞºüëòŠ&à^A,$(C§ˆ¥‰4•Æ(æv®<9. hû †àkpñ€¡¶œø
+ ÍMçÐ;×iÃtà­­?6ý#Ã]¡ãáäNÔÉ|>OØÎa¹ñ§í˜Ç2û–ÓvÅ=Ϭvå‰…Ès*Íqϧ7VVHï]þ|ÌÖd¨ôc©îã\ݶv
+xÊËXXìm	ðÐŽ<h!eíŒvÒŒ¨´Ó”TEI%ì,±:኉
+˜´£ØÆ`ç}ÌÚ)îhý;µsgúÔ½%sƒHŠå½LY…Îèù³gôûôï“퓳“_d²ÃÄèïýtª¢íK`ZnÄ+:×Z—ÓÑ÷®­àÎνº-ŠøL£TÃSfQ ¸ÞRÔnñ×h]÷ˆñ( XÊUÞ•Oç{ÃËÆ\Aˉš6µK‚p˜ÈÁ¢‚ëEñÛùâ­¥L!náP&¶–kƒÓÚ%¤^f¸Tv,ËÐÙ7—dÒZUÖ±˜‰ƹ(­ËAÖ¡¶Z’:Rë j±²ýLÜ-P`@ìlGÔ€"W²ÎېÇÔÝËŽ"Ì‘Pö—ýý=ÔŸ•ºÓsÉÇïðWƒ@¿ð
+¯\eÃàø—ç lRë‚ή^}5Þ:†]N4=Z㱁(%«J%pUVÈØ¢>˜ü¬i›Ñ‚î¹ÛLÏ]ˆHÛTÞá\™Ìªe=GêÁœŽû±|þü¤dŽ/¤¥©,‘ÐŒÙw"WÙ¯K‚N]3<AQ¦mÎ`\£þCbx‘Æw1¹ªUèî
+Åq‚ÿ YçVÄ5ýÊø*
+ˆó¶ÄVa+›®QγՏû’±¨7ªÚŠƒÛRx‚^£µ™WÎgñصð-·MÊ|ncî¹ÌŸ™ÞÅm9èØuõz"çÀØTz
+°·!à[ÁÚ4¨2–­ðV¥µ6zbé½®³§†nåb¬ôQèj›6ÖlÈ`®#ý¤,»æxmÊ«ìNÀ£™ç¢´$É´‹Æ)ÁfÉC>vñ­‘áhóü׫q›0ŠVc‹ð”1¶Y AÑ'ôãÕè½l"„íûwË1á[ŽO]b„!—K“v£§[ùà&…?¸|`bŒ”q8–
+o?‘M®pBl’Þ™ä%ßÑUÿQÙéó¯^ïG#dþN(å@ÚZ¡
+ýQ&RýtÍèñ•AØ|«a ¾¿±åTÅcU&wJÎyïëvŠFþúÀŸ;c¿p…ô†?œ¢ÿ‡SÐ.9|‰˜ÊNŸ?òPõ'“¦LOýÞ8C3uR=ÿðúþé­¾|t+’tæµå¥KÖÓÝKü鍿ztãÐ/îø‚ö[#Í24ûŠÂ{®IwÊʶA¯FˆŒz õÔÔW^ßãwð»íØàdýmW:	4iŠdêþq`¼tO§ÏN¢‘/¯N˜ûêûi¤ÎG.Q–©¨ú23Z9 °¬p)ç桲×h¦üíý%zû)A3ŽÇ°0ÜÍp‘âöt«®[/gŠÜŒk_gØk›ÉQÌ¢Kì¡¥)Ÿúëžk›Îsæs/£‡ôG­Ïgõ]Žvv=á#UíŠõèÑŒÁ©ØӞųKˆÎ%ó­q €Œ¡¹,\›`¨hBS¸ðá0Ÿko˜Ÿ¹ž´¡®uíáÂ]ú9§(OŸ¾5ºv”.ˆJù¢µcWyz€ÀñÚ{KP‘zÏáPš)Såbáo®./¸ÛபíNfrñ´fRflÛ"zGC¨¦ÙÛìK=­äUÜ…q˜y†Ê‡Án)L&¼‚ ¬Eú^¢˶Áç{a¶ç„¯NýôZº«¾=…9ù‹Ïû%›uÞk¹Ò † vÐó4$è„kº*@-½°¹ã>¼•Úžpx³;ö©îYœ	Ü¢uc.J"}Lý‚0ìá_»o!¹EeµÀUˆ‹O…P|…ïQŒ¾pÅÜ£w×½Öû®:},„0˦óo /÷s]{Ã•{öžGeihyëÖBh{!ÃWVî¢|æão,,·9)±æ|í”rüÜÕÕ (ÌaõÀƒÈ?¹AP¨~­£‘»ÆLùb%\-ä‹Ž\e1â{úa‚R{¤
+ ^¸ì^ªÉhî¼X*º¹6´7›­pŸnÿ»u».T”éùÛ/.ZaSÉØ_b©šq®Òe!»@?Æ
+Cñ)ÉMæLŠŠ/Fa[âeMIÐXd67¿1}ÎE9þÂêáßâ˜Îüþ€®›’^!~鈞
+‡Ïéââú†0;¢8óg³Å Ý"bé
+X<÷€j¢XÊ{$Úwðêá—ÇÏÏ^@ʍÿÕmE ÷•LtBq.øÓ‹rê.VxˆÆÿ<;Lüoà;;ÿPK
+      €~1              includes/htmlarea/lang/UT	 Œß¬AT]­AUx õõPK    ê…}1Wz#~N  à    includes/htmlarea/lang/b5.jsUT	 蘫A蘫AUx õõU“ÏkÔ@ÇÏÉ_1ÌÙîâ¡ +‚ZVZ¢(xš$o“é¾Ì„™Ik•ú¿“Ýî–mw‹?ZAJ<¨â]°P¨‚(<9›Ín³9
+ù¼÷æ;ïû^½NÏ_¸I|)´aÂh27G".@¹Êùy·^'Þ:¹ÆV,ÉP^æ€b¾á«`¤D]óeì^¿½¼tE«%/‘G®ëØliJD¹ÆEHt$SˆãÿA°È7R[ÑšKQ¤sc!â(#ÕØRŠ°ÔȘî3Äu‚’$Á4ä‚ aÊB¨¹ÎèØ Ô›§ç¬‘LÃÝ°²Ç“4ÈÙGwޝØ8Çá†!÷Ï}þµ$©@¡mM	iw÷ -ˆ6Š·ÀDJ¦ad)íÜzödÂROûŠ'f’•ÝÙÿT’T…ÑìnIVRmxs¡Y’öé‹ø
+Ë{UêÃȃFI»³¬J£"y’ÛªÒfŠxV9ïå­¼?Ì‹©ì+!@®Ë»÷ö:ïv–wËÌr:\ªPk``UM›G?³¤}¼
+½£ü˸»b&€Ðüþ>ÌDX{Á—(Õ´_ßÛêp¡ý­ ó[3´¿8x5¥‘Tü¡ÖA•¢µ‰fò~éƒoÓ€µ¯Õ(µmf7võp§Ô¥AÛÉiLéˏj˜‡ÚûñtüêÈÄË`2öÖ·ƒíÑ.ôO»xp¯ˆIdbݸ)•Óî¯l¥ ̳]«Œ"=üÛýM&«4¾ 0™Ö×›Ý1vUlKíŒÓ¶::Ùúœ!u
+wã¢ûPK    ê…}1Sþä¾õ  Z    includes/htmlarea/lang/cz.jsUT	 蘫A蘫AUx õõmUÍnÛF>Û€ßaÀSØ
+ €£¦A[ŽË¢!ÑNí¢(Vܵ¸âr—Ø9R“È!Pä¤c¾öRÄ=Ðzž¾BgER–Ü
+‚Dí|óÍß7«þúûéSè<ÛïA¬¤±DZ³³½³‡ÝVïM‚xìB»wvüïóèho>@gîíïÿbïùÜr6Qº	o¹æÐ-þ¼Ù…—c|êæ§ê»«ìUÅ}ö!ê·zƒn+
+ûƒ¦?\ ž5à¬Ûn
+ÚpvÁexÞ‡ƒ°µ"èôŽBü€è¸
+­×áEº^»òÃ×wÄ‚`ÄX 0!‚S`ᥚód-ÊóU”¨	QçøXÖæs«ëýaœ_ƒM¸|Ke!WÆð¡`»û˜¸Œ…£cc¡“öÁ15ì®enü3“±¢\Ž–l,Æ숞6žøöG§Ý–f¤±œÊð»?ÜB*›0¸V[éM¢œ 0då9L’ŒÁ
+ÇA8±öÞ2i¸’¥?·h»8Ã(ri ΪŒX!¦ ¡XŽq	‚È‘##Ö@gÿ\Ia™ŒUJXž›¦Onkk¨mÂÃ+ˆÜýgyÿÅ£·¶¸ÅQÄöàÄéYq;!¥ÙIÊ´à’UˆàLQ«wL·%ÂXÍSf­Ü(izÄ⶘§ÚJgW 74±æ¹­i•@œ
+eïkHÎô(8VúdìŒå×SÁ®+ÈÑj"q`T	V§\¡bœ1Ó>¡ÁábRtîù(YÒ¬³äš<¢¹vBü'òi"KœÒØ!F7UR6ÃY×íÛ4!ÕÅ|q—N+gg)æ¹jÿ²yÔÊm5¹a÷kVÔ‹•ð«]Z_=!·&«ÊH¸àv
+TCÔŒÐz:x7ð™’¨íN:¸PTùb‹9Ü.æºâŠQ÷–¡Ò2^p!Ôâ…«hJfu†iË3Ôfs3ÄÊg,]‡Y2`xäDêªÄl&2Ekñ•íÉ¥ß ¿‡%(W9J{RWØS“â+¨T*(+62DǵMB°ÅW«€ä‚§$æ•u“0‘¯‚öŠy®&÷_(©‘¬DZ\a®g;¸š eñ
+õ1«RÛwmÀ½ð7”`Ô+œ¤uhÊ&8ÌIêÆìÁñF1žy:ΰÂʪòéÕ‰BYàPIÈñ&fëݨ& ñcy‘µø·SÝ#JƒÍäNJ¦ &2fbe®´[Ì7˜23ªYΈMÖx‚†7oEµŽ~;
+Û% x‹)ÂüqxQ|:…~{ñ­szÞ 8S³£Ý
+‚"½µ©‚_^¾úr­ _êÄß?~[ß]:ï:oË„v¶?âÿÆ¿PK    ê…}1¡Î3f  ¥    includes/htmlarea/lang/da.jsUT	 蘫A蘫AUx õõm“ÛŽ1†¯gžÂäZ7¨DAB]±°‡½Ï4îL:ždHœY
+Ú·Úgê3ì%žÃö°¢£ÆþÛìùŒv6VÐaˆÖ;Øø 7´¨¡{9{Ï`Im¥áêˆù|.&ÚEÒŒŠtø¦ÿ¼'¡Æ™C~׃Œ¡¹‹ ²ktåðWÒì‡TbÐOò|õãËeŸuvñâÕWxó<믨PŠ"ò7Ö•+ŸHrâh·„N77–ÅÁ0ÛFÀß,‰¤—!ܲ8‰úˆ¥Ú¾?Ø7šíZ퀼6ÐR*­Ò®LºÄYžõ ŒVO¥öžØ¶q!eeYáÉ,àøSŸÐ–e–µôyt©ÏIdí_rY‡“[ýì
+‘–NZ9Ù¹
+>••pêª;A`dR×Á¶üpÏ÷½“ˆu°žVÂŽZí»sb›"ÛÍŽp3×¢™äéíNy5±ôµ|”áÜlY
+¨ÕýöÑ›D4&¸´%B£C)c2">HÿhÈÆ©†«VbˆúNy*Ñrîœ|̵ÉÕÌ"Ñxkb#….ŽoãCc‰5È7ìêƒØr<ò¾|LÉÀàÚ“¹7:t8 …^×gÀ]–A^;™ÊûÇ;é($’P+1ÄÁ ‹áìH­eúå\W©¹dÏPíÚarê©ìˆm#cº8¥
+‘
+ž0¬:gÄ‚£¨ýâ5Þ<£T$띍‡Æ[ßÊËSgêÚÊr
+g°0xN"ùÉ6¨«æ°Öc*¤öl[VÛ=±,Ë*zË&ŽYÔÒu茌ª<°Ê³ÛüöuþPK    ë…}1Õ0œJL  r    includes/htmlarea/lang/de.jsUT	 ꘫAꘫAUx õõuTÛnÛF}¿bÊçDnÑ—Âu(ˆRŽÃVà^PKrÈÝh¸ËîÎÚ–‚üU¿-ϝåÅ‹VÉ9<sxæÌžœ@ƒ¾UÐã,Ô΃æ–V<|¿ü^Š:­à	UÀìäD±W6b¬ ØÁŠ¯Îo_•‰ÜRñyB±0ÿ@Ù
+È”hʍGÀ¿¢"`×÷‘ê›=2&¦í¼{¸ïžžÎúÿWýÿ²tíy–]l®ß%‘ËËï~x?Áç,[$ò
+¢âÑØ‚v‘„‡ç†ÐªáÑ°–Ÿà‹4éÚ¿nXŠDéD@²CEv­+ÑÈ©
+:Š±@Ê6Q5¸Ìéòò
+ó"„#6]8Y‹Eá¨:…Ã/‹Ì‚[,+±æP˯¢Œá¡¯E[¡'cq,ç­8رÙöt³EÖÞÅF,}©œƒbJo:žx.Ü€‘Yñˆè„ø€É7ëâSlêa="Þ»•iƐñØiDɨEh’ó›\yƒ~^÷¦Ñ=M~‹òòÿÑÔ‘hhöš\¹
+Š÷}Ùyñ+2aÔò>¶-¦6Ñ6£ssL¾Šõ^¡&„=¬‘T"ñÙÿ|mì>6i¶„b½pÆÎ`ǸÆ
+aÂIZ°täüdõFÒo•/°¯kC†ù…IV5¢¼:†9oöÎJ6|$¿Llz€ ΛVJúeD2‰Óq°»®OÌD{±ÁI¾(dÓJRGC,ÅaX4b6ªñã¿`ie[WM™”ž²†píªúzç:	SexúÂu-
+7©_ëÚŽ\ªÿö"ÿˆz¸OŸ!šÚ=Ê¡Òúª‡ÏgñV#k94“Ýó2\6r¢Áš¶ÈÍvï6b¹mÚÆi‘œÌ÷…J;u–3•}œB(µESM×ífW®;ľS²IÇß¹~¶4[|y‘dPDfgÇó"wÛ|F÷áª'ÊKeK¤çZ¾*
+	œžˆ²Eš‘âF±>"ÉojU
+$›õ/›?¯?¼Ye93ä´«SăةӰc]¼F‘÷(U„ßÏÎÿ€»R+âšTê±9Å¸ÿõîòþòç—ý›°ð(€€d—IaöåÇìPK    ë…}1ooã]²  ÷    includes/htmlarea/lang/ee.jsUT	 ꘫAꘫAUx õõeUÛnÛF}–¾bÀ§ˆe¸@WIƒªŽ«’%C¢EQ,ɱ8ær—؝•ë´ùÓ>ú’§>tHêBµ‚ ;gΞ¹êô&gçsH­ñ¬û~ÿôf£ù‡!DˆÑkÏ/ï'õûm|yrÁdµ89?ÿîû“³;
+œ[7„kå˜,ákx«t‚Ž7¤õ¹å⻆ør±„x9š¯f£x±\
+å¬>8ÀÍl<Záæ6†ûÅí.óxtÃd~¹ˆ¯Æ0úiq7†Ùd>nÝäóbШ<ƒ‚Ò”–Š4¨,sèý«ýß—÷/àVÛ˜jY»8ߘé8'ò5–¡²ÞS¢%¼ª¾LªC†rqjË
+ï]ÅOdIF=<ÕÏhR›‘Y7d˜Š2垯úý«øz6r¨M~€?ûýžÐpŽð`µ¶Oµ“ÏmÐ$Øž“F£J„'’܆Á£üƒÑx²¦q'£ÖµGð˜	•Ø–Š)UZ?ƒ¶*“@ÂZŠ¦•YµÆA¿W?nK/BØZÍTù¡Èêõ«³!>э*¼àz=bÉ|z°EÓà<Ѧ1“¡ÓdpkFZ«Â‘ðÉPÈ”gGrîlXç‚Œf/	ýŸ:ª¸ÃE¿ÕáC…®ˆþÖªc~žéáYãÃÖü³µ&«ûÆ«"hì‚R©'ºáT /ðãh7L;L¥œtß1è!hÝÞ¶üúµzl€mÒŒ—±N²ƒ™&¿Õ4ÒK.¾
+æÅ/U¥-š6+Ò™ÈÝç?º{ɱÖÃJä-Ñ¢Uî¿ iL­®ç¹]ŠZ‚Í‹kK™“&î ¢XIê håÊB OÖHS8ɪ´Ó•øú@é:
+4•¦g”êíeÑŒ¼0q‡‰JiËáÁ\‘îšY%ºk–wÔ­R.ui³]ω™³SVõŠ0(WY[¥ÊVÒ4ñ.¤C^,•ÈªÀV±J$ѝˆbTÜã
+›s[Yקuµ¿|UQQ kŒ,“*Ő1l¯Œ¦äeéݸأ)»ûÂudkå©Hb”)(mbDÖ©ùBE+,µÕó‘ëÔVˆ®õ«DvÛjÄ„¢~ïs½’À,ÿí*ˆl-¦
+G”*“J	ö‘ϬMÂŽ¢ôë­ûâ¼Cо7ñø—ø÷ëÅûq´-‡«eƒ±1“ÃOD%ùÀTÕ‹L¨ª ¿¾}÷è¤;U)Ki›.øx¿š|œ|€­Û Òÿü¦ÿ/PK    ë…}1kÉm7@      includes/htmlarea/lang/el.jsUT	 ꘫAꘫAUx õõ•WmoÓVþœüŠ+*Z›j¦ïECбh¥FCÓ„œä61u|#ûZ6$`ÆD'u£š„64¶}iemVÒ—õØiÏ9×Nœ&¨ˆâØçå9oϹžžåwgæEUù¡v|‹ÓÓbîÜüE[XÒ³&Åìüù…eú}eñÓ©ñ(_^˜š™yïìÔû${.Ò
+Øâ‚Ûtuà†â¢'o«pRÔÒŸÔùF©ªšÅâg‹—æÎÒ)±×Ä·ÅbFtCŠ%åyjÅõë"l¨È«‰Š4÷]OúNSŠž"-J7B!oj釮òYÝÕxèy¤…²Sp"­šŽv«ŽçÝžrj¢åEuמã×#§.KÅ]¦ˆVÊÓn+´«P¨(¯f‹ÁÇŠˆ’ñq|w _(¸Úñܪ“xÄ›ñNÜK%"¿&Ïõ¥Iü™Ü……ä^܉ñí%ßãïVßfˆ”-KÝTToؤñ”¬å4r²Q%¬nK÷­?»q;Þʽä~*Ó’ANjœÌ(ÔîÒ-O.e2pœíäãÛñ:Üã·»¸ÚÌ«U¥¯e`U{Fh“P9Ϋn½Á®Æ¨¼ÿò¥ÈóìAŠ·aàÅImVQr.kžfÑøvü
+¹ÛëKEþ°œ¬ÇÉj¼o;ÞE˜&7h¸´5þò—<6h7ðß1Üo§â®?$ÍÎ×ÏÞxq4ª¬*æ'ÿ;¹—ü¤ÿÒ/y‡Â„ja"û©rÃõ\SRþ+ybº5Y5Â*po+DÚÑŠŸSIãS¹Þ°ÇmVªbRµDÿ.Û)¼
+N4µãc´ù6U`ý¸oqgÞ\?”v›˜2{¬âtü’š‚†¢Ýϐì&}?gK;ï5¶z¢M
+(Œ†nzMU˦ŽUèù¾V¡dNÃÅÝä‰ Nbµ–jaZj®î'”j½Ã÷Šâ4»@L=J“°4&_Ní’ãÓ­{éCü£6Ì$·Ò^k€ñgäamÚíӇ͡£ÀaÙëp¹¦ƒŒgÔ0W­sÀm¸ì2jš\`é&«¸ÂJ/BÔ‡ÁNSh˜ŠÖ6r‡kbÂØiîÌ݁Ó6CI0C at EÞçb§­¥Z·Fs2ÓÁ‘k9¡–öI,¦G8¹ÆköœHÉʆçºÃ´µ–¯ag˜Ï‚¡"!%»9þÉŒ²9­rù£œ’¾…UÊùˆS«X¸Ck§Á¶ŸnK-[CyYøœó`U¿Š=5h—uä`
+ÍÀL”Ùj†õÔÎŽnXy"2{d—õÜZœýjñú¥…³V¶Ú!ˆ ç‚ž—„ zá|÷xÒ©¢=0Y*
+ª\áÕøÏÚâë?þF˜](¨IÌàtÒŽC›§^XóêµËå«å‹%ÚÃâòìTU—Ã)bÿ)ì0)}Ë.Xñ¯äˆò¿ÉÚÓàwó‹áu!á[`\ôwZŽøLY¨Sô˜©2m2_j1{³V•Á¤°Ä; ‚ùXñLƒ{ûCf•C y 2:JÃÁ/‘"KWµ£4®“
+á5VØcÎ&N3Ciج'®bø¡&ÎÞ‹ãéó)pF Á‰NñÍ^ÊM´®(Ձ¬(¥K ßíº:¡rœžÞ$å’’“Õ6~?+Y™û;ƒÕ\ÇSuî\1ü±Î›voñ±GšzrÄl™—Áô%Ué@Ìa3êÂ~óíCámÖÍm³“æå
+N›T1q½‚äò™Ó0„ß±FŽMf1ûDa`bŒ#åK1­p›-4]ýFŽž™ãN˜àVØÎÑšwÕƹÙœ–Îq.7˜º7i'ƽqfqŽÞβibøã1/ÓûÀR@'®‡Ò[:53lðÇt&‡5GÍ/:A]jûmÛ­1ö\íÁ_ú~qæMÜ—<¸¼ArÊcì«V?&­Z§'Ã؁’Ç†TG­_ùrî­Ra¬³Ö¨±k*Mê¿5ð$ŽB½îáý‘Ž›¢¥\¼Œ
+­¬*Úx‹Ï]½l™ðHÓËVw°€ÈOõ*­€]ëŽaÇu}ò„WÃè˜ß[ñÎÅÿPK    ë…}1Ú”ðÍ¡  
+    includes/htmlarea/lang/en.jsUT	 ꘫAYV­AUx õõ•Wao"7ý~Åh¿$§& «T)ǵ•G.ôD@šF½êdv
+ëâµW¶÷mï¿÷Ù^ÈrMu	:E0óæyÆž7öu:4|}>¦T+ë˜r¶ÕêthÔ¿ïRÂUrJƒqònèßÎ/ÏÎéÎ&gçç?¼9{í±½ÊåÚtéZäLÐûK«Sʝ+»N¶Ṳy;ÕE§6×:Ð_N¦4ŸöƳQo>™Îº°y3Ñë6ÝŒ½Ù€nnçt?¹R2ž÷úsŽ/'øCó«õ.&¿h4b>'Ì‘äÌ:bô™I‘/˜Ä²Ìpk_í—ø~¿Ä|zOó	Ýâk¬Ì§µ«öí#³X’Ë…%üSÚQ©­ÉO©ôr*•UƱ0Ê,¸rûPÄ!-ì«ã–6þ;W©Î„Z2ž"3f¶íW­ÖÕüzÔ3œµÃiüD·ZG q9§¥–Ro|6°’-x´É+8mN rÔþÓp\Y¡UN)}Dey*C¬rº`N¤LÊ-IÍ2R­„"ÉÔªb+Þnù¯u §µt¢´]¤ut´Ð2ëÒã'¹€¸£#á°óé£/CðU*ãF
+Åkwr»3·uF¬¹Ë®V9 ɬiˆjaS#J·c˜íµ»ä¦€{o€?+ëÄr+ù²ü
+4‚¥‰Hq†Ütˆ~°41F¬ò@³ÇL½¥	YVR.t	K at hƒÚy&…­S™D`©·ë“\ –»&Gž!¯ýv'ïxjBG•wÄ#Q‰ú/mÁS-½Š#èR+G}o	þ\Háˆä‚¥ëNFeM”6âÇ‘›J☓«½¦°_Üqûº»ËÇrãèŽ/P™Z×I{›(ЋÝ¨s
+í`‡ÞÑ :¶@š{KLʲÐÙ®ë(™ëÕJròz£™®Lq¥.Ñ.™p»J2³â4¶€aly£ó“ž7ÄáÀaPé&ç²Ü/y…ПWpæ Uœt×Lú•18Ì‹m<öW(
+šÑ%[ä
+µúa—:h=€Ñ+‡à)ÿpzPHXsÉ]nøú0|…)AË›;rã
+´4º TŠr¡™‰£Á«uîTƒf&‘w‘Ódö
+ßœ~Tê#8¸<Ú;“ÖÑ?ŸЪO‰^'yO>Ò$e*årïKúñwÍQØUÃ\Þ`ˆ¿Ã|ðÛüÓõäÝ º“{]3þ ï"ïjÝÚ8 ÿñç?(ææ3¶˜ÓiNhÇÿ¼»Ÿ
+ïî߷Ä=J†ƒ3[¥k{æÇÆÆÇð¥.\þ0LY	áPŽ™Rñ ‘ä{Ü_*k¥7aµ”aâSi4”PØpG@ò˜bŠ;<”P-7§”Ðwž.«¸Z½€ôÊÆËkƒëKªc´˜<h£Íšñ£V¿E8þ€q+pÁqZ1³€D÷ä–’mOÑ…(]/k ÕSYT™¡svY¤†Ùœ[¬2\Æ6¶[´Wá뼃t€¢7»U„;¶ô™Üi¸8pµ…üvŒ]Zqÿ08~Ï7G7F»º¡.Y%Ý±Ï 2Æ«oD¾ÐÚµ?ªªæöUæì3ÇEŠ½Þ0l¢/þ&> Jÿ É!MØß¹¼¦<›3Ûx]7N+n@{×{™`R¯vý[÷%½àÓÝwsèÓÃqÆê3žˆ
+lc¾Aûøí¦“O¼Ö¯¾E¶§¢"VœN|sŠ¢Äë@¸gÑ=è îçïÓžn7&8ó2¢ÁÌ?À–Æÿ=ù„á¸üf1žà‰¨8`ü•ãº/Il»¨H!dzR?Ù^=‡ËS|¹t¹ÏÒéòÛ¥E®¯£×ítô¢º"Wˆ:ÝI°À;ŠÂS,(
+N¼ª1âìxü'ºKBü‹£ ÈÖ—·­PK    ë…}1rf[èË      includes/htmlarea/lang/es.jsUT	 ꘫAꘫAUx õõeTÛŽÓ0}n¾bägÔŠ7T.RÕ¶hobB9Î4™]Ǿ°tÑ~ò>ñLœ´›@_Ï9Ÿ™ñl›ç/ÎAYãƒ4ÁgÙÉöìtáPNð~gÙd6ƒP!ì¬ÖöŽL	¾²Qc'FÖw0½ñ€¿OÖ¤íÔºÝ=œÊŒÁÖ2’ZïA[Y@£cI´4e”%N³Iû9^<c!ÁZ¨ñs–5™äVsxú‰s,ÉÔÉ„ÿ5©'X,£óô³£)Ði2Øãâ*æNîea샣[•³±¬˜"¶RUG0æ^9jÂ`ï£)Ha7è†90 ÜDh·×¸ë	‹Vˆd?øÞ°¹ÿ	]!‡\…& k…,ùËI7•UÊ4N´B‡,zÈÜE­»#ߧ ;ße"ãÑëØ,4ù^Ø)I¸à°‘½ Ž͘Û3Ïí˜Ì­À«p¬XĚ׬ðŠ«ê)G$+ò5™Hcw*«­;ؾlP †-÷ZW›Š4…m at zkM_Àî•utoYvQsˆÓG6NŽáÄU<	Ù×ÛîX±I›ù
+k£e_Ñ.!Õܱó1iÓÆÌ€d®ÿ%m9Öݱ
+µ®mqèJŸÐÁʪd›4ÐNg¢6¶á¾*(nº¨M­®K™s"
+’ÉŽ‡ù®BÝO]ìc_ÁÀÎRÛº²;G¬¹o´……
+±wˆGÉŽ†p…¾bgºÜÜ#cô>j¤.U+âQ£Rô§3NÙf?³úÕHpx×K,e[y_ ð}›6u#ÞäE6yh_“<†À_÷˜{+FÇ°YMèD(iê#A,ÓšÑ>UíË>Í¥Õ ‘øûIlן·ßÏ.Vën½”mM¹âZðb
+}R›[__½ùt”¬sJ“}ýåjs½y×f|È^fPK    ë…}1º‰.6”  ˆ    includes/htmlarea/lang/fi.jsUT	 ꘫAꘫAUx õõ}”Án›@†Ïð+Ÿ«X½UT=äÐ6‘Ý4R¢F9®alÆ;hwÖ)­ò¶<CÏÀv ©ê“Å~óóÏì?,—æúý‡“³b„4½ºÿ¶¾ô`/†ƒOæwš&Ë¥‘Ì–‰ø	Ý΄’#fãs$p¶ó„¢b.öÁÀOÝPŽ¢‡D}EP¨”76
+×V0·D­!¶…i(îвní.Ò¤ÿ›™¸Å;5"Ì$Ø„Lm%Ɇ©ÈÌË/Y¬±´F‰J'	Š%̳Éù*ú€/@txBÙ	¸$‚âÁÊ	â±)=Ç]™õÈ#ᜈ›{ld"bQ•«€G ?Az‰n
+ìcܶÛpoƒµæ`Ô:!ã!:+S6'à?+J7=õ¸+©“kÿÔÙF¢Ù;k¦7ïDÀ{„A¥“ÅM¬Á3:Á	Ý+jAˆ•U“©)Ô}6½µÐu&` çÚpl¥ЄRìÁ)ñ†Ô,AÎÄþ|_Xm9sèüh®DB™0}³Ú¿=£û’=þÒRK>ôöX[Ùá¶,×½ÐnÐUÙÌúZŸTS%¬5½ÙYţƈÝÐPG4ª”šj.N¡T¢ßI³îJsæÌÃãÝõÃãס áF#V œÛ»‹Ñ눬ù<<­ÙŽ~²/:áý™Ò‰Œ-ù©jæ»uÓµÒ™ïåHtÁõŽt{Ç×*ÐV­î’3Ò¶„§ã¹Ê-øE³XÃH3Ö#
+4:¯,Ùÿä³–†qVUŸd«•§%͹içº+nqN56Ì&´F]-C*	Mû§èH3—&Ïý·hEô³9~Š\-æúWí¡«B;è.rër ÅˍÇÐk¥ÏÓ¿PK    ë…}1F™8ê»  ?    includes/htmlarea/lang/fr.jsUT	 ꘫAꘫAUx õõuUÛŽÛ6}¶¾b —6ÀÖ‹ô)pÒ Š×»qêX[Nº(Š‚dz©ð’Sä_ó÷+:¤ä[Ò†-Ìœ™9œ9C]^Âôñ“9”ZYÇ”³Éå%dÞÕÚŒà•VÌÕLÁĐ÷ží
+ÃhøuŽ.ÿ¸­P
+Ëúy"¯ó‹l¾œeE¾XŽÈÌ ‡p;›dË	Ü®
+¸ËWçó"0_çôÅË	d/ò7˜Mç“.Œ>?2™uÀà“‚6LH`œ´öÑ¡ÄχÅâŠVô¸*®ziMæãüj:¿yzÌ,6àja¾J;hµµb-ñÚPA¨RzŽT¸ÔMƒÊB)ŽhQÇZxϨJÍ…ªb2,‰3Ûá£$yY¼žeÙ0öùø;I”ÆÕ-¥~A¶Ö^rXcgk
+Â;¾³€*+´Šá‘SÊá-rJe€y§æDɤ܂ԌÓA|%H¦*Ï*&ƒð8‚tcÒ"â´–N´vD´ƒµ–|ÇOzc˜%Ü` u¾<úÒi0¼÷½^q4R(ìé’N#*µ‹^댸GWí«šéfLïòk[ѺCàÞл[4' rðÎ['6[‰›Å²ð*æËOA%ÍM¨?¦§ž@ï3¢ªc†cn´pg	6^ʮʫh]
+mèðÈ¥°=‡¹ovF“4hV}{Î1é­'}tÁÞqbshlšùª‰DIó`Ð&º£
+u„ôJ4Bù,µûÛÇ4ô¸DQµt¼#îµÑŠw mÄ'­hÔ†œ¤š5áhîr•¤n‡4ÿûQ/ew†˜yRž@Õó·hœhH…£o@´hÁ|sl-¿ƒA´2ßQsl4ß+ŽzÊ,EÒЮÒÊZíM‰–/â[Ý’v¸pûóf•aŠjß;2ÓÑ#Ž­i$';fÐM7PÒœ‚ikj”íD&BiÿmÒÐvš-fW>]:Ò,õÄÁíWHŸ­^¦õœ6—
+%¾º†Êƒ¤HLçðnH ÿ/ÏÎÔM»ÉíNâ	N·ÛÑ9®ÿké:ÆÑNYŽ­§ëžÚp5Ó£pcÓdð9Ü6kï½gºË&Õ÷éY­ü·˜;-™*Q¦Ç¦ÆN˜}’ÆV}‚[z¤HÇ5ÒJtIŠÉïÅ_¯ó«IHßhoáŸp[£‚ œn† +G«`ñS †¯üñìùŸô6 9ü€JDYÅ ·wËéÛéÍ0I>?MþPK    ë…}1p4öO  Ý    includes/htmlarea/lang/gb.jsUT	 ꘫAꘫAUx õõU“KoÓ@ÇÏö§Xí™&ↂxI€T8ñÖöÆÞf²kí®[
+ê‡áÀ‰‡ÚðP^ÐBRÓИˆC/” Bœ*±±ÔñÉòoþ3ãùÏ”ËèÖùw+¸Ò„k…ææе€qª(ºqÕ.—‘³Œ®“EŠæŘy .3®©$®f‹TªäŠº}óîíù+’’Ršïz`Û–Q뀢ª KŒûH"94û΀rR§h‰i4*-(DïiÊ<•3m ÀX)ê™T‘H‹:ÑÌ% ËñP‘Ï8Âýˆø´d[ã×
+¾ƒÏ™FÆmjªŠi˲^=xmôñÐÄYÓ˜{ÆpÜÌIÄ=*ÁÌ%‡¸•ì}O‰Ò’Õ¨¤ˆüÀP¼Ó[=°ÈQ®d¡ž¨öÖ›?sRY`xg/'‘Ò¬º´š“A{´Ñï''EêÒ±•œö†£¸H%óƒTœk‡ûEZ Î2''ÃýÍnk;Òü%õ€©¼öîjügë°õ(ŸÁ,ǃojôLWÓááÎßøao5ú$›.Ÿ	0ÃþñL„±—º„œÌkð.}>ØyœR‡¸µÚ\í5¦4’ÝÜ8(#06áÝg›ÝÜ×,¦¦Æ¾Z&ÅÏ·Þ>éþÈûRTjV7›S™ÒOxP š8P ÍãW¿³ªºuáMÖá­¸Ýß—§:ëGiL(Bã¶ÇtÞ9~ù~-s“8fj…Uį¿þz&§” Î,ënkã_J´93RsYbœ˜5~sš±m­Ø+íÿPK    ë…}1%W{`I  –    includes/htmlarea/lang/he.jsUT	 ꘫAꘫAUx õõmUíNÛHý
+ïpå_E¢AÝ_•·[m–†mš 0ÛE«Õʱ‡xÊÄÙãͲ«¾R’Q@$y¡y=ã$†FŒ}î¹çÞ{æzs“v^¼l'ÃX¹¡Š×V×V77©^m¼µÉ
+˜µAµÆVóÍŽùÿÀÙ~þ2}^MT #›ê<’!5X¯ã†ôª+ÜXñ8ø9Š‡LUdÔ~Sn7÷ÈÙ«6öëU§¹·o››é¢ڭתû5Ú=pè°y°G[͆SÝrh§±ÝÄ9ïjTý¥ù[ê;Z‡Ï3W‘`ÈJ.ýí
+îë¸\ëû‹ãõ¥,?̳8{‡ä4é —iI©¶¢Ì—Èù©€Ç„ŸP*êÊ8æ-Á6¨kr2â¡'Ÿ!·';ªE,!
+MU,¦ž¹f¡'}¶S6æATÖM{Þ9ïëÕˆ¹•t?Ñææ
+¨TÀèH
+!{&0d"|j±ì>,t;ŒzÃHU>ÆÄþQ,Œ¹³x®ðT’ÄÌWDn¢dÇUÜs…8!!]å$m’pÃvâ¶YÁæ:w@*FI‰™vcÛˆ[YiIáÛ´øXúZô¹>ÓS°²Â¦áÙK€=d”=NBŸE±‹Çz at z¦/ñ›cbñc¦‚H&íÀžcN‘ê^ß嘤{ïª9Ïú¤ïôHçLI—EK¸9ª”ïcóv”£Shž¨¦H{ªÇ%¨‡‘³(•¶„¼Öð.!#ÞRÖrìH-!!r‘£r~\èBÈB.² ¡Ì<.*› ixS¤Ê­þ†›³¢ï刼ß
+‚¹|Tj/fyQõWB7ˆ¾-äð°L‘g°Åø	Ndžf‰äÈ{Ý×wø ¹óž\pµ„›£&[ ‹ˆÿ+Cø-Jü4·É
+ræ£õp¸ƒßŽí¹.#è–p12µ>GTÞí¢”˜EŠwpìG!³´E7‹¢
+R¹-ñ9„ÚqTGt¤_X¸©!¡ÔÏ0ãƒ9AdvA†ïÊ.|ës5/~ÞÌS=3ÊïRO|ÉànsZ:“PæH6G’þ\¨Á2éLtjîðp’ù ³Ä@OÉ´{9‹Â†Á”±=2YFz†2Æ
+æÏŽÔâËÇK¢ž|K©ÇèçSÍ)"'ˍ…M¿oæ
+칑—w¢ ºxDD(¥b†&Mî…R—ë
+OOYßh7=È‘²{RÎoZ>ÓO]¼˜]Fžô`”^ ÷@_Z ~Ê–i+Q
+oÜ|—ZòØ*¥iþš±ZžzLX‹e¥ Ð%²NÜ.ˆv]X坋íV¬Ã{ösf§ö»ó×û曚e^™™nõ3aÇ[=43ÅÁ g™;×+¦¿Óô¤Þ¸BçgióþxõúOsÊρFÁ—EOÇ9ã‡Ãý‡oÁ4K•œe¶Ìe­WÒŠÖV?áýû?PK    ë…}1>É MÝ      includes/htmlarea/lang/hu.jsUT	 ꘫAꘫAUx õõuUMoÛF=K¿bÀS¸2ÒSà¤Ae[®ÝØ’!ÑAƒ¢(–ä˜\s¹KìåHEý	¹ö¦£9ðÁèm‘ÿÕá‡d	i	AXqÞÎ̾÷fux/_!6Ú‘ÐäúýÃC¸Ž>‚ «‚O&§õï›ðìûWuxXQfì\É\ù3S˜t!àkWšk¤AV½mòM¦N‡ãÙå0œLgGü®~
+ðr ×—£ál×7!|˜ÜLád2‡'!\ŒÏ&üáù†Ç“÷#¸¼Úmü|'
+G `.”L !ˆ$±èÜ‹m‰¶%Âé'pÃËæ(M[›ã½~Î,o2é€?Ú”Æ9)<€².ˆ u¬ª¹plŠ5m·ò>n‹‰$tp_¯QÇ&‘:m’a̝	»¼è÷ÏëˡE1hèÿþì÷{œ†2„[£”¹¯7¹ÌT*Û÷R¡½dþ+‚ÁüH¨4ºÙ.‰ƒJÕ;*‡	§² *2… ¥ ŒHø U*5(¡ÓJ¤8è÷êe§87BÆ(’¥;â¶z½È¨äžŸà̯Uîç~mÞëIbâgHpúõ³¢&Té­bCtÑ`¨ü*óOKC-À‘•9RfM•f
+ü_´¯"[YÒsçXƒ?v€í$8Cå¾~ÞAÜUŽäíBám‡8Ê
+Xú•¥]@ÌR¢­{xç—~]Züdeš5i‚_LýWšÛJ©¶ÎÌØ\>Ǎe.0QÒu}Ì8V˜ú¨P¿cû¸
+Jk´ƒc$Üð–õàkÞüÊAìücžsЯ¶
+é=ì.X³¨¶HvÆFÕãÝ"ß	+ræÅ-ýÝ@2©$퀂s¿"®µ1V.f_ØJ±öÁHÍýJ	·$on´P
+.æ	 däm¹à\²š™œÊMÓ^„œõÉòRt'qhIlÛ¶ø;êP$"Õ¡B¿ŠØyÌâ7ØŒ
+U˜dãPîG³žÛÖ?Ìeƒ+MÉVK$mŽ=[¢Í9±Ûrÿò¸¢È#Ѳ "igr‚±_Ïï0]´ÆÍÌ}†ªÜ֝ù§Ô?41â±fÍxfÛjÁ0§Š	ä[Ä‘ÿ¢*·™.³7™ï¥sKÁürë
+‚}´ðß±iytS‹™¸£
+0Þë´æU²bé6lÊÅ^ž+Žµ	—|ãîI‘¯¡š6VÐï}ªo•¨"â¿™öR	Lì%œ¢N"l‰b¡cT[ W[§‹M¦Â¥]–kAÙNöZaãL¶Úáè×ð«Éé(è.‡NÖÂ?$èèbbkà·7o‡ÔQ]§ÿéuÿ_PK    ë…}1žwú¬6  ‹    includes/htmlarea/lang/it.jsUT	 ꘫAꘫAUx õõuTÍnÛF>‹O1àÅ—ZF\5
+ªÊŠ+Ô±ŒHAE±"GäÄÃ]bw¶®Ýæ]ú.}±Î’”-Öµwæ›ÿoæìV¯Î¯¡p6ˆ±²ìì®æ×—3ÈIò¯`y½X_¬ÒûÃöíé9ü«ÍúôüüëoN_%ì<JíüÞš9xïÄÙÒÁë}z~ïûç”äM–ý¸}w5÷h¦]ÄïàÏ,›¨©öŽÙÝ‘­ Ô.r	;ìåÄhMƒpG%
+L?À?m g;sU2'‹°TWLסÂ0ß;SB˱"llM…Ól’>‡"5qŽ…Ú0Ó´&“ãrO¿üÒ›PÄ)x2!1LÅ _u‚^m‰žÉâ Ï7Ní’ÀæA<Ý¢ÔÞŪVTþƒñþQw¡ðÔÊÁüK*pе菴ù¼=¨>Ç ´¿gܪKê$Ú0°!KÕC´‚~6†j‹*÷î驪;¯c§ø_—ûÈü,úÂ5-£è5^‡v^;„%kJ=úJ¿¬}IÖˆº8F
+˜›hå Q>”êóqùS+›TæAYÒÇ$;ÂêÈìË`厭{ð"=JdX•6®GÖÄ$GØG$ÁfŸ¨ß£œ§§!ØGV^h1Ê-˜zqïL2‚Ê”ÛÙ!Ç€žBA-¨ÍíPŠJ…¥ñììdÕ¨‚«NP1;þ¨­Ù!sßÍZn\y`­rK„~WF°‡Ä@HûÛA[×*K’CÑsuâ+|ÒK;”Ù逎–Hcï¥È1J÷ý®FnŸÂ’.ï3˜èÒë•O}Ð|#z@sŒ‡îéÞ¹ÑÎ.™%”f9µ´¼Ž’\©5†¿§V;#/[£rÔbk*¦„6:8Ș(t gáÚûQ€…k_F·&Ž»¥¬b¥Iÿ
+6Ê!“g“/éZí¢ž;«ÜÝæ£@ëŸ:—yalœ?µÖÚ˜Æ=8iB58¸1R¹Ð“ãçCOÞ|»üyûÛ»õŲ‡ä¤t'T2¿Zmç'°]n¶ë)|[véÜY„_^¿ùô^NÌjÍÐâ´ ’þ†Ÿ6«Ÿ.§)ìË·Ù¿PK    ë…}1ÃÖê       includes/htmlarea/lang/ja-euc.jsUT	 ꘫAꘫAUx õõm“MOÔ@ÇÏí§˜ÌYvãͬ1Ñ5¢ý Óvv;0i:3ÁÕðaŒå‚ÆEeYöEÞö@ð r0eO"!N»v‰Mš6ýýŸ—þŸgòypï굇ÀåLHĤ ##à>
+Ã;OnÛù<pÊ`1ä(ðˆq…‰¸+Êâfö̹<°í»GÜŠ0Ê¥)o€ç¶m™pécPä”ò	ÂJ@ø\Q8¸ÿPÌP€Á‘H ?•˜	ÂYN¤”&J`ϤŠ R’HQZ”#„T•±’B%œ³­äµ àÁÊ…WL3’s*I(
+¦5Ër8õ
+à₝öü±ÑY‘ˆ÷‚ÁúFg=%Šy8¢„áÂJ½}š!#2Ž¥qUòI¶•x¡¹Ïžqå7"¡¼ˆ\ÛŒ§—jñTVU¨GØܽ¤SB’b™âb¦¨Uß÷âùAæb&q”Ô_Ü{÷÷2HÉOCá»W—YQQÚÏúñóÒŸ™ïk›)å‘ùcìQ"²š«[s{I_•ÍæQãw<ù2¬ƒ¦ÿ£2öLçÆBëž^1÷jå¨qÒ÷ž
+I5íO©Æ¬ v9åÑ™—ÝêüqëuÊ䎱•íÙnÆ|‘gœ™éFŠšÂÖn·•ÍÇ5‹+±íx!«{`j¾­ýl¿Éú8’$0»Õ÷¡òcádáÛòé •È¡ÕË/êzKž+|Ѐ{g‹`rZÖõ©ö×Îvªyh6À#2ëê)óß/ukfµ³Ÿ*cXY¨7L•ªÞ×½æ¯n¯_Óph«õ¶>Ô_R&ÍÉ2þšcÓ¯«ÚN¼®çt˸|mkÒž¼nÿPK    ë…}1ÜlÃïi  «     includes/htmlarea/lang/ja-jis.jsUT	 ꘫAꘫAUx õõm“ÛrÚ0†¯ñ+ôF¥VËE	ibΤI€iÒtÚ¤™^4#ÛÂÈ’«Ã¤äôì]ŒÆ3{¼Ÿvïþ[¯£ñ^óRhC„ѨZE’A5E“ñw§^GþA|‹¾
+ii†˜Dz¡û«g-‰ãŒ~œ}(JjË”tï8%8nbŠ¦’syËD„t,-‘OŸ¿3NI(ºeÕfÑ¿†
+ͤXg‚œg'¬¦!¤RˆX#bX at 8_ .IˆRn#&'"²$¢5§”½z¨<#ÕÓå÷ ÆHÉ
+KµÒJ%_òÐCÅU~å‡ýÖÝ«ÊèR‰ÂYàmÅÛÃó<nEHg‚zE¼Ñî?åqm›S+i£Ø[å?uÝ#÷`ƒ²¾KÍV–ñ¥[=öÜJ¡FÛ”ª
+2ãºônfµaÓ§Ó‚óš´ÛÚ!*U+]GÓ½ûÅ¢x™&cöÞ¾@L-çë:Ÿ¾/öÃñeÎH¢!gºÐ2º:œfª—]ÕùãV‹nnÓû±ú2F	A½·9ìbOá5Tça=C±îý›Ï³œ[Ñ@r©6æ0i¶îzïrÂ'Á|—8½>˜D,»“|£,[dDNzÅ´XCÁ4s¯Ð3-uOôk…jM•a	øxÝ·F<xü>yÚfñyÁà“×m|…ç›\lžÈ07)*g[
+ì¸Ó®ô
+¯s.•)8,dfõË|èÓÜÛ
+£œ#>tcm–ÜÔmâën:ÑëÊ”§»û…¯ñÿÌ	›‚5~®šÍŽwãžãC܃9Í3Ò)=:-çPK    ë…}1¨ew‡    !  includes/htmlarea/lang/ja-sjis.jsUT	 ꘫAꘫAUx õõm“½oÓ@Æçø¯8ÝL±¡ $>ÄG«¶Eªt¶/ö¥ç;ËwG¨>(JÒ|¸iJç.e¥ @l ÄÒ	j÷œ·M*,Y¶ü{Þ?ï{å2˜:}f8œ	‰˜ XÓ(Dæ}R•Åé©y«\vÌ"†l®3®p*”wDCœÏŸ%‡–uíÆìÌ…£R–øxhY.}ªœR^'ÌÂ犺ÀÆ£ï„b†êD A©& ¾/1„³,œH)M#”À®I¤$$¢´(G.©ò1O!—¬BúZ°†Š¢F<eº‘œSIBQ1½
+6§n_0y×]7ºBHD‰sÌ`÷S²“Å\QÂpaóuÿ #BFdK?âÊó+i¶ñûÞ‡øå!W¶p"ÊãÈ¡Œ··ãͼªP!ŽÆ4°÷ã„¢¦„$ÕÅÕ\ÑÙníǯƙƒ™ÄQZu¹ùü$ˆçg¡°yù$«*JGYÛŸÏZ‡2£<2Œ]JD^síkg9í«ù¥·×Kâ­Ü—IlÏüGe&ìšþŽŒ…ú’誹½æ^ocä=›Œkú»«¿3ÙìpÊ£C/‡ÛÝõþ•ŒÙÈYœ`kõ’3ŸGägfº‘¢f„°ÿdø6Ÿc6Wb3ÚÅJ^·ejÎuþô_ä}	I˜åùÐü•l$Kƒƒ1*‘Msªñ£;Zéö‘—
+¸{¸8 ¦Çex·»Ùÿž|Ë!͸Dæ½C}Õü÷E½Ðò’Ÿ™ÙÆÁ±•…š›*7õS=èýîê`Nlµ®ë¶¾—1iŽ–ñל›Q
+¸ò¦³ïè[zÁ¸Ü†VaÉZ:kýPK    ë…}1Åã1p  ‘  !  includes/htmlarea/lang/ja-utf8.jsUT	 ꘫAꘫAUx õõu“ËnÓ@†×ñSŒ¼&©ØUAH°A€(lÊŒíI2íÄcyÆ*u‘˜’„‚R©Ðm%¢µJ
+-"-¡äa&ㄯÀØqÚD/lËÿ7çü>—?ÝÞÌxpsö10©Í8´9É$xh#†ÀÓù{ÉYM1FÌAxbS…ÏS“؝ø™2i^ÓîÏÏ=ºë"˜Š‚Þ/4-¡ŽóJ]Âv°õˆ4úŽ	²a%Ì•ÀAjôŒ#›ajGÇ1W"!á	!K…rô8ÍCŽMHH
+-à/‹m@ õ`¥´DøšúLz<3«ßPn8¥„c‡¥•·D ÄJƒ«K—CÙÚTd"9$ؼRõ`c·±ižm!—`ŲÞ?[t>Dã.^D<çR/›K‡çªë¢X¾WDqóòfºØáúÝ-Q|tº¢X›`žƒÜ	Rq¯ÿÅ-xŒãL LÌÉÎgyüRw&eÙ¹é(LK6Ú×	gsQ]ÖN¯Ë8þ^yЪÊê‰rÔU%AÁ,v0x(k‘ÙA»ìÕƒ3õpš×‡Í­ÿÓj,,eý²º(5„*ürt¯öo7F]³§Èëh³%Û£¨1B&%Ô÷ Ø(«z«'‘l at sqJúo‚í㱜£.~Nm5$®GÔèÁ—oòütÜ`SmGjDÓ±ÿ0tP:î_앵Ø,C.Çy5­qÍÞu¥_Þôäʧ	‚CƒÄ„ð_	ÿ§ð7„4Áåxžä©5žG ‡›8¬7²RvzåPGÍ“…yüSª8Í°2¥}Qê«uÙ8ˆ8h¨ŠOì…ʺf-	ÿ@ýEà¯È_G‰q¦6Hø[ÊšðGsÉÕ&«–¨5åÔµ_r·)ŠmQ:WI£îéZbY[¾¥ýPK    ë…}1;c$âk  ¿    includes/htmlarea/lang/lt.jsUT	 ꘫAꘫAUx õõm”MÛF†ÏÖ¯èœÚÈ-pÓ F×I6»ñȶi-%z¨a>¼q‹÷ØsÑ[|.ÐrÏÉú_áHòWv}’‡9ò%G#qþðÑLdF;Ú»$Äådöl,Ròé1ýruvÿÿzýô‡GÑ<	¾4v,^€5Ž`%šOà•\áöïâñ’OECòO’$y~ýòrb%Û{~%É€cøRŠ…!27¨áJ(sٝ#I
+•7È/†K'ä/µC£[wôl$ŠÁÉœCYÁ›
+<f@´d 5…µ ÐE€B“AüìŸÆ‰xcÈcíÆœÖ`07”Åá—¾»n6
+µGÆô@˜ô"X·^k­AçÒj9Þ»Ï-Õ;;oQI_ZŠrÍÒžØÃÜek¿sŸÔüN V®¿Å…ZÚ#0ý
+m³	÷Ëà<.Ö$=y¹.VX5@BÚí¿Çp&µ—v|Mv{{L[,Ê6ö]:—ÍõiðE :dŒG†¹,€u×X.¡Ì	]Ÿò,TÒ2ÉqÝöÖB³Ùû”M_‡æ«ÔŠëf
+åœý¾qWÐ|}å"èûLcÀØÃó{@œÌÅ1èÀæ“Å…7ÂÕ@+h™	ý•>5ú0ÿ4œ0Ù@,›ôùþ ¿——ñüxɪ»-ÝþÏ]ª9)Œ5y_=ÔNZÏM(:	°V•#ê„õ0§ïYŠ þ™¥¯¨2ùNÒ­h—AÌm?‹8Û£7o_Ÿ¿yû¬ÅkS³<sô»Ÿ7›š¶ÿ¸ØnKƒEb„T4¸ÑTØBŠiëÒ†€9wëh
+yP¶¾Šl¾tSPš›RR}È+ªnBCÈÍ’7ÙÏ„ÛËë¡Ë.=ƒ9ØnnXž\›ý›“-0ñ,¤ ¢ZU;ibÙüçš/¢­jÕ—”/4ß­Åp6{G®tÑüööÞ ÙÉã»
+*Œé̦^ŸÜqaj\ÆQêêÏã$‹·ëjš>Æ…7Þóªïö]jTzìꢍ’f 3I{Û®‡0•+ú¯À—éñFd™öS—^O¿þãåÕÙ´Òü^!ô¼æyMñ°XÉSXÉ¡³Ø7Åã"Þ=~ò^TëÂG­ŠÂn?G&´‚ëµ6Œy$L¾PK    ë…}1u'å‹      includes/htmlarea/lang/lv.jsUT	 ꘫAꘫAUx õõm•ÍnÛFÇÏ6àwðÔ¶„
+¸jTIdG‘?
+KAZE1$WäŠË]bwVŽÔæåú }„xÑ¥Prï¥C‘¢E5:Hâîoçó?Ë~ÆÏ.ï 2Újrg§g§ý>Üﮨep£»W÷¯ÇÕó»ÙÕÅ%üãéýÅåå7ß^<ÛÁCO©±¸•)Jx‰k£Ï!%*ý~¼Òh£´™¼ŸK—³;2³¨B1„«¼E-L.¥vçð|Q=÷²úù‡X,%öÔòEÜ›ÙíÍÐ
+ìíâþ~¯OØ$¥æF)ó(uìÉ+6.êu©„Æ\À£äP=Aoá@| ¡4º>/‰w•ªŽxÇq͍ôdr$¡R+Pc(”O¤…:ñ˜ˆ®þ7ÅÚCÆ(’…TÁœ„FÅxú3+2-E¡·Ä¿Õ±“I¨dôoÝvYÖ»^ÇÂ*©E?¢[nÉr5àÈÊLPjOÒA”öˆð¡‹¬,hoâÎ,¥ C°æX¬Ô1¶d!ìûD.¥utáÉùJ‰yƒŽ×j¯¥.	
+„Ì
+éd„&a]´Z´e‡³2Iw6L*»ç^©/ù^Jç™.|M˱’nŸ”Ͻݐ‡3·/“×]2˜v¶Y=1Ûö‰·s¬}"eeÑÄÆ%:¤ª~))Ôÿ8V™ˆŒªÆ§æ^²&<×­tX©T’˜àÊhì ÆJ9–õŠõ¼iJ…ì+Fµ¥r±ÓBs"âù¡*˜¬öŒEÓßTVGImN°FsVú K"ÑFùCŠ0Tǯù=•R®rï̕ː¶ÕDCfâ+LÁò‹%íó=¨Ü¯ÿ³álCnÇÁl1ká³{Äñmð˜
+U´®[CÈJQÛ¤i.ñÀãy¯½³=b¯7äû‰Õ¦Z‘Ħ3ÓCŠ„bÙmâÍÂ@Œ6܆sæ˜ÍJ[UçKtÔIh'êÄJ±&à¯m¾!Óp¦Xu¬NL±9†
+t$ëÓ6¦åûX_[¡'â×@sk&:öoÚ¹"Ôœm»Ý$`*wÉÞW0=0¼Ÿ>7ff£Ÿf¿ÝÞ¿ÕûÁÛwƒxÀQïŠb|÷
+³Ñd:ÂÃèï¿nÿìÁ
+¿eŠ’‹Âƒ‚T`†ŸÀ¯áúax5žNîkî|õþçéøýøúësPUÒþ‚_ž¿ø
+“øÞ.ܳӏߝþPK    ë…}1ÏZ-  
+    includes/htmlarea/lang/nb.jsUT	 ꘫAꘫAUx õõmSMsÔ0='¿Âã3³;ܘe8ÐC»´0|ݝXI´VìŒ-·,Lÿ'?¥G”ín€œœ÷ž%YzÚnÕ»—¯îT|bã9•åþë퇷Ìf"Þ¨_eYl·Š;PM 
+è[•ºÉª
+f	¼éA= ÁjsH
+~0ø„ÁOב…$oäVBEe2‡Þ0Ö†è¨(«Ê-zEÆ·Ù´°)‹ñ¸SÚWú…Â!ãvRVQTìN?}
+,²¢@6„õ™ÒïsLx?qÙ[ˆ„ZÄÜr[Î(ç.†Üv¢Ò7ð>ô+M®RqàS”/àÏÜ ϬÞÃýBrblŽÍB}—I؇x)©Á2f¿EËÿòÛnŠ¡÷OÇÿh2ќ㊂s‚åÁ`	ÓRÄ]î{A"«ƒ¥Mk™þ”½c‘É+/d2m+•>·Zÿv Ðûxtn…_ñJ+ˆ+‘¸ê@!>wÓEl¸1±ÓT¦v+Á•qmÌÞ§³¦/£™dºz/@š )ØfU-Öf·;
+Žy,FÑ8Á¥f)±îÖš
+É^jØTô·F0 šKâžú`OV“qcRã‚)–8CÄ.yy›¾bƧ•ô[ˆ²né^º˜'¹©¤ãž×ûÍfÎ4¬–ad¢XvQ"È¢ÍYFCË;d2J¬Bº,ËÇ×åPK    ë…}1™EµJC  ·
+    includes/htmlarea/lang/nl.jsUT	 ꘫAꘫAUx õõ•Wmo¹þì ùƒýr6jKHÝ]Q-ÛjÉ°åäÜ^P»£½¹ ¹ÖÙíýâþ‰>$w×J­Av93ϼGÃ!MßÏ(7Úy¡½{ýêõ«á.dzóeZe‡4™ÌO§áývqvtLÿ¦éÍüèøøû·Go"ó¸ñkcGô^ækVô‘¹d¶RW´/õÊüu³ÉÜÚÔ­ií}=w[gókZ\g7—ãÅüúf#èÍ€®.'ã›	]Ý.èn~{M'óÙb|² éìlŽZ\LhüóüÄ.§³I+‡Ï¾ð¤X8O‚„’ñFHE¢(,;w°£åϽ–Åõ-æt‹Çäs°­‹Ã;àrE~-ᫍ§Ú8'—Š©:™¤ÎUS0tçf³aíŸe!ÓuÏŽ¶á™un
+©ËˆÆ9¬öqpÂs±x9¶,1[?Ñ¿Âá üšie”2Û ˆ€6ª %§s©X‹
+ÓV"A§Á½#þͳvÒè$/=¨J‘Æq,K¢ñf#¼Ì…R¤Œ(àNSJMJè²% žÛ‰Æxc”—µãöö–F£½ðÉ>°<{{Ò#y{zÒX'y•(.Ø*©9³yxuÞrÍ:1àEVì×Ö4å:0e§ÆصP=C³t¹•µO7ÝkG­ØÓAîßÃ}ã¼\=*^%†K”¯£Fz%ïu§£eÊ‘G¶‘폖íV–ësÍùÚÿ/œU£T井þÏYjÇÖ‹p¡¤PÙ¬Aý ©Ê]žFÆ•Ík‡2“ó\!͉©/`g
+ÌT»:À„ry`[)–úYqÏ÷ÆÒßñ¡H87ÊعàÊy 56‘×RIÿ̐ƒ ‹®ä‡|2…a…ìgýSˆYbÎQûžQ URyñXÇz©ÐaóF…еpîó Ê
+ª5±Z2«Ô^ÿWÄ‹¥J"±Ä8ë¸[ßüFmLÑÖihKZÂ14.'†ÚÔ¨­BúÖùÑs̆I<KLb‰œ´qž#¸Tðïp “·¦õ³žÐþŽƒG##_hÒNÓE#Y2FŠ¼W}[™N.¹€Ã´Uç
+§#_ðn3å½uï´¬û&ÌMý؝›Zþ§¯{DÑsK¹R¢ê5„~‚}}?ÄR±¸'|H„ŠM¦…°dc£´fvoú^ü\(q&©Aæ÷4ƒ–
+ät7‚2Se÷ït–³JÇÙXk]ðâbãÊNüJøup%Ša1ùeñéýütIÙß³S{”	-&ïnG¡:tÎKÛÈ
+‰¥üø—R¥MMfCh„¦Ä/UAoòâãÝÍôãÝy’ZÒýµM'G®É+w†Å&ÃZZ˜þVh§Ð(ËQà|‰-â…ÖÅ |¢Âõd
+j×mØÓ4L1‡Éo5Z5T!8iÙ”.xÙ-/QÜ[teô§_ÈpLZB®j4F¼zâpÓèB²-%¨7
+½ƒ^­8÷½ÆÄÄœÅñ£
+KP}H1ëÃ^ìt%q9†ªM½(èÜãòaÂÈpeÍ*Þ`˜w
+w¼óÊÔA\|áÄ G+ÌdúˆþÞ~O y{LeJš?7ð>a¡-räò5fæ2Š›º¡`Ÿ€kf( ÐÙÆÁ»
+m§gÿ»sЭPtÆg4ÎD£üwTYy_‚•Xêù@xÛfKOÚNÖ`ñ4øUÿª;ìÛTw%·ö5Ûb@§¶©hþ¦½É×ØKÊ `§.R,CÔ:½Ó…Ê”}¤–¡oø`/xî­Ô6Ó8\‡ï±á¬)\¯/"åå9ŸÍxWB&iÿÓ[Iuð2€g1ȸ#CÐ{ÁÒ ©ûMØß656é¿òœ{›0n¾>X=@?¤æØÞì·!ĈchnÂÚ·²áwÿ“cµzс€ðw0_ʵSOØ’ýè[Œà©a5ê°µ]¾
+Â¼#Õ‚ašvfzS¿ì]ûÙ¤„.šo¯/¿É»„¥ÀihƒÅŽâvpP±Ù£	ÒŸ„Xǵ‘ø›…Ö̺¢Y…ö¬º¡—Ãkd—†àVÞ;ûóõ«ß-ú_PK    ë…}1—®,‹  …
+    includes/htmlarea/lang/no.jsUT	 ꘫAꘫAUx õõ•Wmn7ým¾Ã”⠱ܠ(ªi§qmÁ_AâÄ
+š" ´Ô.µ\rKr¥¨EnÕÃôêò³ovµÊJQëÄHl-÷ÍãÌpæqtxH—ÎÏTª¥¥©òA;Kcç)‹…9òJÒôÛÞ7t@¥W÷÷vñ1ziƒ‘Q%4œSPá!þ?vÖh«zÖ=ªaGI¢#ȤYáñØât1•>¡Fmèa&ùqöX½‹Ê&+‚¨|ñW i2z¤,ö é©ß+ætµ‡X_ííîíž^_œ³»½Áý—ô#ýÉ‹;L“)ÄcŒ›i›RÈ\eà¶jÖµQVŠf:âE¤Þ$Pí§¡±×oa“* b΍¬¢+ÏH3'ãdB¥©RmÉH›V2U=óç>	ëĽڙ蜉º}vnggèLÒ§Íñ³ŠŒßÙÑQ"îM„8«pFÓRÙDyÎúJ¼äå½Ê[.<h<dÞUi¶‹“‰²ÖëÐjF^—qóR%A٪ě8qU–Ù‡yšT!êñܨñèÒ‹ù­òkHœ2–>úw¡“¸æušuÅé‡ùVºqeLwã'Æåy§QT>:t©ÄèАŠËª(°â#ñšêb+»ŽÏ*›ÇU” ŠcÏU‚êñ¤­õó<o)·@Iü«uJNœq~ýH®UâXút¹u¦ŽŸ Å™§•:Ð&˜Ìyý‡³¨3_Ԑx%±­Š·,¡#4UTXÈ»»‹s™’á‚èê¥ßÝû“!j“¬A£šíP¼QÆ,CB‹.Y¯oø©å̘»–µt%J’³<#5©TEš"ÝU–CÓ'½'®
+XHLͳ¬ôÌÍ2eÊ
+N'XkŠn¨Awsq¹˜þã!hŠPŒu<›âPÜ8²)Š¡Ôtª<´«ÙÏÛlN&<¹biáùh1Ú*ëˆÑeIÐ<WøE›Å‘+ç[ØÏ\©•_C–}šÂs]ð!6n|¤d½[¡p—J£T¸H·ï2:ÆF·©lQ£jüÒVÀàý2«ø8¬`h[q.kõzuÖì FÒŽ”Y½GÓ¡ŸÇ–Š¶$ÏdÌ:4MÇM•I[×Ç¿\¿½¸zzÜÀÄÓŠ¸Ëqy‰Ê­2çT.èׇ~«ï¥BQ%ZïÀ›×/7ƒ“Þ¶*ƒãƒPòpÀzv ÑUÊ
+êóþ|¿µ—1eÐ¥-æhËW_·
+(“žò	Ë-.v‡V„àQëmÀ
+l;~WBH”¿G‚¾¦-¼ˆuÅ’œnp4M’hz]Ù]TeÜÁñ¿H•ŸcLHÿk‹ }QkÇ=*Pզ=ÇPÞ0q–3=„dàƒŒÝmiäe at Vzt:… 졯rÀn7ôýwÔØ­°+[<&¿.
+*8–L!OÍ0Wæõ ÐlÚ{cßØí\׬ìtçêìeK¿¦¨Ú7|ÚrZHuô.Nu“\™`f
+
+ùèuJ7ÑÒÀŶ|jJ}Ӂÿû鯢©ïA-Ö‡.Á}Jç¸n¥ë×·‹V÷‚À 1C~8O´ÿvˆÙ(¿{˜Ž?&aeµäÃÉÓ>.UÒE‰AIÇÏáØu±Ï¹†,c¶Ää	½b…Æ—¶äP‹ÏÏÙŠ|¥1W.ý—1pâq°Kå/x*{þ½ÿç<¾58f€|ý»5[êßý±ÿ%>ïbaú-FWÑþr†½û9L €f‡®Ù’Í•«è¢+o®aseÙW[5d/ŸŸQ`
+ÙQâUªõ赫ÐØ!R=‚ÖßÀK3U<¡My¢Òi¾}ˆšr_,(ä^Oë™
+ÖhÍš˜‚kljº
+,`øÞRªFòë®ÝÛ}ÿ7î¿PK    ë…}1fŸ²9  Y    includes/htmlarea/lang/pl.jsUT	 ꘫAꘫAUx õõm“MnÛ0…×6à;´btW¨è¢‹"
+š¦ZÀHw9–F‘ ÊEn ‡È­²Í:¶¬D6ª•Äùøø4|³^Ãõ»÷· 
+QÙVËÕòËÏo7Ÿ<ªËCé#üY-—‹õb…°uÌ®'[B¨\bŽëÄhU‹ÐS”B„Ë: þŽh9{ØNQŠÌû) )*EתHZ1ÀNè8•d•-“*ñr¹Ø¿æuœ]ˆ‘èGêB¾÷µXŽMoOvçJŸ
+BK˜]ì	ŠŠIçsBW¿ÉôLóWÀ4gHˆžŒ•w©¬ò=âwxΤ"hO]œd®E·	`ÛaB:ô3hBÊ?!u
+‘¶bo{D6ƒé­ªE{¬O86¢ÏÜ£ßé´î©¬B':WçBÛÄ<¸_štœ—æ a
+G?·©Eïz5kß)#]²Mœ3’#N_/!ûÕJ­;è5=ë׫²'”`==7电cç§FÝ€Þi‰ZC#T(ÝüŠOj¬WÎÓÎYɆO,7ŸÝ%Û‘$rd´ADIF3Šd’”ñ j‚
+“õ€>R+‘Íg¬+¼Ú͉¨
+>!dùùh*¶Ü:3²Ïfе‚ÍýëÍýÕº‡¿þÅ0‚äÑM‰é\'±2ÿšÝá“@â©ìH¨Bú?‰ô°UºFp‡Ð²}wlp…ܝÍTëôX‹2ÔrM2±ãyÙ÷µâÀ™ «åÇÕòPK    ë…}1ݬW  Š    includes/htmlarea/lang/pt_br.jsUT	 ꘫAꘫAUx õõe“ÍnÓ@Çϱ”wù\qCáC„6UƒÚªW4¶'ö6ã]3»«¶A}W€`;­M}ZÏüv>ÿ;ŸÃúõ›kȝõmðÓd>‡O‚{Ã-Ü8	±Œä	6‚Ö3ã,d°dº‡ƒ{xwGY>|,ÙeÈ56³ÜÕ¦É4¹Ø\].…pvHó~L“d¢)BE°uÌîÎØ|å"Qg7Lk‚;Ô`vëîY¯É×MP's{#z*4” Æàj­/Gæ`‡4KcÑ–Kš%“ö¸€´	ß2IO´–àÓøE[Úd’9.ðü¥×TŠ	.=i½& ›üÙŸ®Ã/5ôÞh6–z ý3ý­°èÄì(TâbY)”n0xcæs1M\§Öž€†d€¤_\&#â6ú`¶LÛžXòü„•ÿI
+9Y][[É©žD›Û£Œ1euˆ5uf„t#n™»”ŸÝBȉN…
+6¾¯éRO×±&Ác=ÑŽ±ºBÉu>Úd+†B}Z at zfjc£XÛց~7eG –¯ùxIªt(wìä8öSÕRpît6’a¾{‰88׍÷Q*'f¯7%²
+@ÐiÁÅ“¹Ãr}
+t’»E/ ëI´~ÅwÇÊÕL­z]Œukª‡PÀŒÿƒ6˜÷C­B͵+Žr„ô+	œþ-Lé^
+ºk\£Â*TD]éê¾A[h°ÕÁØQ˜éð/£_Ÿˆ¸=šåm<n6èÃÕe¨ºøéJåÁ–!êP”xœ&o§É?PK    ë…}1ªå"H+  Ý    includes/htmlarea/lang/ro.jsUT	 ꘫAꘫAUx õõ•VÍn7>KO1Ø“$ÒS þ Š,'Fe)ä¦FQ—Ò2æ’.Ç)rʽ¯` ¹÷%½W?.w×’›"öBX¬83çç›!:}òtFÜèÒ1íÊnw0 éhö|H‰5É#šÌÆóãÓðÿ|uòøi¼ËŒҙ̘¤gì½Ñ(s®éµf–g}nòA.Ë̘
+ñd¾ Õb4[NG«ùb9ÄZX&zÒ§—ÓÉh9¡—ç+º˜Ÿ/h<Ÿ­FãÎNæxÑêÅ„FÏæ¿Mhz:›D3<=æH	V:bô–)™’È™TÄÒÔŠ²<j·ø¡Ýbµ¸ ÕœÎñYS¹Õøã-²ÜËdIøiã¨0e)×J<¢"l(Hj®|*°1ÂÌ…v­)ìàRéDIWá[hnR©·˜àðŒÙëþQ·ûbu6YÁúU~¦¿ºÝ`\&hc”2WÁ	ô*¥µˆëR	ÍrAWðŽúoJïœÐ¥4º2—B¥‚…/E
+(KÌ;“3'9Sêš”a)ñ[©I1½õl+úÝNø¬kGœ1ÊÉ¢­NgmT:¤Û'ùò·ÞZ³»aڝŽtÈ?¿ÕHN«…Jæu*¬’ZÔâdé×ø+kÓÒYy)\fßfPIV_?¶2¿.¹•…kLOu*¹ 7¦¬å…°{¼ôQþÆ—Nn®•ØÔòQØXX¸Q£/Ÿô–í+rTRØá¾b!(¬Z¿¯gå6« Á:V¸ÀWêÎÎ_þÑÄòµPÀþúÑî>ËÊÀXdI¤J–µ«S|}ýHX7šá«Îå¡^£•£åZ%ð"…Ëm5’3Éw7Þ½‡*¥`ΫX8} 
+]ø$v7NÜQ7*t}T{ð˜äÀ?¯|#“Jº=ÅFÐ,0E4L‰¡’X¯@āìP»ZGïü¸6õ/EŒc£©6’#¢ ¯ƒÔÉ|þ¿z#²=ÇÖê?ä5A j‡]® Ñp8Ø–ŒBÓ€^],O_]<¯4S€•©tMÎØ;™Ë÷4
+Ꜳ5Jµ×Vɱ(ä**E†gæ*ªh÷=6܇Ã@A½T¼ê¨R
+uÿ,n,T^÷úM+šƒ6i¤?F«Bâˆqàú:;àÙ¡úBlÚëŽ.1 ´ìã!…~f2²ž+Y¬A†4ê™âú |lŠo*˜ðb?K£ÔÃ	ŒÔ;Š¡Ízӛȕgá#ìc¥6}O¶2sævT|Û¸6q3>ºa^®=¬u=.s™Ä6ÿµÚ$áLs0ª­f›ÿ&/·5ÄKæ²=dÌ QV“ßW¯ÏæÇ“(O&èWYeEŃ¼O4BæPYxf°
+ýñÓ/bœ…YF¡kƒCò¸Ø3­™ÜoüI%SfÛ„5ŽîÓža`öz÷¹æGl178
+yMÓм÷ ¹ÛʍŸÌÄN=°ûŠz¯×8É.¾
+Ì“€ˆóPÚx¼[ÛjÀížÇ}^à4“î> 34;§NpSÆAÊÅc¹Qaƒ÷Ïa‹=â\M£%sÜìÃ`†r˜kv+âHH–á:±±áÝ{]
+µùnÑ!ØîFÒæ6‡yähµÅð!îv÷Ib´
+képHöê›ÈÑ}° ¬@ä=³fŠ6JgŠïyÀF…ŝOáhj*ÜóÅôAAFÜʪ²¿0žr\¨ºzT—<qsw…êXŽ(S’3IÒŠµÇ´ý
+5a$bX…Cæ¡{»~ìþPK    ë…}1h‚´ ‹  @	    includes/htmlarea/lang/ru.jsUT	 ꘫAꘫAUx õõ…VÝNÜF¾‰w8òU#ÁFTªDÝ4ê–,•¬˜ª¨ªªY{XO˜õ¬ì1tÛF‚%
+@‰”ÞUM"µR¯74Âß¾ÂøIú
+=3¶Y;ˆvAÞÝñ÷ó_ï?gÃÛ·aaz¦	žcIBOŒOŒãáb½ù…
+V”X“ÐhÎ:÷ô÷Uwnj~‚…gjf棏§¦
+¸žÈ@D6¬%¼G`%½¨G6Ä&™„;=}öÙ¦ï‰N-Jîææçœep—ë͕źë,¯ØúÐÜ ˜®ÁÒb£¾Ò€¥UÖœÕe˜ušn}Ö……會pçPÿÜùª‹ÍFÎÃ×D§$–@`“pæíƁø~DãøVɡW^Üå5pXŏYxZ[ò'%ãldÀbÀÿPHèŠ8f-N'¡«}R`¡ÇŸ¢oŒµCC9â"¥a‚%aK¦¡'|¶5ê¡:õj·tzæÝû‹õˆ’š)̧ð£>CS2 °.8[š"á>´hvÎ8
+I‡ÂÃZ$jb ßKÆL„ŸI¼Ë¹¦$1õÑV$‘¢C$óç=à‚øNÒf!p¶Ò¦5$ëÏy71R.Y7¶µ¸±±–à¾
+£—¥^©Ku–ê$ÝVé¾z§©ccLb]<»}¡êT!á¢LBŸFœ…Ô.Û|“î©#´xŠÐÝ´?‚Ç2bT‘HځÁ5ðèFBÒŠ½ˆu¥=r‚z/ðúðr¡Þ¨#ušîø.JK=׆ӟod<HbÉÖ{œ®Œ 0Ò#uˆ¡œ§»€àm5HŸV¶ì‚>FÂJßNw+¸ˆµc97<Ô¶þÛôzÂyIKú‹)V~”—'Œi$E„¹§>gq¡üÖòÜ$ò=ŠRéhNҝ´_f'a•o©ßQˆ.ÁÉÿð±o}Þ5ÇŸÚ+bŒÔ~z êߐ‚†…×
+É°‘¥MïÝÈÂ槞àzm嬿4+ícVtNÒGi_
+2lÀ8“%t	ûÈômûA„ØâQ±q-õ+:Ö	>Ö0m§â Ý”ëØôŒ–Ú×ïéAfÉÃù—ÛÃÎÕ=×òM}óˆþF³CÓ‚;ø·6N‹ÉêÀ:8½ö
+ìLÒk£á­N1žTz@’¿‰m¾¼6ª>ÙááãšÏë©	q`Xóˆ˜ÂœâŒÒ]*ŸÉ«´^/œaL®tŠ¹Ì˜¤…­RÚ8–zy
+Y„ƒ{r+ ¼[vŽ'E¶%.Jì"\‚™Kýay7}bfÛ„2ªî&QÝw/pž¥QËÎ`8âúZ<Ìå•€^%˜,ãû&ž<w9Lt{U{¿¡½áh¬FÐ.>©]µX©¡…¨‡Ù2o%RâÓ?ßå–Ø°*Nœ/3“–GBrk”ÇQЃ’¹NÜ.L-XåÁ|evp®Ñr_»ßÝwî5¬«>Ûu˜UŸÚ¸™Ü÷;5}Vn&5¨Ö€wϳ9½îMj°†ð͝»ßNBº—ÛAÃìÑ ;éÓ¢Õ0?Ï´w!uŒ‹â½YÍ%ÕL¨ãñ§Á¿PK    ë…}1•t$ôj  •    includes/htmlarea/lang/se.jsUT	 ꘫAꘫAUx õõmTÛnÓ@}Ž¥üðÏ%ñ‚ÂE$h-Ú¾³c{ãñ®ÙKJ‹úW|_~¡ÏŒc‡Ä‘"ÙsÎÎœ™9ëù¾]“6¡‚5ù`œ…Ây¨bÃÇžÖÏfOà1s[!|%&4Íæs‰E60FҐß@‹ñ¥üߐ-×È<³éõ–É7¿ ÕÀfI6¼xúž!ºm)	à£i6ÍN.Î>uug§OŸŸÃ+ø9ͲI—¥"ÑÅ쮍-!T.±T¥>n˜,6×&
+a¶
+@?¢Ô’v¶ÇM¹;‘‚èíZÄ]ƒÑ,Eí
+°C
+-§ÒX`´eÂ’fÙ¤{\€
+¤ŽDHtŽ£iâÓ5™äŽõö?õž¢:êQšÝcêc’Ù®{0YMž¥W—] DŸj²=E^LM±ò.••ÐÔ²®SR–Þ´q—åœtØØ:îàVrî	ê²m«û•îÑU
+Ñ7LÅ€^mlMuqò8"ÉÎ$Ö‰x'Oþ!ìMYm“¨“ûòÿŠÄÜ—9C/F±œ—öI³	ƒ˜óÔte:Ĉ»¡iêK’^²x-úþÍ\jcµÇrX‹Q@ý~@_ÐÒ±ó»¡^ˆŠà—õ~‹uéeŸaÏ©œ7·ÎŠ|bY±ºúSúM”^ìŠzÊRIuŸGÚ•,ëÛ	
+ä£iÄ„‹CFnX2"æ<fH„˜)r³§w>)& ÔæÚ
+iZ׊Q´‰CO=Å •¡¸ßš¢gb.>p»úÜ€LÓ"ôLJ’ÄíèJœ¬6ÜöX”YÊ°åÂõÕdÏk”oˆ&›°ÎÝ4»{1ÍþPK    ë…}11¨kº  S    includes/htmlarea/lang/si.jsUT	 ꘫAꘫAUx õõ}UÛnÛF}¶ÿÀO
+`ËH€®zAGN„(¢ QNÝ¢0VäXq¹Kì.i›E>,/ù}FgIÊÛ¢‚ P;gfÏÎ9³¼¼„Éë«ÄZY'”³g§g§——0ÍÞ!°œÃxv¾›øÿ“exquõýoШt©6Cˆt.jøhp#Ì9<Ý;ëû§_1$–º’7á¢Åh¶œŽ¢p±úÅ& ðz óéx´Ã|Á]¸ZÀu8‹F×Lf7!ÿ@ôa£·áí¦“Ù¸ËãÏwDa¨„¤šmA$‰Ak_íòæe—hqQ+~\E7W
+·ý1<*NàR²À_¥ÚZZK<‡Âï‰@*–e‚¼w¬ó•;är"Sã¦:´ðèŸQÅ:!µiªaÌì„y¼òíù}šŽŠA#ÆÏð—_<áR.ExÐRêGŸhS]ÊÖØ®“D%r„GbJƒ­|r¨,iÕæ“㨔>¥´˜p-¢d„£XHùR‹„SnHjSŠ
+8Ù?whÈ8­¥£Â=¹““µ–ÉŸ€å/2íÁ''äX‰ø¦ø
+wØK• ‘¤°‹sì›¯K¶ÎP†.5ºÜ¤C7Ø‹—k*ÜQ~Aö(^ 9B3Ñ‹oKëèáYâCŸk#*%¶ì£ª‰YQ4æXƒ¬^`h“6UE´ÿ =”Rvª”•ÅõK1m¸#˜H²£ð«ÃŠä+¡¶/më°V¢‡`$Lø¥íÁï9¿2§Zä”uÒ¨Æsªp×Ç°I0Öҏv‹y+L%À7±êöJI’;u]‹d+:ˆ6TkÅV0¥d±ƒ[´M/gŠÙôŽ¢²v¯à–'¦"H‰E,˜Z-öš²håìÏá1ÔJÊz'Ö²á”&u¹Ìu²w_c¯Lê‚€‰ù9„Œy¶ØBl¦„Üþ”ûf•·Üz©ö-kîþÑ<·T“Ë·õß`ãÇeq Àæî?¡Žç™%ãYm9‘AU:叭7/¥{£¸u…rëOÎz¨­‘Å´íÅêÃWÿŽ{§bð¤6øº .žûw ·Ñˆm×<¾”ñ¸%sÃVA¿´wʺtŽ_<Ý•è,è•»æZ¶Õ‚X¨eЗvÇår»Ù—š—=—»®N4þ-ºÿ¾·á`ÉÃ3ët¥0gìH•€UÁn]üñÓ/¦Ì×^ Âx¯0¨f°a>ß-'ŸïÞg§_øåñ7PK    ë…}1:—.  7    includes/htmlarea/lang/vn.jsUT	 ꘫAꘫAUx õõeTMoÜ6=¯~Å@çtÞ‚mÔñºk#ëµoEQp%ZdL‘‚DÖÝ9AÐC/1ÐKµcýÒÖ§J‡hôèŸtHim©Ýƒw­yœy|ïÖÖ`ûýÛ3ˆ”,4‘º€pª%IiAƒµ5˜®Ï&#©oÁælcw¼íþ8ÿø½Û®¼n4Sùf‰YÖÕs	W/ìï’ÁŒ¤·à“Q¾Ì´*á…þhI˜RÃH¥wƒ`k¾3]Ï)úùÂ×A0À~šQ8RB¨.(˜2"†mžsA18á8Ôh>.€~©©,¸’þ8×X0±UÄh•Í#"Ä„"1dÂ$\‚ 21$¡Ã`à~â5¿Àk"­”Ð<+FHk0X(àæ^½¨Ë7)"®‰àÑM5œ%ŒÛ_eâ«FÆ4\ÒNêò<b°Áìké…Îù1Õ,W&a£Ä¡½$
+À,Š(ç™^µ8àuùNá©«S”hüÏuõ’·ØŒæô
+;EB0Ïñ¯‡=6…æGKAZØÆÕ3_?çÝzD¥¦ùhUŸðºzKº€œ'Ìwh {¬./zŽŒ	([õÔx€ÊQLE;õâØK˜³ºúæuõg«cÿ@¾ÇøᘍÉ_»NíßL©²g
+E.{]5Ø3…Z¨ÖA0¿ùJþ{fÐ?ÔÂ×$:þ}†m´Æåà_)‰)ɍÀ„cûºv¿.+dCÚ).‚¦”ãQKS `ê’ä°ït˹ ¹æ)F¶••ÙŸ%ÔåkÉ: M¢¸‡Æ´“˜NEªâU Û{k¾‡{n/=2SÆ)溽[¸Çì%RŸ+°ßÁ¾B†Ò	_^('”½³&¡³Ã§æ¥3¿¿i¼Ç¥>aTd×&Ü–™§pîwíÁ…mf»}«¾EÃÇnf[®—Ÿ]½â«=S½
+}ˆ|3Ó¯< m%ê±uJÔåÛFçHeËÞ¡
+|ЈB
+M»—Ûsƒ'X\­ñ5Ú¼3BuöZìÞ÷
+ˆȈŠëZ¸UW?-Ûi‘´§÷ˆfó¨€[óWnßëò·&Zá|ópþùÎîx³A†÷¼%W§˜*¨« j¬=uÖ:M‡ ûuõb:B¤-5|zçîgòáîŽ{*°ï~ôÉþö£íÉÐñž|üPK    ë…}1páž­M  \    includes/htmlarea/license.txtUT	 ꘫAꘫAUx õõµTMoã6¼ðxØS¨é6ÛS{¢%Ú& ‹.IÅë£,1–Ht‚üûéñî¶è©›~ófæ½ä1ô'6Ú†J×Úa²tsl&Û‘h©:]¢‹ù,÷O¯£ûöè¦]ÐÝçÏw¿àã÷ŒÜìØ´Á=Ûàýiºm}£íí?4}IMÔ½ÍØ>ÆÒùŒN”Š&ídÇgÛ¡u>S¶sSÝñè4CGgtMþ<¶6EŽH¯ôàÇ~ÊèÅ…Gòcúöç0Ÿõ¾s®m"BFÍhéÉŽ½ŸFÿì:<Âcðar:ù7|£Ö‹MSjêmø#RúmAß³šÈ?¼Ói}‡Êó #4 !›£Ž©w`i6Ÿ!ï&8Œ€\Oºè`d{j\oÇäÌÝÏ40îÊŠwØAíÿ`Bo
+;ßž{;„äqBCׯX‚Gv¤¾Áy¸æ4}ø¶”Z¯$$a_TY—úb~hzýû‰AÅGiZ†S"l?N ñJGÏz<Ù¡CÔÆK©ÞK§p‚Øâé‰äKB›üCx‰—ðvY4=Ù6^]<¸1ÞÔp¹®iz×c6B“–+³gŠÞ;%ïEÁZÈl8årwPb½1´‘eÁ•&VˆVF‰em$Ÿ˜Fç'ü êñ¯;ŵ&©Hlw¥ à«Œà:#Qåe]ˆj¨’†J±eFfqê|ösÉm¹Ê7øÉ–¢搨¬„©â°¦1Ú1eD^—LÑ®V;©•Bç%[^Üb>f¿ç•!½aeùƒP¹¯¸Šä¿S¹R)زä—QÐYÅs}¼r˜‚eFzÇsü+‡¦@ñ/GVšÿU£
+Y*Ø–­¡îæ?\Á^òZñm$-Wó™®—ÚSNk)‹d¶æê^ä\ÿI¥ÔÉ°Zó#‹£#ÜBïe­Eô
+VW†+UÕ[ÞÃhgè-’òJja’T‡ˆmHÈh¿áˆcÏUf‹6hØ–›ë:L„‹æJ&U|]Š5¯r³2Âì…拸0¡c…¸Þ3L­£ì´(ðº<¯.7Kë$±"VÜ‹HüR<Ÿá´x;ÄtoÞ<Çýÿ
+PK
+      €~1              includes/htmlarea/plugins/UT	 Œß¬AT]­AUx õõPK
+      €~1            &  includes/htmlarea/plugins/ContextMenu/UT	 Œß¬AT]­AUx õõPK    ë…}1N}^pf  û2  5  includes/htmlarea/plugins/ContextMenu/context-menu.jsUT	 ꘫAꘫAUx õõ½ksâFò3üŠYjk
+µX`çRIÀvn—u²¾ÛݸÖÞJr>%¤JŒI¿~Œ¤ ŒÔ%ÖÌô{º{º{Ô鈁Š´|Ð⣌æâ2œO‚HŒU"Þ_üð&‘îáWN·Þ鈫XE©J¤/FK±X,w&“Às£Q0
+¥£’	B]ÌâPÎd¤]¨A?S7oÝßUÔS­ã^§ã/#7ñ¦Ž§fYN•ê 2â7½–°vÅq·û•ƒï‚T'Áh®A€yäËDè©)!´Lf©pÓ\dèT†c»ž©ˆ”<)>~¹º©v—" =MzÎS)š©”"(•Ž~Ð-LjóòÂï	-tj͝ßÒö½8rŽI²ÎÑq§ûµè~×;ú¦×=¬‹8ˆÅËz=Ç	•ë_ée(›
+¢á¥i£-ÆòhøF«_¯ç‘GV³6šÒ´JZâzMƒ*ÿ§‚ÿè×W€i!8ØÎð"+€´m”ÿ×+óm×k÷2I‘k¾ätqÝ—÷2T1XÚ¬['YÚΓ÷«Á½¡ZD†‘³àp?eÿ*ößÿoÑÁÄ•ò©—(ñç­^‰æhÚS=ñhæ‹¥•^Æ€ý(A`WK°cv6M:‰{7èa°‡Òç_yfÁœÒÆ‚3Æ	HèKEúç òÕ¸9ÆÐÉ}fèúþù=,¦MØn‹›†qCô Æ-(U«¡2¹Ó4%B“xf+‘zžD$¨«x“Cå‚tHñ=ï(ƒÙ˜C?c½Â?I;ož$°E)äTDó0ÜôË°©­
+Û¸ÚM`s‡‰sï·Œj¶@äq0ÉÃáßfsÆŒnnÍo=Rk'ÃQ“:×.øÍO1ž;H„|ƒ±h|+C) µyÒPŽ¾`ÇÖöâèÛO`€L
+Ég”7uÓ+Z•þ5 4[†OÚ#S®ˆçé´yC,nƒ¹†£/9cFQ>Ho f37ò›
+àZ}±jÓY´mœ‘Ž>@½¡ýÛ›£[‘ùQÎ@ÅËý8 àND‰x r›º\º©–{ñŠ	r3†È¹‡`§¼&ŸÂƒ£?2G
+Q¢Ôø¯…At—»/»	:ÃÚR²öÛ/ÿf“|¡^Ë£S—ܪ©bOù’ƒ
+î5­¢ËD¦©Éøma`€îŠHß7û™æß\-'vQÙO9UR ÀOÚ½èi/à7:Y
+C=ˆæ´‘!L­>¨…Ln*É9ké"ÐÞ"Јf ¶ETnôëžÛ¹V3V惧£Ë“Sîr3w"Åe‚7‰djr[Í$ërâµ6òŒ‰=ÑD¥	pzÊ€V%ZÌðjªT<Ä9Î9?pC5Y`Ýטá#hæ;‚Äz×/YÇeÛçz¢q>*?/Å@Þa—í
+¢h‰l¡ÖÐÉ\R mšcÀa"¾|þ °¾x-zâ þA\gšÈñN{X|²”²©Ç`*½»GÕXðuç5sæbC,E)epŽ[¨Z]É…!Ò¨䳜©{ù˜$%GÃh!¥“YÓ¤®PâÑšEÂÕb©æbႵ‚ú”D"á$—öñߨ!^3u¢ÏôP+(JA#ÕcPøß:‚V.U&Öb@nb;©À‚ß²ˆã´]䇽÷­„l"×qÛm¨’BB$„¦
+ŸEÜcá÷%3ŽÌ2tf£Æ£±¤}&JºV(qBÃ;:GÚ+¼2÷K=ë	¼qýÓ¡؇˜>>šg**Ä·ýÒM‰Ï>ùF'ÆFÉßc£Ï Ã³M”¨ÅS,Tæµ·r.Õ	è‚üž°ó?CŽCwþ_¥áéÄˆ¸•Ü]EëÜ+t*1ÜK·7ch†Ÿ¯5Ö{«æ"³¿¤ó«ÖìdMnñ|B®ÒƐ¶¥O6ØTHo(ï(›	HSLþ
+1ÉÑò쨤¥§Äå3bÒâñ¨çT8ŸEÏLO…™7q¨íå¾s|npn2ÝWÇç¨ÅBî)>3F7X>£¬ß34{r˜zÛ8Uèð„H)ɁºOþkžjªÌåX?µ2ÿqCDµºÚ]êØ(Vã¾]¦Xi·“íÊcä§Ée•ìs0™>×\	á>M.ÆyT¬€Ü3¥#êÓ„"”j„zU_›‰W¯Ä*¶Kc!†ä½¢{'EXjlþZ“hjd¬R&ýhØʇ4ÁÍVY	³x0Æšvu{:eš7H¦Ezê>¶I¥QO6é@ˆWݧFŠ	œgF»^žžfM%ž'÷{I&WÑïÙMÜVéZö¤–'RP”@û¥ý§‡¡Õ‰Ûq©)“¡5Aeì‰ïúpUêp"Τ*Ï}Äé)õ\ä~1-‰2O›­¬Õd	ÜrßH`F3¾òöcøfc©Åî
+(ø‰'?K?qÍ­ÛÞ<=§¿·mÏcx\+ŽÜ2 ÍnñÞ)·Ï4•uïåîˆÐS.ËðÁ Ågg¤(LfÓnˆ«¡€D##×Ø%•p¢ ýþ(%Á-]‹Î{U·þ 3_‹#zó¥'jFwlöÑ0c[ó„€A¹k¢Ÿ¿.ØÃ|y¿c_92çqûÚ£ºÚúZÕLb·oa!ª.UŠ!’I±MþC<ô0¸ÔxœJwz[,­•k‹U69ÍW/I ãY4oaæ<Ê`tR‰ó ^Ÿ" ó`–ÙÂÒdÿÌè	O~á³Ã„w—™·&ïÅŸâë°^Xï5­|ÒK<¶EXb7„òÎd¸÷PîûOY
+ÇÊS™ÈïEÓ$¾DÆ*Ñ/Z[£8vCvÀ•1%¥°÷%y契g2 ½"9Ed¦Ú€ù‚§æ˜kø׺Ø}¦_ʁ­âP0Y!JKŒªTÒ›u:ÅãZªUL¯khFÞ\SjeõN.³W‚â$`ÑÌê÷9„lIô{è
+0A…ãoÌñlS¡Òò@ 8_é$ˆ&Fó`ê&Hró¹ÏbGgáÈÖæÌߺ½OÉN(£‰žöÅáa ÎNE·oyÿ‚›<onïnº·›w
+@ñåq•‚3ÎÒ©ã‚eï!2ç@ÙÏ°µu©Ê	Ðß‚\¼ãX'ÆTø̲øk‹ÆLÍS	§AÙT
+ËV5ºõÎJ/º!ó6g¢KFÛ“8 Æè¢@;óÖœlÙ'Š€	ä%&rgø|YäMO
+nòœq¬Ò")nyknÈŒmpÇ0 J¿`Ɇ¨”&q{ioÿšo/³Ç;?¸/žáÍ5òbMQò~”·žÜWR ÉýAY@\œ¨Ò£»ÔD]mÙ[±1Pä\ÝÐ";.S'$ûY×ù]#ƒrI ÞÞ8ÁOÎN¦ÒõÏNèÆx¥žà½ØñÒôàìŸÁó¯˜'aëÉ!>€Ó¼\w¬»´“}få<Òoìnáš‹]߇ÑÝø¡/fpRAd~€+%ãP-zŽß—Q_påa¶W'’îì¤Ã²ÅyÄ=
+Ö+§K	ÒžtpÁP±F®/…1{U½§Å‡°^ÂF#{ßtSØul–X@©K'ÜQ‘õ‰ÄZ²¥ÌI—9¢x¡›¦Ô,œòG!.~ñdðÓ¨ð%#
+×hØ—£>ùäy¤–#á@O4J©Hàü©:Sf‹Ax€Ø2òÚ¸®ÅO0¨ZÄW‚«Øõàxff{ý’Ý¬“[S¢¬`I£‚²Í4Ί&£búJ"‹ò—Ùçýzù&éö៓7¿S^¿ŠªŒ7Ø@™K…Hh9«<awc!Kr#Ò®ü‡û®U£ô@ *Êsö–JwçM¿yuçõ«hHŸ’[šA%Ü"äl3€Ï¨i¿L#ðŒ.„~q>¼¸¾þðeðï‹O?¯Þ_\ÔÁÙA~qoËœD¶ÂFµZÑÆZŽPс 9=˜JÏœÅg¯¢Q÷™ÔÊhD‘LP$s‚™ÒÝV6O: pf›è½í "‰A“çLü¨lŸÐɐ‘é Jqæ·ª6Ž¸X).þŽ‰å®PûÁâŠÅ“ê þdÏ,õÈëxâBD{L›W\r¾^ÆæÈŒf4´Á:ˆóõã[,M‹áºB¾ùÕÚfV…õ¶<‡o-HÍòŽ>ƒkhñ0ù-³ý5[ºžlv†Í÷ð÷7‡ÿé~wÛê@=s2?{ytÒ™›…œ”‘_X–6e%–Mæc£Ïrrþ;/Úœ8LSÅwˆ¼††GáG»b­"£“UEK¥/mºfºÈ¨ð7
+Nå`Á/qÜ0˜D§3¸ÍC	A—x§4
++“Àà9Rè?[å㧨|œ©|\¸g«F[=“±vÙì²™ANú5¦£)›œU*GSíêyúÖM®)KL‰[ÌDFÍç,Ι«M™æz½Y'O¢„]QÄä—LͧÜ5Õª*•G®¦»i‹:Tõn†&˜É+íÒô£‰OïH¤Ö×°gKWÀr‡_,œ‰¯»Ý–•5þ:v:$”Üjl¥Lœ|¦ÔN7Z¡M^fÍj}GÇAM	¶7kT¨Ò\èçÀ‡¶î0k%ÈáxíµøGVìøØ÷,KxïéÚ\C4‹EŽØ2ÓCæ‡|yÉËKZ¦™ÓFû@m•®µõšvYì•'_âwøAďuið»f/.pzÈß@âÜ<ﯾoÇJÜÄêɪz‚CîY´gÐv £2ùoÓ˜0ˍòœ±[Ù9,Ðû™ uzÙît}—c“ƒ=”°8ØÍ¥“NÕ‡B)˜AF¿´Eþ÷¯m±h‹)÷P[?½æ.˜6ö	Êmß›ï=æØ‚Zþöý1Ž}ènŸnÔwd€røCìÿPK    nl}1ìNß‰  ¦4  6  includes/htmlarea/plugins/ContextMenu/context-menu.phpUT	 ðk«Aðk«AUx õõ½koÛFò³ä?lˆ –™²Ý+ÚZ¶{‰ã»ú´F좽óE®$Ö— W–ÕVÿýff\R¤,;Å¥(bïÎ{gfgf™£"ÌãL2¹Ìø±'ùƒüÜjÕ;yùb0`§"Å
+ö‰§sv‘Ì'qÊÆ"g?\}úø.çÁîWþ^f"-DÎ#6Z²Åbá3žÇaŽâQÂ}‘Oì|–%|ÆSÈX¤û)ž1{ü.Ò>›J™Ñ2
+òpê‡b6˜ÅÅTˆb…nØcÎ>;ØÛûʧq!óx4— Ä<xÎ䔳a’糂…•›Å²àÉX!^Mã‚¥BÆ!gŸ~¾¼b…–,!CIÚÎκç,´à¾|=ߊôú<:d¡²Ô.(7÷+ú÷lß? éûƒ½¯ÙÞw‡ûßî0¥;{ÈØë—/^¾02ù‰¢K¹Lx×#*aQx}æé3À#ðzCÄÏӐìçluyK‘÷Ø/_t$hä«vÌÔ€¹"lÉ¿ÍèLÏÓ± @DMÑ^öÏa•} îy^ o°ïïÑFÄïy"2°»ÞpŽ¶
+p;Ïh?n‚oÅ"Õ䈠H …rºàv:ö½Ž]Š0æréÂkæ0oôUÂЇ]RŸÊY‚å5Y2Ë…J¾HÿÉAì@r0©9ª®:˜û gèx°ƒg4ÔK‘õŠ>µµÿ6ç §O~–Ê_â4àæNHÈúÑmEg÷°Zta¿Ï®=íœèUÞ
+êÖé N֏ºÁ•ˆz/çrž§$¬Ÿ‰lž‘“Yqqsö½Úß("‘ó)CË|E?“Šá<Ïa“’Ì1KçIÒ謥‰'\:®™eÃæFcÛ¸pÌkö@ôq<±1ã«ßÍîL1»¾1r$jǤâ©ð¯p¥Ÿ2t‹xÇcÖ„žÁ	 e†ÜЋ÷¿MaËUú|ÿÛÉF®ŽÌŠ8
+ŠKZåÑ u{†—…í¡Í)£dóbÚ½&6×Þé\‚3T<ÔÐä<<³YF]/¸Þ­út2}m#$ӏq¯iÿæzÿ†YϲD¶ÜŽnäA”ˆ	é·®ÍEPH¾³Œ 7qS%;ãÊM¯ÈÅðéëV	
+UÿЫIœÞ•>­œ]£¾–×¢ÚB<›”+°fcWV<­+²PD\‡2ú\ˆR¤9/
+}Gô™BÚ+M"¢;4*é¿­Ž~ æ?–”•"“~ù‚Ÿâ½ï,ãu0Äé\mœ‰/ÅG±àùiPp峝bËp
+A˜Šæ‰ ˜ê{‡DN¢´}§£-¯üN´LcÖÏgÁ„³‹ïóÂäÁŽÎïµDíìØì—A.‰N„ЩÌ@­ªäÓË©XP÷ÌrgQ$bR¢îˆŠ%!kwTàš÷2ñÝ°j¨@›I;Þ“íôIDñxÉ>ú&5‡1È#9r†ºEæsNAÖ`—SIìçÏYGÁÞ²C¶!²?Íùx³aN6õ4(s:åáÝãº,ÔM‡“v­ m²C¨¥å|ÜP,åMÅkæ3Ÿ‰{þ¨4UçÃP"åóYW'º„ãAëE$l)æl€A¥€Ò—Ä"¹*¶}²°÷ßÔco5yb ¢@,Pï‚ZâPÁÂÎaôJ¹Œ`‹iYL™)ä),D=—<þ¡ý2{øÊ£ßsÈ7¼ŽÜ'hW­$r²#at+&ËŸ¸IêÆTÞ61&#d”¥ÝS™/ùo»¸;åI²ezª§|ïê§ÝÐw1¿xm~ks•&¬ÆoË„Tá´eF’¹±Vþ—Yë3èò|cåbñ$[U¹mo*ËgSŽ:§ˆ *,ž£
+«Ý`‘Ѫ•æ¤²`±ñ«„H×ø·(Va¹¥‚ïÆЉ~ÔÖo¯_€ì¾L=Åq“z sHò‘ç(v«Jš¸«B¾Î¨EM{Û0EM¤êõ¯	VDÏWZzRÀ>'X.[xó©Hæ³ô™ŠÄø—
+Áí\:T<Ÿµël·WôY‘ë0¤P|’šÏ
+Þ5¦[¯Rò9ê==~ÃF^-Š<-„G"ZêÞ*0ÿ5/$û|,Ÿ\ìÿ¦ÄušéZ¹8îÈ Y¬S0×#N·A°Pa?Q4õ¸pŸãÉôÙFË	ù‰¢)¤Ç%û|®`cÄ}¢\„³ÑC±"_QüUæRìÍöŠ*øê€J
+elCÜq–T›¦/ìDuÅM0tjÄí5{ÎÈ„F3Øꀫ©¢W¯cƒTÓRÅo­C„l¡›°7‰b#V™<™QB¼™È!µjŠÀ™ibú&1¬u–”›žÜTæF²²©tÅFùz•y²‘AMQV2k&N³çìg•Æ'îürGÓhûEµ—FÌˆV>±ãcêéÈ3¨ä_t{¶¥UBôÿ‘BO†"úÊKôt½džJcªaÁiBþ™Gy°è6ï‡óâŒ~nÜŸg°¹"5š/ã-UkÖinÜó[¸P’ +Ta‡/>6ù#‘C{ª7+Ýw;Ðð=ï	8‡Ã
+ž€S‘ÝUØiôWÖ·WÆóW6jÁE}gã\Ìèf6(ž™.ë·ŒÕG"ìˈûÁï7¾?´ùÕAíE„ü¯¾Ø6YCFªvTw!
+Œrˆ‹=ùìáãNŒÇ—X
+ôÙÒY¹[ÙÉ®]¾ Œ·ÑDx†lÙTáÔÑåþ{{ŒþƒYYš•¥½.ÌäfF]jaŽë4‰Ã;kì¿gþ‰/Y ÁÂyzê•#iz¬r­£E¨u&ü‰(Ž(ûá|Êsþ=ëê™óLäòUÏ»1ê(1ÇA¢}seKÉní½ŒßûEê4A¯b¾Ódé)< ¾R³~LIê·ºìCÅ ’-{ÎaRC
+*})ìDœžñà`P>RdôfˆÕ»uÝVƃïøÒ¾s”ç«ú•a»#ÙÄœt¸÷ä)†*èrð9­F]6þ—2Ó‰A:
+r$»þšé°¤£	5d¯áµÂ¹þÉ"~ÂÓ‰œÙînÌNŽÙÞÐ
+;
+¥@ÙOß]ïݬßE ¦/;¨7üÛÛY1õ0ò=$NÍ}eΣjõçNÝqÚRÇZp›°W)ç u„&<ûÌ›‰yÁáÔS(Â*Q[w ßyQ¦×ëǨK󳶧¬·%yÀÍÐmºñà’pÕCœXŠù¦~GúHltØ·³§?¹Ò8E™A×{ôƒ<4‰Ö¯X"®Ê©¸¿t÷ÿm÷—åÓdß;ߘëçUMeåDê{÷kƒ¤Hˆ¨TÁÎÏ4é]a¢ŽnFó8®­U¦U-Ñ¢vhŁ°*_5à†z™±pþ"!¼#ü ãähʃè䈊õ-Ó}ËÅÎÉßã&l6Ï“.ª·Êšô¯úµ~àÜÅóé
+tH¿Ï°«†+2¢2È!Ûˆlç§úp®|œˆÅ!wˆx:dªˆÑÛ«£Iwr4P²Åyª!,}Žw–¤=à‚¡b^©0Å·v3øNNF½ê„
+Ͼÿ7ø.ìû._¬ÈDJµn‰ÔùP¤–JX%Áªr qÂ$(
+jGŽÕ2~æ~
+åµ¹–‘HÕ}8@­ì\
+HL¨uÑ<•
+ z£SƒeÔt³g¤vi¨šwTŠ—YÂa3Ì╍åfƒ<òi[É8Ä]Æ™­‹4%‘ÑÇ"&jª_¹˜O[†Õց¿Ž²½…Þ¾2Oí´3ב|Ö"~®P‰Z‘±6'J„hs·e‚©ÍðMUôæB¡áÞ/ë=¥«!CÌ*‘ënÄ~xÑdŠH›¢#£*•84:ó³ÛóËÛ÷ï>ÀÞÎÉNyÙ7&V"×f£NÇ%æÕR†HwEÊñΔãlèx?{Ø9y“ŽŠl¨	¬ŒÄqšò%@BG˜' ÿ•Ô!
+`õ¤b‰}ôDÔV¤ë…®š¤hšûU3$Áˆ'L]‰±¨×º³¯+çBQŸÎ Aë±P)
+[ŽW\ÆT0éÏõÚ!¹šñáCE_/äs‡†×¾™Ih´eœÙƒ¬hÑ¾Ýýª¾kŠ¶Ã¦þæ:V¯oPr49½¨Zù~ÇXŽþ†"/K‚w·Ýë`÷÷w»ÿÙÛýî¦7€Úçh~òzÿh07w
+ù©Â~åÞT£Xe鏮>óÉÙCæ¿Þï«ôaú¡6Ö·ÈîÖ°)Ýkc¤µ%r¾Ö iw±u§ub™•îããŽÃ­?ø
+RÄ“ôxg7~Â!óðx‡&qUZ;lP
+¬ƒ/ÐüàIšXÍÚÃ7]iÏ!©34–9
+
+†™NXêo1WMÚ¤±J![È@΋÷A~•s^áKt”étàa<í¨Œ¦3éªA®¹¬+5‰l’`Uô–r§¼z:ŽHµ¬ÓZÓ<ve­ßYMZQ¹Ü$¹P<ã—2 qKÍ>`=¬®`¯"c	¼«ÆåÂ	ûzoÏýÿÕu0 Ù `c'½â,¶ ^Ýë8´ŠŒ%y»…,Û`û²ÐÜ»PƒƒíÒÄ"•¹4•ú%Ž [Ü5	ù¡Z{Ëþfk£û¨eñºlk˜zÑ ¢4À{Q`»ÑþP®/Õú’ÖÕÈk­~ öDU¾zM¼t6k}XÄñß:Ä©zs,âß90Œ#vŽÓLõ½(Îöm»ö}Ïh:bäN—×Ú\t趥¿w#5²¿›6Gq]«ñzÏÉãB‘tNÒnOëÛêh˜¸Ó—‰Û²úÅT,pU€5xúkŸÙŸÿÝg‹>›š®ìeãÇìºÉ¦­‚öeÓ‡üÛUp«ÿ¬àQ
+mó”m(·ÌR*r­%‰Z†Pãvh™éß!üPK
+      €~1            +  includes/htmlarea/plugins/ContextMenu/lang/UT	 Œß¬AT]­AUx õõPK    ë…}1‰q“R  3  0  includes/htmlarea/plugins/ContextMenu/lang/de.jsUT	 ꘫAꘫAUx õõ—ÝnÛ6ǯ«§8óU4z1 ó>ºÄI¶tù‚Ó`À†Á`¤#‹0M
+$U7éú6{†ÞlÀ.ò@{…R”SÙ’+%w‘Åß9üŸOý÷÷¿ûûpöêàb%eÒš(¢G燗?`àà%œ\Ž¯ŽÏÜÿ·oO÷àO8»¹Ú;8øú›½Wþe«™4‚YLFðÝ.Þ|üý þ£±E‚ÒÑfÃ8‹¢h¬¤Å÷öe1ôV¿‡Ñç‚Å…›1,Ï‘iàî5€kÌ He1¼!¡	j+°3Ýõˆ8cšÅýQ›áÊ-®$ìh>Ë,]R¹K.Ĭ0èßL•jÉå̃ZG±
+î0V,	.1!Ó	=“)mãÂÒI]úä|•;cÃ(z1v ýÿHóØ8“ÈI»ÁK‡Rùý3X„úEåuÀ\3c±?‡0'\¦ÿÌçlÁf×Zå¨-GÓIœé	¢D‡z¡žÞÃ9—ó>.:¨;¹­pããyošÃyšEòp›àB½ÃçøæaT)¹öÄÓåûëçx¿Mé(Êf	'jùªÇâ”·bϤ!"8úRºwL!%*`•<ðnJÅr­wE²Î>L©æº§Ò:[NYœÕáÇH…ŒÞ7J¸xüDu’þ-»ÏLz:º%jA‚±oLÝ&ðM΄­é«¦Íúxg‰›à’M[.éÝ5~¢×~Së[ ¦}:g¨2ÔÌ53»†SùuN¬}i5µM[ãLÜüèuÉ	’7­~Bô»æ‘PñÜ0ûP6L6'û6¸ ×”º’ö¹¸Ñåhö-üD ÀÞ3ÏM—òäzŸô£øŠÜÑ \رJ	Ësã§0¢}ÚZR®p§ÞÓ6†F“Ùuó7,
+Õï~Fß«–´â¸Ñ®«ërXz0x~U¾Z
+GH¨ÒÑ@åá’ë¹ X>¹
+¯ëÚLª„
+­~³HT\´êBÆŽë(Y Á«yQÅÛù™e‘Z qð5ì„»jÌi+ùjwÃÙéxÒ¹Éè]ç;÷ƒ>_õ<0¡f-!&#§èœjÚinÞïÕÚ…îyµJ„©;9ï›st¤šùåL-´vz¹ç¼×ð;œÛÂB8ZVýUNW)ãéjÌm”$.)dÒ>Pª€J¿,¸S
+g%Ìã§4­bù¥-¤·üy‚›4XkÍNÿk®8íöõØ7üI/—™éÈÓn+¿È÷ :v¨ýŠFبøzÞ•³vmKjM>ß± Ûm]_•ÚóºÚ¶²Ã-óCùÎñšBJntÕ¦‰ö#Êh`!%eã42ÄRÿ²ÝNã¶ä–¥-–Âdÿœ¬;¬QÍ«Óšö]t°/žÜP¥ü¾ëæª»þÁR‡4oS½wX³ZV«±Fú8'Çûí«˜jUD¿þPK    ë…}15éÔ¦  ª  0  includes/htmlarea/plugins/ContextMenu/lang/el.jsUT	 ꘫAꘫAUx õõ­X]OW}ŽÅÔO £>T¥DU›:¥JBD’çj±/x•õ^k÷nIú!	¡‘’H‘’‡ö¥•šÇä r üƒÝ¿Ô3s×ÄkØ¥$Bfíõœ33gæžezšæ>Ÿ¹E5í‡ÆñMX*MOӍ˷®ÏRYyå‹tõVuþÊ_ß»{mj†~¥¹;óS33_|5õ%ß{92
+ÌÒ·éšÀ
+麧~ÖáEª§o|»,oTjºY*UµoÔsSùQE€¿¦_JfΨfH¦árZ-åäúÔäÛˆn{Ê	ùÚ¨ôŸ"¿®‚°¦E?NJˆZÃ	œšQòUÓÀ½ã‡žc\íÓDà.7òô¢¦?I+®çQ͉B%w.iÏÓ+®¿,<e8ŠÑ´¨ÀZY0ÏõUÐu¼K!r6µÈà›åÄ\I·¬R*](W#S¦âÿPöøe²Åã#¼n•/r0Ýzx†h,>LÇÝx'Y‹ÛÉ“4àm'4ªxDø¬ºñÇäY¼ÿäQÜ‘sMgYÑí@·T`\æŒÎ!ÿˆwãnò<;øÙKÖ)~b‚ôz¥Rˆ›ºî.=¤®¿w†xƒô¹žòo[Þ”<J6 ±¿Ãå>ÜèAUªv¿0’@ýŽ²ì¡Þ›ˆ·>‘<{ª©RgÊæªÓþÔÒ“òPzᦌëÊG$¶ì£äùqzåñÇHJÈà ÞúÔö9?Dtb¤ï.§pE¬ x$¥zï Pƒ ”¬â²Ã\^Â( àS`ð²‡ß
+Ì…ý¢¦°²†Û>#Ñï:‹Þ¹M!fe›'}o5£*‹4?²ªÕ>Ž·d‰d·"ÉݍSA²aAò÷bÌüƒHì¢ÐȪRKEŽŽýBaCa}Ø…ã`s’ž¬¥Ü{ñ«ÊϯÔ1ñÿŒßñÁr öŸ˜Åê2ûÆ¿(Ö ëk‘ç¬Êß(î(J‡`ìÙàÜWäÝ×i7;oµ
+ ì@óí6jº¶a
+ÏïKˆ¥
+Þkèd÷UOÁ:ö
+'’8‚46QäíOÅÃ̃_@ž³¨¼&ŒÖžq[¡ØÇÃlMÃñ-¹A“õx—0ÄáN²qIÝVïs17uD+°‡ì‰‚^þðzÊ’Ÿ-÷foÛê”â÷Õ{$Ûµ‡àjò”÷ïîËâ,’ùÁ](	Ú~ÂiÑpv4X|€ûºçè¦X¸º®Ec™Q|†Þ`ˆä¹ &$†ã ´å¢
+ÒÏ,°Þ9žv;$ß㔨»u©Ì²2„j«oh"-^ Zð‡ŸMŽ)'/¸¬æˆ(µ8@ú›<ç„lw“—h’oËzÇòEÑÀ“·x‰'z‚/¬õÕXLëN¼¸®¸±Öñ9 ²Ž§—ÇÈÌ6ï Qß"z×ÖgW–Ü>j²c+r`±ºÌ>ãìÞë·lý~íލ£’í×8’¸š(Ðk¾&·˜éxÃÚz,zÛd7&1Db|Ðu%ü|Kù¡o~žpÈW+xlðëãÏíÔnß.Gª±TFÀ‚¨ŸËVÙ³[…Xó,/™…Cürć.÷ýmüAÖ‘•ÛiCùB´(+ç?”Y¤s2éÈðÎJìt©¥]<f‚ól/úW°¬cð>ÂEG
+½N…¹×«ê•êDåX²Y;bôضUÉ[—Œ§Ñº²!/>v$Ïeû¬:a•û¸,bƒ~üª8bCÖx˜Zjýì¼ ¶(s Ú9{3]8êmáÉj‚÷<'ÓíàùÙVßx%ã{lRÎ’ü…àdNg#Õ󨧒Jýk?‰ ÇCEæƒDƳ,åäQ͹)çD©Ø¿ìäQKfWzÍÈ|&)¦”I‰ägòDQËñ€S@#Ï:Õ@9€t
+ºïüλ\úíRé?PK    ë…}10é?EH  ÷  0  includes/htmlarea/plugins/ContextMenu/lang/en.jsUT	 ꘫAꘫAUx õõ—moâ8Ç_/Ÿb®¯Z©õ¤“z¬N'Jé-'J*NÚW‘›$ªcGŽ³lïn¿ûÎ8…&Ú„ÿ3=“^Æ×7S´Ê¬P6ëtz=˜¦õáÕÙ%Œ¦CïnÌ¿—‹û«øÆsïêææ·ß¯®yî ·‘6}xˆ#íøW«Kˆ¬Mû½^ø¢„	¢n “^g‘ÖïÍ`1Lç“Á›Íû4Æà ×]xœŒó<.ðÕ[Î`èMƒáÆÓ{>`ñeƒ[ïŸLÆÓQ!£×¹° Qd|2Kah0Ë.v&~Ý™X̾ƒ%}-VÆnmWûù¯ÀFqôVÚBª³,~’x	)DˆU óÉ0-3AewRÒ‘[W‹lø;ª@‡±Z;ä™0/Ý‹Ng¨•ÅïöUÞuòü×ùD ±Å$+@"MQ²	Ox, ¯ðu†‚\…h²@„sÿÂ!‚HXtRÑ\#T&…µ‚s¯#K®Ë<Q°‰¥„@亙+-¥ÞÃ$Ñ2ÅjxBZ+Æd¬0$Ó!í±±AnIi
+ŸØWÐ)ëv:ŸÎ†¹=ƒö/JGV^2A§/' ˜ÀJF<R¦`{!
+%3ƉX#<¢±1f
+qÄð÷¥Ýn×!(9V/0‰ÕsçY’niÃçÖ0'RúÏØý
+Or­$ݹ†”f­Cç\ó«Òzs‰3íoj€c•Ñ 0÷)›¦Çþt8XÑ9jž/cåïI™w‡t‘Ûn¯_’2i!è>;-“÷¥{Ѻk¥y ÝbÒ¯J™cøÆúei)†²y	y‡~YÊ°¿ó̺3ˆ«6WÁ*Ê2jHå¤q¦TP¯Ê2lÆ7}«EV•eÖ}.åiktJwÙ‰gÙövbÔVéïßNT²Úž…’’A#‰\ÂÛ–½*\¹ôj@Š'”œ[­¥ÓÌUJ!){Ôt­b“À“þNe’z5R§Âå©(ìÛÿ]}Ñ9l¨Cãòk¶NS…ÝþYQžNQV"èÚjgVF'®uI9‚Ç•là]^!õeìÍ-PlðO8uØ`JÃ/FÈ@C%™G4—MǮ¦»{‰ Bêõ‘}%#*Kõy9›´M³’ÒÕ¿Ü
+ÿ¦V°ÍùÞS2ÌKQeEüù8q—'¨»ÜP3§ÂãՁ`)/äb®œ´œQÝf¹X«d“Ü)PŸÓãÍë·èö•L[n͐+¯Áçœhï(+ÉVÁ½žæhÆ•“í]ej—s<©mÔ+KeµØxCÓž\É­,[«ƒ‹õ­¬~¨¬µ"VîYâ}#µVê•¥r^þË4h\9¯UÖlA“ð×oAƒðaMv`?0ï+j°	GµÚ„ AU¿	Á[{54HÒäE»žïÌŠ²óãsç'PK    Ul}1Ú5Çk  e  1  includes/htmlarea/plugins/ContextMenu/lang/en.phpUT	 Âk«AÂk«AUx õõXmoâ8þ¼•úæøT¤Ô“Nê±/'Jé-'J*
+'í§ÈM’«±#Û)ËÝMÛ„†6!DŸçÏŒg&ý¤#•fÌ&ÃÏ-ƒßM÷öÈüjëËñQ·£ó‹	DRhÄÑÇGnqÜŸüÙƒŠÖ)'ƒàjdÿžÏ®Ï.àŒî‚³‹‹ß~?;w›û¹I¤êÁMš°.Ù¿RœBbLÖëvã`*J:‘\uW©N¤Ü*\S˜Mû“»qLïzvÑý pށÛñ°7„Ûù¾ó)‚ɬ?˜ÁhrÐ̾¡ü=„ñh2ÜâèuÂpdÚ ƒGÆÓpÅR,ŽjÝ.¨üú¬2›~ƒY súêOhm{:õÇyº “¤è-¤LjÞs<…Ìj"¤"âyŒ¤MÇ]¡0/X’iäcƒÖö;ŠHÆ©X:6ŒÈ:¦6¶uÏ@
+«yÇ…ç3üw|ôÁËàJ{.–eÈiÂÊî¸õFe¸Ý! 1*I…p¶=G”0Å"ƒkÚ¬˜Ðœ™T
+8Qé21d?ÏW¢
+ë”sˆX®Ñí\HÎ嚌öL¥1î‘NŒ^Ž§ci(âÊD¹!¨òVYkAfV­cû¡5ÈMš¿(?-òÔQÈls ‡¥°HÇqKiƒÍIˆÃ#ÉhÅ–·Jf¨LŠº&‘„»ÐN§ã9o(O§â¡‰y–³ }¦$=4fs¾"døPf›âJ>âAÆ /Æ!%\c÷9ãÂ2ôÅB¹>€ÑRNe¸®b	M+`‰/‘»fÖã(|Ýeì/èNÕO›‘w Žð
+ér¢]mä° uT3F5î°”Þ…îzpàÊL}'ºó:dX†VÖöãé ,B‹~ôœõ]IœW¡Ží¯\wqѤä[	YâPŸ©0%®-²Ä6µå¿Ñ9ËÈÙuÎùaÇtH_üØoZ¬,×2|U¬¨•5½¤cr´
+¾i» ¦-rk“o¤ñ*à칆#%7i¦]eœ2³KóÙ"U+¸—ß©Ò¨°DÝöÝsÛöŸv¸»‘9¬iœ³­Y=YNszí^Ë·­Ce?ºIˆ&ž…’+7!Ä2Ê÷:¦èÇýH§ð•ÊYL㛵g‰È?øœlMV˜ÑXñKû•
+)ÔD:•»„6[ñÔõÞì¹Pãr¹'¼¤ò.²Ø¹çÓqÓ|+ }_Ì•"çØ›Üö¤c2ÚÁ^-;2B×4ï‰xË ¶÷§uR2[L¬N½”¬D:M;EÐDžÒ3mì5v‘Žnþ$DÆlˆ5®<ѽ,çœoŽ;ÏÞÄ+æÜ›È*‘ò´?¹_‹T#‹íÖ‡_Ѿ{׋K'—âU¥}i·ï"«eØÂ=t¼­R)S,öùâoªÆìäú|%²*uBP†:!ðÏlu¢°ë›·‘{•jbR³@D5†¯ê@D…Ùk ¾ÉŽfÄ­ %äñÑϏ¶ó~êú£|ùPK    ë…}11ÌCE  Ä  0  includes/htmlarea/plugins/ContextMenu/lang/nl.jsUT	 ꘫAꘫAUx õõWÛn"G}^Kþ‡
+OF²A)’Ã*J0‹c6,Žö	µg
+¦MO÷¨»Ö›ä‹ó©î¹ Æ83F–Å¥ëœêºži·aðñr’Æ2iÍéÉéI»
+Ãîè÷4¤hœCԸϳéõÅ%ü
+ƒûñÅååO?_|ô‡»©”îÀ-"ð'âQs¹‚3.ê·8.L¤’–Ísˆ¬M:íöΗ9çõxÓIwt?ìNÇ“ûŽûÒÿ ð±wÃ~÷¾w³)|Ï&Џ¦ÝÞ£ë1ýƒéMºWã‡>£~nG¯3fA 3¬™à!`̸ †iî°üX²L'_a:†½Íîì|+âðiœ/ÀFÜ ýIe!QÆðGç8N.‘†H܁Šc”vkK†äEÝ¢{2P!—K†yÇôs«éÂÓSÒâ7{‹2mù„ýž| ¬ÅØdX,Iiâ„؝¸Ëœ Ï0?!!•!j(p6ofAÄ4,z[ÑaͤÌr%áLóedÉ‘Ʋ	.,5èO.”jCNgH­ƒ±
+‘nŒàC"é[ ¤k¤–Luæ•óTâØZî²½Ô6 þ‹*öÉ)
+²qîaTòü£þ¯.pî¨|°>áÜ	¶Z0ƒ˜-î´JP[Ž¦""Áôù¥¡4¹»[<"
+W)­V+ƒ¾¥ÂY<К®ŽŸ}óœøÍWÀ˜L˜1(KØ^„Áª6ªƒu«• 9 QÉPâN0Vk|»8×þîàna{HµY;¾ÞÝ9
+Ü
+òÖUµy¤Ãœð§r¾‡9†àÀA_!µAÅÚÊ0©G׊&¬„GŠ¡<@ì.¨«—Ö¢rÝš!~¦€ÐØ Äº©wˆó5æi*<œ2š‹ï*þ9™ËN~ïžNÕƒé;\¨x{óµRú5ÈÊÑ<„”l/’`õ`–€¡ü’ë»uÆ$º†3r+ø“|	×£õT¹r²®!}è×Ä-ŒZ`Ù£Ž]§BÔ»çŒÛ5@·l… êN1tËØêF°nw<`9¿Ðf`}NÔ]0†™eîV¶‚Çä”ázÆÀ™UJXž¿}™ Ên“Ö[pÓøøF«—DÆM3Û»¹`(Nøíü¬Rؐ4tK]×&…’swÞ“q÷
+êRW@¢çCEHЄÜçZa§¢;/âé…Ù.´Š½ÀUÎ^<I’ÚdŽs¦4õ74C’î>Kú•¢„¿ÂY~e	É’š4nE*„Õ†Åð„qÔdÕmÍZW-bPz‰4…ÉГÜGÄâÜæ~×'å¸#j&ÔòHŽ]k2f½×Ûínöf^Ž ßyYÖÙÒŸM†u‹°[lzoœíÎTk—ú‚ôg)p“ò/C6&M–M×vNV2’´R2<¾QÌY†T<ßq»ß9ºÊ1ÝPñУJ±¥þ¯`Sév¶õŽ‚Í`hïd¬nŒ’Öçô¼D$:㦼SÖôX"ÓyÌ
+oéFy:°Âlp/³t7Š|:°´Ü¯Ël
+¿JG‹³¨KŠu‚‹ø°(_0í˧ã]pÀ¤wÔÓëLù¢Î
+KÏ£_ÿ{áSò`@»™Az[Qè¸\y=å<ÈCx„†-ü#ÎÛ,oÐx‘u@“«„]X]A{íOÀÓq½š*¹x5u’‘=+VÉÇ+QZå*ÊK²·³‘óTHÈ[<’UIFPA¾K†§ÊǬFzà'ÿëÉ‘BŠ8ÿ˹Ø8=ùçÓéÉPK    ë…}1t&ȁÉ     .  includes/htmlarea/plugins/ContextMenu/menu.cssUT	 ꘫAꘫAUx õõSÁnÛ0½ç+ôÒµc7hÑ8§a;ì°Þú´EÙBeːè4]±'K²µK²›MŠï=>’³)~µ@;Ü|qÓš©`öíéñûgOÓÙd6…§?ò½jӁ	p]}õÚ¡¯š´r-ÜfÙ<ÝV}5½)&C§hä	Ø0ù6 øMd8Õ±r¢Ì*m¸µ(ñ¤i“6ò¾M z×€epVЗ-‚ò~
+5
+®°Â‡Å"&{TÊtu·ýzó«çÚ;Ñ$ðÖIÙ•Ö:fªÁ‡ø¯Hã`9†~$F´¯:˲åäç¿ô1––6*µ„¥$Êal\‹7+ò
+;¼	Ø…$7z¯;Ê°Ø*`÷uŠÉ§†©V©‘˜¶Þð¾ō?Œ6dê†wÿ!¾—Ió÷ ß5³Rú|2‹%Ùc¶èZ)óí)°@=zä¸ÊêKFÕ_!/70Ûñ°ë?X-'cÕֽХ¨[m¨'‹lVgó}ïÿÿzû7Úؐ%´èåvKZ†͍7w¸ˆû{¸ˆfœãθ-‹wå¬Æ…H›hèG½Ïó{¬î6wz‰ÌàæÞçÔwñPK
+      €~1              includes/htmlarea/plugins/CSS/UT	 Œß¬AT]­AUx õõPK    ë…}1غP½†  f
+  $  includes/htmlarea/plugins/CSS/css.jsUT	 ꘫAꘫAUx õõ•WÛnÛ8}Ž¿b*ud»éC7-¶`ô²@²»Ù ¥±ÅVU’²ã]äßw†Yiâbˆ=7ž2“	\ʪ)Þ\^Â0+…1E…#hÊv-kX)
+¶@À\Z¥ŠoTm”Æ–;(¬mÎ&“ív›VR«4SU*Z»àªÖVX©jŽý !áµøGÕ㘘ïj¡³‚ó&•4…R)%sþ0AÏO§ÓS¶¿•Æj¹l-hë=<C˜Á¢®¿]}xÿ«FÒ,W\®
+i VVfþ¸¼cÅ$áˬÛek†J
+©
+¦öÆŽ"šÇùdƤ_Ìx³ô™Ã3™Í&OŸÁtvvúììôüàÝMƒU[gnïDíÐó7†FhQ™ü;8²„(õv8ÏG¡![­;í¾^ÉuðX¥Ê¥àŠI÷àã½’ƒë‹œ=¯ÉB Ò‹ÙóÁê[»ðuÉí1]O?ÇÕUµT†ýÀԛ紒ÚX^M·HyÌàÐ-ÉÐ\dZb½¶ÅNN$¼<‡éÜm{¿Dy-yi8'kB€OÜ,&ðÈè#þÎJ!\舂ãÏeŽÙ¦æÜx›+Ÿ“sßïŽ
+Ý!xŽÃTÕ—Xbf»®1¥ãPØ°xcã׶ɅÅ`tèFs¸uki\i4ŏ×òùŠ²Å;ËuUBéþ†‚‰¼·Ì
+O‚Æ5Ôoµjrµ­‡Y#îØÍp£±Á:§rG&Ìù§ëÙçÔ4<ýÃéè×·ø$yDZBÓˆ“Ñü™2wn¹¢cì—b‰åˆ·s(%¹ºæf÷Âé[òÙ¯‡m%JÃÓv; x¬~F/ê•òSQ³ôÆ‚g)!"7¨Mì¼³ÏÒ)ÛsÜ`©Ò‘`ïÉÔÿ¢Õ%û*ׄó‘Š=TÎxõìûµ‚ꧮRŠ²æÖ„Þªß	-‡¹ÚW,lU²ú%IVVÙ]ƒÝd3—wrjù…‡:L÷sÍô:
+ZRè^Ÿ¡¥Ÿ–_¨²¹&g*ó(&’4ú†u‚“RôwBj
+Ì/Øe'^>÷¢7|:xŒiŠ5’üSOXµÈ!ÔÊ_®0m+Hê°®ÑþîLï|Úpµ³ÕZÑ}Ò)Z at o4ÃPêÉ“P4µbÍhI„ß«-ê7Âàpççî„ÔI¬ì‰\tH†ñ@S¥û$ïëÿŸ•B¦;â|Øî¬åÕ6”è“Û}棈ñ™W¾“Ž’/Ûêڝ6_=’AÀBWIÔùÛ£Éß—“Ô¢±¥ÔØ]‰)iÐÃóH¶…¤wFŒpGú
+™rï@ýŸ*ÇTÒXkûénÁûiãÀŽÃz;x¨€ÆJmÐE{Á?¿e‘¦¯»%‰ù¶ÌÁðÛiY!ê5ºùóMÃY–WAc;cŒ·$s9»ËÄÁ–õ†5*¢CGï5¾: £a¤JŒ’Ðå%öEßž;%.QµšΆаá0?·žÊøDÕèx)cäR–ÒJ4â'+0ûÊÄÖÒyýÖJ  Tî”fÜ€¿ÐÕÉD}lA¬¨ÇîfÊùrÌÙ6õ-ˆ›íz`
+iiO
+]fæ'#¨”éο•Ww4Th•ÃVé¯t{Ÿ/í±œ;Fu
+l¬÷²ÜnJmK+ùY¼,Uöõ¤äKÀg½qL¢"B~v“†»+­ë#]hÇ/ºë^L8è¥ÓˆÛdº÷(8 Ô›¨ç?V㨥óŸÐEfŸáµ÷FòÉ?¿W²Æ<a¸§û&öï¾ø:;¸ãÛ,>ñ6aËß—p€þ3äzcöÛ‡g¦ÛWX(úür¶;—•qÑžHxÙqgâPÊtÎÝýPK    ci}1B—º³    %  includes/htmlarea/plugins/CSS/css.phpUT	 :f«A:f«AUx õõWYoÛF~¶ÿ‡	Ä*SRœ‡ÀŠ4P9
+ØmÜ@X‘#q’Ëì.%«…ÿ{gö è86‚,íûíߌá•É´l,Ømƒ§‰Å;¾káO“³ƒ} ßñ.dÕ”o/.`•Â˜O¢Â!4e»’5,•[ `.­ÒûlШÚ(9,¶PXÛœŒÇ›Í&­¤Vi¦ªT´NïœýVX[a¥ªYù£,„„7âU¢e¾­…Î
+6WÒJ¥lí<²!ôäð|29v‚wÒX-­%m£Çh8XÔ•aà·Ë~Õ(@ZƒåÒy…ËB¨••ÂÇ?..ÁX±I3ëÞÚ„A„’Tjƒ©½±Ã¢§çù	dƤ×f´†iúÂaO§ãç/`2=9~qr|þðþ¦§ûû˶Î\(ÈÉ4B‹Êá߃ý=K°R/€Ó띯…†l¹êÎ(
+õR®¢È*U.›R¾E!?š$ì:ÉéËšŽEz>}ù)ûTϽo’{dW“/U-”aI_3õÇ3~¡S[Jm,_©[dSŽçÀÝ˝rZb½²ÅŽŽ$œÂdæ°»¦S½’î~<§ã„p¹
+MàÒ1wǤã|í‘zü9!Û‘;T
+§ÀøCwEŽ¼\øyyÌXȁtñLU}%f¶Ë"‡wÜQX¸Íâ׶ɅÅpè gpë/Ó¸ÔhŠÇ/óþe‹wîÛ¹	Îûo
+G,¾u!âÒи¢ŽAýN«&W›zÐÅlèÓ·GµÝhl°Î©ª\7…rbaøx5ý’š†c0ýú„¿†Ä ×LGb‘a2œ=f*s/—Kêr¼,‡îY%—Wœúž>}K¾„«bù-Ei\ýÝìߺçqÁÏ}íž×Kê¤fºè
+×WÂq]£6±œ`šNœ Ç5–ª!º	‚¡ÝU˜·ºd…Inìô³9%#¸û¡C㹶¯ œSŠuíhU”}=w-ô.þŽ—n`¶ÏÂV%3eҏW£•U<;ºšçÐÞ­Ô¨Å5—{¨ûT¼‹´ãªéîˆlrüyqM®Í	S™wŒ#‰Ôo˜JØ*E?GRãp`~ÎÒŽœâ̺§¾æÎñõMå­‘Få‡é¤´@-ýðp¾ém‘½Vx…öwwôÞÛ
+†ѶZ+šB;拏0sjfÜAðöìYð›Z±bÌDÚÔõ[ap0„ÓS×=uÒ9÷!wh±åÉÕýpï.ø™«‚e  îÄ;·f^úaî>»¾ò¶—>­>:Ds¶ÕuèÅpGŒ
+Y¦1ÀßžŒÿ¾§
+áJÝ–˜W]2Ì€gSHZW¢Škú·t”qÄëÿ|R9¦’ª]Û7HóïۍBœ<âÛÞ“{.4VjNÐWÿoP©(+±] lrÑ–9ÞŶ¢^¡+KŸÖP£!µ5!zÉ3¦‡¡1Ô8b9¬Óïbòp÷zEÜñ§CH; ÏȨl(‘#%„y‰ýAáËÑ7³T­¦¦Z"wòH¨n» ‘ÙgòIí§Œ‘YJ+Ñ„èP¤²³¯¼y¶–ú[+5‚€R¹6Î8S ¡w”‰úЂXRÚÝPËy®	ß&
+ùˆ¯Þ%ÄÒÒãš„fGC¨”é8ÂÊŠ/pñ¨Ð*‡Ò_i <Á´‡rÎy6°)°Þqpöɶ-­ä¥{QªìëQÉS#˜Vò1!‹(y£$¯\÷¸ôºqØe•†ááYBsòÕ˜•Î<Üþ˜Ö{ÛÅ̾#oÀãì™·[,ŠC9Œˆ‚|¯NŸ!ò‚¿”5æ	³Ä=’ØýÏÒ[%ã²w ÇU¯[×áÝß;ñ›Dq
+–n®½ûvÚqyuwE¡ŸKÑz/ ¼3ÛÈ‘ßoû4È)4ËCv“YL7û_ïì?PK
+      €~1            #  includes/htmlarea/plugins/CSS/lang/UT	 Œß¬AT]­AUx õõPK
+     ë…}1zÚÖ1   1   (  includes/htmlarea/plugins/CSS/lang/en.jsUT	 ꘫAꘫAUx õõ// none yet; this file is a stub.
+CSS.I18N = {};
+PK    #m}1˜Çš=]   h   )  includes/htmlarea/plugins/CSS/lang/en.phpUT	 Bm«ABm«AUx õõS°)N.Ê,(Q(©,HµU*I­(ÑÏJ,K„ˆ*Ùñr) ‘¾¾B^~^ªBej‰µBIFf±BZfNªNT(.)MÒãåâårÖó4´ðS°U¨®µ‰ðrÙèC² PK
+      €~1            #  includes/htmlarea/plugins/FullPage/UT	 Œß¬AT]­AUx õõPK    ë…}1v+A  ë  /  includes/htmlarea/plugins/FullPage/full-page.jsUT	 ꘫAꘫAUx õõWûÚFþþŠ©5FâÌ#©ÔMª<Û“.Ñ)GEQ„{m¶1^Ë»ÀÑêþ÷ÎìÃ^ÊqIzâžÇ73ßÎÌÂh¯7eyÅ
+Wå¦䲁?æo.Ÿ5œ=JÆýÑ.ÖuÉ×¼ÒLYÁroÄŠ	xÎþ–Up]ËJɆg¤Zi]ŸFzµO¥i’Ê5bÌJ¯K‚…-⼐õ¾ÅJCœ`:OATš7,Õb˵”¥"ï!JÓ„ æ+¡ "ToÞ_ÏAi¶'ô0‰o‡Xq%šTŠ'úFþä
+ª>|¼¾øðñwà™ÐèÒðºd©©Î@üªùf˜åSÈ/3e"¿FMŽL’›£§2ãÀª2™ª!l…ÚW¾Ûí’»ê¹<þä"‰„Œoy)kË\@ªI墙ò&ÛW¬IWy-ÔJJ‡ÿà";7ÉžÕx®É_j¸…I2%‚&ãÑô1L~9üèü§	XGxuSÃ~?ßT©9aß±%i ÿô{ÉOiO{³~¿·e
+¤yÑÊ0¡*ŬßCi’ûözºÙð™µ×Ÿ}äbòó[§P¼ÌÉc6!4¼
+‰x¾ÑZVqôúêI¯YGCú½”éÆÉx£WÑç¡ÏF¬‹÷ï.ãÈù$…ÈÑ/òÁ£ÁrV*>ì÷z=d×sàJÇæËLùVKù%K“ÉUÕ
+­fáv@©ãA°,ßa;Vûëâ@ý°d-Î=|NTMM‡€¯Hñš5¡£Áì+¦!h{‹Á[fµê‹*—È*VQ±5‡öï<àëߺÆl•“dLrߤ—z _lš’ô';tDæéBî*vœ²Û¤ÓÏÝ*k™ëÎ&\ê,	LM\"‡Ë‡ìÜ:è ý*ŠùBµÔûš‡gŒÌjŠ£–í©Ðé
+bg@áR†‘ÃS:ÇF!O|î¦fO3§ÀvùBaQ”\¿²ËW=ßÏYñO0ŽÈÂt†MAïK>A‡‡DÓVDë$&¹@‘OJ^z5ƒ³3OŸÀxæÚÜ'à
+?‰Ï¦³EñÈÀªçz$Í•ŽÉg´ø)1v¬Ä‰­˜æÇfƨ×æg«†ç&Hã(“#‹Û¾ý7kDè’ßË“±ˆ84äìííûoöw5v#]y؁¢ÚÎ²G‡Cmáûǝ™“­Em{Ì<:ÕRfûŲHe‰çpÞÞ¯ÉÂHæò]±Œ©²KLáÉ’¥_ŠFnªìÙB¤ü»ÒlÆ…‘›$-ÉN‡‡Öª¼n:ì“Òíý®:+ ³ Â|ײÞÔ/+eGv÷à4úñu{»(ÚrkåzÇlWÅ5nô+´óJŠp;4'b>/±à/øáöÔðváì¡LóÜÐùF‘»yì0—œŸHR®8Ëîí32ðmö|0ÀʦìÛGøÄã ÓüŒ¯™Ëvpævf§_íw‹OOóKTÆå(cbÌš8ÒÂeç³@;ôÅ	ŽÚD¡«,¢
+<’'PÂêšã<­D™™‚fÃõ¦©|¶ÔQ†‚\?þ¶q’pxˆ…¶Ð "óU‚`	â^?³ÑÐù#t'60¬ñÀWÐðµÜr[S&<=H¸è6îô0_úNv”î^GÙ¶6GÉNO';5ɍŒ_‰Â@Â-+Û8®qÛ;ÕZuwªÛ¹æBý_‚%ÎÈüõBü§¯½¨ŽÊ¢Ø;
+%;”ãï‘Š~+¸K')™ÒÆ~ÐE; Š¬]ní‚j!xèÆ㯗·ã¬N&YùòPm”~—°êî5Ëk¸íb%Á?^xæþëík…×ޝxé)”[wOüPK    /m}1ÞŠöÀ§  «  0  includes/htmlarea/plugins/FullPage/full-page.phpUT	 Zm«AZm«AUx õõW{oÚHÿ›HùsVÕ‰˜G{Ò49õy)­¢†^UUZìµÙÖx-ïáN|÷›ÙõšuIh{	ñ¼ç7/€§*®D©AoK~h~«û_ØšYjpqzøê÷áõ*ϯYÆá:_e¢€TVð×ôÍÕ³Š³³ÇÑàô….—eΗ¼ÐLYÀ|oÄ‚	xÎþ‘EpSÊBÉŠ'ÄZh]Žû}½ØÆR‹8Šå’ŒC½ÌÉ2¬Ñ4œÁYn+‘-4„qFƒÁD¡yÅb-Ö\K™+Òï!5ŽŒ…éB((È0‡7ïo¦ 4Û’ª˜àWŠC¨8‡E
+Å#}«»QÁ3H+d~øxsùáãŸÀ¡Q©âeÎb“¢1ò” c褂牲Î_#+EÀ@ÉU…Ä2áÀŠ«¬…Úå¿Ùl¢»ré7¡üÍ+Ep	_ó\–A\ÍåÞÌÔ˜1êà<%Û‚UñÂ_
+µ²qñà2›ˆÏJ¬qôEõÖ0ŒF„ôãþpÐ=áïã'Ç¿ÁªÂ«Ûœžœž¤«"6åv-Z°ºðïéIGc¢½óÆ	©uÖ¬‚8Í*ÆU¤"CfÉQêîtµâ“ZCk$8OÑåð··Ž£xž’0:´ÈJÅ3¡•ç+­e¯¯Ï°e%Ë ‡¶>/e¼2å$¯´à*øÜs!‰eöþÝUÔ:Q&RÔœÿ Ûƒ”åŠ÷Ð]§ƒP;0j°!‹ƒeSŒÑÜÄr]q¥|±‰³±ëÚø±.,I€AÁ7Ø¥ÇöÅô8PÌYU§X?}|ŽTIÍz€¯@ñ’UÍÝÉ÷d=\Hxg"h`ž•fè/‹T"”NÁ–šŸ±	A±®;¶á£a¸ö­Ãká¶ÀlUå$poïö|<“›¢6w§AeWÎ^`Z︑©Þàì•N"_Ö¸Ϲ¿¢Œ`½2öFݾ
+ CHµ¤åê—A¼·Q[¹£6Bǝ9ú÷Ë6¦ö!e$ìgj†OÇÁúJ¾‘e\¿²»Z=ßNYö$a»ÅÆ¡·9¢Æ£GmÚhO£ÅC Íxˆr^dz1³3ç0˜¸pA8ÉOâ³íz‘BØ7–Õ‚sÝ‘æJ‡$„#œw›2‚,lj.˜æ‡rVªÓi8‹Š§ÖO‡ã°ú2ÃC™ýݹtµÐ9?Š™‘º8SFß)Ø÷?ì;nxìRº—Ø-˜¢ºž(D’ŠE­âÚª®aMíÕBÖpÓ{æÑñæ2ÙÎæY,s¬Ê¸9ÐÑÌP¦ò]6)’‹ ÑœÅ_³J®ŠäÉt[¦ÒŸ2·
+`‡ÎÃÄiávL,aÃsÌQϬ=,’=û-ÁÔÅ@çš»”åª|)X.³0°;
+ÇÕÍ^¿é›i£¸T®Ì:V\ã¸FAÇ5>v=Sû0ÇÌ¿Ò»#¾7äÏ·ïÑ4Ô-U<ÜÙ²ãêÉff‰»à,9Ú}$Ð4ßÏykÆ̨EyÄŸ˜òû†üGgüÇF¼5ávp÷³Ý퉛gúm>¬ÄXQͯ¢¯ÃÐ	>+S#ØZŽ.Dmœò 	ö)t¼G£J‹XYr¸…È“™µZq½ªŠ&hÛh_êŒ>ÛO‘?_’&g/3óÙÄØ&#Ç5ÍDõ;¤È dÅJw›T*¾”knS©yßÆ=jÅÝŒþÞù¨6}Þ;Œú.½ƒ ¡Ã˜GGbÕ1{mŽŸµZË‚¨k–7Î\[7ǹ–ÛçzUÛËüÿŽ‰Ñ›èù¦CkíúÖtšµS_90èlßƒ
+ú‚R߬(gJ…®ç°…‰w½ ›ã ÔLð–šïñ¿6½E#ˆ5Nô·ãKr.K°ìf·®oc±¿Eí6&¦qr̈5kKǏä÷ãò¯çÝ&ãû
+íüCó´o¿‹_üPK
+      €~1            '  includes/htmlarea/plugins/FullPage/img/UT	 Œß¬AT]­AUx õõPK    ë…}1ŸÝ©   .  2  includes/htmlarea/plugins/FullPage/img/docprop.gifUT	 ꘫAꘫAUx õõs÷t³°LbbøÌÉ 
+ÿÿ700ü²,XpàÀwïžýT ø“…‘‹AÄ™ÁÀr;@sé” / Ñ$œ8[˜x€Ä”  ‘ â:q¸­dp†°Y2¦0i.ej88EÈÀ«±hмâsžœK˜6t9 
+aéiâj˜dÉ:§˜Ïç€kƒÇ¢æ/MÕ„)L:˜O{>˜SÔËÈqJPUtB§Ãbs‚0°Ï›Òȵ„…aÂÆ / Þ &ÍÆ)R
+ª	"!ßò0(0¸i¦ö“`æe8&±äúS‚NYŽPÏqi‰22X PK
+      €~1            (  includes/htmlarea/plugins/FullPage/lang/UT	 Œß¬AT]­AUx õõPK    ë…}1ý´¥©    -  includes/htmlarea/plugins/FullPage/lang/en.jsUT	 ꘫAꘫAUx õõuQߏ›0~>þ
+«O;©-ê¤I§=PŽnhA4ÔÇ|%ZH	ÛºÿûzÇvÛŠýÙŸíÏCÈVëîL®AØJâ„Щá$u„!ìâüm3Ô³9¤yÂn3ïøv±†ŸíÙb½~õz±ò¹ñàÓGðA6BÂF|7zs]†õY‹¾j–•iÃVÚƘ±ü–•ÀË8ßïbÎÊ}D˜‡VK(vi¼O¡8p8²C		ËyœpÈò-£ðw)Äö1…]–§}/„…Â:ðE(Y¶B*uÝ£µ×S‹—S^38yQæÇzP{󧲼£=Iô´qÐkå'…sZ5DºRCÔ˜d¶¨ÝD%ephá«·QW¦–ú4Ê&ýyyWXŽ·y?‚«Y¬öšÈTâ¬paDÍ¢«gCsbmDõùÔ›A×4¢ËxÂS°ON„®P“ãñ[–ðc‘F÷‘Éc¦¼LèzÓaï$ÚK‹§N:…Ñ?É÷ Odï/ýFËE/[ZÐúŸ‰x
+ÇoîoᏑà×MðPK    Ôl}1}$ºƒÏ  H  .  includes/htmlarea/plugins/FullPage/lang/en.phpUT	 °l«A°l«AUx õõuSÛŠÛ0}Þ@þaðS’˜
+©÷Ž×iCSË8J!ª=«U$#ÉÛ¦—¯,gÓl»k„™™3gÎÌÁµ)5o,ØCƒ7Åï6üÂX
+n‡CXNgÜ+
+¶FX´Bäl‡ÐˆvÇåp0¸”Uœ½‹ @Œ Ír·ìü
+]Œgð–k2žÍÞ¼O}rÜÚZé>òšq˜³JŽ ¶¶‰Â°:H¦ËzRª}¸ç¦Vꨰ Ð"ÎÖ«˜’buA L'¯ÒxB¾¡°%›’Ñ8¡°ÌÄý€¾O!ž“O)¬–Yzä¹ï³ ˜ààžq¬ª4sy¦òú¤B‹-Pgöv½=N}uVœß»•qîHe¡QÆðÏGnwNËR´:m7î¥ýËuDך±Ì¢o²T—;_
+K×Ó‡Ée·žÇ;™ø›ºŸÃÁE‹Z:¾«r865¢‚èâEhÔÑæ¬üºÓª••kJ¸kêÏ…}vÂd‰Â§œÜ‘„nó4:B'·UÙvãB£UƒÚr4½ÊsÀS†åV`ôOö1è3ɇ^Ò[>’k¾w«úo
+/ žCÝK8Ÿÿid8ø}Õíý:ìÊíPK    ë…}1¹’Kíë     -  includes/htmlarea/plugins/FullPage/lang/ro.jsUT	 ꘫAꘫAUx õõeQÛŽ›0}_1â©+%A©T)eÕÂ’6j
+œJyta¬³íöò´Ÿ²¿²û_ Év[d¡Ïœ9gŽ=6‹emÀVëNʔمrσm¿÷ÁEåN!ŠÃäfÓç;¶ž-álòd¶\¾y;[ô½Ag+m|ø$*.`Åh5…ÊÚÆ÷¼òNqSTóB×^-ÚJëaü:É€eAœo–d¹Owý5Àbé6
+òÒƒ}²Ë Lb„6ñ:¡°«äsÛM0ú^qykÃ-—¢¬¹ÀËÒ`Û^](^_(X¶–ÀŽÂq³^ÖyÛëçÉâ@>‰è(m¡Ñm+¾Hœ’aDˆ T!»‰˜Ö¬QÙ”p$«µÜbßúU¡K¡ŽÃ0,H7wó+Ç9¿Â|x›wðÓ™¸´hiĝÄY[!Zßõ'—aÝȾæ9ðSŸ¸õÝ)áV¼øz4ºS%)’ô6=d↝ÔÜ ÔÕ¸»C®
+”CËÄÍPuêéáñ~(Ý$!Û§‘*^Ò¡¦‹®_£4V`;Ò¤”öñþéAH¢;5v²/‘VX‰'qŒâN¾hy’#;ÙQØØ“´Ôˆš¬ûÏ™¬!%ªÍyW†ßíßž<›b©â»ÎïkçPK
+      €~1            *  includes/htmlarea/plugins/FullPage/popups/UT	 Œß¬AT]­AUx õõPK    ë…}1Ë­ N+  Ì  6  includes/htmlarea/plugins/FullPage/popups/docprop.htmlUT	 ꘫAꘫAUx õõµWÿkã6ÿÝ…ær@â8·[c'p½ÝA9XûCŒ1‚bÉŽ®ŠäIrÛ¬äß“dÙI/eYKCK,½oŸ÷yzON¾6¾ˆ¢|M1YDå†N¿Ê¢ÙPaP­dM•aTç/e](Vd¶5Ç†>˜É7|‡ýnŒ´*æq’Lü_-ë¦Öþ+ù¦ãE>ñŠÿé¾4œ_㊢9ºg‚ÈûЪ’ ÈÐd‚¸Ä™5EzÍ›Š	„A‹
+•ŒS”‡QëEQÍþ¡7rðSšŽÐ4M‡YÉßa…pQÐÚP!aË~Ê%‘…Åè—h†Œj訓:^zFº’d»\U…äR=#-Ÿ•bM—Úl½û§RÌM/l¥ ÜA.6J˜§s$€–,*Q&ºÌ†.»å’ðjišcCÀärúËoÀIÐ`Î$k)ª±ÂÝׄ0ÌeõQUîÈh«VBàÕeêà
+†¡¬D'd÷"rðNÚ3˜TÔ|æÔ>^l/É€9 þCyr‡ycˆò'û+Hw‘ÿïxð‰_[­ç"ÄmMãaR‚Šö©Ÿ ­)§…cÊ¡c\Š«¯-ã6;Eÿn˜êŽØî{‚FàådN,³?RzV1‡¯ÀQG!èî¥h?ŠšF	Tb®©ßóDîß"?ûi9O†íœ,P
+೶zþ \j:pjÎää²?aQP~pĽ½m„g̦’멽¡Th˜[‘•#dÖ9^áâ¶R²d†.c¤ø‚Û5sؼž)afh:­Ð
+^Ë
+ýNÁ4tßXSÅJ«·Á
+F×¥õƒ]Ö˜&ªv½‹|ø~ûgØž^äÇ“ãì"TGP¶º¯•žO²‡ˆÁ=#f=CÒ}$	Ç+¨ü#²ü1g¤¤Xµ6Y0˜¾§k%~~>0zF„i™<KÓ4sÈÆ÷Ô:™A8i·ì(·îÒwYÏˏ€ê yBÇ+	x73¿	4*BU¿	ÚZrFЊˆqjÈuçî½g?:ói뮳ZïFÖàÅ&ÔzöÛ³óóóÐ`FëôAN£=ƒÛtùÄßÍöÑU_
+{áÍc?Çc'aw¨àXk8´n-r€/Ž_åN’OÀ&˜ûº¹°ó8”(MßÅ‹vnTx´‚¹JÌA˜u9°]äîØíõXŒ¤&é1hràžÕÿƒvõéæëÏ/ÀÔÞþo‚êZ18B[ïz¬×”š ìßÞäGÍ àá•0»–7Ayэvn¼€Ç½w5Àƒex50{¼Ry2$x²¼?¬ŸvlõÍÜŽoÏ/b$ðVò6†SpVÜÎãö¦ôo0YÈèêk—ˆ·=Åoá®åc¾Ã…Ýù÷GcôCö›Kÿ#æ_PK    ë…}1ìŸ&,*  ™  ,  includes/htmlarea/plugins/FullPage/test.htmlUT	 ꘫAꘫAUx õõ­WmoÛ6þÞ_qÕÐ6jÉJ–võKºÕÉ°é,Þº}*h‘–ØФFÒq¼aÿ}w”äøE›n†
+KÇã½>w<
+?S§ …`œðÑK¯ÄéX8f
+?Εºd¹€RÍs©Iµ\±Î„gPx_vÄŸsy3ŒFF{¡}g¼,EYõ6Œ¼¸õ	éêCV0ë„Îý´ó]I-ÉeV–<î«Ù?±VQ£Šà£àÒûqn!Šã¿Q¿’Ţª×ǝ(Ã8øBÀŒI
+?ß]ü`ƒ©TÂA§ó%ªÁÙlXk"
+ˆ?¹èôNßÄ(¦óDèÿ$ƒK¦L¾%âÎí/Tšr^ry³)ä+‚-ä¶CÈj“—˜ÒuPvÙD‰÷¥°ÌK£]tØ¿ûªJ
+‘]»‡µÁ3±Õ|Ó¹ÎHH-ý™Éæ3íÁ!ü]¯Ü0öwZ,V¢¢Š|§jÆØŠ\:/l­xË¡½üë.íenœÚeÌ…&•â`µôOk¹8¿Tb=Q™s«}/g¥±°î¶JÙWH2‚ÀARõzœ¾£)Ãh3µ‚A‘~¾ÝàZm"™E:A¢ :ìt£Bȼð=8îŠY’û¢i·û¤¿râ©òýÇgïGã?.ρì‡Ë_ß\¼AÔI’Ç£$9ŸÁï”YHã4IÎŽ ¢æÖK’Åb/ŽccódüKrKÛÓ”64Ï1÷<zšûþš6ZY#ÕD̱"‡®Jô­ À1× “ç–%õ5X¡†SˆI¯¢ã
+!°f+¦ÃƾÔÌfEœ™Y2“®0†žpf¯)¥Ø—ïÕðP¹™1ª£(EmÒƒ[;q!jÀNâ	Ë®skæšw2£ŒíÁ7?Bà™R¿wñóòe?j‹/•_#ªÂÇD4ÀyE/3f1ä=8zlî
+¤Õ?†Æëa”!l±ÃÀÄX.ì0êâ‡eZ2Î¥ÎWï®dYý¾eJmŒÝ!×ü^o…à¼_+G+Ë[pFINŽݹ’Æ'TµQ¯0Ò¸41ŠÃÑ·¸ñ7a9Ól'VÕg„-–&~Å
+}×·¯wy:Þù›ÞùËØdÍÁTÌà˜\®œLöúGŠËÖ€q!]S|Bl¶/ì&ôTÀù£j2Lxjy¬E|¾:šš7*œ%®-Á¯6¾E¶6vÆ”ZBiœ“„î…ô|šc#¥™'3V4‡–“:CC=õáe‹,+¼•â=¥Á5©ä"¼“Q™á¡éPE#x–Ç­NÚ#|_ìßz(­¹AÅ•%l"•ôKŠ=΍:ßµ§nè›&™i‹lÚÉë£çùŸ6Vó€ÆM¦y‹ŠõmÓÖmã<™{t9X`« ô¡L?I³S{DSސÛ|­Õ;„ÎîsÅëÿ+3cŠ"D™’HGµ_+”ºAg»ÄS‡StÀ•8å 9LÚ*f³:|±ÌŒ—•G(ŠqM€+3õ,¸ð<^+‘V;™†ÑU!‚ ~æû¯¡ß9üòp<¬ÉUTj»'[€×ædlŒx§ªG›fÔ)ìêb„¨°Â¹ÓÛ{ÒF§ïdÁ$¼aœœŽãÍîGáb0B˜Ÿ|À´¼Ï<@
+é«ÞÉIïø%œŸ_á¨Û=—€À_3ïYg?"^0ì-3ÃåT¢ ˜¯˜rŽN ›öº/z'¯‚ˆõíÁ°’ˆØ¡PÎu®ÐìúÆ1QB¦¤º‘þPK
+      €~1            '  includes/htmlarea/plugins/SpellChecker/UT	 Œß¬AT]­AUx õõPK
+      €~1            +  includes/htmlarea/plugins/SpellChecker/img/UT	 Œß¬AT]­AUx õõPK    ë…}1M{Ÿƒh   k   :  includes/htmlarea/plugins/SpellChecker/img/spell-check.gifUT	 ꘫAꘫAUx õõs÷t³°LbbXÈ ÿÿÿg`h’Š?Y¹˜t@¢ y&›9ý+O÷2Èô(³U-Xø@OÚ×qkïì½"îg±äÜæ5RzÒn)ýKÉãOÃá…Jí2’'–*¿p[âÎÈ`
+ PK
+      €~1            ,  includes/htmlarea/plugins/SpellChecker/lang/UT	 Œß¬AT]­AUx õõPK    ë…}1º#Ó±ˆ  ý  1  includes/htmlarea/plugins/SpellChecker/lang/cz.jsUT	 ꘫAꘫAUx õõUÁnÛF=×€ÿaÀS
+H €«´EYj«¤KQ’‹±&7âZ«]‚»$a¶ý„¢ç 's0rË¥Hz õ=ý…Î’”*;ŠB–ä¾73ïͬþýûŸGÀy|êB(…ÒDhu|t|„Ç}÷‡Xaiu`è¼3ÇÜOƒQ÷~gâuOO¿úºû¤ÞÜÏt,Ó<g)ƒqõ®èÀ7׸æ²ø¾ýµC¹ø®åy>~ߝŒûçOzæaýà±
+ãa2„‹i /¼©Ï
+úƒ wäá?¡ÿÌûecǶ8¼¾$8%Jœp]ƁDQJ•:ÙŠòd%ð_@àÁ—Mm&·u½O·ÈÙ+Ð1S€!5$R)vÅi“!Ï"Š±±Ðú,15TWS…YSʈ‰YÍFCÌŽ¤7ö‰‘g’PÎ1
+ç4µkg¾…_¾°P†‘ãÿt‰EŸ_ÆÎàÜ‚zv‘JUÝ.0G§wj
+RÓ|õšŠê´Œ¥– £9)3«S3R¾“íóË4[-™n`g,ÔL
+Ì|/a.sŒ=op#&˜Šiœ¡Wò,˜2Eã“B¦‘²6¸39—âî*@ÑR„ñÍ•¨Þ‡1(¤lè(ç ÜÆ4ú€Z at BfÔ¶¶ÓxfüYK×ôrô2¯Þ 7iµDì–r&dŠVòý¢ e½Sæhi¾ZÒmôçȹA7@×»ú>Ä~¬qXFœB™KŽž¾‰e-‡Q8ÃÒ¯n8*@8-© °úP-#Q-[í–õVb?ˆˆ
+åM°ãwGƈçRèT"±JPª\H¥YMÑÚ$ÒùÜà0­!(ýÒ´¤m·éx»[zG:¸³A¤lÆ0\Ý9ŸÉVos™p&ÙÀ/šÙ-Ó6À 
+7CYw#¦ÜÌ uo¦°Ð9½ÖÔ†s¹È›g$¤ `Þè#³²?
+ÕCn"f&T´™!Lv†êA¹¸ûÕ$æ«–ؽ¨pÃúóÔ	.Û“¡8žûI_Ž¸Ê"̱4sLñ–¬ßal¶öˇ'J[”O»µLl«åM×mÞ§	7ò4“=1é³fÌÂXÈûÓñ†m‚’܃j¸-hƒ›ºu(|ßÈ´DÙlF•q_(þL&2ÍŒÕmƒM8+¡ XÎÓîÉ޶Ǔ-©Ïý¤µÐ Ž~Ç¿¶ÿ PK    ë…}1èa±=>  R  1  includes/htmlarea/plugins/SpellChecker/lang/da.jsUT	 ꘫAꘫAUx õõTÛnÛF}®¾bÀ§¸@Wî%¬,5LTÒ%© ~2hr´ÚhµKì®$$i?Çþ† yȃ>¨¿ÐÙ¥#ËŽ"Er5çÌœ™3ûߧÏÏŸC|z–@¥¤±¥´¦Ó¡£q”üÙ‡ eÐ…a2H/b÷>)F½3øâ<흝ýôsïÔÅFK;Sº¹E”o>Êõ²éÂ/Ɲ¼0
+Û“°R‹ß<ý(͠Ȣ$GEšå}:sÇ §!\Ž‡Q>„ËIWé$ƒAšÑ €8¥ôÅË!D¤o†0Ž“a£Ï³Ò‚ÀÒX(aU
+^.J. ¬kÆœlSü¸MQdWP¤0¡ÇV™+ë‹Úóf>;ãè+•…FÃov¡q	¸¬Ä²FJL(íJ8*‹újÑÀÚ=£¬TÍ%ódXQe¥~žt:yƒBfXÍQ‡~"¿Â‡ÎÉÅÙ_×$öõõ`^°çCÃzCjë%L7C¨ÑZÁåü÷ ëxJY¡Ø‹}ÂÉ¥@íA¼²\I*ñ @©®oó —ÜÌ°¦ä4
+5…7N¬•®M°)€,³ ¨G+œâ[¨¡”¸`›[´ž1†5TCÁÜR¿©Õ×ДÃ`·ŒWÈ`E}ØÜÞHßàÔrïÀðšb=“JÓ´Äán[©](î@¿§‰÷PJÒëa–‘Ï	uAÉÈY+àó9Ât)©˜À¹vÕ$Š\ÎhÄÊw>|œ‰œ’æäâý)SîèæJZ­Hœ|è:ÙGÛ.%8^I0^Ν_Ã6}ºß›{ÒS¤hθ,…7Æ·±ÐhN5άSìÑ—íú­Kn©”MÉ-–÷T÷›´«AK	+”7.ö%½“@³Ó„ð)eŸ8JÉe½]°*€¯)û`æ|ê(Ûi€åÂóý=‰‹ëûŽŠ8M¾9ˆÆ@‰Èµ›;Y“XFlÎÊ´`ËšÉê~Á•¶fsGëÝnv†=¯öHï)GñçÀ™»Õ=®eut7Ôî
+{Xƒ/È5·³Ð$YvxÌ%[ 僞Ÿé•OLÝB—Œ¡q³3G$Ž”6¢l/°Fð÷°FºiÎ{']ùÈAçßóÎÿPK    ë…}1qÆŽCœ  ]  1  includes/htmlarea/plugins/SpellChecker/lang/de.jsUT	 ꘫAꘫAUx õõSÁnÚ@=—¯ùV)åP‰’¶*qBe…Ú-Nš#ZÛc{•eí®å4iÿ½³‹‰HB À^ö½73ïÍhñé8BIc™´f0`>M¾M @œÀe¥±{¿¹ž
+Çðâ,ŽÇ>OÝÝik¥'p®Õýý	|ÊÝïWÿjõe0ÈÖ(DÔ`q‡:ôjŸáqð.ˆÒd/¾/çqrµŒæqtÀžr«„@	G(9zœsy
+«Jº"“Š½/Ȧy®±hzÜ/,W’éß±¾ÔuލGθä¦Á7T+n\§tÒ)]šà	9§T9j¼h,äxǤ´ÔFÏéùb踠ÖtÎ-p	$v°f5†Á³J¸.µýÝi†œèkÜŒÃnÈj©4‡GâÆAw×9ê~(ôÿ3~LÒååb‘.²ÃX^!—ÆY±ÍÐR'ÃFìÌÇÍœŽ«V–/…(8iFñÜ/HBòÚRÑÈóµnK
+]«KÕP
+3Ò"劔x]#Y%„
+ü”e+I˜ÐBÊ]†^>ÝÕ=òtÓ4¯¹dÂGãm¬loÞ*½ñò‡@f:Æ]YyÊ©Ÿ5(úµ
+<öœ[ë.Ò̤ë`gzë¦luÑzµáKæ	Q1Y;æòi%Àª ^1OžÓ|
+	­çüy_/ûÕž^Çiò¦3S$;5¹AFwH~È~?ZÌQKµZù.6Ò9ÃÐ’Etè…8ôÝq‚„l=åÖý¾¬8º"Û
+AmÐ>ôéÛb;n›`Â^ö0ì]è±øì@=,‹†Þð#-ìæU§YëcM–š#þRÚEmpkÁÈÚȳáûƒ™ÍÉ"·Ç> Ò_ü=üPK    ë…}1.sM„Ö  •  1  includes/htmlarea/plugins/SpellChecker/lang/en.jsUT	 ꘫAꘫAUx õõT]oÚ0}^~ÅU^¶JÔI“ÕÒ4lQiÒ%aRŸ—bÕØYlÑnÿ}×	…€(4BÈ8çܯs.ƒ—Ã2)”&B+Ë`â†ßG`Sa÷À½è&0¿§é¸?„¿$Q8üòµi°îJ²Á+ƒkò,E
+­ËÑ`¯©²ÂÉär°dª²	?ŽbHc7L&nÅÉïÌ5À¥÷ßM|¸Ÿ¦ðMcð¢0u½‚pá¤?|p¯£_>L‚Ðoiø|"8%J'ÂYtI’çUêb›âó6E?@Ámg¦¬×n¯v‘ÙtÁàGH
+¥TŠýæ´¥IH‰Œ¯rŠ‰±Í%zKE–…sÕTAmÎTd2gbÑ£VFªµsaYII9÷
+š=ÒÊiù/ÖÛñÝ›½y“À»µáȃbÝ·Õ sV-ÛÔk¹‚U-A–T´p&íž	NDFùÑ€Á7HCºa™fu]Ÿ$"©ƒ4Ä1hšc~”IÎaºÆ›ZV¹²·Ä³H.€šqÞ¶Å4ª€ZCIÔ±»uœF6±BV¨ ?=k‡Üß3Á
+ҐÂhæÇ1ÿ4I¡<lær%ðÌtbRP”ÓLãÛ|;lg?	º&JÐÑÇ“a’Æzï£«5š;g¹ø¨aÎ0ëÃ: Ke¬,dí8mÒè¸;$EdC¨Ø‚	› os
+ai¸ÃׄiS
+JbªQ»np“ìîjœF„á"¸-î‘
+‡!ßDšˆ?§A:Û,±›Qø¦©YÍƨy%Ë6&þmœÿŸÚv¿\€ý}oëi¿œQ³m‘-­ä$;ëÿ†¶Cv™Æ'¨fƒìPÏfGÝ°žh¥ß³p¤!%^¿™Þ™á¼îBg2Éj"MÕ™Ét‘†Yrö5Eá®ú'½´þ]YÿPK    ­l}1¢uRý  é  2  includes/htmlarea/plugins/SpellChecker/lang/en.phpUT	 fl«Afl«AUx õõU]oÚ0}ÿá*/[%ê¤IŒ~Hi
+[TštI˜Ô§ÊKx5v–˜ftÛßµ“B@!œsî×9—Ày‘ä,S V½°ý­z?É©N­Ëvz=ðNû>$RŠU´[íŽÿË ,*¬}7¸öôïI<êöá/xQÐí÷?}îž°³Ts™à–Í	ƒ+ò,EæJeƒ^/]	’'s;‘‹Þ‚s)ë£ „8tühìÄA
+ô¡y pjÃÝxèDC¸›ÄpLBp?vÜ<àÄ_‡à\߇0öüaÍÃëQÀ))x"œ¥@„q išÓ¢8idù¸Î‡÷0ÁÛªC]ÛK×gàl
+jÎ
+À
+2Yì§ÈtN
+L$|™R̍í.¨P.±4œ±¢”úžŠD¦LÌL4š`u$_Ù'z<QF9wç4y¤¹mô¹€?íÖ;Ç0òÂÛlúæÁ{î{.Tu²|Qe_É%”(2(	2£¢j†3ñhuLt"Ê÷F܉^#
+ëš%ŠITyu‰¬Ò0GL #hŠ% `r
+hÝ9ž”2OkÍ<Š4ñ<(çUkL¡(„ %ddFm«YÉadl&dŽRòÃÑÁ6Èó-c¬‘†åÃ0ÄM8LD–/wÛ‡©\
+¼gjŽšR((§‰Â§ézâöNtO¡½÷gÃ,ƃhj7£Ã=e©x¯`Ê0«ÝBl —ËB»ZÈÒ¶ë¬Á~›îÉŠÈŠ‘³„›°¯“5ciȵ÷K”.…Ñ›†p«¬æ–FîÆà#"f¹™/î”»1_Ešß&^üPo´{ÿª±ÞSãØ4—YÿFŠðk‰þÝ.`{ùëBÚ5ˆ#R`º5²æeœ$G7Áð6È-ª6ænƒjMî1ãl¸/´'š«·,_4¬Èíš™ÐËZ4Ç-g¨…Ö¶82ž&ÒP3Ξ¡¤(àY÷ä É·‘íÖ¿3ýš8ïUoòËÿPK    ë…}1c­yW  q  1  includes/htmlarea/plugins/SpellChecker/lang/hu.jsUT	 ꘫAꘫAUx õõTMoêF]—_qåU#G¯«'Ò/??è£!vjL¥·Š&ö=0ž±<ªþˆl»c™Å[Eê¢êÎÊÿêõ˜Ð$%P„¬ÁæÜsï9çúì†ïސ(©
+“Fw:gg0ò‚Ÿzàäs§ýÀ?›ß“xpú¾yìÍM®ª\ò™¨4ŒU¡²ï·º=Iüq!Ѹùü{[oFG^0yq{t¯¹
+ðÎ…«Qß÷ájÃçp±çÇ0!] þÔïCøkFàßÂèó53 iLð°`\ KÓ
+µ>ÙQ|³£ˆ£Ï‡0¡£Ŷõ4Þù¿•ù-˜œk ¯TJ¥5¿Ø…²!Dà2ó‰8QEÒì „£¶HHƒ–Íe¢R.3[êŒU+÷¤Ó—(„Ÿc2Ãʵ|¿u¾rhüÁ0º¼¦a/®ýÑпp`χܹÄ«Ç;]1õ½vº
+˜ÉÅ^Àkp}Ÿi,,ê#OW’;ˆ$Ôx]?˜zSYØ€K®sLAprAÝBÁu3ÝYª*ÕÎæu¸@½6hHž5[°™EÕ›i½‘ôcAí ­:„%T‰¸!­If‰K(Y†®ó¼š_®8ÕÐPÿ5ÁJ%Û™TÙ#+Ñ”à2%l4Ägðÿ#b‹³° ¼îG¥û0Òʱ¨7‚‘ÊÊÑjJ¬¸4 )_ú•bõƒû’„¢Ž)¶ûÉ,IŽb…”ŽŠjl‘wÕšº…]ÖÝÿ0ÌÜ’ssA¹w.|À5uFx×mùÃýiÜáLo°5$¬xÆ%6oh­0EÃm?zծܒqãøäi³L6gl·Ç±ÐÞˆöw…¢@Ó¥Ôìÿñòúé¯Í*V¬`æ†I÷5Yª3™5dén=À(ö‘í<L4Võý´
+Ò/“a|½Ýg/†Á›f]pQß—7ÌfÃ(Ò]«ِª:Özǹðsý@s–­¦ìËá©•áˆ-ÄQÿ1­Øólñ¥`ÉÑeÙîÊËùž°Knò`ÂúkÞ—³úOÚ˜’
+öž9«§"3öOmŽŒN˜Ooì@[fže¨oõ‘Ùc^–8³ Rð5,‘^Mç§'³ü"#öߝßÏ;ÿ PK    ë…}1R),˧    1  includes/htmlarea/plugins/SpellChecker/lang/it.jsUT	 ꘫAꘫAUx õõTMoÛ0=/¿‚ðeÐ8èa@Ön÷Œfvk·ç@³‡¨,y²Ü`_ÿeǝ÷úÇFÉi‘iR_Ù|ä£F#ˆÇ	ZµV(Û£Ì&ÉçÈGpžDéYìÎ7×Óá~Aœ§Ãñøí»á±‹tv©Í	LÅWҐi«U©àý?™þ’ý8ä
+J-±¸Eú´àçàU¥É4ξÌgqr1fqtÀŽ‡á9­4µ0òµhÐØÎ(	¾uØZ
+’Ômpäx…*PîäÚâ(ÕI)<êŒ
+KZ	ó}/Ò©¡>´NIQ»Ä’´ôjj]Åüe¥MُÀ™ð1,Úý†Fͯ¶0d-B-øpÿ,IJØ^V+’tƒ
+È) pÅà
+Ã`SÖLƒh™û.ªS×é;á"™.ìÙ*¥¹Bîo³ùH-֍Á
+ìKÚÚc=(IççY–fù~ƒ­ ÕJ7ˆ»a
+k·»›ÄN ’<ú‡9°L‰þ`uø4/+ÍÙÇ»ósÞH+Î%¥fÚº‘ÈÙÙÇêÅjBÈÙ|Å’ºåÃ^@ºÛÌ;p¤rs’Þ4ÏcpéDÐk@?K‰¢EX	²!@Ä&U7"‹ëw/èMÏÊU‰†•{é¤ît!X:pü®Âòn3Ÿ0•P•c.׬`›9µ»žN‰”'¼º‰¯çëåŸ\Çiòìl®úÍ~MÑÜÿn~­KZ׸n»ÿ±­¢õ}ÑW‘áзáÀT8iFÅÚbl¤(.
+#sÝZ²µm.ÎÁŠìrƒ#°¬b~ÈNOó{d
+½TîaÙU·ž×ªÙEªQÙ>i#鬐ïªÓ᛽>~´\¬´ü>üPK    ë…}1©áJ`  ¾  1  includes/htmlarea/plugins/SpellChecker/lang/ro.jsUT	 ꘫAꘫAUx õõTËnÛ8]¿âB«	`Ëè¬
+E¡*öŒPWÊÈr®–¢%¢)P”¸è*ûù… í¾?‘ä¿zIÉΣŽ3†aHô=çÜǹ!zõ:ªdcˆ4Í`0Ã<ˆÿž€§•7„i&g‘}_f³ÑkûwКRé	|à%áðŽl•BiL=óKI4-}ªªqÅ›R)Ç8KRÈÒ ^̃,I<³Ç ¯|8ŸOƒÅΗ|J–)„IœaQ<K𲦼K>NaÅÓ†Ÿ?‰ÁHc€Àšž«@ò\³¦9ÙKüµ—ÈÒO%°ÄGWŒKkWàé=3_)yø•Ê@­š†lµdÀ%mÎPˬ˜4{(â0-l¥a
+lì3“Tå\ŽŒQÌŒèKÿd0XÔLˆ°dôÓ¾Âø:øÃÃògQúá‹}Σð½>8Ÿ·W Ua‡·âº"w?8P<[kf|ÌYCKž»w‚âØ2.¿xC«C$eâ ÷@¶X÷ööÊáÎ85\á”/b‡‘¨kCpÆ%‚å˜æ¡V€þ°=À“ÒyãÝV`˜®¸´#Æ`‚u m×\VwÍ
+sœl¸ j&ÎD²
+Ô¤`¾÷0™ÖŠïû7?¥Ñ#DlÓŠië$}{åw´…Tç+Ž÷i]$2Ev)9ìÿéku¨8¹˜¦)®Æq ¢âHÅíUƒKN9´Ò6çæ»4»æà{?î|?ÿ±Z+Y íë=¤͙a½ÝɪNmh[Ù¶ÚþîJ|¿ÓM»ø€.F:€æjçç±»Ú[´AqçÝ®n7˜]ˆ³´[è´_;ïÑ‘»kÃjc÷ÈÖƒ‘lÛF=`Ô
+ÿ)ùÙˆ,,y¾_
+ôƒGÈØ¥êóƒé`ö´uÔÿ.£ì¢¿‚,Jâg't†õî]3ÙÊ»î*¼sV/Í
+áBv³yZÑ['›²îè…1¡ì‚y¤¬hµ—vq7ÿI¡hË™íă…Ù1l¸)PüÆÐ÷«‡¿d¯§p‡]„£Ýx–ÂöÚYß•ÝÛ^ðŽ¢-
+\4bóBýi;X-ø6WõttrÔÞkÒù§)Ì–;ÈàÛéàPK    ë…}1ð¢`õ¸    7  includes/htmlarea/plugins/SpellChecker/readme-tech.htmlUT	 ꘫAꘫAUx õõ¥XïoÛ6þÞ¿‚3p»ˆ¥8Y×;×ñ¡kÓ]†d	Vw÷é@K´Ä…"U’Šëýõ÷¼$%ËIº; @]Q|øþxžç¥ºøæÃíûÕî.Ù?W7×ìîþ‡ë«÷l2Íó«ËÕÇ<ÿ°úWγ³<¿üy²|µ¨}£–¯[Ô‚—ô?½ôJ,éÍwVpö©J±÷µ(„]äq•¶äqý\›r—v׳¯nÅÒ«øR»\Õ‚½üsÝÚíœ
++ŒvÒyÇ̆ylØ¥ÌVê* 0¶‘J¸ù"o{ÜN¥_ø­äÒî´ˆ¸Ù¯Ž}Û”ÜÕoXXdi‘µª«¤fR{a7¼ ³lBbC ‹ _=`ÚÉŒêypJ(xaÊ žtN쑇óþzþ¦Ó…—Fs%ý®/ΟÂU¦’EVTrÀ¾­øñŠ¹ÂÊÖšûX%Ç8óâ‹©ä£ÐxÁš®ªÙÝí§UH2œ€&1a­±î"p~§DV¸}váI at jdxW”lklùIq]åBKÓpt‘žw¼ ìèRWJºú8,ò+‹úlygM!ƒyöQŠ-Èz¶'k:ò_5Òåš	]N©Ú¬P’ÊBÕŸŒ²š°uç½!6
+ ú$QJoì	ª©Å–Î¥Ù2‰³[¡)Uéë°íþ—kêí¹§Ø$KX«{-½%~ŽIï„Ú챨o(i§Ë>¨;B"®/©÷ˈ•…Xl„™t™Åp ¿d•2k®Ø#·’¯•8FY€ÜS
+nÁþdo¢äP\j¹„½²Ø8ÊÜVÂ÷4ÿxûË
+U‹SyA34ÙòF°m-‹šPÉÖ†7	¥ßíã¡hc­€Œt•%F´Ï:þ±³Øƒ^½%+¸RŽ½‹NB„1´Æ’8)`œ*uÂzÞ‚¨bGÆØ•gV¬;©Ê[ð@ß(@£= úNJpȃۇà1÷ Æ­ ~J$SJ<p]U	G¡¹‘»…cm›,*œ+Cÿ &ÃK1Ä<®9^¿oMŸ½‡b¯âüSìooUØašg\þÕM誣(8=ìÛJÔÖ
+o¥xHG=u…ˆ<xmL%AÉÈ
+jwÀqÂwíà–#·w&ÖYz:ÂlÝ@£ŸÑÖ°z™ÍG/òäøE7Y8oћ彖a>8¾~·ÈÓãƒ)ÒZS!¶ÍRÂñWBïÎ⤂?aHK¹ ¾´H?40ªPÚ˜›CëÊý,큊š[^ ..°A¸ñ£Xŵ õ<’,w¬åÖVÚ‚ÇŽ„ˆ3£>€ö{IîÙbbmDÂ9ÚÃm‘}Ÿñâ8‹e“¸Ÿ˜-i&'DãQª·¤Â'x;¸ÈÑ‚ó«¶bs1©½oçyŽÁ¡²Jw™±UÎmQCœ9ymÎcS‰1ùÙééét6ËWá×é›èÆKÌ@Ü…H¥…°šf_Ÿ˜—‚Xä|y|ÀñFpi‰œDNÛ5 ¼NÕ¢4Q±Ó,;{ý:<Q(‹ÚQ	Ð +¨ ±C“A1˜L»¾iTɯº_bhÈ“
+›Ç×~Î\Éé¼uo¸2vžvYQ¾,ïÛ
+›ïéìëpK¸ú+T¬©sÔ1M‚kˆ¯£/p½Cã­8¡EeÌCÊ:•”4PUpB5€‚}°hþpHfÐ妬°¾CYôx¹	çóˆ·ÈÃ#F½S[®h¸¨'ˆÕ!¾·!0¾;A4hÍî´Bì7]o¨ã™9\+Ý	5º̺Ƴá`ï¦Sjwõ4h9ËØ@'¤ý5flœ^”¼Ñj’‡ó	±EœýýD¬§kNÂ:¸b¥ñPCHB‰ÔMœ#jåëC¼.Ü
+û
+׆ÿþf-:-a.Öƒ)hº›?…Z+S<|ö†ŠaÂÓŽNŽz}ŸžÄß5*WC]”?øƺô†,t©Ä©0¦¹‡tÕÍOP#¨º÷‹8×0㬣‘[˜$ƒ´SÕÞü¡yi:7¤¡>D_7M/4‡ä‡­öÐ_ ‡êì}‘…^*ò©t™IW¶^6-–Á;NŠ8¡{d¼W|á´‚sªNñ}x0w¹#“ê(£RœqêÐ:F×;Ð~ˆ,òqúæ_Öt÷‰ÞtBÀÔ4€GîÁÁ»&ÝN‚ Ò”î63ˆ$4#L\ļ̨RÐ7×±IÙûV㾸»1e§Ò\³âs'á5O?ÿRv¸è/ø¡Ã;A¶ž˜‡Áäã¿ÿñ¹vwA–ð—ówømá[œ%.`q“tÿ¼˜üwïŠ‡É÷àËøUñ'Ïý÷Íu<öÃíÍ×æs¼òŸ‡/»ß9«‡'Œ?“Úåm`-¹)y·²ªöpÅ8Ö×D8¸A¸¦E¿Š\
+bärÏ®ŽRÑ7ªRlx§Â käX€Û<¤A´s¦¶,Oaó²$a<«M¹Ó±8¦É1kcòÉòFÖ\²øoFÇìûݯßL§ì=f;&éÁwì§N±Ù6;ŸŸÍÏÞ°ËK|õâVpΦÓô~]7äòdjô]sDŽšË$”V€Ùù)›ý}>ûn>›%€|ÇF 0¥=fiŠ)}ÕÎYú˜
+KA»á¿^yüŸœÿPK    ë…}1hA€3	  #  <  includes/htmlarea/plugins/SpellChecker/spell-check-logic.cgiUT	 ꘫAꘫAUx õõ¥XésÚHÿÎ_ñ‚™HŒA‚q¦6…›Ä&Wùª1Ùɖ㰍ÔBë êÆ„õxÿöyݺZ‚dRµ|Aô;ú¿wˆƒg`¯yj/Xl¯hBÓjÀÍŠ†!œÔ½§)\‡ë%‹ÁORx7»8RÒ?²Š/‰y’R[Øl6‰hÊ\/Ø"¤V’.‘é,Z…4¢± ‚%±ä¼`að†ü7‰{±Ù¶·Iê–›DvÄx$vë ¥M·
+~Ž,<?e\¤l±xù:öÐLPàh šF/­&8
+})6‡8Ì¥pñþf\-04ÎÊÃ5§`rJ!D–˜SK|]K™Ò9óFÀehú®M?L–̵Ü%ë=ÀФq/ìÁÐ>Âðhôâ£Á¯9Ó¯+è´ZR½4ÜŽz^ÿeö4ÝÄ£ÙóŒ~£ÑkuWvòáâ|4:½ºÈ~üvæ´ZÑ:³³‹éïst"0Vð} !<¶ ?J‹èhôŽýN9|Ù˜°¤BàQâ{èºx˜£÷4•"]GÉ4”Þêüf÷Îi=9
+©ùúêæìƒÒ&.	é<:Zˆ¦}›ÙéÙeŒ‘ôÒpôó«÷3 \ñèb½Äûùoå=æu1Ý4B"é÷œV…C$‚„óM’z<ÓTb”B¯Iàëå’r‰Í¥¨`($Ñ÷·g.¦#Hé*Áˆ%œhš&©eY-QhŸØà"ú…Ü•gmÌPH9/+\G< réR²")‰LCž¡M$Ý]øóÏœè&É=£»TƒÆ†2x¸Iì³å:%X„¬TÙIl«¸º?áTÌ3ªi„$^½ÌLá~&*!Ê£ñ~ö¶ÿÒ@ÖäȲožŸÌOfÿ¾žVz$NB‘’ø„‹V^‘°âõó+8òè?‹ËW$àU-tY5Ÿ ºoX‡iêKxIë²{¤y2¾?•,¡a"éžnù>Úð——y^|†˜Æh
+4 	•%jæ¾÷êùÊÙŒ®_CY8o˜æ^™5rncǽŸWI-Áç»ËÆ&?ã	èÉï©Šý¥½¦¹¬J̏ѯ+–bÃP
+<ÌUŠÍ"7- Û®ÙÛU¡ÝX¥v ¢Ð7N‹‘lq2Zûîìgîe–ÕPDå³V~e‚"rOçH	̏ÍvRRÂDµjìq~ҐœûiÍIš’-ÚfÞ*oÁ˜ÉÒ¥ÊÐlíÕ»Ë]¯à¿(KM¦·Ûx,0pÔ€–æmÃR)±|Ô”fFh­É¨+Õ›VS*3°ŒŠÑ0]ëg•äM5ÖðœÅFáãQm(üLmn˜:­«¼äX)1Æ¢#,F› kò¦»
+C_¾|:~vz¥ú…ÔpýþÍùÙ	´û¶ýÇщmŸÎN3Âk0„YJbÎTÜBÛž^¶'­c	4ù…@įˆ
+¢¶‰>ý²fãöIV`ý´
+y¹Û»+ˆ¶ÁF-!‹ï±±‡ã6[ìÕ¥¢
+㹤Ëy"ê12n“0lCR¹µ½@IZŠQªänÊVB×ñ™<ìÝ x )ì¢üq/úŸœB`܏{AÿäÀ±]†¶Øy°‰·…$âÛ{ÉÆÂ.…²0߸²POABí€Øò±_¶'Ÿª w0§Å|0kÍU`'úŒ!~g»Vå+‰ué\Õ«jPöšùRŒEEbTÊFFÂQF‰(f¦³¸D~bŒ1 M4èñ3I—Iüä”T)¦Úé8cÏYù¢èh}6Ç4ÕòSH¯°xås%üT>Ս·»g`ihüoÃÉÿ·?õl;c©JÅcÀ0Uï^÷«÷uÙö¤¦êØF™±§"gƱ-³>9VàŸdëµ\úq%^P²Ì_‡V‹¯¸ªÜub¹»ÌZ’WFRû\¯61MOw)hl™2”Fí;ƒà ‡½j‘rMQÉ•h—ÍRnõ²fZ+‹Wk!F²ŵÔ*Áš•…„ˆo[ÛçÊöÖ¨³G¥GƒÅá¡ÞCëpy¶GõóçÆ•ó¦RÙm¢)¥bÆÅê^	hˆËOõ 6¸É:ô  TŸ,ž`¸"\§0Ô¸@-ÒdÃqƒÞ‰SÍ¡r>95ú7kšŸg/‰0'5ƒÊS¥rGF6ƒúæ­muÙy0gŸl§.›of•Šå¾µµÛƒÏ	Ó.oúíÝ=—|ÊP-ì;re\¿Ëõ|ˆÀÅJÀöþê›âO
+LÔ[‚z©qÈhá©4kÁ¨ÞI¦Ù;9®Í+|Siø/ùÕrýZä/ٸ߆„s¹[﹯)¯Þ ¢UãJù
+w©Þq둈Vê.Iú—\U÷æ=3‰¬V4öNz¦l0åµ$y›=9/å
+ŠRÙà‹vUÞ*{¯mÞ~\=žñ?d¦»Ã®­Ã]ë.a½µ,¨J’ðŸFÏñ…z…íõsÏÇÃç½14{Šçïžüœ&JdßÜyÜID6Ök=úZíæBuùᏥ-6³–Y×Ì[v}ÂblEââÁø{™=?Æîù»šëžß4FyV7G…¾»ƒùï…šqÅŽ„ãj.'ÌßN:ÅT[CÀÌv=¶oYÊ…B¨SMæäl,jºaÜ5—zŽÕêÁJXʽÆc˜M?Ìæ—W§Ó&ª2D±ïxZý¬ü4•K]´ëÕ<ÿë§ðñ¸ÒMÓ	î9’`á
+Q?Ç4˜ñòßšâïªÑèZgÚ•êoÝ“KÚ|{u…­e’ý!„O6·í'‰ÞY²5933+‚&8+‘ /VÚn’™¦–SNs§Z²y‰yŒ}Þù›íŒ,/q_3Ÿ
+] È7Wìç4^Š D
+•õcdväX`Íf’ìÐōê‰ÌvQ½U˜˜žO/¦—ûaѶÙ,´¥GØ7Ë ˆä{~¼Ì¡H¸•>ÖaZ?w`xzìŸx.WtbüvJêoß:
+åo…ùë»b«ê-oÝJâžn±!໧SûâO¹–*¥Š|ù–#?rö3É—qÔlí‘|Dõøhè *Ü*õìsMûcA÷Rü½›Í·›BîÿuûÊíà®ðMþÞýˆ{PK    ë…}1He§ÆÊ   Á  <  includes/htmlarea/plugins/SpellChecker/spell-check-style.cssUT	 ꘫAꘫAUx õõ…ÑŠÂ0EßýŠ¾Zéâ
+Ÿ|ó7ÒdÚ†ÆL™I]eÙßDv1èãÀ=gî]µLè½ÐŒ52Ã7´Ä¹n)F:)ø˜.`µh¡êšfff!V`±Ó³{øY¬M¢O˜EÚŒ=ÓlmÈg¤2Ø%ÁßÑdÛ<йL®×wúkpxç.©éËM»-€icˆåÏ»ßõ–¹ïQ¢£ ÉaL^_
+·š‹ê1nÉYÍËy­¼ã´:;I[ó¨ÿ›Í-óPK    #x~1,T±†e    :  includes/htmlarea/plugins/SpellChecker/spell-check-ui.htmlUT	 ‚ѬA‚ѬAUx õõ¥WíoÓ8ÿŽÄÿð`@b¨iZ:àÖ¦•Ž
+tÓÁ1±"î>Mnâ4fNœ‹vÝÿ~'MÚn·ƒI]çyý=¯	yÞà \ê‚fK&6=8ª¯¬¹N@ö*K
+:apöñtþ×Ràa˜ô
+ë9˜×ËD×°–¥ˆ@fbc…4¼\÷¢àQ- Ñ©€‹ÏoÞŸŸñ|ÿËèÔ÷ÏægðçoóïaØúþÛ?ˆQ @­ó±ï¯×ëþzÔ—ÅÒŸòoŒŒáÐpÕ÷ýHGdV¹—9N^³.D¹äÄèÑðkÁ¨7ê¥Ì”,X‹
+%4ei¶àÁŒ>Kvžæ‚¥,ÓTs™Ú<¡ÞÐo2ë32Úd´@lB™ú)W‰”¾á¶ž…GÐz/ƒ‘θÒ_”(³
+6p+44+RT5v#šŠ‰¸bœ'\A&5|ø|9¥é8jëm©<SŒ@’L±¾¾ÑG}‡Ñ“óhÊ å…(¯ä}eo…!xiì;öC4„áh|üz<x	•Oðö&‡'FŠç!àçM*25=­áÉÉI£::AÂh4«Âh®›uâøÕ¡£H™¦`ý]òÕ”œÊLc$¼ù&gÂêiJ4»Ñ¾Ñ30¡…bzZêØû…€_‹RaÁsÌfdtô_éŠV§TNÉ _™~EQ'ÊÑÁÚbB¥ˆS6¿{°Ñ¾CÂ8ÖdžƒÁÓ	¤´ÀLà ¿™@N£ˆgK÷´ áõ²˜ ^(…,Æð8ŽãI-´>ø§>¥cÁ³ë^W\q“@ß[”ñŒu^ÄBYØÄcºd¬# ‘+̸-[lì±Ù¼D]oÍ­)ÖòîÛþ¦ÔZfïhˆ£9JnœŠ1v^LS.6c–È”öКˆf´§h¦<…µˆ^X:Å¿1ÄqhÀjÙÀãÂTÊ!#,€]äºáXóH'õCKfß$U!…B±5͈¥-ܶ}ÅB›¯Hë??dÅëÑ«ðU¸5¤Ö…,XOËUä7 ¤à‘³Õ½[HÄ-í¼¶~=÷›0˜hQÁ—(¬sl]„×Îé…Q+í^ Àc‡æ!¯\W9»5c°€…k°/!Èð3Qm‹Ü‚ÿÊ`ß-—vdy©oÓóõÍ"Š!Je&IÏüW¹ÍÍ–˜Ç««°,
+Äï¿[€lÌ}Œ}W—jAM5f¾Fxî÷²ãž£¯M=(›Ži2uËô]Ï´608h%¦„g\ŸÉ°4ÃéÙÙ6) )X!Sq•ºqåO –u·Û	¹äa?\rRÛiþ°û&ÕäRa‹Ô˜ØW‰­9×y;ä4Y®½º“Ïów؁Û³ÀÆËuÏ„GËd(oJj‰ÀQc|uHÄ­_´ØÔ"Z'÷–b­ù«û%¾:Èít·XWÐ}Gq%™%h®0ñë;ŒIˆ¡0Y‰É3%ƒêÙ%“ynÆK ‹ÙÖ—@GF2b8_=:•ƒ?!³6AÄW5OŒ	…,…áÜc
+Œ†ÙY'æ§9hË2ƒ±ªAƒÝj‹=gª1¬ƒ¥v²Z†]1®þ˜ÅUÁl~’Ù'VejàWﻎøèI÷ÄheTåFf‚Q܈ÖWR€S*p -«Âj÷èïù…ÛH´ÅÞo¿ˆ•m¸Èã'¨RUN›–z wGáZmÑ~;'wijX’Ù9þ¿/2]åvz‘ÙG<ϨÀE¾ˆþ“©²¸
+t«mr¢-ō§Ý¡2°9–þ
+°j˜xG÷´à1+N$mrÊ\
+·O[+nàæ{ç~FïZÖnEƑע’œÚ–Ø­Ÿ“ãf›ô‹±lGO'fÓ
+E³ïvl¸¨FŽ]Bö[Ä!ð¬]ë
+|Žl—Ú|Bl!ÇoaÍ¿Sšßj˜ìöz_½ÈeÕV\­;@í‡ïžIpY.—L™v§~,\ç4ëšá=ã]å‰Ú*¿¥§îÚäšZ§{u-
+Ü^m?Š‚f×öãTóMÄyFÜ:ힺÓøUgQpóµs†öVš~°å˜w¤=ovÍ|ÃØ®Â^{ÞÝF$Ž¥¿ß–MҐf8ÑÉìÔ^ÿOÇÙŽ0Ü0
+`c¹‡Þš­¤Ù MÚÙ‡À~%ãí¿PK    ë…}1PÓª/;
+  ì,  8  includes/htmlarea/plugins/SpellChecker/spell-check-ui.jsUT	 ꘫAꘫAUx õõ½ksÛ6ò³ý+N&¢ü ì¦w׳ìô'¹jš8¹Ä~p|Š„$Ä©!!Ëj«ÿ~»€(ŠJÒ»óÛÄb±ïÐ뱏sž$ìrÊ£;ž³÷Éb"R6ÎröÓõÛ7Ïs?
+Nö{˜¥E–ó˜Vl¹\áŒç"
+Ó‘%<Èò	B
+fó„Ïx*C)²Aߊi(Ø‹ð·,=bS)çg½^¼JÃ<šQ6ëÍD1ͲlÆý~ÔeÖ*ûîääi€/E!s1ZH `‘Æ@«œrV Lò|V°°(IfB<Ó¾ë©(XšIqöö—×¬áŠ	 0’Äç¢àÌ/8g	€¤äƒìšœÇƒøŒ(¢ãEt¼Áçâ螝Gھöžž²Ó§gßÿíìä/LqÃ^=ÌÙã}Ä 'ñ<%i„‰øM‰e,Ζ@q˜ ¹ñŠ%Yc úy˜ƒôXÿ¸»æJ=F;l)Ò8[Ùœ§<ìÅ>‹ÓR ³‚ÁéWý}Z.TÇd4–b(8À˜¯}Pk<2Ëëg¨¯
+bœ£R.XºHõ%ZäÈÔ+eÎÒ2ÏÒɯYÎçY‹± ‰\°q˜úì0Ièïk}˜xà±ùxs«>‹É„`)Ã¥¾?^¤‰ÞñË„‡éË,òá÷=hºì÷ý=PYœE$4˜pCó‹Õ ö=0¹(¼n RJPwÞ†Õ)ä>Á6E:a÷ î˜DØéïﯚ˜Šg0ñ4
+¥_qÑX´JŸô€À—ðt"§}v|,سvÒ'Z	+Oԍ þ÷öĘù,¶Ø“'¬÷Óóc2ceÅt^/ $Ÿ'A”„EqZëvÞ=ø¨ñ*‹9°[ð\¾à@Gø±Èy9I|Ç#Éõ9Ÿe÷œ@|
+±ЂkÐòD Ýk ÍƒkRÆœ|š-’˜µü”çüˆA<`ƒWíL¸g¼ˆî
+¶˜c” <´If`Ñ”ñ‰†(§¡dÙ"góDþžç	ºð
+&À‹´#U¤µ§à›’ð„éjbö÷r.yºÅ‘ÐvðoŸ¼õŒ'þª`KeñêHYø‘ö,•c«9'±\Btºã±Oúù:Řpã9VMÃt‚F:%ÌW ï–²Îó:ð{ëãaµ	N3_pÜçÆÎÁqôÜZ™;‚k<®oÊ|Á+0¿YP,F3!ýº˜
+°vGFè&Š(£Vò
+­ç RA·«¬Nk4J²‚ãAFÓ:9çBþ‹x✌"È¾ßD	­‚Àf¾RÏ¿~\/ß]½|xûüzðîÊ»ÕÔàöìNmÜ lÝJ\ÎçIq,è…†8ýYÇâ­ZºZ€FÓZŲ*ס©14T†÷èÂ>¨«±¹±|YH,¡i’ëñÂþ7ÐGø½OŁGü)D ü
+']XíMŽ˜Ç<-5ç!!¶%
+àp8+¦Cúâø¨¢ØÕ‰>ÏöIK2Í:s,ÊÖ£›K»Zàø9*Ó]Õ”‹XCõð€"è>Æ¢öðLîÐPNžRùG'ƒæ„Â:°Ç–S,h|½õ‘>¡‹™§BrC«·¶8U”Gê}xŒsJ˜@Ò®òZ¤Pd.(	Y6Æš_(
+–ž³íh„2ò5¦Õ‹ÀŽä—àFŸÙ¦—,D^—†k»[’'Ïs,ݝoz··‹K¢ày²ÌþñÂŽ‡d¯ó0ÅRÈTt7­ºÕfB»´-¢µœ(KQÆá=O±ÈŠû¯Ï0“i8ÇŒ]¡ìõ‹ü	U¶
+T›°¦3NG»nÙoôòށboÆ‹"œ~®¡KAƒcŸ<Òd+Ÿ°î}òXTÁÜ¡V™€;ø”zZ$ŽnvØYCò1„êÁ$…º5¢ </~´åÓ¶ýƒ"¤¾Ê# \ñnÓJœþh¢ñAÏÍsV-	ÁÄ£"(v1ÐÔœE9îd U™ºV!+9
+dP ‹Š4ì+ÁÃä+2U"B
+úy1›cùˆ‹)”J§Ø¥5ÚF{^$êÿKD±‰ÚIQÝùÿWDÙç´ÓõYž:4ig¿Ê$»Yqy[þ¯wqéöâ\•ãU “«9§>ҋŽåÚþ†6Cf©wë6g`š´£êÅd8Á8‡u3¦:´¢9n/V×á#¹;É@KôŸ©Ò±;¿ÏvçWµ~ tó™ÎÒESaÛ…m˜Ǩ
+üô±êúÊzÄ4}Š…©j¬r™P«â
+ƒ|KiàÈ=l‘Æ"Eék4õb§„W˜Ö–®ë
+ò¥–“.ã·¨PmÎöÌèa«áŠ!ØíÇŸîX6Z>ÝhÛ–¯¹¡Ùîoã!JÆr4ï€êG!ßM FfÀø$ÉFa ^I1ã¥1øJ±¯3.„·hGþÖsuA|ª=A–R¿ˆçM)å|}€À‚¹,Ö¦úÃé’B¨O¥£é+äÃ÷ ‘’c ¸¢Öj¹ÉìŽcÚúêClÊ}o+‚#f
+Àõ~‹üG†`¤{«"^£ê·ÏŽFCŠe;ºµ©_Ÿ$MÇWÁ´…
+ñ'íÜ]?¿ž3vq@Õh{¶±k?VáµíVa¾ƒütœ9{cè’p5€ïývÍg.ÍÖ ¡ýH5pö:Ã<öKœ²œ¶þg½²qt³é”NHÏGE–,$ŸÎçªìá“E6\¾ác¨šVÖ—ëlÎŒ›—ßÓœÐÊšPZ]läBSÁ<`¯ðÁƒúeþ_9EW^cÂîøŠ(Ï’Š¼(Ð20]†ðkbEhh/6IE]“ì—…‹šü)&~1¤ácöý&?ÆPHöúO\L¦H\
+ÓÜÅÔ2CÍ$ÿú»·%íw áãö6”Ó Ï µûKøÔû®k†
+ä[/õ§nÐñŸÕæÖUmëªÚº2[›È4„©óŽÔ
+Ó]ß
+šJº%øª¾²­¹Þ¶Ô2uÒ[ÜyS­hë%\¨‹Eí&Ûûšo›„á%Y ªþÚÛ¸œÑ®@Q¡uFf
+¾^î"ِȁìšâ!ç^¿dµ=?W9’C8JÔL345ô9Îv&ù2O¶âÐ…¶6äpsÜ ªp(}¸ÕL{î¤ÂÞö³M.3»·öU@¡=U¨ëÐX•ƒ˜øÜKµ²-sšj#öǍxð¿ r0”¾½£^—&­t=äBã•Þ7ׯ;îIFa^»*ñ^cà¢ÉJéÈéÐ%1uûÞùèYçf8óÞè™×qüBs°í*O¯ª‹3_è!‚ƒà¤¿Îd‡‡Âʧ¤`ÌêE³9%DKŒ´.’kf Ú& %ÔßU@k¾Ò@-VW|5d×ü®}¼J'L¦2·ö(4šÏ¥ji£lkÚj°ÀM4fþÌL5)êö˜¹VZùµþâÛÚ»‘^—å[!W	tŠ¦—‚³{ýíë£$ƒò¹}Àfú6[üTƪlÙÆéžÄÛŠi!iæ¾$ÿÐNrŽ²Jñjƒ;V¶MµA‰™Êz­òGøw·š_e„#Ÿ©ûàð>	dÏ„šš»xÌŒœÞf
+§ÃT¢@û?¥6ÅÓ3
+!¤]o]†.±s at 8ÖWÕ‘N|ó>g¢zL’Mãä	ä±hÈêêmÅ^Ã{‹½Ú³Š½7{›*ãBµöU7Õ^ù>Å}•äŸ‡lšóñE_ËÌø±„Æ1˜ÊYÒa2Ì÷Eg8JÂôþ2ák€HEB±tÙy†ÿœ÷Âg]S´ [¸1¤÷÷™þ±/.p¶Ó8ÈS3Ãn}—“ËD¬ŽiŒòÖä¿Œï¬öSÖKfÈÝß Aßè5\5¾þh8Âü Á|QL}ëÁÇÆuš~‰RõÇV5ÀeGÅïË’öžýñy÷Õ›$š_©CpùÉ“jÄ6,d6Ws!@Ñ×Ã~ò#+ØힺÙW5oEÐC†%Mq4ë é@,¤Ë;iRć‡ý}g~ê—e]@åzõr&ˆCÖ$i®˜Í8Ó™º–¥5M^/'¯5vÃÕXXI¬å*u½¡«àüâGDêœ*Œ8gTG¬káLÌäïyÃ5Ey÷žÝ¹¾z7|õáû‡—oÞ}\ýÓÓw>¯&q4¢Ð[׍·|þFpzoNn»-÷ËÔ µŽÐÛxü¶¾ü¢†Ëwa“›Y—fîsýÒdøfpõ3ˆkpù3=þñÎ(‹‘• †È§0òÒ}Jp´ ¾Š}PÎ1!©ƒc)_²y8áϤõ8Ê/‘Uh]¸ä¢ºûÀQÕ¦ÀTöp
+qcB†üÒv=Ã?·½NSp}F£A/ó’Û¤|q/²AÔ×4MÝ 	¬)S(z7:+„™1|u@âìýû~pÐ}¬ý
+{­cuÆ>yõ0Ÿª ¬›SeW·ÿZñÍ­Å7õíÍEyËôPK    Ôl}1—zXu
+  §.  9  includes/htmlarea/plugins/SpellChecker/spell-check-ui.phpUT	 °l«A°l«AUx õõ½ksÛ6ò³3ãÿ€p2åe7½»že»—8ÉUÓÄÉ%îôƒãÓ@$$Á¦H
+ÙV[ÿ÷ÛŃHJrÒ»óÛàîb_Ø@ŽE\ð¹$r9g'd÷²wMo©^
+N·Ÿ^|ž³4%gSß°‚|Lž‘q^Ÿ.Þ¿{Y0ºÿ":Ø~¢ óLäKÈhIîîî":ci6⣔Ey1Q`ƒÙ<e3–I*yž!ì{>¥œ¼¢¿åÙ™J9?êõ’eF‹xÅù¬7ãbšç=ÄV¸Kœï仃ƒ‘úòšYðÑB‹,†å”ŒÉŠ™ T”|.KÇñbÊÉrÉcFÞÿòù‚I—„“±TÒ.#¡`Œ¤ ’	É{ٍJ–ž
+’#"PUû1ªjÁ£k±wK£¿#ß÷{/Éá‹£ïÿvtð¢e"oîçäÙöEvcE¦´BSþ›VϘ§ŒÜÛ4ž“%Isš€t`„9-@‹¤¿ßÝ~rKm)k¨rdz$¿‹ò9ËX¹ûžþœû%þpÞG~ ÔT˜ý`	‰!g d—#µ`>²„˼¨ï£W
+ȸ@l‘¦f)^(Üí)þ·»"Ï&¿æE"üõYžð1Ýœ1M…e€¦©þýÁîÈïYbW/¯ÌªXL&L€ïï\„í'ãE+kÌè
+;KÍ^çq¿oÙ[¤Ô%¿o?Ù&y¼@†£	³¼¿Z’0 w’t#žQQ@½óH4/—Gä‡åÙ„Ü‚ù¥Íl¿¥d6U²ƒçg1•a%JÑWCe„V€)Ë&rÚ'ûûœœžƒ¾fWÑe©»ä¨†­->&áSG6òü9éýôr_9·ömµe/’ «¥QœR!ÎÁ„Ý®¡¼«Ú;Ïó„Ì‚òÞ"Œy!äÙ”§É0 Ø®£l–ß2Z Ì—»‚ Aâ<h³ÜA˜æ‹4QǸ2Á”l@¸ ƒ7íÂýÐ4^Ä7‚,æD4!…%sð”xJ ^¢oÊ)•$_džƒî?²"Å“	ƒ70‘u¤ŽDà[©	Ñl9m@ Ù*˜\ÙŠ†Ž„‡êŒ ÍqÏ_5lém£<Yîi§ß3UVsÞ‚)õœA»aI¨mõu‹!ã2ðÜ6žÒl‚^›pµ
+-– ¡àŠì’Î	:ð{åãa…;ß/âQéøp S<Ñkh¥ÚÿÞP:ñÏ«,́oœEb1šq¶hKÀðU…'ÃÆãèZב0Fò¶Sæèv­ûÆi.˜ÚÏÞƪÚþ7c–ú BòEé·³¤¾ƒJàÍBm¯ý2¸ž}8;øôþåÅàÃypU²…òƒÛäña#Ÿ›§4fð¤–|šu¾Wšïvè Z°Æ—•U,:±#Hå“OOܝºV)MÌ.
+èqUhù®Ç÷ßÈlö¾ˆ?Þ„SˆUÅ*ìtáko²G”
+ô¨îB¸"«â@‡31ª¥—O[„Òl×,d7uO®£¤•6ôÍ5¬ŸŽ»Ö>#
+´®ÿÙˆÀ^ÅîL÷UÐÑ|ïîªOeÞ1€^šÓÙË&Kê@g”•ÜM±F
+
+öS³OWEçR}½rÕ[:K¹­AT[ù;Ñ2˜9NoyŘ'…j“äc¬åИ°¢2©sºVípVÛeXÚtÎÀÇä#ƒwë©Ze¨¼àŠÇþf£×ð×ä`VØ#xk;xŒ°Š—iK üo/ˆ*OžÓë+[,^®ÕÔ•õ…f\èÀ8v—àe†%E.6@”!] x×pœ)c®O"BÎ`[òöÕ þ„jÞU퐶]ËcïÛþªXÐÛ1bΘt¢Ìuº!ùs×Ê߃/Éc€Á=–à+‘hG_²ÀªÆ3ÓÏkK]–U >˜dP+¡m4@(fâGOOk	|Ò¼Ô)@ÍÜkù]v•´?Vñ{§WO”N•
+˜RF¡¬Á  Æ`T;EÊ;hÜTÂ6´a¡hà,Vóˆ}-œ>¹GD®KP(r¯³9–§ø1ƒòTX5ˆíÞ²9½s¥ûÿSØñx{_ ñ?cÍÝi3wP™Ï™		ç¹$—K&¯ªfrÿcö§L÷ N\Ä)Žjgƒ„ßP [áoèodžWµöW¡8Ý ¤Œ‹¸jÛAÝ$ŠöH+^-/è@¨Ú}Ë®U嶟×^ûYõŸ uy­·3åXc燝 ÷T/úåsÕz–NÙyj9ÞÊ.
+A<HÚ*— :¤¶hcž¡),¡zU"Zþa}h±—¯Òl±ÂˆH²e|±e'#+Ýšˆ×ýù¶©Ñ}š>gäV5›+ºªÕ'r<D9G18”U9s‘5ñ'i>¢)ú'ì™%p’„T™"b¼¡0ƒкÐâj¤(ÏT÷Š›[«C}} Áâ¼*2ÊÚGa†¦Ù•JIãé' &¥1F
+8ª~l¤7‹Ÿ$
+ù”Ÿ8,ƒ•$öHY]>(­kdÅ‘@-ˆ^u
+†Z{ýk4TqÏ£àFµî`HÓ6ªè»†N	/ƒmF¯sPO4…PµnMw𲑠Öù5|§ôß$A6Î=äš“”.°Þßä¹Ï·3Ù°«VxÈÞüBïü˜£Z„8ûógµu¾ÔvTk‘載<]Hö1þX§Âäþ³K>&ß±1TaKgå"Ÿ“2 ”«ÕtÓͶP¬4÷òÁuMÝãÜ ¢{³°´ËZW4Åq»MyêȃW F%eSc@ºžº™&ÓH¤[–wÂêH-µ<¿ò²ø>ù~OåMBPe.ÀOŒO¦!´ò4­¹OkÍ 4Ò|+s4¶ØŒWmD}÷TN£"‡Ú ¼ƒ¥ÞwÝrR¡aŽ±áÓÚAþ·l"/ëÈË
+yY"·ñj¹Ó[îiÑ»a9Âhí2ÔíÇ×5µë:üUŸÖLÆJm&V«Bi£ ¤¶ú4'hMõm;¼¬3å•r[({BTðX;ÎsÇß`‚vå4u³I5›¦Ž¨ƒ ïʼ>·WéR
+¥zKm}~Œs‰ÍB™a×1U¼uoÚ2ýÐE>PÌééƒÚèÄEüÎG”w¹;p10ê9à6ˆVõ%¦MÿñRy̪R…©šôVJø_YJêÞ^OéÇÞ„ùðê&óÛ«â
+wA#ZÔ®ƒ‚·ßÔ@µµ‹uÔu¹<Ç£ÓÎ#fKãÞè4èÔœÿıòþÒ|ÖW…!/ƒ>ü:ö4iéíîr7+s;pnœÏU"uÔC{$™	Êx`"‰þ§*7´Ûe5öKôÕfÜ»Wן!>.дlÍï i:¥¸k,lj®Y®Å'[\Òúþi9Ø4ìè_,xCòZ¥6˜okª¼&þ¡ª…\¦,2õ-zc± 该9”æ›g-è½ïó…` ð6ÕÏ港n‚uÔ²˜ô1™Km⧮ÚvNÁïL‡°/ÀÒ¹­Â(©«îÁúÁSüG¥rt¥¨3};No)O1„eDªŸ¦`g‡Ø	ˆ‡»³´jC“½T<
+_2Œ.\…ß#iʞ͇Š=<2µRx…uÇæþ¦zÂ³IX¾áÀ©¯àäc;€ >9Ê+ÚÊóe«íqÊVý	ÊVóýÉVóñI«­|¨
+]ë~P>ëñŸv…Ç”L6>éàC£ۗжFS9K;DÒhŸt†£”f7ð?—);é\ DÆcЍcÜÎ)þsÜ£§Ý²WdyHb~Üû8µÎõt³Û@óÓ OLp²@­¹Á¹Ë¨²©ý”˜Ö÷›0xlz-÷`­oeÚ6±? G4_ˆiè>i\š§;N‹®àª¼làØmU0ß’?þ€Êñ¶zÕ¥&kfüþüy5
+™Ïõ¬
+ˆs¾œ$⶘úჩ©®f1|¾ËÛ€YHd!k:PfåÉîn¿ìtÀ	K²¼P=Aõâ(J¨¤uÚÛörîêMŠËÚ]M‹OÚ§Å5 rÉRÓ¸	°W³ñCÓ!œRöя°ÌVUŒñ·qvy¨,ð»²˜·]lªÄP{}à]ŽŸ¾ùôéçÏów>ÎÿØk­æã_5­T,¶
+ômW›a#ã—WÝu7íª+[^hÐ|NG׿¥S}^Y6Ò¶sè^úotÌóœá»ÁùÏ ºÁÙÏê	Up¤ ö4™:s¦Õ-¥NŽŠÀ N3^oBH¸T­#ÉØ™Ó	‹@¥§:ÍÂ’šÛ7ô¬O±mvp¤ÖԝN8¾‹6gy(·Â·“;ü{Õ»?
+Ø/áÔ0áËlVkŠÝù4ûªÆ£µóкkË/šéf×áÄ-R=¾¾ãPŠíýûa´Ó}f‚‚ê!¬Ñõ6ŸØäÍý<zvhâ¸éHl5)°®°¢•ù¶^fC3ã_£÷ô;ôÓÿ PK    ë…}1_ڔŠ s  7  includes/htmlarea/plugins/SpellChecker/spell-checker.jsUT	 ꘫAꘫAUx õõ¥UaoÛ6ýlýŠ›P`2¦HrÓvƒ
+h²
+Å’~2C¢(‹«L
+$e×üßwGÑŽâ¸À€F ñŽïߝÒ[Þ4p[sö•køÜtk!¡R>==ÜÔ<¿ºN² ¥D%Ò¼„b»Ý.É7\–ËB
+O”^SÖݦmø†K›[¡$¥>ˆ:p“W2†ÚÚvš¦å^æšÕ	S›t#L­TŠ›iÄÆ0ˆÂÛ,»N(ð»0V‹¢³H “%rµ5ƒ$Àr½1›eÖð¦rûžja@*+‡‡/O`l¾™uçì‡Èp
+¦HÃûÍŽOçÍ]9C]±^¢äooa’üJÔÞ¥Ù$½Î ˦oßO³ÐþøÖ› ¨:ÉœNd¯qÄKa•Ã?ÁÈ"¹¤‡9ô³ ms
+¬ZŸÖP
+Y‰õ¬X‹!dr7ùíO,šó`aå=Šçã$fPeª„gÔ|a/¨Uª)¦³ïZ­¶¢ì/ö@ëâ‰øä9,–OjF´.P_$âŽØ“²“Šf!(o$*ˆ~µ>aäa’¶3uÞæ:ÇC‡cÊ= oð†\¢Ã.)|¼½
+áÂ]dr„r%Ç“Ü8ò‘(cÔj!Êe|ÔQlÖ_þºú}&kQ…1Ç1T9V	x4€ãMúË‹‘†'ßÇQÆR˜6·¬öÒ¡rÜà[ì…ç<gË>á3Ňx³SµCìN6Yök/ôñ‰‡ ç’ûÄž	âð¬ýæã»pȇà€xá•U½w²R(3ÂHj°ÓßôL(h˵!‹Ÿ&IFë%ž¼Q-ÚʯæÀ‹øªÓ
+Å<(­ÔNz°Kp¦ŸNÏñ~:Á
+'xTLp»¤ºº0¨|q¦Ñ?ž±k»ih΄¯ôÍF-âuM“7NžF‹p0NÂe0ZžC`ËYe÷-äA³d»È¿G–#]j’a­)šâE¡Wƒç,.¤ ƒXÝñ™oäNjsXõ[œ†ØE½kL:Üžj_u"!ÑÂ#ÎNÈã 8íD˜•à¾«0ŽUð©v	ºDF®25êíʯسû¶	½»çRōbîDϥМ!YÁ
+½âü·{ÂÏTçóq˜œ`Óª! —„â‹ï9ºa¾ç&Þ‰ÒÖóY×\¬k;÷>{=§þ/û1l£d~Œ\ªÿ_ɇÇÁAü’J±ÎDn©@õ¿žæÚÕ
+zÉyip¤@Áaݨ"GþÂþŒZÆАøI¨4~ /ÜrpÙeÔ
+³à_PK    Ôl}1ÌŸA[ñ  ò  8  includes/htmlarea/plugins/SpellChecker/spell-checker.phpUT	 °l«A°l«AUx õõ¥VaoÛ6ýlþ7¡ÀL‘ä¦í§.Ðd Š%ýd†DQÖµ2)”wÈß‘”9uËÃ&ßÝ=¾;Þk¦°1`ö
+Ÿ†?šäK¶Íüjða2†$û†×5\Wœ}å
+>Õí”RÁŸw·ÏÎ/ât2vH)´T¼€|»Ý.Î6\!ËDŽyÍc©Öv³ij¾áÂd¥°Ø;¬2„«ì›TÆ4³$)ö"S¬Š™Ü$Ô•”‰=íBvƒ}x¦±ÛùµQ˜·†’hEA	›Šƒ¦DÀpµÑéCÞ€Fóºô*Ô ¤AÆáîóýh“í)If\µ­æjΡ&ˆÐ<6æ,>¤ôꦘ¶R3/UüEG[˜Æ¿ÚôÞ$é4¹H!Mg¯ßÎÒwàK‚?x5OÆe+˜“ÃÉÝ©òTgðÏd<2”aì`þË¥=:Úf
+X¹>¬’&¢Äõe·eíiã›éoõ»yýr77â–dìV#‚Øð>U«øšºFÊ:·L­1d h”Übá]`OAã<ÓgÓ¡ç°XÚVÛÐn ©MÙøb}jF,¯è#,!ü‰;Ȩ£Š›VWa y“©ŒÊÎú	xMwæ¡. at AlÁýõy ¿XîEêiG¤]ÜWt励ˆH·˨7ëÏ߆þ 1ñË "ƁxÁYeFq#Ç<@µÝmF”H_ ê&3¬êD$
+¹ÖÀ·Ô% ³«G|²€!ãåsÀ§È•7]v‹G:õÐ'úxr÷y|¸ËÐJÓ­PÕž¡ÿžŸHžœ1ŽL´ò—~#JIª[.a›ðð7{¡›ÕkË•¶-p at LãÔm$D-ò[·1Ç€U«jøñqx¶’;Ñѝ$Ô~”=>v£®ì,ƒ{ɐ›ýëBà øÉ	èNt#䙽2›ÚŽ¤à¤–]CÚ–±:¶uYÏO‹‹`0{‚%­,¿ç¡Æ4ÒÎú¡‡ˆõ‡Õ;´žûß6[–Qⶋ†gÖ+G±¾T/ (ÐVdTË/û†oÑj8‡•?ä¥FóVÒÉð|2ÞblD;‡‰Ñûõ
+yßy„ @ôYÈ]LΡnÛùzå¸Wl`MßYAgý¹Q-™{¿ì÷g”0rmÒÓaZ÷^¹¶ÃÓÐyæ¡VÖ–É¡èð[F™ï¹ŽvX˜jþ.M£Šãº2ó7oÓS#íW0HŽ:GK‘õ;§RøÏÏóÅæ—’µ:ô‹9ÝÃ×£¡A>vo„à¼Ð4| ç°®ežQ!h~¦›1r)½&¥¢—þÄ­¿0ùÁx¶O\ˆÉø}âÿ¥ùð/PK
+      €~1            *  includes/htmlarea/plugins/TableOperations/UT	 Œß¬AT]­AUx õõPK
+      €~1            .  includes/htmlarea/plugins/TableOperations/img/UT	 Œß¬AT]­AUx õõPK    ë…}1K¯µë^   e   =  includes/htmlarea/plugins/TableOperations/img/cell-delete.gifUT	 ꘫAꘫAUx õõs÷t³°LbbXÈ ÿ L*þdad``fЉ‚ä˜Ìæô¯<ÍÌ›q!›ïV‹N–Ö‹
+5Ü
+,šQÓ–¯*{§ÒÖfþìÅܐǹZûLçü4í̲%Ö PK    ë…}1ð¹O'k   v   C  includes/htmlarea/plugins/TableOperations/img/cell-insert-after.gifUT	 ꘫAꘫAUx õõs÷t³°Lbb8Ä 
+þƒ ó²020°3耔€Ô20[WìºóïÃÏÇJÊüI¢×bÜC“غÎÉPïU|`ÔÀ³Ü76ùÂËèõâ»4súÓÿJiàœã•ªÂÀ`
+ PK    ë…}1aÚ_˜k   v   D  includes/htmlarea/plugins/TableOperations/img/cell-insert-before.gifUT	 ꘫAꘫAUx õõs÷t³°Lbb8Ä 
+þƒ ó²020°3耔€Ô20[WìºóîÁIf¥×¼Ú>	‘=ò½U©3öÔ)¿\v
+Ÿ3&wvYYþi¾µ„YÄ+æûÇé%:Ͷ)ù^SU¬PK    ë…}1×/µn&  €  <  includes/htmlarea/plugins/TableOperations/img/cell-merge.gifUT	 ꘫAꘫAUx õõS;hVQþZ;T„‚NÄ÷ ,F*VqÐÑEˆ¸¸
+Ž'‹êÔ¥|¾*nÅY$B[WÁàRpê*U~“¸ÜK8'ß+wéêås·ç0‡mtùx|¼||EՏXÛÚQ	\@AR …(Ta
+WPŠTÀ 5˜Á
+4„!­'‹C6 èG!„F8A"ˆ$€,à"$$¡	Kx‚‰HdçâXt
+¹@j^]­SÍRDUÔD]”¢!šƒzµ«LÕU©ª9ôˆu×LÝ”¦ašC¤x5Ww¥k¸æP.ìûFu*©AÍa‡DµPeh„æðH²‘,ÕS™©ÙÆ•»5®<kóÙ¢K_»&ÒØ&îâñVJ/ŽE§¤æµ¿bÍÒÌÝœæažÃtéƒÕëb…ëž#	aë1v—ô çˆG¢EZôQF-ƒçÈL²•[ö}¦Gzvµ%¯Ò®C•aÅUÉtŠ"í…IO¤DHäˆVÚòr·aØö”·X»fÖØ´‹K -±Ô4!6BîͶ¿ÆfIF0r¬‹ôȺÝÔ«=ÙÝ!_—öI-Ë“ñšŒ¯ªÃf¦€8ÝBÿ˜½…ݽ‡®¬óÓÃÙÝ©›Ÿ×_,bzêïî±{¿6–>ùáîÓ;KOö/Î?~ðíç…çǯ¯Îlž}smùȉ÷7Ÿ½ÜZ9s`~ãÑûµK«§¦ñûëö—WG/.ï[Y÷ýí=Ó8ÿPK
+     ë…}1ÍY›   ›   ;  includes/htmlarea/plugins/TableOperations/img/cell-prop.gifUT	 ꘫAꘫAUx õõGIF89a  ¢ က  €ÀÀÀ 3™ÌÌÌÿÿÿ   ÿÿÿ!ù   ,       `xºÜî&ÊÂ;FèmêËÙ¦y
+(„›'Eg‹v–1 íFƒ:ãûIﱡ@‰ÂFˆ42‹Ja%%X¯S…¡` x·G¨–뀟Iít…ÅÆÎx󽔇Ә¶þJ§ú©	 ;PK    ë…}1R X 8  ‹  <  includes/htmlarea/plugins/TableOperations/img/cell-split.gifUT	 ꘫAꘫAUx õõS=hUQþÞ£Ãë R—Jé Å¡"h°`}ÒÁ‚CLjŠN"‚[#nR»—ÔŠ‹KAG‡Tl7Ý
+ƒƒâVÜä)×ä.÷ÎÉ÷—»8º>éÎCüD•¶GÛKÛ—gù›ƒc&A	FpBÀ 3„¡c8#€"P	\R“IÁ
+i¦pE$–lƒÌà†0ÀAvˆCæpG8  $ x "9'Ǥ“È	’óòjž*–DÌÄB¬ÄFìÄѨg;K˜•Ù˜9š’ꊰ
+›°GIZGEY•MÙ•£)'«ûb¬ÆfìÆÑì ¯¡â¬ÎæìÎÑ<¢($	Ö`öà(ãÒÝ—ž•ùV¢S_¹FTØBª¤Fê¤Ñ¬¤"ž“N"'HÎ+IŠ¥ˆª¨‰ºh4Ó©f¯Ê2\ÕhI•±êš©›F‹‡¼DŠ×Qó\–E)—¨ûê¡QAæ^¤¼L;e†W&S)•B5Ñȝ<Z´T–§»ceO:Qy“”k"…mâ.m	¨$¦š"dE'‘k3ÈÊ_±biænm]¨Fæí¢žín|lö:µw¹,ºöêÚWÖÔŸ‰ð³õ'Ô?ÁÆ“gnìÚÞÓÁ¸·òyw{ýÞßñôƒïŸžžšù°öâîâó“s¿|»º>±ôêöäæΨ?Ýí]<Ü<ûäåüÃ!öÏÿXÚºp¿kë÷êòúµG3§n¾ÿ5Ú¾²óuãÜÜêÇ·+ïîàòPK    ë…}1H ]   d   <  includes/htmlarea/plugins/TableOperations/img/col-delete.gifUT	 ꘫAꘫAUx õõs÷t³°LbbXÈ ÿ L*þdad``fЉ‚ä˜Lçô¯<ÍÆ8ŸC™×òœ¤|î°NiH›ÖëbzB²lð¶ÏùæóÞµ=°f¨mJšXÁÃ×|&š‘Á PK    ë…}1
+;“f   o   B  includes/htmlarea/plugins/TableOperations/img/col-insert-after.gifUT	 ꘫAꘫAUx õõs÷t³°Lbb8ÄÀ𰡁¡á?00 at hPüÉÂÈÀÀΠd ©e`6©Øuç_ÀDGÎ*çªÛ\4º+Y҄׬ܴo­´~†Mš"SœŸõü´ëÙŒìN†–ÙrBÖ PK    ë…}1–sÙd   n   C  includes/htmlarea/plugins/TableOperations/img/col-insert-before.gifUT	 ꘫAꘫAUx õõs÷t³°Lbb8Ä þÿÿÏÀÐÀð²020°3è€T€Ô20WìºóïC£Cã…sU®m]çl«Œ2woÊO>vüÇZEï™/m{ûÄWvVÈ•ôf`° PK    ë…}1Åû;  Œ  ;  includes/htmlarea/plugins/TableOperations/img/col-split.gifUT	 ꘫAꘫAUx õõS?hTaÿÝÙ¡”DÄ!]<ÅÁ@Áö ƒ‚C7#:Xº¹ÐItðpédZ[çB;tpHÁ¡vÅà Ž\ô”gòï¾/¿yó£k—.ß`€¨Òöh{iûò¬Ïþæà	BP‚œ0ˆÁa(ÃÎ$`T`„ÔdR°B„)\‰e Ä 3¸!pƒâP‡9Ü(À	hÀˆHÎÉ1é$r‚ä¼¼š§Š%3±+±;q4êÙÎfe6fgŽ¦‡¤º"¬Â&ìÂÑD’ÖQQVeSvåhÊÉ꾫±»q4;Èk¨8«³9»s4(
+I‚5Ø‚=8ʸt7Ç¥ge¾•èÔW®¶*©‘:i4+©ˆ'Ǥ“È	’óÊ_’b)¢*j¢.ÍtªƒÙ«²W5Zd¥G¬ºfê¦Ñâ!/‘âuÔ<—A£eFQÊ%ê¾…zhT¹)/ÓÎC™aÆ•ÉTŠDå…PM4r'-•åénÁXÙ“NTÞ$åšHa›¸‹G[*‰©¦YÑIäÚ²òW¬Xš¹›G[ª‘y»¨g»›šm¤ö.—¥C×^]ûÊšý=Õþálý	õO`z“™S[¶÷xzÒ[ÚßZ›C¿÷w2\ùöîéñÙ3oク3ÿüèÜ…g?~½úhjqýæÌøõ¨?ìö.~¯¼®ü9òþÜ÷ÅÕóú»£_×_-,wV·~ØÜ:½yâÆÝý'KÛ÷¿œ<†+ÿPK    ë…}1MrDna   h   <  includes/htmlarea/plugins/TableOperations/img/row-delete.gifUT	 ꘫAꘫAUx õõs÷t³°LbbXÈ ÿ L*þdad``fЉ‚ä˜,çô¯<ÍÌ/½ðó­;ßÞ2¼¨ÁˤÄòrUR[”în¦ÏU±Ë?ùáT3Ï?ÃÐF«îTçgÎZ1k PK    ë…}1•yŸ1m   t   B  includes/htmlarea/plugins/TableOperations/img/row-insert-above.gifUT	 ꘫAꘫAUx õõs÷t³°Lbb8ÄÀÀðÿ?CËƆÿ Š?YØt€‚ µÌ–»îü3`sÍšúYÀÀ‚GÁ£DÖ­pžKä‘SÛ.*ž1‘¹Xªó¸‰wïô	_l;\e‹2JfïZ1e"ƒ5 PK    ë…}1ˆµ¤{l   s   B  includes/htmlarea/plugins/TableOperations/img/row-insert-under.gifUT	 ꘫAꘫAUx õõs÷t³°Lbb8ÄÀÀðÿ?CËƆÿ Š?YØt€‚ µÌ»îüû0ÁÓ3D9»úë¾ö酁®N«&MصhÝ»g,NInŽzŒÌ
+ë®+³4ÛÈ3j<y©µý….#ƒ5 PK
+     ë…}1Ç•Æ•   •   :  includes/htmlarea/plugins/TableOperations/img/row-prop.gifUT	 ꘫAꘫAUx õõGIF89a  ¢   €á€€ÀÀÀ 3™ÌÌÌÿÿÿ   ÿÿÿ!ù   ,       ZxºÜî&ÊÀ;FèmêËÙ¦y
+(„›'Eg‹v–1 íFƒ:ãûIﱡ@‰BƒÂ D›E%fE]¤†€vËÝ^—Ý°ö;­VȨ́ډ…ºÕX‚|N§cÍøC ;PK    ë…}1«Na&    ;  includes/htmlarea/plugins/TableOperations/img/row-split.gifUT	 ꘫAꘫAUx õõS-h—aÿýÅ°%qÁd¸‰D:±ü`ø1Ñ°f<³Ù¢‚LXÑ%?Â	â°
+5ΠLÁ Ö…KÎ ¸*SþÞ=/ïËñ<÷ûº÷ÂòùÅ37æ0‡tÙxl¼l|EÕv¼ú²K
+Là‚¤ „$”0‰ ’€BT¨Â®EjO
+: ܆,,‡8èP‡9ÜŽt  4`D HH‚	MX‘È,ÎűèrÔ¼ºZ§š¥)T¡	]ÂÔ«]¥¤‘N™ChwUiJW†2‡H±>ªF3º1Œ9”‹÷}ušÓáÌa‡DÕ =ÁI6’&-éÉHfWîÖ¸ò¬Í÷]úÚ5‘ÆV1s±Ëa¥4ñâXt
+¹@j^û+Ú,UÍÔ\-Ôr˜.}°z]^ášåHB¼õ¨w×ÝÂ-G<-R£zÔ2XŽÌ$[¹fß÷´H˲ö¢äUÚu¨2¬¸*™NQ¤½Pé‰.9¢•¶¼Ümo{ʉÎ[´]Sml׍K -±Ô4!o:…Ü›!Þþª7K÷ë"=²n7õjO÷vÝ_–öi-ËÓñšŽ¯ªù?û'À?œè?¡ÿ	Ì\ÃÞìá‹›þáþÌÞäêÖæ‹%ì›ü}¶¸räã½CóÇ߯>ºùiõÀÒÂÚÏß×?¯»rw{õÍ­kg·ž/¯Ç¥‡+§Ž>9¹óõ)oÿøuçíƷǧÏ=¸¼õîõ÷ÉgÿPK
+     ë…}1!M;Ö‘   ‘   <  includes/htmlarea/plugins/TableOperations/img/table-prop.gifUT	 ꘫAꘫAUx õõGIF89a  ¢   €ÀÀÀ 3™ÿÿÿÌÌÌ   ÿÿÿ   !ù   ,       VhºÜî%JÀ3%è]êËÙ¦y
+„›'Eg‹vV! íF‚:ãûIï±a@‰Â‚¢ D›E%†@­Z­RæsëÌB¿Ûìu\õrÑ%ØÙ]’ÉÙ•|nH  ;PK
+      €~1            /  includes/htmlarea/plugins/TableOperations/lang/UT	 Œß¬AT]­AUx õõPK    ë…}1Óš¸å    4  includes/htmlarea/plugins/TableOperations/lang/cz.jsUT	 ꘫAꘫAUx õõWÍnÛF>Ç€ßaÀSX €ëþ¤²cÇNIdÉmE®¥5—\b¹”Bµ½÷P?€‘KuÌÁÈ­—"íÒóô:KrER–l9BSÚ™oçç›þ÷÷¿OŸÂé³½&ØÂñU¸½µ½…?6êÍWû`ÙkŽš‡­—§úûY︶¿Âi·UÛÛûæÛÚóT¸©¡ûðšIä¯ñ|‰Ï\ŒÊÿîÚÂû1Ç>nu ×©7»z¯ÕéîëÓ€g»ÐnÕ»GÐ>ëÁ»ÖY[Í^ý°§Íãþ½“#¨´Î qÚ<Êõðó˜(à”„
+ŒgP0Äq$
+Ã'¥[ž/néuÞA¯gø˜ù¦m3þ~Wg †,üçCÖçt}'æÛ<r(ލŽzÔW….*¢i]ECëgêÛÂaþ E£6ZGd¼ûD‡§GµPIÔì¦Éù~ÙÞzdÕ9øÖþ#ý°Þ)F~2õ“k';çp!"	!sh˜	¢Üù|Jí¡ÃìJÅók†¦HâǙα݁‘ïÀm1!Ž=@ï8ó©µ›}¬÷ÉÔåÄA³ ]’ãéPY\ÒêË8,…KgÆ@¡”ð6¾µ_
+>ÿœ)v»ÐU1§öºÉÔ£ä"æ1<F©'¹<	tØéS§n~J1Àm)0;Šé ßkÊ9G>ú"TúÑüw76@¾*Ç¢IДù5uòã!‘pX‡Ü'ÆFÁ9	Bê@ßDõÝ®âdvE}Œ‡p%¹¤ Q2ñ€ÈQžÉ—4´%[
+T[,Oçñ+X¥Œ5h
+±Ž¹ ê!n"-TòÉ-þX–xÓI¦]™0ŸP6>ä
+ë<ù2ŸÆžˆ1xX(XÑ<ò|¬]qb!¯]
+J€G倾07Xo@ÈEØóÏX† =¾¤ŠBˆK¦^,!K1¾¶@ž_#sÝ»O=2 pÖiA©ëöG@ôe2¸Q&÷:BN^ěǫ*ë™~ƒ ½ªy1ábþ]¤¦A/ÌqÚƒ8‰ìä-‘æ?$+-MË\™9߼ݮ­¦ ‰]"ÍüU³v•Le¼+5ÑŠX¹{6ÅcjŽÉôÛ8œp”:Ÿ’	ö¦‚ãíl¾ØœÙ.NdG(<üŽ½hõÍv¨0¹ñÀEÊø³HG >¸ØsÐþr#êd²ÈR ‰IS9ú^WivQs®ut¼aÌ°y’  DBŸª1¥>ü)-â;¦Êð&kö‡Î–Á„Á§—gc`yy±û°MÑ
+Ÿ#͵w9j ¢	Í°7„JMÌqVåÖ•€Š fÒÙQ7 ¶žûÚßÀäþΠ¾¥ŠwaýÞbFVÜ”É懑çáRQv‡Ò”ÑíµjšA5‡rì!‹U¡ë‘	î')E¢ª$óC¤B\,&Wšr,zf`BVêô酐Ù%·u‚¢6ZÚþ
+›ÒþV¡­Ÿ%ö®¶F88STlXÎì#g·뢒²…ÚÉ;£’+TÂ"VEe•ÒR\DŁªˆ!_׸òÔ¬3¹¤q¡/FëäÁ'Î*ÜKn/颪³6Y•f‘¯õuÙ¥÷åvO#¾ ‚­ô´ûè|™È–îͺ{i%…ÚÆ©!ÅuLï±éTYô’|sÒm§xº1§Ó…jçhm¨ûEUs¡ˆƒ5™ÞR“º±§mFd³¬ÜÂʺ¸™aÛ_rçåk•Ò»K>¯¸_µÇÇ_åºFY®\·¢¢)°QšL¶ša0E´úRZé©!6ܽ­÷2šOuÁí6Oô¹f–MøƬ±º#rœÊ“å—¹Ÿ™£†¥õãÏäf~mVS|Õ^ÓÄ­e«@.wÒ{Û¨KJ`Ò'},Œžã%7Jg)«O|uå4åZށG¦wW‹¯Ã6ml”•”MWc¥¸i1ËàXØ6¾ZQþþ²”—súß··~Ã7ýÿPK    ë…}1Îç-–/  §  4  includes/htmlarea/plugins/TableOperations/lang/da.jsUT	 ꘫAꘫAUx õõWÛn7}¶¾b°O
+`9p®Ó›ìرjE2¤UŠ èµKI¬¸ä‚äÊ1Ú~Nó
+úÐP¡CrW^R«8†aÈœ3‡s9RÿýóïË—0<=C&…6DÝëáÒh0~sIN’c¸_N^íÿóôºÂp6韝}ómÿÔb•YKu3C©€Ùã'‘SU•Çð¶+?iIýÊI&‹ýõd
+ét0žéd:;Ç5»pzw£«Áì
+îæ)¼ŸÌ§p9§ƒË†ãë	þôæ
+“wW0Ž¯¼þ|EpJ´[ÂY´ ŒÉsEµ~±ÛâëÝéô=¤˜ãGŸ™
+«ÉöÕ3[‚Y3
+ø+¤RjÍœCi7¤ÀDÆ«œâƘ`A…Ù¹¢†…u5TýýLE&s&VŽŒfQ'/z½” 夤Š†­8qMùþè%ÎV"9?zúIî8ɨJŽ•ÃRV
+4Ë©nÁ¬…Â’)êL}A²ÍJÉJämB\^­”]ôM94Üò͸ʨÇHe)Ä-ʧeÔûÖ&iŒ,öéñr6C)=ð`ûdf°—¿¢í7"¥-SH‘2C¹7S,ʝ’XNâXº¢BoȢ蒺Ø6»¦ûš„Vׁ\{£äœ”šæ°ˆóNfÄ
+B”Pö³j\d´Ý5Q[_Ú×TgŠíå—\P½QlK¹ö¸ë7ÐÅ#…åŽìšKbBÄÏžK…ô ‹F­šç[<²Ìn([­#Š›ÇO¿ç~ƒy¨}^e.+žÃƒ¬€³
+#³^Ñ-Cr³•ÊÂW6X6)U°ÅÖæhRp„¤JÞž1 T7›NÂaAÐ>ŸŽÂŠ2ÔBî×-ÊV†-Â\G=‚Šº{#‚±D™”úñ£MUGti"Á¼C  œù-Ò±H½oÝÞÌòœÓÃrKP»6Ĉ¶ÊÏ„ìi"ŒetÒkˆ3Þáø´9ŠôÎOÀŒ³lƒs[£eÿã!k|’[씏ãìs_‚i·ªêMQ Ýçwêzà©-Üc?”%%
+ÔÜÛûˆà’Sy£QäK¦®N¨$¨Ø)G®¬.,Ÿámä.÷‚In«¦ú
+ëR¹ðv<]DuxO<qK[çuV’Ì^06ß2n_2XÚ[>·‰Om¬}BÖêUðèdÄ)ômû9åÔ´5•Ìp¡ÕûÈ„Æ÷É2¾˜Nn“w ºl®ÈmA—R=m¹-?…^nfAùÙ¼s	á%ª/GƒÖ%gm5ã<À*D)˃¥ifaúLqjmE呇ª³ïHî§ÐäPã(ŠõP^¥m`“ÃBn»BñA$-¯J䝙×^AâÖm¯cÝ£¢FJ7LÂØWYÌœà[
+‘1¯…ZÝô>Vã·.o´F¥kŠO
+ûTrãº5"ÐŽ	[&±Ãs,KmOø¾Kí±vcÖÙwnÊNc72,¿6Úε«»5DäöÌv[ï…ûYºÝZéuíga8©ÍÛ°q=\´–M9B9ù•ã#4ÍQaÆŽððõäaÀ¬jð;ÄÊ·áígFø^¯¼eƒ–Ò=Ç›Ëÿ–›u4*Íëôñ+„=@}ŽßUúí‹a¯+ØáÐx¤…Ü_Öød«³÷¨WéI¡äí?OØŒGi¬F;ñ°|9c}6cB<¾_šà©r‹À>à5ÙíZÒûëUïPK    ë…}18–x {  Ÿ  4  includes/htmlarea/plugins/TableOperations/lang/de.jsUT	 ꘫAꘫAUx õõ•WÛnã6}Ž¿b* oñ´@š^¶Însi'ˆãØ¢”4¶S¢ARq¼mÿ½CRJÖ&vPœ3Ù9sÈœœÀõûÓ)$²Ð†FF''p3™^žA”bt¿M?Þ}º¶ëùãÅøþ…ëÙÝøôôûÆï­í¤4™Tg+ùòr?¹¿¿ºßï™ÿ2=²XàÝ3œÂ¼s†FGÑDðeÙ€hRjÅ“Ì`»]Y*Ð<Eíͬ•ßÁymxÎ’ÕRɲH[_W¼0¨–Ê~ô6/0:ƒý~,‚k‚pô¤JQµXíÙmèpkê7‘ùÞA	=/ê´>Îf03[­k·„¿hçooÂÖ¶¨­Ác:K’)¾0Þ©Š÷JRý
+·U|ó Ÿ	QŸ m[ïŸi­8ªz;cê€Ôœêo–B°µÆ⺂o w•œñ‚©ØwìêDñ^ÎÑVy\Kguq	}—Ð:¹’™C’lXÜP,Ç=²¼*Áòevˆ÷èJbæv%7³bK³+ʼа‘¥Ha+K|…`$ä4 ø¡v=q|æHü™­™ ’Á†¡
+¤%<£Š9‘¶øÐõ­äæmÇßÔañšëëœ-æ7AK8¹·_ìþï¥6|±Ý¿&Ñpò†ÑAMë¼Z»-\Ôn‡+Ï [¦–¼8¤
+Íðßò4û‹
+Ao¹1¾ƒS	ª!5þ@R(8gbUeC&øµ&øMå¢æNà\8ì=KSN4
+x±(iþkîÞ$Ý„Dðd¤¨t™ÓšL†cFO3¢;¥SççÁó¼¤ùðµ ª"OÌk	y°ås\¶^#S£Ù ñÑ'G^jT=!ä<òµ…/®­wtKÔSñ†ãzÚd!ˆ¤Ž¾=—ûùq‡«œyégŒKK
+•Pÿ\’뺗¯oÓ=o¯§ôßnWÔž•yÎÔ6PÿR³œ¤kÁ´®	òx7¶d§4û›;Úu„DÝÈ}mÉM½³Es³4öDbß’²/X’
+¡b\HåÃ b|–ªsBՍB5®óp¨Žýš˜^wdO‘Ÿˆž­^nú¾YIyq˜Êâx‚ìVG~¥8•ýWª#‡Š3ë–Gv2 ;)Uû)8vîd`
+ëbùÜ7oOœ#À”EdÝÇ„I[P·U~\›e{™VS¿“©±OÕÀ3™ÒëµQ1÷’í¨Õ¾’÷°ÝOû†GÊ;vïF'þJ¸PSz—öUV]
+BÐí6άtA†²«>DYUvâaÁþ¦	5©ÅY}TV´]¼vdäÚE
+’܉+c›¢;˜­u1\¬m3÷jDݏ»Ø2∰s"¦±’/÷|ç¯Ï?-G&öæžxj²@÷U“S!È±`ÚŒýe\?jÐ|1ÕÍK6¤DSTþ6ùf +w •
+´ØŠÜhš¬>ÚOíØaijú¢Íè[ÿ™¿ î·j=úïÇÑÿPK    ë…}1U«æ     4  includes/htmlarea/plugins/TableOperations/lang/el.jsUT	 ꘫAꘫAUx õõ­X[OG~Æ¿bägT©U)QÕRhÄ¥}¨ú°x{ÅzÇÚ—ЋÄ%”"RÔVUÓ‡FJÕ¼ØX8Ž1.ÿ`ö/õœ™Ýõ¬½fí*  »>·ùÎ9ß9“©)²øÞô2É3Çã†Ã½LfjŠ,Í./̐,µ³“äó幕ùE|ÞÜx”›&?Åõ•Üôôå>DÙÙ
+/2w†Ì[%‹»–Glúó&‰¼ø´ _<ȳR&³alÙt¥L]ƒ[àòtþ1ù>3‘µ­‚“™À/B²â•ÿL܉º"Zþ‘he'¥ŒM¶YÅ%žeRO	£ìÑmâmò>ñ÷EG4ýcÿ@ÔüC©÷™‘ß)¸¬â˜šƒü3ÑE'ˆGmË¡Ù2ÚWOCª3פ®fý%„p êâ
+~6Ä-|74Ao@²-%«J¢
+¥9g¥‘cRXTýgþ);5°x@0·¾NÖùžMãûÇ¢C¾†¿QRF£Éü)šâ
+ÄՍbš£…U—A¹…YHéq-Úþ˜hÁ¿¦H Ì&¤©
+ñVð…¨¡S<‚(î@ ‰×€$¢N/ñ¯fÛFÙ£&Ù
+³‘fê uëïKÀ®ZÑ
+,µá¹/L?ÐkÿÀ¿ˆê`žzy×êG[¯…†ÿ“¸”²ÈPc·¹i‹@´­BóOEWiÚÌàã hH]×(Q­Pƒgüè1µ
+ÅqìfÅ…ÿsT‹Ù.)ÎÐŽ])9ÙeÛ${¬Blk‡ÎH‰ºúI老ê9’•ãa6e‹C½…ãâŸPUD¦@èúRÞ=ŒûsÙnº³>Z×Fö¸X2
+”l®-õàƒ"3tƒ¼Õâ[Û{£c‰EÒ‘åÜ
+Ñè§É%NǵjùÜV±0Å¿¡Ý¤Äs,;i°*ežnÁrÆÊrX¿oü­Z÷‰ešöèÌšÔýËŒ¸[/GhSdXÌÉ/zŠBymF |ôF}<Ó«ˆþWûPÂa{¯¦i9- ß wÕ´«6…Aò¶•ß!–eæ±<{&{–Ô-{
+ëF’ãbñ#¤š#õºŠA ²D6|GÔ¥·5ՐZÆ›ëvÉ5h€q;™²{(_(¯aJÈ®Á(—©á’-Êw)uˆ¯d·Ž¶9øÍÆS…Ý$è¸xæå8œ58ÐoeOAÕú约ƒ¼FpºÁ¯^_v
+T‘%ÜÉ‹€‡‡’slh?‰ÚxÁÉ>¾ë‹rtÿžÀù;òǤç_+ŒÁVY/y(d™©rXÔ÷ÇsÙ	xÔ*Ö%Êa˜ ˆFuAŸy-„m%Y)•w/¶ œã!at(ÖÚXÉaÿäLjSN{ûò[£74ÃÖèm¡¢åxÐ9c;Ú5dã"õI§0Üãê!ÀÕ$;[t›¹*ŽT;°< #vcvääé‚[Æ•‚É“,zd$Êh¨[††Ö°JhØa(xeÛâýèÕ!¼fÌcL¥£MæVÐ@o4ÐuíAÐYæév@g±Ó'?éЫéEw5ÀfÀûöžÀãúh†àsoùÆ
+õc€†ÒkgèaÒàKÖäxñÓÜ&{b¨ãn„\¢4Q-6ºÆQ¦O9"y­qÈ÷]:‰¾TC;+»E
+¼˜É"âpØïjJãL»‰V#ÆŽLØ°‚åŠÈºq+‘Fl#»L1æâü—ŽfÕ¦.!7_[AMã븟šR»@ñuOä¡—jJÌœ•eÄ–ƒ1ƒ	\ŠN£xÀMŒ­'¦'²xOtX¦#•LT9/•ÑìäèoBŸr\0؈WVŠ²t5:	oxX’A#}‰]7ì‘«Zþ׈\à֏©ZÉ—†¯,“cWÑŽ¼3„¾Æ‘s¶áñœÚbõe³‹â\‡ˆzp3ºŽQ$¾Gƒø£@¡Õµe6ØsoQ1F%‚`ÿ/D ?‚†FûAÑ?b•„€ßaúS¢ BÌSG#b™R¹ˆ5Q
+zä,àü²õ”ÚÚ<g~|˜ùPK    ë…}1kG  >  4  includes/htmlarea/plugins/TableOperations/lang/en.jsUT	 ꘫAꘫAUx õõWmoâFþ~ňO=)¥R¥”SU‘„\¨ŽÀ\uªúac/°ÊÚkÙËq\ÛÿÞ™ñÛÚ‡N§ÌËóÌììììºß‡ñõÍgVÄ6ëtú}˜§ŸЕq÷FÓ;ï~LòÂèÝÀ¿0ž{½››_~í]“ïpc×&À“Z·â»‰/amm2è÷Ã],Ò`}˜¨©lmÓ?x3ðgÃé|2ô½Ù|€:R\_Áód4œàyáÃo1ƒ;oêï|O<üüÇo½Ï#˜Œ§£†¿Ÿ„-EfAÀW¡U2JƒÃTfÙ‡*ÄÏUö|øg¾2J«\íÇšY-Á®Uø/6“eêEËKH( zJŒËŒdl+(â0-¬«•léo&TñŠÉd€™‰twõ¡ÓñRz‰L…U¸W¼)¿Á?‹îP«UÜ\Р/Ù ai6)d*”YîÁ
+5yÞŠàu•šMÖ<Ž.wɤV±ìà´_`¸IC™:ì¹\›²¶­ÈÌXk¢“ƒ2š¾›ÏanwZÖÜ,Â_hù;w	´v(l”XªçÔ`Ù­¢
+¾¼ÈYbë.½Ù´ék#0!j´I&Cx)ë÷tQð79Ép/³ U­ê¸Jrzø-‚JÃfm„=g‚±©ˆ¤Ó…L¦G©VësxKƒÍ"ïð4êMãÁ3ÂÎl@«W	Ö@$Ó•ü½ä?ÑàOÍö}òÿq‘#±’°˜MêºÔ*røc“YµÜ^›
+Aè‰À¸¶æ.d6Éei`‰¤éJÅçìE`°
+C}úH!pŽ ðÔ@ºÑn‹TšÂì̽Â\¼©9c–qhFô/
+œÑ5q©`c>ô­‚Wý¸}™‰PÆÁp8ÜQ1Îòf/ƒÍªNžaßœ3 `*lÎ-‘$R¤ð"íVʪ¸#E–­AÎER)klZ^ßi¾Çi9‹‚ó8iíY1:µ®ºižˆ€îeZYRîÿÑZB8LΕT(ظ‰"¼ñc¡ £ïõ¨)z¡ÔÒÊê>¿g±î—ÒMÅîsO,«Û‡¦+ÙrËÈ‹\š4ЂÃÓ©â"‰}³†W‚]ç^È•4±ôÌ­lÅ7'©¹6óf¸?\¿£%`ïVÌ¡ìƒZe0¬´	a§½‘8Z\§2ëóu/´·¢;|«í¯“E ¹4öwƒü.ËI×Ò³ÔaC~©îѱÒV
+ïÖLòå7|§çÏÚÓf³ƒ`‚µÄG½yâW“ yÈX¢4Þk½5Ù&°À2—Д3wòʯw÷i°Éà ½[“0¹³¼½ÞöqY—­iaÚù“ö¨Ú*D\^ týÉgÄœøn (øgê™@è“{¥ ’?Uh×u‹ç"ðcŽÎkOãWc/¿¿ŸGÿi2L%}ÐmEj|¹Éå&Ã:âåqü´Ãn¡ïMž›Š/š«¼æGióI„Ä|PÓ1ý!jšM^<œ~µÔU*lTߤv.ÍBîü÷±ó?PK    ë…}1v ¤Ç  Æ  5  includes/htmlarea/plugins/TableOperations/lang/en.phpUT	 ꘫAꘫAUx õõWmoâ8þÜJý#>ÝJ¥¨'Ôc_N´¥[V*{Zîƒ›ðÕ‰£Ä)˽ü÷óâ„”ÂFU…gæyf<møú‰ˆ5èmÌ?v4ÿ®{±f¥Og§ÐëÁèòj¾ŠRÍ"žž¢p<˜|îC‡GsNn¦·#3^xwÝ+øFói÷êê—_»—d<ÈôZ%}xk&àšý­¢sXk÷{½`±Ä__ø*ì…"]+•{¸›ÎÀ›
+&óñÀ›Îæ}#$Àå<Ž‡ƒù|›.fp3xƒF“»)þï~ƒëé×!ŒG“aŽÃï'¦Ar–j`𤀇LH`Að4}çxù¹ôâ;7…þ´34±³~%èµHÿ"¥!Vi*ž$?‡Øøä "_fGß8ݐGºÂ"CÃkžÂÆü摯­ˆûK¶ïLz<†¬Ó˜'L\˜Z¢ðÏÙéIg Å*êôO̐ϭFÂRe	¤"à©5!‹š˜L¯™ÿ¼JT“#ËmR.EÄ;}8쫯’€'¿;º´©,¢SZ«ð`¿'¡oæs˜ë­ä;
+áÔü™Û°Ød¶²(VË1e‰ÂÐÂdòMÿMDNi7ùØêÖ,9b‚m«¤dqÊx*ÒøvQ)7>’æ–ÛQË‘+$«»ÏР(%V/ÓÇÌ2GXpÂBîTH>&Ý=«õ1Ì¢ÕBmq“Ê,Œp;ªL°UHñÌA+y²â¿Ž@Ô$jó6{ÍÁ~±B¶â°˜«ÜT"²ø’¥Z,·‡ç§D|Ìе®Øó±Õñe¡!•’â%+³$9¢EÈÃ;A[¡'
+’LºÅRJ
+½Ós½Ó
+'êˆ.GÞ	AØG<Y°‰WÔ…Àjí¹àKá?ãé€+™ªÇØ.ÚîEåÌ–~ánVÕõ‹è˜®M„e1yƒÀ†Æ☳ž¸ÞpCÕ'‹‚b' —cox)¶˜Š$V0Mñ0Û7x)Žœt?keYQ:	¯êj3ßàfvqQ{Þ†p©œ#+Xm†x9p´¹€´Þ´kÊ£pÉ5/Ïý[:•S؉(Åï²ey:™BB²«iÃ<ñ¥J¬‹&×Ô@ÔµJfDÆiÝ,Æ
+tOId‹EY˜¦±ºdœ›Qc‚êÕ<P­Ô÷&‚Ì›©Pm™ØE5“¡j‘;¡×cÂÂ{%xÔÔ¬ŠÈŸÔËN¨oà@ðz·;Y©ÏÔ êëbzE˲ÃÖ¹¹!ksŸuøЈ®¸»„$u›Xͼ٫<|Ñ`“¡ñaÛAX†5Ç;‘¹<ҁP6ë´MYÂ$ž}ݵÙÉudlS—ØÄtmêÆÌžEnsÚoS§ÙC«¾Dk½3ŝ ^·©Ñ´ç®®± S-U¹bˆ8?1Ø+íuàÕ¹† ÷_MõøL\4M±ü.½®êÝIƒ¯B³ƒ»_ ]{ÊçF÷ÞÃxpó2Ü°$xÕãË,Ålâo7=>±lÌÛ•:ª “袍Xý(¯mOÈL;²ÛlÛâ6=¤AŒ{ÕÇ7O•©B`µâ;—ÎÁšÏNÿ{oÞÀzöµñéPK    ë…}1K¦žS¹  Ï  4  includes/htmlarea/plugins/TableOperations/lang/fi.jsUT	 ꘫAꘫAUx õõ•VMo7=Û¿‚й2Ð[‘¢‡$mŠÔvlHŽ£èa¤kéår$wE»¿!çÉÕ~iÉ:fÞãÌ›ò6
+o
+4à$i{ññ×ß>‰?Ä×ó³Å[%wzñæÌ„X\RšHëJ»ø%•x¤Ò+´ÑË;Ì2)4ª§†MU	Áûl³¡R'=ß”ÖíÍ•Ô¸x#Nû08O-œL‚¦g^a©‡;1¹Öæå'É`Îôýz-Ö®æ_}6u­¤ø-ÿG(¼ ½Ã³,
+E#²z·†Xv'½zG^“*µ`™\™ñWË¢Ý0íK´v!¦`^‘ïÑpé"˜”‚Âb"6{€¯Ê”{ƒ£sÂô3
+¼oLäÿíÖȉ@—ems}ø[L üO‡þ` G;Ì;­;Q>æ°Cñyu5&Ö‚,Iµ¹‚šJ×;¬)Ï¥s¨ÊhÆǽ1Dͪë`¸³“ú5 *F~-“DÞåÓš~"aJ5Lý/)*)+jãØ:ø)lí·$Rïzó-(žA횺•f%wé@™™a„®èùUË£&+9mÙ•_<Kn(
+#6èžُÿ2ôlèDl¹ÛsíOYÜszàÄe ¹ÂÖ'–ç?Ë<´j6Gh9iUs‚¢£©	Xî‘–“%<•5„ÜRÎsú€çèc0Á².`;S 'U¬ÂºÌs0uoH‡Q¡‹‹åîf¹åvY&¨Ða·•o‰‡“%£¶Ã÷nR[®ç»=âGYÚ¦	¾‚«Ý4z²ÁG2ñ€1µÆ1"G³ëCy—Htv#¿‚»k8“‡oïi%]ÇøL2£ó÷åÅ¡ßÏÎS	hNÐXEÜ…<
+†ûè… }ÿ½ö!o¨šžî]E­š¢$Õ-1ŒoàƒLxáÏÀÆE™éÖq&ÃaäÎ?3lñþWeF|Þåäé̓úÎ×Æ™ÇúSFkêÈY)ò
+çŸaovƒ0oû>‡qŠo‰eê·Õ:FVþò0Ý{č_±aÍyŠ¸°‡+$ìÜ¥_q/KžcŒtT„CùŽŽ}PM8´ÍU^Œ?•§m¹Xì{/ýxSÆçãñúDæ/I‘Þ˜ÿÊÄ¥}O]a…u´hr~\–Š#;¡Ë߈$Eð÷cŽÝʉ]É¿.fxè4š0¸ŽGÓù®bëÄ)\>˜fÂý»å—]Ÿ7O
+÷s2³_P
+®BfþõÜ,οý~þPK    ë…}1>É MÝ    4  includes/htmlarea/plugins/TableOperations/lang/hu.jsUT	 ꘫAꘫAUx õõuUMoÛF=K¿bÀS¸2ÒSà¤Ae[®ÝØ’!ÑAƒ¢(–ä˜\s¹KìåHEý	¹ö¦£9ðÁèm‘ÿÕá‡d	i	AXqÞÎ̾÷fux/_!6Ú‘ÐäúýÃC¸Ž>‚ «‚O&§õï›ðìûWuxXQfì\É\ù3S˜t!àkWšk¤AV½mòM¦N‡ãÙå0œLgGü®~
+ðr ×—£ál×7!|˜ÜLád2‡'!\ŒÏ&üáù†Ç“÷#¸¼Úmü|'
+G `.”L !ˆ$±èÜ‹m‰¶%Âé'pÃËæ(M[›ã½~Î,o2é€?Ú”Æ9)<€².ˆ u¬ª¹plŠ5m·ò>n‹‰$tp_¯QÇ&‘:m’a̝	»¼è÷ÏëˡE1hèÿþì÷{œ†2„[£”¹¯7¹ÌT*Û÷R¡½dþ+‚ÁüH¨4ºÙ.‰ƒJÕ;*‡	§² *2… ¥ ŒHø U*5(¡ÓJ¤8è÷êe§87BÆ(’¥;â¶z½È¨äžŸà̯Uîç~mÞëIbâgHpúõ³¢&Té­bCtÑ`¨ü*óOKC-À‘•9RfM•f
+ü_´¯"[YÒsçXƒ?v€í$8Cå¾~ÞAÜUŽäíBám‡8Ê
+Xú•¥]@ÌR¢­{xç—~]Züdeš5i‚_LýWšÛJ©¶ÎÌØ\>Ǎe.0QÒu}Ì8V˜ú¨P¿cû¸
+Jk´ƒc$Üð–õàkÞüÊAìücžsЯ¶
+é=ì.X³¨¶HvÆFÕãÝ"ß	+ræÅ-ýÝ@2©$퀂s¿"®µ1V.f_ØJ±öÁHÍýJ	·$on´P
+.æ	 däm¹à\²š™œÊMÓ^„œõÉòRt'qhIlÛ¶ø;êP$"Õ¡B¿ŠØyÌâ7ØŒ
+U˜dãPîG³žÛÖ?Ìeƒ+MÉVK$mŽ=[¢Í9±Ûrÿò¸¢È#Ѳ "igr‚±_Ïï0]´ÆÍÌ}†ªÜ֝ù§Ô?41â±fÍxfÛjÁ0§Š	ä[Ä‘ÿ¢*·™.³7™ï¥sKÁürë
+‚}´ðß±iytS‹™¸£
+0Þë´æU²bé6lÊÅ^ž+Žµ	—|ãîI‘¯¡š6VÐï}ªo•¨"â¿™öR	Lì%œ¢N"l‰b¡cT[ W[§‹M¦Â¥]–kAÙNöZaãL¶Úáè×ð«Éé(è.‡NÖÂ?$èèbbkà·7o‡ÔQ]§ÿéuÿ_PK    ë…}1œŽ’µ  Ó  4  includes/htmlarea/plugins/TableOperations/lang/it.jsUT	 ꘫAꘫAUx õõ­VÍR#7>ã§èòe/j©"d7	°8†`“R9È3²Ý…,Môc/$û.y—¼XZ?ck`v=®dnõ÷õ¾néø†oOFP(i,“ÖôzÇÇp}6úp
+}´ýCøqt~{1ôë‡Éåàþ‚áøvpròÕ׃·ÞöÌÙ…Ò§pɦ¨à^Y%Kïf~ù½ŽË#´ßöz6ü¶âšY$wGÁñ{ø³wÐ?8—ýÓÿÐR ä¬¶Ì”Ó`°ä&ڐÉÄY‹ÀáǬÕ
+ÑĬxœkåd¹eÏ|iÛpOß?…n_Î’K›(”.¹Þ²ûu¾cš[),e­Zvöê±Ì˜H{>ÃØ>	žedQpøv~&¬òeÝLÐ*‘àœŠx§ÕÞ¢/âN×ÞX#·ÿü
+%x
+–Ȥ͓÷k¶Lï‘ 3RÑñˆWä¤2¼„i]Ç]%òå…bÎ`M¡òàü2’_pSh|Q¤øó™þE£ËÐÊ@ÕCY`ÅD²ŠÙ}R%)ÖQ‹%MzÊt’Ö~ëŠã|±9	ÔòççxWj
+K&Ÿ¨¥…[JkåD	OʁÀGVÁ’ë9ÿ®vÐÿ9Dåí•”VN!8‰šL„Z­w³e„šÒxM7\²9‡‡ûëmî´*{3\Ò&¦£øÉ‹³§îuH,b!®Ei·^Ò:lñY½Z	%šZÃ7LSûT?"bÐ7X–¢ûhÙ´O’ÕHv"×ňãd¬¥HíLVÙ0̬hÖ{Ì·ÆÈÕý}ÇÊå|K^ÿ›‚Óø„B`ñHóŒZÒšbk÷׿ãflE=t`#	‚PtyŸ5e}÷$¾}WËä"òÄå+k¤YȪŠ3
+SnלK`ô+¨›É²îòE:?ù¹·g5“R…–z™öjošg‡Ÿº%•¤ë Ê6†È‚Ñ•8ŸX;ц¸·¤Y—xXØW¬ c5©jM|±ô„xFf¹ ™©&Qe—×Æ2î;j|ý”í+ÿ£˜'·/•'·|ó8g2((ÓQm‰Ò`l¶¹¨È~è¢)0 T•jCMùÌ_§í(ÒÖ²é,Ì¿—¹1æ
+³Št™õÔK•¾NÂTí†÷WXâ3õ…¢Ý4LwU%"šuQmeiÇ5+£	ä4#å~6]wn²«˜ªU[ Þ¼E¢×`kÖ”§ì1;Îêe\í‰æVÖ?}3Ú6Vzo×Û7_'ÿhi–…§t·©Ÿ¿l=!Lhô¦RÐ\›†'k¸l6Ó%õ'ß
+LÓD9£jÖï,tÁ~r4±¯ &¿z=Ò&fŽçˆ÷\>Ù¼|ÞÉsÉ@«ªà5Kùµ_CÅn½Qº«D^Ng{HÞÙaH¶6tPÇg6ݬK§V±ëÒùüâ%U0ÑY)M•¬<’ýŠ¥]äo,M÷Jý•ÊúÞfì >’ÝÕäæúLsFu£#›¡³~b•L—Á…œÆ =¾Å',õušÁrÓ…G-~Ôÿà&´èÈÆkñEÍÿŸ}…Ôâˆ:¿ ܶ¶éGÔ]…¹È®í´î}ú¦÷/PK    ë…}1“|®Úu  	  4  includes/htmlarea/plugins/TableOperations/lang/nl.jsUT	 ꘫAꘫAUx õõ•WmoÛ6þœ ùjØA‡
+È2›:MVÇ
+l9A÷–h›E
+$e7ÝößwGI¶ÞÚfAļ»ç^øÜñ|qwo.gieSΝž^\Àt<ûp%ç0™]ïïèó2¼^Â?p·†——¿ü:|ã•Ç¹Ûjs÷"Úr	Oœo87B%ðJ¨µþ#M£¡Ýêl¤äësØ:—]]\ÔKŸ7ÁÂùx¶˜ŽÃ`¾¸¢C/ x3‚‡éd¼˜ÀÃ2„OÁr×Á,_‡p7»	ð„·¿'0½›MJ;üyÅHά;&E<eB‹cí}]óòÓÁK8ÿa Kü·È™b«êð[
+\¬Ám…üUÚA¦­+ÉÏ!#Ÿ„Šdsôé4åÊmÑCê;naOÿséX¨GãFÇÌóè5•'dˆdÜ0'ðªFþÒ~‡¿ÏNOc)6jpurü,…“â³B¬Áy¡"a­sVÄÜÖtIÂágø*>Ç\ÊïX”lŒÎU\Œ£­ãx^êY.…âM×x*l© MÌMS<gs/µ]ñ!íœN›ò@¢_/°pϲá¿vZ(±Œ
+ÖÉRn’Cq®9VçÁh¬®Íê ˆ‹
+W6Ú²,«»Æ{lçEg†›ƒÊ–5N™a‰;D¯¥d™å1¬Úu|à\©U•uËßGÉóê=·‘<AŠañywÈôæô@=j]¿Ö©™kjüµç;~–òÖµ•g^~‹Û¶ nµÞ¸òJnõR¦ž±#dž*ä¾ÎeÏ:)N^φ¿%ÔF×8TŒ›öB:ÈÁ¢CµÓ8iÔÛ®ÑûïƒQ±:߃¼KÙ†Ãr>m6Âz…¶¾QIä5ÿÌ­ëçNîrì¯ò§Ãq*2–”r¾v-ÎLqˆ–e½gf#ZD¦³²ª÷"Že«é¬r>Ó`rÙ¾·‚i˜±´µöˆ¨ÔpDÐL9¶:¿P+„8]‰u­‘é1à‡b at FRD	ŽI¼ «SüŒÍX™!Éɀܣ Ø(­F…ý¼Ë²9ÇU&2G6ô÷ôï¼ÛÓs*1½à)3°ânOŽyJaCVœE<ôFeƒön´õ…—[[Xð’Zø[1÷G~ªvÐJ Nz}p•`%JOø²¼Þ§PbŸ¼Ú§PÃ-«H‘Õ 
+…EÆ"ê*RVÝ>|ûçHª[ÓöW¾‰•ç¸yÓ5-ò?µ:/À´¾â6â
+0ä0ÆqîJÖ–YPT„==€‡ñ]e‘@C¶>ÌûÂg&ßxJ:»{-W|­Má±Ïr‡£·iç§Të	ÂZÔ‡SÓ C’7_ÀÞ7«R·™®…þÐÖUu³Xe;Õú‹¥ûjU3eìZé¾RõZ6k¥»©Tlú=ÙàèÍ…´«\VzWˆLñ¬×*W­§i¥LiÕ¹@Òï¿ARïfMúœ-Œ5ìŠî¸Hâ…÷Á“AgdþØŒÁͺØ@¿ÓîõÆ÷&ykC
+·+JŸ€j“ªì›‰NŒùÉ䫘à÷•£±Ä×s¸¥!Ò´ï±Æ¥5i›zNüô" â<€À7 À¿žžÑ=h}Ñtƒéµw:ó±Ô*RÞ-ÏÄŠ[] n}ö5»&i§?R}‰wôV5·ÈÁ~gIŽ;é#‘(b²¢ÆQÑK†\kSàIÄn[½1•gÃy\mŽø
+‹úx(ñÛÜ°¾(ÐFÞOdž3HÊbÌYç÷	Ú bþ‹áI¬&PküQ¸–õ˜¿ž”êÿÂc¿ÞøÁñplÙ¿4ß@ì}Xhˆ/ôT7Š³³ÓñíPK    ë…}1Qž(|  @  4  includes/htmlarea/plugins/TableOperations/lang/no.jsUT	 ꘫAꘫAUx õõWÛnã6}N€üÃ@O] všÒô²ëdíÄ]¯ØÊ‹¢Œ5¶¹¦H¤œu/ŸÛØÇ)Ê–9YÃ0,Ι3ù‘:;ƒáùÅæJˤ5'Ç'Çgg0êo.!BB|=y;tÏ÷ñ sÿÀp6é\\üðcç܃{¹])}	ïùŠq¸b)y
+?§Ü¬”zÃåBqfxW«_=Új&`àÒ*+ýˆKÎ.Á y£¤à»RœŸwéûí÷Á¥Ád
+ñ´7žzñd:»t‹^@È.܍ú½Yîîcø8¹ŸÂõd÷®cŽúø¶½«É‡>Œ†ã~УÏ7Ì‚@f,0Ø0ÁÀ”q,I4óªb廝•xúâ	ÜÓß"$η2L?UÈù슠¯T2ex
+™³‰€¹È$Ûs•¦(í^—É5JŠEî?ʹJ¸\z6œ“wLo»¯\xbF¬“5³œ2Ùõ9ýþ>9>Šz‚/etyä> GÑo¹±¨£ÓB&`¡r
+†'h<ÈAhaÁ5úõ€½bóõR«\&ŒVhÁ=¹A—»èž~Ž¢BºÜ~ WÚQïýzGå÷DnÚ ¥CÊZ•¶šsð+²W ¯g3˜Ù­ÀÒñ™¥ÿAË Ë\Ü*¶&²½Ö|a)RwZQˆ-w‘ª[órÄ%J³fYéà5%´¶Å-ètÅôç=eŒËÒ%Ë5ÌC”r@!‘°n„‡´TÕø€éeˆí[4sÍ«{Ž®ÐmwƒÂÌàž0ÜÀbO2ŠÙà ùÖ¢LJ´f)V³IÏiéê-òåê0Wtûe[òܪGH™ÜRÈ<•Ô*	lU‚¯h í_—lÑíFi§²DXÓ†¤D
+Ê’ƒÿq~È×
+v­_¦n°k–<C=La]ĹHпä®1ùb{(µÆ1rËVÂ
+!.J‘—} ²¤º+„ï)ƒ\Žµ“$OÑÞÎ’'C‰Žè\Ô<¤˜HpÉÄ´Ÿ3UPeʌՁ	Œz…zG3šÆa5yÙ¯wÅ|>_ÇŒQ)=S›:öèe”4SÁu®Fu!½<ÄiZ”䎛j°ᔪäð,€¨¿›4\µ«‹ ç"œF	Ë2dÐ>"Ùe´äKŽÉ¤¬lâF¾Ÿ}M™­$å”T©Ã—õ¦–»²~ÉJÙ2tÆR•Ñ®žò¯sYÚøZVïw |‰Ó»\!¬æ®2ºf›»ƒÎE#+³\	ð>ÏÙZ³<M鄬Î_ߐ‰f¡ÂãIÇe¼“ @N‡hFÿmµJ—†2Þa‹r¨Ó<'$—¡n€žÊ4t
+ÁhêÐ:“u?dvΔc¤À7è3ªÂrž4ª®e&<”4¢	Q­ePƒµDb½-vàÍX¨–P´h-¾Ôu*.7½¡âksz×rR:ü 6MÓm$¡¢@—›';t
+õÝ9…g2Ñtæɦª ënr¶ˆ®v.M«…¿ðÕ†Ðs`üL×Ûâxø`‹kZ'^!Ý5ÜõÊÏæ]{·**Fêé=RÐyÓY¹f­ËsÇ-64´®¾½nq*”zŤí¸Á¶yž ÅfÐnÑ°*ó+ÛÚ›|P㨛+nŠîêU³ç²wðƒNtzäà÷TlÖMgÕz!Œ†ë5RßP’R[½}p¹Ÿ3q ·…|MòO>ÁnNz½ßéà^UÆâ•Æ¤¼_ÑkŠk¨Ž W¢Nq\ú¨ÆïG=Œ^<Ö®Vh*¹Fs/D]LIç©-
+PvÛØ”1{-4ùK|ÔK_ÇçN2ê9]È+ ¶3n¥óÏt®HèðÃ$Ë¥³ÿKozÿPK    ë…}1sB0¦  +  4  includes/htmlarea/plugins/TableOperations/lang/ro.jsUT	 ꘫAꘫAUx õõ¥WÍn7>[O1Щ,é)pPŠbÇdIV.‚¢z—’hsÉɵc=ùžGh€ôÞ—°ý^!wW»ŠlË­`Úåü~œùfÔíÂñë7Cˆµ²Ž)g[­n½áÇ}hÝÞ…ƒaôᘞgÑaç
+÷r·ÔfNÄ’	xÏn´Ú…¥sÙ~·›\+fâå^¬Ón*ìRkoñp4hÒN½h4™îã;z
+ðzƃƒÞô Ƴ>f菆Q¯Áñðp„ÿ ::€ÞûÑéŽ‡A
+??1’3ë€Á%“"ž2!%‰áÖ¾ª\ü\¹ˆ&Ÿ!Á¿úd|Xe‚oW–ÅÜRXÀ?¥dÚZq&ù.d䐃P±ÌŽŽ1Í”+W©¢†…P:nኾsëD¨…7ÆcŒŒ™ë½W­VÄÐä(ã†9èïù{øþhí´{R,T{‡> ô¨7¼½ëÏ$ÌunÀŠ„Û „2‘F—Ýßš‡¿…¢ïY|±0:WÉÊÖ!>1Y[Ž–y{¶û¬4¼º6	7+Ëý%Ç«¯Ùõ³RÏ9níµ?ië5ûÓ)LÝ5fWž:¼ñßðà÷ Á2su	'sÀ«r쌇´ûÈ;A>럄àîþÖc1—¹ä¢°¦\|6y8Z"Û§IÊÌ°˜Ìyu-%Ë,O଄ó9õ€20+R!±J;º`.uy¸Xƒ,¼,Ëíð#l6 ŽqAŸÝKmõ@(†¥ü‘Z9âb±|‰íöÝWu+ÑxÊY0¡¯ eê[Uæ©Â®Ô¹LàZç Ŧ¡!åfÁß•^Úý»ïØJ(®™âpi¸ {¹âßœx×´jôÕó&WV©“Å#6S¶à0›VXàC'— ð„½Ø§Ü:1¿Þ”Jƒ´Ãt5n1L3â°pÌçåah¯»ïj€<aƒxÉ]p“'"IäöTCÚâ\êØ+5ì¸Z‘"Ñ!~²BEj„X)(±zÛù †ØI!†1ΤñõdŒj¸¨Ôq˜±ñÎ,«SOr³Çö)gôÂ×AB¦
+廐A::°Ìý­·>	mPµ¨áHtáZ&X‰/a³éÌO— ЄP†+ɲŒ3gÜ]q®€á+_ëL%e+¡³ö©6(ŠsV·Ÿš€’ÁúIrCn¾‰²©Šùô¸·²Wµ’Xè”rÝO‚üSv¥³g
+úÐkO˜ÓFà2ãöV°ªjûi¦YYO‚^U«XÙFÞ"ÔÂh	"yšâªP+¸<-æk4êPauDÒñjxøËí#¬!)”E¤:l^
++”?¦—œÝ`V婕ך3>×&x|€­ÑFiÀ3båz扯̷ȸÍ°@Wi?5}K
+›Iá*ãw_ÓŒ÷úqÄ|]6$·@Ì+m†LoBìIë˜éFVÍ´šÑbm?–Wh?Y—,ó:Ó—£ÊUТ>fHd|ƒ2A©”“<+¨«Ð|úN‹8sQWy,ýµ¤íÑ5ûÌûå¯,o0æ6J¸ë ú­|»ÁÑØÙ£%Ç%ŽÖ^?¤*"
+dNôã3c´¨žË.éHœÆ%‘LSm]K¨fù ª¡‰áù‰Œ„ÙX'Àñª ‹wz.Ímʺ®Ó™¤†ÀÆP8ØÜâq¢‰Ùx:T
+T
+[]SÅΤ¹ƒª3¬eçlËÕ×åÜÙÅeh€8,Ç!ùÓb8m]9UÕ@Æ«ÑVôѯ"qËÚ,òeš†ú婀 ‰¿†;aå(ÄŽ¢“A†œáó<ˆdƒ7M¿PýêA4Œ{5¯t¸hV<NWé[moƒýÿ\¥…ßglƒä€ÿî·æ‚‰Ö\`ÛÇ´íVH"sЋ€d&¾pYùþY´[¾mýPK    ë…}1½1Ö|  þŠ  =  includes/htmlarea/plugins/TableOperations/table-operations.jsUT	 ꘫAꘫAUx õõì<kSäF’ŸáWÔÈkwcúc{×36Ì#€Ù¹=<A¨¥jZ3jI+Uwƒwù*©ôjºövãv‰‰Ueefefeee=†CqéŽB)Þ&2uUG™xÎn‚HŒãTüzùúì(•nÿ»ÁÎæp(N§I(§2R*Fwâu0qñÒý=ŽB\$€ N¥U¥’½áp±XFaü9xñ ž‰š†ˆW̱è‹ã8¹Kƒ›‰]oK<ßÙy.‚HGž
+æRÅq˜aë”zDp9	2Å*ð¤xýþâRdʽÃ6Ђ8ŸeRt3)E Q&êVm
+4ù#1N¡êÃ_.N?üå!ý@A“T&¡ëQ÷Å%o•\Šq C?#ʯ f<C‘ų¨{±/…ù½¬'æA(»ëMýj>þ,ÓåˆBðå\†q¢³¤J¬œH.		¶†Œ¹©7!ÌÓ ›Ä±Æÿ‡SO(Ôo?Îõ;ø”õæbwðÊù»áîÎpçbwwïû?í}ÿ\p{qr›ˆ?l"Ž·£Odª&®‹ ú-#ÏM²Yè*è7|«‰d¢ !’4ž>u‘Øv$ºòÖ“‰N zI7vÄbxj‡3lFˆÈ§.ZcÊ­Íñ,òÈòÈh›í²
+·Äß67˜Æ@«ô@ëvsscî¦Âßäe ®hÜìsRPQÁ:8Ýýñ®…
+õ#™Ò ™Ç „ô‘t;•7P-S–(n„˜fJUDDmDBãN³£Ä•‘ð>;šCA”Ï(¤>3‹*øQx ÜF0ÝgPÆ ã ™e“®“ÉÄ…^Ä©³…°÷B†0`pû€É¹|ÛwÄ6â½Ú!” ¿éÔKêG7ð{ ¼«ÀÿØ3‚
+¦7ïÏϺÜ8ƒ›`ìô aY~ÎVOŒ] ÜCÜ`ÑFÁZ¡0à}Í?׃Pý K\¦Â‚9Ê,0z"UÀ¡.ðëm|û9µûun÷#—•D¤ï7á)Óõ}áŠH.*ħn³I¢)!ЀåÌ¡j:׬íÓhƒ¨¡‡‘;•"ÿÙ«„4×þ"‡Ùì`¹ñ©)·üG©þz–†Xßê8†î]Ç‹H#kB—±—/êÿǍHÜ”7° ˆš°è•¦ÔιÀd&‡„6ü¶ågS|+Þ_žž^žž\ÀGËϐ<X*U€2R˜Æ™Ì<{ú‰;¢ªÊéàê}pI7oPZÉ!¼ˆÇˆÌ<h§|3¾Yš"°8I¦;ô`ÎPƒšÆa¼«XÝ%rp#Õ±æâ °xM“ÌÇ`îÂ,‡¦=MÁDîÌ çQ™Šî–V (‚	
+L·D×Á‘mH‚ážÅ™»™¤–e'““+|Dw˜—[G†µŒT»‡Ì™iè‘ËÇÖÍÒ™çÑ‚'™ûÿTþu¤Z¥87ˆwq2K~æCúãj.#Ð]좓§ñTŒÒxSÎÕøÆ7Tÿ.Å£™ÙZÊÕìþµO–Ù	yæƒ66wÙ̴ƒ§S+·0ˆ®Ã³áã°T?`{áÆqá@¤².Á6€ÎÆã%; T(ÓäΡ9€3bêZ
+{Ô«+v=¢€¾=— cé	œ@¦Ú$
+¦‘]¨»Pv°'rn+æe#">ANÀ$kÓÚÈúün áÐ_x`YÂ_C<‚d=rìh…Ãß.†…ò\[ùb‚I_A<Ác„!‡’}˜N0Ž›¸a‡eX
+1ª	yG=°ÛÈ^Þ]²5wC~ËÌ’zîÕåÅüU cu]Cè8ð`(©Ñ[H5Æ
+æ€C¦—$(»FKv0ÒLO‚0Ÿâî7mºÐ¼:†bÀÈ…ì©Ÿ$”Iœ(ì4Sxæ·Ð¹q<‹ü'’S›˜` €
+bŽi<—Ô·¾ÔGþ?÷"%óÈfÓ©›Þió`u™-ˆæÆ‹ÀW“rS4ê•çŽ­~±ÉÆ׳(PË°ºap•°RÉÃì ­‚+)5õd^pùÃcš¼ãò‡ŒâÔ‡ARBÀe·ƒxd¹)=Ü2…•†TÒÜðžç4f°Î žeb§ŸÝ­6Ãy!•° Ì&ÖڣʖÝ_¤÷9îqë,z:™¸‰Q2qôÓ3Xä᪡Ý$b%¦òÙ@—G4OžK?u4ŸÖª½YvB7U×Ü7²ÌËk/CX~É|¬±9²Žu%¶h¯ÅÐÞ qÕK…@Kô}o3ŸšŠ©œCz
+C˜•É–žš")YA#Œ½¥Áï<MÞZO?è-´XrÿÌ:FXPF1Ê:I{#©×T6f*/<¨U4…7)y—ýÀxd&a1ß­¹Òr½qßt5ø–øæÑ-Ú:ÎV”
+¿ÖÓ\ŸøIt`B†øZu ²î$Á-8úNÂxËÿ•YîOj>¦ JrŸQó#ö9õìòjú,jÍ(·Æ<F3…=pT$}šèóÀƒGŒ"~Náàú‚ìãžPÐR’¬ÎÓñT1uIÅ×;ßïì$·Î~ΞYñÛæ?˜ÃJÃͲƒŽ
+T(;¿m
+BvйÞçrE{H]œ?4ºx;X9å5dž}®’Ö5.··ÄWãñXü׏_‹v¾‡ÕOeÑEçiµ…xØ8ë‡Øö‹šiÁÞîÎÎ׬â…JùüÓ7§ʤ:|ÊùÍŸe楏9"÷b¨aòæâ²(µ?‰#îÐÉÐîé±kQÜ{1´¹­´¥ ½sø"ˆ’™¸  õÉ[@¸:?èä¡Ã±üAÉnt†‡Uð®Åò…ŽXž„eíŒ*,—µ„eK)CÒŠ¥åa®fc9†¢íê·/ÿ ÓïÿzÔ‡	6žpn][2†¦&¦y”M9Û”Jµíª(x at O(8,k©Úx™jˆ•ŠbØÙ ZDsßA燎Öjök9.œ:
+p ³uj2_¡Üoš¹—ž.؉XÝ4åZ¾ŒnRÉm;-šŽê¤¸ø!J/†ŒóP|²dŸÿ/ÐQ|ÍŠyXt4÷­$»PŽUµKz…>am­GgX¸¶äPÞ2m'Åõ5bÇ\¼69Ú{i§FÕ5bçTººªªc£>`ŒKpò‚µ¼¦^-ñšKý$7·†]Ùaj‡C#sh¯ þÎvB{6] ÜNUû®6ª&Ä*S­Ò¶GM©Çÿ0·¾š»~E‹;tÑ:
+lpÎÆ;“ß;èÔæú#Xn/õµÍJ†`Ô ùë”tÔ¬Ю®’SÖ
+{­N¾â•ôò>VŠêŽcïN°æ æqàWýƒ‰ÜÁA`uÍ?¼‰A‚¾lðæsGñ\.¡Fõ5r—´“MX¬‡wkÓÇ‹%t©¾‘î(V*ž~é	Ij	mhí4±œ‰ìq\ÌâbÞÎoß#8
+~	ádPÛH©ö'HÿñZH—RN[(SÏ¿”ô(®ÅJ¶åÅ·5ÒGaˆyØtµAfOÃåò'÷M甫ûB×DKýU<SG5_¡³ 8¬mrLiÁã:ö/jRÐÂÚzDÕtpÂM`žŠ‘T)#à³/—°µk°à³iôHNÜ0lg*×à’Hpi¦þqFý$¡O±°¥¥eç°ÞÄ¢“§&3u)œ†ÍCÞ¢]³Wšïø±×+g…ì
+5D›ûJ¸ŸT¤<_ޝú]§à“óˆÉ ù¼©¢yÚ²xäÅúr.Ïf=^Wá“i·0Ê•vÞ|û´e¨Ò™´Š!væC*Y׉?cºÌÃ-ëбÛf“xqdXèV6æòÁؐÚÜoýS¶£ÏãÅ1¦V7¤1éúT›ÒæLD}[©`6UqUñ¹¡'ÛÈÖ„Ÿ~+Ûðò³³Ø	ë“ïq[yê]n{ÏP“Yu×÷¶+-½ÉÃÍæM$çGí4ÿ³ñöïµñf̯dŽÅæͼZ϶S  ]ZÕÞäßwoÇ8*ü]ìð`·`’x’-Ÿu\!‡]Ù	ª'ûK9öe)}&êY|;?¿„;¸fßN·æñÿ“Gþ§æ‘ë]籤c8åÕº……NX‹–T_µi¯¡žúÕæ;ÿÒ»Ó ¼ÛÓ8ŠéÚ¾@ >udOhõۏØg—Ü­nB¢35IÉsíë”?£ƒ€)D¸O3bæ«'UmÏuCm=7ek[Õ4ðý°–P°(1@Øk.^›'í–Ðc€½—\¼>=˜†ðüú2Š¤NÓTü#ö|,/_¬™óÂòòܱqýë®ÏíÅÀ¿þ
+Ýæöÿã½þfñTšK$´Çx¸"Êü~.JÜŒ/›HÙé~ëÖ‰½N7bæêk}¯¥ù²)xÿ>ÂBswjd×7¸F îT
+ó°÷Áµ?-&2Ä;"¹DèN—J7ÕW#8â¥#ÿzuÁ§µ Xˆ»*-®(Ÿh¥-‡ì”ïTWÃØfÊèFMöE¿ˆÃ±³o­•Ï@f]¬üpr‘¸ØÃ]SdGæ$-s û[¬"’0PÄ´_0Ù‡ñø.DN"b‘×묪Η¢¾uxÙ`¸*ŧ‘/oM…Jµ íÏñ"Ë"0cÅ>o»˜`¢©ÛïGâPì˜k^L$»ÚÞ‚,=D“H—87zÚˆ‹>j¢ü‘W6Š—§d;…,ƒ‘éæFÕFÛj½uÞ RXÿ–UºŠ¶ŠŽ= ­TŽ¹*‚pì"…úPc!tÏ’úú.̦øxŒ„Ï§•*¨kM±ÚÚ(Œ]N³ªlÙV4ëÈë÷-	磘0³=moçUé	gAsH¶+­K’^×Å”C‹b©þ›on€ÿ]‚OÏÀ^4#×—QÜë3ÄÏ°²ô`ê˜cJÌj°2ÑÕ&D÷“/™¸e.
+éXB`ìÃä$ËÎ'ço?\  F[œ2¼|ÛÇl[iŸ·é÷Úf DÎK²lÌ"ëªÔ13í”®‹éÁ§«Æ‘$­c AMóY€Ø”\meLÁ=$ÆôÉj«Û?!Kç0ûjŒŒ¼ZÚÑð_“ß²y™$nZWL+(¡)FOÂöSsCF—þ(VÈ„z™Bö}Q¶DŠ®) ð棠{H˜KtEgAjø±Ì¢Ž2ù¹Œw èBÊVK•¸´nþ<RØíÉÝV5·)´à7jÁ·µà7iÁ=,z,€ã·gï_¿©
+ ð¬f|ŒÈ&k#È‚pÇÊAå“&<Ü{­:ì5#’RŒgÙWK—j(åYón)n€)§;¤®6É]†;[t¾tª]e`£ÂžÒ¢¬¹¶•^Õ‘|‰i´©›5Lðë8`õiœJáOÜI—¬jå_hɪ긯ïÉ´g99;«ûÜXxR+Ô‘b»"Å\™ò„¾¬=¬_Ù9´ú†F×ÐîÊ+Œü§‹H|O5ÒŸb4Cƒÿ³á\æµ4ÜVñªñ 	y*Ó–1tåÙ3ñêô¿_Ÿì‰×ñïAºæ媴2º}h
+TqaÞ‡(ö•S7º‘=r1;uõÑ*ù|µÕb•‘Ní,Q ódÀ^?è…QÄ
+cX OçøyªÜÞ..ÉçFDÀƒL¹©:æ[óüJ%ž]YõoÇcЯ}«»¤\Ê@?Š+ÞÜ©ÚÅÚ	Íèò#ù]zK…ËˆÀ•!h½òã+æ<U݃6a
+ÓE¹¿ã‹‚l‚i at 7ü̏¤ñìfR¼á!¾RÃ&ìóø$îÐD`Ò'·I!Ž>×ãln¬2$+c²4ºÞÁÒ%Ã7Kï3¾nsÒÒg•ã
+þOû¶<@Šb<+€LÒxšZ¿‚N¦nt—Ÿ\ijÐwñL„Ág<f,hü„'ež[¬k|†|dR¸¡ôÛ„&ÚЛY Ê5è#ü:ô±öº-¬)Vå„·”†Ø`]šù¼À£M17Måë’R$±»¿^
+ì‹íí :çYM*Ô
+ÄîÑößhÃyž°N­¼¨,Ѻ724ó¬9áä!û2êd)j*:
+ê	èf35Þ>ÈsÙ[û¶v²JD•‹ñSøìù	I|²LàS™†Þ³Õ7Dð^7éñ“V–ÇÒòeopLøûßÅ'¾–M mTà‰¼­ýª°Ø§b—v>êç•ÃÐ*¥m1nVr˜›U½ä­˜/Š;xâ{wþöÝÉ9½¹T™$‹›É4I’³k|K§‚µ¶ònBQ;ÿØ¥WÖ`ÊOÑ<Œ*O•0ùrìÎB…­Ù;¼K%®èE4áá>èG:˜v3@`^G”ìÚ¨ü
+©üù7×oxû­å9t(| ‹6e’â (cÛܸ²î†;=½iª`~ìmn`¬ÐÛЁ˜~ú7…(‰ísá›Ö‚Žybc®,eõzÍ•œÑ«Vêµ×ˆ–—$½‚¦¥ÿÙÁîÇ‚yæöøíq[Ï’ôèp*ã­eHz¢R[a©R[ቘң®‘)ZoaÛÜ슶6êú‚¨×RÝĶì7ñ]„©M´–mýê•ä¾¹.jÍzøËÉ›“óÓcÿÏ'âŠö¨Ñ–qªÖÛÆûlÇÙ„&í‘è}ŽY\cs’±Ñi7ê€ع„@u–Éñ,üÈ /O~9}S&ÛÌOýá=ÁÎôŠ¦Øœ¥Ãù)jp§öžWÂxÆ©‘Ÿè 03,̀ŻeP˜oB% t}2œG'á&«Ã‡m°ú&˜6s²i‹9?pl3_={lº‘i@ƒ¾÷«»Ùç’[Ž%WN%žv|©ëâÌãq0ÖUËUÖ¡á<ª¨ óª(¼¤N§®^ª-y
+¬Ê5BEšS›(<Wéð<n?’ÕÚ–.f+«t|÷Cñ°”}ª÷ƒ>ú`	šl¡ŽÄ˜ÈjHêj+Š×AÂçš›ð˜sÊúØn~:?µÛŠÜz~ë!e.
+É	óו…å}¾ïc›:‹WvVàD҉ŕ¸bØf¶¸n9_yûUãƒGÅ™}䍆sqòoEü;)†y¥5h,–e:N'_PãÎo¿9{¥ÁçhµN{øžEGÃ6ôÑna¬mi?çú¢ÕWÆTªXÁvÇa쪒»É²WXVo®¼Ö|ꦵA{ªÔ(¸0׸C§Ê`	ªâ]6Wb¿ÊÖŒL?™©g›sš€ð/Î̍ôù.Þ±¿‘ú-g7q‘Íþ5O|„¸ÄÚ ëÑk§æ|2o'“5ïá“€ôèÒç¤ø¦_‚÷sLœÅà%Ó~œöñé´¯bˆ…ú©\¤RÒìÝóD0Àç`ÍI~b…1Ã;Sˆ-ÖÀ:)B-„8^t·0 ÑG‘7Ágqé$!p¦ø
+žEEt¬g›â%¾!2á$¡͈)$ÀÙó«Ýçß}ÿÃQ¾S·aÎæì2¹R½€°&n:…gÎ…iIFæT~ByÔ™‰C
+D3üJ;.CçiAèe|~3Ò€ûü²1ݦÂ=·†dxÑ ®dß× ¹5’`iÍC@<‡¼NXåDȱ?.$0ÂÌ
+"~Pë ,=âgÀ¸–Å}À2Ú×rq.á{ƒtœY¿|ëpOzuƸÖ\nËx½ŒþQ&àMâÓû´8 úÒûùòÿƒ¿-œ2Ñý,ÂÔÇstUMc8”§¢üœ-[‘^#gh¿˜iâ|eÑ/L¢Kt} àÝ$q_§2S"RÕã&	Ä'A«Oñr²ÑXÙ‹eq9*§¤v˜&ßqð=Mô0ø*zÅ÷8֝@k,ò¬h}/×’óZ´Ñ&³JV]­¦¤‘vúNnŒÏW°ÆçsûêvgÇÿSnLÏˏbÏ®¥;M¢ù é•ó>nò±Ýòž̬dyÍÊk4BÍpÅ Ë´–Ùßj¤lÉ”)´ØáràiYíŽÖ­6OÜüR|ëaîÖ©D®z!8÷ꌭÁ°Lm~Ý—¯e5s]1
+@»’ap=Vó_%;-ßÛ/_.nڨͯ7ÒÊï›7=Úëà¥1snZbÿ®…V9–¬Ëï#+÷FOam jxÞïq(ÒÓáIOÄú%gþ
+‹ù 1“oÓ˜ŸðíëÿíîZzÛƁð=¿Bv;hœöÐË‹i›.Š¶‡¤ÛË&ص²Ö%·Í¡ÿ}9/r(’2eoºI/±"R£y|3>|Xx·Vá­KVôã
+‹ãÇpþ 8 at .±Àâ²Z)¸Oˆ¶©®üö¬«6\jÔ³yQ™õÖhÛ¬ÆÙ"–Ù>{L
+‹T¾
+B†”òŠ [¾ÿQA{ñÌ/ï\›:ï‡Q	ùò!¾¯ƒ¾t
+Š‘×LJ·Ô)—aŽoœgóòs]A؏˜7|[ôdS2¢(_CȾM43úƒ½‹­ðê^º4Ý|ˆÆzL‘ãºHc”^¢¤¨ó8–oŒ5L¶Åí¯¬vvoiïÊÂ$Ë‘]›1˜ž„ý€ÐÞSטGÌ¢¸êÊL=táñäiõ‰Æî
+Aaž÷Å>&¿˜
+™"g—ŒÒU²õW÷MÐ6Kr8½t»sW9\¤§´Õ<ÒÕëoÛõ5ÅÞìcƒVÝ
+ø½DÝðžJó¯·ù³'Ý`¥2¸“Ž…LjÎaav¢‰‰óæ=ƍ›‹×릭/npÅ´ìýd/±tn‹RB¬Œlé!, ÞUl,ø¬Ÿt?]Ø9|Œ‡¡Ønîûzâ)%œp2¥¡TÊJq‘³IRE$’ýìT¥eQïgòÝÛ%Ò„¨›z¶ÄryóýÅÖ A˜Á<+J¼{E ¶Ã9t•v¸!ô«³H禱›#µEznLŒKŽÓòL˜°¿h³ðìZŒ×˜+ØV·2·T¿Ë‚ùÊ帒™àú|ÑÌ®„ÿO6+Ä]ÎnïtÎììÏÑüÛˆhF|wK¯ÏÖZ¿ÇP	Iž`®8­\Ùd?‘øòfrkf!#A>¦›Ü?칱ݡxÖ¶«z¾6ôŒî!ëԁ†$f  “V?šçUQÍP:ªOój±°ÑŸoØE3¥ôw,³f(0ëýHWÍÒx™ò’xy~FpëùéiAûû‡o
+­nIHh
+	#¶ G˜ÝQ¥°N³þ¾.ñÆ!âGuÅ£×,.Ô¡n:Tw ¸¸ˆˆ ¤¡p–?OÞHN#’;kQžHé†ë°Á™,7#…øýÃõêêltÖì&ûÏÆæ÷l|8Öúº°ê“ꟗ߮'¿<!•bŽ•z|&	½êSòñ«‚Èd7:î|[jfßuIþ’ñ˜ó€T™W-€ŒúŠ¢¯•ðLy6£ˆUOÑYÄ:S–XœïßRÓy»-4Ÿ~í…!lͺ\t°-B&œ‘¢VoKp±p9Ô3И¡!jŸ´‚\àHkSf~ú¹`¶Ê‹]V¯)xgÑ ¸IÇãu”ÜÏì5XݶZàÕ¶ÁU³¼ªéÖr='Ø°=Ž°^A¸\@P0TËuW¢>ðÙÃG^Ð_g¡N9ê¢x1{Ъº^®Ú†ß]Künya)Õo\2Áf$@³®qÞ>{ 3ð•CBqP<!=ýŠ#*أ찆O›ÖFá„Տþúû¬9ß7\X<Örú
+(W×Õr+v —HÐ]ØaHh!ØM›À«,kQ#\GŠ°OÛY»n4:å&L Êu…»u™¸¯œIǘ
+6&8ÙT'P-˜‰¾Ó¢…ÝKˆ…©«Q4ìÂÐd¯M™–˜F' ˜–)”BVeš|½HÅoƒ?©ç T
+CÊÁŸ†„Dõ.]Ö*±JÁr	♑50M^µ=«N¦É‹
+,¤.ŽMdžgS=“\Óád$ÃCÍ]ò­g‘f‡ ?^I gŠ¸¢>שª©V½è«ãøìèPæð°î fþscÕ;ì²CŠÇÄÓÐuït¶-CÐÔ‡iMXú8ãX/1ì˜âxRC§Š“Ÿ+Ù°ÊóȈðiÆv ¸·Ÿ¸°Fœ¼°¨wN¨FœÄèÕáŒñ3áèÞRü³UM3_ŸxE%Ûz]fê
+4·sw=úæ¸m;²u©ûxb¤…¤eíGvҏ¸D™o1ò.À{ó#‚ÈÆi|ùîÅ°5ìà`ï_PK    ë…}1P«K6½  ´  >  includes/htmlarea/plugins/TableOperations/table-operations.phpUT	 ꘫAꘫAUx õõì=isÛF²Ÿå*ÿ‡1²	©ˆ‡ä$»yºR²"'ª’’”õÛ§¨T 0$aƒ  ’Rvõß_3ƒÁE‘²¼ïZ°%LOwOwOwOÏa±ŸzI0ÍDv7•N&o³þGwîòWçðù3Ñï‹KwJñn*7â(ïÃÙ(ˆÄ0Nį—oÎŽév¿ëm?À§“i('2ÊVîÄ›`ìâ•ûGõ„¸˜†8‘>6³lºÛï/‹Þ Œ?=/ž Â4Î&!¢sÀ-ºâ8žÞ%Áhœ‰¶·)^no¿A”S^ÌeÇaŠý;ðÕë†ËqŠ(ÎOŠ7¿]\Š4sï°t!îg©íTJH”Ê^v›möGb˜@ㇿ]œ~øÛ/BúA9
+]ÆHHöQl.0z(†ý”‰¿†¦á,EÏ`À‹})ÜÈ~ì¥1Ò ³P7–¾aå¯2IQž(
+_ÎeOY„–t‰›ÓÍ%¡¡îBSòï"7ñÆ„|¤ã86$þtêïŠuݍ®{ÓÎ\ìô~@×ßÙîoÿYììì~ÿ—Ýï_
+Æ Nn§âOÏŸ–wƒ¤›ÝL,¾Œ<wšÎB7ƒáÃïÙX2‘SÓ$ž>ˆ°Øf%ÚòÖ“`¤N *J2îíˆÅ8ðÆ4úgØl±O\4Î ”›ÏŸ
+g‘G†HFœÛp›•¹)þþüÙFvÒSÚ=PjÞÃñlÌÝDxÑù
+r‹†ÁhO5e´”0÷Nw~|«a
+À ‹Î‚4Ó0©‡ …L0Q"G !–èq€ÈfYVõSšš'} ®œ0ˆä ÄøɹFjhm„	PTƒGÏŒfô„WAnCÑ~ȆÂÚ›ÎÒqÛIåÔ…Ñĉ³IÐ÷B†0•”ø€Í¹|×uÄâ¾Úf´ ÌžÜ+O;ð; È«À¿îh)“ÑoçgmîœÞ(:ÀX¥³ÙCHwùƺָÒ0¸_‚@¼~NÝ¬‡E
+•i*`ZE™ˆŠé1Ä{°1îåï;4kõ± *
+zÝkíº¾/\É…@i³Uý …TÀ¢~AT÷d#e“ºa8†1G¹)̟ݪèPdsåUÐNo›´‹ItƒåfŠ 7³$D€FÿÒ'xï&^D
+]-”ãBð.¨Hzàмž
+A…E²=Ryó—%Ž–_ÿÛ†?ñ¾¿]žž^žž\ào
+úÊß%2KFJ:ôÂ8•iӁãÃ؝шšÒ©ô>ø¯Ñ[ÔŽÒ{“AÄCÂæFt“>0ÂY’ "°EIfÝ÷ Ôd½ª	€WÈbŒã½‘ÌŽùtPTy.à5ÏrÚ'å|ÏXÂðH7´75,°P„:ü¢w ÚN~Mú,^ÈäØM%÷-z#CÑrJ½§i°]“{
+q¯88…nl0{2äÉIÞО‘Ø>K"…™] ò«&x$ò?gA¢tŒ‘E¼§³éÏÁ¼O?|@UÆb ÊŒ]ôÌÃ$žˆA/ `-S•¸a<¢ö÷	N§,©­µ\]ÁΏђhc™¢·`Rhws7œÉT
+ºJݹ´Ž§›
+‹e
+=¶º·¹ǐWDYÚ&à:ØÙÔ‡ùzÉžŠ4¬èòÑDÀáiqµ­®Û{(‘ËÁ€`ÁX:ÏDI`ÁXÒ‹ì.”m†ìˆœã’ÉP« /à“¿ksÛH†Šv !Ñ©x`nÂÞ@nƒ¤]Žh›ýß/ú½%è6óØò‚ì!ƒä“Òó—Lv!ar8v1iw¬€)ñ`ܨ2êì„ýJúêî’­¼íh6MŒUÑ[5XÁ/GÈÒÔª»”´çÁÌȤ"`¡Õ87˜	ÎÁ^I¥l+ %ãÞ0HÒìx„y|¼Wÿ*HèQ ³;`Ä£À
+ùI*•F(£Õ\Sî	y$dÎ0Äa<‹ü'“W£¸z`€g¤.“x.iˆ¦Ci¨êŸÜÑì%M&nr§í…U"iè¿ül\êÖÞ£ãuÑòà¶äÞðfÙrÄnŒ¢"bú´
+ShÃànŠ½=†Ü°
+Ž)$Eµ8ÞsÃ*8qâÃ*âà«t‚°d©7}[¥s2Ë}éSSß{ƒÐÚÁzƒx–ŠEœ|r4ëãI"aý™Ž­%&®!¬aÛ¿HïSÜQÝ°Øj¥b£œâ觰ÆÄu/‚»Ó)|ÎÄD¾ØDðâ̇ùåÉsé'r¥Ý›¥'ôsm{ÕéóTLݹ¼ñâ0„¥Ÿ4’-•r¬©Ks3.#4gXµ2Y¶À#‚ßwt‚^ŒþàGRÐsB`_Œ%gm*ªER²®˜Ï|
+þè•LwºÈ±hù˜À<;Flð‘ržµü—r^R/ç6läԐ{]“ù(.rÏSðD{9„ö+ ÖTžBd¨8Öz¾u߶ü¦øæÑÎ;;Φ…|ì­Âd£øI´ ªCŸµ oMƒ[-‡öM–§²ZSãw*¾È‚šÏRñ6”r*Š· Øm˜vúÕjÖ^Àò	œåÂi–ô)aÈÓVLK1#ùI8ÄÁå̽BCëY2FO%iÖ<UŸJAÂù~{{zëìÕ ÚÚ¿?¶ïsX׸izÐÊ‚,”-ø(ßAkàzŸFä°v¬ËÚ{Â8FXÄçŠk{Î:»±M÷¸òß_
+‡Cño?~-~Øþ¼Z7‘SÈTZ‡H«)qÄžÈ{˜?¤Q°ÿTl“vw¶·¿nQ«ûY¢~Ÿ}ó3üÆE=™î‡r$#ß"ü³äJ)ÎG¢¹ßW0yñi
+•~'6´ÜCw C{ÄÇ®Etw¿_à¸Ô™­Ãý šÎT¥·…%Ë–ÀÁA˸‹¯ZH'w"@¡Õ?¬Ð€Éáz\_¨äçi¸V¾ªÄµöh˸¶•Ó'íØúȱXý÷iü¾üƒV·ûëQs<Ã$ðàú¶¥s'L{urôHs¶¨\°³üËJû@gIeåÞËôDÜ”´ÄŽu$Rˆ—­Z¢_Å¸Ùñd;Zu€ ³½*B_)ãZuد¦"ûk¤ú»’2£[‰Öô¶™…®*-þü ©ý>#=ßDƒtºÇçxŽ(mgí¬ >
+”«É/”ì<*uaXØZÔ~\_z(t™4Óâö
+µcþ¼>=ÚDj&GÍjçôu
+}UfIÍÜ1NÂ1_Ös¨jáµÌ¡.u¡Üßš„E_ª\ÍÓ¾6Áœü{Û-íéf²Ê5‘ÕyY‘l™¸=ƒŠcþÂ>UWþš–Žè¾U
+Y縵ç&‡xЪæu&±Ü(^©Up£QÌBëDñØ*(¬^?:#^]?u–Ù¯±ôõúš×댳ü­ê9/‹]Á]Ç<ü²çÐù?¸l®xŽ·1ÈÑ—uÎþjî žË%䨽Bï’ö’¦DTÄQx·>at¼XB˜Úk	â,‹'ŸC{LÂZBœ‡ÍÎp‘>’ùClÌ›ÙàS
+ȆÉÏb#/ãZk@²Ý12ðŠH–’NHÓØ?›ö ®dT¶ùÅ·ÚGaˆádŹVˆÓņ/áªÎ©:øÙžŠª+9ª(Ž*žCU"@€ØZ秒œÍµ,%^TL%'†­ÕtŠšé€ˆ;…õ|"2[H	¤Õxq¸„l]ƒ ŸM¢Ç²â†a3'и#xh†„‚sJqõeíûé¤|qLKÓÖa]/›\^M³,ÕlyòNmò½V\©kϏ½N±ÞTØÿC¼Ó|û·½ò"ë«»S¿íä̪šå´‡úˆ|ÞôQ\mÚlòº9£g³&»«°ÊÄ›xåÖBå~û´Ë™%3i‡¤›ä¤m'þ„õ8·ÞC§Ð;Ç‹#ÍF»´ÆžÜé>?°òÏÞR?ÇXέÝTÇBïn¬ëÃÕ­u$„åی붙:/õt»ñŠôُ×Ì£íâ*ŽÄûôõö`¾ÀV}a‡SÑZ}wè˝½ñ*=組çGË(ÿkwðÿ÷î 6Ë‚™Z›Jó2 ›“öjµ{ãm:Œÿæ[O8:ˆ+O²µŽÓäî‘;TÕm‡b¥ÙÖ'#5»	ö6Á2nìæºû	vźy?á_µìÿþZvupàS–
+#de`øñ3ªæ¢¡º˜ã­Ýö¨Öž•%Áãt‡î$ïvÅ$Žb:·'¨KcÙJ‡ùö([ÕBwÊ›¤èfu!tå’ÿÚ“æ¯è3 È÷©fÏ|é“ÅÓ²Úç¹Þ¡µZ	‚oëÛ×$ðý°R¶°H1@…Úþ¼>A®.!È ‚¯øó#B|Â3ÿËH**QÝð¥6¡,ïo­ÈÍ×R
+À)àûŸ^(¬-þ7”
+ÿ_.Tòç4žH}1‡ý˜P—dš_–ÁŽ›ò
+é/½a]屫ZâÜ|£¯5\
+#mOâ?øU_SëéÍ×\˜úíCSÿ0Ï™®1ð²b,C¼pcCWè¼Pº‰º[ÂÉ2]–P>ÈZíµC–ÙÎëEæÓñ³¤á<aæ;•÷vê…2eã=Ñíâð@lïÙëïÌg(³öÎü°s1uq ;曝ړØÌDµ”È$Ó0Ȉ{ßâ>²ÏòC(Ÿ~‘WË·¬†¿Œn¿øÖoƒ0à¶ûœF¾¼5-Y¢ÄiiÞÁ1®òÞ‹1–¹ÚÝn$Ŷ¹YÇ„Ò«­- ª„‰xbñ’#úFsq>XE˜É[ëÕ Ä‹ú´ƒcCÆAµÈúu~m£±.мà¯Õ2¬³KZ^IùÔ_"‡ÜAbwB}¨3W‚gkáÏ­)ÿåqf¿„A‡kKÙV5ä$-‹šmde«¼n׸™í„œMmkË2¶Ê˜¸ú	êDêmiß^ðn5;šÔM ß|C€=üë‚x†¤ùQ( „„ÔBwj°¹ÔˆBð™c…Îî³:åéZT÷+1Qœ¶)ÕŽ	‡e:ºrZ
+‚—Îß}¸ L縨yù®‹¶ä.CØ]1íªê)»ÐÚ·¾MLƒ4!¬teOÍT坽0Ž$Ùf1ÜÝDA€R®£à¬Kó"ŸøS§Ñ-	ü„$,c€®Q>4I«¥Q3ŒŠøRÓŠgê&åezÂ'
+W*ºã’ÃX¢‚`Ú¼Úˆâƒ´2͐KG_o.Ñ£»Z'(x3UÐ%0¬yºb§AžÊø±L£Vfª‡)ïsöÈí'·–21k]¹z¼ô—T¤›C>ÊÒ‹_«¿ ¿A/vvS «äqüîì·7ok&¸g=d³Õ™f¸Ã¬0Ó>‡eŠ£¸ñ\öükg>…ÔÒ²¾¦Ü2Q`&¹´Bz!9ÖîÓ˜ëfïLØíÍǧTOÃWó¨À'76;Š7“­8ŸÏµ˜F#À®5ÄZŽ8~2G”» :d¥?+ρÏ6ó¬ì?ÊjOtrvVç‡pÏäéT%©Ë¬	?ä-˜§vKV«û“fwRëMš}ZqIƒ‰ÿ´	‰òI½Â“L|èñϝùEŽÓrE‰¯žlÌ'2)‘È^¼¯OÿýÍÉ®xÿ„¡«ñ I«%¥Û¢Úþ@5ú™k·=q£‘ìOÚ.û´«kû‹ÈŸñà먨&û#éÙ.z2/cÜéõŒZù]ÜI‡Å	°vŽ¿r·¶¬GŒqt/ÍÜ$;æW$x?”7Ê?½²Úß
+‡ ïÂåý‚²pu£±nòóتsÿЦpJ7VÉeÓƒ;üÍÀhA\¢æ]²d~¤Ç¼zÀ÷ _XSµQDýoÁ(£ c‘Ó
+?ñ£0I<ó§]Ä·}îYËGá|h
+7©"°ö“ÛiŽ#Ž:åäfù´-ÏÛÂô{˨_´	¼OøfZÌ…ÙÂD¬Y©q˜ÊæIXã¹
+ç4‰'SMïWÐÑčîÌÁËE<}qÏD|³݂fÈOxÚè¥= …ЌڠŠu(ý%lB75êù Æu˜Àë2 7)S^D äÅ
+ÊkWç9&m¤Æj3_*d(;{ðϾÖÇžØÚ
+ò9£ê»•ZHÕ†¶ÒÔ¨·pS­!ZZôIÞçB5Q[Ÿ&qòÌŒ= ¹œYã­twºo˜jþæ^Aei9s3‚ýÈD>;Ê!•¶q|,’QûÛZšÞà'í~ÔÔ=ðsé^?ø²@üãâ#_¿'ˆ¦·Kðäæ^ÜØãж¯õ¥ÜÅ,Am‘ªÆ¼^«ÚíKžúìŒFÅÐ÷çïÞŸœóC^君_?çK^²ö9¦*îJ¡ Måj›žª[ŽÍœLZ]^ò*aóåН…a`—îðŽž¸¢÷øt>‰ûÈ×tðâH _î”*>ÜöìÌCeæBׯ{„°áµCôCÏùøm]M󓹌¯¬GœŽÚvVb¯ñ8#&"
+•ñ©'õö—)‡QˆÆ èä-!àÖBݲÓÐÊ5ËJ«ÊŒ;õ˜y}ÔÉéúWj†¼8ع¶¡¹>~wÆ\WË<:7¬WJ<Qn.qVn.±F¼©	ÚÄ/±¿±Ê¼u‰Öij¯eßZsÔòŸçǵJµÖ¦Mìô ½®É´Ù¼a°¿œ¼=9?=…ü|"®hçmµ¿ÇvžŽ)%HîÔçÔÈÕö(::Ñî¦"ÈZàÅx.!Až¥r8¯Ì«“_Nß	wó§îAHÈ÷ÎÔò*ßé¦C(ùÁwpÆö~·âÄÇ`Ëï¹ ˆNÖšã©õn|Þ³üÄÑ´ Nõ³é•.Ü´vø°¶ƒI6‚9 ÔTk7îÍq{åãâf<©‚Ô(éwdwÉYò¦£äå“乓Þ¤ÙM~õ8†ä[îVG‰‹möï<i)áó*X¼•ûæôN'®^A.{‰®Ì&uCÝêô(<îꨡð:[coºTfç·ÍÓaëÖSfö!ìê¼ð
+#'x2<ÚpVÅS£Éüûzxø@z-*}¾\±6§×ó#ÖÍøíÇßÔï"£Ð/Á]Yx~‹À[^7k8»i%Ž%*]‘9†®çŽÛbÏ`X‘?<àyd]Ä@iâç'WÿnåÞãÜ#”úóÉSkYâQ	«å´òÅ	uoýþ»Ó*.{˜uƒJP7¿‡o¡´4tÝpí>Æò\µ‡ÍØ
+-+™ö0ŒÝ¬è Òô5~¬ë ‚aâ&"
+jUXø«1‡/0Ä2lÖs6º©ýX`>óö«‰ZçËð†%¯õ..¾Í0’êIs7±,ÀÞÙTnzB\bkvø_}~ÏpéW?ó¨Gý;øˆ%$ºÙIgßÔ16¾:Å»Y&ûNcð¯I7Nºø”zÒÍbHµº‰\$A–I}>‚#I<Ö4ˆeÊŒnÎ!ºXA«’uâ¸Q#Ã<GNE¦óŸÀ[Æ—Žð(1ác•8[ôæ4±	W?-pÆLY†á¯v^~÷ýFOܺøÏ¥tò¾jõb%tdRŸÜSҌ̫¿üþ)~UsRGS•¾ð#¨þWÊK1x	ÞÔ:Y®—ñùh  U¤r÷&k6 RH9i5%ø^I°’DÌ/‚êá™EdyÀ:+"Æýaá\'Á1rîñc•J`ÿ‘z‹Ž›Yö,¯=Åù@Ëv÷Õ£óéê}g‡¿qج᎛ͅǔ+K©àOEÞ8Ž±¤¹ÇK(ܲ¯,ÿÛ1šò4#5ÚÂZ}DJµÅÑ$†	K€Dßkf»R+÷Ke\†ÍdžEaI°T¼™&îïkÈ̲GQ)kI!')Ä×v+¯MsEYÕ#‹¹z•þSIÃøT]™¹™ò]^ô?ø¿”<“c]µg)‡SûÃr}9_¡­a®`ç•v.u)‡aŽ?ó|¹Š}¾,ÙßW·ÛÛþ_rëzY{f‚p3Ýgõ‡¯œß"ÜËâ>×Klñ¥ÅÐJ¶X¯ËZ³T<—M²Hl™E®FË–N‰D“e.7Uë-Ú€cÔ¬LÖî5ý7
+'õC\ý"¹ñÿŒ¯ÆÐtk~KœïæÕCs›1 gÁL€ÚùÇ‚å¯j‚úZzÝ^v~1½–\þpAÝ»ÔÞ4çá³Aìß5Á&ÇÂS Ö]öÌ©˜×ô?Šø´‚ßù¯îŽ®¹iøî?ø<À$’¼Ì(Ì
+ðÐr¼\ËLÒ¸Ô3wâè¿Gû%­,É	…†—Ƶ䵴Zï·V¤Éì³v³ŸU\Àœ~kÓNÀ‘2ð?Óþ{÷2ïÖ2¼u!fF2b³“,>œ‰?7ÉVL¬·
+ہg]D¸[Œ·4/}.–.=j5,ïùæ8xV&ãÌÛÜÈ=>†m†¯ÁÑÍ¼>àEÎß‚£a?£-šæ—·3ÒÇO£_ò:áæ=:z¸ÁË-ûÒh	iH†Ÿeå˯ÂZ÷ˆróþS¯‡0)k@ñ}ѽMÓˆò´
+yûf×8<øìlÃÈÔ¸®T±zwM™&©´‹TÒ4§¡(…êÒ£y¯·Fa“ñÒ¥tã¥UºÁÞÎÝmY¨¤›udÈÕĦGaß(@|¨ÀyTN^õ€2ŒÄÉñ×äañ‰qàÍŸ!] çWûÒœGzô¥ô»Jªª—ÈwÕ;4¥ÛzàT¶ôöãåZ…±árÉ‚Èx¯¾m:à$tO£7ñw’ÇÄqÍ¿Þ¦á|¼	±èÑ Û¥´žáãT?F†ÎIçPN<_x=o”·\ß\ü»®Wåù5­ž–ۏIn³`h|‚zñĆÄ!âFxáGÿ ø®aú!î?‡v»½ýÓNIµ¤Ps2Í4G„YoY–T."ÈìWb‘Ö"ÂÚ¿X3µ1hØ_Öå–kçòpÿÅv¡©˜)=Ír¼{Ixåk±…Ä 0ë@t†Žƒù{—d
+Ƙ¹àL8ÏZ
+‡æcÚz¥eDÀš½|Ðäú«Â ØÁN‡!’c"¿V´«pÊm’í
+›;"Ü{øçI÷hYÍ$¼G3~ä¨]è%ìµ(‡i$R´Ã\q5
+¸²%.~?©çátÉ÷‡õd‰æQP¡ìi”Ÿ­VËr¾6tŽ¡.ŸBH’F‘Ñ9Êgâ¼ÈŠY
+ºKñi^,6ýåó5G›Q=Gt3”µeMA±Ëº²g×&ã=^EßÖíöìø8£¼…õ¼
+ó§ÝœB’R;RjJl9¬/y{¥ÄF;ã™M’Ž;¶÷¡$Ÿm„ïYœ«óuÆôPárZI‘Cé>ÿ½–ê[,n~€.扠fV“w4a3_Øl1]//OF'õÞh²÷tl~OÆÓ±g
+S?*>¾øv5¹ó@
+ÈýVZZøù¤Ô³[OÞ‡/3"œ­‰»‚MIœö9ÆŒDH›¬°î5œ|Ž*
+Š®¯…ñN©l°WŸ¤½ˆ%¨­¾îìÒÓa [/<óµ3/ccçÒꀹ©ä;Ë@é8zõº¯‹¬zÁª¢WRAþ8ÙÍo» IãÀÕ«2Ù06Ì	¦³›ºóg},ŒÊ\,ðj›Êમ.KºU­ç¤YþÈ)îKÈa‚ÈÂF·Yµ^Á•Õ?ø¤ñ/w²±fÇ’Q	ÓXïjY\UËUÍoÏ‚¿9~Ò¼ÈTPíon™IœÂB‚|tŸß…9³û÷@~Pbáx‡%
+7A0§¼Q8£ÿ?œÔ§{F&€@À
+2±[±ÐéxkÆŒnÊĐ&IW‡MÓ	·A¤ÛÖÏ0ÕN·EêÇ«Ùj]{î2‡:ýMèpn^Ս6$猦¨ÇŽù58ìÄyÇî8È@ n€‘¶SâE2ØLÓÙsíá ´cÏm”êéÞ‹ ¨áâ£s8ÈÅ×[Ž…ÜÌ9ŠèW*{#w˜ô‰%Z½Üaƒ²ÆÚý>Ml“¹\J®pl	¿+/¢Mh¥:6åˆè8³“™£-ˆN¶yIGaOa…íÛ•WЏ`Tyva$á£Ú"¤ùÌ«ëNÝÊEk'Ç•GSÁæ´l¸ñüÇz„82䜔õc5)ýoã¬	t4 Š~Ä>uÅkL;¤L§$
+¨gÄáÀ½ìatùilbø¸s4AÞtÅa—Ía[;v¨K‚îèõäñSá4ßP’¹Swû!õ–^n;œ×µxŒÑÝöŸSäÝ£4§`¶òÏŒ¤UïŸä(ÙOG€dõo„À}ˆ¡"6kÚk ¾xûülï£
+~ÿLé¨é'ßPK    ë…}1-ùîÍ  "'    includes/htmlarea/popupdiv.jsUT	 ꘫAꘫAUx õõÝkoÛÈñ³ø?ì±@@%2£\?´ˆ.W$ªÓÈè
+$‚kkr%mLq	r%Y—óï̾)‘’Ü^¿4@`iwvfvÞ3«ÓrzòüéSr5ç5™òœø›±Š¯XF¦•XQ.Ë¿óÕ –W,%lÜnÈG>§œ¼¡¿‰‚LEuzBž’KºøB+–L&„|Ÿò”J.Šš¬YÅHÁXÇ¥ z¤$YÖô‰äÝÕǯ+F…Ê~Cv(0Âù2¹|ÿeò"ŠœLA–q)*ÍèûB²Š¦X¿"¯“T,2…Ð_0¬&…dº,RdŽÔ’ÍEÁ€í÷R‹ dEÆ
+IÄ”ÌrqKs_+„›YÈúÙŸ“!‰çr‘S¼È÷ºïé_äŒÖŒÔpÅE …òä•œ³
+ÐJʁy<ôôùéÉéÉŠVÀÑ7ÎÈ+“¸ +>£pëdY³êõxL¤ø @Àc ÷ŒßžÆÑ¢æ,ê“Ÿ^‘³}òäÉéI¨A
+¯(`y¥±ôGŽ#oI%r•‰t¹@z	4Ï>zCÓ»±ZŠðÜ鉹µªXkp@$—9»b÷r@栍œÁ/¸|kNôÉ`)×,ŸQ	
+U8{ø)1–ðʘÄÈ®kn1ù¶€¯nËЁmóI£C,7ð|’‚ž$;ÏÞ1Ž2¾R×é±<IsZןè•¥L°‘ÇSâ5A¥ ›Ø2&9Ó(ÎñÍôi€Q{#+»Ôr“3\®“RÔ\	ÒÛZäKÉ"½•³)∆å½Y‘¢Z¥˜c®  ›WPKžq‡
+ÿú[Ó}m<çy«-m+=¾Ñ,;_!5µ= ÑB€Ýfb]Dç–1[i#é¡…$ß²ŠÎ.%­d¬½çod
+F-Ö	CTä%xdâ¡ï/{»”R	ëàm5dóºz-òÂo¦7ó¼(X¥Âœ}ò§ûá0û˨ãô?è(ŸÀËbç6ý~S̸fEŸõ
+eQ(Š•²~'@#>…Ä_ìpgs¼pc@£]|Ky‘­[H*Væ4eñóÕOdàûó(›h‰7	¦9Oïþ‡Ô´¥¹ÀhhÉ·š,˽èMÀˆ“Á	w+²MãœÂÔ¡À`g¼˜á­h^3‡U—s±†åb™çÁê¹Û^^He
+X㨲$¤ªïcãp’.«
+8¿0Ë  ÊJH!7%Kj`æµ<wQÈ;`> @žiUè;±)]æò’ÿfĨ£b= l
+ÿç~)”&Àù¡Z’ñt·Qž–‹ô.²‡×.ò‰é´fòϤÃ<ßÚ|Çøl¾wu€Bͧ®„éScaÀ=€9¹Ì˜|më…¨­5ôØZÁ6G=6×=3°Ê(ü¸9ÍË¡2|âAŒ[´¿(Ö¼|5aLî=Aõ}£è±¼ýjmd@ÞNB“Ãk£}	û"Âò—Ü“3‹¢ PÉjÉ,þ]U+ˆ,ìh²Å™ÐrUw؏á¶2q4Štðýûï$v×ùHå<©Ä²ÈâqFÀhž“ŸupFz³=èy ý`]H»›¦1 êp‹ÿz÷\n7>ÚB!ô3_/ànº³mBÃeUfRë“'¾ìC¢KZÕ
+ò8­!ðUÐP|€jCyAŸ<CYÀ?(Dwáþ‰±°â&ã!…­ß‡d?8Ÿ<Šó+QÃøÉdqç€ñˆÆæ9¯Û£_¬‘ Þ'Ì?aÔ!Ï”²€ ‰\¥7Wq§ã˜J 韛ÆNUKäì4MmÊ¡U‚Eo¥‹n{픊©mïœêòv¬é6€góëË!–Å&%weFÓw´T§uÜHörݨS#U²D7¿Ó9Kï.lЍҶ/ÿ9jeÎâ}M®HEi)—‹URÐÁ«	M8Ô©k)Ãzq«ü°%ñršÞƒ
+‚ªŽ{)Õ QÝ„0Fxc4:èßEXŠe6
+¯¯÷M­§“ñµ¬ÀK-¶¢y€Ø nxÊYžm1änSBÕo6Wt†Õiñ¢\B¦»ÞX­ý¤NBÀõ+K=ª‡ÿ„ç;wð%S‘.ëØÊ 3¤¦zÝ2]Oo-ήݮxYÅ°ñGûî.Ö?À}w]×}sŽT15c²Îäü¾i¦ièvƒqÐótùGÒí
+¦YÊXµBƒ?ØÀ&ZZA“k`ö–8`¢oEµh/o¦°ãR†ÍlíF ºÝ«Ȭ kÆÐ>ŠdÎ_ÉkµV¹ØXW·MÓ<çÆJ-ÌI:CÞ®£ƒîcÁgã³7®+¢Uw) ˜ü|û6µbpbëé «Ñ€!‚÷‡ÅkÉo\÷ º<J,pP‡`Gå;œŽàÏ/ˆÄˆgDž=ûnýšÁþõwM³§Ù¿†n§ ¼7ºñѶ2gf§l``.jƶ'[¢ov_ÍfÔK•ñƒÜ¿ôØ\ù(ÊȃoûÌê…²ÔP¶‹ro÷×<§îYéÞ Nš–¬Òå?.¸žÌ\³j½¢oòv­
+Ù5éO”L¦86XàMw(’pYŒ.ó*¿o„Tp­NÝÀŠTÛöÉVlv¼|n’NÄ퐞F§ãneŠ@Ì$윣çžáõŠâ{€³»ÞzŽs~ÿÝÎ jªÙ’
+tf×^Ý6 Ú? ¤j¯
+b¦sžmßÐ5Sf0l¼®*º‰#Z–9“Aq嵟uû¹‹?‡vþõY´uë…Ÿw¦Pvœƒ˜è#¿Ð8âz ôõloU¶$0RÔœhòš„Æ;ô™jw&Fºpv‡Dg§U8
+î
+–õõÙÙÝMßÅÙ4
+hAå°N+G+zVÿê­ —	Ù¦f÷–•¦}g,ij$±â5¿Å¦*Ô73rG(8Ë‹ÀžtXÞ£U 1r}êÕ.¡8zS³c­YêÖ.5Ž9펭võmc¤ø+꯯&%Hí4óu¢v'vw¢v'/)–pÔÖyBÆŠ(ðćõ¬phDû*ჩó6ã§÷áÓÝq°	‡zR3\ÅÉ[™à÷5ؘ„“F_ègb•›š-ZZ‰<‡920_»`0¯•c§É4pÒ@ÕØújÅ B®ììþÕêýg°(5âLg~”RK5ð£ùœlBÙÑ»ôgßœ°X‚:•ô^{“œné`Å°,·©ŸÙÖaßë®-‹Õ,·Úh8‰oµ5×”ê×ìAôÝõ«vMÐ#¯ÈvÏþÿf½Z0­-¨3l
+³;×’v‚[»V€ÊØã7i¦Z±5k·Ù†{”q€EuÔ?ÇÙ†~Ø궃¦Å„O­Mtlàç{í‡{±ì‰ݺß~vs}~{Ò8ÂeTýfŸ¸Á?ê*µosøƝ@F‚$o¡Ó½úS¥ÊÈ>{a
+£'vú{ZúîœìÖ¥nà ‹\}ZYÔ3HÛȤKUºyeàNZ†ï­{lvo†ÐùF½ë6ºÁΗ2¾:êaç¾ä„ÈP¢»?¨£FËÎu3Í¡vͨv%l©yPÞÊB…ê:hæþRÁüAË9ëø1BÛ¯œèß¿øë§ÄÜâ¸Ñôë5—éœÄ°`˜Å¥øû¦HÜE/UÍtð¥Þ>±û‘‰QüîÛ»™R`ênÔ¤˜Ò"eùc©îE”zÿPK
+     €~1              includes/htmlarea/popups/UT	 Šß¬AT]­AUx õõPK    íe~11SÀ  Ô2  #  includes/htmlarea/popups/about.htmlUT	 .²¬A·Y­AUx õõµ;isÛÈrŸ£*ý‡6kQÏ$H]^[<öQe±B‘
+IYÏåÝRÀÄ ÀP‡÷íÊßÈ/K÷Ì xHÎÆQ•`¦§ïéî9Tû×Riwgw§àîƒ÷8‘;³]1/Âa¥rTÂ?Ç»;Í…œ‰è®øÌápæ|AfR†§årfLyÎã™»;ç<–/$óÀ‰!t"	b—£«n3bÙ"i}p"ÀžBæÒ )`x,Š¥à׌ǶmtÀÁž„€q9c‘mØøS˜Db£ƒ.Oðï,
+˜C±ˆ\-á±â¶¡úÇ.“Hå§÷ïîÞ—¹stXeä¸ÌvO?Tö‰rµ¤¥Rƒµ™œûËgŸÕ­ãÓ™<…ƒJåg«AÌñè9gÒQj+±ÿ\ð‡ºÕd,žCf«¿ê–dO²L«àÎœ(f²¾“Ò{Ê„Fré³Fs,2Ui­¬[±;v#JˆÓ úê<8ºÕ‚8rëV(ÂEh­F­¬;^ˆ <ðÄ£±˜c#Q8>© —œTö«»;N£æÙêðåwóݺڽѶcs%ií÷FÔzÙî|¼ݝw..6ôÞvÎG—ÙÎÉ"p%ÄÌG?9ã÷žöá²$t%B_2t‰À.Ûõ8î9s†@ÙO”&ôÑ°…òoñߤ3.¹‹(B#àW¹{°·o0l@ŽMÈÂoë82ƒlOLDâ”\¶Ï‚©œU¡TâÐ 18Z ‡fJ½Þ]̉=e²í3z={îx‹LÉ‚·À5Ÿ |…ÈdŠR[ù©íñEFÖØî½e0ü	̏ÙkC°t=ÔŸ”Ù±ðžÍ ó1÷¹TãfÜóX G¾­¾|¶î
+qÏÉ’–rÿA»YjžõoF%¸®´á=áˆ?µK1KT}‚…ïg=‰\žœ££Ø8»Ç_L›ÑTAÅŠ4Œ¥P"d†¤¤£ªCýÅ”ñKv4 –¶ 
+új|^©Ð‚²ÖÐà>C’žœÕ÷>|øy\æû¡ãy<˜Ö÷*{& í͝1–¤1±9FáûN³ÒXDYOÓ–*è&Ÿ >÷à§÷ã÷Õ½*rwç_€« V“Q¶Ík¯cÜñò­çìù¨h½kŠ Æøñózo—»,ˆY-^„¿a\ÂÇ
+P9À?†rš†µ:µx`lh½ææ&u™‡øÂ7Ž¬TýVé)iÚjŒ¨y
+<¤M¨Hr£·Š3
+›O+J¬†üˆMê{é@/ÑÐÝ"òi8‹Ý¢¾w7öà¿)˜×÷>¡ûKHáᑍ±-m+53N^q[‰µ=¾“
+½•‰¤ÿRʾ¶uª;eÚ$œ¼}ûµj"
+=(¢}Í„°¼¡ÊÚðI³ÃTÞ‚î“q%0î¿Y4˜¦éoÌ™ƒ“SÎL{X.h‡ ƒ—©`T5¢úcòÉ¢yKBXँKLO¬V†w–N~*q|~Ïüg*nƈb&¸þÂCH’°‹É„»o2¸SÄ)?èqµr¨t… †‚ÍŒ?¬EØ Úg‚S\`€š¦|Ìœ†äY ¾p°­0¡T­¡TžÆþ÷ÄVŒ	k©ñÖq¼ÕHnbÔ©3Å(˜‚E$ãÓÚ8*+vçOš¡„j* å)yšñu½ôRl5 &¶’'™ˆ­ùQ…ZêZ›+“õP¢ª§š”+X²cn)^ãʍVÆ‚Nµ®¨|;ùD©1|//›Æ&<W*Õ4w'¹,Ð^a™ÆNôJ!‚FÇËÜ•«wÀžp¬é[3î{UàUÕÌí ëÌ!æxôÓÔª8
+ñ¬°,kì»»y<»CZ8ìkÚ*‚¹@'AÆlOR{= ²L©¨V)†ýj:cí»ÓdûJ ö ÿüg¢FMøgõ/Vd_³Y9S
+–mÉbYàË‚q?Ýòõe"èÿgá–¸šÝ•JËž;ҝʪ­Â—JéÃïo÷Ëûû×Rç6m?…ö¿ìëZlÅ¿²æÊ–ñ?xR'ÓNëA/Íù†!86̾}Š<áS¢±<:U‹­bK&×úlÌáÊ[k›/Îü×Ù-—·0üRTxqeÍÜ‘p7¨I‘PiýHXÔUëp¡;qæÜ>ÅBc&æNK(Ï	œ¢aÚ«jò
+¬F±Ej¦¸=…
+~‚®k͇rV)ÌfØaågÓE\`gÃØq六ÀŒ~
+?]àO«¥ªcÚܨ`0ÔCSG÷E|ÒúƒJ€? Ÿ*•I
+5(@¦o’Áà g?°lçû¤³¸ÄºQ3®E]UHŒeI	sŸdy.%¸çÉD×%|IWòÕ4ý"•Tkö	›§ºSÖ:H™߃ƒ£ÊÏ0eᝢ%ùœÅ°GˆµÀ*~rV0¤ÇEšçïœwFÞÙá
+™ƒÿû—¶Õ ™8ÊøfDžЭ¼¬5ƒÉƵ(êGÉXSœ¡ÝKqè¸èUxŒœðUÄK9FS§Žwô²žNNN’Õ‡‘Í´ÇŠ7°Ç‘xyNu[°Yóùl"©–"Ö4¾RV*ö¡ù9Êç(½,î©É	¸"pï÷ôL͹gfö¾W“6ã’›äýpRŠ%ÇçS40–åXR'ñuŤÃPð´u©‡¼^51¼ ¯dÄûJ%ÏòÒˆ“5+øL"S+fЍjLg§XÑúMÿj^£såRÕ
+Xi.ª»6ȈÃ%Dåd3ÈQRÚsœI(­éj…§ÒSyÀÃèæ!¶‘<~Afé½bˆdA¾’k^4YÌh9æ,Órƹ?Pf13*uëtælpèÔŎ߯y’J,È©)Ì(Æl“2R†^58$çÇï3œë¼'²UˆY‹y¯$.3áô6Õz at TDÒ‹‹„æ†)¦;tÜ;¨˜ ¤¦ÅÂÊt?>9~!Ò¬„ÑÒIÏ&¸¾Åj¯nçbÃ^Ú2¼ëù¡4cЦèSÅa“’‚4¸'¯+mÿ×´[š‹of¿¯9_Ä*e«ßcýk ¿•°zeO§PÉë.Y°¬ê°’†L-ÒÓk<eýC‹yœ3eå ˪ “í%t¿mŽã¸Nuã™FýíiI
+Æi$¹ëø‰[#…­lÈHáÍ›.S™n€N·Èþxaò,Óõ…½M…ˆ¦àó"¿?-ò´J2µò2ËÆ°lWÅz­œJ©:Y´S·îî<zGã¸ü_Ù ¯Z»;
+³	MÏÄm<[+·Mßæ$l™RÕfsfÛ9)]“šµB1*{pVµôÁ*nõXÍ-ÚœŽKä`‘öø¨euݢȨNß2mª@1Ì®…MDA{¡CžÞ[.Ëë{ËèºWÍ[ÈWGx×çî}ÝÊö6œ›Ò²‰Kå½}%w
+u¤‚èúÂdd«ñÆ—ÕK´#‚4àîÎ&ÈC«1zêÈj\½ul5ºJíFnàÏj”ßLeÕ@­ˆ`2³Õ8²+f°1ꦚ))$Þ‘ÿgòØ	ùH®ÞD4w|«ñG?عð{"Mò@ó¯xI©V£%æ!÷qy‡EÃ&8P§ÞÇpðáôèøx5Ú4\¥Y«ñQÐfîKÆ„/(‹%`‚ŒÚ`Hÿžâ5OzK¶Á•Óg<ÙîHU–®hUAŸñ|@þŠùêñœ…ËiuxBQÀRh¤‰lŠ”Ù¾Š3(³í¥Šî ¨ÍË“gü FÕ6š0‰ƒÛÏÃÎíçÉš9f¥H¢6kR*GN¶	´ï`#L8ó½Ø®#uÚ
+pàWâÇÈöÑ[(8Á3 :‰ˆæû€ÝÊà“Ð~
+1í ßžØ'x«æ]¼o+ÞÊaÂ~˜¨j½ø± ñÆás•œáP]€äðÄ2W5ƒ^ãK!ü˜,o%ç'–>?±› èl¤H{ÿ—äŽ6“Ëø×:•L'!‡n·•ÁÝô}Ä0`Xñ>˜}ÿÄ’‡ëH|e.íÃÇê†DŒ&=Lú¾ÂRóyc•)
+F˜2•_5ž¸Ì•°¥t"¬±¬tœ
+)S|þ+(÷ke¤û½ô݇¸ü+•áºí»¿œT6SnbõL¡ZŸ†à¸(rüC8 ;"÷,*ÿŠ‘Ì«Ÿž¼;y÷&ÏÑÚô¬#tK¶™»³ÅâçX²ù_âéñ‘ö!×ý®ŒãóòT=lwÊUoõƒãêf>.¨;aaÆ×ùØ7Së:(ÃÅf%Ú,’eå™&è$q‚Ψ’˜é3þP¯žbÆÔÛvá0ãÂðwsÁè‚°﹨³Œ9k§óV`Vã“YÌRÆLŽw= 
+Œ¹ƒÆÀ_uŒŽíîlæ>1¯r_Y‰*™»^ÊåI½DâÕˆ•êh™
+×rρ¾IuÐÍ<‹…I<ø?EÍG±ð=uLKy]**2{ŒJ«
+Îârˆö¡Å0%3ã˜Òؼá‰À!¿Ãp‚_„(^„tº™ØP%ÀìU¸‚ÏcuMÎgΘ©å‡ÿ¼º’±LÞ>Õ&æ˜k;ª·g>ôÐnw–sg;ÙXܬ)«?<Ò¸:ÒAî¾S,&ò‘E÷4­¬Æ¿nñk#’üTnú±@ǯl“Q%2“©³½ŽE£$m2ÿ_‰„iYªM§|ÕÆÌ|0ŝľ6v&Œy´ø-£·9ÐV³uŸXœM¸ÚUU¸CTêê#Å(YTW!	)Êé¾£:bgOÚK¹œáòc“´ßW‘lÒÝz¬za&ó0¹E‘^¬(Œ1ÒªZúlxæ†Ç~:K_,ºÿý_Ëb«¸1Û¬ÖLz„©—2“™ÊŸ|õéê'Z­~”),{µB™l¡îf˜¬«ZÆÑ?“ÌÑØdª:ScÌ…Ç'8q¥Ú“¤Ûæ\’ÅОœ.y¤—L–÷2С<µúÑWDæLž’ò
+w‚&EMÍ‘<“1Ý‹kO˜/bªÞ()(
+Η @5¥|­QÜÝQF‡0d©«‹¶Y֐.wøœE6±¤¸ØÆ
+RÍ((á÷.ûñ%×e’#L¥öÝRF£ºŒñˆ;~¼Ô¿²š—a~]¸ž¾^¬ Õ¥/dl»;Ò
+4Uvá2Æ5t)hëgî<ӝº¥@±Œá’$BÁÈÛ\HZUè¢2
+êþ2éfwGÅQòãm‡Ì%oÃQœœ0"?´ÇÅqN¦ZYøKO]v†0ì_Œn›ƒ6àûõ ÿ©sÞ>‡³Ï0ºlC«ýy@'ÉpÙïž·ChöÎÕið sv3êcƒÕâH,~¨§Ùûí\ÚÃ!ôйºîv¢4{£N{X„N¯Õ½9ïô>1@¯?‚nçª3B°Q¿HTwwÖÇAÿ®ÚƒÖ%~6Ï:ÝÎè³bå¢3걤քëæ`ÔiÝt›¸¾\÷‡ˆ‹$;ï[Ýfçª}n#}¤	íOíÞ†—ÍnwEÐþm¯= æsRž!¦n§yÖmkR(çygÐnH å[•‡v‹0¼n·:ôÒþG¥i>éîb¶ÿã¡°ΛW͏(]á­ ]Z7ƒö1Ý¿ØÝÞœ
+GÑͨ
+ûýs¥ìa{ð©Ój«Ðí•Ân†í"’5‰4á@ma7¾ŸÝ;¤7TuoÔn®G~o­|‹šAÙ›8ö\i¸ßSÒ¢’úƒÏ„•Ô P„ÛË6¶£{J°Ñ Ij¢ÚZ£,RD-Ž2bB¯ý±ÛùØîµÚÔÛ'4·a{ŸÖDG¾m"Õ[
+ùÒ¯Ï-*sBçšçŸ:ĸÞÝAvŒ»`Ûð¦uitngÂê¹í(Ém×úÖšÉ])`rS7³q“ÝÀ¡·å·ÚÒ‰ô5ÈïÙÇœ!“}Ì•]K}WCw®hG6I™{êVÿ&`xËCR¯*¦ã­ÝÉ•Ümý©ž²¢×ÌýýúÂt/To1»¾ˆYndÓŽgœ)mq¹c~­¬ÇmÙ"Kn{êVs”
+£½ÿPK    Îs~1R|jû       #  includes/htmlarea/popups/blank.htmlUT	 TʬA[V­AUx õõ³É(Éͱãå²IÊO©ÑúpX PK    ë…}1‘¹Î  X  %  includes/htmlarea/popups/custom2.htmlUT	 ꘫAꘫAUx õõ}SMoÔ0½GÊ…Ëö’,Bpè:+¡JPn•¶â‚88ñlââØÁï& þ;þHËUÍÉž™÷æ͇õ4(˜hQXg)¨¿~·ÝŽónQv=]Çp+öy¬G.ÂIR¸? Â–à®·|BV¥`ž±©µr$P\wŽwžøŸx
+¢<;qÃrꡆ³ÔÂœK!¹2ÝGÛ¹5M»<¦ç’Öʳyvtº%i4X$guRƒbs¿ƒÈÐDŠ<+UÎtç”ò=u9­ /Zà¼{„…’×`ß<ï÷‰Ràq„$ä+W.¨yxúª
+&¤U¬oã‹. ­2n®.êá4æ!y”gB[V%OƒåÕºÖ±@ÓµF[o>ů 2ãÀm'uýö=(<ÒzÛÆ}°£±H½uçE}pÍ ©.H›g>Üæ[œË8¼täjÂøP˜'àJvºn=
+mꑬÍÿ".ÝŒ3†Uîï{„ŸN¶? ±>Ū5þ¯âhfxpÃ89¡}¡€<…â¿¿¾®¼ÌWIAR#õèh½˜Æ]¤Ô|6Pxn”×Qÿ¿®ô„Y姌¬Á»xÖïý&üµÿPK    ë…}1—†ø   Õ   )  includes/htmlarea/popups/editor_help.htmlUT	 ꘫAꘫAUx õõUA
+!E÷…Þ!pf9
+î
+=@/`ÑAAë ¡Ô–Þ½êH¡«<þO>?h)xy< Z£t@rä<kG1ÁÅø
+Å.u7Sp‹º0 Í`c ÝÞ°Æ;M«
+ΗTrÊŸv-»—Yà9å |Õ>=LüÒPŒØBë¬dç¿6ɺ5wïuäœ7¬‹bÜT»½óPK    ë…}1$ —    (  includes/htmlarea/popups/fullscreen.htmlUT	 ꘫAꘫAUx õõ½XëoÛ6ÿœû®¶Ø-9͆‘`yt
+>Х؆40h‰²ØÈ¢ Qv²6ÿûîø-ÅÁZ ­?$çïŽ?9}}rùÏ›3HÕ"ƒ7ïŽ/ÎOÀÁ_'Apzy
+¿¸|yûþ~œ½òÀK•*ƒ`µZù«_–óàòmpKâûû$àžýXÅÞя?ŒéÿŒSÎbý„ÏJ¨Œ=¯³¬ŠJÎs c~/9†dù*
+ê®àOñ[|`KfV=Ë0å±P²œÖeX‰<–+_<祿A»üËç
+±‘X²Žÿóìw,£zÁsåÏXÅß½=‡OŸãx÷ö¢µù÷kès®Î2NÕñÝ%›¿bÞóˆËë_®[²tÚ¦,:‘)nÅ{‘½~#A¯~ZòEÈŠ†@›û¬@Eã“Tdq8Ü80~F7N4 *£‰çûEœ¡>þ‡Ê;úÂMm' “è—`h¨”)À¡(y…v‚Èqƒq4$%:åÉ?N¤.·§?µhëN"Kè‘”@þ_Bü7vøÏç*
+aoOôá£ó›þ5Î_•Ba¤È2öÀkÌÛ혷«}´KLvÿ+qM»ÆONúh#v ÷…ãÉp³R®*4^±^ƒH&	ç¸ÌÙ
+†5~n1‘
+ôo®¦röG
+Ð9Öhhh¦0v Y¦P)	3Ž‘J°LüËcÈ0K¸‚¤Î#%d®‰½>\“âÁSTèküàé{mÖsw
+þA/rc­ÒÒû¯wf at 64†MO2Yñ×ùYõøRçÇ_àë:÷ø]JÝ	Qü~w"c,à	<û͈‘+ë"F×MMzZ`ÇnÑAv©äª.szÄ̸ÿNÅjÃÀZ\ÜâaC×¥hx`•rSš5妡Wz¡E]|дtŤû€žµZí0eqk£c#ç«\ÌSåÂÔT7˲uˆÎÏè¡aÞ„à™Œï|¬¾Š+KÚý©’2›±²EÖ±¤“Ö»aDon?
+©þwîgˆøN?xt#»šØT9Ýgkpï²ÒðE2OÄܯSuuÌJkùú˜á¤Ù²aÚºis0âŒFÜJÝeØ…œ¶Ž.4lw©ë‹[/ü>™NHµ-ÁkÊfQ!ºbÕâRÁæ\7©o˜É5Éÿ-P6øû ŸbhÓÙÄÑ°6<"9­ùzm ·q
+06V"V©ÙÁۍ~ò6h&N–Èj%‰hZw”âÜÄaÁnÅ‚jnV+…Ö`Í-Т¥õn3•_ˆJ]yLbx׸õì¾tBgzywÐöö`W,0U4£äԝãÏE‚üª¬ù€’Ð4%
+
+p…{¸n옓Žh°<v0B9bóÛ¤jãâžgµØô›ýJ>G©S
+fõ\äÕ °ôX~מADÞ	Žå¶µ¨»´^Á÷2âP¡ÁÅ–˜;ù¦>ë.?Dz؝|VΫ¾+]ÔÖZ‹â×e)e`qd=ØÚõ*µÉáœMSÛŠ:[é÷¨<dì´+ˆM#ÐUíz1„4ÌfœŠmž©Š¦síÝÔ“=Îx‰‘d	‡Õ6ˆyÆ(¬¸Ç¥XpY«ÞfæétDçY<1ƒzm}ð>p®±œH}kƒ#åVBE),0‰rÎc;:z{¯éÂÎz
+`}þK\êmuÛÙ8ly-ë*»³ƒŠu_Óó];Õ")Y²¬×škðëhÔ5'š¢ãQGîô×g'ÿi´ß¿ÂŽG§(ö…MNý¯„»Rä&í©CóÑÜ>€ƒƒƒ~HB(bIЕ\`M	úƒ˜È1ɨÀEìæ{4ºVH¶t¼v„mþÛ@'‚ëšÀ’k*")å¢U,zÏoÖ;“².( +ƒV	«,1‰„n3íRpÅÖàP·Êî›ÖúÆeîO6›×§¨Â®þv2 J6¬(Ӂ(Ä.X"l¨¸
+‘£Œyé^Xt3/eÇÃHf—MWLXÄ©áÙtšùr4ŸNÆúTKfÙÄË¥‡ÓÍ!o+Ò|4CDxoªŽ¸kËßq¡û˜2ÆF´ }öÄÛªþ~q‹9œ‰Ø-9TŠí7®RF¹b^RtF¦Ç¸íï†9\É“_éãP{š¸v
+"^?[å4è?[¯ŒPSïèç|Vá8p{9Ó²Íz”üHŸ§û}ê?PK    ë…}1:‹ÚÝ«  è  *  includes/htmlarea/popups/insert_image.htmlUT	 ꘫA³8­AUx õõXmoÛ6þ^ ÿUQ,â—¤ëŠÙ²fh± Ù:tÙ€¡(Z¤l6´¨QTÒ´èߏ”ä×x͇–¯Ç»çž{‘Ó…[êéãG¥ÉŒKrZN/ŠJZÇ.–|.Ó­ùƒUfU阻/å$qò³|â·œVVÙl’”¦¬Ëþ§*™¦Ú8àª?r§
+aîúVVꋼ2G?‡'ìt8<ãn^™S¦`…rGÇì+ê{}-ôüZù•1.ÜrËJnù’MX'×fþÊÎë¥,\叩œùcAþ	“ùý¹t¯µÄáùý…8JòëÚêä¸Ëu-A®¿ø!,pŸk·í>.tf¬v›ˆ°s j^l×7’q¼Ø&¯$aa¬ú²Mm´2‚ûTiå­’w}m2Ž ‚”šg’Ø÷n çÃtc*O—o«Ä2Å»·‘XÈ#+ÿ­••”$	2F,ùÇÔlYWŽxi™[Hö×ûËÄkáuɍeG(E1U4¢ºáŽÔ y—ºê8 T}"5áÕ¡+× ùQüA}<nƒÓ­‘´d¥«mÁr®+¿5
+à…ªb‚;Îf<»aÎx“2®µ*æÁ—\I-*Ð=ÆÀ	dd“vžD-Ú¿Æßþ\‡=Ý .ä{7û$³Ý« ’+*t­"ãC±("£átļ¥e›L›*®­a»Áª_x‘I½š²HHQk}˜Œ?(ºôôØï±*¾•ŽûÕŽež_BG"–gø‚ßJä‘œÈq€×V.‰ˆ‘¸UºmÍ£÷`<7q¼ŒµZâîµì–’¬ª°†`E;a3#îÉäòÜšº#v^;gŠ7ð#3Úظz2Á
+7b§§ågvÅfÉOþ–Vð‚ŸT¼¨zPUî.¹«bĆåg?/¹)q&-ڍ°@8>Ý¿þ×àÉJºEO÷œ)IhgmfÀše\†{ý\ƒwJ¸Åˆý,—c–kÃáQ-s7n•;¼‚ˆfÏGðˆY5_8¯s?·­˜Ÿ¾[¦t]X /¨ñt¯Á¨’‚þ‚¼¬á¿™wÜ:0ÐÜ:¿Éýªt8;°çØëÒæ© 2°åép8{-zwÍÙ´Kض€vgÃgHžûÆë>:%¦PŠlWáxe4ä±ÄÄÍv{=T»Q·¥Ä*ãZ¢Q6*5ƒÐæÁГÓàD1I¨¡¢,ê–eªD‘¬5ƒ°Ó'½^ÏççÊÕyÎ`†«^'îsÖ$IØRº… 1¡ô”¨OO’aBÞ™$Ðã=ƒî5…þq—AIèPQw¯+Nì”RNêD]Ž4Ýà!˜ƒv`"Ag+ÚëÓÔ³­“UVð%Œ1‹Be™„„ºúÎËÏ’XÞ<`“äuÓ¨ø[H+6˜Æ£i`(½Rb.É´Ên&IHÄ?^&ìt‚šÈ½S(Õ&Óp$ÐkÑØh7ìô{q|¥ÁÊ‚;é7Û„ ¦®<扰fæ¨ù3kØʼâǪº,
+ðÒ›^!¶ëv…aàŒ~ÄòÒ»SRÐc%¯…ˆÅ	åTÏb-ç²ÓK~oj—Ât=x|žÁo 
+˜ÕÍ\#~€&ëQT”öæŠ1ì§Ìp‚–E˜Ja¼a›fr HUISúÂ×{ŒÉ}Óß
+¼.Á(ºµM‚±[Êô¶÷]'òì¼þ·÷ÝG*AåÛ!azEÛû$ðYµTB at fÛ*áUÜÞ'cÆÁUª ä2)¼¿¢Œó°ý€”ówªAÛ{ÕØ-À«ñ €=@ €ßb·+È+®€bäÑZÁµ¸8÷剜ݲªÚðØ•RÂWFˆ8£(z±"åRb7+—¥»÷…añì¦&›á;ˆ©b_â½NH–Z„õÌñ'ÕòïL6™þŠ_NÐqpý08ô•°	“
+hZ±Ÿh0Ùê&Ð/§²C4ðwAo¼…m¼~°GÒ™…ƒ’[Ì—šî‡~c[“±Ö‹
+ûgréfÚTD‡dÛ„Y¨nÔ?„Ê:ÂwcUOUß„2˜­š¢Ž¦·3¦Óh…u;À¹å÷ãZ¤Ñ$9¶ÓsûŸÛz7–>±Ë€øÔ–bM	ù&Ñ‹æf[w‚?˜ ·ß½mZ ä i™ÿ$Þ&1~,ƒT®4/ѼPáÛšd€ÞÓšz~ßüPK    ë…}1ôø[
+â  !  *  includes/htmlarea/popups/insert_table.htmlUT	 ꘫAꘫAUx õõX{oÛ6ÿߟ‚UQÀüJÖb‹-hŠÚµElŠ" EÊfB‘šDÅɆ|÷y¤-9‘m4@¾îîwïSâ•ÉeÒëÅ+NYÒ#$6ÂHž\ªŠ—†\Ñ…äñÏàU•–¢0Ä<|~oÆ7ôŽâiDª2G….êbtSEI<Æ‹ƒ„ð`-ÓëQÉ+ñ/¿ÒýדɀœN&'³^/«Uj„VäR	Ó?!ÿÌëk&—×ÂÌ`ÏtZç\™Ñ’›÷’ÛåÅÃ%ëGÙu©×Ut2ÊàEe?6YjõùƒgyGKRòjQrFæ@?%Ñߺ&y]¼yI(Qu¾€…Έ{2©–‡àI«*’G?Ó%é[ ‚µAqâAØ.S—–ÂÙ€‘‘þ.GwTÖ<PB%ø²¸~?üs\·vÁ“’›ºT$£²âxöØÃ_‹"\²
+|†l4v«µ`f…ËœãÒü*ÅRᣅ./q]4j‰›‚2f7?f^tAKšƒdÅ×äó↧ÞómÓ!À¦á„u&ƒæ³#
+ʼAœÔï‚ý€ÇÁ°3oŒÁTêŠ÷Ý;GÓ6àN°½£*å²ÃH¯j);È[id$ofQZA¢õlÈB³ÇxAÓÛe©kŦä¢6F«ßiê`ƒ£t¯€ZP™)9=-î!ßW:§ƒ?yɨ¢ƒŠªj…@dö]NË¥PS2)îíÖ{Èï{(~{üŽÁNÆ–ë89=ðhN
+G‚"‡FÈo{´Ð BîO{£L‚l}SrÎóɤ¦ NòÌ̶ Î@¸f­7t8%¥X®ŒÅ:ÊÊ-—_–7Mc€ œ!Y°LÅ%Dñ ¶¨áÏÂ9ˆŽ²Ðoà	òÙDâMégxѹB7ÍyÉ°ó‘ñr2™Ì‚áš[…¦V’ù#[œÙÙäUÿxÕf»®q‡=Ìðí!¼®´„¬\H 1Ó¨ŽCŸüˆ5AÛ€³V‚>6lbŒ±õb…ZÛØ<†aûKÌÄI%­*Hk„h§ÅÁ½}æÄR—®ó("97+
+Œ < —c5šGèxV>ô¼.”¶T
+¸Ûe™¸ºˆ½÷^Ûp{OQòªìZ0Û&±‹˜Fˆˆ¢9¬]E†Š7Õ™XÍ£7qJÏ£OížE\A›Gg';BŽØÁß2ù9µÞAË8V-×^¼Z¸îV+tÖ Ùë'š	ð/w}$Bl{¢ßìbt-D³‚n#ig€õÁó9
+¢\[õ’pÝâïŽßuc]¸ÆãżPŽ'gŽ!I¾ð2…žñaÄq»‡'_Ä=—Õ2žï’½ÏÛ$ÀÏN@á“ÖT670‘MÑP^½[%Ú— »ÁÞ`ÓVò%W,ùHt
+ºúm»(¸šigV_W™Œ’·66ìx0õ/:¼ƒ£wn@ï¡/ºVy(¢""§KŽe¢m½]_í˜ò“Ù¼å¹ÖOè¶>ÂõjÌ‚Nê¯öz¹MèÚ’+¼ÞÀ.ª\0f“ä9oÃõ
+êy$¹ð×ûA`ßê×û@tÓ;‡è÷ÁÒÿqÈÝN at G4°IÇm²í¤Á…k}6rÓ[Å«j“
+]…ÑÏ÷>!ÂnSCý‹z>E>rzÇ	Ïóà&{¥I <ñ‹á°4I‹*´çç¡¥+žÞ.ô}£³8¢Fwñ{1&{KÄ8T¢îªägB_•J¨vÊÒ7œ|~¢.• 5—’„Ùé3–Wv³ívÇ77I.¸Ys®e7Ô¶ß0¶;%à
+cÑ!\á[ÏãÚlÅ•ÂljaQż÷í§ =·×‰ö÷_óËã77°ûA֝l§Ø—çç糝IûéWu·×Q}ÜèÛfÖTBVAåÅ/@üÏP~þñù~&©û¶|ŽQøêf¸l0ÜÚ&_·}ÿ3ô?PK    ë…}1m8°d_  Á  "  includes/htmlarea/popups/link.htmlUT	 ꘫAꘫAUx õõ­W{k[7ÿÿ~Š3…Á5$~tký‚¶l,ôX³Â(ÁÈW²­F–îtå¤Y›ï¾#݇½´Î`ÄÖÑï¼:™nüVϳlº‘\Ì3€©W^Ëù¹©¤óƒ7V¨Õ¼Væz: ›€©
+§Jþ®”3æå'?øÈo8QT®˜±Ò–»²ÿ±bóé€.ŽsÀ­2ÂÞö¬ÔßòÒæ?‡§ðd8ìM²ì|ôô-Ìjˆ-¥‘®ÿÛå›×ϝäýpÛŠk»®¼Ú™Â+k@žš¼ò®ŸQƒ“~çäý©Wðå„ÛIvßå²æ’»µô/7ܬ¥È‰û†;X¡	»­4¾ˆ_´__ܝ‹œ­Öo¤[øÈÌP*€ZAî7ªêßp½“0›##¡ «~åï´ìߨJ-•Vþu°xÒ’MjŒÔ²ðy¯>¯ÐˆŠŽ÷ u%¿"g£„†8xn”O^-B¯ÞqSiîeŒMK*"'Éý’;¾m³@îÖ1U"ÿdò·vª¨ Ž|‹sãäŠõê°’ejúÕ一XÓI ‹FDa·Kû.úò>@ó=÷N;|äËU¯æŒ¹ï‚“®ï’²~ÍÓ:L´å^Ø
+¬p/“ù9Ã[Ì!kÔ@Àï»ÑHÞÇ(ƒMzq
+OÙ·•—ØcâåFi‘#ø@¤@IÞµBî3úýo^tí¯Û£¦wmŽÝÌ.¨}à¸ÅûkŠØÒÁÿýØãÕÖéºãà¶e†ËÅ«ÎDqò¯r1Tµ€qr÷O»ƒí®ò€$6×F¿¿†[‚„0Z@㌆Ò*lAð–õB‚‰+ë :(Ó(ª‹-\HýöT)å¡Œ¿“š2Ô–*×øLäµÔª­{Äv~Òà]qTD«e0ÀŠ­*ÜsXòâ=ˆ>\£_ë4jêñ«¤ÚÜtú)4K_©	áêpdyˏÍÝ	î†F…Œ}›<2d"¹LCA‰+ס›$—›9×téÞ³Ðòwîÿè´ºh€ÚV2ÍÕIv˜ŠƒÊ|ÉM!õÞË@üf§õWØÛG>›Æ¨ûÄ®YØ4NaiÅ]Ò¼vvgÄ^ì¼·æW^D“«­«‰—(€2eüF£ò\òÝòÓ÷Ò	nøi…Ön+jp[Œ€2c–ŸÂ±äB`¥ó}Fê[òOHÆ|xŽÏl4ëqzî³zð+SîðcEɏâG
+í~3†Ÿ‡]Kúš/±Æ>Cˆß×j.9µÞøIÍðTn>ëǺGh7 'B –È“áp8‰†ÝÊ cŒYÐ"‘–…?~?iÃòš?ŠQ<Ï–ÍÝŽ‰ˆQtBº–ˆèÊjl–¥F#& ¥Ç)uV•¼ˆâžPð³òºjÆG’îm‰R‚CI2±'Ïž=«§Hccú@|Pc(ÁP‹Úk³iL¼5Úr1c´ù`MN…ºBãìÁRóãÁÍQAå†Lœ±!nºAÍŒ¥ŒŒ†CFK´£]vêE->f”Íqjq•Íý|K¨Ó/Çάmè`0˜×"ðÓÑxë#÷Öj¯ÊÞcµS8þõq$jMkaRESkž2<¥­ â›16k
+:°ÃõVmK­
+å{Ӂ¾Â³ÀB4×ȉóžÞȉv”-[±ù;¾ÅeÚ…¿y$åÃ’EgmÙp!á€	ë2ºNÿŽ¼AÎÙá0OAÚ§…®±Q[ƒíÂ?†´îcž’Ún²ðo(ãPÏ¡øƒðÔ•Tºi0‘Yt¨
+³×[¨À\ÏXzh‘Á²¿x5ü˜˜"¾/‰ª_G_[‘MB'‡3ýçúPK    ë…}1á!ÕE
+  §  ,  includes/htmlarea/popups/old-fullscreen.htmlUT	 ꘫAꘫAUx õõ½XmoÛ8þ|ú'[ë¤ë‡ê¤À°t‡õ
+ܶۇv[‰µ9’Ï’“æ†ý÷#õâØ^÷m]‡5E‘ÈG$íYa6ååñѬà,¿œaJ~ùº)KÕœKx•£êÙÄ- ž6û’ƒÙW|~o&™ÖÑ%,U¾‡¯¿mX½ò¦Õ}Š²:çux`Ù—u­™ŸfªT(^6Æ(¹bOáÌ&Ö2º 'Y-*cÿžL@¬`Ç¡bZƒ)8D;!sµ‹@-?óÌ ÓÀ ý6.ñIæ¤%Asªâ’×`”µÃÿmX‰‹Ì½ŒI¨ùÊ.C.X©Ö­ammTªjª  ·šm8ìØþøñŒ†Äí{îë1|
+>çð°
+ž•Žµe5,¸
+KT’d¥ÇG¹Ê¬f²«…ᣘ‚?1 ëlÅð´³ñ)Äî!ù¬#(™\7l©ù“m™‹âYò,ºÄè+—ñ8
+*V£§RÒéæPªŒ¡d¢9«³"ÑÍR›ZÈõèìd¸Vr¹6Å8ÀØ:Kà°€7Øs’a®ÅЉ‹PÒ”•åmɧÄi·@Ãfÿ3‡¬T’ßXŒèx´'œªÝã#§Ø.©¦VhÛÓ
+^Þ\ÿ#øŽ×hŸ\(½µ¿\Àb·ûeŸs:á(ž‰ç¼zýv’«ÍÖnKð¾Å3ëì	œþ”xrw|ðº‘eˆŽ{$yÉ	HH’»ŸçqB'X‹¥ÒüF¾ÒÙoù¦k·”à/|ÿBå®9<ûï4UÎ_¸ä(k$õÌÈ\+¬¹ijiðö|{üØuèõ}3Uí±F„ú³ÜÖ•
+!µÁ*J¬B™­-\fœ|Ðx+=/€Ø)ùÎÓ«ÃdUæøúÑÕs‡¾\6:ˆ:—%àTSËW{Ó³‚g_`…·œÕ5Ûû(èq|¤Ë‹U£É¨,õΐq‚™å÷7«QÜ‚yNFñ˜˜qÖ£
+ÍÀ–§Ã7…Œ,n<ŽâcùFâ[ùɳˆàQãÂüHOÇØ¡©p;·¨>H
+éŽmÙ&#¼Ô~ôÓ7Bý>û‹þ;&{µô—p¹æZüÇ¡Æ
+Ùì–m‹óÕ{Gí“žÌ­»h›â#’³•êˆeœGèÑa·^‰{_'wýÚzM%ÒþO©£Fÿ£ÈMÝ
+4Á$jµÂ¹Á.¦^óŠ‹ua~ éO= /}¯*ï‰(×z›ÁÔóÌ=ÏaêéáÕ¼µƒ^ë{šÚ{GvXJváÁfúJL´æ~
+ë„”κ‘®ãftQTQ],Ë‘U%4%[ÀpJâ°a÷bC¼rs(ñjƒšé»öž,|+´¹ì
+pŽèŽßÆI|ñu°ñ*ˆ vºa“£}«væ^ÉZ¬ZÎ"pšhi\ßPì¨Û!öýÕ›wp¸æCèa+â¶Õý6¾BÉ5J$¤Áh\wª©3û‘i®iëèÎîâ±=ÏdvˆÔ‡Xl(»4Þ"º%G¤%N[NYSÛ‰±b¦è ›õ‡¿ßúqØî×v*vÕM¯ivÄh†+O³º/ŽpqÐÅmnœ×D•¦ä0Y6Æx-%ç9ÏÃí
+šÉ&4z"K¶"æ§Ð“®V{™}R³B”¹'¡4ô¢J›óiÓÒŽÎí­|Ԟǝ"@0¬Jã`®shò)d£]îý\6˜èåÖs
+¿A 5Ž>£¿Oàüü|ÜcmSi‘—¼¶g”S‰Cb…YÑxÊÎ0™v\*é=ï§ï×´Þ!¿¯lý¨ù\úà­·ùÅZ²«Zmz‰Ä8¨?‡‘Ïú÷ÔpªG¦>íôƒ´;9X‡Œà«ü¤}—ŸMì7üÃ~,@¹*Ëy$¾ÉKjóÈUjzn¼d =rßr±ÛÞæQûÅÁý_Nmk¼€³V`õ/@«Rä­ÐŠ0Þ\Œ’æ
+l•¥m?;åèÝá8\tÅ)³o—óÈ÷‰ ÕA:›NOÁµå‹óé´º'açålY;[Š®Ø4ÿPK    ë…}1í±HO¡	  B   .  includes/htmlarea/popups/old_insert_image.htmlUT	 ꘫAꘫAUx õõÍY{oÛFÿ?@¾Ã„84r΢D½¦ [R¡ò‘’ hÚE®$ÂKRG®»­¿ûÍî’ŸŠ’Þ×"ÉÝ™ùÍ{vsñªZ…•<l7°cCT‹n Z½|ñòÅÅ«Éíxùùn
+ï–×s¸ûp5ŸA©ÖjŸšãZm²œÀ§¦\kªZmz£ Ý…ø ¶¥#«ç	‹åçùTW¾ÚÛ Õl쇰%öfË õ[üU’N/'ü×!Ì€-c»*ù÷Þ~Е±ç2â²êòiG0å›®0òÈj[æÐ!˜[ÃÓíÀ«özí~US
+9]/–[␱çìf¯h’Ýg¢ål9ŸŽfn@|B…‹šü†‹{¢ ¸àsXyÖþ½gÌsÏÁ²Îј»=;‡€PbâïÚ&ÔBlð'¬QTum86}Àõ[B)Lèf(—û2€ÞŽ
+aç6³=w Æ*ðèž‘!<@-Bp±¿ŸÝ-Á"k⏭÷®Éià_cêä֝fåþähí5TÈê©Þ“§±gÐuhtq¾Ú®å}UMNS9‚OØÞwQÜËÏi¶–hó÷†»!B÷ƒáƒ:àugø(„ïšZ6SMŸŒˆÎ†œÀWï,½)E_ÈÝ‚\âÁ†âCxžK|ßãbÞ®EÉ”¿¥à%¾Wè¸sØûè$j»$5`œré‚d¹5ðLsïû˜
+¶lkèJƒzU‚òÅýâ*œŸÿð\æo¡H¡ƒA1v*(Gª”±pBKæïÉ0kç™k³J/šf!‚‰X"‡ÑA¹‚d<I|rÍÂG%Þ¸¡ÞÊ ÏÄÕŒÔïÒß칂ÃVßÝ\#ÜF1DbB—&ÝÉÿÔj ɽàò³å™‚¿Êó}ˆÁ·óÑPÈ;¤‚ËŠ¹·¿à“Úæ=®»ä+¼
+MRQÄê˜/UÎ.–“°GöÖ¦äÆpˆº¦™{†…NÔamÐ@*¹Év™Øö‰×"ÜU/ÝñNÔ§pK”@Eæ`X“x.ù"ôaHV¥ÄÝpù:hñȹ™Ûÿ@c3âTêÒàË,…ÊŒ
+ׂsVf×?+	îG­†a´³wà›)vi†Ý“Ã’žÓ†Ó«>ÙQÃ$•Úï¿þþæ·7•/oøÿgµsPþ¡¡[E­íGÛ¶µ0‘û 3Ó`@°°`ÖbÝ~À,CüÌãE°¢oƒ2|9¿æðÉŽ4ü:EDƒËÒDˆ¶iÐôìPé,ƒwžoÿá”eQ¤A!ƒ+ÏG+få2X‰­Y—TTè‡MÓä’ÚW”€4}!5nMÐ?GáƒøyÎf¬d«|ûë/PxóÔjJ.Ñ×X™QÀ2MÎ>"ëf﬈_|LcdÂv|ܘ¹,ZF%ÂnŒ›
+n:ãâùæ¨G#è÷û¼å†Õ_)©Ò±†,~©¶n¢±µÿ_{„h¸æ–˜÷¶»9TÖW…Þ+p³~p)7¤ÙnY5?¼Ÿƒ³¬;bÚ8€YªUÎâà+áÜÇU”€?ý¯òQ’ÝvËÝað<Eõc˜¸‚>³¯„¸1ØEy°¤p'Dœ„<•ùŨ“[rˆå"‡Ì{—7íïÄ2?	k¦N£MoÊፖÔ¾1ûcˆÃ@¶0Ö	‡|ìAá)Bð
+»fv
+q®úÑBØ¡¬oÇê'¦òHL<Ü8£òz"0¾Žôø¬
+¯€o…có…Ÿî¾(ív‡tú]­Ûî´»¤Ý춺N¿u•¡¨Úh%>Ã	€à-†ÛIaΏbŠ<›	
+å\VÑs	0Ò5ª)M
+J}]ûõobWø9å’1ßÆ©(¶¥d%ä7á¼¢äm.Ž<fð@å§UÃÆGôU-45rH¤yÙNiñt¯
+š`bd;1L~(Pþž·þ¦¿NôØ©>û¯å:JÙ)$Î¥”qs'jA~–¬5a}<ž(‡0à—rÍŒD©ù5Ã’lÍÆåƒó1d"Þ¢³ÍõV=xÒÀ¦ûFVîJý\Šÿ“
+öúxÐ(ëܘ ŠbNrdÎt¹VŽh"AËÿ+b[f¬•ésyDEˆ2ï<E,ëÃcâÌ.™šó‡)Ô©I"Yžrcqb´ø6â"vë%Ð​Kù“…ð~"sMRcŠH³첬f•’šg~Ó&/ØøU[-ºš¼º|æíoe=çRÌB]‘×5
+ˆ$Ò••aÞo|oïZ|B¬5?•á„@ùÅ‘ů.‡Hbb“§ºëÉ×É죸9µ¢ÀŽ˜R²f¨«ýq†xàÝ
+ at SZG¼†7«]þß«Æ«Ê(ž‹5Áõ˜ÝÜ}Xb/ÖI|Ñ9²´ÔžÚn%¤Ö;­nBjCSÛøÉm¨Z£/¶+ÀŒÕ̵ȣ®ÕÑXb¨Ò•ÈîJVå0üŽhÜRµz')»£¶{eJ#;â»Ø¦€sÍj~PUÚ ~€Ü>b„¦Ú«7Úy#@‘Ê4;›Î'‹é’«¿¦ÖÜxòöíÕ~,²«j	yZW­§4ïª|××óéÏÓ›	çJ7!בü¹¨É5Ñ‘øB0‹p€N¡Ñzåx´SÀ„\Gáï8ɨàùžÆ¡ö1Ž>Zº“@ÒR»òÆ!Óùt¼~ñ®k<’uå
+zB]mvb=¤õRqÙm”@¡·wËÙí
+WÐÛ±-“\º¢Œ ? ÿç‚‹šÜ—£˜#„p?G3ñ¡tû{ÑÔå~Ÿ?@~*¥à™€Š…4<K–ÞnÑçRºËUpm[%!¥½ —¹TJ}e íùº$^E¯ÒEÓÉâÇ\yÒ9 ïÁJ.•#H’®Bº«o¥4vBu¯¿¡ëò`]aÙŒUkRçl.ˆ¹$ˆ}µ×û¡d89Å]!y]‘”Øh©ýFyè·ÔFq!´Ru<‹À²cE‰…ý/Ñqx6Á1å ‰ÏQJ$Ò°}B	o-ÊK†ÖPëZ»Ÿ ÝC”ev
+Ù-£Kbk
+M	
+[D»ß9R%þ˶ÒN°Ÿ+TÞTMµÓ*3U4¥›èp;SNy#ýOã©Y>—\}X.1]º¸|Mƒnj)ÏfG¢nq#œ†86<á8v¢±´ê£Û_.jRÚ(+wl¸&¡Çd£;ÚõÖi²}ÂÛÊA4O&q©Ìÿm>5ÿ*#)9ŒW%>üÊixy=ýPK    ë…}1ƒ¦
+ú  ß  !  includes/htmlarea/popups/popup.jsUT	 ꘫA·Y­AUx õõ…VmoÛ6þlÿŠ›QÊâÒNŠbm<H³l)Ð’5+‚  ¥“͍&‘’­¦ýï;’’lÙNW FDÞ=÷öÜG#XØ¥<Ï‘Cù’á\è¬ÊÅ|a!Šàt<>ºß— ”ÅœÇV”hµ–†Åz9¤Ó˜õG#¸Yq««´1ÂÇ¿®oÀX^9mÒ…TçP„È ‚$eÙµ=r ç“έÐÊxëI¥x/‚%çD-tiNú·_®ßß~ù0–psÌ$q‰*ØùÕâÚr
+í-¤eb¼£¿ÓMZH	F9¹ë«›!”ÂKI±ÙÙh´Z­Ø¡°GµŸ17ä,¸Ì%X¢Ô&0«à£XpïøW­¼Qh·"-…Yh]C={ŸœA¦³"cÿ˜a	'쵏xtr:¿‚ñ›³“7gãJp¹ÎàY¿Ÿ*vé‚9Úó™Ñ²°øI›å<ö{%§¬Àa}(™NSƒö¦vÕÖɍÎàû¤ß)Díá'J²ÇÙeFP{†ºÒÒËÙŽ§Nž­ÃwÕ|Wôý½ßËѹ‚|Ò'«› ()3}cû™Ë£˜êÁ7¡è̐1#.¥¯³yWÝðùŸ|‰Ñ@gdà\pՏœ† yÒbÕÜ.&ðâ…€·SO6aé,È܉{ç¬Î˜ñP!§Ñgé\éÔ»ü›Cw¶ÄÃC"çZÅRŒ¼b…Âœý&¸Ôsö¢‘ðè ²PÂF3m­^¶±ÏtR‘="iágî{²¹zX ï;[¨£­2Ô)çþ P	¦Ba2ØDŸˆr5¦n±X'7ЭÏgÏ™`<£8’‹…ID7þÂadÚì£è:G¢Ä=š?B¨ðסÕü»ò·¡<+¡½b‰Ï÷y>÷±_æN!xsU§ì§6\Ö5PF|Å}¡iP^¼OOÜô¨—S?Œ¸qcl†•¦áârŸÓ T‰Pó!©Ó?’ÔJÒhLaEsˆl»rƒ“(`ØÊÆ:ω—à,²<I.K²ýA뢋¨ÎRód0ìRq6/лîÀЍ5²™oܺëM’qÕß”ç¨>ÑT˜üV$vAk¢¶¾9;‚œ6”¨vq¾ìâ„zí …Ã©¾Zê’R­ifmg^(Õ¸3õ=P3!ë]Ù«†@Ût:ö¦¶øHÉéð§£Õ!›³1¦ŸA¶LhþÀ·F¥–Ï1Ð(ÚnûÚ6\Ü¢ÆRPñZî‡ÛU÷Öí{Wí£bÄ«ŽEw²hÍÞˆ¥¹»¢»SøyOy²E¬(Pñ’ÙX¼ÝãMG¬¥ÉÕÿ°‚Ú¾3™Vÿb•Q°®ñC'ø> ~x@¼6çÊHš€‘8y­ÚÙëF©C¹˜Œ+j¬f×Ð_Ö5Ú`VÐ(òßndÞo¯ §L¯Ÿ ²¼ÉlÞƒKÍ+ݹß{_†ÎbóO­¶ÖH#Xï7?èÜK
+$?ÍáùsØ9b	·¼F
+9X»pi¹;$°Ãâ¡×\Z‡	„¼4•ÌýÿÞß5ÐæÄ
++ñ¾Yh·{ÙÀ¹bº±æ*lÜ؄Ѓþe—qÓœÖ/¡R
+í³œír ìíæÙqxu×/š‰õ¦?ȨmÊEXzL,áÛ7zh¹Í[C`Y?žü¬dDÝ÷.¥µ}úKgµÆzÍ+*å4º:ï*7è½7ÿPK    ë…}1)7Ðþ  bp  *  includes/htmlarea/popups/select_color.htmlUT	 ꘫA55­AUx õõíÝoÛÈÅß
+ø˜Õ¢°
+ןJ´kK°ÑFhŠ-v_YKÜФ QNÜnþ÷Îå¥&²xNkÝbýT»ò=äü83‡Ãk÷¾;:ryQúKWNÓ…»õóEZ䮸?{7*²bîféè“Ÿ» ³2½IÿéÇî:Ôß¿s¯_º"ÏîÜÑћݝݝ޴¼ÉÞô¦~8~Ó+Ó2óo>ø̏J×—¶z'Z«]Œæé¬tåÝÌ'­Ò)O~ÞµÚr‹ù(iÍŠÙrvüÛ¢õ¦w¢ÂN­ùœæãâóñÜ/Âõþ½Ø?uúgwöãùAwwçz™JéæÇ~V,ü/ù»ÅhÿÀýkwǹôÚíû[Ÿ—ÇŸü]¿{—$îü‡ ººÉ‘œ³Ðus_.çy×}ÝÝù*ÈØìû<-¥=g{œ¸ù2ÌAîfÉwY1Ë•}ü8Î&Óªín}\O毚¹Ñ0wW>ÌË2»4œZœNŒsãb´¼‘n]ã»ã"½›…ÁY¸d}ºÒçn‡ózî“U¯Çé0+&?Í'U+‹®¶:ä×a–Ž‡¥¯¦x¿ª¸ßw{§Õk¯:ø×Ô®µ®q`´Ï_º±¿.³R¯`sø×HhB¡ç·á Õék£3ñå»ÌËÛ·wïÇû­ªKÓÃ[Ç‹ò.óÇWÃѧÉ\Fº_ÀÞ÷{îP›ëþ÷öþâ¿„¶n‡ÙÒ7νߕ¾Ü_”ó4Ÿ`;UÃQÝ^±+ëswbꆺ+›×G%._f™´?Ìü¼Üo½Ïo强•Q¸.]+\âê|÷u
+Ÿ®,-ûláÍÖ_ïØF»uÉ´ø\‹¿×‚ÞBz×
+‰Ð¸á¸5;%7jµ¸Í“Võ´0õ¹!ôVØT]«…„ã²øÇlæçýaµàÄٝçrß·_½îüðãÅOoû?¿ìÅCŠe®/Q e½Þ%MN».íÕ€Ìç“r
+‡‡›ý«:wSÜúûS¬tNio!?»bùé§r?Õ«­}&g‡eÄùåz¿:áÀ}—¸£3aÊ¥&ÚNµ–Vó±òhPë‹”3:rB=äbÚ5+Ö—<šúÑ'§gHõÁ¡™Õ½µö éTÏ©ðFEWÝÜIëÛÝ}ùvY–E>Ž|×Ýç“4¿<}é†uy<½•Zòø+tÒÒU_Ÿ>½0Þ7îÆ—Ó"(ah­ZÿÍ|X^ݤeÒ’›ž- {«d¯^@âsÈ]Ý×~¯^eÞ]ó±Ÿ'­ªù‘ϲÅl8
+¼µJ}IëU+,ôãrš´ÎNOÿ$¸^9¯ž½r†æªšë04­Êý“<…‹ôó7½qzÛ<á¨rÏ¥û^Ÿ	ß:ïκnêÓÉ´¼tçg2,Õ…\º×r•ÚZñÞJ¼ju¢\t<Q{Ð;	gÆÿ–c[_Ò|¶\Ï-—o|òm¯m>^+¹jb’V¸Ê=’³×+äu‘—GR×x^uîá×¥³#]‹g…ÿÏ+WÓ]½Û©7,°a€³†*K¬[À]Mª)KZõ”ÅA-ç™Êé0×~«®#ôauN}J0õ_‹eÈ!W&Õò½ŠAêg!X&âöoUP¹„{׳6XÿÇüï˜v›`DhbêêÖ˜N‡`DhbêêÖ˜‹‚¡‰©«[cú}‚¡‰©«[c‚¡‰©«[bdF!F…ML¬n!NS¡‰±9­Ý&NS¡‰±9­Ý&NS¡‰±9­Ý&NS¡‰±9­Ý&NS¡‰±9M†bTØÄÄêÖâ4š›Ó:â4š›Ó:â4š›Ó:â4š›Ó:â4š˜‡;­N at O–?ÚÕ‹,pí6Zàªês
+ò¬'˜fobՐ?
+Z¬òÁˆ€ò‡
+sqA0" üaÃôû#Ê6Ì`@0" üaÁÈêKîä´X}ž·§
+‚AN‹UCþ ä´X5ä‚AN‹UCþ ä´X5äˆQå†8M”?lâ4Pþ°aˆÓT@ùÆ!NSå†8M”?ŠyêüÑ©^ĝòCU}¾ùöF„±õFV`’?¦®òÁ ¹‰UCþ Pþ°aú}‚åf0 Pþ°`$P@Œ
+(Ø0Äi* üaç©€ò‡
+Cœ¦Ê6qš
+(Ø0Äi* üaÁH  +4rZ¬òÁ §Åêó|ÞH  ä´X5ä‚AN‹UCþ ä´X}ùã¢zŒ
+›˜X}¾ùöF„±õF–F’?¦®òÁˆ€ò‡
+C, Ê6L¿O0" üaÃ#ÊŒ
+ˆQå†8M”?lâ4Pþ°aˆÓT@ùÆ!NSå†8M”?,	£Ê6qš
+(Ø0Äi* üaç©€ò‡
+Cœ¦Ê6qš
+(<óÔù£_½ F…ML¬>ßü{£ÂØz#kÉSW
+ùƒ`D@ùƹ¸ Pþ°aˆÓT@ùÆF”?,	£Ê6qš
+(Ø0Äi* üaç©€ò‡
+Cœ¦Ê6qš
+(X0( F”?lâ4Pþ°aˆÓT@ùÆ!NSå†8M”?lâ4Pþx(æ©óÇ zŒ
+›˜X}¾ùöF„±õF’?¦®òÁˆ€ò‡
+sqA0" üaÃôû#Ê61´
+(X0( F”?lâ4Pþ°aˆÓT@ùÆ!NSå†8M”?lâ4Pþ°`$P@Œ
+(Ø0Äi* üaç©€ò‡
+Cœ¦Ê6qš
+(Ø0Äi* üñPÌÓç‚Q¡™?ìÁàQ>M"61±º5†ìW¡‰±í—Ï$	íUÃGpƒöŠÇêÖ²W\…&ƶW\‚A{Åcuëߧ©Ðü½¡õדÄi*416§ÉÇÒƒœ«[cˆÓThblN“drZ¬n!NS¡‰±9í‘VhÙ²H0Èi±º5†8M…&Ææ4ù ‚`Óbukqš
+MŒÍi'9-V_@þx¤¯+>bþ€…U@ùòYÁ ½â±jȃöŠÇª!Ú+«†üA0h¯x¬òÁ ½â±jÈ£Ê6qš
+(Ø0Äi* üaç©€ò‡
+Cœ¦Ê6qš
+(X0²àBŒ
+(Ø0Äi* üaç©€ò‡
+Cœ¦Ê6qš
+(Ø0Äi* üñR¾ÿòhŸX<Zþ€…U@ùòYÌJ0h¯x¬òÁ ½â±jȃöŠÇª!Ú+«†üA0h¯x¬òĨ€ò‡
+Cœ¦Ê6qš
+(Ø0Äi* üaç©€ò‡
+Cœ¦ÊŒ
+ˆQå†8M”?lâ4Pþ°aˆÓT@ùÆ!NSå†8M”?^Ê÷_þÀ_í<Qþ ßæA{ÅcՐ?íUCþ ´W<V
+ùã¾%‚`Ð^ñX5ä‚A{ÅcՐ? F”?lâ4Pþ°aˆÓT@ùÆ!NSå†8M”?lâ4Pþ°`dÁ…Pþ°aˆÓT@ùÆ!NSå†8M”?lâ4Pþ°aˆÓT@é—òý—GÚ®÷ˆùnVåË~d	ƒöŠÇª!Ú+«†üA0h¯x¬òÁ ½â±jȃöŠÇª!ï!§Åª!rZ¬òÁ §Åª!rZ¬òÇ#|§OÁ §Åª!@Œ
+(Ø0Äi* üaç©€ò‡
+Cœ¦Ê6qš
+(Ø0Äi* üñr¾ÿB>Q¹û™çØPþ°ôFÁ ½â±jȃöŠÇª!Ú+«†üA0h¯x¬òÁ @«†ü1* üaç©€ò‡
+Cœ¦Ê6qš
+(Ø0Äi* üaç©€ò‡óH+´
+‚AN‹UCþ ä´X5ä‚AN‹UCþ ä´X5ä?èKª›FÞËßR
+TpwçßPK    ë…}1ýèTz  E    includes/htmlarea/popupwin.jsUT	 ꘫAYV­AUx õõ•koÛ6ð³ä?\„¢–g›rÓn(ê8XŸH€´Šd-Ñ™D*Nºö¿ïŽ¤dåÑn͇˜º7ïÍí-HˆÓd7ŠWiÎR½‚ÝÉäéÿ=ÛÞBìil%çµÔ*Ø\€á+VT+ÜÀÁñû£—•à ­Å‚momo-j•Z©ü©Ëºü,U,2iu5+m!Fs•¿¥’ö] À?Û[=›KÃ<9ÌÀ¦
+<ð!"œsÅ+ÈŠ%×RezÍt)TE#ˆÎÏs~žI^èe4BÒ^Ü_dµ.漚)=Z	U‡c)*£o0k™Ù|öÛd2Ê…\æÖ±°³ÝÉÈêrölÁ°+Ö¤•.ˆÝ%ŒüÂç…ÀhÐ^Â[‰æ¢Ñ­ý:õ †§M²-y@é´¡%7#„Sò¶ιžÌq3úþôñ¾~ÝÀ>}<"r±#üر±·i'1ûepšÄ'Ÿ&gÃA2ðñèÉÅòíuÉ=!DID‚¾aö¦zç>XçuUÀÎ"ʘ…T"‹HÓN‚rf…±q‡²Ñ‚ÙÖåÏ´0ªoÁX^YŒ«Í¡ŸôaË4‡•àÊ`¾õ
+T¢àV^‰ âÝá_ïß¾ ,­b9”•Fÿ¯€ ˜mR]ÌäÖ–/Å‰ìh579`	x}JÛV'IŠXë¤á¬{ç!…/ÞÁ“÷v’ÓäQpQu<â˜È(§W¨ëÅ[4žet¥×]ýè¤&2.y|¡f:ùtÁ|ð%2h2*·«I¢=:ìïå‚gû{®T÷1Á}ÑRØ÷<U.þh¡ã«³ ¯ÄbÖ'oDDÀ±=°Ó‡¤áÜ°{ƒ²)ƒf}+®m’Óßÿ]®J!@7ÅJCªÁt/qÜû{‰³øžì¹În Ew™Yß7(©!aöAf³þx|ðrLT}”A¿$Š\à‘ŸÖ•´"&Ø ¥…6ÂùλÀè•°r…A:„n¼×_dQpÆLÇ1µíºÝnâ몖,tUËèH*|NÐW ëaQ¾®mìŒ`÷WgM¯W	[W
+¼pÁí¹À÷¨ø˜Í|슔4­à-Öuç?Vb.IE
+4š”×ÑP¯xµÄ4ìÓUR­,…Û¤$+ceòÊ7À^ c.,h’   ôÂÜÙH'‡"¯0^bîf¯sYdq@6ŒÂ«¤„oÚ™11yròÒoh||sõè„Ço.¾ÍübØG¬¦,e)/Šƒv5¡
+A%GX¾4ˆ9‰¤*kKSˆòš²–Ψ_¤6:kJ¯ä_½køc~HoÏç_ìäIªz’ÚIü¤à"ðÄʳ6ØmÂdh<È–¢‰ŸyusÌ—äó½Z-È7™âÏ	a…PK›Oa8¼hÒÐ˧™\˜“¯Ó¯¸‡2<Ô>×\#Äz}Ìê#½ÕkN•3¹wN#»¥G;tš‹ôr®¯7½VÃ‰Ì+òþ{gž B­gHŽLm]´M1ì1}ŒBœ;î”Ó÷s€ZÀýèw¦{§K|W
+VÝ«ÚZ­ÌÉt{Îû5A^5ñýQ•ÝJ€n½ …ïcòêvν!Ñ­Ì“>'$æÖ¼kÝ̐ÝFf©#´T'œô¢`¶'ý,ëZì‘çÏL*%*Z;Qf³}²Ã'Ï?°p‹´Æë78ÃqaˆŒ¥5-¥iéËè…Ëš V«´éåýXôšž´©ü8ô߀hcÝ{¨'ûÖ‚zÐÎËém#R®RQü¬!?«/dÿw3Ñäzý²iÿ+qî…1‡KdÆMA 1Vã†ÄùEànÅiiZj¸x3Z•:ÓìîõHíÅÝ	Àôb,ŸiÇ
+àY›VùÄnSo)i>“%hT3RÆc¼…³kQ§—dÙ¼^.o¨Éb€7ÀJ¯
+¾vvvAÚ1Ÿ@Ââr‰«È§€S at EC£°g„³… 
+RÔ,ª ˆèš9%•‘™ ]¡ÌQóŽÛ*ˆÈs0ç³MïíÞ¸u…ñ}эçöÖ̽^<涣fl;2ÿ´éÒµ.l	
++µ‘n…Á^ÁçFø&lpô"Bx¼†ñeH`÷¶ |6mÞ¥õ
+ïÓLhë[šó%¶}½YŠÐ¡×º†ð9\w=}ÐÜ3÷%á6ó„¹G›8Öx!<ǧ*þ<
+û–«£fý¢júPK    ë…}1á±  þf     includes/htmlarea/reference.htmlUT	 ꘫA"]­AUx õõì\érä6’þ=|
+¸&f$ÍÖ!uËŽ5ÓV·myÛGXòö:(U„Å"h‚T©¼áˆyÝ—›'Ù/ ª’,ùˆÙ˜Xÿ°U$2‘HäIŸ½÷ê‹‹ëo¾|->¹þìøòëß\^ˆÁh2¹|}ýÑdòêú•{ó|ül2yýù`¥Õ2›Š³TÉ¿–ª’"­ªb¤¾¯õíùàÂä•Ê«ÑõºP»_çƒJÝU=q*K«ªóºš^ÄX*]ejJ;½,•=Š¯Ô\•*ÕÙĽ¢3[­3%*`öckA’ÕË”•¨ËlŸ6‘À2Æ˃S¼œ™d-þKÌAʉ8:.îÄ­*™Ë¡•¹YUêù©˜ÉøfQš:ONÄïçs<‰MfJü8<<<?Qz4é3j4—K­O*™še•[‹u3S&ªÍLU™å‰x†­­ÉtÒÅùl{ÝQ»NJé×=ÇÞÇX»”åBçÍÚÃâî´GøX¬ EŽ~ÇŒ;º’™Ž=Âãp«À»?þá4 ÏÔœX¥–n©ŒK“¯—»	Mð·¢}ð¼Ã2úA EK±CúŒú'•)p€ñó°O¦·×óùèåXÎlUʸŠB&‰Î'â}zëÖóRqtHÈ6åÈöôJ›ªÀÙÞ¥+¥N=»ˆ¦WŠ˜Ðòø™çO÷á¡ y’ÈYçÕ<ܹ<Á1ô­ê¾{áßÙBæãYiV–aù$+¥)Ș™,iyüâƒcÏ™¹¾[ªþm>kåb't©’M‘—³Ó¨ÏXR±$fæÆÐbUú
+c“`?üµÁÀcÅŠÓDz“ù³øô~¹(ÁôˆöèI7Ϊ’á «cÔwbir3džHXÿ+6u©Á¾\­Cz¦ÆŠp1õ¹©ÔPŒW²ÌAåÃL>”‡ž·²Ô’,ˆ]Ê,Ų°ž-¢ %ÝMGcH,¿Á²V5âÓèG1ù“C›™øfä–ጱšDàïr	~÷à^nÁùu- 9ËÔ(—KÕßöp¼·ºEBöuö1o›M›	²ÅSÞGvüb®YÙ¥*J+kMÙçÃá6|wq‹âF­W½£ÌwÜb›×9”Öä;X{|¼Þ[Ý"!ß4ª¤“ˆûˆ‹6ÀR•°½Î†·ú¦½ƒ¡·~7.Úô§Ié,nÐDgÞ˜½r\ê¢êºåïä­tOÙ;¿S‰®LùÞYœ‹½ñdï´ó4“Ð<V9-ÃM­°e|>h\ýwžšh™™Å½€Ù½€DîDå ÜDч&ÏŒLÎ!¤2x·¿wýrï \ÁÂô¨ñ¼2qMê,Ip€ïˆ°%úVÄ™´ö| qvmùÖ
+Ò‚ÿ¹Nµ…›î ç°LêÜŠ[Ia†Îç¦\ò«¡˜Õ• €©«D’g×¹¨RåqÁ,-~K¬©€TYs
+|puVÀ0ÒZ1W²ªK¼3sÑp@ˆ—d‘=¢>=ÐÞï\ûJÃLဲÄÞ FZ€oäµúÏ1ñqì{6½Ì«Ò$uìöŒ–>Ÿ¾eòl³õ_ðî9½+†Ók)æ¥Râ,„7fžúS‹+¼¼´¢ùý±ªÑôí7W—o¿ùølâÁ¦Âɱð7̆ìgä%§̪S$Ó?.ªÓ³	?ŽæZe‰S>\ç.‰µ¡,\Y¦sÇ¿O!€WN,ÙíVF¬áßÄJÍàh*Â/Ë<ì4¥ZÔÐö[«”žë8凁d¾ÇLU–QFµ¥KLŒ»C“efEnülRóêŒtù,ÓӏXX&ƒû"z„ø;‚UÒ9’ñÙ`ú"…)·è
+ŠX†N¦¹³«=7†>aÔ!Œ¾«m¥çk°¡”‹R©íA}&o at Yá€$Cˆêå~&smÕ_{	ZqoLõH»÷ ½ÌÁ¦
+ìLM© EÊø¶v-Jaˆ7–O¦—¸°>¶ÿиsâE)W.Õ²¸
+\#®~E׃wë½Rñ•á6zÀ„sYãR—¦Tã±w6¡«"i¿2KFDø51OY±S?0 /Û³¤Ú§‡—f€;ysÚè5ÀNê¤õc·Åå’PftcÎ>
+qïrÉbOWù…mË-Ù¡L ßxueØ˶*¯6}­é1ìc•«Vͦ*	cçìñ }°m
+wŸ`%þ«9ÄhMÂA3H˜àÜm]PÚ	žøˆÝ~ŸnL,_Vj„´‘FYó6¶‡ØfÌèÂbS½7Âtú|íVa{ýÊ^Œ²¬Ò€ÊåæÀ@ðƒ 
+ú`¥‘ ÀŠ«IÅþË«/‡âËOè_Õ!³nH¹Nï rUjä{9y…Žeꐭ¤E .n!×d–&Ñ81éá¼l²a@i	³Iºië¸JBá :€Í¤ Ó$ry«|{r%×¼iE¯S]㔌¼¿Òe¸“Þ^WšâQ]k‰
+ï´SŠpA6x¶|–}_k’oˆkE‚E6¸è6’„V{\8n’M‚¿r’Øçß+HÚ
+I
+ŽE>°+é®ý/âttÐW^8¬Kë•$zn;£=Ë’Ë*N;®íeß|G1{.ºpèü…¬ùÏDSâÏa9a?`ͼBR£ØÔÂð™äÉQ•·Èëd–Á4©YÑu¿dˆÊÊzFÒáí.ìß[qFpy<4"-¥È(ä«Š“ÉdµZ—˜h¥|i¢Õ€âUæм×w|ˆ*ᥧ‚Üî¹xü>Â5àžFûoaၘ¢´õŸòq».ÍPäØ”‹Áô3÷£³ÅÑøùèCUI¿…-¤w´ŠìÚ8z‰_!MdsOrÏ&ÄK™«G¬âÛQÉÌVð!iÿ-t:qœ×Q…˲AWÈÅ“Áes”³aÉꄍJä1
+¤‹}
+]ԝ¤ d(6°@–mò±ÁeÐÄ?ülü‚H;@<ó‰Y©[rÓºµ¡Ñ†
+e‡Læ*&‡~d5wÄ/l2#Ä«blÒB¹á„:Òw{¼„­#[Ò8SMnÇÜXÝŽ~J¾¤xÁÂ/’p“Ë­É©0˼
+$¡·ÎlcËh¦à1ìËLnëÙRWçƒRÁçæð}™U§THmŽ§‘(\¿lÂú•NªôDRé*õ!ýÑûjÉPÐHºXKÞݺ²G$ËpVÎPÌ”êxVÐËêzFÙBÄqÖù€J‡öY£Žg“’Z5ŸÍJªÑ;Â\b ]M)ò£Õ=uàÙDÓÏzÚ€0jSˆF@7`Ä”px>x>˜Ò~_æ)6p+6iýªÍ·‡‡ƒ©¹÷-Áf;ßäý°ô–`Ë{Þº}í½o	ö½ðì‚)HÈ¥Ø6tc™)×ې۱#L»:48çsG-1¨ž^—ë&Ž‹*“Èõ{ÄòÎ-ºKäMÎ&AHèo‹Æn“`Ŭ?sXHJ™<Îá.ÌŠ³ZV…ŒüpÕØöÅ2»zûx±±ìœUtý”—‚þν4@„ï¡ýLÑÓMÛ™¬sYÆ);„P˜±ŽR¨9j¶£´GHž<íbí¼°0–½Ÿð57ÁNÚz± JΘRy«|ü±e:Écqîj¿•1™uŽWP/'_*wűÿ»‹çL=‘ðîöùøðÝèÝˬH廯™rõã	rцNFA‡já³é¿«õÌȆ	‰Jו
+)r1…Å
+ñ³÷¶Ÿô‰ÅG!våóm‡õ×_½½£,_FÉ;‚Ž^žGï?¤÷ÎFl¼¹¤7Á`l¼ûšÞu¬ÇÆë+ޡˍªÒÒÔ‹tkÉZòCª0o­xÝ]á´mkÍWÝ5œsn-ù´»„<ÜÖŠ#1þëZKe"6žûTH(t üëúu°…âPìÿ Js@ðœ¸4áqÇ«NyšxkÊd#ˆ¤‰3¹Q"—¦Èî’£Ø64b¹n*å°’·†ÿH—P÷\QÐaD]°š¶Ò¨3’§¶Pau¥Æ;Y'a$l–Ê<ª°AdM#Y¯P|>©×/!§a…+Ù®IúEH:F¡°ÿ §|"“‡3e&FJÜ‚çRìÃ)’Òpð@L”šëk¾p– °¡kkZB«|®©¯	lÕO.@]E™‚@bçy§0]YíÁ˜Åh\p}þÅ5öଏӆ…A«û{]s„€
+Boã.™ë»NÎy©;e‡ˆÝÔöv$sÇ;…n ƒÃ?¶“˜ü#=n”&†fVßÐæ|`Š;}z©oS1¾ò%áæ¹È¹ÁO:~W²¡"ACG(ØŠ:¯OÇ]Öǁ7Á­d^…Üp³LRŠŽáb¡J©YE=v5 ¨€šS%ƒC¼EffàyèÖPÑpÐ)©àv¬¯ÃCåÌš—L_õ†è²sŸH±ØÚ3µ;=úóŸR)*ø¶–ò÷ŠŠÇ+Sg	áÿÇßÿ»½¢üýº¤PIa –Prê¹+¯¼®ÌàJ—Øo•R
+²aU×òÈ¢P²‡zµšË:ã¼ï*ˆý×ù"Ó6=8åúªä2…æm¦)k +bOÉá>K)!EG&‚òV+½6é0ìÌ˜î¡ =u)!Ñ?À³i/Qìuy\ëõ¹_oYhè @dá	ùaoQ¯7˜rïb2×+Äfß×Æ•–;=
+÷pØ&©‹fäûšöko¿·Õi‰oè<€EåпŒ«“[ylè\©}»t9±‘n[I8Ü'ÿòð ~êmý4úöú;<ú9B×[V QέÅÑ’ŠZ¿ðÎw ÛºvÜ&ûýâÌ{Üç¨Þ!”b³3²Áª4=<몑ëNÁÄÉ5t,Uû¸ú;¿À\`ý/.]	5ø±ÁÑÏ5`b³Ñú‘øàû»mÏ?G‹>
+¨¦Ÿãß'¹A¨¸ìGÑ…‹¹\qÇÙé|ü®irÌ̏\o:4"…MyÈ{’!¦šs_0¬¥fvÀ„,2ß¡ÐNU8×!/e¸tŽó
+§YÅô%¼êœ‡;*·DÆiƒ€Óe†F”s¡­©_QÎMåYVHx•lëqË!Eg”€Xu+ö:4¼¨YwN¨')«z ¡È+Ãím¯Ê
+ÃI†”¬B
+ñ fȁ7ÃIjdç	'á“AþÞó±^“r´c'±(Ó.wꍔ.ï'H4µåÅU­)7*O‘ÂkSF|ÇÀå3¥!3ŠYÊúª¯ã7Gõ§†ºZmnV¢ÓHu»@®,ò:#ö-u,rÉÒ¦JA,š`/¡àUӁ"R+i| ð­ó­6¶‹s«N=Br»*áþ`ÔóŸÏ5uŒUê;&¡è{¹i·;­ª¨¿ƒ0
+I¯»;	îÛ„º‹CŠ¦\DßË8[ØÕ`ìØt™GMvÑÿ‡}
+¶…Š©`À—Tp®
+aà"(.eŠ¥É˜úα\sÏ1ÊÜØ6·è—½­ksµ$댯6ìª:[¾§oü0Ô`
+³þsïNVn„‚
+2äµaI£¶¹¿ã‹n°µ“†×œ»êҍ‘˜M‘Dë#þ¹wØ&nNû|ا#Ô/®•
+;¸ÝÇ\°§¦žíχðË÷N#áªú÷‚<;<,îZ è^*û5;K“ÒOR;Îy5Ï$íÏ`o\«€_Å•z ›vc<íðC˜ï³u`ÃÆù	Åoz¹ûH~»ùé%GF3qÉ4nL4ok‹E`ø·{÷,šÙN×Qq£-èã9Ût‹éq¬†ž,ô-µÄ“0Œ@cNÀÑXT'—A¦8(d ]£»•àÀØí±±$ßåŽ2ôxNC^³Tø)ÕÁô’Gåi”5è‰o»ã7D2Xˆ4¢½Y¶3#nD§«v<˜a‰Lå|KÈ⹩§òÐT‹1·ôWªqjN“Í|®iœ¡-ñwfS¨!L0Àßر&CVÔa$®öZÐMyÓ¯pJ‚3Yvìþ×6ÜÈ.KB!>×ÛFϸ0oØ4“™­T¶Ž‚•3;a¯fÔŽ*§<éM3-ɹŒÈ¹£†æ$ º)—I”.ZêZ%ÀþßµäÁ憜‹o¡±ßî–hRW]¹Þ½Ž'º›E”܏Ï5-|4ú6£ß_¥ëŽ<Œ+ôI^Õ阸…‹þvý:¶äº#ÒNz_–%ZÈ®ÿƒ5†Äüµ¤ØúÊšŒ\´g½ÆóЊVÃm“žcÚû…{‡l}+|ùùr+‡At¯Ñ/Ç]þÄ‘ûm¶Ø”Âßb—Ž`>}OD±~SXsçbLù”Slô	½W=ë¥õ)ພ
+ôsΛbýø-âú	ôpCñ	ÕO\ºyüêRm¬F¿ûÝÃî{±®çû؝<Ph?Ìw†ŸåšÅ¿©œhžBæï¯TBÝ’'¨3ƒÖùϦoÀʧìö´õ?‹°šŠ³ŒÇï“êLWO¢ü Òñ6¿Ñ
+·“èe=A]*MóéOžd*PEå˜_-³%ÜüoÌÂÂ0Ü\TùÅ;=’š}Jõxž‰Ú0€ˆè:QÙë»XQ*¥©pf‡œ¿sÅ.Ô’B¦a}ªo3_«S4\Ù©‰ú¨jVåoXï}}ÔåDû‰BBCcRÌh RºA ŽÔ¢ð]ρìiŠéä9)dÎ'bý²
+#÷8±Ü£ˆ`±¼ÙG×<$â0pê×OÊ—JRF;d@>Õ\q&°ÇRÁY#ŸvUìÞA¶G™<94^ã>Üà2
+=£øö}Qè;•Yžì®Øƒ¸I)­y¶½Ìyó“¢ic—¥º2ÉLí`zquÕ~Gt |æ×%ÕË©Tm¬v³â½8º7HÑå`Ÿ~úN•²éJÓÈF³lÈ¥¡[mkž§jLájt“	5ïëªÂUõ·i/†¶¹¢´ºü&‰B\!‚Rß׊'!99¶áû.þœƒètÐ×$›ß°ü#T<ýüítŠRaÎêE>ìU´
+cðgVÏøLÑìDø⬇3
+n@„I­•éÏi¥Ç<°\ªÔj0=‹¯ÔÚ¥\½Ñ¡"qxÀ– Wzìˆ'reŒ-`çÖ}
+a7¹¯„7¦ ê|Àè´»£Ü€¤/vIèa­öWnjŠ?Ý ŽËWÍp7ïOIo+õ®€JU>÷qßoé-Òéu;Àå)îÁK~ZéÂoß{	â¶J—kô÷½šifºé³
+µ-+?¢Ä²ØÇ#»QÉiW›üìm0þ~ðÓ—¸µí~Êä–þZ¤x{1Á™¼u÷‚‰þëþÎÈ}ô®)¤£gé¾}#ý¬é›"וBí­¹léJkV®œ§Â6oU«Õî»P¾pÿ½Ê`¹
+¨³>I]úl‡ÌEÚÖg›.Üå«›qåoÛªíâÃA;‹ÝëÇ6Rîªw¿?z\é­[]vß9„w–€ÿée»{‰/»êÞŠ…ÿ\Â!‡Eò»1•ÃÉ´.žÙ“Ð~iägHß;U¶ÝÖ·ÎoV…ÏÀÛáF¢¿Ûþ1äÅõÃ>AzÇŸ/òö‡k¶/ô|l÷…ð·!~åðþ³NèÔõñƒ ÷[‚¶)vÏÖ§_¶Ú–:9pÿ§ð¥
+Ü ÷oHbî)%ÒÈDç¹;³c…û»3qo1“ð’îâ÷?ñèU&_RO•C/øÈ•+I;\LÓ•6¯w
+ZëZ/ÁÄ\§Túßv®l·Š¾ó+X(dÀ²b%"p UÈ@…ö%yÐ2‘‘4‚fdGüAý~YïFÉY¤q[;@ëËÈòr¹çÞs®â, ¦ÈÉØSRýÅY†îù¹»æÊ÷’2ˆQòº[KÎŒ˜Ü`¦2à	ß¹Ã\Qˆl¹ËŒ”@“æŽGS–4R¼wMO¡îWŸ 6)®ªxnvv欄TÀuæz=ÒAÝVrÎ4xâ†VùÙ„œ²½±®íb]Óâè®t¿¾šê~=¨o»¢Ât<ªñ.y>Îòó
+.þ(¾Ã´+8¡Îõ¡úӁAìS«‹Iˆ†»­ôÞGL=!„´g^'¶{¬É°'_bfhÏÛ?íWäIêÂ×äW¨)`í"¦ô{§ryAác	bM¤OƳ§]Def`M¡Ë‹4ïɦ .GËG»£—s}Ëbð5Ùh4ºÍf*¨G°à2Ý	•ø¯(Œiá›ØŒ¨¦ 6ôu¢¬0Í=˜ú.Nö–‰„ežä…ׇx‰V§ò3&äQ¢8šlpÓóÔ¥/ÃG3Ï©Oìæ¡y“èU²YP-(,4Ù.}â§Y6Ä$s=Zt=42É	–þ@LïkµØÑjE“HFÂ¥b)Ÿ8,¡Î¬æÆ%ök¾=È[541ÔÏ¡…`Ò°i@ù¯ÒÎ9-Eb°žË+eÌ€]ÑW¹rXV¿ƒ7¶(K ªu/%²À(Õê>ŒÓœã¹ëŒûBÌè­0ÃybA‚š˜kF%3ÐÀ<&f“ö\ 0…_–É*o6Y ÊÆA
+Ò­Y‚Jˆu2;Æ>ŽÛ‰¶er¿)Ì3z’ˆ˜¢,°öbØ{öÆ&LËëàsÄEˆ'@¬¼<~•ÑDPõŒ
+ìÌÃ+îþëí6bÍ¢½þÅ
+„91]z¹Ý§ËVm6¥üæÕÝ#ÝÉ›{¡Iòöb at uŒ¹²ÃÐHÕO>µGÿkXrL9tV¤C¾{rºÃI£	"èLj×þ± ®×¾qª¦QvORûû¤$䚊OÁa–£Åp3aü:5…/æù®¶ì~ÐA‰%$M­
+ø)ØŒ#Çž$º¦[VuüÂÄçè¾¢êRܐx7xó§|ÎÒ…cãrçÇÚ5ËO¹J¯-ë+¿NÍÝwË/€ËȤs[?Ä¥WûÁLÑÊÉÑî ÍTŒ6†±–í '*µa]j"óÝB”`nÓ,ˆµ&…z`âr[1Gptê“ç”øýh= 9h²ÏHTJ¬ð~þŒág¸?GÑÖDö·W‹ÉÓÍíIŠUê‹=›lñªµ¦k«zkã,ýx¡‡å\Ç©¡v“$K¡Äà 
+á~Žç
+7å¥~{Þ<Šwy¶pGÉ f6¬jÝ9zs	ÇP@ì·Èz$XIƒšç>a’<–ÝÃ$}å E’ê.^,èà‚@«Õe}ø0À“þÁHdèM¿g'6ÄŸæ]…–?+P03ŒÝò›T5šM,B>â–d‰O6ê)³7I¸¦Ÿ\‚?¦4Þè“–úÕ)¡[þŸ÷pË@)2«-ú'ŠrGÚ:yµÎÏÁçú…ž ??õx
+´²`<Ñ—hv»V^é
+Ý؁4맄·öäSRâb“âÅtŽ,hçïÜÈ·Bhç„ vYçQ³ô êøö7§ª:ž=šY=›-^
+'_žtµt©<9Ý4ÊTÀC—¦Ðî=QìmxÄÕ¾­Œuð"o4Nlõ|mF©'¬i‰:Méµò°çjó,~^j	å.Ê¿Ÿg[½¿%þ’GÒŠøK°ÛýpKÍH,ǦéÖm¼/¤G˜ÃkòñÈÉ)µ‹7Åzœ¦€iœŠa¹Lw¥ˆêg?;|4”B ¤rx}€²€^ÓÁ·HÆ~[¨DVVˆèÌ„ìSÀ;Ná@üÁØ4 @m÷åËn¾½†q)¾?ÿ¨+|v6p~1=¼¢¤½H¬-k÷.Z%Ûˆ~aÕ2· à¨e’tÎ?ÇËI¬¿›üŽ»t2°ïå0·•b¡W§ZÇLêƒ±–ë,ef‡n·ú'h¦ll@Ò\ÿ ë¾ÑWÝÞÕ›^÷•~ÿ~Œƒz­pgBsîsžÌÚ(Gîi©Ãÿê 
+<ª^1PPK    ë…}1?‘Hš  ›  $  includes/htmlarea/release-notes.htmlUT	 ꘫA0]­AUx õõXín7ýï§`ô#q IcÙë´–d-t؍Q+h‹ÅbAÍP3\s†’cY)
+ôAv_®OÒsÉE#¹é*EL4äåý8÷œË¿ºúp9ûùþšýcvwËî?¾¿^²N/Š¦×³›(ºš]…7'ýã(ºþ¾39g.Wì9W…=ïdΕÃ(Z.—ýåI_›4œEÏ´kg‚'ô€G'2waïôz&0#”àV°B;aÇQXvX·jžë/äs.Ø/,ÖJ›!ö%#ökX­WŽ£p"=Îu²òOäÇà/OÆ’zq9™eÒ®ß/¹Å¡y)•H˜.Ø7Œ
+ºìøèèo쟃³áÉ7ÿbßÝÍúã¨\Ÿw<©áãφ/3^¤Â2+‹X0Zò^8>ÜØY©&â±’Í#E3ù^,Y©ªTðv¾ñêó–môߥ.œxvw¢¨êýì°4úI&p„³B“8¬a9-ZJ—QĹ.Z†t)wR¶Ë࿪Y¤Ìñ¹x‡•,Ópqÿí¦SQÛ«]'^p®`¨À
+X1§q¦ÆE±Ï¡ß+n­°{tS)uÏa 9Ž+¥—–5ø “D"R³Ì4Bó°@õ»-;€
+РàYVç¯p>u°ùZ¹ÁïuêF_ÈÃ8Ú¨öÆ›íÊ7¨e:ì¡J]f"~¦Žb/@ÜñbÅæUŠŽvˆ@–á.µy´lÔ{R´bˆžåÑß'ÃðÂ‹„Íñ×R&€“.Ìå'jÞRg}4JZ$rѲ`«ñz¨…kj—…6ÀCœ±\ZJÓ Gíš	UÚ–¤+F[ÔQÁVºb]o`rV»Þ	²Ã~ÿí¿
+~ÿíÛ¦GÈ5	–J1ý„ÜÓÎDǺƍþ¯`üÉ®×[fqÀëG‰4é˪TàgI¦)à¹Ø:ŸÚ
+E>¡dŒ#<ìU•hØqÂ,“9µ™ ׁò=“i¦ðÇÕyeäMË„9G&ðÿ“ËÑv‚¥{c&“s‚®œEûü¶¬,2 çcfc£}-©ÃÝ^!]$”Î:?”Ãu jçÀДe—ip·Ë¸c5aÀi€"ñ0ÿªƒ¦ÅB¯	El°,ñ
+¡SŸ#úÀ¨t±Ç	ŸÑ!?PDУ„1m8íû{زà´ãŠU>G-*ØvûçvØ-ÞZ/ÛfΩTG3ô«DÆЦJjFíÀΥ攞>)v‰ß=)Ÿw¼^w&7ӟ¡EKn\ÖÖÓèJ¸€Ì§+ù	ö ë07Ù§N³/¥Ò]Epýéîv8¼úpçI óÂvÇ‡÷ÜÀV·.s.xažˆ,kðV…W?@·¤Õ-+ ÇÓžÕU	:ñF‘£©cèѲ'„™0bØ>5g囦៖¡T$¼bsO—@HÓˆáè<£}á[N=Ì\¶›—øØC­•H€0ðm-Æ ra-d²¿•`”,ÕEÁ=•RàÈ	I<úœQ@êÑÏ[]Ð>ŸÇ±(i[Ík픕F,ˆ_5;µñ2Ýd¥•«ënK›Æ½D §­Yn™†Ð¿Ä_©Ñ1:ƏÚì¥ÍרcˆÜ
+W•C¯Z^5ô»Ò<im;7¡‰óþh†v“Q ÈU– §¯´Y´·óÊi¢­˜ HMŒÒ"ýç_­é‡yþª¦/ߣãˆOvàµÞ*žy^*a£Î¤y¤
+¬*T,Ù‹ä1 »õœÎ*=VÞ
+ÀM!¸^׶ȷM›™È­PO¤T4ÛRBmFžÉÖf@ÉâPÉD	ãÕzÛN½ï+&\߃.Ìõó¨&Y´+~é錵Vû*ӏ$Ô1.*hvØвg%–Vu1m a‹áe»!
+P’À­tgXÈ´Oëiù‡âžÞ½­aµ”Vê\k%Ñß|Õ2…îÅ´þåì‡ÛÞQÓMÆiÂÖjŽ[T££äî Ó¶OVëb¯lLs?ØAó	Û	wL;xÑa‰äJ§ ù…S„Á¿e ׉\ YHà°¸2† á÷£LMÜ
+ã}1Lµo\¡KRãI·ö—(“B=GÓ
+x›1ãµWë-”NJ2Ù³{y3¥†¤NDš~ò#Ý i…¨ÄÂõœî/([½à¤·´êí^çßj0’‹+ˆ—û
+×û~ßGŸƒ7»P€´†üm„NWkØàž@Ä·:íLêÁ‰Þ¡+?y !Ÿ “Ô,ÀË~m®õSÒ˜7®ÖD`½ÔËÀâ©Æ¿®ÒÀ:c~¼¬?`80±@ò!´…p‘3œd1ú;"LÎOOߝ¾{
+U®Êãßïξ9=z½¨Šø|n€ŒWÈá]¡7sO°˜N¼É2éÝC˜ üµrNN`­5_ø™ R•óÕZÉGlúÈÚÛ£3.L®²$²dËë
+‰4Ô,¼N­mú‚a**\ðf2Ì y{n(Ãw%èû{$‡w?¥Ðw’¿ú–r¡Êlçcʆ^ßãîC2QlÝú¡®+›+²
+>î.¸rÝ1`FSÅ®2bwÙŒ°õaýݤV±Ýu/\é_XäóKµÙ}wq?õ=ÜH1C\YôJͲÖW"1ºìáöU­§•5Ökb~!Žš±I`è[]=] y„z!—¤j±.WÝ +]ŒÊ‰¦›O¢6w}î²qfXT?âbAZ2Y7wÝ6ɪà&Îú—LkLw2ã’½çŸÂt‚?õîƒñ«^]b<6‡ì¡*ب‡°Á»áééðè[v}ý0£z'¬×«×gYšæÁŽø‘Ý"ŒZ+7bÎØ€
+N†048‚•Yø*¸a@ ëk›¸öP;d×Eªà¸Eч• 8F-¤äàPK
+     &1             
+        ýA    includes/htmlarea/UT 8]­AUx  PK    ê…}1¸`1¿s-  FÄ   
+        ´E   includes/htmlarea/ChangeLogUT 蘫AUx  PK    %C~1ÞF4êa  “
+   
+        ´.  includes/htmlarea/core.phpUT ¶t¬AUx  PK    ê…}1­ÃÛ  '	   
+        ´´2  includes/htmlarea/dialog.jsUT 蘫AUx  PK    °f~1%åÓS!  .   
+        ´Ý6  includes/htmlarea/htmlarea.cssUT œ³¬AUx  PK    x~1\`ð©òN  Z  
+        ´O;  includes/htmlarea/htmlarea.phpUT XѬAUx  PK
+     !€~1             
+        ýA’Š  includes/htmlarea/images/UT Žß¬AUx  PK    ê…}1y¶‘!T   W   % 
+         ´ÞŠ  includes/htmlarea/images/ed_about.gifUT 蘫AUx  PK    ê…}1ºôB   E   , 
+         ´Š‹  includes/htmlarea/images/ed_align_center.gifUT 蘫AUx  PK    ê…}1yh¥ŒB   E   - 
+         ´+Œ  includes/htmlarea/images/ed_align_justify.gifUT 蘫AUx  PK    ê…}1u|ÌB   E   * 
+         ´ÍŒ  includes/htmlarea/images/ed_align_left.gifUT 蘫AUx  PK    ê…}1†ö¶A   D   + 
+         ´l  includes/htmlarea/images/ed_align_right.gifUT 蘫AUx  PK    ê…}1Ríƒ+6   8   % 
+         ´Ž  includes/htmlarea/images/ed_blank.gifUT 蘫AUx  PK    ê…}1ඦ‹      ' 
+         ´™Ž  includes/htmlarea/images/ed_charmap.gifUT 蘫AUx  PK    ê…}1+à異   µ   ( 
+         ´~  includes/htmlarea/images/ed_color_bg.gifUT 蘫AUx  PK    ê…}1­zü—   «   ( 
+         ´{  includes/htmlarea/images/ed_color_fg.gifUT 蘫AUx  PK    ê…}1“/­k   n   $ 
+         ´m‘  includes/htmlarea/images/ed_copy.gifUT 蘫AUx  PK    ê…}1eI ï?   C   & 
+         ´/’  includes/htmlarea/images/ed_custom.gifUT 蘫AUx  PK    ê…}1a»aZ   [   # 
+         ´Ç’  includes/htmlarea/images/ed_cut.gifUT 蘫AUx  PK    ê…}1H±V   Z   & 
+         ´w“  includes/htmlarea/images/ed_delete.gifUT 蘫AUx  PK    ê…}19âøG   J   + 
+         ´&”  includes/htmlarea/images/ed_format_bold.gifUT 蘫AUx  PK
+     ê…}1zÖn²M   M   - 
+         ´Ë”  includes/htmlarea/images/ed_format_italic.gifUT 蘫AUx  PK    ê…}1"+K   N   - 
+         ´x•  includes/htmlarea/images/ed_format_strike.gifUT 蘫AUx  PK    ê…}1Ä!úIL   N   * 
+         ´#–  includes/htmlarea/images/ed_format_sub.gifUT 蘫AUx  PK    ê…}1”w¢¨I   M   * 
+         ´Ì–  includes/htmlarea/images/ed_format_sup.gifUT 蘫AUx  PK    ê…}1Ù1þOT   U   0 
+         ´r—  includes/htmlarea/images/ed_format_underline.gifUT 蘫AUx  PK    ê…}1¤!¥æC   F   $ 
+         ´)˜  includes/htmlarea/images/ed_help.gifUT 蘫AUx  PK
+     ê…}1c¦SXF   F   " 
+         ´Ã˜  includes/htmlarea/images/ed_hr.gifUT 蘫AUx  PK    ê…}1?ïbH   K   $ 
+         ´^™  includes/htmlarea/images/ed_html.gifUT 蘫AUx  PK    ê…}1IÅ‚Ü‘   ”   % 
+         ´ý™  includes/htmlarea/images/ed_image.gifUT 蘫AUx  PK    ê…}1¶Ç_!U   W   + 
+         ´æš  includes/htmlarea/images/ed_indent_less.gifUT 蘫AUx  PK    ê…}1ïˆ?äU   W   + 
+         ´™›  includes/htmlarea/images/ed_indent_more.gifUT 蘫AUx  PK
+     ê…}1ã-ë®Y   Y   - 
+         ´Lœ  includes/htmlarea/images/ed_left_to_right.gifUT 蘫AUx  PK
+     ê…}1›OÖa   a   $ 
+         ´  includes/htmlarea/images/ed_link.gifUT 蘫AUx  PK    ê…}1Ý~		N   P   + 
+         ´½  includes/htmlarea/images/ed_list_bullet.gifUT 蘫AUx  PK    ê…}1`iÎP   R   ( 
+         ´iž  includes/htmlarea/images/ed_list_num.gifUT 蘫AUx  PK    ê…}1zKÊ^…   ‹   % 
+         ´Ÿ  includes/htmlarea/images/ed_paste.gifUT 蘫AUx  PK
+     ê…}1¡oǽP   P   $ 
+         ´ñŸ  includes/htmlarea/images/ed_redo.gifUT 蘫AUx  PK
+     ê…}1tÃ7©X   X   - 
+         ´˜   includes/htmlarea/images/ed_right_to_left.gifUT 蘫AUx  PK    ê…}1ufˆ      $ 
+         ´P¡  includes/htmlarea/images/ed_save.gifUT 蘫AUx  PK
+     ê…}1£ýÉh   h   + 
+         ´/¢  includes/htmlarea/images/ed_show_border.gifUT 蘫AUx  PK    ê…}1D(…      ( 
+         ´õ¢  includes/htmlarea/images/ed_splitcel.gifUT 蘫AUx  PK
+     ê…}1A·Q   Q   $ 
+         ´Õ£  includes/htmlarea/images/ed_undo.gifUT 蘫AUx  PK    ê…}1"^ô^   a   0 
+         ´}¤  includes/htmlarea/images/fullscreen_maximize.gifUT 蘫AUx  PK    ê…}1Á ËÊ_   a   0 
+         ´>¥  includes/htmlarea/images/fullscreen_minimize.gifUT 蘫AUx  PK    ê…}1©5¦ás   y   ) 
+         ´ ¦  includes/htmlarea/images/insert_table.gifUT 蘫AUx  PK    ê…}14àrŠz  @   
+        ´Ï¦  includes/htmlarea/index.htmlUT 蘫AUx  PK
+      €~1             
+        ýA˜³  includes/htmlarea/lang/UT Œß¬AUx  PK    ê…}1Wz#~N  à   
+         ´â³  includes/htmlarea/lang/b5.jsUT 蘫AUx  PK    ê…}1Sþä¾õ  Z   
+        ´¶  includes/htmlarea/lang/cz.jsUT 蘫AUx  PK    ê…}1¡Î3f  ¥   
+        ´Ãº  includes/htmlarea/lang/da.jsUT 蘫AUx  PK    ë…}1Õ0œJL  r   
+        ´x½  includes/htmlarea/lang/de.jsUT ꘫAUx  PK    ë…}1ooã]²  ÷   
+        ´Á  includes/htmlarea/lang/ee.jsUT ꘫAUx  PK    ë…}1kÉm7@     
+         ´Å  includes/htmlarea/lang/el.jsUT ꘫAUx  PK    ë…}1Ú”ðÍ¡  
+   
+        ´£Ë  includes/htmlarea/lang/en.jsUT ꘫAUx  PK    ë…}1rf[èË     
+        ´“Ñ  includes/htmlarea/lang/es.jsUT ꘫAUx  PK    ë…}1º‰.6”  ˆ   
+        ´­Ô  includes/htmlarea/lang/fi.jsUT ꘫAUx  PK    ë…}1F™8ê»  ?   
+        ´×  includes/htmlarea/lang/fr.jsUT ꘫAUx  PK    ë…}1p4öO  Ý   
+         ´šÛ  includes/htmlarea/lang/gb.jsUT ꘫAUx  PK    ë…}1%W{`I  –   
+        ´8Þ  includes/htmlarea/lang/he.jsUT ꘫAUx  PK    ë…}1>É MÝ     
+        ´Ðâ  includes/htmlarea/lang/hu.jsUT ꘫAUx  PK    ë…}1žwú¬6  ‹   
+        ´üæ  includes/htmlarea/lang/it.jsUT ꘫAUx  PK    ë…}1ÃÖê      
+         ´ê  includes/htmlarea/lang/ja-euc.jsUT ꘫAUx  PK    ë…}1ÜlÃïi  «    
+        ´Uí  includes/htmlarea/lang/ja-jis.jsUT ꘫAUx  PK    ë…}1¨ew‡    ! 
+         ´ð  includes/htmlarea/lang/ja-sjis.jsUT ꘫAUx  PK    ë…}1Åã1p  ‘  ! 
+         ´ìò  includes/htmlarea/lang/ja-utf8.jsUT ꘫAUx  PK    ë…}1;c$âk  ¿   
+        ´ö  includes/htmlarea/lang/lt.jsUT ꘫAUx  PK    ë…}1u'å‹     
+        ´¼ù  includes/htmlarea/lang/lv.jsUT ꘫAUx  PK    ë…}1ÏZ-  
+   
+        ´–ý  includes/htmlarea/lang/nb.jsUT ꘫAUx  PK    ë…}1™EµJC  ·
+   
+        ´ðÿ  includes/htmlarea/lang/nl.jsUT ꘫAUx  PK    ë…}1—®,‹  …
+   
+        ´‚ includes/htmlarea/lang/no.jsUT ꘫAUx  PK    ë…}1fŸ²9  Y   
+        ´\ includes/htmlarea/lang/pl.jsUT ꘫAUx  PK    ë…}1ݬW  Š   
+        ´ä includes/htmlarea/lang/pt_br.jsUT ꘫAUx  PK    ë…}1ªå"H+  Ý   
+        ´ includes/htmlarea/lang/ro.jsUT ꘫAUx  PK    ë…}1h‚´ ‹  @	   
+         ´ includes/htmlarea/lang/ru.jsUT ꘫAUx  PK    ë…}1•t$ôj  •   
+        ´á includes/htmlarea/lang/se.jsUT ꘫAUx  PK    ë…}11¨kº  S   
+        ´š includes/htmlarea/lang/si.jsUT ꘫAUx  PK    ë…}1:—.  7   
+        ´£" includes/htmlarea/lang/vn.jsUT ꘫAUx  PK    ë…}1páž­M  \   
+        ´s& includes/htmlarea/license.txtUT ꘫAUx  PK
+      €~1             
+        ýA* includes/htmlarea/plugins/UT Œß¬AUx  PK
+      €~1            & 
+        ýA]* includes/htmlarea/plugins/ContextMenu/UT Œß¬AUx  PK    ë…}1N}^pf  û2  5 
+        ´¶* includes/htmlarea/plugins/ContextMenu/context-menu.jsUT ꘫAUx  PK    nl}1ìNß‰  ¦4  6 
+        ´„9 includes/htmlarea/plugins/ContextMenu/context-menu.phpUT ðk«AUx  PK
+      €~1            + 
+        ýAvH includes/htmlarea/plugins/ContextMenu/lang/UT Œß¬AUx  PK    ë…}1‰q“R  3  0 
+        ´ÔH includes/htmlarea/plugins/ContextMenu/lang/de.jsUT ꘫAUx  PK    ë…}15éÔ¦  ª  0 
+         ´‰M includes/htmlarea/plugins/ContextMenu/lang/el.jsUT ꘫAUx  PK    ë…}10é?EH  ÷  0 
+        ´’S includes/htmlarea/plugins/ContextMenu/lang/en.jsUT ꘫAUx  PK    Ul}1Ú5Çk  e  1 
+        ´=X includes/htmlarea/plugins/ContextMenu/lang/en.phpUT Âk«AUx  PK    ë…}11ÌCE  Ä  0 
+        ´] includes/htmlarea/plugins/ContextMenu/lang/nl.jsUT ꘫAUx  PK    ë…}1t&ȁÉ     . 
+        ´´b includes/htmlarea/plugins/ContextMenu/menu.cssUT ꘫAUx  PK
+      €~1             
+        ýAÞd includes/htmlarea/plugins/CSS/UT Œß¬AUx  PK    ë…}1غP½†  f
+  $ 
+        ´/e includes/htmlarea/plugins/CSS/css.jsUT ꘫAUx  PK    ci}1B—º³    % 
+        ´k includes/htmlarea/plugins/CSS/css.phpUT :f«AUx  PK
+      €~1            # 
+        ýAq includes/htmlarea/plugins/CSS/lang/UT Œß¬AUx  PK
+     ë…}1zÚÖ1   1   ( 
+        ´mq includes/htmlarea/plugins/CSS/lang/en.jsUT ꘫAUx  PK    #m}1˜Çš=]   h   ) 
+        ´ùq includes/htmlarea/plugins/CSS/lang/en.phpUT Bm«AUx  PK
+      €~1            # 
+        ýA²r includes/htmlarea/plugins/FullPage/UT Œß¬AUx  PK    ë…}1v+A  ë  / 
+        ´s includes/htmlarea/plugins/FullPage/full-page.jsUT ꘫAUx  PK    /m}1ÞŠöÀ§  «  0 
+        ´éx includes/htmlarea/plugins/FullPage/full-page.phpUT Zm«AUx  PK
+      €~1            ' 
+        ýAó~ includes/htmlarea/plugins/FullPage/img/UT Œß¬AUx  PK    ë…}1ŸÝ©   .  2 
+         ´M includes/htmlarea/plugins/FullPage/img/docprop.gifUT ꘫAUx  PK
+      €~1            ( 
+        ýA²€ includes/htmlarea/plugins/FullPage/lang/UT Œß¬AUx  PK    ë…}1ý´¥©    - 
+        ´
+ includes/htmlarea/plugins/FullPage/lang/en.jsUT ꘫAUx  PK    Ôl}1}$ºƒÏ  H  . 
+        ´ƒ includes/htmlarea/plugins/FullPage/lang/en.phpUT °l«AUx  PK    ë…}1¹’Kíë     - 
+        ´F… includes/htmlarea/plugins/FullPage/lang/ro.jsUT ꘫAUx  PK
+      €~1            * 
+        ýA‘‡ includes/htmlarea/plugins/FullPage/popups/UT Œß¬AUx  PK    ë…}1Ë­ N+  Ì  6 
+        ´î‡ includes/htmlarea/plugins/FullPage/popups/docprop.htmlUT ꘫAUx  PK    ë…}1ìŸ&,*  ™  , 
+        ´‚Œ includes/htmlarea/plugins/FullPage/test.htmlUT ꘫAUx  PK
+      €~1            ' 
+        ýA’ includes/htmlarea/plugins/SpellChecker/UT Œß¬AUx  PK
+      €~1            + 
+        ýAe’ includes/htmlarea/plugins/SpellChecker/img/UT Œß¬AUx  PK    ë…}1M{Ÿƒh   k   : 
+         ´Ã’ includes/htmlarea/plugins/SpellChecker/img/spell-check.gifUT ꘫAUx  PK
+      €~1            , 
+        ýA˜“ includes/htmlarea/plugins/SpellChecker/lang/UT Œß¬AUx  PK    ë…}1º#Ó±ˆ  ý  1 
+        ´÷“ includes/htmlarea/plugins/SpellChecker/lang/cz.jsUT ꘫAUx  PK    ë…}1èa±=>  R  1 
+        ´ã— includes/htmlarea/plugins/SpellChecker/lang/da.jsUT ꘫAUx  PK    ë…}1qÆŽCœ  ]  1 
+        ´…› includes/htmlarea/plugins/SpellChecker/lang/de.jsUT ꘫAUx  PK    ë…}1.sM„Ö  •  1 
+        ´…ž includes/htmlarea/plugins/SpellChecker/lang/en.jsUT ꘫAUx  PK    ­l}1¢uRý  é  2 
+        ´¿¡ includes/htmlarea/plugins/SpellChecker/lang/en.phpUT fl«AUx  PK    ë…}1c­yW  q  1 
+        ´!¥ includes/htmlarea/plugins/SpellChecker/lang/hu.jsUT ꘫAUx  PK    ë…}1R),˧    1 
+        ´Ü¨ includes/htmlarea/plugins/SpellChecker/lang/it.jsUT ꘫAUx  PK    ë…}1©áJ`  ¾  1 
+        ´ç« includes/htmlarea/plugins/SpellChecker/lang/ro.jsUT ꘫAUx  PK    ë…}1ð¢`õ¸    7 
+        ´«¯ includes/htmlarea/plugins/SpellChecker/readme-tech.htmlUT ꘫAUx  PK    ë…}1hA€3	  #  < 
+        ´Í· includes/htmlarea/plugins/SpellChecker/spell-check-logic.cgiUT ꘫAUx  PK    ë…}1He§ÆÊ   Á  < 
+        ´oÁ includes/htmlarea/plugins/SpellChecker/spell-check-style.cssUT ꘫAUx  PK    #x~1,T±†e    : 
+        ´¨Â includes/htmlarea/plugins/SpellChecker/spell-check-ui.htmlUT ‚ѬAUx  PK    ë…}1PÓª/;
+  ì,  8 
+        ´zÉ includes/htmlarea/plugins/SpellChecker/spell-check-ui.jsUT ꘫAUx  PK    Ôl}1—zXu
+  §.  9 
+        ´ × includes/htmlarea/plugins/SpellChecker/spell-check-ui.phpUT °l«AUx  PK    ë…}1_ڔŠ s  7 
+        ´å includes/htmlarea/plugins/SpellChecker/spell-checker.jsUT ꘫAUx  PK    Ôl}1ÌŸA[ñ  ò  8 
+        ´0é includes/htmlarea/plugins/SpellChecker/spell-checker.phpUT °l«AUx  PK
+      €~1            * 
+        ýAŒí includes/htmlarea/plugins/TableOperations/UT Œß¬AUx  PK
+      €~1            . 
+        ýAéí includes/htmlarea/plugins/TableOperations/img/UT Œß¬AUx  PK    ë…}1K¯µë^   e   = 
+         ´Jî includes/htmlarea/plugins/TableOperations/img/cell-delete.gifUT ꘫAUx  PK    ë…}1ð¹O'k   v   C 
+         ´ï includes/htmlarea/plugins/TableOperations/img/cell-insert-after.gifUT ꘫAUx  PK    ë…}1aÚ_˜k   v   D 
+         ´ùï includes/htmlarea/plugins/TableOperations/img/cell-insert-before.gifUT ꘫAUx  PK    ë…}1×/µn&  €  < 
+         ´Ûð includes/htmlarea/plugins/TableOperations/img/cell-merge.gifUT ꘫAUx  PK
+     ë…}1ÍY›   ›   ; 
+         ´pó includes/htmlarea/plugins/TableOperations/img/cell-prop.gifUT ꘫAUx  PK    ë…}1R X 8  ‹  < 
+         ´yô includes/htmlarea/plugins/TableOperations/img/cell-split.gifUT ꘫAUx  PK    ë…}1H ]   d   < 
+         ´ ÷ includes/htmlarea/plugins/TableOperations/img/col-delete.gifUT ꘫAUx  PK    ë…}1
+;“f   o   B 
+         ´ì÷ includes/htmlarea/plugins/TableOperations/img/col-insert-after.gifUT ꘫAUx  PK    ë…}1–sÙd   n   C 
+         ´Çø includes/htmlarea/plugins/TableOperations/img/col-insert-before.gifUT ꘫAUx  PK    ë…}1Åû;  Œ  ; 
+         ´¡ù includes/htmlarea/plugins/TableOperations/img/col-split.gifUT ꘫAUx  PK    ë…}1MrDna   h   < 
+         ´Jü includes/htmlarea/plugins/TableOperations/img/row-delete.gifUT ꘫAUx  PK    ë…}1•yŸ1m   t   B 
+         ´ý includes/htmlarea/plugins/TableOperations/img/row-insert-above.gifUT ꘫAUx  PK    ë…}1ˆµ¤{l   s   B 
+         ´üý includes/htmlarea/plugins/TableOperations/img/row-insert-under.gifUT ꘫAUx  PK
+     ë…}1Ç•Æ•   •   : 
+         ´Ýþ includes/htmlarea/plugins/TableOperations/img/row-prop.gifUT ꘫAUx  PK    ë…}1«Na&    ; 
+         ´ßÿ includes/htmlarea/plugins/TableOperations/img/row-split.gifUT ꘫAUx  PK
+     ë…}1!M;Ö‘   ‘   < 
+         ´s includes/htmlarea/plugins/TableOperations/img/table-prop.gifUT ꘫAUx  PK
+      €~1            / 
+        ýAs includes/htmlarea/plugins/TableOperations/lang/UT Œß¬AUx  PK    ë…}1Óš¸å    4 
+        ´Õ includes/htmlarea/plugins/TableOperations/lang/cz.jsUT ꘫAUx  PK    ë…}1Îç-–/  §  4 
+        ´!
+ includes/htmlarea/plugins/TableOperations/lang/da.jsUT ꘫAUx  PK    ë…}18–x {  Ÿ  4 
+        ´· includes/htmlarea/plugins/TableOperations/lang/de.jsUT ꘫAUx  PK    ë…}1U«æ     4 
+         ´™ includes/htmlarea/plugins/TableOperations/lang/el.jsUT ꘫAUx  PK    ë…}1kG  >  4 
+        ´ includes/htmlarea/plugins/TableOperations/lang/en.jsUT ꘫAUx  PK    ë…}1v ¤Ç  Æ  5 
+        ´  includes/htmlarea/plugins/TableOperations/lang/en.phpUT ꘫAUx  PK    ë…}1K¦žS¹  Ï  4 
+        ´C% includes/htmlarea/plugins/TableOperations/lang/fi.jsUT ꘫAUx  PK    ë…}1>É MÝ    4 
+        ´c) includes/htmlarea/plugins/TableOperations/lang/hu.jsUT ꘫAUx  PK    ë…}1œŽ’µ  Ó  4 
+        ´§- includes/htmlarea/plugins/TableOperations/lang/it.jsUT ꘫAUx  PK    ë…}1“|®Úu  	  4 
+        ´Ã2 includes/htmlarea/plugins/TableOperations/lang/nl.jsUT ꘫAUx  PK    ë…}1Qž(|  @  4 
+        ´Ÿ8 includes/htmlarea/plugins/TableOperations/lang/no.jsUT ꘫAUx  PK    ë…}1sB0¦  +  4 
+        ´‚> includes/htmlarea/plugins/TableOperations/lang/ro.jsUT ꘫAUx  PK    ë…}1½1Ö|  þŠ  = 
+        ´D includes/htmlarea/plugins/TableOperations/table-operations.jsUT ꘫAUx  PK    ë…}1P«K6½  ´  > 
+        ´{c includes/htmlarea/plugins/TableOperations/table-operations.phpUT ꘫAUx  PK    ë…}1-ùîÍ  "'   
+        ´©‚ includes/htmlarea/popupdiv.jsUT ꘫAUx  PK
+     €~1             
+        ýA Ž includes/htmlarea/popups/UT Šß¬AUx  PK    íe~11SÀ  Ô2  # 
+        ´LŽ includes/htmlarea/popups/about.htmlUT .²¬AUx  PK    Îs~1R|jû       # 
+        ´¨  includes/htmlarea/popups/blank.htmlUT TʬAUx  PK    ë…}1‘¹Î  X  % 
+        ´¡ includes/htmlarea/popups/custom2.htmlUT ꘫAUx  PK    ë…}1—†ø   Õ   ) 
+        ´9£ includes/htmlarea/popups/editor_help.htmlUT ꘫAUx  PK    ë…}1$ —    ( 
+        ´%¤ includes/htmlarea/popups/fullscreen.htmlUT ꘫAUx  PK    ë…}1:‹ÚÝ«  è  * 
+        ´« includes/htmlarea/popups/insert_image.htmlUT ꘫAUx  PK    ë…}1ôø[
+â  !  * 
+        ´² includes/htmlarea/popups/insert_table.htmlUT ꘫAUx  PK    ë…}1m8°d_  Á  " 
+        ´^¸ includes/htmlarea/popups/link.htmlUT ꘫAUx  PK    ë…}1á!ÕE
+  §  , 
+        ´¾ includes/htmlarea/popups/old-fullscreen.htmlUT ꘫAUx  PK    ë…}1í±HO¡	  B   . 
+        ´{Ä includes/htmlarea/popups/old_insert_image.htmlUT ꘫAUx  PK    ë…}1ƒ¦
+ú  ß  ! 
+        ´}Î includes/htmlarea/popups/popup.jsUT ꘫAUx  PK    ë…}1)7Ðþ  bp  * 
+        ´ËÓ includes/htmlarea/popups/select_color.htmlUT ꘫAUx  PK    ë…}1ýèTz  E   
+        ´&à includes/htmlarea/popupwin.jsUT ꘫAUx  PK    ë…}1á±  þf    
+        ´ðæ includes/htmlarea/reference.htmlUT ꘫAUx  PK    ë…}1?‘Hš  ›  $ 
+        ´ô includes/htmlarea/release-notes.htmlUT ꘫAUx  PK    ² ² NF  å
+   
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/import.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/import.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/import.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,118 @@
+<?php
+/*
+ * $Id: import.php,v 1.28 2005/04/22 20:23:49 jhoov Exp $
+ *
+ * Page Description:
+ *	This page will present the user with forms for submitting
+ *	a data file to import.
+ *
+ * Input Parameters:
+ *	None
+ *
+ * Comments:
+ *	Might be nice to allow user to set the category for all imported
+ *	events.  So, a user could easily export events from the work
+ *	calendar and import them into WebCalendar with a category
+ *	"work".
+ */
+include_once 'includes/init.php';
+
+print_header();
+
+// Generate the selection list for calendar user selection.
+// Only ask for calendar user if user is an administrator.
+// We may enhance this in the future to allow
+// - selection of more than one user
+// - non-admin users this functionality
+function print_user_list () {
+  global $single_user, $is_admin, $nonuser_enabled, $login,
+    $is_nonuser_admin, $is_assistant;
+
+  if ( $single_user == "N" && $is_admin ) {
+    $userlist = get_my_users ();
+    if ($nonuser_enabled == "Y" ) {
+      $nonusers = get_nonuser_cals ();
+      $userlist = ( ! empty ( $nonuser_at_top ) && $nonuser_at_top == "Y") ?
+        array_merge($nonusers, $userlist) : array_merge($userlist, $nonusers);
+    }
+    $num_users = 0;
+    $size = 0;
+    $users = "";
+    for ( $i = 0; $i < count ( $userlist ); $i++ ) {
+      $l = $userlist[$i]['cal_login'];
+      $size++;
+      $users .= "<option value=\"" . $l . "\"";
+      if ( ! empty ( $id ) && $id > 0 ) {
+        if ( ! empty ( $participants[$l] ) )
+          $users .= " selected=\"selected\"";
+      } else {
+        if ( $l == $login && ! $is_assistant  && ! $is_nonuser_admin )
+          $users .= " selected=\"selected\"";
+      }
+      $users .= ">" . $userlist[$i]['cal_fullname'] . "</option>\n";
+    }
+  
+    if ( $size > 50 )
+      $size = 15;
+    else if ( $size > 5 )
+      $size = 5;
+    print "<tr><td style=\"vertical-align:top;\">\n";
+    print "<label for=\"caluser\">" . 
+    	translate("Calendar") . "</label></td><td>\n";
+    print "<select name=\"calUser\" id=\"caluser\" size=\"$size\">$users\n";
+    print "</select>\n";
+    print "</td></tr>\n";
+  }
+}
+?>
+
+<h2><?php etranslate("Import")?> <img src="help.gif" alt="<?php etranslate("Help")?>" class="help" onclick="window.open ( 'help_import.php', 'cal_help', 'dependent,menubar,scrollbars,height=400,width=400');" /></h2>
+
+<?php
+$upload = ini_get ( "file_uploads" );
+$upload_enabled = ! empty ( $upload ) &&
+  preg_match ( "/(On|1|true|yes)/i", $upload );
+if ( ! $upload_enabled ) {
+  // The php.ini file does not have file_uploads enabled, so we will
+  // not receive the uploaded import file.
+  // Note: do not translate "php.ini file_uploads" since these
+  // are the filename and config name.
+  echo "<p>" . translate ( "Disabled" ) . " (php.ini file_uploads)</p>\n";
+} else {
+  // file uploads enabled
+?>
+<form action="import_handler.php" method="post" name="importform" enctype="multipart/form-data">
+<table style="border-width:0px;">
+<tr><td>
+	<label for="importtype"><?php etranslate("Import format")?>:</label></td><td>
+		<select name="ImportType" id="importtype">
+			<option value="PALMDESKTOP">Palm Desktop < v4.1.1</option>
+			<option value="VCAL">vCal</option>
+			<option value="ICAL">iCal</option>
+		</select>
+</td></tr>
+<tr id="palm"><td>
+	<label><?php etranslate("Exclude private records")?>:</label></td><td>
+	<label><input type="radio" name="exc_private" value="1" checked="checked" /><?php etranslate("Yes")?></label> 
+	<label><input type="radio" name="exc_private" value="0" /><?php etranslate("No")?></label>
+</td></tr>
+<!-- /PALM -->
+
+<tr id="ivcal"><td>
+	<label><?php etranslate("Overwrite Prior Import")?>:</label></td<td>
+	<label><input type="radio" name="overwrite" value="Y" checked="checked" /> <?php etranslate("Yes");?></label> 
+	<label><input type="radio" name="overwrite" value="N" /> <?php etranslate("No");?></label>
+</td></tr>
+<!-- /IVCAL -->
+
+<tr class="browse"><td>
+	<label for="fileupload">Upload file:</label></td><td>
+	<input type="file" name="FileName" id="fileupload" size="45" maxlength="50" />
+</td></tr>
+<?php print_user_list(); ?>
+</table>
+<br /><input type="submit" value="<?php etranslate("Import")?>" />
+</form>
+<?php } print_trailer (); ?>
+</body>
+</html>
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/import_handler.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/import_handler.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/import_handler.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,581 @@
+<?php
+/*
+ * $Id: 
+ *
+ * Description:
+ * Loads appropriate import file parser and processes the data returned
+ *    Currently supported:
+ *      Palmdesktop (dba file)
+ *      iCal (ics file)
+ *      vCal (vcs file)
+ *
+ *
+ * Notes:
+ * User defined inport routines may be used, see example
+ *    in the SWITCH statement below
+ *
+ * Input parameters:
+ * FileName: File name specified by user on import.php
+ *    calUser: user's calendar to import data into, unless
+ *      single user = Y or Admin, caluser will equal logged
+ *      in user.
+ *    exc_private: exclude private records from Palmdesktop import
+ *    overwrite: Overwrite previous import 
+ *
+ * Security:
+ * TBD
+ */
+include_once 'includes/init.php';
+include_once 'includes/site_extras.php';
+$error = '';
+print_header();
+
+$overwrite = getValue("overwrite");
+$doOverwrite = ( empty ( $overwrite ) || $overwrite != 'Y' ) ? false : true;
+$numDeleted = 0;
+
+$sqlLog = '';
+
+if ( ! empty ( $_FILES['FileName'] ) ) {
+  $file = $_FILES['FileName'];
+} else if ( ! empty ( $HTTP_POST_FILES['FileName'] ) ) {
+  $file = $HTTP_POST_FILES['FileName'];
+}
+
+if ( empty ( $file ) ) {
+  echo "No file!<br />";
+}
+
+// Handle user
+$calUser = getValue ( "calUser" );
+if ( ! empty ( $calUser ) ) {
+  if ( $single_user == "N" && ! $is_admin ) $calUser = $login;
+} else {
+  $calUser = $login;
+}
+
+if ($file['size'] > 0) {
+  switch ($ImportType) {
+
+// ADD New modules here:
+
+//    case 'MODULE':
+//      include "import_module.php";
+//      $data = parse_module($HTTP_POST_FILES['FileName']['tmp_name']);
+//      break;
+//
+    case 'PALMDESKTOP':
+      include "import_palmdesktop.php";
+      if (delete_palm_events($login) != 1) $errormsg = "Error deleting palm events from webcalendar.";
+      $data = parse_palmdesktop($file['tmp_name'], $exc_private);
+      $type = 'palm';
+      break;
+
+    case 'VCAL':
+      include "import_vcal.php";
+      $data = parse_vcal($file['tmp_name']);
+      $type = 'vcal';
+      break;
+
+    case 'ICAL':
+      include "import_ical.php";
+      $data = parse_ical($file['tmp_name']);
+      $type = 'ical';
+      break;
+  }
+
+  $count_con = $count_suc = $error_num = 0;
+  if (! empty ($data) && empty ($errormsg) ) {
+    import_data ( $data, $doOverwrite, $type );
+    echo "<p>" . translate("Import Results") . "</p>\n<br /><br />\n" .
+      translate("Events successfully imported") . ": $count_suc<br />\n";
+    echo translate("Events from prior import marked as deleted") . ": $numDeleted<br />\n";
+    if ( empty ( $allow_conflicts ) ) {
+      echo translate("Conflicting events") . ": " . $count_con . "<br />\n";
+    }
+    echo translate ( "Errors" ) . ": $error_num<br><br>\n";
+  } elseif (! empty ( $errormsg ) ) {
+    echo "<br /><br />\n<b>" . translate("Error") . ":</b> $errormsg<br />\n";
+  } else {
+    echo "<br /><br />\n<b>" . translate("Error") . ":</b> " .
+      translate("There was an error parsing the import file or no events were returned") .
+      ".<br />\n";
+  }
+} else {
+ echo "<br /><br />\n<b>" . translate("Error") . ":</b> " .
+    translate("The import file contained no data") . ".<br />\n";
+}
+
+
+//echo "<hr />$sqlLog\n";
+
+print_trailer ();
+echo "</body>\n</html>";
+
+/* Import the data structure
+$Entry[RecordID]           =  Record ID (in the Palm) ** only required for palm desktop
+$Entry[StartTime]          =  In seconds since 1970 (Unix Epoch)
+$Entry[EndTime]            =  In seconds since 1970 (Unix Epoch)
+$Entry[Summary]            =  Summary of event (string)
+$Entry[Duration]           =  How long the event lasts (in minutes)
+$Entry[Description]        =  Full Description (string)
+$Entry[Untimed]            =  1 = true  0 = false
+$Entry[Private]            =  1 = true  0 = false
+$Entry[Category]           =  useless for Palm (not supported yet)
+$Entry[AlarmSet]           =  1 = true  0 = false
+$Entry[AlarmAdvanceAmount] =  How many units in AlarmAdvanceType (-1 means not set)
+$Entry[AlarmAdvanceType]   =  Units: (0=minutes, 1=hours, 2=days)
+$Entry[Repeat]             =  Array containing repeat information (if repeat)
+$Entry[Repeat][Interval]   =  1=daily,2=weekly,3=MonthlyByDay,4=MonthlyByDate,5=Yearly,6=monthlyByDayR
+$Entry[Repeat][Frequency]  =  How often event occurs. (1=every, 2=every other,etc.)
+$Entry[Repeat][EndTime]    =  When the repeat ends (In seconds since 1970 (Unix Epoch))
+$Entry[Repeat][Exceptions] =  Exceptions to the repeat (In seconds since 1970 (Unix Epoch))
+$Entry[Repeat][RepeatDays] =  For Weekly: What days to repeat on (7 characters...y or n for each day)
+*/
+//
+// TODO: Figure out category from $Entry[Category] or have a drop-down asking which
+//       category to import into.
+//
+function import_data ( $data, $overwrite, $type ) {
+  global $login, $count_con, $count_suc, $error_num, $ImportType, $LOG_CREATE;
+  global $single_user, $single_user_login, $allow_conflicts;
+  global $numDeleted, $errormsg;
+  global $calUser, $H2COLOR, $sqlLog;
+
+  $oldUIDs = array ();
+  $oldIds = array ();
+  $firstEventId = 0;
+  $importId = 1;
+  // Generate a unique import id
+  $res = dbi_query ( "SELECT MAX(cal_import_id) FROM webcal_import" );
+  if ( $res ) {
+    if ( $row = dbi_fetch_row ( $res ) ) {
+      $importId = $row[0] + 1;
+    }
+    dbi_free_result ( $res );
+  }
+  $sql = "INSERT INTO webcal_import ( cal_import_id, cal_name, " .
+    "cal_date, cal_type, cal_login ) VALUES ( $importId, NULL, " .
+    date("Ymd") . ", '$type', '$login' )";
+  if ( ! dbi_query ( $sql ) ) {
+    $errormsg = translate("Database error") . ": " . dbi_error ();
+    return;
+  }
+
+  foreach ( $data as $Entry ){
+
+    $priority = 2;
+    $participants[0] = $calUser;
+
+    // Some additional date/time info
+    $START = $Entry['StartTime'] > 0 ? localtime($Entry['StartTime']) : 0;
+    $END   = $Entry['EndTime'] > 0 ? localtime($Entry['EndTime']) : 0;
+    $Entry['StartMinute']        = sprintf ("%02d",$START[1]);
+    $Entry['StartHour']          = sprintf ("%02d",$START[2]);
+    $Entry['StartDay']           = sprintf ("%02d",$START[3]);
+    $Entry['StartMonth']         = sprintf ("%02d",$START[4] + 1);
+    $Entry['StartYear']          = sprintf ("%04d",$START[5] + 1900);
+    $Entry['EndMinute']          = sprintf ("%02d",$END[1]);
+    $Entry['EndHour']            = sprintf ("%02d",$END[2]);
+    $Entry['EndDay']             = sprintf ("%02d",$END[3]);
+    $Entry['EndMonth']           = sprintf ("%02d",$END[4] + 1);
+    $Entry['EndYear']            = sprintf ("%04d",$END[5] + 1900);
+    if ( $overwrite && ! empty ( $Entry['UID'] ) ) {
+      if ( empty ( $oldUIDs[$Entry['UID']] ) ) {
+        $oldUIDs[$Entry['UID']] = 1;
+      } else {
+        $oldUIDs[$Entry['UID']]++;
+      }
+    }
+
+    // Check for untimed
+    if ( ! empty ( $Entry['Untimed'] ) && $Entry['Untimed'] == 1) {
+      $Entry['StartMinute'] = '';
+      $Entry['StartHour'] = '';
+      $Entry['EndMinute'] = '';
+      $Entry['EndHour'] = '';
+    }
+
+    // first check for any schedule conflicts
+    if ( ( empty ( $allow_conflicts )  || $allow_conflicts == "N" ) &&
+      ( $Entry['Duration'] != 0 )) {
+      $date = mktime (0,0,0,$Entry['StartMonth'],
+        $Entry['StartDay'],$Entry['StartYear']);
+      $endt =  (! empty ( $Entry['Repeat']['EndTime'] ) ) ? 
+        $Entry['Repeat']['EndTime'] : 'NULL';
+      $dayst =  (! empty ( $Entry['Repeat']['RepeatDays'] ) ) ? 
+        $Entry['Repeat']['RepeatDays'] : "nnnnnnn";
+
+      $ex_days = array ();
+      if ( ! empty ( $Entry['Repeat']['Exceptions'] ) ) {
+        foreach ($Entry['Repeat']['Exceptions'] as $ex_date) {
+          $ex_days[] = date("Ymd",$ex_date);
+        }
+      }
+
+      $dates = get_all_dates($date, RepeatType($Entry['Repeat']['Interval']), 
+        $endt, $dayst, $ex_days, $Entry['Repeat']['Frequency']);
+      $overlap = check_for_conflicts ( $dates, $Entry['Duration'], 
+        $Entry['StartHour'], $Entry['StartMinute'], $participants, $login, 0 );
+    }
+
+    if ( empty ( $error ) && ! empty ( $overlap ) ) {
+      $error = translate("The following conflicts with the suggested time").
+        ":<ul>$overlap</ul>\n";
+    }
+
+    if ( empty ( $error ) ) {
+
+      $updateMode = false;
+
+      // See if event already is there from prior import.
+      // The same UID is used for all events imported at once with iCal.
+      // So, we still don't have enough info to find the exact
+      // event we want to replace.  We could just delete all
+      // existing events that correspond to the UID.
+/************************************************************************
+  Not sure what to do with this code since I don't know how Palm and vCal
+  use the UID stuff yet...
+  
+      if ( ! empty ( $Entry['UID'] ) ) {
+        $res = dbi_query ( "SELECT webcal_import_data.cal_id " .
+          "FROM webcal_import_data, webcal_entry_user " .
+          "WHERE cal_import_type = 'ical' AND " .
+          "webcal_import_data.cal_id = webcal_entry_user.cal_id AND " .
+          "webcal_entry_user.cal_login = '$login' AND " .
+          "cal_external_id = '$Entry[UID]'" );
+        if ( $res ) {
+          if ( $row = dbi_fetch_row ( $res ) ) {
+            if ( ! empty ( $row[0] ) ) {
+              $id = $row[0];
+              $updateMode = true;
+              // update rather than add a new event
+            }
+          }
+        }
+      }
+************************************************************************/
+
+      // Add the Event
+      $res = dbi_query ( "SELECT MAX(cal_id) FROM webcal_entry" );
+      if ( $res ) {
+        $row = dbi_fetch_row ( $res );
+        $id = $row[0] + 1;
+        dbi_free_result ( $res );
+      } else {
+        $id = 1;
+        //$error = "Unable to select MAX cal_id: " . dbi_error () . 
+        //  "<br /><br />\n<b>SQL:</b> $sql";
+        //break;
+      }
+      if ( $firstEventId == 0 )
+        $firstEventId = $id;
+
+      $names = array ();
+      $values = array ();
+      $names[] = 'cal_id';
+      $values[] = "$id";
+      if ( ! $updateMode ) {
+        $names[] = 'cal_create_by';
+        $values[] = "'$login'";
+      }
+      $names[] = 'cal_date';
+      $values[] = sprintf ( "%04d%02d%02d",
+        $Entry['StartYear'],$Entry['StartMonth'],$Entry['StartDay']);
+      $names[] = 'cal_time';
+      $values[] = ( ! empty ( $Entry['Untimed'] ) && 
+        $Entry['Untimed'] == 1) ? "-1" :
+        sprintf ( "%02d%02d00", $Entry['StartHour'],$Entry['StartMinute']);
+      $names[] = 'cal_mod_date';
+      $values[] = date("Ymd");
+      $names[] = 'cal_mod_time';
+      $values[] = date("Gis");
+      $names[] = 'cal_duration';
+      $values[] = sprintf ( "%d", $Entry['Duration'] );
+      $names[] = 'cal_priority';
+      $values[] = $priority;
+      $names[] = 'cal_access';
+      $values[] = ( ! empty ( $Entry['Private'] ) && 
+        $Entry['Private'] == 1) ? "'R'" : "'P'";
+      $names[] = 'cal_type';
+      $values[] = ( ! empty ( $Entry['Repeat'] ) ) ? "'M'" : "'E'";
+
+      if ( strlen ( $Entry['Summary'] ) == 0 )
+        $Entry['Summary'] = translate("Unnamed Event");
+      if ( empty ( $Entry['Description'] ) )
+        $Entry['Description'] = $Entry['Summary'];
+      $Entry['Summary'] = str_replace ( "\\n", "\n", $Entry['Summary'] );
+      $Entry['Summary'] = str_replace ( "\\'", "'", $Entry['Summary'] );
+      $Entry['Summary'] = str_replace ( "\\\"", "\"", $Entry['Summary'] );
+      $Entry['Summary'] = str_replace ( "'", "\\'", $Entry['Summary'] );
+      $names[] = 'cal_name';
+      $values[] = "'" . $Entry['Summary'] .  "'";
+      $Entry['Description'] = str_replace ( "\\n", "\n", $Entry['Description'] );
+      $Entry['Description'] = str_replace ( "\\'", "'", $Entry['Description'] );
+      $Entry['Description'] = str_replace ( "\\\"", "\"", $Entry['Description'] );
+      $Entry['Description'] = str_replace ( "'", "\\'", $Entry['Description'] );
+      // Mozilla will send this goofy string, so replace it with real html
+      $Entry['Description'] = str_replace ( "=0D=0A=", "<br />", 
+        $Entry['Description'] );
+      $Entry['Description'] = str_replace ( "=0D=0A", "", 
+        $Entry['Description'] );
+      // Allow option to not limit description size
+      // This will only be practical for mysql and MSSQL/Postgres as 
+      //these do not have limits on the table definition
+      //TODO Add this option to preferences
+      if ( empty ( $LIMIT_DESCRIPTION_SIZE ) || 
+         $LIMIT_DESCRIPTION_SIZE == "Y" ) {
+        // limit length to 1024 chars since we setup tables that way
+        if ( strlen ( $Entry['Description'] ) >= 1024 ) {
+          $Entry['Description'] = substr ( $Entry['Description'], 0, 1019 ) . "...";
+        }
+      }
+      $names[] = 'cal_description';
+      $values[] = "'" . $Entry['Description'] .  "'";
+      if ( $updateMode ) {
+        $sql = "UPDATE webcal_entry SET ";
+        for ( $f = 0; $f < count ( $names ); $f++ ) {
+          if ( $f > 0 )
+            $sql .= ", ";
+          $sql .= $names[$f] . " = " . $values[$f];
+        }
+        $sql .= " WHERE cal_id = $id";
+      } else {
+        $sql = "INSERT INTO webcal_entry ( " . implode ( ", ", $names ) .
+          " ) VALUES ( " . implode ( ", ", $values ) . " )";
+      }
+
+      if ( empty ( $error ) ) {
+        $sqlLog .= $sql . "<br />\n";
+        //echo "SQL: $sql <br />\n";
+        if ( ! dbi_query ( $sql ) ) {
+          $error .= "<p>" . translate("Database error") . ": " . dbi_error () .
+            "</p>\n";
+          break;
+        }
+      }
+
+      // log add/update
+      activity_log ( $id, $login, $login,
+        $updateMode ? $LOG_UPDATE : $LOG_CREATE, "Import from $ImportType" );
+
+      if ( $single_user == "Y" ) {
+        $participants[0] = $single_user_login;
+      }
+
+      // Now add to webcal_import_data
+      if ( ! $updateMode ) {
+        if ($ImportType == "PALMDESKTOP") {
+          $sql = "INSERT INTO webcal_import_data ( cal_import_id, cal_id, " .
+            "cal_login, cal_import_type, cal_external_id ) VALUES ( " .
+            "$importId, $id, '$calUser', 'palm', '$Entry[RecordID]' )";
+          $sqlLog .= $sql . "<br />\n";
+          if ( ! dbi_query ( $sql ) ) {
+            $error = translate("Database error") . ": " . dbi_error ();
+            break;
+          }
+        }
+        else if ($ImportType == "VCAL") {
+          $uid = empty ( $Entry['UID'] ) ? "null" : "'$Entry[UID]'";
+          if ( strlen ( $uid ) > 200 )
+            $uid = "NULL";
+          $sql = "INSERT INTO webcal_import_data ( cal_import_id, cal_id, " .
+            "cal_login, cal_import_type, cal_external_id ) VALUES ( " .
+            "$importId, $id, '$calUser', 'vcal', $uid )";
+          $sqlLog .= $sql . "<br />\n";
+          if ( ! dbi_query ( $sql ) ) {
+            $error = translate("Database error") . ": " . dbi_error ();
+            break;
+          }
+        }
+        else if ($ImportType == "ICAL") {
+          $uid = empty ( $Entry['UID'] ) ? "null" : "'$Entry[UID]'";
+          // This may cause problems
+          if ( strlen ( $uid ) > 200 )
+            $uid = "NULL";
+          $sql = "INSERT INTO webcal_import_data ( cal_import_id, cal_id, " .
+            "cal_login, cal_import_type, cal_external_id ) VALUES ( " .
+            "$importId, $id, '$calUser', 'ical', $uid )";
+          $sqlLog .= $sql . "<br />\n";
+          if ( ! dbi_query ( $sql ) ) {
+            $error = translate("Database error") . ": " . dbi_error ();
+            break;
+          }
+        }
+      }
+
+      // Now add participants
+      if ( ! $updateMode ) {
+        $status = ( $login == "__public__" ) ? 'W' : 'A';
+        if ( empty ( $cat_id ) ) $cat_id = 'NULL';
+        $sql = "INSERT INTO webcal_entry_user " .
+          "( cal_id, cal_login, cal_status, cal_category ) VALUES ( $id, '" .
+          $participants[0] . "', '$status', $cat_id )";
+        $sqlLog .= $sql . "<br />\n";
+        if ( ! dbi_query ( $sql ) ) {
+          $error = translate("Database error") . ": " . dbi_error ();
+          break;
+        }
+      }
+
+      // Add repeating info
+      if ( $updateMode ) {
+        // remove old repeating info
+        dbi_query ( "DELETE FROM webcal_entry_repeats WHERE cal_id = $id" );
+        dbi_query ( "DELETE FROM webcal_entry_repeats_not WHERE cal_id = $id" );
+      }
+      if (! empty ($Entry['Repeat']['Interval'])) {
+        //while ( list($k,$v) = each ( $Entry['Repeat'] ) ) {
+        //  echo "$k: $v <br />\n";
+        //}
+        $rpt_type = RepeatType($Entry['Repeat']['Interval']);
+        $freq = ( ! empty ( $Entry['Repeat']['Frequency'] ) ? 
+          $Entry['Repeat']['Frequency'] : 1 );
+        if ( ! empty ( $Entry['Repeat']['EndTime'] ) ) {
+          $REND   = localtime($Entry['Repeat']['EndTime']);
+          $end = sprintf ( "%04d%02d%02d",$REND[5] + 1900,$REND[4] + 1,$REND[3]);
+        } else {
+          $end = 'NULL';
+        }
+        $days = (! empty ($Entry['Repeat']['RepeatDays'])) ? 
+          "'".$Entry['Repeat']['RepeatDays']."'" : 'NULL';
+        $sql = "INSERT INTO webcal_entry_repeats ( cal_id, " .
+          "cal_type, cal_end, cal_days, cal_frequency ) VALUES " .
+          "( $id, '$rpt_type', $end, $days, $freq )";
+        $sqlLog .= $sql . "<br />\n";
+        if ( ! dbi_query ( $sql ) ) {
+          $error = "Unable to add to webcal_entry_repeats: ".
+            dbi_error ()."<br /><br />\n<b>SQL:</b> $sql";
+          break;
+        }
+
+        // Repeating Exceptions...
+        if ( ! empty ( $Entry['Repeat']['Exceptions'] ) ) {
+          foreach ($Entry['Repeat']['Exceptions'] as $ex_date) {
+            $ex_date = date("Ymd",$ex_date);
+            $sql = "INSERT INTO webcal_entry_repeats_not ( cal_id, cal_date ) VALUES ( $id, $ex_date )";
+            $sqlLog .= $sql . "<br />\n";
+            if ( ! dbi_query ( $sql ) ) {
+              $error = "Unable to add to webcal_entry_repeats_not: ".
+                dbi_error ()."<br /><br />\n<b>SQL:</b> $sql";
+              break;
+            }
+          }
+        }
+      } // End Repeat
+
+      // Add Alarm info -> site_extras
+      if ( $updateMode ) {
+        dbi_query ( "DELETE FROM webcal_site_extras WHERE cal_id = $id" );
+      }
+      if ( ! empty ( $Entry['AlarmSet'] ) && $Entry['AlarmSet'] == 1 ) {
+        $RM = $Entry['AlarmAdvanceAmount'];
+        if ($Entry['AlarmAdvanceType'] == 1){ $RM = $RM * 60; }
+        if ($Entry['AlarmAdvanceType'] == 2){ $RM = $RM * 60 * 24; }
+        $sql = "INSERT INTO webcal_site_extras ( cal_id, " .
+          "cal_name, cal_type, cal_remind, cal_data ) VALUES " .
+          "( $id, 'Reminder', 7, 1, $RM )";
+        $sqlLog .= $sql . "<br />\n";
+        if ( ! dbi_query ( $sql ) ) {
+          $error = translate("Database error") . ": " . dbi_error ();
+        }
+      }
+    }
+
+    if ( ! empty ($error) && empty ($overlap))  {
+      $error_num++;
+      echo "<h2>". translate("Error") .
+        "</h2>\n<blockquote>\n";
+      echo $error . "</blockquote>\n<br />\n";
+    }
+
+    // Conflicting
+    if ( ! empty ( $overlap ) ) {
+      echo "<b><h2>" .
+        translate("Scheduling Conflict") . ": ";
+      $count_con++;
+      echo "</h2></b>";
+
+      if ( $Entry['Duration'] > 0 ) {
+        $time = display_time ( $Entry['StartHour'].$Entry['StartMinute']."00" ) .
+          " - " . display_time ( $Entry['EndHour'].$Entry['EndMinute']."00" );
+      }
+      $dd = $Entry['StartMonth'] . "-" .  $Entry['StartDay'] . "-" . $Entry['StartYear'];
+      $Entry['Summary'] = str_replace ( "''", "'", $Entry['Summary'] );
+      $Entry['Summary'] = str_replace ( "'", "\\'", $Entry['Summary'] );
+      echo htmlspecialchars ( $Entry['Summary'] );
+      echo " (" . $dd;
+      $time = trim ( $time );
+      if ( ! empty ( $time ) )
+        echo "  " . $time;
+      echo ")<br />\n";
+      etranslate("conflicts with the following existing calendar entries");
+      echo ":<ul>\n" . $overlap . "</ul>\n";
+    } else {
+
+    // No Conflict
+      echo "<b><h2>" .
+        translate("Event Imported") . ":</h2></b>\n";
+      $count_suc++;
+      if ( $Entry['Duration'] > 0 ) {
+        $time = display_time ( $Entry['StartHour'].$Entry['StartMinute']."00" ) .
+          " - " . display_time ( $Entry['EndHour'].$Entry['EndMinute']."00" );
+      }
+      $dateYmd = sprintf ( "%04d%02d%02d", $Entry['StartYear'],
+        $Entry['StartMonth'], $Entry['StartDay'] );
+      $dd = date_to_str ( $dateYmd );
+      echo "<a class=\"entry\" href=\"view_entry.php?id=$id";
+      echo "\" onmouseover=\"window.status='" . translate("View this entry") .
+        "'; return true;\" onmouseout=\"window.status=''; return true;\">";
+      $Entry['Summary'] = str_replace( "''", "'", $Entry['Summary']);
+      $Entry['Summary'] = str_replace( "\\", "", $Entry['Summary']);
+      echo htmlspecialchars ( $Entry['Summary'] );
+      echo "</a> (" . $dd;
+      if ( ! empty ( $time ) )
+        echo "  " . $time;
+      echo ")<br />\n";
+    }
+
+    // Reset Variables
+    $overlap = $error = $dd = $time = '';
+  }
+
+  // Mark old events from prior import as deleted.
+  if ( $overwrite && count ( $oldUIDs ) > 0 ) {
+    // We could do this with a single SQL using sub-select, but
+    // I'm pretty sure MySQL does not support it.
+    $old = array_keys ( $oldUIDs );
+    for ( $i = 0; $i < count ( $old ); $i++ ) {
+      $sql = "SELECT cal_id FROM webcal_import_data WHERE " .
+        "cal_import_type = '$type' AND " .
+        "cal_external_id = '$old[$i]' AND " .
+        "cal_login = '$calUser' AND " .
+        "cal_id < $firstEventId";
+      $res = dbi_query ( $sql );
+      if ( $res ) {
+        while ( $row = dbi_fetch_row ( $res ) ) {
+          $oldIds[] = $row[0];
+        }
+        dbi_free_result ( $res );
+      } else {
+        echo translate("Database error") . ": " . dbi_error () . "<br />\n";
+      }
+    }
+    for ( $i = 0; $i < count ( $oldIds ); $i++ ) {
+      $sql = "UPDATE webcal_entry_user SET cal_status = 'D' " .
+        "WHERE cal_id = $oldIds[$i]";
+      $sqlLog .= $sql . "<br />\n";
+      dbi_query ( $sql );
+      $numDeleted++;
+    }
+  }
+
+  //echo "<b>SQL:</b><br />\n$sqlLog\n";
+}
+
+// Convert interval to webcal repeat type
+function RepeatType ($type) {
+  $Repeat = array (0,'daily','weekly','monthlyByDay','monthlyByDate','yearly','monthlyByDayR');
+  return $Repeat[$type];
+}
+?>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/import_ical.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/import_ical.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/import_ical.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,414 @@
+<?php
+/*
+ * $Id: import_ical.php,v 1.19.2.1 2005/08/19 17:52:35 umcesrjones Exp $
+ *
+ * File Description:
+ * This file incudes functions for parsing iCal data files during
+ * an import.
+ *
+ * It will be included by import_handler.php.
+ *
+ * The iCal specification is available online at:
+ * http://www.ietf.org/rfc/rfc2445.txt
+ *
+ */
+
+// Parse the ical file and return the data hash.
+function parse_ical ( $cal_file ) {
+  global $tz, $errormsg;
+
+  $ical_data = array();
+
+  if (!$fd=@fopen($cal_file,"r")) {
+    $errormsg .= "Can't read temporary file: $cal_file\n";
+    exit();
+  } else {
+
+    // Read in contents of entire file first
+    $data = '';
+    $line = 0;
+    while (!feof($fd) && empty( $error ) ) {
+      $line++;
+      $data .= fgets($fd, 4096);
+    }
+    fclose($fd);
+    // Now fix folding.  According to RFC, lines can fold by having
+    // a CRLF and then a single white space character.
+    // We will allow it to be CRLF, CR or LF or any repeated sequence
+    // so long as there is a single white space character next.
+    //echo "Orig:<br><pre>$data</pre><br/><br/>\n";
+    $data = preg_replace ( "/[\r\n]+ /", "", $data );
+    $data = preg_replace ( "/[\r\n]+/", "\n", $data );
+    //echo "Data:<br><pre>$data</pre><P>";
+
+    // reflect the section where we are in the file:
+    // VEVENT, VTODO, VJORNAL, VFREEBUSY, VTIMEZONE
+    $state = "NONE";
+    $substate = "none"; // reflect the sub section
+    $subsubstate = ""; // reflect the sub-sub section
+    $error = false;
+    $line = 0;
+    $event = '';
+
+    $lines = explode ( "\n", $data );
+    for ( $n = 0; $n < count ( $lines ) && ! $error; $n++ ) {
+      $line++;
+      $buff = $lines[$n];
+
+      // parser debugging code...
+      //echo "line = $line <br />";
+      //echo "state = $state <br />";
+      //echo "substate = $substate <br />";
+      //echo "subsubstate = $subsubstate <br />";
+      //echo "buff = " . htmlspecialchars ( $buff ) . "<br /><br />\n";
+
+      if ($state == "VEVENT") {
+          if ( ! empty ( $subsubstate ) ) {
+            if (preg_match("/^END:(.+)$/i", $buff, $match)) {
+              if ( $match[1] == $subsubstate ) {
+                $subsubstate = '';
+              }
+            } else if ( $subsubstate == "VALARM" && 
+              preg_match ( "/TRIGGER:(.+)$/i", $buff, $match ) ) {
+              // Example: TRIGGER;VALUE=DATE-TIME:19970317T133000Z
+              //echo "Set reminder to $match[1]<br />";
+              // reminder time is $match[1]
+            }
+          }
+          else if (preg_match("/^BEGIN:(.+)$/i", $buff, $match)) {
+            $subsubstate = $match[1];
+          }
+           // we suppose ":" is on the same line as property name, this can perhaps cause problems
+          else if (preg_match("/^SUMMARY.*:(.+)$/i", $buff, $match)) {
+              $substate = "summary";
+              $event[$substate] = $match[1];
+          } elseif (preg_match("/^DESCRIPTION:(.+)$/i", $buff, $match)) {
+              $substate = "description";
+              $event[$substate] = $match[1];
+          } elseif (preg_match("/^DESCRIPTION.*:(.+)$/i", $buff, $match)) {
+              $substate = "description";
+              $event[$substate] = $match[1];
+          } elseif (preg_match("/^CLASS.*:(.*)$/i", $buff, $match)) {
+              $substate = "class";
+              $event[$substate] = $match[1];
+          } elseif (preg_match("/^PRIORITY.*:(.*)$/i", $buff, $match)) {
+              $substate = "priority";
+              $event[$substate] = $match[1];
+          } elseif (preg_match("/^DTSTART.*:\s*(\d+T\d+Z?)\s*$/i", $buff, $match)) {
+              $substate = "dtstart";
+              $event[$substate] = $match[1];
+          } elseif (preg_match("/^DTSTART.*:\s*(\d+)\s*$/i", $buff, $match)) {
+              $substate = "dtstart";
+              $event[$substate] = $match[1];
+          } elseif (preg_match("/^DTEND.*:\s*(.*)\s*$/i", $buff, $match)) {
+              $substate = "dtend";
+              $event[$substate] = $match[1];
+          } elseif (preg_match("/^DURATION.*:(.+)\s*$/i", $buff, $match)) {
+              $substate = "duration";
+              $durH = $durM = 0;
+              if ( preg_match ( "/PT.*([0-9]+)H/", $match[1], $submatch ) )
+                $durH = $submatch[1];
+              if ( preg_match ( "/PT.*([0-9]+)M/", $match[1], $submatch ) )
+                $durM = $submatch[1];
+              $event[$substate] = $durH * 60 + $durM;
+          } elseif (preg_match("/^RRULE.*:(.+)$/i", $buff, $match)) {
+              $substate = "rrule";
+              $event[$substate] = $match[1];
+          } elseif (preg_match("/^EXDATE.*:(.+)$/i", $buff, $match)) {
+              $substate = "exdate";
+              $event[$substate] = $match[1];
+          } elseif (preg_match("/^CATEGORIES.*:(.+)$/i", $buff, $match)) {
+              $substate = "categories";
+              $event[$substate] = $match[1];
+          } elseif (preg_match("/^UID.*:(.+)$/i", $buff, $match)) {
+              $substate = "uid";
+              $event[$substate] = $match[1];
+          } elseif (preg_match("/^END:VEVENT$/i", $buff, $match)) {
+              $state = "VCALENDAR";
+              $substate = "none";
+              $subsubstate = '';
+              if ($tmp_data = format_ical($event)) $ical_data[] = $tmp_data;
+              // clear out data for new event
+              $event = '';
+
+   // TODO: QUOTED-PRINTABLE descriptions
+
+   // folded lines
+          // TODO: This is not the best way to handle folded lines.
+          // We should fix the folding before we parse...
+          } elseif (preg_match("/^\s(\S.*)$/", $buff, $match)) {
+              if ($substate != "none") {
+                  $event[$substate] .= $match[1];
+              } else {
+                  $errormsg .= "iCal parse error on line $line:<br />$buff\n";
+                  $error = true;
+              }
+          // For unsupported properties
+   } else {
+            $substate = "none";
+          }
+      } elseif ($state == "VCALENDAR") {
+          if (preg_match("/^BEGIN:VEVENT/i", $buff)) {
+            $state = "VEVENT";
+          } elseif (preg_match("/^END:VCALENDAR/i", $buff)) {
+            $state = "NONE";
+          } else if (preg_match("/^BEGIN:VTIMEZONE/i", $buff)) {
+            $state = "VTIMEZONE";
+          } else if (preg_match("/^BEGIN:VALARM/i", $buff)) {
+            $state = "VALARM";
+          }
+      } elseif ($state == "VTIMEZONE") {
+        // We don't do much with timezone info yet...
+        if (preg_match("/^END:VTIMEZONE$/i", $buff)) {
+          $state = "VCALENDAR";
+        }
+      } elseif ($state == "NONE") {
+         if (preg_match("/^BEGIN:VCALENDAR$/i", $buff))
+           $state = "VCALENDAR";
+      }
+    } // End while
+  }
+
+  return $ical_data;
+}
+
+// Convert ical format (yyyymmddThhmmssZ) to epoch time
+function icaldate_to_timestamp ($vdate, $plus_d = '0', $plus_m = '0',
+  $plus_y = '0') {
+  global $TZoffset;
+
+  $y = substr($vdate, 0, 4) + $plus_y;
+  $m = substr($vdate, 4, 2) + $plus_m;
+  $d = substr($vdate, 6, 2) + $plus_d;
+  $H = substr($vdate, 9, 2);
+  $M = substr($vdate, 11, 2);
+  $S = substr($vdate, 13, 2);
+  $Z = substr($vdate, 15, 1);
+
+  if ($Z == 'Z') {
+    $TS = gmmktime($H,$M,$S,$m,$d,$y);
+  } else {
+    // Problem here if server in different timezone
+    $TS = mktime($H,$M,$S,$m,$d,$y);
+  }
+
+  return $TS;
+}
+
+
+// Put all ical data into import hash structure
+function format_ical($event) {
+
+  // Start and end time
+  $fevent['StartTime'] = icaldate_to_timestamp($event['dtstart']);
+  if ($fevent['StartTime'] == '-1') return false;
+  if ( isset ( $event['dtend'] ) ) {
+    $fevent['EndTime'] = icaldate_to_timestamp($event['dtend']);
+  } else {
+    if ( isset ( $event['duration'] ) ) {
+      $fevent['EndTime'] = $fevent['StartTime'] + $event['duration'] * 60;
+    } else {
+      $fevent['EndTime'] = $fevent['StartTime'];
+    }
+  }
+
+  // Calculate duration in minutes
+  if ( isset ( $event['duration'] ) ) {
+    $fevent['Duration'] = $event['duration'];
+  } else if ( empty ( $fevent['Duration'] ) ) {
+    $fevent['Duration'] = ($fevent['EndTime'] - $fevent['StartTime']) / 60;
+  }
+  if ( $fevent['Duration'] == '1440' ) {
+    // All day event... nothing to do here :-)
+  } else if ( preg_match ( "/\d\d\d\d\d\d\d\d$/",
+    $event['dtstart'], $pmatch ) ) {
+    // Untimed event
+    $fevent['Duration'] = 0;
+    $fevent['Untimed'] = 1;
+  }
+  if ( preg_match ( "/\d\d\d\d\d\d\d\d$/", $event['dtstart'],
+    $pmatch ) && preg_match ( "/\d\d\d\d\d\d\d\d$/", $event['dtend'],
+    $pmatch2 ) && $event['dtstart'] != $event['dtend'] ) {
+    $startTime = icaldate_to_timestamp($event['dtstart']);
+    $endTime = icaldate_to_timestamp($event['dtend']);
+    // Not sure... should this be untimed or allday?
+    if ( $endTime - $startTime == ( 3600 * 24 ) ) {
+      // They used a DTEND set to the next day to say this is an all day
+      // event.  We will call this an untimed event.
+      $fevent['Duration'] = '0';
+      $fevent['Untimed'] = 1;
+    } else {
+      // Event spans multiple days.  The EndTime actually represents
+      // the first day the event does _not_ take place.  So,
+      // we need to back up one day since WebCalendar end date is the
+      // last day the event takes place.
+      $fevent['Repeat']['Interval'] = '1'; // 1 = daily
+      $fevent['Repeat']['Frequency'] = '1'; // 1 = every day
+      $fevent['Duration'] = '0';
+      $fevent['Untimed'] = 1;
+      $fevent['Repeat']['EndTime'] = $endTime - ( 24 * 3600 );
+    }
+  }
+
+  $fevent['Summary'] = $event['summary'];
+  if ( ! empty ( $event['description'] ) ) {
+    $fevent['Description'] = $event['description'];
+  } else {
+    $fevent['Description'] = $event['summary'];
+  }
+  if ( ! empty ( $event['class'] ) ) {
+    $fevent['Private'] = preg_match("/private|confidential/i", 
+      $event['class']) ? '1' : '0';
+  }
+  $fevent['UID'] = $event['uid'];
+
+  // Repeats
+  //
+  // Handle RRULE
+  if ( ! empty ( $event['rrule'] ) ) {
+    // first remove and EndTime that may have been calculated above
+    unset ( $fevent['Repeat']['EndTime'] );
+    //split into pieces
+    //echo "RRULE line: $event[rrule] <br />\n";
+    $RR = explode ( ";", $event['rrule'] );
+
+    // create an associative array of key-value paris in $RR2[]
+    for ( $i = 0; $i < count ( $RR ); $i++ ) {
+      $ar = explode ( "=", $RR[$i] );
+      $RR2[$ar[0]] = $ar[1];
+    }
+
+    for ( $i = 0; $i < count ( $RR ); $i++ ) {
+      //echo "RR $i = $RR[$i] <br />";
+      if ( preg_match ( "/^FREQ=(.+)$/i", $RR[$i], $match ) ) {
+        if ( preg_match ( "/YEARLY/i", $match[1], $submatch ) ) {
+          $fevent['Repeat']['Interval'] = 5;
+        } else if ( preg_match ( "/MONTHLY/i", $match[1], $submatch ) ) {
+          $fevent['Repeat']['Interval'] = 2;
+        } else if ( preg_match ( "/WEEKLY/i", $match[1], $submatch ) ) {
+          $fevent['Repeat']['Interval'] = 2;
+        } else if ( preg_match ( "/DAILY/i", $match[1], $submatch ) ) {
+          $fevent['Repeat']['Interval'] = 1;
+        } else {
+          // not supported :-(
+          echo "Unsupported iCal FREQ value \"$match[1]\"<br />\n";
+        }
+      } else if ( preg_match ( "/^INTERVAL=(.+)$/i", $RR[$i], $match ) ) {
+        $fevent['Repeat']['Frequency'] = $match[1];
+      } else if ( preg_match ( "/^UNTIL=(.+)$/i", $RR[$i], $match ) ) {
+        // specifies an end date
+        $fevent['Repeat']['EndTime'] = icaldate_to_timestamp ( $match[1] );
+      } else if ( preg_match ( "/^COUNT=(.+)$/i", $RR[$i], $match ) ) {
+        // NOT YET SUPPORTED -- TODO
+        echo "Unsupported iCal COUNT value \"$RR[$i]\"<br />\n";
+      } else if ( preg_match ( "/^BYSECOND=(.+)$/i", $RR[$i], $match ) ) {
+        // NOT YET SUPPORTED -- TODO
+        echo "Unsupported iCal BYSECOND value \"$RR[$i]\"<br />\n";
+      } else if ( preg_match ( "/^BYMINUTE=(.+)$/i", $RR[$i], $match ) ) {
+        // NOT YET SUPPORTED -- TODO
+        echo "Unsupported iCal BYMINUTE value \"$RR[$i]\"<br />\n";
+      } else if ( preg_match ( "/^BYHOUR=(.+)$/i", $RR[$i], $match ) ) {
+        // NOT YET SUPPORTED -- TODO
+        echo "Unsupported iCal BYHOUR value \"$RR[$i]\"<br />\n";
+      } else if ( preg_match ( "/^BYMONTH=(.+)$/i", $RR[$i], $match ) ) {
+        // this event repeats during the specified months
+        $months = explode ( ",", $match[1] );
+        if ( count ( $months ) == 1 ) {
+          // Change this to a monthly event so we can support repeat by
+          // day of month (if needed)
+          // Frequency = 3 (by day), 4 (by date), 6 (by day reverse)
+          if ( ! empty ( $RR2['BYDAY'] ) ) {
+            if ( preg_match ( "/^-/", $RR2['BYDAY'], $junk ) )
+              $fevent['Repeat']['Interval'] = 6; // monthly by day reverse
+            else
+              $fevent['Repeat']['Interval'] = 3; // monthly by day
+            $fevent['Repeat']['Frequency'] = 12; // once every 12 months
+          } else {
+            // could convert this to monthly by date, but we will just
+            // leave it as yearly.
+            //$fevent['Repeat']['Interval'] = 4; // monthly by date
+          }
+        } else {
+          // WebCalendar does not support this
+          echo "Unsupported iCal BYMONTH value \"$match[1]\"<br />\n";
+        }
+      } else if ( preg_match ( "/^BYDAY=(.+)$/i", $RR[$i], $match ) ) {
+        $fevent['Repeat']['RepeatDays'] = rrule_repeat_days( $match[1] );
+      } else if ( preg_match ( "/^BYMONTHDAY=(.+)$/i", $RR[$i], $match ) ) {
+        $fevent['Repeat']['Frequency'] = 4; //monthlyByDate
+  //echo "Partially Supported iCal BYSETPOS value \"$RR[$i]\"<br />\n";
+      } else if ( preg_match ( "/^BYSETPOS=(.+)$/i", $RR[$i], $match ) ) {
+        // NOT YET SUPPORTED -- TODO
+        echo "Unsupported iCal BYSETPOS value \"$RR[$i]\"<br />\n";
+      }
+    }
+
+    // Repeating exceptions?
+    if ( ! empty ( $event['exdate'] ) && $event['exdate']) {
+      $fevent['Repeat']['Exceptions'] = array();
+      $EX = explode(",", $event['exdate']);
+      foreach ( $EX as $exdate ){
+        $fevent['Repeat']['Exceptions'][] = icaldate_to_timestamp($exdate);
+      }
+    }
+  } // end if rrule
+
+  return $fevent;
+}
+
+// Figure out days of week for weekly repeats
+function rrule_repeat_days($RA) {
+  $RA =  explode(",",  $RA );
+  $T = count( $RA ) ;
+  $sun = $mon = $tue = $wed = $thu = $fri = $sat = 'n';
+  for ($i = 0; $i < $T; $i++) {
+    if ($RA[$i] == 'SU') {
+      $sun = 'y';
+    } elseif ($RA[$i] == 'MO') {
+      $mon = 'y';
+    } elseif ($RA[$i] == 'TU') {
+      $tue = 'y';
+    } elseif ($RA[$i] == 'WE') {
+      $wed = 'y';
+    } elseif ($RA[$i] == 'TH') {
+      $thu = 'y';
+    } elseif ($RA[$i] == 'FR') {
+      $fri = 'y';
+    } elseif ($RA[$i] == 'SA') {
+      $sat = 'y';
+    }
+  }
+  return $sun.$mon.$tue.$wed.$thu.$fri.$sat;
+}
+
+
+// Calculate repeating ending time
+function rrule_endtime($int,$freq,$start,$end) {
+
+  // if # then we have to add the difference to the start time
+  if (preg_match("/^#(.+)$/i", $end, $M)) {
+    $T = $M[1] * $freq;
+    $plus_d = $plus_m = $plus_y = '0';
+    if ($int == '1') {
+      $plus_d = $T;
+    } elseif ($int == '2') {
+      $plus_d = $T * 7;
+    } elseif ($int == '3') {
+      $plus_m = $T;
+    } elseif ($int == '4') {
+      $plus_m = $T;
+    } elseif ($int == '5') {
+      $plus_y = $T;
+    } elseif ($int == '6') {
+      $plus_m = $T;
+    }
+    $endtime = icaldate_to_timestamp($start,$plus_d,$plus_m,$plus_y);
+
+  // if we have the enddate
+  } else {
+    $endtime = icaldate_to_timestamp($end);
+  }
+  return $endtime;
+}
+
+?>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/import_palmdesktop.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/import_palmdesktop.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/import_palmdesktop.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,63 @@
+<?php
+
+// Parse the datebook file and return the data hash.
+//
+function parse_palmdesktop ($file, $exc_private = 1) {
+  $file = EscapeShellArg($file);
+  $exc_private = EscapeShellArg($exc_private);
+  exec ("perl tools/palm_datebook.pl $file $exc_private", $Entries);
+  $data = array ();
+  while ( list( $line_num, $line ) = each( $Entries ) ) {
+    $data[] = ParseLine($line);
+  }
+  return $data;
+}
+
+// Delete all Palm Events for $login to clear any events deleted in the palm
+// Return 1 if success
+function delete_palm_events($login) {
+  $res = dbi_query ( "SELECT cal_id FROM webcal_import_data " .
+    "WHERE cal_login = '$login' AND cal_import_type = 'palm'" );
+  if ( $res ) {
+     while ( $row = dbi_fetch_row ( $res ) ) {
+       dbi_query ( "DELETE FROM webcal_entry_user WHERE cal_id = $row[0]" );
+       dbi_query ( "DELETE FROM webcal_entry_repeats WHERE cal_id = $row[0]" );
+       dbi_query ( "DELETE FROM webcal_entry_repeats_not WHERE cal_id = $row[0]" );
+       dbi_query ( "DELETE FROM webcal_entry_log WHERE cal_entry_id = $row[0]" );
+       dbi_query ( "DELETE FROM webcal_site_extras WHERE cal_id = $row[0]" );
+       dbi_query ( "DELETE FROM webcal_reminder_log WHERE cal_id = $row[0]" );
+       dbi_query ( "DELETE FROM webcal_import_data WHERE cal_id = $row[0]" );
+       dbi_query ( "DELETE FROM webcal_entry WHERE cal_id = $row[0]" );
+     }
+  }
+  dbi_free_result ( $res );
+  return 1;
+}
+
+function ParseLine($line){
+  list(
+    $Entry['RecordID'],
+    $Entry['StartTime'],
+    $Entry['EndTime'],
+    $Entry['Summary'],
+    $Entry['Duration'],
+    $Entry['Description'],
+    $Entry['Untimed'],
+    $Entry['Private'],
+    $Entry['Category'],
+    $Entry['AlarmSet'],
+    $Entry['AlarmAdvanceAmount'],
+    $Entry['AlarmAdvanceType'],
+    $Entry['Repeat']['Interval'],
+    $Entry['Repeat']['Frequency'],
+    $Entry['Repeat']['EndTime'],
+    $Exceptions,
+    $Entry['Repeat']['RepeatDays'],
+    $WeekNum,
+      ) = explode("|", $line);
+
+  if ($Exceptions) $Entry['Repeat']['Exceptions'] = explode(":",$Exceptions);
+  if (($WeekNum == '5') && ($Entry['Repeat']['Interval'] == '3')) $Entry['Repeat']['Interval'] = '6';
+  return $Entry;
+}
+?>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/import_vcal.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/import_vcal.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/import_vcal.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,295 @@
+<?php
+// Parse the vcal file and return the data hash.
+function parse_vcal($cal_file) {
+  global $tz, $errormsg;
+
+  $vcal_data = array();
+
+  //echo "Parsing vcal file... <br />\n";
+
+  if (!$fd=@fopen($cal_file,"r")) {
+    $errormsg .= "Can't read temporary file: $cal_file\n";
+    exit();
+  } else {
+    // reflect the section where we are in the file:
+    // VCALENDAR, TZ/DAYLIGHT, VEVENT, ALARM
+    $state = "NONE";
+    $substate = "none"; // reflect the sub section
+    $subsubstate = ""; // reflect the sub-sub section
+    $error = false;
+    $line = 0;
+    $event = '';
+
+    while (!feof($fd) && !$error) {
+      $line++;
+      $buff = fgets($fd, 4096);
+      $buff = chop($buff);
+
+      // parser debugging code...
+      //echo "line = $line <br />";
+      //echo "state = $state <br />";
+      //echo "substate = $substate <br />";
+      //echo "subsubstate = $subsubstate <br />";
+      //echo "buff = " . htmlspecialchars ( $buff ) . "<br /><br />\n";
+
+      if ($state == "VEVENT") {
+          if ( ! empty ( $subsubstate ) ) {
+            if (preg_match("/^END:(.+)$/i", $buff, $match)) {
+              if ( $match[1] == $subsubstate ) {
+                $subsubstate = '';
+              }
+            } else if ( $subsubstate == "VALARM" && 
+              preg_match ( "/TRIGGER:(.+)$/i", $buff, $match ) ) {
+		//echo "Set reminder to $match[1]<br />";
+		//reminder time is $match[1]
+            }
+          }
+          else if (preg_match("/^BEGIN:(.+)$/i", $buff, $match)) {
+            $subsubstate = $match[1];
+          }
+           // we suppose ":" is on the same line as property name, this can perhaps cause problems
+	  else if (preg_match("/^SUMMARY.*:(.+)$/i", $buff, $match)) {
+              $substate = "summary";
+              $event[$substate] = $match[1];
+          } elseif (preg_match("/^DESCRIPTION:(.+)$/i", $buff, $match)) {
+              $substate = "description";
+              $event[$substate] = $match[1];
+          } elseif (preg_match("/^DESCRIPTION;ENCODING=QUOTED-PRINTABLE:(.+)$/i", $buff, $match)) {
+//              $substate = "description";
+//              $event[$substate] = quoted_printable_decode ( $match[1] );
+              $substate = "descriptionqp";
+              $event[$substate] = $match[1];
+          } elseif (preg_match("/^CLASS.*:(.+)$/i", $buff, $match)) {
+              $substate = "class";
+              $event[$substate] = $match[1];
+          } elseif (preg_match("/^PRIORITY.*:(.+)$/i", $buff, $match)) {
+              $substate = "priority";
+              $event[$substate] = $match[1];
+	        } elseif (preg_match("/^DTSTART.*:(.+)$/i", $buff, $match)) {
+              $substate = "dtstart";
+              $event[$substate] = $match[1];
+          } elseif (preg_match("/^DTEND.*:(.+)$/i", $buff, $match)) {
+              $substate = "dtend";
+              $event[$substate] = $match[1];
+          } elseif (preg_match("/^RRULE.*:(.+)$/i", $buff, $match)) {
+              $substate = "rrule";
+              $event[$substate] = $match[1];
+          } elseif (preg_match("/^EXDATE.*:(.+)$/i", $buff, $match)) {
+              $substate = "exdate";
+              $event[$substate] = $match[1];
+          } elseif (preg_match("/^DALARM.*:(.+)$/i", $buff, $match)) {
+              $substate = "dalarm";
+              $event[$substate] = $match[1];
+          } elseif (preg_match("/^CATEGORIES.*:(.+)$/i", $buff, $match)) {
+              $substate = "categories";
+              $event[$substate] = $match[1];
+          } elseif (preg_match("/^UID.*:(.+)$/i", $buff, $match)) {
+              $substate = "uid";
+              $event[$substate] = $match[1];
+          } elseif (preg_match("/^END:VEVENT$/i", $buff, $match)) {
+              $state = "VCALENDAR";
+              $substate = "none";
+              $subsubstate = '';
+	      if ($tmp_data = format_vcal($event)) $vcal_data[] = $tmp_data;
+              // clear out data for new event
+              $event = '';
+
+	  // TODO: QUOTED-PRINTABLE descriptions
+
+	  // folded lines
+          } elseif (preg_match("/^[ ]{1}(.+)$/", $buff, $match)) {
+              if ($substate != "none") {
+                  $event[$substate] .= $match[1];
+              } else {
+                  $errormsg .= "Error in file $cal_file line $line:<br />$buff\n";
+                  $error = true;
+              }
+          // For unsupported properties
+	  } else {
+            $substate = "none";
+          }
+      } elseif ($state == "VCALENDAR") {
+          if (preg_match("/^TZ.*:(.+)$/i", $buff, $match)) {
+            $event['tz'] = $match[1];
+          } elseif (preg_match("/^DAYLIGHT.*:(.+)$/i", $buff, $match)) {
+            $event['daylight'] = $match[1];
+          } elseif (preg_match("/^BEGIN:VEVENT$/i", $buff)) {
+            $state = "VEVENT";
+          } elseif (preg_match("/^END:VCALENDAR$/i", $buff)) {
+            $state = "NONE";
+          }
+      } elseif ($state == "NONE") {
+         if (preg_match("/^BEGIN:VCALENDAR$/i", $buff))
+           $state = "VCALENDAR";
+         else if (preg_match("/^BEGIN:ALARM$/i", $buff))
+           $state = "ALARM";
+      }
+    } //End while
+    fclose($fd);
+  }
+
+  return $vcal_data;
+}
+
+// Convert vcal format (yyyymmddThhmmssZ) to epoch time
+function vcaldate_to_timestamp($vdate,$plus_d = '0',$plus_m = '0', $plus_y = '0') {
+  global $TZoffset;
+
+  $y = substr($vdate, 0, 4) + $plus_y;
+  $m = substr($vdate, 4, 2) + $plus_m;
+  $d = substr($vdate, 6, 2) + $plus_d;
+  $H = substr($vdate, 9, 2);
+  $M = substr($vdate, 11, 2);
+  $S = substr($vdate, 13, 2);
+  $Z = substr($vdate, 15, 1);
+  if ($Z == 'Z') {
+    $TS = gmmktime($H,$M,$S,$m,$d,$y);
+  } else {
+    // Problem here if server in different timezone
+    $TS = mktime($H,$M,$S,$m,$d,$y);
+  }
+
+  return $TS;
+}
+
+// Put all vcal data into import hash structure
+function format_vcal($event) {
+  // Start and end time
+  $fevent['StartTime'] = vcaldate_to_timestamp($event['dtstart']);
+  if ($fevent['StartTime'] == '-1') return false;
+  $fevent['EndTime'] = vcaldate_to_timestamp($event['dtend']);
+
+  // Calculate duration in minutes
+  $fevent['Duration']           = ($fevent['EndTime'] - $fevent['StartTime']) / 60;
+  if ($fevent['Duration'] == '1440') { $fevent['Duration'] = '0'; $fevent['Untimed'] = 1; } //All day (untimed)
+
+  if (! empty($event['summary'])) $fevent['Summary'] = $event['summary'];
+  if (! empty($event['description'])) $fevent['Description'] = $event['description'];
+  if (! empty($event['descriptionqp'])) {
+    $fevent['Description'] = quoted_printable_decode ( $event['descriptionqp'] );
+    
+    // hack for mozilla sunbird's extra = signs
+    $fevent['Description'] = preg_replace('/^=/', '', $fevent['Description']);
+    $fevent['Description'] = str_replace("\n=", "\n", $fevent['Description']);
+  }
+  if (! empty($event['class'])) {
+    $fevent['Private'] = preg_match("/private|confidential/i", $event['class']) ? '1' : '0';
+  } else {
+    $fevent['Private'] = '0';
+  }
+  if (! empty($fevent['UID'])) $fevent['UID'] = $event['uid'];
+
+  // Repeats
+  //
+  // vcal 1.0 repeats can be very complicated and the webcalendar doesn't
+  // actually support all of the ways repeats can be specified.  We will
+  // focus on vcals dumped from Palm Desktop and Lotus Notes, which are simple
+  // and the ones webcalendar should fully support.
+  if (! empty($event['rrule'])) {
+    //split into pieces
+    $RR = explode(" ", $event['rrule']);
+
+    if (preg_match("/^D(.+)$/i", $RR[0], $match)) {
+      $fevent['Repeat']['Interval'] = '1';
+      $fevent['Repeat']['Frequency'] = $match[1];
+    } elseif (preg_match("/^W(.+)$/i", $RR[0], $match)) {
+      $fevent['Repeat']['Interval'] = '2';
+      $fevent['Repeat']['Frequency'] = $match[1];
+      $fevent['Repeat']['RepeatDays'] = rrule_repeat_days($RR);
+    } elseif (preg_match("/^MP(.+)$/i", $RR[0], $match)) {
+      $fevent['Repeat']['Interval'] = '3';
+      $fevent['Repeat']['Frequency'] = $match[1];
+      if ($RR[1] == '5+') {
+        $fevent['Repeat']['Interval'] = '6'; // Last week (monthlyByDayR)
+      }
+    } elseif (preg_match("/^MD(.+)$/i", $RR[0], $match)) {
+      $fevent['Repeat']['Interval'] = '4';
+      $fevent['Repeat']['Frequency'] = $match[1];
+    } elseif (preg_match("/^YM(.+)$/i", $RR[0], $match)) {
+      $fevent['Repeat']['Interval'] = '5';
+      $fevent['Repeat']['Frequency'] = $match[1];
+    } elseif (preg_match("/^YD(.+)$/i", $RR[0], $match)) {
+      $fevent['Repeat']['Interval'] = '5';
+      $fevent['Repeat']['Frequency'] = $match[1];
+    }
+
+    $end = end($RR);
+
+    // No end in Palm is 12-31-2031
+    if (($end != '20311231') && ($end != '#0')) {
+      $fevent['Repeat']['EndTime'] = rrule_endtime($fevent['Repeat']['Interval'],$fevent['Repeat']['Frequency'],$event['dtstart'],$end);
+    }
+
+    // Repeating exceptions?
+    if (!empty($event['exdate'])) {
+      $fevent['Repeat']['Exceptions'] = array();
+      $EX = explode(",", $event['exdate']);
+      foreach ( $EX as $exdate ){
+        $fevent['Repeat']['Exceptions'][] = vcaldate_to_timestamp($exdate);
+      }
+    }
+  } // end if rrule
+
+// TODO
+//  $fevent[Category];
+//  $fevent[AlarmSet];
+//  $fevent[AlarmAdvanceAmount];
+//  $fevent[AlarmAdvanceType];
+
+  return $fevent;
+}
+
+// Figure out days of week for weekly repeats
+function rrule_repeat_days($RA) {
+  $T = count($RA);
+  $j = $T - 1;
+  $sun = $mon = $tue = $wed = $thu = $fri = $sat = 'n';
+  for ($i = 1; $i < $j; $i++) {
+    if ($RA[$i] == 'SU') {
+      $sun = 'y';
+    } elseif ($RA[$i] == 'MO') {
+      $mon = 'y';
+    } elseif ($RA[$i] == 'TU') {
+      $tue = 'y';
+    } elseif ($RA[$i] == 'WE') {
+      $wed = 'y';
+    } elseif ($RA[$i] == 'TH') {
+      $thu = 'y';
+    } elseif ($RA[$i] == 'FR') {
+      $fri = 'y';
+    } elseif ($RA[$i] == 'SA') {
+      $sat = 'y';
+    }
+  }
+  return $sun.$mon.$tue.$wed.$thu.$fri.$sat;
+}
+
+
+// Calculate repeating ending time
+function rrule_endtime($int,$freq,$start,$end) {
+  // if # then we have to add the difference to the start time
+  if (preg_match("/^#(.+)$/i", $end, $M)) {
+    $T = $M[1] * $freq;
+    $plus_d = $plus_m = $plus_y = '0';
+    if ($int == '1') {
+      $plus_d = $T;
+    } elseif ($int == '2') {
+      $plus_d = $T * 7;
+    } elseif ($int == '3') {
+      $plus_m = $T;
+    } elseif ($int == '4') {
+      $plus_m = $T;
+    } elseif ($int == '5') {
+      $plus_y = $T;
+    } elseif ($int == '6') {
+      $plus_m = $T;
+    }
+    $endtime = vcaldate_to_timestamp($start,$plus_d,$plus_m,$plus_y);
+
+  // if we have the enddate
+  } else {
+    $endtime = vcaldate_to_timestamp($end);
+  }
+  return $endtime;
+}
+?>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/config.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/config.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/config.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,328 @@
+<?php
+/**
+ * This file loads configuration settings from the data file settings.php and
+ * sets up some needed variables.
+ *
+ * The settings.php file is created during installation using the web-based db
+ * setup page (install/index.php).
+ *
+ * <b>Note:</b>
+ * DO NOT EDIT THIS FILE!
+ *
+ * (Versions 0.9.44 and older required users to edit this file to configure
+ * WebCalendar.  Version 0.9.45 and later requires editing the settings.php
+ * file instead.)
+ *
+ * @version $Id: config.php,v 1.53.2.15 2006/06/07 15:27:20 cknudsen Exp $
+ * @package WebCalendar
+ */
+if ( empty ( $PHP_SELF ) && ! empty ( $_SERVER ) &&
+  ! empty ( $_SERVER['PHP_SELF'] ) ) {
+  $PHP_SELF = $_SERVER['PHP_SELF'];
+}
+if ( ! empty ( $PHP_SELF ) && preg_match ( "/\/includes\//", $PHP_SELF ) ) {
+    die ( "You can't access this file directly!" );
+}
+
+// Unset some variables in case the server has register_globals
+// enabled.  This will prevent users from settings these values
+// in a URL:
+// http://localhost/calendar/month.php?includedir=http://xxx/bad-guy
+unset ( $includedir );
+unset ( $db_type );
+unset ( $db_database );
+unset ( $db_login );
+unset ( $db_password );
+unset ( $db_persistent );
+unset ( $single_user_login );
+unset ( $readonly );
+unset ( $mode );
+unset ( $use_http_auth );
+unset ( $single_user );
+unset ( $user_inc );
+unset ( $includedir );
+unset ( $basedir );
+
+
+$PROGRAM_VERSION = "v1.0.4";
+$PROGRAM_DATE = "07 Jun 2006";
+$PROGRAM_NAME = "WebCalendar $PROGRAM_VERSION ($PROGRAM_DATE)";
+$PROGRAM_URL = "http://webcalendar.sourceforge.net/";
+
+$TROUBLE_URL = "docs/WebCalendar-SysAdmin.html#trouble";
+
+/**
+ * Prints a fatal error message to the user along with a link to the
+ * Troubleshooting section of the WebCalendar System Administrator's Guide.
+ *
+ * Execution is aborted.
+ *
+ * @param string $error The error message to display
+ *
+ * @internal We don't normally put functions in this file.  But, since this
+ *           file is included before some of the others, this function either
+ *           goes here or we repeat this code in multiple files.
+ */
+function die_miserable_death ( $error )
+{
+global $TROUBLE_URL;
+  echo "<html><head><title>WebCalendar: Fatal Error</title></head>\n" .
+    "<body><h2>WebCalendar Error</h2>\n" .
+    "<p>$error</p>\n<hr />" .
+    "<p><a href=\"$TROUBLE_URL\" target=\"_blank\">" .
+    "Troubleshooting Help</a></p></body></html>\n";
+  exit;
+}
+
+
+
+// Open settings file to read
+$settings = array ();
+$settings_file = dirname(__FILE__) . "/settings.php";
+//called from send_reminders.php
+if ( ! empty ( $includedir ) ) 
+  $fd = @fopen ( "$includedir/settings.php", "rb", true );
+else
+  $fd = @fopen ( "settings.php", "rb", true );
+if ( ! $fd )
+  $fd = @fopen ( "includes/settings.php", "rb", true );
+if ( ! $fd  && file_exists ( $settings_file ) )
+  $fd = @fopen ( $settings_file, "rb", true );
+if ( empty ( $fd ) ) {
+  // There is no settings.php file.
+  // Redirect user to install page if it exists.
+  if ( file_exists ( "install/index.php" ) ) {
+    Header ( "Location: install/index.php" );
+    exit;
+  } else {
+    die_miserable_death ( "Could not find settings.php file.<br />\n" .
+      "Please copy settings.php.orig to settings.php and modify for your " .
+      "site.\n" );
+  }
+}
+
+// We don't use fgets() since it seems to have problems with Mac-formatted
+// text files.  Instead, we read in the entire file, then split the lines
+// manually.
+$data = '';
+while ( ! feof ( $fd ) ) {
+  $data .= fgets ( $fd, 4096 );
+}
+fclose ( $fd );
+
+// Replace any combination of carriage return (\r) and new line (\n)
+// with a single new line.
+$data = preg_replace ( "/[\r\n]+/", "\n", $data );
+
+// Split the data into lines.
+$configLines = explode ( "\n", $data );
+
+for ( $n = 0; $n < count ( $configLines ); $n++ ) {
+  $buffer = $configLines[$n];
+  $buffer = trim ( $buffer, "\r\n " );
+  if ( preg_match ( "/^#/", $buffer ) )
+    continue;
+  if ( preg_match ( "/^<\?/", $buffer ) ) // start php code
+    continue;
+  if ( preg_match ( "/^\?>/", $buffer ) ) // end php code
+    continue;
+  if ( preg_match ( "/(\S+):\s*(\S+)/", $buffer, $matches ) ) {
+    $settings[$matches[1]] = $matches[2];
+    //echo "settings $matches[1] => $matches[2] <br>";
+  }
+}
+$configLines = $data = '';
+
+// Extract db settings into global vars
+$db_type = $settings['db_type'];
+$db_host = $settings['db_host'];
+$db_login = $settings['db_login'];
+$db_password = $settings['db_password'];
+$db_database = $settings['db_database'];
+$db_persistent = preg_match ( "/(1|yes|true|on)/i",
+  $settings['db_persistent'] ) ? '1' : '0';
+
+foreach ( array ( "db_type", "db_host", "db_login", "db_password" ) as $s ) {
+  if ( empty ( $settings[$s] ) ) {
+    die_miserable_death ( "Could not find <tt>$s</tt> defined in " .
+      "your <tt>settings.php</tt> file.\n" );
+  }
+}
+
+$readonly = preg_match ( "/(1|yes|true|on)/i",
+  $settings['readonly'] ) ? 'Y' : 'N';
+
+$single_user = "N";
+$single_user = preg_match ( "/(1|yes|true|on)/i",
+  $settings['single_user'] ) ? 'Y' : 'N';
+if ( $single_user == 'Y' )
+  $single_user_login = $settings['single_user_login'];
+
+if ( $single_user == 'Y' && empty ( $single_user_login ) ) {
+  die_miserable_death ( "You must define <tt>single_user_login</tt> in " .
+    "the settings.php file.\n" );
+}
+
+
+$use_http_auth = preg_match ( "/(1|yes|true|on)/i",
+  $settings['use_http_auth'] ) ? true : false;
+
+// Type of user authentication
+$user_inc = $settings['user_inc'];
+
+// We can add extra 'nonuser' calendars such as a corporate calendar,
+// holiday calendar, departmental calendar, etc.  We need a unique prefix
+// for these calendars as not to get mixed up with real logins.  This prefix
+// should be a Maximum of 5 characters and should NOT change once set!
+$NONUSER_PREFIX = '_NUC_';
+
+// Language options  The first is the name presented to users while
+// the second is the filename (without the ".txt") that must exist
+// in the translations subdirectory.
+$languages = array (
+  "Browser-defined" =>"none",
+  "English" =>"English-US",
+  "Basque" => "Basque",
+  "Bulgarian" => "Bulgarian",
+  "Catalan" => "Catalan",
+  "Chinese (Traditonal/Big5)" => "Chinese-Big5",
+  "Chinese (Simplified/GB2312)" => "Chinese-GB2312",
+  "Czech" => "Czech",
+  "Danish" => "Danish",
+  "Dutch" =>"Dutch",
+  "Estonian" => "Estonian",
+  "Finnish" =>"Finnish",
+  "French" =>"French",
+  "Galician" => "Galician",
+  "German" =>"German",
+  "Greek" =>"Greek",
+  "Holo (Taiwanese)" => "Holo-Big5",
+  "Hungarian" =>"Hungarian",
+  "Icelandic" => "Icelandic",
+  "Italian" => "Italian",
+  "Japanese(SHIFT JIS)" => "Japanese",
+  "Japanese(EUC-JP)" => "Japanese-eucjp",
+  "Japanese(UTF-8)" => "Japanese-utf8",
+  "Korean" =>"Korean",
+  "Norwegian" => "Norwegian",
+  "Polish" => "Polish",
+  "Portuguese" =>"Portuguese",
+  "Portuguese/Brazil" => "Portuguese_BR",
+  "Romanian" => "Romanian",
+  "Russian" => "Russian",
+  "Spanish" =>"Spanish",
+  "Swedish" =>"Swedish",
+  "Turkish" =>"Turkish",
+  "Welsh" =>"Welsh"
+  // add new languages here!  (don't forget to add a comma at the end of
+  // last line above.)
+);
+
+// If the user sets "Browser-defined" as their language setting, then
+// use the $HTTP_ACCEPT_LANGUAGE settings to determine the language.
+// The array below translates browser language abbreviations into
+// our available language files.
+// NOTE: These should all be lowercase on the left side even though
+// the proper listing is like "en-US"!
+// Not sure what the abbreviation is?  Check out the following URL:
+// http://www.geocities.com/click2speak/languages.html
+$browser_languages = array (
+  "eu" => "Basque",
+  "bg" => "Bulgarian",
+  "ca" => "Catalan",
+  "zh" => "Chinese-GB2312",    // Simplified Chinese
+  "zh-cn" => "Chinese-GB2312",
+  "zh-tw" => "Chinese-Big5",   // Traditional Chinese
+  "cs" => "Czech",
+  "en" => "English-US",
+  "en-us" => "English-US",
+  "en-gb" => "English-US",
+  "da" => "Danish",
+  "nl" =>"Dutch",
+  "ee" => "Estonian",
+  "fi" =>"Finnish",
+  "fr" =>"French",
+  "fr-ch" =>"French", // French/Swiss
+  "fr-ca" =>"French", // French/Canada
+  "gl" => "Galician",
+  "de" =>"German",
+  "de-at" =>"German", // German/Austria
+  "de-ch" =>"German", // German/Switzerland
+  "de-de" =>"German", // German/German
+  "el" =>"Greek", // German/German
+  "hu" => "Hungarian",
+  "zh-min-nan-tw" => "Holo-Big5",
+  "is" => "Icelandic",
+  "it" => "Italian",
+  "it-ch" => "Italian", // Italian/Switzerland
+  "ja" => "Japanese",
+  "ko" =>"Korean",
+  "no" => "Norwegian",
+  "pl" => "Polish",
+  "pt" =>"Portuguese",
+  "pt-br" => "Portuguese_BR", // Portuguese/Brazil
+  "ro" =>"Romanian",
+  "ru" =>"Russian",
+  "es" =>"Spanish",
+  "sv" =>"Swedish",
+  "tr" =>"Turkish",
+  "cy" => "Welsh"
+);
+
+// The following comments will be picked up by update_translation.pl so
+// translators will be aware that they also need to translate language names.
+//
+// translate("English")
+// translate("Basque")
+// translate("Bulgarian")
+// translate("Catalan")
+// translate("Chinese (Traditonal/Big5)")
+// translate("Chinese (Simplified/GB2312)")
+// translate("Czech")
+// translate("Danish")
+// translate("Dutch")
+// translate("Estonian")
+// translate("Finnish")
+// translate("French")
+// translate("Galician")
+// translate("German")
+// translate("Greek")
+// translate("Holo (Taiwanese)")
+// translate("Hungarian")
+// translate("Icelandic")
+// translate("Italian")
+// translate("Japanese")
+// translate("Korean")
+// translate("Norwegian")
+// translate("Polish")
+// translate("Portuguese")
+// translate("Portuguese/Brazil")
+// translate("Romanian")
+// translate("Russian")
+// translate("Spanish")
+// translate("Swedish")
+// translate("Turkish")
+// translate("Welsh")
+
+if ( $single_user != "Y" )
+  $single_user_login = "";
+
+// Make sure magic quotes is enabled, since this app requires it.
+if ( get_magic_quotes_gpc () == 0 ) {
+  ob_start ();
+  phpinfo ();
+  $val = ob_get_contents ();
+  ob_end_clean ();
+  $loc = '';
+  if ( preg_match ( "/>([^<>]*php.ini)</", $val, $matches ) ) {
+    $loc = "Please edit the following file and restart your server:" .
+      "<br /><br />\n" .
+      "<blockquote>\n<tt>" . $matches[1] . "</tt>\n</blockquote>\n";
+  }
+  die_miserable_death ( "You must reconfigure your <tt>php.ini</tt> file to " .
+    "have <span style=\"font-weight:bold;\">magic_quotes_gpc</span> set " .
+    " to <span style=\"font-weight:bold;\">ON</span>.<br /><br />\n" .
+    $loc );
+}
+
+?>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/connect.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/connect.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/connect.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,257 @@
+<?php
+if ( empty ( $PHP_SELF ) && ! empty ( $_SERVER ) &&
+  ! empty ( $_SERVER['PHP_SELF'] ) ) {
+  $PHP_SELF = $_SERVER['PHP_SELF'];
+}
+if ( ! empty ( $PHP_SELF ) && preg_match ( "/\/includes\//", $PHP_SELF ) ) {
+    die ( "You can't access this file directly!" );
+}
+
+// db settings are in config.php
+
+// Establish a database connection.
+// This may have happened in validate.php, depending on settings.
+// If not, do it now.
+if ( empty ( $c ) ) {
+  $c = dbi_connect ( $db_host, $db_login, $db_password, $db_database );
+  if ( ! $c ) {
+    die_miserable_death (
+      "Error connecting to database:<blockquote>" .
+      dbi_error () . "</blockquote>\n" );
+  }
+  // Do a sanity check on the database, making sure we can
+  // at least access the webcal_config table.
+  if ( function_exists ( "doDbSanityCheck" ) ) {
+    doDbSanityCheck ();
+  }
+}
+
+// If we are in single user mode, make sure that the login selected is
+// a valid login.
+if ( $single_user == 'Y' ) {
+  if ( empty ( $single_user_login ) ) {
+    die_miserable_death ( "You have not defined <tt>single_user_login</tt> in " .
+      "<tt>includes/settings.php</tt>" );
+  }
+  $res = dbi_query ( "SELECT COUNT(*) FROM webcal_user " .
+    "WHERE cal_login = '$single_user_login'" );
+  if ( ! $res ) {
+    echo "Database error: " . dbi_error (); exit;
+  }
+  $row = dbi_fetch_row ( $res );
+  if ( $row[0] == 0 ) {
+    // User specified as single_user_login does not exist
+    if ( ! dbi_query ( "INSERT INTO webcal_user ( cal_login, " .
+      "cal_passwd, cal_is_admin ) VALUES ( '$single_user_login', " .
+       "'" . md5($single_user_login) . "', 'Y' )" ) ) {
+      die_miserable_death ( "User <tt>$single_user_login</tt> does not " .
+        "exist in <tt>webcal_user</tt> table and was not able to add " .
+        "it for you:<br /><blockquote>" .
+        dbi_error () . "</blockquote>" );
+    }
+    // User was added... should we tell them?
+  }
+  dbi_free_result ( $res );
+}
+
+
+// global settings have not been loaded yet, so check for public_access now
+$res = dbi_query ( "SELECT cal_value FROM webcal_config " .
+  "WHERE cal_setting = 'public_access'" );
+$pub_acc_enabled = false;
+if ( $res ) {
+  if ( $row = dbi_fetch_row ( $res ) ) {
+    if ( $row[0] == "Y" )
+      $pub_acc_enabled = true;
+  }
+  dbi_free_result ( $res );
+}
+if ( $pub_acc_enabled ) {
+  $res = dbi_query ( "SELECT cal_value FROM webcal_config " .
+    "WHERE cal_setting = 'public_access_can_add'" );
+  if ( $res ) {
+    if ( $row = dbi_fetch_row ( $res ) ) {
+      $public_access_can_add = $row[0];
+    }
+    dbi_free_result ( $res );
+  }
+}
+
+// Debugging stuff :-)
+//echo "pub_acc_enabled = " . ( $pub_acc_enabled ? "true" : "false" ) . " <br />";
+//echo "session_not_found = " . ( $session_not_found ? "true" : "false" ) . " <br />";
+//echo "use_http_auth = " . ( $use_http_auth ? "true" : "false" ) . " <br />";
+//echo "PHP_AUTH_USER = $PHP_AUTH_USER <br />";
+//echo "login = $login <br />";
+
+
+if ( empty ( $PHP_SELF ) )
+  $PHP_SELF = $_SERVER["PHP_SELF"];
+
+if ( empty ( $login_url ) )
+  $login_url = "login.php";
+if ( strstr ( $login_url, "?" ) )
+  $login_url .= "&";
+else
+  $login_url .= "?";
+if ( ! empty ( $login_return_path ) )
+  $login_url .= "return_path=$login_return_path";
+ 
+
+if ( empty ( $session_not_found ) )
+  $session_not_found = false;
+
+if ( $pub_acc_enabled && ! empty ( $session_not_found ) ) {
+  $login = "__public__";
+  $is_admin =  false;
+  $lastname = "";
+  $firstname = "";
+  $fullname = "Public Access"; // Will be translated after translation is loaded
+  $user_email = "";
+} else if ( ! $pub_acc_enabled && $session_not_found && ! $use_http_auth ) {
+  do_redirect ( $login_url );
+  exit;
+}
+
+if ( empty ( $login ) && $use_http_auth ) {
+  if ( strstr ( $PHP_SELF, "login.php" ) ) {
+    // ignore since login.php will redirect to index.php
+  } else {
+    send_http_login ();
+  }
+} else if ( ! empty ( $login ) ) {
+  // they are already logged in ($login is set in validate.php)
+  if ( strstr ( $PHP_SELF, "login.php" ) ) {
+    // ignore since login.php will redirect to index.php
+  } else if ( $login == "__public__" ) {
+    $is_admin =  false;
+    $lastname = "";
+    $firstname = "";
+    $fullname = "Public Access";
+    $user_email = "";
+  } else {
+    user_load_variables ( $login, "login_" );
+    if ( ! empty ( $login_login ) ) {
+      $is_admin =  ( $login_is_admin == "Y" ? true : false );
+      $lastname = $login_lastname;
+      $firstname = $login_firstname;
+      $fullname = $login_fullname;
+      $user_email = $login_email;
+    } else {
+      // Invalid login
+      if ( $use_http_auth ) {
+        send_http_login ();
+      } else {
+        // This shouldn't happen since login should be validated in validate.php
+        // If it does happen, it means we received an invalid login cookie.
+        //echo "Error getting user info for login \"$login\".";
+        do_redirect ( $login_url . "&error=Invalid+session+found." );
+      }
+    }
+  }
+}
+//else if ( ! $single_user ) {
+//  echo "Error(3)! no login info found: " . dbi_error () . "<br /><span style=\"font-weight:bold;\">SQL:</span> $sql";
+//  exit;
+//}
+
+// If they are accessing using the public login, restrict them from using
+// certain pages.
+$not_auth = false;
+if ( ! empty ( $login ) && $login == "__public__" ) {
+  if ( strstr ( $PHP_SELF, "views.php" ) ||
+    strstr ( $PHP_SELF, "views_edit_handler.php" ) ||
+    strstr ( $PHP_SELF, "category.php" ) ||
+    strstr ( $PHP_SELF, "category_handler.php" ) ||
+    strstr ( $PHP_SELF, "activity_log.php" ) ||
+    strstr ( $PHP_SELF, "admin.php" ) ||
+    strstr ( $PHP_SELF, "adminhome.php" ) ||
+    strstr ( $PHP_SELF, "admin_handler.php" ) ||
+    strstr ( $PHP_SELF, "groups.php" ) ||
+    strstr ( $PHP_SELF, "group_edit_handler.php" ) ||
+    strstr ( $PHP_SELF, "pref.php" ) ||
+    strstr ( $PHP_SELF, "pref_handler.php" ) ||
+    strstr ( $PHP_SELF, "edit_user.php" ) ||
+    strstr ( $PHP_SELF, "edit_user_handler.php" ) ||
+    strstr ( $PHP_SELF, "approve_entry.php" ) ||
+    strstr ( $PHP_SELF, "reject_entry.php" ) ||
+    strstr ( $PHP_SELF, "del_entry.php" ) ||
+    strstr ( $PHP_SELF, "set_entry_cat.php" ) ||
+    strstr ( $PHP_SELF, "list_unapproved.php" ) ||
+    strstr ( $PHP_SELF, "layers.php" ) ||
+    strstr ( $PHP_SELF, "layer_toggle.php" ) ||
+    strstr ( $PHP_SELF, "import.php" ) ||
+    strstr ( $PHP_SELF, "import_handler.php" ) ||
+    strstr ( $PHP_SELF, "edit_template.php" ) ) {
+    $not_auth = true;
+  }
+  if ( $public_access_can_add != 'Y' ) { // do not allow add
+    if ( strstr ( $PHP_SELF, "edit_entry.php" ) ||
+      strstr ( $PHP_SELF, "edit_entry_handler.php" ) ) {
+      $not_auth = true;
+    }
+  }
+}
+
+if ( empty ( $is_admin ) || ! $is_admin ) {
+  if ( strstr ( $PHP_SELF, "admin.php" ) ||
+    strstr ( $PHP_SELF, "admin_handler.php" ) ||
+    strstr ( $PHP_SELF, "groups.php" ) ||
+    strstr ( $PHP_SELF, "group_edit.php" ) ||
+    strstr ( $PHP_SELF, "group_edit_handler.php" ) ||
+    strstr ( $PHP_SELF, "edit_template.php" ) ||
+    strstr ( $PHP_SELF, "activity_log.php" ) ) {
+    $not_auth = true;
+  }
+}
+
+// restrict access if calendar is read-only
+if ( $readonly == "Y" ) {
+  if ( strstr ( $PHP_SELF, "activity_log.php" ) ||
+    strstr ( $PHP_SELF, "adminhome.php" ) ||
+    strstr ( $PHP_SELF, "admin.php" ) ||
+    strstr ( $PHP_SELF, "approve_entry.php" ) ||
+    strstr ( $PHP_SELF, "category_handler.php" ) ||
+    strstr ( $PHP_SELF, "category.php" ) ||
+    strstr ( $PHP_SELF, "del_entry.php" ) ||
+    strstr ( $PHP_SELF, "edit_report_handler.php" ) ||
+    strstr ( $PHP_SELF, "edit_report.php" ) ||
+    strstr ( $PHP_SELF, "edit_template.php" ) ||
+    strstr ( $PHP_SELF, "edit_user_handler.php" ) ||
+    strstr ( $PHP_SELF, "edit_user.php" ) ||
+    strstr ( $PHP_SELF, "group_edit_handler.php" ) ||
+    strstr ( $PHP_SELF, "groups.php" ) ||
+    strstr ( $PHP_SELF, "import_handler.php" ) ||
+    strstr ( $PHP_SELF, "import_handler.php" ) ||
+    strstr ( $PHP_SELF, "import.php" ) ||
+    strstr ( $PHP_SELF, "layers.php" ) ||
+    strstr ( $PHP_SELF, "layer_toggle.php" ) ||
+    strstr ( $PHP_SELF, "list_unapproved.php" ) ||
+    strstr ( $PHP_SELF, "pref_handler.php" ) ||
+    strstr ( $PHP_SELF, "pref.php" ) ||
+    strstr ( $PHP_SELF, "pref_handler.php" ) ||
+    strstr ( $PHP_SELF, "purge.php" ) ||
+    strstr ( $PHP_SELF, "reject_entry.php" ) ||
+    strstr ( $PHP_SELF, "set_entry_cat.php" ) ||
+    strstr ( $PHP_SELF, "users.php" ) ||
+    strstr ( $PHP_SELF, "views_edit_handler.php" ) ||
+    strstr ( $PHP_SELF, "views.php" ) ) {
+    $not_auth = true;
+  }
+}
+
+// We can't call translate() here because translate.php gets loaded
+// after this include file :-(
+// So, instead of an error message that may be in the wrong language,
+// just redirect to some other page.
+if ( $not_auth ) {
+  /*
+  echo "<html>\n<head>\n<title>" . translate($application_name) . " " .
+    translate("Error") .  "</title>\n</head>\n<body>\n";
+  echo "<h2>" . translate ( "Error" ) . "</h2>\n" .
+    translate ( "You are not authorized" );
+  */
+  do_redirect ( "week.php" );
+}
+
+?>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/dbtable.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/dbtable.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/dbtable.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,500 @@
+<?php
+if ( empty ( $PHP_SELF ) && ! empty ( $_SERVER ) &&
+  ! empty ( $_SERVER['PHP_SELF'] ) ) {
+  $PHP_SELF = $_SERVER['PHP_SELF'];
+}
+if ( ! empty ( $PHP_SELF ) && preg_match ( "/\/includes\//", $PHP_SELF ) ) {
+    die ( "You can't access this file directly!" );
+}
+
+// This file contains some convenient functions for editing rows
+// in a table.
+// You need to define the tables (typically this is done in tables.php).
+
+// $tablear - array that defines table (see tables.php)
+// $fieldname - name of field
+function dbtable_get_field_index ( $tablear, $fieldname ) {
+  global $error;
+  for ( $j = 0; $j < count ( $tablear ); $j++ ) {
+    if ( $tablear[$j]["name"] == $fieldname ) {
+      //echo "found $fieldname $j<br />";
+      return $j;
+    }
+  }
+  $error = "dbtable_get_field_index: Invalid fieldname \"$fieldname\".";
+  return -1;
+}
+
+
+// Create a table for editing a database table entry
+// $tablear - array that defines table (see tables.php)
+// $valuesar - array of current values
+// $action - URL to post form to (or "" for display-only)
+// $actionlabel - Value to put on submit form ("Save", etc.)
+// $hidden - array of hidden form variables (name1,value1,name2,value2,...)
+function dbtable_to_html ( $tablear, $valuesar, $action="", $formname="",
+  $actionlabel="", $hidden="" ) {
+  global $CELLBG;
+  $ret = "<table style=\"border-width:0px;\" cellspacing=\"0\" cellpadding=\"0\">" .
+    "<tr><td style=\"background-color:#000000;\">" .
+    "<table style=\"border-width:0px; width:100%;\" cellspacing=\"1\" cellpadding=\"2\">" .
+    "<tr><td style=\"width:100%; background-color:$CELLBG;\">" .
+    "<table style=\"border-width:0px; width:100%;\">\n";
+  if ( ! is_array ( $tablear ) ) {
+    return "Error: dbtable_to_html parameter 1 is not an array!\n<br />\n";
+  }
+  if ( $action != "" ) {
+    $ret .= "<form action=\"$action\" method=\"post\"";
+    if ( $formname != "" )
+      $ret .= " name=\"$formname\"";
+    $ret .= ">";
+    if ( is_array ( $hidden ) ) {
+      for ( $i = 0; $i < count ( $hidden ); $i += 2 ) {
+        $ret .= "<input type=\"hidden\" name=\"" . $hidden[$i] .
+          "\" value=\"" . $hidden[$i+1] . "\" />";
+      }
+    }
+  }
+  for ( $i = 0; $i < count ( $tablear ); $i++ ) {
+    if ( ! empty ( $tablear[$i]["hide"] ) )
+      continue;
+    if ( ! empty ( $action ) && ! empty ( $tablear[$i]["calculated"] ) )
+      continue;
+    $ret .= "<tr><td style=\"vertical-align:top;\">";
+    if ( ! empty ( $tablear[$i]["prompt"] ) ) {
+      $ret .= "<b";
+      if ( ! empty ( $tablear[$i]["tooltip"] ) )
+        $ret .= " class=\"tooltip\" title=\"" .  $tablear[$i]["tooltip"] . "\"";
+      $ret .= ">" . $tablear[$i]["prompt"] . ":</b></td>\n";
+    } else {
+      $ret .= " </td>";
+    }
+    $ret .= "<td style=\"vertical-align:top;\">";
+    if ( empty ( $tablear[$i]["noneditable"] ) && ! empty ( $action ) ) {
+      if ( $tablear[$i]["type"] == "text" || 
+        $tablear[$i]["type"] == "int" || $tablear[$i]["type"] == "float" ) {
+        $ret .= "<input type=\"text\" name=\"" . $tablear[$i]["name"] .
+          "\"";
+        if ( ! empty ( $tablear[$i]["maxlength"] ) )
+          $ret .= " maxlength=\"" .  $tablear[$i]["maxlength"] . "\"";
+        if ( ! empty ( $tablear[$i]["length"] ) )
+        $ret .= " size=\"" . $tablear[$i]["length"] . "\"";
+        if ( ! empty ( $valuesar[$i] ) )
+          $ret .= " value=\"" . htmlspecialchars ( $valuesar[$i] ) . "\"";
+        $ret .= " />";
+      } else if ( $tablear[$i]["type"] == "boolean" ) {
+        $ret .= "<input type=\"radio\" value=\"Y\" name=\"" . $tablear[$i]["name"] . "\"";
+        if ( $valuesar[$i] == "Y" )
+          $ret .= " checked=\"checked\"";
+        $ret .= ">" . translate("Yes") . "   ";
+        $ret .= "<input type=\"radio\" value=\"N\" name=\"" . $tablear[$i]["name"] . "\"";
+        if ( $valuesar[$i] != "Y" )
+          $ret .= " checked=\"checked\"";
+        $ret .= ">" . translate("No");
+      } else if ( $tablear[$i]["type"] == "date" ) {
+        $ret .= date_selection_html ( $tablear[$i]["name"], $valuesar[$i] );
+      } else if ( $tablear[$i]["type"] == "dbdate" ) {
+        // '2002-12-31'
+        $y = substr ( $valuesar[$i], 0, 4 );
+        $m = substr ( $valuesar[$i], 5, 2 );
+        $d = substr ( $valuesar[$i], 8, 2 );
+        $date = sprintf ( "%04d%02d%02d", $y, $m, $d );
+        $ret .= date_selection_html ( $tablear[$i]["name"], $date );
+      } else {
+        $ret .= "(type " . $tablear[$i]["type"] . " not supported)";
+      }
+    } else {
+      if ( ! empty ( $valuesar[$i] ) ) {
+        if ( $tablear[$i]["type"] == "text" ||
+          $tablear[$i]["type"] == "int" || $tablear[$i]["type"] == "float" ) {
+          $ret .= htmlentities ( $valuesar[$i] );
+        } else if ( $tablear[$i]["type"] == "boolean" ) {
+          if ( $valuesar[$i] == "Y" || empty ( $valuesar[$i] ) )
+            $ret .= translate("Yes");
+          else
+            $ret .= translate("No");
+        } else if ( $tablear[$i]["type"] == "date" ) {
+          $ret .= date_to_str ( $valuesar[$i] );
+        } else if ( $tablear[$i]["type"] == "dbdate" ) {
+          $y = substr ( $valuesar[$i], 0, 4 );
+          $m = substr ( $valuesar[$i], 5, 2 );
+          $d = substr ( $valuesar[$i], 8, 2 );
+          $date = sprintf ( "%04d%02d%02d", $y, $m, $d );
+          $ret .= date_to_str ( $date );
+        } else {
+          $ret .= "(type " . $tablear[$i]["type"] . " not supported)";
+        }
+      }
+    }
+    $ret .= "</td></tr>\n";
+  }
+  if ( ! empty ( $actionlabel ) )
+    $ret .= "<tr><td colspan=\"2\" style=\"text-align:center;\">\n" . 
+    	"<input type=\"submit\" value=\"" . htmlspecialchars ( $actionlabel ) . "\" />" . 
+	"</td></tr></form>\n";
+  $ret .= "</table>\n</td></tr></table>\n</td></tr></table>\n";
+
+  return $ret;
+}
+
+// Print rows of a table into an HTML table.  The first column will
+// include (optionally) href links to a page which can show further 
+// details.
+// $tablear - db table (defined in tables.php)
+// $tablename - db table name
+// $href - URL (%0 will be replaced with field field 0)
+// $fields - list of fields to include in table.
+// $keys - array of db key fields (field tagged with "iskey" => 1)
+// $order - SQL order text
+function dbtable_html_list ( $tablear, $tablename, $href, $fields,
+  $keys, $order ) {
+  global $THBG, $THFG, $CELLBG;
+  if ( ! is_array ( $tablear ) )
+    return "Error: dbtable_to_html_list parameter 1 is not an array!\n<br />\n";
+  if ( ! is_array ( $fields ) )
+    return "Error: dbtable_to_html_list parameter 2 is not an array!\n<br />\n";
+  if ( ! is_array ( $keys ) )
+    return "Error: dbtable_to_html_list parameter 3 is not an array!\n<br />\n";
+  $ret = "<table style=\"border-width:0px;\" cellspacing=\"0\" cellpadding=\"0\">" .
+    "<tr><td style=\"background-color:#000000;\">" .
+    "<table style=\"border-width:0px; width:100%;\" cellspacing=\"1\" cellpadding=\"2\">" .
+    "<tr><td style=\"width:100%; background-color:$CELLBG;\">" .
+    "<table style=\"border-width:0px; width:100%;\">\n";
+  // header
+  $ret .= "<tr>";
+  for ( $i = 0; $i < count ( $fields ); $i++ ) {
+    $ind = dbtable_get_field_index ( $tablear, $fields[$i] );
+/*
+    if ( $ind < 0 )
+      echo "Error: dbtable_html_list invalid fieldname \"$fields[$i]\" $i\n"; exit;
+*/
+    if ( empty ( $tablear[$ind]["hide"] ) )
+      $ret .= "<th style=\"background-color:$THBG; color:$THFG;\">" .
+        $tablear[$ind]["prompt"] . "</th>";
+  }
+  $ret .= "</tr>\n";
+  $sql = "SELECT " . $fields[0];
+  for ( $i = 1; $i < count ( $fields ); $i++ ) {
+    $sql .= ", " . $fields[$i];
+  }
+  $sql .= " FROM " . $tablename . " ";
+  if ( is_array ( $keys ) && count ( $keys ) > 0 ) {
+    $sql .= "WHERE ";
+    $first = 1;
+    for ( $i = 0; $i < count ( $tablear ); $i++ ) {
+      if ( ! empty ( $tablear[$i]["iskey"] ) ) {
+        if ( empty ( $keys[$tablear[$i]["name"]] ) ) {
+          //echo "Error: key value for " . $tablear[$i]["name"] . " not set.\n";
+          //exit;
+        } else {
+          if ( $first )
+            $first = 0;
+          else
+            $sql .= " AND ";
+          $sql .= $tablear[$i]["name"] . " = " ;
+          if ( $tablear[$i]["type"] == "int" ||
+            $tablear[$i]["type"] == "float" || $tablear[$i]["type"] == "date" )
+            $sql .= $keys[$tablear[$i]["name"]];
+          else
+            $sql .= "'" . $keys[$tablear[$i]["name"]] . "'";
+        }
+      }
+    }
+  }
+  if ( ! empty ( $order ) )
+    $sql .= " ORDER BY " . $order;
+  //echo "SQL: $sql<br />\n";
+  $res = dbi_query ( $sql );
+  if ( $res ) {
+    while ( $row = dbi_fetch_row ( $res ) ) {
+      $ret .= "<tr>";
+      $first_href = 1;
+      $first = 1;
+      for ( $i = 0; $i < count ( $fields ); $i++ ) {
+        // check data type (date)
+        $ind = dbtable_get_field_index ( $tablear, $fields[$i] );
+        if ( empty ( $tablear[$ind]["hide"] ) ) {
+          $ret .= "<td style=\"background-color:$CELLBG; vertical-align:top;\">";
+          if ( $tablear[$ind]["type"] == "date" )
+            $val = date_to_str ( $row[$i], "", 1, 1 );
+          else if ( $tablear[$ind]["type"] == "dbdate" ) {
+            $y = substr ( $row[$i], 0, 4 );
+            $m = substr ( $row[$i], 5, 2 );
+            $d = substr ( $row[$i], 8, 2 );
+            $date = sprintf ( "%04d%02d%02d", $y, $m, $d );
+            $val = date_to_str ( $date, "", 1, 1 );
+          } else
+            $val = htmlentities ( $row[$i] );
+          if ( $first_href && ! empty ( $href ) ) {
+            $first_href = 0;
+            $url = $href;
+            for ( $j = count ( $fields ) - 1; $j >= 0; $j-- ) {
+              $url = str_replace ( "%$j", $row[$j], $url );
+            }
+            $ret .= "<a href=\"$url\">" . $val . "</a>";
+          } else {
+            $ret .= $val;
+          }
+          $ret .= "</td>";
+        }
+      }
+      $ret .= "</tr>\n";
+    }
+  } else {
+    echo translate("Database error") . ": " . dbi_error (); exit;
+  }
+  $ret .= "</table>\n</td></tr></table>\n</td></tr></table>\n";
+  return $ret;
+}
+
+// Load a single row of a db table
+// $tablear - db table (defined in tables.php)
+// $tablename - db table name
+// $keys - array of db key fields (field tagged with "iskey" => 1)
+function dbtable_load ( $tablear, $tablename, $keys ) {
+  $ret = false;
+  $sql = "SELECT ";
+  if ( ! is_array ( $tablear ) ) {
+    echo "Error: dbtable_load parameter 1 is not an array!<br />\n";
+    exit;
+  }
+  if ( ! is_array ( $keys ) ) {
+    echo "Error: dbtable_load parameter 3 is not an array!<br />\n";
+    exit;
+  }
+  $first = 1;
+  for ( $i = 0; $i < count ( $tablear ); $i++ ) {
+    if ( $first )
+      $first = 0;
+    else
+      $sql .= ", ";
+    if ( empty ( $tablear[$i]["name"] ) ) {
+      echo "Error: dbtable_load $tablename field $i does not define name.\n";
+      exit;
+    }
+    $sql .= $tablear[$i]["name"];
+  }
+  $sql .= " FROM " . $tablename . " WHERE ";
+  $first = 1;
+  for ( $i = 0; $i < count ( $tablear ); $i++ ) {
+    if ( ! empty ( $tablear[$i]["iskey"] ) ) {
+      if ( empty ( $keys[$tablear[$i]["name"]] ) ) {
+        //echo "Error: key value for " . $tablear[$i]["name"] . " not set.\n";
+        //exit;
+      } else {
+        if ( $first )
+          $first = 0;
+        else
+          $sql .= " AND ";
+        $sql .= $tablear[$i]["name"] . " = " ;
+        if ( $tablear[$i]["type"] == "int" ||
+          $tablear[$i]["type"] == "float" || $tablear[$i]["type"] == "date" )
+          $sql .= $keys[$tablear[$i]["name"]];
+        else
+          $sql .= "'" . $keys[$tablear[$i]["name"]] . "'";
+      }
+    }
+  }
+  //echo "SQL: $sql<br />\n";
+  $res = dbi_query ( $sql );
+  if ( $res ) {
+    if ( $row = dbi_fetch_row ( $res ) ) {
+      $ret = array ();
+      for ( $i = 0; $i < count ( $tablear ); $i++ ) {
+        $ret[$i] = $row[$i];
+      }
+    } else {
+      $ret = false; // not found
+    }
+    dbi_free_result ( $res );
+  } else {
+    echo translate("Database error") . ": " . dbi_error (); exit;
+  }
+  return $ret;
+}
+
+// Delete a single row of a db table
+// $tablear - db table (defined in tables.php)
+// $tablename - db table name
+// $keys - array of db key fields (field tagged with "iskey" => 1)
+function dbtable_delete ( $tablear, $tablename, $keys ) {
+  $ret = false;
+  if ( ! is_array ( $tablear ) ) {
+    echo "Error: dbtable_delete parameter 1 is not an array!<br />\n";
+    exit;
+  }
+  if ( ! is_array ( $keys ) ) {
+    echo "Error: dbtable_delete parameter 3 is not an array!<br />\n";
+    exit;
+  }
+  $sql = "DELETE FROM $tablename WHERE ";
+  $first = 1;
+  for ( $i = 0; $i < count ( $tablear ); $i++ ) {
+    if ( ! empty ( $tablear[$i]["iskey"] ) ) {
+      if ( empty ( $keys[$tablear[$i]["name"]] ) ) {
+        //echo "Error: key value for " . $tablear[$i]["name"] . " not set.\n";
+        //exit;
+        continue;
+      } else {
+        if ( $first )
+          $first = 0;
+        else
+          $sql .= " AND ";
+        $sql .= $tablear[$i]["name"] . " = " ;
+        if ( $tablear[$i]["type"] == "int" ||
+          $tablear[$i]["type"] == "float" || $tablear[$i]["type"] == "date" )
+          $sql .= $keys[$tablear[$i]["name"]];
+        else
+          $sql .= "'" . $keys[$tablear[$i]["name"]] . "'";
+      }
+    }
+  }
+  //echo "SQL: $sql<br />";
+  if ( ! dbi_query ( $sql ) ) {
+    echo translate("Database error") . ": " . dbi_error (); exit;
+  }
+  return $ret;
+}
+
+// Add a row into a table (SQL insert)
+// $tablear - db table (defined in tables.php)
+// $tablename - db table name
+// $valuesar - array of values
+function dbtable_add ( $tablear, $tablename, $valuesar ) {
+  global $error;
+  $ret = false;
+  $sql = "INSERT INTO " . $tablename . " (";
+  if ( ! is_array ( $tablear ) ) {
+    echo "Error: dbtable_add parameter 1 is not an array!<br />\n";
+    exit;
+  }
+  if ( ! is_array ( $valuesar ) ) {
+    echo "Error: dbtable_add parameter 3 is not an array!<br />\n";
+    exit;
+  }
+  $first = 1;
+  for ( $i = 0; $i < count ( $tablear ); $i++ ) {
+    if ( $first )
+      $first = 0;
+    else
+      $sql .= ", ";
+    if ( empty ( $tablear[$i]["name"] ) ) {
+      echo "Error: dbtable_load $tablename field $i does not define name.\n";
+      exit;
+    }
+    $sql .= $tablear[$i]["name"];
+  }
+  $sql .= " ) VALUES (";
+  $first = 1;
+  for ( $i = 0; $i < count ( $tablear ); $i++ ) {
+    if ( $first )
+      $first = 0;
+    else
+      $sql .= ", ";
+    if ( empty ( $valuesar[$i] ) )
+      $sql .= "NULL";
+    else if ( $tablear[$i]["type"] == "date" ||
+      $tablear[$i]["type"] == "int" )
+      $sql .= $valuesar[$i];
+    else
+      $sql .= "'" . $valuesar[$i] . "'";
+  }
+  $sql .= " )";
+  //echo "SQL: $sql<br />\n";
+  if ( ! dbi_query ( $sql ) ) {
+    // Shouldn't happen... complain if it does.
+    $error = translate("Database error") . ": " . dbi_error ();
+    return false;
+  }
+  return true;
+}
+
+// Update a row in a table (SQL update)
+// $tablear - db table (defined in tables.php)
+// $tablename - db table name
+// $valuesar - array of values
+function dbtable_update ( $tablear, $tablename, $valuesar ) {
+  global $error;
+  $sql = "UPDATE " . $tablename . " SET";
+  if ( ! is_array ( $tablear ) ) {
+    echo "Error: dbtable_update parameter 1 is not an array!<br />\n";
+    exit;
+  }
+  if ( ! is_array ( $valuesar ) ) {
+    echo "Error: dbtable_update parameter 3 is not an array!<br />\n";
+    exit;
+  }
+  $first = 1;
+  for ( $i = 0; $i < count ( $tablear ); $i++ ) {
+    if ( ! empty ( $tablear[$i]["iskey"] ) )
+      continue;
+    if ( $first )
+      $first = 0;
+    else
+      $sql .= ", ";
+    if ( empty ( $tablear[$i]["name"] ) ) {
+      echo "Error: dbtable_update $tablename field $i does not define name.\n";
+      exit;
+    }
+    $sql .= " " . $tablear[$i]["name"] . " = ";
+    if ( empty ( $valuesar[$i] ) ) {
+      $sql .= "NULL";
+    } else if ( $tablear[$i]["type"] == "int" || 
+      $tablear[$i]["type"] == "date" ) {
+      $sql .= $valuesar[$i];
+    } else
+      $sql .= "'" . $valuesar[$i] . "'";
+  }
+  $sql .= " WHERE";
+  $first = 1;
+  for ( $i = 0; $i < count ( $tablear ); $i++ ) {
+    if ( empty ( $tablear[$i]["iskey"] ) )
+      continue;
+    if ( $first )
+      $first = 0;
+    else
+      $sql .= " AND";
+    if ( empty ( $valuesar[$i] ) ) {
+      echo "Error: you must set field $i (" . $tablear[$i]["name"] .
+        ") by hand. Cannot be empty.";
+      exit;
+    }
+    $sql .= " " . $tablear[$i]["name"] . " = '" . $valuesar[$i] . "'";
+  }
+  //echo "SQL: $sql <P>\n";
+  if ( ! dbi_query ( $sql ) ) {
+    // Shouldn't happen... complain if it does.
+    $error = translate("Database error") . ": " . dbi_error ();
+    return false;
+  }
+  return true;
+}
+
+
+// Generate a new ID
+function dbtable_genid ( $tablename, $field ) {
+  $ret = 1;
+
+  $sql = "SELECT MAX(" . $field . ") FROM " . $tablename;
+  $res = dbi_query ( $sql );
+  if ( $res ) {
+    if ( $row = dbi_fetch_row ( $res ) ) {
+      $ret = $row[0] + 1;
+    }
+    dbi_free_result ( $res );
+  }
+  return $ret;
+}
+
+// Convert an array of db values (with index values 0,1,2,... into
+// an associative array (with index values of table column names).
+// $tablear - db table (defined in tables.php)
+// $valuesar - array of values
+function dbtable_build_name_index ( $tablear, $valuesar ) {
+  $ret = array ();
+  for ( $i = 0; $i < count ( $tablear ); $i++ ) {
+    $ret[$tablear[$i]["name"]] = $valuesar[$i];
+  }
+  return $ret;
+}
+?>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/functions.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/functions.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/functions.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,4856 @@
+<?php
+/**
+ * All of WebCalendar's functions
+ *
+ * @author Craig Knudsen <cknudsen at cknudsen.com>
+ * @copyright Craig Knudsen, <cknudsen at cknudsen.com>, http://www.k5n.us/cknudsen
+ * @license http://www.gnu.org/licenses/gpl.html GNU GPL
+ * @package WebCalendar
+ */
+
+if ( empty ( $PHP_SELF ) && ! empty ( $_SERVER ) &&
+  ! empty ( $_SERVER['PHP_SELF'] ) ) {
+  $PHP_SELF = $_SERVER['PHP_SELF'];
+}
+if ( ! empty ( $PHP_SELF ) && preg_match ( "/\/includes\//", $PHP_SELF ) ) {
+    die ( "You can't access this file directly!" );
+}
+
+/**#@+
+ * Used for activity log
+ * @global string
+ */
+$LOG_CREATE = "C";
+$LOG_APPROVE = "A";
+$LOG_REJECT = "X";
+$LOG_UPDATE = "U";
+$LOG_DELETE = "D";
+$LOG_NOTIFICATION = "N";
+$LOG_REMINDER = "R";
+/**#@-*/
+
+/**
+ * Number of seconds in a day
+ *
+ * @global int $ONE_DAY
+ */
+$ONE_DAY = 86400;
+
+/**
+ * Array containing the number of days in each month in a non-leap year
+ *
+ * @global array $days_per_month
+ */
+$days_per_month = array ( 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 );
+
+/**
+ * Array containing the number of days in each month in a leap year
+ *
+ * @global array $ldays_per_month
+ */
+$ldays_per_month = array ( 0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 );
+
+/**
+ * Array of global variables which are not allowed to by set via HTTP GET/POST
+ *
+ * This is a security precaution to prevent users from overriding any global
+ * variables
+ *
+ * @global array $noSet
+ */
+$noSet = array (
+  "is_admin" => 1,
+  "db_type" => 1,
+  "db_host" => 1,
+  "db_login" => 1,
+  "db_password" => 1,
+  "db_persistent" => 1,
+  "PROGRAM_NAME" => 1,
+  "PROGRAM_URL" => 1,
+  "readonly" => 1,
+  "single_user" => 1,
+  "single_user_login" => 1,
+  "use_http_auth" => 1,
+  "user_inc" => 1,
+  "includedir" => 1,
+  "NONUSER_PREFIX" => 1,
+  "languages" => 1,
+  "browser_languages" => 1,
+  "pub_acc_enabled" => 1,
+  "user_can_update_password" => 1,
+  "admin_can_add_user" => 1,
+  "admin_can_delete_user" => 1,
+);
+
+// This code is a temporary hack to make the application work when
+// register_globals is set to Off in php.ini (the default setting in
+// PHP 4.2.0 and after).
+if ( empty ( $HTTP_GET_VARS ) ) $HTTP_GET_VARS = $_GET;
+if ( ! empty ( $HTTP_GET_VARS ) ) {
+  while (list($key, $val) = @each($HTTP_GET_VARS)) {
+    // don't allow anything to have <script> in it...
+    if ( ! is_array ( $val ) ) {
+      if ( preg_match ( "/<\s*script/i", $val ) ) {
+        echo "Security violation!"; exit;
+      }
+    }
+    if ( $key == "login" ) {
+      if ( strstr ( $PHP_SELF, "login.php" ) ) {
+        //$GLOBALS[$key] = $val;
+        $GLOBALS[$key] = $val;
+      }
+    } else {
+      if ( empty ( $noSet[$key] ) ) {
+        $GLOBALS[$key] = $val;
+        //echo "XXX $key<br />\n";
+      }
+    }
+    //echo "GET var '$key' = '$val' <br />\n";
+  }
+  reset ( $HTTP_GET_VARS );
+}
+
+if ( empty ( $HTTP_POST_VARS ) ) $HTTP_POST_VARS = $_POST;
+if ( ! empty ( $HTTP_POST_VARS ) ) {
+  while (list($key, $val) = @each($HTTP_POST_VARS)) {
+    // don't allow anything to have <script> in it... except 'template'
+    if ( ! is_array ( $val ) && $key != 'template' ) {
+      if ( preg_match ( "/<\s*script/i", $val ) ) {
+        echo "Security violation!"; exit;
+      }
+    }
+    if ( empty ( $noSet[$key] ) ) {
+      $GLOBALS[$key] = $val;
+    }
+  }
+  reset ( $HTTP_POST_VARS );
+}
+//while (list($key, $val) = @each($HTTP_POST_FILES)) {
+//       $GLOBALS[$key] = $val;
+//}
+//while (list($key, $val) = @each($HTTP_SESSION_VARS)) {
+//       $GLOBALS[$key] = $val;
+//}
+if ( empty ( $HTTP_COOKIE_VARS ) ) $HTTP_COOKIE_VARS = $_COOKIE;
+if ( ! empty ( $HTTP_COOKIE_VARS ) ) {
+  while (list($key, $val) = @each($HTTP_COOKIE_VARS)) {
+    if ( empty ( $noSet[$key] ) && substr($key,0,12) == "webcalendar_" ) {
+      $GLOBALS[$key] = $val;
+    }
+    //echo "COOKIE var '$key' = '$val' <br />\n";
+  }
+  reset ( $HTTP_COOKIE_VARS );
+}
+
+// Don't allow a user to put "login=XXX" in the URL if they are not
+// coming from the login.php page.
+if ( empty ( $PHP_SELF ) && ! empty ( $_SERVER['PHP_SELF'] ) )
+  $PHP_SELF = $_SERVER['PHP_SELF']; // backward compatibility
+if ( empty ( $PHP_SELF ) )
+  $PHP_SELF = ''; // this happens when running send_reminders.php from CL
+if ( ! strstr ( $PHP_SELF, "login.php" ) && ! empty ( $GLOBALS["login"] ) ) {
+  $GLOBALS["login"] = "";
+}
+
+// Define an array to use to jumble up the key: $offsets
+// We define a unique key to scramble the cookie we generate.
+// We use the admin install password that the user set to make
+// the salt unique for each WebCalendar install.
+if ( ! empty ( $settings ) && ! empty ( $settings['install_password'] ) ) {
+  $salt = $settings['install_password'];
+} else {
+  $salt = md5 ( $db_login );
+}
+$salt_len = strlen ( $salt );
+
+if ( ! empty ( $db_password ) ) {
+  $salt2 = md5 ( $db_password );
+} else {
+  $salt2 = md5 ( "oogabooga" );
+}
+$salt2_len = strlen ( $salt2 );
+
+$offsets = array ();
+for ( $i = 0; $i < $salt_len || $i < $salt2_len; $i++ ) {
+  $offsets[$i] = 0;
+  if ( $i < $salt_len )
+    $offsets[$i] += ord ( substr ( $salt, $i, 1 ) );
+  if ( $i < $salt2_len )
+    $offsets[$i] += ord ( substr ( $salt2, $i, 1 ) );
+  $offsets[$i] %= 128;
+}
+/* debugging code...
+for ( $i = 0; $i < count ( $offsets ); $i++ ) {
+  echo "offset $i: $offsets[$i] <br />\n";
+}
+*/
+
+/*
+ * Functions start here.  All non-function code should be above this
+ *
+ * Note to developers:
+ *  Documentation is generated from the function comments below.
+ *  When adding/updating functions, please follow the following conventions
+ *  seen below.  Your cooperation in this matter is appreciated :-)
+ *
+ *  If you want your documentation to link to the db documentation,
+ *  just make sure you mention the db table name followed by "table"
+ *  on the same line.  Here's an example:
+ *    Retrieve preferences from the webcal_user_pref table.
+ *
+ */
+
+/**
+ * Gets the value resulting from an HTTP POST method.
+ * 
+ * <b>Note:</b> The return value will be affected by the value of
+ * <var>magic_quotes_gpc</var> in the php.ini file.
+ * 
+ * @param string $name Name used in the HTML form
+ *
+ * @return string The value used in the HTML form
+ *
+ * @see getGetValue
+ */
+function getPostValue ( $name ) {
+  global $HTTP_POST_VARS;
+
+  if ( isset ( $_POST ) && is_array ( $_POST ) && ! empty ( $_POST[$name] ) ) {
+	  $HTTP_POST_VARS[$name] = $_POST[$name];
+    return $_POST[$name];
+   } else if ( ! isset ( $HTTP_POST_VARS ) ) {
+    return null;
+  } else if ( ! isset ( $HTTP_POST_VARS[$name] ) ) {
+    return null;
+	}
+  return ( $HTTP_POST_VARS[$name] );
+}
+
+/**
+ * Gets the value resulting from an HTTP GET method.
+ *
+ * <b>Note:</b> The return value will be affected by the value of
+ * <var>magic_quotes_gpc</var> in the php.ini file.
+ *
+ * If you need to enforce a specific input format (such as numeric input), then
+ * use the {@link getValue()} function.
+ *
+ * @param string $name Name used in the HTML form or found in the URL
+ *
+ * @return string The value used in the HTML form (or URL)
+ *
+ * @see getPostValue
+ */
+function getGetValue ( $name ) {
+  global $HTTP_GET_VARS;
+
+  if ( isset ( $_GET ) && is_array ( $_GET ) && ! empty ( $_GET[$name] ) ) {
+	  $HTTP_GET_VARS[$name] = $_GET[$name];
+    return $_GET[$name];
+  } else if ( ! isset ( $HTTP_GET_VARS ) )  {
+    return null;
+   } else if ( ! isset ( $HTTP_GET_VARS[$name] ) ) {
+    return null;
+	}
+  return ( $HTTP_GET_VARS[$name] );
+}
+
+/**
+ * Gets the value resulting from either HTTP GET method or HTTP POST method.
+ *
+ * <b>Note:</b> The return value will be affected by the value of
+ * <var>magic_quotes_gpc</var> in the php.ini file.
+ *
+ * <b>Note:</b> If you need to get an integer value, yuou can use the
+ * getIntValue function.
+ *
+ * @param string $name   Name used in the HTML form or found in the URL
+ * @param string $format A regular expression format that the input must match.
+ *                       If the input does not match, an empty string is
+ *                       returned and a warning is sent to the browser.  If The
+ *                       <var>$fatal</var> parameter is true, then execution
+ *                       will also stop when the input does not match the
+ *                       format.
+ * @param bool   $fatal  Is it considered a fatal error requiring execution to
+ *                       stop if the value retrieved does not match the format
+ *                       regular expression?
+ *
+ * @return string The value used in the HTML form (or URL)
+ *
+ * @uses getGetValue
+ * @uses getPostValue
+ */
+function getValue ( $name, $format="", $fatal=false ) {
+  $val = getPostValue ( $name );
+  if ( ! isset ( $val ) )
+    $val = getGetValue ( $name );
+  // for older PHP versions...
+  if ( ! isset ( $val  ) && get_magic_quotes_gpc () == 1 &&
+    ! empty ( $GLOBALS[$name] ) )
+    $val = $GLOBALS[$name];
+  if ( ! isset ( $val  ) )
+    return "";
+  if ( ! empty ( $format ) && ! preg_match ( "/^" . $format . "$/", $val ) ) {
+    // does not match
+    if ( $fatal ) {
+      die_miserable_death ( "Fatal Error: Invalid data format for $name" );
+    }
+    // ignore value
+    return "";
+  }
+  return $val;
+}
+
+/**
+ * Gets an integer value resulting from an HTTP GET or HTTP POST method.
+ *
+ * <b>Note:</b> The return value will be affected by the value of
+ * <var>magic_quotes_gpc</var> in the php.ini file.
+ *
+ * @param string $name  Name used in the HTML form or found in the URL
+ * @param bool   $fatal Is it considered a fatal error requiring execution to
+ *                      stop if the value retrieved does not match the format
+ *                      regular expression?
+ *
+ * @return string The value used in the HTML form (or URL)
+ *
+ * @uses getValue
+ */
+function getIntValue ( $name, $fatal=false ) {
+  $val = getValue ( $name, "-?[0-9]+", $fatal );
+  return $val;
+}
+
+/**
+ * Loads default system settings (which can be updated via admin.php).
+ *
+ * System settings are stored in the webcal_config table.
+ *
+ * <b>Note:</b> If the setting for <var>server_url</var> is not set, the value
+ * will be calculated and stored in the database.
+ *
+ * @global string User's login name
+ * @global bool   Readonly
+ * @global string HTTP hostname
+ * @global int    Server's port number
+ * @global string Request string
+ * @global array  Server variables
+ */
+function load_global_settings () {
+  global $login, $readonly, $HTTP_HOST, $SERVER_PORT, $REQUEST_URI, $_SERVER;
+
+  // Note: when running from the command line (send_reminders.php),
+  // these variables are (obviously) not set.
+  // TODO: This type of checking should be moved to a central locationm
+  // like init.php.
+  if ( isset ( $_SERVER ) && is_array ( $_SERVER ) ) {
+    if ( empty ( $HTTP_HOST ) && isset ( $_SERVER["HTTP_POST"] ) )
+      $HTTP_HOST = $_SERVER["HTTP_HOST"];
+    if ( empty ( $SERVER_PORT ) && isset ( $_SERVER["SERVER_PORT"] ) )
+      $SERVER_PORT = $_SERVER["SERVER_PORT"];
+    if ( empty ( $REQUEST_URI ) && isset ( $_SERVER["REQUEST_URI"] ) )
+      $REQUEST_URI = $_SERVER["REQUEST_URI"];
+  }
+
+  $res = dbi_query ( "SELECT cal_setting, cal_value FROM webcal_config" );
+  if ( $res ) {
+    while ( $row = dbi_fetch_row ( $res ) ) {
+      $setting = $row[0];
+      $value = $row[1];
+      //echo "Setting '$setting' to '$value' <br />\n";
+      $GLOBALS[$setting] = $value;
+    }
+    dbi_free_result ( $res );
+  }
+
+  // If app name not set.... default to "Title".  This gets translated
+  // later since this function is typically called before translate.php
+  // is included.
+  // Note: We usually use translate($application_name) instead of
+  // translate("Title").
+  if ( empty ( $GLOBALS["application_name"] ) )
+    $GLOBALS["application_name"] = "Title";
+
+  // If $server_url not set, then calculate one for them, then store it
+  // in the database.
+  if ( empty ( $GLOBALS["server_url"] ) ) {
+    if ( ! empty ( $HTTP_HOST ) && ! empty ( $REQUEST_URI ) ) {
+      $ptr = strrpos ( $REQUEST_URI, "/" );
+      if ( $ptr > 0 ) {
+        $uri = substr ( $REQUEST_URI, 0, $ptr + 1 );
+        $server_url = "http://" . $HTTP_HOST;
+        if ( ! empty ( $SERVER_PORT ) && $SERVER_PORT != 80 )
+          $server_url .= ":" . $SERVER_PORT;
+        $server_url .= $uri;
+
+        dbi_query ( "INSERT INTO webcal_config ( cal_setting, cal_value ) ".
+          "VALUES ( 'server_url', '$server_url' )" );
+        $GLOBALS["server_url"] = $server_url;
+      }
+    }
+  }
+
+  // If no font settings, then set some
+  if ( empty ( $GLOBALS["FONTS"] ) ) {
+    if ( $GLOBALS["LANGUAGE"] == "Japanese" )
+      $GLOBALS["FONTS"] = "Osaka, Arial, Helvetica, sans-serif";
+    else
+      $GLOBALS["FONTS"] = "Arial, Helvetica, sans-serif";
+  }
+}
+
+/**
+ * Gets the list of active plugins.
+ *
+ * Should be called after {@link load_global_settings()} and {@link load_user_preferences()}.
+ *
+ * @internal cek: ignored since I am not sure this will ever be used...
+ *
+ * @return array Active plugins
+ *
+ * @ignore
+ */
+function get_plugin_list ( $include_disabled=false ) {
+  // first get list of available plugins
+  $sql = "SELECT cal_setting FROM webcal_config " .
+    "WHERE cal_setting LIKE '%.plugin_status'";
+  if ( ! $include_disabled )
+    $sql .= " AND cal_value = 'Y'";
+  $sql .= " ORDER BY cal_setting";
+  $res = dbi_query ( $sql );
+  $plugins = array ();
+  if ( $res ) {
+    while ( $row = dbi_fetch_row ( $res ) ) {
+      $e = explode ( ".", $row[0] );
+      if ( $e[0] != "" ) {
+        $plugins[] = $e[0];
+      }
+    }
+    dbi_free_result ( $res );
+  } else {
+    echo translate("Database error") . ": " . dbi_error (); exit;
+  }
+  if ( count ( $plugins ) == 0 ) {
+    $plugins[] = "webcalendar";
+  }
+  return $plugins;
+}
+
+/**
+ * Get plugins available to the current user.
+ *
+ * Do this by getting a list of all plugins that are not disabled by the
+ * administrator and make sure this user has not disabled any of them.
+ * 
+ * It's done this was so that when an admin adds a new plugin, it shows up on
+ * each users system automatically (until they disable it).
+ *
+ * @return array Plugins available to current user
+ *
+ * @ignore
+ */
+function get_user_plugin_list () {
+  $ret = array ();
+  $all_plugins = get_plugin_list ();
+  for ( $i = 0; $i < count ( $all_plugins ); $i++ ) {
+    if ( $GLOBALS[$all_plugins[$i] . ".disabled"] != "N" )
+      $ret[] = $all_plugins[$i];
+  }
+  return $ret;
+}
+
+/**
+ * Identify user's browser.
+ *
+ * Returned value will be one of:
+ * - "Mozilla/5" = Mozilla (open source Mozilla 5.0)
+ * - "Mozilla/[3,4]" = Netscape (3.X, 4.X)
+ * - "MSIE 4" = MSIE (4.X)
+ *
+ * @return string String identifying browser
+ *
+ * @ignore
+ */
+function get_web_browser () {
+  if ( ereg ( "MSIE [0-9]", getenv ( "HTTP_USER_AGENT" ) ) )
+    return "MSIE";
+  if ( ereg ( "Mozilla/[234]", getenv ( "HTTP_USER_AGENT" ) ) )
+    return "Netscape";
+  if ( ereg ( "Mozilla/[5678]", getenv ( "HTTP_USER_AGENT" ) ) )
+    return "Mozilla";
+  return "Unknown";
+}
+
+
+/**
+ * Logs a debug message.
+ *
+ * Generally, we do not leave calls to this function in the code.  It is used
+ * for debugging only.
+ *
+ * @param string $msg Text to be logged
+ */
+function do_debug ( $msg ) {
+  // log to /tmp/webcal-debug.log
+  //error_log ( date ( "Y-m-d H:i:s" ) .  "> $msg\n",
+  //  3, "/tmp/webcal-debug.log" );
+  //error_log ( date ( "Y-m-d H:i:s" ) .  "> $msg\n",
+  //  2, "sockieman:2000" );
+}
+
+/**
+ * Gets user's preferred view.
+ *
+ * The user's preferred view is stored in the $STARTVIEW global variable.  This
+ * is loaded from the user preferences (or system settings if there are no user
+ * prefererences.)
+ *
+ * @param string $indate Date to pass to preferred view in YYYYMMDD format
+ * @param string $args   Arguments to include in the URL (such as "user=joe")
+ *
+ * @return string URL of the user's preferred view
+ */
+function get_preferred_view ( $indate="", $args="" ) {
+  global $STARTVIEW, $thisdate;
+
+  $url = empty ( $STARTVIEW ) ? "month.php" : $STARTVIEW;
+  // We used to just store "month" in $STARTVIEW without the ".php"
+  // This is just to prevent users from getting a "404 not found" if
+  // they have not updated their preferences.
+  if ( $url == "month" || $url == "day" || $url == "week" || $url == "year" )
+    $url .= ".php";
+
+  $url = str_replace ( '&', '&', $url );
+  $url = str_replace ( '&', '&', $url );
+
+  $xdate = empty ( $indate ) ? $thisdate : $indate;
+  if ( ! empty ( $xdate ) ) {
+    if ( strstr ( $url, "?" ) )
+      $url .= '&' . "date=$xdate";
+    else
+      $url .= '?' . "date=$xdate";
+  }
+
+  if ( ! empty ( $args ) ) {
+    if ( strstr ( $url, "?" ) )
+      $url .= '&' . $args;
+    else
+      $url .= '?' . $args;
+  }
+
+  return $url;
+}
+
+/**
+ * Sends a redirect to the user's preferred view.
+ *
+ * The user's preferred view is stored in the $STARTVIEW global variable.  This
+ * is loaded from the user preferences (or system settings if there are no user
+ * prefererences.)
+ *
+ * @param string $indate Date to pass to preferred view in YYYYMMDD format
+ * @param string $args   Arguments to include in the URL (such as "user=joe")
+ */
+function send_to_preferred_view ( $indate="", $args="" ) {
+  $url = get_preferred_view ( $indate, $args );
+  do_redirect ( $url );
+}
+
+/** Sends a redirect to the specified page.
+ *
+ * The database connection is closed and execution terminates in this function.
+ *
+ * <b>Note:</b> MS IIS/PWS has a bug in which it does not allow us to send a
+ * cookie and a redirect in the same HTTP header.  When we detect that the web
+ * server is IIS, we accomplish the redirect using meta-refresh.  See the
+ * following for more info on the IIS bug:
+ *
+ * {@link http://www.faqts.com/knowledge_base/view.phtml/aid/9316/fid/4}
+ *
+ * @param string $url The page to redirect to.  In theory, this should be an
+ *                    absolute URL, but all browsers accept relative URLs (like
+ *                    "month.php").
+ *
+ * @global string   Type of webserver
+ * @global array    Server variables
+ * @global resource Database connection
+ */
+function do_redirect ( $url ) {
+  global $SERVER_SOFTWARE, $_SERVER, $c;
+
+  // Replace any '&' with '&' since we don't want that in the HTTP
+  // header.
+  $url = str_replace ( '&', '&', $url );
+
+  if ( empty ( $SERVER_SOFTWARE ) )
+    $SERVER_SOFTWARE = $_SERVER["SERVER_SOFTWARE"];
+  //echo "SERVER_SOFTWARE = $SERVER_SOFTWARE <br />\n"; exit;
+  if ( ( substr ( $SERVER_SOFTWARE, 0, 5 ) == "Micro" ) ||
+    ( substr ( $SERVER_SOFTWARE, 0, 3 ) == "WN/" ) ) {
+    echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE html
+    PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"
+    \"DTD/xhtml1-transitional.dtd\">
+<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\" lang=\"en\">
+<head>\n<title>Redirect</title>\n" .
+      "<meta http-equiv=\"refresh\" content=\"0; url=$url\" />\n</head>\n<body>\n" .
+      "Redirecting to.. <a href=\"" . $url . "\">here</a>.</body>\n</html>";
+  } else {
+    Header ( "Location: $url" );
+    //print "<javascript>window.location.href='index.php';</script>" ;
+    echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE html
+    PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"
+    \"DTD/xhtml1-transitional.dtd\">
+<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\" lang=\"en\">
+<head>\n<title>Redirect</title>\n</head>\n<body>\n" .
+      "Redirecting to aa... <a href=\"" . $url . "\">here</a>.</body>\n</html>";
+  }
+  dbi_close ( $c );
+  exit;
+}
+
+/**
+ * Sends an HTTP login request to the browser and stops execution.
+ */
+function send_http_login () {
+  global $lang_file, $application_name;
+
+  if ( strlen ( $lang_file ) ) {
+    Header ( "WWW-Authenticate: Basic realm=\"" . translate("Title") . "\"");
+    Header ( "HTTP/1.0 401 Unauthorized" );
+    echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE html
+    PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"
+    \"DTD/xhtml1-transitional.dtd\">
+<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\" lang=\"en\">
+<head>\n<title>Unauthorized</title>\n</head>\n<body>\n" .
+      "<h2>" . translate("Title") . "</h2>\n" .
+      translate("You are not authorized") .
+      "\n</body>\n</html>";
+  } else {
+    Header ( "WWW-Authenticate: Basic realm=\"WebCalendar\"");
+    Header ( "HTTP/1.0 401 Unauthorized" );
+    echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE html
+    PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"
+    \"DTD/xhtml1-transitional.dtd\">
+<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\" lang=\"en\">
+<head>\n<title>Unauthorized</title>\n</head>\n<body>\n" .
+      "<h2>WebCalendar</h2>\n" .
+      "You are not authorized" .
+      "\n</body>\n</html>";
+  }
+  exit;
+}
+
+/**
+ * Generates a cookie that saves the last calendar view.
+ *
+ * Cookie is based on the current <var>$REQUEST_URI</var>.
+ *
+ * We save this cookie so we can return to this same page after a user
+ * edits/deletes/etc an event.
+ *
+ * @global string Request string
+ */
+function remember_this_view () {
+  global $REQUEST_URI;
+  if ( empty ( $REQUEST_URI ) )
+    $REQUEST_URI = $_SERVER["REQUEST_URI"];
+
+  // do not use anything with friendly in the URI
+  if ( strstr ( $REQUEST_URI, "friendly=" ) )
+    return;
+
+  SetCookie ( "webcalendar_last_view", $REQUEST_URI );
+}
+
+/**
+ * Gets the last page stored using {@link remember_this_view()}.
+ *
+ * @return string The URL of the last view or an empty string if it cannot be
+ *                determined.
+ *
+ * @global array Cookies
+ */
+function get_last_view () {
+  global $HTTP_COOKIE_VARS;
+  $val = '';
+
+  if ( isset ( $_COOKIE["webcalendar_last_view"] ) ) {
+	  $HTTP_COOKIE_VARS["webcalendar_last_view"] = $_COOKIE["webcalendar_last_view"];
+    $val = $_COOKIE["webcalendar_last_view"];
+  } else if ( isset ( $HTTP_COOKIE_VARS["webcalendar_last_view"] ) ) {
+    $val = $HTTP_COOKIE_VARS["webcalendar_last_view"];
+	}
+  $val =   str_replace ( "&", "&", $val );
+  return $val;
+}
+
+/**
+ * Sends HTTP headers that tell the browser not to cache this page.
+ *
+ * Different browser use different mechanisms for this, so a series of HTTP
+ * header directives are sent.
+ *
+ * <b>Note:</b> This function needs to be called before any HTML output is sent
+ * to the browser.
+ */
+function send_no_cache_header () {
+  header ( "Expires: Mon, 26 Jul 1997 05:00:00 GMT" );
+  header ( "Last-Modified: " . gmdate ( "D, d M Y H:i:s" ) . " GMT" );
+  header ( "Cache-Control: no-store, no-cache, must-revalidate" );
+  header ( "Cache-Control: post-check=0, pre-check=0", false );
+  header ( "Pragma: no-cache" );
+}
+
+/**
+ * Loads the current user's preferences as global variables from the webcal_user_pref table.
+ *
+ * Also loads the list of views for this user (not really a preference, but
+ * this is a convenient place to put this...)
+ *
+ * <b>Notes:</b>
+ * - If <var>$allow_color_customization</var> is set to 'N', then we ignore any
+ *   color preferences.
+ * - Other default values will also be set if the user has not saved a
+ *   preference and no global value has been set by the administrator in the
+ *   system settings.
+ */
+function load_user_preferences () {
+  global $login, $browser, $views, $prefarray, $is_assistant,
+    $has_boss, $user, $is_nonuser_admin, $allow_color_customization;
+  $lang_found = false;
+  $colors = array (
+    "BGCOLOR" => 1,
+    "H2COLOR" => 1,
+    "THBG" => 1,
+    "THFG" => 1,
+    "CELLBG" => 1,
+    "TODAYCELLBG" => 1,
+    "WEEKENDBG" => 1,
+    "POPUP_BG" => 1,
+    "POPUP_FG" => 1,
+  );
+
+  $browser = get_web_browser ();
+  $browser_lang = get_browser_language ();
+  $prefarray = array ();
+
+  // Note: default values are set in config.php
+  $res = dbi_query (
+    "SELECT cal_setting, cal_value FROM webcal_user_pref " .
+    "WHERE cal_login = '$login'" );
+  if ( $res ) {
+    while ( $row = dbi_fetch_row ( $res ) ) {
+      $setting = $row[0];
+      $value = $row[1];
+      if ( $allow_color_customization == 'N' ) {
+        if ( isset ( $colors[$setting] ) )
+          continue;
+      }
+      $sys_setting = "sys_" . $setting;
+      // save system defaults
+      if ( ! empty ( $GLOBALS[$setting] ) )
+        $GLOBALS["sys_" . $setting] = $GLOBALS[$setting];
+      $GLOBALS[$setting] = $value;
+      $prefarray[$setting] = $value;
+      if ( $setting == "LANGUAGE" )
+        $lang_found = true;
+    }
+    dbi_free_result ( $res );
+  }
+  // get views for this user and global views
+  $res = dbi_query (
+    "SELECT cal_view_id, cal_name, cal_view_type, cal_is_global " .
+    "FROM webcal_view " .
+    "WHERE cal_owner = '$login' OR cal_is_global = 'Y' " .
+    "ORDER BY cal_name" );
+  if ( $res ) {
+    $views = array ();
+    while ( $row = dbi_fetch_row ( $res ) ) {
+      if ( $row[2] == 'S' )
+        $url = "view_t.php?timeb=1&id=$row[0]";
+      else if ( $row[2] == 'T' )
+        $url = "view_t.php?timeb=0&id=$row[0]";
+      else
+        $url = "view_" . strtolower ( $row[2] ) . ".php?id=$row[0]";
+      $v = array (
+        "cal_view_id" => $row[0],
+        "cal_name" => $row[1],
+        "cal_view_type" => $row[2],
+        "cal_is_global" => $row[3],
+        "url" => $url
+        );
+      $views[] = $v;
+    }
+    dbi_free_result ( $res );
+  }
+
+  // If user has not set a language preference, then use their browser
+  // settings to figure it out, and save it in the database for future
+  // use (email reminders).
+  if ( ! $lang_found && strlen ( $login ) && $login != "__public__" ) {
+    $LANGUAGE = $browser_lang;
+    dbi_query ( "INSERT INTO webcal_user_pref " .
+      "( cal_login, cal_setting, cal_value ) VALUES " .
+      "( '$login', 'LANGUAGE', '$LANGUAGE' )" );
+  }
+
+  if ( empty ( $GLOBALS["DATE_FORMAT_MY"] ) )
+    $GLOBALS["DATE_FORMAT_MY"] = "__month__ __yyyy__";
+  if ( empty ( $GLOBALS["DATE_FORMAT_MD"] ) )
+    $GLOBALS["DATE_FORMAT_MD"] = "__month__ __dd__";
+  $is_assistant = empty ( $user ) ? false :
+    user_is_assistant ( $login, $user );
+  $has_boss = user_has_boss ( $login );
+  $is_nonuser_admin = ($user) ? user_is_nonuser_admin ( $login, $user ) : false;
+  if ( $is_nonuser_admin ) load_nonuser_preferences ($user);
+}
+
+/**
+ * Gets the list of external users for an event from the webcal_entry_ext_user table in an HTML format.
+ *
+ * @param int $event_id   Event ID
+ * @param int $use_mailto When set to 1, email address will contain an href
+ *                        link with a mailto URL.
+ *
+ * @return string The list of external users for an event formatte in HTML.
+ */
+function event_get_external_users ( $event_id, $use_mailto=0 ) {
+  global $error;
+  $ret = "";
+
+  $res = dbi_query ( "SELECT cal_fullname, cal_email " .
+    "FROM webcal_entry_ext_user " .
+    "WHERE cal_id = $event_id " .
+    "ORDER by cal_fullname" );
+  if ( $res ) {
+    while ( $row = dbi_fetch_row ( $res ) ) {
+      if ( strlen ( $ret ) )
+        $ret .= "\n";
+      // Remove [\d] if duplicate name
+      $trow = trim( preg_replace( '/\[[\d]]/' , "", $row[0] ) );
+      $ret .= $trow;
+      if ( strlen ( $row[1] ) ) {
+        if ( $use_mailto ) {
+          $ret .= " <a href=\"mailto:$row[1]\"><" .
+            htmlentities ( $row[1] ) . "></a>";
+        } else {
+          $ret .= " <". htmlentities ( $row[1] ) . ">";
+        }
+      }
+    }
+    dbi_free_result ( $res );
+  } else {
+    echo translate("Database error") .": " . dbi_error ();
+    echo "<br />\nSQL:<br />\n$sql";
+    exit;
+  }
+  return $ret;
+}
+
+/**
+ * Adds something to the activity log for an event.
+ *
+ * The information will be saved to the webcal_entry_log table.
+ *
+ * @param int    $event_id Event ID
+ * @param string $user     Username of user doing this
+ * @param string $user_cal Username of user whose calendar is affected
+ * @param string $type     Type of activity we are logging:
+ *   - $LOG_CREATE
+ *   - $LOG_APPROVE
+ *   - $LOG_REJECT
+ *   - $LOG_UPDATE
+ *   - $LOG_DELETE
+ *   - $LOG_NOTIFICATION
+ *   - $LOG_REMINDER
+ * @param string $text     Text comment to add with activity log entry
+ */
+function activity_log ( $event_id, $user, $user_cal, $type, $text ) {
+  $next_id = 1;
+
+  if ( empty ( $type ) ) {
+    echo "Error: type not set for activity log!";
+    // but don't exit since we may be in mid-transaction
+    return;
+  }
+
+  $res = dbi_query ( "SELECT MAX(cal_log_id) FROM webcal_entry_log" );
+  if ( $res ) {
+    if ( $row = dbi_fetch_row ( $res ) ) {
+      $next_id = $row[0] + 1;
+    }
+    dbi_free_result ( $res );
+  }
+
+  $date = date ( "Ymd" );
+  $time = date ( "Gis" );
+  $sql_text = empty ( $text ) ? "NULL" : "'$text'";
+  $sql_user_cal = empty ( $user_cal ) ? "NULL" : "'$user_cal'";
+
+  $sql = "INSERT INTO webcal_entry_log ( " .
+    "cal_log_id, cal_entry_id, cal_login, cal_user_cal, cal_type, " .
+    "cal_date, cal_time, cal_text ) VALUES ( $next_id, $event_id, " .
+    "'$user', $sql_user_cal, '$type', $date, $time, $sql_text )";
+  if ( ! dbi_query ( $sql ) ) {
+    echo "Database error: " . dbi_error ();
+    echo "<br />\nSQL:<br />\n$sql";
+    exit;
+  }
+}
+
+/**
+ * Gets a list of users.
+ *
+ * If groups are enabled, this will restrict the list of users to only those
+ * users who are in the same group(s) as the user (unless the user is an admin
+ * user).  We allow admin users to see all users because they can also edit
+ * someone else's events (so they may need access to users who are not in the
+ * same groups that they are in).
+ *
+ * @return array Array of users, where each element in the array is an array
+ *               with the following keys:
+ *    - cal_login
+ *    - cal_lastname
+ *    - cal_firstname
+ *    - cal_is_admin
+ *    - cal_is_admin
+ *    - cal_email
+ *    - cal_password
+ *    - cal_fullname
+ */
+function get_my_users () {
+  global $login, $is_admin, $groups_enabled, $user_sees_only_his_groups;
+
+  if ( $groups_enabled == "Y" && $user_sees_only_his_groups == "Y" &&
+    ! $is_admin ) {
+    // get groups that current user is in
+    $res = dbi_query ( "SELECT cal_group_id FROM webcal_group_user " .
+      "WHERE cal_login = '$login'" );
+    $groups = array ();
+    if ( $res ) {
+      while ( $row = dbi_fetch_row ( $res ) ) {
+        $groups[] = $row[0];
+      }
+      dbi_fetch_row ( $res );
+    }
+    $u = user_get_users ();
+    $u_byname = array ();
+    for ( $i = 0; $i < count ( $u ); $i++ ) {
+      $name = $u[$i]['cal_login'];
+      $u_byname[$name] = $u[$i];
+    }
+    $ret = array ();
+    if ( count ( $groups ) == 0 ) {
+      // Eek.  User is in no groups... Return only themselves
+      $ret[] = $u_byname[$login];
+      return $ret;
+    }
+    // get list of users in the same groups as current user
+    $sql = "SELECT DISTINCT(webcal_group_user.cal_login), cal_lastname, cal_firstname from webcal_group_user " .
+      "LEFT JOIN webcal_user ON webcal_group_user.cal_login = webcal_user.cal_login " .
+      "WHERE cal_group_id ";
+    if ( count ( $groups ) == 1 )
+      $sql .= "= " . $groups[0];
+    else {
+      $sql .= "IN ( " . implode ( ", ", $groups ) . " )";
+    }
+    $sql .= " ORDER BY cal_lastname, cal_firstname, webcal_group_user.cal_login";
+    //echo "SQL: $sql <br />\n";
+    $res = dbi_query ( $sql );
+    if ( $res ) {
+      while ( $row = dbi_fetch_row ( $res ) ) {
+        $ret[] = $u_byname[$row[0]];
+      }
+      dbi_free_result ( $res );
+    }
+    return $ret;
+  } else {
+    // groups not enabled... return all users
+    //echo "No groups. ";
+    return user_get_users ();
+  }
+}
+
+/**
+ * Gets a preference setting for the specified user.
+ *
+ * If no value is found in the database, then the system default setting will
+ * be returned.
+ *
+ * @param string $user    User login we are getting preference for
+ * @param string $setting Name of the setting
+ *
+ * @return string The value found in the webcal_user_pref table for the
+ *                specified setting or the sytem default if no user settings
+ *                was found.
+ */
+function get_pref_setting ( $user, $setting ) {
+  $ret = '';
+  // set default
+  if ( ! isset ( $GLOBALS["sys_" .$setting] ) ) {
+    // this could happen if the current user has not saved any pref. yet
+    if ( ! empty ( $GLOBALS[$setting] ) )
+      $ret = $GLOBALS[$setting];
+  } else {
+    $ret = $GLOBALS["sys_" .$setting];
+  }
+
+  $sql = "SELECT cal_value FROM webcal_user_pref " .
+    "WHERE cal_login = '" . $user . "' AND " .
+    "cal_setting = '" . $setting . "'";
+  //echo "SQL: $sql <br />\n";
+  $res = dbi_query ( $sql );
+  if ( $res ) {
+    if ( $row = dbi_fetch_row ( $res ) )
+      $ret = $row[0];
+    dbi_free_result ( $res );
+  }
+  return $ret;
+}
+
+/**
+ * Gets browser-specified language preference.
+ *
+ * @return string Preferred language
+ *
+ * @ignore
+ */
+function get_browser_language () {
+  global $HTTP_ACCEPT_LANGUAGE, $browser_languages;
+  $ret = "";
+  if ( empty ( $HTTP_ACCEPT_LANGUAGE ) &&
+    isset ( $_SERVER["HTTP_ACCEPT_LANGUAGE"] ) )
+    $HTTP_ACCEPT_LANGUAGE = $_SERVER["HTTP_ACCEPT_LANGUAGE"];
+  if (  empty ( $HTTP_ACCEPT_LANGUAGE ) ) {
+    return "none";
+  } else {
+    $langs = explode ( ",", $HTTP_ACCEPT_LANGUAGE );
+    for ( $i = 0; $i < count ( $langs ); $i++ ) {
+     $l = strtolower ( trim ( ereg_replace(';.*', '', $langs[$i] ) ) );
+      $ret .= "\"$l\" ";
+      if ( ! empty ( $browser_languages[$l] ) ) {
+        return $browser_languages[$l];
+      }
+    }
+  }
+  //if ( strlen ( $HTTP_ACCEPT_LANGUAGE ) )
+  //  return "none ($HTTP_ACCEPT_LANGUAGE not supported)";
+  //else
+    return "none";
+}
+
+/**
+ * Loads current user's layer info into layer global variable.
+ *
+ * If the system setting <var>$allow_view_other</var> is not set to 'Y', then
+ * we ignore all layer functionality.  If <var>$force</var> is 0, we only load
+ * layers if the current user preferences have layers turned on.
+ *
+ * @param string $user  Username of user to load layers for
+ * @param int    $force If set to 1, then load layers for this user even if
+ *                      user preferences have layers turned off.
+ */
+function load_user_layers ($user="",$force=0) {
+  global $login;
+  global $layers;
+  global $LAYERS_STATUS, $allow_view_other;
+
+  if ( $user == "" )
+    $user = $login;
+
+  $layers = array ();
+
+  if ( empty ( $allow_view_other ) || $allow_view_other != 'Y' )
+    return; // not allowed to view others' calendars, so cannot use layers
+
+  if ( $force || ( ! empty ( $LAYERS_STATUS ) && $LAYERS_STATUS != "N" ) ) {
+    $res = dbi_query (
+      "SELECT cal_layerid, cal_layeruser, cal_color, cal_dups " .
+      "FROM webcal_user_layers " .
+      "WHERE cal_login = '$user' ORDER BY cal_layerid" );
+    if ( $res ) {
+      $count = 1;
+      while ( $row = dbi_fetch_row ( $res ) ) {
+        $layers[$row[0]] = array (
+          "cal_layerid" => $row[0],
+          "cal_layeruser" => $row[1],
+          "cal_color" => $row[2],
+          "cal_dups" => $row[3]
+        );
+        $count++;
+      }
+      dbi_free_result ( $res );
+    }
+  } else {
+    //echo "Not loading!";
+  }
+}
+
+/**
+ * Generates the HTML used in an event popup for the site_extras fields of an event.
+ *
+ * @param int $id Event ID
+ *
+ * @return string The HTML to be used within the event popup for any site_extra
+ *                fields found for the specified event
+ */
+function site_extras_for_popup ( $id ) {
+  global $site_extras_in_popup, $site_extras;
+  // These are needed in case the site_extras.php file was already
+  // included.
+  global $EXTRA_TEXT, $EXTRA_MULTILINETEXT, $EXTRA_URL, $EXTRA_DATE,
+    $EXTRA_EMAIL, $EXTRA_USER, $EXTRA_REMINDER, $EXTRA_SELECTLIST;
+  global $EXTRA_REMINDER_WITH_DATE, $EXTRA_REMINDER_WITH_OFFSET,
+    $EXTRA_REMINDER_DEFAULT_YES;
+
+  $ret = '';
+
+  if ( $site_extras_in_popup != 'Y' )
+    return '';
+
+  include_once 'includes/site_extras.php';
+
+  $extras = get_site_extra_fields ( $id );
+  for ( $i = 0; $i < count ( $site_extras ); $i++ ) {
+    $extra_name = $site_extras[$i][0];
+    $extra_type = $site_extras[$i][2];
+    $extra_arg1 = $site_extras[$i][3];
+    $extra_arg2 = $site_extras[$i][4];
+    if ( ! empty ( $extras[$extra_name]['cal_name'] ) ) {
+      $ret .= "<dt>" .  translate ( $site_extras[$i][1] ) . ":</dt>\n<dd>";
+      if ( $extra_type == $EXTRA_DATE ) {
+        if ( $extras[$extra_name]['cal_date'] > 0 )
+          $ret .= date_to_str ( $extras[$extra_name]['cal_date'] );
+      } else if ( $extra_type == $EXTRA_TEXT ||
+        $extra_type == $EXTRA_MULTILINETEXT ) {
+        $ret .= nl2br ( $extras[$extra_name]['cal_data'] );
+      } else if ( $extra_type == $EXTRA_REMINDER ) {
+        if ( $extras[$extra_name]['cal_remind'] <= 0 )
+          $ret .= translate ( "No" );
+        else {
+          $ret .= translate ( "Yes" );
+          if ( ( $extra_arg2 & $EXTRA_REMINDER_WITH_DATE ) > 0 ) {
+            $ret .= "  -  ";
+            $ret .= date_to_str ( $extras[$extra_name]['cal_date'] );
+          } else if ( ( $extra_arg2 & $EXTRA_REMINDER_WITH_OFFSET ) > 0 ) {
+            $ret .= "  -  ";
+            $minutes = $extras[$extra_name]['cal_data'];
+            $d = (int) ( $minutes / ( 24 * 60 ) );
+            $minutes -= ( $d * 24 * 60 );
+            $h = (int) ( $minutes / 60 );
+            $minutes -= ( $h * 60 );
+            if ( $d > 0 )
+              $ret .= $d . " " . translate("days") . " ";
+            if ( $h > 0 )
+              $ret .= $h . " " . translate("hours") . " ";
+            if ( $minutes > 0 )
+              $ret .= $minutes . " " . translate("minutes");
+            $ret .= " " . translate("before event" );
+          }
+        }
+      } else {
+        $ret .= $extras[$extra_name]['cal_data'];
+      }
+      $ret .= "</dd>\n";
+    }
+  }
+  return $ret;
+}
+
+/**
+ * Builds the HTML for the event popup.
+ *
+ * @param string $popupid     CSS id to use for event popup
+ * @param string $user        Username of user the event pertains to
+ * @param string $description Event description
+ * @param string $time        Time of the event (already formatted in a display format)
+ * @param string $site_extras HTML for any site_extras for this event
+ *
+ * @return string The HTML for the event popup
+ */
+function build_event_popup ( $popupid, $user, $description, $time, $site_extras='' ) {
+  global $login, $popup_fullnames, $popuptemp_fullname;
+  $ret = "<dl id=\"$popupid\" class=\"popup\">\n";
+
+  if ( empty ( $popup_fullnames ) )
+    $popup_fullnames = array ();
+  
+  if ( $user != $login ) {
+    if ( empty ( $popup_fullnames[$user] ) ) {
+      user_load_variables ( $user, "popuptemp_" );
+      $popup_fullnames[$user] = $popuptemp_fullname;
+    }
+    $ret .= "<dt>" . translate ("User") .
+      ":</dt>\n<dd>$popup_fullnames[$user]</dd>\n";
+  }
+  if ( strlen ( $time ) )
+    $ret .= "<dt>" . translate ("Time") . ":</dt>\n<dd>$time</dd>\n";
+  $ret .= "<dt>" . translate ("Description") . ":</dt>\n<dd>";
+  if ( ! empty ( $GLOBALS['allow_html_description'] ) &&
+    $GLOBALS['allow_html_description'] == 'Y' ) {
+    $str = str_replace ( "&", "&", $description );
+    $str = str_replace ( "&amp;", "&", $str );
+    // If there is no html found, then go ahead and replace
+    // the line breaks ("\n") with the html break.
+    if ( strstr ( $str, "<" ) && strstr ( $str, ">" ) ) {
+      // found some html...
+      $ret .= $str;
+    } else {
+      // no html, replace line breaks
+      $ret .= nl2br ( $str );
+    }
+  } else {
+    // html not allowed in description, escape everything
+    $ret .= nl2br ( htmlspecialchars ( $description ) );
+  }
+  $ret .= "</dd>\n";
+  if ( ! empty ( $site_extras ) )
+    $ret .= $site_extras;
+  $ret .= "</dl>\n";
+  return $ret;
+}
+
+/**
+ * Prints out a date selection box for use in a form.
+ *
+ * @param string $prefix Prefix to use in front of form element names
+ * @param int    $date   Currently selected date (in YYYYMMDD format)
+ *
+ * @uses date_selection_html
+ */
+function print_date_selection ( $prefix, $date ) {
+  print date_selection_html ( $prefix, $date );
+}
+
+/**
+ * Generate HTML for a date selection for use in a form.
+ *
+ * @param string $prefix Prefix to use in front of form element names
+ * @param int    $date   Currently selected date (in YYYYMMDD format)
+ *
+ * @return string HTML for the selection box
+ */
+function date_selection_html ( $prefix, $date ) {
+  $ret = "";
+  $num_years = 20;
+  if ( strlen ( $date ) != 8 )
+    $date = date ( "Ymd" );
+  $thisyear = $year = substr ( $date, 0, 4 );
+  $thismonth = $month = substr ( $date, 4, 2 );
+  $thisday = $day = substr ( $date, 6, 2 );
+  if ( $thisyear - date ( "Y" ) >= ( $num_years - 1 ) )
+    $num_years = $thisyear - date ( "Y" ) + 2;
+  $ret .= "<select name=\"" . $prefix . "day\">\n";
+  for ( $i = 1; $i <= 31; $i++ )
+    $ret .= "<option value=\"$i\"" .
+      ( $i == $thisday ? " selected=\"selected\"" : "" ) . ">$i</option>\n";
+  $ret .= "</select>\n<select name=\"" . $prefix . "month\">\n";
+  for ( $i = 1; $i <= 12; $i++ ) {
+    $m = month_short_name ( $i - 1 );
+    $ret .= "<option value=\"$i\"" .
+      ( $i == $thismonth ? " selected=\"selected\"" : "" ) . ">$m</option>\n";
+  }
+  $ret .= "</select>\n<select name=\"" . $prefix . "year\">\n";
+  for ( $i = -10; $i < $num_years; $i++ ) {
+    $y = $thisyear + $i;
+    $ret .= "<option value=\"$y\"" .
+      ( $y == $thisyear ? " selected=\"selected\"" : "" ) . ">$y</option>\n";
+  }
+  $ret .= "</select>\n";
+  $ret .= "<input type=\"button\" onclick=\"selectDate( '" .
+    $prefix . "day','" . $prefix . "month','" . $prefix . "year',$date, event)\" value=\"" .
+    translate("Select") . "...\" />\n";
+
+  return $ret;
+}
+
+/**
+ * Prints out a minicalendar for a month.
+ *
+ * @todo Make day.php NOT be a special case
+ *
+ * @param int    $thismonth     Number of the month to print
+ * @param int    $thisyear      Number of the year
+ * @param bool   $showyear      Show the year in the calendar's title?
+ * @param bool   $show_weeknums Show week numbers to the left of each row?
+ * @param string $minical_id    id attribute for the minical table
+ * @param string $month_link    URL and query string for month link that should
+ *                              come before the date specification (e.g.
+ *                              month.php?  or  view_l.php?id=7&)
+ */
+function display_small_month ( $thismonth, $thisyear, $showyear,
+  $show_weeknums=false, $minical_id='', $month_link='month.php?' ) {
+  global $WEEK_START, $user, $login, $boldDays, $get_unapproved;
+  global $DISPLAY_WEEKNUMBER;
+  global $SCRIPT, $thisday; // Needed for day.php
+  global $caturl, $today;
+
+  if ( $user != $login && ! empty ( $user ) ) {
+    $u_url = "user=$user" . "&";
+  } else {
+    $u_url = '';
+  }
+
+  //start the minical table for each month
+  echo "\n<table class=\"minical\"";
+  if ( $minical_id != '' ) {
+    echo " id=\"$minical_id\"";
+  }
+  echo ">\n";
+
+  $monthstart = mktime(2,0,0,$thismonth,1,$thisyear);
+  $monthend = mktime(2,0,0,$thismonth + 1,0,$thisyear);
+
+  if ( $SCRIPT == 'day.php' ) {
+    $month_ago = date ( "Ymd",
+      mktime ( 3, 0, 0, $thismonth - 1, $thisday, $thisyear ) );
+    $month_ahead = date ( "Ymd",
+      mktime ( 3, 0, 0, $thismonth + 1, $thisday, $thisyear ) );
+
+    echo "<caption>$thisday</caption>\n";
+    echo "<thead>\n";
+    echo "<tr class=\"monthnav\"><th colspan=\"7\">\n";
+    echo "<a title=\"" . 
+ translate("Previous") . "\" class=\"prev\" href=\"day.php?" . $u_url  .
+ "date=$month_ago$caturl\"><img src=\"leftarrowsmall.gif\" alt=\"" .
+ translate("Previous") . "\" /></a>\n";
+    echo "<a title=\"" . 
+ translate("Next") . "\" class=\"next\" href=\"day.php?" . $u_url .
+ "date=$month_ahead$caturl\"><img src=\"rightarrowsmall.gif\" alt=\"" .
+ translate("Next") . "\" /></a>\n";
+    echo month_name ( $thismonth - 1 );
+    if ( $showyear != '' ) {
+      echo " $thisyear";
+    }
+    echo "</th></tr>\n<tr>\n";
+  } else {  //not day script
+    //print the month name
+    echo "<caption><a href=\"{$month_link}{$u_url}year=$thisyear&month=$thismonth\">";
+ echo month_name ( $thismonth - 1 ) .
+  ( $showyear ? " $thisyear" : "" );
+    echo "</a></caption>\n";
+
+    echo "<thead>\n<tr>\n";
+  }
+
+  //determine if the week starts on sunday or monday
+  if ( $WEEK_START == "1" ) {
+    $wkstart = get_monday_before ( $thisyear, $thismonth, 1 );
+  } else {
+    $wkstart = get_sunday_before ( $thisyear, $thismonth, 1 );
+  }
+  //print the headers to display the day of the week (sun, mon, tues, etc.)
+
+  // if we're showing week numbers we need an extra column
+  if ( $show_weeknums && $DISPLAY_WEEKNUMBER == 'Y' )
+    echo "<th class=\"empty\"> </th>\n";
+  //if the week doesn't start on monday, print the day
+  if ( $WEEK_START == 0 ) echo "<th>" .
+    weekday_short_name ( 0 ) . "</th>\n";
+  //cycle through each day of the week until gone
+  for ( $i = 1; $i < 7; $i++ ) {
+    echo "<th>" .  weekday_short_name ( $i ) .  "</th>\n";
+  }
+  //if the week DOES start on monday, print sunday
+  if ( $WEEK_START == 1 )
+    echo "<th>" .  weekday_short_name ( 0 ) .  "</th>\n";
+  //end the header row
+  echo "</tr>\n</thead>\n<tbody>\n";
+  for ($i = $wkstart; date("Ymd",$i) <= date ("Ymd",$monthend);
+    $i += (24 * 3600 * 7) ) {
+    echo "<tr>\n";
+    if ( $show_weeknums && $DISPLAY_WEEKNUMBER == 'Y' ) {
+      echo "<td class=\"weeknumber\"><a href=\"week.php?" . $u_url .
+        "date=".date("Ymd", $i)."\">(" . week_number($i) . ")</a></td>\n";
+    }
+    for ($j = 0; $j < 7; $j++) {
+      $date = $i + ($j * 24 * 3600);
+      $dateYmd = date ( "Ymd", $date );
+      $hasEvents = false;
+      if ( $boldDays ) {
+        $ev = get_entries ( $user, $dateYmd, $get_unapproved );
+        if ( count ( $ev ) > 0 ) {
+          $hasEvents = true;
+        } else {
+          $rep = get_repeating_entries ( $user, $dateYmd, $get_unapproved );
+          if ( count ( $rep ) > 0 )
+            $hasEvents = true;
+        }
+      }
+      if ( $dateYmd >= date ("Ymd",$monthstart) &&
+        $dateYmd <= date ("Ymd",$monthend) ) {
+        echo "<td";
+        $wday = date ( 'w', $date );
+        $class = '';
+  //add class="weekend" if it's saturday or sunday
+        if ( $wday == 0 || $wday == 6 ) {
+          $class = "weekend";
+        }
+  //if the day being viewed is today's date AND script = day.php
+        if ( $dateYmd == $thisyear . $thismonth . $thisday &&
+          $SCRIPT == 'day.php'  ) {
+    //if it's also a weekend, add a space between class names to combine styles
+    if ( $class != '' ) {
+            $class .= ' ';
+          }
+          $class .= "selectedday";
+        }
+        if ( $hasEvents ) {
+          if ( $class != '' ) {
+            $class .= ' ';
+          }
+          $class .= "hasevents";
+        }
+        if ( $class != '' ) {
+          echo " class=\"$class\"";
+        }
+        if ( date ( "Ymd", $date  ) == date ( "Ymd", $today ) ){
+          echo " id=\"today\"";
+        }
+        echo "><a href=\"day.php?" .$u_url  . "date=" .  $dateYmd . 
+          "\">";
+        echo date ( "d", $date ) . "</a></td>\n";
+        } else {
+          echo "<td class=\"empty\"> </td>\n";
+        }
+      }                 // end for $j
+      echo "</tr>\n";
+    }                         // end for $i
+  echo "</tbody>\n</table>\n";
+}
+
+/**
+ * Prints the HTML for one day's events in the month view.
+ *
+ * @param int    $id          Event ID
+ * @param int    $date        Date of event (relevant in repeating events) in
+ *                            YYYYMMDD format
+ * @param int    $time        Time (in HHMMSS format)
+ * @param int    $duration    Event duration in minutes
+ * @param string $name        Event name
+ * @param string $description Long description of event
+ * @param string $status      Event status
+ * @param int    $pri         Event priority
+ * @param string $access      Event access
+ * @param string $event_owner Username of user associated with this event
+ * @param int    $event_cat   Category of event for <var>$event_owner</var>
+ *
+ * @staticvar int Used to ensure all event popups have a unique id
+ *
+ * @uses build_event_popup
+ */
+function print_entry ( $id, $date, $time, $duration,
+  $name, $description, $status,
+  $pri, $access, $event_owner, $event_cat=-1 ) {
+  global $eventinfo, $login, $user, $PHP_SELF, $TZ_OFFSET;
+  static $key = 0;
+  
+  global $layers;
+
+  if ( $login != $event_owner && strlen ( $event_owner ) ) {
+    $class = "layerentry";
+  } else {
+    $class = "entry";
+    if ( $status == "W" ) $class = "unapprovedentry";
+  }
+  // if we are looking at a view, then always use "entry"
+  if ( strstr ( $PHP_SELF, "view_m.php" ) ||
+    strstr ( $PHP_SELF, "view_w.php" ) ||
+    strstr ( $PHP_SELF, "view_v.php" ) ||
+    strstr ( $PHP_SELF, "view_t.php" ) )
+    $class = "entry";
+
+  if ( $pri == 3 ) echo "<strong>";
+  $popupid = "eventinfo-$id-$key";
+  $key++;
+  echo "<a title=\"" . 
+    translate("View this entry") . "\" class=\"$class\" href=\"view_entry.php?id=$id&date=$date";
+  if ( strlen ( $user ) > 0 )
+    echo "&user=" . $user;
+  echo "\" onmouseover=\"window.status='" . 
+    translate("View this entry") .
+    "'; show(event, '$popupid'); return true;\" onmouseout=\"window.status=''; hide('$popupid'); return true;\">";
+  $icon = "circle.gif";
+  $catIcon = '';
+  if ( $event_cat > 0 ) {
+    $catIcon = "icons/cat-" . $event_cat . ".gif";
+    if ( ! file_exists ( $catIcon ) )
+      $catIcon = '';
+  }
+
+  if ( empty ( $catIcon ) ) {
+    echo "<img src=\"$icon\" class=\"bullet\" alt=\"" . 
+      translate("View this entry") . "\" />";
+  } else {
+    // Use category icon
+    echo "<img src=\"$catIcon\" alt=\"" . 
+      translate("View this entry") . "\" /><br />";
+  }
+
+  if ( $login != $event_owner && strlen ( $event_owner ) ) {
+    if ($layers) foreach ($layers as $layer) {
+      if ($layer['cal_layeruser'] == $event_owner) {
+        echo("<span style=\"color:" . $layer['cal_color'] . ";\">");
+      }
+    }
+  }
+
+
+  $timestr = "";
+  if ( $duration == ( 24 * 60 ) ) {
+    $timestr = translate("All day event");
+  } else if ( $time != -1 ) {
+    $timestr = display_time ( $time );
+    $time_short = preg_replace ("/(:00)/", '', $timestr);
+    echo $time_short . "» ";
+    if ( $duration > 0 ) {
+        // calc end time
+        $h = (int) ( $time / 10000 );
+        $m = ( $time / 100 ) % 100;
+        $m += $duration;
+        $d = $duration;
+        while ( $m >= 60 ) {
+          $h++;
+          $m -= 60;
+        }
+        $end_time = sprintf ( "%02d%02d00", $h, $m );
+        $timestr .= " - " . display_time ( $end_time );
+    }
+  }
+  if ( $login != $user && $access == 'R' && strlen ( $user ) ) {
+    echo "(" . translate("Private") . ")";
+  } else if ( $login != $event_owner && $access == 'R' &&
+    strlen ( $event_owner ) ) {
+    echo "(" . translate("Private") . ")";
+  } else {
+    echo htmlspecialchars ( $name );
+  }
+
+  if ( $login != $event_owner && strlen ( $event_owner ) ) {
+    if ($layers) foreach ($layers as $layer) {
+        if($layer['cal_layeruser'] == $event_owner) {
+            echo "</span>";
+        }
+    }
+  }
+  echo "</a>\n";
+  if ( $pri == 3 ) echo "</strong>\n"; //end font-weight span
+  echo "<br />";
+  if ( $login != $user && $access == 'R' && strlen ( $user ) )
+    $eventinfo .= build_event_popup ( $popupid, $event_owner,
+      translate("This event is confidential"), "" );
+  else
+  if ( $login != $event_owner && $access == 'R' && strlen ( $event_owner ) )
+    $eventinfo .= build_event_popup ( $popupid, $event_owner,
+      translate("This event is confidential"), "" );
+  else
+    $eventinfo .= build_event_popup ( $popupid, $event_owner,
+      $description, $timestr, site_extras_for_popup ( $id ) );
+}
+
+/** 
+ * Gets any site-specific fields for an entry that are stored in the database in the webcal_site_extras table.
+ *
+ * @param int $eventid Event ID
+ *
+ * @return array Array with the keys as follows:
+ *    - <var>cal_name</var>
+ *    - <var>cal_type</var>
+ *    - <var>cal_date</var>
+ *    - <var>cal_remind</var>
+ *    - <var>cal_data</var>
+ */
+function get_site_extra_fields ( $eventid ) {
+  $sql = "SELECT cal_name, cal_type, cal_date, cal_remind, cal_data " .
+    "FROM webcal_site_extras " .
+    "WHERE cal_id = $eventid";
+  $res = dbi_query ( $sql );
+  $extras = array ();
+  if ( $res ) {
+    while ( $row = dbi_fetch_row ( $res ) ) {
+      // save by cal_name (e.g. "URL")
+      $extras[$row[0]] = array (
+        "cal_name" => $row[0],
+        "cal_type" => $row[1],
+        "cal_date" => $row[2],
+        "cal_remind" => $row[3],
+        "cal_data" => $row[4]
+      );
+    }
+    dbi_free_result ( $res );
+  }
+  return $extras;
+}
+
+/**
+ * Reads all the events for a user for the specified range of dates.
+ *
+ * This is only called once per page request to improve performance.  All the
+ * events get loaded into the array <var>$events</var> sorted by time of day
+ * (not date).
+ *
+ * @param string $user      Username
+ * @param string $startdate Start date range, inclusive (in YYYYMMDD format)
+ * @param string $enddate   End date range, inclusive (in YYYYMMDD format)
+ * @param int    $cat_id    Category ID to filter on
+ *
+ * @return array Array of events
+ *
+ * @uses query_events
+ */
+function read_events ( $user, $startdate, $enddate, $cat_id = ''  ) {
+  global $login;
+  global $layers;
+  global $TZ_OFFSET;
+
+  $sy = substr ( $startdate, 0, 4 );
+  $sm = substr ( $startdate, 4, 2 );
+  $sd = substr ( $startdate, 6, 2 );
+  $ey = substr ( $enddate, 0, 4 );
+  $em = substr ( $enddate, 4, 2 );
+  $ed = substr ( $enddate, 6, 2 );
+  if ( $startdate == $enddate ) {
+    if ( $TZ_OFFSET == 0 ) {
+      $date_filter = " AND webcal_entry.cal_date = $startdate";
+    } else if ( $TZ_OFFSET > 0 ) {
+      $prev_day = mktime ( 3, 0, 0, $sm, $sd - 1, $sy );
+      $cutoff = 24 - $TZ_OFFSET .  "0000";
+      $date_filter = " AND ( ( webcal_entry.cal_date = $startdate AND " .
+        "( webcal_entry.cal_time <= $cutoff OR " .
+        "webcal_entry.cal_time = -1 ) ) OR " .
+        "( webcal_entry.cal_date = " . date("Ymd", $prev_day ) .
+        " AND webcal_entry.cal_time >= $cutoff ) )";
+    } else {
+      $next_day = mktime ( 3, 0, 0, $sm, $sd + 1, $sy );
+      $cutoff = ( 0 - $TZ_OFFSET ) * 10000;
+      $date_filter = " AND ( ( webcal_entry.cal_date = $startdate AND " .
+        "( webcal_entry.cal_time > $cutoff OR " .
+        "webcal_entry.cal_time = -1 ) ) OR " .
+        "( webcal_entry.cal_date = " . date("Ymd", $next_day ) .
+        " AND webcal_entry.cal_time <= $cutoff ) )";
+    }
+  } else {
+    if ( $TZ_OFFSET == 0 ) {
+      $date_filter = " AND webcal_entry.cal_date >= $startdate " .
+        "AND webcal_entry.cal_date <= $enddate";
+    } else if ( $TZ_OFFSET > 0 ) {
+      $prev_day = date ( ( "Ymd" ), mktime ( 3, 0, 0, $sm, $sd - 1, $sy ) );
+      $enddate_minus1 = date ( ( "Ymd" ), mktime ( 3, 0, 0, $em, $ed - 1, $ey ) );
+      $cutoff = 24 - $TZ_OFFSET . "0000";
+      $date_filter = " AND ( ( webcal_entry.cal_date >= $startdate " .
+        "AND webcal_entry.cal_date <= $enddate AND " .
+        "webcal_entry.cal_time = -1 ) OR " .
+        "( webcal_entry.cal_date = $prev_day AND " .
+        "webcal_entry.cal_time >= $cutoff ) OR " .
+        "( webcal_entry.cal_date = $enddate AND " .
+        "webcal_entry.cal_time < $cutoff ) OR " .
+        "( webcal_entry.cal_date >= $startdate AND " .
+        "webcal_entry.cal_date <= $enddate_minus1 ) )";
+    } else {
+      // TZ_OFFSET < 0
+      $next_day = date ( ( "Ymd" ), mktime ( 3, 0, 0, $sm, $sd + 1, $sy ) );
+      $enddate_plus1 =
+        date ( ( "Ymd" ), mktime ( 3, 0, 0, $em, $ed + 1, $ey ) );
+      $cutoff = ( 0 - $TZ_OFFSET ) * 10000;
+      $date_filter = " AND ( ( webcal_entry.cal_date >= $startdate " .
+        "AND webcal_entry.cal_date <= $enddate AND " .
+        "webcal_entry.cal_time = -1 ) OR " .
+        "( webcal_entry.cal_date = $startdate AND " .
+        "webcal_entry.cal_time > $cutoff ) OR " .
+        "( webcal_entry.cal_date = $enddate_plus1 AND " .
+        "webcal_entry.cal_time <= $cutoff ) OR " .
+        "( webcal_entry.cal_date > $startdate AND " .
+        "webcal_entry.cal_date < $enddate_plus1 ) )";
+    }
+  }
+  return query_events ( $user, false, $date_filter, $cat_id  );
+}
+
+/**
+ * Gets all the events for a specific date.
+ *
+ * Events are retreived from the array of pre-loaded events (which was loaded
+ * all at once to improve performance).
+ *
+ * The returned events will be sorted by time of day.
+ *
+ * @param string $user           Username
+ * @param string $date           Date to get events for in YYYYMMDD format
+ * @param bool   $get_unapproved Load unapproved events?
+ *
+ * @return array Array of events
+ */
+function get_entries ( $user, $date, $get_unapproved=true ) {
+  global $events, $TZ_OFFSET;
+  $n = 0;
+  $ret = array ();
+
+  //echo "<br />\nChecking " . count ( $events ) . " events.  TZ_OFFSET = $TZ_OFFSET, get_unapproved=" . $get_unapproved . "<br />\n";
+
+  //print_r ( $events );
+
+  for ( $i = 0; $i < count ( $events ); $i++ ) {
+    // In case of data corruption (or some other bug...)
+    if ( empty ( $events[$i] ) || empty ( $events[$i]['cal_id'] ) )
+      continue;
+    if ( ( ! $get_unapproved ) && $events[$i]['cal_status'] == 'W' ) {
+      // ignore this event
+    //don't adjust anything  if  no TZ offset or ALL Day Event or Untimed
+    } else if ( empty ( $TZ_OFFSET) ||  ( $events[$i]['cal_time'] <= 0 ) ) {
+      if ( $events[$i]['cal_date'] == $date )
+        $ret[$n++] = $events[$i];
+    } else if ( $TZ_OFFSET > 0 ) {
+      $cutoff = ( 24 - $TZ_OFFSET ) * 10000;
+      //echo "<br /> cal_time " . $events[$i]['cal_time'] . "<br />\n";
+      $sy = substr ( $date, 0, 4 );
+      $sm = substr ( $date, 4, 2 );
+      $sd = substr ( $date, 6, 2 );
+      $prev_day = date ( ( "Ymd" ), mktime ( 3, 0, 0, $sm, $sd - 1, $sy ) );
+        //echo "prev_date = $prev_day <br />\n";
+      if ( $events[$i]['cal_date'] == $date &&
+        $events[$i]['cal_time'] == -1 ) {
+        $ret[$n++] = $events[$i];
+        //echo "added event $events[$i][cal_id] <br />\n";
+      } else if ( $events[$i]['cal_date'] == $date &&
+        $events[$i]['cal_time'] < $cutoff ) {
+        $ret[$n++] = $events[$i];
+        //echo "added event {$events[$i][cal_id]} <br />\n";
+      } else if ( $events[$i]['cal_date'] == $prev_day &&
+        $events[$i]['cal_time'] >= $cutoff ) {
+        $ret[$n++] = $events[$i];
+        //echo "added event {$events[$i][cal_id]} <br />\n";
+      }
+    } else {
+      //TZ < 0
+      $cutoff = ( 0 - $TZ_OFFSET ) * 10000;
+      //echo "<br />\ncal_time " . $events[$i]['cal_time'] . "<br />\n";
+      $sy = substr ( $date, 0, 4 );
+      $sm = substr ( $date, 4, 2 );
+      $sd = substr ( $date, 6, 2 );
+      $next_day = date ( ( "Ymd" ), mktime ( 3, 0, 0, $sm, $sd + 1, $sy ) );
+      //echo "next_date = $next_day <br />\n";
+      if ( $events[$i]['cal_time'] == -1 ) {
+  if ( $events[$i]['cal_date'] == $date ) {
+          $ret[$n++] = $events[$i];
+          //echo "added event $events[$i][cal_id] <br />\n";
+        }
+      } else {
+  if ( $events[$i]['cal_date'] == $date &&
+          $events[$i]['cal_time'] > $cutoff ) {
+          $ret[$n++] = $events[$i];
+          //echo "added event $events[$i][cal_id] <br />\n";
+        } else if ( $events[$i]['cal_date'] == $next_day &&
+          $events[$i]['cal_time'] <= $cutoff ) {
+          $ret[$n++] = $events[$i];
+          //echo "added event $events[$i][cal_id] <br />\n";
+        }
+      }
+    }
+  }
+  return $ret;
+}
+
+/**
+ * Reads events visible to a user.
+ *
+ * Includes layers and possibly public access if enabled
+ *
+ * @param string $user          Username
+ * @param bool   $want_repeated Get repeating events?
+ * @param string $date_filter   SQL phrase starting with AND, to be appended to
+ *                              the WHERE clause.  May be empty string.
+ * @param int    $cat_id        Category ID to filter on.  May be empty.
+ *
+ * @return array Array of events sorted by time of day
+ */
+function query_events ( $user, $want_repeated, $date_filter, $cat_id = '' ) {
+  global $login;
+  global $layers, $public_access_default_visible;
+  $result = array ();
+  $layers_byuser = array ();
+
+  $sql = "SELECT webcal_entry.cal_name, webcal_entry.cal_description, "
+    . "webcal_entry.cal_date, webcal_entry.cal_time, "
+    . "webcal_entry.cal_id, webcal_entry.cal_ext_for_id, "
+    . "webcal_entry.cal_priority, "
+    . "webcal_entry.cal_access, webcal_entry.cal_duration, "
+    . "webcal_entry_user.cal_status, "
+    . "webcal_entry_user.cal_category, "
+    . "webcal_entry_user.cal_login ";
+  if ( $want_repeated ) {
+    $sql .= ", "
+      . "webcal_entry_repeats.cal_type, webcal_entry_repeats.cal_end, "
+      . "webcal_entry_repeats.cal_frequency, webcal_entry_repeats.cal_days "
+      . "FROM webcal_entry, webcal_entry_repeats, webcal_entry_user "
+      . "WHERE webcal_entry.cal_id = webcal_entry_repeats.cal_id AND ";
+  } else {
+    $sql .= "FROM webcal_entry, webcal_entry_user WHERE ";
+  }
+  $sql .= "webcal_entry.cal_id = webcal_entry_user.cal_id " .
+    "AND webcal_entry_user.cal_status IN ('A','W') ";
+
+  if ( $cat_id != '' ) $sql .= "AND webcal_entry_user.cal_category LIKE '$cat_id' ";
+
+  if ( strlen ( $user ) > 0 )
+    $sql .= "AND (webcal_entry_user.cal_login = '" . $user . "' ";
+
+  if ( $user == $login && strlen ( $user ) > 0 ) {
+    if ($layers) foreach ($layers as $layer) {
+      $layeruser = $layer['cal_layeruser'];
+
+      $sql .= "OR webcal_entry_user.cal_login = '" . $layeruser . "' ";
+
+      // while we are parsing the whole layers array, build ourselves
+      // a new array that will help when we have to check for dups
+      $layers_byuser["$layeruser"] = $layer['cal_dups'];
+    }
+  }
+  if ( $user == $login && strlen ( $user ) &&
+    $public_access_default_visible == 'Y' ) {
+    $sql .= "OR webcal_entry_user.cal_login = '__public__' ";
+  }
+  if ( strlen ( $user ) > 0 )
+    $sql .= ") ";
+  $sql .= $date_filter;
+
+  // now order the results by time and by entry id.
+  $sql .= " ORDER BY webcal_entry.cal_time, webcal_entry.cal_id";
+
+  //echo "<strong>SQL:</strong> $sql<br />\n";
+  
+  $res = dbi_query ( $sql );
+  if ( $res ) {
+    $i = 0;
+    $checkdup_id = -1;
+    $first_i_this_id = -1;
+
+    while ( $row = dbi_fetch_row ( $res ) ) {
+
+      if ($row[9] == 'R' || $row[9] == 'D') {
+        continue;  // don't show rejected/deleted ones
+      }
+      $item = array (
+        "cal_name" => $row[0],
+        "cal_description" => $row[1],
+        "cal_date" => $row[2],
+        "cal_time" => $row[3],
+        "cal_id"   => $row[4],
+        "cal_ext_for_id"   => $row[5],
+        "cal_priority" => $row[6],
+        "cal_access" => $row[7],
+        "cal_duration" => $row[8],
+        "cal_status" => $row[9],
+        "cal_category" => $row[10],
+        "cal_login" => $row[11],
+  "cal_exceptions" => array()
+        );
+      if ( $want_repeated && ! empty ( $row[12] ) ) {
+        $item['cal_type'] = empty ( $row[12] ) ? "" : $row[12];
+        $item['cal_end'] = empty ( $row[13] ) ? "" : $row[13];
+        $item['cal_frequency'] = empty ( $row[14] ) ? "" : $row[14];
+        $item['cal_days'] = empty ( $row[15] ) ? "" : $row[15];
+      }
+
+      if ( $item['cal_id'] != $checkdup_id ) {
+        $checkdup_id = $item['cal_id'];
+        $first_i_this_id = $i;
+      }
+
+      if ( $item['cal_login'] == $user ) {
+        // Insert this one before all other ones with this ID.
+        my_array_splice ( $result, $first_i_this_id, 0, array($item) );
+        $i++;
+
+        if ($first_i_this_id + 1 < $i) {
+          // There's another one with the same ID as the one we inserted.
+          // Check for dup and if so, delete it.
+          $other_item = $result[$first_i_this_id + 1];
+          if ($layers_byuser[$other_item['cal_login']] == 'N') {
+            // NOTE: array_splice requires PHP4
+            my_array_splice ( $result, $first_i_this_id + 1, 1, "" );
+            $i--;
+          }
+        }
+      } else {
+        if ($i == $first_i_this_id
+          || ( ! empty ( $layers_byuser[$item['cal_login']] ) &&
+          $layers_byuser[$item['cal_login']] != 'N' ) ) {
+          // This item either is the first one with its ID, or allows dups.
+          // Add it to the end of the array.
+          $result [$i++] = $item;
+        }
+      }
+    }
+    dbi_free_result ( $res );
+  }
+
+  // Now load event exceptions and store as array in 'cal_exceptions' field
+  if ( $want_repeated ) {
+    for ( $i = 0; $i < count ( $result ); $i++ ) {
+      if ( ! empty ( $result[$i]['cal_id'] ) ) {
+        $res = dbi_query ( "SELECT cal_date FROM webcal_entry_repeats_not " .
+            "WHERE cal_id = " . $result[$i]['cal_id'] );
+        while ( $row = dbi_fetch_row ( $res ) ) {
+          $result[$i]['cal_exceptions'][] = $row[0];
+        }
+      }
+    }
+  }
+
+  return $result;
+}
+
+/**
+ * Reads all the repeated events for a user.
+ *
+ * This is only called once per page request to improve performance. All the
+ * events get loaded into the array <var>$repeated_events</var> sorted by time of day (not
+ * date).
+ *
+ * This will load all the repeated events into memory.
+ *
+ * <b>Notes:</b>
+ * - To get which events repeat on a specific date, use
+ *   {@link get_repeating_entries()}.
+ * - To get all the dates that one specific event repeats on, call
+ *   {@link get_all_dates()}.
+ *
+ * @param string $user   Username
+ * @param int    $cat_id Category ID to filter on  (May be empty)
+ * @param string $date   Cutoff date for repeating event endtimes in YYYYMMDD
+ *                       format (may be empty)
+ *
+ * @return Array of repeating events sorted by time of day
+ *
+ * @uses query_events
+ */
+function read_repeated_events ( $user, $cat_id = '', $date = ''  ) {
+  global $login;
+  global $layers;
+
+  $filter = ($date != '') ? "AND (webcal_entry_repeats.cal_end >= $date OR webcal_entry_repeats.cal_end IS NULL) " : '';
+  return query_events ( $user, true, $filter, $cat_id );
+}
+
+/**
+ * Returns all the dates a specific event will fall on accounting for the repeating.
+ *
+ * Any event with no end will be assigned one.
+ *
+ * @param string $date     Initial date in raw format
+ * @param string $rpt_type Repeating type as stored in the database
+ * @param string $end      End date
+ * @param string $days     Days events occurs on (for weekly)
+ * @param array  $ex_dates Array of exception dates for this event in YYYYMMDD format
+ * @param int    $freq     Frequency of repetition
+ *
+ * @return array Array of dates (in UNIX time format)
+ */
+function get_all_dates ( $date, $rpt_type, $end, $days, $ex_days, $freq=1 ) {
+  global $conflict_repeat_months, $days_per_month, $ldays_per_month;
+  global $ONE_DAY;
+  //echo "get_all_dates ( $date, '$rpt_type', $end, '$days', [array], $freq ) <br>\n";
+  $currentdate = floor($date/$ONE_DAY)*$ONE_DAY;
+  $realend = floor($end/$ONE_DAY)*$ONE_DAY;
+  $dateYmd = date ( "Ymd", $date );
+  if ($end=='NULL') {
+    // Check for $conflict_repeat_months months into future for conflicts
+    $thismonth = substr($dateYmd, 4, 2);
+    $thisyear = substr($dateYmd, 0, 4);
+    $thisday = substr($dateYmd, 6, 2);
+    $thismonth += $conflict_repeat_months;
+    if ($thismonth > 12) {
+      $thisyear++;
+      $thismonth -= 12;
+    }
+    $realend = mktime(3,0,0,$thismonth,$thisday,$thisyear);
+  }
+  $ret = array();
+  $ret[0] = $date;
+  //do iterative checking here.
+  //I floored the $realend so I check it against the floored date
+  if ($rpt_type && $currentdate < $realend) {
+    $cdate = $date;
+    if (!$freq) $freq = 1;
+    $n = 1;
+    if ($rpt_type == 'daily') {
+      //we do inclusive counting on end dates.
+      $cdate += $ONE_DAY * $freq;
+      while ($cdate <= $realend+$ONE_DAY) {
+        if ( ! is_exception ( $cdate, $ex_days ) )
+          $ret[$n++]=$cdate;
+        $cdate += $ONE_DAY * $freq;
+      }
+    } else if ($rpt_type == 'weekly') {
+      $daysarray = array();
+      $r=0;
+      $dow = date("w",$date);
+      $cdate = $date - ($dow * $ONE_DAY);
+      for ($i = 0; $i < 7; $i++) {
+        $isDay = substr($days, $i, 1);
+        if (strcmp($isDay,"y")==0) {
+          $daysarray[$r++]=$i * $ONE_DAY;
+        }
+      }
+      //we do inclusive counting on end dates.
+      while ($cdate <= $realend+$ONE_DAY) {
+        //add all of the days of the week.
+        for ($j=0; $j<$r;$j++) {
+          $td = $cdate + $daysarray[$j];
+          if ($td >= $date) {
+            if ( ! is_exception ( $td, $ex_days ) )
+              $ret[$n++] = $td;
+          }
+        }
+        //skip to the next week in question.
+        $cdate += ( $ONE_DAY * 7 ) * $freq;
+      }
+    } else if ($rpt_type == 'monthlyByDay') {
+      $dow  = date('w', $date);
+      $thismonth = substr($dateYmd, 4, 2);
+      $thisyear  = substr($dateYmd, 0, 4);
+      $week  = floor(date("d", $date)/7);
+      $thismonth+=$freq;
+      //dow1 is the weekday that the 1st of the month falls on
+      $dow1 = date('w',mktime (3,0,0,$thismonth,1,$thisyear));
+      $t = $dow - $dow1;
+      if ($t < 0) $t += 7;
+      $day = 7*$week + $t + 1;
+      $cdate = mktime (3,0,0,$thismonth,$day,$thisyear);
+      while ($cdate <= $realend+$ONE_DAY) {
+        if ( ! is_exception ( $cdate, $ex_days ) )
+          $ret[$n++] = $cdate;
+        $thismonth+=$freq;
+        //dow1 is the weekday that the 1st of the month falls on
+        $dow1time = mktime ( 3, 0, 0, $thismonth, 1, $thisyear );
+        $dow1 = date ( 'w', $dow1time );
+        $t = $dow - $dow1;
+        if ($t < 0) $t += 7;
+        $day = 7*$week + $t + 1;
+        $cdate = mktime (3,0,0,$thismonth,$day,$thisyear);
+      }
+    } else if ($rpt_type == 'monthlyByDayR') {
+      // by weekday of month reversed (i.e., last Monday of month)
+      $dow  = date('w', $date);
+      $thisday = substr($dateYmd, 6, 2);
+      $thismonth = substr($dateYmd, 4, 2);
+      $thisyear  = substr($dateYmd, 0, 4);
+      // get number of days in this month
+      $daysthismonth = $thisyear % 4 == 0 ? $ldays_per_month[$thismonth] :
+        $days_per_month[$thismonth];
+      // how many weekdays like this one remain in the month?
+      // 0=last one, 1=one more after this one, etc.
+      $whichWeek = floor ( ( $daysthismonth - $thisday ) / 7 );
+      // find first repeat date
+      $thismonth += $freq;
+      if ( $thismonth > 12 ) {
+        $thisyear++;
+        $thismonth -= 12;
+      }
+      // get weekday for last day of month
+      $dowLast += date('w',mktime (3,0,0,$thismonth + 1, -1,$thisyear));
+      if ( $dowLast >= $dow ) {
+        // last weekday is in last week of this month
+        $day = $daysthismonth - ( $dowLast - $dow ) -
+          ( 7 * $whichWeek );
+      } else {
+        // last weekday is NOT in last week of this month
+        $day = $daysthismonth - ( $dowLast - $dow ) -
+          ( 7 * ( $whichWeek + 1 ) );
+      }
+      $cdate = mktime (3,0,0,$thismonth,$day,$thisyear);
+      while ($cdate <= $realend+$ONE_DAY) {
+        if ( ! is_exception ( $cdate, $ex_days ) )
+          $ret[$n++] = $cdate;
+        $thismonth += $freq;
+        if ( $thismonth > 12 ) {
+          $thisyear++;
+          $thismonth -= 12;
+        }
+        // get weekday for last day of month
+        $dowLast += date('w',mktime (3,0,0,$thismonth + 1, -1,$thisyear));
+        if ( $dowLast >= $dow ) {
+          // last weekday is in last week of this month
+          $day = $daysthismonth - ( $dowLast - $dow ) -
+            ( 7 * $whichWeek );
+        } else {
+          // last weekday is NOT in last week of this month
+          $day = $daysthismonth - ( $dowLast - $dow ) -
+            ( 7 * ( $whichWeek + 1 ) );
+        }
+        $cdate = mktime (3,0,0,$thismonth,$day,$thisyear);
+      }
+    } else if ($rpt_type == 'monthlyByDate') {
+      $thismonth = substr($dateYmd, 4, 2);
+      $thisyear  = substr($dateYmd, 0, 4);
+      $thisday   = substr($dateYmd, 6, 2);
+      $hour      = date('H',$date);
+      $minute    = date('i',$date);
+
+      $thismonth += $freq;
+      $cdate = mktime (3,0,0,$thismonth,$thisday,$thisyear);
+      while ($cdate <= $realend+$ONE_DAY) {
+        if ( ! is_exception ( $cdate, $ex_days ) )
+          $ret[$n++] = $cdate;
+        $thismonth += $freq;
+        $cdate = mktime (3,0,0,$thismonth,$thisday,$thisyear);
+      }
+    } else if ($rpt_type == 'yearly') {
+      $thismonth = substr($dateYmd, 4, 2);
+      $thisyear  = substr($dateYmd, 0, 4);
+      $thisday   = substr($dateYmd, 6, 2);
+      $hour      = date('H',$date);
+      $minute    = date('i',$date);
+
+      $thisyear += $freq;
+      $cdate = mktime (3,0,0,$thismonth,$thisday,$thisyear);
+      while ($cdate <= $realend+$ONE_DAY) {
+        if ( ! is_exception ( $cdate, $ex_days ) )
+          $ret[$n++] = $cdate;
+        $thisyear += $freq;
+        $cdate = mktime (3,0,0,$thismonth,$thisday,$thisyear);
+      }
+    }
+  }
+  return $ret;
+}
+
+/**
+ * Gets all the repeating events for the specified date.
+ *
+ * <b>Note:</b>
+ * The global variable <var>$repeated_events</var> needs to be
+ * set by calling {@link read_repeated_events()} first.
+ *
+ * @param string $user           Username
+ * @param string $date           Date to get events for in YYYYMMDD format
+ * @param bool   $get_unapproved Include unapproved events in results?
+ *
+ * @return mixed The query result resource on queries (which can then be
+ *               passed to {@link dbi_fetch_row()} to obtain the results), or
+ *               true/false on insert or delete queries.
+ *
+ * @global array Array of repeating events retreived using {@link read_repeated_events()}
+ */
+function get_repeating_entries ( $user, $dateYmd, $get_unapproved=true ) {
+  global $repeated_events;
+  $n = 0;
+  $ret = array ();
+  //echo count($repeated_events)."<br />\n";
+  for ( $i = 0; $i < count ( $repeated_events ); $i++ ) {
+    if ( $repeated_events[$i]['cal_status'] == 'A' || $get_unapproved ) {
+      if ( repeated_event_matches_date ( $repeated_events[$i], $dateYmd ) ) {
+        // make sure this is not an exception date...
+        $unixtime = date_to_epoch ( $dateYmd );
+        if ( ! is_exception ( $unixtime, $repeated_events[$i]['cal_exceptions'] ) )
+          $ret[$n++] = $repeated_events[$i];
+      }
+    }
+  }
+  return $ret;
+}
+
+/**
+ * Determines whether the event passed in will fall on the date passed.
+ *
+ * @param array  $event   The event as an array
+ * @param string $dateYmd Date to check in YYYYMMDD format
+ *
+ * @return bool Does <var>$event</var> occur on <var>$dateYmd</var>?
+ */
+function repeated_event_matches_date($event,$dateYmd) {
+  global $days_per_month, $ldays_per_month, $ONE_DAY;
+  // only repeat after the beginning, and if there is an end
+  // before the end
+  $date = date_to_epoch ( $dateYmd );
+  $thisyear = substr($dateYmd, 0, 4);
+  $start = date_to_epoch ( $event['cal_date'] );
+  $end   = date_to_epoch ( $event['cal_end'] );
+  $freq = $event['cal_frequency'];
+  $thismonth = substr($dateYmd, 4, 2);
+  if ($event['cal_end'] && $dateYmd > date("Ymd",$end) )
+    return false;
+  if ( $dateYmd <= date("Ymd",$start) )
+    return false;
+  $id = $event['cal_id'];
+
+  if ($event['cal_type'] == 'daily') {
+    if ( (floor(($date - $start)/$ONE_DAY)%$freq) )
+      return false;
+    return true;
+  } else if ($event['cal_type'] == 'weekly') {
+    $dow  = date("w", $date);
+    $dow1 = date("w", $start);
+    $isDay = substr($event['cal_days'], $dow, 1);
+    $wstart = $start - ($dow1 * $ONE_DAY);
+    if (floor(($date - $wstart)/604800)%$freq)
+      return false;
+    return (strcmp($isDay,"y") == 0);
+  } else if ($event['cal_type'] == 'monthlyByDay') {
+    $dowS = date("w", $start);
+    $dow  = date("w", $date);
+    // do this comparison first in hopes of best performance
+    if ( $dowS != $dow )
+      return false;
+    $mthS = date("m", $start);
+    $yrS  = date("Y", $start);
+    $dayS  = floor(date("d", $start));
+    $dowS1 = ( date ( "w", $start - ( $ONE_DAY * ( $dayS - 1 ) ) ) + 35 ) % 7;
+    $days_in_first_weekS = ( 7 - $dowS1 ) % 7;
+    $whichWeekS = floor ( ( $dayS - $days_in_first_weekS ) / 7 );
+    if ( $dowS >= $dowS1 && $days_in_first_weekS )
+      $whichWeekS++;
+    //echo "dayS=$dayS;dowS=$dowS;dowS1=$dowS1;wWS=$whichWeekS<br />\n";
+    $mth  = date("m", $date);
+    $yr   = date("Y", $date);
+    $day  = date("d", $date);
+    $dow1 = ( date ( "w", $date - ( $ONE_DAY * ( $day - 1 ) ) ) + 35 ) % 7;
+    $days_in_first_week = ( 7 - $dow1 ) % 7;
+    $whichWeek = floor ( ( $day - $days_in_first_week ) / 7 );
+    if ( $dow >= $dow1 && $days_in_first_week )
+      $whichWeek++;
+    //echo "day=$day;dow=$dow;dow1=$dow1;wW=$whichWeek<br />\n";
+
+    if ((($yr - $yrS)*12 + $mth - $mthS) % $freq)
+      return false;
+
+    return ( $whichWeek == $whichWeekS );
+  } else if ($event['cal_type'] == 'monthlyByDayR') {
+    $dowS = date("w", $start);
+    $dow  = date("w", $date);
+    // do this comparison first in hopes of best performance
+    if ( $dowS != $dow )
+      return false;
+
+    $dayS = ceil(date("d", $start));
+    $mthS = ceil(date("m", $start));
+    $yrS  = date("Y", $start);
+    $daysthismonthS = $mthS % 4 == 0 ? $ldays_per_month[$mthS] :
+      $days_per_month[$mthS];
+    $whichWeekS = floor ( ( $daysthismonthS - $dayS ) / 7 );
+
+    $day = ceil(date("d", $date));
+    $mth = ceil(date("m", $date));
+    $yr  = date("Y", $date);
+    $daysthismonth = $mth % 4 == 0 ? $ldays_per_month[$mth] :
+      $days_per_month[$mth];
+    $whichWeek = floor ( ( $daysthismonth - $day ) / 7 );
+
+    if ((($yr - $yrS)*12 + $mth - $mthS) % $freq)
+      return false;
+
+    return ( $whichWeekS == $whichWeek );
+  } else if ($event['cal_type'] == 'monthlyByDate') {
+    $mthS = date("m", $start);
+    $yrS  = date("Y", $start);
+
+    $mth  = date("m", $date);
+    $yr   = date("Y", $date);
+
+    if ((($yr - $yrS)*12 + $mth - $mthS) % $freq)
+      return false;
+
+    return (date("d", $date) == date("d", $start));
+  }
+  else if ($event['cal_type'] == 'yearly') {
+    $yrS = date("Y", $start);
+    $yr  = date("Y", $date);
+
+    if (($yr - $yrS)%$freq)
+      return false;
+
+    return (date("dm", $date) == date("dm", $start));
+  } else {
+    // unknown repeat type
+    return false;
+  }
+  return false;
+}
+
+/**
+ * Converts a date to a timestamp.
+ * 
+ * @param string $d Date in YYYYMMDD format
+ *
+ * @return int Timestamp representing 3:00 (or 4:00 if during Daylight Saving
+ *             Time) in the morning on that day
+ */
+function date_to_epoch ( $d ) {
+  if ( $d == 0 )
+    return 0;
+  $T = mktime ( 3, 0, 0, substr ( $d, 4, 2 ), substr ( $d, 6, 2 ), substr ( $d, 0, 4 ) );
+  $lt = localtime($T);
+  if ($lt[8]) {
+    return mktime ( 4, 0, 0, substr ( $d, 4, 2 ), substr ( $d, 6, 2 ), substr ( $d, 0, 4 ) );
+  } else {
+    return $T;
+  }
+}
+
+/**
+ * Checks if a date is an exception for an event.
+ *
+ * @param string $date   Date in YYYYMMDD format
+ * @param array  $exdays Array of dates in YYYYMMDD format
+ *
+ * @ignore
+ */
+function is_exception ( $date, $ex_days ) {
+  $size = count ( $ex_days );
+  $count = 0;
+  $date = date ( "Ymd", $date );
+  //echo "Exception $date check.. count is $size <br />\n";
+  while ( $count < $size ) {
+    //echo "Exception date: $ex_days[$count] <br />\n";
+    if ( $date == $ex_days[$count++] )
+      return true;
+  }
+  return false;
+}
+
+/**
+ * Gets the Sunday of the week that the specified date is in.
+ *
+ * If the date specified is a Sunday, then that date is returned.
+ *
+ * @param int $year  Year
+ * @param int $month Month (1-12)
+ * @param int $day   Day of the month
+ *
+ * @return int The date (in UNIX timestamp format)
+ *
+ * @see get_monday_before
+ */
+function get_sunday_before ( $year, $month, $day ) {
+  $weekday = date ( "w", mktime ( 3, 0, 0, $month, $day, $year ) );
+  $newdate = mktime ( 3, 0, 0, $month, $day - $weekday, $year );
+  return $newdate;
+}
+
+/** 
+ * Gets the Monday of the week that the specified date is in.
+ *
+ * If the date specified is a Monday, then that date is returned.
+ *
+ * @param int $year  Year
+ * @param int $month Month (1-12)
+ * @param int $day   Day of the month
+ *
+ * @return int The date (in UNIX timestamp format)
+ *
+ * @see get_sunday_before
+ */
+function get_monday_before ( $year, $month, $day ) {
+  $weekday = date ( "w", mktime ( 3, 0, 0, $month, $day, $year ) );
+  if ( $weekday == 0 )
+    return mktime ( 3, 0, 0, $month, $day - 6, $year );
+  if ( $weekday == 1 )
+    return mktime ( 3, 0, 0, $month, $day, $year );
+  return mktime ( 3, 0, 0, $month, $day - ( $weekday - 1 ), $year );
+}
+
+/**
+ * Returns the week number for specified date.
+ * 
+ * Depends on week numbering settings.
+ *
+ * @param int $date Date in UNIX timestamp format
+ *
+ * @return string The week number of the specified date
+ */
+function week_number ( $date ) {
+  $tmp = getdate($date);
+  $iso = gregorianToISO($tmp['mday'], $tmp['mon'], $tmp['year']);
+  $parts = explode('-',$iso);
+  $week_number = intval($parts[1]);
+  return sprintf("%02d",$week_number);
+}
+
+/**
+ * Generates the HTML for an add/edit/delete icon.
+ *
+ * This function is not yet used.  Some of the places that will call it have to
+ * be updated to also get the event owner so we know if the current user has
+ * access to edit and delete.
+ *
+ * @param int  $id         Event ID
+ * @param bool $can_edit   Can this user edit this event?
+ * @param bool $can_delete Can this user delete this event?
+ *
+ * @return HTML for add/edit/delete icon.
+ *
+ * @ignore
+ */
+function icon_text ( $id, $can_edit, $can_delete ) {
+  global $readonly, $is_admin;
+  $ret = "<a title=\"" . 
+  translate("View this entry") . "\" href=\"view_entry.php?id=$id\"><img src=\"view.gif\" alt=\"" . 
+  translate("View this entry") . "\" style=\"border-width:0px; width:10px; height:10px;\" /></a>";
+  if ( $can_edit && $readonly == "N" )
+    $ret .= "<a title=\"" . 
+  translate("Edit entry") . "\" href=\"edit_entry.php?id=$id\"><img src=\"edit.gif\" alt=\"" . 
+  translate("Edit entry") . "\" style=\"border-width:0px; width:10px; height:10px;\" /></a>";
+  if ( $can_delete && ( $readonly == "N" || $is_admin ) )
+    $ret .= "<a title=\"" . 
+      translate("Delete entry") . "\" href=\"del_entry.php?id=$id\" onclick=\"return confirm('" .
+  translate("Are you sure you want to delete this entry?") . "\\n\\n" . 
+  translate("This will delete this entry for all users.") . "');\"><img src=\"delete.gif\" alt=\"" . 
+  translate("Delete entry") . "\" style=\"border-width:0px; width:10px; height:10px;\" /></a>";
+  return $ret;
+}
+
+/**
+ * Prints all the calendar entries for the specified user for the specified date.
+ *
+ * If we are displaying data from someone other than
+ * the logged in user, then check the access permission of the entry.
+ *
+ * @param string $date Date in YYYYMMDD format
+ * @param string $user Username
+ * @param bool   $ssi  Is this being called from week_ssi.php?
+ */
+function print_date_entries ( $date, $user, $ssi ) {
+  global $events, $readonly, $is_admin, $login,
+    $public_access, $public_access_can_add, $cat_id;
+  $cnt = 0;
+  $get_unapproved = ( $GLOBALS["DISPLAY_UNAPPROVED"] == "Y" );
+  // public access events always must be approved before being displayed
+  if ( $user == "__public__" )
+    $get_unapproved = false;
+
+  $year = substr ( $date, 0, 4 );
+  $month = substr ( $date, 4, 2 );
+  $day = substr ( $date, 6, 2 );
+  $dateu = mktime ( 3, 0, 0, $month, $day, $year );
+  $can_add = ( $readonly == "N" || $is_admin );
+  if ( $public_access == "Y" && $public_access_can_add != "Y" &&
+    $login == "__public__" )
+    $can_add = false;
+  if ( $readonly == 'Y' )
+    $can_add = false;
+  if ( ! $ssi && $can_add ) {
+    print "<a title=\"" .
+      translate("New Entry") . "\" href=\"edit_entry.php?";
+    if ( strcmp ( $user, $GLOBALS["login"] ) )
+      print "user=$user&";
+    if ( ! empty ( $cat_id ) )
+      print "cat_id=$cat_id&";
+    print "date=$date\"><img src=\"new.gif\" alt=\"" .
+      translate("New Entry") . "\" class=\"new\" /></a>";
+    $cnt++;
+  }
+  if ( ! $ssi ) {
+    echo "<a class=\"dayofmonth\" href=\"day.php?";
+    if ( strcmp ( $user, $GLOBALS["login"] ) )
+      echo "user=$user&";
+    if ( ! empty ( $cat_id ) )
+      echo "cat_id=$cat_id&";
+    echo "date=$date\">$day</a>";
+    if ( $GLOBALS["DISPLAY_WEEKNUMBER"] == "Y" &&
+      date ( "w", $dateu ) == $GLOBALS["WEEK_START"] ) {
+      echo " <a title=\"" .
+        translate("Week") . " " . week_number ( $dateu ) . "\" href=\"week.php?date=$date";
+      if ( strcmp ( $user, $GLOBALS["login"] ) )
+        echo "&user=$user";
+      if ( ! empty ( $cat_id ) )
+      echo "&cat_id=$cat_id";
+       echo "\" class=\"weeknumber\">";
+      echo "(" .
+        translate("Week") . " " . week_number ( $dateu ) . ")</a>";
+    }
+    print "<br />\n";
+    $cnt++;
+  }
+  
+  // get all the repeating events for this date and store in array $rep
+  $rep = get_repeating_entries ( $user, $date, $get_unapproved );
+  $cur_rep = 0;
+
+  // get all the non-repeating events for this date and store in $ev
+  $ev = get_entries ( $user, $date, $get_unapproved );
+
+  for ( $i = 0; $i < count ( $ev ); $i++ ) {
+    // print out any repeating events that are before this one...
+    while ( $cur_rep < count ( $rep ) &&
+      $rep[$cur_rep]['cal_time'] < $ev[$i]['cal_time'] ) {
+      if ( $get_unapproved || $rep[$cur_rep]['cal_status'] == 'A' ) {
+        if ( ! empty ( $rep[$cur_rep]['cal_ext_for_id'] ) ) {
+          $viewid = $rep[$cur_rep]['cal_ext_for_id'];
+          $viewname = $rep[$cur_rep]['cal_name'] . " (" .
+            translate("cont.") . ")";
+        } else {
+          $viewid = $rep[$cur_rep]['cal_id'];
+          $viewname = $rep[$cur_rep]['cal_name'];
+        }
+        print_entry ( $viewid,
+          $date, $rep[$cur_rep]['cal_time'], $rep[$cur_rep]['cal_duration'],
+          $viewname, $rep[$cur_rep]['cal_description'],
+          $rep[$cur_rep]['cal_status'], $rep[$cur_rep]['cal_priority'],
+          $rep[$cur_rep]['cal_access'], $rep[$cur_rep]['cal_login'],
+          $rep[$cur_rep]['cal_category'] );
+        $cnt++;
+      }
+      $cur_rep++;
+    }
+    if ( $get_unapproved || $ev[$i]['cal_status'] == 'A' ) {
+      if ( ! empty ( $ev[$i]['cal_ext_for_id'] ) ) {
+        $viewid = $ev[$i]['cal_ext_for_id'];
+        $viewname = $ev[$i]['cal_name'] . " (" .
+          translate("cont.") . ")";
+      } else {
+        $viewid = $ev[$i]['cal_id'];
+        $viewname = $ev[$i]['cal_name'];
+      }
+      print_entry ( $viewid,
+        $date, $ev[$i]['cal_time'], $ev[$i]['cal_duration'],
+        $viewname, $ev[$i]['cal_description'],
+        $ev[$i]['cal_status'], $ev[$i]['cal_priority'],
+        $ev[$i]['cal_access'], $ev[$i]['cal_login'],
+        $ev[$i]['cal_category'] );
+      $cnt++;
+    }
+  }
+  // print out any remaining repeating events
+  while ( $cur_rep < count ( $rep ) ) {
+    if ( $get_unapproved || $rep[$cur_rep]['cal_status'] == 'A' ) {
+      if ( ! empty ( $rep[$cur_rep]['cal_ext_for_id'] ) ) {
+        $viewid = $rep[$cur_rep]['cal_ext_for_id'];
+        $viewname = $rep[$cur_rep]['cal_name'] . " (" .
+          translate("cont.") . ")";
+      } else {
+        $viewid = $rep[$cur_rep]['cal_id'];
+        $viewname = $rep[$cur_rep]['cal_name'];
+      }
+      print_entry ( $viewid,
+        $date, $rep[$cur_rep]['cal_time'], $rep[$cur_rep]['cal_duration'],
+        $viewname, $rep[$cur_rep]['cal_description'],
+        $rep[$cur_rep]['cal_status'], $rep[$cur_rep]['cal_priority'],
+        $rep[$cur_rep]['cal_access'], $rep[$cur_rep]['cal_login'],
+        $rep[$cur_rep]['cal_category'] );
+      $cnt++;
+    }
+    $cur_rep++;
+  }
+  if ( $cnt == 0 )
+    echo " "; // so the table cell has at least something
+}
+
+/**
+ * Checks to see if two events overlap.
+ *
+ * @param string $time1 Time 1 in HHMMSS format
+ * @param int    $duration1 Duration 1 in minutes
+ * @param string $time2 Time 2 in HHMMSS format
+ * @param int    $duration2 Duration 2 in minutes
+ *
+ * @return bool True if the two times overlap, false if they do not
+ */
+function times_overlap ( $time1, $duration1, $time2, $duration2 ) {
+  //echo "times_overlap ( $time1, $duration1, $time2, $duration2 )<br />\n";
+  $hour1 = (int) ( $time1 / 10000 );
+  $min1 = ( $time1 / 100 ) % 100;
+  $hour2 = (int) ( $time2 / 10000 );
+  $min2 = ( $time2 / 100 ) % 100;
+  // convert to minutes since midnight
+  // remove 1 minute from duration so 9AM-10AM will not conflict with 10AM-11AM
+  if ( $duration1 > 0 )
+    $duration1 -= 1;
+  if ( $duration2 > 0 )
+    $duration2 -= 1;
+  $tmins1start = $hour1 * 60 + $min1;
+  $tmins1end = $tmins1start + $duration1;
+  $tmins2start = $hour2 * 60 + $min2;
+  $tmins2end = $tmins2start + $duration2;
+  //echo "tmins1start=$tmins1start, tmins1end=$tmins1end, tmins2start=$tmins2start, tmins2end=$tmins2end<br />\n";
+  if ( ( $tmins1start >= $tmins2end ) || ( $tmins2start >= $tmins1end ) )
+    return false;
+  return true;
+}
+
+/**
+ * Checks for conflicts.
+ *
+ * Find overlaps between an array of dates and the other dates in the database.
+ *
+ * Limits on number of appointments: if enabled in System Settings
+ * (<var>$limit_appts</var> global variable), too many appointments can also
+ * generate a scheduling conflict.
+ * 
+ * @todo Update this to handle exceptions to repeating events
+ *
+ * @param array  $dates        Array of dates in YYYYMMDD format that is
+ *                             checked for overlaps.
+ * @param int    $duration     Event duration in minutes
+ * @param int    $hour         Hour of event (0-23)
+ * @param int    $minute       Minute of the event (0-59)
+ * @param array  $participants Array of users whose calendars are to be checked
+ * @param string $login        The current user name
+ * @param int    $id           Current event id (this keeps overlaps from
+ *                             wrongly checking an event against itself)
+ *
+ * @return Empty string for no conflicts or return the HTML of the
+ *         conflicts when one or more are found.
+ */
+function check_for_conflicts ( $dates, $duration, $hour, $minute,
+  $participants, $login, $id ) {
+  global $single_user_login, $single_user;
+  global $repeated_events, $limit_appts, $limit_appts_number;
+  if (!count($dates)) return false;
+
+  $evtcnt = array ();
+
+  $sql = "SELECT distinct webcal_entry_user.cal_login, webcal_entry.cal_time," .
+    "webcal_entry.cal_duration, webcal_entry.cal_name, " .
+    "webcal_entry.cal_id, webcal_entry.cal_ext_for_id, " .
+    "webcal_entry.cal_access, " .
+    "webcal_entry_user.cal_status, webcal_entry.cal_date " .
+    "FROM webcal_entry, webcal_entry_user " .
+    "WHERE webcal_entry.cal_id = webcal_entry_user.cal_id " .
+    "AND (";
+  for ($x = 0; $x < count($dates); $x++) {
+    if ($x != 0) $sql .= " OR ";
+    $sql.="webcal_entry.cal_date = " . date ( "Ymd", $dates[$x] );
+  }
+  $sql .=  ") AND webcal_entry.cal_time >= 0 " .
+    "AND webcal_entry_user.cal_status IN ('A','W') AND ( ";
+  if ( $single_user == "Y" ) {
+     $participants[0] = $single_user_login;
+  } else if ( strlen ( $participants[0] ) == 0 ) {
+     // likely called from a form with 1 user
+     $participants[0] = $login;
+  }
+  for ( $i = 0; $i < count ( $participants ); $i++ ) {
+    if ( $i > 0 )
+      $sql .= " OR ";
+    $sql .= " webcal_entry_user.cal_login = '" . $participants[$i] . "'";
+  }
+  $sql .= " )";
+  // make sure we don't get something past the end date of the
+  // event we are saving.
+  //echo "SQL: $sql<br />\n";
+  $conflicts = "";
+  $res = dbi_query ( $sql );
+  $found = array();
+  $count = 0;
+  if ( $res ) {
+    $time1 = sprintf ( "%d%02d00", $hour, $minute );
+    $duration1 = sprintf ( "%d", $duration );
+    while ( $row = dbi_fetch_row ( $res ) ) {
+      //Add to an array to see if it has been found already for the next part.
+      $found[$count++] = $row[4];
+      // see if either event overlaps one another
+      if ( $row[4] != $id && ( empty ( $row[5] ) || $row[5] != $id ) ) {
+        $time2 = $row[1];
+        $duration2 = $row[2];
+        $cntkey = $row[0] . "-" . $row[8];
+        if ( empty ( $evtcnt[$cntkey] ) )
+          $evtcnt[$cntkey] = 0;
+        else
+          $evtcnt[$cntkey]++;
+        $over_limit = 0;
+        if ( $limit_appts == "Y" && $limit_appts_number > 0
+          && $evtcnt[$cntkey] >= $limit_appts_number ) {
+          $over_limit = 1;
+        }
+        if ( $over_limit ||
+          times_overlap ( $time1, $duration1, $time2, $duration2 ) ) {
+          $conflicts .= "<li>";
+          if ( $single_user != "Y" )
+            $conflicts .= "$row[0]: ";
+          if ( $row[6] == 'R' && $row[0] != $login )
+            $conflicts .=  "(" . translate("Private") . ")";
+          else {
+            $conflicts .=  "<a href=\"view_entry.php?id=$row[4]";
+            if ( $row[0] != $login )
+              $conflicts .= "&user=$row[0]";
+            $conflicts .= "\">$row[3]</a>";
+          }
+          if ( $duration2 == ( 24 * 60 ) ) {
+            $conflicts .= " (" . translate("All day event") . ")";
+          } else {
+            $conflicts .= " (" . display_time ( $time2 );
+            if ( $duration2 > 0 )
+              $conflicts .= "-" .
+                display_time ( add_duration ( $time2, $duration2 ) );
+            $conflicts .= ")";
+          }
+          $conflicts .= " on " . date_to_str( $row[8] );
+          if ( $over_limit ) {
+            $tmp = translate ( "exceeds limit of XXX events per day" );
+            $tmp = str_replace ( "XXX", $limit_appts_number, $tmp );
+            $conflicts .= " (" . $tmp . ")";
+          }
+          $conflicts .= "</li>\n";
+        }
+      }
+    }
+    dbi_free_result ( $res );
+  } else {
+    echo translate("Database error") . ": " . dbi_error (); exit;
+  }
+  
+  //echo "<br />\nhello";
+  for ($q=0;$q<count($participants);$q++) {
+    $time1 = sprintf ( "%d%02d00", $hour, $minute );
+    $duration1 = sprintf ( "%d", $duration );
+    //This date filter is not necessary for functional reasons, but it eliminates some of the
+    //events that couldn't possibly match.  This could be made much more complex to put more
+    //of the searching work onto the database server, or it could be dropped all together to put
+    //the searching work onto the client.
+    $date_filter  = "AND (webcal_entry.cal_date <= " . date("Ymd",$dates[count($dates)-1]);
+    $date_filter .= " AND (webcal_entry_repeats.cal_end IS NULL OR webcal_entry_repeats.cal_end >= " . date("Ymd",$dates[0]) . "))";
+    //Read repeated events for the participants only once for a participant for
+    //for performance reasons.
+    $repeated_events=query_events($participants[$q],true,$date_filter);
+    //for ($dd=0; $dd<count($repeated_events); $dd++) {
+    //  echo $repeated_events[$dd]['cal_id'] . "<br />";
+    //}
+    for ($i=0; $i < count($dates); $i++) {
+      $dateYmd = date ( "Ymd", $dates[$i] );
+      $list = get_repeating_entries($participants[$q],$dateYmd);
+      $thisyear = substr($dateYmd, 0, 4);
+      $thismonth = substr($dateYmd, 4, 2);
+      for ($j=0; $j < count($list);$j++) {
+        //okay we've narrowed it down to a day, now I just gotta check the time...
+        //I hope this is right...
+        $row = $list[$j];
+        if ( $row['cal_id'] != $id && ( empty ( $row['cal_ext_for_id'] ) || 
+          $row['cal_ext_for_id'] != $id ) ) {
+          $time2 = $row['cal_time'];
+          $duration2 = $row['cal_duration'];
+          if ( times_overlap ( $time1, $duration1, $time2, $duration2 ) ) {
+            $conflicts .= "<li>";
+            if ( $single_user != "Y" )
+              $conflicts .= $row['cal_login'] . ": ";
+            if ( $row['cal_access'] == 'R' && $row['cal_login'] != $login )
+              $conflicts .=  "(" . translate("Private") . ")";
+            else {
+              $conflicts .=  "<a href=\"view_entry.php?id=" . $row['cal_id'];
+              if ( ! empty ( $user ) && $user != $login )
+                $conflicts .= "&user=$user";
+              $conflicts .= "\">" . $row['cal_name'] . "</a>";
+            }
+            $conflicts .= " (" . display_time ( $time2 );
+            if ( $duration2 > 0 )
+              $conflicts .= "-" .
+                display_time ( add_duration ( $time2, $duration2 ) );
+            $conflicts .= ")";
+            $conflicts .= " on " . date("l, F j, Y", $dates[$i]);
+            $conflicts .= "</li>\n";
+          }
+        }
+      }
+    }
+  }
+   
+  return $conflicts;
+}
+
+/**
+ * Converts a time format HHMMSS (like 130000 for 1PM) into number of minutes past midnight.
+ *
+ * @param string $time Input time in HHMMSS format
+ *
+ * @return int The number of minutes since midnight
+ */
+function time_to_minutes ( $time ) {
+  $h = (int) ( $time / 10000 );
+  $m = (int) ( $time / 100 ) % 100;
+  $num = $h * 60 + $m;
+  return $num;
+}
+
+/**
+ * Calculates which row/slot this time represents.
+ *
+ * This is used in day and week views where hours of the time are separeted
+ * into different cells in a table.
+ *
+ * <b>Note:</b> the global variable <var>$TIME_SLOTS</var> is used to determine
+ * how many time slots there are and how many minutes each is.  This variable
+ * is defined user preferences (or defaulted to admin system settings).
+ *
+ * @param string $time       Input time in HHMMSS format
+ * @param bool   $round_down Should we change 1100 to 1059?
+ *                           (This will make sure a 10AM-100AM appointment just
+ *                           shows up in the 10AM slow and not in the 11AM slot
+ *                           also.)
+ *
+ * @return int The time slot index
+ */
+function calc_time_slot ( $time, $round_down = false ) {
+  global $TIME_SLOTS, $TZ_OFFSET;
+
+  $interval = ( 24 * 60 ) / $TIME_SLOTS;
+  $mins_since_midnight = time_to_minutes ( $time );
+  $ret = (int) ( $mins_since_midnight / $interval );
+  if ( $round_down ) {
+    if ( $ret * $interval == $mins_since_midnight )
+      $ret--;
+  }
+  //echo "$mins_since_midnight / $interval = $ret <br />\n";
+  if ( $ret > $TIME_SLOTS )
+    $ret = $TIME_SLOTS;
+
+  //echo "<br />\ncalc_time_slot($time) = $ret <br />\nTIME_SLOTS = $TIME_SLOTS<br />\n";
+  return $ret;
+}
+
+/**
+ * Generates the HTML for an icon to add a new event.
+ *
+ * @param string $date   Date for new event in YYYYMMDD format
+ * @param int    $hour   Hour of day (0-23)
+ * @param int    $minute Minute of the hour (0-59)
+ * @param string $user   Participant to initially select for new event
+ *
+ * @return string The HTML for the add event icon
+ */
+function html_for_add_icon ( $date=0,$hour="", $minute="", $user="" ) {
+  global $TZ_OFFSET;
+  global $login, $readonly, $cat_id;
+  $u_url = '';
+
+  if ( $readonly == 'Y' )
+    return '';
+
+  if ( $minute < 0 ) {
+   $minute = abs($minute);
+   $hour = $hour -1;
+  }
+  if ( ! empty ( $user ) && $user != $login )
+    $u_url = "user=$user&";
+  if ( isset ( $hour ) && $hour != NULL )
+    $hour += $TZ_OFFSET;
+  return "<a title=\"" . 
+ translate("New Entry") . "\" href=\"edit_entry.php?" . $u_url .
+    "date=$date" . ( isset ( $hour ) && $hour != NULL && $hour >= 0 ? "&hour=$hour" : ""  ) .
+    ( $minute > 0 ? "&minute=$minute" : "" ) .
+    ( empty ( $user ) ? "" :  "&defusers=$user" ) .
+    ( empty ( $cat_id ) ? "" :  "&cat_id=$cat_id" ) .
+    "\"><img src=\"new.gif\" class=\"new\" alt=\"" . 
+ translate("New Entry") . "\" /></a>\n";
+}
+
+/**
+ * Generates the HTML for an event to be viewed in the week-at-glance (week.php).
+ *
+ * The HTML will be stored in an array (global variable $hour_arr)
+ * indexed on the event's starting hour.
+ *
+ * @param int    $id             Event id
+ * @param string $date           Date of event in YYYYMMDD format
+ * @param string $time           Time of event in HHMM format
+ * @param string $name           Brief description of event
+ * @param string $description    Full description of event
+ * @param string $status         Status of event ('A', 'W')
+ * @param int    $pri            Priority of event
+ * @param string $access         Access to event by others ('P', 'R')
+ * @param int    $duration       Duration of event in minutes
+ * @param string $event_owner    User who created event
+ * @param int    $event_category Category id for event
+ */
+function html_for_event_week_at_a_glance ( $id, $date, $time,
+  $name, $description, $status, $pri, $access, $duration, $event_owner,
+  $event_category=-1 ) {
+  global $first_slot, $last_slot, $hour_arr, $rowspan_arr, $rowspan,
+    $eventinfo, $login, $user;
+  static $key = 0;
+  global $DISPLAY_ICONS, $PHP_SELF, $TIME_SLOTS;
+  global $layers;
+
+  $popupid = "eventinfo-day-$id-$key";
+  $key++;
+  
+  // Figure out which time slot it goes in.
+  if ( $time >= 0 && $duration != ( 24 * 60 ) ) {
+    $ind = calc_time_slot ( $time );
+    if ( $ind < $first_slot )
+      $first_slot = $ind;
+    if ( $ind > $last_slot )
+      $last_slot = $ind;
+  } else
+    $ind = 9999;
+
+  if ( $login != $event_owner && strlen ( $event_owner ) ) {
+    $class = "layerentry";
+  } else {
+    $class = "entry";
+    if ( $status == "W" ) $class = "unapprovedentry";
+  }
+  // if we are looking at a view, then always use "entry"
+  if ( strstr ( $PHP_SELF, "view_m.php" ) ||
+    strstr ( $PHP_SELF, "view_w.php" ) ||
+    strstr ( $PHP_SELF, "view_v.php" ) ||
+    strstr ( $PHP_SELF, "view_t.php" ) )
+    $class = "entry";
+
+  // avoid php warning for undefined array index
+  if ( empty ( $hour_arr[$ind] ) )
+    $hour_arr[$ind] = "";
+
+  $catIcon = "icons/cat-" . $event_category . ".gif";
+  if ( $event_category > 0 && file_exists ( $catIcon ) ) {
+    $hour_arr[$ind] .= "<img src=\"$catIcon\" alt=\"$catIcon\" />";
+  }
+
+  $hour_arr[$ind] .= "<a title=\"" . 
+  translate("View this entry") . "\" class=\"$class\" href=\"view_entry.php?id=$id&date=$date";
+  if ( strlen ( $GLOBALS["user"] ) > 0 )
+    $hour_arr[$ind] .= "&user=" . $GLOBALS["user"];
+  $hour_arr[$ind] .= "\" onmouseover=\"window.status='" .
+    translate("View this entry") . "'; show(event, '$popupid'); return true;\" onmouseout=\"hide('$popupid'); return true;\">";
+  if ( $pri == 3 )
+    $hour_arr[$ind] .= "<strong>";
+
+  if ( $login != $event_owner && strlen ( $event_owner ) ) {
+    if ($layers) foreach ($layers as $layer) {
+      if ( $layer['cal_layeruser'] == $event_owner ) {
+        $in_span = true;
+        $hour_arr[$ind] .= "<span style=\"color:" . $layer['cal_color'] . ";\">";
+      }
+    }
+  }
+  if ( $duration == ( 24 * 60 ) ) {
+    $timestr = translate("All day event");
+  } else if ( $time >= 0 ) {
+    $hour_arr[$ind] .= display_time ( $time ) . "» ";
+    $timestr = display_time ( $time );
+    if ( $duration > 0 ) {
+      // calc end time
+      $h = (int) ( $time / 10000 );
+      $m = ( $time / 100 ) % 100;
+      $m += $duration;
+      $d = $duration;
+      while ( $m >= 60 ) {
+        $h++;
+        $m -= 60;
+      }
+      $end_time = sprintf ( "%02d%02d00", $h, $m );
+      $timestr .= "-" . display_time ( $end_time );
+    } else {
+      $end_time = 0;
+    }
+    if ( empty ( $rowspan_arr[$ind] ) )
+      $rowspan_arr[$ind] = 0; // avoid warning below
+    // which slot is end time in? take one off so we don't
+    // show 11:00-12:00 as taking up both 11 and 12 slots.
+    $endind = calc_time_slot ( $end_time, true );
+    if ( $endind == $ind )
+      $rowspan = 0;
+    else
+      $rowspan = $endind - $ind + 1;
+    if ( $rowspan > $rowspan_arr[$ind] && $rowspan > 1 )
+      $rowspan_arr[$ind] = $rowspan;
+  } else {
+    $timestr = "";
+  }
+
+  // avoid php warning of undefined index when using .= below
+  if ( empty ( $hour_arr[$ind] ) )
+    $hour_arr[$ind] = "";
+
+  if ( $login != $user && $access == 'R' && strlen ( $user ) ) {
+    $hour_arr[$ind] .= "(" . translate("Private") . ")";
+  } else if ( $login != $event_owner && $access == 'R' &&
+    strlen ( $event_owner ) ) {
+    $hour_arr[$ind] .= "(" . translate("Private") . ")";
+  } else if ( $login != $event_owner && strlen ( $event_owner ) ) {
+    $hour_arr[$ind] .= htmlspecialchars ( $name );
+    if ( ! empty ( $in_span ) )
+      $hour_arr[$ind] .= "</span>"; //end color span
+  } else {
+    $hour_arr[$ind] .= htmlspecialchars ( $name );
+  }
+
+  if ( $pri == 3 ) $hour_arr[$ind] .= "</strong>"; //end font-weight span
+    $hour_arr[$ind] .= "</a>";
+  //if ( $DISPLAY_ICONS == "Y" ) {
+  //  $hour_arr[$ind] .= icon_text ( $id, true, true );
+  //}
+  $hour_arr[$ind] .= "<br />\n";
+  if ( $login != $user && $access == 'R' && strlen ( $user ) ) {
+    $eventinfo .= build_event_popup ( $popupid, $event_owner,
+      translate("This event is confidential"), "" );
+  } else if ( $login != $event_owner && $access == 'R' &&
+    strlen ( $event_owner ) ) {
+    $eventinfo .= build_event_popup ( $popupid, $event_owner,
+      translate("This event is confidential"), "" );
+  } else {
+    $eventinfo .= build_event_popup ( $popupid, $event_owner,
+      $description, $timestr, site_extras_for_popup ( $id ) );
+  }
+}
+
+/**
+ * Generates the HTML for an event to be viewed in the day-at-glance (day.php).
+ *
+ * The HTML will be stored in an array (global variable $hour_arr)
+ * indexed on the event's starting hour.
+ *
+ * @param int    $id             Event id
+ * @param string $date           Date of event in YYYYMMDD format
+ * @param string $time           Time of event in HHMM format
+ * @param string $name           Brief description of event
+ * @param string $description    Full description of event
+ * @param string $status         Status of event ('A', 'W')
+ * @param int    $pri            Priority of event
+ * @param string $access         Access to event by others ('P', 'R')
+ * @param int    $duration       Duration of event in minutes
+ * @param string $event_owner    User who created event
+ * @param int    $event_category Category id for event
+ */
+function html_for_event_day_at_a_glance ( $id, $date, $time,
+  $name, $description, $status, $pri, $access, $duration, $event_owner,
+  $event_category=-1 ) {
+  global $first_slot, $last_slot, $hour_arr, $rowspan_arr, $rowspan,
+    $eventinfo, $login, $user;
+  static $key = 0;
+  global $layers, $PHP_SELF, $TIME_SLOTS, $TZ_OFFSET;
+
+  $popupid = "eventinfo-day-$id-$key";
+  $key++;
+
+  if ( $login != $user && $access == 'R' && strlen ( $user ) )
+    $eventinfo .= build_event_popup ( $popupid, $event_owner,
+      translate("This event is confidential"), "" );
+  else if ( $login != $event_owner && $access == 'R' &&
+    strlen ( $event_owner ) )
+    $eventinfo .= build_event_popup ( $popupid, $event_owner,
+      translate("This event is confidential"), "" );
+  else
+    $eventinfo .= build_event_popup ( $popupid, $event_owner, $description,
+      "", site_extras_for_popup ( $id ) );
+
+  // calculate slot length in minutes
+  $interval = ( 60 * 24 ) / $TIME_SLOTS;
+
+  // If TZ_OFFSET make this event before the start of the day or
+  // after the end of the day, adjust the time slot accordingly.
+  if ( $time >= 0 && $duration != ( 24 * 60 ) ) {
+    if ( $time + ( $TZ_OFFSET * 10000 ) > 240000 )
+      $time -= 240000;
+    else if ( $time + ( $TZ_OFFSET * 10000 ) < 0 )
+      $time += 240000;
+    $ind = calc_time_slot ( $time );
+    if ( $ind < $first_slot )
+      $first_slot = $ind;
+    if ( $ind > $last_slot )
+      $last_slot = $ind;
+  } else
+    $ind = 9999;
+  //echo "time = $time <br />\nind = $ind <br />\nfirst_slot = $first_slot<br />\n";
+
+  if ( empty ( $hour_arr[$ind] ) )
+    $hour_arr[$ind] = "";
+
+  if ( $login != $event_owner && strlen ( $event_owner ) ) {
+    $class = "layerentry";
+  } else {
+    $class = "entry";
+    if ( $status == "W" )
+      $class = "unapprovedentry";
+  }
+  // if we are looking at a view, then always use "entry"
+  if ( strstr ( $PHP_SELF, "view_m.php" ) ||
+    strstr ( $PHP_SELF, "view_w.php" )  || 
+    strstr ( $PHP_SELF, "view_v.php" ) ||
+    strstr ( $PHP_SELF, "view_t.php" ) )
+    $class = "entry";
+
+  $catIcon = "icons/cat-" . $event_category . ".gif";
+  if ( $event_category > 0 && file_exists ( $catIcon ) ) {
+    $hour_arr[$ind] .= "<img src=\"$catIcon\" alt=\"$catIcon\" />";
+  }
+
+  $hour_arr[$ind] .= "<a title=\"" .
+    translate("View this entry") . "\" class=\"$class\" href=\"view_entry.php?id=$id&date=$date";
+  if ( strlen ( $GLOBALS["user"] ) > 0 )
+    $hour_arr[$ind] .= "&user=" . $GLOBALS["user"];
+  $hour_arr[$ind] .= "\" onmouseover=\"window.status='" .
+    translate("View this entry") . "'; show(event, '$popupid'); return true;\" onmouseout=\"hide('$popupid'); return true;\">";
+  if ( $pri == 3 ) $hour_arr[$ind] .= "<strong>";
+
+  if ( $login != $event_owner && strlen ( $event_owner ) ) {
+    if ($layers) foreach ($layers as $layer) {
+      if ( $layer['cal_layeruser'] == $event_owner) {
+        $in_span = true;
+        $hour_arr[$ind] .= "<span style=\"color:" . $layer['cal_color'] . ";\">";
+      }
+    }
+  }
+
+  if ( $duration == ( 24 * 60 ) ) {
+    $hour_arr[$ind] .= "[" . translate("All day event") . "] ";
+  } else if ( $time >= 0 ) {
+    $hour_arr[$ind] .= "[" . display_time ( $time );
+    if ( $duration > 0 ) {
+      // calc end time
+      $h = (int) ( $time / 10000 );
+      $m = ( $time / 100 ) % 100;
+      $m += $duration;
+      $d = $duration;
+      while ( $m >= 60 ) {
+        $h++;
+        $m -= 60;
+      }
+      $end_time = sprintf ( "%02d%02d00", $h, $m );
+      $hour_arr[$ind] .= "-" . display_time ( $end_time );
+      // which slot is end time in? take one off so we don't
+      // show 11:00-12:00 as taking up both 11 and 12 slots.
+      $endind = calc_time_slot ( $end_time, true );
+      if ( $endind == $ind )
+        $rowspan = 0;
+      else
+        $rowspan = $endind - $ind + 1;
+      if ( ! isset ( $rowspan_arr[$ind] ) )
+        $rowspan_arr[$ind] = 0;
+      if ( $rowspan > $rowspan_arr[$ind] && $rowspan > 1 )
+        $rowspan_arr[$ind] = $rowspan;
+    }
+    $hour_arr[$ind] .= "] ";
+  }
+  if ( $login != $user && $access == 'R' && strlen ( $user ) )
+    $hour_arr[$ind] .= "(" . translate("Private") . ")";
+  else
+  if ( $login != $event_owner && $access == 'R' && strlen ( $event_owner ) )
+    $hour_arr[$ind] .= "(" . translate("Private") . ")";
+  else
+  if ( $login != $event_owner && strlen ( $event_owner ) )
+  {
+    $hour_arr[$ind] .= htmlspecialchars ( $name );
+    if ( ! empty ( $in_span ) )
+      $hour_arr[$ind] .= "</span>"; //end color span
+  }
+
+  else
+    $hour_arr[$ind] .= htmlspecialchars ( $name );
+  if ( $pri == 3 ) $hour_arr[$ind] .= "</strong>"; //end font-weight span
+
+  $hour_arr[$ind] .= "</a>";
+  if ( $GLOBALS["DISPLAY_DESC_PRINT_DAY"] == "Y" ) {
+    $hour_arr[$ind] .= "\n<dl class=\"desc\">\n";
+    $hour_arr[$ind] .= "<dt>" . translate("Description") . ":</dt>\n<dd>";
+    if ( ! empty ( $GLOBALS['allow_html_description'] ) &&
+      $GLOBALS['allow_html_description'] == 'Y' ) {
+      $str = str_replace ( "&", "&", $description );
+      $str = str_replace ( "&amp;", "&", $str );
+      // If there is no html found, then go ahead and replace
+      // the line breaks ("\n") with the html break.
+      if ( strstr ( $str, "<" ) && strstr ( $str, ">" ) ) {
+        // found some html...
+        $hour_arr[$ind] .= $str;
+      } else {
+        // no html, replace line breaks
+        $hour_arr[$ind] .= nl2br ( $str );
+      }
+    } else {
+      // html not allowed in description, escape everything
+      $hour_arr[$ind] .= nl2br ( htmlspecialchars ( $description ) );
+    }
+    $hour_arr[$ind] .= "</dd>\n</dl>\n";
+  }
+
+  $hour_arr[$ind] .= "<br />\n";
+}
+
+/**
+ * Prints all the calendar entries for the specified user for the specified date in day-at-a-glance format.
+ *
+ * If we are displaying data from someone other than
+ * the logged in user, then check the access permission of the entry.
+ *
+ * @param string $date Date in YYYYMMDD format
+ * @param string $user Username of calendar
+ */
+function print_day_at_a_glance ( $date, $user, $can_add=0 ) {
+  global $first_slot, $last_slot, $hour_arr, $rowspan_arr, $rowspan;
+  global $TABLEBG, $CELLBG, $TODAYCELLBG, $THFG, $THBG, $TIME_SLOTS, $TZ_OFFSET;
+  global $WORK_DAY_START_HOUR, $WORK_DAY_END_HOUR;
+  global $repeated_events;
+  $get_unapproved = ( $GLOBALS["DISPLAY_UNAPPROVED"] == "Y" );
+  if ( $user == "__public__" )
+    $get_unapproved = false;
+  if ( empty ( $TIME_SLOTS ) ) {
+    echo "Error: TIME_SLOTS undefined!<br />\n";
+    return;
+  }
+
+  // $interval is number of minutes per slot
+  $interval = ( 24 * 60 ) / $TIME_SLOTS;
+    
+  $rowspan_arr = array ();
+  for ( $i = 0; $i < $TIME_SLOTS; $i++ ) {
+    $rowspan_arr[$i] = 0;
+  }
+
+  // get all the repeating events for this date and store in array $rep
+  $rep = get_repeating_entries ( $user, $date );
+  $cur_rep = 0;
+
+  // Get static non-repeating events
+  $ev = get_entries ( $user, $date, $get_unapproved );
+  $hour_arr = array ();
+  $interval = ( 24 * 60 ) / $TIME_SLOTS;
+  $first_slot = (int) ( ( ( $WORK_DAY_START_HOUR - $TZ_OFFSET ) * 60 ) / $interval );
+  $last_slot = (int) ( ( ( $WORK_DAY_END_HOUR - $TZ_OFFSET ) * 60 ) / $interval);
+  //echo "first_slot = $first_slot<br />\nlast_slot = $last_slot<br />\ninterval = $interval<br />\nTIME_SLOTS = $TIME_SLOTS<br />\n";
+  $rowspan_arr = array ();
+  $all_day = 0;
+  for ( $i = 0; $i < count ( $ev ); $i++ ) {
+    // print out any repeating events that are before this one...
+    while ( $cur_rep < count ( $rep ) &&
+      $rep[$cur_rep]['cal_time'] < $ev[$i]['cal_time'] ) {
+      if ( $get_unapproved || $rep[$cur_rep]['cal_status'] == 'A' ) {
+        if ( ! empty ( $rep[$cur_rep]['cal_ext_for_id'] ) ) {
+          $viewid = $rep[$cur_rep]['cal_ext_for_id'];
+          $viewname = $rep[$cur_rep]['cal_name'] . " (" .
+            translate("cont.") . ")";
+        } else {
+          $viewid = $rep[$cur_rep]['cal_id'];
+          $viewname = $rep[$cur_rep]['cal_name'];
+        }
+        if ( $rep[$cur_rep]['cal_duration'] == ( 24 * 60 ) )
+          $all_day = 1;
+        html_for_event_day_at_a_glance ( $viewid,
+          $date, $rep[$cur_rep]['cal_time'],
+          $viewname, $rep[$cur_rep]['cal_description'],
+          $rep[$cur_rep]['cal_status'], $rep[$cur_rep]['cal_priority'],
+          $rep[$cur_rep]['cal_access'], $rep[$cur_rep]['cal_duration'],
+          $rep[$cur_rep]['cal_login'], $rep[$cur_rep]['cal_category'] );
+      }
+      $cur_rep++;
+    }
+    if ( $get_unapproved || $ev[$i]['cal_status'] == 'A' ) {
+      if ( ! empty ( $ev[$i]['cal_ext_for_id'] ) ) {
+        $viewid = $ev[$i]['cal_ext_for_id'];
+        $viewname = $ev[$i]['cal_name'] . " (" .
+          translate("cont.") . ")";
+      } else {
+        $viewid = $ev[$i]['cal_id'];
+        $viewname = $ev[$i]['cal_name'];
+      }
+      if ( $ev[$i]['cal_duration'] == ( 24 * 60 ) )
+        $all_day = 1;
+      html_for_event_day_at_a_glance ( $viewid,
+        $date, $ev[$i]['cal_time'],
+        $viewname, $ev[$i]['cal_description'],
+        $ev[$i]['cal_status'], $ev[$i]['cal_priority'],
+        $ev[$i]['cal_access'], $ev[$i]['cal_duration'],
+        $ev[$i]['cal_login'], $ev[$i]['cal_category'] );
+    }
+  }
+  // print out any remaining repeating events
+  while ( $cur_rep < count ( $rep ) ) {
+    if ( $get_unapproved || $rep[$cur_rep]['cal_status'] == 'A' ) {
+      if ( ! empty ( $rep[$cur_rep]['cal_ext_for_id'] ) ) {
+        $viewid = $rep[$cur_rep]['cal_ext_for_id'];
+        $viewname = $rep[$cur_rep]['cal_name'] . " (" .
+          translate("cont.") . ")";
+      } else {
+        $viewid = $rep[$cur_rep]['cal_id'];
+        $viewname = $rep[$cur_rep]['cal_name'];
+      }
+      if ( $rep[$cur_rep]['cal_duration'] == ( 24 * 60 ) )
+        $all_day = 1;
+      html_for_event_day_at_a_glance ( $viewid,
+        $date, $rep[$cur_rep]['cal_time'],
+        $viewname, $rep[$cur_rep]['cal_description'],
+        $rep[$cur_rep]['cal_status'], $rep[$cur_rep]['cal_priority'],
+        $rep[$cur_rep]['cal_access'], $rep[$cur_rep]['cal_duration'],
+        $rep[$cur_rep]['cal_login'], $rep[$cur_rep]['cal_category'] );
+    }
+    $cur_rep++;
+  }
+
+  // squish events that use the same cell into the same cell.
+  // For example, an event from 8:00-9:15 and another from 9:30-9:45 both
+  // want to show up in the 8:00-9:59 cell.
+  $rowspan = 0;
+  $last_row = -1;
+  //echo "First SLot: $first_slot; Last Slot: $last_slot<br />\n";
+  $i = 0;
+  if ( $first_slot < 0 )
+    $i = $first_slot;
+  for ( ; $i < $TIME_SLOTS; $i++ ) {
+    if ( $rowspan > 1 ) {
+      if ( ! empty ( $hour_arr[$i] ) ) {
+        $diff_start_time = $i - $last_row;
+        if ( $rowspan_arr[$i] > 1 ) {
+          if (  $rowspan_arr[$i] + ( $diff_start_time ) >  $rowspan_arr[$last_row]  ) {
+            $rowspan_arr[$last_row] = ( $rowspan_arr[$i] + ( $diff_start_time ) );
+          }
+          $rowspan += ( $rowspan_arr[$i] - 1 );
+        } else {
+          $rowspan_arr[$last_row] += $rowspan_arr[$i];
+        }
+        // this will move entries apart that appear in one field,
+        // yet start on different hours
+        for ( $u = $diff_start_time ; $u > 0 ; $u-- ) {
+          $hour_arr[$last_row] .= "<br />\n"; 
+        }
+        $hour_arr[$last_row] .= $hour_arr[$i];
+        $hour_arr[$i] = "";
+        $rowspan_arr[$i] = 0;
+      }
+      $rowspan--;
+    } else if ( ! empty ( $rowspan_arr[$i] ) && $rowspan_arr[$i] > 1 ) {
+      $rowspan = $rowspan_arr[$i];
+      $last_row = $i;
+    }
+  }
+  if ( ! empty ( $hour_arr[9999] ) ) {
+    echo "<tr><th class=\"empty\"> </th>\n" .
+      "<td class=\"hasevents\">$hour_arr[9999]</td></tr>\n";
+  }
+  $rowspan = 0;
+  //echo "first_slot = $first_slot<br />\nlast_slot = $last_slot<br />\ninterval = $interval<br />\n";
+  for ( $i = $first_slot; $i <= $last_slot; $i++ ) {
+    $time_h = (int) ( ( $i * $interval ) / 60 );
+    $time_m = ( $i * $interval ) % 60;
+    $time = display_time ( ( $time_h * 100 + $time_m ) * 100 );
+    echo "<tr>\n<th class=\"row\">" . $time . "</th>\n";
+    if ( $rowspan > 1 ) {
+      // this might mean there's an overlap, or it could mean one event
+      // ends at 11:15 and another starts at 11:30.
+      if ( ! empty ( $hour_arr[$i] ) ) {
+        echo "<td class=\"hasevents\">";
+        if ( $can_add )
+          echo html_for_add_icon ( $date, $time_h, $time_m, $user );
+        echo "$hour_arr[$i]</td>\n";
+      }
+      $rowspan--;
+    } else {
+      if ( empty ( $hour_arr[$i] ) ) {
+        echo "<td>";
+        if ( $can_add ) {
+          echo html_for_add_icon ( $date, $time_h, $time_m, $user ) . "</td>";
+  } else {
+    echo " </td>";
+  }
+        echo "</tr>\n";
+      } else {
+        if ( empty ( $rowspan_arr[$i] ) )
+          $rowspan = '';
+        else
+          $rowspan = $rowspan_arr[$i];
+        if ( $rowspan > 1 ) {
+          echo "<td rowspan=\"$rowspan\" class=\"hasevents\">";
+          if ( $can_add )
+            echo html_for_add_icon ( $date, $time_h, $time_m, $user );
+          echo "$hour_arr[$i]</td></tr>\n";
+        } else {
+          echo "<td class=\"hasevents\">";
+          if ( $can_add )
+            echo html_for_add_icon ( $date, $time_h, $time_m, $user );
+          echo "$hour_arr[$i]</td></tr>\n";
+        }
+      }
+    }
+  }
+}
+
+/**
+ * Checks for any unnaproved events.
+ *
+ * If any are found, display a link to the unapproved events (where they can be
+ * approved).
+ *
+ * If the user is an admin user, also count up any public events.
+ * If the user is a nonuser admin, count up events on the nonuser calendar.
+ *
+ * @param string $user Current user login
+ */
+function display_unapproved_events ( $user ) {
+  global $public_access, $is_admin, $nonuser_enabled, $login;
+
+  // Don't do this for public access login, admin user must approve public
+  // events
+  if ( $user == "__public__" )
+    return;
+
+  $sql = "SELECT COUNT(webcal_entry_user.cal_id) " .
+    "FROM webcal_entry_user, webcal_entry " .
+    "WHERE webcal_entry_user.cal_id = webcal_entry.cal_id " .
+    "AND webcal_entry_user.cal_status = 'W' " .
+    "AND ( webcal_entry.cal_ext_for_id IS NULL " .
+    "OR webcal_entry.cal_ext_for_id = 0 ) " .
+    "AND ( webcal_entry_user.cal_login = '$user'";
+  if ( $public_access == "Y" && $is_admin ) {
+    $sql .= " OR webcal_entry_user.cal_login = '__public__'";
+  }
+  if ( $nonuser_enabled == 'Y' ) {
+    $admincals = get_nonuser_cals ( $login );
+    for ( $i = 0; $i < count ( $admincals ); $i++ ) {
+      $sql .= " OR webcal_entry_user.cal_login = '" .
+        $admincals[$i]['cal_login'] . "'";
+    }
+  }
+  $sql .= " )";
+  //print "SQL: $sql<br />\n";
+  $res = dbi_query ( $sql );
+  if ( $res ) {
+    if ( $row = dbi_fetch_row ( $res ) ) {
+      if ( $row[0] > 0 ) {
+ $str = translate ("You have XXX unapproved events");
+ $str = str_replace ( "XXX", $row[0], $str );
+        echo "<a class=\"nav\" href=\"list_unapproved.php";
+        if ( $user != $login )
+          echo "?user=$user\"";
+        echo "\">" . $str .  "</a><br />\n";
+      }
+    }
+    dbi_free_result ( $res );
+  }
+}
+
+/**
+ * Looks for URLs in the given text, and makes them into links.
+ *
+ * @param string $text Input text
+ *
+ * @return string The text altered to have HTML links for any web links
+ *                (http or https)
+ */
+function activate_urls ( $text ) {
+  $str = eregi_replace ( "(http://[^[:space:]$]+)",
+    "<a href=\"\\1\">\\1</a>", $text );
+  $str = eregi_replace ( "(https://[^[:space:]$]+)",
+    "<a href=\"\\1\">\\1</a>", $str );
+  return $str;
+}
+
+/**
+ * Displays a time in either 12 or 24 hour format.
+ *
+ * The global variable $TZ_OFFSET is used to adjust the time.  Note that this
+ * is somewhat of a kludge for timezone support.  If an event is set for 11PM
+ * server time and the user is 2 hours ahead, it will show up as 1AM, but the
+ * date will not be adjusted to the next day.
+ *
+ * @param string $time          Input time in HHMMSS format
+ * @param bool   $ignore_offset If true, then do not use the timezone offset
+ *
+ * @return string The time in the user's timezone and preferred format
+ *
+ * @global int The user's timezone offset from the server
+ */
+function display_time ( $time, $ignore_offset=0 ) {
+  global $TZ_OFFSET;
+  $hour = (int) ( $time / 10000 );
+  if ( ! $ignore_offset )
+    $hour += $TZ_OFFSET;
+  $min = abs( ( $time / 100 ) % 100 );
+  //Prevent goofy times like 8:00 9:30 9:00 10:30 10:00 
+  if ( $time < 0 && $min > 0 ) $hour = $hour - 1;
+  while ( $hour < 0 )
+    $hour += 24;
+  while ( $hour > 23 )
+    $hour -= 24;
+  if ( $GLOBALS["TIME_FORMAT"] == "12" ) {
+    $ampm = ( $hour >= 12 ) ? translate("pm") : translate("am");
+    $hour %= 12;
+    if ( $hour == 0 )
+      $hour = 12;
+    $ret = sprintf ( "%d:%02d%s", $hour, $min, $ampm );
+  } else {
+    $ret = sprintf ( "%d:%02d", $hour, $min );
+  }
+  return $ret;
+}
+
+/**
+ * Returns the full name of the specified month.
+ *
+ * Use {@link month_short_name()} to get the abbreviated name of the month.
+ *
+ * @param int $m Number of the month (0-11)
+ *
+ * @return string The full name of the specified month
+ *
+ * @see month_short_name
+ */
+function month_name ( $m ) {
+  switch ( $m ) {
+    case 0: return translate("January");
+    case 1: return translate("February");
+    case 2: return translate("March");
+    case 3: return translate("April");
+    case 4: return translate("May_"); // needs to be different than "May"
+    case 5: return translate("June");
+    case 6: return translate("July");
+    case 7: return translate("August");
+    case 8: return translate("September");
+    case 9: return translate("October");
+    case 10: return translate("November");
+    case 11: return translate("December");
+  }
+  return "unknown-month($m)";
+}
+
+/**
+ * Returns the abbreviated name of the specified month (such as "Jan").
+ *
+ * Use {@link month_name()} to get the full name of the month.
+ *
+ * @param int $m Number of the month (0-11)
+ *
+ * @return string The abbreviated name of the specified month (example: "Jan")
+ *
+ * @see month_name
+ */
+function month_short_name ( $m ) {
+  switch ( $m ) {
+    case 0: return translate("Jan");
+    case 1: return translate("Feb");
+    case 2: return translate("Mar");
+    case 3: return translate("Apr");
+    case 4: return translate("May");
+    case 5: return translate("Jun");
+    case 6: return translate("Jul");
+    case 7: return translate("Aug");
+    case 8: return translate("Sep");
+    case 9: return translate("Oct");
+    case 10: return translate("Nov");
+    case 11: return translate("Dec");
+  }
+  return "unknown-month($m)";
+}
+
+/**
+ * Returns the full weekday name.
+ *
+ * Use {@link weekday_short_name()} to get the abbreviated weekday name.
+ *
+ * @param int $w Number of the day in the week (0=Sunday,...,6=Saturday)
+ *
+ * @return string The full weekday name ("Sunday")
+ *
+ * @see weekday_short_name
+ */
+function weekday_name ( $w ) {
+  switch ( $w ) {
+    case 0: return translate("Sunday");
+    case 1: return translate("Monday");
+    case 2: return translate("Tuesday");
+    case 3: return translate("Wednesday");
+    case 4: return translate("Thursday");
+    case 5: return translate("Friday");
+    case 6: return translate("Saturday");
+  }
+  return "unknown-weekday($w)";
+}
+
+/**
+ * Returns the abbreviated weekday name.
+ *
+ * Use {@link weekday_name()} to get the full weekday name.
+ *
+ * @param int $w Number of the day in the week (0=Sunday,...,6=Saturday)
+ *
+ * @return string The abbreviated weekday name ("Sun")
+ */
+function weekday_short_name ( $w ) {
+  switch ( $w ) {
+    case 0: return translate("Sun");
+    case 1: return translate("Mon");
+    case 2: return translate("Tue");
+    case 3: return translate("Wed");
+    case 4: return translate("Thu");
+    case 5: return translate("Fri");
+    case 6: return translate("Sat");
+  }
+  return "unknown-weekday($w)";
+}
+
+/**
+ * Converts a date in YYYYMMDD format into "Friday, December 31, 1999",
+ * "Friday, 12-31-1999" or whatever format the user prefers.
+ *
+ * @param string $indate       Date in YYYYMMDD format
+ * @param string $format       Format to use for date (default is "__month__
+ *                             __dd__, __yyyy__")
+ * @param bool   $show_weekday Should the day of week also be included?
+ * @param bool   $short_months Should the abbreviated month names be used
+ *                             instead of the full month names?
+ * @param int    $server_time ???
+ *
+ * @return string Date in the specified format
+ *
+ * @global string Preferred date format
+ * @global int    User's timezone offset from the server
+ */
+function date_to_str ( $indate, $format="", $show_weekday=true, $short_months=false, $server_time="" ) {
+  global $DATE_FORMAT, $TZ_OFFSET;
+
+  if ( strlen ( $indate ) == 0 ) {
+    $indate = date ( "Ymd" );
+  }
+
+  $newdate = $indate;
+  if ( $server_time != "" && $server_time >= 0 ) {
+    $y = substr ( $indate, 0, 4 );
+    $m = substr ( $indate, 4, 2 );
+    $d = substr ( $indate, 6, 2 );
+    if ( $server_time + $TZ_OFFSET * 10000 > 240000 ) {
+       $newdate = date ( "Ymd", mktime ( 3, 0, 0, $m, $d + 1, $y ) );
+    } else if ( $server_time + $TZ_OFFSET * 10000 < 0 ) {
+       $newdate = date ( "Ymd", mktime ( 3, 0, 0, $m, $d - 1, $y ) );
+    }
+  }
+
+  // if they have not set a preference yet...
+  if ( $DATE_FORMAT == "" )
+    $DATE_FORMAT = "__month__ __dd__, __yyyy__";
+
+  if ( empty ( $format ) )
+    $format = $DATE_FORMAT;
+
+  $y = (int) ( $newdate / 10000 );
+  $m = (int) ( $newdate / 100 ) % 100;
+  $d = $newdate % 100;
+  $date = mktime ( 3, 0, 0, $m, $d, $y );
+  $wday = strftime ( "%w", $date );
+
+  if ( $short_months ) {
+    $weekday = weekday_short_name ( $wday );
+    $month = month_short_name ( $m - 1 );
+  } else {
+    $weekday = weekday_name ( $wday );
+    $month = month_name ( $m - 1 );
+  }
+  $yyyy = $y;
+  $yy = sprintf ( "%02d", $y %= 100 );
+
+  $ret = $format;
+  $ret = str_replace ( "__yyyy__", $yyyy, $ret );
+  $ret = str_replace ( "__yy__", $yy, $ret );
+  $ret = str_replace ( "__month__", $month, $ret );
+  $ret = str_replace ( "__mon__", $month, $ret );
+  $ret = str_replace ( "__dd__", $d, $ret );
+  $ret = str_replace ( "__mm__", $m, $ret );
+
+  if ( $show_weekday )
+    return "$weekday, $ret";
+  else
+    return $ret;
+}
+
+
+/**
+ * Converts a hexadecimal digit to an integer.
+ *
+ * @param string $val Hexadecimal digit
+ *
+ * @return int Equivalent integer in base-10
+ *
+ * @ignore
+ */
+function hextoint ( $val ) {
+  if ( empty ( $val ) )
+    return 0;
+  switch ( strtoupper ( $val ) ) {
+    case "0": return 0;
+    case "1": return 1;
+    case "2": return 2;
+    case "3": return 3;
+    case "4": return 4;
+    case "5": return 5;
+    case "6": return 6;
+    case "7": return 7;
+    case "8": return 8;
+    case "9": return 9;
+    case "A": return 10;
+    case "B": return 11;
+    case "C": return 12;
+    case "D": return 13;
+    case "E": return 14;
+    case "F": return 15;
+  }
+  return 0;
+}
+
+/**
+ * Extracts a user's name from a session id.
+ *
+ * This prevents users from begin able to edit their cookies.txt file and set
+ * the username in plain text.
+ *
+ * @param string $instr A hex-encoded string. "Hello" would be "678ea786a5".
+ * 
+ * @return string The decoded string
+ *
+ * @global array Array of offsets
+ *
+ * @see encode_string
+ */
+function decode_string ( $instr ) {
+  global $offsets;
+  //echo "<br />\nDECODE<br />\n";
+  $orig = "";
+  for ( $i = 0; $i < strlen ( $instr ); $i += 2 ) {
+    //echo "<br />\n";
+    $ch1 = substr ( $instr, $i, 1 );
+    $ch2 = substr ( $instr, $i + 1, 1 );
+    $val = hextoint ( $ch1 ) * 16 + hextoint ( $ch2 );
+    //echo "decoding \"" . $ch1 . $ch2 . "\" = $val<br />\n";
+    $j = ( $i / 2 ) % count ( $offsets );
+    //echo "Using offsets $j = " . $offsets[$j] . "<br />\n";
+    $newval = $val - $offsets[$j] + 256;
+    $newval %= 256;
+    //echo " neval \"$newval\"<br />\n";
+    $dec_ch = chr ( $newval );
+    //echo " which is \"$dec_ch\"<br />\n";
+    $orig .= $dec_ch;
+  }
+  //echo "Decode string: '$orig' <br/>\n";
+  return $orig;
+}
+
+/**
+ * Takes an input string and encode it into a slightly encoded hexval that we
+ * can use as a session cookie.
+ *
+ * @param string $instr Text to encode
+ *
+ * @return string The encoded text
+ *
+ * @global array Array of offsets
+ *
+ * @see decode_string
+ */
+function encode_string ( $instr ) {
+  global $offsets;
+  //echo "<br />\nENCODE<br />\n";
+  $ret = "";
+  for ( $i = 0; $i < strlen ( $instr ); $i++ ) {
+    //echo "<br />\n";
+    $ch1 = substr ( $instr, $i, 1 );
+    $val = ord ( $ch1 );
+    //echo "val = $val for \"$ch1\"<br />\n";
+    $j = $i % count ( $offsets );
+    //echo "Using offsets $j = $offsets[$j]<br />\n";
+    $newval = $val + $offsets[$j];
+    $newval %= 256;
+    //echo "newval = $newval for \"$ch1\"<br />\n";
+    $ret .= bin2hex ( chr ( $newval ) );
+  }
+  return $ret;
+}
+
+/**
+ * An implementatin of array_splice() for PHP3.
+ *
+ * @param array $input       Array to be spliced into
+ * @param int   $offset      Where to begin the splice
+ * @param int   $length      How long the splice should be
+ * @param array $replacement What to splice in
+ *
+ * @ignore
+ */
+function my_array_splice(&$input,$offset,$length,$replacement) {
+  if ( floor(phpversion()) < 4 ) {
+    // if offset is negative, then it starts at the end of array
+    if ( $offset < 0 )
+      $offset = count($input) + $offset;
+
+    for ($i=0;$i<$offset;$i++) {
+      $new_array[] = $input[$i];
+    }
+
+    // if we have a replacement, insert it
+    for ($i=0;$i<count($replacement);$i++) {
+      $new_array[] = $replacement[$i];
+    }
+
+    // now tack on the rest of the original array
+    for ($i=$offset+$length;$i<count($input);$i++) {
+      $new_array[] = $input[$i];
+    }
+
+    $input = $new_array;
+  } else {
+    array_splice($input,$offset,$length,$replacement);
+  }
+}
+
+/**
+ * Loads current user's category info and stuff it into category global
+ * variable.
+ *
+ * @param string $ex_global Don't include global categories ('' or '1')
+ */
+function load_user_categories ($ex_global = '') {
+  global $login, $user, $is_assistant;
+  global $categories, $category_owners;
+  global $categories_enabled, $is_admin;
+
+  $cat_owner =  ( ( ! empty ( $user ) && strlen ( $user ) ) &&  ( $is_assistant  ||
+    $is_admin ) ) ? $user : $login;  
+  $categories = array ();
+  $category_owners = array ();
+  if ( $categories_enabled == "Y" ) {
+    $sql = "SELECT cat_id, cat_name, cat_owner FROM webcal_categories WHERE ";
+    $sql .=  ($ex_global == '') ? " (cat_owner = '$cat_owner') OR  (cat_owner IS NULL) ORDER BY cat_owner, cat_name" : " cat_owner = '$cat_owner' ORDER BY cat_name";
+
+    $res = dbi_query ( $sql );
+    if ( $res ) {
+      while ( $row = dbi_fetch_row ( $res ) ) {
+        $cat_id = $row[0];
+        $categories[$cat_id] = $row[1];
+        $category_owners[$cat_id] = $row[2];
+      }
+      dbi_free_result ( $res );
+    }
+  } else {
+    //echo "Categories disabled.";
+  }
+}
+
+/**
+ * Prints dropdown HTML for categories.
+ *
+ * @param string $form   The page to submit data to (without .php)
+ * @param string $date   Date in YYYYMMDD format
+ * @param int    $cat_id Category id that should be pre-selected
+ */
+function print_category_menu ( $form, $date = '', $cat_id = '' ) {
+  global $categories, $category_owners, $user, $login;
+  echo "<form action=\"{$form}.php\" method=\"get\" name=\"SelectCategory\" class=\"categories\">\n";
+  if ( ! empty($date) ) echo "<input type=\"hidden\" name=\"date\" value=\"$date\" />\n";
+  if ( ! empty ( $user ) && $user != $login )
+    echo "<input type=\"hidden\" name=\"user\" value=\"$user\" />\n";
+  echo translate ("Category") . ": <select name=\"cat_id\" onchange=\"document.SelectCategory.submit()\">\n";
+  echo "<option value=\"\"";
+  if ( $cat_id == '' ) echo " selected=\"selected\"";
+  echo ">" . translate("All") . "</option>\n";
+  $cat_owner =  ( ! empty ( $user ) && strlen ( $user ) ) ? $user : $login;
+  if (  is_array ( $categories ) ) {
+    foreach ( $categories as $K => $V ){
+      if ( $cat_owner ||
+        empty ( $category_owners[$K] ) ) {
+        echo "<option value=\"$K\"";
+        if ( $cat_id == $K ) echo " selected=\"selected\"";
+        echo ">$V</option>\n";
+      }
+    }
+  }
+  echo "</select>\n";
+  echo "</form>\n";
+  echo "<span id=\"cat\">" . translate ("Category") . ": ";
+  echo ( strlen ( $cat_id ) ? $categories[$cat_id] : translate ('All') ) . "</span>\n";
+}
+
+/**
+ * Converts HTML entities in 8bit.
+ *
+ * <b>Note:</b> Only supported for PHP4 (not PHP3).
+ *
+ * @param string $html HTML text
+ *
+ * @return string The converted text
+ */
+function html_to_8bits ( $html ) {
+  if ( floor(phpversion()) < 4 ) {
+    return $html;
+  } else {
+    return strtr ( $html, array_flip (
+      get_html_translation_table (HTML_ENTITIES) ) );
+  }
+}
+
+// ***********************************************************************
+// Functions for getting information about boss and their assistant.
+// ***********************************************************************
+
+/**
+ * Gets a list of an assistant's boss from the webcal_asst table.
+ *
+ * @param string $assistant Login of assistant
+ *
+ * @return array Array of bosses, where each boss is an array with the following
+ *               fields:
+ * - <var>cal_login</var>
+ * - <var>cal_fullname</var>
+ */
+function user_get_boss_list ( $assistant ) {
+  global $bosstemp_fullname;
+
+  $res = dbi_query (
+    "SELECT cal_boss " .
+    "FROM webcal_asst " .
+    "WHERE cal_assistant = '$assistant'" );
+  $count = 0;
+  $ret = array ();
+  if ( $res ) {
+    while ( $row = dbi_fetch_row ( $res ) ) {
+      user_load_variables ( $row[0], "bosstemp_" );
+      $ret[$count++] = array (
+        "cal_login" => $row[0],
+        "cal_fullname" => $bosstemp_fullname
+      );
+    }
+    dbi_free_result ( $res );
+  }
+  return $ret;
+}
+
+/**
+ * Is this user an assistant of this boss?
+ *
+ * @param string $assistant Login of potential assistant
+ * @param string $boss      Login of potential boss
+ * 
+ * @return bool True or false
+ */
+function user_is_assistant ( $assistant, $boss ) {
+  $ret = false;
+
+  if ( empty ( $boss ) )
+    return false;
+  $res = dbi_query ( "SELECT * FROM webcal_asst " . 
+     "WHERE cal_assistant = '$assistant' AND cal_boss = '$boss'" );
+  if ( $res ) {
+    if ( dbi_fetch_row ( $res ) )
+      $ret = true;
+    dbi_free_result ( $res );
+  }
+  return $ret;
+}
+
+/**
+ * Is this user an assistant?
+ *
+ * @param string $assistant Login for user
+ *
+ * @return bool true if the user is an assistant to one or more bosses
+ */
+function user_has_boss ( $assistant ) {
+  $ret = false;
+  $res = dbi_query ( "SELECT * FROM webcal_asst " .
+    "WHERE cal_assistant = '$assistant'" );
+  if ( $res ) {
+    if ( dbi_fetch_row ( $res ) )
+      $ret = true;
+    dbi_free_result ( $res );
+  }
+  return $ret;
+}
+
+/**
+ * Checks the boss user preferences to see if the boss wants to be notified via
+ * email on changes to their calendar.
+ *
+ * @param string $assistant Assistant login
+ * @param string $boss      Boss login
+ *
+ * @return bool True if the boss wants email notifications
+ */
+function boss_must_be_notified ( $assistant, $boss ) {
+  if (user_is_assistant ( $assistant, $boss ) )
+    return ( get_pref_setting ( $boss, "EMAIL_ASSISTANT_EVENTS" )=="Y" ? true : false );
+  return true;
+}
+
+/**
+ * Checks the boss user preferences to see if the boss must approve events
+ * added to their calendar.
+ *
+ * @param string $assistant Assistant login
+ * @param string $boss      Boss login
+ *
+ * @return bool True if the boss must approve new events
+ */
+function boss_must_approve_event ( $assistant, $boss ) {
+  if (user_is_assistant ( $assistant, $boss ) )
+    return ( get_pref_setting ( $boss, "APPROVE_ASSISTANT_EVENT" )=="Y" ? true : false );
+  return true;
+}
+
+/**
+ * Fakes an email for testing purposes.
+ *
+ * @param string $mailto Email address to send mail to
+ * @param string $subj   Subject of email
+ * @param string $text   Email body
+ * @param string $hdrs   Other email headers
+ *
+ * @ignore
+ */
+function fake_mail ( $mailto, $subj, $text, $hdrs ) { 
+  echo "To: $mailto <br />\n" .
+    "Subject: $subj <br />\n" .
+    nl2br ( $hdrs ) . "<br />\n" .
+    nl2br ( $text );
+}
+
+/**
+ * Prints all the entries in a time bar format for the specified user for the
+ * specified date.
+ *
+ * If we are displaying data from someone other than the logged in user, then
+ * check the access permission of the entry.
+ *
+ * @param string $date Date in YYYYMMDD format
+ * @param string $user Username
+ * @param bool   $ssi  Should we not include links to add new events?
+ */
+function print_date_entries_timebar ( $date, $user, $ssi ) {
+  global $events, $readonly, $is_admin,
+    $public_access, $public_access_can_add;
+  $cnt = 0;
+  $get_unapproved = ( $GLOBALS["DISPLAY_UNAPPROVED"] == "Y" );
+  // public access events always must be approved before being displayed
+  if ( $GLOBALS["login"] == "__public__" )
+    $get_unapproved = false;
+
+  $year = substr ( $date, 0, 4 );
+  $month = substr ( $date, 4, 2 );
+  $day = substr ( $date, 6, 2 );
+ 
+  $dateu = mktime ( 3, 0, 0, $month, $day, $year );
+
+  $can_add = ( $readonly == "N" || $is_admin );
+  if ( $public_access == "Y" && $public_access_can_add != "Y" &&
+    $GLOBALS["login"] == "__public__" )
+    $can_add = false;
+
+  // get all the repeating events for this date and store in array $rep
+  $rep = get_repeating_entries ( $user, $date ) ;
+  $cur_rep = 0;
+
+  // get all the non-repeating events for this date and store in $ev
+  $ev = get_entries ( $user, $date, $get_unapproved );
+
+  for ( $i = 0; $i < count ( $ev ); $i++ ) {
+    // print out any repeating events that are before this one...
+    while ( $cur_rep < count ( $rep ) &&
+      $rep[$cur_rep]['cal_time'] < $ev[$i]['cal_time'] ) {
+      if ( $get_unapproved || $rep[$cur_rep]['cal_status'] == 'A' ) {
+        print_entry_timebar ( $rep[$cur_rep]['cal_id'],
+          $date, $rep[$cur_rep]['cal_time'], $rep[$cur_rep]['cal_duration'],
+          $rep[$cur_rep]['cal_name'], $rep[$cur_rep]['cal_description'],
+          $rep[$cur_rep]['cal_status'], $rep[$cur_rep]['cal_priority'],
+          $rep[$cur_rep]['cal_access'], $rep[$cur_rep]['cal_login'],
+          $rep[$cur_rep]['cal_category'] );
+        $cnt++;
+      }
+      $cur_rep++;
+    }
+    if ( $get_unapproved || $ev[$i]['cal_status'] == 'A' ) {
+      print_entry_timebar ( $ev[$i]['cal_id'],
+        $date, $ev[$i]['cal_time'], $ev[$i]['cal_duration'],
+        $ev[$i]['cal_name'], $ev[$i]['cal_description'],
+        $ev[$i]['cal_status'], $ev[$i]['cal_priority'],
+        $ev[$i]['cal_access'], $ev[$i]['cal_login'],
+        $ev[$i]['cal_category'] );
+      $cnt++;
+    }
+  }
+  // print out any remaining repeating events
+  while ( $cur_rep < count ( $rep ) ) {
+    if ( $get_unapproved || $rep[$cur_rep]['cal_status'] == 'A' ) {
+      print_entry_timebar ( $rep[$cur_rep]['cal_id'],
+        $date, $rep[$cur_rep]['cal_time'], $rep[$cur_rep]['cal_duration'],
+        $rep[$cur_rep]['cal_name'], $rep[$cur_rep]['cal_description'],
+        $rep[$cur_rep]['cal_status'], $rep[$cur_rep]['cal_priority'],
+        $rep[$cur_rep]['cal_access'], $rep[$cur_rep]['cal_login'],
+        $rep[$cur_rep]['cal_category'] );
+      $cnt++;
+    }
+    $cur_rep++;
+  }
+  if ( $cnt == 0 )
+    echo " "; // so the table cell has at least something
+}
+
+/**
+ * Prints the HTML for an events with a timebar.
+ *
+ * @param int    $id             Event id
+ * @param string $date           Date of event in YYYYMMDD format
+ * @param string $time           Time of event in HHMM format
+ * @param int    $duration       Duration of event in minutes
+ * @param string $name           Brief description of event
+ * @param string $description    Full description of event
+ * @param string $status         Status of event ('A', 'W')
+ * @param int    $pri            Priority of event
+ * @param string $access         Access to event by others ('P', 'R')
+ * @param string $event_owner    User who created event
+ * @param int    $event_category Category id for event
+ *
+ * @staticvar int Used to ensure all event popups have a unique id
+ */
+function print_entry_timebar ( $id, $date, $time, $duration,
+  $name, $description, $status,
+  $pri, $access, $event_owner, $event_category=-1 ) {
+  global $eventinfo, $login, $user, $PHP_SELF, $prefarray;
+  static $key = 0;
+  $insidespan = false;
+  global $layers;
+
+  // compute time offsets in % of total table width
+  $day_start=$prefarray["WORK_DAY_START_HOUR"] * 60;
+  if ( $day_start == 0 ) $day_start = 9*60;
+  $day_end=$prefarray["WORK_DAY_END_HOUR"] * 60;
+  if ( $day_end == 0 ) $day_end = 19*60;
+  if ( $day_end <= $day_start ) $day_end = $day_start + 60; //avoid exceptions
+
+  if ($time >= 0) {
+  $bar_units= 100/(($day_end - $day_start)/60) ; // Percentage each hour occupies
+  $ev_start = round((floor(($time/10000) - ($day_start/60)) + (($time/100)%100)/60) * $bar_units);
+  }else{
+    $ev_start= 0;
+  }
+  if ($ev_start < 0) $ev_start = 0;
+  if ($duration > 0) {
+    $ev_duration = round(100 * $duration / ($day_end - $day_start)) ;
+    if ($ev_start + $ev_duration > 100 ) {
+      $ev_duration = 100 - $ev_start;
+    }
+  } else {
+    if ($time >= 0) {
+      $ev_duration = 1;
+    } else {
+      $ev_duration=100-$ev_start;
+    }
+  }
+  $ev_padding = 100 - $ev_start - $ev_duration;
+  // choose where to position the text (pos=0->before,pos=1->on,pos=2->after)
+  if ($ev_duration > 20)   { $pos = 1; }
+   elseif ($ev_padding > 20)   { $pos = 2; }
+   else        { $pos = 0; }
+ 
+  echo "\n<!-- ENTRY BAR -->\n<table class=\"entrycont\" cellpadding=\"0\" cellspacing=\"0\">\n";
+   echo "<tr>\n";
+   echo ($ev_start > 0 ?  "<td style=\"text-align:right;  width:$ev_start%;\">" : "" );
+   if ( $pos > 0 ) {
+     echo ($ev_start > 0 ?  " </td>\n": "" ) ;
+    echo "<td style=\"width:$ev_duration%;\">\n<table class=\"entrybar\">\n<tr>\n<td class=\"entry\">";
+     if ( $pos > 1 ) {
+       echo ($ev_padding > 0 ?  " </td>\n": "" ) . "</tr>\n</table></td>\n";
+       echo ($ev_padding > 0 ?  "<td style=\"text-align:left; width:$ev_padding%;\">" : "");
+    }
+  };
+
+  if ( $login != $event_owner && strlen ( $event_owner ) ) {
+    $class = "layerentry";
+  } else {
+    $class = "entry";
+    if ( $status == "W" ) $class = "unapprovedentry";
+  }
+  // if we are looking at a view, then always use "entry"
+  if ( strstr ( $PHP_SELF, "view_m.php" ) ||
+    strstr ( $PHP_SELF, "view_w.php" ) ||
+    strstr ( $PHP_SELF, "view_v.php" ) ||
+    strstr ( $PHP_SELF, "view_t.php" ) )
+    $class = "entry";
+
+  if ( $pri == 3 ) echo "<strong>";
+  $popupid = "eventinfo-$id-$key";
+  $key++;
+  echo "<a class=\"$class\" href=\"view_entry.php?id=$id&date=$date";
+  if ( strlen ( $user ) > 0 )
+    echo "&user=" . $user;
+  echo "\" onmouseover=\"window.status='" . 
+    translate("View this entry") . "'; show(event, '$popupid'); return true;\" onmouseout=\"hide('$popupid'); return true;\">";
+
+  if ( $login != $event_owner && strlen ( $event_owner ) ) {
+    if ($layers) foreach ($layers as $layer) {
+        if($layer['cal_layeruser'] == $event_owner) {
+            $insidespan = true;
+            echo("<span style=\"color:" . $layer['cal_color'] . ";\">");
+        }
+    }
+  }
+
+  echo "[$event_owner] ";
+  $timestr = "";
+  if ( $duration == ( 24 * 60 ) ) {
+    $timestr = translate("All day event");
+  } else if ( $time >= 0 ) {
+    $timestr = display_time ( $time );
+    if ( $duration > 0 ) {
+      // calc end time
+      $h = (int) ( $time / 10000 );
+      $m = ( $time / 100 ) % 100;
+      $m += $duration;
+      $d = $duration;
+      while ( $m >= 60 ) {
+        $h++;
+        $m -= 60;
+      }
+      $end_time = sprintf ( "%02d%02d00", $h, $m );
+      $timestr .= " - " . display_time ( $end_time );
+    }
+  }
+  if ( $login != $user && $access == 'R' && strlen ( $user ) )
+    echo "(" . translate("Private") . ")";
+  else
+  if ( $login != $event_owner && $access == 'R' && strlen ( $event_owner ) )
+    echo "(" . translate("Private") . ")";
+  else
+  if ( $login != $event_owner && strlen ( $event_owner ) )
+  {
+    echo htmlspecialchars ( $name );
+    if ( $insidespan ) { echo ("</span>"); } //end color span
+  }
+  else
+    echo htmlspecialchars ( $name );
+  echo "</a>";
+  if ( $pri == 3 ) echo "</strong>"; //end font-weight span
+  echo "</td>\n";
+  if ( $pos < 2 ) {
+    if ( $pos < 1 ) {
+      echo "<td style=\"width:$ev_duration%;\"><table  class=\"entrybar\">\n<tr>\n<td class=\"entry\"> </td>\n";
+    }
+    echo "</tr>\n</table></td>\n";
+    echo ($ev_padding > 0 ? "<td style=\"text-align:left; width:$ev_padding%;\"> </td>\n" : "" );
+  }
+  echo "</tr>\n</table>\n";
+  if ( $login != $user && $access == 'R' && strlen ( $user ) )
+    $eventinfo .= build_event_popup ( $popupid, $event_owner,
+      translate("This event is confidential"), "" );
+  else
+  if ( $login != $event_owner && $access == 'R' && strlen ( $event_owner ) )
+    $eventinfo .= build_event_popup ( $popupid, $event_owner,
+      translate("This event is confidential"), "" );
+  else
+    $eventinfo .= build_event_popup ( $popupid, $event_owner,
+      $description, $timestr, site_extras_for_popup ( $id ) );
+}
+
+/**
+ * Prints the header for the timebar.
+ *
+ * @param int $start_hour Start hour
+ * @param int $end_hour   End hour
+ */
+function print_header_timebar($start_hour, $end_hour) {
+  //      sh+1   ...   eh-1
+  // +------+----....----+------+
+  // |      |            |      |
+
+  // print hours
+  if ( ($end_hour - $start_hour) == 0 )
+    $offset = 0;
+  else
+    $offset = round(100/($end_hour - $start_hour));
+    echo "\n<!-- TIMEBAR -->\n<table class=\"timebar\">\n<tr><td style=\"width:$offset%;\"> </td>\n";
+   for ($i = $start_hour+1; $i < $end_hour; $i++) {
+//     $prev_offset = $offset;
+//     $offset = round(100/($end_hour - $start_hour)*($i - $start_hour + .5));
+     $offset = round(100/($end_hour - $start_hour));
+     $width = $offset;
+    echo "<td style=\"width:$width%;text-align:left;\">$i</td>\n";
+   }
+//   $width = 100 - $offset;
+//   echo "<td style=\"width:$width%;\"> </td>\n";
+   echo "</tr>\n</table>\n<!-- /TIMEBAR -->\n";
+ 
+   // print yardstick
+  echo "\n<!-- YARDSTICK -->\n<table class=\"yardstick\">\n<tr>\n";
+  $width = round(100/($end_hour - $start_hour));
+  for ($i = $start_hour; $i < $end_hour; $i++) {
+    echo "<td style=\"width:$width%;\"> </td>\n";
+   }
+   echo "</tr>\n</table>\n<!-- /YARDSTICK -->\n";
+ }
+
+/**
+ * Gets a list of nonuser calendars and return info in an array.
+ *
+ * @param string $user Login of admin of the nonuser calendars
+ *
+ * @return array Array of nonuser cals, where each is an array with the
+ *               following fields:
+ * - <var>cal_login</var>
+ * - <var>cal_lastname</var>
+ * - <var>cal_firstname</var>
+ * - <var>cal_admin</var>
+ * - <var>cal_fullname</var>
+ */
+function get_nonuser_cals ($user = '') {
+  $count = 0;
+  $ret = array ();
+  $sql = "SELECT cal_login, cal_lastname, cal_firstname, " .
+    "cal_admin FROM webcal_nonuser_cals ";
+  if ($user != '') $sql .= "WHERE cal_admin = '$user' ";
+  $sql .= "ORDER BY cal_lastname, cal_firstname, cal_login";
+  $res = dbi_query ( $sql );
+  if ( $res ) {
+    while ( $row = dbi_fetch_row ( $res ) ) {
+      if ( strlen ( $row[1] ) || strlen ( $row[2] ) )
+        $fullname = "$row[2] $row[1]";
+      else
+        $fullname = $row[0];
+      $ret[$count++] = array (
+        "cal_login" => $row[0],
+        "cal_lastname" => $row[1],
+        "cal_firstname" => $row[2],
+        "cal_admin" => $row[3],
+        "cal_fullname" => $fullname
+      );
+    }
+    dbi_free_result ( $res );
+  }
+  return $ret;
+}
+
+/**
+ * Loads nonuser variables (login, firstname, etc.).
+ *
+ * The following variables will be set:
+ * - <var>login</var>
+ * - <var>firstname</var>
+ * - <var>lastname</var>
+ * - <var>fullname</var>
+ * - <var>admin</var>
+ * - <var>email</var>
+ *
+ * @param string $login  Login name of nonuser calendar
+ * @param string $prefix Prefix to use for variables that will be set.
+ *                       For example, if prefix is "temp", then the login will
+ *                       be stored in the <var>$templogin</var> global variable.
+ */
+function nonuser_load_variables ( $login, $prefix ) {
+  global $error,$nuloadtmp_email;
+  $ret =  false;
+  $res = dbi_query ( "SELECT cal_login, cal_lastname, cal_firstname, " .
+    "cal_admin FROM webcal_nonuser_cals WHERE cal_login = '$login'" );
+  if ( $res ) {
+    while ( $row = dbi_fetch_row ( $res ) ) {
+      if ( strlen ( $row[1] ) || strlen ( $row[2] ) )
+        $fullname = "$row[2] $row[1]";
+      else
+        $fullname = $row[0];
+
+        // We need the email address for the admin
+        user_load_variables ( $row[3], 'nuloadtmp_' );
+
+        $GLOBALS[$prefix . "login"] = $row[0];
+        $GLOBALS[$prefix . "firstname"] = $row[2];
+        $GLOBALS[$prefix . "lastname"] = $row[1];
+        $GLOBALS[$prefix . "fullname"] = $fullname;
+        $GLOBALS[$prefix . "admin"] = $row[3];
+        $GLOBALS[$prefix . "email"] = $nuloadtmp_email;
+        $ret = true;
+    }
+    dbi_free_result ( $res );
+  }
+  return $ret;
+}
+
+/**
+  * Checks the webcal_nonuser_cals table to determine if the user is the
+  * administrator for the nonuser calendar.
+  *
+  * @param string $login   Login of user that is the potential administrator
+  * @param string $nonuser Login name for nonuser calendar
+  *
+  * @return bool True if the user is the administrator for the nonuser calendar
+  */
+function user_is_nonuser_admin ( $login, $nonuser ) {
+  $ret = false;
+
+  $res = dbi_query ( "SELECT * FROM webcal_nonuser_cals " .
+    "WHERE cal_login = '$nonuser' AND cal_admin = '$login'" );
+  if ( $res ) {
+    if ( dbi_fetch_row ( $res ) )
+      $ret = true;
+    dbi_free_result ( $res );
+  }
+  return $ret;
+}
+
+/**
+ * Loads nonuser preferences from the webcal_user_pref table if on a nonuser
+ * admin page.
+ *
+ * @param string $nonuser Login name for nonuser calendar
+ */
+function load_nonuser_preferences ($nonuser) {
+  global $prefarray;
+  $res = dbi_query (
+    "SELECT cal_setting, cal_value FROM webcal_user_pref " .
+    "WHERE cal_login = '$nonuser'" );
+  if ( $res ) {
+    while ( $row = dbi_fetch_row ( $res ) ) {
+      $setting = $row[0];
+      $value = $row[1];
+      $sys_setting = "sys_" . $setting;
+      // save system defaults
+      // ** don't override ones set by load_user_prefs
+      if ( ! empty ( $GLOBALS[$setting] ) && empty ( $GLOBALS["sys_" . $setting] ))
+        $GLOBALS["sys_" . $setting] = $GLOBALS[$setting];
+      $GLOBALS[$setting] = $value;
+      $prefarray[$setting] = $value;
+    }
+    dbi_free_result ( $res );
+  }
+}
+
+/**
+ * Determines what the day is after the <var>$TZ_OFFSET</var> and sets it globally.
+ *
+ * The following global variables will be set:
+ * - <var>$thisyear</var>
+ * - <var>$thismonth</var>
+ * - <var>$thisday</var>
+ * - <var>$thisdate</var>
+ * - <var>$today</var>
+ *
+ * @param string $date The date in YYYYMMDD format
+ */
+function set_today($date) {
+  global $thisyear, $thisday, $thismonth, $thisdate, $today;
+  global $TZ_OFFSET, $month, $day, $year, $thisday;
+
+  // Adjust for TimeZone
+  $today = time() + ($TZ_OFFSET * 60 * 60);
+
+  if ( ! empty ( $date ) && ! empty ( $date ) ) {
+    $thisyear = substr ( $date, 0, 4 );
+    $thismonth = substr ( $date, 4, 2 );
+    $thisday = substr ( $date, 6, 2 );
+  } else {
+    if ( empty ( $month ) || $month == 0 )
+      $thismonth = date("m", $today);
+    else
+      $thismonth = $month;
+    if ( empty ( $year ) || $year == 0 )
+      $thisyear = date("Y", $today);
+    else
+      $thisyear = $year;
+    if ( empty ( $day ) || $day == 0 )
+      $thisday = date("d", $today);
+    else
+      $thisday = $day;
+  }
+  $thisdate = sprintf ( "%04d%02d%02d", $thisyear, $thismonth, $thisday );
+}
+
+/**
+ * Converts from Gregorian Year-Month-Day to ISO YearNumber-WeekNumber-WeekDay.
+ *
+ * @internal JGH borrowed gregorianToISO from PEAR Date_Calc Class and added
+ * $GLOBALS["WEEK_START"] (change noted)
+ *
+ * @param int $day   Day of month
+ * @param int $month Number of month
+ * @param int $year  Year
+ *
+ * @return string Date in ISO YearNumber-WeekNumber-WeekDay format
+ *
+ * @ignore
+ */
+function gregorianToISO($day,$month,$year) {
+    $mnth = array (0,31,59,90,120,151,181,212,243,273,304,334);
+    $y_isleap = isLeapYear($year);
+    $y_1_isleap = isLeapYear($year - 1);
+    $day_of_year_number = $day + $mnth[$month - 1];
+    if ($y_isleap && $month > 2) {
+        $day_of_year_number++;
+    }
+    // find Jan 1 weekday (monday = 1, sunday = 7)
+    $yy = ($year - 1) % 100;
+    $c = ($year - 1) - $yy;
+    $g = $yy + intval($yy/4);
+    $jan1_weekday = 1 + intval((((($c / 100) % 4) * 5) + $g) % 7);
+
+
+    // JGH added next if/else to compensate for week begins on Sunday
+    if (! $GLOBALS["WEEK_START"] && $jan1_weekday < 7) {
+      $jan1_weekday++;
+    } elseif (! $GLOBALS["WEEK_START"] && $jan1_weekday == 7) {
+      $jan1_weekday=1;
+    }
+
+    // weekday for year-month-day
+    $h = $day_of_year_number + ($jan1_weekday - 1);
+    $weekday = 1 + intval(($h - 1) % 7);
+    // find if Y M D falls in YearNumber Y-1, WeekNumber 52 or
+    if ($day_of_year_number <= (8 - $jan1_weekday) && $jan1_weekday > 4){
+        $yearnumber = $year - 1;
+        if ($jan1_weekday == 5 || ($jan1_weekday == 6 && $y_1_isleap)) {
+            $weeknumber = 53;
+        } else {
+            $weeknumber = 52;
+        }
+    } else {
+        $yearnumber = $year;
+    }
+    // find if Y M D falls in YearNumber Y+1, WeekNumber 1
+    if ($yearnumber == $year) {
+        if ($y_isleap) {
+            $i = 366;
+        } else {
+            $i = 365;
+        }
+        if (($i - $day_of_year_number) < (4 - $weekday)) {
+            $yearnumber++;
+            $weeknumber = 1;
+        }
+    }
+    // find if Y M D falls in YearNumber Y, WeekNumber 1 through 53
+    if ($yearnumber == $year) {
+        $j = $day_of_year_number + (7 - $weekday) + ($jan1_weekday - 1);
+        $weeknumber = intval($j / 7);
+        if ($jan1_weekday > 4) {
+            $weeknumber--;
+        }
+    }
+    // put it all together
+    if ($weeknumber < 10)
+        $weeknumber = '0'.$weeknumber;
+    return "{$yearnumber}-{$weeknumber}-{$weekday}";
+}
+
+/**
+ * Is this a leap year?
+ *
+ * @internal JGH Borrowed isLeapYear from PEAR Date_Calc Class
+ *
+ * @param int $year Year
+ *
+ * @return bool True for a leap year, else false
+ *
+ * @ignore
+ */
+function isLeapYear($year='') {
+  if (empty($year)) $year = strftime("%Y",time());
+  if (strlen($year) != 4) return false;
+  if (preg_match('/\D/',$year)) return false;
+  return (($year % 4 == 0 && $year % 100 != 0) || $year % 400 == 0);
+}
+
+/**
+ * Replaces unsafe characters with HTML encoded equivalents.
+ *
+ * @param string $value Input text
+ *
+ * @return string The cleaned text
+ */
+function clean_html($value){
+  $value = htmlspecialchars($value, ENT_QUOTES);
+  $value = strtr($value, array(
+    '('   => '(',
+    ')'   => ')'
+  ));
+  return $value;
+}
+
+/**
+ * Removes non-word characters from the specified text.
+ *
+ * @param string $data Input text
+ *
+ * @return string The converted text
+ */
+function clean_word($data) { 
+  return preg_replace("/\W/", '', $data);
+}
+
+/**
+ * Removes non-digits from the specified text.
+ *
+ * @param string $data Input text
+ *
+ * @return string The converted text
+ */
+function clean_int($data) { 
+  return preg_replace("/\D/", '', $data);
+}
+
+/**
+ * Removes whitespace from the specified text.
+ *
+ * @param string $data Input text
+ * 
+ * @return string The converted text
+ */
+function clean_whitespace($data) { 
+  return preg_replace("/\s/", '', $data);
+}
+
+/**
+ * Converts language names to their abbreviation.
+ *
+ * @param string $name Name of the language (such as "French")
+ *
+ * @return string The abbreviation ("fr" for "French")
+ */
+function languageToAbbrev ( $name ) {
+  global $browser_languages;
+  foreach ( $browser_languages as $abbrev => $langname ) {
+    if ( $langname == $name )
+      return $abbrev;
+  }
+  return false;
+}
+
+/**
+ * Creates the CSS for using gradient.php, if the appropriate GD functions are
+ * available.
+ *
+ * A one-pixel wide image will be used for the background image.
+ *
+ * <b>Note:</b> The gd library module needs to be available to use gradient
+ * images.  If it is not available, a single background color will be used
+ * instead.
+ *
+ * @param string $color   Base color
+ * @param int    $height  Height of gradient image
+ * @param int    $percent How many percent lighter the top color should be
+ *                        than the base color at the bottom of the image
+ *
+ * @return string The style sheet text to use
+ */
+function background_css ( $color, $height = '', $percent = '' ) {
+  $ret = '';
+
+  if ( ( function_exists ( 'imagepng' ) || function_exists ( 'imagegif' ) )
+    && ( empty ( $GLOBALS['enable_gradients'] ) ||
+    $GLOBALS['enable_gradients'] == 'Y' ) ) {
+    $ret = "background: $color url(\"gradient.php?base=" . substr ( $color, 1 );
+
+    if ( $height != '' ) {
+      $ret .= "&height=$height";
+    }
+
+    if ( $percent != '' ) {
+      $ret .= "&percent=$percent";
+    }
+
+    $ret .= "\") repeat-x;\n";
+  } else {
+    $ret = "background-color: $color;\n";
+  }
+
+  return $ret;
+}
+
+/**
+ * Draws a daily outlook style availability grid showing events that are
+ * approved and awaiting approval.
+ *
+ * @param string $date         Date to show the grid for
+ * @param array  $participants Which users should be included in the grid
+ * @param string $popup        Not used
+ */
+function daily_matrix ( $date, $participants, $popup = '' ) {
+  global $CELLBG, $TODAYCELLBG, $THFG, $THBG, $TABLEBG;
+  global $user_fullname, $repeated_events, $events;
+  global $WORK_DAY_START_HOUR, $WORK_DAY_END_HOUR, $TZ_OFFSET,$ignore_offset;
+
+  $increment = 15;
+  $interval = 4;
+  $participant_pct = '20%'; //use percentage
+
+  $first_hour = $WORK_DAY_START_HOUR;
+  $last_hour = $WORK_DAY_END_HOUR;
+  $hours = $last_hour - $first_hour;
+  $cols = (($hours * $interval) + 1);
+  $total_pct = '80%';
+  $cell_pct =  80 /($hours * $interval);
+  $master = array();
+
+  // Build a master array containing all events for $participants
+  for ( $i = 0; $i < count ( $participants ); $i++ ) {
+
+    /* Pre-Load the repeated events for quckier access */
+    $repeated_events = read_repeated_events ( $participants[$i], "", $date );
+    /* Pre-load the non-repeating events for quicker access */
+    $events = read_events ( $participants[$i], $date, $date );
+
+    // get all the repeating events for this date and store in array $rep
+    $rep = get_repeating_entries ( $participants[$i], $date );
+    // get all the non-repeating events for this date and store in $ev
+    $ev = get_entries ( $participants[$i], $date );
+
+    // combine into a single array for easy processing
+    $ALL = array_merge ( $rep, $ev );
+
+    foreach ( $ALL as $E ) {
+      if ($E['cal_time'] == 0) {
+        $E['cal_time'] = $first_hour."0000";
+        $E['cal_duration'] = 60 * ( $last_hour - $first_hour );
+      } else {
+        $E['cal_time'] = sprintf ( "%06d", $E['cal_time']);
+      }
+
+      $hour = substr($E['cal_time'], 0, 2 );
+      $mins = substr($E['cal_time'], 2, 2 );
+       
+      // Timezone Offset
+      if ( ! $ignore_offset ) $hour += $TZ_OFFSET;
+      while ( $hour < 0 ) $hour += 24;
+      while ( $hour > 23 ) $hour -= 24;
+
+      // Make sure hour is 2 digits
+      $hour = sprintf ( "%02d",$hour);
+
+      // convert cal_time to slot
+      if ($mins < 15) {
+        $slot = $hour.'';
+      } elseif ($mins >= 15 && $mins < 30) {
+        $slot = $hour.'.25';
+      } elseif ($mins >= 30 && $mins < 45) {
+        $slot = $hour.'.5';
+      } elseif ($mins >= 45) {
+        $slot = $hour.'.75';
+      }
+
+      // convert cal_duration to bars
+      $bars = $E['cal_duration'] / $increment;
+
+      // never replace 'A' with 'W'
+      for ($q = 0; $bars > $q; $q++) {
+        $slot = sprintf ("%02.2f",$slot);
+        if (strlen($slot) == 4) $slot = '0'.$slot; // add leading zeros
+        $slot = $slot.''; // convert to a string
+        if ( empty ( $master['_all_'][$slot] ) ||
+          $master['_all_'][$slot]['stat'] != 'A') {
+          $master['_all_'][$slot]['stat'] = $E['cal_status'];
+        }
+        if ( empty ( $master[$participants[$i]][$slot] ) ||
+          $master[$participants[$i]][$slot]['stat'] != 'A' ) {
+          $master[$participants[$i]][$slot]['stat'] = $E['cal_status'];
+          $master[$participants[$i]][$slot]['ID'] = $E['cal_id'];
+        }
+        $slot = $slot + '0.25';
+      }
+
+    }
+  }
+?>
+  <br />
+  <table  align="center" class="matrixd" style="width:<?php echo $total_pct;?>;" cellspacing="0" cellpadding="0">
+  <tr><td class="matrix" colspan="<?php echo $cols;?>"></td></tr>
+  <tr><th style="width:<?php echo $participant_pct;?>;">
+    <?php etranslate("Participants");?></th>
+<?php
+  $str = '';
+  $MouseOut = "onmouseout=\"window.status=''; this.style.backgroundColor='".$THBG."';\"";
+  $CC = 1;
+  for($i=$first_hour;$i<$last_hour;$i++) {
+    $hour = $i;
+    if ( $GLOBALS["TIME_FORMAT"] == "12" ) {
+      $hour %= 12;
+      if ( $hour == 0 ) $hour = 12;
+    }
+
+     for($j=0;$j<$interval;$j++) {
+        $str .= ' <td  id="C'.$CC.'" class="dailymatrix" ';
+        $MouseDown = 'onmousedown="schedule_event('.$i.','.sprintf ("%02d",($increment * $j)).');"';
+        switch($j) {
+          case 1:
+                  if($interval == 4) { $k = ($hour<=9?'0':substr($hour,0,1)); }
+    $str .= 'style="width:'.$cell_pct.'%; text-align:right;"  '.$MouseDown." onmouseover=\"window.status='Schedule a ".$hour.':'.($increment * $j<=9?'0':'').($increment * $j)." appointment.'; this.style.backgroundColor='#CCFFCC'; return true;\" ".$MouseOut." title=\"Schedule an appointment for ".$hour.':'.($increment * $j<=9?'0':'').($increment * $j).".\">";
+                  $str .= $k."</td>\n";
+                  break;
+          case 2:
+                  if($interval == 4) { $k = ($hour<=9?substr($hour,0,1):substr($hour,1,2)); }
+    $str .= 'style="width:'.$cell_pct.'%; text-align:left;" '.$MouseDown." onmouseover=\"window.status='Schedule a ".$hour.':'.($increment * $j)." appointment.'; this.style.backgroundColor='#CCFFCC'; return true;\" ".$MouseOut." title=\"Schedule an appointment for ".$hour.':'.($increment * $j<=9?'0':'').($increment * $j).".\">";
+                  $str .= $k."</td>\n";
+                  break;
+          default:
+    $str .= 'style="width:'.$cell_pct.'%;" '.$MouseDown." onmouseover=\"window.status='Schedule a ".$hour.':'.($increment * $j<=9?'0':'').($increment * $j)." appointment.'; this.style.backgroundColor='#CCFFCC'; return true;\" ".$MouseOut." title=\"Schedule an appointment for ".$hour.':'.($increment * $j<=9?'0':'').($increment * $j).".\">";
+                  $str .= "  </td>\n";
+                  break;
+        }
+       $CC++;
+     }
+  }
+  echo $str .
+    "</tr>\n<tr><td class=\"matrix\" colspan=\"$cols\"></td></tr>\n";
+
+  // Add user _all_ to beginning of $participants array
+  array_unshift($participants, '_all_');
+
+  // Javascript for cells
+  $MouseOver = "onmouseover=\"this.style.backgroundColor='#CCFFCC';\"";
+  $MouseOut = "onmouseout=\"this.style.backgroundColor='".$CELLBG."';\"";
+
+  // Display each participant
+  for ( $i = 0; $i < count ( $participants ); $i++ ) {
+    if ($participants[$i] != '_all_') {
+      // Load full name of user
+      user_load_variables ( $participants[$i], "user_" );
+  
+      // exchange space for   to keep from breaking
+      $user_nospace = preg_replace ( '/\s/', ' ', $user_fullname );
+    } else {
+      $user_nospace = translate("All Attendees");
+      $user_nospace = preg_replace ( '/\s/', ' ', $user_nospace );
+    }
+
+    echo "<tr>\n<th class=\"row\" style=\"width:{$participant_pct};\">".$user_nospace."</th>\n";
+    $col = 1;
+    $viewMsg = translate ( "View this entry" );
+
+    // check each timebar
+    for ( $j = $first_hour; $j < $last_hour; $j++ ) {
+       for ( $k = 0; $k < $interval; $k++ ) {
+         $border = ($k == '0') ? ' border-left: 1px solid #000000;' : "";
+         $MouseDown = 'onmousedown="schedule_event('.$j.','.sprintf ("%02d",($increment * $k)).');"';
+        $RC = $CELLBG;
+         //$space = '';
+         $space = " ";
+
+         $r = sprintf ("%02d",$j) . '.' . sprintf ("%02d", (25 * $k)).'';
+         if ( empty ( $master[$participants[$i]][$r] ) ) {
+           // ignore this..
+         } else if ( empty ( $master[$participants[$i]][$r]['ID'] ) ) {
+           // This is the first line for 'all' users.  No event here.
+           $space = "<span class=\"matrix\"><img src=\"pix.gif\" alt=\"\" style=\"height: 8px\" /></span>";
+         } else if ($master[$participants[$i]][$r]['stat'] == "A") {
+           $space = "<a class=\"matrix\" href=\"view_entry.php?id={$master[$participants[$i]][$r]['ID']}\"><img src=\"pix.gif\" title=\"$viewMsg\" alt=\"$viewMsg\" /></a>";
+         } else if ($master[$participants[$i]][$r]['stat'] == "W") {
+           $space = "<a class=\"matrix\" href=\"view_entry.php?id={$master[$participants[$i]][$r]['ID']}\"><img src=\"pixb.gif\" title=\"$viewMsg\" alt=\"$viewMsg\" /></a>";
+         }
+
+         echo "<td class=\"matrixappts\" style=\"width:{$cell_pct}%;$border\" ";
+         if ($space == " ") echo "$MouseDown $MouseOver $MouseOut";
+         echo ">$space</td>\n";
+         $col++;
+      }
+    }
+    
+    echo "</tr><tr>\n<td class=\"matrix\" colspan=\"$cols\">" .
+      "<img src=\"pix.gif\" alt=\"-\" /></td></tr>\n";
+  } // End foreach participant
+  
+  echo "</table><br />\n";
+  $busy = translate ("Busy");
+  $tentative = translate ("Tentative");
+  echo "<table align=\"center\"><tr><td class=\"matrixlegend\" >\n";
+  echo "<img src=\"pix.gif\" title=\"$busy\" alt=\"$busy\" /> $busy      \n";
+  echo "<img src=\"pixb.gif\" title=\"$tentative\" alt=\"$tentative\" /> $tentative\n";
+  echo "</td></tr></table>\n";
+} 
+
+/**
+ * Return the time in HHMMSS format of input time + duration
+ *
+ *
+ * <b>Note:</b> The gd library module needs to be available to use gradient
+ * images.  If it is not available, a single background color will be used
+ * instead.
+ *
+ * @param string $time   format "235900"
+ * @param int $duration  number of minutes
+ *
+ * @return string The time in HHMMSS format
+ */
+function add_duration ( $time, $duration ) {
+  $hour = (int) ( $time / 10000 );
+  $min = ( $time / 100 ) % 100;
+  $minutes = $hour * 60 + $min + $duration;
+  $h = $minutes / 60;
+  $m = $minutes % 60;
+  $ret = sprintf ( "%d%02d00", $h, $m );
+  //echo "add_duration ( $time, $duration ) = $ret <br />\n";
+  return $ret;
+}
+?>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/help_trailer.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/help_trailer.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/help_trailer.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,12 @@
+<?php
+if ( empty ( $PHP_SELF ) && ! empty ( $_SERVER ) &&
+  ! empty ( $_SERVER['PHP_SELF'] ) ) {
+  $PHP_SELF = $_SERVER['PHP_SELF'];
+}
+if ( ! empty ( $PHP_SELF ) && preg_match ( "/\/includes\//", $PHP_SELF ) ) {
+    die ( "You can't access this file directly!" );
+}
+?>
+
+<hr />
+<strong><?php etranslate("Go to")?>:</strong> <a title="<?php etranslate("Help Index")?>" href="help_index.php"><?php etranslate("Help Index")?></a>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/index.html
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/index.html	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/index.html	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE html
+    PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>404 Not Found</title>
+</head>
+<body>
+<h1>Not Found</h1>
+The requested URL was not found on this server.
+<br /><hr />
+</body>
+</html>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/index.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/index.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/index.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE html
+    PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>404 Not Found</title>
+</head>
+<body>
+<h1>Not Found</h1>
+The requested URL was not found on this server.
+<br /><hr />
+</body>
+</html>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/init.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/init.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/init.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,397 @@
+<?php
+/**
+ * Does various initialization tasks and includes all needed files.
+ *
+ * This page is included by most WebCalendar pages as the only include file.
+ * This greatly simplifies the other PHP pages since they don't need to worry
+ * about what files it includes.
+ *
+ * <b>Comments:</b>
+ * The following scripts do not use this file:
+ * - login.php
+ * - week_ssi.php
+ * - upcoming.php
+ * - tools/send_reminders.php
+ *
+ * How to use:
+ * 1. call include_once 'includes/init.php'; at the top of your script.
+ * 2. call any other functions or includes not in this file that you need
+ * 3. call the print_header function with proper arguments
+ *
+ * What gets called:
+ *
+ * - include_once 'includes/config.php';
+ * - include_once 'includes/php-dbi.php';
+ * - include_once 'includes/functions.php';
+ * - include_once "includes/$user_inc";
+ * - include_once 'includes/validate.php';
+ * - include_once 'includes/connect.php';
+ * - {@link load_global_settings()};
+ * - {@link load_user_preferences()};
+ * - include_once 'includes/translate.php';
+ * - include_once 'includes/styles.php';
+ *
+ * Also, for month.php, day.php, week.php, week_details.php:
+ * - {@link send_no_cache_header()};
+ *
+ * @version $Id: init.php,v 1.53.2.1 2005/07/14 23:00:37 cknudsen Exp $
+ * @package WebCalendar
+ *
+ */
+
+// Security Check
+if ( empty ( $PHP_SELF ) && ! empty ( $_SERVER ) &&
+  ! empty ( $_SERVER['PHP_SELF'] ) ) {
+  $PHP_SELF = $_SERVER['PHP_SELF'];
+}
+if ( ! empty ( $PHP_SELF ) && preg_match ( "/\/includes\//", $PHP_SELF ) ) {
+  die ( "You can't access this file directly!" );
+}
+
+// Make sure another app in the same domain doesn't have a 'user' cookie
+if ( empty ( $HTTP_GET_VARS ) ) $HTTP_GET_VARS = $_GET;
+if ( empty ( $HTTP_POST_VARS ) ) $HTTP_POST_VARS = $_POST;
+if ( ( ! empty ( $HTTP_GET_VARS ) && empty ( $HTTP_GET_VARS['user'] ) ) &&
+  ( ! empty ( $HTTP_POST_VARS ) && empty ( $HTTP_POST_VARS['user'] ) ) &&
+  isset ( $GLOBALS['user'] ) ) {
+  unset ( $GLOBALS['user'] );
+}
+
+// Get script name
+$self = $_SERVER['PHP_SELF'];
+if ( empty ( $self ) )
+  $self = $PHP_SELF;
+preg_match ( "/\/(\w+\.php)/", $self, $match);
+$SCRIPT = $match[1];
+
+// Several files need a no-cache header and some of the same code
+$special = array('month.php', 'day.php', 'week.php', 'week_details.php', 'year.php');
+$DMW = in_array($SCRIPT, $special);
+
+// Unset some variables that shouldn't be set
+unset($user_inc);
+ 
+include_once 'includes/config.php';
+include_once 'includes/php-dbi.php';
+include_once 'includes/functions.php';
+include_once "includes/$user_inc";
+include_once 'includes/validate.php';
+include_once 'includes/connect.php';
+
+load_global_settings ();
+
+if ( empty ( $ovrd ) )
+  load_user_preferences ();
+
+include_once 'includes/translate.php';
+
+// error-check some commonly used form variable names
+$id = getValue ( "id", "[0-9]+", true );
+$user = getValue ( "user", "[A-Za-z0-9_\.=@,\-]*", true );
+$date = getValue ( "date", "[0-9]+" );
+$year = getValue ( "year", "[0-9]+" );
+$month = getValue ( "month", "[0-9]+" );
+$hour = getValue ( "hour", "[0-9]+" );
+$minute = getValue ( "minute", "[0-9]+" );
+$cat_id = getValue ( "cat_id", "[0-9]+" );
+$friendly = getValue ( "friendly", "[01]" );
+if ( empty ( $public_access ) )
+  $public_access = 'N';
+
+// Load if $SCRIPT is in $special array:
+if ($DMW) {
+  
+  // Tell the browser not to cache
+  send_no_cache_header ();
+
+  if ( $allow_view_other != 'Y' && ! $is_admin )
+    $user = "";
+
+  $can_add = ( $readonly == "N" || $is_admin == "Y" );
+  if ( $public_access == "Y" && $login == "__public__" ) {
+    if ( $public_access_can_add != "Y" )
+      $can_add = false;
+    if ( $public_access_others != "Y" )
+      $user = ""; // security precaution
+  }
+
+  if ( $groups_enabled == "Y" && $user_sees_only_his_groups == "Y" &&
+    ! $is_admin ) {
+    $valid_user = false;
+    $userlist = get_my_users();
+    if ($nonuser_enabled == "Y" ) {
+      $nonusers = get_nonuser_cals ();
+      $userlist =  array_merge($nonusers, $userlist);
+    }
+    for ( $i = 0; $i < count ( $userlist ); $i++ ) {
+      if ( $user == $userlist[$i]['cal_login'] ) $valid_user = true;
+    } 
+    if ($valid_user == false) { 
+      $user = ""; // security precaution
+    }
+  }
+
+  if ( ! empty ( $user ) ) {
+    $u_url = "user=$user&";
+    user_load_variables ( $user, "user_" );
+    if ( $user == "__public__" )
+      $user_fullname = translate ( $PUBLIC_ACCESS_FULLNAME );
+  } else {
+    $u_url = "";
+    $user_fullname = $fullname;
+    if ( $login == "__public__" )
+      $user_fullname = translate ( $PUBLIC_ACCESS_FULLNAME );
+  }
+
+  set_today($date);
+
+  if ( $categories_enabled == "Y" ) {
+    if ( ! empty ( $cat_id ) ) {
+      $cat_id = $cat_id;
+    } elseif ( ! empty ( $CATEGORY_VIEW ) ) {
+      $cat_id = $CATEGORY_VIEW;
+    } else {
+      $cat_id = '';
+    }
+  } else {
+    $cat_id = '';
+  }
+  if ( empty ( $cat_id ) )
+    $caturl = "";
+  else
+    $caturl = "&cat_id=$cat_id";
+}
+
+/** Maps page filenames to the id that page's <body> tag will have
+ *
+ * @global array $bodyid
+ */
+$bodyid = array(
+ "activity_log.php" => "activitylog",
+ "add_entry.php" => "addentry",
+ "admin.php" => "admin",
+ "adminhome.php" => "adminhome",
+ "approve_entry.php" => "approveentry",
+ "assistant_edit.php" => "assistantedit",
+ "category.php" => "category",
+ "day.php" => "day",
+ "del_entry.php" => "delentry",
+ "del_layer.php" => "dellayer",
+ "edit_entry.php" => "editentry",
+ "edit_layer.php" => "editlayer",
+ "edit_nonusers.php" => "editnonusers",
+ "edit_nonusers_handler.php" => "editnonusershandler",
+ "edit_report.php" => "editreport",
+ "edit_template.php" => "edittemplate",
+ "edit_user.php" => "edituser",
+ "edit_user_handler.php" => "edituserhandler",
+ "export.php" => "export",
+ "group_edit.php" => "groupedit",
+ "group_edit_handler.php" => "groupedithandler",
+ "groups.php" => "groups",
+ "help_admin.php" => "helpadmin",
+ "help_bug.php" => "helpbug",
+ "help_edit_entry.php" => "helpeditentry",
+ "help_import.php" => "helpimport",
+ "help_index.php" => "helpindex",
+ "help_layers.php" => "helplayers",
+ "help_pref.php" => "helppref",
+ "import.php" => "import",
+ "index.php" => "index",
+ "layers.php" => "layers",
+ "layers_toggle.php" => "layerstoggle",
+ "list_unapproved.php" => "listunapproved",
+ "login.php" => "login",
+ "month.php" => "month",
+ "nonusers.php" => "nonusers",
+ "pref.php" => "pref",
+ "publish.php" => "publish",
+ "purge.php" => "purge",
+ "reject_entry.php" => "rejectentry",
+ "report.php" => "report",
+ "search.php" => "search",
+ "select_user.php" => "selectuser",
+ "set_entry_cat.php" => "setentrycat",
+ "users.php" => "users",
+ "usersel.php" => "usersel",
+ "view_d.php" => "viewd",
+ "view_entry.php" => "viewentry",
+ "view_l.php" => "viewl",
+ "view_m.php" => "viewm",
+ "view_t.php" => "viewt",
+ "view_v.php" => "viewv",
+ "view_w.php" => "vieww",
+ "views.php" => "views",
+ "views_edit.php" => "viewsedit",
+ "week.php" => "week",
+ "week_details.php" => "weekdetails",
+ "week_ssi.php" => "weekssi",
+ "year.php" => "year"
+);
+
+/**
+ * Prints the HTML header and opening HTML body tag.
+ *
+ * @param array  $includes     Array of additional files to include referenced
+ *                             from the includes directory
+ * @param string $HeadX        Data to be printed inside the head tag (meta,
+ *                             script, etc)
+ * @param string $BodyX        Data to be printed inside the Body tag (onload
+ *                             for example)
+ * @param bool   $disbleCustom Do not include custom header? (useful for small
+ *                             popup windows, such as color selection)
+ * @param bool   $disableStyle Do not include the standard css?
+ */
+function print_header($includes = '', $HeadX = '', $BodyX = '',
+  $disableCustom=false, $disableStyle=false) {
+  global $application_name;
+  global $FONTS,$WEEKENDBG,$THFG,$THBG,$PHP_SELF;
+  global $TABLECELLFG,$TODAYCELLBG,$TEXTCOLOR;
+  global $POPUP_FG,$BGCOLOR;
+  global $LANGUAGE;
+  global $CUSTOM_HEADER, $CUSTOM_SCRIPT;
+  global $friendly;
+  global $bodyid, $self;
+  $lang = '';
+  if ( ! empty ( $LANGUAGE ) )
+    $lang = languageToAbbrev ( $LANGUAGE );
+  if ( empty ( $lang ) )
+    $lang = 'en';
+
+ // Start the header & specify the charset
+ // The charset is defined in the translation file
+ if ( ! empty ( $LANGUAGE ) ) {
+   $charset = translate ( "charset" );
+   if ( $charset != "charset" ) {
+     echo "<?xml version=\"1.0\" encoding=\"$charset\"?>\n" .
+       "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" " .
+       "\"DTD/xhtml1-transitional.dtd\">\n" .
+       "<html xmlns=\"http://www.w3.org/1999/xhtml\" " .
+       "xml:lang=\"$lang\" lang=\"$lang\">\n" .
+       "<head>\n" .
+       "<meta http-equiv=\"Content-Type\" content=\"text/html; " .
+       "charset=$charset\" />\n";
+     echo "<title>".translate($application_name)."</title>\n";
+   } else {
+     echo "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n" .
+       "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" " .
+       "\"DTD/xhtml1-transitional.dtd\">\n" .
+       "<html xmlns=\"http://www.w3.org/1999/xhtml\" " .
+       "xml:lang=\"en\" lang=\"en\">\n" .
+       "<head>\n" .
+       "<title>".translate($application_name)."</title>\n";
+   }
+ }
+
+ // Any other includes?
+ if ( is_array ( $includes ) ) {
+   foreach( $includes as $inc ){
+     include_once 'includes/'.$inc;
+   }
+ }
+
+  // Do we need anything else inside the header tag?
+  if ($HeadX) echo $HeadX."\n";
+
+  // Include the styles
+  if ( ! $disableStyle ) {
+    include_once 'includes/styles.php';
+  }
+
+  // Add custom script/stylesheet if enabled
+  if ( $CUSTOM_SCRIPT == 'Y' && ! $disableCustom ) {
+    $res = dbi_query (
+      "SELECT cal_template_text FROM webcal_report_template " .
+      "WHERE cal_template_type = 'S' and cal_report_id = 0" );
+    if ( $res ) {
+      if ( $row = dbi_fetch_row ( $res ) ) {
+        echo $row[0];
+      }
+      dbi_free_result ( $res );
+    }
+  }
+
+  // Include includes/print_styles.css as a media="print" stylesheet. When the
+  // user clicks on the "Printer Friendly" link, $friendly will be non-empty,
+  // including this as a normal stylesheet so they can see how it will look 
+  // when printed. This maintains backwards-compatibility for browsers that 
+  // don't support media="print" stylesheets
+  echo "<link rel=\"stylesheet\" type=\"text/css\"" . ( empty ( $friendly ) ? " media=\"print\"" : "" ) . " href=\"includes/print_styles.css\" />\n";
+
+  // Link to favicon
+  echo "<link rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image/x-icon\" />\n";
+
+  // Finish the header
+  echo "</head>\n<body";
+
+  // Find the filename of this page and give the <body> tag the corresponding id
+  $thisPage = substr($self, strrpos($self, '/') + 1);
+  if ( isset( $bodyid[$thisPage] ) )
+    echo " id=\"" . $bodyid[$thisPage] . "\"";
+
+  // Add any extra parts to the <body> tag
+  if ( ! empty( $BodyX ) )
+    echo " $BodyX";
+  echo ">\n";
+
+  // Add custom header if enabled
+  if ( $CUSTOM_HEADER == 'Y' && ! $disableCustom ) {
+    $res = dbi_query (
+      "SELECT cal_template_text FROM webcal_report_template " .
+      "WHERE cal_template_type = 'H' and cal_report_id = 0" );
+    if ( $res ) {
+      if ( $row = dbi_fetch_row ( $res ) ) {
+        echo $row[0];
+      }
+      dbi_free_result ( $res );
+    }
+  }
+}
+
+
+/**
+ * Prints the common trailer.
+ *
+ * @param bool $include_nav_links Should the standard navigation links be
+ *                               included in the trailer?
+ * @param bool $closeDb           Close the database connection when finished?
+ * @param bool $disableCustom     Disable the custom trailer the administrator
+ *                                has setup?  (This is useful for small popup
+ *                                windows and pages being used in an iframe.)
+ */
+function print_trailer ( $include_nav_links=true, $closeDb=true,
+  $disableCustom=false )
+{
+  global $CUSTOM_TRAILER, $c, $STARTVIEW;
+  global $login, $user, $cat_id, $categories_enabled, $thisyear,
+    $thismonth, $thisday, $DATE_FORMAT_MY, $WEEK_START, $DATE_FORMAT_MD,
+    $readonly, $is_admin, $public_access, $public_access_can_add,
+    $single_user, $use_http_auth, $login_return_path, $require_approvals,
+    $is_nonuser_admin, $public_access_others, $allow_view_other,
+    $views, $reports_enabled, $LAYER_STATUS, $nonuser_enabled,
+    $groups_enabled, $fullname, $has_boss;
+  
+  if ( $include_nav_links ) {
+    include_once "includes/trailer.php";
+  }
+
+  // Add custom trailer if enabled
+  if ( $CUSTOM_TRAILER == 'Y' && ! $disableCustom && isset ( $c ) ) {
+    $res = dbi_query (
+      "SELECT cal_template_text FROM webcal_report_template " .
+      "WHERE cal_template_type = 'T' and cal_report_id = 0" );
+    if ( $res ) {
+      if ( $row = dbi_fetch_row ( $res ) ) {
+        echo $row[0];
+      }
+      dbi_free_result ( $res );
+    }
+  }
+
+  if ( $closeDb ) {
+    if ( isset ( $c ) )
+      dbi_close ( $c );
+    unset ( $c );
+  }
+}
+?>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/js/admin.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/js/admin.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/js/admin.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,185 @@
+<script type="text/javascript">
+<!-- <![CDATA[
+// error check the colors
+function valid_color ( str ) {
+	var validColor = /^#[0-9a-fA-F]{3}$|^#[0-9a-fA-F]{6}$/;
+
+	return validColor.test ( str );
+}
+
+function valid_form ( form ) {
+  var err = "";
+
+  if ( form.admin_server_url.value == "" ) {
+    err += "<?php etranslate("Server URL is required")?>.\n";
+    form.admin_server_url.select ();
+    form.admin_server_url.focus ();
+  }
+  else if ( form.admin_server_url.value.charAt (
+    form.admin_server_url.value.length - 1 ) != '/' ) {
+    err += "<?php etranslate("Server URL must end with '/'")?>.\n";
+    form.admin_server_url.select ();
+    form.admin_server_url.focus ();
+  }
+
+  if ( parseInt ( form.admin_WORK_DAY_START_HOUR.value ) >=
+    parseInt ( form.admin_WORK_DAY_END_HOUR.value ) ) {
+    err += "<?php etranslate("Invalid work hours")?>.\n";
+    form.admin_WORK_DAY_START_HOUR.focus ();
+  }
+
+  if ( err != "" ) {
+    alert ( "Error:\n\n" + err );
+    return false;
+  }
+
+  if ( ! valid_color ( form.admin_BGCOLOR.value ) ) {
+    err += "<?php etranslate("Invalid color for document background")?>.\n";
+    form.admin_BGCOLOR.select ();
+    form.admin_BGCOLOR.focus ();
+  }
+  else if ( ! valid_color ( form.admin_H2COLOR.value ) ) {
+    err += "<?php etranslate("Invalid color for document title")?>.\n";
+    form.admin_H2COLOR.select ();
+    form.admin_H2COLOR.focus ();
+  } else if ( ! valid_color ( form.admin_CELLBG.value ) ) {
+    err += "<?php etranslate("Invalid color for table cell background")?>.\n";
+    form.admin_CELLBG.select ();
+    form.admin_CELLBG.focus ();
+  } else if ( ! valid_color ( form.admin_TABLEBG.value ) ) {
+    err += "<?php etranslate("Invalid color for table grid")?>.\n";
+    form.admin_TABLEBG.select ();
+    form.admin_TABLEBG.focus ();
+  } else if ( ! valid_color ( form.admin_THBG.value ) ) {
+    err += "<?php etranslate("Invalid color for table header background")?>.\n";
+    form.admin_THBG.select ();
+    form.admin_THBG.focus ();
+  } else if ( ! valid_color ( form.admin_THFG.value ) ) {
+    err += "<?php etranslate("Invalid color for table text background")?>.\n";
+    form.admin_THFG.select ();
+    form.admin_THFG.focus ();
+  } else if ( ! valid_color ( form.admin_POPUP_BG.value ) ) {
+    err += "<?php etranslate("Invalid color for event popup background")?>.\n";
+    form.admin_POPUP_BG.select ();
+    form.admin_POPUP_BG.focus ();
+  } else if ( ! valid_color ( form.admin_POPUP_FG.value ) ) {
+    err += "<?php etranslate("Invalid color for event popup text")?>.\n";
+    form.admin_POPUP_FG.select ();
+    form.admin_POPUP_FG.focus ();
+  } else if ( ! valid_color ( form.admin_TODAYCELLBG.value ) ) {
+    err += "<?php etranslate("Invalid color for table cell background for today")?>.\n";
+    form.admin_TODAYCELLBG.select ();
+    form.admin_TODAYCELLBG.focus ();
+  }
+
+  if ( err.length > 0 ) {
+    alert ( "Error:\n\n" + err + "\n\n<?php etranslate("Color format should be '#RRGGBB'")?>" );
+    return false;
+  }
+  return true;
+}
+function selectColor ( color ) {
+  url = "colors.php?color=" + color;
+  var colorWindow = window.open(url,"ColorSelection","width=390,height=350,resizable=yes,scrollbars=yes");
+}
+
+// Updates the background-color of a table cell
+// Parameters:
+//    input - <input> element containing the new color value
+// Note: this function relies on the following structure:
+//   <td><input onkeyup="updateColor(this);" /></td>
+//   <td>(this is the cell to be updated)</td>
+function updateColor ( input ) {
+	// The cell to be updated
+	var colorCell = input.parentNode.nextSibling;
+	// The new color
+	var color = input.value;
+
+	if (!valid_color ( color ) ) {
+	  // Color specified is invalid; use black instead
+		colorCell.style.backgroundColor = "#000000";
+	} else {
+		colorCell.style.backgroundColor = color;
+	}
+}
+
+// Gets called on page load and when user changes setting for
+// "Allow public access".
+function public_handler () {
+  var enabled = document.prefform.admin_public_access[0].checked;
+  //alert ( "public enabled =  " + enabled );
+  if ( enabled ) {
+    // Public Access enabled
+    makeVisible ( "pa1" );
+    makeVisible ( "pa2" );
+    makeVisible ( "pa3" );
+    makeVisible ( "pa4" );
+    makeVisible ( "pa5" );
+    makeVisible ( "pa6" );
+  } else {
+    // Public Access disabled
+    makeInvisible ( "pa1" );
+    makeInvisible ( "pa2" );
+    makeInvisible ( "pa3" );
+    makeInvisible ( "pa4" );
+    makeInvisible ( "pa5" );
+    makeInvisible ( "pa6" );
+  }
+}
+
+// Gets called on page load and when user changes setting for
+// "Allow external users".
+function eu_handler () {
+  var enabled = document.prefform.admin_allow_external_users[0].checked;
+  //alert ( "allow external =  " + enabled );
+  if ( enabled ) {
+    // External Users enabled
+    makeVisible ( "eu1" );
+    makeVisible ( "eu2" );
+//    makeVisible ( "eu3" );
+//    makeVisible ( "eu4" );
+  } else {
+    makeInvisible ( "eu1" );
+    makeInvisible ( "eu2" );
+//    makeInvisible ( "eu3" );
+//    makeInvisible ( "eu4" );
+  }
+}
+
+// Gets called on page load and when user changes setting for
+// "Email enabled".
+function email_handler () {
+  var enabled = document.prefform.admin_send_email[0].checked;
+  //alert ( "allow external =  " + enabled );
+  if ( enabled ) {
+    // Email enabled
+    makeVisible ( "em1" );
+    makeVisible ( "em2" );
+    makeVisible ( "em3" );
+    makeVisible ( "em4" );
+    makeVisible ( "em5" );
+    makeVisible ( "em6" );
+    makeVisible ( "em7" );
+  } else {
+    makeInvisible ( "em1" );
+    makeInvisible ( "em2" );
+    makeInvisible ( "em3" );
+    makeInvisible ( "em4" );
+    makeInvisible ( "em5" );
+    makeInvisible ( "em6" );
+    makeInvisible ( "em7" );
+  }
+}
+
+<?php //see the showTab function in includes/js.php for common code shared by all pages
+	//using the tabbed GUI.
+?>var tabs = new Array();
+tabs[1] = "settings";
+tabs[2] = "public";
+tabs[3] = "groups";
+tabs[5] = "nonuser";
+tabs[6] = "other";
+tabs[8] = "email";
+tabs[9] = "colors";
+//]]> -->
+</script>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/js/assistant_edit.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/js/assistant_edit.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/js/assistant_edit.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,26 @@
+<script type="text/javascript">
+<!-- <![CDATA[
+function selectUsers () {
+  // find id of user selection object
+  var listid = 0;
+  for ( i = 0; i < document.assistanteditform.elements.length; i++ ) {
+    if ( document.assistanteditform.elements[i].name == "users[]" )
+      listid = i;
+  }
+  url = "usersel.php?form=assistanteditform&listid=" + listid + "&users=";
+  // add currently selected users
+  for ( i = 0, j = 0; i < document.assistanteditform.elements[listid].length; i++ ) {
+    if ( document.assistanteditform.elements[listid].options[i].selected ) {
+      if ( j != 0 )
+        url += ",";
+      j++;
+      url += document.assistanteditform.elements[listid].options[i].value;
+    }
+  }
+  //alert ( "URL: " + url );
+  // open window
+  window.open ( url, "UserSelection",
+    "width=500,height=500,resizable=yes,scrollbars=yes" );
+}
+//]]> -->
+</script>
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/js/availability.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/js/availability.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/js/availability.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,79 @@
+<?php
+if ( empty ( $PHP_SELF ) && ! empty ( $_SERVER ) &&
+  ! empty ( $_SERVER['PHP_SELF'] ) ) {
+  $PHP_SELF = $_SERVER['PHP_SELF'];
+}
+if ( ! empty ( $PHP_SELF ) && preg_match ( "/\/includes\//", $PHP_SELF ) ) {
+    die ( "You can't access this file directly!" );
+}
+global $month, $day, $year;
+?>
+
+<script type="text/javascript">
+<!-- <![CDATA[
+// detect browser
+NS4 = (document.layers) ? 1 : 0;
+IE4 = (document.all) ? 1 : 0;
+// W3C stands for the W3C standard, implemented in Mozilla (and Netscape 6) and IE5
+W3C = (document.getElementById) ? 1 : 0;	
+//Function is similar to visible.php, but effects the parent
+function makeVisible ( name ) {
+  var ele;
+
+  if ( W3C ) {
+    ele = window.opener.document.getElementById(name);
+  } else if ( NS4 ) {
+    ele = window.opener.document.layers[name];
+  } else { // IE4
+    ele = window.opener.document.all[name];
+  }
+
+  if ( NS4 ) {
+    ele.visibility = "show";
+  } else {  // IE4 & W3C & Mozilla
+    ele.style.visibility = "visible";
+  }
+}
+
+function schedule_event(hours, minutes) {
+  var year =<?php echo $year ?> ;
+  var month =<?php echo $month ?> ;
+  var day =<?php echo $day ?> ;
+  if (confirm("<?php etranslate("Change the date and time of this entry?")?>")) {
+    var parentForm = window.opener.document.editentryform;
+    parentForm.timetype.selectedIndex = 1;
+    //Make time controls visible on parent
+    makeVisible ( "timeentrystart" );
+    if ( parentForm.duration_h ) {
+      makeVisible ( "timeentryduration" );
+    } else {
+      makeVisible ( "timeentryend" );
+    }
+    if ( hours >  12 ) {
+      parentForm.hour.value = hours - 12;
+      if ( parentForm.ampm ) {
+        parentForm.ampm[1].checked = true;
+      }
+    } else {
+      parentForm.hour.value = hours;
+      if ( hours ==  12 &&  parentForm.ampm )  {
+        parentForm.ampm[1].checked = true;
+      } else {
+        if ( parentForm.ampm ) {
+          parentForm.ampm[0].checked = true;
+        }
+      }
+    }
+    parentForm.minute.value = minutes;
+    parentForm.day.selectedIndex = day - 1;
+    parentForm.month.selectedIndex = month - 1;
+    for ( i = 0; i < parentForm.year.length; i++ ) {
+      if ( parentForm.year.options[i].value == year ) {
+        parentForm.year.selectedIndex = i;
+      }
+    }
+    window.close ();
+  }
+}
+//]]> -->
+</script>
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/js/colors.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/js/colors.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/js/colors.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,24 @@
+<?php
+global $color;
+if (preg_match("/\/includes\//", $PHP_SELF)) {
+    die ("You can't access this file directly!");
+}
+$color = clean_word($color);
+?>
+
+<script type="text/javascript">
+<!-- <![CDATA[
+function sendColor ( color ) {
+	var thisInput = window.opener.document.prefform.<?php echo $color; ?>;
+
+  thisInput.value = color;
+	if (thisInput.onkeyup) {
+		// This updates the color swatch for this color input.  It relies on the
+		// <input>s of the prefform having onkeyup="updateColor(this);" as an
+		// attribute
+		thisInput.onkeyup();
+	}
+  window.close ();
+}
+//]]> -->
+</script>
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/js/datesel.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/js/datesel.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/js/datesel.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,24 @@
+<?php
+global $form, $fmonth, $fday, $fyear;
+if (preg_match("/\/includes\//", $PHP_SELF)) {
+  die ("You can't access this file directly!");
+}
+?>
+
+<script type="text/javascript">
+<!-- <![CDATA[
+function sendDate ( date ) {
+  year = date.substring ( 0, 4 );
+  month = date.substring ( 4, 6 );
+  day = date.substring ( 6, 8 );
+  window.opener.document.<?php echo $form ?>.<?php echo $fday ?>.selectedIndex = day - 1;
+  window.opener.document.<?php echo $form ?>.<?php echo $fmonth ?>.selectedIndex = month - 1;
+  for ( i = 0; i < window.opener.document.<?php echo $form ?>.<?php echo $fyear ?>.length; i++ ) {
+    if ( window.opener.document.<?php echo $form ?>.<?php echo $fyear ?>.options[i].value == year ) {
+      window.opener.document.<?php echo $form ?>.<?php echo $fyear ?>.selectedIndex = i;
+    }
+  }
+  window.close ();
+}
+//]]> -->
+</script>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/js/edit_entry.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/js/edit_entry.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/js/edit_entry.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,258 @@
+<?php
+	global $groups_enabled,$WORK_DAY_START_HOUR,$WORK_DAY_END_HOUR;
+?><script type="text/javascript">
+<!-- <![CDATA[
+// do a little form verifying
+function validate_and_submit () {
+  if ( document.editentryform.name.value == "" ) {
+    document.editentryform.name.select ();
+<?php
+    if ( empty ( $GLOBALS['EVENT_EDIT_TABS'] ) ||
+      $GLOBALS['EVENT_EDIT_TABS'] == 'Y' ) { ?>
+    showTab ( "details" );
+<?php } ?>
+    document.editentryform.name.focus ();
+    alert ( "<?php etranslate("You have not entered a Brief Description")?>." );
+    return false;
+  }
+  // Leading zeros seem to confuse parseInt()
+  if ( document.editentryform.hour.value.charAt ( 0 ) == '0' )
+    document.editentryform.hour.value = document.editentryform.hour.value.substring ( 1, 2 );
+  if ( document.editentryform.timetype.selectedIndex == 1 ) {
+    h = parseInt ( document.editentryform.hour.value );
+    m = parseInt ( document.editentryform.minute.value );
+<?php if ($GLOBALS["TIME_FORMAT"] == "12") { ?>
+    if ( document.editentryform.ampm[1].checked ) {
+      // pm
+      if ( h < 12 )
+        h += 12;
+    } else {
+      // am
+      if ( h == 12 )
+        h = 0;
+    }
+<?php } ?>
+    if ( h >= 24 || m > 59 ) {
+<?php
+      if ( empty ( $GLOBALS['EVENT_EDIT_TABS'] ) ||
+        $GLOBALS['EVENT_EDIT_TABS'] == 'Y' ) { ?>
+        showTab ( "details" );
+<?php } ?>
+      alert ( "<?php etranslate ("You have not entered a valid time of day")?>." );
+      document.editentryform.hour.select ();
+      document.editentryform.hour.focus ();
+      return false;
+    }
+    // Ask for confirmation for time of day if it is before the user's
+<?php
+      if ( empty ( $GLOBALS['EVENT_EDIT_TABS'] ) ||
+        $GLOBALS['EVENT_EDIT_TABS'] == 'Y' ) { ?>
+        showTab ( "details" );
+<?php } ?>
+    // preference for work hours.
+    <?php if ($GLOBALS["TIME_FORMAT"] == "24") {
+      echo "if ( h < $WORK_DAY_START_HOUR  ) {";
+    }  else {
+      echo "if ( h < $WORK_DAY_START_HOUR && document.editentryform.ampm[0].checked ) {";
+    }
+    ?>
+    if ( ! confirm ( "<?php etranslate ("The time you have entered begins before your preferred work hours.  Is this correct?")?> "))
+      return false;
+  }
+  }
+  // is there really a change?
+  changed = false;
+  form=document.editentryform;
+  for ( i = 0; i < form.elements.length; i++ ) {
+    field = form.elements[i];
+    switch ( field.type ) {
+      case "radio":
+      case "checkbox":
+        if ( field.checked != field.defaultChecked )
+          changed = true;
+        break;
+      case "text":
+//      case "textarea":
+        if ( field.value != field.defaultValue )
+          changed = true;
+        break;
+      case "select-one":
+//      case "select-multiple":
+        for( j = 0; j < field.length; j++ ) {
+          if ( field.options[j].selected != field.options[j].defaultSelected )
+            changed = true;
+        }
+        break;
+    }
+  }
+  if ( changed ) {
+    form.entry_changed.value = "yes";
+  }
+//Add code to make HTMLArea code stick in TEXTAREA
+ if (typeof editor != "undefined") editor._textArea.value = editor.getHTML();
+  // would be nice to also check date to not allow Feb 31, etc...
+  document.editentryform.submit ();
+  return true;
+}
+
+function selectDate (  day, month, year, current, evt ) {
+  // get currently selected day/month/year
+  monthobj = eval ( 'document.editentryform.' + month );
+  curmonth = monthobj.options[monthobj.selectedIndex].value;
+  yearobj = eval ( 'document.editentryform.' + year );
+  curyear = yearobj.options[yearobj.selectedIndex].value;
+  date = curyear;
+
+		if (document.getElementById) {
+    mX = evt.clientX   + 40;
+    mY = evt.clientY  + 120;
+  }
+  else {
+    mX = evt.pageX + 40;
+    mY = evt.pageY +130;
+  }
+	var MyPosition = 'scrollbars=no,toolbar=no,left=' + mX + ',top=' + mY + ',screenx=' + mX + ',screeny=' + mY ;
+  if ( curmonth < 10 )
+    date += "0";
+  date += curmonth;
+  date += "01";
+  url = "datesel.php?form=editentryform&fday=" + day +
+    "&fmonth=" + month + "&fyear=" + year + "&date=" + date;
+  var colorWindow = window.open(url,"DateSelection","width=300,height=200,"  + MyPosition);
+}
+
+<?php if ( $groups_enabled == "Y" ) { 
+?>function selectUsers () {
+  // find id of user selection object
+  var listid = 0;
+  for ( i = 0; i < document.editentryform.elements.length; i++ ) {
+    if ( document.editentryform.elements[i].name == "participants[]" )
+      listid = i;
+  }
+  url = "usersel.php?form=editentryform&listid=" + listid + "&users=";
+  // add currently selected users
+  for ( i = 0, j = 0; i < document.editentryform.elements[listid].length; i++ ) {
+    if ( document.editentryform.elements[listid].options[i].selected ) {
+      if ( j != 0 )
+	       url += ",";
+      j++;
+      url += document.editentryform.elements[listid].options[i].value;
+    }
+  }
+  //alert ( "URL: " + url );
+  // open window
+  window.open ( url, "UserSelection",
+    "width=500,height=500,resizable=yes,scrollbars=yes" );
+}
+<?php } ?>
+
+<?php	// This function is called when the event type combo box 
+	// is changed. If the user selectes "untimed event" or "all day event",
+	// the times & duration fields are hidden.
+	// If they change their mind & switch it back, the original 
+	// values are restored for them
+?>function timetype_handler () {
+  var i = document.editentryform.timetype.selectedIndex;
+  var val = document.editentryform.timetype.options[i].text;
+  //alert ( "val " + i + " = " + val );
+  // i == 1 when set to timed event
+  if ( i != 1 ) {
+    // Untimed/All Day
+    makeInvisible ( "timeentrystart" );
+    if ( document.editentryform.duration_h ) {
+      makeInvisible ( "timeentryduration" );
+    } else {
+      makeInvisible ( "timeentryend" );
+    }
+  } else {
+    // Timed Event
+    makeVisible ( "timeentrystart" );
+    if ( document.editentryform.duration_h ) {
+      makeVisible ( "timeentryduration" );
+    } else {
+      makeVisible ( "timeentryend" );
+    }
+  }
+}
+
+function rpttype_handler () {
+  var i = document.editentryform.rpttype.selectedIndex;
+  var val = document.editentryform.rpttype.options[i].text;
+  //alert ( "val " + i + " = " + val );
+  //i == 0 when event does not repeat
+  if ( i != 0 ) {
+    // none (not repeating)
+    makeVisible ( "rptenddate" );
+    makeVisible ( "rptfreq" );
+    if ( i == 2 ) {
+      makeVisible ( "rptday" );
+    } else {
+      makeInvisible ( "rptday" );
+    }
+  } else {
+    // Timed Event
+    makeInvisible ( "rptenddate" );
+    makeInvisible ( "rptfreq" );
+    makeInvisible ( "rptday" );
+  }
+}
+
+<?php //see the showTab function in includes/js/visible.php for common code shared by all pages
+	//using the tabbed GUI.
+?>
+var tabs = new Array();
+tabs[0] = "details";
+tabs[1] = "participants";
+tabs[2] = "pete";
+
+var sch_win;
+
+function getUserList () {
+  var listid = 0;
+  for ( i = 0; i < document.editentryform.elements.length; i++ ) {
+    if ( document.editentryform.elements[i].name == "participants[]" )
+      listid = i;
+  }
+  return listid;
+}
+
+// Show Availability for the first selection
+function showSchedule () {
+  //var agent=navigator.userAgent.toLowerCase();
+  //var agent_isIE=(agent.indexOf("msie") > -1);
+  var myForm = document.editentryform;
+  var userlist = myForm.elements[getUserList()];
+  var delim = '';
+  var users = '';
+  var cols = <?php echo $WORK_DAY_END_HOUR - $WORK_DAY_START_HOUR ?>;
+  //var w = 140 + ( cols * 31 );
+  var w = 760;
+  var h = 180;
+  for ( i = 0; i < userlist.length; i++ ) {
+    if (userlist.options[i].selected) {
+      users += delim + userlist.options[i].value;
+      delim = ',';
+      h += 18;
+    }
+  }
+  if (users == '') {
+    alert("<?php etranslate("Please add a participant")?>" );
+    return false;
+  }
+  var features = 'width='+ w +',height='+ h +',resizable=yes,scrollbars=no';
+  var url = 'availability.php?users=' + users + 
+           '&year='  + myForm.year.value + 
+           '&month=' + myForm.month.value + 
+           '&day='   + myForm.day.options[myForm.day.selectedIndex].text;
+
+  if (sch_win != null && !sch_win.closed) {
+     h = h + 30;
+     sch_win.location.replace( url );
+     sch_win.resizeTo(w,h);
+  } else {
+     sch_win = window.open( url, "showSchedule", features );
+  }
+}
+
+//]]> -->
+</script>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/js/edit_layer.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/js/edit_layer.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/js/edit_layer.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,38 @@
+<script type="text/javascript">
+<!-- <![CDATA[
+function valid_color ( str ) {
+  var ch, j;
+  var valid = "0123456789abcdefABCDEF";
+
+  if ( str.length == 0 )
+    return true;
+
+  if ( str.charAt ( 0 ) != '#' || str.length != 7 )
+    return false;
+
+  for ( j = 1; j < str.length; j++ ) {
+   ch = str.charAt ( j );
+   if ( valid.indexOf ( ch ) < 0 )
+     return false;
+  }
+  return true;
+}
+
+function valid_form ( form ) {
+  var err = "";
+  if ( ! valid_color ( form.layercolor.value ) )
+    err += "<?php etranslate("Invalid color")?>.\n";
+
+  if ( err.length > 0 ) {
+    alert ( "Error:\n\n" + err + "\n\n<?php etranslate("Color format should be '#RRGGBB'")?>" );
+    return false;
+  }
+  return true;
+}
+
+function selectColor ( color ) {
+  url = "colors.php?color=" + color;
+  var colorWindow = window.open(url,"ColorSelection","width=390,height=350,resizable=yes,scrollbars=yes");
+}
+//]]> -->
+</script>
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/js/export.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/js/export.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/js/export.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,34 @@
+<script type="text/javascript">
+<!-- <![CDATA[
+function selectDate ( day, month, year, current, evt ) {
+  // get currently selected month/year
+  monthobj = eval ( 'document.exportform.' + month );
+  curmonth = monthobj.options[monthobj.selectedIndex].value;
+  yearobj = eval ( 'document.exportform.' + year );
+  curyear = yearobj.options[yearobj.selectedIndex].value;
+  date = curyear;
+  if (document.getElementById) {
+    mX = evt.clientX   + 40;
+    mY = evt.clientY  + 120;
+  }
+  else {
+    mX = evt.pageX + 40;
+    mY = evt.pageY +130;
+  }
+	var MyPosition = 'scrollbars=no,toolbar=no,left=' + mX + ',top=' + mY + ',screenx=' + mX + ',screeny=' + mY ;	
+		if ( curmonth < 10 )
+    date += "0";
+  date += curmonth;
+  date += "01";
+  url = "datesel.php?form=exportform&fday=" + day +
+    "&fmonth=" + month + "&fyear=" + year + "&date=" + date;
+  var colorWindow = window.open(url,"DateSelection","width=300,height=200," + MyPosition);
+}
+
+<?php //see the showTab function in includes/js/visible.php for common code shared by all pages
+	//using the tabbed GUI.
+?>var tabs = new Array();
+tabs[0] = "import";
+tabs[1] = "export";
+//]]> -->
+</script>
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/js/popups.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/js/popups.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/js/popups.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,105 @@
+<script type="text/javascript">
+<!-- <![CDATA[
+// The following code is used to support the small popups that
+// give the full description of an event when the user move the
+// mouse over it.
+// Thanks to Klaus Knopper (www.knoppix.com) for this script.
+// It has been modified to work with the existing WebCalendar
+// architecture on 02/25/2005
+//
+// 03/05/2005 Prevent popup from going off screen by setting
+// maximum width, which is cnfigurable
+//
+// Bubblehelp infoboxes, (C) 2002 Klaus Knopper <infobox at knopper.net>
+// You can copy/modify and distribute this code under the conditions
+// of the GNU GENERAL PUBLIC LICENSE Version 2.
+//
+var ns4            // Are we using Netscape4?
+var ie4            // Are we using Internet Explorer Version 4?
+var ie5            // Are we using Internet Explorer Version 5 and up?
+var kon            // Are we using KDE Konqueror?
+var x,y,winW,winH  // Current help position and main window size
+var idiv=null      // Pointer to infodiv container
+var px="px"        // position suffix with "px" in some cases
+var popupW         // width of popup
+var popupH         // height of popup
+var xoffset = 8    // popup distance from cursor x coordinate
+var yoffset = 12   // popup distance from cursor y coordinate
+var followMe = 1   // allow popup to follow cursor...turn off for better performance
+var maxwidth = 300 // maximum width of popup window
+
+function nsfix(){setTimeout("window.onresize = rebrowse", 2000);}
+
+function rebrowse(){window.location.reload();}
+
+function infoinit(){
+  ns4=(document.layers)?true:false, ie4=(document.all)?true:false;
+  ie5=((ie4)&&((navigator.userAgent.indexOf('MSIE 5')>0)||(navigator.userAgent.indexOf('MSIE 6')>0)))?true:false;
+  kon=(navigator.userAgent.indexOf('konqueror')>0)?true:false;
+  x=0;y=0;winW=800;winH=600;
+  idiv=null;
+  if (followMe) {
+    document.onmousemove = mousemove;
+    if(ns4&&document.captureEvents) document.captureEvents(Event.MOUSEMOVE);
+  }
+  // Workaround for just another netscape bug: Fix browser confusion on resize
+  // obviously conqueror has a similar problem :-(
+  if(ns4||kon){ nsfix() }
+  if(ns4) { px=""; }
+}
+
+function hide(name){
+  idiv.visibility=ns4?"hide":"hidden";
+  idiv=null;
+}
+
+function gettip(name){return (document.layers&&document.layers[name])?document.layers[name]:(document.all&&document.all[name]&&document.all[name].style)?document.all[name].style:document[name]?document[name]:(document.getElementById(name)?document.getElementById(name).style:0);}
+
+function show(evt, name){
+  if(idiv) hide(name);
+  idiv=gettip(name);
+  if(idiv){
+   scrollX =0; scrollY=0;
+   winW=(window.innerWidth)? window.innerWidth+window.pageXOffset-16:document.body.offsetWidth-20;
+   winH=(window.innerHeight)?window.innerHeight+window.pageYOffset  :document.body.offsetHeight;
+   scrollX=(typeof window.pageXOffset == "number")? window.pageXOffset:(document.documentElement && document.documentElement.scrollLeft)?document.documentElement.scrollLeft:(document.body && document.body.scrollLeft)?document.body.scrollLeft:window.scrollX;
+   scrollY=(typeof window.pageYOffset == "number")? window.pageYOffset:(document.documentElement && document.documentElement.scrollTop)?document.documentElement.scrollTop:(document.body && document.body.scrollTop)?document.body.scrollTop:window.scrollY;
+   popupW = document.getElementById(name).offsetWidth;
+   popupH = document.getElementById(name).offsetHeight;   
+
+   showtip(evt);
+  }
+}
+
+function showtip(e){
+  e = e? e: window.event;
+  if(idiv) {
+    if(e)   {
+      x=e.pageX?e.pageX:e.clientX?e.clientX + scrollX:0; 
+      y=e.pageY?e.pageY:e.clientY?e.clientY + scrollY:0;
+    }
+    else {
+      x=0; y=0;
+    }
+    // MAke sure we don't go off screen
+    if ( popupW > maxwidth ) { 
+      popupW = maxwidth;
+      idiv.width = maxwidth + px;
+    }  
+    idiv.left=(((x + popupW + xoffset)>winW)?x - popupW - xoffset:x + xoffset)+px;
+    if ((popupH + yoffset)>winH) {
+      idiv.top= yoffset + px;
+    } else {
+      idiv.top=(((y + popupH + yoffset)>winH)?winH - popupH - yoffset:y + yoffset)+px;
+    }
+    idiv.visibility=ns4?"show":"visible";
+    }
+}
+
+function mousemove(e){
+  showtip(e);
+}
+// Initialize after loading the page
+window.onload=infoinit;
+//]]> -->
+</script>
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/js/pref.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/js/pref.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/js/pref.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,72 @@
+<?php
+  global $allow_color_customization;
+?>
+<script type="text/javascript">
+<!-- <![CDATA[
+// error check the colors
+function valid_color ( str ) {
+	var validColor = /^#[0-9a-fA-F]{3}$|^#[0-9a-fA-F]{6}$/;
+
+	return validColor.test ( str );
+}
+
+function valid_form ( form ) {
+  var err = "";
+  var colorErr = false;
+  <?php if ( $allow_color_customization ) { ?>
+  if ( ! valid_color ( form.pref_BGCOLOR.value ) )
+    err += "<?php etranslate("Invalid color for document background")?>.\n";
+  if ( ! valid_color ( form.pref_H2COLOR.value ) )
+    err += "<?php etranslate("Invalid color for document title")?>.\n";
+  if ( ! valid_color ( form.pref_CELLBG.value ) )
+    err += "<?php etranslate("Invalid color for table cell background")?>.\n";
+  if ( ! valid_color ( form.pref_TODAYCELLBG.value ) )
+    err += "<?php etranslate("Invalid color for table cell background for today")?>.\n";
+  <?php } ?>
+  if ( err.length > 0 )
+    colorErr = true;
+  if ( ! validWorkHours ( form ) ) {
+    err += "<?php etranslate("Invalid work hours"); ?>.\n";
+    err += form.pref_WORK_DAY_START_HOUR.value + " > " + form.pref_WORK_DAY_END_HOUR.value + "\n";
+  }
+  if ( colorErr ) {
+    alert ( "Error:\n\n" + err + "\n\n<?php etranslate("Color format should be '#RRGGBB'")?>" );
+    return false;
+  } else if ( err.length > 0 ) {
+    alert ( "Error:\n\n" + err );
+    return false;
+  }
+  return true;
+}
+
+function validWorkHours ( form ) {
+  return ( parseInt ( form.pref_WORK_DAY_START_HOUR.value ) <
+    parseInt ( form.pref_WORK_DAY_END_HOUR.value ) );
+}
+
+function selectColor ( color ) {
+  url = "colors.php?color=" + color;
+  var colorWindow = window.open(url,"ColorSelection","width=390,height=350,resizable=yes,scrollbars=yes");
+}
+
+// Updates the background-color of a table cell
+// Parameters:
+//    input - <input> element containing the new color value
+// Note: this function relies on the following structure:
+//   <td><input onkeyup="updateColor(this);" /></td>
+//   <td>(this is the cell to be updated)</td>
+function updateColor ( input ) {
+	// The cell to be updated
+	var colorCell = input.parentNode.nextSibling;
+	// The new color
+	var color = input.value;
+
+	if (!valid_color ( color ) ) {
+	  // Color specified is invalid; use black instead
+		colorCell.style.backgroundColor = "#000000";
+	} else {
+		colorCell.style.backgroundColor = color;
+	}
+}
+//]]> -->
+</script>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/js/purge.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/js/purge.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/js/purge.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,39 @@
+<script type="text/javascript">
+<!-- <![CDATA[
+function selectDate (  day, month, year, current, evt ) {
+  // get currently selected day/month/year
+  monthobj = eval ( 'document.purgeform.' + month );
+  curmonth = monthobj.options[monthobj.selectedIndex].value;
+  yearobj = eval ( 'document.purgeform.' + year );
+  curyear = yearobj.options[yearobj.selectedIndex].value;
+  date = curyear;
+
+		if (document.getElementById) {
+    mX = evt.clientX   + 40;
+    mY = evt.clientY  + 120;
+  }
+  else {
+    mX = evt.pageX + 40;
+    mY = evt.pageY +130;
+  }
+	var MyPosition = 'scrollbars=no,toolbar=no,left=' + mX + ',top=' + mY + ',screenx=' + mX + ',screeny=' + mY ;
+  if ( curmonth < 10 )
+    date += "0";
+  date += curmonth;
+  date += "01";
+  url = "datesel.php?form=purgeform&fday=" + day +
+    "&fmonth=" + month + "&fyear=" + year + "&date=" + date;
+  var colorWindow = window.open(url,"DateSelection","width=300,height=200,"  + MyPosition);
+}
+
+function all_handler () {
+  var enabled = document.purgeform.purge_all.checked;
+  if ( enabled ) {
+    makeInvisible ( "dateArea" );
+  } else {
+    makeVisible ( "dateArea" );
+  }
+}
+
+//]]> -->
+</script>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/js/search.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/js/search.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/js/search.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,38 @@
+<script type="text/javascript">
+<!-- <![CDATA[
+function selectUsers () {
+  // find id of user selection object
+  var listid = 0;
+  for ( i = 0; i < document.searchformentry.elements.length; i++ ) {
+    if ( document.searchformentry.elements[i].name == "users[]" )
+      listid = i;
+  }
+  url = "usersel.php?form=searchformentry&listid=" + listid + "&users=";
+  // add currently selected users
+  for ( i = 0, j = 0; i < document.searchformentry.elements[listid].length; i++ ) {
+    if ( document.searchformentry.elements[listid].options[i].selected ) {
+      if ( j != 0 )
+	url += ",";
+      j++;
+      url += document.searchformentry.elements[listid].options[i].value;
+    }
+  }
+  //alert ( "URL: " + url );
+  // open window
+  window.open ( url, "UserSelection",
+    "width=500,height=500,resizable=yes,scrollbars=yes" );
+}
+
+function show(foo,f,section) {
+	document.getElementById(foo).style.display = "block";
+	if (f) { setCookie(foo, "o", section); }
+}
+
+function hide(foo,f, section) {
+	if (document.getElementById(foo)) {
+		document.getElementById(foo).style.display = "none";
+		if (f) { deleteCookie(foo, section); }
+	}
+}
+//]]> -->
+</script>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/js/users.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/js/users.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/js/users.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,22 @@
+<script type="text/javascript">
+<!-- <![CDATA[
+function show(foo,f,section) {
+	document.getElementById(foo).style.display = "block";
+	if (f) { setCookie(foo, "o", section); }
+}
+
+function hide(foo,f,section) {
+	if (document.getElementById(foo)) {
+		document.getElementById(foo).style.display = "none";
+		if (f) { deleteCookie(foo, section); }
+	}
+}
+
+<?php //see the showTab function in includes/js.php for common code shared by all pages
+	//using the tabbed GUI.
+?>var tabs = new Array();
+tabs[1] = "users";
+tabs[2] = "groups";
+tabs[3] = "nonusers";
+//]]> -->
+</script>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/js/usersel.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/js/usersel.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/js/usersel.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,92 @@
+<?php
+	global $form,$listid,$groups;
+	if (preg_match("/\/includes\//", $PHP_SELF)) {
+		die ("You can't access this file directly!");
+	}
+	$form = clean_word($form);
+	$listid = clean_int($listid);
+?>
+<script type="text/javascript">
+<!-- <![CDATA[
+function OkButton () {
+  var parentlist = window.opener.document.<?php echo $form?>.elements[<?php echo $listid?>];
+  var thislist = document.userselform.elements[0];
+
+  var found = "";
+
+  // select/deselect all elements
+  for ( i = 0; i < parentlist.length; i++ ) {
+    var state = false;
+    for ( j = 0; j < thislist.length; j++ ) {
+      if ( thislist.options[j].value == parentlist.options[i].value ) {
+        state = thislist.options[j].selected;
+        found += " " + thislist.options[j].value;
+      }
+    }
+    parentlist.options[i].selected = state;
+  }
+  //alert ( "Found: " + found );
+  window.close ();
+}
+
+function selectAll() {
+  var list = document.userselform.elements[0];
+  var i;
+  for ( i = 0; i < list.options.length; i++ ) {
+    list.options[i].selected = true;
+  }
+}
+
+function selectNone() {
+  var list = document.userselform.elements[0];
+  var i;
+  for ( i = 0; i < list.options.length; i++ ) {
+    list.options[i].selected = false;
+  }
+}
+
+// set the state (selected or unselected) if a single
+// user in the list of users
+function selectByLogin ( login, state ) {
+  //alert ( "selectByLogin ( " + login + ", " + state + " )" );
+  var list = document.userselform.elements[0];
+  var i;
+  for ( i = 0; i < list.options.length; i++ ) {
+    //alert ( "text: " + list.options[i].text );
+    if ( list.options[i].value == login ) {
+      list.options[i].selected = state;
+      return;
+    }
+  }
+}
+
+function toggleGroup ( state ) {
+  var list = document.userselform.elements[4];
+  var selNum = list.selectedIndex;
+  <?php
+  for ( $i = 0; $i < count ( $groups ); $i++ ) {
+    print "\n  if ( selNum == $i ) {\n";
+    $res = dbi_query ( "SELECT cal_login from webcal_group_user " .
+      "WHERE cal_group_id = " . $groups[$i]["cal_group_id"] );
+    if ( $res ) {
+      while ( $row = dbi_fetch_row ( $res ) ) {
+        print "    selectByLogin ( \"$row[0]\", state );\n";
+      }
+      dbi_free_result ( $res );
+      print "  }\n";
+    }
+  }
+  ?>
+}
+
+// Select users from a group
+function selectGroupMembers () {
+  toggleGroup ( true );
+}
+
+// De-select users from a group
+function deselectGroupMembers () {
+  toggleGroup ( false );
+}
+//]]> -->
+</script>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/js/view_d.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/js/view_d.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/js/view_d.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,10 @@
+<script type="text/javascript">
+<!-- <![CDATA[
+function schedule_event (h,m) {
+  document.schedule.hour.value = h;
+  document.schedule.minute.value = m;
+  document.schedule.submit ();
+  return true;
+}
+//]]> -->
+</script>
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/js/views_edit.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/js/views_edit.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/js/views_edit.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,36 @@
+<script type="text/javascript">
+<!-- <![CDATA[
+function selectUsers () {
+  var listid = 0;
+  for ( i = 0; i < document.editviewform.elements.length; i++ ) {
+    if ( document.editviewform.elements[i].name == "users[]" )
+      listid = i;
+  }
+  url = "usersel.php?form=editviewform&listid=" + listid + "&users=";
+  // add currently selected users
+  for ( i = 0, j = 0; i < document.editviewform.elements[listid].length; i++ ) {
+    if ( document.editviewform.elements[listid].options[i].selected ) {
+      if ( j != 0 )
+	url += ",";
+      j++;
+      url += document.editviewform.elements[listid].options[i].value;
+    }
+  }
+  //alert ( "URL: " + url );
+  // open window
+  window.open ( url, "UserSelection",
+    "width=500,height=500,resizable=yes,scrollbars=yes" );
+}
+
+function usermode_handler ()
+{
+  var show = ( document.editviewform.viewuserall[0].checked );
+  if ( show ) {
+    makeVisible ( "viewuserlist" );
+  } else {
+    makeInvisible ( "viewuserlist" );
+  }
+}
+
+//]]> -->
+</script>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/js/visible.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/js/visible.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/js/visible.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,61 @@
+<?php
+/*
+ * $Id
+ *
+ * The functions in this file can be used to make elements visible or
+ * hidden on the page.
+ */
+?>
+<script type="text/javascript">
+<!-- <![CDATA[
+// detect browser
+NS4 = (document.layers) ? 1 : 0;
+IE4 = (document.all) ? 1 : 0;
+// W3C stands for the W3C standard, implemented in Mozilla (and Netscape 6) and IE5
+W3C = (document.getElementById) ? 1 : 0;	
+
+function makeVisible ( name ) {
+  var ele;
+
+  if ( W3C ) {
+    ele = document.getElementById(name);
+  } else if ( NS4 ) {
+    ele = document.layers[name];
+  } else { // IE4
+    ele = document.all[name];
+  }
+
+  if ( NS4 ) {
+    ele.visibility = "show";
+  } else {  // IE4 & W3C & Mozilla
+    ele.style.visibility = "visible";
+  }
+}
+
+function makeInvisible ( name ) {
+  if (W3C) {
+    document.getElementById(name).style.visibility = "hidden";
+  } else if (NS4) {
+    document.layers[name].visibility = "hide";
+  } else {
+    document.all[name].style.visibility = "hidden";
+  }
+}
+
+function showTab (name) {
+	if (! document.getElementById) { return true; }
+	for (var i=0; i<tabs.length; i++) {
+		var tname = tabs[i];
+		var tab = document.getElementById("tab_" + tname);
+		if (tab) {
+			tab.className = (tname == name) ? "tabfor" : "tabbak";
+		}
+		var div = document.getElementById("tabscontent_" + tname);
+		if (div) {
+			div.style.display = (tname == name) ? "block" : "none";
+		}
+	}
+	return false;
+}
+//]]> -->
+</script>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/js.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/js.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/js.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,134 @@
+<?php
+if ( empty ( $PHP_SELF ) && ! empty ( $_SERVER ) &&
+  ! empty ( $_SERVER['PHP_SELF'] ) ) {
+  $PHP_SELF = $_SERVER['PHP_SELF'];
+}
+if ( ! empty ( $PHP_SELF ) && preg_match ( "/\/includes\//", $PHP_SELF ) ) {
+    die ( "You can't access this file directly!" );
+}
+?>
+<script type="text/javascript">
+<!--
+<?php
+// The following code is used to support the small popups that
+// give the full description of an event when the user move the
+// mouse over it.
+
+// Developer's note:
+// I (Benoit Maisonny <benoit at synclude.com>) tested this code with Mozilla 0.8.1 (on Linux),
+// with IE5.5 SP1 (on WinNT4) and with Netscape Communicator 4.74 (on Linux).
+// Netscape 6.0 and 6.01 seem to have a bug related to the visibility attribute.
+// I suppose it will be corrected as soon as they release a new version, based on
+// a more recent Mozilla source code.
+// I'm not able to test this javascript code with IE4. It'd be glad to know if it works.
+?>
+
+NS4 = (document.layers) ? 1 : 0;
+IE4 = (document.all) ? 1 : 0;
+W3C = (document.getElementById) ? 1 : 0;	
+<?php // W3C stands for the W3C standard, implemented in Mozilla (and Netscape 6) and IE5
+
+// Function show(evt, name)
+//	evt is a pointer to the Event object passed when the event occurs
+//	name is the ID attribute of the element to show
+?>
+function show ( evt, name ) {
+  if (IE4) {
+    evt = window.event;  //is it necessary?
+  }
+
+  var currentX,		//mouse position on X axis
+      currentY,		//mouse position on X axis
+      x,		//layer target position on X axis
+      y,		//layer target position on Y axis
+      docWidth,		//width of current frame
+      docHeight,	//height of current frame
+      layerWidth,	//width of popup layer
+      layerHeight,	//height of popup layer
+      ele;		//points to the popup element
+
+  // First let's initialize our variables
+  if ( W3C ) {
+    ele = document.getElementById(name);
+    currentX = evt.clientX,
+    currentY = evt.clientY;
+    docWidth = document.width;
+    docHeight = document.height;
+    layerWidth = ele.style.width;
+    layerHeight = ele.style.height;
+  } else if ( NS4 ) {
+    ele = document.layers[name];
+    currentX = evt.pageX,
+    currentY = evt.pageY;
+    docWidth = document.width;
+    docHeight = document.height;
+    layerWidth = ele.clip.width;
+    layerHeight = ele.clip.height;
+  } else {	// meant for IE4
+    ele = document.all[name];
+    currentX = evt.clientX,
+    currentY = evt.clientY;
+    docHeight = document.body.offsetHeight;
+    docWidth = document.body.offsetWidth;
+    //var layerWidth = document.all[name].offsetWidth;
+    // for some reason, this doesn't seem to work... so set it to 200
+    layerWidth = 200;
+    layerHeight = ele.offsetHeight;
+  }
+
+  // Then we calculate the popup element's new position
+  if ( ( currentX + layerWidth ) > docWidth ) {
+    x = ( currentX - layerWidth );
+  } else {
+    x = currentX;
+  }
+  if ( ( currentY + layerHeight ) >= docHeight ) {
+     y = ( currentY - layerHeight - 20 );
+  } else {
+    y = currentY + 20;
+  }
+  if ( IE4 ) {
+    x += document.body.scrollLeft;
+    y += document.body.scrollTop;
+  } else if (NS4) {
+  } else {
+    x += window.pageXOffset;
+    y += window.pageYOffset;
+  }
+// (for debugging purpose) alert("docWidth " + docWidth + ", docHeight " + docHeight + "\nlayerWidth " + layerWidth + ", layerHeight " + layerHeight + "\ncurrentX " + currentX + ", currentY " + currentY + "\nx " + x + ", y " + y);
+
+  // Finally, we set its position and visibility
+  if ( NS4 ) {
+    //ele.xpos = parseInt ( x );
+    ele.left = parseInt ( x );
+    //ele.ypos = parseInt ( y );
+    ele.top = parseInt ( y );
+    ele.visibility = "show";
+  } else {  // IE4 & W3C
+    ele.style.left = parseInt ( x );
+    ele.style.top = parseInt ( y );
+    ele.style.visibility = "visible";
+  }
+}
+
+function hide ( name ) {
+  if (W3C) {
+    document.getElementById(name).style.visibility = "hidden";
+  } else if (NS4) {
+    document.layers[name].visibility = "hide";
+  } else {
+    document.all[name].style.visibility = "hidden";
+  }
+}
+
+function unhide ( name ) {
+  if (W3C) {
+    document.getElementById(name).style.visibility = "visible";
+  } else if (NS4) {
+    document.layers[name].visibility = "show";
+  } else {
+    document.all[name].style.visibility = "visible";
+  }
+}
+//-->
+</script>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/php-dbi.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/php-dbi.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/php-dbi.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,509 @@
+<?php
+/**
+ * Generic database access.
+ *
+ * The functions defined in this file are meant to provide a single API to the
+ * different PHP database APIs.  Unfortunately, this is necessary since PHP
+ * does not yet have a common db API.  The value of
+ * <var>$GLOBALS["db_type"]</var> should be defined somewhere to one of the
+ * following:
+ * - mysql
+ * - mssql
+ * - oracle  (This uses the Oracle8 OCI API, so Oracle 8 libs are required)
+ * - postgresl
+ * - odbc
+ * - ibase (Interbase)
+ *
+ * <b>Limitations:</b>
+ *
+ * - This assumes a single connection to a single database for the sake of
+ *   simplicity.  Do not make a new connection until you are completely
+ *   finished with the previous one.  However, you can execute more than query
+ *   at the same time.
+ * - Rather than use the associative arrays returned with xxx_fetch_array(),
+ *   normal arrays are used with xxx_fetch_row().  (Some db APIs don't support
+ *   xxx_fetch_array().)
+ *
+ * @author Craig Knudsen <cknudsen at cknudsen.com>
+ * @copyright Craig Knudsen, <cknudsen at cknudsen.com>, http://www.k5n.us/cknudsen
+ * @license http://www.gnu.org/licenses/gpl.html GNU GPL
+ * @package WebCalendar
+ *
+ * History:
+ * 09-Dec-2005  Craig Knudsen
+ *    Added DB2 support (patch from Helmut Tessarek)
+ * 17-Mar-2005  Ray Jones
+ *     Changed mssql_error to mssql_get_last_message
+ * 23-Jan-2005  Craig Knudsen <cknudsen at cknudsen.com>
+ *     Added documentation to be used with php2html.pl
+ * 19-Jan-2005  Craig Knudsen <cknudsen at cknudsen.com>
+ *     Add option for verbose error messages.
+ * 19-Jan-2004  Craig Knudsen <cknudsen at cknudsen.com>
+ *     Added mssql support
+ *     Code from raspail at users.sourceforge.net
+ * 02-Jul-2004  Craig Knudsen <cknudsen at cknudsen.com>
+ *     Added mysqli support
+ *     Code from Francesco Riosa
+ * 31-May-2002  Craig Knudsen <cknudsen at radix.net>
+ *     Added support for Interbase contributed by
+ *     Marco Forlin
+ * 11-Jul-2001  Craig Knudsen <cknudsen at radix.net>
+ *     Removed pass by reference for odbc_fetch_into()
+ *     Removed ++ in call to pg_fetch_array()
+ * 22-Apr-2000  Ken Harris <kharris at lhinfo.com>
+ *     PostgreSQL fixes
+ * 23-Feb-2000  Craig Knudsen <cknudsen at radix.net>
+ *     Initial release
+ */
+
+if ( empty ( $PHP_SELF ) && ! empty ( $_SERVER ) &&
+  ! empty ( $_SERVER['PHP_SELF'] ) ) {
+  $PHP_SELF = $_SERVER['PHP_SELF'];
+}
+if ( ! empty ( $PHP_SELF ) && preg_match ( "/\/includes\//", $PHP_SELF ) ) {
+    die ( "You can't access this file directly!" );
+}
+
+
+// Enable the following to show the actual database error in the browser.
+// It is more secure to not show this info, so this should only be turned
+// on for debugging purposes.
+$phpdbiVerbose = false;
+
+/**
+ * Opens up a database connection.
+ *
+ * Use a pooled connection if the db supports it and
+ * the <var>db_persistent</var> setting is enabled.
+ *
+ * <b>Notes:</b>
+ * - The database type is determined by the global variable
+ *   <var>db_type</var>
+ * - For ODBC, <var>$host</var> is ignored, <var>$database</var> = DSN
+ * - For Oracle, <var>$database</var> = tnsnames name
+ * - Use the {@link dbi_error()} function to get error information if the connection
+ *   fails
+ *
+ * @param string $host     Hostname of database server
+ * @param string $login    Database login
+ * @param string $password Database login password
+ * @param string $database Name of database
+ * 
+ * @return resource The connection
+ */
+function dbi_connect ( $host, $login, $password, $database ) {
+  if ( strcmp ( $GLOBALS["db_type"], "mysql" ) == 0 ) {
+    if ($GLOBALS["db_persistent"]) {
+      $c = mysql_pconnect ( $host, $login, $password );
+    } else {
+      $c = mysql_connect ( $host, $login, $password );
+    }
+    if ( $c ) {
+      if ( ! mysql_select_db ( $database ) )
+        return false;
+      return $c;
+    } else {
+      return false;
+    }
+  } else if ( strcmp ( $GLOBALS["db_type"], "mysqli" ) == 0 ) {
+    if ($GLOBALS["db_persistent"]) {
+      $c = @mysqli_connect ( $host, $login, $password, $database);
+    } else {
+      $c = @mysqli_connect ( $host, $login, $password, $database);
+    }
+    if ( $c ) {
+      /*
+      if ( ! mysqli_select_db ( $c, $database ) )
+        return false;
+      */
+      $GLOBALS["db_connection"] = $c;
+      return $c;
+    } else {
+      return false;
+    }
+  } else if ( strcmp ( $GLOBALS["db_type"], "mssql" ) == 0 ) {
+    if ($GLOBALS["db_persistent"]) {
+      $c = mssql_pconnect ( $host, $login, $password );
+    } else {
+      $c = mssql_connect ( $host, $login, $password );
+    }
+    if ( $c ) {
+      if ( ! mssql_select_db ( $database ) )
+        return false;
+      return $c;
+    } else {
+      return false;
+    }
+  } else if ( strcmp ( $GLOBALS["db_type"], "oracle" ) == 0 ) {
+    if ( strlen ( $host ) && strcmp ( $host, "localhost" ) )
+      $c = OCIPLogon ( "$login@$host", $password, $database );
+    else
+      $c = OCIPLogon ( $login, $password, $database );
+    $GLOBALS["oracle_connection"] = $c;
+    return $c;
+  } else if ( strcmp ( $GLOBALS["db_type"], "postgresql" ) == 0 ) {
+    if ( strlen ( $password ) ) {
+      if ( strlen ( $host ) ) {
+        $dbargs = "host=$host dbname=$database user=$login password=$password";
+      } else {
+        $dbargs = "dbname=$database user=$login password=$password";
+      }
+    } else {
+      if ( strlen ( $host ) ) {
+        $dbargs = "host=$host dbname=$database user=$login";
+      } else {
+        $dbargs = "dbname=$database user=$login";
+      }
+    }
+    if ($GLOBALS["db_persistent"]) {
+      $c = pg_pconnect ( $dbargs );
+    } else {
+      $c = pg_connect ( $dbargs );
+    }
+    $GLOBALS["postgresql_connection"] = $c;
+    if ( ! $c ) {
+        echo "Error connecting to database\n";
+        exit;
+    }
+    return $c;
+  } else if ( strcmp ( $GLOBALS["db_type"], "odbc" ) == 0 ) {
+    if ($GLOBALS["db_persistent"]) {
+      $c = odbc_pconnect ( $database, $login, $password );
+    } else {
+      $c = odbc_connect ( $database, $login, $password );
+    }
+    $GLOBALS["odbc_connection"] = $c;
+    return $c;
+  } else if ( strcmp ( $GLOBALS["db_type"], "ibm_db2" ) == 0 ) {
+    if ($GLOBALS["db_persistent"]) {
+      $c = db2_pconnect ( $database, $login, $password );
+    } else {
+      $c = db2_connect ( $database, $login, $password );
+    }
+    $GLOBALS["ibm_db2_connection"] = $c;
+    return $c;
+  } else if ( strcmp ( $GLOBALS["db_type"], "ibase" ) == 0 ) {
+    $host = $host . ":" . $database;
+    if ($GLOBALS["db_persistent"]) {
+      $c = ibase_pconnect ( $host, $login, $password );
+    } else {
+      $c = ibase_connect ( $host, $login, $password );
+    }
+    return $c;
+  } else {
+    if ( empty ( $GLOBALS["db_type"] ) )
+      dbi_fatal_error ( "dbi_connect(): db_type not defined." );
+    else
+      dbi_fatal_error ( "dbi_connect(): invalid db_type '" .
+        $GLOBALS["db_type"] . "'" );
+  }
+}
+
+/**
+ * Closes a database connection.
+ *
+ * This is not necessary for any database that uses pooled connections such as
+ * MySQL, but a good programming practice.
+ *
+ * @param resource $conn The database connection
+ *
+ * @return bool True on success, false on error
+ */
+function dbi_close ( $conn ) {
+  if ( strcmp ( $GLOBALS["db_type"], "mysql" ) == 0 ) {
+    return mysql_close ( $conn );
+  } else if ( strcmp ( $GLOBALS["db_type"], "mysqli" ) == 0 ) {
+    return mysqli_close ( $conn );
+  } else if ( strcmp ( $GLOBALS["db_type"], "mssql" ) == 0 ) {
+    return mssql_close ( $conn );
+  } else if ( strcmp ( $GLOBALS["db_type"], "oracle" ) == 0 ) {
+    return OCILogOff ( $conn );
+  } else if ( strcmp ( $GLOBALS["db_type"], "postgresql" ) == 0 ) {
+    return pg_close ( $GLOBALS["postgresql_connection"] );
+  } else if ( strcmp ( $GLOBALS["db_type"], "odbc" ) == 0 ) {
+    return odbc_close ( $GLOBALS["odbc_connection"] );
+  } else if ( strcmp ( $GLOBALS["db_type"], "ibm_db2" ) == 0 ) {
+    return db2_close ( $GLOBALS["ibm_db2_connection"] );
+  } else if ( strcmp ( $GLOBALS["db_type"], "ibase" ) == 0 ) {
+    return ibase_close ( $conn );
+  } else {
+    dbi_fatal_error ( "dbi_close(): db_type not defined." );
+  }
+}
+
+// Select the database that all queries should use
+//function dbi_select_db ( $database ) {
+//  if ( strcmp ( $GLOBALS["db_type"], "mysql" ) == 0 ) {
+//    return mysql_select_db ( $database );
+//  } else if ( strcmp ( $GLOBALS["db_type"], "oracle" ) == 0 ) {
+//    // Not supported.  Must sent up a tnsname and user that uses
+//    // the correct tablesapce.
+//    return true;
+//  } else {
+//    dbi_fatal_error ( "dbi_select_db(): db_type not defined." );
+//  }
+//}
+
+/**
+ * Executes a SQL query.
+ *
+ * <b>Note:</b> Use the {@link dbi_error()} function to get error information
+ * if the connection fails.
+ *
+ * @param string $sql          SQL of query to execute
+ * @param bool   $fatalOnError Abort execution if there is a database error?
+ * @param bool   $showError    Display error to user (including possibly the
+ *                             SQL) if there is a database error?
+ *
+ * @return mixed The query result resource on queries (which can then be
+ *               passed to the {@link dbi_fetch_row()} function to obtain the
+ *               results), or true/false on insert or delete queries.
+ */
+function dbi_query ( $sql, $fatalOnError=true, $showError=true ) {
+  global $phpdbiVerbose;
+  if ( strcmp ( $GLOBALS["db_type"], "mysql" ) == 0 ) {
+    $res = mysql_query ( $sql );
+    if ( ! $res )
+      dbi_fatal_error ( "Error executing query." .
+        $phpdbiVerbose ? ( dbi_error() . "\n\n<br />\n" . $sql ) : "" .
+        "", $fatalOnError, $showError );
+    return $res;
+  } else if ( strcmp ( $GLOBALS["db_type"], "mysqli" ) == 0 ) {
+    $res = mysqli_query ( $GLOBALS["db_connection"], $sql );
+    if ( ! $res )
+      dbi_fatal_error ( "Error executing query." .
+        $phpdbiVerbose ? ( dbi_error() . "\n\n<br />\n" . $sql ) : "" .
+        "", $fatalOnError, $showError );
+    return $res;
+  } else if ( strcmp ( $GLOBALS["db_type"], "mssql" ) == 0 ) {
+    $res = mssql_query ( $sql );
+    if ( ! $res )
+      dbi_fatal_error ( "Error executing query." .
+        $phpdbiVerbose ? ( dbi_error() . "\n\n<br />\n" . $sql ) : "" .
+        "", $fatalOnError, $showError );
+    return $res;
+  } else if ( strcmp ( $GLOBALS["db_type"], "oracle" ) == 0 ) {
+    $GLOBALS["oracle_statement"] =
+      OCIParse ( $GLOBALS["oracle_connection"], $sql );
+    return OCIExecute ( $GLOBALS["oracle_statement"],
+      OCI_COMMIT_ON_SUCCESS );
+  } else if ( strcmp ( $GLOBALS["db_type"], "postgresql" ) == 0 ) {
+    $GLOBALS["postgresql_row[\"$res\"]"] = 0;
+    $res =  pg_exec ( $GLOBALS["postgresql_connection"], $sql );
+    if ( ! $res )
+      dbi_fatal_error ( "Error executing query." .
+        $phpdbiVerbose ? ( dbi_error() . "\n\n<br />\n" . $sql ) : "" .
+        "", $fatalOnError, $showError );
+    $GLOBALS["postgresql_numrows[\"$res\"]"] = pg_numrows ( $res );
+    return $res;
+  } else if ( strcmp ( $GLOBALS["db_type"], "odbc" ) == 0 ) {
+    return odbc_exec ( $GLOBALS["odbc_connection"], $sql );
+  } else if ( strcmp ( $GLOBALS["db_type"], "ibm_db2" ) == 0 ) {
+    $res = db2_exec ( $GLOBALS["ibm_db2_connection"], $sql );
+    if ( ! $res )
+      dbi_fatal_error ( "Error executing query." .
+        $phpdbiVerbose ? ( dbi_error() . "\n\n<br />\n" . $sql ) : "" .
+        "", $fatalOnError, $showError );
+    return $res;
+  } else if ( strcmp ( $GLOBALS["db_type"], "ibase" ) == 0 ) {
+    $res = ibase_query ( $sql );
+    if ( ! $res )
+      dbi_fatal_error ( "Error executing query." .
+        $phpdbiVerbose ? ( dbi_error() . "\n\n<br />\n" . $sql ) : "" .
+        "", $fatalOnError, $showError );
+    return $res;
+  } else {
+    dbi_fatal_error ( "dbi_query(): db_type not defined." );
+  }
+}
+
+// Determine the number of rows from a result
+//function dbi_num_rows ( $res ) {
+//  if ( strcmp ( $GLOBALS["db_type"], "mysql" ) == 0 ) {
+//    return mysql_num_rows ( $res );
+//  } else {
+//    dbi_fatal_error ( "dbi_num_rows(): db_type not defined." );
+//  }
+//}
+
+/**
+ * Retrieves a single row from the database and returns it as an array.
+ *
+ * <b>Note:</b> We don't use the more useful xxx_fetch_array because not all
+ * databases support this function.
+ *
+ * <b>Note:</b> Use the {@link dbi_error()} function to get error information
+ * if the connection fails.
+ *
+ * @param resource $res The database query resource returned from
+ *                      the {@link dbi_query()} function.
+ *
+ * @return mixed An array of database columns representing a single row in
+ *               the query result or false on an error.
+ */
+function dbi_fetch_row ( $res ) {
+  if ( strcmp ( $GLOBALS["db_type"], "mysql" ) == 0 ) {
+    return mysql_fetch_array ( $res );
+  } else if ( strcmp ( $GLOBALS["db_type"], "mysqli" ) == 0 ) {
+    return mysqli_fetch_array ( $res );
+  } else if ( strcmp ( $GLOBALS["db_type"], "mssql" ) == 0 ) {
+    return mssql_fetch_array ( $res );
+  } else if ( strcmp ( $GLOBALS["db_type"], "oracle" ) == 0 ) {
+    if ( OCIFetchInto ( $GLOBALS["oracle_statement"], $row,
+      OCI_NUM + OCI_RETURN_NULLS  ) )
+      return $row;
+    return 0;
+  } else if ( strcmp ( $GLOBALS["db_type"], "postgresql" ) == 0 ) {
+    if ( $GLOBALS["postgresql_numrows[\"$res\"]"]  > $GLOBALS["postgresql_row[\"$res\"]"] ) {
+        $r =  pg_fetch_array ( $res, $GLOBALS["postgresql_row[\"$res\"]"] );
+        $GLOBALS["postgresql_row[\"$res\"]"]++;
+        if ( ! $r ) {
+            echo "Unable to fetch row\n";
+            return '';
+        }
+    }
+    else {
+        $r = '';
+    }
+    return $r;
+  } else if ( strcmp ( $GLOBALS["db_type"], "odbc" ) == 0 ) {
+    if ( ! odbc_fetch_into ( $res, $ret ) )
+      return false;
+    return $ret;
+  } else if ( strcmp ( $GLOBALS["db_type"], "ibm_db2" ) == 0 ) {
+    return db2_fetch_array ( $res );
+  } else if ( strcmp ( $GLOBALS["db_type"], "ibase" ) == 0 ) {
+    return ibase_fetch_row ( $res );
+  } else {
+    dbi_fatal_error ( "dbi_fetch_row(): db_type not defined." );
+  }
+}
+
+/**
+ * Returns the number of rows affected by the last INSERT, UPDATE or DELETE.
+ *
+ * <b>Note:</b> Use the {@link dbi_error()} function to get error information
+ * if the connection fails.
+ *
+ * @param resource $conn The database connection
+ * @param resource $res  The database query resource returned from
+ *                       the {@link dbi_query()} function.
+ *
+ * @return int The number or database rows affected.
+ */
+function dbi_affected_rows ( $conn, $res ) {
+  if ( strcmp ( $GLOBALS["db_type"], "mysql" ) == 0 ) {
+    return mysql_affected_rows ( $conn );
+  } else if ( strcmp ( $GLOBALS["db_type"], "mysqli" ) == 0 ) {
+    return mysqli_affected_rows ( $conn );
+  } else if ( strcmp ( $GLOBALS["db_type"], "mssql" ) == 0 ) {
+    return mssql_affected_rows ( $conn );
+  } else if ( strcmp ( $GLOBALS["db_type"], "oracle" ) == 0 ) {
+    if ( $GLOBALS["oracle_statement"] >= 0 ) {
+      return OCIRowCount ( $GLOBALS["oracle_statement"] );
+    } else {
+      return -1;
+    }
+  } else if ( strcmp ( $GLOBALS["db_type"], "postgresql" ) == 0 ) {
+    return pg_affected_rows ( $res );
+  } else if ( strcmp ( $GLOBALS["db_type"], "odbc" ) == 0 ) {
+    return odbc_num_rows ( $res );
+  } else if ( strcmp ( $GLOBALS["db_type"], "ibm_db2" ) == 0 ) {
+    return db2_num_rows ( $res );
+  } else if ( strcmp ( $GLOBALS["db_type"], "ibase" ) == 0 ) {
+    return ibase_affected_rows ( $conn );
+  } else {
+    dbi_fatal_error ( "dbi_free_result(): db_type not defined." );
+  }
+}
+
+/**
+  * Frees a result set.
+  *
+  * @param resource $res The database query resource returned from
+  *                      the {@link dbi_query()} function.
+  *
+  * @return bool True on success
+  */
+function dbi_free_result ( $res ) {
+  if ( strcmp ( $GLOBALS["db_type"], "mysql" ) == 0 ) {
+    return mysql_free_result ( $res );
+  } else if ( strcmp ( $GLOBALS["db_type"], "mysqli" ) == 0 ) {
+    return mysqli_free_result ( $res );
+  } else if ( strcmp ( $GLOBALS["db_type"], "mssql" ) == 0 ) {
+    return mssql_free_result ( $res );
+  } else if ( strcmp ( $GLOBALS["db_type"], "oracle" ) == 0 ) {
+    // Not supported.  Ingore.
+    if ( $GLOBALS["oracle_statement"] >= 0 ) {
+      OCIFreeStatement ( $GLOBALS["oracle_statement"] );
+      $GLOBALS["oracle_statement"] = -1;
+    }
+  } else if ( strcmp ( $GLOBALS["db_type"], "postgresql" ) == 0 ) {
+    return pg_freeresult ( $res );
+  } else if ( strcmp ( $GLOBALS["db_type"], "odbc" ) == 0 ) {
+    return odbc_free_result ( $res );
+  } else if ( strcmp ( $GLOBALS["db_type"], "ibm_db2" ) == 0 ) {
+    return db2_free_result ( $res );
+  } else if ( strcmp ( $GLOBALS["db_type"], "ibase" ) == 0 ) {
+    return ibase_free_result ( $res );
+  } else {
+    dbi_fatal_error ( "dbi_free_result(): db_type not defined." );
+  }
+}
+
+/**
+ * Gets the latest database error message.
+ *
+ * @return string The text of the last database error.  (The type of
+ *                information varies depending on the which type of database
+ *                is being used.)
+ */
+function dbi_error () {
+  if ( strcmp ( $GLOBALS["db_type"], "mysql" ) == 0 ) {
+    $ret = mysql_error ();
+  } else if ( strcmp ( $GLOBALS["db_type"], "mysqli" ) == 0 ) {
+    $ret = mysqli_error ($GLOBALS["db_connection"]);
+  } else if ( strcmp ( $GLOBALS["db_type"], "mssql" ) == 0 ) {
+    // no real mssql_error function. this is as good as it gets
+    $ret = mssql_get_last_message ();
+  } else if ( strcmp ( $GLOBALS["db_type"], "oracle" ) == 0 ) {
+    $ret = OCIError ( $GLOBALS["oracle_connection"] );
+  } else if ( strcmp ( $GLOBALS["db_type"], "postgresql" ) == 0 ) {
+    $ret = pg_errormessage ( $GLOBALS["postgresql_connection"] );
+  } else if ( strcmp ( $GLOBALS["db_type"], "odbc" ) == 0 ) {
+    // no way to get error from ODBC API
+    $ret = "Unknown ODBC error";
+  } else if ( strcmp ( $GLOBALS["db_type"], "ibm_db2" ) == 0 ) {
+    $ret = db2_conn_errormsg ();
+    if ( $ret == '' )
+       $ret = db2_stmt_errormsg ();
+  } else if ( strcmp ( $GLOBALS["db_type"], "ibase" ) == 0 ) {
+    $ret = ibase_errmsg ();
+  } else {
+    $ret = "dbi_error(): db_type not defined.";
+  }
+  if ( strlen ( $ret ) )
+    return $ret;
+  else
+    return "Unknown error";
+}
+
+/**
+ * Displays a fatal database error and aborts execution.
+ *
+ * @param string $msg       The database error message
+ * @param bool   $doExit    Abort execution?
+ * @param bool   $showError Show the details of the error (possibly including
+ *                           the SQL that caused the error)?
+ */
+function dbi_fatal_error ( $msg, $doExit=true, $showError=true ) {
+  if ( $showError ) {
+    echo "<h2>Error</h2>\n";
+    echo "<!--begin_error(dbierror)-->\n";
+    echo "$msg\n";
+    echo "<!--end_error-->\n";
+  }
+  if ( $doExit )
+    exit;
+}
+?>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/print_styles.css
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/print_styles.css	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/print_styles.css	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,36 @@
+#trailer,
+form,
+#month .minical,
+.popup,
+.printer,
+.nav,
+.bullet,
+.new,
+.prev,
+.next {
+	display: none !important;
+}
+a {
+	color: inherit !important;
+}
+#cat {
+	display: inline !important;
+}
+.entry, 
+.layerentry, 
+.unapprovedentry {
+	font-size: 12px;
+}
+#viewt .entry, 
+#viewt .layerentry, 
+#viewt .unapprovedentry {
+	font-size: 13px !important;
+}
+#day dl.desc {
+	display: block !important;
+}
+#viewt table,
+#viewt tr,
+#viewt td {
+	border-color: black !important;
+}

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/settings.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/settings.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/settings.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1 @@
+

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/settings.php.orig
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/settings.php.orig	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/settings.php.orig	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,75 @@
+<?php
+##########################################################
+# WebCalendar Site Settings
+#
+# You can edit this file by hand.  Start by copying settings.php.orig
+# to be settings.php
+#
+# This is not really a php file, but we use the .php file extension to
+# prevent malicious users from downloading this file to obtain our
+# database login.
+#
+# When you're done here, try accessing WebCalendar as an admin
+# user and go to the System Settings page (admin.php) to change system
+# settings.
+#
+# For ODBC use, ignore the db_host value and set 
+# db_database to your full DSN
+##########################################################
+
+# database settings see notes above
+db_type: mysql
+db_host: localhost
+db_login: webcalendar
+db_password: webcal01
+db_database: intranet
+db_persistent: true
+
+# Read-only mode: You can set this to true to create a read-only calendar.
+# If you enable $single_user_login (below), no login will be required,
+# making this a publicly viewable calendar.  In order to add events to
+# a setup like this, you will need to setup another installation of this
+# application that is not read-only.
+# If $readonly is enabled in multi-user mode, only admin users will able
+# to add/edit/delete events.
+# NOTE: Approvals are not disabled in read-only.  You must also disable
+# approvals if you don't want to use them.
+# NOTE #2: Using $readonly has mostly been superceded by the new public
+# access calendar (added in version 0.9.35) which allows
+# a public access calendar with no login or a regular calendar user with
+# a valid login.  This is configured in the admin web interface.
+# If you want to use the new system (recommended), leave this $readonly
+# setting set to "false".
+readonly: false
+
+# Are you setting this up as a multi-user system?
+# You can always start as a single-user system and change to multi-user
+# later.  To enable single-user mode, uncomment out the following line
+# and set it to a login name (that you would use if you ever switched to
+# multi-user).  In single-user mode, you will not be prompted for a login,
+# nor will you be asked to select participants for events.
+# NOTE: If you select single-user and then upgrade to multi-user later,
+# you'll have to add in the login name you've set below to the cal_user
+# table.  You will be able to do this from the web admin interface.
+# Set $single_user to either true or false.  If true, make sure
+# $single_user_login is defined.
+single_user: false
+#single_user_login: cknudsen
+
+# Do you want to use web-based login or use HTTP authorization?
+# NOTE: You can only use HTTP authorization if PHP is built as
+# an Apache module.
+# NOTE #2: There's no need to use this if you're running single
+# user mode.
+# Set the following to true to use http-based authorization.
+# If you want to setup a public calendar with HTTP-based authentication,
+# see FAQ in WebCalendar-SysAdmin.html for instructions.
+use_http_auth: false
+
+# user authentication module (user.php, user-ldap.php, user-nis.php)
+# Note: if you enable LDAP support (with user-ladp.php), you will also
+# need to modify user-ldap.php to configure some settings.
+user_inc: user.php
+
+# end
+?>
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/site_extras.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/site_extras.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/site_extras.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,170 @@
+<?php
+if ( empty ( $PHP_SELF ) && ! empty ( $_SERVER ) &&
+  ! empty ( $_SERVER['PHP_SELF'] ) ) {
+  $PHP_SELF = $_SERVER['PHP_SELF'];
+}
+if ( ! empty ( $PHP_SELF ) && preg_match ( "/\/includes\//", $PHP_SELF ) ) {
+    die ( "You can't access this file directly!" );
+}
+/*
+ * $Id: site_extras.php,v 1.12 2005/02/08 01:35:45 cknudsen Exp $
+ *
+ * Page Description:
+ *	This file can be used to define extra information associated with a
+ *	calender entry.
+ *	
+ *	You may define extra fields of the following types:
+ *	  EXTRA_TEXT - will allow user to enter a line of text
+ *	  EXTRA_MULTILINETEXT - will allow user to enter multiple lines of text
+ *	  EXTRA_URL - will be displayed as a link
+ *	  EXTRA_DATE - will be presented with date pulldown menus when entering
+ *	  EXTRA_EMAIL - will be presented as a mailto URL
+ *	  EXTRA_USER - most be a calendar user name; will be presented
+ *	               with a pulldown
+ *	  EXTRA_REMINDER - will allow reminder email messages to be sent
+ *	    out to all event participants
+ *	  EXTRA_REMINDER_DATE - will allow reminder email messages to be sent
+ *	    out to all event participants on the specified date.  Can use
+ *	    extra options to send it out before this date also.
+ *	  EXTRA_SELECTION_LIST - allows a custom selection list.  Can use
+ *	    this to specify a list of possible locations, etc.
+ *	
+ * Comments:
+ *	If you want to fully support using languages other than what
+ *	you define below, you will need to add the 2nd field of the arrays
+ *	below to the translation files.
+ *	
+ * WARNING:
+ *	If you want to use reminders, you will need to do some
+ *	extra steps in setting up WebCalendar.  There is no built-in support
+ *	for executing time-based jobs within PHP, so you need to setup something
+ *	to execute the send_reminders.php script.
+ *	On UNIX/Linux, this will be cron.
+ *	On Windows, you'll need to find a cron-like way to do this.
+ *	See README.html for more info.
+ *
+ */
+
+
+// define types
+$EXTRA_TEXT = 1;
+$EXTRA_MULTILINETEXT = 2;
+$EXTRA_URL = 3;
+$EXTRA_DATE = 4;
+$EXTRA_EMAIL = 5;
+$EXTRA_USER = 6;
+$EXTRA_REMINDER = 7;
+$EXTRA_SELECTLIST = 8;
+
+// Options for reminders - these should be or-ed together when
+// it makes sense.  (Right now the only two available options wouldn't
+// make sense to or together.)
+// By default, options = 0.
+
+// Owner specifies what date to send.  This will present a date selection
+// area on the edit page (just like a EXTRA_DATE will).
+$EXTRA_REMINDER_WITH_DATE =	0x0001;
+
+// Owner chooses how many days/hours/minutes before event date that
+// the reminder should be sent.  Will see:  __ Days __ Hrs __ Mins on
+// event edit page.
+$EXTRA_REMINDER_WITH_OFFSET =	0x0002;
+
+// Default for reminder is "no".  Add this flag to make the default "Yes"
+// when creating a new event.
+$EXTRA_REMINDER_DEFAULT_YES =	0x0004;
+
+// Format of an entry is an array with the following elements:
+// name: unique name of this extra field (used in db)
+// description: how this field will be described to users
+// type: $EXTRA_URL, $EXTRA_TEXT, etc...
+// arg1: for reminders how many minutes before event should reminder
+//       for multi-line text, how many columns to display in the form
+//         as in <textarea rows="XX" cols="XX"
+//       for text (single line), how many columns to display
+//         as in <input size="XX"
+//	for selection list, contains an array of possible values
+// arg2: for reminders, this specifies options such as
+//         $EXTRA_REMINDER_WITH_DATE or $EXTRA_REMINDER_WITH_OFFSET.
+//       for multi-line text, how many rows to display in the form
+//         as in <textarea rows="XX" cols="XX"
+
+// Example 1:
+//   You want to add an URL, a reminder, an email address,
+//   an event contact (from list of calendar users), and some driving
+//   directions.
+//
+// $site_extras = array (
+//   array (
+//     "URL",        // unique name of this extra field (used in db)
+//     "Event URL",  // how this field will be described to users
+//     $EXTRA_URL,   // type of field
+//     0,            // arg 1
+//     0             // arg 2
+//   ),
+//   array (
+//     "Email",         // unique name of this extra field (used in db)
+//     "Event Email",   // how this field will be described to users
+//     $EXTRA_EMAIL,    // type of field
+//     0,               // arg 1 (unused)
+//     0                // arg 2 (unused)
+//   ),
+//   array (
+//     "Contact",       // unique name of this extra field (used in db)
+//     "Event Contact", // how this field will be described to users
+//     $EXTRA_USER,     // type of field
+//     0,               // arg 1 (unused)
+//     0                // arg 2 (unused)
+//   ),
+//   array (
+//     "Directions",         // unique name of this extra field (used in db)
+//     "Driving Directions", // how this field will be described to users
+//     $EXTRA_MULTILINETEXT, // type of field
+//     50,                   // width of text entry
+//     8                     // height of text entry
+//   ),
+//   array (
+//     "Reminder",          // unique name of this extra field (used in db)
+//     "Send Reminder",     // how this field will be described to users
+//     $EXTRA_REMINDER,     // type of field
+//     21 * (24 * 60),      // how many minutes before event should reminder
+//                          // be sent (21 days in this case)
+//     $EXTRA_REMINDER_WITH_OFFSET | $EXTRA_REMINDER_DEFAULT_YES
+//                          // specifies reminder options bit-or
+//   ),
+//   array (
+//     "RoomLocation",       // unique name of this extra field (used in db)
+//     "Location",           // how this field will be described to users
+//     $EXTRA_SELECTLIST,    // type of field
+//                           // List of options (first will be default)
+//     array ( "None", "Room 101", "Room 102", "Conf Room 8", "Conf Room 12" ),
+//     0                     // arg 2 (unused)
+//   )
+// );
+
+// END EXAMPLES
+
+// Define your stuff here...
+// Below translate calls are here so they get picked up by check_translation.pl.
+// They are never executed in PHP.
+// Make sure you add translations in the translations file for anything
+// you need to translate to another language.
+// Use tools/check_translation.pl to verify you have all your translations.
+//
+// Kludge for picking up translations:
+//    translate("Send Reminder")
+$site_extras = array (
+  array (
+    "Reminder",          // unique name of this extra field (used in db)
+    "Send Reminder",     // how this field will be described to users
+    $EXTRA_REMINDER,     // type of field
+    240,                 // arg 1: how many minutes before event should
+                         // reminder be sent (however, this option is just
+                         // the default when used with the
+                         // EXTRA_REMINDER_WITH_OFFSET option) since the user
+                         // can override this.
+    $EXTRA_REMINDER_WITH_OFFSET
+                         // arg 2: specifies reminder options bit-or
+  )
+);
+?>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/styles.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/styles.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/styles.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,937 @@
+<?php
+if ( empty ( $PHP_SELF ) && ! empty ( $_SERVER ) &&
+  ! empty ( $_SERVER['PHP_SELF'] ) ) {
+  $PHP_SELF = $_SERVER['PHP_SELF'];
+}
+if ( ! empty ( $PHP_SELF ) && preg_match ( "/\/includes\//", $PHP_SELF ) ) {
+    die ( "You can't access this file directly!" );
+}
+?>
+<?php /* 
+
+                   HOW TO READ THIS DOCUMENT
+
+  Below are CSS styles used in WebCalendar.
+  There are two main parts to every CSS style: 'selector' & 'declaration'
+    EXAMPLE:
+      body {
+        color: red;
+      }
+  The selector in the example above is 'body', while its
+  declaration is 'color: red;'
+  Each declaration has two parts: 'property' & 'value'
+
+  In the example above, there is only one declaraion ("color: red;")
+  For that declaration, the PROPERTY is "color" and the VALUE is "red"
+
+  NOTE: Each property must be followed by a colon (:), 
+    and each value must be followed by a semi-colon (;)
+
+  Each selector can contain multiple declarations
+    EXAMPLE:
+      body {
+        color: red;
+        font-size: 12px;
+        background-color: black;
+      }
+  In the example above, there are three declarations:
+      color: red;
+      font-size: 12px;
+      background-color: black;
+
+  NOTE: The declarations for a given style must be contained within
+    curly brackets ({ })
+
+                  VARIABLES USED TO STYLE WEBCALENDAR
+
+  TEXTCOLOR - default text color
+  FONTS - default font-family
+  BGCOLOR - background-color for the page
+  TABLEBG - background-color for tables
+    (typically used when the table also has cellspacing, thereby
+    creating a border effect)
+  CELLBG - background-color for normal cells
+    (not weekends, today, or any other types of cells)
+  TODAYCELLBG - background-color for cells that make up today's date
+  WEEKENDBG - background-color for cells that make up the weekend
+  THFG - text color for table headers
+  THBG - background-color for table headers
+  POPUP_FG - text color for event popups
+  POPUP_BG - background-color for event popups
+  H2COLOR - text color for text within h2 tags
+*/
+?>
+<style type="text/css">
+<!--
+<?php /*==================== SECTION A ===============================
+
+  The CSS for WebCalendar is broken down into several sections.
+  This should make it easier to understand, debug & understand the
+  logical sequence of how the style system is built.
+  Each page in WebCalendar is assigned a unique ID. This unique ID is
+  determined by taking the name of the page & removing any underscores (_).
+  For a complete list of and their IDs, see includes/init.php or
+  docs/WebCalendar-StyleSystem.html.
+
+  The following sections appear below:
+    Section A - basic, required elements that affect WebCalendar as a whole
+    Section B - more specific to select areas of WebCalendar, yet still 
+      affects many areas of WebCalendar
+    Section C - classes specific to certain pages, but that affect either 
+      the page as a whole, or large areas within that page
+    Section D - the "nitty gritty" of classes. Used specifically for 
+      fine-tuning elements within a specific page
+*/
+
+/* SECTION A */
+?>body {
+  color: <?php echo $GLOBALS['TEXTCOLOR']; ?>;
+  font-family: <?php echo $GLOBALS['FONTS']; ?>;
+  font-size: 12px;
+  background-color: <?php echo $GLOBALS['BGCOLOR']; ?>;
+}
+<?php //links that don't have a specific class
+//NOTE: these must appear ABOVE the 'printer' & all other 
+//link-related classes for those classes to work 
+?>a {
+  color: <?php echo $GLOBALS['TEXTCOLOR']; ?>;
+  text-decoration: none;
+}
+a:hover {
+  color: #0000FF;
+}
+#edituser,
+#edituserhandler,
+#groupedit,
+#editnonusers,
+#groupedithandler,
+#editnonusershandler {
+  background-color: #F8F8FF;
+}
+#tabscontent {
+  margin: 0px;
+  padding: 0.5em;
+  border: 2px groove #C0C0C0;
+  width: 70%;
+  background-color: #F8F8FF;
+}
+.tabfor {
+  padding: 0.2em 0.2em 0.07em 0.2em;
+  margin: 0px 0.2em 0px 0.8em;
+  border-top: 2px ridge #C0C0C0;
+  border-left: 2px ridge #C0C0C0;
+  border-right: 2px ridge #C0C0C0;
+  border-bottom: 2px solid #F8F8FF;
+  background-color: #F8F8FF;
+  font-size: 14px;
+  text-decoration: none;
+  color: #000000;
+}
+.tabbak {
+  padding: 0.2em 0.2em 0px 0.2em;
+  margin: 0 0.2em 0 0.8em;
+  border-top: 2px ridge #C0C0C0;
+  border-left: 2px ridge #C0C0C0;
+  border-right: 2px ridge #C0C0C0;
+  background-color: #E0E0E0;
+  font-size: 14px;
+  text-decoration: none;
+  color: #000000;
+}
+#tabscontent_public,
+#tabscontent_groups,
+#tabscontent_nonuser,
+#tabscontent_other,
+#tabscontent_email,
+#tabscontent_colors,
+#tabscontent_participants,
+#tabscontent_sched,
+#tabscontent_pete,
+#tabscontent_export,
+#tabscontent_nonusers,
+#useriframe,
+#grpiframe,
+#nonusersiframe {
+  display: none;
+}
+label {
+  font-weight: bold;
+}
+.sample {
+  border-style: groove;
+}
+<?php //week number in monthview & such 
+?>.weeknumber,
+.weeknumber a {
+  font-size: 10px;
+  color: #B04040;
+  text-decoration: none;
+}
+<?php //transparent images used for visual color-selection
+?>img.color {
+  border-width: 0px;
+  width: 15px;
+  height: 15px;
+}
+<?php //display:none; is unhidden by includes/print_styles.css for printer-friendly pages 
+?>#cat {
+  display: none;
+  font-size: 18px;
+}
+#trailer {
+  margin: 0px;
+  padding: 0px;
+}
+#trailer form {
+  float: left;
+  width: 33%;
+  border-top: 1px solid <?php echo $GLOBALS['TABLEBG']; ?>;
+  padding-top: 5px;
+  margin-top: 5px;
+  margin-bottom: 25px;
+}
+#trailer label {
+  margin: 0px;
+  padding: 0px;
+  font-weight: bold;
+}
+#monthform {
+  clear: left;
+}
+#weekform {
+  text-align: center;
+}
+#yearform {
+  text-align: right;
+  clear: right;
+}
+#menu {
+  clear: both;
+}
+#menu a {
+  font-size: 14px;
+  color: <?php echo $GLOBALS['TEXTCOLOR']; ?>;
+  text-decoration: none;
+}
+.prefix {
+  font-weight: bold;
+  font-size: 14px;
+}
+<?php //link to webcalendar site -- NOTE: by modifying this style, you can make this link disappear
+?>a#programname {
+  margin-top: 10px;
+  font-size: 10px;
+}
+<?php //printer-friendly links 
+?>.printer {
+  font-size: 14px;
+  color: <?php echo $GLOBALS['TEXTCOLOR']; ?>;
+  text-decoration: none;
+  clear: both;
+  display: block;
+  width: 15ex;
+}
+<?php //new event icon (i.e. '+' symbol)
+?>.new {
+  border-width: 0px;
+  float: right;
+}
+<?php //links to unapproved entries/events
+?>.unapprovedentry {
+  font-size: 13px;
+  color: #800000;
+  text-decoration: none;
+  padding-right: 3px;
+}
+.nounapproved {
+  margin-left: 20px;
+}
+<?php //links to entries/events on layers
+?>.layerentry {
+  font-size: 13px;
+  color: #006060;
+  text-decoration: none;
+  padding-right: 3px;
+}
+<?php //links to entries/events
+?>.entry {
+  font-size: 13px;
+  color: #006000;
+  text-decoration: none;
+  padding-right: 3px;
+}
+<?php //event (or bullet) icon; NOTE: must appear AFTER the .entry, .layerentry, and .unapprovedentry classes
+?>.entry img,
+.layerentry img,
+.unapprovedentry img {
+  border-width: 0px;
+  margin-left: 2px;
+  margin-right: 2px;
+}
+<?php //numerical date links in main calendars
+?>.dayofmonth {
+  font-size: 13px;
+  color: #000000;
+  font-weight: bold;
+  text-decoration: none;
+  border-top-width: 0px;
+  border-left-width: 0px;
+  border-right: 1px solid #888888;
+  border-bottom: 1px solid #888888;
+  padding: 0px 2px 0px 3px;
+}
+<?php //numerical date links in main calendars on hover
+?>.dayofmonth:hover {
+  color: #0000FF;
+  border-right: 1px solid #0000FF;
+  border-bottom: 1px solid #0000FF;
+}
+<?php //left arrow images
+?>.prev img {
+  border-width: 0px;
+  margin-left: 3px;
+  margin-top: 7px;
+  float: left;
+}
+<?php //right arrow images
+?>.next img {
+  border-width: 0px;
+  margin-right: 3px;
+  margin-top: 7px;
+  float: right;
+}
+#activitylog .prev {
+  border-width: 0px;
+  float: left;
+}
+#activitylog .next {
+  border-width: 0px;
+  float: right;
+}
+<?php //left arrow image in day.php
+?>#day .prev img {
+  border-width: 0px;
+  margin-top: 37px;
+  float: left;
+}
+<?php //right arrow image in day.php
+?>#day .next img {
+  border-width: 0px;
+  margin-top: 37px;
+  float: right;
+}
+<?php //left arrow image in day.php
+?>#day .monthnav .prev img {
+  border-width: 0px;
+  margin: 0px;
+  float: left;
+}
+<?php //right arrow image in day.php
+?>#day .monthnav .next img {
+  border-width: 0px;
+  margin: 0px;
+  float: right;
+}
+.dailymatrix {
+  cursor: pointer;
+  font-size: 12px;
+  text-decoration: none;
+  text-align: right;
+  background-color: <?php echo $GLOBALS['THBG']; ?>;
+}
+td.matrixappts {
+  cursor: pointer;
+  text-align: left;
+  background-color: <?php echo $GLOBALS['CELLBG']; ?>;
+  vertical-align: middle;
+}
+td.matrix {
+  height: 1px;
+  background-color: #000000;
+}
+.matrix img {
+  border-width: 0px;
+  width: 100%;
+  height: 1px;
+}
+a.matrix img {
+  border-width: 0px;
+  width: 100%;
+  height: 8px;
+}
+.matrixd {
+  border-left: 1px solid <?php echo $GLOBALS['TABLEBG']; ?>;
+  border-right: 1px solid <?php echo $GLOBALS['TABLEBG']; ?>;
+  margin-left: auto; 
+  margin-right: auto;
+}
+.matrixlegend {
+  margin-top: 25px;
+  padding: 5px;
+  text-align: center;
+  background: #ffffff;
+  margin-left: auto; 
+  margin-right: auto;
+  border: 1px solid #000000;
+}
+.matrixlegend img {
+  border-width: 0px;
+  width: 10px;
+  height: 10px;
+}
+.nav {
+  font-size: 14px;
+  color: <?php echo $GLOBALS['TEXTCOLOR']; ?>;
+  text-decoration: none;
+}
+.popup {
+  font-size: 12px;
+  color: <?php echo $GLOBALS['POPUP_FG']; ?>;
+  <?php echo background_css ( $GLOBALS['POPUP_BG'], 200 ); ?>
+  text-decoration: none;
+  position: absolute;
+  z-index: 20;
+  visibility: hidden;
+  top: 0px;
+  left: 0px;
+  border: 1px solid <?php echo $GLOBALS['POPUP_FG']; ?>;
+  padding: 3px;
+}
+.popup dl {
+  margin: 0px;
+  padding: 0px;
+}
+.popup dt {
+  font-weight: bold;
+  margin: 0px;
+  padding: 0px;
+}
+.popup dd {
+  margin-left: 20px;
+}
+.tooltip {
+  cursor: help;
+  text-decoration: none;
+  font-weight: bold;
+}
+.tooltipselect {
+  cursor: help;
+  text-decoration: none;
+  font-weight: bold;
+  vertical-align: top;
+}
+h2 {
+  font-size: 20px;
+  color: <?php echo $GLOBALS['H2COLOR']; ?>;
+}
+h3 {
+  font-size: 18px;
+}
+p,
+input,
+select {
+  font-size: 12px;
+}
+textarea {
+  font-size: 12px;
+  overflow: auto;
+}
+.user {
+  font-size: 18px;
+  color: <?php echo $GLOBALS['H2COLOR']; ?>;
+  text-align: center;
+}
+.categories {
+  font-size: 18px;
+  color: <?php echo $GLOBALS['H2COLOR']; ?>;
+  text-align: center;
+}
+<?php //left column in help sections 
+?>.help {
+  vertical-align: top;
+  font-weight: bold;
+}
+<?php //question mark img linking to help sections
+?>img.help {
+  border-width: 0px;
+  cursor: help;
+}
+<?php //standard table appearing mainly in prefs.php & admin.php 
+?>.standard {
+  border: 1px solid <?php echo $GLOBALS['TABLEBG']; ?>;
+  background-color: <?php echo $GLOBALS['CELLBG']; ?>;
+  font-size: 12px;
+}
+.standard th {
+  color: <?php echo $GLOBALS['THFG']; ?>;
+  <?php echo background_css ( $GLOBALS['THBG'], 30 ); ?>
+  font-size: 18px;
+  padding: 0px;
+  border-bottom: 1px solid <?php echo $GLOBALS['TABLEBG']; ?>;
+}
+<?php //Styles for minicalendars
+      //keep font-size:12px for IE6
+?>.minical {
+  font-size: 12px;
+  border-collapse: collapse;
+  margin: 0px 0px 5px 0px;
+}
+.minical caption a {
+  font-weight: bold;
+  color: #B04040;
+}
+.minical caption a:hover {
+  color: #0000FF;
+}
+<?php //formats the day name (i.e. Sun, Mon, etc) in minicals
+?>.minical th, 
+.minical td.empty {
+  color: <?php echo $GLOBALS['TEXTCOLOR']; ?>;
+  text-align: center;
+  background-color: <?php echo $GLOBALS['BGCOLOR']; ?>;
+}
+.minical td {
+  padding: 0px 2px;
+  border: 1px solid <?php echo $GLOBALS['BGCOLOR']; ?>;
+}
+.minical td a {
+  display: block;
+  text-align: center;
+  margin: 0px;
+  padding: 3px;
+}
+.minical td.weekend {
+  background-color: <?php echo $GLOBALS['WEEKENDBG']; ?>;
+}
+.minical td#today {
+  background-color: <?php echo $GLOBALS['TODAYCELLBG']; ?>;
+}
+.minical td.hasevents {
+  background-color: #DDDDFF;
+  font-weight: bold;
+}
+#activitylog table,
+.embactlog {
+  width: 100%;
+  border-bottom: 1px solid <?php echo $GLOBALS['TABLEBG']; ?>;
+  border-right: 1px solid <?php echo $GLOBALS['TABLEBG']; ?>;
+  border-spacing: 0px;
+}
+#activitylog tr,
+.embactlog tr {
+  background-color: #FFFFFF;
+}
+#activitylog .odd,
+.embactlog .odd {
+  background-color: #EEEEEE;
+}
+#activitylog th,
+.embactlog th {
+  width: 14%;
+  color: <?php echo $GLOBALS['THFG']; ?>;
+  background-color: <?php echo $GLOBALS['THBG']; ?>;
+  border-top: 1px solid <?php echo $GLOBALS['TABLEBG']; ?>;
+  border-left: 1px solid <?php echo $GLOBALS['TABLEBG']; ?>;
+  border-bottom: 1px solid <?php echo $GLOBALS['TABLEBG']; ?>;
+  padding: 1px 3px;
+}
+#activitylog th.usr,
+.embactlog th.usr,
+#activitylog th.cal,
+.embactlog th.cal,
+#activitylog th.action,
+.embactlog th.action {
+  width: 7%;
+}
+#activitylog td,
+.embactlog td {
+  border-left: 1px solid <?php echo $GLOBALS['TABLEBG']; ?>;
+  padding: 1px 3px;
+}
+#day div.minicalcontainer {
+  text-align: right;
+  border: 1px solid #000000;
+  padding: 3px;
+}
+<?php //the really big number above the minicalendar in day.php
+?>#day .minical caption {
+  text-align: center;
+  font-weight: bold;
+  color: <?php echo $GLOBALS['THFG']; ?>;
+  background-color: <?php echo $GLOBALS['THBG']; ?>;
+  font-size: 47px;
+}
+#day .minical td.selectedday {
+  border: 2px solid <?php echo $GLOBALS['TABLEBG']; ?>;
+}
+#day .monthnav th {
+  text-align: center;
+  color: <?php echo $GLOBALS['THFG']; ?>;
+  background-color: <?php echo $GLOBALS['THBG']; ?>;
+  border-width: 0px;
+  padding: 3px;
+}
+.glance {
+  border-bottom: 1px solid <?php echo $GLOBALS['TABLEBG']; ?>;
+  border-right: 1px solid <?php echo $GLOBALS['TABLEBG']; ?>;
+  width: 100%;
+}
+.glance th.empty {
+  border-top: 1px solid <?php echo $GLOBALS['BGCOLOR']; ?>;
+  border-left: 1px solid <?php echo $GLOBALS['BGCOLOR']; ?>;
+  background-color: <?php echo $GLOBALS['BGCOLOR']; ?>;
+}
+.glance th.row {
+  border-top: 1px solid <?php echo $GLOBALS['TABLEBG']; ?>;
+  border-left: 1px solid <?php echo $GLOBALS['TABLEBG']; ?>;
+  height: 40px;
+  width: 14%;
+  color: <?php echo $GLOBALS['THFG']; ?>;
+  font-size: 13px;
+  background-color: <?php echo $GLOBALS['THBG']; ?>;
+  vertical-align: top;
+}
+.glance td {
+  vertical-align: top;
+  <?php echo background_css ( $GLOBALS['CELLBG'], 50 ); ?>
+  border-top: 1px solid <?php echo $GLOBALS['TABLEBG']; ?>;
+  border-left: 1px solid <?php echo $GLOBALS['TABLEBG']; ?>;
+  padding-left: 3px;
+}
+<?php //display: none; is unhidden by includes/print_styles.css for printer-friendly pages
+?>#day dl.desc {
+  display: none;
+  margin: 0px;
+  padding: 0px;
+}
+#day dl.desc dt {
+  font-weight: bold;
+}
+#day dl.desc dd {
+  margin: 0px;
+  padding-left: 20px;
+}
+.viewt,
+#viewv .main,
+#viewm .main,
+#vieww .main,
+#week .main,
+#viewl .main,
+#month .main {
+  border-bottom: 1px solid <?php echo $GLOBALS['TABLEBG']; ?>;
+  border-right: 1px solid <?php echo $GLOBALS['TABLEBG']; ?>;
+  width: 100%;
+  clear: both;
+}
+<?php //contains ALL months
+?>#year .main tr {
+  vertical-align: top;
+}
+th {
+  font-size: 13px;
+  color: <?php echo $GLOBALS['THFG']; ?>;
+  background-color: <?php echo $GLOBALS['THBG']; ?>;
+}  
+#viewv .main th,
+#viewl .main th,
+#month .main th {
+  border-top: 1px solid <?php echo $GLOBALS['TABLEBG']; ?>;
+  border-left: 1px solid <?php echo $GLOBALS['TABLEBG']; ?>;
+  <?php echo background_css ( $GLOBALS['THBG'], 15 ); ?>
+  width: 14%;
+}
+#vieww .main th,
+#week .main th {
+  border-top: 1px solid <?php echo $GLOBALS['TABLEBG']; ?>;
+  border-left: 1px solid <?php echo $GLOBALS['TABLEBG']; ?>;
+  width: 12%;
+}
+#viewm .main th {
+  border-top: 1px solid <?php echo $GLOBALS['TABLEBG']; ?>;
+  border-left: 1px solid <?php echo $GLOBALS['TABLEBG']; ?>;
+}
+<?php //participants cell
+?>#viewd .main th {
+  border-right: 1px solid <?php echo $GLOBALS['TABLEBG']; ?>;
+  padding: 1px;
+}
+#viewv .main th.empty,
+#viewm .main th.empty,
+#vieww .main th.empty,
+#week .main th.empty {
+  background-color: <?php echo $GLOBALS['BGCOLOR']; ?>;
+  border-top: 1px solid <?php echo $GLOBALS['BGCOLOR']; ?>;
+  border-left: 1px solid <?php echo $GLOBALS['BGCOLOR']; ?>;
+}
+#week .main th.row {
+  width: 10%;
+  vertical-align: top;
+  height: 40px;
+}
+#vieww .main th.row,
+#viewv .main th.row,
+#viewm .main th.row,
+#viewt th.row {
+  width: 10%;
+  vertical-align: top;
+  border-top: 1px solid <?php echo $GLOBALS['TABLEBG']; ?>;
+  border-left: 1px solid <?php echo $GLOBALS['TABLEBG']; ?>;
+}
+#viewd .main th.row {
+  border-right-width: 0px;
+  text-align: left;
+}
+#vieww .main th.today,
+#viewm .main th.today,
+#viewv .main th.today,
+#viewt .main th.today {
+  width: 10%;
+  <?php echo background_css ( $GLOBALS['TODAYCELLBG'], 100 ); ?>
+  border-top: 1px solid <?php echo $GLOBALS['TABLEBG']; ?>;
+  border-left: 1px solid <?php echo $GLOBALS['TABLEBG']; ?>;
+  vertical-align: top;
+}
+#week .main th.today {
+  <?php echo background_css ( $GLOBALS['TODAYCELLBG'], 100 ); ?>
+  border-top: 1px solid <?php echo $GLOBALS['TABLEBG']; ?>;
+  border-left: 1px solid <?php echo $GLOBALS['TABLEBG']; ?>;
+  width: 12%;
+}
+#week .main td.hasevents,
+#day .glance td.hasevents {
+  <?php echo background_css ( $GLOBALS['TODAYCELLBG'], 100 ); ?>
+}
+#week .main th a,
+#weekdetails .main th a {
+  color: <?php echo $GLOBALS['THFG']; ?>;
+}
+#week .main th a:hover,
+#weekdetails .main th a:hover {
+  color: #0000FF;
+}
+#year .main td {
+  text-align: center;
+  padding: 0px 3px;
+}
+#viewl .main td,
+#month .main td {
+  font-size: 12px;
+  height: 75px;
+  border-top: 1px solid <?php echo $GLOBALS['TABLEBG']; ?>;
+  border-left: 1px solid <?php echo $GLOBALS['TABLEBG']; ?>;
+  <?php echo background_css ( $GLOBALS['CELLBG'], 100 ); ?>
+  vertical-align: top;
+}
+#vieww .main td,
+#week .main td,
+#viewm .main td,
+#viewv .main td {
+  font-size: 12px;
+  <?php echo background_css ( $GLOBALS['CELLBG'], 100 ); ?>
+  vertical-align: top;
+  border-top: 1px solid <?php echo $GLOBALS['TABLEBG']; ?>;
+  border-left: 1px solid <?php echo $GLOBALS['TABLEBG']; ?>;
+  padding-left: 3px;
+}
+#viewl .main td.weekend,
+#month .main td.weekend,
+#viewm .main td.weekend,
+#viewv .main td.weekend,
+#vieww .main td.weekend,
+#week .main td.weekend {
+  <?php echo background_css ( $GLOBALS['WEEKENDBG'], 100 ); ?>
+  border-top: 1px solid <?php echo $GLOBALS['TABLEBG']; ?>;
+  border-left: 1px solid <?php echo $GLOBALS['TABLEBG']; ?>;
+}
+#viewl .main td.today,
+#month .main td.today,
+#viewm .main td.today,
+#vieww .main td.today,
+#viewv .main td.today {
+  <?php echo background_css ( $GLOBALS['TODAYCELLBG'], 100 ); ?>
+  border-top: 1px solid <?php echo $GLOBALS['TABLEBG']; ?>;
+  border-left: 1px solid <?php echo $GLOBALS['TABLEBG']; ?>;
+  vertical-align: top;
+}
+#month #prevmonth,
+#viewl #prevmonth {
+  float: left;
+}
+#month #nextmonth,
+#viewl #nextmonth {
+  float: right;
+}
+#month .minical caption,
+#viewl .minical caption {
+  margin-left: 4ex;
+}
+<?php //keep font-size:12px; for IE6 rendering
+      //display: block; keeps the caption vertically close to the day names
+?>#year .minical {
+  margin: 5px auto;
+  display: block;
+}
+#year .minical caption {
+  margin: 0px auto;
+}
+#viewl .minical,
+#month .minical {
+  border-width: 0px;
+}
+#viewt td.reg {
+  <?php echo background_css ( $GLOBALS['CELLBG'], 100 ); ?>
+  border-top: 1px solid <?php echo $GLOBALS['TABLEBG']; ?>;
+  border-left: 1px solid <?php echo $GLOBALS['TABLEBG']; ?>;
+  width: 90%;
+}
+.title {
+  width: 99%;
+  text-align: center;
+}
+#day .title {
+  margin-top: 3px;
+  text-align: center;
+}
+#day .title .date,
+.title .date {
+  font-size: 16px;
+  font-weight: bold;
+  text-align: center;
+  color: <?php echo $GLOBALS['H2COLOR']; ?>;
+}
+.title .weeknumber {
+  font-size: 14px;
+  color: <?php echo $GLOBALS['H2COLOR']; ?>;
+}
+.title .viewname,
+#day .title .user,
+.title .user {
+  font-size: 16px;
+  font-weight: bold;
+  color: <?php echo $GLOBALS['H2COLOR']; ?>;
+  text-align: center;
+}
+#weekdetails .main {
+  border-right: 1px solid <?php echo $GLOBALS['TABLEBG']; ?>;
+  border-bottom: 1px solid <?php echo $GLOBALS['TABLEBG']; ?>;
+  width: 90%;
+}
+#weekdetails .main th {
+  font-size: 13px;
+  color: <?php echo $GLOBALS['THFG']; ?>;
+  <?php echo background_css ( $GLOBALS['THBG'], 100 ); ?>
+  border-left: 1px solid <?php echo $GLOBALS['TABLEBG']; ?>;
+  border-top: 1px solid <?php echo $GLOBALS['TABLEBG']; ?>;
+  width: 100%;
+  padding: 2px;
+}
+#weekdetails .main td {
+  border-left: 1px solid <?php echo $GLOBALS['TABLEBG']; ?>;
+  border-top: 1px solid <?php echo $GLOBALS['TABLEBG']; ?>;
+  <?php echo background_css ( $GLOBALS['CELLBG'], 100 ); ?>
+  vertical-align: top;
+  height: 75px;
+}
+<?php /* must appear after th & td declarations
+  optionally, you can change this to read "#weekdetails td.today" to
+  color today's cell instead of the header
+  to color both the cell & the header with this style, simply remove
+  the "th" below
+*/?>#weekdetails .main th.today {
+  <?php echo background_css ( $GLOBALS['TODAYCELLBG'], 100 ); ?>
+}
+<?php /* must appear after th & td declarations
+  optionally, you can change this to read "#weekdetails th.weekend" to
+  color the weekend headers instead of the cells
+  to color both the cell & the header with this style, simply remove
+  the "td" below
+*/?>#weekdetails .main td.weekend {
+  <?php echo background_css ( $GLOBALS['WEEKENDBG'], 100 ); ?>
+}
+#viewt table {
+  border-collapse: collapse;
+}
+#viewt .timebar {
+  padding: 0px;
+  width: 100%;
+  border-width: 0px;
+}
+#viewt .timebar td {
+  padding: 0px;
+  background-color: #FFFFFF;
+  text-align: center;
+  color: #CCCCCC;
+  font-size: 10px;
+}
+#viewt .yardstick {
+  width: 100%;
+  padding: 0px;
+  border-width: 0px;
+}
+#viewt .yardstick td {
+  background-color: #FFFFFF;
+  border: 1px solid #CCCCCC;
+}
+#viewt .entrycont {
+  width: 100%;
+  padding: 0px;
+  border-width: 0px;
+}
+#viewt .entrycont td {
+  text-align: right;
+}
+#viewt .entrybar {
+  width: 100%;
+  border-width: 0px;
+}
+#viewt .entrybar td.entry {
+  text-align: center;
+  background-color: #F5DEB3;
+  border: 1px solid #000000;
+}
+#viewt .weekend {
+  width: 90%;
+  <?php echo background_css ( $GLOBALS['WEEKENDBG'], 100 ); ?>
+  border-top: 1px solid <?php echo $GLOBALS['TABLEBG']; ?>;
+  border-left: 1px solid <?php echo $GLOBALS['TABLEBG']; ?>;
+  vertical-align: top;
+}
+#viewt td.today {
+  width: 90%;
+  <?php echo background_css ( $GLOBALS['TODAYCELLBG'], 100 ); ?>
+  border-left: 1px solid <?php echo $GLOBALS['TABLEBG']; ?>;
+  border-top: 1px solid <?php echo $GLOBALS['TABLEBG']; ?>;
+  vertical-align: top;
+}
+#viewt th.today {
+  color: <?php echo $GLOBALS['THFG']; ?>;
+  <?php echo background_css ( $GLOBALS['TODAYCELLBG'], 100 ); ?>
+  border-left: 1px solid <?php echo $GLOBALS['TABLEBG']; ?>;
+  border-top: 1px solid <?php echo $GLOBALS['TABLEBG']; ?>;
+  vertical-align: top;
+}
+#login {
+  margin-top: 70px;
+  margin-bottom: 50px;
+  text-align: center;
+}
+#login table {
+  border: 1px solid <?php echo $GLOBALS['TABLEBG']; ?>;
+  <?php echo background_css ( $GLOBALS['CELLBG'], 200 ); ?>
+  font-size: 12px;
+}
+.cookies {
+  font-size: 13px;
+}
+.standard th {
+  color: <?php echo $GLOBALS['THFG']; ?>;
+  <?php echo background_css ( $GLOBALS['THBG'], 100 ); ?>
+  font-size: 18px;
+  padding: 0px;
+  border-bottom: 1px solid <?php echo $GLOBALS['TABLEBG']; ?>;
+}
+abbr {
+  cursor: help;
+}
+-->
+</style>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/trailer.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/trailer.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/trailer.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,441 @@
+<?php
+
+if ( empty ( $PHP_SELF ) && ! empty ( $_SERVER ) &&
+  ! empty ( $_SERVER['PHP_SELF'] ) ) {
+  $PHP_SELF = $_SERVER['PHP_SELF'];
+}
+if ( ! empty ( $PHP_SELF ) && preg_match ( "/\/includes\//", $PHP_SELF ) ) {
+    die ( "You can't access this file directly!" );
+}
+
+// NOTE: This file is included within the print_trailer function found
+// in includes/init.php.  If you add a global variable somewhere in this
+// file, be sure to declare it global in the print_trialer function
+// or use $GLOBALS[].
+?>
+
+<div id="trailer">
+<form action="month.php" method="get" name="SelectMonth" id="monthform">
+<?php
+  if ( ! empty ( $user ) && $user != $login ) {
+    echo "<input type=\"hidden\" name=\"user\" value=\"$user\" />\n";
+  }
+  if ( ! empty ( $cat_id ) && $categories_enabled == "Y"
+    && ( ! $user || $user == $login ) ) {
+    echo "<input type=\"hidden\" name=\"cat_id\" value=\"$cat_id\" />\n";
+  }
+?>
+<label for="monthselect"><?php etranslate("Month")?>: </label>
+<select name="date" id="monthselect" onchange="document.SelectMonth.submit()">
+<?php
+  if ( ! empty ( $thisyear ) && ! empty ( $thismonth ) ) {
+    $m = $thismonth;
+    $y = $thisyear;
+  } else {
+    $m = date ( "m" );
+    $y = date ( "Y" );
+  }
+  $d_time = mktime ( 3, 0, 0, $m, 1, $y );
+  $thisdate = date ( "Ymd", $d_time );
+  $y--;
+  for ( $i = 0; $i < 25; $i++ ) {
+    $m++;
+    if ( $m > 12 ) {
+      $m = 1;
+      $y++;
+    }
+    $d = mktime ( 3, 0, 0, $m, 1, $y );
+    echo "<option value=\"" . date ( "Ymd", $d ) . "\"";
+    if ( date ( "Ymd", $d ) == $thisdate ) {
+      echo " selected=\"selected\"";
+    }
+    echo ">";
+    echo date_to_str ( date ( "Ymd", $d ), $DATE_FORMAT_MY, false, true );
+    echo "</option>\n";
+  }
+?>
+</select>
+<input type="submit" value="<?php etranslate("Go")?>" />
+</form>
+
+<form action="week.php" method="get" name="SelectWeek" id="weekform">
+<?php
+  if ( ! empty ( $user ) && $user != $login ) {
+    echo "<input type=\"hidden\" name=\"user\" value=\"$user\" />\n";
+  }
+  if ( ! empty ( $cat_id ) && $categories_enabled == "Y"
+    && ( ! $user || $user == $login ) ) {
+    echo "<input type=\"hidden\" name=\"cat_id\" value=\"$cat_id\" />\n";
+  }
+?>
+<label for="weekselect"><?php etranslate("Week")?>: </label>
+<select name="date" id="weekselect" onchange="document.SelectWeek.submit()">
+<?php
+  if ( ! empty ( $thisyear ) && ! empty ( $thismonth ) ) {
+    $m = $thismonth;
+    $y = $thisyear;
+  } else {
+    $m = date ( "m" );
+    $y = date ( "Y" );
+  }
+  if ( ! empty ( $thisday ) ) {
+    $d = $thisday;
+  } else {
+    $d = date ( "d" );
+  }
+  $d_time = mktime ( 3, 0, 0, $m, $d, $y );
+  $thisdate = date ( "Ymd", $d_time );
+  $wday = date ( "w", $d_time );
+  // $WEEK_START equals 1 or 0 
+  $wkstart = mktime ( 3, 0, 0, $m, $d - ( $wday - $WEEK_START ), $y );
+
+  for ( $i = -7; $i <= 7; $i++ ) {
+    $twkstart = $wkstart + ( 3600 * 24 * 7 * $i );
+    $twkend = $twkstart + ( 3600 * 24 * 6 );
+    echo "<option value=\"" . date ( "Ymd", $twkstart ) . "\"";
+    if ( date ( "Ymd", $twkstart ) <= $thisdate &&
+      date ( "Ymd", $twkend ) >= $thisdate ) {
+      echo " selected=\"selected\"";
+    }
+    echo ">";
+    if ( ! empty ( $GLOBALS['PULLDOWN_WEEKNUMBER'] ) && $GLOBALS['PULLDOWN_WEEKNUMBER'] = "Y" ) {
+      echo  "(" . week_number ( $twkstart ) . ")  ";
+    }
+    printf ( "%s - %s",
+      date_to_str ( date ( "Ymd", $twkstart ), $DATE_FORMAT_MD, false, true ),
+      date_to_str ( date ( "Ymd", $twkend ), $DATE_FORMAT_MD, false, true ) );
+    echo "</option>\n";
+  }
+?>
+</select>
+<input type="submit" value="<?php etranslate("Go")?>" />
+</form>
+
+<form action="year.php" method="get" name="SelectYear" id="yearform">
+<?php
+  if ( ! empty ( $user ) && $user != $login ) {
+    echo "<input type=\"hidden\" name=\"user\" value=\"$user\" />\n";
+  }
+  if ( ! empty ( $cat_id ) && $categories_enabled == "Y"
+    && ( ! $user || $user == $login ) ) {
+    echo "<input type=\"hidden\" name=\"cat_id\" value=\"$cat_id\" />\n";
+  }
+?>
+<label for="yearselect"><?php etranslate("Year")?>: </label>
+<select name="year" id="yearselect" onchange="document.SelectYear.submit()">
+<?php
+  if ( ! empty ( $thisyear ) ) {
+    $y = $thisyear;
+  } else {
+    $y = date ( "Y" );
+  }
+  for ( $i = $y - 4; $i < $y + 4; $i++ ) {
+    echo "<option value=\"$i\"";
+    if ( $i == $y ) {
+      echo " selected=\"selected\"";
+    }
+    echo ">$i</option>\n";
+  }
+?>
+</select>
+<input type="submit" value="<?php etranslate("Go")?>" />
+</form>
+<div id="menu">
+
+<?php
+$goto_link = array ( );
+$views_link = array ( );
+$reports_link = array ( );
+$manage_calendar_link = array ( );
+
+// Go To links
+$can_add = ( $readonly == "N" );
+if ( $public_access == "Y" && $public_access_can_add != "Y" &&
+  $login == "__public__" ) {
+  $can_add = false;
+}
+
+if ( ! empty ( $GLOBALS['STARTVIEW'] ) ) {
+  $mycal = $GLOBALS['STARTVIEW'];
+} else {
+  $mycal = "index.php";
+}
+
+// calc URL to today
+$todayURL = 'month.php';
+$reqURI = 'month.php';
+if ( ! empty ( $GLOBALS['SCRIPT_NAME'] ) ) {
+  $reqURI = $GLOBALS['SCRIPT_NAME'];
+} else if ( ! empty ( $_SERVER['SCRIPT_NAME'] ) ) {
+  $reqURI = $_SERVER['SCRIPT_NAME'];
+}
+if ( ! strstr ( $reqURI, "month.php" ) &&
+   ! strstr ( $reqURI, "week.php" ) &&
+   ! strstr ( $reqURI, "day.php" ) ) {
+  $todayURL = 'day.php';
+} else {
+  $todayURL = $reqURI;
+}
+
+if ( $single_user != "Y" ) {
+  if ( ! empty ( $user ) && $user != $login ) {
+   /* $goto_link[] = "<a title=\"" . 
+      translate("My Calendar") . "\" style=\"font-weight:bold;\" " .
+      "href=\"$mycal\">" . 
+      translate("Back to My Calendar") . "</a>";
+      */
+  } else {
+  	/*
+    $goto_link[] = "<a title=\"" . 
+      translate("My Calendar") . "\" style=\"font-weight:bold;\" " .
+      "href=\"$mycal\">" . 
+      translate("My Calendar") . "</a>";
+      */
+  }
+  if ( ! empty ( $user ) && $user != $login ) {
+    $todayURL .= '?user=' . $user;
+  }
+  /*
+  $goto_link[] = "<a title=\"" . 
+    translate("Today") . "\" style=\"font-weight:bold;\" " .
+    "href=\"$todayURL\">" . 
+    translate("Today") . "</a>";
+    */
+  if ( $login != '__public__' && $readonly == 'N' ) {
+    $goto_link[] = "<a title=\"" . 
+      translate("Admin") . "\" style=\"font-weight:bold;\" " .
+      "href=\"adminhome.php\">" . 
+      translate("Admin") . "</a>";
+  }
+  if ( $login != "__public__" && $readonly == "N" &&
+    ( $require_approvals == "Y" || $public_access == "Y" ) ) {
+    $url = 'list_unapproved.php';
+    if ($is_nonuser_admin) {
+      $url .= "?user=$user";
+    }
+    $goto_link[] = "<a title=\"" . 
+      translate("Unapproved Events") . "\" href=\"$url\">" . 
+      translate("Unapproved Events") . "</a>";
+  }
+  if ( $login == "__public__" && $public_access_others != "Y" ) {
+    // don't allow them to see other people's calendar
+  } else if ( $allow_view_other == "Y" || $is_admin ) {
+   /*
+    $goto_link[] = "<a title=\"" . 
+    translate("Another User's Calendar") . "\" href=\"select_user.php\">" . 
+    translate("Another User's Calendar") . "</a>";
+      */ 
+  } 
+} else {
+  $goto_link[] = "<a title=\"" . 
+    translate("My Calendar") . "\" style=\"font-weight:bold;\" " .
+    "href=\"$mycal\">" . 
+    translate("My Calendar") . "</a>";
+  $goto_link[] = "<a title=\"" . 
+    translate("Today") . "\" style=\"font-weight:bold;\" " .
+    "href=\"$todayURL\">" . 
+    translate("Today") . "</a>";
+  if ( $readonly == 'N' ) {
+    $goto_link[] = "<a title=\"" . 
+      translate("Admin") . "\" style=\"font-weight:bold;\" " .
+      "href=\"adminhome.php\">" . 
+      translate("Admin") . "</a>";
+  }
+}
+// only display some links if we're viewing our own calendar.
+if ( empty ( $user ) || $user == $login ) {
+  $goto_link[] = "<a title=\"" . 
+    translate("Search") . "\" href=\"search.php\">" .
+    translate("Search") . "</a>";
+  if ( $login != '__public__' ) {
+    $goto_link[] = "<a title=\"" . 
+      translate("Import") . "\" href=\"import.php\">" . 
+      translate("Import") . "</a>";
+    $goto_link[] = "<a title=\"" . 
+      translate("Export") . "\" href=\"export.php\">" . 
+      translate("Export") . "</a>";
+  }
+  if ( $can_add ) {
+    $url = "<a title=\"" . 
+      translate("Add New Entry") . "\" href=\"edit_entry.php";
+    if ( ! empty ( $thisyear ) ) {
+      $url .= "?year=$thisyear";
+      if ( ! empty ( $thismonth ) ) {
+        $url .= "&month=$thismonth";
+      }
+      if ( ! empty ( $thisday ) ) {
+        $url .= "&day=$thisday";
+      }
+    }
+    $url .= "\">" . translate("Add New Entry") . "</a>";
+    $goto_link[] = $url;
+  }
+}
+if ( $login != '__public__' ) {
+	/*
+  $goto_link[] = "<a title=\"" . 
+    translate("Help") . "\" href=\"#\" onclick=\"window.open " .
+    "( 'help_index.php', 'cal_help', 'dependent,menubar,scrollbars, " .
+    "height=400,width=400,innerHeight=420,outerWidth=420' );\"  " .
+    "onmouseover=\"window.status='" . 
+    translate("Help") . "'\">" . 
+    translate("Help") . "</a>";
+    */
+}
+
+if ( count ( $goto_link ) > 0 ) {
+  ?><span class="prefix"><?php etranslate("Go to")?>:</span> <?php
+  for ( $i = 0; $i < count ( $goto_link ); $i++ ) {
+    if ( $i > 0 )
+      echo " | ";
+    echo $goto_link[$i];
+  }
+}
+?>
+
+<!-- VIEWS -->
+<?php
+if ( ( $is_admin || $allow_view_other != "N" ) && count ( $views ) > 0 ) {
+  for ( $i = 0; $i < count ( $views ); $i++ ) {
+    $out = "<a title=\"" .
+      htmlspecialchars ( $views[$i]['cal_name'] ) .
+      "\" href=\"";
+    $out .= $views[$i]['url'];
+    if ( ! empty ( $thisdate ) )
+      $out .= "&date=$thisdate";
+    $out .= "\">" .
+      htmlspecialchars ( $views[$i]['cal_name'] ) . "</a>\n";
+    $views_link[] = $out;
+  }
+}
+/*
+if ( count ( $views_link ) > 0 ) {
+  ?><br /><span class="prefix"><?php etranslate("Views")?>:</span> <?php
+  for ( $i = 0; $i < count ( $views_link ); $i++ ) {
+    if ( $i > 0 )
+      echo " | ";
+    echo $views_link[$i];
+  }
+}*/
+?>
+
+<!-- REPORTS -->
+<?php
+$reports_link = array ();
+if ( ! empty ( $reports_enabled ) && $reports_enabled == 'Y' ) {
+  if ( ! empty ( $user ) && $user != $login ) {
+    $u_url = "&user=$user";
+  } else {
+    $u_url = "";
+  }
+  $res = dbi_query ( "SELECT cal_report_name, cal_report_id " .
+    "FROM webcal_report " .
+    "WHERE cal_login = '$login' OR " .
+    "( cal_is_global = 'Y' AND cal_show_in_trailer = 'Y' ) " .
+    "ORDER BY cal_report_id" );
+  if ( $res ) {
+    while ( $row = dbi_fetch_row ( $res ) ) {
+      $reports_link[] = "<a title=\"" . 
+        htmlspecialchars ( $row[0] ) . 
+        "\" href=\"report.php?report_id=$row[1]$u_url\">" . 
+        htmlspecialchars ( $row[0] ) . "</a>";
+    }
+    dbi_free_result ( $res );
+  }
+/*
+  if ( count ( $reports_link ) > 0 ) {
+    ?><br/><span class="prefix"><?php etranslate("Reports");?>:</span> <?php
+    for ( $i = 0; $i < count ( $reports_link ); $i++ ) {
+      if ( $i > 0 )
+        echo " | ";
+      echo $reports_link[$i];
+    }
+  } */
+}
+?>
+
+<!-- CURRENT USER -->
+<br />
+<?php
+if ( ! $use_http_auth ) {
+ if ( empty ( $login_return_path ) )
+  $login_url = "login.php";
+ else
+  $login_url = "login.php?return_path=$login_return_path";
+
+  // Should we use another application's login/logout pages?
+  if ( substr ( $GLOBALS['user_inc'], 0, 9 ) == 'user-app-' ) {  
+    if ( strlen ( $login ) && $login != "__public__" ) {
+      $login_url = $GLOBALS['app_logout_page'];
+    } else {
+      if ($login_return_path != '' && $GLOBALS['app_redir_param'] != '') {
+        $GLOBALS['app_login_page'] .= '?'. $GLOBALS['app_redir_param'] .
+          '=' . $login_return_path;
+      } 
+      $login_url = $GLOBALS['app_login_page'];
+    }
+  }  
+    /*
+ if ( strlen ( $login ) && $login != "__public__" ) {
+  echo "<span class=\"prefix\">" .
+   translate("Current User") . ":</span> $fullname (<a title=\"" . 
+   translate("Logout") . "\" href=\"$login_url\">" . 
+   translate("Logout") . "</a>)\n";
+ } else {
+  echo "<span class=\"prefix\">" .
+   translate("Current User") . ":</span> " . 
+   translate("Public Access") . " (<a title=\"" . 
+   translate("Login") . "\" href=\"$login_url\">" . 
+   translate("Login") . "</a>)\n";
+ }
+ */
+}
+
+// Manage Calendar links
+if ( ! empty ( $nonuser_enabled ) && $nonuser_enabled == "Y" )
+  $admincals = get_nonuser_cals ( $login );
+if ( $has_boss || ! empty ( $admincals[0] ) ||
+  ( $is_admin && $public_access ) ) {
+  $grouplist = user_get_boss_list ( $login );
+  if ( ! empty ( $admincals[0] ) ) {
+    $grouplist = array_merge ( $admincals, $grouplist );
+  }
+  if ( $is_admin && $public_access == 'Y' ) {
+    $public = array (
+      "cal_login" => "__public__",
+      "cal_fullname" => translate ( "Public Access" )
+    );
+    array_unshift ( $grouplist, $public );
+  }
+  $groups = "";
+  for ( $i = 0; $i < count ( $grouplist ); $i++ ) {
+    $l = $grouplist[$i]['cal_login'];
+    $f = $grouplist[$i]['cal_fullname'];
+    // Use the preferred view if it is day/week/month/year.php.  Do
+    // not use a user-created view because it might not display the
+    // proper user's events.  (Fallback to month.php if this is true.)
+    $xurl = get_preferred_view ( "", "user=$l" );
+    if ( strstr ( $xurl, "view_" ) ) {
+      $xurl = "month.php?user=$l";
+    }
+    if ( $i > 0 )
+      $groups .= ", ";
+    $groups .= "<a title=\"$f\" href=\"$xurl\">$f</a>";
+  }
+  if ( ! empty ( $groups ) ) {
+  	/*
+    echo "<br/><span class=\"prefix\">";
+    etranslate ( "Manage calendar of" );
+    echo ":</span> " . $groups;
+    */
+  }
+}
+
+// WebCalendar Info...
+print "<br/><br/><a title=\"" . $GLOBALS['PROGRAM_NAME'] . "\" " .
+  "id=\"programname\" href=\"$GLOBALS[PROGRAM_URL]\" target=\"_new\">" .
+  $GLOBALS['PROGRAM_NAME'] . "</a>\n";
+?>
+</div>
+</div>
+<!-- /TRAILER -->

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/translate.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/translate.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/translate.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,199 @@
+<?php
+/**
+ * Language translation functions.
+ *
+ * The idea is very much stolen from the GNU translate C library.
+ *
+ * Although there is a PHP gettext() function, I prefer to use this home-grown
+ * translate function since it is simpler to work with.
+ *
+ * @version $Id: translate.php,v 1.15 2005/03/08 14:24:51 umcesrjones Exp $
+ * @package WebCalendar
+ */
+
+
+if ( empty ( $PHP_SELF ) && ! empty ( $_SERVER ) &&
+  ! empty ( $_SERVER['PHP_SELF'] ) ) {
+  $PHP_SELF = $_SERVER['PHP_SELF'];
+}
+if ( ! empty ( $PHP_SELF ) && preg_match ( "/\/includes\//", $PHP_SELF ) ) {
+  die ( "You can't access this file directly!" );
+}
+
+
+if ( empty ( $LANGUAGE ) ) {
+  $LANGUAGE = '';
+}
+
+// If set to use browser settings, use the user's language preferences
+// from their browser.
+$lang = $LANGUAGE;
+if ( $LANGUAGE == "Browser-defined" || $LANGUAGE == "none" ) {
+  $lang = get_browser_language ();
+  if ( $lang == "none" )
+    $lang = "";
+}
+if ( strlen ( $lang ) == 0 || $lang == 'none' ) {
+  $lang = "English-US"; // Default
+}
+
+$lang_file = "translations/" . $lang . ".txt";
+
+$translation_loaded = false;
+
+$PUBLIC_ACCESS_FULLNAME = "Public Access"; // default
+
+
+/**
+ * Unloads translations so we can switch languages and translate into a
+ * different language.
+ *
+ * @param string $new_language New language file to load (just the base
+ *                             filename, no directory or file suffix.  Example:
+ *                             "French")
+ */
+function reset_language ( $new_language ) {
+  global $lang_file, $translations, $basedir, $lang, $translation_loaded;
+
+  if ( $new_language != $lang || ! $translation_loaded ) {
+    $translations = array ();
+    $lang = $new_language;
+    $lang_file = "translations/" . $lang . ".txt";
+    load_translation_text ();
+    $translation_loaded = true;
+  }
+}
+
+
+
+/**
+ * Loads all the language translation into an array for quick lookup.
+ *
+ * <b>Note:</b> There is no need to call this manually.  It will be invoked by
+ * {@link translate()} the first time it is called.
+ */
+function load_translation_text () {
+  global $lang_file, $translations, $basedir, $PUBLIC_ACCESS_FULLNAME, $fullname;
+  $translations = array ();
+  if ( strlen ( $basedir ) ) {
+    $lang_file_2 = "$basedir/$lang_file";
+    if ( file_exists ( $lang_file_2 ) )
+      $lang_file = $lang_file_2;
+  }
+  if ( ! file_exists ( $lang_file ) ) {
+    die_miserable_death ( "Cannot find language file: $lang_file" );
+  }
+  $fp = fopen ( $lang_file, "r" );
+  if ( ! $fp ) {
+    die_miserable_death ( "Could not open language file: $lang_file" );
+  }
+  while ( ! feof ( $fp ) ) {
+    $buffer = fgets ( $fp, 4096 );
+    $buffer = trim ( $buffer );
+    //  stripslashes may cause problems with Japanese translations
+   // if so, we may have to make this configurable.
+    if ( get_magic_quotes_runtime() ) {
+      $buffer = stripslashes ( $buffer );
+    }
+    if ( substr ( $buffer, 0, 1 ) == "#" || strlen ( $buffer ) == 0 )
+      continue;
+    $pos = strpos ( $buffer, ":" );
+    $abbrev = substr ( $buffer, 0, $pos );
+    $abbrev = trim ( $abbrev );
+    $trans = substr ( $buffer, $pos + 1 );
+    $trans = trim ( $trans );
+    $translations[$abbrev] = $trans;
+    //echo "Abbrev: $abbrev<br />Trans: $trans<br />\n";
+  }
+  fclose ( $fp );
+  $PUBLIC_ACCESS_FULLNAME = translate ("Public Access" );
+  if ( $fullname == "Public Access" ) {
+    $fullname = $PUBLIC_ACCESS_FULLNAME;
+  }
+}
+
+
+
+/**
+ * Translates a string from the default English usage to some other language.
+ *
+ * The first time that this is called, the translation file will be loaded
+ * (with {@link load_translation_text()}).
+ *
+ * @param string $str Text to translate
+ *
+ * @return string The translated text, if available.  If no translation is
+ *                avalailable, then the original untranslated text is returned.
+ */
+function translate ( $str ) {
+  global $translations, $translation_loaded;
+
+  if ( ! $translation_loaded ) {
+    $translation_loaded = true;
+    load_translation_text ();
+  }
+
+  $str = trim ( $str );
+  if ( ! empty ( $translations[$str] ) )
+    return $translations[$str];
+  else {
+    // To help in translating, use the following to help identify text that
+    // has not been translated
+    // return "<blink>$str</blink>";
+    return $str;
+  }
+}
+
+
+
+/**
+ * Translates text and prints it.
+ *
+ * This is just an abbreviation for:
+ *
+ * <code>echo translate ( $str )</code>
+ *
+ * @param string $str Text to translate and print
+ *
+ * @uses translate
+ */
+function etranslate ( $str ) {
+  echo translate ( $str );
+}
+
+/**
+ * Translates and removes HTML from text, and returns it.
+ *
+ * This is useful for tooltips, which barf on HTML.
+ *
+ * <b>Note:</b> {@link etooltip()} will print the result rather than return the
+ * value.
+ *
+ * @param string $str Text to translate
+ *
+ * @return string The translated text with all HTML removed
+ */
+function tooltip ( $str ) {
+  $ret = translate ( $str );
+  $ret = eregi_replace ( "<[^>]+>", "", $ret );
+  $ret = eregi_replace ( "\"", "'", $ret );
+  return $ret;
+}
+
+/**
+ * Translates and removes HTML from text, and prints it.
+ *
+ * This is useful for tooltips, which barf on HTML.
+ *
+ * <b>Note:</b> {@link tooltip()} will return the result rather than print
+ * the value.
+ *
+ * @param string $str Text to translate and print
+ *
+ * @uses tooltip
+ */
+function etooltip ( $str ) {
+  echo tooltip ( $str );
+}
+
+?>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/user-app-postnuke.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/user-app-postnuke.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/user-app-postnuke.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,339 @@
+<?php
+
+if ( empty ( $PHP_SELF ) && ! empty ( $_SERVER ) &&
+  ! empty ( $_SERVER['PHP_SELF'] ) ) {
+  $PHP_SELF = $_SERVER['PHP_SELF'];
+}
+if ( ! empty ( $PHP_SELF ) && preg_match ( "/\/includes\//", $PHP_SELF ) ) {
+    die ( "You can't access this file directly!" );
+}
+
+// This file contains all the functions for getting information
+// about users from PostNuke 0.7.2x.
+
+// Reference to the application means the external application (postnuke)
+
+// user-app-*.php auth files assume the following:
+//   - login ids are unique within the application
+//   - user administration is done through the application
+
+// The following functions had to be configured to work with the application:
+// - user_logged_in (returns login id if true)
+// - get_admins (returns an array of admin login ids)
+// - user_get_users (returns array of users)
+// - user_load_variables (loads info about a user)
+
+/************************* Config ***********************************/
+
+//------ Postnuke Specific Settings ------//
+// PostNuke session id cookie
+$pn_sid = 'POSTNUKESID';
+
+// Name of table containing users
+$pn_user_table = 'nuke_users';
+
+// Name of table containing sessions
+$pn_session_table = 'nuke_session_info';
+
+// Name of table containing group memberships
+$pn_group_table = 'nuke_group_membership';
+
+// Name of table containing settings
+$pn_settings_table = 'nuke_module_vars';
+
+// Set the group id of the postnuke group you want to be webcal admins.
+// Default is set to the postnuke 'Admins' group
+$pn_admin_gid = '2';
+
+
+//------ General Application Settings ------//
+// What is the full URL to the login page (including http:// or https://)
+$app_login_page = 'http://www.mysite.com/postnuke/html/user.php?op=loginscreen&module=NS-User'; 
+
+// Is there a parameter we can pass to tell the application to
+// redirect the user back to the calendar after login?
+$app_redir_param = 'url';  // postnuke uses 'url'
+
+// What is the full URL to the logout page (including http:// or https://)
+$app_logout_page = 'http://www.mysite.com/postnuke/html/user.php?module=NS-User&op=logout'; 
+
+// Are the application's tables in the same database as webcalendar's?
+$app_same_db = '0';  // 1 = yes, 0 = no
+ 
+// Only need configure the rest if $app_same_db != 1
+
+ // Name of database containing the app's tables
+$app_db = 'postnuke';
+
+// Host that the app's db is on
+$app_host = 'localhost';
+
+// Login/Password to access the app's database
+$app_login = 'pnuser';
+$app_pass  = 'pnpassword';
+
+/*************************** End Config *****************************/
+
+
+// User administration should be done through the aplication's interface
+$user_can_update_password = false;
+$admin_can_add_user = false;
+$admin_can_delete_user = false;
+
+
+// Checks to see if the user is logged into the application
+// returns: login id
+function user_logged_in() {
+  global $pn_sid, $_COOKIE;
+  
+  // First check to see if the user even has a session cookie
+  if (empty($_COOKIE[$pn_sid])) return false;
+  
+  // Check to see if the session is still valid
+  if (! $login = pn_active_session($_COOKIE[$pn_sid]) ) return false;
+
+  // Update the session last access time
+  pn_update_session($_COOKIE[$pn_sid]);
+
+  return $login;
+}
+
+
+//  Checks to see if the session has a user associated with it and 
+//  if the session is timed out 
+//  returns: login id
+function pn_active_session($sid) {
+  global $pn_user_table, $pn_session_table, $pn_settings_table;
+  global $app_host, $app_login, $app_pass, $app_db, $app_same_db;
+  global $c, $db_host, $db_login, $db_password, $db_database;
+
+  // if postnuke is in a separate db, we have to connect to it
+  if ($app_same_db != '1') $c = dbi_connect($app_host, $app_login, $app_pass, $app_db);
+
+  // get login and last access time
+  $sql = "SELECT pn_uname, pn_lastused FROM $pn_user_table, $pn_session_table  WHERE pn_sessid = '$sid' ".
+  "AND $pn_session_table.pn_uid <> 0 AND $pn_session_table.pn_uid=$pn_user_table.pn_uid ";
+  $res = dbi_query ( $sql );
+  if ( $res ) {
+    while ( $row = dbi_fetch_row ( $res ) ) {
+      $login = $row[0];
+      $last = $row[1];
+    }
+    dbi_free_result ( $res );
+  }
+
+  // Get inactive session time limit and see if we have passed it
+  $sql = "SELECT pn_value FROM $pn_settings_table WHERE pn_modname = '/PNConfig' AND pn_name = 'secinactivemins'";
+  $res = dbi_query ( $sql );
+  if ( $res ) {
+    while ( $row = dbi_fetch_row ( $res ) ) {
+      $tmp = explode('"', $row[0]);
+      if (($tmp[1] > 0) && ($tmp[1] < ((time() - $last) / 60))) return false;
+    }
+    dbi_free_result ( $res );
+  }
+
+  // if postnuke is in a separate db, we have to connect back to the webcal db
+  if ($app_same_db != '1') $c = dbi_connect($db_host, $db_login, $db_password, $db_database);
+
+  return $login;
+}
+
+
+//  Updates the session table to set the last access time to now 
+function pn_update_session($sid) {
+  global $pn_session_table;
+  global $app_host, $app_login, $app_pass, $app_db, $app_same_db;
+  global $c, $db_host, $db_login, $db_password, $db_database;
+
+  // if postnuke is in a separate db, we have to connect to it
+  if ($app_same_db != '1') $c = dbi_connect($app_host, $app_login, $app_pass, $app_db);
+
+  // get login and last access time
+  $sql = "UPDATE $pn_session_table  SET pn_lastused = '".time()."' WHERE pn_sessid = '$sid' ";
+  dbi_query ( $sql );
+
+  // if postnuke is in a separate db, we have to connect back to the webcal db
+  if ($app_same_db != '1') $c = dbi_connect($db_host, $db_login, $db_password, $db_database);
+
+  return true;
+}
+
+
+// Searches postnuke database for $pn_admin_gid and returns an array of the group members.
+// Do this search only once per request.
+// returns: array of admin ids
+function get_admins() {
+  global $cached_admins, $pn_group_table, $pn_admin_gid;
+  global $app_host, $app_login, $app_pass, $app_db, $app_same_db;
+  global $c, $db_host, $db_login, $db_password, $db_database;
+
+  if ( ! empty ( $cached_admins ) ) return $cached_admins;
+  $cached_admins = array ();
+
+  // if postnuke is in a separate db, we have to connect to it
+  if ($app_same_db != '1') $c = dbi_connect($app_host, $app_login, $app_pass, $app_db);
+
+  $sql = "SELECT pn_uid FROM $pn_group_table WHERE pn_gid = $pn_admin_gid && pn_uid <> 2";
+  $res = dbi_query ( $sql );
+  if ( $res ) {
+    while ( $row = dbi_fetch_row ( $res ) ) {
+      $cached_admins[] = $row[0];
+    }
+  }
+
+  // if postnuke is in a separate db, we have to connect back to the webcal db
+  if ($app_same_db != '1') $c = dbi_connect($db_host, $db_login, $db_password, $db_database);
+
+  return $cached_admins;
+}
+
+
+/// Get a list of users and return info in an array.
+// returns: array of users
+function user_get_users () {
+  global $public_access, $PUBLIC_ACCESS_FULLNAME, $pn_user_table;
+  global $app_host, $app_login, $app_pass, $app_db, $app_same_db;
+  global $c, $db_host, $db_login, $db_password, $db_database;
+
+  $Admins = get_admins();
+  $count = 0;
+  $ret = array ();
+  if ( $public_access == "Y" )
+    $ret[$count++] = array (
+       "cal_login" => "__public__",
+       "cal_lastname" => "",
+       "cal_firstname" => "",
+       "cal_is_admin" => "N",
+       "cal_email" => "",
+       "cal_password" => "",
+       "cal_fullname" => $PUBLIC_ACCESS_FULLNAME );
+
+  // if postnuke is in a separate db, we have to connect to it
+  if ($app_same_db != '1') $c = dbi_connect($app_host, $app_login, $app_pass, $app_db);
+
+  $sql = "SELECT pn_uid, pn_name, pn_uname, pn_email FROM $pn_user_table WHERE pn_uid <> 1 && pn_uid <> 2 ORDER BY pn_name";
+  $res = dbi_query ( $sql );
+  if ( $res ) {
+    while ( $row = dbi_fetch_row ( $res ) ) {
+      list($fname, $lname) = split (" ",$row[1]);
+      $ret[$count++] = array (
+        "cal_login" => $row[2],
+        "cal_lastname" => $lname,
+        "cal_firstname" => $fname,
+        "cal_is_admin" => user_is_admin($row[0],$Admins),
+        "cal_email" => $row[3],
+        "cal_fullname" => $row[1]
+      );
+    }
+    dbi_free_result ( $res );
+  }
+  // if postnuke is in a separate db, we have to connect back to the webcal db
+  if ($app_same_db != '1') $c = dbi_connect($db_host, $db_login, $db_password, $db_database);
+
+  return $ret;
+}
+
+
+// Load info about a user (first name, last name, admin) and set globally.
+// params:
+//   $user - user login
+//   $prefix - variable prefix to use
+function user_load_variables ( $login, $prefix ) {
+  global $PUBLIC_ACCESS_FULLNAME, $NONUSER_PREFIX;
+  global $app_host, $app_login, $app_pass, $app_db, $pn_user_table;
+  global $c, $db_host, $db_login, $db_password, $db_database, $app_same_db;
+  
+  if ($NONUSER_PREFIX && substr($login, 0, strlen($NONUSER_PREFIX) ) == $NONUSER_PREFIX) {
+    nonuser_load_variables ( $login, $prefix );
+    return true;
+  }
+  
+  if ( $login == "__public__" ) {
+    $GLOBALS[$prefix . "login"] = $login;
+    $GLOBALS[$prefix . "firstname"] = "";
+    $GLOBALS[$prefix . "lastname"] = "";
+    $GLOBALS[$prefix . "is_admin"] = "N";
+    $GLOBALS[$prefix . "email"] = "";
+    $GLOBALS[$prefix . "fullname"] = $PUBLIC_ACCESS_FULLNAME;
+    $GLOBALS[$prefix . "password"] = "";
+    return true;
+  }
+
+  // if postnuke is in a separate db, we have to connect to it
+  if ($app_same_db != '1') $c = dbi_connect($app_host, $app_login, $app_pass, $app_db);
+  
+  $sql = "SELECT pn_uid, pn_name, pn_uname, pn_email FROM $pn_user_table WHERE pn_uname = '$login'";
+
+  $res = dbi_query ( $sql );
+  if ( $res ) {
+    if ( $row = dbi_fetch_row ( $res ) ) {
+      list($fname, $lname) = split (" ",$row[1]);
+      $GLOBALS[$prefix . "login"] = $login;
+      $GLOBALS[$prefix . "firstname"] = $fname;
+      $GLOBALS[$prefix . "lastname"] = $lname;
+      $GLOBALS[$prefix . "is_admin"] = user_is_admin($row[0],get_admins());
+      $GLOBALS[$prefix . "email"] = $row[3];
+      $GLOBALS[$prefix . "fullname"] = $row[1];
+    }
+    dbi_free_result ( $res );
+  } else {
+    $error = "Database error: " . dbi_error ();
+    return false;
+  }
+
+  // if postnuke is in a separate db, we have to connect back to the webcal db
+  if ($app_same_db != '1') $c = dbi_connect($db_host, $db_login, $db_password, $db_database);
+
+  return true;
+}
+
+// Redirect the user to the application's login screen
+function app_login_screen($return_path = 'index.php') {
+  global $app_login_page, $app_redir_param;
+  
+  if ($return_path != '' && $app_redir_param != '') {
+    if (strstr($app_login_page, '?')) {
+      $app_login_page .= '&'.$app_redir_param.'='.$return_path;
+    } else {
+      $app_login_page .= '?'.$app_redir_param.'='.$return_path;
+    }
+  } 
+  header("Location: $app_login_page");
+  exit;
+}
+
+
+// Test if a user is an admin, that is: if the user is a member of a special
+// group in the postnuke database
+// params:
+//   $values - the login name
+// returns: Y if user is admin, N if not
+function user_is_admin($uid,$Admins) {
+  if ( ! $Admins ) {
+    return "N";
+  } else if (in_array ($uid, $Admins)) {
+    return "Y";
+  } else {
+    return "N";
+  }
+}
+
+// Functions we don't use with this file:
+function user_update_user ( $user, $firstname, $lastname, $email, $admin ) {
+  global $error;
+  $error = 'User admin not supported.'; return false;
+}
+function user_update_user_password ( $user, $password ) {
+  global $error;
+  $error = 'User admin not supported.'; return false;
+}
+function user_delete_user ( $user ) {
+  global $error;
+  $error = 'User admin not supported.'; return false;
+}
+function user_add_user ( $user, $password, $firstname, $lastname, $email, $admin ) {
+  global $error;
+  $error = 'User admin not supported.'; return false;
+}
+?>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/user-ldap.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/user-ldap.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/user-ldap.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,426 @@
+<?php
+if ( empty ( $PHP_SELF ) && ! empty ( $_SERVER ) &&
+  ! empty ( $_SERVER['PHP_SELF'] ) ) {
+  $PHP_SELF = $_SERVER['PHP_SELF'];
+}
+if ( ! empty ( $PHP_SELF ) && preg_match ( "/\/includes\//", $PHP_SELF ) ) {
+    die ( "You can't access this file directly!" );
+}
+
+// LDAP user functions.
+// This file is intended to be used instead of the standard user.php
+// file.  I have not tested this yet (I do not have an LDAP server
+// running yet), so please provide feedback.
+//
+// This file contains all the functions for getting information
+// about users.  So, if you want to use an authentication scheme
+// other than the webcal_user table, you can just create a new
+// version of each function found below.
+//
+// Note: this application assumes that usernames (logins) are unique.
+//
+// Note #2: If you are using HTTP-based authentication, then you still
+// need these functions and you will still need to add users to
+// webcal_user.
+
+
+/***************************** Config *******************************/
+// Set some global config variables about your system.
+// Next three are NOT yet implemented for LDAP
+$user_can_update_password = false;
+$admin_can_add_user = false;
+$admin_can_delete_user = false;
+
+
+//------ LDAP General Server Settings ------//
+//
+// Name or address of the LDAP server 
+//  For SSL/TLS use 'ldaps://localhost'
+$ldap_server = 'localhost';          
+
+// Port LDAP listens on (default 389)        
+$ldap_port = '389';                   
+
+// Use TLS for the connection (not the same as ldaps://)
+$ldap_start_tls = false;
+
+// If you need to set LDAP_OPT_PROTOCOL_VERSION
+$set_ldap_version = false;
+$ldap_version = '3'; // (usually 3)
+
+// base DN to search for users      
+$ldap_base_dn = 'ou=people,dc=company,dc=com';
+
+// The ldap attribute used to find a user (login). 
+// E.g., if you use cn,  your login might be "Jane Smith"
+//       if you use uid, your login might be "jsmith"
+$ldap_login_attr = 'uid';
+
+// Account used to bind to the server and search for information. 
+// This user must have the correct rights to perform search.
+// If left empty the search will be made in anonymous.
+//
+// *** We do NOT recommend storing the root LDAP account info here ***
+$ldap_admin_dn = '';  // user DN
+$ldap_admin_pwd = ''; // user password
+
+
+//------ Admin Group Settings ------//
+//
+// A group name (complete DN) to find users with admin rights
+$ldap_admin_group_name = 'cn=webcal_admin,ou=group,dc=company,dc=com';
+
+// What type of group do we want (posixgroup, groupofnames, groupofuniquenames)
+$ldap_admin_group_type = 'posixgroup';
+
+// The LDAP attribute used to store member of a group
+$ldap_admin_group_attr = 'memberuid';
+
+
+//------ LDAP Search Settings ------//
+//
+// LDAP filter to find a user list.
+$ldap_user_filter = '(objectclass=person)';
+
+// Attributes to fetch from LDAP and corresponding user variables in the
+// application. Do change according to your LDAP Schema
+$ldap_user_attr = array( 
+  // LDAP attribute   //WebCalendar variable
+  'uid',              //login
+  'sn',               //lastname
+  'givenname',        //firstname
+  'cn',               //fullname
+  'mail'              //email
+);
+
+/*************************** End Config *****************************/
+
+
+// Convert group name to lower case to prevent problems
+$ldap_admin_group_attr = strtolower($ldap_admin_group_attr);
+$ldap_admin_group_type = strtolower($ldap_admin_group_type);
+
+// Function to search the dn of a given user the error message will 
+// be placed in $error.
+// params:
+//   $login - user login
+//   $dn - complete dn for the user (must be given by ref )
+// return:
+//   TRUE if the user is found, FALSE in other case
+function user_search_dn ( $login ,$dn ) {
+  global $error, $ds, $ldap_base_dn, $ldap_login_attr, $ldap_user_attr;
+
+  $ret = false;
+  if ($r = connect_and_bind()) {
+    $sr = @ldap_search ( $ds, $ldap_base_dn, "($ldap_login_attr=$login)", $ldap_user_attr );
+    if (!$sr) {
+      $error = 'Error searching LDAP server: ' . ldap_error();
+    } else {
+      $info = @ldap_get_entries ( $ds, $sr );
+      if ( $info['count'] != 1 ) {
+        $error = 'Invalid login';
+      } else {
+        $ret = true;
+        $dn = $info[0]['dn'];
+      }
+      @ldap_free_result ( $sr );
+    }
+    @ldap_close ( $ds );
+  }
+  return $ret;
+}
+
+
+// Check to see if a given login/password is valid.  If invalid,
+// the error message will be placed in $error.
+// params:
+//   $login - user login
+//   $password - user password
+// returns: true or false
+function user_valid_login ( $login, $password ) {
+  global $error, $ldap_server, $ldap_port, $ldap_base_dn, $ldap_login_attr;
+  global $ldap_admin_dn, $ldap_admin_pwd, $ldap_start_tls, $set_ldap_version, $ldap_version;
+
+  $ret = false;
+  $ds = @ldap_connect ( $ldap_server, $ldap_port );
+  if ( $ds ) {
+    if ($set_ldap_version || $ldap_start_tls) 
+      ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, $ldap_version);
+  
+    if ($ldap_start_tls) {
+      if (!ldap_start_tls($ds)) {
+        $error = 'Could not start TLS for LDAP connection';
+        return $ret;      
+      }
+    }
+
+    if ( user_search_dn ( $login, &$dn) ) {
+      $r = @ldap_bind ( $ds, $dn, $password );
+      if (!$r) {
+        $error = 'Invalid login';
+        //$error .= ': incorrect password'; // uncomment for debugging
+      } else {
+        $ret = true;
+      }
+    } else {
+      $error = 'Invalid login';
+      //$error .= ': no such user'; // uncomment for debugging
+    }
+    @ldap_close ( $ds );
+  } else {
+    $error = 'Error connecting to LDAP server';
+  }
+  return $ret;
+}
+
+// TODO: implement this function properly for LDAP.
+// Check to see if a given login/crypted password is valid.  If invalid,
+// the error message will be placed in $error.
+// params:
+//   $login - user login
+//   $crypt_password - crypted user password
+// returns: true or false
+function user_valid_crypt ( $login, $crypt_password ) {
+  return true;
+}
+
+// Load info about a user (first name, last name, admin) and set globally.
+// params:
+//   $user - user login
+//   $prefix - variable prefix to use
+function user_load_variables ( $login, $prefix ) {
+  global $error, $ds, $ldap_base_dn, $ldap_login_attr, $ldap_user_attr;
+  global $PUBLIC_ACCESS_FULLNAME, $NONUSER_PREFIX;
+
+  if ($NONUSER_PREFIX && substr($login, 0, strlen($NONUSER_PREFIX) ) == $NONUSER_PREFIX ) {
+    nonuser_load_variables ( $login, $prefix );
+    return true;
+  }
+
+  if ( $login == '__public__' ) {
+    $GLOBALS[$prefix . 'login'] = $login;
+    $GLOBALS[$prefix . 'firstname'] = '';
+    $GLOBALS[$prefix . 'lastname'] = '';
+    $GLOBALS[$prefix . 'is_admin'] = 'N';
+    $GLOBALS[$prefix . 'email'] = '';
+    $GLOBALS[$prefix . 'fullname'] = $PUBLIC_ACCESS_FULLNAME;
+    $GLOBALS[$prefix . 'password'] = '';
+    return true;
+  }
+
+  $ret =  false;
+  if ($r = connect_and_bind()) {
+    $sr = @ldap_search ( $ds, $ldap_base_dn, "($ldap_login_attr=$login)", $ldap_user_attr );
+    if (!$sr) {
+      $error = 'Error searching LDAP server: ' . ldap_error();
+    } else {
+      $info = @ldap_get_entries ( $ds, $sr );
+      if ( $info['count'] != 1 ) {
+        $error = 'Invalid login';
+      } else {
+        $GLOBALS[$prefix . 'login'] = $login;
+        $GLOBALS[$prefix . 'firstname'] = $info[0][$ldap_user_attr[2]][0];
+        $GLOBALS[$prefix . 'lastname'] = $info[0][$ldap_user_attr[1]][0];
+        $GLOBALS[$prefix . 'email'] = $info[0][$ldap_user_attr[4]][0];
+        $GLOBALS[$prefix . 'fullname'] = $info[0][$ldap_user_attr[3]][0];
+        $GLOBALS[$prefix . 'is_admin'] = user_is_admin($login,get_admins());
+        $ret = true;
+      }
+      @ldap_free_result ( $sr );
+    }
+    @ldap_close ( $ds );
+  }
+  return $ret;
+}
+
+// Add a new user.
+// params:
+//   $user - user login
+//   $password - user password
+//   $firstname - first name
+//   $lastname - last name
+//   $email - email address
+//   $admin - is admin? ("Y" or "N")
+function user_add_user ( $user, $password, $firstname, $lastname, $email, $admin ) {
+  global $error;
+
+  $error = 'Not yet supported.';
+  return false;
+}
+
+// Update a user
+// params:
+//   $user - user login
+//   $firstname - first name
+//   $lastname - last name
+//   $email - email address
+//   $admin - is admin?
+function user_update_user ( $user, $firstname, $lastname, $email, $admin ) {
+  global $error;
+
+  $error = 'Not yet supported.';
+  return false;
+}
+
+// Update user password
+// params:
+//   $user - user login
+//   $password - last name
+function user_update_user_password ( $user, $password ) {
+  global $error;
+
+  $error = 'Not yet supported';
+  return false;
+}
+
+// Delete a user from the system.
+// Once this does get implemented, be sure to delete the user from
+// various WebCalendar tables (see user.php user_delete_user function).
+// params:
+//   $user - user to delete
+function user_delete_user ( $user ) {
+  $error = 'Not yet supported';
+  return false;
+}
+
+
+// Get a list of users and return info in an array.
+// returns: array of users
+function user_get_users () {
+  global $error, $ds, $ldap_base_dn, $ldap_user_attr, $ldap_user_filter;
+  global $public_access, $PUBLIC_ACCESS_FULLNAME;
+
+  $Admins = get_admins();
+  $count = 0;
+  $ret = array ();
+  if ( $public_access == 'Y' )
+    $ret[$count++] = array (
+       'cal_login' => '__public__',
+       'cal_lastname' => '',
+       'cal_firstname' => '',
+       'cal_is_admin' => 'N',
+       'cal_email' => '',
+       'cal_password' => '',
+       'cal_fullname' => $PUBLIC_ACCESS_FULLNAME );
+
+  if ($r = connect_and_bind()) {
+    $sr = @ldap_search ( $ds, $ldap_base_dn, $ldap_user_filter, $ldap_user_attr );
+    if (!$sr) {
+      $error = 'Error searching LDAP server: ' . ldap_error();
+    } else {
+      if ( (float)substr(PHP_VERSION,0,3) >= 4.2 ) ldap_sort ( $ds, $sr, $ldap_user_attr[3]);
+      $info = @ldap_get_entries( $ds, $sr );
+      for ( $i = 0; $i < $info['count']; $i++ ) {
+        $ret[$count++] = array (
+          'cal_login' => $info[$i][$ldap_user_attr[0]][0],
+          'cal_lastname' => $info[$i][$ldap_user_attr[1]][0],
+          'cal_firstname' => $info[$i][$ldap_user_attr[2]][0],
+          'cal_email' => $info[$i][$ldap_user_attr[4]][0],
+          'cal_is_admin' => user_is_admin($info[$i][$ldap_user_attr[0]][0],$Admins),
+          'cal_fullname' => $info[$i][$ldap_user_attr[3]][0]
+          );
+      }
+      @ldap_free_result($sr);
+    }
+    @ldap_close ( $ds );
+  }
+  return $ret;
+}
+
+// Test if a user is an admin, that is: if the user is a member of a special
+// group in the LDAP Server
+// params:
+//   $values - the login name
+// returns: Y if user is admin, N if not
+function user_is_admin($values,$Admins) {
+  if ( ! $Admins ) {
+    return 'N';
+  } else if (in_array ($values, $Admins)) {
+    return 'Y';
+  } else {
+    return 'N';
+  }
+}
+
+// Searches $ldap_admin_group_name and returns an array of the group members.
+// Do this search only once per request.
+// returns: array of admins
+function get_admins() {
+  global $error, $ds, $cached_admins;
+  global $ldap_admin_group_name,$ldap_admin_group_attr,$ldap_admin_group_type;
+
+  if ( ! empty ( $cached_admins ) ) return $cached_admins;
+  $cached_admins = array ();
+
+  if ($r = connect_and_bind()) {
+    $search_filter = "($ldap_admin_group_attr=*)";
+    $sr = @ldap_search ( $ds, $ldap_admin_group_name, $search_filter, array($ldap_admin_group_attr) );
+    if (!$sr) {
+      $error = 'Error searching LDAP server: ' . ldap_error();
+    } else {
+      $admins = ldap_get_entries( $ds, $sr );
+      for( $x = 0; $x <= $admins[0][$ldap_admin_group_attr]['count']; $x ++ ) {
+       if ($ldap_admin_group_type != 'posixgroup') {
+          $cached_admins[] = stripdn($admins[0][$ldap_admin_group_attr][$x]);
+        } else {
+          $cached_admins[] = $admins[0][$ldap_admin_group_attr][$x];
+        }
+      }
+      @ldap_free_result($sr);
+    }
+    @ldap_close ( $ds );
+  }
+  return $cached_admins;
+}
+
+// Strip everything but the username (uid) from a dn.
+//  params:
+//    $dn - the dn you want to strip the uid from.
+//  returns: string - userid
+//
+//  ex: stripdn(uid=jeffh,ou=people,dc=example,dc=com) returns jeffh
+function stripdn($dn){
+  list ($uid,$trash) = split (',', $dn, 2);
+  list ($trash,$user) = split ('=', $uid);
+  return($user);
+}
+
+// Connects and binds to the LDAP server
+// Tries to connect as $ldap_admin_dn if we set it.
+//  returns: bind result or false
+function connect_and_bind() {
+  global $ds, $error, $ldap_server, $ldap_port, $ldap_version; 
+  global $ldap_admin_dn, $ldap_admin_pwd, $ldap_start_tls, $set_ldap_version;
+
+  $ret = false;
+  $ds = @ldap_connect ( $ldap_server, $ldap_port );
+  if ( $ds ) {
+    if ($set_ldap_version || $ldap_start_tls) 
+      ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, $ldap_version);
+  
+    if ($ldap_start_tls) {
+      if (!ldap_start_tls($ds)) {
+        $error = 'Could not start TLS for LDAP connection';
+        return $ret;      
+      }
+    }
+    
+    if ( $ldap_admin_dn != '') {
+      $r = @ldap_bind ( $ds, $ldap_admin_dn, $ldap_admin_pwd );
+    } else {
+      $r = @ldap_bind ( $ds );
+    }
+
+    if (!$r) {
+      $error = 'Invalid Admin login for LDAP Server';
+    } else {
+      $ret = $r;
+    }
+  } else {
+    $error = 'Error connecting to LDAP server';
+    $ret = false;
+  }
+  return $ret;
+}
+
+?>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/user-nis.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/user-nis.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/user-nis.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,366 @@
+<?php
+if ( empty ( $PHP_SELF ) && ! empty ( $_SERVER ) &&
+  ! empty ( $_SERVER['PHP_SELF'] ) ) {
+  $PHP_SELF = $_SERVER['PHP_SELF'];
+}
+if ( ! empty ( $PHP_SELF ) && preg_match ( "/\/includes\//", $PHP_SELF ) ) {
+    die ( "You can't access this file directly!" );
+}
+
+// This file contains all the functions for getting information
+// about users via NIS.  So, if you want to use an authentication scheme
+// other than the webcal_user table, you can just create a new
+// version of each function found below.
+//
+// Note: this application assumes that usernames (logins) are unique.
+//
+// Note #2: If you are using HTTP-based authentication, then you still
+// need these functions and you will still need to add users to
+// webcal_user.
+
+// Set some global config variables about your system.
+// For NIS (which is maintained external to WebCalendar), don't let them
+// add/delete users or change passwords.
+$user_can_update_password = false;
+$admin_can_add_user = false;
+$admin_can_delete_user = false;
+
+// $user_external_group = 100;
+$user_external_email = "domain.com";
+
+// Check to see if a given login/password is valid.  If invalid,
+// the error message will be placed in $error (a global variable).
+// params:
+//   $login - user login
+//   $password - user password
+// returns: true or false
+function user_valid_login ( $login, $password ) {
+  global $error,$user_external_group,$user_external_email;
+  $ret = false;
+
+  $data = @yp_match (yp_get_default_domain(), "passwd.byname", $login);
+  if ( strlen ( $data ) ) {
+    $data = explode ( ":", $data );
+    if ( $user_external_group && $user_external_group != $data[3] ) {
+      $error = translate ("Invalid login");
+      return $ret;
+    }
+    if ( $data[1] == crypt ( $password, substr ( $data[1], 0, 2 ) ) ) {
+      if ( count ( $data ) >= 4 ) {
+        $ret = true;
+	// Check for user in webcal_user.
+        // If in NIS and not in DB, then insert...
+	$sql = "SELECT cal_login FROM webcal_user WHERE cal_login = '" .
+          $login . "'";
+        $res = dbi_query ( $sql );
+        if ( ! $res || ! dbi_fetch_row ( $res ) ) {
+          // insert user
+          $uname = explode ( " ", $data[4] );
+          $ufirstname = $uname[0];
+          $ulastname = $uname[count ( $uname ) - 1];
+          $sql = "INSERT INTO webcal_user " .
+            "( cal_login, cal_lastname, cal_firstname, " .
+            "cal_is_admin, cal_email ) " .
+            "VALUES ( '$login', '$ulastname', '$ufirstname', " .
+            "'N', '$login" . "@" . "$user_external_email')";
+          if ( ! dbi_query ( $sql ) ) {
+            $error = translate("Database error") . ": " . dbi_error();
+	    $ret = false;
+          }
+        }
+      } else {
+       $error = translate ("Invalid login") . ": " .
+         translate("incorrect password" );
+       $ret = false;
+      }
+    }
+  } else {
+     // no such user
+     $error = translate ("Invalid login") . ": " . translate("no such user");
+     $ret = false;
+  }
+  return $ret;
+}
+
+// Check to see if a given login/crypted password is valid.  If invalid,
+// the error message will be placed in $error.
+// params:
+//   $login - user login
+//   $crypt_password - crypted user password
+// returns: true or false
+function user_valid_crypt ( $login, $crypt_password ) {
+  return true;
+  // NOT YET IMPLEMENTED FOR NIS.
+}
+
+
+// Load info about a user (first name, last name, admin) and set
+// globally.
+// params:
+//   $user - user login
+//   $prefix - variable prefix to use
+function user_load_variables ( $login, $prefix ) {
+  global $PUBLIC_ACCESS_FULLNAME, $NONUSER_PREFIX;
+
+  if ($NONUSER_PREFIX && substr($login, 0, strlen($NONUSER_PREFIX) ) == $NONUSER_PREFIX) {
+    nonuser_load_variables ( $login, $prefix );
+    return true;
+  }
+  
+  if ( $login == "__public__" ) {
+    $GLOBALS[$prefix . "login"] = $login;
+    $GLOBALS[$prefix . "firstname"] = "";
+    $GLOBALS[$prefix . "lastname"] = "";
+    $GLOBALS[$prefix . "is_admin"] = "N";
+    $GLOBALS[$prefix . "email"] = "";
+    $GLOBALS[$prefix . "fullname"] = $PUBLIC_ACCESS_FULLNAME;
+    $GLOBALS[$prefix . "password"] = "";
+    return true;
+  }
+  $sql =
+    "SELECT cal_firstname, cal_lastname, cal_is_admin, cal_email, cal_passwd " .
+    "FROM webcal_user WHERE cal_login = '" . $login . "'";
+  $res = dbi_query ( $sql );
+  if ( $res ) {
+    if ( $row = dbi_fetch_row ( $res ) ) {
+      $GLOBALS[$prefix . "login"] = $login;
+      $GLOBALS[$prefix . "firstname"] = $row[0];
+      $GLOBALS[$prefix . "lastname"] = $row[1];
+      $GLOBALS[$prefix . "is_admin"] = $row[2];
+      $GLOBALS[$prefix . "email"] = empty ( $row[3] ) ? "" : $row[3];
+      if ( strlen ( $row[0] ) && strlen ( $row[1] ) )
+        $GLOBALS[$prefix . "fullname"] = "$row[0] $row[1]";
+      elseif ( strlen ( $row[1] ) && ! strlen ( $row[0] ) )
+        $GLOBALS[$prefix . "fullname"] = "$row[1]";
+      else
+        $GLOBALS[$prefix . "fullname"] = $login;
+      $GLOBALS[$prefix . "password"] = $row[4];
+    }
+    dbi_free_result ( $res );
+  } else {
+    $error = translate ("Database error") . ": " . dbi_error ();
+    return false;
+  }
+  return true;
+}
+
+// Add a new user.
+// params:
+//   $user - user login
+//   $password - user password
+//   $firstname - first name
+//   $lastname - last name
+//   $email - email address
+//   $admin - is admin? ("Y" or "N")
+function user_add_user ( $user, $password, $firstname, $lastname, $email,
+  $admin ) {
+  global $error;
+
+  if ( $user == "__public__" ) {
+    $error = translate ("Invalid user login");
+    return false;
+  }
+
+  if ( strlen ( $email ) )
+    $uemail = "'" . $email . "'";
+  else
+    $uemail = "NULL";
+  if ( strlen ( $firstname ) )
+    $ufirstname = "'" . $firstname . "'";
+  else
+    $ufirstname = "NULL";
+  if ( strlen ( $lastname ) )
+    $ulastname = "'" . $lastname . "'";
+  else
+    $ulastname = "NULL";
+  if ( strlen ( $password ) )
+    $upassword = "'" . $password . "'";
+  else
+    $upassword = "NULL";
+  if ( $admin != "Y" )
+    $admin = "N";
+  $sql = "INSERT INTO webcal_user " .
+    "( cal_login, cal_lastname, cal_firstname, " .
+    "cal_is_admin, cal_passwd, cal_email ) " .
+    "VALUES ( '$user', $ulastname, $ufirstname, " .
+    "'$admin', $upassword, $uemail )";
+  if ( ! dbi_query ( $sql ) ) {
+    $error = translate ("Database error") . ": " . dbi_error ();
+    return false;
+  }
+  return true;
+}
+
+// Update a user
+// params:
+//   $user - user login
+//   $firstname - first name
+//   $lastname - last name
+//   $email - email address
+//   $admin - is admin?
+function user_update_user ( $user, $firstname, $lastname, $email, $admin ) {
+  global $error;
+
+  if ( $user == "__public__" ) {
+    $error = translate ("Invalid user login");
+    return false;
+  }
+  if ( strlen ( $email ) )
+    $uemail = "'" . $email . "'";
+  else
+    $uemail = "NULL";
+  if ( strlen ( $firstname ) )
+    $ufirstname = "'" . $firstname . "'";
+  else
+    $ufirstname = "NULL";
+  if ( strlen ( $lastname ) )
+    $ulastname = "'" . $lastname . "'";
+  else
+    $ulastname = "NULL";
+  if ( $admin != "Y" )
+    $admin = "N";
+
+  $sql = "UPDATE webcal_user SET cal_lastname = $ulastname, " .
+    "cal_firstname = $ufirstname, cal_email = $uemail," .
+    "cal_is_admin = '$admin' WHERE cal_login = '$user'";
+  if ( ! dbi_query ( $sql ) ) {
+    $error = translate ("Database error") . ": " . dbi_error ();
+    return false;
+  }
+  return true;
+}
+
+// Update user password
+// params:
+//   $user - user login
+//   $password - last name
+function user_update_user_password ( $user, $password ) {
+  global $error;
+
+  $sql = "UPDATE webcal_user SET cal_passwd = '$password' " .
+    "WHERE cal_login = '$user'";
+  if ( ! dbi_query ( $sql ) ) {
+    $error = translate ("Database error") . ": " . dbi_error ();
+    return false;
+  }
+  return true;
+}
+
+// Delete a user from the system.
+// We assume that we've already checked to make sure this user doesn't
+// have events still in the database.
+// params:
+//   $user - user to delete
+function user_delete_user ( $user ) {
+
+  // Get event ids for all events this user is a participant
+  $events = array ();
+  $res = dbi_query ( "SELECT webcal_entry.cal_id " .
+    "FROM webcal_entry, webcal_entry_user " .
+    "WHERE webcal_entry.cal_id = webcal_entry_user.cal_id " .
+    "AND webcal_entry_user.cal_login = '$user'" );
+  if ( $res ) {
+    while ( $row = dbi_fetch_row ( $res ) ) {
+      $events[] = $row[0];
+    }
+  }
+
+  // Now count number of participants in each event...
+  // If just 1, then save id to be deleted
+  $delete_em = array ();
+  for ( $i = 0; $i < count ( $events ); $i++ ) {
+    $res = dbi_query ( "SELECT COUNT(*) FROM webcal_entry_user " .
+      "WHERE cal_id = " . $events[$i] );
+    if ( $res ) {
+      if ( $row = dbi_fetch_row ( $res ) ) {
+        if ( $row[0] == 1 )
+	  $delete_em[] = $events[$i];
+      }
+      dbi_free_result ( $res );
+    }
+  }
+  // Now delete events that were just for this user
+  for ( $i = 0; $i < count ( $delete_em ); $i++ ) {
+    dbi_query ( "DELETE FROM webcal_entry WHERE cal_id = " . $delete_em[$i] );
+  }
+
+  // Delete user participation from events
+  dbi_query ( "DELETE FROM webcal_entry_user WHERE cal_login = '$user'" );
+
+  // Delete preferences
+  dbi_query ( "DELETE FROM webcal_user_pref WHERE cal_login = '$user'" );
+
+  // Delete from groups
+  dbi_query ( "DELETE FROM webcal_group_user WHERE cal_login = '$user'" );
+
+  // Delete bosses & assistants
+  dbi_query ( "DELETE FROM webcal_asst WHERE cal_boss = '$user'" );
+  dbi_query ( "DELETE FROM webcal_asst WHERE cal_assistant = '$user'" );
+
+  // Delete user's views
+  $delete_em = array ();
+  $res = dbi_query ( "SELECT cal_view_id FROM webcal_view " .
+    "WHERE cal_owner = '$user'" );
+  if ( $res ) {
+    while ( $row = dbi_fetch_row ( $res ) ) {
+      $delete_em[] = $row[0];
+    }
+    dbi_free_result ( $res );
+  }
+  for ( $i = 0; $i < count ( $delete_em ); $i++ ) {
+    dbi_query ( "DELETE FROM webcal_view_user WHERE cal_view_id = " .
+      $delete_em[$i] );
+  }
+  dbi_query ( "DELETE FROM webcal_view WHERE cal_owner = '$user'" );
+
+  // Delete layers
+  dbi_query ( "DELETE FROM webcal_user_layers WHERE cal_login = '$user'" );
+
+  // Delete any layers other users may have that point to this user.
+  dbi_query ( "DELETE FROM webcal_user_layers WHERE cal_layeruser = '$user'" );
+
+  // Delete user
+  dbi_query ( "DELETE FROM webcal_user WHERE cal_login = '$user'" );
+}
+
+// Get a list of users and return info in an array.
+function user_get_users () {
+  global $public_access, $PUBLIC_ACCESS_FULLNAME;
+
+  $count = 0;
+  $ret = array ();
+  if ( $public_access == "Y" )
+    $ret[$count++] = array (
+       "cal_login" => "__public__",
+       "cal_lastname" => "",
+       "cal_firstname" => "",
+       "cal_is_admin" => "N",
+       "cal_email" => "",
+       "cal_password" => "",
+       "cal_fullname" => $PUBLIC_ACCESS_FULLNAME );
+  $res = dbi_query ( "SELECT cal_login, cal_lastname, cal_firstname, " .
+    "cal_is_admin, cal_email, cal_passwd FROM webcal_user " .
+    "ORDER BY cal_lastname, cal_firstname, cal_login" );
+  if ( $res ) {
+    while ( $row = dbi_fetch_row ( $res ) ) {
+      if ( strlen ( $row[1] ) && strlen ( $row[2] ) )
+        $fullname = "$row[2] $row[1]";
+      elseif ( strlen ( $row[1] ) && ! strlen ( $row[2] ) )
+        $fullname = "$row[1]";
+      else
+        $fullname = $row[0];
+      $ret[$count++] = array (
+        "cal_login" => $row[0],
+        "cal_lastname" => $row[1],
+        "cal_firstname" => $row[2],
+        "cal_is_admin" => $row[3],
+        "cal_email" => empty ( $row[4] ) ? "" : $row[4],
+        "cal_password" => $row[5],
+        "cal_fullname" => $fullname
+      );
+    }
+    dbi_free_result ( $res );
+  }
+  return $ret;
+}
+?>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/user.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/user.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/user.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,382 @@
+<?php
+if ( empty ( $PHP_SELF ) && ! empty ( $_SERVER ) &&
+  ! empty ( $_SERVER['PHP_SELF'] ) ) {
+  $PHP_SELF = $_SERVER['PHP_SELF'];
+}
+if ( ! empty ( $PHP_SELF ) && preg_match ( "/\/includes\//", $PHP_SELF ) ) {
+    die ( "You can't access this file directly!" );
+}
+
+// This file contains all the functions for getting information
+// about users.  So, if you want to use an authentication scheme
+// other than the webcal_user table, you can just create a new
+// version of each function found below.
+//
+// Note: this application assumes that usernames (logins) are unique.
+//
+// Note #2: If you are using HTTP-based authentication, then you still
+// need these functions and you will still need to add users to
+// webcal_user.
+
+// Set some global config variables about your system.
+$user_can_update_password = true;
+$admin_can_add_user = true;
+$admin_can_delete_user = true;
+
+
+// Check to see if a given login/password is valid.  If invalid,
+// the error message will be placed in $error.
+// params:
+//   $login - user login
+//   $password - user password
+// returns: true or false
+function user_valid_login ( $login, $password ) {
+  global $error;
+  $ret = false;
+
+  $sql = "SELECT cal_login FROM webcal_user WHERE " .
+  "cal_login = '" . $login . "' AND cal_passwd = '" . $password . "'";
+ //   "cal_login = '" . $login . "' AND cal_passwd = '" . md5($password) . "'";
+  $res = dbi_query ( $sql );
+  if ( $res ) {
+    $row = dbi_fetch_row ( $res );
+    if ( $row && $row[0] != "" ) {
+      // MySQL seems to do case insensitive matching, so double-check
+      // the login.
+      if ( $row[0] == $login )
+        $ret = true; // found login/password
+      else
+        $error = translate ("Invalid login") . ": " .
+          translate("incorrect password");
+    } else {
+      $error = translate ("Invalid login"); 
+      // Could be no such user or bad password
+      // Check if user exists, so we can tell.
+      $res2 = dbi_query ( "SELECT cal_login FROM webcal_user " .
+        "WHERE cal_login = '$login'" );
+      if ( $res2 ) {
+        $row = dbi_fetch_row ( $res2 );
+        if ( $row && ! empty ( $row[0] ) ) {
+          // got a valid username, but wrong password
+          $error = translate ("Invalid login") . ": " .
+            translate("incorrect password" );
+        } else {
+          // No such user.
+          $error = translate ("Invalid login") . ": " .
+            translate("no such user" );
+        }
+        dbi_free_result ( $res2 );
+      }
+    }
+    dbi_free_result ( $res );
+  } else {
+    $error = translate("Database error") . ": " . dbi_error();
+  }
+
+  return $ret;
+}
+
+// Check to see if a given login/crypted password is valid.  If invalid,
+// the error message will be placed in $error.
+// params:
+//   $login - user login
+//   $crypt_password - crypted user password
+// returns: true or false
+function user_valid_crypt ( $login, $crypt_password ) {
+  global $error;
+  $ret = false;
+
+  $salt = substr($crypt_password, 0, 2);
+
+  $sql = "SELECT cal_login, cal_passwd FROM webcal_user WHERE " .
+    "cal_login = '" . $login . "'";
+  $res = dbi_query ( $sql );
+  if ( $res ) {
+    $row = dbi_fetch_row ( $res );
+    if ( $row && $row[0] != "" ) {
+      // MySQL seems to do case insensitive matching, so double-check
+      // the login.
+      // also check if password matches
+      if ( ($row[0] == $login) && (crypt($row[1], $salt) == $crypt_password) )
+        $ret = true; // found login/password
+      else
+        //$error = translate ("Invalid login");
+        $error = "Invalid login";
+    } else {
+      //$error = translate ("Invalid login");
+      $error = "Invalid login";
+    }
+    dbi_free_result ( $res );
+  } else {
+    //$error = translate("Database error") . ": " . dbi_error();
+    $error = "Database error: " . dbi_error();
+  }
+
+  return $ret;
+}
+
+// Load info about a user (first name, last name, admin) and set
+// globally.
+// params:
+//   $user - user login
+//   $prefix - variable prefix to use
+function user_load_variables ( $login, $prefix ) {
+  global $PUBLIC_ACCESS_FULLNAME, $NONUSER_PREFIX;
+
+  if ($NONUSER_PREFIX && substr($login, 0, strlen($NONUSER_PREFIX) ) == $NONUSER_PREFIX) {
+    nonuser_load_variables ( $login, $prefix );
+    return true;
+  }
+  
+  if ( $login == "__public__" ) {
+    $GLOBALS[$prefix . "login"] = $login;
+    $GLOBALS[$prefix . "firstname"] = "";
+    $GLOBALS[$prefix . "lastname"] = "";
+    $GLOBALS[$prefix . "is_admin"] = "N";
+    $GLOBALS[$prefix . "email"] = "";
+    $GLOBALS[$prefix . "fullname"] = $PUBLIC_ACCESS_FULLNAME;
+    $GLOBALS[$prefix . "password"] = "";
+    return true;
+  }
+  $sql =
+    "SELECT cal_firstname, cal_lastname, cal_is_admin, cal_email, cal_passwd " .
+    "FROM webcal_user WHERE cal_login = '" . $login . "'";
+  $res = dbi_query ( $sql );
+  if ( $res ) {
+    if ( $row = dbi_fetch_row ( $res ) ) {
+      $GLOBALS[$prefix . "login"] = $login;
+      $GLOBALS[$prefix . "firstname"] = $row[0];
+      $GLOBALS[$prefix . "lastname"] = $row[1];
+      $GLOBALS[$prefix . "is_admin"] = $row[2];
+      $GLOBALS[$prefix . "email"] = empty ( $row[3] ) ? "" : $row[3];
+      if ( strlen ( $row[0] ) && strlen ( $row[1] ) )
+        $GLOBALS[$prefix . "fullname"] = "$row[0] $row[1]";
+      else
+        $GLOBALS[$prefix . "fullname"] = $login;
+      $GLOBALS[$prefix . "password"] = $row[4];
+    }
+    dbi_free_result ( $res );
+  } else {
+    $error = translate ("Database error") . ": " . dbi_error ();
+    return false;
+  }
+  return true;
+}
+
+// Add a new user.
+// params:
+//   $user - user login
+//   $password - user password
+//   $firstname - first name
+//   $lastname - last name
+//   $email - email address
+//   $admin - is admin? ("Y" or "N")
+function user_add_user ( $user, $password, $firstname, $lastname, $email,
+  $admin ) {
+  global $error;
+
+  if ( $user == "__public__" ) {
+    $error = translate ("Invalid user login");
+    return false;
+  }
+
+  if ( strlen ( $email ) )
+    $uemail = "'" . $email . "'";
+  else
+    $uemail = "NULL";
+  if ( strlen ( $firstname ) )
+    $ufirstname = "'" . $firstname . "'";
+  else
+    $ufirstname = "NULL";
+  if ( strlen ( $lastname ) )
+    $ulastname = "'" . $lastname . "'";
+  else
+    $ulastname = "NULL";
+  if ( strlen ( $password ) )
+    $upassword = "'" . md5($password) . "'";
+  else
+    $upassword = "NULL";
+  if ( $admin != "Y" )
+    $admin = "N";
+  $sql = "INSERT INTO webcal_user " .
+    "( cal_login, cal_lastname, cal_firstname, " .
+    "cal_is_admin, cal_passwd, cal_email ) " .
+    "VALUES ( '$user', $ulastname, $ufirstname, " .
+    "'$admin', $upassword, $uemail )";
+  if ( ! dbi_query ( $sql ) ) {
+    $error = translate ("Database error") . ": " . dbi_error ();
+    return false;
+  }
+  return true;
+}
+
+// Update a user
+// params:
+//   $user - user login
+//   $firstname - first name
+//   $lastname - last name
+//   $email - email address
+//   $admin - is admin?
+function user_update_user ( $user, $firstname, $lastname, $email, $admin ) {
+  global $error;
+
+  if ( $user == "__public__" ) {
+    $error = translate ("Invalid user login");
+    return false;
+  }
+  if ( strlen ( $email ) )
+    $uemail = "'" . $email . "'";
+  else
+    $uemail = "NULL";
+  if ( strlen ( $firstname ) )
+    $ufirstname = "'" . $firstname . "'";
+  else
+    $ufirstname = "NULL";
+  if ( strlen ( $lastname ) )
+    $ulastname = "'" . $lastname . "'";
+  else
+    $ulastname = "NULL";
+  if ( $admin != "Y" )
+    $admin = "N";
+
+  $sql = "UPDATE webcal_user SET cal_lastname = $ulastname, " .
+    "cal_firstname = $ufirstname, cal_email = $uemail," .
+    "cal_is_admin = '$admin' WHERE cal_login = '$user'";
+  if ( ! dbi_query ( $sql ) ) {
+    $error = translate ("Database error") . ": " . dbi_error ();
+    return false;
+  }
+  return true;
+}
+
+// Update user password
+// params:
+//   $user - user login
+//   $password - last name
+function user_update_user_password ( $user, $password ) {
+  global $error;
+
+  $sql = "UPDATE webcal_user SET cal_passwd = '".md5($password)."' " .
+    "WHERE cal_login = '$user'";
+  if ( ! dbi_query ( $sql ) ) {
+    $error = translate ("Database error") . ": " . dbi_error ();
+    return false;
+  }
+  return true;
+}
+
+// Delete a user from the system.
+// We assume that we've already checked to make sure this user doesn't
+// have events still in the database.
+// params:
+//   $user - user to delete
+function user_delete_user ( $user ) {
+  // Get event ids for all events this user is a participant
+  $events = array ();
+  $res = dbi_query ( "SELECT webcal_entry.cal_id " .
+    "FROM webcal_entry, webcal_entry_user " .
+    "WHERE webcal_entry.cal_id = webcal_entry_user.cal_id " .
+    "AND webcal_entry_user.cal_login = '$user'" );
+  if ( $res ) {
+    while ( $row = dbi_fetch_row ( $res ) ) {
+      $events[] = $row[0];
+    }
+  }
+
+  // Now count number of participants in each event...
+  // If just 1, then save id to be deleted
+  $delete_em = array ();
+  for ( $i = 0; $i < count ( $events ); $i++ ) {
+    $res = dbi_query ( "SELECT COUNT(*) FROM webcal_entry_user " .
+      "WHERE cal_id = " . $events[$i] );
+    if ( $res ) {
+      if ( $row = dbi_fetch_row ( $res ) ) {
+        if ( $row[0] == 1 )
+	  $delete_em[] = $events[$i];
+      }
+      dbi_free_result ( $res );
+    }
+  }
+  // Now delete events that were just for this user
+  for ( $i = 0; $i < count ( $delete_em ); $i++ ) {
+    dbi_query ( "DELETE FROM webcal_entry WHERE cal_id = " . $delete_em[$i] );
+  }
+
+  // Delete user participation from events
+  dbi_query ( "DELETE FROM webcal_entry_user WHERE cal_login = '$user'" );
+
+  // Delete preferences
+  dbi_query ( "DELETE FROM webcal_user_pref WHERE cal_login = '$user'" );
+
+  // Delete from groups
+  dbi_query ( "DELETE FROM webcal_group_user WHERE cal_login = '$user'" );
+
+  // Delete bosses & assistants
+  dbi_query ( "DELETE FROM webcal_asst WHERE cal_boss = '$user'" );
+  dbi_query ( "DELETE FROM webcal_asst WHERE cal_assistant = '$user'" );
+
+  // Delete user's views
+  $delete_em = array ();
+  $res = dbi_query ( "SELECT cal_view_id FROM webcal_view " .
+    "WHERE cal_owner = '$user'" );
+  if ( $res ) {
+    while ( $row = dbi_fetch_row ( $res ) ) {
+      $delete_em[] = $row[0];
+    }
+    dbi_free_result ( $res );
+  }
+  for ( $i = 0; $i < count ( $delete_em ); $i++ ) {
+    dbi_query ( "DELETE FROM webcal_view_user WHERE cal_view_id = " .
+      $delete_em[$i] );
+  }
+  dbi_query ( "DELETE FROM webcal_view WHERE cal_owner = '$user'" );
+
+  // Delete layers
+  dbi_query ( "DELETE FROM webcal_user_layers WHERE cal_login = '$user'" );
+
+  // Delete any layers other users may have that point to this user.
+  dbi_query ( "DELETE FROM webcal_user_layers WHERE cal_layeruser = '$user'" );
+
+  // Delete user
+  dbi_query ( "DELETE FROM webcal_user WHERE cal_login = '$user'" );
+}
+
+// Get a list of users and return info in an array.
+function user_get_users () {
+  global $public_access, $PUBLIC_ACCESS_FULLNAME;
+
+  $count = 0;
+  $ret = array ();
+  if ( $public_access == "Y" )
+    $ret[$count++] = array (
+       "cal_login" => "__public__",
+       "cal_lastname" => "",
+       "cal_firstname" => "",
+       "cal_is_admin" => "N",
+       "cal_email" => "",
+       "cal_password" => "",
+       "cal_fullname" => $PUBLIC_ACCESS_FULLNAME );
+  $res = dbi_query ( "SELECT cal_login, cal_lastname, cal_firstname, " .
+    "cal_is_admin, cal_email, cal_passwd FROM webcal_user " .
+    "ORDER BY cal_lastname, cal_firstname, cal_login" );
+  if ( $res ) {
+    while ( $row = dbi_fetch_row ( $res ) ) {
+      if ( strlen ( $row[1] ) && strlen ( $row[2] ) )
+        $fullname = "$row[2] $row[1]";
+      else
+        $fullname = $row[0];
+      $ret[$count++] = array (
+        "cal_login" => $row[0],
+        "cal_lastname" => $row[1],
+        "cal_firstname" => $row[2],
+        "cal_is_admin" => $row[3],
+        "cal_email" => empty ( $row[4] ) ? "" : $row[4],
+        "cal_password" => $row[5],
+        "cal_fullname" => $fullname
+      );
+    }
+    dbi_free_result ( $res );
+  }
+  return $ret;
+}
+?>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/validate.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/validate.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/includes/validate.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,157 @@
+<?php
+if ( empty ( $PHP_SELF ) && ! empty ( $_SERVER ) &&
+  ! empty ( $_SERVER['PHP_SELF'] ) ) {
+  $PHP_SELF = $_SERVER['PHP_SELF'];
+}
+if ( ! empty ( $PHP_SELF ) && preg_match ( "/\/includes\//", $PHP_SELF ) ) {
+    die ( "You can't access this file directly!" );
+}
+
+
+
+// Do a sanity check.  Make sure we can access webcal_config table.
+// We call this right after the first call to dbi_connect() (from
+// either connect.php or here in validate.php).
+function doDbSanityCheck () {
+  global $db_login, $db_host, $db_database;
+  $res = @dbi_query ( "SELECT COUNT(cal_value) FROM webcal_config",
+    false, false );
+  if ( $res ) {
+    if ( $row = dbi_fetch_row ( $res ) ) {
+      // Found database.  All is peachy.
+      dbi_free_result ( $res );
+    } else {
+      // Error accessing table.
+      // User has wrong db name or has not created tables.
+      // Note: cannot translate this since we have not included
+      // translate.php yet.
+      dbi_free_result ( $res );
+      die_miserable_death (
+        "Error finding WebCalendar tables in database '$db_database' " .
+        "using db login '$db_login' on db server '$db_host'.<br/><br/>\n" .
+        "Have you created the database tables as specified in the " .
+        "<a href=\"docs/WebCalendar-SysAdmin.html\" target=\"other\">WebCalendar " .
+        "System Administrator's Guide</a>?" );
+    }
+  } else {
+    // Error accessing table.
+    // User has wrong db name or has not created tables.
+    // Note: cannot translate this since we have not included translate.php yet.
+    die_miserable_death (
+      "Error finding WebCalendar tables in database '$db_database' " .
+      "using db login '$db_login' on db server '$db_host'.<br/><br/>\n" .
+      "Have you created the database tables as specified in the " .
+      "<a href=\"docs/WebCalendar-SysAdmin.html\" target=\"other\">WebCalendar " .
+      "System Administrator's Guide</a>?" );
+  }
+}
+
+$validate_redirect = false;
+$session_not_found = false;
+
+// Catch-all for getting the username when using HTTP-authentication
+if ( $use_http_auth ) {
+  if ( empty ( $PHP_AUTH_USER ) ) {
+    if ( !empty ( $_SERVER ) && isset ( $_SERVER['PHP_AUTH_USER'] ) ) {
+      $PHP_AUTH_USER = $_SERVER['PHP_AUTH_USER'];
+    } else if ( !empty ( $HTTP_SERVER_VARS ) &&
+      isset ( $HTTP_SERVER_VARS['PHP_AUTH_USER'] ) ) {
+      $PHP_AUTH_USER = $HTTP_SERVER_VARS['PHP_AUTH_USER'];
+    } else if ( isset ( $REMOTE_USER ) ) {
+      $PHP_AUTH_USER = $REMOTE_USER;
+    } else if ( !empty ( $_ENV ) && isset ( $_ENV['REMOTE_USER'] ) ) {
+      $PHP_AUTH_USER = $_ENV['REMOTE_USER'];
+    } else if ( !empty ( $HTTP_ENV_VARS ) &&
+      isset ( $HTTP_ENV_VARS['REMOTE_USER'] ) ) {
+      $PHP_AUTH_USER = $HTTP_ENV_VARS['REMOTE_USER'];
+    } else if ( @getenv ( 'REMOTE_USER' ) ) {
+      $PHP_AUTH_USER = getenv ( 'REMOTE_USER' );
+    } else if ( isset ( $AUTH_USER ) ) {
+      $PHP_AUTH_USER = $AUTH_USER;
+    } else if ( !empty ( $_ENV ) && isset ( $_ENV['AUTH_USER'] ) ) {
+      $PHP_AUTH_USER = $_ENV['AUTH_USER'];
+    } else if ( !empty ( $HTTP_ENV_VARS ) &&
+      isset ( $HTTP_ENV_VARS['AUTH_USER'] ) ) {
+      $PHP_AUTH_USER = $HTTP_ENV_VARS['AUTH_USER'];
+    } else if ( @getenv ( 'AUTH_USER' ) ) {
+      $PHP_AUTH_USER = getenv ( 'AUTH_USER' );
+    }
+  }
+}
+
+if ( $single_user == "Y" ) {
+  $login = $single_user_login;
+} else {
+  if ( $use_http_auth ) {
+    // HTTP server did validation for us....
+    if ( empty ( $PHP_AUTH_USER ) )
+      $session_not_found = true;
+    else
+      $login = $PHP_AUTH_USER;
+
+  } elseif ( substr($user_inc,0,9) == 'user-app-' ) {
+    // Use another application's authentication
+    if (! $login = user_logged_in()) app_login_screen(clean_whitespace($login_return_path));
+  
+  } else {
+    if ( ! empty ( $settings['session'] ) && $settings['session'] == 'php' ) {
+      session_start ();
+      if ( ! empty ( $_SESSION['webcalendar_session'] ) ) {
+        $webcalendar_session = $_SESSION['webcalendar_session'];
+      }
+    }
+    // We can't actually check the database yet since we haven't connected
+    // to the database.  That happens in connect.php.
+
+    // Check for session.  If not found, then note it for later
+    // handling in connect.php.
+    else if ( empty ( $webcalendar_session ) && empty ( $login ) ) {
+      $session_not_found = true;
+    }
+
+    else {
+      // Check for cookie...
+      if ( ! empty ( $webcalendar_session ) ) {
+        $encoded_login = $webcalendar_session;
+        if ( empty ( $encoded_login ) ) {
+          // invalid session cookie
+          $session_not_found = true;
+        } else {
+          $login_pw = split('\|', decode_string ($encoded_login));
+          $login = $login_pw[0];
+          $cryptpw = $login_pw[1];
+          // Security fix.  Don't allow certain types of characters in
+          // the login.  WebCalendar does not escape the login name in
+          // SQL requests.  So, if the user were able to set the login
+          // name to be "x';drop table u;",
+          // they may be able to affect the database.
+          if ( ! empty ( $login ) ) {
+            if ( $login != addslashes ( $login ) ) {
+              die_miserable_death ( "Illegal characters in login " .
+                "<tt>" . htmlentities ( $login ) . "</tt>" );
+            }
+          }
+          // make sure we are connected to the database for password check
+          $c = @dbi_connect ( $db_host, $db_login, $db_password, $db_database );
+          if ( ! $c ) {
+            die_miserable_death (
+              "Error connecting to database:<blockquote>" .
+              dbi_error () . "</blockquote>\n" );
+          }
+          doDbSanityCheck ();
+
+          if (!user_valid_crypt($login, $cryptpw)) {
+            do_debug ( "User not logged in; redirecting to login page" );
+            if ( empty ( $login_return_path ) )
+              do_redirect ( "login.php" );
+            else
+              do_redirect ( "login.php?return_path=$login_return_path" );
+          }
+
+          do_debug ( "Decoded login from cookie: $login" );
+        }
+      }
+    }
+  }
+}
+?>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/index.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/index.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/index.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,120 @@
+<?php
+
+/*
+ * webcalendar plugin
+ *
+ * Daniel Perez <danielperez.arg at gmail.com>
+ *
+ * This is an example to watch things in action. You can obviously modify things and logic as you see fit
+ */
+
+require_once('pre.php');
+//require_once ('plugins/webcalendar/config.php');
+
+// the header that displays for the user portion of the plugin
+function webcalendar_Project_Header($params) {                                                                                                                                         
+	global $DOCUMENT_ROOT,$HTML,$id,$Language;                                                                            
+	$params['toptab']='webcalendar'; 
+	$params['group']=$id;
+	/*                                                                                                                                                              
+		Show horizontal links                                                                                                                                   
+	*/                                                                                                                                                              
+	site_project_header($params);														
+}
+
+// the header that displays for the project portion of the plugin
+function webcalendar_User_Header($params) {
+	global $DOCUMENT_ROOT,$HTML,$user_id,$Language;                                                                            
+	$params['toptab']='webcalendar'; 
+	$params['user']=$user_id;
+	/*                                                                                                                                                              
+	 Show horizontal links                                                                                                                                   
+	 */                                                                                                                                                              
+	site_user_header($params);    
+}
+
+/*
+	$user = session_get_user(); // get the session user
+
+	if (!$user || !is_object($user) || $user->isError() || !$user->isActive()) {
+		exit_error("Invalid User", "Cannot Process your request for this user.");
+	}
+
+	$type = getStringFromRequest('type');
+	$id = getStringFromRequest('id');
+	$pluginname = getStringFromRequest('pluginname');
+	
+	if (!$type) {
+		exit_error("Cannot Process your request","No TYPE specified"); // you can create items in Base.tab and customize this messages
+	} elseif (!$id) {
+		exit_error("Cannot Process your request","No ID specified");
+	} else {
+		if ($type == 'group') {
+			$group = group_get_object($id);
+			if ( !$group) {
+				exit_error("Invalid Project", "Inexistent Project");
+			}
+			if ( ! ($group->usesPlugin ( $pluginname )) ) {//check if the group has the webcalendar plugin active
+				exit_error("Error", "First activate the $pluginname plugin through the Project's Admin Interface");			
+			}
+			$userperm = $group->getPermission($user);//we´ll check if the user belongs to the group (optional)
+			if ( !$userperm->IsMember()) {
+				exit_error("Access Denied", "You are not a member of this project");
+			}
+			// other perms checks here...
+			webcalendar_Project_Header(array('title'=>$pluginname . ' Project Plugin!','pagename'=>"$pluginname",'sectionvals'=>array(group_getname($id))));    
+			// DO THE STUFF FOR THE PROJECT PART HERE
+			echo "We are in the Project webcalendar plugin <br>";
+			echo "Greetings from planet " . $world; // $world comes from the config file in /etc
+		} elseif ($type == 'user') {
+			$realuser = user_get_object($id);// 
+			if (!($realuser) || !($realuser->usesPlugin($pluginname))) {
+				exit_error("Error", "First activate the User's $pluginname plugin through Account Manteinance Page");
+			}
+			if ( (!$user) || ($user->getID() != $id)) { // if someone else tried to access the private webcalendar part of this user
+				exit_error("Access Denied", "You cannot access other user's personal $pluginname");
+			}
+			webcalendar_User_Header(array('title'=>'My '.$pluginname,'pagename'=>"$pluginname",'sectionvals'=>array($realuser->getUnixName())));    
+			// DO THE STUFF FOR THE USER PART HERE
+			echo "We are in the User webcalendar plugin <br>";
+			echo "Greetings from planet " . $world; // $world comes from the config file in /etc
+		} elseif ($type == 'admin') {
+			$group = group_get_object($id);
+			if ( !$group) {
+				exit_error("Invalid Project", "Inexistent Project");
+			}
+			if ( ! ($group->usesPlugin ( $pluginname )) ) {//check if the group has the webcalendar plugin active
+				exit_error("Error", "First activate the $pluginname plugin through the Project's Admin Interface");			
+			}
+			$userperm = $group->getPermission($user);//we´ll check if the user belongs to the group
+			if ( !$userperm->IsMember()) {
+				exit_error("Access Denied", "You are not a member of this project");
+			}
+			//only project admin can access here
+			if ( $userperm->isAdmin() ) {
+				webcalendar_Project_Header(array('title'=>$pluginname . ' Project Plugin!','pagename'=>"$pluginname",'sectionvals'=>array(group_getname($id))));    
+				// DO THE STUFF FOR THE PROJECT ADMINISTRATION PART HERE
+				echo "We are in the Project webcalendar plugin <font color=\"#ff0000\">ADMINISTRATION</font> <br>";
+				echo "Greetings from planet " . $world; // $world comes from the config file in /etc
+			} else {
+				exit_error("Access Denied", "You are not a project Admin");
+			}
+		}
+	}	 
+	
+*/
+include_once 'includes/init.php';
+
+// If not yet logged in, you will be redirected to login.php before
+// we get to this point (by connect.php included above)
+
+if ( ! empty ( $STARTVIEW ) )
+  send_to_preferred_view ();
+else
+  do_redirect ( "month.php" );
+
+	site_project_footer(array());
+
+
+
+?>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/index2.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/index2.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/index2.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,166 @@
+<?php
+
+require_once('pre.php');
+
+function forum_header($params) {
+	global $HTML,$group_id,$forum_name,$forum_id,$sys_datefmt,$sys_news_group,$Language,$f,$sys_use_forum,$group_forum_id;
+
+	if ($group_forum_id) {
+		$forum_id=$group_forum_id;
+	}
+	if (!$sys_use_forum) {
+		exit_disabled();
+	}
+
+	$params['group']=$group_id;
+	$params['toptab']='webcalendar';
+
+	/*
+		bastardization for news
+		Show icon bar unless it's a news forum
+	*/
+	if ($group_id == $sys_news_group) {
+		//this is a news item, not a regular forum
+		if ($forum_id) {
+			// Show this news item at the top of the page
+			$sql="SELECT submitted_by, post_date, group_id, forum_id, summary, details FROM news_bytes WHERE forum_id='$forum_id'";
+			$result=db_query($sql);
+
+			// checks which group the news item belongs to
+			$params['group']=db_result($result,0,'group_id');
+			$params['toptab']='news';
+			$HTML->header($params);
+
+
+			echo '<table><tr><td valign="top">';
+			if (!$result || db_numrows($result) < 1) {
+				echo '<h3>'.$Language->getText('forum_utils','nonewsitem').'</h3>';
+			} else {
+				$user = user_get_object(db_result($result,0,'submitted_by'));
+				$group =& group_get_object($params['group']);
+				if (!$group || !is_object($group) || $group->isError()) {
+					exit_no_group();
+				}
+				echo '
+				<strong>'.$Language->getText('forum_utils','postedby').':</strong> '.$user->getRealName().'<br />
+				<strong>'.$Language->getText('forum_utils','date').':</strong> '. date($sys_datefmt,db_result($result,0,'post_date')).'<br />
+				<strong>'.$Language->getText('forum_utils','summary').':</strong> <a href="/forum/forum.php?forum_id='.db_result($result,0,'forum_id').'&group_id='.$group_id.'">'. db_result($result,0,'summary').'</a><br/>
+				<strong>'.$Language->getText('forum_utils','project').':</strong> <a href="/projects/'.$group->getUnixName().'">'.$group->getPublicName().'</a> <br />
+				<p>
+				'. (util_make_links(nl2br(db_result($result,0,'details'))));
+
+				echo '</p>';
+			}
+			echo '</td><td valign="top" width="35%">';
+			echo $HTML->boxTop($Language->getText('forum_utils','latest'));
+			echo news_show_latest($params['group'],5,false);
+			echo $HTML->boxBottom();
+			echo '</td></tr></table>';
+		} else {
+			site_project_header($params);
+		}
+	} else {
+		site_project_header($params);
+	}
+
+	$menu_text=array();
+	$menu_links=array();
+	if ($f && $forum_id) {
+		$menu_text[]=$Language->getText('forum_utils','discussionforum') .' '. $f->getName();
+		$menu_links[]='"/forum/forum.php?forum_id='.$forum_id.'"';
+	}
+	if ($f && $f->userIsAdmin()) {
+		$menu_text[]=$Language->getText('forum_utils','admin');
+		$menu_links[]='/forum/admin/?group_id='.$group_id;
+	}
+	if (count($menu_text) > 0) {
+		echo $HTML->subMenu(
+			$menu_text,
+			$menu_links
+		);
+	}
+
+	if (session_loggedin() ) {
+		if ($f) {
+			if ($f->isMonitoring()) {
+				echo '<a href="/forum/monitor.php?forum_id='.$forum_id.'&group_id='.$group_id.'&stop=1">' .
+				html_image('ic/xmail16w.png','20','20',array()).' '.$Language->getText('forum_utils','stopmonitor').'</a> | ';
+			} else {
+				echo '<a href="/forum/monitor.php?forum_id='.$forum_id.'&group_id='.$group_id.'&start=1">' .
+				html_image('ic/mail16w.png','20','20',array()).' '.$Language->getText('forum_utils','monitor').'</a> | ';
+			}
+			echo '<a href="/forum/save.php?forum_id='.$forum_id.'&group_id='.$group_id.'">' .
+			html_image('ic/save.png','24','24',array()) .' '.$Language->getText('forum_utils','saveplace').'</a> | ';
+		}
+	}
+
+	if ($f && $forum_id) {
+		echo '<a href="/forum/new.php?forum_id='.$forum_id.'&group_id='.$group_id.'">' .
+			html_image('ic/write16w.png','20','20',array('alt'=>$Language->getText('forum_message','thread'))) .' '.
+			$Language->getText('forum_message','thread').'</a>';
+	}
+}
+
+function forum_footer($params) {
+	site_project_footer($params);
+}
+
+forum_header(array('title'=>'Webcalendar' ));
+
+$group_id = getIntFromRequest('group_id');
+if ($group_id > 5) { // add '> 5' if you won't a calendar for the admin groups
+	$g =& group_get_object($group_id);
+	if (!$g || !is_object($g) || $g->isError()) { 
+		exit_no_group();
+	} else {
+	$user_id = user_getid() ;
+	$belong =  user_belongs_to_group($user_id,$group_id);
+	if($belong > 0){
+	?>	
+	<iframe src="/plugins/webcalendar/login.php?type=group&group_id=<?php print $group_id ?>" border=no scrolling="yes" width="100%" height="700"></iframe>	
+	<?}
+	else {
+	print $Language->getText('webcalendar_user','allow');	
+	}	
+
+	}
+	
+	
+} else {
+
+	print $Language->getText('webcalendar_user','nocalendar');
+	
+	//exit_no_group(); 
+
+}
+
+echo site_user_footer(array());
+
+function user_belongs_to_group($user_id,$group_id){
+global $HTML,$Language;
+$sql = "SELECT value,admin_flags FROM user_group,role_setting WHERE role_setting.role_id = user_group.role_id AND user_group.user_id = '".$user_id."' AND user_group.group_id = '".$group_id."' AND role_setting.section_name = 'webcal'";
+		
+//$sql = "SELECT COUNT(*) FROM user_group WHERE user_id = '".$user_id."' AND group_id = '".$group_id."'";	
+$res = db_query($sql);
+$row = db_fetch_array($res);
+if($row[0] < 1 ){
+//verif si admin 
+	$sql_admin = "SELECT COUNT(*) FROM  user_group WHERE user_id = '".$user_id."' AND  group_id = '".$group_id."' AND admin_flags = 'A'" ;	
+	$res_admin = db_query($sql_admin);
+	$row_admin = db_fetch_array($res_admin);
+	$row[0] = $row_admin[0];
+} 
+if( $row[0] < 1) {
+	//verif si admin 
+	$sql_admin = "SELECT COUNT(*) FROM  webcal_user,users WHERE users.user_name = webcal_user.cal_login AND users.user_id = '".$user_id."' AND  cal_is_admin = 'Y'" ;	
+	$res_admin = db_query($sql_admin);
+	$row_admin = db_fetch_array($res_admin);
+	$row[0] = $row_admin[0];
+}
+
+
+return $row[0];	
+	
+}
+
+?>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/install/index.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/install/index.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/install/index.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,765 @@
+<?php
+/*
+ * $Id: index.php,v 1.17.2.3 2005/12/09 21:26:39 cknudsen Exp $
+ *
+ * Page Description:
+ * Main page for install/config of db settings.
+ * This page is used to create/update includes/settings.php.
+ *
+ * Input Parameters:
+ * None
+ *
+ * Security:
+ * The first time this page is accessed, there are no security
+ * precautions.   The user is prompted to generate a config password.
+ * From then on, users must know this password to make any changes
+ * to the settings in settings.php./
+ *
+ * TODO:
+ * Add translations to this page.
+ */
+include_once '../includes/php-dbi.php';
+
+$file = "../includes/settings.php";
+$fileDir = "../includes";
+
+// Get value from POST form
+function getPostValue ( $name ) {
+  if ( ! empty ( $_POST[$name] ) ) {
+    return $_POST[$name];
+  }
+  if ( ! isset ( $HTTP_POST_VARS ) ) {
+    return null;
+  }
+  if ( ! isset ( $HTTP_POST_VARS[$name] ) ) {
+    return null;
+  }
+  return ( $HTTP_POST_VARS[$name] );
+}
+
+
+// Get value from GET form
+function getGetValue ( $name ) {
+  if ( ! empty ( $_GET[$name] ) ) {
+    return $_GET[$name];
+  }
+  if ( ! isset ( $HTTP_GET_VARS ) ) {
+    return null;
+  }
+  if ( ! isset ( $HTTP_GET_VARS[$name] ) ) {
+    return null;
+  }
+  return ( $HTTP_GET_VARS[$name] );
+}
+
+function get_php_setting ( $val ) {
+  $setting = ini_get ( $val );
+  if ( $setting == '1' || $setting == 'ON' )
+    return 'ON';
+  else
+    return 'OFF';
+}
+
+
+
+
+
+// First pass at settings.php.
+// We need to read it first in order to get the md5 password.
+$fd = @fopen ( $file, "rb", false );
+$settings = array ();
+$password = '';
+$forcePassword = false;
+if ( ! empty ( $fd ) ) {
+  while ( ! feof ( $fd ) ) {
+    $buffer = fgets ( $fd, 4096 );
+    $buffer = trim ( $buffer, "\r\n " );
+    if ( preg_match ( "/^(\S+):\s*(.*)/", $buffer,  $matches ) ) {
+      if ( $matches[1] == "install_password" ) {
+        $password = $matches[2];
+        $settings['install_password'] = $password;
+      }
+    }
+  }
+  fclose ( $fd );
+  // File exists, but no password.  Force them to create a password.
+  if ( empty ( $password ) ) {
+    $forcePassword = true;
+  }
+}
+
+session_start ();
+$doLogin = false;
+
+// Handle "Logout" button
+if ( 'logout' == getGetValue ( 'action' ) ) {
+  session_destroy ();
+  Header ( "Location: index.php" );
+  exit;
+}
+
+// If password already exists, check for session.
+if ( file_exists ( $file ) && ! empty ( $password ) &&
+  ( empty ( $_SESSION['validuser'] ) ||
+  $_SESSION['validuser'] != $password ) ) {
+  // Make user login
+  $doLogin = true;
+}
+
+
+$pwd = getPostValue ( "password" );
+if ( file_exists ( $file ) && ! empty ( $pwd ) ) {
+  if ( md5($pwd) == $password ) {
+    $_SESSION['validuser'] = $password;
+    ?>
+      <html><head><title>Password Accepted</title>
+      <meta http-equiv="refresh" content="0; index.php" />
+      </head>
+      <body onload="alert('Successful Login');">
+      </body></html>
+    <?php
+    exit;
+  } else {
+    // Invalid password
+    $_SESSION['validuser'] = '';
+    ?>
+      <html><head><title>Password Incorrect</title>
+      <meta http-equiv="refresh" content="0; index.php" />
+      </head>
+      <body onload="alert ('Invalid Login'); document.go(-1)">
+      </body></html>
+    <?php
+    exit;
+  }
+}
+
+$onload = "auth_handler (); ";
+
+$pwd1 = getPostValue ( "password1" );
+$pwd2 = getPostValue ( "password2" );
+if ( file_exists ( $file ) && $forcePassword && ! empty ( $pwd1 ) ) {
+  if ( $pwd1 != $pwd2 ) {
+    echo "Passwords do not match!<br/>\n";
+    exit;
+  }
+  $fd = fopen ( $file, "a+b", false );
+  if ( empty ( $fd ) ) {
+    echo "<html><body>Unable to write password to settings.php file\n" .
+      "</body></html>";
+    exit;
+  }
+  fwrite ( $fd, "<?php\r\n" );
+  fwrite ( $fd, "install_password: " . md5($pwd1) . "\r\n" );
+  fwrite ( $fd, "?>\r\n" );
+  fclose ( $fd );
+  ?>
+    <html><head><title>Password Updated</title>
+    <meta http-equiv="refresh" content="0; index.php" />
+    </head>
+    <body onload="alert('Password has been set');">
+    </body></html>
+  <?php
+  exit;
+}
+
+
+// Is this a db connection test?
+// If so, just test the connection, show the result and exit.
+$action = getGetValue ( "action" );
+if ( ! empty ( $action ) && $action == "dbtest" ) {
+  if ( ! empty ( $_SESSION['validuser'] ) ) {
+    $db_persistent = false;
+    $db_type = getGetValue ( 'db_type' );
+    $db_host = getGetValue ( 'db_host' );
+    $db_database = getGetValue ( 'db_database' );
+    $db_login = getGetValue ( 'db_login' );
+    $db_password = getGetValue ( 'db_password' );
+
+    echo "<html><head><title>WebCalendar: Db Connection Test</title>\n" .
+      "</head><body style=\"background-color: #fff;\">\n";
+    echo "<p><b>Connection Result:</b></p><blockquote>";
+
+    $c = dbi_connect ( $db_host, $db_login,
+      $db_password, $db_database );
+
+    if ( $c ) {
+      echo "<span style=\"color: #0f0;\">Success</span></blockquote>";
+      $_SESSION['db_success'] = true;
+      // TODO: update the text in the main window to indicate success
+    } else {
+      echo "<span style=\"color: #0f0;\">Failure</span</blockquote>";
+      echo "<br/><br/><b>Reason:</b><blockquote>" . dbi_error () .
+        "</blockquote>\n";
+    }
+    echo "<br/><br/><br/><div align=\"center\"><form><input align=\"middle\" type=\"button\" onclick=\"window.close()\" value=\"Close\" /></form></div>\n";
+    echo "</p>";
+    echo "<script language=\"JavaScript\" type=\"text/javascript\">\n";
+    echo "<!-- <![CDATA[\n";
+    echo "window.opener.show_db_status ( " .
+      ( $c ? "true" : "false" ) . " );\n";
+    echo "//]]> -->\n</script>\n";
+    echo "</body></html>\n";
+  } else { // Not valid user
+    echo "You are not authorized.";
+    // etranslate ( "You are not authorized" );  
+  }
+  exit;
+}
+
+// Is this a call to phpinfo()?
+$action = getGetValue ( "action" );
+if ( ! empty ( $action ) && $action == "phpinfo" ) {
+  if ( ! empty ( $_SESSION['validuser'] ) ) {
+    phpinfo();
+  } else {
+    echo "You are not authorized.";
+    // etranslate ( "You are not authorized" );
+  }
+  exit;
+}
+
+
+$exists = file_exists ( $file );
+$canWrite = false;
+if ( $exists ) {
+  $canWrite = is_writable ( $file );
+} else {
+  // check to see if we can create a new file.
+  $testFile = $fileDir . "/installTest.dat";
+  $testFd = @fopen ( $testFile, "w+b", false );
+  if ( file_exists ( $testFile ) ) {
+    $canWrite = true;
+  }
+  @unlink ( $testFile );
+}
+
+
+
+// If we are handling a form POST, then take that data and put it in settings
+// array.
+$x = getPostValue ( "form_db_type" );
+if ( empty ( $x ) ) {
+  // No form was posted.  Set defaults if none set yet.
+  if ( ! file_exists ( $file ) ) {
+    $settings['db_type'] = 'mysql';
+    $settings['db_host'] = 'localhost';
+    $settings['db_database'] = 'intranet';
+    $settings['db_login'] = 'webcalendar';
+    $settings['db_password'] = 'webcal01';
+    $settings['db_persistent'] = 'true';
+    $settings['readonly'] = 'false';
+    $settings['user_inc'] = 'user.php';
+    $settings['install_password'] = '';
+    $settings['single_user_login'] = '';
+    $settings['use_http_auth'] = 'false';
+    $settings['single_user'] = 'false';
+    $settings['user_inc'] = 'user.php';
+  }
+} else {
+  $settings['db_type'] = getPostValue ( 'form_db_type' );
+  $settings['db_host'] = getPostValue ( 'form_db_host' );
+  $settings['db_database'] = getPostValue ( 'form_db_database' );
+  $settings['db_login'] = getPostValue ( 'form_db_login' );
+  $settings['db_password'] = getPostValue ( 'form_db_password' );
+  $settings['db_persistent'] = getPostValue ( 'form_db_persistent' );
+  $settings['single_user_login'] = getPostValue ( 'form_single_user_login' );
+  $settings['readonly'] = getPostValue ( 'form_readonly' );
+  if ( getPostValue ( "form_user_inc" ) == "http" ) {
+    $settings['use_http_auth'] = 'true';
+    $settings['single_user'] = 'false';
+    $settings['user_inc'] = 'user.php';
+  } else if ( getPostValue ( "form_user_inc" ) == "none" ) {
+    $settings['use_http_auth'] = 'false';
+    $settings['single_user'] = 'true';
+    $settings['user_inc'] = 'user.php';
+  } else {
+    $settings['use_http_auth'] = 'false';
+    $settings['single_user'] = 'false';
+    $settings['user_inc'] = getPostValue ( 'form_user_inc' );
+  }
+  // Save settings to file now.
+  if ( empty ( $password ) ) {
+    $onload = "alert('Your settings have been saved.\\n\\n" .
+      "Please be sure to set a password.\\n');";
+    $forcePassword = true;
+  } else {
+    $onload .= "alert('Your settings have been saved.\\n\\n');";
+  }
+  $fd = @fopen ( $file, "w+b", false );
+  if ( empty ( $fd ) ) {
+    if ( file_exists ( $file ) ) {
+      $onload = "alert('Error: unable to write to file $file\\nPlease change the file permissions of this file.');";
+    } else {
+      $onload = "alert('Error: unable to write to file $file\\nPlease change the file permissions of your includes directory\\nto allow writing by other users.');";
+    }
+  } else {
+    fwrite ( $fd, "<?php\r\n" );
+    fwrite ( $fd, "# updated via install/index.php on " . date("r") . "\r\n" );
+    foreach ( $settings as $k => $v ) {
+      fwrite ( $fd, $k . ": " . $v . "\r\n" );
+    }
+    fwrite ( $fd, "# end settings.php\r\n?>\r\n" );
+    fclose ( $fd );
+    // Change to read/write by us only (only applies if we created file)
+    // and read-only by all others.  Would be nice to make it 600, but
+    // the send_reminders.php script is usually run under a different
+    // user than the web server.
+    @chmod ( $file, 0644 );
+  }
+}
+
+
+$fd = @fopen ( $file, "rb", false );
+if ( ! empty ( $fd ) ) {
+  while ( ! feof ( $fd ) ) {
+    $buffer = fgets ( $fd, 4096 );
+    $buffer = trim ( $buffer, "\r\n " );
+    if ( preg_match ( "/^#/", $buffer ) )
+      continue;
+    if ( preg_match ( "/^<\?/", $buffer ) ) // start php code
+      continue;
+    if ( preg_match ( "/^\?>/", $buffer ) ) // end php code
+      continue;
+    if ( preg_match ( "/(\S+):\s*(.*)/", $buffer, $matches ) ) {
+// echo $matches[1] . " " .  $matches[2] . "<br>";
+      $settings[$matches[1]] = $matches[2];
+      //echo "settings $matches[1] => $matches[2] <br>";
+    }
+  }
+  fclose ( $fd );
+}
+
+echo '<?xml version="1.0" encoding="UTF-8"?>' . "\n";
+?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head><title>WebCalendar Database Setup</title>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<?php include "../includes/js/visible.php"; ?>
+<script language="JavaScript" type="text/javascript">
+<!-- <![CDATA[
+<?php   if ( ! empty ( $_SESSION['validuser'] ) ) { ?>
+function testSettings () {
+  var url;
+  var form = document.dbform;
+  url = "index.php?action=dbtest" +
+    "&db_type=" + form.form_db_type.value +
+    "&db_host=" + form.form_db_host.value +
+    "&db_database=" + form.form_db_database.value +
+    "&db_login=" + form.form_db_login.value +
+    "&db_password=" + form.form_db_password.value;
+  //alert ( "URL:\n" + url );
+  window.open ( url, "wcDbTest", "width=400,height=350,resizable=yes,scrollbars=yes" );
+}
+function testPHPInfo () {
+  var url;
+  var form = document.phpinfo;
+  url = "index.php?action=phpinfo";
+  //alert ( "URL:\n" + url );
+  window.open ( url, "wcTestPHPInfo", "width=800,height=600,resizable=yes,scrollbars=yes" );
+}
+<?php } ?>
+function validate(form)
+{
+  var form = document.dbform;
+  // only check is to make sure single-user login is specified if
+  // in single-user mode
+  if ( form.form_user_inc.options[4].selected ) {
+    if ( form.form_single_user_login.value.length == 0 ) {
+      // No single user login specified
+      alert ( "Error: you must specify a\nSingle-User Login" );
+      form.form_single_user_login.focus ();
+      return false;
+    }
+  }
+  // Submit form...
+  form.submit ();
+}
+function auth_handler () {
+  var form = document.dbform;
+  if ( form.form_user_inc.options[4].selected ) {
+    makeVisible ( "singleuser" );
+  } else {
+    makeInvisible ( "singleuser" );
+  }
+}
+
+function show_db_status ( success ) {
+  if ( success ) {
+    makeVisible ( "db_success" );
+    makeInvisible ( "no_db_success" );
+  } else {
+    makeInvisible ( "db_success" );
+    makeVisible ( "no_db_success" );
+  }
+}
+ //]]> -->
+</script>
+<style type="text/css">
+body {
+  background-color: #ffffff;
+  font-family: Arial, Helvetica, sans-serif;
+  margin: 0;
+}
+table {
+  border: 1px solid #ccc;
+}
+th.header {
+  font-size: 18px;
+  background-color: #eee;
+}
+td {
+  padding: 5px;
+}
+td.prompt {
+  font-weight: bold;
+  padding-right: 20px;
+}
+div.nav {
+  margin: 0;
+  border-bottom: 1px solid #000;
+}
+div.main {
+  margin: 10px;
+}
+li {
+  margin-top: 10px;
+}
+doc.li {
+  margin-top: 5px;
+}
+.recommended {
+  color: green;
+}
+.notrecommended {
+  color: red;
+}
+</style>
+</head>
+<body onload="<?php echo $onload;?>">
+<?php
+/* other features coming soon.... 
+<div class="nav">
+<table border="0" width="100%">
+<tr>
+<td><<<b>Database Setup</b>>></td>
+<td><<<a href="setup.php">Setup Wizard</a>>></td>
+<td><<<a href="diag.php">Diagnostics</a>>></td>
+</tr></table>
+</div>
+*/
+?>
+<div class="main">
+<h2>WebCalendar Database Setup</h2>
+
+<p><b>Current Status:</b></p>
+<ul>
+
+<li>Supported databases for your PHP installation:
+<?php
+  $dbs = array ();
+  if ( function_exists ( "mysql_pconnect" ) )
+    $dbs[] = "mysql";
+  if ( function_exists ( "mysqli_connect" ) )
+    $dbs[] = "mysqli";
+  if ( function_exists ( "OCIPLogon" ) )
+    $dbs[] = "oracle";
+  if ( function_exists ( "pg_pconnect" ) )
+    $dbs[] = "postgresql";
+  if ( function_exists ( "odbc_pconnect" ) )
+    $dbs[] = "odbc";
+  if ( function_exists ( "db2_pconnect" ) )
+    $dbs[] = "ibm_db2";
+  if ( function_exists ( "ibase_pconnect" ) )
+    $dbs[] = "ibase";
+  if ( function_exists ( "mssql_pconnect" ) )
+    $dbs[] = "mssql";
+  for ( $i = 0; $i < count ( $dbs ); $i++ ) {
+    if ( $i ) echo ", ";
+    echo $dbs[$i];
+    $supported[$dbs[$i]] = true;
+  }
+?>
+</li>
+<?php if ( ! empty ( $_SESSION['db_success'] ) && $_SESSION['db_success']  ) { ?>
+<li id="db_success"> Your current database settings are able to
+  access the database.</li>
+<li id="no_db_success" style="visibility: hidden;"> Your current database settings are <b>not</b> able to
+  access the database or have not yet been tested.</li>
+<?php } else { ?>
+<li id="no_db_success"> Your current database settings are <b>not</b> able to
+  access the database or have not yet been tested.</li>
+<li id="db_success" style="visibility: hidden;"> Your current database settings are able to
+  access the database.</li>
+<?php } ?>
+<?php if ( empty ( $password ) ) { ?>
+  <li> You have not set a password for this page. </li>
+<?php } ?>
+<?php if ( $exists && ! $canWrite ) { ?>
+<li><b>Error:</b>
+The file permissions of <tt>settings.php</tt> are set so
+that this script does not have permission to write changes to it.
+You must change the file permissions of the following
+file to use this script:
+<blockquote><tt>
+<?php echo realpath ( $file ); ?>
+</tt></blockquote>
+</li>
+<?php } else if ( ! $exists && ! $canWrite ) { ?>
+<li><b>Error:</b>
+The file permissions of the <tt>includes</tt> directory are set so
+that this script does not have permission to create a new file
+in that directory.
+You must change the permissions of the follwing directory
+to use this script:
+<blockquote><tt>
+<?php echo realpath ( $fileDir ); ?>
+</tt></blockquote>
+</li>
+<?php } else { ?>
+  <?php if ( ! file_exists ( $file ) ) { ?>
+  <li>You have not created a <tt>settings.php</tt> file yet.</li>
+  <?php } ?>
+<?php if ( empty ( $PHP_AUTH_USER ) ) { ?>
+<li>HTTP-based authentication was not detected.
+You will need to reconfigure your web server if you wish to
+select "Web Server" from the "User Authentication" choices below.
+</li>
+<?php } else { ?>
+<li>HTTP-based authentication was detected.
+User authentication is being handled by your web server.
+You should select "Web Server" from the list of
+"User Authentication " choices below.
+</li>
+<?php } ?>
+
+</ul>
+
+<table>  <tr><td valign="top">
+<?php if ( $doLogin ) { ?>
+  <form action="index.php" method="post" name="dblogin">
+
+  <p>Please enter the password.</p>
+    <br /><br />
+  </p>
+  <table >
+  <tr><th colspan="2" class="header">Enter Password</th></tr>
+  <tr><th>Password:</th><td><input name="password" type="password" /></td></tr>
+  <tr><td colspan="2" align="center"><input type="submit" value="Login" /></td></tr>
+  </table><br />
+  </form>
+  </td></tr></table>
+<?php } else if ( $forcePassword ) { ?>
+  <form action="index.php" method="post" name="dbpassword">
+  <p>You have not set a password for access to this page yet.
+     Please set the password.
+    <br /><br />
+  </p>
+  <table border="0">
+  <tr><th colspan="2" class="header">Create Password</th></tr>
+  <tr><th>Password:</th><td><input name="password1" type="password" /></td></tr>
+  <tr><th>Password (again):</th><td><input name="password2" type="password" /></td></tr>
+  <tr><td colspan="2" align="center"><input type="submit" value="Set Password" /></td></tr>
+  </table><br />
+  </form>
+  </td></tr></table>
+<?php } else { ?>
+<form action="index.php" method="post" name="dbform">
+
+<table>
+<tr><th class="header" colspan="2">Database Settings</th></tr>
+
+<tr><td class="prompt">Database Type:</td>
+<td>
+<select name="form_db_type">
+<?php
+  if ( ! empty ( $supported['mysql'] ) )
+    echo "<option value=\"mysql\" " .
+      ( $settings['db_type'] == 'mysql' ? " selected=\"selected\"" : "" ) .
+      "> MySQL </option>\n";
+      
+  if ( ! empty ( $supported['mysqli'] ) )
+    echo "<option value=\"mysqli\" " .
+      ( $settings['db_type'] == 'mysqli' ? " selected=\"selected\"" : "" ) .
+      "> MySQL (Improved)</option>\n";
+
+  if ( ! empty ( $supported['oracle'] ) )
+    echo "<option value=\"oracle\" " .
+      ( $settings['db_type'] == 'oracle' ? " selected=\"selected\"" : "" ) .
+      "> Oracle (OCI) </option>\n";
+
+  if ( ! empty ( $supported['postgresql'] ) )
+    echo "<option value=\"postgresql\" " .
+      ( $settings['db_type'] == 'postgresql' ? " selected=\"selected\"" : "" ) .
+      "> PostgreSQL </option>\n";
+
+  if ( ! empty ( $supported['ibm_db2'] ) )
+    echo "  <option value=\"ibm_db2\" " .
+      ( $settings['db_type'] == 'ibm_db2' ? " selected=\"selected\"" : "" ) .
+      ">IBM DB2 Universal Database</option>\n";
+
+  if ( ! empty ( $supported['odbc'] ) )
+    echo "<option value=\"odbc\" " .
+      ( $settings['db_type'] == 'odbc' ? " selected=\"selected\"" : "" ) .
+      "> ODBC </option>\n";
+
+  if ( ! empty ( $supported['ibase'] ) )
+    echo "<option value=\"ibase\" " .
+      ( $settings['db_type'] == 'ibase' ? " selected=\"selected\"" : "" ) .
+      "> Interbase </option>\n";
+
+  if ( ! empty ( $supported['mssql'] ) )
+    echo "<option value=\"mssql\" " .
+      ( $settings['db_type'] == 'mssql' ? " selected=\"selected\"" : "" ) .
+      "> MS SQL Server </option>\n";
+?>
+</select>
+</td></tr>
+
+<tr><td class="prompt">Server:</td>
+<td><input name="form_db_host" size="20" value="<?php echo $settings['db_host'];?>" /></td></tr>
+
+<tr><td class="prompt">Database Name:</td>
+<td><input name="form_db_database" size="20" value="<?php echo $settings['db_database'];?>" /></td></tr>
+
+<tr><td class="prompt">Login:</td>
+<td><input name="form_db_login" size="20" value="<?php echo $settings['db_login'];?>" /></td></tr>
+
+<tr><td class="prompt">Password:</td>
+<td><input name="form_db_password" size="20" value="<?php echo $settings['db_password'];?>" /></td></tr>
+
+<tr><td class="prompt">Connection Persistence:</td>
+<td><input name="form_db_persistent" value="true" type="radio"
+  <?php echo ( $settings['db_persistent'] == 'true' )? " checked=\"checked\"" : "";
+  ?> />Enabled
+      
+  <input name="form_db_persistent" value="false" type="radio"
+  <?php echo ( $settings['db_persistent'] != 'true' )? " checked=\"checked\"" : "";
+  ?> />Disabled
+  </td></tr>
+<?php if ( ! empty ( $_SESSION['validuser'] ) ) { ?>
+<tr><td colspan="2" align="center">
+<input name="action" type="button" value="Test Settings"
+  onclick="testSettings()" />
+</td></tr>
+<?php } else { ?>
+<tr><th class="header" colspan="2">
+<p>You must save before proceeding.</p>
+</th></tr>
+<?php } ?>
+</table>
+
+</td>
+<td valign="top">
+  <table width="100%">
+    <tr>
+      <th class="header" colspan="2" >Application Settings</th>
+    </tr>
+    <tr>
+      <td class="prompt">User Authentication:</td>
+      <td>
+        <select name="form_user_inc" onchange="auth_handler()">
+<?php
+  echo "<option value=\"user.php\" " .
+    ( $settings['user_inc'] == 'user.php' && $settings['use_http_auth'] != 'true' ? " selected=\"selected\"" : "" ) .
+    "> Web-based via WebCalendar (default) </option>\n";
+
+  echo "<option value=\"http\" " .
+    ( $settings['user_inc'] == 'user.php' && $settings['use_http_auth'] == 'true' ? " selected=\"selected\"" : "" ) .
+    "> Web Server " .
+    ( empty ( $PHP_AUTH_USER ) ? "(not detected)" : "(detected)" ) .
+    "</option>\n";
+
+  echo "<option value=\"user-ldap.php\" " .
+    ( $settings['user_inc'] == 'user-ldap.php' ? " selected=\"selected\"" : "" ) .
+    "> LDAP </option>\n";
+
+  echo "<option value=\"user-nis.php\" " .
+    ( $settings['user_inc'] == 'user-nis.php' ? " selected=\"selected\"" : "" ) .
+    "> NIS </option>\n";
+
+  echo "<option value=\"none\" " .
+    ( $settings['user_inc'] == 'user.php' && $settings['single_user'] == 'true' ? " selected=\"selected\"" : "" ) .
+    "> None (Single-User) </option>\n</select>";
+?>
+        </td>
+      </tr>
+      <tr id="singleuser">
+        <td class="prompt">   Single-User Login:</td>
+        <td>
+          <input name="form_single_user_login" size="20" value="<?php echo $settings['single_user_login'];?>" /></td>
+      </tr>
+      <tr>
+        <td class="prompt">Read-Only:</td>
+        <td>
+          <input name="form_readonly" value="true" type="radio"
+  <?php echo ( $settings['readonly'] == 'true' )? " checked=\"checked\"" : "";?> />Yes
+      
+  <input name="form_readonly" value="false" type="radio"
+  <?php echo ( $settings['readonly'] != 'true' )? " checked=\"checked\"" : "";?> />No
+         </td>
+       </tr>
+    </table>
+<?php
+
+$php_settings = array (
+  //array ('Safe Mode','safe_mode','OFF'),
+  array ('Magic Quotes GPC','magic_quotes_gpc','ON'),
+  array ('Register Globals','register_globals','ON'),
+  array ('Display Errors','display_errors','ON'),
+  //array ('Register Globals','register_globals','OFF'),
+  array ('File Uploads','file_uploads','ON'),
+);
+
+?>
+<table width="100%">
+<tr><th class="header"  colspan="2">PHP Settings</th></tr>
+<?php foreach ( $php_settings as $setting ) { ?>
+  <tr><td class="prompt"><?php echo $setting[0];?></td>
+  <?php
+    $class = ( get_php_setting ( $setting[1] ) == $setting[2] ) ?
+      'recommended' : 'notrecommended';
+    echo "<td class=\"$class\">";
+    echo get_php_setting ( $setting[1] );
+   ?>
+   </td></tr>
+<?php } ?>
+
+<?php if ( ! empty ( $_SESSION['validuser'] ) ) { ?>
+<tr><td  align="center" colspan="2"><input name="action" type="button" value="Detailed PHP Info"
+  onclick="testPHPInfo()" /></td></tr>
+<?php } ?>
+
+
+</table></td></tr>
+
+<tr><td align="center" colspan="2">
+<input name="action" type="button" value="Save Settings"
+  onclick="return validate();" />
+  <?php if ( ! empty ( $_SESSION['db_success'] ) && $_SESSION['db_success']  && empty ( $dologin ) ) { ?>
+    <input type="button" value="Launch WebCalendar"
+      onclick="window.open('../index.php', 'webcalendar');" />
+  <?php } ?>
+  <?php if ( ! empty ( $_SESSION['validuser'] ) ) { ?>
+    <input type="button" value="Logout"
+      onclick="document.location.href='index.php?action=logout'" />
+  <?php } ?>
+</form>
+</td></tr></table>
+<?php } ?>
+
+<?php } ?>
+</div>
+<div class="main">
+<p>
+<b>Documentation:</b>
+</p>
+<ul>
+<li class="doc"><a href="../docs/WebCalendar-SysAdmin.html" target="_docs">System Administrator's Guide</a> (Installation Instructions) </li>
+<li class="doc"><a href="../docs/WebCalendar-SysAdmin.html#faq" target="_docs">FAQ</a> </li>
+<li class="doc"><a href="../docs/WebCalendar-SysAdmin.html#trouble" target="_docs">Troubleshooting</a> </li>
+<li class="doc"><a href="../docs/WebCalendar-SysAdmin.html#help" target="_docs">Getting Help</a> </li>
+</ul>
+</div>
+</body>
+</html>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/install-datebook.patch
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/install-datebook.patch	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/install-datebook.patch	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,30 @@
+--- install-datebook.c.orig	Wed Jan 13 23:29:31 1999
++++ install-datebook.c	Thu Jun 22 12:47:10 2000
+@@ -129,7 +129,7 @@
+ 	} else {
+ 	  appointment.event = 0;
+ 	}
+-	if (fields[0][0] == '\0') {
++	if (fields[0][0] != '\0') {
+ 	  time_t t;
+ 	  appointment.event = 0;
+ 	  t = parsedate(fields[0]);
+@@ -139,7 +139,7 @@
+ 	  }
+ 	  appointment.begin = *localtime(&t);
+ 	}
+-	if (fields[1][0] == '\0') {
++	if (fields[1][0] != '\0') {
+ 	  time_t t;
+ 	  t = parsedate(fields[1]);
+ 	  if (t == -1) {
+@@ -177,6 +177,9 @@
+ 	Appointment_size = pack_Appointment(&appointment, Appointment_buf,
+ 					    sizeof(Appointment_buf));
+ 	printf("desc: %s\n", appointment.description); 
++        printf("date: %d/%d/%d %d:%02d\n", appointment.begin.tm_mon + 1,
++          appointment.begin.tm_mday, appointment.begin.tm_year + 1900,
++          appointment.begin.tm_hour, appointment.begin.tm_min );
+ 	dlp_WriteRecord(sd, db, 0, 0, 0, Appointment_buf, Appointment_size, 0);
+ 	fields[fieldno++] = cPtr;
+       } else {

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/layers.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/layers.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/layers.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,116 @@
+<?php
+include_once 'includes/init.php';
+send_no_cache_header ();
+
+$updating_public = false;
+if ( $is_admin && ! empty ( $public ) && $public_access == "Y" ) {
+  $updating_public = true;
+  $layer_user = "__public__";
+  $u_url = "&public=1";
+} else {
+  $layer_user = $login;
+  $u_url = "";
+}
+
+load_user_layers ( $layer_user, 1 );
+
+$layers_enabled = 0;
+$sql = "SELECT cal_value FROM webcal_user_pref " .
+  "WHERE cal_setting = 'LAYERS_STATUS' AND cal_login = '$layer_user'";
+$res = dbi_query ( $sql );
+if ( $res ) {
+  $row = dbi_fetch_row ( $res );
+  $layers_enabled = ( $row[0] == "Y" ? 1 : 0 );
+  dbi_free_result ( $res );
+}
+
+print_header();
+
+if ( $allow_view_other != 'Y') {
+  echo "allow_view_other = $allow_view_other <br>";
+  echo translate("You are not authorized");
+} else {
+?>
+
+<h2><?php
+if ($updating_public)
+  echo translate($PUBLIC_ACCESS_FULLNAME) . " ";
+etranslate("Layers")?> <img src="help.gif" alt="<?php etranslate("Help")?>" class="help" onclick="window.open ( 'help_layers.php', 'cal_help', 'dependent,menubar,scrollbars,height=400,width=400,innerHeight=420,outerWidth=420');" /></h2>
+
+<a title="<?php etranslate("Admin") ?>" class="nav" href="adminhome.php">« <?php etranslate("Admin") ?></a><br /><br />
+<?php
+etranslate("Layers are currently");
+
+echo " <strong>";
+if ($layers_enabled) {
+	etranslate ("Enabled");
+	echo "</strong>. (<a title=\"" . 
+		translate ("Disable Layers") . "\" class=\"nav\" href=\"layers_toggle.php?status=off$u_url\">" .
+		translate ("Disable Layers") . "</a>)\n";
+} else {
+	etranslate ("Disabled");
+	echo "</strong>. (<a title=\"" .
+		translate ("Enable Layers") . "\" class=\"nav\" href=\"layers_toggle.php?status=on$u_url\">" . 
+		translate ("Enable Layers") . "</a>)\n";
+}
+echo "<br />";
+
+if ($is_admin && $layers_enabled) {
+  if ( empty ($public) && ! empty ( $public_access ) &&
+    $public_access == 'Y' ) {
+    echo "<blockquote><a href=\"layers.php?public=1\">" .
+      translate("Click here") . " " . 
+      translate("to modify the layers settings for the") . " " .
+      translate($PUBLIC_ACCESS_FULLNAME) . " " .
+      translate("calendar") . 
+      "</a></blockquote>\n";
+  }
+}
+
+if ($layers_enabled) { ?>
+
+<a title="<?php etranslate("Add layer"); ?>" href="edit_layer.php<?php if ( $updating_public ) echo "?public=1";?>"><?php etranslate("Add layer"); ?></a><br /><br />
+
+<?php
+     $layer_count = 1;
+     if ($layers) foreach ($layers as $layer) {
+       $layeruser = $layer['cal_layeruser'];
+       user_load_variables ( $layeruser, "layer" );
+?>
+	<span style="font-weight:bold;"><?php etranslate("Layer")?> <?php echo ($layer_count); ?></span>
+	(<a title="<?php 
+		etranslate("Edit layer"); ?>" href="edit_layer.php?id=<?php echo $layer['cal_layerid'] . $u_url; ?>"><?php 
+		etranslate("Edit"); ?></a> / 
+	<a title="<?php 
+		etranslate("Delete layer")?>" href="del_layer.php?id=<?php echo $layer['cal_layerid'] . $u_url; ?>" onclick="return confirm('<?php etranslate("Are you sure you want to delete this layer?")?>');"><?php 
+		etranslate("Delete")?></a>)
+
+<table style="margin-left:20px; border-width:0px;">
+	<tr><td style="vertical-align:top; font-weight:bold;">
+		<?php etranslate("Source")?>:</td><td>
+		<?php echo $layerfullname; ?>
+	</td></tr>
+	<tr><td style="font-weight:bold;">
+		<?php etranslate("Color")?>:</td><td style="background-color:<?php echo $CELLBG;?>; color:<?php echo ( $layer['cal_color'] ); ?>;">
+		<?php echo ( $layer['cal_color'] ); ?>
+	</td></tr>
+	<tr><td style="font-weight:bold;">
+		<?php etranslate("Duplicates")?>:</td><td>
+		<?php
+			if( $layer['cal_dups'] == 'N')
+				etranslate("No");
+			else
+				etranslate("Yes");
+		?>
+	</td></tr>
+</table>
+<?php
+     $layer_count++;
+   }
+ }
+}
+?>
+
+<?php print_trailer(); ?>
+</body>
+</html>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/layers_toggle.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/layers_toggle.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/layers_toggle.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,59 @@
+<?php
+/* $Id: layers_toggle.php,v 1.17.2.1 2005/12/02 21:45:15 cknudsen Exp $ */
+include_once 'includes/init.php';
+load_user_layers ();
+
+
+$status = getValue ( 'status', '(on|off)', true );
+
+
+if ( $allow_view_other != 'Y' ) {
+  print_header ();
+  etranslate("You are not authorized");
+  print_trailer ();
+  exit;
+}
+
+$updating_public = false;
+if ( $is_admin && ! empty ( $public ) && $public_access == "Y" ) {
+  $updating_public = true;
+  $layer_user = "__public__";
+  $url = 'layers.php?public=1';
+} else {
+  $layer_user = $login;
+  $url = 'layers.php';
+}
+
+$sql = "DELETE FROM webcal_user_pref WHERE cal_login = '$layer_user' " .
+  "AND cal_setting = 'LAYERS_STATUS'";
+dbi_query ( $sql );
+
+$value = ( $status == "off" ? "N" : "Y" );
+
+$sql = "INSERT INTO webcal_user_pref " .
+  "( cal_login, cal_setting, cal_value ) VALUES " .
+  "( '$layer_user', 'LAYERS_STATUS', '$value' )";
+if ( ! dbi_query ( $sql ) ) {
+  $error = "Unable to update preference: " . dbi_error () .
+    "<br /><br /><span style=\"font-weight:bold;\">SQL:</span> $sql";
+  break;
+}
+
+if ( empty ( $error ) ) {
+  do_redirect ( $url );
+}
+
+print_header();
+?>
+
+<h2><?php etranslate("Error")?></h2>
+
+<?php etranslate("The following error occurred")?>:
+<blockquote>
+<?php echo $error; ?>
+</blockquote>
+
+<?php print_trailer(); ?>
+
+</body>
+</html>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/leftarrow.gif
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/leftarrow.gif	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/leftarrow.gif	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,2 @@
+GIF89a$   ¡     ÿÿÿ¿¿¿   !ù   ,    $    „”	Éíâ›Ô€°VÝèâÌq&h!5~å9¥_Dzù¸Áçú-Õûä­¶`PB³—9‚	UъѝSYe"±ÙåµÔõ~©aR\¶~¹iᙝÞÛî–z†‡
+!º¼B¸²6WW¨h'eø¸¸qqÈR#WYA‰	Á¸Yãò6Q  ;
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/leftarrowsmall.gif
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/leftarrowsmall.gif	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/leftarrowsmall.gif	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1 @@
+GIF89a  ¡     ÿÿÿ¿¿¿   !ù   ,       6”o€Ëß0¢I•M¡¿^ÝHŽV¦š–_¯°ª±så̦Æyà¿Àü€ÁÌ&ˆ;&xÊD¤  ;
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/list_unapproved.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/list_unapproved.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/list_unapproved.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,150 @@
+<?php
+include_once 'includes/init.php';
+send_no_cache_header ();
+
+if ( empty ( $user ) )
+  $user = $login;
+
+// Only admin user or assistant can specify a username other than his own.
+if ( ! $is_admin && $user != $login  && ! $is_assistant)
+  $user = $login;
+
+$HeadX = '';
+if ( $auto_refresh == "Y" && ! empty ( $auto_refresh_time ) ) {
+  $refresh = $auto_refresh_time * 60; // convert to seconds
+  $HeadX = "<meta http-equiv=\"refresh\" content=\"$refresh; URL=list_unapproved.php\" />\n";
+}
+$INC = array('js/popups.php');
+print_header($INC,$HeadX);
+
+$key = 0;
+
+// List all unapproved events for the user
+// Exclude "extension" events (used when an event goes past midnight)
+function list_unapproved ( $user ) {
+  global $temp_fullname, $key, $login;
+  //echo "Listing events for $user <br>";
+
+  $sql = "SELECT webcal_entry.cal_id, webcal_entry.cal_name, " .
+    "webcal_entry.cal_description, " .
+    "webcal_entry.cal_priority, webcal_entry.cal_date, " .
+    "webcal_entry.cal_time, webcal_entry.cal_duration, " .
+    "webcal_entry_user.cal_status " .
+    "FROM webcal_entry, webcal_entry_user " .
+    "WHERE webcal_entry.cal_id = webcal_entry_user.cal_id " .
+    "AND ( webcal_entry.cal_ext_for_id IS NULL " .
+    "OR webcal_entry.cal_ext_for_id = 0 ) AND " .
+    "webcal_entry_user.cal_login = '$user' AND " .
+    "webcal_entry_user.cal_status = 'W' " .
+    "ORDER BY webcal_entry.cal_date";
+  $res = dbi_query ( $sql );
+  $count = 0;
+  $eventinfo = "";
+  if ( $res ) {
+    while ( $row = dbi_fetch_row ( $res ) ) {
+      if ($count == 0 ) { echo "<ul>\n"; }
+      $key++;
+      $id = $row[0];
+      $name = $row[1];
+      $description = $row[2];
+      $pri = $row[3];
+      $date = $row[4];
+      $time = $row[5];
+      $duration = $row[6];
+      $status = $row[7];
+      $divname = "eventinfo-$id-$key";
+      echo "<li><a title=\"" . 
+      		translate("View this entry") . "\" class=\"entry\" href=\"view_entry.php?id=$id&user=$user";
+      echo "\" onmouseover=\"window.status='" . translate("View this entry") .
+        "'; show(event, '$divname'); return true;\" onmouseout=\"hide('$divname'); return true;\">";
+      $timestr = "";
+      if ( $time > 0 ) {
+        $timestr = display_time ( $time );
+        if ( $duration > 0 ) {
+          // calc end time
+          $h = (int) ( $time / 10000 );
+          $m = ( $time / 100 ) % 100;
+          $m += $duration;
+          $d = $duration;
+          while ( $m >= 60 ) {
+            $h++;
+            $m -= 60;
+          }
+          $end_time = sprintf ( "%02d%02d00", $h, $m );
+          $timestr .= " - " . display_time ( $end_time );
+        }
+      }
+      echo htmlspecialchars ( $name );
+      echo "</a>";
+      echo " (" . date_to_str ($date) . ")\n";
+//approve
+      echo ": <a title=\"" . 
+	translate("Approve/Confirm") . "\"  href=\"approve_entry.php?id=$id&ret=list&user=$user";
+      if ( $user == "__public__" )
+        echo "&public=1";
+      echo "\" class=\"nav\" onclick=\"return confirm('" .
+        translate("Approve this entry?") . "');\">" . 
+	translate("Approve/Confirm") . "</a>, ";
+//reject
+      echo "<a title=\"" . 
+	translate("Reject") . "\" href=\"reject_entry.php?id=$id&ret=list&user=$user";
+      if ( $user == "__public__" )
+        echo "&public=1";
+      echo "\" class=\"nav\" onclick=\"return confirm('" .
+        translate("Reject this entry?") . "');\">" . 
+	translate("Reject") . "</a>";
+//delete
+      echo ", <a title=\"" . 
+	translate("Delete") . "\" href=\"del_entry.php?id=$id&ret=list";
+      if ( $user != $login )
+        echo "&user=$user";
+      echo "\" class=\"nav\" onclick=\"return confirm('" .
+        translate("Are you sure you want to delete this entry?") . "');\">" . 
+	translate("Delete") . "</a>";
+      echo "\n</li>\n";
+      $eventinfo .= build_event_popup ( $divname, $user, $description,
+        $timestr, site_extras_for_popup ( $id ));
+      $count++;
+    }
+    dbi_free_result ( $res );
+    if ($count > 0 ) { echo "</ul>\n"; }
+  }
+  if ( $count == 0 ) {
+    user_load_variables ( $user, "temp_" );
+    echo "<span class=\"nounapproved\">" . 
+	translate("No unapproved events for") . " " . $temp_fullname . ".</span>\n";
+  } else {
+    if ( ! empty ( $eventinfo ) ) echo $eventinfo;
+  }
+}
+?>
+
+<h2><?php 
+	etranslate("Unapproved Events"); 
+	if ( $user == '__public__' ) echo " - " . $PUBLIC_ACCESS_FULLNAME; 
+?></h2>
+<?php
+// List unapproved events for this user.
+list_unapproved ( ( $is_assistant || $is_nonuser_admin || $is_admin ) ? $user : $login );
+
+// Admin users can also approve Public Access events
+if ( $is_admin && $public_access == "Y" &&
+  ( empty ( $user ) || $user != '__public__' ) ) {
+  echo "\n<h3>" . translate ( "Public Access" ) . "</h3>\n";
+  list_unapproved ( "__public__" );
+}
+
+// NonUser calendar admins cal approve events on that specific NonUser
+// calendar.
+if ( $nonuser_enabled == 'Y' ) {
+  $admincals = get_nonuser_cals ( $login );
+  for ( $i = 0; $i < count ( $admincals ); $i++ ) {
+    echo "\n<h3>" . $admincals[$i]['cal_fullname'] . "</h3>\n";
+    list_unapproved ( $admincals[$i]['cal_login'] );
+  }
+}
+?>
+
+<?php print_trailer(); ?>
+</body>
+</html>
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/login.gif
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/login.gif	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/login.gif	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,10 @@
+GIF89a@ @ Æ  ÿÿÿÒÒÒ‚†Šòöújjj¾¾¾®®®bbbúúúÿÿÂrvz¶¶¶Z^bŠŽ’VbjvvvþþþÖÖÖæêîjnnRVZšššººº¢¢¢²²²’––‚Š’ÎÎÎnnnbffz~~ªªª¦¦¦^bf’’’îòöžžž~‚†îîînrvŠŠŠ~~~ÆÆÆÞÞÞæææÚÚÚfff†††zzz‚‚‚rrrâââÊÊÊŽŽŽfjr–––bbfrrvbfj†ŠŽzz~‚‚†z~‚öööêêêòòòÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ!ù
+  ,    @ @  þ€‚ƒ„…†‡ˆƒ‹‰‘’)$Ž’ ¡‡4 BA4«B A¢³ "4B¾"$A@´È‡±¹
+dž”ªÏÉÉœՈ)AÛÖ¡Ò) Å4Þã³4¢ê”î¡™*´4á÷$eˆðA(šd|CtÈÊ=\øȦ֨U ˜	…È^àˆˆÄG´ò} yè£ÉŒF²,dƒÉ’Ø8“.X ;¹²'¡|eÚàÐà¡^Hä€Õ«¨>dÀ)B>ýù`sÞÔ?ZaµZSíZ þD%{鬬
++¥‚5ˆ_!€SU Ûïì†V€?„EzU*TÈDãk98§Fˆ€
+ÜÜ@¬Rò`a³.c¨`Ö(†Î6Ihm!:lŠ>¨.wÁ!µ©$Réì÷Áª|"ïF†ª
+­Yp.ĢŜØÜ°áv…©¹ò°*®ëTA¢^Ïpur×Øß‚ F%„A§ÓúµÀu{î]­ãœ|óÕAM=Iã&—]u&®BZ"8“ëÁ`?Bhš„!¶Yi®9§‰MtÈ݇«„˜&•XÞG\e€,†èJ;MåPyFeUznb`öþ6UòHBŠ¨¸¢‘Ê÷Šlø-dS}3ÚD
+è×+LeT©„S^L ¦Š&T:g_CÑÍt‹ºÝb⓹©Š„åÑÀT,i"Ÿ¥ºÉ`U:#OS]PßV+HƒlåTR_‚ÈçYøÕ[¢ël@–iÇèrh¬³™L=•P¥I¬„\€ 
+84µYŒ35”K/aZhˆ~……jT	Ncª$” Ô!ÃŸiJ’DÂ7ý`²ÙOâZȁx>;"¡÷ðx(6™€–™ÜTwÉ·Z±„,%–¹m$ä’TB’t‹µù’@(ÔÇî“ð$è¬  T’ÅÈú ¸º	ì/wù2•ÎàÌäB¬rÁÄàÖi$i}ÀǦŠ›ȾhBÂj’±JÂ7cájƒ#€ò<˜å!‡é.¸;AäÎ×ú2Lþóðh¹4Ç
+ƒ’hĘ(ô=/Í`2ÂœÌ]MbÝ“Á
+õ#ÙØ¡|àضRßX’E–ÏÁ´4Ä¢ŒÍ=으€;¼RÚÖŠ~V(48$1èNɁR?9²æ´”ÀÕͬ z2,ôÖéã€%9ëS ;
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/login.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/login.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/login.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,330 @@
+<?php
+include "pre.php";
+include "./includes/config.php";
+include "./includes/php-dbi.php";
+include "./includes/functions.php";
+include "./includes/$user_inc";
+include "./includes/connect.php";
+
+// Change this to true to show "no such user" or "invalid password" on
+// login failures.
+$showLoginFailureReason = true;
+
+load_global_settings ();
+//ajout de fab
+
+
+
+//utilisation des cookies
+//modif du fichier include/user.php
+
+if($_GET['type'] == 'group'){
+	$group_id = getIntFromRequest('group_id');
+	//session_require(array('group'=>$group_id,'admin_flags'=>'A'));
+	
+	//choix du calendrier a afficher 
+	$sql_group = "SELECT unix_group_name FROM groups WHERE group_id = '".$_GET['group_id']."'" ;
+	$result_group = dbi_query ($sql_group);
+		if ( $result_group ) {
+			 if ( $row_group = dbi_fetch_row ( $result_group ) ) {
+		       $return_path = 'week.php?user='.$row_group[0];
+		     }
+		     dbi_free_result ( $result_group );
+		   }
+	//on log l'utilisateur
+	$sql = "SELECT user_name,user_pw FROM users WHERE user_id = '".user_getid()."'" ;		
+
+$result = dbi_query ($sql);
+		if ( $result ) {
+			 if ( $row_log = dbi_fetch_row ( $result ) ) {
+		       $_POST['login'] = $row_log[0];
+		     	$_POST['password'] = $row_log[1];
+		     
+		     }
+		     dbi_free_result ( $result );
+		   }
+	
+}
+
+
+if($_GET['type'] == 'user'){
+$sql = "SELECT user_name,user_pw FROM users WHERE user_id = '".user_getid()."'" ;	
+$result = dbi_query ($sql);
+		if ( $result ) {
+			 if ( $row_log = dbi_fetch_row ( $result ) ) {
+		       $_POST['login'] = $row_log[0];
+		     	$_POST['password'] = $row_log[1];
+		    
+		     }
+		     dbi_free_result ( $result );
+		   }
+}
+
+
+//fin ajout de fab
+if ( ! empty ( $last_login ) ) {
+  $login = "";
+}
+
+if ( empty ( $webcalendar_login ) ) {
+  $webcalendar_login = "";
+}
+
+if ( $remember_last_login == "Y" && empty ( $login ) ) {
+  $last_login = $login = $webcalendar_login;
+}
+
+
+include "includes/translate.php";
+
+// see if a return path was set
+if ( ! empty ( $return_path ) ) {
+  $return_path = clean_whitespace ( $return_path );
+  $url = $return_path;
+} else {
+  $url = "index.php";
+}
+$lang = '';
+if ( ! empty ( $LANGUAGE ) &&  $LANGUAGE != "Browser-defined" && $LANGUAGE != "none" ) {
+  $lang = languageToAbbrev ( $LANGUAGE );
+} else {
+  $lang_long = get_browser_language ();
+  $lang = languageToAbbrev ( $lang_long );
+}
+
+if ( empty ( $lang ) ) {
+  $lang = 'en';
+}
+
+$login = getPostValue ( 'login' );
+$password = getPostValue ( 'password' );
+
+if ( ! empty ( $settings['session'] ) && $settings['session'] = 'php' ) {
+  session_start ();
+}
+
+// calculate path for cookie
+if ( empty ( $PHP_SELF ) ) {
+  $PHP_SELF = $_SERVER["PHP_SELF"];
+}
+$cookie_path = str_replace ( "login.php", "", $PHP_SELF );
+//echo "Cookie path: $cookie_path\n$cookie_path1";
+
+if ( $single_user == "Y" ) {
+  // No login for single-user mode
+  do_redirect ( "index.php" );
+} else if ( $use_http_auth ) {
+  // There is no login page when using HTTP authorization
+  do_redirect ( "index.php" );
+} else {
+  if ( ! empty ( $login ) && ! empty ( $password ) ) {
+    if ( get_magic_quotes_gpc() ) {
+      $password = stripslashes ( $password );
+      $login = stripslashes ( $login );
+    }
+    $login = trim ( $login );
+    if ( $login != addslashes ( $login ) ) {
+      die_miserable_death ( "Illegal characters in login " .
+        "<tt>" . htmlentities ( $login ) . "</tt>" );
+    }
+    if ( user_valid_login ( $login, $password ) ) {
+      user_load_variables ( $login, "" );
+      // set login to expire in 365 days
+      srand((double) microtime() * 1000000);
+      $salt = chr( rand(ord('A'), ord('z'))) . chr( rand(ord('A'), ord('z')));
+      $encoded_login = encode_string ( $login . "|" . crypt($password, $salt) );
+
+      if ( ! empty ( $settings['session'] ) && $settings['session'] = 'php' ) {
+        $_SESSION['webcalendar_session'] = $encoded_login;
+      } else {
+        if ( ! empty ( $remember ) && $remember == "yes" ) {
+          SetCookie ( "webcalendar_session", $encoded_login,
+            time() + ( 24 * 3600 * 365 ), $cookie_path );
+        } else {
+          SetCookie ( "webcalendar_session", $encoded_login, 0, $cookie_path );
+        }
+      }
+load_user_preferences ();
+      // The cookie "webcalendar_login" is provided as a convenience to
+      // other apps that may wish to find out what the last calendar
+      // login was, so they can use week_ssi.php as a server-side include.
+      // As such, it's not a security risk to have it un-encoded since it
+      // is not used to allow logins within this app.  It is used to
+      // load user preferences on the login page (before anyone has
+      // logged in) if $remember_last_login is set to "Y" (in admin.php).
+      if ( ! empty ( $remember ) && $remember == "yes" ) {
+        SetCookie ( "webcalendar_login", $login,
+          time() + ( 24 * 3600 * 365 ), $cookie_path );
+      } else {
+        SetCookie ( "webcalendar_login", $login, 0, $cookie_path );
+      }
+      do_redirect ( $url );
+    } else {
+      // Invalid login
+      if ( empty ( $error ) || ! $showLoginFailureReason ) {
+        $error = translate("Invalid login" );
+      }
+    }
+  } else {
+    // No login info... just present empty login page
+    //$error = "Start";
+  }
+  // delete current user
+  SetCookie ( "webcalendar_session", "", 0, $cookie_path );
+  // In older versions the cookie path had no trailing slash and NS 4.78
+  // thinks "path/" and "path" are different, so the line above does not
+  // delete the "old" cookie. This prohibits the login. So we delete the
+  // cookie with the trailing slash removed
+  if (substr($cookie_path, -1) == '/') {
+    SetCookie ( "webcalendar_session", "", 0, substr($cookie_path, 0, -1)  );
+  }
+}
+$charset = ( ! empty ( $LANGUAGE )?translate("charset"): "iso-8859-1" );
+echo "<?xml version=\"1.0\" encoding=\"$charset\"?>" . "\n";
+?>
+<!DOCTYPE html
+    PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php echo $lang; ?>" lang="<?php echo $lang; ?>">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=<?php echo $charset; ?>" />
+<title><?php etranslate($application_name)?></title>
+<script type="text/javascript">
+// error check login/password
+function valid_form ( form ) {
+  if ( form.login.value.length == 0 || form.password.value.length == 0 ) {
+    alert ( "<?php etranslate("You must enter a login and password")?>." );
+    return false;
+  }
+  return true;
+}
+function myOnLoad() {
+  <?php if ( ! empty ( $plugins_enabled ) && ( $plugins_enabled ) ){ ?>
+   if (self != top)  {
+     window.open("login.php","_top","");
+     return;
+   }
+  <?php } ?>
+  document.login_form.login.focus();
+  <?php
+    if ( ! empty ( $login ) ) echo "document.login_form.login.select();";
+    if ( ! empty ( $error ) ) {
+      echo "  alert ( \"$error\" );\n";
+    }
+  ?>
+}
+</script>
+<?php 
+ include "includes/styles.php";
+
+ // Print custom header (since we do not call print_header function)
+ if ( ! empty ( $CUSTOM_SCRIPT ) && $CUSTOM_SCRIPT == 'Y' ) {
+   $res = dbi_query (
+     "SELECT cal_template_text FROM webcal_report_template " .
+     "WHERE cal_template_type = 'S' and cal_report_id = 0" );
+   if ( $res ) {
+     if ( $row = dbi_fetch_row ( $res ) ) {
+       echo $row[0];
+     }
+     dbi_free_result ( $res );
+   }
+ }
+?>
+</head>
+<body onload="myOnLoad();">
+<?php
+// Print custom header (since we do not call print_header function)
+if ( ! empty ( $CUSTOM_HEADER ) && $CUSTOM_HEADER == 'Y' ) {
+  $res = dbi_query (
+    "SELECT cal_template_text FROM webcal_report_template " .
+    "WHERE cal_template_type = 'H' and cal_report_id = 0" );
+  if ( $res ) {
+    if ( $row = dbi_fetch_row ( $res ) ) {
+      echo $row[0];
+    }
+    dbi_free_result ( $res );
+  }
+}
+?>
+
+<h2><?php 
+// If Application Name is set to Title then get translation
+// If not, use the Admin defined Application Name
+if ( ! empty ( $application_name ) &&  $application_name =="Title") {
+  etranslate($application_name);
+} else {
+  echo htmlspecialchars ( $application_name );
+}  
+?></h2>
+
+<?php
+if ( ! empty ( $error ) ) {
+  print "<span style=\"color:#FF0000; font-weight:bold;\">" . 
+    translate("Error") . ": $error</span><br />\n";
+} else {
+  print "<br />\n";
+}
+?>
+<form name="login_form" id="login" action="login.php" method="post" 
+  onsubmit="return valid_form(this)">
+<?php
+if ( ! empty ( $return_path ) ) {
+  echo "<input type=\"hidden\" name=\"return_path\" value=\"" .
+    htmlentities ( $return_path ) . "\" />\n";
+}
+?>
+
+<table cellpadding="10" align="center">
+<tr><td rowspan="2">
+ <img src="login.gif" alt="Login" /></td><td align="right">
+ <label for="user"><?php etranslate("Username")?>:</label></td><td>
+ <input name="login" id="user" size="15" maxlength="25" 
+   value="<?php if ( ! empty ( $last_login ) ) echo $last_login;?>" 
+   tabindex="1" />
+</td></tr>
+<tr><td style="text-align:right;">
+ <label for="password"><?php etranslate("Password")?>:</label></td><td>
+ <input name="password" id="password" type="password" size="15" 
+   maxlength="30" tabindex="2" />
+</td></tr>
+<tr><td colspan="3" style="font-size: 10px;">
+ <input type="checkbox" name="remember" id="remember" tabindex="3" 
+   value="yes" <?php if ( ! empty ( $remember ) && $remember == "yes" ) {
+     echo "checked=\"checked\""; }?> /><label for="remember"> 
+   <?php etranslate("Save login via cookies so I don't have to login next time")?></label>
+</td></tr>
+<tr><td colspan="4" style="text-align:center;">
+ <input type="submit" value="<?php etranslate("Login")?>" tabindex="4" />
+</td></tr>
+</table>
+</form>
+
+<?php if ( ! empty ( $public_access ) && $public_access == "Y" ) { ?>
+ <br /><br />
+ <a class="nav" href="index.php">
+   <?php etranslate("Access public calendar")?></a><br />
+<?php } ?>
+
+<?php if ( $demo_mode == "Y" ) {
+ // This is used on the sourceforge demo page
+ echo "Demo login: user = \"demo\", password = \"demo\"<br />";
+} ?>
+<br /><br /><br />
+<span class="cookies"><?php etranslate("cookies-note")?></span><br />
+<hr />
+<br /><br />
+<a href="<?php echo $PROGRAM_URL ?>" id="programname"><?php echo $PROGRAM_NAME?></a>
+
+<?php // Print custom trailer (since we do not call print_trailer function)
+if ( ! empty ( $CUSTOM_TRAILER ) && $CUSTOM_TRAILER == 'Y' ) {
+  $res = dbi_query (
+    "SELECT cal_template_text FROM webcal_report_template " .
+    "WHERE cal_template_type = 'T' and cal_report_id = 0" );
+  if ( $res ) {
+    if ( $row = dbi_fetch_row ( $res ) ) {
+      echo $row[0];
+    }
+    dbi_free_result ( $res );
+  }
+} ?>
+</body>
+</html>
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/month.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/month.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/month.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,184 @@
+<?php
+include_once 'includes/init.php';
+
+if (($user != $login) && $is_nonuser_admin) {
+  load_user_layers ($user);
+} else {
+  load_user_layers ();
+}
+
+load_user_categories ();
+
+$next = mktime ( 3, 0, 0, $thismonth + 1, 1, $thisyear );
+$nextyear = date ( "Y", $next );
+$nextmonth = date ( "m", $next );
+//$nextdate = date ( "Ymd" );
+
+$prev = mktime ( 3, 0, 0, $thismonth - 1, 1, $thisyear );
+$prevyear = date ( "Y", $prev );
+$prevmonth = date ( "m", $prev );
+//$prevdate = date ( "Ymd" );
+
+if ( ! empty ( $bold_days_in_year ) && $bold_days_in_year == 'Y' ) {
+  $boldDays = true;
+  $startdate = sprintf ( "%04d%02d01", $prevyear, $prevmonth );
+  $enddate = sprintf ( "%04d%02d31", $nextyear, $nextmonth );
+} else {
+  $boldDays = false;
+  $startdate = sprintf ( "%04d%02d01", $thisyear, $thismonth );
+  $enddate = sprintf ( "%04d%02d31", $thisyear, $thismonth );
+}
+
+$HeadX = '';
+if ( $auto_refresh == "Y" && ! empty ( $auto_refresh_time ) ) {
+  $refresh = $auto_refresh_time * 60; // convert to seconds
+  $HeadX = "<meta http-equiv=\"refresh\" content=\"$refresh; url=month.php?$u_url" .
+    "year=$thisyear&month=$thismonth$caturl" . 
+    ( ! empty ( $friendly ) ? "&friendly=1" : "") . "\" />\n";
+}
+$INC = array('js/popups.php');
+print_header($INC,$HeadX);
+
+/* Pre-Load the repeated events for quicker access */
+$repeated_events = read_repeated_events (
+  ( ! empty ( $user ) && strlen ( $user ) ) ? $user : $login, $cat_id, $startdate );
+
+/* Pre-load the non-repeating events for quicker access */
+$events = read_events ( ( ! empty ( $user ) && strlen ( $user ) )
+  ? $user : $login, $startdate, $enddate, $cat_id );
+
+if ( ! empty ( $cat_id ) )
+  $monthURL = "month.php?cat_id=$cat_id&";
+else
+  $monthURL = 'month.php?';
+display_small_month ( $prevmonth, $prevyear, true, true, "prevmonth",
+  $monthURL );
+display_small_month ( $nextmonth, $nextyear, true, true, "nextmonth",
+  $monthURL );
+?>
+<div class="title">
+<span class="date"><br /><?php
+  echo date_to_str ( sprintf ( "%04d%02d01", $thisyear, $thismonth ),
+    $DATE_FORMAT_MY, false, false );
+?></span>
+<span class="user"><?php
+  if ( $single_user == "N" ) {
+    echo "<br />\n";
+    echo $user_fullname;
+  }
+  if ( $is_nonuser_admin ) {
+    echo "<br />-- " . translate("Admin mode") . " --";
+  }
+  if ( $is_assistant ) {
+    echo "<br />-- " . translate("Assistant mode") . " --";
+  }
+?></span>
+<?php
+  if ( $categories_enabled == "Y" && (!$user || ($user == $login || $is_assistant ))) {
+    echo "<br /><br />\n";
+    print_category_menu('month',sprintf ( "%04d%02d01",$thisyear, $thismonth ),$cat_id );
+  }
+?>
+</div>
+
+<table class="main" style="clear:both;" cellspacing="0" cellpadding="0">
+<tr>
+ <?php if ( $WEEK_START == 0 ) { ?>
+  <th><?php etranslate("Sun")?></th>
+ <?php } ?>
+ <th><?php etranslate("Mon")?></th>
+ <th><?php etranslate("Tue")?></th>
+ <th><?php etranslate("Wed")?></th>
+ <th><?php etranslate("Thu")?></th>
+ <th><?php etranslate("Fri")?></th>
+ <th><?php etranslate("Sat")?></th>
+ <?php if ( $WEEK_START == 1 ) { ?>
+  <th><?php etranslate("Sun")?></th>
+ <?php } ?>
+</tr>
+<?php
+
+// We add 2 hours on to the time so that the switch to DST doesn't
+// throw us off.  So, all our dates are 2AM for that day.
+//$sun = get_sunday_before ( $thisyear, $thismonth, 1 );
+if ( $WEEK_START == 1 ) {
+  $wkstart = get_monday_before ( $thisyear, $thismonth, 1 );
+} else {
+  $wkstart = get_sunday_before ( $thisyear, $thismonth, 1 );
+}
+// generate values for first day and last day of month
+$monthstart = mktime ( 3, 0, 0, $thismonth, 1, $thisyear );
+$monthend = mktime ( 3, 0, 0, $thismonth + 1, 0, $thisyear );
+
+// debugging
+//echo "<p>sun = " . date ( "D, m-d-Y", $sun ) . "</p>\n";
+//echo "<p>monthstart = " . date ( "D, m-d-Y", $monthstart ) . "</p>\n";
+//echo "<p>monthend = " . date ( "D, m-d-Y", $monthend ) . "</p>\n";
+
+// NOTE: if you make HTML changes to this table, make the same changes
+// to the example table in pref.php.
+for ( $i = $wkstart; date ( "Ymd", $i ) <= date ( "Ymd", $monthend );
+  $i += ( 24 * 3600 * 7 ) ) {
+  print "<tr>\n";
+  for ( $j = 0; $j < 7; $j++ ) {
+    $date = $i + ( $j * 24 * 3600 );
+    if ( date ( "Ymd", $date ) >= date ( "Ymd", $monthstart ) &&
+      date ( "Ymd", $date ) <= date ( "Ymd", $monthend ) ) {
+      $thiswday = date ( "w", $date );
+      $is_weekend = ( $thiswday == 0 || $thiswday == 6 );
+      if ( empty ( $WEEKENDBG ) ) {
+        $is_weekend = false;
+      }
+      print "<td";
+      $class = "";
+      if ( date ( "Ymd", $date  ) == date ( "Ymd", $today ) ) {
+        $class = "today";
+      }
+      if ( $is_weekend ) {
+        if ( strlen ( $class ) ) {
+          $class .= " ";
+        }
+        $class .= "weekend";
+      }
+      if ( strlen ( $class ) )  {
+      echo " class=\"$class\"";
+      }
+      echo ">";
+      //echo date ( "D, m-d-Y H:i:s", $date ) . "<br />";
+      print_date_entries ( date ( "Ymd", $date ),
+        ( ! empty ( $user ) ) ? $user : $login, false );
+      print "</td>\n";
+    } else {
+      print "<td> </td>\n";
+    }
+  }
+  print "</tr>\n";
+}
+?></table>
+<br />
+<?php
+ if ( ! empty ( $eventinfo ) ) echo $eventinfo;
+
+ display_unapproved_events ( ( $is_assistant || $is_nonuser_admin ? $user : $login ) );
+?>
+
+<br />
+<a title="<?php etranslate("Generate printer-friendly version")?>" 
+class="printer" href="month.php?<?php
+   if ( $thisyear ) {
+    echo "year=$thisyear&month=$thismonth&";
+   }
+   if ( ! empty ( $user ) ) {
+     echo "user=$user&";
+   }
+   if ( ! empty ( $cat_id ) ) {
+     echo "cat_id=$cat_id&";
+   }
+  ?>friendly=1" target="cal_printer_friendly" 
+onmouseover="window.status = '<?php etranslate("Generate printer-friendly version")
+  ?>'">[<?php etranslate("Printer Friendly")?>]</a>
+<?php
+ print_trailer ();
+?>
+</body>
+</html>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/new.gif
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/new.gif	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/new.gif	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,8 @@
+GIF89a
+ 
+ öB    &&&(((+++...000222333666777:::;;;???@@@KKKMMMQQQTTTUUUXXXYYYZZZ]]]aaabbbccceeefffiiijjjkkklllpppqqqrrrzzz{{{†††‰‰‰ŠŠŠ‹‹‹   £££¤¤¤¨¨¨¬¬¬³³³ºººÅÅÅÈÈÈÉÉÉÊÊÊÌÌÌÓÓÓÕÕÕÜÜÜõõõöööùùùýýýþþþÿÿÿÿÿÿ                                                                                                                                                                                    !ù  C ,    
+ 
+  _€CC$*)‚C8.;4"(
+C5<><!0#2!™":AABBª3179@?65,	% 
+=<&/¿- C
++'Š	ÍC ;
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/nonusers.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/nonusers.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/nonusers.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,39 @@
+<?php
+if ( ! $is_admin ) {
+  echo "<h2>" . translate("Error") . "</h2>\n" . 
+  		translate("You are not authorized") . ".\n";
+  echo "</body>\n</html>";
+  exit;
+}
+if ( ! $NONUSER_PREFIX ) {
+  echo "<h2>" . translate("Error") . "</h2>\n" . 
+  		translate("NONUSER_PREFIX not set") . ".\n";
+  echo "</body>\n</html>";
+  exit;
+}
+$add = getValue ( "add" );
+?>
+	<a name="tabnonusers"></a>
+	<div id="tabscontent_nonusers">
+<?php
+if ( empty ($error) ) {
+  echo "<a title=\"" . 
+	translate("Add New NonUser Calendar") . "\" href=\"edit_nonusers.php?add=1\" target=\"nonusersiframe\" onclick=\"javascript:show('nonusersiframe');\">" . 
+	translate("Add New NonUser Calendar") . "</a><br />\n";
+  // Displaying NonUser Calendars
+  $userlist = get_nonuser_cals ();
+  if ( ! empty ( $userlist ) ) {
+    echo "<ul>";
+    for ( $i = 0; $i < count ( $userlist ); $i++ ) {
+      echo "<li><a title=\"" . 
+      	$userlist[$i]['cal_fullname'] . "\" href=\"edit_nonusers.php?nid=" . 
+	$userlist[$i]["cal_login"] . "\" target=\"nonusersiframe\" onclick=\"javascript:show('nonusersiframe');\">" . 
+	$userlist[$i]['cal_fullname'] . "</a></li>\n";
+    }
+    echo "</ul>";
+  }
+}
+
+echo "<iframe name=\"nonusersiframe\" id=\"nonusersiframe\" style=\"width:90%;border-width:0px; height:250px;\"></iframe>";
+?>
+</div>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/nonusers_handler.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/nonusers_handler.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/nonusers_handler.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,102 @@
+<?php
+include_once 'includes/init.php';
+load_user_layers ();
+
+if ( ! $is_admin ) {
+  echo "<h2>" . translate("Error") .
+    "</h2>" . translate("You are not authorized") . ".\n";
+  print_trailer ();
+  echo "</body></html>\n";
+  exit;
+}
+$error = "";
+
+if ( $action == "Delete" || $action == translate ("Delete") ) {
+  // delete this nonuser calendar
+  $user = $nid;
+
+  // Get event ids for all events this user is a participant
+  $events = array ();
+  $res = dbi_query ( "SELECT webcal_entry.cal_id " .
+    "FROM webcal_entry, webcal_entry_user " .
+    "WHERE webcal_entry.cal_id = webcal_entry_user.cal_id " .
+    "AND webcal_entry_user.cal_login = '$user'" );
+  if ( $res ) {
+    while ( $row = dbi_fetch_row ( $res ) ) {
+      $events[] = $row[0];
+    }
+  }
+
+  // Now count number of participants in each event...
+  // If just 1, then save id to be deleted
+  $delete_em = array ();
+  for ( $i = 0; $i < count ( $events ); $i++ ) {
+    $res = dbi_query ( "SELECT COUNT(*) FROM webcal_entry_user " .
+      "WHERE cal_id = " . $events[$i] );
+    if ( $res ) {
+      if ( $row = dbi_fetch_row ( $res ) ) {
+        if ( $row[0] == 1 )
+	  $delete_em[] = $events[$i];
+      }
+      dbi_free_result ( $res );
+    }
+  }
+  // Now delete events that were just for this user
+  for ( $i = 0; $i < count ( $delete_em ); $i++ ) {
+    dbi_query ( "DELETE FROM webcal_entry WHERE cal_id = " . $delete_em[$i] );
+  }
+
+  // Delete user participation from events
+  dbi_query ( "DELETE FROM webcal_entry_user WHERE cal_login = '$user'" );
+
+  // Delete any layers other users may have that point to this user.
+  dbi_query ( "DELETE FROM webcal_user_layers WHERE cal_layeruser = '$user'" );
+
+  // Delete user
+  if ( ! dbi_query ( "DELETE FROM webcal_nonuser_cals WHERE cal_login = '$user'" ) )
+     $error = translate ("Database error") . ": " . dbi_error();
+
+} else {
+  if ( $action == "Save" || $action == translate ("Save") ) {
+  // Updating
+    $sql = "UPDATE webcal_nonuser_cals SET ";
+    if ($nlastname) $sql .= " cal_lastname = '$nlastname', ";
+    if ($nfirstname) $sql .= " cal_firstname = '$nfirstname', ";
+    $sql .= "cal_admin = '$nadmin' WHERE cal_login = '$nid'";
+    if ( ! dbi_query ( $sql ) ) {
+      $error = translate ("Database error") . ": " . dbi_error();
+    }
+  } else {
+  // Adding
+    if (preg_match( "/^[\w]+$/", $nid )) {
+      $nid = $NONUSER_PREFIX.$nid;
+      $sql = "INSERT INTO webcal_nonuser_cals " .
+      "( cal_login, cal_firstname, cal_lastname, cal_admin ) " .
+      "VALUES ( '$nid', '$nfirstname', '$nlastname', '$nadmin' )";
+      if ( ! dbi_query ( $sql ) ) {
+        $error = translate ("Database error") . ": " . dbi_error();
+      }
+    } else {
+      $error = translate ("Calendar ID")." ".translate ("word characters only").".";
+    }
+  }
+}
+if ( empty ( $error ) ) do_redirect ( "nonusers.php" );
+
+print_header();
+?>
+
+<h2><?php etranslate("Error")?></h2>
+
+<blockquote>
+<?php
+
+echo $error;
+//if ( $sql != "" )
+//  echo "<br /><br /><b>SQL:</b> $sql";
+//?>
+</blockquote>
+
+<?php print_trailer(); ?>
+</body>
+</html>
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/pix.gif
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/pix.gif	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/pix.gif	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1 @@
+GIF89a  €     ÿÿÿ!þCreated with The GIMP ,       D ;
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/pixb.gif
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/pixb.gif	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/pixb.gif	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1 @@
+GIF87a  €  B~Ýÿÿÿ,       D ;
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/pref.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/pref.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/pref.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,538 @@
+<?php
+include_once 'includes/init.php';
+
+if ($user != $login)
+  $user = (($is_admin || $is_nonuser_admin) && $user) ? $user : $login;
+
+// Load categories only if editing our own calendar
+if (!$user || $user == $login) load_user_categories ();
+
+// Reload preferences into $prefarray[].
+// Get system settings first.
+$updating_public = false;
+$prefarray = array ();
+$prefarray['EMAIL_ASSISTANT_EVENTS'] =
+  $prefarray['APPROVE_ASSISTANT_EVENT'] = ''; // no undefined vars message
+$res = dbi_query ( "SELECT cal_setting, cal_value FROM webcal_config " );
+if ( $res ) {
+  while ( $row = dbi_fetch_row ( $res ) ) {
+    $prefarray[$row[0]] = $row[1];
+  }
+  dbi_free_result ( $res );
+}
+if ( $is_admin && ! empty ( $public ) && $public_access == "Y" ) {
+  $updating_public = true;
+  $res = dbi_query ( "SELECT cal_setting, cal_value FROM webcal_user_pref " .
+    "WHERE cal_login = '__public__'" );
+} else {
+  $res = dbi_query ( "SELECT cal_setting, cal_value FROM webcal_user_pref " .
+    "WHERE cal_login = '$user'" );
+}
+if ( $res ) {
+  while ( $row = dbi_fetch_row ( $res ) ) {
+    $prefarray[$row[0]] = $row[1];
+  }
+  dbi_free_result ( $res );
+}
+
+$INC = array('js/pref.php');
+print_header($INC);
+?>
+
+<h2><?php
+	if ( $updating_public )
+		echo translate($PUBLIC_ACCESS_FULLNAME) . " ";
+	etranslate("Preferences");
+	if ( $is_nonuser_admin ) {
+		nonuser_load_variables ( $user, "nonuser" );
+		echo "<br /><strong>-- " . 
+			translate("Admin mode") . ": ".$nonuserfullname." --</strong>\n";
+	}
+?> <img src="help.gif" alt="<?php etranslate("Help")?>" class="help" onclick="window.open ( 'help_pref.php', 'cal_help', 'dependent,menubar,scrollbars,height=400,width=400,innerHeight=420,outerWidth=420');" /></h2>
+
+<a title="<?php etranslate("Admin") ?>" class="nav" href="adminhome.php">« <?php etranslate("Admin") ?></a><br /><br />
+
+<form action="pref_handler.php" method="post" onsubmit="return valid_form(this);" name="prefform">
+<?php 
+	if ($user) 
+		echo "<input type=\"hidden\" name=\"user\" value=\"$user\" />\n";
+?>
+
+<?php if ( $updating_public ) { ?>
+	<input type="hidden" name="public" value="1" />
+<?php } /*if ( $updating_public )*/ ?>
+
+<table style="border-width:0px;"><tr><td>
+<input type="submit" value="<?php etranslate("Save Preferences")?>" name="" />
+</td></tr></table>
+<br />
+
+<?php
+	if ( $is_admin ) {
+	  if ( empty ( $public ) && $public_access == "Y") {
+	    echo "<blockquote><a href=\"pref.php?public=1\">" .
+	      translate("Click here") . " " .
+	      translate("to modify the preferences for the Public Access calendar") .
+	      "</a></blockquote>\n";
+	  }
+	}
+?>
+<table class="standard" cellspacing="1" cellpadding="2">
+<tr><th colspan="2"><?php etranslate("Settings");?></th></tr>
+<tr><td class="tooltipselect" title="<?php etooltip("language-help");?>">
+	<label for="pref_lang"><?php etranslate("Language")?>:</label></td><td>
+	<select name="pref_LANGUAGE" id="pref_lang">
+<?php
+	reset ( $languages );
+	while ( list ( $key, $val ) = each ( $languages ) ) {
+	  // Don't allow users to select browser-defined.  We want them to pick
+	  // a language so that when we send reminders (done without the benefit
+	  // of a browser-preferred language), we'll know which language to use.
+	  // DO let them select browser-defined for the public user.
+	  if ( $key != "Browser-defined" || $updating_public ) {
+	    echo "<option value=\"" . $val . "\"";
+	    if ( $val == $prefarray["LANGUAGE"] ) echo " selected=\"selected\"";
+	    echo ">" . translate( $key ) . "</option>\n";
+	  }
+	}
+?>
+	</select>
+	<br />
+	<?php echo translate("Your browser default language is") . " " . translate ( get_browser_language () ) . "."; ?>
+</td></tr>
+<tr><td class="tooltipselect" title="<?php etooltip("tz-help")?>">
+	<label for="pref_tz"><?php etranslate("Timezone Offset")?>:</label></td><td>
+	<select name="pref_TZ_OFFSET" id="pref_tz">
+  <?php
+  $text_add = translate("Add N hours to");
+  $text_sub = translate("Subtract N hours from");
+  if ( empty ( $prefarray["TZ_OFFSET"] ) )
+    $prefarray["TZ_OFFSET"] = 0;
+  for ( $i = -12; $i <= 12; $i++ ) {
+    echo "<option value=\"$i\"";
+    if ( $prefarray["TZ_OFFSET"] == $i ) echo " selected=\"selected\"";
+    echo ">";
+    if ( $i < 0 )
+      echo str_replace ( "N", -$i, $text_sub ) . "</option>\n";
+    else if ( $i == 0 )
+      echo "" . etranslate("same as") . "</option>\n";
+    else
+      echo str_replace ( "N", $i, $text_add ) . "</option>\n";
+  }
+  ?>
+	</select> <?php etranslate("server time");?>
+</td></tr>
+<tr><td class="tooltipselect" title="<?php etooltip("fonts-help")?>">
+	<label for="pref_font"><?php etranslate("Fonts")?>:</label></td><td>
+	<input type="text" size="40" name="pref_FONTS" id="pref_font" value="<?php echo htmlspecialchars ( $prefarray["FONTS"] );?>" />
+</td></tr>
+
+<tr><td class="tooltip" title="<?php etooltip("preferred-view-help");?>"><?php etranslate("Preferred view")?>:</td><td>
+<select name="pref_STARTVIEW">
+<?php
+// For backwards compatibility.  We used to store without the .php extension
+if ( $prefarray['STARTVIEW'] == 'month' || $prefarray['STARTVIEW'] == 'day' ||
+  $prefarray['STARTVIEW'] == 'week' || $prefarray['STARTVIEW'] == 'year' )
+  $prefarray['STARTVIEW'] .= '.php';
+?>
+<option value="day.php" <?php if ( $prefarray["STARTVIEW"] == "day.php" ) echo " selected=\"selected\"";?>><?php etranslate("Day")?></option>
+<option value="week.php" <?php if ( $prefarray["STARTVIEW"] == "week.php" ) echo " selected=\"selected\"";?>><?php etranslate("Week")?></option>
+<option value="month.php" <?php if ( $prefarray["STARTVIEW"] == "month.php" ) echo " selected=\"selected\"";?>><?php etranslate("Month")?></option>
+<option value="year.php" <?php if ( $prefarray["STARTVIEW"] == "year.php" ) echo " selected=\"selected\"";?>><?php etranslate("Year")?></option>
+<?php
+// Allow user to select a view also
+for ( $i = 0; $i < count ( $views ); $i++ ) {
+  $xurl = $views[$i]['url'];
+  echo "<option value=\"";
+  echo $xurl . "\" ";
+  $xurl_strip = str_replace ( "&", "&", $xurl );
+  if ( $STARTVIEW == $xurl_strip )
+    echo "selected=\"selected\" ";
+  echo ">" . $views[$i]['cal_name'] . "</option>\n";
+}
+?>
+</select>
+</td></tr>
+
+<tr><td class="tooltip" title="<?php etooltip("display-weekends-help");?>">
+	<?php etranslate("Display weekends in week view")?>:</td><td>
+	<label><input type="radio" name="pref_DISPLAY_WEEKENDS" value="Y" <?php if ( $prefarray["DISPLAY_WEEKENDS"] != "N" ) echo " checked=\"checked\"";?> /> <?php etranslate("Yes")?></label> 
+	<label><input type="radio" name="pref_DISPLAY_WEEKENDS" value="N" <?php if ( $prefarray["DISPLAY_WEEKENDS"] == "N" ) echo " checked=\"checked\"";?> /> <?php etranslate("No")?></label>
+</td></tr>
+
+<tr><td class="tooltip" title="<?php etooltip("display-desc-print-day-help");?>">
+	<?php etranslate("Display description in printer day view")?>:</td><td>
+	<label><input type="radio" name="pref_DISPLAY_DESC_PRINT_DAY" value="Y" <?php if ( $prefarray["DISPLAY_DESC_PRINT_DAY"] == "Y" ) echo " checked=\"checked\"";?> /> <?php etranslate("Yes")?></label> 
+	<label><input type="radio" name="pref_DISPLAY_DESC_PRINT_DAY" value="N" <?php if ( $prefarray["DISPLAY_DESC_PRINT_DAY"] != "Y" ) echo " checked=\"checked\"";?> /> <?php etranslate("No")?></label>
+</td></tr>
+
+<tr><td class="tooltipselect" title="<?php etooltip("date-format-help");?>">
+	<?php etranslate("Date format")?>:</td><td>
+	<select name="pref_DATE_FORMAT">
+  <?php
+  // You can add new date formats below if you want.
+  // but also add in admin.php.
+  $datestyles = array (
+    "__month__ __dd__, __yyyy__", translate("December") . " 31, 2000",
+    "__dd__ __month__, __yyyy__", "31 " . translate("December") . ", 2000",
+    "__dd__-__month__-__yyyy__", "31-" . translate("December") . "-2000",
+    "__dd__-__month__-__yy__", "31-" . translate("December") . "-00",
+    "__mm__/__dd__/__yyyy__", "12/31/2000",
+    "__mm__/__dd__/__yy__", "12/31/00",
+    "__mm__-__dd__-__yyyy__", "12-31-2000",
+    "__mm__-__dd__-__yy__", "12-31-00",
+    "__yyyy__-__mm__-__dd__", "2000-12-31",
+    "__yy__-__mm__-__dd__", "00-12-31",
+    "__yyyy__/__mm__/__dd__", "2000/12/31",
+    "__yy__/__mm__/__dd__", "00/12/31",
+    "__dd__/__mm__/__yyyy__", "31/12/2000",
+    "__dd__/__mm__/__yy__", "31/12/00",
+    "__dd__-__mm__-__yyyy__", "31-12-2000",
+    "__dd__-__mm__-__yy__", "31-12-00"
+  );
+  for ( $i = 0; $i < count ( $datestyles ); $i += 2 ) {
+    echo "<option value=\"" . $datestyles[$i] . "\"";
+    if ( $prefarray["DATE_FORMAT"] == $datestyles[$i] )
+      echo " selected=\"selected\"";
+    echo ">" . $datestyles[$i + 1] . "</option>\n";
+  }
+  ?>
+</select>
+<br />
+<select name="pref_DATE_FORMAT_MY">
+<?php
+  // Date format for a month and year (with no day of the month)
+  // You can add new date formats below if you want.
+  // but also add in admin.php.
+  $datestyles = array (
+    "__month__ __yyyy__", translate("December") . " 2000",
+    "__month__ __yy__", translate("December") . " 00",
+    "__month__-__yyyy__", translate("December") . "-2000",
+    "__month__-yy", translate("December") . "-00",
+    "__mm__/__yyyy__", "12/2000",
+    "__mm__/__yy__", "12/00",
+    "__mm__-__yyyy__", "12-2000",
+    "__mm__-__yy__", "12-00",
+    "__yyyy__-__mm__", "2000-12",
+    "__yy__-__mm__", "00-12",
+    "__yyyy__/__mm__", "2000/12",
+    "__yy__/__mm__", "00/12"
+  );
+  for ( $i = 0; $i < count ( $datestyles ); $i += 2 ) {
+    echo "<option value=\"" . $datestyles[$i] . "\"";
+    if ( $prefarray["DATE_FORMAT_MY"] == $datestyles[$i] )
+      echo " selected=\"selected\"";
+    echo ">" . $datestyles[$i + 1] . "</option>\n";
+  }
+?>
+</select>
+<br />
+<select name="pref_DATE_FORMAT_MD">
+<?php
+  // Date format for a month and day (with no year displayed)
+  // You can add new date formats below if you want.
+  // but also add in admin.php.
+  $datestyles = array (
+    "__month__ __dd__", translate("December") . " 31",
+    "__month__-__dd__", translate("December") . "-31",
+    "__mm__/__dd__", "12/31",
+    "__mm__-__dd__", "12-31",
+    "__dd__/__mm__", "31/12",
+    "__dd__-__mm__", "31-12"
+  );
+  for ( $i = 0; $i < count ( $datestyles ); $i += 2 ) {
+    echo "<option value=\"" . $datestyles[$i] . "\"";
+    if ( $prefarray["DATE_FORMAT_MD"] == $datestyles[$i] )
+      echo " selected=\"selected\"";
+    echo ">" . $datestyles[$i + 1] . "</option>\n";
+  }
+?>
+</select>
+</td></tr>
+
+<tr><td class="tooltip" title="<?php etooltip("time-format-help")?>">
+	<?php etranslate("Time format")?>:</td><td>
+	<label><input type="radio" name="pref_TIME_FORMAT" value="12" <?php if ( $prefarray["TIME_FORMAT"] == "12" ) echo " checked=\"checked\"";?> /> <?php etranslate("12 hour")?></label> 
+	<label><input type="radio" name="pref_TIME_FORMAT" value="24" <?php if ( $prefarray["TIME_FORMAT"] != "12" ) echo " checked=\"checked\"";?> /> <?php etranslate("24 hour")?></label>
+</td></tr>
+
+<tr><td class="tooltip" title="<?php etooltip("time-interval-help")?>">
+	<?php etranslate("Time interval")?>:</td><td>
+	<select name="pref_TIME_SLOTS">
+		<option value="24" <?php if ( $prefarray["TIME_SLOTS"] == "24" ) echo " selected=\"selected\""?>>1 <?php etranslate("hour")?></option>
+		<option value="48" <?php if ( $prefarray["TIME_SLOTS"] == "48" ) echo " selected=\"selected\""?>>30 <?php etranslate("minutes")?></option>
+		<option value="72" <?php if ( $prefarray["TIME_SLOTS"] == "72" ) echo " selected=\"selected\""?>>20 <?php etranslate("minutes")?></option>
+		<option value="144" <?php if ( $prefarray["TIME_SLOTS"] == "144" ) echo " selected=\"selected\""?>>10 <?php etranslate("minutes")?></option>
+	</select>
+</td></tr>
+
+<tr><td class="tooltip" title="<?php etooltip("auto-refresh-help");?>">
+	<?php etranslate("Auto-refresh calendars")?>:</td><td>
+	<label><input type="radio" name="pref_auto_refresh" value="Y" <?php if ( $prefarray["auto_refresh"] == "Y" ) echo " checked=\"checked\"";?> /> <?php etranslate("Yes")?></label> 
+	<label><input type="radio" name="pref_auto_refresh" value="N" <?php if ( $prefarray["auto_refresh"] != "Y" ) echo " checked=\"checked\"";?> /> <?php etranslate("No")?></label>
+</td></tr>
+
+<tr><td class="tooltip" title="<?php etooltip("auto-refresh-time-help");?>">
+	    <?php etranslate("Auto-refresh time")?>:</td><td>
+	<input type="text" name="pref_auto_refresh_time" size="4" value="<?php if ( empty ( $prefarray["auto_refresh_time"] ) ) echo "0"; else echo $prefarray["auto_refresh_time"]; ?>" /> <?php etranslate("minutes")?>
+</td></tr>
+
+<tr><td class="tooltip" title="<?php etooltip("display-unapproved-help");?>">
+	<?php etranslate("Display unapproved")?>:</td><td>
+	<label><input type="radio" name="pref_DISPLAY_UNAPPROVED" value="Y" <?php if ( $prefarray["DISPLAY_UNAPPROVED"] != "N" ) echo " checked=\"checked\"";?> /> <?php etranslate("Yes")?></label> 
+	<label><input type="radio" name="pref_DISPLAY_UNAPPROVED" value="N" <?php if ( $prefarray["DISPLAY_UNAPPROVED"] == "N" ) echo " checked=\"checked\"";?> /> <?php etranslate("No")?></label>
+</td></tr>
+<tr><td class="tooltip" title="<?php etooltip("display-week-number-help")?>">
+	<?php etranslate("Display week number")?>:</td><td>
+	<label><input type="radio" name="pref_DISPLAY_WEEKNUMBER" value="Y" <?php if ( $DISPLAY_WEEKNUMBER != "N" ) echo " checked=\"checked\"";?> /> <?php etranslate("Yes")?></label> 
+	<label><input type="radio" name="pref_DISPLAY_WEEKNUMBER" value="N" <?php if ( $prefarray["DISPLAY_WEEKNUMBER"] == "N" ) echo " checked=\"checked\"";?> /> <?php etranslate("No")?></label>
+</td></tr>
+<tr><td class="tooltip" title="<?php etooltip("display-week-starts-on")?>">
+	<?php etranslate("Week starts on")?>:</td><td>
+	<label><input type="radio" name="pref_WEEK_START" value="0" <?php if ( $prefarray["WEEK_START"] != "1" ) echo " checked=\"checked\"";?> /> <?php etranslate("Sunday")?></label> 
+	<label><input type="radio" name="pref_WEEK_START" value="1" <?php if ( $prefarray["WEEK_START"] == "1" ) echo " checked=\"checked\"";?> /> <?php etranslate("Monday")?></label>
+</td></tr>
+<tr><td class="tooltip" title="<?php etooltip("work-hours-help")?>">
+	<?php etranslate("Work hours")?>:</td><td>
+	<label for="pref_starthr"><?php etranslate("From")?></label> 
+	<select name="pref_WORK_DAY_START_HOUR" id="pref_starthr">
+<?php
+  if ( empty ( $prefarray["WORK_DAY_START_HOUR"] ) ) {
+    $prefarray["WORK_DAY_START_HOUR"] = $WORK_DAY_START_HOUR;
+    $prefarray["WORK_DAY_END_HOUR"] = $WORK_DAY_END_HOUR;
+  }
+  for ( $i = 0; $i < 24; $i++ ) {
+    echo "<option value=\"$i\"" .
+      ( $i == $prefarray["WORK_DAY_START_HOUR"] ? " selected=\"selected\"" : "" ) .
+      ">" . display_time ( $i * 10000, 1 ) . "</option>\n";
+  }
+?>
+	</select> 
+	<label for="pref_endhr"><?php etranslate("to")?></label>
+	<select name="pref_WORK_DAY_END_HOUR" id="pref_endhr">
+<?php
+	for ( $i = 0; $i < 24; $i++ ) {
+		echo "<option value=\"$i\"" .
+			( $i == $prefarray["WORK_DAY_END_HOUR"] ? " selected=\"selected\"" : "" ) .
+			">" . display_time ( $i * 10000, 1 ) . "</option>\n";
+	}
+?>
+	</select>
+</td></tr>
+
+<tr><td class="tooltip" title="<?php etooltip("timed-evt-len-help");?>">
+	<?php etranslate("Specify timed event length by")?>:</td><td>
+	<label><input type="radio" name="pref_TIMED_EVT_LEN" value="D" <?php if ( $prefarray["TIMED_EVT_LEN"] != "E" ) echo " checked=\"checked\"";?> /> <?php etranslate("Duration")?></label> 
+	<label><input type="radio" name="pref_TIMED_EVT_LEN" value="E" <?php if ( $prefarray["TIMED_EVT_LEN"] == "E" ) echo " checked=\"checked\"";?> /> <?php etranslate("End Time")?></label>
+</td></tr>
+
+<?php if ( ! empty ( $categories ) ) { ?>
+<tr><td>
+	<label for="pref_cat"><?php etranslate("Default Category")?>:</label></td><td>
+	<select name="pref_CATEGORY_VIEW" id="pref_cat">
+<?php
+	echo "<option value=\"\"";
+	if ( empty ( $prefarray["CATEGORY_VIEW"] ) ) echo " selected=\"selected\"";
+	echo ">".translate("All")."</option>\n";
+	
+	if ( ! empty ( $categories ) ) {
+		foreach( $categories as $K => $V ){
+			echo "<option value=\"$K\"";
+			if ( ! empty ( $prefarray["CATEGORY_VIEW"] ) &&
+				$prefarray["CATEGORY_VIEW"] == $K ) echo " selected=\"selected\"";
+			echo ">$V</option>\n";
+		}
+	}
+?>
+	</select>
+</td></tr>
+<?php } //end if (! empty ($categories ) ) ?>
+</table>
+
+<?php if ( ! $updating_public ) { ?>
+<br /><br />
+<table class="standard" cellspacing="1" cellpadding="2">
+<tr><th colspan="2"><?php etranslate("Email")?></th></tr>
+<tr><td style="vertical-align:top; font-weight:bold;">
+	<?php etranslate("Event reminders")?>:</td><td>
+	<label><input type="radio" name="pref_EMAIL_REMINDER" value="Y" <?php if ( $prefarray["EMAIL_REMINDER"] != "N" ) echo " checked=\"checked\"";?> /> <?php etranslate("Yes")?></label> 
+	<label><input type="radio" name="pref_EMAIL_REMINDER" value="N" <?php if ( $prefarray["EMAIL_REMINDER"] == "N" ) echo " checked=\"checked\"";?> /> <?php etranslate("No")?></label>
+</td></tr>
+
+<tr><td style="vertical-align:top; font-weight:bold;">
+	<?php etranslate("Events added to my calendar")?>:</td><td>
+	<label><input type="radio" name="pref_EMAIL_EVENT_ADDED" value="Y" <?php if ( $prefarray["EMAIL_EVENT_ADDED"] != "N" ) echo " checked=\"checked\"";?> /> <?php etranslate("Yes")?></label> <label><input type="radio" name="pref_EMAIL_EVENT_ADDED" value="N" <?php if ( $prefarray["EMAIL_EVENT_ADDED"] == "N" ) echo " checked=\"checked\"";?> /> <?php etranslate("No")?></label></td></tr>
+
+<tr><td style="vertical-align:top; font-weight:bold;">
+	<?php etranslate("Events updated on my calendar")?>:</td><td>
+	<label><input type="radio" name="pref_EMAIL_EVENT_UPDATED" value="Y" <?php if ( $prefarray["EMAIL_EVENT_UPDATED"] != "N" ) echo " checked=\"checked\"";?> /> <?php etranslate("Yes")?></label> <label><input type="radio" name="pref_EMAIL_EVENT_UPDATED" value="N" <?php if ( $prefarray["EMAIL_EVENT_UPDATED"] == "N" ) echo " checked=\"checked\"";?> /> <?php etranslate("No")?></label>
+</td></tr>
+
+<tr><td style="vertical-align:top; font-weight:bold;">
+	<?php etranslate("Events removed from my calendar")?>:</td><td>
+	<label><input type="radio" name="pref_EMAIL_EVENT_DELETED" value="Y" <?php if ( $prefarray["EMAIL_EVENT_DELETED"] != "N" ) echo " checked=\"checked\"";?> /> <?php etranslate("Yes")?></label> <label><input type="radio" name="pref_EMAIL_EVENT_DELETED" value="N" <?php if ( $prefarray["EMAIL_EVENT_DELETED"] == "N" ) echo " checked=\"checked\"";?> /> <?php etranslate("No")?></label>
+</td></tr>
+
+<tr><td style="vertical-align:top; font-weight:bold;">
+	<?php etranslate("Event rejected by participant")?>:</td><td>
+	<label><input type="radio" name="pref_EMAIL_EVENT_REJECTED" value="Y" <?php if ( $prefarray["EMAIL_EVENT_REJECTED"] != "N" ) echo " checked=\"checked\"";?> /> <?php etranslate("Yes")?></label> <label><input type="radio" name="pref_EMAIL_EVENT_REJECTED" value="N" <?php if ( $prefarray["EMAIL_EVENT_REJECTED"] == "N" ) echo " checked=\"checked\"";?> /> <?php etranslate("No")?></label>
+</td></tr>
+</table>
+
+<br /><br />
+<table class="standard" cellspacing="1" cellpadding="2">
+<tr><th colspan="2"><?php etranslate("When I am the boss")?></th></tr>
+<tr><td style="vertical-align:top; font-weight:bold;"><?php etranslate("Email me event notification")?>:</td>
+  <td><label><input type="radio" name="pref_EMAIL_ASSISTANT_EVENTS" value="Y" <?php if ( $prefarray["EMAIL_ASSISTANT_EVENTS"] == "Y" ) echo " checked=\"checked\"";?> /> <?php etranslate("Yes")?></label> <label><input type="radio" name="pref_EMAIL_ASSISTANT_EVENTS" value="N" <?php if ( $prefarray["EMAIL_ASSISTANT_EVENTS"] == "N" ) echo " checked=\"checked\"";?> /> <?php etranslate("No")?></label></td></tr>
+
+<tr><td style="vertical-align:top; font-weight:bold;"><?php etranslate("I want to approve events")?>:</td>
+  <td><label><input type="radio" name="pref_APPROVE_ASSISTANT_EVENT" value="Y" <?php if ( $prefarray["APPROVE_ASSISTANT_EVENT"] == "Y" ) echo " checked=\"checked\"";?> /> <?php etranslate("Yes")?></label> <label><input type="radio" name="pref_APPROVE_ASSISTANT_EVENT" value="N" <?php if ( $prefarray["APPROVE_ASSISTANT_EVENT"] == "N" ) echo " checked=\"checked\"";?> /> <?php etranslate("No")?></label></td></tr>
+</table>
+
+<?php } /* if ( ! $updating_public ) */ ?>
+
+<br /><br />
+
+<?php if ( $PUBLISH_ENABLED == 'Y' ) { ?>
+<table class="standard" cellspacing="1" cellpadding="2">
+<tr><th colspan="2"><?php etranslate("Subscribe/Publish")?></th></tr>
+<tr><td class="tooltipselect" title="<?php etooltip("allow-remote-subscriptions-help")?>"><?php etranslate("Allow remote subscriptions")?>:</td>
+  <td><label><input type="radio" name="pref_USER_PUBLISH_ENABLED" value="Y" <?php if ( isset ( $prefarray["USER_PUBLISH_ENABLED"] ) && $prefarray["USER_PUBLISH_ENABLED"] == "Y" ) echo " checked=\"checked\"";?> /> <?php etranslate("Yes")?></label> <label><input type="radio" name="pref_USER_PUBLISH_ENABLED" value="N" <?php if ( empty ( $prefarray["USER_PUBLISH_ENABLED"] ) || $prefarray["USER_PUBLISH_ENABLED"] != "Y" ) echo " checked=\"checked\"";?> /> <?php etranslate("No")?></label></td></tr>
+<?php if ( ! empty ( $server_url ) ) { ?>
+<tr><td class="tooltipselect" title="<?php etooltip("remote-subscriptions-url-help")?>">    <?php etranslate("URL")?>:</td>
+  <td>
+  <?php
+    echo htmlspecialchars ( $server_url ) .
+      "publish.php/" . ( $updating_public ? "public" : $login ) .  ".ics";
+    echo "<br/>\n";
+    echo htmlspecialchars ( $server_url ) .
+      "publish.php?user=" . ( $updating_public ? "public" : $login );
+  ?></td></tr>
+<?php } /* $server_url */ ?>
+</table>
+<?php } /* $PUBLISH_ENABLED == 'Y' */ ?>
+
+<?php if ( $allow_color_customization == 'Y' ) { ?>
+
+<br /><br />
+
+<table style="border-width:0px; width:100%;">
+<tr><td style="vertical-align:top;">
+
+<table class="standard" cellspacing="1" cellpadding="2">
+	<tr><th colspan="4"><?php etranslate("Colors")?></th></tr>
+	<tr><td style="font-weight:bold;">
+		<label for="pref_bg"><?php etranslate("Document background")?>:</label></td><td>
+		<input type="text" name="pref_BGCOLOR" id="pref_bg" size="8" maxlength="7" value="<?php echo $prefarray["BGCOLOR"]; ?>" onkeyup="updateColor(this);" /></td><td style="background-color:<?php echo $prefarray["BGCOLOR"]?>; border-style: groove;">
+		     </td><td>
+		<input type="button" onclick="selectColor('pref_BGCOLOR')" value="<?php etranslate("Select")?>..." />
+	</td></tr>
+	<tr><td style="font-weight:bold;">
+		<label for="pref_h2"><?php etranslate("Document title")?>:</label></td><td>
+		<input type="text" name="pref_H2COLOR" id="pref_h2" size="8" maxlength="7" value="<?php echo $prefarray["H2COLOR"]; ?>" onkeyup="updateColor(this);" /></td><td style="background-color:<?php echo $prefarray["H2COLOR"]?>; border-style: groove;">
+	     </td><td>
+		<input type="button" onclick="selectColor('pref_H2COLOR')" value="<?php etranslate("Select")?>..." />
+	</td></tr>
+	<tr><td style="font-weight:bold;">
+		<label for="pref_cell"><?php etranslate("Table cell background")?>:</label></td><td>
+		<input type="text" name="pref_CELLBG" id="pref_cell" size="8" maxlength="7" value="<?php echo $prefarray["CELLBG"]; ?>" onkeyup="updateColor(this);" /></td><td style="background-color:<?php echo $prefarray["CELLBG"]?>; border-style: groove;">
+	     </td><td>
+		<input type="button" onclick="selectColor('pref_CELLBG')" value="<?php etranslate("Select")?>..." />
+	</td></tr>
+	<tr><td style="font-weight:bold;">
+		<label for="pref_today"><?php etranslate("Table cell background for current day")?>:</label></td><td>
+		<input type="text" name="pref_TODAYCELLBG" id="pref_today" size="8" maxlength="7" value="<?php echo $prefarray["TODAYCELLBG"]; ?>" onkeyup="updateColor(this);" /></td><td style="background-color:<?php echo $prefarray["TODAYCELLBG"]?>; border-style: groove;">
+	     </td><td>
+		<input type="button" onclick="selectColor('pref_TODAYCELLBG')" value="<?php etranslate("Select")?>..." />
+	</td></tr>
+	<tr><td style="font-weight:bold;">
+		<label for="pref_wkend"><?php etranslate("Table cell background for weekends")?>:</label></td><td>
+		<input type="text" name="pref_WEEKENDBG" id="pref_wkend" size="8" maxlength="7" value="<?php echo $prefarray["WEEKENDBG"]; ?>" onkeyup="updateColor(this);" /></td><td style="background-color:<?php echo $prefarray["WEEKENDBG"]?>; border-style: groove;">
+	     </td><td>
+		<input type="button" onclick="selectColor('pref_WEEKENDBG')" value="<?php etranslate("Select")?>..." />
+	</td></tr>
+</table>
+
+</td><td style="text-align:center; vertical-align:top; background-color:<?php echo $prefarray["BGCOLOR"]?>;">
+<br />
+
+<!-- BEGIN EXAMPLE MONTH -->
+<table style="border:0px; width:100%;"><tr>
+<td style="text-align:center; color:<?php echo $H2COLOR?>; font-weight:bold;"><?php
+$today = mktime ( 3, 0, 0, 12, 13, 2000 );
+if ( $prefarray["WEEK_START"] == 1 )
+  $wkstart = get_monday_before ( 2000, 12, 1 );
+else
+  $wkstart = get_sunday_before ( 2000, 12, 1 );
+echo date_to_str ( "20001201", $DATE_FORMAT_MY, false, false );?></td></tr>
+</table>
+
+<table style="border-width:0px; width:90%;" cellspacing="0" cellpadding="0">
+<tr><td style="background-color:<?php echo $TABLEBG?>;">
+<table style="border-width:0px; width:100%;" cellspacing="1" cellpadding="2">
+<tr>
+<?php if ( $prefarray["WEEK_START"] == 0 ) { ?>
+<th style="width:14%;" class="tableheader"><?php etranslate("Sun")?></th>
+<?php } ?>
+<th style="width:14%;" class="tableheader"><?php etranslate("Mon")?></th>
+<th style="width:14%;" class="tableheader"><?php etranslate("Tue")?></th>
+<th style="width:14%;" class="tableheader"><?php etranslate("Wed")?></th>
+<th style="width:14%;" class="tableheader"><?php etranslate("Thu")?></th>
+<th style="width:14%;" class="tableheader"><?php etranslate("Fri")?></th>
+<th style="width:14%;" class="tableheader"><?php etranslate("Sat")?></th>
+<?php if ( $prefarray["WEEK_START"] == 1 ) { ?>
+<th style="width:14%;"><?php etranslate("Sun")?></th>
+<?php } ?>
+</tr>
+<?php
+// generate values for first day and last day of month
+$monthstart = mktime ( 3, 0, 0, 12, 1, 2000 );
+$monthend = mktime ( 3, 0, 0, 13, 0, 2000 );
+
+for ( $i = $wkstart; date ( "Ymd", $i ) <= date ( "Ymd", $monthend );
+  $i += ( 24 * 3600 * 7 ) ) {
+  print "<tr>\n";
+  for ( $j = 0; $j < 7; $j++ ) {
+    $date = $i + ( $j * 24 * 3600 );
+    if ( date ( "Ymd", $date ) >= date ( "Ymd", $monthstart ) &&
+      date ( "Ymd", $date ) <= date ( "Ymd", $monthend ) ) {
+      $thiswday = date ( "w", $date );
+      $is_weekend = ( $thiswday == 0 || $thiswday == 6 );
+      if ( empty ( $prefarray["WEEKENDBG"] ) ) $is_weekend = false;
+      $class = $is_weekend ? "weekend" : "tablecell";
+      $color = $is_weekend ? $prefarray["WEEKENDBG"] : $prefarray["CELLBG"];
+      print "<td style=\"vertical-align:top; height:30px;";
+      if ( date ( "Ymd", $date ) == date ( "Ymd", $today ) )
+        echo " background-color:$prefarray[TODAYCELLBG];\">";
+      else
+        echo " background-color:$color;\">";
+      echo " ";
+      print "</td>\n";
+    } else {
+      print "<td style=\"vertical-align:top; height:30px; background-color:$prefarray[CELLBG];\"> </td>\n";
+    }
+  }
+  print "</tr>\n";
+}
+
+?>
+</table>
+</td></tr>
+</table>
+
+<!-- END EXAMPLE MONTH -->
+<br /><br />
+
+</td></tr></table>
+
+<?php } // if $allow_color_customization ?>
+
+<br /><br />
+<table style="border-width:0px;"><tr><td>
+<input type="submit" value="<?php etranslate("Save Preferences")?>" name="" />
+</td></tr></table>
+</form>
+
+<?php print_trailer(); ?>
+</body>
+</html>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/pref_handler.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/pref_handler.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/pref_handler.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,68 @@
+<?php
+include_once 'includes/init.php';
+
+$error = "";
+
+$updating_public = false;;
+if ( $is_admin && ! empty ( $public ) && $public_access == "Y" ) {
+  $updating_public = true;
+  $prefuser = "__public__";
+} elseif (($user != $login) && ($is_admin || $is_nonuser_admin)) {
+  $prefuser = "$user";
+} else {
+  $prefuser = "$login";
+}
+
+while ( list ( $key, $value ) = each ( $HTTP_POST_VARS ) ) {
+  $setting = substr ( $key, 5 );
+  $prefix = substr ( $key, 0, 5 );
+  if ( $key == 'user' || $key == 'public'  )
+    continue;
+  // validate key name.  should start with "pref_" and not include
+  // any unusual characters that might cause SQL injection
+  if ( ! preg_match ( '/pref_[A-Za-z0-9_]+$/', $key ) ) {
+    die_miserable_death ( 'Invalid admin setting name "' .
+      $key . '"' );
+  }
+  //echo "Setting = $setting, key = $key, prefix = $prefix <br />\n";
+  if ( strlen ( $setting ) > 0 && $prefix == "pref_" ) {
+    $sql =
+      "DELETE FROM webcal_user_pref WHERE cal_login = '$prefuser' " .
+      "AND cal_setting = '$setting'";
+    dbi_query ( $sql );
+    if ( strlen ( $value ) > 0 ) {
+      $sql = "INSERT INTO webcal_user_pref " .
+        "( cal_login, cal_setting, cal_value ) VALUES " .
+        "( '$prefuser', '$setting', '$value' )";
+      if ( ! dbi_query ( $sql ) ) {
+        $error = "Unable to update preference: " . dbi_error () .
+	"<br /><br /><span style=\"font-weight:bold;\">SQL:</span> $sql";
+        break;
+      }
+    }
+  }
+}
+
+if ( empty ( $error ) ) {
+  if ( $updating_public ) {
+    do_redirect ( "pref.php?public=1" );
+  } elseif (($is_admin || $is_nonuser_admin) && $login != $user ) {
+    do_redirect ( "pref.php?user=$user" );
+  } else {
+    do_redirect ( "pref.php" );
+  }
+}
+print_header();
+?>
+
+<h2><?php etranslate("Error")?></h2>
+
+<?php etranslate("The following error occurred")?>:
+<blockquote>
+<?php echo $error; ?>
+</blockquote>
+
+<?php print_trailer(); ?>
+
+</body>
+</html>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/publish.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/publish.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/publish.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,521 @@
+<?php
+/*
+ * $Id: publish.php,v 1.12.4.1 2005/11/10 21:01:23 umcesrjones Exp $
+ *
+ * Description:
+ *  Creates the iCal output for a single user's calendar so
+ *  that remote users can "subscribe" to a WebCalendar calendar.
+ *  Both Apple iCal and Mozilla's Calendar support subscribing
+ *  to remote calendars.
+ *
+ *  Note that unlink the export to iCal, this page does not include
+ *  attendee info.  This improves the performance considerably, BTW.
+ *
+ * Notes:
+ *  Does anyone know when a client (iCal, for example) refreshes its
+ *  data, does it delete all old data and reload?  Just wondering
+ *  if we need to somehow send a delete notification on updates...
+ *
+ * Input parameters:
+ *  URL should be the form of /xxx/publish.php/username.ics
+ *  or /xxx/publish.php?user=username
+ *
+ * Security:
+ *  If $PUBLISH_ENABLED is not 'Y' (set in Admin System Settings),
+ *    do not allow.
+ *  If $USER_PUBLISH_ENABLED is not 'Y' (set in each user's
+ *    Preferences), do not allow.
+ */
+include "includes/config.php";
+include "includes/php-dbi.php";
+include "includes/functions.php";
+include "includes/$user_inc";
+include "includes/connect.php";
+
+// Calculate username.
+if ( empty ( $user ) ) {
+  $arr = explode ( "/", $PHP_SELF );
+  $user = $arr[count($arr)-1];
+  # remove any trailing ".ics" in user name
+  $user = preg_replace ( "/\.[iI][cC][sS]$/", '', $user );
+}
+
+if ( $user == 'public' )
+  $user = '__public__';
+
+load_global_settings ();
+
+include "includes/translate.php";
+
+if ( empty ( $PUBLISH_ENABLED ) || $PUBLISH_ENABLED != 'Y' ) {
+  header ( "Content-Type: text/plain" );
+  etranslate("You are not authorized");
+  exit;
+}
+
+// Make sure they specified a username
+if ( empty ( $user ) ) {
+  echo "<?xml version=\"1.0\" encoding=\"utf8\"?>\n<!DOCTYPE html
+    PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"
+    \"DTD/xhtml1-transitional.dtd\">
+<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\" lang=\"en\">\n
+ <head>\n<title>" . translate("Error") . "</title>\n</head>\n" .
+    "<body>\n<h2>" . translate("Error") . "</h2>\n" .
+    "No user specified.\n</body>\n</html>";
+}
+
+// Load user preferences (to get the USER_PUBLISH_ENABLED and
+// DISPLAY_UNAPPROVED setting for this user).
+$login = $user;
+load_user_preferences ();
+
+if ( empty ( $USER_PUBLISH_ENABLED ) || $USER_PUBLISH_ENABLED != 'Y' ) {
+  header ( "Content-Type: text/plain" );
+  etranslate("You are not authorized");
+  exit;
+}
+
+// Load user name, etc.
+user_load_variables ( $user, "publish_" );
+
+function get_events_for_publish ()
+{
+  global $user;
+  global $DISPLAY_UNAPPROVED;
+
+  // We exporting repeating events only with the pilot-datebook CSV format
+  $sql = "SELECT webcal_entry.cal_id, webcal_entry.cal_name " .
+    ", webcal_entry.cal_priority, webcal_entry.cal_date " .
+    ", webcal_entry.cal_time " .
+    ", webcal_entry_user.cal_status, webcal_entry.cal_create_by " .
+    ", webcal_entry.cal_access, webcal_entry.cal_duration " .
+    ", webcal_entry.cal_description " .
+    ", webcal_entry_user.cal_category " .
+    "FROM webcal_entry, webcal_entry_user ";
+
+  $sql .= "WHERE webcal_entry.cal_id = webcal_entry_user.cal_id AND " .
+    "webcal_entry_user.cal_login = '" . $user . "'";
+
+  // Include unapproved events if the user has asked to do so in
+  // their preferences.
+  if ( $DISPLAY_UNAPPROVED == "N"  || $user == "__public__" )
+    $sql .= " AND webcal_entry_user.cal_status = 'A'";
+  else
+    $sql .= " AND webcal_entry_user.cal_status IN ('W','A')";
+
+  $sql .= " ORDER BY webcal_entry.cal_date";
+
+  $res = dbi_query ( $sql );
+
+  return $res;
+}
+
+function export_quoted_printable_encode($car) {
+  $res = "";
+
+  if ((ord($car) >= 33 && ord($car) <= 60) ||
+     (ord($car) >= 62 && ord($car) <= 126) ||
+     ord($car) == 9 || ord($car) == 32) {
+    $res = $car;
+  } else {
+    $res = sprintf("=%02X", ord($car));
+  }
+
+  return $res;
+}
+
+function export_fold_lines($string, $encoding="none", $limit=76) {
+  $len = strlen($string);
+  $fold = $limit;
+  $res = array();
+  $row = "";
+  $enc = "";
+  $lwsp = 0; // position of the last linear whitespace (where to fold)
+  $res_ind = 0; // row index
+  $start_encode = 0; // we start encoding only after the ":" caracter is encountered
+
+  if (strcmp($encoding,"quotedprintable") == 0)
+    $fold--; // must take into account the soft line break
+
+  for ($i = 0; $i < $len; $i++) {
+    $enc = $string[$i];
+
+    if ($start_encode) {
+      if (strcmp($encoding,"quotedprintable") == 0)
+        $enc = export_quoted_printable_encode($string[$i]);
+      else if (strcmp($encoding,"utf8") == 0)
+        $enc = utf8_encode($string[$i]);
+    }
+
+    if ($string[$i] == ":")
+      $start_encode = 1;
+
+    if ((strlen($row) + strlen($enc)) > $fold) {
+      $delta = 0;
+
+      if ($lwsp == 0)
+        $lwsp = $fold - 1; // the folding will occur in the middle of a word
+
+      if ($row[$lwsp] == " " || $row[$lwsp] == "\t")
+        $delta = -1;
+
+      $res[$res_ind] = substr($row, 0, $lwsp+1+$delta);
+
+      if (strcmp($encoding,"quotedprintable") == 0)
+        $res[$res_ind] .= "="; // soft line break;
+
+      $row = substr($row, $lwsp+1);
+
+      $row = " " . $row;
+
+      if ($delta == -1 && strcmp($encoding,"utf8") == 0)
+        $row = " " . $row;
+
+      // reduce row length of 1 to take into account the whitespace
+      // at the beginning of lines
+      if ($res_ind == 0)
+        $fold--;
+
+      $res_ind++; // next line
+
+      $lwsp = 0;
+    }
+
+    $row .= $enc;
+
+    if ($string[$i] == " " || $string[$i] == "\t" ||
+      $string[$i] == ";" || $string[$i] == ",")
+      $lwsp = strlen($row) - 1;
+
+    if ($string[$i] == ":" && (strcmp($encoding,"quotedprintable") == 0))
+      $lwsp = strlen($row) - 1; // we cut at ':' only for quoted printable
+  }
+
+  $res[$res_ind] = $row; // Add last row (or first if no folding is necessary)
+
+  return $res;
+}
+
+function export_time($date, $duration, $time, $texport) {
+  $allday = ( $time == -1 || $duration == 24*60 );
+  $year = (int) substr($date,0,-4);
+  $month = (int) substr($date,-4,2);
+  $day = (int) substr($date,-2,2);
+
+  //No time, or an "All day" event"
+  if ( $allday ) {
+    // untimed event
+    $hour = 0;
+    $min = 0;
+    $sec = 0;
+    $start_tmstamp = mktime($hour, $min, $sec, $month, $day, $year);
+    $start_date = date("Ymd", $start_tmstamp);
+    echo "DTSTART;VALUE=DATE:$start_date\r\n";
+  } else {
+    // normal/timed event
+    $hour = (int) substr($time,0,-4);
+    $min = (int) substr($time,-4,2);
+    $sec = (int) substr($time,-2,2);
+    $duration = $duration * 60;
+
+    $start_tmstamp = mktime($hour, $min, $sec, $month, $day, $year);
+
+    $utc_start = export_get_utc_date($date, $time);
+    echo "DTSTART:$utc_start\r\n";
+  }
+
+  $utc_dtstamp = export_get_utc_date(date("Ymd", mktime()),
+    date("His", mktime()));
+  echo "DTSTAMP:$utc_dtstamp\r\n";
+
+  // Only include and end time on all-day events and timed events
+  // (and not for untimed events)
+  if ( !$allday ) {
+    $end_tmstamp = $start_tmstamp + $duration;
+    $utc_end = export_get_utc_date(date("Ymd", $end_tmstamp),
+      date("His", $end_tmstamp));
+    echo "DTEND:$utc_end\r\n";
+  }
+}
+
+function export_recurrence_ical($id, $date) {
+  global $days_per_month, $ldays_per_month;
+  $str_day = array( 'SU','MO','TU','WE','TH','FR','SA' );
+
+  $sql = "SELECT cal_date FROM webcal_entry_repeats_not WHERE cal_id = '$id'";
+
+  $res = dbi_query($sql);
+
+  if ($res) {
+    $exdate = array();
+    $i = 0;
+    while ($row = dbi_fetch_row($res)) {
+      $exdate[$i] = $row[0];
+      $i++;
+    }
+    dbi_free_result($res);
+  }
+
+  $sql = "SELECT webcal_entry_repeats.cal_type, " .
+    "webcal_entry_repeats.cal_end, webcal_entry_repeats.cal_frequency, " .
+    "webcal_entry_repeats.cal_days, webcal_entry.cal_time " .
+    "FROM webcal_entry, webcal_entry_repeats " .
+    "WHERE webcal_entry_repeats.cal_id = '$id' " .
+    "AND webcal_entry.cal_id = '$id'";
+
+  $res = dbi_query($sql);
+
+  if ($res) {
+    if ( $row = dbi_fetch_row($res) ) {
+      $type = $row[0];
+      $end = $row[1];
+      $freq = $row[2];
+      $day = $row[3];
+      $time = $row[4];
+      $byday = "";
+
+      echo "RRULE:";
+
+      /* recurrence frequency */
+      switch ($type) {
+        case 'daily' :
+          echo "FREQ=DAILY";
+          break;
+        case 'weekly' :
+          echo "FREQ=WEEKLY";
+          break;
+        case 'monthlyByDayR':
+        case 'monthlyByDay':
+        case 'monthlyByDate' :
+          echo "FREQ=MONTHLY";
+          break;
+        case 'yearly' :
+          echo "FREQ=YEARLY";
+          break;
+      }
+
+      echo ";INTERVAL=$freq";
+
+      if ($type == "weekly") {
+        if ($day != "nnnnnnn") {
+          echo ";BYDAY=";
+          for ($i = 0; $i < strlen($day); $i++) {
+            if ($day[$i] == 'y') {
+              $byday .= $str_day[$i] .",";
+            }
+          }
+          $byday = substr($byday, 0, strlen($byday)-1); // suppress last ','
+          echo $byday;
+        }
+      } elseif ($type == "monthlyByDate") {
+        $day = (int) substr($date,-2,2);
+        echo ";BYMONTHDAY=$day";
+      } elseif ($type == "monthlyByDay") {
+        $year = (int) substr($date,0,-4);
+        $month = (int) substr($date,-4,2);
+        $day = (int) substr($date,-2,2);
+        $stamp = mktime(0, 0, 0, $month, $day, $year);
+        $dow = date ( "w", $stamp );
+        $dow1 = date ( "w", mktime ( 3, 0, 0, $month, 1, $year ) );
+        $partWeek = ( 7 - $dow1 ) % 7;
+        $whichWeek = ceil ( ( $day - $partWeek ) / 7 );
+        if ( $partWeek && $dow >= $dow1 )
+          $whichWeek++;
+        printf ( ";BYDAY=%d%s", $whichWeek, $str_day[$dow] );
+      } elseif ($type == "monthlyByDayR") {
+        $year = (int) substr($date,0,-4);
+        $month = (int) substr($date,-4,2);
+        $day = (int) substr($date,-2,2);
+        $stamp = mktime(0, 0, 0, $month, $day, $year);
+        $dow = date ( "w", $stamp );
+        // get number of days in this month
+        $daysthismonth = ( $year % 4 == 0 ) ? $ldays_per_month[$month] :
+          $days_per_month[$month];
+        // how many weekdays like this one remain in the month?
+        // 0=last one, 1=one more after this one, etc.
+        $whichWeek = floor ( ( $daysthismonth - $day ) / 7 );
+        printf ( ";BYDAY=%d%s", -1 - $whichWeek, $str_day[$dow] );
+      }
+
+      if (!empty($end)) {
+        echo ";UNTIL=";
+        $utc = export_get_utc_date($end, $time);
+        echo $utc;
+      }
+
+      echo "\r\n";
+
+      if (count($exdate) > 0) {
+        $string = "EXDATE:";
+        $i = 0;
+        while ($i < count($exdate)) {
+          $date = export_get_utc_date($exdate[$i],$time);
+          $string .= "$date,";
+          $i++;
+        }
+
+        $string = substr($string, 0, strlen($string)-1); // suppress last ','
+        $string = export_fold_lines($string);
+        while (list($key,$value) = each($string))
+          echo "$value\r\n";
+      }
+    }
+  }
+}
+
+function export_alarm_ical($id, $description) {
+  $sql = "SELECT cal_data FROM webcal_site_extras " .
+         "WHERE cal_id = $id AND cal_type = 7 AND cal_remind = 1";
+  $res = dbi_query ( $sql );
+  $row = dbi_fetch_row ( $res );
+  dbi_free_result ( $res );
+
+  if ($row) {
+    echo "BEGIN:VALARM\r\n";
+    echo "TRIGGER:-PT".$row[0]."M\r\n";
+    echo "ACTION:DISPLAY\r\n";
+
+    $array = export_fold_lines($description,"utf8");
+    while (list($key,$value) = each($array)) {
+      echo "$value\r\n";
+    }
+
+    echo "END:VALARM\r\n";
+  }
+}
+
+function export_get_utc_date($date, $time=0) {
+  $year = (int) substr($date,0,-4);
+  $month = (int) substr($date,-4,2);
+  $day = (int) substr($date,-2,2);
+
+  if ($time <= 0) {
+    $hour = 0;
+    $min = 0;
+    $sec = 0;
+  } else {
+    $hour = (int) substr($time,0,-4);
+    $min = (int) substr($time,-4,2);
+    $sec = (int) substr($time,-2,2);
+  }
+
+  $tmstamp = mktime($hour, $min, $sec, $month, $day, $year);
+
+  $utc_date = gmdate("Ymd", $tmstamp);
+  $utc_hour = gmdate("His", $tmstamp);
+
+  $utc = sprintf ("%sT%sZ", $utc_date, $utc_hour);
+
+  return $utc;
+}
+
+function generate_uid($id) {
+  global $user, $server_url;
+
+  $uid = $server_url;
+  if ( empty ( $uid ) )
+    $uid = "UNCONFIGURED-WEBCALENDAR";
+  $uid = str_replace ( "http://", "", $uid );
+  $uid .= sprintf ( "-%s-%010d", $user, $id );
+  $uid = preg_replace ( "/[\s\/\.-]+/", "-", $uid );
+  $uid = strtoupper ( $uid );
+  return $uid;
+}
+
+function export_ical () {
+  global $publish_fullname, $user, $PROGRAM_NAME;
+  $res = get_events_for_publish ();
+
+  $entry_array = array();
+  $count = 0;
+
+  while ( $entry = dbi_fetch_row($res) ) {
+    $entry_array[$count++] = $entry;
+  }
+
+  if ($count > 0) {
+    echo "BEGIN:VCALENDAR\r\n";
+    $title = "X-WR-CALNAME;VALUE=TEXT:" .
+      ( empty ( $publish_fullname ) ? $user : translate($publish_fullname) );
+    $title = str_replace ( ",", "\\,", $title );
+    echo "$title\r\n";
+    if ( preg_match ( "/WebCalendar v(\S+)/", $PROGRAM_NAME, $match ) ) {
+      echo "PRODID:-//WebCalendar-$match[1]\r\n";
+    } else {
+      echo "PRODID:-//WebCalendar-UnknownVersion\r\n";
+    }
+    echo "VERSION:2.0\r\n";
+    echo "METHOD:PUBLISH\r\n";
+  }
+
+  while (list($key,$row) = each($entry_array)) {
+    $uid = $row[0];
+    $export_uid = generate_uid($uid);
+    $name = $row[1];
+    $priority = $row[2];
+    $date = $row[3];
+    $time = $row[4];
+    $status = $row[5];
+    $create_by = $row[6];
+    $access = $row[7];
+    $duration = $row[8];
+    $description = $row[9];
+
+    /* Start of event */
+    echo "BEGIN:VEVENT\r\n";
+
+    /* UID of the event (folded to 76 char) */
+    $array = export_fold_lines("UID:$export_uid");
+    while (list($key,$value) = each($array))
+       echo "$value\r\n";
+
+    $name = preg_replace("/\r/", "", $name);
+    $name = preg_replace("/\n/", "\\n", $name);
+    $name = preg_replace("/\\\\/", "\\\\\\", $name); // ??
+    $description = preg_replace("/\r/", "", $description);
+    $description = preg_replace("/\n/", "\\n", $description);
+    $description = preg_replace("/\\\\/", "\\\\\\", $description); // ??
+
+    /* SUMMARY of the event (folded to 76 char) */
+    $name = "SUMMARY:" . $name;
+    $array = export_fold_lines($name,"utf8");
+
+    while (list($key,$value) = each($array))
+       echo "$value\r\n";
+
+    /* DESCRIPTION if any (folded to 76 char) */
+    if ($description != "") {
+      $description = "DESCRIPTION:" . $description;
+      $array = export_fold_lines($description,"utf8");
+      while (list($key,$value) = each($array))
+        echo "$value\r\n";
+    }
+
+    /* CLASS either "PRIVATE" or "PUBLIC" (the default) */
+    if ($access == "R") {
+      echo "CLASS:PRIVATE\r\n";
+    } else {
+      echo "CLASS:PUBLIC\r\n";
+    }
+
+    /* Time - all times are utc */
+    export_time($date, $duration, $time, "ical");
+
+    /* Recurrence */
+    export_recurrence_ical($uid, $date);
+
+    /* handle alarms */
+    export_alarm_ical($uid,$description);
+
+    /* Goodbye event */
+    echo "END:VEVENT\r\n";
+  }
+
+  if ($count > 0)
+    echo "END:VCALENDAR\r\n";
+}
+
+//header ( "Content-Type: text/plain" );
+header ( "Content-Type: text/calendar" );
+export_ical();
+?>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/purge.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/purge.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/purge.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,239 @@
+<?php
+/*
+ * $Id: purge.php,v 1.31 2005/02/22 01:29:58 cknudsen Exp $
+ *
+ * Description:
+ *	Purge events page and handler.
+ *	When an event is deleted from a user's calendar, it is marked
+ *	as deleted (webcal_entry_user.cal_status = 'D').  This page
+ *	will actually clean out the database rather than just mark an
+ *	event as deleted.
+ *
+ * Security:
+ *	Events will only be deleted if they were created by the selected
+ *	user.  Events where the user was a participant (but not did not
+ *	create) will remain unchanged.
+ *
+ */
+include_once 'includes/init.php';
+
+// Set this to true do show the SQL at the bottom of the page
+$purgeDebug = true;
+$sqlLog = '';
+
+if ( ! $is_admin ) {
+  // must be admin...
+  do_redirect ( "index.php" );
+  exit;
+}
+
+$ALL = 0;
+
+$purge_all = getPostValue ( "purge_all" );
+$end_year = getPostValue ( "end_year" );
+$end_month = getPostValue ( "end_month" );
+$end_day = getPostValue ( "end_day" );
+$user = getPostValue ( "user" );
+$preview = getPostValue ( "preview" );
+$preview = ( empty ( $preview ) ? false : true );
+
+$INC = array('js/purge.php','js/visible.php');
+if ( ! empty ( $user ) ) {
+  $BodyX = '';
+} else {
+  $BodyX = 'onload="all_handler();"';
+}
+
+print_header ( $INC, '', $BodyX );
+?>
+
+<table style="border-width:0px;">
+<tr><td style="vertical-align:top; width:50%;">
+<?php
+echo "<h2>" . translate("Delete Events" );
+if ( $preview )
+  echo "[ " . translate("Preview" ) . "]";
+echo "</h2>\n";
+
+?>
+<a title="<?php etranslate("Admin") ?>" class="nav" href="adminhome.php">« <?php etranslate("Admin") ?></a><br /><br />
+<?php
+
+if ( ! empty ( $user ) ) {
+  if ( $preview ) {
+    echo "<h2> [" .  translate("Preview") . "] " .
+      translate("Purging events for") . " $user...</h2>\n";
+  } else {
+    echo "<h2>" .  translate("Purging events for") . ": $user</h2>\n";
+  }
+  $ids = '';
+  $end_date = sprintf ( "%04d%02d%02d", $end_year, $end_month, $end_day );
+  if ( $purge_all == "Y" ) {
+    if ( $user == 'ALL' ) {
+      $ids = array ( 'ALL' );
+    } else {
+      $ids = get_ids (
+        "SELECT cal_id FROM webcal_entry WHERE cal_create_by = '$user'" );
+    }
+  } elseif ( $end_date ) {
+    if ( $user != 'ALL' ) {
+      $tail = " AND webcal_entry.cal_create_by = '$user'";
+    } else {
+      $tail = '';
+      $ALL = 1;  // Need this to tell get_ids to ignore participant check
+    }
+    $E_ids = get_ids ( "SELECT cal_id FROM webcal_entry " .
+      "WHERE cal_type = 'E' AND cal_date < '$end_date' $tail",
+      $ALL );
+    $M_ids = get_ids ( "SELECT webcal_entry.cal_id FROM webcal_entry " .
+      "INNER JOIN webcal_entry_repeats ON " .
+      "webcal_entry.cal_id = webcal_entry_repeats.cal_id " .
+      "WHERE webcal_entry.cal_type = 'M' AND " .
+      "cal_end IS NOT NULL AND cal_end < '$end_date' $tail",
+      $ALL );
+    $ids = array_merge ( $E_ids, $M_ids );
+  }
+  //echo "event ids: <ul><li>" . implode ( "</li><li>", $ids ) . "</li></ul>\n";
+  if ( count ( $ids ) > 0 ) {
+    purge_events ( $ids );
+  } else {
+    echo translate("None");
+  }
+  echo "<h2>..." .  translate("Finished") . ".</h2>\n";
+  if ( $purgeDebug ) {
+    echo "<div style=\"border: 1px solid #000;background-color: #fff;\"><tt>$sqlLog</tt></div>\n";
+  }
+} else {
+?>
+
+<form action="purge.php" method="post" name="purgeform">
+<table>
+	<tr><td><label for="user">
+		<?php etranslate("User");?>:</label></td>
+	<td><select name="user">
+<?php
+  $userlist = get_my_users ();
+  if ($nonuser_enabled == "Y" ) {
+    $nonusers = get_nonuser_cals ();
+    $userlist = ($nonuser_at_top == "Y") ? array_merge($nonusers, $userlist) : array_merge($userlist, $nonusers);
+  }
+  for ( $i = 0; $i < count ( $userlist ); $i++ ) {
+    echo "<option value=\"".$userlist[$i]['cal_login']."\">".$userlist[$i]['cal_fullname']."</option>\n";
+  }
+?>
+<option value="ALL" selected="selected"><?php etranslate("All")?></option>
+		</select>
+	</td></tr>
+	<tr><td><label for="purge_all">
+		<?php etranslate("Check box to delete <b>ALL</b> events for a user")?>:</label></td>
+		<td valign="bottom">
+		<input type="checkbox" name="purge_all" value="Y"
+                onclick="all_handler()" />
+	</td></tr>
+	<tr id="dateArea"><td><label>
+		<?php etranslate("Delete all events before");?>:</label></td><td>
+		<?php print_date_selection ( "end_", date ( "Ymd" ) ) ?>
+	</td></tr>
+	<tr><td><label for="preview">
+		<?php etranslate("Preview delete")?>:</label></td>
+		<td valign="bottom">
+		<input type="checkbox" name="preview" value="Y" checked="checked" />
+	</td></tr>
+	<tr><td colspan="2">
+		<input type="submit" name="action" value="<?php etranslate("Delete")?>" onclick="return confirm('<?php etranslate("Are you sure you want to delete events for");?> ' + document.forms[0].user.value + '?')" />
+	</td></tr>
+</table>
+</form>
+
+<?php } ?>
+</td></tr></table>
+
+<?php print_trailer(); ?>
+</body>
+</html>
+<?php
+function purge_events ( $ids ) {
+  global $preview, $c; // db connection
+  global $sqlLog;
+
+  $tables = array (
+    array ( 'webcal_entry_user', 'cal_id' ),
+    array ( 'webcal_entry_repeats', 'cal_id' ),
+    array ( 'webcal_entry_repeats_not', 'cal_id' ),
+    array ( 'webcal_entry_log', 'cal_entry_id' ),
+    array ( 'webcal_import_data', 'cal_id' ),
+    array ( 'webcal_site_extras', 'cal_id' ),
+    array ( 'webcal_reminder_log', 'cal_id' ),
+    array ( 'webcal_entry_ext_user', 'cal_id' ),
+    array ( 'webcal_entry', 'cal_id' )
+  );
+
+  //var_dump($tables);exit;
+  $num = array();
+  for ( $i = 0; $i < count ( $tables ); $i++ ) {
+    $num[$i] = 0;
+  }
+  foreach ( $ids as $cal_id ) {
+    for ( $i = 0; $i < count ( $tables ); $i++ ) {
+      $clause = ( $cal_id == 'ALL' ? '' :
+        " WHERE {$tables[$i][1]} = $cal_id" );
+      if ( $preview ) {
+        $sql = "SELECT COUNT(" . $tables[$i][1] .
+          ") FROM {$tables[$i][0]}" . $clause;
+        //echo "cal_id = '$cal_id'<br>clause = '$clause'<br>";
+        //echo "$sql <br/>\n";
+        $res = dbi_query ( $sql );
+        $sqlLog .= $sql . "<br/>\n";
+        if ( $res ) {
+          if ( $row = dbi_fetch_row ( $res ) )
+            $num[$i] += $row[0];
+          dbi_free_result ( $res );
+        }
+      } else {
+        $sql = "DELETE FROM {$tables[$i][0]}" . $clause;
+        $sqlLog .= $sql . "<br/>\n";
+        $res = dbi_query ( $sql );
+        if ( $cal_id == 'ALL' ) {
+          $num[$i] = translate ( "All" );
+        } else {
+          $num[$i] += dbi_affected_rows ( $c, $res );
+        }
+      }
+    }
+  }
+  for ( $i = 0; $i < count ( $tables ); $i++ ) {
+    $table = $tables[$i][0];
+    echo "[" . translate ( "Preview" ) . "] " .
+      translate("Records deleted from") .
+      " $table: $num[$i]<br />\n";
+  }
+}
+
+function get_ids ( $sql, $ALL = '' ) {
+  global $sqlLog;
+  $ids = array ();
+  //echo "SQL: $sql <br/>\n";
+  $sqlLog .= $sql . "<br/>\n";
+  $res = dbi_query ( $sql );
+  if ( $res ) {
+    while ( $row = dbi_fetch_row ( $res ) ) {
+      if ($ALL == 1) {
+        $ids[] = $row[0];
+      } else {
+        //ONLY Delete event if no other participants.
+        $ID = $row[0];
+        $res2 = dbi_query ( "SELECT COUNT(*) FROM webcal_entry_user " .
+          "WHERE cal_id = $ID" );
+        if ( $res2 ) {
+          if ( $row2 = dbi_fetch_row ( $res2 ) ) {
+            if ( $row2[0] == 1 ) $ids[] = $ID;
+          }
+          dbi_free_result ( $res2 );
+        }
+      } // End if ($ALL)
+    } // End while
+  }
+  dbi_free_result ( $res );
+  return $ids;
+}
+?>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/reject_entry.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/reject_entry.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/reject_entry.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,118 @@
+<?php
+include_once 'includes/init.php';
+
+$error = "";
+
+if ( $readonly == 'Y' ) {
+  $error = translate("You are not authorized");
+}
+
+// Allow administrators to approve public events
+if ( $public_access == "Y" && ! empty ( $public ) && $is_admin )
+  $app_user = "__public__";
+else
+  $app_user = ( $is_assistant || $is_nonuser_admin ? $user : $login );
+
+if ( empty ( $error ) && $id > 0 ) {
+  if ( ! dbi_query ( "UPDATE webcal_entry_user SET cal_status = 'R' " .
+    "WHERE cal_login = '$app_user' AND cal_id = $id" ) ) {
+    $error = translate("Error approving event") . ": " . dbi_error ();
+  } else {
+    activity_log ( $id, $login, $app_user, $LOG_REJECT, "" );
+  }
+
+  // Update any extension events related to this one.
+  $res = dbi_query ( "SELECT cal_id FROM webcal_entry " .
+    "WHERE cal_ext_for_id = $id" );
+  if ( $res ) {
+    if ( $row = dbi_fetch_row ( $res ) ) {
+      $ext_id = $row[0];
+      if ( ! dbi_query ( "UPDATE webcal_entry_user SET cal_status = 'R' " .
+        "WHERE cal_login = '$app_user' AND cal_id = $ext_id" ) ) {
+        $error = translate("Error approving event") . ": " . dbi_error ();
+      } 
+    }
+    dbi_free_result ( $res );
+  }
+
+  // Email participants to notify that it was rejected.
+  // Get list of participants
+  $sql = "SELECT cal_login FROM webcal_entry_user WHERE cal_id = $id and cal_status = 'A'";
+  //echo $sql."<br />";
+  $res = dbi_query ( $sql );
+  if ( $res ) {
+    while ( $row = dbi_fetch_row ( $res ) )
+      $partlogin[] = $row[0];
+    dbi_free_result($res);
+  }
+
+  // Get the name of the event
+  $sql = "SELECT cal_name, cal_description, cal_date, cal_time FROM webcal_entry WHERE cal_id = $id";
+  $res = dbi_query ( $sql );
+  if ( $res ) {
+    $row = dbi_fetch_row ( $res );
+    $name = $row[0];
+    $description = $row[1];
+    $fmtdate = $row[2];
+    $time = $row[3];
+    dbi_free_result ( $res );
+  }
+
+  if ($time != '-1') {
+    $hour = substr($time,0,2);
+    $minute = substr($time,2,2);
+  }
+
+  for ( $i = 0; $i < count ( $partlogin ); $i++ ) {
+    // does this user want email for this?
+    $send_user_mail = get_pref_setting ( $partlogin[$i],
+      "EMAIL_EVENT_REJECTED" );
+     user_load_variables ( $partlogin[$i], "temp" );
+    $user_language = get_pref_setting ( $partlogin[$i], "LANGUAGE" );
+    if ( $send_user_mail == "Y" && strlen ( $tempemail ) &&
+      $send_email != "N" ) {
+        if (($GLOBALS['LANGUAGE'] != $user_language) && ! empty ( $user_language ) && ( $user_language != 'none' )){
+          reset_language ( $user_language );
+        }
+        $msg = translate("Hello") . ", " . $tempfullname . ".\n\n" .
+        translate("An appointment has been rejected by") .
+        " " . $login_fullname .  ". " .
+        translate("The subject was") . " \"" . $name . " \"\n" .
+        translate("The description is") . " \"" . $description . "\"\n" .
+        translate("Date") . ": " . date_to_str ( $fmtdate ) . "\n" .
+        ( ( empty ( $hour ) && empty ( $minute ) ) ? "" :
+        translate("Time") . ": " .
+        display_time ( ( $hour * 10000 ) + ( $minute * 100 ) ) ) .
+        "\n\n\n";
+      if ( ! empty ( $server_url ) ) {
+        $url = $server_url .  "view_entry.php?id=" .  $id;
+        $msg .= "\n\n" . $url;
+      }
+
+      $from = $email_fallback_from;
+      if ( strlen ( $login_email ) )
+        $from = $login_email;
+
+      $extra_hdrs = "From: $from\r\nX-Mailer: " . translate("Title");
+
+      mail ( $tempemail,
+        translate($application_name) . " " . translate("Notification") . ": " . $name,
+        html_to_8bits ($msg), $extra_hdrs );
+      activity_log ( $id, $login, $partlogin[$i], $LOG_NOTIFICATION,
+        "Event rejected by $app_user" );
+    }
+  }
+}
+
+if ( empty ( $error ) ) {
+  if ( $ret == "list" )
+    do_redirect ( "list_unapproved.php?user=$app_user" );
+  else
+    do_redirect ( "view_entry.php?id=$id&user=$app_user" );
+  exit;
+}
+print_header ();
+echo "<h2>" . translate("Error") . "</h2>\n";
+echo "<p>" . $error . "</p>\n";
+print_trailer ();
+?>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/report.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/report.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/report.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,565 @@
+<?php
+/*
+ * $Id: report.php,v 1.27.2.4 2006/01/05 14:22:34 umcesrjones Exp $
+ *
+ * Page Description:
+ * This page will either list all reports available to the current
+ * user (if report id not specified) or display a report (if the
+ * report id is specified).
+ *
+ * Input Parameters:
+ * report_id (optional) - specified report id in webcal_report table
+ * offset (optional) - specifies how many days/weeks/months +/- to display.
+ *   For example, if the report type is 1 (today) with offset=5, then
+ *   the report will display 5 days from now.  Should only be specified
+ *   if report_id is specified.  Will be ignored if specified report
+ *   does not have the webcal_report.cal_allow_nav field set to 'Y'.
+ * user (optional) - specifies which user's calendar to use for the
+ *   report.  This will be ignored if the chosen report is tied to
+ *   a specific user.
+ *
+ * Security:
+ * If system setting $reports_enabled is set to anything other than
+ *   'Y', then don't allow access to this page.
+ * If webcal_report.cal_is_global is set to 'Y', any user can view
+ *   the report.  If set to 'N', only the creator (set in
+ *   webcal_report.cal_login) can view the report.
+ * If webcal_report.cal_allow_nav is 'Y', then Next and Previous
+ *   links will be presented.  If 'N', then they will not and the
+ *   offset parameter will be ignored.
+ * Public user cannot edit/list reports.
+ *
+ */
+
+include_once 'includes/init.php';
+
+// Generate the HTML for one event
+// params:
+//   $id - event id
+//   $date - date
+//   $time - time (in HHMMSS format)
+//   $duration - event duration (in minutes)
+//   $name - event name
+//   $description - long description of event
+//   $status - event status
+//   $pri - event priority
+//   $access - event access
+//   $event_owner - user associated with this event
+function event_to_text ( $id, $date, $time, $duration,
+  $name, $description, $status,
+  $pri, $access, $event_owner ) {
+  global $login, $user, $event_template, $report_id, $allow_html_description;
+
+  $time_str = $start_time_str = $end_time_str = '';
+
+  if ( $duration == ( 24 * 60 ) ) {
+    $time_str = translate("All day event");
+  } else if ( $time == -1 ) {
+    $time_str = translate("Untimed event");
+  } else {
+    $time_str = display_time ( $time );
+    $start_time_str = $time_str;
+    $time_short = preg_replace ("/(:00)/", '', $time_str);
+    if ( $duration > 0 ) {
+      if ( $duration == ( 24 * 60 ) ) {
+        $time_str = translate("All day event");
+      } else {
+        // calc end time
+        $h = (int) ( $time / 10000 );
+        $m = ( $time / 100 ) % 100;
+        $m += $duration;
+        $d = $duration;
+        while ( $m >= 60 ) {
+          $h++;
+          $m -= 60;
+        }
+        $end_time = sprintf ( "%02d%02d00", $h, $m );
+        $time_str .= " - " . display_time ( $end_time );
+        $end_time_str = display_time ( $end_time );
+      }
+    }
+  }
+  if ( $login != $user && $access == 'R' && strlen ( $user ) ) {
+    $name_str = "(" . translate("Private") . ")";
+    $description_str = translate("This event is confidential");
+  } else if ( $login != $event_owner && $access == 'R' &&
+    strlen ( $event_owner ) ) {
+    $name_str = "(" . translate("Private") . ")";
+    $description_str = translate("This event is confidential");
+  } else {
+    $name_str = htmlspecialchars ( $name );
+    if ( ! empty ( $allow_html_description ) &&
+      $allow_html_description == 'Y' ) {
+      $str = str_replace ( '&', '&', $description );
+      $description_str = str_replace ( '&amp;', '&', $str );
+      if ( strstr ( $description_str, "<" ) &&
+        strstr ( $description_str, ">" ) ) {
+        // found some HTML
+      } else {
+        // No HTML found.  Add line breaks.
+        $description_str = nl2br ( $description_str );
+      }
+    } else {
+      $description_str = nl2br (
+        activate_urls ( htmlspecialchars ( $description ) ) );
+    }
+  }
+
+  $date_str = date_to_str ( $date, "", false );
+  $date_full_str = date_to_str ( $date, "", true, false );
+
+  if ( $duration > 0 ) {
+    $duration_str = $duration . ' ' . translate ( "minutes" );
+  } else {
+    $duration_str = '';
+  }
+
+  if ( $pri == 1 ) {
+    $pri_str = translate ( "Low" );
+  } else if ( $pri == 2 ) {
+    $pri_str = translate ( "Medium" );
+  } else if ( $pri == 3 ) {
+    $pri_str = translate ( "High" );
+  }
+
+  if ( $status == 'W' ) {
+    $status_str = translate ( "Waiting for approval" );
+  } else if ( $status == 'D' ) {
+    $status_str = translate ( "Deleted" );
+  } else if ( $status == 'R' ) {
+    $status_str = translate ( "Rejected" );
+  } else if ( $status == 'A' ) {
+    $status_str = translate ( "Approved" );
+  } else {
+    $status_str = translate ( "Unknown" );
+  }
+
+  $href_str = "view_entry.php?id=$id";
+
+  // Replace all variables in the event template.
+  $text = $event_template;
+  $text = str_replace ( '${name}', $name_str, $text );
+  $text = str_replace ( '${description}', $description_str, $text );
+  $text = str_replace ( '${date}', $date_str, $text );
+  $text = str_replace ( '${dateYmd}', $date, $text );
+  $text = str_replace ( '${fulldate}', $date_full_str, $text );
+  $text = str_replace ( '${time}', $time_str, $text );
+  $text = str_replace ( '${starttime}', $start_time_str, $text );
+  $text = str_replace ( '${endtime}', $end_time_str, $text );
+  $text = str_replace ( '${duration}', $duration_str, $text );
+  $text = str_replace ( '${priority}', $pri_str, $text );
+  $text = str_replace ( '${href}', $href_str, $text );
+  $text = str_replace ( '${id}', $id, $text );
+  $text = str_replace ( '${user}', $event_owner, $text );
+  $text = str_replace ( '${report_id}', $report_id, $text );
+
+  return $text;
+}
+
+$error = "";
+$list = ""; // list of reports when no id specified
+
+if ( ! empty ( $user ) && $user != $login &&
+  ( ( ! empty ( $allow_view_other ) && $allow_view_other == 'Y' )
+  || $is_admin ) ) {
+  $report_user = $user;
+  $u_url = "&user=$user";
+} else {
+  $u_url = "";
+}
+
+if ( empty ( $reports_enabled ) || $reports_enabled != 'Y' ) {
+  $error = translate ( "You are not authorized" ) . ".";
+}
+
+$updating_public = false;
+if ( $is_admin && ! empty ( $public ) && $public_access == "Y" ) {
+  $updating_public = true;
+  $report_user = "__public__";
+}
+
+$report_id = getIntValue ( "report_id", true );
+$offset = getIntValue ( "offset", true );
+if ( empty ( $offset ) ) {
+  $offset = 0;
+}
+
+// If no report id is specified, then generate a list of reports for
+// the user to select from.
+if ( empty ( $error ) && empty ( $report_id ) && $login == "__public__" ) {
+  $error = translate ( "You are not authorized" ) . ".";
+}
+if ( empty ( $error ) && empty ( $report_id ) ) {
+  $list = "";
+  if ( $is_admin ) {
+    if ( ! $updating_public ) {
+      $list .= "<p><a title=\"" .
+        translate("Click here") . " " .
+        translate("to manage reports for the Public Access calendar") . "." .
+        "\" href=\"report.php?public=1\">" .
+        translate("Click here") . " " .
+        translate("to manage reports for the Public Access calendar") . "." .
+        "</a></p>\n";
+      $sql = "SELECT cal_report_id, cal_report_name " .
+        "FROM webcal_report WHERE cal_login = '$login' OR " .
+        "cal_is_global = 'Y' ORDER BY cal_update_date DESC, cal_report_name";
+    } else {
+      $sql = "SELECT cal_report_id, cal_report_name " .
+        "FROM webcal_report WHERE cal_login = '__public__' " .
+        "ORDER BY cal_update_date DESC, cal_report_name";
+    }
+  } else {
+    $sql = "SELECT cal_report_id, cal_report_name " .
+      "FROM webcal_report WHERE cal_login = '$login' " .
+      "ORDER BY cal_update_date DESC, cal_report_name";
+  }
+  $res = dbi_query ( $sql );
+  $list .= "<ul>\n";
+  if ( $res ) {
+    while ( $row = dbi_fetch_row ( $res ) ){
+      $rep_name = trim ( $row[1] );
+      if ( empty ( $rep_name ) )
+        $rep_name = translate ( "Unnamed Report" );
+      $list .= "<li><a href=\"edit_report.php?report_id=$row[0]\" class=\"nav\">" .
+        $rep_name . "</a></li>\n";
+    }
+    $list .= "</ul>\n";
+    $addurl = $updating_public ? "edit_report.php?public=1" : "edit_report.php";
+    $list .= "<p><a title=\"" .
+      translate("Add new report") . "\" href=\"$addurl\" class=\"nav\">" .
+      translate("Add new report") . "</a></p>\n";
+    dbi_free_result ( $res );
+  } else {
+    $error = translate ( "Invalid report id" );
+  }
+}
+
+// Load the specified report
+if ( empty ( $error ) && empty ( $list ) ) {
+  $res = dbi_query ( "SELECT cal_login, cal_report_id, cal_is_global, " .
+    "cal_report_type, cal_include_header, cal_report_name, " .
+    "cal_time_range, cal_user, " .
+    "cal_allow_nav, cal_cat_id, cal_include_empty, cal_update_date " .
+    "FROM webcal_report WHERE cal_report_id = $report_id" );
+  if ( $res ) {
+    if ( $row = dbi_fetch_row ( $res ) ) { 
+      if ( $row[2] != 'Y' && $login != $row[0] ) {
+        $error = translate ( "You are not authorized" ) . ".";
+      } else {
+        $i = 0;
+        $report_login = $row[$i++];
+        $report_id = $row[$i++];
+        $report_is_global = $row[$i++];
+        $report_type = $row[$i++];
+        $report_include_header = $row[$i++];
+        $report_name = $row[$i++];
+        $report_time_range = $row[$i++];
+        $test_report_user = $row[$i++];
+        // If this report type specifies a specific user, then we will
+        // use that user rather even if a user was passed in via URL.
+        if ( ! empty ( $test_report_user ) ) {
+          $report_user = $test_report_user;
+        }
+        $report_allow_nav = $row[$i++];
+        $report_cat_id = $row[$i++];
+        $report_include_empty = $row[$i++];
+        $report_update_date = $row[$i++];
+      }
+    } else {
+      $error = translate ( "Invalid report id" );
+    }
+    dbi_free_result ( $res );
+  } else {
+    $error = translate ( "Database error" ) . ": " . dbi_error ();
+  }
+}
+
+if ( empty ( $report_user ) ) {
+  $report_user = $login;
+}
+//echo "User: $report_user <p>";
+
+// Set default templates (in case there are none in the database for
+// this report.)
+$page_template = '<dl>${days}</dl>';
+$day_template = '<dt><b>${date}</b></dt><dd><dl>${events}</dl></dd>';
+$event_template = '<dt>${name}</dt><dd>' .
+  '<b>' . translate ( "Date" ) . ':</b> ${date}<br />' .
+  '<b>' . translate ( "Time" ) . ':</b> ${time}<br />' .
+  '${description}</dd>';
+
+// Load templates for this report.
+if ( empty ( $error ) && empty ( $list ) ) {
+  $res = dbi_query ( "SELECT cal_template_type, cal_template_text " .
+    "FROM webcal_report_template " .
+    "WHERE cal_report_id = $report_id" );
+  if ( $res ) {
+    while ( $row = dbi_fetch_row ( $res ) ) {
+      if ( $row[0] == 'P' ) {
+        $page_template = $row[1];
+      } else if ( $row[0] == 'D' ) {
+        $day_template = $row[1];
+      } else if ( $row[0] == 'E' ) {
+        $event_template = $row[1];
+      } else {
+        // This shouldn't happen under normal circumstances, so
+        // no need translate.
+        echo "Invalid template type: '$row[0]'";
+        exit;
+      }
+    }
+    dbi_free_result ( $res );
+  } else {
+    $error = translate ( "Database error" ) . ": " . dbi_error ();
+  }
+}
+
+if ( ! empty ( $report_include_header ) && $report_include_header == 'Y' ||
+  ! empty ( $list ) || ! empty ( $error ) ) {
+  print_header();
+}
+
+if ( empty ( $offset ) || empty ( $report_allow_nav ) ||
+  $report_allow_nav != 'Y' ) {
+  $offset = 0;
+}
+
+// Set time range based on cal_time_range field.
+if ( ! isset ( $report_time_range ) ) {
+  // manage reports
+} else if ( $report_time_range >= 0 && $report_time_range < 10 ) {
+  $today = mktime ( 3, 0, 0, date ( "m" ), date ( "d" ), date ( "Y" ) );
+  $days_offset = 1 - $report_time_range + $offset;
+  $start_date = date ( "Ymd", $today + ( $days_offset * $ONE_DAY ) );
+  $end_date = $start_date;
+} else if ( $report_time_range >= 10 && $report_time_range < 20 ) {
+  if ( $WEEK_START == 1 ) {
+    $wkstart = get_monday_before ( date ( "Y" ), date ( "m" ),
+      date ( "d" ) );
+  } else {
+    $wkstart = get_sunday_before ( date ( "Y" ), date ( "m" ),
+      date ( "d" ) );
+  }
+  //echo "wkstart = " . date("Ymd",$wkstart) . "<br />";
+  $week_offset = 11 - $report_time_range + $offset;
+  //echo "week_offset=$week_offset <br />";
+  $start_date = date ( "Ymd", $wkstart + ( $week_offset * 7 * $ONE_DAY ) );
+  $end_date = date ( "Ymd", $wkstart + ( $week_offset * 7 * $ONE_DAY ) + 
+    ( $ONE_DAY * 6 ) );
+} else if ( $report_time_range >= 20 && $report_time_range < 30 ) {
+  if ( $WEEK_START == 1 ) {
+    $wkstart = get_monday_before ( date ( "Y" ), date ( "m" ),
+      date ( "d" ) );
+  } else {
+    $wkstart = get_sunday_before ( date ( "Y" ), date ( "m" ),
+      date ( "d" ) );
+  }
+  //echo "wkstart = " . date("Ymd",$wkstart) . "<br />";
+  $week_offset = 21 - $report_time_range + $offset;
+  //echo "week_offset=$week_offset <br />";
+  $start_date = date ( "Ymd", $wkstart + ( $week_offset * 7 * $ONE_DAY ) );
+  $end_date = date ( "Ymd", $wkstart + ( $week_offset * 7 * $ONE_DAY ) + 
+    ( $ONE_DAY * 13 ) );
+} else if ( $report_time_range >= 30 && $report_time_range < 40 ) {
+  $thismonth = date ( "m" );
+  $month_offset = 31 - $report_time_range + $offset;
+  //echo "month_offset=$month_offset <br />";
+  $start_date = date ( "Ymd", mktime ( 3, 0, 0, $thismonth + $month_offset,
+    1, date ( "Y" ) ) );
+  $end_date = date ( "Ymd", mktime ( 3, 0, 0, $thismonth + $month_offset + 1,
+    0, date ( "Y" ) ) );
+} else if ( $report_time_range >= 40 && $report_time_range < 50 ) {
+  $thisyear = date ( "Y" );
+  $year_offset = 41 - $report_time_range + $offset;
+  //echo "year_offset=$year_offset <br />";
+  $start_date = date ( "Ymd", mktime ( 3, 0, 0, 1, 1,
+    $thisyear + $year_offset ) );
+  $end_date = date ( "Ymd", mktime ( 3, 0, 0, 12, 31,
+    $thisyear + $year_offset ) );
+} else if ( $report_time_range >= 50 && $report_time_range < 60 ) {
+  // This series of reports is today + N days
+  switch ( $report_time_range ) {
+    case 50: $x = 14; break;
+    case 51: $x = 30; break;
+    case 52: $x = 60; break;
+    case 53: $x = 90; break;
+    case 54: $x = 180; break;
+    case 55: $x = 365; break;
+    default: echo "Invalid cal_time_range setting for report id $report_id";
+      exit;
+  }
+  $today = mktime ( 0, 0, 0, date ( "m" ), date ( "d" ), date ( "Y" ) );
+  $start = $today + ( $ONE_DAY * $offset * $x );
+  $end = $start + ( $ONE_DAY * $x );
+  $start_date = date ( "Ymd", $start );
+  $end_date = date ( "Ymd", $end );
+} else {
+  // Programmer's bug (no translation needed)
+  echo "Invalid cal_time_range setting for report id $report_id";
+  exit;
+}
+
+if ( empty ( $error ) && empty ( $list ) ) {
+  $cat_id = empty ( $report_cat_id ) ? "" : $report_cat_id;
+
+  $repeated_events = read_repeated_events ( $report_user, $cat_id, $start_date );
+
+  $events = read_events ( $report_user, $start_date, $end_date, $cat_id );
+
+  $get_unapproved = $DISPLAY_UNAPPROVED == 'Y';
+  if ( $report_user == "__public__" ) {
+    $get_unapproved = false;
+  }
+
+  //echo "User: $report_user <br />\n";
+  //echo "Date Range: $start_date - $end_date <br /><br />\n";
+
+  $start_year = substr ( $start_date, 0, 4 );
+  $start_month = substr ( $start_date, 4, 2 );
+  $start_day = substr ( $start_date, 6, 2 );
+  $start_time = mktime ( 3, 0, 0, $start_month, $start_day, $start_year );
+
+  $end_year = substr ( $end_date, 0, 4 );
+  $end_month = substr ( $end_date, 4, 2 );
+  $end_day = substr ( $end_date, 6, 2 );
+  $end_time = mktime ( 3, 0, 0, $end_month, $end_day, $end_year );
+
+  $day_str = '';
+
+  // Loop through each day
+  // Get events for each day (both normal and repeating).
+  // (Most of this code was copied from week.php)
+  for ( $cur_time = $start_time; $cur_time <= $end_time; $cur_time += $ONE_DAY ) {
+    $event_str = '';
+    $dateYmd = date ( "Ymd", $cur_time );
+    $rep = get_repeating_entries ( empty ( $user ) ? $login : $user, $dateYmd );
+    $ev = get_entries ( empty ( $user ) ? $login : $user, $dateYmd );
+    $cur_rep = 0;
+    //echo "DATE: $dateYmd <br />\n";
+  
+    for ( $i = 0; $i < count ( $ev ); $i++ ) {
+      // print out any repeating events that are before this one...
+      while ( $cur_rep < count ( $rep ) &&
+        $rep[$cur_rep]['cal_time'] < $ev[$i]['cal_time'] ) {
+        if ( $get_unapproved || $rep[$cur_rep]['cal_status'] == 'A' ) {
+          if ( ! empty ( $rep[$cur_rep]['cal_ext_for_id'] ) ) {
+            $viewid = $rep[$cur_rep]['cal_ext_for_id'];
+            $viewname = $rep[$cur_rep]['cal_name'] . " (" .
+              translate("cont.") . ")";
+          } else {
+            $viewid = $rep[$cur_rep]['cal_id'];
+            $viewname = $rep[$cur_rep]['cal_name'];
+          }
+          $event_str .= event_to_text ( $viewid,
+            $dateYmd, $rep[$cur_rep]['cal_time'], $rep[$cur_rep]['cal_duration'],
+            $viewname, $rep[$cur_rep]['cal_description'],
+            $rep[$cur_rep]['cal_status'], $rep[$cur_rep]['cal_priority'],
+            $rep[$cur_rep]['cal_access'], $rep[$cur_rep]['cal_login'] );
+        }
+        $cur_rep++;
+      }
+      if ( $get_unapproved || $ev[$i]['cal_status'] == 'A' ) {
+        if ( ! empty ( $ev[$i]['cal_ext_for_id'] ) ) {
+          $viewid = $ev[$i]['cal_ext_for_id'];
+          $viewname = $ev[$i]['cal_name'] . " (" .
+            translate("cont.") . ")";
+        } else {
+          $viewid = $ev[$i]['cal_id'];
+          $viewname = $ev[$i]['cal_name'];
+        }
+        $event_str .= event_to_text ( $viewid,
+          $dateYmd, $ev[$i]['cal_time'], $ev[$i]['cal_duration'],
+          $viewname, $ev[$i]['cal_description'],
+          $ev[$i]['cal_status'], $ev[$i]['cal_priority'],
+          $ev[$i]['cal_access'], $ev[$i]['cal_login'] );
+      }
+    }
+    // print out any remaining repeating events
+    while ( $cur_rep < count ( $rep ) ) {
+      if ( $get_unapproved || $rep[$cur_rep]['cal_status'] == 'A' ) {
+        if ( ! empty ( $rep[$cur_rep]['cal_ext_for_id'] ) ) {
+          $viewid = $rep[$cur_rep]['cal_ext_for_id'];
+          $viewname = $rep[$cur_rep]['cal_name'] . " (" .
+            translate("cont.") . ")";
+        } else {
+          $viewid = $rep[$cur_rep]['cal_id'];
+          $viewname = $rep[$cur_rep]['cal_name'];
+        }
+        $event_str .= event_to_text ( $viewid,
+          $dateYmd, $rep[$cur_rep]['cal_time'], $rep[$cur_rep]['cal_duration'],
+          $viewname, $rep[$cur_rep]['cal_description'],
+          $rep[$cur_rep]['cal_status'], $rep[$cur_rep]['cal_priority'],
+          $rep[$cur_rep]['cal_access'], $rep[$cur_rep]['cal_login'] );
+      }
+      $cur_rep++;
+    }
+  
+    if ( ! empty ( $event_str ) || $report_include_empty == 'Y' ||
+      $report_time_range < 10 ) {
+      $date_str = date_to_str ( $dateYmd, "", false );
+      $date_full_str = date_to_str ( $dateYmd, "", true, false );
+      $text = str_replace ( '${events}', $event_str, $day_template );
+      $text = str_replace ( '${report_id}', $report_id, $text );
+      $text = str_replace ( '${fulldate}', $date_full_str, $text );
+      $day_str .= str_replace ( '${date}', $date_str, $text );
+    }
+  }
+}
+
+if ( ! empty ( $error ) ) {
+  echo "<h2>" . translate("Error") .
+    "</h2>\n" . $error;
+} else if ( ! empty ( $list ) ) {
+  echo "<h2>";
+  if ( $updating_public ) {
+    echo translate($PUBLIC_ACCESS_FULLNAME) . " ";
+  }
+  echo translate("Manage Reports");
+  echo "</h2>\n" . 
+  "<a title=\"" . translate("Admin") . "\" class=\"nav\" href=\"adminhome.php\"> " .
+     "« " . translate("Admin") . "</a><br /><br />\n" . $list;
+} else {
+  if ( $report_include_header == 'Y' ) {
+    echo "<h2>" . $report_name . "</h2>\n";
+  }
+  $text = str_replace ( '${report_id}', $report_id, $page_template );
+  echo str_replace ( '${days}', $day_str, $text );
+}
+
+
+if ( empty ( $error ) && empty ( $list ) ) {
+  if ( ! empty ( $report_allow_nav ) && $report_allow_nav == 'Y' ) {
+    if ( empty ( $offset ) ) {
+      $offset = 0;
+    }
+    $next = $offset + 1;
+    $prev = $offset - 1;
+    echo "<br /><br /><a title=\"" .
+      translate ( "Previous" ) . "\" href=\"report.php?report_id=$report_id$u_url" .
+      ( empty ( $prev ) ? "" : "&offset=$prev" ) . "\" class=\"nav\">" .
+      translate ( "Previous" ) . "</a>\n";
+    echo "  <a title=\"" .
+      translate ( "Next" ) . "\" href=\"report.php?report_id=$report_id$u_url" .
+      ( empty ( $next ) ? "" : "&offset=$next" ) . "\" class=\"nav\">" .
+      translate ( "Next" ) . "</a><br />\n";
+  }
+  if ( $report_include_header == 'Y' ) {
+    echo '<br /><br /><a title="' . translate("Printer Friendly") . 
+      '" class="nav" href="report.php?report_id=' . $report_id .
+      '&friendly=1' . $u_url . '&offset=' . $offset .
+      '" target="cal_printer_friendly" onmouseover="window.status=\'' .
+      translate("Generate printer-friendly version") .
+      '\'">[' . translate("Printer Friendly") . ']</a>';
+  }
+}
+
+if ( ! empty ( $list ) || $report_include_header == 'Y'
+  || ! empty ( $error ) || ! empty ( $list ) ) {
+  print_trailer ();
+} else {
+  print_trailer ( false );
+}
+
+?>
+</body>
+</html>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/rightarrow.gif
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/rightarrow.gif	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/rightarrow.gif	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1 @@
+GIF89a$   ¡     ÿÿÿ¿¿¿   !ù   ,    $    ƒ”i íŸ ƒ´‚0«Vït¸‰£%¥ê*®›AæK×vìÌö^ãÜùº p¸0*_ÈâRØp>o¿é'µÒ$D­‘›ÉjÁ‚‰xJ{…Œvw½ucYô»ŒçÔé7ùÃXÖã'ƒØÂDHqh˜hHò£ù“Fùgyù÷¨YˆÔIôQ  ;
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/rightarrowsmall.gif
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/rightarrowsmall.gif	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/rightarrowsmall.gif	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,2 @@
+GIF89a  ¡     ÿÿÿ¿¿¿   !ù   ,       9”o€Ë©
+AxpÉÉ€Þ;xšxâ(‚‰R'J>+;*/<ut©	sšë‡3ý4Ÿ^EWU8GĦi  ;
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/search.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/search.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/search.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,70 @@
+<?php
+	include_once 'includes/init.php';
+
+if ( $is_admin == "Y" ) {
+  $INC = array('js/search.php');
+} else {
+  $INC = '';
+}
+	print_header($INC);
+?>
+<h2><?php 
+	etranslate("Search"); 
+?></h2>
+
+<form action="search_handler.php" method="post" name="searchformentry" style="margin-left:13px;">
+
+<label for="keywordsadv"><?php etranslate("Keywords")?>: </label>
+<input type="text" name="keywords" id="keywordsadv" size="30" /> 
+<input type="submit" value="<?php etranslate("Search")?>" /><br />
+<?php 
+	if ( ($login == "__public__" && $public_access_others != "Y") || (! $is_admin) ) {
+		echo "</form>";
+	} else {
+		echo "<div id=\"advlink\"><a title=\"" . 
+			translate("Advanced Search") . "\" href=\"javascript:show('adv'); hide('advlink');\">" . 
+			translate("Advanced Search") . "</a></div>";
+?>
+<table id="adv" style="display:none;">
+<tr><td style="vertical-align:top; text-align:right; font-weight:bold; width:60px;">
+	<?php etranslate("Users"); ?>: </td><td>
+<?php
+  $users = get_my_users ();
+  // Get non-user calendars (if enabled)
+  if ( ! empty ( $nonuser_enabled ) && $nonuser_enabled == "Y" ) {
+    $nonusers = get_nonuser_cals ();
+    if ( ! empty ( $nonuser_at_top ) && $nonuser_at_top == "Y" )
+      $users = array_merge ( $nonusers, $users );
+    else
+      $users = array_merge ( $users, $nonusers );
+  }
+  $size = 0;
+  $out = "";
+  for ( $i = 0; $i < count ( $users ); $i++ ) {
+    $out .= "<option value=\"" . $users[$i]['cal_login'] . "\"";
+    if ( $users[$i]['cal_login'] == $login )
+      $out .= " selected=\"selected\"";
+    $out .= ">" . $users[$i]['cal_fullname'] . "</option>\n";
+  }
+  if ( count ( $users ) > 50 )
+    $size = 15;
+  else if ( count ( $users ) > 10 )
+    $size = 10;
+  else
+    $size = count ( $users );
+?>
+<select name="users[]" size="<?php echo $size;?>" multiple="multiple"><?php echo $out; ?></select>
+<?php 
+  if ( $groups_enabled == "Y" ) {
+   echo "<input type=\"button\" onclick=\"selectUsers()\" value=\"" .
+      translate("Select") . "...\" />\n";
+  }
+?>
+</td></tr>
+</table>
+</form>
+<?php } ?>
+
+<?php print_trailer(); ?>
+</body>
+</html>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/search_handler.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/search_handler.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/search_handler.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,108 @@
+<?php
+include_once 'includes/init.php';
+
+$error = "";
+
+$keywords = getValue ( "keywords" );
+$advanced = getValue ( "advanced" );
+
+if ( strlen ( $keywords ) == 0 )
+  $error = translate("You must enter one or more search keywords") . ".";
+
+$matches = 0;
+
+$search_others = true;
+
+if ( empty ( $users ) || empty ( $users[0] ) )
+  $search_others = false;
+if ( $login == "__public__" && $public_access_others != "Y" )
+  $search_others = false;
+if ( $readonly == "Y" || $single_user == "Y" )
+  $search_others = false;
+
+print_header();
+?>
+
+<h2><?php etranslate("Search Results")?></h2>
+
+<?php
+if ( ! empty ( $error ) ) {
+  echo "<span style=\"font-weight:bold;\">" . translate("Error") . ":</span> $error";
+} else {
+  $ids = array ();
+  $words = split ( " ", $keywords );
+  for ( $i = 0; $i < count ( $words ); $i++ ) {
+    // Note: we only search approved events
+    $sql = "SELECT webcal_entry.cal_id, webcal_entry.cal_name, " .
+      "webcal_entry.cal_date " .
+      "FROM webcal_entry, webcal_entry_user " .
+      "WHERE webcal_entry.cal_id = webcal_entry_user.cal_id " .
+      "AND webcal_entry_user.cal_status in ('A','W') " .
+      "AND webcal_entry_user.cal_login IN ( ";
+    if ( $search_others ) {
+      if ( empty ( $users[0] ) )
+        $users[0] = $login;
+      for ( $j = 0; $j < count ( $users ); $j++ ) {
+        if ( $j > 0 )
+          $sql .= ", ";
+        $sql .= " '$users[$j]'";
+      }
+    } else
+      $sql .= " '$login' ";
+    $sql .= ") ";
+    if ( $search_others ) {
+      // Don't search confidential entries of other users.
+      $sql .= "AND ( webcal_entry_user.cal_login = '$login' OR " .
+        "( webcal_entry_user.cal_login != '$login' AND " .
+	"webcal_entry.cal_access = 'P' ) ) ";
+    }
+    $sql .= "AND ( UPPER(webcal_entry.cal_name) " .
+      "LIKE UPPER('%" .  $words[$i] . "%') " .
+      "OR UPPER(webcal_entry.cal_description) " .
+      "LIKE UPPER('%" .  $words[$i] . "%') ) " .
+      "ORDER BY cal_date";
+    //echo "SQL: $sql<br />";
+    $res = dbi_query ( $sql );
+    if ( $res ) {
+      while ( $row = dbi_fetch_row ( $res ) ) {
+        $matches++;
+        $idstr = strval ( $row[0] );
+        if ( empty ( $ids[$idstr] ) )
+          $ids[$idstr] = 1;
+        else
+          $ids[$idstr]++;
+        $info[$idstr] = "$row[1] (" . date_to_str ($row[2]) .
+          ")";
+      }
+    }
+    dbi_free_result ( $res );
+  }
+}
+
+if ( $matches > 0 )
+  $matches = count ( $ids );
+
+if ( $matches == 1 )
+  echo "<span style=\"font-weight:bold;\">$matches " . translate("match found") . ".</span><br /><br />";
+else if ( $matches > 0 )
+  echo "<span style=\"font-weight:bold;\">$matches " . translate("matches found") . ".</span><br /><br />";
+else
+  echo translate("No matches found") . ".";
+
+// now sort by number of hits
+if ( empty ( $error ) ) {
+  arsort ( $ids );
+  echo "<ul>\n";
+  for ( reset ( $ids ); $key = key ( $ids ); next ( $ids ) ) {
+    echo "<li><a class=\"nav\" href=\"view_entry.php?id=$key\">" . $info[$key] . "</a></li>\n";
+  }
+  echo "</ul>\n";
+}
+
+?>
+<br /><br />
+
+<?php print_trailer(); ?>
+
+</body>
+</html>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/select_user.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/select_user.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/select_user.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,44 @@
+<?php
+include_once 'includes/init.php';
+print_header();
+?>
+
+<h2><?php etranslate("View Another User's Calendar"); ?></h2>
+
+<?php
+if (( $allow_view_other != "Y" && ! $is_admin ) ||
+   ( $public_access == "Y" && $login == "__public__" && $public_access_others != "Y")) {
+  $error = translate ( "You are not authorized" );
+}
+
+if ( ! empty ( $error ) ) {
+  echo "<blockquote>$error</blockquote>\n";
+} else {
+  $userlist = get_my_users ();
+  if ($nonuser_enabled == "Y" ) {
+    $nonusers = get_nonuser_cals ();
+    $userlist = ($nonuser_at_top == "Y") ? array_merge($nonusers, $userlist) : array_merge($userlist, $nonusers);
+  }
+  if ( strstr ( $STARTVIEW, "view" ) )
+    $url = "month.php";
+  else
+    $url = $STARTVIEW;
+  ?>
+  <form action="<?php echo $url;?>" method="get" name="SelectUser">
+  <select name="user" onchange="document.SelectUser.submit()">
+  <?php
+  for ( $i = 0; $i < count ( $userlist ); $i++ ) {
+    echo "<option value=\"".$userlist[$i]['cal_login']."\">".$userlist[$i]['cal_fullname']."</option>\n";
+  }
+  ?>
+  </select>
+  <input type="submit" value="<?php etranslate("Go")?>" /></form>
+  <?php
+}
+
+?>
+<br /><br />
+
+<?php print_trailer(); ?>
+</body>
+</html>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/set_entry_cat.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/set_entry_cat.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/set_entry_cat.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,105 @@
+<?php
+include_once 'includes/init.php';
+load_user_categories();
+
+$error = "";
+
+if ( empty ( $id ) )
+  $error = translate("Invalid entry id") . ".";
+else if ( $categories_enabled != "Y" )
+  $error = translate("You are not authorized") . ".";
+else if ( empty ( $categories ) )
+  $error = translate("You have not added any categories") . ".";
+
+// make sure user is a participant
+$res = dbi_query ( "SELECT cal_category, cal_status FROM webcal_entry_user " .
+  "WHERE cal_id = $id AND cal_login = '$login'" );
+if ( $res ) {
+  if ( $row = dbi_fetch_row ( $res ) ) {
+    if ( $row[1] == "D" ) // User deleted themself
+      $error = translate("You are not authorized") . ".";
+    $cur_cat = $row[0];
+  } else {
+    // not a participant for this event
+    $error = translate("You are not authorized") . ".";
+  }
+  dbi_free_result ( $res );
+} else {
+  $error = translate("Database error") . ": " . dbi_error ();
+}
+
+// Get event name and make sure event exists
+$event_name = "";
+$res = dbi_query ( "SELECT cal_name FROM webcal_entry " .
+  "WHERE cal_id = $id" );
+if ( $res ) {
+  if ( $row = dbi_fetch_row ( $res ) ) {
+    $event_name = $row[0];
+  } else {
+    // No such event
+    $error = translate("Invalid entry id") . ".";
+  }
+} else {
+  $error = translate("Database error") . ": " . dbi_error ();
+}
+
+// If this is the form handler, then save now
+if ( ! empty ( $cat_id ) && empty ( $error ) ) {
+  $sql = "UPDATE webcal_entry_user SET cal_category = $cat_id " .
+    "WHERE cal_id = $id and cal_login = '$login'";
+  if ( ! dbi_query ( $sql ) ) {
+    $error = translate ( "Database error" ) . ": " . dbi_error ();
+  } else {
+    $url = "view_entry.php?id=$id";
+    if ( ! empty ( $date ) )
+      $url .= "&date=$date";
+    do_redirect ( $url );
+  }
+}
+
+print_header();
+?>
+
+<?php if ( ! empty ( $error ) ) { ?>
+<h2><?php etranslate("Error")?></h2>
+<blockquote>
+<?php echo $error; ?>
+</blockquote>
+
+<?php } else { ?>
+<h2><?php etranslate("Set Category")?></h2>
+
+<form action="set_entry_cat.php" method="post" name="SelectCategory">
+
+<input type="hidden" name="date" value="<?php echo $date?>" />
+<input type="hidden" name="id" value="<?php echo $id?>" />
+
+<table style="border-width:0px;" cellpadding="5">
+<tr style="vertical-align:top;"><td style="font-weight:bold;">
+	<?php etranslate("Brief Description")?>:</td><td>
+	<?php echo $event_name; ?>
+</td></tr>
+<tr style="vertical-align:top;"><td style="font-weight:bold;">
+	<?php etranslate("Category")?>: </td><td>
+	<select name="cat_id">
+		<option value="NULL"><?php etranslate("None")?></option>
+  <?php
+    foreach ( $categories as $K => $V ) {
+      if ( $K == $cur_cat )
+        echo "<option value=\"$K\" selected=\"selected\">$V</option>\n";
+      else
+        echo "<option value=\"$K\">$V</option>\n";
+    }
+  ?>
+	</select>
+</td></tr>
+<tr style="vertical-align:top;"><td colspan="2">
+	<input type="submit" value="<?php etranslate("Save");?>" />
+</td></tr>
+</table>
+</form>
+<?php } ?>
+
+<?php print_trailer(); ?>
+</body>
+</html>
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/spacer.gif
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/spacer.gif	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/spacer.gif	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1 @@
+GIF89a  €  ÿÿÿ   !ù    ,      @„Q ; 
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/tables-db2.sql
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/tables-db2.sql	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/tables-db2.sql	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,375 @@
+CREATE TABLE webcal_user (
+  cal_login VARCHAR(25) NOT NULL,
+  cal_passwd VARCHAR(32),
+  cal_lastname VARCHAR(25),
+  cal_firstname VARCHAR(25),
+  cal_is_admin CHAR(1) DEFAULT 'N',
+  cal_email VARCHAR(75),
+  PRIMARY KEY ( cal_login )
+);
+
+INSERT INTO webcal_user 
+ (cal_login, cal_passwd, cal_lastname, cal_firstname, cal_is_admin) 
+ VALUES ( 'admin', '21232f297a57a5a743894a0e4a801fc3', 'Administrator', 'Default', 'Y' );
+
+
+CREATE TABLE webcal_entry (
+  cal_id INT NOT NULL,
+  cal_group_id INT,
+  cal_ext_for_id INT,
+  cal_create_by VARCHAR(25) NOT NULL,
+  cal_date INT NOT NULL,
+  cal_time INT,
+  cal_mod_date INT,
+  cal_mod_time INT,
+  cal_duration INT NOT NULL,
+  cal_priority INT DEFAULT 2,
+  cal_type CHAR(1) DEFAULT 'E',
+  cal_access CHAR(1) DEFAULT 'P',
+  cal_name VARCHAR(80) NOT NULL,
+  cal_description varchar(1024),
+  PRIMARY KEY ( cal_id )
+);
+
+
+CREATE TABLE webcal_entry_repeats (
+   cal_id INT DEFAULT 0 NOT NULL,
+   cal_type VARCHAR(20),
+   cal_end INT,
+   cal_frequency INT DEFAULT 1,
+   cal_days CHAR(7),
+   PRIMARY KEY (cal_id)
+);
+
+
+CREATE TABLE webcal_entry_repeats_not (
+  cal_id INT NOT NULL,
+  cal_date INT NOT NULL,
+  PRIMARY KEY ( cal_id, cal_date )
+);
+
+
+
+CREATE TABLE webcal_entry_user (
+  cal_id int DEFAULT 0 NOT NULL,
+  cal_login varchar(25) DEFAULT '' NOT NULL, 
+  cal_status char(1) DEFAULT 'A' NOT NULL,
+  cal_category INT DEFAULT NULL,
+  PRIMARY KEY ( cal_id,cal_login )
+);
+
+
+CREATE TABLE webcal_entry_ext_user (
+  cal_id INT DEFAULT 0 NOT NULL,
+  cal_fullname VARCHAR(50) NOT NULL,
+  cal_email VARCHAR(75) DEFAULT NULL,
+  PRIMARY KEY ( cal_id, cal_fullname )
+);
+
+
+
+CREATE TABLE webcal_user_pref (
+  cal_login varchar(25) NOT NULL,
+  cal_setting varchar(25) NOT NULL,
+  cal_value varchar(100),
+  PRIMARY KEY ( cal_login, cal_setting )
+);
+
+
+
+CREATE TABLE webcal_user_layers (
+  cal_layerid INT DEFAULT 0 NOT NULL,
+  cal_login varchar(25) NOT NULL,
+  cal_layeruser varchar(25) NOT NULL,
+  cal_color varchar(25),
+  cal_dups CHAR(1) DEFAULT 'N',
+  PRIMARY KEY ( cal_login, cal_layeruser )
+);
+
+
+
+CREATE TABLE webcal_site_extras (
+  cal_id INT DEFAULT 0 NOT NULL,
+  cal_name VARCHAR(25) NOT NULL,
+  cal_type INT NOT NULL,
+  cal_date INT DEFAULT 0,
+  cal_remind INT DEFAULT 0,
+  cal_data varchar(1024),
+  PRIMARY KEY ( cal_id, cal_name, cal_type )
+);
+
+
+CREATE TABLE webcal_reminder_log (
+  cal_id INT DEFAULT 0 NOT NULL,
+  cal_name VARCHAR(25) NOT NULL,
+  cal_event_date INT NOT NULL DEFAULT 0,
+  cal_last_sent INT NOT NULL DEFAULT 0,
+  PRIMARY KEY ( cal_id, cal_name, cal_event_date )
+);
+
+CREATE TABLE webcal_group (
+  cal_group_id INT NOT NULL,
+  cal_owner VARCHAR(25),
+  cal_name VARCHAR(50) NOT NULL,
+  cal_last_update INT NOT NULL,
+  PRIMARY KEY ( cal_group_id )
+);
+
+CREATE TABLE webcal_group_user (
+  cal_group_id INT NOT NULL,
+  cal_login VARCHAR(25) NOT NULL,
+  PRIMARY KEY ( cal_group_id, cal_login )
+);
+
+CREATE TABLE webcal_view (
+  cal_view_id INT NOT NULL,
+  cal_owner VARCHAR(25) NOT NULL,
+  cal_name VARCHAR(50) NOT NULL,
+  cal_view_type CHAR(1),
+  cal_is_global CHAR(1) DEFAULT 'N' NOT NULL,
+  PRIMARY KEY ( cal_view_id )
+);
+
+CREATE TABLE webcal_view_user (
+  cal_view_id INT NOT NULL,
+  cal_login VARCHAR(25) NOT NULL,
+  PRIMARY KEY ( cal_view_id, cal_login )
+);
+
+CREATE TABLE webcal_config (
+  cal_setting VARCHAR(50) NOT NULL,
+  cal_value VARCHAR(100),
+  PRIMARY KEY ( cal_setting )
+);
+
+
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'application_name', 'WebCalendar' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'LANGUAGE', 'Browser-defined' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'demo_mode', 'N' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'require_approvals', 'Y' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'groups_enabled', 'N' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'user_sees_only_his_groups', 'N' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'categories_enabled', 'N' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'allow_conflicts', 'N' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'conflict_repeat_months', '6' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'disable_priority_field', 'N' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'disable_access_field', 'N' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'disable_participants_field', 'N' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'disable_repeating_field', 'N' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'allow_view_other', 'Y' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'email_fallback_from', 'youremailhere' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'remember_last_login', 'Y' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'allow_color_customization', 'Y' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('BGCOLOR','#FFFFFF');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('TEXTCOLOR','#000000');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('H2COLOR','#000000');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('CELLBG','#C0C0C0');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('WEEKENDBG','#D0D0D0');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('TABLEBG','#000000');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('THBG','#FFFFFF');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('THFG','#000000');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('POPUP_FG','#000000');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('POPUP_BG','#FFFFFF');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('TODAYCELLBG','#FFFF33');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'STARTVIEW', 'week.php' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'WEEK_START', '0' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'TIME_FORMAT', '12' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'DISPLAY_UNAPPROVED', 'Y' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'DISPLAY_WEEKNUMBER', 'Y' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'WORK_DAY_START_HOUR', '8' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'WORK_DAY_END_HOUR', '17' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'send_email', 'N' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'EMAIL_REMINDER', 'Y' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'EMAIL_EVENT_ADDED', 'Y' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'EMAIL_EVENT_UPDATED', 'Y' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'EMAIL_EVENT_DELETED', 'Y' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'EMAIL_EVENT_REJECTED', 'Y' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('auto_refresh', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('nonuser_enabled', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('allow_html_description', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('reports_enabled', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('DISPLAY_WEEKENDS', 'Y');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('DISPLAY_DESC_PRINT_DAY', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('DATE_FORMAT', '__month__ __dd__, __yyyy__');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('TIME_SLOTS', '12');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('TIMED_EVT_LEN', 'D');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('PUBLISH_ENABLED', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('DATE_FORMAT_MY', '__month__ __yyyy__');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('DATE_FORMAT_MD', '__month__ __dd__');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('CUSTOM_SCRIPT', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('CUSTOM_HEADER', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('CUSTOM_TRAILER', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('bold_days_in_year', 'Y');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('site_extras_in_popup', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('add_link_in_views', 'Y');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('allow_conflict_override', 'Y');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('limit_appts', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('limit_appts_number', '6');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('public_access', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('public_access_default_visible', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('public_access_default_selected', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('public_access_others', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('public_access_can_add', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('public_access_add_needs_approval', 'Y');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('public_access_view_part', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('nonuser_at_top', 'Y');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('allow_external_users', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('external_notifications', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('external_reminders', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('enable_gradients', 'N');
+
+
+
+CREATE TABLE webcal_entry_log (
+  cal_log_id INT NOT NULL,
+  cal_entry_id INT NOT NULL,
+  cal_login VARCHAR(25) NOT NULL,
+  cal_user_cal VARCHAR(25),
+  cal_type CHAR(1) NOT NULL,
+  cal_date INT NOT NULL,
+  cal_time INT,
+  cal_text varchar(1024),
+  PRIMARY KEY ( cal_log_id )
+);
+
+
+CREATE TABLE webcal_categories (
+  cat_id INT NOT NULL,
+  cat_owner VARCHAR(25),
+  cat_name VARCHAR(80) NOT NULL,
+  PRIMARY KEY ( cat_id )
+);
+
+CREATE TABLE webcal_asst (
+  cal_boss VARCHAR(25) NOT NULL,
+  cal_assistant VARCHAR(25) NOT NULL,
+  PRIMARY KEY ( cal_boss, cal_assistant )
+);
+
+CREATE TABLE webcal_nonuser_cals (
+  cal_login VARCHAR(25) NOT NULL,
+  cal_lastname VARCHAR(25),
+  cal_firstname VARCHAR(25),
+  cal_admin VARCHAR(25) NOT NULL,
+  PRIMARY KEY ( cal_login )
+);
+
+CREATE TABLE webcal_import (
+  cal_import_id INT NOT NULL,
+  cal_name VARCHAR(50) DEFAULT NULL,
+  cal_date INT NOT NULL,
+  cal_type VARCHAR(10) NOT NULL,
+  cal_login VARCHAR(25),
+  PRIMARY KEY ( cal_import_id )
+);
+
+CREATE TABLE webcal_import_data (
+  cal_import_id INT NOT NULL,
+  cal_id int NOT NULL,
+  cal_login VARCHAR(25) NOT NULL,
+  cal_import_type VARCHAR(15) NOT NULL,
+  cal_external_id VARCHAR(200) DEFAULT NULL,
+  PRIMARY KEY  ( cal_id, cal_login )
+);
+
+CREATE TABLE webcal_report (
+  cal_login VARCHAR(25) NOT NULL,
+  cal_report_id INT NOT NULL,
+  cal_is_global CHAR(1) DEFAULT 'N' NOT NULL,
+  cal_report_type VARCHAR(20) NOT NULL,
+  cal_include_header CHAR(1) DEFAULT 'Y' NOT NULL,
+  cal_report_name VARCHAR(50) NOT NULL,
+  cal_time_range INT NOT NULL,
+  cal_user VARCHAR(25) DEFAULT NULL,
+  cal_allow_nav CHAR(1) DEFAULT 'Y',
+  cal_cat_id INT DEFAULT NULL,
+  cal_include_empty CHAR(1) DEFAULT 'N',
+  cal_show_in_trailer CHAR(1) DEFAULT 'N',
+  cal_update_date INT NOT NULL,
+  PRIMARY KEY ( cal_report_id )
+);
+
+CREATE TABLE webcal_report_template (
+  cal_report_id INT NOT NULL,
+  cal_template_type CHAR(1) NOT NULL,
+  cal_template_text VARCHAR(1024),
+  PRIMARY KEY ( cal_report_id, cal_template_type )
+);
+
+
+
+

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/tables-ibase.sql
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/tables-ibase.sql	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/tables-ibase.sql	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,438 @@
+
+ /* Table: WEBCAL_ENTRY, Owner: SYSDBA */
+
+CREATE TABLE "WEBCAL_ENTRY" 
+(
+   "CAL_ID" INTEGER NOT NULL,
+   "CAL_GROUP_ID" INTEGER,
+   "CAL_DATE" INTEGER NOT NULL,
+   "CAL_EXT_FOR_ID" INT NULL,
+   "CAL_TIME" INTEGER,
+   "CAL_MOD_DATE" INTEGER,
+   "CAL_MOD_TIME" INTEGER,
+   "CAL_DURATION" INTEGER NOT NULL,
+   "CAL_PRIORITY" INTEGER DEFAULT 2,
+   "CAL_TYPE" CHAR(1) CHARACTER SET WIN1252 DEFAULT 'E',
+   "CAL_ACCESS" CHAR(1) CHARACTER SET WIN1252 DEFAULT 'P',
+   "CAL_NAME" VARCHAR(80) CHARACTER SET WIN1252 NOT NULL,
+   "CAL_DESCRIPTION" VARCHAR(500) CHARACTER SET WIN1252,
+   "CAL_CREATE_BY" VARCHAR(25) CHARACTER SET WIN1252 NOT NULL
+);
+
+/* create a default admin user */
+INSERT INTO webcal_user ( cal_login, cal_passwd, cal_lastname, cal_firstname, cal_is_admin ) VALUES ( 'admin', '21232f297a57a5a743894a0e4a801fc3', 'Administrator', 'Default', 'Y' );
+
+
+
+
+
+/* Table: WEBCAL_ENTRY_REPEATS, Owner: SYSDBA */
+
+CREATE TABLE "WEBCAL_ENTRY_REPEATS" 
+(
+   "CAL_ID" INTEGER DEFAULT 0 NOT NULL,
+   "CAL_TYPE" VARCHAR(20) CHARACTER SET WIN1252,
+   "CAL_END" INTEGER,
+   "CAL_FREQUENCY" INTEGER DEFAULT 1,
+   "CAL_DAYS" CHAR(7) CHARACTER SET WIN1252
+);
+
+/* Table: WEBCAL_ENTRY_REPEATS_NOT, Owner: SYSDBA */
+CREATE TABLE "WEBCAL_ENTRY_REPEATS_NOT" 
+   "CAL_ID" INTEGER DEFAULT 0 NOT NULL,
+   "CAL_DATE" INTEGER NOT NULL
+);
+
+
+/* Table: WEBCAL_ENTRY_USER, Owner: SYSDBA */
+
+CREATE TABLE "WEBCAL_ENTRY_USER" 
+(
+   "CAL_ID" INTEGER DEFAULT 0 NOT NULL,
+   "CAL_LOGIN" VARCHAR(25) CHARACTER SET WIN1252 DEFAULT '' NOT NULL,
+   "CAL_STATUS" VARCHAR(1) CHARACTER SET WIN1252 DEFAULT 'A',
+   "CAL_CATEGORY" INTEGER NULL
+);
+
+
+/* Table: WEBCAL_ENTRY_EXT_USER, Owner: SYSDBA */
+
+CREATE TABLE "WEBCAL_ENTRY_EXT_USER" 
+(
+   "CAL_ID" INTEGER DEFAULT 0 NOT NULL,
+   "CAL_FULLNAME" VARCHAR(50) CHARACTER SET WIN1252 DEFAULT '' NOT NULL,
+   "CAL_EMAIL" VARCHAR(75) CHARACTER SET WIN1252
+);
+
+
+/* Table: WEBCAL_REMINDER_LOG, Owner: SYSDBA */
+
+CREATE TABLE "WEBCAL_REMINDER_LOG" 
+(
+   "CAL_ID" INTEGER DEFAULT 0 NOT NULL,
+   "CAL_NAME" VARCHAR(25) CHARACTER SET WIN1252 NOT NULL,
+   "CAL_EVENT_DATE" INTEGER DEFAULT 0 NOT NULL,
+   "CAL_LAST_SENT" INTEGER DEFAULT 0 NOT NULL
+);
+
+
+/* Table: WEBCAL_SITE_EXTRAS, Owner: SYSDBA */
+
+CREATE TABLE "WEBCAL_SITE_EXTRAS" 
+(
+   "CAL_ID" INTEGER DEFAULT 0 NOT NULL,
+   "CAL_NAME" VARCHAR(25) CHARACTER SET WIN1252 NOT NULL,
+   "CAL_TYPE" INTEGER NOT NULL,
+   "CAL_DATE" INTEGER DEFAULT 0,
+   "CAL_REMIND" INTEGER DEFAULT 0,
+   "CAL_DATA" VARCHAR(500) CHARACTER SET WIN1252
+);
+
+
+/* Table: WEBCAL_USER, Owner: SYSDBA */
+
+CREATE TABLE "WEBCAL_USER" 
+(
+   "CAL_LOGIN" VARCHAR(25) CHARACTER SET WIN1252 NOT NULL,
+   "CAL_PASSWD" VARCHAR(32) CHARACTER SET WIN1252,
+   "CAL_LASTNAME" VARCHAR(25) CHARACTER SET WIN1252,
+   "CAL_FIRSTNAME" VARCHAR(25) CHARACTER SET WIN1252,
+   "CAL_IS_ADMIN" CHAR(1) CHARACTER SET WIN1252 DEFAULT 'N',
+   "CAL_EMAIL" VARCHAR(75) CHARACTER SET WIN1252
+);
+
+
+/* Table: WEBCAL_USER_LAYERS, Owner: SYSDBA */
+
+CREATE TABLE "WEBCAL_USER_LAYERS" 
+(
+   "CAL_LAYERID" INTEGER DEFAULT 0 NOT NULL,
+   "CAL_LOGIN" VARCHAR(25) CHARACTER SET WIN1252 NOT NULL,
+   "CAL_LAYERUSER" VARCHAR(25) CHARACTER SET WIN1252 NOT NULL,
+   "CAL_COLOR" VARCHAR(25) CHARACTER SET WIN1252,
+   "CAL_DUPS" CHAR(1) CHARACTER SET WIN1252 DEFAULT 'N'
+);
+
+
+/* Table: WEBCAL_USER_PREF, Owner: SYSDBA */
+
+CREATE TABLE "WEBCAL_USER_PREF" 
+(
+   "CAL_LOGIN" VARCHAR(25) CHARACTER SET WIN1252 NOT NULL,
+   "CAL_SETTING" VARCHAR(25) CHARACTER SET WIN1252 NOT NULL,
+   "CAL_VALUE" VARCHAR(100) CHARACTER SET WIN1252
+);
+
+/* Table: WEBCAL_GROUP, Owner: SYSDBA */
+
+CREATE TABLE "WEBCAL_GROUP" 
+(
+   "CAL_GROUP_ID" INTEGER DEFAULT 0 NOT NULL,
+   "CAL_OWNER" VARCHAR(25) CHARACTER SET WIN1252 NULL,
+   "CAL_NAME" VARCHAR(50) CHARACTER SET WIN1252 NOT NULL,
+   "CAL_LAST_UPDATE" INTEGER DEFAULT 0 NOT NULL
+);
+
+/* Table: WEBCAL_GROUP_USER, Owner: SYSDBA */
+
+CREATE TABLE "WEBCAL_GROUP_USER" 
+(
+   "CAL_GROUP_ID" INTEGER DEFAULT 0 NOT NULL,
+   "CAL_LOGIN" VARCHAR(25) CHARACTER SET WIN1252 NOT NULL
+);
+
+/* Table: WEBCAL_VIEW, Owner: SYSDBA */
+
+CREATE TABLE "WEBCAL_VIEW" 
+(
+   "CAL_VIEW_ID" INTEGER DEFAULT 0 NOT NULL,
+   "CAL_OWNER" VARCHAR(25) CHARACTER SET WIN1252 NOT NULL,
+   "CAL_NAME" VARCHAR(50) CHARACTER SET WIN1252 NOT NULL,
+   "CAL_VIEW_TYPE" VARCHAR(1) CHARACTER SET WIN1252 NOT NULL,
+   "CAL_IS_GLOBAL" CHAR(1) CHARACTER SET WIN1252 NOT NULL DEFAULT 'N'
+);
+
+/* Table: WEBCAL_VIEW_USER, Owner: SYSDBA */
+
+CREATE TABLE "WEBCAL_VIEW_USER" 
+(
+   "CAL_VIEW_ID" INTEGER DEFAULT 0 NOT NULL,
+   "CAL_LOGIN" VARCHAR(25) CHARACTER SET WIN1252 NOT NULL
+);
+
+/* Table: WEBCAL_CONFIG, Owner: SYSDBA */
+
+CREATE TABLE "WEBCAL_CONFIG" 
+(
+   "CAL_SETTING" VARCHAR(50) CHARACTER SET WIN1252 NOT NULL,
+   "CAL_VALUE" VARCHAR(100) CHARACTER SET WIN1252
+);
+
+
+
+/* default system settings */
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'application_name', 'WebCalendar' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'LANGUAGE', 'Browser-defined' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'demo_mode', 'N' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'require_approvals', 'Y' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'groups_enabled', 'N' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'user_sees_only_his_groups', 'N' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'categories_enabled', 'N' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'allow_conflicts', 'N' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'conflict_repeat_months', '6' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'disable_priority_field', 'N' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'disable_access_field', 'N' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'disable_participants_field', 'N' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'disable_repeating_field', 'N' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'allow_view_other', 'Y' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'email_fallback_from', 'youremailhere' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'remember_last_login', 'Y' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'allow_color_customization', 'Y' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('BGCOLOR','#FFFFFF');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('TEXTCOLOR','#000000');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('H2COLOR','#000000');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('CELLBG','#C0C0C0');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('WEEKENDBG','#D0D0D0');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('TABLEBG','#000000');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('THBG','#FFFFFF');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('THFG','#000000');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('POPUP_FG','#000000');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('POPUP_BG','#FFFFFF');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('TODAYCELLBG','#FFFF33');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'STARTVIEW', 'week.php' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'WEEK_START', '0' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'TIME_FORMAT', '12' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'DISPLAY_UNAPPROVED', 'Y' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'DISPLAY_WEEKNUMBER', 'Y' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'WORK_DAY_START_HOUR', '8' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'WORK_DAY_END_HOUR', '17' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'send_email', 'N' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'EMAIL_REMINDER', 'Y' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'EMAIL_EVENT_ADDED', 'Y' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'EMAIL_EVENT_UPDATED', 'Y' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'EMAIL_EVENT_DELETED', 'Y' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'EMAIL_EVENT_REJECTED', 'Y' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('auto_refresh', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('nonuser_enabled', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('allow_html_description', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('reports_enabled', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('DISPLAY_WEEKENDS', 'Y');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('DISPLAY_DESC_PRINT_DAY', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('DATE_FORMAT', '__month__ __dd__, __yyyy__');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('TIME_SLOTS', '12');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('TIMED_EVT_LEN', 'D');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('PUBLISH_ENABLED', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('DATE_FORMAT_MY', '__month__ __yyyy__');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('DATE_FORMAT_MD', '__month__ __dd__');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('CUSTOM_SCRIPT', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('CUSTOM_HEADER', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('CUSTOM_TRAILER', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('bold_days_in_year', 'Y');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('site_extras_in_popup', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('add_link_in_views', 'Y');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('allow_conflict_override', 'Y');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('limit_appts', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('limit_appts_number', '6');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('public_access', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('public_access_default_visible', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('public_access_default_selected', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('public_access_others', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('public_access_can_add', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('public_access_add_needs_approval', 'Y');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('public_access_view_part', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('nonuser_at_top', 'Y');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('allow_external_users', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('external_notifications', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('external_reminders', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('enable_gradients', 'N');
+
+
+
+/* Table: WEBCAL_ENTRY_LOG, Owner: SYSDBA */
+
+CREATE TABLE "WEBCAL_ENTRY_LOG" 
+(
+   "CAL_LOG_ID" INTEGER DEFAULT 0 NOT NULL,
+   "CAL_ENTRY_ID" INTEGER DEFAULT 0 NOT NULL,
+   "CAL_LOGIN" VARCHAR(25) CHARACTER SET WIN1252 NOT NULL,
+   "CAL_USER_CAL" VARCHAR(25) CHARACTER SET WIN1252 NULL,
+   "CAL_TYPE" VARCHAR(1) CHARACTER SET WIN1252 NOT NULL,
+   "CAL_DATE" INTEGER NULL,
+   "CAL_TIME" INTEGER NULL,
+   "CAL_TEXT" VARCHAR(500) CHARACTER SET WIN1252 NULL
+);
+
+
+/* Table: WEBCAL_CATEGORIES, Owner: SYSDBA */
+
+CREATE TABLE "WEBCAL_CATEGORIES" 
+(
+   "CAT_ID" INTEGER DEFAULT 0 NOT NULL,
+   "CAT_OWNER" VARCHAR(25) CHARACTER SET WIN1252 NULL,
+   "CAT_NAME" VARCHAR(80) CHARACTER SET WIN1252 NOT NULL
+);
+
+/* Table: WEBCAL_ASST, Owner: SYSDBA */
+CREATE TABLE "WEBCAL_ASST"
+(
+  "CAL_BOSS" VARCHAR(25) CHARACTER SET WIN1252 NOT NULL,
+  "CAL_ASSISTANT"  VARCHAR(25) CHARACTER SET WIN1252 NOT NULL
+);
+
+/* Table: "WEBCAL_NONUSER_CALS", Owner: SYSDBA */
+CREATE TABLE WEBCAL_NONUSER_CALS (
+  "CAL_LOGIN" VARCHAR(25) CHARACTER SET WIN1252 NOT NULL,
+  "CAL_LASTNAME" VARCHAR(25) CHARACTER SET WIN1252,
+  "CAL_FIRSTNAME" VARCHAR(25) CHARACTER SET WIN1252,
+  "CAL_ADMIN" VARCHAR(25) CHARACTER SET WIN1252 NOT NULL
+);
+
+/* Table: "WEBCAL_IMPORT", Owner: SYSDBA */
+CREATE TABLE WEBCAL_IMPORT (
+  "CAL_IMPORT_ID" INTEGER DEFAULT 0 NOT NULL,
+  "CAL_NAME" VARCHAR(50) CHARACTER SET WIN1252 NULL,
+  "CAL_DATE" INTEGER DEFAULT 0 NOT NULL,
+  "CAL_TYPE" VARCHAR(10) CHARACTER SET WIN1252 NOT NULL,
+  "CAL_LOGIN" VARCHAR(25) CHARACTER SET WIN1252 NOT NULL
+);
+
+/* Table: "WEBCAL_IMPORT_DATA", Owner: SYSDBA */
+CREATE TABLE WEBCAL_IMPORT_DATA (
+  "CAL_IMPORT_ID" INTEGER DEFAULT 0 NOT NULL,
+  "CAL_ID" INTEGER DEFAULT 0 NOT NULL,
+  "CAL_LOGIN" VARCHAR(25) CHARACTER SET WIN1252 NOT NULL,
+  "CAL_IMPORT_TYPE" VARCHAR(15) CHARACTER SET WIN1252 NOT NULL,
+  "CAL_EXTERNAL_ID" VARCHAR(200) CHARACTER SET WIN1252 NULL,
+  "CAL_EXTERNAL_ID" VARCHAR(200) NULL
+);
+
+/* Table: "WEBCAL_REPORT", Owner: SYSDBA */
+CREATE TABLE WEBCAL_REPORT (
+  "CAL_LOGIN VARCHAR(25) CHARACTER SET WIN1252 NOT NULL,
+  "CAL_REPORT_ID INTEGER DEFAULT 0 NOT NULL,
+  "CAL_IS_GLOBAL VARCHAR(1) DEFAULT 'N' CHARACTER SET WIN1252 NOT NULL,
+  "CAL_REPORT_TYPE VARCHAR(20) CHARACTER SET WIN1252 NOT NULL,
+  "CAL_INCLUDE_HEADER VARCHAR(1) DEFAULT 'Y' CHARACTER SET WIN1252 NOT NULL,
+  "CAL_REPORT_NAME VARCHAR(50) CHARACTER SET WIN1252 NOT NULL,
+  "CAL_TIME_RANGE INTEGER DEFAULT 0 NOT NULL,
+  "CAL_USER VARCHAR(25) CHARACTER SET WIN1252 NULL,
+  "CAL_ALLOW_NAV VARCHAR(1) DEFAULT 'Y' CHARACTER SET WIN1252 NOT NULL,
+  "CAL_CAT_ID INTEGER NULL,
+  "CAL_INCLUDE_EMPTY VARCHAR(1) DEFAULT 'N' CHARACTER SET WIN1252 NOT NULL,
+  "CAL_SHOW_IN_TRAILER VARCHAR(1) DEFAULT 'N' CHARACTER SET WIN1252 NOT NULL,
+  "CAL_UPDATE_DATE INTEGER DEFAULT 0 NOT NULL
+);
+
+/* Table: "WEBCAL_REPORT_TEMPLATE", Owner: SYSDBA */
+CREATE TABLE WEBCAL_REPORT_TEMPLATE (
+  "CAL_REPORT_ID" INTEGER DEFAULT 0 NOT NULL,
+  "CAL_TEMPLATE_TYPE" VARCHAR(1) CHARACTER SET WIN1252 NOT NULL,
+  "CAL_TEMPLATE_TEXT" VARCHAR(1024) CHARACTER SET WIN1252 NOT NULL
+);
+
+
+
+
+
+
+/*  Index definitions for all user tables */
+
+CREATE INDEX "IWEBCAL_ENTRYNEWINDEX" ON "WEBCAL_ENTRY"("CAL_ID");
+CREATE INDEX "IWEBCAL_ENTRY_REPEATSNEWINDEX" ON "WEBCAL_ENTRY_REPEATS"("CAL_ID");
+CREATE INDEX "IWEBCAL_ENTRY_REPEATS_NOTNEWINDEX" ON "WEBCAL_ENTRY_REPEATS_NOT"("CAL_ID", "CAL_DATE");
+CREATE INDEX "IWEBCAL_ENTRY_USERNEWINDEX" ON "WEBCAL_ENTRY_USER"("CAL_ID", "CAL_LOGIN");
+CREATE INDEX "IWEBCAL_ENTRY_EXTUSERNEWINDEX" ON "WEBCAL_ENTRY_EXT_USER"("CAL_ID", "CAL_FULLNAME");
+CREATE INDEX "IWEBCAL_REMINDER_LOGNEWINDEX" ON "WEBCAL_REMINDER_LOG"("CAL_ID", "CAL_NAME", "CAL_EVENT_DATE");
+CREATE INDEX "IWEBCAL_SITE_EXTRASNEWINDEX" ON "WEBCAL_SITE_EXTRAS"("CAL_ID", "CAL_NAME", "CAL_TYPE");
+CREATE INDEX "IWEBCAL_USERNEWINDEX" ON "WEBCAL_USER"("CAL_LOGIN");
+CREATE INDEX "IWEBCAL_USER_LAYERSNEWINDEX" ON "WEBCAL_USER_LAYERS"("CAL_LOGIN", "CAL_LAYERUSER");
+CREATE INDEX "IWEBCAL_USER_PREFNEWINDEX" ON "WEBCAL_USER_PREF"("CAL_LOGIN", "CAL_SETTING");
+CREATE INDEX "IWEBCAL_GROUPNEWINDEX" ON "WEBCAL_GROUP"("CAL_GROUP_ID");
+CREATE INDEX "IWEBCAL_GROUPUSERNEWINDEX" ON "WEBCAL_GROUP_USER"("CAL_GROUP_ID", "CAL_LOGIN");
+CREATE INDEX "IWEBCAL_VIEWNEWINDEX" ON "WEBCAL_VIEW"("CAL_VIEW_ID");
+CREATE INDEX "IWEBCAL_VIEWUSERNEWINDEX" ON "WEBCAL_VIEW_USER"("CAL_VIEW_ID", "CAL_LOGIN");
+CREATE INDEX "IWEBCAL_CONFIGNEWINDEX" ON "WEBCAL_CONFIG"("CAL_SETTING");
+CREATE INDEX "IWEBCAL_ENTRYLOGINDEX" ON "WEBCAL_CONFIG"("CAL_LOG_ID");
+CREATE INDEX "IWEBCAL_CATEGORIESINDEX" ON "WEBCAL_CATEGORIES"("CAT_ID");
+CREATE INDEX "IWEBCAL_BOSSINDEX" ON "WEBCAL_ASST"("CAL_BOSS", "CAL_ASSISTANT");
+CREATE INDEX "IWEBCAL_NONUSERCALSINDEX" ON "WEBCAL_NONUSER_CALS"("CAL_LOGIN");
+CREATE INDEX "IWEBCAL_IMPORT2INDEX" ON "WEBCAL_IMPORT"("CAL_IMPORT_ID");
+CREATE INDEX "IWEBCAL_IMPORTINDEX" ON "WEBCAL_IMPORT_DATA"("CAL_LOGIN", "CAL_ID");
+CREATE INDEX "IWEBCAL_REPORTINDEX" ON "WEBCAL_REPORT"("CAL_REPORT_ID");
+CREATE INDEX "IWEBCAL_REPORTTEMPLATEINDEX" ON "WEBCAL_REPORT_TEMPLATE"("CAL_REPORT_ID", "CAL_TEMPLATE_TYPE");
+
+

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/tables-mysql.sql
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/tables-mysql.sql	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/tables-mysql.sql	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,674 @@
+/*
+ * Description:
+ * This file is used to create all tables used by WebCalendar and
+ * initialize some of those tables with the required data.
+ *
+ * The comments in the table definitions will be parsed to
+ * generate a document (in HTML) that describes these tables.
+ *
+ * History:
+ * 21-Oct-2002 Added this file header and additional comments
+ *   below.
+ */
+
+/*
+ * Defines a WebCalendar user.
+ */
+CREATE TABLE webcal_user (
+  /* the unique user login */
+  cal_login VARCHAR(25) NOT NULL,
+  /* the user's password. (not used for http or ldap authentication) */
+  cal_passwd VARCHAR(32),
+  /* user's last name */
+  cal_lastname VARCHAR(25),
+  /* user's first name */
+  cal_firstname VARCHAR(25),
+  /* is the user a WebCalendar administrator ('Y' = yes, 'N' = no) */
+  cal_is_admin CHAR(1) DEFAULT 'N',
+  /* user's email address */
+  cal_email VARCHAR(75) NULL,
+  PRIMARY KEY ( cal_login )
+);
+
+# create a default admin user
+INSERT INTO webcal_user ( cal_login, cal_passwd, cal_lastname, cal_firstname, cal_is_admin ) VALUES ( 'admin', '21232f297a57a5a743894a0e4a801fc3', 'Administrator', 'Default', 'Y' );
+
+/*
+ * Defines a calendar event.  Each event in the system has one entry
+ * in this table unless the event starts before midnight and ends
+ * after midnight. In that case a secondary event will be created with
+ * cal_ext_for_id set to the cal_id of the original entry.
+ * The following tables contain additional information about each
+ * event:<ul>
+ * <li><a href="#webcal_entry_user">webcal_entry_user</a> -
+ *  lists participants in the event and specifies the status (accepted,
+ *  rejected) and category of each participant.</li>
+ * <li><a href="#webcal_entry_repeats">webcal_entry_repeats</a> -
+ *  contains information if the event repeats.</li>
+ * <li><a href="#webcal_entry_repeats_not">webcal_entry_repeats_not</a> -
+ *  specifies which dates the repeating event does not repeat (because
+ *  they were deleted or modified for just that date by the user)</li>
+ * <li><a href="#webcal_entry_log">webcal_entry_log</a> -
+ *  provides a history of changes to this event.</li>
+ * <li><a href="#webcal_site_extras">webcal_site_extras</a> -
+ *  stores event data as defined in site_extras.php (such as reminders and
+ *  other custom event fields).</li>
+ * </ul>
+ */
+CREATE TABLE webcal_entry (
+  /* cal_id is unique integer id for event */
+  cal_id INT NOT NULL,
+  /* cal_group_id: the parent event id if this event is overriding an */
+  /* occurrence of a repeating event */
+  cal_group_id INT NULL,
+  /* used when an event goes past midnight into the */
+  /* next day, in which case an additional entry in this table */
+  /* will use this field to indicate the original event cal_id */
+  cal_ext_for_id INT NULL,
+  /* user login of user that created the event */
+  cal_create_by VARCHAR(25) NOT NULL,
+  /* date of event (in YYYYMMDD format) */
+  cal_date INT NOT NULL,
+  /* event time (in HHMMSS format) */
+  cal_time INT NULL,
+  /* date the event was last modified (in YYYYMMDD format) */
+  cal_mod_date INT,
+  /* time the event was last modified (in HHMMSS format) */
+  cal_mod_time INT,
+  /* duration of event in minutes */
+  cal_duration INT NOT NULL,
+  /* event priority: 1=Low, 2=Med, 3=High */
+  cal_priority INT DEFAULT 2,
+  /* 'E' = Event, 'M' = Repeating event */
+  cal_type CHAR(1) DEFAULT 'E',
+  /* 'P' = Public, */
+  /* 'R' = Confidential (others can see time allocated but not what it is) */
+  cal_access CHAR(1) DEFAULT 'P',
+  /* brief description of event */
+  cal_name VARCHAR(80) NOT NULL,
+  /* full description of event */
+  cal_description TEXT,
+  PRIMARY KEY ( cal_id )
+);
+
+/*
+ * Defines repeating info about an event.
+ * The event is defined in <a href="#webcal_entry">webcal_entry</a>.
+ */
+CREATE TABLE webcal_entry_repeats (
+  /* event id */
+  cal_id INT DEFAULT 0 NOT NULL,
+  /* type of repeating:<ul> */
+  /* <li>daily - repeats daily</li> */
+  /* <li>monthlyByDate - repeats on same day of the month</li> */
+  /* <li>monthlyByDayR - repeats on same weekday of the month */
+  /*   (counting weeks from the end of the month is in last Monday)</li> */
+  /* <li>monthlyByDay - repeats on specified weekday (2nd Monday, for example)</li> */
+  /* <li>weekly - repeats every week</li> */
+  /* <li>yearly - repeats on same date every year</li> */
+  cal_type VARCHAR(20),
+  /* end date for repeating event (in YYYYMMDD format) */
+  cal_end INT,
+  /* frequency of repeat: 1 = every, 2 = every other, 3 = every 3rd, etc. */
+  cal_frequency INT DEFAULT 1,
+  /* which days of the week does it repeat on (only applies when cal_type = 'weekly' */
+  cal_days CHAR(7),
+  PRIMARY KEY (cal_id)
+);
+
+/*
+ * This table specifies which dates in a repeating
+ * event have either been deleted or replaced with
+ * a replacement event for that day.  When replaced, the cal_group_id
+ * (I know... not the best name, but it was not being used) column will
+ * be set to the original event.  That way the user can delete the original
+ * event and (at the same time) delete any exception events.
+ */
+CREATE TABLE webcal_entry_repeats_not (
+  /* event id of repeating event */
+  cal_id INT NOT NULL,
+  /* cal_date: date event should not repeat (in YYYYMMDD format) */
+  cal_date INT NOT NULL,
+  PRIMARY KEY ( cal_id, cal_date )
+);
+
+/*
+ * This table associates one or more users with an event by the event id.
+ * The event can be found in
+ * <a href="#webcal_entry">webcal_entry</a>.
+ */
+CREATE TABLE webcal_entry_user (
+  /* event id */
+  cal_id INT DEFAULT 0 NOT NULL,
+  /* participant in the event */
+  cal_login VARCHAR(25) NOT NULL,
+  /* status of event for this user: <ul> */
+  /* <li>A=Accepted</li> */
+  /* <li>R=Rejected</li> */
+  /* <li>W=Waiting</li>    </ul>*/
+  cal_status CHAR(1) DEFAULT 'A',
+  /* category of the event for this user */
+  cal_category INT DEFAULT NULL,
+  PRIMARY KEY ( cal_id, cal_login )
+);
+
+/*
+ * This table associates one or more external users (people who do not
+ * have a WebCalendar login) with an event by the event id.
+ * An event must still have at least one WebCalendar user associated
+ * with it.  This table is not used unless external users are enabled
+ * in system settings.
+ * The event can be found in
+ * <a href="#webcal_entry">webcal_entry</a>.
+ */
+CREATE TABLE webcal_entry_ext_user (
+  /* event id */
+  cal_id INT DEFAULT 0 NOT NULL,
+  /* external user fill name */
+  cal_fullname VARCHAR(50) NOT NULL,
+  /* external user email (for sending a reminder) */
+  cal_email VARCHAR(75) NULL,
+  PRIMARY KEY ( cal_id, cal_fullname )
+);
+
+/*
+ * Specify preferences for a user.
+ * Most preferences are set via pref.php.
+ * Values in this table are loaded after system settings
+ * found in <a href="#webcal_config">webcal_config</a>.
+ */
+CREATE TABLE webcal_user_pref (
+  /* user login */
+  cal_login VARCHAR(25) NOT NULL,
+  /* setting name */
+  cal_setting VARCHAR(25) NOT NULL,
+  /* setting value */
+  cal_value VARCHAR(100) NULL,
+  PRIMARY KEY ( cal_login, cal_setting )
+);
+
+/*
+ * Define layers for a user.
+ */
+CREATE TABLE webcal_user_layers (
+  /* unique layer id */
+  cal_layerid INT DEFAULT 0 NOT NULL,
+  /* login of owner of this layer */
+  cal_login VARCHAR(25) NOT NULL,
+  /* login name of user that this layer represents */
+  cal_layeruser VARCHAR(25) NOT NULL,
+  /* color to display this layer in */
+  cal_color VARCHAR(25) NULL,
+  /* show duplicates ('N' or 'Y') */
+  cal_dups CHAR(1) DEFAULT 'N',
+  PRIMARY KEY ( cal_login, cal_layeruser )
+);
+
+/*
+ * This table holds data for site extra fields
+ * (customized in site_extra.php).
+ */
+CREATE TABLE webcal_site_extras (
+  /* event id */
+  cal_id INT DEFAULT 0 NOT NULL,
+  /* the brief name of this type (first field in $site_extra array) */
+  cal_name VARCHAR(25) NOT NULL,
+  /* $EXTRA_URL, $EXTRA_DATE, etc. */
+  cal_type INT NOT NULL,
+  /* only used for $EXTRA_DATE type fields (in YYYYMMDD format) */
+  cal_date INT DEFAULT 0,
+  /* how many minutes before event should a reminder be sent */
+  cal_remind INT DEFAULT 0,
+  /* used to store text data */
+  cal_data TEXT,
+  PRIMARY KEY ( cal_id, cal_name, cal_type )
+);
+
+/*
+ * This table keeps a history of when reminders get sent.
+ */
+CREATE TABLE webcal_reminder_log (
+  /* event id */
+  cal_id INT DEFAULT 0 NOT NULL,
+  /* extra type (see site_extras.php) */
+  cal_name VARCHAR(25) NOT NULL,
+  /* the event date we are sending reminder for (in YYYYMMDD format) */
+  cal_event_date INT NOT NULL DEFAULT 0,
+  /* the date/time we last sent a reminder (in UNIX time format) */
+  cal_last_sent INT NOT NULL DEFAULT 0,
+  PRIMARY KEY ( cal_id, cal_name, cal_event_date )
+);
+
+/*
+ * Define a group.  Group members can be found in
+ * <a href="#webcal_group_user">webcal_group_user</a>.
+ */
+CREATE TABLE webcal_group (
+  /* unique group id */
+  cal_group_id INT NOT NULL,
+  /* user login of user that created this group */
+  cal_owner VARCHAR(25) NULL,
+  /* name of the group */
+  cal_name VARCHAR(50) NOT NULL,
+  /* date last updated (in YYYYMMDD format) */
+  cal_last_update INT NOT NULL,
+  PRIMARY KEY ( cal_group_id )
+);
+
+/*
+ * Specify users in a group.  The group is defined in
+ * <a href="#webcal_group">webcal_group</a>.
+ */
+CREATE TABLE webcal_group_user (
+  /* group id */
+  cal_group_id INT NOT NULL,
+  /* user login */
+  cal_login VARCHAR(25) NOT NULL,
+  PRIMARY KEY ( cal_group_id, cal_login )
+);
+
+/*
+ * A "view" allows a user to put the calendars of multiple users all on
+ * one page.  A "view" is valid only for the owner (cal_owner) of the
+ * view.  Users for the view are in
+ * <a href="#webcal_view_user">webcal_view_user</a>.
+ */
+CREATE TABLE webcal_view (
+  /* unique view id */
+  cal_view_id INT NOT NULL,
+  /* login name of owner of this view */
+  cal_owner VARCHAR(25) NOT NULL,
+  /* name of view */
+  cal_name VARCHAR(50) NOT NULL,
+  /* "W" for week view, "D" for day view, "M" for month view */
+  cal_view_type CHAR(1),
+  /* is this a global view (can it be accessed by other users) ('Y' or 'N') */
+  cal_is_global CHAR(1) DEFAULT 'N' NOT NULL,
+  PRIMARY KEY ( cal_view_id )
+);
+
+/*
+ * Specify users in a view. See <a href="#webcal_view">webcal_view</a>.
+ */
+CREATE TABLE webcal_view_user (
+  /* view id */
+  cal_view_id INT NOT NULL,
+  /* a user in the view */
+  cal_login VARCHAR(25) NOT NULL,
+  PRIMARY KEY ( cal_view_id, cal_login )
+);
+
+/*
+ * System settings (set by the admin interface in admin.php)
+ */
+CREATE TABLE webcal_config (
+  /* setting name */
+  cal_setting VARCHAR(50) NOT NULL,
+  /* setting value */
+  cal_value VARCHAR(100) NULL,
+  PRIMARY KEY ( cal_setting )
+);
+
+# default settings
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'application_name', 'WebCalendar' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'LANGUAGE', 'Browser-defined' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'demo_mode', 'N' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'require_approvals', 'Y' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'groups_enabled', 'N' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'user_sees_only_his_groups', 'N' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'categories_enabled', 'N' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'allow_conflicts', 'N' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'conflict_repeat_months', '6' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'disable_priority_field', 'N' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'disable_access_field', 'N' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'disable_participants_field', 'N' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'disable_repeating_field', 'N' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'allow_view_other', 'Y' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'email_fallback_from', 'youremailhere' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'remember_last_login', 'Y' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'allow_color_customization', 'Y' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('BGCOLOR','#FFFFFF');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('TEXTCOLOR','#000000');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('H2COLOR','#000000');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('CELLBG','#C0C0C0');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('WEEKENDBG','#D0D0D0');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('TABLEBG','#000000');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('THBG','#FFFFFF');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('THFG','#000000');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('POPUP_FG','#000000');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('POPUP_BG','#FFFFFF');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('TODAYCELLBG','#FFFF33');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'STARTVIEW', 'week.php' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'WEEK_START', '0' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'TIME_FORMAT', '12' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'DISPLAY_UNAPPROVED', 'Y' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'DISPLAY_WEEKNUMBER', 'Y' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'WORK_DAY_START_HOUR', '8' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'WORK_DAY_END_HOUR', '17' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'send_email', 'N' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'EMAIL_REMINDER', 'Y' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'EMAIL_EVENT_ADDED', 'Y' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'EMAIL_EVENT_UPDATED', 'Y' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'EMAIL_EVENT_DELETED', 'Y' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'EMAIL_EVENT_REJECTED', 'Y' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('auto_refresh', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('nonuser_enabled', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('allow_html_description', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('reports_enabled', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('DISPLAY_WEEKENDS', 'Y');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('DISPLAY_DESC_PRINT_DAY', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('DATE_FORMAT', '__month__ __dd__, __yyyy__');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('TIME_SLOTS', '12');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('TIMED_EVT_LEN', 'D');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('PUBLISH_ENABLED', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('DATE_FORMAT_MY', '__month__ __yyyy__');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('DATE_FORMAT_MD', '__month__ __dd__');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('CUSTOM_SCRIPT', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('CUSTOM_HEADER', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('CUSTOM_TRAILER', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('bold_days_in_year', 'Y');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('site_extras_in_popup', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('add_link_in_views', 'Y');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('allow_conflict_override', 'Y');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('limit_appts', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('limit_appts_number', '6');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('public_access', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('public_access_default_visible', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('public_access_default_selected', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('public_access_others', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('public_access_can_add', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('public_access_add_needs_approval', 'Y');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('public_access_view_part', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('nonuser_at_top', 'Y');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('allow_external_users', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('external_notifications', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('external_reminders', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('enable_gradients', 'N');
+
+
+/*
+ * Activity log for an event.
+ */
+CREATE TABLE webcal_entry_log (
+  /* unique id of this log entry */
+  cal_log_id INT NOT NULL,
+  /* event id */
+  cal_entry_id INT NOT NULL,
+  /* user who performed this action */
+  cal_login VARCHAR(25) NOT NULL,
+  /* user of calendar affected */
+  cal_user_cal VARCHAR(25) NULL,
+  /* log types:  <ul> */
+  /* <li>C: Created</li>  */
+  /* <li>A: Approved/Confirmed by user</li>  */
+  /* <li>R: Rejected by user</li>  */
+  /* <li>U: Updated by user</li>  */
+  /* <li>M: Mail Notification sent</li>  */
+  /* <li>E: Reminder sent</li>     </ul>*/
+  cal_type CHAR(1) NOT NULL,
+  /* date in YYYYMMDD format */
+  cal_date INT NOT NULL,
+  /* time in HHMMSS format */
+  cal_time INT NULL,
+  /* optional text */
+  cal_text TEXT,
+  PRIMARY KEY ( cal_log_id )
+);
+
+/*
+ * Defines user categories.
+ * Categories can be specific to a user or global.  When a category is global,
+ * the cat_owner field will be NULL.  (Only an admin user can create
+ * a global category.)
+ */
+CREATE TABLE webcal_categories (
+  /* unique category id */
+  cat_id INT NOT NULL,
+  /* user login of category owner. */
+  /* If this is NULL, then it is a global category */
+  cat_owner VARCHAR(25) NULL,
+  /* category name */
+  cat_name VARCHAR(80) NOT NULL,
+  PRIMARY KEY ( cat_id )
+);
+
+/*
+ * Define assitant/boss relationship.
+ */
+CREATE TABLE webcal_asst (
+  /* user login of boss */
+  cal_boss VARCHAR(25) NOT NULL,
+  /* user login of assistant */
+  cal_assistant VARCHAR(25) NOT NULL,
+  PRIMARY KEY ( cal_boss, cal_assistant )
+);
+
+/*
+ * Defines non-user calendars.
+ */
+CREATE TABLE webcal_nonuser_cals (
+  /* the unique id for the calendar */
+  cal_login VARCHAR(25) NOT NULL,
+  /* calendar's last name */
+  cal_lastname VARCHAR(25) NULL,
+  /* calendar's first name */
+  cal_firstname VARCHAR(25) NULL,
+  /* who is the calendar administrator */
+  cal_admin VARCHAR(25) NOT NULL,
+  PRIMARY KEY ( cal_login )
+);
+
+/*
+ * Used to track import data (one row per import)
+ */
+CREATE TABLE webcal_import (
+  /* unique id for import */
+  cal_import_id INT NOT NULL,
+  /* name of import (optional) */
+  cal_name VARCHAR(50) NULL,
+  /* date of import (YYYYMMDD format) */
+  cal_date INT NOT NULL,
+  /* type of import (ical, vcal, palm) */
+  cal_type VARCHAR(10) NOT NULL,
+  /* user who performed the import */
+  cal_login VARCHAR(25) NULL,
+  PRIMARY KEY ( cal_import_id )
+);
+
+/*
+ * Used to track import data (one row per event)
+ */
+CREATE TABLE webcal_import_data (
+  /* import id (from webcal_import table) */
+  cal_import_id INT NOT NULL,
+  /* event id in WebCalendar */
+  cal_id INT NOT NULL,
+  /* user login */
+  cal_login VARCHAR(25) NOT NULL,
+  /* type of import: 'palm', 'vcal', 'ical' or 'publish' */
+  cal_import_type VARCHAR(15) NOT NULL,
+  /* external id used in external calendar system (for example, UID in iCal) */
+  cal_external_id VARCHAR(200) NULL,
+  PRIMARY KEY  ( cal_id, cal_login )
+);
+
+
+/*
+ * Defines a custom report created by a user.
+ */
+CREATE TABLE webcal_report (
+  /* creator of report */
+  cal_login VARCHAR(25) NOT NULL,
+  /* unique id of this report */
+  cal_report_id INT NOT NULL,
+  /* is this a global report (can it be accessed by other users) ('Y' or 'N') */
+  cal_is_global CHAR(1) DEFAULT 'N' NOT NULL,
+  /* format of report (html, plain or csv) */
+  cal_report_type VARCHAR(20) NOT NULL,
+  /* if cal_report_type is 'html', should the default HTML header and */
+  /* trailer be included? ('Y' or 'N') */
+  cal_include_header CHAR(1) DEFAULT 'Y' NOT NULL,
+  /* name of the report */
+  cal_report_name VARCHAR(50) NOT NULL,
+  /* time range for report:  <ul> */
+  /* <li>0 = tomorrow</li> */
+  /* <li>1 = today</li> */
+  /* <li>2 = yesterday</li> */
+  /* <li>3 = day before yesterday</li> */
+  /* <li>10 = next week</li> */
+  /* <li>11 = current week</li> */
+  /* <li>12 = last week</li> */
+  /* <li>13 = week before last</li> */
+  /* <li>20 = next week and week after</li> */
+  /* <li>21 = current week and next week</li> */
+  /* <li>22 = last week and this week</li> */
+  /* <li>23 = last two weeks</li> */
+  /* <li>30 = next month</li> */
+  /* <li>31 = current month</li> */
+  /* <li>32 = last month</li> */
+  /* <li>33 = month before last</li> */
+  /* <li>40 = next year</li> */
+  /* <li>41 = current year</li> */
+  /* <li>42 = last year</li> */
+  /* <li>43 = year before last</li> */
+  /* </ul> */
+  cal_time_range INT NOT NULL,
+  /* user calendar to display (NULL indicates current user) */
+  cal_user VARCHAR(25) NULL,
+  /* allow user to navigate to different dates with next/previous ('Y' or 'N') */
+  cal_allow_nav CHAR(1) DEFAULT 'Y',
+  /* category to filter on (optional) */
+  cal_cat_id INT NULL,
+  /* include empty dates in report ('Y' or 'N') */
+  cal_include_empty CHAR(1) DEFAULT 'N',
+  /* include a link for this report in the "Go to" section of the navigation */
+  /* in the page trailer ('Y' or 'N') */
+  cal_show_in_trailer CHAR(1) DEFAULT 'N',
+  /* date created or last updated (in YYYYMMDD format) */
+  cal_update_date INT NOT NULL,
+  PRIMARY KEY ( cal_report_id )
+);
+
+/*
+ * Defines one of the templates used for a report.
+ * Each report has three templates:
+ * <ol>
+ * <li>Page template - Defines the entire page (except for header and
+ *   footer).  The following variables can be defined:
+ *   <ul>
+ *     <li>${days}<sup>*</sup> - the HTML of all dates (generated from the Date template)</li>
+ *   </ul></li>
+ * <li>Date template - Defines events for one day.  If the report
+ *   is for a week or month, then the results of each day will be
+ *   concatenated and used as the ${days} variable in the Page template.
+ *   The following variables can be defined:
+ *   <ul>
+ *     <li>${events}<sup>*</sup> - the HTML of all events
+ *          for the data (generated from the Event template)</li>
+ *     <li>${date} - the date</li>
+ *     <li>${fulldate} - date (includes weekday)</li>
+ *   </ul></li>
+ * <li>Event template - Defines a single event.
+ *      The following variables can be defined:
+ *   <ul>
+ *     <li>${name}<sup>*</sup> - Brief Description of event</li>
+ *     <li>${description} - Full Description of event</li>
+ *     <li>${date} - Date of event</li>
+ *     <li>${fulldate} - Date of event (includes weekday)</li>
+ *     <li>${time} - Time of event (4:00pm - 4:30pm)</li>
+ *     <li>${starttime} - Start time of event</li>
+ *     <li>${endtime} - End time of event</li>
+ *     <li>${duration} - Duration of event (in minutes)</li>
+ *     <li>${priority} - Priority of event</li>
+ *     <li>${href} - URL to view event details</li>
+ *   </ul></li>
+ * </ol>
+ * <sup>*</sup> denotes a required template variable
+ */
+CREATE TABLE webcal_report_template (
+  /* report id (in webcal_report table) */
+  cal_report_id INT NOT NULL,
+  /* type of template: <ul> */
+  /* <li>'P': page template represents entire document</li> */
+  /* <li>'D': date template represents a single day of events</li> */
+  /* <li>'E': event template represents a single event</li> */
+  /* </ul> */
+  cal_template_type CHAR(1) NOT NULL,
+  /* text of template */
+  cal_template_text TEXT,
+  PRIMARY KEY ( cal_report_id, cal_template_type )
+);

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/tables-oracle.sql
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/tables-oracle.sql	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/tables-oracle.sql	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,424 @@
+
+CREATE TABLE webcal_user (
+  cal_login VARCHAR(25) NOT NULL,
+  cal_passwd VARCHAR(32),
+  cal_lastname VARCHAR(25),
+  cal_firstname VARCHAR(25),
+  cal_is_admin CHAR(1) DEFAULT 'N',
+  cal_email VARCHAR(75) NULL,
+  PRIMARY KEY ( cal_login )
+);
+
+/* create a default admin user */
+INSERT INTO webcal_user ( cal_login, cal_passwd, cal_lastname, cal_firstname, cal_is_admin ) VALUES ( 'admin', '21232f297a57a5a743894a0e4a801fc3', 'Administrator', 'Default', 'Y' );
+
+
+/* Calendar event entry
+ * cal_date is an integer of the format YYYYMMDD
+ * cal_time is an integer of the format HHMM
+ * cal_duration is in minutes
+ * cal_priority: 1=Low, 2=Med, 3=High
+ * cal_type: E=Event ... and not yet implemented: D=Deadline, R=Reminder
+ * cal_access:
+ * P=Public
+ * C=Confidential (others can see time allocated but not what it is)
+ */
+CREATE TABLE webcal_entry (
+  cal_id INT NOT NULL,
+  cal_group_id INT NULL,
+  cal_ext_for_id INT NULL,
+  cal_create_by VARCHAR(25) NOT NULL,
+  cal_date INT NOT NULL,
+  cal_time INT NULL,
+  cal_mod_date INT,
+  cal_mod_time INT,
+  cal_duration INT NOT NULL,
+  cal_priority INT DEFAULT 2,
+  cal_type CHAR(1) DEFAULT 'E',
+  cal_access CHAR(1) DEFAULT 'P',
+  cal_name VARCHAR(80) NOT NULL,
+  cal_description VARCHAR2(1024),
+  PRIMARY KEY ( cal_id )
+);
+
+
+CREATE TABLE webcal_entry_repeats (
+   cal_id INT DEFAULT '0' NOT NULL,
+   cal_type VARCHAR2(20),
+   cal_end INT,
+   cal_frequency INT DEFAULT '1',
+   cal_days CHAR(7),
+   PRIMARY KEY (cal_id)
+);
+
+/* This table specifies which dates in a repeating */
+/* event have either been deleted or replaced with */
+/* a replacement event for that day.  When replaced, the cal_group_id */
+/* (I know... not the best name, but it wasn't being used) column will */
+/* be set to the original event.  That way the user can delete the original */
+/* event and (at the same time) delete any exception events. */
+/*   cal_id: event id of repeating event */
+/*   cal_date: date event should not repeat in YYYYMMDD format */
+CREATE TABLE webcal_entry_repeats_not (
+  cal_id INT NOT NULL,
+  cal_date INT NOT NULL,
+  PRIMARY KEY ( cal_id, cal_date )
+);
+
+
+/* associates one or more users with an event by its id */
+/* cal_status: A=Accepted, R=Rejected, W=Waiting */
+CREATE TABLE webcal_entry_user (
+  cal_id int DEFAULT 0 NOT NULL,
+  cal_login varchar(25) NOT NULL,
+  cal_status char(1) DEFAULT 'A',
+  cal_category int DEFAULT NULL,
+  PRIMARY KEY (cal_id,cal_login)
+);
+
+
+/* external calendar users */
+CREATE TABLE webcal_entry_ext_user (
+  cal_id INT DEFAULT 0 NOT NULL,
+  cal_fullname VARCHAR(50) NOT NULL,
+  cal_email VARCHAR(75) NULL,
+  PRIMARY KEY ( cal_id, cal_fullname )
+);
+
+
+/* preferences for a user */
+CREATE TABLE webcal_user_pref (
+  cal_login varchar(25) NOT NULL,
+  cal_setting varchar(25) NOT NULL,
+  cal_value varchar(100) NULL,
+  PRIMARY KEY ( cal_login, cal_setting )
+);
+
+
+/* layers for a user */
+CREATE TABLE webcal_user_layers (
+  cal_layerid INT DEFAULT '0' NOT NULL,
+  cal_login VARCHAR(25) NOT NULL,
+  cal_layeruser VARCHAR(25) NOT NULL,
+  cal_color VARCHAR(25) NULL,
+  cal_dups CHAR(1) DEFAULT 'N',
+  PRIMARY KEY ( cal_login, cal_layeruser )
+);
+
+/* site extra fields (customized in site_extra.php) */
+/* cal_id is event id */
+/* cal_name is the brief name of this type (first field in $site_extra array) */
+/* cal_type is $EXTRA_URL, $EXTRA_DATE, etc. */
+/* cal_date is only used for $EXTRA_DATE type fields */
+/* cal_remind is many minutes before event should a reminder be sent */
+/* cal_last_remind_date is the last event date (YYYYMMMDD) that a reminder */
+/* was sent.  This is not necessarily the date the msg was sent.  It is the */
+/* date of the event we are sending a reminder for. */
+/* cal_data is used to store text data */
+CREATE TABLE webcal_site_extras (
+  cal_id INT DEFAULT '0' NOT NULL,
+  cal_name VARCHAR(25) NOT NULL,
+  cal_type INT NOT NULL,
+  cal_date INT DEFAULT '0',
+  cal_remind INT DEFAULT '0',
+  cal_data LONG,
+  PRIMARY KEY ( cal_id, cal_name, cal_type )
+);
+
+/* Keep a history of when reminders get sent */
+/* cal_id is event id */
+/* cal_name is extra type (see site_extras.php) */
+/* cal_event_date is the event date we are sending reminder for */
+/*   (in YYYYMMDD format) */
+/* cal_last_sent is the date/time we last sent a reminder */
+/*   (in UNIX time format) */
+CREATE TABLE webcal_reminder_log (
+  cal_id INT DEFAULT '0' NOT NULL,
+  cal_name VARCHAR(25) NOT NULL,
+  cal_event_date INT DEFAULT '0' NOT NULL,
+  cal_last_sent INT DEFAULT '0' NOT NULL,
+  PRIMARY KEY ( cal_id, cal_name, cal_event_date )
+);
+
+/* Group support */
+/* cal_owner is the login of the creator of the group. */
+CREATE TABLE webcal_group (
+  cal_group_id INT NOT NULL,
+  cal_owner VARCHAR2(25) NULL,
+  cal_name VARCHAR2(50) NOT NULL,
+  cal_last_update INT NOT NULL,
+  PRIMARY KEY ( cal_group_id )
+);
+
+/* Assign users to groups */
+CREATE TABLE webcal_group_user (
+  cal_group_id INT NOT NULL,
+  cal_login VARCHAR2(25) NOT NULL,
+  PRIMARY KEY ( cal_group_id, cal_login )
+);
+
+/* A "view" allows a user to put the calendars of multiple users all on */
+/* one page.  A "view" is valid only for the owner (cal_owner) of the */
+/* view. */
+/* cal_view_type is "W" for week view, "D" for day view, "M" for month view */
+CREATE TABLE webcal_view (
+  cal_view_id INT NOT NULL,
+  cal_owner VARCHAR2(25) NOT NULL,
+  cal_name VARCHAR2(50) NOT NULL,
+  cal_view_type CHAR(1),
+  cal_is_global CHAR(1) DEFAULT 'N' NOT NULL,
+  PRIMARY KEY ( cal_view_id )
+);
+
+CREATE TABLE webcal_view_user (
+  cal_view_id INT NOT NULL,
+  cal_login VARCHAR2(25) NOT NULL,
+  PRIMARY KEY ( cal_view_id, cal_login )
+);
+
+/* System settings (set by the admin interface in admin.php) */
+CREATE TABLE webcal_config (
+  cal_setting VARCHAR2(50) NOT NULL,
+  cal_value VARCHAR2(100) NULL,
+  PRIMARY KEY ( cal_setting )
+);
+
+/* default settings */
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'application_name', 'WebCalendar' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'LANGUAGE', 'Browser-defined' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'demo_mode', 'N' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'require_approvals', 'Y' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'groups_enabled', 'N' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'user_sees_only_his_groups', 'N' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'categories_enabled', 'N' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'allow_conflicts', 'N' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'conflict_repeat_months', '6' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'disable_priority_field', 'N' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'disable_access_field', 'N' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'disable_participants_field', 'N' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'disable_repeating_field', 'N' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'allow_view_other', 'Y' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'email_fallback_from', 'youremailhere' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'remember_last_login', 'Y' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'allow_color_customization', 'Y' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('BGCOLOR','#FFFFFF');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('TEXTCOLOR','#000000');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('H2COLOR','#000000');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('CELLBG','#C0C0C0');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('WEEKENDBG','#D0D0D0');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('TABLEBG','#000000');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('THBG','#FFFFFF');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('THFG','#000000');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('POPUP_FG','#000000');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('POPUP_BG','#FFFFFF');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('TODAYCELLBG','#FFFF33');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'STARTVIEW', 'week.php' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'WEEK_START', '0' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'TIME_FORMAT', '12' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'DISPLAY_UNAPPROVED', 'Y' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'DISPLAY_WEEKNUMBER', 'Y' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'WORK_DAY_START_HOUR', '8' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'WORK_DAY_END_HOUR', '17' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'send_email', 'N' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'EMAIL_REMINDER', 'Y' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'EMAIL_EVENT_ADDED', 'Y' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'EMAIL_EVENT_UPDATED', 'Y' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'EMAIL_EVENT_DELETED', 'Y' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'EMAIL_EVENT_REJECTED', 'Y' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('auto_refresh', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('nonuser_enabled', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('allow_html_description', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('reports_enabled', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('DISPLAY_WEEKENDS', 'Y');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('DISPLAY_DESC_PRINT_DAY', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('DATE_FORMAT', '__month__ __dd__, __yyyy__');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('TIME_SLOTS', '12');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('TIMED_EVT_LEN', 'D');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('PUBLISH_ENABLED', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('DATE_FORMAT_MY', '__month__ __yyyy__');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('DATE_FORMAT_MD', '__month__ __dd__');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('CUSTOM_SCRIPT', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('CUSTOM_HEADER', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('CUSTOM_TRAILER', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('bold_days_in_year', 'Y');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('site_extras_in_popup', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('add_link_in_views', 'Y');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('allow_conflict_override', 'Y');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('limit_appts', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('limit_appts_number', '6');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('public_access', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('public_access_default_visible', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('public_access_default_selected', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('public_access_others', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('public_access_can_add', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('public_access_add_needs_approval', 'Y');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('public_access_view_part', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('nonuser_at_top', 'Y');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('allow_external_users', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('external_notifications', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('external_reminders', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('enable_gradients', 'N');
+
+
+
+/* activity log for an event */
+/* log types (cal_type): */
+/*   C: Created */
+/*   A: Approved/Confirmed by user */
+/*   R: Rejected by user */
+/*   U: Updated by user */
+/*   M: Mail Notification sent */
+/*   E: Reminder sent */
+CREATE TABLE webcal_entry_log (
+  cal_log_id INT NOT NULL,
+  cal_entry_id INT NOT NULL,
+  cal_login VARCHAR2(25) NOT NULL,
+  cal_user_cal VARCHAR2(25) NULL,
+  cal_type CHAR(1) NOT NULL,
+  cal_date INT NOT NULL,
+  cal_time INT NULL,
+  cal_text VARCHAR2(1024),
+  PRIMARY KEY ( cal_log_id )
+);
+
+/* user categories */
+CREATE TABLE webcal_categories (
+  cat_id INT NOT NULL,
+  cat_owner VARCHAR2(25),
+  cat_name VARCHAR2(80) NOT NULL,
+  PRIMARY KEY ( cat_id )
+);
+
+CREATE TABLE webcal_asst (
+  cal_boss VARCHAR2(25) NOT NULL,
+  cal_assistant VARCHAR2(25) NOT NULL,
+  PRIMARY KEY ( cal_boss, cal_assistant )
+);
+
+CREATE TABLE webcal_nonuser_cals (
+  cal_login VARCHAR2(25) NOT NULL,
+  cal_lastname VARCHAR2(25) NULL,
+  cal_firstname VARCHAR2(25) NULL,
+  cal_admin VARCHAR2(25) NOT NULL,
+  PRIMARY KEY ( cal_login )
+);
+
+CREATE TABLE webcal_import (
+  cal_import_id INT NOT NULL,
+  cal_name VARCHAR2(50) NULL,
+  cal_date INT NOT NULL,
+  cal_type VARCHAR2(10) NOT NULL,
+  cal_login VARCHAR2(25) NULL,
+  PRIMARY KEY ( cal_import_id )
+);
+
+CREATE TABLE webcal_import_data (
+  cal_import_id INT NOT NULL,
+  cal_id INT NOT NULL,
+  cal_login VARCHAR2(25) NOT NULL,
+  cal_import_type VARCHAR2(15) NOT NULL,
+  cal_external_id VARCHAR2(200) NULL,
+  PRIMARY KEY  ( cal_id, cal_login )
+);
+
+CREATE TABLE webcal_report (
+  cal_login VARCHAR(25) NOT NULL,
+  cal_report_id INT NOT NULL,
+  cal_is_global CHAR(1) DEFAULT 'N' NOT NULL,
+  cal_report_type VARCHAR(20) NOT NULL,
+  cal_include_header CHAR(1) DEFAULT 'Y' NOT NULL,
+  cal_report_name VARCHAR(50) NOT NULL,
+  cal_time_range INT NOT NULL,
+  cal_user VARCHAR(25) NULL,
+  cal_allow_nav CHAR(1) DEFAULT 'Y',
+  cal_cat_id INT NULL,
+  cal_include_empty CHAR(1) DEFAULT 'N',
+  cal_show_in_trailer CHAR(1) DEFAULT 'N',
+  cal_update_date INT NOT NULL,
+  PRIMARY KEY ( cal_report_id )
+);
+
+CREATE TABLE webcal_report_template (
+  cal_report_id INT NOT NULL,
+  cal_template_type CHAR(1) NOT NULL,
+  cal_template_text LONG,
+  PRIMARY KEY ( cal_report_id, cal_template_type )
+);
+
+
+
+

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/tables-postgres.sql
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/tables-postgres.sql	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/tables-postgres.sql	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,372 @@
+CREATE TABLE webcal_user (
+  cal_login VARCHAR(25) NOT NULL,
+  cal_passwd VARCHAR(32),
+  cal_lastname VARCHAR(25),
+  cal_firstname VARCHAR(25),
+  cal_is_admin CHAR(1) DEFAULT 'N',
+  cal_email VARCHAR(75),
+  PRIMARY KEY ( cal_login )
+);
+
+INSERT INTO webcal_user ( cal_login, cal_passwd, cal_lastname, cal_firstname, cal_is_admin ) VALUES ( 'admin', '21232f297a57a5a743894a0e4a801fc3', 'Administrator', 'Default', 'Y' );
+
+
+CREATE TABLE webcal_entry (
+  cal_id INT NOT NULL,
+  cal_group_id INT,
+  cal_ext_for_id INT NULL,
+  cal_create_by VARCHAR(25) NOT NULL,
+  cal_date INT NOT NULL,
+  cal_time INT,
+  cal_mod_date INT,
+  cal_mod_time INT,
+  cal_duration INT NOT NULL,
+  cal_priority INT DEFAULT 2,
+  cal_type CHAR(1) DEFAULT 'E',
+  cal_access CHAR(1) DEFAULT 'P',
+  cal_name VARCHAR(80) NOT NULL,
+  cal_description TEXT,
+  PRIMARY KEY ( cal_id )
+);
+
+
+CREATE TABLE webcal_entry_repeats (
+   cal_id INT DEFAULT '0' NOT NULL,
+   cal_type VARCHAR(20),
+   cal_end INT,
+   cal_frequency INT DEFAULT '1',
+   cal_days CHAR(7),
+   PRIMARY KEY (cal_id)
+);
+
+
+CREATE TABLE webcal_entry_repeats_not (
+  cal_id INT NOT NULL,
+  cal_date INT NOT NULL,
+  PRIMARY KEY ( cal_id, cal_date )
+);
+
+
+CREATE TABLE webcal_entry_user (
+  cal_id int DEFAULT '0' NOT NULL,
+  cal_login varchar(25) DEFAULT '' NOT NULL, 
+  cal_status char(1) DEFAULT 'A' NOT NULL,
+  cal_category INT DEFAULT NULL,
+  PRIMARY KEY ( cal_id,cal_login )
+);
+
+
+CREATE TABLE webcal_entry_ext_user (
+  cal_id INT DEFAULT 0 NOT NULL,
+  cal_fullname VARCHAR(50) NOT NULL,
+  cal_email VARCHAR(75) NOT NULL,
+  PRIMARY KEY ( cal_id, cal_fullname )
+);
+
+
+CREATE TABLE webcal_user_pref (
+  cal_login varchar(25) NOT NULL,
+  cal_setting varchar(25) NOT NULL,
+  cal_value varchar(100),
+  PRIMARY KEY ( cal_login, cal_setting )
+);
+
+
+
+CREATE TABLE webcal_user_layers (
+  cal_layerid INT DEFAULT '0' NOT NULL,
+  cal_login varchar(25) NOT NULL,
+  cal_layeruser varchar(25) NOT NULL,
+  cal_color varchar(25),
+  cal_dups CHAR(1) DEFAULT 'N',
+  PRIMARY KEY ( cal_login, cal_layeruser )
+);
+
+
+
+CREATE TABLE webcal_site_extras (
+  cal_id INT DEFAULT '0' NOT NULL,
+  cal_name VARCHAR(25) NOT NULL,
+  cal_type INT NOT NULL,
+  cal_date INT DEFAULT '0',
+  cal_remind INT DEFAULT '0',
+  cal_data TEXT,
+  PRIMARY KEY ( cal_id, cal_name, cal_type )
+);
+
+
+CREATE TABLE webcal_reminder_log (
+  cal_id INT DEFAULT '0' NOT NULL,
+  cal_name VARCHAR(25) NOT NULL,
+  cal_event_date INT NOT NULL DEFAULT 0,
+  cal_last_sent INT NOT NULL DEFAULT 0,
+  PRIMARY KEY ( cal_id, cal_name, cal_event_date )
+);
+
+CREATE TABLE webcal_group (
+  cal_group_id INT NOT NULL,
+  cal_owner VARCHAR(25) NOT NULL,
+  cal_name VARCHAR(50) NOT NULL,
+  cal_last_update INT NOT NULL,
+  PRIMARY KEY ( cal_group_id )
+);
+
+CREATE TABLE webcal_group_user (
+  cal_group_id INT NOT NULL,
+  cal_login VARCHAR(25) NOT NULL,
+  PRIMARY KEY ( cal_group_id, cal_login )
+);
+
+CREATE TABLE webcal_view (
+  cal_view_id INT NOT NULL,
+  cal_owner VARCHAR(25) NOT NULL,
+  cal_name VARCHAR(50) NOT NULL,
+  cal_view_type CHAR(1),
+  cal_is_global CHAR(1) DEFAULT 'N' NOT NULL,
+  PRIMARY KEY ( cal_view_id )
+);
+
+CREATE TABLE webcal_view_user (
+  cal_view_id INT NOT NULL,
+  cal_login VARCHAR(25) NOT NULL,
+  PRIMARY KEY ( cal_view_id, cal_login )
+);
+
+CREATE TABLE webcal_config (
+  cal_setting VARCHAR(50) NOT NULL,
+  cal_value VARCHAR(100) NOT NULL,
+  PRIMARY KEY ( cal_setting )
+);
+
+
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'application_name', 'WebCalendar' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'LANGUAGE', 'Browser-defined' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'demo_mode', 'N' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'require_approvals', 'Y' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'groups_enabled', 'N' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'user_sees_only_his_groups', 'N' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'categories_enabled', 'N' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'allow_conflicts', 'N' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'conflict_repeat_months', '6' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'disable_priority_field', 'N' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'disable_access_field', 'N' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'disable_participants_field', 'N' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'disable_repeating_field', 'N' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'allow_view_other', 'Y' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'email_fallback_from', 'youremailhere' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'remember_last_login', 'Y' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'allow_color_customization', 'Y' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('BGCOLOR','#FFFFFF');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('TEXTCOLOR','#000000');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('H2COLOR','#000000');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('CELLBG','#C0C0C0');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('WEEKENDBG','#D0D0D0');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('TABLEBG','#000000');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('THBG','#FFFFFF');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('THFG','#000000');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('POPUP_FG','#000000');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('POPUP_BG','#FFFFFF');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('TODAYCELLBG','#FFFF33');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'STARTVIEW', 'week.php' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'WEEK_START', '0' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'TIME_FORMAT', '12' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'DISPLAY_UNAPPROVED', 'Y' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'DISPLAY_WEEKNUMBER', 'Y' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'WORK_DAY_START_HOUR', '8' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'WORK_DAY_END_HOUR', '17' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'send_email', 'N' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'EMAIL_REMINDER', 'Y' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'EMAIL_EVENT_ADDED', 'Y' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'EMAIL_EVENT_UPDATED', 'Y' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'EMAIL_EVENT_DELETED', 'Y' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ( 'EMAIL_EVENT_REJECTED', 'Y' );
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('auto_refresh', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('nonuser_enabled', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('allow_html_description', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('reports_enabled', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('DISPLAY_WEEKENDS', 'Y');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('DISPLAY_DESC_PRINT_DAY', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('DATE_FORMAT', '__month__ __dd__, __yyyy__');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('TIME_SLOTS', '12');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('TIMED_EVT_LEN', 'D');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('PUBLISH_ENABLED', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('DATE_FORMAT_MY', '__month__ __yyyy__');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('DATE_FORMAT_MD', '__month__ __dd__');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('CUSTOM_SCRIPT', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('CUSTOM_HEADER', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('CUSTOM_TRAILER', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('bold_days_in_year', 'Y');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('site_extras_in_popup', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('add_link_in_views', 'Y');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('allow_conflict_override', 'Y');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('limit_appts', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('limit_appts_number', '6');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('public_access', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('public_access_default_visible', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('public_access_default_selected', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('public_access_others', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('public_access_can_add', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('public_access_add_needs_approval', 'Y');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('public_access_view_part', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('nonuser_at_top', 'Y');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('allow_external_users', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('external_notifications', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('external_reminders', 'N');
+INSERT INTO webcal_config ( cal_setting, cal_value )
+  VALUES ('enable_gradients', 'N');
+
+
+
+CREATE TABLE webcal_entry_log (
+  cal_log_id INT NOT NULL,
+  cal_entry_id INT NOT NULL,
+  cal_login VARCHAR(25) NOT NULL,
+  cal_user_cal VARCHAR(25) NOT NULL,
+  cal_type CHAR(1) NOT NULL,
+  cal_date INT NOT NULL,
+  cal_time INT NOT NULL,
+  cal_text TEXT,
+  PRIMARY KEY ( cal_log_id )
+);
+
+
+CREATE TABLE webcal_categories (
+  cat_id INT NOT NULL,
+  cat_owner VARCHAR(25),
+  cat_name VARCHAR(80) NOT NULL,
+  PRIMARY KEY ( cat_id )
+);
+
+CREATE TABLE webcal_asst (
+  cal_boss VARCHAR(25) NOT NULL,
+  cal_assistant VARCHAR(25) NOT NULL,
+  PRIMARY KEY ( cal_boss, cal_assistant )
+);
+
+CREATE TABLE webcal_nonuser_cals (
+  cal_login VARCHAR(25) NOT NULL,
+  cal_lastname VARCHAR(25) NULL,
+  cal_firstname VARCHAR(25) NULL,
+  cal_admin VARCHAR(25) NOT NULL,
+  PRIMARY KEY ( cal_login )
+);
+
+CREATE TABLE webcal_import (
+  cal_import_id INT NOT NULL,
+  cal_name VARCHAR(50) NULL,
+  cal_date INT NOT NULL,
+  cal_type VARCHAR(10) NOT NULL,
+  cal_login VARCHAR(25) NULL,
+  PRIMARY KEY ( cal_import_id )
+);
+
+CREATE TABLE webcal_import_data (
+  cal_import_id INT NOT NULL,
+  cal_id INT NOT NULL,
+  cal_login VARCHAR(25) NOT NULL,
+  cal_import_type VARCHAR(15) NOT NULL,
+  cal_external_id VARCHAR(200) NULL,
+  PRIMARY KEY  ( cal_id, cal_login )
+);
+
+
+CREATE TABLE webcal_report (
+  cal_login VARCHAR(25) NOT NULL,
+  cal_report_id INT NOT NULL,
+  cal_is_global CHAR(1) DEFAULT 'N' NOT NULL,
+  cal_report_type VARCHAR(20) NOT NULL,
+  cal_include_header CHAR(1) DEFAULT 'Y' NOT NULL,
+  cal_report_name VARCHAR(50) NOT NULL,
+  cal_time_range INT NOT NULL,
+  cal_user VARCHAR(25) NULL,
+  cal_allow_nav CHAR(1) DEFAULT 'Y',
+  cal_cat_id INT NULL,
+  cal_include_empty CHAR(1) DEFAULT 'N',
+  cal_show_in_trailer CHAR(1) DEFAULT 'N',
+  cal_update_date INT NOT NULL,
+  PRIMARY KEY ( cal_report_id )
+);
+
+CREATE TABLE webcal_report_template (
+  cal_report_id INT NOT NULL,
+  cal_template_type CHAR(1) NOT NULL,
+  cal_template_text TEXT,
+  PRIMARY KEY ( cal_report_id, cal_template_type )
+);
+
+
+
+

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/tools/check_translation.pl
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/tools/check_translation.pl	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/tools/check_translation.pl	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,136 @@
+#!/usr/bin/perl
+#
+# This tool helps with the translation into other languages by verifying that
+# all text specified in translate(), etranslate() and etooltip()
+# within the application has a corresponding entry in the translation
+# data file.  In short, this makes sure all text has a correspoding
+# translation.
+#
+# Usage:
+#	check_translation.pl languagefile
+#	  ... or to check the most recently modified translation file
+#	check_translation.pl
+# Example:
+#	check_translation.pl ../translations/English-US.txt
+#
+# Note: this utility should be run from this directory (tools).
+#
+###########################################################################
+
+$trans_dir = "../translations";
+
+$infile = $ARGV[0];
+
+if ( $infile eq "" ) {
+  opendir ( DIR, $trans_dir ) || die "error opening $trans_dir";
+  @files = grep ( /\.txt$/, readdir ( DIR ) );
+  closedir ( DIR );
+  $last_mtime = 0;
+  foreach $f ( @files ) {
+    ( $mtime ) = ( stat ( "../translations/$f" ) )[9];
+    if ( $mtime > $last_mtime ) {
+      $last_mtime = $mtime;
+      $infile = "../translations/$f";
+    }
+  }
+}
+
+if ( $infile ne "" && ! -f $infile && -f "$trans_dir/$infile" ) {
+  $infile = "$trans_dir/$infile";
+}
+
+if ( $infile ne "" && ! -f $infile && -f "$trans_dir/$infile.txt" ) {
+  $infile = "$trans_dir/$infile.txt";
+}
+
+
+# First get the list of .php and .inc files.
+opendir ( DIR, ".." ) || die "Error opening ..";
+ at files = grep ( /\.php$/, readdir ( DIR ) );
+closedir ( DIR );
+
+opendir ( DIR, "../includes" ) || die "Error opening ../includes";
+ at incfiles = grep ( /\.php$/, readdir ( DIR ) );
+closedir ( DIR );
+foreach $f ( @incfiles ) {
+  push ( @files, "includes/$f" );
+}
+opendir ( DIR, "../includes/js" ) || die "Error opening ../includes/js";
+ at incfiles = grep ( /\.php$/, readdir ( DIR ) );
+closedir ( DIR );
+foreach $f ( @incfiles ) {
+  push ( @files, "includes/js/$f" );
+}
+push ( @files, "tools/send_reminders.php" );
+
+
+foreach $f ( @files ) {
+  $file = "../$f";
+  open ( F, $file ) || die "Error reading $file";
+  #print "Checking $f for text.\n";
+  while ( <F> ) {
+    $data = $_;
+    while ( $data =~ /(translate|tooltip)\s*\(\s*"/ ) {
+      $data = $';
+      if ( $data =~ /"\s*\)/ ) {
+        $text = $`;
+        $text{$text} = 1;
+        $data = $';
+      }
+    }
+  }
+  close ( F );
+}
+
+#print "Found the following entries:\n";
+#foreach $text ( sort { uc($a) cmp uc($b) } keys ( %text ) ) {
+#  print "$text\n";
+#}
+
+# Now load the translation file
+if ( ! -f $infile ) {
+  die "Usage: $0 translation-file\n";
+}
+open ( F, $infile ) || die "Error opening $infile";
+while ( <F> ) {
+  chop;
+  next if ( /^#/ );
+  if ( /\s*:/ ) {
+    $abbrev = $`;
+    $trans{$abbrev} = $';
+  }
+}
+
+$notfound = 0;
+$total = 0;
+foreach $text ( sort { uc($a) cmp uc($b) } keys ( %text ) ) {
+  if ( ! defined ( $trans{$text} ) ) {
+    if ( ! $notfound ) {
+      print "The following text did not have a translation in $infile:\n\n";
+    }
+    print "$text\n";
+    $notfound++;
+  }
+  $total++;
+}
+
+# Check for translations that are not used...
+$extra = 0;
+foreach $text ( sort { uc($a) cmp uc($b) } keys ( %trans ) ) {
+  if ( ! defined ( $text{$text} ) ) {
+    if ( ! $extra ) {
+      print "\nThe following translation text is not needed in $infile:\n\n";
+    }
+    print "$text\n";
+    $extra++;
+  }
+}
+
+if ( ! $notfound ) {
+  print "All text was found in $infile.  Good job :-)\n";
+} else {
+  printf "\n$notfound of $total translation(s) missing. (%1.1f%% complete)\n", 
+   ( 100 * ( $total - $notfound ) / $total );
+}
+
+exit 0;

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/tools/convert_passwords.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/tools/convert_passwords.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/tools/convert_passwords.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,86 @@
+<?
+/*
+ * $Id: convert_passwords.php,v 1.2.4.1 2006/06/07 15:10:46 cknudsen Exp $
+ *
+ * This script will alter the webcal_user table to allow 32 character passwords
+ * and convert user passwords to PHP md5 passwords.
+ *
+ * It is necessary to run this to upgrade to version 0.9.43 from any version.
+ *
+ *
+ *   ** NOTE: This script should only be run ONCE and then be deleted!!
+ *
+ */
+
+/********************************************************************/
+
+$includedir = "../includes";
+include "$includedir/config.php";
+$includedir = "../includes";
+include "$includedir/php-dbi.php";
+
+$c = dbi_connect ( $db_host, $db_login, $db_password, $db_database );
+if ( ! $c ) {
+  echo "Error connecting to database: " . dbi_error ();
+  exit;
+}
+
+// First, look at the passwords.  If we find and md5 hash in there,
+// (it will have 32 chars instead of < 25 like in the old version),
+// then we know this script was already run.
+$sql = "SELECT cal_passwd FROM webcal_user";
+$res = dbi_query ( $sql );
+$doneBefore = false;
+if ( $res ) {
+  if ( $row = dbi_fetch_row ( $res ) ) {
+    if ( strlen ( $row[0] ) > 30 )
+      $doneBefore = true;
+  }
+  dbi_free_result ( $res );
+} else {
+  echo "Database error: " . dbi_error ();
+  exit;
+}
+
+if ( $doneBefore ) {
+  echo "Passwords were already converted to md5!\n<br />\n";
+  exit;
+}
+
+// See if webcal_user.cal_passwd will allow 32 characters
+$sql = "DESC webcal_user";
+$res = dbi_query ( $sql );
+while ( $row = dbi_fetch_row ( $res ) ) {
+  if ($row[Field] == 'cal_passwd') {
+    preg_match ( "/([0-9]+)/", $row[Type], $match );
+    if ($match[1] < 32) {
+      $sql = "ALTER TABLE webcal_user MODIFY cal_passwd VARCHAR(32) NULL";
+      // Use the following on older MySQL versions
+      //$sql = "ALTER TABLE webcal_user CHANGE cal_passwd cal_passwd VARCHAR(32) NULL";
+      $res = dbi_query ( $sql );
+      if ($res) {
+        echo "Table webcal_user altered to allow 32 character passwords.\n" .
+          "<br />Converting passwords...\n<br /><br />\n";
+      }
+    }
+  }
+}
+dbi_free_result ( $res );
+
+// Convert the passwords
+$sql = "SELECT cal_login, cal_passwd FROM webcal_user";
+$res = dbi_query ( $sql );
+if ( $res ) {
+  while ( $row = dbi_fetch_row ( $res ) ) {
+    $sql2 = "UPDATE webcal_user SET cal_passwd = '" .
+      md5($row[1]) . "' WHERE cal_login = '".$row[0]."'";
+    $res2 = dbi_query ( $sql2 );
+    if ($res2)
+      echo "Password updated for: ".$row[0]."<br />\n";
+  }
+  dbi_free_result ( $res );
+  echo "Finished converting passwords\n<br />\n";
+  echo "<br /><br />\n<h1>DO NOT Run this script again!!!</h1>\n<br />\n";
+  echo '<h1>Delete this script if it ran successfully!!!</h1>';
+}
+?>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/tools/palm_datebook.pl
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/tools/palm_datebook.pl	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/tools/palm_datebook.pl	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,451 @@
+#!/usr/bin/perl
+
+=head1 NAME
+palm_datebook.pl
+
+=head1 SYNOPSIS
+Reads the events from a Palm Desktop DateBook.dat
+
+=head1 DESCRIPTION
+This file reads a Palm Desktop DateBook file (datebook.dat) and prints
+all the non-expired entries (can return all, see below) to STDOUT.  It prints a pipe
+separated value list by default.
+
+=head1 USAGE
+The script is set up to be used with the webcalendar and doesn't need to be
+altered.  If you want to use it some other way, then change the variables in
+the config section to suit your needs and edit the main program (bottom of script).
+You can uncomment the $outfile config to print to a file.  The default program 
+will not include expired events and takes 2 arguments:
+
+  1. $DateBookFileName - The name/location of the datebook.dat
+  2. $exc_private - If a 1 is passed private records will be skipped
+
+The following data is available in $Entry:
+
+$Entry->{RecordID}           =  Record ID in the Palm
+$Entry->{Status}             =  Identifies new and deleted records (status in datebook)
+$Entry->{Position}           =  Position in list?
+$Entry->{StartTime}          =  In seconds since 1970
+$Entry->{EndTime}            =  In seconds since 1970
+$Entry->{Description}        =  Description of event (string)
+$Entry->{Duration}           =  How long the event lasts (in minutes)
+$Entry->{Note}               =  Note (string)
+$Entry->{Untimed}            =  1 = true  0 = false
+$Entry->{Private}            =  1 = true  0 = false
+$Entry->{Category}           =  useless for Palm
+$Entry->{AlarmSet}           =  1 = true  0 = false
+$Entry->{AlarmAdvanceAmount} =  How many units in AlarmAdvanceType (-1 means not set)
+$Entry->{AlarmAdvanceType}   =  Units: (0=minutes, 1=hours, 2=days)
+$Entry->{Repeat}             =  Array containing repeat information (if repeat)
+$Entry->{Repeat}->{Interval}   =  1=daily,2=weekly,3=MonthlyByDay,4=MonthlyByDate,5=Yearly
+$Entry->{Repeat}->{Frequency}  =  How often event occurs. (1=every, 2=every other,etc.)
+$Entry->{Repeat}->{EndTime}    =  When the repeat ends (In seconds since 1970)
+$Entry->{Repeat}->{Exceptions} =  An exception to the repeat (In seconds since 1970)
+$Entry->{Repeat}->{RepeatDays} =  For Weekly: What days to repeat on (7 characters...y or n for each day)
+$Entry->{Repeat}->{DayNum}     =  For MonthlyByDay: Day of week (1=sun,2=mon,3=tue,4=wed,5=thu,6=fri,7=sat)
+$Entry->{Repeat}->{WeekNum}    =  For MonthlyByDay: Week number (1=first,2=second,3=third,4=fourth,5=last)
+
+=head1 CONTRIBUTERS
+Eduard Martinescu - Provided patch to parse category list.
+
+=cut
+
+use CGI qw (:standard);
+my $q = new CGI;
+my ($Year, $Month, $Day);
+my $DATA;
+
+# -----------------------  Config if necessary  ----------------------------
+my $DateBookFileName = $ARGV[0];  # The name of the file
+my $exc_private = $ARGV[1];       # Do we want private entries? (1 = skip private)
+my $inc_expired = 0;              # Do we want expired entries? (1 = include expired)
+my $sep = "|";                    # what to separate the output with
+#my $outfile = "/tmp/datebook_dump.txt";  # uncomment to print to file
+#---------------------------------------------------------------------------
+
+#=================
+sub ReadDateBook {
+#=================
+# ReadDateBook opens the file we passed (datebook.dat) and reads the entries.
+
+  my ($FileName, $Filter) = @_;
+  my (@Fields, @Entries, $FieldCount, $NumberOfEntries);
+  my ($Entry, $i, $Header, $Tag);
+  my ($NextFree, $CategoryCount, $Category, @Categories, $ResourceID);
+  my ($FieldsPerRow, $RecordIdPos, $RecordStatusPos, $RecordPlacementPos);
+
+  open DATEBOOK, "<".$FileName;
+  binmode DATEBOOK;
+
+  local $/ = undef;
+  $_ = <DATEBOOK>;
+  $GlobalPos = 0;
+  close DATEBOOK;
+
+  # First, check the initial 4 byte "tag" field.
+  $Tag = ReadByteString(4);
+
+  # Next, read the header information.
+  $FileName = ReadPilotString();
+  $Header   = ReadPilotString();
+  $NextFree = ReadLong();
+
+  # Read the category information
+  $CategoryCount = ReadLong();
+  for ($i=0; $i<$CategoryCount; $i++) {
+    $Category = ReadCategory();
+    push (@Categories,$Category) if ($Category ne 0);
+  }
+
+  $ResourceID         = ReadLong();
+  $FieldsPerRow       = ReadLong();
+  $RecordIdPos        = ReadLong();
+  $RecordStatusPos    = ReadLong();
+  $RecordPlacementPos = ReadLong();
+
+  # Read the field list.
+  $FieldCount = ReadShort();
+  for ($i=0; $i<$FieldCount; $i++)
+     {push @Fields, ReadShort();}
+
+  # Figure out how many entries to read
+  $NumberOfEntries = ReadLong() / $FieldCount;
+
+  # Read the entries.
+  for ($i=0; $i<$NumberOfEntries; $i++) {
+    $Entry = ReadEntry();
+    if ($Entry ne 0){
+      if (!$Filter or &$Filter($Entry)){push @Entries, $Entry;}
+    }
+  }
+
+  return @Entries;
+}
+
+#==============
+sub ReadEntry {
+#==============
+# ReadPalmEntry reads a single entry from the datebook, stores it in a local
+# hash, and returns a reference to that hash.  The reference can safely
+# be stored in an array for later use.
+
+  my (%Entry);
+
+  $Entry{RecordID}           = ReadPilotField();
+  $Entry{Status}             = ReadPilotField();
+  $Entry{Position}           = ReadPilotField();
+  $Entry{StartTime}          = ReadPilotField();
+  $Entry{EndTime}            = ReadPilotField();
+  $Entry{Description}        = ReadPilotField();
+  $Entry{Duration}           = ReadPilotField();
+  $Entry{Note}               = ReadPilotField();
+  $Entry{Untimed}            = ReadPilotField();
+  $Entry{Private}            = ReadPilotField();
+  $Entry{Category}           = ReadPilotField();
+  $Entry{AlarmSet}           = ReadPilotField();
+  $Entry{AlarmAdvanceAmount} = ReadPilotField();
+  $Entry{AlarmAdvanceType}   = ReadPilotField();
+  $Entry{Repeat}             = ReadPilotField();
+
+  #Should return as -1 if not set, but is returning as 4294967295
+  $Entry{AlarmAdvanceAmount} = "-1" if ($Entry{AlarmAdvanceAmount} eq '4294967295');
+
+  # Remove Crap from the DateBook5 Application
+  $Entry{Note} = '' if ($Entry{Note} =~ /^\#\#[fcdxX\@]/);
+
+  # Filter single quotes, \n\r
+  $Entry{Description} = &filter_quotes($Entry{Description});
+  $Entry{Note} = &filter_quotes($Entry{Note});
+
+  # Calculate duration in minutes
+  $Entry{Duration} = ($Entry{EndTime} - $Entry{StartTime}) / 60;
+
+  # Skip private records if $exc_private
+  if (($exc_private) && ($Entry{Private} == 1)) {
+    return 0;
+  # Skip Record if not in Palm (no RecordID) or marked for deletion
+  } elsif (($Entry{RecordID} == 0) || ($Entry{Status} == 129) || ($Entry{Status} == 4)){
+    return 0;
+  # Skip events that are past endtime (except repeats that aren't expired) unless $inc_expired
+  } elsif (($Entry{EndTime} < time()) && (!$Entry{Repeat}) && (!$inc_expired)){
+    return 0;
+  } elsif (($Entry{Repeat}) && ($Entry{Repeat}{EndTime} < time())&& ($Entry{Repeat}{EndTime} != 0) && (!$inc_expired)){
+    return 0;
+  } else {
+#print $Entry{RecordID} . "\n";
+    return \%Entry;
+  }
+}
+
+#===================
+sub ReadPilotField {
+#===================
+# ReadPilotField returns a single field from the datebook file.
+  my ($Type, $N, $sun, $mon, $tue, $wed, $thu, $fri, $sat);
+  my ($i, $DatesToSkip, $Repeat, $Interval, $Frequency, $Duration, $Position, $EndTime, $exceptions, @E);
+  my (%RA);
+
+  $Type = ReadLong();
+
+  if ($Type == 1 or $Type == 3 or $Type == 6) {
+    return ReadLong();
+  } elsif ($Type == 5) {
+     ReadLong();  # Skip the long of all zeroes
+     return ReadPilotString();
+  } elsif ($Type == 8) {
+     $DatesToSkip = ReadShort();
+     for ($i=1; $i<=$DatesToSkip; $i++)
+        {$exceptions .= ReadLong().":";}
+     chop $exceptions;
+     $Repeat = ReadShort();
+     if ($Repeat == 0xFFFF) {
+       ReadShort();
+       $Skip = ReadShort();
+       SkipBytes($Skip);
+     } elsif ($Repeat and $Repeat != 0x8001) { #($Repeat == 0x1a40 or $Repeat == 0xb3c0 or $Repeat == 0xe750)
+#         print "       DEBUG: Repeat is $Repeat\n";
+#         ReadLong();
+     }
+     if ($Repeat) {
+       $Interval   = ReadLong();
+       $Frequency  = ReadLong();
+       $EndTime    = ReadLong();
+       if ($EndTime eq 1956542399) {       # No EndTime
+         $EndTime = '';
+       }
+
+	     ReadLong();
+       $DayNum =  ReadLong();
+       if ($Interval == 2) {
+         $Position = ReadByte();
+       } elsif ($Interval == 3) {
+         $Position = ReadLong();
+       } elsif ($Interval == 5) {
+         $Position = ReadLong();
+       } else {
+         $Position == 0;
+       }
+
+       # Build the Repeat array to return
+       $RA{Interval} = $Interval;
+       $RA{Frequency} = $Frequency;
+       $RA{EndTime}  = $EndTime;
+       if ($exceptions){ $RA{Exceptions} = $exceptions;}
+
+       if ($Interval == 2) {            # Weekly repeat
+         # $Position is an integer that tells what days of the week
+         # to repeat on. (sun=1,mon=2,tue=4,wed=8,thu=16,fri=32,sat=64)
+         # The numbers are added together to give a unique integer.
+         # We will break it down since the WebCalendar doesn't use this format.
+         $N = $Position;
+
+          # Check for Saturday
+          if ($N - 64 >= 0) {
+            $sat = 'y';
+            $N -= 64;
+          } else {
+            $sat = 'n';
+          }
+
+          # Check for Friday
+          if ($N - 32 >= 0) {
+            $fri = 'y';
+            $N -= 32;
+          } else {
+            $fri = 'n';
+          }
+
+          # Check for Thursday
+          if ($N - 16 >= 0) {
+            $thu = 'y';
+            $N -= 16;
+          } else {
+            $thu = 'n';
+          }
+
+          # Check for Wednesday
+          if ($N - 8 >= 0) {
+            $wed = 'y';
+            $N -= 8;
+          } else {
+            $wed = 'n';
+          }
+
+          # Check for Tuesday
+          if ($N - 4 >= 0) {
+            $tue = 'y';
+            $N -= 4;
+          } else {
+            $tue = 'n';
+          }
+
+          # Check for Monday
+          if ($N - 2 >= 0) {
+            $mon = 'y';
+            $N -= 2;
+          } else {
+            $mon = 'n';
+          }
+
+          # Check for Sunday
+          if ($N - 1 >= 0) {
+            $sun = 'y';
+            $N -= 1;
+          } else {
+            $sun = 'n';
+          }
+          $RA{RepeatDays} = $sun.$mon.$tue.$wed.$thu.$fri.$sat;
+       } elsif ($Interval == 3) {      # Monthlybyday repeat
+         $RA{DayNum} = $DayNum + 1;    # Day of week (1=sun,2=mon,3=tue,4=wed,5=thu,6=fri,7=sat)
+         $RA{WeekNum} = $Position + 1; # Week number (1=first,2=second,3=third,4=fourth,5=last)
+       }
+       return \%RA;
+     } else {
+       return 0;  # No repeat
+     }
+  } else {
+#      print STDERR "There's a problem with this pilot field of type $Type\n";
+   return undef;
+  }
+}
+
+
+#===================
+sub ReadByteString {
+#===================
+# ReadByteString reads the number of bytes passed to it as a parameter
+# and returns it as a character string.
+
+   my ($Count) = @_;
+   $GlobalPos += $Count;
+   return substr ($_, $GlobalPos-$Count, $Count);
+}
+
+#====================
+sub ReadPilotString {
+#====================
+# ReadPilotString reads a pilot formatted string, which is a size (one
+# byte, unless the byte is 0xFF, then it's the two bytes after the 0xFF),
+# followed by that many bytes, and returns a Perl string.
+
+  my ($String) = "";
+  my ($Length, $i);
+
+  $Length = unpack ('C', substr ($_, $GlobalPos, 1));
+  $GlobalPos++;
+  if ($Length == 255) {
+    $Length = ReadShort();
+  }
+
+  $GlobalPos += $Length;
+  return substr ($_, $GlobalPos-$Length, $Length);
+}
+
+#==============
+sub SkipBytes {
+#==============
+# SkipBytes is just like ReadByteString, except it throws away the data,
+# rather than returning it.
+
+  my ($Count) = @_;
+  $GlobalPos += $Count;
+}
+
+#=============
+sub ReadByte {
+#=============
+# ReadByte reads a single byte, and returns it as an integer.
+
+  $GlobalPos++;
+  return unpack ('C', substr($_, $GlobalPos-1, 1));
+}
+
+#==============
+sub ReadShort {
+#==============
+# ReadShort reads two bytes, and returns them as an integer (low order
+# byte is the first one read).
+
+  $GlobalPos+=2;
+  return unpack ('S', substr($_, $GlobalPos-2, 2));
+}
+
+#=============
+sub ReadLong {
+#=============
+# ReadLong reads four bytes, and returns them as an integer (low order
+# byte is the first one read).
+
+  $GlobalPos+=4;
+  return unpack ('L', substr($_, $GlobalPos-4, 4));
+}
+
+#====================
+sub ByDateAscending {
+#====================
+# Sort records by StartTime
+
+  return $a->{StartTime} <=> $b->{StartTime};
+}
+
+#==================
+sub filter_quotes {
+#==================
+# Filter newline/return
+   
+  my $temp = $_[0];
+#  $temp =~ s/'/\\'/g;
+  $temp =~ s/\n|\r/ /g; # Remove newline
+  return ($temp);
+}
+
+#=================
+sub ReadCategory {
+#=================
+# ReadCategory reads a single category entry from the datebook,
+# stores it in a local hash, and returns a reference to that hash.
+# The reference can safely be stored in an array for later use.
+
+  my (%Entry);
+
+  $Entry{Index}         = ReadLong();
+  $Entry{CategoryID}    = ReadLong();
+  $Entry{DirtyFlag}     = ReadLong();
+  $Entry{LongName}      = ReadPilotString();
+  $Entry{ShortName}     = ReadPilotString();
+  return \%Entry;
+}
+
+#-----------------------------  Main Program -------------------------------
+
+foreach $Entry (sort ByDateAscending ReadDateBook($DateBookFileName)) {
+  $DATA .=  $Entry->{RecordID}. $sep;
+  $DATA .=  $Entry->{StartTime}. $sep;
+  $DATA .=  $Entry->{EndTime}. $sep;
+  $DATA .=  $Entry->{Description}. $sep;
+  $DATA .=  $Entry->{Duration}. $sep;
+  $DATA .=  $Entry->{Note}. $sep;
+  $DATA .=  $Entry->{Untimed}. $sep;
+  $DATA .=  $Entry->{Private}. $sep;
+  $DATA .=  $Entry->{Category}. $sep;
+  $DATA .=  $Entry->{AlarmSet}. $sep;
+  $DATA .=  $Entry->{AlarmAdvanceAmount}. $sep;
+  $DATA .=  $Entry->{AlarmAdvanceType}. $sep;
+  $DATA .=  $Entry->{Repeat}->{Interval}. $sep;
+  $DATA .=  $Entry->{Repeat}->{Frequency}. $sep;
+  $DATA .=  $Entry->{Repeat}->{EndTime}. $sep;
+  $DATA .=  $Entry->{Repeat}->{Exceptions}. $sep;
+  $DATA .=  $Entry->{Repeat}->{RepeatDays}. $sep;
+#  $DATA .=  $Entry->{Repeat}->{DayNum}. $sep;
+  $DATA .=  $Entry->{Repeat}->{WeekNum}. $sep;
+  $DATA .=  "\n";
+}
+
+if ($outfile) {
+  die "Couldn't open $outfile: $!" if ((open OUT, ">$outfile") eq undef);
+  flock (OUT, 2);print OUT $DATA;flock (OUT, 8);close OUT;
+} else {
+  print STDOUT $DATA;
+}
+exit;
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/tools/send_reminders.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/tools/send_reminders.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/tools/send_reminders.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,492 @@
+#!/usr/bin/php -q
+<?php
+/* $Id: send_reminders.php,v 1.21.2.3 2006/06/07 15:10:46 cknudsen Exp $
+ *
+ * Description:
+ * This is a command-line script that will send out any email
+ * reminders that are due.
+ *
+ * Usage:
+ * php send_reminders.php
+ *
+ * Setup:
+ * This script should be setup to run periodically on your system.
+ * You could run it once every minute, but every 5-15 minutes should be
+ * sufficient.
+ *
+ * To set this up in cron, add a line like the following in your crontab
+ * to run it every 10 minutes:
+ *   1,11,21,31,41,51 * * * * php /some/path/here/send_reminders.php
+ * Of course, change the path to where this script lives.  If the
+ * php binary is not in your $PATH, you may also need to provide
+ * the full path to "php".
+ * On Linux, just type crontab -e to edit your crontab.
+ *
+ * If you're a Windows user, you'll either need to find a cron clone
+ * for Windows (they're out there) or use the Windows Task Scheduler.
+ * (See docs/WebCalendar-SysAdmin.html for instructions.)
+ * 
+ * Comments:
+ * You will need access to the PHP binary (command-line) rather than
+ * the module-based version that is typically installed for use with
+ * a web server.to build as a CGI (rather than an Apache module) for
+ *
+ * If running this script from the command line generates PHP
+ * warnings, you can disable error_reporting by adding
+ * "-d error_reporting=0" to the command line:
+ *   php -d error_reporting=0 /some/path/here/tools/send_reminders.php
+ *
+ *********************************************************************/
+
+// How many days in advance can a reminder be sent (max)
+// this will affect performance, but keep in mind that someone may enter
+// a reminder to be sent 60 days in advance or they may enter a specific
+// date for a reminder to be sent that is more than 30 days before the
+// event's date.  If you're only running this once an hour or less often,
+// then you could certainly change this to look a whole 365 days ahead.
+$DAYS_IN_ADVANCE = 30;
+//$DAYS_IN_ADVANCE = 365;
+
+
+// Load include files.
+// If you have moved this script out of the WebCalendar directory,
+// which you probably should do since it would be better for security
+// reasons, you would need to change $includedir to point to the
+// webcalendar include directory.
+// We set these twice since config.php unsets these.
+$includedir = "../includes"; // Set again after config.php
+
+include "$includedir/config.php";
+
+$basedir = ".."; // points to the base WebCalendar directory relative to
+                 // current working directory
+$includedir = "../includes";
+
+include "$includedir/php-dbi.php";
+include "$includedir/functions.php";
+include "$includedir/$user_inc";
+include "$includedir/site_extras.php";
+
+$debug = false; // set to true to print debug info...
+$only_testing = false; // act like we're sending, but don't send -- for debugging
+
+
+// Establish a database connection.
+$c = dbi_connect ( $db_host, $db_login, $db_password, $db_database );
+if ( ! $c ) {
+  echo "Error connecting to database: " . dbi_error ();
+  exit;
+}
+
+load_global_settings ();
+
+include "$includedir/translate.php";
+
+if ( $debug )
+  echo "<br />\n";
+
+// Get a list of people who have asked not to receive email
+$res = dbi_query ( "SELECT cal_login FROM webcal_user_pref " .
+  "WHERE cal_setting = 'EMAIL_REMINDER' " .
+  "AND cal_value = 'N'" );
+$noemail = array ();
+if ( $res ) {
+  while ( $row = dbi_fetch_row ( $res ) ) {
+    $user = $row[0];
+    $noemail[$user] = 1;
+    if ( $debug )
+      echo "User $user does not want email. <br />\n";
+  }
+  dbi_free_result ( $res );
+}
+
+// Get a list of the email users in the system.
+// They must also have an email address.  Otherwise, we can't
+// send them mail, so what's the point?
+$allusers = user_get_users ();
+for ( $i = 0; $i < count ( $allusers ); $i++ ) {
+  $names[$allusers[$i]['cal_login']] = $allusers[$i]['cal_fullname'];
+  $emails[$allusers[$i]['cal_login']] = $allusers[$i]['cal_email'];
+}
+
+
+// Get all users language settings.
+$res = dbi_query ( "SELECT cal_login, cal_value FROM webcal_user_pref " .
+  "WHERE cal_setting = 'LANGUAGE'" );
+$languages = array ();
+if ( $res ) {
+  while ( $row = dbi_fetch_row ( $res ) ) {
+    $user = $row[0];
+    $user_lang = $row[1];
+    $languages[$user] = $user_lang;
+    if ( $debug )
+      echo "Language for $user is \"$user_lang\" <br />\n";
+  }
+  dbi_free_result ( $res );
+}
+
+// Get all users timezone settings.
+$res = dbi_query ( "SELECT cal_login, cal_value FROM webcal_user_pref " .
+  "WHERE cal_setting = 'TZ_OFFSET'" );
+$tzoffset = array ();
+if ( $res ) {
+  while ( $row = dbi_fetch_row ( $res ) ) {
+    $user = $row[0];
+    $user_tzoffset = $row[1];
+    $tzoffset[$user] = $user_tzoffset;
+    if ( $debug )
+      echo "TZ OFFSET for $user is \"$user_tzoffset\" <br />\n";
+  }
+  dbi_free_result ( $res );
+}
+
+$startdate = date ( "Ymd" );
+$enddate = date ( "Ymd", time() + ( $DAYS_IN_ADVANCE * 24 * 3600 ) );
+
+// Now read events all the repeating events (for all users)
+$repeated_events = query_events ( "", true, "AND (webcal_entry_repeats.cal_end > $startdate OR webcal_entry_repeats.cal_end IS NULL) " );
+
+// Read non-repeating events (for all users)
+if ( $debug )
+  echo "Checking for events from date $startdate to date $enddate <br />\n";
+$events = read_events ( "", $startdate, $enddate );
+if ( $debug )
+  echo "Found " . count ( $events ) . " events in time range. <br />\n";
+
+
+function indent ( $str ) {
+  return "  " . str_replace ( "\n", "\n  ", $str );
+}
+
+
+// Send a reminder for a single event for a single day to all
+// participants in the event.
+// Send to participants who have accepted as well as those who have not yet
+// approved.  But, don't send to users how rejected (cal_status='R').
+function send_reminder ( $id, $event_date ) {
+  global $names, $emails, $site_extras, $debug, $only_testing,
+    $server_url, $languages, $tzoffset, $application_name;
+  global $EXTRA_TEXT, $EXTRA_MULTILINETEXT, $EXTRA_URL, $EXTRA_DATE,
+    $EXTRA_EMAIL, $EXTRA_USER, $EXTRA_REMINDER, $LANGUAGE, $LOG_REMINDER;
+  global $allow_external_users, $external_reminders;
+
+  $pri[1] = translate("Low");
+  $pri[2] = translate("Medium");
+  $pri[3] = translate("High");
+
+  // get participants first...
+ 
+  $sql = "SELECT cal_login FROM webcal_entry_user " .
+    "WHERE cal_id = $id AND cal_status IN ('A','W') " .
+    "ORDER BY cal_login";
+    print $sql ;
+  $res = dbi_query ( $sql );
+  $participants = array ();
+  $num_participants = 0;
+  if ( $res ) {
+    while ( $row = dbi_fetch_row ( $res ) ) {
+      $participants[$num_participants++] = $row[0];
+    }
+  }
+
+  // get external participants
+  $ext_participants = array ();
+  $num_ext_participants = 0;
+  if ( ! empty ( $allow_external_users ) && $allow_external_users == "Y" &&
+    ! empty ( $external_reminders ) && $external_reminders == "Y" ) {
+    $sql = "SELECT cal_fullname, cal_email FROM webcal_entry_ext_user " .
+      "WHERE cal_id = $id AND cal_email IS NOT NULL " .
+      "ORDER BY cal_fullname";
+    $res = dbi_query ( $sql );
+    if ( $res ) {
+      while ( $row = dbi_fetch_row ( $res ) ) {
+        $ext_participants[$num_ext_participants] = $row[0];
+        $ext_participants_email[$num_ext_participants++] = $row[1];
+      }
+    }
+  }
+
+  if ( ! $num_participants && ! $num_ext_participants ) {
+    if ( $debug )
+      echo "No participants found for event id: $id <br />\n";
+    return;
+  }
+
+
+  // get event details
+  $res = dbi_query (
+    "SELECT cal_create_by, cal_date, cal_time, cal_mod_date, " .
+    "cal_mod_time, cal_duration, cal_priority, cal_type, cal_access, " .
+    "cal_name, cal_description FROM webcal_entry WHERE cal_id = $id" );
+  if ( ! $res ) {
+    echo "Db error: could not find event id $id.\n";
+    return;
+  }
+
+
+  if ( ! ( $row = dbi_fetch_row ( $res ) ) ) {
+    echo "Error: could not find event id $id in database.\n";
+    return;
+  }
+
+  // send mail.  we send one user at a time so that we can switch
+  // languages between users if needed.
+  $mailusers = array ();
+  $recipients = array ();
+  if ( isset ( $single_user ) && $single_user == "Y" ) {
+    $mailusers[] = $emails[$single_user_login];
+    $recipients[] = $single_user_login;
+  } else {
+    for ( $i = 0; $i < count ( $participants ); $i++ ) {
+      if ( strlen ( $emails[$participants[$i]] ) ) {
+        $mailusers[] = $emails[$participants[$i]];
+        $recipients[] = $participants[$i];
+      } else {
+        if ( $debug )
+   echo "No email for user $participants[$i] <br />\n";
+      }
+    }
+    for ( $i = 0; $i < count ( $ext_participants ); $i++ ) {
+      $mailusers[] = $ext_participants_email[$i];
+      $recipients[] = $ext_participants[$i];
+    }
+  }
+  if ( $debug )
+    echo "Found " . count ( $mailusers ) . " with email addresses <br />\n";
+  for ( $j = 0; $j < count ( $mailusers ); $j++ ) {
+    $recip = $mailusers[$j];
+    $user = $participants[$j];
+    if ( ! empty ( $languages[$user] ) )
+      $userlang = $languages[$user];
+    else
+      $userlang = $LANGUAGE; // system default
+    if ( $userlang == "none" )
+      $userlang = "English-US"; // gotta pick something
+    if ( $debug )
+      echo "Setting language to \"$userlang\" <br />\n";
+    reset_language ( $userlang );
+    // reset timezone setting for current user
+    if ( empty ( $tzoffset[$user] ) )
+      $GLOBALS["TZ_OFFSET"] = 0;
+    else
+      $GLOBALS["TZ_OFFSET"] = $tzoffset[$user];
+
+    $body = translate("This is a reminder for the event detailed below.") .
+      "\n\n";
+
+    $create_by = $row[0];
+    $name = $row[9];
+    $description = $row[10];
+
+    // add trailing '/' if not found in server_url
+    if ( ! empty ( $server_url ) ) {
+      if ( substr ( $server_url, -1, 1 ) == "/" ) {
+        $body .= $server_url . "view_entry.php?id=" . $id . "\n\n";
+      } else {
+        $body .= $server_url . "/view_entry.php?id=" . $id . "\n\n";
+      }
+    }
+
+    $body .= strtoupper ( $name ) . "\n\n";
+    $body .= translate("Description") . ":\n";
+    $body .= indent ( $description ) . "\n";
+    $body .= translate("Date") . ": " . date_to_str ( $event_date ) . "\n";
+    if ( $row[2] >= 0 )
+      $body .= translate ("Time") . ": " . display_time ( $row[2] ) . "\n";
+    if ( $row[5] > 0 )
+      $body .= translate ("Duration") . ": " . $row[5] .
+        " " . translate("minutes") . "\n";
+    if ( ! empty ( $disable_priority_field ) && ! $disable_priority_field )
+      $body .= translate("Priority") . ": " . $pri[$row[6]] . "\n";
+    if ( ! empty ( $disable_access_field ) && ! $disable_access_field )
+      $body .= translate("Access") . ": " .
+        ( $row[8] == "P" ? translate("Public") : translate("Confidential") ) .
+        "\n";
+    if ( ! empty ( $single_user_login ) && $single_user_login == false )
+      $body .= translate("Created by") . ": " . $row[0] . "\n";
+    $body .= translate("Updated") . ": " . date_to_str ( $row[3] ) . " " .
+      display_time ( $row[4] ) . "\n";
+
+    // site extra fields
+    $extras = get_site_extra_fields ( $id );
+    for ( $i = 0; $i < count ( $site_extras ); $i++ ) {
+      $extra_name = $site_extras[$i][0];
+      $extra_descr = $site_extras[$i][1];
+      $extra_type = $site_extras[$i][2];
+      if ( $extras[$extra_name]['cal_name'] != "" ) {
+        $body .= translate ( $extra_descr ) . ": ";
+        if ( $extra_type == $EXTRA_DATE ) {
+          $body .= date_to_str ( $extras[$extra_name]['cal_date'] ) . "\n";
+        } else if ( $extra_type == $EXTRA_MULTILINETEXT ) {
+          $body .= "\n" . indent ( $extras[$extra_name]['cal_data'] ) . "\n";
+        } else if ( $extra_type == $EXTRA_REMINDER ) {
+          $body .= ( $extras[$extra_name]['cal_remind'] > 0 ?
+            translate("Yes") : translate("No") ) . "\n";
+        } else {
+          // default method for $EXTRA_URL, $EXTRA_TEXT, etc...
+          $body .= $extras[$extra_name]['cal_data'] . "\n";
+        }
+      }
+    }
+    if ( ! empty ( $single_user )  && $single_user != "Y" &&
+      ! empty ( $disable_participants_field ) &&  ! $disable_participants_field ) {
+      $body .= translate("Participants") . ":\n";
+      for ( $i = 0; $i < count ( $participants ); $i++ ) {
+        $body .= "  " . $names[$participants[$i]] . "\n";
+      }
+      for ( $i = 0; $i < count ( $ext_participants ); $i++ ) {
+        $body .= "  " . $ext_participants[$i] . " (" .
+          translate("External User") . ")\n";
+      }
+    }
+  
+    $subject = translate("Reminder") . ": " . $name;
+
+    if ( strlen ( $GLOBALS["email_fallback_from"] ) )
+      $extra_hdrs = "From: " . $GLOBALS["email_fallback_from"] . "\r\n" .
+        "X-Mailer: " . translate($application_name);
+    else
+      $extra_hdrs = "X-Mailer: " . translate($application_name);
+  
+    if ( $debug )
+      echo "Sending mail to $recip (in $userlang)\n";
+    if ( $only_testing ) {
+      if ( $debug )
+        echo "<hr /><pre>To: $recip\nSubject: $subject\n$extra_hdrs\n\n$body\n\n</pre>\n";
+    } else {
+    	print $recip." ".$subject ;
+      mail ( $recip, $subject, utf8_decode($body), $extra_hdrs );
+      activity_log ( $id, "system", $user, $LOG_REMINDER, "" );
+    }
+  }
+}
+
+
+// keep track of the fact that we send the reminder, so we don't
+// do it again.
+function log_reminder ( $id, $name, $event_date ) {
+  global $only_testing;
+
+  if ( ! $only_testing ) {
+    dbi_query ( "DELETE FROM webcal_reminder_log " .
+      "WHERE cal_id = $id AND cal_name = '$name' " .
+      "AND cal_event_date = $event_date" );
+    dbi_query ( "INSERT INTO webcal_reminder_log " .
+      "( cal_id, cal_name, cal_event_date, cal_last_sent ) VALUES ( " .
+      "$id, '" . $name . "', $event_date, " . time() . ")" );
+  }
+}
+
+
+// Process an event for a single day.  Check to see if it has
+// a reminder, when it needs to be sent and when the last time it
+// was sent.
+function process_event ( $id, $name, $event_date, $event_time ) {
+  global $site_extras, $debug, $only_testing;
+  global $EXTRA_REMINDER_WITH_OFFSET, $EXTRA_REMINDER_WITH_DATE ;
+  if ( $debug )
+    printf ( "Event %d: \"%s\" at %s on %s <br />\n",
+      $id, $name, $event_time, $event_date );
+
+  // Check to see if this event has any reminders
+  $extras = get_site_extra_fields ( $id );
+  for ( $j = 0; $j < count ( $site_extras ); $j++ ) {
+    $extra_name = $site_extras[$j][0];
+    $extra_type = $site_extras[$j][2];
+    $extra_arg1 = $site_extras[$j][3];
+    $extra_arg2 = $site_extras[$j][4];
+   // $debug = 1 ;
+    var_dump($extras);
+    if ( $debug )
+      printf ( "  name: %s\n  type: %d\n  arg1: %s\n  arg2: %s\n",
+      $extra_name, $extra_type, $extra_arg1, $extra_arg2 );
+    if ( ! empty ( $extras[$extra_name]['cal_remind'] ) ) {
+    	
+      if ( $debug )
+        echo "  Reminder set for event. <br />\n";
+      // how many minutes before event should we send the reminder?
+      $ev_h = (int) ( $event_time / 10000 );
+      $ev_m = ( $event_time / 100 ) % 100;
+      $ev_year = substr ( $event_date, 0, 4 );
+      $ev_month = substr ( $event_date, 4, 2 );
+      $ev_day = substr ( $event_date, 6, 2 );
+      $event_time = mktime ( $ev_h, $ev_m, 0, $ev_month, $ev_day, $ev_year );
+      if ( ( $extra_arg2 & $EXTRA_REMINDER_WITH_OFFSET ) > 0 ) {
+        $minsbefore = $extras[$extra_name]['cal_data'];
+        $remind_time = $event_time - ( $minsbefore * 60 );
+      } else if ( ( $extra_arg2 & $EXTRA_REMINDER_WITH_DATE ) > 0 ) {
+        $rd = $extras[$extra_name]['cal_date'];
+        $r_year = substr ( $rd, 0, 4 );
+        $r_month = substr ( $rd, 4, 2 );
+        $r_day = substr ( $rd, 6, 2 );
+        $remind_time = mktime ( 0, 0, 0, $r_month, $r_day, $r_year );
+      } else {
+        $minsbefore = $extra_arg1;
+        $remind_time = $event_time - ( $minsbefore * 60 );
+      }
+      if ( $debug )
+        echo "  Mins Before: $minsbefore <br />\n";
+      if ( $debug ) {
+        echo "  Event time is: " . date ( "m/d/Y H:i", $event_time ) . "<br />\n";
+        echo "  Remind time is: " . date ( "m/d/Y H:i", $remind_time ) . "<br />\n";
+      }
+      if ( time() >= $remind_time ) {
+        // It's remind time or later. See if one has already been sent
+        $last_sent = 0;
+        $res = dbi_query ( "SELECT MAX(cal_last_sent) FROM " .
+          "webcal_reminder_log WHERE cal_id = " . $id .
+          " AND cal_event_date = $event_date" .
+          " AND cal_name = '" . $extra_name . "'" );
+        if ( $res ) {
+          if ( $row = dbi_fetch_row ( $res ) ) {
+            $last_sent = $row[0];
+          }
+          dbi_free_result ( $res );
+        }
+        if ( $debug )
+          echo "  Last sent on: " . date ( "m/d/Y H:i", $last_sent ) . "<br />\n";
+        if ( $last_sent < $remind_time ) {
+          // Send a reminder
+          if ( $debug )
+            echo "  SENDING REMINDER! <br />\n";
+            print "cool";
+          send_reminder ( $id, $event_date );
+          // now update the db...
+          log_reminder ( $id, $extra_name, $event_date );
+        }
+      }
+    }
+  }
+}
+
+
+$startdate = time(); // today
+for ( $d = 0; $d < $DAYS_IN_ADVANCE; $d++ ) {
+  $date = date ( "Ymd", time() + ( $d * 24 * 3600 ) );
+  //echo "Date: $date\n";
+  // Get non-repeating events for this date.
+  // An event will be included one time for each participant.
+  $ev = get_entries ( "", $date );
+  // Keep track of duplicates
+  $completed_ids = array ( );
+  for ( $i = 0; $i < count ( $ev ); $i++ ) {
+    $id = $ev[$i]['cal_id'];
+    if ( ! empty ( $completed_ids[$id] ) )
+      continue;
+    $completed_ids[$id] = 1;
+    process_event ( $id, $ev[$i]['cal_name'], $date, $ev[$i]['cal_time'] );
+  }
+  $rep = get_repeating_entries ( "", $date );
+  for ( $i = 0; $i < count ( $rep ); $i++ ) {
+    $id = $rep[$i]['cal_id'];
+    if ( ! empty ( $completed_ids[$id] ) )
+      continue;
+    $completed_ids[$id] = 1;
+    process_event ( $id, $rep[$i]['cal_name'], $date, $rep[$i]['cal_time'] );
+  }
+}
+
+if ( $debug )
+  echo "Done.<br />\n";
+
+?>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/tools/summary.txt
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/tools/summary.txt	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/tools/summary.txt	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,33 @@
+Language file        No. missing translations
+Basque.txt:          260 (61.0% complete)
+Bulgarian.txt:       114 (82.9% complete)
+Catalan.txt:         76 (88.6% complete)
+Chinese-Big5.txt:    422 (36.7% complete)
+Chinese-GB2312.txt:  194 (70.9% complete)
+Czech.txt:           16 (97.6% complete)
+Danish.txt:          10 (98.5% complete)
+Dutch.txt:           7 (99.0% complete)
+English-US.txt:      Complete
+Estonian.txt:        207 (69.0% complete)
+Finnish.txt:         72 (89.2% complete)
+French.txt:          83 (87.6% complete)
+Galician.txt:        399 (40.2% complete)
+German.txt:          5 (99.3% complete)
+Holo-Big5.txt:       349 (47.7% complete)
+Hungarian.txt:       38 (94.3% complete)
+Icelandic.txt:       457 (31.5% complete)
+Italian.txt:         20 (97.0% complete)
+Japanese-eucjp.txt:  75 (88.8% complete)
+Japanese-utf8.txt:   75 (88.8% complete)
+Japanese.txt:        75 (88.8% complete)
+Korean.txt:          495 (25.8% complete)
+Norwegian.txt:       6 (99.1% complete)
+Polish.txt:          127 (81.0% complete)
+Portuguese.txt:      119 (82.2% complete)
+Portuguese_BR.txt:   146 (78.1% complete)
+Romanian.txt:        19 (97.2% complete)
+Russian.txt:         456 (31.6% complete)
+Spanish.txt:         16 (97.6% complete)
+Swedish.txt:         38 (94.3% complete)
+Turkish.txt:         464 (30.4% complete)
+Welsh.txt:           249 (62.7% complete)

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/tools/translation_summary.pl
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/tools/translation_summary.pl	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/tools/translation_summary.pl	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,36 @@
+#!/usr/bin/perl
+#
+# Examine all translation files to create a report that shows how
+# many translations are missing from each translation file.
+#
+#######################################################################
+
+$inc_dir = "../includes";
+
+$transdir = "../translations";
+
+opendir ( DIR, $transdir ) || die "Error opening $transdir: $!";
+ at files = sort readdir ( DIR );
+closedir ( DIR );
+
+# ignore everything except .txt files
+ at files = grep ( /.txt$/, @files );
+
+# header
+printf "%-20s %s\n", "Language file", "No. missing translations";
+
+foreach $f ( @files ) {
+  $out = `perl check_translation.pl ../translations/$f`;
+  if ( $out =~ / missing./ ) {
+    # missing some translations
+    @lines = split ( /\n/, $out );
+    ( $l ) = grep ( / translation.s. missing/, @lines );
+    if ( $l =~ /^(\d+).*\((\d\S+)% complete/ ) {
+      printf "%-20s %d (%1.1f%% complete)\n", $f . ":", $1, $2;
+    }
+  } else {
+    # all translations found :-)
+    printf "%-20s %s\n", $f . ":", "Complete";
+  }
+}
+

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/tools/update_all.pl
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/tools/update_all.pl	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/tools/update_all.pl	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,22 @@
+#!/usr/bin/perl
+#
+# Update each translation file using update_translation.pl.
+#
+#######################################################################
+
+$transdir = "../translations";
+
+opendir ( DIR, $transdir ) || die "Error opening $transdir: $!";
+ at files = readdir ( DIR );
+closedir ( DIR );
+
+# ignore everything except .txt files
+ at files = grep ( /.txt$/, @files );
+
+foreach $f ( @files ) {
+  print "update_translation.pl $f\n";
+  print `perl update_translation.pl $f`;
+}
+print "Done.\n";
+exit 0;
+

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/tools/update_translation.pl
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/tools/update_translation.pl	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/tools/update_translation.pl	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,290 @@
+#!/usr/bin/perl
+#
+# This tool will update a translation file by doing the following:
+# - Insert an empty translation when a missing translation is found.
+#   The translation will have "<< MISSING >>" right above it to
+#   make it easy to find.
+# - Show the English translation (in a comment) before a missing translation,
+#   making it easier to add the translation.
+# - Translations will be reorganized so that they are divided up into
+#   the pages that they appear on.
+#
+# Note: you will lose any comments you put in the translation file
+# when using this tool (except for the comments at the very beginning).
+#
+# Note #2: This will overwrite the existing translation file, so a save
+# backup of the translation will be saved with a .bak file extension.
+#
+# Usage:
+#	update_translation.pl [-p plugin] languagefile
+#
+# Example for main WebCalendar translation:
+#	update_translation.pl French.txt
+#	   or
+#	update_translation.pl French
+#
+# Example for plugin "tnn" translation:
+#	update_translation.pl -p tnn French.txt
+#	   or
+#	update_translation.pl -p tnn French
+#
+# Note: this utility should be run from this directory (tools).
+#
+###########################################################################
+
+$base_dir = "..";
+$trans_dir = "../translations";
+
+$base_trans_file = "$trans_dir/English-US.txt";
+$plugin = "";
+
+$show_missing = 1; # set to 0 to minimize translation file.
+$show_dups = 0; # set to 0 to minimize translation file.
+$verbose = 0;
+
+( $this ) = reverse split ( /\//, $0 );
+
+$save_backup = 0;
+
+for ( $i = 0; $i < @ARGV; $i++ ) {
+  if ( $ARGV[$i] eq "-p" ) {
+    $plugin = $ARGV[++$i];
+  } elsif ( $ARGV[$i] eq "-v" ) {
+    $verbose++;
+  } else {
+    $infile = $ARGV[$i];
+  }
+}
+
+die "Usage: $this [-p plugin] language\n" if ( $infile eq "" );
+
+if ( $plugin ne "" ) {
+  $p_trans_dir = "$base_dir/$plugin/translations";
+  $p_base_trans_file = "$p_trans_dir/English-US.txt";
+  $p_base_dir = "$base_dir/$plugin";
+} else {
+  $p_trans_dir = $trans_dir;
+  $p_base_trans_file = $base_trans_file;
+  $p_base_dir = $base_dir;
+}
+
+if ( $infile !~ /txt$/ ) {
+  $infile .= ".txt";
+}
+if ( -f "$trans_dir/$infile" || -f "$p_trans_dir/$infile" ) {
+  $b_infile = "$trans_dir/$infile";
+  $infile = "$p_trans_dir/$infile";
+}
+#print "infile: $infile\nb_infile: $b_infile\ntrans_dir: $trans_dir\n";
+
+die "Usage: $this [-p plugin] language\n" if ( ! -f $infile );
+
+print "Translation file: $infile\n" if ( $verbose );
+
+# Now load the base translation(s) file (English), so that we can include
+# the English translation text above a missing translation in a comment.
+open ( F, $base_trans_file ) || die "Error opening $base_trans_file";
+print "Reading base translation file: $base_trans_file\n" if ( $verbose );
+while ( <F> ) {
+  chop;
+  s/\r*$//g; # remove annoying CR
+  next if ( /^#/ );
+  if ( /\s*:\s*/ ) {
+    $abbrev = $`;
+    $base_trans{$abbrev} = $' if ( $abbrev ne 'charset' );
+  }
+}
+close ( F );
+# read in the plugin base translation file
+if ( $plugin ne "" ) {
+  print "Reading plugin base translation file: $p_base_trans_file\n" if ( $verbose );
+  open ( F, $p_base_trans_file ) || die "Error opening $p_base_trans_file";
+  while ( <F> ) {
+    chop;
+    s/\r*$//g; # remove annoying CR
+    next if ( /^#/ );
+    if ( /\s*:\s*/ ) {
+      $abbrev = $`;
+      $base_trans{$abbrev} = $';
+    }
+  }
+  close ( F );
+}
+
+
+#
+# Now load the translation file we are going to update.
+#
+$old = "";
+if ( -f $infile ) {
+  print "Reading current translations from $infile\n" if ( $verbose );
+  open ( F, $infile ) || die "Error opening $infile";
+  $in_header = 1;
+  while ( <F> ) {
+    $old .= $_;
+    chop;
+    s/\r*$//g; # remove annoying CR
+    if ( $in_header && /^#/ ) {
+      if ( /Translation last (pagified|updated)/ ) {
+	# ignore since we will replace this with current date below
+      } else {
+        $header .= $_ . "\n";
+      }
+    }
+    next if ( /^#/ );
+    $in_header = 0;
+    if ( /\s*:\s*/ ) {
+      $abbrev = $`;
+      $trans{$abbrev} = $';
+    }
+  }
+}
+if ( $plugin ne "" ) {
+  print "Reading current WebCalendar translations from $b_infile\n" if ( $verbose );
+  open ( F, $b_infile ) || die "Error opening $b_infile";
+  $in_header = 1;
+  while ( <F> ) {
+    chop;
+    s/\r*$//g; # remove annoying CR
+    if ( /\s*:\s*/ ) {
+      $abbrev = $`;
+      $webcaltrans{$abbrev} = $';
+    }
+  }
+}
+
+#
+# Save a backup copy of old translation file.
+#
+if ( $save_backup ) {
+  open ( F, ">$infile.bak" ) || die "Error writing $infile.bak";
+  print F $old;
+  close ( F );
+  print "Backup of translation saved in $infile.bak\n";
+}
+
+
+if ( $header !~ /Translation last updated/ ) {
+  ( $day, $mon, $year ) = ( localtime ( time() ) )[3,4,5];
+  $header .= "# Translation last updated on " .
+    sprintf ( "%02d-%02d-%04d", $mon + 1, $day, $year + 1900 ) . "\n";
+}
+
+# First get the list of .php files
+print "Searching for PHP files in $p_base_dir\n" if ( $verbose );
+opendir ( DIR, $p_base_dir ) || die "Error opening $p_base_dir";
+ at files = grep ( /\.php$/, readdir ( DIR ) );
+closedir ( DIR );
+
+if ( -d "$p_base_dir/includes" ) {
+  print "Searching for PHP files in $p_base_dir/includes\n" if ( $verbose );
+  opendir ( DIR, "$p_base_dir/includes" ) ||
+    die "Error opening $p_base_dir/includes";
+  @incfiles = grep ( /\.php$/, readdir ( DIR ) );
+  closedir ( DIR );
+  foreach $f ( @incfiles ) {
+    push ( @files, "includes/$f" );
+  }
+}
+if ( -d "$p_base_dir/includes/js" ) {
+  print "Searching for PHP files in $p_base_dir/includes/js\n" if ( $verbose );
+  opendir ( DIR, "$p_base_dir/includes/js" ) ||
+    die "Error opening $p_base_dir/includes/js";
+  @incfiles = grep ( /\.php$/, readdir ( DIR ) );
+  closedir ( DIR );
+  foreach $f ( @incfiles ) {
+    push ( @files, "includes/js/$f" );
+  }
+}
+if ( $plugin eq "" ) {
+  push ( @files, "tools/send_reminders.php" );
+}
+
+#
+# Write new translation file.
+#
+$notfound = 0;
+open ( OUT, ">$infile" ) || die "Error writing $infile: ";
+print OUT $header;
+if ( $plugin eq '' ) {
+  if ( defined ( $trans{'charset'} ) ) {
+    print OUT 
+      "\n\n###############################################\n" .
+      "# Specify a charset (will be sent within meta tag for each page)\n#\n" .
+      "charset: $trans{'charset'}\n\n";
+    $text{'charset'} = 1;
+    $foundin{'charset'} = " top of this file";
+  } else {
+    print OUT "\n# No charset specified (not needed for iso-8859-1)\n" .
+      "# \"charset\" is used in a meta tag, " .
+      "do not translate \"charset\" here.\n" .
+      "# charset:\n\n";
+  }
+}
+
+foreach $f ( @files ) {
+  $pageHeader = "\n\n###############################################\n# Page: $f\n#\n";
+  $file = "$p_base_dir/$f";
+  open ( F, $file ) || die "Error reading $file";
+  print "Searching $f\n" if ( $verbose );
+  %thispage = ();
+  while ( <F> ) {
+    $data = $_;
+    while ( $data =~ /(translate|tooltip)\s*\(\s*"/ ) {
+      $data = $';
+      if ( $data =~ /"\s*\)/ ) {
+        $text = $`;
+	if ( defined ( $thispage{$text} ) ) {
+          # text already found within this page...
+	} elsif ( $text eq 'charset' ) {
+          # ignore...
+	} elsif ( defined ( $text{$text} ) ) {
+          if ( ! show_dups ) {
+            if ( $pageHeader ne '' ) {
+              print OUT $pageHeader; $pageHeader = '';
+            }
+            print OUT "# \"$text\" previously defined (in $foundin{$text})\n"
+          }
+	  $thispage{$text} = 1;
+	} else {
+          if ( ! length ( $trans{$text} ) ) {
+            if ( $show_missing ) {
+              if ( length ( $webcaltrans{$text} ) ) {
+                if ( $pageHeader ne '' ) { print OUT $pageHeader; $pageHeader = ''; }
+                print OUT "# \"$text\" defined in WebCalendar translation\n";
+              } else {
+                if ( $pageHeader ne '' ) { print OUT $pageHeader; $pageHeader = ''; }
+                print OUT "#\n# << MISSING >>\n# $text:\n";
+                print OUT "# English text: $base_trans{$text}\n#\n"
+                  if ( length ( $base_trans{$text} ) &&
+                    $base_trans{$text} ne $text );
+              }
+            }
+            $text{$text} = 1;
+	    $thispage{$text} = 1;
+	    $foundin{$text} = $f;
+            $notfound++ if ( ! length ( $webcaltrans{$text} ) );
+	  } else {
+            $text{$text} = 1;
+	    $foundin{$text} = $f;
+	    $thispage{$text} = 1;
+            if ( $pageHeader ne '' ) {
+              print OUT $pageHeader; $pageHeader = '';
+            }
+            printf OUT ( "%s: %s\n", $text, $trans{$text} );
+	  }
+        }
+        $data = $';
+      }
+    }
+  }
+  close ( F );
+}
+
+if ( ! $notfound ) {
+  print STDERR "All text was found in $infile.  Good job :-)\n";
+} else {
+  print STDERR "$notfound translation(s) missing.\n";
+}
+
+exit 0;

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/tools/upgrade_to_0.9.7.pl
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/tools/upgrade_to_0.9.7.pl	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/tools/upgrade_to_0.9.7.pl	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,220 @@
+#!/usr/bin/perl
+#
+# This script will update a pre-0.9.7 WebCalendar database to have the
+# correct tables for 0.9.7.
+# (FYI, these changes were necessary to add support for other databases
+# like Oracle.)
+#
+
+
+$mysql_path = "/usr/local/mysql/bin:/opt/mysql/bin";
+$dbname = "intranet";
+$tables = "cal_entry cal_entry_user cal_user cal_user_pref";
+$out = "commands.sql";
+
+# look for the mysql executable and mysqldump programs
+sub find_executable {
+  my ( $app ) = @_;
+  my ( $path, $dir, $file, @dirs );
+
+  my ( $path ) = $ENV{"PATH"} . ":" . $mysql_path;
+  @dirs = split ( /:/, $path );
+  foreach $dir ( @dirs ) {
+    $file = "$dir/$app";
+    return $file if ( -x $file );
+  }
+
+  die "Could not find $app executable in:\n$path\n";
+}
+
+
+sub string_or_null {
+  my ( $in ) = @_;
+  my ( $ret );
+
+  if ( $in eq "\\N" || length ( $in ) == 0 ) {
+    $ret = "NULL";
+  } else {
+    $in =~ s/'/\\'/g;
+    $ret = "\'$in\'";
+  }
+  return $ret;
+}
+
+sub num_or_zero {
+  my ( $in ) = @_;
+  return "NULL" if ( $in eq "\\N" );
+  return "0" if ( $in eq "" );
+  return $in;
+}
+
+sub date_to_int {
+  my ( $in ) = @_;
+  my ( $ret );
+  if ( $in =~ /(\d\d\d\d)-(\d\d)-(\d\d)/ ) {
+    $ret = sprintf "%04d%02d%02d", $1, $2, $3;
+  } else {
+    $ret = "NULL";
+  }
+  #print STDERR "Date \"$in\" -> $ret\n";
+  return $ret;
+}
+
+
+sub time_to_int {
+  my ( $in ) = @_;
+  my ( $ret );
+  if ( $in =~ /(\d\d):(\d\d):(\d\d)/ ) {
+    $ret = sprintf "%02d%02d%02d", $1, $2, $3;
+  } else {
+    $ret = "NULL";
+  }
+  #print STDERR "Time \"$in\" -> $ret\n";
+  return $ret;
+}
+
+
+$mysql = &find_executable ( "mysql" );
+$mysqldump = &find_executable ( "mysqldump" );
+
+print "mysql found: $mysql\n";
+print "mysqldump found: $mysqldump\n";
+
+# Get a current dump of the db
+$dir = "./data";
+mkdir ( $dir, 0755 ) if ( ! -d $dir );
+$cmd = "$mysqldump --no-create-info -T $dir $dbname $tables";
+print "Command: $cmd\n";
+system ( $cmd );
+
+# use datafiles to create a series of SQL Insert commands
+
+open ( OUT, ">$out" ) ||
+  die "Error writing output file: $!\n";
+print OUT<<EOF;
+#DROP TABLE webcal_user;
+CREATE TABLE webcal_user (
+  cal_login VARCHAR(25) NOT NULL,
+  cal_passwd VARCHAR(25),
+  cal_lastname VARCHAR(25),
+  cal_firstname VARCHAR(25),
+  cal_is_admin CHAR(1) DEFAULT 'N',
+  cal_email VARCHAR(75) NULL,
+  PRIMARY KEY ( cal_login )
+);
+#DROP TABLE webcal_entry;
+CREATE TABLE webcal_entry (
+  cal_id INT NOT NULL,
+  cal_group_id INT NULL,
+  cal_create_by VARCHAR(25) NOT NULL,
+  cal_date INT NOT NULL,
+  cal_time INT NULL,
+  cal_mod_date INT,
+  cal_mod_time INT,
+  cal_duration INT NOT NULL,
+  cal_priority INT DEFAULT 2,
+  cal_type CHAR(1) DEFAULT 'E',
+  cal_access CHAR(1) DEFAULT 'P',
+  cal_name VARCHAR(80) NOT NULL,
+  cal_description TEXT,
+  PRIMARY KEY ( cal_id )
+);
+#DROP TABLE webcal_entry_user;
+CREATE TABLE webcal_entry_user (
+  cal_id int(11) DEFAULT '0' NOT NULL,
+  cal_login varchar(25) DEFAULT '' NOT NULL,
+  cal_status char(1) DEFAULT 'A',
+  PRIMARY KEY (cal_id,cal_login)
+);
+#DROP TABLE webcal_user_pref;
+CREATE TABLE webcal_user_pref (
+  cal_login varchar(25) NOT NULL,
+  cal_setting varchar(25) NOT NULL,
+  cal_value varchar(50) NULL,
+  PRIMARY KEY ( cal_login, cal_setting )
+);
+EOF
+
+open ( IN, "$dir/cal_user.txt" );
+print OUT "\n\n\n";
+while ( <IN> ) {
+  chop;
+  @fields = split /\t/;
+  print OUT "INSERT INTO webcal_user ( cal_login, cal_passwd, cal_lastname,\n" .
+   "cal_firstname, cal_is_admin )\n  VALUES ( ";
+  print OUT &string_or_null ( $fields[0] ) . ", ";
+  print OUT &string_or_null ( $fields[1] ) . ", ";
+  print OUT &string_or_null ( $fields[2] ) . ", ";
+  print OUT &string_or_null ( $fields[3] ) . ", ";
+  print OUT &string_or_null ( $fields[4] ) . " );\n";
+}
+close ( IN );
+
+open ( IN, "$dir/cal_entry.txt" );
+print OUT "\n\n\n";
+while ( <IN> ) {
+  chop;
+  while ( /\\$/ ) {
+    s/[\\\r\n]+$//g;
+    chop ( $nextline = <IN> );
+    $nextline =~ s/[\\\r\n]+$//g;
+    $_ .= "\\n" . $nextline;
+  }
+  @fields = split /\t/;
+  $i = 0;
+  print OUT "\nINSERT INTO webcal_entry\n" .
+   "  ( cal_id, cal_group_id, cal_create_by,\n" .
+   "  cal_date, cal_time, cal_mod_date, cal_mod_time, cal_duration,\n" .
+   "  cal_priority, cal_type, cal_access, cal_name,\n" .
+   "  cal_description )\n  VALUES (\n  ";
+  print OUT &num_or_zero ( $fields[$i++] ) . ", ";	#cal_id
+  print OUT "NULL, ";					#cal_group_id
+  print OUT &string_or_null ( $fields[$i++] ) . ", ";	#cal_create_by
+  print OUT &date_to_int ( $fields[$i++] ) . ", ";	#cal_date
+  print OUT &time_to_int ( $fields[$i++] ) . ", ";	#cal_time
+  print OUT &date_to_int ( $fields[$i] ) . ", ";	#cal_mod_date
+  print OUT &time_to_int ( $fields[$i++] ) . ", ";	#cal_mod_time
+  print OUT &num_or_zero ( $fields[$i++] ) . ", ";	#cal_duration
+  print OUT &string_or_null ( $fields[$i++] ) . ", ";	#cal_priority
+  print OUT &string_or_null ( $fields[$i++] ) . ", ";	#cal_type
+  print OUT &string_or_null ( $fields[$i++] ) . ", ";	#cal_access
+  $i++; # skip over status since it was never used
+  print OUT &string_or_null ( $fields[$i++] ) . ", ";	#cal_name
+  print OUT &string_or_null ( $fields[$i++] ) . ");\n";	#cal_description
+}
+close ( IN );
+
+open ( IN, "$dir/cal_entry_user.txt" );
+print OUT "\n\n\n";
+while ( <IN> ) {
+  chop;
+  @fields = split /\t/;
+  print OUT "INSERT INTO webcal_entry_user\n" .
+   "( cal_id, cal_login, cal_status )\n" .
+   "VALUES ( ";
+  $i = 0;
+  print OUT &num_or_zero ( $fields[$i++] ) . ", ";
+  print OUT &string_or_null ( $fields[$i++] ) . ", ";
+  print OUT &string_or_null ( $fields[$i++] ) . " );\n";
+}
+close ( IN );
+
+
+open ( IN, "$dir/cal_user_pref.txt" );
+print OUT "\n\n\n";
+while ( <IN> ) {
+  chop;
+  @fields = split /\t/;
+  print OUT "INSERT INTO webcal_user_pref\n" .
+   "( cal_login, cal_setting, cal_value )\n" .
+   "VALUES ( ";
+  $i = 0;
+  print OUT &string_or_null ( $fields[$i++] ) . ", ";
+  print OUT &string_or_null ( $fields[$i++] ) . ", ";
+  print OUT &string_or_null ( $fields[$i++] ) . " );\n";
+}
+close ( IN );
+
+close ( OUT );
+
+exit 0;

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Basque.txt
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Basque.txt	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Basque.txt	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,1479 @@
+#
+# FitBak ( http://www.fitbak.com ) -ek itzulia
+#
+# Translation last updated on 03-10-2004
+
+
+###############################################
+# Specify a charset (will be sent within meta tag for each page)
+#
+charset: iso-8859-1
+
+
+
+###############################################
+# Page: admin.php
+#
+System Settings: Sistemaren aukerak
+You are not authorized: Ez zaude baimenduta
+Note: Oharra
+Your user preferences: Zure lehenetsiak
+may be affecting the appearance of this page.: orri honen itxura aldaeraz dezake
+Click here: Hemen sakatu
+to not use your user preferences when viewing this page: zure lehenetsiak ez erabiltzeko orri hau ikustean
+#
+# << MISSING >>
+# are being ignored while viewing this page.:
+to load your user preferences when viewing this page: zure lehenetsiak erabiltzeko orri hau ikustean
+Save: Gorde
+Help: Laguntza
+Settings: Aukerak
+app-name-help: Izenburuan azalduko den testua adierazten du
+Application Name: Aplikazioaren izena
+server-url-help: Aplikazioaren oinarri URL-a adierazten du 
+Server URL: Zerbitzariaren URL-a
+language-help: Erabili beharreko hizkuntza adierazten du.
+Language: Hizkuntza
+Your browser default language is: Zure nabigatzailearen hizkuntza lehenetsia da
+fonts-help: Erabili beharreko tipografiak adierazten ditu ( Arial, Helvetica ...)
+Fonts: Tipografiak
+#
+# << MISSING >>
+# custom-script-help:
+# English text: Allows entry of custom Javascript or stylesheet text that will be inserted into the HTML "head" section of every page.
+#
+#
+# << MISSING >>
+# Custom script/stylesheet:
+Yes: Bai
+No: Ez
+#
+# << MISSING >>
+# Edit:
+#
+# << MISSING >>
+# custom-header-help:
+# English text: Allows a custom HTML snippet to be included in the top of every page.
+#
+#
+# << MISSING >>
+# Custom header:
+#
+# << MISSING >>
+# custom-trailer-help:
+# English text: Allows a custom HTML snippet to be included at the end of every page.
+#
+#
+# << MISSING >>
+# Custom trailer:
+preferred-view-help: Lehenetsitako ikus aukera (Eguna, Astea, Hilabetea, Urtea)
+Preferred view: Lehenetsitako ikus aukera
+Day: Eguna
+Week: Astea
+Month: Hilabetea
+Year: Urtea
+display-weekends-help: Astebukaerak erakusten ditu asteroko ikus aukeran
+Display weekends in week view: Astebukaerak erakusten ditu hilabeteroko ikus aukeran
+#
+# << MISSING >>
+# yearly-shows-events-help:
+# English text: On the yearly view, display days that contain events in a bold font.
+#
+#
+# << MISSING >>
+# Display days with events in bold in year view:
+#
+# << MISSING >>
+# display-desc-print-day-help:
+# English text: Include event descriptions in printer-friendly version of day view.
+#
+#
+# << MISSING >>
+# Display description in printer day view:
+date-format-help: Dataren formatua adierazten du
+Date format: Data formatua
+December: Abendua
+time-format-help: Erabiliko den ordu formatua adierazten du, 12 ordu edo 24 ordu 
+Time format: Ordu formatua
+12 hour: 12 ordukoa
+24 hour: 24 ordukoa
+time-interval-help: Ikus aukeretan erabiliko den denbora zati minimoa adierazten du
+Time interval: Denbora zatia
+hour: Ordua
+minutes: Minutuak
+auto-refresh-help: Egutegiaren edukiak automakiko eguneratzeko
+Auto-refresh calendars: Egutegia automatikoki eguneratu
+auto-refresh-time-help: Aktibatu ez gero, eguneraketa zenbatero egingo den
+Auto-refresh time: Eguneratze automatiko denbora
+require-approvals-help: Aktibatu ez gero, onespena behar da.
+Require event approvals: Gertaeraren onespena eskatu
+display-unapproved-help: Onetsi gabeko gertaerak erakutsiko diren adierazten du.
+Display unapproved: Onespengabekoak erakutsi
+display-week-number-help: Asteari dagokion zenbakia erakutsiko den adierazten du
+Display week number: Aste zenbakia erakutsi
+display-week-starts-on: Astea Igande edo Astelehenean asten den adierazteko
+Week starts on: Astea hasten da
+Sunday: Igandea
+Monday: Astelehena
+work-hours-help: Egutegi bakoitzean erakutsi beharreko orduak adierazten ditu.
+Work hours: Lan orduak
+From: Nork
+to: Nori
+disable-priority-field-help: Lehentasun eremua azaldu ala ez
+Disable Priority field: Desgaitu lehentasun eremua
+disable-access-field-help: Atzipen informazioa azaldu ala ez
+Disable Access field: Desgaitu atzipen eremua
+disable-participants-field-help: Partaide eremua azaldu ala ez
+Disable Participants field: Desgaitu partaide eremua
+disable-repeating-field-help: Gertaera errepikatuak kentzea ekidin ala ez
+Disable Repeating field: Desgaitu errepikapen ezabatzea
+#
+# << MISSING >>
+# popup-includes-siteextras-help:
+# English text: If enabled, allow custom event fields setup in the site_extras.php file will be displayed in event popups.
+#
+#
+# << MISSING >>
+# Display Site Extras in popup:
+#
+# << MISSING >>
+# allow-html-description-help:
+# English text: If enabled, users can enter HTML in the event description field.  If not enabled, the HTML tags will be escaped so as to appear as plain text.  Warning: Enabling this feature will allow users to reference images on other websites.
+#
+#
+# << MISSING >>
+# Allow HTML in Description:
+allow-view-other-help: Beste erabiltzaileen egutegia ikusi daiteken ala ez adierazten du
+Allow viewing other user's calendars: Beste erabiltzaileen egutegiak ikustea baimendu
+allow-public-access-help: Egutegiak atzipen publikoa izan dezaken edo ez adierazten du.
+Allow public access: Atzipen publikoa baimendu
+public-access-view-others-help: Beste erabiltzaile batzuen egutegiak ikus daitezken adierazten du
+Public access can view other users: Beste erabiltzaileen gertaerak ikus daitezke
+public-access-can-add-help: Aukeratuz gero erabiltzaile publikoak gertaerak gehi ditzazke
+Public access can add events: Erabiltzaile publikoak gertaerak gehi ditzazke
+#
+# << MISSING >>
+# public-access-add-requires-approval-help:
+# English text: Specifies whether events added via the public access account require approval before being displayed.
+#
+#
+# << MISSING >>
+# Public access new events require approval:
+#
+# << MISSING >>
+# public-access-sees-participants-help:
+# English text: If enabled, users accessing the calendar from the public account will be able to see event participants if they view details of an event.
+#
+#
+# << MISSING >>
+# Public access can view participants:
+#
+# << MISSING >>
+# allow-view-add-help:
+# English text: A '+' icon will be included in views, allowing users to quickly add events to other users' calendars.
+#
+#
+# << MISSING >>
+# Include add event link in views:
+#
+# << MISSING >>
+# allow-external-users-help:
+# English text: Specifies whether a non-calendar user can be added to an event.  This allows non-calendar users to be listed as event participants.
+#
+#
+# << MISSING >>
+# Allow external users:
+#
+# << MISSING >>
+# external-can-receive-notification-help:
+# English text: When external users are enabled and email usage is enabled, external users can receive email notifications when the event is added, updated or delete (if the external user's email address is provided).
+#
+#
+# << MISSING >>
+# External users can receive email notifications:
+#
+# << MISSING >>
+# external-can-receive-reminder-help:
+# English text: When external users are enabled and email usage is enabled, external users can receive email reminders (if the external user's email address is provided).
+#
+#
+# << MISSING >>
+# External users can receive email reminders:
+remember-last-login-help: Aukeratzen bada azken login informazioa gogoratuko du
+Remember last login: Login informazioa gogoratu
+#
+# << MISSING >>
+# conflict-check-help:
+# English text: Check for event conflicts (two events scheduled for the same time for the same person).  If you set this to "Yes", you will still be able to schedule two events at the same time after confirming a warning. If you set this to "No", no checking for conflicts will be done.  You probably want to set this to "Yes", so conflict checking occurs.
+#
+Check for event conflicts: Gertaera talkak antzeman
+conflict-months-help: Hilak aztertzean talkak
+Conflict checking months: Hilak aztertzean talkak
+#
+# << MISSING >>
+# conflict-check-override-help:
+# English text: Allows users to override event conflicts and schedule two or more events for the same time.
+#
+#
+# << MISSING >>
+# Allow users to override conflicts:
+#
+# << MISSING >>
+# limit-appts-help:
+# English text: Allows the system administrator to set a system-wide limit on the number of appointments a single user can have on any single day.
+#
+#
+# << MISSING >>
+# Limit number of timed events per day:
+#
+# << MISSING >>
+# limit-appts-number-help:
+# English text: Specifies the maximum number of timed events a user can have in a single day.
+#
+#
+# << MISSING >>
+# Maximum timed events per day:
+#
+# << MISSING >>
+# Plugins:
+#
+# << MISSING >>
+# plugins-enabled-help:
+# English text: Enable plugin applications.
+#
+#
+# << MISSING >>
+# Enable Plugins:
+#
+# << MISSING >>
+# plugins-sort-key-help:
+# English text: Specifies a sort key for the plugin.  This allows the plugins to appear in a specific order.
+#
+#
+# << MISSING >>
+# Plugin:
+Groups: Taldeak
+groups-enabled-help: Taldekako antolaketa ahalbideratzen du
+Groups enabled: Taldeak gaituak
+user-sees-his-group-help: Taldekideek bere taldearen gertaerak soilik ikusiko dituzte
+User sees only his groups: Erabiltzaileak bere taldea ikusten du soilik
+Categories: Kategoria
+categories-enabled-help: Kategori sistema gaitzen du
+Categories enabled: Kategoriak gaituak
+#
+# << MISSING >>
+# Nonuser:
+# English text: Nonuser Calendars
+#
+#
+# << MISSING >>
+# nonuser-enabled-help:
+# English text: If enabled, admins will have the option to add nonuser calendars
+#
+#
+# << MISSING >>
+# Nonuser enabled:
+# English text: Nonuser Calendars Enabled
+#
+#
+# << MISSING >>
+# nonuser-list-help:
+# English text: Where to display the nonuser calendars in the participant list
+#
+#
+# << MISSING >>
+# Nonuser list:
+# English text: Display in participants list at
+#
+#
+# << MISSING >>
+# Top:
+#
+# << MISSING >>
+# Bottom:
+#
+# << MISSING >>
+# Reports:
+#
+# << MISSING >>
+# reports-enabled-help:
+# English text: If enabled, users will see a "Reports" section at the bottom of each page and will be allowed to create custom reports.  Additionally, admin users can create global reports that will appear at the bottom of all users' pages.
+#
+#
+# << MISSING >>
+# Reports enabled:
+#
+# << MISSING >>
+# Subscribe/Publish:
+#
+# << MISSING >>
+# subscriptions-enabled-help:
+# English text: Specifies if remote users can subscribe to a WebCalendar user's calendar, allowing them to see the WebCalendar user's events in their iCal-enabled application (such as Apple's iCal or Mozilla Calendar).
+#
+#
+# << MISSING >>
+# Allow remote subscriptions:
+Email: E-posta
+email-enabled-help: E-posta bidezko notifikazioak gaitzen edo desgaitzen ditu
+Email enabled: E-posta gaitua
+email-default-sender: Defektuz postak zeinek bidaliko dituen adierazten du.
+Default sender address: Bidaltzailearen posta
+Default user settings: Erabiltzailearen aukerak
+email-event-reminders-help: Gertaerak e-posta bidez gogorarazten diren 
+Event reminders: Gertaeren gogoraraztea
+email-event-added: Gertaeren gehitzea e-posta bidez jakinarazten den ala ez.
+Events added to my calendar: Nire egutegira gehitutako gertaerak.
+email-event-updated: Gertaeren eguneratzea e-posta bidez jakinarazten den ala ez.
+Events updated on my calendar: Nire egutegian eguneratutako gertaerak
+email-event-deleted: Gertaeren ezabatzea e-posta bidez jakinarazten den ala ez.
+Events removed from my calendar: Egutegitik ezabatutako gertaerak.
+email-event-rejected: Kide batek gertaera bati uko egiten dionean e-posta bidezko notifikazioa.
+Event rejected by participant: Partaideak uko egindako gertaera
+colors-help: Kolore guztiak formatu hamaseitarrean adierazi behar dira "#RRG
+Colors: Koloreak
+Allow user to customize colors: Erabiltzaileei kolore esleipena egitea baimendu
+Document background: Dokumentuaren atzea
+Select: Aukeratu
+Document title: Izenburua
+Document text: Dokumentuaren testua
+Table grid color: Taularen kolorea
+Table header background: Taularen burukoaren atzea
+Table header text: Taularen burukoaren testua
+Table cell background: Taulako gelaxken atzea
+Table cell background for current day: Gaurko egunaren gelaxkaren atzea
+Table cell background for weekends: Astebukaerako gelaxken atzea
+Event popup background: Gertaera popup-aren atzea
+Event popup text: Gertaera popup-aren testua
+
+
+###############################################
+# Page: activity_log.php
+#
+Activity Log: Jardunaren erregistroa
+User: Erabiltzailea
+Calendar: Egutegia
+Date: Data
+Time: Ordua
+Event: Gertaera
+Action: Ekintza
+Event created: Gertaera sortua
+Event approved: Gertaera onetsia
+Event rejected: Gertaera gaitzetsia
+Event updated: Gertaera eguneratua
+Event deleted: Gertaera ezabatua
+Notification sent: Jakinarazpen mezua bidalia
+Reminder sent: Gogorarazteko mezua bidalia
+Database error: Akatsa datu basean
+Previous: Aurrekoa
+Next: Hurrengoa
+
+
+###############################################
+# Page: add_entry.php
+#
+Invalid entry id: Sarrera desegokia
+This is a private event and may not be added to your calendar.: Gertaera hau pribatua da eta ezin da zure egutegian gehitu
+Error adding event: Akatsa gertaera gehitzean
+
+
+###############################################
+# Page: admin_handler.php
+#
+Error: Akatsa
+The following error occurred: Hondoko akatsa gertatu da
+
+
+###############################################
+# Page: approve_entry.php
+#
+Error approving event: Akatsa gertaera onestean
+
+
+###############################################
+# Page: category.php
+#
+Add: Gehitu
+Category Name: Atalaren izena
+Global: Orokorra
+Delete: Ezabatu
+Are you sure you want to delete this entry?: Seguru al zaude sarrera hau ezabatu nahi duzula?
+Add New Category: Atal berria gehitu
+
+
+###############################################
+# Page: category_handler.php
+#
+
+
+###############################################
+# Page: datesel.php
+#
+
+
+###############################################
+# Page: day.php
+#
+#
+# << MISSING >>
+# Admin mode:
+#
+# << MISSING >>
+# Assistant mode:
+Generate printer-friendly version: Formatu inprimagarria sortu
+Printer Friendly: Inprimatzeko egokia
+
+
+###############################################
+# Page: del_entry.php
+#
+Hello: Kaixo
+An appointment has been canceled for you by: Bilera bat bertan bera utzi dizu
+The subject was: Izeburua zen
+Notification: Abixua
+
+
+###############################################
+# Page: edit_entry.php
+#
+Edit Entry: Sarrera editatu
+Add Entry: Sarrera gehitu
+brief-description-help: Deskribapen motza ( 20 bat karaktere )
+Brief Description: Deskribapen laburra
+full-description-help: Gertaeraren deskribapen luze, zabal eta mamitsua.
+Full Description: Deskribapen zabala
+date-help: Gertaeraren data adierazten du.
+time-help: Gertaeraren iraupena adierazten du ( hutsik utz liteke )
+am: am
+pm: pm
+#
+# << MISSING >>
+# Untimed event:
+#
+# << MISSING >>
+# Timed event:
+#
+# << MISSING >>
+# All day event:
+duration-help: Gertaeraren iraupena minutuetan adierazirik
+Duration: Iraupena
+hours: orduak
+priority-help: Gertaeraren lehentasuna adierazten du-
+Priority: Lehentasuna
+Low: Baxua
+Medium: Ertaina
+High: Altua
+access-help: Gertaeraren atzigarritasun maila adierazten du.
+Access: Atzitu
+Public: Publikoa
+Confidential: Konfidentziala
+#
+# << MISSING >>
+# category-help:
+# English text: Specifies the category of the event.
+#
+Category: Atala
+None: Bat ere ez
+days: egunak
+before event: gertaeraren aurretik
+participants-help: Gertaeran honetan partaide direnen lista.
+Participants: Partaideak
+#
+# << MISSING >>
+# external-participants-help:
+# English text: Specifies a list of participants for the event that are not calendar users.  The users should be listed one per line and can include an email address.  If an email address is specified, the user is eligible to receive notications and reminders.
+#
+#
+# << MISSING >>
+# External Participants:
+repeat-type-help: Gertaera bat zenbatero errepikatzen den adierazi.
+Repeat Type: Mota errepikatu
+Daily: Egunero
+Weekly: Astero
+Monthly: Hilabetero
+by day: eguneko
+#
+# << MISSING >>
+# by day (from end):
+by date: dataren arabera
+Yearly: Urtero
+repeat-end-date-help: Gertaera noiz arte errepikatu behar den adierazten du.
+Repeat End Date: Errepikapenen bukaera data
+Use end date: Bukaera data erabili
+repeat-day-help: Gertaera hilabetearen zein egunetan errepikatu behar den adierazten du.
+Repeat Day: Eguna errepikatu
+for weekly: asterorako
+Tuesday: Asteartea
+Wednesday: Asteazkena
+Thursday: Osteguna
+Friday: Ostirala
+Saturday: Larunbata
+repeat-frequency-help: Gertaera zenbatero errepikatu behar den adierazten du.
+Frequency: Maiztasuna
+Delete entry: Sarrera ezabatu
+You are not authorized to edit this entry: Ez zaude baimenduta gertaera hau editatzeko
+
+
+###############################################
+# Page: edit_layer.php
+#
+Edit Layer: Geruza editatu
+Add Layer: Geruza gehitu
+Source: Iturburua
+Color: Kolorea
+Duplicates: Bikoiztuak
+Show layer events that are the same as your own: Zure gertaeren berdinak direnak erakutsi
+Are you sure you want to delete this layer?: Seguru al zaude geruza hau ezabatu nahi duzula?
+Delete layer: Geruza ezabatu
+
+
+###############################################
+# Page: edit_layer_handler.php
+#
+You cannot create a layer for yourself: Ezin duzu zeuretzako geruza bat sortu
+You can only create one layer for each user: Erabiltzaile bakoitzeko geruza bakarra osa dezakezu
+
+
+###############################################
+# Page: edit_user.php
+#
+Edit User: Erabiltzailea editatu
+Add User: Erabiltzailea gehitu
+Username: Erabiltzaile izena
+First Name: Izena
+Last Name: Abizena
+E-mail address: E-posta
+Password: Pasahitza
+again: berriz
+Admin: Admin
+Disabled for demo: Demoan desgaitua
+Change Password: Pasahitza aldatu
+New Password: Pasahitz berria
+Set Password: Pasahitza jarri
+
+
+###############################################
+# Page: edit_user_handler.php
+#
+Deleting users not supported: Erabiltzaileak ezabatzea debekatua
+The passwords were not identical: Pasahitza hauek ez dira berdinak
+You have not entered a password: Ez duzu pasahitz bat sartu
+
+
+###############################################
+# Page: export.php
+#
+Export: Exportatu
+Export format: Exportatzeko formatua
+Palm Pilot: Palm Pilot
+Export all dates: Data guztiak exportatu
+Start date: Hasiera data
+End date: Bukaera data
+Modified since: Azken eguneratze data
+
+
+###############################################
+# Page: export_handler.php
+#
+#
+# << MISSING >>
+# export format not defined or incorrect:
+
+
+###############################################
+# Page: group_edit.php
+#
+Unnamed Group: Izengabeko taldea
+Add Group: Taldea gehitu
+Edit Group: Taldea editatu
+Group name: Taldearen izena
+Updated: Eguneratua
+Created by: Sortzailea
+Users: Erabiltzaileak
+
+
+###############################################
+# Page: group_edit_handler.php
+#
+#
+# << MISSING >>
+# You must specify a group name:
+
+
+###############################################
+# Page: groups.php
+#
+Add New Group: Talde berria gehitu
+
+
+###############################################
+# Page: icalfb.php
+#
+
+
+###############################################
+# Page: pref.php
+#
+Preferences: Lehenetsiak
+to modify the preferences for the Public Access calendar: Atzipen publikoko egutegiaren lehenetsiak eguneratzeko
+#
+# << MISSING >>
+# tz-help:
+# English text: Specifies how many hours to adjust the time from server time to local time.
+#
+#
+# << MISSING >>
+# Timezone Offset:
+#
+# << MISSING >>
+# Add N hours to:
+#
+# << MISSING >>
+# Subtract N hours from:
+#
+# << MISSING >>
+# same as:
+#
+# << MISSING >>
+# server time:
+#
+# << MISSING >>
+# Default Category:
+#
+# << MISSING >>
+# When I am the boss:
+#
+# << MISSING >>
+# Email me event notification:
+#
+# << MISSING >>
+# I want to approve events:
+#
+# << MISSING >>
+# allow-remote-subscriptions-help:
+# English text: Specifies if remote users can subscribe to your calendar, allowing them to see your events in a iCal-enabled application (such as Apple's iCal or Mozilla Calendar).
+#
+#
+# << MISSING >>
+# remote-subscriptions-url-help:
+# English text: Displays the URL remote users should use to subscribe to your calendar.
+#
+#
+# << MISSING >>
+# URL:
+Sun: Iga
+Mon: Atl
+Tue: Atr
+Wed: Azk
+Thu: Otg
+Fri: Otr
+Sat: Lar
+Save Preferences: Lehenetsiak gorde
+
+
+###############################################
+# Page: help_bug.php
+#
+Report Bug: Bug informea
+
+
+###############################################
+# Page: help_edit_entry.php
+#
+Adding/Editing Calendar Entries: Gehitu/Editatu egutegi sarrerak
+
+
+###############################################
+# Page: help_index.php
+#
+Help Index: Laguntza
+Layers: Geruzak
+#
+# << MISSING >>
+# Import:
+
+
+###############################################
+# Page: help_layers.php
+#
+#
+# << MISSING >>
+# Layers are useful for displaying other users' events in your own calendar.  You can specifiy the user and the color the events will be displayed in.:
+Add/Edit/Delete: Gehitu/Editatu/Ezabatu
+#
+# << MISSING >>
+# Clicking the Edit Layers link in the admin section at the bottom of the page will allow you to add/edit/delete layers.:
+Specifies the user that you would like to see displayed in your calendar.: Zure egutegian azaltzea gustatuko litzaizuken erabiltzailea adierazten du
+The text color of the new layer that will be displayed in your calendar.: Geruza berriaren textuaren kolorea
+If checked, events that are duplicates of your events will be shown.: Gaitu ez gero zure gertaeren berdinak diren gertaerak ere erakutsi dira
+Disabling: Desgaitzen
+#
+# << MISSING >>
+# Press the Disable Layers link in the admin section at the bottom of the page to turn off layers.:
+Enabling: Gaitzen
+#
+# << MISSING >>
+# Press the Enable Layers link in the admin section at the bottom of the page to turn on layers.:
+
+
+###############################################
+# Page: help_admin.php
+#
+
+
+###############################################
+# Page: week.php
+#
+#
+# << MISSING >>
+# cont.:
+
+
+###############################################
+# Page: layers.php
+#
+#
+# << MISSING >>
+# to modify the layers settings for the:
+Layers are currently: Geruzak orain
+Enabled: Gaitua
+Disabled: Desgaitua
+Disable Layers: Geruzak desgaitu
+Enable Layers: Geruzak gaitu
+Layer: Geruza
+Edit layer: Geruza editatu
+Add layer: Geruza gehitu
+
+
+###############################################
+# Page: layers_toggle.php
+#
+
+
+###############################################
+# Page: list_unapproved.php
+#
+View this entry: Sarrera hau ikusi
+Approve this entry?: Sarrera hau onetsi
+Approve/Confirm: Onetsi/Konfirmatu
+Reject this entry?: Gaitzetsi sarrera hau?
+Reject: Gaitzetsi
+No unapproved events for: Ez daude onetsi gabeko gertaerak
+Unapproved Events: Gertaera ez onetsiak
+Public Access: Atzipen publikoa
+
+
+###############################################
+# Page: view_entry.php
+#
+every: maiztasuna
+2nd: 2garrena
+3rd: 3garrena
+4th: 4garrena
+5th: 5garrena
+1st: 1goa
+#
+# << MISSING >>
+# last:
+Description: Deskribapena
+Status: Egoera
+Waiting for approval: Onespenaren zai
+Deleted: Ezabatuak
+Rejected: Gaitzetsiak
+#
+# << MISSING >>
+# External User:
+Approve/Confirm entry: Onetsi/Konfirmatu erregistroa
+Reject entry: Erregistroa gaitzetsi
+Set category: Atala ezarri
+Edit repeating entry for all dates: Data guztietarako errepikatutako gertaera editatu
+Edit entry for this date: Egun honetarako sarrera editatu
+This will delete this entry for all users.: Ekintza honek gertaera hau ezabatuko du egun baterako
+Delete repeating event for all dates: Errepikatutako gertaera data guztietarako ezabatu
+#
+# << MISSING >>
+# Delete entry only for this date:
+Edit entry: Sarrera editatu
+This will delete the entry from your calendar.: Ekintza honek sarrera ezabatuko du egutegitik
+Do you want to add this entry to your calendar?: Sarrera hau gehitu nahi al duzu zure egutegian?
+This will add the entry to your calendar.: Ekintza honek sarrera gehituko du zure egutegian
+Add to My Calendar: Egutegiari gehitu
+Email all participants: Partaide guztiei e-posta bidez jakinarazi
+Show activity log: Mostrar bitácora de actividad
+Hide activity log: Jardunaren erregistroa ezkutatu
+#
+# << MISSING >>
+# Export this entry to:
+
+
+###############################################
+# Page: view_v.php
+#
+
+
+###############################################
+# Page: month.php
+#
+
+
+###############################################
+# Page: pref_handler.php
+#
+
+
+###############################################
+# Page: reject_entry.php
+#
+An appointment has been rejected by: Gertaera bat gaitzetsia izan da
+The description is: Deskribapena da
+Title: WebCalendar
+
+
+###############################################
+# Page: search.php
+#
+Search: Bilatu
+Advanced Search: Bilaketa aurreratua
+Keywords: Hitz gakoa
+
+
+###############################################
+# Page: search_handler.php
+#
+You must enter one or more search keywords: Hitz gako bat edo gehiago sartu behar duzu
+Search Results: Bilaketaren emaitzak
+match found: asmatze topatua
+matches found: asmatze topatuak
+No matches found: Ez da asmatzerik topatu
+
+
+###############################################
+# Page: select_user.php
+#
+View Another User's Calendar: Beste partaide baten egutegia ikusi
+Go: Joan
+
+
+###############################################
+# Page: publish.php
+#
+
+
+###############################################
+# Page: users.php
+#
+denotes administrative user: erabiltzaile administraria adierazten du
+Add New User: Erabiltzaile berria gehitu
+
+
+###############################################
+# Page: usersel.php
+#
+All: Denak
+Reset: Berhasieratu
+Remove: Kendu
+Ok: Ados
+Cancel: Utzi
+
+
+###############################################
+# Page: import.php
+#
+#
+# << MISSING >>
+# This form will allow you to import entries from the Palm Desktop Datebook.:
+#
+# << MISSING >>
+# Exclude private records:
+#
+# << MISSING >>
+# Datebook File:
+#
+# << MISSING >>
+# This form will import vCalendar (.vcs) 1.0 events:
+#
+# << MISSING >>
+# vCal File:
+#
+# << MISSING >>
+# This form will import iCalendar (.ics) events:
+#
+# << MISSING >>
+# iCal File:
+#
+# << MISSING >>
+# Overwrite Prior Import:
+
+
+###############################################
+# Page: year.php
+#
+
+
+###############################################
+# Page: view_d.php
+#
+
+
+###############################################
+# Page: view_m.php
+#
+
+
+###############################################
+# Page: view_w.php
+#
+
+
+###############################################
+# Page: views.php
+#
+Views: Ikus erak
+Add New View: Ikus era berria
+
+
+###############################################
+# Page: views_edit.php
+#
+Unnamed View: Izen gabeko ikus era
+Add View: Ikus era gehitu
+Edit View: Ikus era editatu
+View Name: Izena ikusi
+View Type: Mota ikusi
+#
+# << MISSING >>
+# Week (Users horizontal):
+#
+# << MISSING >>
+# Week (Users vertical):
+#
+# << MISSING >>
+# Week (Timebar):
+#
+# << MISSING >>
+# Month (side by side):
+#
+# << MISSING >>
+# Month (on same calendar):
+
+
+###############################################
+# Page: nonusers.php
+#
+#
+# << MISSING >>
+# NONUSER_PREFIX not set:
+# English text: NONUSER_PREFIX has not been set in config.php.
+#
+#
+# << MISSING >>
+# NonUser:
+# English text: NonUser Calendars
+#
+#
+# << MISSING >>
+# Calendar ID:
+#
+# << MISSING >>
+# Add New NonUser Calendar:
+
+
+###############################################
+# Page: nonusers_handler.php
+#
+
+
+###############################################
+# Page: view_l.php
+#
+
+
+###############################################
+# Page: help_pref.php
+#
+#
+# << MISSING >>
+# default-category-help:
+# English text: Specifies the category a new event should default to.
+#
+
+
+###############################################
+# Page: report.php
+#
+Private: Pribatua
+#
+# << MISSING >>
+# Approved:
+#
+# << MISSING >>
+# Unknown:
+#
+# << MISSING >>
+# to manage reports for the Public Access calendar:
+#
+# << MISSING >>
+# Add new report:
+#
+# << MISSING >>
+# Invalid report id:
+#
+# << MISSING >>
+# Manage Reports:
+
+
+###############################################
+# Page: login.php
+#
+You must enter a login and password: Erabiltzaile eta pasahitz bat sartu behar dituzu
+Save login via cookies so I don't have to login next time: Datuak gorde
+Login: Sartu
+Access public calendar: Egutegi publikora joan
+cookies-note: <b>Oharra:</b> Aplikazio honek cookiak gaituak egotea behar du.
+
+
+###############################################
+# Page: views_edit_handler.php
+#
+#
+# << MISSING >>
+# You must specify a view name:
+
+
+###############################################
+# Page: week_details.php
+#
+New Entry: Sarrera berria
+
+
+###############################################
+# Page: import_handler.php
+#
+#
+# << MISSING >>
+# Import Results:
+#
+# << MISSING >>
+# Events successfully imported:
+#
+# << MISSING >>
+# Events from prior import marked as deleted:
+#
+# << MISSING >>
+# Conflicting events:
+#
+# << MISSING >>
+# Errors:
+Back to My Calendar: Nire egutegira itzuli
+#
+# << MISSING >>
+# There was an error parsing the import file or no events were returned:
+#
+# << MISSING >>
+# The import file contained no data:
+The following conflicts with the suggested time: Hondokoa ez dator bat gomendatutako orduarekin
+Unnamed Event: Izengabeko gertaera
+Scheduling Conflict: Bilera arteko talka
+conflicts with the following existing calendar entries: hondoko sarrerekin egiten du talka
+#
+# << MISSING >>
+# Event Imported:
+
+
+###############################################
+# Page: edit_report.php
+#
+#
+# << MISSING >>
+# Tomorrow:
+#
+# << MISSING >>
+# Today:
+#
+# << MISSING >>
+# Yesterday:
+#
+# << MISSING >>
+# Day before yesterday:
+#
+# << MISSING >>
+# Next week:
+#
+# << MISSING >>
+# This week:
+#
+# << MISSING >>
+# Last week:
+#
+# << MISSING >>
+# Week before last:
+#
+# << MISSING >>
+# Next week and week after:
+#
+# << MISSING >>
+# This week and next week:
+#
+# << MISSING >>
+# Last week and this week:
+#
+# << MISSING >>
+# Last two weeks:
+#
+# << MISSING >>
+# Next month:
+#
+# << MISSING >>
+# This month:
+#
+# << MISSING >>
+# Last month:
+#
+# << MISSING >>
+# Month before last:
+#
+# << MISSING >>
+# Next year:
+#
+# << MISSING >>
+# This year:
+#
+# << MISSING >>
+# Last year:
+#
+# << MISSING >>
+# Year before last:
+#
+# << MISSING >>
+# Unnamed Report:
+#
+# << MISSING >>
+# Add Report:
+#
+# << MISSING >>
+# Edit Report:
+#
+# << MISSING >>
+# Report name:
+Current User: Une hontako erabiltzailea
+#
+# << MISSING >>
+# Include link in trailer:
+#
+# << MISSING >>
+# Include standard header/trailer:
+#
+# << MISSING >>
+# Date range:
+#
+# << MISSING >>
+# Include previous/next links:
+#
+# << MISSING >>
+# Include empty dates:
+#
+# << MISSING >>
+# Template variables:
+#
+# << MISSING >>
+# Page template:
+#
+# << MISSING >>
+# Day template:
+#
+# << MISSING >>
+# Event template:
+#
+# << MISSING >>
+# Are you sure you want to delete this report?:
+
+
+###############################################
+# Page: assistant_edit.php
+#
+#
+# << MISSING >>
+# Assistants:
+#
+# << MISSING >>
+# Yours assistants:
+
+
+###############################################
+# Page: view_t.php
+#
+
+
+###############################################
+# Page: assistant_edit_handler.php
+#
+
+
+###############################################
+# Page: adminhome.php
+#
+Account: Kontua
+#
+# << MISSING >>
+# NonUser Calendars:
+#
+# << MISSING >>
+# Delete Events:
+#
+# << MISSING >>
+# Public Preferences:
+#
+# << MISSING >>
+# Unapproved Public Events:
+#
+# << MISSING >>
+# Administrative Tools:
+
+
+###############################################
+# Page: purge.php
+#
+#
+# << MISSING >>
+# Purging events for:
+#
+# << MISSING >>
+# Finished:
+#
+# << MISSING >>
+# Delete all events before:
+#
+# << MISSING >>
+# Check box to delete <b>ALL</b> events for a user:
+#
+# << MISSING >>
+# Are you sure you want to delete events for:
+
+
+###############################################
+# Page: help_import.php
+#
+#
+# << MISSING >>
+# Palm Desktop:
+#
+# << MISSING >>
+# It should be located in your Palm directory in <tt>datebook/datebook.dat</tt> in a subdirectory named by your username.:
+#
+# << MISSING >>
+# The following entries will not be imported:
+#
+# << MISSING >>
+# Entries older than the current date:
+#
+# << MISSING >>
+# Entries created in the Palm Desktop that have not been HotSync'd:
+#
+# << MISSING >>
+# Anything imported from Palm will be overwritten during the next import (unless the event date has passed).:
+#
+# << MISSING >>
+# Therefore, updates should be made in the Palm Desktop.:
+#
+# << MISSING >>
+# vCal:
+#
+# << MISSING >>
+# The following formats have been tested:
+#
+# << MISSING >>
+# Palm Desktop 4:
+#
+# << MISSING >>
+# Lotus Organizer 6:
+#
+# << MISSING >>
+# Microsoft Outlook 2002:
+#
+# << MISSING >>
+# iCalendar:
+#
+# << MISSING >>
+# Enabling <b>Overwrite Prior Import</b> will cause events imported previously that used the same UID as an event from the new import file to be marked as deleted.  This should allow an updated iCalendar file to be imported without creating duplicates.:
+
+
+###############################################
+# Page: edit_report_handler.php
+#
+#
+# << MISSING >>
+# Variable N not found:
+
+
+###############################################
+# Page: edit_entry_handler.php
+#
+A new appointment has been made for you by: Bilera bat ezartzen dizu
+An appointment has been updated by: Bilera bat eguneratu du
+The subject is: Gaia da
+Please look on: Mesedez bilatu
+to accept or reject this appointment: bilera hau onartzeko edo uko egiteko
+to view this appointment: bilera hau ikusteko
+Your suggested time of: Zure ordu gomendatua da
+
+
+###############################################
+# Page: set_entry_cat.php
+#
+You have not added any categories: Ez duzu atalik gehitu
+Set Category: Atala ezarri
+
+
+###############################################
+# Page: edit_template.php
+#
+#
+# << MISSING >>
+# Edit Custom Script/Stylesheet:
+#
+# << MISSING >>
+# Edit Custom Header:
+#
+# << MISSING >>
+# Edit Custom Trailer:
+
+
+###############################################
+# Page: includes/trailer.php
+#
+Go to: Joan
+My Calendar: Nire egutegia
+Logout: Irten
+Another User's Calendar: Beste erabiltzaile baten egutegia ikusi
+Add New Entry: Sarrera berria gehitu
+Manage Views: Ikus era administratu
+#
+# << MISSING >>
+# Manage calendar of:
+
+
+###############################################
+# Page: includes/connect.php
+#
+
+
+###############################################
+# Page: includes/user.php
+#
+Invalid login: Erabiltzaile/pasahitz desegokia
+Invalid user login: Erabiltzaile/pasahitz desegokia
+
+
+###############################################
+# Page: includes/site_extras.php
+#
+Send Reminder: Gogorarazteko abixua bidali
+
+
+###############################################
+# Page: includes/translate.php
+#
+
+
+###############################################
+# Page: includes/user-ldap.php
+#
+
+
+###############################################
+# Page: includes/user-nis.php
+#
+
+
+###############################################
+# Page: includes/help_trailer.php
+#
+
+
+###############################################
+# Page: includes/dbtable.php
+#
+
+
+###############################################
+# Page: includes/init.php
+#
+
+
+###############################################
+# Page: includes/functions.php
+#
+This event is confidential: Gertaera hau konfidentziala da
+#
+# << MISSING >>
+# exceeds limit of XXX events per day:
+You have XXX unapproved events: Onetsi gabeko XXX gertaera daude
+January: Urtarrila
+February: Otsaila
+March: Martxoa
+April: Apirila
+May_: Maiatza
+June: Ekaina
+July: Uztaila
+August: Abuztua
+September: Iraila
+October: Urria
+November: Azaroa
+Jan: Urt
+Feb: Ots
+Mar: Mar
+Apr: Api
+May: Mai
+Jun: Eka
+Jul: Uzt
+Aug: Abu
+Sep: Ira
+Oct: Urr
+Nov: Aza
+Dec: Abe
+
+
+###############################################
+# Page: includes/js/admin.php
+#
+Server URL is required: Zerbitzariaren URL-a falta da
+Server URL must end with '/': Zerbitzariaren URL-a '/'-z bukatu behar du
+Invalid color for document background: Kolore desegokia dokumentuaren atzerako
+Invalid color for document title: Kolore desegokia dokumentuaren izenbururako
+Invalid color for table cell background: Kolore desegokia taulako gelaxken atzerako
+Invalid color for table grid: Kolore desegokia taularentzako
+#
+# << MISSING >>
+# Invalid color for table header background:
+Invalid color for table text background: Kolore desegokia taularen textuaren atzerako
+Invalid color for event popup background: Kolore desegokia gertaera popup-aren atzerako
+Invalid color for event popup text: Kolore desegokia gertaera popup-aren texturako
+Invalid color for table cell background for today: Kolore desegokia gaurko egunaren atzerako
+Color format should be '#RRGGBB': Kolorearen formatua hamaseitarra izan beharko luke adibidez, '#RRGGB
+
+
+###############################################
+# Page: includes/js/edit_entry.php
+#
+You have not entered a Brief Description: Ez duzu deskribapen laburrik sartu
+You have not entered a valid time of day: Ez duzu ordu egoki bat sartu
+#
+# << MISSING >>
+# The time you have entered begins before your preferred work hours.  Is this correct?:
+
+
+###############################################
+# Page: includes/js/edit_layer.php
+#
+Invalid color: Kolore desegokia
+
+
+###############################################
+# Page: includes/js/pref.php
+#
+
+
+###############################################
+# Page: tools/send_reminders.php
+#
+This is a reminder for the event detailed below.: Hau hondoko gertaera oroitarazteko abixu bat da.
+Reminder: Oroigarria

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Bulgarian.txt
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Bulgarian.txt	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Bulgarian.txt	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,998 @@
+ÿþ#Use this as a starting point to translate this application into
+# another language.  The format is "English text: translated text"
+# There cannot be a ":" in the English text.
+# Translated by:
+#	Malen Malenov malen_malenov at yahoo.com
+# Last update: 12.11.2003
+# Check out the tools directory which contains two perl scripts:
+#   check_translation.pl will tell you if you have successfully translated
+#        all required text
+#   update_translation.pl will take an old translation file and move the
+#        translations around so they age grouped by the page they appear in.
+#        It will also identify any missing translations and tag them
+#        with a comment.  If it is a non-english translation, the english
+#        translation will be included in the comment to simplify completing
+#        the translation.
+#
+# Note: You will notice the entry for "May_" below.  There's a reason for
+# this.  Translate "May_" to the full month name and "May" to the three-letter
+# month abbreviation (like "Oct" for "October").
+#
+#
+#
+#
+# Translation last updated on 07-21-2003
+
+
+###############################################
+# Specify a charset (will be sent within meta tag for each page)
+#
+charset: windows-1251
+
+###############################################
+# Page: admin.php
+#
+System Settings: !8AB5<=8 =0AB@>9:8
+You are not authorized: 5 AB5 C?J;=><>I5=8
+Note: 015;56:0
+Your user preferences: 0H8B5 ?>B@518B5;A:8 ?@54?>G8B0=8O
+may be affecting the appearance of this page.: <>30B 40 A5 >B@07OB =0 =0G8=0, ?> :>9B> A5 287C0;878@0 B078 AB@0=8F0.
+Click here: 0B8A=5B5 BC:
+to not use your user preferences when viewing this page: 70 40 =5 1J40B 87?>;720=8 ?>B@518B5;A:8B5 8 ?@54?>G8B0=8O :>30B> >B20@OB5 B078 AB@0=8F0.
+are being ignored while viewing this page.: A5 83=>@8@0B ?@8 >B20@O=5 =0 B078 AB@0=8F0.
+to load your user preferences when viewing this page: 70 1J40B 70@545=8 ?>B@518B5;A:8B5 8 ?@54?>G8B0=8O :>30B> >B20@OB5 B078 AB@0=8F0
+Save: 0?078
+Help: ><>I
+Settings: 0AB@>9:8
+app-name-help: ?@545;O 8<5B> =0 ?@8;>65=85B>, :>5B> I5 A5 ?>O2O20 2 B09BJ;-10@0 =0 1@0C75@0 =0 2A8G:8 AB@0=8F8 8 =0 AB@0=8F0B0 70 @538AB@0F8O. !B>9=>ABB0, :>OB> 8715@5B5 BC: I5 1J45 ?>BJ@A5=0 2J2 D09;0 70 ?@52>4 :0B> ?> B>78 =0G8= I5 8 ?>72>;O20 40 >?@545;OB5 @07;8G=8 703;028O 70 @07;8G=8B5 578F8.
+Application Name: <5 =0 ?@8;>65=85B>
+server-url-help: ?@545;O >A=>2=8O URL =0 ?@8;>65=85B>. ">9 I5 1J45 2:;NG20= :>30B> 87?@0I0B5 8725AB8O 8 =0?><=O=8O ?> e-mail.
+Server URL: URL =0 AJ@2J@0
+language-help: ?@545;O :>9 578: 40 1J45 87?>;720=.
+Language: 78:
+Your browser default language is: > ?>4@0718@0=5, 578:JB =0 0H8O 1@0C75@ 5
+fonts-help: ?@545;O A?8AJ:JB >B A8AB5<=8 D>=B>25, :>8B> I5 1J40B 87?>;720=8 (:0B> =0?@. "Arial, Helvetica")
+Fonts: $>=B>25
+preferred-view-help: ?@545;O 873;54 ?> ?>4@0718@0=5 (45=, A54<8F0, <5A5F 8;8 3>48=0).
+Preferred view: @54?>G8B0= 873;54
+Day: 5=
+Week: !54<8F0
+Month: 5A5F
+Year: >48=0
+display-weekends-help: :;NG20=5 =0 C8:5=48B5 2 A54<8G=8O 873;54.
+Display weekends in week view: >:0720=5 =0 C8:5=48B5 2 A54<8G=8O 873;54
+Yes: 0
+No: 5
+date-format-help: ?@545;O ?@54?>G8B0=8O D>@<0B =0 40B0B0.
+Date format: $>@<0B =0 40B0B0
+December: 5:5<2@8
+time-format-help: ?@545;O :>9 2@5<528 D>@<0B 40 1J45 87?>;720=: <BR><I>12-G0A>2:</I> >:0720 2@5<5B> :0B> 3am, 8:30pm 8 B.=.  <BR><I>24-G0A>2:</I> >:0720 2@5<5B> :0B> 3.00, 20.30 8 B.=.
+Time format: @5<528 D>@<0B
+12 hour: 12-G0A>2
+24 hour: 24-G0A>2
+time-interval-help: ?@545;O 3>;5<8=0B0 =0 2@5<528B5 1;>:>25 2 A54<8G=8O 8 4=52=8O 873;54.
+Time interval: @5<528 8=B5@20;
+hour: G0A
+minutes: <8=CB8
+auto-refresh-help: >30B> 5 0:B828@0=0, 4=52=8OB, A54<8G=8OB, <5A5G=8OB 873;54 8 A?8AJ:JB A =5>4>1@5=8 AB@0=8F8 ?5@8>48G5A:8 I5 A5 0:BC0;878@0B 02B><0B8G=>.
+Auto-refresh calendars: 2B><0B8G=> 0:BC0;878@0=5 =0 :0;5=40@8B5
+auto-refresh-time-help: :> 02B><0B8G=>B> 0:BC0;878@0=5 5 0:B828@0=>, A B>20 A5 >?@545;O 2@5<5B> <564C 425 0:BC0;870F88.
+Auto-refresh time: 5@8>4 =0 02B><0B8G=> 0:BC0;878@0=5
+require-approvals-help: >30B> 5 0:B828@0=>, ?>B@518B5;OB B@O120 40 >4>1@8 4045=> AJ18B85 ?@548 B> 40 1J45 ?>:070=> 2 :0;5=40@0 <C (>A25= 0:> =5 5 0:B828@0=> >:0720=5 =0 =5>4>1@5=8B5).  015;565B5, G5 0:> 8715@5B5 "5", B>20 =O<0 40 87:;NG8 >4>1@O20=5B> ?@8 0;5=40@0 A ?C1;8G5= 4>ABJ? (0:> 0;5=40@JB A ?C1;8G5= 4>ABJ? 5 0:B828@0=).
+Require event approvals: 78A:209 >4>1@5=85 70 AJ18B8OB0
+display-unapproved-help: ?@545;O 40;8 =5>4>1@5=8B5 AJ18B8O 1820B ?>:0720=8 2 :0;5=40@0 8.<BR> :> 5 871@0=> "0", B>3020 =5>4>1@5=8B5 AJ18B8O I5 1J40B ?>:0720=8 2 :0;5=40@0 8 (A @07;8G5= F2OB).<BR> :> 5 871@0=> "5", B>3020 =5>4>1@5=8B5 AJ18B8O B@O120 40 1J40B >4>1@5=8 ?@548 40 1J40B ?>:070=8 2 :0;5=40@0 8.
+Display unapproved: >:0720=5 =0 =5>4>1@5=8B5
+display-week-number-help: ?@545;O 40;8 =><5@0 =0 A54<8F0B0 (1-52) 40 1J45 ?>:0720= 2 <5A5G=8O 8 A54<8G=8O 873;54.
+Display week number: >:0720=5 =><5@0B0 =0 A54<8F8B5
+display-week-starts-on: ?@545;O 40;8 A54<8F0B0 70?>G20 2 =545;O 8;8 2 ?>=545;=8:.  :> 5 871@0= ">=545;=8:", B>3020 =><5@0B0 =0 A54<8F8B5 I5 1J40B AJ>1@075=8 A ISO.
+Week starts on: !54<8F0B0 70?>G20 2
+Sunday: 545;O
+Monday: >=545;=8:
+work-hours-help: ?@545;O 2@5<528O >B@O7J:, :>9B> 40 1J45 ?>:0720= ?@8 4=52=8O 873;54.
+Work hours:  01>B=8 G0A>25
+From: B
+to: 4>
+disable-priority-field-help: @8 871>@ =0 "0" ?>;5B> "@8>@8B5B" 2 AB@0=8F0B0 70 8=D>@<0F8O =0 4045=> AJ18B85 >B?040 :0B> ?> B>78 =0G8= ?@028 8=B5@D59A0 ?>-4>ABJ?5= 70 =0G8=05I8B5.
+Disable Priority field: 570:B828@0=5 =0 ?>;5B> "@8>@8B5B"
+disable-access-field-help: @8 871>@ =0 "0" ?>;5B> ">ABJ?" 2 AB@0=8F0B0 70 8=D>@<0F8O =0 4045=> AJ18B85 >B?040 :0B> ?> B>78 =0G8= ?@028 8=B5@D59A0 ?>-4>ABJ?5= 70 =0G8=05I8B5.
+Disable Access field: 570:B828@0=5 =0 ?>;5B> ">ABJ?"
+disable-participants-field-help: @8 871>@ =0 "0" ?>;5B> "#G0AB=8F8" I5 >B?04=5 >B AB@0=8F0B0 70 8=D>@<0F8O =0 4045=> AJ18B85 :0B> ?> B>78 =0G8= I5 ?>?@5G8 =0 ?>B@518B5;8B5 40 4>102OB 4@C38 ?>B@518B5;8 :J< B5E=8B5 AJ18B8O.  :> 0:B828@0B5 B078 2J7<>6=>AB <>65 18 I5 8A:0B5 AJI> B0:0 40 4570:B828@0B5 ?>;5B> "J7<>6=>AB 40 A5 28640B :0;5=40@8B5 =0 4@C38B5 ?>B@518B5;8".
+Disable Participants field: 570:B828@0=5 =0 ?>;5B> "#G0AB=8F8"
+disable-repeating-field-help: @8 871>@ =0 "0" ?>;5B> ">2B>@O5<>AB" I5 >B?04=5 ?@8 4>102O=5 =0 AJ18B8O.  ">20 I5 =0?@028 8=B5@D59A0 ?>-4>ABJ?5= 70 =0G8=05I8B5.
+Disable Repeating field: 570:B828@0=5 =0 ?>;5B> ">2B>@O5<>AB"
+allow-view-other-help: ?@545;O 40;8 ?>B@518B5;OB <>65 40 28640 :0;5=40@0 =0 4@C3 ?>B@518B5;.
+Allow viewing other user's calendars: J7<>6=>AB 40 1J40B 28640=8 :0;5=40@8B5 =0 4@C38 ?>B@518B5;8.
+allow-public-access-help: >30B> 5 0:B828@0=>, :0;5=40@JB <>65 40 1J45 87?>;720= :0B> read-only C1;8G5= :0;5=40@, :>9B> =5 878A:20 ?>B@518B5;8B5 40 A5 @538AB@8@0B ?@5420@8B5;=>.
+Allow public access:  07@5H020=5 =0 C1;8G5= 4>ABJ?
+public-access-view-others-help: @8 4>ABJ? 4> A8AB5<0B0 A ?C1;8G5= 4>ABJ? >?@545;O 40;8 ?>B@518B5;OB <>65 40 28640 :0;5=40@0 =0 4@C3 ?>B@518B5; =0 :0;5=40@0.
+Public access can view other users: C1;8G=8OB 4>ABJ? <>65 40 28640 8 4@C38 ?>B@518B5;8
+public-access-can-add-help: >30B> 5 0:B828@0=>, ?>B@518B5;8B5, :>8B> 8<0B 4>ABJ? 4> A8AB5<0B0 G@57 C1;8G=8O 4>ABJ? I5 <>30B 40 4>102OB AJ18B8O, => =O<0 40 A5 ?>O2O20B 2 :0;5=40@0 4>:0B> =O:>9 >B 04<8=8AB@0B>@8B5 =5 >4>1@8 =>2>B> AJ18B85.
+Public access can add events: C1;8G=8OB 4>ABJ? <>65 40 4>102O AJ18B8O
+public-access-add-requires-approval-help: ?@545;O 40;8 AJ18B8OB0, 4>1025=8 G@57 0:0C=B0 70 ?C1;8G5= 4>ABJ? 878A:20B >4>1@5=85 ?@548 40 1J40B ?>:070=8.
+Public access new events require approval: >28B5 AJ18B8O =0 C1;8G=8O 4>ABJ? 878A:20B >4>1@5=85
+allow-view-add-help:  873;548B5 I5 1J45 2:;NG5=0 8:>=0 '+', ?>72>;O20I0 =0 ?>B@518B5;8B5 1J@7> 40 4>102OB AJ18B8O :J< :0;5=40@8B5 =0 4@C38 ?>B@518B5;8.
+Include add event link in views: :;NG20=5 =0 ;8=: ">102O=5 =0 AJ18B85" 2 873;548B5.
+allow-external-users-help: @;5751O 40;8 ?>B@518B5; 872J= :0;5=40@8B5 <>65 40 1J45 ?@8102O= :J< AJ18B85.  ">20 ?>72>;O20 =0 ?>B@518B5;8 872J= :0;5=40@8B5 40 1J40B >?8A20=8 :0B> CG0AB=8F8 2 4045=> AJ18B85.
+Allow external users: J7<>6=> 5 40 8<0 2J=H=8 ?>B@518B5;8
+external-can-receive-notification-help: >30B> A0 0:B828@0=8 2J=H=8 ?>B@518B5;8 8 87?>;720=5 =0 e-mail, 2J=H=8B5 ?>B@518B5;8 <>30B 40 ?>;CG020B 8725AB8O ?> e-mail :>30B> 1820 4>1025=>, 0:BC0;878@0=> 8;8 87B@8B> 4045=> AJ18B85 (0:> 5 ?>A>G5= e-mail 04@5AJB =0 2J=H=8O ?>B@518B5;).
+External users can receive email notifications: J=H=8B5 ?>B@518B5;8 <>30B 40 ?>;CG020B 8725AB8O ?> e-mail
+external-can-receive-reminder-help: >30B> A0 0:B828@0=8 2J=H=8 ?>B@518B5;8 8 87?>;720=5 =0 e-mail, 2J=H=8B5 ?>B@518B5;8 <>30B 40 ?>;CG020B ?>4A5I0=8O ?> e-mail (0:> 5 ?>A>G5= e-mail 04@5AJB =0 2J=H=8O ?>B@518B5;).
+External users can receive email reminders: J=H=8B5 ?>B@518B5;8 <>30B 40 ?>;CG020B ?>4A5I0=8O ?> e-mail
+remember-last-login-help: >30B> 5 0:B828@0=>, @538AB@0F8>==0B0 8=D>@<0F8O =0 ?>B@518B5;O I5 1J45 ?>?J;=5=0 2<5AB> =53> =0 AB@0=8F0B0 70 @538AB@0F8O (A 87:;NG5=85 =0 ?0@>;0B0) 8 ?>B@518B5;A:8B5 ?@54?>G8B0=8O I5 1J40B 70@545=8 (2:;NG8B5;=> ?@54?>G5B5=8B5 >B BOE F25B>25 8 578:).
+Remember last login: 0?><=8 ?>A;54=8O 2;57J; ?>B@518B5;
+conflict-check-help: @>25@:0 70 :>=D;8:B8 =0 AJ18B8O (425 AJ18B8O, =0A@>G5=8 70 54=> 8 AJI> 2@5<5 8 70 548= 8 AJI8 G>25:).  :> 8715@5B5 "0", 2A5 >I5 I5 1J45B5 2 AJAB>O=85 40 =0A@>G20B5 425 AJ18B8O 70 54=> 8 AJI> 2@5<5 A;54 :0B> ?>B2J@48B5 ?@54C?@5645=85B>. :> 8715@5B5 "5", =O<0 40 8<0 ?@>25@:0 70 :>=D;8:B8.  5@>OB=> I5 ?>65;05B5 40 8715@5B5 "0" 70 40 <>65 40 8<0 ?@>25@:0 70 :>=D;8:B8.
+Check for event conflicts: @>25@:0 70 :>=D;8:B8 =0 AJ18B8O
+conflict-months-help: :> 5 871@0=0 ?@>25@:0 70 :>=D;8:B8 ("@>25@:0 70 :>=D;8:B8 =0 AJ18B8O" 5 =0 "0"), B>20 >?@545;O :>;:> <5A5F0 2 1J45I5B> 1820B ?@>25@O20=8 70 :>=D;8:B8. :> AG8B0B5, G5 4>102O=5B> =0 AJ18B8O >B=5<0 B2J@45 4J;3> 2@5<5, =0<0;5B5 B078 F8D@0.
+Conflict checking months: 5A5F8, :>8B> A5 ?@>25@O20B 70 :>=D;8:B8
+conflict-check-override-help: >72>;O20 =0 ?>B@518B5;8B5 40 83=>@8@0B :>=D;8:B8 =0 AJ18B8O 8 40 =0A@>G20B 425 8;8 ?>25G5 AJ18B8O 70 54=> 8 AJI> 2@5<5.
+Allow users to override conflicts: >B@518B5;8B5 <>30B 40 83=>@8@0B :>=D;8:B8B5
+limit-appts-help: >72>;O20 =0 A8AB5<=8O 04<8=8AB@0B>@ 40 =0;030 ;8<8B =0 FO;0B0 A8AB5<0 ?> >B=>H5=85 =0 1@>O 0=3068<5=B8, :>8B> <>65 40 8<0 2A5:8 548= ?>B@518B5; 70 548= 45=.
+Limit number of timed events per day: 3@0=8G020=5 1@>O =0 =0A@>G5=8B5 AJ18B8O 70 548= 45=
+limit-appts-number-help: ?@545;O <0:A8<0;=8O 1@>9 =0A@>G5=8 AJ18B8O, :>8B> <>65 40 8<0 548= ?>B@518B5; 70 548= 45=
+Maximum timed events per day: 0:A8<C< =0A@>G5=8 AJ18B8O =0 45=
+Plugins: ;J3-8=-8
+plugins-enabled-help: :B828@0=5 =0 ?;J3-8= ?@8;>65=8O.
+Enable Plugins: :B828@0=5 =0 ?;J3-8=-8
+plugins-sort-key-help: ?@545;O 15;578 70 A>@B8@0=5 =0 ?;J3-8=-8B5. ">20 ?>72>;O20 ?;J3-8=-8B5 40 A5 ?>O2O20B 2 >?@545;5= @54.
+Plugin: ;J3-8=
+Groups: @C?8
+groups-enabled-help: :B828@0 ?>44@J6:0B0 =0 3@C?8, :>OB> ?>72>;O20 =0 ?>B@518B5;8B5 40 8718@0B 4@C38 ?>B@518B5;8 A?>@54 3@C?8B5 8<.
+Groups enabled: @C?8B5 A0 0:B828@0=8
+user-sees-his-group-help: >30B> 5 0:B828@0=>, ?>B@518B5;8B5 =O<0 40 28640B ?>B@518B5;8 =0 :0;5=40@0, :>8B> =5 A0 2 ?>=5 54=0 >B B5E=8B5 3@C?8.
+User sees only his groups: >B@518B5;OB 28640 A0<> A2>8B5 3@C?8
+Categories: 0B53>@88
+categories-enabled-help: :B828@0 ?>44@J6:0B0 =0 :0B53>@88 AJ18B8O.
+Categories enabled: 0B53>@88B5 A0 0:B828@0=8
+Nonuser: 5-?>B@518B5;A:8 :0;5=40@8
+nonuser-enabled-help: :> 5 0:B828@0=>, 04<8=8AB@0B>@8B5 I5 8<0B 2J7<>6=>ABB0 40 4>102OB =5-?>B@518B5;A:8 :0;5=40@8
+Nonuser enabled: 5-?>B@518B5;A:8B5 :0;5=40@8 A0 0:B828@0=8
+nonuser-list-help: J45 40 1J40B ?>:0720=8 =5-?>B@518B5;A:8B5 :0;5=40@8 2 A?8AJ:0 A CG0AB=8F8
+Nonuser list: >:0720=5 2 A?8AJ:0 A CG0AB=8F8
+Top: 09->B3>@5
+Bottom: 09->B4>;C
+Reports: >:;048
+reports-enabled-help: :> 5 0:B828@0=>, ?>B@518B5;8B5 I5 28640B @0745; ">:;048" 2 4J=>B> =0 2AO:0 AB@0=8F0 8 I5 A0 2 AJAB>O=85 40 AJ74020B A?5F8D8G=8 4>:;048.   4>?J;=5=85, 04<8=8AB@0B82=8B5 ?>B@518B5;8 <>30B 40 AJ74020B 3;>10;=8 4>:;048, :>8B> I5 A5 ?>O2O20B 2 4J=>B> =0 2A8G:8 ?>B@518B5;A:8 AB@0=8F8.
+Reports enabled: >:;048B5 A0 0:B828@0=8
+Subscribe/Publish: 1>=8@0=5/C1;8:C20=5
+subscriptions-enabled-help: Specifies if remote users can subscribe to a WebCalendar user's calendar, allowing them to see the WebCalendar user's events in their iCal-enabled application (such as Apple's iCal or Mozilla Calendar).
+Allow remote subscriptions:  07@5H020=5 =0 01>=0<5=B >B @07AB>O=85
+Email: E-mail
+email-enabled-help: :;NG20=5 8;8 87:;NG20=5 87?@0I0=5B> =0 e-mail-8 70 8725AB8O 8 ?>4A5I0=8O. 715@5B5 "5" 0:> =0AB@>9:8B5 =0 0H8O AJ@2J@ =5 ?>72>;O20B 87?@0I0=5 =0 e-mail.
+Email enabled: E-mail-JB 5 0:B828@0=
+email-default-sender: ?@545;O e-mail 04@5AJB, :>9B> I5 1J45 ?>A>G5= :0B> "?>40B5;" :>30B> A5 87?@0I0B ?>4A5I0=8O.
+Default sender address: 4@5A =0 ?>40B5;O ?> ?>4@0718@0=5
+Default user settings: >B@518B5;A:8 =0AB@>9:8 ?> ?>4@0718@0=5
+email-event-reminders-help: ?@545;O 40;8 40 1J40B 87?@0I0=8 ?>4A5I0=8O 70 AJ18B8O.
+Event reminders: >4A5I0=8O 70 AJ18B8O
+email-event-added: ?@545;O 40;8 40 1J40B 87?@0I0=8 8725AB8O ?> e-mail :>30B> :J< :0;5=40@0 8 5 4>1025=> AJ18B85.
+Events added to my calendar: J< :0;5=40@0 <8 5 4>1025=> AJ18B85
+email-event-updated: ?@545;O 40;8 40 1J40B 87?@0I0=8 8725AB8O ?> e-mail :>30B> AJ18B85 2 :0;5=40@0 5 18;> 0:BC0;878@0=>.
+Events updated on my calendar:  :0;5=40@0 <8 5 0:BC0;878@0=> AJ18B85
+email-event-deleted: ?@545;O 40;8 40 1J40B 87?@0I0=8 8725AB8O ?> e-mail :>30B> >B :0;5=40@0 5 ?@5<0E=0B> AJ18B85.
+Events removed from my calendar: B :0;5=40@0 <8 5 ?@5<0E=0B> AJ18B85
+email-event-rejected: ?@545;O 40;8 40 1J40B 87?@0I0=8 8725AB8O ?> e-mail :>30B> =O:>9 CG0AB=8: >B:065 AJ18B85, :>5B> 5 =0 0H8O :0;5=40@.
+Event rejected by participant: !J18B85 1820 >BE2J@;5=> >B AB@0=0 =0 CG0AB=8:
+colors-help: A8G:8 F25B>25 B@O120 40 1J40B 2J2545=8 2 E5:A045F8<0;=8O D>@<0B "#RRGGBB", :J45B> "RR" 5 E5:A045F8<0;=0B0 AB>9=>AB 70 G5@25=>, "GG" 5 E5:A045F8<0;=0B0 AB>9=>AB 70 75;5=> 8 "BB" 5 E5:A045F8<0;=0B0 AB>9=>AB 70 A8=L>.
+Colors: &25B>25
+Allow user to customize colors: >B@518B5;8B5 <>30B 40 8718@0B F25B>25
+Document background: $>= =0 4>:C<5=B0
+Select: 715@8
+Document title: 03;0285 =0 4>:C<5=B0
+Document text: "5:AB =0 4>:C<5=B0
+Table grid color: &2OB =0 B01;8G=8O :>=BC@
+Table header background: $>=>2 F2OB =0 B01;8G=8O header
+Table header text: "5:AB =0 B01;8G=8O header
+Table cell background: $>= =0 B01;8G=8B5 :;5B:8
+Table cell background for current day: $>=>2 F2OB =0 B01;8G=0B0 :;5B:0 70 4=5H=8O 45=
+Table cell background for weekends: &2OB =0 B01;8G=8B5 :;5B:8 70 C8:5=48B5
+Event popup background: $>=>2 F2OB 70 popup =0 AJ18B8OB0
+Event popup text: &2OB =0 popup B5:AB0
+
+
+###############################################
+# Page: activity_log.php
+#
+Activity Log: 0?8A =0 459AB28OB0
+User: >B@518B5;
+Calendar: 0;5=40@
+Date: 0B0
+Time: @5<5
+Event: !J18B85
+Action: 59AB285
+Event created: !J18B85B> 5 2J2545=>
+Event approved: !J18B85B> 5 >4>1@5=>
+Event rejected: !J18B85B> 5 >B:070=>
+Event updated: !J18B85B> 5 0:BC0;878@0=>
+Event deleted: !J18B85B> 5 87B@8B>
+Notification sent: 725AB85B> 5 87?@0B5=>
+Reminder sent: 0?><=O=5B> 5 87?@0B5=>
+Database error: @5H:0 2 1070B0 40==8
+Previous: @548H=>
+Next: !;5420I>
+
+
+###############################################
+# Page: add_entry.php
+#
+Invalid entry id: 520;84=> id =0 70?8A0
+This is a private event and may not be added to your calendar.: ">20 5 ;8G=> AJ18B85 8 =5 <>65 40 1J45 4>1025=> :J< :0;5=40@0 8.
+Error adding event: @5H:0 ?@8 4>102O=5 =0 AJ18B85B>.
+
+
+###############################################
+# Page: admin_handler.php
+#
+Error: @5H:0
+The following error occurred: >O28 A5 A;54=0B0 3@5H:0
+
+
+###############################################
+# Page: approve_entry.php
+#
+Error approving event: @5H:0 ?@8 >4>1@5=85 =0 AJ18B85B>
+
+
+###############################################
+# Page: category.php
+#
+Add: >102O=5
+Category Name: <5 =0 :0B53>@8OB0
+Global: ;>10;=0
+Delete: 7B@820=5
+Are you sure you want to delete this entry?: !83C@=8 ;8 AB5, G5 65;05B5 40 87B@85B5 B>78 70?8A?
+Add New Category: >102O=5 =0 =>20 :0B53>@8O
+
+
+###############################################
+# Page: category_handler.php
+#
+
+
+###############################################
+# Page: datesel.php
+#
+
+
+###############################################
+# Page: day.php
+#
+Admin mode: 4<8=8AB@0B>@A:8 @568<
+Assistant mode: A8AB5=BA:8 @568<
+Generate printer-friendly version: 5=5@8@0=5 =0 873;54, C4>15= 70 >B?5G0B20=5
+Printer Friendly: #4>1=> 70 >B?5G0B20=5
+
+
+###############################################
+# Page: del_entry.php
+#
+Hello: 4@0259B5
+An appointment has been canceled for you by: 0H 0=3068<5=B 15H5 >B<5=5= >B
+The subject was: "5<0B0 15H5
+Notification: 725AB85
+
+
+###############################################
+# Page: edit_entry.php
+#
+Edit Entry:  540:B8@0=5 =0 70?8A
+Add Entry: >102O=5 =0 70?8A
+brief-description-help: A83C@O20 :@0B:> >?8A0=85 (>B >:>;> 20 7=0:0) =0 AJ18B85B>.  "> I5 ?@54AB02O AJ18B85B> ?@8 ?@53;54 =0 :0;5=40@0.
+Brief Description: @0B:> >?8A0=85
+full-description-help: A83C@O20 ?>4@>1=> >?8A0=85 =0 AJ18B85B>.  "078 8=D>@<0F8O <>65 40 1J45 ?>;CG5=0 :>30B> ?>B@518B5;OB ?@53;5640 AJ18B85B>.
+Full Description: J;=> >?8A0=85
+date-help: ?@545;O 40B0B0 =0 AJ18B85B>.
+time-help: ?@545;O 2@5<5B> =0 AJ18B85B>.<BR>715@5B5 8;8 "0A@>G5=> AJ18B85" (70 AJ18B85, :>5B> 5 70?;0=C20=> 70 B>G=> >?@545;5= G0A 2 B>78 45=), "5-=0A@>G5=> AJ18B85" (70 AJ18B85, :>5B> =O<0 :>=:@5B5= G0A (:0B> =0?@. ?@07=8:), 8;8 "&5;>4=52=> AJ18B85" (70 AJ18B85, :>5B> B@05 FO; 45= (:0B> =0?@. 40 >BAJAB20H >B >D8A0).
+am: am
+pm: pm
+Untimed event: 5-=0A@>G5=> AJ18B85
+Timed event: 0A@>G5=> AJ18B85
+All day event: &5;>4=52=> AJ18B85
+duration-help: ?@545;O ?@>4J;68B5;=>ABB0 (2 G0A>25:<8=CB8) =0 AJ18B85B>.  <BR><I>">20 ?>;5 <>65 40 1J45 >AB025=> ?@07=>.</I>
+Duration: @>4J;68B5;=>AB
+hours: G0A>25
+priority-help: ?@545;O ?@8>@8B5B0 =0 AJ18B85B>.  !J18B8O A 28A>: ?@8>@8B5B I5 1J40B 87?8A20=8 2 "bold".
+Priority: @8>@8B5B
+Low: =8AJ:
+Medium: A@545=
+High: 28A>:
+access-help: ?@545;O =82>B> =0 4>ABJ? =0 AJ18B85B>.<BR> <I>C1;8G=></I>: A5:8 <>65 40 2848 ?J;=0B0 8=D>@<0F8O 70 AJ18B85B>.  <BR><I>>=D845=F80;=></I>: @C38B5 <>30B 40 284OB, G5 8<0B5 70?;0=C20=> AJ18B85 70 B078 40B0 8 G0A, => =5 8 :0:2> B>G=> 5 B>.
+Access: >ABJ?
+Public: C1;8G=>
+Confidential: >=D845=F80;=> 
+category-help: ?@545;O :0B53>@8OB0 =0 AJ18B85B>.
+Category: 0B53>@8O
+None: 8B> 54=>
+days: 4=8
+before event: ?@548 AJ18B85B>
+participants-help: @54AB02O A?8AJ: =0 CG0AB=8F8B5 2 AJ18B85B>.
+Participants: #G0AB=8F8
+external-participants-help: ?@545;O A?8AJ:JB A CG0AB=8F8 2 AJ18B85B>, :>8B> =5 A0 ?>B@518B5;8 =0 :0;5=40@0.  >B@518B5;8B5 B@O120 40 1J40B 871@>5=8 =0 >B45;=8 @54>25 :0B> <>65 40 1J45 ?>A>G5= 8 e-mail 70 2A5:8.  :> 1J45 ?>A>G5= e-mail 04@5A, ?>B@518B5;OB 5 2 AJAB>O=85 40 ?>;CG020 8725AB8O 8 =0?><=O=8O.
+External Participants: J=H=8 CG0AB=8F8
+repeat-type-help: 715@5B5 :>;:> G5AB> B@O120 40 A5 ?>2B0@O AJ18B85B>.<I>65<5A5G=> (?> 45= >B A54<8F0B0)</I> ?>72>;O20 54=> AJ18B85 40 A5 ?>2B0@O 2 ?>A;54=8O ?>=545;=8: =0 2A5:8 <5A5F, B@5B8O G5B2J@BJ: =0 2A5:8 <5A5F 8 B.=.  <I>5A5G=> (?> 40B8)</I> ?>72>;O20 4045=> AJ18B85 40 A5 ?>2B0@O =0 AJI8O 45= >B <5A5F0.
+Repeat Type: 84 ?>2B>@O5<>AB
+Daily: 654=52=>
+Weekly: 65A54<8G=>
+Monthly: 65<5A5G=>
+by day: ?> 45= >B A54<8F0B0
+by day (from end): ?> 45= (>B :@0O)
+by date: ?> 40B8
+Yearly: >48H=>
+repeat-end-date-help: ?@545;O 40B0B0, 4> :>OB> A;5420 40 A5 ?>2B0@O AJ18B85B>.
+Repeat End Date: @09=0 40B0 =0 ?>2B>@5=85
+Use end date: 7?>;720=5 =0 D8=0;=0 40B0
+repeat-day-help: Specifies which days of the week the event should repeat on.  This is for use only when <I>Repeat Type</I> is set to <I>Weekly</I>.
+Repeat Day: 5= =0 ?>2B>@5=85
+for weekly: 70 565A54<8G=>
+Tuesday: B>@=8:
+Wednesday: !@O40
+Thursday: '5B2J@BJ:
+Friday: 5BJ:
+Saturday: !J1>B0
+repeat-frequency-help: Specifies how often the event should repeat.  The default 1 indicates it should occur every time.  Specifying 2 will make the event occur every other week (if <I>Repeat Type</I> is set to <I>Weekly</I>), every other month (if <I>Repeat Type</I> is set to <I>Monthly</I>), etc.
+Frequency: '5AB>B0
+Delete entry: 7B@820=5 =0 70?8A0
+You are not authorized to edit this entry: O<0B5 ?J;=><>I8O 40 @540:B8@0B5 B>78 70?8A
+
+
+###############################################
+# Page: edit_entry_handler.php
+#
+The following conflicts with the suggested time: 0;8F5 A0 A;54=8B5 :>=D;8:B8 A ?@54;>65=8O G0A
+Unnamed Event: 578<5==> AJ18B85
+The description is: ?8A0=85B> 5
+Title: WebCalendar
+A new appointment has been made for you by: 0 0A 15H5 =0A@>G5= =>2 0=3068<5=B >B
+An appointment has been updated by: 0H 0=3068<5=B 15H5 0:BC0;878@0= >B
+The subject is: "5<0B0 5
+Please look on: >;O, ?>3;54=5B5 =0
+to accept or reject this appointment: 40 ?@85<5B5 8;8 >B:065B5 B>78 0=3068<5=B
+to view this appointment: 40 ?@53;540B5 B>78 0=3068<5=B
+Scheduling Conflict: >=D;8:B ?@8 =0A@>G20=5
+Your suggested time of: @54;>65=8OB >B 0A G0A 70
+conflicts with the following existing calendar entries: 2;870 2 :>=D;8:B AJA A;54=8B5 25G5 =0;8G=8 70?8A8 2 :0;5=40@0
+Cancel: B<O=0
+
+
+###############################################
+# Page: edit_layer.php
+#
+Edit Layer:  540:B8@0=5 =0 A;>9
+Add Layer: >102O=5 =0 A;>9
+Source: 7B>G=8:
+Color: &2OB
+Duplicates: C?;8:0B8
+Show layer events that are the same as your own: >:0720=5 =0 A;>528 AJ18B8O, :>8B> AJ2?040B A 0H8B5 A>1AB25=8
+Are you sure you want to delete this layer?: !83C@=8 ;8 AB5, G5 8A:0B5 40 87B@85B5 B>78 A;>9?
+Delete layer: 7B@820=5 =0 A;>9
+
+
+###############################################
+# Page: edit_layer_handler.php
+#
+You cannot create a layer for yourself: 5 <>65B5 40 AJ74020B5 A;>525 70 A0<8B5 A515 A8
+You can only create one layer for each user: >65B5 40 AJ74045B5 A0<> 548= A;>9 70 2A5:8 ?>B@518B5;
+
+
+###############################################
+# Page: edit_user.php
+#
+Edit User:  540:B8@0=5 =0 ?>B@518B5;
+Add User: >102O=5 =0 ?>B@518B5;
+Username: >B@518B5;A:> 8<5
+First Name: <5
+Last Name: $0<8;8O
+E-mail address: E-mail 04@5A
+Password: 0@>;0
+again: >I5 254=J6
+Admin: 4<8=8AB@0B>@
+Disabled for demo: 570:B828@0=> 2 45<>-25@A8OB0
+Change Password: !<O=0 =0 ?0@>;0B0
+New Password: >20 ?0@>;0
+Set Password: ?@545;O=5 =0 ?0@>;0
+
+
+###############################################
+# Page: edit_user_handler.php
+#
+Deleting users not supported: 5 5 @07@5H5=> 87B@820=5B> =0 ?>B@518B5;8
+The passwords were not identical: 25B5 ?0@>;8 =5 AJ2?040B
+You have not entered a password: 5 AB5 2J25;8 ?0@>;0
+
+
+###############################################
+# Page: export.php
+#
+Export: :A?>@B8@0=5
+Export format: $>@<0B =0 5:A?>@B8@0=5
+Palm Pilot: Palm Pilot
+Export all dates: :A?>@B8@0=5 =0 2A8G:8 40B8
+Start date: 0G0;=0 40B0
+End date: @09=0 40B0
+Modified since: >48D8F8@0=> A;54
+
+
+###############################################
+# Page: export_handler.php
+#
+export format not defined or incorrect: $>@<0BJB =0 5:A?>@B8@0=5 =5 5 >?@545;5= 8;8 5 =5?@028;5=
+
+
+###############################################
+# Page: group_edit.php
+#
+Unnamed Group: 578<5==0 3@C?0
+Add Group: >102O=5 =0 3@C?0
+Edit Group:  540:B8@0=5 =0 3@C?0
+Group name: <5 =0 3@C?0B0
+Updated: :BC0;878@0=>
+Created by: !J74045=> >B
+Users: >B@518B5;8
+
+
+###############################################
+# Page: group_edit_handler.php
+#
+You must specify a group name: "@O120 40 CB>G=8B5 8<5B> =0 3@C?0B0
+
+
+###############################################
+# Page: groups.php
+#
+Add New Group: >102O=5 =0 =>20 3@C?0
+
+
+###############################################
+# Page: help_admin.php
+#
+
+
+###############################################
+# Page: pref.php
+#
+Preferences: @54?>G8B0=8O
+to modify the preferences for the Public Access calendar: 70 40 ?@><5=8B5 ?@54?>G8B0=8OB0 70 0;5=40@0 A ?C1;8G5= 4>ABJ?
+tz-help: ?@545;O A :>;:> G0A0 A5 @07<8=020 2@5<5B> =0 AJ@2J@0 A <5AB=>B> 2@5<5.
+Timezone Offset: '0A>20 @07;8:0
+Add N hours to: >102O=5 =0 N G0A0 :J<
+Subtract N hours from: 720640=5 =0 N G0A0 >B
+same as: AJI>B> :0B>
+server time: 2@5<5B> =0 AJ@2J@0
+Default Category: 0B53>@8O ?> ?>4@0718@0=5
+When I am the boss: >30B> 07 >?@545;O<
+Email me event notification: 7?@0B5B5 <8 8725AB85 ?> E-mail
+I want to approve events: A:0< 40 >4>1@O20< AJ18B8OB0
+allow-remote-subscriptions-help: Specifies if remote users can subscribe to your calendar, allowing them to see your events in a iCal-enabled application (such as Apple's iCal or Mozilla Calendar).
+remote-subscriptions-url-help: Displays the URL remote users should use to subscribe to your calendar.
+URL: URL
+Sun: 54
+Mon: >=
+Tue: B>
+Wed: !@O
+Thu: '5B
+Fri: 5B
+Sat: !J1
+Save Preferences: 0?078 ?@54?>G8B0=8OB0
+
+
+###############################################
+# Page: help_bug.php
+#
+Report Bug: !J>1I5B5 70 1J3
+
+
+###############################################
+# Page: help_edit_entry.php
+#
+Adding/Editing Calendar Entries: >102O=5/@540:B8@0=5 =0 70?8A8 2 :0;5=40@0
+
+
+###############################################
+# Page: help_index.php
+#
+Help Index: !J4J@60=85 =0 ><>I
+Layers: !;>525
+Import: <?>@B8@0=5
+
+
+###############################################
+# Page: help_layers.php
+#
+Layers are useful for displaying other users' events in your own calendar.  You can specifiy the user and the color the events will be displayed in.: !;>525B5 <>30B 40 1J40B 87?>;720=8 70 40 A5 ?>O2O20B AJ18B8O =0 4@C38 ?>B@518B5;8 2J2 0H8O A>1AB25= :0;5=40@.  >65B5 40 >?@545;OB5 ?>B@518B5;O 8 F25B0, 2 :>9B> I5 A5 ?>O2O20B AJ18B8OB0.
+Add/Edit/Delete: >102O=5/ 540:B8@0=5/7B@820=5
+Clicking the Edit Layers link in the admin section at the bottom of the page will allow you to add/edit/delete layers.: Clicking the Edit Layers link in the admin section at the bottom of the page will allow you to add/edit/delete layers.
+Specifies the user that you would like to see displayed in your calendar.: Specifies the user that you would like to see displayed in your calendar.
+The text color of the new layer that will be displayed in your calendar.: The text color of the new layer that will be displayed in your calendar.
+If checked, events that are duplicates of your events will be shown.: If checked, events that are duplicates of your events will be shown.
+Disabling: Disabling
+Press the Disable Layers link in the admin section at the bottom of the page to turn off layers.: Press the Disable Layers link in the admin section at the bottom of the page to turn off layers.
+Enabling: Enabling
+Press the Enable Layers link in the admin section at the bottom of the page to turn on layers.: Press the Enable Layers link in the admin section at the bottom of the page to turn on layers.
+
+
+###############################################
+# Page: help_pref.php
+#
+default-category-help: ?@545;O :0B53>@8OB0, 2 :>OB> B@O120 40 ?>?040B =>28B5 AJ18B8O ?> ?>4@0718@0=5.
+
+
+###############################################
+# Page: week.php
+#
+cont.: ?@>4J;6.
+
+
+###############################################
+# Page: layers.php
+#
+to modify the layers settings for the: 40 1J40B ?@><5=5=8 A;>528B5 =0AB@>9:8 70
+Layers are currently: >=0AB>OI5< A;>525B5 A0
+Enabled: :B828@0=8
+Disabled: 570:B828@0=8
+Disable Layers: 570:B828@0=5 =0 A;>525B5
+Enable Layers: :B828@0=5 =0 A;>525B5
+Layer: !;>9
+Edit layer:  540:B8@0=5 =0 A;>9
+Add layer: >102O=5 =0 A;>9
+
+
+###############################################
+# Page: layers_toggle.php
+#
+
+
+###############################################
+# Page: list_unapproved.php
+#
+View this entry: 86 B>78 70?8A
+Approve this entry?: 4>1@O20=5 =0 70?8A0?
+Approve/Confirm: 4>1@O20=5/>B2J@64020=5
+Reject this entry?: BE2J@;O=5 =0 70?8A0?
+Reject: BE2J@;O=5
+No unapproved events for: O<0 =5>4>1@5=8 AJ18B8O 70
+Unapproved Events: 5>4>1@5=8 AJ18B8O
+Public Access: C1;8G5= 4>ABJ?
+
+
+###############################################
+# Page: view_v.php
+#
+
+
+###############################################
+# Page: month.php
+#
+
+
+###############################################
+# Page: pref_handler.php
+#
+
+
+###############################################
+# Page: reject_entry.php
+#
+An appointment has been rejected by: An appointment has been rejected by
+
+###############################################
+# Page: search.php
+#
+Search: "J@A5=5
+Advanced Search: !?5F80;878@0=> BJ@A5=5
+Keywords: ;NG>28 4C<8
+
+
+###############################################
+# Page: search_handler.php
+#
+You must enter one or more search keywords: "@O120 40 2J2545B5 54=0 8;8 ?>25G5 :;NG>28 4C<8 70 BJ@A5=5
+Search Results:  57C;B0B8 >B BJ@A5=5B>
+match found: =0<5@5=> AJ>B25BAB285
+matches found: =0<5@5=8 AJ>B25BAB28O
+No matches found: O<0 =0<5@5=8 AJ>B25BAB28O
+
+
+###############################################
+# Page: select_user.php
+#
+View Another User's Calendar: 86 :0;5=40@8B5 =0 4@C38 ?>B@518B5;8
+Go: 0?@54
+
+
+###############################################
+# Page: set_entry_cat.php
+#
+You have not added any categories: 5 AB5 4>1028;8 =8B> 54=0 :0B53>@8O
+Set Category: 715@8 :0B53>@8O
+
+
+###############################################
+# Page: users.php
+#
+denotes administrative user: >1>7=0G020 04<8=8AB@0B82=8B5 ?>B@518B5;8
+Add New User: >102O=5 =0 =>2 ?>B@518B5;
+
+
+###############################################
+# Page: usersel.php
+#
+All: A8G:8
+Reset: =C;8@0=5
+Remove: @5<0E20=5
+Ok: 
+
+
+###############################################
+# Page: import.php
+#
+This form will allow you to import entries from the Palm Desktop Datebook.: This form will allow you to import entries from the Palm Desktop Datebook.
+Exclude private records: Exclude private records
+Datebook File: Datebook File
+This form will import vCalendar (.vcs) 1.0 events: This form will import vCalendar (.vcs) 1.0 events
+vCal File: vCal File
+
+
+###############################################
+# Page: view_entry.php
+#
+every: every
+2nd: 2-@>
+3rd: 3-B>
+4th: 4-B>
+5th: 5-B>
+1st: 1-2>
+last: ?>A;54=>
+Description: ?8A0=85
+Status: !B0BCA
+Waiting for approval: 7G0:20I8 70 >4>1@5=85
+Deleted: 7B@8B8
+Rejected: BE2J@;5=8
+External User: J=H5= ?>B@518B5;
+Approve/Confirm entry: 4>1@O20=5/>B2J@64020=5 =0 70?8A
+Reject entry: BE2J@;O=5 =0 70?8A
+Set category: 71>@ =0 :0B53>@8O
+Edit repeating entry for all dates:  540:B8@0=5 =0 ?>2B0@OI A5 70?8A 70 2A8G:8 40B8
+Edit entry for this date:  540:B8@0=5 =0 70?8A 70 B078 40B0
+This will delete this entry for all users.: 7B@820=5 =0 B>78 70?8A 70 2A8G:8 40B8
+Delete repeating event for all dates: 7B@820=5 =0 ?>2B0@OI> A5 AJ18B85 70 2A8G:8 40B8
+Delete entry only for this date: 7B@820=5 =0 70?8A A0<> 70 B078 40B0
+Edit entry:  540:B8@0=5 =0 70?8A
+This will delete the entry from your calendar.: ">20 I5 87B@85 70?8A0 >B :0;5=40@0 8.
+Do you want to add this entry to your calendar?: 5;05B5 ;8 40 4>1028B5 B>78 70?8A :J< :0;5=0@0 8?
+This will add the entry to your calendar.: ">20 I5 4>1028 70?8A0 :J< :0;5=40@0 8.
+Add to My Calendar: >102O=5 :J< >O :0;5=40@
+Email all participants: 0?8H8 5-mail 4> 2A8G:8 CG0AB=8F8
+Show activity log: >:068 70?8A =0 0:B82=>ABB0
+Hide activity log: !:@89 70?8A0 =0 0:B82=>ABB0
+Export this entry to: :A?>@B8@0=5 =0 B>78 70?8A 2
+
+
+###############################################
+# Page: view_d.php
+#
+
+
+###############################################
+# Page: view_m.php
+#
+
+
+###############################################
+# Page: view_w.php
+#
+
+
+###############################################
+# Page: views.php
+#
+Views: Views
+Add New View: Add New View
+
+
+###############################################
+# Page: views_edit.php
+#
+Unnamed View: Unnamed View
+Add View: Add View
+Edit View: Edit View
+View Name: View Name
+View Type: View Type
+Week (Users horizontal): Week (Users horizontal)
+Week (Users vertical): Week (Users vertical)
+Week (Timebar): Week (Timebar)
+Month (side by side): Month (side by side)
+Month (on same calendar): Month (on same calendar)
+
+
+###############################################
+# Page: nonusers.php
+#
+NONUSER_PREFIX not set: NONUSER_PREFIX has not been set in config.php.
+NonUser: NonUser Calendars
+Calendar ID: Calendar ID
+Add New NonUser Calendar: Add New NonUser Calendar
+
+
+###############################################
+# Page: nonusers_handler.php
+#
+
+
+###############################################
+# Page: login.php
+#
+You must enter a login and password: You must enter a login and password
+Save login via cookies so I don't have to login next time: Save login via cookies so I don't have to login next time
+Login: Login
+Access public calendar: Access public calendar
+cookies-note: <B>Note:</B> This application requires cookies to be enabled.
+
+
+###############################################
+# Page: views_edit_handler.php
+#
+You must specify a view name: You must specify a view name
+
+
+###############################################
+# Page: week_details.php
+#
+New Entry: New Entry
+Private: Private
+
+
+###############################################
+# Page: view_l.php
+#
+
+
+###############################################
+# Page: import_handler.php
+#
+Conflicting events: Conflicting events
+Errors: Errors
+Back to My Calendar: Back to My Calendar
+There was an error parsing the import file or no events were returned: There was an error parsing the import file or no events were returned
+The import file contained no data: The import file contained no data
+Event Imported: Event Imported
+
+
+###############################################
+# Page: year.php
+#
+
+
+###############################################
+# Page: edit_report.php
+#
+Tomorrow: #B@5
+Today: =5A
+Yesterday: G5@0
+Day before yesterday: =78 45=
+Next week: !;5420I0B0 A54<8F0
+This week: "078 A54<8F0
+Last week: 8=0;0B0 A54<8F0
+Week before last: >-?@548H=0B0 A54<8F0
+Next week and week after: !;5420I0B0 8 ?>-A;5420I0B0 A54<8F0
+This week and next week: "078 8 A;5420I0B0 A54<8F0
+Last week and this week: 8=0;0B0 8 B078 A54<8F0
+Last two weeks: >A;54=8B5 425 A54<8F8
+Next month: !;5420I8O <5A5F
+This month: ">78 <5A5F
+Last month: 8=0;8O <5A5F
+Month before last: >-?@548H=8O <5A5F
+Next year: !;5420I0B0 3>48=0
+This year: "078 3>48=0
+Last year: 8=0;0B0 3>48=0
+Year before last: >-<8=0;0B0 3>48=0
+Invalid report id: 520;84=> id =0 4>:;040
+Unnamed Report: 578<5=5= 4>:;04
+Add Report: >102O=5 =0 4>:;04
+Edit Report:  540:B8@0=5 =0 4>:;04
+Report name: <5 =0 4>:;040
+Current User: 0AB>OI ?>B@518B5;
+Include link in trailer: :;NG20=5 =0 ;8=: 2 B@59;J@0
+Include standard header/trailer: :;NG20=5 =0 AB0=40@B5= header/trailer
+Date range: 1E20B =0 40B0B0
+Include previous/next links: :;NG20=5 =0 ?@548H=8/A;5420I8 ;8=:>25
+Include empty dates: :;NG20=5 =0 ?@07=8 40B8
+Template variables: @><5=;828 =0 <>45;0
+Page template: >45; 70 AB@0=8F0B0
+Day template: >45; 70 45=O
+Event template: >45; 70 AJ18B85B>
+Are you sure you want to delete this report?: !83C@=8 ;8 AB5, G5 8A:0B5 40 87B@85B5 B>78 4>:;04?
+
+
+###############################################
+# Page: report.php
+#
+Approved: 4>1@5=
+Unknown: 58725AB5=
+to manage reports for the Public Access calendar: 70 40 C?@02;O20B5 4>:;048B5 70 0;5=40@0 A ?C1;8G5= 4>ABJ?
+Add new report: >102O=5 =0 =>2 4>:;04
+Manage Reports: #?@02;5=85 =0 4>:;048B5
+
+
+###############################################
+# Page: assistant_edit.php
+#
+Assistants: A8AB5=B8
+Yours assistants: 0H8B5 0A8AB5=B8
+
+
+###############################################
+# Page: view_t.php
+#
+
+
+###############################################
+# Page: assistant_edit_handler.php
+#
+
+
+###############################################
+# Page: publish.php
+#
+
+
+###############################################
+# Page: purge.php
+#
+
+
+###############################################
+# Page: help_import.php
+#
+Palm Desktop: Palm Desktop
+It should be located in your Palm directory in <tt>datebook/datebook.dat</tt> in a subdirectory named by your username.: It should be located in your Palm directory in <tt>datebook/datebook.dat</tt> in a subdirectory named by your username.
+The following entries will not be imported: The following entries will not be imported
+Entries older than the current date: Entries older than the current date
+Entries creted in the Palm Desktop that have not been HotSync'd: Entries creted in the Palm Desktop that have not been HotSync'd
+Anything imported from Palm will be overwritten during the next import (unless the event date has passed).: Anything imported from Palm will be overwritten during the next import (unless the event date has passed).
+Therefore, updates should be made in the Palm Desktop.: Therefore, updates should be made in the Palm Desktop.
+vCal: vCal
+The following formats have been tested: The following formats have been tested
+Palm Desktop 4: Palm Desktop 4
+Lotus Organizer 6: Lotus Organizer 6
+Microsoft Outlook 2002: Microsoft Outlook 2002
+
+
+###############################################
+# Page: edit_report_handler.php
+#
+Variable N not found: @><5=;820B0 N =5 15H5 >B:@8B0
+
+
+###############################################
+# Page: includes/trailer.php
+#
+Go to: 48 =0
+My Calendar: My Calendar
+Logout: 7E>4
+Another User's Calendar: 0;5=40@ =0 4@C3 ?>B@518B5;
+Add New Entry: >102O=5 =0 =>2 70?8A
+Manage Views: #?@02;5=85 =0 873;548B5
+Edit Layers:  540:B8@0=5 =0 A;>525
+Account: :0C=B
+Manage calendar of: #?@02;5=85 =0 :0;5=40@0 =0
+
+
+###############################################
+# Page: includes/connect.php
+#
+
+
+###############################################
+# Page: includes/functions.php
+#
+This event is confidential: ">20 AJ18B85 5 :>=D845=F80;=>
+exceeds limit of XXX events per day: ?@528H020 ;8<8B0 >B XXX AJ18B8O =0 45=
+You have XXX unapproved events: <0B5 XXX =0 1@>9 =5>4>1@5=8 AJ18B8O
+January: /=C0@8
+February: $52@C0@8
+March: 0@B
+April: ?@8;
+May_: 09
+June: .=8
+July: .;8
+August: 23CAB
+September: !5?B5<2@8
+October: :B><2@8
+November: >5<2@8
+Jan: /=C0@8
+Feb: $52@C0@8
+Mar: 0@B
+Apr: ?@8;
+May: 09
+Jun: .=8
+Jul: .;8
+Aug: 23CAB
+Sep: !5?B5<2@8
+Oct: :B><2@8
+Nov: >5<2@8
+Dec: 5:5<2@8
+
+
+###############################################
+# Page: includes/user.php
+#
+Invalid login: 520;84=0 @538AB@0F8O
+Invalid user login: 520;84=0 @538AB@0F8O =0 ?>B@518B5;
+
+
+###############################################
+# Page: includes/site_extras.php
+#
+Send Reminder: 7?@0B8 ?>4A5I0=5
+
+
+###############################################
+# Page: includes/translate.php
+#
+
+
+###############################################
+# Page: includes/user-ldap.php
+#
+
+
+###############################################
+# Page: includes/user-nis.php
+#
+
+
+###############################################
+# Page: includes/help_trailer.php
+#
+
+
+###############################################
+# Page: includes/init.php
+#
+
+
+###############################################
+# Page: includes/dbtable.php
+#
+
+
+###############################################
+# Page: includes/js/admin.php
+#
+Server URL is required: 78A:20 A5 URL =0 AJ@2J@0
+Server URL must end with '/': URL =0 AJ@2J@0 B@O120 40 702J@H20 A '/'
+Invalid color for document background: 520;845= D>=>2 F2OB =0 4>:C<5=B0
+Invalid color for document title: 520;845= F2OB 70 703;0285 =0 4>:C<5=B0
+Invalid color for table cell background: 520;845= F2OB 70 B01;8G=8B5 :;5B:8
+Invalid color for table grid: 520;845= F2OB 70 :>=BC@ =0 B01;8F0B0
+Invalid color for table header background: 520;845= D>=>2 F2OB 70 B01;8G=8O header
+Invalid color for table text background: 520;845= F2OB 70 B5:AB0 =0 B01;8F0B0
+Invalid color for event popup background: 520;845= D>=>2 F2OB 70 popup =0 AJ18B8OB0
+Invalid color for event popup text: 520;845= F2OB 70 B5:AB 2 popup =0 AJ18B8OB0
+Invalid color for table cell background for today: 520;845= D>=>2 F2OB 70 B01;8G=0 :;5B:0 70 4=5H=8O 45=
+Color format should be '#RRGGBB': $>@<0BJB =0 F25B0 B@O120 40 1J45 '#RRGGBB'
+
+
+###############################################
+# Page: includes/js/edit_entry.php
+#
+You have not entered a Brief Description: 5 AB5 2J25;8 @0B:> >?8A0=85
+You have not entered a valid time of day: 5 AB5 2J25;8 20;845= G0A
+The time you have entered begins before your preferred work hours.  Is this correct?: @5<5B>, :>5B> AB5 2J25;8 70?>G20 ?@548 ?@54?>G8B0=8B5 >B 0A @01>B=8 G0A>25.  ">20 ?@028;=> ;8 5?
+
+
+###############################################
+# Page: includes/js/edit_layer.php
+#
+Invalid color: 520;845= F2OB
+
+
+###############################################
+# Page: includes/js/pref.php
+#
+
+
+###############################################
+# Page: tools/send_reminders.php
+#
+This is a reminder for the event detailed below.: ">20 5 ?>4A5I0=5 70 ?>A>G5=>B> ?>-4>;C AJ18B85.
+Reminder: >4A5I0=5

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Catalan.txt
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Catalan.txt	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Catalan.txt	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,1035 @@
+# Catalan.txt
+# Translated by:
+#       Traduït
+#       traduit.com
+#       info at traduit.com
+#
+# Last update: 12 May 2004
+
+###############################################
+# Specify a charset (will be sent within meta tag for each page)
+#
+charset: iso-8859-1
+
+
+
+###############################################
+# Page: admin.php
+#
+System Settings: Configuració del sistema
+You are not authorized: No tens autorització
+Note: Nota
+Your user preferences: Preferències de l'usuari
+may be affecting the appearance of this page.: pot afectar l'aspecte d'aquesta pàgina.
+Click here: Fes clic 
+to not use your user preferences when viewing this page: per no utilitzar les preferències de l'usuari en veure aquesta pàgina
+are being ignored while viewing this page.: s'ignoren en veure aquesta pàgina.
+to load your user preferences when viewing this page: per carregar les preferències de l'usuari en veure aquesta pàgina
+Save: Desa
+Help: Ajuda
+Settings: Paràmetres
+app-name-help: Especifica el nom de l'aplicació que es mostrarà a la barra de títol del navegador a totes les pàgines i a la pàgina d'entrada.  A l'arxiu de traduccions es mirarà el valor que s'especifiqui aquí per poder oferir títols diferents per a diverses llengües.
+Application Name: Nom de l'aplicació
+server-url-help: Especifica la URL principal de l'aplicació.  Això s'inclourà en enviar recordatoris i notificacions per correu electrònic.
+Server URL: URL del servidor
+language-help: Especifica l'idioma que s'utilitza.
+Language: Idioma
+Your browser default language is: L'idioma per defecte del teu navegador és
+fonts-help: Especifica una llista de tipus de lletra del sistema que es vol fer servir (com ara "Arial,Helvetica")
+Fonts: Tipus de lletra
+custom-script-help: Permet introduir JavaScript o text de full d'estil personalitzats que s'incerirà a la capçalera HTML de cada pàgina.
+Custom script/stylesheet: Script/full d'estil personalitzat
+Yes: Sí
+No: No
+Edit: Edita
+custom-header-help: Permet incloure un fragment HTML personalitzat a l'inici de cada pàgina.
+Custom header: Capçalera personalitzada
+custom-trailer-help: Permet incloure un fragment HTML personalitzat al peu de cada pàgina.
+Custom trailer: Peu personalitzat
+preferred-view-help: Especifica la visualització per defecte (Dia, Setmana, Mes, o Any).
+Preferred view: Visualització preferida
+Day: Dia
+Week: Setmana
+Month: Mes
+Year: Any
+display-weekends-help: Inclou caps de setmana quan es visualitzen les setmanes.
+Display weekends in week view: Caps de setmana a la visualització de setmana
+yearly-shows-events-help: En la visualització d'any, mostra en negreta els dies amb esdeveniments.
+Display days with events in bold in year view: Mostra en negreta els esdeveniments en la visualització d'any
+display-desc-print-day-help: Inclou la descripció dels esdeveniments a la versió per imprimir de la visualització de dia.
+Display description in printer day view: Descripció a la versió per imprimir de la visualització de dia
+date-format-help: Especifica el format preferit de la data.
+Date format: Format de la data
+December: Desembre
+time-format-help: Especifica el format d'hora que s'utilitza: <br /><i>12 hores:</i> Mostra les hores com a 3am, 8:30pm, etc.  <br /><i>24 hores:</i> Mostra les hores com a 300, 2030, etc.
+Time format: Format d'hora
+12 hour: 12 hores
+24 hour: 24 hores
+time-interval-help: Especifica la durada dels blocs horaris en la visualització de setmana.
+Time interval: Interval de temps
+hour: hora
+minutes: minuts
+auto-refresh-help: Si està activat, les pàgines per a visualització de dia, setmana, mes, i amb la llista de pendents d'aprovar es refrescaran totes periòdicament.
+Auto-refresh calendars: Auto-refrescament de calendaris
+auto-refresh-time-help: Si l'auto Auto-refrescament està habilitat, aquí s'especifica l'interval entre cada refrescament.
+Auto-refresh time: Interval d'auto-refrescament
+require-approvals-help: Si està activat, l'usuari ha d'aprovar l'esdeveniment abans que es mostri en el seu ( llevat que s'hagi activat Mostrar pendents d'aprovar).  Fixeu-vos que configurar-ho a "No", no ocultarà les aprovacions per al calendari d'Accés Públic (si el calendari d'Accés Públic està habilitat).
+Require event approvals: Requereix aprovació d'esdeveniments
+display-unapproved-help: Especifica si els esdeveniments pendents d'aprovació es mostren al calendari.<br /> Si s'ajusta a "Sí", els esdeveniments pendents d'aprovació es mostraran al calendari (amb el text en un color diferent). <br /> Si s'ajusta a  "No", aleshores cal aprovar abans els esdeveniments pendents abans que no es mostrin al calendari.
+Display unapproved: Mostra pendents d'aprovar 
+display-week-number-help: Especifica si el número de setmana (1-52) es mostra a la visualització de mes i a la de setmana.
+Display week number: Mostra número de setmana
+display-week-starts-on: Especifica si la setmana comença diumenge o dilluns   Si s'especifica dilluns, aleshores els números de setmana seran un número de setmana ISO.
+Week starts on: La setmana comença
+Sunday: Diumenge
+Monday: Dilluns
+work-hours-help: Especifica l'interval de temps que es mostrarà a la visualització de dia.
+Work hours: Horari laboral
+From: Des de les
+to: a les
+disable-priority-field-help: Si es selecciona "Sí", s'eliminarà el camp "Prioritat" de les pàgines d'informació de l'esdeveniment, tot oferint una interfície més simple per als novells.
+Disable Priority field: Desactiva el camp Prioritat
+disable-access-field-help: Si es selecciona "Sí", s'eliminarà el camp "Accés" de les pàgines d'informació de l'esdeveniment, tot oferint  una interfície més simple per als novells.
+Disable Access field: Desactiva el camp Accés
+disable-participants-field-help: Si es selecciona "Sí", s'eliminarà el camp "Participants" de les pàgines d'informació de l'esdeveniment, tot oferint  una interfície més simple per als novells.  Si habiliteu aquesta opció, potser també vulgueu desactivar el camp "Permet visualitzar els calendaris d'altres usuaris".
+Disable Participants field: Desactiva el camp Participants
+disable-repeating-field-help: Si es selecciona "Sí", s'eliminarà el camp "Repetició" en afegir esdeveniments.  Això facilitarà una interfície més simple per als novells.
+Disable Repeating field: Desactiva el camp Repetició
+popup-includes-siteextras-help: Si està habilitat, als missatges emergents es mostrarà la configuració de permetre personalitzar camps d'esdeveniment al fitxer site_extras.php.
+Display Site Extras in popup: Mostra els Extres del Lloc al requadre emergent
+allow-html-description-help: Si està habilitat, els usuaris poden introduir HTML al camp de descripció de l'esdeveniment.   Si no s'habilita, s'ignoraran les etiquetes HTML i es mostrarà com a text net.  Avís:  Activar aquesta opció permet els usuaris vincular imatges d'altres llocs web.
+Allow HTML in Description: Permet HTML a la Descripció
+allow-view-other-help: Especifica si un usuari pot visualitzar el calendari d'un altre usuari.
+Allow viewing other user's calendars: Permet veure els calendaris d'altres usuaris
+allow-public-access-help: Si està activat, el calendari es pot fer servir com un calendari públic només de lectura que no requereix identificació d'usuaris.
+Allow public access: Permetre l'accés públic 
+public-access-view-others-help: En cas d'accés públic, s'especifica si l'usuari pot veure el calendari d'un altre usuari.
+Public access can view other users: L'accés públic pot visualitzar altres usuaris
+public-access-can-add-help: Si està habilitat, els usuaris que accedeixen al sistema mitjançant l'Accés Públic podran afegir nous esdeveniments, però no es mostraran al calendari fins que un administrador l'aprovi.
+Public access can add events: Accés Públic pot afegir esdeveniments
+public-access-add-requires-approval-help: Especifica si els esdeveniments afegits a través del compte d'accés públic requereix aprovació abans de mostrar-se.
+Public access new events require approval: Cal aprovar els esdeveniments nous d'accés públic
+public-access-sees-participants-help: Si està habilitat, els usuaris que accedeixen al calendari des del compte públic podran veure els participants de l'esdeveniment si en visualitzen els detalls.
+Public access can view participants: L'accés públic pot veure els participants
+allow-view-add-help: S'inclourà una icona '+' a les visualitzacions, permetent als usuaris afegir esdeveniments ràpidament als calendaris d'altres usuaris.
+Include add event link in views: Inclou a les visualitzacions enllaç per afegir esdeveniment
+allow-external-users-help: Especifica si es pot afegir a un esdeveniment un no-usuari de calendari.  Permet incloure com a participants d'un esdeveniment no-usuaris de calendari. 
+Allow external users: Permet usuaris externs
+external-can-receive-notification-help: Quan s'habiliten els usuaris externs i l'ús de correu electrònic, els usuaris externs poden rebre notificacions per correu electrònic en afegir, actualitzar o esborrar un esdeveniment (si se'n facilita l'adreça electrònica).
+External users can receive email notifications: Els usuaris externs poden rebre notificacions per correu electrònic
+external-can-receive-reminder-help: Quan els usuaris externs i l'ús de correu electrònic estan habilitats, els usuaris externs poden rebre recordatoris per correu electrònic (si es facilita l'adreça electrònica de l'usuari extern).
+External users can receive email reminders: Els usuaris externs poden rebre recordatoris per correu electrònic
+remember-last-login-help: Quan està habilitat, la identificació de l'usuari s'omplirà automàticament a la pàgina d'entrada (però no la contrasenya), i es carregaran les preferències de l'usuari (incloent-hi les preferències de colors i idioma).
+Remember last login: Recorda la darrera identificació
+conflict-check-help: Comprova els conflictes entre esdeveniments (dos esdeveniments programats per a la mateixa hora i la mateixa persona).  Si ho configures com a "Sí", podràs planificar igualment dos esdeveniments alhora després de confirmar un avís. Si ho configures com a "no", no es comprovaran els possibles conflictes entre esdeveniments.  Probablement vulguis posar "Sí", a fi que es produeixin les comprovacions.
+Check for event conflicts: Comprova conflictes entre esdeveniments
+conflict-months-help:Si està posada la comprovació de conflictes ("Comprova conflictes entre esdeveniments" està configurat com a "No"), aquí s'especifica el nombre de mesos endavant que cal fer aquesta comprovació.  Si trobes que afegir esdeveniments triga molt a processar-se, redueix aquest número.
+Conflict checking months: Mesos de comprovació de conflictes
+conflict-check-override-help: Permet als usuaris sobreescriure conflictes i programar dos o més esdeveniments alhora.
+Allow users to override conflicts: Permet els usuaris sobreescriure conflictes
+limit-appts-help: Permet que l'administrador del sistema pugui marcar a tot el sistema un límit per al nombre d'esdeveniments que cada usuari pugui tenir en un sol dia.
+Limit number of timed events per day: Nombre límit d'esdeveniments amb hora en un dia
+limit-appts-number-help: Especifica el nombre màxim d'esdeveniments amb hora que un usuari pot tenir en un sol dia.
+Maximum timed events per day: Màxim d'esdeveniments amb hora en un dia
+Plugins: Connectors
+plugins-enabled-help: Habilitar connectors.
+Enable Plugins: Habilita connectors
+plugins-sort-key-help: Especifica una tecla d'ordenació per al connector.  Permet que els connectors s'ordenin en un ordre específic.
+Plugin: Connector
+Groups: Grups
+groups-enabled-help: Habilita el suport de grups, permetent que els usuaris seleccionin usuaris per grups.
+Groups enabled: Grups habilitats
+user-sees-his-group-help: Si està habilitat, els usuaris no veuran els usuaris de calendari que no estiguin almenys en un dels seus grups.
+User sees only his groups: L'usuari només veu els seus grups
+Categories: Categories
+categories-enabled-help: Habilita el suport per a les categories d'esdeveniments
+Categories enabled: Categories habilitades
+Nonuser: Calendaris no d'usuari
+nonuser-enabled-help:Si està habilitat, els administradors tindran l'opció d'afegir calendaris no d'usuari
+Nonuser enabled: Calendaris No d'Usuari Habilitats
+nonuser-list-help: On mostrar els calendaris no d'usuari a la llista de participants
+Nonuser list:Mostra la llista de participants a
+Top: Inici
+Bottom: Final
+Reports: Informes
+reports-enabled-help: Si està habilitat, els usuaris veuran una secció "Informes" al peu de cada pàgina i podran crear informes personalitzats.  Addicionalment, els usuaris administradors poden crear informes globals que es mostraran al peu de les pàgines de tots els usuaris.
+Reports enabled: Informes habilitats
+Subscribe/Publish: Subscriu-te/Publica
+subscriptions-enabled-help: Especifica si els usuaris remots es poden subscriure al calendari d'un usuari de WebCalendar, permetent-los veure els esdeveniments de l'usuari WebCalendar a la seva aplicació d'iCal (com ara l'iCal d'Apple o el Mozilla Calendar).
+Allow remote subscriptions: Permet subscripcions remotes
+Email: Correu electrònic
+email-enabled-help: Activa o desactiva tots els enviaments de correu electrònic per a notificacions o recordatoris.  Posa "No" si el teu servidor no està configurat adequadament per enviar correu.
+Email enabled: Correu electrònic habilitat
+email-default-sender: Especifica l'adreça electrònica que constarà com a remitent en enviar recordatoris.
+Default sender address: Adreça remitent per defecte
+Default user settings: Paràmetres usuari per defecte
+email-event-reminders-help: Especifica si s'envien o no recordatoris d'esdeveniments. 
+Event reminders: Recordatoris d'esdeveniment 
+email-event-added: Especifica si s'envien o no notificacions per correu electrònic quan s'afegeixi un esdeveniment al teu calendari.
+Events added to my calendar: Esdeveniments afegits al meu calendari
+email-event-updated: Especifica si s'envien o no notificacions per correu electrònic quan s'actualitzi un esdeveniment al teu calendari.
+Events updated on my calendar: Esdeveniments actualitzats al meu calendari
+email-event-deleted: Especifica si s'envien o no notificacions per correu electrònic quan s'esborra un esdeveniment del teu calendari.
+Events removed from my calendar: Esdeveniments esborrats del meu calendari
+email-event-rejected:  Especifica si s'envien o no notificacions per correu electrònic quan un participant rebutgi un esdeveniment del teu calendari.
+Event rejected by participant: Esdeveniment rebutjat pel participant
+colors-help: Cal especificar tots els colors en format hexadecimal "#RRGGBB" en què "RR" és el valor hexadecimal per al vermell, "GG" el valor per al verd, i "BB" per al blau.
+Colors: Colors
+Allow user to customize colors: Permet que l'usuari personalitzi els colors
+Document background: Fons del document
+Select: Selecciona
+Document title: Títol del document
+Document text: Text del document
+Table grid color: Color de la taula
+Table header background: Color del fons de la capçalera de la taula
+Table header text: Text capçalera taula
+Table cell background: Fons de la cel·la de la taula
+Table cell background for current day: Fons de la cel·la del dia actual
+Table cell background for weekends: Fons de les cel·les de caps de setmana
+Event popup background: Fons del requadre emergent de l'esdeveniment
+Event popup text: Text del missatge emergent de l'esdeveniment
+
+
+###############################################
+# Page: activity_log.php
+#
+Activity Log: Registre d'activitats
+User: Usuari
+Calendar: Calendari
+Date: Data
+Time: Hora 
+Event: Esdeveniment
+Action: Acció
+Event created: Esdeveniment creat
+Event approved: Esdeveniment aprovat
+Event rejected: Esdeveniment rebutjat
+Event updated: Esdeveniment actualitzat
+Event deleted: Esdeveniment eliminat
+Notification sent: Notificació enviada
+Reminder sent: Recordatori enviat
+Database error: Error de base de dades
+Previous: Anterior
+Next: Següent
+
+
+###############################################
+# Page: add_entry.php
+#
+Invalid entry id: Identificació incorrecta
+This is a private event and may not be added to your calendar.: Aquest esdeveniment és privat i no el pots afegir al teu calendari.
+Error adding event: Error en afegir un esdeveniment
+
+
+###############################################
+# Page: admin_handler.php
+#
+Error: Error
+The following error occurred: S'ha produït un error
+
+
+###############################################
+# Page: approve_entry.php
+#
+Error approving event: Error en aprovar esdeveniment
+
+
+###############################################
+# Page: category.php
+#
+Add: Afegeix
+Category Name: Nom de categoria
+Global: Global
+Delete: Suprimeix
+Are you sure you want to delete this entry?: Esteu segur que voleu suprimir aquesta entrada?
+Add New Category: Afegir nova categoria
+
+
+###############################################
+# Page: category_handler.php
+#
+
+
+###############################################
+# Page: datesel.php
+#
+
+
+###############################################
+# Page: day.php
+#
+Admin mode: Mode administrador
+Assistant mode: Mode assistent
+Generate printer-friendly version: Generar versió per a impressora
+Printer Friendly: Versió per a impressora 
+
+
+###############################################
+# Page: del_entry.php
+#
+Hello: Hola
+An appointment has been canceled for you by: S'ha cancel·lat una cita cancel·la per a tu per
+The subject was: L'assumpte era
+Notification: Notificació
+
+
+###############################################
+# Page: edit_entry.php
+#
+Edit Entry: Edita Entrada
+Add Entry: Afegeix una entrada
+brief-description-help: Aquest camp permet una descripció breu (d'uns 20 caràcters) de l'esdeveniment.  Així és com es mostrarà l'esdeveniment en visualitzar el calendari.
+Brief Description: Descripció breu
+full-description-help: Aquí cal completar els detalls de l'esdeveniment.  Es pot veure aquesta informació quan un usuari visualitza l'esdeveniment.
+Full Description: Descripció completa
+date-help: Especifica la data de l'esdeveniment.
+time-help: Especifica l'hora de l'esdeveniment.<br />Seleccioneu "Esdeveniment amb hora" (per a un esdeveniment programat per a una hora determinada del dia), o bé "Esdeveniment sense hora" (per a un esdeveniment sense hora determinada (com ara un festiu), o bé "Esdeveniment dia complet" (per a un esdeveniment que ocupa tot el dia, com ara haver de sortir fora de l'oficina).
+am: am
+pm: pm
+Untimed event: Esdeveniment sense hora
+Timed event: Esdeveniment amb hora
+All day event: Esdeveniment de dia complet
+duration-help: Especifica la durada (en hores:minuts) de l'esdeveniment.  <br /><i>Aquest camp es pot deixar en blanc.</i>
+Duration: Durada
+hours: hores
+priority-help: Especifica la prioritat de l'esdeveniment.  Els esdeveniments de prioritat alta es mostraran en negreta.
+Priority: Prioritat
+Low: Baixa
+Medium: Mitjana
+High: Alta
+access-help: Especifica el nivell d'accés de l'esdeveniment.<br /> <i>Públic</i>: Tothom pot veure tots els detalls de l'esdeveniment.  <br /><i>Confidencial</i>: Els altres poden veure la teva entrada per a aquella data i hora, però no poden veure'n els detalls.
+Access: Accés
+Public: Públic
+Confidential: Confidencial
+category-help: Especifica la categoria de l'esdeveniment.
+Category: Categoria
+None: Cap
+days: dies
+before event: abans de l'esdeveniment
+participants-help: Mostra la llista de participants en aquesta entrada.
+Participants: Participants
+external-participants-help: Especifica una llista de participants per a l'esdeveniment que no són usuaris de calendari.   S'indicaran un usuari per línia i s'en pot incloure una adreça de correu electrònic.   Si s'especifica una adreça electrònica, l'usuari podrà rebre notificacions i recordatoris
+External Participants: Participants externs
+repeat-type-help: Seleccioneu amb quina assiduïtat caldria repetir l'esdeveniment. <i>Mensualment (per dia)</i> permet repetir un esdeveniment cada primer dilluns de mes, 3r dijous de mes, etc.  <i>Mensualment (per data)</i> permet repetir un esdeveniment el mateix dia de cada mes.
+Repeat Type: Tipus de repetició
+Daily: Diàriament
+Weekly: Setmanalment
+Monthly: Mensualment
+by day: per dia
+by day (from end): per dia (des del final)
+by date: per data
+Yearly: Anualment
+repeat-end-date-help: Especifica la data fins a la qual cal repetir l'esdeveniment.
+Repeat End Date: Data final de repetició
+Use end date: Utilitza data final
+repeat-day-help: Especifica quins dies de la setmana cal repetir l'esdeveniment  Aquest camp només s'ha de fer servir quan <i>Tipus de repetició</i> està configurat com a <i>Setmanalment</i>.
+Repeat Day: Dia de repetició
+for weekly: per a setmanalment
+Tuesday: Dimarts
+Wednesday: Dimecres
+Thursday: Dijous
+Friday: Divendres
+Saturday: Dissabte
+repeat-frequency-help: Especifica amb quina assiduïtat cal repetir l'esdeveniment.   El valor per defecte 1 indica que es repetirà cada vegada.   Si s'especifica 2, l'esdeveniment es repetirà cada dues setmanes (si el <i>Tipus de repetició</i> està configurat com a <i>Setmanalment</i>), cada dos mesos (si el <i>Tipus de repetició</i> està configurat com a <i>Mensualment</i>), etc.
+Frequency: Freqüència
+Delete entry: Suprimeix l'entrada
+You are not authorized to edit this entry: No tens autorització per editar aquesta entrada
+
+
+###############################################
+# Page: edit_layer.php
+#
+Edit Layer: Edita la capa
+Add Layer: Afegeix una capa
+Source: Font
+Color: Color
+Duplicates: Duplicats
+Show layer events that are the same as your own: Mostra els esdeveniments de capa que coincideixen amb els teus
+Are you sure you want to delete this layer?: Esteu segur que voleu suprimir aquest capa?
+Delete layer: Suprimeix la capa
+
+
+###############################################
+# Page: edit_layer_handler.php
+#
+You cannot create a layer for yourself: No pots crear una capa per a tu mateix
+You can only create one layer for each user: Només es pot crear una capa per usuari
+
+
+###############################################
+# Page: edit_user.php
+#
+Edit User: Edita usuari
+Add User: Afegir usuari
+Username: Nom d'usuari
+First Name: Nom
+Last Name: Cognom
+E-mail address: Adreça electrònica
+Password: Contrasenya
+again: una altra vegada
+Admin:  Administrador
+Disabled for demo: Inhabilitat per a la demo
+Change Password: Canvia la contrasenya
+New Password: Nova contrasenya
+Set Password: Defineix la contrasenya
+
+
+###############################################
+# Page: edit_user_handler.php
+#
+Deleting users not supported: L'eliminació d'usuaris no està suportada
+The passwords were not identical: Les contrasenyes no eren idèntiques
+You have not entered a password: No has introduït cap contrasenya
+
+
+###############################################
+# Page: export.php
+#
+Export: Exporta
+Export format: Format d'exportació
+Palm Pilot: Palm Pilot
+Export all dates: Exporta totes les dates
+Start date: Data inicial
+End date: Data final
+Modified since: Modificat des de
+
+
+###############################################
+# Page: export_handler.php
+#
+export format not defined or incorrect: format d'exportació no definit o incorrecte
+
+
+###############################################
+# Page: group_edit.php
+#
+Unnamed Group: Grup sense nom 
+Add Group: Afegeix un grup
+Edit Group: Edita Grup
+Group name: Nom de grup
+Updated: Actualitzat
+Created by: Creat per
+Users: Usuaris
+
+
+###############################################
+# Page: group_edit_handler.php
+#
+You must specify a group name: Cal especificar un nom de grup
+
+
+###############################################
+# Page: groups.php
+#
+Add New Group: Afegeix grup nou
+
+
+###############################################
+# Page: icalfb.php
+#
+
+
+###############################################
+# Page: pref.php
+#
+Preferences: Preferències
+to modify the preferences for the Public Access calendar: per modificar les preferències per al calendari d'Accés Públic
+tz-help: Especifica les hores de diferència per ajustar l'hora del servidor a l'hora local
+Timezone Offset: Franja horària
+Add N hours to: Afegir N hores a 
+Subtract N hours from: Restar N hores de
+same as: igual que
+server time: hora del servidor 
+Default Category: Categoria per defecte
+When I am the boss: Quan sóc <i>qui talla el bacallà</i>
+Email me event notification: Notificació per correu electrònic
+I want to approve events: Vull aprovar els esdeveniments
+allow-remote-subscriptions-help: Especifica si els usuaris remots es poden subscriure al teu calendari, permetent-los de veure el teu calendari amb una aplicació habilitada per a iCal (com ara l'Ical d'Apple o el Mozilla Calendar).
+remote-subscriptions-url-help: Mostra la URL que haurien de fer servir els usuaris remots per subscriure's al teu calendari.
+URL: URL
+Sun: Dg
+Mon:  Dl
+Tue: Dm  
+Wed: Dx
+Thu: Dj
+Fri: Dv
+Sat: Ds
+Save Preferences: Desa Preferències
+
+
+###############################################
+# Page: help_bug.php
+#
+Report Bug: Notifica l'error
+
+
+###############################################
+# Page: help_edit_entry.php
+#
+Adding/Editing Calendar Entries: Afegir/Editar entrades de calendari
+
+
+###############################################
+# Page: help_index.php
+#
+Help Index: Índex de l'ajuda
+Layers: Capes
+Import: Importa
+
+
+###############################################
+# Page: help_layers.php
+#
+Layers are useful for displaying other users' events in your own calendar.  You can specifiy the user and the color the events will be displayed in.: Les capes van bé per mostrar els esdeveniments d'altres usuaris en el teu propi calendari.  Pots especificar l'usuari i el color en què es mostraran els esdeveniments.
+Add/Edit/Delete: Afegeix/Edita/Suprimeix
+Clicking the Edit Layers link in the admin section at the bottom of the page will allow you to add/edit/delete layers.: En clicar l'enllaç Edita Capes a la secció d'administració al peu de la pàgina podràs afegir/editar/suprimir capes.
+Specifies the user that you would like to see displayed in your calendar.: Especifica l'usuari que t'agradaria que es mostrés al teu calendari.
+The text color of the new layer that will be displayed in your calendar.: El color de text de la nova capa que es mostrarà al teu calendari.
+If checked, events that are duplicates of your events will be shown.: Si està activat, es mostraran els esdeveniments coincidents.
+Disabling: Desactiva
+Press the Disable Layers link in the admin section at the bottom of the page to turn off layers.: Pitja l'enllaç Desactivar Capes a la secció d'administració al peu de la pàgina a fir de desactivar les capes.
+Enabling:  Activa
+Press the Enable Layers link in the admin section at the bottom of the page to turn on layers.: Pitja l'enllaç Activar Capes a la secció d'administració al peu de la pàgina a fir de activar les capes.
+
+
+###############################################
+# Page: help_admin.php
+#
+
+
+###############################################
+# Page: week.php
+#
+cont.: cont.
+
+
+###############################################
+# Page: layers.php
+#
+to modify the layers settings for the: per modificar la configuració de les capes per a
+Layers are currently: Les capes ara estan
+Enabled: Habilitat
+Disabled: Inhabilitat
+Disable Layers: Desactiva les capes
+Enable Layers: Activa les capes
+Layer: Capa
+Edit layer: Edita capa
+Add layer: Afegeix capa
+
+
+###############################################
+# Page: layers_toggle.php
+#
+
+
+###############################################
+# Page: list_unapproved.php
+#
+View this entry: Visualitza aquesta entrada
+Approve this entry?: Vols aprovar aquesta entrada?
+Approve/Confirm: Aprova/Confirma
+Reject this entry?: Rebutges aquesta entrada?
+Reject: Rebutja
+No unapproved events for: No hi ha esdeveniments pendents d'aprovar per a
+Unapproved Events: Esdeveniments pendents d'aprovar
+Public Access: Accés públic
+
+
+###############################################
+# Page: view_entry.php
+#
+every: cada
+2nd: 2n
+3rd: 3r
+4th: 4t
+5th: 5è
+1st: 1r
+last: últim
+Description: Descripció
+Status: Estat
+Waiting for approval: Pendent d'aprovació 
+Deleted: Suprimit
+Rejected: Rebutjat
+External User: Usuari extern
+Approve/Confirm entry: Aprova/Confirma entrada
+Reject entry: Rebutja entrada
+Set category: Fixa categoria
+Edit repeating entry for all dates: Edita entrada amb repetició per a totes les dates
+Edit entry for this date: Edita entrada per a aquesta data
+This will delete this entry for all users.: Això suprimirà aquesta entrada per a tots els usuaris.
+Delete repeating event for all dates: Suprimeix l'esdeveniment per a totes les dates
+Delete entry only for this date: Suprimeix l'entrada només per a aquesta data
+Edit entry: Edita entrada
+This will delete the entry from your calendar.: Suprimeix l'entrada del teu calendari.
+Do you want to add this entry to your calendar?: Vols afegir aquesta entrada al teu calendari?
+This will add the entry to your calendar.: Afegeix l'entrada al teu calendari.
+Add to My Calendar: Afegeix al meu Calendari
+Email all participants: Envia un correu electrònic a tots els participants
+Show activity log: Mostra el registre d'activitat 
+Hide activity log: Oculta el registre d'activitat
+Export this entry to: Exporta aquesta entrada a
+
+
+###############################################
+# Page: view_v.php
+#
+
+
+###############################################
+# Page: month.php
+#
+
+
+###############################################
+# Page: pref_handler.php
+#
+
+
+###############################################
+# Page: reject_entry.php
+#
+An appointment has been rejected by: Una cita ha estat rebutjatda per
+The description is: La descripció és
+Title: WebCalendar
+
+
+###############################################
+# Page: search.php
+#
+Search: Cerca
+Advanced Search: Recerca avançada
+Keywords: Mots clau
+
+
+###############################################
+# Page: search_handler.php
+#
+You must enter one or more search keywords: Cal introduir un o més mots clau de cerca
+Search Results: Resultats de la cerca
+match found: coincidència trobada
+matches found: coincidències trobades
+No matches found: No s'han trobat coincidències
+
+
+###############################################
+# Page: select_user.php
+#
+View Another User's Calendar: Visualitza el calendari d'un altre usuari
+Go: Vés
+
+
+###############################################
+# Page: publish.php
+#
+
+
+###############################################
+# Page: users.php
+#
+denotes administrative user: vol dir usuari administratiu
+Add New User: Afegeix usuari nou
+
+
+###############################################
+# Page: usersel.php
+#
+All: Totes
+Reset: Reinicialitza
+Remove: Elimina
+Ok: D'acord
+Cancel: Cancel·la
+
+
+###############################################
+# Page: import.php
+#
+This form will allow you to import entries from the Palm Desktop Datebook.: Aquest formulari et permet importar entrades des del Palm Desktop Datebook.
+Exclude private records: Exclou registres privats
+Datebook File: Fitxer Datebook
+This form will import vCalendar (.vcs) 1.0 events: Aquest formulari importa esdeveniments de vCalendar 1.0 (.vcs).
+vCal File: Fitxer vCal
+This form will import iCalendar (.ics) events: Aquest formulari importa esdeveniments d'iCalendar (.ics)
+iCal File: Fitxer iCal
+Overwrite Prior Import: Sobreescriu Importació Prèvia
+
+
+###############################################
+# Page: year.php
+#
+
+
+###############################################
+# Page: view_d.php
+#
+
+
+###############################################
+# Page: view_m.php
+#
+
+
+###############################################
+# Page: view_w.php
+#
+
+
+###############################################
+# Page: views.php
+#
+Views: Visualitzacions
+Add New View: Afegeix Visualització Nova
+
+
+###############################################
+# Page: views_edit.php
+#
+Unnamed View: Visualització sense nom
+Add View: Afegeix visualització
+Edit View: Edita visualització
+View Name: Nom de visualització
+View Type: Tipus de visualització
+Week (Users horizontal): Setmana (Usuaris horitzontal)
+Week (Users vertical): Setmana (Usuaris vertical)
+Week (Timebar): Setmana (Línia del temps)
+Month (side by side): Mes (de costat)
+Month (on same calendar): Mes (del mateix calendari)
+
+
+###############################################
+# Page: nonusers.php
+#
+NONUSER_PREFIX not set: No s'ha configurat NONUSER_PREFIX a config.php.
+NonUser: Calendaris no d'usuari
+Calendar ID: ID de Calendari 
+Add New NonUser Calendar: Afegeix Nou Calendari de No-Usuari
+
+
+###############################################
+# Page: nonusers_handler.php
+#
+
+
+###############################################
+# Page: view_l.php
+#
+
+
+###############################################
+# Page: help_pref.php
+#
+default-category-help: Especifica la categoria per defecte de cada nou esdeveniment.
+
+
+###############################################
+# Page: report.php
+#
+Private: Privat
+Approved: Aprovat
+Unknown: Desconegut
+to manage reports for the Public Access calendar: per gestionar informes per al calendari d'Accés Públic
+Add new report: Afegir informe nou
+Invalid report id: Id d'informe invàlida
+Manage Reports: Gestiona informes
+
+
+###############################################
+# Page: login.php
+#
+You must enter a login and password: Cal introduir un usuari i contrasenya
+Save login via cookies so I don't have to login next time: Desa la identificació mitjançant galetes per no haver d'introduir-ho la propera vegada
+Login: Entrada
+Access public calendar: Calendari d'accés públic
+cookies-note: <b>Nota:</b>: Aquesta aplicació requereix tenir les galetes habilitades.
+
+
+###############################################
+# Page: views_edit_handler.php
+#
+You must specify a view name: Cal especificar un nom de visualització
+
+
+###############################################
+# Page: week_details.php
+#
+New Entry: Nova Entrada
+
+
+###############################################
+# Page: import_handler.php
+#
+Import Results: Importar resultats
+Events successfully imported: Esdeveniments importats correctament
+Events from prior import marked as deleted: Esdeveniments de la importació anterior marcats com a eliminats
+Conflicting events: Esdeveniments en conflicte
+Errors: Errors
+Back to My Calendar: Endarrere al meu Calendari
+There was an error parsing the import file or no events were returned: S'ha produït un error en processar el fitxer d'importació o no s'ha recuperat cap esdeveniment
+The import file contained no data: El fitxer d'importació no conté cap dada
+The following conflicts with the suggested time: Hi ha un conflicte amb l'hora suggerida
+Unnamed Event: Esdeveniment sense nom 
+Scheduling Conflict: Conflicte en la planificació
+conflicts with the following existing calendar entries: provoca un conflicte amb les següents entrades actuals del calendari
+Event Imported: Esdeveniment importat
+
+
+###############################################
+# Page: edit_report.php
+#
+Tomorrow: Demà
+Today: Avui
+Yesterday: Ahir
+Day before yesterday: Abans d'ahir
+Next week: Propera setmana
+This week: Aquesta setmana
+Last week: Setmana passada
+Week before last: Setmana abans de la darrera
+Next week and week after: Propera setmana i la següent
+This week and next week: Aquesta setmana i la següent 
+Last week and this week: Setmana passada i aquesta
+Last two weeks: Les darreres dues setmanes
+Next month: Mes vinent
+This month: Aquest mes
+Last month: Mes passat
+Month before last: Mes abans de l'últim
+Next year: Any vinent
+This year: Aquest any
+Last year: Any passat
+Year before last: Any abans de l'últim
+Unnamed Report: Informe sense nom 
+Add Report: Afegir Informe
+Edit Report: Edita Informe
+Report name: Informe Program class as used by the window manager
+Current User: Usuari actual
+Include link in trailer: Inclou enllaç al peu
+Include standard header/trailer: Inclou encapçalament/peu estàndard
+Date range: Abast de data
+Include previous/next links: Inclou enllaços anterior/següent
+Include empty dates: Inclou dates buides
+Template variables: Variables de plantilla
+Page template: Plantilla de pàgina
+Day template: Plantilla de dia
+Event template: Plantilla d'esdeveniment 
+Are you sure you want to delete this report?: Esteu segur que voleu suprimir aquest informe?
+
+
+###############################################
+# Page: assistant_edit.php
+#
+Assistants: Assistents
+Yours assistants: Els vostres assistents
+
+
+###############################################
+# Page: view_t.php
+#
+
+
+###############################################
+# Page: assistant_edit_handler.php
+#
+
+
+###############################################
+# Page: adminhome.php
+#
+Account: Compte
+NonUser Calendars: Calendaris no d'usuari
+Delete Events: Suprimeix esdeveniments
+Public Preferences: Preferències públiques
+Unapproved Public Events: Esdeveniments públics pendents d'aprovar
+Administrative Tools: Eines administratives
+
+
+###############################################
+# Page: purge.php
+#
+Purging events for: Depura els esdeveniments per a
+Finished: Ha finalitzat
+Delete all events before: Suprimeix tots els esdeveniments abans de
+Check box to delete <b>ALL</b> events for a user: Marca la casella per suprimir <b>TOTS</b> els esdeveniments d'un usuari
+Are you sure you want to delete events for: Esteu segur que voleu suprimir els esdeveniments per a
+
+
+###############################################
+# Page: help_import.php
+#
+Palm Desktop: Palm Desktop
+It should be located in your Palm directory in <tt>datebook/datebook.dat</tt> in a subdirectory named by your username.: Hauria d'estar en el teu directori Palm a <tt>datebook/datebook.dat</tt> en un subdirectori amb el teu nom d'usuari.
+The following entries will not be imported: Les entrades següents no s'importaran
+Entries older than the current date: Entrades anteriors a la data actual
+Entries created in the Palm Desktop that have not been HotSync'd: Entrades creades al Palm Desktop que no han estat sincronitzades mitjançant HotSync
+Anything imported from Palm will be overwritten during the next import (unless the event date has passed).: Qualsevol cosa importada des del Palm quedarà sobreescrita durant la propera importació (llevat que ja s'hagi superat la data de l'esdeveniment).
+Therefore, updates should be made in the Palm Desktop.: Per tant, caldria realitzar les actualitzacions al Palm Desktop.
+vCal: vCal
+The following formats have been tested: S'han comprovat els formats següents
+Palm Desktop 4: Palm Desktop 4
+Lotus Organizer 6: Lotus Organizer 6
+Microsoft Outlook 2002: Microsoft Outlook 2002
+iCalendar: iCalendar
+Enabling <b>Overwrite Prior Import</b> will cause events imported previously that used the same UID as an event from the new import file to be marked as deleted.  This should allow an updated iCalendar file to be imported without creating duplicates.: En activar <b>Sobreescriu importació anterior</b>, els esdeveniments importats prèviament amb la mateixa UID que un esdeveniment del fitxer d'importació nou queden marcats com a eliminats.  Això permet importar un fitxer iCalendar actualitzat sense crear duplicats
+
+
+###############################################
+# Page: edit_report_handler.php
+#
+Variable N not found: No s'ha trobat la variable N
+
+
+###############################################
+# Page: edit_entry_handler.php
+#
+A new appointment has been made for you by: T'ha estat assignada una nova cita per
+An appointment has been updated by: Una cita ha estat actualitzada per 
+The subject is: L'assumpte és
+Please look on: Sisplau comprova
+to accept or reject this appointment: per acceptar o rebutjar aquesta cita
+to view this appointment: per visualitzar aquesta cita
+Your suggested time of: La teva hora suggerida de
+
+
+###############################################
+# Page: set_entry_cat.php
+#
+You have not added any categories: No has afegit cap categoria
+Set Category: Fixa Categoria
+
+
+###############################################
+# Page: edit_template.php
+#
+Edit Custom Script/Stylesheet: Edita Script/Full d'estil personalitzat
+Edit Custom Header: Edita Encapçalament Personalitzat
+Edit Custom Trailer: Edita Peu Personalitzat
+
+
+###############################################
+# Page: includes/trailer.php
+#
+Go to: Vés a
+My Calendar: El meu Calendari
+Logout: Sortida
+Another User's Calendar: Calendari d'un altre usuari
+Add New Entry: Afegeix entrada nova
+Manage Views: Gestiona Visualitzacions
+Manage calendar of: Gestiona calendari de
+
+
+###############################################
+# Page: includes/connect.php
+#
+
+
+###############################################
+# Page: includes/user.php
+#
+Invalid login: Usuari invàlid
+Invalid user login: Identificació d'usuari invàlida
+
+
+###############################################
+# Page: includes/site_extras.php
+#
+Send Reminder: Envia recordatori
+
+
+###############################################
+# Page: includes/translate.php
+#
+
+
+###############################################
+# Page: includes/user-ldap.php
+#
+
+
+###############################################
+# Page: includes/user-nis.php
+#
+
+
+###############################################
+# Page: includes/help_trailer.php
+#
+
+
+###############################################
+# Page: includes/dbtable.php
+#
+
+
+###############################################
+# Page: includes/init.php
+#
+
+
+###############################################
+# Page: includes/functions.php
+#
+This event is confidential: Aquest esdeveniment és confidencial
+exceeds limit of XXX events per day: excedeix el límit de XXX esdeveniments per dia.
+You have XXX unapproved events: Tens XXX esdeveniments pendents d'aprovar
+January: Gener
+February: Febrer
+March: Març
+April: Abril
+May_: Maig
+June: Juny
+July: Juliol
+August: Agost
+September: Setembre
+October: Octubre
+November: Novembre
+Jan: Gen
+Feb: Feb
+Mar: Mar
+Apr: Abr
+May: Mai
+Jun: Jun
+Jul: Jul
+Aug: Ago
+Sep: Set
+Oct: Oct
+Nov: Nov
+Dec: Des
+
+
+###############################################
+# Page: includes/js/admin.php
+#
+Server URL is required: Cal URL de Servidor
+Server URL must end with '/': La URL del Servidor ha d'acabar amb '/'
+Invalid color for document background: Color invàlid per al fons del document
+Invalid color for document title: Color invàlid per al títol del document
+Invalid color for table cell background:Color invàlid per al fons de cel·les de taula
+Invalid color for table grid: Color invàlid per a la graella de la taula
+Invalid color for table header background:Color invàlid per al fons de la capçalera de la taula
+Invalid color for table text background:Color invàlid per al fons del text de la taula
+Invalid color for event popup background:Color invàlid per al fons d'un missatge emergent
+Invalid color for event popup text:Color invàlid per al text del missatge emergent
+Invalid color for table cell background for today:Color invàlid per al fons de la cel·la d'avui
+Color format should be '#RRGGBB':  El format del color hauria de ser '#RRGGBB'
+
+
+###############################################
+# Page: includes/js/edit_entry.php
+#
+You have not entered a Brief Description: No has introduït cap Descripció Breu
+You have not entered a valid time of day: No has introduït cap hora vàlida
+The time you have entered begins before your preferred work hours.  Is this correct?: L'hora introduïda comença abans de les teves hores laborals indicades a les preferències   És correcte?
+
+
+###############################################
+# Page: includes/js/edit_layer.php
+#
+Invalid color: Color invàlid
+
+
+###############################################
+# Page: includes/js/pref.php
+#
+
+
+###############################################
+# Page: tools/send_reminders.php
+#
+This is a reminder for the event detailed below.: Això és un recordatori per a l'esdeveniment detallat a continuació.
+Reminder: Recordatori

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Chinese-Big5.txt
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Chinese-Big5.txt	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Chinese-Big5.txt	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,1865 @@
+# Use this as a starting point to translate this application into
+# another language.  The format is "English text: translated text"
+# There cannot be a ":" in the English text.
+# Translated by: Liang-Kuan Liu <lianguan at pchome.com.tw>
+# Last update: 15 February 2001
+# Translation last updated on 03-10-2004
+
+
+###############################################
+# Specify a charset (will be sent within meta tag for each page)
+#
+charset: Big5
+
+
+
+###############################################
+# Page: admin.php
+#
+#
+# << MISSING >>
+# System Settings:
+You are not authorized: ±z¥¼¸g±ÂÅv
+#
+# << MISSING >>
+# Note:
+#
+# << MISSING >>
+# Your user preferences:
+#
+# << MISSING >>
+# may be affecting the appearance of this page.:
+#
+# << MISSING >>
+# Click here:
+#
+# << MISSING >>
+# to not use your user preferences when viewing this page:
+#
+# << MISSING >>
+# are being ignored while viewing this page.:
+#
+# << MISSING >>
+# to load your user preferences when viewing this page:
+Save: Àx¦s
+Help: »¡©ú
+Settings: ³]©w¤¤
+#
+# << MISSING >>
+# app-name-help:
+# English text: Specifies the name of the application that will appear in the browser title bar for all pages and on the login page.  The value you specify here will be looked up in the translations file allowing you to provide different titles for different languages.
+#
+#
+# << MISSING >>
+# Application Name:
+#
+# << MISSING >>
+# server-url-help:
+# English text: Specifies the base URL for the application.  This will be included when sending out email reminders and notifications.
+#
+#
+# << MISSING >>
+# Server URL:
+language-help: Specifies which language to use.
+Language: »y¨t
+Your browser default language is: §AªºÂsÄý¾¹¹w³]ªº»y¨t¬O
+#
+# << MISSING >>
+# fonts-help:
+# English text: Specifies a list of system fonts to use (such as "Arial, Helvetica")
+#
+#
+# << MISSING >>
+# Fonts:
+#
+# << MISSING >>
+# custom-script-help:
+# English text: Allows entry of custom Javascript or stylesheet text that will be inserted into the HTML "head" section of every page.
+#
+#
+# << MISSING >>
+# Custom script/stylesheet:
+Yes: ¬O
+No: §_
+#
+# << MISSING >>
+# Edit:
+#
+# << MISSING >>
+# custom-header-help:
+# English text: Allows a custom HTML snippet to be included in the top of every page.
+#
+#
+# << MISSING >>
+# Custom header:
+#
+# << MISSING >>
+# custom-trailer-help:
+# English text: Allows a custom HTML snippet to be included at the end of every page.
+#
+#
+# << MISSING >>
+# Custom trailer:
+preferred-view-help: Specifies the default view (Day, Week, Month, or Year).
+Preferred view: À˵ø¿ï¾Ü
+Day: ¤é
+Week: ¶g
+Month: ¤ë
+Year: ¦~
+#
+# << MISSING >>
+# display-weekends-help:
+# English text: Include weekends when viewing a week.
+#
+#
+# << MISSING >>
+# Display weekends in week view:
+#
+# << MISSING >>
+# yearly-shows-events-help:
+# English text: On the yearly view, display days that contain events in a bold font.
+#
+#
+# << MISSING >>
+# Display days with events in bold in year view:
+#
+# << MISSING >>
+# display-desc-print-day-help:
+# English text: Include event descriptions in printer-friendly version of day view.
+#
+#
+# << MISSING >>
+# Display description in printer day view:
+#
+# << MISSING >>
+# date-format-help:
+# English text: Specifies the preferred date format.
+#
+#
+# << MISSING >>
+# Date format:
+December: ¤Q¤G¤ë
+time-format-help: Specifies which time format to use: <br /><i>12 hour:</i> Display times as 3am, 8:30pm, etc.  <br /><i>24 hour:</i> Display times as 300, 2030, etc.
+Time format: ®É¶¡®æ¦¡
+12 hour: 12®É¨î
+24 hour: 24®É¨î
+#
+# << MISSING >>
+# time-interval-help:
+# English text: Specifies how long the time blocks in the week view and day view will be.
+#
+#
+# << MISSING >>
+# Time interval:
+#
+# << MISSING >>
+# hour:
+minutes: ¤À
+#
+# << MISSING >>
+# auto-refresh-help:
+# English text: When enabled, the day view, week view, month view, and list aunapproved pages will all automatically refresh themselves periodically.
+#
+#
+# << MISSING >>
+# Auto-refresh calendars:
+#
+# << MISSING >>
+# auto-refresh-time-help:
+# English text: If Auto-refresh is enabled, this specifies the time between each refresh.
+#
+#
+# << MISSING >>
+# Auto-refresh time:
+#
+# << MISSING >>
+# require-approvals-help:
+# English text: When enabled, a user must approve an event before it is displayed on their calendar (unless Display unapproved is enabled).  Note setting this to "No" will not turn off approvals for the Public Access calendar (if the Public Access calendar is enabled).
+#
+#
+# << MISSING >>
+# Require event approvals:
+display-unapproved-help: Specifies whether unapproved events are displayed in your calendar.<br /> If set to "Yes", then unapproved events will be displayed in your calendar (in a different text color).<br /> If set to "No", then unapproved events must be approved before they are displayed in your calendar.
+Display unapproved: Åã¥Ü¥¼®Ö­ãªº
+display-week-number-help: Specifies whether the week number (1-52) should be displayed in the month view and the week view.
+Display week number: Åã¥Ü¶g¼Æ(¥H¦~­pºâ)
+display-week-starts-on: Specifies whether the week starts on Sunday or Monday.  If Monday is specified, then week numbers will be ISO week numbers.
+Week starts on: ¨C¶g¶}©l©ó
+Sunday: ¬P´Á¤é
+Monday: ¬P´Á¤@
+work-hours-help: Specifies the time range to display for the day view.
+Work hours: ¤ë¾ä¥iÅã¥Ü¤§¤u§@®É¶¡
+From: ¦Û
+to: ¦Ü
+#
+# << MISSING >>
+# disable-priority-field-help:
+# English text: Selecting "Yes" will remove the "Priority" field from event information pages, providing a simpler interface for novices.
+#
+#
+# << MISSING >>
+# Disable Priority field:
+#
+# << MISSING >>
+# disable-access-field-help:
+# English text: Selecting "Yes" will remove the "Access" field from event information pages, providing a simpler interface for novices.
+#
+#
+# << MISSING >>
+# Disable Access field:
+#
+# << MISSING >>
+# disable-participants-field-help:
+# English text: Selecting "Yes" will remove the "Particpants" field from event information pages, preventing users from adding other users to their events.  If you enable this option, you may want to also disable the "Allow viewing other user's calendars" field also.
+#
+#
+# << MISSING >>
+# Disable Participants field:
+#
+# << MISSING >>
+# disable-repeating-field-help:
+# English text: Selecting "Yes" will remove the "Repeating" field when adding events.  This will provide a simpler interface for novices.
+#
+#
+# << MISSING >>
+# Disable Repeating field:
+#
+# << MISSING >>
+# popup-includes-siteextras-help:
+# English text: If enabled, allow custom event fields setup in the site_extras.php file will be displayed in event popups.
+#
+#
+# << MISSING >>
+# Display Site Extras in popup:
+#
+# << MISSING >>
+# allow-html-description-help:
+# English text: If enabled, users can enter HTML in the event description field.  If not enabled, the HTML tags will be escaped so as to appear as plain text.  Warning: Enabling this feature will allow users to reference images on other websites.
+#
+#
+# << MISSING >>
+# Allow HTML in Description:
+#
+# << MISSING >>
+# allow-view-other-help:
+# English text: Specifies whether one user may view another user's calendar.
+#
+#
+# << MISSING >>
+# Allow viewing other user's calendars:
+#
+# << MISSING >>
+# allow-public-access-help:
+# English text: When enabled, the calendar can be used as a read-only public calendar that does not require users to login.
+#
+#
+# << MISSING >>
+# Allow public access:
+#
+# << MISSING >>
+# public-access-view-others-help:
+# English text: When access the system with public access, specifies whether the user can view the calendar of another calendar user.
+#
+#
+# << MISSING >>
+# Public access can view other users:
+#
+# << MISSING >>
+# public-access-can-add-help:
+# English text: When enabled, users that access the system through Public Access will be able to add new events, but they will not show up in the calendar until an administrator approves the new event.
+#
+#
+# << MISSING >>
+# Public access can add events:
+#
+# << MISSING >>
+# public-access-add-requires-approval-help:
+# English text: Specifies whether events added via the public access account require approval before being displayed.
+#
+#
+# << MISSING >>
+# Public access new events require approval:
+#
+# << MISSING >>
+# public-access-sees-participants-help:
+# English text: If enabled, users accessing the calendar from the public account will be able to see event participants if they view details of an event.
+#
+#
+# << MISSING >>
+# Public access can view participants:
+#
+# << MISSING >>
+# allow-view-add-help:
+# English text: A '+' icon will be included in views, allowing users to quickly add events to other users' calendars.
+#
+#
+# << MISSING >>
+# Include add event link in views:
+#
+# << MISSING >>
+# allow-external-users-help:
+# English text: Specifies whether a non-calendar user can be added to an event.  This allows non-calendar users to be listed as event participants.
+#
+#
+# << MISSING >>
+# Allow external users:
+#
+# << MISSING >>
+# external-can-receive-notification-help:
+# English text: When external users are enabled and email usage is enabled, external users can receive email notifications when the event is added, updated or delete (if the external user's email address is provided).
+#
+#
+# << MISSING >>
+# External users can receive email notifications:
+#
+# << MISSING >>
+# external-can-receive-reminder-help:
+# English text: When external users are enabled and email usage is enabled, external users can receive email reminders (if the external user's email address is provided).
+#
+#
+# << MISSING >>
+# External users can receive email reminders:
+#
+# << MISSING >>
+# remember-last-login-help:
+# English text: When enabled, the user's login will be filled in for them on the login page (but not the password), and the user's preferences will be loaded (including their preferred colors and language selection).
+#
+#
+# << MISSING >>
+# Remember last login:
+#
+# << MISSING >>
+# conflict-check-help:
+# English text: Check for event conflicts (two events scheduled for the same time for the same person).  If you set this to "Yes", you will still be able to schedule two events at the same time after confirming a warning. If you set this to "No", no checking for conflicts will be done.  You probably want to set this to "Yes", so conflict checking occurs.
+#
+#
+# << MISSING >>
+# Check for event conflicts:
+#
+# << MISSING >>
+# conflict-months-help:
+# English text: If conflict checking is in place ("Check for event conflicts" is set to "No"), this specifies how many months into the future we should check for conflicts.  If you find adding events is taking a long time to process, reduce this number.
+#
+#
+# << MISSING >>
+# Conflict checking months:
+#
+# << MISSING >>
+# conflict-check-override-help:
+# English text: Allows users to override event conflicts and schedule two or more events for the same time.
+#
+#
+# << MISSING >>
+# Allow users to override conflicts:
+#
+# << MISSING >>
+# limit-appts-help:
+# English text: Allows the system administrator to set a system-wide limit on the number of appointments a single user can have on any single day.
+#
+#
+# << MISSING >>
+# Limit number of timed events per day:
+#
+# << MISSING >>
+# limit-appts-number-help:
+# English text: Specifies the maximum number of timed events a user can have in a single day.
+#
+#
+# << MISSING >>
+# Maximum timed events per day:
+#
+# << MISSING >>
+# Plugins:
+#
+# << MISSING >>
+# plugins-enabled-help:
+# English text: Enable plugin applications.
+#
+#
+# << MISSING >>
+# Enable Plugins:
+#
+# << MISSING >>
+# plugins-sort-key-help:
+# English text: Specifies a sort key for the plugin.  This allows the plugins to appear in a specific order.
+#
+#
+# << MISSING >>
+# Plugin:
+#
+# << MISSING >>
+# Groups:
+#
+# << MISSING >>
+# groups-enabled-help:
+# English text: Enables group support, allowing users to select users by groups.
+#
+#
+# << MISSING >>
+# Groups enabled:
+#
+# << MISSING >>
+# user-sees-his-group-help:
+# English text: If enabled, users will not see calendar users that are not in at least one of their groups.
+#
+#
+# << MISSING >>
+# User sees only his groups:
+#
+# << MISSING >>
+# Categories:
+#
+# << MISSING >>
+# categories-enabled-help:
+# English text: Enables support for event categories.
+#
+#
+# << MISSING >>
+# Categories enabled:
+#
+# << MISSING >>
+# Nonuser:
+# English text: Nonuser Calendars
+#
+#
+# << MISSING >>
+# nonuser-enabled-help:
+# English text: If enabled, admins will have the option to add nonuser calendars
+#
+#
+# << MISSING >>
+# Nonuser enabled:
+# English text: Nonuser Calendars Enabled
+#
+#
+# << MISSING >>
+# nonuser-list-help:
+# English text: Where to display the nonuser calendars in the participant list
+#
+#
+# << MISSING >>
+# Nonuser list:
+# English text: Display in participants list at
+#
+#
+# << MISSING >>
+# Top:
+#
+# << MISSING >>
+# Bottom:
+#
+# << MISSING >>
+# Reports:
+#
+# << MISSING >>
+# reports-enabled-help:
+# English text: If enabled, users will see a "Reports" section at the bottom of each page and will be allowed to create custom reports.  Additionally, admin users can create global reports that will appear at the bottom of all users' pages.
+#
+#
+# << MISSING >>
+# Reports enabled:
+#
+# << MISSING >>
+# Subscribe/Publish:
+#
+# << MISSING >>
+# subscriptions-enabled-help:
+# English text: Specifies if remote users can subscribe to a WebCalendar user's calendar, allowing them to see the WebCalendar user's events in their iCal-enabled application (such as Apple's iCal or Mozilla Calendar).
+#
+#
+# << MISSING >>
+# Allow remote subscriptions:
+#
+# << MISSING >>
+# Email:
+#
+# << MISSING >>
+# email-enabled-help:
+# English text: Turn on or off all sending of email for notification and reminders.  Set to "no", if your server is not properly setup to send mail.
+#
+#
+# << MISSING >>
+# Email enabled:
+#
+# << MISSING >>
+# email-default-sender:
+# English text: Specifies the email address to specify as the sender when sending out reminders.
+#
+#
+# << MISSING >>
+# Default sender address:
+#
+# << MISSING >>
+# Default user settings:
+#
+# << MISSING >>
+# email-event-reminders-help:
+# English text: Specifies whether or not to send event reminders.
+#
+#
+# << MISSING >>
+# Event reminders:
+#
+# << MISSING >>
+# email-event-added:
+# English text: Specifies whether or not to send email notifications when an event is added to your calendar.
+#
+#
+# << MISSING >>
+# Events added to my calendar:
+#
+# << MISSING >>
+# email-event-updated:
+# English text: Specifies whether or not to send email notifications when an event is updated on your calendar.
+#
+#
+# << MISSING >>
+# Events updated on my calendar:
+#
+# << MISSING >>
+# email-event-deleted:
+# English text: Specifies whether or not to send email notifications when an event is removed from your calendar.
+#
+#
+# << MISSING >>
+# Events removed from my calendar:
+#
+# << MISSING >>
+# email-event-rejected:
+# English text: Specifies whether or not to send email notifications when a participant rejects an event that is on your calendar.
+#
+#
+# << MISSING >>
+# Event rejected by participant:
+colors-help: All colors should be specified in "#RRGGBB" hexadecimal format where "RR" is the hex value for red, "GG" is the hex value for green, and "BB" is the hex value for blue.
+Colors: ÃC¦â
+#
+# << MISSING >>
+# Allow user to customize colors:
+Document background: ¤å¥ó­I´º
+Select: ¿ï¾Ü
+Document title: ¤å¥ó¼ÐÃD
+#
+# << MISSING >>
+# Document text:
+#
+# << MISSING >>
+# Table grid color:
+#
+# << MISSING >>
+# Table header background:
+#
+# << MISSING >>
+# Table header text:
+Table cell background: ªí®æ­I´º
+Table cell background for current day: ·í¤éÃC¦â
+#
+# << MISSING >>
+# Table cell background for weekends:
+#
+# << MISSING >>
+# Event popup background:
+#
+# << MISSING >>
+# Event popup text:
+
+
+###############################################
+# Page: activity_log.php
+#
+#
+# << MISSING >>
+# Activity Log:
+User: ¨Ï ¥Î ªÌ
+#
+# << MISSING >>
+# Calendar:
+Date: ¤é ´Á
+Time: ®É ¶¡
+#
+# << MISSING >>
+# Event:
+#
+# << MISSING >>
+# Action:
+#
+# << MISSING >>
+# Event created:
+#
+# << MISSING >>
+# Event approved:
+#
+# << MISSING >>
+# Event rejected:
+#
+# << MISSING >>
+# Event updated:
+#
+# << MISSING >>
+# Event deleted:
+#
+# << MISSING >>
+# Notification sent:
+#
+# << MISSING >>
+# Reminder sent:
+#
+# << MISSING >>
+# Database error:
+#
+# << MISSING >>
+# Previous:
+#
+# << MISSING >>
+# Next:
+
+
+###############################################
+# Page: add_entry.php
+#
+Invalid entry id: Invalid entry id
+This is a private event and may not be added to your calendar.: This is a private event and may not be added to your calendar.
+Error adding event: Error adding event
+
+
+###############################################
+# Page: admin_handler.php
+#
+Error: ¿ù»~
+The following error occurred: The following error occurred
+
+
+###############################################
+# Page: approve_entry.php
+#
+Error approving event: Error approving event
+
+
+###############################################
+# Page: category.php
+#
+#
+# << MISSING >>
+# Add:
+#
+# << MISSING >>
+# Category Name:
+#
+# << MISSING >>
+# Global:
+Delete: §R°£
+Are you sure you want to delete this entry?: §A½T©w­n§R°£³o­Ó°O¨Æ¶Ü?
+#
+# << MISSING >>
+# Add New Category:
+
+
+###############################################
+# Page: category_handler.php
+#
+
+
+###############################################
+# Page: datesel.php
+#
+
+
+###############################################
+# Page: day.php
+#
+#
+# << MISSING >>
+# Admin mode:
+#
+# << MISSING >>
+# Assistant mode:
+Generate printer-friendly version: Generate printer-friendly version
+Printer Friendly: ¤Íµ½¦C¦L
+
+
+###############################################
+# Page: del_entry.php
+#
+Hello: §A¦n
+An appointment has been canceled for you by: ¬ù·|¤w¸g³Q¨ú®ø, ¨ú®øªÌ¬O
+The subject was: ¥DÃD¬O
+Notification: ³q§i
+
+
+###############################################
+# Page: edit_entry.php
+#
+Edit Entry: ½s¿è°O¨Æ
+Add Entry: ·s¼W°O¨Æ
+brief-description-help: This should provide a short description (about 20 characters) of the event.  This will represent the event when viewing the calendar.
+Brief Description: ·§­n´y­z
+full-description-help: This should complete details of the event.  This information can be seen when a user views the event.
+Full Description: §¹¾ã´y­z
+date-help: Specifies the date of the event.
+time-help: Specifies the time of the event.<br /><i>This field can be left blank.</i>
+am: ¤W¤È
+pm: ¤U¤È
+#
+# << MISSING >>
+# Untimed event:
+#
+# << MISSING >>
+# Timed event:
+#
+# << MISSING >>
+# All day event:
+duration-help: Specifies the duration (in minutes) of the event.  <br /><i>This field can be left blank.</i>
+Duration: «ùÄò®É¶¡
+hours: ®É
+priority-help: Specifies the priority of the event.  High priority events will be displayed in bold.
+Priority: Àu¥ýµ¥¯Å
+Low: §C
+Medium: ¤¤
+High: °ª
+access-help: Specifies the access level of the event.<br /> <i>Public</i>: Everyone can see the full details of the event.  <br /><i>Confidential</i>: Others can see that you have an entry for that date and time, but not the details of what it is.
+Access: Åã¥Ü³]©w
+Public: ¤½²³ªº
+Confidential: ¾÷±Kªº
+#
+# << MISSING >>
+# category-help:
+# English text: Specifies the category of the event.
+#
+#
+# << MISSING >>
+# Category:
+None: µL
+#
+# << MISSING >>
+# days:
+#
+# << MISSING >>
+# before event:
+participants-help: Lists the participants of this entry.
+Participants: °Ñ»PªÌ
+#
+# << MISSING >>
+# external-participants-help:
+# English text: Specifies a list of participants for the event that are not calendar users.  The users should be listed one per line and can include an email address.  If an email address is specified, the user is eligible to receive notications and reminders.
+#
+#
+# << MISSING >>
+# External Participants:
+repeat-type-help: Select how often the event should repeat.<i>Monthly (by day)</i> allows an event to repeat on the 1st Monday of the month, 3rd Thursday of the month, etc.  <i>Monthly (by date)</i> allows an event to repeat on the same day of the month.
+Repeat Type: ¶g´Á©Ê³]©w
+Daily: ¨C¤éªº
+Weekly: ¨C¶gªº
+Monthly: ¨C¤ëªº
+by day: ¨Ì²Ä´X¤Ñ
+#
+# << MISSING >>
+# by day (from end):
+by date: ¨Ì¤é´Á
+Yearly: ¨C¦~ªº
+repeat-end-date-help: Specifies the date the event should repeat until.
+Repeat End Date: ¶g´Áµ²§ô¤é´Á
+Use end date: ¨Ï¥Îµ²§ô¤é´Á³]©w
+repeat-day-help: Specifies which days of the week the event should repeat on.  This is for use only when <i>Repeat Type</i> is set to <i>Weekly</i>.
+Repeat Day: ­«½Æ©ó
+for weekly: ¶È¨C¶gªº
+Tuesday: ¬P´Á¤G
+Wednesday: ¬P´Á¤T
+Thursday: ¬P´Á¥|
+Friday: ¬P´Á¤­
+Saturday: ¬P´Á¤»
+repeat-frequency-help: Specifies how often the event should repeat.  The default 1 indicates it should occur every time.  Specifying 2 will make the event occur every other week (if <i>Repeat Type</i> is set to <i>Weekly</i>), every other month (if <i>Repeat Type</i> is set to <i>Monthly</i>), etc.
+Frequency: ­«½Æ¦¸¼Æ
+Delete entry: §R°£°O¨Æ
+You are not authorized to edit this entry: You are not authorized to edit this entry
+
+
+###############################################
+# Page: edit_layer.php
+#
+Edit Layer: ½s¿è¶¥¼h
+Add Layer: ·s¼W¶¥¼h
+Source: ¨Ó·½
+Color: ÃC¦â
+Duplicates: °Æ¥»
+Show layer events that are the same as your own: ¦b§Aªº¦æ¨Æ¾ä¤¤¦P®ÉÅã¥Ü¨Ó·½ªÌªº°O¨Æ
+Are you sure you want to delete this layer?: §A½T©w­n§R°£³o­Ó¶¥¼h¶Ü?
+Delete layer: §R°£¶¥¼h
+
+
+###############################################
+# Page: edit_layer_handler.php
+#
+#
+# << MISSING >>
+# You cannot create a layer for yourself:
+#
+# << MISSING >>
+# You can only create one layer for each user:
+
+
+###############################################
+# Page: edit_user.php
+#
+Edit User: ½s¿è¨Ï¥ÎªÌ¸ê®Æ
+Add User: ·s¼W¨Ï¥ÎªÌ
+Username: ¨Ï¥ÎªÌ¦WºÙ
+First Name: ©m
+Last Name: ¦W
+E-mail address: ¹q¤l¶l¥ó¦a§}
+Password: ±K½X
+again: ¦A¤@¦¸
+Admin: ºÞ²z
+Disabled for demo: Disabled for demo
+Change Password: Åܧó±K½X
+New Password: ·sªº±K½X
+Set Password: ³]©w±K½X
+
+
+###############################################
+# Page: edit_user_handler.php
+#
+#
+# << MISSING >>
+# Deleting users not supported:
+The passwords were not identical: ±K½X¤£¤@¼Ë
+You have not entered a password: §A¨S¦³¿é¤J±K½X
+
+
+###############################################
+# Page: export.php
+#
+Export: ¿é¥X
+Export format: ¿é¥X®æ¦¡
+Palm Pilot: Palm Pilot
+Export all dates: ¿é¥X©Ò¦³¸ê®Æ
+Start date: ¶}©l¤é´Á
+End date: µ²§ô¤é´Á
+Modified since: §ó§ï¦Û
+
+
+###############################################
+# Page: export_handler.php
+#
+#
+# << MISSING >>
+# export format not defined or incorrect:
+
+
+###############################################
+# Page: group_edit.php
+#
+#
+# << MISSING >>
+# Unnamed Group:
+#
+# << MISSING >>
+# Add Group:
+#
+# << MISSING >>
+# Edit Group:
+#
+# << MISSING >>
+# Group name:
+Updated: §ó·s
+Created by: ¤½¥¬ªÌ
+Users: ¨Ï¥ÎªÌ
+
+
+###############################################
+# Page: group_edit_handler.php
+#
+#
+# << MISSING >>
+# You must specify a group name:
+
+
+###############################################
+# Page: groups.php
+#
+#
+# << MISSING >>
+# Add New Group:
+
+
+###############################################
+# Page: icalfb.php
+#
+
+
+###############################################
+# Page: pref.php
+#
+Preferences: °Ñ¼Æ³]©w
+#
+# << MISSING >>
+# to modify the preferences for the Public Access calendar:
+#
+# << MISSING >>
+# tz-help:
+# English text: Specifies how many hours to adjust the time from server time to local time.
+#
+#
+# << MISSING >>
+# Timezone Offset:
+#
+# << MISSING >>
+# Add N hours to:
+#
+# << MISSING >>
+# Subtract N hours from:
+#
+# << MISSING >>
+# same as:
+#
+# << MISSING >>
+# server time:
+#
+# << MISSING >>
+# Default Category:
+#
+# << MISSING >>
+# When I am the boss:
+#
+# << MISSING >>
+# Email me event notification:
+#
+# << MISSING >>
+# I want to approve events:
+#
+# << MISSING >>
+# allow-remote-subscriptions-help:
+# English text: Specifies if remote users can subscribe to your calendar, allowing them to see your events in a iCal-enabled application (such as Apple's iCal or Mozilla Calendar).
+#
+#
+# << MISSING >>
+# remote-subscriptions-url-help:
+# English text: Displays the URL remote users should use to subscribe to your calendar.
+#
+#
+# << MISSING >>
+# URL:
+Sun: ¶g¤é
+Mon: ¶g¤@
+Tue: ¶g¤G
+Wed: ¶g¤T
+Thu: ¶g¥|
+Fri: ¶g¤­
+Sat: ¶g¤»
+Save Preferences: Àx¦s°Ñ¼Æ
+
+
+###############################################
+# Page: help_bug.php
+#
+#
+# << MISSING >>
+# Report Bug:
+
+
+###############################################
+# Page: help_edit_entry.php
+#
+Adding/Editing Calendar Entries: ·s¼W/½s¿è ¦æ¨Æ¾ä¶µ¥Ø
+
+
+###############################################
+# Page: help_index.php
+#
+Help Index: »²§U¯Á¤Þ
+Layers: ¶¥¼h¬[ºc
+#
+# << MISSING >>
+# Import:
+
+
+###############################################
+# Page: help_layers.php
+#
+#
+# << MISSING >>
+# Layers are useful for displaying other users' events in your own calendar.  You can specifiy the user and the color the events will be displayed in.:
+#
+# << MISSING >>
+# Add/Edit/Delete:
+#
+# << MISSING >>
+# Clicking the Edit Layers link in the admin section at the bottom of the page will allow you to add/edit/delete layers.:
+#
+# << MISSING >>
+# Specifies the user that you would like to see displayed in your calendar.:
+#
+# << MISSING >>
+# The text color of the new layer that will be displayed in your calendar.:
+#
+# << MISSING >>
+# If checked, events that are duplicates of your events will be shown.:
+#
+# << MISSING >>
+# Disabling:
+#
+# << MISSING >>
+# Press the Disable Layers link in the admin section at the bottom of the page to turn off layers.:
+#
+# << MISSING >>
+# Enabling:
+#
+# << MISSING >>
+# Press the Enable Layers link in the admin section at the bottom of the page to turn on layers.:
+
+
+###############################################
+# Page: help_admin.php
+#
+
+
+###############################################
+# Page: week.php
+#
+#
+# << MISSING >>
+# cont.:
+
+
+###############################################
+# Page: layers.php
+#
+#
+# << MISSING >>
+# to modify the layers settings for the:
+Layers are currently: ¶¥¼h¬[ºc¥Ø«e¬O
+Enabled: ±Ò¥Îªº
+Disabled: °±¥Îªº
+Disable Layers: °±¥Î¶¥¼h¬[ºc
+Enable Layers: ±Ò¥Î¶¥¼h¬[ºc
+Layer: ¶¥¼h
+Edit layer: ½s¿è¶¥¼h
+Add layer: ·s¼W¶¥¼h
+
+
+###############################################
+# Page: layers_toggle.php
+#
+
+
+###############################################
+# Page: list_unapproved.php
+#
+View this entry: À˵ø³o­Ó°O¨Æ
+Approve this entry?: ®Ö­ã³o­Ó°O¨Æ?
+Approve/Confirm: ®Ö­ã/½T©w
+Reject this entry?: ©Úµ´³o­Ó°O¨Æ?
+Reject: ©Úµ´
+#
+# << MISSING >>
+# No unapproved events for:
+Unapproved Events: ¥¼®Ö­ãªº°O¨Æ
+#
+# << MISSING >>
+# Public Access:
+
+
+###############################################
+# Page: view_entry.php
+#
+#
+# << MISSING >>
+# every:
+#
+# << MISSING >>
+# 2nd:
+#
+# << MISSING >>
+# 3rd:
+#
+# << MISSING >>
+# 4th:
+#
+# << MISSING >>
+# 5th:
+#
+# << MISSING >>
+# 1st:
+#
+# << MISSING >>
+# last:
+Description: ´y ­z
+#
+# << MISSING >>
+# Status:
+#
+# << MISSING >>
+# Waiting for approval:
+#
+# << MISSING >>
+# Deleted:
+Rejected: ©Úµ´ªº
+#
+# << MISSING >>
+# External User:
+Approve/Confirm entry: ®Ö­ã/½T©w °O¨Æ
+Reject entry: ©Úµ´°O¨Æ
+#
+# << MISSING >>
+# Set category:
+#
+# << MISSING >>
+# Edit repeating entry for all dates:
+#
+# << MISSING >>
+# Edit entry for this date:
+This will delete this entry for all users.: ¹ï©Ò¦³ªº¨Ï¥ÎªÌ¤]±N·|§R°£³o­Ó°O¨Æ.
+#
+# << MISSING >>
+# Delete repeating event for all dates:
+#
+# << MISSING >>
+# Delete entry only for this date:
+Edit entry: ½s¿è°O¨Æ
+This will delete the entry from your calendar.: ³o±N·|±q§Aªº¦æ¨Æ¾ä§R°£³o­Ó°O¨Æ.
+Do you want to add this entry to your calendar?: §A­n·s¼W³o­Ó°O¨Æ¨ì§Aªº¦æ¨Æ¾ä¶Ü?
+This will add the entry to your calendar.: ³o±N·|·s¼W³o­Ó°O¨Æ¨ì§Aªº¦æ¨Æ¾ä.
+Add to My Calendar: ·s¼W¨ì§Úªº¦æ¨Æ¾ä
+#
+# << MISSING >>
+# Email all participants:
+#
+# << MISSING >>
+# Show activity log:
+#
+# << MISSING >>
+# Hide activity log:
+#
+# << MISSING >>
+# Export this entry to:
+
+
+###############################################
+# Page: view_v.php
+#
+
+
+###############################################
+# Page: month.php
+#
+
+
+###############################################
+# Page: pref_handler.php
+#
+
+
+###############################################
+# Page: reject_entry.php
+#
+An appointment has been rejected by: ¬ù·|¤w¸g³Q©Úµ´, ©Úµ´ªÌ¬O
+#
+# << MISSING >>
+# The description is:
+Title: ºô¸ô¦æ¨Æ¾ä
+
+
+###############################################
+# Page: search.php
+#
+Search: ·j´M
+#
+# << MISSING >>
+# Advanced Search:
+Keywords: ÃöÁä¦r
+
+
+###############################################
+# Page: search_handler.php
+#
+You must enter one or more search keywords: §A¦Ü¤Ö­n¿é¤J¤@­Ó·j´M¤å¦r©Î¥y¤l
+Search Results: ·j´Mµ²ªG
+match found: µ§²Å¦X¬d¸ß
+matches found: µ§²Å¦X¬d¸ß
+No matches found: ¬dµL¸ê®Æ
+
+
+###############################################
+# Page: select_user.php
+#
+View Another User's Calendar: À˵ø¨ä¥L¤Hªº¤ë¾ä
+Go: «e©¹
+
+
+###############################################
+# Page: publish.php
+#
+
+
+###############################################
+# Page: users.php
+#
+denotes administrative user: ¨Ï¥ÎªÌºÞ²z­û
+Add New User: ·s¼W¨Ï¥ÎªÌ
+
+
+###############################################
+# Page: usersel.php
+#
+#
+# << MISSING >>
+# All:
+#
+# << MISSING >>
+# Reset:
+#
+# << MISSING >>
+# Remove:
+#
+# << MISSING >>
+# Ok:
+#
+# << MISSING >>
+# Cancel:
+
+
+###############################################
+# Page: import.php
+#
+#
+# << MISSING >>
+# This form will allow you to import entries from the Palm Desktop Datebook.:
+#
+# << MISSING >>
+# Exclude private records:
+#
+# << MISSING >>
+# Datebook File:
+#
+# << MISSING >>
+# This form will import vCalendar (.vcs) 1.0 events:
+#
+# << MISSING >>
+# vCal File:
+#
+# << MISSING >>
+# This form will import iCalendar (.ics) events:
+#
+# << MISSING >>
+# iCal File:
+#
+# << MISSING >>
+# Overwrite Prior Import:
+
+
+###############################################
+# Page: year.php
+#
+
+
+###############################################
+# Page: view_d.php
+#
+
+
+###############################################
+# Page: view_m.php
+#
+
+
+###############################################
+# Page: view_w.php
+#
+
+
+###############################################
+# Page: views.php
+#
+#
+# << MISSING >>
+# Views:
+#
+# << MISSING >>
+# Add New View:
+
+
+###############################################
+# Page: views_edit.php
+#
+#
+# << MISSING >>
+# Unnamed View:
+#
+# << MISSING >>
+# Add View:
+#
+# << MISSING >>
+# Edit View:
+#
+# << MISSING >>
+# View Name:
+#
+# << MISSING >>
+# View Type:
+#
+# << MISSING >>
+# Week (Users horizontal):
+#
+# << MISSING >>
+# Week (Users vertical):
+#
+# << MISSING >>
+# Week (Timebar):
+#
+# << MISSING >>
+# Month (side by side):
+#
+# << MISSING >>
+# Month (on same calendar):
+
+
+###############################################
+# Page: nonusers.php
+#
+#
+# << MISSING >>
+# NONUSER_PREFIX not set:
+# English text: NONUSER_PREFIX has not been set in config.php.
+#
+#
+# << MISSING >>
+# NonUser:
+# English text: NonUser Calendars
+#
+#
+# << MISSING >>
+# Calendar ID:
+#
+# << MISSING >>
+# Add New NonUser Calendar:
+
+
+###############################################
+# Page: nonusers_handler.php
+#
+
+
+###############################################
+# Page: view_l.php
+#
+
+
+###############################################
+# Page: help_pref.php
+#
+#
+# << MISSING >>
+# default-category-help:
+# English text: Specifies the category a new event should default to.
+#
+
+
+###############################################
+# Page: report.php
+#
+Private: ¨p¤Hªº
+#
+# << MISSING >>
+# Approved:
+#
+# << MISSING >>
+# Unknown:
+#
+# << MISSING >>
+# to manage reports for the Public Access calendar:
+#
+# << MISSING >>
+# Add new report:
+#
+# << MISSING >>
+# Invalid report id:
+#
+# << MISSING >>
+# Manage Reports:
+
+
+###############################################
+# Page: login.php
+#
+You must enter a login and password: §A¥²¶·¿é¤J¨Ï¥ÎªÌ¦WºÙ¤Î±K½X
+Save login via cookies so I don't have to login next time: ±Nµn¤J¸ê®ÆÀx¦s©ó cookies ¤¤¡A¤U¦¸´N¤£»Ý­n¦Aµn¤J¨t²Î¡C
+Login: µn¤J
+#
+# << MISSING >>
+# Access public calendar:
+cookies-note: <b>ª`·N:</b> ¥»µ{¦¡¶·­n cookies ¤~¯à¨Ï¥Î.
+
+
+###############################################
+# Page: views_edit_handler.php
+#
+#
+# << MISSING >>
+# You must specify a view name:
+
+
+###############################################
+# Page: week_details.php
+#
+New Entry: ·sªº°O¨Æ
+
+
+###############################################
+# Page: import_handler.php
+#
+#
+# << MISSING >>
+# Import Results:
+#
+# << MISSING >>
+# Events successfully imported:
+#
+# << MISSING >>
+# Events from prior import marked as deleted:
+#
+# << MISSING >>
+# Conflicting events:
+#
+# << MISSING >>
+# Errors:
+Back to My Calendar: ¦^¨ì§Úªº¦æ¨Æ¾ä
+#
+# << MISSING >>
+# There was an error parsing the import file or no events were returned:
+#
+# << MISSING >>
+# The import file contained no data:
+The following conflicts with the suggested time: The following conflicts with the suggested time
+Unnamed Event: Unnamed Event
+Scheduling Conflict: Scheduling Conflict
+conflicts with the following existing calendar entries: conflicts with the following existing calendar entries
+#
+# << MISSING >>
+# Event Imported:
+
+
+###############################################
+# Page: edit_report.php
+#
+#
+# << MISSING >>
+# Tomorrow:
+#
+# << MISSING >>
+# Today:
+#
+# << MISSING >>
+# Yesterday:
+#
+# << MISSING >>
+# Day before yesterday:
+#
+# << MISSING >>
+# Next week:
+#
+# << MISSING >>
+# This week:
+#
+# << MISSING >>
+# Last week:
+#
+# << MISSING >>
+# Week before last:
+#
+# << MISSING >>
+# Next week and week after:
+#
+# << MISSING >>
+# This week and next week:
+#
+# << MISSING >>
+# Last week and this week:
+#
+# << MISSING >>
+# Last two weeks:
+#
+# << MISSING >>
+# Next month:
+#
+# << MISSING >>
+# This month:
+#
+# << MISSING >>
+# Last month:
+#
+# << MISSING >>
+# Month before last:
+#
+# << MISSING >>
+# Next year:
+#
+# << MISSING >>
+# This year:
+#
+# << MISSING >>
+# Last year:
+#
+# << MISSING >>
+# Year before last:
+#
+# << MISSING >>
+# Unnamed Report:
+#
+# << MISSING >>
+# Add Report:
+#
+# << MISSING >>
+# Edit Report:
+#
+# << MISSING >>
+# Report name:
+Current User: ¥Ø«e¨Ï¥ÎªÌ
+#
+# << MISSING >>
+# Include link in trailer:
+#
+# << MISSING >>
+# Include standard header/trailer:
+#
+# << MISSING >>
+# Date range:
+#
+# << MISSING >>
+# Include previous/next links:
+#
+# << MISSING >>
+# Include empty dates:
+#
+# << MISSING >>
+# Template variables:
+#
+# << MISSING >>
+# Page template:
+#
+# << MISSING >>
+# Day template:
+#
+# << MISSING >>
+# Event template:
+#
+# << MISSING >>
+# Are you sure you want to delete this report?:
+
+
+###############################################
+# Page: assistant_edit.php
+#
+#
+# << MISSING >>
+# Assistants:
+#
+# << MISSING >>
+# Yours assistants:
+
+
+###############################################
+# Page: view_t.php
+#
+
+
+###############################################
+# Page: assistant_edit_handler.php
+#
+
+
+###############################################
+# Page: adminhome.php
+#
+Account: ½s¿è­Ó¤H¸ê®Æ
+#
+# << MISSING >>
+# NonUser Calendars:
+#
+# << MISSING >>
+# Delete Events:
+#
+# << MISSING >>
+# Public Preferences:
+#
+# << MISSING >>
+# Unapproved Public Events:
+#
+# << MISSING >>
+# Administrative Tools:
+
+
+###############################################
+# Page: purge.php
+#
+#
+# << MISSING >>
+# Purging events for:
+#
+# << MISSING >>
+# Finished:
+#
+# << MISSING >>
+# Delete all events before:
+#
+# << MISSING >>
+# Check box to delete <b>ALL</b> events for a user:
+#
+# << MISSING >>
+# Are you sure you want to delete events for:
+
+
+###############################################
+# Page: help_import.php
+#
+#
+# << MISSING >>
+# Palm Desktop:
+#
+# << MISSING >>
+# It should be located in your Palm directory in <tt>datebook/datebook.dat</tt> in a subdirectory named by your username.:
+#
+# << MISSING >>
+# The following entries will not be imported:
+#
+# << MISSING >>
+# Entries older than the current date:
+#
+# << MISSING >>
+# Entries created in the Palm Desktop that have not been HotSync'd:
+#
+# << MISSING >>
+# Anything imported from Palm will be overwritten during the next import (unless the event date has passed).:
+#
+# << MISSING >>
+# Therefore, updates should be made in the Palm Desktop.:
+#
+# << MISSING >>
+# vCal:
+#
+# << MISSING >>
+# The following formats have been tested:
+#
+# << MISSING >>
+# Palm Desktop 4:
+#
+# << MISSING >>
+# Lotus Organizer 6:
+#
+# << MISSING >>
+# Microsoft Outlook 2002:
+#
+# << MISSING >>
+# iCalendar:
+#
+# << MISSING >>
+# Enabling <b>Overwrite Prior Import</b> will cause events imported previously that used the same UID as an event from the new import file to be marked as deleted.  This should allow an updated iCalendar file to be imported without creating duplicates.:
+
+
+###############################################
+# Page: edit_report_handler.php
+#
+#
+# << MISSING >>
+# Variable N not found:
+
+
+###############################################
+# Page: edit_entry_handler.php
+#
+A new appointment has been made for you by: §A¦³¤@­Ó·s¬ù·|, ÁܽЪ̬O
+#
+# << MISSING >>
+# An appointment has been updated by:
+The subject is: ¥DÃD¬O
+Please look on: ½Ð¬d¬Ý
+to accept or reject this appointment: ¨M©w±µ¨ü©Î©Úµ´³o­Ó¬ù·|
+to view this appointment: to view this appointment
+Your suggested time of: Your suggested time of
+
+
+###############################################
+# Page: set_entry_cat.php
+#
+#
+# << MISSING >>
+# You have not added any categories:
+#
+# << MISSING >>
+# Set Category:
+
+
+###############################################
+# Page: edit_template.php
+#
+#
+# << MISSING >>
+# Edit Custom Script/Stylesheet:
+#
+# << MISSING >>
+# Edit Custom Header:
+#
+# << MISSING >>
+# Edit Custom Trailer:
+
+
+###############################################
+# Page: includes/trailer.php
+#
+Go to: ¥\¯à¿ï¾Ü
+My Calendar: §Úªº¦æ¨Æ¾ä
+Logout: µn¥X
+Another User's Calendar: §O¤Hªº¦æ¨Æ¾ä
+Add New Entry: ·s¼W°O¨Æ
+#
+# << MISSING >>
+# Manage Views:
+#
+# << MISSING >>
+# Manage calendar of:
+
+
+###############################################
+# Page: includes/connect.php
+#
+
+
+###############################################
+# Page: includes/user.php
+#
+#
+# << MISSING >>
+# Invalid login:
+#
+# << MISSING >>
+# Invalid user login:
+
+
+###############################################
+# Page: includes/site_extras.php
+#
+#
+# << MISSING >>
+# Send Reminder:
+
+
+###############################################
+# Page: includes/translate.php
+#
+
+
+###############################################
+# Page: includes/user-ldap.php
+#
+
+
+###############################################
+# Page: includes/user-nis.php
+#
+
+
+###############################################
+# Page: includes/help_trailer.php
+#
+
+
+###############################################
+# Page: includes/dbtable.php
+#
+
+
+###############################################
+# Page: includes/init.php
+#
+
+
+###############################################
+# Page: includes/functions.php
+#
+This event is confidential: ³o­Ó°O¨Æ¬O¾÷±Kªº
+#
+# << MISSING >>
+# exceeds limit of XXX events per day:
+You have XXX unapproved events: §A¦³ XXX ¥¼®Ö­ãªº°O¨Æ
+January: ¤@¤ë
+February: ¤G¤ë
+March: ¤T¤ë
+April: ¥|¤ë
+May_: ¤­¤ë
+June: ¤»¤ë
+July: ¤C¤ë
+August: ¤K¤ë
+September: ¤E¤ë
+October: ¤Q¤ë
+November: ¤Q¤@¤ë
+Jan: 1¤ë
+Feb: 2¤ë
+Mar: 3¤ë
+Apr: 4¤ë
+May: 5¤ë
+Jun: 6¤ë
+Jul: 7¤ë
+Aug: 8¤ë
+Sep: 9¤ë
+Oct: 10¤ë
+Nov: 11¤ë
+Dec: 12¤ë
+
+
+###############################################
+# Page: includes/js/admin.php
+#
+#
+# << MISSING >>
+# Server URL is required:
+#
+# << MISSING >>
+# Server URL must end with '/':
+Invalid color for document background: Invalid color for document background
+Invalid color for document title: Invalid color for document title
+Invalid color for table cell background: Invalid color for table cell background
+#
+# << MISSING >>
+# Invalid color for table grid:
+#
+# << MISSING >>
+# Invalid color for table header background:
+#
+# << MISSING >>
+# Invalid color for table text background:
+#
+# << MISSING >>
+# Invalid color for event popup background:
+#
+# << MISSING >>
+# Invalid color for event popup text:
+Invalid color for table cell background for today: Invalid color for table cell background for today
+Color format should be '#RRGGBB': Color format should be '#RRGGBB'
+
+
+###############################################
+# Page: includes/js/edit_entry.php
+#
+You have not entered a Brief Description: §A¨S¦³¿é¤J·§­n´y­z
+You have not entered a valid time of day: §A¨S¦³¿é¤J¥¿½Tªº®É¶¡
+The time you have entered begins before your preferred work hours.  Is this correct?: ³o­Ó®É¬q¤£¦b§A¦Û©wªº¤u§@®É¶¡¤º.  ³o¬O¥¿½Tªº¶Ü?
+
+
+###############################################
+# Page: includes/js/edit_layer.php
+#
+Invalid color: Invalid color
+
+
+###############################################
+# Page: includes/js/pref.php
+#
+
+
+###############################################
+# Page: tools/send_reminders.php
+#
+#
+# << MISSING >>
+# This is a reminder for the event detailed below.:
+#
+# << MISSING >>
+# Reminder:

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Chinese-GB2312.txt
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Chinese-GB2312.txt	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Chinese-GB2312.txt	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,1410 @@
+# Use this as a starting point to translate this application into
+# another language.  The format is "English text: translated text"
+# There cannot be a ":" in the English text.
+# Translated by: liaobin at jite.net shenyi at jite.net
+# Last update: 2003-8-5
+# $Id: Chinese-GB2312.txt,v 1.16 2004/07/30 04:52:22 cknudsen Exp $
+# Translation last updated on 03-10-2004
+
+
+###############################################
+# Specify a charset (will be sent within meta tag for each page)
+#
+charset: gb2312
+
+
+
+###############################################
+# Page: admin.php
+#
+System Settings: ϵͳÉèÖÃ
+You are not authorized: Äúδ¾­ÊÚȨ
+Note: ÃèÊö
+Your user preferences: Óû§²ÎÊýÉèÖÃ
+may be affecting the appearance of this page.: ¿ÉÄÜÓ°Ïì±¾Ò³
+Click here: µã»÷´Ë´¦
+to not use your user preferences when viewing this page: ä¯ÀÀ´ËÒ³Ãæʱ²»ÆôÓÃÄãµÄ²ÎÊýÉèÖÃ
+are being ignored while viewing this page.: µ±²é¿´±¾Ò³Ê±±»ºöÂÔÁË.
+to load your user preferences when viewing this page: ä¯ÀÀ´ËÒ³ÃæʱÆôÓÃÄãµÄ²ÎÊýÉèÖÃ
+Save: ±£´æ
+Help: ˵Ã÷
+Settings: ÉèÖÃ
+#
+# << MISSING >>
+# app-name-help:
+# English text: Specifies the name of the application that will appear in the browser title bar for all pages and on the login page.  The value you specify here will be looked up in the translations file allowing you to provide different titles for different languages.
+#
+Application Name: Ó¦ÓÃÃû³Æ
+#
+# << MISSING >>
+# server-url-help:
+# English text: Specifies the base URL for the application.  This will be included when sending out email reminders and notifications.
+#
+Server URL: ϵͳURL
+language-help: ÇëÑ¡ÔñʹÓõÄÓïÑÔ.
+Language: ÓïÑÔ
+Your browser default language is: ÄúµÄä¯ÀÀÆ÷Ô¤ÉèµÄÓïÑÔÊÇ
+fonts-help: ×ÖÌå°ïÖú
+Fonts: ×ÖÌå
+#
+# << MISSING >>
+# custom-script-help:
+# English text: Allows entry of custom Javascript or stylesheet text that will be inserted into the HTML "head" section of every page.
+#
+#
+# << MISSING >>
+# Custom script/stylesheet:
+Yes: ÊÇ
+No: ·ñ
+#
+# << MISSING >>
+# Edit:
+#
+# << MISSING >>
+# custom-header-help:
+# English text: Allows a custom HTML snippet to be included in the top of every page.
+#
+#
+# << MISSING >>
+# Custom header:
+#
+# << MISSING >>
+# custom-trailer-help:
+# English text: Allows a custom HTML snippet to be included at the end of every page.
+#
+#
+# << MISSING >>
+# Custom trailer:
+preferred-view-help: ÃèÊöĬÈϵÄÊÓͼ (Ìì, ÖÜ, ÔÂ, »òÄê).
+Preferred view: ²é¿´Ñ¡Ôñ
+Day: ÈÕ
+Week: ÖÜ
+Month: ÔÂ
+Year: Äê
+#
+# << MISSING >>
+# display-weekends-help:
+# English text: Include weekends when viewing a week.
+#
+Display weekends in week view: ÏÔʾÖÜÄ©
+#
+# << MISSING >>
+# yearly-shows-events-help:
+# English text: On the yearly view, display days that contain events in a bold font.
+#
+#
+# << MISSING >>
+# Display days with events in bold in year view:
+#
+# << MISSING >>
+# display-desc-print-day-help:
+# English text: Include event descriptions in printer-friendly version of day view.
+#
+#
+# << MISSING >>
+# Display description in printer day view:
+date-format-help: ÃèÊöºÏÊʵÄÈÕÆÚ¸ñʽ
+Date format: ÈÕÆÚ¸ñʽ
+December: Ê®¶þÔÂ
+#
+# << MISSING >>
+# time-format-help:
+# English text: Specifies which time format to use: <br /><i>12 hour:</i> Display times as 3am, 8:30pm, etc.  <br /><i>24 hour:</i> Display times as 300, 2030, etc.
+#
+Time format: ʱ¼ä¸ñʽ
+12 hour: 12ʱÖÆ
+24 hour: 24ʱÖÆ
+#
+# << MISSING >>
+# time-interval-help:
+# English text: Specifies how long the time blocks in the week view and day view will be.
+#
+Time interval: ʱ¼ä¼ä¸ô
+hour: Сʱ
+minutes: ·Ö
+#
+# << MISSING >>
+# auto-refresh-help:
+# English text: When enabled, the day view, week view, month view, and list aunapproved pages will all automatically refresh themselves periodically.
+#
+Auto-refresh calendars: ×Ô¶¯Ë¢ÐÂÈÕÀú
+#
+# << MISSING >>
+# auto-refresh-time-help:
+# English text: If Auto-refresh is enabled, this specifies the time between each refresh.
+#
+Auto-refresh time: ×Ô¶¯Ë¢ÐÂʱ¼ä
+#
+# << MISSING >>
+# require-approvals-help:
+# English text: When enabled, a user must approve an event before it is displayed on their calendar (unless Display unapproved is enabled).  Note setting this to "No" will not turn off approvals for the Public Access calendar (if the Public Access calendar is enabled).
+#
+Require event approvals: ÐèҪʼþºË×¼
+#
+# << MISSING >>
+# display-unapproved-help:
+# English text: Specifies whether unapproved events are displayed in your calendar.<br /> If set to "Yes", then unapproved events will be displayed in your calendar (in a different text color).<br /> If set to "No", then unapproved events must be approved before they are displayed in your calendar.
+#
+Display unapproved: ÏÔʾδºË×¼µÄ
+#
+# << MISSING >>
+# display-week-number-help:
+# English text: Specifies whether the week number (1-52) should be displayed in the month view and the week view.
+#
+Display week number: ÏÔʾÖÜÊý(ÒÔÄêÓ‹Ëã)
+#
+# << MISSING >>
+# display-week-starts-on:
+# English text: Specifies whether the week starts on Sunday or Monday.  If Monday is specified, then week numbers will be ISO week numbers.
+#
+Week starts on: ÿÖÜ¿ªÊ¼ÓÚ
+Sunday: ÐÇÆÚÈÕ
+Monday: ÐÇÆÚÒ»
+#
+# << MISSING >>
+# work-hours-help:
+# English text: Specifies the time range to display for the day view.
+#
+Work hours: ÔÂÀú¿ÉÏÔʾ֮¹¤×÷ʱ¼ä
+From: ×Ô
+to: ÖÁ
+#
+# << MISSING >>
+# disable-priority-field-help:
+# English text: Selecting "Yes" will remove the "Priority" field from event information pages, providing a simpler interface for novices.
+#
+Disable Priority field: ¹Ø±ÕÓÅÏȼ¶Óò
+#
+# << MISSING >>
+# disable-access-field-help:
+# English text: Selecting "Yes" will remove the "Access" field from event information pages, providing a simpler interface for novices.
+#
+Disable Access field: ¹Ø±Õ·ÃÎÊÓò
+#
+# << MISSING >>
+# disable-participants-field-help:
+# English text: Selecting "Yes" will remove the "Particpants" field from event information pages, preventing users from adding other users to their events.  If you enable this option, you may want to also disable the "Allow viewing other user's calendars" field also.
+#
+#
+# << MISSING >>
+# Disable Participants field:
+#
+# << MISSING >>
+# disable-repeating-field-help:
+# English text: Selecting "Yes" will remove the "Repeating" field when adding events.  This will provide a simpler interface for novices.
+#
+Disable Repeating field: ¹Ø±ÕÖظ´Óò
+#
+# << MISSING >>
+# popup-includes-siteextras-help:
+# English text: If enabled, allow custom event fields setup in the site_extras.php file will be displayed in event popups.
+#
+#
+# << MISSING >>
+# Display Site Extras in popup:
+#
+# << MISSING >>
+# allow-html-description-help:
+# English text: If enabled, users can enter HTML in the event description field.  If not enabled, the HTML tags will be escaped so as to appear as plain text.  Warning: Enabling this feature will allow users to reference images on other websites.
+#
+#
+# << MISSING >>
+# Allow HTML in Description:
+#
+# << MISSING >>
+# allow-view-other-help:
+# English text: Specifies whether one user may view another user's calendar.
+#
+Allow viewing other user's calendars: ÔÊÐí²é¿´ÆäËûÓû§ÈÕÀú
+#
+# << MISSING >>
+# allow-public-access-help:
+# English text: When enabled, the calendar can be used as a read-only public calendar that does not require users to login.
+#
+Allow public access: ÔÊÐí¹«¹²µÇ¼
+public-access-view-others-help: ¿ÉÒÔΪ¹«¹²ÈÕÀúÌí¼ÓÆäËûÊÓͼ
+Public access can view other users: ¹«¹²µÇ¼ÄܲéѯÆäËûÓû§
+public-access-can-add-help: ¿ÉÒÔÉèÖÃΪ¹«¹²µÄ
+Public access can add events: ¹«¹²µÇ¼ÄÜÌí¼Óʼþ
+#
+# << MISSING >>
+# public-access-add-requires-approval-help:
+# English text: Specifies whether events added via the public access account require approval before being displayed.
+#
+#
+# << MISSING >>
+# Public access new events require approval:
+#
+# << MISSING >>
+# public-access-sees-participants-help:
+# English text: If enabled, users accessing the calendar from the public account will be able to see event participants if they view details of an event.
+#
+#
+# << MISSING >>
+# Public access can view participants:
+#
+# << MISSING >>
+# allow-view-add-help:
+# English text: A '+' icon will be included in views, allowing users to quickly add events to other users' calendars.
+#
+Include add event link in views: °üÀ¨ÔÚÊÓͼÖÐÌí¼ÓʼþÁª½Ó
+#
+# << MISSING >>
+# allow-external-users-help:
+# English text: Specifies whether a non-calendar user can be added to an event.  This allows non-calendar users to be listed as event participants.
+#
+Allow external users: ÔÊÐíÆäËûÓû§
+#
+# << MISSING >>
+# external-can-receive-notification-help:
+# English text: When external users are enabled and email usage is enabled, external users can receive email notifications when the event is added, updated or delete (if the external user's email address is provided).
+#
+External users can receive email notifications: ÆäËûÓû§ÄܽÓÊÜÓʼþÌáÐÑ
+#
+# << MISSING >>
+# external-can-receive-reminder-help:
+# English text: When external users are enabled and email usage is enabled, external users can receive email reminders (if the external user's email address is provided).
+#
+#
+# << MISSING >>
+# External users can receive email reminders:
+remember-last-login-help: ¼Ç¼×îºóÒ»´ÎµÇ¼
+Remember last login: ¼Çס×îºóÒ»´ÎµÇ¼
+conflict-check-help: ³åÍ»-¼ì²é-°ïÖú
+Check for event conflicts: ¼ì²éʼþ³åÍ»
+conflict-months-help: ³åÍ»-ÔÂ-°ïÖú
+Conflict checking months: ³åÍ»¼ì²éÔÂÊý
+#
+# << MISSING >>
+# conflict-check-override-help:
+# English text: Allows users to override event conflicts and schedule two or more events for the same time.
+#
+Allow users to override conflicts: ÔÊÐíÓû§Ð޸ijåÍ»
+#
+# << MISSING >>
+# limit-appts-help:
+# English text: Allows the system administrator to set a system-wide limit on the number of appointments a single user can have on any single day.
+#
+Limit number of timed events per day: ÏÞÖÆÿÌìÒÑ°²ÅÅʼþµÄÊýÁ¿
+#
+# << MISSING >>
+# limit-appts-number-help:
+# English text: Specifies the maximum number of timed events a user can have in a single day.
+#
+Maximum timed events per day: ÿÌì×î´óÒÑ°²ÅÅʱ¼äʵ¼ùµÄÊýÁ¿
+Plugins: ²å¼þ
+plugins-enabled-help: ÔÊÐíʹÓòå¼þÓ¦ÓóÌÐò
+Enable Plugins: ÔÊÐíʹÓòå¼þ
+#
+# << MISSING >>
+# plugins-sort-key-help:
+# English text: Specifies a sort key for the plugin.  This allows the plugins to appear in a specific order.
+#
+Plugin: ²å¼þ
+Groups: ×é
+#
+# << MISSING >>
+# groups-enabled-help:
+# English text: Enables group support, allowing users to select users by groups.
+#
+Groups enabled: ʹÓÃ×é
+#
+# << MISSING >>
+# user-sees-his-group-help:
+# English text: If enabled, users will not see calendar users that are not in at least one of their groups.
+#
+User sees only his groups: Óû§Ö»ÄÜ¿´¼û×Ô¼ºµÄ×é
+Categories: ·ÖÀà
+#
+# << MISSING >>
+# categories-enabled-help:
+# English text: Enables support for event categories.
+#
+Categories enabled: ÔÊÐí·ÖÀà
+Nonuser: ·ÇÈÕÀúÓû§
+#
+# << MISSING >>
+# nonuser-enabled-help:
+# English text: If enabled, admins will have the option to add nonuser calendars
+#
+Nonuser enabled: ÔÊÐí·ÇÈÕÀúÓû§
+#
+# << MISSING >>
+# nonuser-list-help:
+# English text: Where to display the nonuser calendars in the participant list
+#
+Nonuser list: ·ÇÈÕÀúÓû§Çåµ¥
+Top: ¶¥²¿
+Bottom: µ×²¿
+Reports: ±¨¸æ
+#
+# << MISSING >>
+# reports-enabled-help:
+# English text: If enabled, users will see a "Reports" section at the bottom of each page and will be allowed to create custom reports.  Additionally, admin users can create global reports that will appear at the bottom of all users' pages.
+#
+Reports enabled: ÔÊÐí±¨¸æ
+Subscribe/Publish: ͶµÝ/·¢²¼
+#
+# << MISSING >>
+# subscriptions-enabled-help:
+# English text: Specifies if remote users can subscribe to a WebCalendar user's calendar, allowing them to see the WebCalendar user's events in their iCal-enabled application (such as Apple's iCal or Mozilla Calendar).
+#
+Allow remote subscriptions: ÔÊÐíÔ¶³ÌͶµÝ
+Email: Óʼþ
+#
+# << MISSING >>
+# email-enabled-help:
+# English text: Turn on or off all sending of email for notification and reminders.  Set to "no", if your server is not properly setup to send mail.
+#
+Email enabled: ʹÓÃÓʼþÒÑÆôÓÃ
+#
+# << MISSING >>
+# email-default-sender:
+# English text: Specifies the email address to specify as the sender when sending out reminders.
+#
+Default sender address: ĬÈÏÓʼþµØÖ·
+Default user settings: ĬÈÏÓû§ÉèÖÃ
+email-event-reminders-help: ÃèÊöÊÇ·ñÔÊÐí·¢ËÍʼþÌáÐÑÓʼþ
+Event reminders: ʼþ·¢Éúʱ֪ͨ
+#
+# << MISSING >>
+# email-event-added:
+# English text: Specifies whether or not to send email notifications when an event is added to your calendar.
+#
+Events added to my calendar: ʼþÌí¼Óµ½ÎÒµÄÈÕÀúʱ֪ͨ
+#
+# << MISSING >>
+# email-event-updated:
+# English text: Specifies whether or not to send email notifications when an event is updated on your calendar.
+#
+Events updated on my calendar: ÎÒµÄÈÕÀúÖÐʼþ¸üÐÂʱ֪ͨ
+#
+# << MISSING >>
+# email-event-deleted:
+# English text: Specifies whether or not to send email notifications when an event is removed from your calendar.
+#
+Events removed from my calendar: ÎÒµÄÈÕÀúÖÐʼþɾ³ýʱ֪ͨ
+#
+# << MISSING >>
+# email-event-rejected:
+# English text: Specifies whether or not to send email notifications when a participant rejects an event that is on your calendar.
+#
+Event rejected by participant: ʼþÉóºËδͨ¹ýʱ֪ͨ
+colors-help: All colors should be specified in "#RRGGBB" hexadecimal format where "RR" is the hex value for red, "GG" is the hex value for green, and "BB" is the hex value for blue.
+Colors: ÑÕÉ«
+Allow user to customize colors: ÔÊÐíÓû§¸öÐÔ»¯ÑÕÉ«
+Document background: Îļþ±³¾°
+Select: Ñ¡Ôñ
+Document title: Îļþ±êÌâ
+Document text: ÎĵµÎı¾
+Table grid color: ±íÕ¤¸ñÑÕÉ«
+Table header background: ±íÍ·±³¾°ÑÕÉ«
+Table header text: ±íÍ·Îı¾ÑÕÉ«
+Table cell background: ±í¸ñ±³¾°
+Table cell background for current day: µ±ÌìÑÕÉ«
+Table cell background for weekends: ÉèÖÃÖÜÄ©±³¾°É«
+Event popup background: ʼþµ¯³ö±³¾°ÑÕÉ«
+Event popup text: ʼþµ¯³öÎı¾ÑÕÉ«
+
+
+###############################################
+# Page: activity_log.php
+#
+Activity Log: »î¶¯ÈÕÖ¾
+User: Óû§
+Calendar: ÈÕÀú
+Date: ÈÕÆÚ
+Time: ʱ¼ä
+Event: ʼþ
+Action: »î¶¯
+Event created: ʼþÒÑ´´½¨
+Event approved: ʼþÒѵ½´ï
+Event rejected: ʼþÒѾܾø
+Event updated: ʼþÒѾ­¸üÐÂ
+Event deleted: ʼþÒÑɾ³ý
+Notification sent: ·¢ËÍ֪ͨ
+Reminder sent: ·¢ËÍÌáÐÑ
+Database error: Êý¾Ý¿â´íÎó
+Previous: ǰһҳ
+Next: ÏÂÒ»Ò³
+
+
+###############################################
+# Page: add_entry.php
+#
+Invalid entry id: ÎÞЧµÄ¼Í¼ID
+This is a private event and may not be added to your calendar.: ÕâÊÇÒ»¸ö˽ÈËʼþ²»ÄÜÌí¼Óµ½ÄúµÄÈÕÀúÖÐ.
+Error adding event: Ìí¼Óʼþ´íÎó
+
+
+###############################################
+# Page: admin_handler.php
+#
+Error: ´íÎó
+The following error occurred: ·¢ÉúÁËÏÂÃæµÄ´íÎó
+
+
+###############################################
+# Page: approve_entry.php
+#
+Error approving event: ´íÎóÅú×¼µÄʼþ
+
+
+###############################################
+# Page: category.php
+#
+Add: Ìí¼Ó
+Category Name: ·ÖÀàÃû³Æ
+Global: È«¾Ö
+Delete: ɾ³ý
+Are you sure you want to delete this entry?: ÄúÈ·¶¨É¾³ý´ËʼþÂð?
+Add New Category: ÐÂÔö·ÖÀà
+
+
+###############################################
+# Page: category_handler.php
+#
+
+
+###############################################
+# Page: datesel.php
+#
+
+
+###############################################
+# Page: day.php
+#
+Admin mode: ¹ÜÀíԱģʽ
+Assistant mode: ¸¨Öúģʽ
+Generate printer-friendly version: ²úÉú´òÓ¡°æ±¾
+Printer Friendly: ´òÓ¡
+
+
+###############################################
+# Page: del_entry.php
+#
+Hello: ÄúºÃ
+An appointment has been canceled for you by: Ô¼»áÒѾ­±»È¡Ïû, È¡ÏûÕßÊÇ
+The subject was: Ö÷ÌâÊÇ
+Notification: ͨ¸æ
+
+
+###############################################
+# Page: edit_entry.php
+#
+Edit Entry: ±à¼­Ê¼þ
+Add Entry: ÐÂÔöʼþ
+#
+# << MISSING >>
+# brief-description-help:
+# English text: This should provide a short description (about 20 characters) of the event.  This will represent the event when viewing the calendar.
+#
+Brief Description: ¸ÅÒªÃèÊö
+#
+# << MISSING >>
+# full-description-help:
+# English text: This should complete details of the event.  This information can be seen when a user views the event.
+#
+Full Description: ÍêÕûÃèÊö
+#
+# << MISSING >>
+# date-help:
+# English text: Specifies the date of the event.
+#
+#
+# << MISSING >>
+# time-help:
+# English text: Specifies the time of the event.<br />Select either "Timed event" (for an event that is scheduled for a specific time on that day), "Untimed event" (for an event this does not have a time (like a holiday), or "All day event" (for an event that takes all day (like being out of the office).
+#
+am: ÉÏÎç
+pm: ÏÂÎç
+Untimed event: ÎÞʱ¼äµÄʼþ
+Timed event: ÓÐʱ¼äµÄʼþ
+All day event: È«Ììʼþ
+#
+# << MISSING >>
+# duration-help:
+# English text: Specifies the duration (in hours:minutes) of the event.  <br /><i>This field can be left blank.</i>
+#
+Duration: ³ÖÐøʱ¼ä
+hours: ʱ
+#
+# << MISSING >>
+# priority-help:
+# English text: Specifies the priority of the event.  High priority events will be displayed in bold.
+#
+Priority: ÓÅÏȵȼ‰
+Low: µÍ
+Medium: ÖÐ
+High: ¸ß
+#
+# << MISSING >>
+# access-help:
+# English text: Specifies the access level of the event.<br /> <i>Public</i>: Everyone can see the full details of the event.  <br /><i>Confidential</i>: Others can see that you have an entry for that date and time, but not the details of what it is.
+#
+Access: ÏÔʾÉèÖÃ
+Public: ¹«ÖÚµÄ
+Confidential: »úÃܵÄ
+category-help: ·ÖÀà-°ïÖú
+Category: ·ÖÀà
+None: ÎÞ
+days: Ìì
+before event: ʼþ֮ǰËͳö
+#
+# << MISSING >>
+# participants-help:
+# English text: Lists the participants of this entry.
+#
+Participants: ²ÎÓëÕß
+#
+# << MISSING >>
+# external-participants-help:
+# English text: Specifies a list of participants for the event that are not calendar users.  The users should be listed one per line and can include an email address.  If an email address is specified, the user is eligible to receive notications and reminders.
+#
+External Participants: ÆäËû²ÎÓëÕß
+#
+# << MISSING >>
+# repeat-type-help:
+# English text: Select how often the event should repeat.<i>Monthly (by day)</i> allows an event to repeat on the 1st Monday of the month, 3rd Thursday of the month, etc.  <i>Monthly (by date)</i> allows an event to repeat on the same day of the month.
+#
+Repeat Type: ÖÜÆÚÐÔÉèÖÃ
+Daily: ÿÈÕµÄ
+Weekly: ÿÖܵÄ
+Monthly: ÿÔµÄ
+by day: °´Ìì
+by day (from end): °´Ìì(´Ó½áÊø¿ªÊ¼)
+by date: °´ÈÕÆÚ
+Yearly: ÿÄêµÄ
+#
+# << MISSING >>
+# repeat-end-date-help:
+# English text: Specifies the date the event should repeat until.
+#
+Repeat End Date: ÖÜÆÚ½áÊøÈÕÆÚ
+Use end date: ʹÓýáÊøÈÕÆÚÉèÖÃ
+#
+# << MISSING >>
+# repeat-day-help:
+# English text: Specifies which days of the week the event should repeat on.  This is for use only when <i>Repeat Type</i> is set to <i>Weekly</i>.
+#
+Repeat Day: Öظ´ÓÚ
+for weekly: ½öÿÖܵÄ
+Tuesday: ÐÇÆÚ¶þ
+Wednesday: ÐÇÆÚÈý
+Thursday: ÐÇÆÚËÄ
+Friday: ÐÇÆÚÎå
+Saturday: ÐÇÆÚÁù
+#
+# << MISSING >>
+# repeat-frequency-help:
+# English text: Specifies how often the event should repeat.  The default 1 indicates it should occur every time.  Specifying 2 will make the event occur every other week (if <i>Repeat Type</i> is set to <i>Weekly</i>), every other month (if <i>Repeat Type</i> is set to <i>Monthly</i>), etc.
+#
+Frequency: Öظ´´ÎÊý
+Delete entry: ɾ³ýʼþ
+You are not authorized to edit this entry: You are not authorized to edit this entry
+
+
+###############################################
+# Page: edit_layer.php
+#
+Edit Layer: ±à¼­²ã
+Add Layer: ÐÂÔö²ã
+Source: À´Ô´
+Color: ÑÕÉ«
+Duplicates: ¸±±¾
+Show layer events that are the same as your own: ÔÚÄúµÄÈÕÀúÖÐͬʱÏÔʾÀ´Ô´ÕßµÄʼþ
+Are you sure you want to delete this layer?: ÄúÈ·¶¨ÒªÉ¾³ýÕâ¸ö²ãÂð?
+Delete layer: ɾ³ý²ã
+
+
+###############################################
+# Page: edit_layer_handler.php
+#
+You cannot create a layer for yourself: Äú²»ÄÜÄú×Ô¼º´´½¨Ò»¸ö²ã
+You can only create one layer for each user: ÄúÖ»ÄÜΪһ¸öÓû§À´Ô´ÉèÖÃÒ»¸ö²ã
+
+
+###############################################
+# Page: edit_user.php
+#
+Edit User: ±à¼­Óû§×ÊÁÏ
+Add User: ÐÂÔöÓû§
+Username: Óû§Ãû³Æ
+First Name: ÐÕ
+Last Name: Ãû
+E-mail address: µç×ÓÓʼþµØÖ·
+Password: ÃÜÂë
+again: ÔÙ´Î
+Admin: ¹ÜÀí
+Disabled for demo: ¹Ø±ÕÑÝʾģʽ
+Change Password: ¸ü¸ÄÃÜÂë
+New Password: еÄÃÜÂë
+Set Password: ÉèÖÃÃÜÂë
+
+
+###############################################
+# Page: edit_user_handler.php
+#
+Deleting users not supported: ²»Ö§³Öɾ³ýÓû§¹¦ÄÜ
+The passwords were not identical: ÃÜÂë²»Ò»Ñù
+You have not entered a password: ÄúûÓÐÊäÈëÃÜÂë
+
+
+###############################################
+# Page: export.php
+#
+Export: Êä³ö
+Export format: Êä³ö¸ñʽ
+Palm Pilot: Palm Pilot
+Export all dates: Êä³öËùÓÐ×ÊÁÏ
+Start date: ¿ªÊ¼ÈÕÆÚ
+End date: ½áÊøÈÕÆÚ
+Modified since: ¸ü¸Ä×Ô
+
+
+###############################################
+# Page: export_handler.php
+#
+export format not defined or incorrect: µ¼³ö¸ñʽ䶨Òå»ò²»ÕýÈ·
+
+
+###############################################
+# Page: group_edit.php
+#
+Unnamed Group: δÃüÃûµÄ×é
+Add Group: Ìí¼Ó×é
+Edit Group: ±à¼­×é
+Group name: ×éÃû
+Updated: ¸üÐÂ
+Created by: ´´½¨ÈË
+Users: Óû§
+
+
+###############################################
+# Page: group_edit_handler.php
+#
+You must specify a group name: Äú±ØÐëÖ¸¶¨Ò»¸ö×éÃû
+
+
+###############################################
+# Page: groups.php
+#
+Add New Group: ÐÂÔö×é
+
+
+###############################################
+# Page: icalfb.php
+#
+
+
+###############################################
+# Page: pref.php
+#
+Preferences: ²ÎÊýÉèÖÃ
+#
+# << MISSING >>
+# to modify the preferences for the Public Access calendar:
+#
+# << MISSING >>
+# tz-help:
+# English text: Specifies how many hours to adjust the time from server time to local time.
+#
+Timezone Offset: ʱÇøÉèÖÃ
+Add N hours to: Ìí¼Ó N Сʱµ½
+Subtract N hours from: ¼õÈ¥ N Сʱ´Ó
+same as: ÏàͬÓë
+server time: ·þÎñʱ¼ä
+Default Category: ĬÈÏ·ÖÀà
+When I am the boss: µ±ÎÒÊÇÀÏ°å
+Email me event notification: ¸øÎÒʼþµÄÓʼþ֪ͨ
+I want to approve events: ÎÒÏë²Î¼ÓÕâ¸öʼþ
+#
+# << MISSING >>
+# allow-remote-subscriptions-help:
+# English text: Specifies if remote users can subscribe to your calendar, allowing them to see your events in a iCal-enabled application (such as Apple's iCal or Mozilla Calendar).
+#
+#
+# << MISSING >>
+# remote-subscriptions-url-help:
+# English text: Displays the URL remote users should use to subscribe to your calendar.
+#
+#
+# << MISSING >>
+# URL:
+Sun: ÖÜÈÕ
+Mon: ÖÜÒ»
+Tue: Öܶþ
+Wed: ÖÜÈý
+Thu: ÖÜËÄ
+Fri: ÖÜÎå
+Sat: ÖÜÁù
+Save Preferences: ±£´æ²ÎÊý
+
+
+###############################################
+# Page: help_bug.php
+#
+Report Bug: ±¨¸æ´íÎó
+
+
+###############################################
+# Page: help_edit_entry.php
+#
+Adding/Editing Calendar Entries: ÐÂÔö/±à¼­ ÈÕÀúí—Ä¿
+
+
+###############################################
+# Page: help_index.php
+#
+Help Index: ¸¨ÖúË÷Òý
+Layers: ²ã´Î½á¹¹
+Import: ÊäÈë
+
+
+###############################################
+# Page: help_layers.php
+#
+Layers are useful for displaying other users' events in your own calendar.  You can specifiy the user and the color the events will be displayed in.: ÉèÖòã´ÎʹÔÚÄãµÄÈÕÀúÖÐÏÔʾÆäËûÓû§µÄʼþ. Ñ¡ÔñÓû§¼°ÉèÖÃÆäʼþµÄÑÕÉ«
+Add/Edit/Delete: Ìí¼Ó/±à¼­/ɾ³ý
+#
+# << MISSING >>
+# Clicking the Edit Layers link in the admin section at the bottom of the page will allow you to add/edit/delete layers.:
+Specifies the user that you would like to see displayed in your calendar.: Ñ¡ÔñÓû§Ê¹ÔÚÄãµÄÈÕÀúÖÐÏÔʾËûµÄʼþ
+The text color of the new layer that will be displayed in your calendar.: ÄãµÄÈÕÀúÖÐÏÔʾµÄвã´ÎµÄÎı¾ÑÕÉ«
+#
+# << MISSING >>
+# If checked, events that are duplicates of your events will be shown.:
+Disabling: ÕýÔڹرÕ
+Press the Disable Layers link in the admin section at the bottom of the page to turn off layers.: µã»÷Ò³Ãæ϶˹ÜÀí²¿·ÖµÄÍ£Óòã´Î¼Ü¹¹²»ÏÔʾ²ã´Î¼Ü¹¹ 
+Enabling: ÕýÔÚ´ò¿ª
+Press the Enable Layers link in the admin section at the bottom of the page to turn on layers.: µã»÷Ò³Ãæ϶˹ÜÀí²¿·ÖµÄÆôÓòã´Î¼Ü¹¹ÏÔʾ²ã´Î¼Ü¹¹ 
+
+
+###############################################
+# Page: help_admin.php
+#
+
+
+###############################################
+# Page: week.php
+#
+cont.: ¼ÌÐø
+
+
+###############################################
+# Page: layers.php
+#
+to modify the layers settings for the: Ð޸IJãÉèÖÃΪ£º
+Layers are currently: µ±Ç°µÄ²ã´ÎÊÇ
+Enabled: ÒÑʹÓÃ
+Disabled: ÒÑÍ£ÓÃ
+Disable Layers: Í£Óòã
+Enable Layers: ʹÓòã
+Layer: ²ã´Î
+Edit layer: ±à¼­²ã´Î
+Add layer: ÐÂÔö²ã´Î
+
+
+###############################################
+# Page: layers_toggle.php
+#
+
+
+###############################################
+# Page: list_unapproved.php
+#
+View this entry: ²é¿´Õâ¸öʼþ
+Approve this entry?: ºË×¼´Ëʼþ?
+Approve/Confirm: ºË×¼/È·¶¨
+Reject this entry?: ¾Ü¾ø´Ëʼþ?
+Reject: ¾Ü¾ø
+No unapproved events for: ûÓÐÄúδºË×¼µÄʼþ: 
+Unapproved Events: δºË×¼µÄʼþ
+Public Access: ¹«¹²µÄ
+
+
+###############################################
+# Page: view_entry.php
+#
+every: ÿ
+2nd: µÚ¶þ
+3rd: µÚÈý
+4th: µÚËÄ
+5th: µÚÎå
+1st: µÚÒ»
+last: ×îºó
+Description: ÃèÊö
+Status: ״̬
+Waiting for approval: µÈ´ýºË×¼
+Deleted: ÒѾ­É¾³ý
+Rejected: ¾Ü¾øµÄ
+External User: ÆäËûÓû§
+Approve/Confirm entry: ºË×¼/È·¶¨ ʼþ
+Reject entry: ¾Ü¾øʼþ
+Set category: ÉèÖÃÖÖÀà
+Edit repeating entry for all dates: ±à¼­ËùÓÐÈÕÆÚµÄÖظ´ÌõÄ¿
+Edit entry for this date: ±à¼­Õâ¸öÈÕÆÚµÄÌõÄ¿
+This will delete this entry for all users.: ¶ÔËùÓеÄÓû§Ò²Œ¢•þɾ³ýÕâ¸öʼþ.
+Delete repeating event for all dates: ɾ³ýËùÓÐʱ¼äµÄÕâ¸öÖظ´Ê¼þ
+Delete entry only for this date: Ö»ÓÐÕâ¸öÈÕÆÚɾ³ýÌõÄ¿
+Edit entry: ±à¼­Ê¼þ
+This will delete the entry from your calendar.: Õ⌢•þÄÄúµÄÈÕÀúɾ³ýÕâ¸öʼþ.
+Do you want to add this entry to your calendar?: ÄúÒªÐÂÔöÕâ¸öʼþµ½ÄúµÄÈÕÀúÂð?
+This will add the entry to your calendar.: Õ⌢•þÐÂÔöÕâ¸öʼþµ½ÄúµÄÈÕÀú.
+Add to My Calendar: ÐÂÔöµ½ÎÒµÄÈÕÀú
+Email all participants: ÓʼĸøËùÓеÄÌâÕß
+Show activity log: ÏÔʾ»î¶¯ÈÕÖ¾
+Hide activity log: Òþ²Ø»î¶¯ÈÕÖ¾
+Export this entry to: Êä³ö´ËÌõÄ¿µ½
+
+
+###############################################
+# Page: view_v.php
+#
+
+
+###############################################
+# Page: month.php
+#
+
+
+###############################################
+# Page: pref_handler.php
+#
+
+
+###############################################
+# Page: reject_entry.php
+#
+An appointment has been rejected by: Ô¼»áÒѾ­±»¾Ü¾ø, ¾Ü¾øÕßÊÇ
+The description is: Ïêϸ˵Ã÷
+Title: ±êÌâ
+
+
+###############################################
+# Page: search.php
+#
+Search: ²éѯ
+Advanced Search: ¸ß¼¶²éѯ
+Keywords: ¹Ø¼ü×Ö
+
+
+###############################################
+# Page: search_handler.php
+#
+You must enter one or more search keywords: ÄúÖÁÉÙÒªÊäÈëÒ»¸öËÑÑ°ÎÄ×Ö»ò¾ä×Ó
+Search Results: ²éѯ½á¹û
+match found: ±Ê·ûºÏ²éѯ
+matches found: ±Ê·ûºÏ²éѯ
+No matches found: ²éÎÞ×ÊÁÏ
+
+
+###############################################
+# Page: select_user.php
+#
+View Another User's Calendar: ²é¿´ÆäËûÓû§µÄÈÕÀú
+Go: Ç°Íù
+
+
+###############################################
+# Page: publish.php
+#
+
+
+###############################################
+# Page: users.php
+#
+denotes administrative user: Óû§¹ÜÀí†T
+Add New User: ÐÂÔöÓû§
+
+
+###############################################
+# Page: usersel.php
+#
+All: È«²¿
+Reset: ¸üÐÂ
+Remove: ɾ³ý
+Ok: È·ÈÏ
+Cancel: È¡Ïû
+
+
+###############################################
+# Page: import.php
+#
+#
+# << MISSING >>
+# This form will allow you to import entries from the Palm Desktop Datebook.:
+Exclude private records: ²»º¬¸öÈ˼ͼ
+Datebook File: Datebook Îļþ
+#
+# << MISSING >>
+# This form will import vCalendar (.vcs) 1.0 events:
+vCal File: vCal Îļþ
+#
+# << MISSING >>
+# This form will import iCalendar (.ics) events:
+#
+# << MISSING >>
+# iCal File:
+#
+# << MISSING >>
+# Overwrite Prior Import:
+
+
+###############################################
+# Page: year.php
+#
+
+
+###############################################
+# Page: view_d.php
+#
+
+
+###############################################
+# Page: view_m.php
+#
+
+
+###############################################
+# Page: view_w.php
+#
+
+
+###############################################
+# Page: views.php
+#
+Views: ÊÓͼ
+Add New View: ÐÂÔöÊÓͼ
+
+
+###############################################
+# Page: views_edit.php
+#
+Unnamed View: δÃüÃûµÄÊÓͼ
+Add View: ÐÂÔöÊÓͼ
+Edit View: ±à¼­ÊÓͼ
+View Name: ÊÓͼÃû³Æ
+View Type: ÊÓͼÀàÐÍ
+Week (Users horizontal): ÖÜ(Óû§Ë®Æ½)
+Week (Users vertical): ÖÜ(Óû§´¹Ö±)
+Week (Timebar): ÖÜ(ʱ¼äÌõ)
+Month (side by side): ÔÂ(Ò»¸ö½ÓÒ»¸ö)
+Month (on same calendar): ÔÂ(ÔÚÏàͬµÄÈÕÀúÉÏ)
+
+
+###############################################
+# Page: nonusers.php
+#
+#
+# << MISSING >>
+# NONUSER_PREFIX not set:
+# English text: NONUSER_PREFIX has not been set in config.php.
+#
+#
+# << MISSING >>
+# NonUser:
+# English text: NonUser Calendars
+#
+Calendar ID: ÈÕÀú±àºÅ
+Add New NonUser Calendar: Ìí¼ÓеķÇÈÕÀúÓû§
+
+
+###############################################
+# Page: nonusers_handler.php
+#
+
+
+###############################################
+# Page: view_l.php
+#
+
+
+###############################################
+# Page: help_pref.php
+#
+#
+# << MISSING >>
+# default-category-help:
+# English text: Specifies the category a new event should default to.
+#
+
+
+###############################################
+# Page: report.php
+#
+Private: ˽È˵Ä
+Approved: ÓÐЧµÄ
+Unknown: δ֪µÄ
+to manage reports for the Public Access calendar: ¹ÜÀí¹«¹²ÈÕÀúµÄ±¨¸æ
+Add new report: ÐÂÔö±¨¸æ
+Invalid report id: ÎÞЧµÄ±¨¸æ±àºÅ
+Manage Reports: ¹ÜÀí±¨¸æ
+
+
+###############################################
+# Page: login.php
+#
+You must enter a login and password: Äú±ØÐëÊäÈëÓû§Ãû³Æ¼°ÃÜÂë
+Save login via cookies so I don't have to login next time: ½«µÇ¼×ÊÁÏ´æ´¢ÓÚ cookies ÖУ¬Ï´ξͲ»ÐèÒªÔٵǼϵͳ¡£
+Login: 怬
+Access public calendar: ½øÈ빫¹²ÈÕÀú
+cookies-note: <b>×¢Òâ:</b> ±¾³ÌÐòÐèÒª cookies ²ÅÄÜʹÓÃ.
+
+
+###############################################
+# Page: views_edit_handler.php
+#
+You must specify a view name: Äú±ØÐëÖ¸¶¨Ò»¸öÊÓͼÃû³Æ
+
+
+###############################################
+# Page: week_details.php
+#
+New Entry: ÐÂʼþ
+
+
+###############################################
+# Page: import_handler.php
+#
+#
+# << MISSING >>
+# Import Results:
+#
+# << MISSING >>
+# Events successfully imported:
+#
+# << MISSING >>
+# Events from prior import marked as deleted:
+Conflicting events: ³åͻʼþ
+Errors: ´íÎó
+Back to My Calendar: ·µ»ØÎÒµÄÈÕÀú
+#
+# << MISSING >>
+# There was an error parsing the import file or no events were returned:
+#
+# << MISSING >>
+# The import file contained no data:
+The following conflicts with the suggested time: ÔÚÖ¸¶¨µÄʱ¼äÄÚÓÐÏÂÃæµÄ³åÍ»
+Unnamed Event: δÃüÃûµÄʼþ
+Scheduling Conflict: Èճ̳åÍ»
+conflicts with the following existing calendar entries: ͬÏÂÃæÒÑ´æÔÚµÄÈÕÀúʼþ³åÍ»
+Event Imported: ʼþÒÑÊäÈë
+
+
+###############################################
+# Page: edit_report.php
+#
+Tomorrow: Ã÷Ìì
+Today: ½ñÌì
+Yesterday: ×òÌì
+Day before yesterday: Ç°Ìì
+Next week: ÏÂÖÜ
+This week: ±¾ÖÜ
+Last week: ÉÏÖÜ
+Week before last: ÉÏÉÏÖÜ
+Next week and week after: ÏÂÖܺÍÏÂÖÜÒÔºó
+This week and next week: ±¾ÖܺÍÏÂÖÜ
+Last week and this week: ÉÏÖܺͱ¾ÖÜ
+Last two weeks: ×îºóÁ½ÖÜ
+Next month: ÏÂÔÂ
+This month: ±¾ÔÂ
+Last month: ÉÏÔÂ
+Month before last: ÉÏÉÏÔÂ
+Next year: Ã÷Äê
+This year: ½ñÄê
+Last year: È¥Äê
+Year before last: Ç°Äê
+Unnamed Report: δÃüÃûµÄ±¨¸æ
+Add Report: Ìí¼Ó±¨¸æ
+Edit Report: ±à¼­±¨¸æ
+Report name: ±¨¸æÃû³Æ
+Current User: µ±Ç°Óû§
+Include link in trailer: °üÀ¨Î²²¿µÄÁª½Ó
+Include standard header/trailer: °üÀ¨±ê×¼µÄÍ·/β
+Date range: ÈÕÆÚ·¶Î§
+Include previous/next links: °üÀ¨Ç°Ò»¸ö/ºóÒ»¸öÁª½Ó
+Include empty dates: °üÀ¨¿ÕÈÕÆÚ
+Template variables: ÁÙʱ±äÁ¿
+Page template: Ò³ÃæÄ£°æ
+Day template: ÈÕÄ£°æ
+Event template: ʼþÄ£°æ
+Are you sure you want to delete this report?: ÄúÈ·ÈÏɾ³ýÕâ·Ý±¨¸æÂð£¿
+
+
+###############################################
+# Page: assistant_edit.php
+#
+Assistants: ÖúÀí
+Yours assistants: ÄúµÄÖúÀí
+
+
+###############################################
+# Page: view_t.php
+#
+
+
+###############################################
+# Page: assistant_edit_handler.php
+#
+
+
+###############################################
+# Page: adminhome.php
+#
+Account: ¸öÈË×ÊÁÏ
+#
+# << MISSING >>
+# NonUser Calendars:
+#
+# << MISSING >>
+# Delete Events:
+#
+# << MISSING >>
+# Public Preferences:
+#
+# << MISSING >>
+# Unapproved Public Events:
+#
+# << MISSING >>
+# Administrative Tools:
+
+
+###############################################
+# Page: purge.php
+#
+#
+# << MISSING >>
+# Purging events for:
+#
+# << MISSING >>
+# Finished:
+#
+# << MISSING >>
+# Delete all events before:
+#
+# << MISSING >>
+# Check box to delete <b>ALL</b> events for a user:
+#
+# << MISSING >>
+# Are you sure you want to delete events for:
+
+
+###############################################
+# Page: help_import.php
+#
+Palm Desktop: Palm ×ÀÃæ
+#
+# << MISSING >>
+# It should be located in your Palm directory in <tt>datebook/datebook.dat</tt> in a subdirectory named by your username.:
+#
+# << MISSING >>
+# The following entries will not be imported:
+#
+# << MISSING >>
+# Entries older than the current date:
+#
+# << MISSING >>
+# Entries created in the Palm Desktop that have not been HotSync'd:
+#
+# << MISSING >>
+# Anything imported from Palm will be overwritten during the next import (unless the event date has passed).:
+#
+# << MISSING >>
+# Therefore, updates should be made in the Palm Desktop.:
+#
+# << MISSING >>
+# vCal:
+#
+# << MISSING >>
+# The following formats have been tested:
+#
+# << MISSING >>
+# Palm Desktop 4:
+#
+# << MISSING >>
+# Lotus Organizer 6:
+#
+# << MISSING >>
+# Microsoft Outlook 2002:
+#
+# << MISSING >>
+# iCalendar:
+#
+# << MISSING >>
+# Enabling <b>Overwrite Prior Import</b> will cause events imported previously that used the same UID as an event from the new import file to be marked as deleted.  This should allow an updated iCalendar file to be imported without creating duplicates.:
+
+
+###############################################
+# Page: edit_report_handler.php
+#
+Variable N not found: ±äÁ¿NδÕÒµ½
+
+
+###############################################
+# Page: edit_entry_handler.php
+#
+A new appointment has been made for you by: ÄúÓÐÒ»¸öÐÂʼþ, Ìá½»ÕßÊÇ
+An appointment has been updated by: Ò»¸öÔ¼»áÒѾ­¸üÐÂ,¸üÐÂÈË:
+The subject is: Ö÷ÌâÊÇ
+Please look on: Çë²é¿´
+to accept or reject this appointment: ¾ö¶¨½ÓÊÜ»ò¾Ü¾øÕâ¸öʼþ
+to view this appointment: ²ì¿´´ËÔ¼»á
+Your suggested time of: ÄúÖ¸¶¨µÄʱ¼ä
+
+
+###############################################
+# Page: set_entry_cat.php
+#
+You have not added any categories: Äú»¹Ã»ÓÐÌí¼ÓÈκηÖÀà
+Set Category: ÉèÖ÷ÖÀà
+
+
+###############################################
+# Page: edit_template.php
+#
+#
+# << MISSING >>
+# Edit Custom Script/Stylesheet:
+#
+# << MISSING >>
+# Edit Custom Header:
+#
+# << MISSING >>
+# Edit Custom Trailer:
+
+
+###############################################
+# Page: includes/trailer.php
+#
+Go to: µ½
+My Calendar: ÎÒµÄÈÕÀú
+Logout: ×¢Ïú
+Another User's Calendar: ÆäËûÓû§µÄÈÕÀú
+Add New Entry: ÐÂÔöʼþ
+Manage Views: ¹ÜÀíÊÓͼ
+#
+# << MISSING >>
+# Manage calendar of:
+
+
+###############################################
+# Page: includes/connect.php
+#
+
+
+###############################################
+# Page: includes/user.php
+#
+Invalid login: ÎÞЧµÄµÇ¼
+Invalid user login: µÇ¼Óû§ÎÞЧ
+
+
+###############################################
+# Page: includes/site_extras.php
+#
+Send Reminder: ·¢ËÍÓʼþ֪ͨ
+
+
+###############################################
+# Page: includes/translate.php
+#
+
+
+###############################################
+# Page: includes/user-ldap.php
+#
+
+
+###############################################
+# Page: includes/user-nis.php
+#
+
+
+###############################################
+# Page: includes/help_trailer.php
+#
+
+
+###############################################
+# Page: includes/dbtable.php
+#
+
+
+###############################################
+# Page: includes/init.php
+#
+
+
+###############################################
+# Page: includes/functions.php
+#
+This event is confidential: Õâ¸öʼþÊÇ»úÃܵÄ
+exceeds limit of XXX events per day: ³¬¹ýÿÌìXXX¸öʼþ
+You have XXX unapproved events: ÄúÓÐ XXX δºË×¼µÄʼþ
+January: Ò»ÔÂ
+February: ¶þÔÂ
+March: ÈýÔÂ
+April: ËÄÔÂ
+May_: ÎåÔÂ
+June: ÁùÔÂ
+July: ÆßÔÂ
+August: °ËÔÂ
+September: ¾ÅÔÂ
+October: Ê®ÔÂ
+November: ʮһÔÂ
+Jan: 1ÔÂ
+Feb: 2ÔÂ
+Mar: 3ÔÂ
+Apr: 4ÔÂ
+May: 5ÔÂ
+Jun: 6ÔÂ
+Jul: 7ÔÂ
+Aug: 8ÔÂ
+Sep: 9ÔÂ
+Oct: 10ÔÂ
+Nov: 11ÔÂ
+Dec: 12ÔÂ
+
+
+###############################################
+# Page: includes/js/admin.php
+#
+Server URL is required: ÌîдϵͳURL
+Server URL must end with '/': ϵͳURL±ØÐëÒÔ'/'½áβ
+Invalid color for document background: ÎÞЧµÄÎĵµ±³¾°ÑÕÉ«
+Invalid color for document title: ÎÞЧµÄÎĵµ±êÌâÑÕÉ«
+Invalid color for table cell background: ÎÞЧµÄ±í¸ñµ¥Ôª±³¾°ÑÕÉ«
+Invalid color for table grid: ÎÞЧµÄ±í¸ñÍø¸ñÑÕÉ«
+Invalid color for table header background: ÎÞЧµÄ±íÍ·±³¾°ÑÕÉ«
+Invalid color for table text background: ÎÞЧµÄ±íÍ·Îı¾ÑÕÉ«
+Invalid color for event popup background: ÎÞЧµÄ±³¾°ÑÕÉ«
+Invalid color for event popup text: ÎÞЧµÄÎı¾ÑÕÉ«
+Invalid color for table cell background for today: ÎÞЧµÄµ±Ìì±í¸ñµ¥Ôª±³¾°ÑÕÉ«
+Color format should be '#RRGGBB': ÑÕÉ«¸ñʽÐèÒªÊÇ '#RRGGBB'
+
+
+###############################################
+# Page: includes/js/edit_entry.php
+#
+You have not entered a Brief Description: ÄúûÓÐÊäÈë¸ÅÒªÃèÊö
+You have not entered a valid time of day: ÄúûÓÐÊäÈëÕýÈ·µÄʱ¼ä
+The time you have entered begins before your preferred work hours.  Is this correct?: Õâ¸öʱ¶Î²»ÔÚÄú×Ô¶¨µÄ¹¤×÷ʱ¼äƒÈ.  ÕâÊÇÕýÈ·µÄÂð?
+
+
+###############################################
+# Page: includes/js/edit_layer.php
+#
+Invalid color: ÎÞЧµÄÑÕÉ«
+
+
+###############################################
+# Page: includes/js/pref.php
+#
+
+
+###############################################
+# Page: tools/send_reminders.php
+#
+This is a reminder for the event detailed below.: ÌáÐÑÓÐÍêÕûÃèÊöµÄʼþ
+Reminder: ÌáÐÑ

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Czech.txt
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Czech.txt	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Czech.txt	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,972 @@
+# Use this as a starting point to translate this application into
+# another language.  The format is "English text: translated text"
+# There cannot be a ":" in the English text.
+# Translated by: Hanuš Adler <had at penguin.cz> and Aldar
+# Translation last updated on 02-08-2005
+# UTF-8 charset format fixed by: Josef Karliak alias Chose ( chose <at> ajetaci <dot> cz )
+
+
+###############################################
+# Specify a charset (will be sent within meta tag for each page)
+#
+charset: UTF-8
+
+
+
+###############################################
+# Page: day.php
+#
+Next: Další
+Previous: Předchozí
+Admin mode: Admin mód
+Assistant mode: Mód asistenta
+Generate printer-friendly version: Verze pro tiskárnu
+Printer Friendly: Pro tiskárnu
+
+
+###############################################
+# Page: import_handler.php
+#
+Import Results: Výsledky importu
+Events successfully imported: Úspěšně importované události
+Events from prior import marked as deleted: Události označené v předchozím importu za smazané
+Conflicting events: Konfliktní události
+Errors: Chyby
+Error: Chyba
+There was an error parsing the import file or no events were returned: Nastala chyba při rozboru importovaného souboru a nebo nebyly vráceny žádné události
+The import file contained no data: Importovaný soubor neobsahoval žádná data
+Database error: Chyba databáze
+The following conflicts with the suggested time: Následují konfliky s navrhovaným časem
+Unnamed Event: Nepojmenovaná událost
+Scheduling Conflict: Naplánování konfliktu
+View this entry: Prohlédnout tento záznam
+conflicts with the following existing calendar entries: konflikt s následujícími záznamy v kalendáři
+Event Imported: Importované události
+
+
+###############################################
+# Page: del_entry.php
+#
+You are not authorized: Nemáte oprávnění
+Hello: Ahoj
+An appointment has been canceled for you by: Tvá sch?zka byla zru¿ena u¿ivatelem
+The subject was: Předmět byl
+Date: Datum
+Time: čas
+Notification: Oznámení
+
+###############################################
+# Page: month.php
+#
+Sun: ne
+Mon: po
+Tue: út
+Wed: st
+Thu: čt
+Fri: pá
+Sat: so
+
+
+###############################################
+# Page: edit_report.php
+#
+Tomorrow: Zítra
+Today: Dnes
+Yesterday: Včera
+Day before yesterday: Předevčírem
+Next week: Příští týden
+This week: Tento týden
+Last week: Minulý týden
+Week before last: P?edminulý týden
+Next week and week after: Příští 2 týdny
+This week and next week: Tento a příští týden
+Last week and this week: Tento a minulý týden
+Last two weeks: Minulé dva týdny
+Next month: Příští měsíc
+This month: Tento měsíc
+Last month: Minulý měsíc
+Month before last: Předminulý měsíc
+Next year: Příští rok
+This year: Tento rok
+Last year: Minulý rok
+Year before last: Předminulý rok
+Invalid report id: Neplatná sestava s id
+Unnamed Report: Nepojmenovaná sestava
+Add Report: Přidej sestavu
+Edit Report: Uprav sestavu
+Report name: Jméno sestavy
+Current User: Současný uživatel
+User: Uživatel
+Global: Globální
+Yes: Ano
+No: Ne
+Include link in trailer: Včetně odkazu v zápatí
+Include standard header/trailer: Včetně standardního záhlaví/zápatí
+Date range: Rozsah
+Category: Kategorie
+None: žádný
+Include previous/next links: Včetně odkazů na předchozí/další
+Include empty dates: Včetně prázdných dnů
+Template variables: Proměnné pro šablony
+Page template: Šablona stránky
+Day template: Šablona pro den
+Event template: Šablona pro událost
+Save: Uložit
+Delete: Smazat
+Are you sure you want to delete this report?: Opravdu chceš smazat tuto sestavu?
+
+
+###############################################
+# Page: groups.php
+#
+Add New Group: Přidej novou skupinu
+
+
+###############################################
+# Page: group_edit_handler.php
+#
+You must specify a group name: Musíš zadat jméno skupiny
+Changes successfully saved: Změny byly úspěšně uloženy
+
+
+###############################################
+# Page: list_unapproved.php
+#
+Approve/Confirm: Schválit/potvrdit
+Approve this entry?: Potvrdit tento záznam?
+Reject: Odmítnout
+Reject this entry?: Odmítnout tuto událost?
+Are you sure you want to delete this entry?: Opravdu si přeješ smazat tento záznam?
+No unapproved events for: Nejsou žádné nepotvrzené události pro uživatele:
+Unapproved Events: Nepotvrzené události
+Public Access: Veřejný přístup
+
+
+###############################################
+# Page: views_edit.php
+#
+Unnamed View: Nepojmenovaný náhled
+Add View: Přidej náhled
+Edit View: Uprav náhled
+View Name: Jméno náhledu
+View Type: Typ náhledu
+Day: Den
+Week (Users horizontal): Týden (uživatelé horizontální)
+Week (Users vertical): Týden (uživatelé vertikální)
+Week (Timebar): Týden (s rozdělením času)
+Month (Timebar): Měsíc (s rozdělením času)
+Month (side by side): Měsíc (vedle sebe)
+Month (on same calendar): Měsíc (v jednom kalendáři)
+preview: náhled
+Users: Uživatelé
+Select: Vyber
+Add: Přidat
+
+###############################################
+# Page: pref_handler.php
+#
+The following error occurred: Nastala následující chyba:
+
+
+###############################################
+# Page: adminhome.php
+#
+System Settings: Nastavení systému
+Preferences: Možnosti
+Account: Účet
+Assistants: Asistenti
+Categories: Kategorie
+Views: Náhledy
+Layers: Vrstvy
+Reports: Sestavy
+Delete Events: Mazání události
+Activity Log: Protokol o aktivitách
+Public Preferences: Veřejné předvolby
+Unapproved Public Events: Neschválené veřejné události
+Administrative Tools: Administrační nástroje
+
+
+###############################################
+# Page: approve_entry.php
+#
+Error approving event: Chyba při schvalování záznamu
+
+
+###############################################
+# Page: report.php
+#
+All day event: Celodenní událost
+Untimed event: Nenačasovaná událost
+Private: Soukromé
+minutes: minut
+Low: nízká
+Medium: střední
+High: vysoká
+Waiting for approval: čeká na schválení
+Deleted: Smazáno
+Rejected: Odmítnuto
+Approved: Odsouhlaseno
+Unknown: Neznámý
+Click here: Zde klikni
+to manage reports for the Public Access calendar: pro správu reportů u veřejně přístupných kalendářů
+Add new report: Přidej nový report
+cont.: pokr.
+Manage Reports: Správa sestav
+Admin: Admin
+
+
+###############################################
+# Page: add_entry.php
+#
+Invalid entry id: Neplatné id záznamu
+This is a private event and may not be added to your calendar.: Toto je bohužel soukromá událost a nemůžeš si jej přidat do svého kalendáře.
+Error adding event: Chyba při přidávání události
+
+
+###############################################
+# Page: week_details.php
+#
+Week: Týden
+New Entry: Nový záznam
+am: dop.
+pm: odp.
+
+
+###############################################
+# Page: group_edit.php
+#
+Unnamed Group: Nepojmenovaná skupina
+Add Group: Přidej skupinu
+Edit Group: Uprav skupinu
+Group name: Jméno skupiny
+Updated: Aktualizováno
+Created by: Vytvořil
+
+
+###############################################
+# Page: login.php
+#
+Invalid login: Neplatné přihlášení
+You must enter a login and password: Musíš zadat svůj platný login a heslo
+Username: Uživatelské jméno
+Password: Heslo
+Save login via cookies so I don't have to login next time: Abych se příště  nemusel přihlašovat, zapamatuj si přihlašovací údaje do cookies
+Login: Login
+Access public calendar: Přístup k veřejným kalendářům
+cookies-note: <b>Poznámka:</b> Pro přihlášení a správný běh je potřeba mít v prohlížeči povolena cookies.
+
+
+###############################################
+# Page: layers.php
+#
+Help: Nápověda
+Layers are currently: Stav vrstev:
+Enabled: Povoleno
+Disable Layers: Zakaž vrstvy
+Disabled: Zakázáno
+Enable Layers: Povol vrstvy
+to modify the layers settings for the: k úpravě nastavení vrstev pro
+calendar: kalendář
+Add layer: Přidej vrstvu
+Layer: Vrstva
+Edit layer: Uprav vrstvu
+Edit: Uprav
+Delete layer: Smaž vrstvu
+Are you sure you want to delete this layer?: Opravdu chceš smazat tuto vrstvu?
+Source: Zdroj
+Color: Barva
+Duplicates: Duplikáty
+
+
+###############################################
+# Page: view_entry.php
+#
+every: každý
+2nd: druhý
+3rd: třetí
+4th: čtvrtý
+5th: pátý
+Month: Měsíc
+1st: první
+last: poslední
+by date: podle data
+Year: Rok
+Confidential: důvěrný
+Description: Popis
+Status: Stav
+Repeat Type: Typ opakování
+Duration: Délka
+Priority: Priorita
+Access: Přístup
+Public: veřejný
+days: dnů
+day: den
+hours: hodin
+hour: hodina
+minute: minuta
+before event: před událostí
+Participants: Účastníci
+External User: Externí uživatel
+Approve/Confirm entry: Potvrdit/schválit záznam
+Reject entry: Zamítnout záznam
+Set category: Uprav kategorii
+Edit repeating entry for all dates: Uprav opakující se událost pro všechna data
+Edit entry for this date: Uprav záznam k tomuto datu
+Delete repeating event for all dates: Smaž opakující se záznam pro všechna data
+This will delete this entry for all users.: Tímto smažeš tento záznam pro všechny uživatelé.
+Delete entry only for this date: Smaž záznam pouze k tomuto datu
+Edit entry: Editovat záznam
+Delete entry: Smaž záznam
+Copy entry: Kopíruj záznam
+This will delete the entry from your calendar.: Tímto smažeš záznam ze svého kalendáře.
+Add to My Calendar: Přidej do mého kalendáře
+Do you want to add this entry to your calendar?: Přeješ si přidat tento záznam do svého kalendáře?
+This will add the entry to your calendar.: Tímto si přidáš záznam do svého kalendáře.
+Email all participants: Pošli email všem zúčastněným
+Show activity log: Zobraz protokol o aktivit?
+Hide activity log: Skryj protokol o aktivit?
+Calendar: Kalendář
+Action: Událost
+Event created: Byla založena událost
+Event approved: Událost byla přijata
+Event rejected: Událost byla odmítnuta
+Event updated: Událost byla aktualizována
+Event deleted: Událost byla změněna
+Notification sent: Bylo odesláno upozornění
+Reminder sent: Byla odeslána upopomínka
+Export this entry to: Exportuj tento záznam do
+Palm Pilot: Palm Pilot
+Export: Export
+
+
+###############################################
+# Page: edit_report_handler.php
+#
+Variable N not found: Proměnná N nebyla nalezena
+
+
+###############################################
+# Page: admin.php
+#
+Note: Poznámka
+Your user preferences: Tvé nastavení
+may be affecting the appearance of this page.: může ovlivnit vzhled této stránky.
+to not use your user preferences when viewing this page: , aby se nepoužívaly tvé uživatelské předvolby při prohlížení této stránky
+are being ignored while viewing this page.: budo ignorováno při prohlížení této stránky:
+to load your user preferences when viewing this page: pro použití tvých předvoleb
+Settings: Nastavení
+Groups: Skupiny
+NonUser Calendars: Neuživatelské kalendáře
+Other: Ostatní
+Email: Email
+colors-help: All colors should be specified in "#RRGGBB" hexadecimal format where "RR" is the hex value for red, "GG" is the hex value for green, and "BB"
+is the hex value for blue.
+Colors: Barvy
+app-name-help: Určuje jméno aplikace, které se na včech stránkách zobrazí v záhlaví prohlířeče. Zadaná hodnota se zkusí vyhledat v překladech, aby bylo možno definovat její znění ve všech jazycích.
+Application Name: Název aplikace
+server-url-help: Určuje základni URL k tomuto web kalendáři. Tato URL bude použita jako základ při zasílání email? s připomínkami a upozorňováním.
+Server URL: URL Serveru
+language-help: Určuje, jaký používat jazyk.
+Language: Jazyk
+Your browser default language is: Výchozí jazyk tvého prohlížeče je
+fonts-help: Určuje seznam systémových fontů, které se mají používat (jako jsou "Arial, Helvetica").
+Fonts: Písma
+custom-script-help: Povolí vkládání vlastních Javascriptů a nebo stylům, které budou vloženy do HTML hlavičky na každé stránce.
+Custom script/stylesheet: Vlastní styl/skripty
+custom-header-help: Umožňuje definovat vlastni HTML, které se přidá na začátek každé stránky
+Custom header: Vlastní hlavička
+custom-trailer-help: Umožňuje definovat vlastní HTML, které se přidá na konec každé stránky.
+Custom trailer: Vlastní patička
+preferred-view-help: Určuje výchozí pohled na kalendář (denní, týdení, měsíční a nebo roční)
+Preferred view: Upřednostňovaný pohled
+display-weekends-help: Vypisuje také víkendové dny při prohlížení týdne.
+Display weekends in week view: Zobrazovat víkend v týdením pohledu
+yearly-shows-events-help: V ročním pohledu bude zobrazovat události tučnými písmy.
+Display days with events in bold in month and year views: V měsíčním a ročním pohledu zobrazovat dny s událostmi tučně
+display-desc-print-day-help: Vypisuj popisy událostí v náhledu na den určenému pro tisk.
+Display description in printer day view: Zobrazuj popisy při tiskovém náhledu na den
+date-format-help: Určuje upřednostňovaný formát data.
+Date format: Formát data
+December: prosinec
+time-format-help: Určuje jaký formát času používat: <br /><i>12ti hodinový:</i> Zobratuje časy jako je 3dop., 8:30odp., atp.  <br /><i>24 hodinový:</i> Zobrazuje časy např jako 300, 2030, atp.
+Time format: Formát času
+12 hour: 12 hodin
+24 hour: 24 hodin
+time-interval-help: Určuje, po jakých časových úsecích bude den rozdělen při denním a týdením pohledu na kalendář.
+Time interval: Časový odstup
+auto-refresh-help: Pokud je povoleno, tak pohledy na den, měsíc, rok a na seznam nepovrzených události se budou periodicky obnovovat.
+Auto-refresh calendars: Obnovuj kalendář
+auto-refresh-time-help: Pokud je automatické obnovování povoleno, tímto lze určit, po jaké době se znovu načte kalendář.
+Auto-refresh time: Automaticky aktualizovat za
+require-approvals-help: Pokud je povoleno, uživatel bude muset danou událost nejprve potvrdit a teprve pak se mu zobrazí v kalendáři (samozěejmě, pokud nemá povoleno zobrazování nepotvrzených). Poznemenejme, že nastavením tohoto na "Ne" nevypne nutnost potvrzování událostí pro veřejně přístupné kalendáře (pokud jsou veřejně přístupné kalendáře povoleny...).
+Require event approvals: Vyžaduj potvrzování událostí
+display-unapproved-help: Tímto určíš, jestli se mají v tvém kalendáři zobrazovat nepotvrzené události<br /> Pokud je nastaveno na "Ano", pak se nepotvrzené události zobrazí v kalendáři (jinou barvou písma).<br /> Pokud je nastaveno na "Ne", nebudou nepotvrzené události zobrazeny, dokud je někdo nepotvrdí.
+Display unapproved: Zobrazovat nepotvrzené události
+display-week-number-help: Lze určit, zda se má zobrazovat číslo týdne (1-52) v týdením a měsíčním pohledu na kalendář.
+Display week number: Zobrazovat číslo týdne
+display-week-starts-on: Tímto lze určit, zda týden začíná v neděli a nebo v pondělí. Pokud vybereš pondělí, tak se použije pro čísla týdnu norma ISO.
+Week starts on: Začátek týdne
+Sunday: neděle
+Monday: pondělí
+work-hours-help: Tímto určíš rozsah času pro zobrazení dne v kalendáři.
+Work hours: Pracovní doba
+From: Od
+to: do
+disable-priority-field-help: Výběrem 'Ano' odstraníš políčko 'Priorita' ze stránky události. čímž se zajistí jednoduší formulář.
+Disable Priority field: Zakaž políčko priority
+disable-access-field-help: Výběrem 'Ano' odstraníš políčko 'Přístup' ze stránky události. čímž se zajistí jednoduší formulář.
+Disable Access field: Zakaž políčko pro nastavení přístupu
+disable-participants-field-help: Výběrem 'Ano' odstraníš políčko pro nastavování účastníků události - tím také zabráníš přidávání jiných uživatelů k událostem. Pokud povolíš tuto volbu, pak budeš chtít asi taky zakázat 'Povolení prohlížení si kalendářů jiných uživatelů'.
+Disable Participants field: Zakaž políčko pro účastníky
+disable-repeating-field-help: Výběrem 'Ano' se odstraní možnost nastavovat opakování události. Tímto se pro nováčky zjednoduší formulář.
+Disable Repeating field: Zakaž políčko pro opakování
+popup-includes-siteextras-help: Pokud je povoleno, umožní vlastní údaje k událostem. Nastavitelné v souboru site_extras.php. Bude zobrazeno v popupu události.
+Display Site Extras in popup: Zobrazuj rozšířené místní info k popupům
+allow-html-description-help: Pokud je povoleno, uživatelé si smí vkládat HTML kód do popisu události. Pokud je zakázáno, HTML bude 'oříznuto', takže bude vypadat jako čistý text bez formátování. POZOR: Povolením této vlastnosti umožníš uživatelům např. vkládat obrázky z jiných serverů. Tj. bezpečnostní riziko.
+Allow HTML in Description: Povol HTML v popisu
+allow-view-other-help: Určuje, zda si může uživatel prohlížet kalendář někoho jiného.
+Allow viewing other user's calendars: Povol prohlížení kalendářů jiných uživatelů
+allow-view-add-help: V náhledu na kalendáře jiných uživatelů přibude '+' pro rychlé vkládání nových událostí do jejich kalendářů.
+Include add event link in views: Přidej odkaz na vkládání v jiných pohledech
+remember-last-login-help: Pokud je povoleno, login uživatele bude předvyplněn na přihlašovací stránce (ne heslo) a bude i použito uživatelské nastavení bar
+ev a jazyka.
+Remember last login: Zapamatuj si poslední přihlášení
+conflict-check-help: Kontroluje konflikty mezi událostmi (dvě události naplánované na stejnou dobu pro tutéž osobu). Pokud tuto kontrolu povolíš, i tak bud
+e možno po potvrzení konfliktu naplánovat na stejnou dobu více událostí. Doporučujeme nechat tuto kontrolu zapnutou.
+Check for event conflicts: Kontrola na konflikty mezi událostmi
+conflict-months-help: Pokud je zapnuta kontrola konfliktů, tímto lze nastavit, kolik měsíců do budoucnosti má být prohledáno na možný konflikt. Jestliže ti
+ připadá, že vkládání nových událostí trvá moc dlouho, zmeň i toto číslo.
+Conflict checking months: Na konflikty kontolovat měsíc?
+conflict-check-override-help: Umožní uživatelům potlačit konflikt mezi událostmi a naplánovat dvě a více události na stejný čas.
+Allow users to override conflicts: Povol uživatlům potlačit konflikty
+limit-appts-help: Umožní administrátorovi nastavit systémové omezení počtu schůzek na jednoho uživatele a den.
+Limit number of timed events per day: Omez počet naplánovaných události na jeden den
+limit-appts-number-help: Určuje maximální počet událostí, které si může daný uživatel naplánovat na jeden den.
+Maximum timed events per day: Maximální počet naplánovaných události za den
+timed-evt-len-help: Určuje způsob zadávání, kterým se určí délka naplánované události.
+Specify timed event length by: Zadávání délky plánovaných událostí
+End Time: Koncovým časem
+Plugins: Doplňky
+plugins-enabled-help: Povolí doplňkové rozšíření aplikací
+Enable Plugins: Povol doplňky
+plugins-sort-key-help: Určuje způsob řazení doplňků.
+Plugin: Doplněk
+allow-public-access-help: Pokud je povoleno, bude možno bez možnosti zápisu přistupovat do kalendáře bez nutnosti se přihlašovat.
+Allow public access: Povolit veřejný přístup
+public-access-default-visible: Události od anonymů se automaticky objeví v kalendářích všech uživatelů
+Public access visible by default: Anonymní příspěvky standardně viditelné
+public-access-default-selected: Při přidávání nových události se anonmní účet automaticky přidá jako účastník.
+Public access is default participant: Anonymové budou ve výchozím stavu účastníky
+public-access-view-others-help: Určuje, zda při anonymním přístupu (nebo pomocí veřejného účtu) je možné si prohlížet kalendáře uživatelů tohoto systému.
+Public access can view other users: Anonymové si smějí prohlížet jiné uživatele
+public-access-can-add-help: Pokud je povoleno, lidé přistupující pomocí veřejného účtu/anonymnů budou moci vytvářet nové události, ale ty se nezobrazí do k
+alendářů, dokud to administrátor nepovolí.
+Public access can add events: Anonymové smějí přidávat události
+public-access-add-requires-approval-help: Určuje, zda nově vytvořené události pomocí veřejného účtu vyžadují souhlas předtím, než budou zobrazeny.
+Public access new events require approval: Nové události od anonymů vyžadují souhlas
+public-access-sees-participants-help: Pokud je povoleno, lidé přistupující ke kalendáři pomocí veřejného účtu/přístupu budou mít při prohlíšení události zo
+brazeny i účastníky.
+Public access can view participants: Anonymové smějí vidět účastníky
+groups-enabled-help: Povolí podporu skupin. To umožní řazení uživatelů do skupin.
+Groups enabled: Skupiny jsou povoleny
+user-sees-his-group-help: Pokud je povoleno, uživatel neuvidí kalendáře uživatelů, kteří nejsou alespoň v jedné z jeho skupin.
+User sees only his groups: Uživatel smí vidět jen svou skupinu
+nonuser-enabled-help: Pokud je povoleno, administrátoři budou mít možnost přidávat kalendáře nepatřící žádnému uživateli - neuživatelské kalendáře
+Nonuser enabled: Povolit neuživatelské kalendáře
+nonuser-list-help: Kde se mají zobratovat neuživatelské kalendáře v seznamu účastníků
+Nonuser list: Zobrazuj v seznamu účastníků
+Top: Nahoře
+Bottom: Dole
+reports-enabled-help: Pokud jsou povoleny, uživatelé uvidí "Sestavy" v dolní části každé stránky. Bude jim umožněno si sestavovat vlastní sestavy. Navíc, a
+dministrátoři můžou vytvářet globální sestavy, které se také všem objeví v dolní části stránek.
+Reports enabled: Povolit sestavy
+subscriptions-enabled-help: Určuje, zda se vzdálený uživatel smí připojit ke svému kalendáři v tomto systému. To mu umožní prohlížet si jeho události v apl
+ikacích, které podporují standard iCal (jako jsou iCal od Apple a nebo Mozilla Calendar).
+Allow remote subscriptions: Povolit vzdálené přihlášení ke kalendáři
+categories-enabled-help: Povolení a podpora kategorií událostí
+Categories enabled: Povolení kategorií                                                                                                                     allow-external-users-help: Určuje, zda se i neuživatelé kalendáře smějí přidávat k událostem. Tímto umožníte i lidem, co nemají tento kalendář, aby byli v seznamu účastníků.
+Allow external users: Povol externí uživatele
+external-can-receive-notification-help: Když jsou povoleni externí uživatelé a zapnuto odesílání emailu, můžou externí uživatelé dostávat upozorňování na změny v událostech do svých emailů (na přidání, aktualizaci a mazání). Samozřejmě, pokud je zadán jejich email.
+External users can receive email notifications: Externí uživatelé smějí dostávat upozornění na email
+external-can-receive-reminder-help: Když jsou povoleni externí uživatelé a zapnuto odesílání emailu s notifikacemi, můžou externí uživatelé také dostávat na email připomínky (pokud je samozřejmě zadán jejich email)
+External users can receive email reminders: Externí uživatelé smějí dostávat emailové připomínky
+email-enabled-help: Lze zapnout/vypnout odesílaní všech upozornění a připomínek na email. Nastav na "ne", pokud tvůj server není nastaven pro odesílání emailů.
+Email enabled: Odesílání emailu povoleno                                                                                                                   email-default-sender: Určuje emailovou adresu odesílatele připomínek.
+Default sender address: Výchozí adresa odesílatele                                                                                                         Default user settings: Výchozí uživatelské nastavení
+email-event-reminders-help: Určuje, zda zasílat na email připomínky na události                                                                            Event reminders: Připomínky na události
+email-event-added: Určuje, zda se má a nebo nemá zasílat upozornění na email v případě, že je přidaná nová událost do mého kalendáře.
+Events added to my calendar: Přidané události do mého kalendáře
+email-event-updated: Určuje, zda se má a nebo nemá zasílat upozornění na email v případě aktualizace události z mého kalendáře.                            Events updated on my calendar: Aktualizované události z mého kalendáře
+email-event-deleted: Určuje, zda se má a nebo nemá zasílat upozornění na odstraněnou událost z tvého kalendáře.                                            Events removed from my calendar: Odstraněné události z mého kalendáře
+email-event-rejected: Určuje, zda se má a nebo nemá zasílat upozornění na email, když jeden z účastníků zamítne událost z tvého kalendáře.
+Event rejected by participant: Událost byla zamítnuta účastníkem
+Allow user to customize colors: Povol uživatelům měnit si barvy
+Enable gradient images for background colors: Povol gradientová obrázky namísto barvy pozadí
+Not available: Není k dispozici                                                                                                                            Document background: Pozadí dokumentu
+Document title: Titulek                                                                                                                                    Document text: Text dokumentu
+Table grid color: Barva mřížky v tabulce
+Table header background: Pozadí záhlaví tabulky
+Table header text: Záhlaví tabulky                                                                                                                         Table cell background: Pozadí políček v tabulce
+Table cell background for current day: Pozadí políčka pro dnešní den
+Table cell background for weekends: Pozadí tabulky pro víkendy
+Event popup background: Pozadí vyskakovacího okna události                                                                                                 Event popup text: Text vyskakovacího okna události
+                                                                                                                                                           
+###############################################                                                                                                            # Page: help_admin.php
+#                                                                                                                                                          Display days with events in bold in year view: V ročním pohledu zobrazuj tučně dny s událostmi
+Nonuser: Neuživatelský kalendář
+Subscribe/Publish: Přijmout vzdálený/publikovat
+                                                                                                                                                           
+###############################################
+# Page: activity_log.php
+#
+Event: Událost
+
+
+###############################################
+# Page: usersel.php
+#
+All: Všichni
+Reset: Reset
+Remove: Odstranit
+Ok: OK
+Cancel: Zrušit
+
+
+###############################################
+# Page: assistant_edit.php
+#
+Your assistants: Tví asistenti
+
+
+###############################################
+# Page: views.php
+#
+Add New View: Přidej nový náhled
+
+
+###############################################
+# Page: import.php
+#
+Import: Import
+Import format: Datový formát importu
+Exclude private records: Vyjmout soukromé záznamy
+Overwrite Prior Import: Přepsat data předchozího importu
+
+
+###############################################
+# Page: edit_template.php
+#
+Edit Custom Script/Stylesheet: Uprav vlastní skript/styl
+Edit Custom Header: Uprav si vlastní hlavičku
+Edit Custom Trailer: Uprav si vlastní patičku
+
+
+###############################################
+# Page: reject_entry.php
+#
+An appointment has been rejected by: Schůzka byla odmítnuta uživatelem
+The description is: Popis je
+Title: WebCalendar
+
+
+###############################################
+# Page: help_index.php
+#
+Help Index: Index nápovědy
+Adding/Editing Calendar Entries: Přidávání/editování záznamů v kalendáři
+Report Bug: Oznam chybu
+
+
+###############################################
+# Page: select_user.php
+#
+View Another User's Calendar: Prohlédnou si kalendář jiného uživatele
+Go: Jdi
+
+
+###############################################
+# Page: help_edit_entry.php
+#
+Brief Description: Stručný popis
+brief-description-help: Zde by měl být stručný popis události (kolem 20ti znaků). Tímto textem bude zastupována událost při prohlížení kalendáře.
+Full Description: Detailní popis
+full-description-help: Tímto bys měl doplňovat další detaily události. Tyto informace si bude moct prohlédnout ten, kdo klikne na zobrazení podrobností.
+date-help: Tímto se určuje, kdy událost nastala.
+time-help: Tímto se určuje přesný čas události.<br /><i>Nemusí se sem nic vyplňovat.</i>
+duration-help: Tímto lze určit dobu trvání (v minutách) dané události. <br /><i>Toto políčko může zůstat prázdné.</i>
+end-time-help: Určuje očekávaný koned události.
+priority-help: Určuje prioritu události. Události s vyšší prioritou budou zobrazeny tučně.
+access-help: Určuje úroveň pro přístup k události.<br /> <i>Veřejné</i>: Kdokoli se může podívat na všechny podrobnosti o této události.  <br /><i>Důvěrné</i>: Ostaní uvidí, že máš záznam v kalendáři v daný okamžik, ale neuvidí už zádné další podrobnosti.
+participants-help: Seznam účastníků této události.
+repeat-type-help: Vyber si, jak často se má událost opakovat<i>Měsíčně (podle dne)</i> znamená, že se událost má opakovat každé první pondělí v měsíci, třetí úterý v měsíci, atp.  <i>Měsíčně (podle data)</i> umožní opakovýní události ve stejný den každý měsíc.
+Repeat End Date: Datum konce opakování
+repeat-end-date-help: Určuje datum, do kterého se smí událost opakovat.
+Repeat Day: Den opakování
+repeat-day-help: Určuje, které dny týdne by se událost měla opakovat. Použije se jen tehdy, pokud <i>typ opakování</i> je <i>týdně</i>.
+Frequency: Frekvence
+repeat-frequency-help: Určuje, jak často se má událost opakovat. Výchozí počet je 1 a značí, že se bude opakovat pokaždé. Zadáním 2 zajistíš opakování každé dva týdny (pokud <i>typ opakování</i> je <i>týdně</i>), každý druhý měsíc (pokud <i>typ opakování</i> je <i>měsíčně</i>), atp.
+
+
+###############################################
+# Page: edit_user_handler.php
+#
+Deleting users not supported: Mazání uživatelů není podporováno
+The passwords were not identical: Hesla nebyla shodná
+You have not entered a password: Nezadal jsi heslo
+
+
+###############################################
+# Page: edit_nonusers_handler.php
+#
+Calendar ID: ID kalendáře
+word characters only: může obsahovat pouze běžné znaky, bez háčků a čárek (a-zA-Z_0-9)
+###############################################
+# Page: edit_layer_handler.php
+#
+You cannot create a layer for yourself: Nemůžeš vytvářet vrstvu sám na sebe
+You can only create one layer for each user: Každého uživatele je možno dát jen do jedné vrstvy
+
+
+###############################################
+# Page: pref.php
+#
+Save Preferences: Uložit nastavení
+to modify the preferences for the Public Access calendar: pro úpravu předvoleb veřejně přístupného kalendáře
+tz-help: Lze ur?it, o kolik hodin má server upravovat čas vůči místnímu času.
+Timezone Offset: časová zóna
+Add N hours to: Přidej N hodin k
+Subtract N hours from: Odečti N hodin z
+same as: stejná, jako je
+server time: času na serveru
+Default Category: Výchozí kategorie
+When I am the boss: Když tady tomu šéfuju
+Email me event notification: Posílej mi emailem notifikace na události
+I want to approve events: Chci schvalovat události
+allow-remote-subscriptions-help: Určuje, zda si můžou externí uživatelé zapsat k odběru tvého kalendáře. Umožní jim to vidět tvé události v aplikaci porpodujícím standard iCal (jako je iCal od Apple nebo Mozilla Calendar).
+remote-subscriptions-url-help: Ukazuje URL pro externí uživatele, kterou můžou použít pro zapsání se k odběru tvého kalendáře.
+URL: URL
+
+
+###############################################
+# Page: help_layers.php
+#
+Layers are useful for displaying other users' events in your own calendar.  You can specifiy the user and the color the events will be displayed in.: Vrstvy jsou užitečné pro promítnutí událostí jiných uživatelů do tvého kalendáře. Lze určit od kterých uživatelů a jakou barvou je zobrazovat.
+Add/Edit/Delete: Přidat/Upravit/Smazat
+Clicking the Edit Layers link in the admin section at the bottom of the page will allow you to add/edit/delete layers.: Klikni si na úpravu vrstev v administrační části v dolní části stránky. To ti umožní jak přidávat, tak i upravovat a mazat vrstvy.
+Specifies the user that you would like to see displayed in your calendar.: Tímto vybíráš uživatele, kterého chceš mít zobrazeného ve svém kalendáři.
+The text color of the new layer that will be displayed in your calendar.: Barva text nové vrstvy zobrazené ve tvém kalendáři.
+If checked, events that are duplicates of your events will be shown.: Pokud je zaškrtnuto, budou zobrazeny i duplikáty tvých událostí z vrstev.
+Disabling: Zakázání
+Press the Disable Layers link in the admin section at the bottom of the page to turn off layers.: Pro zakázání vrstev stačí kliknout na zakázání vrstev v administračnní sekci "Vrstvy" v dolní části stránky.
+Enabling: Povolení
+Press the Enable Layers link in the admin section at the bottom of the page to turn on layers.: Pro zapnutí vrstev stačí kliknout na povolení vrstev v administračnní sekci "Vrstvy" v dolní části stránky.
+
+
+###############################################
+# Page: edit_entry_handler.php
+#
+A new appointment has been made for you by: Máš novou schůzku. Založil ti ji
+An appointment has been updated by: Schůzka byla upravena uživatelem
+The subject is: Předmětem je
+Please look on: Prosím podívej se na
+to accept or reject this appointment: pro přijetí a nebo odmítnutí této schůzky
+to view this appointment: k prohlédnutí schůzky
+Your suggested time of: Tebou navrhovaný čas
+
+
+###############################################
+# Page: edit_nonusers.php
+#
+NONUSER_PREFIX not set: Proměnná NONUSER_PREFIX nebyla v config.php nastavena.
+Edit User: Editovat uřivatele
+Add User: P?idat uřivatele
+First Name: Jméno
+Last Name: Příjmení
+
+
+###############################################
+# Page: search.php
+#
+Search: Hledat
+Keywords: Klíčová slova
+Advanced Search: Rozšířené hledání
+
+
+###############################################
+# Page: set_entry_cat.php
+#
+You have not added any categories: Nepřidával jsi žádné kategorie
+Set Category: Přiřaď kategorii
+
+
+###############################################
+# Page: edit_layer.php
+#
+Edit Layer: Upravit vrstvu
+Add Layer: Přidat vrstvu
+Show layer events that are the same as your own: Zobrazuj i ty události z vrstev, které máš stejné
+
+
+###############################################
+# Page: help_pref.php
+#
+default-category-help: Určuje kategorii, do které budou patřit nové události (výchozí nastavení)
+
+
+###############################################
+# Page: export_handler.php
+#
+export format not defined or incorrect: nebyl určen formát exportu a nebo není platný
+
+
+###############################################
+# Page: edit_user.php
+#
+E-mail address: E-mailová adresa
+again: znovu
+Disabled for demo: Pro 'demo' nepovoleno
+Are you sure you want to delete this user?: Opravdu si přeješ smazat tohoto uživatele?
+Change Password: Změnit heslo
+New Password: Nové heslo
+Set Password: Nastavit heslo
+
+
+###############################################
+# Page: help_import.php
+#
+Palm Desktop: Palm Desktop
+This form will allow you to import entries from the Palm Desktop Datebook.: Tento formulář umožňuje načíst záznamy ze zařízení Palm Desktop Datebook.
+It should be located in your Palm directory in <tt>datebook/datebook.dat</tt> in a subdirectory named by your username.: Datový soubor by se měl nacházet v adresáři Palm v souboru <tt>datebook/datebook.dat</tt> v podadresáři se tvým jménem.
+The following entries will not be imported: Následující záznamy nebudou importovány
+Entries older than the current date: Záznamy starší, než aktuální datum
+Entries created in the Palm Desktop that have not been HotSync'd: Záznamy vytvořené Palm Desktopem, které nebyly synchronizovány HotSyncem
+Anything imported from Palm will be overwritten during the next import (unless the event date has passed).: Cokoli importovaného z Palmu bude přepsáno následujícím importem (ledaže by již prošla platnost záznamu).
+Therefore, updates should be made in the Palm Desktop.: Proto, měl by provést aktualizaci v Palm Desktopu.
+vCal: vCal
+This form will import vCalendar (.vcs) 1.0 events: Tímto formulářem lze importovat události z vCalendar (.vcs) 1.0
+The following formats have been tested: Tyto formáty souborů byly otestovány
+Palm Desktop 4: Palm Desktop 4
+Lotus Organizer 6: Lotus Organizer 6
+Microsoft Outlook 2002: Microsoft Outlook 2002
+iCalendar: iCalendar
+This form will import iCalendar (.ics) events: Tímto formulářem lze importovat události z iCalendar (.ics)
+Enabling <b>Overwrite Prior Import</b> will cause events imported previously that used the same UID as an event from the new import file to be marked as deleted.  This should allow an updated iCalendar file to be imported without creating duplicates.: Zaškrtnutím <b>přepsat data předchozího importu</b> zapříčiní, že události již dříve importované se stejným UID jako importovaná událost, budou označeny jako smazány.
+
+
+###############################################
+# Page: export.php
+#
+Export format: Formát pro export
+Include all layers: Zahrnout všechny vrstvy
+Export all dates: Exportuj všechna data
+Start date: Počáteční datum
+End date: Koncové datum
+Modified since: Změněné od
+
+
+###############################################
+# Page: users.php
+#
+Add New User: Přidat nového uživatele
+denotes administrative user: označuje uživatele s administrátorskými právy
+
+
+###############################################
+# Page: search_handler.php
+You must enter one or more search keywords: Musíte vložit jedno nebo více klíčových slov pro vyhledávání
+Search Results: Výsledky vyhledávání
+match found: nalezen záznam
+matches found: nalezeny záznamy
+No matches found: žádné záznamy nenalezeny
+
+
+###############################################
+# Page: views_edit_handler.php
+#
+You must specify a view name: Musíš zadat jméno náhledu
+
+
+###############################################
+# Page: nonusers.php
+#
+Add New NonUser Calendar: Přidej nový obecný (ne pro uživatele) kalendář
+
+
+###############################################
+# Page: category.php
+#
+Category Name: Jméno kategorie
+Add New Category: Přidat novou kategorii
+
+
+###############################################
+# Page: edit_entry.php
+#
+Edit Entry: Uprav záznam
+Add Entry: Přidat záznam
+Details: Detaily
+Scheduling: Naplánování
+Repeat: Opakování
+category-help: Upřesňuje kategorii událostí.
+Timed event: Načasovaná událost
+external-participants-help: Určuje seznam zůčastněných události, které nepatří mezi uživatele tohoto kalendářového systému. Tyto uživatele je možno vypsat
+jednoho po druhém, jeden na řádek (včetně emailové adresy). Pokud bude zadána emailová adresa, uživatel bude moct přijímat sdělení a připomínky.
+External Participants: Vnější zůčastnění
+Daily: denně
+Weekly: týdně
+Monthly: měsíčně
+by day: podle dne
+by day (from end): podle dne (od konce)
+Yearly: ročně
+Use end date: Použij koncové datum
+Tuesday: úterý
+Wednesday: středa
+Thursday: čtvrtek
+Friday: pátek
+Saturday: sobota
+You are not authorized to edit this entry: Nemáš oprávnění upravovat tento záznam
+
+
+###############################################
+# Page: purge.php
+#
+Purging events for: Čištění událostí pro
+Finished: Dokončeno
+Delete all events before: Smazat všechny události před
+Check box to delete <b>ALL</b> events for a user: Zaškrtnout pro smazání <b>VŠECH</b> událostí a záznamŮ uživatele
+Are you sure you want to delete events for: Opravdu si přeješ smazat události uživatele
+Records deleted from: Záznamy smazány z
+
+
+###############################################
+# Page: includes/help_trailer.php
+#
+Go to: Jít na
+
+
+###############################################
+# Page: includes/functions.php
+#
+This event is confidential: Tento záznam je důvěrný
+exceeds limit of XXX events per day: překročení omezení na XXX událostí denně
+You have XXX unapproved events: Máš XXX nepotvrzených událostí
+January: leden
+February: únor
+March: březen
+April: duben
+May_: květen
+June: červen
+July: červenec
+August: srpen
+September: září
+October: říjen
+November: listopad
+Jan: led
+Feb: úno
+Mar: bře
+Apr: dub
+May: kvě
+Jun: čen
+Jul: čec
+Aug: srp
+Sep: zář
+Oct: říj
+Nov: lis
+Dec: pro
+
+
+###############################################
+# Page: includes/config.php
+#
+English: English
+Basque: Basque
+Bulgarian: Bulgarian
+Catalan: Catalan
+Chinese (Traditonal/Big5): Chinese (Traditonal/Big5)
+Chinese (Simplified/GB2312): Chinese (Simplified/GB2312)
+Czech: Česky
+Danish: Danish
+Dutch: Dutch
+Estonian: Estonian
+Finnish: Finnish
+French: French
+Galician: Galician
+German: German
+Holo (Taiwanese): Holo (Taiwanese)
+Hungarian: Hungarian
+Icelandic: Icelandic
+Italian: Italian
+Japanese: Japanese
+Korean: Korean
+Norwegian: Norwegian
+Polish: Polish
+Portuguese: Portuguese
+Portuguese/Brazil: Portuguese/Brazil
+Romanian: Romanian
+Russian: Russian
+Spanish: Spanish
+Swedish: Swedish
+Turkish: Turkish
+
+
+###############################################
+# Page: includes/site_extras.php
+#
+Send Reminder: Poslat upomínku
+
+
+###############################################
+# Page: includes/trailer.php
+#
+My Calendar: Můj kalendář
+Back to My Calendar: Zpět k mému kalendáři
+Another User's Calendar: Kalendář jiného uživatele
+Add New Entry: Přidat nový záznam
+Logout: Odhlášení
+Manage calendar of: Správa kalendáře uživatele
+
+
+###############################################
+# Page: includes/user.php
+#
+incorrect password: neplatné heslo
+no such user: neznámý uživatel
+Invalid user login: Chybné přihlášení uživatele
+
+
+###############################################
+# Page: includes/js/admin.php
+#
+Server URL is required: Je nutno zadat cestu (URL) k serveru
+Server URL must end with '/': Cesta k serveru (URL) musí kon?it na '/'
+Invalid color for document background: Neplatná barva pro pozadí dokumentu
+Invalid color for document title: Neplatná barva pro záhlaví dokumentu
+Invalid color for table cell background: Neplatná barva pro pozadí buněk tabulky
+Invalid color for table grid: Neplatná barva mřížky tabulky
+Invalid color for table header background: Neplatná barva pozadí v záhlaví tabulky
+Invalid color for table text background: Neplatná barva textu v tabulce
+Invalid color for event popup background: Neplatná barva pozadí u vyskakovacích (popup) událostí
+Invalid color for event popup text: Neplatná barva textu u vyskakovacích (popup) událostí
+Invalid color for table cell background for today: Neplatná barva pozadí buňky tabulky při zobrazení dne
+Color format should be '#RRGGBB': Formát barvy by například měl být '#RRGGBB'
+
+
+###############################################
+# Page: includes/js/edit_layer.php
+#
+Invalid color: Neplatná barva
+
+
+###############################################
+# Page: includes/js/edit_entry.php
+#
+You have not entered a Brief Description: Nevložil jste stručný popis
+You have not entered a valid time of day: Nevložil jste platný čas
+The time you have entered begins before your preferred work hours.  Is this correct?: Zadaný čas je před záčátkem nastavené pracovní doby. Je to v pořádku?
+
+
+###############################################
+# Page: tools/send_reminders.php
+#
+This is a reminder for the event detailed below.: Toto je připomínka události, podrobnosti následují.
+Reminder: Připomínka

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Danish.txt
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Danish.txt	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Danish.txt	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,1025 @@
+# Use this as a starting point to translate this application into
+# another language.  The format is "English text: translated text"
+# There cannot be a ":" in the English text.
+# Translated by: Allan Thraen (allan at 12go.dk)
+# Updated by: Jørgen Thomsen (jth at jth.net)
+# Last update: 12-Feb-2001
+# Last update: Nov.25-2003 by Jens Th (photo at jens-th.com)
+# Last updated: 15-Feb-2004 (Nicolaj Rasmussen, drlandau <at> msn <dot> com)
+# Last updated: 21-Mar-2005 (Morten Nielsen, mni <at> it <dot> dk)
+# Last updated: 18-Jun-2005 (Leo Todaro, leotodaro <at> hotmail.com)
+# Translation last updated on 21-March-2005
+#
+#
+#
+#
+#
+#
+#
+#
+#
+#
+#
+#
+#
+#  
+
+
+###############################################
+# Specify a charset (will be sent within meta tag for each page)
+#
+charset: iso-8859-1
+
+
+
+###############################################
+# Page: week.php
+#
+Week: Uge
+Previous: Forrige
+Next: Næste
+Admin mode: Administrator-tilstand
+Assistant mode: Assistent-tilstand
+cont.: cont.
+Generate printer-friendly version:  Vis printervenlig side
+Printer Friendly: Printervenlig
+
+
+###############################################
+# Page: admin.php
+#
+System Settings: System indstillinger
+Help: Hjælp
+You are not authorized: Du har ikke tilladelse til dette
+Admin: Admin
+Note: Note
+Your user preferences: Dine bruger-indstillinger
+may be affecting the appearance of this page.: kan påvirke udseendet af denne side
+Click here: Tryk her
+to not use your user preferences when viewing this page: for ikke at benytte dine bruger-indstillinger når denne side vises
+are being ignored while viewing this page.: ignoreres når denne side vises.
+to load your user preferences when viewing this page: for at hente dine bruger-indstillinger når denne side vises
+Save: Gem
+Settings: Indstillinger	 
+Public Access: Offentlig adgang
+Groups: Grupper
+NonUser Calendars: Ikke brugertilknyttede kalendere
+Other: Diverse
+Email: Email
+colors-help: Alle farver skal indtastes som #RRGGBB hvor RR er hexkoden for rød, GG er hexkoden for grøn og BB er hexkoden for den blå farve.
+Colors: Farver
+app-name-help: Angiver navnet på kalenderen. Dette fremgår i browserens titellinie for samtlige sider samt på login-siden.
+Application Name: Kalender navn
+server-url-help: Angiver basis URL'en for applikationen. Denne bliver inkluderet når der udsendes email påmindelser og notifikationer.
+Server URL: Server URL
+language-help: Angiver hvilket sprog, der skal bruges.
+Language: Sprog
+Your browser default language is: Din browsers standardsprog er
+fonts-help: Angiver en liste over skrifttyper systemet kan benytte (f.eks. "Arial, Helvetica")
+Fonts: Skrifttyper
+custom-script-help: Tilføjelse af brugertilpasset Javascript eller stylesheet tekst som indsættes HTML "head" sektionen på hver side
+Custom script/stylesheet: Bruger tilpasset script/stylesheet
+Yes: Ja
+No: Nej
+Edit: Redigér
+custom-header-help: Tilføjelse af brugertilpasset HTML kode som indsættes i toppen af hver side
+Custom header: Brugertilpasset sidehoved
+custom-trailer-help: Tilføjelse af brugertilpasset HTML kode som indsættes i bunden af hver side
+Custom trailer: Brugertilpasset sidefod
+preferred-view-help: Angiver den foretrukne opstilling (dag, uge, måned eller år).
+Preferred view: Foretrukken opstilling
+Day: Dag
+Month: Måned
+Year: År
+display-weekends-help: Inkluderer weekender i uge-visning
+Display weekends in week view: Vis weekender i uge-visning
+yearly-shows-events-help: På års-visning, brug fed skrift for dage med aftaler
+Display days with events in bold in month and year views: Brug fed skrift for dage med aftaler på måneds- og årsvisning
+display-desc-print-day-help: Vis aftalebeskivelser i printervenlig version af dags-visning
+Display description in printer day view: Vis beskrivelse i printervenlig dags-visning
+date-format-help: Angiver det foretrukne dato format.
+Date format: Dato format
+December: December
+time-format-help: Skal tiden vises pr 12 eller 24-timer.
+Time format: Tidsformat
+12 hour: 12 timer
+24 hour: 24 timer
+time-interval-help: Angiver hvor store tidsintervaller der benyttes i uge- og dags-visning.
+Time interval: Tidsinterval
+hour: timer
+minutes: minutter
+auto-refresh-help: Når slået til bliver dags-, uge-, måneds-visning, samt listen over ikke-accepterede sider automatisk opdateret periodisk.
+Auto-refresh calendars: Auto-opdater kalender
+auto-refresh-time-help: Angiver tiden imellem hver opdatering, hvis auto-opdatering er slået til.
+Auto-refresh time: Auto-opdater tid
+require-approvals-help: Når dette er slået til skal brugere acceptere en aftale før den vises i deres kalender (pånær hvis "Vis ikke-accepterede aftaler" er slået til. Bemærk at hvis denne indstilling slåes fra, vil det samtidig slå acceptering i den offentlige kalender fra (hvis dette er slået til).
+Require event approvals: Kræv acceptering af aftaler
+display-unapproved-help: Specificér her hvorvidt din kalender skal vise ikke-accepterede aftaler.
+Display unapproved: Vis ikke-accepterede aftaler
+display-week-number-help: Angiver hvorvidt ugenumre skal vises i uge-visninger.
+Display week number: Vis ugenummer
+display-week-starts-on: Hvorvidt ugen starter mandag eller søndag.
+Week starts on: Ugen starter på
+Sunday: Søndag
+Monday: Mandag
+work-hours-help: Specificer den daglige arbejdstid.
+Work hours: Arbejdstid
+From: Fra
+to: til
+disable-priority-field-help: Hvis der vælges "ja" fjernes feltet "Prioritet" fra sider med aftale-informationer. Dette giver en mere simpel brugerflade for begyndere.
+Disable Priority field: Fjern Prioritets-felt
+disable-access-field-help: Hvis der vælges "ja" fjernes feltet "Adgang" fra sider med aftale-informationer. Dette giver en mere simpel brugerflade for begyndere.
+Disable Access field: Fjern Adgangs-felt
+disable-participants-field-help: Hvis der vælges "ja" fjernes feltet "Deltagere" fra sider med aftale-informationer. Dette giver en mere simpel brugerflade for begyndere.
+Disable Participants field: Fjern Deltagere-felt
+disable-repeating-field-help: Hvis der vælges "ja" fjernes feltet "Gentagelse" fra sider med aftale-informationer. Dette giver en mere simpel brugerflade for begyndere.
+Disable Repeating field: Fjern Gentagelses-felt
+popup-includes-siteextras-help: Hvis slået til, vis brugertilpasset aftale opsætning fra site_extras.php i aftale popup-besked.
+Display Site Extras in popup: Vis Site Extras i popup-besked
+allow-html-description-help: Vis slået til, kan brugere indtaste HTML i aftalebeskrivelsen. Hvis ikke slået til, vil HTML-kode vises som alm. tekst. Advarsel: Hvis dette slåes til kan bruger linke til billeder på andre websider
+Allow HTML in Description: Tillad HTML i beskrivelsen
+allow-view-other-help: Angiver om en bruger må se i andre brugeres kalendere
+Allow viewing other user's calendars: Tillad visning af andres kalendere
+allow-view-add-help: A '+' ikon bliver inkluderet i visninger. Dette gøre brugere i stand til hurtigt at tilføje nye aftaler til andre brugeres kalendere.
+Include add event link in views: Inkluder "Tilføj aftale" i visninger
+remember-last-login-help: Når slået til bliver brugerens sidste login automatisk udfyldt på login-siden (ikke password) og brugerens indstillinger bliver automatisk hentet (inkl. deres foretrukne farver og sprogvalg).
+Remember last login: Husk sidste login
+conflict-check-help: Kontroller aftale-konflikter (2 aftaler der er oprettet til samme tid for den samme person). Hvis denne sættes til "ja" kan du stadig oprettet flere aftaler på samme tid hvis du godkender advarslen. HVis denne sættes til "nej" bliver der ikke kontrolleret efter aftale konflikter. Du bør sætte denne til "ja" så der bliver tjekket efter konflikter.
+Check for event conflicts: Check for aftale-konflikter
+conflict-months-help: Hvis konflikt-kontrol er slået til ("Kontroller aftale konflikter"), angiver dette hvor mange måneder frem der skal tjekkes for konflikter. Hvis det tager lang tid at tilføje nye aftaler, så sæt denne værdi ned.
+Conflict checking months: Kontroller månedskonflikter
+conflict-check-override-help: Gør det muligt for brugere at ignorere konflikter og oprette flere aftaler på samme tidspunkt.
+Allow users to override conflicts: Tillad brugere at ignorere aftale-konflikter
+limit-appts-help: Gør det muligt for en administrator at sætte begrænsning på antallet af aftaler en bruger må have pr. dag.
+Limit number of timed events per day: Begræns antal aftaler pr. dag
+limit-appts-number-help: Angiver det maksimale antal aftaler en bruger kan have pr. dag.
+Maximum timed events per day: Maximum antal aftaler pr. dag
+timed-evt-len-help: Angiver hvordan længden af en tidsbetemt aftale skal indtastes.
+Specify timed event length by: Angiv længde af tidsbestemt aftale ved
+Duration: Varighed
+End Time: Sluttid
+Plugins: Plugins
+plugins-enabled-help: Gør det muligt at benytte plugins.
+Enable Plugins: Aktiver plugins
+plugins-sort-key-help: Angiver en sorteringsnøgle for den valgte plugin. Dette gør det muligt at vise plugins i en speciel rækkefølge.
+Plugin: Plugin	
+allow-public-access-help: Når slået til kan kalenderen bruges som en offentlig kalender der ikke kræver login.
+Allow public access: Tillad offentlig adgang
+public-access-default-visible: Aftaler i den offentlige kalender vil automatisk optræde i alle brugeres kalendere
+Public access visible by default: Offentlig adgang vises altid
+public-access-default-selected: Når nye aftaler oprettes er brugen "Offentlig adgang" altid valgt som deltager.
+Public access is default participant: Offentlig adgang deltager altid
+public-access-view-others-help: Når kalenderen tilgåes med offentlig adgang, angiver dette om brugeren må se andre brugeres kalendere.
+Public access can view other users: Offentlig adgang kan se andre brugere
+public-access-can-add-help: Når slået til kan brugere, der tilgår kalenderen med offentlig adgang oprette nye aftaler, men disse vil ikke optræde i kalenderen før en administrator accepterer den nye aftale.
+Public access can add events: Offentlig adgang kan tilføje aftaler
+public-access-add-requires-approval-help: Angiver om aftaler tilføjet via en konto med offentlig adgang kræver godkendelse før den bliver vist.
+Public access new events require approval: Nye offentlige aftaler kræver accept
+public-access-sees-participants-help: Hvis slået til, kan brugere som tilgår kalenderen via offentlig adgang se aftale deltagere i detalje-visning 
+Public access can view participants: Offentlig adgang må se andre aftale-deltagere
+groups-enabled-help: Slår understøttelse af grupper til, hvilket gør brugere i stand til at vælge brugere via gruppemedlemsskab.
+Groups enabled: Grupper slået til
+user-sees-his-group-help: Hvis slået til kan brugeren ikke se kalender-brugere der ikke er medlem af mindst én af sine egne grupper.
+User sees only his groups: Bruger kan kun se sine egne grupper.
+nonuser-enabled-help: Hvis slået til, har administrator-brugere mulighed for at tilføje ikke brugertilknyttede kalendere.
+Nonuser enabled: Ikke brugertilknyttede kalendere slået til
+nonuser-list-help: Hvor skal ikke brugertilknyttede kalendere vises i deltagerlisten
+Nonuser list: Vis i deltagerliste i
+Top: Top
+Bottom: Bund
+reports-enabled-help: Hvis slået til kan brugere vælge "Rapporter" i bunden af hver side og har mulighed for at oprettet brugerdefinerede rapporter. Derudover kan administrator-brugere oprettet globale rapporter som vises i bunden af alle sider på alle brugere.
+Reports enabled: Rapporter slået til
+subscriptions-enabled-help: Angiver om eksterne brugere kan abonnere på en WebCalendar-bruger's kalender. Dette sætter dem i stand til at se brugerens aftaler i en Ical-applikation (fx. Apple's iCal eller Mozilla Calendar).
+Allow remote subscriptions: Tillad eksterne abonnementer
+categories-enabled-help: Slår understøttelse af aftale-kategorier til.
+Categories enabled: Kategorier slået til
+allow-external-users-help: Angiver om en ekstern bruger kan tilføjes til en aftale. Dette gør det muligt for brugere (uden for systemet) at blive angivet som deltagere til en aftale.
+Allow external users: Tillad eksterne brugere
+external-can-receive-notification-help: Når eksterne brugere er slået til samtidig med email udsendelse, så kan eksterne brugere modtage notifikationer når en aftale er tilføjet, opdateret eler slettet (hvis der er angivet en emailadresse for den eksterne bruger).
+External users can receive email notifications: Eksterne brugere kan modtage email-notifikationer
+external-can-receive-reminder-help: Når eksterne brugere er slået til samtidig med emailpåmindelser, så kan eksterne brugere modtage påmindelser når en aftale er tilføjet, opdateret eler slettet (hvis der er angivet en emailadresse for den eksterne bruger)
+External users can receive email reminders: Eksterne brugere kan modtage emailpåmindelser
+email-enabled-help: Slår email-afsendelse for notifikationer og påmindelser til/fra. Sæt til "nej" hvis din server ikke er konfigureret til at kunne sende email.
+Email enabled: Email aktiveret
+email-default-sender: Angiver email-adressen der skal benyttes når der afsendes påmindelser.
+Default sender address: Standard afsender-adresse
+Default user settings: Standard brugerindstillinger
+email-event-reminders-help: Angiver om der skal sendes påmindelser
+Event reminders: Aftale-påmindelser
+email-event-added: Angiver om der skal sendes en email notofikation når en aftale tilføjes din kalender.
+Events added to my calendar: Aftaler tilføjet til min kalender
+email-event-updated: Angiver om der skal sendes en email notifikation når en aftale opdateres i din kalender.
+Events updated on my calendar: Aftaler opdateret i min kalender
+email-event-deleted: Angiver om der skal sendes en email notifikation når en aftale fjernes fra din kalender.
+Events removed from my calendar: Aftaler fjernet fra min kalender
+email-event-rejected: Angiver om der skal sendes en email notifikation når en deltager afviser en aftale der findes i din kalender.
+Event rejected by participant: Aftale afvist af deltager
+Allow user to customize colors: Tillad bruger at ændre farver
+Enable gradient images for background colors: Slå farvegraduering til på baggrundsfarver
+Not available: Ikke tilgængelig
+Document background: Dokumentbaggrund
+Select: Vælg
+Document title: Dokumenttitel
+Document text: Dokumenttekst
+Table grid color: Farve for tabelrammer
+Table header background: Baggrund for tabeloverskrift
+Table header text: Tabeloverskrift
+Table cell background: Baggrund for tabelcelle
+Table cell background for current day: Baggrund for tabelcelle (idag)
+Table cell background for weekends: Baggrund for tabelcelle (weekender)
+Event popup background: Baggrund for aftale-popup
+Event popup text: Tekst i aftale-popup
+
+
+###############################################
+# Page: activity_log.php
+#
+Activity Log: Aktivitetslog
+User: Bruger
+Calendar: Kalender
+Date: Dato
+Time: Tidspunkt
+Event: Aftale
+Action: Handling
+Event created: Aftale oprettet
+Event approved: Aftale accepteret
+Event rejected: Aftale afvist
+Event updated: Aftale opdateret
+Event deleted: Aftale slettet
+Notification sent: Notifikation afsendt
+Reminder sent: Påmindelse afsendt
+Database error: Database fejl
+Events: Aftaler
+
+###############################################
+# Page: add_entry.php
+#
+Invalid entry id: Ugyldigt aftale ID
+This is a private event and may not be added to your calendar.: Dette er en privat aftale, som ikke må tilføjes til din kalender.
+Error adding event: Fejl ved tilføjelse af aftale
+
+
+###############################################
+# Page: admin_handler.php
+#
+Error: Fejl
+The following error occurred: Følgende fejl opstod
+
+
+###############################################
+# Page: approve_entry.php
+#
+Error approving event: Fejl ved godkendelse af aftale
+
+
+###############################################
+# Page: category.php
+#
+Categories: Kategorier
+Add: Tilføj
+Category Name: Navn på kategori
+Global: Global
+Delete: Slet
+Are you sure you want to delete this entry?: Er du sikker på at du vil slette denne aftale?
+Add New Category: Tilføj ny kategori
+
+
+###############################################
+# Page: del_entry.php
+#
+Hello: Hej
+An appointment has been canceled for you by: En aftale er blevet aflyst for dig af
+The subject was: Emnet var
+Notification: Påmindelse
+
+
+
+
+###############################################
+# Page: edit_layer.php
+#
+Edit Layer: Rediger lag
+Add Layer: Tilføj lag
+Source: Kilde
+Color: Farve
+Duplicates: Gentagelser
+Show layer events that are the same as your own: Vis lag-aftaler, der er de samme som dine egne
+Delete layer: Slet lag
+Are you sure you want to delete this layer?: Er du sikker på, at du vil slette dette lag?
+
+
+###############################################
+# Page: edit_layer_handler.php
+#
+You cannot create a layer for yourself: Du kan ikke oprettet et lag for dig selv
+You can only create one layer for each user: Du kan kun oprettet ét lag pr. bruger
+
+
+
+
+###############################################
+# Page: edit_user_handler.php
+#
+Deleting users not supported: Sletning af brugere er ikke understøttet
+The passwords were not identical: Kodeordene er ikke identiske
+You have not entered a password: Du har ikke indtastet et kodeord
+Changes successfully saved: Ændringer gemt
+
+
+###############################################
+# Page: subscription.php
+#
+Publishing Disabled (Admin): Udgivelse slået fra (Admin)
+Publishing Disabled (User): Udgivelse slået fra (User)
+Unnamed Event: Unavngiven aftale
+
+
+###############################################
+# Page: export.php
+#
+Export format: Eksport format
+Palm Pilot: Palm Pilot
+Include all layers: Inkludér alle lag
+Export all dates: Eksporter alle dage
+Start date: Startdato
+End date: Slutdato
+Modified since: Ændret siden
+Export: Eksporter
+
+
+###############################################
+# Page: export_handler.php
+#
+# export format not defined or incorrect: Eksport format ikke valgt eller fejl i formatet
+
+
+###############################################
+# Page: group_edit.php
+#
+Unnamed Group: Unavngiven gruppe
+Add Group: Tilføj gruppe
+Edit Group: Rediger gruppe
+Group name: Gruppenavn
+Updated: Opdateret
+Created by: Lavet af
+Users: Brugere
+
+
+###############################################
+# Page: group_edit_handler.php
+#
+You must specify a group name: Du skal angive navnet på en gruppe
+
+
+###############################################
+# Page: groups.php
+#
+# Add New Group: Tilføj ny gruppe
+
+
+###############################################
+# Page: pref.php
+#
+Preferences: Indstillinger
+Save Preferences: Gem indstillinger
+to modify the preferences for the Public Access calendar: for at ændre indstillinger for den offentlige kalender.
+tz-help: Angiver hvor mange timer tiden skal justeres fra serverens tid til den lokale tid.
+Timezone Offset: Tidszone forskydning
+Add N hours to: Tilføj N timer til
+Subtract N hours from: Træk N timer fra
+same as: samme som
+server time: serverens tidsindstilling
+Default Category: Standard kategori
+All: Alle
+When I am the boss: Når jeg er ejer
+Email me event notification: Email mig aftale notifikationer
+I want to approve events: Jeg ønsker at acceptere aftaler
+Subscribe/Publish: Abonnér/Udgiv
+allow-remote-subscriptions-help: Angiver om eksterne brugere kan tilmelde sig din kalender. Dette giver dem mulighed for at se dine aftaler i en iCal-applikation (fx. Apple's iCal eller Mozilla Calendar)
+remote-subscriptions-url-help: Viser den URL som eksterne brugere skal benytte for at tilmelde sig din kalender.
+URL: URL
+Sun: Søn
+Mon: Man
+Tue: Tir
+Wed: Ons
+Thu: Tor
+Fri: Fre
+Sat: Lør
+
+
+###############################################
+# Page: help_bug.php
+#
+Report Bug: Rapportér fejl
+
+
+###############################################
+# Page: help_edit_entry.php
+#
+Adding/Editing Calendar Entries: Tilføj/Redigér aftale
+Brief Description: Kort beskrivelse
+brief-description-help: Her skal der stå en kort beskrivelse af aftalen - det bliver vist når man står over aftalen i oversigtskalenderen.
+Full Description: Komplet beskrivelse.
+full-description-help: Her kan der stå en komplet beskrivelse af aftalen.
+date-help: Angiver datoen for aftalen.
+time-help: Angiver tidspunktet for aftalen.<br /><i>Dette felt behøver ikke at være udfyldt.</i>
+duration-help: I dette felt kan du angive varigheden af aftalen <br /><i>Dette felt behøver ikke at være udfyldt.</i>
+end-time-help: Angiver sluttidspunktet for aftalen.
+Priority: Prioritet
+priority-help: Angiv aftalens prioritet.
+Access: Adgang
+access-help: Angiv hvorvidt aftalen skal kunne ses af alle - eller om den er fortrolig.
+Participants: Deltagere
+participants-help: Vis deltagerne i denne aftale.
+Repeat Type: Gentag type
+repeat-type-help: Hvor ofte skal aftalen gentages.
+Repeat End Date: Gentag slutdato
+repeat-end-date-help: Specificer slutdatoen for gentagelser af denne aftale.
+Repeat Day: Gentag dato
+repeat-day-help: Hvilke ugedage skal aftalen gentages på.
+Frequency: Hyppighed
+repeat-frequency-help: Hvor ofte skal aftalen gentages ? Tallet 1 viser at det skal ske hver gang, 2 så er det hver anden gang...
+
+
+###############################################
+# Page: help_index.php
+#
+Help Index: Hjælpeindex
+Layers: Lag
+Import: Importér
+
+
+###############################################
+# Page: help_layers.php
+#
+Layers are useful for displaying other users' events in your own calendar.  You can specifiy the user and the color the events will be displayed in.: Lag er nyttige til at vise andre brugeres aftaler i din egen kalender. Du kan angive brugeren samt den farve du ønsker aftalerne vist i.
+Add/Edit/Delete: Tilføj/Rediger/Slet
+Clicking the Edit Layers link in the admin section at the bottom of the page will allow you to add/edit/delete layers.: Hvis du vælger "Rediger lag" i Admin-delen i bunden af siden har du mulighed for at slå lag til/fra samt redigere dem.
+Specifies the user that you would like to see displayed in your calendar.: Angiver den bruger du ønsker at vise i din egen kalender.
+The text color of the new layer that will be displayed in your calendar.: Tekstfarven på den nye lag som vises i din egen kalender.
+If checked, events that are duplicates of your events will be shown.: Hvis valgt vises aftaler der er kopier af dine egne.
+Disabling: Slå fra
+Press the Disable Layers link in the admin section at the bottom of the page to turn off layers.: Vælg "Slå lag fra" i Admin-delen i bunden af siden for at slå lag fra.
+Enabling: Slå til
+Press the Enable Layers link in the admin section at the bottom of the page to turn on layers.: Vælg "Slå lag til" i Admin-delen i bunden af siden for at slå lag til.
+
+
+###############################################
+# Page: help_admin.php
+#
+Display days with events in bold in year view: Brug fed skrift for dage med aftaler på års-visning
+Nonuser: Ikke brugertilknyttede kalendere
+Reports: Rapporter
+
+
+###############################################
+# Page: layers.php
+#
+Layers are currently: Lag er aktuelt
+Enabled: Slået til
+Disable Layers: Slå lag fra
+Disabled: Slået fra
+Enable Layers: Slå lag til
+to modify the layers settings for the: for at redigere lag indstillingerne for
+calendar: kalender
+Add layer: Tilføj lag
+Layer: Lag
+Edit layer: Rediger lag
+
+
+###############################################
+# Page: list_unapproved.php
+#
+View this entry: Se denne aftale
+Approve/Confirm: Godkend/bekræft
+Approve this entry?: Godkend denne aftale?
+Reject: Afvis
+Reject this entry?: Afvis denne aftale?
+No unapproved events for: Ingen ikke-accepterede aftaler for
+Unapproved Events: Ikke-accepterede aftaler
+
+
+###############################################
+# Page: view_entry.php
+#
+Low: Lav
+Medium: Medium
+High: Høj
+every: alle
+2nd: anden
+3rd: tredje
+4th: fjerde
+5th: femte
+1st: første
+last: sidste  
+by date: efter dato
+Confidential: Fortrolig
+Description: Beskrivelse
+Status: Status
+Waiting for approval: Afventer acceptering
+Deleted: Slettet
+Rejected: Afvist 
+All day event: Aftale for hele dagen 
+Public: Offentlig	 
+Category: Kategori	
+days: dage  
+day: dag 
+hours: timer 
+minute: minutter
+before event: før aftale
+External User: Eksterne brugere
+Approve/Confirm entry: Godkend/bekræft aftale
+Reject entry: Afvis aftale
+Set category: Vælg kategori
+Edit repeating entry for all dates: Rediger gentagne aftaler for alle datoer
+Edit entry for this date: Rediger aftale for denne dag
+Delete repeating event for all dates: Slet gentagne aftaler for alle datoer
+This will delete this entry for all users.: Dette vil slette denne aftale for alle brugere.
+Delete entry only for this date: Slet kun aftalen for denne dag
+Edit entry: Redigér aftale
+Delete entry: Slet aftale  
+Copy entry: Kopiér aftale
+This will delete the entry from your calendar.: Dette vil slette aftalen fra din kalender.
+Add to My Calendar: Føj til min kalender
+Do you want to add this entry to your calendar?: Vil du tilføje denne aftale til din kalender?
+This will add the entry to your calendar.: Dette vil tilføje aftalen til din kalender.
+Email all participants: Send email til alle deltagere
+Show activity log: Vis Aktivitetslog
+Hide activity log: Skjul Aktivitetslog
+Export this entry to: Eksporter denne visning til
+
+
+###############################################
+# Page: reject_entry.php
+#
+An appointment has been rejected by: En aftale er blevet afslået af
+The description is: Beskrivelsen er
+Title: Web-kalenderen
+
+
+###############################################
+# Page: search.php
+#
+Search: Søg
+Keywords: Søgeord
+Advanced Search: Avanceret søgning 
+
+
+###############################################
+# Page: search_handler.php
+#
+You must enter one or more search keywords: Du skal indtaste et eller flere søgeord
+Search Results: Søgeresultater
+match found: emne fundet
+matches found: emner fundet
+No matches found: Ingen emner fundet
+
+
+###############################################
+# Page: select_user.php
+#
+View Another User's Calendar: Se anden brugers kalender
+Go: Gå til
+
+
+###############################################
+# Page: users.php
+#
+Account: Konto
+Add New User: Tilføj ny bruger
+denotes administrative user: betyder administrativ bruger
+
+
+###############################################
+# Page: usersel.php
+#
+None: Alle
+Reset: Nulstil
+Remove: Fjern
+Ok: Ok
+Cancel: Annullér
+
+
+###############################################
+# Page: import.php
+#
+Import format: Import format
+Exclude private records: Undlad import af private aftaler
+Overwrite Prior Import: Overskriv tidligere import
+
+
+###############################################
+# Page: login.php
+#
+Invalid login: Ugyldig login
+You must enter a login and password: Du skal indtaste et brugernavn og kodeord
+Username: Brugernavn
+Password: Kodeord
+Save login via cookies so I don't have to login next time: Gem login-informationer i en cookie, så jeg ikke behøver indtaste dem næste gang
+Login: Log ind
+Access public calendar: Til offentlig kalender
+cookies-note: <b>OBS:</b> Dette program kræver at cookies er slået til i browseren
+
+
+###############################################
+# Page: views.php
+#
+Views: Visninger
+Add New View: Tilføj ny visning
+
+
+###############################################
+# Page: views_edit.php
+#
+Unnamed View: Unavngivet visning
+Add View: Tilføj visning
+Edit View: Rediger visning
+View Name: Navn på visning:
+View Type: Visningstype
+Week (Users horizontal): Uge (brugere opstilles horisontalt)
+Week (Users vertical): Uge (brugere opstilles vertikalt)
+Week (Timebar): Uge (tidslinie)
+Month (Timebar): Måned (tidslinie)
+Month (side by side): Måned (opstillet sidevis)
+Month (on same calendar): Måned (på samme kalender)
+preview: vis
+Selected: Valgt
+
+
+###############################################
+# Page: nonusers.php
+#
+NONUSER_PREFIX not set: NONUSER_PREFIX er ikke udfyldt i config.php.
+
+Add New NonUser Calendar: Tilføj ny ikke brugertilknyttet kalender
+
+
+###############################################
+# Page: nonusers_handler.php
+#
+Calendar ID: Kalender ID
+word characters only: må kun indeholde bogstaver og tal (a-zA-Z_0-9)
+
+
+###############################################
+# Page: help_pref.php
+#
+default-category-help: Angiver den kategori som nye aftaler får som standard.
+
+
+###############################################
+# Page: report.php
+#
+Untimed event: Ikke tidsbestemt aftale
+Private: Privat
+Approved: Accepteret
+Unknown: Ukendt
+to manage reports for the Public Access calendar: for at redigere rapporter i den offentlige kalender
+Add new report: Tilføj ny rapport
+Invalid report id: Ugyldig rapport ID
+Manage Reports: Rediger rapporter
+
+
+###############################################
+# Page: views_edit_handler.php
+#
+You must specify a view name: Du skal angive et navn for visningen
+
+
+###############################################
+# Page: view_l.php, veiw_m.php, view_d.php, view_t.php, view_v.php, view_w.php
+#
+No users for this view: Ingen brugere til denne visning
+
+
+###############################################
+# Page: week_details.php
+#
+New Entry: Ny aftale
+am: am
+pm: pm
+
+
+###############################################
+# Page: import_handler.php
+#
+Import Results: Import resultat
+Events successfully imported: Aftaler importeret
+Events from prior import marked as deleted: Aftaler fra tidligere import er markeret som slettede
+Conflicting events: Overlappende aftaler
+Errors: Fejl
+There was an error parsing the import file or no events were returned: Der skete en fejl under indlæsning af import-filen eller der kunne ikke findes nogen aftaler.
+The import file contained no data: Import-filen indeholder ingen data.
+The following conflicts with the suggested time: Følgende aftaler er i konflikt med det foreslåede tidspunkt
+Scheduling Conflict: Tidskonflikt
+conflicts with the following existing calendar entries: er i konflikt med eksisterende aftaler
+Event Imported: Aftaler importeret
+
+
+###############################################
+# Page: edit_entry.php
+#
+Edit Entry: Redigér aftale
+Add Entry: Tilføj aftale
+Details: Detaljer
+Scheduling: Tidsangivelse
+Repeat: Gentagelse
+category-help: Angiver aftalens kategori.
+Timed event: Tidsbestemt aftale
+Availability: Tlgængelighed
+external-participants-help: Angiver en liste over deltagere som ikke er kalender-brugere. Disse brugere skal listes én pr. linie og kan godt inkludere email-adresser. Hvis en email-adresse specificeres kan brugeren modtage notifikationer og påmindelser.
+External Participants: Eksterne deltagere
+Daily: Dagligt
+Weekly: Ugentligt
+Monthly: Månedligt
+by day: efter dag
+by day (from end): daglig
+Yearly: Årligt
+Use end date: Benyt slutdato
+Tuesday: Tirsdag
+Wednesday: Onsdag
+Thursday: Torsdag
+Friday: Fredag
+Saturday: Lørdag
+You are not authorized to edit this entry: Du har ikke ret til at slette denne aftale
+
+
+###############################################
+# Page: edit_report.php
+#
+Tomorrow: I morgen
+Today: Idag
+Yesterday: Igår
+Day before yesterday: Forrige dag
+Next week: Næste dag
+This week: Denne uge
+Last week: Sidste uge
+Week before last: Forrige uge
+Next week and week after: De næste 2 uger
+This week and next week: Denne uge + næste
+Last week and this week: Sidste + denne uge
+Last two weeks: Sidste 2 uger
+Next month: Næste måned
+This month: Denne måned
+Last month: Sidste måned
+Month before last: Forrige måned
+Next year: Næste år
+This year: Dette år
+Last year: Sidste år
+Year before last: Forrige år
+Unnamed Report: Unavngiven rapport
+Add Report: Tilføj rapport
+Edit Report: Rediger rapport
+Report name: Navn på rapport
+Current User: Nuværende bruger
+Include link in trailer: Inkluder link i sidefod
+Include standard header/trailer: Inkluder standard sidehoved/fod
+Date range: Dato område
+Include previous/next links: Medtag links til forrige/næste
+Include empty dates: Medtag tomme datoer
+Template variables: Skabelon variabler
+Page template: Side skabelon
+Day template: Dags skabelon
+Event template: Aftale skabelon
+Are you sure you want to delete this report?: Er du sikker på at du vil slette denne rapport?
+
+
+###############################################
+# Page: assistant_edit.php
+#
+Assistants: Assistenter
+Yours assistants: Dine assistenter
+
+
+###############################################
+# Page: adminhome.php
+#
+Delete Events: Slet aftaler
+Public Preferences: Indstillinger offentlig adgang
+Unapproved Public Events: Ikke-accepterede offentlige aftaler
+Administrative Tools: Administrator værktøjer
+
+
+###############################################
+# Page: purge.php
+#
+Preview: Vis
+Purging events for: Sletter aftaler for
+Finished: Færdig
+Check box to delete <b>ALL</b> events for a user: Afkryds for at slette <b>ALLE</b> aftaler for en bruger
+Delete all events before: Slet alle aftaler før
+Preview delete: Vis aftaler som slettes
+Are you sure you want to delete events for: Er du sikker på du vil slette aftaler for
+Records deleted from: Poster slettet fra
+
+
+###############################################
+# Page: set_entry_cat.php
+#
+You have not added any categories: Du har ikke tilføjet nogen kategorier
+Set Category: Vælg kategori
+
+
+###############################################
+# Page: help_import.php
+#
+Palm Desktop: Palm Desktop
+This form will allow you to import entries from the Palm Desktop Datebook.: Denne formular gør det muligt at importere aftaler fra Palm Desktop adressebog.
+It should be located in your Palm directory in <tt>datebook/datebook.dat</tt> in a subdirectory named by your username.: Den bør ligge i din Palm mappe i <tt>datebook/datebook.dat</tt>  i en undermappe med dit brugernavn.
+The following entries will not be imported: Følgende aftaler importeres ikke
+Entries older than the current date: Aftaler ældre end dags dato
+Entries created in the Palm Desktop that have not been HotSync'd: Aftaler oprettet på Palm Desktoppen som ikke er blevet HotSync'd
+Anything imported from Palm will be overwritten during the next import (unless the event date has passed).: Alle data importeret fra Palm bliver overskrevet ved den næste import (hvis ikke datoen for aftalen er passeret).
+Therefore, updates should be made in the Palm Desktop.: Derfor bør opdateringer blive lavet på Palm Desktoppen
+vCal: vCal
+This form will import vCalendar (.vcs) 1.0 events: Denne formular importerer vCalandar (.vcs) 1.0 aftaler
+The following formats have been tested: Følgende formater er testet
+Palm Desktop 4: Palm Desktop 4
+Lotus Organizer 6: Lotus Organizer 6
+Microsoft Outlook 2002: Microsoft Outlook 2002
+iCalendar: iCalendar
+This form will import iCalendar (.ics) events: Denne formular importerer iCalendar (.ics) aftaler
+Enabling <b>Overwrite Prior Import</b> will cause events imported previously that used the same UID as an event from the new import file to be marked as deleted.  This should allow an updated iCalendar file to be imported without creating duplicates.: Ved af anvende <b>Overskriv tidligere import</b> markeres aftaler med sammenfalende UID som slettet. Dette skulle sikre mod at der oprettes dubletter ved import af en opdateret iCalendar (.ics) fil
+
+
+###############################################
+# Page: edit_report_handler.php
+#
+Variable N not found: Variabel N ikke fundet
+
+
+###############################################
+# Page: edit_entry_handler.php
+#
+A new appointment has been made for you by: En ny aftale er blevet aftalt for dig af
+An appointment has been updated by: En aftale er blevet opdateret af
+The subject is: Emnet er
+Please look on: Se venligst på
+to accept or reject this appointment: for at acceptere eller afvise denne aftale
+to view this appointment: for at se denne aftale
+Your suggested time of: Din foreslåede tid for
+
+
+###############################################
+# Page: edit_user.php
+#
+Edit User: Redigér bruger
+Add User: Tilføj bruger
+First Name: Fornavn
+Last Name: Efternavn
+E-mail address: Email-adresse
+again: igen
+Disabled for demo: Slået fra i demo
+Are you sure you want to delete this user?: Er du sikker på du vil slette denne bruger?
+Change Password: Skift kodeord
+New Password: Nyt kodeord
+Set Password: Skift kodeord
+
+
+
+###############################################
+# Page: edit_template.php
+#
+Edit Custom Script/Stylesheet: Redigér brugertilpasset Script/Stylesheet
+Edit Custom Header: Redigér brugertilpasset sidehoved
+Edit Custom Trailer: Redigér brugertilpasset sidefod
+
+
+###############################################
+# Page: includes/trailer.php
+#
+Go to: Gå til
+My Calendar: Min kalender
+Back to My Calendar: Tilbage til min kalender
+Another User's Calendar: Anden brugers kalender
+Add New Entry: Tilføj ny aftale
+Logout: Log ud
+Manage calendar of: Administrér kalender for
+
+
+###############################################
+# Page: includes/user.php
+#
+
+no such user: bruger findes ikke
+Invalid user login: Ugyldig brugerlogin
+
+
+###############################################
+# Page: includes/site_extras.php
+#
+Send Reminder: Send påmindelse
+
+
+###############################################
+# Page: includes/config.php
+#
+English: Engelsk
+Basque: Bastisk
+Bulgarian: Bulgarsk
+Catalan: Katalansk
+Chinese (Traditonal/Big5): Kinesisk (Traditonal/Big5)
+Chinese (Simplified/GB2312): Kinesisk (Simplified/GB2312)
+Czech: Tjekkisk
+Danish: Dansk
+Dutch: Hollandsk
+Estonian: Estonsk
+Finnish: Finsk
+French: Fransk
+Galician: Galisisk
+German: Tysk
+Holo (Taiwanese): Holo (Taiwanesisk)
+Hungarian: Ugngarsk
+Icelandic: Islandsk
+Italian: Italiensk
+Japanese: Japansk
+Korean: Koreansk
+Norwegian: Norsk
+Polish: Polsk
+Portuguese: Portugisisk
+Portuguese/Brazil: Portugisisk/Brasiliansk
+Romanian: Rumænsk
+Russian: Russisk
+Spanish: Spansk
+Swedish: Svensk
+Turkish: Tykisk
+
+
+###############################################
+# Page: includes/functions.php
+#
+This event is confidential: Denne aftale er fortrolig
+exceeds limit of XXX events per day: overskrider grænsen på XXX aftaler pr. dag
+You have XXX unapproved events: Du har XXX ikke-accepterede aftaler
+January: Januar
+February: Februar
+March: Marts
+April: April
+May_: Maj
+June: Juni
+July: Juli
+August: August
+September: September
+October: Oktober
+November: November
+Jan: Jan
+Feb: Feb
+Mar: Mar
+Apr: Apr
+May: Maj
+Jun: Jun
+Jul: Jul
+Aug: Aug
+Sep: Sep
+Oct: Okt
+Nov: Nov
+Dec: Dec
+All Attendees: Alle deltagere
+Busy: Optaget
+Tentative: Afventende
+
+
+###############################################
+# Page: includes/js/admin.php
+#
+Server URL is required: Server URL er påkrævet
+Server URL must end with '/': Server URL skal slutte med '/'
+Invalid work hours: Ugyldig arbejdstid
+Invalid color for document background: Ugyldig baggrundsfarve
+Invalid color for document title: Ugyldig titelfarve
+Invalid color for table cell background: Ugyldig farve for tabelbaggrund
+Invalid color for table grid: Ugyldig farve for tabelrammen.
+Invalid color for table header background: Ugyldig farve for baggrunden for tabeloverskrifter.
+Invalid color for table text background: Ugyldig farve for baggrunden for tabelteksten.
+Invalid color for event popup background: Ugyldig farve for baggrunden for aftale-popup.
+Invalid color for event popup text: Ugyldig farve for aftale-popup tekst.
+Invalid color for table cell background for today: Ugyldig farve for dagens tabelbaggrund
+Color format should be '#RRGGBB': Farven skal skrives som '#RRGGBB'
+
+
+###############################################
+# Page: includes/js/edit_entry.php
+#
+You have not entered a Brief Description: Du har ikke indtastet en kort beskrivelse
+You have not entered a valid time of day: Du har ikke indtastet et gyldigt tidspunkt
+The time you have entered begins before your preferred work hours.  Is this correct?: Det valgte tidspunkt er før end din foretrukne arbejdstid. Er dette korrekt?
+Please add a participant: Tilføj venligst en deltager:
+
+
+###############################################
+# Page: includes/js/edit_layer.php
+#
+Invalid color: Ugyldig farve
+
+
+###############################################
+# Page: includes/js/pref.php
+#
+Change the date and time of this entry?: Skal dato og tid ændres for denne post?
+
+
+###############################################
+# Page: tools/send_reminders.php
+#
+This is a reminder for the event detailed below.: Dette er en påmindelse for aftalen beskrevet herunder
+Reminder: Påmindelse

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Dutch.txt
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Dutch.txt	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Dutch.txt	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,999 @@
+# Use this as a starting point to translate this application into
+# another language.  The format is "English text: translated text"
+# There cannot be a ":" in the English text.
+# Translated by: Marieke Timmer / marieke.timmer at tijdhof.nl and Arnout Engelen / arnouten at bzzt.net
+# Last update: 27 July 2003
+# check out the tools directory which contains two perl scripts:
+# check_translation.pl will tell you if you have successfully translated all records
+# Translation last updated on 07-03-2005
+
+
+###############################################
+# Specify a charset (will be sent within meta tag for each page)
+#
+charset: iso-8859-15
+
+
+
+###############################################
+# Page: week.php
+#
+Week: Week
+Previous: Vorige
+Next: Volgende
+Admin mode: Admin-modus
+Assistant mode: Assistentiemodus
+cont.: cont.
+Generate printer-friendly version: Genereer printversie
+Printer Friendly: Printversie
+
+
+###############################################
+# Page: admin.php
+#
+System Settings: Instellingen
+Help: Help
+You are not authorized: U heeft geen toegang
+Admin: Beheer
+Note: Let op!
+Your user preferences: Gebruikersinstellingen
+may be affecting the appearance of this page.: kunnen de weergave van deze pagina beinvloeden
+Click here: Klik hier
+to not use your user preferences when viewing this page: om de gebruikersinstellingen uit te schakelen bij het bekijken van deze pagina
+are being ignored while viewing this page.: worden genegeerd bij het bekijken van deze pagina
+to load your user preferences when viewing this page: om de gebruikersinstellingen te activeren bij het bekijken van deze pagina
+Save: Opslaan
+Settings: Instellingen
+Public Access: Publieke Toegang
+Groups: Groepen
+NonUser Calendars: Losse kalenders
+Other: Overige
+Email: E-mail
+colors-help: Alle kleuren moeten worden aangegeven als #RRGGBB hexadecimaal formaat waarin RR de hexadecimale waarde is voor rood, GG voor groen en BB voor blauw
+Colors: Kleuren
+app-name-help: Hier wordt de naam van de applicatie gedefinieerd, deze naam verschijnt in het browservenster op elke pagina en op de login-pagina.
+Application Name: Programmanaam
+server-url-help: Specificeert de basis URL van de applicatie, deze URL wordt gebruikt bij het verzenden van email notificaties en herinneringen.
+Server URL: Server URL
+language-help: Specificeert welke taal gebruikt dient te worden.
+Language: Taal
+Your browser default language is: De standaard-browsertaal is
+fonts-help: Specificeert een lijst van systeem-fonts die gebruikt kunnen worden, zoals Verdana, Arial, Helvetica, etc.
+Fonts: Lettertypen
+custom-script-help: Sta eigen Javascripts en stylesheets die in de HTML "head" van iedere pagina worden geplaatst toe.
+Custom script/stylesheet: Eigen script/stylesheet
+Yes: Ja
+No: Nee
+Edit: Aanpassen
+custom-header-help: Sta toe dat een eigen stukje HTML bovenaan iedere pagina wordt geplaatst.
+Custom header: Eigen paginahoofd
+custom-trailer-help: Sta toe dat een eigen stukje HTML onderaan iedere pagina wordt gelaten
+Custom trailer: Eigen pagina-onderschrift
+preferred-view-help: Specificeert de standaard agendaview - dag, week, maand, jaar.
+Preferred view: Voorkeursweergave
+Day: Dag
+Month: Maand
+Year: Jaar
+display-weekends-help: Toon ook weekends in week-view
+Display weekends in week view: Toon ook weekends in week-view
+yearly-shows-events-help: Als deze optie aan staat worden dagen met afspraken in de jaar-view vet gedruk weergegeven.
+Display days with events in bold in month and year views: Nummers van dagen met afspraken vet weergeven bij maand- en jaarweergave
+display-desc-print-day-help: Als deze optie aan staat worden de beschrijvingen van afspraak in de printversie van de dag-view ook getoond
+Display description in printer day view: Beschrijving weergeven in printversie dag-view
+date-format-help: Hier geeft u aan hoe de datum wordt weergegeven.
+Date format: Datumweergave
+December: December
+time-format-help: Hier geeft u aan hoe tijden worden weergegeven: <br/><i>12 uurs klok: </i> tijd wordt getoond als 3am, 8:30pm, etc. <br/><i> 24 uurs klok:</i> tijd wordt getoond als 3:00, 20:30, etc.
+Time format: Tijdweergave
+12 hour: 12 uur
+24 hour: 24 uur
+time-interval-help: Hiermee wordt de duur van de tijdblokken in de week- en dagview bepaald.
+Time interval: Tijdsinterval
+hour: uur
+minutes: minuten
+auto-refresh-help: Indien ingeschakeld zorgt deze optie voor een automatische periodieke update van de dag-, week- en maandview, evenals de lijst met nog niet bevestigde items.
+Auto-refresh calendars: Automatische agenda-update
+auto-refresh-time-help: Indien de optie auto-refresh is geactiveerd wordt hier het refres-interval ingesteld.
+Auto-refresh time: Interval automatische agenda-update
+require-approvals-help: Indien ingeschakeld dient een gebruiker een afspraak te bevestigen voordat deze in de agenda wordt getoond tenzij Weergave onbevestigde items is geactiveerd. <br>Let op: door deze optie te de-activeren worden alle bevestigingen voor de publiek toegankelijke agenda uitgeschakeld indien deze is geactiveerd.
+Require event approvals: Afspraakbevestigingen worden vereist
+display-unapproved-help: Geeft aan of openstaande, onbevestigde afspraken moeten worden weergegeven in uw agenda. <br>Indien u [ja] kiest worden openstaande afspraken in een andere tekstkleur in uw agenda weergegeven. <br>Indien u [nee] kiest moeten openstaande afspraken eerst bevestigd worden voordat deze in uw agenda worden getoond.
+Display unapproved: Openstaande afspraken tonen
+display-week-number-help: Geeft aan of het weeknummer (1-52) moet worden weergeven.
+Display week number: Weeknummer tonen
+display-week-starts-on: Specificeert of de week op zondag of maandag start. Indien wordt gekozen voor maandag worden ISO weeknummers getoond.
+Week starts on: De week begint op
+Sunday: Zondag
+Monday: Maandag
+work-hours-help: Specificeert hoe laat een normale dag begint en eindigt. <br><b>N.B.</b>: het is wel mogelijk om afspraken buiten deze tijden te maken; indien u dit doet wordt u om een bevestiging gevraagd.
+Work hours: Werktijden
+From: Van
+to: tot
+disable-priority-field-help: Door ja te kiezen wordt het veld Priority niet getoond bij het maken van uw afspraken; uw agenda kan hierdoor overzichtelijk worden.
+Disable Priority field: De-activeer veld Priority
+disable-access-field-help: Door [ja] te kiezen wordt het veld Toegang niet getoond in de afspraak-view; uw agenda kan hierdoor overzichtelijker worden.
+Disable Access field: De-activeer veld Toegang
+disable-participants-field-help: Door [ja] te kiezen wordt het veld Aanwezigenniet getoond in de afspraak-view. Hierdoor voorkomt u dat andere gebruikers aanwezigen aan hun afspraken toevoegen. Indien u deze optie activeert wenst u wellicht ook om de optie [sta raadplegen agenda andere gebruikers toe] te de-activeren.
+Disable Participants field: De-activeer veld Aanwezigen
+disable-repeating-field-help: Door [ja] te kiezen wordt het veld [herhalingspatroon] niet getoond bij het toevoegen van afspraken; uw agenda kan hierdoor overzichtelijk worden.
+Disable Repeating field: De-activeer veld Herhalingspatroon
+popup-includes-siteextras-help: Laat de eigen afspraak-velden, geconfigureerd in het bestand site_extras.php, zien in afspraak-popups.
+Display Site Extras in popup: Toon Site Extra's in popup
+allow-html-description-help: Als deze optie aan staat kunnen gebruiker HTML gebruiken in de beschrijvingen bij afspraken. Als hij uit staat worden HTML-tags ge-escaped zodat ze als gewone tekst worden weergegeven. Let op: als deze optie aan staat is het mogelijk te verwijzen naar afbeeldingen op andere websites.
+Allow HTML in Description: HTML toestaan in beschrijvingen
+allow-view-other-help: Definieert of een gebruiker de agenda van andere gebruikers mag inzien.
+Allow viewing other user's calendars: Inzage agenda andere gebruikers toestaan
+allow-view-add-help: In alle views wordt een '+' getoond zodat sneller een afspraak in een andere agenda kan worden gezet.
+Include add event link in views: Toon icoon voor maken van afspraken in alle views
+remember-last-login-help: Indien ingeschakeld zal, bij een volgend bezoek, de gebruikersnaam maar niet het password automatisch worden ingevoerd en worden de gebruikersinstellingen geladen inclusief kleurpatroon en taalselectie.
+Remember last login: Onthoud loginnaam
+conflict-check-help: Check op conflicterende afspraken (= afspraken van een persoon op hetzelfde tijdstip. Door [ja] te kiezen blijft het mogelijk om conflicterende afspraken in te stellen door de waarschuwing te bevestigen. Door [nee] te kiezen wordt geen check op conflicterende afspraken uitgevoerd.
+Check for event conflicts: Check op conflicterende afspraken
+conflict-months-help: Indien u bij optie Check op conflicterende afspraken [ja] heeft ingevoerd specificeert u hier het aantal maanden waarin deze check wordt uitgevoerd. Indien het toevoegen van afspraken teveel tijd kost is het advies om dit aantal te verlagen.
+Conflict checking months: Maanden op conflicten controleren
+conflict-check-override-help: Deze optie staat gebruikers toe om dubbele afspraken te overrulen en twee of meer afspraken op dezelfde tijd te maken.
+Allow users to override conflicts: Sta overrulen dubbele afspraken toe
+limit-appts-help: Deze optie staat de Administrator toe om het aantal afspraken per dag voor alle gebruikers te beperken.
+Limit number of timed events per day: Stel beperking in voor het aantal tijdgebonden afspraken per gebruiker per dag
+limit-appts-number-help: Deze optie bepaalt het maximale aantal tijdgebonden afspraken per gebruiker per dag
+Maximum timed events per day: Maximum aantal tijdgebonden afspraken per gebruiker per dag
+timed-evt-len-help: Bepaalt de invoermethode om de lengte van een tijdgebonden afspraak
+Specify timed event length by: Bepaal lengte tijdgebonden afspraak door
+Duration: Duur
+End Time: Einddtijd
+Plugins: Plug-ins
+plugins-enabled-help: Sta het gebruik van plug-in-applicaties toe
+Enable Plugins: Plug-ins geactiveerd
+plugins-sort-key-help: Deze optie bepaalt de sorteringsvolgorde voor weergave van de plug-ins.
+Plugin: Plug-in
+allow-public-access-help: Indien ingeschakeld kan de agenda worden gebruikt als read-only publieke agenda; gebruikers hoeven in dit geval niet in te loggen
+Allow public access: Publieke toegang tot agenda toestaan
+public-access-default-visible: Afspraken op de publieke kalender verschijnen automatisch op de kalenders van alle gebruikers
+Public access visible by default: Publieke afspraken standaard zichtbaar
+public-access-default-selected: Publieke toegang is standaard geselecteerd
+When adding a new event, the public user will be selected by default as a participant.: Bij het toevoegen van een afspraak zullen ook de niet geregistreerde gebruikers standaard deelnemer zijn.
+Public access is default participant: Publieke toegang is de standaard instelling voor deelnemers
+public-access-view-others-help: Indien publieke toegang is ingeschakeld bepaalt deze optie of de gebruiker de agenda van overige gebruikers kan inzien.
+Public access can view other users: Inzage agenda overige gebruikers bij publieke toegang toestaan
+public-access-can-add-help: Indien ingeschakeld kunnen gebruikers, die de agenda via publeike toegang inzien, wel nieuwe afspraken toevoegen. Deze worden echter pas getoond na goedkeuring van de Administrator.
+Public access can add events: Toevoegen nieuwe afspraken bij publieke toegang toestaan
+public-access-add-requires-approval-help: Deze optie bepaalt of afspraken voor de publieke agenda goedgekeurd moeten worden voordat zij zichtbaar zijn.
+Public access new events require approval: Goedkeuring vereisen voor afspraken in publieke agenda
+public-access-sees-participants-help: Als deze optie aan staat kunnen gebruikers die de kalender bekijken vanaf de publieke toegang zien wie er deelnemen aan een afspraak wanneer ze de details van een afspraak bekijken.
+Public access can view participants: Publieke toegang kan deelnemers bekijken
+groups-enabled-help: Maakt groepsondersteuning mogelijk, zodat gebruikers andere gebruikers per groep kunnen selecteren.
+Groups enabled: Activeer groepen
+user-sees-his-group-help: Indien geactiveerd hebben gebruikers geen inzake in de agenda van gebruikers buiten hun groep(en).
+User sees only his groups: Gebruiker heeft enkel inzage in eigen groep(en)
+nonuser-enabled-help: Indien deze optie is geactiveerd kan een beheerder een of meer losse agenda's (= agenda zonder eigenaar-gebruiker) toevoegen.
+Nonuser enabled: Activeer losse agenda
+nonuser-list-help: Deze optie bepaalt waar de losse agenda in het deelnemersoverzicht wordt getoond.
+Nonuser list: Positie losse agenda
+Top: Bovenaan
+Bottom: Onderaan
+reports-enabled-help: Indien deze optie is geactiveerd wordt een nieuwe rapportage-sectie zichtbaar in het beheerpaneel onderaan de pagina. Hier kan een gebruiker eigen agendarapportages definieren. <br>Beheerders kunnen algemene rapportages toevoegen die in het rapportagemenu van alle gebruikers beschikbaar zijn.
+Reports enabled: Activeer rapportages
+subscriptions-enabled-help: Met deze optie bepaalt u of remote gebruikers zich op een WebCalendar-agenda kunnen aanmelden om zo de inhoud van deze agenda in hun iCal-applicatie te bekijken (bijvoorbeeld Apple's iCal of Mozilla Calendar).
+Allow remote subscriptions: Agendapublicatie via internet toestaan
+categories-enabled-help: Activeert ondersteuning bij afspraak-categorieen
+Categories enabled: Activeer gebruik van categorieen
+allow-external-users-help: Hiermee kan een extern persoon als aanwezige bij een bepaalde afspraak worden gespecificeerd.
+Allow external users: Toon externe deelnemers
+external-can-receive-notification-help: Als externe deelnemers en emailgebruik beide zijn geactiveerd en het mailadres van de externe deelnemer is ingevuld kunnen externe deelnemers email notificaties ontvangen bij het toevoegen, wijzigen of verwijderen van een afspraak.
+External users can receive email notifications: Emailnotificaties voor externe deelnemers toestaan
+external-can-receive-reminder-help: Als externe deelnemers en emailgebruik beide zijn geactiveerd en het mailadres is ingevuld kunnen externe deelnemers emailreminders ontvangen.
+External users can receive email reminders: Herinneringen voor externe deelnemers toestaan
+email-enabled-help: Activeer of deactiveer hier het verzenden van email-notificaties en herinneringen bij een afspraak
+Email enabled: Activeer gebruik van email
+email-default-sender: Specificeert het mailadres dat als afzender wordt getoond bij het verzenden van herinneringen
+Default sender address: Standaard mailadres
+Default user settings: Standaard gebruikersinstellingen
+email-event-reminders-help: Hiermee stelt u in of u per email een herinnering ontvangt indien u dit heeft ingesteld. <br> <b>N.B.</b>: dit vereist aanvullende serverinstellingen.
+Event reminders: Stuur mij per email een herinnering om mij aan een afspraak te herinneren
+email-event-added: Specificeert of er email-notificaties worden verzonden bij het toevoegen van een afspraak
+Events added to my calendar: Stuur mij een email-notificatie als afspraken aan mijn agenda zijn toegevoegd
+email-event-updated: Specificeert of er email-notificaties worden verzonden bij het bijwerken van een afspraak
+Events updated on my calendar: Stuur mij een email-notificatie als afspraken in mijn agenda zijn bijgewerkt
+email-event-deleted: Specificeert of er email-notificaties worden verzonden bij het verwijderen van een afspraak
+Events removed from my calendar: Stuur mij een email-notificatie als afspraken uit mijn agenda zijn verwijderd
+email-event-rejected: Specificeert of er email-notificaties worden verzonden indien een genodigde een afsparak weigert
+Event rejected by participant: Stuur mij een email-notificatie als een afspraak door een genodigde wordt geweigerd
+Allow user to customize colors: Gebruikers mogen kleuren van eigen agenda aanpassen
+Enable gradient images for background colors: Maak gradient images voor achtergrondkleuren mogelijk
+Not available: Niet beschikbaar
+Document background: Achtergrondkleur agenda
+Select: Kies
+Document title: Tekstkleur programmanaam inlogscherm
+Document text: Standaard tekstkleur
+Table grid color: Kleur tabelraster
+Table header background: Achtergrondkleur tabelzijden
+Table header text: Tekstkleur tabelheaders
+Table cell background: Achtergrondkleur tabelcellen
+Table cell background for current day: Achtergrondkleur voor afspraken en huidige dag
+Table cell background for weekends: Achtergrondkleur voor weekends
+Event popup background: Achtergrondkleur afspraak-popup
+Event popup text: Tekstkleur afspraak-popup
+
+
+###############################################
+# Page: activity_log.php
+#
+Activity Log: Logboek
+User: Gebruiker
+Calendar: Kalender
+Date: Datum
+Time: Tijd
+Event: Afspraak
+Action: Handeling
+Event created: Afspraak aangemaakt
+Event approved: Afspraak goedgekeurd
+Event rejected: Afspraak geweigerd
+Event updated: Afspraak bijgewerkt
+Event deleted: Afspraak verwijderd
+Notification sent: Notificatie verzonden
+Reminder sent: Herinnering verzonden
+Database error: Databasefout
+Events: Afspraken
+
+
+###############################################
+# Page: add_entry.php
+#
+Invalid entry id: Ongeldige afspraak-ID
+This is a private event and may not be added to your calendar.: Dit is een prive-afspraak die niet aan uw agenda kan worden toegevoegd.
+Error adding event: Fout bij toevoegen afspraak
+
+
+###############################################
+# Page: admin_handler.php
+#
+Error: fout
+The following error occurred: De volgende fout heeft zich voorgedaan
+
+
+###############################################
+# Page: approve_entry.php
+#
+Error approving event: Fout bij bevestigen afspraak
+
+
+###############################################
+# Page: category.php
+#
+Categories: Categorieen
+Add: Voeg toe
+Category Name: Categorienaam
+Global: Publieke categorie
+Delete: Verwijderen
+Are you sure you want to delete this entry?: Weet u zeker dat u dit item wilt verwijderen?
+Add New Category: Categorie toevoegen
+
+
+###############################################
+# Page: del_entry.php
+#
+Hello: Hallo
+An appointment has been canceled for you by: Er is een afspraak voor u geannuleerd door
+The subject was: Het betreft afspraak
+Notification: Notificatie
+
+
+###############################################
+# Page: edit_layer.php
+#
+Edit Layer: Laag wijzigen
+Add Layer: Laag toevoegen
+Source: Bron
+Color: Kleur
+Duplicates: Afspraken dupliceren
+Show layer events that are the same as your own: In elke laag ook de afspraken weergeven die iin mijn eigen agenda staan?
+Delete layer: Laag verwijderen
+Are you sure you want to delete this layer?: Weet u zeker dat u deze laag wilt verwijderen?
+
+
+###############################################
+# Page: edit_layer_handler.php
+#
+You cannot create a layer for yourself: U kunt geen laag voor uzelf aanmaken
+You can only create one layer for each user: U kunt slechts een laag per gebruiker aanmaken
+
+
+###############################################
+# Page: edit_user_handler.php
+#
+Deleting users not supported: Het verwijderen van gebruikers is niet mogelijk
+The passwords were not identical: De ingevoerde wachtwoorden zijn niet identiek of u heeft het wachtwoord maar een keer ingevuld <br />Probeert u het nog eens
+You have not entered a password: U heeft geen wachtwoord ingevuld.
+Changes successfully saved: Wijzigingen succesvol opgeslagen
+
+
+###############################################
+# Page: subscription.php
+#
+Publishing Disabled (Admin): Publiceren is uitgeschakeld (Admin)
+Publishing Disabled (User): Publiceren is uitgeschakeld (Gebruiker)
+Unnamed Event: Naamloze afspraak
+
+
+###############################################
+# Page: export.php
+#
+Export format: Exportformaat
+Palm Pilot: Palm Pilot
+Include all layers: Inclusief alle lagen
+Export all dates: Alles exporteren
+Start date: Startdatum
+End date: Einddatum
+Modified since: Wijzigingen vanaf
+Export: Exporteren
+
+
+###############################################
+# Page: export_handler.php
+#
+export format not defined or incorrect: Exportformaat niet gedefinieerd of incorrect
+
+
+###############################################
+# Page: group_edit.php
+#
+Unnamed Group: Naamloze groep
+Add Group: Groep toevoegen
+Edit Group: Groep wijzigen
+Group name: Groepsnaam
+Updated: Gewijzigd
+Created by: Aangemaakt door
+Users: Gebruikers
+
+
+###############################################
+# Page: group_edit_handler.php
+#
+You must specify a group name: Specificeer een groepsnaam
+
+
+###############################################
+# Page: groups.php
+#
+Add New Group: Groep toevoegen
+
+
+###############################################
+# Page: pref.php
+#
+Preferences: Voorkeuren
+Save Preferences: Voorkeuren opslaan
+to modify the preferences for the Public Access calendar: om de voorkeuren voor de publiek toegankelijke agenda te wijzigen.
+tz-help: Deze optie bepaalt het aantal uren tijdsverschil tussen de servertijd en de lokale tijd.
+Timezone Offset: Tijdverschil server-lokaal
+Add N hours to: Voeg N uren toe aan
+Subtract N hours from: Trek N uren af van
+same as: net als
+server time: servertijd
+Default Category: Toon de volgende categorieen in mijn agenda
+All: Alle
+When I am the boss: Als mijn agenda door een assistent wordt beheerd
+Email me event notification: Ik wil email-notificaties ontvangen van agendawijzigingen
+I want to approve events: Ik wil nieuwe afspraken zelf goedkeuren
+Subscribe/Publish: Aanmelden voor agendapublicatie via internet
+allow-remote-subscriptions-help: Met deze optie bepaalt u of anderen zich op uw agenda kunnen aanmelden om zo de inhoud van uw agenda in hun iCal-applicatie te bekijken (bijvoorbeeld Apple's iCal of Mozilla Calendar).
+remote-subscriptions-url-help: Hier wordt de URL (= internetadres) getoond waar anderen zich op uw agenda kunnen aanmelden.
+URL: URL voor agendapublicatie
+Sun: zo
+Mon: ma
+Tue: di
+Wed: wo
+Thu: do
+Fri: vr
+Sat: za
+
+
+###############################################
+# Page: help_bug.php
+#
+Report Bug: Rapporteer een programmafout
+
+
+###############################################
+# Page: help_edit_entry.php
+#
+Adding/Editing Calendar Entries: Afspraken toevoegen/wijzigen
+Brief Description: Korte omschrijving
+brief-description-help: In dit veld kunt u een korte afspraakomschrijving invullen (ca. 20 karakters). De omschrijving wordt in de agenda getoond.
+Full Description: Uitgebreide omschrijving
+full-description-help: Hier ziet u de volledige afspraakomschrijving. <br />N.B.: deze omschrijving wordt alleen getoond indien de afspraak wordt geopend.
+date-help: Dit is de datum waarop de afspraak plaatsvindt.
+time-help: Dit is de aanvangstijd van de afspraak. <br /><i>Dit veld mag leeg blijven</i><br />
+duration-help: Hier geeft u aan hoe lang de afspraak duurt (in minuten). <br /><i>Dit veld mag leeg blijven</i><br />
+end-time-help: Bepaalt de tijd waarop de afspraak gepland is te eindigen.
+Priority: Prioriteit
+priority-help: Hier kunt u de prioriteit van de afspraak vermelden; afspraken met een hoge prioriteit zullen vetgedrukt in de agenda verschijnen.
+Access: Toegankelijkheid
+access-help: Hier bepaalt u de toegankelijkheid van de afspraak voor anderen. Indien u <br /><i>publiek</i> selecteert kunnen de overige gebruikers de afspraak bekijken. Selecteert u <i>vertrouwelijk</i>, dan zien de overige gebruikers wel dat u een afspraak heeft, maar kunnen zij geen details opvragen.
+Participants: Deelnemers
+participants-help: Noteer hier welke externe deelnemers bij de afspraak aanwezig zullen zijn. Zorg dat elke regel maximaal één deelnemer omvat en voeg een mailadres toe om de externe deelnemer een email-notificatie of herinnering te laten ontvangen. <br />N.B. het verzenden van notificaties en herinneringen zal alleen plaatsvinden indien de agenda-instellingen en de server dit ondersteunen.
+Repeat Type: Herhalingspatroon
+repeat-type-help: Deze optie geeft aan hoe vaak de afspraak moet worden herhaald: <br /><i>maandelijks (dag)</i> zorgt ervoor dat de afspraak wordt herhaald op elke 1e maandag van de maand, 3e donderdag van de maand, etc. <br /><i>maandelijks (dag v.a. maandeinde)</i> zorgt ervoor dat de afspraak wordt herhaald op elke laatste vrijdag van de maand, elke een-na-laatste maandag van de maand, etc. - steeds afhankelijk van de dag waarop u een afspraak definieert <br /><i>Maandelijks (datum)</i> zorgt ervoor dat de afspraak wordt herhaald op dezelfde dag van de maand.
+Repeat End Date: Einddatum herhaling
+repeat-end-date-help: Deze optie specificeert de datum waarop het herhalingspatroon eindigt.
+Repeat Day: Herhalingsdag
+repeat-day-help: Indien uw afspraak wekelijks wordt herhaald, geeft u hier aan op welke weekdag de afspraak terugkeert. Dit is alleen mogelijk indien u hierboven bij <i>herhalingspatroon</i> de optie [wekelijks] heeft gekozen. <br />N.B.: u kunt meerdere weekdagen aanvinken.
+Frequency: Herhalingspatroon
+repeat-frequency-help: Hier kunt u een eventueel herhalingspatroon specificeren. Indien u [1] invult wordt de afspraak elke dag / week / maand / jaar herhaald. Indien u [2] invult wordt de afspraak om de dag / week / maand / jaar herhaalt, etc. <br />N.B.: bij een herhalingsinterval om de x weken dient u wel een herhalingsdag te specificeren (zie boven).
+
+
+###############################################
+# Page: help_index.php
+#
+Help Index: Overzicht help-onderwerpen
+Layers: Lagen
+Import: Importeren
+
+
+###############################################
+# Page: help_layers.php
+#
+Layers are useful for displaying other users' events in your own calendar.  You can specifiy the user and the color the events will be displayed in.: Hiermee kunt u de agenda van een andere gebruiker in uw eigen agenda tonen. U kunt zelf kiezen welke agenda in welke kleur wordt getoond.
+Add/Edit/Delete: toevoegen / wijzigen / verwijderen
+Clicking the Edit Layers link in the admin section at the bottom of the page will allow you to add/edit/delete layers.: Selecteer [wijzig lagen] in menu [beheer] om lagen toe te voegen, wijzigen of verwijderen.
+Specifies the user that you would like to see displayed in your calendar.: Specificeert de gebruiker wiens agenda je in als laag aan je eigen agenda wilt toevoegen.
+The text color of the new layer that will be displayed in your calendar.: De tekstkleur die wordt gebruikt voor deze nieuwe laag in je agenda.
+If checked, events that are duplicates of your events will be shown.: Indien deze optie is geactiveerd zullen afspraken die zowel in je eigen agenda staan, als die van degene wiens agenda je dubbelt, ook dubbel worden weergegeven.
+Disabling: de-activeer
+Press the Disable Layers link in the admin section at the bottom of the page to turn off layers.: De-activeer lagen door naar menu [beheer] onderin beeld te gaan en te klikken op lagen deactiveren.
+Enabling: activeer
+Press the Enable Layers link in the admin section at the bottom of the page to turn on layers.: Activeer lagen door naar menu [beheer] onderin beeld te gaan en te klikken op [lagen activeren].
+
+
+###############################################
+# Page: help_admin.php
+#
+Display days with events in bold in year view: Geef dagen met afspraken in de jaar-view vet gedruk weer
+Nonuser: Losse agenda
+Reports: Rapportages
+
+
+###############################################
+# Page: layers.php
+#
+Layers are currently: Lagen worden momenteel
+Enabled: wel weergeven
+Disable Layers: Lagen deactiveren
+Disabled: niet weergegeven
+Enable Layers: Lagen activeren
+to modify the layers settings for the: om de instellingen aan te passen voor
+calendar: kalender
+Add layer: Laag toevoegen
+Layer: Laag
+Edit layer: Laag wijzigen
+
+
+###############################################
+# Page: list_unapproved.php
+#
+View this entry: Afspraak bekijken
+Approve/Confirm: Bevestigen
+Approve this entry?: Afspraak bevestigen?
+Reject: Weigeren
+Reject this entry?: Afspraak weigeren?
+No unapproved events for: Geen openstaande afspraken voor
+Unapproved Events: Openstaande afspraken
+
+
+###############################################
+# Page: view_entry.php
+#
+Low: Lage prioriteit
+Medium: Normale prioriteit
+High: Hoge prioriteit
+every: elke
+2nd: 2e
+3rd: 3e
+4th: 4e
+5th: 5e
+1st: 1e
+last: laatste
+by date: datum
+Confidential: Vertrouwelijk
+Description: Omschrijving
+Status: Status
+Waiting for approval: Nog niet bevestigd
+Deleted: Verwijderd
+Rejected: Geweigerd
+All day event: Dagvullende afspraak
+Public: Publiekelijk
+Category: Categorie
+days: dagen
+day: dag
+hours: uren
+minute: minuut
+before event: voor de afspraak
+External User: Externe Gebruiker
+Approve/Confirm entry: Afspraak bevestigen
+Reject entry: Afspraak weigeren
+Set category: Bepaal categorie
+Edit repeating entry for all dates: Wijzig de gehele reeks met afspraken
+Edit entry for this date: Wijzig alleen de afspraak op deze datum
+Delete repeating event for all dates: Verwijder de gehele reeks met afspraken
+This will delete this entry for all users.: De afspraak wordt uit de agenda verwijderd.
+Delete entry only for this date: Verwijder alleen de afspraak op deze datum (NB: niet mogelijk voor de eerste dag)
+Edit entry: Afspraak wijzigen
+Delete entry: Afspraak verwijderen
+Copy entry: Kopie maken van afspraak
+This will delete the entry from your calendar.: De afspraak wordt uit de agenda verwijderd.
+Add to My Calendar: Zet afspraak ook in mijn eigen agenda
+Do you want to add this entry to your calendar?: Deze afspraak ook in uw eigen agenda plaatsen?
+This will add the entry to your calendar.: Bevestig om de afspraak in uw eigen agenda te plaatsen.
+Email all participants: Stuur emailbericht naar alle aanwezigen
+Show activity log: Toon logboek
+Hide activity log: Verberg logboek
+Export this entry to: Exporteer afspraak naar
+
+
+###############################################
+# Page: reject_entry.php
+#
+An appointment has been rejected by: Er is een afspraak geweigerd door
+The description is: De omschrijving van de afspraak luidt
+Title: Titel
+
+
+###############################################
+# Page: search.php
+#
+Search: Zoeken
+Keywords: Trefwoorden
+Advanced Search: Uitgebreid zoeken
+
+
+###############################################
+# Page: search_handler.php
+#
+You must enter one or more search keywords: Vul een of meer trefwoorden in
+Search Results: Zoekresultaten
+match found: afspraak gevonden die overeenkomst met de trefwoorden
+matches found: afspraken gevonden die overeenkomen met de trefwoorden
+No matches found: Helaas, geen match aangetroffen
+
+
+###############################################
+# Page: select_user.php
+#
+View Another User's Calendar: Bekijk de agenda van een andere gebruiker
+Go: Tonen
+
+
+###############################################
+# Page: users.php
+#
+Account: account
+Add New User: Gebruiker toevoegen
+denotes administrative user: Administrator
+
+
+###############################################
+# Page: usersel.php
+#
+None: Geen
+Reset: Reset
+Remove: Verwijderen
+Ok: OK
+Cancel: Annuleer
+
+
+###############################################
+# Page: import.php
+#
+Import format: Te importeren formaat
+Exclude private records: Negeer privégegevens
+Overwrite Prior Import: Vorige import overschrijven
+
+
+###############################################
+# Page: login.php
+#
+Invalid login: Ongeldige login
+You must enter a login and password: U moet een gebruikersnaam en een wachtwoord invullen.
+Username: Gebruikersnaam
+Password: Wachtwoord
+Save login via cookies so I don't have to login next time: Bewaar inloggegevens
+Login: Aanmelden
+Access public calendar: Ga naar publieke agenda
+cookies-note: <b>NB:</b> Deze applicatie maakt gebruik van cookies.
+
+
+###############################################
+# Page: views.php
+#
+Views: Overzichten
+Add New View: Overzicht toevoegen
+
+
+###############################################
+# Page: views_edit.php
+#
+Unnamed View: Naamloos overzicht
+Add View: Overzicht toevoegen
+Edit View: Overzicht wijzigen
+View Name: Naam
+View Type: Type
+Week (Users horizontal): Weekoverzicht - gebruikers boven
+Week (Users vertical): Weekoverzicht - gebruikers links
+Week (Timebar): Weekoverzicht - tijdbalkweergave
+Month (Timebar): Maandoverzicht - tijdbalk
+Month (side by side): Maandoverzicht - gebruikers boven naast elkaar
+Month (on same calendar): Maandoverzicht -  gebruikers in één agenda
+preview: preview
+Selected: Geselecteerd
+
+
+###############################################
+# Page: nonusers.php
+#
+NONUSER_PREFIX not set: Code voor losse agenda onjuist of niet aanwezig in config.php
+Add New NonUser Calendar: Losse agenda toevoegen
+
+
+###############################################
+# Page: nonusers_handler.php
+#
+Calendar ID: Agenda ID
+word characters only: Enkel word karakters
+can only contain word characters (a-zA-Z_0-9): Enkel letters en cijfers zijn toegestaan (a-zA-Z_0-9)
+
+
+###############################################
+# Page: help_pref.php
+#
+default-category-help: Hiermee wordt de standaard-categorie voor nieuwe afspraken ingesteld.
+
+
+###############################################
+# Page: report.php
+#
+Untimed event: Afspraak zonder begin en eindtijd
+Private: Prive-afspraak
+Approved: Goedgekeurd
+Unknown: Onbekend
+to manage reports for the Public Access calendar: om rapportages voor de publieke agenda te beheren
+Add new report: Rapportage toevoegen
+Invalid report id: Ongeldige rapportage-ID
+Manage Reports: Rapportagebeheer
+
+
+###############################################
+# Page: views_edit_handler.php
+#
+You must specify a view name: Bepaal de naam voor dit overzicht
+
+
+###############################################
+# Page: week_details.php
+#
+New Entry: Nieuwe afspraak
+am: a.m. (ante meridiem), 's morgens
+pm: p.m. (post meridiem), 's avond
+
+
+###############################################
+# Page: import_handler.php
+#
+Import Results: Resultaat van importeren
+Events successfully imported: Afspraken succesvol geimporteerd
+Events from prior import marked as deleted: Afspraken van vorige import gemarkeerd als verwijderd
+Conflicting events: Conflicterende afspraken
+Errors: Fouten
+There was an error parsing the import file or no events were returned: Er heeft zich een fout voorgedaan bij het verwerken van het importbestand of er zijn geen items aangetroffen
+The import file contained no data: Het importbestand bevat geen gegevens.
+The following conflicts with the suggested time: De voorgestelde tijd conflicteert met de volgende afspraak
+Scheduling Conflict: Agendaconflict
+conflicts with the following existing calendar entries: conflicteert met de volgende bestaande afspraken
+Event Imported: Item geimporteerd
+
+
+###############################################
+# Page: edit_entry.php
+#
+Edit Entry: Afspraak wijzigen
+Add Entry: Afspraak toevoegen
+Details: Details
+Scheduling: Plannen
+Repeat: Herhalen
+category-help: Hier geeft u aan in welke categorie de afspraak thuishoort.
+Timed event: Tijdgebonden afspraak
+Availability: Beschikbaarheid
+external-participants-help: Hier wordt een lijst van externe deelnemers gegeven. Vul per regel een gebruiker en emailadres in. Als een emailadres is ingevoerd kan de externe gebruiker ook notificaties en herinneringen ontvangen.
+External Participants: externe deelnemers
+Daily: Dagelijks
+Weekly: Wekelijks
+Monthly: Maandelijks
+by day: per dag
+by day (from end): per dag (vanaf einde) 
+Yearly: Jaarlijks
+Use end date: Gebruik einddatum
+Tuesday: Dinsdag
+Wednesday: Woensdag
+Thursday: Donderdag
+Friday: Vrijdag
+Saturday: Zaterdag
+You are not authorized to edit this entry: U heeft geen toestemming deze afspraak te bewerken.
+
+
+###############################################
+# Page: edit_report.php
+#
+Tomorrow: morgen
+Today: Vandaag
+Yesterday: gisteren
+Day before yesterday: eergisteren
+Next week: volgende week
+This week: deze week
+Last week: vorige week
+Week before last: twee weken geleden
+Next week and week after: komende twee weken
+This week and next week: deze en volgende week
+Last week and this week: vorige en deze week
+Last two weeks: laatste twee weken
+Next month: volgende maand
+This month: deze maand
+Last month: vorige maand
+Month before last: maand voor afgelopen maand
+Next year: volgend jaar
+This year: dit jaar
+Last year: vorig jaar
+Year before last: jaar voor afgelopen jaar
+Unnamed Report: naamloze rapportage
+Add Report: rapportage toevoegen
+Edit Report: rapportage wijzigen
+Report name: naam rapportage
+Current User: Huidige gebruiker
+Include link in trailer: plaats rapportage in menubalk
+Include standard header/trailer: gebruik standaard kop- en voettekst
+Date range: rapportageperiode
+Include previous/next links: gebruik links voor vorige en volgende rapportageperiode
+Include empty dates: toon ook dagen zonder afspraken
+Template variables: sjabloon variabelen
+Page template: sjabloon pagina
+Day template: sjabloon dag
+Event template: sjabloon agendaitems
+Are you sure you want to delete this report?: Weet u zeker dat u deze rapportage wilt verwijderen?
+
+
+###############################################
+# Page: assistant_edit.php
+#
+Assistants: Assistenten
+Your assistants: Uw agenda-assistenten
+
+
+###############################################
+# Page: adminhome.php
+#
+Delete Events: Afspraken verwijderen
+Public Preferences: Publieke voorkeuren
+Unapproved Public Events: Openstaande publieke afspraken
+Administrative Tools: Administratieve gereedschappen
+
+
+###############################################
+# Page: purge.php
+#
+Preview: Preview
+Purging events for: Afspraken geheel verwijderen voor
+Finished: Klaar
+Check box to delete <b>ALL</b> events for a user: Vinkje om <b>ALLE</b> afspraken van een gebruiker te verwijderen
+Delete all events before: Alle afspraken verwijderen voor
+Preview delete: Preview verwijderen
+Are you sure you want to delete events for: Weet u zeker dat u alle afspraken wilt verwijderen voor
+Records deleted from: Afspraken verwijderd van
+
+
+###############################################
+# Page: set_entry_cat.php
+#
+You have not added any categories: U heeft geen categorie toegevoegd
+Set Category: Bepaal categorie
+
+
+###############################################
+# Page: help_import.php
+#
+Palm Desktop: Palm Desktop
+This form will allow you to import entries from the Palm Desktop Datebook.: Hier kunt u de afspraken van uw Palm Desktop Datebook in uw agenda importeren.
+It should be located in your Palm directory in <tt>datebook/datebook.dat</tt> in a subdirectory named by your username.: Al uw Palm Datebook-afspraken zijn opgeslagen in een bestand met de naam datebook.dat. U kunt dit bestand vinden in de Palm-directory op uw computer. In deze directory vindt u een subdirectory met uw gebruikersnaam als naam. Hierin vindt u het bestand <tt>datebook/datebook.dat</tt> - dit bestand heeft u nodig om uw Palm Desktop datebookgegevens in uw WebCalendar agenda te kunnen importeren.
+The following entries will not be imported: De volgende items zullen niet worden geimporteerd
+Entries older than the current date: items ouder dan de huidige datum
+Entries created in the Palm Desktop that have not been HotSync'd: Items gemaakt in de Palm Desktop agenda die nog niet met HotSync gesynchroniseerd zijn
+Anything imported from Palm will be overwritten during the next import (unless the event date has passed).: Telkens als u uw Palm Datebook in uw WebCalendar agenda importeert zullen de gegevens van een vorige import-activiteit worden overschreven. Dit geldt niet voor afspraken in het verleden - items ouder dan de huidige datum worden immers niet geimporteerd.
+Therefore, updates should be made in the Palm Desktop.:  Derhalve dient u <b>nieuwe afspraken in de Palm Desktop agenda toe te voegen</b> en niet in uw WebCalendar agenda.
+vCal: vCal
+This form will import vCalendar (.vcs) 1.0 events: Hier kunt u afspraken uit vCalendar (.vcs) 1.0 in uw agenda importeren
+The following formats have been tested: De volgende bestandsformaten zijn getest
+Palm Desktop 4: Palm Desktop 4
+Lotus Organizer 6: Lotus Organiser 6
+Microsoft Outlook 2002: Microsoft Outlook 2002
+iCalendar: iCalendar
+This form will import iCalendar (.ics) events: Met dit formulier importeert u iCalendar (.ics) afspraken
+Enabling <b>Overwrite Prior Import</b> will cause events imported previously that used the same UID as an event from the new import file to be marked as deleted.  This should allow an updated iCalendar file to be imported without creating duplicates.: Door <b>Vorige import overschrijven</b> zal eerder geimporteerde afspraken die hetzelfde UID hebben als een afspraak uit de nieuwe import markeren als 'verwijderd'. Hierdoor zou het mogelijk moeten zijn een geupdate iCalendar te importeren zonder duplicaten te maken.
+
+
+###############################################
+# Page: edit_report_handler.php
+#
+Variable N not found: Variabele N niet gevonden
+
+
+###############################################
+# Page: edit_entry_handler.php
+#
+A new appointment has been made for you by: Er is een nieuwe agendapunt voor u gemaakt door
+An appointment has been updated by: Er is een agendapunt voor u bijgewerkt door
+The subject is: Het betreft het agendapunt
+Please look on: Raadpleeg
+to accept or reject this appointment: om deze toevoeging te bevestigen of te weigeren.
+to view this appointment: om deze toevoeging te bekijken.
+Your suggested time of: De door u voorgestelde tijd
+
+
+###############################################
+# Page: edit_user.php
+#
+Edit User: Gebruiker wijzigen
+Add User: Gebruiker toevoegen
+First Name: Voornaam
+Last Name: Achternaam
+E-mail address: E-mailadres
+again: opnieuw
+Disabled for demo: Uitgeschakeld in demo-versie
+Are you sure you want to delete this user?: Weet u zeker dat u deze gebruiker wilt wissen?
+Change Password: Wijzig wachtwoord
+New Password: Nieuw wachtwoord
+Set Password: Bewaar wachtwoord
+
+
+###############################################
+# Page: edit_template.php
+#
+Edit Custom Script/Stylesheet: Eigen Script/Stylesheet aanpassen
+Edit Custom Header: Eigen paginahoofd aanpassen
+Edit Custom Trailer: Eigen pagina-onderschrift aanpassen
+
+
+###############################################
+# Page: includes/trailer.php
+#
+Go to: Ga naar
+My Calendar: MIJN KALENDER
+Back to My Calendar: Terug naar Mijn Kalender
+Another User's Calendar: Agenda andere gebruiker
+Add New Entry: Afspraak toevoegen
+Logout: Afmelden
+Manage calendar of: Beheer de agenda van
+
+
+###############################################
+# Page: includes/user.php
+#
+incorrect password: Onjuist wachtwoord
+no such user: Gebruiker bestaat niet
+Invalid user login: Ongeldige gebruikerslogin
+
+
+###############################################
+# Page: includes/site_extras.php
+#
+Send Reminder: Herinnering sturen
+
+
+###############################################
+# Page: includes/config.php
+#
+English: Engels
+Basque: Baskisch
+Bulgarian: Bulgaars
+Catalan: Catalaans
+Chinese (Traditonal/Big5): Chinees (Traditioneel/Big5)
+Chinese (Simplified/GB2312): Chinees (Vereenvoudigd/GB2312)
+Czech: Tsjechisch
+Danish: Deens
+Dutch: Nederlands
+Estonian: Estlands
+Finnish: Fins
+French: Frans
+Galician: Gallicisch
+German: Duits
+Holo (Taiwanese): Holo (Taiwans)
+Hungarian: Hongaars
+Icelandic: Ijslands
+Italian: Italiaans
+Japanese: Japans
+Korean: Koreaans
+Norwegian: Noors
+Polish: Pools
+Portuguese: Portugees
+Portuguese/Brazil: Protugees/Braziliaans
+Romanian: Roemeens
+Russian: Russisch
+Spanish: Spaans
+Swedish: Zweeds
+Turkish: Turks
+
+
+###############################################
+# Page: includes/functions.php
+#
+This event is confidential: Vertrouwelijk - details niet beschikbaar
+exceeds limit of XXX events per day: de grens van XXX afspraken per dag is bereikt
+You have XXX unapproved events: Er zijn XXX openstaande afspraken
+January: Januari
+February: Februari
+March: Maart
+April: April
+May_: Mei
+June: Juni
+July: Juli
+August: Augustus
+September: September
+October: Oktober
+November: November
+Jan: jan
+Feb: feb
+Mar: mrt
+Apr: apr
+May: mei
+Jun: jun
+Jul: jul
+Aug: aug
+Sep: sep
+Oct: okt
+Nov: nov
+Dec: dec
+All Attendees: Alle deelnemers
+Busy: Bezig
+Tentative: Voorlopig
+
+
+###############################################
+# Page: includes/js/admin.php
+#
+Server URL is required: Server-URL wordt vereist
+Server URL must end with '/': Server-URL moet eindigen op '/'
+Invalid work hours: Ongeldige werktijden
+Invalid color for document background: Ongeldige kleur voor de achtergrond
+Invalid color for document title: Ongeldige kleur voor de agendatitel
+Invalid color for table cell background: Ongeldige kleur voor de tabelcel
+Invalid color for table grid: Ongeldige kleur voor tabelraster
+Invalid color for table header background: Ongeldige kleur voor achtergrond agendatitel
+Invalid color for table text background: Ongeldige kleur voor tekstachtergrond
+Invalid color for event popup background: Ongeldige achtergrondkleur voor afspraak-popup
+Invalid color for event popup text: Ongeldige tekstkleur voor afspraak-popup
+Invalid color for table cell background for today: Ongeldige achtergrondkleur voor huidige datum
+Color format should be '#RRGGBB': Kleur weergeven in #RRGGBB-formaat
+
+
+###############################################
+# Page: includes/js/edit_entry.php
+#
+You have not entered a Brief Description: U heeft geen korte omschrijving ingevuld
+You have not entered a valid time of day: U heeft geen geldige tijd ingevuld
+The time you have entered begins before your preferred work hours.  Is this correct?: De tijd die u heeft ingevoerd is eerder dan uw normale werkdag. Is dit juist?
+Please add a participant: Voeg a.u.b. een deelnemer toe
+
+
+###############################################
+# Page: includes/js/edit_layer.php
+#
+Invalid color: Ongeldige kleur
+
+
+###############################################
+# Page: includes/js/availability.php
+#
+Change the date and time of this entry?: Wilt u de datum en tijd van deze afspraak wijzigen?
+
+
+###############################################
+# Page: tools/send_reminders.php
+#
+This is a reminder for the event detailed below.: Dit is een herinnering voor het hieronder vermelde agendapunt.
+Reminder: Herinnering

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/English-US.txt
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/English-US.txt	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/English-US.txt	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,1039 @@
+# Use this as a starting point to translate this application into
+# another language.  The format is "English text: translated text"
+# There cannot be a ":" in the English text.
+# Translated by:
+#	your name and email here...
+# Last update: 02 July 2002
+# Check out the tools directory which contains two perl scripts:
+#   check_translation.pl will tell you if you have successfully translated
+#        all required text
+#   update_translation.pl will take an old translation file and move the
+#        translations around so they age grouped by the page they appear in.
+#        It will also identify any missing translations and tag them
+#        with a comment.  If it is a non-english translation, the english
+#        translation will be included in the comment to simplify completing
+#        the translation.
+#
+# Note: You will notice the entry for "May_" below.  There's a reason for
+# this.  Translate "May_" to the full month name and "May" to the three-letter
+# month abbreviation (like "Oct" for "October").
+#
+#
+#
+#
+# Translation last updated on 10-14-2005
+
+
+###############################################
+# Specify a charset (will be sent within meta tag for each page)
+#
+charset: iso-8859-1
+
+
+
+###############################################
+# Page: activity_log.php
+#
+Activity Log: Activity Log
+Admin: Admin
+User: User
+Calendar: Calendar
+Date: Date
+Time: Time
+Event: Event
+Action: Action
+Event created: Event created
+Event approved: Event approved
+Event rejected: Event rejected
+Event updated: Event updated
+Event deleted: Event deleted
+Notification sent: Notification sent
+Reminder sent: Reminder sent
+Database error: Database error
+Previous: Previous
+Events: Events
+Next: Next
+
+
+###############################################
+# Page: add_entry.php
+#
+Invalid entry id: Invalid entry id
+This is a private event and may not be added to your calendar.: This is a private event and may not be added to your calendar.
+Error adding event: Error adding event
+
+
+###############################################
+# Page: admin.php
+#
+System Settings: System Settings
+Help: Help
+You are not authorized: You are not authorized
+Note: Note
+Your user preferences: Your user preferences
+may be affecting the appearance of this page.: may be affecting the appearance of this page.
+Click here: Click here
+to not use your user preferences when viewing this page: to not use your user preferences when viewing this page
+are being ignored while viewing this page.: are being ignored while viewing this page.
+to load your user preferences when viewing this page: to load your user preferences when viewing this page
+Save: Save
+Settings: Settings
+Public Access: Public Access
+Groups: Groups
+NonUser Calendars: NonUser Calendars
+Other: Other
+Email: Email
+colors-help: All colors should be specified in "#RRGGBB" hexadecimal format where "RR" is the hex value for red, "GG" is the hex value for green, and "BB" is the hex value for blue.
+Colors: Colors
+app-name-help: Specifies the name of the application that will appear in the browser title bar for all pages and on the login page.  The value you specify here will be looked up in the translations file allowing you to provide different titles for different languages.
+Application Name: Application Name
+server-url-help: Specifies the base URL for the application.  This will be included when sending out email reminders and notifications.
+Server URL: Server URL
+language-help: Specifies which language to use.
+Language: Language
+Your browser default language is: Your browser default language is
+fonts-help: Specifies a list of system fonts to use (such as "Arial, Helvetica")
+Fonts: Fonts
+custom-script-help: Allows entry of custom Javascript or stylesheet text that will be inserted into the HTML "head" section of every page.
+Custom script/stylesheet: Custom script/stylesheet
+Yes: Yes
+No: No
+Edit: Edit
+custom-header-help: Allows a custom HTML snippet to be included in the top of every page.
+Custom header: Custom header
+custom-trailer-help: Allows a custom HTML snippet to be included at the end of every page.
+Custom trailer: Custom trailer
+preferred-view-help: Specifies the default view (Day, Week, Month, or Year).
+Preferred view: Preferred view
+Day: Day
+Week: Week
+Month: Month
+Year: Year
+display-weekends-help: Include weekends when viewing a week.
+Display weekends in week view: Display weekends in week view
+yearly-shows-events-help: On the yearly view, display days that contain events in a bold font.
+Display days with events in bold in month and year views: Display days with events in bold in month and year views
+display-desc-print-day-help: Include event descriptions in printer-friendly version of day view.
+Display description in printer day view: Display description in printer day view
+date-format-help: Specifies the preferred date format.
+Date format: Date format
+December: December
+time-format-help: Specifies which time format to use: <br /><i>12 hour:</i> Display times as 3am, 8:30pm, etc.  <br /><i>24 hour:</i> Display times as 300, 2030, etc.
+Time format: Time format
+12 hour: 12 hour
+24 hour: 24 hour
+time-interval-help: Specifies how long the time blocks in the week view and day view will be.
+Time interval: Time interval
+hour: hour
+minutes: minutes
+auto-refresh-help: When enabled, the day view, week view, month view, and list aunapproved pages will all automatically refresh themselves periodically.
+Auto-refresh calendars: Auto-refresh calendars
+auto-refresh-time-help: If Auto-refresh is enabled, this specifies the time between each refresh.
+Auto-refresh time: Auto-refresh time
+require-approvals-help: When enabled, a user must approve an event before it is displayed on their calendar (unless Display unapproved is enabled).  Note setting this to "No" will not turn off approvals for the Public Access calendar (if the Public Access calendar is enabled).
+Require event approvals: Require event approvals
+display-unapproved-help: Specifies whether unapproved events are displayed in your calendar.<br /> If set to "Yes", then unapproved events will be displayed in your calendar (in a different text color).<br /> If set to "No", then unapproved events must be approved before they are displayed in your calendar.
+Display unapproved: Display unapproved
+display-week-number-help: Specifies whether the week number (1-52) should be displayed in the month view and the week view.
+Display week number: Display week number
+display-week-starts-on: Specifies whether the week starts on Sunday or Monday.  If Monday is specified, then week numbers will be ISO week numbers.
+Week starts on: Week starts on
+Sunday: Sunday
+Monday: Monday
+work-hours-help: Specifies the time range to display for the day view.
+Work hours: Work hours
+From: From
+to: to
+disable-priority-field-help: Selecting "Yes" will remove the "Priority" field from event information pages, providing a simpler interface for novices.
+Disable Priority field: Disable Priority field
+disable-access-field-help: Selecting "Yes" will remove the "Access" field from event information pages, providing a simpler interface for novices.
+Disable Access field: Disable Access field
+disable-participants-field-help: Selecting "Yes" will remove the "Particpants" field from event information pages, preventing users from adding other users to their events.  If you enable this option, you may want to also disable the "Allow viewing other user's calendars" field also.
+Disable Participants field: Disable Participants field
+disable-repeating-field-help: Selecting "Yes" will remove the "Repeating" field when adding events.  This will provide a simpler interface for novices.
+Disable Repeating field: Disable Repeating field
+popup-includes-siteextras-help: If enabled, allow custom event fields setup in the site_extras.php file will be displayed in event popups.
+Display Site Extras in popup: Display Site Extras in popup
+allow-html-description-help: If enabled, users can enter HTML in the event description field.  If not enabled, the HTML tags will be escaped so as to appear as plain text.  Warning: Enabling this feature will allow users to reference images on other websites.
+Allow HTML in Description: Allow HTML in Description
+allow-view-other-help: Specifies whether one user may view another user's calendar.
+Allow viewing other user's calendars: Allow viewing other user's calendars
+allow-view-add-help: A '+' icon will be included in views, allowing users to quickly add events to other users' calendars.
+Include add event link in views: Include add event link in views
+remember-last-login-help: When enabled, the user's login will be filled in for them on the login page (but not the password), and the user's preferences will be loaded (including their preferred colors and language selection).
+Remember last login: Remember last login
+conflict-check-help: Check for event conflicts (two events scheduled for the same time for the same person).  If you set this to "Yes", you will still be able to schedule two events at the same time after confirming a warning. If you set this to "No", no checking for conflicts will be done.  You probably want to set this to "Yes", so conflict checking occurs.
+Check for event conflicts: Check for event conflicts
+conflict-months-help: If conflict checking is in place ("Check for event conflicts" is set to "No"), this specifies how many months into the future we should check for conflicts.  If you find adding events is taking a long time to process, reduce this number.
+Conflict checking months: Conflict checking months
+conflict-check-override-help: Allows users to override event conflicts and schedule two or more events for the same time.
+Allow users to override conflicts: Allow users to override conflicts
+limit-appts-help: Allows the system administrator to set a system-wide limit on the number of appointments a single user can have on any single day.
+Limit number of timed events per day: Limit number of timed events per day
+limit-appts-number-help: Specifies the maximum number of timed events a user can have in a single day.
+Maximum timed events per day: Maximum timed events per day
+timed-evt-len-help: Specifies input method for determining the length of a timed event.
+Specify timed event length by: Specify timed event length by
+Duration: Duration
+End Time: End Time
+Plugins: Plugins
+plugins-enabled-help: Enable plugin applications.
+Enable Plugins: Enable Plugins
+plugins-sort-key-help: Specifies a sort key for the plugin.  This allows the plugins to appear in a specific order.
+Plugin: Plugin
+allow-public-access-help: When enabled, the calendar can be used as a read-only public calendar that does not require users to login.
+Allow public access: Allow public access
+public-access-default-visible: Events from the public calendar will automatically appear on all users' calendars
+Public access visible by default: Public access visible by default
+public-access-default-selected: When adding a new event, the public user will be selected by default as a participant.
+Public access is default participant: Public access is default participant
+public-access-view-others-help: When access the system with public access, specifies whether the user can view the calendar of another calendar user.
+Public access can view other users: Public access can view other users
+public-access-can-add-help: When enabled, users that access the system through Public Access will be able to add new events, but they will not show up in the calendar until an administrator approves the new event.
+Public access can add events: Public access can add events
+public-access-add-requires-approval-help: Specifies whether events added via the public access account require approval before being displayed.
+Public access new events require approval: Public access new events require approval
+public-access-sees-participants-help: If enabled, users accessing the calendar from the public account will be able to see event participants if they view details of an event.
+Public access can view participants: Public access can view participants
+groups-enabled-help: Enables group support, allowing users to select users by groups.
+Groups enabled: Groups enabled
+user-sees-his-group-help: If enabled, users will not see calendar users that are not in at least one of their groups.
+User sees only his groups: User sees only his groups
+nonuser-enabled-help: If enabled, admins will have the option to add nonuser calendars
+Nonuser enabled: Nonuser Calendars Enabled
+nonuser-list-help: Where to display the nonuser calendars in the participant list
+Nonuser list: Display in participants list at
+Top: Top
+Bottom: Bottom
+reports-enabled-help: If enabled, users will see a "Reports" section at the bottom of each page and will be allowed to create custom reports.  Additionally, admin users can create global reports that will appear at the bottom of all users' pages.
+Reports enabled: Reports enabled
+subscriptions-enabled-help: Specifies if remote users can subscribe to a WebCalendar user's calendar, allowing them to see the WebCalendar user's events in their iCal-enabled application (such as Apple's iCal or Mozilla Calendar).
+Allow remote subscriptions: Allow remote subscriptions
+categories-enabled-help: Enables support for event categories.
+Categories enabled: Categories enabled
+allow-external-users-help: Specifies whether a non-calendar user can be added to an event.  This allows non-calendar users to be listed as event participants.
+Allow external users: Allow external users
+external-can-receive-notification-help: When external users are enabled and email usage is enabled, external users can receive email notifications when the event is added, updated or delete (if the external user's email address is provided).
+External users can receive email notifications: External users can receive email notifications
+external-can-receive-reminder-help: When external users are enabled and email usage is enabled, external users can receive email reminders (if the external user's email address is provided).
+External users can receive email reminders: External users can receive email reminders
+email-enabled-help: Turn on or off all sending of email for notification and reminders.  Set to "no", if your server is not properly setup to send mail.
+Email enabled: Email enabled
+email-default-sender: Specifies the email address to specify as the sender when sending out reminders.
+Default sender address: Default sender address
+Default user settings: Default user settings
+email-event-reminders-help: Specifies whether or not to send event reminders.
+Event reminders: Event reminders
+email-event-added: Specifies whether or not to send email notifications when an event is added to your calendar.
+Events added to my calendar: Events added to my calendar
+email-event-updated: Specifies whether or not to send email notifications when an event is updated on your calendar.
+Events updated on my calendar: Events updated on my calendar
+email-event-deleted: Specifies whether or not to send email notifications when an event is removed from your calendar.
+Events removed from my calendar: Events removed from my calendar
+email-event-rejected: Specifies whether or not to send email notifications when a participant rejects an event that is on your calendar.
+Event rejected by participant: Event rejected by participant
+Allow user to customize colors: Allow user to customize colors
+Enable gradient images for background colors: Enable gradient images for background colors
+Not available: Not available
+Document background: Document background
+Select: Select
+Document title: Document title
+Document text: Document text
+Table grid color: Table grid color
+Table header background: Table header background
+Table header text: Table header text
+Table cell background: Table cell background
+Table cell background for current day: Table cell background for current day
+Table cell background for weekends: Table cell background for weekends
+Event popup background: Event popup background
+Event popup text: Event popup text
+
+
+###############################################
+# Page: admin_handler.php
+#
+Error: Error
+The following error occurred: The following error occurred
+
+
+###############################################
+# Page: adminhome.php
+#
+Preferences: Preferences
+Users: Users
+Account: Account
+Assistants: Assistants
+Categories: Categories
+Views: Views
+Layers: Layers
+Reports: Reports
+Delete Events: Delete Events
+Public Preferences: Public Preferences
+Unapproved Public Events: Unapproved Public Events
+Administrative Tools: Administrative Tools
+
+
+###############################################
+# Page: approve_entry.php
+#
+Error approving event: Error approving event
+
+
+###############################################
+# Page: assistant_edit.php
+#
+Admin mode: Admin mode
+Your assistants: Your assistants
+
+
+###############################################
+# Page: category.php
+#
+Add: Add
+Category Name: Category Name
+Global: Global
+Delete: Delete
+Are you sure you want to delete this entry?: Are you sure you want to delete this entry?
+Add New Category: Add New Category
+
+
+###############################################
+# Page: day.php
+#
+Assistant mode: Assistant mode
+Generate printer-friendly version: Generate printer-friendly version
+Printer Friendly: Printer Friendly
+
+
+###############################################
+# Page: del_entry.php
+#
+Hello: Hello
+An appointment has been canceled for you by: An appointment has been canceled for you by
+The subject was: The subject was
+Notification: Notification
+
+
+###############################################
+# Page: edit_entry.php
+#
+Edit Entry: Edit Entry
+Add Entry: Add Entry
+Details: Details
+Participants: Participants
+Repeat: Repeat
+brief-description-help: This should provide a short description (about 20 characters) of the event.  This will represent the event when viewing the calendar.
+Brief Description: Brief Description
+full-description-help: This should complete details of the event.  This information can be seen when a user views the event.
+Full Description: Full Description
+access-help: Specifies the access level of the event.<br /> <i>Public</i>: Everyone can see the full details of the event.  <br /><i>Confidential</i>: Others can see that you have an entry for that date and time, but not the details of what it is.
+Access: Access
+Public: Public
+Confidential: Confidential
+priority-help: Specifies the priority of the event.  High priority events will be displayed in bold.
+Priority: Priority
+Low: Low
+Medium: Medium
+High: High
+category-help: Specifies the category of the event.
+Category: Category
+None: None
+date-help: Specifies the date of the event.
+Untimed event: Untimed event
+Timed event: Timed event
+All day event: All day event
+time-help: Specifies the time of the event.<br />Select either "Timed event" (for an event that is scheduled for a specific time on that day), "Untimed event" (for an event this does not have a time (like a holiday), or "All day event" (for an event that takes all day (like being out of the office).
+am: am
+pm: pm
+duration-help: Specifies the duration (in hours:minutes) of the event.  <br /><i>This field can be left blank.</i>
+hours: hours
+end-time-help: Specifies the time the event is expected to end.
+days: days
+before event: before event
+participants-help: Lists the participants of this entry.
+Availability: Availability
+external-participants-help: Specifies a list of participants for the event that are not calendar users.  The users should be listed one per line and can include an email address.  If an email address is specified, the user is eligible to receive notications and reminders.
+External Participants: External Participants
+repeat-type-help: Select how often the event should repeat.<i>Monthly (by day)</i> allows an event to repeat on the 1st Monday of the month, 3rd Thursday of the month, etc.  <i>Monthly (by date)</i> allows an event to repeat on the same day of the month.
+Repeat Type: Repeat Type
+Daily: Daily
+Weekly: Weekly
+Monthly: Monthly
+by day: by day
+by day (from end): by day (from end)
+by date: by date
+Yearly: Yearly
+repeat-end-date-help: Specifies the date the event should repeat until.
+Repeat End Date: Repeat End Date
+Use end date: Use end date
+repeat-frequency-help: Specifies how often the event should repeat.  The default 1 indicates it should occur every time.  Specifying 2 will make the event occur every other week (if <i>Repeat Type</i> is set to <i>Weekly</i>), every other month (if <i>Repeat Type</i> is set to <i>Monthly</i>), etc.
+Frequency: Frequency
+repeat-day-help: Specifies which days of the week the event should repeat on.  This is for use only when <i>Repeat Type</i> is set to <i>Weekly</i>.
+Repeat Day: Repeat Day
+Tuesday: Tuesday
+Wednesday: Wednesday
+Thursday: Thursday
+Friday: Friday
+Saturday: Saturday
+Delete entry: Delete entry
+You are not authorized to edit this entry: You are not authorized to edit this entry
+
+
+###############################################
+# Page: edit_entry_handler.php
+#
+The following conflicts with the suggested time: The following conflicts with the suggested time
+Unnamed Event: Unnamed Event
+The description is: The description is
+A new appointment has been made for you by: A new appointment has been made for you by
+An appointment has been updated by: An appointment has been updated by
+The subject is: The subject is
+Please look on: Please look on
+to accept or reject this appointment: to accept or reject this appointment
+to view this appointment: to view this appointment
+Scheduling Conflict: Scheduling Conflict
+Your suggested time of: Your suggested time of
+conflicts with the following existing calendar entries: conflicts with the following existing calendar entries
+Cancel: Cancel
+
+
+###############################################
+# Page: edit_layer.php
+#
+Edit Layer: Edit Layer
+Add Layer: Add Layer
+Source: Source
+Color: Color
+Duplicates: Duplicates
+Show layer events that are the same as your own: Show layer events that are the same as your own
+Delete layer: Delete layer
+Are you sure you want to delete this layer?: Are you sure you want to delete this layer?
+
+
+###############################################
+# Page: edit_layer_handler.php
+#
+You cannot create a layer for yourself: You cannot create a layer for yourself
+You can only create one layer for each user: You can only create one layer for each user
+
+
+###############################################
+# Page: edit_nonusers.php
+#
+NONUSER_PREFIX not set: NONUSER_PREFIX has not been set in config.php.
+word characters only: can only contain word characters (a-zA-Z_0-9)
+Edit User: Edit User
+Add User: Add User
+Calendar ID: Calendar ID
+First Name: First Name
+Last Name: Last Name
+
+
+###############################################
+# Page: edit_nonusers_handler.php
+#
+Changes successfully saved: Changes successfully saved
+
+
+###############################################
+# Page: edit_report.php
+#
+Tomorrow: Tomorrow
+Today: Today
+Yesterday: Yesterday
+Day before yesterday: Day before yesterday
+Next week: Next week
+This week: This week
+Last week: Last week
+Week before last: Week before last
+Next week and week after: Next week and week after
+This week and next week: This week and next week
+Last week and this week: Last week and this week
+Last two weeks: Last two weeks
+Next month: Next month
+This month: This month
+Last month: Last month
+Month before last: Month before last
+Next year: Next year
+This year: This year
+Last year: Last year
+Year before last: Year before last
+Next 14 days: Next 14 days
+Next 30 days: Next 30 days
+Next 60 days: Next 60 days
+Next 90 days: Next 90 days
+Next 180 days: Next 180 days
+Next 365 days: Next 365 days
+Invalid report id: Invalid report id
+Unnamed Report: Unnamed Report
+Add Report: Add Report
+Edit Report: Edit Report
+Report name: Report name
+Current User: Current User
+Include link in trailer: Include link in trailer
+Include standard header/trailer: Include standard header/trailer
+Date range: Date range
+Include previous/next links: Include previous/next links
+Include empty dates: Include empty dates
+Template variables: Template variables
+Page template: Page template
+Day template: Day template
+Event template: Event template
+Are you sure you want to delete this report?: Are you sure you want to delete this report?
+
+
+###############################################
+# Page: edit_report_handler.php
+#
+Variable N not found: Variable N not found
+
+
+###############################################
+# Page: edit_template.php
+#
+Edit Custom Script/Stylesheet: Edit Custom Script/Stylesheet
+Edit Custom Header: Edit Custom Header
+Edit Custom Trailer: Edit Custom Trailer
+
+
+###############################################
+# Page: edit_user.php
+#
+Username: Username
+E-mail address: E-mail address
+Password: Password
+again: again
+Disabled for demo: Disabled for demo
+Are you sure you want to delete this user?: Are you sure you want to delete this user?
+Change Password: Change Password
+New Password: New Password
+Set Password: Set Password
+
+
+###############################################
+# Page: edit_user_handler.php
+#
+Deleting users not supported: Deleting users not supported
+The passwords were not identical: The passwords were not identical
+You have not entered a password: You have not entered a password
+Username can not be blank: Username can not be blank
+
+
+###############################################
+# Page: export.php
+#
+Export: Export
+Export format: Export format
+Palm Pilot: Palm Pilot
+Include all layers: Include all layers
+Export all dates: Export all dates
+Start date: Start date
+End date: End date
+Modified since: Modified since
+
+
+###############################################
+# Page: group_edit.php
+#
+Unnamed Group: Unnamed Group
+Add Group: Add Group
+Edit Group: Edit Group
+Group name: Group name
+Updated: Updated
+Created by: Created by
+
+
+###############################################
+# Page: group_edit_handler.php
+#
+You must specify a group name: You must specify a group name
+
+
+###############################################
+# Page: groups.php
+#
+Add New Group: Add New Group
+
+
+###############################################
+# Page: help_admin.php
+#
+Display days with events in bold in year view: Display days with events in bold in year view
+Nonuser: Nonuser Calendars
+user-customize-color: Specifies whether users are allowed to modify their own color scheme.
+enable-gradient-help: Use gradient colors for cell backgrounds.
+Manually entering color values: Manually entering color values
+
+
+###############################################
+# Page: help_bug.php
+#
+Report Bug: Report Bug
+
+
+###############################################
+# Page: help_edit_entry.php
+#
+Adding/Editing Calendar Entries: Adding/Editing Calendar Entries
+
+
+###############################################
+# Page: help_import.php
+#
+Import: Import
+Palm Desktop: Palm Desktop
+This form will allow you to import entries from the Palm Desktop Datebook.: This form will allow you to import entries from the Palm Desktop Datebook.
+It should be located in your Palm directory in <tt>datebook/datebook.dat</tt> in a subdirectory named by your username.: It should be located in your Palm directory in <tt>datebook/datebook.dat</tt> in a subdirectory named by your username.
+The following entries will not be imported: The following entries will not be imported
+Entries older than the current date: Entries older than the current date
+Entries created in the Palm Desktop that have not been HotSync'd: Entries created in the Palm Desktop that have not been HotSync'd
+Anything imported from Palm will be overwritten during the next import (unless the event date has passed).: Anything imported from Palm will be overwritten during the next import (unless the event date has passed).
+Therefore, updates should be made in the Palm Desktop.: Therefore, updates should be made in the Palm Desktop.
+vCal: vCal
+This form will import vCalendar (.vcs) 1.0 events: This form will import vCalendar (.vcs) 1.0 events
+The following formats have been tested: The following formats have been tested
+Palm Desktop 4: Palm Desktop 4
+Lotus Organizer 6: Lotus Organizer 6
+Microsoft Outlook 2002: Microsoft Outlook 2002
+iCalendar: iCalendar
+This form will import iCalendar (.ics) events: This form will import iCalendar (.ics) events
+Enabling <b>Overwrite Prior Import</b> will cause events imported previously that used the same UID as an event from the new import file to be marked as deleted.  This should allow an updated iCalendar file to be imported without creating duplicates.: Enabling <b>Overwrite Prior Import</b> will cause events imported previously that used the same UID as an event from the new import file to be marked as deleted.  This should allow an updated iCalendar file to be imported without creating duplicates.
+
+
+###############################################
+# Page: help_index.php
+#
+Help Index: Help Index
+
+
+###############################################
+# Page: help_layers.php
+#
+Layers are useful for displaying other users' events in your own calendar.  You can specifiy the user and the color the events will be displayed in.: Layers are useful for displaying other users' events in your own calendar.  You can specifiy the user and the color the events will be displayed in.
+Add/Edit/Delete: Add/Edit/Delete
+Clicking the Edit Layers link in the admin section at the bottom of the page will allow you to add/edit/delete layers.: Clicking the Edit Layers link in the admin section at the bottom of the page will allow you to add/edit/delete layers.
+Specifies the user that you would like to see displayed in your calendar.: Specifies the user that you would like to see displayed in your calendar.
+The text color of the new layer that will be displayed in your calendar.: The text color of the new layer that will be displayed in your calendar.
+If checked, events that are duplicates of your events will be shown.: If checked, events that are duplicates of your events will be shown.
+Disabling: Disabling
+Press the Disable Layers link in the admin section at the bottom of the page to turn off layers.: Press the Disable Layers link in the admin section at the bottom of the page to turn off layers.
+Enabling: Enabling
+Press the Enable Layers link in the admin section at the bottom of the page to turn on layers.: Press the Enable Layers link in the admin section at the bottom of the page to turn on layers.
+
+
+###############################################
+# Page: help_pref.php
+#
+Timezone Offset: Timezone Offset
+tz-help: Specifies how many hours to adjust the time from server time to local time.
+Default Category: Default Category
+default-category-help: Specifies the category a new event should default to.
+When I am the boss: When I am the boss
+Email me event notification: Email me event notification
+email-boss-notifications-help: Specifies if bosses receive emails as event notifications.
+I want to approve events: I want to approve events
+boss-approve-event-help: Specifies whether the boss will be required to approve events added by assistants.
+Subscribe/Publish: Subscribe/Publish
+allow-remote-subscriptions-help: Specifies if remote users can subscribe to your calendar, allowing them to see your events in a iCal-enabled application (such as Apple's iCal or Mozilla Calendar).
+URL: URL
+remote-subscriptions-url-help: Displays the URL remote users should use to subscribe to your calendar.
+
+
+###############################################
+# Page: import.php
+#
+Disabled: Disabled
+Import format: Import format
+Exclude private records: Exclude private records
+Overwrite Prior Import: Overwrite Prior Import
+
+
+###############################################
+# Page: import_handler.php
+#
+Import Results: Import Results
+Events successfully imported: Events successfully imported
+Events from prior import marked as deleted: Events from prior import marked as deleted
+Conflicting events: Conflicting events
+Errors: Errors
+There was an error parsing the import file or no events were returned: There was an error parsing the import file or no events were returned
+The import file contained no data: The import file contained no data
+Event Imported: Event Imported
+View this entry: View this entry
+
+
+###############################################
+# Page: layers.php
+#
+Layers are currently: Layers are currently
+Enabled: Enabled
+Disable Layers: Disable Layers
+Enable Layers: Enable Layers
+to modify the layers settings for the: to modify the layers settings for the
+calendar: calendar
+Add layer: Add layer
+Layer: Layer
+Edit layer: Edit layer
+
+
+###############################################
+# Page: list_unapproved.php
+#
+Approve/Confirm: Approve/Confirm
+Approve this entry?: Approve this entry?
+Reject: Reject
+Reject this entry?: Reject this entry?
+No unapproved events for: No unapproved events for
+Unapproved Events: Unapproved Events
+
+
+###############################################
+# Page: login.php
+#
+Invalid login: Invalid login
+You must enter a login and password: You must enter a login and password
+Save login via cookies so I don't have to login next time: Save login via cookies so I don't have to login next time
+Login: Login
+Access public calendar: Access public calendar
+cookies-note: <b>Note:</b> This application requires cookies to be enabled.
+
+
+###############################################
+# Page: month.php
+#
+Sun: Sun
+Mon: Mon
+Tue: Tue
+Wed: Wed
+Thu: Thu
+Fri: Fri
+Sat: Sat
+
+
+###############################################
+# Page: nonusers.php
+#
+Add New NonUser Calendar: Add New NonUser Calendar
+
+
+###############################################
+# Page: pref.php
+#
+Save Preferences: Save Preferences
+to modify the preferences for the Public Access calendar: to modify the preferences for the Public Access calendar
+Add N hours to: Add N hours to
+Subtract N hours from: Subtract N hours from
+same as: same as
+server time: server time
+All: All
+
+
+###############################################
+# Page: purge.php
+#
+Preview: Preview
+Purging events for: Purging events for
+Finished: Finished
+Check box to delete <b>ALL</b> events for a user: Check box to delete <b>ALL</b> events for a user
+Delete all events before: Delete all events before
+Preview delete: Preview delete
+Are you sure you want to delete events for: Are you sure you want to delete events for
+Records deleted from: Records deleted from
+
+
+###############################################
+# Page: reject_entry.php
+#
+An appointment has been rejected by: An appointment has been rejected by
+Title: WebCalendar
+
+
+###############################################
+# Page: report.php
+#
+Private: Private
+This event is confidential: This event is confidential
+Waiting for approval: Waiting for approval
+Deleted: Deleted
+Rejected: Rejected
+Approved: Approved
+Unknown: Unknown
+to manage reports for the Public Access calendar: to manage reports for the Public Access calendar
+Add new report: Add new report
+cont.: cont.
+Manage Reports: Manage Reports
+
+
+###############################################
+# Page: search.php
+#
+Search: Search
+Keywords: Keywords
+Advanced Search: Advanced Search
+
+
+###############################################
+# Page: search_handler.php
+#
+You must enter one or more search keywords: You must enter one or more search keywords
+Search Results: Search Results
+match found: match found
+matches found: matches found
+No matches found: No matches found
+
+
+###############################################
+# Page: select_user.php
+#
+View Another User's Calendar: View Another User's Calendar
+Go: Go
+
+
+###############################################
+# Page: set_entry_cat.php
+#
+You have not added any categories: You have not added any categories
+Set Category: Set Category
+
+
+###############################################
+# Page: users.php
+#
+Add New User: Add New User
+denotes administrative user: denotes administrative user
+
+
+###############################################
+# Page: usersel.php
+#
+Reset: Reset
+Remove: Remove
+Ok: Ok
+
+
+###############################################
+# Page: view_d.php
+#
+No users for this view: No users for this view
+
+
+###############################################
+# Page: view_entry.php
+#
+every: every
+2nd: 2nd
+3rd: 3rd
+4th: 4th
+5th: 5th
+1st: 1st
+last: last
+Description: Description
+Status: Status
+day: day
+minute: minute
+External User: External User
+Approve/Confirm entry: Approve/Confirm entry
+Reject entry: Reject entry
+Set category: Set category
+Edit repeating entry for all dates: Edit repeating entry for all dates
+Edit entry for this date: Edit entry for this date
+Delete repeating event for all dates: Delete repeating event for all dates
+This will delete this entry for all users.: This will delete this entry for all users.
+Delete entry only for this date: Delete entry only for this date
+Edit entry: Edit entry
+Copy entry: Copy entry
+This will delete the entry from your calendar.: This will delete the entry from your calendar.
+Add to My Calendar: Add to My Calendar
+Do you want to add this entry to your calendar?: Do you want to add this entry to your calendar?
+This will add the entry to your calendar.: This will add the entry to your calendar.
+Email all participants: Email all participants
+Show activity log: Show activity log
+Hide activity log: Hide activity log
+Export this entry to: Export this entry to
+
+
+###############################################
+# Page: views.php
+#
+Add New View: Add New View
+
+
+###############################################
+# Page: views_edit.php
+#
+Unnamed View: Unnamed View
+Add View: Add View
+Edit View: Edit View
+View Name: View Name
+View Type: View Type
+Week (Users horizontal): Week (Users horizontal)
+Week (Users vertical): Week (Users vertical)
+Week (Timebar): Week (Timebar)
+Month (Timebar): Month (Timebar)
+Month (side by side): Month (side by side)
+Month (on same calendar): Month (on same calendar)
+preview: preview
+Selected: Selected
+
+
+###############################################
+# Page: views_edit_handler.php
+#
+You must specify a view name: You must specify a view name
+
+
+###############################################
+# Page: week_details.php
+#
+New Entry: New Entry
+
+
+###############################################
+# Page: export_handler.php
+#
+export format not defined or incorrect: export format not defined or incorrect
+
+
+###############################################
+# Page: includes/config.php
+#
+English: English
+Basque: Basque
+Bulgarian: Bulgarian
+Catalan: Catalan
+Chinese (Traditonal/Big5): Chinese (Traditonal/Big5)
+Chinese (Simplified/GB2312): Chinese (Simplified/GB2312)
+Czech: Czech
+Danish: Danish
+Dutch: Dutch
+Estonian: Estonian
+Finnish: Finnish
+French: French
+Galician: Galician
+German: German
+Holo (Taiwanese): Holo (Taiwanese)
+Hungarian: Hungarian
+Icelandic: Icelandic
+Italian: Italian
+Japanese: Japanese
+Korean: Korean
+Norwegian: Norwegian
+Polish: Polish
+Portuguese: Portuguese
+Portuguese/Brazil: Portuguese/Brazil
+Romanian: Romanian
+Russian: Russian
+Spanish: Spanish
+Swedish: Swedish
+Turkish: Turkish
+Welsh: Welsh
+
+
+###############################################
+# Page: includes/functions.php
+#
+exceeds limit of XXX events per day: exceeds limit of XXX events per day
+You have XXX unapproved events: You have XXX unapproved events
+January: January
+February: February
+March: March
+April: April
+May_: May
+June: June
+July: July
+August: August
+September: September
+October: October
+November: November
+Jan: Jan
+Feb: Feb
+Mar: Mar
+Apr: Apr
+May: May
+Jun: Jun
+Jul: Jul
+Aug: Aug
+Sep: Sep
+Oct: Oct
+Nov: Nov
+Dec: Dec
+All Attendees: All Attendees
+Busy: Busy
+Tentative: Tentative
+
+
+###############################################
+# Page: includes/help_trailer.php
+#
+Go to: Go to
+
+
+###############################################
+# Page: includes/site_extras.php
+#
+Send Reminder: Send Reminder
+
+
+###############################################
+# Page: includes/trailer.php
+#
+My Calendar: My Calendar
+Back to My Calendar: Back to My Calendar
+Another User's Calendar: Another User's Calendar
+Add New Entry: Add New Entry
+Logout: Logout
+Manage calendar of: Manage calendar of
+
+
+###############################################
+# Page: includes/user-nis.php
+#
+incorrect password: incorrect password
+no such user: no such user
+Invalid user login: Invalid user login
+
+
+###############################################
+# Page: includes/js/edit_entry.php
+#
+You have not entered a Brief Description: You have not entered a Brief Description
+You have not entered a valid time of day: You have not entered a valid time of day
+The time you have entered begins before your preferred work hours.  Is this correct?: The time you have entered begins before your preferred work hours.  Is this correct?
+Please add a participant: Please add a participant
+
+
+###############################################
+# Page: includes/js/admin.php
+#
+Server URL is required: Server URL is required
+Server URL must end with '/': Server URL must end with '/'
+Invalid work hours: Invalid work hours
+Invalid color for document background: Invalid color for document background
+Invalid color for document title: Invalid color for document title
+Invalid color for table cell background: Invalid color for table cell background
+Invalid color for table grid: Invalid color for table grid
+Invalid color for table header background: Invalid color for table header background
+Invalid color for table text background: Invalid color for table text background
+Invalid color for event popup background: Invalid color for event popup background
+Invalid color for event popup text: Invalid color for event popup text
+Invalid color for table cell background for today: Invalid color for table cell background for today
+Color format should be '#RRGGBB': Color format should be '#RRGGBB'
+
+
+###############################################
+# Page: includes/js/availability.php
+#
+Change the date and time of this entry?: Change the date and time of this entry?
+
+
+###############################################
+# Page: includes/js/edit_layer.php
+#
+Invalid color: Invalid color
+
+
+###############################################
+# Page: tools/send_reminders.php
+#
+This is a reminder for the event detailed below.: This is a reminder for the event detailed below.
+Reminder: Reminder

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Estonian.txt
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Estonian.txt	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Estonian.txt	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,1357 @@
+# Use this as a starting point to translate this application into
+# another language.  The format is "English text: translated text"
+# There cannot be a ":" in the English text.
+# Translated by:
+#	Madis Listak madis at netbell.ee
+# Last update: 14.03.2003
+# Check out the tools directory which contains two perl scripts:
+#   check_translation.pl will tell you if you have successfully translated
+#        all required text
+#   pagify_translation.pl will take an old translation file and move the
+#        translations around so they age grouped by the page they appear in.
+#
+# Note: You will notice the entry for "May_" below.  There's a reason for
+# this.  Translate "May_" to the full month name and "May" to the three-letter
+# month abbreviation (like "Oct" for "October").
+#
+#
+#
+#
+# Translation last updated on 03-10-2004
+
+
+###############################################
+# Specify a charset (will be sent within meta tag for each page)
+#
+charset: iso-8859-4
+
+
+
+###############################################
+# Page: admin.php
+#
+System Settings: Süsteemi seaded
+You are not authorized: Sa ei ole siis lubatud
+Note: Pane tähele
+Your user preferences: Sinu isiklikud seaded
+may be affecting the appearance of this page.: võib mõjutada selle lehe väljanägemist.
+Click here: Klõpsi siia
+to not use your user preferences when viewing this page: ma ei kasuta oma isiklikke seadeid kui vaatan seda lehte
+are being ignored while viewing this page.: jäetakse tähelepanuta seda lehte vaadates
+to load your user preferences when viewing this page: laeme oma isiklikud kui vaatame seda lehte
+Save: Salvestame
+Help: Abiks
+Settings: Seaded
+app-name-help: Määrab ära rakenduse nime mis ilmub edaspidi lehitseja tiitli ribale
+Application Name: Rakenduse nimi
+server-url-help: määrab ära baasaadressi (URL-i) rakendusele. See lisatakse email meeldetuletustele.
+Server URL: Serveri URL
+language-help: Määrab ära kasutuskeele
+Language: Keel
+Your browser default language is: Sinu lehitseja kodukeel on
+fonts-help: Määrab ära missuguseid kirjatüüpe kasutada (näiteks "Arial, Helvetica")
+Fonts: Kirjatüübid
+#
+# << MISSING >>
+# custom-script-help:
+# English text: Allows entry of custom Javascript or stylesheet text that will be inserted into the HTML "head" section of every page.
+#
+#
+# << MISSING >>
+# Custom script/stylesheet:
+Yes: jah
+No: ei
+#
+# << MISSING >>
+# Edit:
+#
+# << MISSING >>
+# custom-header-help:
+# English text: Allows a custom HTML snippet to be included in the top of every page.
+#
+#
+# << MISSING >>
+# Custom header:
+#
+# << MISSING >>
+# custom-trailer-help:
+# English text: Allows a custom HTML snippet to be included at the end of every page.
+#
+#
+# << MISSING >>
+# Custom trailer:
+preferred-view-help: Määrab ära vaikimisi valitud vaate (päev, nädal, kuu, aasta).
+Preferred view: Eelistatud vaade
+Day: päev
+Week: nädal
+Month: kuu
+Year: aasta
+display-weekends-help: lisa ka nädalavahetused kui vaatad nädalat
+Display weekends in week view: näita nädalavahetusi nädala vaates
+#
+# << MISSING >>
+# yearly-shows-events-help:
+# English text: On the yearly view, display days that contain events in a bold font.
+#
+#
+# << MISSING >>
+# Display days with events in bold in year view:
+#
+# << MISSING >>
+# display-desc-print-day-help:
+# English text: Include event descriptions in printer-friendly version of day view.
+#
+#
+# << MISSING >>
+# Display description in printer day view:
+date-format-help: Määrab eelistatud kuupäeva seaded.
+Date format: Kuupäeva seaded
+December: detsember
+time-format-help: Määrab kasutatava aja eelistused : <br /><i>12 tundi:</i> Näita aega nii: 3am, 8:30pm, etc.  <br /><i>24 tundi:</i> Näita aega nii: 300, 2030, jne.
+Time format: Aja eelistused
+12 hour: 12 tundi
+24 hour: 24 tundi
+time-interval-help: Määrab kui pikad on aja vahemikud nädala- ja päeva vaates
+Time interval: Aja vahemik
+hour: tund
+minutes: minutid
+auto-refresh-help: Kui on lubatud, siis päeva, nädala ja kuu vaated, samuti nimekiri heakskiitma lehtedest värskendavad ise.
+Auto-refresh calendars: Automaatne kalendri värskendus
+auto-refresh-time-help: Kui automaatne värskendus on lubatud, siis määrame värskenduste sageduse.
+Auto-refresh time: Automaatse värskenduse aeg
+require-approvals-help: Kui on lubatud siis peab kasutaja sündmuse heaks kiitma enne kui seda näidatakse kalendris (kehtib, kui 'Näita heakskiitmatuid' on keelatud). Märkus - seade 'Ei' ei keela näitamist Avalikult Ligipääsetavas kalendris kui see on lubatud.
+Require event approvals: Nõua sündmuse heakskiitu
+display-unapproved-help: Määrab kas heakskiitmata sündmused näidatakse kalendris.<br /> Kui on 'Jah', siis näidatakse heakskiitmata sündmusi kalendris (erineva teksti värviga).<br /> Kui on 'Ei', siis peab heakskiitmata sündmused enne kalendris näitamist lubama.
+Display unapproved: Näita heakskiitmatuid
+display-week-number-help: Määrab kas nädala number (1-52) tuleb näidata kuu- ja nädala vaates.
+Display week number: Näita nädala numbrit
+display-week-starts-on: Määrab kas nädal algab pühapäeval või esmaspäeval. Kui esmaspäeval, siis on nädala numbrid ISO standardi järgi.
+Week starts on: Nädal algab
+Sunday: pühapäev
+Monday: esmaspäev
+work-hours-help: Määrab näidatava tööaja vahemiku päeva vaates.
+Work hours: Töö aeg
+From: Alates
+to: kuni
+disable-priority-field-help: Valides "Jah" kaob "Tähtsuse" väli sündmuse lehelt ja algajatel on lihtsam lehekülg.
+Disable Priority field: Keela Tähtsuse väli
+disable-access-field-help: Valides "Jah" kaob "Juurdepääs" väli sündmuse lehelt ja algajatel on lihtsam lehekülg.
+Disable Access field: Keela Juurdepääsu väli
+disable-participants-field-help: Valides "Jah" kaob "Osalejate" väli sündmuse lehelt ja pole võimalust kutsuda teisi kasutajaid oma sündmustele. Kui lubad selle võimaluse, siis tahad võib-olla keelata "Luban näha teiste kalendreid" ka.
+Disable Participants field: Keela Osalejate väli
+disable-repeating-field-help: Valides "Jah" kaob "Korduv" väli kui lisad sündmusi ja algajatel on lihtsam lehekülg.
+Disable Repeating field: Keela Korduv väli
+#
+# << MISSING >>
+# popup-includes-siteextras-help:
+# English text: If enabled, allow custom event fields setup in the site_extras.php file will be displayed in event popups.
+#
+#
+# << MISSING >>
+# Display Site Extras in popup:
+#
+# << MISSING >>
+# allow-html-description-help:
+# English text: If enabled, users can enter HTML in the event description field.  If not enabled, the HTML tags will be escaped so as to appear as plain text.  Warning: Enabling this feature will allow users to reference images on other websites.
+#
+#
+# << MISSING >>
+# Allow HTML in Description:
+allow-view-other-help: Määrab kas kasutaja saab näha teiste kalendreid.
+Allow viewing other user's calendars: Luba näha teiste kalendreid
+allow-public-access-help: Kui on lubatud, siis saab kalendrit kasutada kirjutamise keeluga avaliku kalendrina kuhu ei nõuta sisse registreerimist.
+Allow public access: Lubame avaliku ligipääsu
+public-access-view-others-help: Kui kalendrile saab avalikult ligi, siis määrab kas kasutaja saab ka teiste kalendreid näha.
+Public access can view other users: Avalik ligipääs näeb teisi kasutajaid
+public-access-can-add-help: Kui on lubatud, siis avalik kasutaja saab lisada sündmusi kuid neid ei ole näha enne administraatori heakskiitu.
+Public access can add events: Avalik kasutaja saab lisada sündmusi
+public-access-add-requires-approval-help: Määrab kas avaliku ligipääsu kaudu lisatud sündmused vajavad heakskiitu.
+Public access new events require approval: Avaliku kasutuse uued sündmused vajavad heakskiitu:
+#
+# << MISSING >>
+# public-access-sees-participants-help:
+# English text: If enabled, users accessing the calendar from the public account will be able to see event participants if they view details of an event.
+#
+#
+# << MISSING >>
+# Public access can view participants:
+allow-view-add-help: '+' ikoon on lisatud vaadetesse lubamaks kasutajal kiiresti lisada sündmusi teiste kasutajate kalendritesse.
+Include add event link in views: Kaasa lisa sündmus viide vaadetesse
+allow-external-users-help: Määrab kas kalendri mitte kasutajaid saab kutsuda sündmustele. See lubab kalendri mittekasutajaid loetleda kui sündmusel osalejaid.
+Allow external users: Lubame välised kasutajad
+external-can-receive-notification-help: Kui välised kasutajad ja emaili kasutamine on lubatud, siis saavad välised kasutajad (nende emaili aadressi olemasolul) teateid kui sündmus on lisatud, uuendatud või kustutatud
+External users can receive email notifications: Välised kasutajad võivad saada emaili teateid
+external-can-receive-reminder-help: Kui välised kasutajad ja emaili kasutamine on lubatud, siis saavad välised kasutajad (nende emaili aadressi olemasolul) meeldetuletusi.
+External users can receive email reminders: Välised kasutajad võivad saada emaili meeldetuletusi
+remember-last-login-help: Kui on lubatud, siis näidatakse kasutaja registreerimisandmed ilma salasõnata sisenemise lehel ja kasutaja seaded koos värvide ja keeltega laetakse automaatselt.
+Remember last login: Mäleta viimast sisenemist
+conflict-check-help: Kontrolli sündmuste vastuolulisust (mitu sündmust samal ajal ühele isikule). Kui ütled "jah" siis saad siiski samaaegseid sündmusi planeerida kui kinnitad hoiatus teateid. Kui ütled "ei", siis mingeid kontrolle ei tehta. Arvatavasti tahad öelda "jah", et vastuolusid kontrollida.
+Check for event conflicts: Kontrolli sündmuste vastuolulisust
+conflict-months-help: Kui sündmuste vastuolulisuse kontrollimine on lubatud siis määrame kui mitu kuud ette peame kontrollima. Kui leiad, et kontrollimine võtab liiga kaua aega, siis vähenda seda numbrit
+Conflict checking months: Vastuolulisuse kontrollimise kuud
+conflict-check-override-help: Lubame kasutajal määrata mitmeid sündmusi samale ajale.
+Allow users to override conflicts: Lubame kasutajal samaaegseid sündmusi
+limit-appts-help: Lubab administraatoril seada kogu kalendrisüsteemi hõlmavat piiri kui mitu sündmust üks inimene päeavas saab omada.
+Limit number of timed events per day: Piira ajastatud sündmuste arvu päevas
+limit-appts-number-help: Määrab suurima ajastatud sündmuste arvu mida kasutaja saab päeavas omada.
+Maximum timed events per day: Suurim ajastatud sündmuste arv päeavas
+Plugins: Liidesed
+plugins-enabled-help: Lubame liidesrakendusi
+Enable Plugins: Lubame liidesed
+plugins-sort-key-help: Määrab liideste järjekorra tunnuse. See lubab liidestel ilmuda kindlas järjekorras.
+Plugin: Liides
+Groups: Grupid
+groups-enabled-help: Lubab gruppide toe. Kasutajaid võib valida gruppide järgi.
+Groups enabled: Grupid lubatud
+user-sees-his-group-help: Kui on lubatud, siis kasutaja ei näe teisi kalendri kasutajaid kes ei kuulu vähemalt ühte nende gruppi.
+User sees only his groups: Kasutaja näeb ainult oma gruppi
+Categories: Kategooriad
+categories-enabled-help: Lubame sündmuste kategooriad
+Categories enabled: Kategooriad lubatud
+#
+# << MISSING >>
+# Nonuser:
+# English text: Nonuser Calendars
+#
+#
+# << MISSING >>
+# nonuser-enabled-help:
+# English text: If enabled, admins will have the option to add nonuser calendars
+#
+#
+# << MISSING >>
+# Nonuser enabled:
+# English text: Nonuser Calendars Enabled
+#
+#
+# << MISSING >>
+# nonuser-list-help:
+# English text: Where to display the nonuser calendars in the participant list
+#
+#
+# << MISSING >>
+# Nonuser list:
+# English text: Display in participants list at
+#
+#
+# << MISSING >>
+# Top:
+#
+# << MISSING >>
+# Bottom:
+#
+# << MISSING >>
+# Reports:
+#
+# << MISSING >>
+# reports-enabled-help:
+# English text: If enabled, users will see a "Reports" section at the bottom of each page and will be allowed to create custom reports.  Additionally, admin users can create global reports that will appear at the bottom of all users' pages.
+#
+#
+# << MISSING >>
+# Reports enabled:
+#
+# << MISSING >>
+# Subscribe/Publish:
+#
+# << MISSING >>
+# subscriptions-enabled-help:
+# English text: Specifies if remote users can subscribe to a WebCalendar user's calendar, allowing them to see the WebCalendar user's events in their iCal-enabled application (such as Apple's iCal or Mozilla Calendar).
+#
+#
+# << MISSING >>
+# Allow remote subscriptions:
+Email: Email
+email-enabled-help: Luba või keela kõik emaili meeldetuletused või teated. Sea "ei" kui sinu server ei oska maili saata.
+Email enabled: Email lubatud
+email-default-sender: Määrab emaili saatja aadressi meeldetuletustele.
+Default sender address: Vaikimisi määratud saatja aadress
+Default user settings: Vaikimisi kasutaja määrangud
+email-event-reminders-help: Määrab kas saata sündmuste meeldetuletusi
+Event reminders: Sündmuste meeldetuletajad
+email-event-added: Määrab kas saata emaili teadet kui sündmus on kalendrisse lisatud.
+Events added to my calendar: Minu kalendrisse lisatud sündmused
+email-event-updated: Määrab kas saata emailiga teade kui sündmust on kalendrist uuendatud.
+Events updated on my calendar: Minu kalendri uuendatud sündmused
+email-event-deleted: Määrab kas saata emailiga teade kui sündmus on kalendrist kustutatud.
+Events removed from my calendar: Minu kalendrist eemaldatud sündmused
+email-event-rejected: Määrab kas saata emailiga teade kui kutsutu lükkab sündmuse tagasi
+Event rejected by participant: Osaleja poolt tagasi lükatud sündmus
+colors-help: Kõik värvid tuleb näidata kaheksandsüsteemis kujul "#RRGGBB" kus "RR" on kaheksandsüsteemi väärtus punasele, "GG" rohelisele ja "BB" sinisele.
+Colors: Värvid
+Allow user to customize colors: Lubame kasutajal muuta värve
+Document background: Dokumendi taust
+Select: Vali
+Document title: Dokumendi pealkiri
+Document text: Dokumendi tekst
+Table grid color: Tabeli joonte värv
+Table header background: Tabeli päise taust
+Table header text: Tabel päise tekst
+Table cell background: Tabeli ruudu taust
+Table cell background for current day: Tabeli ruudu taust jooksval päeval
+Table cell background for weekends: Tabeli ruudu taust nädalavahetuseks
+Event popup background: Sündmuse akna taust
+Event popup text: Sündmuse tekst
+
+
+###############################################
+# Page: activity_log.php
+#
+Activity Log: Kasutamise ajalugu
+User: Kasutaja
+Calendar: Kalender
+Date: Kuupäev
+Time: Aeg
+Event: Sündmus
+Action: Tegevus
+Event created: Sündmus loodud
+Event approved: Sündmus heaks kiidetud
+Event rejected: Sündmus tagasi lükatud
+Event updated: Sündmus muudetud
+Event deleted: Sündmus kustutatud
+Notification sent: Teade saadetud
+Reminder sent: Meeldetuletus saadetud
+Database error: Andmebaasi viga
+Previous: Eelmine
+Next: Järgmine
+
+
+###############################################
+# Page: add_entry.php
+#
+Invalid entry id: Vale kande id
+This is a private event and may not be added to your calendar.: See on isiklik sündmus ja seda ei saa sinu kalendrisse lisada.
+Error adding event: Viga sündmuse lisamisel
+
+
+###############################################
+# Page: admin_handler.php
+#
+Error: Viga
+The following error occurred: Järgmine viga on juhtunud
+
+
+###############################################
+# Page: approve_entry.php
+#
+Error approving event: Viga sündmuse heakskiidul
+
+
+###############################################
+# Page: category.php
+#
+Add: Lisa
+Category Name: Kategooria nimi
+Global: Üleüldine
+Delete: Kustuta
+Are you sure you want to delete this entry?: Kas oled kindel et tahad kustutada seda kannet?
+Add New Category: Lisa uus kategooria
+
+
+###############################################
+# Page: category_handler.php
+#
+
+
+###############################################
+# Page: datesel.php
+#
+
+
+###############################################
+# Page: day.php
+#
+#
+# << MISSING >>
+# Admin mode:
+Assistant mode: Abistav olek
+Generate printer-friendly version: Tee trükkalisõbralik leht
+Printer Friendly: Trükkali sõbralik
+
+
+###############################################
+# Page: del_entry.php
+#
+Hello: Halloo
+An appointment has been canceled for you by: Sinu kokkusaamise jättis ära
+The subject was: Teema oli
+Notification: Teadustus
+
+
+###############################################
+# Page: edit_entry.php
+#
+Edit Entry: Muuda kannet
+Add Entry: Lisa kannet
+brief-description-help: This should provide a short description (about 20 characters) of the event.  This will represent the event when viewing the calendar.
+Brief Description: Lühikirjeldus
+full-description-help: See lõpetab sündmuse kirjelduse. Neid andmeid näeb kui kasutaja vaatab sündmust.
+Full Description: Täiskirjeldus
+date-help: Määrab sündmuse kuupäeva.
+time-help: Määrab sündmuse aja.<br />Vali kas "Ajastatud sündmus" (sündmuse jaoks mis on määratud kindlale ajale), "Ajastamata sündmus" (sündmuse jaoks millel pole kindlat kellaaega (nägu pühad) või "Kogu päeva sündmus" (sündmusele mis kestab kogu päeva (olen kontorist väljas).
+am: am
+pm: pm
+Untimed event: Ajastamata sündmus
+Timed event: Ajastatud sündmus
+All day event: Kogu päeva sündmus
+duration-help: Määrab sündmuse kestvuse (tunnid:minutid).  <br /><i>Selle välja võib jätta tühjaks.</i>
+Duration: Kestvus
+hours: tunnid
+priority-help: Määrab sündmuse tähtsuse. Suure tähtsusega sündmused näidatakse esile tõstetult.
+Priority: Tähtsus
+Low: Madal
+Medium: Keskmine
+High: Suur
+access-help: Määrab sündmuse ligipääsetavuse.<br /> <i>Avalik</i>: Kõik võivad sündmust täielikult näha.  <br /><i>Isiklik</i>: Teised näevad et see aeg on kinni kuid ei näe detaile.
+Access: Ligipääsetavus
+Public: Avalik
+Confidential: Isiklik
+category-help: Määrab sündmuse kategooria
+Category: Kategooria
+None: pole
+days: päevi
+before event: enne sündmust
+participants-help: Näita selle kande osalejaid.
+Participants: Osalejad
+external-participants-help: Määrab ära kalendi mittekasutajatest osalejad. Osalejad tuleb loetleda üks rea kohta ja lisada võib emaili aadressi. Kui email on määratud, siis võib inimene saada teadustusi ja meeldetuletusi.
+External Participants: Välised osalejad
+repeat-type-help: Vali kui tihti sündmust korrata.<i>Kuiselt (päeva järgi)</i> lubab korrata sündmust kuu esimesel esmaspäeval jne.  <i>Kuiselt (kuupäeva järgi)</i> lubab sündmusel korduda iga kuu samal kuupäeval.
+Repeat Type: Korduse tüüp
+Daily: päeviti
+Weekly: nädalati
+Monthly: kuiselt
+by day: päeva järgi
+#
+# << MISSING >>
+# by day (from end):
+by date: kuupäeva järgi
+Yearly: aastati
+repeat-end-date-help: Määrab kuupäeva milleni sündmust korrata.
+Repeat End Date: Korduse lõppkuupäev
+Use end date: Kasutuse lõppkuupäev
+repeat-day-help: Määrab missugustel nädalapäevadel sündmust korrata. Kehtib vaid siis kui <i>Korduse tüüp</i> on <i>nädalati</i>.
+Repeat Day: Korduse päev
+for weekly: nädal
+Tuesday: teisipäev
+Wednesday: kolmapäev
+Thursday: neljapäev
+Friday: reede
+Saturday: laupäev
+repeat-frequency-help: Määrab kui tihti sündmust korrata. 1 näitab et peab korduma igas ajaühikus, 2 näitab et peab korduma igal teisel nädalal (kui <i>Korduse tüüp</i> on <i>nädalati</i>), igal teisel kuul (kui <i>Korduse tüüp</i> on <i>kuiselt</i>), jne.
+Frequency: Sagedus
+Delete entry: Kustuta kanne
+You are not authorized to edit this entry: Sul ei ole lubatud muuta seda kannet
+
+
+###############################################
+# Page: edit_layer.php
+#
+Edit Layer: Muuda kihti
+Add Layer: Lisa kiht
+Source: Allikas
+Color: Värv
+Duplicates: Kordused
+Show layer events that are the same as your own: Näita sündmuste kihte mis on samased sinu omadega
+Are you sure you want to delete this layer?: Kas oled kindel et kustutad selle kihi?
+Delete layer: Kustuta kiht
+
+
+###############################################
+# Page: edit_layer_handler.php
+#
+You cannot create a layer for yourself: Sa ei saa ise kihti kustutada
+You can only create one layer for each user: Saad teha vaid ühe kihi kasutaja kohta
+
+
+###############################################
+# Page: edit_user.php
+#
+Edit User: Muuda kasutajat
+Add User: Lisa kasutaja
+Username: Kasutajanimi
+First Name: Eesnimi
+Last Name: Perenimi
+E-mail address: E-mail aadress
+Password: Salasõna
+again: uuesti
+Admin: Admin
+Disabled for demo: Keelatud näidise jaoks
+Change Password: Muuda salasõna
+New Password: Uus salasõna
+Set Password: Sea salasõna
+
+
+###############################################
+# Page: edit_user_handler.php
+#
+Deleting users not supported: Kasutajate kustutamine pole lubatud
+The passwords were not identical: Salasõnad pole samased
+You have not entered a password: Salasõna sisestamata
+
+
+###############################################
+# Page: export.php
+#
+Export: Eksport
+Export format: Ekspordi määrangud
+Palm Pilot: Palm Pilot
+Export all dates: Ekspordi kõik kuupäevad
+Start date: Algus kuupäev
+End date: Lõpp kuupäev
+Modified since: Muudetud alates
+
+
+###############################################
+# Page: export_handler.php
+#
+#
+# << MISSING >>
+# export format not defined or incorrect:
+
+
+###############################################
+# Page: group_edit.php
+#
+Unnamed Group: Nimeta grupp
+Add Group: Lisa grupp
+Edit Group: Muuda gruppi
+Group name: Grupi nimi
+Updated: Uuendatud
+Created by: Loodud
+Users: Kasutajaid
+
+
+###############################################
+# Page: group_edit_handler.php
+#
+You must specify a group name: Pead määrama grupi nime
+
+
+###############################################
+# Page: groups.php
+#
+Add New Group: Lisa uus grupp
+
+
+###############################################
+# Page: icalfb.php
+#
+
+
+###############################################
+# Page: pref.php
+#
+Preferences: Eelistused
+to modify the preferences for the Public Access calendar: et muuta avalikult kasutatava kalendri eelistusi
+tz-help: Määrab kui palju erineb kohalik aeg serveri ajast
+Timezone Offset: Ajavööndi erinevus
+Add N hours to: Lisa N tundi
+Subtract N hours from: Lahuta N tundi
+same as: sama kui
+server time: serveri aeg
+Default Category: Vaikimisi kategooria
+#
+# << MISSING >>
+# When I am the boss:
+#
+# << MISSING >>
+# Email me event notification:
+#
+# << MISSING >>
+# I want to approve events:
+#
+# << MISSING >>
+# allow-remote-subscriptions-help:
+# English text: Specifies if remote users can subscribe to your calendar, allowing them to see your events in a iCal-enabled application (such as Apple's iCal or Mozilla Calendar).
+#
+#
+# << MISSING >>
+# remote-subscriptions-url-help:
+# English text: Displays the URL remote users should use to subscribe to your calendar.
+#
+#
+# << MISSING >>
+# URL:
+Sun: P
+Mon: E
+Tue: T
+Wed: K
+Thu: N
+Fri: R
+Sat: L
+Save Preferences: Salvesta eelistused
+
+
+###############################################
+# Page: help_bug.php
+#
+Report Bug: Teata veast
+
+
+###############################################
+# Page: help_edit_entry.php
+#
+Adding/Editing Calendar Entries: Lisame/Muudame kalendri kirjeid
+
+
+###############################################
+# Page: help_index.php
+#
+Help Index: Abiinfo sisu
+Layers: Kihid
+#
+# << MISSING >>
+# Import:
+
+
+###############################################
+# Page: help_layers.php
+#
+Layers are useful for displaying other users' events in your own calendar.  You can specifiy the user and the color the events will be displayed in.: Kihid on kasulikud selleks, et näidata teiste kasutajate sündmusi omas kalendris. Iga kasutaja sündmustele saad määrata oma värvi.
+Add/Edit/Delete: Lisa/Muuda/Kustuta
+Clicking the Edit Layers link in the admin section at the bottom of the page will allow you to add/edit/delete layers.: Klõpsates 'Muuda kiht' viitel admin osas lehe all saad lisada/muuta/kustutada kihte.
+Specifies the user that you would like to see displayed in your calendar.: Määrab kasutaja keda tahad oma kalendris näha.
+The text color of the new layer that will be displayed in your calendar.: Uue kihi teksti värv mida sinu kalendris näidatakse.
+If checked, events that are duplicates of your events will be shown.: Kui on valitud, siis näidatakse samaseid sündmuseid.
+Disabling: Keelame
+Press the Disable Layers link in the admin section at the bottom of the page to turn off layers.: Vajuta 'Keela kihid' viidet admin osas lehe all kihtide eemaldamiseks.
+Enabling: Lubame
+Press the Enable Layers link in the admin section at the bottom of the page to turn on layers.: Vajuta 'Luba kihid' viidet admin osas lehe all kihtide näitamiseks
+
+
+###############################################
+# Page: help_admin.php
+#
+
+
+###############################################
+# Page: week.php
+#
+cont.: jätkub.
+
+
+###############################################
+# Page: layers.php
+#
+to modify the layers settings for the: et muuta kihtide seadeid
+Layers are currently: Kihid on praegu
+Enabled: Lubatud
+Disabled: Keelatud
+Disable Layers: Keela kihid
+Enable Layers: Luba kihid
+Layer: Kiht
+Edit layer: Muuda kihti
+Add layer: Lisa kiht
+
+
+###############################################
+# Page: layers_toggle.php
+#
+
+
+###############################################
+# Page: list_unapproved.php
+#
+View this entry: Vaata seda kannet
+Approve this entry?: Kiida see kanne heaks?
+Approve/Confirm: Kiidan heaks/Kinnitan
+Reject this entry?: Lükkame kande tagasi?
+Reject: Hülgame
+No unapproved events for: Pole heakskiitmata sündmusi
+Unapproved Events: Heakskiitmata sündmused
+Public Access: Avalik ligipääs
+
+
+###############################################
+# Page: view_entry.php
+#
+every: iga
+2nd: 2-e
+3rd: 3-s
+4th: 4-s
+5th: 5-s
+1st: 1-e
+#
+# << MISSING >>
+# last:
+Description: Kirjeldus
+Status: Olukord
+Waiting for approval: Ootab heakskiitu
+Deleted: Kustutatud
+Rejected: Tagasi lükatud
+External User: Väline kasutaja
+Approve/Confirm entry: Kiida heaks/kinnita kanne
+Reject entry: Hülga kanne
+Set category: Määra kategooria
+Edit repeating entry for all dates: Muuda korduvat kannet kõikidel kuupäevadel
+Edit entry for this date: Muuda kanne sellel kuupäeval
+This will delete this entry for all users.: See kustutab kande kõikide kasutajate jaoks
+Delete repeating event for all dates: Kustuta korduv kanne kõikidel kuupäevadel
+Delete entry only for this date: Kustuta kanne ainult sellel kuupäeval
+Edit entry: Muuda kannet
+This will delete the entry from your calendar.: See kustutab kande sinu kalendrist
+Do you want to add this entry to your calendar?: Kas tahad lisada kande oma kalendrisse?
+This will add the entry to your calendar.: See lisab kande sinu kalendrisse.
+Add to My Calendar: Lisa minu kalendrisse
+Email all participants: Saada email kõigile osalejaile
+Show activity log: Näita kasutamise ajalugu
+Hide activity log: Peida kasutamise ajalugu
+#
+# << MISSING >>
+# Export this entry to:
+
+
+###############################################
+# Page: view_v.php
+#
+
+
+###############################################
+# Page: month.php
+#
+
+
+###############################################
+# Page: pref_handler.php
+#
+
+
+###############################################
+# Page: reject_entry.php
+#
+An appointment has been rejected by: Kohtumise lükkas tagasi
+The description is: Kirjeldus on
+Title: WebCalendar
+
+
+###############################################
+# Page: search.php
+#
+Search: Otsi
+Advanced Search: Keerulisem otsing
+Keywords: Võtmesõnad
+
+
+###############################################
+# Page: search_handler.php
+#
+You must enter one or more search keywords: Pead sisestama ühe või mitu võtmesõna
+Search Results: Otsingu tulemused
+match found: vaste leitud
+matches found: vasteid leitud
+No matches found: Ühtegi vastet ei leitud
+
+
+###############################################
+# Page: select_user.php
+#
+View Another User's Calendar: Vaata teise kasutaja kalendrit
+Go: Mine
+
+
+###############################################
+# Page: publish.php
+#
+
+
+###############################################
+# Page: users.php
+#
+denotes administrative user: määrab administratiivse kasutaja
+Add New User: Lisa uus kasutaja
+
+
+###############################################
+# Page: usersel.php
+#
+All: Kõik
+Reset: Tühista
+Remove: Eemalda
+Ok: Ok
+Cancel: Loobu
+
+
+###############################################
+# Page: import.php
+#
+#
+# << MISSING >>
+# This form will allow you to import entries from the Palm Desktop Datebook.:
+#
+# << MISSING >>
+# Exclude private records:
+#
+# << MISSING >>
+# Datebook File:
+#
+# << MISSING >>
+# This form will import vCalendar (.vcs) 1.0 events:
+#
+# << MISSING >>
+# vCal File:
+#
+# << MISSING >>
+# This form will import iCalendar (.ics) events:
+#
+# << MISSING >>
+# iCal File:
+#
+# << MISSING >>
+# Overwrite Prior Import:
+
+
+###############################################
+# Page: year.php
+#
+
+
+###############################################
+# Page: view_d.php
+#
+
+
+###############################################
+# Page: view_m.php
+#
+
+
+###############################################
+# Page: view_w.php
+#
+
+
+###############################################
+# Page: views.php
+#
+Views: Views
+Add New View: Lisa uus vaade
+
+
+###############################################
+# Page: views_edit.php
+#
+Unnamed View: Nimeta vaade
+Add View: Lisa vaade
+Edit View: Muuda vaadet
+View Name: Vaata vaadet
+View Type: Vaata tüüpi
+#
+# << MISSING >>
+# Week (Users horizontal):
+#
+# << MISSING >>
+# Week (Users vertical):
+#
+# << MISSING >>
+# Week (Timebar):
+#
+# << MISSING >>
+# Month (side by side):
+#
+# << MISSING >>
+# Month (on same calendar):
+
+
+###############################################
+# Page: nonusers.php
+#
+#
+# << MISSING >>
+# NONUSER_PREFIX not set:
+# English text: NONUSER_PREFIX has not been set in config.php.
+#
+#
+# << MISSING >>
+# NonUser:
+# English text: NonUser Calendars
+#
+#
+# << MISSING >>
+# Calendar ID:
+#
+# << MISSING >>
+# Add New NonUser Calendar:
+
+
+###############################################
+# Page: nonusers_handler.php
+#
+
+
+###############################################
+# Page: view_l.php
+#
+
+
+###############################################
+# Page: help_pref.php
+#
+default-category-help: Määrab kategooria kuhu uus sündmus väikimisi kuulub.
+
+
+###############################################
+# Page: report.php
+#
+Private: Isiklik
+#
+# << MISSING >>
+# Approved:
+#
+# << MISSING >>
+# Unknown:
+#
+# << MISSING >>
+# to manage reports for the Public Access calendar:
+#
+# << MISSING >>
+# Add new report:
+#
+# << MISSING >>
+# Invalid report id:
+#
+# << MISSING >>
+# Manage Reports:
+
+
+###############################################
+# Page: login.php
+#
+You must enter a login and password: Pead sisestama kasutajanime ja salasõna
+Save login via cookies so I don't have to login next time: Salvesta kasutajatunnused küpsisesse et ma ei peaks enam neid sisestama
+Login: Sisenemine
+Access public calendar: Kasuta avalikku kalendrit
+cookies-note: <b>Märkus:</b> See rakendus nõuab küpsiste kasutamise lubamist.
+
+
+###############################################
+# Page: views_edit_handler.php
+#
+You must specify a view name: Pead näitama vaate nime
+
+
+###############################################
+# Page: week_details.php
+#
+New Entry: uus kanne
+
+
+###############################################
+# Page: import_handler.php
+#
+#
+# << MISSING >>
+# Import Results:
+#
+# << MISSING >>
+# Events successfully imported:
+#
+# << MISSING >>
+# Events from prior import marked as deleted:
+#
+# << MISSING >>
+# Conflicting events:
+#
+# << MISSING >>
+# Errors:
+Back to My Calendar: Tagasi minu kalendrisse
+#
+# << MISSING >>
+# There was an error parsing the import file or no events were returned:
+#
+# << MISSING >>
+# The import file contained no data:
+The following conflicts with the suggested time: Järgmised sündmused on vastuolus soovitud ajaga
+Unnamed Event: Nimetu sündmus
+Scheduling Conflict: Kavandame vastuolu
+conflicts with the following existing calendar entries: on vastuolus järgmiste kalendri kannetega
+#
+# << MISSING >>
+# Event Imported:
+
+
+###############################################
+# Page: edit_report.php
+#
+#
+# << MISSING >>
+# Tomorrow:
+#
+# << MISSING >>
+# Today:
+#
+# << MISSING >>
+# Yesterday:
+#
+# << MISSING >>
+# Day before yesterday:
+#
+# << MISSING >>
+# Next week:
+#
+# << MISSING >>
+# This week:
+#
+# << MISSING >>
+# Last week:
+#
+# << MISSING >>
+# Week before last:
+#
+# << MISSING >>
+# Next week and week after:
+#
+# << MISSING >>
+# This week and next week:
+#
+# << MISSING >>
+# Last week and this week:
+#
+# << MISSING >>
+# Last two weeks:
+#
+# << MISSING >>
+# Next month:
+#
+# << MISSING >>
+# This month:
+#
+# << MISSING >>
+# Last month:
+#
+# << MISSING >>
+# Month before last:
+#
+# << MISSING >>
+# Next year:
+#
+# << MISSING >>
+# This year:
+#
+# << MISSING >>
+# Last year:
+#
+# << MISSING >>
+# Year before last:
+#
+# << MISSING >>
+# Unnamed Report:
+#
+# << MISSING >>
+# Add Report:
+#
+# << MISSING >>
+# Edit Report:
+#
+# << MISSING >>
+# Report name:
+Current User: Käesolev kasutaja
+#
+# << MISSING >>
+# Include link in trailer:
+#
+# << MISSING >>
+# Include standard header/trailer:
+#
+# << MISSING >>
+# Date range:
+#
+# << MISSING >>
+# Include previous/next links:
+#
+# << MISSING >>
+# Include empty dates:
+#
+# << MISSING >>
+# Template variables:
+#
+# << MISSING >>
+# Page template:
+#
+# << MISSING >>
+# Day template:
+#
+# << MISSING >>
+# Event template:
+#
+# << MISSING >>
+# Are you sure you want to delete this report?:
+
+
+###############################################
+# Page: assistant_edit.php
+#
+Assistants: Abilised
+Yours assistants: Sinu abiline
+
+
+###############################################
+# Page: view_t.php
+#
+
+
+###############################################
+# Page: assistant_edit_handler.php
+#
+
+
+###############################################
+# Page: adminhome.php
+#
+Account: Konto
+#
+# << MISSING >>
+# NonUser Calendars:
+#
+# << MISSING >>
+# Delete Events:
+#
+# << MISSING >>
+# Public Preferences:
+#
+# << MISSING >>
+# Unapproved Public Events:
+#
+# << MISSING >>
+# Administrative Tools:
+
+
+###############################################
+# Page: purge.php
+#
+#
+# << MISSING >>
+# Purging events for:
+#
+# << MISSING >>
+# Finished:
+#
+# << MISSING >>
+# Delete all events before:
+#
+# << MISSING >>
+# Check box to delete <b>ALL</b> events for a user:
+#
+# << MISSING >>
+# Are you sure you want to delete events for:
+
+
+###############################################
+# Page: help_import.php
+#
+#
+# << MISSING >>
+# Palm Desktop:
+#
+# << MISSING >>
+# It should be located in your Palm directory in <tt>datebook/datebook.dat</tt> in a subdirectory named by your username.:
+#
+# << MISSING >>
+# The following entries will not be imported:
+#
+# << MISSING >>
+# Entries older than the current date:
+#
+# << MISSING >>
+# Entries created in the Palm Desktop that have not been HotSync'd:
+#
+# << MISSING >>
+# Anything imported from Palm will be overwritten during the next import (unless the event date has passed).:
+#
+# << MISSING >>
+# Therefore, updates should be made in the Palm Desktop.:
+#
+# << MISSING >>
+# vCal:
+#
+# << MISSING >>
+# The following formats have been tested:
+#
+# << MISSING >>
+# Palm Desktop 4:
+#
+# << MISSING >>
+# Lotus Organizer 6:
+#
+# << MISSING >>
+# Microsoft Outlook 2002:
+#
+# << MISSING >>
+# iCalendar:
+#
+# << MISSING >>
+# Enabling <b>Overwrite Prior Import</b> will cause events imported previously that used the same UID as an event from the new import file to be marked as deleted.  This should allow an updated iCalendar file to be imported without creating duplicates.:
+
+
+###############################################
+# Page: edit_report_handler.php
+#
+#
+# << MISSING >>
+# Variable N not found:
+
+
+###############################################
+# Page: edit_entry_handler.php
+#
+A new appointment has been made for you by: Sulle on määratud uus kohtumine
+An appointment has been updated by: An appointment has been updated by
+The subject is: Sisu on
+Please look on: Palun vaata
+to accept or reject this appointment: kohtumise heakskiitmiseks või tagasilükkamiseks
+to view this appointment: kohtumise nägemiseks
+Your suggested time of: Sinu soovitud aeg
+
+
+###############################################
+# Page: set_entry_cat.php
+#
+You have not added any categories: Ssa pole lisanud ühtegi kategooriat
+Set Category: Määra kategooria
+
+
+###############################################
+# Page: edit_template.php
+#
+#
+# << MISSING >>
+# Edit Custom Script/Stylesheet:
+#
+# << MISSING >>
+# Edit Custom Header:
+#
+# << MISSING >>
+# Edit Custom Trailer:
+
+
+###############################################
+# Page: includes/trailer.php
+#
+Go to: Mine
+My Calendar: Minu kalender
+Logout: Väljume
+Another User's Calendar: Teise kasutaja kalender
+Add New Entry: Lisa uus kanne
+Manage Views: Tegele vaadetega
+Manage calendar of: Tegele kalendriga
+
+
+###############################################
+# Page: includes/connect.php
+#
+
+
+###############################################
+# Page: includes/user.php
+#
+Invalid login: Ebasobiv kasutaja
+Invalid user login: Ebasobiva kasutaja sisenemine
+
+
+###############################################
+# Page: includes/site_extras.php
+#
+Send Reminder: Saada meeldetuletus
+
+
+###############################################
+# Page: includes/translate.php
+#
+
+
+###############################################
+# Page: includes/user-ldap.php
+#
+
+
+###############################################
+# Page: includes/user-nis.php
+#
+
+
+###############################################
+# Page: includes/help_trailer.php
+#
+
+
+###############################################
+# Page: includes/dbtable.php
+#
+
+
+###############################################
+# Page: includes/init.php
+#
+
+
+###############################################
+# Page: includes/functions.php
+#
+This event is confidential: Sündmus on isiklik
+exceeds limit of XXX events per day: ületab päeva piiri XXX sündmust päevas
+You have XXX unapproved events: Sul on XXX heakskiitmata sündmust
+January: jaanuar
+February: veebruar
+March: märts
+April: aprill
+May_: mai
+June: juuni
+July: juuli
+August: august
+September: september
+October: oktoober
+November: november
+Jan: jaan
+Feb: veeb
+Mar: märts
+Apr: apr
+May: mai
+Jun: juuni
+Jul: juuli
+Aug: aug
+Sep: sept
+Oct: okt
+Nov: nov
+Dec: dets
+
+
+###############################################
+# Page: includes/js/admin.php
+#
+Server URL is required: Serveri URL on puudu
+Server URL must end with '/': Serveri URL peab lõppema '/' märgiga
+Invalid color for document background: Vigane värv dokumendi tausta jaoks
+Invalid color for document title: Vigane värv dokumendi tiitli jaoks
+Invalid color for table cell background: Vigane värv tabeli ruudu tausta jaoks
+Invalid color for table grid: Vigane värv tabeli piirjoonte jaoks
+Invalid color for table header background: Vigane värv tabeli päise tausta jaoks
+Invalid color for table text background: Vigane värv tabeli teksti tausta jaoks
+Invalid color for event popup background: Vigane värv sündmuse akna tausta jaoks
+Invalid color for event popup text: Vigane värv sündmuse akna teksti jaoks
+Invalid color for table cell background for today: Vigane värv tänase päeva tabeli ruudu tausta jaoks
+Color format should be '#RRGGBB': Värvi esitusviis peab olema kujul '#RRGGBB'
+
+
+###############################################
+# Page: includes/js/edit_entry.php
+#
+You have not entered a Brief Description: Sa ei ole kirjutanud lühikirjeldust
+You have not entered a valid time of day: Sa ei ole kirjutanud õiget kellaaega
+The time you have entered begins before your preferred work hours.  Is this correct?: Sisestatud aeg algab enne tööpäeva. Kas see on õige?
+
+
+###############################################
+# Page: includes/js/edit_layer.php
+#
+Invalid color: Vale värv
+
+
+###############################################
+# Page: includes/js/pref.php
+#
+
+
+###############################################
+# Page: tools/send_reminders.php
+#
+This is a reminder for the event detailed below.: See on meeldetuletus alljärgnevale sündmusele.
+Reminder: Meeldetuletus

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Finnish.txt
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Finnish.txt	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Finnish.txt	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,1149 @@
+###########################################################################
+# Finnish translation by Juha-Matti Åberg (juffe at liveware.fi)             #
+# Updated for WebCal 1.0RC2 by Jussi Siponen (jussi.siponen at posiona.com)  #
+###########################################################################
+# Translation last updated on 03-11-2005
+
+# No charset specified (not needed for iso-8859-1)
+# "charset" is used in a meta tag, do not translate "charset" here.
+# charset:
+
+
+
+###############################################
+# Page: week.php
+#
+Week: Viikko
+Previous: Edellinen
+Next: Seuraava
+Admin mode: Pääkäyttäjä-tila
+Assistant mode: Avustaja-tila
+cont.: jatk.
+Generate printer-friendly version: Luo tulostusversio
+Printer Friendly: Tulostusversio
+
+
+###############################################
+# Page: admin.php
+#
+System Settings: Järjestelmän asetukset
+Help: Ohjeita
+You are not authorized: Käyttöoikeus puuttuu
+Admin: Ylläpito
+Note: Huomaa
+Your user preferences: Henkilökohtaiset asetukset
+may be affecting the appearance of this page.: voivat vaikuttaa tämän sivun ulkoasuun.
+Click here: Napsauta tästä
+to not use your user preferences when viewing this page: jos et halua käyttää omia asetuksia kun tätä sivua katsellaan
+are being ignored while viewing this page.: ei oteta huomioon tätä sivua katsellessa.
+to load your user preferences when viewing this page: jos haluat ladata henkilökohtaiset asetukset kun tätä sivua katsellaan.
+Save: Talleta
+Settings: Yleisasetukset
+Public Access: Yleinen käyttö
+Groups: Ryhmät
+NonUser Calendars: Ei-kenenkään kalenterit
+Other: Muut
+Email: Sähköposti-ilmoitukset
+colors-help: Kaikki värit määritellään koodaamalla ne heksadesimaalinumeroksi #RRGGBB-muotoon. (RR-punainen, GG-vihreä ja BB-sininen arvo (00-FF)). 
+Colors: Värit
+app-name-help: Asettaa kalenterisovelluksen "titlen" joka näkyy sivulla, kun kalenteria käytetään
+Application Name: Sovelluksen nimi
+server-url-help: Asettaa perus-URL -osoitteen kalenterisovellukselle. Tätä käytetään lähetettäessä sähköpostia tapahtuman osallistujille.
+Server URL: Palvelimen URL
+language-help: Määrittelee käytettävän kielen.
+Language: Kieli
+Your browser default language is: Selaimen oletuskieli on
+fonts-help: Määrittää käytettävät järjestelmäfontit (esim. "Arial, Helvetica")
+Fonts: Fontit
+custom-script-help: Allows entry of custom Javascript or stylesheet text that will be inserted into the HTML "head" section of every page.
+Custom script/stylesheet: Oma skripti/tyylisivu
+Yes: Kyllä
+No: Ei
+Edit: Muokkaa
+custom-header-help: Allows a custom HTML snippet to be included in the top of every page.
+Custom header: Oma ylätunniste
+custom-trailer-help: Allows a custom HTML snippet to be included at the end of every page.
+Custom trailer: Oma alatunniste
+preferred-view-help: Määrittelee oletusnäkymän (Päivä, Viikko, Kuukausi tai Vuosi).
+Preferred view: Oletusnäkymä
+Day: Päivä
+Month: Kuukausi
+Year: Vuosi
+display-weekends-help: Näytä viikonloput viikkoa katseltaessa.
+Display weekends in week view: Näytä viikonloput viikkoa katseltaessa
+yearly-shows-events-help: On the yearly view, display days that contain events in a bold font.
+#
+# << MISSING >>
+# Display days with events in bold in month and year views:
+display-desc-print-day-help: Include event descriptions in printer-friendly version of day view.
+Display description in printer day view: Näytä kuvaus päivän tulostusnäkymässä
+date-format-help: Määrittää päivän esitysmuodon.
+Date format: Päiväyksen muoto
+December: Joulukuu
+time-format-help: Määrittelee ajan esitysmuodon, <br /><i>12 tuntia</i> <br /><i>24 tuntia</i>
+Time format: Ajan esitystapa
+12 hour: 12 tuntia
+24 hour: 24 tuntia
+time-interval-help: Määrittää viikko- sekä päivänäkymien aikablokit.
+Time interval: Aikajakso
+hour: tuntia
+minutes: minuuttia
+auto-refresh-help: Päivittää näkymät automaattisesti.
+Auto-refresh calendars: Päivitä kalenterit automaattisesti
+auto-refresh-time-help: Tauko päivitysten välillä.
+Auto-refresh time: Tauko päivitysten välillä
+require-approvals-help: Jos päällä, käyttäjän on vahvistettava tapahtuma ennenkuin se näkyy kalenterissa.
+Require event approvals: Vaadi tapahtumien vahvistus
+display-unapproved-help: Määrittelee näytetäänkö hyväksymättömät tapahtumat kalenterissa. <br />Jos valittu "Kyllä", niin hyväksymättömät tapahtumat näytetään (eri värillä).<br />Jos valittu "Ei", niin tapahtumat tulee hyväksyä ennenkuin ne näkyvät kalenterissa. 
+Display unapproved: Näytä hyväksymättömät tapahtumat
+display-week-number-help: Määrittelee näytetäänkö viikonnumero (1-52) kuukausi- ja viikkonäkymässä. 
+Display week number: Näytä viikonnumero
+display-week-starts-on: Määrittelee viikon alkamispäiväksi joko sunnuntai tai maanantai. Jos maanantai valittu, niin viikonnumero lasketaan ISO-järjestelmän mukaisesti.
+Week starts on: Viikon ensimmäinen päivä
+Sunday: Sunnuntai
+Monday: Maanantai
+work-hours-help: Määrittelee päivänäkymässä esitettävät tunnit.
+Work hours: Työtunnit
+From: Alkaen
+to: ulottuen
+disable-priority-field-help: Poistaa tärkeys-kentän käytöstä.
+Disable Priority field: Poista tärkeys-kenttä käytöstä
+disable-access-field-help: Poistaa access-kentän käytöstä, jolloin näkymä on noviiseille selkeämpi
+Disable Access field: Poista access-kenttä (selkeämpi aloittelijoille)
+disable-participants-field-help: Poistaa mahdollisuuden lisätä muita henkilöitä tapahtumaan osallisiksi.
+Disable Participants field: Poista muiden henkilöiden lisäys tapahtumaan
+disable-repeating-field-help: Poistaa toistettavien tapahtumien mahdollisuuden.
+Disable Repeating field: Poista toistettavat tapahtumat käytöstä.
+popup-includes-siteextras-help: If enabled, allow custom event fields setup in the site_extras.php file will be displayed in event popups.
+Display Site Extras in popup: Näytä palvelukohtaiset lisukkeet ponnahdusikkunassa
+allow-html-description-help: If enabled, users can enter HTML in the event description field.  If not enabled, the HTML tags will be escaped so as to appear as plain text.  Warning: Enabling this feature will allow users to reference images on other websites.
+Allow HTML in Description: Salli HTML kuvauksissa
+allow-view-other-help: Määrittää, salliiko kalenteri käyttäjän tarkastella toisen käyttäjän kalenteria.
+Allow viewing other user's calendars: Salli muiden henkilöiden kalenterien tarkastelu
+allow-view-add-help: Asettaa '+'-merkin ilmestymään näkymiin, jolloin käyttäjä voi helposti lisätä uuden tapahtuman toisen(kin) käyttäjän kalenteriin.
+Include add event link in views: Lisää linkki "Lisää tapahtuma" kaikkiin näkymiin
+remember-last-login-help: Muistaa edellisen kirjauksesi ja asetuksesi.
+Remember last login: Muista edellinen kirjaus
+conflict-check-help: Tarkista tapahtumien konfliktit
+Check for event conflicts: Tarkista tapahtumien konfliktit
+conflict-months-help: Kuinka monen kuukauden päähän tarkistetaan konfliktit.
+Conflict checking months: Konfliktit, montako kuukautta tarkistetaan
+conflict-check-override-help: Salli konfliktien ylikirjoitus.
+Allow users to override conflicts: Salli konfliktien ylikirjoitus
+limit-appts-help: Asettaa maksimiarvon päivän tapahtumien lukumäärälle.
+Limit number of timed events per day: Salli max # tapahtumaa / päivä
+limit-appts-number-help: Asettaa maksimimäärän päivän ajoitetuille tapahtumille päivässä
+Maximum timed events per day: Salli max # ajoitettua tapahtumaa / päivä
+#
+# << MISSING >>
+# timed-evt-len-help:
+# English text: Specifies input method for determining the length of a timed event.
+#
+Specify timed event length by: Määritä tapahtuman kesto ilmoittamalla
+Duration: Kesto
+End Time: Päättymisaika
+Plugins: Lisäpalikat
+plugins-enabled-help: Ota 'pluginit' käyttöön
+Enable Plugins: Ota lisäpalikat käyttöön
+plugins-sort-key-help: Määrittää lajittelu-keyn lisäpalikalle
+Plugin: Lisäpalikka
+allow-public-access-help: Sallii tapahtuman näkymisen kaikille
+Allow public access: Salli yleinen käyttö
+#
+# << MISSING >>
+# public-access-default-visible:
+# English text: Events from the public calendar will automatically appear on all users' calendars
+#
+#
+# << MISSING >>
+# Public access visible by default:
+#
+# << MISSING >>
+# public-access-default-selected:
+# English text: When adding a new event, the public user will be selected by default as a participant.
+#
+#
+# << MISSING >>
+# Public access is default participant:
+public-access-view-others-help: Määrittää, voiko käyttäjä katsella toisen henkilön tapahtumia.
+Public access can view other users: Salli tapahtuman tarkastelu kaikille
+public-access-can-add-help: Sallii yleisten käyttäjien lisätä tapahtumia, mutta kalenteri ei näytä tapahtumaa, ennenkuin pääkäyttäjä on vahvistanut sen.
+Public access can add events: Yleiset käyttäjät voivat lisätä tapahtumia
+public-access-add-requires-approval-help: Yleisten käyttäjien tapahtumalisäykset vaativat vahvistuksen
+Public access new events require approval: Yleisten käyttäjien uudet tapahtumat vaativat vahvistuksen
+#
+# << MISSING >>
+# public-access-sees-participants-help:
+# English text: If enabled, users accessing the calendar from the public account will be able to see event participants if they view details of an event.
+#
+Public access can view participants: Yleiset käyttäjät näkevät osallistujat
+groups-enabled-help: Sallii ryhmien käytön.
+Groups enabled: Ryhmät käytössä
+user-sees-his-group-help: Käyttäjä näkee vain käyttäjät omissa ryhmissään.
+User sees only his groups: Vain käyttäjät omissa ryhmissä
+nonuser-enabled-help: Jos käytössä, pääkäyttäjä voi lisätä kalentereita, jotka eivät kuulu kenellekään käyttäjälle
+Nonuser enabled: Ei-kenenkään kalenterit käytössä
+nonuser-list-help: Where to display the nonuser calendars in the participant list
+Nonuser list: Näytä osallistujaluettelossa
+Top: Ylhäällä
+Bottom: Alhaalla
+reports-enabled-help: If enabled, users will see a "Reports" section at the bottom of each page and will be allowed to create custom reports.  Additionally, admin users can create global reports that will appear at the bottom of all users' pages.
+Reports enabled: Raportit käytössä
+subscriptions-enabled-help: Specifies if remote users can subscribe to a WebCalendar user's calendar, allowing them to see the WebCalendar user's events in their iCal-enabled application (such as Apple's iCal or Mozilla Calendar).
+Allow remote subscriptions: Salli ulkopuoliset tilaukset
+categories-enabled-help: Salli tapahtumaluokkien käyttö.
+Categories enabled: Tapahtumaluokat käytössä
+allow-external-users-help: Määrittää salliiko kalenteri sellaisen henkilön lisäämisen tapahtumaan, joka ei käytä kalenteria.
+Allow external users: Salli ulkopuoliset käyttäjät lisättäväksi tapahtumiin
+external-can-receive-notification-help: Sallii tiedotteen lähetyksen kalenterin ulkopuolisille henkilöille.
+External users can receive email notifications: Ulkopuoliset käyttäjät saavat tiedotteita tapahtumasta
+external-can-receive-reminder-help: Ulkopuoliset käyttäjät saavat sähköpostimuistutuksia tapahtumista.
+External users can receive email reminders: Ulkopuoliset käyttäjät saavat muistutuksia
+email-enabled-help: Salli sähköpostitiedotteiden lähetys
+Email enabled: Sähköpostitiedotteet käytössä
+email-default-sender: Lähettäjä sähköpostiviesteissä
+Default sender address: Lähettäjän oletusosoite
+Default user settings: Käyttäjän oletusasetukset
+email-event-reminders-help: Määrittelee lähetetäänkö tapahtumamuistutuksia vai ei
+Event reminders: Tapahtumamuistutukset
+email-event-added: Määrittelee lähetetäänkö sähköpostilla tiedote lisätyistä kalenterimerkinnöistä.
+Events added to my calendar: Kalenterimerkintöjä lisätty
+email-event-updated: Määrittelee lähetetäänkö sähköpostilla tiedote muutetuista kalenterimerkinnöistä.
+Events updated on my calendar: Kalenterimerkintöjä muutettu
+email-event-deleted: Määrittelee lähetetäänkö sähköpostilla tiedote poistetuista kalenterimerkinnöistä.
+Events removed from my calendar: Kalenterimerkintöjä poistettu
+email-event-rejected: Määrittelee lähetetäänkö sähköpostilla tiedote ryhmän jäsenten hylkäämistä kalenterimerkinnöistä.
+Event rejected by participant: Ryhmän jäsen hylkäsi tapahtuman
+Allow user to customize colors: Salli käyttäjien muokata värejä
+#
+# << MISSING >>
+# Enable gradient images for background colors:
+#
+# << MISSING >>
+# Not available:
+Document background: Sivun pohja
+Select: Valitse
+Document title: Sivun otsikko
+Document text: Sivun teksti
+Table grid color: Sivun taulukoiden viivat
+Table header background: Taulukon otsikon tausta
+Table header text: Taulukon otsikko
+Table cell background: Taulukon tausta
+Table cell background for current day: Kuluvan päivän tausta
+Table cell background for weekends: Taulukon solut viikonlopuille
+Event popup background: Tapahtuma-popupin tausta
+Event popup text: Tapahtuma-popupin teksti
+
+
+###############################################
+# Page: activity_log.php
+#
+Activity Log: Käyttökirjanpito
+User: Käyttäjä
+Calendar: Kalenteri
+Date: Pvm
+Time: Klo
+Event: Tapahtuma
+Action: Toiminto
+Event created: Tapahtuma luotu
+Event approved: Tapahtuma hyväksytty
+Event rejected: Tapahtuma hylätty
+Event updated: Tapahtuma päivitetty
+Event deleted: Tapahtuma poistettu
+Notification sent: Tiedote lähetetty
+Reminder sent: Muistuttaja lähetetty
+Database error: Tietokantavirhe
+#
+# << MISSING >>
+# Events:
+
+
+###############################################
+# Page: add_entry.php
+#
+Invalid entry id: Väärä tunnus
+This is a private event and may not be added to your calendar.: Tämä on henkilökohtainen merkintä, eikä sitä voi kopioida kalenteriisi.
+Error adding event: Virhe merkintää lisättäessä
+
+
+###############################################
+# Page: admin_handler.php
+#
+Error: Virhe
+The following error occurred: Tapahtui virhe
+
+
+###############################################
+# Page: approve_entry.php
+#
+Error approving event: Merkintää ei hyväksytty
+
+
+###############################################
+# Page: category.php
+#
+Categories: Tapahtumaluokat
+Add: Lisää
+Category Name: Tapahtumaluokan nimi
+Global: Globaali
+Delete: Poista
+Are you sure you want to delete this entry?: Haluatko varmasti poistaa tämän merkinnän?
+Add New Category: Lisää uusi tapahtumaluokka
+
+
+###############################################
+# Page: del_entry.php
+#
+Hello: Hei
+An appointment has been canceled for you by: Kalenterimerkintäsi poisti
+The subject was: Otsikko
+Notification: Muistutus
+
+
+###############################################
+# Page: edit_layer.php
+#
+Edit Layer: Muokattava taso
+Add Layer: Lisää taso
+Source: Lähde
+Color: Väri
+Duplicates: Päällekkäisiä
+Show layer events that are the same as your own: Näytä kaikki tason tapahtumat, jotka ovat samoja kuin omat
+Delete layer: Poista taso
+Are you sure you want to delete this layer?: Haluatko poistaa tämän tason?
+
+
+###############################################
+# Page: edit_layer_handler.php
+#
+You cannot create a layer for yourself: Et voi luoda tasoa itsellesi
+You can only create one layer for each user: Voit luoda vain yhden tason käyttäjää kohti
+
+
+###############################################
+# Page: edit_user_handler.php
+#
+Deleting users not supported: Käyttäjien poisto ei ole tuettuna järjestelmässä
+The passwords were not identical: Salasanat eivät vastaa toisiaan
+You have not entered a password: salasanaa ei ole syötetty
+#
+# << MISSING >>
+# Changes successfully saved:
+
+
+###############################################
+# Page: subscription.php
+#
+#
+# << MISSING >>
+# Publishing Disabled (Admin):
+#
+# << MISSING >>
+# Publishing Disabled (User):
+Unnamed Event: Nimetön merkintä
+
+
+###############################################
+# Page: export.php
+#
+Export format: Tallennusmuoto
+Palm Pilot: Palm Pilot
+#
+# << MISSING >>
+# Include all layers:
+Export all dates: Talleta kaikki päiväysmerkinnät
+Start date: Alkupäivä
+End date: Lopetustuspäivä
+Modified since: Viimeksi muokattu
+Export: Talleta
+
+
+###############################################
+# Page: export_handler.php
+#
+export format not defined or incorrect: vientimuotoa ei määritelty tai se ei kelpaa
+
+
+###############################################
+# Page: group_edit.php
+#
+Unnamed Group: Nimetön ryhmä
+Add Group: Lisää ryhmä
+Edit Group: Muokkaa ryhmää
+Group name: Ryhmän nimi
+Updated: Päivittänyt
+Created by: Luonut
+Users: Käyttäjät
+
+
+###############################################
+# Page: group_edit_handler.php
+#
+You must specify a group name: Sinun täytyy määrittää ryhmälle nimi
+
+
+###############################################
+# Page: groups.php
+#
+Add New Group: Lisää uusi ryhmä
+
+
+###############################################
+# Page: help_bug.php
+#
+Report Bug: Ilmoita bugista
+
+
+###############################################
+# Page: help_edit_entry.php
+#
+Adding/Editing Calendar Entries: Lisää/Muuta kalenterimerkintöjä
+Brief Description: Selite
+brief-description-help: Kalenterimerkinnän otsikko (noin 20 merkkiä). Näytetään kalenteritaulukossa.
+Full Description: Selitys
+full-description-help: Sisältää tapahtuman tiedot. Nämä näytetään kun käyttäjä katsoo kalenterimerkinnän tietoja.
+date-help: Määrittelee tapahtuman päivämäärän.
+time-help: Määrittelee tapahtuman ajan. <br /><i>(Voidaan jättää tyhjäksi)</i>
+duration-help: Määrittelee tapahtuman keston (tunteina ja minuutteina). <br /><i>(Voidaan jättää tyhjäksi)</i>
+#
+# << MISSING >>
+# end-time-help:
+# English text: Specifies the time the event is expected to end.
+#
+Priority: Tärkeys
+priority-help: Määrittelee tapahtuman tärkeyden. Tärkeimmät näytetään lihavoituna.
+Access: Saantioikeus
+access-help: Määrittelee tapahtuman näkyvyyden.<br /> <i>Julkinen</i>: Kaikki näkevät kaikki tapahtuman tiedot.  <br /><i>Luottamuksellinen</i>: Muut näkevät vain tapahtuman päivämäärän ja ajan, mutta ei muita tietoja.
+Participants: Ryhmän jäsenet
+participants-help: Luetteloi tapahtuman osanottajat.
+Repeat Type: Toiston tyyppi
+repeat-type-help: Valitaan kuinka usein tapahtuma toistetaan.<i>Kuukausittain (viikonpäivän mukaan)</i> mahdollistaa merkinnän toistamisen
+Repeat End Date: Toiston lopetuspäivä
+repeat-end-date-help: Määrittelee päivämäärän mihin asti tapahtumaa toistetaan.
+Repeat Day: Toista viikonpäivittäin
+repeat-day-help: Määrittelee viikonpäivä, joina tapahtumaa toistetaan. Käytettävissä vain kun <i>Toistotyypiksi</i> on asetettu <i>Viikottain</i>.
+Frequency: Toistuvuus
+repeat-frequency-help: Määrittelee tapahtuman toistotiheyden. Oletusarvo 1 tarkoittaa toistoa joka kerta, 2 joka toinen kerta (esim. joka toinen viikko tai kuukausi), jne.
+
+
+###############################################
+# Page: help_index.php
+#
+Help Index: Ohjehakemisto
+Layers: Tasoja
+Import: Tuo
+Preferences: Asetukset
+
+
+###############################################
+# Page: help_layers.php
+#
+Layers are useful for displaying other users' events in your own calendar.  You can specifiy the user and the color the events will be displayed in.: Kerrokset ovat näppäriä toisten käyttäjien tapahtumien esittämiseen kalenterissasi. Voit määritellä käyttäjän ja esittämiseen käytettävän värin.
+Add/Edit/Delete: Lisää/Muokkaa/Poista
+Clicking the Edit Layers link in the admin section at the bottom of the page will allow you to add/edit/delete layers.: Painamalla "Muokkaa tasoja"-painiketta pääkäyttäjä-osiossa sivun lopussa antaa sinulle mahdollisuuden lisätä/muokata/poistaa tasoja.
+Specifies the user that you would like to see displayed in your calendar.: Määrittää käyttäjän jonka haluat nähdä omassa kalenterissasi.
+The text color of the new layer that will be displayed in your calendar.: Uuden tason tekstin väri
+If checked, events that are duplicates of your events will be shown.: Jos valittuna, näyttää myös ne tapahtumat jotka ovat duplikaatteja omistasi.
+Disabling: Poistetaan käytöstä
+Press the Disable Layers link in the admin section at the bottom of the page to turn off layers.: Paina 'Poistetaan käytöstä'-linkkiä pääkäyttäjä-osassa sivun alareunassa asettaaksesi tasot pois käytöstä
+Enabling: Otetaan käyttöön
+Press the Enable Layers link in the admin section at the bottom of the page to turn on layers.: Paina 'Otetaan käyttöön'-linkkiä pääkäyttäjä-kohdassa sivun alaosassa asettaaksesi tasot käyttöön
+
+
+###############################################
+# Page: help_admin.php
+#
+Display days with events in bold in year view: Näytä päivät, joilla on tapahtumia, lihavoituina vuosinäkymässä
+Nonuser: Ei-kenenkään kalenterit
+Reports: Raportit
+Subscribe/Publish: Tilaa/Julkaise
+
+
+###############################################
+# Page: adminhome.php
+#
+Account: Käyttäjän tiedot
+Assistants: Avustajat
+Views: Näkymät
+Delete Events: Poistetut tapahtumat
+Public Preferences: Julkiset asetukset
+Unapproved Public Events: Hyväksymättömiä julkisia tapahtumia
+Administrative Tools: Hallintatyökalut
+
+
+###############################################
+# Page: month.php
+#
+Sun: Su
+Mon: Ma
+Tue: Ti
+Wed: Ke
+Thu: To
+Fri: Pe
+Sat: La
+
+
+###############################################
+# Page: pref.php
+#
+Save Preferences: Talleta asetukset
+to modify the preferences for the Public Access calendar: muokataksesi yleisen kalenterin asetuksia
+tz-help: Määrittää aikavyöhykkeen
+Timezone Offset: Aikaero
+Add N hours to: Lisää N tuntia
+Subtract N hours from: vähennä N tuntia
+same as: sama kuin
+server time: palvelimen aika
+Default Category: Oletusluokka
+All: Kaikki
+When I am the boss: Jos olen esimies
+Email me event notification: Lähetä muistutus sähköpostilla
+I want to approve events: Minä annan hyväksynnät tapahtumille
+allow-remote-subscriptions-help: Specifies if remote users can subscribe to your calendar, allowing them to see your events in a iCal-enabled application (such as Apple's iCal or Mozilla Calendar).
+remote-subscriptions-url-help: Displays the URL remote users should use to subscribe to your calendar.
+URL: URL
+
+
+###############################################
+# Page: layers.php
+#
+Layers are currently: Tasot ovat
+Enabled: Käytössä
+Disable Layers: Poista tasot käytöstä
+Disabled: Poistettu käytöstä
+Enable Layers: Ota tasot käyttöön
+to modify the layers settings for the: muokataksesi tason asetuksia tasolle
+#
+# << MISSING >>
+# calendar:
+Add layer: Lisättävä taso
+Layer: Taso
+Edit layer: Muokkaa tasoa
+
+
+###############################################
+# Page: list_unapproved.php
+#
+View this entry: Näytä merkintä
+Approve/Confirm: Hyväksy/Vahvista
+Approve this entry?: Hyväksytäänkö merkintä?
+Reject: Hylkää
+Reject this entry?: Hylätäänkö merkintä?
+No unapproved events for: Ei hyväksymättömiä tapahtumia henkilölle
+Unapproved Events: Hyväksymättömät tapahtumat
+
+
+###############################################
+# Page: view_entry.php
+#
+Low: Vähäinen
+Medium: Normaali
+High: Tärkeä
+every: joka
+2nd: 2.
+3rd: 3.
+4th: 4.
+5th: 5.
+1st: 1.
+last: viimeinen
+by date: päivän mukaan
+Confidential: Luottamuksellinen
+Description: Kuvaus
+Status: Tila
+Waiting for approval: Odottaa hyväksymistä
+Deleted: Poistettu
+Rejected: Hylätty
+All day event: Koko päivän kestävä tapahtuma
+Public: Julkinen
+Category: Tapahtumaluokka
+days: päivää
+#
+# << MISSING >>
+# day:
+hours: tuntia
+#
+# << MISSING >>
+# minute:
+before event: ennen
+External User: Ulkoinen käyttäjä
+Approve/Confirm entry: Hyväksy/Vahvista merkintä
+Reject entry: Hylkää merkintä
+Set category: Aseta luokka
+Edit repeating entry for all dates: Muokkaa toistuvaa entryä kaikille päiville
+Edit entry for this date: Muokkaa tämän päivän entryä
+Delete repeating event for all dates: Poista toistuvat tapahtumat kaikilta päiviltä
+This will delete this entry for all users.: Tämä merkintä poistetaan kaikilta käyttäjiltä.
+Delete entry only for this date: Poista vain tämän päivän entryt
+Edit entry: Muokkaa merkintää
+Delete entry: Poista merkintä
+#
+# << MISSING >>
+# Copy entry:
+This will delete the entry from your calendar.: Poistetaan merkintä kalenteristasi.
+Add to My Calendar: Lisää kalenteriin
+Do you want to add this entry to your calendar?: Haluatko lisätä tämän merkinnän kalenteriisi?
+This will add the entry to your calendar.: Lisätään merkintä kalenteriisi.
+Email all participants: Lähetä sähköpostia kaikille osallistujille
+Show activity log: Näytä aktiviteettiloki
+Hide activity log: Piilota aktiviteettiloki
+Export this entry to: Lähetä tämä tapahtuma
+
+
+###############################################
+# Page: view_v.php
+#
+#
+# << MISSING >>
+# No users for this view:
+
+
+###############################################
+# Page: reject_entry.php
+#
+An appointment has been rejected by: Kalenterimerkintä on hylätty
+The description is: Puuttuva kuvaus on
+Title: WebCalendar
+
+
+###############################################
+# Page: search.php
+#
+Search: Etsi
+Keywords: Hakusanat
+Advanced Search: Laajennettu haku
+
+
+###############################################
+# Page: search_handler.php
+#
+You must enter one or more search keywords: Syötä yksi tai useampi hakusana
+Search Results: Haun tulokset
+match found: kohde löytyi
+matches found: kohdetta löytyi
+No matches found: Kohteita ei löytynyt
+
+
+###############################################
+# Page: select_user.php
+#
+View Another User's Calendar: Näytä toisen käyttäjän kalenteri
+Go: Mene
+
+
+###############################################
+# Page: users.php
+#
+Add New User: Lisää uusi käyttäjä
+denotes administrative user: tarvitaan pääkäyttäjän oikeudet
+
+
+###############################################
+# Page: usersel.php
+#
+None: Ei toistuva
+Reset: Resetoi
+Remove: Poista
+Ok: Ok
+Cancel: Kumoa
+
+
+###############################################
+# Page: import.php
+#
+Import format: Tuontitiedon muoto
+Exclude private records: Ei yksityisiä merkintöjä
+Overwrite Prior Import: Tuo ylikirjoittaen
+
+
+###############################################
+# Page: login.php
+#
+Invalid login: Kirjoittauminen järjestelmään ei onnistunut
+You must enter a login and password: Syötä käyttäjätunnus ja salasana
+Username: Käyttäjätunnus
+Password: Salasana
+Save login via cookies so I don't have to login next time: Kirjaa minut automaattisesti sisään
+Login: Kirjoittaudu
+Access public calendar: Salli yleinen kalenteri
+cookies-note: <b>Huom:</b> Tätä sovellusta käytettäessä (joulu)piparien pitää olla käytössä.
+
+
+###############################################
+# Page: views.php
+#
+Add New View: Lisää uusi näkymä
+
+
+###############################################
+# Page: views_edit.php
+#
+Unnamed View: Nimetön näkymä
+Add View: Lisää näkymä
+Edit View: Muokkaa näkymää
+View Name: Näkymän nimi
+View Type: Näkymän tyyppi
+Week (Users horizontal): Viikko (käyttäjät vaaka-akselilla)
+Week (Users vertical): Viikko (käyttäjät pystyakselilla)
+Week (Timebar): Viikko (aikajana)
+#
+# << MISSING >>
+# Month (Timebar):
+Month (side by side): Kuukausi (rinnakkain)
+Month (on same calendar): Kuukausi (samassa kalenterissa)
+#
+# << MISSING >>
+# preview:
+#
+# << MISSING >>
+# Selected:
+
+
+###############################################
+# Page: nonusers.php
+#
+NONUSER_PREFIX not set: NONUSER_PREFIX ei määritetty tiedostossa config.php.
+Add New NonUser Calendar: Lisää uusi ulkoinen käyttäjä
+
+
+###############################################
+# Page: nonusers_handler.php
+#
+Calendar ID: Kalenterin nimi
+#
+# << MISSING >>
+# word characters only:
+# English text: can only contain word characters (a-zA-Z_0-9)
+#
+
+
+###############################################
+# Page: help_pref.php
+#
+default-category-help: Määrittää tapahtumaluokan johon uusi tapahtuma lisätään
+
+
+###############################################
+# Page: report.php
+#
+Untimed event: Ajoittamaton tapahtuma
+Private: Yksityinen
+Approved: Hyväksytty
+Unknown: Ei tiedossa
+to manage reports for the Public Access calendar: hallinnoidaksesi Julkisen kalenterin raportteja
+Add new report: Lisää uusi raportti
+Invalid report id: Raportti-id ei kelpaa
+Manage Reports: Hallinnoi raportteja
+
+
+###############################################
+# Page: views_edit_handler.php
+#
+You must specify a view name: Sinun täytyy määrittää näkymän nimi
+
+
+###############################################
+# Page: week_details.php
+#
+New Entry: Uusi merkitä
+am: am
+pm: pm
+
+
+###############################################
+# Page: import_handler.php
+#
+Import Results: Tuonnin tulokset
+Events successfully imported: Tuodut tapahtumat
+Events from prior import marked as deleted: Tuonnissa poistetut tapahtumat
+Conflicting events: Päällekkäiset tapahtumat
+Errors: Virheet
+There was an error parsing the import file or no events were returned: Virhe luettaessa tuontitiedostoa tai ei tapahtumia
+The import file contained no data: Tuontitiedostossa ei ollut tapahtumia
+The following conflicts with the suggested time: Ehdotettuna aikana on seuraavat muut merkinnät
+Scheduling Conflict: Aikataulussa ristiriita
+conflicts with the following existing calendar entries: on ristiriidassa seuraavien merkintöjen kanssa
+Event Imported: Tapahtuma tuotu
+
+
+###############################################
+# Page: edit_entry.php
+#
+Edit Entry: Muokkaa merkintää
+Add Entry: Lisää merkintä
+Details: Tiedot
+Scheduling: Aikataulu
+Repeat: Toistuvuus
+category-help: Määrittää tapahtumalle tapahtumaluokan.
+Timed event: Ajoitettu tapahtuma
+#
+# << MISSING >>
+# Availability:
+external-participants-help: Määrittää listan ulkoisista tapahtuman osallistujista.
+External Participants: Ulkoisia osallistujia
+Daily: Päivittäin
+Weekly: Viikottain
+Monthly: Kuukausittainen
+by day: viikonpäivän mukaan
+by day (from end): viikonpäivän mukaan (käänteisesti)
+Yearly: Vuosittain
+Use end date: Käytä lopetuspäivää
+Tuesday: Tiistai
+Wednesday: Keskiviikko
+Thursday: Torstai
+Friday: Perjantai
+Saturday: Lauantai
+You are not authorized to edit this entry: Sinulla ei ole oikeutta muokata tätä merkintää
+
+
+###############################################
+# Page: edit_report.php
+#
+Tomorrow: Huomenna
+Today: Tänään
+Yesterday: Eilen
+Day before yesterday: Toissapäivänä
+Next week: Ensi viikolla
+This week: Tällä viikolla
+Last week: Viime viikolla
+Week before last: Toissaviikolla
+Next week and week after: Ensi- ja sitä seuraava viikko
+This week and next week: Tämä- ja ensiviikko
+Last week and this week: Tämä ja edellinen viikko
+Last two weeks: Viimeiset kaksi viikkoa
+Next month: Ensi kuussa
+This month: Tässä kuussa
+Last month: Viimekuussa
+Month before last: Toissakuussa
+Next year: Seuraava vuosi
+This year: Tämä vuosi
+Last year: Viime vuosi
+Year before last: Toissavuosi
+Unnamed Report: Nimetön raportti
+Add Report: Lisää raportti
+Edit Report: Muokkaa raporttia
+Report name: Raportin nimi
+Current User: Käyttäjä
+Include link in trailer: Lisää linkki alatunnisteeseen
+Include standard header/trailer: Lisää vakio ylä- ja alatunniste
+Date range: Päivämäärärajaus
+Include previous/next links: Lisää edellinen/seuraava -linkit
+Include empty dates: Näytä tyhjät päivät
+Template variables: Sivupohjan muuttujat
+Page template: Sivupohja
+Day template: Päiväraportin pohja
+Event template: Tapahtumaraportin pohja
+Are you sure you want to delete this report?: Haluatko varmasti poistaa tämän raportin?
+
+
+###############################################
+# Page: assistant_edit.php
+#
+#
+# << MISSING >>
+# Your assistants:
+
+
+###############################################
+# Page: purge.php
+#
+#
+# << MISSING >>
+# Preview:
+Purging events for: Tuhotaan tapahtumia kohteesta
+Finished: Valmis
+Check box to delete <b>ALL</b> events for a user: Laita rasti ruutuun poistaaksesi <b>KAIKKI</b> käyttäjän tapahtumat
+Delete all events before: Poista tapahtumat ennen
+#
+# << MISSING >>
+# Preview delete:
+Are you sure you want to delete events for: Haluatko varmasti poistaa kaikki tapahtumat käyttäjältä
+#
+# << MISSING >>
+# Records deleted from:
+
+
+###############################################
+# Page: set_entry_cat.php
+#
+You have not added any categories: Et ole lisännyt tapahtumaluokkia
+Set Category: Aseta luokka
+
+
+###############################################
+# Page: help_import.php
+#
+Palm Desktop: Palm PDA
+This form will allow you to import entries from the Palm Desktop Datebook.: Tällä lomakkeella voit tuoda tapahtumamerkintöjä Palm PDA:stasi.
+It should be located in your Palm directory in <tt>datebook/datebook.dat</tt> in a subdirectory named by your username.: Sen pitäisi olla Palmissasi hakemistossa <tt>datebook/datebook.dat</tt> käyttäjätunnuksesi mukaisesti nimetyssä alihakemistossa.
+The following entries will not be imported: Seuraavia tapahtumia ei tuoda
+Entries older than the current date: Kuluvaa päivää vanhemmat tapahtumat
+Entries created in the Palm Desktop that have not been HotSync'd: Palmissa luodut tapahtumat, joita ei ole synkronoitu HotSync:llä
+Anything imported from Palm will be overwritten during the next import (unless the event date has passed).: Kaikki Palmista tuodut tapahtumat pyyhkiytyvät seuraavassa tuonnissa (ellei tapahtuma ole jo mennyt ohi).
+Therefore, updates should be made in the Palm Desktop.: Siksi päivitykset tulisi tehdä Palmin kautta.
+vCal: vCal
+This form will import vCalendar (.vcs) 1.0 events: Tuo vCalendar (.vcs) 1.0 tällä lomakkeella
+The following formats have been tested: Seuraavat tiedostomuodot on testattu
+Palm Desktop 4: Palm Desktop 4
+Lotus Organizer 6: Lotus Organizer 6
+Microsoft Outlook 2002: Microsoft Outlook 2002
+iCalendar: iCalendar
+This form will import iCalendar (.ics) events: Tuo iCalendar (.ics) tällä lomakkeella
+Enabling <b>Overwrite Prior Import</b> will cause events imported previously that used the same UID as an event from the new import file to be marked as deleted.  This should allow an updated iCalendar file to be imported without creating duplicates.: Jos valitset <b>Tuo ylikirjoittaen</b>, poistetaan samalla UID:lla olevat tapahtumat ennen tuontia. Näin voit tuoda päivitetyn iCalendar -tiedoston ilman, että samasta tapahtumasta syntyy useita kopioita.
+
+
+###############################################
+# Page: edit_report_handler.php
+#
+Variable N not found: Muuttujaa N ei löydy
+
+
+###############################################
+# Page: edit_entry_handler.php
+#
+A new appointment has been made for you by: Sinulle on lisätty uusi kalenterimerkintä - 
+An appointment has been updated by: Kalenterimerkintää on muutettu -
+The subject is: Otsikko
+Please look on: Tarkista
+to accept or reject this appointment: ja hyväksy tai hylkää merkintä
+to view this appointment: tarkista kalenterimerkintä
+Your suggested time of: Ehdottamasi aika
+
+
+###############################################
+# Page: edit_user.php
+#
+Edit User: Muokkaa käyttäjäntietoja
+Add User: Lisää käyttäjä
+First Name: Etunimi
+Last Name: Sukunimi
+E-mail address: Sähköposti
+again: uudestaan
+Disabled for demo: Toiminto ei käytössä (demoversio)
+#
+# << MISSING >>
+# Are you sure you want to delete this user?:
+Change Password: Vaihda salasana
+New Password: Uusi salasana
+Set Password: Aseta salasana
+
+
+###############################################
+# Page: edit_template.php
+#
+Edit Custom Script/Stylesheet: Muokkaa oma skripti/tyylisivu
+Edit Custom Header: Muokkaa oma otsake
+Edit Custom Trailer: Muokkaa oma alatunniste
+
+
+###############################################
+# Page: includes/trailer.php
+#
+Go to: Siirry
+My Calendar: Kalenteri
+Back to My Calendar: Palaa kalenterisivulle
+Another User's Calendar: Toisen käyttäjän kalenteri
+Add New Entry: Lisää uusi merkintä
+Logout: Lopeta
+Manage calendar of: Hallitse henkilön kalenteria
+
+
+###############################################
+# Page: includes/user.php
+#
+#
+# << MISSING >>
+# incorrect password:
+#
+# << MISSING >>
+# no such user:
+Invalid user login: Väärä käyttäjänimi
+
+
+###############################################
+# Page: includes/site_extras.php
+#
+Send Reminder: Lähetä muistutus
+
+
+###############################################
+# Page: includes/config.php
+#
+#
+# << MISSING >>
+# English:
+#
+# << MISSING >>
+# Basque:
+#
+# << MISSING >>
+# Bulgarian:
+#
+# << MISSING >>
+# Catalan:
+#
+# << MISSING >>
+# Chinese (Traditonal/Big5):
+#
+# << MISSING >>
+# Chinese (Simplified/GB2312):
+#
+# << MISSING >>
+# Czech:
+#
+# << MISSING >>
+# Danish:
+#
+# << MISSING >>
+# Dutch:
+#
+# << MISSING >>
+# Estonian:
+#
+# << MISSING >>
+# Finnish:
+#
+# << MISSING >>
+# French:
+#
+# << MISSING >>
+# Galician:
+#
+# << MISSING >>
+# German:
+#
+# << MISSING >>
+# Holo (Taiwanese):
+#
+# << MISSING >>
+# Hungarian:
+#
+# << MISSING >>
+# Icelandic:
+#
+# << MISSING >>
+# Italian:
+#
+# << MISSING >>
+# Japanese:
+#
+# << MISSING >>
+# Korean:
+#
+# << MISSING >>
+# Norwegian:
+#
+# << MISSING >>
+# Polish:
+#
+# << MISSING >>
+# Portuguese:
+#
+# << MISSING >>
+# Portuguese/Brazil:
+#
+# << MISSING >>
+# Romanian:
+#
+# << MISSING >>
+# Russian:
+#
+# << MISSING >>
+# Spanish:
+#
+# << MISSING >>
+# Swedish:
+#
+# << MISSING >>
+# Turkish:
+
+
+###############################################
+# Page: includes/functions.php
+#
+This event is confidential: Luottamuksellinen merkintä
+exceeds limit of XXX events per day: ylittää sallitun tapahtumien määrän päivässä
+You have XXX unapproved events: Sinulla on XXX kuittaamatonta tapahtumaa
+January: Tammikuu
+February: Helmikuu
+March: Maaliskuu
+April: Huhtikuu
+May_: Toukokuu
+June: Kesäkuu
+July: Heinäkuu
+August: Elokuu
+September: Syyskuu
+October: Lokakuu
+November: Marraskuu
+Jan: Tammi
+Feb: Helmi
+Mar: Maalis
+Apr: Huhti
+May: Touko
+Jun: Kesä
+Jul: Heinä
+Aug: Elo
+Sep: Syys
+Oct: Loka
+Nov: Marras
+Dec: Joulu
+#
+# << MISSING >>
+# All Attendees:
+#
+# << MISSING >>
+# Busy:
+#
+# << MISSING >>
+# Tentative:
+
+
+###############################################
+# Page: includes/js/admin.php
+#
+Server URL is required: Palvelimien URL on pakollinen
+Server URL must end with '/': Palvelimen URL täytyy päättyä merkkiin '/'
+#
+# << MISSING >>
+# Invalid work hours:
+Invalid color for document background: Taustaväri on virheellinen
+Invalid color for document title: Otsikon väri on virheellinen
+Invalid color for table cell background: Ruudukon taustaväri on virheellinen
+Invalid color for table grid: Taulukon ruutuviivojen väri on virheellinen
+Invalid color for table header background: Otsikon taustaväri on virheellinen
+Invalid color for table text background: Tekstin taustaväri on virheellinen
+Invalid color for event popup background: Popup-ikkunan taustaväri on virheellinen
+Invalid color for event popup text: Popup-ikkunan tekstin väri on virheellinen
+Invalid color for table cell background for today: Kuluvan päivän taustaväri on virheellinen
+Color format should be '#RRGGBB': Värikoodin tulee olla muotoa '#RRGGBB'
+
+
+###############################################
+# Page: includes/js/edit_entry.php
+#
+You have not entered a Brief Description: Selite puuttuu
+You have not entered a valid time of day: Kellonaika puuttuu
+The time you have entered begins before your preferred work hours.  Is this correct?: Alkuaika on ennen normaalin työajan alkua. Onko se oikein?
+#
+# << MISSING >>
+# Please add a participant:
+
+
+###############################################
+# Page: includes/js/edit_layer.php
+#
+Invalid color: Virheellinen värikoodi
+
+
+###############################################
+# Page: includes/js/availability.php
+#
+#
+# << MISSING >>
+# Change the date and time of this entry?:
+
+
+###############################################
+# Page: tools/send_reminders.php
+#
+This is a reminder for the event detailed below.: Muistutus alla esitetystä tapahtumasta.
+Reminder: Muistutus

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/French.txt
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/French.txt	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/French.txt	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,1085 @@
+# Use this as a starting point to translate this application into
+# another language.  The format is "English text: translated text"
+# There cannot be a ":" in the English text.
+# Translated by: Yves Moenner <yves.moenner at mailcity.com> 
+# Checked by: Romuald Texier <romualdt at free.fr>
+# Mise à jour : Gérard Delafond
+# Update by : Luc Capronnier, Wilfrid Hubert 
+# Mise à jour : Mario Dragone <mario.dragone at reims.iufm.fr>
+# Update by : erational <http://www.erational.org> 
+# Mise à jour : Ivan Machetto
+# Title is what will appear in the title bar for pages
+#
+# Translation last updated on 05-26-2005
+
+
+###############################################
+# Specify a charset (will be sent within meta tag for each page)
+#
+charset: iso-8859-1
+
+
+
+###############################################
+# Page: activity_log.php
+#
+Activity Log: Journal de suivi
+Admin: Administration
+User: Utilisateur
+Calendar: Agenda
+Date: Date
+Time: Heure
+Event: événement
+Action: Action
+Event created: événement créé
+Event approved: événement approuvé
+Event rejected: événement rejeté
+Event updated: événement mis à jour
+Event deleted: événement supprimé 
+Notification sent: Notification envoyée
+Reminder sent: Rappel envoyé
+Database error: Erreur de la base de données
+Previous: Précédent
+#
+Events: événements
+Next: Suivant
+
+
+###############################################
+# Page: add_entry.php
+#
+Invalid entry id: Id non valable
+This is a private event and may not be added to your calendar.: Ceci est un événement privé et ne peut pas être ajouté à votre agenda.
+Error adding event: Erreur en ajoutant l'événement
+
+
+###############################################
+# Page: admin_handler.php
+#
+You are not authorized: Vous n'êtes pas autorisé(e)
+Error: Erreur
+The following error occurred: L'erreur suivante est survenue
+
+
+###############################################
+# Page: adminhome.php
+#
+System Settings: Réglages du système
+Preferences: Préférences
+Users: Utilisateurs
+Account: Compte
+Assistants: Assistants(es)
+Categories: Catégories
+Views: Vues
+Layers: Calques
+Reports: Rapports
+Delete Events: Effacer les événements
+Public Preferences: Paramètres publique
+Unapproved Public Events: Evènements publique non approuvés
+Administrative Tools: Outils d'administration
+
+
+###############################################
+# Page: admin.php
+#
+Help: Aide
+Note: Note
+Your user preferences: Vos préférences utilisateur
+may be affecting the appearance of this page.: peuvent modifier l'apparence de cette page. 
+Click here: Cliquez ici
+to not use your user preferences when viewing this page: pour ne pas utiliser vos préférences utilisateur lors de l'affichage de cette page
+are being ignored while viewing this page.: sont ignorés lors de l'affichage de cette page.
+to load your user preferences when viewing this page: pour charger vos préférences utilisateur lors de l'affichage de cette page
+Save: Sauvegarder
+Settings: Réglages
+Public Access: Accès public 
+Groups: Groupes
+NonUser Calendars: Calendriers Non-Utilisateurs
+Other: Autre
+Email: Courrier électronique
+colors-help: Toutes les couleurs doivent être au format hexdécimal « #RRVVBB » ou « RR » est la valeur hexa pour le rouge, « VV » est la valeur hexa pour le vert, et « BB » est la valeur hexa pour le bleu.
+Colors: Couleurs
+app-name-help: Spécifie le nom de l'application qui apparaîtra dans la barre de titre du navigateur pour toutes les pages (page de connexion incluse).La valeur que vous spécifiez ici sera recherchée dans le fichier de traduction vous permettant de fournir différents titres pour différentes langues. 
+Application Name: Nom de l'application
+server-url-help: Spécifie l'URL de base pour l'application. Elle sera incluse lors de l'envoi des courriers électroniques ainsi que pour les rappels et les notifications. 
+Server URL: URL du serveur
+language-help: Spécifie la langue à utiliser.
+Language: Langue
+Your browser default language is: La langue utilisée par votre navigateur est
+fonts-help: Permet de définir une liste de polices pour l'affichage (par exemple "Arial, Helvetica").
+Fonts: Polices
+custom-script-help: Autoriser l'utilisation de codes javascript personnalisés ou de feuilles de style qui seront insérés dans la section HTML "head" de chaque page.
+Custom script/stylesheet: Script/Feuille de style personnalisé
+Yes: Oui
+No: Non
+Edit: Editer
+custom-header-help: Permet d'ajouter un bout de HTML au haut de chaque page
+Custom header: Entête personnalisée
+custom-trailer-help: Permet d'ajouter un bout de HTML au bas de chaque page
+Custom trailer: Bas de page personnalisé
+preferred-view-help: Spécifie la vue par défaut (par Jour, Semaine, Mois, ou Année).
+Preferred view: Vue préférée
+Day: Jour
+Week: Semaine
+Month: Mois
+Year: Année
+display-weekends-help: Inclure les week-ends lors de la visualisation de la semaine. 
+Display weekends in week view: Afficher les week-ends dans la représentation de la semaine
+yearly-shows-events-help: Sur la vue par année, affiche les jours contenant des événements en caractères gras
+Display days with events in bold in month and year views: Sur les vues par mois et par année, affiche les jours contenant des événements en caractères gras
+display-desc-print-day-help: Inclure les descriptions d'événements dans la version imprimable de la vue journalière.
+Display description in printer day view: Descriptions dans la version imprimable de la vue journalière.
+date-format-help: Spécifie le format d'affichage des dates.
+Date format: Format des dates
+December: décembre 
+time-format-help: Spécifie quel format utiliser pour l'heure : <br /><i>12 heures:</i> Affiche l'heure de cette façon : 3am, 8:30pm, etc.  <br /><i>24 heures:</i> Affiche l'heure de cette façon 3:00, 20:30, etc.
+Time format: Format de l'heure
+12 hour: 12 heures
+24 hour: 24 heures
+time-interval-help: Spécifie l'interval de temps pour l'affichage des vues par semaine et par jour.
+Time interval: Interval de temps (vues semaine et jour)
+hour: heure
+minutes: minutes
+auto-refresh-help: Quand activé, les pages de visualisation par jour, semaine, mois et la liste des événements en attente seront automatiquement rafraichies périodiquement.
+Auto-refresh calendars: Rafraichissement automatique de l'agenda
+auto-refresh-time-help: Spécifie la période de rafraichissement des pages.
+Auto-refresh time: Période de rafraichissement
+require-approvals-help: Quand activé, un utilisateur doit approuver un événement avant qu'il ne soit affiché dans l'agenda (à moins que « Afficher les événements en attente » ne soit activé). Notez que le réglage sur « Non » désactivera les approbations pour l'agenda à accès public (si l'accès public à l'agenda est activé).
+Require event approvals: Réclamer l'approbation des événements
+display-unapproved-help: Spécifie si vous voulez afficher dans votre calendrier les événements en attente.<br /> Si vous choisissez « Oui », les événements en attente seront affichés dans votre calendrier (dans une couleur différente).<br /> Si vous choisissez « Non », les événements en attente seront affichés dans votre calendrier seulement quand vous les accepterez.
+Display unapproved: Afficher les événements en attente
+display-week-number-help: Spécifie si le numéro de la semaine (1-52) doit être affiché.
+Display week number: Afficher le numéro de semaine
+display-week-starts-on: Spécifie par quel jour commence la semaine.  Si Lundi est choisi, les numéros des semaines seront à la norme ISO.
+Week starts on: La semaine commence le
+Sunday: Dimanche
+Monday: Lundi
+work-hours-help: Spécifie les heures de début et de fin de travail.
+Work hours: Heures de travail
+From: de
+to: Ã
+disable-priority-field-help: En sélectionnant « Oui », vous enlevez le champ « Priorité » des pages d'information sur les événements, fournissant une interface plus simple pour les novices.
+Disable Priority field: Désactiver le champ Priorité
+disable-access-field-help: En sélectionnant « Oui », vous enlevez le champ « Accès » des pages d'information sur les événements, fournissant une interface plus simple pour les novices.
+Disable Access field: Désactiver le champ Accès
+disable-participants-field-help: En sélectionnant « Oui », vous enlevez le champ « Participants » des pages d'informations sur les événements, empêchant les utilisateurs d'ajouter d'autres utilisateurs à leurs événements. Si vous activez cette option, vous devriez désactiver aussi le champ « Autoriser la visualisation des agendas des autres utilisateurs ».
+Disable Participants field: Désactiver le champ Participants
+disable-repeating-field-help: En sélectionnant « Oui », vous enlevez le champ « Répétitions » lors de l'ajout d'événements, fournissant une interface plus simple pour les novices.
+Disable Repeating field: Désactiver le champ de répétition
+popup-includes-siteextras-help: Si coché, permet aux champs ajoutés dans site_extras.php de s'afficher dans les fenêtres d'alerte d'événements
+Display Site Extras in popup: Afficher les extras au site dans les fenêtres d'alerte
+allow-html-description-help: Si coché, les utilisateurs pourront ajouter du code HTML dans le champ descriptif d'événement.  Sinon, le HTML sera affiché textuellement.  Attention: Allumer cette option permet aux utilisateurs d'inclure des images hébergées sur d'autres site web.
+Allow HTML in Description: Autoriser l'utilisation de code HTML dans les descriptions
+allow-view-other-help: Spécifie si un utilisateur peut voir l'agenda d'un autre utilisateur.
+Allow viewing other user's calendars: Autoriser la visualisation des agendas des autres personnes
+allow-view-add-help: L'icone '+' apparaitra dans les vues permettant aux utilisateurs d'ajouter rapidement des événements dans ceux d'autres utilisateurs
+Include add event link in views: Inclure le lien d'ajout d'événement dans les vues
+remember-last-login-help: Lorsqu'activé, l'identifiant de l'utilisateur sera rempli pour lui sur la page de connexion (sans le mot de passe), et les préférences de l'utilisateur seront chargées (y compris les couleurs préférées et la sélection de la langue). 
+Remember last login: Se souvenir de la dernière connexion
+conflict-check-help: Vérifier les conflits d'événements (deux événements prévus au même moment pour la même personne). Si vous positionnez cette valeur à « Oui », vous pourrez introduire deux événements qui se chevauchent après confirmation. Si vous choisissez « Non », il ne sera fait aucune vérification de conflit. Vous choisirez probablement « Oui » pour actionner la vérification des conflits. 
+Check for event conflicts: Vérifier les conflits d'événements
+conflict-months-help: Si la vérification des conflits est activée (« Vérifier les conflits pour les événements » est positionné sur « Oui »), ceci spécifie sur combien de mois dans le futur les conflits seront vérifiés. Si vous trouvez que l'ajout d'événements prend du temps, réduisez ce nombre. 
+Conflict checking months: Période de vérification des conflits en mois
+conflict-check-override-help: Permet aux utilisateurs de passer outre les confits d'agenda et de plannifier deux ou plus événements au même moment.
+Allow users to override conflicts: Permet aux utilisateurs de passer outre les conflits
+limit-appts-help: Permet à l'administrateur de fixer la limite générale du nombre de rendez-vous par utilisateur et par jour.
+Limit number of timed events per day: Nombre maximum d'événements temporels par jour
+limit-appts-number-help: Fixe le nombre maximum d'événements temporels qu'un utilisateur peut avoir dans une journée.
+Maximum timed events per day: Nombre maximum d'événements temporels par jour
+timed-evt-len-help: Spécifie la méthode d'entrée pour la durée d'un événement
+Specify timed event length by: Déterminer la fin d'un événenement par
+Duration: Durée
+End Time: Fin
+Plugins: Greffons
+plugins-enabled-help: Autoriser les applications greffons
+Enable Plugins: Autoriser les greffons
+plugins-sort-key-help: Spécifie une clé de tri pour les greffons. Cela permet aux greffons d'apparaître dans un ordre donné.
+Plugin: Greffon
+allow-public-access-help: Lorsqu'activé, l'agenda peut être utilisé comme un agenda public en lecture seule qui n'a pas besoin d'une connexion par les utilisateurs.
+Allow public access: Autoriser l'accès public
+public-access-default-visible: Les événements du calendrier public s'afficheront automatiquement sur les calendriers de tous les autres usagers.
+Public access visible by default: Accès public visible par défaut
+public-access-default-selected: à l'ajout d'un événement, l'utilisateur public sera sélectionné par défaut comme participant.
+Public access is default participant: L'accès public est le participant par défaut
+public-access-view-others-help: Lors d'un accès en mode « accès public », spécifie si l'utilisateur peut voir les agendas des autres utilisateurs.
+Public access can view other users: L'accès public peut voir les autres utilisateurs
+public-access-can-add-help: Lorsqu'activé, les utilisateurs qui accédent au système à travers l'accès public pourront ajouter de nouveaux événements, mais ils ne s'afficheront pas dans l'agenda tant qu'un administrateur ne les aura pas approuvés. 
+Public access can add events: L'accès public peut ajouter des événements
+public-access-add-requires-approval-help: Indique si les événements ajoutés par le compte public nécéssitent d'être approuvés avant d'être affichés
+Public access new events require approval: Les nouveaux événements publiques doivent être approuvés
+public-access-sees-participants-help: Si coché, les utilisateurs consultant le calendrier à partir du compte public pourront voir la liste des participants en regardant les détails d'un événement
+Public access can view participants: Les utilisateurs publiques peuvent voir les participants
+groups-enabled-help: Active le support des groupes, autorisant les utilisateurs à sélectionner les utilisateurs par groupe.
+Groups enabled: Groupes activés
+user-sees-his-group-help: Si activé, les utilisateurs ne verront pas l'agenda des autres utilisateurs n'appartenant pas au moins à leur groupe. 
+User sees only his groups: L'utilisateur ne voit que ses groupes
+nonuser-enabled-help: Si activé, les administrteurs auront le choix d'ajouter des calendriers non-utilisateurs
+Nonuser enabled: Calendrier des non-utilisateurs activé
+nonuser-list-help: Où afficher le calendrier des non-utilisateurs dans la liste des participants
+Nonuser list: Afficher la list des particants à 
+Top: En haut
+Bottom: En bas
+reports-enabled-help: Si coché, les utilisateurs verront une section « Rapports » au bas de chaque page et pourront créer des rapports personnalisés.  En plus, les administrateurs peuvent créer des rapports globaux s'affichant au bas de chaque page d'usager.
+Reports enabled: Rapports activés
+subscriptions-enabled-help: specifie si l'utilisateur distant peut s'inscrire comme utilisateur de calendier WebCalendar, lui permettant ainsi de voir les événements des utilisateurs des applications de typeiCal (comme iCal d'Apple ou le calendrier Mozilla)
+Allow remote subscriptions: Autoriser les inscriptions distantes
+categories-enabled-help: Active le support des catégories, autorisant les utilisateurs à qualifier un événement par une catégorie. 
+Categories enabled: Active/Désactive l'utilisation des catégories
+allow-external-users-help: Indique si un utilisateur extérieur à l'agenda peut être ajouté à un événement. Cela permet aux utilisateurs extérieurs à l'agenda de figurer comme participants.
+Allow external users: Autoriser les utilisateurs extérieurs
+external-can-receive-notification-help: Lorsque des utilisateurs extérieurs sont permis ainsi que l'usage du couriel, les utilisateurs extérieurs peuvent recevoir une notification par couriel lors de l'ajout, de la modification ou de la suppression d'un événement (à condition que l'adresse de couriel de l'utilisateur extérieur soit fournie)
+External users can receive email notifications: Les utilisateurs extérieurs peuvent recevoir une notification par couriel
+external-can-receive-reminder-help: Lorsque des utilisateurs extérieurs sont permis ainsi que l'usage du couriel, les utilisateurs extérieurs peuvent recevoir un rappel (à condition que l'adresse de couriel de l'utilisateur extérieur soit fournie)
+External users can receive email reminders: Les utilisateurs extérieurs peuvent recevoir des rappels par couriel
+email-enabled-help: Active/Désactive l'envoi de couriel pour la notification et les rappels. Positionnez-le sur « Non » si votre serveur n'est pas configuré proprement pour envoyer des courriers.
+Email enabled: Courrier électronique activé 
+email-default-sender: Spécifie l'adresse électronique à mettre comme expéditeur lors de l'envoi de rappels.
+Default sender address: Adresse par défaut de l'expéditeur
+Default user settings: Réglages par défaut de l'utilisateur
+email-event-reminders-help: Permet de définir si un couriel est envoyé ou non pour le rappel d'un événement. 
+Event reminders: Rappel pour un événement
+email-event-added: Notification par couriel lors de l'ajout d'un événement dans votre agenda.
+Events added to my calendar: événement ajouté dans votre agenda
+email-event-updated: Notification par couriel lors de la modification d'un événement dans votre agenda.
+Events updated on my calendar: événement modifié dans votre agenda
+email-event-deleted: Notification par couriel lors de la suppression d'un événement dans votre agenda.
+Events removed from my calendar: événement supprimé dans votre agenda
+email-event-rejected: Notification par couriel lors du rejet d'un événement par l'un des participants.
+Event rejected by participant: événement rejeté par un participant
+Allow user to customize colors: Autoriser les utilisateurs à personnaliser leurs couleurs 
+Enable gradient images for background colors: Permettre les images en dégradés comme images de fond
+Not available: Non disponible
+Document background: Fond
+Select: Sélectionner
+Document title: Titre du document 
+Document text: Texte du document
+Table grid color: Couleur de quadrillage de tableau
+Table header background: Fond d'en-tête de tableau
+Table header text: Texte d'en-tête de tableau
+Table cell background: Fond de cellule
+Table cell background for current day: Fond de cellule pour aujourd'hui
+Table cell background for weekends: Couleur de fond pour les week-ends
+Event popup background: Fond des détails d'événements
+Event popup text: Texte surgissant des événements
+
+
+###############################################
+# Page: approve_entry.php
+#
+Error approving event: Erreur en approuvant l'événement
+
+
+###############################################
+# Page: assistant_edit.php
+#
+Admin mode: Mode administrateur
+Your assistants: Vos assistants
+
+
+###############################################
+# Page: category_handler.php
+#
+Delete: Supprimer
+
+
+###############################################
+# Page: category.php
+#
+Add: Ajouter
+Category Name: Nom de la catégorie
+Global: Globale
+Are you sure you want to delete this entry?: Voulez-vous vraiment supprimer cet événement ?
+Add New Category: Ajouter une nouvelle catégorie
+
+
+###############################################
+# Page: day.php
+#
+Assistant mode: Mode assistant
+Generate printer-friendly version: Générer une version imprimable
+Printer Friendly: Version imprimable
+
+
+###############################################
+# Page: del_entry.php
+#
+Hello: Bonjour
+An appointment has been canceled for you by: Un événement été annulé pour vous par
+The subject was: Le sujet était
+Notification: Notification
+
+
+###############################################
+# Page: edit_entry_handler.php
+#
+The following conflicts with the suggested time: Ce qui suit est en conflit avec l'heure suggérée.
+Unnamed Event: événement sans nom
+The description is: La description est
+A new appointment has been made for you by: Un nouvel événement est proposé par
+An appointment has been updated by: Un événement a été mis à jour par
+The subject is: Le sujet est
+Please look on: Veuillez consulter
+to accept or reject this appointment: pour accepter ou rejeter cet événement
+to view this appointment: pour voir cet événement
+Scheduling Conflict: Conflit entre agendas
+Your suggested time of: Votre suggestion de
+All day event: événement permanent
+conflicts with the following existing calendar entries: est en conflit avec les événements suivants
+Cancel: Annuler
+
+
+###############################################
+# Page: edit_entry.php
+#
+Edit Entry: Modification de l'événement
+Add Entry: Ajouter un événement
+Details: Détails
+Participants: Participants
+Repeat: Répétition
+brief-description-help: Ceci doit être une courte description (environ 20 caractères) de l'événement. Elle représentera l'événement quand vous regarderez le calendrier.
+Brief Description: Description courte
+full-description-help: Ceci doit être une description complète de l'événement. Cette information sera vue par l'utilisateur quand celui-ci cliquera sur l'événement.
+Full Description: Description complète
+access-help: Spécification du niveau d'accès de l'événement.<br /> <i>Public</i>: Tous les utilisateurs peuvent voir les détails de l'événement.<br /><i>Confidentiel</i>: Les utilisateurs peuvent voir que vous avez un événement pour ces date et heure, mais ils ne peuvent pas en consulter les détails.
+Access: Accès
+Public: Public
+Confidential: Confidentiel
+priority-help: Spécification de la priorité de l'événement. Une haute priorité sera affichée en gras.
+Priority: Priorité
+Low: Basse
+Medium: Moyenne
+High: Haute
+category-help: Définir la catégorie associée à un événement.
+Category: Catégorie
+None: Aucune
+date-help: Spécification de la date de l'événement.
+Untimed event: événement intemporel
+Timed event: événement temporel
+time-help: Spécification de l'heure de l'événement.<br /><i>Ce champ peut être laissé vide.</i>
+am: am
+pm: pm
+duration-help: Spécification de la durée (en minutes) de l'événement.  <br /><i>Ce champ peut être laissé vide.</i>
+hours: heures
+end-time-help: Spécifie l'heure à laquelle l'événement est prévu se terminer
+days: jours
+before event: avant
+participants-help: Liste des participants pour cet événement.
+Availability: Disponibilité
+external-participants-help: Spécifie une liste de participants pour cet événement qui ne font pas partie des utilisateurs de l'agenda. Ces utilisateurs devraient figurer un par ligne evec éventuellement leur adresse de couriel. Si une adresse de couriel figure, l'utilisateur peut recevoir par couriel les notifications et rappels.
+External Participants: Participants extérieurs
+repeat-type-help: Sélectionner la fréquence de répétition de l'événement.<br /><i>Mensuel (par jour)</i> autorise un événement à être répété tous les premiers Lundi du mois, 3ème Jeudi du mois, etc. <br /><i>Mensuel (par date)</i> autorise un événement à être répété le même jour du mois.
+Repeat Type: Type de répétition
+Daily: Quotidienne
+Weekly: Hebdomadaire
+Monthly: Mensuelle
+by day: par jour
+by day (from end): par jour (depuis la fin)
+by date: par date
+Yearly: Annuelle
+repeat-end-date-help: Spécifie la date de fin de répétition de l'événement.
+Repeat End Date: Date de fin de répétition
+Use end date: Utiliser une date de fin
+repeat-frequency-help: Spécifie combien l'événement doit être répété. La valeur par défaut 1 indique que cela doit arriver à chaque fois.  Si vous choisissez 2, cela indique que l'événement doit arriver toutes les autres semaines (si <i>Type de répétition</i> est sur <i>Hebdomadaire</i>), tous les autres Mois (si <i>Type de répétition</i> est sur <i>Mensuel</i>), etc.
+Frequency: Fréquence
+repeat-day-help: Spécifie quels jours de la semaine l'événement doit être répété. Vous devez l'utiliser seulement si <i>Type de répétition</i> est sur <i>Hebdomadaire</i>.
+Repeat Day: Répétiton du Jour
+Tuesday: Mardi
+Wednesday: Mercredi
+Thursday: Jeudi
+Friday: Vendredi
+Saturday: Samedi
+Delete entry: Supprimer l'événement
+You are not authorized to edit this entry: Vous n'êtes pas autorisé à modifier cet événement
+
+
+###############################################
+# Page: edit_layer_handler.php
+#
+You cannot create a layer for yourself: Vous ne pouvez pas créer un calque pour vous-même
+You can only create one layer for each user: Vous ne pouvez créer qu'un calque par utilisateur
+
+
+###############################################
+# Page: edit_layer.php
+#
+Edit Layer: Modifier un calque
+Add Layer: Ajouter un calque
+Source: Source
+Color: Couleur
+Duplicates: Duplication
+Show layer events that are the same as your own: Afficher les évenements du calque correspondants aux vôtres
+Delete layer: Détruire un calque
+Are you sure you want to delete this layer?: êtes vous sûr de détruire ce calque ? 
+
+
+###############################################
+# Page: edit_nonusers_handler.php
+#
+Calendar ID: ID calendrier
+word characters only: peut continr seulement des caractères alphanumériques (a-zA-Z_0-9)
+Changes successfully saved: Changements sauvegardés avec succès
+
+
+###############################################
+# Page: edit_nonusers.php
+#
+NONUSER_PREFIX not set: NONUSER_PREFIX n'a pas été initialisé
+Edit User: Modifier un utilisateur
+Add User: Ajouter un utilisateur
+First Name: Prénom
+Last Name: Nom
+
+
+###############################################
+# Page: edit_report_handler.php
+#
+Page template: Squelette de page
+Variable N not found: Variable N manquante
+Day template: Squelette pour une journée
+Event template: Squelette pour un événement
+Unnamed Report: Rapport anonyme
+
+
+###############################################
+# Page: edit_report.php
+#
+Tomorrow: demain
+Today: Aujourd'hui
+Yesterday: hier
+Day before yesterday: Avant-hier
+Next week: Semaine prochaine
+This week: Semaine en cours
+Last week: Semaine dernière
+Week before last: Semaine précente
+Next week and week after: La semaine précédente et la semaine prochaine
+This week and next week: Cette semaine et la semaine prochaine
+Last week and this week: La semaine dernière et cette semaine
+Last two weeks: Deux dernières semaines
+Next month: Mois prochain
+This month: Mois en cours
+Last month: Mois dernier
+Month before last: Mois précédent
+Next year: Année prochaine
+This year: Année en cours
+Last year: Année dernière
+Year before last: Année précécente
+Invalid report id: Id de rapport invalide
+Add Report: Ajouter un rapport
+Edit Report: Editer un rapport
+Report name: Nom du rapport
+Current User: Utilisateur actuel
+Include link in trailer: Inclure le lien dans le bas de page
+Include standard header/trailer: Inclure les hauts et bas de pages standards
+Date range: Entendu des dates
+Include previous/next links: Inclure les liens avant/suivant
+Include empty dates: Inclure les dates vides
+Template variables: Variables de squelette
+Are you sure you want to delete this report?: Etes vous sur de vouloir effacer ce rapport ?
+
+
+###############################################
+# Page: edit_template.php
+#
+Edit Custom Script/Stylesheet: Editer les scripts/Feuilles de style personnalisés
+Edit Custom Header: Editer les entêtes personnalisées
+Edit Custom Trailer: Editer les fin de pages personnalisés
+
+
+###############################################
+# Page: edit_user_handler.php
+#
+Deleting users not supported: La suppression des utilisateurs n'est pas supportée
+The passwords were not identical: Les mots de passe ne sont pas identiques
+You have not entered a password: Vous n'avez pas saisi de mot de passe
+Username can not be blank: Le nom d'utilisateur ne peut être laissé en blanc
+
+
+###############################################
+# Page: edit_user.php
+#
+Username: Identifiant
+E-mail address: Adresse de couriel 
+Password: Mot de passe
+again: bis
+Disabled for demo: Désactivé pour la démo
+Are you sure you want to delete this user?: êtes-vous certain de vouloir effacer cet usager?
+Change Password: Changer de mot de passe
+New Password: Nouveau mot de passe
+Set Password: Changer le mot de passe
+
+
+###############################################
+# Page: export_handler.php
+#
+Export: Exporter
+export format not defined or incorrect: Le format d'exportation n'est pas défini ou n'est pas correct
+
+
+###############################################
+# Page: export.php
+#
+Export format: Format d'exportation
+Palm Pilot: Palm Pilot
+Include all layers: Inclure tous les calques
+Export all dates: Exporter toutes les dates
+Start date: Date de début
+End date: Date de fin
+Modified since: Modifié depuis
+
+
+###############################################
+# Page: group_edit_handler.php
+#
+You must specify a group name: Vous devez préciser un nom de groupe
+
+
+###############################################
+# Page: group_edit.php
+#
+Unnamed Group: Groupe sans nom
+Add Group: Ajouter un groupe
+Edit Group: Modifier un groupe
+Group name: Nom du groupe
+Updated: Mise à jour
+Created by: Créé par
+
+
+###############################################
+# Page: groups.php
+#
+Add New Group: Ajouter un nouveau groupe
+
+
+###############################################
+# Page: help_admin.php
+#
+Display days with events in bold in year view: Afficher les jours avec événements en gras dans la vue annuelle
+Nonuser: Calendrier Non-utilisateur
+user-customize-color: Détermine si les usagers peuvent modifier leurs couleurs d'affichage
+enable-gradient-help: Utiliser des dégradés comme couleurs de fond des cellules
+Manually entering color values: Entrée manuelle des couleurs
+
+
+###############################################
+# Page: help_bug.php
+#
+Report Bug: Signaler un problème
+
+
+###############################################
+# Page: help_edit_entry.php
+#
+Adding/Editing Calendar Entries: Ajouter/Modifier un événement
+
+
+###############################################
+# Page: help_import.php
+#
+Import: Importer
+Palm Desktop: Palm Desktop
+This form will allow you to import entries from the Palm Desktop Datebook.: Ce formulaire vous permet d'importer les données de votre agenda Palm Desktop
+It should be located in your Palm directory in <tt>datebook/datebook.dat</tt> in a subdirectory named by your username.: Cela doit être placé dans le répertoire <tt>datebook/datebook.dat</tt> de votre Palm placé dans un sous-répertoire à votre nom
+The following entries will not be imported: Les entrées suivantes ne seront pas importés
+Entries older than the current date: Entrées plus anciennnes que la date courante
+Entries created in the Palm Desktop that have not been HotSync'd: Les entrées crées dans le Palm Desktop qui n'ont pas été synchronisé à chaud
+Anything imported from Palm will be overwritten during the next import (unless the event date has passed).: Tout élément importé du Palm sera écrasé au prochain import (sauf si la date de l'événement est passé)
+Therefore, updates should be made in the Palm Desktop.: Auparavant, les mises à jour doivent être effectués sur le Palm Desktop
+vCal: vCal
+This form will import vCalendar (.vcs) 1.0 events: Ce formulaire importe vCalendar (.vcs)
+The following formats have been tested: Les formats suivants ont été testés
+Palm Desktop 4: Palm Desktop 4
+Lotus Organizer 6: Lotus Organizer 6
+Microsoft Outlook 2002: Microsoft Outlook 2002
+iCalendar: iCalendar
+This form will import iCalendar (.ics) events: Ce formulaire importera des événements cd iCalendar (.ics)
+Enabling <b>Overwrite Prior Import</b> will cause events imported previously that used the same UID as an event from the new import file to be marked as deleted.  This should allow an updated iCalendar file to be imported without creating duplicates.: Activer <b>Remplacer l'importation précédente</b> marquera comme effacé les événements précédemment importés qui ont le même UID. Cela permet de faire une mise à jour à partir d'un fichier iCalendar sans doublons.
+
+
+###############################################
+# Page: help_index.php
+#
+Help Index: Index de l'aide
+
+
+###############################################
+# Page: help_layers.php
+#
+Layers are useful for displaying other users' events in your own calendar.  You can specifiy the user and the color the events will be displayed in.: Les calques sont utiles pour afficher les événements des autres utilisateurs dans votre agenda. Vous pouvez spécifier l'utilisateur et la couleur dans laquelle les événements seront affichés.
+Add/Edit/Delete: Ajouter/Modifier/Supprimer
+Clicking the Edit Layers link in the admin section at the bottom of the page will allow you to add/edit/delete layers.: Cliquer sur le lien « Modifier les calques » dans la section administration, au bas de la page, vous permet d'ajouter/modifier/supprimer les calques.
+Specifies the user that you would like to see displayed in your calendar.: Défini l'utilisateur que vous désirez visualiser dans votre agenda.
+The text color of the new layer that will be displayed in your calendar.: La couleur à utiliser pour l'affichage du texte d'un nouveau calque dans votre agenda. 
+If checked, events that are duplicates of your events will be shown.: Quand activé, les événements en double des votres seront affichés.
+Disabling: Désactiver
+Press the Disable Layers link in the admin section at the bottom of the page to turn off layers.: Sélectionner le lien « Désactiver » pour supprimer le mode calque.
+Enabling: Activer
+Press the Enable Layers link in the admin section at the bottom of the page to turn on layers.: Sélectionner le lien « Activer » pour bénéficier du mode calque.
+
+
+###############################################
+# Page: help_pref.php
+#
+Timezone Offset: Décalage horaire
+tz-help: Spécifie de combien d'heures ajuster l'heure du serveur à l'heure locale.
+Default Category: Catégorie par défaut
+default-category-help: Spécifie la catégorie par défaut lors de la création d'événement.
+When I am the boss: Lorsque je suis le "boss"
+Email me event notification: Envoi d'un email de notification d'événement
+email-boss-notifications-help: Détermine si les "boss" reçoivent des courriels comme notification 
+I want to approve events: Je veux approuver les événements
+boss-approve-event-help: Détermine si le "boss" doit approuver les événements ajoutés par des assistants
+Subscribe/Publish: S'abonner/Publier
+allow-remote-subscriptions-help: Détermine si les usagers distants peuvent s'abonner à votre calendrier, leur permettant de consulter vos événements à même une application compatible iCal (tel que Mozilla Calendar ou Apple iCal)
+URL: URL
+remote-subscriptions-url-help: Affiche l'URL avec lequel les usagers distants peuvent s'abonner à votre calendrier
+
+
+###############################################
+# Page: import_handler.php
+#
+Import Results: Résultat de l'importation
+Events successfully imported: Evènements importés avec succès
+Events from prior import marked as deleted: Les évènements importés précédemment sont marqués effacés
+Conflicting events: Evénements en conflits
+Errors: Erreurs
+There was an error parsing the import file or no events were returned: Erreur lors de l'analyse du fichier d'import ou aucun événément n'a été trouvé
+The import file contained no data: Le fichier importé ne contient aucune donnée
+Event Imported: Evénement importé
+View this entry: Voir cet événement
+
+
+###############################################
+# Page: import.php
+#
+Disabled: Désactivés
+Import format: Format d'import
+Exclude private records: exclure les enregistrements privés
+Overwrite Prior Import: Remplacer l'importation précédente
+
+
+###############################################
+# Page: layers.php
+#
+Layers are currently: Les calques sont actuellement
+Enabled: Activés
+Disable Layers: Désactiver les calques
+Enable Layers: Activer les calques
+to modify the layers settings for the: pour modifier les paramètres de calque de 
+calendar: calendrier
+Add layer: Ajouter un calque
+Layer: Calque
+Edit layer: Modifier un calque
+
+
+###############################################
+# Page: list_unapproved.php
+#
+Approve/Confirm: Approuver/Confirmer
+Approve this entry?: Accepter cet événement ?
+Reject: Rejeter
+Reject this entry?: Rejeter cet événement ?
+No unapproved events for: Pas d'événement non approuvé pour
+Unapproved Events: Evénements en attente
+
+
+###############################################
+# Page: login.php
+#
+Invalid login: Utilisateur incorrect
+You must enter a login and password: Vous devez saisir un login et un mot de passe
+Save login via cookies so I don't have to login next time: Sauvegarder le login dans un cookie, pour ne plus taper le login la prochaine fois
+Login: Connexion
+Access public calendar: Agenda à accès public
+cookies-note: <b>Note:</b> Cette application nécessite l'activation des cookies.
+
+
+###############################################
+# Page: month.php
+#
+Sun: Dim
+Mon: Lun
+Tue: Mar
+Wed: Mer
+Thu: Jeu
+Fri: Ven
+Sat: Sam
+
+
+###############################################
+# Page: nonusers.php
+#
+Add New NonUser Calendar: Ajouter un nouvel utilisateur générique
+
+
+###############################################
+# Page: pref.php
+#
+Save Preferences: Sauvegarder les préférences
+to modify the preferences for the Public Access calendar: pour modifier les préférences de l'agenda public
+Add N hours to: Ajouter N heures Ã
+Subtract N hours from: Oter N heures de
+same as: comme
+server time: heure du serveur
+All: Tout
+
+
+###############################################
+# Page: purge.php
+#
+Preview: Aperçu
+Purging events for: Effacer les événements de
+Finished: Terminé
+Check box to delete <b>ALL</b> events for a user: Cocher la case pour effacer <b>TOUS</b> les événements d'un utilisateur
+Delete all events before: Effacer les événements avant
+Preview delete: Aperçu de l'effacement
+Are you sure you want to delete events for: Etes-vous sur de vouloir effacer les événements de
+Records deleted from: Enregistrements effacés de
+
+
+###############################################
+# Page: reject_entry.php
+#
+An appointment has been rejected by: Un événement a été rejeté par
+Title: WebCalendar
+
+
+###############################################
+# Page: report.php
+#
+Private: Privé
+This event is confidential: Cet événement est confidentiel 
+Waiting for approval: En attente de validation
+Deleted: Supprimé
+Rejected: Rejeté
+Approved: Approuvé
+Unknown: Inconnu
+to manage reports for the Public Access calendar: pour gérer les rapports pour l'accès au calendrier public
+Add new report: Ajouter un nouveau rapport
+cont.: suite
+Manage Reports: Gérer les rapports
+
+
+###############################################
+# Page: search_handler.php
+#
+You must enter one or more search keywords: Vous devez donner un ou plusieurs mot(s) clé(s) pour la recherche
+Search Results: Résultats de la recherche
+match found: élément trouvé
+matches found: éléments trouvés
+No matches found: Pas de résultat
+
+
+###############################################
+# Page: search.php
+#
+Search: Rechercher
+Keywords: Mots clés
+Advanced Search: Recherche avancée
+
+
+###############################################
+# Page: select_user.php
+#
+View Another User's Calendar: Visualiser l'agenda d'un autre utilisateur
+Go: Aller
+
+
+###############################################
+# Page: set_entry_cat.php
+#
+You have not added any categories: Vous n'avez pas défini de caégories
+Set Category: Chosir la catégorie
+
+
+###############################################
+# Page: usersel.php
+#
+Reset: Réinitialiser
+Remove: Enlever
+Ok: Valider
+
+
+###############################################
+# Page: users.php
+#
+Add New User: Ajouter un nouvel utilisateur
+denotes administrative user: appliquer les droits d'administrateur
+
+
+###############################################
+# Page: view_d.php
+#
+No users for this view: Aucun utilisateur pour cette vue
+
+
+###############################################
+# Page: view_entry.php
+#
+every: tous
+2nd: 2ème
+3rd: 3ème
+4th: 4ème
+5th: 5ème
+1st: 1er
+last: dernier
+Description: Description
+Status: Etat
+day: jour
+minute: minute
+External User: Utilisateur extérieur
+Approve/Confirm entry: Approuver/Confirmer cet événement
+Reject entry: Rejeter l'événement
+Set category: Choisir une catégorie
+Edit repeating entry for all dates: Modifier l'événement répétitif pour toutes les dates
+Edit entry for this date: Modifier l'événement pour cette date
+Delete repeating event for all dates: Supprimer l'événement répétitif pour toutes les dates
+This will delete this entry for all users.: Ceci va supprimer cet événement pour tous les utilisateurs.
+Delete entry only for this date: Supprimer l'événement pour cette date
+Edit entry: Modification de l'événement
+Copy entry: Copier l'événement
+This will delete the entry from your calendar.: Ceci supprimera un événement de votre agenda.
+Add to My Calendar: Ajouter à mon agenda
+Do you want to add this entry to your calendar?: Voulez-vous ajouter cet événement à votre agenda ?
+This will add the entry to your calendar.: Ceci ajoutera un événement à votre agenda.
+Email all participants: Envoyer un courriel à tous les participants
+Show activity log: Montrer le journal de suivi
+Hide activity log: Cacher le journal de suivi
+Export this entry to: Exporter cet événement au format
+
+
+###############################################
+# Page: views_edit_handler.php
+#
+You must specify a view name: Vous devez indiquer une vue
+
+
+###############################################
+# Page: views_edit.php
+#
+Unnamed View: Vue sans nom
+Add View: Ajouter une vue
+Edit View: Modifier la vue
+View Name: Nom de la vue
+View Type: Type de la vue
+Week (Users horizontal): Semaine (utilisateurs à l'horizontale)
+Week (Users vertical): Semaine (utilisateurs à la verticale)
+Week (Timebar): Semaine (planning)
+Month (Timebar): Mois (planning)
+Month (side by side): Mois (Côte à côte)
+Month (on same calendar): Mois (sur le même calendrier)
+preview: aperçu
+Selected: Sélectionné
+
+
+###############################################
+# Page: views.php
+#
+Add New View: Ajouter une nouvelle vue
+
+
+###############################################
+# Page: week_details.php
+#
+New Entry: Nouvel événement
+
+
+###############################################
+# Page: includes/config.php
+#
+#
+# << MISSING >>
+# English:
+#
+# << MISSING >>
+# Basque:
+#
+# << MISSING >>
+# Bulgarian:
+#
+# << MISSING >>
+# Catalan:
+#
+# << MISSING >>
+# Chinese (Traditonal/Big5):
+#
+# << MISSING >>
+# Chinese (Simplified/GB2312):
+#
+# << MISSING >>
+# Czech:
+#
+# << MISSING >>
+# Danish:
+#
+# << MISSING >>
+# Dutch:
+#
+# << MISSING >>
+# Estonian:
+#
+# << MISSING >>
+# Finnish:
+#
+# << MISSING >>
+# French:
+#
+# << MISSING >>
+# Galician:
+#
+# << MISSING >>
+# German:
+#
+# << MISSING >>
+# Holo (Taiwanese):
+#
+# << MISSING >>
+# Hungarian:
+#
+# << MISSING >>
+# Icelandic:
+#
+# << MISSING >>
+# Italian:
+#
+# << MISSING >>
+# Japanese:
+#
+# << MISSING >>
+# Korean:
+#
+# << MISSING >>
+# Norwegian:
+#
+# << MISSING >>
+# Polish:
+#
+# << MISSING >>
+# Portuguese:
+#
+# << MISSING >>
+# Portuguese/Brazil:
+#
+# << MISSING >>
+# Romanian:
+#
+# << MISSING >>
+# Russian:
+#
+# << MISSING >>
+# Spanish:
+#
+# << MISSING >>
+# Swedish:
+#
+# << MISSING >>
+# Turkish:
+
+
+###############################################
+# Page: includes/functions.php
+#
+exceeds limit of XXX events per day: dépasse la limite de XXX événements par jour
+You have XXX unapproved events: Vous avez XXX événements en attente d'approbation
+January: janvier 
+February: février 
+March: mars 
+April: avril 
+May_: mai 
+June: juin 
+July: juillet 
+August: août 
+September: septembre 
+October: octobre 
+November: novembre 
+Jan: Jan
+Feb: Fév
+Mar: Mar
+Apr: Avr
+May: Mai
+Jun: Jun
+Jul: Jul
+Aug: Aoû
+Sep: Sep
+Oct: Oct
+Nov: Nov
+Dec: Déc
+All Attendees: Tous les participants
+Busy: Occupé
+Tentative: Exploratoire
+
+
+###############################################
+# Page: includes/help_trailer.php
+#
+Go to: Aller à 
+
+
+###############################################
+# Page: includes/trailer.php
+#
+My Calendar: Mon agenda
+Back to My Calendar: Retour à mon Agenda
+Another User's Calendar: Agenda d'un autre utilisateur
+Add New Entry: Ajouter un événement
+Logout: Déconnexion
+Manage calendar of: Gérer le calendrier de
+
+
+###############################################
+# Page: includes/user-nis.php
+#
+incorrect password: mot de passe incorrect
+no such user: usager non-existant
+Invalid user login: Identifiant non valable
+
+
+###############################################
+# Page: includes/site_extras.php
+#
+Send Reminder: Envoyer un rappel
+
+
+###############################################
+# Page: includes/js/admin.php
+#
+Server URL is required: L'URL du serveur est manquante
+Server URL must end with '/': L'URL du serveur doit se terminer par '/'
+Invalid work hours: Heures de travail invalides
+Invalid color for document background: Couleur de fond incorrecte
+Invalid color for document title: Couleur de titre de document incorrecte
+Invalid color for table cell background: Couleur de fond de cellule incorrecte
+Invalid color for table grid: Couleur de quadrillage incorrecte
+Invalid color for table header background: Couleur de fond de cellule d'entête de tableau incorrecte
+Invalid color for table text background: Couleur de texte de tableau incorrecte
+Invalid color for event popup background: Couleur de fond de fenêtre d'alerte incorrecte
+Invalid color for event popup text: Couleur de texte de fenêtre d'alerte incorrecte
+Invalid color for table cell background for today: Couleur de fond de cellue du jour courant incorrecte
+Color format should be '#RRGGBB': Le format de couleur devrait être '#RRGGBB'
+
+
+###############################################
+# Page: includes/js/availability.php
+#
+Change the date and time of this entry?: Modifier la date et l'heure de cette entrée?
+
+
+############################################### 
+# Page: includes/js/edit_entry.php
+#
+You have not entered a Brief Description: Vous n'avez pas entré de description succinte
+You have not entered a valid time of day: Vous n'avez pas entré d'heure correcte
+The time you have entered begins before your preferred work hours.  Is this correct?: L'heure que vous avez spécifiée commence avant l'heure de début de vos journées. Est-ce correct ?
+Please add a participant: Veuillez ajouter un participant
+
+
+###############################################
+# Page: includes/js/edit_layer.php
+#
+Invalid color: Couleur incorrecte
+
+
+###############################################
+# Page: tools/send_reminders.php
+#
+This is a reminder for the event detailed below.: Ceci est un rappel avant l'événement suivant. 
+Reminder: Rappel

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Galician.txt
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Galician.txt	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Galician.txt	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,1809 @@
+# Use this as a starting point to translate this application into
+# another language.  The format is "English text: translated text"
+# There cannot be a ":" in the English text.
+# Translated by:
+#	Raúl Araya Tauler, nubeiro at nubeiro.com
+# Last update: 20 May 2001
+# Translation last updated on 03-10-2004
+
+# No charset specified (not needed for iso-8859-1)
+# "charset" is used in a meta tag, do not translate "charset" here.
+# charset:
+
+
+
+###############################################
+# Page: admin.php
+#
+#
+# << MISSING >>
+# System Settings:
+You are not authorized: Non está autorizado
+#
+# << MISSING >>
+# Note:
+#
+# << MISSING >>
+# Your user preferences:
+#
+# << MISSING >>
+# may be affecting the appearance of this page.:
+#
+# << MISSING >>
+# Click here:
+#
+# << MISSING >>
+# to not use your user preferences when viewing this page:
+#
+# << MISSING >>
+# are being ignored while viewing this page.:
+#
+# << MISSING >>
+# to load your user preferences when viewing this page:
+Save: Gravar
+Help: Axuda
+Settings: Configuración
+#
+# << MISSING >>
+# app-name-help:
+# English text: Specifies the name of the application that will appear in the browser title bar for all pages and on the login page.  The value you specify here will be looked up in the translations file allowing you to provide different titles for different languages.
+#
+#
+# << MISSING >>
+# Application Name:
+#
+# << MISSING >>
+# server-url-help:
+# English text: Specifies the base URL for the application.  This will be included when sending out email reminders and notifications.
+#
+#
+# << MISSING >>
+# Server URL:
+language-help: Especifica o idioma que se empregará.
+Language: Idioma
+Your browser default language is: O idioma por defecto do seu navegador é
+#
+# << MISSING >>
+# fonts-help:
+# English text: Specifies a list of system fonts to use (such as "Arial, Helvetica")
+#
+#
+# << MISSING >>
+# Fonts:
+#
+# << MISSING >>
+# custom-script-help:
+# English text: Allows entry of custom Javascript or stylesheet text that will be inserted into the HTML "head" section of every page.
+#
+#
+# << MISSING >>
+# Custom script/stylesheet:
+Yes: Si
+No: Non
+#
+# << MISSING >>
+# Edit:
+#
+# << MISSING >>
+# custom-header-help:
+# English text: Allows a custom HTML snippet to be included in the top of every page.
+#
+#
+# << MISSING >>
+# Custom header:
+#
+# << MISSING >>
+# custom-trailer-help:
+# English text: Allows a custom HTML snippet to be included at the end of every page.
+#
+#
+# << MISSING >>
+# Custom trailer:
+preferred-view-help: Especifica a vista por defecto (Día, Semana, Mes ou Ano).
+Preferred view: Vista preferida
+Day: Día
+Week: Semana
+Month: Mes
+Year: Ano
+#
+# << MISSING >>
+# display-weekends-help:
+# English text: Include weekends when viewing a week.
+#
+#
+# << MISSING >>
+# Display weekends in week view:
+#
+# << MISSING >>
+# yearly-shows-events-help:
+# English text: On the yearly view, display days that contain events in a bold font.
+#
+#
+# << MISSING >>
+# Display days with events in bold in year view:
+#
+# << MISSING >>
+# display-desc-print-day-help:
+# English text: Include event descriptions in printer-friendly version of day view.
+#
+#
+# << MISSING >>
+# Display description in printer day view:
+#
+# << MISSING >>
+# date-format-help:
+# English text: Specifies the preferred date format.
+#
+#
+# << MISSING >>
+# Date format:
+December: Decembro
+time-format-help: Especifica qué formato horario empregar: <br /><i>12 horas:</i> Amosa-las horas co formato 3am, 8:30pm, etc.  <br /><i>24 horas:</i> Amosa-las horas co formato 300, 2030, etc.
+Time format: Formato da hora
+12 hour: 12 horas
+24 hour: 24 horas
+#
+# << MISSING >>
+# time-interval-help:
+# English text: Specifies how long the time blocks in the week view and day view will be.
+#
+#
+# << MISSING >>
+# Time interval:
+#
+# << MISSING >>
+# hour:
+minutes: minutos
+#
+# << MISSING >>
+# auto-refresh-help:
+# English text: When enabled, the day view, week view, month view, and list aunapproved pages will all automatically refresh themselves periodically.
+#
+#
+# << MISSING >>
+# Auto-refresh calendars:
+#
+# << MISSING >>
+# auto-refresh-time-help:
+# English text: If Auto-refresh is enabled, this specifies the time between each refresh.
+#
+#
+# << MISSING >>
+# Auto-refresh time:
+#
+# << MISSING >>
+# require-approvals-help:
+# English text: When enabled, a user must approve an event before it is displayed on their calendar (unless Display unapproved is enabled).  Note setting this to "No" will not turn off approvals for the Public Access calendar (if the Public Access calendar is enabled).
+#
+#
+# << MISSING >>
+# Require event approvals:
+display-unapproved-help: Especifica se amosar ou non os eventos non aprobados no seu calendario.<br /> Se selecciona "Si", entón amosaranse os eventos non aprobados no seu calendario (cunha cor de texto diferente).<br /> Se selecciona "Non", entón deberanse aproba-los eventos antes de que poidan ser amosados no seu calendario.
+Display unapproved: Amosar non aprobados
+display-week-number-help: Especifica se o número da semana (1-52) debería amosarse na vista do mes e na vista da semana.
+Display week number: Amosa-lo número da semana
+display-week-starts-on: Especifica se a semana comeza o Domingo ou o Luns. Se se selecciona Luns, enton os números da semana amosaránse no formato ISO.
+Week starts on: A semana comeza o
+Sunday: Domingo
+Monday: Luns
+work-hours-help: Especifica o devalo de horas que se amosarán na vista do día.
+Work hours: Horas de traballo
+From: De
+to: ata
+#
+# << MISSING >>
+# disable-priority-field-help:
+# English text: Selecting "Yes" will remove the "Priority" field from event information pages, providing a simpler interface for novices.
+#
+#
+# << MISSING >>
+# Disable Priority field:
+#
+# << MISSING >>
+# disable-access-field-help:
+# English text: Selecting "Yes" will remove the "Access" field from event information pages, providing a simpler interface for novices.
+#
+#
+# << MISSING >>
+# Disable Access field:
+#
+# << MISSING >>
+# disable-participants-field-help:
+# English text: Selecting "Yes" will remove the "Particpants" field from event information pages, preventing users from adding other users to their events.  If you enable this option, you may want to also disable the "Allow viewing other user's calendars" field also.
+#
+#
+# << MISSING >>
+# Disable Participants field:
+#
+# << MISSING >>
+# disable-repeating-field-help:
+# English text: Selecting "Yes" will remove the "Repeating" field when adding events.  This will provide a simpler interface for novices.
+#
+#
+# << MISSING >>
+# Disable Repeating field:
+#
+# << MISSING >>
+# popup-includes-siteextras-help:
+# English text: If enabled, allow custom event fields setup in the site_extras.php file will be displayed in event popups.
+#
+#
+# << MISSING >>
+# Display Site Extras in popup:
+#
+# << MISSING >>
+# allow-html-description-help:
+# English text: If enabled, users can enter HTML in the event description field.  If not enabled, the HTML tags will be escaped so as to appear as plain text.  Warning: Enabling this feature will allow users to reference images on other websites.
+#
+#
+# << MISSING >>
+# Allow HTML in Description:
+#
+# << MISSING >>
+# allow-view-other-help:
+# English text: Specifies whether one user may view another user's calendar.
+#
+#
+# << MISSING >>
+# Allow viewing other user's calendars:
+#
+# << MISSING >>
+# allow-public-access-help:
+# English text: When enabled, the calendar can be used as a read-only public calendar that does not require users to login.
+#
+#
+# << MISSING >>
+# Allow public access:
+#
+# << MISSING >>
+# public-access-view-others-help:
+# English text: When access the system with public access, specifies whether the user can view the calendar of another calendar user.
+#
+#
+# << MISSING >>
+# Public access can view other users:
+#
+# << MISSING >>
+# public-access-can-add-help:
+# English text: When enabled, users that access the system through Public Access will be able to add new events, but they will not show up in the calendar until an administrator approves the new event.
+#
+#
+# << MISSING >>
+# Public access can add events:
+#
+# << MISSING >>
+# public-access-add-requires-approval-help:
+# English text: Specifies whether events added via the public access account require approval before being displayed.
+#
+#
+# << MISSING >>
+# Public access new events require approval:
+#
+# << MISSING >>
+# public-access-sees-participants-help:
+# English text: If enabled, users accessing the calendar from the public account will be able to see event participants if they view details of an event.
+#
+#
+# << MISSING >>
+# Public access can view participants:
+#
+# << MISSING >>
+# allow-view-add-help:
+# English text: A '+' icon will be included in views, allowing users to quickly add events to other users' calendars.
+#
+#
+# << MISSING >>
+# Include add event link in views:
+#
+# << MISSING >>
+# allow-external-users-help:
+# English text: Specifies whether a non-calendar user can be added to an event.  This allows non-calendar users to be listed as event participants.
+#
+#
+# << MISSING >>
+# Allow external users:
+#
+# << MISSING >>
+# external-can-receive-notification-help:
+# English text: When external users are enabled and email usage is enabled, external users can receive email notifications when the event is added, updated or delete (if the external user's email address is provided).
+#
+#
+# << MISSING >>
+# External users can receive email notifications:
+#
+# << MISSING >>
+# external-can-receive-reminder-help:
+# English text: When external users are enabled and email usage is enabled, external users can receive email reminders (if the external user's email address is provided).
+#
+#
+# << MISSING >>
+# External users can receive email reminders:
+#
+# << MISSING >>
+# remember-last-login-help:
+# English text: When enabled, the user's login will be filled in for them on the login page (but not the password), and the user's preferences will be loaded (including their preferred colors and language selection).
+#
+#
+# << MISSING >>
+# Remember last login:
+#
+# << MISSING >>
+# conflict-check-help:
+# English text: Check for event conflicts (two events scheduled for the same time for the same person).  If you set this to "Yes", you will still be able to schedule two events at the same time after confirming a warning. If you set this to "No", no checking for conflicts will be done.  You probably want to set this to "Yes", so conflict checking occurs.
+#
+#
+# << MISSING >>
+# Check for event conflicts:
+#
+# << MISSING >>
+# conflict-months-help:
+# English text: If conflict checking is in place ("Check for event conflicts" is set to "No"), this specifies how many months into the future we should check for conflicts.  If you find adding events is taking a long time to process, reduce this number.
+#
+#
+# << MISSING >>
+# Conflict checking months:
+#
+# << MISSING >>
+# conflict-check-override-help:
+# English text: Allows users to override event conflicts and schedule two or more events for the same time.
+#
+#
+# << MISSING >>
+# Allow users to override conflicts:
+#
+# << MISSING >>
+# limit-appts-help:
+# English text: Allows the system administrator to set a system-wide limit on the number of appointments a single user can have on any single day.
+#
+#
+# << MISSING >>
+# Limit number of timed events per day:
+#
+# << MISSING >>
+# limit-appts-number-help:
+# English text: Specifies the maximum number of timed events a user can have in a single day.
+#
+#
+# << MISSING >>
+# Maximum timed events per day:
+#
+# << MISSING >>
+# Plugins:
+#
+# << MISSING >>
+# plugins-enabled-help:
+# English text: Enable plugin applications.
+#
+#
+# << MISSING >>
+# Enable Plugins:
+#
+# << MISSING >>
+# plugins-sort-key-help:
+# English text: Specifies a sort key for the plugin.  This allows the plugins to appear in a specific order.
+#
+#
+# << MISSING >>
+# Plugin:
+#
+# << MISSING >>
+# Groups:
+#
+# << MISSING >>
+# groups-enabled-help:
+# English text: Enables group support, allowing users to select users by groups.
+#
+#
+# << MISSING >>
+# Groups enabled:
+#
+# << MISSING >>
+# user-sees-his-group-help:
+# English text: If enabled, users will not see calendar users that are not in at least one of their groups.
+#
+#
+# << MISSING >>
+# User sees only his groups:
+#
+# << MISSING >>
+# Categories:
+#
+# << MISSING >>
+# categories-enabled-help:
+# English text: Enables support for event categories.
+#
+#
+# << MISSING >>
+# Categories enabled:
+#
+# << MISSING >>
+# Nonuser:
+# English text: Nonuser Calendars
+#
+#
+# << MISSING >>
+# nonuser-enabled-help:
+# English text: If enabled, admins will have the option to add nonuser calendars
+#
+#
+# << MISSING >>
+# Nonuser enabled:
+# English text: Nonuser Calendars Enabled
+#
+#
+# << MISSING >>
+# nonuser-list-help:
+# English text: Where to display the nonuser calendars in the participant list
+#
+#
+# << MISSING >>
+# Nonuser list:
+# English text: Display in participants list at
+#
+#
+# << MISSING >>
+# Top:
+#
+# << MISSING >>
+# Bottom:
+#
+# << MISSING >>
+# Reports:
+#
+# << MISSING >>
+# reports-enabled-help:
+# English text: If enabled, users will see a "Reports" section at the bottom of each page and will be allowed to create custom reports.  Additionally, admin users can create global reports that will appear at the bottom of all users' pages.
+#
+#
+# << MISSING >>
+# Reports enabled:
+#
+# << MISSING >>
+# Subscribe/Publish:
+#
+# << MISSING >>
+# subscriptions-enabled-help:
+# English text: Specifies if remote users can subscribe to a WebCalendar user's calendar, allowing them to see the WebCalendar user's events in their iCal-enabled application (such as Apple's iCal or Mozilla Calendar).
+#
+#
+# << MISSING >>
+# Allow remote subscriptions:
+Email: correo electrónico
+#
+# << MISSING >>
+# email-enabled-help:
+# English text: Turn on or off all sending of email for notification and reminders.  Set to "no", if your server is not properly setup to send mail.
+#
+#
+# << MISSING >>
+# Email enabled:
+#
+# << MISSING >>
+# email-default-sender:
+# English text: Specifies the email address to specify as the sender when sending out reminders.
+#
+#
+# << MISSING >>
+# Default sender address:
+#
+# << MISSING >>
+# Default user settings:
+email-event-reminders-help: Especifica se enviar ou non recordatorios de evento.
+Event reminders: Recordatorios de eventos
+email-event-added: Especifica se enviar ou non notificacións por correo electrónico cando se engade un evento ó seu calendario.
+Events added to my calendar: Eventos engadidos no meu calendario
+email-event-updated: Especifica se enviar ou non notificacións por correo electrónico cando se actualiza un evento do seu calendario.
+Events updated on my calendar: Eventos actualizados no meu calendario
+email-event-deleted: Especifica se enviar ou non notificacións por correo electrónico cando se borra un evento do seu calendario.
+Events removed from my calendar: Eventos borrados do meu calendario
+email-event-rejected: Especifica se enviar ou non notificacións por correo electrónico cando un participante rexeita un evento do seu calendario.
+Event rejected by participant: Evento rexeitado polo participante
+colors-help: Tódolas cores deben especificarse no formato hexadecimal "#RRGGBB" onde "RR" é o valor hexadecimal para o vermello, "GG" é o valor hexadecimal para o verde e "BB" é o valor hexadecimal para o azul
+Colors: Cores
+#
+# << MISSING >>
+# Allow user to customize colors:
+Document background: Fondo do documento
+Select: Seleccionar
+Document title: Título do documento
+#
+# << MISSING >>
+# Document text:
+#
+# << MISSING >>
+# Table grid color:
+#
+# << MISSING >>
+# Table header background:
+#
+# << MISSING >>
+# Table header text:
+Table cell background: Fondo da cela da táboa
+Table cell background for current day: Fondo da cela para hoxe
+#
+# << MISSING >>
+# Table cell background for weekends:
+#
+# << MISSING >>
+# Event popup background:
+#
+# << MISSING >>
+# Event popup text:
+
+
+###############################################
+# Page: activity_log.php
+#
+#
+# << MISSING >>
+# Activity Log:
+User: Usuario
+#
+# << MISSING >>
+# Calendar:
+Date: Data
+Time: Hora
+#
+# << MISSING >>
+# Event:
+#
+# << MISSING >>
+# Action:
+#
+# << MISSING >>
+# Event created:
+#
+# << MISSING >>
+# Event approved:
+#
+# << MISSING >>
+# Event rejected:
+#
+# << MISSING >>
+# Event updated:
+#
+# << MISSING >>
+# Event deleted:
+#
+# << MISSING >>
+# Notification sent:
+#
+# << MISSING >>
+# Reminder sent:
+Database error: Erro da base de datos
+#
+# << MISSING >>
+# Previous:
+#
+# << MISSING >>
+# Next:
+
+
+###############################################
+# Page: add_entry.php
+#
+Invalid entry id: id de entrada non válido
+This is a private event and may not be added to your calendar.: Este evento é privado e non o pode engadir ó seu calendario.
+Error adding event: Erro ó engadi-lo evento
+
+
+###############################################
+# Page: admin_handler.php
+#
+Error: Erro
+The following error occurred: Ocorreu o seguinte erro
+
+
+###############################################
+# Page: approve_entry.php
+#
+Error approving event: Erro ó aproba-lo evento
+
+
+###############################################
+# Page: category.php
+#
+#
+# << MISSING >>
+# Add:
+#
+# << MISSING >>
+# Category Name:
+#
+# << MISSING >>
+# Global:
+Delete: Borrar
+Are you sure you want to delete this entry?: ¿Está seguro de que quere borrar esta entrada?
+#
+# << MISSING >>
+# Add New Category:
+
+
+###############################################
+# Page: category_handler.php
+#
+
+
+###############################################
+# Page: datesel.php
+#
+
+
+###############################################
+# Page: day.php
+#
+#
+# << MISSING >>
+# Admin mode:
+#
+# << MISSING >>
+# Assistant mode:
+Generate printer-friendly version: Xenerar versión para imprimir
+Printer Friendly: Versión para imprimir
+
+
+###############################################
+# Page: del_entry.php
+#
+Hello: Ola
+An appointment has been canceled for you by: Foille cancelada unha cita por
+The subject was: O tema era
+Notification: Notificación
+
+
+###############################################
+# Page: edit_entry.php
+#
+Edit Entry: Modificar Entrada
+Add Entry: Engadir Entrada
+brief-description-help: Debería proporcionar unha descrición breve (arredor de 20 caracteres) do evento. Esta descrición representará o evento cando se amose no calendario.
+Brief Description: Descrición breve
+full-description-help: Esto debería completa-la descrición do evento. Esta información amósase cando o usuario ve o evento.
+Full Description: Descrición completa
+date-help: Especifica a data do evento.
+time-help: Especifica a hora do evento.<br /><i>Este campo pode deixarse en branco.</i>
+am: am
+pm: pm
+#
+# << MISSING >>
+# Untimed event:
+#
+# << MISSING >>
+# Timed event:
+#
+# << MISSING >>
+# All day event:
+duration-help: Especifica a duración (en horas:minutos) do evento.<br /><i>Este campo pode deixarse en branco.</i>
+Duration: Duración
+hours: horas
+priority-help: Especifica a prioridade do evento. As prioridades altas amosaránse en negriña.
+Priority: Prioridade
+Low: Baixa
+Medium: Media
+High: Alta
+access-help: Especifica o nivel de acceso do evento.<br /> <i>Público</i>: Todos poden ve-la descrición completa do evento.<br /><i>Confidencial</i>: Os demais poden ver que ten unha entrada para ese día e hora, pero non os detalles sobre a entrada.
+Access: Acceso
+Public: Público
+Confidential: Confidencial
+#
+# << MISSING >>
+# category-help:
+# English text: Specifies the category of the event.
+#
+#
+# << MISSING >>
+# Category:
+None: Ningunha
+days: días
+before event: antes do evento
+participants-help: Lista dos participantes desta entrada.
+Participants: Participantes
+#
+# << MISSING >>
+# external-participants-help:
+# English text: Specifies a list of participants for the event that are not calendar users.  The users should be listed one per line and can include an email address.  If an email address is specified, the user is eligible to receive notications and reminders.
+#
+#
+# << MISSING >>
+# External Participants:
+repeat-type-help: Seleccione con qué frecuencia se repetirá o evento.<i>Mensualmente (por días)</i> permite que o evento se repita o primeiro luns do mes, o terceiro xoves do mes, etc.<i>Mensualmente (por data)</i> permite que o evento se repita o mesmo día de cada mes.
+Repeat Type: Tipo de repetición
+Daily: Diariamente
+Weekly: Semanalmente
+Monthly: Mensualmente
+by day: por día
+#
+# << MISSING >>
+# by day (from end):
+by date: por data
+Yearly: Anualmente
+repeat-end-date-help: Especifica a data ata a qeu se debe repeti-lo evento.
+Repeat End Date: Data final de repetición
+Use end date: Data final de uso
+repeat-day-help: Especifica qué días da semana se repetirá o evento. Esta opción só se pode usar cando en <i>Tipo de Repetición</i> se selecciona <i>Semanalmente</i>.
+Repeat Day: Día de repetición
+for weekly: da semana
+Tuesday: Martes
+Wednesday: Mércores
+Thursday: Xoves
+Friday: Venres
+Saturday: Sábado
+repeat-frequency-help: Especifica con qué frecuencia se repetirá o evento.  O 1 por defecto indica que debería ter lugar cada vez.  Se se especifica 2, o evento terá lugar nas outras semanas (se en <i>Tipo de Repetición</i> se selecciona <i>Semanalmente</i>), terá lugar nos outros meses (se en <i>Tipo de Repetición</i> se selecciona <i>Mensualmente</i>), etc.
+Frequency: Frecuencia
+Delete entry: Borrar entrada
+You are not authorized to edit this entry: Non está autorizado para modificar esta entrada
+
+
+###############################################
+# Page: edit_layer.php
+#
+Edit Layer: Modificar Capa
+Add Layer: Engadir Capa
+Source: Fonte
+Color: Cor
+Duplicates: Duplicados
+Show layer events that are the same as your own: Amosa-los eventos da capa que son iguais ós seus
+Are you sure you want to delete this layer?: ¿Está seguro de que quere borrar esta capa?
+Delete layer: Borrar capa
+
+
+###############################################
+# Page: edit_layer_handler.php
+#
+#
+# << MISSING >>
+# You cannot create a layer for yourself:
+#
+# << MISSING >>
+# You can only create one layer for each user:
+
+
+###############################################
+# Page: edit_user.php
+#
+Edit User: Modificar Usuario
+Add User: Engadir Usuario
+Username: Nome de usuario
+First Name: Nome
+Last Name: Apelido
+E-mail address: enderezo de correo electrónico
+Password: Contrasinal
+again: outra vez
+Admin: Xestión
+Disabled for demo: Desactivado para a demo
+Change Password: Cambiar contrasinal
+New Password: Novo contrasinal
+Set Password: Fixar contrasinal
+
+
+###############################################
+# Page: edit_user_handler.php
+#
+#
+# << MISSING >>
+# Deleting users not supported:
+The passwords were not identical: Os contrasinais non eran idénticos
+You have not entered a password: Non introduciu ningún contrasinal
+
+
+###############################################
+# Page: export.php
+#
+Export: Exportar
+Export format: Formato ó que exportar
+Palm Pilot: Palm Pilot
+Export all dates: Exportar tódalas datas
+Start date: Data de comezo
+End date: Data final
+Modified since: Modificado dende
+
+
+###############################################
+# Page: export_handler.php
+#
+#
+# << MISSING >>
+# export format not defined or incorrect:
+
+
+###############################################
+# Page: group_edit.php
+#
+#
+# << MISSING >>
+# Unnamed Group:
+#
+# << MISSING >>
+# Add Group:
+#
+# << MISSING >>
+# Edit Group:
+#
+# << MISSING >>
+# Group name:
+Updated: Actualizado
+Created by: Creado por
+Users: Usuarios
+
+
+###############################################
+# Page: group_edit_handler.php
+#
+#
+# << MISSING >>
+# You must specify a group name:
+
+
+###############################################
+# Page: groups.php
+#
+#
+# << MISSING >>
+# Add New Group:
+
+
+###############################################
+# Page: icalfb.php
+#
+
+
+###############################################
+# Page: pref.php
+#
+Preferences: Preferencias
+#
+# << MISSING >>
+# to modify the preferences for the Public Access calendar:
+#
+# << MISSING >>
+# tz-help:
+# English text: Specifies how many hours to adjust the time from server time to local time.
+#
+#
+# << MISSING >>
+# Timezone Offset:
+#
+# << MISSING >>
+# Add N hours to:
+#
+# << MISSING >>
+# Subtract N hours from:
+#
+# << MISSING >>
+# same as:
+#
+# << MISSING >>
+# server time:
+#
+# << MISSING >>
+# Default Category:
+#
+# << MISSING >>
+# When I am the boss:
+#
+# << MISSING >>
+# Email me event notification:
+#
+# << MISSING >>
+# I want to approve events:
+#
+# << MISSING >>
+# allow-remote-subscriptions-help:
+# English text: Specifies if remote users can subscribe to your calendar, allowing them to see your events in a iCal-enabled application (such as Apple's iCal or Mozilla Calendar).
+#
+#
+# << MISSING >>
+# remote-subscriptions-url-help:
+# English text: Displays the URL remote users should use to subscribe to your calendar.
+#
+#
+# << MISSING >>
+# URL:
+Sun: Dom
+Mon: Lun
+Tue: Mar
+Wed: Mér
+Thu: Xov
+Fri: Ven
+Sat: Sab
+Save Preferences: Gravar preferencias
+
+
+###############################################
+# Page: help_bug.php
+#
+#
+# << MISSING >>
+# Report Bug:
+
+
+###############################################
+# Page: help_edit_entry.php
+#
+Adding/Editing Calendar Entries: Engadindo/Modificando Entradas do Calendario
+
+
+###############################################
+# Page: help_index.php
+#
+Help Index: Índice da axuda
+Layers: Capas
+#
+# << MISSING >>
+# Import:
+
+
+###############################################
+# Page: help_layers.php
+#
+#
+# << MISSING >>
+# Layers are useful for displaying other users' events in your own calendar.  You can specifiy the user and the color the events will be displayed in.:
+#
+# << MISSING >>
+# Add/Edit/Delete:
+#
+# << MISSING >>
+# Clicking the Edit Layers link in the admin section at the bottom of the page will allow you to add/edit/delete layers.:
+#
+# << MISSING >>
+# Specifies the user that you would like to see displayed in your calendar.:
+#
+# << MISSING >>
+# The text color of the new layer that will be displayed in your calendar.:
+#
+# << MISSING >>
+# If checked, events that are duplicates of your events will be shown.:
+#
+# << MISSING >>
+# Disabling:
+#
+# << MISSING >>
+# Press the Disable Layers link in the admin section at the bottom of the page to turn off layers.:
+#
+# << MISSING >>
+# Enabling:
+#
+# << MISSING >>
+# Press the Enable Layers link in the admin section at the bottom of the page to turn on layers.:
+
+
+###############################################
+# Page: help_admin.php
+#
+
+
+###############################################
+# Page: week.php
+#
+#
+# << MISSING >>
+# cont.:
+
+
+###############################################
+# Page: layers.php
+#
+#
+# << MISSING >>
+# to modify the layers settings for the:
+Layers are currently: As capas están actualmente
+Enabled: Activado
+Disabled: Desactivado
+Disable Layers: Desactivar Capas
+Enable Layers: Activar Capas
+Layer: Capa
+Edit layer: Modificar capa
+Add layer: Engadir capa
+
+
+###############################################
+# Page: layers_toggle.php
+#
+
+
+###############################################
+# Page: list_unapproved.php
+#
+View this entry: Ver esta entrada
+Approve this entry?: ¿Aprobar esta entrada?
+Approve/Confirm: Aprobar/Confirmar
+Reject this entry?: ¿Rexeitar esta entrada?
+Reject: Rexeitar
+#
+# << MISSING >>
+# No unapproved events for:
+Unapproved Events: Eventos sen aprobar
+#
+# << MISSING >>
+# Public Access:
+
+
+###############################################
+# Page: view_entry.php
+#
+every: cada
+2nd: 2º
+3rd: 3º
+4th: 4º
+5th: 5º
+1st: 1º
+#
+# << MISSING >>
+# last:
+Description: Descrición
+#
+# << MISSING >>
+# Status:
+#
+# << MISSING >>
+# Waiting for approval:
+#
+# << MISSING >>
+# Deleted:
+Rejected: Rexeitada
+#
+# << MISSING >>
+# External User:
+Approve/Confirm entry: Aprobar/Confirmar entrada
+Reject entry: Rexeitar entrada
+#
+# << MISSING >>
+# Set category:
+#
+# << MISSING >>
+# Edit repeating entry for all dates:
+#
+# << MISSING >>
+# Edit entry for this date:
+This will delete this entry for all users.: Esto borrará esta entrada para tódolos usuarios.
+#
+# << MISSING >>
+# Delete repeating event for all dates:
+#
+# << MISSING >>
+# Delete entry only for this date:
+Edit entry: Modificar entrada
+This will delete the entry from your calendar.: Esto borrará a entrada do seu calendario.
+Do you want to add this entry to your calendar?: ¿Quere engadir esta entrada ó seu calendario?
+This will add the entry to your calendar.: Esto engadirá a entrada ó seu calendario.
+Add to My Calendar: Engadir ó meu Calendario
+#
+# << MISSING >>
+# Email all participants:
+#
+# << MISSING >>
+# Show activity log:
+#
+# << MISSING >>
+# Hide activity log:
+#
+# << MISSING >>
+# Export this entry to:
+
+
+###############################################
+# Page: view_v.php
+#
+
+
+###############################################
+# Page: month.php
+#
+
+
+###############################################
+# Page: pref_handler.php
+#
+
+
+###############################################
+# Page: reject_entry.php
+#
+An appointment has been rejected by: Foille rexeitada unha cita por
+#
+# << MISSING >>
+# The description is:
+Title: WebCalendar
+
+
+###############################################
+# Page: search.php
+#
+Search: Buscar
+#
+# << MISSING >>
+# Advanced Search:
+Keywords: Palabras clave
+
+
+###############################################
+# Page: search_handler.php
+#
+You must enter one or more search keywords: Debe introducir unha ou máis palabras clave para a busca
+Search Results: Resultados da busca
+match found: coincidencia atopada
+matches found: coincidencias atopadas
+No matches found: Non se atoparon coincidencias
+
+
+###############################################
+# Page: select_user.php
+#
+View Another User's Calendar: Ve-lo Calendario de outro Usuario
+Go: Ir
+
+
+###############################################
+# Page: publish.php
+#
+
+
+###############################################
+# Page: users.php
+#
+denotes administrative user: denota usuario administrativo
+Add New User: Engadir Novo Usuario
+
+
+###############################################
+# Page: usersel.php
+#
+#
+# << MISSING >>
+# All:
+#
+# << MISSING >>
+# Reset:
+#
+# << MISSING >>
+# Remove:
+#
+# << MISSING >>
+# Ok:
+Cancel: Cancelar
+
+
+###############################################
+# Page: import.php
+#
+#
+# << MISSING >>
+# This form will allow you to import entries from the Palm Desktop Datebook.:
+#
+# << MISSING >>
+# Exclude private records:
+#
+# << MISSING >>
+# Datebook File:
+#
+# << MISSING >>
+# This form will import vCalendar (.vcs) 1.0 events:
+#
+# << MISSING >>
+# vCal File:
+#
+# << MISSING >>
+# This form will import iCalendar (.ics) events:
+#
+# << MISSING >>
+# iCal File:
+#
+# << MISSING >>
+# Overwrite Prior Import:
+
+
+###############################################
+# Page: year.php
+#
+
+
+###############################################
+# Page: view_d.php
+#
+
+
+###############################################
+# Page: view_m.php
+#
+
+
+###############################################
+# Page: view_w.php
+#
+
+
+###############################################
+# Page: views.php
+#
+#
+# << MISSING >>
+# Views:
+#
+# << MISSING >>
+# Add New View:
+
+
+###############################################
+# Page: views_edit.php
+#
+#
+# << MISSING >>
+# Unnamed View:
+#
+# << MISSING >>
+# Add View:
+#
+# << MISSING >>
+# Edit View:
+#
+# << MISSING >>
+# View Name:
+#
+# << MISSING >>
+# View Type:
+#
+# << MISSING >>
+# Week (Users horizontal):
+#
+# << MISSING >>
+# Week (Users vertical):
+#
+# << MISSING >>
+# Week (Timebar):
+#
+# << MISSING >>
+# Month (side by side):
+#
+# << MISSING >>
+# Month (on same calendar):
+
+
+###############################################
+# Page: nonusers.php
+#
+#
+# << MISSING >>
+# NONUSER_PREFIX not set:
+# English text: NONUSER_PREFIX has not been set in config.php.
+#
+#
+# << MISSING >>
+# NonUser:
+# English text: NonUser Calendars
+#
+#
+# << MISSING >>
+# Calendar ID:
+#
+# << MISSING >>
+# Add New NonUser Calendar:
+
+
+###############################################
+# Page: nonusers_handler.php
+#
+
+
+###############################################
+# Page: view_l.php
+#
+
+
+###############################################
+# Page: help_pref.php
+#
+#
+# << MISSING >>
+# default-category-help:
+# English text: Specifies the category a new event should default to.
+#
+
+
+###############################################
+# Page: report.php
+#
+Private: Privado
+#
+# << MISSING >>
+# Approved:
+#
+# << MISSING >>
+# Unknown:
+#
+# << MISSING >>
+# to manage reports for the Public Access calendar:
+#
+# << MISSING >>
+# Add new report:
+#
+# << MISSING >>
+# Invalid report id:
+#
+# << MISSING >>
+# Manage Reports:
+
+
+###############################################
+# Page: login.php
+#
+You must enter a login and password: Debe introducir un login e un contrasinal
+Save login via cookies so I don't have to login next time: Gravar login mediante cookies para non ter que volver introducilo a próxima vez
+Login: Entrar
+#
+# << MISSING >>
+# Access public calendar:
+cookies-note: <b>Nota:</b> Este programa necesita que as cookies estean activadas.
+
+
+###############################################
+# Page: views_edit_handler.php
+#
+#
+# << MISSING >>
+# You must specify a view name:
+
+
+###############################################
+# Page: week_details.php
+#
+New Entry: Nova entrada
+
+
+###############################################
+# Page: import_handler.php
+#
+#
+# << MISSING >>
+# Import Results:
+#
+# << MISSING >>
+# Events successfully imported:
+#
+# << MISSING >>
+# Events from prior import marked as deleted:
+#
+# << MISSING >>
+# Conflicting events:
+#
+# << MISSING >>
+# Errors:
+Back to My Calendar: Volver ó meu Calendario
+#
+# << MISSING >>
+# There was an error parsing the import file or no events were returned:
+#
+# << MISSING >>
+# The import file contained no data:
+The following conflicts with the suggested time: O seguinte entra en conflicto coa hora suxerida
+Unnamed Event: Evento sen nome
+Scheduling Conflict: Conflicto de horario
+conflicts with the following existing calendar entries: entra en conflicto coas seguintes entradas existentes no calendario
+#
+# << MISSING >>
+# Event Imported:
+
+
+###############################################
+# Page: edit_report.php
+#
+#
+# << MISSING >>
+# Tomorrow:
+#
+# << MISSING >>
+# Today:
+#
+# << MISSING >>
+# Yesterday:
+#
+# << MISSING >>
+# Day before yesterday:
+#
+# << MISSING >>
+# Next week:
+#
+# << MISSING >>
+# This week:
+#
+# << MISSING >>
+# Last week:
+#
+# << MISSING >>
+# Week before last:
+#
+# << MISSING >>
+# Next week and week after:
+#
+# << MISSING >>
+# This week and next week:
+#
+# << MISSING >>
+# Last week and this week:
+#
+# << MISSING >>
+# Last two weeks:
+#
+# << MISSING >>
+# Next month:
+#
+# << MISSING >>
+# This month:
+#
+# << MISSING >>
+# Last month:
+#
+# << MISSING >>
+# Month before last:
+#
+# << MISSING >>
+# Next year:
+#
+# << MISSING >>
+# This year:
+#
+# << MISSING >>
+# Last year:
+#
+# << MISSING >>
+# Year before last:
+#
+# << MISSING >>
+# Unnamed Report:
+#
+# << MISSING >>
+# Add Report:
+#
+# << MISSING >>
+# Edit Report:
+#
+# << MISSING >>
+# Report name:
+Current User: Usuario actual
+#
+# << MISSING >>
+# Include link in trailer:
+#
+# << MISSING >>
+# Include standard header/trailer:
+#
+# << MISSING >>
+# Date range:
+#
+# << MISSING >>
+# Include previous/next links:
+#
+# << MISSING >>
+# Include empty dates:
+#
+# << MISSING >>
+# Template variables:
+#
+# << MISSING >>
+# Page template:
+#
+# << MISSING >>
+# Day template:
+#
+# << MISSING >>
+# Event template:
+#
+# << MISSING >>
+# Are you sure you want to delete this report?:
+
+
+###############################################
+# Page: assistant_edit.php
+#
+#
+# << MISSING >>
+# Assistants:
+#
+# << MISSING >>
+# Yours assistants:
+
+
+###############################################
+# Page: view_t.php
+#
+
+
+###############################################
+# Page: assistant_edit_handler.php
+#
+
+
+###############################################
+# Page: adminhome.php
+#
+Account: Conta
+#
+# << MISSING >>
+# NonUser Calendars:
+#
+# << MISSING >>
+# Delete Events:
+#
+# << MISSING >>
+# Public Preferences:
+#
+# << MISSING >>
+# Unapproved Public Events:
+#
+# << MISSING >>
+# Administrative Tools:
+
+
+###############################################
+# Page: purge.php
+#
+#
+# << MISSING >>
+# Purging events for:
+#
+# << MISSING >>
+# Finished:
+#
+# << MISSING >>
+# Delete all events before:
+#
+# << MISSING >>
+# Check box to delete <b>ALL</b> events for a user:
+#
+# << MISSING >>
+# Are you sure you want to delete events for:
+
+
+###############################################
+# Page: help_import.php
+#
+#
+# << MISSING >>
+# Palm Desktop:
+#
+# << MISSING >>
+# It should be located in your Palm directory in <tt>datebook/datebook.dat</tt> in a subdirectory named by your username.:
+#
+# << MISSING >>
+# The following entries will not be imported:
+#
+# << MISSING >>
+# Entries older than the current date:
+#
+# << MISSING >>
+# Entries created in the Palm Desktop that have not been HotSync'd:
+#
+# << MISSING >>
+# Anything imported from Palm will be overwritten during the next import (unless the event date has passed).:
+#
+# << MISSING >>
+# Therefore, updates should be made in the Palm Desktop.:
+#
+# << MISSING >>
+# vCal:
+#
+# << MISSING >>
+# The following formats have been tested:
+#
+# << MISSING >>
+# Palm Desktop 4:
+#
+# << MISSING >>
+# Lotus Organizer 6:
+#
+# << MISSING >>
+# Microsoft Outlook 2002:
+#
+# << MISSING >>
+# iCalendar:
+#
+# << MISSING >>
+# Enabling <b>Overwrite Prior Import</b> will cause events imported previously that used the same UID as an event from the new import file to be marked as deleted.  This should allow an updated iCalendar file to be imported without creating duplicates.:
+
+
+###############################################
+# Page: edit_report_handler.php
+#
+#
+# << MISSING >>
+# Variable N not found:
+
+
+###############################################
+# Page: edit_entry_handler.php
+#
+A new appointment has been made for you by: Foille engadida unha nova cita por
+An appointment has been updated by: Foille actualizada unha cita por
+The subject is: O tema é
+Please look on: Por favor mire en
+to accept or reject this appointment: para aceptar ou rexeitar esta cita
+to view this appointment: para ver esta cita
+Your suggested time of: A súa hora suxerida de
+
+
+###############################################
+# Page: set_entry_cat.php
+#
+#
+# << MISSING >>
+# You have not added any categories:
+#
+# << MISSING >>
+# Set Category:
+
+
+###############################################
+# Page: edit_template.php
+#
+#
+# << MISSING >>
+# Edit Custom Script/Stylesheet:
+#
+# << MISSING >>
+# Edit Custom Header:
+#
+# << MISSING >>
+# Edit Custom Trailer:
+
+
+###############################################
+# Page: includes/trailer.php
+#
+Go to: Ir a
+My Calendar: O Meu Calendario
+Logout: Saír
+Another User's Calendar: Calendario de outro usuario
+Add New Entry: Engadir nova entrada
+#
+# << MISSING >>
+# Manage Views:
+#
+# << MISSING >>
+# Manage calendar of:
+
+
+###############################################
+# Page: includes/connect.php
+#
+
+
+###############################################
+# Page: includes/user.php
+#
+Invalid login: Login inválido
+#
+# << MISSING >>
+# Invalid user login:
+
+
+###############################################
+# Page: includes/site_extras.php
+#
+#
+# << MISSING >>
+# Send Reminder:
+
+
+###############################################
+# Page: includes/translate.php
+#
+
+
+###############################################
+# Page: includes/user-ldap.php
+#
+
+
+###############################################
+# Page: includes/user-nis.php
+#
+
+
+###############################################
+# Page: includes/help_trailer.php
+#
+
+
+###############################################
+# Page: includes/dbtable.php
+#
+
+
+###############################################
+# Page: includes/init.php
+#
+#
+# << MISSING >>
+# charset:
+
+
+###############################################
+# Page: includes/functions.php
+#
+This event is confidential: Este evento é confidencial
+#
+# << MISSING >>
+# exceeds limit of XXX events per day:
+#
+# << MISSING >>
+# You have XXX unapproved events:
+January: Xaneiro
+February: Febreiro
+March: Marzo
+April: Abril
+May_: Maio
+June: Xuño
+July: Xullo
+August: Agosto
+September: Setembro
+October: Outubro
+November: Novembro
+Jan: Xan
+Feb: Feb
+Mar: Mar
+Apr: Abr
+May: Mai
+Jun: Xuñ
+Jul: Xul
+Aug: Ago
+Sep: Set
+Oct: Out
+Nov: Nov
+Dec: Dec
+
+
+###############################################
+# Page: includes/js/admin.php
+#
+#
+# << MISSING >>
+# Server URL is required:
+#
+# << MISSING >>
+# Server URL must end with '/':
+Invalid color for document background: Color non válido para o fondo do documento
+Invalid color for document title: Color non válido para o título do documento
+Invalid color for table cell background: Color non válido para o fondo da cela
+#
+# << MISSING >>
+# Invalid color for table grid:
+#
+# << MISSING >>
+# Invalid color for table header background:
+#
+# << MISSING >>
+# Invalid color for table text background:
+#
+# << MISSING >>
+# Invalid color for event popup background:
+#
+# << MISSING >>
+# Invalid color for event popup text:
+Invalid color for table cell background for today: Color non válido para o fondo da cela de hoxe
+Color format should be '#RRGGBB': O formato da cor debería ser '#RRGGBB'
+
+
+###############################################
+# Page: includes/js/edit_entry.php
+#
+You have not entered a Brief Description: Non introduciu ningunha descrición breve
+You have not entered a valid time of day: Non introduciu unha hora válida do día
+The time you have entered begins before your preferred work hours.  Is this correct?: A hora que introduciu comeza antes das súas horas de traballo indicadas. ¿Está ben?
+
+
+###############################################
+# Page: includes/js/edit_layer.php
+#
+Invalid color: Color non válido
+
+
+###############################################
+# Page: includes/js/pref.php
+#
+
+
+###############################################
+# Page: tools/send_reminders.php
+#
+This is a reminder for the event detailed below.: Esto é un recordatorio para o evento descrito máis abaixo.
+Reminder: Recordatorio

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/German.txt
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/German.txt	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/German.txt	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,1019 @@
+# Use this as a starting point to translate this application into
+# another language.  The format is 'English text: translated text'
+# There cannot be a ':' in the English text.
+#
+# Translator: Ralph Boßler <vertrieb at sylphen.com>,
+# Peter Huetmannsberger <huetmann at site38.ping.at>
+# Last update: 1 Dec 2004 by Markus Egartner <edv'at'kh-hallein.at>
+# Last update: 20 Jan 2005 by Markus Egartner <edv'at'kh-hallein.at>
+# Last update: 25 Jan 2005 by Markus Egartner <edv'at'kh-hallein.at>
+# Last update: 22 Feb 2005 by Markus Egartner <edv'at'kh-hallein.at>
+# Last update: 07 Mär 2005 by Markus Egartner <edv'at'kh-hallein.at>
+# Last update: 26 Apr 2005 by Markus Egartner <edv'at'kh-hallein.at> with Martin
+# Last update: 4 May 2005 by Markus Egartner <edv'at'kh-hallein.at>
+# Last update: 17 May 2005 by Markus Egartner <edv'at'kh-hallein.at>
+# Last update: 25 July 2005 by Markus Egartner <edv'at'kh-hallein.at> refering correction of the "delete" function
+# Translation last updated on 07-25-2005
+
+
+###############################################
+# Specify a charset (will be sent within meta tag for each page)
+#
+charset: iso-8859-1
+
+
+###############################################
+# Page: day.php
+#
+Next: Nächsten
+Previous: Vorherige
+Admin mode: Administratormodus
+Assistant mode: Assistentenmodus
+Generate printer-friendly version: Erzeuge Version zum Drucken
+Printer Friendly: Druckansicht
+
+
+###############################################
+# Page: import_handler.php
+#
+Import Results: Importierte Ergebnisse
+Events successfully imported: Termine erfolgreich importiert
+Events from prior import marked as deleted: Termine vom vorigen Import als "gelöscht" markiert
+Conflicting events: Terminüberschneidung
+Errors: Fehler
+Error: Fehler
+There was an error parsing the import file or no events were returned: Beim Einlesen der Import-Datei trat ein Fehler auf oder es wurden keine Einträge zurückgegeben
+The import file contained no data: Die importierte Datei enthielt keine Daten
+Database error: Datenbank Fehler
+The following conflicts with the suggested time: Folgende Konflikte mit dem vorgeschlagenen Termin
+Unnamed Event: unbenanntes Ereignis
+Scheduling Conflict: Terminüberschneidung
+conflicts with the following existing calendar entries: überschneidet sich mit folgenden Kalender-Einträgen
+Event Imported: Termin importiert
+View this entry: Eintrag ansehen
+
+
+###############################################
+# Page: del_entry.php
+#
+You are not authorized: Sie haben keine Berechtigung hierfür
+Hello: Guten Tag 
+An appointment has been canceled for you by: Einer ihrer Termine wurde storniert von 
+The subject was: Der Betreff lautete
+Date: Datum
+Time: Uhrzeit
+Notification: Benachrichtigung
+
+
+###############################################
+# Page: month.php
+#
+Sun: So
+Mon: Mo
+Tue: Di
+Wed: Mi
+Thu: Do
+Fri: Fr
+Sat: Sa
+
+
+###############################################
+# Page: edit_report.php
+#
+Tomorrow: Morgen
+Today: Heute
+Yesterday: Gestern
+Day before yesterday: Vorgestern
+Next week: Nächste Woche
+This week: Diese Woche
+Last week: Letzte Woche
+Week before last: Vorletzte Woche
+Next week and week after: Nächste und übernächste Woche
+This week and next week: Diese und nächste Woche
+Last week and this week: Letzte und diese Woche
+Last two weeks: Letzten zwei Wochen
+Next month: Nächster Monat
+This month: Dieser Monat
+Last month: Letzter Monat
+Month before last: Vorletzter Monat
+Next year: Nächstes Jahr
+This year: Dieses Jahr
+Last year: Letztes Jahr
+Year before last: Vorletztes Jahr
+Invalid report id: Ungültige Bericht ID
+Unnamed Report: neuer Bericht
+Add Report: Bericht hinzufügen
+Edit Report: Bericht editieren
+Report name: Berichtsname
+Current User: aktueller Benutzer
+User: Benutzer
+Global: Global
+Yes: Ja
+No: Nein
+Include link in trailer: inklusive Linkverknüpfung in der Navigationsleiste
+Include standard header/trailer: inklusive Standard-Kopf/Navigationsleiste
+Date range: Datumsbereich
+Category: Kategorie
+None: keine
+Include previous/next links: inlusive vorige(r)/nächste(r) Link(s)
+Include empty dates: inklusive leere Daten
+Template variables: Vorlagen Variablen
+Page template: Seiten Vorlagen
+Day template: Tagesvorlage
+Event template: Terminvorlage
+Save: Speichern
+Delete: Löschen
+Are you sure you want to delete this report?: Wollen Sie diese Bericht wirklich löschen?
+
+
+###############################################
+# Page: groups.php
+#
+Add New Group: Benutzergruppe hinzufügen
+
+
+###############################################
+# Page: group_edit_handler.php
+#
+You must specify a group name: Sie müssen einen Gruppennamen anlegen
+Changes successfully saved: Änderungen erfolgreich gespeichert
+
+
+###############################################
+# Page: list_unapproved.php
+#
+Approve/Confirm: Eintrag bestätigen
+Approve this entry?: Eintrag bestätigen?
+Reject: Ablehnen
+Reject this entry?: Eintrag ablehnen?
+Are you sure you want to delete this entry?: Wollen Sie diesen Eintrag wirklich löschen?
+No unapproved events for: Keine unbestätigten Termine für
+Unapproved Events: Unbestätigte Termine
+Public Access: öffentlicher Zugang
+
+
+###############################################
+# Page: views_edit.php
+#
+Unnamed View: neue Ansicht
+Add View: Ansicht hinzufügen
+Edit View: Ansicht editieren
+View Name: Ansichtsname
+View Type: Ansichtstyp
+Day: Tag
+Week (Users horizontal): Woche (Teilnehmer horizontal)
+Week (Users vertical): Woche (Teilnehmer vertikal)
+Week (Timebar): Woche (Zeitschiene)
+Month (Timebar): Monat (Zeitschiene)
+Month (side by side): Monat (seitenweise) (Teilnehmer horizontal)
+Month (on same calendar): Monat (am gleichen Kalender)
+preview: Vorschau (Ansicht)
+Users: Benutzer
+Selected: Ausgewählte(r)
+All: alle
+Select: Auswählen 
+Add: Hinzufügen
+
+
+###############################################
+# Page: pref_handler.php
+#
+The following error occurred: Folgender Fehler trat auf
+
+
+###############################################
+# Page: adminhome.php
+#
+System Settings: Systemeinstellungen
+Preferences: Voreinstellungen
+Account: Konto
+Assistants: Assistenten
+Categories: Kategorien
+Views: Ansichten
+Layers: Layers
+Reports: Berichte
+Delete Events: Lösche Termine (Purging)
+Activity Log: Aktivitäten Protokoll
+Public Preferences: Voreinstellungen öffentl. Zugang 
+Unapproved Public Events: Unbestätigte öffentl. Termine
+Administrative Tools: Administrative Werkzeuge
+
+
+###############################################
+# Page: approve_entry.php
+#
+Error approving event: Fehler bei überprüfung des Ereignisses
+
+
+###############################################
+# Page: report.php
+#
+All day event: Termin für den GANZEN Tag
+Untimed event: Termin OHNE Zeitangabe
+Private: Privat
+This event is confidential: Dies ist ein privater Termin 
+minutes: Minute(n)
+Low: Niedrig
+Medium: Normal
+High: Hoch
+Waiting for approval: Warten auf überprüfung
+Deleted: gelöscht
+Rejected: Eintrag abgelehnt, wird nicht teilnehmen
+Approved: bestätigt
+Unknown: unbekannt
+Click here: Klicken Sie hier
+to manage reports for the Public Access calendar: zum verwalten der Berichte für den öffentlichen Kalender
+Add new report: Neuen Bericht hinzufügen
+cont.: beinhalt.
+Manage Reports: Berichte verwalten
+Admin: Admin
+
+
+###############################################
+# Page: add_entry.php
+#
+Invalid entry id: ungültiger Eintrag
+This is a private event and may not be added to your calendar.: Das ist ein PRIVATER Termin und kann Ihrem Kalender nicht hinzugefügt werden.
+Error adding event: Fehler beim Hinzufügen eines Termines
+
+
+###############################################
+# Page: week_details.php
+#
+Week: Woche
+New Entry: Neuer Eintrag
+am: Vormittag
+pm: Nachmittag
+
+
+###############################################
+# Page: group_edit.php
+#
+Unnamed Group: neue Benutzergruppe
+Add Group: Benutzergruppe hinzufügen
+Edit Group: Benutzergruppe editieren
+Group name: Benutzergruppenname
+Updated: geändert
+Created by: erstellt von
+
+
+###############################################
+# Page: login.php
+#
+Invalid login: Benutzername oder Passwort falsch
+You must enter a login and password: Sie müssen einen Benutzernamen und ein Kennwort eingeben.
+Username: Benutzername
+Password: Kennwort
+Save login via cookies so I don't have to login next time: Login in Cookie abspeichern, um die Anmeldung beim nächsten Mal automatisch zu überspringen.
+Login: Anmelden
+Access public calendar: Zugang öffentlicher Kalender
+cookies-note: Hinweis: Für diese Anwendung müssen Cookies im Browser akzeptiert werden.
+
+
+###############################################
+# Page: layers.php
+#
+Help: Hilfe
+Layers are currently: Layers sind
+Enabled: aktiv
+Disable Layers: Layers abschalten
+Disabled: inaktiv
+Enable Layers: Layers aktivieren
+to modify the layers settings for the: ändern der Layer Einstellungen für den
+calendar: Kalender
+Add layer: Layer hinzufügen
+Layer: Layer
+Edit layer: Layer editieren
+Edit: ändern
+Delete layer: Layer löschen
+Are you sure you want to delete this layer?: Wollen Sie diesen Layer wirklich löschen?
+Source: Quelle
+Color: Farbe
+Duplicates: Duplikate
+
+
+###############################################
+# Page: view_entry.php
+#
+every: jede(n)
+2nd: 2.
+3rd: 3.
+4th: 4.
+5th: 5.
+Month: Monat
+1st: 1.
+last: letzte(r),(s)
+by date: nach Datum
+Year: Jahr
+Confidential: Privat 
+Description: Beschreibung
+Status: Status
+Repeat Type: Art der Wiederholung
+Duration: Dauer
+Priority: Priorität
+Access: Zugriff
+Public: öffentlich
+days: Tage
+day: Tag
+hours: Stunden
+hour: Stunde
+minute: Minute
+before event: vor dem Termin
+Participants: Benutzer
+External User: Externer Benutzer
+Approve/Confirm entry: Eintrag bestätigen?
+Reject entry: Eintrag ablehnen?
+Set category: Kategorie zuweisen
+Edit repeating entry for all dates: ändern ALLER wiederkehrenden Termine des Eintrags
+Edit entry for this date: ändern des Termines für DIESES Datum
+Delete repeating event for all dates: Löschen ALLER wiederkehrenden Termine des Eintrags 
+This will delete this entry for all users.: Dieser Eintrag wird für alle Benutzer gelöscht.
+Delete entry only for this date: Löschen des Termines nur für DIESES Datum
+Edit entry: Eintrag ändern
+Delete entry: Eintrag löschen
+Copy entry: Eintrag kopieren
+This will delete the entry from your calendar.: Dieser Eintrag wird von Ihrem Kalender gelöscht.
+Add to My Calendar: Zu meinem Kalender hinzufügen
+Do you want to add this entry to your calendar?: Wollen Sie diesen Eintrag zu Ihrem Kalender hinzufügen?
+This will add the entry to your calendar.: Bitte bestätigen, um den Eintrag hinzuzufügen.
+Email all participants: Email an alle Benutzer
+Show activity log: Aktivitäten Protokoll ansehen
+Hide activity log: Aktivitäten Protokoll ausblenden
+Calendar: Kalender
+Action: Aktion
+Event created: Termin hinzugefügt
+Event approved: Termin bestätigt
+Event rejected: Termin abgelehnt
+Event updated: Termin aktualisiert
+Event deleted: Termin gelöscht
+Notification sent: Benachrichtigung gesendet
+Reminder sent: Erinnerung gesendet
+Export this entry to: Diesen Eintrag exportieren nach
+Palm Pilot: Palm Pilot
+Export: Export
+
+
+###############################################
+# Page: edit_report_handler.php
+#
+Variable N not found: Variable N nicht gefunden
+
+
+###############################################
+# Page: admin.php
+#
+Note: Bemerkung
+Your user preferences: Ihre Benutzereinstellungen
+may be affecting the appearance of this page.: übertragen sich auf das Erscheingsbild dieser Seite.
+to not use your user preferences when viewing this page: um Ihre Benutzereinstellungen auf dieser Seite NICHT anzuzeigen.
+are being ignored while viewing this page.: werden ignoriert während der Anzeige dieser Seite.
+to load your user preferences when viewing this page: laden Ihrer Systemeinstellungen wenn diese Seite angezeigt wird.
+Settings: Einstellungen
+Groups: Benutzergruppen
+NonUser Calendars: 'Zentrale' - Kalender
+Other: Sonstiges
+Email: Email
+colors-help: Alle Farben können im Format "#RRGGBB" eingegeben werden. Hierbei steht "RR" für den hexadezimalen Wert von Rot, "GG" für Grün und "BB" für Blau.
+Colors: Farben
+app-name-help: Gibt den Titel für die Titelleiste des Browsers, für alle Seiten des Kalenders und die Startseite des Kalenders an. Der Titel wird in die Sprachdatei eingetragen und kann für andere Spracheinstellungen abgeändert werden.
+Application Name: Anwendungsbezeichnung
+server-url-help: Gibt die Standard Server-Url an und steht in der Betreffzeile von Erinnerungen sowie von Emails die über den Kalender verschickt werden.
+Server URL: Serveradresse
+language-help: Gibt die Standard Sprache an.
+Language: Sprache
+Your browser default language is: Ihre Standard-Sprache ist
+fonts-help: definiert die Standard-Schriftarten (z.B. "Arial, Helvetica")
+Fonts: Schriftart
+custom-script-help: Erlaubt Einträge von benutzerdefinierten Javascript- oder Stylesheet Texten welche im HTML "Kopf"-Abschnitt auf jeder Seite eingefügt werden.
+Custom script/stylesheet: Benutzerdefinierte Scripte/Stylesheets
+custom-header-help: Ermöglicht benutzerdefinierte HTML-Abschnitte am ANFANG jeder Seite
+Custom header: Benutzerdefinierte Kopfzeile
+custom-trailer-help: Ermöglicht benutzerdefinierte HTML-Abschnitte am ENDE jeder Seite.
+Custom trailer: Benutzerdefinierte Fußzeile
+preferred-view-help: Gibt die bevorzugte Ansicht an (Tag, Woche, Monat oder Jahr).
+Preferred view: Bevorzugte Ansicht
+display-weekends-help: Zeigt die Wochenenden in der Wochenansicht an.
+Display weekends in week view: Wochenenden in der Wochenansicht anzeigen
+yearly-shows-events-help: Zeigt Tage mit Terminen in der Monats- und Jahresansicht HERVORGEHOBEN (FETT) an
+Display days with events in bold in month and year views: Zeigt Tage mit Terminen in der Monats- und Jahresansicht HERVORGEHOBEN (FETT) an
+display-desc-print-day-help: Beinhaltet in der Druckansicht die Beschreibungen der Termine in der Tagesansicht
+Display description in printer day view: Beschreibungsanzeige von Terminen in der Druckansicht von Tagesansichten
+date-format-help: Legt ein spezielles Datumsformat fest.
+Date format: Datumsformat
+December: Dezember
+time-format-help: Gibt an welches Zeit-Format benutzt wird: 12-stündiges: Zeigt Zeiten als 3am, 8:30pm, etc. 24-stündiges: Zeigt Zeiten als 3.00, 20.30, etc.
+Time format: Zeit-Format
+12 hour: 12-stündig
+24 hour: 24-stündig
+time-interval-help: Legt das Zeitintervall in der Tages,- Wochen- und Monatsansicht fest.
+Time interval: Zeitintervall
+auto-refresh-help: Falls aktiviert, Tages,- Wochen- und Monats-Ansicht, und "unbestätigte Termine" werden automatisch aktualisiert.
+Auto-refresh calendars: Kalender aktualisieren
+auto-refresh-time-help: Falls die Kalenderaktualisierung aktiviert ist, kann hier das Intervall der Aktualisierung bestimmt werden.
+Auto-refresh time: Aktualisierungsintervall
+require-approvals-help: Wenn diese Option ausgewählt ist, muß der Benutzer den Termin bestätigen, um auf seinem Kalender anzeigen zu lassen (vorausgesetzt "unbestätigte Termine anzeigen"). Anmerkung: Wenn diese Option auf "Nein" gesetzt ist, wirkt sich dies nicht auf etwaige aktiverte "öffentliche Kalender" aus.
+Require event approvals: Terminbestätigung verlangen
+display-unapproved-help: Gibt an, ob unbestätigte Termine in Ihrem Kalender angezeigt werden sollen. Wenn "Ja", werden unbestätigte Termine in einer anderen Farbe angezeigt. Wenn "Nein", müssen unbestätigte Termine erst bestätigt werden, um angezeigt zu werden. 
+Display unapproved: Unbestätigte Termine anzeigen
+display-week-number-help: Gibt an, ob die Wochennummer (1-52) in der Monats- und Wochenansicht angezeigt werden soll.
+Display week number: Wochennummer anzeigen
+display-week-starts-on: Gibt an ob die Wochenansicht am Sonntag oder Montag beginnen soll. Wenn Montag gewählt wird, werden die Wochennummern als ISO Wochennummern ausgegeben.
+Week starts on: Wochenbeginn am
+Sunday: Sonntag
+Monday: Montag
+work-hours-help: Zeitabschnitt für die Anzeige der Tagessicht.
+Work hours: Arbeitszeit
+From: Von
+to: bis
+disable-priority-field-help: Wenn sie mit "JA" bestätigen wird das Prioritätenfeld von Ihren Termininformationsseiten entfernt, um eine einfachere Handhabung zu gewährleisten.
+Disable Priority field: Prioritätenfeld deaktivieren
+disable-access-field-help: Wenn sie mit "JA" bestätigen wird das Zugriffsfeld von Ihren Termininformationsseiten entfernt, um eine einfachere Handhabung zu gewährleisten.
+Disable Access field: Zugriffsfeld deaktivieren
+disable-participants-field-help: Wenn sie mit "JA" bestätigen wird das Teilnehmerfeld von Ihren Termininformationsseiten entfernt, um zu verhindern das Benutzer Einträge anderer Teilnehmer zu Ihrem Kalender hinzufügen. Ausserdem können Sie mit der Option "Ansicht anderer Benutzer-Kalender zulassen" verhindern das Benutzer den Kalender anderer Teilnehmer sehen können.
+Disable Participants field: Benutzerfeld deaktivieren
+disable-repeating-field-help: Wenn sie mit "JA" bestätigen wird das Wiederholungsfeld bei "Einträge hinzufügen" entfernt, um eine einfachere Handhabung zu gewährleisten.
+Disable Repeating field: Terminwiederholungsfeld deaktivieren
+popup-includes-siteextras-help: Falls aktiviert: Ermöglicht die Anzeige benutzerdefinierter Felder die in site_extra.php aktiviert wurden.
+Display Site Extras in popup: Anzeige der 'Site Extras' im Pop-Up
+allow-html-description-help: Falls aktiviert: Benutzer kann HTML in der Beschreibung der Termine eintragen. Wenn nicht aktiviert, werden die HTML-Tags als Plain Text angezeigt. Warnung: Bei Aktivierung ermöglicht es dem Benutzer Bildverknüpfungen auf andere Webseiten.
+Allow HTML in Description: Ermöglicht HTML-Beschreibung der Termine
+allow-view-other-help: Gibt an, ob die Benutzer die Kalender anderer Teilnehmer sehen kann.
+Allow viewing other user's calendars: Ansicht anderer Benutzer-Kalender zulassen
+allow-view-add-help: Ein "+" Icon wird bei Ansichten beigefügt, welches Teilnehmern ein schnelles hinzufügen von Terminen bei anderen Kalendern ermöglicht
+Include add event link in views: Beeinhaltet LINK-Adressen von Terminen bei den Ansichten
+remember-last-login-help: Mit dieser Einstellung merkt sich der Kalender den Benutzernamen für das nächste Anmelden (nicht das Passwort) sowie die benutzerdefinierten Voreinstellungen.
+Remember last login: letzte Anmeldung merken
+conflict-check-help: Prüft Terminüberschneidungen (Zwei Termine die für dieselbe Person zur gleichen Zeit gesetzt wurden). Wenn die Option auf "JA" gesetzt wurde kann man Terminüberschneidungen über ein Eingabefenster zulassen. Wenn Sie "NEIN" gewählt wurde werden Konflikte nicht geprüft. Es wird empfohlen die Option auf "JA" zu setzen.
+Check for event conflicts: Terminüberschneidungen prüfen
+conflict-months-help: Gibt an wie viele Monate im voraus auf Zeitüberschneidungen geprüft werden soll. Wenn das Hinzufügen von Einträgen zu lange dauert verringern Sie die Anzahl der Monate die im voraus geprüft werden sollen.
+Conflict checking months: Terminüberschneidungsprüfung (in Monaten)
+conflict-check-override-help: Erlaubt Teilnehmern Terminkonflikte zu überschreiben und das Planen von zwei oder mehreren Terminen zu gleichen Zeit
+Allow users to override conflicts: Erlaubt Teilnehmern Konfikte zu überschreiben
+limit-appts-help: Erlaubt dem Systemadministrator eine Anzahl systemweiter Limitierungen von Terminen für einzelne Teilnehmer zu setzen
+Limit number of timed events per day: Anzahl der gezeiteten Termine pro Tag
+limit-appts-number-help: Definiert die max. Anzahl der gezeiteten Termine für einen Teilnehmer pro Tag
+Maximum timed events per day: Maximale Anzahl der zu vergebenen Termine pro Tag
+timed-evt-len-help: Spezifiziert die Methode der Zeitangabe als Zeitdauer oder Endzeitpunkt
+Specify timed event length by: Spezifiziert die Zeitspanne eines Termins als
+End Time: Endzeitpunkt
+Plugins: "Plugins" (Erweiterungen)
+plugins-enabled-help: Hilfe für "Plugins" (Erweiterungen) aktivieren
+Enable Plugins: "Plugins" (Erweiterungen) aktivieren
+plugins-sort-key-help: Hilfe für "Sortierschlüssel-Plugins" (Erweiterungen)
+Plugin: "Plugin" (Erweiterung)
+allow-public-access-help: Wenn diese Option gewählt ist, kann der Kalender als "öffentlicher Kalender" ohne Schreibzugriff und ohne Login verwendet werden.
+Allow public access: öffentlichen Zugriff erlauben
+public-access-default-visible: Termine vom öffentlichen Kalender werden automatisch bei jedem Benutzer angezeigt
+Public access visible by default: öffentlicher Zugang für ALLE Benutzer sichtbar
+public-access-default-selected: Beim Hinzufügen eines neuen Termins wird "öffentlicher Zugang" als Standard Benutzer ausgewählt
+Public access is default participant: öffentlicher Zugang als Standard Benutzer
+public-access-view-others-help: Gibt an ob ein öffentlicher Benutzer die Kalender anderer Benutzer sehen kann.
+Public access can view other users: öffentlicher Benutzer kann andere Benutzer ansehen
+public-access-can-add-help: Diese Einstellung ermöglicht es einem öffentlichen Benutzer einen Termin einzutragen, dieser muss jedoch durch den Administrator bestätigt werden um angezeigt werden zu können 
+Public access can add events: öffentlicher Benutzer kann Termine hinzufügen
+public-access-add-requires-approval-help: Legt fest, ob hinzugefügte Termine via öffentlichen Zugang eine Genehmigung benötigen, bevor diese angezeigt werden
+Public access new events require approval: Erfordert Genehmigung bei einem NEUEN öffentlichen Termin
+public-access-sees-participants-help: Falls aktiviert, werden im öffentlichen Kalender in der detailierten Terminanzeige alle Benutzer angezeigt.
+Public access can view participants: öffentlicher Benutzer kann andere Benutzer in der detailierten Terminanzeige ansehen
+groups-enabled-help: Diese Einstellung erlaubt Benutzern andere Benutzer über Benutzergruppen auszuwählen
+Groups enabled: Benutzergruppen aktivieren
+user-sees-his-group-help: Diese Einstellung verhindert, daß Benutzer Teilnehmer sehen, die nicht zu ihrer Benutzergruppe gehören.
+User sees only his groups: Teilnehmer können nur ihre eigene Benutzergruppe sehen
+nonuser-enabled-help: Falls aktiviert: Administratoren haben die Möglichkeit 'Zentrale'-Kalender hinzuzufügen
+Nonuser enabled: 'Zentrale'-Kalender aktiviert
+nonuser-list-help: Wo sollen die 'Zentralen'-Kalender in der Teilnehmerliste angezeigt werden?
+Nonuser list: Wo sollen die 'Zentralen' Kalender in der Teilnehmerliste angezeigt werden
+Top: Oben
+Bottom: Unten
+reports-enabled-help: Wenn aktiviert, finden die Benutzer am Ende jeder Seite einen Eintrag "Berichte" welcher für das Erstellen von Berichten verwendet werden kann. Zusätzlich kann der "Administrator" allgemeine Berichte erstellen, die für jeden Benutzer am Ende jeder Seite zur Verfügung stehen.
+Reports enabled: Berichte aktivieren
+subscriptions-enabled-help: Bestimmt ob 'REMOTE'-Teilnehmer andere WebKalender von Teilnehmern abonnieren, und somit dessen Termine und ihre 'iCal'-aktiven Anwendungen (wie Apple's iCal oder Mozilla-Kalender) sehen können.
+Allow remote subscriptions: Erlaubt 'REMOTE'-Abos
+categories-enabled-help: Aktiviert Unterstützung für Terminkategorien.
+Categories enabled: Kategorien aktivieren
+allow-external-users-help: Externer Benutzer können die Hilfe aufrufen
+Allow external users: Externe Benutzer zulassen
+external-can-receive-notification-help: Externer Benutzer kann Hilfe für Benachrichtigungen erhalten
+External users can receive email notifications: Externe Benutzer können E-Mail Benachrichtigungen empfangen
+external-can-receive-reminder-help: Externe Benutzer können Hilfe für E-Mail Erinnerungen empfangen
+External users can receive email reminders: Externe Benutzer können E-Mail Erinnerungen empfangen
+email-enabled-help: Die Option "JA" ermöglicht das Versenden von Emails sowie von Erinnerungen über den Kalender. Wenn Sie keinen Mailserver installiert haben setzen Sie diese Option auf "NEIN".
+Email enabled: Email aktivieren
+email-default-sender: Standard Email-Absender
+Default sender address: Standard Absenderadresse
+Default user settings: Standardbenutzer Einstellungen
+email-event-reminders-help: Gibt an ob Erinnerungen versendet werden sollen oder nicht.
+Event reminders: an Termin erinnern
+email-event-added: Gibt an ob Emailbenachrichtigungen versendet werden sollen, wenn ein Termin zu ihrem Kalender HINZUGEFüGT wurde.
+Events added to my calendar: Termine, die zu meinem Kalender HINZUGEFüGT wurden
+email-event-updated: Gibt an ob Emailbenachrichtigungen versendet werden sollen, wenn ein Termin auf ihrem Kalender VERäNDERT wurde.
+Events updated on my calendar: Termine, die auf meinem Kalender AKTUALISIERT wurden
+email-event-deleted: Gibt an ob Emailbenachrichtigungen versendet werden sollen, wenn ein Termin von ihrem Kalender ENTFERNT wurde.
+Events removed from my calendar: Termine, die von meinem Kalender ENTFERNT wurden
+email-event-rejected: Gibt an ob Emailbenachrichtigungen versendet werden sollen, wenn ein Benutzer die Teilnahme an einem Termin ABGELEHNT hat.
+Event rejected by participant: Termine, die von ANDEREN Benutzern ENTFERNT wurden
+Allow user to customize colors: Den Benutzern das ändern der Farbeinstellungen erlauben
+Enable gradient images for background colors: Aktiviern der stufenweisen Farbänderung für Hintergrundfarben
+Not available: Nicht verfügbar
+Document background: Hintergrund
+Document title: Titel
+Document text: Textfarbe der Webkalenderseiten
+Table grid color: Tabellen-Gitterfarbe
+Table header background: Hintergrund Tabellen-Kopfzeile
+Table header text: Textfarbe Tabellen-Kopfzeile
+Table cell background: Tabellen-Hintergrund
+Table cell background for current day: Tabellen-Hintergrund für "Heute"
+Table cell background for weekends: Hintergrundfarbe für Wochenenden
+Event popup background: Hintergrundfarbe Termin-PopUp
+Event popup text: Textfarbe Termin-PopUp
+
+
+###############################################
+# Page: help_admin.php
+#
+Display days with events in bold in year view: Zeigt Tage MIT Terminen in der Jahresübersicht HERVORGEHOBEN (FETT) an
+Nonuser: 'Zentrale'-Kalender
+user-customize-color: Spezifiziert, ob Benutzern erlaubt wird, ihre eigenen Farbeneinstellungen zu ändern
+enable-gradient-help: verwendet die stufenweise Farbänderungen für Zellenhintergründe
+Manually Entering Color Values: Eigene Farbwerte eingeben
+
+
+###############################################
+# Page: activity_log.php
+#
+Event: Termin
+Events: Termine
+
+
+###############################################
+# Page: usersel.php
+#
+Reset: Zurücksetzen
+Remove: Entfernen
+Ok: Ok
+Cancel: Abbrechen
+
+
+###############################################
+# Page: assistant_edit.php
+#
+Your assistants: Ihre Assistenten
+
+
+###############################################
+# Page: views.php
+#
+Add New View: Neue Ansicht hinzufügen
+
+
+###############################################
+# Page: import.php
+#
+Import: Import
+Import format: Importformat
+Exclude private records: Private Einträge ausschliessen
+Overwrite Prior Import: Vorigen Import überschreiben
+
+
+###############################################
+# Page: edit_template.php
+#
+Edit Custom Script/Stylesheet: ändern der benutzerdefinierten Scripte/Stylesheets
+Edit Custom Header: ändern der benutzerdefinierten KOPFZEILE
+Edit Custom Trailer: ändern der benutzerdefinierten FUßZEILE
+
+
+###############################################
+# Page: reject_entry.php
+#
+An appointment has been rejected by: Ein Termin wurde zurückgewiesen von
+The description is: Die Beschreibung lautet
+Title: Titel
+
+
+###############################################
+# Page: help_index.php
+#
+Help Index: Hilfe-Index
+Adding/Editing Calendar Entries: Hinzufügen/ändern von Kalender-Einträgen
+Report Bug: Fehlermeldung
+Report Bug local: Fehlerbericht an den Administrator senden (lokal)
+
+
+###############################################
+# Page: select_user.php
+#
+View Another User's Calendar: Kalender anderer Benutzer anzeigen 
+Go: Zeigen 
+
+
+###############################################
+# Page: help_edit_entry.php
+#
+Brief Description: Kurzbeschreibung
+brief-description-help: Kurzbeschreibung (ca. 20 Zeichen) des Termines. Diese erscheint, wenn der Kalender angezeigt wird.
+Full Description: ausführliche Beschreibung
+full-description-help: Komplette Beschreibung des Termines. Diese Information sieht der Benutzer beim Termin.
+date-help: Gibt das Datum des Termines an.
+time-help: Gibt die Uhrzeit des Termines an. Kann leer gelassen werden.
+duration-help: Gibt die Dauer des Termines in Minuten an. Kann leer gelassen werden.
+end-time-help: Definiert die Zeit des Termines als Endzeitpunkt.
+priority-help: Gibt die Priorität des Termines an. Termine mit hoher Priorität werden fett angezeigt.
+access-help: Gibt den Zugriff auf den Termin an. öffentlich: Jeder kann alle Details des Termines sehen. Privat: Andere können sehen, dass ein Termin existiert, können jedoch keine Details ansehen.
+participants-help: Gibt die Benutzer des Termines an.
+repeat-type-help: Wählen Sie wie oft ein Termin wiederholt werden soll. Monatlich (tagesorientiert) wiederholt einen Termin jeden 1. Montag des Monats, jeden 3. Donnerstag des Monats, etc.
+Repeat End Date: Ende der wiederkehrenden Termine
+repeat-end-date-help: Gibt an bis zu welchem Datum der Termin wiederholt werden soll.
+Repeat Day: Tag der Wiederholung
+repeat-day-help: Gibt an, an welchen Wochentagen der Termin wiederholt werden soll. Dies gilt nur wenn Art der Wiederholung auf Wöchentlich gesetzt ist.
+Frequency: Häufigkeit
+repeat-frequency-help: Gibt an wie oft ein Termin wiederholt werden soll. Standard ist "1",  der Termin wird immer wiederholt. Wenn sie "2" auswählen wird der Termin jede 2. Woche wiederholt (wenn Art der Wiederholung auf Wöchentlich gesetzt ist), jeden 2. Monat (wenn Art der Wiederholung auf Monatlich gesetzt ist), etc.
+
+
+###############################################
+# Page: edit_user_handler.php
+#
+Deleting users not supported: Gelöschte Benutzer werden nicht unterstützt
+The passwords were not identical: Die eingebenen Kennwörter stimmten nicht überein
+You have not entered a password: Sie haben kein Kennwort eingegeben
+Username can not be blank: Benutzername darf nicht LEER sein
+
+
+###############################################
+# Page: edit_nonusers_handler.php
+#
+Calendar ID: Kalender ID
+word characters only: können nur Buchstaben und Ziffern sein (a-zA-Z_0-9)
+
+
+###############################################
+# Page: edit_layer_handler.php
+#
+You cannot create a layer for yourself: Sie können sich selber als Layer NICHT hinzufügen
+You can only create one layer for each user: Sie können nur jeweils EINEN Benutzer pro Layer hinzufügen
+
+
+###############################################
+# Page: pref.php
+#
+Save Preferences: Voreinstellungen speichern
+to modify the preferences for the Public Access calendar: um die Voreinstellungen des öffentlichen Kalenders zu ändern
+tz-help: Hilfe für Zeitzonen
+Timezone Offset: Zeitzonenausgleich
+Add N hours to: Hinzufügen von N Stunden zu
+Subtract N hours from: Abziehen von N Stunden von
+same as: gleich wie
+server time: Serverzeit
+Default Category: Standard Kategorie
+When I am the boss: Wenn ich der Chef bin
+Email me event notification: Benachrichtigen bei Terminbestätigung
+I want to approve events: Ich möchte Termine überprüfen
+Subscribe/Publish: unterschreiben/veröffentlichen
+allow-remote-subscriptions-help: Bestimmt ob 'REMOTE'-Teilnehmer IHREN WebKalender abonnieren dürfen, und somit dessen Termine und ihre 'iCal'-aktiven Anwendungen (wie Apple's iCal oder Mozilla-Kalender) sehen können.
+remote-subscriptions-url-help: Zeigt die URL, die ein 'REMOTE'-Teilnehmer zum Abonnieren Ihres Kalenders verwenden soll
+URL: URL
+
+
+###############################################
+# Page: help_layers.php
+#
+Layers are useful for displaying other users' events in your own calendar.  You can specifiy the user and the color the events will be displayed in.: Layers sind sinnvoll um andere Termine von anderen Benutzern im eigenen Kalender anzuzeigen. Sie können den Benutzer und die Farbe des Termines selber spezifizieren.
+Add/Edit/Delete: Hinzufügen/ändern/Löschen
+Clicking the Edit Layers link in the admin section at the bottom of the page will allow you to add/edit/delete layers.: Drücken Sie "Layer editieren" im Admin-User um Layers HINZUFüGEN/äNDERN/LöSCHEN zu können (am Ende der Seite).
+Specifies the user that you would like to see displayed in your calendar.: Definieren Sie Ihren gewünschten Benutzer den Sie in Ihren Kalender sehen möchten.
+The text color of the new layer that will be displayed in your calendar.: Die Farbe Ihres neuen Layers wird in Ihrem Kalender angezeigt.
+If checked, events that are duplicates of your events will be shown.: Wenn aktiviert, werden Ihre Termin-Duplikate angezeigt. 
+Disabling: Deaktivieren
+Press the Disable Layers link in the admin section at the bottom of the page to turn off layers.: Drücken Sie "Layer abschalten" im Admin-User um die Layers ABZUSCHALTEN (am Ende der Seite).
+Enabling: Aktivieren
+Press the Enable Layers link in the admin section at the bottom of the page to turn on layers.: Drücken Sie "Layer aktivieren" im Admin-User um die Layers zu AKTIVIEREN (am Ende der Seite).
+
+
+###############################################
+# Page: edit_entry_handler.php
+#
+A new appointment has been made for you by: Es wurde Ihnen ein neuer Termin eingetragen von -->
+An appointment has been updated by: Ein Termin wurde geändert von
+The subject is: Die Beschreibung lautet 
+Please look on: Bitte konsultieren Sie Ihren
+to accept or reject this appointment: um den Termin zu bestätigen/abzulehnen.
+to view this appointment: Termin anschauen
+Your suggested time of: Ihre Eintragung von 
+
+
+###############################################
+# Page: edit_nonusers.php
+#
+NONUSER_PREFIX not set: 'NONUSER_PREFIX' nicht definiert
+Edit User: Benutzer ändern
+Add User: Benutzer hinzufügen
+First Name: Vorname
+Last Name: Nachname
+
+
+###############################################
+# Page: search.php
+#
+Search: Suche
+Keywords: Stichwörter
+Advanced Search: Erweiterte Suche
+
+
+###############################################
+# Page: set_entry_cat.php
+#
+You have not added any categories: Sie haben noch keine Kategorien angelegt
+Set Category: Kategorie zuweisen
+
+
+###############################################
+# Page: edit_layer.php
+#
+Edit Layer: Layer editieren
+Add Layer: Layer hinzufügen
+Show layer events that are the same as your own: Zeige Layer welche die gleichen Termine sind wie die eigenen
+
+
+###############################################
+# Page: help_pref.php
+#
+default-category-help: Legt eine Standardkategorie für einen neuen Termin fest.
+email-boss-notifications-help: legt fest ob Chefs Terminbenachrichtigungen als Email bekommen.
+boss-approve-event-help: legt fest ob der Chef die eingetragenen Termine des Assistenten bestätigen muß
+
+
+###############################################
+# Page: view_d.php
+#
+No users for this view: Keine gültigen Benutzer für diese Ansicht
+
+
+###############################################
+# Page: export_handler.php
+#
+export format not defined or incorrect: exportiertes Format nicht definiert oder ungültig
+
+
+###############################################
+# Page: edit_user.php
+#
+E-mail address: E-Mail Adresse
+again: Wiederholung
+Disabled for demo: für DEMO deaktiviert
+Are you sure you want to delete this user?: Soll dieser Benutzer wirklich gelöscht werden?
+Change Password: Kennwort ändern
+New Password: Neues Kennwort
+Set Password: Setze Kennwort
+
+
+###############################################
+# Page: help_import.php
+#
+Palm Desktop: Palm Desktop
+This form will allow you to import entries from the Palm Desktop Datebook.: Dieses Formular erlaubt das Importieren der Kalendereinträge ihres Palm Desktop Datebook.
+It should be located in your Palm directory in <tt>datebook/datebook.dat</tt> in a subdirectory named by your username.: Es sollte in ihrem Palm Ordner <tt>datebook/datebook.dat</tt> in einem Unterverzeichnis mit Ihrem Usernamen sein.
+The following entries will not be imported: Folgende Einträge werden nicht importiert
+Entries older than the current date: Einträge die älter als das aktuelle Datum sind
+Entries created in the Palm Desktop that have not been HotSync'd: Hinzugefügte Einträge im Palm Desktop die nicht synchronisiert wurden (HotSync'd)
+Anything imported from Palm will be overwritten during the next import (unless the event date has passed).: Alles was Sie von ihrem Palm importiert haben, wird beim nächsten mal überschrieben (außer das Datum des Termines ist vorbei).
+Therefore, updates should be made in the Palm Desktop.: Deshalb sollten änderungen auf dem Palm/Desktop durchgeführt werden.
+vCal: vCalendar
+This form will import vCalendar (.vcs) 1.0 events: Dieses Formular importiert vCalendar (.vcs) 1.0 Einträge
+The following formats have been tested: Folgende Formate wurden getestet
+Palm Desktop 4: Palm Desktop 4
+Lotus Organizer 6: Lotus Organizer 6
+Microsoft Outlook 2002: Microsoft Outlook 2002
+iCalendar: iCalendar
+This form will import iCalendar (.ics) events: Dieses Formular importiert iCalendar (.ics) Einträge
+Enabling <b>Overwrite Prior Import</b> will cause events imported previously that used the same UID as an event from the new import file to be marked as deleted.  This should allow an updated iCalendar file to be imported without creating duplicates.: Aktiviertes <b>Vorigen Import überschreiben</b> bewirkt, daß vorige importierte Termine, welche die selbe UID verwenden, wie ein Termin von der neuen Import-Datei, als "löschen" markiert sind. Das erlaubt ein Importieren einer aktuellen iCalendar Datei ohne Duplikate zu erzeugen.
+
+
+###############################################
+# Page: export.php
+#
+Export format: Exportformat
+Include all layers: Beinhaltet ALLE Layers
+Export all dates: Alle Einträge exportieren
+Start date: Anfangsdatum
+End date: Enddatum
+Modified since: änderungen ab
+
+
+###############################################
+# Page: users.php
+#
+Add New User: Neuen Benutzer hinzufügen
+denotes administrative user: kennzeichnet administrativen Benutzer
+
+
+###############################################
+# Page: search_handler.php
+#
+You must enter one or more search keywords: Sie müssen ein oder mehrere Stichwörter eingeben
+Search Results: Suchergebnis
+match found: Eintrag gefunden
+matches found: Einträge gefunden
+No matches found: Keine Einträge gefunden
+
+
+###############################################
+# Page: views_edit_handler.php
+#
+You must specify a view name: Sie müssen einen Ansichtsnamen angeben
+
+
+###############################################
+# Page: nonusers.php
+#
+Add New NonUser Calendar: Neuen 'Zentralen-Kalender' hinzufügen
+
+
+###############################################
+# Page: category.php
+#
+Category Name: Kategorie Name
+Add New Category: Neue Kategorie hinzufügen
+
+
+###############################################
+# Page: edit_entry.php
+#
+Edit Entry: Eintrag ändern
+Add Entry: Eintrag hinzufügen
+Details: Details
+Repeat: Wiederholung
+category-help: Definiert die Kategorie eines Termines.
+Timed event: Termin MIT Zeitangabe
+Availability: Verfügbarkeit
+external-participants-help: Externe Benutzer (optional mit einer "name at domain.de" Emailadresse) pro Zeile.
+External Participants: Externe Benutzer
+Daily: Täglich
+Weekly: Wöchentlich
+Monthly: Monatlich
+by day: tagesorientiert
+by day (from end): tagesorientiert (vom Ende)
+Yearly: Jährlich
+Use end date: Ende an diesem Tag
+Tuesday: Dienstag
+Wednesday: Mittwoch
+Thursday: Donnerstag
+Friday: Freitag
+Saturday: Samstag
+You are not authorized to edit this entry: Sie haben keine Berechtigung diesen Eintrag zu ändern.
+
+
+###############################################
+# Page: purge.php
+#
+Preview: Vorschau
+Purging events for: Lösche Termine für
+Finished: Abgeschlossen
+Check box to delete <b>ALL</b> events for a user: Aktivieren zum Löschen <b>ALLER</b> Termine für einen Teilnehmer
+Delete all events before: Lösche alle Termine vor dem
+Preview delete: Keine Vorschau der zu löschenden Termine
+Are you sure you want to delete events for: Wollen Sie wirklich die Termine löschen für
+Records deleted from: Einträge werden gelöscht für
+
+
+###############################################
+# Page: includes/help_trailer.php
+#
+Go to: Gehe zu
+
+
+###############################################
+# Page: includes/functions.php
+#
+exceeds limit of XXX events per day: überschrittenes Limit von XXX Termin(e) pro Tag
+You have XXX unapproved events: Sie haben XXX unbestätigte(n) Termin(e)
+January: Januar
+February: Februar
+March: März
+April: April
+May_: Mai
+June: Juni
+July: Juli
+August: August
+September: September
+October: Oktober
+November: November
+Jan: Jan
+Feb: Feb
+Mar: Mär
+Apr: Apr
+May: Mai
+Jun: Jun
+Jul: Jul
+Aug: Aug
+Sep: Sep
+Oct: Okt
+Nov: Nov
+Dec: Dez
+All Attendees: Alle Teilnehmer
+Busy: Beschäftigt
+Tentative: Vorläufig
+
+
+###############################################
+# Page: includes/config.php
+#
+English: Englisch
+Basque: Baskisch
+Bulgarian: Bulgarisch
+Catalan: Katalanisch
+Chinese (Traditonal/Big5): Chinesisch (Traditionell)
+Chinese (Simplified/GB2312): Chinesisch (Einfach)
+Czech: Tschechisch
+Danish: Dänisch
+Dutch: Holländisch
+Estonian: Estnisch
+Finnish: Finnisch
+French: Französisch
+Galician: Gälisch
+German: Deutsch
+Holo (Taiwanese): Taiwanesisch
+Hungarian: Ungarisch
+Icelandic: Isländisch
+Italian: Italienisch
+Japanese: Japanisch
+Korean: Koreanisch
+Norwegian: Norwegisch
+Polish: Polnisch
+Portuguese: Portugiesisch
+Portuguese/Brazil: Portugiesisch/Brasilianisch
+Romanian: Rumänisch
+Russian: Russisch
+Spanish: Spanisch
+Swedish: Schwedisch
+Turkish: Türkisch
+
+
+###############################################
+# Page: includes/site_extras.php
+#
+Send Reminder: Erinnerung senden
+
+
+###############################################
+# Page: includes/trailer.php
+#
+My Calendar: Mein Kalender
+Back to My Calendar: Zurück zu meinem Kalender
+Another User's Calendar: Kalender anderer Benutzer 
+Add New Entry: Eintrag hinzufügen
+Logout: Abmelden
+Manage calendar of: Kalender verwalten von
+
+
+###############################################
+# Page: includes/user.php
+#
+incorrect password: Ungültiges Passwort
+no such user: kein solcher Benutzer
+Invalid user login: Ungültige Anmeldung
+
+
+###############################################
+# Page: includes/js/admin.php
+#
+Server URL is required: Server URL wird benötigt
+Server URL must end with '/': Server URL muß mit einem '/' enden
+Invalid work hours: Ungültige Arbeitszeit
+Invalid color for document background: Ungültige Farbe für Hintergrund
+Invalid color for document title: Ungültige Farbe für Titel
+Invalid color for table cell background: Ungültige Farbe für Tabellen-Hintergrund
+Invalid color for table grid: Ungültige Farbe für Tabellen-Gitter
+Invalid color for table header background: Ungültige Farbe für Tabellen-Kopfzeile Hintergrund
+Invalid color for table text background: Ungültige Farbe für Tabellentext Hintergrund
+Invalid color for event popup background: Ungültige Farbe für Terminerinnerungs-Hintergrund
+Invalid color for event popup text: Ungültige Farbe für Terminerinnerungs-Text
+Invalid color for table cell background for today: Ungültige Farbe für Tabellen-Hintergrund 'Heute'
+Color format should be '#RRGGBB': Farbformat sollte '#RRGGBB' sein
+
+
+###############################################
+# Page: includes/js/availability.php
+#
+Change the date and time of this entry?: Datum und Uhrzeit für diesen Eintrag ändern?
+
+
+###############################################
+# Page: includes/js/edit_layer.php
+#
+Invalid color: Ungültige Farbe
+
+
+###############################################
+# Page: includes/js/edit_entry.php
+#
+You have not entered a Brief Description: Sie haben keine Kurzbeschreibung eingegeben
+You have not entered a valid time of day: Sie haben keine gültige Zeit für diesen Tag eingetragen
+The time you have entered begins before your preferred work hours.  Is this correct?: Die eingetragene Zeit beginnt vor der normalen Arbeitszeit. Ist das korrekt?
+Please add a participant: Bitte einen Teilnehmer hinzufügen
+
+
+###############################################
+# Page: tools/send_reminders.php
+#
+This is a reminder for the event detailed below.: Das ist eine Erinnerung für den unten aufgeführten (detailierten) Termin
+Reminder: Erinnerung

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Holo-Big5.txt
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Holo-Big5.txt	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Holo-Big5.txt	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,1710 @@
+# Use this as a starting point to translate this application into
+# another language.  The format is "English text: translated text"
+# There cannot be a ":" in the English text.
+# Translated by:  Henry H. Tan-Tenn <share2002nov at lomaji.com>
+# Translation last updated on 03-10-2004
+
+
+###############################################
+# Specify a charset (will be sent within meta tag for each page)
+#
+charset: Big5
+
+
+
+###############################################
+# Page: admin.php
+#
+System Settings: ¨t²Î³]©w
+You are not authorized: ±z¥¼¸g±ÂÅv
+#
+# << MISSING >>
+# Note:
+#
+# << MISSING >>
+# Your user preferences:
+#
+# << MISSING >>
+# may be affecting the appearance of this page.:
+#
+# << MISSING >>
+# Click here:
+#
+# << MISSING >>
+# to not use your user preferences when viewing this page:
+#
+# << MISSING >>
+# are being ignored while viewing this page.:
+#
+# << MISSING >>
+# to load your user preferences when viewing this page:
+Save: Àx¦s
+Help: »¡©ú
+Settings: ³]©w¤¤
+#
+# << MISSING >>
+# app-name-help:
+# English text: Specifies the name of the application that will appear in the browser title bar for all pages and on the login page.  The value you specify here will be looked up in the translations file allowing you to provide different titles for different languages.
+#
+#
+# << MISSING >>
+# Application Name:
+#
+# << MISSING >>
+# server-url-help:
+# English text: Specifies the base URL for the application.  This will be included when sending out email reminders and notifications.
+#
+#
+# << MISSING >>
+# Server URL:
+language-help: Specifies which language to use.
+Language: »y¨t
+Your browser default language is: §A e ÂsÄý¾¹¹w³] e »y¨t¬O
+#
+# << MISSING >>
+# fonts-help:
+# English text: Specifies a list of system fonts to use (such as "Arial, Helvetica")
+#
+Fonts: ¦r«¬
+#
+# << MISSING >>
+# custom-script-help:
+# English text: Allows entry of custom Javascript or stylesheet text that will be inserted into the HTML "head" section of every page.
+#
+#
+# << MISSING >>
+# Custom script/stylesheet:
+Yes: ¦n
+No: Mai
+#
+# << MISSING >>
+# Edit:
+#
+# << MISSING >>
+# custom-header-help:
+# English text: Allows a custom HTML snippet to be included in the top of every page.
+#
+#
+# << MISSING >>
+# Custom header:
+#
+# << MISSING >>
+# custom-trailer-help:
+# English text: Allows a custom HTML snippet to be included at the end of every page.
+#
+#
+# << MISSING >>
+# Custom trailer:
+preferred-view-help: Specifies the default view (Day, Week, Month, or Year).
+Preferred view: À˵ø¿ï¾Ü
+Day: ¤é
+Week: ¶g
+Month: ¤ë
+Year: ¦~
+#
+# << MISSING >>
+# display-weekends-help:
+# English text: Include weekends when viewing a week.
+#
+#
+# << MISSING >>
+# Display weekends in week view:
+#
+# << MISSING >>
+# yearly-shows-events-help:
+# English text: On the yearly view, display days that contain events in a bold font.
+#
+#
+# << MISSING >>
+# Display days with events in bold in year view:
+#
+# << MISSING >>
+# display-desc-print-day-help:
+# English text: Include event descriptions in printer-friendly version of day view.
+#
+#
+# << MISSING >>
+# Display description in printer day view:
+#
+# << MISSING >>
+# date-format-help:
+# English text: Specifies the preferred date format.
+#
+#
+# << MISSING >>
+# Date format:
+December: 12¤ë
+time-format-help: Specifies which time format to use: <br /><i>12 hour:</i> Display times as 3am, 8:30pm, etc.  <br /><i>24 hour:</i> Display times as 300, 2030, etc.
+Time format: ®É¶¡®æ¦¡
+12 hour: 12®É¨î
+24 hour: 24®É¨î
+#
+# << MISSING >>
+# time-interval-help:
+# English text: Specifies how long the time blocks in the week view and day view will be.
+#
+#
+# << MISSING >>
+# Time interval:
+#
+# << MISSING >>
+# hour:
+minutes: ¤ÀÄÁ
+#
+# << MISSING >>
+# auto-refresh-help:
+# English text: When enabled, the day view, week view, month view, and list aunapproved pages will all automatically refresh themselves periodically.
+#
+#
+# << MISSING >>
+# Auto-refresh calendars:
+#
+# << MISSING >>
+# auto-refresh-time-help:
+# English text: If Auto-refresh is enabled, this specifies the time between each refresh.
+#
+#
+# << MISSING >>
+# Auto-refresh time:
+#
+# << MISSING >>
+# require-approvals-help:
+# English text: When enabled, a user must approve an event before it is displayed on their calendar (unless Display unapproved is enabled).  Note setting this to "No" will not turn off approvals for the Public Access calendar (if the Public Access calendar is enabled).
+#
+#
+# << MISSING >>
+# Require event approvals:
+display-unapproved-help: Specifies whether unapproved events are displayed in your calendar.<br /> If set to "Yes", then unapproved events will be displayed in your calendar (in a different text color).<br /> If set to "No", then unapproved events must be approved before they are displayed in your calendar.
+Display unapproved: Åã¥Ü¥¼®Ö­ã e 
+display-week-number-help: Specifies whether the week number (1-52) should be displayed in the month view and the week view.
+Display week number: Åã¥Ü¶g¼Æ(¥H¦~­pºâ)
+display-week-starts-on: Specifies whether the week starts on Sunday or Monday.  If Monday is specified, then week numbers will be ISO week numbers.
+Week starts on: ¨C¶g¶}©l©ó
+Sunday: §«ô¤é
+Monday: «ô¤@
+work-hours-help: Specifies the time range to display for the day view.
+Work hours: ¤ë¾ä¥iÅã¥Ü¤§¤u§@®É¶¡
+From: ¦Û
+to: ¦Ü
+#
+# << MISSING >>
+# disable-priority-field-help:
+# English text: Selecting "Yes" will remove the "Priority" field from event information pages, providing a simpler interface for novices.
+#
+#
+# << MISSING >>
+# Disable Priority field:
+#
+# << MISSING >>
+# disable-access-field-help:
+# English text: Selecting "Yes" will remove the "Access" field from event information pages, providing a simpler interface for novices.
+#
+#
+# << MISSING >>
+# Disable Access field:
+#
+# << MISSING >>
+# disable-participants-field-help:
+# English text: Selecting "Yes" will remove the "Particpants" field from event information pages, preventing users from adding other users to their events.  If you enable this option, you may want to also disable the "Allow viewing other user's calendars" field also.
+#
+#
+# << MISSING >>
+# Disable Participants field:
+#
+# << MISSING >>
+# disable-repeating-field-help:
+# English text: Selecting "Yes" will remove the "Repeating" field when adding events.  This will provide a simpler interface for novices.
+#
+#
+# << MISSING >>
+# Disable Repeating field:
+#
+# << MISSING >>
+# popup-includes-siteextras-help:
+# English text: If enabled, allow custom event fields setup in the site_extras.php file will be displayed in event popups.
+#
+#
+# << MISSING >>
+# Display Site Extras in popup:
+#
+# << MISSING >>
+# allow-html-description-help:
+# English text: If enabled, users can enter HTML in the event description field.  If not enabled, the HTML tags will be escaped so as to appear as plain text.  Warning: Enabling this feature will allow users to reference images on other websites.
+#
+#
+# << MISSING >>
+# Allow HTML in Description:
+#
+# << MISSING >>
+# allow-view-other-help:
+# English text: Specifies whether one user may view another user's calendar.
+#
+#
+# << MISSING >>
+# Allow viewing other user's calendars:
+#
+# << MISSING >>
+# allow-public-access-help:
+# English text: When enabled, the calendar can be used as a read-only public calendar that does not require users to login.
+#
+Allow public access: ¤¹·Ç¤½²³ access
+#
+# << MISSING >>
+# public-access-view-others-help:
+# English text: When access the system with public access, specifies whether the user can view the calendar of another calendar user.
+#
+#
+# << MISSING >>
+# Public access can view other users:
+#
+# << MISSING >>
+# public-access-can-add-help:
+# English text: When enabled, users that access the system through Public Access will be able to add new events, but they will not show up in the calendar until an administrator approves the new event.
+#
+#
+# << MISSING >>
+# Public access can add events:
+#
+# << MISSING >>
+# public-access-add-requires-approval-help:
+# English text: Specifies whether events added via the public access account require approval before being displayed.
+#
+#
+# << MISSING >>
+# Public access new events require approval:
+#
+# << MISSING >>
+# public-access-sees-participants-help:
+# English text: If enabled, users accessing the calendar from the public account will be able to see event participants if they view details of an event.
+#
+#
+# << MISSING >>
+# Public access can view participants:
+#
+# << MISSING >>
+# allow-view-add-help:
+# English text: A '+' icon will be included in views, allowing users to quickly add events to other users' calendars.
+#
+#
+# << MISSING >>
+# Include add event link in views:
+#
+# << MISSING >>
+# allow-external-users-help:
+# English text: Specifies whether a non-calendar user can be added to an event.  This allows non-calendar users to be listed as event participants.
+#
+#
+# << MISSING >>
+# Allow external users:
+#
+# << MISSING >>
+# external-can-receive-notification-help:
+# English text: When external users are enabled and email usage is enabled, external users can receive email notifications when the event is added, updated or delete (if the external user's email address is provided).
+#
+#
+# << MISSING >>
+# External users can receive email notifications:
+#
+# << MISSING >>
+# external-can-receive-reminder-help:
+# English text: When external users are enabled and email usage is enabled, external users can receive email reminders (if the external user's email address is provided).
+#
+#
+# << MISSING >>
+# External users can receive email reminders:
+#
+# << MISSING >>
+# remember-last-login-help:
+# English text: When enabled, the user's login will be filled in for them on the login page (but not the password), and the user's preferences will be loaded (including their preferred colors and language selection).
+#
+#
+# << MISSING >>
+# Remember last login:
+#
+# << MISSING >>
+# conflict-check-help:
+# English text: Check for event conflicts (two events scheduled for the same time for the same person).  If you set this to "Yes", you will still be able to schedule two events at the same time after confirming a warning. If you set this to "No", no checking for conflicts will be done.  You probably want to set this to "Yes", so conflict checking occurs.
+#
+#
+# << MISSING >>
+# Check for event conflicts:
+#
+# << MISSING >>
+# conflict-months-help:
+# English text: If conflict checking is in place ("Check for event conflicts" is set to "No"), this specifies how many months into the future we should check for conflicts.  If you find adding events is taking a long time to process, reduce this number.
+#
+#
+# << MISSING >>
+# Conflict checking months:
+#
+# << MISSING >>
+# conflict-check-override-help:
+# English text: Allows users to override event conflicts and schedule two or more events for the same time.
+#
+#
+# << MISSING >>
+# Allow users to override conflicts:
+#
+# << MISSING >>
+# limit-appts-help:
+# English text: Allows the system administrator to set a system-wide limit on the number of appointments a single user can have on any single day.
+#
+#
+# << MISSING >>
+# Limit number of timed events per day:
+#
+# << MISSING >>
+# limit-appts-number-help:
+# English text: Specifies the maximum number of timed events a user can have in a single day.
+#
+#
+# << MISSING >>
+# Maximum timed events per day:
+#
+# << MISSING >>
+# Plugins:
+#
+# << MISSING >>
+# plugins-enabled-help:
+# English text: Enable plugin applications.
+#
+#
+# << MISSING >>
+# Enable Plugins:
+#
+# << MISSING >>
+# plugins-sort-key-help:
+# English text: Specifies a sort key for the plugin.  This allows the plugins to appear in a specific order.
+#
+#
+# << MISSING >>
+# Plugin:
+#
+# << MISSING >>
+# Groups:
+#
+# << MISSING >>
+# groups-enabled-help:
+# English text: Enables group support, allowing users to select users by groups.
+#
+#
+# << MISSING >>
+# Groups enabled:
+#
+# << MISSING >>
+# user-sees-his-group-help:
+# English text: If enabled, users will not see calendar users that are not in at least one of their groups.
+#
+#
+# << MISSING >>
+# User sees only his groups:
+Categories: Ãþ§O
+#
+# << MISSING >>
+# categories-enabled-help:
+# English text: Enables support for event categories.
+#
+Categories enabled: ±Ò¥ÎÃþ§O
+#
+# << MISSING >>
+# Nonuser:
+# English text: Nonuser Calendars
+#
+#
+# << MISSING >>
+# nonuser-enabled-help:
+# English text: If enabled, admins will have the option to add nonuser calendars
+#
+#
+# << MISSING >>
+# Nonuser enabled:
+# English text: Nonuser Calendars Enabled
+#
+#
+# << MISSING >>
+# nonuser-list-help:
+# English text: Where to display the nonuser calendars in the participant list
+#
+#
+# << MISSING >>
+# Nonuser list:
+# English text: Display in participants list at
+#
+#
+# << MISSING >>
+# Top:
+#
+# << MISSING >>
+# Bottom:
+#
+# << MISSING >>
+# Reports:
+#
+# << MISSING >>
+# reports-enabled-help:
+# English text: If enabled, users will see a "Reports" section at the bottom of each page and will be allowed to create custom reports.  Additionally, admin users can create global reports that will appear at the bottom of all users' pages.
+#
+#
+# << MISSING >>
+# Reports enabled:
+#
+# << MISSING >>
+# Subscribe/Publish:
+#
+# << MISSING >>
+# subscriptions-enabled-help:
+# English text: Specifies if remote users can subscribe to a WebCalendar user's calendar, allowing them to see the WebCalendar user's events in their iCal-enabled application (such as Apple's iCal or Mozilla Calendar).
+#
+#
+# << MISSING >>
+# Allow remote subscriptions:
+#
+# << MISSING >>
+# Email:
+#
+# << MISSING >>
+# email-enabled-help:
+# English text: Turn on or off all sending of email for notification and reminders.  Set to "no", if your server is not properly setup to send mail.
+#
+#
+# << MISSING >>
+# Email enabled:
+#
+# << MISSING >>
+# email-default-sender:
+# English text: Specifies the email address to specify as the sender when sending out reminders.
+#
+#
+# << MISSING >>
+# Default sender address:
+#
+# << MISSING >>
+# Default user settings:
+#
+# << MISSING >>
+# email-event-reminders-help:
+# English text: Specifies whether or not to send event reminders.
+#
+#
+# << MISSING >>
+# Event reminders:
+#
+# << MISSING >>
+# email-event-added:
+# English text: Specifies whether or not to send email notifications when an event is added to your calendar.
+#
+#
+# << MISSING >>
+# Events added to my calendar:
+#
+# << MISSING >>
+# email-event-updated:
+# English text: Specifies whether or not to send email notifications when an event is updated on your calendar.
+#
+#
+# << MISSING >>
+# Events updated on my calendar:
+#
+# << MISSING >>
+# email-event-deleted:
+# English text: Specifies whether or not to send email notifications when an event is removed from your calendar.
+#
+#
+# << MISSING >>
+# Events removed from my calendar:
+#
+# << MISSING >>
+# email-event-rejected:
+# English text: Specifies whether or not to send email notifications when a participant rejects an event that is on your calendar.
+#
+#
+# << MISSING >>
+# Event rejected by participant:
+colors-help: All colors should be specified in "#RRGGBB" hexadecimal format where "RR" is the hex value for red, "GG" is the hex value for green, and "BB" is the hex value for blue.
+Colors: ÃC¦â
+#
+# << MISSING >>
+# Allow user to customize colors:
+Document background: ¤å¥ó­I´º
+Select: ¿ï¾Ü
+Document title: ¤å¥ó¼ÐÃD
+#
+# << MISSING >>
+# Document text:
+#
+# << MISSING >>
+# Table grid color:
+#
+# << MISSING >>
+# Table header background:
+#
+# << MISSING >>
+# Table header text:
+Table cell background: ªí®æ­I´º
+Table cell background for current day: ·í¤éÃC¦â
+#
+# << MISSING >>
+# Table cell background for weekends:
+#
+# << MISSING >>
+# Event popup background:
+#
+# << MISSING >>
+# Event popup text:
+
+
+###############################################
+# Page: activity_log.php
+#
+Activity Log: ¨Ï¥Î¬ö¿ý
+User: ¨Ï¥ÎªÌ
+Calendar: ¦æ¨Æ¾ä
+Date: ¤é´Á
+Time: ®É¶¡
+Event: ¬¡°Ê
+Action: ¦æ°Ê
+Event created: ¬¡°Êµù¥U
+Event approved: ¬¡°Ê½T»{¹L
+Event rejected: ¬¡°Ê³Q©Úµ´
+Event updated: ¬¡°Ê§ó·s
+Event deleted: ¬¡°Ê³Q§R°£
+Notification sent: ³qª¾¨ç°e¥X¥h
+Reminder sent: ´£¿ô¨ç°e¥X¥h
+Database error: ¸ê®Æ®w¿ù»~
+Previous: «e¤@­Ó
+Next: «á¤@­Ó
+
+
+###############################################
+# Page: add_entry.php
+#
+Invalid entry id: µL®Ä e °O¨Æ id
+This is a private event and may not be added to your calendar.: ³o¬O¨p¤H e ¬¡°Ê¡AµL³q¥[¤J§A e ¦æ¨Æ¾ä¡C
+Error adding event: °O¨Æ¥[¤Jµo¥Í¿ù»~
+
+
+###############################################
+# Page: admin_handler.php
+#
+Error: ¿ù»~
+The following error occurred: µo¥Í¥H¤U e ¿ù»~
+
+
+###############################################
+# Page: approve_entry.php
+#
+Error approving event: Error approving event
+
+
+###############################################
+# Page: category.php
+#
+Add: ¼W¥[
+Category Name: Ãþ§O¦WºÙ
+Global: Âk­Ó¨t²Î
+Delete: §R°£
+Are you sure you want to delete this entry?: §A´±½T©w beh §R°£³o­Ó°O¨Æ¡H
+Add New Category: ¼W¥[·sÃþ§O
+
+
+###############################################
+# Page: category_handler.php
+#
+
+
+###############################################
+# Page: datesel.php
+#
+
+
+###############################################
+# Page: day.php
+#
+#
+# << MISSING >>
+# Admin mode:
+Assistant mode: §U²z¼Ò¦¡
+Generate printer-friendly version: Generate printer-friendly version
+Printer Friendly: ¤Íµ½¦C¦L
+
+
+###############################################
+# Page: del_entry.php
+#
+Hello: §A¦n
+An appointment has been canceled for you by: ¬ù·|¤w¸g³Q¨ú®ø¡A¨ú®øªÌ¬O
+The subject was: ¥DÃD¬O
+Notification: ³q§i
+
+
+###############################################
+# Page: edit_entry.php
+#
+Edit Entry: ½s¿è°O¨Æ
+Add Entry: µù¥U°O¨Æ
+brief-description-help: ¦î¾B²³æ´y­z³o­Ó¬¡°Ê¡]¬ù²¤¤G¤Q¦r¥H¤º¡^¡C¦î¦æ¨Æ¾ä­±³»¬O¥Î³o¥Nªí³o­Ó¬¡°Ê¡C
+Brief Description: ·§­n´y­z
+full-description-help: ¬¡°Ê e ¸Ô²Ó»¡©ú¡C¥ÎªÌÀ˵ø¬¡°Ê¤º²[ e ®É°}¡A·|¬ÝµÛ³o³¡¤À¡C
+Full Description: §¹¾ã´y­z
+date-help: ¬¡°ÊÁ|¿ì e ¤é´Á¡C
+time-help: ¬¡°ÊÁ|¿ì e ®É¶¡¡C<br /><i>³o¶µ·|¨Ï§K²K¡C</i>
+am: ¤W¤È
+pm: ¤UÕª
+Untimed event: µL©w®É¶¡ e ¬¡°Ê
+Timed event: ¦³©w®É¶¡ e ¬¡°Ê
+All day event: Âk¤u e ¬¡°Ê
+duration-help: ¬¡°Ê«e«á e ªø«×¡]«ö¤ÀÄÁºâ¡^¡C<br /><i>³o¶µ·|¨Ï§K²K¡C</i>
+Duration: «ùÄò®É¶¡
+hours: ÂIÄÁ
+priority-help: ¬¡°Ê e Àu¥ýµ¥¯Å¡C°ªµ¥¯Å e ¬¡°Ê·|¥Î²ÊÅé¦r«¬¯S§Oªí¥Ü¡C
+Priority: Àu¥ýµ¥¯Å
+Low: §C
+Medium: ¤¤
+High: °ª
+access-help: ¬¡°Ê e Åã¥Ü³]©w¡C<br /> <i>¤½²³ e </i>: ©Ò¦³¤H³£¬Ý·|µÛ¬¡°Ê e ¸Ô²Ó¸ê®Æ¡C<br /><i>¾÷±K e </i>: §O¤H¬Ý·|µÛ§A¦î¬Y¤é¬Y®É°}¦³¬¡°Ê°O¨Æ¡A¦ý¬O¬Ý be µÛ¸Ô²Ó¸ê®Æ¡C
+Access: Åã¥Ü³]©w
+Public: ¤½²³ e 
+Confidential: ¾÷±K e 
+category-help: ¬¡°Ê e Ãþ§O¡C
+Category: Ãþ§O
+None: µL
+days: ¤u
+before event: ¡]¦î¬¡°Ê¶}©l¥H«e¡^
+participants-help: ¦C¥X³o¶µ°O¨Æ e °Ñ»PªÌ¡C
+Participants: °Ñ»PªÌ
+external-participants-help: «D¦æ¨Æ¾ä¥ÎªÌ e ¥»¬¡°Ê°Ñ»PªÌ¦W³æ¡C¤@ choa À³¸Ó¦C¤@¦ì¡A·|¨Ï¥]¬A¹q¤l¶l«K¦í§}¡C¦³¦C¦í§} e °Ñ»PªÌ³q¦¬µÛ³qª¾¨ç¤Î´£¿ô¨ç¡C
+External Participants: ¥~­±°Ñ»PªÌ
+repeat-type-help: ¿ï¾Ü¬¡°Ê­«½Æ e ¶g´Á©Ê¡C<i>¡u«ö¤ë¡v («ö«ô´Xºâ)</i>ªí¥Ü³]©w¬¡°Ê¦î¤ë e ¡]Á|¨Ò¡^²Ä¤@­Ó«ô¤@­«½Æ¡B²Ä¤T­Ó«ô¥|­«½Æ...µ¥µ¥¡C<i>¡u«ö¤ë¡v («ö¤é´Áºâ)</i> ªí¥Ü³]©w¬¡°Ê¦î¤ë e ¦@¤@¤é­«½Æ¡C
+Repeat Type: ¶g´Á©Ê
+Daily: ³v¤u
+Weekly: «ö¶g
+Monthly: «ö¤ë
+by day: «ö«ô´Xºâ
+#
+# << MISSING >>
+# by day (from end):
+by date: «ö¤é´Áºâ
+Yearly: «ö¦~
+repeat-end-date-help: ¬¡°Ê¶g´Áµ²§ô e ¤é´Á¡C
+Repeat End Date: ¶g´Áµ²§ô¤é´Á
+Use end date: ¨Ï¥Îµ²§ô¤é´Á³]©w
+repeat-day-help: ¬¡°Ê«ô´X­«½Æ¡C³o¤z³æ<i>¶g´Á©Ê</i>³]©w<i>¡u«ö¶g¡v</i>¤~»Ý­n¡C
+Repeat Day: ­«½Æ©ó
+for weekly: ¨C¶g e 
+Tuesday: «ô¤G
+Wednesday: «ô¤T
+Thursday: «ô¥|
+Friday: «ô¤­
+Saturday: «ô¤»
+repeat-frequency-help: ¬¡°Ê­«½Æ e ÀW²v¡C³]©w¡u1¡vªí¥Ü«ö®É­«½Æ¡A¡u2¡vªí¥Ü¬¡°Ê¨C¨â§«ô (°²¨Ï<i>¶g´Á©Ê</i>³]©w<i>¡u«ö¶g¡v</i>)¡B¨C¨â­Ó¤ë (°²¨Ï<i>¶g´Á©Ê</i> ³]©w<i>¡u«ö¤ë¡v</i>) ...µ¥µ¥¡A·|­«½Æ¡C
+Frequency: ÀW²v
+Delete entry: §R°£°O¨Æ
+You are not authorized to edit this entry: §AµLÅv§Q½s¿è³o¶µ°O¨Æ
+
+
+###############################################
+# Page: edit_layer.php
+#
+Edit Layer: ½s¿è¶¥¼h
+Add Layer: ·s¼W¶¥¼h
+Source: ¨Ó·½
+Color: ¦â½o
+Duplicates: °Æ¥»
+Show layer events that are the same as your own: Show layer events that are the same as your own
+Are you sure you want to delete this layer?: §A´±½T©w beh §R°£³o­Ó¶¥¼h¡H
+Delete layer: §R°£¶¥¼h
+
+
+###############################################
+# Page: edit_layer_handler.php
+#
+#
+# << MISSING >>
+# You cannot create a layer for yourself:
+#
+# << MISSING >>
+# You can only create one layer for each user:
+
+
+###############################################
+# Page: edit_user.php
+#
+Edit User: ½s¿è¨Ï¥ÎªÌ¸ê®Æ
+Add User: ·s¼W¨Ï¥ÎªÌ
+Username: ¨Ï¥ÎªÌ¦WºÙ
+First Name: ©m
+Last Name: ¦W
+E-mail address: ¹q¤l¶l¥ó¦a§}
+Password: ±K½X
+again: »Õ¤@Â\
+Admin: ºÞ²z
+Disabled for demo: Disabled for demo
+Change Password: Åܧó±K½X
+New Password: ·s e ±K½X
+Set Password: ³]©w±K½X
+
+
+###############################################
+# Page: edit_user_handler.php
+#
+Deleting users not supported: µL¤ä´©§R°£¨Ï¥ÎªÌ
+The passwords were not identical: ±K½XµL¹ï
+You have not entered a password: §AµL¿é¤J±K½X
+
+
+###############################################
+# Page: export.php
+#
+Export: ¿é¥X
+Export format: ¿é¥X®æ¦¡
+Palm Pilot: Palm Pilot
+Export all dates: ¿é¥X©Ò¦³¸ê®Æ
+Start date: ¶}©l¤é´Á
+End date: µ²§ô¤é´Á
+Modified since: §ó§ï¦Û
+
+
+###############################################
+# Page: export_handler.php
+#
+#
+# << MISSING >>
+# export format not defined or incorrect:
+
+
+###############################################
+# Page: group_edit.php
+#
+Unnamed Group: µL¸¹¦W e ¨Ï¥Î°}
+Add Group: ¼W¥[¨Ï¥Î°}
+Edit Group: ½s¿è¨Ï¥Î°}
+Group name: ¨Ï¥Î°}¦WºÙ
+Updated: §ó·s
+Created by: ¤½¥¬ªÌ
+Users: ¨Ï¥ÎªÌ
+
+
+###############################################
+# Page: group_edit_handler.php
+#
+#
+# << MISSING >>
+# You must specify a group name:
+
+
+###############################################
+# Page: groups.php
+#
+#
+# << MISSING >>
+# Add New Group:
+
+
+###############################################
+# Page: icalfb.php
+#
+
+
+###############################################
+# Page: pref.php
+#
+Preferences: °Ñ¼Æ³]©w
+#
+# << MISSING >>
+# to modify the preferences for the Public Access calendar:
+#
+# << MISSING >>
+# tz-help:
+# English text: Specifies how many hours to adjust the time from server time to local time.
+#
+#
+# << MISSING >>
+# Timezone Offset:
+#
+# << MISSING >>
+# Add N hours to:
+#
+# << MISSING >>
+# Subtract N hours from:
+#
+# << MISSING >>
+# same as:
+#
+# << MISSING >>
+# server time:
+#
+# << MISSING >>
+# Default Category:
+#
+# << MISSING >>
+# When I am the boss:
+#
+# << MISSING >>
+# Email me event notification:
+#
+# << MISSING >>
+# I want to approve events:
+#
+# << MISSING >>
+# allow-remote-subscriptions-help:
+# English text: Specifies if remote users can subscribe to your calendar, allowing them to see your events in a iCal-enabled application (such as Apple's iCal or Mozilla Calendar).
+#
+#
+# << MISSING >>
+# remote-subscriptions-url-help:
+# English text: Displays the URL remote users should use to subscribe to your calendar.
+#
+#
+# << MISSING >>
+# URL:
+Sun: §«ô
+Mon: «ô¤@
+Tue: «ô¤G
+Wed: «ô¤T
+Thu: «ô¥|
+Fri: «ô¤­
+Sat: «ô¤»
+Save Preferences: Àx¦s°Ñ¼Æ
+
+
+###############################################
+# Page: help_bug.php
+#
+Report Bug: ´£³ø bug
+
+
+###############################################
+# Page: help_edit_entry.php
+#
+Adding/Editing Calendar Entries: µù¥U/½s¿è ¦æ¨Æ¾ä¶µ¥Ø
+
+
+###############################################
+# Page: help_index.php
+#
+Help Index: »²§U¯Á¤Þ
+Layers: ¶¥¼h¬[ºc
+#
+# << MISSING >>
+# Import:
+
+
+###############################################
+# Page: help_layers.php
+#
+#
+# << MISSING >>
+# Layers are useful for displaying other users' events in your own calendar.  You can specifiy the user and the color the events will be displayed in.:
+#
+# << MISSING >>
+# Add/Edit/Delete:
+#
+# << MISSING >>
+# Clicking the Edit Layers link in the admin section at the bottom of the page will allow you to add/edit/delete layers.:
+#
+# << MISSING >>
+# Specifies the user that you would like to see displayed in your calendar.:
+#
+# << MISSING >>
+# The text color of the new layer that will be displayed in your calendar.:
+#
+# << MISSING >>
+# If checked, events that are duplicates of your events will be shown.:
+#
+# << MISSING >>
+# Disabling:
+#
+# << MISSING >>
+# Press the Disable Layers link in the admin section at the bottom of the page to turn off layers.:
+#
+# << MISSING >>
+# Enabling:
+#
+# << MISSING >>
+# Press the Enable Layers link in the admin section at the bottom of the page to turn on layers.:
+
+
+###############################################
+# Page: help_admin.php
+#
+
+
+###############################################
+# Page: week.php
+#
+#
+# << MISSING >>
+# cont.:
+
+
+###############################################
+# Page: layers.php
+#
+#
+# << MISSING >>
+# to modify the layers settings for the:
+Layers are currently: ¶¥¼h¬[ºc¥Ø«e¬O
+Enabled: ±Ò¥Î e 
+Disabled: °±¥Î e 
+Disable Layers: °±¥Î¶¥¼h¬[ºc
+Enable Layers: ±Ò¥Î¶¥¼h¬[ºc
+Layer: ¶¥¼h
+Edit layer: ½s¿è¶¥¼h
+Add layer: ·s¼W¶¥¼h
+
+
+###############################################
+# Page: layers_toggle.php
+#
+
+
+###############################################
+# Page: list_unapproved.php
+#
+View this entry: À˵ø³o­Ó°O¨Æ
+Approve this entry?: ®Ö­ã³o­Ó°O¨Æ?
+Approve/Confirm: ®Ö­ã/½T©w
+Reject this entry?: ©Úµ´³o­Ó°O¨Æ?
+Reject: ©Úµ´
+#
+# << MISSING >>
+# No unapproved events for:
+Unapproved Events: ¥¼®Ö­ã e ¬¡°Ê
+Public Access: ¤½²³¤J¤f
+
+
+###############################################
+# Page: view_entry.php
+#
+every: ¨C
+2nd: ²Ä¤G
+3rd: ²Ä¤T
+4th: ²Ä¥|
+5th: ²Ä¤­
+1st: ²Ä¤@
+#
+# << MISSING >>
+# last:
+Description: ´y­z
+Status: ª¬ºA
+Waiting for approval: µ¥«Ý®Ö­ã
+Deleted: ¤w¸g§R°£
+Rejected: ¤w¸g³Q©Úµ´
+External User: ¥~­±¥ÎªÌ
+Approve/Confirm entry: ®Ö­ã/½T©w °O¨Æ
+Reject entry: ©Úµ´°O¨Æ
+Set category: ³]©wÃþ§O
+Edit repeating entry for all dates: ½s¿è©Ò¦³¤é´Á e ­«½Æ°O¨Æ
+Edit entry for this date: ½s¿è³o­Ó¤é´Á e °O¨Æ
+This will delete this entry for all users.: ³o·|¹ï©Ò¦³¥ÎªÌ§R°£³o¶µ°O¨Æ¡C
+Delete repeating event for all dates: §R°£­«½Æ e ¬¡°Ê¡]©Ò¦³¤é´Á¡^
+Delete entry only for this date: ¤z³æ§R°£³o­Ó¤é´Á e °O¨Æ
+Edit entry: ½s¿è°O¨Æ
+This will delete the entry from your calendar.: ³o±N·|±q§A e ¦æ¨Æ¾ä§R°£³o­Ó°O¨Æ¡C
+Do you want to add this entry to your calendar?: §A­n·s¼W³o­Ó°O¨Æ¨ì§A e ¦æ¨Æ¾ä¶Ü¡H
+This will add the entry to your calendar.: ³o±N·|·s¼W³o­Ó°O¨Æ¨ì§A e ¦æ¨Æ¾ä¡C
+Add to My Calendar: ·s¼W¨ì§Ú e ¦æ¨Æ¾ä
+Email all participants: Email ©Ò¦³°Ñ»PªÌ
+Show activity log: Åã¥Ü¨Ï¥Î¬ö¿ý
+Hide activity log: ·t»\¨Ï¥Î¬ö¿ý
+#
+# << MISSING >>
+# Export this entry to:
+
+
+###############################################
+# Page: view_v.php
+#
+
+
+###############################################
+# Page: month.php
+#
+
+
+###############################################
+# Page: pref_handler.php
+#
+
+
+###############################################
+# Page: reject_entry.php
+#
+An appointment has been rejected by: ¬ù·|¤w¸g³Q©Úµ´¡A©Úµ´ªÌ¬O
+#
+# << MISSING >>
+# The description is:
+Title: ºô¸ô¦æ¨Æ¾ä
+
+
+###############################################
+# Page: search.php
+#
+Search: À˯Á
+Advanced Search: °ªµ¥À˯Á
+Keywords: ÃöÁä¦r
+
+
+###############################################
+# Page: search_handler.php
+#
+You must enter one or more search keywords: §A¦Ü¤ÖµÛ¿é¤J¤@­ÓÀ˯ÁÃöÁä¦r
+Search Results: À˯Áµ²ªG
+match found: µ§²Å¦X¬d¸ß
+matches found: µ§²Å¦X¬d¸ß
+No matches found: ¬dµL¸ê®Æ
+
+
+###############################################
+# Page: select_user.php
+#
+View Another User's Calendar: À˵ø¨ä¥L¤H e ¤ë¾ä
+Go: ¨Ó¥h
+
+
+###############################################
+# Page: publish.php
+#
+
+
+###############################################
+# Page: users.php
+#
+denotes administrative user: ¨Ï¥ÎªÌºÞ²z­û
+Add New User: ·s¼W¨Ï¥ÎªÌ
+
+
+###############################################
+# Page: usersel.php
+#
+All: ¥þ³¡
+#
+# << MISSING >>
+# Reset:
+#
+# << MISSING >>
+# Remove:
+#
+# << MISSING >>
+# Ok:
+Cancel: ¨ú®ø
+
+
+###############################################
+# Page: import.php
+#
+#
+# << MISSING >>
+# This form will allow you to import entries from the Palm Desktop Datebook.:
+#
+# << MISSING >>
+# Exclude private records:
+#
+# << MISSING >>
+# Datebook File:
+#
+# << MISSING >>
+# This form will import vCalendar (.vcs) 1.0 events:
+#
+# << MISSING >>
+# vCal File:
+#
+# << MISSING >>
+# This form will import iCalendar (.ics) events:
+#
+# << MISSING >>
+# iCal File:
+#
+# << MISSING >>
+# Overwrite Prior Import:
+
+
+###############################################
+# Page: year.php
+#
+
+
+###############################################
+# Page: view_d.php
+#
+
+
+###############################################
+# Page: view_m.php
+#
+
+
+###############################################
+# Page: view_w.php
+#
+
+
+###############################################
+# Page: views.php
+#
+Views: À˵ø
+Add New View: ¼W¥[·sÀ˵ø
+
+
+###############################################
+# Page: views_edit.php
+#
+Unnamed View: µL¦WºÙ e À˵ø
+Add View: ¼W¥[À˵ø
+Edit View: ½s¿èÀ˵ø
+View Name: À˵ø¦WºÙ
+View Type: À˵øÃþ
+#
+# << MISSING >>
+# Week (Users horizontal):
+#
+# << MISSING >>
+# Week (Users vertical):
+#
+# << MISSING >>
+# Week (Timebar):
+#
+# << MISSING >>
+# Month (side by side):
+#
+# << MISSING >>
+# Month (on same calendar):
+
+
+###############################################
+# Page: nonusers.php
+#
+#
+# << MISSING >>
+# NONUSER_PREFIX not set:
+# English text: NONUSER_PREFIX has not been set in config.php.
+#
+#
+# << MISSING >>
+# NonUser:
+# English text: NonUser Calendars
+#
+#
+# << MISSING >>
+# Calendar ID:
+#
+# << MISSING >>
+# Add New NonUser Calendar:
+
+
+###############################################
+# Page: nonusers_handler.php
+#
+
+
+###############################################
+# Page: view_l.php
+#
+
+
+###############################################
+# Page: help_pref.php
+#
+#
+# << MISSING >>
+# default-category-help:
+# English text: Specifies the category a new event should default to.
+#
+
+
+###############################################
+# Page: report.php
+#
+Private: ¨p¤H e 
+#
+# << MISSING >>
+# Approved:
+#
+# << MISSING >>
+# Unknown:
+#
+# << MISSING >>
+# to manage reports for the Public Access calendar:
+#
+# << MISSING >>
+# Add new report:
+#
+# << MISSING >>
+# Invalid report id:
+#
+# << MISSING >>
+# Manage Reports:
+
+
+###############################################
+# Page: login.php
+#
+You must enter a login and password: §AµÛ¿é¤J¥ÎªÌ¦WºÙ¤Î±K½X
+Save login via cookies so I don't have to login next time: ±Nµn¤J¸ê®ÆÀx¦s¦î cookies ¤¤¡A«áÂ\´N§K­«µn¤J¡C
+Login: µn¤J
+Access public calendar: ¤J¥h¤½²³¦æ¨Æ¾ä
+cookies-note: <b>ª`·N:</b> ¥»µ{¦¡¶·­n cookies ¤~·|±o¨Ï¥Î¡C
+
+
+###############################################
+# Page: views_edit_handler.php
+#
+You must specify a view name: §A¥²¶·­nµù©úÀ˵ø e ¦WºÙ
+
+
+###############################################
+# Page: week_details.php
+#
+New Entry: ·s e °O¨Æ
+
+
+###############################################
+# Page: import_handler.php
+#
+#
+# << MISSING >>
+# Import Results:
+#
+# << MISSING >>
+# Events successfully imported:
+#
+# << MISSING >>
+# Events from prior import marked as deleted:
+#
+# << MISSING >>
+# Conflicting events:
+#
+# << MISSING >>
+# Errors:
+Back to My Calendar: Âà¥h§Ú e ¦æ¨Æ¾ä
+#
+# << MISSING >>
+# There was an error parsing the import file or no events were returned:
+#
+# << MISSING >>
+# The import file contained no data:
+The following conflicts with the suggested time: The following conflicts with the suggested time
+Unnamed Event: Unnamed Event
+Scheduling Conflict: Scheduling Conflict
+conflicts with the following existing calendar entries: conflicts with the following existing calendar entries
+#
+# << MISSING >>
+# Event Imported:
+
+
+###############################################
+# Page: edit_report.php
+#
+#
+# << MISSING >>
+# Tomorrow:
+#
+# << MISSING >>
+# Today:
+#
+# << MISSING >>
+# Yesterday:
+#
+# << MISSING >>
+# Day before yesterday:
+#
+# << MISSING >>
+# Next week:
+#
+# << MISSING >>
+# This week:
+#
+# << MISSING >>
+# Last week:
+#
+# << MISSING >>
+# Week before last:
+#
+# << MISSING >>
+# Next week and week after:
+#
+# << MISSING >>
+# This week and next week:
+#
+# << MISSING >>
+# Last week and this week:
+#
+# << MISSING >>
+# Last two weeks:
+#
+# << MISSING >>
+# Next month:
+#
+# << MISSING >>
+# This month:
+#
+# << MISSING >>
+# Last month:
+#
+# << MISSING >>
+# Month before last:
+#
+# << MISSING >>
+# Next year:
+#
+# << MISSING >>
+# This year:
+#
+# << MISSING >>
+# Last year:
+#
+# << MISSING >>
+# Year before last:
+#
+# << MISSING >>
+# Unnamed Report:
+#
+# << MISSING >>
+# Add Report:
+#
+# << MISSING >>
+# Edit Report:
+#
+# << MISSING >>
+# Report name:
+Current User: ¥Ø«e¨Ï¥ÎªÌ
+#
+# << MISSING >>
+# Include link in trailer:
+#
+# << MISSING >>
+# Include standard header/trailer:
+#
+# << MISSING >>
+# Date range:
+#
+# << MISSING >>
+# Include previous/next links:
+#
+# << MISSING >>
+# Include empty dates:
+#
+# << MISSING >>
+# Template variables:
+#
+# << MISSING >>
+# Page template:
+#
+# << MISSING >>
+# Day template:
+#
+# << MISSING >>
+# Event template:
+#
+# << MISSING >>
+# Are you sure you want to delete this report?:
+
+
+###############################################
+# Page: assistant_edit.php
+#
+Assistants: §U²z
+Yours assistants: §A e §U²z
+
+
+###############################################
+# Page: view_t.php
+#
+
+
+###############################################
+# Page: assistant_edit_handler.php
+#
+
+
+###############################################
+# Page: adminhome.php
+#
+Account: ½s¿è­Ó¤H¸ê®Æ
+#
+# << MISSING >>
+# NonUser Calendars:
+#
+# << MISSING >>
+# Delete Events:
+#
+# << MISSING >>
+# Public Preferences:
+#
+# << MISSING >>
+# Unapproved Public Events:
+#
+# << MISSING >>
+# Administrative Tools:
+
+
+###############################################
+# Page: purge.php
+#
+#
+# << MISSING >>
+# Purging events for:
+#
+# << MISSING >>
+# Finished:
+#
+# << MISSING >>
+# Delete all events before:
+#
+# << MISSING >>
+# Check box to delete <b>ALL</b> events for a user:
+#
+# << MISSING >>
+# Are you sure you want to delete events for:
+
+
+###############################################
+# Page: help_import.php
+#
+#
+# << MISSING >>
+# Palm Desktop:
+#
+# << MISSING >>
+# It should be located in your Palm directory in <tt>datebook/datebook.dat</tt> in a subdirectory named by your username.:
+#
+# << MISSING >>
+# The following entries will not be imported:
+#
+# << MISSING >>
+# Entries older than the current date:
+#
+# << MISSING >>
+# Entries created in the Palm Desktop that have not been HotSync'd:
+#
+# << MISSING >>
+# Anything imported from Palm will be overwritten during the next import (unless the event date has passed).:
+#
+# << MISSING >>
+# Therefore, updates should be made in the Palm Desktop.:
+#
+# << MISSING >>
+# vCal:
+#
+# << MISSING >>
+# The following formats have been tested:
+#
+# << MISSING >>
+# Palm Desktop 4:
+#
+# << MISSING >>
+# Lotus Organizer 6:
+#
+# << MISSING >>
+# Microsoft Outlook 2002:
+#
+# << MISSING >>
+# iCalendar:
+#
+# << MISSING >>
+# Enabling <b>Overwrite Prior Import</b> will cause events imported previously that used the same UID as an event from the new import file to be marked as deleted.  This should allow an updated iCalendar file to be imported without creating duplicates.:
+
+
+###############################################
+# Page: edit_report_handler.php
+#
+#
+# << MISSING >>
+# Variable N not found:
+
+
+###############################################
+# Page: edit_entry_handler.php
+#
+A new appointment has been made for you by: §A¦³¤@­Ó·s¬ù·|¡AÁܽЪ̬O
+#
+# << MISSING >>
+# An appointment has been updated by:
+The subject is: ¥DÃD¬O
+Please look on: ½Ð¬d¬Ý
+to accept or reject this appointment: ¨M©w±µ¨ü©Î©Úµ´³o­Ó¬ù·|
+to view this appointment: to view this appointment
+Your suggested time of: Your suggested time of
+
+
+###############################################
+# Page: set_entry_cat.php
+#
+#
+# << MISSING >>
+# You have not added any categories:
+Set Category: ³]©wÃþ§O
+
+
+###############################################
+# Page: edit_template.php
+#
+#
+# << MISSING >>
+# Edit Custom Script/Stylesheet:
+#
+# << MISSING >>
+# Edit Custom Header:
+#
+# << MISSING >>
+# Edit Custom Trailer:
+
+
+###############################################
+# Page: includes/trailer.php
+#
+Go to: ¥\¯à¿ï¾Ü
+My Calendar: §Ú e ¦æ¨Æ¾ä
+Logout: µn¥X
+Another User's Calendar: §O¤H e ¦æ¨Æ¾ä
+Add New Entry: µù¥U°O¨Æ
+Manage Views: ºÞ²zÀ˵ø
+#
+# << MISSING >>
+# Manage calendar of:
+
+
+###############################################
+# Page: includes/connect.php
+#
+
+
+###############################################
+# Page: includes/user.php
+#
+#
+# << MISSING >>
+# Invalid login:
+#
+# << MISSING >>
+# Invalid user login:
+
+
+###############################################
+# Page: includes/site_extras.php
+#
+#
+# << MISSING >>
+# Send Reminder:
+
+
+###############################################
+# Page: includes/translate.php
+#
+
+
+###############################################
+# Page: includes/user-ldap.php
+#
+
+
+###############################################
+# Page: includes/user-nis.php
+#
+
+
+###############################################
+# Page: includes/help_trailer.php
+#
+
+
+###############################################
+# Page: includes/dbtable.php
+#
+
+
+###############################################
+# Page: includes/init.php
+#
+
+
+###############################################
+# Page: includes/functions.php
+#
+This event is confidential: ³o­Ó°O¨Æ¬O¾÷±K e 
+exceeds limit of XXX events per day: ¶W¥X¤@¤u XXX ¶µ¬¡°Ê e ­­¨î
+You have XXX unapproved events: §A¦³ XXX ¥¼®Ö­ã e °O¨Æ
+January: 1¤ë
+February: 2¤ë
+March: 3¤ë
+April: 4¤ë
+May_: 5¤ë
+June: 6¤ë
+July: 7¤ë
+August: 8¤ë
+September: 9¤ë
+October: 10¤ë
+November: 11¤ë
+Jan: 1¤ë
+Feb: 2¤ë
+Mar: 3¤ë
+Apr: 4¤ë
+May: 5¤ë
+Jun: 6¤ë
+Jul: 7¤ë
+Aug: 8¤ë
+Sep: 9¤ë
+Oct: 10¤ë
+Nov: 11¤ë
+Dec: 12¤ë
+
+
+###############################################
+# Page: includes/js/admin.php
+#
+#
+# << MISSING >>
+# Server URL is required:
+#
+# << MISSING >>
+# Server URL must end with '/':
+Invalid color for document background: Invalid color for document background
+Invalid color for document title: Invalid color for document title
+Invalid color for table cell background: Invalid color for table cell background
+#
+# << MISSING >>
+# Invalid color for table grid:
+#
+# << MISSING >>
+# Invalid color for table header background:
+#
+# << MISSING >>
+# Invalid color for table text background:
+#
+# << MISSING >>
+# Invalid color for event popup background:
+#
+# << MISSING >>
+# Invalid color for event popup text:
+Invalid color for table cell background for today: Invalid color for table cell background for today
+Color format should be '#RRGGBB': Color format should be '#RRGGBB'
+
+
+###############################################
+# Page: includes/js/edit_entry.php
+#
+You have not entered a Brief Description: §AµL¿é¤J·§­n´y­z
+You have not entered a valid time of day: §AµL¿é¤J¥¿½T e ®É¶¡
+The time you have entered begins before your preferred work hours.  Is this correct?: ³o­Ó®É¬qµL¦î§A¦Û©w e ¤u§@®É¶¡¤º¡C ³o´±¬O¥¿½T e ?
+
+
+###############################################
+# Page: includes/js/edit_layer.php
+#
+Invalid color: µL®Ä e ¦â½o
+
+
+###############################################
+# Page: includes/js/pref.php
+#
+
+
+###############################################
+# Page: tools/send_reminders.php
+#
+#
+# << MISSING >>
+# This is a reminder for the event detailed below.:
+#
+# << MISSING >>
+# Reminder:

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Hungarian.txt
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Hungarian.txt	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Hungarian.txt	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,1029 @@
+# Use this as a starting point to translate this application into
+# another language.  The format is "English text: translated text"
+# There cannot be a ":" in the English text.
+# Translated by:
+#	Gyorgy Baffia <gyorgy at baffia.hu>
+# Last update: 05 Sep 2001
+#
+# Cleared, finished and polished by:
+#	Laszlo Csecsy <_boobaa_at_ajrg_point_hu_>
+# Last updated on 2005-05-31
+#
+# $Id: Hungarian.txt,v 1.19.4.1 2006/04/05 12:57:44 cknudsen Exp $
+# Translation last updated on 04-05-2006
+
+
+###############################################
+# Specify a charset (will be sent within meta tag for each page)
+#
+charset: utf-8
+
+
+
+###############################################
+# Page: activity_log.php
+#
+Activity Log: Tevékenységi napló
+Admin: Adminisztráció
+User: Felhasználó
+Calendar: Naptár
+Date: Dátum
+Time: Idõ
+Event: Esemény
+Action: Tevékenység
+Event created: Esemény létrehozva
+Event approved: Esemény jóváhagyva
+Event rejected: Esemény elutasítva
+Event updated: Esemény frissítve
+Event deleted: Esemény törölve
+Notification sent: Értesítés elküldve
+Reminder sent: Emlékeztetõ elküldve
+Database error: Adatbázis hiba
+Previous: Elõzõ
+Events: Események
+Next: Következõ
+
+
+###############################################
+# Page: add_entry.php
+#
+Invalid entry id: Érvénytelen bejegyzés-azonosító
+This is a private event and may not be added to your calendar.: Ez magánprogram, nem adhatod hozzá a naptáradhoz.
+Error adding event: Esemény hozzáadási hiba
+
+
+###############################################
+# Page: admin.php
+#
+System Settings: Rendszerbeállítások
+Help: Súgó
+You are not authorized: Nincs jogosultságod
+Note: Megjegyzés
+Your user preferences: Felhasználói beállításaid
+may be affecting the appearance of this page.: befolyásolhatják ezen oldal megjelenését.
+Click here: Itt
+to not use your user preferences when viewing this page: megnézheted a saját beállításaid nélkül
+are being ignored while viewing this page.: most nem számítanak ezen oldal megjelenésében.
+to load your user preferences when viewing this page: megnézheted a saját beállításaiddal.
+Save: Mentés
+Settings: Beállítások
+Public Access: Nyilvános naptár
+Groups: Csoportok
+NonUser Calendars: Felhasználó nélküli naptárak
+Other: Egyéb
+Email: Email
+colors-help: A színeket "#RRGGBB" hexadecimális formátumban kell megadni, ahol az "RR" a vörös, a "GG" a zöld, a "BB" a kék szín értékét adja meg.
+Colors: Színek
+app-name-help: Megadhatsz egy programnevet, ami a böngészõ címsorában jelenik meg, illetve a bejelentkezéskor. Az itt megadott érték lefordításra kerül, így a különbözõ nyelvekhez különbözõ programnevet adhatsz meg.
+Application Name: Programnév
+server-url-help: A program alap URL-je, mely az email emlékeztetõkben és értesítésekben jelenik meg.
+Server URL: Szerver URL
+language-help: Megadja, hogy milyen nyelvet akarsz használni.
+Language: Nyelv
+Your browser default language is: A böngészõd alapértelmezett nyelve
+fonts-help: A használandó betûkészletek listája (például "Arial, Helvetica").
+Fonts: Betûtípusok
+custom-script-help: Egyedi Javascript vagy stíluslap megadását teszi lehetõvé, amely minden HTML oldal "head" részébe kerül.
+Custom script/stylesheet: Egyedi szkript/stíluslap
+Yes: Igen
+No: Nem
+Edit: Szerkesztés
+custom-header-help: Egy csipetnyi egyedi HTML beszúrását teszi lehetõvé minden oldal tetejére.
+Custom header: Egyedi fejléc
+custom-trailer-help: Egy csipetnyi egyedi HTML beszúrását teszi lehetõvé minden oldal aljára.
+Custom trailer: Egyedi lábléc
+preferred-view-help: Az alapértelmezett nézetet adja meg (Napi, Heti, Havi vagy Éves).
+Preferred view: Kedvenc nézet
+Day: Nap
+Week: Hét
+Month: Hónap
+Year: Év
+display-weekends-help: Hétvégék megjelennek-e heti nézetben.
+Display weekends in week view: Hétvégék megjelenítése hét nézetben
+yearly-shows-events-help: Éves nézetben vastag betûvel jelennek meg azok a napok, amelyeken van valami esemény.
+Display days with events in bold in month and year views: Eseménnyel rendelkező napok kiemelése havi és éves nézetben megjelenítése 
+display-desc-print-day-help: Eseményleírások megjelenítése a napi nyomtatási nézetben.
+Display description in printer day view: Leírás megjelenítése napi nyomtatási nézetben
+date-format-help: Megadja a kívánt dátumformátumot.
+Date format: Dátumformátum
+December: December
+time-format-help: Megadja, hogy melyik formátumot használod: <br /><i>12 órás:</i> Az idõpontok du 3:30 formában jelennek meg.  <br /><i>24 órás:</i> Idõpontok 20:30 formában jelennek meg.
+Time format: Idõpont formátum
+12 hour: 12 órás
+24 hour: 24 órás
+time-interval-help: Heti és napi nézetben megadja az idõblokkok hosszát.
+Time interval: Idõköz
+hour: óra
+minutes: perc
+auto-refresh-help: Bekapcsolva a napi, heti és havi nézet, valamint a jóváhagyásra váró események listájának oldala idõnként automatikusan frissíti magát.
+Auto-refresh calendars: Kalendárium automatikus frissítése
+auto-refresh-time-help: Megadja a frissítési idõközt, ha az automatikus frissítést be van kapcsolva.
+Auto-refresh time: Automatikus frissítési idõ
+require-approvals-help: Bekapcsolva a felhasználónak jóvá kell hagynia az eseményt, mielõtt megjelenne a naptárában (hacsak a jóváhagyás nélküliek megjelenítése nincs bekapcsolva). Megjegyzés: ha ezt kikapcsolod, attól még a nyilvános naptár eseményeit jóvá kell hagynod (már ha a nyilvános naptár be van kapcsolva).
+Require event approvals: Események jóváhagyásának megkövetelése
+display-unapproved-help: Megadja, hogy a jóváhagyatlan események megjelenjenek-e.<br /> Ha "Igen", a jóváhagyatlan események megjelennek (más színnel).<br /> Ha "Nem", az eseményeket jóvá kell hagyni ahhoz, hogy megjelenjenek a naptáradban.
+Display unapproved: Jóváhagyás nélküliek megjelenítése
+display-week-number-help: Megadja, hogy a havi és a heti nézetben megjelenjenek-e a hetek számai (1-52).
+Display week number: Hetek számának kiírása
+display-week-starts-on: Megadja, hogy a hetek Vasárnap vagy Hétfõn kezdõdjenek. Hétfõ esetén a hetek számozása ISO szerint történik.
+Week starts on: Hetek elsõ napja
+Sunday: Vasárnap
+Monday: Hétfõ
+work-hours-help: A napi nézetben megjelenõ idõintervallumot adja meg.
+Work hours: Munkaidõ
+From: Kezdete
+to: vége
+disable-priority-field-help: Bekapcsolása eltünteti a "prioritás" mezõt az esemény oldaláról, ezzel egyszerûbbé téve a felületet kezdõk számára.
+Disable Priority field: Prioritás mezõ letiltása
+disable-access-field-help: Bekapcsolása eltünteti az "elérés" mezõt az esemény oldaláról, ezzel egyszerûbbé téve a felületet kezdõk számára.
+Disable Access field: Elérés mezõ letiltása
+disable-participants-field-help: Bekapcsolása eltünteti a "résztvevõk" mezõt az esemény oldaláról, ezzel megakadályozva, hogy más felhasználókat rendelhess hozzá az eseményedhez. Ha bekapcsolod, valószínûleg a "Más felhasználók naptárának megtekintését" is ki akarod kapcsolni.
+Disable Participants field: Résztvevõk mezõ letiltása
+disable-repeating-field-help: Bekapcsolása eltünteti az "ismétlõdõ" mezõt az események hozzáadásakor. Ez egyszerûbbé teszi a felületet kezdõk számára.
+Disable Repeating field: Ismétlõdõ mezõ letiltása
+popup-includes-siteextras-help: Bekapcsolva az események felbukkanó ablakaiban a site_extras.php fájlban beállított egyedi mezõk is megjelennek.
+Display Site Extras in popup: Helyi extrák megjelenítése a felbukkanó ablakban
+allow-html-description-help: Bekapcsolva a felhasználól az esemény leírása mezõbe HTML kódot is írhatnak. Kikapcsolva a HTML kódok sima szövegként jelennek meg. Figyelem: ha bekapcsolod, más weboldalakon levõ képekre is lehet hivatkozni.
+Allow HTML in Description: HTML engedélyezése a leírásban
+allow-view-other-help: Megadja, hogy egyik felhasználó láthatja-e a másik naptárát.
+Allow viewing other user's calendars: Más felhasználók naptárának megtekintése
+allow-view-add-help: Minden nézetben megjelenik egy '+' ikon, mellyel másik felhasználók naptárába lehet gyorsan eseményeket felvenni.
+Include add event link in views: Esemény hozzáadása link minden nézetben
+remember-last-login-help: Bekapcsolva a bejelenkezési ablakban kitöltésre kerül a felhasználó neve (a jelszava nem), és a beállításai betöltõdnek (beleértve a színeket és a nyelvet).
+Remember last login: Utolsó bejelentkezés megjegyzése
+conflict-check-help: Esemény-ütközések ellenõrzése (ugyanazon felhasználó két eseménye idõben fedi egymást). Ha "Igen"-re állítod, csak egy jóváhagyás után vehetsz fel két eseményt ugyanarra az idõre. Ha "Nem"-re állítod, nem lesz ilyen ellenõrzés. Valószínûleg "Igen"-re akarod állítani, hogy legyen ellenõrzés.
+Check for event conflicts: Esemény-ütközések ellenõrzése
+conflict-months-help: Ha az esemény-ütközések ellenõrzése be van kapcsolva, itt adhatod meg, hogy hány hónapra elõre ellenõrizzük az ütközéseket. Ha túl sok idõt vesz igénybe egy esemény hozzáadása, csökkentsd ezt az idõt.
+Conflict checking months: Ütközésellenõrzés hónapjai
+conflict-check-override-help: Bekapcsolva a felhasználók felülbírálhatják az ütközéseket, és felvehetnek két vagy több eseményt ugyanarra az idõre.
+Allow users to override conflicts: Felhasználók felülbírálhatják az ütközéseket
+limit-appts-help: Lehetõvé teszi a rendszergazda számára, hogy mindenki számára korlátozza a felhasználónként felvehetõ napi találkozók számát.
+Limit number of timed events per day: Idõzített események számának korlátozása
+limit-appts-number-help: Megadja a felhasználónként felvehetõ napi események maximális számát.
+Maximum timed events per day: Idõzített események maximális száma
+timed-evt-len-help: Megadja az idõzített esemény hosszának beviteli módját
+Specify timed event length by: Megadja az idõzített események hosszának lépésközét
+Duration: Idõtartam
+End Time: Befejezési idõ
+Plugins: Beépülõ modulok
+plugins-enabled-help: Beépülõ programok engedélyezése.
+Enable Plugins: Beépülõ modulok engedélyezése
+plugins-sort-key-help: Megadja a beépülõ modulok rendezési kulcsát, lehetõvé téve egy bizonyos sorrend szerinti megjelenítésüket.
+Plugin: Beépülõ modulok
+allow-public-access-help: Bekapcsolva megjelenik egy csak olvasható nyilvános naptár jelenik meg, melyhez be sem kell jelentkezni.
+Allow public access: Nyilvános elérés
+public-access-default-visible: A nyilvános naptár eseményei automatikusan megjelennek az összes felhasználó naptárában
+Public access visible by default: Nyilvános naptár alapértelmezésben látható
+public-access-default-selected: Új esemény hozzáadásakor az alapértelmezett résztvevő a nyilvános felhasználó lesz.
+Public access is default participant: Alapértelmezett résztvevő a nyilvános felhasználó
+public-access-view-others-help: Nyilvános naptár megtekintésekor megadja, hogy más felhasználók naptárába be lehet-e tekinteni.
+Public access can view other users: Más felhasználók naptára nyilvános
+public-access-can-add-help: Bekapcsolva a nyilvános eléréssel rendelkezõ felhasználók is hozzáadhatnak új eseményeket, bár ezek a naptárban egy adminisztrátor jóváhagyásáig nem jelennek meg.
+Public access can add events: Események hozzáadása nyilvános módban
+public-access-add-requires-approval-help: Megadja, hogy a nyilvános eléréskor hozzáadott eseményeket jóvá kell-e hagyni, mielõtt megjelennének.
+Public access new events require approval: Nyilvános módban hozzáadott események jóváhagyandók
+public-access-sees-participants-help: Bekapcsolva a nyilvános naptárat böngészõk láthatják az esemény résztvevõit, ha megnézik a részleteit.
+Public access can view participants: Résztvevõk listája nyilvános
+groups-enabled-help: Csoporttámogatás engedélyezése, mely lehetõvé teszi felhasználók csoportonkénti kiválasztását.
+Groups enabled: Csoportok engedélyezése
+user-sees-his-group-help: Bekapcsolva nem láthatóak azon felhasználók, akik nincsenek benne legalább egy csoportodban.
+User sees only his groups: Csak saját csoportok megjelenítése
+nonuser-enabled-help: Bekapcsolva az adminisztrátorok létrehozhatnak felhasználó nélküli naptárakat.
+Nonuser enabled: Felhasználó nélküli naptárak engedélyezése
+nonuser-list-help: Megadja, hogy a felhasználó nélküli naptárak hol jelenjenek meg a résztvevõk listájában.
+Nonuser list: Résztvevõk listájában való megjelenés
+Top: Felül
+Bottom: Alul
+reports-enabled-help: Bekapcsolva a felhasználók minden oldal alján látnak egy "Jelentések" részt és létrehozhatnak egyedi jelentéseket, továbbá az adminisztrátorok létrehozhatnak globális jelentéseket, melyek megjelennek minden felhasználó oldalainak alján.
+Reports enabled: Jelentések engedélyezése
+subscriptions-enabled-help: Megadja, hogy távoli felhasználók feliratkozhatnak-e egy WebCalendar felhasználó naptárjához, így lehetõvé téve számukra annak egy iCal-kompatibilis programban (mint például Apple iCal vagy Mozilla Calendar) való megtekintését.
+Allow remote subscriptions: Távoli feliratkozás engedélyezése
+categories-enabled-help: Eseménykategóriák támogatásának engedélyezése.
+Categories enabled: Kategóriák engedélyezése
+allow-external-users-help: Megadja, hogy naptárrendszeren kívüli felhasználók felvehetõk-e egy esemény résztvevõjeként.
+Allow external users: Külsõ felhasználók engedélyezése
+external-can-receive-notification-help: Ha a külsõ felhasználók engedélyezése és az email engedélyezése be van kapcsolva, megadja, hogy a külsõ felhasználók kaphatnak-e email értesítést az esemény hozzáadásakor, módosításakor vagy törlésekor (ha a külsõ felhasználó email címe ismert).
+External users can receive email notifications: Külsõ felhasználók kaphatnak email értesítést
+external-can-receive-reminder-help: Ha a külsõ felfelhasználók engedélyezése és az email engedélyezése be van kapcsolva, megadja, hogy a külsõ felhasználók kaphatnak-e email emlékeztetõt(ha a címük ismert).
+External users can receive email reminders: Külsõ felhasználók kaphatnak email emlékeztetõt
+email-enabled-help: Be- vagy kikapcsolhatod az összes email-értesítést és emlékeztetést. Kapcsold ki, ha a szervereden nincs rendesen beállítva a levélküldés.
+Email enabled: Email engedélyezése
+email-default-sender: Megadja a kimenõ emlékeztetõk feladójának email-címét.
+Default sender address: Küldõ email címe
+Default user settings: Alapértelmezett felhasználói beállítások
+email-event-reminders-help: Kérsz-e email emlékeztetõt az eseményrõl.
+Event reminders: Esemény emlékeztetõk
+email-event-added: Kérsz-e email emlékeztetõt a saját naptáradba bejegyzett új eseményrõl.
+Events added to my calendar: Esemény hozzáadása a saját naptárhoz
+email-event-updated: Kérsz-e email emlékeztetõt a saját naptáradban módosított eseményekrõl.
+Events updated on my calendar: Esemény módosítása a saját naptárban
+email-event-deleted: Kérsz-e email emlékeztetõt a saját naptáradból törölt eseményekrõl.
+Events removed from my calendar: Esemény törlése a saját naptárból
+email-event-rejected: Kérsz-e email emlékeztetõt a saját naptáradból elutasított eseményekrõl.
+Event rejected by participant: Esemény elutasítása a résztvevõk által
+Allow user to customize colors: Felhasználók beállíthatják a színeket
+Enable gradient images for background colors: Színátmenetek engedélyezése
+Not available: Nem elérhető
+Document background: Naptár háttér
+Select: Válassz
+Document title: Naptár címsor színe
+Document text: Szöveg színe
+Table grid color: Táblarács színe
+Table header background: Táblafejléc háttere
+Table header text: Táblafejléc szövegszíne
+Table cell background: Táblacellák háttere
+Table cell background for current day: Táblacella háttere a MAI napra
+Table cell background for weekends: Táblacellák háttere hétvégén
+Event popup background: Felugró eseményablak háttere
+Event popup text: Felugró eseményablak szövegszíne
+
+
+###############################################
+# Page: admin_handler.php
+#
+Error: Hiba
+The following error occurred: A következõ hiba történt
+
+
+###############################################
+# Page: adminhome.php
+#
+Preferences: Beállítások
+Users: Felhasználók
+Account: Hozzáférés
+Assistants: Titkárok
+Categories: Kategóriák
+Views: Nézetek
+Layers: Rétegek
+Reports: Riportok
+Delete Events: Események törlése
+Public Preferences: Nyilvános beállítások
+Unapproved Public Events: Jóváhagyás nélküli nyilvános események
+Administrative Tools: Adminisztrációs eszközök
+
+
+###############################################
+# Page: approve_entry.php
+#
+Error approving event: Hiba az esemény jóváhagyásakor
+
+
+###############################################
+# Page: assistant_edit.php
+#
+Admin mode: Adminisztrációs mód
+Your assistants: Titkáraid
+
+
+###############################################
+# Page: category.php
+#
+Add: Hozzáadás
+Category Name: Kategórianév
+Global: Globális
+Delete: Törlés
+Are you sure you want to delete this entry?: Biztos, hogy törölni akarod ezt a bejegyzést?
+Add New Category: Új kategória hozzáadása
+
+
+###############################################
+# Page: day.php
+#
+Assistant mode: Titkár mód
+Generate printer-friendly version: Nyomtatóbarát verzió generálása
+Printer Friendly: Nyomtatóbarát
+
+
+###############################################
+# Page: del_entry.php
+#
+Hello: Szia
+An appointment has been canceled for you by: Egy találkozót lemondott veled
+The subject was: A tárgy
+Notification: Emlékeztető
+
+
+###############################################
+# Page: edit_entry.php
+#
+Edit Entry: Bejegyzés szerkesztése
+Add Entry: Új bejegyzés
+Details: Részletek
+Participants: Résztvevők
+Repeat: Ismétlődés
+brief-description-help: Ez az esemény rövid leírása (kb. 20 karakter).  
+Brief Description: Rövid leírás
+full-description-help: Ez az esemény teljes leírása. Ez fog megjelenni, ha valaki megnézni az eseményt. 
+Full Description: Teljes leírás
+access-help: Specifies the access level of the event.<br /> <em>Public</em>: Everyone can see the full details of the event.  <br /><em>Confidential</em>: Others can see that you have an entry for that date and time, but not the details of what it is.
+Access: Hozzáférés
+Public: Nyilvános
+Confidential: Bizalmas
+priority-help: Specifies the priority of the event.  High priority events will be displayed in bold.
+Priority: Prioritás
+Low: Alacsony
+Medium: Közepes
+High: Magas
+category-help: Specifies the category of the event.
+Category: Kategória
+None: Nincs
+date-help: Az esemény dátuma
+Untimed event: Idő nélküli esemény
+Timed event: Időzített esemény
+All day event: Egész napos esemény
+time-help: Specifies the time of the event.<br />Select either "Timed event" (for an event that is scheduled for a specific time on that day), "Untimed event" (for an event this does not have a time (like a holiday), or "All day event" (for an event that takes all day (like being out of the office).
+am: de
+pm: du
+duration-help: Specifies the duration (in hours;minutes) of the event.  <br /><em>This field can be left blank.</em>
+hours: óra
+end-time-help: Specifies the time the event is expected to end.
+days: nap
+before event: -el az esemény elõtt
+participants-help: Bejegyzés résztvevőinek listája
+Availability: Elérhetőség
+external-participants-help: Specifies a list of participants for the event that are not calendar users.  The users should be listed one per line and can include an email address.  If an email address is specified, the user is eligible to receive notifications and reminders.
+External Participants: Külső résztvevők
+repeat-type-help: Select how often the event should repeat.<em>Monthly (by day)</em> allows an event to repeat on the 1st Monday of the month, 3rd Thursday of the month, etc.  <em>Monthly (by date)</em> allows an event to repeat on the same day of the month.
+Repeat Type: Ismétlés típusa
+Daily: Naponta
+Weekly: Hetente
+Monthly: Havonta
+by day: naponként
+by day (from end): hó napja szerint (hátulról)
+by date: dátumonként
+Yearly: Évente
+repeat-end-date-help: Specifies the date the event should repeat until.
+Repeat End Date: Ismétlés vége
+Use end date: Befejező dátum használata
+repeat-frequency-help: Specifies how often the event should repeat.
+Frequency: Gyakoriság
+repeat-day-help: Megadja, hogy a hét melyik napján ismétlődjön az esemény
+Repeat Day: Ismétlés napja
+Tuesday: Kedd
+Wednesday: Szerda
+Thursday: Csütörtök
+Friday: Péntek
+Saturday: Szombat
+Delete entry: Bejegyzés törlése
+You are not authorized to edit this entry: Nincs jogosultságod a szerkesztéshez
+
+
+###############################################
+# Page: edit_entry_handler.php
+#
+The following conflicts with the suggested time: A következők ütköznek a tervezett idővel
+Unnamed Event: Névtelen esemény
+The description is: Leírás
+A new appointment has been made for you by: Egy új tennivalót írt be számodra
+An appointment has been updated by: Egy tennivalót módosított
+The subject is: A tárgy
+Please look on: Légyszíves nézd meg
+to accept or reject this appointment: -ban, hogy megfelelõ-e Neked ez az idõpont
+to view this appointment: -ban a találkozó részleteit
+Scheduling Conflict: Ütemezési ütközés
+Your suggested time of: Az általad javasolt
+conflicts with the following existing calendar entries: -es idõpont ütközik a következõ eseményekkel
+Cancel: Mégsem
+
+
+###############################################
+# Page: edit_layer.php
+#
+Edit Layer: Réteg módosítása
+Add Layer: Réteg hozzáadása
+Source: Forrás
+Color: Szín
+Duplicates: Másolatok
+Show layer events that are the same as your own: A sajátjaiddal megegyezõ események megmutatása
+Delete layer: Réteg törlése
+Are you sure you want to delete this layer?: Biztos törölni akarod ezt a réteget?
+
+
+###############################################
+# Page: edit_layer_handler.php
+#
+You cannot create a layer for yourself: Nem hozhatsz létre réteget saját magadnak
+You can only create one layer for each user: Csak egy réteget hozhatsz létre felhasználónként
+
+
+###############################################
+# Page: edit_nonusers.php
+#
+NONUSER_PREFIX not set: A NONUSER_PREFIX-et nem állítottad be a config.php-ben.
+word characters only: csak betűket és számokat tartalmazhat (a-zA-Z_0-9)
+Edit User: Felhasználó szerkesztése
+Add User: Új felhasználó
+Calendar ID: Naptár azonosító
+First Name: Vezetéknév
+Last Name: Keresztnév
+
+
+###############################################
+# Page: edit_nonusers_handler.php
+#
+Changes successfully saved: A módosítások mentése sikerült
+
+
+###############################################
+# Page: edit_report.php
+#
+Tomorrow: Holnap
+Today: Mai nap
+Yesterday: Tegnap
+Day before yesterday: Tegnapelõtt
+Next week: Következõ héten
+This week: Ezen a héten
+Last week: Múlt héten
+Week before last: Két héttel ezelõtt
+Next week and week after: Következõ és azutáni héten
+This week and next week: Ezen és a következõ héten
+Last week and this week: Ezen és a múlt héten
+Last two weeks: Utolsó két héten
+Next month: Következõ hónapban
+This month: Ebben a hónapban
+Last month: Múlt hónapban
+Month before last: Két hónappal ezelõtt
+Next year: Jövõre
+This year: Idén
+Last year: Tavaly
+Year before last: Tavalyelõtt
+Next 14 days: Következő 14 nap
+Next 30 days: Következő 30 nap
+Next 60 days: Következő 60 nap
+Next 90 days: Következő 90 nap
+Next 180 days: Következő 180 nap
+Next 365 days: Következő 365 nap
+Invalid report id: Érvénytelen riport id
+Unnamed Report: Névtelen jelentés
+Add Report: Jelentés hozzáadása
+Edit Report: Jelentés szerkesztése
+Report name: Jelentés neve
+Current User: Felhasználó
+Include link in trailer: Link beszúrása a láblécbe
+Include standard header/trailer: Standard fejléc/lábléc beszúrása
+Date range: Dátumtartomány
+Include previous/next links: Elõzõ/következõ linkek beszúrása
+Include empty dates: Üres dátumok beszúrása
+Template variables: Sablonváltozók
+Page template: Oldalsablon
+Day template: Nap sablon
+Event template: Eseménysablon
+Are you sure you want to delete this report?: Valóban törölni akarod ezt a jelentést?
+
+
+###############################################
+# Page: edit_report_handler.php
+#
+Variable N not found: N változót nem találom
+
+
+###############################################
+# Page: edit_template.php
+#
+Edit Custom Script/Stylesheet: Egyedi szkript/stíluslap szerkesztése
+Edit Custom Header: Egyedi fejléc szerkesztése
+Edit Custom Trailer: Egyedi lábléc szerkesztése
+
+
+###############################################
+# Page: edit_user.php
+#
+Username: Azonosító
+E-mail address: E-mail cím
+Password: Jelszó
+again: újra
+Disabled for demo: A demo-ban letiltva
+Are you sure you want to delete this user?: Biztos, hogy törlöd ezt a felhasználót?
+Change Password: Jelszó változtatás
+New Password: Új jelszó
+Set Password: Jelszó beállítás
+
+
+###############################################
+# Page: edit_user_handler.php
+#
+Deleting users not supported: Felhasználók törlése nem támogatott
+The passwords were not identical: A jelszavak nem egyeznek meg
+You have not entered a password: Nem írtad be a jelszót
+Username can not be blank: A felhasználónév nem lehet üres
+
+
+###############################################
+# Page: export.php
+#
+Export: Export
+Export format: Exportálás formátuma
+Palm Pilot: Palm Pilot
+Include all layers: Tartlamazzon minden réteget
+Export all dates: Minden dátum exportálása
+Start date: Kezdõ dátum
+End date: Befejezõ dátum
+Modified since: Módosítva
+
+
+###############################################
+# Page: group_edit.php
+#
+Unnamed Group: Névtelen csoport
+Add Group: Csoport hozzáadása
+Edit Group: Csoport szerkesztése
+Group name: Csoportnév
+Updated: Frissítve
+Created by: Létrehozta
+
+
+###############################################
+# Page: group_edit_handler.php
+#
+You must specify a group name: Meg kell adnod egy csoportnevet
+
+
+###############################################
+# Page: groups.php
+#
+Add New Group: Új csoport hozzáadása
+
+
+###############################################
+# Page: help_admin.php
+#
+Display days with events in bold in year view: Eseményt tartalmazó napok megjelenítése kiemelve év nézetben
+Nonuser: Felhasználó nélküli naptárak
+user-customize-color: Specifies whether users are allowed to modify their own color scheme.
+enable-gradient-help: Use gradient colors for cell backgrounds.
+Manually entering color values: Színkódok megadása kézzel
+
+
+###############################################
+# Page: help_bug.php
+#
+Report Bug: Hibabejelentés
+
+
+###############################################
+# Page: help_edit_entry.php
+#
+Adding/Editing Calendar Entries: Naptárbejegyzések hozzáadása/módosítása
+
+
+###############################################
+# Page: help_import.php
+#
+Import: Import
+Palm Desktop: Palm Desktop
+This form will allow you to import entries from the Palm Desktop Datebook.: Ezen az ûrlapon tudsz Palm Desktop Datebook bejegyzéseket importálni.
+It should be located in your Palm directory in <tt>datebook/datebook.dat</tt> in a subdirectory named by your username.: A Palm könyvtáradban kell lennie <tt>datebook/datebook.dat</tt>-ként egy, a felhasználói nevedrõl elnevezett könyvtárban.
+The following entries will not be imported: A következõ bejegyzések nem importálhatók
+Entries older than the current date: Mainál régebbi bejegyzések
+Entries created in the Palm Desktop that have not been HotSync'd: A Palm Desktopon létrehozott bejegyzések, amiket még nem HotSync-eltél
+Anything imported from Palm will be overwritten during the next import (unless the event date has passed).: Minden Palm-ból importált adat felülíródik a következõ importálás során (hacsak az esemény dátuma el nem múlt).
+Therefore, updates should be made in the Palm Desktop.: Tehát készíts frissítést a Palm Desktopon.
+vCal: vCal
+This form will import vCalendar (.vcs) 1.0 events: Ezen az ûrlapon tudsz vCalendar (.vcs) 1.0 eseményeket importálni.
+The following formats have been tested: A következõ formátumok lettek tesztelve
+Palm Desktop 4: Palm Desktop 4
+Lotus Organizer 6: Lotus Organizer 6
+Microsoft Outlook 2002: Microsoft Outlook 2002
+iCalendar: iCalendar
+This form will import iCalendar (.ics) events: Ezen az ûrlapon tudsz iCalendar (.ics) eseményeket importálni.
+Enabling <b>Overwrite Prior Import</b> will cause events imported previously that used the same UID as an event from the new import file to be marked as deleted.  This should allow an updated iCalendar file to be imported without creating duplicates.: Ha bekapcsolod <b>Elõzõ import felülírását</b>, akkor a korábban azonos UID-del importált események az új importálás során törlõdnek. Így lehetõvé válik egy frissített iCalendar fájl importálása másolatok létrehozása nélkül.
+
+
+###############################################
+# Page: help_index.php
+#
+Help Index: Súgó tartalomjegyzék
+
+
+###############################################
+# Page: help_layers.php
+#
+Layers are useful for displaying other users' events in your own calendar.  You can specifiy the user and the color the events will be displayed in.: A rétegek hasznosak más felhasználó eseményeinek a saját naptáradban való megjelenítéséhez. Megadhatod a felhasználót és a színt, amivel az eseményeit jelölni szeretnéd.
+Add/Edit/Delete: Hozzáadás/Szerkesztés/Törlés
+Clicking the Edit Layers link in the admin section at the bottom of the page will allow you to add/edit/delete layers.: A lap alján az adminisztrációs részben a Rétegek szerkesztése linkre kattintva hozzáadhatsz/szerkeszthetsz/törölhetsz rétegeket.
+Specifies the user that you would like to see displayed in your calendar.: Megadja, hogy mely felhasználót szeretnéd megjeleníteni a naptáradban.
+The text color of the new layer that will be displayed in your calendar.: A naptáradban megjelenõ új réteg szövegszíne.
+If checked, events that are duplicates of your events will be shown.: Bejelölve megjeleníti azokat az eseményeket, melyek a te eseményeid másolatai.
+Disabling: Letiltás
+Press the Disable Layers link in the admin section at the bottom of the page to turn off layers.: Az oldal alján az adminisztrációs részben kattints a Rétegek letiltása linkre a rétegek kikapcsolásához.
+Enabling: Engedélyezés
+Press the Enable Layers link in the admin section at the bottom of the page to turn on layers.: Az oldal alján az adminisztrációs részben kattints a Rétegek engedélyezése linkre a rétegek bekapcsolásához.
+
+
+###############################################
+# Page: help_pref.php
+#
+Timezone Offset: Idõzóna eltérés
+tz-help: Megadja a szerver és a helyi idõzóna közötti eltérést órában.
+Default Category: Alapértelmezett kategória
+default-category-help: Megadja az új esemény alapértelmezett kategóriáját.
+When I am the boss: Amikor én vagyok a fõnök
+Email me event notification: Kérek értesítést az eseményrõl
+email-boss-notifications-help: Megadja, hogy a főnökök kapjanak-e email értesítést
+I want to approve events: Szeretném jóváhagyni az eseményeket
+boss-approve-event-help: Megadja, hogy a főnöknek jóvá kell-e hagynia a titkárok által hozzáadott eseményeket.
+Subscribe/Publish: Feliratkozás/közzététel
+allow-remote-subscriptions-help: Megadja, hogy távoli felhasználók feliratkozhatnak-e a naptáradhoz, és így megtekinthetik-e az eseményeidet iCal-kompatibilis programjaikban (mint például Apple iCal vagy Mozilla Calendar).
+URL: URL
+remote-subscriptions-url-help: Megmutatja az URL-t, amit a távoli felhasználóknak kell használniuk a naptáradhoz való feliratkozáshoz.
+
+
+###############################################
+# Page: import.php
+#
+Disabled: Letiltva
+Import format: Import formátum
+Exclude private records: Saját rekordok kizárása
+Overwrite Prior Import: Elõzõ import felülírása
+
+
+###############################################
+# Page: import_handler.php
+#
+Import Results: Import eredménye
+Events successfully imported: események rendben importálva.
+Events from prior import marked as deleted: elõzõ importból származó eredmények töröltnek jelzése
+Conflicting events: Ütközõ események
+Errors: Hibák
+There was an error parsing the import file or no events were returned: Hiba történt az importálandó fájl feldolgozásakor, vagy nem volt benne esemény
+The import file contained no data: Az importálandó fájl nem tartalmaz adatot.
+Event Imported: Esemény importálva
+View this entry: Bejegyzés megtekintése
+
+
+###############################################
+# Page: layers.php
+#
+Layers are currently: A rétegek megjelenítése jelenleg
+Enabled: Engedélyezve
+Disable Layers: Rétegek tiltása
+Enable Layers: Rétegek engedélyezése
+to modify the layers settings for the: módosíthatod a rétegek beállítását a következõhöz:
+calendar: naptár
+Add layer: Réteg hozzáadása
+Layer: Réteg
+Edit layer: Réteg módosítása
+
+
+###############################################
+# Page: list_unapproved.php
+#
+Approve/Confirm: Jóváhagyás/Beleegyezés
+Approve this entry?: Jóváhagyod ezt a bejegyzést?
+Reject: Elutasítás
+Reject this entry?: Elutasítod ezt a bejegyzést?
+No unapproved events for: A következõnek nincsenek jóváhagyatlan eseményei:
+Unapproved Events: Jóváhagyás nélküli események
+
+
+###############################################
+# Page: login.php
+#
+Invalid login: Érvénytelen azonosító
+You must enter a login and password: Add meg az azonosítódat és jelszavadat
+Save login via cookies so I don't have to login next time: A bejelentkezési jelszó mentése, így errõl a géprõl legközelebb nem kell megadni
+Login: Bejelentkezés
+Access public calendar: Nyilvános naptár elérése
+cookies-note: <b>Megjegyzés:</b> A sütiket engedélyezni kell a naptár használatához.
+
+
+###############################################
+# Page: month.php
+#
+Sun: Vas
+Mon: Hét
+Tue: Ke
+Wed: Sze
+Thu: Csü
+Fri: Pé
+Sat: Szo
+
+
+###############################################
+# Page: nonusers.php
+#
+Add New NonUser Calendar: Új felhasználó nélküli naptár hozzáadása
+
+
+###############################################
+# Page: pref.php
+#
+Save Preferences: Beállítások mentése
+to modify the preferences for the Public Access calendar: módosíthatod a nyilvános naptár beállításait.
+Add N hours to: adj N órát
+Subtract N hours from: vonj ki N órát
+same as: adj 0 órát
+server time: a szerver idejéhez
+All: Összes
+
+
+###############################################
+# Page: purge.php
+#
+Preview: Előnézet
+Purging events for: A következõ eseményeinek törlése:
+Finished: Kész
+Check box to delete <b>ALL</b> events for a user: Jelöld be a felhasználó <b>ÖSSZES</b> eseményének törléséhez
+Delete all events before: Az összes ezelõtti esemény törlése
+Preview delete: Törlendők előnézete
+Are you sure you want to delete events for: Biztosan törölni akarod a következõ felhasználó eseményeit:
+Records deleted from: Rekordok törölve a következõbõl
+
+
+###############################################
+# Page: reject_entry.php
+#
+An appointment has been rejected by: Egy találkozót elutasított
+Title: WebNaptár
+
+
+###############################################
+# Page: report.php
+#
+Private: Magán
+This event is confidential: Ez az esemény bizalmas
+Waiting for approval: Jóváhagyásra vár
+Deleted: Törölve
+Rejected: Elutasítva
+Approved: Jóváhagyva
+Unknown: Ismeretlen
+to manage reports for the Public Access calendar: kezelheti a nyilvános naptár jelentéseit
+Add new report: Új jelentés hozzáadása
+cont.: folyt.
+Manage Reports: Jelentések kezelése
+
+
+###############################################
+# Page: search.php
+#
+Search: Keresés
+Keywords: Kulcsszavak
+Advanced Search: Bõvített keresés
+
+
+###############################################
+# Page: search_handler.php
+#
+You must enter one or more search keywords: Legalább egy kulcsszót meg kell adnod
+Search Results: Találatok
+match found: egyezést találtam
+matches found: egyezést találtam
+No matches found: Nincs találat
+
+
+###############################################
+# Page: select_user.php
+#
+View Another User's Calendar: Betekintés más felhasználók naptárába
+Go: Mehet
+
+
+###############################################
+# Page: set_entry_cat.php
+#
+You have not added any categories: Még nem adtál hozzá kategóriát
+Set Category: Kategória beállítása
+
+
+###############################################
+# Page: users.php
+#
+Add New User: Új felhasználó hozzáadása
+denotes administrative user: adminisztrátor
+
+
+###############################################
+# Page: usersel.php
+#
+Reset: Alaphelyzet
+Remove: Törlés
+Ok: OK
+
+
+###############################################
+# Page: view_d.php
+#
+No users for this view: Nincs felhasználó a nézethez
+
+
+###############################################
+# Page: view_entry.php
+#
+every: minden
+2nd: 2.
+3rd: 3.
+4th: 4.
+5th: 5.
+1st: 1.
+last: utolsó
+Description: Leírás
+Status: Állapot
+day: nap
+minute: perc
+External User: Külső felhasználó
+Approve/Confirm entry: Bejegyzés jóváhagyása/Beleegyezés
+Reject entry: Bejegyzés elutasítása
+Set category: Kategória beállítása
+Edit repeating entry for all dates: Az összes dátum ismétlõdõ bejegyzésének szerkesztése
+Edit entry for this date: Ezen dátum bejegyzésének szerkesztése
+Delete repeating event for all dates: Az összes dátum ismétlõdõ bejegyzésének törlése
+This will delete this entry for all users.: Ez a bejegyzés minden felhasználó számára törölve lesz.
+Delete entry only for this date: Ezen dátum bejegyzésének törlése
+Edit entry: Bejegyzés módosítása
+Copy entry: Bejegyzés másolása
+This will delete the entry from your calendar.: A bejegyzés törölve lesz a naptáradból.
+Add to My Calendar: Hozzáadás a saját naptárhoz
+Do you want to add this entry to your calendar?: Hozzá akarod adni ezt a bejegyzést a saját naptáradhoz?
+This will add the entry to your calendar.: A bejegyzés hozzá lesz adva a saját naptáradhoz.
+Email all participants: Email minden résztvevõnek
+Show activity log: Tevékenységi napló megjelenítése
+Hide activity log: Tevékenységi napló elrejtése
+Export this entry to: Ezen esemény exportálása a következõbe
+
+
+###############################################
+# Page: views.php
+#
+Add New View: Új nézet hozzáadása
+
+
+###############################################
+# Page: views_edit.php
+#
+Unnamed View: Névtelen nézet
+Add View: Nézet hozzáadása
+Edit View: Nézet szerkesztése
+View Name: Nézet neve
+View Type: Nézet típusa
+Week (Users horizontal): Heti (Felhasználók vízszintesen)
+Week (Users vertical): Heti (Felhasználók függõlegesen)
+Week (Timebar): Heti (Idõvonal)
+Month (Timebar): Hónap (Idővonal)
+Month (side by side): Havi (egymás mellett)
+Month (on same calendar): Havi (ugyanazon naptáron)
+preview: előnézet
+Selected: Kiválasztott
+
+
+###############################################
+# Page: views_edit_handler.php
+#
+You must specify a view name: Adj meg egy nézetnevet
+
+
+###############################################
+# Page: week_details.php
+#
+New Entry: Új bejegyzés
+
+
+###############################################
+# Page: export_handler.php
+#
+export format not defined or incorrect: nem adtál meg exportformátumot, vagy az hibás
+
+
+###############################################
+# Page: includes/config.php
+#
+English: angol
+Basque: baszk
+Bulgarian: bolgár
+Catalan: katalán
+Chinese (Traditonal/Big5): kínai (tradicionális/Big5)
+Chinese (Simplified/GB2312): kínai (GB2312)
+Czech: cseh
+Danish: dán
+Dutch: holland
+Estonian: észt
+Finnish: finn
+French: francia
+Galician: galíciai
+German: német
+Greek: Görög
+Holo (Taiwanese): holo (taiwani)
+Hungarian: magyar
+Icelandic: izlandi
+Italian: olasz
+Japanese: japán
+Korean: koreai
+Norwegian: norvég
+Polish: lengyel
+Portuguese: portugál
+Portuguese/Brazil: brazil portugál
+Romanian: Román
+Russian: orosz
+Spanish: spanyol
+Swedish: svéd
+Turkish: török
+Welsh: Welszi
+
+
+###############################################
+# Page: includes/functions.php
+#
+exceeds limit of XXX events per day: túllépte a napi XXX esemény korlátját
+You have XXX unapproved events: XXX jóvagyás nélküli eseményed van
+January: Január
+February: Február
+March: Március
+April: Április
+May_: Május
+June: Június
+July: Július
+August: Augusztus
+September: Szeptember
+October: Október
+November: November
+Jan: Jan
+Feb: Feb
+Mar: Márc
+Apr: Ápr
+May: Máj
+Jun: Jún
+Jul: Júl
+Aug: Aug
+Sep: Szept
+Oct: Okt
+Nov: Nov
+Dec: Dec
+All Attendees: Minden meghívott
+Busy: Elfoglalt
+Tentative: Esetleg
+
+
+###############################################
+# Page: includes/help_trailer.php
+#
+Go to: Ugrás
+
+
+###############################################
+# Page: includes/site_extras.php
+#
+Send Reminder: Emlékeztetõ küldése
+
+
+###############################################
+# Page: includes/trailer.php
+#
+My Calendar: Saját naptáram
+Back to My Calendar: Vissza a Saját Naptáramhoz
+Another User's Calendar: Másik felhasználó naptára
+Add New Entry: Új bejegyzés hozzáadása
+Logout: Kijelentkezés
+Manage calendar of: A következõ naptárának kezelése
+
+
+###############################################
+# Page: includes/user-nis.php
+#
+incorrect password: hibás jelszó
+no such user: nincs ilyen felhasználó
+Invalid user login: Sikertelen bejelentkezés
+
+
+###############################################
+# Page: includes/js/edit_entry.php
+#
+You have not entered a Brief Description: Nem írtál rövid leírást
+You have not entered a valid time of day: Érvénytelen időt adtál meg
+The time you have entered begins before your preferred work hours.  Is this correct?: Az idõpont, amit megadtál, munkaidõn kívül van. Jó így?
+Please add a participant: Kérlek adj meg egy résztvevőt
+
+
+###############################################
+# Page: includes/js/admin.php
+#
+Server URL is required: Szerver URL-t meg kell adni
+Server URL must end with '/': Szerver URL-nek '/'-rel kell végzõdnie
+Invalid work hours: Érvénytelen munkaidõ
+Invalid color for document background: Érvénytelen háttérszín
+Invalid color for document title: Érvénytelen címsorszín
+Invalid color for table cell background: Érvénytelen táblacella-háttérszín
+Invalid color for table grid: Érvénytelen táblarács-szín
+Invalid color for table header background: Érvénytelen táblafejléc-háttérszín
+Invalid color for table text background: Érvénytelen táblaszöveg-háttérszín
+Invalid color for event popup background: Érvénytelen felugró eseményablak-háttérszín
+Invalid color for event popup text: Érvénytelen felugró eseményablak-szövegszín
+Invalid color for table cell background for today: Érvénytelen táblacella-háttérszín a MAI napra
+Color format should be '#RRGGBB': A színeket '#RRGGBB' formátumban kell megadni
+
+
+###############################################
+# Page: includes/js/availability.php
+#
+Change the date and time of this entry?: Változzon a bejegyzés dátuma és ideje?
+
+
+###############################################
+# Page: includes/js/edit_layer.php
+#
+Invalid color: Érvénytelen szín
+
+
+###############################################
+# Page: tools/send_reminders.php
+#
+This is a reminder for the event detailed below.: Ez egy emlékeztetõ az alábbi eseményre.
+Reminder: Emlékeztetõ

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Icelandic.txt
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Icelandic.txt	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Icelandic.txt	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,1935 @@
+# Use this as a starting point to translate this application into
+# another language.  The format is "English text: translated text"
+# There cannot be a ":" in the English text.
+# Translated by:
+#	Kristofer Arnar Einarsson kristofer at kristofer.com
+# Last update: 18 August 2000
+# Translation last updated on 03-10-2004
+
+# No charset specified (not needed for iso-8859-1)
+# "charset" is used in a meta tag, do not translate "charset" here.
+# charset:
+
+
+
+###############################################
+# Page: admin.php
+#
+#
+# << MISSING >>
+# System Settings:
+You are not authorized: Þú hefur ekki heimild
+#
+# << MISSING >>
+# Note:
+#
+# << MISSING >>
+# Your user preferences:
+#
+# << MISSING >>
+# may be affecting the appearance of this page.:
+#
+# << MISSING >>
+# Click here:
+#
+# << MISSING >>
+# to not use your user preferences when viewing this page:
+#
+# << MISSING >>
+# are being ignored while viewing this page.:
+#
+# << MISSING >>
+# to load your user preferences when viewing this page:
+Save: Vista
+Help: Hjálp
+Settings: Stillingar
+#
+# << MISSING >>
+# app-name-help:
+# English text: Specifies the name of the application that will appear in the browser title bar for all pages and on the login page.  The value you specify here will be looked up in the translations file allowing you to provide different titles for different languages.
+#
+#
+# << MISSING >>
+# Application Name:
+#
+# << MISSING >>
+# server-url-help:
+# English text: Specifies the base URL for the application.  This will be included when sending out email reminders and notifications.
+#
+#
+# << MISSING >>
+# Server URL:
+language-help: Tilgreinir tungumál.
+Language: Tungumál
+#
+# << MISSING >>
+# Your browser default language is:
+#
+# << MISSING >>
+# fonts-help:
+# English text: Specifies a list of system fonts to use (such as "Arial, Helvetica")
+#
+#
+# << MISSING >>
+# Fonts:
+#
+# << MISSING >>
+# custom-script-help:
+# English text: Allows entry of custom Javascript or stylesheet text that will be inserted into the HTML "head" section of every page.
+#
+#
+# << MISSING >>
+# Custom script/stylesheet:
+Yes: Já
+No: Nei
+#
+# << MISSING >>
+# Edit:
+#
+# << MISSING >>
+# custom-header-help:
+# English text: Allows a custom HTML snippet to be included in the top of every page.
+#
+#
+# << MISSING >>
+# Custom header:
+#
+# << MISSING >>
+# custom-trailer-help:
+# English text: Allows a custom HTML snippet to be included at the end of every page.
+#
+#
+# << MISSING >>
+# Custom trailer:
+preferred-view-help: Tilgreinir sjálfgefið val (Dagur, vika, mánuður eða ár).
+Preferred view: Birting
+Day: Dagur
+Week: Vika
+Month: Mánuður
+Year: Ár
+#
+# << MISSING >>
+# display-weekends-help:
+# English text: Include weekends when viewing a week.
+#
+#
+# << MISSING >>
+# Display weekends in week view:
+#
+# << MISSING >>
+# yearly-shows-events-help:
+# English text: On the yearly view, display days that contain events in a bold font.
+#
+#
+# << MISSING >>
+# Display days with events in bold in year view:
+#
+# << MISSING >>
+# display-desc-print-day-help:
+# English text: Include event descriptions in printer-friendly version of day view.
+#
+#
+# << MISSING >>
+# Display description in printer day view:
+#
+# << MISSING >>
+# date-format-help:
+# English text: Specifies the preferred date format.
+#
+#
+# << MISSING >>
+# Date format:
+December: Desember
+time-format-help: Tilgreinir á hvaða tímasnið á að nota: <br /><i>12 tíma:</i> Birtir tíma sem 3fh, 8:30eh, o.s.frv.  <br /><i>24 tíma:</i> Birtir tíma sem 300, 2030, o.s.frv.
+Time format: Klukka
+12 hour: 12 tíma
+24 hour: 24 tíma
+#
+# << MISSING >>
+# time-interval-help:
+# English text: Specifies how long the time blocks in the week view and day view will be.
+#
+#
+# << MISSING >>
+# Time interval:
+#
+# << MISSING >>
+# hour:
+minutes: mínútur
+#
+# << MISSING >>
+# auto-refresh-help:
+# English text: When enabled, the day view, week view, month view, and list aunapproved pages will all automatically refresh themselves periodically.
+#
+#
+# << MISSING >>
+# Auto-refresh calendars:
+#
+# << MISSING >>
+# auto-refresh-time-help:
+# English text: If Auto-refresh is enabled, this specifies the time between each refresh.
+#
+#
+# << MISSING >>
+# Auto-refresh time:
+#
+# << MISSING >>
+# require-approvals-help:
+# English text: When enabled, a user must approve an event before it is displayed on their calendar (unless Display unapproved is enabled).  Note setting this to "No" will not turn off approvals for the Public Access calendar (if the Public Access calendar is enabled).
+#
+#
+# << MISSING >>
+# Require event approvals:
+display-unapproved-help: Tilgreinir hvort birta eigi ósamþykkt atriði í dagatali.<br /> Ef "Já", eru ósamþykkt atriði birt á dagatali (í öðrum lit).<br /> Ef "Nei", verður að samþykkta atriði til þess að þau birtist á dagatali.
+Display unapproved: Birta ósamþykkt
+display-week-number-help: Tilgreinir hvort vikunúmer (1-52) eigi að birtast í mánaðar og viku vali.
+Display week number: Birta númer viku
+display-week-starts-on: Tilgreinir hvort vikan byrjar á sunnudegi eða mánudegi.  Ef mánudagur er valinn munu vikunúmerin á ISO viku númer.
+Week starts on: Vika byrjar á
+Sunday: Sunnudagur
+Monday: Mánudagur
+work-hours-help: Tilgreinir vinnutíma sem á að birta.
+Work hours: Vinnutími
+From: Frá
+to: til
+#
+# << MISSING >>
+# disable-priority-field-help:
+# English text: Selecting "Yes" will remove the "Priority" field from event information pages, providing a simpler interface for novices.
+#
+#
+# << MISSING >>
+# Disable Priority field:
+#
+# << MISSING >>
+# disable-access-field-help:
+# English text: Selecting "Yes" will remove the "Access" field from event information pages, providing a simpler interface for novices.
+#
+#
+# << MISSING >>
+# Disable Access field:
+#
+# << MISSING >>
+# disable-participants-field-help:
+# English text: Selecting "Yes" will remove the "Particpants" field from event information pages, preventing users from adding other users to their events.  If you enable this option, you may want to also disable the "Allow viewing other user's calendars" field also.
+#
+#
+# << MISSING >>
+# Disable Participants field:
+#
+# << MISSING >>
+# disable-repeating-field-help:
+# English text: Selecting "Yes" will remove the "Repeating" field when adding events.  This will provide a simpler interface for novices.
+#
+#
+# << MISSING >>
+# Disable Repeating field:
+#
+# << MISSING >>
+# popup-includes-siteextras-help:
+# English text: If enabled, allow custom event fields setup in the site_extras.php file will be displayed in event popups.
+#
+#
+# << MISSING >>
+# Display Site Extras in popup:
+#
+# << MISSING >>
+# allow-html-description-help:
+# English text: If enabled, users can enter HTML in the event description field.  If not enabled, the HTML tags will be escaped so as to appear as plain text.  Warning: Enabling this feature will allow users to reference images on other websites.
+#
+#
+# << MISSING >>
+# Allow HTML in Description:
+#
+# << MISSING >>
+# allow-view-other-help:
+# English text: Specifies whether one user may view another user's calendar.
+#
+#
+# << MISSING >>
+# Allow viewing other user's calendars:
+#
+# << MISSING >>
+# allow-public-access-help:
+# English text: When enabled, the calendar can be used as a read-only public calendar that does not require users to login.
+#
+#
+# << MISSING >>
+# Allow public access:
+#
+# << MISSING >>
+# public-access-view-others-help:
+# English text: When access the system with public access, specifies whether the user can view the calendar of another calendar user.
+#
+#
+# << MISSING >>
+# Public access can view other users:
+#
+# << MISSING >>
+# public-access-can-add-help:
+# English text: When enabled, users that access the system through Public Access will be able to add new events, but they will not show up in the calendar until an administrator approves the new event.
+#
+#
+# << MISSING >>
+# Public access can add events:
+#
+# << MISSING >>
+# public-access-add-requires-approval-help:
+# English text: Specifies whether events added via the public access account require approval before being displayed.
+#
+#
+# << MISSING >>
+# Public access new events require approval:
+#
+# << MISSING >>
+# public-access-sees-participants-help:
+# English text: If enabled, users accessing the calendar from the public account will be able to see event participants if they view details of an event.
+#
+#
+# << MISSING >>
+# Public access can view participants:
+#
+# << MISSING >>
+# allow-view-add-help:
+# English text: A '+' icon will be included in views, allowing users to quickly add events to other users' calendars.
+#
+#
+# << MISSING >>
+# Include add event link in views:
+#
+# << MISSING >>
+# allow-external-users-help:
+# English text: Specifies whether a non-calendar user can be added to an event.  This allows non-calendar users to be listed as event participants.
+#
+#
+# << MISSING >>
+# Allow external users:
+#
+# << MISSING >>
+# external-can-receive-notification-help:
+# English text: When external users are enabled and email usage is enabled, external users can receive email notifications when the event is added, updated or delete (if the external user's email address is provided).
+#
+#
+# << MISSING >>
+# External users can receive email notifications:
+#
+# << MISSING >>
+# external-can-receive-reminder-help:
+# English text: When external users are enabled and email usage is enabled, external users can receive email reminders (if the external user's email address is provided).
+#
+#
+# << MISSING >>
+# External users can receive email reminders:
+#
+# << MISSING >>
+# remember-last-login-help:
+# English text: When enabled, the user's login will be filled in for them on the login page (but not the password), and the user's preferences will be loaded (including their preferred colors and language selection).
+#
+#
+# << MISSING >>
+# Remember last login:
+#
+# << MISSING >>
+# conflict-check-help:
+# English text: Check for event conflicts (two events scheduled for the same time for the same person).  If you set this to "Yes", you will still be able to schedule two events at the same time after confirming a warning. If you set this to "No", no checking for conflicts will be done.  You probably want to set this to "Yes", so conflict checking occurs.
+#
+#
+# << MISSING >>
+# Check for event conflicts:
+#
+# << MISSING >>
+# conflict-months-help:
+# English text: If conflict checking is in place ("Check for event conflicts" is set to "No"), this specifies how many months into the future we should check for conflicts.  If you find adding events is taking a long time to process, reduce this number.
+#
+#
+# << MISSING >>
+# Conflict checking months:
+#
+# << MISSING >>
+# conflict-check-override-help:
+# English text: Allows users to override event conflicts and schedule two or more events for the same time.
+#
+#
+# << MISSING >>
+# Allow users to override conflicts:
+#
+# << MISSING >>
+# limit-appts-help:
+# English text: Allows the system administrator to set a system-wide limit on the number of appointments a single user can have on any single day.
+#
+#
+# << MISSING >>
+# Limit number of timed events per day:
+#
+# << MISSING >>
+# limit-appts-number-help:
+# English text: Specifies the maximum number of timed events a user can have in a single day.
+#
+#
+# << MISSING >>
+# Maximum timed events per day:
+#
+# << MISSING >>
+# Plugins:
+#
+# << MISSING >>
+# plugins-enabled-help:
+# English text: Enable plugin applications.
+#
+#
+# << MISSING >>
+# Enable Plugins:
+#
+# << MISSING >>
+# plugins-sort-key-help:
+# English text: Specifies a sort key for the plugin.  This allows the plugins to appear in a specific order.
+#
+#
+# << MISSING >>
+# Plugin:
+#
+# << MISSING >>
+# Groups:
+#
+# << MISSING >>
+# groups-enabled-help:
+# English text: Enables group support, allowing users to select users by groups.
+#
+#
+# << MISSING >>
+# Groups enabled:
+#
+# << MISSING >>
+# user-sees-his-group-help:
+# English text: If enabled, users will not see calendar users that are not in at least one of their groups.
+#
+#
+# << MISSING >>
+# User sees only his groups:
+#
+# << MISSING >>
+# Categories:
+#
+# << MISSING >>
+# categories-enabled-help:
+# English text: Enables support for event categories.
+#
+#
+# << MISSING >>
+# Categories enabled:
+#
+# << MISSING >>
+# Nonuser:
+# English text: Nonuser Calendars
+#
+#
+# << MISSING >>
+# nonuser-enabled-help:
+# English text: If enabled, admins will have the option to add nonuser calendars
+#
+#
+# << MISSING >>
+# Nonuser enabled:
+# English text: Nonuser Calendars Enabled
+#
+#
+# << MISSING >>
+# nonuser-list-help:
+# English text: Where to display the nonuser calendars in the participant list
+#
+#
+# << MISSING >>
+# Nonuser list:
+# English text: Display in participants list at
+#
+#
+# << MISSING >>
+# Top:
+#
+# << MISSING >>
+# Bottom:
+#
+# << MISSING >>
+# Reports:
+#
+# << MISSING >>
+# reports-enabled-help:
+# English text: If enabled, users will see a "Reports" section at the bottom of each page and will be allowed to create custom reports.  Additionally, admin users can create global reports that will appear at the bottom of all users' pages.
+#
+#
+# << MISSING >>
+# Reports enabled:
+#
+# << MISSING >>
+# Subscribe/Publish:
+#
+# << MISSING >>
+# subscriptions-enabled-help:
+# English text: Specifies if remote users can subscribe to a WebCalendar user's calendar, allowing them to see the WebCalendar user's events in their iCal-enabled application (such as Apple's iCal or Mozilla Calendar).
+#
+#
+# << MISSING >>
+# Allow remote subscriptions:
+#
+# << MISSING >>
+# Email:
+#
+# << MISSING >>
+# email-enabled-help:
+# English text: Turn on or off all sending of email for notification and reminders.  Set to "no", if your server is not properly setup to send mail.
+#
+#
+# << MISSING >>
+# Email enabled:
+#
+# << MISSING >>
+# email-default-sender:
+# English text: Specifies the email address to specify as the sender when sending out reminders.
+#
+#
+# << MISSING >>
+# Default sender address:
+#
+# << MISSING >>
+# Default user settings:
+#
+# << MISSING >>
+# email-event-reminders-help:
+# English text: Specifies whether or not to send event reminders.
+#
+#
+# << MISSING >>
+# Event reminders:
+#
+# << MISSING >>
+# email-event-added:
+# English text: Specifies whether or not to send email notifications when an event is added to your calendar.
+#
+#
+# << MISSING >>
+# Events added to my calendar:
+#
+# << MISSING >>
+# email-event-updated:
+# English text: Specifies whether or not to send email notifications when an event is updated on your calendar.
+#
+#
+# << MISSING >>
+# Events updated on my calendar:
+#
+# << MISSING >>
+# email-event-deleted:
+# English text: Specifies whether or not to send email notifications when an event is removed from your calendar.
+#
+#
+# << MISSING >>
+# Events removed from my calendar:
+#
+# << MISSING >>
+# email-event-rejected:
+# English text: Specifies whether or not to send email notifications when a participant rejects an event that is on your calendar.
+#
+#
+# << MISSING >>
+# Event rejected by participant:
+colors-help: Alla liti á að skilgreina með "#RRGGBB" hex sniði þar sem "RR" er hex gildið fyrir rauðan, "GG" er hex gildi fyrir grænan, og "BB" er hex gildi fyrir bláan.
+Colors: Litir
+#
+# << MISSING >>
+# Allow user to customize colors:
+Document background: Bakgrunnur
+Select: Velja
+Document title: Titill
+#
+# << MISSING >>
+# Document text:
+#
+# << MISSING >>
+# Table grid color:
+#
+# << MISSING >>
+# Table header background:
+#
+# << MISSING >>
+# Table header text:
+Table cell background: Bakgrunnur dálka
+Table cell background for current day: Bakgrunnur dálka núverandi dags
+#
+# << MISSING >>
+# Table cell background for weekends:
+#
+# << MISSING >>
+# Event popup background:
+#
+# << MISSING >>
+# Event popup text:
+
+
+###############################################
+# Page: activity_log.php
+#
+#
+# << MISSING >>
+# Activity Log:
+#
+# << MISSING >>
+# User:
+#
+# << MISSING >>
+# Calendar:
+Date: Dags
+Time: Tími
+#
+# << MISSING >>
+# Event:
+#
+# << MISSING >>
+# Action:
+#
+# << MISSING >>
+# Event created:
+#
+# << MISSING >>
+# Event approved:
+#
+# << MISSING >>
+# Event rejected:
+#
+# << MISSING >>
+# Event updated:
+#
+# << MISSING >>
+# Event deleted:
+#
+# << MISSING >>
+# Notification sent:
+#
+# << MISSING >>
+# Reminder sent:
+#
+# << MISSING >>
+# Database error:
+#
+# << MISSING >>
+# Previous:
+#
+# << MISSING >>
+# Next:
+
+
+###############################################
+# Page: add_entry.php
+#
+Invalid entry id: Óleyfilegt einkenni
+#
+# << MISSING >>
+# This is a private event and may not be added to your calendar.:
+#
+# << MISSING >>
+# Error adding event:
+
+
+###############################################
+# Page: admin_handler.php
+#
+Error: Villa
+The following error occurred: Eftirfarandi villa kom upp
+
+
+###############################################
+# Page: approve_entry.php
+#
+Error approving event: Villa við samþykkt atriðis
+
+
+###############################################
+# Page: category.php
+#
+#
+# << MISSING >>
+# Add:
+#
+# << MISSING >>
+# Category Name:
+#
+# << MISSING >>
+# Global:
+Delete: Eyða
+Are you sure you want to delete this entry?: Viltu örugglega eyða þessu atriði?
+#
+# << MISSING >>
+# Add New Category:
+
+
+###############################################
+# Page: category_handler.php
+#
+
+
+###############################################
+# Page: datesel.php
+#
+
+
+###############################################
+# Page: day.php
+#
+#
+# << MISSING >>
+# Admin mode:
+#
+# << MISSING >>
+# Assistant mode:
+Generate printer-friendly version: Búa til prentvæna útgáfu
+Printer Friendly: Prentvænt
+
+
+###############################################
+# Page: del_entry.php
+#
+Hello: Halló
+#
+# << MISSING >>
+# An appointment has been canceled for you by:
+#
+# << MISSING >>
+# The subject was:
+Notification: Tilkynning
+
+
+###############################################
+# Page: edit_entry.php
+#
+Edit Entry: Breyta atriði
+Add Entry: Bæta við
+brief-description-help: Hér á að vera stutt lýsing (u.þ.b 20 stafir) atriðis.  Þetta mun vera einkenni atriðis í dagatali.
+Brief Description: Stutt skrýring
+full-description-help: Hér á að vera full lýsing atriðis.  Upplýsingarnar er hægt að sjá þegar atriði er skoðað.
+Full Description: Full skýring
+date-help: Tilgreinir dagsetningu atriðis.
+time-help: Tilgreinir tíma atriðis.<br /><i>Þessu sviði má sleppa.</i>
+am: fh
+pm: eh
+#
+# << MISSING >>
+# Untimed event:
+#
+# << MISSING >>
+# Timed event:
+#
+# << MISSING >>
+# All day event:
+duration-help: Tilgreinir áætlaða lengd (í mínútum) atriðis.  <br /><i>Þessu sviði má sleppa.</i>
+Duration: Lengd
+#
+# << MISSING >>
+# hours:
+priority-help: Tilgreinir forgang atriðis.  Atriði með háan forgang eru birt með feitu letri.
+Priority: Forgangur
+Low: Lágur
+Medium: Meðal
+High: Hár
+access-help: Tilgreinir aðgang að atriði.<br /> <i>Allir</i>: Allir geta séð fulla lýsingu atriðis.  <br /><i>Trúnaðarmál</i>: Aðrir sjá að viðkomandi hefur atriði á tilgreindum tíma en sjá ekkert um efnið.
+Access: Aðgangur
+Public: Allir
+Confidential: Trúnaðarmál
+#
+# << MISSING >>
+# category-help:
+# English text: Specifies the category of the event.
+#
+#
+# << MISSING >>
+# Category:
+None: Engin
+#
+# << MISSING >>
+# days:
+#
+# << MISSING >>
+# before event:
+participants-help: Fá fram þá sem koma að atriði.
+Participants: Þátttakendur
+#
+# << MISSING >>
+# external-participants-help:
+# English text: Specifies a list of participants for the event that are not calendar users.  The users should be listed one per line and can include an email address.  If an email address is specified, the user is eligible to receive notications and reminders.
+#
+#
+# << MISSING >>
+# External Participants:
+repeat-type-help: Velja hversu oft endurtaka á atburðinn.<i>Mánaðarlega (eftir degi)</i> gerir kleift að endurtaka atriði fyrsta mánudag mánaðar, þriðja þriðjudag o.s.frv.  <i>Mánaðarlega (eftir dags)</i> gerir kleift að endurtaka atriði á sama mánaðardegi.
+Repeat Type: Tegund endurtekningar
+Daily: Daglega
+Weekly: Vikulega
+Monthly: Mánaðarlega
+by day: eftir degi
+#
+# << MISSING >>
+# by day (from end):
+by date: eftir dags
+Yearly: Árlega
+repeat-end-date-help: Tilgreinir dagsetningu sem endurtaka á atriði þangað til.
+Repeat End Date: Lok endurtekningar
+Use end date: Loka dags
+repeat-day-help: Tilgreinir á hvaða vikudegi á að endurtaka atriði. Þetta á aðeins við um þegar valin <i>Endurtekning</i> er <i>Vikulega</i>.
+Repeat Day: Endurtekning
+for weekly: vikulega
+Tuesday: Þriðjudagur
+Wednesday: Miðvikudagur
+Thursday: Fimmtudagur
+Friday: Föstudagur
+Saturday: Laugardagur
+repeat-frequency-help: Tilgreinir hversu oft á að endurtaka atriði. 1 er sjálfgefið fyrir hvert skipti.  Með því að velja 2 er hægt að láta atriði gerast aðra hverja viku (ef valin <i>Endurtekning</i> er <i>Vikulega</i>), annan hvern mánuð (ef valin <i>Endurtekning</i> er <i>Mánaðarlega</i>), o.s.frv.
+Frequency: Tíðni
+Delete entry: Eyða atriði
+You are not authorized to edit this entry: Þú hefur ekki réttindi til þess að breyta þessu atriði
+
+
+###############################################
+# Page: edit_layer.php
+#
+#
+# << MISSING >>
+# Edit Layer:
+#
+# << MISSING >>
+# Add Layer:
+#
+# << MISSING >>
+# Source:
+#
+# << MISSING >>
+# Color:
+#
+# << MISSING >>
+# Duplicates:
+#
+# << MISSING >>
+# Show layer events that are the same as your own:
+#
+# << MISSING >>
+# Are you sure you want to delete this layer?:
+#
+# << MISSING >>
+# Delete layer:
+
+
+###############################################
+# Page: edit_layer_handler.php
+#
+#
+# << MISSING >>
+# You cannot create a layer for yourself:
+#
+# << MISSING >>
+# You can only create one layer for each user:
+
+
+###############################################
+# Page: edit_user.php
+#
+Edit User: Breyta notanda
+Add User: Nýr notandi
+Username: Notandanafn
+First Name: Fornafn
+Last Name: Eftirnafn
+E-mail address: Tölvupóstur
+Password: Lykilorð
+again: aftur
+Admin: Stjórnandi
+#
+# << MISSING >>
+# Disabled for demo:
+Change Password: Breyta lykilorði
+New Password: Nýtt lykilorð
+Set Password: Breyta
+
+
+###############################################
+# Page: edit_user_handler.php
+#
+#
+# << MISSING >>
+# Deleting users not supported:
+The passwords were not identical: Lykilorðin passa ekki saman
+You have not entered a password: Lykilorð vantar
+
+
+###############################################
+# Page: export.php
+#
+Export: Flytja
+Export format: Snið til að flytja á
+Palm Pilot: Palm Pilot
+#
+# << MISSING >>
+# Export all dates:
+Start date: Byrjun dags
+End date: Endir dags
+Modified since: Breytt síðan
+
+
+###############################################
+# Page: export_handler.php
+#
+#
+# << MISSING >>
+# export format not defined or incorrect:
+
+
+###############################################
+# Page: group_edit.php
+#
+#
+# << MISSING >>
+# Unnamed Group:
+#
+# << MISSING >>
+# Add Group:
+#
+# << MISSING >>
+# Edit Group:
+#
+# << MISSING >>
+# Group name:
+Updated: Uppfært
+Created by: Gert af
+Users: Notendur
+
+
+###############################################
+# Page: group_edit_handler.php
+#
+#
+# << MISSING >>
+# You must specify a group name:
+
+
+###############################################
+# Page: groups.php
+#
+#
+# << MISSING >>
+# Add New Group:
+
+
+###############################################
+# Page: icalfb.php
+#
+
+
+###############################################
+# Page: pref.php
+#
+Preferences: Stilla
+#
+# << MISSING >>
+# to modify the preferences for the Public Access calendar:
+#
+# << MISSING >>
+# tz-help:
+# English text: Specifies how many hours to adjust the time from server time to local time.
+#
+#
+# << MISSING >>
+# Timezone Offset:
+#
+# << MISSING >>
+# Add N hours to:
+#
+# << MISSING >>
+# Subtract N hours from:
+#
+# << MISSING >>
+# same as:
+#
+# << MISSING >>
+# server time:
+#
+# << MISSING >>
+# Default Category:
+#
+# << MISSING >>
+# When I am the boss:
+#
+# << MISSING >>
+# Email me event notification:
+#
+# << MISSING >>
+# I want to approve events:
+#
+# << MISSING >>
+# allow-remote-subscriptions-help:
+# English text: Specifies if remote users can subscribe to your calendar, allowing them to see your events in a iCal-enabled application (such as Apple's iCal or Mozilla Calendar).
+#
+#
+# << MISSING >>
+# remote-subscriptions-url-help:
+# English text: Displays the URL remote users should use to subscribe to your calendar.
+#
+#
+# << MISSING >>
+# URL:
+Sun: Sun
+Mon: Mán
+Tue: Þri
+Wed: Mið
+Thu: Fim
+Fri: Fös
+Sat: Lau
+Save Preferences: Vista stillingar
+
+
+###############################################
+# Page: help_bug.php
+#
+#
+# << MISSING >>
+# Report Bug:
+
+
+###############################################
+# Page: help_edit_entry.php
+#
+Adding/Editing Calendar Entries: Bæta við/Eyða atriðum í dagatali
+
+
+###############################################
+# Page: help_index.php
+#
+Help Index: Efnisyfirlit
+#
+# << MISSING >>
+# Layers:
+#
+# << MISSING >>
+# Import:
+
+
+###############################################
+# Page: help_layers.php
+#
+#
+# << MISSING >>
+# Layers are useful for displaying other users' events in your own calendar.  You can specifiy the user and the color the events will be displayed in.:
+#
+# << MISSING >>
+# Add/Edit/Delete:
+#
+# << MISSING >>
+# Clicking the Edit Layers link in the admin section at the bottom of the page will allow you to add/edit/delete layers.:
+#
+# << MISSING >>
+# Specifies the user that you would like to see displayed in your calendar.:
+#
+# << MISSING >>
+# The text color of the new layer that will be displayed in your calendar.:
+#
+# << MISSING >>
+# If checked, events that are duplicates of your events will be shown.:
+#
+# << MISSING >>
+# Disabling:
+#
+# << MISSING >>
+# Press the Disable Layers link in the admin section at the bottom of the page to turn off layers.:
+#
+# << MISSING >>
+# Enabling:
+#
+# << MISSING >>
+# Press the Enable Layers link in the admin section at the bottom of the page to turn on layers.:
+
+
+###############################################
+# Page: help_admin.php
+#
+
+
+###############################################
+# Page: week.php
+#
+#
+# << MISSING >>
+# cont.:
+
+
+###############################################
+# Page: layers.php
+#
+#
+# << MISSING >>
+# to modify the layers settings for the:
+#
+# << MISSING >>
+# Layers are currently:
+#
+# << MISSING >>
+# Enabled:
+#
+# << MISSING >>
+# Disabled:
+#
+# << MISSING >>
+# Disable Layers:
+#
+# << MISSING >>
+# Enable Layers:
+#
+# << MISSING >>
+# Layer:
+#
+# << MISSING >>
+# Edit layer:
+#
+# << MISSING >>
+# Add layer:
+
+
+###############################################
+# Page: layers_toggle.php
+#
+
+
+###############################################
+# Page: list_unapproved.php
+#
+View this entry: Skoða
+Approve this entry?: Samþykkja?
+Approve/Confirm: Samþykkja/Staðfesta
+Reject this entry?: Hafna þessu atriði?
+Reject: Hafna
+#
+# << MISSING >>
+# No unapproved events for:
+Unapproved Events: Ósamþykkt atriði
+#
+# << MISSING >>
+# Public Access:
+
+
+###############################################
+# Page: view_entry.php
+#
+#
+# << MISSING >>
+# every:
+#
+# << MISSING >>
+# 2nd:
+#
+# << MISSING >>
+# 3rd:
+#
+# << MISSING >>
+# 4th:
+#
+# << MISSING >>
+# 5th:
+#
+# << MISSING >>
+# 1st:
+#
+# << MISSING >>
+# last:
+Description: Lýsing
+#
+# << MISSING >>
+# Status:
+#
+# << MISSING >>
+# Waiting for approval:
+#
+# << MISSING >>
+# Deleted:
+Rejected: Hafnað
+#
+# << MISSING >>
+# External User:
+Approve/Confirm entry: Samþykkja/Staðfesta atriði
+Reject entry: Hafna atriði
+#
+# << MISSING >>
+# Set category:
+#
+# << MISSING >>
+# Edit repeating entry for all dates:
+#
+# << MISSING >>
+# Edit entry for this date:
+This will delete this entry for all users.: Atriði verður eytt hjá öllum notendum.
+#
+# << MISSING >>
+# Delete repeating event for all dates:
+#
+# << MISSING >>
+# Delete entry only for this date:
+Edit entry: Breyta atriði
+#
+# << MISSING >>
+# This will delete the entry from your calendar.:
+#
+# << MISSING >>
+# Do you want to add this entry to your calendar?:
+#
+# << MISSING >>
+# This will add the entry to your calendar.:
+#
+# << MISSING >>
+# Add to My Calendar:
+#
+# << MISSING >>
+# Email all participants:
+#
+# << MISSING >>
+# Show activity log:
+#
+# << MISSING >>
+# Hide activity log:
+#
+# << MISSING >>
+# Export this entry to:
+
+
+###############################################
+# Page: view_v.php
+#
+
+
+###############################################
+# Page: month.php
+#
+
+
+###############################################
+# Page: pref_handler.php
+#
+
+
+###############################################
+# Page: reject_entry.php
+#
+#
+# << MISSING >>
+# An appointment has been rejected by:
+#
+# << MISSING >>
+# The description is:
+Title: VefDagatal
+
+
+###############################################
+# Page: search.php
+#
+Search: Leit
+#
+# << MISSING >>
+# Advanced Search:
+Keywords: Leitarorð
+
+
+###############################################
+# Page: search_handler.php
+#
+You must enter one or more search keywords: Þú verður að slá inn amk eitt leitarorð
+Search Results: Niðurstaða leitar
+match found: fannst
+matches found: fundust
+No matches found: Ekkert fannst
+
+
+###############################################
+# Page: select_user.php
+#
+View Another User's Calendar: Skoða dagatal annarra
+Go: Velja
+
+
+###############################################
+# Page: publish.php
+#
+
+
+###############################################
+# Page: users.php
+#
+denotes administrative user: táknar stjórnanda
+Add New User: Bæta nýjum notanda við
+
+
+###############################################
+# Page: usersel.php
+#
+#
+# << MISSING >>
+# All:
+#
+# << MISSING >>
+# Reset:
+#
+# << MISSING >>
+# Remove:
+#
+# << MISSING >>
+# Ok:
+#
+# << MISSING >>
+# Cancel:
+
+
+###############################################
+# Page: import.php
+#
+#
+# << MISSING >>
+# This form will allow you to import entries from the Palm Desktop Datebook.:
+#
+# << MISSING >>
+# Exclude private records:
+#
+# << MISSING >>
+# Datebook File:
+#
+# << MISSING >>
+# This form will import vCalendar (.vcs) 1.0 events:
+#
+# << MISSING >>
+# vCal File:
+#
+# << MISSING >>
+# This form will import iCalendar (.ics) events:
+#
+# << MISSING >>
+# iCal File:
+#
+# << MISSING >>
+# Overwrite Prior Import:
+
+
+###############################################
+# Page: year.php
+#
+
+
+###############################################
+# Page: view_d.php
+#
+
+
+###############################################
+# Page: view_m.php
+#
+
+
+###############################################
+# Page: view_w.php
+#
+
+
+###############################################
+# Page: views.php
+#
+#
+# << MISSING >>
+# Views:
+#
+# << MISSING >>
+# Add New View:
+
+
+###############################################
+# Page: views_edit.php
+#
+#
+# << MISSING >>
+# Unnamed View:
+#
+# << MISSING >>
+# Add View:
+#
+# << MISSING >>
+# Edit View:
+#
+# << MISSING >>
+# View Name:
+#
+# << MISSING >>
+# View Type:
+#
+# << MISSING >>
+# Week (Users horizontal):
+#
+# << MISSING >>
+# Week (Users vertical):
+#
+# << MISSING >>
+# Week (Timebar):
+#
+# << MISSING >>
+# Month (side by side):
+#
+# << MISSING >>
+# Month (on same calendar):
+
+
+###############################################
+# Page: nonusers.php
+#
+#
+# << MISSING >>
+# NONUSER_PREFIX not set:
+# English text: NONUSER_PREFIX has not been set in config.php.
+#
+#
+# << MISSING >>
+# NonUser:
+# English text: NonUser Calendars
+#
+#
+# << MISSING >>
+# Calendar ID:
+#
+# << MISSING >>
+# Add New NonUser Calendar:
+
+
+###############################################
+# Page: nonusers_handler.php
+#
+
+
+###############################################
+# Page: view_l.php
+#
+
+
+###############################################
+# Page: help_pref.php
+#
+#
+# << MISSING >>
+# default-category-help:
+# English text: Specifies the category a new event should default to.
+#
+
+
+###############################################
+# Page: report.php
+#
+Private: Einka
+#
+# << MISSING >>
+# Approved:
+#
+# << MISSING >>
+# Unknown:
+#
+# << MISSING >>
+# to manage reports for the Public Access calendar:
+#
+# << MISSING >>
+# Add new report:
+#
+# << MISSING >>
+# Invalid report id:
+#
+# << MISSING >>
+# Manage Reports:
+
+
+###############################################
+# Page: login.php
+#
+You must enter a login and password: Þú verður að slá inn notandanafn og lykilorð
+Save login via cookies so I don't have to login next time: Vista upplýsingar með kökum
+Login: Skrá inn
+#
+# << MISSING >>
+# Access public calendar:
+cookies-note: <b>Athugið:</b> Kökur verða að vera virkar
+
+
+###############################################
+# Page: views_edit_handler.php
+#
+#
+# << MISSING >>
+# You must specify a view name:
+
+
+###############################################
+# Page: week_details.php
+#
+New Entry: Nýtt atriði
+
+
+###############################################
+# Page: import_handler.php
+#
+#
+# << MISSING >>
+# Import Results:
+#
+# << MISSING >>
+# Events successfully imported:
+#
+# << MISSING >>
+# Events from prior import marked as deleted:
+#
+# << MISSING >>
+# Conflicting events:
+#
+# << MISSING >>
+# Errors:
+Back to My Calendar: Aftur í mitt dagatal
+#
+# << MISSING >>
+# There was an error parsing the import file or no events were returned:
+#
+# << MISSING >>
+# The import file contained no data:
+The following conflicts with the suggested time: Eftirfarandi stangast á við tíma
+Unnamed Event: Ónafngreint atriði
+Scheduling Conflict: Scheduling Conflict
+conflicts with the following existing calendar entries: stangast á við eftirfarandi atriði
+#
+# << MISSING >>
+# Event Imported:
+
+
+###############################################
+# Page: edit_report.php
+#
+#
+# << MISSING >>
+# Tomorrow:
+#
+# << MISSING >>
+# Today:
+#
+# << MISSING >>
+# Yesterday:
+#
+# << MISSING >>
+# Day before yesterday:
+#
+# << MISSING >>
+# Next week:
+#
+# << MISSING >>
+# This week:
+#
+# << MISSING >>
+# Last week:
+#
+# << MISSING >>
+# Week before last:
+#
+# << MISSING >>
+# Next week and week after:
+#
+# << MISSING >>
+# This week and next week:
+#
+# << MISSING >>
+# Last week and this week:
+#
+# << MISSING >>
+# Last two weeks:
+#
+# << MISSING >>
+# Next month:
+#
+# << MISSING >>
+# This month:
+#
+# << MISSING >>
+# Last month:
+#
+# << MISSING >>
+# Month before last:
+#
+# << MISSING >>
+# Next year:
+#
+# << MISSING >>
+# This year:
+#
+# << MISSING >>
+# Last year:
+#
+# << MISSING >>
+# Year before last:
+#
+# << MISSING >>
+# Unnamed Report:
+#
+# << MISSING >>
+# Add Report:
+#
+# << MISSING >>
+# Edit Report:
+#
+# << MISSING >>
+# Report name:
+Current User: Núverandi notandi
+#
+# << MISSING >>
+# Include link in trailer:
+#
+# << MISSING >>
+# Include standard header/trailer:
+#
+# << MISSING >>
+# Date range:
+#
+# << MISSING >>
+# Include previous/next links:
+#
+# << MISSING >>
+# Include empty dates:
+#
+# << MISSING >>
+# Template variables:
+#
+# << MISSING >>
+# Page template:
+#
+# << MISSING >>
+# Day template:
+#
+# << MISSING >>
+# Event template:
+#
+# << MISSING >>
+# Are you sure you want to delete this report?:
+
+
+###############################################
+# Page: assistant_edit.php
+#
+#
+# << MISSING >>
+# Assistants:
+#
+# << MISSING >>
+# Yours assistants:
+
+
+###############################################
+# Page: view_t.php
+#
+
+
+###############################################
+# Page: assistant_edit_handler.php
+#
+
+
+###############################################
+# Page: adminhome.php
+#
+Account: Reikningur
+#
+# << MISSING >>
+# NonUser Calendars:
+#
+# << MISSING >>
+# Delete Events:
+#
+# << MISSING >>
+# Public Preferences:
+#
+# << MISSING >>
+# Unapproved Public Events:
+#
+# << MISSING >>
+# Administrative Tools:
+
+
+###############################################
+# Page: purge.php
+#
+#
+# << MISSING >>
+# Purging events for:
+#
+# << MISSING >>
+# Finished:
+#
+# << MISSING >>
+# Delete all events before:
+#
+# << MISSING >>
+# Check box to delete <b>ALL</b> events for a user:
+#
+# << MISSING >>
+# Are you sure you want to delete events for:
+
+
+###############################################
+# Page: help_import.php
+#
+#
+# << MISSING >>
+# Palm Desktop:
+#
+# << MISSING >>
+# It should be located in your Palm directory in <tt>datebook/datebook.dat</tt> in a subdirectory named by your username.:
+#
+# << MISSING >>
+# The following entries will not be imported:
+#
+# << MISSING >>
+# Entries older than the current date:
+#
+# << MISSING >>
+# Entries created in the Palm Desktop that have not been HotSync'd:
+#
+# << MISSING >>
+# Anything imported from Palm will be overwritten during the next import (unless the event date has passed).:
+#
+# << MISSING >>
+# Therefore, updates should be made in the Palm Desktop.:
+#
+# << MISSING >>
+# vCal:
+#
+# << MISSING >>
+# The following formats have been tested:
+#
+# << MISSING >>
+# Palm Desktop 4:
+#
+# << MISSING >>
+# Lotus Organizer 6:
+#
+# << MISSING >>
+# Microsoft Outlook 2002:
+#
+# << MISSING >>
+# iCalendar:
+#
+# << MISSING >>
+# Enabling <b>Overwrite Prior Import</b> will cause events imported previously that used the same UID as an event from the new import file to be marked as deleted.  This should allow an updated iCalendar file to be imported without creating duplicates.:
+
+
+###############################################
+# Page: edit_report_handler.php
+#
+#
+# << MISSING >>
+# Variable N not found:
+
+
+###############################################
+# Page: edit_entry_handler.php
+#
+A new appointment has been made for you by: Nýr fundur hefur verið búinn til af
+#
+# << MISSING >>
+# An appointment has been updated by:
+The subject is: Tilefnið er
+Please look on: Vinsamlegast skoðið
+to accept or reject this appointment: til að staðfesta eða hafna þessum fundi
+to view this appointment: til að skoða fund
+Your suggested time of: Uppgefinn tími
+
+
+###############################################
+# Page: set_entry_cat.php
+#
+#
+# << MISSING >>
+# You have not added any categories:
+#
+# << MISSING >>
+# Set Category:
+
+
+###############################################
+# Page: edit_template.php
+#
+#
+# << MISSING >>
+# Edit Custom Script/Stylesheet:
+#
+# << MISSING >>
+# Edit Custom Header:
+#
+# << MISSING >>
+# Edit Custom Trailer:
+
+
+###############################################
+# Page: includes/trailer.php
+#
+Go to: Fara í
+My Calendar: Dagatalið mitt
+Logout: Skrá út
+Another User's Calendar: Dagatal annarra
+Add New Entry: Bæta við
+#
+# << MISSING >>
+# Manage Views:
+#
+# << MISSING >>
+# Manage calendar of:
+
+
+###############################################
+# Page: includes/connect.php
+#
+
+
+###############################################
+# Page: includes/user.php
+#
+#
+# << MISSING >>
+# Invalid login:
+#
+# << MISSING >>
+# Invalid user login:
+
+
+###############################################
+# Page: includes/site_extras.php
+#
+#
+# << MISSING >>
+# Send Reminder:
+
+
+###############################################
+# Page: includes/translate.php
+#
+
+
+###############################################
+# Page: includes/user-ldap.php
+#
+
+
+###############################################
+# Page: includes/user-nis.php
+#
+
+
+###############################################
+# Page: includes/help_trailer.php
+#
+
+
+###############################################
+# Page: includes/dbtable.php
+#
+
+
+###############################################
+# Page: includes/init.php
+#
+#
+# << MISSING >>
+# charset:
+
+
+###############################################
+# Page: includes/functions.php
+#
+This event is confidential: Þetta er trúnaðarmál
+#
+# << MISSING >>
+# exceeds limit of XXX events per day:
+#
+# << MISSING >>
+# You have XXX unapproved events:
+January: Janúar
+February: Febrúar
+March: Mars
+April: Apríl
+May_: Maí
+June: Júní
+July: Júlí
+August: Ágúst
+September: September
+October: Október
+November: Nóvember
+Jan: Jan
+Feb: Feb
+Mar: Mar
+Apr: Apr
+May: Maí
+Jun: Jún
+Jul: Júl
+Aug: Ágú
+Sep: Sep
+Oct: Okt
+Nov: Nóv
+Dec: Des
+
+
+###############################################
+# Page: includes/js/admin.php
+#
+#
+# << MISSING >>
+# Server URL is required:
+#
+# << MISSING >>
+# Server URL must end with '/':
+Invalid color for document background: Ólöglegur litur í bakgrunni
+Invalid color for document title: Ólöglegur litur í titli
+Invalid color for table cell background: Ólöglegur litur í bakgrunni taflna
+#
+# << MISSING >>
+# Invalid color for table grid:
+#
+# << MISSING >>
+# Invalid color for table header background:
+#
+# << MISSING >>
+# Invalid color for table text background:
+#
+# << MISSING >>
+# Invalid color for event popup background:
+#
+# << MISSING >>
+# Invalid color for event popup text:
+Invalid color for table cell background for today: Ólöglegur litur í bakgrunni taflna núverandi dags
+Color format should be '#RRGGBB': Form lita á að vera '#RRGGBB'
+
+
+###############################################
+# Page: includes/js/edit_entry.php
+#
+You have not entered a Brief Description: Stutta lýsingu vantar
+You have not entered a valid time of day: Rangur tími sleginn inn
+#
+# << MISSING >>
+# The time you have entered begins before your preferred work hours.  Is this correct?:
+
+
+###############################################
+# Page: includes/js/edit_layer.php
+#
+#
+# << MISSING >>
+# Invalid color:
+
+
+###############################################
+# Page: includes/js/pref.php
+#
+
+
+###############################################
+# Page: tools/send_reminders.php
+#
+#
+# << MISSING >>
+# This is a reminder for the event detailed below.:
+#
+# << MISSING >>
+# Reminder:

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Italian.txt
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Italian.txt	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Italian.txt	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,665 @@
+# Use this as a starting point to translate this application into
+# another language.  The format is "English text: translated text"
+# There cannot be a ":" in the English text.
+# Translated by:
+#	Simone Cortesi <php at cortesi.com>
+#	Alessandro <a.orlandi at iol.it>
+# Last update: 22 July 2000
+# Translation last updated on 03-10-2004
+
+# No charset specified (not needed for iso-8859-1)
+# "charset" is used in a meta tag, do not translate "charset" here.
+# charset:
+
+System Settings: Settaggi del sistema
+You are not authorized: Non sei autorizzato
+Note: Nota
+Your user preferences: Le preferenze del tuo utente
+may be affecting the appearance of this page.: può coinvolgere l'aspetto di questa pagina
+Click here: Clicca qui
+to not use your user preferences when viewing this page: per non utilizzare le preferenze del tuo utente quando visualizzi questa pagina
+are being ignored while viewing this page.: sono ignorate quando si guarda questa pagina
+to load your user preferences when viewing this page: per caricare le preferenze del tuo utente quando si guarda questa pagina
+Save: Salva
+Help: Guida
+Settings: Settaggi
+app-name-help: Specifica il nome dell'applicazione che apparirà nella barra del titolo del browser per tutte le pagine e sulla pagina di login. Il valore che si specifica qui sarà cercato nei file delle traduzioni, permettendo di fornire titoli diversi per linguaggi diversi
+Application Name: Nome dell'applicazione
+server-url-help: Specifica l'URL di base per l'applicazione. Questo sarà incluso quando si inviano memorandum e notifiche via e-mail 
+Server URL: URL del Server
+language-help: Specifica quale lingua utilizzare
+Language: Lingua
+Your browser default language is: La lingua di default del tuo browser è:
+fonts-help: Specifica una lista di font si sistema da utilizzare (ad esempio "Arial, Helvetica")
+Fonts: Fonts
+custom-script-help: Permette di inserire il proprio codice Javascript o foglio di stile che sarà inserito nella sezione "head" del codice HTML di ogni pagina 
+Custom script/stylesheet: Script/foglio di stile personale
+Yes: Sì
+No: No
+Edit: Modifica
+custom-header-help: Consente di includere un pezzettino di codice HTML all'inizio di ogni pagina
+Custom header: Intestazione personale
+custom-trailer-help: Consente di includere un pezzettino di codice HTML alla fine di ogni pagina
+Custom trailer: Fine pagina personale
+preferred-view-help: Specifica la vista di default (Giorno, Settimana, Mese, o Anno)
+Preferred view: Vista preferita
+Day: Giorno
+Week: Settimana
+Month: Mese
+Year: Anno
+display-weekends-help: Include i weekend quando si guarda una settimana
+Display weekends in week view: Mostra i week-end nella vista della settimana
+yearly-shows-events-help: Nella visualizzazione annuale, mostra in grassetto i giorni con degli eventi
+Display days with events in bold in year view: Nella visualizzazione annuale mostra in grassetto i giorni con degli eventi
+display-desc-print-day-help: Include la descrizione dell'evento nel formato stampabile della vista giornaliera
+Display description in printer day view: Mostra la descrizione nella visualizzazione giornaliera stampabile
+date-format-help: Specifica il formato preferito per la data
+Date format: Formato della data
+December: Dicembre
+time-format-help: Specifica quale formato orario usare: <br /><i>12 ore:</i> Mostra le ore come 3am, 8:30pm, ecc.  <br /><i>24 ore:</i> Mostra le ore come 3:00, 20:30, ecc.
+Time format: Formato ora
+12 hour: 12 ore
+24 hour: 24 ore
+time-interval-help: Specifica quanto saranno lunghi gli intervalli di tempo nelle visualizzazioni settimanali e giornaliere
+Time interval: Intervallo di tempo
+hour: ora
+minutes: minuti
+minute: minuto
+auto-refresh-help: Quando è abilitato, la vista giornaliera, quella settimanale, quella mensile e la lista delle pagine non approvate si aggiorneranno automaticamente
+Auto-refresh calendars: Calendari autoaggiornanti
+auto-refresh-time-help: Se Calendari autoaggiornanti è abilitato, questo specifica il tempo che intercorre fra due aggiornamenti
+Auto-refresh time: Frequenza di aggiornamento
+require-approvals-help: Se abilitato, un utente deve approvare un evento prima che sia visualizzato sul suo calendario (a meno che "Mostrare eventi non approvati" sia abilitato). Nota che impostare questo a "No" non disabiliterà la necessità di approvare gli eventi nel calendario ad accesso pubblico (se il calendario ad accesso pubblico è abilitato) 
+Require event approvals: Richiedi che gli eventi siano approvati
+display-unapproved-help: Specifica se mostrare o meno nel proprio calendario gli eventi non approvati.<br /> Se settato su "Sì", gli eventi non approvati saranno mostrati nel calendario (con un testo di colore differente).<br /> Se settato su "No", gli eventi saranno mostrati nel calendario solo se approvati.
+Display unapproved: Mostrare eventi non approvati
+display-week-number-help: Specifica se mostrare o meno il numero della settimana (1-52) quando il calendario viene visualizzato per mese o per settimana.
+Display week number: Mostrare numero settimana
+display-week-starts-on: Specifica se la settimana inizia Domenica o Lunedì.. Se si specifica Lunedì, i numeri delle settimane saranno numeri di settimane secondo lo standard ISO.
+Portuguese: Portoghese
+Portuguese/Brazil: Portoghese/Brasile
+Czech: Ceco
+Danish: Danese
+Week starts on: La settimana inizia
+Sunday: Domenica
+Monday: Lunedì
+Other: Altro
+work-hours-help: Specifica l'arco temporale da mostrare nella vista giornaliera.
+Work hours: Ore lavorative
+From: Da
+to: a
+disable-priority-field-help: Selezionare "Sì" rimuoverà il campo "Priorità" dalle pagine di informazione sugli eventi, fornendo un'interfaccia più semplice per i novizi
+Disable Priority field: Disattiva il campo "priorità"
+disable-access-field-help: Selezionare "Sì" rimuoverà il campo "Accesso" dalle pagine di informazione sugli eventi, fornendo un'interfaccia più semplice per i novizi
+Disable Access field: Disattiva il campo "accesso"
+disable-participants-field-help: Selezionare "Sì" rimuoverà il campo "Partecipanti" dalle pagine di informazione sugli eventi, impedendo agli utenti di aggiungere altri utenti ai loro eventi. Se abiliti questa opzione, potresti anche voler disabilitare il campo "Permetti la visualizzazione dei calendari degli altri utenti"
+Disable Participants field: Disattiva il campo "partecipanti"
+disable-repeating-field-help: Selezionare "Sì" rimuoverà il campo "Ripetizioni" quando si aggiungono eventi, fornendo un'interfaccia più semplice per i novizi
+Disable Repeating field: Disattiva il campo "ripetizioni"
+popup-includes-siteextras-help: Se abilitato nei popup degli eventi sar&agrave abilitato nel file site_extras.php il settaggio del campo permetti eventi personalizzati
+Display Site Extras in popup: Mostra gli Extra per il Sito in un popup
+allow-html-description-help: Se abilitato, gli utenti possono inserire HTML nel campo di descrizione di un evento. Se non abilitato, i tag HTML saranno saltati, in modo da farli apparire com testo semplice. Attenzione: Abilitare questa caratteristica permetterà agli utenti di fare riferimenti ad immagini di altri siti
+Allow HTML in Description: Permetti HTML nella Descrizione
+Allow viewing other user's calendars: Permetti la visione dei calendari degli altri utenti
+allow-public-access-help: Se abilitato, il calendario può essere utilizzato come un calendario pubblico in sola lettura che non richiede agli utenti di effettuare il login
+Allow public access: Permetti l'accesso pubblico
+public-access-view-others-help: Quando si accede al sistema coun un accesso pubblico, specifica se l'utente può vedere il calendario di un altro utente
+Public access can view other users: Permetti all'accesso pubblico di vedere gli altri utenti
+public-access-can-add-help: Quando abilitato, gli utenti che accedono al sistema con un accesso pubblico saranno in grado di aggiungere nuovo eventi, ma questi non saranni visibili nel calendario finché un amministratore approverà il nuovo evento
+Public access can add events: Permetti all'accesso pubblico di aggiungere eventi
+public-access-add-requires-approval-help: Specifica se gli eventi aggiunti per mezzo dell'accesso pubblico necessitino dell'approvazione prima di essere visibili
+Public access new events require approval: L'inserimento di un evento da pubblico accesso richiede l'approvazione
+allow-view-other-help: Specifica se un utente può visualizzare il calendario di un altro utente.
+public-access-sees-participants-help: Se abilitato, gli utenti che stanno accedendo al calendario dall'account pubblico saranno in grado di vedere i partecipanti all'evento se guarderanno i dettagli dell'evento
+Public access can view participants: L'accesso pubblico può vedere i partecipanti
+allow-view-add-help: Un'icona raffigurante un '+'sarà inclusa nelle viste, permettendo agli utenti di aggiungere velocemente eventi ai calendari degli altri utenti
+Include add event link in views: Includi il link che permette di aggiungere un evento nelle viste
+allow-external-users-help: Specifica se un non utente può essere aggiunto ad un evento. Questo permette ai non utenti di essere listati come  partecipanti all'evento.
+Allow external users: Permetti utenti esterni
+external-can-receive-notification-help: Quando gli utenti esterni sono abilitati ed è abilitato l'uso di e-mail, gli utenti esterni possono ricevere avvisi via e-mail quando un evento è stato aggiunto, aggiornato o cancellato (se l'indirizzo e-mail dell'utente è stato fornito)
+External users can receive email notifications: Gli utenti esterni possono ricevere e-mail di notifica
+external-can-receive-reminder-help: Quando gli utenti esterni sono abilitati ed è abilitato l'uso di e-mail, gli utenti esterni possono ricevere avvisi via e-mail (se l'indirizzo e-mail dell'utente è stato fornito)
+External users can receive email reminders: Utenti esterni possono ricevere avvisi via e-mail
+remember-last-login-help: Quando abilitato, i campi di accesso dell'utente saranno riempiti automaticamente nella pagina di accesso (ma non la password) e saranno caricate le preferenze dell'utente (inclusi i colori preferiti e la scelta della lingua)
+Remember last login: Ricorda l'ultimo accesso
+conflict-check-help: Controlla se esistono conflitti fra gli eventi (due eventi programmati per lo stesso istante o per la stessa persona). Se lo setti a "Sì", sarai ancora in grado di programmare due eventi per lo stesso istante dopo aver dato conferma ad un avviso. Se lo setti a "No", il controllo dei conflitti fra gli eventi sarà fatto. È probabile che tu voglia settare questo a "Sì", così il controllo dei conflitti viene fatto
+Check for event conflicts: Controlla se esistono conflitti fra gli eventi
+conflict-months-help: Se il controllo dei conflitti è ablitato ("Controlla se esistono conflitti fra gli eventi" è settato a "No"), questo specifica quanti mesi futuri  includere nel controllo. Se verifichi che l'aggiunta di un evento dura molto tempo, riduci questo numero
+Conflict checking months: Controllo dei conflitti mensile
+conflict-check-override-help: Permette agli utenti di sovrascrivere conflitti degli eventi e di programmare due o più eventi per lo stesso istante
+Allow users to override conflicts: Consenti agli utenti di sovrascrivere i conflitti
+limit-appts-help: Permette all'amministratore di sistema di settare un limite globale sul numero di appuntamenti che un singolo utente può avere in un singolo giorno
+Limit number of timed events per day: Limita il numero degli eventi del giorno
+limit-appts-number-help: Specifica il massimo numero di eventi che un utente può avere in un giorno
+Maximum timed events per day: Massimo numero di eventi al giorno
+Plugins: Plugin
+plugins-enabled-help: Abilita applicazioni Plugin
+Enable Plugins: Abilita Plugin
+plugins-sort-key-help: Specifica una chiave di ordinamento per i plugin. Questo permette di ordinare in un determinato modo i plugin
+Plugin: Plugin
+Groups: Gruppi
+groups-enabled-help: Abilita il supporto dei gruppi, permettendo agli utenti di scegliere gli utenti per gruppi
+Groups enabled: Abilita Gruppi
+user-sees-his-group-help: Se abilitato, gli utenti non vedranno gli utenti di calendari che non siano in almeno uno dei loro gruppi
+User sees only his groups: L'utente può vedere solo il suo gruppo
+Categories: Categorie
+categories-enabled-help: Abilita il supporto per le categorie degli eventi
+Categories enabled: Abilita categorie
+Nonuser: Calendari dei non utenti
+nonuser-enabled-help: Se abilitato, gli amministratori potranno aggiungere calendari per i non utenti
+Nonuser enabled: Calendari abilitati per i non utenti 
+nonuser-list-help: Dove mostrare i calendari dei non utenti nella lista dei partecipanti
+Nonuser list: Mostra nella lista dei partecipanti a
+Top: inizio
+Bottom: fine
+Reports: Rapporti
+reports-enabled-help: Se abilitato, gli utenti vedranno una sezione "Rapporti" alla fine di ogni pagina e saranno in grado di creare rapporti personalizzati. Inoltre, gli amministratori potranno creare rapporti globali che appariranno alla fine delle pagine di tutti gli utenti
+Reports enabled: Rapporti abilitati
+Subscribe/Publish: Sottoscrizione/Pubblicazione
+subscriptions-enabled-help: Specifica se utenti remoti possono sottoscrivere un calendario di un utente WebCalendar, permettendo loro di vedere gli eventi dell'utente di WebCalendar nella loro applicazione abilitata all'uso di iCal (ad esempio iCal della Apple o il Mozilla Calendar).
+incorrect password: password sbagliata
+English: Inglese
+Estonian: Estone
+Events: Eventi
+Finnish: Finlandese
+Galician: Galiziano
+Holo (Taiwanese): Holo (Taiwanese)
+Hungarian: Ungherese
+Icelandic: Islandese
+Dutch: Olandese
+Allow remote subscriptions: Permetti sottoscrizioni remote
+Email: E-Mail
+email-enabled-help: Attiva o disattiva l'invio di e-mail di notifica ed avviso. Settalo a "No", se il tuo server non è propriamente configurato per l'invio di e-mail
+Email enabled: Abilita e-mail
+email-default-sender: Specifica l'indirizzo e-mail da cui figurano provenire le e-mail quando si inviano gli avvisi
+Default sender address: Indirizzo del mittente standard
+Default user settings: Settaggi dell'utente standard
+email-event-reminders-help: Specifica se inviare o  meno avvisi per gli eventi
+Event reminders: Segnala eventi in e-mail
+email-event-added: Segnala nuovo evento
+Events added to my calendar: Segnala nuovo evento aggiunto al mio calendario
+email-event-updated: Segnala aggiornamento di un evento
+Events updated on my calendar: Segnala aggiornamento di un evento del mio calendario
+email-event-deleted: Segnala un evento cancellato
+Events removed from my calendar: Segnala un evento cancellato dal mio calendario
+email-event-rejected: Segnala un evento rifiutato
+Event rejected by participant: Segnala un evento rifiutato da un partecipante
+colors-help: Tutti i colori devono essere specificati nel formato esadecimale "#RRGGBB" dove "RR" è il valore esadecimale della componente rossa, "GG" è il valore esadecimale della componente verde, e "BB" è il valore esadecimale della componente blu.
+Colors: Colori
+Allow user to customize colors: Consenti all'utente di personalizzare i colori
+Document background: Sfondo documento
+Select: Seleziona
+Document title: Titolo documento
+Document text: Testo
+Table grid color: Griglia della tabella
+Table header background: Sfondo dell'intestazione della tabella
+Table header text: Testo dell'intestazione della tabella
+Table cell background: Sfondo cella tabella
+Table cell background for current day: Sfondo cella tabella per oggi
+Table cell background for weekends: Sfondo cella tabella per il week-end
+Event popup background: Sfondo della popup degli eventi
+Event popup text: Testo della popup degli eventi
+Specify timed event length by: Specifica la lunghezza di un evento in
+End Time: Tempo di fine
+Activity Log: Log delle attività
+User: Utente
+Calendar: Calendario
+Date: Data
+Time: Ora
+Event: Evento
+Action: Azione
+Event created: Evento creato
+Event approved: Evento approvato
+Event rejected: Evento rifiutato
+Event updated: Evento aggiornato
+Event deleted: Evento cancellato
+Notification sent: Notifica inviata
+Reminder sent: Avviso mandato
+Database error: Errore nel database
+Previous: Precedente
+Next: Successivo
+Invalid entry id: Identificativo nota non valido
+This is a private event and may not be added to your calendar.: Questo è un evento privato e non può essere aggiunto al tuo calendario
+Error adding event: Errore nell'aggiunta dell'evento
+Error: Errore
+The following error occurred: È avvenuto il seguente errore
+Error approving event: Errore durante l'approvazione di un evento
+Categories: Categoris
+Add: Aggiungi
+Category Name: Nome della categoria
+Global: Globale
+Delete: Cancella
+Are you sure you want to delete this entry?: Sei sicuro di voler eliminare questa nota?
+Add New Category: Aggiungi una nuova categoria
+Hello: Ciao
+An appointment has been canceled for you by: Un appuntamento è stato cancellato per te da
+The subject was: L'oggetto era
+Notification: Notifica
+Edit Entry: Modifica Nota
+Add Entry: Aggiungi Nota
+brief-description-help: Questo dovrebbe dare una breve descrizione (circa 20 caratteri) dell'evento. Questo rappresenterà l'evento quando si visita il calendario.
+Brief Description: Descrizione Breve
+full-description-help: Questo dovrebbe dare dettagli completi dell'evento. Questa informazione sarà mostrata quando l'utente visualizza l'evento.
+Full Description: Descrizione Completa
+date-help: Specifica la data di un evento.
+time-help: Specifica l'ora di un evento.<br /><i>Questo campo può essere lasciato in bianco.</i>
+am: am
+pm: pm
+Untimed event: Evento senza tempo
+Timed event: Evento temporizzato
+All day event: Evento giornaliero
+duration-help: Specifica la durata (in minuti) dell'evento. <br /><i>Questo campo può essere lasciato in bianco.</i>
+Duration: Durata
+hours: ore
+priority-help: Specifica la priorità dell'evento. Eventi con un alta priorità saranno mostrati in grassetto.
+Priority: Priorità
+Low: Bassa
+Medium: Media
+High: Alta
+access-help: Specifica il livello di accesso dell'evento.<br /> <i>Pubblico</i>: Chiunque può vedere tutti i dettagli dell'evento.  <br /><i>Confidenziale</i>: Gli altri possono vedere che è presente una nota per quella data e ora, ma non i dettagli relativi.
+Access: Accesso
+Public: Pubblico
+Confidential: Confidenziale
+category-help: Specifica la categoria dell'evento
+Category: Categoria
+None: Nessuna
+days: giorni
+before event: prima dell'evento
+participants-help: Elenca i partecipanti di questa nota.
+Participants: Partecipanti
+external-participants-help: Specifica una lista di partecipanti all'evento che sono dei non utenti del calendario. Gli utenti dovrebbero essere listati uno per riga e possono includere un indirizzo e-mail. Se un indirizzo e-mail viene specificato, è possibile che l'utente riceva notifiche e avvisi
+Records deleted from: Record cancellati da
+External Participants: Partecipanti Esterni
+repeat-type-help: Seleziona quanto spesso l'evento si deve ripetere.<i>Mensile (per giorno)</i> permette ad un evento di ripetersi il 1&grad; Lunedì del mese, 3&grad; Giovedì del mese, ecc.  <i>Mensile (per data)</i> permette ad un evento di ripetersi nello stesso giorno del mese.
+Repeat Type: Tipo di ripetizione
+Daily: Giornaliera
+Weekly: Settimanale
+Monthly: Mensile
+by day: per giorno
+by day (from end): per giorno (dalla fine)
+by date: per data
+Yearly: Annuale
+Repeat: Ripetizione
+repeat-end-date-help: Specifica fino a quale data l'evento dovrà ripetersi.
+Repeat End Date: Data ultima ripetizione
+Use end date: Data termine
+repeat-day-help: Specifica in quali giorni della settimana l'evento può ripetersi. Questo può essere usato solo quando <i>Tipo di ripetizione</i> è impostato su <i>Settimanale</i>.
+Repeat Day: Giorno Ripetizione
+Tuesday: Martedì
+Wednesday: Mercoledì
+Thursday: Giovedì
+Friday: Venerdì
+Saturday: Sabato
+repeat-frequency-help: Specifica quanto spesso l'evento si deve ripetere. Il valore di default 1 indica che deve avvenire ogni volta. Specificando 2 l'evento avverrà una volta sì e una no (se <i>Tipo di ripetizione</i> è impostato su <i>Settimanale</i>), un mese sì e uno no (se <i>Tipo di ripetizione</i> è impostato su <i>Mensile</i>), ecc.
+Frequency: Frequenza
+Delete entry: Cancella nota
+You are not authorized to edit this entry: Non sei autorizzato a modificare questa nota
+Edit Layer: Modifica il livello
+Add Layer: Aggiungi un livello
+Source: Sorgente
+Color: Colore
+Duplicates: Duplicato
+Show layer events that are the same as your own: Mostra gli eventi del livello che sono simili ai tuoi
+Are you sure you want to delete this layer?: Sei sicuro di voler cancellare questo livello?
+Delete layer: Cancella il livello
+You cannot create a layer for yourself: Non puoi creare un livello per te stesso
+You can only create one layer for each user: Tu puoi creare un livello solo per ciascun utente
+Edit User: Modifica Utente
+Add User: Aggiungi Utente
+Username: Nome Utente
+First Name: Nome
+Last Name: Cognome
+E-mail address: Indirizzo email
+Password: Password
+again: di nuovo
+Admin: Amministratore
+Disabled for demo: Disabilita per la demo
+Change Password: Cambiare Password
+New Password: Nuova Password
+Set Password: Assegnare Password
+Deleting users not supported: La cancellazione degli utenti non è più supportata
+The passwords were not identical: Le password non sono identiche
+You have not entered a password: Non si è inserita nessuna password
+Export: Esporta
+Export format: Formato esportazione
+Palm Pilot: Palm Pilot
+Export all dates: Esporta tutte le date
+Start date: Data inizio
+End date: Data fine
+Modified since: Modificato dal
+export format not defined or incorrect: formato di esportazione non definito o non corretto
+Unnamed Group: Gruppo senza nome
+Add Group: Aggiungi un gruppo
+Edit Group: Modifica il gruppo
+Group name: Nome del gruppo
+Updated: Aggiornato
+Created by: Creato da
+Users: Utenti
+You must specify a group name: Devi specificare il nome del gruppo
+Add New Group: Aggiungi un nuovo gruppo
+Preferences: Preferenze
+to modify the preferences for the Public Access calendar: per modificare le preferenze per il calendario ad accesso pubblico
+tz-help: Specifica di quante ore aggiustare il tempo del server per ottenere il tempo locale
+Timezone Offset: Scostamento della Timezone
+Add N hours to: Aggiungi N ore all'
+Subtract N hours from: Sottrai N ore all'
+same as: come
+server time: ora del server
+Default Category: Categoria di default
+When I am the boss: Quando il capo sono io
+Email me event notification: Mandami una notifica dell'evento via e-mail
+I want to approve events: Voglio approvare gli eventi
+allow-remote-subscriptions-help: Specifica se utenti remoti possono sottoscrivere il tuo calendario, permettendo loro di vedere i tuoi eventi nella loro applicazione abilitata all'uso di iCal (ad esempio iCal della Apple o il Mozilla Calendar).
+remote-subscriptions-url-help: Mostra l'URL che gli utenti remoti dovrebbero utilizzare per sottoscrivere il tuo calendario
+URL: URL
+Sun: Dom
+Mon: Lun
+Tue: Mar
+Wed: Mer
+Thu: Gio
+Fri: Ven
+Sat: Sab
+Save Preferences: Salva Preferenze
+Report Bug: Segnala un Bug
+Adding/Editing Calendar Entries: Aggiungere/Modificare note nel Calendario
+Help Index: Indice della Guida
+Layers: Livelli
+Import: Importa
+Layers are useful for displaying other users' events in your own calendar.  You can specifiy the user and the color the events will be displayed in.: I livelli sono utili per visualizzare gli eventi di altri utenti nel tuo calendario. Puoi specificare gli utenti e il colore con cui gli eventi saranno visualizzati
+Add/Edit/Delete: Aggiungi/Modifica/Cancella
+Clicking the Edit Layers link in the admin section at the bottom of the page will allow you to add/edit/delete layers.: Cliccando sul link "Modifica Livelli" nell'area di amministrazione in fondo alla pagina, verrete abilitati ad aggiungere/modificare/cancellare i livelli.
+Specifies the user that you would like to see displayed in your calendar.: Specifica l'utente che tu vorresti vedere visualizzato nel tuo calendario.
+The text color of the new layer that will be displayed in your calendar.: Il colore del testo del nuovo livello che vuoi sia visualizzato nel tuo calendario.
+If checked, events that are duplicates of your events will be shown.: Se segnato, gli eventi che verrano duplicati dai tuoi eventi, verranno visualizzati.
+Disabling: Disabilita
+Press the Disable Layers link in the admin section at the bottom of the page to turn off layers.: Clicca "Disabilita Livelli" nell'area di amministrazione in fondo alla pagina per disabilitare i livelli.
+Enabling: Abilita
+Press the Enable Layers link in the admin section at the bottom of the page to turn on layers.: Clicca "Abilita Livelli" nell'area di amministrazione in fondo alla pagina per abilitare i livelli
+Week: Settimana
+Previous: Precedente
+Next: Prossimo
+Admin mode: Modalità amministratore
+Assistant mode: Modalità assistente
+cont.: cont.
+Generate printer-friendly version: Genera una versione stampabile
+Printer Friendly: Stampabile
+to modify the layers settings for the: per modificare i settaggi per
+Layers are currently: I livelli sono attualmente
+Enabled: Abilitati
+Disabled: Disabilitati
+Disable Layers: Disabilita Livelli
+Enable Layers: Abilita Livelli
+Layer: Livello
+Edit layer: Modifica il livello
+Add layer: Crea un livello
+View this entry: Visualizza questa nota
+Approve this entry?: Approva questa nota?
+Approve/Confirm: Approva/Conferma
+Reject this entry?: Rifiuta questo inserimento?
+Reject: Rifiuta
+No unapproved events for: Evento rifiutato per
+Unapproved Events: Eventi non approvati
+Public Access: Accesso Pubblico
+every: sempre
+2nd: 2&grad;
+3rd: 3&grad;
+4th: 4&grad;
+5th: 5&grad;
+1st: 1&grad;
+last: ultimo
+Description: Descrizione
+Status: Stato
+Waiting for approval: In attesa di approvazione
+Deleted: Cancellato
+Rejected: Rifiutato
+External User: Utente Esterno
+Approve/Confirm entry: Approva/Conferma nota
+Reject entry: Rifiuta evento
+Set category: Setta la categoria
+Edit repeating entry for all dates: Modifica l'evento per tutte le date
+Edit entry for this date: Inserisci l'evento per questa data
+This will delete this entry for all users.: Questo cancellerà la nota per tutti gli utenti.
+Delete repeating event for all dates: Cancella l'evento per tutte le date
+Delete entry only for this date: Cancella l'evento solo per questa data
+Edit entry: Modifica Nota
+This will delete the entry from your calendar.: Questo cancellerà tutti gli eventi del tuo calendario.
+Do you want to add this entry to your calendar?: Vuoi aggiungere questo evento al tuo calendario?
+This will add the entry to your calendar.: Questo aggiungerà un evento al tuo calendario.
+Add to My Calendar: Aggiungi al mio calendario
+Email all participants: Avvisa tutti i partecipanti via e-mail
+Show activity log: Mostra il log delle attività
+Hide activity log: Nascondi il log delle attività
+Export this entry to: Esporta questa nota in
+An appointment has been rejected by: Un appuntamento è stato rifiutato da
+The description is: La descrizione è
+Title: WebCalendar
+Search: Cerca
+Advanced Search: Ricerca Avanzata
+Keywords: Parole Chiave
+You must enter one or more search keywords: Occorre inserire una o più parole chiave
+Search Results: Risultati della Ricerca
+match found: corrispondenza trovata
+matches found: corrispondenze trovate
+No matches found: Nessuna corrispondenza trovata
+View Another User's Calendar: Visualizza calendario di un altro utente
+Go: Vai
+denotes administrative user: denota utente con privilegi amministrativi
+Add New User: Aggiungere Nuovo Utente
+All: Tutte
+Reset: Resetta
+Remove: Rimuovi
+Ok: Ok
+Cancel: Cancella
+This form will allow you to import entries from the Palm Desktop Datebook.: Questo form ti permetterà di importare eventi dal file degli appuntamenti di Palm Desktop
+Exclude private records: Escludi record privati
+This form will import vCalendar (.vcs) 1.0 events: Questo form importerà eventi vCalendar (.vcs) 1.0
+This form will import iCalendar (.ics) events: Questo form importerà eventi iCalendar (.ics)
+Overwrite Prior Import: Sovrascrivi importazione precedente
+Views: Viste
+Add New View: Aggiungi una nuova vista
+Unnamed View: Vista senza nome
+Add View: Aggiungi una vista
+Edit View: Modifica la vista
+View Name: Nome della vista
+View Type: Tipo di vista
+Week (Users horizontal): Settimana (Utenti in orizzontale)
+Week (Users vertical): Settimana (Utenti in verticale)
+Week (Timebar): Settimana (Asse del tempo)
+Month (Timebar): Mese (Asse del tempo)
+Month (side by side): Mese (uno di fianco all'altro)
+Month (on same calendar): Mese (nello stesso calendario)
+NONUSER_PREFIX not set: NONUSER_PREFIX non è stato settato nel file config.php.
+Calendar ID: Identificativo del calendario
+Add New NonUser Calendar: Aggiungi un nuovo calendario per non utenti
+default-category-help: Specifica la categoria di default di un nuovo evento
+Private: Privato
+Approved: Approvato
+Unknown: Sconosciuto
+to manage reports for the Public Access calendar: per gestire rapporti per il calendario ad accesso pubblico
+Add new report: Aggiungi un nuovo rapporto
+Invalid report id: Identificatore di rapporto non valido
+Manage Reports: Gestisci rapporti
+You must enter a login and password: Inserire nome utente e password
+Save login via cookies so I don't have to login next time: Salvare le informazioni di login tramite i cookie così da non doversi più registrare la prossima volta
+Login: Entra
+Access public calendar: Accedi al calendario pubblico
+cookies-note: <b>Nota:</b> Questo applicativo necessita dei cookie abilitati.
+You must specify a view name: Devi specificare il nome di una vista
+New Entry: Nuova Nota
+Import Results: Risultati dell'importazione
+Events successfully imported: Eventi importati con successo
+Events from prior import marked as deleted: Eventi di un'importazione precedente segnati come cancellati
+Conflicting events: Eventi che sono in conflitto
+Errors: Errori
+Back to My Calendar: Torna al mio calendario
+There was an error parsing the import file or no events were returned: C'è stato un errore nella scansione dei file da importare oppure non sono stati trovati eventi
+The import file contained no data: Il file da importare non contiene dati
+The following conflicts with the suggested time: Il seguente è in conflitto con l'orario suggerito
+Unnamed Event: Evento Senza Nome
+Scheduling Conflict: Conflitto di appuntamenti
+conflicts with the following existing calendar entries: è in conflitto con il seguente appuntamento già presente nel calendario
+Event Imported: Eventi importati
+Tomorrow: Domani
+Today: Oggi
+Yesterday: Ieri
+Day before yesterday: Ieri l'altro
+Next week: La prossima settimana
+This week: Questa settimana
+Last week: La settimana scorsa
+Week before last: Due settimane fa
+Next week and week after: La prossima settimana e quella dopo
+This week and next week: Questa settimana e la prossima
+Last week and this week: La settimana scorsa e questa settimana
+Last two weeks: Le due settimane scorse
+Next month: Il prossimo mese
+This month: Questo mese
+Last month: Il mese scorso
+Month before last: Due mesi fa
+Next year: L'anno prossimo
+This year:Quest'anno
+Last year: L'anno scorso
+Year before last: Due anni fa
+Unnamed Report: Rapporto senza nome
+Add Report: Aggiungi un rapporto
+Edit Report: Modifica un rapporto
+Report name: Nome del rapporto
+Current User: Utente Corrente
+Include link in trailer: Includi un link nella parte finale
+Include standard header/trailer: Includi intestazione/parte finale standard
+Date range: Intervallo della data
+Include previous/next links: Includi i link precedente/successivo
+Include empty dates: Includi date vuote
+Template variables: Variabili del modello
+Page template: Modello di pagina
+Day template: Modello di giorno
+Event template: Modello di evento
+Are you sure you want to delete this report?: Sei sicuro di voler cancellare questo rapporto?
+Assistants: Assistenti
+Your assistants: I tuoi Assistenti
+Account: Account
+NonUser Calendars: Calendari dei non utenti
+Delete Events:Cancella eventi
+Public Preferences: Preferenze pubbliche
+Unapproved Public Events: Eventi pubblici non approvati
+Administrative Tools: Strumenti di amministrazione
+Purging events for: Cancellando gli eventi per
+Finished: Finito
+Delete all events before: Cancella tutti gli eventi prima del
+Check box to delete <b>ALL</b> events for a user: Abilita la casella per cancellare <b>TUTTI</b> gli eventi per un utente
+Are you sure you want to delete events for: Sei sicuro di voler cancellare eventi per
+Palm Desktop: Palm Desktop
+It should be located in your Palm directory in <tt>datebook/datebook.dat</tt> in a subdirectory named by your username.: Dovrebbe essere localizzato nel tuo Palm, nella directory <tt>datebook/datebook.dat</tt> in una sottodirectory col tuo nome utente
+The following entries will not be imported: I record seguenti non saranno importati
+Entries older than the current date: Record più vecchi della data odierna
+Entries created in the Palm Desktop that have not been HotSync'd: Record nel Palm Desktop che non sono stati sincronizzati con HotSync
+Anything imported from Palm will be overwritten during the next import (unless the event date has passed).: Qualunque cosa importata dal Palm sarà sovrascritta durante l'importazione successiva (a meno che la data dell'evento non sia già passata)
+Therefore, updates should be made in the Palm Desktop.: Quindi, gli aggiornamenti dovrebbero essere fatti sul Palm Desktop.
+vCal: vCal
+The following formats have been tested: I seguenti formati sono stati provati
+Palm Desktop 4: Palm Desktop 4
+Lotus Organizer 6: Lotus Organizer 6
+Microsoft Outlook 2002: Microsoft Outlook 2002
+iCalendar: iCalendar
+Enabling <b>Overwrite Prior Import</b> will cause events imported previously that used the same UID as an event from the new import file to be marked as deleted.  This should allow an updated iCalendar file to be imported without creating duplicates.: Abilitare <b>Sovrascrivi importazione precedente</b> farà sì che eventi importati in precedenza che facciano uso dello stesso UID di un evento della nuova importazione di essere segnati come cancellati. Questo dovrebbe permettere l'importazione di un file iCalendar aggiornato senza la creazione di duplicati.
+Variable N not found: Variabile N non trovata
+A new appointment has been made for you by: Un nuovo appuntamento è stato fissato per te da
+preview: anteprima
+Russian: Russo
+Italian: Italiano
+German: Tedesco
+French: Francese
+Spanish: Spagnolo
+Turkish: Turco
+Swedish: Svedese
+Norwegian: Norvegese
+Polish: Polacco
+Japanese: Giapponese
+Korean: Coreano
+Basque: Basco
+Bulgarian: Bulgaro
+Catalan: Catalano
+Chinese (Simplified/GB2312): Cinese (Semplificato/GB2312)
+Chinese (Traditonal/Big5): Cinese (Tradizionale/Big5)
+no such user: utente non trovato
+An appointment has been updated by: Un appuntamento è stato aggiornato da
+The subject is: Il titolo è
+Please look on: Per favore guarda
+to accept or reject this appointment: per accettare o respingere questo appuntamento
+to view this appointment: per visualizzare questo appuntamento
+Your suggested time of: L'ora suggerita
+You have not added any categories: Non hai ancora aggiunto nessuna categoria
+Set Category: Setta la categoria
+Edit Custom Script/Stylesheet: Modofica lo script/foglio di stile personalizzato
+Edit Custom Header: Modifica l'intestazione personalizzata
+Edit Custom Trailer: Modifica il fine pagina personalizzato
+Go to: Vai a
+My Calendar: Il mio calendario
+Logout: Esci
+Another User's Calendar: Calendario di altro utente
+Add New Entry: Aggiungi nuova nota
+Manage calendar of: Gestisci il calendario di
+Invalid login: Login non valido
+Invalid user login: Nome utente non valido
+Send Reminder: Avvisa
+This event is confidential: Questo evento è confidenziale
+exceeds limit of XXX events per day: Superato il limite di XXX eventi al giorno
+You have XXX unapproved events: Hai XXX eventi non approvati
+January: Gennaio
+February: Febbraio
+March: Marzo
+April: Aprile
+May_: Maggio
+June: Giugno
+July: Luglio
+August: Agosto
+September: Settembre
+October: Ottobre
+November: Novembre
+Jan: Gen
+Feb: Feb
+Mar: Mar
+Apr: Apr
+May: Mag
+Jun: Giu
+Jul: Lug
+Aug: Ago
+Sep: Set
+Oct: Ott
+Nov: Nov
+Dec: Dic
+day: giorno
+Server URL is required: L'URL del server è necessario
+Server URL must end with '/': L'URL del server deve finire con '/'
+Invalid color for document background: Il colore dello sfondo del documento non è valido
+Invalid color for document title: Il colore del titolo del documento non è valido
+Invalid color for table cell background: Il colore dello sfondo della cella non è valido
+Invalid color for table grid: Il colore per la griglia della tabella non è valido
+Invalid color for table header background: Il colore di sfondo per l'intestazione della tabella non è valido
+Invalid color for table text background: Il colore di sfondo per il testo della tabella non è valido
+Invalid color for event popup background: Il colore di sfondo per i popup di un evento non è valido
+Invalid color for event popup text: Il colore del testo per i popup di un evento non è valido
+Invalid color for table cell background for today: Il colore dello sfondo della cella della data odierna non è valido
+Color format should be '#RRGGBB': Il fomrato del colore deve essere '#RRGGBB'
+You have not entered a Brief Description: Non è stata inserita una breve descrizione
+You have not entered a valid time of day: Non è stato inserito un orario corretto
+The time you have entered begins before your preferred work hours.  Is this correct?: Il tempo che hai inserito inizia prima delle tue ore di lavoro preferite. È corretto?
+Invalid color: Colore non valido
+Are you sure you want to delete this user?: Sei sicuro di voler cancellare questo utente?
+This is a reminder for the event detailed below.: Questo è un avviso per l'evento specificato qui sotto.
+Reminder: Avviso
+Unknown: Sconosciuto
+Changes successfully saved: Cambiamenti salvati correttamente
+Details: Dettagli
+Import format: Formato per l'importazione
+Copy entry: Copia record
+Display days with events in bold in month and year views: Mostra i giorni con degli eventi in grassetto nella visualizzazione mensile ed annuale
+Scheduling: Programmazione
+Public access is default participant: L'accesso pubblico è un partecipante per default
+end-time-help: Specifica il tempo previsto per la fine dell'evento
+Include all layers: Includi tutti i livelli
+Invalid work hours: Ore di lavoro non valide
+Public access visible by default: Accesso pubblico visibile di default
+public-access-default-selected: Quando si aggiunge un nuovo evento, l'utente pubblico sarà selezionato automaticamente come partecipante
+public-access-default-visible: Eventi dal calendario pubblico appariranno automaticamente nel calendario di tutti gli utenti
+timed-evt-len-help: Specifica il  metodo di input per determinare la lunghezza di un evento.
+word characters only: può contenere solo caratteri alfanumerici (a-zA-Z_0-9)

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Japanese-eucjp.txt
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Japanese-eucjp.txt	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Japanese-eucjp.txt	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,1178 @@
+# Use this as a starting point to translate this application into
+# another language.  The format is "English text: translated text"
+# There cannot be a ":" in the English text.
+# Translated by:
+# Makoto Hamanaka <VYA04230 at nifty.com>
+# Tadashi Jokagi <elf2000 at users.sourceforge.net>
+# Last update: 05 Dec 2004
+# Translation last updated on 02-14-2005
+
+
+###############################################
+# Specify a charset (will be sent within meta tag for each page)
+#
+charset: EUC-JP
+charset: SHIFT_JIS
+
+
+
+###############################################
+# Page: activity_log.php
+#
+Activity Log: ³èÆ°¥í¥°
+Admin: ´ÉÍý
+User: ¥æ¡¼¥¶
+Calendar: ¥«¥ì¥ó¥À¡¼
+Date: ÆüÉÕ
+Time: »þ´Ö
+Event: ¥¤¥Ù¥ó¥È
+Action: Áàºî
+Event created: ¥¤¥Ù¥ó¥È¤òºîÀ®¤·¤Þ¤·¤¿
+Event approved: ¥¤¥Ù¥ó¥È¤ò¾µÇ§¤·¤Þ¤·¤¿
+Event rejected: ¥¤¥Ù¥ó¥È¤òµñÈݤ·¤Þ¤·¤¿
+Event updated: ¥¤¥Ù¥ó¥È¤ò¹¹¿·¤·¤Þ¤·¤¿
+Event deleted: ¥¤¥Ù¥ó¥È¤òºï½ü¤·¤Þ¤·¤¿
+Notification sent: ÄÌÃÎÁ÷¿®
+Reminder sent: ¥ê¥Þ¥¤¥ó¥À¡¼Á÷¿®
+Database error: ¥Ç¡¼¥¿¥Ù¡¼¥¹¥¨¥é¡¼
+Previous: Á°
+Events: ¥¤¥Ù¥ó¥È
+Next: ¼¡
+
+
+###############################################
+# Page: add_entry.php
+#
+Invalid entry id: ¥¨¥ó¥È¥ê¡¼ ID ¤¬Ìµ¸ú¤Ç¤¹
+This is a private event and may not be added to your calendar.: ¤³¤ì¤Ï¥×¥é¥¤¥Ù¡¼¥È¤Ê¥¤¥Ù¥ó¥È¤Ê¤Î¤Ç¡¢¤¢¤Ê¤¿¤Î¥«¥ì¥ó¥À¡¼¤Ø¤ÎÄɲ䬤Ǥ­¤Ê¤¤¤³¤È¤¬¤¢¤ê¤Þ¤¹
+Error adding event: ¥¤¥Ù¥ó¥ÈÄɲ娥顼
+
+
+###############################################
+# Page: admin.php
+#
+System Settings: ¥·¥¹¥Æ¥àÀßÄê
+Help: ¥Ø¥ë¥×
+You are not authorized: ¸¢¸Â¤òÍ¿¤¨¤é¤ì¤Æ¤¤¤Þ¤»¤ó
+Note: Ãí°Õ
+Your user preferences: [ ¤¢¤Ê¤¿¤Î¥æ¡¼¥¶¡¼ÀßÄê ]
+may be affecting the appearance of this page.: ¤Ï¡¢¤³¤Î¤Ú¡¼¥¸¤Î¸«¤¿Ìܤ˱ƶÁ¤òÍ¿¤¨¤ë¤«¤â¤·¤ì¤Þ¤»¤ó
+Click here: [ ¤³¤³¤ò¥¯¥ê¥Ã¥¯ ]
+to not use your user preferences when viewing this page: ¤¹¤ë¤È¤³¤Î¥Ú¡¼¥¸¤ò¸«¤ë¤È¤­¤Ë¤¢¤Ê¤¿¤Î¥æ¡¼¥¶¡¼ÀßÄê¤ò»È¤ï¤Ê¤¤¤è¤¦¤Ë¤·¤Þ¤¹
+are being ignored while viewing this page.: ¤Ï¡¢¤³¤Î¥Ú¡¼¥¸¤Ç¤Ï̵»ë¤µ¤ì¤Æ¤¤¤Þ¤¹
+to load your user preferences when viewing this page: ¤¹¤ë¤È¤³¤Î¥Ú¡¼¥¸¤ò¸«¤ë¤È¤­¤Ë¤¢¤Ê¤¿¤Î¥æ¡¼¥¶¡¼ÀßÄê¤òÆɤ߹þ¤à¤è¤¦¤Ë¤·¤Þ¤¹
+Save: Êݸ
+Settings: ÀßÄê
+Public Access: ¸ø³«¥¢¥¯¥»¥¹
+Groups: ¥°¥ë¡¼¥×
+NonUser Calendars: ¾¤Î¥æ¡¼¥¶¡¼¤Î¥«¥ì¥ó¥À¡¼
+Other: ¤½¤Î¾
+Email: ÅŻҥ᡼¥ë
+colors-help: All colors should be specified in "#RRGGBB" hexadecimal format where "RR" is the hex value for red, "GG" is the hex value for green, and "BB" is the hex value for blue.
+Colors: ¿§
+#
+# << MISSING >>
+# app-name-help:
+# English text: Specifies the name of the application that will appear in the browser title bar for all pages and on the login page.  The value you specify here will be looked up in the translations file allowing you to provide different titles for different languages.
+#
+Application Name: ¥¢¥×¥ê¥±¡¼¥·¥ç¥ó̾
+server-url-help: ¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Î¥Ù¡¼¥¹ URL ¤ò»ØÄꤷ¤Þ¤¹¡£¤³¤ì¤Ï¥ê¥Þ¥¤¥ó¥À¡¼¤ÈÄÌÃΤÎÅŻҥ᡼¥ë¤ÎÁ÷¿®¤Ë¤â´Þ¤Þ¤ì¤Þ¤¹¡£
+Server URL: ¥µ¡¼¥Ð¡¼ URL
+language-help: »ÈÍѤ¹¤ë¸À¸ì¤ò»ØÄꤷ¤Þ¤¹¡£
+Language: ¸À¸ì
+Your browser default language is: ¤¢¤Ê¤¿¤Î¥Ö¥é¥¦¥¶¤Î¥Ç¥Õ¥©¥ë¥È¸À¸ì
+fonts-help: »ÈÍѤ¹¤ë¥·¥¹¥Æ¥à¥Õ¥©¥ó¥È¤Î°ìÍ÷¤ò»ØÄꤷ¤Þ¤¹("Arial, Helvetica"¤Î¤è¤¦¤Ë)
+Fonts: ¥Õ¥©¥ó¥È
+#
+# << MISSING >>
+# custom-script-help:
+# English text: Allows entry of custom Javascript or stylesheet text that will be inserted into the HTML "head" section of every page.
+#
+Custom script/stylesheet: ¥«¥¹¥¿¥à¥¹¥¯¥ê¥×¥È¡¿¥¹¥¿¥¤¥ë¥·¡¼¥È
+Yes: ¤Ï¤¤
+No: ¤¤¤¤¤¨
+Edit: ÊÔ½¸
+#
+# << MISSING >>
+# custom-header-help:
+# English text: Allows a custom HTML snippet to be included in the top of every page.
+#
+Custom header: ¥«¥¹¥¿¥à¥Ø¥Ã¥À(Á°Ã֥ƥ­¥¹¥È)
+#
+# << MISSING >>
+# custom-trailer-help:
+# English text: Allows a custom HTML snippet to be included at the end of every page.
+#
+Custom trailer: ¥«¥¹¥¿¥à¥Õ¥Ã¥¿(¸åÃ֥ƥ­¥¹¥È)
+preferred-view-help: Specifies the default view (Day, Week, Month, or Year).
+Preferred view: Í¥À褹¤ë¥Ó¥å¡¼
+Day: Æü
+Week: ½µ
+Month: ·î
+Year: ǯ
+display-weekends-help: ¡Ö½µ¡×¥Ó¥å¡¼¤Ë½µËö¤ò´Þ¤ß¤Þ¤¹¡£
+Display weekends in week view: ¡Ö½µ¡×¥Ó¥å¡¼¤Ç½µËö¤òɽ¼¨¤¹¤ë
+yearly-shows-events-help: ¡Öǯ¡×¥Ó¥å¡¼¤Ç¡¢¶¯Ä´¥Õ¥©¥ó¥È¤Ç¥¤¥Ù¥ó¥È¤ò´Þ¤àÆü¤òɽ¼¨¤·¤Þ¤¹¡£
+Display days with events in bold in month and year views: ¡Öǯ¡×¥Ó¥å¡¼¤È¡Ö·î¡×¥Ó¥å¡¼¤Ç¥¤¥Ù¥ó¥ÈÆü¤ò¶¯Ä´É½¼¨¤¹¤ë
+display-desc-print-day-help: °õºþÍѤΡÖÆü¡×¥Ó¥å¡¼¤Ç¥¤¥Ù¥ó¥È¤ÎÀâÌÀ¤ò´Þ¤ß¤Þ¤¹¡£
+Display description in printer day view: °õºþÍѤΡÖÆü¡×¥Ó¥å¡¼¤ÇÀâÌÀ¤òɽ¼¨¤¹¤ë
+date-format-help: Í¥À褹¤ëÆüÉÕ½ñ¼°¤ò»ØÄꤷ¤Þ¤¹¡£
+Date format: ÆüÉդνñ¼°
+December: 12·î
+time-format-help: »ÈÍѤ¹¤ë»þ´Ö¤Î½ñ¼°¤ò»ØÄꤷ¤Þ¤¹: <br /><i>12 »þ²¼:</i> Î㤨¤Ð»þ´Öɽ¼¨¤Ï¡Ö3am¡×¡Ö 8:30pm¡×¤Ê¤É¤Ç¤¹¡£<br /><i>24 »þ´Ö:</i> Î㤨¤Ð»þ´Öɽ¼¨¤Ï¡Ö300¡×¡Ö2030¡×¤Ê¤É¤Ç¤¹¡£
+Time format: »þ´Ö¤Î½ñ¼°
+12 hour: 12»þ´Ö
+24 hour: 24»þ´Ö
+#
+# << MISSING >>
+# time-interval-help:
+# English text: Specifies how long the time blocks in the week view and day view will be.
+#
+Time interval: »þ´Ö´Ö³Ö
+hour: »þ´Ö
+minutes: ʬ
+#
+# << MISSING >>
+# auto-refresh-help:
+# English text: When enabled, the day view, week view, month view, and list aunapproved pages will all automatically refresh themselves periodically.
+#
+Auto-refresh calendars: ¥«¥ì¥ó¥À¡¼¤Î¼«Æ°¹¹¿·
+auto-refresh-time-help: ¼«Æ°¹¹¿·¤òÍ­¸ú¤Ë¤·¤¿¾ì¹ç¡¢¤³¤ì¤Ï¼«Æ°¹¹¿·¤Î»þ´Ö¤ò»ØÄꤷ¤Þ¤¹¡£
+Auto-refresh time: »þ´Ö¤Î¼«Æ°¹¹¿·
+#
+# << MISSING >>
+# require-approvals-help:
+# English text: When enabled, a user must approve an event before it is displayed on their calendar (unless Display unapproved is enabled).  Note setting this to "No" will not turn off approvals for the Public Access calendar (if the Public Access calendar is enabled).
+#
+Require event approvals: ¥¤¥Ù¥ó¥È¤Î¾µÇ§¤òɬÍפȤ¹¤ë
+display-unapproved-help: Specifies whether unapproved events are displayed in your calendar.<br /> If set to "Yes", then unapproved events will be displayed in your calendar (in a different text color).<br /> If set to "No", then unapproved events must be approved before they are displayed in your calendar.
+Display unapproved: ̤¾µÇ§¥¤¥Ù¥ó¥È¤òɽ¼¨¤¹¤ë
+display-week-number-help: Specifies whether the week number (1-52) should be displayed in the month view and the week view.
+Display week number: ½µÈÖ¹æ¤òɽ¼¨¤¹¤ë
+display-week-starts-on: Specifies whether the week starts on Sunday or Monday.  If Monday is specified, then week numbers will be ISO week numbers.
+Week starts on: ½µ¤Î»Ï¤Þ¤ê
+Sunday: ÆüÍËÆü
+Monday: ·îÍËÆü
+work-hours-help: ¡ÖÆü¡×¥Ó¥å¡¼¤Îɽ¼¨¤Ç¤Î»þ´ÖÈϰϤò»ØÄꤷ¤Þ¤¹¡£
+Work hours: ¶Ð̳»þ´Ö
+From: .
+to: ¡Á
+#
+# << MISSING >>
+# disable-priority-field-help:
+# English text: Selecting "Yes" will remove the "Priority" field from event information pages, providing a simpler interface for novices.
+#
+Disable Priority field: Í¥ÀèÅÙ¥Õ¥£¡¼¥ë¥É̵¸ú
+#
+# << MISSING >>
+# disable-access-field-help:
+# English text: Selecting "Yes" will remove the "Access" field from event information pages, providing a simpler interface for novices.
+#
+Disable Access field: ¥¢¥¯¥»¥¹¥Õ¥£¡¼¥ë¥É̵¸ú
+#
+# << MISSING >>
+# disable-participants-field-help:
+# English text: Selecting "Yes" will remove the "Particpants" field from event information pages, preventing users from adding other users to their events.  If you enable this option, you may want to also disable the "Allow viewing other user's calendars" field also.
+#
+Disable Participants field: »²²Ã¼Ô¥Õ¥£¡¼¥ë¥É̵¸ú
+disable-repeating-field-help:¡Ö¤Ï¤¤¡×¤òÁªÂò¤·¤¿¾ì¹ç¡¢¥¤¥Ù¥ó¥È¤ÎÄɲûþ¤Ë¡Ö·«¤êÊÖ¤·¡×¥Õ¥£¡¼¥ë¥É¤òºï½ü¤¹¤ë¤Ç¤·¤ç¤¦¡£
+Disable Repeating field: ·«¤êÊÖ¤·¥Õ¥£¡¼¥ë¥É̵¸ú
+#
+# << MISSING >>
+# popup-includes-siteextras-help:
+# English text: If enabled, allow custom event fields setup in the site_extras.php file will be displayed in event popups.
+#
+Display Site Extras in popup: ³°Éô¥µ¥¤¥È¤Ï¥Ý¥Ã¥×¥¢¥Ã¥×ɽ¼¨
+#
+# << MISSING >>
+# allow-html-description-help:
+# English text: If enabled, users can enter HTML in the event description field.  If not enabled, the HTML tags will be escaped so as to appear as plain text.  Warning: Enabling this feature will allow users to reference images on other websites.
+#
+Allow HTML in Description: ÀâÌÀ¤Ç HTML ¤òµö²Ä
+ allow-view-other-help: ¤¢¤ë¥æ¡¼¥¶¡¼¤¬Â¾¤Î¥æ¡¼¥¶¡¼¤Î¥«¥ì¥ó¥À¡¼¤ò¸«¤Æ¤â¤è¤¤¤«¤É¤¦¤«»ØÄꤷ¤Þ¤¹¡£
+Allow viewing other user's calendars: ¾¤Î¥æ¡¼¥¶¡¼¤Î¥«¥ì¥ó¥À¡¼¤ò¸«¤ë¤³¤È¤òµö²Ä
+#
+# << MISSING >>
+# allow-view-add-help:
+# English text: A '+' icon will be included in views, allowing users to quickly add events to other users' calendars.
+#
+#
+# << MISSING >>
+# Include add event link in views:
+#
+# << MISSING >>
+# remember-last-login-help:
+# English text: When enabled, the user's login will be filled in for them on the login page (but not the password), and the user's preferences will be loaded (including their preferred colors and language selection).
+#
+Remember last login: ºÇ½ª¥í¥°¥¤¥ó¤ò³Ð¤¨¤ë
+#
+# << MISSING >>
+# conflict-check-help:
+# English text: Check for event conflicts (two events scheduled for the same time for the same person).  If you set this to "Yes", you will still be able to schedule two events at the same time after confirming a warning. If you set this to "No", no checking for conflicts will be done.  You probably want to set this to "Yes", so conflict checking occurs.
+#
+Check for event conflicts: ¥¤¥Ù¥ó¥È¾×ÆͤòÄ´¤Ù¤ë
+#
+# << MISSING >>
+# conflict-months-help:
+# English text: If conflict checking is in place ("Check for event conflicts" is set to "No"), this specifies how many months into the future we should check for conflicts.  If you find adding events is taking a long time to process, reduce this number.
+#
+#
+# << MISSING >>
+# Conflict checking months:
+#
+# << MISSING >>
+# conflict-check-override-help:
+# English text: Allows users to override event conflicts and schedule two or more events for the same time.
+#
+Allow users to override conflicts: ¥æ¡¼¥¶¡¼¤Î¾×Æͤξå½ñ¤­¤òµö²Ä
+limit-appts-help: ¤Ò¤È¤ê¤Î¥æ¡¼¥¶¡¼¤¬Ç¤°Õ¤Î 1 Æü¤¹¤ë¤¬¤Ç¤­¤ëͽÌó¿ô¤ò¥·¥¹¥Æ¥à´ÉÍý¼Ô¤¬¥·¥¹¥Æ¥àÁ´ÂΤËÅϤëÀ©¸Â¤òÀßÄꤹ¤ë¤³¤È¤ò²Äǽ¤Ë¤·¤Þ¤¹¡£
+Limit number of timed events per day: 1 Æü¤¢¤¿¤ê¤ÎÀßÄê¤Ç¤­¤ë¥¤¥Ù¥ó¥È¿ô¤ÎÀ©¸Â
+limit-appts-number-help: ¥æ¡¼¥¶¡¼¤¬ 1 Æü¤Ç»ØÄê¤Ç¤­¤ë¡¢»þ¸Â¥¤¥Ù¥ó¥È¤ÎºÇÂç¿ô¤ò»ØÄꤷ¤Þ¤¹¡£
+Maximum timed events per day: 1 Æü¤¢¤¿¤ê¤ÎÀßÄê¤Ç¤­¤ëºÇÂ祤¥Ù¥ó¥È
+timed-evt-len-help: »þ¸Â¥¤¥Ù¥ó¥È¤ò·èÄꤹ¤ë¤¿¤á¤ÎÆþÎÏÊýË¡¤ò»ØÄꤷ¤Þ¤¹¡£
+Specify timed event length by: ¥¤¥Ù¥ó¥È»þ´Ö¤ÎŤµ¤Î»ØÄê
+Duration: ´ü´Ö
+End Time: ½ªÎ»»þ´Ö
+Plugins: ¥×¥é¥°¥¤¥ó
+plugins-enabled-help: ¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥é¥°¥¤¥ó¤òÍ­¸ú¤Ë¤·¤Þ¤¹¡£
+Enable Plugins: ¥×¥é¥°¥¤¥óÍ­¸ú
+#
+# << MISSING >>
+# plugins-sort-key-help:
+# English text: Specifies a sort key for the plugin.  This allows the plugins to appear in a specific order.
+#
+Plugin: ¥×¥é¥°¥¤¥ó
+#
+# << MISSING >>
+# allow-public-access-help:
+# English text: When enabled, the calendar can be used as a read-only public calendar that does not require users to login.
+#
+Allow public access: ¸ø³«¥¢¥¯¥»¥¹µö²Ä
+#
+# << MISSING >>
+# public-access-default-visible:
+# English text: Events from the public calendar will automatically appear on all users' calendars
+#
+Public access visible by default: ¸ø³«¥¢¥¯¥»¥¹¤Ï¥Ç¥Õ¥©¥ë¥È¤Ç¸«¤¨¤ë
+#
+# << MISSING >>
+# public-access-default-selected:
+# English text: When adding a new event, the public user will be selected by default as a participant.
+#
+Public access is default participant: ¸ø³«¥¢¥¯¥»¥¹¤Ï¥Ç¥Õ¥©¥ë¥È»²²Ã¼Ô
+#
+# << MISSING >>
+# public-access-view-others-help:
+# English text: When access the system with public access, specifies whether the user can view the calendar of another calendar user.
+#
+Public access can view other users: ¸ø³«¥¢¥¯¥»¥¹¤Ï¾¤Î¥æ¡¼¥¶¡¼¤ò¸«¤ë¤³¤È¤¬¤Ç¤­¤ë
+#
+# << MISSING >>
+# public-access-can-add-help:
+# English text: When enabled, users that access the system through Public Access will be able to add new events, but they will not show up in the calendar until an administrator approves the new event.
+#
+Public access can add events: ¸ø³«¥¢¥¯¥»¥¹¤Ï¥¤¥Ù¥ó¥ÈÄɲäǤ­¤ë
+#
+# << MISSING >>
+# public-access-add-requires-approval-help:
+# English text: Specifies whether events added via the public access account require approval before being displayed.
+#
+Public access new events require approval: ¸ø³«¥¢¥¯¥»¥¹¤Î¿·µ¬¥¤¥Ù¥ó¥È¤Ïǧ¾Ú¤òɬÍפȤ¹¤ë
+#
+# << MISSING >>
+# public-access-sees-participants-help:
+# English text: If enabled, users accessing the calendar from the public account will be able to see event participants if they view details of an event.
+#
+Public access can view participants: ¸ø³«¥¢¥¯¥»¥¹¤Ï»²²Ã¼Ô¤ò¸«¤ë¤³¤È¤¬¤Ç¤­¤ë
+groups-enabled-help: ¥°¥ë¡¼¥×¥µ¥Ý¡¼¥È¤òÍ­¸ú¤Ë¤·¤¿¤é¡¢¥æ¡¼¥¶¡¼¤Ï¥°¥ë¡¼¥×¤Ç¥æ¡¼¥¶¡¼¤òÁªÂò¤¹¤ë¤³¤È¤òµö²Ä¤·¤Þ¤¹¡£
+Groups enabled: ¥°¥ë¡¼¥×Í­¸ú
+#
+# << MISSING >>
+# user-sees-his-group-help:
+# English text: If enabled, users will not see calendar users that are not in at least one of their groups.
+#
+User sees only his groups: ¥æ¡¼¥¶¡¼¤Ï¼«Ê¬¤Î¥°¥ë¡¼¥×¤Î¤ß¤ò¸«¤ë
+#
+# << MISSING >>
+# nonuser-enabled-help:
+# English text: If enabled, admins will have the option to add nonuser calendars
+#
+Nonuser enabled: Èó¥æ¡¼¥¶¡¼Í­¸ú
+#
+# << MISSING >>
+# nonuser-list-help:
+# English text: Where to display the nonuser calendars in the participant list
+#
+Nonuser list: Èó¥æ¡¼¥¶¡¼°ìÍ÷
+Top: ¾å
+Bottom: ²¼
+#
+# << MISSING >>
+# reports-enabled-help:
+# English text: If enabled, users will see a "Reports" section at the bottom of each page and will be allowed to create custom reports.  Additionally, admin users can create global reports that will appear at the bottom of all users' pages.
+#
+Reports enabled: ¥ì¥Ý¡¼¥ÈÍ­¸ú
+#
+# << MISSING >>
+# subscriptions-enabled-help:
+# English text: Specifies if remote users can subscribe to a WebCalendar user's calendar, allowing them to see the WebCalendar user's events in their iCal-enabled application (such as Apple's iCal or Mozilla Calendar).
+#
+Allow remote subscriptions: ¥ê¥â¡¼¥È¿½¤·¹þ¤ß¤òµö²Ä
+categories-enabled-help: Í­¸ú¤Ë¤¹¤ë¤È¥¤¥Ù¥ó¥È¥«¥Æ¥´¥ê¤ò¥µ¥Ý¡¼¥È¤·¤Þ¤¹¡£
+Categories enabled: ¥«¥Æ¥´¥êÍ­¸ú
+#
+# << MISSING >>
+# allow-external-users-help:
+# English text: Specifies whether a non-calendar user can be added to an event.  This allows non-calendar users to be listed as event participants.
+#
+Allow external users: ³°Éô¥æ¡¼¥¶¡¼µö²Ä
+#
+# << MISSING >>
+# external-can-receive-notification-help:
+# English text: When external users are enabled and email usage is enabled, external users can receive email notifications when the event is added, updated or delete (if the external user's email address is provided).
+#
+External users can receive email notifications: ³°Éô¥æ¡¼¥¶¡¼¤ÏÅŻҥ᡼¥ëÄÌÃΤò¼õ¤±¤ë¤³¤È¤¬¤Ç¤­¤ë
+#
+# << MISSING >>
+# external-can-receive-reminder-help:
+# English text: When external users are enabled and email usage is enabled, external users can receive email reminders (if the external user's email address is provided).
+#
+External users can receive email reminders: ³°Éô¥æ¡¼¥¶¡¼¤ÏÅŻҥ᡼¥ë¥ê¥Þ¥¤¥ó¥À¡¼¤ò¼õ¤±¤ë¤³¤È¤¬¤Ç¤­¤ë
+email-enabled-help: ¤¹¤Ù¤Æ¤Î¥ê¥Þ¥¤¥ó¥À¡¼¤ÈÄÌÃΤÎÅŻҥ᡼¥ë¤òÁ÷¿®¤òÀÚ¤êÂؤ¨¤Þ¤¹¡£¥µ¡¼¥Ð¡¼¤¬Å¬Àڤ˥᡼¥ë¤ÎÁ÷¿®ÀßÄ꤬¤µ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¡Ö¤¤¤¤¤¨¡×¤ËÀßÄꤷ¤Þ¤¹¡£
+Email enabled: ÅŻҥ᡼¥ëÍ­¸ú
+email-default-sender: ¥ê¥Þ¥¤¥ó¥À¡¼¤òÁ÷¿®¤¹¤ë¾ì¹ç¤ËÁ÷¿®¼Ô¤È¤·¤Æ»ØÄꤹ¤ë¤Ù¤­ÅŻҥ᡼¥ë¥¢¥É¥ì¥¹¤ò»ØÄꤷ¤Þ¤¹¡£
+Default sender address: ¥Ç¥Õ¥©¥ë¥ÈÁ÷¿®¥¢¥É¥ì¥¹
+Default user settings: ¥Ç¥Õ¥©¥ë¥È¥æ¡¼¥¶¡¼ÀßÄê
+email-event-reminders-help: ¥¤¥Ù¥ó¥È¤Î¤ªÃΤ餻¤òÁ÷¤ë¤Ù¤­¤«¤É¤¦¤«»ØÄꤷ¤Þ¤¹¡£
+Event reminders: ¥¤¥Ù¥ó¥È¥ê¥Þ¥¤¥ó¥À¡¼
+email-event-added: Specifies whether or not to send email notifications when an event is added to your calendar.
+Events added to my calendar: ¼«Ê¬¤Î¥«¥ì¥ó¥À¡¼¤Ë¥¤¥Ù¥ó¥È¤òÄɲÃ
+email-event-updated: Specifies whether or not to send email notifications when an event is updated on your calendar.
+Events updated on my calendar: ¼«Ê¬¤Î¥«¥ì¥ó¥À¡¼¤Î¥¤¥Ù¥ó¥È¤ò¹¹¿·
+email-event-deleted: Specifies whether or not to send email notifications when an event is removed from your calendar.
+Events removed from my calendar: ¼«Ê¬¤Î¥«¥ì¥ó¥À¡¼¤«¤é¥¤¥Ù¥ó¥È¤òºï½ü
+email-event-rejected: Specifies whether or not to send email notifications when a participant rejects an event that is on your calendar.
+Event rejected by participant: »²²Ã¼Ô¤Î¥¤¥Ù¥ó¥ÈµñÈÝ
+Allow user to customize colors: ¥æ¡¼¥¶¡¼¤Î¿§ÀßÄê¤òµö²Ä¤¹¤ë
+Enable gradient images for background colors: ÇØ·Ê¿§¤Ë¥°¥é¥Ç¡¼¥·¥ç¥ó²èÁü¤òÍ­¸ú¤Ë¤¹¤ë
+#
+# << MISSING >>
+# Not available:
+Document background: ½ñÎà¤ÎÇØ·Ê¿§
+Select: ÁªÂò
+Document title: ¥É¥­¥å¥á¥ó¥È¥¿¥¤¥È¥ë
+Document text: ¥É¥­¥å¥á¥ó¥È¥Æ¥­¥¹¥È
+Table grid color: ¥Æ¡¼¥Ö¥ë¤Î¥°¥ê¥Ã¥É
+Table header background: ¥Æ¡¼¥Ö¥ë¥Ø¥Ã¥À¤ÎÇØ·Ê
+Table header text: ¥Æ¡¼¥Ö¥ë¥Ø¥Ã¥À¤Î¥Æ¥­¥¹¥È
+Table cell background: ¥Æ¡¼¥Ö¥ëÇØ·Ê
+Table cell background for current day: º£Æü¤Î¥Æ¡¼¥Ö¥ë¥»¥ëÇØ·Ê
+Table cell background for weekends: ½µËö¤Î¥Æ¡¼¥Ö¥ë¥»¥ëÇØ·Ê
+Event popup background: ¥¤¥Ù¥ó¥È¥Ý¥Ã¥×¥¢¥Ã¥×¤ÎÇØ·Ê
+Event popup text: ¥¤¥Ù¥ó¥È¥Ý¥Ã¥×¥¢¥Ã¥×¤Î¥Æ¥­¥¹¥È
+
+
+###############################################
+# Page: admin_handler.php
+#
+Error: ¥¨¥é¡¼
+The following error occurred: °Ê²¼¤Î¥¨¥é¡¼¤¬µ¯¤­¤Þ¤·¤¿
+
+
+###############################################
+# Page: adminhome.php
+#
+Preferences: ¥×¥ê¥Õ¥¡¥ì¥ó¥¹
+Users: ¥æ¡¼¥¶¡¼
+Account: ¥¢¥«¥¦¥ó¥È
+Assistants: ¥¢¥·¥¹¥¿¥ó¥È
+Categories: ¥«¥Æ¥´¥ê
+Views: ¥Ó¥å¡¼
+Layers: ¥ì¥¤¥ä¡¼
+Reports: ¥ì¥Ý¡¼¥È
+Delete Events: ¥¤¥Ù¥ó¥È¤Îºï½ü
+Public Preferences: ¸ø³«ÀßÄê
+Unapproved Public Events: ̤¾µÇ§¤Î¸ø³«¥¤¥Ù¥ó¥È
+Administrative Tools: ´ÉÍý¥Ä¡¼¥ë
+
+
+###############################################
+# Page: approve_entry.php
+#
+Error approving event: ¥¤¥Ù¥ó¥È¾µÇ§¥¨¥é¡¼
+
+
+###############################################
+# Page: assistant_edit.php
+#
+Admin mode: ´ÉÍý¥â¡¼¥É
+Your assistants: ¤¢¤Ê¤¿¤Î¥¢¥·¥¹¥¿¥ó¥È
+
+
+###############################################
+# Page: category.php
+#
+Add: ÄɲÃ
+Category Name: ¥«¥Æ¥´¥ê̾
+Global: Á´ÂÎ
+Delete: ºï½ü
+Are you sure you want to delete this entry?: ¤³¤Î¥¨¥ó¥È¥ê¡¼¤òºï½ü¤·¤Æ¤âÎɤ¤¤Ç¤¹¤«?
+Add New Category: ¿·µ¬¥«¥Æ¥´¥êÄɲÃ
+
+
+###############################################
+# Page: day.php
+#
+Assistant mode: ¥¢¥·¥¹¥¿¥ó¥È¥â¡¼¥É
+Generate printer-friendly version: °õºþÍѥС¼¥¸¥ç¥ó¤òºîÀ®
+Printer Friendly: °õºþÍÑɽ¼¨
+
+
+###############################################
+# Page: del_entry.php
+#
+Hello: ¤³¤ó¤Ë¤Á¤Ï¡ª
+An appointment has been canceled for you by: ²ÝÂꡧ
+The subject was: ²ÝÂê
+Notification: ¤ªÃΤ餻
+
+
+###############################################
+# Page: edit_entry_handler.php
+#
+The following conflicts with the suggested time: °Ê²¼¤¬µ­Æþ¤·¤¿»þ´Ö¤È½Å¤Ê¤Ã¤Æ¤¤¤Þ¤¹
+Unnamed Event: ̾¾Î̤ÀßÄꥤ¥Ù¥ó¥È
+The description is: ¾ÜºÙ:
+Title: WebCalendar
+A new appointment has been made for you by: ¿·¤·¤¤Í½Ä꤬°Ê²¼¤Î¿Í¤Ë¤è¤Ã¤ÆÄɲ䵤ì¤Þ¤·¤¿¡§
+An appointment has been updated by: ͽÄ꤬°Ê²¼¤Î¿Í¤Ë¤è¤Ã¤ÆÊÔ½¸¤µ¤ì¤Þ¤·¤¿¡§
+The subject is: ²ÝÂꡧ
+Please look on: »²¾È¤·¤Æ¤¯¤À¤µ¤¤
+to accept or reject this appointment: ¤³¤ÎͽÄê¤ò¼õ¤±Æþ¤ì¤ë¤«¼õ¤±Æþ¤ì¤Ê¤¤¤«¤¹¤ë
+to view this appointment: ͽÄê¤ò¸«¤ë
+Scheduling Conflict: ¥¹¥±¥¸¥å¡¼¥ë¤¬½Å¤Ê¤Ã¤Æ¤¤¤Þ¤¹
+Your suggested time of: ͽÄê»þ´Ö
+All day event: Á´Æü¥¤¥Ù¥ó¥È
+conflicts with the following existing calendar entries: °Ê²¼¤Î¥¨¥ó¥È¥ê¡¼¤È½Å¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡§
+Cancel: ¥­¥ã¥ó¥»¥ë
+
+
+###############################################
+# Page: edit_layer.php
+#
+Edit Layer: ¥ì¥¤¥ä¡¼¤òÊÔ½¸
+Add Layer: ¥ì¥¤¥ä¡¼¤òÄɲÃ
+Source: ¥½¡¼¥¹
+Color: ¿§
+Duplicates: Ê£À½
+Show layer events that are the same as your own: ¼«¿È¤ÈƱ¤¸¥ì¥¤¥ä¡¼¥¤¥Ù¥ó¥È¤ò¸«¤»¤ë
+Delete layer: ¥ì¥¤¥ä¡¼¤òºï½ü
+Are you sure you want to delete this layer?: ¤³¤Î¥ì¥¤¥ä¡¼¤òºï½ü¤·¤Æ¤âÎɤ¤¤Ç¤¹¤«?
+
+
+###############################################
+# Page: edit_layer_handler.php
+#
+You cannot create a layer for yourself: ¼«Ê¬¤Î¥ì¥¤¥ä¡¼¤òºîÀ®¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤»¤ó¡£
+#
+# << MISSING >>
+# You can only create one layer for each user:
+
+
+###############################################
+# Page: edit_report.php
+#
+Tomorrow: ÌÀÆü
+Today: º£Æü
+Yesterday: ºòÆü
+Day before yesterday: °ìºòÆü
+Next week: ¼¡½µ
+This week: º£½µ
+Last week: Àè½µ
+Week before last: À衹½µ
+Next week and week after: Íè½µ¤ÈºÆÍè½µ
+This week and next week: º£½µ¤ÈÍè½µ
+Last week and this week: Àè½µ¤Èº£½µ
+Last two weeks: ²áµî 2 ½µ
+Next month: Íâ·î
+This month: º£½µ
+Last month: Àè·î
+Month before last: À衹·î
+Next year: Íèǯ
+This year: º£Ç¯
+Last year: µîǯ
+Year before last: °ìºòǯ
+Invalid report id: ̵¸ú¤Ê¥ì¥Ý¡¼¥È ID
+Unnamed Report: ̾¾Î̤ÀßÄê¥ì¥Ý¡¼¥È
+Add Report: ¥ì¥Ý¡¼¥ÈÄɲÃ
+Edit Report: ¥ì¥Ý¡¼¥ÈÊÔ½¸
+Report name: ¥ì¥Ý¡¼¥È̾
+Current User: ¸½ºß¤Î¥æ¡¼¥¶¡¼
+Include link in trailer: ËöÈø¤Ë¥ê¥ó¥¯¤ò´Þ¤à
+Include standard header/trailer: ɸ½à¥Ø¥Ã¥À¡¼/¥Õ¥Ã¥¿¡¼¤ò´Þ¤à
+Date range: ´üÆüÈÏ°Ï
+Category: ¥«¥Æ¥´¥ê
+None: ¤Ê¤·
+Include previous/next links: Á°/¼¡¤Ø¤Î¥ê¥ó¥¯¤ò´Þ¤à
+Include empty dates: ¶õ¤ÎÆü¤ò´Þ¤à
+Template variables: Ãͥƥó¥×¥ì¡¼¥È
+Page template: ¥Ú¡¼¥¸¥Æ¥ó¥×¥ì¡¼¥È
+Day template: Æü¥Æ¥ó¥×¥ì¡¼¥È
+Event template: ¥¤¥Ù¥ó¥È¥Æ¥ó¥×¥ì¡¼¥È
+Are you sure you want to delete this report?: ¤³¤Î¥ì¥Ý¡¼¥È¤òËÜÅö¤Ëºï½ü¤·¤Þ¤¹¤«?
+
+
+###############################################
+# Page: edit_report_handler.php
+#
+Variable N not found: ÊÑ¿ô N ¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó
+
+
+###############################################
+# Page: edit_template.php
+#
+Edit Custom Script/Stylesheet: ¥«¥¹¥¿¥à¥¹¥¯¥ê¥×¥È/¥¹¥¿¥¤¥ë¥·¡¼¥ÈÊÔ½¸
+Edit Custom Header: ¥«¥¹¥¿¥à¥Ø¥Ã¥À¡¼ÊÔ½¸
+Edit Custom Trailer: ¥«¥¹¥¿¥à¥Õ¥Ã¥¿¡¼ÊÔ½¸
+
+
+###############################################
+# Page: edit_user.php
+#
+Edit User: ¥æ¡¼¥¶¡¼¤òÊÔ½¸
+Add User: ¥æ¡¼¥¶¡¼¤òÄɲÃ
+Username: ¥æ¡¼¥¶¡¼Ì¾
+First Name: ̾
+Last Name: À«
+E-mail address: ¥á¡¼¥ë¥¢¥É¥ì¥¹
+Password: ¥Ñ¥¹¥ï¡¼¥É
+again: ºÆÅÙ
+Disabled for demo: ¥Ç¥â¤Ç¤Ï»ÈÍѤǤ­¤Þ¤»¤ó
+Are you sure you want to delete this user?: ¤³¤Î¥æ¡¼¥¶¡¼¤òËÜÅö¤Ëºï½ü¤·¤Þ¤¹¤«?
+Change Password: ¥Ñ¥¹¥ï¡¼¥ÉÊѹ¹
+New Password: ¿·¤·¤¤¥Ñ¥¹¥ï¡¼¥É
+Set Password: ¥Ñ¥¹¥ï¡¼¥É¤òÀßÄê
+
+
+###############################################
+# Page: edit_user_handler.php
+#
+Deleting users not supported: ¥æ¡¼¥¶¡¼¤Îºï½ü¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Þ¤»¤ó
+The passwords were not identical: ¥Ñ¥¹¥ï¡¼¥É¤¬°ìÃפ·¤Þ¤»¤ó
+You have not entered a password: ¥Ñ¥¹¥ï¡¼¥É¤òÆþÎϤ·¤Æ¤¤¤Þ¤»¤ó
+Changes successfully saved: Êѹ¹¤ÎÊݸ¤ËÀ®¸ù¤·¤Þ¤·¤¿¡£
+
+
+###############################################
+# Page: export.php
+#
+Export format: ¥¨¥¯¥¹¥Ý¡¼¥È·Á¼°
+Palm Pilot: ¥Ñ¡¼¥à¥Ñ¥¤¥í¥Ã¥È
+Include all layers: ¤¹¤Ù¤Æ¤Î¥ì¥¤¥ä¡¼¤ò´Þ¤à
+Export all dates: ¤¹¤Ù¤Æ¤ÎÆüÉÕ¤ò¥¨¥¯¥¹¥Ý¡¼¥È
+Start date: ³«»ÏÆü
+End date: ½ªÎ»Æü
+Modified since: ½¤ÀµÆü°Ê¹ß
+Export: ¥¨¥¯¥¹¥Ý¡¼¥È
+
+
+###############################################
+# Page: export_handler.php
+#
+export format not defined or incorrect: ¥¨¥¯¥¹¥Ý¡¼¥È·Á¼°¤¬Ì¤ÄêµÁ¤«Àµ¤·¤¯¤¢¤ê¤Þ¤»¤ó
+
+
+###############################################
+# Page: group_edit.php
+#
+Unnamed Group: ̾¾Î̤ÀßÄꥰ¥ë¡¼¥×
+Add Group: ¥°¥ë¡¼¥×¤ÎÄɲÃ
+Edit Group: ¥°¥ë¡¼¥×¤ÎÊÔ½¸
+Group name: ¥°¥ë¡¼¥×̾
+Updated: ¹¹¿·Æü»þ
+Created by: ºîÀ®¼Ô
+
+
+###############################################
+# Page: group_edit_handler.php
+#
+You must specify a group name: ¥°¥ë¡¼¥×̾¤ò»ØÄꤷ¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó
+
+
+###############################################
+# Page: groups.php
+#
+Add New Group: ¿·¤·¤¤¥°¥ë¡¼¥×¤ÎÄɲÃ
+
+
+###############################################
+# Page: help_admin.php
+#
+Display days with events in bold in year view: ¡Öǯ¡×¥Ó¥å¡¼¤Ç¥¤¥Ù¥ó¥È¤Î¤¢¤ëÆü¤òÂÀ»ú¤Çɽ¼¨¤¹¤ë
+Nonuser: Èó¥æ¡¼¥¶¡¼¥«¥ì¥ó¥À¡¼
+Subscribe/Publish: ¹ØÆÉ/¸ø³«
+
+
+###############################################
+# Page: help_bug.php
+#
+Report Bug: ¥Ð¥°Êó¹ð
+
+
+###############################################
+# Page: help_edit_entry.php
+#
+Adding/Editing Calendar Entries: ¥«¥ì¥ó¥À¡¼¤Î¥¨¥ó¥È¥ê¡¼¤òÄɲá¿ÊÔ½¸
+Brief Description: ´Êñ¤ÊÀâÌÀ
+brief-description-help: This should provide a short description (about 20 characters) of the event.  This will represent the event when viewing the calendar.
+Full Description: ¾Ü¤·¤¤ÀâÌÀ
+full-description-help: ¤³¤ì¤Ï¡¢½ÐÍè»ö¤Î¾ÜºÙ¤ò»Å¾å¤²¤ë¤¹¤ë¤Ù¤­¤Ç¤¹¡£¥æ¡¼¥¶¡¼¤¬¥¤¥Ù¥ó¥È¤ò¸«¤¿¤È¤­¡¢¤³¤Î¾ðÊó¤Ï¸«¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
+date-help: ¥¤¥Ù¥ó¥È¤ÎÆüÉÕ¤ò»ØÄꤷ¤Þ¤¹¡£
+time-help: ¥¤¥Ù¥ó¥È¤Î»þ´Ö¤ò»ØÄꤷ¤Þ¤¹¡£<br /><i>¤³¤Î¥Õ¥£¡¼¥ë¥É¤Ï¶õ¤Ë½ÐÍè¤Þ¤¹¡£</i>
+duration-help: ¥¤¥Ù¥ó¥È¤Î´Ö³Ö(»þ:ʬ)¤ò»ØÄꤷ¤Þ¤¹)<br /><i>¤³¤Î¥Õ¥£¡¼¥ë¥É¤Ï¶õ¤Ë½ÐÍè¤Þ¤¹¡£</i>
+end-time-help: ¥¤¥Ù¥ó¥È¤¬½ªÎ»¤¹¤ë¤ÈͽÁÛ¤µ¤ì¤ë»þ´Ö(´ü´Ö)¤ò»ØÄꤷ¤Þ¤¹¡£
+#
+Priority: Í¥Àè½ç°Ì
+priority-help: ¥¤¥Ù¥ó¥È¤ÎÍ¥ÀèÅÙ¤ò»ØÄꤷ¤Þ¤¹¡£¹â¤¤Í¥ÀèÅ٤Υ¤¥Ù¥ó¥È¤Ï¥Ü¡¼¥ë¥É¤Çɽ¼¨¤µ¤ì¤ë¤Ç¤·¤ç¤¦¡£
+Access: ¥¢¥¯¥»¥¹
+access-help: ¥¤¥Ù¥ó¥È¤Î¥¢¥¯¥»¥¹¥ì¥Ù¥ë¤ò»ØÄꤷ¤Þ¤¹¡£<br /> <i>¸ø³«</i>: ï¤Ç¤â¡¢¥¤¥Ù¥ó¥È¤ÎÁ´¾ÜºÙ¤ò¸«¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£<br /><i>µ¡Ì©</i>: Others can see that you have an entry for that date and time, but not the details of what it is.
+Participants: »²²Ã¼Ô
+participants-help: ¤³¤Î¥¨¥ó¥È¥ê¤Î»²²Ã¼Ô°ìÍ÷
+Repeat Type: ·«ÊÖ¤·¥¿¥¤¥×
+repeat-type-help: Select how often the event should repeat.<i>Monthly (by day)</i> allows an event to repeat on the 1st Monday of the month, 3rd Thursday of the month, etc.  <i>Monthly (by date)</i> allows an event to repeat on the same day of the month.
+Repeat End Date: ·«ÊÖ¤·½ªÎ»Æü
+repeat-end-date-help: ¥¤¥Ù¥ó¥È¤Î·«¤êÊÖ¤·½ªÎ»Æü¤ò»ØÄꤷ¤Þ¤¹¡£
+Repeat Day: ·«ÊÖ¤·Æü
+repeat-day-help: Specifies which days of the week the event should repeat on.  This is for use only when <i>Repeat Type</i> is set to <i>Weekly</i>.
+Frequency: ÉÑÅÙ
+repeat-frequency-help: Specifies how often the event should repeat.  The default 1 indicates it should occur every time.  Specifying 2 will make the event occur every other week (if <i>Repeat Type</i> is set to <i>Weekly</i>), every other month (if <i>Repeat Type</i> is set to <i>Monthly</i>), etc.
+
+
+###############################################
+# Page: help_import.php
+#
+Import: ¥¤¥ó¥Ý¡¼¥È
+Palm Desktop: Palm ¥Ç¥¹¥¯¥È¥Ã¥×
+#
+# << MISSING >>
+# This form will allow you to import entries from the Palm Desktop Datebook.:
+#
+# << MISSING >>
+# It should be located in your Palm directory in <tt>datebook/datebook.dat</tt> in a subdirectory named by your username.:
+The following entries will not be imported: ¼¡¤Î¥¨¥ó¥È¥ê¤Ï¥¤¥ó¥Ý¡¼¥È¤µ¤ì¤Ê¤«¤Ã¤¿¤Ç¤·¤ç¤¦
+Entries older than the current date: ¥¨¥ó¥È¥ê¤Ï¸½ºß¤Î´üÆü¤è¤ê¸Å¤¤¤Ç¤¹
+#
+# << MISSING >>
+# Entries created in the Palm Desktop that have not been HotSync'd:
+#
+# << MISSING >>
+# Anything imported from Palm will be overwritten during the next import (unless the event date has passed).:
+#
+# << MISSING >>
+# Therefore, updates should be made in the Palm Desktop.:
+vCal: vCal
+This form will import vCalendar (.vcs) 1.0 events: ¤³¤Î¥Õ¥©¡¼¥à¤Ï vCalendar (.vcs) 1.0 ¥¤¥Ù¥ó¥È¤È¤·¤Æ¥¤¥ó¥Ý¡¼¥È¤¹¤ë¤Ç¤·¤ç¤¦
+The following formats have been tested: ¼¡¤Î·Á¼°¤¬¥Æ¥¹¥È¤µ¤ì¤Þ¤·¤¿¡£
+Palm Desktop 4: Palm ¥Ç¥¹¥¯¥È¥Ã¥× 4
+Lotus Organizer 6: Lotus ¥ª¡¼¥¬¥Ê¥¤¥¶¡¼ 6
+Microsoft Outlook 2002: Microsoft Outlook 2002
+iCalendar: iCalendar
+This form will import iCalendar (.ics) events: ¤³¤Î¥Õ¥©¡¼¥à¤Ï iCalendar (.ics) ¥¤¥Ù¥ó¥È¤ò¥¤¥ó¥Ý¡¼¥È¤¹¤ë¤Ç¤·¤ç¤¦
+#
+# << MISSING >>
+# Enabling <b>Overwrite Prior Import</b> will cause events imported previously that used the same UID as an event from the new import file to be marked as deleted.  This should allow an updated iCalendar file to be imported without creating duplicates.:
+
+
+###############################################
+# Page: help_index.php
+#
+Help Index: ¥Ø¥ë¥×º÷°ú
+
+
+###############################################
+# Page: help_layers.php
+#
+#
+# << MISSING >>
+# Layers are useful for displaying other users' events in your own calendar.  You can specifiy the user and the color the events will be displayed in.:
+Add/Edit/Delete: ÄɲÃ/ÊÔ½¸/ºï½ü
+#
+# << MISSING >>
+# Clicking the Edit Layers link in the admin section at the bottom of the page will allow you to add/edit/delete layers.:
+#
+# << MISSING >>
+# Specifies the user that you would like to see displayed in your calendar.:
+#
+# << MISSING >>
+# The text color of the new layer that will be displayed in your calendar.:
+#
+# << MISSING >>
+# If checked, events that are duplicates of your events will be shown.:
+#
+Disabling: ̵¸ú¤Ë¤¹¤ë
+#
+# << MISSING >>
+# Press the Disable Layers link in the admin section at the bottom of the page to turn off layers.:
+#
+Enabling: Í­¸ú¤Ë¤¹¤ë
+#
+# << MISSING >>
+# Press the Enable Layers link in the admin section at the bottom of the page to turn on layers.:
+
+
+###############################################
+# Page: help_pref.php
+#
+Default Category: ¥Ç¥Õ¥©¥ë¥È¥«¥Æ¥´¥ê
+default-category-help: ¿·µ¬¥¤¥Ù¥ó¥È¤¬¥Ç¥Õ¥©¥ë¥È¤Ë¤Ê¤ë¤Ù¤­¥«¥Æ¥´¥ê¤ò»ØÄꤷ¤Þ¤¹¡£
+#
+# << MISSING >>
+# allow-remote-subscriptions-help:
+# English text: Specifies if remote users can subscribe to your calendar, allowing them to see your events in a iCal-enabled application (such as Apple's iCal or Mozilla Calendar).
+#
+URL: URL
+#
+# << MISSING >>
+# remote-subscriptions-url-help:
+# English text: Displays the URL remote users should use to subscribe to your calendar.
+#
+
+
+###############################################
+# Page: import.php
+#
+Disabled: »ÈÍÑÉÔ²Ä
+Import format: ¥¤¥ó¥Ý¡¼¥È·Á¼°
+Exclude private records: ½ü³°¤¹¤ë¥×¥é¥¤¥Ù¡¼¥È¥ì¥³¡¼¥É
+#
+# << MISSING >>
+# Overwrite Prior Import:
+
+
+###############################################
+# Page: import_handler.php
+#
+Import Results: ¥¤¥ó¥Ý¡¼¥È·ë²Ì
+Events successfully imported: ¥¤¥Ù¥ó¥È¤Î¥¤¥ó¥Ý¡¼¥È¤ËÀ®¸ù¤·¤Þ¤·¤¿
+#
+# << MISSING >>
+# Events from prior import marked as deleted:
+Conflicting events: ¥¤¥Ù¥ó¥È¾×ÆÍÃæ
+Errors: ¥¨¥é¡¼
+#
+# << MISSING >>
+# There was an error parsing the import file or no events were returned:
+The import file contained no data: ¥¤¥ó¥Ý¡¼¥È¥Õ¥¡¥¤¥ë¤ÎÃæ¿È¤¬¤¢¤ê¤Þ¤»¤ó¡£
+View this entry: ¤³¤Î¥¨¥ó¥È¥ê¡¼¤ò¸«¤ë
+Event Imported: ¥¤¥Ù¥ó¥È¤ò¥¤¥ó¥Ý¡¼¥È¤·¤Þ¤·¤¿¡£
+
+
+###############################################
+# Page: layers.php
+#
+Layers are currently: ¸½ºß¤Î¥ì¥¤¥ä¡¼
+Enabled: »ÈÍѲÄǽ
+Disable Layers: ¥ì¥¤¥ä¡¼¤ò»ÈÍÑÉԲĤˤ¹¤ë
+Enable Layers: ¥ì¥¤¥ä¡¼¤ò»ÈÍѲÄǽ¤Ë¤¹¤ë
+to modify the layers settings for the: ¤Ç±¦¤Î¥ì¥¤¥ä¡¼ÀßÄê¤òÊѹ¹¤¹¤ë:
+#
+# << MISSING >>
+# calendar:
+Add layer: ¥ì¥¤¥ä¡¼¤òÄɲÃ
+Layer: ¥ì¥¤¥ä¡¼
+Edit layer: ¥ì¥¤¥ä¡¼¤òÊÔ½¸
+
+
+###############################################
+# Page: list_unapproved.php
+#
+Approve/Confirm: µö²Ä¡¿³Îǧ
+Approve this entry?: ¥¨¥ó¥È¥ê¡¼¤òµö²Ä¤·¤Þ¤¹¤«?
+Reject: µñÈÝ
+Reject this entry?: ¥¨¥ó¥È¥ê¡¼¤òµñÈݤ·¤Þ¤¹¤«?
+No unapproved events for: ̤¾µÇ§¥¤¥Ù¥ó¥È¤Ï¤¢¤ê¤Þ¤»¤ó
+Unapproved Events: ̤¾µÇ§¥¤¥Ù¥ó¥È
+
+
+###############################################
+# Page: login.php
+#
+Invalid login: ¥í¥°¥¤¥ó¤Ï̵¸ú¤Ç¤¹
+You must enter a login and password: ¥æ¡¼¥¶¡¼Ì¾¤È¥Ñ¥¹¥ï¡¼¥É¤òÆþÎϤ·¤Æ¤¯¤À¤µ¤¤
+Save login via cookies so I don't have to login next time: ¼¡²ó¤«¤é¥í¥°¥¤¥ó¤·¤Ê¤¯¤Æ¤âÎɤ¤¤è¤¦¤Ë¡¢¥æ¡¼¥¶¡¼¾ðÊó¤ò¥¯¥Ã¥­¡¼¤Ë¥»¡¼¥Ö¤¹¤ë
+Login: ¥í¥°¥¤¥ó
+Access public calendar: ¸ø³«¥«¥ì¥ó¥À¡¼¥¢¥¯¥»¥¹
+cookies-note: <b>Ãí°Õ:</b> ¤³¤Î¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Ï¥¯¥Ã¥­¡¼¤¬Í­¸ú¤Ç¤Ê¤±¤ì¤ÐÀµ¾ï¤ËÆ°ºî¤·¤Þ¤»¤ó¡£
+
+
+###############################################
+# Page: month.php
+#
+Sun: Æü
+Mon: ·î
+Tue: ²Ð
+Wed: ¿å
+Thu: ÌÚ
+Fri: ¶â
+Sat: ÅÚ
+
+
+###############################################
+# Page: nonusers.php
+#
+NONUSER_PREFIX not set: Èó¥æ¡¼¥¶¡¼ÀÜƬ¸ì¤Ï̤ÀßÄê
+Add New NonUser Calendar: Èó¥æ¡¼¥¶¡¼¤Î¥«¥ì¥ó¥À¡¼¤Ë¿·µ¬ÄɲÃ
+
+
+###############################################
+# Page: nonusers_handler.php
+#
+Calendar ID: ¥«¥ì¥ó¥À¡¼ ID
+word characters only: ʸ»ú¤Ï±Ñ¿ô»ú¤È¥¢¥ó¥À¡¼¥é¥¤¥ó¤Î¤ß¤ò´Þ¤à¤³¤È¤¬½ÐÍè¤Þ¤¹¡£
+
+
+###############################################
+# Page: pref.php
+#
+Save Preferences: ÀßÄê¤òÊݸ
+to modify the preferences for the Public Access calendar: ¤¹¤ë¤È¸ø³«¥«¥ì¥ó¥À¡¼¤ÎÀßÄ꤬Êѹ¹¤Ç¤­¤Þ¤¹
+tz-help: ¥µ¡¼¥Ð¡¼¤Î»þ´Ö¤«¤é¸½ÃϤλþ´Ö¤Þ¤Ç¤Î»þ´Ö¤òÄ´À᤹¤Ù¤­¤«¤É¤¦¤«¤ò»ØÄꤷ¤Þ¤¹¡£
+Timezone Offset: ¥¿¥¤¥à¥¾¡¼¥ó»þº¹
+Add N hours to: +N »þ´Ö
+Subtract N hours from: -N »þ´Ö
+same as: Ʊ¤¸
+server time: ¥µ¡¼¥Ð¡¼¤È¤Î»þº¹
+When I am the boss: ¾å»Ê¤Î¾ì¹ç
+Email me event notification: ¥¤¥Ù¥ó¥ÈÄÌÃΤò¼«Ê¬¤Ë¥á¡¼¥ë¤¹¤ë
+I want to approve events: ¥¤¥Ù¥ó¥È¤Îǧ¾Ú¤ò¤·¤¿¤¤
+
+
+###############################################
+# Page: purge.php
+#
+Purging events for: ±¦¥æ¡¼¥¶¡¼¤Î¥¤¥Ù¥ó¥È¤ò¾Ãµî¤·¤Æ¤¤¤Þ¤¹
+Finished: ´°Î»¤·¤Þ¤·¤¿
+All: Á´¤Æ
+Delete all events before: ±¦¤ÎÆüÉÕ°ÊÁ°¤Î¥¤¥Ù¥ó¥È¤ò¤¹¤Ù¤Æºï½ü¤¹¤ë
+Check box to delete <b>ALL</b> events for a user: 1 ¥æ¡¼¥¶¡¼¤Î¥¤¥Ù¥ó¥È¤ò<b>¤¹¤Ù¤Æ</b>ºï½ü¤¹¤ë¾ì¹ç¤Ï¥Á¥§¥Ã¥¯¤·¤Æ¤¯¤À¤µ¤¤
+Are you sure you want to delete events for: ±¦¥æ¡¼¥¶¡¼¤Î¥¤¥Ù¥ó¥È¤ò¤¹¤Ù¤Æºï½ü¤·¤ÆÎɤ¤¤Ç¤¹¤«?¡§
+Records deleted from: ¥ì¥³¡¼¥É¤òºï½ü¤·¤Þ¤·¤¿ ÂоÝ:
+
+
+###############################################
+# Page: reject_entry.php
+#
+An appointment has been rejected by: ͽÄ꤬°Ê²¼¤Î¿Í¤Ë¤è¤Ã¤ÆµñÈݤµ¤ì¤Þ¤·¤¿¡£
+
+
+###############################################
+# Page: report.php
+#
+Untimed event: Èó»þ¸Â¥¤¥Ù¥ó¥È
+Private: ¥×¥é¥¤¥Ù¡¼¥È
+Low: Äã
+Medium: Ãæ
+High: ¹â
+Waiting for approval: ¾µÇ§ÂÔ¤Á
+Deleted: ºï½üºÑ
+Rejected: µñÈݺÑ
+Approved: ¾µÇ§ºÑ¤ß
+Unknown: ̤ÃÎ
+to manage reports for the Public Access calendar: ¤¹¤ë¤È¸ø³«¥¢¥¯¥»¥¹¥«¥ì¥ó¥À¡¼ÍÑ¥ì¥Ý¡¼¥È¤ò´ÉÍý¤·¤Þ¤¹
+Add new report: ¿·µ¬¥ì¥Ý¡¼¥ÈÄɲÃ
+cont.: ³¤¯
+Manage Reports: ¥ì¥Ý¡¼¥È´ÉÍý
+
+
+###############################################
+# Page: search.php
+#
+Search: ¸¡º÷
+Keywords: ¥­¡¼¥ï¡¼¥É
+Advanced Search: ¹âÅ٤ʸ¡º÷
+
+
+###############################################
+# Page: search_handler.php
+#
+You must enter one or more search keywords: ¥­¡¼¥ï¡¼¥É¤ò 1 ¤Ä°Ê¾åÆþÎϤ·¤Æ¤¯¤À¤µ¤¤¡£
+Search Results: ¸¡º÷·ë²Ì
+match found: ¸Ä¤Î³ºÅö¹àÌܤ¬¸«¤Ä¤«¤ê¤Þ¤·¤¿¡£
+matches found: ¸Ä¤Î³ºÅö¹àÌܤ¬¸«¤Ä¤«¤ê¤Þ¤·¤¿¡£
+No matches found: ³ºÅö¹àÌܤ¬¸«¤Ä¤«¤ê¤Þ¤»¤ó¤Ç¤·¤¿¡£
+
+
+###############################################
+# Page: select_user.php
+#
+View Another User's Calendar: ¾¤Î¥æ¡¼¥¶¡¼¤Î¥«¥ì¥ó¥À¡¼¤ò¸«¤ë
+Go: ɽ¼¨
+
+
+###############################################
+# Page: set_entry_cat.php
+#
+#
+# << MISSING >>
+# You have not added any categories:
+Set Category: ¥«¥Æ¥´¥êÀßÄê
+
+
+###############################################
+# Page: users.php
+#
+Add New User: ¿·¤·¤¤¥æ¡¼¥¶¡¼¤òÄɲÃ
+denotes administrative user: ´ÉÍý¥æ¡¼¥¶¡¼¤òɽ¼¨
+
+
+###############################################
+# Page: usersel.php
+#
+Reset: ¥ê¥»¥Ã¥È
+Remove: ºï½ü
+Ok: OK
+
+
+###############################################
+# Page: view_entry.php
+#
+every: Ëè
+2nd: Âè2
+3rd: Âè3
+4th: Âè4
+5th: Âè5
+1st: Âè1
+last: ºÇ½ª
+by date: Æü»ØÄê
+Confidential: Èó¸ø³«
+Description: ÀâÌÀ
+Status: ¾õÂÖ
+Public: ¸ø³«
+days: Æü
+day: Æü
+hours: »þ´Ö
+minute: ʬ
+before event: Á°¤ËÄÌÃΤ¹¤ë
+External User: ³°Éô¥æ¡¼¥¶¡¼
+Approve/Confirm entry: µö²Ä¡¿¥¨¥ó¥È¥ê¡¼³Îǧ
+Reject entry: ¥¨¥ó¥È¥ê¡¼¤òµñÈÝ
+Set category: ¥«¥Æ¥´¥êÀßÄê
+Edit repeating entry for all dates: ·«ÊÖ¤·¥¨¥ó¥È¥ê¡¼¤ò¤¹¤Ù¤ÆÊÔ½¸¤¹¤ë
+Edit entry for this date: ¥¨¥ó¥È¥ê¡¼¤òº£²óʬ¤À¤±ÊÔ½¸¤¹¤ë
+Delete repeating event for all dates: ·«ÊÖ¤·¥¨¥ó¥È¥ê¡¼¤ò¤¹¤Ù¤Æºï½ü¤¹¤ë
+This will delete this entry for all users.: ¤³¤ì¤Ë¤è¤Ã¤Æ¤³¤Î¥¨¥ó¥È¥ê¡¼¤ò¤¹¤Ù¤Æ¤Î¥æ¡¼¥¶¤«¤éºï½ü¤·¤Þ¤¹
+Delete entry only for this date: ¥¨¥ó¥È¥ê¡¼¤òº£²óʬ¤À¤±ºï½ü¤¹¤ë
+Edit entry: ¥¨¥ó¥È¥ê¡¼¤ÎÊÔ½¸
+Delete entry: ¥¨¥ó¥È¥ê¡¼¤òºï½ü
+Copy entry: ¥¨¥ó¥È¥ê¡¼¤ò¥³¥Ô¡¼
+This will delete the entry from your calendar.: ¤³¤Î¥¨¥ó¥È¥ê¡¼¤ò¤¢¤Ê¤¿¤Î¥«¥ì¥ó¥À¡¼¤«¤éºï½ü¤·¤Þ¤¹¡£
+Add to My Calendar: ¥Þ¥¤¥«¥ì¥ó¥À¡¼¤ËÄɲÃ
+Do you want to add this entry to your calendar?: ¤³¤Î¥¨¥ó¥È¥ê¡¼¤ò¤¢¤Ê¤¿¤Î¥«¥ì¥ó¥À¡¼¤ËÄɲä·¤Þ¤¹¤«?
+This will add the entry to your calendar.: ¤³¤ì¤Ë¤è¤Ã¤Æ¤³¤Î¥¨¥ó¥È¥ê¡¼¤ò¤¢¤Ê¤¿¤Î¥«¥ì¥ó¥À¡¼¤ËÄɲä·¤Þ¤¹
+Email all participants: »²²Ã¼ÔÁ´°÷¤Ë¥á¡¼¥ëÁ÷¿®
+Show activity log: ³èÆ°¥í¥°¤òɽ¼¨
+Hide activity log: ³èÆ°¥í¥°¤ò±£¤¹
+Export this entry to: ±¦¤Î·Á¼°¤Ë¥¨¥¯¥¹¥Ý¡¼¥È
+
+
+###############################################
+# Page: views.php
+#
+Add New View: ¿·µ¬¥Ó¥å¡¼¤ÎÄɲÃ
+
+
+###############################################
+# Page: views_edit.php
+#
+Unnamed View: ̾¾Î̤ÀßÄê¥Ó¥å¡¼
+Add View: ¥Ó¥å¡¼¤ÎÄɲÃ
+Edit View: ¥Ó¥å¡¼¤ÎÊÔ½¸
+View Name: ¥Ó¥å¡¼Ì¾
+View Type: ¥Ó¥å¡¼¥¿¥¤¥×
+Week (Users horizontal): ½µ(¥æ¡¼¥¶¡¼¿åÊ¿)
+Week (Users vertical): ½µ(¥æ¡¼¥¶¡¼¿âľ)
+Week (Timebar): ½µ(¥¿¥¤¥à¥Ð¡¼)
+Month (Timebar): ·î(¥¿¥¤¥à¥Ð¡¼)
+Month (side by side): ·î(¥æ¡¼¥¶¡¼¤ò²£¤Ëʤ٤ë)
+Month (on same calendar): ·î(Ʊ¤¸¥«¥ì¥ó¥À¡¼¾å¤Ë¥æ¡¼¥¶¡¼º®ºß)
+preview: ¥×¥ì¥Ó¥å¡¼
+
+
+###############################################
+# Page: views_edit_handler.php
+#
+You must specify a view name: ¥Ó¥å¡¼Ì¾¤ò»ØÄꤷ¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£
+
+
+###############################################
+# Page: week_details.php
+#
+New Entry: ¿·µ¬¥¨¥ó¥È¥ê¡¼
+am: AM
+pm: PM
+
+
+###############################################
+# Page: edit_entry.php
+#
+Edit Entry: ¥¨¥ó¥È¥ê¡¼¤òÊÔ½¸
+Add Entry: ¥¨¥ó¥È¥ê¡¼¤òÄɲÃ
+Details: ¾ÜºÙ
+Scheduling: ¥¹¥±¥¸¥å¡¼¥ë
+Repeat: ·«¤êÊÖ¤·
+category-help: ¥¤¥Ù¥ó¥È¤Î¥«¥Æ¥´¥ê¤ò»ØÄꤷ¤Þ¤¹¡£
+Timed event: »þ¸Â¥¤¥Ù¥ó¥È
+#
+# << MISSING >>
+# external-participants-help:
+# English text: Specifies a list of participants for the event that are not calendar users.  The users should be listed one per line and can include an email address.  If an email address is specified, the user is eligible to receive notications and reminders.
+#
+External Participants: ³°Éô»²²Ã¼Ô
+Daily: ËèÆü
+Weekly: Ëè½µ
+Monthly: Ëè·î
+by day: Âè 1 ·îÍˤʤÉ
+by day (from end): ºÇ½ª·îÍˤʤÉ(·îËö¤«¤é)
+Yearly: Ëèǯ
+Use end date: ½ªÎ»Æü¤ò»ÈÍÑ
+Tuesday: ²ÐÍËÆü
+Wednesday: ¿åÍËÆü
+Thursday: ÌÚÍËÆü
+Friday: ¶âÍËÆü
+Saturday: ÅÚÍËÆü
+You are not authorized to edit this entry: ¤³¤Î¥¨¥ó¥È¥ê¡¼¤ÎÊÔ½¸¤Ïµö²Ä¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£
+
+
+###############################################
+# Page: includes/functions.php
+#
+This event is confidential: ¤³¤Î¥¤¥Ù¥ó¥È¤ÏÈó¸ø³«¤Ç¤¹
+exceeds limit of XXX events per day: 1 Æü¤Î¥¤¥Ù¥ó¥È¿ô¤ÎÀ©¸Â¤Ç¤¢¤ë XXX ¸Ä¤òĶ¤¨¤Þ¤·¤¿¡£
+You have XXX unapproved events: XXX ¸Ä¤Î̤¾µÇ§¥¤¥Ù¥ó¥È¤¬¤¢¤ê¤Þ¤¹¡£
+January: 1·î
+February: 2·î
+March: 3·î
+April: 4·î
+May_: 5·î
+June: 6·î
+July: 7·î
+August: 8·î
+September: 9·î
+October: 10·î
+November: 11·î
+Jan: 1·î
+Feb: 2·î
+Mar: 3·î
+Apr: 4·î
+May: 5·î
+Jun: 6·î
+Jul: 7·î
+Aug: 8·î
+Sep: 9·î
+Oct: 10·î
+Nov: 11·î
+Dec: 12·î
+
+
+###############################################
+# Page: includes/help_trailer.php
+#
+Go to: °ÜÆ°
+
+
+###############################################
+# Page: includes/site_extras.php
+#
+Send Reminder: ¥ê¥Þ¥¤¥ó¥À¡¼Á÷¿®
+
+
+###############################################
+# Page: includes/trailer.php
+#
+My Calendar: ¥Þ¥¤¥«¥ì¥ó¥À¡¼
+Back to My Calendar: ¥Þ¥¤¥«¥ì¥ó¥À¡¼¤ËÌá¤ë
+Another User's Calendar: ¾¥æ¡¼¥¶¡¼¤Î¥«¥ì¥ó¥À¡¼
+Add New Entry: ¿·µ¬¥¨¥ó¥È¥ê¡¼ÄɲÃ
+Logout: ¥í¥°¥¢¥¦¥È
+Manage calendar of: ¥«¥ì¥ó¥À¡¼´ÉÍý:
+
+
+###############################################
+# Page: includes/user-nis.php
+#
+incorrect password: ¥Ñ¥¹¥ï¡¼¥É¤¬Àµ¤·¤¯¤¢¤ê¤Þ¤»¤ó¡£
+no such user: ¥æ¡¼¥¶¡¼¤¬µï¤Þ¤»¤ó¡£
+Invalid user login: ̵¸ú¤Ê¥æ¡¼¥¶¡¼¤Î¥í¥°¥¤¥ó
+
+
+###############################################
+# Page: includes/config.php
+#
+English: ±Ñ¸ì
+Basque: Basque
+Bulgarian: ¥Ö¥é¥¸¥ë¸ì
+Catalan: ¥«¥¿¥í¥Ë¥¢¸ì
+Chinese (Traditonal/Big5): Ãæ¹ñ¸ì (Traditonal/Big5)
+Chinese (Simplified/GB2312): Ãæ¹ñ¸ì (Simplified/GB2312)
+Czech: ¥Á¥§¥³¸ì
+Danish: ¥Ç¥ó¥Þ¡¼¥¯¸ì
+Dutch: ¥ª¥é¥ó¥À¸ì
+Estonian: ¥¨¥¹¥È¥Ë¥¢¸ì
+Finnish: ¥Õ¥£¥ó¥é¥ó¥É¸ì
+French: ¥Õ¥é¥ó¥¹¸ì
+Galician: ¥¬¥ê¥·¥¢¸ì
+German: ¥É¥¤¥Ä¸ì
+Holo (Taiwanese): Holo(ÂæÏѸì)
+Hungarian: ¥Ï¥ó¥¬¥ê¡¼¸ì
+Icelandic: ¥¢¥¤¥¹¥é¥ó¥É¸ì
+Italian: ¥¤¥¿¥ê¥¢¸ì
+Japanese: ÆüËܸì
+Korean: ´Ú¹ñ¸ì
+Norwegian: ¥Î¥ë¥¦¥§¡¼¸ì
+Polish: ¥Ý¡¼¥é¥ó¥É¸ì
+Portuguese: ¥Ý¥ë¥È¥¬¥ë¸ì
+Portuguese/Brazil: ¥Ý¥ë¥È¥¬¥ë¸ì/¥Ö¥é¥¸¥ë
+Romanian: ¥ë¡¼¥Þ¥Ë¥¢¸ì
+Russian: ¥í¥·¥¢¸ì
+Spanish: ¥¹¥Ú¥¤¥ó¸ì
+Swedish: ¥¹¥¦¥§¡¼¥Ç¥ó¸ì
+Turkish: ¥È¥ë¥³¸ì
+
+
+###############################################
+# Page: includes/js/admin.php
+#
+Server URL is required: ¥µ¡¼¥Ð¡¼ URL ¤¬É¬¿Ü¤Ç¤¹¡£
+Server URL must end with '/': ¥µ¡¼¥Ð¡¼ URL ¤Ï¡Ö/¡×¤Ç½ª¤ï¤é¤Ê¤±¤ì¤Ð¤¤¤±¤Þ¤»¤ó¡£
+Invalid work hours: ̵¸ú¤Ê¶Ð̳»þ´Ö¤Ç¤¹¡£
+Invalid color for document background: ½ñÎà¤ÎÇØ·Ê¿§¤¬Ìµ¸ú¤Ç¤¹¡£
+Invalid color for document title: ½ñÎà¤Î¥¿¥¤¥È¥ë¿§¤¬Ìµ¸ú¤Ç¤¹¡£
+Invalid color for table cell background: ½ñÎà¤Î¥Æ¡¼¥Ö¥ëÇØ·Ê¿§¤¬Ìµ¸ú¤Ç¤¹¡£
+Invalid color for table grid: ¥Æ¡¼¥Ö¥ë¥°¥ê¥Ã¥É¤Î¿§¤¬Ìµ¸ú¤Ç¤¹¡£
+Invalid color for table header background: ¥Æ¡¼¥Ö¥ë¥Ø¥Ã¥À¡¼¤Î¿§¤¬Ìµ¸ú¤Ç¤¹¡£
+Invalid color for table text background: ¥Æ¡¼¥Ö¥ë¥Æ¥­¥¹¥È¤ÎÇØ·Ê¿§¤¬Ìµ¸ú¤Ç¤¹¡£
+Invalid color for event popup background: ¥¤¥Ù¥ó¥È¥Ý¥Ã¥×¥¢¥Ã¥×¤ÎÇØ·Ê¿§¤¬Ìµ¸ú¤Ç¤¹¡£
+Invalid color for event popup text: ¥¤¥Ù¥ó¥È¥Ý¥Ã¥×¥¢¥Ã¥×¤Î¿§¤¬Ìµ¸ú¤Ç¤¹¡£
+Invalid color for table cell background for today: º£Æü¤Î¥Æ¡¼¥Ö¥ë¥»¥ë¤ÎÇØ·Ê¿§¤¬Ìµ¸ú¤Ç¤¹¡£
+Color format should be '#RRGGBB': ¿§¤Ï '#RRGGBB'¤Î¥Õ¥©¡¼¥Þ¥Ã¥È¤ÇÀßÄꤷ¤Æ¤¯¤À¤µ¤¤¡£
+
+
+###############################################
+# Page: includes/js/edit_entry.php
+#
+You have not entered a Brief Description: ´Êñ¤ÊÀâÌÀ¤òÆþÎϤ·¤Æ¤¤¤Þ¤»¤ó¡£
+You have not entered a valid time of day: Í­¸ú¤Ê»þ´Ö¤òÆþÎϤ·¤Æ¤¤¤Þ¤»¤ó¡£
+The time you have entered begins before your preferred work hours.  Is this correct?: µ­Æþ¤·¤¿»þ´Ö¤ÏÄ̾ï¶Ð̳»þ´ÖÂÓ¤è¤ê¤âÁᤤ¤Ç¤¹¤¬Îɤ¤¤Ç¤¹¤«?
+
+
+###############################################
+# Page: includes/js/edit_layer.php
+#
+Invalid color: ̵¸ú¿§
+
+
+###############################################
+# Page: tools/send_reminders.php
+#
+This is a reminder for the event detailed below.: ¤³¤ì¤Ï°Ê²¼¤Î¥¤¥Ù¥ó¥È¤Î¥ê¥Þ¥¤¥ó¥À¡¼¤Ç¤¹
+Reminder: ¥ê¥Þ¥¤¥ó¥À¡¼

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Japanese-utf8.txt
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Japanese-utf8.txt	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Japanese-utf8.txt	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,1177 @@
+# Use this as a starting point to translate this application into
+# another language.  The format is "English text: translated text"
+# There cannot be a ":" in the English text.
+# Translated by:
+# Makoto Hamanaka <VYA04230 at nifty.com>
+# Tadashi Jokagi <elf2000 at users.sourceforge.net>
+# Last update: 05 Dec 2004
+# Translation last updated on 02-14-2005
+
+
+###############################################
+# Specify a charset (will be sent within meta tag for each page)
+#
+charset: UTF-8
+
+
+
+###############################################
+# Page: activity_log.php
+#
+Activity Log: 活動ログ
+Admin: 管理
+User: ユーザ
+Calendar: カレンダー
+Date: 日付
+Time: 時間
+Event: イベント
+Action: 操作
+Event created: イベントを作成しました
+Event approved: イベントを承認しました
+Event rejected: イベントを拒否しました
+Event updated: イベントを更新しました
+Event deleted: イベントを削除しました
+Notification sent: 通知送信
+Reminder sent: リマインダー送信
+Database error: データベースエラー
+Previous: 前
+Events: イベント
+Next: 次
+
+
+###############################################
+# Page: add_entry.php
+#
+Invalid entry id: エントリー ID が無効です
+This is a private event and may not be added to your calendar.: これはプライベートなイベントなので、あなたのカレンダーへの追加ができないことがあります
+Error adding event: イベント追加エラー
+
+
+###############################################
+# Page: admin.php
+#
+System Settings: システム設定
+Help: ヘルプ
+You are not authorized: 権限を与えられていません
+Note: 注意
+Your user preferences: [ あなたのユーザー設定 ]
+may be affecting the appearance of this page.: は、このぺージの見た目に影響を与えるかもしれません
+Click here: [ ここをクリック ]
+to not use your user preferences when viewing this page: するとこのページを見るときにあなたのユーザー設定を使わないようにします
+are being ignored while viewing this page.: は、このページでは無視されています
+to load your user preferences when viewing this page: するとこのページを見るときにあなたのユーザー設定を読み込むようにします
+Save: 保存
+Settings: 設定
+Public Access: 公開アクセス
+Groups: グループ
+NonUser Calendars: 他のユーザーのカレンダー
+Other: その他
+Email: 電子メール
+colors-help: All colors should be specified in "#RRGGBB" hexadecimal format where "RR" is the hex value for red, "GG" is the hex value for green, and "BB" is the hex value for blue.
+Colors: 色
+#
+# << MISSING >>
+# app-name-help:
+# English text: Specifies the name of the application that will appear in the browser title bar for all pages and on the login page.  The value you specify here will be looked up in the translations file allowing you to provide different titles for different languages.
+#
+Application Name: アプリケーション名
+server-url-help: アプリケーションのベース URL を指定します。これはリマインダーと通知の電子メールの送信にも含まれます。
+Server URL: サーバー URL
+language-help: 使用する言語を指定します。
+Language: 言語
+Your browser default language is: あなたのブラウザのデフォルト言語
+fonts-help: 使用するシステムフォントの一覧を指定します("Arial, Helvetica"のように)
+Fonts: フォント
+#
+# << MISSING >>
+# custom-script-help:
+# English text: Allows entry of custom Javascript or stylesheet text that will be inserted into the HTML "head" section of every page.
+#
+Custom script/stylesheet: カスタムスクリプト/スタイルシート
+Yes: はい
+No: いいえ
+Edit: 編集
+#
+# << MISSING >>
+# custom-header-help:
+# English text: Allows a custom HTML snippet to be included in the top of every page.
+#
+Custom header: カスタムヘッダ(前置テキスト)
+#
+# << MISSING >>
+# custom-trailer-help:
+# English text: Allows a custom HTML snippet to be included at the end of every page.
+#
+Custom trailer: カスタムフッタ(後置テキスト)
+preferred-view-help: Specifies the default view (Day, Week, Month, or Year).
+Preferred view: 優先するビュー
+Day: 日
+Week: 週
+Month: 月
+Year: 年
+display-weekends-help: 「週」ビューに週末を含みます。
+Display weekends in week view: 「週」ビューで週末を表示する
+yearly-shows-events-help: 「年」ビューで、強調フォントでイベントを含む日を表示します。
+Display days with events in bold in month and year views: 「年」ビューと「月」ビューでイベント日を強調表示する
+display-desc-print-day-help: 印刷用の「日」ビューでイベントの説明を含みます。
+Display description in printer day view: 印刷用の「日」ビューで説明を表示する
+date-format-help: 優先する日付書式を指定します。
+Date format: 日付の書式
+December: 12月
+time-format-help: 使用する時間の書式を指定します: <br /><i>12 時下:</i> 例えば時間表示は「3am」「 8:30pm」などです。<br /><i>24 時間:</i> 例えば時間表示は「300」「2030」などです。
+Time format: 時間の書式
+12 hour: 12時間
+24 hour: 24時間
+#
+# << MISSING >>
+# time-interval-help:
+# English text: Specifies how long the time blocks in the week view and day view will be.
+#
+Time interval: 時間間隔
+hour: 時間
+minutes: 分
+#
+# << MISSING >>
+# auto-refresh-help:
+# English text: When enabled, the day view, week view, month view, and list aunapproved pages will all automatically refresh themselves periodically.
+#
+Auto-refresh calendars: カレンダーの自動更新
+auto-refresh-time-help: 自動更新を有効にした場合、これは自動更新の時間を指定します。
+Auto-refresh time: 時間の自動更新
+#
+# << MISSING >>
+# require-approvals-help:
+# English text: When enabled, a user must approve an event before it is displayed on their calendar (unless Display unapproved is enabled).  Note setting this to "No" will not turn off approvals for the Public Access calendar (if the Public Access calendar is enabled).
+#
+Require event approvals: イベントの承認を必要とする
+display-unapproved-help: Specifies whether unapproved events are displayed in your calendar.<br /> If set to "Yes", then unapproved events will be displayed in your calendar (in a different text color).<br /> If set to "No", then unapproved events must be approved before they are displayed in your calendar.
+Display unapproved: 未承認イベントを表示する
+display-week-number-help: Specifies whether the week number (1-52) should be displayed in the month view and the week view.
+Display week number: 週番号を表示する
+display-week-starts-on: Specifies whether the week starts on Sunday or Monday.  If Monday is specified, then week numbers will be ISO week numbers.
+Week starts on: 週の始まり
+Sunday: 日曜日
+Monday: 月曜日
+work-hours-help: 「日」ビューの表示での時間範囲を指定します。
+Work hours: 勤務時間
+From: .
+to: 〜
+#
+# << MISSING >>
+# disable-priority-field-help:
+# English text: Selecting "Yes" will remove the "Priority" field from event information pages, providing a simpler interface for novices.
+#
+Disable Priority field: 優先度フィールド無効
+#
+# << MISSING >>
+# disable-access-field-help:
+# English text: Selecting "Yes" will remove the "Access" field from event information pages, providing a simpler interface for novices.
+#
+Disable Access field: アクセスフィールド無効
+#
+# << MISSING >>
+# disable-participants-field-help:
+# English text: Selecting "Yes" will remove the "Particpants" field from event information pages, preventing users from adding other users to their events.  If you enable this option, you may want to also disable the "Allow viewing other user's calendars" field also.
+#
+Disable Participants field: 参加者フィールド無効
+disable-repeating-field-help:「はい」を選択した場合、イベントの追加時に「繰り返し」フィールドを削除するでしょう。
+Disable Repeating field: 繰り返しフィールド無効
+#
+# << MISSING >>
+# popup-includes-siteextras-help:
+# English text: If enabled, allow custom event fields setup in the site_extras.php file will be displayed in event popups.
+#
+Display Site Extras in popup: 外部サイトはポップアップ表示
+#
+# << MISSING >>
+# allow-html-description-help:
+# English text: If enabled, users can enter HTML in the event description field.  If not enabled, the HTML tags will be escaped so as to appear as plain text.  Warning: Enabling this feature will allow users to reference images on other websites.
+#
+Allow HTML in Description: 説明で HTML を許可
+ allow-view-other-help: あるユーザーが他のユーザーのカレンダーを見てもよいかどうか指定します。
+Allow viewing other user's calendars: 他のユーザーのカレンダーを見ることを許可
+#
+# << MISSING >>
+# allow-view-add-help:
+# English text: A '+' icon will be included in views, allowing users to quickly add events to other users' calendars.
+#
+#
+# << MISSING >>
+# Include add event link in views:
+#
+# << MISSING >>
+# remember-last-login-help:
+# English text: When enabled, the user's login will be filled in for them on the login page (but not the password), and the user's preferences will be loaded (including their preferred colors and language selection).
+#
+Remember last login: 最終ログインを覚える
+#
+# << MISSING >>
+# conflict-check-help:
+# English text: Check for event conflicts (two events scheduled for the same time for the same person).  If you set this to "Yes", you will still be able to schedule two events at the same time after confirming a warning. If you set this to "No", no checking for conflicts will be done.  You probably want to set this to "Yes", so conflict checking occurs.
+#
+Check for event conflicts: イベント衝突を調べる
+#
+# << MISSING >>
+# conflict-months-help:
+# English text: If conflict checking is in place ("Check for event conflicts" is set to "No"), this specifies how many months into the future we should check for conflicts.  If you find adding events is taking a long time to process, reduce this number.
+#
+#
+# << MISSING >>
+# Conflict checking months:
+#
+# << MISSING >>
+# conflict-check-override-help:
+# English text: Allows users to override event conflicts and schedule two or more events for the same time.
+#
+Allow users to override conflicts: ユーザーの衝突の上書きを許可
+limit-appts-help: ひとりのユーザーが任意の 1 日するができる予約数をシステム管理者がシステム全体に渡る制限を設定することを可能にします。
+Limit number of timed events per day: 1 日あたりの設定できるイベント数の制限
+limit-appts-number-help: ユーザーが 1 日で指定できる、時限イベントの最大数を指定します。
+Maximum timed events per day: 1 日あたりの設定できる最大イベント
+timed-evt-len-help: 時限イベントを決定するための入力方法を指定します。
+Specify timed event length by: イベント時間の長さの指定
+Duration: 期間
+End Time: 終了時間
+Plugins: プラグイン
+plugins-enabled-help: アプリケーションプラグインを有効にします。
+Enable Plugins: プラグイン有効
+#
+# << MISSING >>
+# plugins-sort-key-help:
+# English text: Specifies a sort key for the plugin.  This allows the plugins to appear in a specific order.
+#
+Plugin: プラグイン
+#
+# << MISSING >>
+# allow-public-access-help:
+# English text: When enabled, the calendar can be used as a read-only public calendar that does not require users to login.
+#
+Allow public access: 公開アクセス許可
+#
+# << MISSING >>
+# public-access-default-visible:
+# English text: Events from the public calendar will automatically appear on all users' calendars
+#
+Public access visible by default: 公開アクセスはデフォルトで見える
+#
+# << MISSING >>
+# public-access-default-selected:
+# English text: When adding a new event, the public user will be selected by default as a participant.
+#
+Public access is default participant: 公開アクセスはデフォルト参加者
+#
+# << MISSING >>
+# public-access-view-others-help:
+# English text: When access the system with public access, specifies whether the user can view the calendar of another calendar user.
+#
+Public access can view other users: 公開アクセスは他のユーザーを見ることができる
+#
+# << MISSING >>
+# public-access-can-add-help:
+# English text: When enabled, users that access the system through Public Access will be able to add new events, but they will not show up in the calendar until an administrator approves the new event.
+#
+Public access can add events: 公開アクセスはイベント追加できる
+#
+# << MISSING >>
+# public-access-add-requires-approval-help:
+# English text: Specifies whether events added via the public access account require approval before being displayed.
+#
+Public access new events require approval: 公開アクセスの新規イベントは認証を必要とする
+#
+# << MISSING >>
+# public-access-sees-participants-help:
+# English text: If enabled, users accessing the calendar from the public account will be able to see event participants if they view details of an event.
+#
+Public access can view participants: 公開アクセスは参加者を見ることができる
+groups-enabled-help: グループサポートを有効にしたら、ユーザーはグループでユーザーを選択することを許可します。
+Groups enabled: グループ有効
+#
+# << MISSING >>
+# user-sees-his-group-help:
+# English text: If enabled, users will not see calendar users that are not in at least one of their groups.
+#
+User sees only his groups: ユーザーは自分のグループのみを見る
+#
+# << MISSING >>
+# nonuser-enabled-help:
+# English text: If enabled, admins will have the option to add nonuser calendars
+#
+Nonuser enabled: 非ユーザー有効
+#
+# << MISSING >>
+# nonuser-list-help:
+# English text: Where to display the nonuser calendars in the participant list
+#
+Nonuser list: 非ユーザー一覧
+Top: 上
+Bottom: 下
+#
+# << MISSING >>
+# reports-enabled-help:
+# English text: If enabled, users will see a "Reports" section at the bottom of each page and will be allowed to create custom reports.  Additionally, admin users can create global reports that will appear at the bottom of all users' pages.
+#
+Reports enabled: レポート有効
+#
+# << MISSING >>
+# subscriptions-enabled-help:
+# English text: Specifies if remote users can subscribe to a WebCalendar user's calendar, allowing them to see the WebCalendar user's events in their iCal-enabled application (such as Apple's iCal or Mozilla Calendar).
+#
+Allow remote subscriptions: リモート申し込みを許可
+categories-enabled-help: 有効にするとイベントカテゴリをサポートします。
+Categories enabled: カテゴリ有効
+#
+# << MISSING >>
+# allow-external-users-help:
+# English text: Specifies whether a non-calendar user can be added to an event.  This allows non-calendar users to be listed as event participants.
+#
+Allow external users: 外部ユーザー許可
+#
+# << MISSING >>
+# external-can-receive-notification-help:
+# English text: When external users are enabled and email usage is enabled, external users can receive email notifications when the event is added, updated or delete (if the external user's email address is provided).
+#
+External users can receive email notifications: 外部ユーザーは電子メール通知を受けることができる
+#
+# << MISSING >>
+# external-can-receive-reminder-help:
+# English text: When external users are enabled and email usage is enabled, external users can receive email reminders (if the external user's email address is provided).
+#
+External users can receive email reminders: 外部ユーザーは電子メールリマインダーを受けることができる
+email-enabled-help: すべてのリマインダーと通知の電子メールを送信を切り替えます。サーバーが適切にメールの送信設定がされていない場合「いいえ」に設定します。
+Email enabled: 電子メール有効
+email-default-sender: リマインダーを送信する場合に送信者として指定するべき電子メールアドレスを指定します。
+Default sender address: デフォルト送信アドレス
+Default user settings: デフォルトユーザー設定
+email-event-reminders-help: イベントのお知らせを送るべきかどうか指定します。
+Event reminders: イベントリマインダー
+email-event-added: Specifies whether or not to send email notifications when an event is added to your calendar.
+Events added to my calendar: 自分のカレンダーにイベントを追加
+email-event-updated: Specifies whether or not to send email notifications when an event is updated on your calendar.
+Events updated on my calendar: 自分のカレンダーのイベントを更新
+email-event-deleted: Specifies whether or not to send email notifications when an event is removed from your calendar.
+Events removed from my calendar: 自分のカレンダーからイベントを削除
+email-event-rejected: Specifies whether or not to send email notifications when a participant rejects an event that is on your calendar.
+Event rejected by participant: 参加者のイベント拒否
+Allow user to customize colors: ユーザーの色設定を許可する
+Enable gradient images for background colors: 背景色にグラデーション画像を有効にする
+#
+# << MISSING >>
+# Not available:
+Document background: 書類の背景色
+Select: 選択
+Document title: ドキュメントタイトル
+Document text: ドキュメントテキスト
+Table grid color: テーブルのグリッド
+Table header background: テーブルヘッダの背景
+Table header text: テーブルヘッダのテキスト
+Table cell background: テーブル背景
+Table cell background for current day: 今日のテーブルセル背景
+Table cell background for weekends: 週末のテーブルセル背景
+Event popup background: イベントポップアップの背景
+Event popup text: イベントポップアップのテキスト
+
+
+###############################################
+# Page: admin_handler.php
+#
+Error: エラー
+The following error occurred: 以下のエラーが起きました
+
+
+###############################################
+# Page: adminhome.php
+#
+Preferences: プリファレンス
+Users: ユーザー
+Account: アカウント
+Assistants: アシスタント
+Categories: カテゴリ
+Views: ビュー
+Layers: レイヤー
+Reports: レポート
+Delete Events: イベントの削除
+Public Preferences: 公開設定
+Unapproved Public Events: 未承認の公開イベント
+Administrative Tools: 管理ツール
+
+
+###############################################
+# Page: approve_entry.php
+#
+Error approving event: イベント承認エラー
+
+
+###############################################
+# Page: assistant_edit.php
+#
+Admin mode: 管理モード
+Your assistants: あなたのアシスタント
+
+
+###############################################
+# Page: category.php
+#
+Add: 追加
+Category Name: カテゴリ名
+Global: 全体
+Delete: 削除
+Are you sure you want to delete this entry?: このエントリーを削除しても良いですか?
+Add New Category: 新規カテゴリ追加
+
+
+###############################################
+# Page: day.php
+#
+Assistant mode: アシスタントモード
+Generate printer-friendly version: 印刷用バージョンを作成
+Printer Friendly: 印刷用表示
+
+
+###############################################
+# Page: del_entry.php
+#
+Hello: こんにちは!
+An appointment has been canceled for you by: 課題:
+The subject was: 課題
+Notification: お知らせ
+
+
+###############################################
+# Page: edit_entry_handler.php
+#
+The following conflicts with the suggested time: 以下が記入した時間と重なっています
+Unnamed Event: 名称未設定イベント
+The description is: 詳細:
+Title: WebCalendar
+A new appointment has been made for you by: 新しい予定が以下の人によって追加されました:
+An appointment has been updated by: 予定が以下の人によって編集されました:
+The subject is: 課題:
+Please look on: 参照してください
+to accept or reject this appointment: この予定を受け入れるか受け入れないかする
+to view this appointment: 予定を見る
+Scheduling Conflict: スケジュールが重なっています
+Your suggested time of: 予定時間
+All day event: 全日イベント
+conflicts with the following existing calendar entries: 以下のエントリーと重なっています:
+Cancel: キャンセル
+
+
+###############################################
+# Page: edit_layer.php
+#
+Edit Layer: レイヤーを編集
+Add Layer: レイヤーを追加
+Source: ソース
+Color: 色
+Duplicates: 複製
+Show layer events that are the same as your own: 自身と同じレイヤーイベントを見せる
+Delete layer: レイヤーを削除
+Are you sure you want to delete this layer?: このレイヤーを削除しても良いですか?
+
+
+###############################################
+# Page: edit_layer_handler.php
+#
+You cannot create a layer for yourself: 自分のレイヤーを作成することができません。
+#
+# << MISSING >>
+# You can only create one layer for each user:
+
+
+###############################################
+# Page: edit_report.php
+#
+Tomorrow: 明日
+Today: 今日
+Yesterday: 昨日
+Day before yesterday: 一昨日
+Next week: 次週
+This week: 今週
+Last week: 先週
+Week before last: 先々週
+Next week and week after: 来週と再来週
+This week and next week: 今週と来週
+Last week and this week: 先週と今週
+Last two weeks: 過去 2 週
+Next month: 翌月
+This month: 今週
+Last month: 先月
+Month before last: 先々月
+Next year: 来年
+This year: 今年
+Last year: 去年
+Year before last: 一昨年
+Invalid report id: 無効なレポート ID
+Unnamed Report: 名称未設定レポート
+Add Report: レポート追加
+Edit Report: レポート編集
+Report name: レポート名
+Current User: 現在のユーザー
+Include link in trailer: 末尾にリンクを含む
+Include standard header/trailer: 標準ヘッダー/フッターを含む
+Date range: 期日範囲
+Category: カテゴリ
+None: なし
+Include previous/next links: 前/次へのリンクを含む
+Include empty dates: 空の日を含む
+Template variables: 値テンプレート
+Page template: ページテンプレート
+Day template: 日テンプレート
+Event template: イベントテンプレート
+Are you sure you want to delete this report?: このレポートを本当に削除しますか?
+
+
+###############################################
+# Page: edit_report_handler.php
+#
+Variable N not found: 変数 N が見つかりません
+
+
+###############################################
+# Page: edit_template.php
+#
+Edit Custom Script/Stylesheet: カスタムスクリプト/スタイルシート編集
+Edit Custom Header: カスタムヘッダー編集
+Edit Custom Trailer: カスタムフッター編集
+
+
+###############################################
+# Page: edit_user.php
+#
+Edit User: ユーザーを編集
+Add User: ユーザーを追加
+Username: ユーザー名
+First Name: 名
+Last Name: 姓
+E-mail address: メールアドレス
+Password: パスワード
+again: 再度
+Disabled for demo: デモでは使用できません
+Are you sure you want to delete this user?: このユーザーを本当に削除しますか?
+Change Password: パスワード変更
+New Password: 新しいパスワード
+Set Password: パスワードを設定
+
+
+###############################################
+# Page: edit_user_handler.php
+#
+Deleting users not supported: ユーザーの削除はサポートされていません
+The passwords were not identical: パスワードが一致しません
+You have not entered a password: パスワードを入力していません
+Changes successfully saved: 変更の保存に成功しました。
+
+
+###############################################
+# Page: export.php
+#
+Export format: エクスポート形式
+Palm Pilot: パームパイロット
+Include all layers: すべてのレイヤーを含む
+Export all dates: すべての日付をエクスポート
+Start date: 開始日
+End date: 終了日
+Modified since: 修正日以降
+Export: エクスポート
+
+
+###############################################
+# Page: export_handler.php
+#
+export format not defined or incorrect: エクスポート形式が未定義か正しくありません
+
+
+###############################################
+# Page: group_edit.php
+#
+Unnamed Group: 名称未設定グループ
+Add Group: グループの追加
+Edit Group: グループの編集
+Group name: グループ名
+Updated: 更新日時
+Created by: 作成者
+
+
+###############################################
+# Page: group_edit_handler.php
+#
+You must specify a group name: グループ名を指定しなければなりません
+
+
+###############################################
+# Page: groups.php
+#
+Add New Group: 新しいグループの追加
+
+
+###############################################
+# Page: help_admin.php
+#
+Display days with events in bold in year view: 「年」ビューでイベントのある日を太字で表示する
+Nonuser: 非ユーザーカレンダー
+Subscribe/Publish: 購読/公開
+
+
+###############################################
+# Page: help_bug.php
+#
+Report Bug: バグ報告
+
+
+###############################################
+# Page: help_edit_entry.php
+#
+Adding/Editing Calendar Entries: カレンダーのエントリーを追加/編集
+Brief Description: 簡単な説明
+brief-description-help: This should provide a short description (about 20 characters) of the event.  This will represent the event when viewing the calendar.
+Full Description: 詳しい説明
+full-description-help: これは、出来事の詳細を仕上げるするべきです。ユーザーがイベントを見たとき、この情報は見ることができます。
+date-help: イベントの日付を指定します。
+time-help: イベントの時間を指定します。<br /><i>このフィールドは空に出来ます。</i>
+duration-help: イベントの間隔(時:分)を指定します)<br /><i>このフィールドは空に出来ます。</i>
+end-time-help: イベントが終了すると予想される時間(期間)を指定します。
+#
+Priority: 優先順位
+priority-help: イベントの優先度を指定します。高い優先度のイベントはボールドで表示されるでしょう。
+Access: アクセス
+access-help: イベントのアクセスレベルを指定します。<br /> <i>公開</i>: 誰でも、イベントの全詳細を見ることができます。<br /><i>機密</i>: Others can see that you have an entry for that date and time, but not the details of what it is.
+Participants: 参加者
+participants-help: このエントリの参加者一覧
+Repeat Type: 繰返しタイプ
+repeat-type-help: Select how often the event should repeat.<i>Monthly (by day)</i> allows an event to repeat on the 1st Monday of the month, 3rd Thursday of the month, etc.  <i>Monthly (by date)</i> allows an event to repeat on the same day of the month.
+Repeat End Date: 繰返し終了日
+repeat-end-date-help: イベントの繰り返し終了日を指定します。
+Repeat Day: 繰返し日
+repeat-day-help: Specifies which days of the week the event should repeat on.  This is for use only when <i>Repeat Type</i> is set to <i>Weekly</i>.
+Frequency: 頻度
+repeat-frequency-help: Specifies how often the event should repeat.  The default 1 indicates it should occur every time.  Specifying 2 will make the event occur every other week (if <i>Repeat Type</i> is set to <i>Weekly</i>), every other month (if <i>Repeat Type</i> is set to <i>Monthly</i>), etc.
+
+
+###############################################
+# Page: help_import.php
+#
+Import: インポート
+Palm Desktop: Palm デスクトップ
+#
+# << MISSING >>
+# This form will allow you to import entries from the Palm Desktop Datebook.:
+#
+# << MISSING >>
+# It should be located in your Palm directory in <tt>datebook/datebook.dat</tt> in a subdirectory named by your username.:
+The following entries will not be imported: 次のエントリはインポートされなかったでしょう
+Entries older than the current date: エントリは現在の期日より古いです
+#
+# << MISSING >>
+# Entries created in the Palm Desktop that have not been HotSync'd:
+#
+# << MISSING >>
+# Anything imported from Palm will be overwritten during the next import (unless the event date has passed).:
+#
+# << MISSING >>
+# Therefore, updates should be made in the Palm Desktop.:
+vCal: vCal
+This form will import vCalendar (.vcs) 1.0 events: このフォームは vCalendar (.vcs) 1.0 イベントとしてインポートするでしょう
+The following formats have been tested: 次の形式がテストされました。
+Palm Desktop 4: Palm デスクトップ 4
+Lotus Organizer 6: Lotus オーガナイザー 6
+Microsoft Outlook 2002: Microsoft Outlook 2002
+iCalendar: iCalendar
+This form will import iCalendar (.ics) events: このフォームは iCalendar (.ics) イベントをインポートするでしょう
+#
+# << MISSING >>
+# Enabling <b>Overwrite Prior Import</b> will cause events imported previously that used the same UID as an event from the new import file to be marked as deleted.  This should allow an updated iCalendar file to be imported without creating duplicates.:
+
+
+###############################################
+# Page: help_index.php
+#
+Help Index: ヘルプ索引
+
+
+###############################################
+# Page: help_layers.php
+#
+#
+# << MISSING >>
+# Layers are useful for displaying other users' events in your own calendar.  You can specifiy the user and the color the events will be displayed in.:
+Add/Edit/Delete: 追加/編集/削除
+#
+# << MISSING >>
+# Clicking the Edit Layers link in the admin section at the bottom of the page will allow you to add/edit/delete layers.:
+#
+# << MISSING >>
+# Specifies the user that you would like to see displayed in your calendar.:
+#
+# << MISSING >>
+# The text color of the new layer that will be displayed in your calendar.:
+#
+# << MISSING >>
+# If checked, events that are duplicates of your events will be shown.:
+#
+Disabling: 無効にする
+#
+# << MISSING >>
+# Press the Disable Layers link in the admin section at the bottom of the page to turn off layers.:
+#
+Enabling: 有効にする
+#
+# << MISSING >>
+# Press the Enable Layers link in the admin section at the bottom of the page to turn on layers.:
+
+
+###############################################
+# Page: help_pref.php
+#
+Default Category: デフォルトカテゴリ
+default-category-help: 新規イベントがデフォルトになるべきカテゴリを指定します。
+#
+# << MISSING >>
+# allow-remote-subscriptions-help:
+# English text: Specifies if remote users can subscribe to your calendar, allowing them to see your events in a iCal-enabled application (such as Apple's iCal or Mozilla Calendar).
+#
+URL: URL
+#
+# << MISSING >>
+# remote-subscriptions-url-help:
+# English text: Displays the URL remote users should use to subscribe to your calendar.
+#
+
+
+###############################################
+# Page: import.php
+#
+Disabled: 使用不可
+Import format: インポート形式
+Exclude private records: 除外するプライベートレコード
+#
+# << MISSING >>
+# Overwrite Prior Import:
+
+
+###############################################
+# Page: import_handler.php
+#
+Import Results: インポート結果
+Events successfully imported: イベントのインポートに成功しました
+#
+# << MISSING >>
+# Events from prior import marked as deleted:
+Conflicting events: イベント衝突中
+Errors: エラー
+#
+# << MISSING >>
+# There was an error parsing the import file or no events were returned:
+The import file contained no data: インポートファイルの中身がありません。
+View this entry: このエントリーを見る
+Event Imported: イベントをインポートしました。
+
+
+###############################################
+# Page: layers.php
+#
+Layers are currently: 現在のレイヤー
+Enabled: 使用可能
+Disable Layers: レイヤーを使用不可にする
+Enable Layers: レイヤーを使用可能にする
+to modify the layers settings for the: で右のレイヤー設定を変更する:
+#
+# << MISSING >>
+# calendar:
+Add layer: レイヤーを追加
+Layer: レイヤー
+Edit layer: レイヤーを編集
+
+
+###############################################
+# Page: list_unapproved.php
+#
+Approve/Confirm: 許可/確認
+Approve this entry?: エントリーを許可しますか?
+Reject: 拒否
+Reject this entry?: エントリーを拒否しますか?
+No unapproved events for: 未承認イベントはありません
+Unapproved Events: 未承認イベント
+
+
+###############################################
+# Page: login.php
+#
+Invalid login: ログインは無効です
+You must enter a login and password: ユーザー名とパスワードを入力してください
+Save login via cookies so I don't have to login next time: 次回からログインしなくても良いように、ユーザー情報をクッキーにセーブする
+Login: ログイン
+Access public calendar: 公開カレンダーアクセス
+cookies-note: <b>注意:</b> このアプリケーションはクッキーが有効でなければ正常に動作しません。
+
+
+###############################################
+# Page: month.php
+#
+Sun: 日
+Mon: 月
+Tue: 火
+Wed: 水
+Thu: 木
+Fri: 金
+Sat: 土
+
+
+###############################################
+# Page: nonusers.php
+#
+NONUSER_PREFIX not set: 非ユーザー接頭語は未設定
+Add New NonUser Calendar: 非ユーザーのカレンダーに新規追加
+
+
+###############################################
+# Page: nonusers_handler.php
+#
+Calendar ID: カレンダー ID
+word characters only: 文字は英数字とアンダーラインのみを含むことが出来ます。
+
+
+###############################################
+# Page: pref.php
+#
+Save Preferences: 設定を保存
+to modify the preferences for the Public Access calendar: すると公開カレンダーの設定が変更できます
+tz-help: サーバーの時間から現地の時間までの時間を調節すべきかどうかを指定します。
+Timezone Offset: タイムゾーン時差
+Add N hours to: +N 時間
+Subtract N hours from: -N 時間
+same as: 同じ
+server time: サーバーとの時差
+When I am the boss: 上司の場合
+Email me event notification: イベント通知を自分にメールする
+I want to approve events: イベントの認証をしたい
+
+
+###############################################
+# Page: purge.php
+#
+Purging events for: 右ユーザーのイベントを消去しています
+Finished: 完了しました
+All: 全て
+Delete all events before: 右の日付以前のイベントをすべて削除する
+Check box to delete <b>ALL</b> events for a user: 1 ユーザーのイベントを<b>すべて</b>削除する場合はチェックしてください
+Are you sure you want to delete events for: 右ユーザーのイベントをすべて削除して良いですか?:
+Records deleted from: レコードを削除しました 対象:
+
+
+###############################################
+# Page: reject_entry.php
+#
+An appointment has been rejected by: 予定が以下の人によって拒否されました。
+
+
+###############################################
+# Page: report.php
+#
+Untimed event: 非時限イベント
+Private: プライベート
+Low: 低
+Medium: 中
+High: 高
+Waiting for approval: 承認待ち
+Deleted: 削除済
+Rejected: 拒否済
+Approved: 承認済み
+Unknown: 未知
+to manage reports for the Public Access calendar: すると公開アクセスカレンダー用レポートを管理します
+Add new report: 新規レポート追加
+cont.: 続く
+Manage Reports: レポート管理
+
+
+###############################################
+# Page: search.php
+#
+Search: 検索
+Keywords: キーワード
+Advanced Search: 高度な検索
+
+
+###############################################
+# Page: search_handler.php
+#
+You must enter one or more search keywords: キーワードを 1 つ以上入力してください。
+Search Results: 検索結果
+match found: 個の該当項目が見つかりました。
+matches found: 個の該当項目が見つかりました。
+No matches found: 該当項目が見つかりませんでした。
+
+
+###############################################
+# Page: select_user.php
+#
+View Another User's Calendar: 他のユーザーのカレンダーを見る
+Go: 表示
+
+
+###############################################
+# Page: set_entry_cat.php
+#
+#
+# << MISSING >>
+# You have not added any categories:
+Set Category: カテゴリ設定
+
+
+###############################################
+# Page: users.php
+#
+Add New User: 新しいユーザーを追加
+denotes administrative user: 管理ユーザーを表示
+
+
+###############################################
+# Page: usersel.php
+#
+Reset: リセット
+Remove: 削除
+Ok: OK
+
+
+###############################################
+# Page: view_entry.php
+#
+every: 毎
+2nd: 第2
+3rd: 第3
+4th: 第4
+5th: 第5
+1st: 第1
+last: 最終
+by date: 日指定
+Confidential: 非公開
+Description: 説明
+Status: 状態
+Public: 公開
+days: 日
+day: 日
+hours: 時間
+minute: 分
+before event: 前に通知する
+External User: 外部ユーザー
+Approve/Confirm entry: 許可/エントリー確認
+Reject entry: エントリーを拒否
+Set category: カテゴリ設定
+Edit repeating entry for all dates: 繰返しエントリーをすべて編集する
+Edit entry for this date: エントリーを今回分だけ編集する
+Delete repeating event for all dates: 繰返しエントリーをすべて削除する
+This will delete this entry for all users.: これによってこのエントリーをすべてのユーザから削除します
+Delete entry only for this date: エントリーを今回分だけ削除する
+Edit entry: エントリーの編集
+Delete entry: エントリーを削除
+Copy entry: エントリーをコピー
+This will delete the entry from your calendar.: このエントリーをあなたのカレンダーから削除します。
+Add to My Calendar: マイカレンダーに追加
+Do you want to add this entry to your calendar?: このエントリーをあなたのカレンダーに追加しますか?
+This will add the entry to your calendar.: これによってこのエントリーをあなたのカレンダーに追加します
+Email all participants: 参加者全員にメール送信
+Show activity log: 活動ログを表示
+Hide activity log: 活動ログを隠す
+Export this entry to: 右の形式にエクスポート
+
+
+###############################################
+# Page: views.php
+#
+Add New View: 新規ビューの追加
+
+
+###############################################
+# Page: views_edit.php
+#
+Unnamed View: 名称未設定ビュー
+Add View: ビューの追加
+Edit View: ビューの編集
+View Name: ビュー名
+View Type: ビュータイプ
+Week (Users horizontal): 週(ユーザー水平)
+Week (Users vertical): 週(ユーザー垂直)
+Week (Timebar): 週(タイムバー)
+Month (Timebar): 月(タイムバー)
+Month (side by side): 月(ユーザーを横に並べる)
+Month (on same calendar): 月(同じカレンダー上にユーザー混在)
+preview: プレビュー
+
+
+###############################################
+# Page: views_edit_handler.php
+#
+You must specify a view name: ビュー名を指定しなければなりません。
+
+
+###############################################
+# Page: week_details.php
+#
+New Entry: 新規エントリー
+am: AM
+pm: PM
+
+
+###############################################
+# Page: edit_entry.php
+#
+Edit Entry: エントリーを編集
+Add Entry: エントリーを追加
+Details: 詳細
+Scheduling: スケジュール
+Repeat: 繰り返し
+category-help: イベントのカテゴリを指定します。
+Timed event: 時限イベント
+#
+# << MISSING >>
+# external-participants-help:
+# English text: Specifies a list of participants for the event that are not calendar users.  The users should be listed one per line and can include an email address.  If an email address is specified, the user is eligible to receive notications and reminders.
+#
+External Participants: 外部参加者
+Daily: 毎日
+Weekly: 毎週
+Monthly: 毎月
+by day: 第 1 月曜など
+by day (from end): 最終月曜など(月末から)
+Yearly: 毎年
+Use end date: 終了日を使用
+Tuesday: 火曜日
+Wednesday: 水曜日
+Thursday: 木曜日
+Friday: 金曜日
+Saturday: 土曜日
+You are not authorized to edit this entry: このエントリーの編集は許可されていません。
+
+
+###############################################
+# Page: includes/functions.php
+#
+This event is confidential: このイベントは非公開です
+exceeds limit of XXX events per day: 1 日のイベント数の制限である XXX 個を超えました。
+You have XXX unapproved events: XXX 個の未承認イベントがあります。
+January: 1月
+February: 2月
+March: 3月
+April: 4月
+May_: 5月
+June: 6月
+July: 7月
+August: 8月
+September: 9月
+October: 10月
+November: 11月
+Jan: 1月
+Feb: 2月
+Mar: 3月
+Apr: 4月
+May: 5月
+Jun: 6月
+Jul: 7月
+Aug: 8月
+Sep: 9月
+Oct: 10月
+Nov: 11月
+Dec: 12月
+
+
+###############################################
+# Page: includes/help_trailer.php
+#
+Go to: 移動
+
+
+###############################################
+# Page: includes/site_extras.php
+#
+Send Reminder: リマインダー送信
+
+
+###############################################
+# Page: includes/trailer.php
+#
+My Calendar: マイカレンダー
+Back to My Calendar: マイカレンダーに戻る
+Another User's Calendar: 他ユーザーのカレンダー
+Add New Entry: 新規エントリー追加
+Logout: ログアウト
+Manage calendar of: カレンダー管理:
+
+
+###############################################
+# Page: includes/user-nis.php
+#
+incorrect password: パスワードが正しくありません。
+no such user: ユーザーが居ません。
+Invalid user login: 無効なユーザーのログイン
+
+
+###############################################
+# Page: includes/config.php
+#
+English: 英語
+Basque: Basque
+Bulgarian: ブラジル語
+Catalan: カタロニア語
+Chinese (Traditonal/Big5): 中国語 (Traditonal/Big5)
+Chinese (Simplified/GB2312): 中国語 (Simplified/GB2312)
+Czech: チェコ語
+Danish: デンマーク語
+Dutch: オランダ語
+Estonian: エストニア語
+Finnish: フィンランド語
+French: フランス語
+Galician: ガリシア語
+German: ドイツ語
+Holo (Taiwanese): Holo(台湾語)
+Hungarian: ハンガリー語
+Icelandic: アイスランド語
+Italian: イタリア語
+Japanese: 日本語
+Korean: 韓国語
+Norwegian: ノルウェー語
+Polish: ポーランド語
+Portuguese: ポルトガル語
+Portuguese/Brazil: ポルトガル語/ブラジル
+Romanian: ルーマニア語
+Russian: ロシア語
+Spanish: スペイン語
+Swedish: スウェーデン語
+Turkish: トルコ語
+
+
+###############################################
+# Page: includes/js/admin.php
+#
+Server URL is required: サーバー URL が必須です。
+Server URL must end with '/': サーバー URL は「/」で終わらなければいけません。
+Invalid work hours: 無効な勤務時間です。
+Invalid color for document background: 書類の背景色が無効です。
+Invalid color for document title: 書類のタイトル色が無効です。
+Invalid color for table cell background: 書類のテーブル背景色が無効です。
+Invalid color for table grid: テーブルグリッドの色が無効です。
+Invalid color for table header background: テーブルヘッダーの色が無効です。
+Invalid color for table text background: テーブルテキストの背景色が無効です。
+Invalid color for event popup background: イベントポップアップの背景色が無効です。
+Invalid color for event popup text: イベントポップアップの色が無効です。
+Invalid color for table cell background for today: 今日のテーブルセルの背景色が無効です。
+Color format should be '#RRGGBB': 色は '#RRGGBB'のフォーマットで設定してください。
+
+
+###############################################
+# Page: includes/js/edit_entry.php
+#
+You have not entered a Brief Description: 簡単な説明を入力していません。
+You have not entered a valid time of day: 有効な時間を入力していません。
+The time you have entered begins before your preferred work hours.  Is this correct?: 記入した時間は通常勤務時間帯よりも早いですが良いですか?
+
+
+###############################################
+# Page: includes/js/edit_layer.php
+#
+Invalid color: 無効色
+
+
+###############################################
+# Page: tools/send_reminders.php
+#
+This is a reminder for the event detailed below.: これは以下のイベントのリマインダーです
+Reminder: リマインダー

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Japanese.txt
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Japanese.txt	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Japanese.txt	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,1176 @@
+# Use this as a starting point to translate this application into
+# another language.  The format is "English text: translated text"
+# There cannot be a ":" in the English text.
+# Translated by:
+# Makoto Hamanaka <VYA04230 at nifty.com>
+# Tadashi Jokagi <elf2000 at users.sourceforge.net>
+# Last update: 05 Dec 2004
+# Translation last updated on 02-14-2005
+
+
+###############################################
+# Specify a charset (will be sent within meta tag for each page)
+#
+charset: SHIFT_JIS
+
+
+###############################################
+# Page: activity_log.php
+#
+Activity Log: Šˆ“®ƒƒO
+Admin: ŠÇ—
+User: ƒ†[ƒU
+Calendar: ƒJƒŒƒ“ƒ_[
+Date: “ú•t
+Time: ŽžŠÔ
+Event: ƒCƒxƒ“ƒg
+Action: ‘€ì
+Event created: ƒCƒxƒ“ƒg‚ðì¬‚µ‚Ü‚µ‚½
+Event approved: ƒCƒxƒ“ƒg‚ð³”F‚µ‚Ü‚µ‚½
+Event rejected: ƒCƒxƒ“ƒg‚ð‹‘”Û‚µ‚Ü‚µ‚½
+Event updated: ƒCƒxƒ“ƒg‚ðXV‚µ‚Ü‚µ‚½
+Event deleted: ƒCƒxƒ“ƒg‚ðíœ‚µ‚Ü‚µ‚½
+Notification sent: ’Ê’m‘—M
+Reminder sent: ƒŠƒ}ƒCƒ“ƒ_[‘—M
+Database error: ƒf[ƒ^ƒx[ƒXƒGƒ‰[
+Previous: ‘O
+Events: ƒCƒxƒ“ƒg
+Next: ŽŸ
+
+
+###############################################
+# Page: add_entry.php
+#
+Invalid entry id: ƒGƒ“ƒgƒŠ[ ID ‚ª–³Œø‚Å‚·
+This is a private event and may not be added to your calendar.: ‚±‚ê‚̓vƒ‰ƒCƒx[ƒg‚ȃCƒxƒ“ƒg‚Ȃ̂ŁA‚ ‚È‚½‚̃JƒŒƒ“ƒ_[‚ւ̒ljÁ‚ª‚Å‚«‚È‚¢‚±‚Æ‚ª‚ ‚è‚Ü‚·
+Error adding event: ƒCƒxƒ“ƒg’ljÁƒGƒ‰[
+
+
+###############################################
+# Page: admin.php
+#
+System Settings: ƒVƒXƒeƒ€Ý’è
+Help: ƒwƒ‹ƒv
+You are not authorized: Œ ŒÀ‚ð—^‚¦‚ç‚ê‚Ä‚¢‚Ü‚¹‚ñ
+Note: ’ˆÓ
+Your user preferences: [ ‚ ‚È‚½‚̃†[ƒU[Ý’è ]
+may be affecting the appearance of this page.: ‚́A‚±‚̂؁[ƒW‚ÌŒ©‚½–ڂɉe‹¿‚ð—^‚¦‚é‚©‚à‚µ‚ê‚Ü‚¹‚ñ
+Click here: [ ‚±‚±‚ðƒNƒŠƒbƒN ]
+to not use your user preferences when viewing this page: ‚·‚é‚Æ‚±‚̃y[ƒW‚ðŒ©‚é‚Æ‚«‚É‚ ‚È‚½‚̃†[ƒU[Ý’è‚ðŽg‚í‚È‚¢‚悤‚É‚µ‚Ü‚·
+are being ignored while viewing this page.: ‚́A‚±‚̃y[ƒW‚Å‚Í–³Ž‹‚³‚ê‚Ä‚¢‚Ü‚·
+to load your user preferences when viewing this page: ‚·‚é‚Æ‚±‚̃y[ƒW‚ðŒ©‚é‚Æ‚«‚É‚ ‚È‚½‚̃†[ƒU[Ý’è‚ð“ǂݍž‚ނ悤‚É‚µ‚Ü‚·
+Save: •Û‘¶
+Settings: Ý’è
+Public Access: ŒöŠJƒAƒNƒZƒX
+Groups: ƒOƒ‹[ƒv
+NonUser Calendars: ‘¼‚̃†[ƒU[‚̃JƒŒƒ“ƒ_[
+Other: ‚»‚Ì‘¼
+Email: “dŽqƒ[ƒ‹
+colors-help: All colors should be specified in "#RRGGBB" hexadecimal format where "RR" is the hex value for red, "GG" is the hex value for green, and "BB" is the hex value for blue.
+Colors: F
+#
+# << MISSING >>
+# app-name-help:
+# English text: Specifies the name of the application that will appear in the browser title bar for all pages and on the login page.  The value you specify here will be looked up in the translations file allowing you to provide different titles for different languages.
+#
+Application Name: ƒAƒvƒŠƒP[ƒVƒ‡ƒ“–¼
+server-url-help: ƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚̃x[ƒX URL ‚ðŽw’肵‚Ü‚·B‚±‚ê‚̓Šƒ}ƒCƒ“ƒ_[‚Æ’Ê’m‚Ì“dŽqƒ[ƒ‹‚Ì‘—M‚É‚àŠÜ‚Ü‚ê‚Ü‚·B
+Server URL: ƒT[ƒo[ URL
+language-help: Žg—p‚·‚錾Œê‚ðŽw’肵‚Ü‚·B
+Language: Œ¾Œê
+Your browser default language is: ‚ ‚È‚½‚̃uƒ‰ƒEƒU‚̃fƒtƒHƒ‹ƒgŒ¾Œê
+fonts-help: Žg—p‚·‚éƒVƒXƒeƒ€ƒtƒHƒ“ƒg‚̈ꗗ‚ðŽw’肵‚Ü‚·("Arial, Helvetica"‚̂悤‚É)
+Fonts: ƒtƒHƒ“ƒg
+#
+# << MISSING >>
+# custom-script-help:
+# English text: Allows entry of custom Javascript or stylesheet text that will be inserted into the HTML "head" section of every page.
+#
+Custom script/stylesheet: ƒJƒXƒ^ƒ€ƒXƒNƒŠƒvƒg^ƒXƒ^ƒCƒ‹ƒV[ƒg
+Yes: ‚Í‚¢
+No: ‚¢‚¢‚¦
+Edit: •ÒW
+#
+# << MISSING >>
+# custom-header-help:
+# English text: Allows a custom HTML snippet to be included in the top of every page.
+#
+Custom header: ƒJƒXƒ^ƒ€ƒwƒbƒ_(‘O’uƒeƒLƒXƒg)
+#
+# << MISSING >>
+# custom-trailer-help:
+# English text: Allows a custom HTML snippet to be included at the end of every page.
+#
+Custom trailer: ƒJƒXƒ^ƒ€ƒtƒbƒ^(Œã’uƒeƒLƒXƒg)
+preferred-view-help: Specifies the default view (Day, Week, Month, or Year).
+Preferred view: —Dæ‚·‚éƒrƒ…[
+Day: “ú
+Week: T
+Month: ŒŽ
+Year: ”N
+display-weekends-help: uTvƒrƒ…[‚ɏT––‚ðŠÜ‚Ý‚Ü‚·B
+Display weekends in week view: uTvƒrƒ…[‚ŏT––‚ð•\Ž¦‚·‚é
+yearly-shows-events-help: u”Nvƒrƒ…[‚ŁA‹­’²ƒtƒHƒ“ƒg‚ŃCƒxƒ“ƒg‚ðŠÜ‚Þ“ú‚ð•\Ž¦‚µ‚Ü‚·B
+Display days with events in bold in month and year views: u”Nvƒrƒ…[‚ƁuŒŽvƒrƒ…[‚ŃCƒxƒ“ƒg“ú‚ð‹­’²•\Ž¦‚·‚é
+display-desc-print-day-help: ˆóü—p‚́u“úvƒrƒ…[‚ŃCƒxƒ“ƒg‚Ìà–¾‚ðŠÜ‚Ý‚Ü‚·B
+Display description in printer day view: ˆóü—p‚́u“úvƒrƒ…[‚Åà–¾‚ð•\Ž¦‚·‚é
+date-format-help: —Dæ‚·‚é“ú•t‘Ž®‚ðŽw’肵‚Ü‚·B
+Date format: “ú•t‚̏‘Ž®
+December: 12ŒŽ
+time-format-help: Žg—p‚·‚鎞ŠÔ‚̏‘Ž®‚ðŽw’肵‚Ü‚·: <br /><i>12 Žž‰º:</i> —Ⴆ‚ÎŽžŠÔ•\Ž¦‚́u3amvu 8:30pmv‚È‚Ç‚Å‚·B<br /><i>24 ŽžŠÔ:</i> —Ⴆ‚ÎŽžŠÔ•\Ž¦‚́u300vu2030v‚È‚Ç‚Å‚·B
+Time format: ŽžŠÔ‚̏‘Ž®
+12 hour: 12ŽžŠÔ
+24 hour: 24ŽžŠÔ
+#
+# << MISSING >>
+# time-interval-help:
+# English text: Specifies how long the time blocks in the week view and day view will be.
+#
+Time interval: ŽžŠÔŠÔŠu
+hour: ŽžŠÔ
+minutes: •ª
+#
+# << MISSING >>
+# auto-refresh-help:
+# English text: When enabled, the day view, week view, month view, and list aunapproved pages will all automatically refresh themselves periodically.
+#
+Auto-refresh calendars: ƒJƒŒƒ“ƒ_[‚ÌŽ©“®XV
+auto-refresh-time-help: Ž©“®XV‚ð—LŒø‚É‚µ‚½ê‡A‚±‚ê‚ÍŽ©“®XV‚ÌŽžŠÔ‚ðŽw’肵‚Ü‚·B
+Auto-refresh time: ŽžŠÔ‚ÌŽ©“®XV
+#
+# << MISSING >>
+# require-approvals-help:
+# English text: When enabled, a user must approve an event before it is displayed on their calendar (unless Display unapproved is enabled).  Note setting this to "No" will not turn off approvals for the Public Access calendar (if the Public Access calendar is enabled).
+#
+Require event approvals: ƒCƒxƒ“ƒg‚̏³”F‚ð•K—v‚Æ‚·‚é
+display-unapproved-help: Specifies whether unapproved events are displayed in your calendar.<br /> If set to "Yes", then unapproved events will be displayed in your calendar (in a different text color).<br /> If set to "No", then unapproved events must be approved before they are displayed in your calendar.
+Display unapproved: –¢³”FƒCƒxƒ“ƒg‚ð•\Ž¦‚·‚é
+display-week-number-help: Specifies whether the week number (1-52) should be displayed in the month view and the week view.
+Display week number: T”ԍ†‚ð•\Ž¦‚·‚é
+display-week-starts-on: Specifies whether the week starts on Sunday or Monday.  If Monday is specified, then week numbers will be ISO week numbers.
+Week starts on: T‚ÌŽn‚Ü‚è
+Sunday: “ú—j“ú
+Monday: ŒŽ—j“ú
+work-hours-help: u“úvƒrƒ…[‚Ì•\Ž¦‚Å‚ÌŽžŠÔ”͈͂ðŽw’肵‚Ü‚·B
+Work hours: ‹Î–±ŽžŠÔ
+From: .
+to: `
+#
+# << MISSING >>
+# disable-priority-field-help:
+# English text: Selecting "Yes" will remove the "Priority" field from event information pages, providing a simpler interface for novices.
+#
+Disable Priority field: —Dæ“xƒtƒB[ƒ‹ƒh–³Œø
+#
+# << MISSING >>
+# disable-access-field-help:
+# English text: Selecting "Yes" will remove the "Access" field from event information pages, providing a simpler interface for novices.
+#
+Disable Access field: ƒAƒNƒZƒXƒtƒB[ƒ‹ƒh–³Œø
+#
+# << MISSING >>
+# disable-participants-field-help:
+# English text: Selecting "Yes" will remove the "Particpants" field from event information pages, preventing users from adding other users to their events.  If you enable this option, you may want to also disable the "Allow viewing other user's calendars" field also.
+#
+Disable Participants field: ŽQ‰ÁŽÒƒtƒB[ƒ‹ƒh–³Œø
+disable-repeating-field-help:u‚Í‚¢v‚ð‘I‘ð‚µ‚½ê‡AƒCƒxƒ“ƒg‚̒ljÁŽž‚ɁuŒJ‚è•Ô‚µvƒtƒB[ƒ‹ƒh‚ðíœ‚·‚é‚Å‚µ‚傤B
+Disable Repeating field: ŒJ‚è•Ô‚µƒtƒB[ƒ‹ƒh–³Œø
+#
+# << MISSING >>
+# popup-includes-siteextras-help:
+# English text: If enabled, allow custom event fields setup in the site_extras.php file will be displayed in event popups.
+#
+Display Site Extras in popup: ŠO•”ƒTƒCƒg‚̓|ƒbƒvƒAƒbƒv•\Ž¦
+#
+# << MISSING >>
+# allow-html-description-help:
+# English text: If enabled, users can enter HTML in the event description field.  If not enabled, the HTML tags will be escaped so as to appear as plain text.  Warning: Enabling this feature will allow users to reference images on other websites.
+#
+Allow HTML in Description: à–¾‚Å HTML ‚ð‹–‰Â
+ allow-view-other-help: ‚ ‚郆[ƒU[‚ª‘¼‚̃†[ƒU[‚̃JƒŒƒ“ƒ_[‚ðŒ©‚Ä‚à‚æ‚¢‚©‚Ç‚¤‚©Žw’肵‚Ü‚·B
+Allow viewing other user's calendars: ‘¼‚̃†[ƒU[‚̃JƒŒƒ“ƒ_[‚ðŒ©‚é‚±‚Æ‚ð‹–‰Â
+#
+# << MISSING >>
+# allow-view-add-help:
+# English text: A '+' icon will be included in views, allowing users to quickly add events to other users' calendars.
+#
+#
+# << MISSING >>
+# Include add event link in views:
+#
+# << MISSING >>
+# remember-last-login-help:
+# English text: When enabled, the user's login will be filled in for them on the login page (but not the password), and the user's preferences will be loaded (including their preferred colors and language selection).
+#
+Remember last login: ÅIƒƒOƒCƒ“‚ðŠo‚¦‚é
+#
+# << MISSING >>
+# conflict-check-help:
+# English text: Check for event conflicts (two events scheduled for the same time for the same person).  If you set this to "Yes", you will still be able to schedule two events at the same time after confirming a warning. If you set this to "No", no checking for conflicts will be done.  You probably want to set this to "Yes", so conflict checking occurs.
+#
+Check for event conflicts: ƒCƒxƒ“ƒgÕ“˂𒲂ׂé
+#
+# << MISSING >>
+# conflict-months-help:
+# English text: If conflict checking is in place ("Check for event conflicts" is set to "No"), this specifies how many months into the future we should check for conflicts.  If you find adding events is taking a long time to process, reduce this number.
+#
+#
+# << MISSING >>
+# Conflict checking months:
+#
+# << MISSING >>
+# conflict-check-override-help:
+# English text: Allows users to override event conflicts and schedule two or more events for the same time.
+#
+Allow users to override conflicts: ƒ†[ƒU[‚̏Փ˂̏㏑‚«‚ð‹–‰Â
+limit-appts-help: ‚ЂƂè‚̃†[ƒU[‚ª”CˆÓ‚Ì 1 “ú‚·‚邪‚Å‚«‚é—\–ñ”‚ðƒVƒXƒeƒ€ŠÇ—ŽÒ‚ªƒVƒXƒeƒ€‘S‘Ì‚É“n‚鐧ŒÀ‚ðÝ’è‚·‚邱‚Æ‚ð‰Â”\‚É‚µ‚Ü‚·B
+Limit number of timed events per day: 1 “ú‚ ‚½‚è‚̐ݒè‚Å‚«‚éƒCƒxƒ“ƒg”‚̐§ŒÀ
+limit-appts-number-help: ƒ†[ƒU[‚ª 1 “ú‚ÅŽw’è‚Å‚«‚éAŽžŒÀƒCƒxƒ“ƒg‚̍ő吔‚ðŽw’肵‚Ü‚·B
+Maximum timed events per day: 1 “ú‚ ‚½‚è‚̐ݒè‚Å‚«‚éÅ‘åƒCƒxƒ“ƒg
+timed-evt-len-help: ŽžŒÀƒCƒxƒ“ƒg‚ðŒˆ’è‚·‚邽‚ß‚Ì“ü—Í•û–@‚ðŽw’肵‚Ü‚·B
+Specify timed event length by: ƒCƒxƒ“ƒgŽžŠÔ‚Ì’·‚³‚ÌŽw’è
+Duration: ŠúŠÔ
+End Time: I—¹ŽžŠÔ
+Plugins: ƒvƒ‰ƒOƒCƒ“
+plugins-enabled-help: ƒAƒvƒŠƒP[ƒVƒ‡ƒ“ƒvƒ‰ƒOƒCƒ“‚ð—LŒø‚É‚µ‚Ü‚·B
+Enable Plugins: ƒvƒ‰ƒOƒCƒ“—LŒø
+#
+# << MISSING >>
+# plugins-sort-key-help:
+# English text: Specifies a sort key for the plugin.  This allows the plugins to appear in a specific order.
+#
+Plugin: ƒvƒ‰ƒOƒCƒ“
+#
+# << MISSING >>
+# allow-public-access-help:
+# English text: When enabled, the calendar can be used as a read-only public calendar that does not require users to login.
+#
+Allow public access: ŒöŠJƒAƒNƒZƒX‹–‰Â
+#
+# << MISSING >>
+# public-access-default-visible:
+# English text: Events from the public calendar will automatically appear on all users' calendars
+#
+Public access visible by default: ŒöŠJƒAƒNƒZƒX‚̓fƒtƒHƒ‹ƒg‚ÅŒ©‚¦‚é
+#
+# << MISSING >>
+# public-access-default-selected:
+# English text: When adding a new event, the public user will be selected by default as a participant.
+#
+Public access is default participant: ŒöŠJƒAƒNƒZƒX‚̓fƒtƒHƒ‹ƒgŽQ‰ÁŽÒ
+#
+# << MISSING >>
+# public-access-view-others-help:
+# English text: When access the system with public access, specifies whether the user can view the calendar of another calendar user.
+#
+Public access can view other users: ŒöŠJƒAƒNƒZƒX‚Í‘¼‚̃†[ƒU[‚ðŒ©‚é‚±‚Æ‚ª‚Å‚«‚é
+#
+# << MISSING >>
+# public-access-can-add-help:
+# English text: When enabled, users that access the system through Public Access will be able to add new events, but they will not show up in the calendar until an administrator approves the new event.
+#
+Public access can add events: ŒöŠJƒAƒNƒZƒX‚̓Cƒxƒ“ƒg’ljÁ‚Å‚«‚é
+#
+# << MISSING >>
+# public-access-add-requires-approval-help:
+# English text: Specifies whether events added via the public access account require approval before being displayed.
+#
+Public access new events require approval: ŒöŠJƒAƒNƒZƒX‚̐V‹KƒCƒxƒ“ƒg‚Í”FØ‚ð•K—v‚Æ‚·‚é
+#
+# << MISSING >>
+# public-access-sees-participants-help:
+# English text: If enabled, users accessing the calendar from the public account will be able to see event participants if they view details of an event.
+#
+Public access can view participants: ŒöŠJƒAƒNƒZƒX‚ÍŽQ‰ÁŽÒ‚ðŒ©‚é‚±‚Æ‚ª‚Å‚«‚é
+groups-enabled-help: ƒOƒ‹[ƒvƒTƒ|[ƒg‚ð—LŒø‚É‚µ‚½‚çAƒ†[ƒU[‚̓Oƒ‹[ƒv‚ц[ƒU[‚ð‘I‘ð‚·‚é‚±‚Æ‚ð‹–‰Â‚µ‚Ü‚·B
+Groups enabled: ƒOƒ‹[ƒv—LŒø
+#
+# << MISSING >>
+# user-sees-his-group-help:
+# English text: If enabled, users will not see calendar users that are not in at least one of their groups.
+#
+User sees only his groups: ƒ†[ƒU[‚ÍŽ©•ª‚̃Oƒ‹[ƒv‚Ì‚Ý‚ðŒ©‚é
+#
+# << MISSING >>
+# nonuser-enabled-help:
+# English text: If enabled, admins will have the option to add nonuser calendars
+#
+Nonuser enabled: ”ñƒ†[ƒU[—LŒø
+#
+# << MISSING >>
+# nonuser-list-help:
+# English text: Where to display the nonuser calendars in the participant list
+#
+Nonuser list: ”ñƒ†[ƒU[ˆê——
+Top: ã
+Bottom: ‰º
+#
+# << MISSING >>
+# reports-enabled-help:
+# English text: If enabled, users will see a "Reports" section at the bottom of each page and will be allowed to create custom reports.  Additionally, admin users can create global reports that will appear at the bottom of all users' pages.
+#
+Reports enabled: ƒŒƒ|[ƒg—LŒø
+#
+# << MISSING >>
+# subscriptions-enabled-help:
+# English text: Specifies if remote users can subscribe to a WebCalendar user's calendar, allowing them to see the WebCalendar user's events in their iCal-enabled application (such as Apple's iCal or Mozilla Calendar).
+#
+Allow remote subscriptions: ƒŠƒ‚[ƒg\‚µž‚Ý‚ð‹–‰Â
+categories-enabled-help: —LŒø‚É‚·‚é‚ƃCƒxƒ“ƒgƒJƒeƒSƒŠ‚ðƒTƒ|[ƒg‚µ‚Ü‚·B
+Categories enabled: ƒJƒeƒSƒŠ—LŒø
+#
+# << MISSING >>
+# allow-external-users-help:
+# English text: Specifies whether a non-calendar user can be added to an event.  This allows non-calendar users to be listed as event participants.
+#
+Allow external users: ŠO•”ƒ†[ƒU[‹–‰Â
+#
+# << MISSING >>
+# external-can-receive-notification-help:
+# English text: When external users are enabled and email usage is enabled, external users can receive email notifications when the event is added, updated or delete (if the external user's email address is provided).
+#
+External users can receive email notifications: ŠO•”ƒ†[ƒU[‚Í“dŽqƒ[ƒ‹’Ê’m‚ðŽó‚¯‚邱‚Æ‚ª‚Å‚«‚é
+#
+# << MISSING >>
+# external-can-receive-reminder-help:
+# English text: When external users are enabled and email usage is enabled, external users can receive email reminders (if the external user's email address is provided).
+#
+External users can receive email reminders: ŠO•”ƒ†[ƒU[‚Í“dŽqƒ[ƒ‹ƒŠƒ}ƒCƒ“ƒ_[‚ðŽó‚¯‚邱‚Æ‚ª‚Å‚«‚é
+email-enabled-help: ‚·‚ׂẴŠƒ}ƒCƒ“ƒ_[‚Æ’Ê’m‚Ì“dŽqƒ[ƒ‹‚𑗐M‚ðØ‚è‘Ö‚¦‚Ü‚·BƒT[ƒo[‚ª“KØ‚Ƀ[ƒ‹‚Ì‘—MÝ’肪‚³‚ê‚Ä‚¢‚È‚¢ê‡u‚¢‚¢‚¦v‚ɐݒ肵‚Ü‚·B
+Email enabled: “dŽqƒ[ƒ‹—LŒø
+email-default-sender: ƒŠƒ}ƒCƒ“ƒ_[‚𑗐M‚·‚éê‡‚É‘—MŽÒ‚Æ‚µ‚ÄŽw’è‚·‚é‚ׂ«“dŽqƒ[ƒ‹ƒAƒhƒŒƒX‚ðŽw’肵‚Ü‚·B
+Default sender address: ƒfƒtƒHƒ‹ƒg‘—MƒAƒhƒŒƒX
+Default user settings: ƒfƒtƒHƒ‹ƒgƒ†[ƒU[Ý’è
+email-event-reminders-help: ƒCƒxƒ“ƒg‚Ì‚¨’m‚点‚ð‘—‚é‚ׂ«‚©‚Ç‚¤‚©Žw’肵‚Ü‚·B
+Event reminders: ƒCƒxƒ“ƒgƒŠƒ}ƒCƒ“ƒ_[
+email-event-added: Specifies whether or not to send email notifications when an event is added to your calendar.
+Events added to my calendar: Ž©•ª‚̃JƒŒƒ“ƒ_[‚ɃCƒxƒ“ƒg‚ð’ljÁ
+email-event-updated: Specifies whether or not to send email notifications when an event is updated on your calendar.
+Events updated on my calendar: Ž©•ª‚̃JƒŒƒ“ƒ_[‚̃Cƒxƒ“ƒg‚ðXV
+email-event-deleted: Specifies whether or not to send email notifications when an event is removed from your calendar.
+Events removed from my calendar: Ž©•ª‚̃JƒŒƒ“ƒ_[‚©‚çƒCƒxƒ“ƒg‚ðíœ
+email-event-rejected: Specifies whether or not to send email notifications when a participant rejects an event that is on your calendar.
+Event rejected by participant: ŽQ‰ÁŽÒ‚̃Cƒxƒ“ƒg‹‘”Û
+Allow user to customize colors: ƒ†[ƒU[‚̐FÝ’è‚ð‹–‰Â‚·‚é
+Enable gradient images for background colors: ”wŒiF‚ɃOƒ‰ƒf[ƒVƒ‡ƒ“‰æ‘œ‚ð—LŒø‚É‚·‚é
+#
+# << MISSING >>
+# Not available:
+Document background: ‘—Þ‚Ì”wŒiF
+Select: ‘I‘ð
+Document title: ƒhƒLƒ…ƒƒ“ƒgƒ^ƒCƒgƒ‹
+Document text: ƒhƒLƒ…ƒƒ“ƒgƒeƒLƒXƒg
+Table grid color: ƒe[ƒuƒ‹‚̃OƒŠƒbƒh
+Table header background: ƒe[ƒuƒ‹ƒwƒbƒ_‚Ì”wŒi
+Table header text: ƒe[ƒuƒ‹ƒwƒbƒ_‚̃eƒLƒXƒg
+Table cell background: ƒe[ƒuƒ‹”wŒi
+Table cell background for current day: ¡“ú‚̃e[ƒuƒ‹ƒZƒ‹”wŒi
+Table cell background for weekends: T––‚̃e[ƒuƒ‹ƒZƒ‹”wŒi
+Event popup background: ƒCƒxƒ“ƒgƒ|ƒbƒvƒAƒbƒv‚Ì”wŒi
+Event popup text: ƒCƒxƒ“ƒgƒ|ƒbƒvƒAƒbƒv‚̃eƒLƒXƒg
+
+
+###############################################
+# Page: admin_handler.php
+#
+Error: ƒGƒ‰[
+The following error occurred: ˆÈ‰º‚̃Gƒ‰[‚ª‹N‚«‚Ü‚µ‚½
+
+
+###############################################
+# Page: adminhome.php
+#
+Preferences: ƒvƒŠƒtƒ@ƒŒƒ“ƒX
+Users: ƒ†[ƒU[
+Account: ƒAƒJƒEƒ“ƒg
+Assistants: ƒAƒVƒXƒ^ƒ“ƒg
+Categories: ƒJƒeƒSƒŠ
+Views: ƒrƒ…[
+Layers: ƒŒƒCƒ„[
+Reports: ƒŒƒ|[ƒg
+Delete Events: ƒCƒxƒ“ƒg‚̍폜
+Public Preferences: ŒöŠJÝ’è
+Unapproved Public Events: –¢³”F‚ÌŒöŠJƒCƒxƒ“ƒg
+Administrative Tools: ŠÇ—ƒc[ƒ‹
+
+
+###############################################
+# Page: approve_entry.php
+#
+Error approving event: ƒCƒxƒ“ƒg³”FƒGƒ‰[
+
+
+###############################################
+# Page: assistant_edit.php
+#
+Admin mode: ŠÇ—ƒ‚[ƒh
+Your assistants: ‚ ‚È‚½‚̃AƒVƒXƒ^ƒ“ƒg
+
+
+###############################################
+# Page: category.php
+#
+Add: ’ljÁ
+Category Name: ƒJƒeƒSƒŠ–¼
+Global: ‘S‘Ì
+Delete: íœ
+Are you sure you want to delete this entry?: ‚±‚̃Gƒ“ƒgƒŠ[‚ðíœ‚µ‚Ä‚à—Ç‚¢‚Å‚·‚©?
+Add New Category: V‹KƒJƒeƒSƒŠ’ljÁ
+
+
+###############################################
+# Page: day.php
+#
+Assistant mode: ƒAƒVƒXƒ^ƒ“ƒgƒ‚[ƒh
+Generate printer-friendly version: ˆóü—pƒo[ƒWƒ‡ƒ“‚ðì¬
+Printer Friendly: ˆóü—p•\Ž¦
+
+
+###############################################
+# Page: del_entry.php
+#
+Hello: ‚±‚ñ‚É‚¿‚́I
+An appointment has been canceled for you by: ‰Û‘èF
+The subject was: ‰Û‘è
+Notification: ‚¨’m‚点
+
+
+###############################################
+# Page: edit_entry_handler.php
+#
+The following conflicts with the suggested time: ˆÈ‰º‚ª‹L“ü‚µ‚½ŽžŠÔ‚Əd‚È‚Á‚Ä‚¢‚Ü‚·
+Unnamed Event: –¼Ì–¢Ý’èƒCƒxƒ“ƒg
+The description is: Ú×:
+Title: WebCalendar
+A new appointment has been made for you by: V‚µ‚¢—\’肪ˆÈ‰º‚̐l‚É‚æ‚Á‚ĒljÁ‚³‚ê‚Ü‚µ‚½F
+An appointment has been updated by: —\’肪ˆÈ‰º‚̐l‚É‚æ‚Á‚ĕҏW‚³‚ê‚Ü‚µ‚½F
+The subject is: ‰Û‘èF
+Please look on: ŽQÆ‚µ‚Ä‚­‚¾‚³‚¢
+to accept or reject this appointment: ‚±‚Ì—\’è‚ðŽó‚¯“ü‚ê‚é‚©Žó‚¯“ü‚ê‚È‚¢‚©‚·‚é
+to view this appointment: —\’è‚ðŒ©‚é
+Scheduling Conflict: ƒXƒPƒWƒ…[ƒ‹‚ªd‚È‚Á‚Ä‚¢‚Ü‚·
+Your suggested time of: —\’莞ŠÔ
+All day event: ‘S“úƒCƒxƒ“ƒg
+conflicts with the following existing calendar entries: ˆÈ‰º‚̃Gƒ“ƒgƒŠ[‚Əd‚È‚Á‚Ä‚¢‚Ü‚·F
+Cancel: ƒLƒƒƒ“ƒZƒ‹
+
+
+###############################################
+# Page: edit_layer.php
+#
+Edit Layer: ƒŒƒCƒ„[‚ð•ÒW
+Add Layer: ƒŒƒCƒ„[‚ð’ljÁ
+Source: ƒ\[ƒX
+Color: F
+Duplicates: •¡»
+Show layer events that are the same as your own: Ž©g‚Æ“¯‚¶ƒŒƒCƒ„[ƒCƒxƒ“ƒg‚ðŒ©‚¹‚é
+Delete layer: ƒŒƒCƒ„[‚ðíœ
+Are you sure you want to delete this layer?: ‚±‚̃ŒƒCƒ„[‚ðíœ‚µ‚Ä‚à—Ç‚¢‚Å‚·‚©?
+
+
+###############################################
+# Page: edit_layer_handler.php
+#
+You cannot create a layer for yourself: Ž©•ª‚̃ŒƒCƒ„[‚ðì¬‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚¹‚ñB
+#
+# << MISSING >>
+# You can only create one layer for each user:
+
+
+###############################################
+# Page: edit_report.php
+#
+Tomorrow: –¾“ú
+Today: ¡“ú
+Yesterday: ð“ú
+Day before yesterday: ˆêð“ú
+Next week: ŽŸT
+This week: ¡T
+Last week: æT
+Week before last: æXT
+Next week and week after: —ˆT‚ƍėˆT
+This week and next week: ¡T‚Æ—ˆT
+Last week and this week: æT‚ƍ¡T
+Last two weeks: ‰ß‹Ž 2 T
+Next month: —‚ŒŽ
+This month: ¡T
+Last month: æŒŽ
+Month before last: æXŒŽ
+Next year: —ˆ”N
+This year: ¡”N
+Last year: ‹Ž”N
+Year before last: ˆêð”N
+Invalid report id: –³Œø‚ȃŒƒ|[ƒg ID
+Unnamed Report: –¼Ì–¢Ý’背ƒ|[ƒg
+Add Report: ƒŒƒ|[ƒg’ljÁ
+Edit Report: ƒŒƒ|[ƒg•ÒW
+Report name: ƒŒƒ|[ƒg–¼
+Current User: Œ»Ý‚̃†[ƒU[
+Include link in trailer: ––”ö‚ɃŠƒ“ƒN‚ðŠÜ‚Þ
+Include standard header/trailer: •W€ƒwƒbƒ_[/ƒtƒbƒ^[‚ðŠÜ‚Þ
+Date range: Šú“ú”͈Í
+Category: ƒJƒeƒSƒŠ
+None: ‚È‚µ
+Include previous/next links: ‘O/ŽŸ‚ւ̃Šƒ“ƒN‚ðŠÜ‚Þ
+Include empty dates: ‹ó‚Ì“ú‚ðŠÜ‚Þ
+Template variables: ’lƒeƒ“ƒvƒŒ[ƒg
+Page template: ƒy[ƒWƒeƒ“ƒvƒŒ[ƒg
+Day template: “úƒeƒ“ƒvƒŒ[ƒg
+Event template: ƒCƒxƒ“ƒgƒeƒ“ƒvƒŒ[ƒg
+Are you sure you want to delete this report?: ‚±‚̃Œƒ|[ƒg‚ð–{“–‚ɍ폜‚µ‚Ü‚·‚©?
+
+
+###############################################
+# Page: edit_report_handler.php
+#
+Variable N not found: •Ï” N ‚ªŒ©‚‚©‚è‚Ü‚¹‚ñ
+
+
+###############################################
+# Page: edit_template.php
+#
+Edit Custom Script/Stylesheet: ƒJƒXƒ^ƒ€ƒXƒNƒŠƒvƒg/ƒXƒ^ƒCƒ‹ƒV[ƒg•ÒW
+Edit Custom Header: ƒJƒXƒ^ƒ€ƒwƒbƒ_[•ÒW
+Edit Custom Trailer: ƒJƒXƒ^ƒ€ƒtƒbƒ^[•ÒW
+
+
+###############################################
+# Page: edit_user.php
+#
+Edit User: ƒ†[ƒU[‚ð•ÒW
+Add User: ƒ†[ƒU[‚ð’ljÁ
+Username: ƒ†[ƒU[–¼
+First Name: –¼
+Last Name: ©
+E-mail address: ƒ[ƒ‹ƒAƒhƒŒƒX
+Password: ƒpƒXƒ[ƒh
+again: Ä“x
+Disabled for demo: ƒfƒ‚‚Å‚ÍŽg—p‚Å‚«‚Ü‚¹‚ñ
+Are you sure you want to delete this user?: ‚±‚̃†[ƒU[‚ð–{“–‚ɍ폜‚µ‚Ü‚·‚©?
+Change Password: ƒpƒXƒ[ƒh•ÏX
+New Password: V‚µ‚¢ƒpƒXƒ[ƒh
+Set Password: ƒpƒXƒ[ƒh‚ðÝ’è
+
+
+###############################################
+# Page: edit_user_handler.php
+#
+Deleting users not supported: ƒ†[ƒU[‚̍폜‚̓Tƒ|[ƒg‚³‚ê‚Ä‚¢‚Ü‚¹‚ñ
+The passwords were not identical: ƒpƒXƒ[ƒh‚ªˆê’v‚µ‚Ü‚¹‚ñ
+You have not entered a password: ƒpƒXƒ[ƒh‚ð“ü—Í‚µ‚Ä‚¢‚Ü‚¹‚ñ
+Changes successfully saved: •ÏX‚Ì•Û‘¶‚ɐ¬Œ÷‚µ‚Ü‚µ‚½B
+
+
+###############################################
+# Page: export.php
+#
+Export format: ƒGƒNƒXƒ|[ƒgŒ`Ž®
+Palm Pilot: ƒp[ƒ€ƒpƒCƒƒbƒg
+Include all layers: ‚·‚ׂẴŒƒCƒ„[‚ðŠÜ‚Þ
+Export all dates: ‚·‚ׂĂ̓ú•t‚ðƒGƒNƒXƒ|[ƒg
+Start date: ŠJŽn“ú
+End date: I—¹“ú
+Modified since: C³“úˆÈ~
+Export: ƒGƒNƒXƒ|[ƒg
+
+
+###############################################
+# Page: export_handler.php
+#
+export format not defined or incorrect: ƒGƒNƒXƒ|[ƒgŒ`Ž®‚ª–¢’è‹`‚©³‚µ‚­‚ ‚è‚Ü‚¹‚ñ
+
+
+###############################################
+# Page: group_edit.php
+#
+Unnamed Group: –¼Ì–¢Ý’èƒOƒ‹[ƒv
+Add Group: ƒOƒ‹[ƒv‚̒ljÁ
+Edit Group: ƒOƒ‹[ƒv‚̕ҏW
+Group name: ƒOƒ‹[ƒv–¼
+Updated: XV“úŽž
+Created by: ì¬ŽÒ
+
+
+###############################################
+# Page: group_edit_handler.php
+#
+You must specify a group name: ƒOƒ‹[ƒv–¼‚ðŽw’肵‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñ
+
+
+###############################################
+# Page: groups.php
+#
+Add New Group: V‚µ‚¢ƒOƒ‹[ƒv‚̒ljÁ
+
+
+###############################################
+# Page: help_admin.php
+#
+Display days with events in bold in year view: u”Nvƒrƒ…[‚ŃCƒxƒ“ƒg‚Ì‚ ‚é“ú‚𑾎š‚Å•\Ž¦‚·‚é
+Nonuser: ”ñƒ†[ƒU[ƒJƒŒƒ“ƒ_[
+Subscribe/Publish: w“Ç/ŒöŠJ
+
+
+###############################################
+# Page: help_bug.php
+#
+Report Bug: ƒoƒO•ñ
+
+
+###############################################
+# Page: help_edit_entry.php
+#
+Adding/Editing Calendar Entries: ƒJƒŒƒ“ƒ_[‚̃Gƒ“ƒgƒŠ[‚ð’ljÁ^•ÒW
+Brief Description: ŠÈ’P‚Èà–¾
+brief-description-help: This should provide a short description (about 20 characters) of the event.  This will represent the event when viewing the calendar.
+Full Description: Ú‚µ‚¢à–¾
+full-description-help: ‚±‚ê‚́Ao—ˆŽ–‚̏ڍׂðŽdã‚°‚é‚·‚é‚ׂ«‚Å‚·Bƒ†[ƒU[‚ªƒCƒxƒ“ƒg‚ðŒ©‚½‚Æ‚«A‚±‚̏î•ñ‚ÍŒ©‚邱‚Æ‚ª‚Å‚«‚Ü‚·B
+date-help: ƒCƒxƒ“ƒg‚Ì“ú•t‚ðŽw’肵‚Ü‚·B
+time-help: ƒCƒxƒ“ƒg‚ÌŽžŠÔ‚ðŽw’肵‚Ü‚·B<br /><i>‚±‚̃tƒB[ƒ‹ƒh‚Í‹ó‚ɏo—ˆ‚Ü‚·B</i>
+duration-help: ƒCƒxƒ“ƒg‚ÌŠÔŠu(Žž:•ª)‚ðŽw’肵‚Ü‚·)<br /><i>‚±‚̃tƒB[ƒ‹ƒh‚Í‹ó‚ɏo—ˆ‚Ü‚·B</i>
+end-time-help: ƒCƒxƒ“ƒg‚ªI—¹‚·‚é‚Æ—\‘z‚³‚ê‚鎞ŠÔ(ŠúŠÔ)‚ðŽw’肵‚Ü‚·B
+#
+Priority: —Dæ‡ˆÊ
+priority-help: ƒCƒxƒ“ƒg‚Ì—Dæ“x‚ðŽw’肵‚Ü‚·B‚‚¢—Dæ“x‚̃Cƒxƒ“ƒg‚̓{[ƒ‹ƒh‚Å•\Ž¦‚³‚ê‚é‚Å‚µ‚傤B
+Access: ƒAƒNƒZƒX
+access-help: ƒCƒxƒ“ƒg‚̃AƒNƒZƒXƒŒƒxƒ‹‚ðŽw’肵‚Ü‚·B<br /> <i>ŒöŠJ</i>: ’N‚Å‚àAƒCƒxƒ“ƒg‚Ì‘SÚ×‚ðŒ©‚é‚±‚Æ‚ª‚Å‚«‚Ü‚·B<br /><i>‹@–§</i>: Others can see that you have an entry for that date and time, but not the details of what it is.
+Participants: ŽQ‰ÁŽÒ
+participants-help: ‚±‚̃Gƒ“ƒgƒŠ‚ÌŽQ‰ÁŽÒˆê——
+Repeat Type: ŒJ•Ô‚µƒ^ƒCƒv
+repeat-type-help: Select how often the event should repeat.<i>Monthly (by day)</i> allows an event to repeat on the 1st Monday of the month, 3rd Thursday of the month, etc.  <i>Monthly (by date)</i> allows an event to repeat on the same day of the month.
+Repeat End Date: ŒJ•Ô‚µI—¹“ú
+repeat-end-date-help: ƒCƒxƒ“ƒg‚ÌŒJ‚è•Ô‚µI—¹“ú‚ðŽw’肵‚Ü‚·B
+Repeat Day: ŒJ•Ô‚µ“ú
+repeat-day-help: Specifies which days of the week the event should repeat on.  This is for use only when <i>Repeat Type</i> is set to <i>Weekly</i>.
+Frequency: •p“x
+repeat-frequency-help: Specifies how often the event should repeat.  The default 1 indicates it should occur every time.  Specifying 2 will make the event occur every other week (if <i>Repeat Type</i> is set to <i>Weekly</i>), every other month (if <i>Repeat Type</i> is set to <i>Monthly</i>), etc.
+
+
+###############################################
+# Page: help_import.php
+#
+Import: ƒCƒ“ƒ|[ƒg
+Palm Desktop: Palm ƒfƒXƒNƒgƒbƒv
+#
+# << MISSING >>
+# This form will allow you to import entries from the Palm Desktop Datebook.:
+#
+# << MISSING >>
+# It should be located in your Palm directory in <tt>datebook/datebook.dat</tt> in a subdirectory named by your username.:
+The following entries will not be imported: ŽŸ‚̃Gƒ“ƒgƒŠ‚̓Cƒ“ƒ|[ƒg‚³‚ê‚È‚©‚Á‚½‚Å‚µ‚傤
+Entries older than the current date: ƒGƒ“ƒgƒŠ‚ÍŒ»Ý‚ÌŠú“ú‚æ‚èŒÃ‚¢‚Å‚·
+#
+# << MISSING >>
+# Entries created in the Palm Desktop that have not been HotSync'd:
+#
+# << MISSING >>
+# Anything imported from Palm will be overwritten during the next import (unless the event date has passed).:
+#
+# << MISSING >>
+# Therefore, updates should be made in the Palm Desktop.:
+vCal: vCal
+This form will import vCalendar (.vcs) 1.0 events: ‚±‚̃tƒH[ƒ€‚Í vCalendar (.vcs) 1.0 ƒCƒxƒ“ƒg‚Æ‚µ‚ăCƒ“ƒ|[ƒg‚·‚é‚Å‚µ‚傤
+The following formats have been tested: ŽŸ‚ÌŒ`Ž®‚ªƒeƒXƒg‚³‚ê‚Ü‚µ‚½B
+Palm Desktop 4: Palm ƒfƒXƒNƒgƒbƒv 4
+Lotus Organizer 6: Lotus ƒI[ƒKƒiƒCƒU[ 6
+Microsoft Outlook 2002: Microsoft Outlook 2002
+iCalendar: iCalendar
+This form will import iCalendar (.ics) events: ‚±‚̃tƒH[ƒ€‚Í iCalendar (.ics) ƒCƒxƒ“ƒg‚ðƒCƒ“ƒ|[ƒg‚·‚é‚Å‚µ‚傤
+#
+# << MISSING >>
+# Enabling <b>Overwrite Prior Import</b> will cause events imported previously that used the same UID as an event from the new import file to be marked as deleted.  This should allow an updated iCalendar file to be imported without creating duplicates.:
+
+
+###############################################
+# Page: help_index.php
+#
+Help Index: ƒwƒ‹ƒvõˆø
+
+
+###############################################
+# Page: help_layers.php
+#
+#
+# << MISSING >>
+# Layers are useful for displaying other users' events in your own calendar.  You can specifiy the user and the color the events will be displayed in.:
+Add/Edit/Delete: ’ljÁ/•ÒW/íœ
+#
+# << MISSING >>
+# Clicking the Edit Layers link in the admin section at the bottom of the page will allow you to add/edit/delete layers.:
+#
+# << MISSING >>
+# Specifies the user that you would like to see displayed in your calendar.:
+#
+# << MISSING >>
+# The text color of the new layer that will be displayed in your calendar.:
+#
+# << MISSING >>
+# If checked, events that are duplicates of your events will be shown.:
+#
+Disabling: –³Œø‚É‚·‚é
+#
+# << MISSING >>
+# Press the Disable Layers link in the admin section at the bottom of the page to turn off layers.:
+#
+Enabling: —LŒø‚É‚·‚é
+#
+# << MISSING >>
+# Press the Enable Layers link in the admin section at the bottom of the page to turn on layers.:
+
+
+###############################################
+# Page: help_pref.php
+#
+Default Category: ƒfƒtƒHƒ‹ƒgƒJƒeƒSƒŠ
+default-category-help: V‹KƒCƒxƒ“ƒg‚ªƒfƒtƒHƒ‹ƒg‚É‚È‚é‚ׂ«ƒJƒeƒSƒŠ‚ðŽw’肵‚Ü‚·B
+#
+# << MISSING >>
+# allow-remote-subscriptions-help:
+# English text: Specifies if remote users can subscribe to your calendar, allowing them to see your events in a iCal-enabled application (such as Apple's iCal or Mozilla Calendar).
+#
+URL: URL
+#
+# << MISSING >>
+# remote-subscriptions-url-help:
+# English text: Displays the URL remote users should use to subscribe to your calendar.
+#
+
+
+###############################################
+# Page: import.php
+#
+Disabled: Žg—p•s‰Â
+Import format: ƒCƒ“ƒ|[ƒgŒ`Ž®
+Exclude private records: œŠO‚·‚éƒvƒ‰ƒCƒx[ƒgƒŒƒR[ƒh
+#
+# << MISSING >>
+# Overwrite Prior Import:
+
+
+###############################################
+# Page: import_handler.php
+#
+Import Results: ƒCƒ“ƒ|[ƒgŒ‹‰Ê
+Events successfully imported: ƒCƒxƒ“ƒg‚̃Cƒ“ƒ|[ƒg‚ɐ¬Œ÷‚µ‚Ü‚µ‚½
+#
+# << MISSING >>
+# Events from prior import marked as deleted:
+Conflicting events: ƒCƒxƒ“ƒgÕ“Ë’†
+Errors: ƒGƒ‰[
+#
+# << MISSING >>
+# There was an error parsing the import file or no events were returned:
+The import file contained no data: ƒCƒ“ƒ|[ƒgƒtƒ@ƒCƒ‹‚Ì’†g‚ª‚ ‚è‚Ü‚¹‚ñB
+View this entry: ‚±‚̃Gƒ“ƒgƒŠ[‚ðŒ©‚é
+Event Imported: ƒCƒxƒ“ƒg‚ðƒCƒ“ƒ|[ƒg‚µ‚Ü‚µ‚½B
+
+
+###############################################
+# Page: layers.php
+#
+Layers are currently: Œ»Ý‚̃ŒƒCƒ„[
+Enabled: Žg—p‰Â”\
+Disable Layers: ƒŒƒCƒ„[‚ðŽg—p•s‰Â‚É‚·‚é
+Enable Layers: ƒŒƒCƒ„[‚ðŽg—p‰Â”\‚É‚·‚é
+to modify the layers settings for the: ‚ʼnE‚̃ŒƒCƒ„[Ý’è‚ð•ÏX‚·‚é:
+#
+# << MISSING >>
+# calendar:
+Add layer: ƒŒƒCƒ„[‚ð’ljÁ
+Layer: ƒŒƒCƒ„[
+Edit layer: ƒŒƒCƒ„[‚ð•ÒW
+
+
+###############################################
+# Page: list_unapproved.php
+#
+Approve/Confirm: ‹–‰Â^Šm”F
+Approve this entry?: ƒGƒ“ƒgƒŠ[‚ð‹–‰Â‚µ‚Ü‚·‚©?
+Reject: ‹‘”Û
+Reject this entry?: ƒGƒ“ƒgƒŠ[‚ð‹‘”Û‚µ‚Ü‚·‚©?
+No unapproved events for: –¢³”FƒCƒxƒ“ƒg‚Í‚ ‚è‚Ü‚¹‚ñ
+Unapproved Events: –¢³”FƒCƒxƒ“ƒg
+
+
+###############################################
+# Page: login.php
+#
+Invalid login: ƒƒOƒCƒ“‚Í–³Œø‚Å‚·
+You must enter a login and password: ƒ†[ƒU[–¼‚ƃpƒXƒ[ƒh‚ð“ü—Í‚µ‚Ä‚­‚¾‚³‚¢
+Save login via cookies so I don't have to login next time: ŽŸ‰ñ‚©‚烍ƒOƒCƒ“‚µ‚È‚­‚Ä‚à—Ç‚¢‚悤‚ɁAƒ†[ƒU[î•ñ‚ðƒNƒbƒL[‚ɃZ[ƒu‚·‚é
+Login: ƒƒOƒCƒ“
+Access public calendar: ŒöŠJƒJƒŒƒ“ƒ_[ƒAƒNƒZƒX
+cookies-note: <b>’ˆÓ:</b> ‚±‚̃AƒvƒŠƒP[ƒVƒ‡ƒ“‚̓NƒbƒL[‚ª—LŒø‚Å‚È‚¯‚ê‚ΐ³í‚É“®ì‚µ‚Ü‚¹‚ñB
+
+
+###############################################
+# Page: month.php
+#
+Sun: “ú
+Mon: ŒŽ
+Tue: ‰Î
+Wed: …
+Thu: –Ø
+Fri: ‹à
+Sat: “y
+
+
+###############################################
+# Page: nonusers.php
+#
+NONUSER_PREFIX not set: ”ñƒ†[ƒU[Ú“ªŒê‚Í–¢Ý’è
+Add New NonUser Calendar: ”ñƒ†[ƒU[‚̃JƒŒƒ“ƒ_[‚ɐV‹K’ljÁ
+
+
+###############################################
+# Page: nonusers_handler.php
+#
+Calendar ID: ƒJƒŒƒ“ƒ_[ ID
+word characters only: •¶Žš‚͉p”Žš‚ƃAƒ“ƒ_[ƒ‰ƒCƒ“‚Ì‚Ý‚ðŠÜ‚Þ‚±‚Æ‚ªo—ˆ‚Ü‚·B
+
+
+###############################################
+# Page: pref.php
+#
+Save Preferences: Ý’è‚ð•Û‘¶
+to modify the preferences for the Public Access calendar: ‚·‚é‚ÆŒöŠJƒJƒŒƒ“ƒ_[‚̐ݒ肪•ÏX‚Å‚«‚Ü‚·
+tz-help: ƒT[ƒo[‚ÌŽžŠÔ‚©‚猻’n‚ÌŽžŠÔ‚Ü‚Å‚ÌŽžŠÔ‚𒲐߂·‚ׂ«‚©‚Ç‚¤‚©‚ðŽw’肵‚Ü‚·B
+Timezone Offset: ƒ^ƒCƒ€ƒ][ƒ“Žž·
+Add N hours to: +N ŽžŠÔ
+Subtract N hours from: -N ŽžŠÔ
+same as: “¯‚¶
+server time: ƒT[ƒo[‚Æ‚ÌŽž·
+When I am the boss: ãŽi‚̏ꍇ
+Email me event notification: ƒCƒxƒ“ƒg’Ê’m‚ðŽ©•ª‚Ƀ[ƒ‹‚·‚é
+I want to approve events: ƒCƒxƒ“ƒg‚Ì”FØ‚ð‚µ‚½‚¢
+
+
+###############################################
+# Page: purge.php
+#
+Purging events for: ‰Eƒ†[ƒU[‚̃Cƒxƒ“ƒg‚ðÁ‹Ž‚µ‚Ä‚¢‚Ü‚·
+Finished: Š®—¹‚µ‚Ü‚µ‚½
+All: ‘S‚Ä
+Delete all events before: ‰E‚Ì“ú•tˆÈ‘O‚̃Cƒxƒ“ƒg‚ð‚·‚×‚Äíœ‚·‚é
+Check box to delete <b>ALL</b> events for a user: 1 ƒ†[ƒU[‚̃Cƒxƒ“ƒg‚ð<b>‚·‚ׂÄ</b>íœ‚·‚éê‡‚̓`ƒFƒbƒN‚µ‚Ä‚­‚¾‚³‚¢
+Are you sure you want to delete events for: ‰Eƒ†[ƒU[‚̃Cƒxƒ“ƒg‚ð‚·‚×‚Äíœ‚µ‚Ä—Ç‚¢‚Å‚·‚©?F
+Records deleted from: ƒŒƒR[ƒh‚ðíœ‚µ‚Ü‚µ‚½ ‘ΏÛ:
+
+
+###############################################
+# Page: reject_entry.php
+#
+An appointment has been rejected by: —\’肪ˆÈ‰º‚̐l‚É‚æ‚Á‚Ä‹‘”Û‚³‚ê‚Ü‚µ‚½B
+
+
+###############################################
+# Page: report.php
+#
+Untimed event: ”ñŽžŒÀƒCƒxƒ“ƒg
+Private: ƒvƒ‰ƒCƒx[ƒg
+Low: ’á
+Medium: ’†
+High: ‚
+Waiting for approval: ³”F‘Ò‚¿
+Deleted: íœÏ
+Rejected: ‹‘”ۍÏ
+Approved: ³”FÏ‚Ý
+Unknown: –¢’m
+to manage reports for the Public Access calendar: ‚·‚é‚ÆŒöŠJƒAƒNƒZƒXƒJƒŒƒ“ƒ_[—pƒŒƒ|[ƒg‚ðŠÇ—‚µ‚Ü‚·
+Add new report: V‹KƒŒƒ|[ƒg’ljÁ
+cont.: ‘±‚­
+Manage Reports: ƒŒƒ|[ƒgŠÇ—
+
+
+###############################################
+# Page: search.php
+#
+Search: ŒŸõ
+Keywords: ƒL[ƒ[ƒh
+Advanced Search: ‚“x‚ÈŒŸõ
+
+
+###############################################
+# Page: search_handler.php
+#
+You must enter one or more search keywords: ƒL[ƒ[ƒh‚ð 1 ‚ˆȏã“ü—Í‚µ‚Ä‚­‚¾‚³‚¢B
+Search Results: ŒŸõŒ‹‰Ê
+match found: ŒÂ‚ÌŠY“–€–Ú‚ªŒ©‚‚©‚è‚Ü‚µ‚½B
+matches found: ŒÂ‚ÌŠY“–€–Ú‚ªŒ©‚‚©‚è‚Ü‚µ‚½B
+No matches found: ŠY“–€–Ú‚ªŒ©‚‚©‚è‚Ü‚¹‚ñ‚Å‚µ‚½B
+
+
+###############################################
+# Page: select_user.php
+#
+View Another User's Calendar: ‘¼‚̃†[ƒU[‚̃JƒŒƒ“ƒ_[‚ðŒ©‚é
+Go: •\Ž¦
+
+
+###############################################
+# Page: set_entry_cat.php
+#
+#
+# << MISSING >>
+# You have not added any categories:
+Set Category: ƒJƒeƒSƒŠÝ’è
+
+
+###############################################
+# Page: users.php
+#
+Add New User: V‚µ‚¢ƒ†[ƒU[‚ð’ljÁ
+denotes administrative user: ŠÇ—ƒ†[ƒU[‚ð•\Ž¦
+
+
+###############################################
+# Page: usersel.php
+#
+Reset: ƒŠƒZƒbƒg
+Remove: íœ
+Ok: OK
+
+
+###############################################
+# Page: view_entry.php
+#
+every: –ˆ
+2nd: ‘æ2
+3rd: ‘æ3
+4th: ‘æ4
+5th: ‘æ5
+1st: ‘æ1
+last: ÅI
+by date: “úŽw’è
+Confidential: ”ñŒöŠJ
+Description: à–¾
+Status: ó‘Ô
+Public: ŒöŠJ
+days: “ú
+day: “ú
+hours: ŽžŠÔ
+minute: •ª
+before event: ‘O‚É’Ê’m‚·‚é
+External User: ŠO•”ƒ†[ƒU[
+Approve/Confirm entry: ‹–‰Â^ƒGƒ“ƒgƒŠ[Šm”F
+Reject entry: ƒGƒ“ƒgƒŠ[‚ð‹‘”Û
+Set category: ƒJƒeƒSƒŠÝ’è
+Edit repeating entry for all dates: ŒJ•Ô‚µƒGƒ“ƒgƒŠ[‚ð‚·‚×‚Ä•ÒW‚·‚é
+Edit entry for this date: ƒGƒ“ƒgƒŠ[‚ð¡‰ñ•ª‚¾‚¯•ÒW‚·‚é
+Delete repeating event for all dates: ŒJ•Ô‚µƒGƒ“ƒgƒŠ[‚ð‚·‚×‚Äíœ‚·‚é
+This will delete this entry for all users.: ‚±‚ê‚É‚æ‚Á‚Ä‚±‚̃Gƒ“ƒgƒŠ[‚ð‚·‚×‚Ä‚Ìƒ†[ƒU‚©‚çíœ‚µ‚Ü‚·
+Delete entry only for this date: ƒGƒ“ƒgƒŠ[‚ð¡‰ñ•ª‚¾‚¯íœ‚·‚é
+Edit entry: ƒGƒ“ƒgƒŠ[‚̕ҏW
+Delete entry: ƒGƒ“ƒgƒŠ[‚ðíœ
+Copy entry: ƒGƒ“ƒgƒŠ[‚ðƒRƒs[
+This will delete the entry from your calendar.: ‚±‚̃Gƒ“ƒgƒŠ[‚ð‚ ‚È‚½‚̃JƒŒƒ“ƒ_[‚©‚çíœ‚µ‚Ü‚·B
+Add to My Calendar: ƒ}ƒCƒJƒŒƒ“ƒ_[‚ɒljÁ
+Do you want to add this entry to your calendar?: ‚±‚̃Gƒ“ƒgƒŠ[‚ð‚ ‚È‚½‚̃JƒŒƒ“ƒ_[‚ɒljÁ‚µ‚Ü‚·‚©?
+This will add the entry to your calendar.: ‚±‚ê‚É‚æ‚Á‚Ä‚±‚̃Gƒ“ƒgƒŠ[‚ð‚ ‚È‚½‚̃JƒŒƒ“ƒ_[‚ɒljÁ‚µ‚Ü‚·
+Email all participants: ŽQ‰ÁŽÒ‘Sˆõ‚Ƀ[ƒ‹‘—M
+Show activity log: Šˆ“®ƒƒO‚ð•\Ž¦
+Hide activity log: Šˆ“®ƒƒO‚ð‰B‚·
+Export this entry to: ‰E‚ÌŒ`Ž®‚ɃGƒNƒXƒ|[ƒg
+
+
+###############################################
+# Page: views.php
+#
+Add New View: V‹Kƒrƒ…[‚̒ljÁ
+
+
+###############################################
+# Page: views_edit.php
+#
+Unnamed View: –¼Ì–¢Ý’èƒrƒ…[
+Add View: ƒrƒ…[‚̒ljÁ
+Edit View: ƒrƒ…[‚̕ҏW
+View Name: ƒrƒ…[–¼
+View Type: ƒrƒ…[ƒ^ƒCƒv
+Week (Users horizontal): T(ƒ†[ƒU[…•½)
+Week (Users vertical): T(ƒ†[ƒU[‚’¼)
+Week (Timebar): T(ƒ^ƒCƒ€ƒo[)
+Month (Timebar): ŒŽ(ƒ^ƒCƒ€ƒo[)
+Month (side by side): ŒŽ(ƒ†[ƒU[‚ð‰¡‚É•À‚ׂé)
+Month (on same calendar): ŒŽ(“¯‚¶ƒJƒŒƒ“ƒ_[ã‚Ƀ†[ƒU[¬Ý)
+preview: ƒvƒŒƒrƒ…[
+
+
+###############################################
+# Page: views_edit_handler.php
+#
+You must specify a view name: ƒrƒ…[–¼‚ðŽw’肵‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñB
+
+
+###############################################
+# Page: week_details.php
+#
+New Entry: V‹KƒGƒ“ƒgƒŠ[
+am: AM
+pm: PM
+
+
+###############################################
+# Page: edit_entry.php
+#
+Edit Entry: ƒGƒ“ƒgƒŠ[‚ð•ÒW
+Add Entry: ƒGƒ“ƒgƒŠ[‚ð’ljÁ
+Details: Ú×
+Scheduling: ƒXƒPƒWƒ…[ƒ‹
+Repeat: ŒJ‚è•Ô‚µ
+category-help: ƒCƒxƒ“ƒg‚̃JƒeƒSƒŠ‚ðŽw’肵‚Ü‚·B
+Timed event: ŽžŒÀƒCƒxƒ“ƒg
+#
+# << MISSING >>
+# external-participants-help:
+# English text: Specifies a list of participants for the event that are not calendar users.  The users should be listed one per line and can include an email address.  If an email address is specified, the user is eligible to receive notications and reminders.
+#
+External Participants: ŠO•”ŽQ‰ÁŽÒ
+Daily: –ˆ“ú
+Weekly: –ˆT
+Monthly: –ˆŒŽ
+by day: ‘æ 1 ŒŽ—j‚È‚Ç
+by day (from end): ÅIŒŽ—j‚È‚Ç(ŒŽ––‚©‚ç)
+Yearly: –ˆ”N
+Use end date: I—¹“ú‚ðŽg—p
+Tuesday: ‰Î—j“ú
+Wednesday: …—j“ú
+Thursday: –Ø—j“ú
+Friday: ‹à—j“ú
+Saturday: “y—j“ú
+You are not authorized to edit this entry: ‚±‚̃Gƒ“ƒgƒŠ[‚̕ҏW‚Í‹–‰Â‚³‚ê‚Ä‚¢‚Ü‚¹‚ñB
+
+
+###############################################
+# Page: includes/functions.php
+#
+This event is confidential: ‚±‚̃Cƒxƒ“ƒg‚Í”ñŒöŠJ‚Å‚·
+exceeds limit of XXX events per day: 1 “ú‚̃Cƒxƒ“ƒg”‚̐§ŒÀ‚Å‚ ‚é XXX ŒÂ‚ð’´‚¦‚Ü‚µ‚½B
+You have XXX unapproved events: XXX ŒÂ‚Ì–¢³”FƒCƒxƒ“ƒg‚ª‚ ‚è‚Ü‚·B
+January: 1ŒŽ
+February: 2ŒŽ
+March: 3ŒŽ
+April: 4ŒŽ
+May_: 5ŒŽ
+June: 6ŒŽ
+July: 7ŒŽ
+August: 8ŒŽ
+September: 9ŒŽ
+October: 10ŒŽ
+November: 11ŒŽ
+Jan: 1ŒŽ
+Feb: 2ŒŽ
+Mar: 3ŒŽ
+Apr: 4ŒŽ
+May: 5ŒŽ
+Jun: 6ŒŽ
+Jul: 7ŒŽ
+Aug: 8ŒŽ
+Sep: 9ŒŽ
+Oct: 10ŒŽ
+Nov: 11ŒŽ
+Dec: 12ŒŽ
+
+
+###############################################
+# Page: includes/help_trailer.php
+#
+Go to: ˆÚ“®
+
+
+###############################################
+# Page: includes/site_extras.php
+#
+Send Reminder: ƒŠƒ}ƒCƒ“ƒ_[‘—M
+
+
+###############################################
+# Page: includes/trailer.php
+#
+My Calendar: ƒ}ƒCƒJƒŒƒ“ƒ_[
+Back to My Calendar: ƒ}ƒCƒJƒŒƒ“ƒ_[‚É–ß‚é
+Another User's Calendar: ‘¼ƒ†[ƒU[‚̃JƒŒƒ“ƒ_[
+Add New Entry: V‹KƒGƒ“ƒgƒŠ[’ljÁ
+Logout: ƒƒOƒAƒEƒg
+Manage calendar of: ƒJƒŒƒ“ƒ_[ŠÇ—:
+
+
+###############################################
+# Page: includes/user-nis.php
+#
+incorrect password: ƒpƒXƒ[ƒh‚ª³‚µ‚­‚ ‚è‚Ü‚¹‚ñB
+no such user: ƒ†[ƒU[‚ª‹‚Ü‚¹‚ñB
+Invalid user login: –³Œø‚ȃ†[ƒU[‚̃ƒOƒCƒ“
+
+
+###############################################
+# Page: includes/config.php
+#
+English: ‰pŒê
+Basque: Basque
+Bulgarian: ƒuƒ‰ƒWƒ‹Œê
+Catalan: ƒJƒ^ƒƒjƒAŒê
+Chinese (Traditonal/Big5): ’†‘Œê (Traditonal/Big5)
+Chinese (Simplified/GB2312): ’†‘Œê (Simplified/GB2312)
+Czech: ƒ`ƒFƒRŒê
+Danish: ƒfƒ“ƒ}[ƒNŒê
+Dutch: ƒIƒ‰ƒ“ƒ_Œê
+Estonian: ƒGƒXƒgƒjƒAŒê
+Finnish: ƒtƒBƒ“ƒ‰ƒ“ƒhŒê
+French: ƒtƒ‰ƒ“ƒXŒê
+Galician: ƒKƒŠƒVƒAŒê
+German: ƒhƒCƒcŒê
+Holo (Taiwanese): Holo(‘ä˜pŒê)
+Hungarian: ƒnƒ“ƒKƒŠ[Œê
+Icelandic: ƒAƒCƒXƒ‰ƒ“ƒhŒê
+Italian: ƒCƒ^ƒŠƒAŒê
+Japanese: “ú–{Œê
+Korean: ŠØ‘Œê
+Norwegian: ƒmƒ‹ƒEƒF[Œê
+Polish: ƒ|[ƒ‰ƒ“ƒhŒê
+Portuguese: ƒ|ƒ‹ƒgƒKƒ‹Œê
+Portuguese/Brazil: ƒ|ƒ‹ƒgƒKƒ‹Œê/ƒuƒ‰ƒWƒ‹
+Romanian: ƒ‹[ƒ}ƒjƒAŒê
+Russian: ƒƒVƒAŒê
+Spanish: ƒXƒyƒCƒ“Œê
+Swedish: ƒXƒEƒF[ƒfƒ“Œê
+Turkish: ƒgƒ‹ƒRŒê
+
+
+###############################################
+# Page: includes/js/admin.php
+#
+Server URL is required: ƒT[ƒo[ URL ‚ª•K{‚Å‚·B
+Server URL must end with '/': ƒT[ƒo[ URL ‚́u/v‚ŏI‚í‚ç‚È‚¯‚ê‚΂¢‚¯‚Ü‚¹‚ñB
+Invalid work hours: –³Œø‚ȋΖ±ŽžŠÔ‚Å‚·B
+Invalid color for document background: ‘—Þ‚Ì”wŒiF‚ª–³Œø‚Å‚·B
+Invalid color for document title: ‘—ނ̃^ƒCƒgƒ‹F‚ª–³Œø‚Å‚·B
+Invalid color for table cell background: ‘—ނ̃e[ƒuƒ‹”wŒiF‚ª–³Œø‚Å‚·B
+Invalid color for table grid: ƒe[ƒuƒ‹ƒOƒŠƒbƒh‚̐F‚ª–³Œø‚Å‚·B
+Invalid color for table header background: ƒe[ƒuƒ‹ƒwƒbƒ_[‚̐F‚ª–³Œø‚Å‚·B
+Invalid color for table text background: ƒe[ƒuƒ‹ƒeƒLƒXƒg‚Ì”wŒiF‚ª–³Œø‚Å‚·B
+Invalid color for event popup background: ƒCƒxƒ“ƒgƒ|ƒbƒvƒAƒbƒv‚Ì”wŒiF‚ª–³Œø‚Å‚·B
+Invalid color for event popup text: ƒCƒxƒ“ƒgƒ|ƒbƒvƒAƒbƒv‚̐F‚ª–³Œø‚Å‚·B
+Invalid color for table cell background for today: ¡“ú‚̃e[ƒuƒ‹ƒZƒ‹‚Ì”wŒiF‚ª–³Œø‚Å‚·B
+Color format should be '#RRGGBB': F‚Í '#RRGGBB'‚̃tƒH[ƒ}ƒbƒg‚Őݒ肵‚Ä‚­‚¾‚³‚¢B
+
+
+###############################################
+# Page: includes/js/edit_entry.php
+#
+You have not entered a Brief Description: ŠÈ’P‚Èà–¾‚ð“ü—Í‚µ‚Ä‚¢‚Ü‚¹‚ñB
+You have not entered a valid time of day: —LŒø‚ÈŽžŠÔ‚ð“ü—Í‚µ‚Ä‚¢‚Ü‚¹‚ñB
+The time you have entered begins before your preferred work hours.  Is this correct?: ‹L“ü‚µ‚½ŽžŠÔ‚͒ʏí‹Î–±ŽžŠÔ‘Ñ‚æ‚è‚à‘‚¢‚Å‚·‚ª—Ç‚¢‚Å‚·‚©?
+
+
+###############################################
+# Page: includes/js/edit_layer.php
+#
+Invalid color: –³ŒøF
+
+
+###############################################
+# Page: tools/send_reminders.php
+#
+This is a reminder for the event detailed below.: ‚±‚ê‚͈ȉº‚̃Cƒxƒ“ƒg‚̃Šƒ}ƒCƒ“ƒ_[‚Å‚·
+Reminder: ƒŠƒ}ƒCƒ“ƒ_[

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Korean.txt
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Korean.txt	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Korean.txt	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,2027 @@
+# Use this as a starting point to translate this application into
+# another language.  The format is "English text: translated text"
+# There cannot be a ":" in the English text.
+# Author: Joonyup Jeon <goodwill at wowbook.com>
+# Last updated: 07 June 2000
+# Translation last updated on 03-10-2004
+
+
+###############################################
+# Specify a charset (will be sent within meta tag for each page)
+#
+charset: EUC-KR
+
+
+
+###############################################
+# Page: admin.php
+#
+#
+# << MISSING >>
+# System Settings:
+You are not authorized: ±ÇÇÑÀÌ ¾ø½À´Ï´Ù:
+#
+# << MISSING >>
+# Note:
+#
+# << MISSING >>
+# Your user preferences:
+#
+# << MISSING >>
+# may be affecting the appearance of this page.:
+#
+# << MISSING >>
+# Click here:
+#
+# << MISSING >>
+# to not use your user preferences when viewing this page:
+#
+# << MISSING >>
+# are being ignored while viewing this page.:
+#
+# << MISSING >>
+# to load your user preferences when viewing this page:
+Save: ÀúÀå
+Help: µµ¿ò¸»
+Settings: ¼³Á¤
+#
+# << MISSING >>
+# app-name-help:
+# English text: Specifies the name of the application that will appear in the browser title bar for all pages and on the login page.  The value you specify here will be looked up in the translations file allowing you to provide different titles for different languages.
+#
+#
+# << MISSING >>
+# Application Name:
+#
+# << MISSING >>
+# server-url-help:
+# English text: Specifies the base URL for the application.  This will be included when sending out email reminders and notifications.
+#
+#
+# << MISSING >>
+# Server URL:
+#
+# << MISSING >>
+# language-help:
+# English text: Specifies which language to use.
+#
+Language: ¾ð¾î
+#
+# << MISSING >>
+# Your browser default language is:
+#
+# << MISSING >>
+# fonts-help:
+# English text: Specifies a list of system fonts to use (such as "Arial, Helvetica")
+#
+#
+# << MISSING >>
+# Fonts:
+#
+# << MISSING >>
+# custom-script-help:
+# English text: Allows entry of custom Javascript or stylesheet text that will be inserted into the HTML "head" section of every page.
+#
+#
+# << MISSING >>
+# Custom script/stylesheet:
+Yes: ¿¹
+No: ¾Æ´Ï¿À
+#
+# << MISSING >>
+# Edit:
+#
+# << MISSING >>
+# custom-header-help:
+# English text: Allows a custom HTML snippet to be included in the top of every page.
+#
+#
+# << MISSING >>
+# Custom header:
+#
+# << MISSING >>
+# custom-trailer-help:
+# English text: Allows a custom HTML snippet to be included at the end of every page.
+#
+#
+# << MISSING >>
+# Custom trailer:
+#
+# << MISSING >>
+# preferred-view-help:
+# English text: Specifies the default view (Day, Week, Month, or Year).
+#
+#
+# << MISSING >>
+# Preferred view:
+#
+# << MISSING >>
+# Day:
+Week: ÁÖ
+Month: ¿ù
+#
+# << MISSING >>
+# Year:
+#
+# << MISSING >>
+# display-weekends-help:
+# English text: Include weekends when viewing a week.
+#
+#
+# << MISSING >>
+# Display weekends in week view:
+#
+# << MISSING >>
+# yearly-shows-events-help:
+# English text: On the yearly view, display days that contain events in a bold font.
+#
+#
+# << MISSING >>
+# Display days with events in bold in year view:
+#
+# << MISSING >>
+# display-desc-print-day-help:
+# English text: Include event descriptions in printer-friendly version of day view.
+#
+#
+# << MISSING >>
+# Display description in printer day view:
+#
+# << MISSING >>
+# date-format-help:
+# English text: Specifies the preferred date format.
+#
+#
+# << MISSING >>
+# Date format:
+December: 12¿ù
+time-format-help: ½Ã°£ Ç¥½Ã Çü½ÄÀ» ¸í½ÃÇÕ´Ï´Ù.<br /><i>12 hour:</i>½Ã°£Ç¥½Ã°¡ 3am, 8:30pm, µîµîÀ¸·Î Ç¥½ÃµÊ<br /><i>24 hour:</i>½Ã°£Ç¥½Ã°¡ 300, 2030 µîµîÀ¸·Î Ç¥½ÃµÊ
+Time format: ½Ã°£ Ç¥½Ã Çü½Ä
+12 hour: 12 hour
+24 hour: 24 hour
+#
+# << MISSING >>
+# time-interval-help:
+# English text: Specifies how long the time blocks in the week view and day view will be.
+#
+#
+# << MISSING >>
+# Time interval:
+#
+# << MISSING >>
+# hour:
+minutes: ºÐ
+#
+# << MISSING >>
+# auto-refresh-help:
+# English text: When enabled, the day view, week view, month view, and list aunapproved pages will all automatically refresh themselves periodically.
+#
+#
+# << MISSING >>
+# Auto-refresh calendars:
+#
+# << MISSING >>
+# auto-refresh-time-help:
+# English text: If Auto-refresh is enabled, this specifies the time between each refresh.
+#
+#
+# << MISSING >>
+# Auto-refresh time:
+#
+# << MISSING >>
+# require-approvals-help:
+# English text: When enabled, a user must approve an event before it is displayed on their calendar (unless Display unapproved is enabled).  Note setting this to "No" will not turn off approvals for the Public Access calendar (if the Public Access calendar is enabled).
+#
+#
+# << MISSING >>
+# Require event approvals:
+display-unapproved-help: ¹Ì½ÂÀÎµÈ Çà»ç°¡ ´Þ·Â»ó¿¡ Ç¥½ÃµÉ °ÍÀΰ¡¸¦ ¸í½ÃÇÕ´Ï´Ù. <br /> "Yes"·Î ¼³Á¤½Ã ¹Ì½ÂÀÎµÈ Çà»çµµ Ç¥½ÃµË´Ï´Ù.(´Ù¸¥ »ö±ò·Î).<br />"No"·Î ¼³Á¤ÇÏ¸é ¹Ì½ÂÀÎ Çà»ç´Â ½ÂÀÎ ÈÄ¿¡¸¸ ´Þ·Â¿¡ Ç¥½ÃµË´Ï´Ù.
+Display unapproved: ½ÂÀÎ¾ÈµÈ Çà»ç Ç¥½Ã
+display-week-number-help: ¿ùº° È­¸é°ú ÁÖº° È­¸é¿¡ ¸îÁÖÂ÷Àΰ¡(1~52) Ç¥½Ã¿©ºÎ¸¦ ¸í½Ã.
+Display week number: ¸îÁÖÂ÷Àΰ¡ Ç¥½Ã
+#
+# << MISSING >>
+# display-week-starts-on:
+# English text: Specifies whether the week starts on Sunday or Monday.  If Monday is specified, then week numbers will be ISO week numbers.
+#
+#
+# << MISSING >>
+# Week starts on:
+Sunday: ÀÏ¿äÀÏ 
+Monday: ¿ù¿äÀÏ 
+work-hours-help: ÀϺ° È­¸é¿¡¼­ Ç¥½Ã´ë»ó½Ã°£À» ¸í½Ã
+Work hours: ±Ù¹« ½Ã°£
+From: ½ÃÀÛ
+to: Á¾·á
+#
+# << MISSING >>
+# disable-priority-field-help:
+# English text: Selecting "Yes" will remove the "Priority" field from event information pages, providing a simpler interface for novices.
+#
+#
+# << MISSING >>
+# Disable Priority field:
+#
+# << MISSING >>
+# disable-access-field-help:
+# English text: Selecting "Yes" will remove the "Access" field from event information pages, providing a simpler interface for novices.
+#
+#
+# << MISSING >>
+# Disable Access field:
+#
+# << MISSING >>
+# disable-participants-field-help:
+# English text: Selecting "Yes" will remove the "Particpants" field from event information pages, preventing users from adding other users to their events.  If you enable this option, you may want to also disable the "Allow viewing other user's calendars" field also.
+#
+#
+# << MISSING >>
+# Disable Participants field:
+#
+# << MISSING >>
+# disable-repeating-field-help:
+# English text: Selecting "Yes" will remove the "Repeating" field when adding events.  This will provide a simpler interface for novices.
+#
+#
+# << MISSING >>
+# Disable Repeating field:
+#
+# << MISSING >>
+# popup-includes-siteextras-help:
+# English text: If enabled, allow custom event fields setup in the site_extras.php file will be displayed in event popups.
+#
+#
+# << MISSING >>
+# Display Site Extras in popup:
+#
+# << MISSING >>
+# allow-html-description-help:
+# English text: If enabled, users can enter HTML in the event description field.  If not enabled, the HTML tags will be escaped so as to appear as plain text.  Warning: Enabling this feature will allow users to reference images on other websites.
+#
+#
+# << MISSING >>
+# Allow HTML in Description:
+#
+# << MISSING >>
+# allow-view-other-help:
+# English text: Specifies whether one user may view another user's calendar.
+#
+#
+# << MISSING >>
+# Allow viewing other user's calendars:
+#
+# << MISSING >>
+# allow-public-access-help:
+# English text: When enabled, the calendar can be used as a read-only public calendar that does not require users to login.
+#
+#
+# << MISSING >>
+# Allow public access:
+#
+# << MISSING >>
+# public-access-view-others-help:
+# English text: When access the system with public access, specifies whether the user can view the calendar of another calendar user.
+#
+#
+# << MISSING >>
+# Public access can view other users:
+#
+# << MISSING >>
+# public-access-can-add-help:
+# English text: When enabled, users that access the system through Public Access will be able to add new events, but they will not show up in the calendar until an administrator approves the new event.
+#
+#
+# << MISSING >>
+# Public access can add events:
+#
+# << MISSING >>
+# public-access-add-requires-approval-help:
+# English text: Specifies whether events added via the public access account require approval before being displayed.
+#
+#
+# << MISSING >>
+# Public access new events require approval:
+#
+# << MISSING >>
+# public-access-sees-participants-help:
+# English text: If enabled, users accessing the calendar from the public account will be able to see event participants if they view details of an event.
+#
+#
+# << MISSING >>
+# Public access can view participants:
+#
+# << MISSING >>
+# allow-view-add-help:
+# English text: A '+' icon will be included in views, allowing users to quickly add events to other users' calendars.
+#
+#
+# << MISSING >>
+# Include add event link in views:
+#
+# << MISSING >>
+# allow-external-users-help:
+# English text: Specifies whether a non-calendar user can be added to an event.  This allows non-calendar users to be listed as event participants.
+#
+#
+# << MISSING >>
+# Allow external users:
+#
+# << MISSING >>
+# external-can-receive-notification-help:
+# English text: When external users are enabled and email usage is enabled, external users can receive email notifications when the event is added, updated or delete (if the external user's email address is provided).
+#
+#
+# << MISSING >>
+# External users can receive email notifications:
+#
+# << MISSING >>
+# external-can-receive-reminder-help:
+# English text: When external users are enabled and email usage is enabled, external users can receive email reminders (if the external user's email address is provided).
+#
+#
+# << MISSING >>
+# External users can receive email reminders:
+#
+# << MISSING >>
+# remember-last-login-help:
+# English text: When enabled, the user's login will be filled in for them on the login page (but not the password), and the user's preferences will be loaded (including their preferred colors and language selection).
+#
+#
+# << MISSING >>
+# Remember last login:
+#
+# << MISSING >>
+# conflict-check-help:
+# English text: Check for event conflicts (two events scheduled for the same time for the same person).  If you set this to "Yes", you will still be able to schedule two events at the same time after confirming a warning. If you set this to "No", no checking for conflicts will be done.  You probably want to set this to "Yes", so conflict checking occurs.
+#
+#
+# << MISSING >>
+# Check for event conflicts:
+#
+# << MISSING >>
+# conflict-months-help:
+# English text: If conflict checking is in place ("Check for event conflicts" is set to "No"), this specifies how many months into the future we should check for conflicts.  If you find adding events is taking a long time to process, reduce this number.
+#
+#
+# << MISSING >>
+# Conflict checking months:
+#
+# << MISSING >>
+# conflict-check-override-help:
+# English text: Allows users to override event conflicts and schedule two or more events for the same time.
+#
+#
+# << MISSING >>
+# Allow users to override conflicts:
+#
+# << MISSING >>
+# limit-appts-help:
+# English text: Allows the system administrator to set a system-wide limit on the number of appointments a single user can have on any single day.
+#
+#
+# << MISSING >>
+# Limit number of timed events per day:
+#
+# << MISSING >>
+# limit-appts-number-help:
+# English text: Specifies the maximum number of timed events a user can have in a single day.
+#
+#
+# << MISSING >>
+# Maximum timed events per day:
+#
+# << MISSING >>
+# Plugins:
+#
+# << MISSING >>
+# plugins-enabled-help:
+# English text: Enable plugin applications.
+#
+#
+# << MISSING >>
+# Enable Plugins:
+#
+# << MISSING >>
+# plugins-sort-key-help:
+# English text: Specifies a sort key for the plugin.  This allows the plugins to appear in a specific order.
+#
+#
+# << MISSING >>
+# Plugin:
+#
+# << MISSING >>
+# Groups:
+#
+# << MISSING >>
+# groups-enabled-help:
+# English text: Enables group support, allowing users to select users by groups.
+#
+#
+# << MISSING >>
+# Groups enabled:
+#
+# << MISSING >>
+# user-sees-his-group-help:
+# English text: If enabled, users will not see calendar users that are not in at least one of their groups.
+#
+#
+# << MISSING >>
+# User sees only his groups:
+#
+# << MISSING >>
+# Categories:
+#
+# << MISSING >>
+# categories-enabled-help:
+# English text: Enables support for event categories.
+#
+#
+# << MISSING >>
+# Categories enabled:
+#
+# << MISSING >>
+# Nonuser:
+# English text: Nonuser Calendars
+#
+#
+# << MISSING >>
+# nonuser-enabled-help:
+# English text: If enabled, admins will have the option to add nonuser calendars
+#
+#
+# << MISSING >>
+# Nonuser enabled:
+# English text: Nonuser Calendars Enabled
+#
+#
+# << MISSING >>
+# nonuser-list-help:
+# English text: Where to display the nonuser calendars in the participant list
+#
+#
+# << MISSING >>
+# Nonuser list:
+# English text: Display in participants list at
+#
+#
+# << MISSING >>
+# Top:
+#
+# << MISSING >>
+# Bottom:
+#
+# << MISSING >>
+# Reports:
+#
+# << MISSING >>
+# reports-enabled-help:
+# English text: If enabled, users will see a "Reports" section at the bottom of each page and will be allowed to create custom reports.  Additionally, admin users can create global reports that will appear at the bottom of all users' pages.
+#
+#
+# << MISSING >>
+# Reports enabled:
+#
+# << MISSING >>
+# Subscribe/Publish:
+#
+# << MISSING >>
+# subscriptions-enabled-help:
+# English text: Specifies if remote users can subscribe to a WebCalendar user's calendar, allowing them to see the WebCalendar user's events in their iCal-enabled application (such as Apple's iCal or Mozilla Calendar).
+#
+#
+# << MISSING >>
+# Allow remote subscriptions:
+#
+# << MISSING >>
+# Email:
+#
+# << MISSING >>
+# email-enabled-help:
+# English text: Turn on or off all sending of email for notification and reminders.  Set to "no", if your server is not properly setup to send mail.
+#
+#
+# << MISSING >>
+# Email enabled:
+#
+# << MISSING >>
+# email-default-sender:
+# English text: Specifies the email address to specify as the sender when sending out reminders.
+#
+#
+# << MISSING >>
+# Default sender address:
+#
+# << MISSING >>
+# Default user settings:
+#
+# << MISSING >>
+# email-event-reminders-help:
+# English text: Specifies whether or not to send event reminders.
+#
+#
+# << MISSING >>
+# Event reminders:
+#
+# << MISSING >>
+# email-event-added:
+# English text: Specifies whether or not to send email notifications when an event is added to your calendar.
+#
+#
+# << MISSING >>
+# Events added to my calendar:
+#
+# << MISSING >>
+# email-event-updated:
+# English text: Specifies whether or not to send email notifications when an event is updated on your calendar.
+#
+#
+# << MISSING >>
+# Events updated on my calendar:
+#
+# << MISSING >>
+# email-event-deleted:
+# English text: Specifies whether or not to send email notifications when an event is removed from your calendar.
+#
+#
+# << MISSING >>
+# Events removed from my calendar:
+#
+# << MISSING >>
+# email-event-rejected:
+# English text: Specifies whether or not to send email notifications when a participant rejects an event that is on your calendar.
+#
+#
+# << MISSING >>
+# Event rejected by participant:
+colors-help: ¸ðµç »ö»óÀº "#RRGGBB" °°Àº 16Áø¼ö Çü½ÄÀ¸·Î Ç¥½ÃÇØ¾ß ÇÕ´Ï´Ù. "RR" Àº Àû»ö, "GG"´Â ³ì»ö, "BB"´Â û»öÀÇ 16Áø¼ö °ªÀÔ´Ï´Ù. 
+Colors: »ö»ó
+#
+# << MISSING >>
+# Allow user to customize colors:
+Document background: ¹è°æ »ö»ó
+#
+# << MISSING >>
+# Select:
+Document title: Á¦¸ñ »ö»ó
+#
+# << MISSING >>
+# Document text:
+#
+# << MISSING >>
+# Table grid color:
+#
+# << MISSING >>
+# Table header background:
+#
+# << MISSING >>
+# Table header text:
+Table cell background: Å×ÀÌºí ¼¿ ¹è°æ »ö»ó
+Table cell background for current day: ¿À´Ã ³¯Â¥ Ç¥½Ã »ö»ó
+#
+# << MISSING >>
+# Table cell background for weekends:
+#
+# << MISSING >>
+# Event popup background:
+#
+# << MISSING >>
+# Event popup text:
+
+
+###############################################
+# Page: activity_log.php
+#
+#
+# << MISSING >>
+# Activity Log:
+#
+# << MISSING >>
+# User:
+#
+# << MISSING >>
+# Calendar:
+Date: ÀÏÀÚ
+Time: ½Ã°¢
+#
+# << MISSING >>
+# Event:
+#
+# << MISSING >>
+# Action:
+#
+# << MISSING >>
+# Event created:
+#
+# << MISSING >>
+# Event approved:
+#
+# << MISSING >>
+# Event rejected:
+#
+# << MISSING >>
+# Event updated:
+#
+# << MISSING >>
+# Event deleted:
+#
+# << MISSING >>
+# Notification sent:
+#
+# << MISSING >>
+# Reminder sent:
+#
+# << MISSING >>
+# Database error:
+#
+# << MISSING >>
+# Previous:
+#
+# << MISSING >>
+# Next:
+
+
+###############################################
+# Page: add_entry.php
+#
+Invalid entry id: Ʋ¸° Ç׸ñ ¾ÆÀ̵ð
+#
+# << MISSING >>
+# This is a private event and may not be added to your calendar.:
+#
+# << MISSING >>
+# Error adding event:
+
+
+###############################################
+# Page: admin_handler.php
+#
+Error: ¿À·ù
+The following error occurred: ´ÙÀ½°ú °°Àº ¿À·ù ¹ß»ý:
+
+
+###############################################
+# Page: approve_entry.php
+#
+Error approving event: Çà»ç ½ÂÀÎ Áß ¿¡·¯
+
+
+###############################################
+# Page: category.php
+#
+#
+# << MISSING >>
+# Add:
+#
+# << MISSING >>
+# Category Name:
+#
+# << MISSING >>
+# Global:
+Delete: Áö¿ì±â
+Are you sure you want to delete this entry?: Á¤¸»·Î ÀÌ Ç׸ñÀ» Áö¿ì½Ã°Ú½À´Ï±î?
+#
+# << MISSING >>
+# Add New Category:
+
+
+###############################################
+# Page: category_handler.php
+#
+
+
+###############################################
+# Page: datesel.php
+#
+
+
+###############################################
+# Page: day.php
+#
+#
+# << MISSING >>
+# Admin mode:
+#
+# << MISSING >>
+# Assistant mode:
+Generate printer-friendly version: Àμâ¿ë È­¸é »ý¼º
+Printer Friendly: Àμâ¿ë È­¸é
+
+
+###############################################
+# Page: del_entry.php
+#
+Hello: ¾È³ç!
+#
+# << MISSING >>
+# An appointment has been canceled for you by:
+#
+# << MISSING >>
+# The subject was:
+Notification: Å뺸
+
+
+###############################################
+# Page: edit_entry.php
+#
+Edit Entry: Ç׸ñ ÆíÁý
+Add Entry: Ç׸ñ Ãß°¡
+brief-description-help: Çà»çÀÇ °£·«ÇÑ ¼³¸í(¾à 20ÀÚ)ÀÔ´Ï´Ù. ´Þ·Â»óÀÇ Çà»ç¸¦  ³ªÅ¸³À´Ï´Ù.
+Brief Description: ¿ä¾à ¼³¸í
+full-description-help: Çà»çÀÇ ÀÚ¼¼ÇÑ ¼³¸íÀÔ´Ï´Ù. 
+Full Description: »ó¼¼ ¼³¸í
+date-help: Çà»çÀÏÀ» ³ªÅ¸³À´Ï´Ù. 
+time-help: Çà»ç ½Ã°¢ÀÔ´Ï´Ù.<br /><i>ÀÌ Ç׸ñÀº ºñ¿öµÑ ¼ö ÀÖ½À´Ï´Ù.</i>
+am: am
+pm: pm
+#
+# << MISSING >>
+# Untimed event:
+#
+# << MISSING >>
+# Timed event:
+#
+# << MISSING >>
+# All day event:
+duration-help: Çà»ç±â°£ ¸í½Ã(ºÐ´ÜÀ§)<br /><i>ÀÌ Ç׸ñÀº ºñ¿öµÑ ¼ö ÀÖ½À´Ï´Ù.</i>
+Duration: ±â°£
+#
+# << MISSING >>
+# hours:
+priority-help: Çà»ç ¿ì¼±¼øÀ§ ¸í½Ã. ³ôÀº ¿ì¼±¼øÀ§ÀÇ Çà»ç´Â ±½Àº ±Û¾¾·Î Ç¥½ÃµË´Ï´Ù.
+Priority: ¿ì¼± ¼øÀ§
+Low: ³·À½
+Medium: Áß°£
+High: ³ôÀ½
+access-help: Çà»çÀÇ Á¢±Ù ¼öÁØÀ» ¸í½Ã.<br /> <i>°ø¿ë</i>: ¸ðµç »ç¶÷ÀÌ Çà»çÀÇ ¼¼ºÎ ³»¿ë±îÁö º¼ ¼ö ÀÖÀ½.  <br /><i>ºñ¹Ð</i>: Ÿ »ç¿ëÀÚ´Â ÀÏÀÚ¿Í ½Ã°¢À» º¼ ¼ö ÀÖÀ¸³ª ¼¼ºÎ »çÇ×Àº º¼ ¼ö ¾øÀ½.
+Access: Á¢±Ù
+Public: °ø¿ë
+Confidential: ºñ¹Ð
+#
+# << MISSING >>
+# category-help:
+# English text: Specifies the category of the event.
+#
+#
+# << MISSING >>
+# Category:
+#
+# << MISSING >>
+# None:
+#
+# << MISSING >>
+# days:
+#
+# << MISSING >>
+# before event:
+participants-help: Âü°¡ÀÚÀÇ ¸ñ·Ï Ç¥½Ã.
+Participants: Âü°¡ÀÚ
+#
+# << MISSING >>
+# external-participants-help:
+# English text: Specifies a list of participants for the event that are not calendar users.  The users should be listed one per line and can include an email address.  If an email address is specified, the user is eligible to receive notications and reminders.
+#
+#
+# << MISSING >>
+# External Participants:
+#
+# << MISSING >>
+# repeat-type-help:
+# English text: Select how often the event should repeat.<i>Monthly (by day)</i> allows an event to repeat on the 1st Monday of the month, 3rd Thursday of the month, etc.  <i>Monthly (by date)</i> allows an event to repeat on the same day of the month.
+#
+#
+# << MISSING >>
+# Repeat Type:
+#
+# << MISSING >>
+# Daily:
+#
+# << MISSING >>
+# Weekly:
+#
+# << MISSING >>
+# Monthly:
+#
+# << MISSING >>
+# by day:
+#
+# << MISSING >>
+# by day (from end):
+#
+# << MISSING >>
+# by date:
+#
+# << MISSING >>
+# Yearly:
+#
+# << MISSING >>
+# repeat-end-date-help:
+# English text: Specifies the date the event should repeat until.
+#
+#
+# << MISSING >>
+# Repeat End Date:
+#
+# << MISSING >>
+# Use end date:
+#
+# << MISSING >>
+# repeat-day-help:
+# English text: Specifies which days of the week the event should repeat on.  This is for use only when <i>Repeat Type</i> is set to <i>Weekly</i>.
+#
+#
+# << MISSING >>
+# Repeat Day:
+#
+# << MISSING >>
+# for weekly:
+Tuesday: È­¿äÀÏ
+Wednesday: ¼ö¿äÀÏ
+Thursday: ¸ñ¿äÀÏ
+Friday: ±Ý¿äÀÏ
+Saturday: Åä¿äÀÏ
+#
+# << MISSING >>
+# repeat-frequency-help:
+# English text: Specifies how often the event should repeat.  The default 1 indicates it should occur every time.  Specifying 2 will make the event occur every other week (if <i>Repeat Type</i> is set to <i>Weekly</i>), every other month (if <i>Repeat Type</i> is set to <i>Monthly</i>), etc.
+#
+#
+# << MISSING >>
+# Frequency:
+Delete entry: Ç׸ñ Áö¿ì±â
+You are not authorized to edit this entry: ÀÌ Ç׸ñÀ» ÆíÁýÇÒ ±ÇÇÑÀÌ ¾ø½À´Ï´Ù.
+
+
+###############################################
+# Page: edit_layer.php
+#
+#
+# << MISSING >>
+# Edit Layer:
+#
+# << MISSING >>
+# Add Layer:
+#
+# << MISSING >>
+# Source:
+#
+# << MISSING >>
+# Color:
+#
+# << MISSING >>
+# Duplicates:
+#
+# << MISSING >>
+# Show layer events that are the same as your own:
+#
+# << MISSING >>
+# Are you sure you want to delete this layer?:
+#
+# << MISSING >>
+# Delete layer:
+
+
+###############################################
+# Page: edit_layer_handler.php
+#
+#
+# << MISSING >>
+# You cannot create a layer for yourself:
+#
+# << MISSING >>
+# You can only create one layer for each user:
+
+
+###############################################
+# Page: edit_user.php
+#
+Edit User: »ç¿ëÀÚ ÆíÁý
+Add User: »ç¿ëÀÚ Ãß°¡
+#
+# << MISSING >>
+# Username:
+First Name: À̸§
+Last Name: ¼º
+E-mail address: E-mail ÁÖ¼Ò
+Password: ºñ¹Ð¹øÈ£
+again: again
+Admin: °ü¸®
+#
+# << MISSING >>
+# Disabled for demo:
+Change Password: ºñ¹Ð¹øÈ£ º¯°æ
+New Password: »õ ºñ¹Ð¹øÈ£
+Set Password: ºñ¹Ð¹øÈ£ ¼³Á¤
+
+
+###############################################
+# Page: edit_user_handler.php
+#
+#
+# << MISSING >>
+# Deleting users not supported:
+The passwords were not identical: The passwords were not identical
+You have not entered a password: ¾ÏÈ£¸¦ ÀÔ·ÂÇÏÁö ¾Ê¾Ò½À´Ï´Ù.
+
+
+###############################################
+# Page: export.php
+#
+#
+# << MISSING >>
+# Export:
+#
+# << MISSING >>
+# Export format:
+#
+# << MISSING >>
+# Palm Pilot:
+#
+# << MISSING >>
+# Export all dates:
+#
+# << MISSING >>
+# Start date:
+#
+# << MISSING >>
+# End date:
+#
+# << MISSING >>
+# Modified since:
+
+
+###############################################
+# Page: export_handler.php
+#
+#
+# << MISSING >>
+# export format not defined or incorrect:
+
+
+###############################################
+# Page: group_edit.php
+#
+#
+# << MISSING >>
+# Unnamed Group:
+#
+# << MISSING >>
+# Add Group:
+#
+# << MISSING >>
+# Edit Group:
+#
+# << MISSING >>
+# Group name:
+Updated: °»½ÅµÈ
+Created by: ÀÛ¼ºÀÚ:
+Users: »ç¿ëÀÚ
+
+
+###############################################
+# Page: group_edit_handler.php
+#
+#
+# << MISSING >>
+# You must specify a group name:
+
+
+###############################################
+# Page: groups.php
+#
+#
+# << MISSING >>
+# Add New Group:
+
+
+###############################################
+# Page: icalfb.php
+#
+
+
+###############################################
+# Page: pref.php
+#
+Preferences: ȯ°æ ¼³Á¤
+#
+# << MISSING >>
+# to modify the preferences for the Public Access calendar:
+#
+# << MISSING >>
+# tz-help:
+# English text: Specifies how many hours to adjust the time from server time to local time.
+#
+#
+# << MISSING >>
+# Timezone Offset:
+#
+# << MISSING >>
+# Add N hours to:
+#
+# << MISSING >>
+# Subtract N hours from:
+#
+# << MISSING >>
+# same as:
+#
+# << MISSING >>
+# server time:
+#
+# << MISSING >>
+# Default Category:
+#
+# << MISSING >>
+# When I am the boss:
+#
+# << MISSING >>
+# Email me event notification:
+#
+# << MISSING >>
+# I want to approve events:
+#
+# << MISSING >>
+# allow-remote-subscriptions-help:
+# English text: Specifies if remote users can subscribe to your calendar, allowing them to see your events in a iCal-enabled application (such as Apple's iCal or Mozilla Calendar).
+#
+#
+# << MISSING >>
+# remote-subscriptions-url-help:
+# English text: Displays the URL remote users should use to subscribe to your calendar.
+#
+#
+# << MISSING >>
+# URL:
+Sun: ÀÏ 
+Mon: ¿ù 
+Tue: ȭ
+Wed: ¼ö
+Thu: ¸ñ
+Fri: ±Ý
+Sat: Åä
+Save Preferences: ȯ°æ¼³Á¤ ÀúÀå
+
+
+###############################################
+# Page: help_bug.php
+#
+#
+# << MISSING >>
+# Report Bug:
+
+
+###############################################
+# Page: help_edit_entry.php
+#
+Adding/Editing Calendar Entries: ´Þ·Â Ç׸ñÀÇ Ãß°¡/ÆíÁý
+
+
+###############################################
+# Page: help_index.php
+#
+Help Index: µµ¿ò¸» ¸ñÂ÷
+#
+# << MISSING >>
+# Layers:
+#
+# << MISSING >>
+# Import:
+
+
+###############################################
+# Page: help_layers.php
+#
+#
+# << MISSING >>
+# Layers are useful for displaying other users' events in your own calendar.  You can specifiy the user and the color the events will be displayed in.:
+#
+# << MISSING >>
+# Add/Edit/Delete:
+#
+# << MISSING >>
+# Clicking the Edit Layers link in the admin section at the bottom of the page will allow you to add/edit/delete layers.:
+#
+# << MISSING >>
+# Specifies the user that you would like to see displayed in your calendar.:
+#
+# << MISSING >>
+# The text color of the new layer that will be displayed in your calendar.:
+#
+# << MISSING >>
+# If checked, events that are duplicates of your events will be shown.:
+#
+# << MISSING >>
+# Disabling:
+#
+# << MISSING >>
+# Press the Disable Layers link in the admin section at the bottom of the page to turn off layers.:
+#
+# << MISSING >>
+# Enabling:
+#
+# << MISSING >>
+# Press the Enable Layers link in the admin section at the bottom of the page to turn on layers.:
+
+
+###############################################
+# Page: help_admin.php
+#
+
+
+###############################################
+# Page: week.php
+#
+#
+# << MISSING >>
+# cont.:
+
+
+###############################################
+# Page: layers.php
+#
+#
+# << MISSING >>
+# to modify the layers settings for the:
+#
+# << MISSING >>
+# Layers are currently:
+#
+# << MISSING >>
+# Enabled:
+#
+# << MISSING >>
+# Disabled:
+#
+# << MISSING >>
+# Disable Layers:
+#
+# << MISSING >>
+# Enable Layers:
+#
+# << MISSING >>
+# Layer:
+#
+# << MISSING >>
+# Edit layer:
+#
+# << MISSING >>
+# Add layer:
+
+
+###############################################
+# Page: layers_toggle.php
+#
+
+
+###############################################
+# Page: list_unapproved.php
+#
+View this entry: Ç׸ñ º¸±â
+Approve this entry?: ÀÌ Ç׸ñÀ» ½ÂÀÎÇÔ.
+#
+# << MISSING >>
+# Approve/Confirm:
+#
+# << MISSING >>
+# Reject this entry?:
+#
+# << MISSING >>
+# Reject:
+#
+# << MISSING >>
+# No unapproved events for:
+Unapproved Events: ¹Ì½ÂÀÎ Çà»ç
+#
+# << MISSING >>
+# Public Access:
+
+
+###############################################
+# Page: view_entry.php
+#
+#
+# << MISSING >>
+# every:
+#
+# << MISSING >>
+# 2nd:
+#
+# << MISSING >>
+# 3rd:
+#
+# << MISSING >>
+# 4th:
+#
+# << MISSING >>
+# 5th:
+#
+# << MISSING >>
+# 1st:
+#
+# << MISSING >>
+# last:
+Description: ¼³¸í
+#
+# << MISSING >>
+# Status:
+#
+# << MISSING >>
+# Waiting for approval:
+#
+# << MISSING >>
+# Deleted:
+#
+# << MISSING >>
+# Rejected:
+#
+# << MISSING >>
+# External User:
+Approve/Confirm entry: ÀÌ Ç׸ñÀ» ½ÂÀÎ/È®ÀÎÇÔ
+#
+# << MISSING >>
+# Reject entry:
+#
+# << MISSING >>
+# Set category:
+#
+# << MISSING >>
+# Edit repeating entry for all dates:
+#
+# << MISSING >>
+# Edit entry for this date:
+This will delete this entry for all users.: ¸ðµç »ç¿ëÀڵ鿡¼­µµ ÀÌ Ç׸ñÀÌ Áö¿öÁý´Ï´Ù.
+#
+# << MISSING >>
+# Delete repeating event for all dates:
+#
+# << MISSING >>
+# Delete entry only for this date:
+Edit entry: Ç׸ñ ÆíÁý
+#
+# << MISSING >>
+# This will delete the entry from your calendar.:
+#
+# << MISSING >>
+# Do you want to add this entry to your calendar?:
+#
+# << MISSING >>
+# This will add the entry to your calendar.:
+#
+# << MISSING >>
+# Add to My Calendar:
+#
+# << MISSING >>
+# Email all participants:
+#
+# << MISSING >>
+# Show activity log:
+#
+# << MISSING >>
+# Hide activity log:
+#
+# << MISSING >>
+# Export this entry to:
+
+
+###############################################
+# Page: view_v.php
+#
+
+
+###############################################
+# Page: month.php
+#
+
+
+###############################################
+# Page: pref_handler.php
+#
+
+
+###############################################
+# Page: reject_entry.php
+#
+#
+# << MISSING >>
+# An appointment has been rejected by:
+#
+# << MISSING >>
+# The description is:
+Title: À¥ Ķ¸°´õ
+
+
+###############################################
+# Page: search.php
+#
+Search: °Ë»ö
+#
+# << MISSING >>
+# Advanced Search:
+Keywords: °Ë»ö¾î
+
+
+###############################################
+# Page: search_handler.php
+#
+You must enter one or more search keywords: °Ë»ö¾î¸¦ ÀÔ·ÂÇÏ¼Å¾ß ÇÕ´Ï´Ù.
+Search Results: °Ë»ö °á°ú
+match found: Ç׸ñ ¹ß°ß
+matches found: Ç׸ñ ¹ß°ß
+No matches found: ãÀº Ç׸ñ ¾øÀ½
+
+
+###############################################
+# Page: select_user.php
+#
+View Another User's Calendar: ´Ù¸¥ »ç¿ëÀÚÀÇ ´Þ·Â º¸±â
+Go: ½ÃÀÛ
+
+
+###############################################
+# Page: publish.php
+#
+
+
+###############################################
+# Page: users.php
+#
+denotes administrative user: °ü¸®ÀÚ¸¦ ³ªÅ¸³¿
+Add New User: »õ »ç¿ëÀÚ Ãß°¡
+
+
+###############################################
+# Page: usersel.php
+#
+#
+# << MISSING >>
+# All:
+#
+# << MISSING >>
+# Reset:
+#
+# << MISSING >>
+# Remove:
+#
+# << MISSING >>
+# Ok:
+#
+# << MISSING >>
+# Cancel:
+
+
+###############################################
+# Page: import.php
+#
+#
+# << MISSING >>
+# This form will allow you to import entries from the Palm Desktop Datebook.:
+#
+# << MISSING >>
+# Exclude private records:
+#
+# << MISSING >>
+# Datebook File:
+#
+# << MISSING >>
+# This form will import vCalendar (.vcs) 1.0 events:
+#
+# << MISSING >>
+# vCal File:
+#
+# << MISSING >>
+# This form will import iCalendar (.ics) events:
+#
+# << MISSING >>
+# iCal File:
+#
+# << MISSING >>
+# Overwrite Prior Import:
+
+
+###############################################
+# Page: year.php
+#
+
+
+###############################################
+# Page: view_d.php
+#
+
+
+###############################################
+# Page: view_m.php
+#
+
+
+###############################################
+# Page: view_w.php
+#
+
+
+###############################################
+# Page: views.php
+#
+#
+# << MISSING >>
+# Views:
+#
+# << MISSING >>
+# Add New View:
+
+
+###############################################
+# Page: views_edit.php
+#
+#
+# << MISSING >>
+# Unnamed View:
+#
+# << MISSING >>
+# Add View:
+#
+# << MISSING >>
+# Edit View:
+#
+# << MISSING >>
+# View Name:
+#
+# << MISSING >>
+# View Type:
+#
+# << MISSING >>
+# Week (Users horizontal):
+#
+# << MISSING >>
+# Week (Users vertical):
+#
+# << MISSING >>
+# Week (Timebar):
+#
+# << MISSING >>
+# Month (side by side):
+#
+# << MISSING >>
+# Month (on same calendar):
+
+
+###############################################
+# Page: nonusers.php
+#
+#
+# << MISSING >>
+# NONUSER_PREFIX not set:
+# English text: NONUSER_PREFIX has not been set in config.php.
+#
+#
+# << MISSING >>
+# NonUser:
+# English text: NonUser Calendars
+#
+#
+# << MISSING >>
+# Calendar ID:
+#
+# << MISSING >>
+# Add New NonUser Calendar:
+
+
+###############################################
+# Page: nonusers_handler.php
+#
+
+
+###############################################
+# Page: view_l.php
+#
+
+
+###############################################
+# Page: help_pref.php
+#
+#
+# << MISSING >>
+# default-category-help:
+# English text: Specifies the category a new event should default to.
+#
+
+
+###############################################
+# Page: report.php
+#
+Private: °³Àοë
+#
+# << MISSING >>
+# Approved:
+#
+# << MISSING >>
+# Unknown:
+#
+# << MISSING >>
+# to manage reports for the Public Access calendar:
+#
+# << MISSING >>
+# Add new report:
+#
+# << MISSING >>
+# Invalid report id:
+#
+# << MISSING >>
+# Manage Reports:
+
+
+###############################################
+# Page: login.php
+#
+You must enter a login and password: ¾ÆÀ̵ð¿Í ºñ¹Ð¹øÈ£¸¦ ÀÔ·ÂÇØ¾ß ÇÕ´Ï´Ù.
+Save login via cookies so I don't have to login next time: ´ÙÀ½¹ø¿¡ ·Î±×ÀÎ ÇÒ ÇÊ¿ä°¡ ¾øµµ·Ï ·Î±×ÀÎ Á¤º¸ ÀúÀå.
+Login: ·Î±×ÀÎ
+#
+# << MISSING >>
+# Access public calendar:
+cookies-note: <b>ÁÖ:</b> ÄíÅ°¸¦ ´Ù·ê ¼ö ÀÖ´Â ºê¶ó¿ìÀú°¡ ÇÊ¿äÇÕ´Ï´Ù.
+
+
+###############################################
+# Page: views_edit_handler.php
+#
+#
+# << MISSING >>
+# You must specify a view name:
+
+
+###############################################
+# Page: week_details.php
+#
+New Entry: »õ Ç׸ñ
+
+
+###############################################
+# Page: import_handler.php
+#
+#
+# << MISSING >>
+# Import Results:
+#
+# << MISSING >>
+# Events successfully imported:
+#
+# << MISSING >>
+# Events from prior import marked as deleted:
+#
+# << MISSING >>
+# Conflicting events:
+#
+# << MISSING >>
+# Errors:
+Back to My Calendar: ³» ´Þ·ÂÀ¸·Î µ¹¾Æ°¡±â
+#
+# << MISSING >>
+# There was an error parsing the import file or no events were returned:
+#
+# << MISSING >>
+# The import file contained no data:
+The following conflicts with the suggested time: ´ÙÀ½ »çÇ×Àº Á¦½ÃµÈ ½Ã°£°ú °ãĨ´Ï´Ù.
+Unnamed Event: À̸§¾ø´Â Çà»ç
+#
+# << MISSING >>
+# Scheduling Conflict:
+conflicts with the following existing calendar entries: ´ÙÀ½°ú °°Àº Ç׸ñ°ú °ãĨ´Ï´Ù.
+#
+# << MISSING >>
+# Event Imported:
+
+
+###############################################
+# Page: edit_report.php
+#
+#
+# << MISSING >>
+# Tomorrow:
+#
+# << MISSING >>
+# Today:
+#
+# << MISSING >>
+# Yesterday:
+#
+# << MISSING >>
+# Day before yesterday:
+#
+# << MISSING >>
+# Next week:
+#
+# << MISSING >>
+# This week:
+#
+# << MISSING >>
+# Last week:
+#
+# << MISSING >>
+# Week before last:
+#
+# << MISSING >>
+# Next week and week after:
+#
+# << MISSING >>
+# This week and next week:
+#
+# << MISSING >>
+# Last week and this week:
+#
+# << MISSING >>
+# Last two weeks:
+#
+# << MISSING >>
+# Next month:
+#
+# << MISSING >>
+# This month:
+#
+# << MISSING >>
+# Last month:
+#
+# << MISSING >>
+# Month before last:
+#
+# << MISSING >>
+# Next year:
+#
+# << MISSING >>
+# This year:
+#
+# << MISSING >>
+# Last year:
+#
+# << MISSING >>
+# Year before last:
+#
+# << MISSING >>
+# Unnamed Report:
+#
+# << MISSING >>
+# Add Report:
+#
+# << MISSING >>
+# Edit Report:
+#
+# << MISSING >>
+# Report name:
+Current User: Çö »ç¿ëÀÚ
+#
+# << MISSING >>
+# Include link in trailer:
+#
+# << MISSING >>
+# Include standard header/trailer:
+#
+# << MISSING >>
+# Date range:
+#
+# << MISSING >>
+# Include previous/next links:
+#
+# << MISSING >>
+# Include empty dates:
+#
+# << MISSING >>
+# Template variables:
+#
+# << MISSING >>
+# Page template:
+#
+# << MISSING >>
+# Day template:
+#
+# << MISSING >>
+# Event template:
+#
+# << MISSING >>
+# Are you sure you want to delete this report?:
+
+
+###############################################
+# Page: assistant_edit.php
+#
+#
+# << MISSING >>
+# Assistants:
+#
+# << MISSING >>
+# Yours assistants:
+
+
+###############################################
+# Page: view_t.php
+#
+
+
+###############################################
+# Page: assistant_edit_handler.php
+#
+
+
+###############################################
+# Page: adminhome.php
+#
+Account: °èÁ¤
+#
+# << MISSING >>
+# NonUser Calendars:
+#
+# << MISSING >>
+# Delete Events:
+#
+# << MISSING >>
+# Public Preferences:
+#
+# << MISSING >>
+# Unapproved Public Events:
+#
+# << MISSING >>
+# Administrative Tools:
+
+
+###############################################
+# Page: purge.php
+#
+#
+# << MISSING >>
+# Purging events for:
+#
+# << MISSING >>
+# Finished:
+#
+# << MISSING >>
+# Delete all events before:
+#
+# << MISSING >>
+# Check box to delete <b>ALL</b> events for a user:
+#
+# << MISSING >>
+# Are you sure you want to delete events for:
+
+
+###############################################
+# Page: help_import.php
+#
+#
+# << MISSING >>
+# Palm Desktop:
+#
+# << MISSING >>
+# It should be located in your Palm directory in <tt>datebook/datebook.dat</tt> in a subdirectory named by your username.:
+#
+# << MISSING >>
+# The following entries will not be imported:
+#
+# << MISSING >>
+# Entries older than the current date:
+#
+# << MISSING >>
+# Entries created in the Palm Desktop that have not been HotSync'd:
+#
+# << MISSING >>
+# Anything imported from Palm will be overwritten during the next import (unless the event date has passed).:
+#
+# << MISSING >>
+# Therefore, updates should be made in the Palm Desktop.:
+#
+# << MISSING >>
+# vCal:
+#
+# << MISSING >>
+# The following formats have been tested:
+#
+# << MISSING >>
+# Palm Desktop 4:
+#
+# << MISSING >>
+# Lotus Organizer 6:
+#
+# << MISSING >>
+# Microsoft Outlook 2002:
+#
+# << MISSING >>
+# iCalendar:
+#
+# << MISSING >>
+# Enabling <b>Overwrite Prior Import</b> will cause events imported previously that used the same UID as an event from the new import file to be marked as deleted.  This should allow an updated iCalendar file to be imported without creating duplicates.:
+
+
+###############################################
+# Page: edit_report_handler.php
+#
+#
+# << MISSING >>
+# Variable N not found:
+
+
+###############################################
+# Page: edit_entry_handler.php
+#
+A new appointment has been made for you by: »õ ¾à¼ÓÀÌ »ý¼ºµÇ¾ú½À´Ï´Ù. »ý¼ºÀÚ:
+#
+# << MISSING >>
+# An appointment has been updated by:
+The subject is: ÁÖÁ¦´Â
+Please look on: ´ÙÀ½À» »ìÆ캼 °Í-
+to accept or reject this appointment: ÀÌ ¾à¼ÓÀ» ¼ö¶ôÇϰųª °ÅÀý
+to view this appointment: ÀÌ ¾à¼ÓÀ» º¸±â
+Your suggested time of: Á¦¾ÈÇÑ ½Ã°£
+
+
+###############################################
+# Page: set_entry_cat.php
+#
+#
+# << MISSING >>
+# You have not added any categories:
+#
+# << MISSING >>
+# Set Category:
+
+
+###############################################
+# Page: edit_template.php
+#
+#
+# << MISSING >>
+# Edit Custom Script/Stylesheet:
+#
+# << MISSING >>
+# Edit Custom Header:
+#
+# << MISSING >>
+# Edit Custom Trailer:
+
+
+###############################################
+# Page: includes/trailer.php
+#
+Go to: °¡±â
+#
+# << MISSING >>
+# My Calendar:
+#
+# << MISSING >>
+# Logout:
+Another User's Calendar: ´Ù¸¥ »ç¿ëÀÚ ´Þ·Â
+Add New Entry: »õ Ç׸ñ Ãß°¡
+#
+# << MISSING >>
+# Manage Views:
+#
+# << MISSING >>
+# Manage calendar of:
+
+
+###############################################
+# Page: includes/connect.php
+#
+
+
+###############################################
+# Page: includes/user.php
+#
+#
+# << MISSING >>
+# Invalid login:
+#
+# << MISSING >>
+# Invalid user login:
+
+
+###############################################
+# Page: includes/site_extras.php
+#
+#
+# << MISSING >>
+# Send Reminder:
+
+
+###############################################
+# Page: includes/translate.php
+#
+
+
+###############################################
+# Page: includes/user-ldap.php
+#
+
+
+###############################################
+# Page: includes/user-nis.php
+#
+
+
+###############################################
+# Page: includes/help_trailer.php
+#
+
+
+###############################################
+# Page: includes/dbtable.php
+#
+
+
+###############################################
+# Page: includes/init.php
+#
+
+
+###############################################
+# Page: includes/functions.php
+#
+This event is confidential: ÀÌ Çà»ç´Â ºñ¹ÐÇ׸ñÀÔ´Ï´Ù.
+#
+# << MISSING >>
+# exceeds limit of XXX events per day:
+#
+# << MISSING >>
+# You have XXX unapproved events:
+January: 1¿ù
+February: 2¿ù
+March: 3¿ù
+April: 4¿ù
+May_: 5¿ù
+June: 6¿ù
+July: 7¿ù
+August: 8¿ù
+September: 9¿ù
+October: 10¿ù
+November: 11¿ù
+Jan: 1¿ù
+Feb: 2¿ù
+Mar: 3¿ù
+Apr: 4¿ù
+May: 5¿ù
+Jun: 6¿ù
+Jul: 7¿ù
+Aug: 8¿ù
+Sep: 9¿ù
+Oct: 10¿ù
+Nov: 11¿ù
+Dec: 12¿ù
+
+
+###############################################
+# Page: includes/js/admin.php
+#
+#
+# << MISSING >>
+# Server URL is required:
+#
+# << MISSING >>
+# Server URL must end with '/':
+Invalid color for document background: ¹è°æ »ö»ó Ʋ¸²
+Invalid color for document title: Á¦¸ñ »ö»ó Ʋ¸²
+Invalid color for table cell background: Å×ÀÌºí ¼¿ ¹è°æ»ö Ʋ¸²
+#
+# << MISSING >>
+# Invalid color for table grid:
+#
+# << MISSING >>
+# Invalid color for table header background:
+#
+# << MISSING >>
+# Invalid color for table text background:
+#
+# << MISSING >>
+# Invalid color for event popup background:
+#
+# << MISSING >>
+# Invalid color for event popup text:
+Invalid color for table cell background for today: ¿À´Ã ³¯Â¥ Ç¥½Ã »ö»ó Ʋ¸²
+Color format should be '#RRGGBB': »ö»ó Çü½ÄÀº '#RRGGBB' À̾î¾ß ÇÕ´Ï´Ù. ¿¹)"#FF0000" (»¡°­)
+
+
+###############################################
+# Page: includes/js/edit_entry.php
+#
+You have not entered a Brief Description: ¿ä¾à ¼³¸íÀ» ÀÔ·ÂÇÏÁö ¾Ê¾Ò½À´Ï´Ù.
+You have not entered a valid time of day: À¯È¿ÇÑ ÀÏÀÚ/½Ã°¢ÀÌ ¾Æ´Õ´Ï´Ù.
+#
+# << MISSING >>
+# The time you have entered begins before your preferred work hours.  Is this correct?:
+
+
+###############################################
+# Page: includes/js/edit_layer.php
+#
+#
+# << MISSING >>
+# Invalid color:
+
+
+###############################################
+# Page: includes/js/pref.php
+#
+
+
+###############################################
+# Page: tools/send_reminders.php
+#
+#
+# << MISSING >>
+# This is a reminder for the event detailed below.:
+#
+# << MISSING >>
+# Reminder:

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Norwegian.txt
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Norwegian.txt	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Norwegian.txt	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,1044 @@
+# Use this as a starting point to translate this application into
+# another language.  The format is "English text: translated text"
+# There cannot be a ":" in the English text.
+#
+# Original translation: Pål Løberg/Magni Onsøien <initio at initio.no>
+#
+# Last update: 3 July 2002 by Hans Fredrik Nordhaug <hansfn at users.sourceforge.net>
+#  -> http://sourceforge.net/tracker/?group_id=3870&atid=303870&func=detail&aid=576931
+# Last update: 26 February 2003 by Hans Fredrik Nordhaug <hansfn at users.sourceforge.net>
+#  -> http://sourceforge.net/tracker/?group_id=3870&atid=303870&func=detail&aid=693581
+# Last update: 30 October 2003 by Hans Fredrik Nordhaug <hansfn at users.sourceforge.net>
+#  -> http://sourceforge.net/tracker/?group_id=3870&atid=303870&func=detail&aid=832915
+# Last update: 22 March 2004 by Hans Fredrik Nordhaug <hansfn at users.sourceforge.net>
+#  -> http://sourceforge.net/tracker/?group_id=3870&atid=303870&func=detail&aid=920957
+# Last update: 3 August 2004 by Hans Fredrik Nordhaug <hansfn at users.sourceforge.net>
+#  -> http://sourceforge.net/tracker/?group_id=3870&atid=303870&func=detail&aid=1002588
+# Last update: 8 January 2005 by Hans Fredrik Nordhaug <hansfn at users.sourceforge.net>
+#  -> http://sourceforge.net/tracker/?group_id=3870&atid=303870&func=detail&aid=1098423
+# Last update: 25 April 2005 by Hans Fredrik Nordhaug <hansfn at users.sourceforge.net>
+#  -> http://sourceforge.net/tracker/?group_id=3870&atid=303870&func=detail&aid=1189754
+# Last update: 18 May 2005 by Hans Fredrik Nordhaug <hansfn at users.sourceforge.net>
+#  -> http://sourceforge.net/tracker/?group_id=3870&atid=303870&func=detail&aid=1204204
+# Last update: 9 Jan 2006 by Hans Fredrik Nordhaug <hansfn at users.sourceforge.net>
+#  -> http://sourceforge.net/tracker/?group_id=3870&atid=303870&func=detail&aid=1400320
+
+
+###############################################
+# Specify a charset (will be sent within meta tag for each page)
+#
+charset: iso-8859-1
+
+
+
+###############################################
+# Page: activity_log.php
+#
+Activity Log: Aktivitetslogg
+Admin: Admin
+User: Bruker
+Calendar: Kalender
+Date: Dato
+Time: Klokken
+Event: Aktitivitet
+Action: Handling
+Event created: Aktivitet lagd
+Event approved: Aktivitet godkjent
+Event rejected: Aktivitet avvist
+Event updated: Aktivitet oppdatert
+Event deleted: Aktivitet slettet
+Notification sent: Medling sendt
+Reminder sent: Påminnelse sendt
+Database error: Feil i databasen
+Previous: Forrige
+Events: Aktiviteter
+Next: Neste
+
+
+###############################################
+# Page: add_entry.php
+#
+Invalid entry id: Ugyldig avtale-ID
+This is a private event and may not be added to your calendar.: Dette er en privat avtale og kan ikke legges til din kalender.
+Error adding event: Feil ved innlegging av avtale
+
+
+###############################################
+# Page: admin_handler.php
+#
+You are not authorized: Du har ikke tillatelse
+Error: Feil
+The following error occurred: Følgende feil oppstod
+
+
+###############################################
+# Page: adminhome.php
+#
+System Settings: Systeminnstillinger
+Preferences: Innstillinger
+Users: Brukere
+Account: Konto
+Assistants: Assistenter
+Categories: Kategorier
+Views: Oversikter
+Layers: Lag
+Reports: Rapporter
+Delete Events: Slett aktiviteter
+Public Preferences: Offentlige innstillinger
+Unapproved Public Events: Ikke-godkjente offentlige aktiviteter
+Administrative Tools: Administrasjonsverktøy
+
+
+###############################################
+# Page: admin.php
+#
+Help: Hjelp
+Note: OBS
+Your user preferences: Dine brukerpreferanser
+may be affecting the appearance of this page.: kan påvirke fremvisningen av denne siden
+Click here: Klikk her
+to not use your user preferences when viewing this page: for å ikke bruke dine brukerpreferanser når du ser på denne siden
+are being ignored while viewing this page.: blir ignorert når du ser på denne siden.
+to load your user preferences when viewing this page: for å laste inn dine brukerpreferanser når du ser på denne siden
+Save: Lagre
+Settings: Innstillinger
+Public Access: Offentlig tilgang
+Groups: Grupper
+NonUser Calendars: Ikke-bruker kalendere
+Other: Andre
+Email: E-post
+colors-help: Alle farger skal skrives inn som #RRGGBB hvor RR er hexkoden for rødt, GG er hexkoden for grønn og BB er hexkoden for den blå fargeen.
+Colors: Farger
+app-name-help: Setter navnet på programmet. Dette vil vises i nettlesertittelen for alle sider.
+Application Name: Programnavn
+server-url-help: Setter base-URLen for programmet. Denne vil bli inkludert ved utsending av påminnelser på e-post.
+Server URL: URL for serveren
+language-help: Angir hvilket språk som skal brukes.
+Language: Språk
+Your browser default language is: Standardspråk i nettleseren din er
+fonts-help: Angir en liste med systemskrifter som skal brukes (som "Arial, Helvetica")
+Fonts: Skrifter
+custom-script-help: Tillat innsetting av egendefinert skript eller stilsett i HTML "head"-seksjonen på hver side.
+Custom script/stylesheet: Egendefinert skript/stilsett
+Yes: Ja
+No: Nei
+Edit: Rediger
+custom-header-help: Tillatt innsetting av egendefinert HTML-kode på toppen av hver side. 
+Custom header: Egendefinert hode
+custom-trailer-help: Tillatt innsetting av egendefinert HTML-kode på slutten av hver side.
+Custom trailer: Egendefinert fot
+preferred-view-help: Angir standardvisning (dag, uke, måned eller år).
+Preferred view: Foretrukket visning
+Day: Dag
+Week: Uke
+Month: Måned
+Year: År
+display-weekends-help: Inkluder helg når uker skal vises
+Display weekends in week view: Viser helg i ukevisning
+yearly-shows-events-help: Vis dager med aktiviteter i fetskrift for årsvisning.
+Display days with events in bold in month and year views: Vis dager med aktiviteter i fetskrift for måneds- og årsvisning.
+display-desc-print-day-help: Inkluder aktivitetsbeskrivelser i utskriftsvennlig versjon av dagvisning.
+Display description in printer day view: Vis aktivitetsbeskrivelser i utskriftsvennlig dagvisning
+date-format-help: Angir datoformatet.
+Date format: Datoformat
+December: Desember
+time-format-help: Skal tiden vises i 12 eller 24-timer.
+Time format: Tidsformat
+12 hour: 12 timer
+24 hour: 24 timer
+time-interval-help: Angir hvor lang blokken med tid i uke- og dagvisning skal være.
+Time interval: Tidsinterval
+hour: time
+minutes: minutter
+auto-refresh-help: Hvis aktivert, vil dagsvisning, ukesvisning, månedsvisning og liste med ikke godkjente aktiviteter oppdateres automatisk periodisk.
+Auto-refresh calendars: Oppdater kalendere automatisk
+auto-refresh-time-help: Hvis auto-oppdatering er aktivert, så setter denne tiden mellom hver oppdatering. 
+Auto-refresh time: Auto-oppdateringsintervall
+require-approvals-help: Hvis aktivert, så må en bruker godkjenne en aktivitet før den vises i deres kalender (hvis ikke "Vis ikke-godkjent" er aktivert).
+Require event approvals: Krev godkjenning av aktiviteter
+display-unapproved-help: Angir om din kalender skal vise ikke-godkendte aktiviteter.
+Display unapproved: Vis ikke-godkjente.
+display-week-number-help: Angir om ukenumre skal være påklistret ukevisningene.
+Display week number: Vis ukenummer
+display-week-starts-on: Vis om uken starter mandag eller søndag.
+Week starts on: Uken starter på
+Sunday: Søndag
+Monday: Mandag
+work-hours-help: Angir daglige arbeidstimer.
+Work hours: Arbeidstimer
+From: Fra
+to: til
+disable-priority-field-help: Valget "Ja" vil fjerne prioritetsfeltet fra sider med aktivitetsinformasjon, og dermed gjøre det enklere for nybegynnere.
+Disable Priority field: Deaktiver prioritetsfeltet
+disable-access-field-help: Valget "Ja" vil fjerne tilgangsfeltet fra sider med aktivitetsinformasjon, og dermed gjøre det enklere for nybegynnere.
+Disable Access field: Deaktiver tilgangsfeltet
+disable-participants-field-help: Valget "Ja" vil fjerne deltagerfeltet fra sider med aktivitetsinformasjon, og dermed hindre brukere fra å legge til andre bruker på deres aktiviteter. Hvis du aktiverer denne opsjonen, vil du kanskje også deaktivere feltet for "Tillat visning av andre brukere sine kalendere".
+Disable Participants field: Deaktiver deltagerfeltet
+disable-repeating-field-help: Valget "Ja" vil fjerne repetisjonsfeltet når man legger til en aktivitet, og dermed gjøre det enklere for nybegynnere.
+Disable Repeating field: Deaktiver repetisjonsfeltet
+popup-includes-siteextras-help: Hvis aktivert, vil egendefinert felter i site_extras.php bli vist i aktivitetssprettopp.
+Display Site Extras in popup: Vis nettstedstillegg i sprettopp
+allow-html-description-help: Setter om en bruker kan skrive HTML-kode i aktivitetsbeskrivelsene. Advarsel: Hvis tillat, kan brukere referere til bilder på andre nettsteder.
+Allow HTML in Description: Tillat HTML-kode i beskrivelser
+allow-view-other-help: Setter om en bruker kan se en annen bruker sin kalender.
+Allow viewing other user's calendars: Tillat visning av andre brukere sine kalendere
+allow-view-add-help: Et '+' ikon vil bli inkludert i oversikter, slik at brukere fort kan legge til aktiviteter i andre brukere sine kalendere.
+Include add event link in views: Inkluder lenke for å legge til aktiviteter i oversikter
+remember-last-login-help: Hvis aktivert, vil brukerens navn bli fylt ut på innloggingssiden og preferansene lastet inn.
+Remember last login: Husk siste innlogging
+conflict-check-help: Sjekk for konflikter mellom aktiviteter, dvs to aktiviteter lagt til samme tid for samme bruker.
+Check for event conflicts: Sjekk for konflikter mellom aktiviteter
+conflict-months-help: Hvis sjekking for konflikter er aktivert, så vil denne sette hvor mange måneder frem i tid vi skal sjekke for konflikter. Hvis du oppdager at det tar lang tid å legge til en aktivitet, så bør du redusere dette tallet.
+Conflict checking months: Antall måneder med sjekking for konflikter
+conflict-check-override-help: Tillater brukere å overstyre aktivitetskonflikter og planlegge to eller flere aktiviteter på samme tid.
+Allow users to override conflicts: Tillat brukere å overstyre aktivitetskonflikter
+limit-appts-help: Tillater systemadministratoren å sette en øvre grense for antall aktiviteter en enkelt bruker ha på hver enkelt dag.
+Limit number of timed events per day: Begrens antall aktiviteter med tidsangivelse per dag
+limit-appts-number-help: Angir maskimalt antall aktiviteter med tidsangivelse en bruker kan ha på en enkelt dag.
+Maximum timed events per day: Maksimalt antall aktiviteter med tidsangivelse per dag
+timed-evt-len-help: Angir input-metode for avgjøring av lengde for en tidsbegrenset aktivitet
+Specify timed event length by: Oppgi tidsbegrensede aktiviteters lengde ved
+Duration: Varighet
+End Time: Avslutningstidspunkt
+Plugins: Plugins
+plugins-enabled-help: Aktiver plugin-programmer
+Enable Plugins: Aktiver plugins
+plugins-sort-key-help: Angir sorteringsnøkkel for plugins. Dette tillater sortering av plugins i angitt rekkefølge. 
+Plugin: Plugin
+allow-public-access-help: Hvis aktivert, vil kalender kunne bli brukt som en kun lesbar offentlig kalender som ikke krever innlogging.
+Allow public access: Tillatt offentlig tilgang
+public-access-default-visible: Aktitiviteter i den offentlig kalenderen blir vist automatisk i alle brukere sine kalendere
+Public access visible by default: Offentlig tilgang synlig som standard
+public-access-default-selected: Når en ny aktivitet blir lagt til, vil som standard den offentlig brukeren bli valgt som deltager
+Public access is default participant: Offentlig tilgang er standard deltager
+public-access-view-others-help: Setter om en bruker kan se kalenderen til en annen bruker når han bruker offentlig tilgang.
+Public access can view other users: Offentlig tilgang kan se andre brukere
+public-access-can-add-help: Hvis aktivert, kan brukere med offentlig tilgang legge til aktivieter, men de vil ikke vises i kalenderen før administrator har godkjent aktiviteten.
+Public access can add events: Offentlig tilgang kan legge til aktiviteter
+public-access-add-requires-approval-help: Angir om aktiviteter lagt til ved hjelp av konto for offentlig tilgang krever godkjenning før de blir vist. 
+Public access new events require approval: Nye aktitiviteter ved offentlig tilgang krever godkjenning
+public-access-sees-participants-help: Hvis aktivert, kan brukere med offentlig tilgang se aktivitetsdeltagerne (ved detaljert visning).
+Public access can view participants: Offentlig tilgang kan se deltagere
+groups-enabled-help: Aktiverer gruppestøtte, tillater brukerne å velge brukere ved gruppe
+Groups enabled: Grupper aktivert
+user-sees-his-group-help: Hvis aktivert, så vil brukerne ikke se kalendere som ikke er i minst en av deres grupper
+User sees only his groups: Bruker ser bare sine grupper
+nonuser-enabled-help: Hvis aktivert, så vil administratorer ha muligheten til å legge til ikke-bruker kalendere
+Nonuser enabled: Ikke-bruker kalendere aktivert
+nonuser-list-help: Hvor ikke-bruker kalendere skal vises i deltagerlisten
+Nonuser list: Vis i deltagerlisten ved
+Top: Topp
+Bottom: Bunn
+reports-enabled-help: Hvis aktivert, så vil brukere se en "Rapporter"-seksjon
+Reports enabled: Rapporter aktivert
+subscriptions-enabled-help: Angir om eksterne brukere kan abonnere på en brukers kalender og tillate dem å se brukerens aktiviteter i en applikasjon som støtter iCal (som Apple sin iCal eller Mozilla Calendar).
+Allow remote subscriptions: Tillat eksterne abonnenter
+categories-enabled-help: Velger støtte for aktivitetskategorier
+Categories enabled: Kategorier aktivert
+allow-external-users-help: Angir om en ikke-kalender bruker kan bli lagt til en aktivitet. Dette muliggjør ikke-kalender brukere til å bli listed som deltagere på en aktivitet.
+Allow external users: Tillat eksterne (ikke-kalender) brukere
+external-can-receive-notification-help: Når eksterne brukere er aktivert (og e-post er aktivert), kan eksterne brukere motta e-postmeldinger når aktiviteten blir lagt til, oppdatert eller slettet (hvis den eksterne brukerens e-postadresse er oppgitt).
+External users can receive email notifications: Eksterne brukere kan motta e-postmeldinger
+external-can-receive-reminder-help: Når eksterne brukere er aktivert (og e-post er aktivert), kan eksterne brukere motta e-postpåminnelser (hvis den eksterne brukerens e-postadresse er oppgitt).
+External users can receive email reminders: Eksterne brukere kan motta e-postpåminnelser
+email-enabled-help: Slå sending av e-post for påminnelser av eller på. Velg "nei" hvis serveren din ikke er satt opp til å sende e-post
+Email enabled: E-post aktivert
+email-default-sender: Setter e-postadresse som skal brukes som avsender ved utsending av påminnelse
+Default sender address: Standard avsenderadresse
+Default user settings: Standard brukerinnstillinger
+email-event-reminders-help: Angir om det skal sendes aktivitetspåminnelser.
+Event reminders: Aktivitetspåminnelser
+email-event-added: Angir om e-postmelding skal sendes når en aktitivitet blir lagt til din kalender.
+Events added to my calendar: Aktiviteter lagt til min kalender
+email-event-updated: Angir om e-postmelding skal sendes når en aktitivitet blir oppdatert i din kalender.
+Events updated on my calendar: Aktiviteter oppdatert i min kalender
+email-event-deleted: Angir om e-postmelding skal sendes når en aktitivitet blir fjernet fra din kalender.
+Events removed from my calendar: Aktiviteter fjernet fra min kalender
+email-event-rejected: Angir om e-postmelding skal sendes når en deltager avviser en aktivitet som er i din kalender.
+Event rejected by participant: Aktivitet avvist av deltager 
+Allow user to customize colors: Tillat bruker å tilpasse farger
+Enable gradient images for background colors: Aktiver bilder med fargeovergang for bakgrunnsfarger
+Not available: Ikke tilgjengelig
+Document background: Dokumentbakgrunn
+Select: Velg
+Document title: Dokumenttittel
+Document text: Dokumenttekst
+Table grid color: Farge for tabellgridet
+Table header background: Farge for tabellheaderen
+Table header text: Tekst i tabellheaderen
+Table cell background: Tabellbakgrunn
+Table cell background for current day: Tabellbakgrunn for inneværende dag
+Table cell background for weekends: Tabellbakgrunn for helger
+Event popup background: Bakgrunn for aktivitetspopup
+Event popup text: Tekst for aktivitetspopup
+
+
+###############################################
+# Page: approve_entry.php
+#
+Error approving event: Feil ved godkjenning av aktivitet
+
+
+###############################################
+# Page: assistant_edit.php
+#
+Admin mode: Administratormodus
+Your assistants: Dine assistenter
+
+
+###############################################
+# Page: category_handler.php
+#
+Delete: Slett
+
+
+###############################################
+# Page: category.php
+#
+Add: Legg til
+Category Name: Kategorinavn
+Global: Global
+Are you sure you want to delete this entry?: Er du sikker på at du vil slette denne aktiviteten?
+Add New Category: Legg til ny kategori
+
+
+###############################################
+# Page: day.php
+#
+Assistant mode: Assistent modus
+Generate printer-friendly version: Vis som utskriftsvennlig side
+Printer Friendly: Utskriftsvennlig
+
+
+###############################################
+# Page: del_entry.php
+#
+Hello: Hei
+An appointment has been canceled for you by: En avtale har blitt avlyst for deg av
+The subject was: Emnet var
+Notification: Påminnelse
+
+
+###############################################
+# Page: edit_entry_handler.php
+#
+The following conflicts with the suggested time: Følgende aktiviteter er i konflikt med det foreslåtte tidspunktet
+Unnamed Event: Aktivitet uten navn
+The description is: Beskrivelsen er
+A new appointment has been made for you by: En ny avtale er gjort for deg av
+An appointment has been updated by: En avtale har blitt oppdatert av
+The subject is: Emnet er 
+Please look on: Vennligst se på
+to accept or reject this appointment: for å akseptere eller avvise avtalen
+to view this appointment: for å se denne avtalen
+Scheduling Conflict: Tidskonflikt
+Your suggested time of: Den foreslåtte tiden for
+All day event: Fulldagsaktivitet
+conflicts with the following existing calendar entries: er i konflikt med eksisterende avtaler
+Cancel: Avbryt
+
+
+###############################################
+# Page: edit_entry.php
+#
+Edit Entry: Endre aktiviteten
+Add Entry: Legg til aktivitet
+Details: Detaljer
+Participants: Deltakere
+Repeat: Gjentagelse
+brief-description-help: Her skal det stå en kort beskrivelse av aktiviteten - den blir vist når man står over aktiviteten i oversiktskalenderen.
+Brief Description: Kort beskrivelse
+full-description-help: Her kan det stå en komplett beskrivelse av aktiviteten.
+Full Description: Full beskrivelse
+access-help: Angi om aktiviteten skal kunne sees av alle eller om den er fortrolig.
+Access: Tilgang
+Public: Offentlig
+Confidential: Privat
+priority-help: Angi aktivitetens prioritet.
+Priority: Prioritet
+Low: Lav
+Medium: Medium
+High: Høy
+category-help: Setter kategorien for aktiviteten
+Category: Kategori
+None: Aldri
+date-help: Angir dato for aktiviteten.
+Untimed event: Aktivitet uten tidsangivelse
+Timed event: Aktivitet med tidsangivelse
+time-help: Angir tidspunkt for aktiviteten.<br /><i>Dette feltet trenger ikke være utfylt.</i>
+am: am
+pm: pm
+duration-help: I dette feltet kan du angi varigheten på aktiviteten <br /><i>Dette feltet trenger ikke være utfylt.</i>
+hours: timer
+end-time-help: Angir tidspunktet aktiviteten forventes avsluttet.
+days: dager
+before event: før aktivitet
+participants-help: Vis deltagerne i dette innlegget.
+Availability: Tilgjengelighet
+external-participants-help: Angir en liste med deltagere for en aktivitet som
+External Participants: Eksterne deltagere
+repeat-type-help: Hvor ofte skal aktiviteten gjentas.
+Repeat Type: Gjenta type
+Daily: Daglig
+Weekly: Ukentlig
+Monthly: Månedlig
+by day: etter dag
+by day (from end): etter dag (fra slutten)
+by date: etter dato
+Yearly: Årlig
+repeat-end-date-help: Angir sluttdato for gjentakelse av denne aktiviteten.
+Repeat End Date: Gjenta sluttdato
+Use end date: Benytt sluttdato
+repeat-frequency-help: Hvor ofte skal aktiviteten gjentas? Tallet 1 viser at det skal skje hver gang, 2 hver annen gang...
+Frequency: Hyppighet
+repeat-day-help: Hvilke ukedager skal aktiviteten gjentas på.
+Repeat Day: Gjenta dato
+Tuesday: Tirsdag
+Wednesday: Onsdag
+Thursday: Torsdag
+Friday: Fredag
+Saturday: Lørdag
+Delete entry: Slett aktiviteten
+You are not authorized to edit this entry: Du har ikke lov å redigere denne aktiviteten
+
+
+###############################################
+# Page: edit_layer_handler.php
+#
+You cannot create a layer for yourself: Du kan ikke lag et lag for deg selv
+You can only create one layer for each user: Du kan bare lag et lag per bruker
+
+
+###############################################
+# Page: edit_layer.php
+#
+Edit Layer: Editer lag
+Add Layer: Legg til lag
+Source: Kilde
+Color: Farge
+Duplicates: Duplikater
+Show layer events that are the same as your own: Vis lag som er lik dine egne
+Delete layer: Slett lag
+Are you sure you want to delete this layer?: Er du sikker på du vil slette dette laget?
+
+
+###############################################
+# Page: edit_nonusers_handler.php
+#
+Calendar ID: Kalender-ID
+word characters only: kan kun inneholde tall og bokstaver (a-å, A-Å, 0-9)
+Changes successfully saved: Vellykket lagring av endringer
+
+
+###############################################
+# Page: edit_nonusers.php
+#
+NONUSER_PREFIX not set: NONUSER_PREFIX har ikke blitt satt i config.php.
+Edit User: Rediger bruker
+Add User: Ny bruker
+First Name: Fornavn
+Last Name: Etternavn
+
+
+###############################################
+# Page: edit_report_handler.php
+#
+Page template: Mal for siden
+Variable N not found: Variablen N ble ikke funnet
+Day template: Mal for dag
+Event template: Mal for aktivitet
+Unnamed Report: Rapport uten navn
+
+
+###############################################
+# Page: edit_report.php
+#
+Tomorrow: I morgen
+Today: I dag
+Yesterday: I går
+Day before yesterday: Dagen før i går
+Next week: Neste uke
+This week: Denne uken
+Last week: Forrige uke
+Week before last: Uken før forrige
+Next week and week after: Neste uke og uken etter
+This week and next week: Denne uken og uken etter
+Last week and this week: Forrige uke og denne uken
+Last two weeks: To siste uker
+Next month: Neste måned
+This month: Denne måneden
+Last month: Forrige måned
+Month before last: Måneden før forrie
+Next year: Neste år
+This year: Dette året
+Last year: Forrige år
+Year before last: Året før forrige
+Next 14 days: Neste 14 dager
+Next 30 days: Neste 30 dager
+Next 60 days: Neste 60 dager
+Next 90 days: Neste 90 dager
+Next 180 days: Neste 180 dager
+Next 365 days: Neste 365 dager
+Invalid report id: Ugyldig rapport-ID
+Add Report: Legg til rapport
+Edit Report: Rediger rapport
+Report name: Rapportnavn
+Current User: Nåværende bruker
+Include link in trailer: Inkluder lenke i foten
+Include standard header/trailer: Inkluder standard hode/for
+Date range: Tidsrom
+Include previous/next links: Inkluder forrige/neste lenker
+Include empty dates: Inkluder tomme datoer
+Template variables: Variabler for malen
+Are you sure you want to delete this report?: Er du sikker på at du vil slette denne rapporten?
+
+
+###############################################
+# Page: edit_template.php
+#
+Edit Custom Script/Stylesheet: Rediger egendefinert skript/stilsett
+Edit Custom Header: Rediger egendefinert hode
+Edit Custom Trailer: Rediger egendefinert fot
+
+
+###############################################
+# Page: edit_user_handler.php
+#
+Deleting users not supported: Sletting av brukere er ikke støttet
+The passwords were not identical: Passordene var ikke identiske
+You have not entered a password: Du har ikke oppgitt passord
+Username can not be blank: Brukernavn må fylles ut 
+
+
+###############################################
+# Page: edit_user.php
+#
+Username: Brukernavn
+E-mail address: E-postadresse
+Password: Passord
+again: igjen
+Disabled for demo: Deaktivert for demo
+Are you sure you want to delete this user?: Er du sikker på at du vil slette denne brukeren?
+Change Password: Endre passord
+New Password: Nytt passord
+Set Password: Sett passord
+
+
+###############################################
+# Page: export_handler.php
+#
+Export: Eksporter
+export format not defined or incorrect: eksportformat ikke definert eller feil
+
+
+###############################################
+# Page: export.php
+#
+Export format: Eksportformat
+Palm Pilot: Palm Pilot
+Include all layers: Inkluder alle lag
+Export all dates: Eksporter alle datoer
+Start date: Startdato
+End date: Sluttdato
+Modified since: Endret etter
+
+
+###############################################
+# Page: group_edit_handler.php
+#
+You must specify a group name: Du må angi et gruppenavn
+
+
+###############################################
+# Page: group_edit.php
+#
+Unnamed Group: Ikke navngitt gruppe
+Add Group: Legg til gruppe
+Edit Group: Rediger gruppe
+Group name: Gruppenavn
+Updated: Oppdatert
+Created by: Opprettet av
+
+
+###############################################
+# Page: groups.php
+#
+Add New Group: Legg til ny gruppe
+
+
+###############################################
+# Page: help_admin.php
+#
+Display days with events in bold in year view: Viser dager med aktiviteter i fetskrift for årvisning
+Nonuser: Ikke-bruker kalendere
+user-customize-color: Angir om brukere har lov å endre deres eget fargeskjema.
+enable-gradient-help: Bruk gradert fargeovergang for tabellbakgrunn.
+Manually entering color values: Skriv inn fargeverdier manuelt
+
+
+###############################################
+# Page: help_bug.php
+#
+Report Bug: Rapporter feil
+
+
+###############################################
+# Page: help_edit_entry.php
+#
+Adding/Editing Calendar Entries: Legg til/endre aktivitet
+
+
+###############################################
+# Page: help_import.php
+#
+Import: Importer
+Palm Desktop: Palm Desktop
+This form will allow you to import entries from the Palm Desktop Datebook.: Dette skjemaet gjør det mulig for deg å importere oppføringer fra Palm Desktop Datebook.
+It should be located in your Palm directory in <tt>datebook/datebook.dat</tt> in a subdirectory named by your username.: Den bør finnes i din Palm katalog i <tt>datebook/datebook.dat</tt> i en underkatalog med ditt brukernavn.
+The following entries will not be imported: Følgende oppføringer vil ikke bli importert
+Entries older than the current date: Oppføringer eldre enn nåværende dato
+Entries created in the Palm Desktop that have not been HotSync'd: Oppføringer opprettet i Palm Desktop-en som ikke har blitt HotSync'd
+Anything imported from Palm will be overwritten during the next import (unless the event date has passed).: Alt som blir importert fra Palm vil bli overskrevet ved neste import (hvis ikke aktivitetsdatoen har passert)
+Therefore, updates should be made in the Palm Desktop.: Derfor bør oppdatering bli gjort i Palm Desktop-en.
+vCal: vCal
+This form will import vCalendar (.vcs) 1.0 events: Dette skjemaet vil importere vCalendar (.vcs) 1.0 aktiviteter
+The following formats have been tested: Følgende formater har blitt testet
+Palm Desktop 4: Palm Desktop 4
+Lotus Organizer 6: Lotus Organizer 6
+Microsoft Outlook 2002: Microsoft Outlook 2002
+iCalendar: iCalendar
+This form will import iCalendar (.ics) events: Dette skjemaet vil importere iCalendar (.vcs) aktiviteter
+Enabling <b>Overwrite Prior Import</b> will cause events imported previously that used the same UID as an event from the new import file to be marked as deleted.  This should allow an updated iCalendar file to be imported without creating duplicates.: Aktivering av <b>Skriv over tidligere importering</b> fører til at tidligere importerte aktiviteter som bruker samme UID som en aktivitet fra den nye import-filen, vil bli markert som slettede. Dermed bør en oppdatert iCal-fil kunne bli importert uten at det oppstår duplikater.  
+
+
+###############################################
+# Page: help_index.php
+#
+Help Index: Hjelpoversikt
+
+
+###############################################
+# Page: help_layers.php
+#
+Layers are useful for displaying other users' events in your own calendar.  You can specifiy the user and the color the events will be displayed in.: Lag er nyttig for å vise andre brukere sine aktiviteter i din egen kalender. Du kan spesifisere brukeren og fargen som aktivitetene blir vist med. 
+Add/Edit/Delete: Legg til/Rediger/Slett
+Clicking the Edit Layers link in the admin section at the bottom of the page will allow you to add/edit/delete layers.: Ved å klikke på "Rediger lag" i Admin seksjonen nederst på siden kan du legge til/redigere/slette lag.
+Specifies the user that you would like to see displayed in your calendar.: Angir brukeren du vil ha vist i din kalender.
+The text color of the new layer that will be displayed in your calendar.: Tekstfargen for det nye laget som vil bli vist in din kalender.
+If checked, events that are duplicates of your events will be shown.: Hvis merket av, vil aktiviteter som er duplikater av dine aktiviteter bli vist.
+Disabling: Deaktiverer
+Press the Disable Layers link in the admin section at the bottom of the page to turn off layers.: Klikk "Deaktiver lag" i Admin seksjonen nederst på siden for å slå av lag.
+Enabling: Aktiverer
+Press the Enable Layers link in the admin section at the bottom of the page to turn on layers.: Klikk "Aktiver lag" i Admin seksjonen nederst på siden for å slå på lag.
+
+
+###############################################
+# Page: help_pref.php
+#
+Timezone Offset: Tidssoneavvik
+tz-help: Angir hvor mange timer servertid må justeres i forhold til lokaltid.
+Default Category: Standardkategori
+default-category-help: Angir den kategorien en ny aktivitet skal ha som standard
+When I am the boss: Når jeg er sjefen
+Email me event notification: Send meg aktivitetspåminnelser på e-post
+email-boss-notifications-help: Angir om sjefer mottar aktivitetspåminnelser som e-post
+I want to approve events: Jeg vil godkjenne aktiviteter
+boss-approve-event-help: Angir om sjefen må godkjenne aktiviteter lagt til av assistenter.
+Subscribe/Publish: Abonnere/publisere
+allow-remote-subscriptions-help: Angir om eksterne brukere kan abonnere på din kalender og dermed tillate dem å se dine aktiviteter i en applikasjon som støtter iCal (som Apple sin iCal eller Mozilla Calendar).
+URL: Adresse
+remote-subscriptions-url-help: Viser adressen som eksterne brukere skal bruke for å abonnere på din kalender.
+
+
+###############################################
+# Page: import_handler.php
+#
+Import Results: Importeringsresultat
+Events successfully imported: Aktiviteter vellykket importert
+Events from prior import marked as deleted: Aktiviteter fra tidligere importering markert som slettede
+Conflicting events: Aktiviteter som kolliderer
+Errors: Feil
+There was an error parsing the import file or no events were returned: Det oppstod en feil ved behandling av den importerte filen eller ingen aktiviteter ble returnert
+The import file contained no data: Den importerte filen inneholdt ikke noen data
+Event Imported: Aktivitet importert
+View this entry: Vis aktiviteten
+
+
+###############################################
+# Page: import.php
+#
+Disabled: Deaktivert
+Import format: Importeringsformat
+Exclude private records: Utelat private oppføringer
+Overwrite Prior Import: Skriv over tidligere importering
+
+
+###############################################
+# Page: layers.php
+#
+Layers are currently: Lagene er nå
+Enabled: Aktivert
+Disable Layers: Deaktiver lag
+Enable Layers: Aktiver lag
+to modify the layers settings for the: for å modifisere laginnstilling for
+calendar: kalender
+Add layer: Legg til lag
+Layer: Lag
+Edit layer: Editer lag
+
+
+###############################################
+# Page: list_unapproved.php
+#
+Approve/Confirm: Godkjenn/Bekreft
+Approve this entry?: Godkjenn aktiviteten?
+Reject: Avvis
+Reject this entry?: Avvis denne aktiviteten?
+No unapproved events for: Ingen ikke-godkjente aktiviteter for
+Unapproved Events: Ikke-godkjente aktiviteter
+
+
+###############################################
+# Page: login.php
+#
+Invalid login: Ugyldig innlogging
+You must enter a login and password: Vennligst oppgi brukernavn og passord
+Save login via cookies so I don't have to login next time: Husk brukernavn til neste gang
+Login: Logg inn
+Access public calendar: Gå til offentlig kalender
+cookies-note: <b>OBS:</b> Programmet krever at "cookies" er slått på
+
+
+###############################################
+# Page: month.php
+#
+Sun: Søn
+Mon: Man
+Tue: Tir
+Wed: Ons
+Thu: Tor
+Fri: Fre
+Sat: Lør
+
+
+###############################################
+# Page: nonusers.php
+#
+Add New NonUser Calendar: Legg til ny ikke-bruker kalender
+
+
+###############################################
+# Page: pref.php
+#
+Save Preferences: Lagre innstillinger
+to modify the preferences for the Public Access calendar: for å modifisere innstillingene for kalenderen med offentlig tilgang
+Add N hours to: Legg til N timer til
+Subtract N hours from: Trekk fra N timer fra
+same as: samme som
+server time: servertid
+All: Alle
+
+
+###############################################
+# Page: purge.php
+#
+Preview: Forhåndsvisning
+Purging events for: Sletter aktiviteter for
+Finished: Ferdig
+Check box to delete <b>ALL</b> events for a user: Marker i boksen hvis <b>ALLE</b> aktiviteter skal slettes
+Delete all events before: Slett alle aktiviteter før
+Preview delete: Forhåndsvisning for sletting
+Are you sure you want to delete events for: Er du sikker
+Records deleted from: Oppføringer slettet fra:
+
+
+###############################################
+# Page: reject_entry.php
+#
+An appointment has been rejected by: En avtale har blitt avvist av
+Title: Webkalenderen
+
+
+###############################################
+# Page: report.php
+#
+Private: Privat
+This event is confidential: Denne aktiviteten er privat
+Waiting for approval: Venter på godkjenning
+Deleted: Slettet
+Rejected: Avvist
+Approved: Godkjent
+Unknown: Ukjent
+to manage reports for the Public Access calendar: for å administrere kalenderen med offentlig tilgang
+Add new report: Legg til ny rapport
+cont.: forts.
+Manage Reports: Administrer rapporter
+
+
+###############################################
+# Page: search_handler.php
+#
+You must enter one or more search keywords: Vennligst oppgi ett eller flere søkeord
+Search Results: Søkeresultat
+match found: treff funnet
+matches found: treff funnet
+No matches found: Ingen treff funnet
+
+
+###############################################
+# Page: search.php
+#
+Search: Søk
+Keywords: Nøkkelord
+Advanced Search: Avansert søk
+
+
+###############################################
+# Page: select_user.php
+#
+View Another User's Calendar: Se en annen brukers kalender
+Go: Gå til
+
+
+###############################################
+# Page: set_entry_cat.php
+#
+You have not added any categories: Du har ikke lagt til noen kategorier
+Set Category: Sett kategori
+
+
+###############################################
+# Page: usersel.php
+#
+Reset: Reset
+Remove: Fjern
+Ok: OK
+
+
+###############################################
+# Page: users.php
+#
+Add New User: Opprett bruker
+denotes administrative user: indikerer administrator
+
+
+###############################################
+# Page: view_d.php
+#
+No users for this view: Ingen brukere for denne visningen
+
+
+###############################################
+# Page: view_entry.php
+#
+every: hver
+2nd: 2.
+3rd: 3.
+4th: 4.
+5th: 5.
+1st: 1.
+last: siste
+Description: Beskrivelse
+Status: Status
+day: dag
+minute: minutt
+External User: Ekstern bruker
+Approve/Confirm entry: Godkjenn/bekreft aktiviteten
+Reject entry: Avvis aktiviteten
+Set category: Sett kategori
+Edit repeating entry for all dates: Rediger repeterende aktivitet for alle datoer
+Edit entry for this date: Rediger aktiviteten for denne datoen
+Delete repeating event for all dates: Slett repeterende aktiviteter for alle datoer
+This will delete this entry for all users.: Dette vil slette aktiviteten for alle brukerene
+Delete entry only for this date: Slett aktiviteten for denne datoen
+Edit entry: Endre aktiviteten
+Copy entry: Kopier aktiviteten
+This will delete the entry from your calendar.: Dette vil slette aktiviteten fra kalenderen din.
+Add to My Calendar: Legg til kalenderen min
+Do you want to add this entry to your calendar?: Vil du legge inn denne aktiviteten i kalenderen din?
+This will add the entry to your calendar.: Dette vil legge til aktiviteten i kalenderen din.
+Email all participants: E-post til alle deltakerne
+Show activity log: Vis aktivitetslogg
+Hide activity log: Skjul aktivitetslogg
+Export this entry to: Eksporter denne aktiviteten til
+
+
+###############################################
+# Page: views_edit_handler.php
+#
+You must specify a view name: Du må angi et oversiktnavn
+
+
+###############################################
+# Page: views_edit.php
+#
+Unnamed View: Ikke navngitt oversikt
+Add View: Legg til oversikt
+Edit View: Redigere oversikt
+View Name: Navn på oversikt
+View Type: Oversiktstype
+Week (Users horizontal): Uke (brukere horisontalt)
+Week (Users vertical): Uke (brukere vertikalt)
+Week (Timebar): Uke (tidsbar)
+Month (Timebar): Måned (tidsbar)
+Month (side by side): Måned (side ved side)
+Month (on same calendar): Måned (i samme kalender)
+preview: forhåndsvisning
+Selected: Valgt
+
+
+###############################################
+# Page: views.php
+#
+Add New View: Legg til ny oversikt
+
+
+###############################################
+# Page: week_details.php
+#
+New Entry: Ny aktivitet
+
+
+###############################################
+# Page: includes/config.php
+#
+English: Engelsk
+Basque: Baskisk
+Bulgarian: Bulgarsk
+Catalan: Katalansk 
+Chinese (Traditonal/Big5): Kinesisk
+Chinese (Simplified/GB2312): Kinesisk med enkle tegn
+Czech: Tsjekkisk
+Danish: Dansk
+Dutch: Nederlansk
+Estonian: Estisk
+Finnish: Finsk
+French: Fransk
+Galician: Galisisk
+German: Tysk
+Holo (Taiwanese): Taiwansk
+Hungarian: Ungarsk
+Icelandic: Islandsk
+Italian: Italiensk
+Japanese: Japansk
+Korean: Koreansk
+Norwegian: Norsk
+Polish: Polsk
+Portuguese: Portugisisk
+Portuguese/Brazil: Portugisisk/Brasiliansk
+Romanian: Rumensk
+Russian: Russisk
+Spanish: Spansk
+Swedish: Svensk
+Turkish: Tyrkisk
+Welsh: Walisisk
+
+
+###############################################
+# Page: includes/functions.php
+#
+exceeds limit of XXX events per day: overgår grense på XXX aktiviteter per dag
+You have XXX unapproved events: Du har XXX ikke-godkjente aktiviteter
+January: Januar
+February: Februar
+March: Mars
+April: April
+May_: Mai
+June: Juni
+July: Juli
+August: August
+September: September
+October: Oktober
+November: November
+Jan: Jan
+Feb: Feb
+Mar: Mar
+Apr: Apr
+May: Mai
+Jun: Jun
+Jul: Jul
+Aug: Aug
+Sep: Sep
+Oct: Okt
+Nov: Nov
+Dec: Des
+All Attendees: Alle deltagere
+Busy: Opptatt
+Tentative: Tentativ
+
+
+###############################################
+# Page: includes/help_trailer.php
+#
+Go to: Gå til
+
+
+###############################################
+# Page: includes/site_extras.php
+#
+Send Reminder: Send påminnelse
+
+
+###############################################
+# Page: includes/trailer.php
+#
+My Calendar: Min kalender
+Back to My Calendar: Tilbake til min kalender
+Another User's Calendar: Se en annen brukers kalender
+Add New Entry: Legg til aktivitet
+Logout: Logg ut
+Manage calendar of: Kontroller kalenderen til
+
+
+###############################################
+# Page: includes/user-nis.php
+#
+incorrect password: feil passord
+no such user: ingen slik bruker
+Invalid user login: Ugyldig brukerinnlogging
+
+
+###############################################
+# Page: includes/js/admin.php
+#
+Server URL is required: URL for server er påkrevd
+Server URL must end with '/': URL for server må slutte på '/'
+Invalid work hours: Ugyldige arbeidstid
+Invalid color for document background: Ugyldig bakgrunnsfarge
+Invalid color for document title: Ugyldig tittelfarge
+Invalid color for table cell background: Ugyldig farge for tabellbakgrunn
+Invalid color for table grid: Ugyldig farge for tabellrutenett
+Invalid color for table header background: Ugyldig farge for bakgrunnen i tabellheaderen
+Invalid color for table text background: Ugyldig farge for bakgrunnen til tabellteksten
+Invalid color for event popup background: Ugyldig farge for bakgrunnen i aktivitetspopups
+Invalid color for event popup text: Ugyldig farge for teksten i aktivitetspopups
+Invalid color for table cell background for today: Ugyldig farge for dagens tabellbakgrunn
+Color format should be '#RRGGBB': Fargen skal skrives som '#RRGGBB'
+
+
+###############################################
+# Page: includes/js/availability.php
+#
+Change the date and time of this entry?: Endre datoen og tiden for denne aktiviteten?
+
+
+###############################################
+# Page: includes/js/edit_entry.php
+#
+You have not entered a Brief Description: Du har ikke oppgitt noen kort beskrivelse
+You have not entered a valid time of day: Du har ikke oppgitt noe gyldig tidspunkt
+The time you have entered begins before your preferred work hours.  Is this correct?: Tidspunktet du har angitt er før din foretrukne arbeidstid. Er dette korrekt?
+Please add a participant: Legg til en deltager
+
+
+###############################################
+# Page: includes/js/edit_layer.php
+#
+Invalid color: Ugyldig farge
+
+
+###############################################
+# Page: tools/send_reminders.php
+#
+This is a reminder for the event detailed below.: Dette er en påminnelse for aktiviteten beskrevet nedenfor. 
+Reminder: Påminnelse

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Polish.txt
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Polish.txt	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Polish.txt	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,1045 @@
+# Use this as a starting point to translate this application into
+# another language.  The format is "English text: translated text"
+# There cannot be a ":" in the English text.
+# Translated by:
+# Lipowczan Pawe³ lpao2 at o2.pl
+# Last update: 05 December 2000
+# Translation last updated on 09-16-2005
+
+
+###############################################
+# Specify a charset (will be sent within meta tag for each page)
+#
+charset: iso-8859-2
+
+
+
+###############################################
+# Page: activity_log.php
+#
+Activity Log: Dziennik
+Admin: Administrator
+User: U¿ytkownik
+Calendar: Kalendarz
+Date: Data
+Time: Czas
+Event: Zdarzenie
+Action: Akcja
+Event created: Zdarzenie stworzone
+Event approved: Zdarzenie zatwierdzone
+Event rejected: Zdarzenie odrzucone
+Event updated: Zdarzenie zaktualizowane
+Event deleted: Zdarzenie skasowane
+Notification sent: Zawiadomienie wys³ane
+Reminder sent: Przypomnienie wys³ane
+Database error: B³±d bazy danych
+Previous: Poprzedni
+Events: Zdarzenia
+Next: Nastêpny
+
+
+###############################################
+# Page: add_entry.php
+#
+Invalid entry id: Niepoprawny id wydarzenia
+This is a private event and may not be added to your calendar.: To jest prywatne zdarzenie i mo¿e nie byæ dodene do twojego kalendarza
+Error adding event: B³±d dodawania zdarzenia
+
+
+###############################################
+# Page: admin.php
+#
+System Settings: Ustawienia Systemowe
+Help: Pomoc
+You are not authorized: Nie masz autoryzacji
+Note: Uwaga
+Your user preferences: Ustawienia u¿ytkownika
+may be affecting the appearance of this page.: mog± wp³ywaæ na wygl±d tej strony
+Click here: Kliknij tutaj
+to not use your user preferences when viewing this page: ¿eby nie u¿ywaæ ustawieñ u¿ytkownika podczas ogl±dania tej strony
+are being ignored while viewing this page.: s± ignorowane podczas ogl±dania tej strony
+to load your user preferences when viewing this page: ¿eby za³adowaæ ustawienia u¿ytkownika podczas ogl±dania tej strony
+Save: Zapisz
+Settings: Ustawienia
+Public Access: Dostêp Publiczny
+Groups: Grupy
+NonUser Calendars: Kalendarze bez w³a¶cicieli
+Other: Pozosta³e
+Email: Email
+colors-help: Wszystkie kolory powinny byæ okre¶lone w heksagonalnym formacie "#RRGGBB" gdzie "RR" jestt warto¶ci± czerwieni, "GG" jest warto¶ci± zielonego i "BB" jest warto¶ci± niebieskiego.
+Colors: Kolory
+app-name-help: Okresla nazwê aplikacji która bêdzie siê pojawia³a jako tytu³ przegl±darki na wszystkich stronach oraz na stronie logowania. Warto¶æ któr± tutaj wybierzesz zostanie zachowana w pliku z t³umaczeniem pozwalaj±c na obs³ugê ró¿nych tytu³ów dla ró¿nych jêzyków
+Application Name: Nazwa aplikacji
+server-url-help: Okre¶la adres bazowy dla aplikacji. Bêdzie on dodany w momencie wysy³ania wiadomo¶ci email z powiadomieniami i pzypomnieniami
+Server URL: Adres internetowy server-a
+language-help: Okre¶la którego jêzyka u¿ywaæ.
+Language: Jêzyk
+Your browser default language is: Domy¶lnym jêzykiem twojej przegl±darki jest
+fonts-help: Okre¶la liste czcionek systemowych do u¿ycia (np. "Arial, Helvetica")
+Fonts: Czcionki
+custom-script-help: Pozwala na wprowadzenie w³asnego Javascriptu lub kaskadowego arkusza stylów CSS, który zostanie dodany do nag³ówka ka¿dej strony.
+Custom script/stylesheet: W³asny skrypt/styl
+Yes: Tak
+No: Nie
+Edit: Edytuj
+custom-header-help: Pozwala na wprowadzenie w³asnego kodu HTML, który bêdzie dodany na górze ka¿dej strony
+Custom header: W³asny nag³ówek
+custom-trailer-help: ozwala na wprowadzenie w³asnego kodu HTML, który bêdzie dodany na dole ka¿dej strony
+Custom trailer: W³asna stopka
+preferred-view-help: Okre¶la preferowany widok (dzieñ, tydzieñ, miesi±c lub rok)
+Preferred view: Preferowany widok
+Day: Dzieñ
+Week: Tydzieñ
+Month: Miesi±c
+Year: Rok
+display-weekends-help: W czasie ogl±dania tygodnia wy¶wietla tak¿e weekend-y
+Display weekends in week view: Wy¶wietl weekend-y w widoku tygodniowym
+yearly-shows-events-help: W widoku rocznym i miesiêcznym, wy¶wietla dni które zawieraj± jakie¶ wydarzenia pogrubion± czciank±
+Display days with events in bold in month and year views: Pogrubiaj dni z wpisami w widoku miesi±ca i roku
+display-desc-print-day-help: Dodawaj opis wpisu w wersji widoku dziennego do druku
+Display description in printer day view: Wy¶wietl opis w widoku dziennym do druku
+date-format-help: Okre¶la preferowany format daty
+Date format: Format daty
+December: Grudzieñ
+time-format-help: Okre¶la którego formatu czasu u¿ywaæ <br /><i>12 godz.:</i> Wy¶wietla czas jako 3am, 8:30pm, itd. <br /><i>24 godz.:</i> Wy¶wietla czas jako 300, 2030 itd.
+Time format: Format czasu
+12 hour: 12 godzin
+24 hour: 24 godziny
+time-interval-help: Okresla jak d³ugie bêd± bloki czasowe w widoku tygodniowym i dniowy
+Time interval: Odstêpy czasowe
+hour: godziny
+minutes: minut
+auto-refresh-help: W³±cza okresowe autood¶wie¿anie stron z widokiem dziennym, tygodniowym, miesiêcznym oraz z list± niezatwierdzonych zdarzeñ
+Auto-refresh calendars: Automatycznie od¶wie¿aj kalendarze
+auto-refresh-time-help: Okre¶la okres automatycznego od¶wie¿ania
+Auto-refresh time: Okres automatycznego od¶wie¿ania
+require-approvals-help: Wymaga zatwierdzenia zdarzenia przez u¿ytkownika
+Require event approvals: Wymagaj zatwierdzania zdarzeñ
+display-unapproved-help: Okre¶la czy niezatwierdzone wydarzenia bêd± wy¶wietlane w twoim kalendarzu.<br /> Je¶li "tak" wtedy niezatwierdzone wydarzenia bêd± wy¶wietlane (innym kolorem).<br /> Je¶li "Nie" wtedy najpierw bêd± musia³y zostaæ zatwierdzone nim pojawi± siê w Twoim kalendarzu.
+Display unapproved: Wy¶wietlaj niezatwierdzone
+display-week-number-help: Okre¶la czy numer tygodnia (1-52) powinien byæ wy¶wietlany w widoku miesi±ca i tygodnia.
+Display week number: Wy¶wietl numery tygodni
+display-week-starts-on: Okre¶la czy pierwszym dniem tygodnia jest niedziela czy poniedzia³ek.  Je¶li jest to poniedzia³ek, to numer tgodnia bêdzie numerem ISO.
+Week starts on: Tydzieñ zaczyna siê w
+Sunday: Niedziela
+Monday: Poniedzia³ek
+work-hours-help: Okre¶la czas wy¶wietlany w widoku dziennym.
+Work hours: Godziny pracy
+From: Od
+to: Do
+disable-priority-field-help: Wy³±cza pole "Priorytet" ze strony z informacj± o zdarzeniu
+Disable Priority field: Wy³±cz pole "Priorytet"
+disable-access-field-help: Wy³±cza pole "Dostêp" ze strony z informacj± o zdarzeniu
+Disable Access field: Wy³±cz pole "Dostêp"
+disable-participants-field-help: Wy³±cza pole "Wspó³uczestnicy" ze strony z informacj± o zdarzeniu
+Disable Participants field: Wy³±cz pole "Wspó³uczestnicy"
+disable-repeating-field-help: Wy³±cza pole "Powtarzanie" ze strony z informacj± o zdarzeniu
+Disable Repeating field: Wy³±cz pole "Powtarzanie"
+#
+# << MISSING >>
+# popup-includes-siteextras-help:
+# English text: If enabled, allow custom event fields setup in the site_extras.php file will be displayed in event popups.
+#
+Display Site Extras in popup: Wyœwietlaj Bonusy Strony w popup-ach
+allow-html-description-help: Zezwalaj na HTML w opisie zdarzeñ, lub traktuj tekst jako preformatowany
+Allow HTML in Description: Zezwalaj na HTML w opisie
+allow-view-other-help: W³±cza mo¿liwo¶æ ogl±dania kalendarzy innych u¿ytkowników
+Allow viewing other user's calendars: Zezwalaj na ogladanie kalendarzy innych u¿ytkowników
+allow-view-add-help: Dziêki wy¶wietlanej ikonie plusa ("+") bêdzie mo¿na szybko dodawaæ zdarzenia do kalendarzy innych u¿ytkowników
+Include add event link in views: W³±cz przycisk dodawania zdarzenia
+remember-last-login-help: W³±cza zapamiêtywanie ostatnio u¿ytej nazwy u¿ytkownika na stronie logowania (lecz nie has³a) oraz preferencji (wliczaj±c kolory i jêzyk).
+Remember last login: Pamiêtaj ostatnie logowanie
+conflict-check-help: Sprawdzaj czy nie ma konfliktów zdarzeñ (dwóch zdarzeñ tego samego u¿ytkownika w tym samym czasie)
+Check for event conflicts: Sprawdzaj czy nie ma konfliktów zdarzeñ
+conflict-months-help: Sprawdzaj na ile miesiêcy do przodu bêd± sprawdzane konflikty zdarzeñ.
+Conflict checking months: Ilo¶æ miesiêcy do przodu do sprawdzenia
+conflict-check-override-help: Pozwala na akceptowanie konfliktów i przechowywanie dwóch zdarzeñ maj±cych miejsce w tym samym czasie
+Allow users to override conflicts: Pozwalaj u¿ytkownikom na akceptowanie konfliktów
+limit-appts-help: Pozwala na ustalenie globalnego limitu zdarzeñ dla ka¿dego u¿ytkownika jaki mo¿e ustaliæ na dany dzieñ.
+Limit number of timed events per day: Limit zdarzeñ na dzieñ
+limit-appts-number-help: Ustala dzienny limit zdarzeñ ze sprecyzowanym czasem
+Maximum timed events per day: Maksymalna ilo¶æ zdarzeñ dziennie
+timed-evt-len-help: Metoda podawania d³ugo¶ci zdarzeñ
+Specify timed event length by: Podawaj d³ugo¶æ zdarzenia jako
+Duration: Czas trwania
+End Time: Czas zakoñczenia
+Plugins: Wtyczki
+plugins-enabled-help: W³±cza aplikacje bêd±ce wtyczkami
+Enable Plugins: Wtyczki w³±czone
+plugins-sort-key-help: Okre¶la klawisz sortuj±cy dla wtyczki. Pozwala to na pojawianie siê wtyczek w okre¶lonym porz±dku.
+Plugin: Wtyczka
+allow-public-access-help: Pozwalaj na dostêp do publicznego kalendarza dla niezalogowanych
+Allow public access: Zezwalaj na dostêp publiczny
+public-access-default-visible: Ustala czy elementy kalendarza publicznego powinny byæ widoczne dla wszystkich u¿ytkowników
+Public access visible by default: Domy¶lny dostêp do kalendarza publicznego
+public-access-default-selected: Podczas dodawania nowego zdarzenia domy¶lnie ustala publicznego u¿ytkownika jako wspó³uczestnika
+Public access is default participant: U¿ytkownik publiczny jest domy¶lnym wspó³uczestnikiem
+public-access-view-others-help: U¿ytkownik publiczny mo¿e przegl±daæ kalendarze innych u¿ytkowników
+Public access can view other users: Publiczny dostêp do kalendarzy
+public-access-can-add-help: U¿ytkownik publiczny mo¿e dodawaæ nowe zdarzenia (ale musz± zostaæ zatwierdzone przez administratora)
+Public access can add events: Publiczny dostêp do dodawania zdarzeñ
+public-access-add-requires-approval-help: Ustala czy zdarzenia dodane przez u¿ytkownika publicznego bêd± wymagaæ zatwierdzenia przez administratora
+Public access new events require approval: Publiczne zdarzenia wymagaj± zatwierdzenia
+public-access-sees-participants-help: U¿ytkownik publiczny mo¿e przegl±daæ wspó³uczestników zdarzenia
+Public access can view participants: Publiczny dostêp do informacji o wspó³uczestnikach
+groups-enabled-help: W³±cza obs³ugê grup, pozwalaj±c u¿ytkownikom na wybieranie u¿ytkonikówna podstawie grup do których nale¿±
+Groups enabled: Grupy w³±czone
+user-sees-his-group-help: Je¿eli w³±czone, u¿ytkownicy nie bêd± mogli ogl±daæ klendarzyuzytkowników, którzy nie nale¿± do ¿adnej z ich grup
+User sees only his groups: U¿ytkownik widzi tylko te grupy
+nonuser-enabled-help: Je¿eli w³±czone, administratorzy bêd± mieli mo¿liwo¶æ dodawania kalendarzy bez w³a¶cicieli
+Nonuser enabled: Kalendarze bez w³a¶cicieli w³±czone
+nonuser-list-help: Gdzie wy¶wietlaæ kalendarze bez w³a¶cicieli na li¶cie wspó³uczestników
+Nonuser list: Miejsce wy¶wietlania kalendarzy bez w³a¶cicieli
+Top: Góra
+Bottom: Dó³
+reports-enabled-help: W³±cza opcjê tworzenia raportów.
+Reports enabled: Raporty w³±czone
+subscriptions-enabled-help: Ustala, czy u¿ytkownicy zdalni mog± korzystaæ z zasobów WebCalendara
+Allow remote subscriptions: Zezwalaj na zdalne subskrypcje
+categories-enabled-help: W³±cza obs³ugê dla kategorii zdarzeñ
+Categories enabled: Kategorie w³±czone
+allow-external-users-help: Pozwala na dodawanie u¿ytkowników bez kalendarzy (zewnêtrznych), mo¿na dziêki temu wprowadzaæ ich do listy do listy wspó³uczestników
+Allow external users: Zezwalaj na zewnêtrznych u¿ytkowników
+external-can-receive-notification-help: W³±cza wysy³anie emailem informacji do zewnêtrznych u¿ytkowników je¶li zdarzenie jest dodawane, zmieniane lub usuwane.
+External users can receive email notifications: Informacje emailowe dla zewnêtrznych u¿ytkowników
+external-can-receive-reminder-help: W³±cza wysy³anie emailem przypominaczy do zewnêtrznych u¿ytkowników je¶li zdarzenie jest dodawane, zmieniane lub usuwane.
+External users can receive email reminders: Przypominacze emailowe dla zewnêtrznych u¿ytkowników
+email-enabled-help: W³±cza wysy³anie emaili z informacjami i przypominaczami. Ustaw "nie", je¶li Twój serwer nie jest odpowiednio skonfigurowany do wysy³ania poczty.
+Email enabled: Emaile w³±czone
+email-default-sender: Ustala domy¶lnego nadawcê wiadomo¶ci
+Default sender address: Domy¶lny adres nadawcy
+Default user settings: Domy¶lne ustawienia u¿ytkownika
+email-event-reminders-help: Ustala czy wysy³aæ przypominacze
+Event reminders: Wysy³aj przypominacze
+email-event-added: Ustala czy wysy³aæ informacje o dodaniu zdarzenia
+Events added to my calendar: Wysy³aj przypominacze o dodaniu nowego zdarzenia
+email-event-updated: Ustala czy wysy³aæ informacje o modyfikacji zdarzenia
+Events updated on my calendar: Wysy³aj przypominacze o modyfikacji istniej±cego zdarzenia
+email-event-deleted: Ustala czy wysy³aæ informacje o usuniêciu zdarzenia
+Events removed from my calendar: Wysy³aj przypominacze o usuniêciu istniej±cego zdarzenia
+email-event-rejected: Ustala czy wysy³aæ informacje o odrzuceniu zdarzenia przez wspó³uczestnika
+Event rejected by participant: Wysy³aj przypominacze o odrzuceniu istniej±cego zdarzenia
+Allow user to customize colors: Pozwala u¿ytkownikowi na wybór kolorów
+Enable gradient images for background colors: W³±cz gradient w tle
+Not available: Niedostêpny
+Document background: T³o dokumentu
+Select: Wybierz
+Document title: Tytu³ dokumentu
+Document text: Tekst dokumentu
+Table grid color: Kolor ramek tabeli
+Table header background: T³o nag³ówka tabeli
+Table header text: Tekst nag³ówka tabeli
+Table cell background: T³o komórki tabeli
+Table cell background for current day: T³o komórki bie¿±cego dnia
+Table cell background for weekends: T³o komórki weekend-ów
+Event popup background: Zdarzenie pojawiaj±cego siê t³a
+Event popup text: Zdarzenie pojawiaj±cego siê tekstu
+
+
+###############################################
+# Page: admin_handler.php
+#
+Error: Error
+The following error occurred: Wyst±pi³ nastêpuj±cy b³±d
+
+
+###############################################
+# Page: adminhome.php
+#
+Preferences: W³a¶ciwo¶ci
+Users: U¿ytkownicy
+Account: Konto
+Assistants: Pomocnicy
+Categories: Kategorie
+Views: Widoki
+Layers: Warstwy
+Reports: Raporty
+Delete Events: Kasuj Zdarzenia
+Public Preferences: Publiczne W³a¶ciwo¶ci
+Unapproved Public Events: Niezatwierdzone Publiczne Zdarzenia
+Administrative Tools: Narzêdzia Administracyjne
+
+
+###############################################
+# Page: approve_entry.php
+#
+Error approving event: B³±d w zatwierdzaniu zdarzenia
+
+
+###############################################
+# Page: assistant_edit.php
+#
+Admin mode: Tryb administratora
+Your assistants: Twoi asystenci
+
+
+###############################################
+# Page: category.php
+#
+Add: Dodaj
+Category Name: Nazwa kategorii
+Global: Globalny
+Delete: Skasuj
+Are you sure you want to delete this entry?: Czy jeste¶ pewny ¿e chcesz skasowaæ ten wpis?
+Add New Category: Dodaj now± kategoriê
+
+
+###############################################
+# Page: day.php
+#
+Assistant mode: Tryb asystenta
+Generate printer-friendly version: Generuj wersjê do druku
+Printer Friendly: Wersja do druku
+
+
+###############################################
+# Page: del_entry.php
+#
+Hello: Witaj
+An appointment has been canceled for you by: Twoje spotkanie zosta³o skasowane przez
+The subject was: Tematem by³o
+Notification: Zawiadomienie
+
+
+###############################################
+# Page: edit_entry.php
+#
+Edit Entry: Eytuj wpis
+Add Entry: Dodaj wpis
+Details: Szczegó³y
+Participants: Wspó³uczestnicy
+Repeat: Powtarzaj
+brief-description-help: Powinien to byæ krótki opis (oko³o 20 znaków) wydarzenia. Bêdzie wy¶wietlany w kalendarzu.
+Brief Description: Krótki opis
+full-description-help: Powinien to byæ pe³ny opis wydarzenia. Bêdzie wy¶wietlany podczas ogl±dania wydarznia.
+Full Description: Pe³ny opis
+access-help: Okre¶la poziom dostêpu do wydarzenia.<br /><i>Publiczny</i>: Ka¿dy mo¿e ogl±daæ wszystkie szczegó³y wydarzenia.<br /><i>Poufny</i>: Inni u¿ytkownicy widz± ¿e masz taki wpis ale nie mog± ogl±daæ jego szczegó³ów.
+Access: Dostêp
+Public: Dla wszystkich
+Confidential: Poufny
+priority-help: Okre¶la priorytet wydarzenia. Wysoki priorytet bedzie wy¶wietlany pogrubion± czcionk±.
+Priority: Priorytet
+Low: Niski
+Medium: ¦redni
+High: Wysoki
+category-help: Okre¶la ketogoriê danego zdarzenia
+Category: Kategoria
+None: ¯aden
+date-help: Okre¶la datê wydarzenia.
+Untimed event: Zdarzenie nieokre¶lone czasowo
+Timed event: Zdarzenie okre¶lone czasowo
+All day event: Zdarzenie ca³odniowe
+time-help: Okre¶la czas wydarzenia.<br /><i>Mo¿e zostaæ puste.</i>
+am: Przed po³udniem
+pm: Po po³udniu
+duration-help: Okre¶la (w minutach) czas trwania wydarzenia.<br /><i>Mo¿e zostaæ puste.</i>
+hours: godziny
+#
+# << MISSING >>
+# end-time-help:
+# English text: Specifies the time the event is expected to end.
+#
+days: dni
+before event: przed zdarzeniem
+participants-help: Lists the participants of this entry.
+Availability: Dostêpno¶æ
+external-participants-help: Okre¶a listê uczestników dla zdarzenia, którzy nie s± u¿ytkownikami kalendarza. U¿ytkownicy powinni byæ uszeregowani - jeden na liniê i mog±zawrzeæ adres email. Je¿eli adres email jest podany, u¿ytkownik mo¿e ubiegaæ siê o otrzymywanie zawiadomieñ i przypomnieñ.
+External Participants: Zewnêtrzni u¿ytkownicy
+repeat-type-help: Wybierz z jak± czêstotliwo¶ci± wydarzenie ma byæ powtarzane.<i>Co miesi±c (wg dnia)</i> pozwala powtarzaæ wydarzenie w pierwszy poniedzia³ek ka¿dego miesi±ca, trzeci wtorek .. itd. <i>Co miesi±c (po dacie)</i> pozwala powtarzaæ wydarzenie tego samego dnia ka¿dego miesi±ca.
+Repeat Type: Typ powtarzania
+Daily: Codziennie
+Weekly: co tydzieñ
+Monthly: co miesi±c
+by day: wed³ug dnia
+by day (from end): wed³ug dnia
+by date: wed³ug daty
+Yearly: co rok
+repeat-end-date-help: Okre¶la datê do której dane wydarzenie ma byc ponawiane.
+Repeat End Date: Powtórz datê zakoñczenia
+Use end date: U¿yj daty zakoñczenia
+repeat-frequency-help: Okre¶la jak czêsto wydarzenia ba byæ powtarzane. Domy¶lnie 1 oznacza ¿e bêdzie powtarzany za ka¿dym razem. Ustawiaj±c 2 bêdzie powtarzany co drugi tydzieñ (je¶li <i>Typ powtarzania</i> jest ustawiony na <i>Co tydzieñ</i>), co drugi miesi±c (je¿eli <i>Typ powtarzania</i> jest ustawiony na <i>Co miesi±c</i>), itd.
+Frequency: Czêstotliwo¶æ
+repeat-day-help: Okresla w które dni tygodnia wydarzenie ma byæ powtarzane.  U¿ywane jest tylko gdy <i>Typ powtarzania</i> jest ustawiony na <i>Co tydzieñ</i>.
+Repeat Day: Powtórz dzieñ
+Tuesday: Wtorek
+Wednesday: ¦roda
+Thursday: Czwartek
+Friday: Pi±tek
+Saturday: Sobota
+Delete entry: Skasuj wpis
+You are not authorized to edit this entry: Nie masz autoryzacji by skasowaæ ten wpis
+
+
+###############################################
+# Page: edit_entry_handler.php
+#
+The following conflicts with the suggested time: Nastêpuj±ce wydarzenia koliduj± z sugerowanym czasem
+Unnamed Event: Nienazwane wydzrzenie
+The description is: Opis jest
+A new appointment has been made for you by: Zosta³o ustalone nowe spotkanie
+An appointment has been updated by: Spotkanie zosta³o zaktualizowane przez
+The subject is: Tematem jest
+Please look on: Proszê spójrz na
+to accept or reject this appointment: aby zatwierdzia b±d¼ odrzuciæ to spotkanie
+to view this appointment: aby obejrzeæ to spotkanie
+Scheduling Conflict: Konflikt
+Your suggested time of: Twój sugerowany czas
+conflicts with the following existing calendar entries: koliduje z nastêpuj±cymi wpisami kalendarza
+Cancel: Anuluj
+
+
+###############################################
+# Page: edit_layer.php
+#
+Edit Layer: Warstwa edycji
+Add Layer: Dodaj warstwê
+Source: ¬ród³o
+Color: Kolor
+Duplicates: Duplikaty
+Show layer events that are the same as your own: Poka¿ warstwy zdarzeñ które s± takie same jak twoje w³asne
+Delete layer: Skasuj warstwê
+Are you sure you want to delete this layer?: Jeste¶ pewny, ¿e chesz usun±æ t± warstwê?
+
+
+###############################################
+# Page: edit_layer_handler.php
+#
+You cannot create a layer for yourself: Mo¿esz stworzyæ warstwê dla siebie
+You can only create one layer for each user: Mo¿esz tylko  stworzyæ jedna warstwê dla ka¿dego u¿ytkownika
+
+
+###############################################
+# Page: edit_nonusers.php
+#
+NONUSER_PREFIX not set: NONUSER_PREFIX nie zosta³ ustawiony w pliku config.php
+word characters only: mo¿e zawieraæ tylko litery i cyfry
+Edit User: Edytuj u¿ytkownika
+Add User: Dodaj u¿ytkownika
+Calendar ID: ID kalendarza
+First Name: Imiê
+Last Name: Nazwisko
+
+
+###############################################
+# Page: edit_nonusers_handler.php
+#
+Changes successfully saved: Zmiany pomy¶lnie zapisane
+
+
+###############################################
+# Page: edit_report.php
+#
+Tomorrow: Jutro
+Today: Dzisiaj
+Yesterday: Wczoraj
+Day before yesterday: Przedwczoraj
+Next week: Nastêpny tydzieñ
+This week: Ten tydzieñ
+Last week: Ostatni tygodzieñ
+Week before last: Przed tygodniem
+Next week and week after: Nastêpny i kolejny tydzieñ po nim
+This week and next week: Ten i nastêpny tydzieñ
+Last week and this week: Poprzedni i bie¿±cy tydzieñ
+Last two weeks: Ostatnie dwa tygodnie
+Next month: Nastêpny miesi±c
+This month: Ten miesi±c
+Last month: Ostatni miesi±c
+Month before last: Przedostatni miesi±c
+Next year: Nastêpny rok
+This year: Ten rok
+Last year: Ostatni rok
+Year before last: Przedostatni rok
+Invalid report id: Nieprawid³owy id raportu
+Unnamed Report: Nienazwany raport
+Add Report: Dodaj raport
+Edit Report: Edytuj raport
+Report name: Nazwa raportu
+Current User: Bie¿±cy u¿ytkownik
+Include link in trailer: W³±cz ³±cze w zwiastunie
+Include standard header/trailer: W³±cz standardowy nag³ówek/zwiastun
+Date range: Przedia³ daty
+Include previous/next links: W³±cz poprzednie/nastêpne ³±cza
+Include empty dates: W³±cz puste daty
+Template variables: Szablonowe zmienne
+Page template: Szablon strony
+Day template: Szablon dnia
+Event template: Szablon zdarzenia
+Are you sure you want to delete this report?: Jeste¶ pewny, ¿e chcesz usun±æ ten raport?
+
+
+###############################################
+# Page: edit_report_handler.php
+#
+Variable N not found: Zmienna N nie zosta³a znaleziona
+
+
+###############################################
+# Page: edit_template.php
+#
+Edit Custom Script/Stylesheet: Ustaw w³asny skrypt/styl
+Edit Custom Header: Edytuj w³asny nag³ówek
+Edit Custom Trailer: Edytuj w³asn± stopkê
+
+
+###############################################
+# Page: edit_user.php
+#
+Username: U¿ytkownik
+E-mail address: Adres e-mail
+Password: Has³o
+again: ponów
+Disabled for demo: Wy³aczony dla wersji demo
+Are you sure you want to delete this user?: Czy jeste¶ pewien ¿e chcesz usun±æ tego u¿ytkownika?
+Change Password: Zmieñ has³o
+New Password: Nowe has³o
+Set Password: Zmieñ has³o
+
+
+###############################################
+# Page: edit_user_handler.php
+#
+Deleting users not supported: Brak obs³ugi usuwania u¿ytkowników
+The passwords were not identical: Has³a nie s± takie same
+You have not entered a password: Nie wprowadzi³e¶ has³a
+Username can not be blank: Nazwa u¿ytkownika nie mo¿e byæ pusta
+
+
+###############################################
+# Page: export.php
+#
+Export: Eksportuj
+Export format: Format eksportu
+Palm Pilot: Palm Pilot
+Include all layers: Zawiera wszystkie wartswy
+Export all dates: Eksportuj wszystkie daty
+Start date: Zaczyna siê
+End date: Koñczy siê
+Modified since: Czas modyfikacji
+
+
+###############################################
+# Page: export_handler.php
+#
+export format not defined or incorrect: format eksportu niezdefiniowany lub niepoprawny
+
+
+###############################################
+# Page: group_edit.php
+#
+Unnamed Group: Grupa bezimienna
+Add Group: Dodaj grupê
+Edit Group: Edytuj grupê
+Group name: Nazwa grupy
+Updated: Zaktualizowany
+Created by: Stworzony przez
+
+
+###############################################
+# Page: group_edit_handler.php
+#
+You must specify a group name: Musisz podaæ nazwê grupy
+
+
+###############################################
+# Page: groups.php
+#
+Add New Group: Dodaj now± grupê
+
+
+###############################################
+# Page: help_admin.php
+#
+Display days with events in bold in year view: Wy¶wietlaj w widoku rocznym dni z wydarzeniami czcionk± pogrubion±
+Nonuser: Kalendarze bez u¿ytkowników
+#
+# << MISSING >>
+# user-customize-color:
+# English text: Specifies whether users are allowed to modify their own color scheme.
+#
+#
+# << MISSING >>
+# enable-gradient-help:
+# English text: Use gradient colors for cell backgrounds.
+#
+#
+# << MISSING >>
+# Manually entering color values:
+
+
+###############################################
+# Page: help_bug.php
+#
+Report Bug: B³±d raportu
+
+
+###############################################
+# Page: help_edit_entry.php
+#
+Adding/Editing Calendar Entries: Dodawanie/edycja wpisów kalendarza
+
+
+###############################################
+# Page: help_import.php
+#
+Import: Importuj
+Palm Desktop: Palmtop
+This form will allow you to import entries from the Palm Desktop Datebook.: Ten formularz pomo¿e ci zaimportowaæ wpisy z twojego Kalendarza w Palmtopie
+It should be located in your Palm directory in <tt>datebook/datebook.dat</tt> in a subdirectory named by your username.: Powinien byæ umieszczony w katalogu <tt>datebook/datebook.dat</tt> w podkatalogu wg. nazwy u¿ytkownika
+The following entries will not be imported: Nastêpuj±ce wpisy nie zostan± zaimportowane
+Entries older than the current date: Wpisy starsze od bie¿±cej daty
+Entries created in the Palm Desktop that have not been HotSync'd: Wpisy utworzone w Palmtopie które nie zosta³y HotSync'owane
+Anything imported from Palm will be overwritten during the next import (unless the event date has passed).: Wszystko zaimportowane z Palmtopa bêdzie nadpisane podczas kolejnego importu (chyba ¿e data zdarzenia minê³a).
+Therefore, updates should be made in the Palm Desktop.: Dlatego, aktualizacje powinny byæ robione w Palmtopie
+vCal: vCal
+This form will import vCalendar (.vcs) 1.0 events: Ten formularz zaimportuje zdarzenia vCalendar (.vcs) 1.0
+The following formats have been tested: Podane formaty zosta³y przetestowane
+Palm Desktop 4: Palm Desktop 4
+Lotus Organizer 6: Lotus Organizer 6
+Microsoft Outlook 2002: Microsoft Outlook 2002
+iCalendar: iCalendar
+This form will import iCalendar (.ics) events: Ten formularz zaimportujec zdarzenia iCalendar (.ics)
+#
+# << MISSING >>
+# Enabling <b>Overwrite Prior Import</b> will cause events imported previously that used the same UID as an event from the new import file to be marked as deleted.  This should allow an updated iCalendar file to be imported without creating duplicates.:
+
+
+###############################################
+# Page: help_index.php
+#
+Help Index: Indeks pomocy
+
+
+###############################################
+# Page: help_layers.php
+#
+Layers are useful for displaying other users' events in your own calendar.  You can specifiy the user and the color the events will be displayed in.: Warswy s± u¿yteczne dla wy¶wietlania zdarzeñ innych u¿ytkowników w twoim kalendarzu. Mo¿esz zdefiniowaæ u¿ytkownika i kolor w którym bêd± wy¶wietlane jego zdarzenia.
+Add/Edit/Delete: Dodaj/Edytuj/Usuñ
+Clicking the Edit Layers link in the admin section at the bottom of the page will allow you to add/edit/delete layers.: Klikaj±c na ³±cze Edytuj Warstwy w sekcji administracyjnej na dole strony pozwoli ci na dodanie/edycjê/kasowanie warstw.
+Specifies the user that you would like to see displayed in your calendar.: Okre¶la u¿ytkownika ktrego chcia³by¶ widzieæ w swoim kalendarzu
+The text color of the new layer that will be displayed in your calendar.: Kolor tekstu nowej warstwy która bêdzie wy¶wietlona w twoim kalendarzu
+If checked, events that are duplicates of your events will be shown.: Je¿eli zaznaczona, zdarzenia które siê powtarzaj± bêd± pokazane
+Disabling: Wy³±czanie
+Press the Disable Layers link in the admin section at the bottom of the page to turn off layers.: Naci¶nij ³±cze Wy³±cz Warstwy w seksji administracyjnej na dole strony aby wy³±czyæ warstwy.
+Enabling: W³±czanie
+Press the Enable Layers link in the admin section at the bottom of the page to turn on layers.: Naci¶nij ³±cze W³±cz Warstwy w seksji administracyjnej na dole strony aby w³±czyæ warstwy.
+
+
+###############################################
+# Page: help_pref.php
+#
+Timezone Offset: przesuniêcie strefy czasowej
+tz-help: Okre¶la ile godzin potrzeba do przystosowania czasu serwera do czasu lokalnego.
+Default Category: Domy¶lna kategoria
+default-category-help: Okre¶la kategoriê do której nowe zdarzenie bêdzie dodane
+When I am the boss: Kiedy jestem szefem
+Email me event notification: Zawiadomnienie  o zdarzeniu  "napisz do mnie"
+#
+# << MISSING >>
+# email-boss-notifications-help:
+# English text: Specifies if bosses receive emails as event notifications.
+#
+I want to approve events: Chcê zatwierdziæ zdarzenia
+#
+# << MISSING >>
+# boss-approve-event-help:
+# English text: Specifies whether the boss will be required to approve events added by assistants.
+#
+Subscribe/Publish: Subskrybuj/Publikuj
+allow-remote-subscriptions-help: Okre¶la czy zdalny u¿ytkownik mo¿e byæ dodany do listy subskrypcji do twojego kalendarza, pozwalaj±c im na ogl±danie twoich zdarzeñ we w³±czonej aplikacji I-Cal (takich jak Apple's iCal albo Mozilla)
+URL: URL
+remote-subscriptions-url-help: Wy¶wietla adres internetowy na który u¿ytkownicy powinni pisaæ by zapisaæ siê na listê subskrypcji do twojego kalendarza.
+
+
+###############################################
+# Page: import.php
+#
+Disabled: Wy³±czone
+Import format: Format importu
+Exclude private records: Wyklucz prywatne wpisy
+Overwrite Prior Import: Otwórz przed zaimportowaniem
+
+
+###############################################
+# Page: import_handler.php
+#
+Import Results: Importuj rezultaty
+Events successfully imported: Wydarzenia pomy¶lnie zaimportowano
+Events from prior import marked as deleted: Zdarzenia z wcze¶niejszego imporu zosta³y zaznaczone jak skasowane
+Conflicting events: Wydarzenia konfliktowe
+Errors: B³êdy
+There was an error parsing the import file or no events were returned: B³±d przekazania importowanego pliku lub brak zdarzeñ zwróconych
+The import file contained no data: Plik importowany nie zawiera³ ¿adnych danych
+Event Imported: Zdarzenia zaimportowane
+View this entry: Ogl±daj ten wpis
+
+
+###############################################
+# Page: layers.php
+#
+Layers are currently: Warstwy s± aktualnie
+Enabled: W³±czone
+Disable Layers: Wy³±czenie warstw
+Enable Layers: W³±czenie warstw
+to modify the layers settings for the: aby zmodyfikowaæ ustawienia warstw dla
+calendar: Kalendarz
+Add layer: Dodaj warstwê
+Layer: Warstwa
+Edit layer: Edytuj warstwê
+
+
+###############################################
+# Page: list_unapproved.php
+#
+Approve/Confirm: Zatwierd¼/Potwierd¼
+Approve this entry?: Zatwierdzic ten wpis ?
+Reject: Odrzuæ
+Reject this entry?: Odrzuciæ wpis?
+No unapproved events for: ¯adnych niezatwierdzonych zdarzeñ
+Unapproved Events: Niezatwierdzone wydarzenia
+
+
+###############################################
+# Page: login.php
+#
+Invalid login: Nieprawod³owy login
+You must enter a login and password: Musisz wprowadziæ nazwê u¿ytkownika i has³o
+Save login via cookies so I don't have to login next time: Zapisz nazwê u¿ytkownika przez cookies
+Login: Login
+Access public calendar: Dostêp do kalendarza publicznego
+cookies-note: <b>Uwaga!</b> Ta aplikacja wymaga w³±czonych cookies!
+
+
+###############################################
+# Page: month.php
+#
+Sun: Nd
+Mon: Pn
+Tue: Wt
+Wed: ¦r
+Thu: Cz
+Fri: Pt
+Sat: Sb
+
+
+###############################################
+# Page: nonusers.php
+#
+Add New NonUser Calendar: Dodaj nowy kalendarz bez w³a¶ciciela
+
+
+###############################################
+# Page: pref.php
+#
+Save Preferences: Zapisz ustawienia
+to modify the preferences for the Public Access calendar: ¿eby zmodyfikowaæ ustawienia dla kalandarza publicznego
+Add N hours to: Dodaj N godzin do
+Subtract N hours from: Odejmij N godzin od
+same as: taki sam jak
+server time: czas sewera
+All: Wszystko
+
+
+###############################################
+# Page: purge.php
+#
+Preview: podgl±d
+Purging events for: Wyczy¶æ zdarzenia dla
+Finished: Zakoñczone
+Check box to delete <b>ALL</b> events for a user: Zaznacz aby skasowa <b>WSZYSTKIE</b> zdarzenia dla u¿ytkownika
+Delete all events before: Kasuj wszystkie zdarzenia przed
+Preview delete: Usuniêcie podgl±du
+Are you sure you want to delete events for: Jeste¶ pewny ¿e chcesz skasowaæ wszystkie zdarzenia dla
+Records deleted from: Pola usuniête z
+
+
+###############################################
+# Page: reject_entry.php
+#
+An appointment has been rejected by: Spotkanie zosta³o odrzucone przez
+Title: Tytu³
+
+
+###############################################
+# Page: report.php
+#
+Private: Prywatne
+This event is confidential: To zdarznie jest poufne
+Waiting for approval: Czekanie na zatwierdzenie
+Deleted: Skasowany
+Rejected: Odrzucony
+Approved: Zatwierdzone
+Unknown: Nieznane
+to manage reports for the Public Access calendar: aby zarz±dzaæ raportami kalendarza publicznego
+Add new report: Dodaj nowy raport
+cont.: cont.
+Manage Reports: Zarz±dzaj raportami
+
+
+###############################################
+# Page: search.php
+#
+Search: Szukaj
+Keywords: S³owa kluczowe
+Advanced Search: Zaawansowane szukanie
+
+
+###############################################
+# Page: search_handler.php
+#
+You must enter one or more search keywords: Musisz wprowadziæ jedno lub wiêcej s³ów kluczowych
+Search Results: Rezultaty wyszukiwania
+match found: znaleziono
+matches found: znaleziono
+No matches found: Nie znaleziono
+
+
+###############################################
+# Page: select_user.php
+#
+View Another User's Calendar: Poka¿ kalendarz innego u¿ytkownika
+Go: Id¼
+
+
+###############################################
+# Page: set_entry_cat.php
+#
+You have not added any categories: nie doda³e¶ ¿anych kategorii
+Set Category: Ustaw kategoriê
+
+
+###############################################
+# Page: users.php
+#
+Add New User: Dodaj nowego u¿ytkownika
+denotes administrative user: wskazuje administratora
+
+
+###############################################
+# Page: usersel.php
+#
+Reset: Resetuj
+Remove: Usuñ
+Ok: Ok
+
+
+###############################################
+# Page: view_d.php
+#
+No users for this view: Brak u¿ytkowników dla tego widoku
+
+
+###############################################
+# Page: view_entry.php
+#
+every: ka¿dy
+2nd: drugi
+3rd: trzeci
+4th: czwarty
+5th: pi±ty
+1st: pierwszy
+last: ostatni
+Description: Opis
+Status: Status
+day: dzieñ
+minute: minuta
+External User: Zewnêtrzny u¿ytkownik
+Approve/Confirm entry: Zatwierd¼/Potwierd¼ wpis
+Reject entry: Odrzuæ wpis
+Set category: Ustaw kategoriê
+Edit repeating entry for all dates: Edytuj powtarzaj±ce wpisy dla wszystkich dat
+Edit entry for this date: Edytuj wpis dla tej daty
+Delete repeating event for all dates: Kasuj powtarzaj±ce zdarzenia dla wszystkich dat
+This will delete this entry for all users.: Skasujesz ten wpis WSZYSTKIM u¿ytkownikom.
+Delete entry only for this date: Kasuj wpis tylko dla tej daty
+Edit entry: Edytuj wpis
+Copy entry: Kopiuj wpis
+This will delete the entry from your calendar.: Zostanie skasowany wpis z twojego kalendarza
+Add to My Calendar: Dodaj do mojego kalendarza
+Do you want to add this entry to your calendar?: Czy chcesz dodac wpis do twojego kalendarza?
+This will add the entry to your calendar.: Zostanie dodany wpis do twojego kalendarza
+Email all participants: Wy¶lij do wszystkich uczestników
+Show activity log: Poka¿ dziennik zdarzeñ
+Hide activity log: Ukryj dziennik zdarzeñ
+Export this entry to: Eksportuj ten wpis do
+
+
+###############################################
+# Page: views.php
+#
+Add New View: Dodaj nowy widok
+
+
+###############################################
+# Page: views_edit.php
+#
+Unnamed View: Widok bez nazwy
+Add View: Dodaj Widok
+Edit View: Edytuj Widok
+View Name: Zobacz Nazwê
+View Type: Zobacz Typ
+Week (Users horizontal): Tydzieñ (U¿ytkownicy poziomo)
+Week (Users vertical): Tydzieñ (U¿ytkownicy pionowo)
+Week (Timebar): Tydzieñ (z uwzglêdnieniem czasu)
+Month (Timebar): Miesi±c (z uwzglêdnieniem czasu)
+Month (side by side): Miesi±c (obok siebie)
+Month (on same calendar): Miesi±c (na tym samym kalendarzu)
+preview: podgl±d
+Selected: Wybrane
+
+
+###############################################
+# Page: views_edit_handler.php
+#
+You must specify a view name: Musisz okre¶liæ nazwê widoku
+
+
+###############################################
+# Page: week_details.php
+#
+New Entry: Nowy wpis
+
+
+###############################################
+# Page: includes/config.php
+#
+English: Angielski
+Basque: Baskijski
+Bulgarian: Bu³garski
+Catalan: Kataloñski
+Chinese (Traditonal/Big5): Chiñski (Tradycyjny/Big5)
+Chinese (Simplified/GB2312): Chiñski (Uproszczony/Big5)
+Czech: Czeski
+Danish: Duñski
+Dutch: Niderlandzki
+Estonian: Estoñski
+Finnish: Fiñski
+French: Francuski
+Galician: Galicyjski
+German: Niemiecki
+Holo (Taiwanese): Holo (Tajwañski)
+Hungarian: Wêgierski
+Icelandic: Islandzki
+Italian: W³oski
+Japanese: Japoñski
+Korean: Koreañski
+Norwegian: Norweski
+Polish: Polski
+Portuguese: Portugalski
+Portuguese/Brazil: Portugalski/Brazylijski
+Romanian: Rumuñski
+Russian: Rosyjski
+Spanish: Hiszpañski
+Swedish: Szwedzki
+Turkish: Turecki
+
+
+###############################################
+# Page: includes/functions.php
+#
+exceeds limit of XXX events per day: Przekroczono limit XXX zdarzeñ na dzieñ
+You have XXX unapproved events: Masz XXX niezatwierdzonych zdarzeñ
+January: Styczeñ
+February: Luty
+March: Marzec
+April: Kwiecieñ
+May_: Maj
+June: Czerwiec
+July: Lipiec
+August: Sierpieñ
+September: Wrzesieñ
+October: Pa¼dziernik
+November: Listopad
+Jan: Sty
+Feb: Lut
+Mar: Mar
+Apr: Kwi
+May: Maj
+Jun: Cze
+Jul: Lip
+Aug: Sie
+Sep: Wrz
+Oct: Pa¼
+Nov: Lis
+Dec: Gru
+#
+# << MISSING >>
+# All Attendees:
+Busy: Zajêty
+Tentative: Próbny
+
+
+###############################################
+# Page: includes/help_trailer.php
+#
+Go to: Id¼ do
+
+
+###############################################
+# Page: includes/site_extras.php
+#
+Send Reminder: Wy¶lij przypomnienie
+
+
+###############################################
+# Page: includes/trailer.php
+#
+My Calendar: Mój kalendarz
+Back to My Calendar: Powrót do mojego kalendarza
+Another User's Calendar: Kalendarze innych u¿ytkowników
+Add New Entry: Dodaj nowy wpis
+Logout: Logout
+Manage calendar of: Zarz±dzaj kalendarzem od
+
+
+###############################################
+# Page: includes/user-nis.php
+#
+incorrect password: nieprawid³owe has³o
+no such user: nie ma takiego u¿ytkownika
+Invalid user login: Nieprawid³owy login u¿ytkownika
+
+
+###############################################
+# Page: includes/js/admin.php
+#
+Server URL is required: Wymagany adres internetowy serwera
+Server URL must end with '/': Adres serwera musi koñczyæ siê na '/'
+Invalid work hours: Niepoprawne godziny pracy
+Invalid color for document background: Nieprawid³owy kolor t³a dokumentu
+Invalid color for document title: Nieprawid³owy kolor tytu³u dokumentu
+Invalid color for table cell background: Nieprawid³owy kolor t³a komórki tabeli
+Invalid color for table grid: Nieprawid³owy kolor dla ramek tabeli
+Invalid color for table header background: Nieprawid³owy kolor dla t³a nag³ówka
+Invalid color for table text background: Nieprawid³owy kolor dla t³a tekstu tabeli
+Invalid color for event popup background: Nieprawid³owy kolor dla t³a zdarzenia pojawiaj±cego siê
+Invalid color for event popup text: Nieprawid³owy kolor dla tekstu pojawiaj±cego siê zdarzenia
+Invalid color for table cell background for today: Nieprawid³owy kolor t³a komórki dla bie¿±cego dnia
+Color format should be '#RRGGBB': Format koloru powinien byæ '#RRGGBB'
+
+
+###############################################
+# Page: includes/js/availability.php
+#
+Change the date and time of this entry?: Zmieniæ datê i czas tego wpisu?
+
+
+###############################################
+# Page: includes/js/edit_entry.php
+#
+You have not entered a Brief Description: Nie wprowadzi³e¶ krótkiego opisu
+You have not entered a valid time of day: Nie wprowadzi³e¶ poprawnego czasu
+The time you have entered begins before your preferred work hours.  Is this correct?: Czas który poda³e¶ zaczyna siê przed preferowanymi godzinami pracy. Czy jest to poprawne?
+Please add a participant: Podaj wspó³uczestnika
+
+
+###############################################
+# Page: includes/js/edit_layer.php
+#
+Invalid color: Nieprawid³owy kolor
+
+
+###############################################
+# Page: tools/send_reminders.php
+#
+This is a reminder for the event detailed below.: To jest przypomnienie dla zdarzenia o podanych w³a¶ciwo¶ciach poni¿ej
+Reminder: Przypomnienie

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Portuguese.txt
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Portuguese.txt	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Portuguese.txt	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,1133 @@
+# Translated by:
+#	Antonio Costa - accmdq at mail.esoterica.pt
+# Last update: 16-Apr-2006
+# Translation last updated on 16-04-2006
+
+# No charset specified (not needed for iso-8859-1)
+# "charset" is used in a meta tag, do not translate "charset" here.
+# charset:
+
+
+
+###############################################
+# Page: week.php
+#
+Week: Semana
+Previous: Anterior
+Next: Seguinte
+Admin mode: Modo de administração
+Assistant mode: Modo de assistência
+cont.: cont.
+Generate printer-friendly version: Visualizar em formato de impressão
+Printer Friendly: Formato de impressão
+
+
+###############################################
+# Page: admin.php
+#
+System Settings: Parâmetros Gerais
+Help: Ajuda
+You are not authorized: Não está autorizado
+Admin: Admin
+Note: Nota
+Your user preferences: As suas preferências
+may be affecting the appearance of this page.: poderão afectar a aparência desta página.
+Click here: Clique aqui
+to not use your user preferences when viewing this page: para não usar as suas preferências durante a visualização desta página.
+are being ignored while viewing this page.: serão ignoradas durante a visualização desta página.
+to load your user preferences when viewing this page: para carregar as suas preferências durante a visualização desta página
+Save: Gravar
+Settings: Parâmetros
+Public Access: Acesso Público
+Groups: Grupos
+NonUser Calendars: Calendários sem utilizador
+Other: Outro
+Email: Correio electrónico
+colors-help: Todas as cores devem ser especificadas da forma "#RRGGBB" hexadecimal, em que "RR" é o valor hexadecimal para o encarnado, "GG" é o valor hexadecimal para o verde e "BB" é o valor hexadecimal para o azul.
+Colors: Cores
+app-name-help: Especifica o nome da aplicação que irá aparecer no título do navegador, para todas as páginas, incluindo a de entrada.
+Application Name: Nome da Aplicação
+server-url-help: Especifica o URL de base para esta aplicação. Ele será usado aquando do envio de lembretes e notificações.
+Server URL: URL do Servidor
+language-help: Especifica a língua a ser utilizada.
+Language: Linguagem
+Your browser default language is: A linguagem do navegador, por omissão, é
+fonts-help: Especifica a lista de tipos de letra a usar (por exemplo, "Arial, Helvetica", etc).
+Fonts: Tipos de letra
+#
+# << MISSING >>
+# custom-script-help:
+# English text: Allows entry of custom Javascript or stylesheet text that will be inserted into the HTML "head" section of every page.
+#
+Custom script/stylesheet: Script/folha de estilo personalizada
+Yes: Sim
+No: Não
+Edit: Editar
+#
+# << MISSING >>
+# custom-header-help:
+# English text: Allows a custom HTML snippet to be included in the top of every page.
+#
+Custom header: Cabeçalho personalizado
+#
+# << MISSING >>
+# custom-trailer-help:
+# English text: Allows a custom HTML snippet to be included at the end of every page.
+#
+Custom trailer: Rodapé personalizado
+preferred-view-help: Especifica a vista padrão (Dia, Semana, Mês, ou Ano).
+Preferred view: Visualização preferida
+Day: Dia
+Month: Mês
+Year: Ano
+display-weekends-help: Incluir fins-de-semana na vista de semana.
+Display weekends in week view: Mostrar fins-de-semana na vista de semana
+#
+# << MISSING >>
+# yearly-shows-events-help:
+# English text: On the yearly view, display days that contain events in a bold font.
+#
+Display days with events in bold in month and year views: Mostrar dias com eventos a negrito nas vistas mensais e anuais
+#
+# << MISSING >>
+# display-desc-print-day-help:
+# English text: Include event descriptions in printer-friendly version of day view.
+#
+Display description in printer day view: Mostrar descrição na vista de impressora (dia)
+date-format-help: Especifica o formato preferido da data.
+Date format: Formato da data
+December: Dezembro
+time-format-help: Especifica o formato da hora a utilizar: <I>12 horas:</I> Mostra no formato 3am, 8:30pm, etc. <I>24 horas:</I> Mostra no formato 300, 2030, etc.
+Time format: Formato da hora
+12 hour: 12 horas
+24 hour: 24 horas
+time-interval-help: Especifica a duração do bloco de tempo nas vistas de semana e dia.
+Time interval: Intervalo de tempo
+hour: hora
+minutes: minutos
+auto-refresh-help: Quando activo, as vistas de dia, semana, mês e lista de de páginas não-aprovadas serão automaticamente actualizadas periodicamente.
+Auto-refresh calendars: Actualizar automaticamente o calendário
+auto-refresh-time-help: Quando a actualização automática está activa, especifica o intervalo de tempo entre actualizações.
+Auto-refresh time: Tempo de actualização automática
+require-approvals-help: Quando activo, um utilizador deverá aprovar um evento antes de ser mostrado no seu calendário (excepto se <I>Mostra não-aprovados</I> estiver activo).
+Require event approvals: Requer aprovação de eventos
+display-unapproved-help: Especifica se os eventos não aprovados são mostrados no calendário
+Display unapproved: Mostrar não-aprovados
+display-week-number-help: Especifica se o número da semana (1-52) deve ser mostrado na vista semanal e mensal.
+Display week number: Mostrar número da semana
+display-week-starts-on: Especifica se a semana começa ao Domingo ou à Segunda-Feira.
+Week starts on: Semana começa em
+Sunday: Domingo
+Monday: Segunda
+work-hours-help: Especifica as horas apresentadas para marcação de eventos.
+Work hours: Horário de trabalho
+From: De
+to: para
+disable-priority-field-help: Seleccionar "Sim" irá remover o campo "Prioridade" das páginas de informação dos eventos, dando origem a uma interface mais simples para os utilizadores novatos.
+Disable Priority field: Desactivar campo "Prioridade"
+disable-access-field-help: Seleccionar "Sim" irá remover o campo "Acesso"
+Disable Access field: Desactivar campo "Acesso"
+disable-participants-field-help: Seleccionar "Sim" irá remover o campo "Participantes" das páginas de informação dos eventos, impedindo que os utilizadores adicionem outros utilizadores aos seus eventos. Se activar esta opção, recomenda-se que desactive a opção "Permitir ver calendário de outros utilizadores".
+Disable Participants field: Desactivar campo "Participantes"
+disable-repeating-field-help: Seleccionar "Sim" irá remover o campo "Repetições" aquando da criação de eventos, dando origem a uma interface mais simples para os utilizadores novatos.
+Disable Repeating field: Desactivar campo "Repetições"
+#
+# << MISSING >>
+# popup-includes-siteextras-help:
+# English text: If enabled, allow custom event fields setup in the site_extras.php file will be displayed in event popups.
+#
+Display Site Extras in popup: Mostrar Extras num popup
+#
+# << MISSING >>
+# allow-html-description-help:
+# English text: If enabled, users can enter HTML in the event description field.  If not enabled, the HTML tags will be escaped so as to appear as plain text.  Warning: Enabling this feature will allow users to reference images on other websites.
+#
+Allow HTML in Description: Permitir HTML na descrição
+allow-view-other-help: Especifica se um utilizador pode ou não ver o calendário de outro utilizador.
+Allow viewing other user's calendars: Permitir ver calendário de outro utilizador
+#
+# << MISSING >>
+# allow-view-add-help:
+# English text: A '+' icon will be included in views, allowing users to quickly add events to other users' calendars.
+#
+Include add event link in views: Incluir link para adicionar eventos nas vistas
+remember-last-login-help: Quando activo, o campo com o nome do utilizador será preenchido automaticamente, assim como as suas preferências.
+Remember last login: Usar preferências do último acesso
+conflict-check-help: Verificar conflito de eventos (dois eventos escalonados ao mesmo tempo pelo mesmo utilizador). Se escolher "Sim", será mostrado um aviso caso crie eventos que gerem conflito. Se escolher "Não", não será verificado o conflito de eventos. Recomenda-se a opção "Sim".
+Check for event conflicts: Verificar o conflito de eventos
+conflict-months-help: Quando está activa a verificação de conflitos, especifica quantos meses no futuro deverão ser tidos em conta nessa verificação. Se o sistema demora muito tempo a verificar conflitos, o valor deverá ser reduzido.
+Conflict checking months: Meses a usar na verificação de conflitos
+#
+# << MISSING >>
+# conflict-check-override-help:
+# English text: Allows users to override event conflicts and schedule two or more events for the same time.
+#
+Allow users to override conflicts: Permitir ultrapassar conflitos
+#
+# << MISSING >>
+# limit-appts-help:
+# English text: Allows the system administrator to set a system-wide limit on the number of appointments a single user can have on any single day.
+#
+Limit number of timed events per day: Limitar número de eventos temporizados por dia
+#
+# << MISSING >>
+# limit-appts-number-help:
+# English text: Specifies the maximum number of timed events a user can have in a single day.
+#
+Maximum timed events per day: Número máximo de eventos temporizados por dia
+#
+# << MISSING >>
+# timed-evt-len-help:
+# English text: Specifies input method for determining the length of a timed event.
+#
+Specify timed event length by: Especificar a duração dos eventos por
+Duration: Duração
+End Time: Tempo Final
+Plugins: Plugins
+#
+# << MISSING >>
+# plugins-enabled-help:
+# English text: Enable plugin applications.
+#
+Enable Plugins: Activar Plugins
+#
+# << MISSING >>
+# plugins-sort-key-help:
+# English text: Specifies a sort key for the plugin.  This allows the plugins to appear in a specific order.
+#
+Plugin: Plugin
+allow-public-access-help: Quando activo, o calendário pode ser usado para acesso público (sem possibilidade de modificação).
+Allow public access: Permitir acesso público
+public-access-default-visible: Eventos do calendário público irão aparecer em todos os calendários
+Public access visible by default: Acesso público visível por omissão
+public-access-default-selected: Aquando de um novo evento, o público será definido como participante por omissão
+Public access is default participant: Acesso público participante por omissão
+public-access-view-others-help: Quando em modo de acesso público, especifica se o utilizador pode ou não ver o calendário de outro utilizador.
+Public access can view other users: Ver calendários de outros utilizadores em modo de acesso público
+public-access-can-add-help: Quando em modo de acesso público, os utilizadores poderão criar novos eventos, mas estes apenas serão visualizados depois da aprovação pelo administrador.
+Public access can add events: Adicionar eventos em modo público
+#
+# << MISSING >>
+# public-access-add-requires-approval-help:
+# English text: Specifies whether events added via the public access account require approval before being displayed.
+#
+Public access new events require approval: Novos eventos públicos exigem aprovação
+#
+# << MISSING >>
+# public-access-sees-participants-help:
+# English text: If enabled, users accessing the calendar from the public account will be able to see event participants if they view details of an event.
+#
+Public access can view participants: Acesso público pode ver participantes
+groups-enabled-help: Activa o suporte de grupos, permitindo que os utilizadores seleccionem outros utilizadores através de grupos.
+Groups enabled: Grupos activados
+user-sees-his-group-help: Quando activo, o utilizador não verá calendários de outros utilizadores que não pertençam pelo menos a um dos seus grupos.
+User sees only his groups: Utilizador apenas acede aos seus grupos
+#
+# << MISSING >>
+# nonuser-enabled-help:
+# English text: If enabled, admins will have the option to add nonuser calendars
+#
+Nonuser enabled: Informação anónima activada
+#
+# << MISSING >>
+# nonuser-list-help:
+# English text: Where to display the nonuser calendars in the participant list
+#
+Nonuser list: Mostrar lista de paticipantes em
+Top: Acima
+Bottom: Abaixo
+#
+# << MISSING >>
+# reports-enabled-help:
+# English text: If enabled, users will see a "Reports" section at the bottom of each page and will be allowed to create custom reports.  Additionally, admin users can create global reports that will appear at the bottom of all users' pages.
+#
+Reports enabled: Relatórios activados
+#
+# << MISSING >>
+# subscriptions-enabled-help:
+# English text: Specifies if remote users can subscribe to a WebCalendar user's calendar, allowing them to see the WebCalendar user's events in their iCal-enabled application (such as Apple's iCal or Mozilla Calendar).
+#
+Allow remote subscriptions: Permitir subscrições remotas
+categories-enabled-help: Activa o suporte de categorias de eventos.
+Categories enabled: Categorias activadas
+#
+# << MISSING >>
+# allow-external-users-help:
+# English text: Specifies whether a non-calendar user can be added to an event.  This allows non-calendar users to be listed as event participants.
+#
+Allow external users: Permitir utilizadores externos
+#
+# << MISSING >>
+# external-can-receive-notification-help:
+# English text: When external users are enabled and email usage is enabled, external users can receive email notifications when the event is added, updated or delete (if the external user's email address is provided).
+#
+External users can receive email notifications: Utilizadores externos podem receber notificações
+#
+# << MISSING >>
+# external-can-receive-reminder-help:
+# English text: When external users are enabled and email usage is enabled, external users can receive email reminders (if the external user's email address is provided).
+#
+External users can receive email reminders: Utilizadores externos podem receber lembretes de correio
+email-enabled-help: Ligar ou desligar o envio de email para notificação e lembrete. Em caso de não haver servidor SMTP, escolher "Não".
+Email enabled: Correio electrónico activado
+email-default-sender: Especifica o endereço email a usar como remetente aquando do envio de lembretes.
+Default sender address: Endereço remetente por omissão
+Default user settings: Parâmetros de utilizador por omissão
+email-event-reminders-help: Especifica se são ou não enviados lembretes.
+Event reminders: Lembretes de eventos
+email-event-added: Especifica se são ou não enviadas notificações via email quando um evento é adicionado ao calendário.
+Events added to my calendar: Eventos adicionados ao meu calendário
+email-event-updated: Especifica se são ou não enviadas notificações via email quando um evento é actualizado.
+Events updated on my calendar: Eventos actualizados no meu calendário
+email-event-deleted: Especifica se são ou não enviadas notificações via email quando um evento é apagado.
+Events removed from my calendar: Eventos apagados do meu calendário
+email-event-rejected: Especifica se são ou não enviadas notificações via email quando um participante rejeita um evento.
+Event rejected by participant: Evento rejeitado por um participante
+Allow user to customize colors: Permitir ao utilizador redefinir cores
+Document background: Fundo do documento
+Select: Seleccionar
+Document title: Título do documento
+Document text: Texto do documento
+Table grid color: Cor da grelha da tabela
+Table header background: Fundo do cabeçalho da tabela
+Table header text: Texto do cabeçalho da tabela
+Table cell background: Fundo da célula da tabela
+Table cell background for current day: Fundo da célula da tabela (para o dia actual)
+Table cell background for weekends: Fundo da célula da tabela (para semana)
+Event popup background: Fundo da caixa de aviso para eventos
+Event popup text: Texto da caixa de aviso para eventos
+
+
+###############################################
+# Page: activity_log.php
+#
+Activity Log: Registo de Actividade
+User: Utilizador
+Calendar: Calendário
+Date: Data
+Time: Hora
+Event: Evento
+Action: Acção
+Event created: Evento criado
+Event approved: Evento aprovado
+Event rejected: Evento rejeitado
+Event updated: Evento actualizado
+Event deleted: Evento apagado
+Notification sent: Notificação enviada
+Reminder sent: Lembrete enviado
+Database error: Erro na base de dados
+Events: Eventos
+
+
+###############################################
+# Page: add_entry.php
+#
+Invalid entry id: Entrada com ID inválido
+This is a private event and may not be added to your calendar.: Este evento é privado e não pode ser adicionado.
+Error adding event: Erro ao adicionar evento
+
+
+###############################################
+# Page: admin_handler.php
+#
+Error: Erro
+The following error occurred: Ocorreu o seguinte erro
+
+
+###############################################
+# Page: approve_entry.php
+#
+Error approving event: Erro durante a aprovação de um evento
+
+
+###############################################
+# Page: category.php
+#
+Categories: Categorias
+Add: Adicionar
+Category Name: Nome de Categoria
+Global: Global
+Delete: Apagar
+Are you sure you want to delete this entry?: Tem a certeza que pretende apagar esta entrada?
+Add New Category: Adicionar Nova Categoria
+
+
+###############################################
+# Page: del_entry.php
+#
+Hello: Olá
+An appointment has been canceled for you by: Uma marcação foi cancelada em seu nome
+The subject was: O assunto era
+Notification: Notificação
+
+
+###############################################
+# Page: edit_layer.php
+#
+Edit Layer: Editar Nível
+Add Layer: Adicionar Nível
+Source: Origem
+Color: Cor
+Duplicates: Duplicados
+Show layer events that are the same as your own: Mostrar eventos semelhantes doutros níveis
+Are you sure you want to delete this layer?: Quer mesmo apagar este nível?
+Delete layer: Remover nível
+
+
+###############################################
+# Page: edit_layer_handler.php
+#
+You cannot create a layer for yourself: Não é permitido criar um nível para si
+You can only create one layer for each user: Apenas pode criar um nível por utilizador
+
+
+###############################################
+# Page: edit_user_handler.php
+#
+Deleting users not supported: A remoção de utilizadores não é permitida
+The passwords were not identical: As passwords não são iguais
+You have not entered a password: Não introduziu uma password
+Changes successfully saved: Alterações gravadas com sucesso
+
+
+###############################################
+# Page: export.php
+#
+Export format: Formato da exportação
+Palm Pilot: Palm Pilot
+Include all layers: Incluir todos os níveis
+Export all dates: Exportar todas as datas
+Start date: Data de início
+End date: Data final
+Modified since: Modificado desde
+Export: Exportar
+
+
+###############################################
+# Page: export_handler.php
+#
+export format not defined or incorrect: formato de exportação não definido ou incorrecto
+
+
+###############################################
+# Page: group_edit.php
+#
+Unnamed Group: Grupo Sem Nome
+Add Group: Adicionar Grupo
+Edit Group: Editar Grupo
+Group name: Nome de grupo
+Updated: Actualizado
+Created by: Criado por
+Users: Utilizadores
+
+
+###############################################
+# Page: group_edit_handler.php
+#
+You must specify a group name: Deve especificar um nome de grupo
+
+
+###############################################
+# Page: groups.php
+#
+Add New Group: Adicionar Novo Grupo
+
+
+###############################################
+# Page: pref.php
+#
+Preferences: Preferências
+Save Preferences: Gravar Preferências
+to modify the preferences for the Public Access calendar: para modificar as preferências do calendário de Acesso Público
+tz-help: Quantas horas para ajustar o tempo à hora local
+Timezone Offset: Offset de Zona Horária
+Add N hours to: Adicionar N horas a
+Subtract N hours from: Subtrair N horas a
+same as: igual a
+server time: hora do servidor
+Default Category: Categoria por Omissão
+When I am the boss: Quando for o administrador
+Email me event notification: Enviar-me uma mensagem de notificação de evento
+I want to approve events: Quero aprovar eventos
+Subscribe/Publish: Subscrever/Publicar
+#
+# << MISSING >>
+# allow-remote-subscriptions-help:
+# English text: Specifies if remote users can subscribe to your calendar, allowing them to see your events in a iCal-enabled application (such as Apple's iCal or Mozilla Calendar).
+#
+#
+# << MISSING >>
+# remote-subscriptions-url-help:
+# English text: Displays the URL remote users should use to subscribe to your calendar.
+#
+URL: URL
+Sun: Dom
+Mon: Seg
+Tue: Ter
+Wed: Qua
+Thu: Qui
+Fri: Sex
+Sat: Sáb
+
+
+###############################################
+# Page: help_bug.php
+#
+Report Bug: Relatório de Erro (bug)
+
+
+###############################################
+# Page: help_edit_entry.php
+#
+Adding/Editing Calendar Entries: Adicionar/Editar Entradas
+Brief Description: Breve Descrição
+brief-description-help: Breve descrição (cerca de 20 caracteres) do evento. Esta descrição representa o evento na vista global do calendário.
+Full Description: Descrição Completa
+full-description-help: Descrição completa do evento. Esta informação é apresentada quando o utilizador verifica o evento isoladamente.
+date-help: Especifica a data do evento.
+time-help: Especifica a hora do evento. Este campo é opcional.
+duration-help: Especifica a duração do evento em minutos. Este campo é opcional.
+#
+# << MISSING >>
+# end-time-help:
+# English text: Specifies the time the event is expected to end.
+#
+Priority: Prioridade
+priority-help: Especifica a prioridade do evento.  Prioridade Alta é apresentada num tipo de letra mais escuro.
+Access: Accesso
+access-help: Especifica o nível de acesso do evento. <BR><I>Público</I> Todos os intervenientes podem ver todos os detalhes do evento. <BR><I>Confidencial</I> Outros utilizadores poderão ver que tem um evento marcado, mas não podem visualizar os detalhes.
+Participants: Participantes
+participants-help: Lista os participantes neste evento.
+Repeat Type: Tipo de repetição
+repeat-type-help: Selecciona a periodicidade do evento. <I>Mensal (por dia)</I> faz com que o evento se repita no 1º dia do mês, 3º dia do mês, etc. <I>Mensal (por data)</I> faz com que um evento se repita todos os meses no mesmo dia.
+Repeat End Date: Data para fim de repetição
+repeat-end-date-help: Especifica a data até à qual o evento se repete.
+Repeat Day: Dia a repetir
+repeat-day-help: Especifica em que dias da semana o evento se repete. Isto é apenas utilizado quando o <I>Tipo de repetição</I> tem o valor de <I>Semanal</I>.
+Frequency: Frequência
+repeat-frequency-help: Especifica quantas vezes o evento se deve repetir. O valor padrão (1) indica que o evento acontece todos os dias.  Especificar 2 faz com que o evento se repita noutra semana (se <I>Tipo de repetição</I> tem o valor de <I>Semanal</I>), todos os meses (se <I>Tipo de repetição</I> tem o valor de <I>Mensal</I>), etc.
+
+
+###############################################
+# Page: help_index.php
+#
+Help Index: Ajuda
+Layers: Níveis
+Import: Importar
+
+
+###############################################
+# Page: help_layers.php
+#
+Layers are useful for displaying other users' events in your own calendar.  You can specifiy the user and the color the events will be displayed in.: Os níveis são apropriados para mostrar eventos doutros utilizadores no seu calendário. Pode especificar o utilizador e a cor dos eventos a mostrar.
+Add/Edit/Delete: Adicionar/Editar/Apagar
+Clicking the Edit Layers link in the admin section at the bottom of the page will allow you to add/edit/delete layers.: Clicar na ligação "Editar Níveis", na secção administrativa do fundo da página, permite adicionar/editar/apagar níveis.
+Specifies the user that you would like to see displayed in your calendar.: Especifica o utilizador que deseja visualizar no seu calendário
+The text color of the new layer that will be displayed in your calendar.: A cor do texto do novo nível que será usada no seu calendário.
+If checked, events that are duplicates of your events will be shown.: Quando activo, mostra eventos que são duplicados dos seus eventos.
+Disabling: Desactivando
+Press the Disable Layers link in the admin section at the bottom of the page to turn off layers.: Clique na ligação "Desactivar Níveis", na secção administrativa do fundo da página, para desactivar os níveis.
+Enabling: Activando
+Press the Enable Layers link in the admin section at the bottom of the page to turn on layers.: Clique na ligação "Activar Níveis", na secção administrativa do fundo da página, para activar os níveis.  
+
+
+###############################################
+# Page: help_admin.php
+#
+Display days with events in bold in year view: Mostrar dias com eventos em negrito na vista anual
+Nonuser: Informação anónima
+Reports: Relatórios
+
+
+###############################################
+# Page: layers.php
+#
+to modify the layers settings for the: para modificar a configuração de níveis para
+Layers are currently: Os níveis estão actualmente
+Enabled: Activados
+Disabled: Desactivados
+Disable Layers: Desactivar Níveis
+Enable Layers: Activar Níveis
+Layer: Nível
+Edit layer: Editar nível
+Add layer: Adicionar nível
+
+
+###############################################
+# Page: list_unapproved.php
+#
+View this entry: Visualizar esta entrada
+Approve/Confirm: Aprovar/Confirmar
+Approve this entry?: Aprovar esta entrada?
+Reject this entry?: Rejeitar esta entrada?
+Reject: Rejeitar
+No unapproved events for: Não há eventos por aprovar para
+Unapproved Events: Eventos Não Aprovados
+
+
+###############################################
+# Page: view_entry.php
+#
+Low: Baixa
+Medium: Média
+High: Alta
+every: todos
+2nd: 2º
+3rd: 3º
+4th: 4º
+5th: 5º
+1st: 1º
+last: último
+by date: por data
+Confidential: Confidencial
+Description: Descrição
+Status: Estado
+Waiting for approval: À espera de aprovação
+Deleted: Apagada
+Rejected: Rejeitada
+All day event: Evento de dia completo
+Public: Público
+Category: Categoria
+days: dias
+day: dia
+hours: horas
+minute: minuto
+before event: antes do evento
+External User: Utilizador anónimo
+Approve/Confirm entry: Aprovar/Confirmar entrada
+Reject entry: Rejeitar entrada
+Set category: Definir categoria
+Edit repeating entry for all dates: Editar entrada repetitiva em todas as datas
+Edit entry for this date: Editar entrada desta data
+Delete repeating event for all dates: Apagar entrada repetitiva em todas as datas
+This will delete this entry for all users.: Isto apagará esta entrada para todos os utilizadores.
+Delete entry only for this date: Apagar entrada desta data
+Edit entry: Editar entrada
+Delete entry: Apagar entrada
+Copy entry: Copiar entrada
+This will delete the entry from your calendar.: Isto apagará a entrada do seu calendário.
+Add to My Calendar: Adicionar ao Meu Calendário
+Do you want to add this entry to your calendar?: Quer adicionar esta entrada ao seu calendário?
+This will add the entry to your calendar.: Isto adicionará a entrada ao seu calendário.
+Email all participants: Enviar email a todos os participantes
+Show activity log: Mostrar registo de actividades
+Hide activity log: Esconder registo de actividades
+Export this entry to: Exportar esta entrada para
+
+
+###############################################
+# Page: reject_entry.php
+#
+An appointment has been rejected by: Uma marcação foi rejeitada por
+The description is: A descrição é
+Title: Título
+
+
+###############################################
+# Page: search.php
+#
+Search: Pesquisar
+Keywords: Palavras
+Advanced Search: Pesquisa Avançada
+
+
+###############################################
+# Page: search_handler.php
+#
+You must enter one or more search keywords: Tem de introduzir uma ou mais palavras de pesquisa
+Search Results: Resultados da pesquisa
+match found: Ocorrência encontrada
+matches found: Ocorrências encontradas
+No matches found: Ocorrências não encontradas
+
+
+###############################################
+# Page: select_user.php
+#
+View Another User's Calendar: Ver Calendário de Outro Utilizador
+Go: Ver
+
+
+###############################################
+# Page: users.php
+#
+Account: Perfil
+Add New User: Adicionar Novo Utilizador
+denotes administrative user: administrador
+
+
+###############################################
+# Page: usersel.php
+#
+All: Todos
+None: Nenhuma
+Reset: Reiniciar
+Remove: Apagar
+Ok: Ok
+Cancel: Cancelar
+
+
+###############################################
+# Page: import.php
+#
+Import format: Formato de importação
+Exclude private records: Excluir eventos privados
+Overwrite Prior Import: Escrever sobre importação anterior
+
+
+###############################################
+# Page: login.php
+#
+Invalid login: Acesso inválido
+You must enter a login and password: Tem de introduzir um Utilizador e uma Password
+Username: Utilizador
+Password: Password
+Save login via cookies so I don't have to login next time: Gravar Utilizador e Password para sessões futuras (não recomendado se este computador for utilizado por mais pessoas)
+Login: Entrar
+Access public calendar: Calendário de acesso público
+cookies-note: <B>Nota:</B> Esta opção requer a activação da opção de 'cookies' no seu navegador.
+
+
+###############################################
+# Page: views.php
+#
+Views: Vistas
+Add New View: Adicionar Nova Vista
+
+
+###############################################
+# Page: views_edit.php
+#
+Unnamed View: Vista sem Nome
+Add View: Adicionar Vista
+Edit View: Editar Vista
+View Name: Nome da Vista
+View Type: Tipo de Vista
+Week (Users horizontal): Semana (Utilizadores na horizontal)
+Week (Users vertical): Semana (Utilizadores na vertical)
+Week (Timebar): Semana (Barra temporal)
+Month (Timebar): Mês (Barra temporal)
+Month (side by side): Mês (lado a lado)
+Month (on same calendar): Mês (no mesmo calendário)
+preview: previsão
+
+
+###############################################
+# Page: nonusers.php
+#
+NONUSER_PREFIX not set: Prefixo de acesso público por definir!
+Add New NonUser Calendar: Adicionar Novo Calendário Público
+
+
+###############################################
+# Page: nonusers_handler.php
+#
+Calendar ID: ID do calendário
+word characters only: apenas caracteres de palavras (a-zA-Z_0-9)
+
+
+###############################################
+# Page: help_pref.php
+#
+default-category-help: Especifica a categoria, por omissão, a que um novo deverá pertencer.
+
+
+###############################################
+# Page: report.php
+#
+Untimed event: Evento não temporizado
+Private: Privado
+Approved: Aprovada
+Unknown: Desconhecida
+to manage reports for the Public Access calendar: para gerir relatórios do calendário de Acesso Público
+Add new report: Adicionar novo relatório
+Invalid report id: Identificador de relatório inválido
+Manage Reports: Gerir Relatórios
+
+
+###############################################
+# Page: views_edit_handler.php
+#
+You must specify a view name: Deve especificar un nome de vista
+
+
+###############################################
+# Page: week_details.php
+#
+New Entry: Nova entrada
+am: AM
+pm: PM
+
+
+###############################################
+# Page: import_handler.php
+#
+Import Results: Importar Resultados
+Events successfully imported: Eventos importados com sucesso
+Events from prior import marked as deleted: Eventos de importações anteriores marcadas para remoção
+Conflicting events: Eventos conflituosos
+Errors: Erros
+There was an error parsing the import file or no events were returned: Ocorreu um erro ao interpretar o ficheiro ou não foram encontrados eventos
+The import file contained no data: O ficheiro não contém dados
+The following conflicts with the suggested time: O seguinte está em conflito com a hora sugerida
+Unnamed Event: Evento sem Nome
+Scheduling Conflict: Conflito na Marcação
+conflicts with the following existing calendar entries: está em conflito com os seguintes eventos
+Event Imported: Evento Importado
+
+
+###############################################
+# Page: edit_entry.php
+#
+Edit Entry: Editar Entrada
+Add Entry: Adicionar Entrada
+Details: Detalhes
+Scheduling: Escalonamento
+Repeat: Repetição
+category-help: Especifica a categoria do evento.
+Timed event: Evento temporizado
+#
+# << MISSING >>
+# external-participants-help:
+# English text: Specifies a list of participants for the event that are not calendar users.  The users should be listed one per line and can include an email address.  If an email address is specified, the user is eligible to receive notications and reminders.
+#
+External Participants: Participantes Externos
+Daily: Diário
+Weekly: Semanal
+Monthly: Mensal
+by day: por dia
+by day (from end): por dia a contar do fim
+Yearly: Anual
+Use end date: Utilizar data de fim de repetição
+Tuesday: Terça
+Wednesday: Quarta
+Thursday: Quinta
+Friday: Sexta
+Saturday: Sábado
+You are not authorized to edit this entry: Não está autorizado a editar esta entrada
+
+
+###############################################
+# Page: edit_report.php
+#
+Tomorrow: Amanhã
+Today: Hoje
+Yesterday: Ontem
+Day before yesterday: Anteontem
+Next week: Próxima semana
+This week: Semana corrente
+Last week: Semana passada
+Week before last: Semana antepassada
+Next week and week after: Semanas seguintes
+This week and next week: Semana corrente e seguinte
+Last week and this week: Semana passada e corrente
+Last two weeks: Últimas duas semanas
+Next month: Próximo mês
+This month: Mês corrente
+Last month: Mês passado
+Month before last: Mês antepassado
+Next year: Próximo ano
+This year: Ano corrente
+Last year: Ano passado
+Year before last: Ano antepassado
+Unnamed Report: Relatório sem nome
+Add Report: Adicionar Relatório
+Edit Report: Editar Relatório
+Report name: Nome de Relatório
+Current User: Utilizador Corrente
+Include link in trailer: Incluir link no rodapé
+Include standard header/trailer: Incluir cabeçalho/rodapé standard
+Date range: Gama de datas
+Include previous/next links: Incluir links anteriores/seguintes
+Include empty dates: Incluir datas vazias
+Template variables: Variáveis padrão
+Page template: Página padrão
+Day template: Dia padrão
+Event template: Evento padrão
+Are you sure you want to delete this report?: Tem a certeza que deseja apagar este relatório?
+
+
+###############################################
+# Page: assistant_edit.php
+#
+Assistants: Assistentes
+Your assistants: Seus assistentes
+
+
+###############################################
+# Page: adminhome.php
+#
+Delete Events: Remover Eventos
+Public Preferences: Preferências Públicas
+Unapproved Public Events: Eventos Públicos por Aprovar
+Administrative Tools: Ferramentas administrativas
+
+
+###############################################
+# Page: purge.php
+#
+Purging events for: Removendo eventos de
+Finished: Terminado
+Delete all events before: Remover todos os eventos antes de
+Check box to delete <b>ALL</b> events for a user: Seleccione caixa para remover <b>TODOS</b> os eventos do utilizador
+Are you sure you want to delete events for: Tem a certeza que quer apagar entradas para
+Records deleted from: Remover registos de
+
+
+###############################################
+# Page: set_entry_cat.php
+#
+You have not added any categories: Não adicionou nenhuma categoria
+Set Category: Definir Categoria
+
+
+###############################################
+# Page: help_import.php
+#
+Palm Desktop: Palm PDA
+This form will allow you to import entries from the Palm Desktop Datebook.: Este formulário permite importar entradas do Palm Datebook.
+It should be located in your Palm directory in <tt>datebook/datebook.dat</tt> in a subdirectory named by your username.: Deverá estar localizado no directório Palm em <tt>datebook/datebook.dat</tt> dentro de subdirectório com o seu nome de utilizador
+The following entries will not be imported: As seguintes entradas serão importadas
+Entries older than the current date: Entradas mais antigas do que a data corrente
+Entries created in the Palm Desktop that have not been HotSync'd: Entradas criadas no Palm Desktop que não foram HotSync'd
+Anything imported from Palm will be overwritten during the next import (unless the event date has passed).: Informação importada do Palm será sobreescrita na próxima importação (excepto se a data do evento tiver passado).
+Therefore, updates should be made in the Palm Desktop.: Assim sendo, deverão ser feitas actualizações no Palm.
+vCal: vCal
+This form will import vCalendar (.vcs) 1.0 events: Este formulário permite importar eventos vCalendar 1.0 (.vcs)
+The following formats have been tested: Os seguintes formatos foram testados
+Palm Desktop 4: Palm 4 PDA
+Lotus Organizer 6: Lotus Organizer 6
+Microsoft Outlook 2002: Microsoft Outlook 2002:
+iCalendar: iCalendar
+This form will import iCalendar (.ics) events: Este formulário irá importar eventos iCalendar (.ics)
+Enabling <b>Overwrite Prior Import</b> will cause events imported previously that used the same UID as an event from the new import file to be marked as deleted.  This should allow an updated iCalendar file to be imported without creating duplicates.: Activar este mecanismo irá apagar eventos conflituosos e evitar duplicações.
+
+
+###############################################
+# Page: edit_report_handler.php
+#
+Variable N not found: Variável N não existente
+
+
+###############################################
+# Page: edit_entry_handler.php
+#
+A new appointment has been made for you by: Uma nova marcação foi criada para si por
+An appointment has been updated by: Uma marcação foi actualizada por
+The subject is: O assunto é
+Please look on: Por favor veja em
+to accept or reject this appointment: para aceitar ou rejeitar este evento
+to view this appointment: para ver este evento
+Your suggested time of: A sua hora sugerida de
+
+
+###############################################
+# Page: edit_nonusers.php
+#
+Edit User: Editar Utilizador
+Add User: Adicionar Utilizador
+First Name: Primeiro Nome
+Last Name: Último Nome
+
+
+###############################################
+# Page: edit_template.php
+#
+Edit Custom Script/Stylesheet: Editar Script/Folha de estilo Personalizada
+Edit Custom Header: Editar Cabeçalho Personalizado
+Edit Custom Trailer: Editar Rodapé Personalizado
+
+
+###############################################
+# Page: edit_user.php
+#
+E-mail address: Endereço de email
+again: novamente
+Disabled for demo: Desactivado em modo demo
+Are you sure you want to delete this user?: Tem a certeza que quer remover este utilizador?
+Change Password: Alterar Password
+New Password: Nova Password
+Set Password: Gravar Password
+
+
+###############################################
+# Page: includes/trailer.php
+#
+Go to: Ir para
+My Calendar: Meu Calendário
+Back to My Calendar: Voltar ao Meu Calendário
+Another User's Calendar: Calendário de Outro Utilizador
+Add New Entry: Adicionar Nova Entrada
+Logout: Sair
+Manage calendar of: Gerir calendário de
+
+
+###############################################
+# Page: includes/user.php
+#
+incorrect password: password incorrecta
+no such user: utilizador não encontrado
+Invalid user login: Acesso inválido
+
+
+###############################################
+# Page: includes/site_extras.php
+#
+Send Reminder: Enviar Lembrete
+
+
+###############################################
+# Page: includes/config.php
+#
+#
+# << MISSING >>
+# English:
+#
+# << MISSING >>
+# Basque:
+#
+# << MISSING >>
+# Bulgarian:
+#
+# << MISSING >>
+# Catalan:
+#
+# << MISSING >>
+# Chinese (Traditonal/Big5):
+#
+# << MISSING >>
+# Chinese (Simplified/GB2312):
+#
+# << MISSING >>
+# Czech:
+#
+# << MISSING >>
+# Danish:
+#
+# << MISSING >>
+# Dutch:
+#
+# << MISSING >>
+# Estonian:
+#
+# << MISSING >>
+# Finnish:
+#
+# << MISSING >>
+# French:
+#
+# << MISSING >>
+# Galician:
+#
+# << MISSING >>
+# German:
+#
+# << MISSING >>
+# Holo (Taiwanese):
+#
+# << MISSING >>
+# Hungarian:
+#
+# << MISSING >>
+# Icelandic:
+#
+# << MISSING >>
+# Italian:
+#
+# << MISSING >>
+# Japanese:
+#
+# << MISSING >>
+# Korean:
+#
+# << MISSING >>
+# Norwegian:
+#
+# << MISSING >>
+# Polish:
+Portuguese: Português
+#
+# << MISSING >>
+# Portuguese/Brazil:
+#
+# << MISSING >>
+# Russian:
+#
+# << MISSING >>
+# Spanish:
+#
+# << MISSING >>
+# Swedish:
+#
+# << MISSING >>
+# Turkish:
+
+
+###############################################
+# Page: includes/functions.php
+#
+This event is confidential: Este evento é confidencial
+exceeds limit of XXX events per day: excede o limite de XXX eventos por dia
+You have XXX unapproved events: Tem XXX evento(s) por aprovar
+January: Janeiro
+February: Fevereiro
+March: Março
+April: Abril
+May_: Maio
+June: Junho
+July: Julho
+August: Agosto
+September: Setembro
+October: Outubro
+November: Novembro
+Jan: Jan
+Feb: Fev
+Mar: Mar
+Apr: Abr
+May: Mai
+Jun: Jun
+Jul: Jul
+Aug: Ago
+Sep: Set
+Oct: Out
+Nov: Nov
+Dec: Dez
+
+
+###############################################
+# Page: includes/js/admin.php
+#
+Server URL is required: É necessário o URL do servidor
+Server URL must end with '/': O URL do servidor deve terminar com '/'
+Invalid work hours: Horas de trabalho incorrectas
+Invalid color for document background: Cor inválida para o fundo do documento
+Invalid color for document title: Cor inválida para o título do documento
+Invalid color for table cell background: Cor inválida para o fundo da célula da tabela
+Invalid color for table grid: Cor inválida para a grelha da tabela
+Invalid color for table header background: Cor inválida para o fundo do cabeçaºho da tabela
+Invalid color for table text background: Cor inválida para o fundo do texto da tabela
+Invalid color for event popup background: Cor inválida para o fundo da caixa de aviso
+Invalid color for event popup text: Cor inválida para o texto da caixa de aviso
+Invalid color for table cell background for today: Cor inválida para o fundo da célula da tabela (para o dia actual)
+Color format should be '#RRGGBB': O formato do código de cor deve ser '#RRGGBB'
+
+
+###############################################
+# Page: includes/js/edit_entry.php
+#
+You have not entered a Brief Description: Não introduziu uma breve descrição
+You have not entered a valid time of day: Não introduziu uma hora do dia válida
+The time you have entered begins before your preferred work hours.  Is this correct?: A hora introduzida é anterior ao seu período de trabalho. Tem a certeza?
+
+
+###############################################
+# Page: includes/js/edit_layer.php
+#
+Invalid color: Cor inapropriada
+
+
+###############################################
+# Page: tools/send_reminders.php
+#
+This is a reminder for the event detailed below.: Isto é um lembrete do evento seguinte.
+Reminder: Lembrete

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Portuguese_BR.txt
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Portuguese_BR.txt	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Portuguese_BR.txt	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,1019 @@
+# Brazilian Portuguese Translation
+# Revision 1.0
+# Translated by: Mauricio Piza - mpiza at formare.com.br
+# 
+# Based in Portuguese version, by Paulino Michelazzo - paulino at michelazzo.com.br
+# Based in Portuguese version, by José Roberto Kerne - joseroberto at dicaslinux.com.br
+# Based in Portuguese version, by Sérgio Oliveira - sloliv at terra.com.br
+# Based in Portuguese version, by Nuno Lopes - nml at maxitel.pt
+# Based in Portuguese version, by Andre Oliveira - zack22 at ig.com.br
+#
+# Last update: 23 June 2005
+# Translation last updated on 06-23-2005
+
+# No charset specified (not needed for iso-8859-1)
+# "charset" is used in a meta tag, do not translate "charset" here.
+# charset:
+
+
+
+###############################################
+# Page: activity_log.php
+#
+Activity Log: Log de Atividade
+Admin: Admin
+User: Usuário
+Calendar: Calendário
+Date: Data
+Time: Hora
+Event: Evento
+Action: Ação
+Event created: Evento criado
+Event approved: Evento aprovado
+Event rejected: Evento rejeitado
+Event updated: Evento atualizado
+Event deleted: Evento deletado
+Notification sent: Notificação enviada
+Reminder sent: Lembrete enviado
+Database error: Erro no banco de dados
+Previous: Anterior
+Events: Eventos
+Next: Próximo
+
+
+###############################################
+# Page: add_entry.php
+#
+Invalid entry id: Entrada com ID inválido
+This is a private event and may not be added to your calendar.: Este é um evento privado e não pode ser adicionado ao seu calendário.
+Error adding event: Erro adicionando evento
+
+
+###############################################
+# Page: admin.php
+#
+System Settings: Configurações
+Help: Ajuda
+You are not authorized: Você não está autorizado
+Note: Nota
+Your user preferences: Suas preferências
+may be affecting the appearance of this page.: podem afetar a aparência desta página.
+Click here: Clique aqui
+to not use your user preferences when viewing this page: para não usar suas preferências quando visualizar esta página
+are being ignored while viewing this page.: são ignoradas enquanto visualizar esta página
+to load your user preferences when viewing this page: para carregar suas preferências quando visualizar esta página
+Save: Salvar
+Settings: Configurações
+Public Access: Acesso Público
+Groups: Grupos
+NonUser Calendars: Calendários de não-usuário
+Other: Outros
+Email: E-mail
+colors-help: Todas as cores devem ser especificadas no formato hexadecimal "#RRGGBB".
+Colors: Cores
+app-name-help: Especificar o nome do aplicativo a ser mostrado na barra de título
+Application Name: Nome da Aplicação
+server-url-help: Especificar a URL base para a aplicação.
+Server URL: URL do Servidor
+language-help: Especificar o idioma a ser utilizado.
+Language: Idioma
+Your browser default language is: O idioma padrão do seu browser é:
+fonts-help: Especificar uma lista de fontes do sistema para uso (Exemplo: Arial, Verdana)
+Fonts: Fontes
+custom-script-help: Permite a indicação de Javacript ou folha de estilos própria que pode ser inserida na seção "head" de cada página
+Custom script/stylesheet: Script/Folha de estilos própria
+Yes: Sim
+No: Não
+Edit: Editar
+custom-header-help: Permite a inclusão de um pedaço de código HTML no topo de todas as páginas
+Custom header: Cabeçalho customizado
+custom-trailer-help: Permite a inclusão de um pedaço de código HTML no rodapé de todas as páginas 
+Custom trailer: Rodapé customizado
+preferred-view-help: Especificar a visualização padrão (Dia, Semana, Mês ou Ano)
+Preferred view: Visualização preferida
+Day: Dia
+Week: Semana
+Month: Mês
+Year: Ano
+display-weekends-help: Mostrar feriados na visualização semanal
+Display weekends in week view: Mostrar feriados na visualização semanal
+yearly-shows-events-help: Na visualização anual, mostrar dias que contenham eventos em negrito
+Display days with events in bold in month and year views: Na visualização anual, mostrar em negrito dias que contenham eventos 
+display-desc-print-day-help: Incluir descrições de evento na versão para impressão da visualização diária
+Display description in printer day view: Mostrar descrição na visualização diária
+date-format-help: Especifique um formato de data preferido.
+Date format: Formato da Data
+December: Dezembro
+time-format-help: Especifica o formato da hora a ser utilizada: <br /><i>12 horas
+Time format: Formato da Hora
+12 hour: 12 horas
+24 hour: 24 horas
+time-interval-help: Especifique quantos blocos devem ser mostrados na visualização
+Time interval: Intervalo de Tempo
+hour: hora
+minutes: minutos
+auto-refresh-help: Quando habilitado, as visões diaria, semanal, mensal, e a lista de páginas não aprovadas são todas auto-atulaizadas periodicamente
+Auto-refresh calendars: Auto-atualizar o calendário
+auto-refresh-time-help: Se a auto-atualização estiver habilitada, este é o tempo entre atualizações
+Auto-refresh time: Tempo de auto-atualização
+require-approvals-help: Quando habilitada, um usuário precisa aprovar um evento antes dele ser exibido no seu calendário (a não ser que Exibir não-aprovados esteja habilitado). Configurar aqui para "Não" não desligará as aprovações para o calendário de Acesso Público (se o claendário público estiver habilitado).
+Require event approvals: Requer aprovação do evento
+display-unapproved-help: Especifica se eventos não-aprovados são exibidos em seu calendário.<br /> Se configurado para "Sim", então eventos não-aprovados serão exibidos em seu calendário (em uma cor de texto diferente. <br /> Se configurado para "Não", então eventos precisam ser aprovados antes deles serem exibidos no seu calendário.
+Display unapproved: Visualizar não-aprovados
+display-week-number-help: Especifica se o número da semana (1-52) deve ser exibido na visão mensal e na visão semanal.
+Display week number: Visualizar número da semana
+display-week-starts-on: Especifica se a semana começa em uma Segunda ou um Domingo. Se a Segunda for especificada, os números de semana serão números ISO.
+Week starts on: Semana começa em
+Sunday: Domingo
+Monday: Segunda
+work-hours-help: Especifica as horas apresentadas para marcação de eventos.
+Work hours: Horário de trabalho
+From: De
+to: para
+disable-priority-field-help: Selecionando "Sim" será removido o campo "Prioridades"
+Disable Priority field: Desabilitar campo de Prioridade
+disable-access-field-help: Selecionar "Sim" removerá o campo"Acesso" das páginas de informações de evento, oferecendo uma interface mais simples para iniciantes.
+Disable Access field: Desabilitar campo Acesso
+disable-participants-field-help: Selecionar "Sim" removerá o campo "Participantes" da página de informações de evento, impedindo que usuários coloquem outros usuários em seus eventos. Se você habilitar esta opção, você pode tambem querer desabilitar o campo "Permitir visualização de calendários de outros usuários" tambem.
+Disable Participants field: Desabilitar campo Participantes
+disable-repeating-field-help: Selecionar "Sim" removerá o campo "Repetir" quando eventos forem ser adicionados. Isto oferecerá uma interface mais simplespara usuários iniciantes.
+Disable Repeating field: Desabilitar campo Repetição
+popup-includes-siteextras-help: Se habilitado, permitir setup de campos de evento customizados no arquivo site_extras.php que serão exibidos nos pop-ups de evento.
+Display Site Extras in popup: Exibir extras do site em popup
+allow-html-description-help: Se habilitado, os usuáriospodem inserir HTML no campo de descrição do evento. Se desabilitado, as tags serão ignoradas de maneira a aparecer como texto simplest. Atenção: Habilitar esta funcionalidade permitirá aos usuários referenciar imagens em outros sites.
+Allow HTML in Description: Permitir HTML na descrição
+allow-view-other-help: Especifica um usuário que poderá visualizar o calendário
+Allow viewing other user's calendars: Permitir visualização do calendário de outro usuário
+allow-view-add-help: Um ícone '+' será incluido nas visualizações, permitindo usuários rápidamente adicionar eventos a calendários de outros usuários.
+Include add event link in views: Incluir adicionar eventos em visualizações
+remember-last-login-help: Quando ligado, o logon do usuário poderá ser automaticamente lembrado
+Remember last login: Lembrar ultimo acesso
+conflict-check-help: Verificar se o evento está em conflito (dois eventos agendado no mesmo horário)
+Check for event conflicts: Verificar eventos conflitantes
+conflict-months-help: Se a verificação de conflitos estiver funcionando ("Verificar eventos conflitantes" estiver configurado para "Não"), isto especifica por quantos meses no futuro verificaremos a existência de conflitos. Se você achar que adicionar eventos está demorando demais, reduza este número. 
+Conflict checking months: Verificar conflitos no mês
+conflict-check-override-help: Permite aos usuários ignorar conflitos e programar 2 ou mais eventos para a mesma hora.
+Allow users to override conflicts: Permitir aos usuários sobrescrever conflitos
+limit-appts-help: Permitite ao administrador de sistema definir um limite geral para o número de compromissos um único usuário pode ter por dia.
+Limit number of timed events per day: Limitar o número de eventos por dia
+limit-appts-number-help: Especifica o número máximo de eventos um usuário pode ter em um único dia.
+Maximum timed events per day: Número máximo de eventos por dia
+timed-evt-len-help: Especifica o método de entrada para determinar a duração de um evento.
+Specify timed event length by: Especificar evento por
+Duration: Duração
+End Time: Hora de término
+Plugins: Plugins
+plugins-enabled-help: Habilitar aplicações plugin
+Enable Plugins: Habilitar Plugins
+plugins-sort-key-help: Especifica uma chave de ordenação para o plugin. Isto permite que os plugins apareçam em uma ordem específica.
+Plugin: Plugin
+allow-public-access-help: Quando habilitado, o calendário pode ser usado como um calendário público somente leitura que não exige login dos usuários.
+Allow public access: Permitir acesso público
+public-access-default-visible: Eventos do calendário público aparecerão automáticamente em todos os calendários de usuários
+Public access visible by default: Acesso público é visível por default
+public-access-default-selected: Quando adicionando um evento novo, o usuário público será selecionado como participante por default.
+Public access is default participant: Acesso público é participante por default
+public-access-view-others-help: Quando acessando o sistema pelo Acesso Público, especifica se o usuário pode ver o calendário de outro usuário de calendário.
+Public access can view other users: Acesso público pode ver outros usuários
+public-access-can-add-help: Quando habilitado, usuários que acessem o sistema através de Acesso Público poderão adicionar novos eventos, mas eles não aparecerão no calendário até que um administrador aprovar o novo evento.
+Public access can add events: Acesso público pode criar eventos
+public-access-add-requires-approval-help: Especifica se eventos adicionados através da conta de acesso público necessitam de aprovação antes de serem exibidos. 
+Public access new events require approval: Novos eventos de acesso público necessitam aprovação
+public-access-sees-participants-help: Se habilitado, usuários acessando o calendário da conta pública serão capazes de ver os participantes do evento ao olharem os detalhes de um evento.
+Public access can view participants: Acesso público pode ver participantes
+groups-enabled-help: Habilitar suporte a grupos, permintindo a seleção de usuário
+Groups enabled: Grupos está habilitado
+user-sees-his-group-help: Se habilitado, usuários não poderão visualizar usuários de grupos dos quais não participe.
+User sees only his groups: Usuário apenas visualiza seus grupos
+nonuser-enabled-help: Se habilitado, admins terão a opção de criar calendários de não-usuário
+Nonuser enabled: Habilitada criação de calendários de não-usuário 
+nonuser-list-help: Aonde exibir os calendários de não-usuário na lista de parcipantes
+Nonuser list: Exibir na lista de participantes no
+Top: Topo
+Bottom: Rodapé
+reports-enabled-help: Se habilitado, os usuários verão uma seção "Relatórios" no pé de cada página e terão a permissão de criar relatórios personalizados. Usuarios admin poderão criar relatórios globais que aparecerão no rodapé de todas as páginas de usuários.
+Reports enabled: Relatórios habilitados
+subscriptions-enabled-help: Especifica se usuários remotos podem assinar o calendário de um usuário do WebCalendar, permitindo-os ver os eventos do usuário WebCalendar em sua aplicação iCal (tais como iCal da Apple's ou Calendário Mozilla).
+Allow remote subscriptions: Permitir assinaturas remotas
+categories-enabled-help: Habilitar suporte a categoria do evento.
+Categories enabled: Categorias habilitadas.
+allow-external-users-help: Especifica se um usuário sem calendário pode ser adicionado a um evento. Isto permite que usuários sem calendário sejam listados como participantes de evento.
+Allow external users: Permitir usuários externos
+external-can-receive-notification-help: Quando usuários externos estiverem habilitados e o uso de emails está habilitado, usuários externos podem receber notificações de email quando o evento é adicionado, atualizado ou excluido (se o email do usuário externo for fornecido).
+External users can receive email notifications: Usuários externos podem receber notificações por email
+external-can-receive-reminder-help: Quando usuários externos estiverem habilitados e o uso de emails está habilitado, usuários externospodem receber lembretes por email (se o email do usuário externo for fornecido).
+External users can receive email reminders: Usuários externos podem receber lembretes por email
+email-enabled-help: Ativar ou desativar notificação por e-mail para agendamento
+Email enabled: E-mail ligado
+email-default-sender: Especificar endereço de e-mail para envio de notificações
+Default sender address: Usuário padrão para envio
+Default user settings: Configurações padrão do usuário
+email-event-reminders-help: Especificar envio ou não de lembretes.
+Event reminders: Lembrete do evento
+email-event-added: Especifica se notificações por email deverão ou não ser mandadas quando um evento é adicionado ao seu calendário.
+Events added to my calendar: Eventos adicionados em meu calendário
+email-event-updated: Especifica se notificações por email deverão ou não ser mandadas quando um evento é atualizado no seu calendário.
+Events updated on my calendar: Eventos atualizados em meu calendário
+email-event-deleted: Especifica se notificações por email deverão ser mandadas ou não quando um evento é removido do seu calendário.
+Events removed from my calendar: Eventos removidos em meu calendário
+email-event-rejected: Especifica se notificações por emaildeverão ser mandadas ou não quando um participante rejeita um evento que está no seu calendário.
+Event rejected by participant: Evento rejeitado pelo participante
+Allow user to customize colors: Permitir ao usuário customizar suas cores.
+Enable gradient images for background colors: Permitir imagens em gradiente para cores de fundo
+Not available: Não disponível
+Document background: Fundo do documento
+Select: Selecionar
+Document title: Título do documento
+Document text: Texto do documento
+Table grid color: Cor da grade da tabela
+Table header background: Cor de fundo do cabeçalho
+Table header text: Texto do cabeçalho da tabela
+Table cell background: Fundo da célula da tabela
+Table cell background for current day: Fundo da célula da tabela (para o dia atual)
+Table cell background for weekends: Fundo da célula para feriados
+Event popup background: Fundo para eventos pop-up
+Event popup text: Texto para eventos pop-up
+
+
+###############################################
+# Page: adminhome.php
+#
+Preferences: Preferências
+Users: Usuários
+Account: Conta
+Assistants: Assistentes
+Categories: Categorias
+Views: Visualizações
+Layers: Níveis
+Reports: Relatórios
+Delete Events: Exclui Eventos
+Public Preferences: Preferências Públicas
+Unapproved Public Events: Eventos Públicos não aprovados
+Administrative Tools: Ferramentas Administrativas
+
+
+###############################################
+# Page: admin_handler.php
+#
+Error: Erro
+The following error occurred: Ocorreu o seguinte erro
+
+
+###############################################
+# Page: approve_entry.php
+#
+Error approving event: Erro aprovando evento
+
+
+###############################################
+# Page: assistant_edit.php
+#
+Admin mode: Modo de Administrador
+Your assistants: Seus assistentes
+
+
+###############################################
+# Page: category.php
+#
+Add: Adicionar
+Category Name: Nome da categoria
+Global: Geral
+Delete: Apagar
+Are you sure you want to delete this entry?: Tem certeza que pretende apagar esta entrada?
+Add New Category: Nova categoria
+
+
+###############################################
+# Page: day.php
+#
+Assistant mode: Modo Assistente
+Generate printer-friendly version: Visualizar em formato de impressora
+Printer Friendly: Formato de impressora
+
+
+###############################################
+# Page: del_entry.php
+#
+Hello: Olá
+An appointment has been canceled for you by: Uma evento seu foi cancelando por
+The subject was: O assunto era
+Notification: Notificação
+
+
+###############################################
+# Page: edit_entry.php
+#
+Edit Entry: Editar Entrada
+Add Entry: Adicionar Entrada
+Details: Detalhes
+Participants: Participantes
+Repeat: Repetir
+brief-description-help: Esta deve oferecer uma breve descição (em torno de 20 caracteres) do evento. Isto vai representar o evento quando visualizando o calendário.
+Brief Description: Descrição breve
+full-description-help: Esta deve completar os detalhes do evento. Esta informação pode ser vista quando o usuário vê o evento.
+Full Description: Descrição completa
+access-help: Especifica o nível de acesso de um evento.<br /> <i>Publico</i>: Todos podem ver os detalhes do evento.  <br /><i>Confidencial</i>: Os outros podem ver que você tem uma entrada para aquele dia e hora, mas não os detalhes do evento.
+Access: Accesso
+Public: Público
+Confidential: Confidencial
+priority-help: Especifica a prioridade do evento. Eventos de Alta Prioridade serão exibidos em negrito.
+Priority: Prioridade
+Low: Baixa
+Medium: Média
+High: Alta
+category-help: Espeficificar a categoria do evento
+Category: Categoria
+None: Nenhuma
+date-help: Especifica a data do evento.
+Untimed event: Evento sem hora
+Timed event: Eventos com Hora
+All day event: Evento no dia todo
+time-help: Especifica a hora do evento<br /><i>Este campo é opcional.</i>
+am: am
+pm: pm
+duration-help: Especifica a duração (em minutos) do evento. <br /><i>Este campo
+hours: horas
+end-time-help: Especifica a hora em que um evento terminará.
+days: dias
+before event: Evento anterior
+participants-help: Lista os participantes desse evento
+Availability: Disponibilidade
+external-participants-help: Especifica uma lista de participantes para o evento que não são usuários de calendário. Os usuários devem ser listado um por linha e podem incluir um endereço de email. Se um endereço de email for especificado, o usuário poderá receber notificações e lembretes.
+External Participants: Participantes Externos
+repeat-type-help: Selecione quantas vezes o evento deve repetir. <i>Mensalmente (por dia)</i> permite um evento ser repetido na primeira Segunda do mês, terceira Terça do mês, etc.  <i>Mensalmente (por data)</i> permite que um evento seja repetido no mesmo dia do mês.
+Repeat Type: Tipo de repetição
+Daily: Diário
+Weekly: Semanal
+Monthly: Mensal
+by day: por dia
+by day (from end): por dia (do fim)
+by date: por data
+Yearly: Anual
+repeat-end-date-help: Especifica a data até à qual o evento se deve repetir.
+Repeat End Date: Data para fim de repetição
+Use end date: Utilizar data de fim de repetição
+repeat-frequency-help: Especifica a frequência com que o evento deve ser repetido. O default 1 indica que ele deve ocorrer todas as vezes. Especificar 2 fará o evento ocorrer semana sim, semana não (se <i>Tipo de Repetição</i> estiver configurado para<i>Semanal</i>), Mês sim, mês não (se <i>Tipo de Repetição</i> estiver configurado para <i>Mensal</i>), etc.
+Frequency: Freqüência
+repeat-day-help: Especifica em quais dias da semana o evento deve ser repetido. Isto deve ser usado somente quando o <i>Tipo de Repetição</i> estiver configurado para <i>Semanal</i>.
+Repeat Day: Dia a repetir
+Tuesday: Terça
+Wednesday: Quarta
+Thursday: Quinta
+Friday: Sexta
+Saturday: Sábado
+Delete entry: Apagar entrada
+You are not authorized to edit this entry: Não está autorizado a editar esta entrada
+
+
+###############################################
+# Page: edit_entry_handler.php
+#
+The following conflicts with the suggested time: O seguinte está em conflito com o tempo sugerido
+Unnamed Event: Evento sem Nome
+The description is: A descrição é
+A new appointment has been made for you by: Um novo evento foi feito para você
+An appointment has been updated by: Um evento foi atualizado por
+The subject is: O assunto é
+Please look on: Por favor veja em
+to accept or reject this appointment: para aceitar ou rejeitar este evento
+to view this appointment: para ver este evento
+Scheduling Conflict: Conflito no agendamento
+Your suggested time of: A sua hora sugerida de
+conflicts with the following existing calendar entries: está em conflito com os eventos do calendário
+Cancel: Cancelar
+
+
+###############################################
+# Page: edit_layer.php
+#
+Edit Layer: Editar Nível
+Add Layer: Adicionar Nível
+Source: Origem
+Color: Cor
+Duplicates: Duplicados
+Show layer events that are the same as your own: Mostrar níveis de eventos que sejam os mesmos que o seu
+Delete layer: Remover nível
+Are you sure you want to delete this layer?: Quer mesmo apagar este nível?
+
+
+###############################################
+# Page: edit_layer_handler.php
+#
+You cannot create a layer for yourself: Você não pode criar um nível para si mesmo
+You can only create one layer for each user: Você deve criar apenas uma visualização para cada usuário
+
+
+###############################################
+# Page: edit_nonusers.php
+#
+NONUSER_PREFIX not set: NONUSER_PREFIX não foi definido no config.php
+word characters only: somente pode conter caracteres de palavras (a-zA-Z_0-9)
+Edit User: Editar Usuário
+Add User: Adicionar Usuário
+Calendar ID: ID do Calendário
+First Name: Primeiro Nome
+Last Name: Último Nome
+
+
+###############################################
+# Page: edit_nonusers_handler.php
+#
+Changes successfully saved: Mudanças salvas com sucesso
+
+
+###############################################
+# Page: edit_report.php
+#
+Tomorrow: Amanhã
+Today: Hoje
+Yesterday: Ontém
+Day before yesterday: Antes de Ontém
+Next week: Próxima semana
+This week: Esta semana
+Last week: Semana passada
+Week before last: Semana retrasada
+Next week and week after: Semana que vém e a próxima
+This week and next week: Esta semana e semana que vém
+Last week and this week: Semana passada e esta semana
+Last two weeks: Duas semanas atrás
+Next month: Próximo mês
+This month: Este mês
+Last month: Mês passado
+Month before last: Mês retrasado
+Next year: Próximo ano
+This year: Este ano
+Last year: Ano passado
+Year before last: Ano retrasado
+Invalid report id: Id do relatório inválido
+Unnamed Report: Relatório sem Nome
+Add Report: Adiciona Relatório
+Edit Report: Editar Relatório
+Report name: Nome do Relatório
+Current User: Usuário Corrente
+Include link in trailer: Incluir Link no Menu
+Include standard header/trailer: Incluir cabeçalho e Menu
+Date range: Período
+Include previous/next links: Incluir links prévios/próximos
+Include empty dates: Incluir datas vazias
+Template variables: variáveis de template
+Page template: Template de página
+Day template: Template de dia
+Event template: Template de evento
+Are you sure you want to delete this report?: Deseja realmente excluir este relatório?
+
+
+###############################################
+# Page: edit_report_handler.php
+#
+Variable N not found: Variável N não encontrada
+
+
+###############################################
+# Page: edit_template.php
+#
+Edit Custom Script/Stylesheet: Editar Script/Folha de estilo
+Edit Custom Header: Editar Cabeçalho Customizado
+Edit Custom Trailer: Editar Menu Customizado
+
+
+###############################################
+# Page: edit_user.php
+#
+Username: Usuário
+E-mail address: Endereço de e-mail
+Password: Senha
+again: novamente
+Disabled for demo: Desativado em modo demo
+Are you sure you want to delete this user?: Você tem certeza que deseja excluir este usuário?
+Change Password: Alterar Senha
+New Password: Nova Senha
+Set Password: Gravar Senha
+
+
+###############################################
+# Page: edit_user_handler.php
+#
+Deleting users not supported: Deleção de usuários não suportada
+The passwords were not identical: As senhas não são iguais
+You have not entered a password: Não entrou com a senha
+Username can not be blank: Nome de usuário não pode estar vazio
+
+
+###############################################
+# Page: export.php
+#
+Export: Exportar
+Export format: Formato para exportar
+Palm Pilot: Palm Pilot
+Include all layers: Incluir todas as níveis
+Export all dates: Exportar todas as datas
+Start date: Data de início
+End date: Data final
+Modified since: Modificado desde
+
+
+###############################################
+# Page: export_handler.php
+#
+export format not defined or incorrect: Formato para exportar não foi definido ou está errado.
+
+
+###############################################
+# Page: groups.php
+#
+Add New Group: Novo grupo
+
+
+###############################################
+# Page: group_edit.php
+#
+Unnamed Group: Grupo não identificado
+Add Group: Adicionar grupo
+Edit Group: Editar grupo
+Group name: Nome do grupo
+Updated: Atualizado
+Created by: Criado por
+
+
+###############################################
+# Page: group_edit_handler.php
+#
+You must specify a group name: Você deve especificar o nome do grupo
+
+
+###############################################
+# Page: help_admin.php
+#
+Display days with events in bold in year view: Mostrar em negrito dias que contenham eventos 
+Nonuser: Calendários de não-usuário
+user-customize-color: Especifica se os usuários tem permissão de modificar seu próprio esquema de cores
+enable-gradient-help: Usar gradientes de cor para backgrounds de células
+Manually entering color values: Inserir valores de cor manualmente
+
+
+###############################################
+# Page: help_bug.php
+#
+Report Bug: Reportar erro
+
+
+###############################################
+# Page: help_edit_entry.php
+#
+Adding/Editing Calendar Entries: Adicionar/Editar Entradas
+
+
+###############################################
+# Page: help_import.php
+#
+Import: Importar
+Palm Desktop: Palm Desktop
+This form will allow you to import entries from the Palm Desktop Datebook.: Permite que você importe os compromissos de seu Palm Desktop
+It should be located in your Palm directory in <tt>datebook/datebook.dat</tt> in a subdirectory named by your username.: Deverá ser localizado no diretório do seu Palm em <tt>datebook/datebook.dat</tt> no subdiretório do usuário
+The following entries will not be imported: Os seguintes eventos não serão importados
+Entries older than the current date: Eventos anteriores a data corrente
+Entries created in the Palm Desktop that have not been HotSync'd: Entradas geradas no Palm Desktop que não foram sincronizados
+Anything imported from Palm will be overwritten during the next import (unless the event date has passed).: Qualquer evento importado do Palm será sobrescrito durante a próxima importação
+Therefore, updates should be made in the Palm Desktop.: Por isso, atualizações deverão ser feitas no Palm Desktop
+vCal: vCal
+This form will import vCalendar (.vcs) 1.0 events: Este formulário importa do vCalendar (.vcs)
+The following formats have been tested: Os seguintes formatos foram testados
+Palm Desktop 4: Desktop Palm 4
+Lotus Organizer 6: Organizador Lotus 6
+Microsoft Outlook 2002: Microsoft Outlook 2002
+iCalendar: iCalendar
+This form will import iCalendar (.ics) events: Este formulário importa do iCalendar (.ics)
+Enabling <b>Overwrite Prior Import</b> will cause events imported previously that used the same UID as an event from the new import file to be marked as deleted.  This should allow an updated iCalendar file to be imported without creating duplicates.: Habilitar <b>Sobreescrever Antes de Importar</b> fará com que eventos previamente importados que usavam o mesmo UID que um um evento do novo arquivo importado sejam marcados como deletados. Isto deve permitir um arquivo atualizado do iCalendar ser importado sem criar duplicatas.
+
+
+###############################################
+# Page: help_index.php
+#
+Help Index: Ajuda
+
+
+###############################################
+# Page: help_layers.php
+#
+Layers are useful for displaying other users' events in your own calendar.  You can specifiy the user and the color the events will be displayed in.: Níveis são úteis para exibir eventos de outros usuários em seu proprio calendário. Você pode especificar o usuário e a cor em que os eventos serão exibidos.
+Add/Edit/Delete: Adicionar/Editar/Deletar
+Clicking the Edit Layers link in the admin section at the bottom of the page will allow you to add/edit/delete layers.: Clicar no link Editar Níveis na seção principal no pé da página lhe permitirá adicionar/editar/excluir níveis
+Specifies the user that you would like to see displayed in your calendar.: Especifica o usuário que será exibido no seu calendário
+The text color of the new layer that will be displayed in your calendar.: A cor de texto do novo nível que será exibida no seu calendário
+If checked, events that are duplicates of your events will be shown.: Se selecionado, eventos que são duplicatas dos seus eventos serão mostrados.
+Disabling: Desabilitando
+Press the Disable Layers link in the admin section at the bottom of the page to turn off layers.: Pressione o link Desabilitar Níveis na seção administrativa no pé da página para desligar os níveis.
+Enabling: Habilitando
+Press the Enable Layers link in the admin section at the bottom of the page to turn on layers.: Pressione o link Habilitar Níveis na seção administrativa no pé da página para ligar os níveis.
+
+
+###############################################
+# Page: help_pref.php
+#
+Timezone Offset: Diferença de Fuso Horário
+tz-help: Especifica quantas horas de ajuste entre a hora do servidor e a local.
+Default Category: Categoria padrão
+default-category-help: Especificar a categoria padrão para novos eventos.
+When I am the boss: Quando sou o chefe
+Email me event notification: Enviar notificação por email de novos eventos
+email-boss-notifications-help: Especifica se chefes recebem emails como notificações de evento
+I want to approve events: Desejo aprovar os eventos
+boss-approve-event-help: Especifica se o chefe precisará aprovar eventos adicionados por assistentes
+Subscribe/Publish: Assinar/Publicar
+allow-remote-subscriptions-help: Especifica se usuários remotos podem assinar seu calendário, permitindo-os ver seus eventos em uma aplicação que permita iCal (como o iCal da Apple ou o Claendário Mozilla).
+URL: URL
+remote-subscriptions-url-help: Exibe a URL que usuários remotos deverão usar para assinar seu calendário
+
+
+###############################################
+# Page: import.php
+#
+Disabled: Desativados
+Import format: Formato de importação
+Exclude private records: Excluir eventos privados
+Overwrite Prior Import: Sobrescrever Importação Anterior
+
+
+###############################################
+# Page: import_handler.php
+#
+Import Results: Resultado da Importação
+Events successfully imported: Eventos importados com sucesso
+Events from prior import marked as deleted: Eventos passados marcados como excluídos
+Conflicting events: Eventos Conflitantes
+Errors: Erros
+There was an error parsing the import file or no events were returned: Ocorreu um erro ao processar o arquivo importado ou nenhum evento retornou
+The import file contained no data: O arquivo não contém data
+Event Imported: Evento Importado
+View this entry: Visualizar esta entrada
+
+
+###############################################
+# Page: layers.php
+#
+Layers are currently: Os níveis estão
+Enabled: Ativados
+Disable Layers: Desativar Níveis
+Enable Layers: Ativar Níveis
+to modify the layers settings for the: para modificar as configurações de níveis para o
+calendar: calendário
+Add layer: Adicionar nível
+Layer: Nível
+Edit layer: Editar nível
+
+
+###############################################
+# Page: list_unapproved.php
+#
+Approve/Confirm: Aprovar/Confirmar
+Approve this entry?: Aprovar esta entrada?
+Reject: Rejeitar
+Reject this entry?: Rejeitar esta entrada?
+No unapproved events for: Eventos não aprovados para
+Unapproved Events: Eventos não aprovados
+
+
+###############################################
+# Page: login.php
+#
+Invalid login: Login Inválido
+You must enter a login and password: Você deve digitar um usuário e senha
+Save login via cookies so I don't have to login next time: Gravar usuário e senha
+Login: Entrar
+Access public calendar: Calendário de acesso público
+cookies-note: <b>Nota:</b> Esta opção requer a opção de 'cookies' no seu browser habilitada.
+
+
+###############################################
+# Page: month.php
+#
+Sun: Dom
+Mon: Seg
+Tue: Ter
+Wed: Qua
+Thu: Qui
+Fri: Sex
+Sat: Sáb
+
+
+###############################################
+# Page: nonusers.php
+#
+Add New NonUser Calendar: Adiciona Calendário de não-usuário
+
+
+###############################################
+# Page: pref.php
+#
+Save Preferences: Gravar
+to modify the preferences for the Public Access calendar: para motificar as preferências para o calendário de Acesso Público
+Add N hours to: Adiciona N horas para
+Subtract N hours from: Subtrai N horas de
+same as: mesmo que
+server time: hora do servidor
+All: Todos
+
+
+###############################################
+# Page: purge.php
+#
+Preview: Visualização
+Purging events for: Eliminando eventos de
+Finished: Finalizado
+Check box to delete <b>ALL</b> events for a user: Marcar para excluir <b>TODOS</b> os eventos de um usuário
+Delete all events before: Excluir todos os eventos ateriores
+Preview delete: Excluir Visualização
+Are you sure you want to delete events for: Você tem certeza que deseja excluir os eventos para
+Records deleted from: Registros deletados do
+
+
+###############################################
+# Page: reject_entry.php
+#
+An appointment has been rejected by: Um evento foi rejeitado por
+Title: Calendário Pessoal
+
+
+###############################################
+# Page: report.php
+#
+Private: Pessoal
+This event is confidential: Este evento é confidencial
+Waiting for approval: Aguardando por aprovação
+Deleted: Deletado
+Rejected: Rejeitada
+Approved: Aprovado
+Unknown: Desconhecido
+to manage reports for the Public Access calendar: para administrar relatórios para o Calendário de Acesso Público
+Add new report: Adiciona novo relatório
+cont.: cont.
+Manage Reports: Confugurar Relatórios
+
+
+###############################################
+# Page: search.php
+#
+Search: Pesquisar
+Keywords: Palavras
+Advanced Search: Busca avançada
+
+
+###############################################
+# Page: search_handler.php
+#
+You must enter one or more search keywords: É preciso introduzir uma ou mais palavras para busca
+Search Results: Resultados da pesquisa
+match found: Ocorrência encontrada
+matches found: Ocorrências encontradas
+No matches found: Ocorrências não encontradas
+
+
+###############################################
+# Page: select_user.php
+#
+View Another User's Calendar: Ver o calendário de outro usuário
+Go: Ir
+
+
+###############################################
+# Page: set_entry_cat.php
+#
+You have not added any categories: Você não adicionou nenhuma categoria
+Set Category: Selecionar Categoria
+
+
+###############################################
+# Page: users.php
+#
+Add New User: Adicionar Novo Usuário
+denotes administrative user: administrador
+
+
+###############################################
+# Page: usersel.php
+#
+Reset: Limpar
+Remove: Remover
+Ok: OK
+
+
+###############################################
+# Page: views.php
+#
+Add New View: Adicionar visualização
+
+
+###############################################
+# Page: views_edit.php
+#
+Unnamed View: Visualização sem nome
+Add View: Adicionar Visualização
+Edit View: Editar Visualização
+View Name: Nome da Visualização
+View Type: Tipo da Visualização
+Week (Users horizontal): Semana (Usuários Horizontal)
+Week (Users vertical): Semana (Usuários Vertical)
+Week (Timebar): Semana (Timebar)
+Month (Timebar): Mês (Timebar)
+Month (side by side): Mês (Lado a Lado)
+Month (on same calendar): Mês (no mesmo calendário)
+preview: visualização
+Selected: Selecionado
+
+
+###############################################
+# Page: views_edit_handler.php
+#
+You must specify a view name: Você deve especificar um novo nome para a Visualização
+
+
+###############################################
+# Page: view_d.php
+#
+No users for this view: Nenhum usuário para esta visão
+
+
+###############################################
+# Page: view_entry.php
+#
+every: cada
+2nd: Segundo
+3rd: Terceiro
+4th: Quarto
+5th: Quinto
+1st: Primeiro
+last: último
+Description: Descrição
+Status: Status
+day: dia
+minute: minuto
+External User: Usuário Externo
+Approve/Confirm entry: Aprovar/Confirmar entrada
+Reject entry: Rejeitar entrada
+Set category: Selecionar categoria
+Edit repeating entry for all dates: Editar repetição para todas as datas
+Edit entry for this date: Editar entrada para esta data
+Delete repeating event for all dates: Excluir repetição em todos os eventos
+This will delete this entry for all users.: Isto vai apagar esta entrada para todos os usuários
+Delete entry only for this date: Excluir entradas apenas nesta data
+Edit entry: Editar entrada
+Copy entry: Copiar entrada
+This will delete the entry from your calendar.: Isto excluirá a entrada de seu calendário
+Add to My Calendar: Adicionar ao meu calendário
+Do you want to add this entry to your calendar?: Você quer adicionar uma entrada no seu calendário?
+This will add the entry to your calendar.: Isto adicionará uma entrada em seu calendário
+Email all participants: Enviar e-mail para participantes
+Show activity log: Mostrar log de atividade
+Hide activity log: Esconder log de atividade
+Export this entry to: Esportar esta entrada para
+
+
+###############################################
+# Page: week_details.php
+#
+New Entry: Nova entrada
+
+
+###############################################
+# Page: includes/config.php
+#
+English: Inglês
+Basque: Basco
+Bulgarian: Búlgaro
+Catalan: Catalão
+Chinese (Traditonal/Big5): Chinês (Tradicional/Big5)
+Chinese (Simplified/GB2312): Chinês (Simplificado/GB2312)
+Czech: Checo
+Danish: Dinamrquês
+Dutch: Holandês
+Estonian: Estoniano
+Finnish: Finlandês
+French: Francês
+Galician: Galego
+German: Alemão
+Holo (Taiwanese): Holo (Taiwanês)
+Hungarian: Húngaro
+Icelandic: Islandês
+Italian: Italiano
+Japanese: Japonês
+Korean: Coreano
+Norwegian: Norueguês
+Polish: Polonês
+Portuguese: Português
+Portuguese/Brazil: Português/Brasil
+Romanian: Romeno
+Russian: Russo
+Spanish: Espanhol
+Swedish: Sueco
+Turkish: Turco
+
+
+###############################################
+# Page: includes/functions.php
+#
+exceeds limit of XXX events per day: limite excedido de XXX eventos por dia
+You have XXX unapproved events: Você tem XXX eventos não aprovados
+January: Janeiro
+February: Fevereiro
+March: Março
+April: Abril
+May_: Maio
+June: Junho
+July: Julho
+August: Agosto
+September: Setembro
+October: Outubro
+November: Novembro
+Jan: Jan
+Feb: Fev
+Mar: Mar
+Apr: Abr
+May: Mai
+Jun: Jun
+Jul: Jul
+Aug: Ago
+Sep: Set
+Oct: Out
+Nov: Nov
+Dec: Dez
+All Attendees: Todos Atendentes
+Busy: Ocupados
+Tentative: tentando
+
+
+###############################################
+# Page: includes/help_trailer.php
+#
+Go to: Ir para
+
+
+###############################################
+# Page: includes/site_extras.php
+#
+Send Reminder: Enviar Lembrete
+
+
+###############################################
+# Page: includes/trailer.php
+#
+My Calendar: Meu Calendário
+Back to My Calendar: Volta para Meu Calendário
+Another User's Calendar: Calendário de Outro Usuário
+Add New Entry: Adicionar Evento
+Logout: Sair
+Manage calendar of: Configurar Calendário de
+
+
+###############################################
+# Page: includes/user-nis.php
+#
+incorrect password: senha incorreta
+no such user: usuário inexistente
+Invalid user login: Usuário Inválido
+
+
+###############################################
+# Page: includes/js/admin.php
+#
+Server URL is required: Endereço do Servidor é Necessário
+Server URL must end with '/': Endereço do Servidor deve acabar com /
+Invalid work hours: Horário de trabalho inválido
+Invalid color for document background: Cor de fundo inválida para o documento
+Invalid color for document title: Cor inválida para o título do documento
+Invalid color for table cell background: Cor inválida para cor de fundo da célula
+Invalid color for table grid: Cor inválida para a grade da tabela
+Invalid color for table header background: Cor de fundo inválida para cabeçalho da tabela
+Invalid color for table text background: Cor de fundo inválida para o texto da tabela
+Invalid color for event popup background: Cor de fundo inválida para o evento popup
+Invalid color for event popup text: Cor inválida para evento popup
+Invalid color for table cell background for today: Cor de fundo inválida para a celula de hoje
+Color format should be '#RRGGBB': Formato da cor deve ser '#RRGGBB'
+
+
+###############################################
+# Page: includes/js/availability.php
+#
+Change the date and time of this entry?: Mudar a data e a hora desta entrada?
+
+
+###############################################
+# Page: includes/js/edit_entry.php
+#
+You have not entered a Brief Description: Você não inseriu uma Descrição Breve
+You have not entered a valid time of day: Você não inseriu uma hora válida do dia
+The time you have entered begins before your preferred work hours.  Is this correct?: A data que você inseriu começa antes da sua hora preferida
+Please add a participant: Por favor adicionar um participante
+
+
+###############################################
+# Page: includes/js/edit_layer.php
+#
+Invalid color: Cor inválida
+
+
+###############################################
+# Page: tools/send_reminders.php
+#
+This is a reminder for the event detailed below.: Este é um lembrete para o evento abaixo descrito
+Reminder: Despertador
+</div>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Romanian.txt
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Romanian.txt	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Romanian.txt	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,1006 @@
+# WebCalendar translation for Romanian language. 
+# The format is "English text: translated text"
+# There cannot be a ":" in the English text.
+# Translated by:
+#	 Dan Protopopescu <protopop at physics.gla.ac.uk>
+# Last update: 19 January 2005
+# Check out the tools directory which contains two perl scripts:
+#   check_translation.pl will tell you if you have successfully translated
+#        all required text
+#   update_translation.pl will take an old translation file and move the
+#        translations around so they age grouped by the page they appear in.
+#        It will also identify any missing translations and tag them
+#        with a comment.  If it is a non-english translation, the english
+#        translation will be included in the comment to simplify completing
+#        the translation.
+#
+# Note: You will notice the entry for "May_" below.  There's a reason for
+# this.  Translate "May_" to the full month name and "May" to the three-letter
+# month abbreviation (like "Oct" for "October").
+#
+#
+#
+#
+# Translation last updated on 19-01-2005
+
+
+###############################################
+# Specify a charset (will be sent within meta tag for each page)
+#
+charset: iso-8859-2
+#
+#
+# Note: the special entity codes for Romanian are:
+#  a(	ă	ă
+#  A(  	Ă        Ă
+#  a^	â		â
+#  A^ 	Â         Â
+#  i^	î		î
+#  I^	Î         Î
+#  s,	ş	ş
+#  S,   Ş	Ş
+#  t,	ţ	ţ
+#  T,	Ţ	Ţ
+
+
+###############################################
+# Page: week.php
+#
+Week: Săptămâna
+Previous: Anterioara
+Next: Următoarea
+Admin mode: Modul 'administrator' 
+Assistant mode: Modul 'asistent'
+cont.: cont.
+Generate printer-friendly version: Generează o versiune uşor de tipărit
+Printer Friendly: Pentru tipărit
+
+
+###############################################
+# Page: admin.php
+#
+System Settings: Configuraţie de sistem
+Help: Ajutor
+You are not authorized: Nu eşti autorizat(ă)
+Admin: Admin
+Note: Notă
+Your user preferences: Preferinţele tale de utilizator
+may be affecting the appearance of this page.: pot afecta aspectul acestei pagini.
+Click here: Fă click aici
+to not use your user preferences when viewing this page: pentru a nu utiliza preferinţele tale de utilizator când vizualizezi această pagină
+are being ignored while viewing this page.: sunt ignorate când vizualizezi această pagină.
+to load your user preferences when viewing this page: pentru a incărca preferinţele tale de utilizator când vizualizezi aceasta pagină
+Save: Salvează
+Settings: Configuraţie
+Public Access: Acces public
+Groups: Grupuri
+NonUser Calendars: Calendare non-utilizator 
+Other: Altele
+Email: Email
+colors-help: Toate culorile trebuie specificate in format hexazecimal "#RRGGBB" unde "RR" este valoarea hexazecimala pentru roşu, "GG" pentru verde şi "BB" pentru albastru.
+Colors: Culori
+app-name-help: Specifică numele aplicaţiei care va apărea în bara de titlu a browserului pentru toate paginile şi pentru pagina de login.  Valoarea specificată aici va fi căutată în dicţionar în aşa fel încât se pot folosi titluri diferite pentru diferite limbi.
+Application Name: Numele aplicaţiei
+server-url-help: Specifică URL-ul de bază al aplicaţiei. Acesta va fi inclus când vor fi trimise aduceri-aminte sau notificari prin email.
+Server URL: URL-ul serverului
+language-help: Specifică ce limba să se folosească.
+Language: Limba
+Your browser default language is: Limba implicită a browserului tău este
+fonts-help: Specifică o listă a fonturilor care pot fi folosite (de exemplu "Arial, Helvetica")
+Fonts: Fonturi
+custom-script-help: Permite adăugarea de text javascript/stylesheet care să fie inserat in secţiunea "head" a HTML-ului fiecărei pagini.
+Custom script/stylesheet: Foloseşte un script/stylesheet propriu
+Yes: Da
+No: Nu
+Edit: Editează
+custom-header-help: Permite adăugarea unui fragment de HTML la începutul fiecarei pagini.
+Custom header: Header propriu
+custom-trailer-help: Permite adăugarea unui fragment de HTML la sfârşitul fiecarei pagini.
+Custom trailer: Trailer propriu
+preferred-view-help: Specifică vizualizarea implicită (zi, săptămâna, lună sau an).
+Preferred view: Vizualizarea preferată
+Day: Ziua
+Month: Luna
+Year: Anul
+display-weekends-help: Include weekendurile în săptămâna.
+Display weekends in week view: Afişează şi weekendurile
+yearly-shows-events-help: În vizualizarea pe an, afişeaza cu litere ingroşate datele cu evenimente.
+Display days with events in bold in month and year views: Afişeaza cu litere îngroşate datele cu evenimente în vizualizarile lunara şi anuala 
+display-desc-print-day-help: Include descrierea evenimentului în versiunea pentru tipărit a vizualizarii pe zile
+Display description in printer day view: Afişează descrierea în versiunea pentru tipărit a vizualizarii pe zile
+date-format-help: Specifică formatul preferat pentru dată.
+Date format: Formatul datei
+December: Decembrie
+time-format-help: Specifică ce format să se folosească: <br /><i>12 ore:</i> Afişează orele ca 3am, 8:30pm, etc. <br /><i>24 ore:</i> Afişează orele ca 300, 2030, etc. 
+Time format: Formatul orei
+12 hour: 12 ore
+24 hour: 24 ore
+time-interval-help: Specifică unitatea de timp în vizualizîrile pe zile sau săptămânalî.
+Time interval: Intervalul de timp
+hour: ora
+minutes: minute
+auto-refresh-help: Când activată, vizualizările pe zile, săptămânală, lunară şi lista evenimentelor neaprobate se vor auto-actualiza regulat.
+Auto-refresh calendars: Auto-actualizează calendarele
+auto-refresh-time-help: Daca auto-actualizarea este activată, aici se specifică timpul între două reactualizări.
+Auto-refresh time: Intervalul de auto-actualizare
+require-approvals-help: Când activată, utilizatorul trebuie să aprobe evenimentele care vor fie afişate in calendarul sau (în afară de cazul când "afişează neaprobatele" este activat). Nepunând aici "Nu" va dezactiva aprobarile pentru calendarul cu access public (în cazul în care calendarul cu access public este activat).
+Require event approvals: Necesită aprobare pentru evenimente
+display-unapproved-help: Specifică daca evenimentele neaprobate sunt afişate în calendarul tău. <br /> Dacă aici este "Da", atunci evenimentele neaprobate for fi afişate în calendarul tău (intr-o alta culoare). <br /> Dacă aici este "Nu", atunci evenimentele neaprobate trebuie aprobate înainte de a apărea în calendarul tău.
+Display unapproved: Afişează neaprobatele
+display-week-number-help: Specifică dacă numarul săptămânii (1-52) să va fi arătat în vizualizările lunară şi săptămânală.
+Display week number: Afişează numarul săptămânii
+display-week-starts-on: Specifică dacă săptămâna începe duminica sau lunea. Dacă "Luni" este specificat, atunci numerele săptămânilor vor fi numerele ISO.
+Week starts on: Săptămâna începe 
+Sunday: Duminică
+Monday: Luni
+work-hours-help: Specifică intervalul de timp afişat dintr-o zi
+Work hours: Ore de muncă
+From: De la
+to: până la
+disable-priority-field-help: Selectând "Da" înlătură opţiunea "Prioritate" din paginile cu informatie despre evenimente, făcînd interfaţa mai simplă pentru începători.
+Disable Priority field: Dezactivează opţiunea "Prioritate"
+disable-access-field-help: Selectând "Da" înlătură opţiunea "Acces" din paginile cu informatie despre evenimente, făcînd interfaţa mai simplă pentru începători.
+Disable Access field: Dezactivează opţiunea "Acces"
+disable-participants-field-help: Selectand "Da" înlătură opţiunea  "Participanţi" din paginile cu informaţie despre evenimente, prevenind ca utilizatorii să adauge alţi utilizatori la evenimentele proprii. Dacă activezi această opţiune ar trebui să dezactivezi şi opţiunea "Permite vizualizarea calendarelor altor utilizatori".
+Disable Participants field: Dezactivează optiunea "Participanţi"
+disable-repeating-field-help: Selectând "Da" înlătură opţiunea "Repetiţii" când se adaugă evenimente, făcînd interfaţa mai simplă pentru începători.
+Disable Repeating field: Dezactivează opţiunea "Repetiţii"
+popup-includes-siteextras-help: Când această opţiune este activată, permite ca opţiunile speciale din site_extras.php să fie arătate în popup-uri.
+Display Site Extras in popup: Afişează opţiunile speciale în popup-uri 
+allow-html-description-help: Când această proprietate este activată, utilizatorii pot include HTML în descrierea evenimentelor. Dezactivată, simbolurile HTML vor fi transformate in aşa fel încât să apară ca simplu text. Atenţie! Activând această proprietate permite utilizatorilor să linkeze imagini de pe alte situri.
+Allow HTML in Description: Permite HTML în descrieri
+allow-view-other-help: Specifică dacă un utilizator poate să vadă calendarul altuia.
+Allow viewing other user's calendars: Permite vizualizarea calendarelor altor utilizatori
+allow-view-add-help: O iconiţă '+' va fi inclusă în vizualizări, permiţând utilizatorilor să adauge uşor evenimente la calendarele altora.
+Include add event link in views: Include opţiunea adauga evenimente în vizualizări
+remember-last-login-help: Când această proprietate este activată, numele utilizatorului va fi auto-inserat în pagina de login (dar nu şi parola), iar după login preferinţele utilizatorului vor fi încărcate (incluzând culorile şi limba selectate).
+Remember last login: Ţine minte ultimul login
+conflict-check-help: Verifică dacă sunt conflicte de evenimente (două evenimente în acelaşi timp pentru aceeaşi persoană). Dacă laşi aici "Da", vei fii totuşi capabil să programezi două evenimente în acelaşi timp dar cu confirmare specială. Dacă pui aici "Nu", atunci nu se va verifica dacă sunt conflicte. Opţiunea recomandată este "Da". 
+Check for event conflicts: Verifică dacă sunt conflicte de evenimente
+conflict-months-help: Dacă se alege verificarea conflictelor ("Verifică dacă sunt conflicte de evenimente" este "Da"), această valoare specifică câte luni înainte să fie verificate conflictele. Dacă adăugarea de evenimente ia prea mult timp, încearcă să reduci acest numar.
+Conflict checking months: Câte luni în viitor să fie verificate conflictele
+conflict-check-override-help: Permite utilizatorilor să încalce conflictele de evenimente şi să programeze două sau mai multe evenimente în acelaşi timp.
+Allow users to override conflicts: Permite utilizatorilor să încalce conflictele
+limit-appts-help: Permite ca administratorul să poată fixa o limită maximă a numarului total de evenimente pe care un utilizator le poate programa pentru o singură zi.  
+Limit number of timed events per day: Limiteaza numarul de evenimente programate pentru o singură zi 
+limit-appts-number-help: Specifică numarul maxim number de evenimente pe care un utilizator le poate programa într-o zi.
+Maximum timed events per day: Numarul de maxim de evenimente ce pot fi programate pentru o singură zi 
+timed-evt-len-help: Specifică metoda de determinare a duratei unui eveniment programat.
+Specify timed event length by: Specifică durata unui eveniment prin
+Duration: Durată
+End Time: Ora de încheiere
+Plugins: Plugin-uri
+plugins-enabled-help: Activează aplicaţii plugin.
+Enable Plugins: Activează plugin-uri.
+plugins-sort-key-help: Specifică o cheie de sortare pentru plugin-uri în aşa fel încât plugin-urile să apară într-o anumită ordine.
+Plugin: Plugin
+allow-public-access-help: Când această opţiune este activată, calendarul este deschis publicului (doar pentru citire) iar autentificarea nu mai este necesară. 
+Allow public access: Permite accesul public
+public-access-default-visible: Evenimentele din calendarul public vor aparea automat în calendarele toturor utilizatorilor.
+Public access visible by default: Acces public implicit
+public-access-default-selected: La adăugarea unui nou eveniment, utilizatorul public va fi considerat participant implicit.
+Public access is default participant: Utilizatorul public e participant implicit.
+public-access-view-others-help: La accesul public în sistem, specifică dacă utilizatorul poate vedea calendarele altora.
+Public access can view other users: Prin acces public se pot vedea calendarele altora
+public-access-can-add-help: Dacă se alege această optiune, utilizatori care accesează sistemul prin acces public vor fi capabili să adauge noi evenimente care însă nu vor apărea în calendar înainte ca un administrator să le aprobe.
+Public access can add events: Se pot adăuga evenimente prin acces public
+public-access-add-requires-approval-help: Specifică dacă evenimentele adăugate via acces public necesită aprobare înainte de a fi afişate.
+Public access new events require approval: Evenimentele adăugate via acces public necesită aprobare
+public-access-sees-participants-help: Dacă se alege această optiune, utilizatori care accesează sistemul prin acces public vor putea vedea participanţii în detaliile fiecărui eveniment.
+Public access can view participants: Participanţii pot fi văzuţi prin acces public
+groups-enabled-help: Activează suport pentru grupuri, prmiţând utilizatorilor să selecteze grupuri de utilizatori.
+Groups enabled: Activează grupuri
+user-sees-his-group-help: Dacă se alege această opţiune, utilizatorii nu vor putea vedea alţi utilizatori cu care nu au nici un grup în comun.
+User sees only his groups: Utilizatorul vede doar propriile grupuri
+nonuser-enabled-help: Dacă se alege această opţiune, administratorii vor avea posibilitatea sa adauge calendare non-utilizator.
+Nonuser enabled: Calendarele non-utilizator sunt activate
+nonuser-list-help: Unde să fie afişate calendare non-utilizator în lista participanţilor
+Nonuser list: Pune în lista participanţilor la
+Top: Cap
+Bottom: Coadă
+reports-enabled-help: Dacă această opţiune este aleasă, utilizatorii vor vedea o secţiune intitulată "Rapoarte" în josul paginii şi vor putea crea rapoarte personale. În plus, utilizatorii administrativi pot crea rapoarte globale care să apară pe paginile tuturor utilizatorilor.
+Reports enabled: Rapoartele sunt activate
+subscriptions-enabled-help: Specifică daca utilizatorii nelocali se pot abona la un calendar utilizator WebCalendar, permiţîndu-le să vadă evenimentele de tip WebCalendar în aplicaţii compatibile cu iCal (ca de exemplu iCal-ul lui Apple sau Mozilla Calendar).
+Allow remote subscriptions: Permite abonamente nelocale
+categories-enabled-help: Adaugă suport pentru categorii de evenimente.
+Categories enabled: Activează categorii
+allow-external-users-help: Specifică daca un utilizator non-calendar poate fi adăugat la un eveniment, permiţându-i să fie listat ca participant.
+Allow external users: Acceptă utilizatori externi
+external-can-receive-notification-help: Când utilizatorii externi sunt acceptati iar utilizarea emailului este activată, utilizatorii externi pot primi notificaţii prin email când un eveniment este adăugat, actualizat sau şters (dacă adresa utilizatorului extern este cunoscută).
+External users can receive email notifications: Utilizatorii externi pot primi email
+external-can-receive-reminder-help: Când utilizatorii externi sunt acceptati iar utilizarea emailului este activată,  utilizatorii externi pot primi aduceri-aminte (dacă adresa utilizatorului extern este cunoscută).
+External users can receive email reminders: Utilizatorii externi pot primi aduceri-aminte
+email-enabled-help: Activează/dezactivează trimiterea de email pentru notificaţii sau aduceri-aminte. Pune aici "nu" daca serverul tău nu este configurat să trimită email.
+Email enabled: Email activat
+email-default-sender: Specifică adresa de email implicită a expeditorului la trimiterea de aduceri-aminte.
+Default sender address: Adresa de email implicită a expeditorului
+Default user settings: Configuratia implicită pentru utilizatori
+email-event-reminders-help: Specifică dacă să fie trimise aduceri-aminte.
+Event reminders: Aduceri-aminte
+email-event-added: Specifică dacă să fie trimise aduceri-aminte prin email când un eveniment este adăugat în calendarul tău.
+Events added to my calendar: Evenimente adăugate în calendarul meu
+email-event-updated: Specifică dacă să fie trimise aduceri-aminte prin email când un eveniment este actualizat în calendarul tău.
+Events updated on my calendar: Eveniments actualizate în calendarul meu
+email-event-deleted: Specifică dacă să se trimită notificaţii prin email când un eveniment este şters din calendarul tău.
+Events removed from my calendar: Evenimente şterse din calendarul meu.
+email-event-rejected: Specifică dacă să se trimită notificaţii prin email când un utilizator refuză un eveniment din calendarul tău.
+Event rejected by participant: Eveniment refuzat de către participant
+Allow user to customize colors: Permite utilizatorilor sa-şi aleagă culorile
+Document background: Fundalul documentului
+Select: Selectează
+Document title: Titlul documentului
+Document text: Textul documentului
+Table grid color: Culoarea liniilor tabelului
+Table header background: Fundalul legendei tabelului
+Table header text: Textul legendei tabelului
+Table cell background: Fundalul casuţelor tabelului
+Table cell background for current day: Fundalul casuţelor tabelului pentru ziua curentă
+Table cell background for weekends: Fundalul casuţelor tabelului pentru weekend
+Event popup background: Fundalul popup-urilor
+Event popup text: Textul popup-urilor
+
+
+###############################################
+# Page: activity_log.php
+#
+Activity Log: Jurnal de activitate
+User: Utilizator
+Calendar: Calendar
+Date: Data
+Time: Ora
+Event: Evenimentul
+Action: Actiune
+Event created: Eveniment creat
+Event approved: Eveniment aprobat
+Event rejected: Eveniment refuzat
+Event updated: Eveniment actualizat
+Event deleted: Eveniment şters
+Notification sent: A fost trimisă o notificare 
+Reminder sent: A fost trimisă o aducere-aminte
+Database error: Eroare in baza de date
+Events: Evenimente
+
+
+###############################################
+# Page: add_entry.php
+#
+Invalid entry id: Indetificatorul evenimentului este invalid
+This is a private event and may not be added to your calendar.: Acesta este un eveniment privat şi s-ar putea să nu fie adăugat în calendarul tău.
+Error adding event: Eroare la adăugarea evenimentului
+
+
+###############################################
+# Page: admin_handler.php
+#
+Error: Eroare
+The following error occurred: Următoarea eroare s-a petrecut
+
+
+###############################################
+# Page: approve_entry.php
+#
+Error approving event: Eroare la aprobarea evenimentului
+
+
+###############################################
+# Page: category.php
+#
+Categories: Categorii
+Add: Adaugă
+Category Name: Numele categoriei
+Global: Globală
+Delete: Şterge
+Are you sure you want to delete this entry?: Sigur vrei să ştergi ?
+Add New Category: Adaugă o nouă categorie
+
+
+###############################################
+# Page: del_entry.php
+#
+Hello: Buna
+An appointment has been canceled for you by: O programare de-a ta a fost anulată de către
+The subject was: Subiectul era
+Notification: Notificare
+
+
+###############################################
+# Page: edit_layer.php
+#
+Edit Layer: Editează stratul
+Add Layer: Adaugă stratul
+Source: Sursa
+Color: Culoarea
+Duplicates: Duplicate
+Show layer events that are the same as your own: Afişează evenimentele din acest strat care sunt identice cu ale tale 
+Are you sure you want to delete this layer?: Sigur vrei să ştergi acest strat?
+Delete layer: Şterge stratul
+
+
+###############################################
+# Page: edit_layer_handler.php
+#
+You cannot create a layer for yourself: Nu poţi crea un strat pentru tine insuţi
+You can only create one layer for each user: Poţi crea un singur strat per utilizator 
+
+
+###############################################
+# Page: edit_user_handler.php
+#
+Deleting users not supported: Ştergerea utilizatorilor nu este permisă
+The passwords were not identical: Parolele nu erau identice
+You have not entered a password: Nu a fost introdusă parola
+Changes successfully saved: Modificarile au fost salvate cu succes
+
+
+###############################################
+# Page: export.php
+#
+Export format: Formatul de export
+Palm Pilot: Palm Pilot
+Include all layers: Include toate straturile
+Export all dates: Exportă toate datele
+Start date: Data iniţială
+End date: Data finală
+Modified since: Modificată din
+Export: Exportă
+
+
+###############################################
+# Page: export_handler.php
+#
+export format not defined or incorrect: formatul de export este incorect sau nu a fost definit 
+
+
+###############################################
+# Page: group_edit.php
+#
+Unnamed Group: Fară nume
+Add Group: Adaugă grup
+Edit Group: Editează grup
+Group name: Numele grupului 
+Updated: Actualizată
+Created by: Creată de
+Users: Utilizatori
+
+
+###############################################
+# Page: group_edit_handler.php
+#
+You must specify a group name: Trebuie specificat un nume de grup
+
+
+###############################################
+# Page: groups.php
+#
+Add New Group: Adaugă un nou grup
+
+
+###############################################
+# Page: pref.php
+#
+Preferences: Preferinţe
+Save Preferences: Salvează preferinţele
+to modify the preferences for the Public Access calendar: pentru a modifica preferinţele pentru calendarul cu acces public
+tz-help: Specifică cu cîte ore să trebuie ajustată ora serverului pentru ora locală.
+Timezone Offset: Diferenţa de fus orar
+Add N hours to: Adaugă N ore la
+Subtract N hours from: Scade N ore din
+same as: la fel ca
+server time: ora serverului
+Default Category: Categoria implicită
+When I am the boss: Când sunt liderul
+Email me event notification: Trimite o notificaţie prin email 
+I want to approve events: Vreau să aprob evenimente
+Subscribe/Publish: Abonare/Publicare
+allow-remote-subscriptions-help: Specifică dacă utilizatorii nelocali pot să se aboneze la acest calendar, permiţîndu-le să vadă evenimentele într-o aplicaţie compatibilă cu iCal (ca de exemplu iCal-ul lui Apple sau Mozilla Calendar).
+remote-subscriptions-url-help: Afişează URL-ul pe care utilizatorii nelocali trebuie să-l folosească pentru a se abona la acest calendar.
+URL: URL
+Sun: Duminică
+Mon: Luni
+Tue: Marţi
+Wed: Miercuri
+Thu: Joi
+Fri: Vineri
+Sat: Sâmbătă
+
+
+###############################################
+# Page: help_bug.php
+#
+Report Bug: Anuntă o eroare de programare
+
+
+###############################################
+# Page: help_edit_entry.php
+#
+Adding/Editing Calendar Entries: Adaugă/Editează evenimente din calendar
+Brief Description: Scurtă descriere
+brief-description-help: Aceasta ar trebui să fie o scurtă descriere (cam 20 de litere) a evenimentului. Aceasta va reprezenta evenimentul când ne uitam în calendar.
+Full Description: Descriere detaliată
+full-description-help: Aceasta ar trebui să descrie complet evenimentul. Aceste informaţtii pot fi văzute când utilizatorul citeşte despre eveniment.
+date-help: Specifică data evenimentului.
+time-help: Specifică ora evenimentului. Selectează fie "Eveniment cu ora fixată" (pentru evenimente programate la moment anume din zi), fie "Eveniment fara oră fixată" (pentru evenimente care nu se petrec la o oră anume - ca de exemplu o zi liberă), fie "Cuprinzând toată ziua" (pentru evenimente care iau toată ziua - de exemplu o aniversare).  
+duration-help: Specifică durata (in ore:minute) a evenimentului.  <br /><i>Poate fi lăsat gol.</i>
+end-time-help: Specifică ora la care se aşteaptă ca evenimentul să se termine.
+Priority: Prioritate
+priority-help: Specifică prioritatea evenimentului.  Evenimentele cu prioritate ridicată vor fi afişate cu litere ingroşate.
+Access: Acces
+access-help: Specifică nivelul de acces pentru un eveniment dat.<br /> <i>Public</i>: Oricine poate vedea toate detaliile evenimentului.  <br /><i>Confidential</i>: Alţii pot vedea că ai notată o data şi oră, dar nu pot citi detaliile.
+Participants: Participanţi
+participants-help: Listează participanţii din această înregistrare.
+Repeat Type: Tipul repetiţiei
+repeat-type-help: Selectează cât de des un eveniment trebuie repetat. <i>Lunar (pe zile)</i> permite ca un eveniment să fie repetat de exemplu în fiecare primă Marţi a lunii sau a treia Joi a lunii, etc. <i>Lunar (pe date)</i> permite repetarea pe o dată fixă a lunii. 
+Repeat End Date: Data finală a repetiţiei
+repeat-end-date-help: Specifică până la ce dată să se repete evenimentul.
+Repeat Day: Ziua de repetiţie
+repeat-day-help: Specifica în ce zile ale saptamanii să se repete evenimentul. Acesta se foloseşte doar când <i>Tipul repetiţiei</i> este saptamanal.
+Frequency: Frecvenţa
+repeat-frequency-help: Spune cât de des un eveniment trebuie repetat. Cifra implicită 1 arată ca trebuie repetat de fiecare dată. Specificând 2 va face ca evenimentul să se repete la fiecare două săptămâni (dacă <i>Tipul repetiţiei</i> este <i>Săptămânală</i>), din două în două luni (dacă <i>Tipul repetiţiei</i> este <i>Lunară</i>), etc. 
+
+
+###############################################
+# Page: help_index.php
+#
+Help Index: Index
+Layers: Straturi
+Import: Importă
+
+
+###############################################
+# Page: help_layers.php
+#
+Layers are useful for displaying other users' events in your own calendar.  You can specifiy the user and the color the events will be displayed in.: Straturile pot fi folosite pentru a vedea evenimentele altor utilizatori în calendarul tău. Poţi specifica utilizatorul şi culoarea cu care să apară evenimentele lui.  
+Add/Edit/Delete: Adaugă/Editează/Şterge
+Clicking the Edit Layers link in the admin section at the bottom of the page will allow you to add/edit/delete layers.: Daca alegi linkul "Editează straturi" din sectiunea admin din josul paginii vei putea să adaugi, editezi sau ştergi straturi.  
+Specifies the user that you would like to see displayed in your calendar.: Specifică  utilizatorul pe care ai vrea să-l vezi în calendarul tău.
+The text color of the new layer that will be displayed in your calendar.: Culoarea textului noului strat aşa cum se va vedea în calendarul tău.
+If checked, events that are duplicates of your events will be shown.: Dacă bifezi aici, vei vedea şi evenimentele care sunt duplicate alor tale.
+Disabling: Dezactivare
+Press the Disable Layers link in the admin section at the bottom of the page to turn off layers.: Urmează linkul "Dezactivează" din secţiunea "Admin" din josul paginii ca să suprimi straturile. 
+Enabling: Activare
+Press the Enable Layers link in the admin section at the bottom of the page to turn on layers.: Urmează linkul "Activează" din secţiunea "Admin" din josul paginii ca să activezi straturile. 
+
+
+###############################################
+# Page: help_admin.php
+#
+Display days with events in bold in year view: Afişează cu litere îngrosate zilele cu evenimente din vizualizarea anuală
+Nonuser: Calendare non-utilizator
+Reports: Rapoarte
+
+
+###############################################
+# Page: layers.php
+#
+to modify the layers settings for the: ca să modifici configurarea straturilor pentru
+Layers are currently: Starturile sunt acum
+Enabled: Activate
+Disabled: Dezactivate
+Disable Layers: Dezactivează straturile
+Enable Layers: Activează straturile
+Layer: Strat
+Edit layer: Editează stratul
+Add layer: Adaugă un strat
+
+
+###############################################
+# Page: list_unapproved.php
+#
+View this entry: Afişează
+Approve/Confirm: Aprobă/Confirmă
+Approve this entry?: Aprobă?
+Reject this entry?: Refuză?
+Reject: Refuză
+No unapproved events for: Nu sunt evenimente neaprobate pentru
+Unapproved Events: Evenimente neaprobate
+
+
+###############################################
+# Page: view_entry.php
+#
+Low: Scazută
+Medium: Medie
+High: Ridicată
+every: fiecare
+2nd: a doua
+3rd: a treia
+4th: a patra
+5th: a cincea
+1st: prima
+last: ultima
+by date: după data
+Confidential: Confidenţial
+Description: Descriere
+Status: Statut
+Waiting for approval: Asteptând aprobare
+Deleted: Stearsă
+Rejected: Refuzată
+All day event: Eveniment cuprinzând toată ziua
+Public: Public
+Category: Categorie
+days: zile
+day: zi
+hours: ore
+minute: minut
+before event: înainte de eveniment
+External User: Utilizator extern
+Approve/Confirm entry: Aprobă/Confirmă  înregistrarea 
+Reject entry: Refuză  înregistrarea 
+Set category: Specifică o categorie
+Edit repeating entry for all dates: Editează înregistrarea pentru toate datele când se repetă 
+Edit entry for this date: Editează  înregistrarea numai pentru această dată
+Delete repeating event for all dates: Şterge toate repetiţiile evenimentului
+This will delete this entry for all users.: Aceasta va şterge înregistrarea pentru toţi utilizatorii.
+Delete entry only for this date: Şterge înregistrarea doar pentru această dată  
+Edit entry: Editează această înregistrare
+Delete entry: Şterge această înregistrare
+Copy entry: Copiază această înregistrare
+This will delete the entry from your calendar.: Va şterge această înregistrare din calendarul tău.
+Add to My Calendar: Adaugă la calendarul meu
+Do you want to add this entry to your calendar?: Vrei să adaugi această înregistrare la calendarul tău?
+This will add the entry to your calendar.: Aceasta va adăuga înregistrarea la calendarul tău.
+Email all participants: Trimite email tuturor participanţilor
+Show activity log: Afişează jurnalul de activitate
+Hide activity log: Ascunde jurnalul de activitate
+Export this entry to: Exportă această înregistrare în
+
+
+###############################################
+# Page: reject_entry.php
+#
+An appointment has been rejected by: O programare a fost refuzată de către
+The description is: Descrierea este
+Title: WebCalendar
+
+
+###############################################
+# Page: search.php
+#
+Search: Căutare
+Keywords: Cuvinte cheie
+Advanced Search: Căutare detaliată
+
+
+###############################################
+# Page: search_handler.php
+#
+You must enter one or more search keywords: Specifică unul sau mai multe cuvinte cheie
+Search Results: Rezultatele cautarii
+match found: potrivire găsita
+matches found: potriviri găsite
+No matches found: Nimic nu se potriveşte
+
+
+###############################################
+# Page: select_user.php
+#
+View Another User's Calendar: Vizualizează calendarul unui alt utilizator
+Go: Schimbă
+
+
+###############################################
+# Page: users.php
+#
+Account: Cont
+Add New User: Adaugă un nou utilizator
+denotes administrative user: desemnează utilizatorul administrativ
+
+
+###############################################
+# Page: usersel.php
+#
+All: Toate
+None: Nici una
+Reset: Resetează
+Remove: Şterge
+Ok: OK
+Cancel: Anulează
+
+
+###############################################
+# Page: import.php
+#
+Import format: Formatul de import
+Exclude private records: Exclude datele private 
+Overwrite Prior Import: Rescrie importul anterior
+
+
+###############################################
+# Page: login.php
+#
+Invalid login: Login invalid
+You must enter a login and password: Este nevoie de login şi parolă 
+Username: Utilizator
+Password: Parolă
+Save login via cookies so I don't have to login next time: Salvează loginul într-un cookie pentru data viitoare
+Login: Login
+Access public calendar: Accesează calendarul public
+cookies-note: <b>Nota:</b> Această aplicaţie necesită cookie-uri.
+
+
+###############################################
+# Page: views.php
+#
+Views: Vizualizari
+Add New View: Adaugă o nouă vizualizare
+
+
+###############################################
+# Page: views_edit.php
+#
+Unnamed View: Vizualizare fara nume
+Add View: Adaugă o vizualizare
+Edit View: Editează o vizualizare
+View Name: Afişează numele
+View Type: Afişează tipul
+Week (Users horizontal): Săptămână(utilizatorii pe orizontală)
+Week (Users vertical): Săptămână (utilizatorii pe verticală)
+Week (Timebar): Săptămână (ora pe orizontală)
+Month (Timebar): Lună (ora pe orizontală)
+Month (side by side): Lună (una langă alta)
+Month (on same calendar): Lună (pe acelaşi calendar)
+preview: incearcă
+
+
+###############################################
+# Page: nonusers.php
+#
+NONUSER_PREFIX not set: NONUSER_PREFIX nu are valoarea dată în config.php.
+Add New NonUser Calendar: Adaugă un nou calendar non-utilizator 
+
+
+###############################################
+# Page: nonusers_handler.php
+#
+Calendar ID: ID-ul calendarului
+word characters only: poate să conţină doar litere şi(sau) cifre (a-zA-Z_0-9)
+
+
+###############################################
+# Page: help_pref.php
+#
+default-category-help: Specifică în ce categorie se încadrezeaza implicit un nou eveniment.
+
+
+###############################################
+# Page: report.php
+#
+Untimed event: Eveniment fară ora fixata
+Private: Privat
+Approved: Aprobat
+Unknown: Necunoscut
+to manage reports for the Public Access calendar: pentru a administra rapoartele din calendarul cu acces public
+Add new report: Adaugă un nou raport
+Invalid report id: ID-ul acestui raport este invalid
+Manage Reports: Administreaza rapoartele
+
+
+###############################################
+# Page: views_edit_handler.php
+#
+You must specify a view name: Trebuie specificat numele vizualizarii
+
+
+###############################################
+# Page: week_details.php
+#
+New Entry: Nou eveniment
+am: am
+pm: pm
+
+
+###############################################
+# Page: import_handler.php
+#
+Import Results: Rezultatul importului
+Events successfully imported: Evenimentele au fost importate cu succes
+Events from prior import marked as deleted: Evenimentele importate anterior sunt marcate ca şterse
+Conflicting events: Evenimente în conflict
+Errors: Erori
+There was an error parsing the import file or no events were returned: Eroare la citirea fişierului importat sau lipsă de evenimente
+The import file contained no data: Fisierul importat nu conţine date
+The following conflicts with the suggested time: Urmatoarele sunt în conflict cu ora sugerată
+Unnamed Event: Eveniment fără nume
+Scheduling Conflict: Conflict de orare
+conflicts with the following existing calendar entries: este în conflict cu următoarele evenimente din acest calendar 
+Event Imported: Eveniment importat
+
+
+###############################################
+# Page: edit_report.php
+#
+Tomorrow: Mâine
+Today: Astăzi
+Yesterday: Ieri
+Day before yesterday: Alaltăieri
+Next week: Săptămâna următoare
+This week: Săptămâna aceasta
+Last week: Săptămâna trecută
+Week before last: Cu douâ săptămâni in urmă
+Next week and week after: Cele douâ săptămâni următoare
+This week and next week: Aceasta şi următoarea săptămâna
+Last week and this week: Săptămâna aceasta şi cea trecutâ
+Last two weeks: Ultimele două săptămâni
+Next month: Luna urmâtoare
+This month: Luna aceasta
+Last month: Luna trecutâ
+Month before last: Cu douâ luni în urmâ
+Next year: Anul urmator
+This year: Anul acesta
+Last year: Anul trecut
+Year before last: Cu doi ani în urmâ
+Unnamed Report: Raport fara nume
+Add Report: Adaugă raport
+Edit Report: Editează raport
+Report name: Numele raportului
+Current User: Utilizatorul curent
+Include link in trailer: Include un link la sfârşit
+Include standard header/trailer: Include început/sfârşit standard
+Date range: Interval de date
+Include previous/next links: Include linkuri "anterior/următor"
+Include empty dates: Include date goale
+Template variables: Variabile şablon
+Page template: Şsblonul paginii
+Day template: Şsblonul zilei
+Event template: Şsblonul evenimentului
+Are you sure you want to delete this report?: Sigur vrei să ştergi acest raport?
+
+
+###############################################
+# Page: edit_entry.php
+#
+Edit Entry: Editează eveniment
+Add Entry: Adaugă eveniment
+Details: Detalii
+Scheduling: Când
+Repeat: Repetă
+category-help: Specifică tipul evenimentului.
+Timed event: Eveniment cu ora fixată
+external-participants-help: Specifică o listă de participanţi la eveniment care nu sunt utilizatori ai calendarului. Aceşti utilizatori trebuie listati câte unul pe linie şi se pot include cu adrese de email. Daca adresa de email este specificata, utilizatorul poate primi notificari şi aduceri-aminte.
+External Participants: Participanţi externi
+Daily: Zilnic
+Weekly: Săptămânal
+Monthly: Lunar
+by day: pe zile
+by day (from end): pe zile, de la sfârşit
+Yearly: Anual
+Use end date: Foloseşte data finală
+Tuesday: Marţi
+Wednesday: Miercuri
+Thursday: Joi
+Friday: Vineri
+Saturday: Sâmbătă
+You are not authorized to edit this entry: Nu eşti autorizat(ă) să editezi acest eveniment
+
+
+###############################################
+# Page: assistant_edit.php
+#
+Assistants: Asistenţi
+Your assistants: Asistenţii tăi
+
+
+###############################################
+# Page: adminhome.php
+#
+Delete Events: Şterge evenimente
+Public Preferences: Preferinţe publice
+Unapproved Public Events: Evenimente publice neaprobate
+Administrative Tools: Unelte administrative 
+
+
+###############################################
+# Page: purge.php
+#
+Purging events for: Curaţând evenimente pentru
+Finished: Terminat
+Delete all events before: Şterge toate evenimentele dinainte de
+Check box to delete <b>ALL</b> events for a user: Bifează această casuţă ca să ştergi <b>TOATE</b> evenimentele utilizatorului
+Are you sure you want to delete events for: Sigur vrei să ştergi evenimentele lui
+Records deleted from: Înregistrari au fost şterse începând de la
+
+
+###############################################
+# Page: set_entry_cat.php
+#
+You have not added any categories: Nu ai adăugat nici o categorie
+Set Category: Defineşte o categorie
+
+
+###############################################
+# Page: help_import.php
+#
+Palm Desktop: Palm Desktop
+This form will allow you to import entries from the Palm Desktop Datebook.: Acest formular îţi permite să imporţi înregistrări dintr-un Palm Desktop Datebook.
+It should be located in your Palm directory in <tt>datebook/datebook.dat</tt> in a subdirectory named by your username.: Ar trebui să fie localizat în directorul <tt>datebook/datebook.dat</tt> de pe Palm, într-un subdirector cu numele tău de utilizator.
+The following entries will not be imported: Urmatoarele date nu vor fi importate
+Entries older than the current date: Înregistrări mai vechi decât data curentă
+Entries created in the Palm Desktop that have not been HotSync'd: Înregistrări create pe Palm dar care nu au fost HotSync-ate
+Anything imported from Palm will be overwritten during the next import (unless the event date has passed).: Orice a fost importat de pe Palm va fi rescris la urmatorul import (dacă data nu este trecută).
+Therefore, updates should be made in the Palm Desktop.: De aceea actualizările ar trebui făcute pe Palm Desktop.
+vCal: vCal
+This form will import vCalendar (.vcs) 1.0 events: Acest formular va importa evenimente de tip vCalendar (.vcs) 1.0
+The following formats have been tested: Au fost testate următoarele formate
+Palm Desktop 4: Palm Desktop 4
+Lotus Organizer 6: Lotus Organizer 6
+Microsoft Outlook 2002: Microsoft Outlook 2002
+iCalendar: iCalendar
+This form will import iCalendar (.ics) events: Aceast formular va importa evenimente de tip iCalendar (.ics) 
+Enabling <b>Overwrite Prior Import</b> will cause events imported previously that used the same UID as an event from the new import file to be marked as deleted.  This should allow an updated iCalendar file to be imported without creating duplicates.: Activând <b>Rescrie importurile anterioare</b> va cauza ca evenimentele importate anterior cu acelasi UID ca unele evenimente din noul fisier importat să fie marcate ca şterse. Prin aceasta se urmareşte ca un fisier iCalendar actualizat să poată fi importat fără a crea duplicate.
+
+
+###############################################
+# Page: edit_report_handler.php
+#
+Variable N not found: Variabila N nu a fost gasită
+
+
+###############################################
+# Page: edit_entry_handler.php
+#
+A new appointment has been made for you by: O nouă programare a fost facută pentru tine de către
+An appointment has been updated by: O programare a fost reînnoită de către
+The subject is: Subiectul este
+Please look on: Te rog uită-te la
+to accept or reject this appointment: pentru a accepta sau refuza această programare
+to view this appointment: pentru a vedea această programare
+Your suggested time of: Ora sugerată pentru tine de
+
+
+###############################################
+# Page: edit_nonusers.php
+#
+Edit User: Editează utilizator
+Add User: Adaugă utilizator
+First Name: Prenume 
+Last Name: Nume (de familie)
+
+
+###############################################
+# Page: edit_template.php
+#
+Edit Custom Script/Stylesheet: Editează textul personalizat (script/stylesheet)
+Edit Custom Header: Editează headerul personalizat
+Edit Custom Trailer: Editează trailerul personalizat
+
+
+###############################################
+# Page: edit_user.php
+#
+E-mail address: Adresa de email 
+again: din nou
+Disabled for demo: Dezactivat pentru demonstraţie
+Are you sure you want to delete this user?: Sigur vrei să ştergi acest utilizator?
+Change Password: Schimbă parola
+New Password: Noua parolă
+Set Password: Setează parola
+
+
+###############################################
+# Page: includes/trailer.php
+#
+Go to: Schimbă cu
+My Calendar: Calendarul meu
+Back to My Calendar: Înapoi la calendarul meu
+Another User's Calendar: Calendarul altcuiva 
+Add New Entry: Adaugă un nou eveniment
+Logout: Logout
+Manage calendar of: Lucrează cu calendarul lui 
+
+
+###############################################
+# Page: includes/user.php
+#
+incorrect password: parolă incorectă
+no such user: utilizator inexistent
+Invalid user login: Utilizator invalid
+
+
+###############################################
+# Page: includes/site_extras.php
+#
+Send Reminder: Trimite aducere-aminte
+
+
+###############################################
+# Page: includes/config.php
+#
+English: Engleză
+Basque: Bască
+Bulgarian: Bulgară
+Catalan: Catalană
+Chinese (Traditonal/Big5): Chineză (Traditonală/Big5)
+Chinese (Simplified/GB2312): Chineză (Simplificată/GB2312)
+Czech: Cehă
+Danish: Daneză
+Dutch: Olandeză
+Estonian: Estoniană
+Finnish: Finlandeză
+French: Franceză
+Galician: Galică
+German: Germană
+Holo (Taiwanese): Holo (Taivaneză)
+Hungarian: Ungară
+Icelandic: Islandică
+Italian: Italiană
+Japanese: Japoneză
+Korean: Coreană
+Norwegian: Norvegiană
+Polish: Poloneză
+Portuguese: Portugheză
+Portuguese/Brazil: Portugheză Braziliană
+Romanian: Română
+Russian: Rusă
+Spanish: Spaniolă
+Swedish: Suedeză
+Turkish: Turcă
+
+
+###############################################
+# Page: includes/functions.php
+#
+This event is confidential: Acest eveniment este confidenţial
+exceeds limit of XXX events per day: depăşeşte limita de XXX evenimente pe zi
+You have XXX unapproved events: Ai XXX evenimente neaprobate
+January: Ianuarie
+February: Februarie
+March: Martie
+April: Aprilie
+May_: Mai
+June: Iunie
+July: Iulie
+August: August
+September: Septembrie
+October: Octombrie
+November: Noiembrie
+Jan: Ian
+Feb: Feb
+Mar: Mar
+Apr: Apr
+May: Mai
+Jun: Iun
+Jul: Iul
+Aug: Aug
+Sep: Sep
+Oct: Oct
+Nov: Noi
+Dec: Dec
+
+
+###############################################
+# Page: includes/js/admin.php
+#
+Server URL is required: Este necesar URL-ul serverului
+Server URL must end with '/':  URL-ul serverului trebuie să se termine în '/'
+Invalid work hours: Ore de lucru invalide
+Invalid color for document background: Culoare invalidă pentru fundalul documentului
+Invalid color for document title: Culoare invalidă pentru titlul documentului
+Invalid color for table cell background: Culoare invalidă pentru fundalul casuţelor tabelului
+Invalid color for table grid: Culoare invalidă pentru liniile tabelului
+Invalid color for table header background: Culoare invalidă pentru fundalul legendei tabelului
+Invalid color for table text background: Culoare invalidă pentru fundalul textului tabelului
+Invalid color for event popup background: Culoare invalidă pentru fundalul popup-urilor
+Invalid color for event popup text: Culoare invalidă pentru textul popup-urilor
+Invalid color for table cell background for today: Culoare invalidă pentru fundalul casuţei de azi a tabelului
+Color format should be '#RRGGBB': Formatul culorii trebuie să fie '#RRGGBB'
+
+
+###############################################
+# Page: includes/js/edit_entry.php
+#
+You have not entered a Brief Description: Nu ai scris o scurtă descriere
+You have not entered a valid time of day: Nu ai specificat o oră corectă
+The time you have entered begins before your preferred work hours.  Is this correct?: Ora pe care ai dat-o este inainte de orele tale preferate de lucru. E corect aşa?
+
+
+###############################################
+# Page: includes/js/edit_layer.php
+#
+Invalid color: Culoare invalidă
+
+
+###############################################
+# Page: tools/send_reminders.php
+#
+This is a reminder for the event detailed below.: Aceasta este o aducere-aminte pentru evenimentul detaliat mai jos.
+Reminder: Aducere-aminte

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Russian.txt
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Russian.txt	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Russian.txt	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,1934 @@
+# Use this as a starting point to translate this application into
+# another language.  The format is "English text: translated text"
+# There cannot be a ":" in the English text.
+# Translated by:
+#	Andre E. Bar'yudin <baryudin at pob.huji.ac.il>
+# Last update: Wed Oct 25 14:34:05 IST 2000
+# Translation last updated on 03-10-2004
+
+
+###############################################
+# Specify a charset (will be sent within meta tag for each page)
+#
+charset: KOI8-R
+
+
+
+###############################################
+# Page: admin.php
+#
+#
+# << MISSING >>
+# System Settings:
+You are not authorized: õ ×ÁÓ ÎÅÔ ÐÒÁ×Á ÄÏÓÔÕÐÁ
+#
+# << MISSING >>
+# Note:
+#
+# << MISSING >>
+# Your user preferences:
+#
+# << MISSING >>
+# may be affecting the appearance of this page.:
+#
+# << MISSING >>
+# Click here:
+#
+# << MISSING >>
+# to not use your user preferences when viewing this page:
+#
+# << MISSING >>
+# are being ignored while viewing this page.:
+#
+# << MISSING >>
+# to load your user preferences when viewing this page:
+Save: óÏÈÒÁÎÉÔØ
+Help: ðÏÄÓËÁÚËÁ
+Settings: õÓÔÁÎÏ×ËÉ
+#
+# << MISSING >>
+# app-name-help:
+# English text: Specifies the name of the application that will appear in the browser title bar for all pages and on the login page.  The value you specify here will be looked up in the translations file allowing you to provide different titles for different languages.
+#
+#
+# << MISSING >>
+# Application Name:
+#
+# << MISSING >>
+# server-url-help:
+# English text: Specifies the base URL for the application.  This will be included when sending out email reminders and notifications.
+#
+#
+# << MISSING >>
+# Server URL:
+language-help: ïÐÒÅÄÅÌÑÅÔ ËÁËÏÊ ÑÚÙË ÄÏÌÖÅÎ ÂÙÔØ ÉÓÐÏÌØÚÏ×ÁÎ.
+Language: ñÚÙË
+#
+# << MISSING >>
+# Your browser default language is:
+#
+# << MISSING >>
+# fonts-help:
+# English text: Specifies a list of system fonts to use (such as "Arial, Helvetica")
+#
+#
+# << MISSING >>
+# Fonts:
+#
+# << MISSING >>
+# custom-script-help:
+# English text: Allows entry of custom Javascript or stylesheet text that will be inserted into the HTML "head" section of every page.
+#
+#
+# << MISSING >>
+# Custom script/stylesheet:
+Yes: äÁ
+No: îÅÔ
+#
+# << MISSING >>
+# Edit:
+#
+# << MISSING >>
+# custom-header-help:
+# English text: Allows a custom HTML snippet to be included in the top of every page.
+#
+#
+# << MISSING >>
+# Custom header:
+#
+# << MISSING >>
+# custom-trailer-help:
+# English text: Allows a custom HTML snippet to be included at the end of every page.
+#
+#
+# << MISSING >>
+# Custom trailer:
+preferred-view-help: ïÐÒÅÄÅÌÑÅÔ ÐÒÅÄÐÏÞÔÉÍÙÊ ×ÉÄ (ÄÅÎØ, ÎÅÄÅÌÑ, ÍÅÓÑà ÉÌÉ ÇÏÄ).
+Preferred view: ðÒÅÄÐÏÞÉÍÙÊ ×ÉÄ
+Day: äÅÎØ
+Week: îÅÄÅÌÑ
+Month: íÅÓÑÃ
+Year: çÏÄ
+#
+# << MISSING >>
+# display-weekends-help:
+# English text: Include weekends when viewing a week.
+#
+#
+# << MISSING >>
+# Display weekends in week view:
+#
+# << MISSING >>
+# yearly-shows-events-help:
+# English text: On the yearly view, display days that contain events in a bold font.
+#
+#
+# << MISSING >>
+# Display days with events in bold in year view:
+#
+# << MISSING >>
+# display-desc-print-day-help:
+# English text: Include event descriptions in printer-friendly version of day view.
+#
+#
+# << MISSING >>
+# Display description in printer day view:
+#
+# << MISSING >>
+# date-format-help:
+# English text: Specifies the preferred date format.
+#
+#
+# << MISSING >>
+# Date format:
+December: äÅËÁÂÒØ
+time-format-help: ïÐÒÅÄÅÌÑÅÔ ÆÏÒÍÁÔ ×ÒÅÍÅÎÉ:<br /> <i>12-ÞÁÓÏ×ÏÊ:</i> ÉÌÉ <i>24-ÞÁÓÏ×ÏÊ</i>.
+Time format: æÏÒÍÁÔ ×ÒÅÍÅÎÉ
+12 hour: 12 ÞÁÓÏ×
+24 hour: 24 ÞÁÓÁ
+#
+# << MISSING >>
+# time-interval-help:
+# English text: Specifies how long the time blocks in the week view and day view will be.
+#
+#
+# << MISSING >>
+# Time interval:
+#
+# << MISSING >>
+# hour:
+minutes: ÍÉÎÕÔÙ
+#
+# << MISSING >>
+# auto-refresh-help:
+# English text: When enabled, the day view, week view, month view, and list aunapproved pages will all automatically refresh themselves periodically.
+#
+#
+# << MISSING >>
+# Auto-refresh calendars:
+#
+# << MISSING >>
+# auto-refresh-time-help:
+# English text: If Auto-refresh is enabled, this specifies the time between each refresh.
+#
+#
+# << MISSING >>
+# Auto-refresh time:
+#
+# << MISSING >>
+# require-approvals-help:
+# English text: When enabled, a user must approve an event before it is displayed on their calendar (unless Display unapproved is enabled).  Note setting this to "No" will not turn off approvals for the Public Access calendar (if the Public Access calendar is enabled).
+#
+#
+# << MISSING >>
+# Require event approvals:
+display-unapproved-help: úÁÄÁÅÔ, ×ÉÄÎÙ ÌÉ ÎÅÐÏÄÔ×ÅÒÖÄÅÎÎÙÅ ÓÏÂÙÔÉÑ × ×ÁÛÅÍ ËÁÌÅÎÄÁÒÅ.<b> åÓÌÉ ×ÙÂÒÁÎÏ "äÁ", ÔÏ ÏÎÉ ÂÕÄÕÔ ÏÔÏÂÒÁÖÅÎÙ × ËÁÌÅÎÄÁÒÅ, × Ã×ÅÔÅ ÏÔÌÉÞÎÏÍ ÏÔ ÐÏÄÔ×ÅÒÖÄÅÎÎÙÈ ÓÏÂÙÔÉÊ.<br />  ðÒÉ ×ÙÂÏÒÅ "îÅÔ", ÎÅÏÂÈÏÄÉÍÏ ÓÐÅÒ×Á ÐÏÄÔ×ÅÒÄÉÔØ ÓÏÂÙÔÉÅ, ÐÒÅÖÄÅ ÞÅÍ ÏÎÏ ÂÕÄÅÔ ×ÉÄÎÏ × ËÁÌÅÎÄÁÒÅ.
+Display unapproved: ðÏËÁÚÙ×ÁÔØ ÎÅÐÏÄÔ×ÅÒÖÄÅÎÎÙÅ
+display-week-number-help: úÁÄÁÅÔ ÐÏËÁÚÙ×ÁÔØ ÌÉ ÎÕÍÅÒÁÃÉÀ ÎÅÄÅÌØ (1-52) × ÐÒÏÓÍÏÔÒÅ ÍÅÓÑÃÁ É ÎÅÄÅÌÉ.
+Display week number: ðÏËÁÚÙ×ÁÔØ ÄÅÎØ ÎÅÄÅÌÉ
+display-week-starts-on: úÁÄÁÅÔ ÐÅÒ×ÙÊ ÄÅÎØ ÎÅÄÅÌÉ - ×ÏÓËÒÅÓÅÎØÅ ÉÌÉ ÐÏÎÅÄÅÌØÎÉË (×Ï ÍÎÏÇÉÈ ÓÔÒÁÎÁÈ, ×ËÌÀÞÁÑ áÍÅÒÉËÕ É éÚÒÁÉÌØ, ÐÅÒ×ÙÍ ÄÎÅÍ ÎÅÄÅÌÉ ÓÞÉÔÁÅÔÓÑ ×ÏÓËÒÅÓÅÎØÅ).  åÓÌÉ ÂÙÌ ×ÙÂÒÁÎ ÐÏÎÅÄÅÌØÎÉË, ÔÏ ÎÕÍÅÒÁÃÉÑ ÎÅÄÅÌØ ÂÕÄÅÔ ÐÒÏÉÚ×ÏÄÉÔØÓÑ ÐÏ ÓÔÁÎÄÁÒÔÕ ISO.
+Week starts on: îÅÄÅÌÑ ÎÁÞÉÎÁÅÔÓÑ ×
+Sunday: ÷ÏÓËÒÅÓÅÎØÅ
+Monday: ðÏÎÅÄÅÌØÎÉË
+work-hours-help: ïÐÒÅÄÅÌÑÅÔ ×ÒÅÍÅÎÎÏÊ ÐÒÏÍÅÖÕÔÏË ÉÓÐÏÌØÚÕÅÍÙÊ ËÁÌÅÎÄÁÒÅÍ.
+Work hours: òÁÂÏÞÉÅ ÞÁÓÙ
+From: ïÔ
+to: ÄÏ
+#
+# << MISSING >>
+# disable-priority-field-help:
+# English text: Selecting "Yes" will remove the "Priority" field from event information pages, providing a simpler interface for novices.
+#
+#
+# << MISSING >>
+# Disable Priority field:
+#
+# << MISSING >>
+# disable-access-field-help:
+# English text: Selecting "Yes" will remove the "Access" field from event information pages, providing a simpler interface for novices.
+#
+#
+# << MISSING >>
+# Disable Access field:
+#
+# << MISSING >>
+# disable-participants-field-help:
+# English text: Selecting "Yes" will remove the "Particpants" field from event information pages, preventing users from adding other users to their events.  If you enable this option, you may want to also disable the "Allow viewing other user's calendars" field also.
+#
+#
+# << MISSING >>
+# Disable Participants field:
+#
+# << MISSING >>
+# disable-repeating-field-help:
+# English text: Selecting "Yes" will remove the "Repeating" field when adding events.  This will provide a simpler interface for novices.
+#
+#
+# << MISSING >>
+# Disable Repeating field:
+#
+# << MISSING >>
+# popup-includes-siteextras-help:
+# English text: If enabled, allow custom event fields setup in the site_extras.php file will be displayed in event popups.
+#
+#
+# << MISSING >>
+# Display Site Extras in popup:
+#
+# << MISSING >>
+# allow-html-description-help:
+# English text: If enabled, users can enter HTML in the event description field.  If not enabled, the HTML tags will be escaped so as to appear as plain text.  Warning: Enabling this feature will allow users to reference images on other websites.
+#
+#
+# << MISSING >>
+# Allow HTML in Description:
+#
+# << MISSING >>
+# allow-view-other-help:
+# English text: Specifies whether one user may view another user's calendar.
+#
+#
+# << MISSING >>
+# Allow viewing other user's calendars:
+#
+# << MISSING >>
+# allow-public-access-help:
+# English text: When enabled, the calendar can be used as a read-only public calendar that does not require users to login.
+#
+#
+# << MISSING >>
+# Allow public access:
+#
+# << MISSING >>
+# public-access-view-others-help:
+# English text: When access the system with public access, specifies whether the user can view the calendar of another calendar user.
+#
+#
+# << MISSING >>
+# Public access can view other users:
+#
+# << MISSING >>
+# public-access-can-add-help:
+# English text: When enabled, users that access the system through Public Access will be able to add new events, but they will not show up in the calendar until an administrator approves the new event.
+#
+#
+# << MISSING >>
+# Public access can add events:
+#
+# << MISSING >>
+# public-access-add-requires-approval-help:
+# English text: Specifies whether events added via the public access account require approval before being displayed.
+#
+#
+# << MISSING >>
+# Public access new events require approval:
+#
+# << MISSING >>
+# public-access-sees-participants-help:
+# English text: If enabled, users accessing the calendar from the public account will be able to see event participants if they view details of an event.
+#
+#
+# << MISSING >>
+# Public access can view participants:
+#
+# << MISSING >>
+# allow-view-add-help:
+# English text: A '+' icon will be included in views, allowing users to quickly add events to other users' calendars.
+#
+#
+# << MISSING >>
+# Include add event link in views:
+#
+# << MISSING >>
+# allow-external-users-help:
+# English text: Specifies whether a non-calendar user can be added to an event.  This allows non-calendar users to be listed as event participants.
+#
+#
+# << MISSING >>
+# Allow external users:
+#
+# << MISSING >>
+# external-can-receive-notification-help:
+# English text: When external users are enabled and email usage is enabled, external users can receive email notifications when the event is added, updated or delete (if the external user's email address is provided).
+#
+#
+# << MISSING >>
+# External users can receive email notifications:
+#
+# << MISSING >>
+# external-can-receive-reminder-help:
+# English text: When external users are enabled and email usage is enabled, external users can receive email reminders (if the external user's email address is provided).
+#
+#
+# << MISSING >>
+# External users can receive email reminders:
+#
+# << MISSING >>
+# remember-last-login-help:
+# English text: When enabled, the user's login will be filled in for them on the login page (but not the password), and the user's preferences will be loaded (including their preferred colors and language selection).
+#
+#
+# << MISSING >>
+# Remember last login:
+#
+# << MISSING >>
+# conflict-check-help:
+# English text: Check for event conflicts (two events scheduled for the same time for the same person).  If you set this to "Yes", you will still be able to schedule two events at the same time after confirming a warning. If you set this to "No", no checking for conflicts will be done.  You probably want to set this to "Yes", so conflict checking occurs.
+#
+#
+# << MISSING >>
+# Check for event conflicts:
+#
+# << MISSING >>
+# conflict-months-help:
+# English text: If conflict checking is in place ("Check for event conflicts" is set to "No"), this specifies how many months into the future we should check for conflicts.  If you find adding events is taking a long time to process, reduce this number.
+#
+#
+# << MISSING >>
+# Conflict checking months:
+#
+# << MISSING >>
+# conflict-check-override-help:
+# English text: Allows users to override event conflicts and schedule two or more events for the same time.
+#
+#
+# << MISSING >>
+# Allow users to override conflicts:
+#
+# << MISSING >>
+# limit-appts-help:
+# English text: Allows the system administrator to set a system-wide limit on the number of appointments a single user can have on any single day.
+#
+#
+# << MISSING >>
+# Limit number of timed events per day:
+#
+# << MISSING >>
+# limit-appts-number-help:
+# English text: Specifies the maximum number of timed events a user can have in a single day.
+#
+#
+# << MISSING >>
+# Maximum timed events per day:
+#
+# << MISSING >>
+# Plugins:
+#
+# << MISSING >>
+# plugins-enabled-help:
+# English text: Enable plugin applications.
+#
+#
+# << MISSING >>
+# Enable Plugins:
+#
+# << MISSING >>
+# plugins-sort-key-help:
+# English text: Specifies a sort key for the plugin.  This allows the plugins to appear in a specific order.
+#
+#
+# << MISSING >>
+# Plugin:
+#
+# << MISSING >>
+# Groups:
+#
+# << MISSING >>
+# groups-enabled-help:
+# English text: Enables group support, allowing users to select users by groups.
+#
+#
+# << MISSING >>
+# Groups enabled:
+#
+# << MISSING >>
+# user-sees-his-group-help:
+# English text: If enabled, users will not see calendar users that are not in at least one of their groups.
+#
+#
+# << MISSING >>
+# User sees only his groups:
+#
+# << MISSING >>
+# Categories:
+#
+# << MISSING >>
+# categories-enabled-help:
+# English text: Enables support for event categories.
+#
+#
+# << MISSING >>
+# Categories enabled:
+#
+# << MISSING >>
+# Nonuser:
+# English text: Nonuser Calendars
+#
+#
+# << MISSING >>
+# nonuser-enabled-help:
+# English text: If enabled, admins will have the option to add nonuser calendars
+#
+#
+# << MISSING >>
+# Nonuser enabled:
+# English text: Nonuser Calendars Enabled
+#
+#
+# << MISSING >>
+# nonuser-list-help:
+# English text: Where to display the nonuser calendars in the participant list
+#
+#
+# << MISSING >>
+# Nonuser list:
+# English text: Display in participants list at
+#
+#
+# << MISSING >>
+# Top:
+#
+# << MISSING >>
+# Bottom:
+#
+# << MISSING >>
+# Reports:
+#
+# << MISSING >>
+# reports-enabled-help:
+# English text: If enabled, users will see a "Reports" section at the bottom of each page and will be allowed to create custom reports.  Additionally, admin users can create global reports that will appear at the bottom of all users' pages.
+#
+#
+# << MISSING >>
+# Reports enabled:
+#
+# << MISSING >>
+# Subscribe/Publish:
+#
+# << MISSING >>
+# subscriptions-enabled-help:
+# English text: Specifies if remote users can subscribe to a WebCalendar user's calendar, allowing them to see the WebCalendar user's events in their iCal-enabled application (such as Apple's iCal or Mozilla Calendar).
+#
+#
+# << MISSING >>
+# Allow remote subscriptions:
+#
+# << MISSING >>
+# Email:
+#
+# << MISSING >>
+# email-enabled-help:
+# English text: Turn on or off all sending of email for notification and reminders.  Set to "no", if your server is not properly setup to send mail.
+#
+#
+# << MISSING >>
+# Email enabled:
+#
+# << MISSING >>
+# email-default-sender:
+# English text: Specifies the email address to specify as the sender when sending out reminders.
+#
+#
+# << MISSING >>
+# Default sender address:
+#
+# << MISSING >>
+# Default user settings:
+#
+# << MISSING >>
+# email-event-reminders-help:
+# English text: Specifies whether or not to send event reminders.
+#
+#
+# << MISSING >>
+# Event reminders:
+#
+# << MISSING >>
+# email-event-added:
+# English text: Specifies whether or not to send email notifications when an event is added to your calendar.
+#
+#
+# << MISSING >>
+# Events added to my calendar:
+#
+# << MISSING >>
+# email-event-updated:
+# English text: Specifies whether or not to send email notifications when an event is updated on your calendar.
+#
+#
+# << MISSING >>
+# Events updated on my calendar:
+#
+# << MISSING >>
+# email-event-deleted:
+# English text: Specifies whether or not to send email notifications when an event is removed from your calendar.
+#
+#
+# << MISSING >>
+# Events removed from my calendar:
+#
+# << MISSING >>
+# email-event-rejected:
+# English text: Specifies whether or not to send email notifications when a participant rejects an event that is on your calendar.
+#
+#
+# << MISSING >>
+# Event rejected by participant:
+colors-help: ÷ÓÅ Ã×ÅÔÁ ÄÏÖÎÙ ÂÙÔØ ÐÒÅÄÓÔÁ×ÌÅÎÙ × ÛÅÓÔÎÁÄÃÁÔÉÒÉÞÎÏÍ ÆÏÒÍÁÔÅ "#RRGGBB", ÇÄÅ RR - ËÒÁÓÎÁÑ ÓÏÓÔÁ×ÌÑÀÝÁÑ, GG - ÚÅÌÅÎÁÑ, BB - ÇÏÌÕÂÁÑ.
+Colors: ã×ÅÔÁ
+#
+# << MISSING >>
+# Allow user to customize colors:
+Document background: æÏÎ ÄÏËÕÍÅÎÔÁ
+Select: ÷ÙÂÒÁÔØ
+Document title: úÁÇÏÌÏ×ÏË ÄÏËÕÍÅÎÔÁ
+#
+# << MISSING >>
+# Document text:
+#
+# << MISSING >>
+# Table grid color:
+#
+# << MISSING >>
+# Table header background:
+#
+# << MISSING >>
+# Table header text:
+Table cell background: æÏÎ ÔÁÂÌÉÃÙ
+Table cell background for current day: æÏÎ ËÌÅÔËÉ ÔÅËÕÝÅÇÏ ÄÎÑ
+#
+# << MISSING >>
+# Table cell background for weekends:
+#
+# << MISSING >>
+# Event popup background:
+#
+# << MISSING >>
+# Event popup text:
+
+
+###############################################
+# Page: activity_log.php
+#
+#
+# << MISSING >>
+# Activity Log:
+#
+# << MISSING >>
+# User:
+#
+# << MISSING >>
+# Calendar:
+Date: äÁÔÁ
+Time: ÷ÒÅÍÑ
+#
+# << MISSING >>
+# Event:
+#
+# << MISSING >>
+# Action:
+#
+# << MISSING >>
+# Event created:
+#
+# << MISSING >>
+# Event approved:
+#
+# << MISSING >>
+# Event rejected:
+#
+# << MISSING >>
+# Event updated:
+#
+# << MISSING >>
+# Event deleted:
+#
+# << MISSING >>
+# Notification sent:
+#
+# << MISSING >>
+# Reminder sent:
+#
+# << MISSING >>
+# Database error:
+#
+# << MISSING >>
+# Previous:
+#
+# << MISSING >>
+# Next:
+
+
+###############################################
+# Page: add_entry.php
+#
+Invalid entry id: îÅÐÒÁ×ÉÌØÎÙÊ ÉÄÅÎÔÉÆÉËÁÔÏÒ ÚÁÐÉÓÉ
+#
+# << MISSING >>
+# This is a private event and may not be added to your calendar.:
+#
+# << MISSING >>
+# Error adding event:
+
+
+###############################################
+# Page: admin_handler.php
+#
+Error: ïÛÉÂËÁ
+The following error occurred: ðÒÏÉÚÏÛÌÁ ÓÌÅÄÕÀÝÁÑ ÏÛÉÂËÁ
+
+
+###############################################
+# Page: approve_entry.php
+#
+Error approving event: ïÛÉÂËÁ × ÐÒÏÃÅÓÓÅ ÐÏÄÔ×ÅÒÖÄÅÎÉÑ ÓÏÂÙÔÉÑ
+
+
+###############################################
+# Page: category.php
+#
+#
+# << MISSING >>
+# Add:
+#
+# << MISSING >>
+# Category Name:
+#
+# << MISSING >>
+# Global:
+Delete: õÄÁÌÉÔØ
+Are you sure you want to delete this entry?: ÷Ù Õ×ÅÒÅÎÙ, ÞÔÏ ×Ù ÈÏÔÉÔÅ ÕÄÁÌÉÔØ ÜÔÕ ÚÁÐÉÓØ?
+#
+# << MISSING >>
+# Add New Category:
+
+
+###############################################
+# Page: category_handler.php
+#
+
+
+###############################################
+# Page: datesel.php
+#
+
+
+###############################################
+# Page: day.php
+#
+#
+# << MISSING >>
+# Admin mode:
+#
+# << MISSING >>
+# Assistant mode:
+Generate printer-friendly version: óÏÚÄÁÔØ ×ÅÒÓÉÀ ÄÌÑ ÐÅÞÁÔÉ
+Printer Friendly: ÷ÅÒÓÉÑ ÄÌÑ ÐÅÞÁÔÉ
+
+
+###############################################
+# Page: del_entry.php
+#
+Hello: ðÒÉ×ÅÔ
+#
+# << MISSING >>
+# An appointment has been canceled for you by:
+#
+# << MISSING >>
+# The subject was:
+Notification: õ×ÅÄÏÍÌÅÎÉÅ
+
+
+###############################################
+# Page: edit_entry.php
+#
+Edit Entry: òÅÄÁËÔÉÒÏ×ÁÔØ úÁÐÉÓØ
+Add Entry: äÏÂÁ×ÉÔØ úÁÐÉÓØ
+brief-description-help: óÄÅÓØ ÄÏÌÖÎÏ ÎÁÈÏÄÉÔØÓÑ ËÒÁÔËÏÅ (ÏËÏÌÏ 20 ÓÉÍ×ÏÌÏ×) ÏÐÉÓÁÎÉÅ ÓÏÂÙÔÉÑ.  üÔÏ ÏÐÉÓÁÎÉÅ ÂÕÄÅÔ ×ÉÄÎÏ ÐÒÉ ÐÒÏÓÍÏÔÒÅ ËÁÌÅÎÄÁÒÑ.
+Brief Description: ëÒÁÔËÏÅ ÏÐÉÓÁÎÉÅ
+full-description-help: óÄÅÓØ ÓÌÅÄÕÅÔ ÒÁÚÍÅÓÔÉÔØ ÄÅÔÁÌØÎÏÅ ÏÐÉÓÁÎÉÅ ÓÏÂÙÔÉÑ.  üÔÁ ÉÎÆÏÒÍÁÃÉÑ ÂÕÄÅÔ ×ÉÄÎÁ ÐÒÉ ÐÒÏÓÍÏÔÒÅ ÓÁÍÏÇÏ ÓÏÂÙÔÉÑ.
+Full Description: ðÏÌÎÏÅ ÏÐÉÓÁÎÉÅ
+date-help: úÁÄÁÅÔ ÄÁÔÕ ÓÏÂÙÔÉÑ.
+time-help: úÁÄÁÅÔ ×ÒÅÍÑ ÓÏÂÙÔÉÑ.<br /> <i>üÔÏ ÐÏÌÅ ÍÏÖÎÏ ÎÅ ÚÁÐÏÌÎÑÔØ.</i>
+am: am
+pm: pm
+#
+# << MISSING >>
+# Untimed event:
+#
+# << MISSING >>
+# Timed event:
+#
+# << MISSING >>
+# All day event:
+duration-help: úÁÄÁÅÔ ÐÒÏÄÏÌÖÉÔÅÌØÎÏÓÔØ ÓÏÂÙÔÉÑ.  <br /><i>üÔÏ ÐÏÌÅ ÍÏÖÎÏ ÎÅ ÚÁÐÏÌÎÑÔØ.</i>
+Duration: ðÒÏÄÏÌÖÉÔÅÌØÎÏÓÔØ
+#
+# << MISSING >>
+# hours:
+priority-help: úÁÄÁÅÔ ÓÒÏÞÎÏÓÔØ ÓÏÂÙÔÉÑ.  óÏÂÙÔÉÑ Ó ×ÙÓÏËÏÊ ÓÒÏÞÎÏÓÔØÀ ÂÕÄÕÔ ×ÙÄÅÌÅÎÙ.
+Priority: óÒÏÞÎÏÓÔØ
+Low: îÉÚËÁÑ
+Medium: óÒÅÄÎÑÑ
+High: ÷ÙÓÏËÁÑ
+access-help: úÁÄÁÅÔ ÕÒÏ×ÅÎØ ÄÏÓÔÕÐÁ Ë ÓÏÂÙÔÉÀ.<br /> <i>ïÂÝÅÄÏÓÔÕÐÎÙÊ:</i> ËÁÖÄÙÊ ÍÏÖÅÔ ×ÉÄÅÔØ ×ÓÅ ÄÅÔÁÌÉ ÄÁÎÎÏÇÏ ÓÏÂÙÔÉÑ.<br /> <i>ëÏÎÆÉÄÅÃÉÁÌØÎÙÊ:</i> ÄÒÕÇÉÅ ÐÏÌØÚÏ×ÁÔÅÌÉ ÍÏÇÕÔ ×ÉÄÅÔØ, ÞÔÏ Õ ×ÁÓ ÅÓÔØ ÎÅËÁÑ ÚÁÐÉÓØ × ÄÁÎÎÏÅ ×ÒÅÍÑ, ÎÏ ÎÅ ÉÍÅÀÔ ÄÏÓÔÕÐÁ Ë ÄÅÔÁÌÑÍ.
+Access: äÏÓÔÕÐ
+Public: ïÂÝÅÄÏÓÔÕÐÎÙÊ
+Confidential: ëÏÎÆÉÄÅÃÉÁÌØÎÙÊ
+#
+# << MISSING >>
+# category-help:
+# English text: Specifies the category of the event.
+#
+#
+# << MISSING >>
+# Category:
+None: îÉËÁËÏÊ
+#
+# << MISSING >>
+# days:
+#
+# << MISSING >>
+# before event:
+participants-help: óÐÉÓÏË ÕÞÁÓÔÎÉËÏ× ÄÁÎÎÏÇÏ ÓÏÂÙÔÉÑ.
+Participants: õÞÁÓÔÎÉËÉ
+#
+# << MISSING >>
+# external-participants-help:
+# English text: Specifies a list of participants for the event that are not calendar users.  The users should be listed one per line and can include an email address.  If an email address is specified, the user is eligible to receive notications and reminders.
+#
+#
+# << MISSING >>
+# External Participants:
+repeat-type-help: ÷ÙÂÅÒÉÔÅ, Ó ËÁËÏÊ ÞÁÓÔÏÔÏÊ ÜÔÏ ÓÏÂÙÔÉÅ ÐÏ×ÔÏÒÑÅÔÓÑ.  <i>åÖÅÍÅÓÑÞÎÏÅ (ÄÅÎØ ÎÅÄÅÌÉ)</i> ÚÁÄÁÅÔ ÅÖÅÍÅÓÑÞÎÏÅ ÐÏ×ÔÏÒÅÎÉÅ ÔÉÐÁ 1-ÏÅ ×ÏÓËÒÅÓÅÎØÅ, 2-ÁÑ ÐÑÔÎÉÃÁ É Ô.Ä.  <i>åÖÅÍÅÓÑÞÎÏÅ (ÄÁÔÁ)</i> ÐÏÚ×ÏÌÑÅÔ ÐÏ×ÔÏÒÅÎÉÑ × ÚÁÄÁÎÎÏÅ ÞÉÓÌÏ ÍÅÓÑÃÁ.
+Repeat Type: ÷ÉÄ ÐÏ×ÔÏÒÁ
+Daily: åÖÅÄÎÅ×ÎÏ
+Weekly: åÖÅÎÅÄÅÌØÎÏ
+Monthly: åÖÅÍÅÓÑÞÎÏ
+by day: ÐÏ ÄÎÀ ÎÅÄÅÌÉ
+#
+# << MISSING >>
+# by day (from end):
+by date: ÐÏ ÄÁÔÅ
+Yearly: åÖÅÇÏÄÎÏ
+repeat-end-date-help: úÁÄÁÅÔ ÄÅÎØ ÄÏ ËÏÔÏÒÏÇÏ ÓÏÂÙÔÉÅ ÄÏÌÖÎÏ ÐÏ×ÔÏÒÑÔÓÑ.
+Repeat End Date: ðÏÓÌÅÄÎÉÊ ÄÅÎØ ÐÏ×ÔÏÒÁ
+Use end date: éÓÐÏÌØÚÏ×ÁÔØ ÄÁÔÕ ÚÁ×ÅÒÛÅÎÉÑ
+repeat-day-help: úÁÄÁÅÔ × ËÁËÉÅ ÄÎÉ ÎÅÄÅÌÉ ÜÔÏ ÓÏÂÙÔÉÅ ÐÏ×ÔÏÒÑÅÔÓÑ.  éÓÐÏÌØÚÕÅÔÓÑ ÔÏÌØËÏ ÄÌÑ ÅÖÅÎÅÄÅÌØÎÏÇÏ ×ÉÄÁ ÐÏ×ÔÏÒÅÎÉÑ ÓÏÂÙÔÉÊ.
+Repeat Day: äÅÎØ ðÏ×ÔÏÒÁ
+for weekly: ÄÌÑ ÅÖÅÎÅÄÅÌØÎÏÇÏ
+Tuesday: ÷ÔÏÒÎÉË
+Wednesday: óÒÅÄÁ
+Thursday: þÅÔ×ÅÒÇ
+Friday: ðÑÔÎÉÃÁ
+Saturday: óÕÂÂÏÔÁ
+repeat-frequency-help: úÁÄÁÅÔ ËÁË ÞÁÓÔÏ ÓÏÂÙÔÉÅ ÐÏ×ÔÏÒÑÅÔÓÑ.  úÎÁÞÅÎÉÅ ÐÏ ÕÍÏÌÞÁÎÉÀ 1 ÏÚÎÁÞÁÅÔ, ÞÔÏ ÏÎÏ ÄÏÌÖÎÏ ÐÒÏÉÓÈÏÄÉÔØ ËÁÖÄÙÊ ÒÁÚ, ËÏÇÄÁ ÎÁÓÔÕÐÁÅÔ ÏÚÎÁÞÅÎÏÅ ×ÒÅÍÑ.  úÎÁÞÅÎÉÅ 2 ÐÒÉ×ÅÄÅÔ Ë ÔÏÍÕ, ÞÔÏ ÓÏÂÙÔÉÅ ÂÕÄÅÔ ÐÒÏÉÓÈÏÄÉÔØ ÞÅÒÅÚ ÒÁÚ É Ô.Ä.
+Frequency: þÁÓÔÏÔÁ
+Delete entry: õÄÁÌÉÔØ ÚÁÐÉÓØ
+You are not authorized to edit this entry: ÷Ù ÎÅ ÉÍÅÅÔÅ ÐÒÁ× ÄÏÓÔÕÐÁ ÄÌÑ ÕÄÁÌÅÎÉÑ ÄÁÎÎÏÊ ÚÁÐÉÓÉ
+
+
+###############################################
+# Page: edit_layer.php
+#
+#
+# << MISSING >>
+# Edit Layer:
+#
+# << MISSING >>
+# Add Layer:
+#
+# << MISSING >>
+# Source:
+#
+# << MISSING >>
+# Color:
+#
+# << MISSING >>
+# Duplicates:
+#
+# << MISSING >>
+# Show layer events that are the same as your own:
+#
+# << MISSING >>
+# Are you sure you want to delete this layer?:
+#
+# << MISSING >>
+# Delete layer:
+
+
+###############################################
+# Page: edit_layer_handler.php
+#
+#
+# << MISSING >>
+# You cannot create a layer for yourself:
+#
+# << MISSING >>
+# You can only create one layer for each user:
+
+
+###############################################
+# Page: edit_user.php
+#
+Edit User: òÅÄÁËÔÉÒÏ×ÁÔØ ðÏÌØÚÏ×ÁÔÅÌÑ
+Add User: äÏÂÁ×ÉÔØ ðÏÌØÚÏ×ÁÔÅÌÑ
+Username: éÍÑ ÐÏÌØÚÏ×ÁÔÅÌÑ
+First Name: éÍÑ
+Last Name: æÁÍÉÌÉÑ
+E-mail address: áÄÒÅÓ ÜÌÅËÔÒÏÎÎÏÊ ÐÏÞÔÙ
+Password: ðÁÒÏÌØ
+again: ÅÝÅ ÒÁÚ
+Admin: áÄÍÉÎÉÓÔÒÁÔÏÒ
+#
+# << MISSING >>
+# Disabled for demo:
+Change Password: óÍÅÎÉÔØ ÐÁÒÏÌØ
+New Password: îÏ×ÙÊ ÐÁÒÏÌØ
+Set Password: õÓÔÁÎÏ×ÉÔØ ÐÁÒÏÌØ
+
+
+###############################################
+# Page: edit_user_handler.php
+#
+#
+# << MISSING >>
+# Deleting users not supported:
+The passwords were not identical: ðÁÒÏÌÉ ÎÅ ÓÏ×ÐÁÌÉ
+You have not entered a password: ÷Ù ÎÅ ××ÅÌÉ ÐÁÒÏÌØ
+
+
+###############################################
+# Page: export.php
+#
+Export: üËÓÐÏÒÔÉÒÏ×ÁÔØ
+Export format: æÏÒÍÁÔ ÜËÓÐÏÒÔÁ
+Palm Pilot: Palm Pilot
+#
+# << MISSING >>
+# Export all dates:
+Start date: äÁÔÁ ÎÁÞÁÌÁ
+End date: äÁÔÁ ÚÁ×ÅÒÛÅÎÉÑ
+Modified since: éÚÍÅÎÅÎÏ
+
+
+###############################################
+# Page: export_handler.php
+#
+#
+# << MISSING >>
+# export format not defined or incorrect:
+
+
+###############################################
+# Page: group_edit.php
+#
+#
+# << MISSING >>
+# Unnamed Group:
+#
+# << MISSING >>
+# Add Group:
+#
+# << MISSING >>
+# Edit Group:
+#
+# << MISSING >>
+# Group name:
+Updated: ïÂÎÏ×ÌÅÎÏ
+Created by: äÏÂÁ×ÌÅÎÏ
+Users: ðÏÌØÚÏ×ÁÔÅÌÉ
+
+
+###############################################
+# Page: group_edit_handler.php
+#
+#
+# << MISSING >>
+# You must specify a group name:
+
+
+###############################################
+# Page: groups.php
+#
+#
+# << MISSING >>
+# Add New Group:
+
+
+###############################################
+# Page: icalfb.php
+#
+
+
+###############################################
+# Page: pref.php
+#
+Preferences: ðÒÅÄÐÏÞÔÅÎÉÑ
+#
+# << MISSING >>
+# to modify the preferences for the Public Access calendar:
+#
+# << MISSING >>
+# tz-help:
+# English text: Specifies how many hours to adjust the time from server time to local time.
+#
+#
+# << MISSING >>
+# Timezone Offset:
+#
+# << MISSING >>
+# Add N hours to:
+#
+# << MISSING >>
+# Subtract N hours from:
+#
+# << MISSING >>
+# same as:
+#
+# << MISSING >>
+# server time:
+#
+# << MISSING >>
+# Default Category:
+#
+# << MISSING >>
+# When I am the boss:
+#
+# << MISSING >>
+# Email me event notification:
+#
+# << MISSING >>
+# I want to approve events:
+#
+# << MISSING >>
+# allow-remote-subscriptions-help:
+# English text: Specifies if remote users can subscribe to your calendar, allowing them to see your events in a iCal-enabled application (such as Apple's iCal or Mozilla Calendar).
+#
+#
+# << MISSING >>
+# remote-subscriptions-url-help:
+# English text: Displays the URL remote users should use to subscribe to your calendar.
+#
+#
+# << MISSING >>
+# URL:
+Sun: ÷ÓË
+Mon: ðÏÎ
+Tue: ÷ÔÒ
+Wed: óÒÄ
+Thu: þÅÔ
+Fri: ðÑÔ
+Sat: óÕÂ
+Save Preferences: óÏÈÒÁÎÉÔØ ðÒÅÄÐÏÞÔÅÎÉÑ
+
+
+###############################################
+# Page: help_bug.php
+#
+#
+# << MISSING >>
+# Report Bug:
+
+
+###############################################
+# Page: help_edit_entry.php
+#
+Adding/Editing Calendar Entries: äÏÂÁ×ÌÅÎÉÅ/òÅÄÁËÔÉÒÏ×ÁÎÉÅ ËÁÌÅÎÄÁÒÎÙÈ ÚÁÐÉÓÅÊ
+
+
+###############################################
+# Page: help_index.php
+#
+Help Index: éÎÄÅËÓ ÐÏÄÓËÁÚËÉ
+#
+# << MISSING >>
+# Layers:
+#
+# << MISSING >>
+# Import:
+
+
+###############################################
+# Page: help_layers.php
+#
+#
+# << MISSING >>
+# Layers are useful for displaying other users' events in your own calendar.  You can specifiy the user and the color the events will be displayed in.:
+#
+# << MISSING >>
+# Add/Edit/Delete:
+#
+# << MISSING >>
+# Clicking the Edit Layers link in the admin section at the bottom of the page will allow you to add/edit/delete layers.:
+#
+# << MISSING >>
+# Specifies the user that you would like to see displayed in your calendar.:
+#
+# << MISSING >>
+# The text color of the new layer that will be displayed in your calendar.:
+#
+# << MISSING >>
+# If checked, events that are duplicates of your events will be shown.:
+#
+# << MISSING >>
+# Disabling:
+#
+# << MISSING >>
+# Press the Disable Layers link in the admin section at the bottom of the page to turn off layers.:
+#
+# << MISSING >>
+# Enabling:
+#
+# << MISSING >>
+# Press the Enable Layers link in the admin section at the bottom of the page to turn on layers.:
+
+
+###############################################
+# Page: help_admin.php
+#
+
+
+###############################################
+# Page: week.php
+#
+#
+# << MISSING >>
+# cont.:
+
+
+###############################################
+# Page: layers.php
+#
+#
+# << MISSING >>
+# to modify the layers settings for the:
+#
+# << MISSING >>
+# Layers are currently:
+#
+# << MISSING >>
+# Enabled:
+#
+# << MISSING >>
+# Disabled:
+#
+# << MISSING >>
+# Disable Layers:
+#
+# << MISSING >>
+# Enable Layers:
+#
+# << MISSING >>
+# Layer:
+#
+# << MISSING >>
+# Edit layer:
+#
+# << MISSING >>
+# Add layer:
+
+
+###############################################
+# Page: layers_toggle.php
+#
+
+
+###############################################
+# Page: list_unapproved.php
+#
+View this entry: ðÒÏÓÍÏÔÒ ÜÔÏÊ ÚÁÐÉÓÉ
+Approve this entry?: ðÏÄÔ×ÅÒÄÉÔØ ÜÔÕ ÚÁÐÉÓØ?
+Approve/Confirm: ðÏÄÔ×ÅÒÄÉÔØ
+Reject this entry?: ïÔ×ÅÒÇÎÕÔØ ÜÔÕ ÚÁÐÉÓØ?
+Reject: ïÔ×ÅÒÇÎÕÔØ
+#
+# << MISSING >>
+# No unapproved events for:
+Unapproved Events: îÅ ÐÏÄÔ×ÅÒÖÄÅÎÎÙÅ ÓÏÂÙÔÉÑ
+#
+# << MISSING >>
+# Public Access:
+
+
+###############################################
+# Page: view_entry.php
+#
+#
+# << MISSING >>
+# every:
+#
+# << MISSING >>
+# 2nd:
+#
+# << MISSING >>
+# 3rd:
+#
+# << MISSING >>
+# 4th:
+#
+# << MISSING >>
+# 5th:
+#
+# << MISSING >>
+# 1st:
+#
+# << MISSING >>
+# last:
+Description: ïÐÉÓÁÎÉÅ
+#
+# << MISSING >>
+# Status:
+#
+# << MISSING >>
+# Waiting for approval:
+#
+# << MISSING >>
+# Deleted:
+Rejected: ïÔ×ÅÒÇÎÕÔÏ
+#
+# << MISSING >>
+# External User:
+Approve/Confirm entry: ðÏÄÔ×ÅÒÄÉÔØ ÚÁÐÉÓØ
+Reject entry: ïÔ×ÅÒÇÎÕÔØ ÚÁÐÉÓØ
+#
+# << MISSING >>
+# Set category:
+#
+# << MISSING >>
+# Edit repeating entry for all dates:
+#
+# << MISSING >>
+# Edit entry for this date:
+This will delete this entry for all users.: äÁÎÎÁÑ ÏÐÅÒÁÃÉÑ ÕÄÁÌÉÔ ÜÔÕ ÚÁÐÉÓØ Õ ×ÓÅÈ ÐÏÌØÚÏ×ÁÔÅÌÅÊ.
+#
+# << MISSING >>
+# Delete repeating event for all dates:
+#
+# << MISSING >>
+# Delete entry only for this date:
+Edit entry: òÅÄÁËÔÉÒÏ×ÁÔØ ÚÁÐÉÓØ
+#
+# << MISSING >>
+# This will delete the entry from your calendar.:
+#
+# << MISSING >>
+# Do you want to add this entry to your calendar?:
+#
+# << MISSING >>
+# This will add the entry to your calendar.:
+#
+# << MISSING >>
+# Add to My Calendar:
+#
+# << MISSING >>
+# Email all participants:
+#
+# << MISSING >>
+# Show activity log:
+#
+# << MISSING >>
+# Hide activity log:
+#
+# << MISSING >>
+# Export this entry to:
+
+
+###############################################
+# Page: view_v.php
+#
+
+
+###############################################
+# Page: month.php
+#
+
+
+###############################################
+# Page: pref_handler.php
+#
+
+
+###############################################
+# Page: reject_entry.php
+#
+#
+# << MISSING >>
+# An appointment has been rejected by:
+#
+# << MISSING >>
+# The description is:
+Title: WebCalendar
+
+
+###############################################
+# Page: search.php
+#
+Search: ðÏÉÓË
+#
+# << MISSING >>
+# Advanced Search:
+Keywords: ëÌÀÞÅ×ÙÅ ÓÌÏ×Á
+
+
+###############################################
+# Page: search_handler.php
+#
+You must enter one or more search keywords: óÌÅÄÕÅÔ ××ÅÓÔÉ ÏÄÎÏ ËÌÀÞÅ×ÏÅ ÓÌÏ×Ï ÉÌÉ ÂÏÌÅÅ
+Search Results: òÅÚÕÌØÔÁÔÙ ÐÏÉÓËÁ
+match found: ÎÁÊÄÅÎÏ ÓÏÏÔ×ÅÔÓÔ×ÉÅ
+matches found: ÎÁÊÄÅÎÙ ÓÏÏÔ×ÅÔÓÔ×ÉÑ
+No matches found: îÉÞÅÇÏ ÎÅ ÎÁÊÄÅÎÏ
+
+
+###############################################
+# Page: select_user.php
+#
+View Another User's Calendar: ðÒÏÓÍÏÔÒÅÔØ ËÁÌÅÎÄÁÒØ ÄÒÕÇÏÇÏ ÐÏÌØÚÏ×ÁÔÅÌÑ
+Go: ðÅÒÅÊÔÉ
+
+
+###############################################
+# Page: publish.php
+#
+
+
+###############################################
+# Page: users.php
+#
+denotes administrative user: ÏÂÏÚÎÁÞÁÅÔ ÁÄÍÎÉÎÉÓÔÒÁÔÉ×ÎÏÇÏ ÐÏÌØÚÏ×ÁÔÅÌÑ
+Add New User: äÏÂÁ×ÉÔØ ÎÏ×ÏÇÏ ÐÏÌØÚÏ×ÁÔÅÌÑ
+
+
+###############################################
+# Page: usersel.php
+#
+#
+# << MISSING >>
+# All:
+#
+# << MISSING >>
+# Reset:
+#
+# << MISSING >>
+# Remove:
+#
+# << MISSING >>
+# Ok:
+#
+# << MISSING >>
+# Cancel:
+
+
+###############################################
+# Page: import.php
+#
+#
+# << MISSING >>
+# This form will allow you to import entries from the Palm Desktop Datebook.:
+#
+# << MISSING >>
+# Exclude private records:
+#
+# << MISSING >>
+# Datebook File:
+#
+# << MISSING >>
+# This form will import vCalendar (.vcs) 1.0 events:
+#
+# << MISSING >>
+# vCal File:
+#
+# << MISSING >>
+# This form will import iCalendar (.ics) events:
+#
+# << MISSING >>
+# iCal File:
+#
+# << MISSING >>
+# Overwrite Prior Import:
+
+
+###############################################
+# Page: year.php
+#
+
+
+###############################################
+# Page: view_d.php
+#
+
+
+###############################################
+# Page: view_m.php
+#
+
+
+###############################################
+# Page: view_w.php
+#
+
+
+###############################################
+# Page: views.php
+#
+#
+# << MISSING >>
+# Views:
+#
+# << MISSING >>
+# Add New View:
+
+
+###############################################
+# Page: views_edit.php
+#
+#
+# << MISSING >>
+# Unnamed View:
+#
+# << MISSING >>
+# Add View:
+#
+# << MISSING >>
+# Edit View:
+#
+# << MISSING >>
+# View Name:
+#
+# << MISSING >>
+# View Type:
+#
+# << MISSING >>
+# Week (Users horizontal):
+#
+# << MISSING >>
+# Week (Users vertical):
+#
+# << MISSING >>
+# Week (Timebar):
+#
+# << MISSING >>
+# Month (side by side):
+#
+# << MISSING >>
+# Month (on same calendar):
+
+
+###############################################
+# Page: nonusers.php
+#
+#
+# << MISSING >>
+# NONUSER_PREFIX not set:
+# English text: NONUSER_PREFIX has not been set in config.php.
+#
+#
+# << MISSING >>
+# NonUser:
+# English text: NonUser Calendars
+#
+#
+# << MISSING >>
+# Calendar ID:
+#
+# << MISSING >>
+# Add New NonUser Calendar:
+
+
+###############################################
+# Page: nonusers_handler.php
+#
+
+
+###############################################
+# Page: view_l.php
+#
+
+
+###############################################
+# Page: help_pref.php
+#
+#
+# << MISSING >>
+# default-category-help:
+# English text: Specifies the category a new event should default to.
+#
+
+
+###############################################
+# Page: report.php
+#
+Private: ìÉÞÎÏÅ
+#
+# << MISSING >>
+# Approved:
+#
+# << MISSING >>
+# Unknown:
+#
+# << MISSING >>
+# to manage reports for the Public Access calendar:
+#
+# << MISSING >>
+# Add new report:
+#
+# << MISSING >>
+# Invalid report id:
+#
+# << MISSING >>
+# Manage Reports:
+
+
+###############################################
+# Page: login.php
+#
+You must enter a login and password: îÅÏÂÈÏÄÉÍÏ ××ÅÓÔÉ ÉÍÑ É ÐÁÒÏÌØ
+Save login via cookies so I don't have to login next time: óÏÈÒÁÎÉÔØ ÉÍÑ × ÂÒÁÕÚÅÒÅ, ÞÔÏÂÙ ÎÅ ÎÕÖÎÏ ÂÙÌÏ ÓÏ×ÅÒÛÁÔØ ÚÁÇÒÕÚËÕ × ÓÌÅÄÕÀÝÉÊ ÒÁÚ
+Login: ÷ÈÏÄ
+#
+# << MISSING >>
+# Access public calendar:
+cookies-note: <b>Note:</b> This application requires cookies to be enabled.
+
+
+###############################################
+# Page: views_edit_handler.php
+#
+#
+# << MISSING >>
+# You must specify a view name:
+
+
+###############################################
+# Page: week_details.php
+#
+New Entry: îÏ×ÁÑ ÚÁÐÉÓØ
+
+
+###############################################
+# Page: import_handler.php
+#
+#
+# << MISSING >>
+# Import Results:
+#
+# << MISSING >>
+# Events successfully imported:
+#
+# << MISSING >>
+# Events from prior import marked as deleted:
+#
+# << MISSING >>
+# Conflicting events:
+#
+# << MISSING >>
+# Errors:
+Back to My Calendar: ÷ÅÒÎÕÔØÓÑ Ë ÍÏÅÍÕ ËÁÌÅÎÄÁÌÀ
+#
+# << MISSING >>
+# There was an error parsing the import file or no events were returned:
+#
+# << MISSING >>
+# The import file contained no data:
+The following conflicts with the suggested time: óÌÅÄÕÀÝÉÅ ÚÁÐÉÓÉ ËÏÎÆÌÉËÔÕÀÔ Ó ÐÒÅÄÌÏÖÅÎÙÍ ×ÒÅÍÅÎÅÍ
+Unnamed Event: óÏÂÙÔÉÅ ÂÅÚ ÉÍÅÎÉ
+Scheduling Conflict: ëÏÎÆÌÉËÔ × ÒÁÓÓÐÉÓÁÎÉÉ
+conflicts with the following existing calendar entries: ËÏÎÆÌÉËÔÕÅÔ Ó ÎÉÖÅÓÌÅÄÕÀÝÉÍÉ ËÁÌÅÎÄÁÒÎÙÍÉ ÚÁÐÉÓÑÍÉ
+#
+# << MISSING >>
+# Event Imported:
+
+
+###############################################
+# Page: edit_report.php
+#
+#
+# << MISSING >>
+# Tomorrow:
+#
+# << MISSING >>
+# Today:
+#
+# << MISSING >>
+# Yesterday:
+#
+# << MISSING >>
+# Day before yesterday:
+#
+# << MISSING >>
+# Next week:
+#
+# << MISSING >>
+# This week:
+#
+# << MISSING >>
+# Last week:
+#
+# << MISSING >>
+# Week before last:
+#
+# << MISSING >>
+# Next week and week after:
+#
+# << MISSING >>
+# This week and next week:
+#
+# << MISSING >>
+# Last week and this week:
+#
+# << MISSING >>
+# Last two weeks:
+#
+# << MISSING >>
+# Next month:
+#
+# << MISSING >>
+# This month:
+#
+# << MISSING >>
+# Last month:
+#
+# << MISSING >>
+# Month before last:
+#
+# << MISSING >>
+# Next year:
+#
+# << MISSING >>
+# This year:
+#
+# << MISSING >>
+# Last year:
+#
+# << MISSING >>
+# Year before last:
+#
+# << MISSING >>
+# Unnamed Report:
+#
+# << MISSING >>
+# Add Report:
+#
+# << MISSING >>
+# Edit Report:
+#
+# << MISSING >>
+# Report name:
+Current User: ôÅËÕÝÉÊ ÐÏÌØÚÏ×ÁÔÅÌØ
+#
+# << MISSING >>
+# Include link in trailer:
+#
+# << MISSING >>
+# Include standard header/trailer:
+#
+# << MISSING >>
+# Date range:
+#
+# << MISSING >>
+# Include previous/next links:
+#
+# << MISSING >>
+# Include empty dates:
+#
+# << MISSING >>
+# Template variables:
+#
+# << MISSING >>
+# Page template:
+#
+# << MISSING >>
+# Day template:
+#
+# << MISSING >>
+# Event template:
+#
+# << MISSING >>
+# Are you sure you want to delete this report?:
+
+
+###############################################
+# Page: assistant_edit.php
+#
+#
+# << MISSING >>
+# Assistants:
+#
+# << MISSING >>
+# Yours assistants:
+
+
+###############################################
+# Page: view_t.php
+#
+
+
+###############################################
+# Page: assistant_edit_handler.php
+#
+
+
+###############################################
+# Page: adminhome.php
+#
+Account: óÞÅÔ
+#
+# << MISSING >>
+# NonUser Calendars:
+#
+# << MISSING >>
+# Delete Events:
+#
+# << MISSING >>
+# Public Preferences:
+#
+# << MISSING >>
+# Unapproved Public Events:
+#
+# << MISSING >>
+# Administrative Tools:
+
+
+###############################################
+# Page: purge.php
+#
+#
+# << MISSING >>
+# Purging events for:
+#
+# << MISSING >>
+# Finished:
+#
+# << MISSING >>
+# Delete all events before:
+#
+# << MISSING >>
+# Check box to delete <b>ALL</b> events for a user:
+#
+# << MISSING >>
+# Are you sure you want to delete events for:
+
+
+###############################################
+# Page: help_import.php
+#
+#
+# << MISSING >>
+# Palm Desktop:
+#
+# << MISSING >>
+# It should be located in your Palm directory in <tt>datebook/datebook.dat</tt> in a subdirectory named by your username.:
+#
+# << MISSING >>
+# The following entries will not be imported:
+#
+# << MISSING >>
+# Entries older than the current date:
+#
+# << MISSING >>
+# Entries created in the Palm Desktop that have not been HotSync'd:
+#
+# << MISSING >>
+# Anything imported from Palm will be overwritten during the next import (unless the event date has passed).:
+#
+# << MISSING >>
+# Therefore, updates should be made in the Palm Desktop.:
+#
+# << MISSING >>
+# vCal:
+#
+# << MISSING >>
+# The following formats have been tested:
+#
+# << MISSING >>
+# Palm Desktop 4:
+#
+# << MISSING >>
+# Lotus Organizer 6:
+#
+# << MISSING >>
+# Microsoft Outlook 2002:
+#
+# << MISSING >>
+# iCalendar:
+#
+# << MISSING >>
+# Enabling <b>Overwrite Prior Import</b> will cause events imported previously that used the same UID as an event from the new import file to be marked as deleted.  This should allow an updated iCalendar file to be imported without creating duplicates.:
+
+
+###############################################
+# Page: edit_report_handler.php
+#
+#
+# << MISSING >>
+# Variable N not found:
+
+
+###############################################
+# Page: edit_entry_handler.php
+#
+A new appointment has been made for you by: ÷ÁÍ ÎÁÚÎÁÞÅÎÁ ÎÏ×ÁÑ ×ÓÔÒÅÞÁ
+#
+# << MISSING >>
+# An appointment has been updated by:
+The subject is: ôÅÍÁ
+Please look on: óÍÏÔÒÉÔÅ ÄÁÌØÛÅ
+to accept or reject this appointment: ÄÌÑ ÐÏÄÔ×ÅÒÖÄÅÎÉÑ ÉÌÉ ÏÔ×ÅÒÖÅÎÉÑ ÜÔÏÊ ×ÓÔÒÅÞÉ
+to view this appointment: ÄÌÑ ÐÒÏÓÍÏÔÒÁ ÜÔÏ ×ÓÔÒÅÞÉ
+Your suggested time of: ÷ÁÛÅ ÐÒÅÄÌÁÇÁÅÍÏÅ ×ÒÅÍÑ
+
+
+###############################################
+# Page: set_entry_cat.php
+#
+#
+# << MISSING >>
+# You have not added any categories:
+#
+# << MISSING >>
+# Set Category:
+
+
+###############################################
+# Page: edit_template.php
+#
+#
+# << MISSING >>
+# Edit Custom Script/Stylesheet:
+#
+# << MISSING >>
+# Edit Custom Header:
+#
+# << MISSING >>
+# Edit Custom Trailer:
+
+
+###############################################
+# Page: includes/trailer.php
+#
+Go to: ðÅÒÅÊÔÉ Ë
+My Calendar: íÏÊ ËÁÌÅÎÄÁÒØ
+Logout: ÷ÙÈÏÄ
+Another User's Calendar: ëÁÌÅÎÄÁÒØ ÄÒÕÇÏÇÏ ÐÏÌØÚÏ×ÁÔÅÌÑ
+Add New Entry: äÏÂÁ×ÉÔØ ÎÏ×ÕÀ ÚÁÐÉÓØ
+#
+# << MISSING >>
+# Manage Views:
+#
+# << MISSING >>
+# Manage calendar of:
+
+
+###############################################
+# Page: includes/connect.php
+#
+
+
+###############################################
+# Page: includes/user.php
+#
+#
+# << MISSING >>
+# Invalid login:
+#
+# << MISSING >>
+# Invalid user login:
+
+
+###############################################
+# Page: includes/site_extras.php
+#
+#
+# << MISSING >>
+# Send Reminder:
+
+
+###############################################
+# Page: includes/translate.php
+#
+
+
+###############################################
+# Page: includes/user-ldap.php
+#
+
+
+###############################################
+# Page: includes/user-nis.php
+#
+
+
+###############################################
+# Page: includes/help_trailer.php
+#
+
+
+###############################################
+# Page: includes/dbtable.php
+#
+
+
+###############################################
+# Page: includes/init.php
+#
+
+
+###############################################
+# Page: includes/functions.php
+#
+This event is confidential: üÔÁ ÚÁÐÉÓØ ËÏÎÆÉÄÅÃÉÁÌØÎÁ
+#
+# << MISSING >>
+# exceeds limit of XXX events per day:
+#
+# << MISSING >>
+# You have XXX unapproved events:
+January: ñÎ×ÁÒØ
+February: æÅ×ÒÁÌØ
+March: íÁÒÔ
+April: áÐÒÅÌØ
+May_: íÁÊ
+June: éÀÎØ
+July: éÀÌØ
+August: á×ÇÕÓÔ
+September: óÅÎÔÑÂÒØ
+October: ïËÔÑÂÒØ
+November: îÏÑÂÒØ
+Jan: ñÎ×
+Feb: æÅ×
+Mar: íÁÒ
+Apr: áÐÒ
+May: íÁÊ
+Jun: éÀÎ
+Jul: éÀÌ
+Aug: á×Ç
+Sep: óÅÎ
+Oct: ïËÔ
+Nov: îÏÑ
+Dec: äÅË
+
+
+###############################################
+# Page: includes/js/admin.php
+#
+#
+# << MISSING >>
+# Server URL is required:
+#
+# << MISSING >>
+# Server URL must end with '/':
+Invalid color for document background: îÅÄÏÐÕÓÔÉÍÙÊ Ã×ÅÔ ÄÌÑ ÆÏÎÁ ÄÏËÕÍÅÎÔÁ
+Invalid color for document title: îÅÄÏÐÕÓÔÉÍÙÊ Ã×ÅÔ ÄÌÑ ÚÁÇÏÌÏ×ËÁ ÄÏËÕÍÅÎÔÁ
+Invalid color for table cell background: îÅÄÏÐÕÓÔÉÍÙÊ Ã×ÅÔ ÄÌÑ ÆÏÎÁ ÔÁÂÌÉÃÙ
+#
+# << MISSING >>
+# Invalid color for table grid:
+#
+# << MISSING >>
+# Invalid color for table header background:
+#
+# << MISSING >>
+# Invalid color for table text background:
+#
+# << MISSING >>
+# Invalid color for event popup background:
+#
+# << MISSING >>
+# Invalid color for event popup text:
+Invalid color for table cell background for today: îÅÄÏÐÕÓÔÉÍÙÊ Ã×ÅÔ ÄÌÑ ÆÏÎÁ ËÌÅÔËÉ ÔÅËÕÝÅÇÏ ÄÎÑ
+Color format should be '#RRGGBB': æÏÒÍÁÔ Ã×ÅÔÁ ÄÏÌÖÅÎ ÂÙÔØ ×ÉÄÁ '#RRGGBB'
+
+
+###############################################
+# Page: includes/js/edit_entry.php
+#
+You have not entered a Brief Description: ÷Ù ÎÅ ××ÅÌÉ ËÒÁÔËÏÅ ÏÐÉÓÁÎÉÅ
+You have not entered a valid time of day: ÷Ù ÎÅ ××ÅÌÉ ÌÅÇÁÌØÎÏÅ ×ÒÅÍÑ ÄÎÑ
+#
+# << MISSING >>
+# The time you have entered begins before your preferred work hours.  Is this correct?:
+
+
+###############################################
+# Page: includes/js/edit_layer.php
+#
+#
+# << MISSING >>
+# Invalid color:
+
+
+###############################################
+# Page: includes/js/pref.php
+#
+
+
+###############################################
+# Page: tools/send_reminders.php
+#
+#
+# << MISSING >>
+# This is a reminder for the event detailed below.:
+#
+# << MISSING >>
+# Reminder:

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Spanish.txt
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Spanish.txt	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Spanish.txt	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,995 @@
+# Use this as a starting point to translate this application into
+# another language.  The format is "English text: translated text"
+# There cannot be a ":" in the English text.
+#
+# Translator: Francisco M. Pérez Rilo
+#             Pedro Del Medico <pdmp at interhoster.com>
+#             Eduardo Dominguez <lalo_notthisplease at teligens.com>
+#             Mario Benito <mbenito at maberi.com>
+# Translation last updated on 02-14-2005
+
+
+# Specify a charset (will be sent within meta tag for each page)
+charset: iso-8859-1
+
+
+
+###############################################
+# Page: activity_log.php
+#
+Activity Log: Registro de actividad
+Admin: Administración
+User: Usuario
+Calendar: Calendario
+Date: Fecha
+Time: Hora
+Event: Evento
+Action: Acción
+Event created: Evento creado
+Event approved: Evento aprobado
+Event rejected: Evento rechazado
+Event updated: Evento actualizado
+Event deleted: Evento eliminado
+Notification sent: Notificación enviada
+Reminder sent: Recordatorio enviado
+Database error: Error en base de datos
+Previous: Previo
+Events: Eventos
+Next: Siguiente
+
+
+###############################################
+# Page: add_entry.php
+#
+Invalid entry id: Identificador de entrada inválida
+This is a private event and may not be added to your calendar.: Este es un evento privado y no puedes ser añadido a su calendario.
+Error adding event: Error al añadir evento
+
+
+###############################################
+# Page: admin_handler.php
+#
+You are not authorized: No estás autorizado
+Error: Error
+The following error occurred: Ocurrió el siguiente error
+
+
+###############################################
+# Page: adminhome.php
+#
+System Settings: Ajustes del sistema
+Preferences: Preferencias
+Users: Usuarios
+Account: Cuenta
+Assistants: Ayudantes
+Categories: Categorías
+Views: Vistas
+Layers: Capas
+Reports: Informes
+Delete Events: Borrar eventos
+Public Preferences: Preferencias públicas
+Unapproved Public Events: Eventos públicos no aprobados
+Administrative Tools: Herramientas administrativas
+
+
+###############################################
+# Page: admin.php
+#
+Help: Ayuda
+Note: Nota
+Your user preferences: Tus preferencias de usuario
+may be affecting the appearance of this page.: podrían estar afectando la apariencia de esta página
+Click here: Haz click aquí
+to not use your user preferences when viewing this page: para no usar tus preferencias cuando ves esta página
+are being ignored while viewing this page.: se ignoran mientras ves esta página.
+to load your user preferences when viewing this page: para cargar tus preferencias mientras ves esta página
+Save: Guardar
+Settings: Opciones
+Public Access: Usuario anónimo
+Groups: Grupos
+NonUser Calendars: Calendarios de NoUsuario
+Other: Otros
+Email: Email
+colors-help: Todos los colores deben especificarse en formato hexadecimal "#RRGGBB" donde "RR" es el valor hexadecimal del rojo, "GG"  es el valor hexadecimal del verde y "BB" es el valor hexadecimal del azul.
+Colors: Colores
+app-name-help: Especifica el nombre de la aplicación que aparecera en el título del navegador en todas las páginas y en la página de login. El valor especeficado aquí se buscará en el fichero de traducciones permitiendo diferentes títulos para diferentes idiomas.
+Application Name: Nombre de la aplicación
+server-url-help: Especifica la URL base para la aplicación. Se incluirá al enviar emails de recordatorios y notificaciones.
+Server URL: URL del servidor
+language-help: Especifica el idioma a usar.
+Language: Idioma
+Your browser default language is: El idioma por defecto de tu navegador es
+fonts-help: Especifica la fuente del sistema a utilizar (como "Arial, Helvetica")
+Fonts: Fuentes
+custom-script-help: Permite la definición de código Javascript o una hoja de estilos de texto que se insertará en la sección "head" de cada página.
+Custom script/stylesheet: Código/Hoja de estilos personalizada
+Yes: Sí
+No: No
+Edit: Editar
+custom-header-help: Permite definir un trozo de código HTML para incluir al principio de cada página.
+Custom header: Cabecera personalizada
+custom-trailer-help: Permite definir un trozo de código HTML para incluir al final de cada página.
+Custom trailer: Final personalizado
+preferred-view-help: Especifica la vista por defecto (Día, Semana, Mes, o Año)
+Preferred view: Vista preferida
+Day: Día
+Week: Semana
+Month: Mes
+Year: Año
+display-weekends-help: Incluir los fines de semana al ver una semana
+Display weekends in week view: Mostrar fines de semana en vista semanal
+yearly-shows-events-help: En la vista anual, muestra en negrita los días que contienen eventos.
+Display days with events in bold in month and year views: Mostrar en negrita días con eventos en las vistas anual y mensual
+display-desc-print-day-help: Incluir las descripciones de eventos en la versión para imprimir de la vista diaria.
+Display description in printer day view: Mostrar la descripción en vista diaria para imprimir
+date-format-help: Especifica el formato de fecha preferido
+Date format: Formato de fecha
+December: Diciembre
+time-format-help: Especifica qué formato de hora se usará: <br /><i>12 horas:</i> Muestra tiempos como 3am, 8:30pm, etc.  <br /><i>24 horas:</i> Muestra horas como 3:00, 20:30, etc.
+Time format: Formato de Hora
+12 hour: 12 horas
+24 hour: 24 horas
+time-interval-help: Especifica la duración de los bloques de tiempo en las vistas de semana y día
+Time interval: Intervalo de tiempo
+hour: hora
+minutes: Minutos
+auto-refresh-help: Cuando se activa, las vistas de dia, semana y mes asi como la lista de eventos no aprobados se refrescan periódicamente
+Auto-refresh calendars: Auto-refrescar calendarios
+auto-refresh-time-help: Si el refresco automático está habilitado, este campo especifica el tiempo entre refrescos
+Auto-refresh time: Tiempo de refresco automático
+require-approvals-help: Cuando se activa, un usuario debe aprobar un evento antes de que se muestre en su calendario (excepto si está activado "Mostrar no aprobados"). "No" impide el acceso público al calendario (si el acceso público al calendario está activado).
+Require event approvals: Requerir aprobación de eventos
+display-unapproved-help: Especifica si eventos no aprobados se mostraran en su calendario.<br /> Si se elige "Sí", los eventos no aprobados se mostrarán en su calendario (en un color de texto diferente).<br /> Si elige "No", los eventos no aprobados deben ser aprobados antes de que se muestren en su calendario.
+Display unapproved: Mostrar no aprobados
+display-week-number-help: Especifica si el número correspondiente a la semana (1-52) debe mostrarse en las vistas de mes y de semana.
+Display week number: Mostrar número de la semana
+display-week-starts-on: Especifica si la semana comienza en domingo o lunes. Si se especifica Lunes, los números de semana serán números ISO.
+Week starts on: Semana comienza en
+Sunday: Domingo
+Monday: Lunes
+work-hours-help: Especifica el rango de horas a mostrar en la vista de día.
+Work hours: Horas laborales
+From: De
+to: para
+disable-priority-field-help: Seleccionando "Sí", esconde el campo "Prioridad" de las páginas de información de eventos, facilitando una interfaz simple para novatos.
+Disable Priority field: Desactivar campo de Prioridad
+disable-access-field-help: Seleccionando "Sí", elimina el campo "Acceso" de las páginas de información de eventos, facilitando una interfaz simple para novatos.
+Disable Access field: Desactivar campo de Acceso
+disable-participants-field-help: Seleccionando "Sí", esconde el campo "Participantes" de las páginas de información de eventos, evitando que los usuarios añadan otros usuarios a sus eventos. Si activas esta opción, es posible que también desees desactivar el campo "Permitir ver calendarios de otros usuarios".
+Disable Participants field: Desactivar campo de Participantes
+disable-repeating-field-help: Seleccionando "Sí", esconde el campo "Repetición" al añadir nuevos eventos. Esto proporciona una interfaz simple para novatos.
+Disable Repeating field: Deshabilitar campo de Repetición
+popup-includes-siteextras-help: Si se activa, se permite que los campos de evento personalizados del fichero site_extras.php se muestren en los eventos emergentes.
+Display Site Extras in popup: Mostrar campos extra en emergentes
+allow-html-description-help: Si se activa, los usuarios pueden usar código HTML en el campo de descripción del evento. Si no se activa, los marcadores HTML se inutilizarán, mostrándose como texto normal. Aviso: La activación de esta característica permitirá a los usuarios referir imágenes en otros sitios.
+Allow HTML in Description: Permitir HTML en la descripción
+allow-view-other-help: Especifica si un usuario puede ver los eventos de otro usuario.
+Allow viewing other user's calendars: Permitir ver los calendarios de otros usuarios
+allow-view-add-help: Un icono '+' se mostrará en las vistas, permitiendo a los usuarios añadir rápidamente eventos al calendario de otros usuarios.
+Include add event link in views: Inluir enlace para añadir evento en las vistas
+remember-last-login-help: Cuando se habilita, recuerda el último login (pero no la contraseña), y las preferencias del usuario se muestran (incluyendo sus colores e idioma).
+Remember last login: Recordar información de login
+conflict-check-help: Revisar conflictos de eventos (dos eventos programados a la misma hora para la misma persona). Si lo ajustas a 'Sí', podrás programar dos eventos al mismo tiempos después de confirmar un aviso. Si lo ajustas a "No", no se comprobarán los conflictos. Problablemente querrás ajustarlo a "Sí" para que se realice la comprobación.
+Check for event conflicts: Revisar existencia de conflictos
+conflict-months-help: Si se habilita la revisión de conflictos, este campo especifica cuantos meses en el futuro se deben comprobar para comprobar los conflictos.
+Conflict checking months: Meses para la comprobación de conflictos
+conflict-check-override-help: Permite a los usuarios invalidar conflictos y programar dos o más eventos a la vez.
+Allow users to override conflicts: Permitir a los usuarios invalidar conflictos
+limit-appts-help: Permite al administrador del sistema aplicar límite de citas para un usuario en un día para todo el sistema.
+Limit number of timed events per day: Número límite de eventos por día
+limit-appts-number-help: Especifica el número máximo de eventos planificados que un usuario puede tener en un día.
+Maximum timed events per day: Máximo de eventos planificados por día
+timed-evt-len-help: Especifica el método de cálculo para determinar la longitud de un evento con horas.
+Specify timed event length by: Especificar la longitud de un evento con horas usando
+Duration: Duración
+End Time: Hora final
+Plugins: Plugins
+plugins-enabled-help: Habilitar aplicaciones plugin
+Enable Plugins: Habilitar plugins
+plugins-sort-key-help: Especifica la clave de ordenación de los plugins. Esto permite que los plugins aparezcan en un orden específico.
+Plugin: Plugin
+allow-public-access-help: Si se selecciona, el calendario puede ser usado como un calendario público de sólo lectura que no exige login a los usuarios.
+Allow public access: Permitir usuario anónimo
+public-access-default-visible: Los eventos del calendario público aparecerán automáticamente en todos los calendarios de usuario
+Public access visible by default: Usuario anónimo visible por defecto
+public-access-default-selected: Al añadir un nuevo evento, el Usuario anónimo estará incluído por defecto como participante.
+Public access is default participant: Usuario anónimo es participante por defecto
+public-access-view-others-help: Al acceder al sistema mediante acceso público, especifica si el usuario puede ver el calendario de otro usuario.
+Public access can view other users: Usuario anónimo puede ver otros usuarios
+public-access-can-add-help: Si se selecciona, los usuarios anonimos que acceden al sistema mediante Acceso público podrán añadir nuevos eventos, pero no los verán en el calendario hasta que el administrador apruebe los nuevos eventos.
+Public access can add events: Usuarios anónimos pueden agregar eventos
+public-access-add-requires-approval-help: Especifica si los eventos añadidos mediante acceso público requieren aprobación antes de ser mostrados.
+Public access new events require approval: Nuevos eventos anónimos requieren aprobación
+public-access-sees-participants-help: Si se activa, los usuarios que usan el calendario desde la cuenta pública pueden ver los participantes de un evento si ven los detalles de dicho evento.
+Public access can view participants: El usuario anónimo puede ver los participantes
+groups-enabled-help: Habilita soporte para grupos, permitiendo la selección de usuarios por grupos.
+Groups enabled: Grupos habilitados
+user-sees-his-group-help: Si se habilita, los usuarios no podrán ver usuarios del calendario que no estén al menos en uno de sus grupos.
+User sees only his groups: El usuario sólo ve sus grupos
+nonuser-enabled-help: Si se habilita, los administradores tienen la opción de añadir calendarios de NoUsuarios.
+Nonuser enabled: Activados calendarios de NoUsuarios
+nonuser-list-help: Dónde mostrar los calendarios de NoUsuarios en la lista de participantes
+Nonuser list: Lista de NoUsuarios
+Top: Arriba
+Bottom: Abajo
+reports-enabled-help: Si se habilita, los usuarios verán una sección "Informes" en la parte inferior de cada página permitiendo crear informes personalizados. Adicionalmente, los administradores pueden crear informes globales que aparecerán en la parte inferior de todas las páginas de los usuarios.
+Reports enabled: Informes habilitados
+subscriptions-enabled-help: Especifica si usuarios remotos pueden suscribirse al Webcalendar del calendario de un usuario, permitiendoles ver los eventos del usuario de Webcalendar en sus aplicaciones iCal (como Apple's iCal o Mozilla Calendar).
+Allow remote subscriptions: Permitir suscripciones remotas
+categories-enabled-help: Habilita la funcionalidad de Categorías.
+Categories enabled: Categorías habilitadas
+allow-external-users-help: Especifica si usuarios que no sean usuarios del calendario puede ser añadidos a un evento. Esto permite a usuarios que no sean usuarios del calendario ser listados como participantes del evento.
+Allow external users: Permitir usuarios externos
+external-can-receive-notification-help: Cuando están habilitados los usuarios externos y está habilitado el uso del email, los usuarios externos pueden recibir notificaciones por email cuando se añade el evento, se actualiza o se borra (si la dirección de email del usuario externo se proporciona).
+External users can receive email notifications: Los usuarios externos pueden recibir notificaciones por email
+external-can-receive-reminder-help: Cuando los usuarios externos están habilitados y el uso del email está habilitado, los usuarios externos pueden recibir recordatorios por email (si la dirección de email del usuario externo se proporciona).
+External users can receive email reminders: Los usuarios externos pueden recibir recodatorios por email.
+email-enabled-help: Habilita o no el envio de correos de notificaciones y recordatorios. Ajustar a "no", si el servidor no está ajustado para enviar mail correctamente.
+Email enabled: Email habilitado
+email-default-sender: Especifica la dirección de correo de remite de los recordatorios.
+Default sender address: Dirección del remitente
+Default user settings: Preferencias por defecto del usuario
+email-event-reminders-help: Especifica si se envían recordatorios por medio de email o no.
+Event reminders: Recordatorios de eventos
+email-event-added: Especifica si se notifica por medio de un email o no cuando un evento se añade a su calendario.
+Events added to my calendar: Eventos agregados a mi calendario
+email-event-updated: Especifica si se notifica por medio de un email o no cuando un evento es actualizado en su calendario.
+Events updated on my calendar: Eventos actualizados en mi calendario
+email-event-deleted: Especifica si se notifica por medio de un email o no cuando un evento es borrado de su calendario
+Events removed from my calendar: Eventos eliminados del calendario
+email-event-rejected: Especifica si se envían emails o no cuando un participante rechaza un evento que está en su calendario
+Event rejected by participant: Evento rechazado por el participante
+Allow user to customize colors: Permitir a los usuarios seleccionar colores
+Enable gradient images for background colors: Activar imágenes en gradiente para colores de fondo
+Not available: No disponible
+Document background: Fondo de Documento
+Select: Elegir
+Document title: Título del documento
+Document text: Texto del documento
+Table grid color: Color de la tabla
+Table header background: Fondo del encabezado de la tabla
+Table header text: Texto del Encabezado de la Tabla
+Table cell background: Fondo de Celda de Tabla
+Table cell background for current day: Fondo de Celda de Tabla para día de hoy
+Table cell background for weekends: Fondo de una celda de fin de semana
+Event popup background: Fondo de un popup de evento
+Event popup text: Texto del popup de evento
+
+
+###############################################
+# Page: approve_entry.php
+#
+Error approving event: Error aprobando evento
+
+
+###############################################
+# Page: assistant_edit.php
+#
+Admin mode: Modo administrador
+Your assistants: Tus ayudantes
+
+
+###############################################
+# Page: category_handler.php
+#
+Delete: Borrar
+
+
+###############################################
+# Page: category.php
+#
+Add: Añadir
+Category Name: Nombre de la categoría
+Global: Global
+Are you sure you want to delete this entry?: Está seguro de querer borrar esta entrada?
+Add New Category: Añadir nueva categoría
+
+
+###############################################
+# Page: day.php
+#
+Assistant mode: Modo ayudante
+Generate printer-friendly version: Generar versión imprimible
+Printer Friendly: Imprimible
+
+
+###############################################
+# Page: del_entry.php
+#
+Hello: Hola
+An appointment has been canceled for you by: Una cita/evento suyo ha sido cancelado por
+The subject was: El título era
+Notification: Notificación
+
+
+###############################################
+# Page: edit_entry_handler.php
+#
+The following conflicts with the suggested time: Lo siguiente hace conflicto con la hora indicada
+Unnamed Event: Evento sin nombre
+The description is: La descripción es
+Title: Título
+A new appointment has been made for you by: Una nueva cita ha sido hecha para usted por
+An appointment has been updated by: Una cita/evento ha sido actualizada por
+The subject is: El asunto es
+Please look on: Por favor busque en
+to accept or reject this appointment: para aceptar o no esta cita
+to view this appointment: para ver esta cita
+Scheduling Conflict: Conflicto entre citas
+Your suggested time of: Su hora sugerida es
+All day event: Evento para todo el día
+conflicts with the following existing calendar entries: no encaja con las siguiente entradas existentes en el calendario
+Cancel: Cancelar
+
+
+###############################################
+# Page: edit_entry.php
+#
+Edit Entry: Editar entrada
+Add Entry: Añadir entrada
+Details: Detalles
+Scheduling: Planificación
+Participants: Participantes
+Repeat: Repetición
+brief-description-help: Esta debe ser una descripción corta (20 caracteres aproximadamente) del evento. Representará el evento en el calendario.
+Brief Description: Breve Descripción
+full-description-help: Descripción completa y detallada del evento. Esta información puede ser vista por un usuario cuando ve el evento.
+Full Description: Descripción Ampliada
+access-help: Especifica el nivel de acceso del evento.<br /> <i>Público</i>: Cualquiera puede ver los detalles del evento.  <br /><i>Confidencial</i>: Otros pueden ver que tienes una entrada para ese día y esa hora, pero no los detalles de qué es.
+Access: Acceso
+Public: Público
+Confidential: Confidencial
+category-help: Especifica la categoría del evento.
+Category: Categoría
+None: Ninguno
+priority-help: Especifica la prioridad del evento.  Eventos de Alta Prioridad se mostrarán en negrita.
+Priority: Prioridad
+Low: Baja
+Medium: Media
+High: Alta
+days: días
+hours: horas
+before event: antes del evento
+date-help: Especifica la fecha del evento.
+Untimed event: Evento sin hora
+Timed event: Evento con hora
+time-help: Especifica la hora del evento.<br />Selecciona "Evento con hora" (para un evento planificado a una hora especifica del día), "Evento sin hora" (para un evento que no tiene hora, como un festivo) o "Evento para todo el día" (para un evento que dura todo el día, como estar fuera de la oficina).
+am: am
+pm: pm
+duration-help: Especifica la duración (en horas:minutos) del evento.  <br /><i>Este campo puede dejarse vacío.</i>
+end-time-help: Especifica la hora a la que se espera que acabe el evento.
+participants-help: Lista de participantes en esta entrada.
+external-participants-help: Especifica una lista de participantes en el evento que no son usuarios del calentario. Los usuario deben ser listados uno por línea y pueden incluir su dirección de email. Si la dirección de email se especifica, el usuario es elegible para recibir notications y recordatorios.
+External Participants: Participantes externos
+repeat-type-help: Seleccione con que frecuencia un evento debe repetirse.<i>Mensual (por día)</i> permite que un evento se repita el primer lunes de mes, 3 jueves del mes, etc.  <i>Mensual (por fecha)</i> permite que un evento se repita el mismo día del mes.
+Repeat Type: Tipo de repetición
+Daily: Diario
+Weekly: Semanalmente
+Monthly: Mensualmente
+by day: por día
+by day (from end): por día (desde el final)
+by date: por fecha
+Yearly: Anualmente
+repeat-end-date-help: Especifica hasta que día debe repetirse un evento.
+Repeat End Date: Fecha final de repetición
+Use end date: Usar fecha
+repeat-frequency-help: Especifica con qué frecuencia un evento debe repetirse. Por defecto 1 indica que debe ocurrir cada vez. Especificando 2 hará que el evento ocurrá cada semana (si <i>Repetir tipo</i> está ajustado a <i>Semanal</i>), cada mes (si <i>Repetir tipo</i> está ajustado a <i>Mensual</i>), etc.
+Frequency: Frecuencia
+repeat-day-help: Especifica en que dias del mes debe repetirse el evento. Para usar sólo cuando <i>Tipo de repetición</i> está ajustado a <i>Semanal</i>. 
+Repeat Day: Día repetición
+Tuesday: Martes
+Wednesday: Miércoles
+Thursday: Jueves
+Friday: Viernes
+Saturday: Sabado
+Delete entry: Borrar entrada
+You are not authorized to edit this entry: No estás autorizado para editar esta entrada
+
+
+###############################################
+# Page: edit_layer_handler.php
+#
+You cannot create a layer for yourself: No puede crear una capa para usted mismo
+You can only create one layer for each user: Sólo puede crear una capa para cada usuario
+
+
+###############################################
+# Page: edit_layer.php
+#
+Edit Layer: Editar Capa
+Add Layer: Agregar Capa
+Source: Fuente
+Color: Color
+Duplicates: Duplicados
+Show layer events that are the same as your own: Mostrar capas de eventos que son idénticos a los propios
+Delete layer: Eliminar capa
+Are you sure you want to delete this layer?: ¿Está seguro que desea eliminar esta capa?
+
+
+###############################################
+# Page: edit_nonusers_handler.php
+#
+Calendar ID: ID de calendario
+word characters only: sólo puede contener caracteres de palabras (a-zA-Z_0-9)
+Changes successfully saved: Cambios guardados
+
+
+###############################################
+# Page: edit_nonusers.php
+#
+NONUSER_PREFIX not set: NONUSER_PREFIX no ha sido configurado
+Edit User: Editar usuario
+Add User: Agregar usuario
+First Name: Nombre
+Last Name: Apellido
+
+
+###############################################
+# Page: edit_report_handler.php
+#
+Page template: Página de plantilla
+Variable N not found: Variable N no encontrada
+Day template: Día plantilla
+Event template: Evento plantilla
+Unnamed Report: Informe sin nombre
+
+
+###############################################
+# Page: edit_report.php
+#
+Tomorrow: Mañana
+Today: Hoy
+Yesterday: Ayer
+Day before yesterday: Antes de ayer
+Next week: Próxima semana
+This week: Esta semana
+Last week: La última semana
+Week before last: La semana antes de la anterior
+Next week and week after: Semana siguiente y semana después
+This week and next week: Esta semana y la siguiente
+Last week and this week: Semana anterior y esta semana
+Last two weeks: Últimas dos semanas
+Next month: Próximo mes
+This month: Este mes
+Last month: Último mes
+Month before last: Mes antes último
+Next year: Siguiente año
+This year: Este año
+Last year: Último año
+Year before last: Año antes del último
+Invalid report id: ID de informe inválido
+Add Report: Añadir informe
+Edit Report: Editar informe
+Report name: Nombre del informe
+Current User: Usuario Actual
+Include link in trailer: Incluir enlace en final
+Include standard header/trailer: Incluir cabecera/final estándar
+Date range: Rango fecha
+Include previous/next links: Incluir enlaces previo/siguiente
+Include empty dates: Incluir fechas vacías
+Template variables: Variables de plantilla
+Are you sure you want to delete this report?: ¿Estás seguro que quieres borrar este informe?
+
+
+###############################################
+# Page: edit_template.php
+#
+Edit Custom Script/Stylesheet: Editar código/hoja de estilos personalizada
+Edit Custom Header: Editar cabecera personalizada
+Edit Custom Trailer: Editar final personalizado
+
+
+###############################################
+# Page: edit_user_handler.php
+#
+Deleting users not supported: Borrado de usuarios no soportado
+The passwords were not identical: Estas contraseña no son idénticas
+You have not entered a password: Usted no ha introducido una contraseña
+
+
+###############################################
+# Page: edit_user.php
+#
+Username: Nombre de usuario
+E-mail address: Dirección de email
+Password: Contraseña
+again: de nuevo
+Disabled for demo: Desactivado en la demo
+Are you sure you want to delete this user?: ¿Estás seguro de querer borrar este usuario?
+Change Password: Cambiar contraseña
+New Password: Nueva contraseña
+Set Password: Ajustar contraseña
+
+
+###############################################
+# Page: export_handler.php
+#
+Export: Exportar
+export format not defined or incorrect: Formato de exportación no definido o incorrecto
+
+
+###############################################
+# Page: export.php
+#
+Export format: Formato de exportación
+Palm Pilot: Palm Pilot
+Include all layers: Incluir todas las capas
+Export all dates: Exportar todas las fechas
+Start date: Fecha inicio
+End date: Fecha fin
+Modified since: Modificado desde
+
+
+###############################################
+# Page: group_edit_handler.php
+#
+You must specify a group name: Debe especificar un nombre de grupo
+
+
+###############################################
+# Page: group_edit.php
+#
+Unnamed Group: Grupo sin nombre
+Add Group: Agregar grupo
+Edit Group: Editar grupo
+Group name: Nombre del grupo
+Updated: Actualizado
+Created by: Creado por
+
+
+###############################################
+# Page: groups.php
+#
+Add New Group: Agregar nuevo grupo
+
+
+###############################################
+# Page: help_admin.php
+#
+Display days with events in bold in year view: Mostrar días con eventos en negrita en vista anual
+Nonuser: NoUsuario
+Subscribe/Publish: Suscribir/publicar
+
+
+###############################################
+# Page: help_bug.php
+#
+Report Bug: Informe de error
+
+
+###############################################
+# Page: help_edit_entry.php
+#
+Adding/Editing Calendar Entries: Añadir/editar entradas del calendario
+
+
+###############################################
+# Page: help_import.php
+#
+Import: Importar
+Palm Desktop: Palm Desktop
+This form will allow you to import entries from the Palm Desktop Datebook.: Este formulario te permite importar entradas de la agenda del Palm Desktop
+It should be located in your Palm directory in <tt>datebook/datebook.dat</tt> in a subdirectory named by your username.: Debe estar en tu directorio de Palm en <tt>datebook/datebook.dat</tt> en un subdirectorio llamado con tu nombre de usuario.
+The following entries will not be imported: Las siguientes entradas no se importarán
+Entries older than the current date: Entradas anteriores a la fecha actual
+Entries created in the Palm Desktop that have not been HotSync'd: Entradas creadas en Palm Desktop que no han pasado por HotSync
+Anything imported from Palm will be overwritten during the next import (unless the event date has passed).: Cualquier elemento importado de Palm será sobreescrito durante la próxima importación (excepto se la fecha del evento ha pasado).
+Therefore, updates should be made in the Palm Desktop.: Por lo tanto, se debe realizar actualizaciones en Palm Desktop.
+vCal: vCal
+This form will import vCalendar (.vcs) 1.0 events: Este formulario importará eventos vCalendar (.vcs) 1.0
+The following formats have been tested: Los siguientes formatos se han comprobado
+Palm Desktop 4: Palm Desktop 4
+Lotus Organizer 6: Lotus Organizer 6
+Microsoft Outlook 2002: Microsoft Outlook 2002
+iCalendar: iCalendar
+This form will import iCalendar (.ics) events: Este formulario importará eventos iCalendar (.ics)
+Enabling <b>Overwrite Prior Import</b> will cause events imported previously that used the same UID as an event from the new import file to be marked as deleted.  This should allow an updated iCalendar file to be imported without creating duplicates.: Activar <b>Sobreescribir importación anterior</b> provocará que los eventos importados anteriormente que usen el mismo UID que un evento del nuevo fichero de importación se marcarán como borrados. Esto debería permitir importar un fichero iCalendar actualizado sin que se creen duplicados.
+
+
+###############################################
+# Page: help_index.php
+#
+Help Index: Ayuda
+
+
+###############################################
+# Page: help_layers.php
+#
+Layers are useful for displaying other users' events in your own calendar.  You can specifiy the user and the color the events will be displayed in.: Las capas son útiles para mostrar eventos de otros usuarios en tu propio calendario.  Puedes especificar el usuario You can specifiy the user y el color en que se mostrarán los eventos.
+Add/Edit/Delete: Añadir/editar/eliminar
+Clicking the Edit Layers link in the admin section at the bottom of the page will allow you to add/edit/delete layers.: Haciendo click en el enlace de editar capas en la sección de administración en la parte inferior de la página permite añadir/editar/borrar capas.
+Specifies the user that you would like to see displayed in your calendar.: Especifica el usuario que usted quisiera ver exhibido en su calendario.
+The text color of the new layer that will be displayed in your calendar.: El color del texto de la nueva capa que se mostrará en su calendario.
+If checked, events that are duplicates of your events will be shown.: Si está seleccionado, los eventos duplicados con los suyos se mostrarán.
+Disabling: Deshabilitando
+Press the Disable Layers link in the admin section at the bottom of the page to turn off layers.: Haz click en el enlace de deshabilitar capas en la sección de adminstración al pie de página para deshabilitar las capas.
+Enabling: Habilitando
+Press the Enable Layers link in the admin section at the bottom of the page to turn on layers.: Haz click en el enlace de deshabilitar capas en la sección de adminstración al pie de página para habilitar las capas.
+
+
+###############################################
+# Page: help_pref.php
+#
+Default Category: Categoría por defecto
+default-category-help: Especifica la categoría por defecto donde debe ir un evento.
+allow-remote-subscriptions-help: Especifica si usuarios remotos pueden suscribirse a tu calendario, permitiéndoles ver tus eventos en una aplicación i-Cal (como Apple's iCal o Mozilla Calendar).
+URL: URL
+remote-subscriptions-url-help: Muestra la URL que los usuarios remotos deben utilizar para suscribirse a tu calendario
+
+
+###############################################
+# Page: import_handler.php
+#
+Import Results: Resultado de la importacion
+Events successfully imported: Eventos importados correctamente
+Events from prior import marked as deleted: Eventos de la importación anterior marcados como borrados
+Conflicting events: Eventos que están en conflicto
+Errors: Errores
+There was an error parsing the import file or no events were returned: Ha habido un error al analizar el archivo de importación o no se devolvió ningún acontecimiento
+The import file contained no data: El fichero de importación no contiene datos
+View this entry: Ver esta entrada
+Event Imported: Evento importado
+
+
+###############################################
+# Page: import.php
+#
+Disabled: Deshabilitadas
+Import format: Formato de importación
+Exclude private records: Excluir eventos privados
+Overwrite Prior Import: Sobreescribir importación anterior
+
+
+###############################################
+# Page: layers.php
+#
+Layers are currently: Las capas están actualmente
+Enabled: Habilitadas
+Disable Layers: Deshabilitar Capas
+Enable Layers: Habilitar Capas
+to modify the layers settings for the: para modificar los ajustes de capas para el
+calendar: calendario
+Add layer: Agregar capa
+Layer: Capa
+Edit layer: Editar capa
+
+
+###############################################
+# Page: list_unapproved.php
+#
+Approve/Confirm: Aprobar/Confirmar
+Approve this entry?: ¿Aprueba esta entrada?
+Reject: Rechazar
+Reject this entry?: ¿Rechazar este registro?
+No unapproved events for: No existen eventos sin aprobar para
+Unapproved Events: Eventos no aprobados
+
+
+###############################################
+# Page: login.php
+#
+Invalid login: Usuario/contraseña incorrectos
+You must enter a login and password: Usted debe introducor nombre de usuario y contraseña
+Save login via cookies so I don't have to login next time: Guardar datos via cookies para no hacer login la próxima vez
+Login: Entrar
+Access public calendar: Acceso a calendario público
+cookies-note: <b>Nota:</b> Esta aplicación requiere tener habilitado cookies.
+
+
+###############################################
+# Page: month.php
+#
+Sun: Dom
+Mon: Lun
+Tue: Mar
+Wed: Mie
+Thu: Jue
+Fri: Vie
+Sat: Sab
+
+
+###############################################
+# Page: nonusers.php
+#
+Add New NonUser Calendar: Añadir nuevo calendario de NoUsuario
+
+
+###############################################
+# Page: pref.php
+#
+Save Preferences: Guardar preferencias
+to modify the preferences for the Public Access calendar: para modificar las preferencias del calendario del Usuario anónimo
+tz-help: Especifica cuántas horas para ajustar la hora del servidor con la hora local.
+Timezone Offset: Desplazamiento de zona horaria
+Add N hours to: Añadir N horas a
+Subtract N hours from: Quitar N horas de
+same as: igual a
+server time: hora del servidor
+When I am the boss: Cuando yo soy el jefe
+Email me event notification: Envíame notificaciones por email
+I want to approve events: Quiero aprobar los eventos
+
+
+###############################################
+# Page: purge.php
+#
+Purging events for: Eliminando eventos para
+Finished: Terminado
+All: Todos
+Delete all events before: Borrar todos los eventos antes de
+Check box to delete <b>ALL</b> events for a user: Marcar la casilla para borrar <b>TODOS</b> los eventos de un usuario
+Are you sure you want to delete events for: ¿Estás seguro de querer borrar los eventos de
+Records deleted from: Registros borrados de
+
+
+###############################################
+# Page: reject_entry.php
+#
+An appointment has been rejected by: Un evento ha sido rechazado por
+
+
+###############################################
+# Page: report.php
+#
+Private: Privado
+Waiting for approval: Esperando aprobación
+Deleted: Eliminados
+Rejected: Rechazados
+Approved: Aprobado
+Unknown: Desconocido
+to manage reports for the Public Access calendar: para manejar informes para el calendario del Usuario anónimo
+Add new report: Añadir nuevo informe
+cont.: cont.
+Manage Reports: Manejar informes
+
+
+###############################################
+# Page: search_handler.php
+#
+You must enter one or more search keywords: Debes introducir una ó más palabras clave
+Search Results: Resultados de la búsqueda
+match found: acierto encontrado
+matches found: aciertos encontrados
+No matches found: no se encontraron aciertos
+
+
+###############################################
+# Page: search.php
+#
+Search: Buscar
+Keywords: Palabra clave
+Advanced Search: Búsqueda avanzada
+
+
+###############################################
+# Page: select_user.php
+#
+View Another User's Calendar: Ver calendario de otro usuario
+Go: Ir
+
+
+###############################################
+# Page: set_entry_cat.php
+#
+You have not added any categories: No has creado categorías
+Set Category: Asignar categoría
+
+
+###############################################
+# Page: usersel.php
+#
+Reset: Resetear
+Remove: Quitar
+Ok: Ok
+
+
+###############################################
+# Page: users.php
+#
+Add New User: Agregar nuevo usuario
+denotes administrative user: indica usuario administrativo
+
+
+###############################################
+# Page: view_entry.php
+#
+every: cada
+2nd: 2a
+3rd: 3era
+4th: 4a
+5th: 5a
+1st: 1era
+last: última
+Description: Descripción
+Status: Status
+day: día
+minute: minuto
+External User: Usuario externo
+Approve/Confirm entry: Aprobar/Confirmar registro
+Reject entry: Rechazar registro
+Set category: Fijar categoría
+Edit repeating entry for all dates: Editar registro repetitivo para todas las fechas
+Edit entry for this date: Editar entrada para este día
+Delete repeating event for all dates: Eliminar eventos repetitivos para todas las fechas
+This will delete this entry for all users.: Esta acción borrará esta entrada para todos los usuarios
+Delete entry only for this date: Borrar entrada sólo para esta fecha
+Edit entry: Editar entrada
+Copy entry: Copiar entrada
+This will delete the entry from your calendar.: Esta acción eliminara el registro de tu calendario.
+Add to My Calendar: Agregar a mi calendario
+Do you want to add this entry to your calendar?: ¿Desea agregar este registro a su calendario?
+This will add the entry to your calendar.: Esto agregara el registro a tu calendario.
+Email all participants: Enviar email a todos los participantes
+Show activity log: Mostrar registro de actividad
+Hide activity log: Esconder registro de actividad
+Export this entry to: Exportar esta entrada a
+
+
+###############################################
+# Page: views_edit_handler.php
+#
+You must specify a view name: Debes especificar un nombre de vista
+
+
+###############################################
+# Page: views_edit.php
+#
+Unnamed View: Vista sin nombre
+Add View: Agregar vista
+Edit View: Editar vista
+View Name: Ver nombre
+View Type: Ver tipo
+Week (Users horizontal): Semana (usuarios horizontal)
+Week (Users vertical): Semana (usuarios vertical)
+Week (Timebar): Semana (barra)
+Month (Timebar): Mes (barra)
+Month (side by side): Mes (de lado a lado)
+Month (on same calendar): Mes (en el mismo calendario)
+preview: vista previa
+
+
+###############################################
+# Page: views.php
+#
+Add New View: Agregar nueva vista
+
+
+###############################################
+# Page: week_details.php
+#
+New Entry: Nuevo registro
+
+
+###############################################
+# Page: includes/config.php
+#
+English: Inglés
+Basque: Euskera
+Bulgarian: Búlgaro
+Catalan: Català
+Chinese (Traditonal/Big5): Chino (Traditonal/Big5)
+Chinese (Simplified/GB2312): Chino (Simplified/GB2312)
+Czech: Checo
+Danish: Danés
+Dutch: Holandés
+Estonian: Estonio
+Finnish: Finés
+French: Francés
+Galician: Galego
+German: Alemán
+Holo (Taiwanese): Taiwanés
+Hungarian: Húngaro
+Icelandic: Islandés
+Italian: Italiano
+Japanese: Japonés
+Korean: Koreano
+Norwegian: Noruego
+Polish: Polaco
+Portuguese: Portugués
+Portuguese/Brazil: Portugués/Brasil
+Romanian: Rumano
+Russian: Ruso
+Spanish: Español
+Swedish: Sueco
+Turkish: Turco
+
+
+###############################################
+# Page: includes/functions.php
+#
+This event is confidential: Este evento es confidencial
+exceeds limit of XXX events per day: excede el límite de XXX eventos por día
+You have XXX unapproved events: Hay XXX eventos sin aprobar
+January: Enero
+February: Febrero
+March: Marzo
+April: Abril
+May_: Mayo
+June: Junio
+July: Julio
+August: Agosto
+September: Septiembre
+October: Octubre
+November: Noviembre
+Jan: Ene
+Feb: Feb
+Mar: Mar
+Apr: Abr
+May: May
+Jun: Jun
+Jul: Jul
+Aug: Ago
+Sep: Sep
+Oct: Oct
+Nov: Nov
+Dec: Dic
+
+
+###############################################
+# Page: includes/help_trailer.php
+#
+Go to: Ir a
+
+
+###############################################
+# Page: includes/site_extras.php
+#
+Send Reminder: Enviar recordatorio
+
+
+###############################################
+# Page: includes/trailer.php
+#
+My Calendar: Mi Calendario
+Back to My Calendar: Regresar a Mi Calendario
+Another User's Calendar: Ver calendario de otro usuario
+Add New Entry: Agregar nueva entrada
+Logout: Salir
+Manage calendar of: Manejar calendario de
+
+
+###############################################
+# Page: includes/user-nis.php
+#
+incorrect password: contraseña incorrecta
+no such user: no existe el usuario
+Invalid user login: Usuario/contraseña incorrectos
+
+
+###############################################
+# Page: includes/js/admin.php
+#
+Server URL is required: Falta la URL del servidor
+Server URL must end with '/': La URL del servidor debe terminar en '/'
+Invalid work hours: Horas de trabajo no válidas
+Invalid color for document background: Color inválido para fondo de documento
+Invalid color for document title: Color inválido para título de documento
+Invalid color for table cell background: Color inválido para fondo de celda de tabla
+Invalid color for table grid: Color de tabla inválido
+Invalid color for table header background: Color inválido para el fondo de cabecera de tabla
+Invalid color for table text background: Color de fondo de texto de tabla inválido
+Invalid color for event popup background: Color de fondo para popup de evento inválido
+Invalid color for event popup text: Color de texto para popup de evento inválido
+Invalid color for table cell background for today: Color inválido para fondo de celda 'hoy'
+Color format should be '#RRGGBB': Formato de Color debe ser Hexadecimal '#RRGGB
+
+
+###############################################
+# Page: includes/js/edit_entry.php
+#
+You have not entered a Brief Description: No has escrito una Breve descripción
+You have not entered a valid time of day: No has dado una hora válida
+The time you have entered begins before your preferred work hours.  Is this correct?: La hora que ha introducido comienza antes de tus horas laborables preferidas. ¿Es correcto?
+
+
+###############################################
+# Page: includes/js/edit_layer.php
+#
+Invalid color: Color no válido
+
+
+###############################################
+# Page: tools/send_reminders.php
+#
+This is a reminder for the event detailed below.: Este es un recordatorio para el evento detallado debajo
+Reminder: Recordatorio

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Swedish.txt
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Swedish.txt	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Swedish.txt	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,1014 @@
+# Use this as a starting point to translate this application into
+# another language.  The format is "English text: translated text"
+# There cannot be a ":" in the English text.
+# Translated by: Bernt Sjöström <bernt at sjostrom.pchemma.nu>
+# Last update: 11 november 2004
+#
+#
+# Translation last updated on 12-07-2004
+
+
+###############################################
+# Specify a charset (will be sent within meta tag for each page)
+#
+charset: iso-8859-1
+
+
+
+###############################################
+# Page: week.php
+#
+Week: Vecka
+Previous: Föregående
+Next: Nästa
+Admin mode: Administrationsläge
+Assistant mode: Assistansläge
+cont.: forts.
+Generate printer-friendly version: Skapa utskriftsvänlig version
+Printer Friendly: Utskriftsvänlig version
+
+
+###############################################
+# Page: admin.php
+#
+System Settings: Systeminställningar
+Help: Hjälp
+You are not authorized: Förbjuden åtgärd 
+Admin: Administration
+Note: Meddelande
+Your user preferences: Dina inställningar
+may be affecting the appearance of this page.: kan påverka denna sidas utformning
+Click here: Klicka här
+to not use your user preferences when viewing this page: för att inte använda dina inställningar när du visar denna sida
+are being ignored while viewing this page.: har ignorerats medan du visar denna sida
+to load your user preferences when viewing this page: för att använda dina inställningar vid visning av denna sida
+Save: Spara
+Settings: Inställningar 
+Public Access: Offentlig kalender
+Groups: Grupper
+NonUser Calendars: Icke-användare kalender
+#
+# << MISSING >>
+# Other:
+Email: E-post
+colors-help: Alla färger skall skrivas in som #RRGGBB där RR är hexkoden för den röda, GG är hexkoden för den gröna och BB är hexkoden för den blå färgen.
+Colors: Färger
+app-name-help: Anger namnet på denna applikation. Det kommer att synas i bläddrarens titelfält på alla sidor och på login-sidan. Värdet du anger här kommer att slås upp i språk-filen och tillåter dig att tillhandahålla olika titlar för olika språk.
+Application Name: Denna applikations namn
+server-url-help: Anger bas-URL för denna applikation. Denna kommer att inkluderas när e-post med påminnelser och meddelanden skickas ut.
+Server URL: Server-URL
+language-help: Ange vilket språk du vill använda.
+Language: Språk
+Your browser default language is: Standardspråket i din webbläsare är
+fonts-help: Anger en lista på systemtypsnitt att använda (som "Arial, Helvetica, Verdana")
+Fonts: Typsnitt
+custom-script-help: Tillåter inmatning av egna Javaskript eller stilmalls-text som kommer att sättas in på varje HTML-sidas "HEAD"-del. 
+Custom script/stylesheet: Eget skript/stilmall
+Yes: Ja
+No: Nej
+Edit: Redigera
+custom-header-help: Tillåter ett eget HTML-fält att sättas in överst på varje sida.
+Custom header: Egen "header"
+custom-trailer-help: Tillåter ett eget HTML-fält att sättas in nederst på varje sida.
+Custom trailer: Egen "footer"
+preferred-view-help: Specificera standardvisning (dag, vecka, månad eller år).
+Preferred view: Vald standardvy
+Day: Dag
+Month: Månad
+Year: År
+display-weekends-help: Inkludera veckoslut vid visning av vecka.
+Display weekends in week view: Visa veckoslut vid visning av vecka
+yearly-shows-events-help: Vid visning av år, visa dagar som innehåller aktiviteter i fetstil.
+#
+# << MISSING >>
+# Display days with events in bold in month and year views:
+display-desc-print-day-help: Inkludera aktivitetsbeskrivning i utskriftsvänlig version av dagsvyn.
+Display description in printer day view: Visa beskrivning i utskriftsvänlig version av dag
+date-format-help: Anger önskat datumformat.
+Date format: Datumformat
+December: December
+time-format-help: Skall tiden visas i 12 eller 24-timmars format.
+Time format: Tidsformat
+12 hour: 12 timmar
+24 hour: 24 timmar
+time-interval-help: Anger hur långa tidsblocken i veckovisning och dagsvisning ska vara.
+Time interval: Tidsintervall
+hour: timme
+minutes: minuter
+auto-refresh-help: Om detta aktiveras kommer dagsvisning, veckovisning, månadsvisning och listning av icke godkända sidor att automatiskt laddas om periodiskt.
+Auto-refresh calendars: Automatisk omladdning av kalender
+auto-refresh-time-help: Om automatisk omladdning är aktiverat anger detta tiden mellan omladdningarna.
+Auto-refresh time: Omladdningstid
+require-approvals-help: Om aktiverat måste en användare godkänna en aktivitet innan den visas på deras kalender (om inte "Visa icke godkända aktiviteter" är aktiverad). Notera att sätta denna till "Nej" kommer inte att stänga av godkännanden för offentliga kalendrar (om "Offentlig kalender" är tillåten).
+Require event approvals: Kräver aktivitetsgodkännande
+display-unapproved-help: Specificera om din kalender skall visa icke godkända aktiviteter.
+Display unapproved: Visa icke godkända aktiviteter
+display-week-number-help: Specificera om veckonumren skall visas på veckovyn.
+Display week number: Visa veckonummer
+display-week-starts-on: Börjar din vecka på söndagar eller måndagar.
+Week starts on: Veckan börjar på
+Sunday: Söndag
+Monday: Måndag
+work-hours-help: Specificera antal timmar kalenderdagarna ska omfatta.
+Work hours: Kalenderdagens omfång i timmar
+From: Från
+to: till
+disable-priority-field-help: Välj "Ja" om du vill att "Prioritet"-fältet ska tas bort från händelsers informationssidor, vilket skapar ett enklare gränssnitt för noviser.
+Disable Priority field: Välj bort Prioritet-fältet
+disable-access-field-help: Välj "Ja" om du vill ta bort "Tillträde"-fältet från händelsers informationssidor, vilket skapar ett enklare gränssnitt för noviser.
+Disable Access field: Välj bort Tillträde-fältet
+disable-participants-field-help: Välj "Ja" om du vill ta bort "Deltagare"-fältet från händelsers informationssidor, vilket förhindrar användare från att lägga till andra användare till deras händelser. Om du verkställer detta val, bör du kanske också välja bort "Tillåt visning av andra användares kalendrar"-fältet.
+Disable Participants field: Välj bort Deltagare-fältet
+disable-repeating-field-help: Välj "Ja" om du vill ta bort "Upprepning"-fältet när händelser läggs till. Detta skapar ett enklare gränssnitt för noviser.
+Disable Repeating field: Välj bort Upprepning-fältet
+popup-includes-siteextras-help: Om aktiverat tillåts egna händelsefältinställningar i site_extras.php-filen att visas i händelsepopp-uppfönster.
+Display Site Extras in popup: Visa Webb-extra i popp-uppfönster
+allow-html-description-help: Om aktiverat kan användare ange HTML-taggar i aktivitetbeskrivningsfältet. Om inte tillåtet kommer HTML-taggar att visas som vanlig text. <b>VARNING:</b> Att tillåta denna möjlighet ger användare möjlighet att referera till sidor och bilder på andra webbplatser.
+Allow HTML in Description: Tillåt HTML-taggar i beskrivningar
+allow-view-other-help: Anger om en användare ska kunna se en annan användares kalender.
+Allow viewing other user's calendars: Tillåt visning av andra användares kalendrar
+allow-view-add-help: En '+'-ikon kommer att läggas till i visningar, vilket tillåter användare att snabbt lägga till aktiviteter till andra användares kalendrar.
+Include add event link in views: Lägg till 'Lägg till händelse'-länk i visningar
+remember-last-login-help: Om aktiverat kommer användares användarnamn att fyllas i åt dem på inloggningssidan (men inte lösenordet). och användarens inställningar kommer att laddas (inklusive inställda färger och språkval).
+Remember last login: Kom ihåg föregående inloggning
+conflict-check-help: Kontrollera av händelsekonflikter (två händelser planerade för samma tid för samma person). Om du sätter detta till "Ja", kan du fortfarande planera in två händelser vid samma tid efter att ha accepterat en varning. Om du sätter detta till "Nej", kommer inga kontroller av konflikter att göras. Du vill förmodligen sätta detta till "Ja", så att konfliktkontroll görs.
+Check for event conflicts: Kontroll av händelsekonflikt
+conflict-months-help: Om konfliktkontroll aktiverats ("Kontroll av händelsekonflikt" är satt till "Ja"), anger detta hur många månader framåt vi ska kontrollera för konflikter. Om du ser att det tar lång tid att processa tillägg av ny aktivitet bör du reducera siffran.
+Conflict checking months: Konfliktkontroll antal månader framåt
+conflict-check-override-help: Tillåter användare att åsidosätta aktivitetskonflikter och planera två eller flera aktiviteter för samma tid.
+Allow users to override conflicts: Tillåt användare att åsidosätta konflikter
+limit-appts-help: Tillåter systemadministratören att sätta systemövergripande gräns för antalet aktiviteter en enskild användare kan ha på en enskild dag.
+Limit number of timed events per day: Begränsa antalet aktiviteter per dag
+limit-appts-number-help: Anger maximalt antal tidsangivna aktiviteter en användare kan ha en enskild dag.
+Maximum timed events per day: Maximalt antal tidsangivna aktiviteter per dag
+timed-evt-len-help: Anger inmatningssättet för att ange längden på en tidsangiven aktivitet.
+Specify timed event length by: Ange tidsangiven aktivitets längd genom
+Duration: Varaktighet
+End Time: Sluttid
+Plugins: Plugg-in tillämpningar
+plugins-enabled-help: Tillåt plugg-in tillämpningar.
+Enable Plugins: Tillåt plugg-in tillämpningar
+plugins-sort-key-help: Anger en sorteringsnyckel för plugg-in tillämpningar. Detta tillåter plugg-in tillämpningar att visas i en specificerad orning.
+Plugin: Plugg-in tillämpning
+allow-public-access-help: Om tillåtet kan kalendern användas som en läsbar offentlig kalender som inte kräver användarinloggning.
+Allow public access: Tillåt offentlig åtkomst
+public-access-default-visible: Aktiviteter från den offentliga kalendern kommer automatiskt att synas på alla användares kalendrar
+Public access visible by default: Som standard offentligt synlig
+#
+# << MISSING >>
+# public-access-default-selected:
+# English text: When adding a new event, the public user will be selected by default as a participant.
+#
+#
+# << MISSING >>
+# Public access is default participant:
+public-access-view-others-help: Vid offentligt tillträde anges om användaren ska kunna visa andra kalenderanvändares kalendrar.
+Public access can view other users: Offentlig användare kan se andra användare
+public-access-can-add-help: Om aktiverat kan användare med offentlig tillgång till systemet lägga till nya aktiviteter, men de kommer inte att visas i kalendern förrän en administratör godkänt den nya aktiviteten.
+Public access can add events: Offentlig användare kan lägga till aktivitet
+public-access-add-requires-approval-help: Anger om tillagd händelse via offentlig tillgång ska kräva godkännande innan det visas.
+Public access new events require approval: Offentligt tillagd ny händelse kräver godkännande
+public-access-sees-participants-help: Om aktiverat kan offentliga användare av kalendern se händelsedeltagare om de tittar på en händelses detaljer.
+Public access can view participants: Offentlig användare kan se andra deltagare
+groups-enabled-help: Tillåt grupphantering, vilket tillåter en användare att välja deltagare via grupper.
+Groups enabled: Grupper tillåtna
+user-sees-his-group-help: Om aktiverat kan inte användare se andra kalenderanvändare som inte finns i åtminstone en av deras grupper.
+User sees only his groups: Användare ser enbart denna grupp
+nonuser-enabled-help: Om aktiverat har administratörer möjligheten att lägga till icke-användares kalendrar
+Nonuser enabled: Icke-användares kalendrar aktiverat
+nonuser-list-help: Var ska icke-användares kalendrar visas i deltagarlistan.
+Nonuser list: Visa i deltagarlistans
+Top: Topp
+Bottom: Botten
+reports-enabled-help: Om aktiverat kommer användare att se ett "Rapport"-val i slutet på varje sida och har då möjlighet att skapa egna rapporter. Därtill kan administratörer skapa globala rapporter som syns i slutet på alla användares sidor.
+Reports enabled: Rapporter tillåts
+subscriptions-enabled-help: Anger om fjärranvändare ska kunna abbonera på en Webbkalenderanvändares kalender och tillåta dem att se Webbkalenderanvändarens aktiviteter i deras iCal-tillåtna applikation (som Apples iCal eller Mozilla-kalender).
+Allow remote subscriptions: Tillåt fjärrabbonemang
+categories-enabled-help: Aktiverar stöd för aktivitetskategorier.
+Categories enabled: Kategorier aktiverat
+allow-external-users-help: Anger om en icke-kalenderanvändare kan läggas till en aktivitet. Detta tillåter icke-kalenderanvändare att listas som aktivitetsdeltagare.
+Allow external users: Tillåt externa användare
+external-can-receive-notification-help: När externa användare tillåts och e-postanvändning tillåts, kan externa användare få e-postmeddelanden när händelse läggs till, uppdateras eller tas bort (om den externa användarens e-postadress har angetts).
+External users can receive email notifications: Externa användare kan få e-postmeddelanden
+external-can-receive-reminder-help: När externa användare tillåts och e-postanvändning tillåts kan externa användare få e-postpåminnelser (om den externa användarens e-postadress har angetts).
+External users can receive email reminders: Externa användare kan få e-postpåminnelser
+email-enabled-help: Slå på eller av all sändning av e-post för meddelanden och påminnelser. Sätt till "nej" om din server inte är rätt konfigurerad för att skicka e-post.
+Email enabled: E-post tillåts
+email-default-sender: Anger den e-postadress som anges som avsändare när påminnelser skickas ut.
+Default sender address: Normal avsändaradress
+Default user settings: Normala användarinställningar
+email-event-reminders-help: Anger om programmet ska skicka påminnelser via e-post
+Event reminders: Aktivitestpåminnelser
+email-event-added: Skicka e-post vid tillägg av aktivitet
+Events added to my calendar: Aktivtetet som lagts till i min kalender
+email-event-updated: Skicka e-post när aktivitet uppdaterats
+Events updated on my calendar: Aktivitet som uppdaterats i min kalender
+email-event-deleted: Skicka e-post vid borttagning av aktivitet
+Events removed from my calendar: Aktivitetet som raderats från min kalender
+email-event-rejected: Skicka e-post när aktivitetet inte har accepterats
+Event rejected by participant: Aktiviteter som avböjts av deltagare
+Allow user to customize colors: Tillåt användare att anpassa färgerna
+Document background: Dokumentbakgrundens färg
+Select: Välj
+Document title: Dokumenttitelns färg
+Document text: Dokumenttextens färg
+Table grid color: Tabellstreckens färg
+Table header background: Tabellhuvudets bakgrundsfärg
+Table header text: Tabellhuvudtextens färg
+Table cell background: Tabellcells bakgrundsfärg
+Table cell background for current day: Tabellcells bakgrundsfärg för idag
+Table cell background for weekends: Tabellcells bakgrundsfärg för veckoslut
+Event popup background: Aktivitetspopp-upps bakgrundsfärg
+Event popup text: Aktivitetspopp-upps textfärg
+
+
+###############################################
+# Page: activity_log.php
+#
+Activity Log: Aktivitetslogg
+User: Användare
+Calendar: Kalender
+Date: Datum
+Time: Klockan
+Event: Aktivitet
+Action: Åtgärd
+Event created: Aktivitet skapad
+Event approved: Aktivitet godkänd
+Event rejected: Aktivitet avböjd
+Event updated: Aktivitet uppdaterad
+Event deleted: Aktivitet borttagen
+Notification sent: Meddelande skickat
+Reminder sent: Påminnelse skickad
+Database error: Fel i databasen
+#
+# << MISSING >>
+# Events:
+
+
+###############################################
+# Page: add_entry.php
+#
+Invalid entry id: Ogiltig händelse-ID
+This is a private event and may not be added to your calendar.: Detta är en privat aktivitet och bör inte läggas till i din kalender.
+Error adding event: Fel vid inläggning av ny aktivitet
+
+
+###############################################
+# Page: admin_handler.php
+#
+Error: Fel
+The following error occurred: Följande fel uppstod
+
+
+###############################################
+# Page: approve_entry.php
+#
+Error approving event: Ett fel uppstod när händelsen skulle godkännas
+
+
+###############################################
+# Page: category.php
+#
+Categories: Kategorier
+Add: Lägg till
+Category Name: Kategorinamn
+Global: Global
+Delete: Radera
+Are you sure you want to delete this entry?: Är du säker på att du vill ta bort denna aktivitet?
+Add New Category: Lägg till ny kategori
+
+
+###############################################
+# Page: del_entry.php
+#
+Hello: Hej
+An appointment has been canceled for you by: Ett möte har inställts för dig av
+The subject was: Ämnet var
+Notification: Påminnelse
+
+
+###############################################
+# Page: edit_layer.php
+#
+Edit Layer: Redigera lager
+Add Layer: Lägg till lager
+Source: Ägare
+Color: Färg
+Duplicates: Dubletter
+Show layer events that are the same as your own: Visa lagerhändelser som är samma som dina egna
+Are you sure you want to delete this layer?: Är du säker på att du vill ta bort detta lager?
+Delete layer: Ta bort lager
+
+
+###############################################
+# Page: edit_layer_handler.php
+#
+You cannot create a layer for yourself: Du kan inte skapa ett lager åt dig själv
+You can only create one layer for each user: Du kan bara skapa ett lager för varje användare
+
+
+###############################################
+# Page: edit_user_handler.php
+#
+Deleting users not supported: Borttagning av användare stöds inte
+The passwords were not identical: Lösenorden stämmer inte överens med varandra
+You have not entered a password: Du har inte angivit något lösenord
+#
+# << MISSING >>
+# Changes successfully saved:
+
+
+###############################################
+# Page: export.php
+#
+Export format: Exportformat
+Palm Pilot: Palm Pilot
+#
+# << MISSING >>
+# Include all layers:
+Export all dates: Exportera allt
+Start date: Startdatum
+End date: Slutdatum
+Modified since: Ändrad efter
+Export: Export
+
+
+###############################################
+# Page: export_handler.php
+#
+export format not defined or incorrect: exportformat inte angett eller felaktigt
+
+
+###############################################
+# Page: group_edit.php
+#
+Unnamed Group: Icke namngiven grupp
+Add Group: Lägg till grupp
+Edit Group: Redigera grupp
+Group name: Gruppnamn
+Updated: Uppdaterad
+Created by: Skapad av
+Users: Användare
+
+
+###############################################
+# Page: group_edit_handler.php
+#
+You must specify a group name: Du måste ange ett gruppnamn
+
+
+###############################################
+# Page: groups.php
+#
+Add New Group: Lägg till ny grupp
+
+
+###############################################
+# Page: pref.php
+#
+Preferences: Inställningar
+Save Preferences: Spara inställningarna
+to modify the preferences for the Public Access calendar: för att ändra inställningar för den offentliga kalendern
+tz-help: Anger hur många timmar att justera tiden från server-tid till lokal tid.
+Timezone Offset: Lokal tid
+Add N hours to: Lägg till N timmar till
+Subtract N hours from: Dra bort N timmar från
+same as: samma som
+server time: servertid
+Default Category: Standardkategori
+When I am the boss: När jag är boss
+Email me event notification: Skicka mig e-post vid händelsemeddelande
+I want to approve events: Jag vill godkänna aktiviteter
+Subscribe/Publish: Abbonera/Publicera
+allow-remote-subscriptions-help: Anger om fjärranvändare kan abbonera på din kalender och tillåta dem se aktiviteter i din iCal-aktiverade applikation (såsom Apples iCal eller Mozilla kalender).
+remote-subscriptions-url-help: Visar den URL som användare bör använda för att abbonera på din kalender.
+URL: URL
+Sun: Sön
+Mon: Mån
+Tue: Tis
+Wed: Ons
+Thu: Tor
+Fri: Fre
+Sat: Lör
+
+
+###############################################
+# Page: help_bug.php
+#
+Report Bug: Rapportera bug
+
+
+###############################################
+# Page: help_edit_entry.php
+#
+Adding/Editing Calendar Entries: Lägg till/ändra aktivitet
+Brief Description: Kort beskrivning
+brief-description-help: Här skall det stå en kort beskrivning av aktiviteten/händelsen - den i översiktskalendern.
+Full Description: Fullständig beskrivning
+full-description-help: Här kan du skriva en komplett beskrivning av aktiviteten.
+date-help: Anger datum för aktiviteten.
+time-help: Anger tidpunkt för aktiviteten.<br /><i>Det här fältet behöver inte vara ifyllt.</i>
+duration-help: I detta fält anger du aktivitetens varaktighet <br /><i>Det här fältet behöver inte vara ifyllt.</i>
+end-time-help: Anger den tid aktiviteten förväntas sluta.
+Priority: Prioritet
+priority-help: Ange aktivitetens prioritet.
+Access: Tillgänglighet
+access-help: Ange om händelsen/aktiviteten skall kunna ses av andra eller om den skall vara privat.
+Participants: Deltagare
+participants-help: Visa deltagare för denna händelse.
+Repeat Type: Upprepningsfrekvens
+repeat-type-help: Hur ofta skall aktiviteten upprepas.
+Repeat End Date: Upprepningens slutdatum
+repeat-end-date-help: Specificera slutdatum för upprepningen av denna aktivitet.
+Repeat Day: Upprepningsdagar
+repeat-day-help: Vilka veckodagar skall aktiviteten upprepas på
+Frequency: Upprepningens regelbundenhet
+repeat-frequency-help: Hur ofta skall aktiviteten upprepas? Talet 1 visar att det skall ske varje gång, 2 varannan o.s.v...
+
+
+###############################################
+# Page: help_index.php
+#
+Help Index: Hjälpöversikt
+Layers: Lager
+Import: Import
+
+
+###############################################
+# Page: help_layers.php
+#
+Layers are useful for displaying other users' events in your own calendar.  You can specifiy the user and the color the events will be displayed in.: Lager är användbara för att visa andra användares aktiviteter i din egen kalender. Du kan ange användare och den färg aktiviteterna ska visas i.
+Add/Edit/Delete: Lägg till/Redigera/Ta bort
+Clicking the Edit Layers link in the admin section at the bottom of the page will allow you to add/edit/delete layers.: Att klika på Redigera lager-länken i administrationsdelen i botten på sidan tillåter dig att lägga till/redigera/ta bort lager.
+Specifies the user that you would like to see displayed in your calendar.: Anger den användare du vill se visad i din kalender.
+The text color of the new layer that will be displayed in your calendar.: Textfärgen för det nya lagret som kommer att visas i din kalender.
+If checked, events that are duplicates of your events will be shown.: Om markerat kommer aktiviteter som är dubletter till dina aktiviteter att visas.
+Disabling: Stäng av
+Press the Disable Layers link in the admin section at the bottom of the page to turn off layers.: Tryck på stäng av lager-länkar i administrationsdelen i slutet på sidan för att stanga av lager.
+Enabling: Tillåt
+Press the Enable Layers link in the admin section at the bottom of the page to turn on layers.: Tryck på Tillåt lager-länken i administrationsdelen i botten på sidan för att slå på lagervisning.
+
+
+###############################################
+# Page: help_admin.php
+#
+Display days with events in bold in year view: Visa dagar med aktiviteter i fetstil i årsvyn
+Nonuser: Icke-användares kalendrar
+Reports: Rapporter
+
+
+###############################################
+# Page: layers.php
+#
+to modify the layers settings for the: för att ändra lagerinställningarna för
+Layers are currently: Lager är för närvarande
+Enabled: Aktiverat
+Disabled: Inaktiverat
+Disable Layers: Inaktivera lager
+Enable Layers: Aktivera lager
+Layer: Lager
+Edit layer: Redigera lager
+Add layer: Lägg till lager
+
+
+###############################################
+# Page: list_unapproved.php
+#
+View this entry: Visa aktivitet
+Approve/Confirm: Godkänn/bekräfta
+Approve this entry?: Godkänn händelsen?
+Reject: Avböj
+Reject this entry?: Avböj denna händelse?
+No unapproved events for: Inga icke godkända aktiviteter för
+Unapproved Events: Icke godkända aktiviteter
+
+
+###############################################
+# Page: view_entry.php
+#
+Low: Låg
+Medium: Mellan
+High: Hög
+every: varje
+2nd: 2:a
+3rd: 3:de
+4th: 4:de
+5th: 5:e
+1st: 1:a
+last: sista
+by date: efter bestämt datum
+Confidential: Privat
+Description: Beskrivning
+Status: Status
+Waiting for approval: Väntar på godkännande
+Deleted: Borttagen
+Rejected: Avböjd
+All day event: Heldagsaktivitet
+Public: Offentlig
+Category: Kategori
+days: dagar
+#
+# << MISSING >>
+# day:
+hours: timmar
+#
+# << MISSING >>
+# minute:
+before event: före händelse
+External User: Extern användare
+Approve/Confirm entry: Godkänn/bekräfta händelsen
+Reject entry: Avböj händelsen
+Set category: Ange kategori
+Edit repeating entry for all dates: Redigera återkommande händelse för alla datum
+Edit entry for this date: Redigera händelse för detta datum
+Delete repeating event for all dates: Ta bort återkommande händelse för alla datum
+This will delete this entry for all users.: Det här kommer att radera denna händelse för alla användare.
+Delete entry only for this date: Ta bort händelse för detta datum
+Edit entry: Ändra händelse
+Delete entry: Radera händelse
+Copy entry: Kopiera händelse
+This will delete the entry from your calendar.: Detta kommer att ta bort aktiviteten från din kalender.
+Add to My Calendar: Lägg till i min kalender
+Do you want to add this entry to your calendar?: Vill du lägga till denna aktivitet i kalendern?
+This will add the entry to your calendar.: Detta kommer att lägga till aktiviteten i din kalender.
+Email all participants: E-posta alla deltagare
+Show activity log: Visa aktivitetslogg
+Hide activity log: Dölj aktivitetetslogg
+Export this entry to: Exportera denna händelse till
+
+
+###############################################
+# Page: reject_entry.php
+#
+An appointment has been rejected by: Ett möte har inte godkänts av
+The description is: Beskrivningen är
+Title: Webbkalender
+
+
+###############################################
+# Page: search.php
+#
+Search: Sök
+Keywords: Sökord
+Advanced Search: Avancerad sökning
+
+
+###############################################
+# Page: search_handler.php
+#
+You must enter one or more search keywords: Du måste ange ett eller flera sökord
+Search Results: Sökresultat
+match found: träff hittad
+matches found: träffar hittade
+No matches found: Inga träffar hittades
+
+
+###############################################
+# Page: select_user.php
+#
+View Another User's Calendar: Titta på en annan användares kalender
+Go: Gå till
+
+
+###############################################
+# Page: users.php
+#
+Account: Konto
+Add New User: Lägg till en ny användare
+denotes administrative user: indikerar administratör
+
+
+###############################################
+# Page: usersel.php
+#
+All: Alla
+None: Ingen
+Reset: Ångra
+Remove: Ta bort
+Ok: OK
+Cancel: Avbryt
+
+
+###############################################
+# Page: import.php
+#
+#
+# << MISSING >>
+# Import format:
+Exclude private records: Ta inte med privata poster
+Overwrite Prior Import: Skriv över tidigare import
+
+
+###############################################
+# Page: login.php
+#
+Invalid login: Felaktig inloggning
+You must enter a login and password: Ange användarnamn och lösenord
+Username: Användarnamn
+Password: Lösenord
+Save login via cookies so I don't have to login next time: Kom ihåg användarnamnet till nästa gång (cookie)
+Login: Logga in
+Access public calendar: Tillträde till offentlig kalender
+cookies-note: <strong>OBS:</strong> Programmet kräver att din webbläsare tillåter cookies, om inte - ändra dina inställningar i webbläsaren.
+
+
+###############################################
+# Page: views.php
+#
+Views: Visningar
+Add New View: Lägg till ny visning
+
+
+###############################################
+# Page: views_edit.php
+#
+Unnamed View: Icke namngiven visning
+Add View: Lägg till visning
+Edit View: Redigera visning
+View Name: Visningsnamn
+View Type: Visningstyp
+Week (Users horizontal): Vecka (Användare horisontellt)
+Week (Users vertical): Vecka (Användare vertikalt)
+Week (Timebar): Vecka (Tidsaxel)
+#
+# << MISSING >>
+# Month (Timebar):
+Month (side by side): Månad (sida vid sida)
+Month (on same calendar): Månad (på samma kalender)
+#
+# << MISSING >>
+# preview:
+
+
+###############################################
+# Page: nonusers.php
+#
+NONUSER_PREFIX not set: NINUSER_PREFIX har inte angetts i CONFIG.PHP
+Add New NonUser Calendar: Lägg till ny icke-användare kalender
+
+
+###############################################
+# Page: nonusers_handler.php
+#
+Calendar ID: Kalender ID
+#
+# << MISSING >>
+# word characters only:
+# English text: can only contain word characters (a-zA-Z_0-9)
+#
+
+
+###############################################
+# Page: help_pref.php
+#
+default-category-help: Anger den kategori en ny aktivitet normalt ska tillhöra
+
+
+###############################################
+# Page: report.php
+#
+Untimed event: Icke tidsbestämd aktivitet
+Private: Privat
+Approved: Godkänd
+Unknown: Okänd
+to manage reports for the Public Access calendar: för att hantera rapporter för offentlig kalender
+Add new report: Lägg till ny rapport
+Invalid report id: Ej godkänt rapport-ID
+Manage Reports: Hantera rapporter
+
+
+###############################################
+# Page: views_edit_handler.php
+#
+You must specify a view name: Du måste ange ett visningsnamn
+
+
+###############################################
+# Page: week_details.php
+#
+New Entry: Ny händelse
+am: f.m.
+pm: e.m.
+
+
+###############################################
+# Page: import_handler.php
+#
+Import Results: Importresultat
+Events successfully imported: Händelseimport lyckades
+Events from prior import marked as deleted: Händelser från tidigare import markerade som borttagna
+Conflicting events: Händelsekonflikter
+Errors: Fel
+There was an error parsing the import file or no events were returned: Det var ett fel vid analysen av importfilen eller inga händelser returnerades
+The import file contained no data: Importfilen innehöll inga data
+The following conflicts with the suggested time: Följande händelseer krockar med vald tidpunkt
+Unnamed Event: händelse utan namn
+Scheduling Conflict: Planeringskonflikt
+conflicts with the following existing calendar entries: krockar med tidigare händelser i kalendern
+Event Imported: Händelse importerad
+
+
+###############################################
+# Page: edit_entry.php
+#
+Edit Entry: Ändra aktivitet
+Add Entry: Lägg till aktivitet
+#
+# << MISSING >>
+# Details:
+#
+# << MISSING >>
+# Scheduling:
+#
+# << MISSING >>
+# Repeat:
+category-help: Anger aktivitetens kategori
+Timed event: Tidsbestämd aktivitet
+external-participants-help: Anger en lista på deltagare till händelsen som inte är kalenderanvändare. Användarna bör listas en per rad och kan innehålla e-postadress. Om en e-postadress angetts, är användaren berättigad att få meddelande och påminnelser.
+External Participants: Externa deltagare
+Daily: Dagligen
+Weekly: Veckovis
+Monthly: Månatlig
+by day: efter bestämd dag
+by day (from end): efter bestämd dag (från slutet)
+Yearly: Årlig
+Use end date: Använd slutdatum
+Tuesday: Tisdag
+Wednesday: Onsdag
+Thursday: Torsdag
+Friday: Fredag
+Saturday: Lördag
+You are not authorized to edit this entry: Du har inte lov att redigera denna händelse
+
+
+###############################################
+# Page: edit_report.php
+#
+Tomorrow: I morgon
+Today: I dag
+Yesterday: I går
+Day before yesterday: I förrgår
+Next week: Nästa vecka
+This week: Denna vecka
+Last week: Förra veckan
+Week before last: Förrförra veckan
+Next week and week after: Nästa vecka och följande
+This week and next week: Denna vecka och nästa
+Last week and this week: Föregående vecka och denna vecka
+Last two weeks: Föregående två veckor
+Next month: Nästa månad
+This month: Denna månad
+Last month: Föregående månad
+Month before last: Förrförra månaden
+Next year: Nästa år
+This year: Detta år
+Last year: Föregående år
+Year before last: Förrförra året
+Unnamed Report: Icke namngiven rapport
+Add Report: Lägg till rapport
+Edit Report: Redigera rapport
+Report name: Rapportnamn
+Current User: Aktuell Användare
+Include link in trailer: Inkludera länk i trailer
+Include standard header/trailer: Lägg till standard header/trailer
+Date range: Datumområde
+Include previous/next links: Inkludera föregående/nästkommande länkar
+Include empty dates: Inkludera tomma datum
+Template variables: Mallvariabler
+Page template: Sidmall
+Day template: Dagmall
+Event template: Händelsemall
+Are you sure you want to delete this report?: Är du säker på att du vill ta bort denna rapport?
+
+
+###############################################
+# Page: assistant_edit.php
+#
+Assistants: Medhjälpare
+Your assistants: Dina medhjälpare
+
+
+###############################################
+# Page: adminhome.php
+#
+Delete Events: Ta bort aktivitet
+Public Preferences: Offentliga inställningar
+Unapproved Public Events: Icke godkända offentliga aktiviteter
+Administrative Tools: Administrativa verktyg
+
+
+###############################################
+# Page: purge.php
+#
+Purging events for: Rensa bort aktiviteter för
+Finished: Klar
+Delete all events before: Ta bort alla aktiviteter före
+Check box to delete <b>ALL</b> events for a user: Markera boxen för att ta bort <b>ALLA</b> aktiviteter för användare
+Are you sure you want to delete events for: Är du säker på att du vill ta bort aktiviteter för
+Records deleted from: Poster borttagna från
+
+
+###############################################
+# Page: set_entry_cat.php
+#
+You have not added any categories: Du har inte lagt till några kategorier
+Set Category: Ange kategori
+
+
+###############################################
+# Page: help_import.php
+#
+Palm Desktop: Palm desktop
+This form will allow you to import entries from the Palm Desktop Datebook.: Detta formulär tillåter dig att importera aktiviteter från Palm Desktop Datebook.
+It should be located in your Palm directory in <tt>datebook/datebook.dat</tt> in a subdirectory named by your username.: Det bör vara placerat i din Palm-mapp <tt>"datebook/datebook.dat"</tt> i en undermapp benämnd med ditt användarnamn.
+The following entries will not be imported: Följande händelser kommer inte att importeras
+Entries older than the current date: Händelser äldre än dagens datum
+Entries created in the Palm Desktop that have not been HotSync'd: Händelser skapade i Palm Desktop som inte har blivit "HotSynkroniserade"
+Anything imported from Palm will be overwritten during the next import (unless the event date has passed).: Allting som importerats från Palm kommer att skrivas över vid nästa import (om inte händelsedatumet har passerats).
+Therefore, updates should be made in the Palm Desktop.: Därför bör uppdateringar göras i Palm Desktop.
+vCal: vCal
+This form will import vCalendar (.vcs) 1.0 events: Detta formulär kommer att importera vCalendar (.vcs) 1.0 aktiviteter
+The following formats have been tested: Följande format har testats
+Palm Desktop 4: Palm desktop 4
+Lotus Organizer 6: Lotus Organizer 6
+Microsoft Outlook 2002: Microsoft Outlook 2002
+iCalendar: iCalendar
+This form will import iCalendar (.ics) events: Detta formulär kommer att importera iCalendar (.ics) aktiviteter
+Enabling <b>Overwrite Prior Import</b> will cause events imported previously that used the same UID as an event from the new import file to be marked as deleted.  This should allow an updated iCalendar file to be imported without creating duplicates.: Genom att sätta <b>Skriv över föregående import</b> kommer föregående importerade händelser som använde samma UID som en händelse från den nya importfilen att markeras som borttagegn. Detta tillåter en uppdaterad iCalenderfil att importeras utan att dubbletter skapas.
+
+
+###############################################
+# Page: edit_report_handler.php
+#
+Variable N not found: Variabel N hittades inte
+
+
+###############################################
+# Page: edit_entry_handler.php
+#
+A new appointment has been made for you by: En ny aktivitet har skapats åt dig av
+An appointment has been updated by: En aktivitet har uppdaterats av
+The subject is: Ämnet är 
+Please look on: Var vänlig se på
+to accept or reject this appointment: för att acceptera/avböja denna aktivitet
+to view this appointment: för att se denna aktivitet
+Your suggested time of: Din föreslagna tiden för
+
+
+###############################################
+# Page: edit_user.php
+#
+Edit User: Redigera användare
+Add User: Ny användare
+First Name: Förnamn
+Last Name: Efternamn
+E-mail address: E-postadress
+again: igen
+Disabled for demo: Avstängd i demoversionen
+#
+# << MISSING >>
+# Are you sure you want to delete this user?:
+Change Password: Ändra lösenord
+New Password: Nytt lösenord
+Set Password: Byt lösenord
+
+
+###############################################
+# Page: edit_template.php
+#
+Edit Custom Script/Stylesheet: Redigera eget skript/stilmall
+Edit Custom Header: Redigera egen Header
+Edit Custom Trailer: Redigera egen Trailer
+
+
+###############################################
+# Page: includes/trailer.php
+#
+Go to: Gå till
+My Calendar: Min kalender
+Back to My Calendar: Min kalender
+Another User's Calendar: Annans kalender
+Add New Entry: Ny händelse
+Logout: Logga ut
+Manage calendar of: Hantera kalender åt
+
+
+###############################################
+# Page: includes/user.php
+#
+#
+# << MISSING >>
+# incorrect password:
+#
+# << MISSING >>
+# no such user:
+Invalid user login: Felaktigt användarnamn
+
+
+###############################################
+# Page: includes/site_extras.php
+#
+Send Reminder: Skicka påminnelse
+
+
+###############################################
+# Page: includes/config.php
+#
+English: Engelska
+Basque: Baskiska
+Bulgarian: Bulgariska
+Catalan: Katalanska
+Chinese (Traditonal/Big5): Kinesiska (Traditonell/Big5)
+Chinese (Simplified/GB2312): Kinesiska (Förenklad/GB2312)
+Czech: Tjeckiska
+Danish: Danska
+Dutch: Holländska
+Estonian: Lettiska
+Finnish: Finska
+French: Franska
+Galician: Galiciska
+German: Tyska
+Holo (Taiwanese): Holo (Taiwanesiska)
+Hungarian: Ungerska
+Icelandic: Isländska
+Italian: Italienska
+Japanese: Japanska
+Korean: Koreanska
+Norwegian: Norska
+Polish: Polska
+Portuguese: Portugisiska
+Portuguese/Brazil: Portugisisk-Brasilianska
+Russian: Ryska
+Spanish: Spanska
+Swedish: Svenska
+Turkish: Turkiska
+
+
+###############################################
+# Page: includes/functions.php
+#
+This event is confidential: Denna aktivitet är privat
+exceeds limit of XXX events per day: Överskrider begränsningen på XXX händelser per dag
+You have XXX unapproved events: Du har XXX icke godkända händelser
+January: Januari
+February: Februari
+March: Mars
+April: April
+May_: Maj
+June: Juni
+July: Juli
+August: Augusti
+September: September
+October: Oktober
+November: November
+Jan: Jan
+Feb: Feb
+Mar: Mar
+Apr: Apr
+May: Maj
+Jun: Jun
+Jul: Jul
+Aug: Aug
+Sep: Sep
+Oct: Okt
+Nov: Nov
+Dec: Dec
+
+
+###############################################
+# Page: includes/js/admin.php
+#
+Server URL is required: Server-URL krävs
+Server URL must end with '/': Server-URL måste slute med '/'
+Invalid work hours: Ogiltig arbetstid
+Invalid color for document background: Ogiltig bakgrundsfärg
+Invalid color for document title: Ogiltig färg för dokumenttiteln
+Invalid color for table cell background: Ogiltig färg för tabellcellsbakgrunden
+Invalid color for table grid: Ogiltig färg för tabellstrecken
+Invalid color for table header background: Ogiltig färg för tabellhuvudets bakgrund
+Invalid color for table text background: Ogiltig färg för tabelltextens bakgrund
+Invalid color for event popup background: Ogiltig färg för händelsepopp-uppens bakgrund
+Invalid color for event popup text: Ogiltig färg för händelsepopp-uppens text
+Invalid color for table cell background for today: Ogiltig färg för dagens tabellcellsbakgrund
+Color format should be '#RRGGBB': Färgen skall skrivas som '#RRGGBB'
+
+
+###############################################
+# Page: includes/js/edit_entry.php
+#
+You have not entered a Brief Description: Da har inte angivit någon kort beskrivning
+You have not entered a valid time of day: Du har inte angivit en giltig tid
+The time you have entered begins before your preferred work hours.  Is this correct?: Tidpunkten du har angivit ligger före din angivna arbetstid. Är detta korrekt?
+
+
+###############################################
+# Page: includes/js/edit_layer.php
+#
+Invalid color: Ogiltig färg
+
+
+###############################################
+# Page: tools/send_reminders.php
+#
+This is a reminder for the event detailed below.: Detta är en påminnelse angående följande aktivitet
+Reminder: Påminnelse

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Turkish.txt
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Turkish.txt	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Turkish.txt	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,1964 @@
+# Use this as a starting point to translate this application into
+# another language.  The format is "English text: translated text"
+# There cannot be a ":" in the English text.
+#
+# Translator: Atilla Kazanci <support at dig-it-berlin.de>,
+# Last update: 29 March 2001
+# Translation last updated on 03-10-2004
+
+
+###############################################
+# Specify a charset (will be sent within meta tag for each page)
+#
+charset: iso-8859-9
+
+
+
+###############################################
+# Page: admin.php
+#
+#
+# << MISSING >>
+# System Settings:
+You are not authorized: Hak sahibi degilsiniz
+#
+# << MISSING >>
+# Note:
+#
+# << MISSING >>
+# Your user preferences:
+#
+# << MISSING >>
+# may be affecting the appearance of this page.:
+#
+# << MISSING >>
+# Click here:
+#
+# << MISSING >>
+# to not use your user preferences when viewing this page:
+#
+# << MISSING >>
+# are being ignored while viewing this page.:
+#
+# << MISSING >>
+# to load your user preferences when viewing this page:
+Save: Kayit
+Help: Yardim
+Settings: Ayar
+#
+# << MISSING >>
+# app-name-help:
+# English text: Specifies the name of the application that will appear in the browser title bar for all pages and on the login page.  The value you specify here will be looked up in the translations file allowing you to provide different titles for different languages.
+#
+#
+# << MISSING >>
+# Application Name:
+#
+# << MISSING >>
+# server-url-help:
+# English text: Specifies the base URL for the application.  This will be included when sending out email reminders and notifications.
+#
+#
+# << MISSING >>
+# Server URL:
+#
+# << MISSING >>
+# language-help:
+# English text: Specifies which language to use.
+#
+Language: Lisan
+#
+# << MISSING >>
+# Your browser default language is:
+#
+# << MISSING >>
+# fonts-help:
+# English text: Specifies a list of system fonts to use (such as "Arial, Helvetica")
+#
+#
+# << MISSING >>
+# Fonts:
+#
+# << MISSING >>
+# custom-script-help:
+# English text: Allows entry of custom Javascript or stylesheet text that will be inserted into the HTML "head" section of every page.
+#
+#
+# << MISSING >>
+# Custom script/stylesheet:
+Yes: Evet
+No: Hayir
+#
+# << MISSING >>
+# Edit:
+#
+# << MISSING >>
+# custom-header-help:
+# English text: Allows a custom HTML snippet to be included in the top of every page.
+#
+#
+# << MISSING >>
+# Custom header:
+#
+# << MISSING >>
+# custom-trailer-help:
+# English text: Allows a custom HTML snippet to be included at the end of every page.
+#
+#
+# << MISSING >>
+# Custom trailer:
+#
+# << MISSING >>
+# preferred-view-help:
+# English text: Specifies the default view (Day, Week, Month, or Year).
+#
+Preferred view: Asil kullanim/gösteri
+Day: Gün
+Week: Hafta
+Month: Ay
+Year: Sene
+#
+# << MISSING >>
+# display-weekends-help:
+# English text: Include weekends when viewing a week.
+#
+#
+# << MISSING >>
+# Display weekends in week view:
+#
+# << MISSING >>
+# yearly-shows-events-help:
+# English text: On the yearly view, display days that contain events in a bold font.
+#
+#
+# << MISSING >>
+# Display days with events in bold in year view:
+#
+# << MISSING >>
+# display-desc-print-day-help:
+# English text: Include event descriptions in printer-friendly version of day view.
+#
+#
+# << MISSING >>
+# Display description in printer day view:
+#
+# << MISSING >>
+# date-format-help:
+# English text: Specifies the preferred date format.
+#
+#
+# << MISSING >>
+# Date format:
+December: Aralik
+time-format-help: Hangi saat özelligi kullanildigini gösterir: <br /><i>12-saatlik:</i> Saati 3am, 8:30pm vs. diye gösterir.  <br /><i>24-saatlik:</i> Saati 3.00, 20.30 vs. diye gösterir.
+Time format: Saat
+12 hour: 12-saatlik
+24 hour: 24-saatlik
+#
+# << MISSING >>
+# time-interval-help:
+# English text: Specifies how long the time blocks in the week view and day view will be.
+#
+#
+# << MISSING >>
+# Time interval:
+#
+# << MISSING >>
+# hour:
+minutes: Dakika
+#
+# << MISSING >>
+# auto-refresh-help:
+# English text: When enabled, the day view, week view, month view, and list aunapproved pages will all automatically refresh themselves periodically.
+#
+#
+# << MISSING >>
+# Auto-refresh calendars:
+#
+# << MISSING >>
+# auto-refresh-time-help:
+# English text: If Auto-refresh is enabled, this specifies the time between each refresh.
+#
+#
+# << MISSING >>
+# Auto-refresh time:
+#
+# << MISSING >>
+# require-approvals-help:
+# English text: When enabled, a user must approve an event before it is displayed on their calendar (unless Display unapproved is enabled).  Note setting this to "No" will not turn off approvals for the Public Access calendar (if the Public Access calendar is enabled).
+#
+#
+# << MISSING >>
+# Require event approvals:
+display-unapproved-help: Onaylanmamis Terminler Takviminizde görülsünmü.<br /> Eger "Evet", Onaylanmamis Termin'ler baska bir renkte olur.<br /> Eger "Hayir", onaylanmamis Termin'ler onaylandiktan sonra Takvimde görünebilir. 
+Display unapproved: Onaylanmamis Termin'leri gör
+display-week-number-help: Kacinci Hafta oldugunu (1-52) Aylik ve Haftalik görünümlerinde gösterir.
+Display week number: Kacinci Hafta
+#
+# << MISSING >>
+# display-week-starts-on:
+# English text: Specifies whether the week starts on Sunday or Monday.  If Monday is specified, then week numbers will be ISO week numbers.
+#
+Week starts on: Hafta baslangici
+Sunday: Pazar
+Monday: Pazartesi
+work-hours-help: Zaman bölüntüsü Günlük görünüm icin.
+Work hours: Calisma zamani
+From: Kimden
+to: Kime
+#
+# << MISSING >>
+# disable-priority-field-help:
+# English text: Selecting "Yes" will remove the "Priority" field from event information pages, providing a simpler interface for novices.
+#
+#
+# << MISSING >>
+# Disable Priority field:
+#
+# << MISSING >>
+# disable-access-field-help:
+# English text: Selecting "Yes" will remove the "Access" field from event information pages, providing a simpler interface for novices.
+#
+#
+# << MISSING >>
+# Disable Access field:
+#
+# << MISSING >>
+# disable-participants-field-help:
+# English text: Selecting "Yes" will remove the "Particpants" field from event information pages, preventing users from adding other users to their events.  If you enable this option, you may want to also disable the "Allow viewing other user's calendars" field also.
+#
+#
+# << MISSING >>
+# Disable Participants field:
+#
+# << MISSING >>
+# disable-repeating-field-help:
+# English text: Selecting "Yes" will remove the "Repeating" field when adding events.  This will provide a simpler interface for novices.
+#
+#
+# << MISSING >>
+# Disable Repeating field:
+#
+# << MISSING >>
+# popup-includes-siteextras-help:
+# English text: If enabled, allow custom event fields setup in the site_extras.php file will be displayed in event popups.
+#
+#
+# << MISSING >>
+# Display Site Extras in popup:
+#
+# << MISSING >>
+# allow-html-description-help:
+# English text: If enabled, users can enter HTML in the event description field.  If not enabled, the HTML tags will be escaped so as to appear as plain text.  Warning: Enabling this feature will allow users to reference images on other websites.
+#
+#
+# << MISSING >>
+# Allow HTML in Description:
+#
+# << MISSING >>
+# allow-view-other-help:
+# English text: Specifies whether one user may view another user's calendar.
+#
+#
+# << MISSING >>
+# Allow viewing other user's calendars:
+#
+# << MISSING >>
+# allow-public-access-help:
+# English text: When enabled, the calendar can be used as a read-only public calendar that does not require users to login.
+#
+#
+# << MISSING >>
+# Allow public access:
+#
+# << MISSING >>
+# public-access-view-others-help:
+# English text: When access the system with public access, specifies whether the user can view the calendar of another calendar user.
+#
+#
+# << MISSING >>
+# Public access can view other users:
+#
+# << MISSING >>
+# public-access-can-add-help:
+# English text: When enabled, users that access the system through Public Access will be able to add new events, but they will not show up in the calendar until an administrator approves the new event.
+#
+#
+# << MISSING >>
+# Public access can add events:
+#
+# << MISSING >>
+# public-access-add-requires-approval-help:
+# English text: Specifies whether events added via the public access account require approval before being displayed.
+#
+#
+# << MISSING >>
+# Public access new events require approval:
+#
+# << MISSING >>
+# public-access-sees-participants-help:
+# English text: If enabled, users accessing the calendar from the public account will be able to see event participants if they view details of an event.
+#
+#
+# << MISSING >>
+# Public access can view participants:
+#
+# << MISSING >>
+# allow-view-add-help:
+# English text: A '+' icon will be included in views, allowing users to quickly add events to other users' calendars.
+#
+#
+# << MISSING >>
+# Include add event link in views:
+#
+# << MISSING >>
+# allow-external-users-help:
+# English text: Specifies whether a non-calendar user can be added to an event.  This allows non-calendar users to be listed as event participants.
+#
+#
+# << MISSING >>
+# Allow external users:
+#
+# << MISSING >>
+# external-can-receive-notification-help:
+# English text: When external users are enabled and email usage is enabled, external users can receive email notifications when the event is added, updated or delete (if the external user's email address is provided).
+#
+#
+# << MISSING >>
+# External users can receive email notifications:
+#
+# << MISSING >>
+# external-can-receive-reminder-help:
+# English text: When external users are enabled and email usage is enabled, external users can receive email reminders (if the external user's email address is provided).
+#
+#
+# << MISSING >>
+# External users can receive email reminders:
+#
+# << MISSING >>
+# remember-last-login-help:
+# English text: When enabled, the user's login will be filled in for them on the login page (but not the password), and the user's preferences will be loaded (including their preferred colors and language selection).
+#
+#
+# << MISSING >>
+# Remember last login:
+#
+# << MISSING >>
+# conflict-check-help:
+# English text: Check for event conflicts (two events scheduled for the same time for the same person).  If you set this to "Yes", you will still be able to schedule two events at the same time after confirming a warning. If you set this to "No", no checking for conflicts will be done.  You probably want to set this to "Yes", so conflict checking occurs.
+#
+#
+# << MISSING >>
+# Check for event conflicts:
+#
+# << MISSING >>
+# conflict-months-help:
+# English text: If conflict checking is in place ("Check for event conflicts" is set to "No"), this specifies how many months into the future we should check for conflicts.  If you find adding events is taking a long time to process, reduce this number.
+#
+#
+# << MISSING >>
+# Conflict checking months:
+#
+# << MISSING >>
+# conflict-check-override-help:
+# English text: Allows users to override event conflicts and schedule two or more events for the same time.
+#
+#
+# << MISSING >>
+# Allow users to override conflicts:
+#
+# << MISSING >>
+# limit-appts-help:
+# English text: Allows the system administrator to set a system-wide limit on the number of appointments a single user can have on any single day.
+#
+#
+# << MISSING >>
+# Limit number of timed events per day:
+#
+# << MISSING >>
+# limit-appts-number-help:
+# English text: Specifies the maximum number of timed events a user can have in a single day.
+#
+#
+# << MISSING >>
+# Maximum timed events per day:
+#
+# << MISSING >>
+# Plugins:
+#
+# << MISSING >>
+# plugins-enabled-help:
+# English text: Enable plugin applications.
+#
+#
+# << MISSING >>
+# Enable Plugins:
+#
+# << MISSING >>
+# plugins-sort-key-help:
+# English text: Specifies a sort key for the plugin.  This allows the plugins to appear in a specific order.
+#
+#
+# << MISSING >>
+# Plugin:
+#
+# << MISSING >>
+# Groups:
+#
+# << MISSING >>
+# groups-enabled-help:
+# English text: Enables group support, allowing users to select users by groups.
+#
+#
+# << MISSING >>
+# Groups enabled:
+#
+# << MISSING >>
+# user-sees-his-group-help:
+# English text: If enabled, users will not see calendar users that are not in at least one of their groups.
+#
+#
+# << MISSING >>
+# User sees only his groups:
+#
+# << MISSING >>
+# Categories:
+#
+# << MISSING >>
+# categories-enabled-help:
+# English text: Enables support for event categories.
+#
+#
+# << MISSING >>
+# Categories enabled:
+#
+# << MISSING >>
+# Nonuser:
+# English text: Nonuser Calendars
+#
+#
+# << MISSING >>
+# nonuser-enabled-help:
+# English text: If enabled, admins will have the option to add nonuser calendars
+#
+#
+# << MISSING >>
+# Nonuser enabled:
+# English text: Nonuser Calendars Enabled
+#
+#
+# << MISSING >>
+# nonuser-list-help:
+# English text: Where to display the nonuser calendars in the participant list
+#
+#
+# << MISSING >>
+# Nonuser list:
+# English text: Display in participants list at
+#
+#
+# << MISSING >>
+# Top:
+#
+# << MISSING >>
+# Bottom:
+#
+# << MISSING >>
+# Reports:
+#
+# << MISSING >>
+# reports-enabled-help:
+# English text: If enabled, users will see a "Reports" section at the bottom of each page and will be allowed to create custom reports.  Additionally, admin users can create global reports that will appear at the bottom of all users' pages.
+#
+#
+# << MISSING >>
+# Reports enabled:
+#
+# << MISSING >>
+# Subscribe/Publish:
+#
+# << MISSING >>
+# subscriptions-enabled-help:
+# English text: Specifies if remote users can subscribe to a WebCalendar user's calendar, allowing them to see the WebCalendar user's events in their iCal-enabled application (such as Apple's iCal or Mozilla Calendar).
+#
+#
+# << MISSING >>
+# Allow remote subscriptions:
+#
+# << MISSING >>
+# Email:
+#
+# << MISSING >>
+# email-enabled-help:
+# English text: Turn on or off all sending of email for notification and reminders.  Set to "no", if your server is not properly setup to send mail.
+#
+#
+# << MISSING >>
+# Email enabled:
+#
+# << MISSING >>
+# email-default-sender:
+# English text: Specifies the email address to specify as the sender when sending out reminders.
+#
+#
+# << MISSING >>
+# Default sender address:
+#
+# << MISSING >>
+# Default user settings:
+#
+# << MISSING >>
+# email-event-reminders-help:
+# English text: Specifies whether or not to send event reminders.
+#
+#
+# << MISSING >>
+# Event reminders:
+#
+# << MISSING >>
+# email-event-added:
+# English text: Specifies whether or not to send email notifications when an event is added to your calendar.
+#
+#
+# << MISSING >>
+# Events added to my calendar:
+#
+# << MISSING >>
+# email-event-updated:
+# English text: Specifies whether or not to send email notifications when an event is updated on your calendar.
+#
+#
+# << MISSING >>
+# Events updated on my calendar:
+#
+# << MISSING >>
+# email-event-deleted:
+# English text: Specifies whether or not to send email notifications when an event is removed from your calendar.
+#
+#
+# << MISSING >>
+# Events removed from my calendar:
+#
+# << MISSING >>
+# email-event-rejected:
+# English text: Specifies whether or not to send email notifications when a participant rejects an event that is on your calendar.
+#
+#
+# << MISSING >>
+# Event rejected by participant:
+colors-help: Tüm renkler "#RRGGBB" olarak verilebilir. "RR" Kirmizi icin hexadesimal olarak, "GG" Yesil icin ve "BB" Mavi icin.
+Colors: Renkler
+#
+# << MISSING >>
+# Allow user to customize colors:
+Document background: Sayfa-arkasi
+Select: Sec
+Document title: Baslik
+#
+# << MISSING >>
+# Document text:
+#
+# << MISSING >>
+# Table grid color:
+#
+# << MISSING >>
+# Table header background:
+#
+# << MISSING >>
+# Table header text:
+Table cell background: Tabela Sayfa-arkasi
+Table cell background for current day: Tabela-arkasi 'Bugün' icin
+#
+# << MISSING >>
+# Table cell background for weekends:
+#
+# << MISSING >>
+# Event popup background:
+#
+# << MISSING >>
+# Event popup text:
+
+
+###############################################
+# Page: activity_log.php
+#
+#
+# << MISSING >>
+# Activity Log:
+#
+# << MISSING >>
+# User:
+#
+# << MISSING >>
+# Calendar:
+Date: Tarih
+Time: Saat
+#
+# << MISSING >>
+# Event:
+#
+# << MISSING >>
+# Action:
+#
+# << MISSING >>
+# Event created:
+#
+# << MISSING >>
+# Event approved:
+#
+# << MISSING >>
+# Event rejected:
+#
+# << MISSING >>
+# Event updated:
+#
+# << MISSING >>
+# Event deleted:
+#
+# << MISSING >>
+# Notification sent:
+#
+# << MISSING >>
+# Reminder sent:
+#
+# << MISSING >>
+# Database error:
+#
+# << MISSING >>
+# Previous:
+#
+# << MISSING >>
+# Next:
+
+
+###############################################
+# Page: add_entry.php
+#
+Invalid entry id: gecersiz Islem
+#
+# << MISSING >>
+# This is a private event and may not be added to your calendar.:
+#
+# << MISSING >>
+# Error adding event:
+
+
+###############################################
+# Page: admin_handler.php
+#
+Error: Hata
+The following error occurred: Takipteki Hatalar cikiyor
+
+
+###############################################
+# Page: approve_entry.php
+#
+Error approving event: Islem onayinda hata
+
+
+###############################################
+# Page: category.php
+#
+#
+# << MISSING >>
+# Add:
+#
+# << MISSING >>
+# Category Name:
+#
+# << MISSING >>
+# Global:
+Delete: Sil
+Are you sure you want to delete this entry?: Islemi sahiden silmek istiyormusunuz?
+#
+# << MISSING >>
+# Add New Category:
+
+
+###############################################
+# Page: category_handler.php
+#
+
+
+###############################################
+# Page: datesel.php
+#
+
+
+###############################################
+# Page: day.php
+#
+#
+# << MISSING >>
+# Admin mode:
+#
+# << MISSING >>
+# Assistant mode:
+Generate printer-friendly version: Baski verziyonu üret
+Printer Friendly: Dostca Baski
+
+
+###############################################
+# Page: del_entry.php
+#
+Hello: Iyi günler 
+#
+# << MISSING >>
+# An appointment has been canceled for you by:
+#
+# << MISSING >>
+# The subject was:
+Notification: Not
+
+
+###############################################
+# Page: edit_entry.php
+#
+Edit Entry: Islem degistir
+Add Entry: Islem ekle
+brief-description-help: Termin icin kisa Özet (20 Isaret). Takvimde bu görünür.
+Brief Description: Özel Anlami
+full-description-help: Terminin tamamen aciklamasi. Bu aciklamayi Kullanici Termin'de görür.
+Full Description: Tüm Anlam
+date-help: Termin'in tarihini gösterir.
+time-help: Termin'in saatini gösterir.<br /><i>Bos birakilabilir.</i>
+am: am
+pm: pm
+#
+# << MISSING >>
+# Untimed event:
+#
+# << MISSING >>
+# Timed event:
+#
+# << MISSING >>
+# All day event:
+duration-help: Dakika olarak Termin'in sürecegi zamani gösterir.<br /><i>Bos birakilabilir.</i>
+Duration: Zaman
+#
+# << MISSING >>
+# hours:
+priority-help: Termin'in Prioritesini gösterir.  Prioritesi yüksek olan Termin'ler kalin yazi olarak gösterilir.
+Priority: Priorite
+Low: alcak
+Medium: orta
+High: yüksek
+access-help: Termine giris özelliklerini gösterir.<br /> <i>Acik</i>: Herkes her Detayli görebilir.<br /><i>Özel</i>: Termin'in varligini görebilir, ama hicbir Detayli göremez.
+Access: Giris
+Public: acik
+Confidential: özel 
+#
+# << MISSING >>
+# category-help:
+# English text: Specifies the category of the event.
+#
+#
+# << MISSING >>
+# Category:
+None: Hic
+#
+# << MISSING >>
+# days:
+#
+# << MISSING >>
+# before event:
+participants-help: Termine katilanlari gösterir.
+Participants: Katilanlar
+#
+# << MISSING >>
+# external-participants-help:
+# English text: Specifies a list of participants for the event that are not calendar users.  The users should be listed one per line and can include an email address.  If an email address is specified, the user is eligible to receive notications and reminders.
+#
+#
+# << MISSING >>
+# External Participants:
+#
+# << MISSING >>
+# repeat-type-help:
+# English text: Select how often the event should repeat.<i>Monthly (by day)</i> allows an event to repeat on the 1st Monday of the month, 3rd Thursday of the month, etc.  <i>Monthly (by date)</i> allows an event to repeat on the same day of the month.
+#
+Repeat Type: Tekrar türü
+Daily: Günliük
+Weekly: Haftalik
+Monthly: Aylik 
+by day: Günlere göre
+#
+# << MISSING >>
+# by day (from end):
+by date: Tarihe göre
+Yearly: Senelik
+#
+# << MISSING >>
+# repeat-end-date-help:
+# English text: Specifies the date the event should repeat until.
+#
+Repeat End Date: Termin tekrarinin sonu
+Use end date: Bugün bitiyor
+#
+# << MISSING >>
+# repeat-day-help:
+# English text: Specifies which days of the week the event should repeat on.  This is for use only when <i>Repeat Type</i> is set to <i>Weekly</i>.
+#
+Repeat Day: Tekrarin günü
+for weekly: Haftalik Termin'lerde
+Tuesday: Sali
+Wednesday: Carsamba
+Thursday: Persembe
+Friday: Cuma
+Saturday: Cumartesi
+#
+# << MISSING >>
+# repeat-frequency-help:
+# English text: Specifies how often the event should repeat.  The default 1 indicates it should occur every time.  Specifying 2 will make the event occur every other week (if <i>Repeat Type</i> is set to <i>Weekly</i>), every other month (if <i>Repeat Type</i> is set to <i>Monthly</i>), etc.
+#
+Frequency: defa
+Delete entry: Islemi sil
+You are not authorized to edit this entry: Sizin bu Islemi silmek icin hak sahibiz yok.
+
+
+###############################################
+# Page: edit_layer.php
+#
+#
+# << MISSING >>
+# Edit Layer:
+#
+# << MISSING >>
+# Add Layer:
+#
+# << MISSING >>
+# Source:
+#
+# << MISSING >>
+# Color:
+#
+# << MISSING >>
+# Duplicates:
+#
+# << MISSING >>
+# Show layer events that are the same as your own:
+#
+# << MISSING >>
+# Are you sure you want to delete this layer?:
+#
+# << MISSING >>
+# Delete layer:
+
+
+###############################################
+# Page: edit_layer_handler.php
+#
+#
+# << MISSING >>
+# You cannot create a layer for yourself:
+#
+# << MISSING >>
+# You can only create one layer for each user:
+
+
+###############################################
+# Page: edit_user.php
+#
+Edit User: Kullanici ayar
+Add User: Kullanici ekle
+Username: Kullanici Adi
+First Name: Ad
+Last Name: Soyad
+E-mail address: E-Mail-Adresi
+Password: Sifre
+again: Tekrar
+Admin: Sef
+#
+# << MISSING >>
+# Disabled for demo:
+Change Password: Sifre degistir
+New Password: Yeni Sifre
+Set Password: Sifreyi kullan
+
+
+###############################################
+# Page: edit_user_handler.php
+#
+#
+# << MISSING >>
+# Deleting users not supported:
+The passwords were not identical: Verilen Sifreler esit degil
+You have not entered a password: Sifre vermediniz
+
+
+###############################################
+# Page: export.php
+#
+Export: Veriler export
+Export format: Export sekli
+#
+# << MISSING >>
+# Palm Pilot:
+#
+# << MISSING >>
+# Export all dates:
+Start date: Baslangic tarihi
+End date: Bitis tarihi
+Modified since: Degistirimler
+
+
+###############################################
+# Page: export_handler.php
+#
+#
+# << MISSING >>
+# export format not defined or incorrect:
+
+
+###############################################
+# Page: group_edit.php
+#
+#
+# << MISSING >>
+# Unnamed Group:
+#
+# << MISSING >>
+# Add Group:
+#
+# << MISSING >>
+# Edit Group:
+#
+# << MISSING >>
+# Group name:
+Updated: degistirme tarihi
+Created by: kuran kisi
+Users: Kullanici
+
+
+###############################################
+# Page: group_edit_handler.php
+#
+#
+# << MISSING >>
+# You must specify a group name:
+
+
+###############################################
+# Page: groups.php
+#
+#
+# << MISSING >>
+# Add New Group:
+
+
+###############################################
+# Page: icalfb.php
+#
+
+
+###############################################
+# Page: pref.php
+#
+Preferences: Ana Ayar
+#
+# << MISSING >>
+# to modify the preferences for the Public Access calendar:
+#
+# << MISSING >>
+# tz-help:
+# English text: Specifies how many hours to adjust the time from server time to local time.
+#
+#
+# << MISSING >>
+# Timezone Offset:
+#
+# << MISSING >>
+# Add N hours to:
+#
+# << MISSING >>
+# Subtract N hours from:
+#
+# << MISSING >>
+# same as:
+#
+# << MISSING >>
+# server time:
+#
+# << MISSING >>
+# Default Category:
+#
+# << MISSING >>
+# When I am the boss:
+#
+# << MISSING >>
+# Email me event notification:
+#
+# << MISSING >>
+# I want to approve events:
+#
+# << MISSING >>
+# allow-remote-subscriptions-help:
+# English text: Specifies if remote users can subscribe to your calendar, allowing them to see your events in a iCal-enabled application (such as Apple's iCal or Mozilla Calendar).
+#
+#
+# << MISSING >>
+# remote-subscriptions-url-help:
+# English text: Displays the URL remote users should use to subscribe to your calendar.
+#
+#
+# << MISSING >>
+# URL:
+Sun: Pa
+Mon: Pt
+Tue: Sa
+Wed: Ca
+Thu: Pe
+Fri: Cu
+Sat: Ct
+Save Preferences: Ayarlari kayit et
+
+
+###############################################
+# Page: help_bug.php
+#
+#
+# << MISSING >>
+# Report Bug:
+
+
+###############################################
+# Page: help_edit_entry.php
+#
+Adding/Editing Calendar Entries: Takvim-Islemi ekle/degistir
+
+
+###############################################
+# Page: help_index.php
+#
+Help Index: Yardim-Endeksi
+#
+# << MISSING >>
+# Layers:
+#
+# << MISSING >>
+# Import:
+
+
+###############################################
+# Page: help_layers.php
+#
+#
+# << MISSING >>
+# Layers are useful for displaying other users' events in your own calendar.  You can specifiy the user and the color the events will be displayed in.:
+#
+# << MISSING >>
+# Add/Edit/Delete:
+#
+# << MISSING >>
+# Clicking the Edit Layers link in the admin section at the bottom of the page will allow you to add/edit/delete layers.:
+#
+# << MISSING >>
+# Specifies the user that you would like to see displayed in your calendar.:
+#
+# << MISSING >>
+# The text color of the new layer that will be displayed in your calendar.:
+#
+# << MISSING >>
+# If checked, events that are duplicates of your events will be shown.:
+#
+# << MISSING >>
+# Disabling:
+#
+# << MISSING >>
+# Press the Disable Layers link in the admin section at the bottom of the page to turn off layers.:
+#
+# << MISSING >>
+# Enabling:
+#
+# << MISSING >>
+# Press the Enable Layers link in the admin section at the bottom of the page to turn on layers.:
+
+
+###############################################
+# Page: help_admin.php
+#
+
+
+###############################################
+# Page: week.php
+#
+#
+# << MISSING >>
+# cont.:
+
+
+###############################################
+# Page: layers.php
+#
+#
+# << MISSING >>
+# to modify the layers settings for the:
+#
+# << MISSING >>
+# Layers are currently:
+#
+# << MISSING >>
+# Enabled:
+#
+# << MISSING >>
+# Disabled:
+#
+# << MISSING >>
+# Disable Layers:
+#
+# << MISSING >>
+# Enable Layers:
+#
+# << MISSING >>
+# Layer:
+#
+# << MISSING >>
+# Edit layer:
+#
+# << MISSING >>
+# Add layer:
+
+
+###############################################
+# Page: layers_toggle.php
+#
+
+
+###############################################
+# Page: list_unapproved.php
+#
+View this entry: Islemi gör
+Approve this entry?: Islem onaylansin?
+Approve/Confirm: Islem onaylansin
+Reject this entry?: Isleme ret?
+Reject: Ret
+#
+# << MISSING >>
+# No unapproved events for:
+Unapproved Events: Onaylanmamis Termin
+#
+# << MISSING >>
+# Public Access:
+
+
+###############################################
+# Page: view_entry.php
+#
+#
+# << MISSING >>
+# every:
+#
+# << MISSING >>
+# 2nd:
+#
+# << MISSING >>
+# 3rd:
+#
+# << MISSING >>
+# 4th:
+#
+# << MISSING >>
+# 5th:
+#
+# << MISSING >>
+# 1st:
+#
+# << MISSING >>
+# last:
+Description: Anlam
+#
+# << MISSING >>
+# Status:
+#
+# << MISSING >>
+# Waiting for approval:
+#
+# << MISSING >>
+# Deleted:
+Rejected: Islem onaylanmadi, eklenmeyecek  
+#
+# << MISSING >>
+# External User:
+Approve/Confirm entry: Islem onaylansin?
+Reject entry: Isleme ret?
+#
+# << MISSING >>
+# Set category:
+#
+# << MISSING >>
+# Edit repeating entry for all dates:
+#
+# << MISSING >>
+# Edit entry for this date:
+This will delete this entry for all users.: Bu Islem tüt Kullanicilar icin siliniyor.
+#
+# << MISSING >>
+# Delete repeating event for all dates:
+#
+# << MISSING >>
+# Delete entry only for this date:
+Edit entry: Islem degistir
+#
+# << MISSING >>
+# This will delete the entry from your calendar.:
+#
+# << MISSING >>
+# Do you want to add this entry to your calendar?:
+#
+# << MISSING >>
+# This will add the entry to your calendar.:
+#
+# << MISSING >>
+# Add to My Calendar:
+#
+# << MISSING >>
+# Email all participants:
+#
+# << MISSING >>
+# Show activity log:
+#
+# << MISSING >>
+# Hide activity log:
+#
+# << MISSING >>
+# Export this entry to:
+
+
+###############################################
+# Page: view_v.php
+#
+
+
+###############################################
+# Page: month.php
+#
+
+
+###############################################
+# Page: pref_handler.php
+#
+
+
+###############################################
+# Page: reject_entry.php
+#
+#
+# << MISSING >>
+# An appointment has been rejected by:
+#
+# << MISSING >>
+# The description is:
+Title: WebTakvimi
+
+
+###############################################
+# Page: search.php
+#
+Search: Arama
+#
+# << MISSING >>
+# Advanced Search:
+Keywords: Kelimeler
+
+
+###############################################
+# Page: search_handler.php
+#
+You must enter one or more search keywords: En az bir Kelime girmeniz gerekiyor
+Search Results: Arama sonucu
+match found: Bulunan
+matches found: Bulunan
+No matches found: Bulunmiyor
+
+
+###############################################
+# Page: select_user.php
+#
+View Another User's Calendar: Baska Kullanicilarin Takvimini göster 
+Go: göster 
+
+
+###############################################
+# Page: publish.php
+#
+
+
+###############################################
+# Page: users.php
+#
+denotes administrative user: Sef Kullaniciyi gösterir
+Add New User: Yeni Kullanici ekle
+
+
+###############################################
+# Page: usersel.php
+#
+#
+# << MISSING >>
+# All:
+#
+# << MISSING >>
+# Reset:
+#
+# << MISSING >>
+# Remove:
+#
+# << MISSING >>
+# Ok:
+#
+# << MISSING >>
+# Cancel:
+
+
+###############################################
+# Page: import.php
+#
+#
+# << MISSING >>
+# This form will allow you to import entries from the Palm Desktop Datebook.:
+#
+# << MISSING >>
+# Exclude private records:
+#
+# << MISSING >>
+# Datebook File:
+#
+# << MISSING >>
+# This form will import vCalendar (.vcs) 1.0 events:
+#
+# << MISSING >>
+# vCal File:
+#
+# << MISSING >>
+# This form will import iCalendar (.ics) events:
+#
+# << MISSING >>
+# iCal File:
+#
+# << MISSING >>
+# Overwrite Prior Import:
+
+
+###############################################
+# Page: year.php
+#
+
+
+###############################################
+# Page: view_d.php
+#
+
+
+###############################################
+# Page: view_m.php
+#
+
+
+###############################################
+# Page: view_w.php
+#
+
+
+###############################################
+# Page: views.php
+#
+#
+# << MISSING >>
+# Views:
+#
+# << MISSING >>
+# Add New View:
+
+
+###############################################
+# Page: views_edit.php
+#
+#
+# << MISSING >>
+# Unnamed View:
+#
+# << MISSING >>
+# Add View:
+#
+# << MISSING >>
+# Edit View:
+#
+# << MISSING >>
+# View Name:
+#
+# << MISSING >>
+# View Type:
+#
+# << MISSING >>
+# Week (Users horizontal):
+#
+# << MISSING >>
+# Week (Users vertical):
+#
+# << MISSING >>
+# Week (Timebar):
+#
+# << MISSING >>
+# Month (side by side):
+#
+# << MISSING >>
+# Month (on same calendar):
+
+
+###############################################
+# Page: nonusers.php
+#
+#
+# << MISSING >>
+# NONUSER_PREFIX not set:
+# English text: NONUSER_PREFIX has not been set in config.php.
+#
+#
+# << MISSING >>
+# NonUser:
+# English text: NonUser Calendars
+#
+#
+# << MISSING >>
+# Calendar ID:
+#
+# << MISSING >>
+# Add New NonUser Calendar:
+
+
+###############################################
+# Page: nonusers_handler.php
+#
+
+
+###############################################
+# Page: view_l.php
+#
+
+
+###############################################
+# Page: help_pref.php
+#
+#
+# << MISSING >>
+# default-category-help:
+# English text: Specifies the category a new event should default to.
+#
+
+
+###############################################
+# Page: report.php
+#
+Private: özel
+#
+# << MISSING >>
+# Approved:
+#
+# << MISSING >>
+# Unknown:
+#
+# << MISSING >>
+# to manage reports for the Public Access calendar:
+#
+# << MISSING >>
+# Add new report:
+#
+# << MISSING >>
+# Invalid report id:
+#
+# << MISSING >>
+# Manage Reports:
+
+
+###############################################
+# Page: login.php
+#
+You must enter a login and password: Kullanici Adi ve Sifre vermeniz gerekiyor.
+Save login via cookies so I don't have to login next time: Tanimlamayi Cookie'ye kayit et, birdahakinde otamatik olarak girisi gecmek icin.
+Login: Giris
+#
+# << MISSING >>
+# Access public calendar:
+cookies-note: <b>Not:</b> Takvimi kullanmak icin, Browser'inizde Cookie'leri kabul etmeniz gerekiyor.
+
+
+###############################################
+# Page: views_edit_handler.php
+#
+#
+# << MISSING >>
+# You must specify a view name:
+
+
+###############################################
+# Page: week_details.php
+#
+New Entry: Yeni islem
+
+
+###############################################
+# Page: import_handler.php
+#
+#
+# << MISSING >>
+# Import Results:
+#
+# << MISSING >>
+# Events successfully imported:
+#
+# << MISSING >>
+# Events from prior import marked as deleted:
+#
+# << MISSING >>
+# Conflicting events:
+#
+# << MISSING >>
+# Errors:
+Back to My Calendar: Takvimime geri
+#
+# << MISSING >>
+# There was an error parsing the import file or no events were returned:
+#
+# << MISSING >>
+# The import file contained no data:
+The following conflicts with the suggested time: Önerilen Terminde saat carpismasi
+Unnamed Event: isimsiz olay
+Scheduling Conflict: Termin carpismasi
+conflicts with the following existing calendar entries: takiben Takvimde baska bir Islemle carpisiyor.
+#
+# << MISSING >>
+# Event Imported:
+
+
+###############################################
+# Page: edit_report.php
+#
+#
+# << MISSING >>
+# Tomorrow:
+#
+# << MISSING >>
+# Today:
+#
+# << MISSING >>
+# Yesterday:
+#
+# << MISSING >>
+# Day before yesterday:
+#
+# << MISSING >>
+# Next week:
+#
+# << MISSING >>
+# This week:
+#
+# << MISSING >>
+# Last week:
+#
+# << MISSING >>
+# Week before last:
+#
+# << MISSING >>
+# Next week and week after:
+#
+# << MISSING >>
+# This week and next week:
+#
+# << MISSING >>
+# Last week and this week:
+#
+# << MISSING >>
+# Last two weeks:
+#
+# << MISSING >>
+# Next month:
+#
+# << MISSING >>
+# This month:
+#
+# << MISSING >>
+# Last month:
+#
+# << MISSING >>
+# Month before last:
+#
+# << MISSING >>
+# Next year:
+#
+# << MISSING >>
+# This year:
+#
+# << MISSING >>
+# Last year:
+#
+# << MISSING >>
+# Year before last:
+#
+# << MISSING >>
+# Unnamed Report:
+#
+# << MISSING >>
+# Add Report:
+#
+# << MISSING >>
+# Edit Report:
+#
+# << MISSING >>
+# Report name:
+Current User: aktüel Kullanici
+#
+# << MISSING >>
+# Include link in trailer:
+#
+# << MISSING >>
+# Include standard header/trailer:
+#
+# << MISSING >>
+# Date range:
+#
+# << MISSING >>
+# Include previous/next links:
+#
+# << MISSING >>
+# Include empty dates:
+#
+# << MISSING >>
+# Template variables:
+#
+# << MISSING >>
+# Page template:
+#
+# << MISSING >>
+# Day template:
+#
+# << MISSING >>
+# Event template:
+#
+# << MISSING >>
+# Are you sure you want to delete this report?:
+
+
+###############################################
+# Page: assistant_edit.php
+#
+#
+# << MISSING >>
+# Assistants:
+#
+# << MISSING >>
+# Yours assistants:
+
+
+###############################################
+# Page: view_t.php
+#
+
+
+###############################################
+# Page: assistant_edit_handler.php
+#
+
+
+###############################################
+# Page: adminhome.php
+#
+Account: Account
+#
+# << MISSING >>
+# NonUser Calendars:
+#
+# << MISSING >>
+# Delete Events:
+#
+# << MISSING >>
+# Public Preferences:
+#
+# << MISSING >>
+# Unapproved Public Events:
+#
+# << MISSING >>
+# Administrative Tools:
+
+
+###############################################
+# Page: purge.php
+#
+#
+# << MISSING >>
+# Purging events for:
+#
+# << MISSING >>
+# Finished:
+#
+# << MISSING >>
+# Delete all events before:
+#
+# << MISSING >>
+# Check box to delete <b>ALL</b> events for a user:
+#
+# << MISSING >>
+# Are you sure you want to delete events for:
+
+
+###############################################
+# Page: help_import.php
+#
+#
+# << MISSING >>
+# Palm Desktop:
+#
+# << MISSING >>
+# It should be located in your Palm directory in <tt>datebook/datebook.dat</tt> in a subdirectory named by your username.:
+#
+# << MISSING >>
+# The following entries will not be imported:
+#
+# << MISSING >>
+# Entries older than the current date:
+#
+# << MISSING >>
+# Entries created in the Palm Desktop that have not been HotSync'd:
+#
+# << MISSING >>
+# Anything imported from Palm will be overwritten during the next import (unless the event date has passed).:
+#
+# << MISSING >>
+# Therefore, updates should be made in the Palm Desktop.:
+#
+# << MISSING >>
+# vCal:
+#
+# << MISSING >>
+# The following formats have been tested:
+#
+# << MISSING >>
+# Palm Desktop 4:
+#
+# << MISSING >>
+# Lotus Organizer 6:
+#
+# << MISSING >>
+# Microsoft Outlook 2002:
+#
+# << MISSING >>
+# iCalendar:
+#
+# << MISSING >>
+# Enabling <b>Overwrite Prior Import</b> will cause events imported previously that used the same UID as an event from the new import file to be marked as deleted.  This should allow an updated iCalendar file to be imported without creating duplicates.:
+
+
+###############################################
+# Page: edit_report_handler.php
+#
+#
+# << MISSING >>
+# Variable N not found:
+
+
+###############################################
+# Page: edit_entry_handler.php
+#
+A new appointment has been made for you by: Sizin icin bir Termin eklendi -->  
+#
+# << MISSING >>
+# An appointment has been updated by:
+The subject is: Tarif 
+Please look on: Bakiniz  
+to accept or reject this appointment: Termini onaylamak/ret etmek.
+to view this appointment: Termini gör
+Your suggested time of: Isleminiz 
+
+
+###############################################
+# Page: set_entry_cat.php
+#
+#
+# << MISSING >>
+# You have not added any categories:
+#
+# << MISSING >>
+# Set Category:
+
+
+###############################################
+# Page: edit_template.php
+#
+#
+# << MISSING >>
+# Edit Custom Script/Stylesheet:
+#
+# << MISSING >>
+# Edit Custom Header:
+#
+# << MISSING >>
+# Edit Custom Trailer:
+
+
+###############################################
+# Page: includes/trailer.php
+#
+Go to: Git
+My Calendar: Benim Takvimim
+Logout: Cikis
+Another User's Calendar: Baska Kullanicilarin Takvimi 
+Add New Entry: Islem ekle
+#
+# << MISSING >>
+# Manage Views:
+#
+# << MISSING >>
+# Manage calendar of:
+
+
+###############################################
+# Page: includes/connect.php
+#
+
+
+###############################################
+# Page: includes/user.php
+#
+#
+# << MISSING >>
+# Invalid login:
+#
+# << MISSING >>
+# Invalid user login:
+
+
+###############################################
+# Page: includes/site_extras.php
+#
+#
+# << MISSING >>
+# Send Reminder:
+
+
+###############################################
+# Page: includes/translate.php
+#
+
+
+###############################################
+# Page: includes/user-ldap.php
+#
+
+
+###############################################
+# Page: includes/user-nis.php
+#
+
+
+###############################################
+# Page: includes/help_trailer.php
+#
+
+
+###############################################
+# Page: includes/dbtable.php
+#
+
+
+###############################################
+# Page: includes/init.php
+#
+
+
+###############################################
+# Page: includes/functions.php
+#
+This event is confidential: özel Termin 
+#
+# << MISSING >>
+# exceeds limit of XXX events per day:
+#
+# << MISSING >>
+# You have XXX unapproved events:
+January: Ocak
+February: Subat
+March: Mart
+April: Nisan
+May_: Mayis
+June: Haziran
+July: Temmuz
+August: Agustos
+September: Eylül
+October: Ekim
+November: Kasim
+Jan: Oca
+Feb: Sub
+Mar: Mar
+Apr: Nis
+May: May
+Jun: Haz
+Jul: Tem
+Aug: Agu
+Sep: Eyl
+Oct: Eki
+Nov: Kas
+Dec: Ara
+
+
+###############################################
+# Page: includes/js/admin.php
+#
+#
+# << MISSING >>
+# Server URL is required:
+#
+# << MISSING >>
+# Server URL must end with '/':
+Invalid color for document background: Renk Sayfa-arkasi icin gecerli degil
+Invalid color for document title: Renk Baslik icin gecerli degil
+Invalid color for table cell background: Renk Tabela-arkasi icin gecerli degil
+#
+# << MISSING >>
+# Invalid color for table grid:
+#
+# << MISSING >>
+# Invalid color for table header background:
+#
+# << MISSING >>
+# Invalid color for table text background:
+#
+# << MISSING >>
+# Invalid color for event popup background:
+#
+# << MISSING >>
+# Invalid color for event popup text:
+Invalid color for table cell background for today: Renk Tabela-arkasi 'Bugün' icin gecerli degil
+Color format should be '#RRGGBB': Renkler sadece '#RRGGBB' seklinde verilebilir.
+
+
+###############################################
+# Page: includes/js/edit_entry.php
+#
+You have not entered a Brief Description: Özet Anlami vermediniz
+You have not entered a valid time of day: Gecerli saat vermediniz
+#
+# << MISSING >>
+# The time you have entered begins before your preferred work hours.  Is this correct?:
+
+
+###############################################
+# Page: includes/js/edit_layer.php
+#
+#
+# << MISSING >>
+# Invalid color:
+
+
+###############################################
+# Page: includes/js/pref.php
+#
+
+
+###############################################
+# Page: tools/send_reminders.php
+#
+#
+# << MISSING >>
+# This is a reminder for the event detailed below.:
+#
+# << MISSING >>
+# Reminder:

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Welsh.txt
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Welsh.txt	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/translations/Welsh.txt	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,1466 @@
+# Use this as a starting point to translate this application into
+# another language.  The format is "English text: translated text"
+# There cannot be a ":" in the English text.
+# Translated by:
+#	Wyn James: wynjames at onetel.net.uk
+# Last update: 03 October 2002
+# Check out the tools directory which contains two perl scripts:
+#   check_translation.pl will tell you if you have successfully translated
+#        all required text
+#   pagify_translation.pl will take an old translation file and move the
+#        translations around so they age grouped by the page they appear in.
+#
+# Note: You will notice the entry for "May_" below.  There's a reason for
+# this.  Translate "May_" to the full month name and "May" to the three-letter
+# month abbreviation (like "Oct" for "October").
+#
+#
+#
+#
+# Translation last updated on 03-10-2004
+
+# No charset specified (not needed for iso-8859-1)
+# "charset" is used in a meta tag, do not translate "charset" here.
+# charset:
+
+
+
+###############################################
+# Page: admin.php
+#
+System Settings: Gosodiad System
+You are not authorized: Dim awdurdod
+Note: Noder
+Your user preferences: Efallai bod eich hoff dewisiadau
+may be affecting the appearance of this page.: yn effeithio ar ymddangosiad y dudalen yma.
+Click here: Cliciwch yma
+to not use your user preferences when viewing this page: i beidio a defnyddio eich hoff dewisiadau wrth wylio'r tudalen yma
+are being ignored while viewing this page.: yn cael eu hanwebyddu wrth gwylio'r tudalen yma.
+to load your user preferences when viewing this page: i llwytho eich hoff dewisiadau wrth wylio'r tudalen yma
+Save: Arbed
+Help: Help
+Settings: Gosodiadau
+app-name-help: Mae hwn yn dynodi enw'r cymwysiad (application) a fydd yn ymddangos ym mar teitl y porwr am bob tudalen a'r tudalen mewngofnodi yn ogystal.  Mi fydd yr hyn yr ydych yn cofnodi yma yn cael ei gymharu a chynnwys y ffeil cyfieithiadiau gan ganiatau i chi roi teitlau amrywiol i ieithoedd gwahanol.
+Application Name: Enw'r Cymwysiad (Application)
+server-url-help: Mae hwn yn dynodi y URL sylfaen i'r cymwysiad (application).  Cynnhywsir hwn wrth anfon e-byst sydd yn atgoffa neu yn nodi.
+Server URL: URL y gweinydd
+language-help: Mae hwn yn dynodi pa iaith i'w defnyddio.
+Language: Iaith
+Your browser default language is: Iaith arferol eich porwr yw
+fonts-help: Mae hwn yn dangos rhestr o ffontiau'r system a ellir eu defnyddio (megis "Arial, Helvetica")
+Fonts: Ffontiau
+#
+# << MISSING >>
+# custom-script-help:
+# English text: Allows entry of custom Javascript or stylesheet text that will be inserted into the HTML "head" section of every page.
+#
+#
+# << MISSING >>
+# Custom script/stylesheet:
+Yes: Ie
+No: Na
+#
+# << MISSING >>
+# Edit:
+#
+# << MISSING >>
+# custom-header-help:
+# English text: Allows a custom HTML snippet to be included in the top of every page.
+#
+#
+# << MISSING >>
+# Custom header:
+#
+# << MISSING >>
+# custom-trailer-help:
+# English text: Allows a custom HTML snippet to be included at the end of every page.
+#
+#
+# << MISSING >>
+# Custom trailer:
+preferred-view-help: Mae hwn yn dynodi y golwg arferol (Dydd, Wythnos, Mis, neu Blwyddyn).
+Preferred view: Golwg ffafriedig
+Day: Dydd
+Week: Wythnos
+Month: Mis
+Year: Blwyddyn
+display-weekends-help: Cynnhwysir penwythnosau yn y golwg wythnosol.
+Display weekends in week view: Dangoser penwythnosau yn y golwg wythnosol
+#
+# << MISSING >>
+# yearly-shows-events-help:
+# English text: On the yearly view, display days that contain events in a bold font.
+#
+#
+# << MISSING >>
+# Display days with events in bold in year view:
+#
+# << MISSING >>
+# display-desc-print-day-help:
+# English text: Include event descriptions in printer-friendly version of day view.
+#
+#
+# << MISSING >>
+# Display description in printer day view:
+date-format-help: Mae hwn yn dynodi y fformat dyddiad arferol.
+Date format: Fformat dyddiad
+December: Rhagfyr
+time-format-help: Mae hwn yn dynodi y fformat amser i'w ddefnyddio: <br /><i>12 awr:</i> Dangoser amserau megis 3am, 8:30pm, ac ati.  <br /><i>24 awr:</i> Dangoser amserau megis 300, 2030, ac ati.
+Time format: Fformat amser
+12 hour: 12 awr
+24 hour: 24 awr
+time-interval-help: Mae hwn yn dynodi hyd y blociau amser yn y golwg wythnosol a'r golwg dyddiol. 
+Time interval: Ystod Amser
+hour: awr
+minutes: munud
+auto-refresh-help: Pan ymlaen, mae'r golwg dyddiol, wythnosol neu misol, a rhestr tudalennau heb cymeradwyaeth, yn cael eu adfywio yn awtomatig yn rheolaidd.
+Auto-refresh calendars: Calendr yn adfywio yn awtomatig
+auto-refresh-time-help: Os yw adfywio awtomatig yn cael ei ddefnyddio, yna mae hwn yn pendefynnu'r amser rhwng pob adfywiad.
+Auto-refresh time: Amser i adfywio'n awtomatig
+require-approvals-help: Pan mae hwn yn cael ei ddefnyddio rhaid i'r defnyddwr cymeradwyo digwyddiad cyn iddo gael ei ddangos ar ei calendr (os nad yw 'Dangos heb Cymeradwyaeth' ymlaen) Noder wrth gosod hwn i 'Na' ni fydd hwn yn hepgor ar yr angen i cymeradwyo digwyddiadau i'r Calendr Cyhoeddus (os yw'r Calendr Cyhoeddus wedi ei 'alluogi').
+Require event approvals: Cymeradwyaeth i ddigwyddiadau'n angenrheidiol
+display-unapproved-help: Mae hwn yn dynodi a yw digwyddiadau heb cymeradwyaeth yn cael eu dangos yn eich calendr.<br /> Os goseder i "Ie", Yna fe ddangosir digwyddiadau heb cymeradwyaeth yn eich calendr (mewn lliw gwahanaol).<br /> Os gosoder i "Na", yna mae angen cymeradwyo digwyddiadau cyn iddynt gael eu dangos ar eich calendr.
+Display unapproved: Dangoser digwyddiadau heb cymeradwyaeth
+display-week-number-help: Mae hwn yn dynodi os y dylid dangos rhif yr wythnos (1-52) yn y golwg misol neu wythnosol.
+Display week number: Dangoser rhif yr wythnos
+display-week-starts-on: Mae hwn yn dynodi a yw wythnosau i ddechrau ar ddydd Sul neu Llun.  Os dynoder dydd Llun, yna defnyddir rhifau wythnos system ISO.
+Week starts on: Wythnos yn dechrau ar ddydd
+Sunday: Sul
+Monday: Llun
+work-hours-help: Mae hwn yn dynodi ystod yr amser a ddangosir yn y golwg dyddiol.
+Work hours: Oriau gweithio
+From: O
+to: hyd
+disable-priority-field-help: Os y dewisir "Ie" yna ceir gwared a'r dewis o "Blaenoriaeth" o'r tudalennau gwybodaeth am digwyddiad, gan wneud pethau'n haws i bobl heb profiad o'r meddalwedd.
+Disable Priority field: Dim dewis o Blaenoriaeth
+disable-access-field-help: Wrth dewis "Ie" ceir gwared a'r optiwn "Mynediad" oddi wrth tudalennau gwybodaeth am ddigwyddiad, gan wneud pethau'n haws i bobl heb brofiad o'r meddalwedd.
+Disable Access field: Dim dewis o Mynediad
+disable-participants-field-help: Wrth dewis "Ie" ceir gwared a'r optiwn "Cyfranogwyr" oddi wrth y tudalennau gwybodaeth am ddigwyddiad, gan atal defnyddwyr rhag ychwanegu digwyddiadau defnyddwyr eraill at eu calendrau.  Os y dewisir yr optiwn yma, yna dylswch ystyried cael gwared o'r optiwn i "Caniatau dangos calendrau defnyddwyr eraill" yn ogystal.
+Disable Participants field: Dim Cyfranogwyr
+disable-repeating-field-help: Wrth dewis "Ie" ceir gwared a'r optiwn i "Ailgyflawni" wrth ychwanegu digywddiadau.  Mi fydd hyn yn gwneud pethau'n haws i bobl heb profiad o'r meddalwedd.
+Disable Repeating field: Dim Ailgyflawni
+#
+# << MISSING >>
+# popup-includes-siteextras-help:
+# English text: If enabled, allow custom event fields setup in the site_extras.php file will be displayed in event popups.
+#
+#
+# << MISSING >>
+# Display Site Extras in popup:
+#
+# << MISSING >>
+# allow-html-description-help:
+# English text: If enabled, users can enter HTML in the event description field.  If not enabled, the HTML tags will be escaped so as to appear as plain text.  Warning: Enabling this feature will allow users to reference images on other websites.
+#
+#
+# << MISSING >>
+# Allow HTML in Description:
+allow-view-other-help: Mae hwn yn penderfynnu a yw un defnyddiwr yn gallu gwylio calendr defnyddiwr arall.
+Allow viewing other user's calendars: Caniatad i wylio calendr rhywun arall
+allow-public-access-help: Pan y dewisir yr optiwn yma gall y calendr yma ond cael ei ddefnyddio fel calendr cyhoeddus a ellir ei ddarllen yn unig, a sydd ddim yn gofyn i ddefnyddwyr i mewngofnodi.
+Allow public access: Caniatewch mynediad i'r cyhoedd 
+public-access-view-others-help: Wrth cael mynediad cyhoeddus i'r system, mae hwn yn dynodi a yw'r defnyddiwr yn gallu gwylio calendrau defnydwyr eraill.
+Public access can view other users: Rhywrai gyda mynediad cyhoeddus yn gallu gwylio calendrau defnyddwyr eraill
+public-access-can-add-help: Pan ymlaen, mi fydd defnyddwyr sydd wedi cael Mynediad Cyhoeddus i'r system yn gallu ychwanegu digwyddiadau newydd, ond ni fyddent yn dangos ar y Calendr Cyhoeddus nes bod gweinyddwr yn cymeradwyo'r digwyddiad newydd.
+Public access can add events: Gall rhai gyda Mynediad Cyhoeddus ychwanegu digwyddiad
+#
+# << MISSING >>
+# public-access-add-requires-approval-help:
+# English text: Specifies whether events added via the public access account require approval before being displayed.
+#
+#
+# << MISSING >>
+# Public access new events require approval:
+#
+# << MISSING >>
+# public-access-sees-participants-help:
+# English text: If enabled, users accessing the calendar from the public account will be able to see event participants if they view details of an event.
+#
+#
+# << MISSING >>
+# Public access can view participants:
+#
+# << MISSING >>
+# allow-view-add-help:
+# English text: A '+' icon will be included in views, allowing users to quickly add events to other users' calendars.
+#
+#
+# << MISSING >>
+# Include add event link in views:
+#
+# << MISSING >>
+# allow-external-users-help:
+# English text: Specifies whether a non-calendar user can be added to an event.  This allows non-calendar users to be listed as event participants.
+#
+#
+# << MISSING >>
+# Allow external users:
+#
+# << MISSING >>
+# external-can-receive-notification-help:
+# English text: When external users are enabled and email usage is enabled, external users can receive email notifications when the event is added, updated or delete (if the external user's email address is provided).
+#
+#
+# << MISSING >>
+# External users can receive email notifications:
+#
+# << MISSING >>
+# external-can-receive-reminder-help:
+# English text: When external users are enabled and email usage is enabled, external users can receive email reminders (if the external user's email address is provided).
+#
+#
+# << MISSING >>
+# External users can receive email reminders:
+remember-last-login-help: Pan y defnyddir hwn mi fydd mewngofnodiad y defnyddiwr yn cael ei lenwi drostynt ar y dudalen mewngofnodi (ond nid y gair cydd), a mi fydd hoff dewisiadau'r defnyddiwr yn cael eu llwytho (gan gynnwys ei hoff lliwiau a dewis o iaith).
+Remember last login: Cofier y mewngofnodiad diwethaf
+conflict-check-help: Mae hwn yn rhybuddio am gwrthdrawiadau rhwng digwyddiadau (dau digwyddiad wedi eu dynodi am yr un amser ar calendr un person).  Os y dewisir "Ie", mi fydd hi dal yn bosib i drefnu dau digwyddiad ar yr un amser os y rhoddir cadarnhad ar ol rhybudd. Os y dewisir "Na", ni fydd yna unrhyw rybudd o gwrthdrawiadau rhwng digwyddiadau.  Mae hi'n arferol yn well i gosod hwn i "Ie", felly bod modd osgoi gwrthdrawiadau.
+Check for event conflicts: Edrycher am gwrthdrawiadau rhwng digwyddiadau
+conflict-months-help: Os yr edrycher am gwrthdrawiadau ("Edrycher am gwrthdrawiadau rhwng digwyddiadau" wedi ei osod i "Na"), mae hwn yn dynodi faint o fisoedd i'r dyfodol yr edrychir am wrthdrawiadau.  Os yw ychwanegu digwyddiadau yn cymryd amser hir, yna gostyngwch y rhif yma.
+Conflict checking months: Nifer y misoedd i edrych am gwrthdrawiadau
+#
+# << MISSING >>
+# conflict-check-override-help:
+# English text: Allows users to override event conflicts and schedule two or more events for the same time.
+#
+#
+# << MISSING >>
+# Allow users to override conflicts:
+#
+# << MISSING >>
+# limit-appts-help:
+# English text: Allows the system administrator to set a system-wide limit on the number of appointments a single user can have on any single day.
+#
+#
+# << MISSING >>
+# Limit number of timed events per day:
+#
+# << MISSING >>
+# limit-appts-number-help:
+# English text: Specifies the maximum number of timed events a user can have in a single day.
+#
+#
+# << MISSING >>
+# Maximum timed events per day:
+#
+# << MISSING >>
+# Plugins:
+#
+# << MISSING >>
+# plugins-enabled-help:
+# English text: Enable plugin applications.
+#
+#
+# << MISSING >>
+# Enable Plugins:
+#
+# << MISSING >>
+# plugins-sort-key-help:
+# English text: Specifies a sort key for the plugin.  This allows the plugins to appear in a specific order.
+#
+#
+# << MISSING >>
+# Plugin:
+Groups: Grwpiau
+groups-enabled-help: Os y dewisir hwn ceir cymorth grwp, gan ganiatau i ddefnyddwyr i ddewis defnyddwyr eraill wrth eu grwpiau.
+Groups enabled: Grwpiau 
+user-sees-his-group-help: Os y dewisir hwn, ni fydd defnyddiwr yn gallu gweld digwyddiadau defnyddwyr eraill nad ydynt yn bodoli yn o leiaf un o grwpiau y defnyddiwr.
+User sees only his groups: Defnyddiwr yn gweld ei grwpiau yn unig
+Categories: Dosbarthiadau
+categories-enabled-help: Mae hwn yn caniatau i digwyddiadau cael ei gosod mewn dosbarthiadau.
+Categories enabled: Dosbarthiadau
+#
+# << MISSING >>
+# Nonuser:
+# English text: Nonuser Calendars
+#
+#
+# << MISSING >>
+# nonuser-enabled-help:
+# English text: If enabled, admins will have the option to add nonuser calendars
+#
+#
+# << MISSING >>
+# Nonuser enabled:
+# English text: Nonuser Calendars Enabled
+#
+#
+# << MISSING >>
+# nonuser-list-help:
+# English text: Where to display the nonuser calendars in the participant list
+#
+#
+# << MISSING >>
+# Nonuser list:
+# English text: Display in participants list at
+#
+#
+# << MISSING >>
+# Top:
+#
+# << MISSING >>
+# Bottom:
+#
+# << MISSING >>
+# Reports:
+#
+# << MISSING >>
+# reports-enabled-help:
+# English text: If enabled, users will see a "Reports" section at the bottom of each page and will be allowed to create custom reports.  Additionally, admin users can create global reports that will appear at the bottom of all users' pages.
+#
+#
+# << MISSING >>
+# Reports enabled:
+#
+# << MISSING >>
+# Subscribe/Publish:
+#
+# << MISSING >>
+# subscriptions-enabled-help:
+# English text: Specifies if remote users can subscribe to a WebCalendar user's calendar, allowing them to see the WebCalendar user's events in their iCal-enabled application (such as Apple's iCal or Mozilla Calendar).
+#
+#
+# << MISSING >>
+# Allow remote subscriptions:
+Email: E-bost
+email-enabled-help: Defnyddir hwn i dewis a oes modd anfon e-byst i atgoffa defnyddwyr o digwyddiad.  Gosoder i "na", os yw'r gweinydd ddim yn medru anfon e-byst yn y ffordd yma.
+Email enabled: Anfoner E-byst
+email-default-sender: Mae hwn yn dynodi cyfeiriad e-bost yr anfonwr wrth anfon e-byst atgoffa allan.
+Default sender address: Cyfeiriad e-bost danfonwr arferol
+Default user settings: Dewisiadau arferol y defnyddiwr
+email-event-reminders-help: Mae hwn yn dynodi a ddylid anfon e-byst i atgoffa defnyddwyr o ddigwyddiadau.
+Event reminders: Atgofion o ddigwyddiadau
+email-event-added: Mae hwn yn dynodi a ddylid anfon rhybudd ar ffurf e-bost at bawb yr effeithir arnynt os yr ychwanegir digwyddiad i'ch calendr.
+Events added to my calendar: Digwyddiadau wedi eu ychwanegu ar fy nghalendr
+email-event-updated: Mae hwn yn dynodi a ddylid anfon rhybudd ar ffurf e-bost at bawb yr effeithir arnynt os y newidir digwyddiad ar eich calendr.
+Events updated on my calendar: Digwyddiadau wedi eu newid ar fy nghalendr
+email-event-deleted: Mae hwn yn penderfynnu a ddylid anfon rhybudd ar ffurf e-bost at bawb yr effeithir arnynt os y diddymir digwyddiad o'c calendr.
+Events removed from my calendar: Digwyddiadau a ddiddymwyd o fy nghalendr
+email-event-rejected: Mae hwn yn penderfynnu a ddylid anfon rhybudd ar ffurf e-bost at bawb yr effeithir arnynt os yw defnyddiwr yn gwrthod derbyn digwyddiad sydd ar eich calendr.
+Event rejected by participant: Digwyddiad wedi ei wrthod gan ddefnyddiwr
+colors-help: Dylsai pob lliw gael ei dynodi trwy fformat hexadecimal "#RRGGBB" ble mae "RR" yn cynrychioli coch mewn hex, "GG" yn cynrychioli gwyrdd mewn hex, ac mae "BB" yn cynrychioli glas mewn hex.
+Colors: Lliwiau
+Allow user to customize colors: Caniatad i ddefnyddwyr dewis eu lliwiau
+Document background: Cefndir y ddogfen
+Select: Dewis
+Document title: Teitl y Ddogfen
+Document text: Testun y Ddogfen
+Table grid color: Lliw grid y tabl
+Table header background: Lliw cefndir pennawd y tabl
+Table header text: Lliw testun y pennawd i'r tabl
+Table cell background: Lliw cefndir celloedd y tabl
+Table cell background for current day: Lliw cefndir celloedd y tabl am y diwrnod presennol
+Table cell background for weekends: Lliw cefndir celloedd y tabl dros y penwythnosau
+Event popup background: Lliw cefndir 'popup'
+Event popup text: Lliw testun 'popup'
+
+
+###############################################
+# Page: activity_log.php
+#
+Activity Log: Log Actifedd
+User: Defnyddiwr
+Calendar: Calendr
+Date: Dyddiad
+Time: Amser
+Event: Digwyddiad
+Action: Gweithred
+Event created: Ychwanegwyd Digwyddiad
+Event approved: Cymeradwywyd Digwyddiad
+Event rejected: Gwrthodwyd Digwyddiad
+Event updated: Diweddarwyd Digwyddiad
+Event deleted: Diddymwyd Digwyddiad
+Notification sent: Anfonwyd Hysbysiad
+Reminder sent: Anfonwyd Atgofiad
+Database error: Gwall cronfa ddata
+Previous: Blaenorol
+Next: Nesaf
+
+
+###############################################
+# Page: add_entry.php
+#
+Invalid entry id: ID annilys 
+This is a private event and may not be added to your calendar.: Y mae hwn yn ddigwyddiad preifat a ni chaniateir i chi ei ychwanegu at eich calendr.
+Error adding event: Camgymeriad wrth ychwanegu digwyddiad
+
+
+###############################################
+# Page: admin_handler.php
+#
+Error: Camgymeriad
+The following error occurred: Mae'r camgymeriad canlynol wedi digwydd
+
+
+###############################################
+# Page: approve_entry.php
+#
+Error approving event: Camgymeriad wrth cymeradwyo digwyddiad
+
+
+###############################################
+# Page: category.php
+#
+Add: Ychwanegu
+Category Name: Enw Dosbarth
+Global: Hollfydol
+Delete: Dileu
+Are you sure you want to delete this entry?: A ydych yn siwr eich bod eisiau dileu y digwyddiad yma?
+Add New Category: Ychwanegwch Dosbarth newydd 
+
+
+###############################################
+# Page: category_handler.php
+#
+
+
+###############################################
+# Page: datesel.php
+#
+
+
+###############################################
+# Page: day.php
+#
+#
+# << MISSING >>
+# Admin mode:
+#
+# << MISSING >>
+# Assistant mode:
+Generate printer-friendly version: Cynhyrchu fersiwn addas i'w brintio
+Printer Friendly: Addas i'w brintio
+
+
+###############################################
+# Page: del_entry.php
+#
+Hello: Helo
+An appointment has been canceled for you by: Mae digwyddiad wedi ei dileu drostoch gan
+The subject was: Y pwnc oedd
+Notification: Rhybydd
+
+
+###############################################
+# Page: edit_entry.php
+#
+Edit Entry: Newid Digwyddiad
+Add Entry: Ychwanegu Digwyddiad
+brief-description-help: Defnyddir hwn i roi disgrifiad byr (tua 20 llythyren) o'r digwyddiad.  Dangosir y wybodaeth yn uniongyrchol ar y calendr.
+Brief Description: Disgrifiad Byr
+full-description-help: Defnyddir hwn i gwblhau manylion y digwyddiad.  Mi all y defnyddiwr weld y wybodaeth yma wrth iddynt glicio ar y digwyddiad neu trwy symud y llygoden dros y digwyddiad.
+Full Description: Disgrifiad llawn
+date-help: Mae hwn yn dynodi dyddiad y digwyddiad.
+time-help: Mae hwn yn dynodi amser y digwyddiad.<br /><i>Mi ellir gadael hwn yn wag.</i>
+am: am
+pm: pm
+#
+# << MISSING >>
+# Untimed event:
+#
+# << MISSING >>
+# Timed event:
+#
+# << MISSING >>
+# All day event:
+duration-help: Mae hwn yn dynodi (mewn Oriau:Munudau) parhad y digwyddiad. <br /><i>Mi ellir gadael hwn yn wag.</i>
+Duration: Parhad
+hours: awr
+priority-help: Mae hwn yn dynodi blaenoriaeth y digwyddiad. Mi fydd digwyddiadau gyda blaenoriaeth uchel yn cael ei dangos gyda llythrennau bras.
+Priority: Blaenoriaeth
+Low: Isel
+Medium: Canolig
+High: Uchel
+access-help: Mae hwn yn dynodi lefel caniatad y digwyddiad.<br /> <i>Cyhoeddus</i>: Mae pawb yn gallu gweld holl fanylion y digwyddiad.  <br /><i>Cyfrinachol</i>: Gall eraill gweld fod ganddoch digwyddiad am amser a dyddiad penodol, ond nid ydynt yn gallu gweld y manylion. 
+Access: Caniatad
+Public: Cyhoeddus
+Confidential: Cyfrinachol
+category-help: Mae hwn yn dynodi dosbarth y digwyddiad.
+Category: Dosbarth
+None: Dim 
+days: diwrnod
+before event: cyn y digwyddiad
+participants-help: Rhestrir y defnyddwyr sydd a cofnod o'r digwyddiad.
+Participants: Cyfranogwyr
+#
+# << MISSING >>
+# external-participants-help:
+# English text: Specifies a list of participants for the event that are not calendar users.  The users should be listed one per line and can include an email address.  If an email address is specified, the user is eligible to receive notications and reminders.
+#
+#
+# << MISSING >>
+# External Participants:
+repeat-type-help: Dewiswch pa more aml y dylsai'r digwyddiad ailgyflawni. Wrth dewis <i>Misol (wrth dydd o'r wythnos)</i> mi all digwyddiad ailgyflawni ar y Llun 1af o'r mis, 3ydd Iau o'r mis, ayyb.  Wrth dewis <i>Misol (wrth dyddiad)</i> mi all digwyddiad ailgyflawni ar yr un diwrnod o'r mis (e.e. y 3ydd) 
+Repeat Type: Amlder Ailgyflawni
+Daily: Dyddiol
+Weekly: Wythnosol
+Monthly: Misol
+by day: wrth dydd yr wythnos
+#
+# << MISSING >>
+# by day (from end):
+by date: wrth dyddiad
+Yearly: Blynyddol
+repeat-end-date-help: Mae hwn yn dynodi y dyddiad olaf y gall y digwyddiad ailgyflawni hyd iddi.
+Repeat End Date: Diwrnod olaf a ailgyflawnir
+Use end date: Mae angen diwrnod diwethaf
+repeat-day-help: Mae hwn yn dynodi pa ddiwrnodau o'r wythnos y bydd y digwyddiad yn ailgyflawni arnynt.  Defnyddir hwn ond pan fod <i>Amlder Ailgyflawni</i> wedi ei osod i <i>Wythnosol</i>.
+Repeat Day: Diwrnod yr ailgyflawniad
+for weekly: os wythnosol
+Tuesday: Mawrth
+Wednesday: Mercher
+Thursday: Iau
+Friday: Gwener
+Saturday: Sadwrn
+repeat-frequency-help: Mae hwn yn dynodi pa mor aml bydd y digwyddiad yn ailgyflawni. Wrth dewis 1 mi fydd y digwyddiad yn digwydd pob tro. Wrth dewis 2 mi fydd y digwyddiad yn digwydd bob yn ail wythnos (os yw <i>Amlder Ailgyflawni</i> wedi ei osod i <i>Wythnosol</i>), neu bob yn ail mis (os yw <i>Amlder Ailgyflawni</i> wedi ei osod i <i>Misol</i>), ayyb.
+Frequency: Amlder
+Delete entry: Dileu digwyddiad
+You are not authorized to edit this entry: Nid oes ganddo chi yr awdurdod i newid y digwyddiad yma
+
+
+###############################################
+# Page: edit_layer.php
+#
+Edit Layer: Newid Haen
+Add Layer: Ychwanegu Haen
+Source: Ffynhonell
+Color: Lliw
+Duplicates: Dyblygiadau
+Show layer events that are the same as your own: Dangoser digwyddiadau haen sydd yn union fel rhai eich hunan
+Are you sure you want to delete this layer?: A ydych y siwr eich bod eisiau dileu'r haen yma?
+Delete layer: Dileu haen
+
+
+###############################################
+# Page: edit_layer_handler.php
+#
+You cannot create a layer for yourself: Ni allwch greu haen i'ch digwyddiadau chi
+You can only create one layer for each user: Allwch ond creu un haen i pob defnyddiwr
+
+
+###############################################
+# Page: edit_user.php
+#
+Edit User: Newid Defnyddiwr
+Add User: Ychwanegu Defnyddiwr
+Username: Enw Defnyddiwr
+First Name: Enw Cyntaf
+Last Name: Cyfenw
+E-mail address: Cyfeiriad E-bost
+Password: Gair Cydd
+again: eto
+Admin: Gweinyddu
+Disabled for demo: Dim yn gweithio yn yr arddangosiad
+Change Password: Newid Gair Cydd
+New Password: Gair Cydd Newydd
+Set Password: Gosod Gair Cydd
+
+
+###############################################
+# Page: edit_user_handler.php
+#
+Deleting users not supported: Ni chanieteir diddymu defnyddwyr
+The passwords were not identical: Nid yw'r geiriau cyfrin yn cyfateb
+You have not entered a password: Nid ydych wedi cynnig gair cydd
+
+
+###############################################
+# Page: export.php
+#
+Export: Allforio
+Export format: Fformat Allforio
+Palm Pilot: Palm Pilot
+Export all dates: Allforio pob dyddiad
+Start date: Dyddiad cyntaf
+End date: Dyddiad olaf
+Modified since: Newidwyd ers
+
+
+###############################################
+# Page: export_handler.php
+#
+#
+# << MISSING >>
+# export format not defined or incorrect:
+
+
+###############################################
+# Page: group_edit.php
+#
+Unnamed Group: Grwp Di-enw
+Add Group: Ychwanegu Grwp
+Edit Group: Newid Grwp
+Group name: Enw grwp
+Updated: Newidwyd
+Created by: Crewyd gan
+Users: Defnyddwyr
+
+
+###############################################
+# Page: group_edit_handler.php
+#
+#
+# << MISSING >>
+# You must specify a group name:
+
+
+###############################################
+# Page: groups.php
+#
+Add New Group: Ychwanegu Grwp Newydd
+
+
+###############################################
+# Page: icalfb.php
+#
+
+
+###############################################
+# Page: pref.php
+#
+Preferences: Hoff Dewisiadau
+to modify the preferences for the Public Access calendar: i addasu yr optiynau a ddewisir gogyfer a'r Calendr Cyhoeddus 
+#
+# << MISSING >>
+# tz-help:
+# English text: Specifies how many hours to adjust the time from server time to local time.
+#
+#
+# << MISSING >>
+# Timezone Offset:
+#
+# << MISSING >>
+# Add N hours to:
+#
+# << MISSING >>
+# Subtract N hours from:
+#
+# << MISSING >>
+# same as:
+#
+# << MISSING >>
+# server time:
+Default Category: Dosbarth Arferol
+#
+# << MISSING >>
+# When I am the boss:
+#
+# << MISSING >>
+# Email me event notification:
+#
+# << MISSING >>
+# I want to approve events:
+#
+# << MISSING >>
+# allow-remote-subscriptions-help:
+# English text: Specifies if remote users can subscribe to your calendar, allowing them to see your events in a iCal-enabled application (such as Apple's iCal or Mozilla Calendar).
+#
+#
+# << MISSING >>
+# remote-subscriptions-url-help:
+# English text: Displays the URL remote users should use to subscribe to your calendar.
+#
+#
+# << MISSING >>
+# URL:
+Sun: Sul
+Mon: Llu
+Tue: Maw
+Wed: Mer
+Thu: Iau
+Fri: Gwe
+Sat: Sad
+Save Preferences: Arbed Dewisiadau
+
+
+###############################################
+# Page: help_bug.php
+#
+Report Bug: Cofnodi Problem
+
+
+###############################################
+# Page: help_edit_entry.php
+#
+Adding/Editing Calendar Entries: Ychwanegu/Newid Digwyddiadau Calendr
+
+
+###############################################
+# Page: help_index.php
+#
+Help Index: Indecs Cymorth
+Layers: Haenau
+#
+# << MISSING >>
+# Import:
+
+
+###############################################
+# Page: help_layers.php
+#
+Layers are useful for displaying other users' events in your own calendar.  You can specifiy the user and the color the events will be displayed in.: Defnyddir haenau i ddangos digwyddiadau pobl eraill ar eich calendr. Allwch benderfynnu y defnyddwyr a ddangosir ac hefyd lliwiau testun y digwyddiadau.
+Add/Edit/Delete: Ychwanegu/Newid/Dileu
+Clicking the Edit Layers link in the admin section at the bottom of the page will allow you to add/edit/delete layers.: Wrth glicio ar y cyswllt Newid Haenau yn yr adran weinyddol ar waelod y dudalen fe ganieteir i chi ychwanegu, newid neu dileu haenau.
+Specifies the user that you would like to see displayed in your calendar.: Mae hwn yn dynodi y defnyddiwr yr hoffech dangos ei ddigwyddiadau ar eich calendr.
+The text color of the new layer that will be displayed in your calendar.: Lliw testun yr haen newydd yn cael ei ddangos ar eich calendr.
+If checked, events that are duplicates of your events will be shown.: Os dewisir, mi fydd digwyddiadau sydd yr un fath a'ch digwyddiadau chi yn cael ei dangos.
+Disabling: Anablwch
+Press the Disable Layers link in the admin section at the bottom of the page to turn off layers.: Gwasgwch y cyswllt Anablwch Haenau yn yr adran weinyddol ar waelod y tudalen i beidio a defnyddio haenau.
+Enabling: Defnyddiwch
+Press the Enable Layers link in the admin section at the bottom of the page to turn on layers.: Gwasgwch y cyswllt Defnyddiwch Haenau yn yr adran weinyddol ar waelod y tudalen er mwyn defnyddio haenau.
+
+
+###############################################
+# Page: help_admin.php
+#
+
+
+###############################################
+# Page: week.php
+#
+#
+# << MISSING >>
+# cont.:
+
+
+###############################################
+# Page: layers.php
+#
+#
+# << MISSING >>
+# to modify the layers settings for the:
+Layers are currently: Mae haenau ar hyn o bryd  
+Enabled: Ymlaen
+Disabled: Ymaith
+Disable Layers: Dim haenau
+Enable Layers: Defnyddio haenau
+Layer: Haen
+Edit layer: Newid haen
+Add layer: Ychwanegu haen
+
+
+###############################################
+# Page: layers_toggle.php
+#
+
+
+###############################################
+# Page: list_unapproved.php
+#
+View this entry: Gwyliwch y digwyddiad hwn
+Approve this entry?: Cymeradwywch y digwyddiad hwn?
+Approve/Confirm: Cymeradwywch
+Reject this entry?: Gwrthodwch y digwyddiad hwn?
+Reject: Gwrthod
+No unapproved events for: Dim digwyddiad heb cymeradwyaeth gan
+Unapproved Events: Digwyddiadau heb Cymeradwyaeth
+Public Access: Calendr Cyhoeddus
+
+
+###############################################
+# Page: view_entry.php
+#
+every: pob
+2nd: 2il
+3rd: 3ydd
+4th: 4ydd
+5th: 5ed
+1st: 1af
+#
+# << MISSING >>
+# last:
+Description: Disgrifiad
+Status: Statws
+Waiting for approval: Aros as cymeradwyaeth
+Deleted: Diddymwyd
+Rejected: Gwrthodwyd
+#
+# << MISSING >>
+# External User:
+Approve/Confirm entry: Cymeradwyo digwyddiad
+Reject entry: Gwrthod digwyddiad
+Set category: Gosod dosbarth
+Edit repeating entry for all dates: Newid digwyddiad a ail-adroddir am pob dyddiad
+Edit entry for this date: Newid digwyddiad am y dyddiad yma'n unig
+This will delete this entry for all users.: Fydd hwn yn dileu y digwyddiad dros pob defnyddiwr.
+Delete repeating event for all dates: Dileu digwyddiad a ail-adroddir am pob dyddiad
+Delete entry only for this date: Dileu digwyddiad am y dyddiad yma'n unig
+Edit entry: Newid digwyddiad
+This will delete the entry from your calendar.: Fydd hwn yn dileu y digwyddiad o'ch calendr.
+Do you want to add this entry to your calendar?: A ydych eisiau ychwanegu'r digwyddiad yma i'ch calendr?
+This will add the entry to your calendar.: Fydd hwn yn ychwanegu'r digwyddiad yma i'ch calendr.
+Add to My Calendar: Ychwanegu i Fy Nghalendr
+Email all participants: E-bost at bob aelod
+Show activity log: Dangos cofnod gweithgarwch
+Hide activity log: Cyddio cofnod gweithgarwch
+#
+# << MISSING >>
+# Export this entry to:
+
+
+###############################################
+# Page: view_v.php
+#
+
+
+###############################################
+# Page: month.php
+#
+
+
+###############################################
+# Page: pref_handler.php
+#
+
+
+###############################################
+# Page: reject_entry.php
+#
+An appointment has been rejected by: Gwrthodwyd digwyddiad gan
+The description is: Y disgrifiad yw
+Title: Calendar We
+
+
+###############################################
+# Page: search.php
+#
+Search: Chwiliad
+Advanced Search: Chwiliad Manwl
+Keywords: Allweddeiriau
+
+
+###############################################
+# Page: search_handler.php
+#
+You must enter one or more search keywords: Rhaid i chi defnyddio un neu fwy allweddeiriau chwilio
+Search Results: Canlyniadau Archwiliad
+match found: Darganfyddwyd ateb cyfatebol
+matches found: Darganfyddwyd atebion cyfatebol
+No matches found: Dim byd yn cyfateb
+
+
+###############################################
+# Page: select_user.php
+#
+View Another User's Calendar: Gwylio Calendr Defnyddiwr arall
+Go: Ewch
+
+
+###############################################
+# Page: publish.php
+#
+
+
+###############################################
+# Page: users.php
+#
+denotes administrative user: Dynoder defnyddiwr gweinyddol
+Add New User: Ychwanegu Defnyddiwr Newydd
+
+
+###############################################
+# Page: usersel.php
+#
+All: Pob
+Reset: Ail-osod
+Remove: Dileu
+Ok: Iawn
+Cancel: Dileu 
+
+
+###############################################
+# Page: import.php
+#
+#
+# << MISSING >>
+# This form will allow you to import entries from the Palm Desktop Datebook.:
+#
+# << MISSING >>
+# Exclude private records:
+#
+# << MISSING >>
+# Datebook File:
+#
+# << MISSING >>
+# This form will import vCalendar (.vcs) 1.0 events:
+#
+# << MISSING >>
+# vCal File:
+#
+# << MISSING >>
+# This form will import iCalendar (.ics) events:
+#
+# << MISSING >>
+# iCal File:
+#
+# << MISSING >>
+# Overwrite Prior Import:
+
+
+###############################################
+# Page: year.php
+#
+
+
+###############################################
+# Page: view_d.php
+#
+
+
+###############################################
+# Page: view_m.php
+#
+
+
+###############################################
+# Page: view_w.php
+#
+
+
+###############################################
+# Page: views.php
+#
+Views: Golygfeydd
+Add New View: Ychwanegu Golwg Newydd
+
+
+###############################################
+# Page: views_edit.php
+#
+Unnamed View: Golwg di-enw
+Add View: Ychwanegu Golwg
+Edit View: Newid Golwg
+View Name: Enw Golwg
+View Type: Math Golwg
+#
+# << MISSING >>
+# Week (Users horizontal):
+#
+# << MISSING >>
+# Week (Users vertical):
+#
+# << MISSING >>
+# Week (Timebar):
+#
+# << MISSING >>
+# Month (side by side):
+#
+# << MISSING >>
+# Month (on same calendar):
+
+
+###############################################
+# Page: nonusers.php
+#
+#
+# << MISSING >>
+# NONUSER_PREFIX not set:
+# English text: NONUSER_PREFIX has not been set in config.php.
+#
+#
+# << MISSING >>
+# NonUser:
+# English text: NonUser Calendars
+#
+#
+# << MISSING >>
+# Calendar ID:
+#
+# << MISSING >>
+# Add New NonUser Calendar:
+
+
+###############################################
+# Page: nonusers_handler.php
+#
+
+
+###############################################
+# Page: view_l.php
+#
+
+
+###############################################
+# Page: help_pref.php
+#
+default-category-help: Mae hwn yn dynodi pa dosbarth y bydd digwyddiad newydd yn perthyn i yn arferol.
+
+
+###############################################
+# Page: report.php
+#
+Private: Preifat
+#
+# << MISSING >>
+# Approved:
+#
+# << MISSING >>
+# Unknown:
+#
+# << MISSING >>
+# to manage reports for the Public Access calendar:
+#
+# << MISSING >>
+# Add new report:
+#
+# << MISSING >>
+# Invalid report id:
+#
+# << MISSING >>
+# Manage Reports:
+
+
+###############################################
+# Page: login.php
+#
+You must enter a login and password: Rhaid i chi cynnig mewngofnodiad a gair cydd
+Save login via cookies so I don't have to login next time: Arbedwch fy mewngofnodiad trwy 'cookies' fel nad oes raid i mi mewngofnodi y tro nesaf
+Login: Mewngofnodiad
+Access public calendar: Calendr Cyhoeddus
+cookies-note: <b>Note:</b> Mae'n hanfodol bod 'cookies' yn gweithio i'r meddalwedd yma redeg.
+
+
+###############################################
+# Page: views_edit_handler.php
+#
+#
+# << MISSING >>
+# You must specify a view name:
+
+
+###############################################
+# Page: week_details.php
+#
+New Entry: Digwyddiad newydd
+
+
+###############################################
+# Page: import_handler.php
+#
+#
+# << MISSING >>
+# Import Results:
+#
+# << MISSING >>
+# Events successfully imported:
+#
+# << MISSING >>
+# Events from prior import marked as deleted:
+#
+# << MISSING >>
+# Conflicting events:
+#
+# << MISSING >>
+# Errors:
+Back to My Calendar: Nol i Fy Nghalendr
+#
+# << MISSING >>
+# There was an error parsing the import file or no events were returned:
+#
+# << MISSING >>
+# The import file contained no data:
+The following conflicts with the suggested time: Mae'r canlynol yn gwrthdaro gyda'r amser awgrymiedig
+Unnamed Event: Digwyddiad di-enw
+Scheduling Conflict: Gwrthdrawiad Amserlen
+conflicts with the following existing calendar entries: yn gwrthdaro gyda'r digwyddiadau canlynol sydd yn bodoli eisoes
+#
+# << MISSING >>
+# Event Imported:
+
+
+###############################################
+# Page: edit_report.php
+#
+#
+# << MISSING >>
+# Tomorrow:
+#
+# << MISSING >>
+# Today:
+#
+# << MISSING >>
+# Yesterday:
+#
+# << MISSING >>
+# Day before yesterday:
+#
+# << MISSING >>
+# Next week:
+#
+# << MISSING >>
+# This week:
+#
+# << MISSING >>
+# Last week:
+#
+# << MISSING >>
+# Week before last:
+#
+# << MISSING >>
+# Next week and week after:
+#
+# << MISSING >>
+# This week and next week:
+#
+# << MISSING >>
+# Last week and this week:
+#
+# << MISSING >>
+# Last two weeks:
+#
+# << MISSING >>
+# Next month:
+#
+# << MISSING >>
+# This month:
+#
+# << MISSING >>
+# Last month:
+#
+# << MISSING >>
+# Month before last:
+#
+# << MISSING >>
+# Next year:
+#
+# << MISSING >>
+# This year:
+#
+# << MISSING >>
+# Last year:
+#
+# << MISSING >>
+# Year before last:
+#
+# << MISSING >>
+# Unnamed Report:
+#
+# << MISSING >>
+# Add Report:
+#
+# << MISSING >>
+# Edit Report:
+#
+# << MISSING >>
+# Report name:
+Current User: Defnyddiwr presennol
+#
+# << MISSING >>
+# Include link in trailer:
+#
+# << MISSING >>
+# Include standard header/trailer:
+#
+# << MISSING >>
+# Date range:
+#
+# << MISSING >>
+# Include previous/next links:
+#
+# << MISSING >>
+# Include empty dates:
+#
+# << MISSING >>
+# Template variables:
+#
+# << MISSING >>
+# Page template:
+#
+# << MISSING >>
+# Day template:
+#
+# << MISSING >>
+# Event template:
+#
+# << MISSING >>
+# Are you sure you want to delete this report?:
+
+
+###############################################
+# Page: assistant_edit.php
+#
+#
+# << MISSING >>
+# Assistants:
+#
+# << MISSING >>
+# Yours assistants:
+
+
+###############################################
+# Page: view_t.php
+#
+
+
+###############################################
+# Page: assistant_edit_handler.php
+#
+
+
+###############################################
+# Page: adminhome.php
+#
+Account: Cyfrif
+#
+# << MISSING >>
+# NonUser Calendars:
+#
+# << MISSING >>
+# Delete Events:
+#
+# << MISSING >>
+# Public Preferences:
+#
+# << MISSING >>
+# Unapproved Public Events:
+#
+# << MISSING >>
+# Administrative Tools:
+
+
+###############################################
+# Page: purge.php
+#
+#
+# << MISSING >>
+# Purging events for:
+#
+# << MISSING >>
+# Finished:
+#
+# << MISSING >>
+# Delete all events before:
+#
+# << MISSING >>
+# Check box to delete <b>ALL</b> events for a user:
+#
+# << MISSING >>
+# Are you sure you want to delete events for:
+
+
+###############################################
+# Page: help_import.php
+#
+#
+# << MISSING >>
+# Palm Desktop:
+#
+# << MISSING >>
+# It should be located in your Palm directory in <tt>datebook/datebook.dat</tt> in a subdirectory named by your username.:
+#
+# << MISSING >>
+# The following entries will not be imported:
+#
+# << MISSING >>
+# Entries older than the current date:
+#
+# << MISSING >>
+# Entries created in the Palm Desktop that have not been HotSync'd:
+#
+# << MISSING >>
+# Anything imported from Palm will be overwritten during the next import (unless the event date has passed).:
+#
+# << MISSING >>
+# Therefore, updates should be made in the Palm Desktop.:
+#
+# << MISSING >>
+# vCal:
+#
+# << MISSING >>
+# The following formats have been tested:
+#
+# << MISSING >>
+# Palm Desktop 4:
+#
+# << MISSING >>
+# Lotus Organizer 6:
+#
+# << MISSING >>
+# Microsoft Outlook 2002:
+#
+# << MISSING >>
+# iCalendar:
+#
+# << MISSING >>
+# Enabling <b>Overwrite Prior Import</b> will cause events imported previously that used the same UID as an event from the new import file to be marked as deleted.  This should allow an updated iCalendar file to be imported without creating duplicates.:
+
+
+###############################################
+# Page: edit_report_handler.php
+#
+#
+# << MISSING >>
+# Variable N not found:
+
+
+###############################################
+# Page: edit_entry_handler.php
+#
+A new appointment has been made for you by: Mae digwyddiad newydd wedi ei greu i chi gan
+An appointment has been updated by: Mae digwyddiad wedi ei newid gan
+The subject is: Y pwnc yw
+Please look on: Edrychwch ar 
+to accept or reject this appointment: i derbyn neu gwrthod y digwyddiad yma
+to view this appointment: i wylio'r digwyddiad yma
+Your suggested time of: Mae eich amser awgrymiedig o
+
+
+###############################################
+# Page: set_entry_cat.php
+#
+You have not added any categories: Nid ydych wedi ychwanegu unrhyw dosbarthiadau
+Set Category: Gosod Dosbarth
+
+
+###############################################
+# Page: edit_template.php
+#
+#
+# << MISSING >>
+# Edit Custom Script/Stylesheet:
+#
+# << MISSING >>
+# Edit Custom Header:
+#
+# << MISSING >>
+# Edit Custom Trailer:
+
+
+###############################################
+# Page: includes/trailer.php
+#
+Go to: Ewch i 
+My Calendar: Fy Nghalendr
+Logout: Allgofnodiad
+Another User's Calendar: Calendr defnyddiwr arall
+Add New Entry: Ychwanegwch digwyddiad newydd
+Manage Views: Rheolwch golygfeydd
+#
+# << MISSING >>
+# Manage calendar of:
+
+
+###############################################
+# Page: includes/connect.php
+#
+
+
+###############################################
+# Page: includes/user.php
+#
+Invalid login: Mewngofnodiad annilys
+Invalid user login: Mewngofnodiad defnyddiwr annilys 
+
+
+###############################################
+# Page: includes/site_extras.php
+#
+Send Reminder: Anfoner atgofiad
+
+
+###############################################
+# Page: includes/translate.php
+#
+
+
+###############################################
+# Page: includes/user-ldap.php
+#
+
+
+###############################################
+# Page: includes/user-nis.php
+#
+
+
+###############################################
+# Page: includes/help_trailer.php
+#
+
+
+###############################################
+# Page: includes/dbtable.php
+#
+
+
+###############################################
+# Page: includes/init.php
+#
+#
+# << MISSING >>
+# charset:
+
+
+###############################################
+# Page: includes/functions.php
+#
+This event is confidential: Mae'r digwyddiad yma yn gyfrinachol
+#
+# << MISSING >>
+# exceeds limit of XXX events per day:
+You have XXX unapproved events: Mae ganddoch XXX digwyddiad heb cymerawdyaeth
+January: Ionawr
+February: Chwefror
+March: Mawrth
+April: Ebrill
+May_: Mai
+June: Mehefin
+July: Gorffennaf
+August: Awst
+September: Medi
+October: Hydref
+November: Tachwedd
+Jan: Ionawr
+Feb: Chwefror
+Mar: Mawrth
+Apr: Ebrill
+May: Mai
+Jun: Mehefin
+Jul: Gorffennaf
+Aug: Awst
+Sep: Medi
+Oct: Hydref
+Nov: Tachwedd
+Dec: Rha
+
+
+###############################################
+# Page: includes/js/admin.php
+#
+Server URL is required: Mae angen URL y gweinydd
+Server URL must end with '/': Rhaid i URL y gweinydd orffen gyda '/'
+Invalid color for document background: Lliw annerbyniol fel cefndir i'r ddogfen
+Invalid color for document title: Lliw annerbyniol fel teitl y ddogfen
+Invalid color for table cell background: Lliw annerbyniol fel cefndir y gell tabl
+Invalid color for table grid: Lliw annerbyniol fel grid y tabl
+Invalid color for table header background: Lliw annerbyniol fel cefndir pennawd y tabl
+Invalid color for table text background: Lliw annerbyniol fel cefndir testun y table
+Invalid color for event popup background: Lliw annerbyniol fel cefndir digwyddiad ar ffurf popup
+Invalid color for event popup text: Lliw annerbyniol fel testun digwyddiad ar ffurf popup
+Invalid color for table cell background for today: Lliw annerbyniol fel cefndir cell tabl heddiw
+Color format should be '#RRGGBB': Mae angen fformat lliw megis '#RRGGBB'
+
+
+###############################################
+# Page: includes/js/edit_entry.php
+#
+You have not entered a Brief Description: Mae angen Disgrifiad Byr
+You have not entered a valid time of day: Nid yw'r amser yr ydych wedi dynodi yn gywir
+The time you have entered begins before your preferred work hours.  Is this correct?: Mae'r amser yr ydych wedi dynodi yn cychwyn cyn yr oriau gwaith yr ydych wedi dewis. A yw hyn yn gywir?
+
+
+###############################################
+# Page: includes/js/edit_layer.php
+#
+Invalid color: Lliw annerbyniol
+
+
+###############################################
+# Page: includes/js/pref.php
+#
+
+
+###############################################
+# Page: tools/send_reminders.php
+#
+This is a reminder for the event detailed below.: Y mae hwn yn eich atgoffa o'r digwydiad gyda'r manylion isod.
+Reminder: Atgofiad

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/upcoming.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/upcoming.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/upcoming.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,260 @@
+<?php
+/*
+ * $Id: upcoming.php,v 1.18.2.2 2006/03/17 00:53:23 cknudsen Exp $
+ *
+ * Description:
+ * This script is intended to be used outside of normal WebCalendar
+ * use, typically as an iframe in another page.
+ *
+ * You must have public access enabled in System Settings to use this
+ * page (unless you modify the $public_must_be_enabled setting below
+ * in this file).
+ *
+ * Typically, this is how you would reference this page from another:
+ *
+ * <iframe height="250" width="300"
+ *  scrolling="yes" src="upcoming.php"></iframe>
+ *
+ * By default (if you do not edit this file), events for the public
+ * calendar will be loaded for either:
+ *   - the next 30 days
+ *   - the next 10 events
+ *
+ * Input parameters:
+ * You can override settings by changing the URL parameters:
+ *   - days: number of days ahead to look for events
+ *   - cat_id: specify a category id to filter on
+ *   - user: login name of calendar to display (instead of public
+ *     user), if allowed by System Settings.  You must have the
+ *     following System Settings configured for this:
+ *       Allow viewing other user's calendars: Yes
+ *       Public access can view others: Yes
+ *
+ * Security:
+ * TBD
+ */
+
+include "includes/config.php";
+include "includes/php-dbi.php";
+include "includes/functions.php";
+include "includes/$user_inc";
+include "includes/connect.php";
+
+load_global_settings ();
+
+/*
+ *
+ * Configurable settings for this file.  You may change the settings
+ * below to change the default settings.
+ * This settings will likely move into the System Settings in the
+ * web admin interface in a future release.
+ *
+ */
+
+// Change this to false if you still want to access this page even
+// though you do not have public access enabled.
+$public_must_be_enabled = true;
+
+// Do we include a link to view the event?  If so, what target
+// should we use.
+$display_link = true;
+$link_target = '_top';
+
+
+// Default time window of events to load
+// Can override with "upcoming.php?days=60"
+$numDays = 30;
+
+// Max number of events to display
+$maxEvents = 10;
+
+// Login of calendar user to use
+// '__public__' is the login name for the public user
+$username = '__public__';
+
+// Allow the URL to override the user setting such as
+// "upcoming.php?user=craig"
+$allow_user_override = false;
+
+// Load layers
+$load_layers = true;
+
+// Load just a specified category (by its id)
+// Leave blank to not filter on category (unless specified in URL)
+// Can override in URL with "upcoming.php?cat_id=4"
+$cat_id = '';
+
+// End configurable settings...
+
+// Set for use elsewhere as a global
+$login = $username;
+// Load user preferences for DISPLAY_UNAPPROVED
+load_user_preferences ();
+$get_unapproved = ! empty ( $DISPLAY_UNAPPROVED ) && $DISPLAY_UNAPPROVED == 'Y';
+
+include "includes/translate.php";
+
+
+if ( $public_must_be_enabled && $public_access != 'Y' ) {
+  $error = translate ( "You are not authorized" ) . ".";
+}
+
+if ( $allow_user_override ) {
+  $u = getValue ( "user", "[A-Za-z0-9_\.=@,\-]+", true );
+  if ( ! empty ( $u ) ) {
+    $username = $u;
+    $login = $u;
+    // We also set $login since some functions assume that it is set.
+  }
+}
+
+$cat_id = '';
+if ( $categories_enabled == 'Y' ) {
+  $x = getIntValue ( "cat_id", true );
+  if ( ! empty ( $x ) ) {
+    $cat_id = $x;
+  }
+}
+
+if ( $load_layers ) {
+  load_user_layers ( $username );
+}
+
+//load_user_categories ();
+
+// Calculate date range
+$date = getIntValue ( "date", true );
+if ( empty ( $date ) || strlen ( $date ) != 8 ) {
+  // If no date specified, start with today
+  $date = date ( "Ymd" );
+}
+$thisyear = substr ( $date, 0, 4 );
+$thismonth = substr ( $date, 4, 2 );
+$thisday = substr ( $date, 6, 2 );
+
+$startTime = mktime ( 3, 0, 0, $thismonth, $thisday, $thisyear );
+
+$x = getIntValue ( "days", true );
+if ( ! empty ( $x ) ) {
+  $numDays = $x;
+}
+// Don't let a malicious user specify more than 365 days
+if ( $numDays > 365 ) {
+  $numDays = 365;
+}
+$endTime = mktime ( 3, 0, 0, $thismonth, $thisday + $numDays,
+  $thisyear );
+$endDate = date ( "Ymd", $endTime );
+
+
+/* Pre-Load the repeated events for quckier access */
+$repeated_events = read_repeated_events ( $username, $cat_id, $date );
+
+/* Pre-load the non-repeating events for quicker access */
+$events = read_events ( $username, $date, $endDate, $cat_id );
+
+// Print header without custom header and no style sheet
+if ( ! empty ( $LANGUAGE ) ) {
+  $charset = translate ( "charset" );
+  $lang = languageToAbbrev ( ( $LANGUAGE == "Browser-defined" || 
+    $LANGUAGE == "none" )? $lang : $LANGUAGE );
+  if ( $charset != "charset" ) {
+    echo "<?xml version=\"1.0\" encoding=\"$charset\"?>\n" .
+      "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" " .
+      "\"DTD/xhtml1-transitional.dtd\">\n" .
+      "<html xmlns=\"http://www.w3.org/1999/xhtml\" " .
+      "xml:lang=\"$lang\" lang=\"$lang\">\n" .
+      "<head>\n" .
+      "<meta http-equiv=\"Content-Type\" content=\"text/html; " .
+      "charset=$charset\" />\n";
+  } else {
+    echo "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n" .
+      "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" " .
+      "\"DTD/xhtml1-transitional.dtd\">\n" .
+      "<html xmlns=\"http://www.w3.org/1999/xhtml\" " .
+      "xml:lang=\"en\" lang=\"en\">\n" .
+      "<head>\n";
+  }
+} else {
+  echo "<html>\n";
+  $charset = "iso-8859-1";
+}
+echo "<title>".translate($application_name)."</title>\n";
+ 
+?>
+</head>
+<body>
+<?php
+if ( ! empty ( $error ) ) {
+  echo "<h2>" . translate ( "Error" ) .
+    "</h2>\n" . $error;
+  echo "\n<br /><br />\n</body></html>";
+  exit;
+}
+print "<dl>\n";
+
+print "<!-- \nstartTime: $startTime\nendTime: $endTime\nstartDate: " .
+  "$date\nnumDays: $numDays\nuser: $username\nevents: " . 
+  count ( $events ) . "\nrepeated_events: " . 
+  count ( $repeated_events ) . " -->\n";
+
+$numEvents = 0;
+for ( $i = $startTime; date ( "Ymd", $i ) <= date ( "Ymd", $endTime ) &&
+  $numEvents < $maxEvents; $i += ( 24 * 3600 ) ) {
+  $d = date ( "Ymd", $i );
+  $entries = get_entries ( $username, $d, $get_unapproved );
+  $rentries = get_repeating_entries ( $username, $d, $get_unapproved );
+  print "<!-- $d " . count ( $entries ) . "/" . count ( $rentries ) . " -->\n";
+
+  if ( count ( $entries ) > 0 || count ( $rentries ) > 0 ) {
+    print "<!-- XXX -->\n";
+    print "<dt>" . date_to_str ( $d ) . "</dt>\n<dd>";
+    for ( $j = 0; $j < count ( $entries ) && $numEvents < $maxEvents; $j++ ) {
+      print_upcoming_event ( $entries[$j] );
+      $numEvents++;
+    }
+    for ( $j = 0; $j < count ( $rentries ) && $numEvents < $maxEvents; $j++ ) {
+      print_upcoming_event ( $rentries[$j] );
+      $numEvents++;
+    }
+    print "</dd>\n";
+  }
+}
+
+print "</dl>\n";
+
+print "</body>\n</html>";
+
+
+// Print the details of an upcoming event
+function print_upcoming_event ( $e ) {
+  global $display_link, $link_target, $server_url, $charset;
+
+  if ( $e['cal_access'] == 'P' ) {
+    if ( $display_link && ! empty ( $server_url ) ) {
+      print "<a title=\"" . 
+        $e['cal_name'] . "\" href=\"" . 
+        $server_url . "view_entry.php?id=" . 
+        $e['cal_id'] . "&date=" . 
+        $e['cal_date'] . "\"";
+      if ( ! empty ( $link_target ) ) {
+        print " target=\"$link_target\"";
+      }
+      print ">";
+    }
+    print $e['cal_name'];
+  } else {
+    print "[" . translate("Confidential") . "]";
+  }
+
+  if ( $display_link && ! empty ( $server_url ) ) {
+    print "</a>";
+  }
+  if ( $e['cal_duration'] == 24 * 60 ) {
+    print " (" . translate("All day event") . ")\n";
+  } else if ( $e['cal_time'] != -1 ) {
+    print " (" . display_time ( $e['cal_time'] ) . ")\n";
+  }
+  print "<br />\n";
+}
+?>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/users.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/users.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/users.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,111 @@
+<?php
+/*
+	NOTE:
+	There are THREE components that make up the functionality of users.php.
+	1. users.php
+		- contains the tabs
+		- lists users
+		- has an iframe for adding/editing users
+		- include statements for groups.php and nonusers.php
+	2. edit_user.php
+		- the contents of the iframe (i.e. a form for adding/editing users)
+	3. edit_user_handler.php
+		- handles form submittal from edit_user.php
+		- provides user with confirmation of successful operation
+		- refreshes the parent frame (users.php)
+
+	This structure is mirrored for groups & nonusers
+*/
+
+/* $Id $ */
+
+include_once 'includes/init.php';
+
+if ( empty ( $login) || $login == "__public__" ) {
+  // do not allow public access
+  do_redirect ( empty ( $STARTVIEW ) ? "month.php" : "$STARTVIEW" );
+  exit;
+}
+
+$INC = array('js/users.php','js/visible.php');
+print_header($INC);
+
+//if ( ! $is_admin ) {
+//echo "<h2>" . translate("Error") . "</h2>\n" . 
+//  translate("You are not authorized") . ".\n";
+//  echo "</body>\n</html>";
+//  exit;
+//}
+?>
+<a title="<?php etranslate("Admin") ?>" class="nav" href="adminhome.php">« <?php etranslate("Admin") ?></a><br /><br />
+
+<!-- TABS -->
+<div id="tabs">
+	<span class="tabfor" id="tab_users"><a href="#tabusers" onclick="return showTab('users')"><?php 
+		if ($is_admin) {
+			echo translate("Users");
+		} else {
+			echo translate("Account");
+		}
+	?></a></span>
+	<?php if ($groups_enabled == "Y" && $is_admin) { ?>
+		<span class="tabbak" id="tab_groups"><a href="#tabgroups" onclick="return showTab('groups')"><?php etranslate("Groups")?></a></span>
+	<?php } 
+	if ($nonuser_enabled == 'Y' && $is_admin) { ?>
+		<span class="tabbak" id="tab_nonusers"><a href="#tabnonusers" onclick="return showTab('nonusers')"><?php etranslate("NonUser Calendars")?></a></span>
+	<?php } ?>
+</div>
+
+<!-- TABS BODY -->
+<div id="tabscontent">
+	<!-- USERS -->
+	<a name="tabusers"></a>
+	<div id="tabscontent_users">
+	<?php if ( $is_admin ) { ?>
+		<?php
+			if ( $admin_can_add_user )
+				echo "<a title=\"" . 
+					translate("Add New User") . "\" href=\"edit_user.php\" target=\"useriframe\" onclick=\"javascript:show('useriframe');\">" . 
+					translate("Add New User") . "</a><br />\n";
+		?>
+		<ul>
+			<?php
+				$userlist = user_get_users ();
+				for ( $i = 0; $i < count ( $userlist ); $i++ ) {
+					if ( $userlist[$i]['cal_login'] != '__public__' ) {
+						echo "<li><a title=\"" . 
+							$userlist[$i]['cal_fullname'] . "\" href=\"edit_user.php?user=" . 
+							$userlist[$i]["cal_login"] . "\" target=\"useriframe\" onclick=\"javascript:show('useriframe');\">";
+						echo $userlist[$i]['cal_fullname'];
+						echo "</a>";
+						if (  $userlist[$i]["cal_is_admin"] == 'Y' )
+							echo " <abbr title=\"" . translate("denotes administrative user") . "\">*</abbr>";
+						echo "</li>\n";
+					}
+				}
+			?>
+		</ul>
+	* <?php etranslate("denotes administrative user")?><br />
+
+		<?php 
+			echo "<iframe " .
+				" name=\"useriframe\" id=\"useriframe\" style=\"width:90%;border-width:0px; height:280px;\"></iframe>";
+		?>
+<?php } else { ?>
+<iframe src="edit_user.php" name="accountiframe" id="accountiframe" style="width:90%;border-width:0px; height:210px;\"></iframe>
+<?php } ?>
+</div>
+
+<?php 
+	if ($groups_enabled == "Y" && $is_admin) { 
+		include_once 'groups.php';
+	} 
+	if ($nonuser_enabled == 'Y' && $is_admin) {
+		include_once 'nonusers.php';
+	}
+?>
+</div>
+
+<?php print_trailer(); ?>
+</body>
+</html>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/usersel.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/usersel.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/usersel.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,105 @@
+<?php
+include_once 'includes/init.php';
+
+// input args in URL
+// users: list of comma-separated users
+// form: name of form on parent page
+// listid: element id of user selection object in form
+//   ... to be used like form.elements[$listid]
+if ( empty ( $form ) ) {
+  echo "Program Error: No form specified!"; exit;
+}
+if ( empty ( $listid ) ) {
+  echo "Program Error: No listid specified!"; exit;
+}
+
+// parse $users
+$exp = split ( ",", $users );
+$selected = array ();
+for ( $i = 0; $i < count ( $exp ); $i++ ) {
+  $selected[$exp[$i]] = 1;
+}
+
+// load list of groups
+if ( $user_sees_only_his_groups == "Y" ) {
+  $sql =
+    "SELECT webcal_group.cal_group_id, webcal_group.cal_name " .
+    "FROM webcal_group, webcal_group_user " .
+    "WHERE webcal_group.cal_group_id = webcal_group_user.cal_group_id " .
+    "AND webcal_group_user.cal_login = '$login' " .
+    "ORDER BY webcal_group.cal_name";
+} else {
+  // show all groups
+  $sql = "SELECT cal_group_id, cal_name FROM webcal_group " .
+    "ORDER BY cal_name";
+}
+
+$res = dbi_query ( $sql );
+$groups = array ();
+if ( $res ) {
+  while ( $row = dbi_fetch_row ( $res ) ) {
+    $groups[] = array (
+      "cal_group_id" => $row[0],
+      "cal_name" => $row[1]
+      );
+  }
+  dbi_free_result ( $res );
+}
+
+$INC = array('js/usersel.php');
+print_header($INC,'','',true);
+?>
+
+<center>
+<form action="#" name="userselform">
+<table style="border-width:0px; width:100%;">
+<tr><td style="vertical-align:top;">
+<b><?php etranslate("Users"); ?>:</b><br />
+<select name="users" size="15" multiple="multiple">
+<?php
+
+$users = get_my_users ();
+if ($nonuser_enabled == "Y" ) {
+  $nonusers = get_nonuser_cals ();
+  $users = ($nonuser_at_top == "Y") ? array_merge($nonusers, $users) : array_merge($users, $nonusers);
+}
+
+for ( $i = 0; $i < count ( $users ); $i++ ) {
+  $u = $users[$i]['cal_login'];
+  echo "<option value=\"$u\"";
+  if ( ! empty ( $selected[$u] ) )
+    echo " selected=\"selected\"";
+  echo ">" . $users[$i]['cal_fullname'] . "</option>\n";
+}
+?>
+</select><br />
+<input type="button" value="<?php etranslate("All");?>" onclick="selectAll()" />
+<input type="button" value="<?php etranslate("None");?>" onclick="selectNone()" />
+<input type="reset" value="<?php etranslate("Reset");?>" />
+</td>
+
+<td valign="top">
+<b><?php etranslate("Groups"); ?>:</b><br />
+<select name="groups" size="15">
+<?php
+for ( $i = 0; $i < count ( $groups ); $i++ ) {
+  echo "<option value=\"" . $groups[$i]['cal_group_id'] .
+      "\">" . $groups[$i]['cal_name'] . "</option>\n";
+}
+?>
+</select><br />
+<input type="button" value="<?php etranslate("Add");?>" onclick="selectGroupMembers();" />
+<input type="button" value="<?php etranslate("Remove");?>" onclick="deselectGroupMembers();" />
+</td></tr>
+
+<tr><td style="text-align:center;" colspan="2">
+<br /><br />
+<input type="button" value="<?php etranslate("Ok");?>" onclick="OkButton()" />
+<input type="button" value="<?php etranslate("Cancel");?>" onclick="window.close()" />
+</td></tr>
+
+</table>
+
+<?php print_trailer ( false, true, true ); ?>
+</body>
+</html>
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/view_d.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/view_d.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/view_d.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,181 @@
+<?php
+/*
+ * $Id: view_d.php,v 1.38 2005/03/06 23:06:20 umcesrjones Exp $
+ *
+ * Page Description:
+ * Display a timebar view of a single day.
+ *
+ * Input Parameters:
+ * id (*) - specify view id in webcal_view table
+ * date - specify the starting date of the view.
+ *   If not specified, current date will be used.
+ * friendly - if set to 1, then page does not include links or
+ *   trailer navigation.
+ * (*) required field
+ *
+ * Security:
+ * Must have "allow view others" enabled ($allow_view_other) in
+ *   System Settings unless the user is an admin user ($is_admin).
+ * If the view is not global, the user must be owner of the view.
+ * If the view is global, then and user_sees_only_his_groups is
+ * enabled, then we remove users not in this user's groups
+ * (except for nonuser calendars... which we allow regardless of group).
+ */
+//$start = microtime();
+
+include_once 'includes/init.php';
+
+$error = "";
+// Don't allow users to use this feature if "allow view others" is
+// disabled.
+if ( $allow_view_other == "N" && ! $is_admin ) {
+  // not allowed...
+  send_to_preferred_view ();
+}
+
+if ( empty ( $id ) ) {
+  do_redirect ( "views.php" );
+}
+
+// Find view name in $views[]
+$view_name = "";
+for ( $i = 0; $i < count ( $views ); $i++ ) {
+  if ( $views[$i]['cal_view_id'] == $id ) {
+    $view_name = $views[$i]['cal_name'];
+  }
+}
+
+// If view_name not found, then the specified view id does not
+// belong to current user. 
+if ( empty( $view_name ) ) {
+  $error = translate ( "You are not authorized" );
+}
+
+$INC = array ( 'js/view_d.php' );
+print_header ( $INC );
+
+// get users in this view
+$res = dbi_query (
+  "SELECT cal_login FROM webcal_view_user WHERE cal_view_id = $id" );
+$participants = array ();
+$all_users = false;
+if ( $res ) {
+  while ( $row = dbi_fetch_row ( $res ) ) {
+    $participants[] = $row[0];
+    if ( $row[0] == "__all__" )
+      $all_users = true;
+  }
+  dbi_free_result ( $res );
+} else {
+  $error = translate ( "Database error" ) . ": " . dbi_error ();
+}
+
+if ( $all_users ) {
+  $participants = array ();
+  $users = get_my_users ();
+  for ( $i = 0; $i < count ( $users ); $i++ ) {
+    $participants[] = $users[$i]['cal_login'];
+  }
+} else {
+  // Make sure this user is allowed to see all users in this view
+  // If this is a global view, it may include users that this user
+  // is not allowed to see.
+  if ( ! empty ( $user_sees_only_his_groups ) &&
+    $user_sees_only_his_groups == 'Y' ) {
+    $myusers = get_my_users ();
+    if ( ! empty ( $nonuser_enabled ) && $nonuser_enabled == "Y" ) {
+      $myusers = array_merge ( $myusers, get_nonuser_cals () );
+    }
+    $userlookup = array ();
+    for ( $i = 0; $i < count ( $myusers ); $i++ ) {
+      $userlookup[$myusers[$i]['cal_login']] = 1;
+    }
+    $newlist = array ();
+    for ( $i = 0; $i < count ( $participants ); $i++ ) {
+      if ( ! empty ( $userlookup[$participants[$i]] ) )
+        $newlist[] = $participants[$i];
+    }
+    $participants = $newlist;
+  }
+}
+if ( count ( $participants ) == 0 ) {
+  // This could happen if user_sees_only_his_groups  = Y and
+  // this user is not a member of any  group assigned to this view
+  $error = translate ( "No users for this view" );
+}
+
+if ( ! empty ( $error ) ) {
+  echo "<h2>" . translate ( "Error" ) .
+    "</h2>\n" . $error;
+  print_trailer ();
+  exit;
+}
+
+set_today($date);
+if (!$date) {
+  $date = $thisdate;
+}
+
+$wday = strftime ( "%w", mktime ( 2, 0, 0, $thismonth, $thisday, $thisyear ) );
+$now = mktime ( 2, 0, 0, $thismonth, $thisday, $thisyear );
+$nowYmd = date ( "Ymd", $now );
+
+$next = mktime ( 2, 0, 0, $thismonth, $thisday + 1, $thisyear );
+$nextyear = date ( "Y", $next );
+$nextmonth = date ( "m", $next );
+$nextday = date ( "d", $next );
+$nextdate = sprintf ( "%04d%02d%02d", $nextyear, $nextmonth, $nextday );
+
+$prev = mktime ( 2, 0, 0, $thismonth, $thisday - 1, $thisyear );
+$prevyear = date ( "Y", $prev );
+$prevmonth = date ( "m", $prev );
+$prevday = date ( "d", $prev );
+$prevdate = sprintf ( "%04d%02d%02d", $prevyear, $prevmonth, $prevday );
+
+$thisdate = sprintf ( "%04d%02d%02d", $thisyear, $thismonth, $thisday );
+?>
+
+<div style="border-width:0px; width:99%;">
+<a title="<?php etranslate("Previous")?>" class="prev" href="view_d.php?id=
+<?php echo $id . "&date=" . $prevdate?>"><img src="leftarrow.gif" 
+  class="prevnext" alt="<?php etranslate("Previous")?>" /></a>
+
+<a title="<?php etranslate("Next")?>" class="next" href="view_d.php?id=
+<?php echo $id . "&date=" . $nextdate?>"><img src="rightarrow.gif" 
+  class="prevnext" alt="<?php etranslate("Next")?>" /></a>
+<div class="title">
+<span class="date"><?php 
+  printf ( "%s, %s %d, %d", weekday_name ( $wday ),
+    month_name ( $thismonth - 1 ), $thisday, $thisyear ); 
+?></span><br />
+<span class="viewname"><?php echo $view_name; ?></span>
+</div></div>
+
+<?php
+daily_matrix($date,$participants);
+?>
+<br />
+
+<!-- Hidden form for booking events -->
+<form action="edit_entry.php" method="post" name="schedule">
+<input type="hidden" name="date" value="
+  <?php echo $thisyear.$thismonth.$thisday;?>" />
+<input type="hidden" name="defusers" value="
+  <?php echo implode ( ",", $participants ); ?>" />
+<input type="hidden" name="hour" value="" />
+<input type="hidden" name="minute" value="" />
+</form>
+
+<?php
+echo "<br /><a title=\"" . translate ( "Generate printer-friendly version" ) . 
+  "\" class=\"printer\" href=\"view_d.php?id=$id&";
+echo ( empty ( $u_url ) ? '' : $u_url ) . "date=$nowYmd";
+echo ( empty ( $caturl ) ? '' : $caturl );
+echo "&friendly=1\" target=\"cal_printer_friendly\" " .
+  "onmouseover=\"window.status='" .
+  translate ( "Generate printer-friendly version" ) .
+  "'\">[" . translate ( "Printer Friendly" ) . "]</a>";
+
+print_trailer ();?>
+</body>
+</html>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/view_entry.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/view_entry.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/view_entry.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,968 @@
+<?php
+/*
+ * $Id: view_entry.php,v 1.68.2.2 2005/08/10 14:35:15 cknudsen Exp $
+ *
+ * Description:
+ * Presents page to view an event with links to edit, delete
+ * confirm, copy, add event
+ *
+ * Input Parameters:
+ * id (*) - cal_id of requested event
+ * date  - yyyymmdd format of requested event
+ * user  - user to display
+ * (*) required field
+ */
+include_once 'includes/init.php';
+include_once 'includes/site_extras.php';
+
+// make sure this user is allowed to look at this calendar.
+$can_view = false;
+$is_my_event = false;
+
+if ( $is_admin || $is_nonuser_admin || $is_assistant ) {
+  $can_view = true;
+} 
+
+$error = '';
+
+if ( empty ( $id ) || $id <= 0 || ! is_numeric ( $id ) ) {
+  $error = translate ( "Invalid entry id" ) . "."; 
+}
+
+if ( empty ( $error ) ) {
+  // is this user a participant or the creator of the event?
+  $sql = "SELECT webcal_entry.cal_id FROM webcal_entry, " .
+    "webcal_entry_user WHERE webcal_entry.cal_id = " .
+    "webcal_entry_user.cal_id AND webcal_entry.cal_id = $id " .
+    "AND (webcal_entry.cal_create_by = '$login' " .
+    "OR webcal_entry_user.cal_login = '$login')";
+  $res = dbi_query ( $sql );
+  if ( $res ) {
+    $row = dbi_fetch_row ( $res );
+    if ( $row && $row[0] > 0 ) {
+      $can_view = true;
+      $is_my_event = true;
+    }
+    dbi_free_result ( $res );
+  }
+
+  if ( ($login != "__public__") && ($public_access_others == "Y") ) {
+    $can_view = true;
+  }
+
+  if ( ! $can_view ) {
+    $check_group = false;
+    // if not a participant in the event, must be allowed to look at
+    // other user's calendar.
+    if ( $login == "__public__" ) {
+      if ( $public_access_others == "Y" ) {
+        $check_group = true;
+      }
+    } else {
+      if ( $allow_view_other == "Y" ) {
+        $check_group = true;
+      }
+    }
+    // If $check_group is true now, it means this user can look at the
+    // event only if they are in the same group as some of the people in
+    // the event.
+    // This gets kind of tricky.  If there is a participant from a different
+    // group, do we still show it?  For now, the answer is no.
+    // This could be configurable somehow, but how many lines of text would
+    // it need in the admin page to describe this scenario?  Would confuse
+    // 99.9% of users.
+    // In summary, make sure at least one event participant is in one of
+    // this user's groups.
+    $my_users = get_my_users ();
+    if ( is_array ( $my_users ) ) {
+      $sql = "SELECT webcal_entry.cal_id FROM webcal_entry, " .
+        "webcal_entry_user WHERE webcal_entry.cal_id = " .
+        "webcal_entry_user.cal_id AND webcal_entry.cal_id = $id " .
+        "AND webcal_entry_user.cal_login IN ( ";
+      for ( $i = 0; $i < count ( $my_users ); $i++ ) {
+        if ( $i > 0 ) {
+          $sql .= ", ";
+        }
+        $sql .= "'" . $my_users[$i]['cal_login'] . "'";
+        }
+      $sql .= " )";
+      $res = dbi_query ( $sql );
+      if ( $res ) {
+        $row = dbi_fetch_row ( $res );
+        if ( $row && $row[0] > 0 ) {
+          $can_view = true;
+        }
+        dbi_free_result ( $res );
+      }
+    }
+    // If we didn't indicate we need to check groups, then this user
+    // can't view this event.
+    if ( ! $check_group ) {
+      $can_view = false;
+    }
+  }
+}
+
+// If they still cannot view, make sure they are not looking at a nonuser
+// calendar event where the nonuser is the _only_ participant.
+if ( empty ( $error ) && ! $can_view && ! empty ( $nonuser_enabled ) &&
+  $nonuser_enabled == 'Y' ) {
+  $nonusers = get_nonuser_cals ();
+  $nonuser_lookup = array ();
+  for ( $i = 0; $i < count ( $nonusers ); $i++ ) {
+    $nonuser_lookup[$nonusers[$i]['cal_login']] = 1;
+  }
+  $sql = "SELECT cal_login FROM webcal_entry_user " .
+    "WHERE cal_id = $id AND cal_status in ('A','W')";
+  $res = dbi_query ( $sql );
+  $found_nonuser_cal = false;
+  $found_reg_user = false;
+  if ( $res ) {
+    while ( $row = dbi_fetch_row ( $res ) ) {
+      if ( ! empty ( $nonuser_lookup[$row[0]] ) ) {
+        $found_nonuser_cal = true;
+      } else {
+        $found_reg_user = true;
+      }
+    }
+    dbi_free_result ( $res );
+  }
+  // Does this event contain only nonuser calendars as participants?
+  // If so, then grant access.
+  if ( $found_nonuser_cal && ! $found_reg_user ) {
+    $can_view = true;
+  }
+}
+  
+if ( empty ( $error ) && ! $can_view ) {
+  $error = translate ( "You are not authorized" );
+}
+
+if ( ! empty ( $year ) ) {
+  $thisyear = $year;
+}
+if ( ! empty ( $month ) ) {
+  $thismonth = $month;
+}
+$pri[1] = translate("Low");
+$pri[2] = translate("Medium");
+$pri[3] = translate("High");
+
+$unapproved = FALSE;
+
+// Make sure this is not a continuation event.
+// If it is, redirect the user to the original event.
+$ext_id = -1;
+if ( empty ( $error ) ) {
+  $res = dbi_query ( "SELECT cal_ext_for_id FROM webcal_entry " .
+    "WHERE cal_id = $id" );
+  if ( $res ) {
+    if ( $row = dbi_fetch_row ( $res ) ) {
+      $ext_id = $row[0];
+    }
+    dbi_free_result ( $res );
+  } else {
+    // db error... ignore it, I guess.
+  }
+}
+if ( $ext_id > 0 ) {
+  $url = "view_entry.php?id=$ext_id";
+  if ( $date != "" ) {
+    $url .= "&date=$date";
+  }
+  if ( $user != "" ) {
+    $url .= "&user=$user";
+  }
+  if ( $cat_id != "" ) {
+    $url .= "&cat_id=$cat_id";
+  }
+  do_redirect ( $url );
+}
+
+print_header();
+
+if ( ! empty ( $error ) ) {
+  echo "<h2>" . translate ( "Error" ) .
+    "</h2>\n" . $error;
+  print_trailer ();
+  echo "</body>\n</html>";
+  exit;
+}
+// Try to determine the event status.
+$event_status = "";
+
+if ( ! empty ( $user ) && $login != $user ) {
+  // If viewing another user's calendar, check the status of the
+  // event on their calendar (to see if it's deleted).
+  $sql = "SELECT cal_status FROM webcal_entry_user " .
+    "WHERE cal_login = '$user' AND cal_id = $id";
+  $res = dbi_query ( $sql );
+  if ( $res ) {
+    if ( $row = dbi_fetch_row ( $res ) ) {
+      $event_status = $row[0];
+    }
+    dbi_free_result ( $res );
+  }
+} else {
+  // We are viewing event on user's own calendar, so check the
+  // status on their own calendar.
+  $sql = "SELECT cal_id, cal_status FROM webcal_entry_user " .
+    "WHERE cal_login = '$login' AND cal_id = $id";
+  $res = dbi_query ( $sql );
+  if ( $res ) {
+    $row = dbi_fetch_row ( $res );
+    $event_status = $row[1];
+    dbi_free_result ( $res );
+  }
+}
+
+// At this point, if we don't have the event status, then either
+// this user is not viewing an event from his own calendar and not
+// viewing an event from someone else's calendar.
+// They probably got here from the search results page (or possibly
+// by hand typing in the URL.)
+// Check to make sure that it hasn't been deleted from everyone's
+// calendar.
+if ( empty ( $event_status ) ) {
+  $sql = "SELECT cal_status FROM webcal_entry_user " .
+    "WHERE cal_status <> 'D' ORDER BY cal_status";
+  $res = dbi_query ( $sql );
+  if ( $res ) {
+    if ( $row = dbi_fetch_row ( $res ) ) {
+      $event_status = $row[0];
+    }
+    dbi_free_result ( $res );
+  }
+}
+
+// If we have no event status yet, it must have been deleted.
+if ( ( empty ( $event_status ) && ! $is_admin ) || ! $can_view ) {
+  echo "<h2>" . 
+    translate("Error") . "</h2>" . 
+    translate("You are not authorized") . ".\n";
+  print_trailer ();
+  echo "</body>\n</html>";
+  exit;
+}
+
+
+// Load event info now.
+$sql = "SELECT cal_create_by, cal_date, cal_time, cal_mod_date, " .
+  "cal_mod_time, cal_duration, cal_priority, cal_type, cal_access, " .
+  "cal_name, cal_description FROM webcal_entry WHERE cal_id = $id";
+$res = dbi_query ( $sql );
+if ( ! $res ) {
+  echo translate("Invalid entry id") . ": $id";
+  exit;
+}
+
+$row = dbi_fetch_row ( $res );
+if ( $row ) { 
+  $create_by = $row[0];
+  $orig_date = $row[1];
+  $event_time = $row[2];
+  $name = $row[9];
+  $description = $row[10];
+} else {
+  echo "<h2>" . 
+    translate("Error") . "</h2>" . 
+    translate("Invalid entry id") . ".\n";
+  print_trailer ();
+  echo "</body>\n</html>";
+  exit;
+}
+
+// Timezone Adjustments
+if ( $event_time >= 0 && ! empty ( $TZ_OFFSET )  && $TZ_OFFSET != 0 ) { 
+  // -1 = no time specified
+  $adjusted_time = $event_time + $TZ_OFFSET * 10000;
+  $year = substr($row[1],0,4);
+  $month = substr($row[1],4,2);
+  $day = substr($row[1],-2);
+  if ( $adjusted_time > 240000 ) {
+    $gmt = mktime ( 3, 0, 0, $month, $day, $year );
+    $gmt += $ONE_DAY;
+  } else if ( $adjusted_time < 0 ) {
+    $gmt = mktime ( 3, 0, 0, $month, $day, $year );
+    $gmt -= $ONE_DAY;
+  }
+}
+// Set alterted date
+$tz_date = ( ! empty ( $gmt ) ) ? date ( "Ymd", $gmt ) : $row[1];
+
+// save date so the trailer links are for the same time period
+$thisyear = (int) ( $tz_date / 10000 );
+$thismonth = ( $tz_date / 100 ) % 100;
+$thisday = $tz_date % 100;
+$thistime = mktime ( 3, 0, 0, $thismonth, $thisday, $thisyear );
+$thisdow = date ( "w", $thistime );
+
+// $subject is used for mailto URLs
+$subject = translate($application_name) . ": " . $name;
+// Remove the '"' character since it causes some mailers to barf
+$subject = str_replace ( "\"", "", $subject );
+$subject = htmlspecialchars ( $subject );
+
+$event_repeats = false;
+// build info string for repeating events and end date
+$sql = "SELECT cal_type, cal_end, cal_frequency, cal_days " .
+  "FROM webcal_entry_repeats WHERE cal_id = $id";
+
+$res = dbi_query ($sql);
+$rep_str = '';
+if ( $res ) {
+  if ( $tmprow = dbi_fetch_row ( $res ) ) {
+    $event_repeats = true;
+    $cal_type = $tmprow[0];
+    $cal_end = $tmprow[1];
+    $cal_frequency = $tmprow[2];
+    $cal_days = $tmprow[3];
+
+    if ( $cal_end ) {
+      $rep_str .= "  -  ";
+      $rep_str .= date_to_str ( $cal_end );
+    }
+    $rep_str .= " (" . translate("every") . " ";
+
+    if ( $cal_frequency > 1 ) {
+      switch ( $cal_frequency ) {
+        case 2: $rep_str .= translate("2nd"); break;
+        case 3: $rep_str .= translate("3rd"); break;
+        case 4: $rep_str .= translate("4th"); break;
+        case 5: $rep_str .= translate("5th"); break;
+        case 12: if ( $cal_type == 'monthlyByDay' ||
+                   $cal_type == 'monthlyByDayR' ) {
+                   break;
+                 }
+        default: $rep_str .= $cal_frequency; break;
+      }
+    }
+    $rep_str .= ' ';
+    switch ($cal_type) {
+      case "daily":
+        $rep_str .= translate("Day");
+        break;
+      case "weekly": $rep_str .= translate("Week");
+        for ($i=0; $i<=7; $i++) {
+          if (substr($cal_days, $i, 1) == "y") {
+            $rep_str .= ", " . weekday_short_name($i);
+          }
+        }
+        break;
+      case "monthlyByDay":
+      case "monthlyByDayR":
+        if ( $cal_frequency == 12 ) {
+          $rep_str .= month_name ( $thismonth - 1 ) . " / ";
+        } else {
+          $rep_str .= translate("Month") . " / ";
+        }
+        $days_this_month = $thisyear % 4 == 0 ? $ldays_per_month[$thismonth] :
+          $days_per_month[$thismonth];
+        if ( $cal_type == 'monthlyByDay' ) {
+          $dow1 = date ( "w", mktime ( 3, 0, 0, $thismonth, 1, $thisyear ) );
+          $days_in_first_week = ( 7 - $dow1 );
+          $whichWeek = ceil ( $thisday / 7 );
+        } else {
+          $whichWeek = floor ( ( $days_this_month - $thisday ) / 7 );
+          $whichWeek++;
+        }
+        $rep_str .= ' ';
+        switch ( $whichWeek ) {
+          case 1:
+            if ( $cal_type == 'monthlyByDay' )
+              $rep_str .= translate ( "1st" );
+            break;
+          case 2:
+            $rep_str .= translate ( "2nd" ); break;
+          case 3:
+            $rep_str .= translate ( "3rd" ); break;
+          case 4:
+            $rep_str .= translate ( "4th" ); break;
+          case 5:
+            $rep_str .= translate ( "5th" ); break;
+        }
+        if ( $cal_type == 'monthlyByDayR' )
+          $rep_str .= " " . translate ( "last" );
+        $rep_str .= ' ' . weekday_name ( $thisdow );
+        break;
+      case "monthlyByDate":
+        $rep_str .= translate("Month") . "/" . translate("by date");
+        break;
+      case "yearly":
+        $rep_str .= translate("Year");
+        break;
+    }
+    $rep_str .= ")";
+  } else
+    $rep_str = "";
+  dbi_free_result ( $res );
+}
+/* calculate end time */
+if ( $event_time >= 0 && $row[5] > 0 )
+  $end_str = "-" . display_time ( add_duration ( $row[2], $row[5] ) );
+else
+  $end_str = "";
+
+// get the email adress of the creator of the entry
+user_load_variables ( $create_by, "createby_" );
+$email_addr = empty ( $createby_email ) ? '' : $createby_email;
+
+// If confidential and not this user's event, then
+// They cannot seem name or description.
+//if ( $row[8] == "R" && ! $is_my_event && ! $is_admin ) {
+if ( $row[8] == "R" && ! $is_my_event ) {
+  $is_private = true;
+  $name = "[" . translate("Confidential") . "]";
+  $description = "[" . translate("Confidential") . "]";
+} else {
+  $is_private = false;
+}
+
+if ( $event_repeats && ! empty ( $date ) )
+  $event_date = $date;
+else
+  $event_date = $row[1];
+
+// TODO: don't let someone view another user's private entry
+// by hand editing the URL.
+
+// Get category Info
+if ( $categories_enabled == "Y" ) {
+  $cat_owner =  ( ( ! empty ( $user ) && strlen ( $user ) ) &&  ( $is_assistant  ||
+    $is_admin ) ) ? $user : $login;  
+  $sql = "SELECT cat_name FROM webcal_categories, webcal_entry_user " .
+    "WHERE webcal_entry_user.cal_login = '$cat_owner' AND webcal_entry_user.cal_id = $id " .
+    "AND webcal_entry_user.cal_category = webcal_categories.cat_id";
+  $res2 = dbi_query ( $sql );
+  if ( $res2 ) {
+    $row2 = dbi_fetch_row ( $res2 );
+    $category = $row2[0];
+    dbi_free_result ( $res2 );
+  }
+}
+?>
+<h2><?php echo htmlspecialchars ( $name ); ?></h2>
+<table style="border-width:0px;">
+<tr><td style="vertical-align:top; font-weight:bold;">
+ <?php etranslate("Description")?>:</td><td>
+ <?php
+  if ( ! empty ( $allow_html_description ) &&
+    $allow_html_description == 'Y' ) {
+    $str = str_replace ( '&', '&', $description );
+    $str = str_replace ( '&amp;', '&', $str );
+    // If there is no html found, then go ahead and replace
+    // the line breaks ("\n") with the html break.
+    if ( strstr ( $str, "<" ) && strstr ( $str, ">" ) ) {
+      // found some html...
+      echo $str;
+    } else {
+      echo nl2br ( activate_urls ( $str ) );
+    }
+  } else {
+    echo nl2br ( activate_urls ( htmlspecialchars ( $description ) ) );
+  }
+?></td></tr>
+
+<?php if ( $event_status != 'A' && ! empty ( $event_status ) ) { ?>
+<tr><td style="vertical-align:top; font-weight:bold;">
+ <?php etranslate("Status")?>:</td><td>
+ <?php
+     if ( $event_status == 'W' )
+       etranslate("Waiting for approval");
+     if ( $event_status == 'D' )
+       etranslate("Deleted");
+     else if ( $event_status == 'R' )
+       etranslate("Rejected");
+      ?>
+</td></tr>
+<?php } ?>
+
+<tr><td style="vertical-align:top; font-weight:bold;">
+ <?php etranslate("Date")?>:</td><td>
+ <?php
+  if ( $event_repeats ) {
+    echo date_to_str ( $event_date );
+  } else {
+    echo date_to_str ( $row[1], "", true, false, ( $row[5] == ( 24 * 60 ) ? "" : $event_time ) );
+  }
+  ?>
+</td></tr>
+<?php if ( $event_repeats ) { ?>
+<tr><td style="vertical-align:top; font-weight:bold;">
+ <?php etranslate("Repeat Type")?>:</td><td>
+ <?php echo date_to_str ( $row[1], "", true, false, $event_time ) . $rep_str; ?>
+</td></tr>
+<?php } ?>
+<?php if ( $event_time >= 0 ) { ?>
+<tr><td style="vertical-align:top; font-weight:bold;">
+ <?php etranslate("Time")?>:</td><td>
+ <?php
+    if ( $row[5] == ( 24 * 60 ) ) {
+      etranslate("All day event");
+    } else {
+      echo display_time ( $row[2] ) . $end_str;
+    }
+  ?>
+</td></tr>
+<?php } ?>
+<?php if ( $row[5] > 0 && $row[5] != ( 24 * 60 ) ) { ?>
+<tr><td style="vertical-align:top; font-weight:bold;">
+ <?php etranslate("Duration")?>:</td><td>
+ <?php echo $row[5]; ?> <?php etranslate("minutes")?>
+</td></tr>
+<?php } ?>
+<?php if ( $disable_priority_field != "Y" ) { ?>
+<tr><td style="vertical-align:top; font-weight:bold;">
+ <?php etranslate("Priority")?>:</td><td>
+ <?php echo $pri[$row[6]]; ?>
+</td></tr>
+<?php } ?>
+<?php if ( $disable_access_field != "Y" ) { ?>
+<tr><td style="vertical-align:top; font-weight:bold;">
+ <?php etranslate("Access")?>:</td><td>
+ <?php echo ( $row[8] == "P" ) ? translate("Public") : translate("Confidential"); ?>
+</td></tr>
+<?php } ?>
+<?php if ( $categories_enabled == "Y" && ! empty ( $category ) ) { ?>
+<tr><td style="vertical-align:top; font-weight:bold;">
+ <?php etranslate("Category")?>:</td><td>
+ <?php echo $category; ?>
+</td></tr>
+<?php } ?>
+<?php
+// Display who originally created event
+// useful if assistant or Admin
+$proxy_fullname = '';  
+if ( !empty ( $DISPLAY_CREATED_BYPROXY ) && $DISPLAY_CREATED_BYPROXY == "Y" ) {
+  $res = dbi_query ( "SELECT wu.cal_firstname, wu.cal_lastname " .
+    "FROM webcal_user wu INNER JOIN webcal_entry_log wel ON wu.cal_login = wel.cal_login " .
+    "WHERE wel.cal_entry_id = $id " .
+    "AND wel.cal_type = 'C'" );
+  if ( $res ) {
+    $row3 = dbi_fetch_row ( $res ) ;
+   $proxy_fullname = $row3[0] . " " . $row3[1];
+   $proxy_fullname = ($createby_fullname == $proxy_fullname ? ""  :
+      " ( by " . $proxy_fullname . " )");
+  }
+}
+
+if ( $single_user == "N" ) {
+  echo "<tr><td style=\"vertical-align:top; font-weight:bold;\">\n" . 
+ translate("Created by") . ":</td><td>\n";
+  if ( $is_private ) {
+    echo "[" . translate("Confidential") . "]\n</td></tr>";
+  } else {
+    if ( strlen ( $email_addr ) ) {
+      echo "<a href=\"mailto:$email_addr?subject=$subject\">" .
+        ( $row[0] == "__public__" ? translate( "Public Access" ): $createby_fullname ) .
+        "</a>$proxy_fullname\n</td></tr>";
+    } else {
+      echo ( $row[0] == "__public__" ? translate( "Public Access" ) : $createby_fullname ) .
+        "$proxy_fullname\n</td></tr>";
+    }
+  }
+}
+?>
+<tr><td style="vertical-align:top; font-weight:bold;">
+ <?php etranslate("Updated")?>:</td><td>
+ <?php
+    echo date_to_str ( $row[3] );
+    echo " ";
+    echo display_time ( $row[4] );
+   ?>
+</td></tr>
+<?php
+// load any site-specific fields and display them
+$extras = get_site_extra_fields ( $id );
+for ( $i = 0; $i < count ( $site_extras ); $i++ ) {
+  $extra_name = $site_extras[$i][0];
+  $extra_type = $site_extras[$i][2];
+  $extra_arg1 = $site_extras[$i][3];
+  $extra_arg2 = $site_extras[$i][4];
+  if ( ! empty ( $extras[$extra_name]['cal_name'] ) ) {
+    echo "<tr><td style=\"vertical-align:top; font-weight:bold;\">\n" .
+      translate ( $site_extras[$i][1] ) .
+      ":</td><td>\n";
+    if ( $extra_type == $EXTRA_URL ) {
+      if ( strlen ( $extras[$extra_name]['cal_data'] ) ) {
+        echo "<a href=\"" . $extras[$extra_name]['cal_data'] . "\">" .
+          $extras[$extra_name]['cal_data'] . "</a>\n";
+      }
+    } else if ( $extra_type == $EXTRA_EMAIL ) {
+      if ( strlen ( $extras[$extra_name]['cal_data'] ) ) {
+        echo "<a href=\"mailto:" . $extras[$extra_name]['cal_data'] .
+          "?subject=$subject\">" .
+          $extras[$extra_name]['cal_data'] . "</a>\n";
+      }
+    } else if ( $extra_type == $EXTRA_DATE ) {
+      if ( $extras[$extra_name]['cal_date'] > 0 ) {
+        echo date_to_str ( $extras[$extra_name]['cal_date'] );
+      }
+    } else if ( $extra_type == $EXTRA_TEXT ||
+      $extra_type == $EXTRA_MULTILINETEXT ) {
+      echo nl2br ( $extras[$extra_name]['cal_data'] );
+    } else if ( $extra_type == $EXTRA_USER ) {
+      echo $extras[$extra_name]['cal_data'];
+    } else if ( $extra_type == $EXTRA_REMINDER ) {
+      if ( $extras[$extra_name]['cal_remind'] <= 0 ) {
+        etranslate ( "No" );
+      } else {
+        etranslate ( "Yes" );
+        if ( ( $extra_arg2 & $EXTRA_REMINDER_WITH_DATE ) > 0 ) {
+          echo "  -  ";
+          echo date_to_str ( $extras[$extra_name]['cal_date'] );
+        } else if ( ( $extra_arg2 & $EXTRA_REMINDER_WITH_OFFSET ) > 0 ) {
+          echo "  -  ";
+          $minutes = $extras[$extra_name]['cal_data'];
+          $d = (int) ( $minutes / ( 24 * 60 ) );
+          $minutes -= ( $d * 24 * 60 );
+          $h = (int) ( $minutes / 60 );
+          $minutes -= ( $h * 60 );
+          if ( $d > 1 ) {
+            echo $d . " " . translate("days") . " ";
+          } else if ( $d == 1 ) {
+            echo $d . " " . translate("day") . " ";
+          }
+          if ( $h > 1 ) {
+            echo $h . " " . translate("hours") . " ";
+          } else if ( $h == 1 ) {
+            echo $h . " " . translate("hour") . " ";
+          }
+          if ( $minutes > 1 ) {
+            echo $minutes . " " . translate("minutes");
+          } else if ( $minutes == 1 ) {
+            echo $minutes . " " . translate("minute");
+          }
+          echo " " . translate("before event" );
+        }
+      }
+    } else if ( $extra_type == $EXTRA_SELECTLIST ) {
+      echo $extras[$extra_name]['cal_data'];
+    }
+    echo "\n</td></tr>\n";
+  }
+}
+?>
+
+<?php // participants
+// Only ask for participants if we are multi-user.
+$allmails = array ();
+$show_participants = ( $disable_participants_field != "Y" );
+if ( $is_admin ) {
+  $show_participants = true;
+}
+if ( $public_access == "Y" && $login == "__public__" &&
+  ( $public_access_others != "Y" || $public_access_view_part == "N" ) ) {
+  $show_participants = false;
+}
+if ( $single_user == "N" && $show_participants ) { ?>
+  <tr><td style="vertical-align:top; font-weight:bold;">
+  <?php etranslate("Participants")?>:</td><td>
+  <?php
+  if ( $is_private ) {
+    echo "[" . translate("Confidential") . "]";
+  } else {
+    $sql = "SELECT cal_login, cal_status FROM webcal_entry_user " .
+      "WHERE cal_id = $id";
+    //echo "$sql\n";
+    $res = dbi_query ( $sql );
+    $first = 1;
+    $num_app = $num_wait = $num_rej = 0;
+    if ( $res ) {
+      while ( $row = dbi_fetch_row ( $res ) ) {
+        $pname = $row[0];
+        if ( $login == $row[0] && $row[1] == 'W' ) {
+          $unapproved = TRUE;
+        }
+        if ( $row[1] == 'A' ) {
+          $approved[$num_app++] = $pname;
+        } else if ( $row[1] == 'W' ) {
+          $waiting[$num_wait++] = $pname;
+        } else if ( $row[1] == 'R' )  {
+          $rejected[$num_rej++] = $pname;
+        }
+      }
+      dbi_free_result ( $res );
+    } else {
+      echo translate ("Database error") . ": " . dbi_error() . "<br />\n";
+    }
+  }
+  for ( $i = 0; $i < $num_app; $i++ ) {
+    user_load_variables ( $approved[$i], "temp" );
+    if ( strlen ( $tempemail ) ) {
+      echo "<a href=\"mailto:" . $tempemail . "?subject=$subject\">" . 
+        $tempfullname . "</a><br />\n";
+      $allmails[] = $tempemail;
+    } else {
+      echo $tempfullname . "<br />\n";
+    }
+  }
+  // show external users here...
+  if ( ! empty ( $allow_external_users ) && $allow_external_users == "Y" ) {
+    $external_users = event_get_external_users ( $id, 1 );
+    $ext_users = explode ( "\n", $external_users );
+    if ( is_array ( $ext_users ) ) {
+      for ( $i = 0; $i < count( $ext_users ); $i++ ) {
+        if ( ! empty ( $ext_users[$i] ) ) {
+          echo $ext_users[$i] . " (" . translate("External User") . 
+            ")<br />\n";
+        }
+      }
+    }
+  }
+  for ( $i = 0; $i < $num_wait; $i++ ) {
+    user_load_variables ( $waiting[$i], "temp" );
+    if ( strlen ( $tempemail ) ) {
+      echo "<br /><a href=\"mailto:" . $tempemail . "?subject=$subject\">" . 
+        $tempfullname . "</a> (?)\n";
+      $allmails[] = $tempemail;
+    } else {
+      echo "<br />" . $tempfullname . " (?)\n";
+    }
+  }
+  for ( $i = 0; $i < $num_rej; $i++ ) {
+    user_load_variables ( $rejected[$i], "temp" );
+    if ( strlen ( $tempemail ) ) {
+      echo "<br /><strike><a href=\"mailto:" . $tempemail .
+        "?subject=$subject\">" . $tempfullname .
+        "</a></strike> (" . translate("Rejected") . ")\n";
+    } else {
+      echo "<br /><strike>$tempfullname</strike> (" . 
+        translate("Rejected") . ")\n";
+    }
+  }
+?>
+</td></tr>
+<?php
+ } // end participants
+?>
+
+</table>
+
+<br /><?php
+
+$rdate = "";
+if ( $event_repeats ) {
+  $rdate = "&date=$event_date";
+}
+
+// Show a printer-friendly link
+if ( empty ( $friendly ) ) {
+  echo "<a title=\"" . 
+    translate("Generate printer-friendly version") . "\" class=\"printer\" " .
+    "href=\"view_entry.php?id=$id&friendly=1$rdate\" " .
+    "target=\"cal_printer_friendly\">" .
+    translate("Printer Friendly") . "</a><br />\n";
+}
+
+if ( empty ( $event_status ) ) {
+  // this only happens when an admin views a deleted event that he is
+  // not a participant for.  Set to $event_status to "D" just to get
+  // rid of all the edit/delete links below.
+  $event_status = "D";
+}
+
+if ( $unapproved && $readonly == 'N' ) {
+  echo "<a title=\"" . 
+    translate("Approve/Confirm entry") . 
+    "\" href=\"approve_entry.php?id=$id\" " .
+    "onclick=\"return confirm('" . 
+    translate("Approve this entry?") . "');\">" . 
+    translate("Approve/Confirm entry") . "</a><br />\n";
+  echo "<a title=\"" . 
+    translate("Reject entry") . "\" href=\"reject_entry.php?id=$id\" " .
+    "onclick=\"return confirm('" .
+    translate("Reject this entry?") . "');\">" . 
+    translate("Reject entry") . "</a><br />\n";
+}
+
+if ( ! empty ( $user ) && $login != $user ) {
+  $u_url = "&user=$user";
+} else {
+  $u_url = "";
+}
+
+$can_edit = ( $is_admin || $is_nonuser_admin && ($user == $create_by) || 
+  ( $is_assistant && ! $is_private && ($user == $create_by) ) ||
+  ( $readonly != "Y" && ( $login == $create_by || $single_user == "Y" ) ) );
+if ( $public_access == "Y" && $login == "__public__" ) {
+  $can_edit = false;
+}
+if ( $readonly == 'Y' ) {
+  $can_edit = false;
+}
+
+// If approved, but event category not set (and user does not have permission
+// to edit where they could also set the category), then allow them to
+// set it through set_cat.php.
+if ( empty ( $user ) && $categories_enabled == "Y" &&
+  $readonly != "Y" && $is_my_event && $login != "__public__" &&
+  $event_status != "D" && ! $can_edit )  {
+  echo "<a title=\"" . 
+    translate("Set category") . "\" class=\"nav\" " .
+    "href=\"set_entry_cat.php?id=$id$rdate\">" .
+    translate("Set category") . "</a><br />\n";
+}
+
+if ( $can_edit && $event_status != "D" ) {
+  if ( $event_repeats ) {
+    echo "<a title=\"" .
+      translate("Edit repeating entry for all dates") . 
+      "\" class=\"nav\" href=\"edit_entry.php?id=$id$u_url\">" . 
+      translate("Edit repeating entry for all dates") . "</a><br />\n";
+    // Don't allow override of first event
+    if ( ! empty ( $date ) && $date != $orig_date ) {
+      echo "<a title=\"" .
+        translate("Edit entry for this date") . "\" class=\"nav\" " . 
+        "href=\"edit_entry.php?id=$id$u_url$rdate&override=1\">" .
+        translate("Edit entry for this date") . "</a><br />\n";
+    }
+    echo "<a title=\"" . 
+      translate("Delete repeating event for all dates") . 
+      "\" class=\"nav\" href=\"del_entry.php?id=$id$u_url&override=1\" " .
+      "onclick=\"return confirm('" . 
+      translate("Are you sure you want to delete this entry?") . "\\n\\n" . 
+      translate("This will delete this entry for all users.") . "');\">" . 
+      translate("Delete repeating event for all dates") . "</a><br />\n";
+    // Don't allow deletion of first event
+    if ( ! empty ( $date ) && $date != $orig_date ) {
+      echo "<a title=\"" . 
+        translate("Delete entry only for this date") . 
+        "\" class=\"nav\" href=\"del_entry.php?id=$id$u_url$rdate&override=1\" " .
+        "onclick=\"return confirm('" .
+        translate("Are you sure you want to delete this entry?") . "\\n\\n" . 
+        translate("This will delete this entry for all users.") . "');\">" . 
+        translate("Delete entry only for this date") . "</a><br />\n";
+    }
+  } else {
+    echo "<a title=\"" .
+      translate("Edit entry") . "\" class=\"nav\" " .
+      "href=\"edit_entry.php?id=$id$u_url\">" .
+      translate("Edit entry") . "</a><br />\n";
+    echo "<a title=\"" . 
+      translate("Delete entry") . "\" class=\"nav\" " .
+      "href=\"del_entry.php?id=$id$u_url$rdate\" onclick=\"return confirm('" . 
+       translate("Are you sure you want to delete this entry?") . "\\n\\n" . 
+       translate("This will delete this entry for all users.") . "');\">" . 
+       translate("Delete entry") . "</a><br />\n";
+  }
+  echo "<a title=\"" . 
+    translate("Copy entry") . "\" class=\"nav\" " .
+    "href=\"edit_entry.php?id=$id$u_url&copy=1\">" . 
+    translate("Copy entry") . "</a><br />\n";  
+} elseif ( $readonly != "Y" && $is_my_event && $login != "__public__" &&
+  $event_status != "D" )  {
+  echo "<a title=\"" . 
+    translate("Delete entry") . "\" class=\"nav\" " .
+    "href=\"del_entry.php?id=$id$u_url$rdate\" onclick=\"return confirm('" . 
+    translate("Are you sure you want to delete this entry?") . "\\n\\n" . 
+    translate("This will delete the entry from your calendar.") . "');\">" . 
+    translate("Delete entry") . "</a><br />\n";
+  echo "<a title=\"" . 
+    translate("Copy entry") . "\" class=\"nav\" " .
+    "href=\"edit_entry.php?id=$id&copy=1\">" . 
+    translate("Copy entry") . "</a><br />\n";
+}
+if ( $readonly != "Y" && ! $is_my_event && ! $is_private && 
+  $event_status != "D" && $login != "__public__" )  {
+  echo "<a title=\"" . 
+    translate("Add to My Calendar") . "\" class=\"nav\" " .
+    "href=\"add_entry.php?id=$id&user=".$_GET['user']."\" onclick=\"return confirm('" . 
+    translate("Do you want to add this entry to your calendar?") . "\\n\\n" . 
+    translate("This will add the entry to your calendar.") . "');\">" . 
+    translate("Add to My Calendar") . "</a><br />\n";
+}
+
+if ( count ( $allmails ) > 0 ) {
+  echo "<a title=\"" . 
+    translate("Email all participants") . "\" class=\"nav\" " .
+    "href=\"mailto:" . implode ( ",", $allmails ) .
+    "?subject=" . rawurlencode($subject) . "\">" . 
+    translate("Email all participants") . "</a><br />\n";
+}
+
+$show_log = false;
+
+if ( $is_admin ) {
+  if ( empty ( $log ) ) {
+    echo "<a title=\"" . 
+      translate("Show activity log") . "\" class=\"nav\" " .
+      "href=\"view_entry.php?id=$id&log=1\">" . 
+      translate("Show activity log") . "</a><br />\n";
+  } else {
+    echo "<a title=\"" . 
+      translate("Hide activity log") . "\" class=\"nav\" " .
+      "href=\"view_entry.php?id=$id\">" . 
+       translate("Hide activity log") . "</a><br />\n";
+    $show_log = true;
+  }
+}
+
+if ( $show_log ) {
+  echo "<h3>" . translate("Activity Log") . "</h3>\n";
+  echo "<table class=\"embactlog\">\n";
+  echo "<tr><th class=\"usr\">\n";
+  echo translate("User") . "</th><th class=\"cal\">\n";
+  echo translate("Calendar") . "</th><th class=\"date\">\n";
+  echo translate("Date") . "/" . 
+   translate("Time") . "</th><th class=\"action\">\n";
+  echo translate("Action") . "\n</th></tr>\n";
+
+  $res = dbi_query ( "SELECT cal_login, cal_user_cal, cal_type, " .
+    "cal_date, cal_time " .
+    "FROM webcal_entry_log WHERE cal_entry_id = $id " .
+    "ORDER BY cal_log_id DESC" );
+  if ( $res ) {
+    while ( $row = dbi_fetch_row ( $res ) ) {
+      echo "<tr><td>\n";
+      echo $row[0] . "</td><td>\n";
+      echo $row[1] . "</td><td>\n" . 
+        date_to_str ( $row[3] ) . " " .
+        display_time ( $row[4] ) . "</td><td>\n";
+      if ( $row[2] == $LOG_CREATE ) {
+        etranslate("Event created");
+      } else if ( $row[2] == $LOG_APPROVE ) {
+        etranslate("Event approved");
+      } else if ( $row[2] == $LOG_REJECT ) {
+        etranslate("Event rejected");
+      } else if ( $row[2] == $LOG_UPDATE ) {
+        etranslate("Event updated");
+      } else if ( $row[2] == $LOG_DELETE ) {
+        etranslate("Event deleted");
+      } else if ( $row[2] == $LOG_NOTIFICATION ) {
+        etranslate("Notification sent");
+      } else if ( $row[2] == $LOG_REMINDER ) {
+        etranslate("Reminder sent");
+      }
+      echo "</td></tr>\n";
+    }
+    dbi_free_result ( $res );
+  }
+  echo "</table>\n";
+}
+
+if (! $is_private) {
+  echo "<br /><form method=\"post\" name=\"exportform\" " .
+    "action=\"export_handler.php\">\n";
+  echo "<label for=\"exformat\">" . 
+    translate("Export this entry to") . ": </label>\n";
+  echo "<select name=\"format\" id=\"exformat\">\n";
+  echo " <option value=\"ical\">iCalendar</option>\n";
+  echo " <option value=\"vcal\">vCalendar</option>\n";
+  echo " <option value=\"pilot-csv\">Pilot-datebook CSV (" . 
+    translate("Palm Pilot") . ")</option>\n";
+  echo " <option value=\"pilot-text\">Install-datebook (" . 
+    translate("Palm Pilot") . ")</option>\n";
+  echo "</select>\n";
+  echo "<input type=\"hidden\" name=\"id\" value=\"$id\" />\n";
+  echo "<input type=\"submit\" value=\"" . 
+    translate("Export") . "\" />\n";
+  echo "</form>\n";
+}
+?>
+
+<?php
+ print_trailer ( empty ($friendly) );
+?>
+</body>
+</html>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/view_l.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/view_l.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/view_l.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,287 @@
+<?php
+/*
+ * $Id: view_l.php,v 1.33 2005/03/21 22:16:07 umcesrjones Exp $
+ *
+ * Page Description:
+ * This page will display the month "view" with all users's events
+ * on the same calendar.  (The other month "view" displays each user
+ * calendar in a separate column, side-by-side.)  This view gives you
+ * the same effect as enabling layers, but with layers you can only
+ * have one configuration of users.
+ *
+ * Input Parameters:
+ * id (*) - specify view id in webcal_view table
+ * date - specify the starting date of the view.
+ *   If not specified, current date will be used.
+ * friendly - if set to 1, then page does not include links or
+ *   trailer navigation.
+ * (*) required field
+ *
+ * Security:
+ * Must have "allow view others" enabled ($allow_view_other) in
+ *   System Settings unless the user is an admin user ($is_admin).
+ * If the view is not global, the user must be owner of the view.
+ * If the view is global, then and user_sees_only_his_groups is
+ * enabled, then we remove users not in this user's groups
+ * (except for nonuser calendars... which we allow regardless of group).
+ */
+
+include_once 'includes/init.php';
+
+$error = "";
+
+if ( $allow_view_other == "N" && ! $is_admin ) {
+  // not allowed...
+  send_to_preferred_view ();
+}
+if ( empty ( $id ) ) {
+  do_redirect ( "views.php" );
+}
+
+// Find view name in $views[]
+$view_name = "";
+for ( $i = 0; $i < count ( $views ); $i++ ) {
+  if ( $views[$i]['cal_view_id'] == $id ) {
+    $view_name = $views[$i]['cal_name'];
+  }
+}
+
+// If view_name not found, then the specified view id does not
+// belong to current user. 
+if ( empty ( $view_name ) ) {
+  $error = translate ( "You are not authorized" );
+}
+
+$INC = array('js/popups.php');
+print_header($INC);
+
+set_today($date);
+
+$next = mktime ( 3, 0, 0, $thismonth + 1, 1, $thisyear );
+$nextyear = date ( "Y", $next );
+$nextmonth = date ( "m", $next );
+$nextdate = sprintf ( "%04d%02d01", $nextyear, $nextmonth );
+
+$prev = mktime ( 3, 0, 0, $thismonth - 1, 1, $thisyear );
+$prevyear = date ( "Y", $prev );
+$prevmonth = date ( "m", $prev );
+$prevdate = sprintf ( "%04d%02d01", $prevyear, $prevmonth );
+
+if ( ! empty ( $bold_days_in_year ) && $bold_days_in_year == 'Y' ) {
+  $boldDays = true;
+  $startdate = sprintf ( "%04d%02d01", $prevyear, $prevmonth );
+  $enddate = sprintf ( "%04d%02d31", $nextyear, $nextmonth );
+} else {
+  $boldDays = false;
+  $startdate = sprintf ( "%04d%02d01", $thisyear, $thismonth );
+  $enddate = sprintf ( "%04d%02d31", $thisyear, $thismonth );
+}
+
+$monthstart = mktime ( 3, 0, 0, $thismonth, 1, $thisyear );
+$monthend = mktime ( 3, 0, 0, $thismonth + 1, 0, $thisyear );
+
+$thisdate = $startdate;
+
+// get users in this view
+$res = dbi_query (
+  "SELECT cal_login FROM webcal_view_user WHERE cal_view_id = $id" );
+$viewusers = array ();
+$all_users = false;
+if ( $res ) {
+  while ( $row = dbi_fetch_row ( $res ) ) {
+    $viewusers[] = $row[0]; 
+    if ( $row[0] == "__all__" ) {
+      $all_users = true;
+    }
+  }
+  dbi_free_result ( $res );
+} else {
+  $error = translate ( "Database error" ) . ": " . dbi_error ();
+}
+if ( $all_users ) {
+  $viewusers = array ();
+  $users = get_my_users ();
+  for ( $i = 0; $i < count ( $users ); $i++ ) {
+    $viewusers[] = $users[$i]['cal_login'];
+  }
+} else {
+  // Make sure this user is allowed to see all users in this view
+  // If this is a global view, it may include users that this user
+  // is not allowed to see.
+  if ( ! empty ( $user_sees_only_his_groups ) &&
+    $user_sees_only_his_groups == 'Y' ) {
+    $myusers = get_my_users ();
+    if ( ! empty ( $nonuser_enabled ) && $nonuser_enabled == "Y" ) {
+      $myusers = array_merge ( $myusers, get_nonuser_cals () );
+    }
+    $userlookup = array();
+    for ( $i = 0; $i < count ( $myusers ); $i++ ) {
+      $userlookup[$myusers[$i]['cal_login']] = 1;
+    }
+    $newlist = array ();
+    for ( $i = 0; $i < count ( $viewusers ); $i++ ) {
+      if ( ! empty ( $userlookup[$viewusers[$i]] ) ) {
+        $newlist[] = $viewusers[$i];
+      }
+    }
+    $viewusers = $newlist;
+  }
+}
+if ( count ( $viewusers ) == 0 ) {
+  // This could happen if user_sees_only_his_groups  = Y and
+  // this user is not a member of any  group assigned to this view
+  $error = translate ( "No users for this view" );
+}
+
+if ( ! empty ( $error ) ) {
+  echo "<h2>" . translate ( "Error" ) .
+    "</h2>\n" . $error;
+  print_trailer ();
+  exit;
+}
+
+$e_save = array ();
+$re_save = array ();
+for ( $i = 0; $i < count ( $viewusers ); $i++ ) {
+  /* Pre-Load the repeated events for quckier access */
+  $repeated_events = read_repeated_events ( $viewusers[$i], "", $startdate ); 
+  $re_save = array_merge($re_save, $repeated_events);
+  /* Pre-load the non-repeating events for quicker access */
+  $events = read_events ( $viewusers[$i], $startdate, $enddate );
+  $e_save = array_merge($e_save, $events);
+} 
+$events = array ();
+$repeated_events = array ();
+
+for ( $i = 0; $i < count ( $e_save ); $i++ ) {
+  $should_add = 1;
+  for ( $j = 0; $j < count ( $events ) && $should_add; $j++ ) {
+    if ( $e_save[$i]['cal_id'] == $events[$j]['cal_id'] ) {
+      $should_add = 0;
+    }
+  }
+  if ( $should_add ) {
+    array_push ( $events, $e_save[$i] );
+  }
+}
+
+for ( $i = 0; $i < count ( $re_save ); $i++ ) {
+  $should_add = 1;
+  for ( $j = 0; $j < count ( $repeated_events ) && $should_add; $j++ ) {
+    if ( $re_save[$i]['cal_id'] == $repeated_events[$j]['cal_id'] ) {
+      $should_add = 0;
+    }
+  }
+  if ( $should_add ) {
+    array_push ( $repeated_events, $re_save[$i] );
+  }
+}
+
+display_small_month ( $prevmonth, $prevyear, true, true, "prevmonth", 
+  "view_l.php?id=$id&" );
+display_small_month ( $nextmonth, $nextyear, true, true, "nextmonth", 
+  "view_l.php?id=$id&" );
+?>
+
+<div class="title">
+<span class="date"><br /><?php
+  echo date_to_str ( sprintf ( "%04d%02d01", $thisyear, $thismonth ),
+    $DATE_FORMAT_MY, false, false );
+?></span>
+<span class="viewname"><br /><?php echo $view_name; ?></span></div>
+<br /><br /><br /><br />
+
+<table class="main" style="clear:both;" cellspacing="0" cellpadding="0">
+<tr>
+<?php if ( $WEEK_START == 0 ) { ?>
+<th class="weekend"><?php etranslate("Sun")?></th>
+<?php } ?>
+<th><?php etranslate("Mon")?></th>
+<th><?php etranslate("Tue")?></th>
+<th><?php etranslate("Wed")?></th>
+<th><?php etranslate("Thu")?></th>
+<th><?php etranslate("Fri")?></th>
+<th class="weekend"><?php etranslate("Sat")?></th>
+<?php if ( $WEEK_START == 1 ) { ?>
+<th class="weekend"><?php etranslate("Sun")?></th>
+<?php } ?>
+</tr>
+<?php
+// We add 2 hours on to the time so that the switch to DST doesn't
+// throw us off.  So, all our dates are 2AM for that day.
+//$sun = get_sunday_before ( $thisyear, $thismonth, 1 );
+if ( $WEEK_START == 1 ) {
+  $wkstart = get_monday_before ( $thisyear, $thismonth, 1 );
+} else {
+  $wkstart = get_sunday_before ( $thisyear, $thismonth, 1 );
+}
+// generate values for first day and last day of month
+$monthstart = mktime ( 3, 0, 0, $thismonth, 1, $thisyear );
+$monthend = mktime ( 3, 0, 0, $thismonth + 1, 0, $thisyear );
+
+// debugging
+//echo "<br />sun = " . date ( "D, m-d-Y", $sun ) . "<br />";
+//echo "<br />monthstart = " . date ( "D, m-d-Y", $monthstart ) . "<br />";
+//echo "<br />monthend = " . date ( "D, m-d-Y", $monthend ) . "<br />";
+
+//NOTE: if you make HTML changes to this table, make the same changes
+//to the example table in pref.php.
+for ( $i = $wkstart; date ( "Ymd", $i ) <= date ( "Ymd", $monthend );
+  $i += ( 24 * 3600 * 7 ) ) {
+  print "<tr>\n";
+  for ( $j = 0; $j < 7; $j++ ) {
+    $date = $i + ( $j * 24 * 3600 );
+    if ( date ( "Ymd", $date ) >= date ( "Ymd", $monthstart ) &&
+      date ( "Ymd", $date ) <= date ( "Ymd", $monthend ) ) {
+      $thiswday = date ( "w", $date );
+      $is_weekend = ( $thiswday == 0 || $thiswday == 6 );
+      if ( empty ( $WEEKENDBG ) ) $is_weekend = false;
+      print "<td";
+      $class = "";
+      if ( date ( "Ymd", $date  ) == date ( "Ymd", $today ) ) {
+        $class = "today";
+      }
+      if ( $is_weekend ) {
+        if ( strlen ( $class ) ) $class .= " ";
+        $class .= "weekend";
+      }
+      if ( strlen ( $class ) ) echo " class=\"$class\"";
+      echo ">";
+ //echo date ( "D, m-d-Y H:i:s", $date ) . "<br />";
+      print_date_entries ( date ( "Ymd", $date ),
+        ( ! empty ( $user ) ) ? $user : $login, false );
+      print "</td>\n";
+    } else {
+      print "<td> </td>\n";
+    }
+  }
+  print "</tr>\n";
+}
+?>
+</table><br />
+
+<?php
+if ( ! empty ( $eventinfo ) ) {
+  echo $eventinfo;
+}
+
+display_unapproved_events ( ( $is_assistant || 
+  $is_nonuser_admin ? $user : $login ) );
+?>
+
+<br />
+<a title="<?php 
+ etranslate("Generate printer-friendly version")
+?>" class="printer" href="view_l.php?id=<?php echo $id?>&<?php
+ if ( $thisyear ) {
+  echo "year=$thisyear&month=$thismonth&";
+ }
+ if ( ! empty ( $user ) ) echo "user=$user&";
+ if ( ! empty ( $cat_id ) ) echo "cat_id=$cat_id&";
+?>friendly=1" target="cal_printer_friendly" onmouseover="window.status = '<?php 
+ etranslate("Generate printer-friendly version")?>'">[<?php 
+ etranslate("Printer Friendly")?>]</a>
+
+<?php print_trailer ();?>
+</body>
+</html>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/view_m.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/view_m.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/view_m.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,259 @@
+<?php
+/*
+ * $Id: view_m.php,v 1.41 2005/03/06 23:26:35 umcesrjones Exp $
+ *
+ * Page Description:
+ * Display a month view with users side by side.
+ *
+ * Input Parameters:
+ * id (*) - specify view id in webcal_view table
+ * date - specify the starting date of the view.
+ *   If not specified, current date will be used.
+ * friendly - if set to 1, then page does not include links or
+ *   trailer navigation.
+ * (*) required field
+ *
+ * Security:
+ * Must have "allow view others" enabled ($allow_view_other) in
+ *   System Settings unless the user is an admin user ($is_admin).
+ * If the view is not global, the user must be owner of the view.
+ * If the view is global, then and user_sees_only_his_groups is
+ * enabled, then we remove users not in this user's groups
+ * (except for nonuser calendars... which we allow regardless of group).
+ */
+include_once 'includes/init.php';
+
+$error = "";
+
+$USERS_PER_TABLE = 6;
+
+if ( $allow_view_other == "N" && ! $is_admin ) {
+  // not allowed...
+  send_to_preferred_view ();
+}
+
+if ( empty ( $id ) ) {
+  do_redirect ( "views.php" );
+}
+
+// Find view name in $views[]
+$view_name = "";
+for ( $i = 0; $i < count ( $views ); $i++ ) {
+  if ( $views[$i]['cal_view_id'] == $id ) {
+    $view_name = $views[$i]['cal_name'];
+  }
+}
+
+// If view_name not found, then the specified view id does not
+// belong to current user. 
+if ( $view_name == "" ) {
+  $error = translate ( "You are not authorized" );
+}
+
+$INC = array('js/popups.php');
+print_header($INC);
+
+set_today($date);
+
+$next = mktime ( 3, 0, 0, $thismonth + 1, 1, $thisyear );
+$nextyear = date ( "Y", $next );
+$nextmonth = date ( "m", $next );
+$nextdate = sprintf ( "%04d%02d01", $nextyear, $nextmonth );
+
+$prev = mktime ( 3, 0, 0, $thismonth - 1, 1, $thisyear );
+$prevyear = date ( "Y", $prev );
+$prevmonth = date ( "m", $prev );
+$prevdate = sprintf ( "%04d%02d01", $prevyear, $prevmonth );
+
+$startdate = sprintf ( "%04d%02d01", $thisyear, $thismonth );
+$enddate = sprintf ( "%04d%02d31", $thisyear, $thismonth );
+$monthstart = mktime ( 3, 0, 0, $thismonth, 1, $thisyear );
+$monthend = mktime ( 3, 0, 0, $thismonth + 1, 0, $thisyear );
+$thisdate = $startdate;
+?>
+
+<div style="border-width:0px; width:99%;">
+<a title="<?php etranslate("Previous")?>" class="prev" href="view_m.php?id=<?php echo $id?>&date=<?php echo $prevdate?>"><img src="leftarrow.gif" alt="<?php etranslate("Previous")?>" /></a>
+<a title="<?php etranslate("Next")?>" class="next" href="view_m.php?id=<?php echo $id?>&date=<?php echo $nextdate?>"><img src="rightarrow.gif" alt="<?php etranslate("Next")?>" /></a>
+<div class="title">
+<span class="date"><?php
+  printf ( "%s %d", month_name ( $thismonth - 1 ), $thisyear );
+?></span><br />
+<span class="viewname"><?php echo $view_name ?></span>
+</div>
+</div><br />
+
+<?php
+// The table has names across the top and dates for rows.  Since we need
+// to spit out an entire row before we can move to the next date, we'll
+// save up all the HTML for each cell and then print it out when we're
+// done....
+// Additionally, we only want to put at most 6 users in one table since
+// any more than that doesn't really fit in the page.
+
+// get users in this view
+$res = dbi_query (
+  "SELECT cal_login FROM webcal_view_user WHERE cal_view_id = $id" );
+$viewusers = array ();
+$all_users = false;
+if ( $res ) {
+  while ( $row = dbi_fetch_row ( $res ) ) {
+    $viewusers[] = $row[0];
+    if ( $row[0] == "__all__" ) {
+      $all_users = true;
+    }
+  }
+  dbi_free_result ( $res );
+} else {
+  $error = translate ( "Database error" ) . ": " . dbi_error ();
+}
+
+if ( $all_users ) {
+  $viewusers = array ();
+  $users = get_my_users ();
+  for ( $i = 0; $i < count ( $users ); $i++ ) {
+    $viewusers[] = $users[$i]['cal_login'];
+  }
+} else {
+  // Make sure this user is allowed to see all users in this view
+  // If this is a global view, it may include users that this user
+  // is not allowed to see.
+  if ( ! empty ( $user_sees_only_his_groups ) &&
+    $user_sees_only_his_groups == 'Y' ) {
+    $myusers = get_my_users ();
+    if ( ! empty ( $nonuser_enabled ) && $nonuser_enabled == "Y" ) {
+      $myusers = array_merge ( $myusers, get_nonuser_cals () );
+    }
+    $userlookup = array();
+    for ( $i = 0; $i < count ( $myusers ); $i++ ) {
+      $userlookup[$myusers[$i]['cal_login']] = 1;
+    }
+    $newlist = array ();
+    for ( $i = 0; $i < count ( $viewusers ); $i++ ) {
+      if ( ! empty ( $userlookup[$viewusers[$i]] ) ) {
+        $newlist[] = $viewusers[$i];
+      }
+    }
+    $viewusers = $newlist;
+  }
+}
+if ( count ( $viewusers ) == 0 ) {
+  // This could happen if user_sees_only_his_groups  = Y and
+  // this user is not a member of any  group assigned to this view
+  $error = translate ( "No users for this view" );
+}
+
+if ( ! empty ( $error ) ) {
+  echo "<h2>" . translate ( "Error" ) .
+    "</h2>\n" . $error;
+  print_trailer ();
+  exit;
+}
+
+$e_save = array ();
+$re_save = array ();
+for ( $i = 0; $i < count ( $viewusers ); $i++ ) {
+  /* Pre-Load the repeated events for quckier access */
+  $repeated_events = read_repeated_events ( $viewusers[$i], "", $startdate );
+  $re_save[$i] = $repeated_events;
+  /* Pre-load the non-repeating events for quicker access */
+  $events = read_events ( $viewusers[$i], $startdate, $enddate );
+  $e_save[$i] = $events;
+}
+
+for ( $j = 0; $j < count ($viewusers); $j += $USERS_PER_TABLE ) {
+  // since print_date_entries is rather stupid, we can swap the event data
+  // around for users by changing what $events points to.
+
+  // Calculate width of columns in this table.
+  $num_left = count ($viewusers) - $j;
+  if ($num_left > $USERS_PER_TABLE) {
+    $num_left = $USERS_PER_TABLE;
+  }
+  if ($num_left > 0) {
+    if ($num_left < $USERS_PER_TABLE) {
+      $tdw = (int) (90 / $num_left);
+    } else {
+      $tdw = (int) (90 / $USERS_PER_TABLE);
+    }
+  } else {
+    $tdw = 5;
+  }
+?>
+<br /><br />
+
+<table class="main" cellspacing="0" cellpadding="0">
+<tr><th class="empty"> </th>
+<?php
+  // $j points to start of this table/row
+  // $k is counter starting at 0
+  // $i starts at table start and goes until end of this table/row.
+  for ( $i = $j, $k = 0;
+    $i < count ($viewusers) && $k < $USERS_PER_TABLE; $i++, $k++ ) {
+ $user = $viewusers[$i];
+ user_load_variables ($user, "temp");
+ echo "<th style=\"width:$tdw%;\">$tempfullname</th>\n";
+  } //end for
+  echo "</tr>\n";
+
+  for ( $date = $monthstart; date ("Ymd", $date) <= date ("Ymd", $monthend);
+    $date += (24 * 3600), $wday++ ) {
+ $wday = strftime ("%w", $date);
+ $weekday = weekday_short_name ($wday);
+ echo "<tr><th";
+ if ( date ("Ymd", $date) == date ("Ymd", $today) ) {
+   echo " class=\"today\">";
+ } else {
+  if ($wday == 0 || $wday == 6) {
+    echo " class=\"weekend\">";
+  } else {
+    echo " class=\"row\">";
+  }
+ }
+ //non-breaking space below keeps event from wrapping prematurely
+ echo $weekday . " " .
+  round ( date ("d", $date) ) . "</th>\n";
+    for ( $i = $j, $k = 0;
+      $i < count ($viewusers) && $k < $USERS_PER_TABLE; $i++, $k++ ) {
+ $user = $viewusers[$i];
+ $events = $e_save[$i];
+ $repeated_events = $re_save[$i];
+ if ( date ("Ymd", $date) == date ("Ymd", $today) ) {
+  echo "<td class=\"today\"";
+ } else {
+  if ($wday == 0 || $wday == 6) {
+   echo "<td class=\"weekend\"";
+  } else {
+   echo "<td";
+  }
+ }
+ echo " style=\"width:$tdw%;\">";
+ //echo date ( "D, m-d-Y H:i:s", $date ) . "<br />";
+      if ( empty ($add_link_in_views) || $add_link_in_views != "N" ) {
+        echo html_for_add_icon ( date ("Ymd", $date), "", "", $user );
+      }
+      print_date_entries ( date ("Ymd", $date), $user, true );
+      echo "</td>";
+    } //end for
+    echo "</tr>\n";
+  }
+
+  echo "</table>\n<br /><br />\n";
+}
+
+$user = ""; // reset
+
+if ( ! empty ( $eventinfo ) ) {
+  echo $eventinfo;
+}
+
+echo "<a title=\"" . 
+  translate("Generate printer-friendly version") . "\" class=\"printer\" " .
+  "href=\"view_m.php?id=$id&date=$thisdate&friendly=1\" " .
+  "target=\"cal_printer_friendly\" onmouseover=\"window.status='" .
+  translate("Generate printer-friendly version") . "'\">[" . 
+  translate("Printer Friendly") . "]</a>\n";
+
+print_trailer (); ?>
+</body>
+</html>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/view_t.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/view_t.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/view_t.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,290 @@
+<?php
+/*
+ * $Id: view_t.php,v 1.38 2005/03/06 23:06:21 umcesrjones Exp $
+ *
+ * Page Description:
+ * This page will display a timebar for a week or month as
+ * specified by timeb
+ *
+ * Input Parameters:
+ * id (*) - specify view id in webcal_view table
+ * date - specify the starting date of the view.
+ *   If not specified, current date will be used.
+ * friendly - if set to 1, then page does not include links or
+ *   trailer navigation.
+ * timeb - 1 = week, else month
+ * (*) required field
+ *
+ * Security:
+ * Must have "allow view others" enabled ($allow_view_other) in
+ *   System Settings unless the user is an admin user ($is_admin).
+ * If the view is not global, the user must be owner of the view.
+ * If the view is global, then and user_sees_only_his_groups is
+ * enabled, then we remove users not in this user's groups
+ * (except for nonuser calendars... which we allow regardless of group).
+ */
+include_once 'includes/init.php';
+
+$error = "";
+$USERS_PER_TABLE = 6;
+
+if ( $allow_view_other == "N" && ! $is_admin ) {
+  // not allowed...
+  send_to_preferred_view ();
+}
+
+if ( empty ( $id ) ) {
+  do_redirect ( "views.php" );
+}
+
+// Find view name in $views[]
+$view_name = "";
+for ( $i = 0; $i < count ( $views ); $i++ ) {
+  if ( $views[$i]['cal_view_id'] == $id ) {
+    $view_name = $views[$i]['cal_name'];
+  }
+}
+
+// If view_name not found, then the specified view id does not
+// belong to current user. 
+if ( empty ( $view_name ) ) {
+  $error = translate ( "You are not authorized" );
+}
+
+$INC = array('js/popups.php');
+print_header($INC);
+
+// Initialize date to first of current month
+if ( $timeb == 0 ) {
+  $date = substr($date,0,6)."01";
+}
+
+set_today($date);
+
+// Week timebar
+if ( $timeb == 1 ) {
+  $next = mktime ( 3, 0, 0, $thismonth, $thisday + 7, $thisyear );
+} else {
+  $next = mktime ( 3, 0, 0, $thismonth + 1, $thisday, $thisyear );
+}
+$nextyear = date ( "Y", $next );
+$nextmonth = date ( "m", $next );
+$nextday = date ( "d", $next );
+$nextdate = sprintf ( "%04d%02d%02d", $nextyear, $nextmonth, $nextday );
+
+if ( $timeb == 1 ) {
+  $prev = mktime ( 3, 0, 0, $thismonth, $thisday - 7, $thisyear );
+} else {
+  $prev = mktime ( 3, 0, 0, $thismonth - 1, $thisday, $thisyear );
+}
+$prevyear = date ( "Y", $prev );
+$prevmonth = date ( "m", $prev );
+$prevday = date ( "d", $prev );
+$prevdate = sprintf ( "%04d%02d%02d", $prevyear, $prevmonth, $prevday );
+
+// We add 2 hours on to the time so that the switch to DST doesn't
+// throw us off.  So, all our dates are 2AM for that day.
+if ( $timeb == 1 ) {
+  if ( $WEEK_START == 1 ) {
+    $wkstart = get_monday_before ( $thisyear, $thismonth, $thisday );
+  } else {
+    $wkstart = get_sunday_before ( $thisyear, $thismonth, $thisday );
+  }
+} else {
+  $wkstart = mktime ( 3, 0, 0, $thismonth, 1, $thisyear );
+}
+
+if ( $timeb == 1 ) {
+  $wkend = $wkstart + ( 3600 * 24 * 6 );
+} else {
+  $wkend = mktime ( 3, 0, 0, $thismonth + 1, 0, $thisyear );
+}
+$startdate = date ( "Ymd", $wkstart );
+$enddate = date ( "Ymd", $wkend );
+
+$thisdate = $startdate;
+
+if ( $timeb == 1 ) {
+  $val_boucle = 7;
+} else {
+  $val_boucle = date("t", $wkstart);
+}
+for ( $i = 0; $i < $val_boucle; $i++ ) {
+  $days[$i] = $wkstart + ( 24 * 3600 ) * $i;
+  $weekdays[$i] = weekday_short_name ( ( $i + $WEEK_START ) % $val_boucle );
+  $header[$i] = $weekdays[$i] . "<br />\n" .
+     month_short_name ( date ( "m", $days[$i] ) - 1 ) .
+     " " . date ( "d", $days[$i] );
+}
+
+// get users in this view
+$res = dbi_query (
+  "SELECT cal_login FROM webcal_view_user WHERE cal_view_id = $id" );
+$viewusers = array ();
+$all_users = false;
+if ( $res ) {
+  while ( $row = dbi_fetch_row ( $res ) ) {
+    $viewusers[] = $row[0];
+    if ( $row[0] == "__all__" ) {
+      $all_users = true;
+    }
+  }
+  dbi_free_result ( $res );
+} else {
+  $error = translate ( "Database error" ) . ": " . dbi_error ();
+}
+
+if ( $all_users ) {
+  $viewusers = array ();
+  $users = get_my_users ();
+  for ( $i = 0; $i < count ( $users ); $i++ ) {
+    $viewusers[] = $users[$i]['cal_login'];
+  }
+} else {
+  // Make sure this user is allowed to see all users in this view
+  // If this is a global view, it may include users that this user
+  // is not allowed to see.
+  if ( ! empty ( $user_sees_only_his_groups ) &&
+    $user_sees_only_his_groups == 'Y' ) {
+    $myusers = get_my_users ();
+    if ( ! empty ( $nonuser_enabled ) && $nonuser_enabled == "Y" ) {
+      $myusers = array_merge ( $myusers, get_nonuser_cals () );
+    }
+    $userlookup = array();
+    for ( $i = 0; $i < count ( $myusers ); $i++ ) {
+      $userlookup[$myusers[$i]['cal_login']] = 1;
+    }
+    $newlist = array ();
+    for ( $i = 0; $i < count ( $viewusers ); $i++ ) {
+      if ( ! empty ( $userlookup[$viewusers[$i]] ) ) {
+        $newlist[] = $viewusers[$i];
+      }
+    }
+    $viewusers = $newlist;
+  }
+}
+if ( count ( $viewusers ) == 0 ) {
+  // This could happen if user_sees_only_his_groups  = Y and
+  // this user is not a member of any  group assigned to this view
+  $error = translate ( "No users for this view" );
+}
+
+if ( ! empty ( $error ) ) {
+  echo "<h2>" . translate ( "Error" ) .
+    "</h2>\n" . $error;
+  print_trailer ();
+  exit;
+}
+
+?>
+
+<div style="border-width:0px; width:99%;">
+<a title="<?php etranslate("Previous")?>" class="prev" href="view_t.php?timeb=
+<?php echo $timeb?>&id=<?php echo $id?>&date=
+<?php echo $prevdate?>"><img src="leftarrow.gif" alt="
+<?php etranslate("Previous")?>" /></a>
+
+<a title="<?php etranslate("Next")?>" class="next" href="view_t.php?timeb=
+<?php echo $timeb?>&id=<?php echo $id?>&date=
+<?php echo $nextdate?>"><img src="rightarrow.gif" alt="
+<?php etranslate("Next")?>" /></a>
+<div class="title">
+<span class="date"><?php
+  echo date_to_str ( date ( "Ymd", $wkstart ), false ) .
+    "    -    " .
+    date_to_str ( date ( "Ymd", $wkend ), false );
+?></span><br />
+<span class="viewname"><?php 
+ echo $view_name 
+?></span>
+</div>
+</div><br /><br />
+
+<?php
+// The table has names across the top and dates for rows.  Since we need
+// to spit out an entire row before we can move to the next date, we'll
+// save up all the HTML for each cell and then print it out when we're
+// done..
+// Additionally, we only want to put at most 6 users in one table since
+// any more than that doesn't really fit in the page.
+
+
+$e_save = array ();
+$re_save = array ();
+for ( $i = 0; $i < count ( $viewusers ); $i++ ) {
+  /* Pre-Load the repeated events for quckier access */
+  $repeated_events = read_repeated_events ( $viewusers[$i], "", $startdate );
+  $re_save = array_merge($re_save, $repeated_events);
+  /* Pre-load the non-repeating events for quicker access */
+  $events = read_events ( $viewusers[$i], $startdate, $enddate );
+  $e_save = array_merge($e_save, $events);
+}
+$events = $e_save;
+$repeated_events = $re_save;
+?>
+
+<table class="viewt">
+<?php
+for ( $date = $wkstart, $h = 0;
+  date ( "Ymd", $date ) <= date ( "Ymd", $wkend );
+  $date += ( 24 * 3600 ), $h++ ) {
+  $wday = strftime ( "%w", $date );
+  $weekday = weekday_short_name ( $wday );
+  if ( date ( "Ymd", $date ) == date ( "Ymd", $today ) ) {
+    echo "<tr><th class=\"today\">";
+  } else {
+    echo "<tr><th class=\"row\">";
+  }
+  if ( empty ( $add_link_in_views ) || $add_link_in_views != "N" )  {
+    echo html_for_add_icon ( date ( "Ymd", $date ), "", "", $user );
+  }
+  echo $weekday . " " . round ( date ( "d", $date ) ) . "</th>\n";
+
+  //start the container cell for each day, with its appropriate style
+  if ( date ( "Ymd", $date ) == date ( "Ymd", $today ) ) {
+    echo "<td class=\"today\">";
+  } else {
+    if ( $wday == 0 || $wday == 6 ) {
+      echo "<td class=\"weekend\">";
+    } else {
+      echo "<td class=\"reg\">";
+    }
+  }
+
+  // Default settings
+  if ( ! isset ($prefarray["WORK_DAY_START_HOUR"] ) || 
+    ! isset ( $prefarray["WORK_DAY_END_HOUR"] ) ) {
+     $val = dbi_fetch_row ( dbi_query ( "SELECT cal_value FROM webcal_config 
+     where cal_setting='WORK_DAY_START_HOUR'" ));
+     $prefarray["WORK_DAY_START_HOUR"]=$val[0];
+     $val = dbi_fetch_row ( dbi_query ( "SELECT cal_value FROM webcal_config 
+     where cal_setting='WORK_DAY_END_HOUR'" ));
+     $prefarray["WORK_DAY_END_HOUR"]=$val[0];
+  }
+    
+  print_header_timebar($prefarray["WORK_DAY_START_HOUR"], 
+    $prefarray["WORK_DAY_END_HOUR"]);
+  print_date_entries_timebar ( date ( "Ymd", $date ), $GLOBALS["login"], true );
+  echo "</td>";
+  echo "</tr>\n";
+}
+
+echo "</table>\n<br />\n";
+
+$user = ""; // reset
+
+if ( ! empty ( $eventinfo ) ) {
+  echo $eventinfo;
+}
+
+echo "<a title=\"" . translate("Generate printer-friendly version") . "\" " .
+  "class=\"printer\" href=\"view_t.php?timeb=$timeb&id=$id&date=" .
+  "$thisdate&friendly=1\" target=\"cal_printer_friendly\" " .
+  "onmouseover=\"window.status='" .
+  translate("Generate printer-friendly version") .
+  "'\">[" . translate("Printer Friendly") . "]</a>\n";
+
+print_trailer ();
+?>
+</body>
+</html>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/view_v.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/view_v.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/view_v.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,256 @@
+<?php
+/*
+ * $Id: view_v.php,v 1.33 2005/03/06 23:26:35 umcesrjones Exp $
+ *
+ * Page Description:
+ * This page will display the month "view" with all users's events
+ * on the same calendar.  (The other month "view" displays each user
+ * calendar in a separate column, side-by-side.)  This view gives you
+ * the same effect as enabling layers, but with layers you can only
+ * have one configuration of users.
+ *
+ * Input Parameters:
+ * id (*) - specify view id in webcal_view table
+ * date - specify the starting date of the view.
+ *   If not specified, current date will be used.
+ * friendly - if set to 1, then page does not include links or
+ *   trailer navigation.
+ * (*) required field
+ *
+ * Security:
+ * Must have "allow view others" enabled ($allow_view_other) in
+ *   System Settings unless the user is an admin user ($is_admin).
+ * If the view is not global, the user must be owner of the view.
+ * If the view is global, then and user_sees_only_his_groups is
+ * enabled, then we remove users not in this user's groups
+ * (except for nonuser calendars... which we allow regardless of group).
+ */
+include_once 'includes/init.php';
+
+$error = "";
+$DAYS_PER_TABLE = 7;
+
+if ( $allow_view_other == "N" && ! $is_admin ) {
+  // not allowed...
+  send_to_preferred_view ();
+}
+if ( empty ( $id ) ) {
+  do_redirect ( "views.php" );
+}
+
+// Find view name in $views[]
+$view_name = "";
+for ( $i = 0; $i < count ( $views ); $i++ ) {
+  if ( $views[$i]['cal_view_id'] == $id ) {
+    $view_name = $views[$i]['cal_name'];
+  }
+}
+
+// If view_name not found, then the specified view id does not
+// belong to current user. 
+if ( empty( $view_name ) ) {
+  $error = translate ( "You are not authorized" );
+}
+
+$INC = array('js/popups.php');
+print_header($INC);
+
+set_today($date);
+
+$next = mktime ( 3, 0, 0, $thismonth, $thisday + 7, $thisyear );
+$nextyear = date ( "Y", $next );
+$nextmonth = date ( "m", $next );
+$nextday = date ( "d", $next );
+$nextdate = sprintf ( "%04d%02d%02d", $nextyear, $nextmonth, $nextday );
+
+$prev = mktime ( 3, 0, 0, $thismonth, $thisday - 7, $thisyear );
+$prevyear = date ( "Y", $prev );
+$prevmonth = date ( "m", $prev );
+$prevday = date ( "d", $prev );
+$prevdate = sprintf ( "%04d%02d%02d", $prevyear, $prevmonth, $prevday );
+
+// We add 2 hours on to the time so that the switch to DST doesn't
+// throw us off.  So, all our dates are 2AM for that day.
+if ( $WEEK_START == 1 ) {
+  $wkstart = get_monday_before ( $thisyear, $thismonth, $thisday );
+} else {
+  $wkstart = get_sunday_before ( $thisyear, $thismonth, $thisday );
+}
+$wkend = $wkstart + ( 3600 * 24 * 6 );
+$startdate = date ( "Ymd", $wkstart );
+$enddate = date ( "Ymd", $wkend );
+
+$thisdate = $startdate;
+
+for ( $i = 0; $i < 7; $i++ ) {
+  $days[$i] = $wkstart + ( 24 * 3600 ) * $i;
+  $weekdays[$i] = weekday_short_name ( ( $i + $WEEK_START ) % 7 );
+  $header[$i] = $weekdays[$i] . "<br />" .
+     month_short_name ( date ( "m", $days[$i] ) - 1 ) .
+     " " . date ( "d", $days[$i] );
+}
+?>
+
+<div style="border-width:0px; width:99%;">
+<a title="<?php etranslate("Previous")?>" class="prev" 
+  href="view_v.php?id=<?php echo $id?>&date=<?php echo $prevdate?>">
+  <img src="leftarrow.gif" alt="<?php etranslate("Previous")?>" /></a>
+
+<a title="<?php etranslate("Next")?>" class="next" 
+  href="view_v.php?id=<?php echo $id?>&date=<?php echo $nextdate?>">
+  <img src="rightarrow.gif" class="prevnext" alt="<?php etranslate("Next")?>" /></a>
+<div class="title">
+<span class="date"><?php
+  echo date_to_str ( date ( "Ymd", $wkstart ), false ) .
+    "    -    " .
+    date_to_str ( date ( "Ymd", $wkend ), false );
+?></span><br />
+<span class="viewname"><?php echo $view_name ?></span>
+</div></div><br />
+
+<?php
+// The table has names across the top and dates for rows.  Since we need
+// to spit out an entire row before we can move to the next date, we'll
+// save up all the HTML for each cell and then print it out when we're
+// done..
+// Additionally, we only want to put at most 6 users in one table since
+// any more than that doesn't really fit in the page.
+
+// get users in this view
+$res = dbi_query (
+  "SELECT cal_login FROM webcal_view_user WHERE cal_view_id = $id" );
+$viewusers = array ();
+$all_users = false;
+if ( $res ) {
+  while ( $row = dbi_fetch_row ( $res ) ) {
+    $viewusers[] = $row[0];
+    if ( $row[0] == "__all__" ) {
+      $all_users = true;
+    }
+  }
+  dbi_free_result ( $res );
+} else {
+  $error = translate ( "Database error" ) . ": " . dbi_error ();
+}
+
+if ( $all_users ) {
+  $viewusers = array ();
+  $users = get_my_users ();
+  for ( $i = 0; $i < count ( $users ); $i++ ) {
+    $viewusers[] = $users[$i]['cal_login'];
+  }
+} else {
+  // Make sure this user is allowed to see all users in this view
+  // If this is a global view, it may include users that this user
+  // is not allowed to see.
+  if ( ! empty ( $user_sees_only_his_groups ) &&
+    $user_sees_only_his_groups == 'Y' ) {
+    $myusers = get_my_users ();
+    if ( ! empty ( $nonuser_enabled ) && $nonuser_enabled == "Y" ) {
+      $myusers = array_merge ( $myusers, get_nonuser_cals () );
+    }
+    $userlookup = array ();
+    for ( $i = 0; $i < count ( $myusers ); $i++ ) {
+      $userlookup[$myusers[$i]['cal_login']] = 1;
+    }
+    $newlist = array ();
+    for ( $i = 0; $i < count ( $viewusers ); $i++ ) {
+      if ( ! empty ( $userlookup[$viewusers[$i]] ) ) {
+        $newlist[] = $viewusers[$i];
+      }
+    }
+    $viewusers = $newlist;
+  }
+}
+if ( count ( $viewusers ) == 0 ) {
+  // This could happen if user_sees_only_his_groups  = Y and
+  // this user is not a member of any  group assigned to this view
+  $error = translate ( "No users for this view" );
+}
+
+if ( ! empty ( $error ) ) {
+  echo "<h2>" . translate ( "Error" ) .
+    "</h2>\n" . $error;
+  print_trailer ();
+  exit;
+}
+
+$e_save = array ();
+$re_save = array ();
+for ( $i = 0; $i < count ( $viewusers ); $i++ ) {
+  /* Pre-Load the repeated events for quckier access */
+  $repeated_events = read_repeated_events ( $viewusers[$i], "", $startdate );
+  $re_save[$i] = $repeated_events;
+  /* Pre-load the non-repeating events for quicker access */
+  $events = read_events ( $viewusers[$i], $startdate, $enddate );
+  $e_save[$i] = $events;
+}
+
+for ( $j = 0; $j < 7; $j += $DAYS_PER_TABLE ) {
+  // since print_date_entries is rather stupid, we can swap the event data
+  // around for users by changing what $events points to.
+
+  $tdw = 12; // column width percent
+?>
+
+<table class="main" cellspacing="0" cellpadding="0">
+<tr><th class="empty"> </th>
+<?php
+  for ( $date = $wkstart, $h = 0;
+    date ( "Ymd", $date ) <= date ( "Ymd", $wkend );
+    $date += ( 24 * 3600 ), $h++ ) {
+    $wday = strftime ( "%w", $date );
+    $weekday = weekday_short_name ( $wday );
+    if ( date ( "Ymd", $date ) == date ( "Ymd", $today ) ) {
+      echo "<th class=\"today\" style=\"width:$tdw%;\">";
+    } else {
+      echo "<th style=\"width:$tdw%;\">";
+    }
+    echo $weekday . " " .
+    round ( date ( "d", $date ) ) . "</th>\n";
+  }
+  echo "</tr>\n";
+  for ( $i = 0; $i < count ( $viewusers ); $i++ ) {
+    echo "\n<tr>\n";
+    $user = $viewusers[$i];
+    user_load_variables ( $user, "temp" );
+    echo "<th class=\"row\" style=\"width:$tdw%;\">$tempfullname</th>";
+    for ( $date = $wkstart, $h = 0;
+      date ( "Ymd", $date ) <= date ( "Ymd", $wkend );
+      $date += ( 24 * 3600 ), $h++ ) {
+      $wday = strftime ( "%w", $date );
+      if ( $wday == 0 || $wday == 6 ) {
+        echo "<td class=\"weekend\" style=\"width:$tdw%;\">";
+      } else {
+        echo "<td style=\"width:$tdw%;\">";
+      }
+      $events = $e_save[$i];
+      $repeated_events = $re_save[$i];
+      if ( empty ( $add_link_in_views ) || $add_link_in_views != "N" ) {
+        echo html_for_add_icon ( date ( "Ymd", $date ), "", "", $user );
+      }
+      print_date_entries ( date ( "Ymd", $date ), $user, true );
+      echo "</td>";
+    }
+    echo "</tr>\n";
+  }
+  echo "</table>\n<br /><br />\n";
+}
+
+$user = ""; // reset
+
+if ( ! empty ( $eventinfo ) ) {
+  echo $eventinfo;
+}
+
+echo "<a title=\"" . translate("Generate printer-friendly version") . 
+  "\" class=\"printer\" href=\"view_v.php?id=$id&date=" .
+  "$thisdate&friendly=1\" " .
+  "target=\"cal_printer_friendly\" onmouseover=\"window.status='" .
+  translate("Generate printer-friendly version") .
+  "'\">[" . translate("Printer Friendly") . "]</a>\n";
+
+print_trailer ();
+?>
+</body>
+</html>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/view_w.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/view_w.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/view_w.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,278 @@
+<?php
+/*
+ * $Id: view_w.php,v 1.37 2005/03/06 23:08:40 umcesrjones Exp $
+ *
+ * Page Description:
+ * Display view of a week with users side by side.
+ *
+ * Input Parameters:
+ * id (*) - specify view id in webcal_view table
+ * date - specify the starting date of the view.
+ *   If not specified, current date will be used.
+ * friendly - if set to 1, then page does not include links or
+ *   trailer navigation.
+ * (*) required field
+ *
+ * Security:
+ * Must have "allow view others" enabled ($allow_view_other) in
+ *   System Settings unless the user is an admin user ($is_admin).
+ * If the view is not global, the user must be owner of the view.
+ * If the view is global, then and user_sees_only_his_groups is
+ * enabled, then we remove users not in this user's groups
+ * (except for nonuser calendars... which we allow regardless of group).
+ */
+include_once 'includes/init.php';
+
+$error = "";
+$USERS_PER_TABLE = 6;
+
+if ( $allow_view_other == "N" && ! $is_admin ) {
+  // not allowed...
+  send_to_preferred_view ();
+}
+
+if ( empty ( $id ) ) {
+  do_redirect ( "views.php" );
+}
+
+// Find view name in $views[]
+$view_name = "";
+for ( $i = 0; $i < count ( $views ); $i++ ) {
+  if ( $views[$i]['cal_view_id'] == $id ) {
+    $view_name = $views[$i]['cal_name'];
+  }
+}
+
+// If view_name not found, then the specified view id does not
+// belong to current user. 
+if ( empty( $view_name ) ) {
+  $error = translate ( "You are not authorized" );
+}
+
+$INC = array('js/popups.php');
+print_header($INC);
+
+
+
+set_today($date);
+
+$next = mktime ( 3, 0, 0, $thismonth, $thisday + 7, $thisyear );
+$nextyear = date ( "Y", $next );
+$nextmonth = date ( "m", $next );
+$nextday = date ( "d", $next );
+$nextdate = sprintf ( "%04d%02d%02d", $nextyear, $nextmonth, $nextday );
+
+$prev = mktime ( 3, 0, 0, $thismonth, $thisday - 7, $thisyear );
+$prevyear = date ( "Y", $prev );
+$prevmonth = date ( "m", $prev );
+$prevday = date ( "d", $prev );
+$prevdate = sprintf ( "%04d%02d%02d", $prevyear, $prevmonth, $prevday );
+
+// We add 2 hours on to the time so that the switch to DST doesn't
+// throw us off.  So, all our dates are 2AM for that day.
+if ( $WEEK_START == 1 ) {
+  $wkstart = get_monday_before ( $thisyear, $thismonth, $thisday );
+} else {
+  $wkstart = get_sunday_before ( $thisyear, $thismonth, $thisday );
+}
+$wkend = $wkstart + ( 3600 * 24 * 6 );
+$startdate = date ( "Ymd", $wkstart );
+$enddate = date ( "Ymd", $wkend );
+
+$thisdate = $startdate;
+
+for ( $i = 0; $i < 7; $i++ ) {
+  $days[$i] = $wkstart + ( 24 * 3600 ) * $i;
+  $weekdays[$i] = weekday_short_name ( ( $i + $WEEK_START ) % 7 );
+  $header[$i] = $weekdays[$i] . "<br />" .
+     month_short_name ( date ( "m", $days[$i] ) - 1 ) .
+     " " . date ( "d", $days[$i] );
+}
+
+
+// get users in this view
+$res = dbi_query (
+  "SELECT cal_login FROM webcal_view_user WHERE cal_view_id = $id" );
+$viewusers = array ();
+$all_users = false;
+if ( $res ) {
+  while ( $row = dbi_fetch_row ( $res ) ) {
+    $viewusers[] = $row[0];
+    if ( $row[0] == "__all__" ) {
+      $all_users = true;
+    }
+  }
+  dbi_free_result ( $res );
+} else {
+  $error = translate ( "Database error" ) . ": " . dbi_error ();
+}
+
+if ( $all_users ) {
+  $viewusers = array ();
+  $users = get_my_users ();
+  for ( $i = 0; $i < count ( $users ); $i++ ) {
+    $viewusers[] = $users[$i]['cal_login'];
+  }
+} else {
+  // Make sure this user is allowed to see all users in this view
+  // If this is a global view, it may include users that this user
+  // is not allowed to see.
+  if ( ! empty ( $user_sees_only_his_groups ) &&
+    $user_sees_only_his_groups == 'Y' ) {
+    $myusers = get_my_users ();
+    if ( ! empty ( $nonuser_enabled ) && $nonuser_enabled == "Y" ) {
+      $myusers = array_merge ( $myusers, get_nonuser_cals () );
+    }
+    $userlookup = array ();
+    for ( $i = 0; $i < count ( $myusers ); $i++ ) {
+      $userlookup[$myusers[$i]['cal_login']] = 1;
+    }
+    $newlist = array ();
+    for ( $i = 0; $i < count ( $viewusers ); $i++ ) {
+      if ( ! empty ( $userlookup[$viewusers[$i]] ) ) {
+        $newlist[] = $viewusers[$i];
+      }
+    }
+    $viewusers = $newlist;
+  }
+}
+if ( count ( $viewusers ) == 0 ) {
+  // This could happen if user_sees_only_his_groups  = Y and
+  // this user is not a member of any  group assigned to this view
+  $error = translate ( "No users for this view" );
+}
+
+if ( ! empty ( $error ) ) {
+  echo "<h2>" . translate ( "Error" ) .
+    "</h2>\n" . $error;
+  print_trailer ();
+  exit;
+}
+?>
+
+<div style="border-width:0px; width:99%;">
+<a title="<?php etranslate("Previous")?>" class="prev" 
+  href="view_w.php?id=<?php echo $id?>&date=<?php echo $prevdate?>">
+  <img src="leftarrow.gif" alt="<?php etranslate("Previous")?>" /></a>
+<a title="<?php etranslate("Next")?>" class="next" 
+  href="view_w.php?id=<?php echo $id?>&date=<?php echo $nextdate?>">
+  <img src="rightarrow.gif" alt="<?php etranslate("Next")?>" /></a>
+<div class="title">
+<span class="date"><?php
+  echo date_to_str ( date ( "Ymd", $wkstart ), false ) .
+    "    -    " .
+    date_to_str ( date ( "Ymd", $wkend ), false );
+?></span><br />
+<span class="viewname"><?php echo $view_name ?></span>
+</div>
+</div><br />
+
+<?php
+// The table has names across the top and dates for rows.  Since we need
+// to spit out an entire row before we can move to the next date, we'll
+// save up all the HTML for each cell and then print it out when we're
+// done..
+// Additionally, we only want to put at most 6 users in one table since
+// any more than that doesn't really fit in the page.
+
+
+$e_save = array ();
+$re_save = array ();
+for ( $i = 0; $i < count ( $viewusers ); $i++ ) {
+  /* Pre-Load the repeated events for quckier access */
+  $repeated_events = read_repeated_events ( $viewusers[$i], "", $startdate );
+  $re_save[$i] = $repeated_events;
+  /* Pre-load the non-repeating events for quicker access */
+  $events = read_events ( $viewusers[$i], $startdate, $enddate );
+  $e_save[$i] = $events;
+}
+
+for ( $j = 0; $j < count ( $viewusers ); $j += $USERS_PER_TABLE ) {
+  // since print_date_entries is rather stupid, we can swap the event data
+  // around for users by changing what $events points to.
+
+  // Calculate width of columns in this table.
+  $num_left = count ( $viewusers ) - $j;
+  if ( $num_left > $USERS_PER_TABLE ) {
+    $num_left = $USERS_PER_TABLE;
+  }
+  if ( $num_left > 0 ) {
+    if ( $num_left < $USERS_PER_TABLE ) {
+      $tdw = (int) ( 90 / $num_left );
+    } else {
+      $tdw = (int) ( 90 / $USERS_PER_TABLE );
+    }
+  } else {
+    $tdw = 5;
+  }
+?>
+
+<table class="main" cellspacing="0" cellpadding="1">
+<tr><th class="empty"> </th>
+
+<?php
+  // $j points to start of this table/row
+  // $k is counter starting at 0
+  // $i starts at table start and goes until end of this table/row.
+  for ( $i = $j, $k = 0;
+    $i < count ( $viewusers ) && $k < $USERS_PER_TABLE; $i++, $k++ ) {
+    $user = $viewusers[$i];
+    user_load_variables ( $user, "temp" );
+    echo "<th style=\"width:$tdw%;\">$tempfullname</th>\n";
+  }
+  echo "</tr>\n";
+
+  for ( $xdate = $wkstart, $h = 0;
+    date ( "Ymd", $xdate ) <= date ( "Ymd", $wkend );
+    $xdate += ( 24 * 3600 ), $h++ ) {
+    $wday = strftime ( "%w", $xdate );
+    $weekday = weekday_short_name ( $wday );
+    if ( date ( "Ymd", $xdate ) == date ( "Ymd", $today ) ) {
+      echo "<tr><th class=\"today\">";
+    } else {
+      echo "<tr><th class=\"row\">";
+    }
+    echo $weekday . " " .
+      round ( date ( "d", $xdate ) ) . "</th>\n";
+    for ( $i = $j, $k = 0;
+      $i < count ( $viewusers ) && $k < $USERS_PER_TABLE; $i++, $k++ ) {
+      $user = $viewusers[$i];
+      $events = $e_save[$i];
+      $repeated_events = $re_save[$i];
+    if ( date ( "Ymd", $xdate ) == date ( "Ymd", $today ) ) {
+      echo "<td class=\"today\" style=\"width:$tdw%;\">";
+    } else {
+      if ( $wday == 0 || $wday == 6 ) {
+        echo "<td class=\"weekend\" style=\"width:$tdw%;\">";
+      } else {
+        echo "<td style=\"width:$tdw%;\">";
+      }
+    }
+      //echo date ( "D, m-d-Y H:i:s", $xdate ) . "<br />";
+      if ( empty ( $add_link_in_views ) || $add_link_in_views != "N" ) {
+        echo html_for_add_icon ( date ( "Ymd", $xdate ), "", "", $user );
+      }
+      print_date_entries ( date ( "Ymd", $xdate ), $user, true );
+      echo "</td>\n";
+    }
+    echo "</tr>\n";
+  }
+  echo "</table>\n<br /><br />\n";
+}
+
+$user = ""; // reset
+
+if ( ! empty ( $eventinfo ) ) {
+  echo $eventinfo;
+}
+
+echo "<a title=\"" . translate("Generate printer-friendly version") . 
+  "\" class=\"printer\" href=\"view_w.php?id=$id&date=$date&friendly=1\" " .
+  "target=\"cal_printer_friendly\" onmouseover=\"window.status='" .
+  translate("Generate printer-friendly version") .
+  "'\">[" . translate("Printer Friendly") . "]</a>\n";
+
+print_trailer ();
+?>
+</body>
+</html>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/views.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/views.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/views.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,40 @@
+<?php
+include_once 'includes/init.php';
+
+if ( ! $is_admin )
+  $user = $login;
+
+print_header();
+?>
+
+<h2><?php etranslate("Views")?></h2>
+<a title="<?php etranslate("Admin") ?>" class="nav" href="adminhome.php">« <?php etranslate("Admin") ?></a><br /><br />
+<ul>
+<?php
+$global_found = false;
+for ( $i = 0; $i < count ( $views ); $i++ ) {
+  if ( $views[$i]['cal_is_global'] != 'Y' || $is_admin ) {
+    echo "<li><a href=\"views_edit.php?id=" . $views[$i]["cal_view_id"] .
+      "\">" . $views[$i]["cal_name"] . "</a>";
+    if ( $views[$i]['cal_is_global'] == 'Y' ) {
+      echo "<sup>*</sup>";
+      $global_found = true;
+    }
+    echo "</li>";
+  }
+}
+?>
+</ul>
+<?php
+  if ( $global_found )
+    echo "<br />\n<sup>*</sup> " . translate ( "Global" );
+?>
+<br /><br />
+<?php
+  echo "<a href=\"views_edit.php\">" . translate("Add New View") .
+    "</a><br />\n";
+?>
+
+<?php print_trailer(); ?>
+</body>
+</html>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/views_edit.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/views_edit.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/views_edit.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,186 @@
+<?php
+/*
+ * $Id: views_edit.php,v 1.28 2005/03/24 20:56:35 umcesrjones Exp $
+ *
+ * Page Description:
+ *	This page displays the views that the user currently owns and
+	* allows new ones to be created
+ *
+ * Input Parameters:
+ *	id  - specify view id in webcal_view table
+ * if blank, a new view is created
+ *
+ * Security:
+ *	Must be owner of the viewto edit
+ */
+include_once 'includes/init.php';
+
+$error = "";
+
+if ( ! $is_admin )
+  $user = $login;
+
+$BodyX = 'onload="usermode_handler();"';
+if ( $groups_enabled == "Y" ) {
+  $INC = array('js/visible.php', 'js/views_edit.php' );
+} else {
+  $INC = array( 'js/visible.php');
+}
+print_header ( $INC, "", $BodyX );
+?>
+
+<form action="views_edit_handler.php" method="post" name="editviewform">
+<?php
+$newview = true;
+$viewname = "";
+$viewtype = "";
+$viewisglobal = 'N';
+
+if ( empty ( $id ) ) {
+  $viewname = translate("Unnamed View");
+} else {
+  // search for view by id
+  for ( $i = 0; $i < count ( $views ); $i++ ) {
+    if ( $views[$i]['cal_view_id'] == $id ) {
+      $newview = false;
+      $viewname = $views[$i]["cal_name"];
+      if ( empty ( $viewname ) )
+        $viewname = translate("Unnamed View");
+      $viewtype = $views[$i]["cal_view_type"];
+      $viewisglobal = $views[$i]["cal_is_global"];
+    }
+  }
+}
+
+// If view_name not found, then the specified view id does not
+// belong to current user. 
+if ( empty( $viewname ) ) {
+  $error = translate ( "You are not authorized" );
+}
+
+// get list of users for this view
+$all_users = false;
+if ( ! $newview ) {
+  $sql = "SELECT cal_login FROM webcal_view_user WHERE cal_view_id = $id";
+    $res = dbi_query ( $sql );
+    if ( $res ) {
+      while ( $row = dbi_fetch_row ( $res ) ) {
+        $viewuser[$row[0]] = 1;
+        if ( $row[0] == "__all__" )
+          $all_users = true;
+      }
+      dbi_free_result ( $res );
+    } else {
+      $error = translate ( "Database error" ) . ": " . dbi_error ();
+    }
+}
+
+if ( ! empty ( $error ) ) {
+  echo "<h2>" . translate ( "Error" ) .
+    "</h2>\n" . $error;
+  print_trailer ();
+  exit;
+}
+	
+if ( $newview ) {
+  $v = array ();
+  echo "<h2>" . translate("Add View") . "</h2>\n";
+  echo "<input type=\"hidden\" name=\"add\" value=\"1\" />\n";
+} else {
+  echo "<h2>" . translate("Edit View") . "</h2>\n";
+  echo "<input type=\"hidden\" name=\"id\" value=\"$id\" />\n";
+}
+?>
+
+<table style="border-width:0px;">
+<tr><td>
+	<label for="viewname"><?php etranslate("View Name")?>:</label></td><td>
+	<input name="viewname" id="viewname" size="20" value="<?php echo htmlspecialchars ( $viewname );?>" />
+</td></tr>
+<tr><td>
+	<label for="viewtype"><?php etranslate("View Type")?>:</label></td><td>
+	<select name="viewtype" id="viewtype">
+		<option value="D" <?php if ( $viewtype == "D" ) echo " selected=\"selected\"";?>><?php etranslate("Day"); ?></option>
+		<option value="W" <?php if ( $viewtype == "W" ) echo " selected=\"selected\"";?>><?php etranslate("Week (Users horizontal)"); ?></option>
+		<option value="V" <?php if ( $viewtype == "V" ) echo " selected=\"selected\"";?>><?php etranslate("Week (Users vertical)"); ?></option>
+		<option value="S" <?php if ( $viewtype == "S" ) echo " selected=\"selected\"";?>><?php etranslate("Week (Timebar)"); ?></option>
+		<option value="T" <?php if ( $viewtype == "T" ) echo " selected=\"selected\"";?>><?php etranslate("Month (Timebar)"); ?></option>
+		<option value="M" <?php if ( $viewtype == "M" ) echo " selected=\"selected\"";?>><?php etranslate("Month (side by side)"); ?></option>
+		<option value="L" <?php if ( $viewtype == "L" ) echo " selected=\"selected\"";?>><?php etranslate("Month (on same calendar)"); ?></option>
+      </select> 
+<!--
+  cek - commented out since preview-views.html is hard-coded to English
+  and causes the download .tar.gz file to be 300k bigger.
+  I will add this back when we can resolve these issues.
+      <a class="nav" href="docs/preview-views.html" target="_blank">(<?php etranslate("preview"); ?>)</a>
+-->
+      </td></tr>
+
+<?php if ( $is_admin ) { ?>
+<tr><td><label>
+	<?php etranslate("Global")?>:</label></td><td>
+	<label><input type="radio" name="is_global" value="Y"
+  <?php if ( $viewisglobal != 'N' ) echo " checked=\"checked\""; ?> /> <?php etranslate("Yes") ?></label>
+     
+  	<label><input type="radio" name="is_global" value="N"
+  <?php if ( $viewisglobal == 'N' ) echo " checked=\"checked\""; ?> /> <?php etranslate("No") ?></label>
+</td></tr>
+<?php } ?>
+
+<tr><td valign="top">
+	<label for="viewusers"><?php etranslate("Users"); ?>:</label></td><td>
+<label><input type="radio" name="viewuserall" value="N" onclick="usermode_handler()"
+<?php
+  if ( ! $all_users ) {
+    echo "checked=\"checked\"";
+  }
+?>/>
+<?php etranslate("Selected");?></label>
+  
+<label><input type="radio" name="viewuserall" value="Y" onclick="usermode_handler()"
+<?php
+  if ( $all_users ) {
+    echo "checked=\"checked\"";
+  }
+?>/>
+<?php etranslate("All");?></label>
+<br/>
+<div id="viewuserlist">
+  
+	<select name="users[]" id="viewusers" size="10" multiple="multiple">
+<?php
+  // get list of all users
+  $users = get_my_users ();
+  if ($nonuser_enabled == "Y" ) {
+    $nonusers = get_nonuser_cals ();
+    $users = ($nonuser_at_top == "Y") ? array_merge($nonusers, $users) : array_merge($users, $nonusers);
+  }
+  for ( $i = 0; $i < count ( $users ); $i++ ) {
+    $u = $users[$i]['cal_login'];
+    echo "<option value=\"$u\"";
+    if ( ! empty ( $viewuser[$u] ) ) {
+      echo " selected=\"selected\"";
+    }
+    echo ">" . $users[$i]['cal_fullname'] . "</option>\n";
+  }
+?>
+</select>
+<?php if ( $groups_enabled == "Y" ) { ?>
+	<input type="button" onclick="selectUsers()" value="<?php etranslate("Select");?>..." />
+<?php } ?>
+</div>
+</td></tr>
+<tr><td colspan="2" style="text-align:center;">
+<br />
+<input type="submit" name="action" value="<?php if ( $newview ) etranslate("Add"); else etranslate("Save"); ?>" />
+<?php if ( ! $newview ) { ?>
+	<input type="submit" name="action" value="<?php etranslate("Delete")?>" onclick="return confirm('<?php etranslate("Are you sure you want to delete this entry?"); ?>')" />
+<?php } ?>
+</td></tr>
+</table>
+
+</form>
+
+<?php print_trailer(); ?>
+</body>
+</html>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/views_edit_handler.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/views_edit_handler.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/views_edit_handler.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,80 @@
+<?php
+include_once 'includes/init.php';
+
+$error = "";
+
+$viewisglobal = getPostValue ( "is_global" );
+if ( ! $is_admin || $viewisglobal != 'Y' )
+  $viewisglobal = 'N'; // only admin can create global view
+//echo "viewisglobal = $viewisglobal"; exit;
+
+if ( $action == "Delete" || $action == translate ("Delete") ) {
+  // delete this view
+  dbi_query ( "DELETE FROM webcal_view WHERE cal_view_id = $id " .
+    "AND cal_owner = '$login'" );
+} else {
+  if ( empty ( $viewname ) ) {
+    $error = translate("You must specify a view name");
+  }
+  else if ( ! empty ( $id ) ) {
+    # update
+    if ( ! dbi_query ( "UPDATE webcal_view SET cal_name = " .
+      "'$viewname', cal_view_type = '$viewtype', " .
+      "cal_is_global = '$viewisglobal' " .
+      "WHERE cal_view_id = $id AND cal_owner = '$login'" ) ) {
+      $error = translate ("Database error") . ": " . dbi_error();
+    }
+  } else {
+    # new... get new id first
+    $res = dbi_query ( "SELECT MAX(cal_view_id) FROM webcal_view" );
+    if ( $res ) {
+      $row = dbi_fetch_row ( $res );
+      $id = $row[0];
+      $id++;
+      dbi_free_result ( $res );
+      $sql = "INSERT INTO webcal_view " .
+        "( cal_view_id, cal_owner, cal_name, cal_view_type, cal_is_global ) " .
+        " VALUES ( $id, '$login', '$viewname', '$viewtype', '$viewisglobal' )";
+      if ( ! dbi_query ( $sql ) ) {
+        $error = translate ("Database error") . ": " . dbi_error();
+      }
+    } else {
+      $error = translate ("Database error") . ": " . dbi_error();
+    }
+  }
+
+  # update user list
+  if ( $error == "" ) {
+    dbi_query ( "DELETE FROM webcal_view_user WHERE cal_view_id = $id" );
+    // If selected "All", then just put "__all__" in for usernamne.
+    if ( getPostValue ( "viewuserall" ) == "Y" )
+      $users = array ( "__all__" );
+    for ( $i = 0; ! empty ( $users ) && $i < count ( $users ); $i++ ) {
+      dbi_query ( "INSERT INTO webcal_view_user ( cal_view_id, cal_login ) " .
+        "VALUES ( $id, '$users[$i]' )" );
+    }
+  }
+}
+
+
+
+if ( $error == "" ) {
+  do_redirect ( "views.php" );
+}
+print_header();
+?>
+
+<h2><?php etranslate("Error")?></h2>
+
+<blockquote>
+<?php
+
+echo $error;
+//if ( $sql != "" )
+//  echo "<br /><br /><span style=\"font-weight:bold;\">SQL:</span> $sql";
+//?>
+</blockquote>
+
+<?php print_trailer(); ?>
+</body>
+</html>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/week.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/week.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/week.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,427 @@
+<?php
+include_once 'includes/init.php';
+
+if (($user != $login) && $is_nonuser_admin) {
+   load_user_layers ($user);
+} else {
+   load_user_layers ();
+}
+
+load_user_categories ();
+
+$next = mktime ( 3, 0, 0, $thismonth, $thisday + 7, $thisyear );
+$prev = mktime ( 3, 0, 0, $thismonth, $thisday - 7, $thisyear );
+
+// We add 2 hours on to the time so that the switch to DST doesn't
+// throw us off.  So, all our dates are 2AM for that day.
+if ( $WEEK_START == 1 ) {
+   $wkstart = get_monday_before ( $thisyear, $thismonth, $thisday );
+} else {
+   $wkstart = get_sunday_before ( $thisyear, $thismonth, $thisday );
+}
+
+$wkend = $wkstart + ( 3600 * 24 * 6 );
+ 
+$startdate = date ( "Ymd", $wkstart );
+$enddate = date ( "Ymd", $wkend );
+
+if ( ! empty ( $DISPLAY_WEEKENDS ) && $DISPLAY_WEEKENDS == "N" ) {
+  if ( $WEEK_START == 1 ) {
+    $start_ind = 0;
+    $end_ind = 5;
+  } else {
+    $start_ind = 1;
+    $end_ind = 6;
+  }
+} else {
+  $start_ind = 0;
+  $end_ind = 7;
+}
+
+$HeadX = '';
+if ( ! empty ( $auto_refresh ) && $auto_refresh == "Y" &&
+  ! empty ( $auto_refresh_time ) ) {
+  $refresh = $auto_refresh_time * 60; // convert to seconds
+  $HeadX = "<meta http-equiv=\"refresh\" content=\"$refresh; url=week.php?$u_url" .
+    "date=$startdate$caturl" . 
+    ( ! empty ( $friendly ) ? "&friendly=1" : "") . "\" />\n";
+}
+$INC = array('js/popups.php');
+print_header($INC,$HeadX);
+
+/* Pre-Load the repeated events for quckier access */
+$repeated_events = read_repeated_events ( strlen ( $user ) ? $user : $login,
+  $cat_id, $startdate );
+
+/* Pre-load the non-repeating events for quicker access */
+$events = read_events ( strlen ( $user ) ? $user : $login,
+  $startdate, $enddate, $cat_id );
+
+for ( $i = 0; $i < 7; $i++ ) {
+  $days[$i] = $wkstart + ( 24 * 3600 ) * $i;
+  $weekdays[$i] = weekday_short_name ( ( $i + $WEEK_START ) % 7 );
+  $header[$i] = $weekdays[$i] . "<br />\n" .
+    date_to_str ( date ( "Ymd", $days[$i] ), $DATE_FORMAT_MD, false );
+}
+?>
+
+<div class="title">
+<span class="date"><?php
+  echo date_to_str ( date ( "Ymd", $wkstart ), "", false ) .
+    "    -    " .
+    date_to_str ( date ( "Ymd", $wkend ), "", false );
+?></span>
+<?php
+if ( $GLOBALS["DISPLAY_WEEKNUMBER"] == "Y" ) {
+  echo "<br />\n<span class=\"weeknumber\">(" .
+    translate("Week") . " " . week_number ( $wkstart ) . ")</span>";
+}
+?>
+<a title="<?php etranslate("Previous")?>" 
+class="prev" href="week.php?<?php echo $u_url; ?>date=<?php echo 
+  date("Ymd", $prev ) . $caturl;?>"><img src="leftarrow.gif" 
+  alt="<?php etranslate("Previous")?>" /></a>
+
+<a title="<?php etranslate("Next")?>" class="next" 
+href="week.php?<?php echo $u_url;?>date=<?php echo 
+  date ("Ymd", $next ) . $caturl;?>"><img src="rightarrow.gif" 
+  alt="<?php etranslate("Next")?>" /></a>
+<span class="user"><?php
+  if ( $single_user == "N" ) {
+    echo "<br />$user_fullname";
+  }
+  if ( $is_nonuser_admin ) {
+    echo "<br />-- " . translate("Admin mode") . " --";
+  }
+  if ( $is_assistant ) {
+    echo "<br />-- " . translate("Assistant mode") . " --";
+  }
+?></span>
+<?php
+  if ( $categories_enabled == "Y" && (!$user || ($user == $login || 
+    $is_assistant ))) {
+    echo "<br /><br />\n";
+    print_category_menu('week', sprintf ( "%04d%02d%02d",$thisyear, 
+      $thismonth, $thisday ), $cat_id );
+  }
+?></div>
+<br />
+
+<table class="main" cellspacing="0" cellpadding="0">
+<tr>
+<th class="empty"> </th>
+<?php
+for ( $d = $start_ind; $d < $end_ind; $d++ ) {
+  $thiswday = date ( 'w', $days[$d] );
+
+  $is_weekend = ( $thiswday == 0 || $thiswday == 6 );
+
+  if ( $is_weekend ) {
+    $class = "weekend";
+  } else {
+    $class = "";
+  }
+
+  if ( date ( 'Ymd', $days[$d] ) == date ( 'Ymd', $today ) ) {
+    if ( $class != '' ) {
+     $class .= " ";
+    }
+    $class .= "today";
+  }
+
+  echo "<th";
+
+  if ( $class != '') {
+    echo " class=\"$class\"";
+  }
+  echo ">";
+
+  if ( $can_add ) {
+    echo html_for_add_icon (  date ( "Ymd", $days[$d] ), "", "", $user );
+  }
+  echo "<a href=\"day.php?" . $u_url .
+    "date=" . date ('Ymd', $days[$d] ) . $caturl . "\">" .
+    $header[$d] . "</a></th>\n";
+}
+?>
+</tr>
+
+<?php
+if ( empty ( $TIME_SLOTS ) ) {
+  $TIME_SLOTS = 24;
+}
+
+$interval = ( 24 * 60 ) / $TIME_SLOTS;
+
+$first_slot = (int)( ( ( $WORK_DAY_START_HOUR - $TZ_OFFSET ) * 60 ) / $interval );
+$last_slot = (int)( ( ( $WORK_DAY_END_HOUR - $TZ_OFFSET ) * 60 ) / $interval );
+
+$untimed_found = false;
+$get_unapproved = ( $GLOBALS["DISPLAY_UNAPPROVED"] == "Y" );
+if ( $login == "__public__" ) {
+  $get_unapproved = false;
+}
+
+$all_day = array ();
+for ( $d = $start_ind; $d < $end_ind; $d++ ) {
+  // get all the repeating events for this date and store in array $rep
+  $date = date ( "Ymd", $days[$d] );
+  $rep = get_repeating_entries ( $user, $date );
+  $cur_rep = 0;
+
+  // Get static non-repeating events
+  $ev = get_entries ( $user, $date, $get_unapproved );
+  $hour_arr = array ();
+  $rowspan_arr = array ();
+  for ( $i = 0; $i < count ( $ev ); $i++ ) {
+    // print out any repeating events that are before this one...
+    while ( $cur_rep < count ( $rep ) &&
+      $rep[$cur_rep]['cal_time'] < $ev[$i]['cal_time'] ) {
+      if ( $get_unapproved || $rep[$cur_rep]['cal_status'] == 'A' ) {
+        if ( ! empty ( $rep[$cur_rep]['cal_ext_for_id'] ) ) {
+          $viewid = $rep[$cur_rep]['cal_ext_for_id'];
+          $viewname = $rep[$cur_rep]['cal_name'] . " (" .
+            translate("cont.") . ")";
+        } else {
+          $viewid = $rep[$cur_rep]['cal_id'];
+          $viewname = $rep[$cur_rep]['cal_name'];
+        }
+        if ( $rep[$cur_rep]['cal_duration'] == ( 24 * 60 ) ) {
+          $all_day[$d] = 1;
+        }
+        html_for_event_week_at_a_glance ( $viewid,
+          $date, $rep[$cur_rep]['cal_time'],
+          $viewname, $rep[$cur_rep]['cal_description'],
+          $rep[$cur_rep]['cal_status'], $rep[$cur_rep]['cal_priority'],
+          $rep[$cur_rep]['cal_access'], $rep[$cur_rep]['cal_duration'],
+          $rep[$cur_rep]['cal_login'], $rep[$cur_rep]['cal_category'] );
+      }
+      $cur_rep++;
+    }
+    if ( $get_unapproved || $ev[$i]['cal_status'] == 'A' ) {
+      if ( ! empty ( $ev[$i]['cal_ext_for_id'] ) ) {
+        $viewid = $ev[$i]['cal_ext_for_id'];
+        $viewname = $ev[$i]['cal_name'] . " (" .
+          translate("cont.") . ")";
+      } else {
+        $viewid = $ev[$i]['cal_id'];
+        $viewname = $ev[$i]['cal_name'];
+      }
+      if ( $ev[$i]['cal_duration'] == ( 24 * 60 ) ) {
+        $all_day[$d] = 1;
+      }
+      html_for_event_week_at_a_glance ( $viewid,
+        $date, $ev[$i]['cal_time'],
+        $viewname, $ev[$i]['cal_description'],
+        $ev[$i]['cal_status'], $ev[$i]['cal_priority'],
+        $ev[$i]['cal_access'], $ev[$i]['cal_duration'],
+        $ev[$i]['cal_login'], $ev[$i]['cal_category'] );
+    }
+  }
+  // print out any remaining repeating events
+  while ( $cur_rep < count ( $rep ) ) {
+    if ( $get_unapproved || $rep[$cur_rep]['cal_status'] == 'A' ) {
+      if ( ! empty ( $rep[$cur_rep]['cal_ext_for_id'] ) ) {
+        $viewid = $rep[$cur_rep]['cal_ext_for_id'];
+        $viewname = $rep[$cur_rep]['cal_name'] . " (" .
+          translate("cont.") . ")";
+      } else {
+        $viewid = $rep[$cur_rep]['cal_id'];
+        $viewname = $rep[$cur_rep]['cal_name'];
+      }
+      if ( $rep[$cur_rep]['cal_duration'] == ( 24 * 60 ) ) {
+        $all_day[$d] = 1;
+      }
+      html_for_event_week_at_a_glance ( $viewid,
+        $date, $rep[$cur_rep]['cal_time'],
+        $viewname, $rep[$cur_rep]['cal_description'],
+        $rep[$cur_rep]['cal_status'], $rep[$cur_rep]['cal_priority'],
+        $rep[$cur_rep]['cal_access'], $rep[$cur_rep]['cal_duration'],
+        $rep[$cur_rep]['cal_login'], $rep[$cur_rep]['cal_category'] );
+    }
+    $cur_rep++;
+  }
+
+  // squish events that use the same cell into the same cell.
+  // For example, an event from 8:00-9:15 and another from 9:30-9:45 both
+  // want to show up in the 8:00-9:59 cell.
+  $rowspan = 0;
+  $last_row = -1;
+  for ( $i = 0; $i < $TIME_SLOTS; $i++ ) {
+    if ( $rowspan > 1 ) {
+      if ( ! empty ( $hour_arr[$i] ) ) {
+        $diff_start_time = $i - $last_row;
+        if ( $rowspan_arr[$i] > 1 ) {
+          if (  $rowspan_arr[$i] + ( $diff_start_time ) >  $rowspan_arr[$last_row]  ) {
+            $rowspan_arr[$last_row] = ( $rowspan_arr[$i] + ( $diff_start_time ) );
+          }
+          $rowspan += ( $rowspan_arr[$i] - 1 );
+        } else {
+          $rowspan_arr[$last_row] += $rowspan_arr[$i];
+        }
+        // this will move entries apart that appear in one field,
+        // yet start on different hours
+        for ( $u = $diff_start_time ; $u > 0 ; $u-- ) {
+          $hour_arr[$last_row] .= "<br />\n"; 
+        }
+        $hour_arr[$last_row] .= $hour_arr[$i];
+        $hour_arr[$i] = "";
+        $rowspan_arr[$i] = 0;
+      }
+      $rowspan--;
+    } else if ( ! empty ( $rowspan_arr[$i] ) && $rowspan_arr[$i] > 1 ) {
+      $rowspan = $rowspan_arr[$i];
+      $last_row = $i;
+    }
+  }
+
+  // now save the output...
+  if ( ! empty ( $hour_arr[9999] ) && strlen ( $hour_arr[9999] ) ) {
+    $untimed[$d] = $hour_arr[9999];
+    $untimed_found = true;
+  }
+  $save_hour_arr[$d] = $hour_arr;
+  $save_rowspan_arr[$d] = $rowspan_arr;
+}
+
+// untimed events first
+if ( $untimed_found ) {
+  echo "<tr>\n<th class=\"empty\"> </th>\n";
+  for ( $d = $start_ind; $d < $end_ind; $d++ ) {
+    $thiswday = date ( "w", $days[$d] );
+    $is_weekend = ( $thiswday == 0 || $thiswday == 6 );
+    $class = ( $is_weekend ? "weekend" : "" );
+
+   if ( date ( 'Ymd', $days[$d] ) == date ( 'Ymd', $today ) ) {
+     if ($class != "") {
+       $class .= " ";
+     }
+     $class .= "today";
+   }
+   echo "<td";
+
+   // Use the class 'hasevents' for any hour block that has events
+   // in it.
+   if ( ! empty ( $untimed[$d] ) && strlen ( $untimed[$d] ) ) {
+    $class = 'hasevents';
+   }
+
+   if ( $class != "" ) {
+     echo " class=\"$class\"";
+   }
+   echo ">";
+
+   if ( ! empty ( $untimed[$d] ) && strlen ( $untimed[$d] ) ) {
+     echo $untimed[$d];
+   } else {
+     echo " ";
+   }
+   echo "</td>\n";
+  }
+  echo "</tr>\n";
+}
+
+for ( $d = $start_ind; $d < $end_ind; $d++ ) {
+  $rowspan_day[$d] = 0;
+}
+
+for ( $i = $first_slot; $i <= $last_slot; $i++ ) {
+  $time_h = (int) ( ( $i * $interval ) / 60 );
+  $time_m = ( $i * $interval ) % 60;
+  $time = display_time ( ( $time_h * 100 + $time_m ) * 100 );
+  echo "<tr>\n<th class=\"row\">" .  $time . "</th>\n";
+  for ( $d = $start_ind; $d < $end_ind; $d++ ) {
+    $thiswday = date ( "w", $days[$d] );
+    $is_weekend = ( $thiswday == 0 || $thiswday == 6 );
+    $class = ( $is_weekend ? "weekend" : "" );
+    if ( date ( 'Ymd', $days[$d] ) == date ( 'Ymd', $today ) ) {
+      if ( $class != "" ) {
+        $class .= " ";
+      }
+        $class .= "today";
+      }
+
+   // Use the class 'hasevents' for any hour block that has events
+   // in it.
+   if ( ! empty ( $save_hour_arr[$d][$i] ) &&
+     strlen ( $save_hour_arr[$d][$i] ) ) {
+     $class = 'hasevents';
+   }
+
+   if ( $rowspan_day[$d] > 1 ) {
+     // this might mean there's an overlap, or it could mean one event
+     // ends at 11:15 and another starts at 11:30.
+     if ( ! empty ( $save_hour_arr[$d][$i] ) ) {
+       echo "<td";
+       if ( $class != '' ) {
+         echo " class=\"$class\"";
+       }
+       echo ">" . $save_hour_arr[$d][$i] . "</td>\n";
+     }
+     $rowspan_day[$d]--;
+   } else if ( empty ( $save_hour_arr[$d][$i] ) ) {
+     echo "<td";
+     if ( $class != "" ) {
+       echo " class=\"$class\"";
+     }
+     echo ">";
+     if ( $can_add ) { //if user can add events...
+       echo html_for_add_icon (  date ( "Ymd", $days[$d] ), $time_h, $time_m, 
+         $user ); //..then echo the add event icon
+     }
+     echo " </td>\n";
+   } else {
+     $rowspan_day[$d] = $save_rowspan_arr[$d][$i];
+     if ( $rowspan_day[$d] > 1 ) {
+       echo "<td";
+       if ( $class != '' ) {
+         echo " class=\"$class\"";
+       }
+       echo " rowspan=\"$rowspan_day[$d]\">";
+       if ( $can_add ) {
+         echo html_for_add_icon (  date ( "Ymd", $days[$d] ), $time_h, $time_m, $user );
+       }
+       echo $save_hour_arr[$d][$i] . "</td>\n";
+     } else {
+       echo "<td";
+       if ( $class != '' ) {
+         echo " class=\"$class\"";
+       }
+       echo ">";
+       if ( $can_add ) {
+         echo html_for_add_icon (  date ( "Ymd", $days[$d] ), $time_h, $time_m, $user );
+       }
+       echo $save_hour_arr[$d][$i] . "</td>\n";
+     }
+   }
+  }
+  echo "</tr>\n";
+}
+?> 
+</table>
+<br />
+
+<?php
+if ( ! empty ( $eventinfo ) ) {
+  echo $eventinfo;
+}
+display_unapproved_events ( ( $is_assistant || 
+  $is_nonuser_admin ? $user : $login ) );
+?>
+
+<br />
+<a title="<?php etranslate("Generate printer-friendly version")?>" 
+class="printer" href="week.php?<?php
+  echo $u_url;
+  if ( $thisyear ) {
+    echo "year=$thisyear&month=$thismonth&day=$thisday";
+  }
+  echo $caturl . "&";
+?>friendly=1" target="cal_printer_friendly"
+onmouseover="window.status = '<?php etranslate("Generate printer-friendly version")?>'">[<?php etranslate("Printer Friendly")?>]</a>
+
+<?php
+print_trailer ();
+?>
+</body>
+</html>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/week_details.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/week_details.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/week_details.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,315 @@
+<?php
+include_once 'includes/init.php';
+send_no_cache_header ();
+
+if (($user != $login) && $is_nonuser_admin)
+  load_user_layers ($user);
+else
+  load_user_layers ();
+
+load_user_categories ();
+
+
+$next = mktime ( 2, 0, 0, $thismonth, $thisday + 7, $thisyear );
+$prev = mktime ( 2, 0, 0, $thismonth, $thisday - 7, $thisyear );
+
+// We add 2 hours on to the time so that the switch to DST doesn't
+// throw us off.  So, all our dates are 2AM for that day.
+if ( $WEEK_START == 1 )
+  $wkstart = get_monday_before ( $thisyear, $thismonth, $thisday );
+else
+  $wkstart = get_sunday_before ( $thisyear, $thismonth, $thisday );
+$wkend = $wkstart + ( 3600 * 24 * 6 );
+
+$startdate = date ( "Ymd", $wkstart );
+$enddate = date ( "Ymd", $wkend );
+
+if ( $DISPLAY_WEEKENDS == "N" ) {
+  if ( $WEEK_START == 1 ) {
+    $start_ind = 0;
+    $end_ind = 5;
+  } else {
+    $start_ind = 1;
+    $end_ind = 6;
+  }
+} else {
+  $start_ind = 0;
+  $end_ind = 7;
+}
+
+$HeadX = '';
+if ( $auto_refresh == "Y" && ! empty ( $auto_refresh_time ) ) {
+  $refresh = $auto_refresh_time * 60; // convert to seconds
+  $HeadX = "<meta http-equiv=\"refresh\" content=\"$refresh; url=week_details.php?$u_url" .
+    "date=$startdate$caturl\" />\n";
+}
+$INC = array('js/popups.php');
+print_header($INC,$HeadX);
+
+/* Pre-Load the repeated events for quckier access */
+$repeated_events = read_repeated_events ( strlen ( $user ) ? $user : $login, $cat_id, $startdate  );
+
+/* Pre-load the non-repeating events for quicker access */
+$events = read_events ( strlen ( $user ) ? $user : $login, $startdate, $enddate, $cat_id  );
+
+for ( $i = 0; $i < 7; $i++ ) {
+  $days[$i] = $wkstart + ( 24 * 3600 ) * $i;
+  $weekdays[$i] = weekday_short_name ( ( $i + $WEEK_START ) % 7 );
+  $header[$i] = $weekdays[$i] . " " .
+    date_to_str ( date ( "Ymd", $days[$i] ), $DATE_FORMAT_MD, false );
+}
+?>
+
+<div class="title">
+<a title="Previous" class="prev" href="week_details.php?<?php echo $u_url; ?>date=<?php echo date("Ymd", $prev ) . $caturl;?>"><img src="leftarrow.gif" alt="Previous" /></a>
+<a title="Next" class="next" href="week_details.php?<?php echo $u_url;?>date=<?php echo date ("Ymd", $next ) . $caturl;?>"><img src="rightarrow.gif" alt="Next" /></a>
+<span class="date"><?php
+  echo date_to_str ( date ( "Ymd", $wkstart ), "", false ) .
+    "    -    " .
+    date_to_str ( date ( "Ymd", $wkend ), "", false );
+?></span>
+<?php
+if ( $GLOBALS["DISPLAY_WEEKNUMBER"] == "Y" ) {
+  echo "<br />\n<span class=\"weeknumber\">(" .
+    translate("Week") . " " . week_number ( $wkstart ) . ")</span>";
+}
+?>
+<span class="user"><?php
+  if ( $single_user == "N" ) {
+    echo "<br />$user_fullname\n";
+  }
+  if ( $is_nonuser_admin )
+    echo "<br />-- " . translate("Admin mode") . " --";
+  if ( $is_assistant )
+    echo "<br />-- " . translate("Assistant mode") . " --";
+?></span>
+<?php
+  if ( $categories_enabled == "Y" ) {
+    echo "<br /><br />\n";
+    print_category_menu('week', sprintf ( "%04d%02d%02d",$thisyear, $thismonth, $thisday ), $cat_id );
+  } ?>
+</div>
+
+<center>
+<table class="main" cellspacing="0" cellpadding="0">
+<?php
+$untimed_found = false;
+for ( $d = 0; $d < 7; $d++ ) {
+  $date = date ( "Ymd", $days[$d] );
+  $thiswday = date ( "w", $days[$d] );
+  $is_weekend = ( $thiswday == 0 || $thiswday == 6 );
+
+  print "<tr><th";
+  if ( $date == date ( "Ymd", $today ) ) {
+    echo " class=\"today\">";
+  } elseif ( $is_weekend ) {
+    echo " class=\"weekend\">";
+  } else {
+    echo ">";
+  }
+
+  if ( $can_add ) {
+    echo "<a title=\"" .
+      translate("New Entry") . "\" href=\"edit_entry.php?" . 
+      $u_url . "date=" . 
+      date ( "Ymd", $days[$d] ) . "\"><img src=\"new.gif\" class=\"new\" alt=\"" .
+      translate("New Entry") . "\" /></a>\n";
+  }
+  echo "<a title=\"" .
+    $header[$d] . "\" href=\"day.php?" . 
+    $u_url . "date=" . 
+    date("Ymd", $days[$d] ) . "$caturl\">" .
+    $header[$d] . "</a></th>\n</tr>\n";
+
+  print "<tr>\n<td";
+  if ( $date == date ( "Ymd", $today ) ) {
+    echo " class=\"today\">";
+  } elseif ( $is_weekend ) {
+    echo " class=\"weekend\">";
+  } else {
+    echo ">";
+  }
+
+  print_det_date_entries ( $date, $user, true );
+  echo " ";
+  echo "</td></tr>\n";
+}
+?>
+</table>
+</center>
+
+<?php 	if ( ! empty ( $eventinfo ) ) echo $eventinfo; ?>
+<br />
+<a title="<?php etranslate("Generate printer-friendly version")?>" class="printer" href="week_details.php?<?php
+  echo $u_url;
+  if ( $thisyear ) {
+    echo "year=$thisyear&month=$thismonth&day=$thisday";
+  }
+  echo $caturl . "&";
+?>friendly=1" target="cal_printer_friendly" 
+onmouseover="window.status = '<?php etranslate("Generate printer-friendly version")?>'">[<?php 
+	etranslate("Printer Friendly")
+?>]</a>
+
+<?php print_trailer(); ?>
+</body>
+</html><?php
+
+// Print the HTML for one day's events in detailed view.
+// params:
+//   $id - event id
+//   $date - date (not used)
+//   $time - time (in HHMMSS format)
+//   $name - event name
+//   $description - long description of event
+//   $status - event status
+//   $pri - event priority
+//   $access - event access
+//   $event_owner - user associated with this event
+function print_detailed_entry ( $id, $date, $time, $duration,
+  $name, $description, $status,
+  $pri, $access, $event_owner ) {
+  global $eventinfo, $login, $user, $TZ_OFFSET;
+  static $key = 0;
+
+  global $layers;
+
+  if ( $login != $event_owner && strlen ( $event_owner ) ) {
+    $class = "layerentry";
+  } else {
+    $class = "entry";
+    if ( $status == "W" ) $class = "unapprovedentry";
+  }
+
+  if ( $pri == 3 ) echo "<strong>";
+	$divname = "eventinfo-$id-$key";
+	$key++;
+	echo "<a title=\"" . 
+		translate("View this entry") . "\" class=\"$class\" href=\"view_entry.php?id=$id&date=$date";
+	if ( strlen ( $user ) > 0 )
+		echo "&user=" . $user;
+	echo "\" onmouseover=\"window.status='" . 
+		translate("View this entry") .	"'; return true;\" onmouseout=\"window.status=''; return true;\">";
+	echo "<img src=\"circle.gif\" class=\"bullet\" alt=\"view icon\" />";
+
+  if ( $login != $event_owner && strlen ( $event_owner ) ) {
+    if ($layers) foreach ($layers as $layer) {
+      if($layer['cal_layeruser'] == $event_owner) {
+        echo("<span style=\"color:#" . $layer['cal_color'] . ";\">");
+      }
+    }
+  }
+
+  $timestr = "";
+  $my_time = $time + ( $TZ_OFFSET * 10000 );
+  if ( $time >= 0 ) {
+    if ( $GLOBALS["TIME_FORMAT"] == "24" ) {
+      printf ( "%02d:%02d", $my_time / 10000, ( $my_time / 100 ) % 100 );
+    } else {
+      $h = ( (int) ( $my_time / 10000 ) ) % 12;
+      if ( $h == 0 ) $h = 12;
+      echo $h;
+      $m = ( $my_time / 100 ) % 100;
+      if ( $m > 0 )
+        printf ( ":%02d", $m );
+      else
+        print (":00");
+      echo ( (int) ( $my_time / 10000 ) ) < 12 ? translate("am") : translate("pm");
+    }
+    $timestr = display_time ( $time );
+    if ( $duration > 0 ) {
+      // calc end time
+      $h = (int) ( $time / 10000 );
+      $m = ( $time / 100 ) % 100;
+      $m += $duration;
+      $d = $duration;
+      while ( $m >= 60 ) {
+        $h++;
+        $m -= 60;
+      }
+      $end_time = sprintf ( "%02d%02d00", $h, $m );
+      $timestr .= " - " . display_time ( $end_time );
+      echo " - " .display_time ( $end_time ). "";
+      echo "» ";
+    } else {
+	echo "» ";
+    }
+  }
+  if ( $login != $user && $access == 'R' && strlen ( $user ) ) {
+    $PN = "(" . translate("Private") . ")"; $PD = "(" . translate("Private") . ")";
+  } elseif ( $login != $event_owner && $access == 'R' && strlen ( $event_owner ) ) {
+    $PN = "(" . translate("Private") . ")";$PD ="(" . translate("Private") . ")";
+  } elseif ( $login != $event_owner && strlen ( $event_owner ) ) {
+    $PN = htmlspecialchars ( $name ) ."</span>";
+    $PD = activate_urls ( htmlspecialchars ( $description ) );
+  } else {
+    $PN = htmlspecialchars ( $name );
+    $PD = activate_urls ( htmlspecialchars ( $description ) );
+  }
+  echo $PN;
+  echo "</a>";
+  if ( $pri == 3 ) echo "</strong>";
+  # Only display description if it is different than the event name.
+  if ( $PN != $PD )
+    echo " - " . $PD;
+  echo "<br />\n";
+}
+
+//
+// Print all the calendar entries for the specified user for the
+// specified date.  If we are displaying data from someone other than
+// the logged in user, then check the access permission of the entry.
+// params:
+//   $date - date in YYYYMMDD format
+//   $user - username
+//   $is_ssi - is this being called from week_ssi.php?
+function print_det_date_entries ( $date, $user, $ssi ) {
+  global $events, $readonly, $is_admin;
+
+  $year = substr ( $date, 0, 4 );
+  $month = substr ( $date, 4, 2 );
+  $day = substr ( $date, 6, 2 );
+
+  $dateu = mktime ( 2, 0, 0, $month, $day, $year );
+
+  // get all the repeating events for this date and store in array $rep
+  $rep = get_repeating_entries ( $user, $date );
+  $cur_rep = 0;
+
+  // get all the non-repeating events for this date and store in $ev
+  $ev = get_entries ( $user, $date );
+
+  for ( $i = 0; $i < count ( $ev ); $i++ ) {
+    // print out any repeating events that are before this one...
+    while ( $cur_rep < count ( $rep ) &&
+      $rep[$cur_rep]['cal_time'] < $ev[$i]['cal_time'] ) {
+      if ( $GLOBALS["DISPLAY_UNAPPROVED"] != "N" ||
+        $rep[$cur_rep]['cal_status'] == 'A' )
+        print_detailed_entry ( $rep[$cur_rep]['cal_id'],
+          $date, $rep[$cur_rep]['cal_time'], $rep[$cur_rep]['cal_duration'],
+          $rep[$cur_rep]['cal_name'], $rep[$cur_rep]['cal_description'],
+          $rep[$cur_rep]['cal_status'], $rep[$cur_rep]['cal_priority'],
+          $rep[$cur_rep]['cal_access'], $rep[$cur_rep]['cal_login'] );
+      $cur_rep++;
+    }
+    if ( $GLOBALS["DISPLAY_UNAPPROVED"] != "N" ||
+      $ev[$i]['cal_status'] == 'A' )
+      print_detailed_entry ( $ev[$i]['cal_id'],
+        $date, $ev[$i]['cal_time'], $ev[$i]['cal_duration'],
+        $ev[$i]['cal_name'], $ev[$i]['cal_description'],
+        $ev[$i]['cal_status'], $ev[$i]['cal_priority'],
+        $ev[$i]['cal_access'], $ev[$i]['cal_login'] );
+  }
+  // print out any remaining repeating events
+  while ( $cur_rep < count ( $rep ) ) {
+    if ( $GLOBALS["DISPLAY_UNAPPROVED"] != "N" ||
+      $rep[$cur_rep]['cal_status'] == 'A' )
+      print_detailed_entry ( $rep[$cur_rep]['cal_id'],
+        $date, $rep[$cur_rep]['cal_time'], $rep[$cur_rep]['cal_duration'],
+        $rep[$cur_rep]['cal_name'], $rep[$cur_rep]['cal_description'],
+        $rep[$cur_rep]['cal_status'], $rep[$cur_rep]['cal_priority'],
+        $rep[$cur_rep]['cal_access'], $rep[$cur_rep]['cal_login'] );
+    $cur_rep++;
+  }
+}
+?>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/week_ssi.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/week_ssi.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/week_ssi.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,127 @@
+<?php
+
+// This page is intended to be used as a server-side include
+// for another page.
+// (Such as an intranet home page or something.)
+// As such, no login is required.  Instead, the login id is either
+// passed in the URL "week_ssi.php?login=cknudsen".  Unless, of course,
+// we are in single-user mode, where no login info is needed.
+// If no login info is passed, we check for the last login used.
+
+$user = "__none__"; // don't let user specify in URL
+
+if ( strlen ( $login ) == 0 ) {
+  if ( $single_user == "Y" ) {
+    $login = $user = $single_user_login;
+  } else if ( strlen ( $webcalendar_login ) > 0 ) {
+    $login = $user = $webcalendar_login;
+  } else {
+	echo "<span style=\"color:#FF0000; font-weight:bold;\">Error:</span><span style=\"color:#FF0000;\"> No calendar user specified.</span>";
+    exit;
+  }
+}
+
+include "includes/config.php";
+include "includes/php-dbi.php";
+include "includes/functions.php";
+include "includes/$user_inc";
+include "includes/connect.php";
+
+load_global_settings ();
+load_user_preferences ();
+load_user_layers ();
+
+$view = "week";
+
+include "includes/translate.php";
+
+
+$today = time() + ($TZ_OFFSET * 60 * 60);
+
+if ( ! empty ( $date ) && ! empty ( $date ) ) {
+  $thisyear = substr ( $date, 0, 4 );
+  $thismonth = substr ( $date, 4, 2 );
+  $thisday = substr ( $date, 6, 2 );
+} else {
+  if ( empty ( $month ) || $month == 0 )
+    $thismonth = date("m", $today);
+  else
+    $thismonth = $month;
+  if ( empty ( $year ) || $year == 0 )
+    $thisyear = date("Y", $today);
+  else
+    $thisyear = $year;
+  if ( empty ( $day ) || $day == 0 )
+    $thisday = date("d", $today);
+  else
+    $thisday = $day;
+}
+
+$next = mktime ( 3, 0, 0, $thismonth, $thisday + 7, $thisyear );
+$prev = mktime ( 3, 0, 0, $thismonth, $thisday - 7, $thisyear );
+
+// We add 2 hours on to the time so that the switch to DST doesn't
+// throw us off.  So, all our dates are 2AM for that day.
+if ( $WEEK_START == 1 )
+  $wkstart = get_monday_before ( $thisyear, $thismonth, $thisday );
+else
+  $wkstart = get_sunday_before ( $thisyear, $thismonth, $thisday );
+$wkend = $wkstart + ( 3600 * 24 * 6 );
+$startdate = date ( "Ymd", $wkstart );
+$enddate = date ( "Ymd", $wkend );
+
+/* Pre-Load the repeated events for quckier access */
+$repeated_events = read_repeated_events ( $login, "", $startdate );
+
+/* Pre-load the non-repeating events for quicker access */
+$events = read_events ( $login, $startdate, $enddate );
+
+for ( $i = 0; $i < 7; $i++ ) {
+  $days[$i] = $wkstart + ( 24 * 3600 ) * $i;
+  $weekdays[$i] = weekday_short_name ( ( $i + $WEEK_START ) % 7 );
+  $header[$i] = $weekdays[$i] . "<br />" .
+     month_short_name ( date ( "m", $days[$i] ) - 1 ) .
+     " " . date ( "d", $days[$i] );
+}
+
+?>
+
+
+<table style="border-width:0px; width:100%;" cellspacing="0" cellpadding="0">
+<tr><td style="background-color:<?php echo $TABLEBG?>;">
+<table style="border-width:0px; width:100%;" cellspacing="1" cellpadding="2">
+
+<tr>
+<?php
+for ( $d = 0; $d < 7; $d++ ) {
+  if ( date ( "Ymd", $days[$d] ) == date ( "Ymd", $today ) )
+    $color = $TODAYCELLBG;
+  else
+    $color = $THBG;
+  echo "<th style=\"width:13%; background-color:$color;\">$header[$d]</th>";
+}
+?>
+</tr>
+
+<tr>
+<?php
+$first_hour = $WORK_DAY_START_HOUR - $TZ_OFFSET;
+$last_hour = $WORK_DAY_END_HOUR + $TZ_OFFSET;
+$untimed_found = false;
+for ( $d = 0; $d < 7; $d++ ) {
+  $date = date ( "Ymd", $days[$d] );
+
+  print "<td style=\"vertical-align:top; width:75px; height:75px;";
+  if ( $date == date ( "Ymd" ) )
+    echo " background-color:$TODAYCELLBG;\">";
+  else
+    echo " background-color:$CELLBG;\">";
+
+  print_date_entries ( $date, $login, true, true );
+  echo " ";
+  echo "</td>\n";
+}
+?>
+</tr>
+</table>
+</td></tr></table>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/ws/get_events.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/ws/get_events.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/ws/get_events.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,297 @@
+<?php
+/*
+ * $Id: get_events.php,v 1.1 2004/06/24 02:18:30 cknudsen Exp $
+ *
+ * Description:
+ *	Web Service functionality to get events.
+ *	Uses XML (but not SOAP at this point since that would be
+ *      overkill and require extra packages to install).
+ *
+ * Comments:
+ *	Client apps must use the same authentication as the web browser.
+ *	If WebCalendar is setup to use web-based authentication, then
+ *	the login.php found in this directory should be used to obtain
+ *	a session cookie.
+ *
+ */
+
+// Load include files.
+$basedir = ".."; // points to the base WebCalendar directory relative to
+                 // current working directory
+$includedir = "../includes";
+
+include "$includedir/config.php";
+include "$includedir/php-dbi.php";
+include "$includedir/functions.php";
+include "$includedir/$user_inc";
+include "$includedir/validate.php";
+include "$includedir/connect.php";
+load_global_settings ();
+load_user_preferences ();
+include "$includedir/site_extras.php";
+
+include "$includedir/translate.php";
+
+$debug = false; // set to true to print debug info...
+
+//Header ( "Content-type: text/xml" );
+Header ( "Content-type: text/plain" );
+
+echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
+echo "<events>\n";
+
+// If login is public user, make sure public can view others...
+if ( $login == "__public__" && $login != $user ) {
+  if ( $public_access_others != 'Y' ) {
+    echo "<error>" . translate("Not authorized") . "</error>\n";
+    echo "</events>\n";
+    exit;
+  }
+  echo "<!-- Allowing public user to view other user's calendar -->\n";
+}
+
+if ( empty ( $user ) )
+  $user = $login;
+
+// If viewing different user then yourself...
+if ( $login != $user ) {
+  if ( $allow_view_other != 'Y' ) {
+    echo "<error>" . translate("Not authorized") . "</error>\n";
+    echo "</events>\n";
+    exit;
+  }
+  echo "<!-- Allowing user to view other user's calendar -->\n";
+}
+
+if ( empty ( $startdate ) )
+  $startdate = date ( "Ymd" );
+if ( empty ( $enddate ) )
+  $enddate = $startdate;
+
+// Now read events all the repeating events (for all users)
+$repeated_events = query_events ( $user, true,
+  "AND (webcal_entry_repeats.cal_end > $startdate OR " .
+  "webcal_entry_repeats.cal_end IS NULL) " );
+
+// Read non-repeating events (for all users)
+if ( $debug )
+  echo "Checking for events for $user from date $startdate to date $enddate\n";
+$events = read_events ( $user, $startdate, $enddate );
+if ( $debug )
+  echo "Found " . count ( $events ) . " events in time range.\n";
+
+
+
+function escapeXml ( $str )
+{
+  return ( str_replace ( "<", "<", str_replace ( ">", ">", $str ) ) );
+}
+
+// Send a single event
+function print_event_xml ( $id, $event_date ) {
+  global $site_extras, $debug,
+    $server_url, $application_name;
+  global $EXTRA_TEXT, $EXTRA_MULTILINETEXT, $EXTRA_URL, $EXTRA_DATE,
+    $EXTRA_EMAIL, $EXTRA_USER, $EXTRA_REMINDER, $LANGUAGE;
+
+  $pri[1] = translate("Low");
+  $pri[2] = translate("Medium");
+  $pri[3] = translate("High");
+
+  // get participants first...
+ 
+  $sql = "SELECT cal_login FROM webcal_entry_user " .
+    "WHERE cal_id = $id AND cal_status IN ('A','W') " .
+    "ORDER BY cal_login";
+  $res = dbi_query ( $sql );
+  $participants = array ();
+  $num_participants = 0;
+  if ( $res ) {
+    while ( $row = dbi_fetch_row ( $res ) ) {
+      $participants[$num_participants++] = $row[0];
+    }
+  }
+
+  // get external participants
+  $ext_participants = array ();
+  $num_ext_participants = 0;
+  if ( ! empty ( $allow_external_users ) && $allow_external_users == "Y" &&
+    ! empty ( $external_reminders ) && $external_reminders == "Y" ) {
+    $sql = "SELECT cal_fullname, cal_email FROM webcal_entry_ext_user " .
+      "WHERE cal_id = $id AND cal_email IS NOT NULL " .
+      "ORDER BY cal_fullname";
+    $res = dbi_query ( $sql );
+    if ( $res ) {
+      while ( $row = dbi_fetch_row ( $res ) ) {
+        $ext_participants[$num_ext_participants] = $row[0];
+        $ext_participants_email[$num_ext_participants++] = $row[1];
+      }
+    }
+  }
+
+  if ( ! $num_participants && ! $num_ext_participants ) {
+    if ( $debug )
+      echo "No participants found for event id: $id\n";
+    return;
+  }
+
+
+  // get event details
+  $res = dbi_query (
+    "SELECT cal_create_by, cal_date, cal_time, cal_mod_date, " .
+    "cal_mod_time, cal_duration, cal_priority, cal_type, cal_access, " .
+    "cal_name, cal_description FROM webcal_entry WHERE cal_id = $id" );
+  if ( ! $res ) {
+    echo "Db error: could not find event id $id.\n";
+    return;
+  }
+
+
+  if ( ! ( $row = dbi_fetch_row ( $res ) ) ) {
+    echo "Error: could not find event id $id in database.\n";
+    return;
+  }
+
+  $create_by = $row[0];
+  $name = $row[9];
+  $description = $row[10];
+
+  echo "<event>\n";
+  echo "  <id>$id</id>\n";
+  echo "  <name>" . escapeXml ( $name ) . "</name>\n";
+  if ( ! empty ( $server_url ) ) {
+    if ( substr ( $server_url, -1, 1 ) == "/" ) {
+      echo "  <url>" .  $server_url . "view_entry.php?id=" . $id . "</url>\n";
+    } else {
+      echo "  <url>" .  $server_url . "/view_entry.php?id=" . $id . "</url>\n";
+    }
+  }
+  echo "  <description>" . escapeXml ( $description ) . "</description>\n";
+  echo "  <dateFormatted>" . date_to_str ( $event_date ) . "</dateFormatted>\n";
+  echo "  <date>" . $event_date . "</date>\n";
+  if ( $row[2] >= 0 ) {
+    echo "  <time>" . sprintf ( "%04d", $row[2] / 100 ) . "</time>\n";
+    echo "  <timeFormatted>" . display_time ( $row[2] ) . "</timeFormatted>\n";
+  }
+  if ( $row[5] > 0 )
+    echo "  <duration>" . $row[5] . "</duration>\n";
+  if ( ! $disable_priority_field )
+    echo "  <priority>" . $pri[$row[6]] . "</priority>\n";
+  if ( ! $disable_access_field )
+    echo "  <access>" . 
+      ( $row[8] == "P" ? translate("Public") : translate("Confidential") ) .
+      "</access>\n";
+  if ( ! strlen ( $single_user_login ) )
+    echo "  <createdBy>" . $row[0] . "</createdBy>\n";
+  echo "  <updateDate>" . date_to_str ( $row[3] ) . "</updateDate>\n";
+  echo "  <updateTime>" . display_time ( $row[4] ) . "</updateTime>\n";
+
+  // site extra fields
+  $extras = get_site_extra_fields ( $id );
+  echo "  <siteExtras>\n";
+  for ( $i = 0; $i < count ( $site_extras ); $i++ ) {
+    $extra_name = $site_extras[$i][0];
+    $extra_descr = $site_extras[$i][1];
+    $extra_type = $site_extras[$i][2];
+    if ( $extras[$extra_name]['cal_name'] != "" ) {
+      $tag = preg_replace ( "/[^A-Za-z0-9]+/", "", translate ( $extra_descr ) );
+      $tag = strtolower ( $tag );
+      $tagname = str_replace ( '"', '', $extra_name );
+      echo "    <siteExtra>\n";
+      echo "      <number>$i</number>\n";
+      echo "      <name>" . escapeXml ( $extra_name ) . "</name>\n";
+      echo "      <description>" . escapeXml ( $extra_descr ) . "</description>\n";
+      echo "      <type>" . $extra_type . "</type>\n";
+      echo "      <value>";
+      if ( $extra_type == $EXTRA_DATE ) {
+        //echo date_to_str ( $extras[$extra_name]['cal_date'] );
+        echo $extras[$extra_name]['cal_date'];
+      } else if ( $extra_type == $EXTRA_MULTILINETEXT ) {
+        echo escapeXml ( $extras[$extra_name]['cal_data'] );
+      } else if ( $extra_type == $EXTRA_REMINDER ) {
+        echo ( $extras[$extra_name]['cal_remind'] > 0 ?
+          translate("Yes") : translate("No") );
+      } else {
+        // default method for $EXTRA_URL, $EXTRA_TEXT, etc...
+        echo escapeXml ( $extras[$extra_name]['cal_data'] );
+      }
+      echo "</value>\n    </siteExtra>\n";
+    }
+  }
+  echo "  </siteExtras>\n";
+  if ( $single_user != "Y" && ! $disable_participants_field ) {
+    echo "  <participants>\n";
+    for ( $i = 0; $i < count ( $participants ); $i++ ) {
+      echo "    <participant>" .  $participants[$i] .
+        "</participant>\n";
+    }
+    for ( $i = 0; $i < count ( $ext_participants ); $i++ ) {
+      echo "    <participant>" . $ext_participants[$i] .
+        "</participant>\n";
+    }
+    echo "  </participants>\n";
+  }
+  echo "</event>\n";
+}
+
+
+
+// Process an event for a single day.  Check to see if it has
+// a reminder, when it needs to be sent and when the last time it
+// was sent.
+function process_event ( $id, $name, $event_date, $event_time ) {
+  global $debug;
+
+  if ( $debug )
+    printf ( "Event %d: \"%s\" at %s on %s \n",
+      $id, $name, $event_time, $event_date );
+
+  print_event_xml ( $id, $event_date );
+}
+
+
+echo "<!-- events for user \"$user\", login \"$login\" -->\n";
+echo "<!-- date range: $startdate - $enddate -->\n";
+
+$startyear = substr ( $startdate, 0, 4 );
+$startmonth = substr ( $startdate, 4, 2 );
+$startday = substr ( $startdate, 6, 2 );
+$endyear = substr ( $enddate, 0, 4 );
+$endmonth = substr ( $enddate, 4, 2 );
+$endday = substr ( $enddate, 6, 2 );
+
+$starttime = mktime ( 3, 0, 0, $startmonth, $startday, $startyear );
+$endtime = mktime ( 3, 0, 0, $endmonth, $endday, $endyear );
+
+for ( $d = $starttime; $d <= $endtime; $d += $ONE_DAY ) {
+  $completed_ids = array ();
+  $date = date ( "Ymd", $d );
+  //echo "Date: $date\n";
+  // Get non-repeating events for this date.
+  // An event will be included one time for each participant.
+  $ev = get_entries ( $user, $date );
+  // Keep track of duplicates
+  $completed_ids = array ( );
+  for ( $i = 0; $i < count ( $ev ); $i++ ) {
+    $id = $ev[$i]['cal_id'];
+    if ( ! empty ( $completed_ids[$id] ) )
+      continue;
+    $completed_ids[$id] = 1;
+    process_event ( $id, $ev[$i]['cal_name'], $date, $ev[$i]['cal_time'] );
+  }
+  $rep = get_repeating_entries ( $user, $date );
+  for ( $i = 0; $i < count ( $rep ); $i++ ) {
+    $id = $rep[$i]['cal_id'];
+    if ( ! empty ( $completed_ids[$id] ) )
+      continue;
+    $completed_ids[$id] = 1;
+    process_event ( $id, $rep[$i]['cal_name'], $date, $rep[$i]['cal_time'] );
+  }
+}
+
+echo "</events>\n";
+
+if ( $debug )
+  echo "Done.\n";
+
+?>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/ws/get_reminders.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/ws/get_reminders.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/ws/get_reminders.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,371 @@
+<?php
+/*
+ * $Id: get_reminders.php,v 1.1 2004/06/24 02:18:30 cknudsen Exp $
+ *
+ * Description:
+ *	Web Service functionality for reminders.
+ *	Uses XML (but not SOAP at this point since that would be
+ *      overkill and require extra packages to install).
+ *
+ * Comments:
+ *	Some of this code was borrowed from send_reminders.php.
+ *
+ *	This functionality works somewhat independent of the email-based
+ *	send_reminders.php script.  If the end user intends to use
+ *	client-side reminders, they should set "Event Reminders" to "No"
+ *	in the "Email" section on the Prefernces page.
+ *
+ *	This is read-only for the client side, so the client must
+ *	keep track of whether or not they have displayed the reminder
+ *	to the user.  (No where in the database will it be recorded that
+ *	the user received a reminder through this functionality.)
+ *
+ *	Client apps must use the same authentication as the web browser.
+ *	If WebCalendar is setup to use web-based authentication, then
+ *	the login.php found in this directory should be used to obtain
+ *	a session cookie.
+ *
+ */
+
+// How many days ahead should we look for events.
+// To handle case of an event 30 days from now where the user asked
+// for a reminder 30 days before the event.
+$DAYS_IN_ADVANCE = 30;
+//$DAYS_IN_ADVANCE = 365;
+
+
+// Show reminders for the next N days
+$CUTOFF = 7;
+
+
+// Load include files.
+$basedir = ".."; // points to the base WebCalendar directory relative to
+                 // current working directory
+$includedir = "../includes";
+
+include "$includedir/config.php";
+include "$includedir/php-dbi.php";
+include "$includedir/functions.php";
+include "$includedir/$user_inc";
+include "$includedir/validate.php";
+include "$includedir/connect.php";
+load_global_settings ();
+load_user_preferences ();
+include "$includedir/site_extras.php";
+
+include "$includedir/translate.php";
+
+$debug = false; // set to true to print debug info...
+
+Header ( "Content-type: text/xml" );
+//Header ( "Content-type: text/plain" );
+
+echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
+echo "<reminders>\n";
+
+// If login is public user, make sure public can view others...
+if ( $login == "__public__" && $login != $user ) {
+  if ( $public_access_others != 'Y' ) {
+    echo "<error>" . translate("Not authorized") . "</error>\n";
+    echo "</reminders>\n";
+    exit;
+  }
+  echo "<!-- Allowing public user to view other user's calendar -->\n";
+}
+
+if ( empty ( $user ) )
+  $user = $login;
+
+// If viewing different user then yourself...
+if ( $login != $user ) {
+  if ( $allow_view_other != 'Y' ) {
+    echo "<error>" . translate("Not authorized") . "</error>\n";
+    echo "</reminders>\n";
+    exit;
+  }
+  echo "<!-- Allowing user to view other user's calendar -->\n";
+}
+
+// Make sure this user has enabled email reminders.
+//if ( $EMAIL_REMINDER == 'N' ) {
+//  echo "Error: email reminders disabled for user \"$user\"\n";
+//  dbi_close ( $c );
+//  exit;
+//}
+
+$startdate = date ( "Ymd" );
+$enddate = date ( "Ymd", time() + ( $DAYS_IN_ADVANCE * 24 * 3600 ) );
+
+// Now read events all the repeating events
+$repeated_events = query_events ( $user, true,
+  "AND (webcal_entry_repeats.cal_end > $startdate OR " .
+  "webcal_entry_repeats.cal_end IS NULL) " );
+
+// Read non-repeating events
+if ( $debug )
+  echo "Checking for events for $user from date $startdate to date $enddate\n";
+$events = read_events ( $user, $startdate, $enddate );
+if ( $debug )
+  echo "Found " . count ( $events ) . " events in time range.\n";
+
+
+function indent ( $str ) {
+  return "  " . str_replace ( "\n", "\n  ", $str );
+}
+
+
+function escapeXml ( $str )
+{
+  return ( str_replace ( "<", "<", str_replace ( ">", ">", $str ) ) );
+}
+
+// Send a reminder for a single event for a single day.
+function list_reminder ( $id, $event_date, $remind_time ) {
+  global $site_extras, $debug,
+    $server_url, $application_name;
+  global $EXTRA_TEXT, $EXTRA_MULTILINETEXT, $EXTRA_URL, $EXTRA_DATE,
+    $EXTRA_EMAIL, $EXTRA_USER, $EXTRA_REMINDER, $LANGUAGE, $LOG_REMINDER;
+
+  $pri[1] = translate("Low");
+  $pri[2] = translate("Medium");
+  $pri[3] = translate("High");
+
+  // get participants first...
+ 
+  $sql = "SELECT cal_login FROM webcal_entry_user " .
+    "WHERE cal_id = $id AND cal_status IN ('A','W') " .
+    "ORDER BY cal_login";
+  $res = dbi_query ( $sql );
+  $participants = array ();
+  $num_participants = 0;
+  if ( $res ) {
+    while ( $row = dbi_fetch_row ( $res ) ) {
+      $participants[$num_participants++] = $row[0];
+    }
+  }
+
+  // get external participants
+  $ext_participants = array ();
+  $num_ext_participants = 0;
+  if ( ! empty ( $allow_external_users ) && $allow_external_users == "Y" &&
+    ! empty ( $external_reminders ) && $external_reminders == "Y" ) {
+    $sql = "SELECT cal_fullname, cal_email FROM webcal_entry_ext_user " .
+      "WHERE cal_id = $id AND cal_email IS NOT NULL " .
+      "ORDER BY cal_fullname";
+    $res = dbi_query ( $sql );
+    if ( $res ) {
+      while ( $row = dbi_fetch_row ( $res ) ) {
+        $ext_participants[$num_ext_participants] = $row[0];
+        $ext_participants_email[$num_ext_participants++] = $row[1];
+      }
+    }
+  }
+
+  if ( ! $num_participants && ! $num_ext_participants ) {
+    if ( $debug )
+      echo "No participants found for event id: $id\n";
+    return;
+  }
+
+
+  // get event details
+  $res = dbi_query (
+    "SELECT cal_create_by, cal_date, cal_time, cal_mod_date, " .
+    "cal_mod_time, cal_duration, cal_priority, cal_type, cal_access, " .
+    "cal_name, cal_description FROM webcal_entry WHERE cal_id = $id" );
+  if ( ! $res ) {
+    echo "Db error: could not find event id $id.\n";
+    return;
+  }
+
+
+  if ( ! ( $row = dbi_fetch_row ( $res ) ) ) {
+    echo "Error: could not find event id $id in database.\n";
+    return;
+  }
+
+  $create_by = $row[0];
+  $name = $row[9];
+  $description = $row[10];
+
+  echo "<reminder>\n";
+  echo "  <remindDate>" . date ( "Ymd", $remind_time ) . "</remindDate>\n";
+  echo "  <remindTime>" . date ( "Hi", $remind_time ) . "</remindTime>\n";
+  echo "  <untilRemind>" . ( $remind_time - time() ) . "</untilRemind>\n";
+  echo "  <event>\n";
+  echo "  <id>$id</id>\n";
+  echo "  <name>" . escapeXml ( $name ) . "</name>\n";
+  if ( ! empty ( $server_url ) ) {
+    if ( substr ( $server_url, -1, 1 ) == "/" ) {
+      echo "  <url>" .  $server_url . "view_entry.php?id=" . $id . "</url>\n";
+    } else {
+      echo "  <url>" .  $server_url . "/view_entry.php?id=" . $id . "</url>\n";
+    }
+  }
+  echo "  <description>" . escapeXml ( $description ) . "</description>\n";
+  echo "  <dateFormatted>" . date_to_str ( $event_date ) . "</dateFormatted>\n";
+  echo "  <date>" . $event_date . "</date>\n";
+  if ( $row[2] >= 0 ) {
+    echo "  <time>" . sprintf ( "%04d", $row[2] / 100 ) . "</time>\n";
+    echo "  <timeFormatted>" . display_time ( $row[2] ) . "</timeFormatted>\n";
+  }
+  if ( $row[5] > 0 )
+    echo "  <duration>" . $row[5] . "</duration>\n";
+  if ( ! $disable_priority_field )
+    echo "  <priority>" . $pri[$row[6]] . "</priority>\n";
+  if ( ! $disable_access_field )
+    echo "  <access>" . 
+      ( $row[8] == "P" ? translate("Public") : translate("Confidential") ) .
+      "</access>\n";
+  if ( ! strlen ( $single_user_login ) )
+    echo "  <createdBy>" . $row[0] . "</createdBy>\n";
+  echo "  <updateDate>" . date_to_str ( $row[3] ) . "</updateDate>\n";
+  echo "  <updateTime>" . display_time ( $row[4] ) . "</updateTime>\n";
+
+  // site extra fields
+  $extras = get_site_extra_fields ( $id );
+  echo "  <siteExtras>\n";
+  for ( $i = 0; $i < count ( $site_extras ); $i++ ) {
+    $extra_name = $site_extras[$i][0];
+    $extra_descr = $site_extras[$i][1];
+    $extra_type = $site_extras[$i][2];
+    if ( $extras[$extra_name]['cal_name'] != "" ) {
+      $tag = preg_replace ( "/[^A-Za-z0-9]+/", "", translate ( $extra_descr ) );
+      $tag = strtolower ( $tag );
+      $tagname = str_replace ( '"', '', $extra_name );
+      echo "    <siteExtra>\n";
+      echo "      <number>$i</number>\n";
+      echo "      <name>" . escapeXml ( $extra_name ) . "</name>\n";
+      echo "      <description>" . escapeXml ( $extra_descr ) . "</description>\n";
+      echo "      <type>" . $extra_type . "</type>\n";
+      echo "      <value>";
+      if ( $extra_type == $EXTRA_DATE ) {
+        //echo date_to_str ( $extras[$extra_name]['cal_date'] );
+        echo $extras[$extra_name]['cal_date'];
+      } else if ( $extra_type == $EXTRA_MULTILINETEXT ) {
+        echo escapeXml ( $extras[$extra_name]['cal_data'] );
+      } else if ( $extra_type == $EXTRA_REMINDER ) {
+        echo ( $extras[$extra_name]['cal_remind'] > 0 ?
+          translate("Yes") : translate("No") );
+      } else {
+        // default method for $EXTRA_URL, $EXTRA_TEXT, etc...
+        echo escapeXml ( $extras[$extra_name]['cal_data'] );
+      }
+      echo "</value>\n    </siteExtra>\n";
+    }
+  }
+  echo "  </siteExtras>\n";
+  if ( $single_user != "Y" && ! $disable_participants_field ) {
+    echo "  <participants>\n";
+    for ( $i = 0; $i < count ( $participants ); $i++ ) {
+      echo "    <participant>" .  $participants[$i] .
+        "</participant>\n";
+    }
+    for ( $i = 0; $i < count ( $ext_participants ); $i++ ) {
+      echo "    <participant>" . $ext_participants[$i] .
+        "</participant>\n";
+    }
+    echo "  </participants>\n";
+  }
+  echo "  </event>\n";
+  echo "</reminder>\n";
+
+}
+
+
+
+// Process an event for a single day.  Check to see if it has
+// a reminder, when it needs to be sent and when the last time it
+// was sent.
+function process_event ( $id, $name, $event_date, $event_time ) {
+  global $site_extras, $debug;
+  global $EXTRA_REMINDER_WITH_OFFSET, $EXTRA_REMINDER_WITH_DATE, $CUTOFF;
+
+  if ( $debug )
+    printf ( "Event %d: \"%s\" at %s on %s \n",
+      $id, $name, $event_time, $event_date );
+
+  // Check to see if this event has any reminders
+  $extras = get_site_extra_fields ( $id );
+  for ( $j = 0; $j < count ( $site_extras ); $j++ ) {
+    $extra_name = $site_extras[$j][0];
+    $extra_type = $site_extras[$j][2];
+    $extra_arg1 = $site_extras[$j][3];
+    $extra_arg2 = $site_extras[$j][4];
+    //if ( $debug )
+    //  printf ( "  name: %s\n  type: %d\n  arg1: %s\n  arg2: %s\n",
+    //  $extra_name, $extra_type, $extra_arg1, $extra_arg2 );
+    if ( ! empty ( $extras[$extra_name]['cal_remind'] ) ) {
+      if ( $debug )
+        echo "  Reminder set for event. \n";
+      // how many minutes before event should we send the reminder?
+      $ev_h = (int) ( $event_time / 10000 );
+      $ev_m = ( $event_time / 100 ) % 100;
+      $ev_year = substr ( $event_date, 0, 4 );
+      $ev_month = substr ( $event_date, 4, 2 );
+      $ev_day = substr ( $event_date, 6, 2 );
+      $event_time = mktime ( $ev_h, $ev_m, 0, $ev_month, $ev_day, $ev_year );
+      if ( ( $extra_arg2 & $EXTRA_REMINDER_WITH_OFFSET ) > 0 ) {
+        $minsbefore = $extras[$extra_name]['cal_data'];
+        $remind_time = $event_time - ( $minsbefore * 60 );
+      } else if ( ( $extra_arg2 & $EXTRA_REMINDER_WITH_DATE ) > 0 ) {
+        $rd = $extras[$extra_name]['cal_date'];
+        $r_year = substr ( $rd, 0, 4 );
+        $r_month = substr ( $rd, 4, 2 );
+        $r_day = substr ( $rd, 6, 2 );
+        $remind_time = mktime ( 0, 0, 0, $r_month, $r_day, $r_year );
+      } else {
+        $minsbefore = $extra_arg1;
+        $remind_time = $event_time - ( $minsbefore * 60 );
+      }
+      if ( $debug )
+        echo "  Mins Before: $minsbefore \n";
+      if ( $debug ) {
+        echo "  Event time is: " . date ( "m/d/Y H:i", $event_time ) . "\n";
+        echo "  Remind time is: " . date ( "m/d/Y H:i", $remind_time ) . "\n";
+      }
+      // Send a reminder
+      if ( time() >= $remind_time - ( $CUTOFF * 24 * 3600 ) ) {
+        if ( $debug )
+          echo "  SENDING REMINDER! \n";
+        list_reminder ( $id, $event_date, $remind_time );
+      }
+    }
+  }
+}
+
+
+echo "<!-- reminders for user \"$user\", login \"$login\" -->\n";
+
+$startdate = time(); // today
+for ( $d = 0; $d < $DAYS_IN_ADVANCE; $d++ ) {
+  $date = date ( "Ymd", time() + ( $d * 24 * 3600 ) );
+  //echo "Date: $date\n";
+  // Get non-repeating events for this date.
+  // An event will be included one time for each participant.
+  $ev = get_entries ( $user, $date );
+  // Keep track of duplicates
+  $completed_ids = array ( );
+  for ( $i = 0; $i < count ( $ev ); $i++ ) {
+    $id = $ev[$i]['cal_id'];
+    if ( ! empty ( $completed_ids[$id] ) )
+      continue;
+    $completed_ids[$id] = 1;
+    process_event ( $id, $ev[$i]['cal_name'], $date, $ev[$i]['cal_time'] );
+  }
+  $rep = get_repeating_entries ( $user, $date );
+  for ( $i = 0; $i < count ( $rep ); $i++ ) {
+    $id = $rep[$i]['cal_id'];
+    if ( ! empty ( $completed_ids[$id] ) )
+      continue;
+    $completed_ids[$id] = 1;
+    process_event ( $id, $rep[$i]['cal_name'], $date, $rep[$i]['cal_time'] );
+  }
+}
+
+echo "</reminders>\n";
+
+if ( $debug )
+  echo "Done.\n";
+
+?>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/ws/login.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/ws/login.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/ws/login.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,61 @@
+<?php
+/*
+ * $Id: login.php,v 1.2 2004/08/03 01:14:22 cknudsen Exp $
+ *
+ * Description:
+ * 	Provides login mechanism for web service clients.
+ */
+
+$basedir = "..";
+$includedir = "../includes";
+
+include "$includedir/config.php";
+include "$includedir/php-dbi.php";
+include "$includedir/functions.php";
+include "$includedir/$user_inc";
+include "$includedir/connect.php";
+
+load_global_settings ();
+
+if ( ! empty ( $last_login ) )
+  $login = "";
+
+include "$includedir/translate.php";
+
+// calculate path for cookie
+if ( empty ( $PHP_SELF ) )
+  $PHP_SELF = $_SERVER["PHP_SELF"];
+$cookie_path = str_replace ( "login.php", "", $PHP_SELF );
+//echo "Cookie path: $cookie_path\n";
+
+$out = "<login>\n";
+
+if ( $single_user == "Y" ) {
+  // No login for single-user mode
+  $out .= "<error>No login required for single-user mode</error>\n";
+} else if ( $use_http_auth ) {
+  // There is no login page when using HTTP authorization
+  $out .= "<error>No login required for HTTP authentication</error>\n";
+} else {
+  if ( ! empty ( $login ) && ! empty ( $password ) ) {
+    $login = trim ( $login );
+    if ( user_valid_login ( $login, $password ) ) {
+      user_load_variables ( $login, "" );
+      // set login to expire in 365 days
+      srand((double) microtime() * 1000000);
+      $salt = chr( rand(ord('A'), ord('z'))) . chr( rand(ord('A'), ord('z')));
+      $encoded_login = encode_string ( $login . "|" . crypt($password, $salt) );
+      //SetCookie ( "webcalendar_session", $encoded_login, 0, $cookie_path );
+      $out .= "  <cookieName>webcalendar_session</cookieName>\n";
+      $out .= "  <cookieValue>$encoded_login</cookieValue>\n";
+      if ( $is_admin )
+        $out .= "  <admin>1</admin>\n";
+    } else {
+      $out .= "  <error>Invalid login</error>\n";
+    }
+  }
+}
+
+echo $out;
+echo "</login>\n";
+?>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/year.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/year.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/plugins/webcalendar/www/year.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,105 @@
+<?php
+include_once 'includes/init.php';
+send_no_cache_header ();
+
+if (($user != $login) && $is_nonuser_admin)
+  load_user_layers ($user);
+else
+  load_user_layers ();
+
+if ( empty ( $year ) )
+  $year = date("Y");
+
+$thisyear = $year;
+if ( $year != date ( "Y") )
+  $thismonth = 1;
+//set up global $today value for highlighting current date
+set_today($date);
+if ( $year > "1903" )
+  $prevYear = $year - 1;
+else
+  $prevYear=$year;
+
+$nextYear= $year + 1;
+
+if ( $allow_view_other != "Y" && ! $is_admin )
+  $user = "";
+
+$boldDays = false;
+if ( ! empty ( $bold_days_in_year ) && $bold_days_in_year == 'Y' ) {
+  /* Pre-Load the repeated events for quckier access */
+  $repeated_events = read_repeated_events (
+    ( ! empty ( $user ) && strlen ( $user ) ) ? $user : $login, $cat_id, $year . "0101" );
+
+  /* Pre-load the non-repeating events for quicker access */
+  $events = read_events ( ( ! empty ( $user ) && strlen ( $user ) )
+    ? $user : $login, $year . "0101", $year . "1231", $cat_id );
+  $boldDays = true;
+}
+
+// Include unapproved events?
+$get_unapproved = ( $DISPLAY_UNAPPROVED == 'Y' );
+if ( $user == "__public__" )
+  $get_unapproved = false;
+
+ print_header();
+ ?>
+ 
+<div class="title">
+	<a title="<?php etranslate("Previous")?>" class="prev" href="year.php?year=<?php echo $prevYear; if ( ! empty ( $user ) ) echo "&user=$user";?>"><img src="leftarrow.gif" alt="<?php etranslate("Previous")?>" /></a>
+	<a title="<?php etranslate("Next")?>" class="next" href="year.php?year=<?php echo $nextYear; if ( ! empty ( $user ) ) echo "&user=$user";?>"><img src="rightarrow.gif" alt="<?php etranslate("Next")?>" /></a>
+	<span class="date"><?php echo $thisyear ?></span>
+	<span class="user"><?php
+		if ( $single_user == "N" ) {
+			echo "<br />\n";
+			if ( ! empty ( $user ) ) {
+				user_load_variables ( $user, "user_" );
+				echo $user_fullname;
+			} else {
+				echo $fullname;
+			}
+			if ( $is_assistant )
+				echo "<br /><strong>-- " . translate("Assistant mode") . " --</strong>";
+		}
+	?></span>
+</div>
+<br />
+ 
+<div align="center">
+	<table class="main">
+		<tr><td>
+			<?php display_small_month(1,$year,False); ?></td><td>
+			<?php display_small_month(2,$year,False); ?></td><td>
+			<?php display_small_month(3,$year,False); ?></td><td>
+			<?php display_small_month(4,$year,False); ?>
+		</td></tr>
+		<tr><td>
+			<?php display_small_month(5,$year,False); ?></td><td>
+			<?php display_small_month(6,$year,False); ?></td><td>
+			<?php display_small_month(7,$year,False); ?></td><td>
+			<?php display_small_month(8,$year,False); ?>
+		</td></tr>
+		<tr><td>
+			<?php display_small_month(9,$year,False); ?></td><td>
+			<?php display_small_month(10,$year,False); ?></td><td>
+			<?php display_small_month(11,$year,False); ?></td><td>
+			<?php display_small_month(12,$year,False); ?>
+		</td></tr>
+	</table>
+</div>
+
+<br />
+<?php display_unapproved_events ( $login ); ?>
+<br />
+<a title="<?php 
+	etranslate("Generate printer-friendly version")
+?>" class="printer" href="year.php?<?php
+	if ( $thisyear )
+		echo "year=$thisyear&";
+	if ( $user != $login && ! empty ( $user ) )
+		echo "user=$user&";
+?>friendly=1" target="cal_printer_friendly" onmouseover="window.status = '<?php etranslate("Generate printer-friendly version")?>'">[<?php etranslate("Printer Friendly")?>]</a>
+
+<?php print_trailer(); ?>
+</body>
+</html>

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/404.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/404.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/404.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -23,6 +23,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('env.inc.php');
 require_once('pre.php');    // Initial db and session library, opens session
 
 $HTML->header(array('title'=>$Language->getText('error','title')));

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/account/change_email-complete.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/account/change_email-complete.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/account/change_email-complete.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -25,6 +25,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../env.inc.php');
 require_once('pre.php');    
 require_once('common/include/account.php');
 
@@ -60,6 +61,10 @@
 		$u->getErrorMessage()
 	);
 }
+//plugin webcal change user mail
+	else {
+		plugin_hook('change_cal_mail',user_getid());
+	}
 
 site_user_header(array('title'=>$Language->getText('account_change_email-complete','title')));
 ?>
@@ -68,7 +73,7 @@
 <?php echo $Language->getText('account_change_email-complete','confirm', array($u->getUnixName(),$u->getEmail(),'<'.$u->getUnixName().'@'.$GLOBALS['sys_users_host'].'&gt')) ?>
 </p>
 
-<p><a href="/"><?php echo $Language->getText('account_change_email', 'return'); ?></a></p>
+<p><a href="<?php echo $GLOBALS['sys_urlprefix']; ?>/"><?php echo $Language->getText('account_change_email', 'return'); ?></a></p>
 
 <?php
 

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/account/change_email.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/account/change_email.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/account/change_email.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -23,6 +23,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 
 session_require(array('isloggedin'=>1));
@@ -84,7 +85,7 @@
 <input type="submit" name="submit" value="<?php echo $Language->getText('account_change_email','send_confirmation') ?>" />
 </form>
 
-<p><a href="/"><?php echo $Language->getText('general', 'return', $sys_name); ?></a></p>
+<p><a href="<?php echo $GLOBALS['sys_urlprefix']; ?>/"><?php echo $Language->getText('general', 'return', $sys_name); ?></a></p>
 
 <?php
 site_user_footer(array());

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/account/change_pw.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/account/change_pw.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/account/change_pw.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -23,6 +23,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('common/include/account.php');
 
@@ -75,6 +76,10 @@
 			'Could not change password: '.$u->getErrorMessage()
 		);
 	}
+	//plugin webcal change user password
+	else {
+		plugin_hook('change_cal_password',user_getid());
+	}
 
 	site_user_header(array('title'=>$Language->getText('account_change_pw_changed','title')));
 	?>
@@ -82,7 +87,7 @@
 	<?php echo $Language->getText('account_change_pw', 'confirmation', $GLOBALS['sys_name']); ?>
 
 	<p>
-	<?php echo $Language->getText('account_change_pw_changed','return_to',array('<a href="/account/">','</a>')) ?>
+	<?php echo $Language->getText('account_change_pw_changed','return_to',array('<a href="'.$GLOBALS['sys_urlprefix'].'/account/">','</a>')) ?>
 	</p>
 	
 	<?php

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/account/editsshkeys.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/account/editsshkeys.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/account/editsshkeys.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -23,6 +23,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('common/include/account.php');
 

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/account/first.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/account/first.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/account/first.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -25,6 +25,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 
 site_user_header(array('title'=>$Language->getText('account_first','title',$sys_name)));

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/account/index.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/account/index.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/account/index.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -23,6 +23,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('common/include/timezones.php');
 
@@ -104,9 +105,9 @@
 <?php echo $Language->getText('account_options', 'intro'); ?>
 </p>
 <ul>
-<li><a href="/users/<?php print $u->getUnixName(); ?>/"><strong><?php echo $Language->getText('account_options', 'view_developer_profile'); ?></strong></a></li>
+<li><a href="<?php echo $GLOBALS['sys_urlprefix']; ?>/users/<?php print $u->getUnixName(); ?>/"><strong><?php echo $Language->getText('account_options', 'view_developer_profile'); ?></strong></a></li>
 <?php if($GLOBALS['sys_use_people']) { ?>
-	<li><a href="/people/editprofile.php"><strong><?php echo $Language->getText('account_options', 'edit_skills_profile'); ?></strong></a></li>
+	<li><a href="<?php echo $GLOBALS['sys_urlprefix']; ?>/people/editprofile.php"><strong><?php echo $Language->getText('account_options', 'edit_skills_profile'); ?></strong></a></li>
 <?php } ?>
 </ul>
 <?php echo $HTML->boxBottom(); ?>
@@ -227,14 +228,14 @@
 <?php /*
 <p /><input type="checkbox"  name="remember_user" value="1"<?php
 	if ($sf_user_hash) print " checked=\"checked\""; ?> />
-<?php echo $Language->getText('account_register','remember_me','<a href="/my/">');
+<?php echo $Language->getText('account_register','remember_me','<a href="'.$GLOBALS['sys_urlprefix'].'/my/">');
 */ ?>
 
 <p />
 <?php if ($sys_use_ratings) { ?>
 <input type="checkbox"  name="use_ratings" value="1"<?php
 	if ($u->usesRatings()) print " checked=\"checked\""; ?> />
-	<?php echo $Language->getText('account_register','partecipate_peer_ratings','<a href="/users/'.$u->getUnixName().'">'); ?>
+	<?php echo $Language->getText('account_register','partecipate_peer_ratings','<a href="'.$GLOBALS['sys_urlprefix'].'/users/'.$u->getUnixName().'">'); ?>
 <?php } ?>	
 </td></tr>
 <?php 

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/account/login.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/account/login.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/account/login.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -31,6 +31,7 @@
 Header( "Cache-Control: no-cache"); 
 Header( "Cache-Control: must-revalidate"); 
 
+require_once('../env.inc.php');
 require_once('pre.php');
 
 $return_to = getStringFromRequest('return_to');
@@ -75,7 +76,7 @@
 			header ("Location: " . $return_to);
 			exit;
 		} else {
-			header ("Location: /my/");
+			header ("Location: ".$GLOBALS['sys_urlprefix']."/my/");
 			exit;
 		}
 	}

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/account/logout.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/account/logout.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/account/logout.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -27,6 +27,7 @@
 Header( "Cache-Control: no-cache");
 Header( "Cache-Control: must-revalidate");
 
+require_once('../env.inc.php');
 require_once('pre.php');
 
 $return_to = getStringFromRequest('return_to');
@@ -47,6 +48,6 @@
 if ($return_to) {
 header('Location: '.$return_to);
 }else{
-header('Location: /');
+header('Location: '.$GLOBALS['sys_urlprefix'].'/');
 }
 ?>

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/account/lostlogin.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/account/lostlogin.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/account/lostlogin.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -25,6 +25,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('common/include/account.php');
 

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/account/lostpw.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/account/lostpw.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/account/lostpw.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -29,6 +29,7 @@
  */
 
 
+require_once('../env.inc.php');
 require_once('pre.php');
 
 if (getStringFromRequest('submit')) {
@@ -85,7 +86,7 @@
 </p>
 </form>
 
-<p><a href="/"><?php echo $Language->getText('general', 'return', $GLOBALS['sys_name']); ?></a></p>
+<p><a href="<?php echo $GLOBALS['sys_urlprefix']; ?>/"><?php echo $Language->getText('general', 'return', $GLOBALS['sys_name']); ?></a></p>
 
 <?php
 

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/account/pending-resend.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/account/pending-resend.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/account/pending-resend.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -23,6 +23,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 
 if (getStringFromRequest('submit')) {

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/account/register.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/account/register.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/account/register.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -23,6 +23,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../env.inc.php');
 require_once('pre.php');    
 require_once('common/include/account.php');
 require_once('common/include/timezones.php');
@@ -51,7 +52,12 @@
 $title = getStringFromRequest('title');
 $ccode = getStringFromRequest('ccode');
 
-if (!$theme_id) {
+if ($sys_use_ssl && !session_issecure()) {
+	//force use of SSL for login
+	header('Location: https://'.$HTTP_HOST.$REQUEST_URI);
+}
+
+if (!$theme_id || !is_numeric($theme_id)) {
 	$theme_id=$HTML->getThemeIdFromName($sys_theme);
 }
 
@@ -83,10 +89,10 @@
 if ($feedback) {
 	print "<p><span class=\"error\">$feedback $register_error</span>";
 } 
-if (!isset($timezone) || empty($timezone)) {
+if (!isset($timezone) || empty($timezone) || !eregi('^[-a-z0-9_/]*?$', $timezone)) {
 	$timezone = (isset($sys_default_timezone) ? $sys_default_timezone : 'GMT');
 }
-if (!isset($ccode) || empty($ccode)) {
+if (!isset($ccode) || empty($ccode) || !eregi('^[a-z][a-z]$', $ccode)) {
 	$ccode = $sys_default_country_code;
 }
 ?>

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/account/setlang.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/account/setlang.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/account/setlang.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -23,6 +23,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 
 $language_id=getStringFromRequest('language_id');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/account/unsubscribe.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/account/unsubscribe.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/account/unsubscribe.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -25,6 +25,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('common/include/account.php');
 
@@ -76,7 +77,7 @@
 </p>
 
 <p>
-<a href="/"><?php echo $Language->getText('general', 'return', $GLOBALS['sys_name']); ?></a>
+<a href="<?php echo $GLOBALS['sys_urlprefix']; ?>/"><?php echo $Language->getText('general', 'return', $GLOBALS['sys_name']); ?></a>
 </p>
 
 <?php

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/account/verify.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/account/verify.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/account/verify.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -26,6 +26,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 
 $confirm_hash = getStringFromRequest('confirm_hash');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/activity/index.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/activity/index.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/activity/index.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -9,6 +9,7 @@
  */
 
 
+require_once('../env.inc.php');
 require_once('pre.php');    
 
 /*
@@ -120,34 +121,34 @@
 		switch ($arr['section']) {
 			case 'commit': {
 				$icon=html_image("ic/cvs16b.png","20","20",array("border"=>"0","ALT"=>"SCM"));
-				$url='<a href="/tracker/?func=detail&atid='.$arr['ref_id'].'&aid='.$arr['subref_id'].'&group_id='.$arr['group_id'].'">Commit for Tracker Item [#'.$arr['subref_id'].'] '.$arr['description'].' </a>';
+				$url='<a href="'.$GLOBALS['sys_urlprefix'].'/tracker/?func=detail&atid='.$arr['ref_id'].'&aid='.$arr['subref_id'].'&group_id='.$arr['group_id'].'">Commit for Tracker Item [#'.$arr['subref_id'].'] '.$arr['description'].' </a>';
 				break;
 			}
 			case 'trackeropen': {
 				$icon=html_image("ic/tracker20g.png",'20','20',array('alt'=>'Tracker'));
-				$url='<a href="/tracker/?func=detail&atid='.$arr['ref_id'].'&aid='.$arr['subref_id'].'&group_id='.$arr['group_id'].'">Tracker Item [#'.$arr['subref_id'].' '.$arr['description'].' ] Opened</a>';
+				$url='<a href="'.$GLOBALS['sys_urlprefix'].'/tracker/?func=detail&atid='.$arr['ref_id'].'&aid='.$arr['subref_id'].'&group_id='.$arr['group_id'].'">Tracker Item [#'.$arr['subref_id'].' '.$arr['description'].' ] Opened</a>';
 				break;
 			}
 			case 'trackerclose': {
 				$icon=html_image("ic/tracker20g.png",'20','20',array('alt'=>'Tracker'));
-				$url='<a href="/tracker/?func=detail&atid='.$arr['ref_id'].'&aid='.$arr['subref_id'].'&group_id='.$arr['group_id'].'">Tracker Item [#'.$arr['subref_id'].' '.$arr['description'].' ] Closed</a>';
+				$url='<a href="'.$GLOBALS['sys_urlprefix'].'/tracker/?func=detail&atid='.$arr['ref_id'].'&aid='.$arr['subref_id'].'&group_id='.$arr['group_id'].'">Tracker Item [#'.$arr['subref_id'].' '.$arr['description'].' ] Closed</a>';
 				break;
 			}
 			case 'frsrelease': {
 				$icon=html_image("ic/cvs16b.png","20","20",array("border"=>"0","ALT"=>"SCM"));
-				$url='<a href="/frs/?release_id='.$arr['subref_id'].'&group_id='.$arr['group_id'].'">FRS Release '.$arr['description'].'</a>';
+				$url='<a href="'.$GLOBALS['sys_urlprefix'].'/frs/?release_id='.$arr['subref_id'].'&group_id='.$arr['group_id'].'">FRS Release '.$arr['description'].'</a>';
 				break;
 			}
 			case 'forumpost': {
 				$icon=html_image("ic/forum20g.png","20","20",array("border"=>"0","ALT"=>"Forum"));
-				$url='<a href="/forum/message.php?msg_id='.$arr['subref_id'].'&group_id='.$arr['group_id'].'">Forum Post '.$arr['description'].'</a>';
+				$url='<a href="'.$GLOBALS['sys_urlprefix'].'/forum/message.php?msg_id='.$arr['subref_id'].'&group_id='.$arr['group_id'].'">Forum Post '.$arr['description'].'</a>';
 				break;
 			}
 		}
 		echo '<tr '. $HTML->boxGetAltRowStyle($j++) . '>
 			<td>    '.date('H:i:s',$arr['activity_date']).'</td>
 			<td>'.$icon .' '.$url.'</td>
-			<td><a href="/users/'.$arr['user_name'].'/">'.$arr['realname'].'</a></td>
+			<td><a href="'.$GLOBALS['sys_urlprefix'].'/users/'.$arr['user_name'].'/">'.$arr['realname'].'</a></td>
 			</tr>';
 	}
 

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/admin_table.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/admin_table.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/admin_table.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -296,13 +296,14 @@
 }
 
 
+require_once('../env.inc.php');
 require_once('pre.php');
 session_require(array('group'=>'1','admin_flags'=>'A'));
 
 $HTML->header(array('title'=>$Language->getText('admin_admin_table', 'title', array(ucwords(getUnitLabel($unit))))));
 
 echo '<h3>'.$Language->getText('admin_admin_table', 'title', array(ucwords(getUnitLabel($unit)))).'</h3>
-<p><a href="/admin/">'.$Language->getText('admin_admin_table', 'site_admin_home').'</a></p>
+<p><a href="'.$GLOBALS['sys_urlprefix'].'/admin/">'.$Language->getText('admin_admin_table', 'site_admin_home').'</a></p>
 <p> </p>';
 
 // $table, $unit and $primary_key are variables passed from the parent scripts

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/approve-pending.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/approve-pending.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/approve-pending.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -27,6 +27,7 @@
 // Show no more pending projects per page than specified here
 $LIMIT = 50;
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('common/include/account.php');
 require_once('common/include/license.php');
@@ -62,6 +63,10 @@
 	$hook_params = array () ;
 	$hook_params['group_id'] = $group_id ;
 	plugin_hook ("group_approved", $hook_params) ;
+	
+	//plugin webcalendar
+	//create webcal group
+	plugin_hook('add_cal_group',$group_id);
 
 	return true;
 }
@@ -72,6 +77,9 @@
 
 	$groups=explode(',', $list_of_groups);
 	array_walk($groups, 'activate_group');
+	//plugin webcalendar
+	//create webcal group
+	plugin_hook('add_cal_group',$group_id);
 
 } else if ($action=='delete') {
 	$group_id = getIntFromRequest('group_id');
@@ -79,7 +87,10 @@
 	$add_to_can = getStringFromRequest('add_to_can');
 	$response_text = getStringFromRequest('response_text');
 	$response_title = getStringFromRequest('response_title');
-
+	//plugin webcalendar
+	//create webcal group
+	plugin_hook('del_cal_group',$group_id);
+	
 	$group =& group_get_object($group_id);
 	if (!$group || !is_object($group)) {
 		exit_error('Error','Could Not Get Group');
@@ -139,10 +150,10 @@
 	<h2><?php echo $row_grp['group_name']; ?></h2>
 
 	<p />
-	<h3><a href="/admin/groupedit.php?group_id=<?php echo $row_grp['group_id']; ?>"><?php echo $Language->getText('admin_approve_pending','edit_project_details'); ?></a></h3>
+	<h3><a href="<?php echo $GLOBALS['sys_urlprefix']; ?>/admin/groupedit.php?group_id=<?php echo $row_grp['group_id']; ?>"><?php echo $Language->getText('admin_approve_pending','edit_project_details'); ?></a></h3>
 
 	<p />
-	<h3><a href="/project/admin/?group_id=<?php echo $row_grp['group_id']; ?>"><?php echo $Language->getText('admin_approve_pending','project_admin'); ?></a></h3>
+	<h3><a href="<?php echo $GLOBALS['sys_urlprefix']; ?>/project/admin/?group_id=<?php echo $row_grp['group_id']; ?>"><?php echo $Language->getText('admin_approve_pending','project_admin'); ?></a></h3>
 
 	<p />
 	<h3><a href="userlist.php?group_id=<?php print $row_grp['group_id']; ?>"><?php echo $Language->getText('admin_approve_pending','view_edit_project_members'); ?></a></h3>

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/configman.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/configman.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/configman.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -8,7 +8,7 @@
  * Copyright 2005 GForge, LLC
  * http://gforge.org/
  *
- * Daniel A. Pérez danielperez.arg at gmail.com
+ * Daniel A. P�rez danielperez.arg at gmail.com
  *
  * This file is part of GForge.
  *
@@ -28,6 +28,7 @@
  */
 
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('www/admin/admin_utils.php');
 
@@ -42,7 +43,7 @@
 function printSelection($checked,$pluginpath) {
 	global $Language,$feedback;
 	
-	$config_files = array(); // array that´ll have the config files
+	$config_files = array(); // array that�ll have the config files
 	$i = 0;
 	
 	if (strlen($pluginpath)>=1){
@@ -150,7 +151,7 @@
 			$feedback .= $Language->getText('configman','nowrite');
 		}
 	} else {
-		// say couldn´t open
+		// say couldn�t open
 		$feedback .= $Language->getText('configman','notopenfile');
 	}
 }
@@ -206,7 +207,7 @@
 			$feedback .= $Language->getText('configman','notopenfile');
 		}
 	} elseif (getStringFromRequest('doedit')) {
-		updateVars(getArrayFromRequest('attributes'),'/etc/gforge/local.inc'); // perhaps later we´ll update something else, for now it´s local.inc
+		updateVars(getArrayFromRequest('attributes'),'/etc/gforge/local.inc'); // perhaps later we�ll update something else, for now it�s local.inc
 		/*$filedata = getStringFromRequest('filedata');
 		$filedata = str_replace('\"','"',$filedata);
 		$filedata = str_replace("\'","'",$filedata);
@@ -220,7 +221,7 @@
 				$feedback .= $Language->getText('configman','nowrite');
 			}
 		} else {
-			// say couldn´t open
+			// say couldn�t open
 			$feedback .= $Language->getText('configman','notopenfile');
 		}*/
 	}

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/cronman.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/cronman.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/cronman.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -25,6 +25,7 @@
  */
 
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('www/admin/admin_utils.php');
 require_once ('common/include/cron_utils.php');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/database.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/database.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/database.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -31,6 +31,7 @@
  */
 
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('www/admin/admin_utils.php');
 
@@ -135,7 +136,7 @@
 
 	while ($row_db = db_fetch_array($res_db)) {
 
-		print '<li><a href="/project/admin/database.php?group_id='.$row_db['group_id'].'">'.$row_db['dbname']."</a></li>";
+		print '<li><a href="'.$GLOBALS['sys_urlprefix'].'/project/admin/database.php?group_id='.$row_db['group_id'].'">'.$row_db['dbname']."</a></li>";
 
 	}
 	print "</ul>";

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/groupdelete.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/groupdelete.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/groupdelete.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -23,6 +23,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('common/include/license.php');
 require_once('www/admin/admin_utils.php');
@@ -45,6 +46,7 @@
 	if (!$group->delete($sure, $reallysure, $reallyreallysure)) {
 		exit_error('Error',$group->getErrorMessage());
 	} else {
+		plugin_hook('delete_link',$_GET['group_id']) ;
 		header("Location: /admin/?feedback=DELETED");
 	}
 }

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/groupedit.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/groupedit.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/groupedit.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -23,6 +23,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('common/include/license.php');
 require_once('www/admin/admin_utils.php');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/grouplist.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/grouplist.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/grouplist.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -23,6 +23,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('www/admin/admin_utils.php');
 

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/index.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/index.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/index.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -29,6 +29,7 @@
  */
 
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('www/admin/admin_utils.php');
 
@@ -109,7 +110,7 @@
 	</li>
 </ul>
 <ul>
-	<li><a href="/register/"><?php echo $Language->getText('admin_index','register_new_project'); ?></a></li>
+	<li><a href="<?php echo $GLOBALS['sys_urlprefix']; ?>/register/"><?php echo $Language->getText('admin_index','register_new_project'); ?></a></li>
 	<li><?php echo $Language->getText('admin_index','groups_with_status'); ?> <a href="approve-pending.php"><?php echo $Language->getText('admin_index','project_pending'); ?> <em><?php echo $Language->getText('admin_index','new_project_approval'); ?></em></a></li>
 	<li><form name="projectsearch" action="search.php">
 	<?php echo $Language->getText('admin_index','groups_with_status'); ?>
@@ -129,14 +130,14 @@
 <strong><?php echo $Language->getText('admin_index','news'); ?></strong>
 </p>
 <ul>
-	<li><a href="/news/admin/"><?php echo $Language->getText('admin_index','approve_reject'); ?></a> <?php echo $Language->getText('admin_index','front_page_news'); ?></li>
+	<li><a href="<?php echo $GLOBALS['sys_urlprefix']; ?>/news/admin/"><?php echo $Language->getText('admin_index','approve_reject'); ?></a> <?php echo $Language->getText('admin_index','front_page_news'); ?></li>
 </ul>
 
 <p>
 <strong><?php echo $Language->getText('admin_index','stats'); ?></strong>
 </p>
 <ul>
-	<li><a href="/stats/"><?php echo $Language->getText('admin_index','site_wide_stats'); ?></a></li>
+	<li><a href="<?php echo $GLOBALS['sys_urlprefix']; ?>/stats/"><?php echo $Language->getText('admin_index','site_wide_stats'); ?></a></li>
 </ul>
 
 <p>
@@ -156,12 +157,15 @@
 	<li><a href="edit_frs_processor.php"><?php echo $Language->getText('admin_index','add_edit_delete_processors'); ?></a></li>
 	<li><a href="edit_theme.php"><?php echo $Language->getText('admin_index','add_edit_delete_themes'); ?></a></li>
 	<li><a href="edit_licenses.php"><?php echo $Language->getText('admin_index','add_edit_delete_licenses'); ?></a></li>
-	<li><a href="/admin/languages/loadtabfiles.php"><?php echo $Language->getText('admin_index','translation_file_tool'); ?></a></li>
-	<li><a href="/stats/lastlogins.php"><?php echo $Language->getText('admin_index','recent_logins'); ?></a></li>
+	<li><a href="<?php echo $GLOBALS['sys_urlprefix']; ?>/admin/languages/loadtabfiles.php"><?php echo $Language->getText('admin_index','translation_file_tool'); ?></a></li>
+	<li><a href="<?php echo $GLOBALS['sys_urlprefix']; ?>/stats/lastlogins.php"><?php echo $Language->getText('admin_index','recent_logins'); ?></a></li>
 	<li><a href="cronman.php"><?php echo $Language->getText('admin_index','cronman'); ?></a></li>
 	<li><a href="pluginman.php"><?php echo $Language->getText('admin_index','pluginman'); ?></a></li>
 	<li><a href="configman.php"><?php echo $Language->getText('admin_index','configman'); ?></a></li>
-	<?php plugin_hook("site_admin_option_hook", false); ?>
+	
+	<?php 
+	plugin_hook("quota_admin_tab");
+	plugin_hook("site_admin_option_hook", false); ?>
 </ul>
 
 <?php if($GLOBALS['sys_use_project_database'] || $GLOBALS['sys_use_project_vhost']) { ?>

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/languages/admintabfiles.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/languages/admintabfiles.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/languages/admintabfiles.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -262,6 +262,7 @@
 }
 
 
+require_once('../../env.inc.php');
 require_once('pre.php');
 session_require(array('group'=>'1','admin_flags'=>'A'));
 

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/languages/gettabfiles.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/languages/gettabfiles.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/languages/gettabfiles.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -6,6 +6,7 @@
   */
 
 
+require_once('../../env.inc.php');
 require_once('pre.php');
 require_once('common/include/account.php');
 require_once('www/admin/admin_utils.php');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/languages/loadtabfiles.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/languages/loadtabfiles.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/languages/loadtabfiles.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -22,6 +22,7 @@
  */
 
 
+require_once('../../env.inc.php');
 require_once('pre.php');
 require_once('common/include/account.php');
 require_once('common/include/escapingUtils.php');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/massmail.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/massmail.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/massmail.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -27,6 +27,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('www/admin/admin_utils.php');
 

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/pluginman.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/pluginman.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/pluginman.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -27,6 +27,7 @@
  */
 
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('www/admin/admin_utils.php');
 
@@ -136,8 +137,12 @@
 						$feedback .= $Language->getText('pluginman','successiniterror');
 						$feedback .= '<br>Database said: '.db_error();
 					}
+				}	
+				//we check for a php script	
+				if (is_file($sys_plugins_path . $pluginname . '/script/' . $pluginname . '-init.php')) {
+				include($sys_plugins_path . $pluginname . '/script/' . $pluginname . '-init.php');		
 				} else {
-					$feedback .= $Language->getText('pluginman','successnoinit');
+					
 				}
 			}
 		}

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/responses_admin.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/responses_admin.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/responses_admin.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -25,6 +25,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('common/include/account.php');
 require_once('www/include/canned_responses.php');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/search.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/search.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/search.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -30,6 +30,7 @@
  */
 
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('www/admin/admin_utils.php');
 

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/trove/trove_cat_add.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/trove/trove_cat_add.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/trove/trove_cat_add.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -23,6 +23,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../../env.inc.php');
 require_once('pre.php');
 require_once('www/include/trove.php');
 require_once('www/admin/admin_utils.php');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/trove/trove_cat_edit.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/trove/trove_cat_edit.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/trove/trove_cat_edit.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -27,6 +27,7 @@
  */
 
 
+require_once('../../env.inc.php');
 require_once('pre.php');
 require_once('www/include/trove.php');
 require_once('www/admin/admin_utils.php');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/trove/trove_cat_list.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/trove/trove_cat_list.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/trove/trove_cat_list.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -24,6 +24,7 @@
  */
 
 
+require_once('../../env.inc.php');
 require_once('pre.php');
 require_once('www/include/trove.php');
 require_once('www/admin/admin_utils.php');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/unsubscribe.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/unsubscribe.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/unsubscribe.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -27,6 +27,7 @@
  */
 
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('www/admin/admin_utils.php');
 session_require(array('group'=>'1','admin_flags'=>'A'));

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/useredit.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/useredit.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/useredit.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -23,6 +23,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('common/include/account.php');
 require_once('www/admin/admin_utils.php');
@@ -248,7 +249,7 @@
 		<tr '.$GLOBALS['HTML']->boxGetAltRowStyle($i++).'>
 		<td>'.$row_cat['group_name'].'</td>
 		<td>'.$row_cat['unix_group_name'].'</td>
-		<td width="40%"><a href="/project/admin/?group_id='.$row_cat['group_id'].'">['.$Language->getText('admin_useredit','project_admin').']</a></td>
+		<td width="40%"><a href="'.$GLOBALS['sys_urlprefix'].'/project/admin/?group_id='.$row_cat['group_id'].'">['.$Language->getText('admin_useredit','project_admin').']</a></td>
 		</tr>
 	';
 

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/userlist.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/userlist.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/userlist.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -23,6 +23,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('www/admin/admin_utils.php');
 session_require(array('group'=>'1','admin_flags'=>'A'));
@@ -91,14 +92,14 @@
 		if ($usr['status'] == 'D') print "deleted";
 		if ($usr['status'] == 'S') print "suspended";
 		if ($usr['status'] == 'P') print "pending";
-		print "\"><a href=\"useredit.php?user_id=".$usr['user_id']."\">";
+		print '"><a href="useredit.php?user_id='.$usr['user_id'].'">';
 		if ($usr['status'] == 'P') print "*";
 		echo $usr['firstname'].' '.$usr['lastname'].'('.$usr['user_name'].')</a>';
 		echo '</td>';
 		echo '<td width="15%" align="center">';
 		echo ($usr['add_date'] ? date($GLOBALS['sys_datefmt'], $usr['add_date']) : '-');
 		echo '</td>';
-		echo '<td width="15%" align="center"><a href="/developer/?form_dev='.$usr['user_id'].'">[' .$Language->getText('admin_userlist','devprofile'). ']</a></td>';
+		echo '<td width="15%" align="center"><a href="'.$GLOBALS['sys_urlprefix'].'/developer/?form_dev='.$usr['user_id'].'">[' .$Language->getText('admin_userlist','devprofile'). ']</a></td>';
 		echo '<td width="15%" align="center"><a href="userlist.php?action=activate&user_id='.$usr['user_id'].'">[' .$Language->getText('admin_userlist','activate'). ']</a></td>';
 		echo '<td width="15%" align="center"><a href="userlist.php?action=delete&user_id='.$usr['user_id'].'">[' .$Language->getText('admin_userlist','delete') .']</a></td>';
 		echo '<td width="15%" align="center"><a href="userlist.php?action=suspend&user_id='.$usr['user_id'].'">[' .$Language->getText('admin_userlist','suspend'). ']</a></td>';
@@ -118,8 +119,14 @@
 
 if ($action=='delete') {
 	performAction('D', "DELETED", $user_id);
+	//plugin webcal
+	//del webcal user
+	plugin_hook('del_cal_user',$user_id);
 } else if ($action=='activate') {
 	performAction('A', "ACTIVE", $user_id);
+	//plugin webcal
+	//create webcal user
+	plugin_hook('add_cal_user',$user_id);
 } else if ($action=='suspend') {
 	performAction('S', "SUSPENDED", $user_id);
 }

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/vhost.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/vhost.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/admin/vhost.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -29,6 +29,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('common/include/account.php');
 require_once('www/admin/admin_utils.php');
@@ -176,7 +177,7 @@
 			'.$GLOBALS['HTML']->listTableTop($title).'
 			<tr><td>'.$row_vh['vhostid'].'</td>
 			<td>'.$row_vh['vhost_name'].'</td>
-			<td><a href="/projects/'.$row_vh['unix_group_name'].'">'.$row_vh['unix_group_name'].'</a></td>
+			<td><a href="'.$GLOBALS['sys_urlprefix'].'/projects/'.$row_vh['unix_group_name'].'">'.$row_vh['unix_group_name'].'</a></td>
 			<td><input maxlength="255" type="text" name="docdir" value="'.$row_vh['docdir'].'" /></td>
 			<td><input type="text" name="cgidir" value="'.$row_vh['cgidir'].'" /></td><td><input maxlength="255" type="submit" value="'.$Language->getText('admin_vhost','update').'" /></tr>
 			'.$GLOBALS['HTML']->listTableBottom().'

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/dbimage.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/dbimage.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/dbimage.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -23,6 +23,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
  */
 
+require_once('env.inc.php');
 require_once('squal_pre.php');
 
 $id = getStringFromRequest('id');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/developer/diary.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/developer/diary.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/developer/diary.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -23,6 +23,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
  */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('vote_function.php');
 

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/developer/index.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/developer/index.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/developer/index.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -29,6 +29,7 @@
 	Written by dtype Oct 1999
 */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 
 $user_id = getStringFromRequest('user_id');
@@ -38,6 +39,6 @@
 	$user_id=$form_dev;
 }
 
-header("Location: /users/". user_getname($user_id) ."/");
+header("Location: ".$GLOBALS['sys_urlprefix']."/users/". user_getname($user_id) ."/");
 
 ?>

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/developer/monitor.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/developer/monitor.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/developer/monitor.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -24,6 +24,7 @@
  */
 
 
+require_once('../env.inc.php');
 require_once('pre.php');
 
 if (!session_loggedin()) {

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/developer/rate.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/developer/rate.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/developer/rate.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -23,6 +23,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
  */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('vote_function.php');
 

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/docman/admin/index.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/docman/admin/index.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/docman/admin/index.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -22,6 +22,7 @@
 
 */
 
+require_once('../../env.inc.php');
 require_once('pre.php');
 require_once('www/docman/include/doc_utils.php');
 require_once('www/docman/include/DocumentGroupHTML.class');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/docman/display_doc.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/docman/display_doc.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/docman/display_doc.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -7,6 +7,7 @@
  *
  */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('include/doc_utils.php');
 require_once('common/docman/Document.class');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/docman/doceditor.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/docman/doceditor.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/docman/doceditor.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -26,8 +26,9 @@
  */
 
 // This file is a popup window to edit docman
-//	By Daniel A. Pérez 2005
+//	By Daniel A. P�rez 2005
 
+require_once('../env.inc.php');
 require_once('pre.php');
 
 $group_id = getIntFromRequest('group_id'); //get the group id
@@ -59,14 +60,14 @@
 plugin_hook("text_editor",$params);
 $editor = true;
 if (!$GLOBALS['editor_was_set_up']) {
-	//if we don´t have any plugin for text editor, display a simple textarea edit box
+	//if we don�t have any plugin for text editor, display a simple textarea edit box
 	$editor = false;
 	echo '<textarea name="data" rows="15" cols="100" wrap="soft"></textarea><br />';
 	echo '<script>	
 			window.document.theform.data.value = window.opener.document.adddata.data.value;
 		</script>';
 } else {
-	// we must make it wait a bit or else the fckeditor object won´t be set yet
+	// we must make it wait a bit or else the fckeditor object won�t be set yet
 	echo '<script type="text/javascript">
 		setTimeout("setEditorValue(\'data\',window.opener.document.adddata.data.value)",2250);
 	</script>

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/docman/include/DocumentGroupHTML.class
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/docman/include/DocumentGroupHTML.class	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/docman/include/DocumentGroupHTML.class	2011-02-24 17:31:31 UTC (rev 11977)
@@ -137,4 +137,4 @@
 // c-file-style: "bsd"
 // End:
 
-?>
\ No newline at end of file
+?>

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/docman/include/doc_utils.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/docman/include/doc_utils.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/docman/include/doc_utils.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -75,6 +75,9 @@
 	$menu_links[]='/docman/new.php?group_id='.$group_id;
 	$menu_text[]=$Language->getText('docman','view_doc');
 	$menu_links[]='/docman/index.php?group_id='.$group_id;
+	$menu_text[]=$Language->getText('docman_search','search_title');
+	$menu_links[]='/docman/search.php?group_id='.$group_id;
+	
 
 	if (session_loggedin()) {
 		$perm =& $project->getPermission(session_get_user());
@@ -187,7 +190,6 @@
 			echo html_image('ic/adddoc12.png',"12","14",array("border"=>"0"))." ";
 			echo $Language->getText('docman_admin', 'add_docs');
 			echo "</a>";
-			
 			if (($doc_group->getID() == $selected_doc_group_id || $doc_group->hasSubgroup($nested_groups, $selected_doc_group_id)) && (!$stateid || $stateid == $selected_stateid)) {
 				docman_display_documents($nested_groups, $document_factory, $is_editor, $stateid, $from_admin, $doc_group->getID());
 			}
@@ -229,6 +231,9 @@
 							$docs[$j]->getName().
 							"</a> - " . $tooltip . "</li>".
 							"(".$docs[$j]->getFileSize()." ".$Language->getText("docman", "bytes").")";
+							//add description
+							echo "<br />      ";
+							echo "<i>".$docs[$j]->getDescription()."</i>";
 				}
 				echo "</ul>";
 			}

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/docman/include/vtemplate.class.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/docman/include/vtemplate.class.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/docman/include/vtemplate.class.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,649 @@
+<?php
+/*****************************************************************
+ *			VIRTUAL-TEMPLATE
+ *
+ * Version : 1.3.2 Base Edition ( Decembre 2003 ) build 1
+ *
+ * Address : http://vtemplate.sourceforge.net
+ * 
+ * Authors: 
+ *   + THIEBAUT Jean-Baptiste(J.Baptiste at leweby.com)  -  http://www.leweby.com .
+ *   + CAMPANA François (fc at netouaibe.com).
+ * Licence: GPL.
+ * 
+ * 
+ *
+ *			  
+ *****************************************************************/ 
+
+if ( !isset($DEFINE_VTEMPLATE) ){
+define("ALL",1);
+define("VARTAG","{#"); // Tag d'ouverture des variables : vous pouvez changer ce paramètre.
+define("VTEMPLATE_VERSION","1.3.1");
+define("VTEMPLATE_TYPE","BA");
+define("VTEMPLATE_BUILD","6");
+
+
+class Err {
+var $msg;
+var $titre;
+
+function error($errno,$arg="",$code=0,$disp=0, $method=__METHOD__,$line=__LINE__){
+// Gestion des erreurs
+if (is_array($arg))
+{
+	$infos = "{ ".print_r($arg,true)." } ";
+}
+else
+{
+	$infos = $arg;
+}
+
+switch($errno){
+  case 1:
+    $this->titre="$method - Erreur $errno de session n° $code - ligne $line";
+    $this->msg = "La zone $arg est déjà ouverte.Avant d'ajouter une session sur cette zone, vous devez la fermer à l'aide de la fonction closeSession().<br>"	;
+  break;
+  case 2:
+    $this->titre="$method - Erreur $errno de session n° $code - ligne $line";
+    $this->msg = "Vous tentez de fermer une session de la zone $arg[1] alors qu'aucune session pour cette zone n'existe.Pour ouvrir une session, utilisez la fonction addSession().<br>";
+  break;
+  case 3:
+    $this->titre="$method - Erreur $errno de session n° $code - ligne $line";
+	$var = $arg[1];
+	$zone = $arg[0];
+    $this->msg = "Vous essayez de valoriser la variable $var sans avoir créer de session de la zone $zone.Utilisez la fonction addSession() pour créer une session, puis setVar pour valoriser une variable.<br>";
+  break;
+  case 4:
+    $this->titre="$method - Erreur $errno de session n° $code - ligne $line";
+	$var = $arg[1];
+	$zone = $arg[0];
+    $this->msg = "La variable $var que vous souhaitez valoriser n'existe pas dans la zone $zone.<br>";
+  break;
+  case 5:
+    $this->titre="$method - Erreur $errno de parsing n° $code - ligne $line";
+    $this->msg = "Vous utilisez des caractère non autorisés pour déclarer vos zones.Vous pouvez utiliser tous les caractères à l'exception de \'{\' , \'#\' \'}\' et \'|\'.<br>";
+  break;
+  case 6:
+    $this->titre="$method - Erreur $errno de parsing n° $code - ligne $line";
+    $this->msg = "Vous ne pouvez pas utiliser le même nom ($arg)de zone plusieurs fois.<br>";
+  break;
+  case 7:
+    $this->titre="$method - Erreur $errno de parsing n° $code - ligne $line";
+    $this->msg = "Vous avez oublié de fermer la zone $arg.<br>";
+  break;
+  case 8:
+    $this->titre="$method - Erreur $errno de traitement n° $code - ligne $line";
+    $this->msg = "Le fichier template $arg est introuvable.<br>";
+  break;
+  case 9:
+    $this->titre="$method - Erreur $errno de traitement n° $code - ligne $line";
+    $this->msg = "Impossible d'ouvrir le fichier $arg.Vérifiez les droits de ce fichier.<br>";
+  break;
+  case 10:
+    $this->titre="$method - Erreur $errno de traitement n° $code - ligne $line";
+    $this->msg = "Impossible de lire le fichier template $arg.<br>";
+  break;
+  case 11:
+    $this->titre="$method - Erreur $errno de traitement n° $code - ligne $line";
+    $this->msg = "La zone $arg est introuvable.Vérifiez la syntaxe de cette zone.<br>";
+  break;
+  case 12:
+    $this->titre="$method - Erreur $errno de traitement n° $code - ligne $line";
+    $this->msg = "La variable $arg est introuvable .Vérifiez la syntaxe de la variable.<br>";
+  break;
+  case 13:
+    $this->titre="$method - Erreur $errno de traitement n° $code - ligne $line";
+    $this->msg = "L'identifiant de fichier spécifié n'existe pas.Vérifiez les fonctions Open() de votre script.<br>";
+  break;
+  case 14:
+    $this->titre="$method - Erreur $errno de traitement n° $code - ligne $line";
+	$var = $arg[1];
+	$file = $arg[0];
+    $this->msg = "La variable $var dans le fichier $file est introuvable.Vérifiez la syntaxe de la variable.<br>";
+  break;
+  case 15:
+    $this->titre="$method - Erreur $errno de traitement n° $code - ligne $line";
+	$var = $arg[2];
+	$zone = $arg[1];
+	$fichier = $arg[0];
+    $this->msg = "La variable $var dans la zone $zone du fichier $fichier est introuvable.Vérifiez la syntaxe de la variable et du nom de la zone.<br>";
+  break;
+  default:
+	 $this->titre = "$method - Erreur $errno inconnue $code - ligne $line";
+     $this->msg = "Veuillez le rapporter aux auteurs de la classe.";
+}
+$this->titre .= ": <br>";
+if ($disp){
+//	$web = "Pour plus d'informations, consultez la <a href=\"http://www.virtual-solution.net/vtemplate/docs/debug-mod.php?version=".VTEMPLATE_VERSION."&build=".VTEMPLATE_BUILD."&type=".VTEMPLATE_TYPE."&error=$code\" target=\"_blank\">doc en ligne</a>";
+//	echo "<font face=verdana size=2 color=red><u>$this->titre</u><i>$this->msg</i>$web<br><br></font>";
+	echo "<font face=verdana size=2 color=red><u>$this->titre</u><i>$this->msg</i>$infos<br><br></font>";
+}
+return -1;
+}
+// Fin classe
+}
+
+class Session extends err{
+
+var $name;		// Name of the session
+var $globalvar = array();  // List of global variable of the session
+var $varlist = array();  // List of var in this session
+var $subzone = array(); // list of sub-zone
+var $temp; // Generated code for the current session
+var $generated = NULL; // The final code
+var $source; // Source code
+var $used=0; // Indicates if the session contain used variable
+var $stored; // Give the filename were is stored the session
+
+function Session($name,$source,$stored){
+ $this->name = $name;
+ $this->source = $source;
+ $this->stored = $stored;
+ $this->parseVar();
+}
+
+function parseVar_orig(){
+ // Récupération des noms des variables
+ $regle = "|".VARTAG."(.*)}|sU"; 
+ preg_match_all ($regle,$this->source,$var1);
+ // Création du tableau de variable  à partir de la liste parsée.
+ $this->varlist=@array_merge($var[1],$var1[1]);
+return 1;
+} 
+
+// la fonction parseVar a été reécrire ( voir l'origin parseVar_orig )
+// car des prblèmes se présentaient avec array_merge quand la classe
+// était utilisée avec php5 ( bogue dans php5beta4 ? )
+function parseVar(){
+ // Récupération des noms des variables
+ $regle = "|".VARTAG."(.*)}|sU"; 
+ $var1 = array(); $var1[1] = array();
+ preg_match_all ($regle,$this->source,$var1);
+ /* Création du tableau de variable  à partir de la liste parsée. */
+ foreach ($var1[1] as $v)
+ {
+ 	$this->varlist[] = $v;
+ }
+return 1;
+} 
+
+function init(){
+if($this->used) return $this->error(1,array($this->stored,$this->name),"SESSION1",1,"init",__LINE__);
+// Reset generated code
+$this->temp = $this->source;
+$this->used = 1;
+}
+function closeSession(){
+// Check if the zone has been used.    
+if(!$this->used) return $this->error(2,array($this->stored,$this->name),"SESSION2",1,"closeSession",__LINE__);
+// Set Globals vars.
+$this->generateCode();
+$this->used=0;
+return 1;
+}
+
+function reset(){
+$this->used = 0;
+$this->generated = NULL;
+return 1;
+}
+
+function addSubZone(&$subzone){
+$this->subzone[$subzone->name] = &$subzone;
+return 1;
+}
+
+function setVar($varname,$value){
+if (!$this->used) return $this->error(3,array($this->stored,$this->name,$varname),"SESSION3",1,"setVar",__LINE__);
+if (!in_array($varname,$this->varlist)) return $this->error(4,array($this->name,$varname),"SESSION4",1,"setVar",__LINE__);
+$regle = "(\\".VARTAG."$varname\})";
+$this->temp = preg_replace($regle,$value,$this->temp);
+return 1;
+}
+
+
+// pour débogage
+function message ($text)
+{
+	$t = ereg_replace("\n", "", $text);
+  if (defined("FICHIER_MESSAGES_DEBUG"))
+	{
+	  $fichier = FICHIER_MESSAGES_DEBUG;
+  }
+	else
+	{
+	    // le fichier destination n'est pas défini
+			// valeur par défaut
+			$fichier = "/var/log/janus.log";
+	}
+	error_log(date("d/m/Y H:i:s > ")."$t\n",3,$fichier);
+}
+
+
+function dispVar(){
+ echo "Liste variables de $this->name:<br>";
+ foreach ( $this->varlist as $vars )
+    echo "$vars <br>";
+}
+
+function setGlobalVar($varname,$value){
+$set = 0;
+if (in_array($varname,$this->varlist)){
+  // Replace the var into this session 
+  $this->globalvar[$varname]=$value;   
+  $set = 1;
+}
+  // Replace the var into sub zones
+  foreach(array_keys($this->subzone) as $subzone){
+      $set = $this->subzone[$subzone]->setGlobalVar($varname,$value) || $set;
+  }
+  return $set;
+}
+
+function replaceGlobalVar(){
+if ( count($this->globalvar) )
+foreach($this->globalvar as $varname => $value){
+  $regle = "(\\".VARTAG."$varname\})";
+  $this->temp = preg_replace($regle,$value,$this->temp);
+}
+}
+
+
+function generateCode(){
+    if ($this->used == 0) return $this->generated;
+    // Replace global var.
+	if ( count($this->globalvar) ) $this->replaceGlobalVar();
+	// Replace all unused variable by ""
+    $regle = "|\\".VARTAG."([^}]*)\}|";
+	$this->temp = preg_replace($regle,"",$this->temp);
+	// Generate the subzone(s) code
+	if(count($this->subzone)){
+	  foreach(array_keys($this->subzone) as $subzone){
+		$text = ($this->subzone[$subzone]->used) ? $this->subzone[$subzone]->generateCode() : $this->subzone[$subzone]->generated;
+		$this->temp = preg_replace("(\|$subzone\|)",$text,$this->temp); 	
+		$this->subzone[$subzone]->reset();
+	  }
+    }
+$this->generated .= $this->temp;
+return $this->generated;
+}
+
+function inVarList($varname){
+return in_array($varname,$this->varlist);
+}
+
+// Fin classe
+}
+
+class VTemplate_Private extends Err{
+/****************************************
+*	   Private Class.		*
+* ***************************************/
+
+var $sources=array(); // Sources des zones issues de la premiere partie du parsing.
+var $sessions=array(); // Tableau de sessions
+var $v_global=array(); // Globla var array.
+
+/****************************************************************
+	    Parsing Functions for Template files.  ( PF 1.0 )
+ ****************************************************************/
+
+function getNom($code){
+// Retourne le premier nom de zone qu'il trouve dans le code
+
+   preg_match("(<!--VTP_([^()]+)-->)sU",$code,$reg);
+   
+   // Tester la présence des caratère invalides dans le nom ( | et {});
+   if (@count(explode("|",$reg[1]))>1 || @count(explode("{",$reg[1]))>1 || @count(explode("}",$reg[1]))>1) exit($this->error(5,$reg[1],"PARSE1",1,"getNom",__LINE__));
+   
+   return @$reg[1];
+}
+
+function endTag($code,$nom){
+// Renvoie TRUE(1) si le tag de fermeture est présent.
+
+   preg_match("(<!--/VTP_$nom-->)sU",$code,$reg);
+
+return ($reg[0]!="<!--/VTP_$nom-->") ? 0 : 1;
+}
+
+function getSource($code,$nom,$type=0){
+// Retourne le source de la zone de nom $nom
+
+   preg_match_all ("(<!--VTP_$nom-->(.*)<!--/VTP_$nom-->)sU",$code,$reg);
+
+return $reg[$type][0];
+}
+
+function parseZone($code_source,$nom_zone="|root|"){
+// Fonction récursive de parsing du fichier template
+   // Vérification que la zone n'existe pas
+   if (isset($this->sources[$nom_zone])) exit($this->error(6,$nom_zone,"PARSE2",1,"parseZone",__LINE__));
+
+   // Enregistrement du code source
+   $this->sources[$nom_zone]["source"]=$code_source;
+
+   // Rappel de la fonction pour chaque fils.
+   while($nom_fils=$this->getNom($this->sources[$nom_zone]["source"])){
+
+     // Vérification que le tag de fin est présent.
+     if (!$this->endTag($code_source,$nom_fils)) exit($this->error(7,$nom_fils,"PARSE3",1,"parseZone",__LINE__));
+
+     // Parse le fils
+     $this->parseZone($this->getSource($this->sources[$nom_zone]["source"],$nom_fils,1),$nom_fils);
+
+     // Enregistre le nom du fils dans la liste des fils
+     $this->sources[$nom_zone]["fils"][]=$nom_fils;
+
+     // Remplace le code du fils dans le source du père
+     $this->sources[$nom_zone]["source"]=str_replace(
+				     $this->getSource($this->sources[$nom_zone]["source"],$nom_fils,0),
+				     "|$nom_fils|",
+				     $this->sources[$nom_zone]["source"]
+				     );
+     // Teste si la zone $nom_fils n'existe pas plusieurs fois dans la zone $nom_zone
+     if (count(explode("|$nom_fils|",$this->sources[$nom_zone]["source"]))>2) exit($this->error(6,$nom_fils,"PARSE4",1,"parseZone",__LINE__));
+   }// fin While
+
+return 1;
+}
+
+/****************************************************************
+	    Session Management functions ( SMF 1.0 )
+ ****************************************************************/
+
+function createSession($handle,$zone = "|root|"){
+// Create a new session of the zone
+$this->sessions[$handle][$zone] = new Session($zone,$this->sources[$zone]["source"],$this->file_name[$handle]);
+
+// Create sub-zone
+if (@count($this->sources[$zone]["fils"])){
+   foreach($this->sources[$zone]["fils"] as $subzone){	  
+    $this->createSession($handle,$subzone);
+    $this->sessions[$handle][$zone]->addSubZone($this->sessions[$handle][$subzone]);
+   }
+}
+				  
+//end createSession
+}
+
+
+/****************************************************************
+	    Global Variable Management Functions ( GVMF 1.0 )
+ ****************************************************************/
+
+ function setGZone($handle,$zone,$var,$value){
+ // Define Global var for $zone and its sub-zone.
+   // Set global value to $zone vars.
+  return $this->sessions[$handle][$zone]->setGlobalVar($var,$value);
+}
+
+function setGFile($handle,$var,$value) {
+  return $this->sessions[$handle]["|root|"]->setGlobalVar($var,$value);
+}
+
+function setGAll($var,$value){
+$declare = 0;
+$this->v_global[$var]=$value;
+if (is_array($this->sessions)){
+    foreach($this->sessions as $handle => $v){
+		$declare = $this->setGFile($handle,$var,$value) || $declare;
+		}	
+  } 
+return $declare;
+}
+
+function setGOpened($handle){
+// Set Global var into the opened file
+foreach($this->v_global as $name => $val){
+  $this->setGFile($handle,$name,$val);
+}
+return 1;
+}
+ 
+// Fin VTemplate_Private
+}
+
+
+class VTemplate extends VTemplate_Private{
+/****************************************
+*	   Public Class.		*
+* ***************************************/
+
+
+/****************************************************************
+	    Core Functions 
+*****************************************************************/
+
+
+function Open($nomfichier){
+// Ouverture d'un fichier source et retourne le handle de ce fichier
+// Création du handle:
+$handle =  "{".count($this->sessions)."}" ;
+
+
+// Récupération du source à parser
+if (!@file_exists($nomfichier)) return $this->error(8,$nomfichier,"TTT1",1,"Open",__LINE__);
+if (!$f_id=@fopen($nomfichier,"r")) return $this->error(9,$nomfichier,"TTT2",1,"Open",__LINE__);
+if (!$source=@fread($f_id, filesize($nomfichier))) return $this->error(10,$nomfichier,"TTT3",1,"Open",__LINE__);
+clearstatcache();
+fclose($f_id);
+
+// Store the filename
+$this->file_name[$handle]=$nomfichier;
+
+// Parse les zones
+$this->parseZone($source);
+
+// Création du tableau de session
+$this->createSession($handle);
+
+//Nettoyage des variables temporaires
+$this->sources=NULL;
+
+// Set global var.
+$this->setGOpened($handle);
+
+$this->addSession($handle);
+return $handle;
+}
+
+function newSession($handle="{0}",$nom_zone = "|root|"){
+if ( $this->sessions[$handle][$nom_zone]->used ) $this->closeSession($handle,$nom_zone);
+$this->addSession($handle,$nom_zone,$cache,$time,$num_session);
+return 1;
+}
+
+function addSession($handle="{0}",$nom_zone = "|root|"){
+	// Does the zone exist ?
+   if(!isset($this->sessions[$handle][$nom_zone])) return $this->error(11,array($nom_zone,$this->file_name[$handle]),"TTT4",1,"addSession",__LINE__);
+   $this->sessions[$handle][$nom_zone]->init();
+   return 1;
+}
+
+function closeSession($handle="{0}",$nom_zone = "|root|"){ 
+// Close the current session and all his sub-session
+	  // Check if the zone exists.
+	if(!isset($this->sessions[$handle][$nom_zone])) return $this->error(11,array($nom_zone,$this->file_name[$handle]),"TTT5",1,"closeSession",__LINE__);
+     // Closing sub-zone
+     $this->sessions[$handle][$nom_zone]->closeSession();	
+   return 1;
+}
+
+function setGlobalVar($arg1,$arg2,$arg3){
+if ($arg1 == 1){
+  if (!$this->setGAll($arg2,$arg3)) return $this->error(12,$arg2,"TTT6",1,"setGlobalVar",__LINE__);
+  return 1; 
+}
+if (!isset($this->sessions[$arg1])) return $this->error(13,$arg1,"TTT7",1,"setGlobalVar",__LINE__);
+ $tab=explode(".",$arg2);
+ if (count($tab)==1){
+    if (!$this->setGFile($arg1,$arg2,$arg3)) return $this->error(14,array($this->file_name[$arg1],$arg2),"TTT8",1,"setGlobalVar",__LINE__);
+ }
+ else if (count($tab==2)){
+    if (!isset($this->sessions[$arg1][$tab[0]])) return $this->error(11,array($tab[0],$this->file_name[$arg1],"TTT9",1),"setGlobalVar",__LINE__);
+    if (!$this->setGZone($arg1,$tab[0],$tab[1],$arg3)) return $this->error(15,array($this->file_name[$arg1],$tab[0],$tab[1]),"TTT10",1,"setGlobalVar",__LINE__);
+ }
+return 1;
+}
+
+function setVar($handle,$zone_var,$val){
+ // Fill the variable
+$tab=explode(".",$zone_var);
+ if(count($tab)==2){
+   $zone=$tab[0];
+   $var=$tab[1];
+ }
+ else
+ {
+  $zone="|root|";
+  $var=$tab[0];
+ }
+
+ // Teste l'existence de la zone dans la liste
+ if (!isset($this->sessions[$handle][$zone])) return $this->error(11,array($this->file_name[$handle],$zone),"TTT11",1,"setVar",__LINE__);
+
+ //Enregistre la variable
+ return $this->sessions[$handle][$zone]->setVar($var,$val);
+}
+
+function Parse($handle_dest,$zone_var_dest,$handle_source,$zone_source="|root|"){
+	if($this->sessions[$handle_source][$zone_source]->used == 1) $this->closeSession($handle_source,$zone_source);
+	  $this->setVar($handle_dest,$zone_var_dest, $this->sessions[$handle_source][$zone_source]->generated);
+}
+
+function setVarF($handle,$zone_var,$file){
+// Fonction qui ouvre le fichier file et copie ce qu'il y a dedans dans une variable.
+$tab=explode(".",$zone_var);
+
+// Récupération nom de la zone et de la variable.
+ if(count($tab)==2){
+   $zone=$tab[0];
+   $var=$tab[1];
+ }
+ else
+ {
+  $zone="|root|";
+  $var=$tab[0];
+ }
+// Teste l'existence de la zone dans la liste
+ if (!is_object($this->sessions[$handle][$zone])) return $this->error(11,array($handle,$zone),"TTT12",1,"setVarF",__LINE__);
+
+ // Récupération du source à lire
+if (!@file_exists($file)) return $this->error(8,$file,"TTT13",1,"setVarF",__LINE__);
+if (!$f_id=@fopen($file,"r")) return $this->error(9,$file,"TTT14",1,"setVarF",__LINE__);
+if (!$val=@fread($f_id, filesize($file))) return $this->error(10,$file,"TTT15",1,"setVarF",__LINE__);
+clearstatcache();
+fclose($f_id);
+
+//Enregistre la variable
+return $this->sessions[$handle][$zone]->setVar($var,$val);
+}
+
+
+
+
+
+function isZone($handle, $zone="|root|") 
+{ 
+return isset($this->sessions[$handle][$zone]) ; 
+} 
+
+function Display($handle="{0}",$display=1,$zone="|root|"){
+	$this->closeSession($handle,$zone);
+	$c_genere = $this->sessions[$handle][$zone]->generated; 
+	
+	if ($display) echo $c_genere; else return ($c_genere);
+}
+//fonction complementaire version BETA
+
+/*
+* 
+On peut l'utiliser : 
+- SetVarTab($array): tout les couples clef/valeur sont valorisées 
+- SetVarTab($array,$index) seuls les couples clef/valeur dont la clef est dans le tableau index ou dont la valeur == $index (si pas tableau) 
+Si $index contient ou est une clef de type zone.clef, la clef sera extraite du texte est servira d'index pour $array 
+
+Vincent 
+*/
+
+function setVarTab($handle,$zones,$index = array()){ 
+	if (is_array($index)) 
+	{ 
+		if (count($index)>0) 
+		{ 
+			reset($index); 
+			while (list (, $key) = each ($index)) 
+			{ 
+				$tab=explode(".",$key); 
+				if(count($tab)==2){ 
+					$var=$tab[1]; 
+				} 
+				else 
+				{ 
+					$var=$tab[0]; 
+				} 
+				setVar($handle,$key,$zones[$var]); 
+			} 
+		} 
+		else 
+		{ 
+			reset($zones); 
+			while (list ($key, $val) = each ($zones)) 
+			{ 
+				setVar($handle,$key,$val); 
+			} 
+		} 
+	} 
+	else 
+	{ 
+		setVar($handle,$index,$zones[$index]); 
+	} 
+} 
+
+function setGlobalVarTab($handle,$zones,$index = array()){ 
+
+	if (is_array($index)) 
+	{ 
+		if (count($index)>0) 
+		{ 
+			reset($index); 
+			while (list (, $key) = each ($index)) 
+			{ 
+				$tab=explode(".",$key); 
+				if(count($tab)==2){ 
+					$var=$tab[1]; 
+				} 
+				else 
+				{ 
+					$var=$tab[0]; 
+				} 
+				setGlobalVar($handle,$key,$zones[$var]); 
+			} 
+		} 
+		else 
+		{ 
+			reset($zones); 
+			while (list ($key, $val) = each ($zones)) 
+			{
+				GlobalVar($handle,$key,$val); 
+			} 
+		} 
+	} 
+	else 
+	{ 
+		setBlobalVar($handle,$index,$zones[$index]); 
+	} 
+} 
+
+
+
+
+
+
+// End VTemplate
+}
+$DEFINE_VTEMPLATE = 1;
+}
+?>

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/docman/index.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/docman/index.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/docman/index.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -17,6 +17,7 @@
 	Complete OO rewrite by Tim Perdue 1/2003
 */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('include/doc_utils.php');
 require_once('common/docman/DocumentFactory.class');
@@ -43,6 +44,17 @@
 	exit_error($Language->getText('general','error'),$dgf->getErrorMessage());
 }
 
+
+// Save chosen language in docman and print document details in documents list
+if ($language_id)
+{
+       setcookie("my_language_id", "$language_id", time()+3600*24*999);
+}
+if (!$language_id && isset($_COOKIE["my_language_id"]))
+{
+       $language_id = $_COOKIE["my_language_id"];
+}
+
 // the "selected language" variable will be used in the links to navigate the
 // document groups tree
 
@@ -115,14 +127,14 @@
 }
 
 ?>
-<script language="JavaScript" src="/jscook/JSCookTree.js"></script>
-<link rel="stylesheet" href="/jscook/ThemeXP/theme.css" type="text/css" />
+<script language="JavaScript" src="<?php echo $GLOBALS['sys_urlprefix']; ?>/jscook/JSCookTree.js"></script>
+<link rel="stylesheet" href="<?php echo $GLOBALS['sys_urlprefix']; ?>/jscook/ThemeXP/theme.css" type="text/css" />
 <script src="/jscook/ThemeXP/theme.js" type="text/javascript"></script>
 
 <script language="JavaScript"><!--
 var myMenu =
 [
-['<span class="JSCookTreeFolderClosed"><i><img src="/jscook/ThemeXP/folder1.gif"></i></span><span class="JSCookTreeFolderOpen"><i><img src="/jscook/ThemeXP/folderopen1.gif"></i></span>', '/', '#', '', '',
+['<span class="JSCookTreeFolderClosed"><i><img src="<?php echo $GLOBALS['sys_urlprefix']; ?>/jscook/ThemeXP/folder1.gif"></i></span><span class="JSCookTreeFolderOpen"><i><img src="/jscook/ThemeXP/folderopen1.gif"></i></span>', '/', '#', '', '',
 <?php
 docman_recursive_display(0);
 ?>

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/docman/new.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/docman/new.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/docman/new.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -19,6 +19,7 @@
 
 
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('common/docman/Document.class');
 require_once('common/docman/DocumentGroupFactory.class');
@@ -60,7 +61,7 @@
 		exit_missing_param();
 	}
 
-	$d = new Document($g);
+	$d = new Document($g, false, false,$sys_engine_path);
 	if (!$d || !is_object($d)) {		
 		exit_error($Language->getText('general','error'),$Language->getText('docman_new','error_blank_document'));
 	} elseif ($d->isError()) {	

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/docman/search.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/docman/search.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/docman/search.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,250 @@
+<?php
+/**
+ * GForge Doc Search engine
+ *
+ * 
+ * Fabio Bertagnin November 2005
+ *
+ * @version   $Id: 04_IMPROVDOC_75_document_specific_search_engine.dpatch,v 1.1 2006/01/11 17:02:45 fabio Exp $
+ */
+
+
+/*
+	Document Search Motor
+
+	by Fabio Bertagnin
+
+*/
+
+require_once('pre.php');
+require_once('include/vtemplate.class.php');
+require_once('include/doc_utils.php');
+require_once('common/docman/DocumentFactory.class');
+require_once('common/docman/DocumentGroupFactory.class');
+
+if (!$group_id) {
+    exit_no_group();
+}
+$g =& group_get_object($group_id);
+if (!$g || !is_object($g) || $g->isError()) {
+	exit_no_group();
+}
+
+$df = new DocumentFactory($g);
+if ($df->isError()) {
+	exit_error($Language->getText('general','error'),$df->getErrorMessage());
+}
+
+$dgf = new DocumentGroupFactory($g);
+if ($dgf->isError()) {
+	exit_error($Language->getText('general','error'),$dgf->getErrorMessage());
+}
+
+// the "selected language" variable will be used in the links to navigate the
+// document groups tree
+
+if (!$language_id) {
+	if (session_loggedin()) {
+		$language_id = $LUSER->getLanguage();
+	} else {
+		$language_id = 1;
+	}
+	
+	$selected_language = $language_id;
+} else if ($language_id == "*") {
+	$language_id = 0 ;
+	$selected_language = "*";
+} else {
+	$selected_language = $language_id;
+}
+$df->setLanguageID($language_id);
+
+
+// check if the user is docman's admin
+$perm =& $g->getPermission( session_get_user() );
+if (!$perm || $perm->isError() || !$perm->isDocEditor()) 
+{
+	$is_editor = false;
+} else 
+{
+	$is_editor = true;
+}
+
+
+docman_header($Language->getText('docman_display_doc','title'),$Language->getText('docman_display_doc','section'),'docman','',$g->getPublicName());
+
+$vtp = new VTemplate;
+$handle = $vtp->Open("search.tpl.html");
+$vtp->NewSession($handle,"MAIN");
+
+$allchecked = ""; $onechecked = ""; 
+if ($_POST["search_type"] == "one") {$onechecked = "checked";}
+else {$allchecked = "checked";}
+$vtp->AddSession($handle,"FORMSEARCH");
+$vtp->SetVar($handle,"FORMSEARCH.TITLE",$Language->getText('docman_search', 'search_title'));
+$vtp->SetVar($handle,"FORMSEARCH.GROUP_ID",$_GET["group_id"]);
+$vtp->SetVar($handle,"FORMSEARCH.TEXTSEARCH",$_POST["textsearch"]);
+$vtp->SetVar($handle,"FORMSEARCH.ALLCHECKED",$allchecked);
+$vtp->SetVar($handle,"FORMSEARCH.ONECHECKED",$onechecked);
+$vtp->SetVar($handle,"FORMSEARCH.SUBMIT_PROMPT",$Language->getText('docman_search', 'search_submit_prompt'));
+$vtp->SetVar($handle,"FORMSEARCH.SEARCH_ALL_WORDS",$Language->getText('docman_search', 'search_all_words'));
+$vtp->SetVar($handle,"FORMSEARCH.SEARCH_ONE_WORD",$Language->getText('docman_search', 'search_one_word'));
+$vtp->CloseSession($handle,"FORMSEARCH");
+
+if ($_POST["cmd"] == "search")
+{
+	
+	$textsearch = $_POST["textsearch"];
+	$textsearch = prepare_search_text ($textsearch);
+	$mots = preg_split("/[\s,]+/",$textsearch);
+	$WHERE = "WHERE TRUE ";
+	if ($_POST["search_type"] == "one")
+	{
+		if (count($mots) > 0)
+		{
+			$WHERE .= "AND (FALSE ";
+			foreach ($mots as $mot)
+			{
+				$mot = strtolower($mot); 
+				$WHERE .= "OR title LIKE '%$mot%' OR description LIKE '%$mot%' OR data_words LIKE '%$mot%' ";
+			//	$WHERE .= "OR data_words LIKE '%$mot%' ";
+			}
+			$WHERE .= " ) ";
+		}
+	}
+	else
+	{
+		// search_type = all
+		if (count($mots) > 0)
+		{
+			$WHERE .= "AND (TRUE ";
+			foreach ($mots as $mot)
+			{
+				$WHERE .= "AND (title LIKE '%$mot%' OR description LIKE '%$mot%' OR data_words LIKE '%$mot%') ";
+				//$WHERE .= "AND data_words LIKE '%$mot%' ";
+			}
+			$WHERE .= " ) ";
+		}
+	}
+	if (!$is_editor)
+	{
+		$WHERE .= "AND doc_data.stateid = 1 ";
+	}
+	
+	$sql = "SELECT filename, docid, doc_data.stateid as stateid, doc_states.name as statename, ";
+	$sql .= "title, description, createdate, updatedate, ";
+	$sql .= "doc_group, language_id, group_id ";
+	$sql .= "FROM doc_data \n";
+	$sql .= "JOIN doc_states ON doc_data.stateid = doc_states.stateid ";
+	$sql .= "$WHERE \n";
+	$sql .= "AND group_id = $_GET[group_id] \n";
+	$sql .= "ORDER BY updatedate,createdate \n";
+	$resarr = array();
+	$result=db_query($sql);
+	if (!$result)
+	{
+		$vtp->AddSession($handle,"MESSAGE");
+		$vtp->SetVar($handle,"MESSAGE.TEXT",$Language->getText('docman_search','error_query'));
+		$vtp->CloseSession($handle,"MESSAGE");
+	}
+	elseif (db_numrows($result) < 1) 
+	{
+		$vtp->AddSession($handle,"MESSAGE");
+		$vtp->SetVar($handle,"MESSAGE.TEXT",$Language->getText('docman_search','no_search_result'));
+		$vtp->CloseSession($handle,"MESSAGE");
+	}
+	else
+	{
+		while ($arr = db_fetch_array($result))
+		{
+			$resarr[] = $arr;
+		}
+	}
+	db_free_result($result);
+ 	// print_debug ($sql);
+	// need groups infos
+	$groupsarr = array();
+	$sql = "SELECT doc_group, groupname, parent_doc_group FROM doc_groups WHERE group_id = $_GET[group_id] \n";
+	$groupsarr = array();
+	$result=db_query($sql);
+	if ($result && db_numrows($result) > 0)
+	{
+		while ($arr = db_fetch_array($result))
+		{
+			$groupsarr[] = $arr;
+		}
+	}
+	db_free_result($result);
+	
+	$vtp->AddSession($handle,"RESULTSEARCH");
+	$count = 0;
+	foreach ($resarr as $item)
+	{
+		$count++;
+		$vtp->AddSession($handle,"RESULT");
+		$vtp->SetVar($handle,"RESULT.N",$count);
+		$vtp->SetVar($handle,"RESULT.SEARCHTITLE",$item["title"]);
+		$vtp->SetVar($handle,"RESULT.SEARCHCOMMENT",$item["description"]);
+		$s = get_path_document ($groupsarr, $item["doc_group"], "$_GET[group_id]", "$item[language_id]");
+		$vtp->SetVar($handle,"RESULT.SEARCHPATH",$s);
+		$vtp->SetVar($handle,"RESULT.GROUP_ID",$_GET["group_id"]);
+		$vtp->SetVar($handle,"RESULT.DOC_ID",$item["docid"]);
+		$vtp->SetVar($handle,"RESULT.FILE_NAME",$item["filename"]);
+		if ($is_editor) $vtp->SetVar($handle,"RESULT.STATE",$item["statename"]);
+		$vtp->CloseSession($handle,"RESULT");
+	}
+	$vtp->CloseSession($handle,"RESULTSEARCH");
+}
+
+$vtp->CloseSession($handle,"MAIN");
+$vtp->Display();
+
+// print_debug (print_r($_POST,true));
+// print_debug (print_r($groupsarr,true));
+// print_debug ($sql);
+
+docman_footer(array());
+
+function print_debug ($text)
+{
+	echo "<pre>$text</pre>";
+}
+
+function get_path_document ($groupsarr, $doc_group, $group_id, $language_id="1")
+{
+	$rep = "";
+	foreach ($groupsarr as $group)
+	{
+		if ($group["doc_group"] == $doc_group)
+		{
+			if ($group["parent_doc_group"] == 0) 
+			{
+				$href = "/docman/index.php?group_id=$group_id&selected_doc_group_id=$group[doc_group]&language_id=$language_id";
+				$rep .= "<a href=\"$href\" style=\"color:#00610A;\">$group[groupname]</a>";
+				break;
+			}
+			$s = get_path_document ($groupsarr,  $group["parent_doc_group"], $group_id, $language_id);
+			$href = "/docman/index.php?group_id=$group_id&selected_doc_group_id=$group[doc_group]&language_id=$language_id";
+			$rep .= "$s / <a href=\"$href\" style=\"color:#00610A;\">$group[groupname]</a>";
+			break;
+		}
+	}
+	return $rep;
+}
+
+function prepare_search_text ($text)
+{
+	
+	$rep = $text; 
+	$rep = utf8_decode($rep);
+	$rep = ereg_replace ("é", "e", $rep);
+	$rep = ereg_replace ("è", "e", $rep);
+	$rep = ereg_replace ("ê", "e", $rep);
+	$rep = ereg_replace ("à", "a", $rep);
+	$rep = ereg_replace ("ù", "u", $rep);
+	$rep = ereg_replace ("ç", "c", $rep);
+	$rep = ereg_replace ("é", "e", $rep);
+	$rep = strtolower ($rep);
+	return $rep;
+}
+?>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/docman/search.tpl.html
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/docman/search.tpl.html	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/docman/search.tpl.html	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,40 @@
+<!--VTP_MAIN-->
+<!--VTP_FORMSEARCH-->
+<form action="search.php?group_id={#GROUP_ID}" method="POST">
+<input type="hidden" name="cmd" value="search" />
+<table width="98%" cellpadding="2" cellspacing="0" border="0">
+<tr>
+	<td>
+		<b>{#TITLE}</b>
+		<input type="text" name="textsearch" id="textsearch" size="48" value='{#TEXTSEARCH}' />
+		<input type="submit" value="{#SUBMIT_PROMPT}" />
+	</td>
+</tr>
+<tr>
+	<td>
+		<input type="radio" name="search_type" value="all" {#ALLCHECKED} /> {#SEARCH_ALL_WORDS}
+		<input type="radio" name="search_type" value="one" {#ONECHECKED} /> {#SEARCH_ONE_WORD}
+	</td>
+</tr>
+</table>
+</form>
+<!--/VTP_FORMSEARCH-->
+<!--VTP_RESULTSEARCH-->
+<table width="98%" cellpadding="0" cellspacing="0" border="0">
+<!--VTP_RESULT-->
+<tr><td width="20px" align="right"><b>{#N}.</b></td><td><a href="/docman/view.php/{#GROUP_ID}/{#DOC_ID}/{#FILE_NAME}"><b>{#SEARCHTITLE}</b></a></td></tr>
+<tr><td colspan="2">{#SEARCHCOMMENT}</td></tr>
+<tr><td colspan="2"><b>{#STATE}</b>  <i>{#SEARCHPATH}</i></td></tr>
+<tr><td colspan="2"> </td></tr>
+<!--/VTP_RESULT-->
+</table>
+<!--/VTP_RESULTSEARCH-->
+
+
+<!--VTP_MESSAGE-->
+<table width="98%" cellpadding="2" cellspacing="0" border="0">
+<tr><td><b>{#TITLE}</b></td></tr>
+<tr><td style="color:#9A0202">{#TEXT}</td></tr>
+</table>
+<!--/VTP_MESSAGE-->
+<!--/VTP_MAIN-->

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/docman/view.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/docman/view.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/docman/view.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -19,6 +19,7 @@
 
 $no_gz_buffer=true;
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('include/doc_utils.php');
 require_once('common/docman/Document.class');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/download.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/download.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/download.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -3,6 +3,7 @@
 	Temporary redirect so we don't break existing installs/links
 */
 
+require_once('env.inc.php');
 require_once('pre.php');
 Header("Location: /frs" . getStringFromServer('REQUEST_URI'));
 

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/env.inc.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/env.inc.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/env.inc.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,28 @@
+<?php
+/*
+ * Created on 24 sept. 2006
+ *
+ * To change the template for this generated file go to
+ * Window - Preferences - PHPeclipse - PHP - Code Templates
+ */
+
+error_reporting( E_ALL );
+////header( "Content-type: text/html; charset=utf-8" );
+//@ini_set( "display_errors", true );
+ at ini_set( "display_errors", false );
+
+# In case of errors, let output be clean.
+$gfRequestTime = microtime( true );
+
+# Attempt to set up the include path, to fix problems with relative includes
+////$IP = dirname( __FILE__ ) ;
+$IP = dirname(dirname( __FILE__ )) ;
+//define( 'GF_INSTALL_PATH', $IP );
+$sep = PATH_SEPARATOR;
+if( !ini_set( "include_path", "/etc/gforge/custom$sep/etc/gforge$sep$IP$sep$IP/www/include$sep$IP/plugins/scmccase/etc$sep$IP/plugins/scmsvn/etc$sep$IP/plugins/scmcvs/etc$sep$IP/plugins" ) ) {
+        set_include_path( "/etc/gforge/custom$sep/etc/gforge$sep$IP$sep$IP/www/include$sep$IP/plugins/scmccase/etc$sep$IP/plugins/scmsvn/etc$sep$IP/plugins/scmcvs/etc$sep$IP/plugins" );
+}
+ini_set( 'memory_limit', '20M' );
+#echo '['.$IP.']';
+
+?>

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/export/forum.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/export/forum.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/export/forum.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -14,6 +14,7 @@
   *
   */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 
 header("Content-Type: text/plain");

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/export/index.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/export/index.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/export/index.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -12,6 +12,7 @@
   */
 
 
+require_once('../env.inc.php');
 require_once('pre.php');
 global $group_id;
 $HTML->header(array(title=>"Exports Available"));

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/export/projhtml.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/export/projhtml.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/export/projhtml.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -25,6 +25,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('project_summary.php');
 

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/export/projnews.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/export/projnews.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/export/projnews.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -32,6 +32,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('www/news/news_utils.php');
 

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/export/projtitl.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/export/projtitl.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/export/projtitl.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -32,6 +32,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('www/news/news_utils.php');
 

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/export/rss20_activity.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/export/rss20_activity.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/export/rss20_activity.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -25,6 +25,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+include "../env.inc.php";
 include "pre.php";
 include "rss_utils.inc";
 
@@ -130,4 +131,4 @@
 }
 
 
-?>
\ No newline at end of file
+?>

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/export/rss20_newreleases.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/export/rss20_newreleases.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/export/rss20_newreleases.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -3,6 +3,7 @@
 // Author: Scott Grayban <sgrayban at borgnet.us>
 //
 
+include "../env.inc.php";
 include "pre.php";
 include "rss_utils.inc";
 header("Content-Type: text/xml");

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/export/rss20_news.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/export/rss20_news.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/export/rss20_news.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -3,6 +3,7 @@
 // Author: Scott Grayban <sgrayban at borgnet.us>
 //
 
+include "../env.inc.php";
 include "pre.php";
 include "rss_utils.inc";
 header("Content-Type: text/xml");

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/export/rss20_projects.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/export/rss20_projects.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/export/rss20_projects.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -3,6 +3,7 @@
 // Author: Scott Grayban <sgrayban at borgnet.us>
 //
 
+include "../env.inc.php";
 include "pre.php";
 include "rss_utils.inc";
 header("Content-Type: text/xml");

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/export/rss_project.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/export/rss_project.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/export/rss_project.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -5,6 +5,7 @@
 // http://sourceforge.net
 //
 
+require "../env.inc.php";
 require "pre.php";
 
 $HTML->header(array(title=>"Project Exports"));

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/export/rss_sfnewreleases.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/export/rss_sfnewreleases.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/export/rss_sfnewreleases.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -12,6 +12,7 @@
   *
   */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('rss_utils.inc');
 

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/export/rss_sfnews.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/export/rss_sfnews.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/export/rss_sfnews.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -12,6 +12,7 @@
   *
   */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('rss_utils.inc');
 

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/export/rss_sfprojects.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/export/rss_sfprojects.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/export/rss_sfprojects.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -12,6 +12,7 @@
   *
   */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('rss_utils.inc');
 

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/export/tracker.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/export/tracker.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/export/tracker.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -14,6 +14,7 @@
   *
   */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('common/tracker/Artifact.class');
 require_once('common/tracker/Artifacts.class');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/export/trove_tree.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/export/trove_tree.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/export/trove_tree.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -13,6 +13,7 @@
   */
 
 
+require_once('../env.inc.php');
 require_once('pre.php');
 
 header("Content-Type: text/plain");

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/forum/admin/attachments.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/forum/admin/attachments.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/forum/admin/attachments.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -30,6 +30,7 @@
 	by Daniel Perez - 2005
 */
 
+require_once('../../env.inc.php');
 require_once('pre.php');
 require_once('www/forum/include/ForumHTML.class');
 require_once('www/forum/admin/ForumAdmin.class');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/forum/admin/index.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/forum/admin/index.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/forum/admin/index.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -20,6 +20,7 @@
 	Heavy RBAC changes 3/17/2004
 */
 
+require_once('../../env.inc.php');
 require_once('pre.php');
 require_once('www/forum/include/ForumHTML.class');
 require_once('common/forum/Forum.class');
@@ -208,7 +209,7 @@
 					//actually delete the message
 					$feedback .= $fa->ExecuteAction("delete");
 					forum_header(array('title'=>$Language->getText('forum_admin_delete_message','title')));
-					echo '<p><a href="/forum/forum.php?forum_id=' . $forum_id . '">Return to the forum</a>';
+					echo '<p><a href="'.$GLOBALS['sys_urlprefix'].'/forum/forum.php?forum_id=' . $forum_id . '">Return to the forum</a>';
 					forum_footer(array());
 				} elseif (getStringFromRequest("cancel")) {
 					// the user cancelled the request, go back to forum
@@ -288,7 +289,7 @@
 						$feedback .= $fm->getErrorMessage();
 					}
 					forum_header(array('title'=>$Language->getText('forum_admin_edit_message','title')));
-					echo '<p><a href="/forum/forum.php?forum_id=' . $forum_id . '">Return to the forum</a>';
+					echo '<p><a href="'.$GLOBALS['sys_urlprefix'].'/forum/forum.php?forum_id=' . $forum_id . '">Return to the forum</a>';
 					forum_footer(array());
 				} elseif (getStringFromRequest("cancel")) {
 					// the user cancelled the request, go back to forum

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/forum/admin/monitor.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/forum/admin/monitor.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/forum/admin/monitor.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -20,6 +20,7 @@
 	Heavy RBAC changes 3/17/2004
 */
 
+require_once('../../env.inc.php');
 require_once('pre.php');
 require_once('www/forum/include/ForumHTML.class');
 require_once('common/forum/Forum.class');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/forum/admin/pending.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/forum/admin/pending.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/forum/admin/pending.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -30,6 +30,7 @@
 	by Daniel Perez - 2005
 */
 
+require_once('../../env.inc.php');
 require_once('pre.php');
 require_once('www/forum/include/ForumHTML.class');
 require_once('www/forum/admin/ForumAdmin.class');
@@ -46,7 +47,7 @@
 if ($fa->Authorized($group_id)) {
 	//user authorized, continue check
 	
-	//if there´s no forum_id input, then the user must have access to all forums, thus he´s a group admin for the forums
+	//if there�s no forum_id input, then the user must have access to all forums, thus he�s a group admin for the forums
 	if (!$forum_id) {
 		if ($fa->isGroupAdmin()) {
 			forum_header(array('title'=>$Language->getText('forum_admin','title')));

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/forum/admin/pendingmsgdetail.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/forum/admin/pendingmsgdetail.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/forum/admin/pendingmsgdetail.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -30,6 +30,7 @@
 	by Daniel Perez - 2005
 */
 
+require_once('../../env.inc.php');
 require_once('pre.php');
 require_once('www/forum/include/ForumHTML.class');
 require_once('www/forum/admin/ForumAdmin.class');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/forum/attachment.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/forum/attachment.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/forum/attachment.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -30,8 +30,9 @@
 	by Daniel Perez - 2005
 */
 
+require_once('../env.inc.php');
 require_once('pre.php');
-require_once('www/forum/include/ForumHTML.class');
+require_once('include/ForumHTML.class');
 
 /**
 	 *  goodbye - Just prints a message and a close button.
@@ -83,7 +84,7 @@
 		exit_not_logged_in();//only logged users can delete attachments
 	}
 	//only the user that created the attach  or forum admin can delete it (safecheck)
-	if (!$pending){ //pending messages aren´t deleted from this page
+	if (!$pending){ //pending messages aren�t deleted from this page
 		$sql = "SELECT userid FROM forum_attachment WHERE attachmentid='$attachid'";
 	}
 	$res = db_query($sql);
@@ -109,7 +110,7 @@
 		exit_not_logged_in();//only logged users can edit attachments
 	}
 	//only the user that created the attach  or forum admin can edit it (safecheck)
-	if (!$pending){ //pending messages aren´t deleted from this page
+	if (!$pending){ //pending messages aren�t deleted from this page
 		$sql1 = "SELECT filename FROM forum_attachment WHERE attachmentid='$attachid'";
 		$sql2 = "SELECT posted_by FROM forum WHERE msg_id='$msg_id'";
 	}
@@ -231,7 +232,7 @@
 
 flush();
 //increase the attach count
-if (!$pending) { //we don´t care for the pending attach counter, it´s just for administrative purposes
+if (!$pending) { //we don�t care for the pending attach counter, it�s just for administrative purposes
 	db_query("UPDATE forum_attachment set counter=counter+1 where attachmentid='$attachid'");
 }
 

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/forum/forum.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/forum/forum.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/forum/forum.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -18,6 +18,7 @@
 	Complete OO rewrite by Tim Perdue 12/2002
 */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('www/forum/include/ForumHTML.class');
 require_once('common/forum/Forum.class');
@@ -248,7 +249,7 @@
 			$total_rows++;
 
 			$ret_val .= '<tr '. $GLOBALS['HTML']->boxGetAltRowStyle($total_rows) .'>
-				<td><a href="/forum/message.php?msg_id='.$msg->getID().
+				<td><a href="'.$GLOBALS['sys_urlprefix'].'/forum/message.php?msg_id='.$msg->getID().
 				'&ampgroup_id='.$group_id.'">'.
 				html_image('ic/msg.png',"10","12",array("border"=>"0"));
 			/*
@@ -320,7 +321,7 @@
 		$i=0;
 		while (($row=db_fetch_array($result)) && ($i < $max_rows)) {
 			$ret_val .= '
-				<tr '. $GLOBALS['HTML']->boxGetAltRowStyle($i) .'><td><a href="/forum/forum.php?thread_id='.
+				<tr '. $GLOBALS['HTML']->boxGetAltRowStyle($i) .'><td><a href="'.$GLOBALS['sys_urlprefix'].'/forum/forum.php?thread_id='.
 				$row['thread_id'].'&forum_id='.$forum_id.'&group_id='.$group_id.'">'.
 				html_image('ic/cfolder15.png',"15","13",array("border"=>"0")) . '    ';
 			/*
@@ -365,7 +366,7 @@
 
 	if ($avail_rows > $max_rows) {
 		$ret_val .= '<span class="next">
-		<a href="/forum/forum.php?max_rows='.$max_rows.'&style='.$style.'&offset='.($offset+$i).
+		<a href="'.$GLOBALS['sys_urlprefix'].'/forum/forum.php?max_rows='.$max_rows.'&style='.$style.'&offset='.($offset+$i).
 			'&forum_id='.$forum_id.'&group_id='.$group_id.'">
 		<strong> '.$Language->getText('forum_forum','next_messages') .
 		html_image('t.png',"15","15",array("border"=>"0","ALIGN"=>"MIDDLE")) . '</strong></a>';

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/forum/include/AttachManager.class
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/forum/include/AttachManager.class	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/forum/include/AttachManager.class	2011-02-24 17:31:31 UTC (rev 11977)
@@ -156,7 +156,7 @@
 			} else {
 				$attach = html_image('ic/cfolder15.png',"15","13",array("border"=>"0")) . "No attachment found";
 				if ( ((user_getid() == $msg->getPosterID()) || ($f->userIsAdmin())) && (!$msg->isPending()) ) { //only permit an admin or the user who created the message to insert an attach
-					$attach .= "   <a href=\"javascript:manageattachments('/forum/attachment.php?attachid=0&group_id=$group_id&forum_id=$forum_id&msg_id=$msg_id&edit=yes','no');\">" .  "<font size=\"-3\">" .  html_image('ic/forum_add.gif','37','15',array(alt=>"Add")) . "</font></a>";
+					$attach .= "   <a href=\"javascript:manageattachments('".$GLOBALS['sys_urlprefix']."/forum/attachment.php?attachid=0&group_id=$group_id&forum_id=$forum_id&msg_id=$msg_id&edit=yes','no');\">" .  "<font size=\"-3\">" .  html_image('ic/forum_add.gif','37','15',array('alt'=>"Add")) . "</font></a>";
 				}
 			}
 		}

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/forum/include/ForumHTML.class
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/forum/include/ForumHTML.class	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/forum/include/ForumHTML.class	2011-02-24 17:31:31 UTC (rev 11977)
@@ -66,8 +66,8 @@
 				echo '
 				<strong>'.$Language->getText('forum_utils','postedby').':</strong> '.$user->getRealName().'<br />
 				<strong>'.$Language->getText('forum_utils','date').':</strong> '. date($sys_datefmt,db_result($result,0,'post_date')).'<br />
-				<strong>'.$Language->getText('forum_utils','summary').':</strong> <a href="/forum/forum.php?forum_id='.db_result($result,0,'forum_id').'&group_id='.$group_id.'">'. db_result($result,0,'summary').'</a><br/>
-				<strong>'.$Language->getText('forum_utils','project').':</strong> <a href="/projects/'.$group->getUnixName().'">'.$group->getPublicName().'</a> <br />
+				<strong>'.$Language->getText('forum_utils','summary').':</strong> <a href="'.$GLOBALS['sys_urlprefix'].'/forum/forum.php?forum_id='.db_result($result,0,'forum_id').'&group_id='.$group_id.'">'. db_result($result,0,'summary').'</a><br/>
+				<strong>'.$Language->getText('forum_utils','project').':</strong> <a href="'.$GLOBALS['sys_urlprefix'].'/projects/'.$group->getUnixName().'">'.$group->getPublicName().'</a> <br />
 				<p>
 				'. (util_make_links(nl2br(db_result($result,0,'details'))));
 
@@ -105,19 +105,19 @@
 	if (session_loggedin() ) {
 		if ($f) {
 			if ($f->isMonitoring()) {
-				echo '<a href="/forum/monitor.php?forum_id='.$forum_id.'&group_id='.$group_id.'&stop=1">' .
+				echo '<a href="'.$GLOBALS['sys_urlprefix'].'/forum/monitor.php?forum_id='.$forum_id.'&group_id='.$group_id.'&stop=1">' .
 				html_image('ic/xmail16w.png','20','20',array()).' '.$Language->getText('forum_utils','stopmonitor').'</a> | ';
 			} else {
-				echo '<a href="/forum/monitor.php?forum_id='.$forum_id.'&group_id='.$group_id.'&start=1">' .
+				echo '<a href="'.$GLOBALS['sys_urlprefix'].'/forum/monitor.php?forum_id='.$forum_id.'&group_id='.$group_id.'&start=1">' .
 				html_image('ic/mail16w.png','20','20',array()).' '.$Language->getText('forum_utils','monitor').'</a> | ';
 			}
-			echo '<a href="/forum/save.php?forum_id='.$forum_id.'&group_id='.$group_id.'">' .
+			echo '<a href="'.$GLOBALS['sys_urlprefix'].'/forum/save.php?forum_id='.$forum_id.'&group_id='.$group_id.'">' .
 			html_image('ic/save.png','24','24',array()) .' '.$Language->getText('forum_utils','saveplace').'</a> | ';
 		}
 	}
 
 	if ($f && $forum_id) {
-		echo '<a href="/forum/new.php?forum_id='.$forum_id.'&group_id='.$group_id.'">' .
+		echo '<a href="'.$GLOBALS['sys_urlprefix'].'/forum/new.php?forum_id='.$forum_id.'&group_id='.$group_id.'">' .
 			html_image('ic/write16w.png','20','20',array('alt'=>$Language->getText('forum_message','thread'))) .' '.
 			$Language->getText('forum_message','thread').'</a>';
 	}
@@ -218,14 +218,14 @@
 		'
 		<table border="0">
 			<tr>
-				<td class="tablecontent" nowrap="nowrap">'; if ($msgforum->userIsAdmin()) {$ret_val .= $fa->PrintAdminMessageOptions($msg->getID(),$group_id,$msg->getThreadID(),$msgforum->getID());} $ret_val .= $Language->getText('forum_utils','by').' <a href="/users/'.
+				<td class="tablecontent" nowrap="nowrap">'; if ($msgforum->userIsAdmin()) {$ret_val .= $fa->PrintAdminMessageOptions($msg->getID(),$group_id,$msg->getThreadID(),$msgforum->getID());} $ret_val .= $Language->getText('forum_utils','by').' <a href="'.$GLOBALS['sys_urlprefix'].'/users/'.
 					$msg->getPosterName() .'/">'.
 					$msg->getPosterRealName() .'</a>'.
 					'<br />
 					';
 					$ret_val .= $am->PrintAttachLink($msg,$group_id,$msgforum->getID()) . '
 					<br />
-					<a href="/forum/message.php?msg_id='.
+					<a href="'.$GLOBALS['sys_urlprefix'].'/forum/message.php?msg_id='.
 					$msg->getID() .'&group_id='.$group_id.'">'.
 					html_image('ic/msg.png',"10","12",array("border"=>"0")) .
 					$bold_begin. $msg->getSubject() .' [ '.$Language->getText('forum_utils','reply').' ]'. $bold_end .'</a>   '.
@@ -393,7 +393,7 @@
 					If it this is the message being displayed, don't show a link to it
 				*/
 				if ($current_message != $msg_arr["$msg_id"][$i]->getID()) {
-					$ah_begin='<a href="/forum/message.php?msg_id='. $msg_arr["$msg_id"][$i]->getID() .
+					$ah_begin='<a href="'.$GLOBALS['sys_urlprefix'].'/forum/message.php?msg_id='. $msg_arr["$msg_id"][$i]->getID() .
 						'&group_id='.$group_id.'">';
 					$ah_end='</a>';
 				} else {
@@ -415,7 +415,7 @@
 				}
 
 				$ret_val .= $bold_begin.$msg_arr["$msg_id"][$i]->getSubject() .$bold_end.$ah_end.'</td>'.
-					'<td><a href="/users/'.$msg_arr["$msg_id"][$i]->getPosterName().'/">'. $msg_arr["$msg_id"][$i]->getPosterRealName() .'</a></td>'.
+					'<td><a href="'.$GLOBALS['sys_urlprefix'].'/users/'.$msg_arr["$msg_id"][$i]->getPosterName().'/">'. $msg_arr["$msg_id"][$i]->getPosterRealName() .'</a></td>'.
 					'<td>'.date($sys_datefmt, $msg_arr["$msg_id"][$i]->getPostDate() ).'</td></tr>';
 
 				if ($msg_arr["$msg_id"][$i]->hasFollowups() > 0) {
@@ -569,7 +569,7 @@
 
 			<?php
 			if (!session_loggedin()) {
-				echo '<span class="highlight">'.$Language->getText('forum_utils','postanon').' <a href="/account/login.php?return_to='. urlencode(getStringFromServer('REQUEST_URI')) .'">['.$Language->getText('forum_utils','loggedin').']</a></span>';
+				echo '<span class="highlight">'.$Language->getText('forum_utils','postanon').' <a href="'.$GLOBALS['sys_urlprefix'].'/account/login.php?return_to='. urlencode(getStringFromServer('REQUEST_URI')) .'">['.$Language->getText('forum_utils','loggedin').']</a></span>';
 			}
 			?>
 			<br />
@@ -583,11 +583,11 @@
 
 		} elseif ($this->Forum->allowAnonymous()) {
 			echo '<span class="error">';
-			echo $Language->getText('forum_utils','couldpostif',array('<a href="/account/login.php?return_to='.urlencode(getStringFromServer('REQUEST_URI')).' ">','</a>'));
+			echo $Language->getText('forum_utils','couldpostif',array('<a href="'.$GLOBALS['sys_urlprefix'].'/account/login.php?return_to='.urlencode(getStringFromServer('REQUEST_URI')).' ">','</a>'));
 			echo '<>';
 		} elseif (!session_loggedin()) {
 			echo '
-			<span class="error">'.$Language->getText('tracker','please_login',array('<a href="/account/login.php?return_to='.urlencode($REQUEST_URI).'">','</a>')).'</span><br/></p>';
+			<span class="error">'.$Language->getText('tracker','please_login',array('<a href="'.$GLOBALS['sys_urlprefix'].'/account/login.php?return_to='.urlencode($REQUEST_URI).'">','</a>')).'</span><br/></p>';
 		} else {
 			//do nothing
 		}

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/forum/index.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/forum/index.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/forum/index.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -18,8 +18,9 @@
     Complete OO rewrite by Tim Perdue 12/2002
 */
 
+require_once('../env.inc.php');
 require_once('pre.php');
-require_once('www/forum/include/ForumHTML.class');
+require_once('../forum/include/ForumHTML.class');
 require_once('common/forum/ForumFactory.class');
 require_once('common/forum/Forum.class');
 
@@ -56,7 +57,7 @@
 
 //	echo $Language->getText('forum', 'choose');
 
-	echo $HTML->subMenu(array("My Monitored Forums"),array("myforums.php?group_id=$group_id"));
+	echo $HTML->subMenu(array("My Monitored Forums"),array("/forum/myforums.php?group_id=$group_id"));
 	$tablearr=array($Language->getText('forum_forum','forum'),$Language->getText('forum_forum','description'),$Language->getText('forum_forum','threads'),$Language->getText('forum_forum','posts'), $Language->getText('forum_forum','lastpost'),$Language->getText('forum_forum','moderationlvl'));
 	echo $HTML->listTableTop($tablearr);
 

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/forum/message.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/forum/message.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/forum/message.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -18,6 +18,7 @@
 	Complete OO rewrite by Tim Perdue 12/2002
 */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('www/forum/include/ForumHTML.class');
 require_once('www/forum/include/AttachManager.class');
@@ -103,13 +104,13 @@
 	if ($f->userIsAdmin()) {
 		echo $fa->PrintAdminMessageOptions($msg_id,$group_id,0,$forum_id); // 0 in thread id because that tells us to go back to message.php instead of forum.php
 	}
-	echo $Language->getText('forum_message','by').": ". $fm->getPosterRealName() ." (<a href=\"/users/".$fm->getPosterName()."/\">". $fm->getPosterName() ."</a>)<br />";
-	echo $Language->getText('forum_message','date').": ". date($sys_datefmt, $fm->getPostDate()) ."<br />";
+	echo $Language->getText('forum_message','by').': '. $fm->getPosterRealName() .' (<a href="'.$GLOBALS['sys_urlprefix'].'/users/'.$fm->getPosterName().'/">'. $fm->getPosterName() .'</a>)<br />';
+	echo $Language->getText('forum_message','date').': '. date($sys_datefmt, $fm->getPostDate()) .'<br />';
 	$am = new AttachManager();
 	echo $am->PrintHelperFunctions();
-	echo $am->PrintAttachLink($fm,$group_id,$forum_id) . "<br/>";
+	echo $am->PrintAttachLink($fm,$group_id,$forum_id) . '<br/>';
 	
-	echo $Language->getText('forum_message','subject').": ". $fm->getSubject() ."<p> </p>";
+	echo $Language->getText('forum_message','subject').': '. $fm->getSubject() .'<p> </p>';
 	
 	if (!strstr('<',$fm->getBody())) { 
 		echo nl2br($fm->getBody()); //backwards compatibility for non html messages
@@ -154,7 +155,7 @@
 		
 		
 		if ($fm->getID() != $msg->getID()) {
-			$ah_begin='<a href="/forum/message.php?msg_id='.$msg->getID().
+			$ah_begin='<a href="'.$GLOBALS['sys_urlprefix'].'/forum/message.php?msg_id='.$msg->getID().
 				'&group_id='.$group_id.'">';
 			$ah_end='</a>';
 		} else {

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/forum/monitor.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/forum/monitor.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/forum/monitor.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -18,6 +18,7 @@
     Complete OO rewrite by Tim Perdue 12/2002
 */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('www/forum/include/ForumHTML.class');
 require_once('common/forum/Forum.class');
@@ -46,13 +47,13 @@
 			if (!$f->stopMonitor()) {
 				exit_error('Error',$f->getErrorMessage());
 			} else {
-				header ("Location: /forum/forum.php?forum_id=$forum_id&group_id=$group_id&feedback=".urlencode($Language->getText('forum_monitor','deactivated')));
+				header ("Location: ".$GLOBALS['sys_urlprefix']."/forum/forum.php?forum_id=$forum_id&group_id=$group_id&feedback=".urlencode($Language->getText('forum_monitor','deactivated')));
 			}
 		} elseif(getStringFromRequest('start')) {
 			if (!$f->setMonitor()) {
 				exit_error('Error',$f->getErrorMessage());
 			} else {
-				header ("Location: /forum/forum.php?forum_id=$forum_id&group_id=$group_id&feedback=".urlencode($Language->getText('forum_monitor','activated')));
+				header ("Location: ".$GLOBALS['sys_urlprefix']."/forum/forum.php?forum_id=$forum_id&group_id=$group_id&feedback=".urlencode($Language->getText('forum_monitor','activated')));
 			}
 		}
 	} else {

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/forum/myforums.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/forum/myforums.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/forum/myforums.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -30,6 +30,7 @@
 	by Daniel Perez - 2005
 */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('www/forum/include/ForumHTML.class');
 require_once('common/forum/Forum.class');
@@ -76,7 +77,7 @@
 
 
 $f = array();
-//CHECK : if we won´t ever be needing to store each forum/fmf, etc for each pass, don´t use an array and use the same variable like $fmf instead of $fmf[$i], etc
+//CHECK : if we won�t ever be needing to store each forum/fmf, etc for each pass, don�t use an array and use the same variable like $fmf instead of $fmf[$i], etc
 for($i=0;$i<sizeof($monitored_forums);$i++) {
 	$g =& group_get_object($monitored_forums[$i]["group_id"]);
 	if (!$g || !is_object($g) || $g->isError()) {
@@ -122,12 +123,12 @@
 		$j=0;
 		$newcontent = "<center>---</center>";
 		//this loops through every message AND followup, in search of new messages.
-		//anything that´s new ( new thread or followup) is considered to be a "new thing" and the forum 
+		//anything that�s new ( new thread or followup) is considered to be a "new thing" and the forum 
 		//is considered to have new contents
 		foreach ($msg_arr as $forum_msg_arr) {
 			foreach ($forum_msg_arr as $forum_msg) {
 				if ($f->getSavedDate() < $forum_msg->getPostDate()) {
-				//we´ve got ourselves a new message or followup for this forum. note that, exit the search
+				//we�ve got ourselves a new message or followup for this forum. note that, exit the search
 				$newcontent = "<center>" . html_image("ic/new.png","25","11",array("border"=>"0")) . "</center>";
 				break;
 				}
@@ -140,7 +141,7 @@
 			$msg =& $msg_arr["0"][$j];
 			$total_rows++;
 			if ($f->getSavedDate() < $msg->getPostDate()) {
-				//we´ve got ourselves a new message for this forum. note that, exit the search
+				//we�ve got ourselves a new message for this forum. note that, exit the search
 				$newcontent = "<center>" . html_image("ic/new.png","25","11",array("border"=>"0")) . "</center>";
 				break;
 			}

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/forum/new.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/forum/new.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/forum/new.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -19,6 +19,7 @@
 */
 
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('www/forum/include/ForumHTML.class');
 require_once('common/forum/Forum.class');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/forum/save.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/forum/save.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/forum/save.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -19,6 +19,7 @@
 */
 
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('www/forum/include/ForumHTML.class');
 require_once('common/forum/Forum.class');
@@ -49,7 +50,7 @@
 		if (!$f->savePlace()) {
 			exit_error($Language->getText('general','error'),$f->getErrorMessage());
 		} else {
-			header ("Location: /forum/forum.php?forum_id=$forum_id&group_id=$group_id&feedback=".urlencode($Language->getText('forum_save','saved')));
+			header ("Location: ".$GLOBALS['sys_urlprefix']."/forum/forum.php?forum_id=$forum_id&group_id=$group_id&feedback=".urlencode($Language->getText('forum_save','saved')));
 		}
 	} else {
 		exit_missing_param();

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/frs/admin/deletepackage.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/frs/admin/deletepackage.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/frs/admin/deletepackage.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -26,6 +26,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../../env.inc.php');
 require_once('pre.php');	
 require_once('www/frs/include/frs_utils.php');
 require_once('common/frs/FRSPackage.class');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/frs/admin/deleterelease.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/frs/admin/deleterelease.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/frs/admin/deleterelease.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -25,6 +25,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../../env.inc.php');
 require_once('pre.php');	
 require_once('www/frs/include/frs_utils.php');
 require_once('common/frs/FRSPackage.class');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/frs/admin/editrelease.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/frs/admin/editrelease.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/frs/admin/editrelease.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -26,6 +26,7 @@
  */
 
 
+require_once('../../env.inc.php');
 require_once('pre.php');
 require_once('common/frs/FRSPackage.class');
 require_once('common/frs/FRSRelease.class');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/frs/admin/index.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/frs/admin/index.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/frs/admin/index.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -26,6 +26,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../../env.inc.php');
 require_once('pre.php');	
 require_once('www/frs/include/frs_utils.php');
 require_once('common/frs/FRSPackage.class');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/frs/admin/qrs.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/frs/admin/qrs.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/frs/admin/qrs.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -8,6 +8,7 @@
  * @version   $Id$
  */
 
+require_once('../../env.inc.php');
 require_once('pre.php');	
 require_once('common/frs/FRSPackage.class');
 require_once('common/frs/FRSRelease.class');
@@ -134,9 +135,9 @@
 						?>
 						<p>
 						<?php echo $Language->getText('project_admin_qrs','qrs_info',
-							array('<a href="/frs/admin/editrelease.php?release_id='.$frsr->getID().'&group_id='.$group_id.'&package_id='.$package_id.' "><strong>',
+							array('<a href="'.$GLOBALS['sys_urlprefix'].'/frs/admin/editrelease.php?release_id='.$frsr->getID().'&group_id='.$group_id.'&package_id='.$package_id.' "><strong>',
 							'</strong></a>',
-							'<a href="/frs/?group_id='.$group_id.'">','</a>')) ?>
+							'<a href="'.$GLOBALS['sys_urlprefix'].'/frs/?group_id='.$group_id.'">','</a>')) ?>
 						<?php
 						db_commit();
 						frs_admin_footer(array());
@@ -186,7 +187,7 @@
 ?>
 			  
 			
-			<?php echo $Language->getText('project_admin_qrs','create_new_package',array('<a href="/frs/admin/?group_id='.$group_id.'">','</a>')) ?>
+			<?php echo $Language->getText('project_admin_qrs','create_new_package',array('<a href="'.$GLOBALS['sys_urlprefix'].'/frs/admin/?group_id='.$group_id.'">','</a>')) ?>
 		</td>
 	</tr>
 	<tr>

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/frs/admin/showreleases.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/frs/admin/showreleases.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/frs/admin/showreleases.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -29,6 +29,7 @@
  * a little and incorporate FRS.class.		-Darrell
  */
 
+require_once('../../env.inc.php');
 require_once('pre.php');	
 require_once('www/frs/include/frs_utils.php');
 require_once('common/frs/FRSPackage.class');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/frs/download.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/frs/download.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/frs/download.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -27,6 +27,7 @@
 
 $no_gz_buffer=true;
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('common/frs/FRSPackage.class');
 require_once('common/frs/FRSRelease.class');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/frs/index.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/frs/index.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/frs/index.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -26,6 +26,7 @@
  */
 
 
+require_once('../env.inc.php');
 require_once('pre.php');	
 require_once('www/frs/include/frs_utils.php');
 
@@ -80,7 +81,7 @@
 $perm =& $cur_group->getPermission(session_get_user());
 
 if ($perm->isReleaseTechnician()) {
-	echo "<p><a href=\"admin/qrs.php?package=&group_id=$group_id\">";
+	echo '<p><a href="admin/qrs.php?package=&group_id='.$group_id.'">';
 	echo $Language->getText('project_showfiles','new_release');
 	echo "</a></p>";
 }
@@ -113,7 +114,7 @@
 	$cur_style = $GLOBALS['HTML']->boxGetAltRowStyle($p);
 	
 	print '<tr '.$cur_style.'><td colspan="3"><h3>'.db_result($res_package,$p,'name').'
-	<a href="/frs/monitor.php?filemodule_id='. db_result($res_package,$p,'package_id') .'&group_id='.db_result($res_package,$p,'group_id').'&start=1">'.
+	<a href="'.$GLOBALS['sys_urlprefix'].'/frs/monitor.php?filemodule_id='. db_result($res_package,$p,'package_id') .'&group_id='.db_result($res_package,$p,'group_id').'&start=1">'.
 	html_image('ic/mail16w.png','20','20',array('alt'=>$Language->getText('project_showfiles','monitor_package'))) .
 	'</a></h3></td><td colspan="4"> </td></tr>';
 
@@ -186,7 +187,7 @@
 					$cell_data=array();
 					
 					$cell_data[] = array('<dd>
-						<a href="/frs/download.php/'.$file_release['file_id'].'/'.$file_release['filename'].'">'
+						<a href="'.$GLOBALS['sys_urlprefix'].'/frs/download.php/'.$file_release['file_id'].'/'.$file_release['filename'].'">'
 						. $file_release['filename'] .'</a>',
 						'colspan=3');
 						

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/frs/monitor.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/frs/monitor.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/frs/monitor.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -8,6 +8,7 @@
  * @version   $Id$
  */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('common/frs/FRSPackage.class');
 require_once('www/frs/include/frs_utils.php');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/frs/shownotes.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/frs/shownotes.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/frs/shownotes.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -25,6 +25,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('www/frs/include/frs_utils.php');
 
@@ -56,7 +57,7 @@
 
 	echo $HTML->boxTop($Language->getText('project_shownotes','notes'));
 
-	echo '<h3>'.$Language->getText('project_shownotes','release_name').' <a href="/frs/?group_id='.db_result($result,0,'group_id').'">'.db_result($result,0,'name').'</a></h3>
+	echo '<h3>'.$Language->getText('project_shownotes','release_name').' <a href="'.$GLOBALS['sys_urlprefix'].'/frs/?group_id='.db_result($result,0,'group_id').'">'.db_result($result,0,'name').'</a></h3>
 		<p>';
 
 /*

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/help/index.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/help/index.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/help/index.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -25,6 +25,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 
 $HTML->header(array('title'=>$Language->getText('help','title',array($GLOBALS['sys_name']))));

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/help/tracker.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/help/tracker.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/help/tracker.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -25,6 +25,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 
 $helpname = getStringFromRequest('helpname');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/help/trove_cat.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/help/trove_cat.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/help/trove_cat.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -25,6 +25,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 
 $trove_cat_id = getIntFromRequest('trove_cat_id');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/include/Layout.class
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/include/Layout.class	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/include/Layout.class	2011-02-24 17:31:31 UTC (rev 11977)
@@ -34,7 +34,7 @@
 	 * @var		string	$imgroot
 	 */
 
-	var $imgroot = '/themes/gforge/images/';
+	var $imgroot;
 
 
 	/**
@@ -45,14 +45,12 @@
 		$this->themeroot=$GLOBALS['sys_themeroot'].$GLOBALS['sys_theme'];
 		/* if images directory exists in theme, then use it as imgroot */
 		if (file_exists ($this->themeroot.'/images')){
-			$this->imgroot='/themes/'.$GLOBALS['sys_theme'].'/images/';
+			$this->imgroot=$GLOBALS['sys_urlprefix'].'/themes/'.$GLOBALS['sys_theme'].'/images/';
 		}
 		// Constructor for parent class...
 		if ( file_exists($GLOBALS['sys_custom_path'] . '/index_std.php') )
 			$this->rootindex = $GLOBALS['sys_custom_path'] . '/index_std.php';
 		$this->Error();
-
-		
 	}
 
 	/**
@@ -62,7 +60,7 @@
 	 *	@param	string	The user's realname
 	 */
 	function createLinkToUserHome($user_name, $realname) {
-		return '<a href="/users/'.$user_name.'/">'.$realname.'</a>';
+		return '<a href="'.$GLOBALS['sys_urlprefix'].'/users/'.$user_name.'/">'.$realname.'</a>';
 	}
 
 	/**
@@ -90,44 +88,17 @@
   <head>
 	<meta http-equiv="Content-Type" content="text/html; charset=<?php echo $Language->getEncoding(); ?>" />
 	<title><?php echo $params['title']; ?></title>
-	<link rel="alternate" title="<?php echo $GLOBALS['sys_name']; ?> - Project News Highlights RSS" href="/export/rss_sfnews.php" type="application/rss+xml"/>
-	<link rel="alternate" title="<?php echo $GLOBALS['sys_name']; ?> - Project News Highlights RSS 2.0" href="/export/rss20_news.php" type="application/rss+xml"/>
-	<link rel="alternate" title="<?php echo $GLOBALS['sys_name']; ?> - New Projects RSS" href="/export/rss_sfprojects.php" type="application/rss+xml"/>
+	<link rel="alternate" title="<?php echo $GLOBALS['sys_name']; ?> - Project News Highlights RSS" href="<?php echo $GLOBALS['sys_urlprefix']; ?>/export/rss_sfnews.php" type="application/rss+xml"/>
+	<link rel="alternate" title="<?php echo $GLOBALS['sys_name']; ?> - Project News Highlights RSS 2.0" href="<?php echo $GLOBALS['sys_urlprefix']; ?>/export/rss20_news.php" type="application/rss+xml"/>
+	<link rel="alternate" title="<?php echo $GLOBALS['sys_name']; ?> - New Projects RSS" href="<?php echo $GLOBALS['sys_urlprefix']; ?>/export/rss_sfprojects.php" type="application/rss+xml"/>
 	
 	<?php	if (isset($GLOBALS['group_id'])) { 
-			$activity = '<link rel="alternate" title="' . $GLOBALS['sys_name'] . ' - New Activity RSS" href="/export/rss20_activity.php?group_id='.$GLOBALS['group_id'].'" type="application/rss+xml"/>';
+			$activity = '<link rel="alternate" title="' . $GLOBALS['sys_name'] . ' - New Activity RSS" href="'.$GLOBALS['sys_urlprefix'].'/export/rss20_activity.php?group_id='.$GLOBALS['group_id'].'" type="application/rss+xml"/>';
 			echo $activity;
 		}
 	?>
-<?
+	<?php $this->headerCSS(); ?>
 
-/* check if a personalized css stylesheet exist, if yes include only
-   this stylesheet
-   new stylesheets should use the <themename>.css file
-*/
-$theme_cssfile=$GLOBALS['sys_themeroot'].$GLOBALS['sys_theme'].'/css/'.$GLOBALS['sys_theme'].'.css';
-if (file_exists($theme_cssfile)){
-echo '
-<link rel="stylesheet" type="text/css" href="/themes/'.$GLOBALS['sys_theme'].'/css/'.$GLOBALS['sys_theme'].'.css"/>';
-}
-else
-{
-/* if this is not our case, then include the compatibility stylesheet
-   that contains all removed styles from the code and check if a
-   custom stylesheet exists. 
-   Used for compatibility with existing stylesheets
-*/
-?>
-<link rel="stylesheet" type="text/css" href="/themes/css/gforge-compat.css" />
-<?
-$theme_cssfile=$GLOBALS['sys_themeroot'].$GLOBALS['sys_theme'].'/css/theme.css';
-if (file_exists($theme_cssfile)){
-echo '
-<link rel="stylesheet" type="text/css" href="/themes/'.$GLOBALS['sys_theme'].'/css/theme.css" />
-';
-}
-}
-?>
 	<script language="JavaScript" type="text/javascript">
 	<!--
 
@@ -141,33 +112,64 @@
 	// -->
 	<?php plugin_hook ("javascript",false) ; ?>
 	</script>
-<?php plugin_hook ('cssfile',$this); ?>
 </head>
 <?php 
-
 	} 
+	
+	function headerCSS() {
+		/* check if a personalized css stylesheet exist, if yes include only
+   		this stylesheet
+   		new stylesheets should use the <themename>.css file
+		*/
+		$theme_cssfile=$GLOBALS['sys_themeroot'].$GLOBALS['sys_theme'].'/css/'.$GLOBALS['sys_theme'].'.css';
+		if (file_exists($theme_cssfile)){
+			echo '
+	<link rel="stylesheet" type="text/css" href="'.$GLOBALS['sys_urlprefix'].'/themes/'.$GLOBALS['sys_theme'].'/css/'.$GLOBALS['sys_theme'].'.css"/>';
+		} else {
+		/* if this is not our case, then include the compatibility stylesheet
+   		that contains all removed styles from the code and check if a
+   		custom stylesheet exists. 
+   		Used for compatibility with existing stylesheets
+		*/
+			echo '
+	<link rel="stylesheet" type="text/css" href="'.$GLOBALS['sys_urlprefix'].'/themes/css/gforge-compat.css" />';
+			$theme_cssfile=$GLOBALS['sys_themeroot'].$GLOBALS['sys_theme'].'/css/theme.css';
+			if (file_exists($theme_cssfile)){
+				echo '
+	<link rel="stylesheet" type="text/css" href="'.$GLOBALS['sys_urlprefix'].'/themes/'.$GLOBALS['sys_theme'].'/css/theme.css" />';
+			}
+		}
+		plugin_hook ('cssfile',$this);
+	}
 
 	function header($params) {
 		global $Language;
 
 		$this->headerStart($params); ?>
 <body>
+		<?php
+		$this->bodyHeader($params);
+	}
 
+	function bodyHeader($params){
+		global $Language;
+		?>
+<div class="header">
 <table border="0" width="100%" cellspacing="0" cellpadding="0" id="headertable">
 
 	<tr>
-		<td><a href="/"><?php echo html_image('logo.png',198,52,array('border'=>'0')); ?></a></td>
+		<td><a href="<?php echo $GLOBALS['sys_urlprefix']; ?>/"><?php echo html_image('logo.png',198,52,array('border'=>'0')); ?></a></td>
 		<td><?php echo $this->searchBox(); ?></td>
 		<td align="right"><?php
 			if (session_loggedin()) {
 				?>
-				<a class="lnkutility" href="/account/logout.php"><?php echo $Language->getText('common','logout'); ?></a><br />
-				<a class="lnkutility" href="/account/"><?php echo $Language->getText('common','myaccount'); ?></a>
+				<a class="lnkutility" href="<?php echo $GLOBALS['sys_urlprefix']; ?>/account/logout.php"><?php echo $Language->getText('common','logout'); ?></a><br />
+				<a class="lnkutility" href="<?php echo $GLOBALS['sys_urlprefix']; ?>/account/"><?php echo $Language->getText('common','myaccount'); ?></a>
 				<?php
 			} else {
 				?>
-				<b><a class="lnkutility" href="/account/login.php"><?php echo $Language->getText('common','login'); ?></a></b><br />
-				<b><a class="lnkutility" href="/account/register.php"><?php echo $Language->getText('common','newaccount'); ?></a></b>
+				<b><a class="lnkutility" href="<?php echo $GLOBALS['sys_urlprefix']; ?>/account/login.php"><?php echo $Language->getText('common','login'); ?></a></b><br />
+				<b><a class="lnkutility" href="<?php echo $GLOBALS['sys_urlprefix']; ?>/account/register.php"><?php echo $Language->getText('common','newaccount'); ?></a></b>
 				<?php
 			}
 			echo $this->quickNav();
@@ -288,11 +290,12 @@
 	global $sys_show_source;
 	global $Language;
 	if ($sys_show_source) {
-		print '<a class="showsource" href="/source.php?file=' . getStringFromServer('SCRIPT_NAME') . '"> '.$Language->getText('source','show_source').' </a>';
+		print '<a class="showsource" href="'.$GLOBALS['sys_urlprefix'].'/source.php?file=' . getStringFromServer('SCRIPT_NAME') . '"> '.$Language->getText('source','show_source').' </a>';
 	}
 ?>
 
 </body>
+</div>
 </html>
 <?php
 
@@ -395,7 +398,7 @@
 		if ($links_arr) {
 			for ($i=0; $i<$count; $i++) {
 				$return .= '
-				<td><a class="sortbutton" href="'.$links_arr[$i].'">'.$title_arr[$i].'</a></td>';
+				<td><a class="sortbutton" href="'.$GLOBALS['sys_urlprefix'].$links_arr[$i].'">'.$title_arr[$i].'</a></td>';
 			}
 		} else {
 			for ($i=0; $i<$count; $i++) {
@@ -670,7 +673,7 @@
 				$return .= '
 					<td '.$rowspan.'valign="top" width="10" style="background:url('.$this->imgroot . 'theme-'.$inner.'-end-'.(($issel) ? '' : 'not').'selected.png)">'.
 						'<img src="'.$this->imgroot . 'clear.png" height="25" width="10" alt="" /></td>'.
-						'<td '.$rowspan.'style="background:url('.$this->imgroot . $bgimg.')" width="'.$width.'%" align="center"><a class="'. (($issel)?'tabsellink':'tablink') .'" href="'.$TABS_DIRS[$i].'">'.$TABS_TITLES[$i].'</a></td>';
+						'<td '.$rowspan.'style="background:url('.$this->imgroot . $bgimg.')" width="'.$width.'%" align="center"><a class="'. (($issel)?'tabsellink':'tablink') .'" href="'.$GLOBALS['sys_urlprefix'].$TABS_DIRS[$i].'">'.$TABS_TITLES[$i].'</a></td>';
 			} elseif ($i==$count-1) {
 				//
 				//	this is the last tab, choose an image with name-end
@@ -685,7 +688,7 @@
 				$return .= '
 					<td '.$rowspan.'colspan="2" valign="top" width="20" style="background:url('.$this->imgroot . 'theme-'.$inner.'-'.(($wassel) ? '' : 'not').'selected-'.(($issel) ? '' : 'not').'selected.png)">'.
 						'<img src="'.$this->imgroot . 'clear.png" height="2" width="20" alt="" /></td>'.
-						'<td '.$rowspan.'style="background:url('.$this->imgroot . $bgimg.')" width="'.$width.'%" align="center"><a class="'. (($issel)?'tabsellink':'tablink') .'" href="'.$TABS_DIRS[$i].'">'.$TABS_TITLES[$i].'</a></td>';
+						'<td '.$rowspan.'style="background:url('.$this->imgroot . $bgimg.')" width="'.$width.'%" align="center"><a class="'. (($issel)?'tabsellink':'tablink') .'" href="'.$GLOBALS['sys_urlprefix'].$TABS_DIRS[$i].'">'.$TABS_TITLES[$i].'</a></td>';
 				//
 				//	Last graphic on right-side
 				//
@@ -707,7 +710,7 @@
 				$return .= '
 					<td '.$rowspan.'colspan="2" valign="top" width="20" style="background:url('.$this->imgroot . 'theme-'.$inner.'-'.(($wassel) ? '' : 'not').'selected-'.(($issel) ? '' : 'not').'selected.png)">'.
 						'<img src="'.$this->imgroot . 'clear.png" height="2" width="20" alt="" /></td>'.
-						'<td '.$rowspan.'style="background:url('.$this->imgroot . $bgimg.')" width="'.$width.'%" align="center"><a class="'. (($issel)?'tabsellink':'tablink') .'" href="'.$TABS_DIRS[$i].'">'.$TABS_TITLES[$i].'</a></td>';
+						'<td '.$rowspan.'style="background:url('.$this->imgroot . $bgimg.')" width="'.$width.'%" align="center"><a class="'. (($issel)?'tabsellink':'tablink') .'" href="'.$GLOBALS['sys_urlprefix'].$TABS_DIRS[$i].'">'.$TABS_TITLES[$i].'</a></td>';
 
 			}
 		}
@@ -800,7 +803,7 @@
 		if (isset($group_id)) {
 			print '
 					<td width="10"> </td>
-					<td><a class="lnkutility" href="/search/advanced_search.php?group_id='.$group_id.'"> '.$Language->getText('searchbox', 'advanced_search').'</a></td>';
+					<td><a class="lnkutility" href="'.$GLOBALS['sys_urlprefix'].'/search/advanced_search.php?group_id='.$group_id.'"> '.$Language->getText('searchbox', 'advanced_search').'</a></td>';
 		}
 		print '</tr></table>';
 		print '</form>';
@@ -979,10 +982,10 @@
 		
 		for ($i=0; $i<$count; $i++) {
 			$return .= '
-				<a href="'.$links_arr[$i].'">'.$title_arr[$i].'</a> | ';
+				<a href="'.$GLOBALS['sys_urlprefix'].$links_arr[$i].'">'.$title_arr[$i].'</a> | ';
 		}
 		$return .= '
-				<a href="'.$links_arr[$i].'">'.$title_arr[$i].'</a>';
+				<a href="'.$GLOBALS['sys_urlprefix'].$links_arr[$i].'">'.$title_arr[$i].'</a>';
 		return $return;
 	}
 

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/include/LayoutSF.class
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/include/LayoutSF.class	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/include/LayoutSF.class	2011-02-24 17:31:31 UTC (rev 11977)
@@ -331,7 +331,7 @@
   <head>
 	<meta http-equiv="Content-Type" content="text/html; charset=<?php echo $Language->getEncoding(); ?>">
     <TITLE><?php echo $params['title']; ?></TITLE>
-	<link rel="stylesheet" type="text/css" href="/themes/css/gforge.css" />
+	<link rel="stylesheet" type="text/css" href="<?php echo $GLOBALS['sys_urlprefix']; ?>/themes/css/gforge.css" />
 	<SCRIPT language="JavaScript">
 	<!--
 	function help_window(helpurl) {
@@ -361,7 +361,7 @@
 	 */
 	function generic_footer($params) {
 		global $Language, $sys_name;
-		echo '<P><A HREF="/source.php?page_url='.getStringFromServer('PHP_SELF').'"><B><FONT COLOR="WHITE">Show Source</FONT></B></A><P>';
+		echo '<P><A HREF="'.$GLOBALS['sys_urlprefix'].'/source.php?page_url='.getStringFromServer('PHP_SELF').'"><B><FONT COLOR="WHITE">Show Source</FONT></B></A><P>';
 
 		global $IS_DEBUG,$QUERY_COUNT;
 		if ($IS_DEBUG && user_isloggedin() && user_ismember(1,'A')) {
@@ -422,7 +422,7 @@
 
 	?>
 
-		<link rel="icon" type="image/png" href="/images/debian-sf-icon.png">
+		<link rel="icon" type="image/png" href="<?php echo $GLOBALS['sys_urlprefix']; ?>/images/debian-sf-icon.png">
 		<style type="text/css">
 			<!--
 	OL,UL,P,BODY,TD,TR,TH,FORM { font-family: <?php echo $site_fonts; ?>; font-size:<?php echo $this->FONTSIZE; ?>; color: <?php echo $this->FONTCOLOR_CONTENT ?>; }
@@ -519,7 +519,7 @@
 	?>
 
 	<CENTER>
-	<a href="/"><?php echo html_image($this->imgroot . "sflogo.png","150","150",array()); ?></A>
+	<a href="<?php echo $GLOBALS['sys_urlprefix']; ?>/"><?php echo html_image($this->imgroot . "sflogo.png","150","150",array()); ?></A>
 	</CENTER>
 	<P>
 	<!-- menus -->

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/include/exit.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/include/exit.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/include/exit.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -45,7 +45,7 @@
  */
 function exit_not_logged_in() {
 	//instead of a simple error page, now take them to the login page
-	header ("Location: /account/login.php?return_to=".urlencode(getStringFromServer('REQUEST_URI')));
+	header ("Location: ".$GLOBALS['sys_urlprefix']."/account/login.php?return_to=".urlencode(getStringFromServer('REQUEST_URI')));
 	exit;
 }
 

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/include/features_boxes.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/include/features_boxes.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/include/features_boxes.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -7,11 +7,14 @@
 //
 // $Id$
 //
+// Attempt to set up the include path, to fix problems with relative includes
 
+//require_once('../env.inc.php');
+//require_once('pre.php');
 require_once('common/include/GForge.class');
 
 function show_features_boxes() {
-	GLOBAL $HTML,$Language;
+	GLOBAL $HTML,$Language,$sys_use_ratings;
 	
 	$return = '';
 	$return .= $HTML->boxTop($Language->getText('home','gforge_statistics', $GLOBALS['sys_name']),0);
@@ -59,10 +62,10 @@
 	$return = "";
 	while ($row_topdown = db_fetch_array($res_topdown)) {
 		if ($row_topdown['downloads'] > 0)
-			$return .= "(" . number_format($row_topdown['downloads']) . ') <a href="/projects/'.$row_topdown['unix_group_name'].'/">'
+			$return .= "(" . number_format($row_topdown['downloads']) . ') <a href="'.$GLOBALS['sys_urlprefix'].'/projects/'.$row_topdown['unix_group_name'].'/">'
 			. $row_topdown['group_name']."</a><br />\n";
 	}
-	$return .= '<div align="center"><a href="/top/">[ '.$Language->getText('general','more').' ]</a></div>';
+	$return .= '<div align="center"><a href="'.$GLOBALS['sys_urlprefix'].'/top/">[ '.$Language->getText('general','more').' ]</a></div>';
 
 	return $return;
 
@@ -132,12 +135,12 @@
 	} else {
 		while ( $row_newproj = db_fetch_array($res_newproj) ) {
 			$return .= "<strong>(" . date($Language->getText('home','recently_registered_date_format'),$row_newproj['register_time'])  . ")</strong> "
-				. '<a href="/projects/'.$row_newproj['unix_group_name'].'/">'
+				. '<a href="'.$GLOBALS['sys_urlprefix'].'/projects/'.$row_newproj['unix_group_name'].'/">'
 				. $row_newproj['group_name'].'</a><br />';
 		}
 	}
 	/// TODO: Add more link to show all project
-	//$return .= '<div align="center"><a href="/top/projlist.php">[ '.$Language->getText('general','more').' ]</a></div>';
+	//$return .= '<div align="center"><a href="'.$GLOBALS['sys_urlprefix'].'/top/projlist.php">[ '.$Language->getText('general','more').' ]</a></div>';
 	return $return;
 }
 
@@ -155,10 +158,10 @@
 	} else {
 		$return = '';
 		for ($i=0; $i<$rows; $i++) {
-			$return .= ($i+1).' - ('. number_format(db_result($res,$i,'metric'),4) .') <a href="/users/'. db_result($res,$i,'user_name') .'">'. db_result($res,$i,'realname') .'</a><br />';
+			$return .= ($i+1).' - ('. number_format(db_result($res,$i,'metric'),4) .') <a href="'.$GLOBALS['sys_urlprefix'].'/users/'. db_result($res,$i,'user_name') .'">'. db_result($res,$i,'realname') .'</a><br />';
 		}
 	}
-	$return .= '<div align="center"><a href="/top/topusers.php">[  '.$Language->getText('general','more').' ]</a></div>';
+	$return .= '<div align="center"><a href="'.$GLOBALS['sys_urlprefix'].'/top/topusers.php">[  '.$Language->getText('general','more').' ]</a></div>';
 	return $return;
 }
 
@@ -178,10 +181,10 @@
 	} else {
 		while ($row=db_fetch_array($result)) {
 			$return .= '<strong>( '.number_format(substr($row['percentile'],0,5),1).'% )</strong>'
-				.' <a href="/projects/'.$row['unix_group_name'].
+				.' <a href="'.$GLOBALS['sys_urlprefix'].'/projects/'.$row['unix_group_name'].
 			'/">'.$row['group_name'].'</a><br />';
 		}
-		$return .= '<div align="center"><a href="/top/mostactive.php?type=week">[ '.$Language->getText('general','more').' ]</a></div>';
+		$return .= '<div align="center"><a href="'.$GLOBALS['sys_urlprefix'].'/top/mostactive.php?type=week">[ '.$Language->getText('general','more').' ]</a></div>';
 	}
 	return $return;
 }

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/include/html.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/include/html.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/include/html.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -28,7 +28,7 @@
 	if (!strcasecmp($username,'Nobody') || !strcasecmp($username,'None')) {
 		return $username;
 	} else {
-		return '<a href="/users/'.$username.'">'.$username.'</a>' ;
+		return '<a href="'.$GLOBALS['sys_urlprefix'].'/users/'.$username.'">'.$username.'</a>' ;
 	}
 }
 

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/include/languages/Base.tab
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/include/languages/Base.tab	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/include/languages/Base.tab	2011-02-24 17:31:31 UTC (rev 11977)
@@ -682,6 +682,13 @@
 docman_new	enableftpfirst	You must enable ftp uploads first
 docman_new	name	Name your file :
 docman_new	edit	Edit
+docman_search	search_title	Search in documents
+docman_search	search_submit_prompt	Search
+docman_search	search_all_words	With all the words
+docman_search	search_exact	With exact phrase
+docman_search	search_one_word	With at least one of words
+docman_search	error_query	Database query error
+docman_search	no_search_result	Your search did not match any documents
 error	not_found	PAGE NOT FOUND
 error	title	Requested Page not Found (Error 404)
 exit	choose_group_body	No group was chosen or you can't access it
@@ -1131,8 +1138,9 @@
 news_admin	noqueued	No Queued Items Found
 news_admin	norejected	No rejected items found for this week
 news_admin	permdenied	You have to be an admin on the project you are editing or a member of the $1 News team.
+news_admin	private_project	Private project
 news_admin	project	Project
-news_admin	queued	These News Items Were Submitted For Project
+news_admin	queued	List of News Submitted for Project
 news_admin	reject	Reject
 news_admin	reject_selected	Reject Selected
 news_admin	rejected_newsbytes	These items were rejected this past week (total: $1)
@@ -1140,6 +1148,10 @@
 news_admin	status	Status
 news_admin	status_delete	Delete
 news_admin	status_displayed	Displayed
+news_admin	status_pending	Pending
+news_admin	status_deleted	Deleted
+news_admin	status_rejected	Rejected
+news_admin	status_unknow	Unknow
 news_admin	subject	Subject
 news_admin	submitted_by	Submitted by
 news_admin	submitted_for_group	Submitted for group
@@ -1799,6 +1811,9 @@
 rbac_vals	forumadmin2	Admin
 rbac_vals	trackeradmin0	None
 rbac_vals	trackeradmin2	Admin
+rbac_vals	webcal2	See
+rbac_vals	webcal1	Modify
+rbac_vals	webcal0	No access
 rbac_edit	title1	Section
 rbac_edit	title2	Subsection
 rbac_edit	title3	Setting
@@ -1815,6 +1830,7 @@
 rbac_edit	update	Update
 rbac_edit	remove	Remove
 rbac_edit	role	Role
+rbac_edit	webcal	Webcalendar
 reporting	add	Add
 reporting	administrative	Administrative
 reporting	area	Areas

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/include/languages/French.tab
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/include/languages/French.tab	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/include/languages/French.tab	2011-02-24 17:31:31 UTC (rev 11977)
@@ -989,13 +989,14 @@
 news_admin	newsbyte_deleted	Annonce supprimée.
 news_admin	newsbyte_rejected	Annonce rejetée.
 news_admin	newsbyte_updated	Annonce mise à jour.
-news_admin	newsbytes_to_approve	Ces annonces ont besoin d'être approuvées (total : $1)
+news_admin	newsbytes_to_approve	Ces annonces ont besoin d'être approuvées pour la page d'accueil (total : $1)
 news_admin	noapproved	Aucune annonce approuvée cette semaine
 news_admin	noqueued	Pas d'annonce en attente
 news_admin	norejected	Aucune annonce rejetée cette semaine
 news_admin	permdenied	Vous devez être administrateur du projet que vous éditez ou être membre de l'équipe des annonces de $1.
+news_admin	private_project	Projet privé
 news_admin	project	Projet
-news_admin	queued	Annonces en attente de validation pour le projet
+news_admin	queued	Annonces postées pour le projet
 news_admin	reject	Rejeter
 news_admin	reject_selected	Rejeter les annonces sélectionnées
 news_admin	rejected_newsbytes	Ces annonces ont été rejetées la semaine passée (total : $1)
@@ -1003,6 +1004,10 @@
 news_admin	status	Etat
 news_admin	status_delete	Supprimée
 news_admin	status_displayed	Affichée
+news_admin	status_pending	En attente
+news_admin	status_deleted	Effacée
+news_admin	status_rejected	Rejetée
+news_admin	status_unknow	Etat inconnu
 news_admin	subject	Sujet
 news_admin	submitted_by	Proposée par
 news_admin	submitted_for_group	Proposée pour le projet
@@ -1635,6 +1640,9 @@
 rbac_vals	trackeranon1	Autoriser les messages anonymes
 rbac_vals	trackerpublic0	Privé
 rbac_vals	trackerpublic1	Public
+rbac_vals	webcal2	Voir
+rbac_vals	webcal1	Modifier
+rbac_vals	webcal0	Aucun accès
 register	apply_for_registration	Pour demander l'enregistrement d'un projet, vous devez remplir un certain nombre d'information de base à son propos. Veuillez lire attentivement les descriptions ci-dessous et fournir des données précises et complètes. Tous les champs sont obligatoires.
 register	choose_scm	<h3>6. Gestion de sources</h3><p>Vous pouvez choisir parmi différents gestionnaires de sources pour votre projet mais seulement un seul. Merci de choisir avec soin le gestionnaire de sources que vous souhaitez utiliser.</p> <p><strong>Vous ne pourrez plus le changer une fois le projet enregistré !</strong></p>
 register	comprehensive_description	Décrivez de manière plus complète votre projet

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/include/logger.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/include/logger.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/include/logger.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -27,7 +27,13 @@
 	//	for foundry and project summary pages
 	//
 	//
-	$expl_pathinfo = explode('/',getStringFromServer('REQUEST_URI'));
+	if ( $GLOBALS['sys_urlprefix'] != '' ) {
+		$pathwithoutprefix=ereg_replace($GLOBALS['sys_urlprefix'],'',getStringFromServer('REQUEST_URI'));
+	} else {
+		$pathwithoutprefix=getStringFromServer('REQUEST_URI');
+	}
+	//$expl_pathinfo = explode('/',getStringFromServer('REQUEST_URI'));
+	$expl_pathinfo = explode('/',$pathwithoutprefix);
 	if (($expl_pathinfo[1]=='foundry') || ($expl_pathinfo[1]=='projects')) {
 		$res_grp=db_query("
 			SELECT *

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/include/pre.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/include/pre.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/include/pre.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -170,7 +170,9 @@
 	//and see if we support that language
 	//if we don't support it, just use default language
 	if (getStringFromServer('HTTP_ACCEPT_LANGUAGE')) {
-		$classname = getLanguageClassName(getStringFromServer('HTTP_ACCEPT_LANGUAGE'));
+		$classname=getLanguageClassName(getStringFromServer('HTTP_ACCEPT_LANGUAGE'));
+	} else {
+		$classname='';
 	}
 	if (!$classname) {
 		$classname=$sys_lang;

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/include/project_home.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/include/project_home.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/include/project_home.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -79,9 +79,9 @@
 			if ($num>0) {
 				print '<br /><br />'.$Language->getText('project_home','help_wanted').'  ';
 					if ($num==1) {
-						print '<a href="/people/?group_id='.$group_id.'">'. db_result($jobs_res,0,"name").'(s)</a>';
+						print '<a href="'.$GLOBALS['sys_urlprefix'].'/people/?group_id='.$group_id.'">'. db_result($jobs_res,0,"name").'(s)</a>';
 					} else {
-						print $Language->getText('project_home','help_wanted_multiple', '<a href="/people/?group_id='.$group_id.'">').' </a>';
+						print $Language->getText('project_home','help_wanted_multiple', '<a href="'.$GLOBALS['sys_urlprefix'].'/people/?group_id='.$group_id.'">').' </a>';
 					}
 			}
 	}
@@ -108,7 +108,7 @@
 				$started_developers=true;
 				echo '<span class="develtitle">'. $Language->getText('group','project_developers').':</span><br />';
 			}
-			echo '<a href="/users/'.$row_admin['user_name'].'/">'.$row_admin['realname'].'</a><br />';
+			echo '<a href="'.$GLOBALS['sys_urlprefix'].'/users/'.$row_admin['user_name'].'/">'.$row_admin['realname'].'</a><br />';
 		}
 	?>
 	<hr width="100%" size="1" />
@@ -118,8 +118,8 @@
 
 ?>
 
-<p><a href="/project/memberlist.php?group_id=<?php print $group_id; ?>">[<?php echo $Language->getText('project_home','view_members') ?>]</a></p>
-<p><a href="/project/request.php?group_id=<?php print $group_id; ?>">[<?php echo $Language->getText('project_joinrequest','request_link'); ?>]</a></p>
+<p><a href="<?php echo $GLOBALS['sys_urlprefix']; ?>/project/memberlist.php?group_id=<?php print $group_id; ?>">[<?php echo $Language->getText('project_home','view_members') ?>]</a></p>
+<p><a href="<?php echo $GLOBALS['sys_urlprefix']; ?>/project/request.php?group_id=<?php print $group_id; ?>">[<?php echo $Language->getText('project_joinrequest','request_link'); ?>]</a></p>
 <?php
 
 echo $HTML->boxBottom();
@@ -207,20 +207,20 @@
 					print '<td>'.db_result($res_files,$f,'release_name') .'
 					</td>
 					<td>' . $rel_date["month"] . ' ' . $rel_date["mday"] . ', ' . $rel_date["year"] . '</td>
-					<td><a href="/frs/shownotes.php?group_id=' . $group_id . '&release_id=' . db_result($res_files,$f,'release_id') . '">';
+					<td><a href="'.$GLOBALS['sys_urlprefix'].'/frs/shownotes.php?group_id=' . $group_id . '&release_id=' . db_result($res_files,$f,'release_id') . '">';
 					echo html_image('ic/manual16c.png','15','15',array('alt'=>$Language->getText('project_home','release_notes')));
-					echo '</a> - <a href="/frs/monitor.php?filemodule_id=' .	db_result($res_files,$f,'package_id') . '&group_id='.$group_id.'&start=1">';
+					echo '</a> - <a href="'.$GLOBALS['sys_urlprefix'].'/frs/monitor.php?filemodule_id=' .	db_result($res_files,$f,'package_id') . '&group_id='.$group_id.'&start=1">';
 					echo html_image('ic/mail16d.png','15','15',array('alt'=>$Language->getText('project_home','monitor_package')));
 					echo '</a>
 					</td>
-					<td><a href="/frs/?group_id=' . $group_id . '&release_id=' . db_result($res_files,$f,'release_id') . '">'.$Language->getText('frs','file_download').'</a></td></tr>';
+					<td><a href="'.$GLOBALS['sys_urlprefix'].'/frs/?group_id=' . $group_id . '&release_id=' . db_result($res_files,$f,'release_id') . '">'.$Language->getText('frs','file_download').'</a></td></tr>';
 				}
 			}
 
 		}
 		?></table>
 	<div align="center">
-	<a href="/frs/?group_id=<?php print $group_id; ?>">[<?php echo $Language->getText('project_home','view_project_files')?>]</a>
+	<a href="<?php echo $GLOBALS['sys_urlprefix']; ?>/frs/?group_id=<?php print $group_id; ?>">[<?php echo $Language->getText('project_home','view_project_files')?>]</a>
 	</div>
 <?php
 	echo $HTML->boxBottom();
@@ -239,7 +239,7 @@
 
 // ################# Homepage Link
 
-print "<a href=\"http://" . $project->getHomePage() . "\">";
+print '<a href="http://' . $project->getHomePage() . '">';
 print html_image('ic/home16b.png','20','20',array('alt'=>$Language->getText('group','short_homepage')));
 print ' '.$Language->getText('group','long_homepage').'</a>';
 
@@ -247,7 +247,7 @@
 
 // CB hide tracker if desired
 if ($project->usesTracker()) {
-	print '<hr size="1" /><a href="/tracker/?group_id='.$group_id.'">';
+	print '<hr size="1" /><a href="'.$GLOBALS['sys_urlprefix'].'/tracker/?group_id='.$group_id.'">';
 	print html_image('ic/tracker20g.png','20','20',array('alt'=>$Language->getText('group','short_tracker')));
 	print $Language->getText('group', 'long_tracker').'</a>';
 
@@ -265,7 +265,7 @@
 	} else {
 		for ($j = 0; $j < $rows; $j++) {
 			echo '<p />
-		 - <a href="/tracker/?atid='. db_result($result, $j, 'group_artifact_id') .
+		 - <a href="'.$GLOBALS['sys_urlprefix'].'/tracker/?atid='. db_result($result, $j, 'group_artifact_id') .
 		'&group_id='.$group_id.'&func=browse">'. db_result($result, $j, 'name') .'</a>
 		( '.$Language->getText('project_home','tracker_open',array((int) db_result($result, $j, 'open_count'), (int) db_result($result, $j, 'count'))) .' )<br />'.
 		db_result($result, $j, 'description');
@@ -276,7 +276,7 @@
 // ################## forums
 
 if ($project->usesForum()) {
-	print '<hr size="1" /><a href="/forum/?group_id='.$group_id.'">';
+	print '<hr size="1" /><a href="'.$GLOBALS['sys_urlprefix'].'/forum/?group_id='.$group_id.'">';
 	print html_image('ic/forum20g.png','20','20',array('alt'=>$Language->getText('group','short_forum')));
 	print ' '.$Language->getText('group','long_forum').'</a>';
 	$forums_count = project_get_public_forum_count($group_id);
@@ -294,7 +294,7 @@
 if ($project->usesDocman()) {
 	print '
 	<hr size="1" />
-	<a href="/docman/?group_id='.$group_id.'">';
+	<a href="'.$GLOBALS['sys_urlprefix'].'/docman/?group_id='.$group_id.'">';
 	print html_image('ic/docman16b.png','20','20',array('alt'=>$Language->getText('group','short_docman')));
 	print ' '.$Language->getText('group','long_docman').'</a>';
 }
@@ -302,7 +302,7 @@
 // ##################### Mailing lists
 
 if ($project->usesMail()) {
-	print '<hr size="1" /><a href="/mail/?group_id='.$group_id.'">';
+	print '<hr size="1" /><a href="'.$GLOBALS['sys_urlprefix'].'/mail/?group_id='.$group_id.'">';
 	print html_image('ic/mail16b.png','20','20',array('alt'=>$Language->getText('group','short_mail')));
 	print ' '.$Language->getText('group','long_mail').'</a>';
 	print " ( <strong>". project_get_mail_list_count($group_id) ."</strong> ".$Language->getText('project_home','public_mailing_lists').")";
@@ -311,7 +311,7 @@
 // ##################### Task Manager
 
 if ($project->usesPm()) {
-	print '<hr size="1" /><a href="/pm/?group_id='.$group_id.'">';
+	print '<hr size="1" /><a href="'.$GLOBALS['sys_urlprefix'].'/pm/?group_id='.$group_id.'">';
 	print html_image('ic/taskman20g.png','20','20',array('alt'=>$Language->getText('group','short_pm')));
 	print ' '.$Language->getText('group','long_pm').'</a>';
 	$sql="SELECT * FROM project_group_list WHERE group_id='$group_id' AND is_public=1";
@@ -322,7 +322,7 @@
 	} else {
 		for ($j = 0; $j < $rows; $j++) {
 			echo '
-			<br />   - <a href="/pm/task.php?group_project_id='.db_result($result, $j, 'group_project_id').
+			<br />   - <a href="'.$GLOBALS['sys_urlprefix'].'/pm/task.php?group_project_id='.db_result($result, $j, 'group_project_id').
 			'&group_id='.$group_id.'&func=browse">'.db_result($result, $j, 'project_name').'</a>';
 		}
 
@@ -332,7 +332,7 @@
 // ######################### Surveys
 
 if ($project->usesSurvey()) {
-	print '<hr size="1" /><a href="/survey/?group_id='.$group_id.'">';
+	print '<hr size="1" /><a href="'.$GLOBALS['sys_urlprefix'].'/survey/?group_id='.$group_id.'">';
 	print html_image('ic/survey16b.png','20','20',array('alt'=>$Language->getText('group','short_survey')));
 	print " ".$Language->getText('group','long_survey')."</a>";
 	echo ' ( <strong>'. project_get_survey_count($group_id) .'</strong> '.$Language->getText('project_home','surveys').'  )';
@@ -341,7 +341,7 @@
 // ######################### SCM
 
 if ($project->usesSCM()) {
-	print '<hr size="1" /><a href="/scm/?group_id='.$group_id.'">';
+	print '<hr size="1" /><a href="'.$GLOBALS['sys_urlprefix'].'/scm/?group_id='.$group_id.'">';
 	print html_image('ic/cvs16b.png','20','20',array('alt'=>$Language->getText('group','short_scm')));
 	print " ".$Language->getText('group','long_scm')."</a>";
 
@@ -372,12 +372,14 @@
 if ($project->usesFTP()) {
 	if ($project->isActive()) {
 		print '<hr size="1" />';
-		print "<a href=\"ftp://" . $project->getUnixName() . "." . $GLOBALS['sys_default_domain'] . "/pub/". $project->getUnixName() ."/\">";
+		print '<a href="ftp://' . $project->getUnixName() . '.' . $GLOBALS['sys_default_domain'] . '/pub/'. $project->getUnixName() .'/">';
 		print html_image('ic/ftp16b.png','20','20',array('alt'=>$Language->getText('group','long_ftp')));
 		print $Language->getText('group','long_ftp')."</a>";
 	}
 }
 
+//webcalendar
+plugin_hook("cal_link_group",$group_id);
 echo $HTML->boxBottom();
 
 if ($project->usesNews()) {
@@ -398,6 +400,12 @@
 	echo $HTML->boxBottom();
 }
 
+//
+//	Linked projects (hierarchy)
+//
+
+plugin_hook('project_home_link',$group_id);
+
 ?>
 		</td>
 	</tr>

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/include/project_summary.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/include/project_summary.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/include/project_summary.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -117,7 +117,7 @@
 
 	// ################## ArtifactTypes
 
-	$return .= '<a href="/tracker/?group_id='.$group_id.'">';
+	$return .= '<a href="'.$GLOBALS['sys_urlprefix'].'/tracker/?group_id='.$group_id.'">';
 	$return .= html_image("ic/tracker20g.png",'20','20',array('alt'=>'Tracker'));
 	$return .= ' Tracker</a>';
 
@@ -136,7 +136,7 @@
 		} else {
 			for ($j = 0; $j < $rows; $j++) {
 				$return .= '<p>
-				 - <a href="/tracker/?atid='. db_result($result, $j, 'group_artifact_id') .
+				 - <a href="'.$GLOBALS['sys_urlprefix'].'/tracker/?atid='. db_result($result, $j, 'group_artifact_id') .
 				'&group_id='.$group_id.'&func=browse">'. db_result($result, $j, 'name') .'</a>
 				( <strong>'. db_result($result, $j, 'open_count') .' '.$Language->getText('general','open').'  / '. db_result($result, $j, 'count') . $Language->getText('general','total').' </strong> )<br />'.
 				db_result($result, $j, 'description') . '</p>';
@@ -150,7 +150,7 @@
 		$return .= '
 
 			<hr size="1" />';
-		$return .= '<a href="/forum/?group_id='.$group_id.'">';
+		$return .= '<a href="'.$GLOBALS['sys_urlprefix'].'/forum/?group_id='.$group_id.'">';
 		$return .= html_image("ic/forum20g.png","20","20",array("border"=>"0","ALT"=>"Forums"));
 		$return .= ' Forums</a>';
 
@@ -166,7 +166,7 @@
 		$return .= '
 
 			<hr size="1" />';
-		$return .= '<a href="/docman/?group_id='.$group_id.'">';
+		$return .= '<a href="'.$GLOBALS['sys_urlprefix'].'/docman/?group_id='.$group_id.'">';
 		$return .= html_image("ic/docman16b.png","20","20",array("border"=>"0","alt"=>"Docs"));
 		$return .= ' Doc Manager</a>';
 	}
@@ -177,7 +177,7 @@
 		$return .= '
 
 			<hr size="1" />';
-		$return .= '<a href="/mail/?group_id='.$group_id.'">';
+		$return .= '<a href="'.$GLOBALS['sys_urlprefix'].'/mail/?group_id='.$group_id.'">';
 		$return .= html_image("ic/mail16b.png","20","20",array("border"=>"0","alt"=>"Mail Lists"));
 		$return .= ' Mailing Lists</a>';
 
@@ -192,7 +192,7 @@
 		$return .= '
 
 			<hr size="1" />';
-		$return .= '<a href="/pm/?group_id='.$group_id.'">';
+		$return .= '<a href="'.$GLOBALS['sys_urlprefix'].'/pm/?group_id='.$group_id.'">';
 		$return .= html_image("ic/taskman20g.png","20","20",array("border"=>"0","ALT"=>"Tasks"));
 		$return .= ' Task Manager</a>';
 
@@ -206,7 +206,7 @@
 			} else {
 				for ($j = 0; $j < $rows; $j++) {
 					$return .= '
-					<br />   - <a href="/pm/task.php?group_project_id='.db_result($result, $j, 'group_project_id').
+					<br />   - <a href="'.$GLOBALS['sys_urlprefix'].'/pm/task.php?group_project_id='.db_result($result, $j, 'group_project_id').
 					'&group_id='.$group_id.'&func=browse">'.db_result($result, $j, 'project_name').'</a>';
 				}
 				db_free_result($result);
@@ -220,7 +220,7 @@
 		$return .= '
 
 			<hr size="1" />';
-		$return .= '<a href="/survey/?group_id='.$group_id.'">';
+		$return .= '<a href="'.$GLOBALS['sys_urlprefix'].'/survey/?group_id='.$group_id.'">';
 		$return .= html_image("ic/survey16b.png","20","20",array("border"=>"0","alt"=>"Surveys"));
 		$return .= " Surveys</a>";
 		if ($mode != 'compact') {
@@ -234,7 +234,7 @@
 		$return .= '
 
 			<hr size="1" />';
-		$return .= '<a href="/scm/?group_id='.$group_id.'">';
+		$return .= '<a href="'.$GLOBALS['sys_urlprefix'].'/scm/?group_id='.$group_id.'">';
 		$return .= html_image("ic/cvs16b.png","20","20",array("border"=>"0","ALT"=>"SCM"));
 		$return .= " SCM Tree</a>";
 
@@ -251,7 +251,7 @@
 		$return .= '
 
 			<hr size="1" />';
-		$return .= '<a href="/project/showfiles.php?group_id='.$group_id.'">';
+		$return .= '<a href="'.$GLOBALS['sys_urlprefix'].'/project/showfiles.php?group_id='.$group_id.'">';
 		$return .= html_image("ic/ftp16b.png","20","20",array("border"=>"0","alt"=>"FTP"));
 		$return .= " Released Files</a>";
 	}

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/include/trove.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/include/trove.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/include/trove.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -240,7 +240,7 @@
 	$return = '';
 	if (db_numrows($res_trovecat) < 1) {
 		$return .= $Language->getText('trove','not_categorized')
-			.' <a href="/softwaremap/trove_list.php">'
+			.' <a href="'.$GLOBALS['sys_urlprefix'].'/softwaremap/trove_list.php">'
 			. $Language->getText('trove','title')
 			.'</a>.<p />';
 	} else {
@@ -277,7 +277,7 @@
 		}
 
 		if ($a_cats) {
-			$return .= '<a href="/softwaremap/trove_list.php?form_cat='
+			$return .= '<a href="'.$GLOBALS['sys_urlprefix'].'/softwaremap/trove_list.php?form_cat='
 				 .$folders_ids[$folders_len-1].$discrim_url.'">';
 		}
 		$return .= ($folders[$folders_len-1]);
@@ -289,7 +289,7 @@
 			if ($filterisalreadyapplied) {
 				$return .= ' <strong>(Now Filtering)</strong> ';
 			} else {
-				$return .= ' <a href="/softwaremap/trove_list.php?form_cat='
+				$return .= ' <a href="'.$GLOBALS['sys_urlprefix'].'/softwaremap/trove_list.php?form_cat='
 					 .$form_cat;
 				if ($discrim_url) {
 					$return .= $discrim_url.','.$folders_ids[$folders_len-1];

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/include/unicode.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/include/unicode.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/include/unicode.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,23 @@
+<?php
+/**
+ * GForge Project 
+ *
+ * 
+ * fabio bertagnin fbertagnin at mail.transiciel.com
+ *
+ * @version   $Id: 18_special_chars_in_graphics.dpatch,v 1.1 2006/01/13 09:49:16 fabio Exp $
+ */
+
+if (!defined('UNICODE.PHP'))
+{
+	define ('UNICODE.PHP', '1');
+	function convert_unicode ($text)
+	{
+		$rep = $text;
+		//$rep = mb_convert_encoding ($rep, "ascii", "UTF-8");
+		$rep = utf8_decode($rep);
+		return $rep;
+	}
+	
+}
+?>
\ No newline at end of file

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/include/user_home.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/include/user_home.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/include/user_home.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -28,12 +28,12 @@
   <td><strong>
 <?php
 	if (session_loggedin() && user_ismember(1)) {
-		echo '<a href="/admin/useredit.php?user_id='.$user_id.'">'.$user_id.'</a>';
+		echo '<a href="'.$GLOBALS['sys_urlprefix'].'/admin/useredit.php?user_id='.$user_id.'">'.$user_id.'</a>';
 	} else {
 		echo $user_id;
 	}
 ?>
-</strong> <?php if($GLOBALS['sys_use_people']) { ?>( <a href="/people/viewprofile.php?user_id=<?php echo $user_id; ?>"><strong><?php echo $Language->getText('user_home','skills_profile') ?></strong></a> )<?php } ?></td>
+</strong> <?php if($GLOBALS['sys_use_people']) { ?>( <a href="<?php echo $GLOBALS['sys_urlprefix']; ?>/people/viewprofile.php?user_id=<?php echo $user_id; ?>"><strong><?php echo $Language->getText('user_home','skills_profile') ?></strong></a> )<?php } ?></td>
 </tr>
 
 <tr valign="top">
@@ -50,7 +50,7 @@
 <tr valign="top">
 	<td><?php echo $Language->getText('user_home','email') ?>: </td>
 	<td>
-	<strong><a href="/sendmessage.php?touser=<?php print $user_id; 
+	<strong><a href="<?php echo $GLOBALS['sys_urlprefix']; ?>/sendmessage.php?touser=<?php print $user_id; 
 		?>"><?php print str_replace('@',' @nospam@ ',$user->getEmail()); ?></a></strong>
 	</td>
 </tr>
@@ -108,9 +108,9 @@
 		"WHERE user_id='". $user_id ."' AND is_public=1");
 	echo $Language->getText('user_home','diary_notes_entries').' '.db_result($res,0,0).'
 	<p/>
-	<a href="/developer/diary.php?diary_user='. $user_id .'">'.$Language->getText('user_home','diary_notes_view').'</a><?p>
+	<a href="'.$GLOBALS['sys_urlprefix'].'/developer/diary.php?diary_user='. $user_id .'">'.$Language->getText('user_home','diary_notes_view').'</a><?p>
 	<p/>
-	<a href="/developer/monitor.php?diary_user='. $user_id .'">'. html_image("ic/check.png",'15','13',array(),0) .$Language->getText('user_home','diary_notes_monitor').'</a></p>';
+	<a href="'.$GLOBALS['sys_urlprefix'].'/developer/monitor.php?diary_user='. $user_id .'">'. html_image("ic/check.png",'15','13',array(),0) .$Language->getText('user_home','diary_notes_monitor').'</a></p>';
 	$hookparams['user_id'] = $user_id;
 	plugin_hook("user_personal_links",$hookparams);
 	
@@ -138,9 +138,9 @@
 } else { // endif no groups
 	print "<p/>".$Language->getText('user_home','member_of')."<br /> ";
 	while ($row_cat = db_fetch_array($res_cat)) {
-		print ("<br />" . "<a href=\"/projects/".$row_cat['unix_group_name']."/\">".$row_cat['group_name']."</a>\n");
+		print ('<br />' . '<a href="'.$GLOBALS['sys_urlprefix'].'/projects/'.$row_cat['unix_group_name'].'/">'.$row_cat['group_name'].'</a>\n');
 	}
-	print "</ul><p/>";
+	print '</ul><p/>';
 } // end if groups
 
 echo $HTML->boxBottom(); ?>

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/include/vote_function.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/include/vote_function.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/include/vote_function.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -268,7 +268,7 @@
 
 	<input type="submit" name="submit" value="<?php echo $Language->getText('general','submit') ?>" />
 	<br />
-	<a href="/survey/privacy.php"><?php echo $Language->getText('survey','survey_privacy') ?></a>
+	<a href="<?php echo $GLOBALS['sys_urlprefix']; ?>/survey/privacy.php"><?php echo $Language->getText('survey','survey_privacy') ?></a>
 	</td></tr>
 	</form>
 	</table>

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/index.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/index.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/index.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -25,11 +25,11 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
-
+require_once('env.inc.php');
 require_once('pre.php');    // Initial db and session library, opens session
 require_once('www/news/news_utils.php');
 require_once('common/forum/Forum.class');
-require_once('features_boxes.php');
+require_once('www/include/features_boxes.php');
 
 $HTML->header(array('title'=>$Language->getText('index','welcome')));
 

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/index_std.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/index_std.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/index_std.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -10,7 +10,7 @@
 settings of the project.
 </p>
 <p>
-Additional Tools:
+Additional Tools:show_features_boshow_features_boxesshow_features_boxesxes
 </p>
 <ul>
 	<li>Manage File Releases</li>

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/mail/admin/deletelist.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/mail/admin/deletelist.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/mail/admin/deletelist.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -9,6 +9,7 @@
  * @version $Id$
  */
 
+require_once('../../env.inc.php');
 require_once('pre.php');
 require_once('../mail_utils.php');
 

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/mail/admin/index.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/mail/admin/index.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/mail/admin/index.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -9,6 +9,7 @@
  * @version $Id$
  */
 
+require_once('../../env.inc.php');
 require_once('pre.php');
 require_once('../mail_utils.php');
 

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/mail/index.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/mail/index.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/mail/index.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -8,6 +8,7 @@
  * @version $Id$
  */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('../mail/mail_utils.php');
 

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/my/bookmark_add.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/my/bookmark_add.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/my/bookmark_add.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -24,6 +24,7 @@
  */
 
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('bookmarks.php');
 

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/my/bookmark_delete.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/my/bookmark_delete.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/my/bookmark_delete.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -24,6 +24,7 @@
  */
 
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('bookmarks.php');
 

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/my/bookmark_edit.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/my/bookmark_edit.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/my/bookmark_edit.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -24,6 +24,7 @@
  */
 
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('bookmarks.php');
 

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/my/diary.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/my/diary.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/my/diary.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -24,6 +24,7 @@
  */
 
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('vote_function.php');
 

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/my/index.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/my/index.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/my/index.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -25,6 +25,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('vote_function.php');
 require_once('common/tracker/ArtifactsForUser.class');
@@ -60,8 +61,8 @@
 	echo site_user_header(array('title'=>$Language->getText('my','title',user_getname())));
 	$tabcnt=0;	
 	?>
-<script type="text/javascript" src="/tabber/tabber.js"></script>
-<div id="tabber" class="tabber">
+<script type="text/javascript" src="<?php echo $GLOBALS['sys_urlprefix']; ?>/tabber/tabber.js"></script>
+<div id="tabber" class="tabber" <? plugin_hook('call_user_js');?>>
 <div class="tabbertab" 
 title="<?php echo $Language->getText('my','assignedartifacts'); ?>">
 	<?php
@@ -82,7 +83,7 @@
 		foreach($assignedArtifacts as $art) {
 			if ($art->ArtifactType->getID() != $last_group) {
 				echo '
-				<tr><td colspan="3" class="tablecontent"><a href="/tracker/?group_id='.
+				<tr><td colspan="3" class="tablecontent"><a href="'.$GLOBALS['sys_urlprefix'].'/tracker/?group_id='.
 				$art->ArtifactType->Group->getID().'&atid='.
 				$art->ArtifactType->getID().'">'.
 				$art->ArtifactType->Group->getPublicName().' - '.
@@ -93,7 +94,7 @@
 			<tr '. $HTML->boxGetAltRowStyle($i++) .'>
 			<td width="10%">'.$art->getID().'</td>
 			<td width="10%" class="priority'.$art->getPriority().'">'.$art->getPriority().'</td>
-			<td><a href="/tracker/?func=detail&aid='.
+			<td><a href="'.$GLOBALS['sys_urlprefix'].'/tracker/?func=detail&aid='.
 			$art->getID().
 			'&group_id='.$art->ArtifactType->Group->getID().
 			'&atid='.$art->ArtifactType->getID().'">' . $art->getSummary() . '</a>';
@@ -140,7 +141,7 @@
 			$group =& $projectGroup->getGroup();
 			if ($projectGroup->getID() != $last_group) {
 				echo '
-				<tr><td colspan="3" class="tablecontent"><a href="/pm/task.php?group_id='.
+				<tr><td colspan="3" class="tablecontent"><a href="'.$GLOBALS['sys_urlprefix'].'/pm/task.php?group_id='.
 				$group->getID().
 				'&group_project_id='.
 				$projectGroup->getID().'">'.
@@ -151,7 +152,7 @@
 			<tr '. $HTML->boxGetAltRowStyle($i++) .'>
 			<td width="10%">'.$task->getID().'</td>
 			<td width="10%" class="priority'.$task->getPriority().'">'.$task->getPriority().'</td>
-			<td><a href="/pm/task.php?func=detailtask&project_task_id='.
+			<td><a href="'.$GLOBALS['sys_urlprefix'].'/pm/task.php?func=detailtask&project_task_id='.
 			$task->getID().
 			'&group_id='.$group->getID().
 			'&group_project_id='.$projectGroup->getID().'">'.$style_begin.$task->getSummary().$style_end.'</a>';
@@ -183,7 +184,7 @@
 		foreach ($submittedArtifacts as $art) {
 			if ($art->ArtifactType->getID() != $last_group) {
 				echo '
-				<tr><td colspan="3" class="tablecontent"><a href="/tracker/?group_id='.
+				<tr><td colspan="3" class="tablecontent"><a href="'.$GLOBALS['sys_urlprefix'].'/tracker/?group_id='.
 				$art->ArtifactType->Group->getID().'&atid='.
 				$art->ArtifactType->getID().'">'.
 				$art->ArtifactType->Group->getPublicName().' - '.
@@ -193,7 +194,7 @@
 			<tr '. $HTML->boxGetAltRowStyle($i++) .'>
 			<td width="10%">'.$art->getID().'</td>
 			<td width="10%" class="priority'.$art->getPriority().'">'.$art->getPriority().'</td>
-			<td><a href="/tracker/?func=detail&aid='.
+			<td><a href="'.$GLOBALS['sys_urlprefix'].'/tracker/?func=detail&aid='.
       $art->getID().
       '&group_id='.$art->ArtifactType->Group->getID().
       '&atid='.$art->ArtifactType->getID().'">' . $art->getSummary() .'</a>';
@@ -224,20 +225,20 @@
 	if (count($forums) < 1) {
 		echo '<tr><td colspan="2" bgcolor="#FFFFFF"><center><strong>'.$Language->getText('my', 'no_monitored_forums').'</strong></center></td></tr>';
 	} else {
-		echo '<tr><td colspan="2" bgcolor="#FFFFFF"><center><strong><a href="/forum/myforums.php">' . $Language->getText('forum_myforums','myforums') . '</a></strong></center></td></tr>';
+		echo '<tr><td colspan="2" bgcolor="#FFFFFF"><center><strong><a href="'.$GLOBALS['sys_urlprefix'].'/forum/myforums.php">' . $Language->getText('forum_myforums','myforums') . '</a></strong></center></td></tr>';
 		foreach ($forums as $f) {
 			$group = $f->getGroup();
 			if ($group->getID() != $last_group) {
 				echo '
-				<tr '. $HTML->boxGetAltRowStyle($i) .'><td colspan="2"><a href="/forum/?group_id='.
+				<tr '. $HTML->boxGetAltRowStyle($i) .'><td colspan="2"><a href="'.$GLOBALS['sys_urlprefix'].'/forum/?group_id='.
 				$group->getID().'">'.
 				$group->getPublicName().'</a></td></tr>';
 			}
 
 			echo '
-			<tr '. $HTML->boxGetAltRowStyle($i) .'><td align="center"><a href="/forum/monitor.php?forum_id='.$f->getID().
+			<tr '. $HTML->boxGetAltRowStyle($i) .'><td align="center"><a href="'.$GLOBALS['sys_urlprefix'].'/forum/monitor.php?forum_id='.$f->getID().
 			'&stop=1&group_id='.$group->getID().'"><img src="'. $HTML->imgroot . '/ic/trash.png" height="16" width="16" '.
-			'border="0" alt="" /></a></td><td width="99%"><a href="/forum/forum.php?forum_id='.
+			'border="0" alt="" /></a></td><td width="99%"><a href="'.$GLOBALS['sys_urlprefix'].'/forum/forum.php?forum_id='.
 			$f->getID().'">'.
 			$f->getName().'</a></td></tr>';
 
@@ -269,15 +270,15 @@
 		for ($i=0; $i<$rows; $i++) {
 			if (db_result($result,$i,'group_id') != $last_group) {
 				echo '
-				<tr '. $HTML->boxGetAltRowStyle($i) .'><td colspan="2"><a href="/project/?group_id='.
+				<tr '. $HTML->boxGetAltRowStyle($i) .'><td colspan="2"><a href="'.$GLOBALS['sys_urlprefix'].'/project/?group_id='.
 				db_result($result,$i,'group_id').'">'.
 				db_result($result,$i,'group_name').'</a></td></tr>';
 			}
 			echo '
-			<tr '. $HTML->boxGetAltRowStyle($i) .'><td align="center"><a href="/frs/monitor.php?filemodule_id='.
+			<tr '. $HTML->boxGetAltRowStyle($i) .'><td align="center"><a href="'.$GLOBALS['sys_urlprefix'].'/frs/monitor.php?filemodule_id='.
 			db_result($result,$i,'filemodule_id').
 			'&group_id='.db_result($result,$i,'group_id'). '&stop=1"><img src="'. $HTML->imgroot.'/ic/trash.png" height="16" width="16" '.
-			'border="0" alt=""/></a></td><td width="99%"><a href="/frs/?group_id='.
+			'border="0" alt=""/></a></td><td width="99%"><a href="'.$GLOBALS['sys_urlprefix'].'/frs/?group_id='.
 			db_result($result,$i,'group_id').'">'.
 			db_result($result,$i,'name').'</a></td></tr>';
 
@@ -287,6 +288,7 @@
 	echo $HTML->listTableBottom();
 ?>
 </div>
+
 <div class="tabbertab" title="<?php echo $Language->getText('mytab','project'); ?>" >
 <?php
 	/*
@@ -305,11 +307,11 @@
 		for ($i=0; $i<$rows; $i++) {
 			echo '</td></tr>
 			<tr '. $HTML->boxGetAltRowStyle($i) .'><td align="center">
-			<a href="/my/bookmark_delete.php?bookmark_id='. db_result($result,$i,'bookmark_id') .'">
+			<a href="'.$GLOBALS['sys_urlprefix'].'/my/bookmark_delete.php?bookmark_id='. db_result($result,$i,'bookmark_id') .'">
 			<img src="'.$HTML->imgroot.'/ic/trash.png" height="16" width="16" border="0" alt="" /></a></td>
 			<td><strong><a href="'. db_result($result,$i,'bookmark_url') .'">'.
 			db_result($result,$i,'bookmark_title') .'</a></strong>  
-			<a href="/my/bookmark_edit.php?bookmark_id='. db_result($result,$i,'bookmark_id') .'">['.$Language->getText('general','edit').']</a>';
+			<a href="'.$GLOBALS['sys_urlprefix'].'/my/bookmark_edit.php?bookmark_id='. db_result($result,$i,'bookmark_id') .'">['.$Language->getText('general','edit').']</a>';
 		}
 	}
 
@@ -352,12 +354,16 @@
 			<tr '. $HTML->boxGetAltRowStyle($i) .'><td align="center">
 			<a href="rmproject.php?group_id='. db_result($result,$i,'group_id') .'">
 			<img src="'.$HTML->imgroot.'ic/'.$img.'" alt="Delete" height="16" width="16" border="0" /></a></td>
-			<td><a href="/projects/'. db_result($result,$i,'unix_group_name') .'/">'. htmlspecialchars(db_result($result,$i,'group_name')) .'</a></td></tr>';
+			<td><a href="'.$GLOBALS['sys_urlprefix'].'/projects/'. db_result($result,$i,'unix_group_name') .'/">'. htmlspecialchars(db_result($result,$i,'group_name')) .'</a></td></tr>';
 		}
 	}
 	echo $HTML->listTableBottom();
 ?>
 </div>
+<?php
+//link to webcal
+plugin_hook('call_user_cal') ;
+?>
 </div>
 <?php
 	echo site_user_footer(array());

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/my/rmproject.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/my/rmproject.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/my/rmproject.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -26,6 +26,7 @@
  */
 
 
+require_once('../env.inc.php');
 require_once('pre.php');
 
 if (!session_loggedin()) {

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/new/index.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/new/index.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/new/index.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -11,6 +11,7 @@
   *
   */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('vote_function.php');
 

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/news/admin/index.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/news/admin/index.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/news/admin/index.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -25,6 +25,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../../env.inc.php');
 require_once('pre.php');
 require_once('note.php');
 require_once('news_admin_utils.php');
@@ -169,7 +170,7 @@
 				<ul>';
 			for ($i=0; $i<$rows; $i++) {
 				echo '
-				<li><a href="/news/admin/?approve=1&id='.db_result($result,$i,'id').'&group_id='.
+				<li><a href="'.$GLOBALS['sys_urlprefix'].'/news/admin/?approve=1&id='.db_result($result,$i,'id').'&group_id='.
 					db_result($result,$i,'group_id').'">'.
 					db_result($result,$i,'summary').'</a></li>';
 			}
@@ -266,7 +267,7 @@
 		<form action="'.getStringFromServer('PHP_SELF').'" method="post">
 		<input type="hidden" name="for_group" value="'.db_result($result,0,'group_id').'" />
 		<input type="hidden" name="id" value="'.db_result($result,0,'id').'" />
-		<strong>'.$Language->getText('news_admin', 'submitted_for_group').':</strong> <a href="/projects/'.strtolower(db_result($result,0,'unix_group_name')).'/">'.$group->getPublicName().'</a><br />
+		<strong>'.$Language->getText('news_admin', 'submitted_for_group').':</strong> <a href="'.$GLOBALS['sys_urlprefix'].'/projects/'.strtolower(db_result($result,0,'unix_group_name')).'/">'.$group->getPublicName().'</a><br />
 		<strong>'.$Language->getText('news_admin', 'submitted_by').':</strong> '.$user->getRealName().'<br />
 		<input type="hidden" name="approve" value="y" />
 		<input type="hidden" name="post_changes" value="y" />

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/news/admin/news_admin_utils.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/news/admin/news_admin_utils.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/news/admin/news_admin_utils.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -49,7 +49,7 @@
        		</td>
 
        		<td width="35%">
-       		<a href="/projects/'
+       		<a href="'.$GLOBALS['sys_urlprefix'].'/projects/'
        		.db_result($result,$i,'unix_group_name').'/">'
        		.db_result($result,$i,'group_name')
        		.' ('.db_result($result,$i,'unix_group_name').')'

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/news/index.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/news/index.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/news/index.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -25,6 +25,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('www/news/news_utils.php');
 require_once('common/forum/Forum.class');
@@ -70,7 +71,7 @@
 
 	for ($j = 0; $j < $rows; $j++) { 
 		echo '
-		<a href="/forum/forum.php?forum_id='.db_result($result, $j, 'forum_id').'">'.
+		<a href="'.$GLOBALS['sys_urlprefix'].'/forum/forum.php?forum_id='.db_result($result, $j, 'forum_id').'">'.
 			html_image("ic/cfolder15.png","15","13",array("border"=>"0")) . '  '.
 			stripslashes(db_result($result, $j, 'summary')).'</a> ';
 		echo '

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/news/news_utils.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/news/news_utils.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/news/news_utils.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -122,7 +122,7 @@
 				} else {
 					$summ_txt='<br />'. util_make_links( $arr[0] );
 				}
-				$proj_name='   -   <a href="/projects/'. strtolower(db_result($result,$i,'unix_group_name')) .'/">'. db_result($result,$i,'group_name') .'</a>';
+				$proj_name='   -   <a href="'.$GLOBALS['sys_urlprefix'].'/projects/'. strtolower(db_result($result,$i,'unix_group_name')) .'/">'. db_result($result,$i,'group_name') .'</a>';
 			} else {
 				$proj_name='';
 				$summ_txt='';
@@ -130,7 +130,7 @@
 
 			if (!$limit) {
 				if ($show_forum) {
-					$return .= '<li><a href="/forum/forum.php?forum_id='. db_result($result,$i,'forum_id') .'"><strong>'. db_result($result,$i,'summary') . '</strong></a>';
+					$return .= '<li><a href="'.$GLOBALS['sys_urlprefix'].'/forum/forum.php?forum_id='. db_result($result,$i,'forum_id') .'"><strong>'. db_result($result,$i,'summary') . '</strong></a>';
 				} else {
 					$return .= '<li><strong>'. db_result($result,$i,'summary') . '</strong>';
 				}
@@ -138,7 +138,7 @@
 			} else {
 				if ($show_forum) {
 					$return .= '
-					<a href="/forum/forum.php?forum_id='. db_result($result,$i,'forum_id') .'"><strong>'. db_result($result,$i,'summary') . '</strong></a>';
+					<a href="'.$GLOBALS['sys_urlprefix'].'/forum/forum.php?forum_id='. db_result($result,$i,'forum_id') .'"><strong>'. db_result($result,$i,'summary') . '</strong></a>';
 				} else {
 					$return .= '
 					<strong>'. db_result($result,$i,'summary') . '</strong>';
@@ -166,7 +166,7 @@
 				}
 
 				if ($show_forum){
-					$return .= '<div align="center">(' . $num_comments .' '. $comments_txt . ') <a href="/forum/forum.php?forum_id='. db_result($result,$i,'forum_id') .'">[' . $Language->getText('news_utils', 'readmore') . ']</a></div><hr width="100%" size="1" />';
+					$return .= '<div align="center">(' . $num_comments .' '. $comments_txt . ') <a href="'.$GLOBALS['sys_urlprefix'].'/forum/forum.php?forum_id='. db_result($result,$i,'forum_id') .'">[' . $Language->getText('news_utils', 'readmore') . ']</a></div><hr width="100%" size="1" />';
 				} else {
 					$return .= '<hr width="100%" size="1" />';
 				}
@@ -203,7 +203,7 @@
 		}
 		//you can only submit news from a project now
 		//you used to be able to submit general news
-		$return .= '<div align="center"><a href="/news/submit.php?group_id='.$group_id.'">[' . $Language->getText('news_utils', 'submit') . ']</a></div>';
+		$return .= '<div align="center"><a href="'.$GLOBALS['sys_urlprefix'].'/news/submit.php?group_id='.$group_id.'">[' . $Language->getText('news_utils', 'submit') . ']</a></div>';
 	}
 
 	return $return;
@@ -244,13 +244,13 @@
 				}
 
 				//show the project name
-				$proj_name='   -   <a href="/projects/'. strtolower(db_result($result,$i,'unix_group_name')) .'/">'. db_result($result,$i,'group_name') .'</a>';
+				$proj_name='   -   <a href="'.$GLOBALS['sys_urlprefix'].'/projects/'. strtolower(db_result($result,$i,'unix_group_name')) .'/">'. db_result($result,$i,'group_name') .'</a>';
 			} else {
 				$proj_name='';
 				$summ_txt='';
 			}
 			$return .= '
-				<a href="/forum/forum.php?forum_id='. db_result($result,$i,'forum_id') .'"><strong>'. db_result($result,$i,'summary') . '</strong></a>
+				<a href="'.$GLOBALS['sys_urlprefix'].'/forum/forum.php?forum_id='. db_result($result,$i,'forum_id') .'"><strong>'. db_result($result,$i,'summary') . '</strong></a>
 				<br /><em>'. db_result($result,$i,'realname') .' - '.
 					date($sys_datefmt,db_result($result,$i,'post_date')) . $proj_name . '</em>
 				'. $summ_txt .'<hr width="100%" size="1" />';

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/news/submit.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/news/submit.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/news/submit.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -25,6 +25,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('note.php');
 require_once('www/news/news_utils.php');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/notepad.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/notepad.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/notepad.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -28,6 +28,7 @@
  * GForge Notepad Window
  * By Hidenari Miwa, FUJITSU PRIME SOFTWARE TECHNOLOGIES LIMITED, 09/2003
  */
+require_once('env.inc.php');
 require_once('pre.php');
 
 /*

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/people/admin/index.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/people/admin/index.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/people/admin/index.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -25,6 +25,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../../env.inc.php');
 require_once('pre.php');
 require_once('www/people/people_utils.php');
 

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/people/createjob.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/people/createjob.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/people/createjob.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -25,6 +25,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('www/people/people_utils.php');
 require_once('www/project/admin/project_admin_utils.php');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/people/editjob.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/people/editjob.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/people/editjob.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -25,6 +25,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('www/people/people_utils.php');
 

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/people/editprofile.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/people/editprofile.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/people/editprofile.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -10,6 +10,7 @@
  *
  */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('people_utils.php');
 require_once('skills_utils.php');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/people/helpwanted-latest.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/people/helpwanted-latest.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/people/helpwanted-latest.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -25,6 +25,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('www/people/people_utils.php');
 

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/people/index.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/people/index.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/people/index.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -25,6 +25,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('www/people/people_utils.php');
 require_once('www/project/admin/project_admin_utils.php');
@@ -46,7 +47,7 @@
 
 	echo people_show_project_jobs($group_id) . '</p>';
 
-} else if ($category_id) {
+ } else if ($category_id && is_numeric($category_id)) {
 
 	people_header(array('title'=>$Language->getText('people','title')));
 

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/people/people_utils.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/people/people_utils.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/people/people_utils.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -37,7 +37,7 @@
 	}
 
 	if ($group_id && $job_id) {
-		echo ' | <a href="/people/editjob.php?group_id='. $group_id .'&job_id='. $job_id .'">Edit Job</a>';
+		echo ' | <a href="'.$GLOBALS['sys_urlprefix'].'/people/editjob.php?group_id='. $group_id .'&job_id='. $job_id .'">Edit Job</a>';
 	}
 }
 
@@ -391,7 +391,7 @@
 	} else {
 		for ($i=0; $i<$rows; $i++) {
 			echo db_error();
-			$return .= '<tr '. $GLOBALS['HTML']->boxGetAltRowStyle($i) .'><td><a href="/people/?category_id='.
+			$return .= '<tr '. $GLOBALS['HTML']->boxGetAltRowStyle($i) .'><td><a href="'.$GLOBALS['sys_urlprefix'].'/people/?category_id='.
 				db_result($result,$i,'category_id') .'">'.
 				db_result($result,$i,'name') .'</a> ('. db_result($result,$i,'total') .')</td></tr>';
 		}
@@ -448,13 +448,13 @@
 		for ($i=0; $i < $rows; $i++) {
 			$return .= '
 				<tr '. $GLOBALS['HTML']->boxGetAltRowStyle($i) .
-					'><td><a href="/people/viewjob.php?group_id='.
+					'><td><a href="'.$GLOBALS['sys_urlprefix'].'/people/viewjob.php?group_id='.
 					db_result($result,$i,'group_id') .'&job_id='.
 					db_result($result,$i,'job_id') .'">'.
 					db_result($result,$i,'title') .'</a></td><td>'.
 					db_result($result,$i,'category_name') .'</td><td>'.
 					date($sys_datefmt,db_result($result,$i,'post_date')) .
-					'</td><td><a href="/projects/'.strtolower(db_result($result,$i,'unix_group_name')).'/">'.
+					'</td><td><a href="'.$GLOBALS['sys_urlprefix'].'/projects/'.strtolower(db_result($result,$i,'unix_group_name')).'/">'.
 					db_result($result,$i,'group_name') .'</a></td></tr>';
 		}
 	}

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/people/viewjob.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/people/viewjob.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/people/viewjob.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -25,6 +25,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('www/people/people_utils.php');
 
@@ -71,7 +72,7 @@
 
 		<tr><td>
 			<strong>'.$Language->getText('people_viewjob','contact_info').':<br />
-			<a href="/sendmessage.php?touser='. db_result($result,0,'user_id') .'&subject='. urlencode( 'RE: '.db_result($result,0,'title')) .'">'. db_result($result,0,'user_name') .'</a></strong>
+			<a href="'.$GLOBALS['sys_urlprefix'].'/sendmessage.php?touser='. db_result($result,0,'user_id') .'&subject='. urlencode( 'RE: '.db_result($result,0,'title')) .'">'. db_result($result,0,'user_name') .'</a></strong>
 		</td><td>
 			<strong>'.$Language->getText('people','status').':</strong><br />
 			'. db_result($result,0,'status_name') .'
@@ -82,7 +83,7 @@
 			'. date($sys_datefmt,db_result($result,0,'post_date')) .'
 		</td><td>
 			<strong>'.$Language->getText('people_viewjob','for_project').':<br />
-			<a href="/project/?group_id='. $group_id .'">'. db_result($result,0,'group_name') .'</a></strong>
+			<a href="'.$GLOBALS['sys_urlprefix'].'/project/?group_id='. $group_id .'">'. db_result($result,0,'group_name') .'</a></strong>
 		</td></tr>
 
 		<tr><td colspan="2">
@@ -109,4 +110,4 @@
 	}
 }
 
-?>
\ No newline at end of file
+?>

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/people/viewprofile.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/people/viewprofile.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/people/viewprofile.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -10,6 +10,7 @@
  *
  */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('people_utils.php');
 require_once('skills_utils.php');
@@ -22,7 +23,7 @@
 $job_id = getStringFromRequest('job_id');
 
 $user_id = getStringFromRequest('user_id');
-if ($user_id) {
+if ($user_id && is_numeric($user_id)) {
 
 	/*
 		Fill in the info to create a job
@@ -67,4 +68,4 @@
 	exit_error('Error','user_id not found.');
 }
 
-?>
\ No newline at end of file
+?>

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/pm/add_task.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/pm/add_task.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/pm/add_task.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -34,7 +34,7 @@
 	<tr>
 		<td>
 		<strong><?php echo $Language->getText('pm','category') ?>:</strong><br />
-		<?php echo $pg->categoryBox('category_id'); ?> <a href="/pm/admin/?<?php echo "group_id=$group_id&add_cat=1&group_project_id=$group_project_id"; ?>">(<?php echo $Language->getText('pm','admin') ?>)</a>
+		<?php echo $pg->categoryBox('category_id'); ?> <a href="<?php echo $GLOBALS['sys_urlprefix']; ?>/pm/admin/?<?php echo "group_id=$group_id&add_cat=1&group_project_id=$group_project_id"; ?>">(<?php echo $Language->getText('pm','admin') ?>)</a>
 		</td>
 
 		

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/pm/admin/index.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/pm/admin/index.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/pm/admin/index.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -16,6 +16,7 @@
 	Total rewrite in OO and GForge coding guidelines 12/2002 by Tim Perdue
 */
 
+require_once('../../env.inc.php');
 require_once('pre.php');
 require_once('www/pm/include/ProjectGroupHTML.class');
 require_once('common/pm/ProjectGroupFactory.class');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/pm/browse_task.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/pm/browse_task.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/pm/browse_task.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -286,7 +286,7 @@
 	*/
 	echo '<tr><td colspan="2">';
 	if ($offset > 0) {
-		echo '<a href="/pm/task.php?func=browse&group_project_id='.
+		echo '<a href="'.$GLOBALS['sys_urlprefix'].'/pm/task.php?func=browse&group_project_id='.
 			$group_project_id.'&group_id='.$group_id.'&offset='.($offset-50).'">
 			<strong>'.$Language->getText('pm_browsetask','previous').'<--</strong></a>';
 	} else {
@@ -295,7 +295,7 @@
 	echo '</td><td> </td><td colspan="2">';
 
 	if ($rows==50) {
-		echo '<a href="/pm/task.php?func=browse&group_project_id='.
+		echo '<a href="'.$GLOBALS['sys_urlprefix'].'/pm/task.php?func=browse&group_project_id='.
 			$group_project_id.'&group_id='.$group_id.'&offset='.($offset+50).
 			'"><strong>'.$Language->getText('pm_browsetask','next').' --></strong></a>';
 	} else {

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/pm/calendar.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/pm/calendar.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/pm/calendar.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -12,6 +12,7 @@
  * @todo display holidays.
  */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 
 $group_id = getIntFromRequest('group_id');
@@ -125,7 +126,7 @@
 function make_task_link($task, $type) {
 	global $HTML, $Language, $group_id, $group_project_id;
 	return '<a title="'. $Language->getText('calendar', 'task_link_title', $task->getSummary())
-		. '" href="/pm/task.php?func=detailtask&project_task_id=' . $task->getID()
+		. '" href="'.$GLOBALS['sys_urlprefix'].'/pm/task.php?func=detailtask&project_task_id=' . $task->getID()
 		. '&group_id=' . $group_id
 		. '&group_project_id=' .$group_project_id
 		. '">' . ($type == 'begin' ?

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/pm/gantt.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/pm/gantt.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/pm/gantt.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -7,6 +7,7 @@
 require_once($sys_path_to_jpgraph.'/jpgraph.php');
 require_once($sys_path_to_jpgraph.'/jpgraph_gantt.php');
 require_once('common/pm/ProjectTaskFactory.class');
+require_once('www/include/unicode.php');
 
 $ptf = new ProjectTaskFactory($pg);
 if (!$ptf || !is_object($ptf)) {
@@ -77,13 +78,14 @@
 for ($i=0; $i<$rows; $i++) {
 	// Format the bar for the first activity
 	// ($row,$title,$startdate,$enddate)
-	$activity[$i] = new GanttBar ($i, $pt_arr[$i]->getSummary(), date('Y-m-d',$pt_arr[$i]->getStartDate()), date('Y-m-d',$pt_arr[$i]->getEndDate()-86400));
-
+	$activity[$i] = new GanttBar ($i, convert_unicode($pt_arr[$i]->getSummary()), date('Y-m-d',$pt_arr[$i]->getStartDate()), date('Y-m-d',$pt_arr[$i]->getEndDate()-86400));
+	
 	// Yellow diagonal line pattern on a red background
 	$activity[$i]->SetPattern(BAND_RDIAG, "yellow");
 	$activity[$i]->SetFillColor ("red");
 	$activity[$i]->progress->Set( (( $pt_arr[$i]->getPercentComplete() ) ? ($pt_arr[$i]->getPercentComplete()/100) : 0));
 	$activity[$i]->progress->SetPattern(BAND_RDIAG, "blue");
+	$activity[$i]->title->SetFont( FF_ARIAL, FS_NORMAL,9);
 
 //	global $sys_gantt_task_font_family,$sys_gantt_task_font_style,$sys_gantt_task_font_size;
 //	settitlefont($activity[$i],$sys_gantt_title_font_family,$sys_gantt_title_font_style,$sys_gantt_title_font_size);

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/pm/ganttofuser.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/pm/ganttofuser.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/pm/ganttofuser.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -1,5 +1,6 @@
 <?php
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once($sys_path_to_jpgraph.'/jpgraph.php');
 require_once($sys_path_to_jpgraph.'/jpgraph_gantt.php');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/pm/include/ProjectTaskHTML.class
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/pm/include/ProjectTaskHTML.class	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/pm/include/ProjectTaskHTML.class	2011-02-24 17:31:31 UTC (rev 11977)
@@ -63,7 +63,7 @@
 			for ($i=0; $i < $rows; $i++) {
 				echo '
 				<tr '. $GLOBALS['HTML']->boxGetAltRowStyle($i) .'>
-					<td><a href="/pm/task.php?func=detailtask&project_task_id='.
+					<td><a href="'.$GLOBALS['sys_urlprefix'].'/pm/task.php?func=detailtask&project_task_id='.
 					db_result($result, $i, 'project_task_id').
 					'&group_id='. $this->ProjectGroup->Group->getID() .
 					'&group_project_id='. $this->ProjectGroup->getID() .'">'.
@@ -110,7 +110,7 @@
 			for ($i=0; $i < $rows; $i++) {
 				echo '
 				<tr '. $GLOBALS['HTML']->boxGetAltRowStyle($i) .'>
-					<td><a href="/tracker/?func=detail&aid='.db_result($res,$i,'artifact_id').'&group_id='.db_result($res,$i,'group_id').'&atid='.db_result($res,$i,'group_artifact_id').'">'.db_result($res,$i,'summary').'</a></td>
+					<td><a href="'.$GLOBALS['sys_urlprefix'].'/tracker/?func=detail&aid='.db_result($res,$i,'artifact_id').'&group_id='.db_result($res,$i,'group_id').'&atid='.db_result($res,$i,'group_artifact_id').'">'.db_result($res,$i,'summary').'</a></td>
 					<td>'. db_result($res,$i,'name') .'</td>
 					<td>'. date($sys_datefmt,db_result($res,$i,'open_date')) .'</td>'.
 					(($is_admin) ? '<td><input type="checkbox" name="rem_artifact_id[]" value="'.db_result($res,$i,'artifact_id').'"></td>' : '').

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/pm/index.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/pm/index.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/pm/index.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -16,6 +16,7 @@
 	Total rewrite in OO and GForge coding guidelines 12/2002 by Tim Perdue
 */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('www/pm/include/ProjectGroupHTML.class');
 require_once('common/pm/ProjectGroupFactory.class');
@@ -69,7 +70,7 @@
 		} else {
 		echo '
 		<tr '. $HTML->boxGetAltRowStyle($j) . '>
-			<td><a href="/pm/task.php?group_project_id='. $pg_arr[$j]->getID().'&group_id='.$group_id.'&func=browse">' .
+			<td><a href="'.$GLOBALS['sys_urlprefix'].'/pm/task.php?group_project_id='. $pg_arr[$j]->getID().'&group_id='.$group_id.'&func=browse">' .
 		html_image("ic/taskman20w.png","20","20",array("border"=>"0")) . '  '.
 		$pg_arr[$j]->getName() .'</a></td>
 			<td>'.$pg_arr[$j]->getDescription() .'</td>

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/pm/mod_task.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/pm/mod_task.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/pm/mod_task.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -41,7 +41,7 @@
 	<tr>
 		<td>
 			<strong><?php echo $Language->getText('pm','category') ?>:</strong><br />
-			<?php echo $pg->categoryBox('category_id',$pt->getCategoryID()); ?> <a href="/pm/admin/?<?php echo "group_id=$group_id&add_cat=1&group_project_id=$group_project_id"; ?>">(admin)</a>
+			<?php echo $pg->categoryBox('category_id',$pt->getCategoryID()); ?> <a href="<?php echo $GLOBALS['sys_urlprefix']; ?>/pm/admin/?<?php echo "group_id=$group_id&add_cat=1&group_project_id=$group_project_id"; ?>">(admin)</a>
 		</td>
 
 		<td>

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/pm/reporting/index.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/pm/reporting/index.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/pm/reporting/index.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -16,6 +16,7 @@
 	Total rewrite in OO and GForge coding guidelines 12/2002 by Tim Perdue
 */
 
+require_once('../../env.inc.php');
 require_once('pre.php');
 require_once('www/pm/include/ProjectGroupHTML.class');
 require_once('common/pm/ProjectGroupFactory.class');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/pm/task.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/pm/task.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/pm/task.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -16,6 +16,7 @@
 	Total rewrite in OO and GForge coding guidelines 12/2002 by Tim Perdue
 */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('www/pm/include/ProjectGroupHTML.class');
 require_once('www/pm/include/ProjectTaskHTML.class');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/project/admin/database.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/project/admin/database.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/project/admin/database.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -31,6 +31,7 @@
  */
 
 
+require_once('../../env.inc.php');
 require_once('pre.php');
 require_once('www/project/admin/project_admin_utils.php');
 

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/project/admin/editgroupinfo.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/project/admin/editgroupinfo.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/project/admin/editgroupinfo.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -27,6 +27,7 @@
  */
 
 
+require_once('../../env.inc.php');
 require_once('pre.php');
 require_once('www/project/admin/project_admin_utils.php');
 

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/project/admin/editimages.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/project/admin/editimages.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/project/admin/editimages.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -29,6 +29,7 @@
 // Quota in bytes
 $QUOTA = 1048576;
 
+require_once('../../env.inc.php');
 require_once('pre.php');
 require_once('www/project/admin/project_admin_utils.php');
 
@@ -295,7 +296,7 @@
 
 	.'<td>'.date('Y-m-d', db_result($result, $i, 'upload_date')).'</td>'
 
-	.'<td><a href="/dbimage.php?id='.db_result($result,$i,'id').'">'
+	.'<td><a href="'.$GLOBALS['sys_urlprefix'].'/dbimage.php?id='.db_result($result,$i,'id').'">'
 	     .stripslashes(db_result($result,$i,'filename')).'</a></td>'
 	.'<td>'.db_result($result,$i,'filetype').'</td>'
 	.'<td align="right">'.db_result($result,$i,'filesize').'</td>'

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/project/admin/group_trove.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/project/admin/group_trove.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/project/admin/group_trove.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -27,6 +27,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../../env.inc.php');
 require_once('pre.php');    
 require_once('trove.php');
 require_once('www/project/admin/project_admin_utils.php');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/project/admin/history.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/project/admin/history.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/project/admin/history.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -26,6 +26,7 @@
  */
 
 
+require_once('../../env.inc.php');
 require_once('pre.php');
 require_once('www/project/admin/project_admin_utils.php');
 

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/project/admin/index.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/project/admin/index.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/project/admin/index.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -29,6 +29,7 @@
  */
 
 
+require_once('../../env.inc.php');
 require_once('pre.php');
 require_once('www/project/admin/project_admin_utils.php');
 require_once('www/include/role_utils.php');
@@ -70,6 +71,14 @@
 			$feedback .= $group->getErrorMessage();
 		} else {
 			$feedback = $Language->getText('project_admin','user_added');
+
+			//plugin webcal
+			//change assistant for webcal
+			$params[0] = getIntFromRequest('user_id');
+			$params[1] = getIntFromRequest('group_id');
+			plugin_hook('change_cal_permission',$params);
+			$group_id = getIntFromRequest('group_id');
+
 			//if the user have requested to join this group
 			//we should remove him from the request list
 			//since it has already been added
@@ -77,6 +86,7 @@
 			if ($gjr || is_object($gjr) || !$gjr->isError()) {
 				$gjr->delete(true);
 			}
+
 		}
 	} else if (getStringFromRequest('rmuser')) {
 		/*
@@ -87,6 +97,12 @@
 			$feedback .= $group->getErrorMessage();
 		} else {
 			$feedback = $Language->getText('project_admin','user_removed');
+			//plugin webcal
+			//change assistant for webcal
+			$params[0] = getIntFromRequest('user_id');
+			$params[1] = getIntFromRequest('group_id');
+			plugin_hook('change_cal_permission',$params);
+			$group_id = getIntFromRequest('group_id');
 		}
 	} else if (getStringFromRequest('updateuser')) {
 		/*
@@ -98,6 +114,13 @@
 			$feedback .= $group->getErrorMessage();
 		} else {
 			$feedback = $Language->getText('project_admin','user_updated');
+			//plugin webcal
+			//change assistant for webcal
+			$params[0] = getIntFromRequest('user_id');
+			$params[1] = getIntFromRequest('group_id');
+			plugin_hook('change_cal_permission',$params);
+			$group_id = getIntFromRequest('group_id');
+			
 		}
 	} elseif (getStringFromRequest('acceptpending')) {
 		/*
@@ -132,7 +155,7 @@
 				$feedback .= 'Rejected';
 			}
 		}
-	}
+	} 
 }
 
 $group->clearError();
@@ -168,39 +191,39 @@
 ?> 
 
 <?php	if($sys_use_scm) { ?>
-	<p>[ <a href="/tarballs.php?group_id=<?php echo $group_id; ?>"><?php echo $Language->getText('project_admin', 'download_tarball') ?></a> ]</p>
+	<p>[ <a href="<?php echo $GLOBALS['sys_urlprefix']; ?>/tarballs.php?group_id=<?php echo $group_id; ?>"><?php echo $Language->getText('project_admin', 'download_tarball') ?></a> ]</p>
 <?php	} ?>
 
 <hr />
 <p>
-<h4><?php echo $Language->getText('project_admin','trove_categorization') ?><a href="/project/admin/group_trove.php?group_id=<?php echo $group->getID(); ?>">[<?php echo $Language->getText('general','edit') ?>]</a></h4>
+<h4><?php echo $Language->getText('project_admin','trove_categorization') ?><a href="<?php echo $GLOBALS['sys_urlprefix']; ?>/project/admin/group_trove.php?group_id=<?php echo $group->getID(); ?>">[<?php echo $Language->getText('general','edit') ?>]</a></h4>
 </p>
 <?php
 echo $HTML->boxMiddle($Language->getText('project_admin','tool_admin').'');
 
 if($sys_use_tracker) { ?>
-	<a href="/tracker/admin/?group_id=<?php echo $group->getID(); ?>"><?php echo $Language->getText('project_admin','tracker_admin') ?></a><br />
+	<a href="<?php echo $GLOBALS['sys_urlprefix']; ?>/tracker/admin/?group_id=<?php echo $group->getID(); ?>"><?php echo $Language->getText('project_admin','tracker_admin') ?></a><br />
 <?php }
 if($sys_use_docman) { ?>
-	<a href="/docman/admin/?group_id=<?php echo $group->getID(); ?>"><?php echo $Language->getText('project_admin','docmanager_admin') ?></a><br />
+	<a href="<?php echo $GLOBALS['sys_urlprefix']; ?>/docman/admin/?group_id=<?php echo $group->getID(); ?>"><?php echo $Language->getText('project_admin','docmanager_admin') ?></a><br />
 <?php }
 if($sys_use_mail) { ?>
-	<a href="/mail/admin/?group_id=<?php echo $group->getID(); ?>"><?php echo $Language->getText('project_admin','mail_admin') ?></a><br />
+	<a href="<?php echo $GLOBALS['sys_urlprefix']; ?>/mail/admin/?group_id=<?php echo $group->getID(); ?>"><?php echo $Language->getText('project_admin','mail_admin') ?></a><br />
 <?php }
 if($sys_use_news) { ?>
-	<a href="/news/admin/?group_id=<?php echo $group->getID(); ?>"><?php echo $Language->getText('project_admin','news_admin') ?></a><br />
+	<a href="<?php echo $GLOBALS['sys_urlprefix']; ?>/news/admin/?group_id=<?php echo $group->getID(); ?>"><?php echo $Language->getText('project_admin','news_admin') ?></a><br />
 <?php }
 if($sys_use_pm) { ?>
-	<a href="/pm/admin/?group_id=<?php echo $group->getID(); ?>"><?php echo $Language->getText('project_admin','task_manager_admin') ?></a><br />
+	<a href="<?php echo $GLOBALS['sys_urlprefix']; ?>/pm/admin/?group_id=<?php echo $group->getID(); ?>"><?php echo $Language->getText('project_admin','task_manager_admin') ?></a><br />
 <?php }
 if($sys_use_forum) { ?>
-	<a href="/forum/admin/?group_id=<?php echo $group->getID(); ?>"><?php echo $Language->getText('project_admin','forum_admin') ?></a><br />
+	<a href="<?php echo $GLOBALS['sys_urlprefix']; ?>/forum/admin/?group_id=<?php echo $group->getID(); ?>"><?php echo $Language->getText('project_admin','forum_admin') ?></a><br />
 <?php }
 if($sys_use_frs) { ?>
-	<a href="/frs/admin/?group_id=<?php echo $group->getID(); ?>"><?php echo $Language->getText('project_admin','frs_admin') ?></a><br />
+	<a href="<?php echo $GLOBALS['sys_urlprefix']; ?>/frs/admin/?group_id=<?php echo $group->getID(); ?>"><?php echo $Language->getText('project_admin','frs_admin') ?></a><br />
 <?php }
 if($sys_use_scm) { ?>
-	<a href="/scm/admin/?group_id=<?php echo $group->getID(); ?>"><?php echo $Language->getText('project_admin','scm_admin') ?></a><br />
+	<a href="<?php echo $GLOBALS['sys_urlprefix']; ?>/scm/admin/?group_id=<?php echo $group->getID(); ?>"><?php echo $Language->getText('project_admin','scm_admin') ?></a><br />
 <?php }
 
 $hook_params = array () ;
@@ -294,7 +317,7 @@
 		<form action="<?php echo $PHP_SELF.'?group_id='.$group_id; ?>" method="post">
 		<input type="hidden" name="submit" value="y" />
 		<input type="hidden" name="form_userid" value="<?php echo $user->getId(); ?>" />
-		<tr><td><input type="hidden" name="form_unix_name" value="<?php echo $user->getUnixName(); ?>" /><a href="/users/<?php echo $user->getUnixName(); ?>"><?php echo $user->getRealName(); ?></a></td>
+		<tr><td><input type="hidden" name="form_unix_name" value="<?php echo $user->getUnixName(); ?>" /><a href="<?php echo $GLOBALS['sys_urlprefix']; ?>/users/<?php echo $user->getUnixName(); ?>"><?php echo $user->getRealName(); ?></a></td>
 		<td><?php echo role_box($group_id,'role_id',$row_memb['role_id']); ?>
 			<input type="submit" name="acceptpending" value="<?php echo $Language->getText('project_admin','acceptpending') ?>" />
 			<input type="submit" name="rejectpending" value="<?php echo $Language->getText('project_admin','rejectpending') ?>" /></td>
@@ -315,6 +338,12 @@
 
 echo '<p><a href="roleedit.php?group_id='.$group_id.'">'.$Language->getText('rbac_edit','addrole').'</a>';
 
+//
+//	Project hierarchy functions
+
+plugin_hook('admin_project_link',$group_id) ;
+
+
 echo $HTML->boxBottom();?>
 
 		</td>

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/project/admin/massadd.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/project/admin/massadd.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/project/admin/massadd.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -25,6 +25,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../../env.inc.php');
 require_once('pre.php');
 require_once('www/project/admin/project_admin_utils.php');
 require_once('www/include/role_utils.php');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/project/admin/massfinish.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/project/admin/massfinish.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/project/admin/massfinish.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -25,6 +25,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../../env.inc.php');
 require_once('pre.php');
 require_once('www/project/admin/project_admin_utils.php');
 require_once('www/include/role_utils.php');
@@ -46,7 +47,13 @@
 	$keys=array_keys($addrole);
 	for ($i=0; $i<count($keys); $i++) {
 		$group->addUser($keys[$i],$addrole[$keys[$i]]);
+		//plugin webcal
+			//change assistant for webcal
+			$params[0] = $keys[$i];
+			$params[1] = $group_id;
+			plugin_hook('change_cal_permission',$params);
 	}
+	$group_id = getIntFromRequest('group_id');
 	Header("Location: index.php?group_id=$group_id&feedback=Successful");
 }
 

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/project/admin/project_admin_utils.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/project/admin/project_admin_utils.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/project/admin/project_admin_utils.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -77,6 +77,7 @@
 		$labels[] = $Language->getText('project_admin_utils','database_admin');
 	}
 	$labels[] = $Language->getText('project_admin_utils','stats');
+	plugin_hook("quota_label_project_admin");
 	
 	$links[] = '/project/admin/?group_id='.$group_id;
 	$links[] = '/project/admin/editgroupinfo.php?group_id='.$group_id;
@@ -95,6 +96,8 @@
 		$links[] = '/project/admin/database.php?group_id='.$group_id;
 	}
 	$links[] = '/project/stats/?group_id='.$group_id;
+	plugin_hook("quota_link_project_admin");
+	
 	echo ($HTML->beginSubMenu());	
 	echo $HTML->printSubMenu($labels, $links);
 	plugin_hook ("groupadminmenu", $params) ;

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/project/admin/roleedit.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/project/admin/roleedit.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/project/admin/roleedit.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -25,6 +25,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../../env.inc.php');
 require_once('pre.php');
 require_once('www/project/admin/project_admin_utils.php');
 require_once('common/include/Role.class');
@@ -81,6 +82,10 @@
 				$feedback .= ' Successfully Updated Role ';
 			}
 		}
+		//plugin webcal
+			//change assistant for webcal
+			$params = getIntFromRequest('group_id');
+			plugin_hook('change_cal_permission_auto',$params);	
 	}
 }
 

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/project/admin/vhost.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/project/admin/vhost.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/project/admin/vhost.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -26,6 +26,7 @@
  */
 
 
+require_once('../../env.inc.php');
 require_once('pre.php');
 require_once('www/project/admin/project_admin_utils.php');
 

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/project/index.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/project/index.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/project/index.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -12,6 +12,7 @@
   */
 
 
+require_once('../env.inc.php');
 require_once('pre.php');    
 
 /*
@@ -28,6 +29,6 @@
 	exit_error("Missing Group Argument","A group must be specified for this page.");
 }
 
-header ("Location: /projects/". group_getunixname($group_id) ."/");
+header ("Location: ".$GLOBALS['sys_urlprefix']."/projects/". group_getunixname($group_id) ."/");
 
 ?>

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/project/memberlist.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/project/memberlist.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/project/memberlist.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -26,6 +26,7 @@
  */
 
 
+require_once('../env.inc.php');
 require_once('pre.php');
 
 $group_id = getIntFromGet("group_id");

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/project/report/index.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/project/report/index.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/project/report/index.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -24,6 +24,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA  */
 
 
+require_once('../../env.inc.php');
 require_once('pre.php');
 #require_once('common/tracker/ArtifactGroup.class');
 
@@ -154,13 +155,13 @@
 	} else {
 		echo "\n\t\t<td>".$row_memb['realname']."</td>\n";
 	}
-	echo "\t\t<td><a href=\"/sendmessage.php?touser=".$row_memb['user_id']."\">" . $Language->getText('sendmessage','contact') . "
+	echo "\t\t<td><a href=\"".$GLOBALS['sys_urlprefix']."/sendmessage.php?touser=".$row_memb['user_id']."\">" . $Language->getText('sendmessage','contact') . "
 </a>".
-		"<a href=\"/users/".
+		"<a href=\"".$GLOBALS['sys_urlprefix']."/users/".
 		$row_memb['user_name']."/\">".$row_memb['user_name']."</a></td>
 		<td align=\"center\">".$row_memb['role']."</td>\n";
 	if($GLOBALS['sys_use_people']) {
-		echo "\t\t<td align=\"center\"><a href=\"/people/viewprofile.php?user_id=".
+		echo "\t\t<td align=\"center\"><a href=\"".$GLOBALS['sys_urlprefix']."/people/viewprofile.php?user_id=".
 			$row_memb['user_id']."\">".$Language->getText('project_memberlist','view').
 			"</a></td>";
 	}
@@ -184,7 +185,7 @@
 			echo "\t\t";
 			echo '<tr class="priority'.db_result($artifacts, $m, 'priority').'">';
 			echo "\n\t\t";
-			echo '<td><a href="/tracker/?func=detail&aid='.
+			echo '<td><a href="'.$GLOBALS['sys_urlprefix'].'/tracker/?func=detail&aid='.
 				db_result($artifacts, $m, 'artifact_id').
 				'&group_id='.$group_id.
 				'&atid='.$artifact_type['group_artifact_id'].
@@ -225,7 +226,7 @@
 		if ( $task_type['percent_complete'] != 100 ) {
                 	echo '<tr class="priority'.$task_type['priority'].'">';
 
-			echo '<td><a href="/pm/task.php?func=detailtask&project_task_id='.
+			echo '<td><a href="'.$GLOBALS['sys_urlprefix'].'/pm/task.php?func=detailtask&project_task_id='.
 				$task_type['project_task_id'].
 				'&group_id='.$group_id.
 				'&group_project_id='.$task_type['group_project_id'].
@@ -244,4 +245,4 @@
 
 site_project_footer(array());
 
-?>
\ No newline at end of file
+?>

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/project/request.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/project/request.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/project/request.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -25,6 +25,7 @@
  */
 
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('common/include/GroupJoinRequest.class');
 

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/project/stats/index.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/project/stats/index.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/project/stats/index.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -7,6 +7,7 @@
  */
 
 
+require_once('../../env.inc.php');
 require_once('pre.php');
 require_once('common/reporting/report_utils.php');
 require_once('common/reporting/Report.class');
@@ -33,6 +34,11 @@
 
 site_project_header(array('title'=>$Language->getText('reporting','project_activity_title').' '.$groupname,'group'=>$group_id,'toptab'=>'home'));
 
+if ($area && !is_numeric($area)) { $area = 1; }
+if ($SPAN && !is_numeric($SPAN)) { $SPAN = 1; }
+if ($start && !is_numeric($start)) { $start = false; }
+if ($end && !is_numeric($end)) { $end = false; }
+
 //
 // BEGIN PAGE CONTENT CODE
 //

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/projects
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/projects	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/projects	2011-02-24 17:31:31 UTC (rev 11977)
@@ -26,6 +26,7 @@
  */
 
 
+require_once('env.inc.php');
 require_once('pre.php');    
 
 //
@@ -44,14 +45,13 @@
 	$subpage = getStringFromRequest('subpage');
 
 	if ($subpage == "admin") {
-//		include('www/project/admin/index.php');
-		session_redirect("/project/admin/?group_id=$group_id");
+		session_redirect($GLOBAL['sys_urlprefix']."/project/admin/?group_id=$group_id");
 		exit();
 	} else if ($subpage == "files" || $subpage == "download" || $subpage == "dl") {
 		if (getStringFromRequest('subpage2') == "release") {
-			session_redirect("/frs/admin/qrs.php?group_id=$group_id");
+			session_redirect($GLOBAL['sys_urlprefix']."/frs/admin/qrs.php?group_id=$group_id");
 		} else {
-			session_redirect("/frs/?group_id=$group_id");
+			session_redirect($GLOBAL['sys_urlprefix']."/frs/?group_id=$group_id");
 		}
 		exit();
 	} else if ($subpage == "cvs") {

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/register/projectinfo.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/register/projectinfo.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/register/projectinfo.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -38,6 +38,7 @@
  */
 
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('common/include/license.php');
 require_once('common/scm/SCMFactory.class');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/groupadded.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/groupadded.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/groupadded.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -25,6 +25,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('common/reporting/report_utils.php');
 require_once('common/reporting/Report.class');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/groupadded_graph.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/groupadded_graph.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/groupadded_graph.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -25,6 +25,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once($sys_path_to_jpgraph.'/jpgraph.php');
 require_once($sys_path_to_jpgraph.'/jpgraph_line.php');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/groupcum.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/groupcum.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/groupcum.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -25,6 +25,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('common/reporting/report_utils.php');
 require_once('common/reporting/Report.class');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/groupcum_graph.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/groupcum_graph.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/groupcum_graph.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -25,6 +25,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once($sys_path_to_jpgraph.'/jpgraph.php');
 require_once($sys_path_to_jpgraph.'/jpgraph_line.php');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/index.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/index.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/index.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -25,6 +25,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('common/reporting/report_utils.php');
 require_once('common/reporting/Report.class');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/projectact.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/projectact.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/projectact.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -25,6 +25,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('common/reporting/report_utils.php');
 require_once('common/reporting/Report.class');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/projectact_graph.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/projectact_graph.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/projectact_graph.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -25,12 +25,13 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once($sys_path_to_jpgraph.'/jpgraph.php');
 require_once($sys_path_to_jpgraph.'/jpgraph_line.php');
 require_once('common/reporting/ReportProjectAct.class');
+require_once('www/include/unicode.php');
 
-
 $area = getStringFromRequest('area');
 $SPAN = getStringFromRequest('SPAN');
 $start = getStringFromRequest('start');
@@ -89,8 +90,8 @@
 	$graph->Add( $lineplot2 );
 
 	//	Legends
-	$lineplot->SetLegend ($Language->getText('reporting','tracker_items_opened'));
-	$lineplot2 ->SetLegend($Language->getText('reporting','tracker_items_closed'));
+	$lineplot->SetLegend (convert_unicode($Language->getText('reporting','tracker_items_opened')));
+	$lineplot2 ->SetLegend(convert_unicode($Language->getText('reporting','tracker_items_closed')));
 
 } elseif ($area=='forum') {
 

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/projecttime.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/projecttime.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/projecttime.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -25,6 +25,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('common/reporting/report_utils.php');
 require_once('common/reporting/ReportProjectTime.class');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/projecttime_graph.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/projecttime_graph.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/projecttime_graph.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -25,6 +25,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once($sys_path_to_jpgraph.'/jpgraph.php');
 require_once($sys_path_to_jpgraph.'/jpgraph_pie.php');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/rebuild.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/rebuild.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/rebuild.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -25,6 +25,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('common/reporting/report_utils.php');
 require_once('common/reporting/Report.class');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/siteact.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/siteact.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/siteact.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -25,6 +25,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('common/reporting/report_utils.php');
 require_once('common/reporting/Report.class');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/siteact_graph.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/siteact_graph.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/siteact_graph.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -25,10 +25,12 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once($sys_path_to_jpgraph.'/jpgraph.php');
 require_once($sys_path_to_jpgraph.'/jpgraph_line.php');
 require_once('common/reporting/ReportSiteAct.class');
+require_once('www/include/unicode.php');
 
 session_require( array('group'=>$sys_stats_group) );
 
@@ -72,8 +74,8 @@
 	$graph->Add( $lineplot2 );
 
 	//	Legends
-	$lineplot->SetLegend ($Language->getText('reporting','tracker_items_opened'));
-	$lineplot2 ->SetLegend($Language->getText('reporting','tracker_items_closed'));
+	 $lineplot->SetLegend (convert_unicode($Language->getText('reporting','tracker_items_opened')));
+	 $lineplot2 ->SetLegend(convert_unicode($Language->getText('reporting','tracker_items_closed')));
 
 } elseif ($area=='forum') {
 

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/sitetime.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/sitetime.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/sitetime.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -25,6 +25,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('common/reporting/report_utils.php');
 require_once('common/reporting/ReportSiteTime.class');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/sitetime_graph.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/sitetime_graph.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/sitetime_graph.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -25,6 +25,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once($sys_path_to_jpgraph.'/jpgraph.php');
 require_once($sys_path_to_jpgraph.'/jpgraph_pie.php');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/sitetimebar.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/sitetimebar.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/sitetimebar.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -25,6 +25,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('common/reporting/report_utils.php');
 require_once('common/reporting/Report.class');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/sitetimebar_graph.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/sitetimebar_graph.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/sitetimebar_graph.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -25,6 +25,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once($sys_path_to_jpgraph.'/jpgraph.php');
 require_once($sys_path_to_jpgraph.'/jpgraph_bar.php');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/timeadd.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/timeadd.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/timeadd.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -25,6 +25,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('common/reporting/report_utils.php');
 require_once('common/reporting/Report.class');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/timecategory.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/timecategory.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/timecategory.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -25,6 +25,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('common/reporting/report_utils.php');
 require_once('common/reporting/ReportSetup.class');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/toolspie.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/toolspie.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/toolspie.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -25,6 +25,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('common/reporting/report_utils.php');
 require_once('common/reporting/Report.class');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/toolspie_graph.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/toolspie_graph.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/toolspie_graph.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -25,6 +25,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once($sys_path_to_jpgraph.'/jpgraph.php');
 require_once($sys_path_to_jpgraph.'/jpgraph_pie.php');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/trackerpie_graph.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/trackerpie_graph.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/trackerpie_graph.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -25,6 +25,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once($sys_path_to_jpgraph.'/jpgraph.php');
 require_once($sys_path_to_jpgraph.'/jpgraph_pie.php');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/useract.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/useract.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/useract.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -25,6 +25,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('common/reporting/report_utils.php');
 require_once('common/reporting/Report.class');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/useract_graph.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/useract_graph.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/useract_graph.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -25,10 +25,12 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once($sys_path_to_jpgraph.'/jpgraph.php');
 require_once($sys_path_to_jpgraph.'/jpgraph_line.php');
 require_once('common/reporting/ReportUserAct.class');
+require_once('www/include/unicode.php');
 
 session_require( array('group'=>$sys_stats_group) );
 
@@ -80,8 +82,8 @@
 	$graph->Add( $lineplot2 );
 
 	//	Legends
-	$lineplot->SetLegend ($Language->getText('reporting','tracker_items_opened'));
-	$lineplot2 ->SetLegend($Language->getText('reporting','tracker_items_closed'));
+	$lineplot->SetLegend (convert_unicode($Language->getText('reporting','tracker_items_opened')));
+	$lineplot2 ->SetLegend(convert_unicode($Language->getText('reporting','tracker_items_closed')));
 
 } elseif ($area=='forum') {
 

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/useradded.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/useradded.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/useradded.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -25,6 +25,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('common/reporting/report_utils.php');
 require_once('common/reporting/Report.class');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/useradded_graph.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/useradded_graph.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/useradded_graph.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -25,6 +25,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once($sys_path_to_jpgraph.'/jpgraph.php');
 require_once($sys_path_to_jpgraph.'/jpgraph_line.php');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/usercum.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/usercum.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/usercum.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -25,6 +25,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('common/reporting/report_utils.php');
 require_once('common/reporting/Report.class');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/usercum_graph.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/usercum_graph.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/usercum_graph.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -25,6 +25,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once($sys_path_to_jpgraph.'/jpgraph.php');
 require_once($sys_path_to_jpgraph.'/jpgraph_line.php');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/usersummary.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/usersummary.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/usersummary.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -25,6 +25,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('common/reporting/report_utils.php');
 require_once('common/reporting/Report.class');
@@ -116,7 +117,7 @@
 			$last_name = $name;
 		}
 		echo '<tr '.$HTML->boxGetAltRowStyle(1).'><td> </td>
-				<td><a href="/pm/task.php?func=detailtask&group_id='.db_result($res,$i,'group_id')
+				<td><a href="'.$GLOBALS['sys_urlprefix'].'/pm/task.php?func=detailtask&group_id='.db_result($res,$i,'group_id')
 					.'&project_task_id='.db_result($res,$i,'project_task_id')
 					.'&group_project_id='.db_result($res,$i,'group_project_id')
 					.'" target="_blank">'.db_result($res,$i,'summary').'</a></td>
@@ -149,7 +150,7 @@
 					echo ' ';
 				}
 				echo '</td>
-						<td colspan="2"><a href="/tracker/?func=detail&atid='.db_result($res2,$j,'group_artifact_id').
+						<td colspan="2"><a href="'.$GLOBALS['sys_urlprefix'].'/tracker/?func=detail&atid='.db_result($res2,$j,'group_artifact_id').
 						'&group_id='.db_result($res2,$j,'group_id').
 						'&aid='.db_result($res2,$j,'artifact_id').'" target="_blank">'.db_result($res2,$j,'summary').'</a></td></tr>';
 			}

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/usertime.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/usertime.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/usertime.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -25,6 +25,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('common/reporting/report_utils.php');
 require_once('common/reporting/ReportUserTime.class');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/usertime_graph.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/usertime_graph.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/reporting/usertime_graph.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -25,6 +25,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once($sys_path_to_jpgraph.'/jpgraph.php');
 require_once($sys_path_to_jpgraph.'/jpgraph_pie.php');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/scm/admin/index.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/scm/admin/index.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/scm/admin/index.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -25,6 +25,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../../env.inc.php');
 require_once('pre.php');
 require_once('www/scm/include/scm_utils.php');
 

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/scm/index.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/scm/index.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/scm/index.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -25,6 +25,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../env.inc.php');
 require_once('pre.php');    
 require_once('www/scm/include/scm_utils.php');    
 

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/scm/reporting/commits_graph.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/scm/reporting/commits_graph.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/scm/reporting/commits_graph.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -25,6 +25,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../../env.inc.php');
 require_once('pre.php');
 require_once($sys_path_to_jpgraph.'/jpgraph.php');
 require_once($sys_path_to_jpgraph.'/jpgraph_pie.php');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/scm/reporting/commitstime_graph.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/scm/reporting/commitstime_graph.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/scm/reporting/commitstime_graph.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -25,6 +25,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../../env.inc.php');
 require_once('pre.php');
 require_once($sys_path_to_jpgraph.'/jpgraph.php');
 require_once($sys_path_to_jpgraph.'/jpgraph_line.php');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/scm/reporting/index.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/scm/reporting/index.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/scm/reporting/index.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -25,6 +25,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../../env.inc.php');
 require_once('pre.php');    
 require_once('www/scm/include/scm_utils.php');    
 

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/scm/viewvc.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/scm/viewvc.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/scm/viewvc.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -16,6 +16,7 @@
 	$no_gz_buffer=true;
 }
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('www/scm/include/scm_utils.php');
 require_once('www/scm/include/viewvc_utils.php');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/search/advanced_search.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/search/advanced_search.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/search/advanced_search.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -10,6 +10,7 @@
  * @version $Id$
  */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('common/include/escapingUtils.php');
 require_once('include/renderers/AdvancedSearchHtmlSearchRenderer.class');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/search/include/renderers/ArtifactHtmlSearchRenderer.class
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/search/include/renderers/ArtifactHtmlSearchRenderer.class	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/search/include/renderers/ArtifactHtmlSearchRenderer.class	2011-02-24 17:31:31 UTC (rev 11977)
@@ -63,7 +63,7 @@
 		for($i = 0; $i < $rowsCount; $i++) {
 			$return .= '<tr '. $GLOBALS['HTML']->boxGetAltRowStyle($i) .'>'
 				.'<td>'.db_result($result, $i, 'artifact_id').'</td>'
-				.'<td><a href="/tracker/?group_id='.$groupId.'&atid='
+				.'<td><a href="'.$GLOBALS['sys_urlprefix'].'/tracker/?group_id='.$groupId.'&atid='
 				. db_result($result, $i, 'group_artifact_id') 
 				. '&func=detail&aid='
 				. db_result($result, $i, 'artifact_id').'"> '
@@ -103,4 +103,4 @@
 	
 }
 
-?>
\ No newline at end of file
+?>

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/search/include/renderers/DocsHtmlSearchRenderer.class
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/search/include/renderers/DocsHtmlSearchRenderer.class	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/search/include/renderers/DocsHtmlSearchRenderer.class	2011-02-24 17:31:31 UTC (rev 11977)
@@ -66,7 +66,7 @@
 			$return .= '<tr '. $GLOBALS['HTML']->boxGetAltRowStyle($rowColor) .'>'
 				. '<td width="5%"> </td>'
 				. '<td>'.db_result($result, $i, 'docid').'</td>'
-				. '<td><a href="/docman/view.php/'.$this->groupId
+				. '<td><a href="'.$GLOBALS['sys_urlprefix'].'/docman/view.php/'.$this->groupId
 				. '/'.db_result($result, $i, 'docid').'/'.db_result($result, $i, 'title').'">'
 				. html_image('ic/msg.png', '10', '12', array('border' => '0'))
 				. ' '.db_result($result, $i, 'title').'</a></td>'
@@ -88,4 +88,4 @@
 	}
 }
 
-?>
\ No newline at end of file
+?>

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/search/include/renderers/ForumHtmlSearchRenderer.class
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/search/include/renderers/ForumHtmlSearchRenderer.class	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/search/include/renderers/ForumHtmlSearchRenderer.class	2011-02-24 17:31:31 UTC (rev 11977)
@@ -58,7 +58,7 @@
 		
 		$return = '';
 		for($i = 0; $i < $rowsCount; $i++) {
-			$return .= '<tr '. $GLOBALS['HTML']->boxGetAltRowStyle($i) .'><td width="50%"><a href="/forum/message.php?msg_id='
+			$return .= '<tr '. $GLOBALS['HTML']->boxGetAltRowStyle($i) .'><td width="50%"><a href="'.$GLOBALS['sys_urlprefix'].'/forum/message.php?msg_id='
 				. db_result($result, $i, 'msg_id').'">'
 				. html_image('ic/msg.png', '10', '12', array('border' => '0'))
 				. ' '.db_result($result, $i, 'subject').'</a></td>'
@@ -95,4 +95,4 @@
 	}
 }
 
-?>
\ No newline at end of file
+?>

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/search/include/renderers/ForumsHtmlSearchRenderer.class
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/search/include/renderers/ForumsHtmlSearchRenderer.class	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/search/include/renderers/ForumsHtmlSearchRenderer.class	2011-02-24 17:31:31 UTC (rev 11977)
@@ -63,7 +63,7 @@
 			}
 			$return .= '<tr '. $GLOBALS['HTML']->boxGetAltRowStyle($rowColor) .'>'
 						. '<td width="5%"> </td>'
-						. '<td><a href="/forum/message.php?msg_id='. db_result($result, $i, 'msg_id').'">'
+						. '<td><a href="'.$GLOBALS['sys_urlprefix'].'/forum/message.php?msg_id='. db_result($result, $i, 'msg_id').'">'
 							. html_image('ic/msg.png', '10', '12', array('border' => '0')).' '.db_result($result, $i, 'subject')
 							.'</a></td>'			
 						. '<td width="15%">'.db_result($result, $i, 'realname').'</td>'
@@ -85,4 +85,4 @@
 	}
 }
 
-?>
\ No newline at end of file
+?>

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/search/include/renderers/FrsHtmlSearchRenderer.class
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/search/include/renderers/FrsHtmlSearchRenderer.class	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/search/include/renderers/FrsHtmlSearchRenderer.class	2011-02-24 17:31:31 UTC (rev 11977)
@@ -63,7 +63,7 @@
 			}
 			$return .= '<tr '. $GLOBALS['HTML']->boxGetAltRowStyle($rowColor) .'>'
 				. '<td width="5%"> </td>'
-				. '<td><a href="/frs/shownotes.php?release_id='.db_result($result, $i, 'release_id').'">'
+				. '<td><a href="'.$GLOBALS['sys_urlprefix'].'/frs/shownotes.php?release_id='.db_result($result, $i, 'release_id').'">'
 				. db_result($result, $i, 'release_name').'</a></td>'
 				. '<td width="15%">'.db_result($result, $i, 'realname').'</td>'
 				. '<td width="15%">'.date($dateFormat,db_result($result,$i, 'release_date')).'</td></tr>';
@@ -84,4 +84,4 @@
 	}
 }
 
-?>
\ No newline at end of file
+?>

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/search/include/renderers/NewsHtmlSearchRenderer.class
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/search/include/renderers/NewsHtmlSearchRenderer.class	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/search/include/renderers/NewsHtmlSearchRenderer.class	2011-02-24 17:31:31 UTC (rev 11977)
@@ -52,7 +52,7 @@
 		$return = '';
 		for($i = 0; $i < $rowsCount; $i++) {
 			$return .= '<tr '. $GLOBALS['HTML']->boxGetAltRowStyle($i) .'>'
-				. '<td><a href="/forum/forum.php?forum_id='. db_result($result, $i, 'forum_id').'">'
+				. '<td><a href="'.$GLOBALS['sys_urlprefix'].'/forum/forum.php?forum_id='. db_result($result, $i, 'forum_id').'">'
 				. html_image('ic/msg.png', '10', '12', array('border' => '0'))
 				. ' '.db_result($result, $i, 'summary').'</a></td>
 				<td width="15%">'.db_result($result, $i, 'realname').'</td>
@@ -62,4 +62,4 @@
 	}
 }
 
-?>
\ No newline at end of file
+?>

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/search/include/renderers/PeopleHtmlSearchRenderer.class
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/search/include/renderers/PeopleHtmlSearchRenderer.class	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/search/include/renderers/PeopleHtmlSearchRenderer.class	2011-02-24 17:31:31 UTC (rev 11977)
@@ -55,7 +55,7 @@
 		$return = '';
 		for($i = 0; $i < $rowsCount; $i++) {
 			$return .= '<tr '. $GLOBALS['HTML']->boxGetAltRowStyle($i) .'>'.
-				'<td width="40%"><a href="/users/'.db_result($result, $i, 'user_name').'/">'.html_image('ic/msg.png', '10', '12', array('border'=>'0')).' '.db_result($result, $i, 'user_name').'</a></td>'.
+				'<td width="40%"><a href="'.$GLOBALS['sys_urlprefix'].'/users/'.db_result($result, $i, 'user_name').'/">'.html_image('ic/msg.png', '10', '12', array('border'=>'0')).' '.db_result($result, $i, 'user_name').'</a></td>'.
 				'<td width="60%">'.db_result($result, $i, 'realname').'</td>'.
 				'</tr>';
 		}
@@ -71,4 +71,4 @@
 	}
 }
 
-?>
\ No newline at end of file
+?>

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/search/include/renderers/ProjectHtmlSearchRenderer.class
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/search/include/renderers/ProjectHtmlSearchRenderer.class	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/search/include/renderers/ProjectHtmlSearchRenderer.class	2011-02-24 17:31:31 UTC (rev 11977)
@@ -61,7 +61,7 @@
 				$what = 'projects';
 			}		
 			$return .= '<tr '.$GLOBALS['HTML']->boxGetAltRowStyle($i).'>'
-				.'<td width="30%"><a href="/'.$what.'/'
+				.'<td width="30%"><a href="'.$GLOBALS['sys_urlprefix'].'/'.$what.'/'
 				.db_result($result, $i, 'unix_group_name').'/">'
 				.html_image('ic/msg.png', '10', '12', array('border'=>'0'))
 				.' '.$this->highlightTargetWords(db_result($result, $i, 'group_name')).'</a></td>'
@@ -92,4 +92,4 @@
 	
 }
 
-?>
\ No newline at end of file
+?>

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/search/include/renderers/SkillHtmlSearchRenderer.class
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/search/include/renderers/SkillHtmlSearchRenderer.class	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/search/include/renderers/SkillHtmlSearchRenderer.class	2011-02-24 17:31:31 UTC (rev 11977)
@@ -73,7 +73,7 @@
 			$finishMonth = substr($finish, 4, 2);
 				
 			$return .= '<tr '.$GLOBALS['HTML']->boxGetAltRowStyle($i).'>'
-				. '<td><a href="/users/'.db_result($result, $i, 'user_name').'/">'
+				. '<td><a href="'.$GLOBALS['sys_urlprefix'].'/users/'.db_result($result, $i, 'user_name').'/">'
 				. db_result($result, $i, 'realname').'</a></td>'
 				. '<td>'.db_result($result, $i, 'type_name').'</td>'
 				. '<td>'.db_result($result, $i, 'title').'</td>'
@@ -95,4 +95,4 @@
 	}
 }
 
-?>
\ No newline at end of file
+?>

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/search/include/renderers/TasksHtmlSearchRenderer.class
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/search/include/renderers/TasksHtmlSearchRenderer.class	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/search/include/renderers/TasksHtmlSearchRenderer.class	2011-02-24 17:31:31 UTC (rev 11977)
@@ -68,7 +68,7 @@
 						. ' <td width="5%"> </td>'
 						. ' <td>'.db_result($result, $i, 'project_task_id').'</td>'
 						. ' <td>'
-							. '<a href="/pm/task.php?func=detailtask&project_task_id='
+							. '<a href="'.$GLOBALS['sys_urlprefix'].'/pm/task.php?func=detailtask&project_task_id='
 							. db_result($result, $i, 'project_task_id').'&group_id='.$this->groupId
 							. '&group_project_id='.db_result($result, $i, 'group_project_id').'">'
 							. html_image('ic/msg.png', '10', '12', array('border'=>'0')).' '
@@ -94,4 +94,4 @@
 	}
 }
 
-?>
\ No newline at end of file
+?>

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/search/include/renderers/TrackersHtmlSearchRenderer.class
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/search/include/renderers/TrackersHtmlSearchRenderer.class	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/search/include/renderers/TrackersHtmlSearchRenderer.class	2011-02-24 17:31:31 UTC (rev 11977)
@@ -66,7 +66,7 @@
 						. '<td width="5%"> </td>'
 						. '<td>'.db_result($result, $i, 'artifact_id').'</td>'
 						. '<td>'
-							. '<a href="/tracker/?func=detail&group_id='.$this->groupId.'&aid='.db_result($result, $i, 'artifact_id')
+							. '<a href="'.$GLOBALS['sys_urlprefix'].'/tracker/?func=detail&group_id='.$this->groupId.'&aid='.db_result($result, $i, 'artifact_id')
 							. '&atid='.db_result($result, $i, 'group_artifact_id').'">'
 							. html_image('ic/msg.png', '10', '12', array('border'=>'0')).' '.db_result($result, $i, 'summary')
 							. '</a></td>'		
@@ -89,4 +89,4 @@
 	}
 }
 
-?>
\ No newline at end of file
+?>

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/search/index.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/search/index.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/search/index.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -12,6 +12,7 @@
  */
 
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('www/tracker/include/ArtifactTypeHtml.class');
 require_once ('www/search/include/SearchManager.class');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/sendmessage.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/sendmessage.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/sendmessage.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -25,6 +25,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 
 $toaddress = getStringFromRequest('toaddress');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/snapshots.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/snapshots.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/snapshots.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -11,6 +11,7 @@
 
 $no_gz_buffer=true;
 
+require_once('env.inc.php');
 require_once('pre.php');
 
 // Get current information

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/snippet/add_snippet_to_package.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/snippet/add_snippet_to_package.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/snippet/add_snippet_to_package.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -12,6 +12,7 @@
   */
 
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('www/snippet/snippet_utils.php');
 
@@ -68,7 +69,7 @@
 			$result=db_query("SELECT * FROM snippet_version WHERE snippet_version_id='$snippet_version_id'");
 			if (!$result || db_numrows($result) < 1) {
 				echo '<h1>' .$Language->getText('add_snippet','error_snippet_doesnt_exist').'</h1>';
-				echo '<a href="/snippet/add_snippet_to_package.php?snippet_package_version_id='.$snippet_package_version_id.'">' .$Language->getText('add_snippet','back_to_add_page').'</a>';
+				echo '<a href="'.$GLOBALS['sys_urlprefix'].'/snippet/add_snippet_to_package.php?snippet_package_version_id='.$snippet_package_version_id.'">' .$Language->getText('add_snippet','back_to_add_page').'</a>';
 				handle_add_exit();
 			}
 
@@ -80,7 +81,7 @@
 				"AND snippet_version_id='$snippet_version_id'");
 			if ($result && db_numrows($result) > 0) {
 				echo '<h1>'.$Language->getText('add_snippet','error_snippet_already_added').'</h1>';
-				echo '<a href="/snippet/add_snippet_to_package.php?snippet_package_version_id='.$snippet_package_version_id.'">'.$Language->getText('add_snippet','back_to_add_page').'</a>';
+				echo '<a href="'.$GLOBALS['sys_urlprefix'].'/snippet/add_snippet_to_package.php?snippet_package_version_id='.$snippet_package_version_id.'">'.$Language->getText('add_snippet','back_to_add_page').'</a>';
 				handle_add_exit();
 			}
 
@@ -99,7 +100,7 @@
 			}
 		} else {
 			echo '<h1>' .$Language->getText('add_snippet','error_go_back_and_fill_all').'</h1>';
-			echo '<a href="/snippet/add_snippet_to_package.php?snippet_package_version_id='.$snippet_package_version_id.'">'.$Language->getText('add_snippet','back_to_add_page').'</a>';
+			echo '<a href="'.$GLOBALS['sys_urlprefix'].'/snippet/add_snippet_to_package.php?snippet_package_version_id='.$snippet_package_version_id.'">'.$Language->getText('add_snippet','back_to_add_page').'</a>';
 			handle_add_exit();
 		}
 
@@ -173,7 +174,7 @@
 		for ($i=0; $i<$rows; $i++) {
 			echo '
 			<tr '. $GLOBALS['HTML']->boxGetAltRowStyle($i) .'><td align="center">
-				<a href="/snippet/delete.php?type=frompackage&snippet_version_id='.
+				<a href="'.$GLOBALS['sys_urlprefix'].'/snippet/delete.php?type=frompackage&snippet_version_id='.
 				db_result($result,$i,'snippet_version_id').
 				'&snippet_package_version_id='.$snippet_package_version_id.
 				'">' . html_image("ic/trash.png","16","16",array("border"=>"0")) . '</a></td><td width="99%">'.

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/snippet/addversion.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/snippet/addversion.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/snippet/addversion.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -12,6 +12,7 @@
   */
 
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('www/snippet/snippet_utils.php');
 
@@ -172,7 +173,7 @@
 <?php echo $Language->getText('snippet_addversion','if_new_window_opened'); ?>
 </p>
 <p>
-<a href="/snippet/add_snippet_to_package.php?snippet_package_version_id=<?php echo $snippet_package_version_id; ?>" target="_blank"><?php echo $Language->getText('snippet_addversion','link_add_snippets_to_package'); ?></a></p>
+<a href="<?php echo $GLOBALS['sys_urlprefix']; ?>/snippet/add_snippet_to_package.php?snippet_package_version_id=<?php echo $snippet_package_version_id; ?>" target="_blank"><?php echo $Language->getText('snippet_addversion','link_add_snippets_to_package'); ?></a></p>
 <p><?php echo $Language->getText('snippet_addversion','browse_the_library'); ?></p>
 <p>
 

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/snippet/browse.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/snippet/browse.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/snippet/browse.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -11,6 +11,7 @@
   *
   */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('www/snippet/snippet_utils.php');
 
@@ -74,7 +75,7 @@
 	}
 	for ($i=0; $i<$rows2; $i++) {
 		echo '
-			<tr '. $GLOBALS['HTML']->boxGetAltRowStyle($i) .'><td rowspan="2"><a href="/snippet/detail.php?type=package&id='.
+			<tr '. $GLOBALS['HTML']->boxGetAltRowStyle($i) .'><td rowspan="2"><a href="'.$GLOBALS['sys_urlprefix'].'/snippet/detail.php?type=package&id='.
 			db_result($result2,$i,'snippet_package_id').'"><strong>'.
 			db_result($result2,$i,'snippet_package_id').'</strong></a></td><td><strong>'.
 			db_result($result2,$i,'name').'</td><td>'.
@@ -90,9 +91,9 @@
 	}
 	for ($i=0; $i<$rows; $i++) {
 		echo '
-			<tr '. $GLOBALS['HTML']->boxGetAltRowStyle($i) .'><td rowspan="2"><a href="/snippet/detail.php?type=snippet&id='.
+			<tr '. $GLOBALS['HTML']->boxGetAltRowStyle($i) .'><td rowspan="2"><a href="'.$GLOBALS['sys_urlprefix'].'/snippet/detail.php?type=snippet&id='.
 			db_result($result,$i,'snippet_id').'"><strong>'.
-			db_result($result,$i,'snippet_id').'</strong></a></td><td><strong><a href="/snippet/detail.php?type=snippet&id='.
+			db_result($result,$i,'snippet_id').'</strong></a></td><td><strong><a href="'.$GLOBALS['sys_urlprefix'].'/snippet/detail.php?type=snippet&id='.
 			db_result($result,$i,'snippet_id').'">'.db_result($result,$i,'name').'</a></td><td>'.
 			$GLOBALS['HTML']->createLinkToUserHome(db_result($result, $i, 'user_name'), db_result($result, $i, 'realname')).'</td></tr>';
 		echo '

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/snippet/delete.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/snippet/delete.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/snippet/delete.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -12,6 +12,7 @@
   */
 
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('www/snippet/snippet_utils.php');
 /*

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/snippet/detail.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/snippet/detail.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/snippet/detail.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -12,6 +12,7 @@
   */
 
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('www/snippet/snippet_utils.php');
 
@@ -68,12 +69,12 @@
 		for ($i=0; $i<$rows; $i++) {
 			echo '
 				<tr '. $GLOBALS['HTML']->boxGetAltRowStyle($i) .'><td>'.db_result($result,$i,'snippet_version_id').
-				'</td><td><a href="/snippet/download.php?type=snippet&id='.
+				'</td><td><a href="'.$GLOBALS['sys_urlprefix'].'/snippet/download.php?type=snippet&id='.
 				db_result($result,$i,'snippet_version_id').'"><strong>'.
 				db_result($result,$i,'version').'</strong></a></td><td>'. 
 				date($sys_datefmt,db_result($result,$i,'post_date')).'</td><td>'.
 				$GLOBALS['HTML']->createLinkToUserHome(db_result($result, $i, 'user_name'), db_result($result, $i, 'realname')).'</td>'.
-				'<td align="center"><a href="/snippet/delete.php?type=snippet&snippet_version_id='.
+				'<td align="center"><a href="'.$GLOBALS['sys_urlprefix'].'/snippet/delete.php?type=snippet&snippet_version_id='.
 				db_result($result,$i,'snippet_version_id').
 				'">' . html_image("ic/trash.png","16","16",array("border"=>"0")) . '</a></td></tr>';
 
@@ -107,7 +108,7 @@
 		Show a link so you can add a new version of this snippet
 	*/
 	echo '
-	<h3><a href="/snippet/addversion.php?type=snippet&id='.htmlspecialchars($id).'"><span class="important">'.$Language->getText('snippet_detail','submit_a_new_snippet').'</span></a></h3>
+	<h3><a href="'.$GLOBALS['sys_urlprefix'].'/snippet/addversion.php?type=snippet&id='.htmlspecialchars($id).'"><span class="important">'.$Language->getText('snippet_detail','submit_a_new_snippet').'</span></a></h3>
 	<p>' .$Language->getText('snippet_detail','you_can_submit_a_new').'.</p>';
 
 	snippet_footer(array());
@@ -159,15 +160,15 @@
 
 		for ($i=0; $i<$rows; $i++) {
 			echo '
-			<tr '. $GLOBALS['HTML']->boxGetAltRowStyle($i) .'><td><a href="/snippet/detail.php?type=packagever&id='.
+			<tr '. $GLOBALS['HTML']->boxGetAltRowStyle($i) .'><td><a href="'.$GLOBALS['sys_urlprefix'].'/snippet/detail.php?type=packagever&id='.
 				db_result($result,$i,'snippet_package_version_id').'"><strong>'.
 				db_result($result,$i,'version').'</strong></a></td><td>'.
 				date($sys_datefmt,db_result($result,$i,'post_date')).'</td><td>'.
 				$GLOBALS['HTML']->createLinkToUserHome(db_result($result, $i, 'user_name'), db_result($result, $i, 'realname')).'</td>'.
-				'<td align="center"><a href="/snippet/add_snippet_to_package.php?snippet_package_version_id='.
+				'<td align="center"><a href="'.$GLOBALS['sys_urlprefix'].'/snippet/add_snippet_to_package.php?snippet_package_version_id='.
 				db_result($result,$i,'snippet_package_version_id').
 				'">' . html_image("ic/pencil.png","20","25",array("border"=>"0")) .
-				'</a>       <a href="/snippet/delete.php?type=package&snippet_package_version_id='.
+				'</a>       <a href="'.$GLOBALS['sys_urlprefix'].'/snippet/delete.php?type=package&snippet_package_version_id='.
 				db_result($result,$i,'snippet_package_version_id').
 				'">' . html_image("ic/trash.png","16","16",array("border"=>"0")) . '</a></td></tr>';
 		}
@@ -196,7 +197,7 @@
 		Show a form so you can add a new version of this package
 	*/
 	echo '
-	<h3><a href="/snippet/addversion.php?type=package&id='.$id.'"><span class="important">' .$Language->getText('snippet_detail','submit_a_new_version').'</span></a></h3>
+	<h3><a href="'.$GLOBALS['sys_urlprefix'].'/snippet/addversion.php?type=package&id='.$id.'"><span class="important">' .$Language->getText('snippet_detail','submit_a_new_version').'</span></a></h3>
 	<p>' .$Language->getText('snippet_detail','you_can_submit_a_new_version_of_package').'.</p>';
 
 	snippet_footer(array());

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/snippet/download.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/snippet/download.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/snippet/download.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -13,6 +13,7 @@
 
 $no_gz_buffer=true;
 
+require_once('../env.inc.php');
 require_once('pre.php');
 
 $id = getIntFromRequest('id');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/snippet/index.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/snippet/index.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/snippet/index.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -10,6 +10,7 @@
   * @version   $Id$
   *
   */
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('www/snippet/snippet_utils.php');
 
@@ -47,7 +48,7 @@
 
 	$existing_snippets = create_snippet_hash("SELECT language, count(*) as count from snippet group by language", "language");
 	for ($i=1; $i<count($SCRIPT_LANGUAGE); $i++) {
-		$return .= '<li><a href="/snippet/browse.php?by=lang&lang='.$i.'">'.$SCRIPT_LANGUAGE[$i].'</a> (';
+		$return .= '<li><a href="'.$GLOBALS['sys_urlprefix'].'/snippet/browse.php?by=lang&lang='.$i.'">'.$SCRIPT_LANGUAGE[$i].'</a> (';
 		if ($existing_snippets[$i]) {
 			$return .= $existing_snippets[$i].')</li>';
 		} else {
@@ -62,7 +63,7 @@
 	
 	$existing_categories = create_snippet_hash("SELECT category, count(*) as count from snippet group by category", "category");
 	for ($i=1; $i<count($SCRIPT_CATEGORY); $i++) {
-		$return .= '<li><a href="/snippet/browse.php?by=cat&cat='.$i.'">'.$SCRIPT_CATEGORY[$i].'</a> (';
+		$return .= '<li><a href="'.$GLOBALS['sys_urlprefix'].'/snippet/browse.php?by=cat&cat='.$i.'">'.$SCRIPT_CATEGORY[$i].'</a> (';
 		if ($existing_categories[$i]) {
 			$return .= $existing_categories[$i].')</li>';
 		} else {

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/snippet/package.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/snippet/package.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/snippet/package.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -12,6 +12,7 @@
   */
 
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('www/snippet/snippet_utils.php');
 
@@ -95,7 +96,7 @@
 <p>
 <?php echo $Language->getText('snippet_package','if_a_new_window'); ?></p>
 
-<p><a href="/snippet/add_snippet_to_package.php?snippet_package_version_id=<?php echo $snippet_package_version_id; ?>" target="_blank"><?php echo $Language->getText('snippet_package','add_snippet_to'); ?></a></p>
+<p><a href="<?php echo $GLOBALS['sys_urlprefix']; ?>/snippet/add_snippet_to_package.php?snippet_package_version_id=<?php echo $snippet_package_version_id; ?>" target="_blank"><?php echo $Language->getText('snippet_package','add_snippet_to'); ?></a></p>
 
 <p>
 <?php echo $Language->getText('snippet_package','browse_the_libary'); ?>
@@ -137,13 +138,13 @@
 	<td><strong><?php echo $Language->getText('snippet_package','language') ?>:</strong><?php echo utils_requiredField(); ?><br />
 		<?php echo html_build_select_box_from_array ($SCRIPT_LANGUAGE,'language'); ?>
 		<br />
-		<!--<a href="/support/?func=addsupport&group_id=1"><?php echo $Language->getText('snippet_package','suggest_a_language'); ?></a>-->
+		<!--<a href="<?php echo $GLOBALS['sys_urlprefix']; ?>/support/?func=addsupport&group_id=1"><?php echo $Language->getText('snippet_package','suggest_a_language'); ?></a>-->
 	</td>
 
 	<td><strong><?php echo $Language->getText('snippet_package','category') ?>:</strong><?php echo utils_requiredField(); ?><br />
 		<?php echo html_build_select_box_from_array ($SCRIPT_CATEGORY,'category'); ?>
 		<br />
-		<!-- <a href="/support/?func=addsupport&group_id=1"><?php echo $Language->getText('snippet_package','suggest_a_category'); ?></a>-->
+		<!-- <a href="<?php echo $GLOBALS['sys_urlprefix']; ?>/support/?func=addsupport&group_id=1"><?php echo $Language->getText('snippet_package','suggest_a_category'); ?></a>-->
 	</td>
 	</tr>
  

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/snippet/snippet_utils.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/snippet/snippet_utils.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/snippet/snippet_utils.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -89,9 +89,9 @@
 	*/
 	
 	echo '<p><strong>';
-	echo '<a href="/snippet/">' .$Language->getText('snippet_utils','browse').'</a>
-		 | <a href="/snippet/submit.php">' .$Language->getText('snippet_utils','submit_a_new_snippet').'</a>
-		 | <a href="/snippet/package.php">' .$Language->getText('snippet_utils','create_a_package').'</a></strong>';
+	echo '<a href="'.$GLOBALS['sys_urlprefix'].'/snippet/">' .$Language->getText('snippet_utils','browse').'</a>
+		 | <a href="'.$GLOBALS['sys_urlprefix'].'/snippet/submit.php">' .$Language->getText('snippet_utils','submit_a_new_snippet').'</a>
+		 | <a href="'.$GLOBALS['sys_urlprefix'].'/snippet/package.php">' .$Language->getText('snippet_utils','create_a_package').'</a></strong>';
 	echo ' ';
 }
 
@@ -140,7 +140,7 @@
 		for ($i=0; $i<$rows; $i++) {
 			echo '
 			<tr '. $GLOBALS['HTML']->boxGetAltRowStyle($i) .'><td>'.db_result($result,$i,'snippet_version_id').
-				'</td><td><a href="/snippet/download.php?type=snippet&id='.
+				'</td><td><a href="'.$GLOBALS['sys_urlprefix'].'/snippet/download.php?type=snippet&id='.
 				db_result($result,$i,'snippet_version_id').'">'.
 				db_result($result,$i,'version').'</a></td><td>'.
 				db_result($result,$i,'name').'</td><td>'.

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/snippet/submit.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/snippet/submit.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/snippet/submit.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -12,6 +12,7 @@
   */
 
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('www/snippet/snippet_utils.php');
 
@@ -102,13 +103,13 @@
 	<td><strong><?php echo $Language->getText('snippet_submit','language'); ?>:</strong><?php echo utils_requiredField(); ?><br />
 		<?php echo html_build_select_box_from_array ($SCRIPT_LANGUAGE,'language'); ?>
 		<br />
-		<!-- FIXME: Where should this link go to? <a href="/support/?func=addsupport&group_id=1"><?php echo $Language->getText('snippet_submit','suggest_a_language'); ?></a> -->
+		<!-- FIXME: Where should this link go to? <a href="<?php echo $GLOBALS['sys_urlprefix']; ?>/support/?func=addsupport&group_id=1"><?php echo $Language->getText('snippet_submit','suggest_a_language'); ?></a> -->
 	</td>
 
 	<td><strong><?php echo $Language->getText('snippet_submit','category'); ?>:</strong><?php echo utils_requiredField(); ?><br />
 		<?php echo html_build_select_box_from_array ($SCRIPT_CATEGORY,'category'); ?>
                 <br />
-                <!-- FIXME: Where should this link go to? <a href="/support/?func=addsupport&group_id=1"><?php echo $Language->getText('snippet_submit','suggest_a_category'); ?></a> -->
+                <!-- FIXME: Where should this link go to? <a href="<?php echo $GLOBALS['sys_urlprefix']; ?>/support/?func=addsupport&group_id=1"><?php echo $Language->getText('snippet_submit','suggest_a_category'); ?></a> -->
 	</td>
 	</tr>
 

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/softwaremap/trove_list.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/softwaremap/trove_list.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/softwaremap/trove_list.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -11,8 +11,13 @@
   *
   */
 
+require_once('../env.inc.php');
+require_once('pre.php'); 
 
-require_once('pre.php');    
+// entry for hierarchy plugin
+// we didn't find any other way to do it :(
+plugin_hook('tree');  
+
 require_once('www/include/trove.php');
 
 if (!$sys_use_trove) {

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/source.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/source.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/source.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -11,6 +11,7 @@
  *
  */
 
+require_once('env.inc.php');
 require_once('pre.php');
 
 global $sys_show_source;

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/stats/graphs.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/stats/graphs.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/stats/graphs.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -10,6 +10,7 @@
   * @version   $Id$
   *
   */
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('site_stats_utils.php');
 

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/stats/i18n.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/stats/i18n.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/stats/i18n.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -10,6 +10,7 @@
   * @version   $Id$
   *
   */
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('site_stats_utils.php');
 

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/stats/index.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/stats/index.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/stats/index.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -12,6 +12,7 @@
   */
 
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('site_stats_utils.php');
 

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/stats/lastlogins.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/stats/lastlogins.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/stats/lastlogins.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -13,6 +13,7 @@
   *
   */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 
 session_require(array('group'=>'1','admin_flags'=>'A'));

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/stats/projects.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/stats/projects.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/stats/projects.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -13,6 +13,7 @@
 
 
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('site_stats_utils.php');
 

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/stats/site_stats_utils.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/stats/site_stats_utils.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/stats/site_stats_utils.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -310,7 +310,7 @@
 		$i = $offset;	
 		while ( $row = db_fetch_array($res) ) {
 			print	'<tr ' . $GLOBALS['HTML']->boxGetAltRowStyle($i) . ' align="right">'
-				. '<td>' . ($i + 1) . '. <a href="/project/stats/?group_id=' . $row["group_id"] . '">' . $row["group_name"] . '</a></td>'
+				. '<td>' . ($i + 1) . '. <a href="'.$GLOBALS['sys_urlprefix'].'/project/stats/?group_id=' . $row["group_id"] . '">' . $row["group_name"] . '</a></td>'
 				. '<td>  ' . number_format( $row["site_views"],0 ) . '</td>'
 				. '<td>  ' . number_format( $row["subdomain_views"],0 ) . '</td>'
 				. '<td>  ' . number_format( $row["downloads"],0 ) . '</td>'

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/stats/users_graph.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/stats/users_graph.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/stats/users_graph.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -12,6 +12,7 @@
   */
 
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('graph_lib.php');
 

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/stats/views_graph.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/stats/views_graph.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/stats/views_graph.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -12,6 +12,7 @@
   */
 
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('graph_lib.php');
 

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/survey/admin/add_question.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/survey/admin/add_question.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/survey/admin/add_question.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -25,6 +25,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../../env.inc.php');
 require_once('pre.php');
 require_once('www/survey/survey_utils.php');
 $is_admin_page='y';

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/survey/admin/add_survey.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/survey/admin/add_survey.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/survey/admin/add_survey.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -25,6 +25,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../../env.inc.php');
 require_once('pre.php');
 require_once('www/survey/survey_utils.php');
 require_once('www/survey/admin/survey_utils.php');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/survey/admin/edit_question.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/survey/admin/edit_question.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/survey/admin/edit_question.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -25,6 +25,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../../env.inc.php');
 require_once('pre.php');
 require_once('www/survey/survey_utils.php');
 

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/survey/admin/edit_survey.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/survey/admin/edit_survey.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/survey/admin/edit_survey.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -25,6 +25,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../../env.inc.php');
 require_once('pre.php');
 require_once('www/survey/survey_utils.php');
 require_once('www/survey/admin/survey_utils.php');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/survey/admin/graphs.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/survey/admin/graphs.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/survey/admin/graphs.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -17,6 +17,7 @@
  *  @ hight 
  */ 
 
+require_once('../../env.inc.php');
 require_once('pre.php');
 
 // Check if we have jpgraph

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/survey/admin/index.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/survey/admin/index.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/survey/admin/index.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -25,6 +25,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../../env.inc.php');
 require_once('pre.php');
 require_once('www/survey/include/SurveyHTML.class');
 
@@ -42,9 +43,9 @@
 
 ?>
 
-<?php echo $Language->getText('survey_admin_index','its_simple_to_create', array('<p><strong>/survey/survey.php?group_id='.$group_id.'&survey_id=XX</strong>')); ?>
+<?php echo $Language->getText('survey_admin_index','its_simple_to_create', array('<p><strong>'.$GLOBALS['sys_urlprefix'].'/survey/survey.php?group_id='.$group_id.'&survey_id=XX</strong>')); ?>
 
-<p><?php echo $Language->getText('survey_admin_index','you_can_now_activate',array('<a href="/survey/admin/survey.php?group_id='.$group_id.'">','</a>')); ?>
+<p><?php echo $Language->getText('survey_admin_index','you_can_now_activate',array('<a href="'.$GLOBALS['sys_urlprefix'].'/survey/admin/survey.php?group_id='.$group_id.'">','</a>')); ?>
 
 </p>
 <p>

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/survey/admin/question.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/survey/admin/question.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/survey/admin/question.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -8,6 +8,7 @@
   *
   *
   */
+require_once('../../env.inc.php');
 require_once('pre.php');
 require_once('common/survey/SurveyQuestion.class');
 require_once('common/survey/SurveyQuestionFactory.class');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/survey/admin/show_questions.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/survey/admin/show_questions.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/survey/admin/show_questions.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -25,6 +25,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../../env.inc.php');
 require_once('pre.php');
 require_once('www/survey/survey_utils.php');
 

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/survey/admin/show_results.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/survey/admin/show_results.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/survey/admin/show_results.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -25,6 +25,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../../env.inc.php');
 require_once('pre.php');
 
 require_once('common/survey/Survey.class');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/survey/admin/show_results_aggregate.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/survey/admin/show_results_aggregate.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/survey/admin/show_results_aggregate.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -25,6 +25,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../../env.inc.php');
 require_once('pre.php');
 require_once('HTML_Graphs.php');
 require_once('www/survey/survey_utils.php');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/survey/admin/show_results_comments.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/survey/admin/show_results_comments.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/survey/admin/show_results_comments.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -25,6 +25,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../../env.inc.php');
 require_once('pre.php');
 require_once('HTML_Graphs.php');
 require_once('www/survey/survey_utils.php');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/survey/admin/show_results_csv.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/survey/admin/show_results_csv.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/survey/admin/show_results_csv.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -25,6 +25,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../../env.inc.php');
 require_once('pre.php');
 require_once('HTML_Graphs.php');
 require_once('www/survey/survey_utils.php');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/survey/admin/show_results_individual.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/survey/admin/show_results_individual.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/survey/admin/show_results_individual.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -26,6 +26,7 @@
  */
 
 
+require_once('../../env.inc.php');
 require_once('pre.php');
 require_once('www/survey/survey_utils.php');
 

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/survey/admin/survey.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/survey/admin/survey.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/survey/admin/survey.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -9,6 +9,7 @@
   *
   *
   */
+require_once('../../env.inc.php');
 require_once('pre.php');
 require_once('common/survey/Survey.class');
 require_once('common/survey/SurveyFactory.class');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/survey/include/SurveyHTML.class
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/survey/include/SurveyHTML.class	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/survey/include/SurveyHTML.class	2011-02-24 17:31:31 UTC (rev 11977)
@@ -246,7 +246,7 @@
 			$ret.= '<td><center>[<a href="survey.php?group_id='.$group_id.'&survey_id='.
 				$survey_id.'&is_up=1&updown=Y'.
 				'&question_id='.$arr_to_del[$i]->getID().'">Up</a>]';
-			$ret.= '[<a href="/survey/admin/survey.php?group_id='.$group_id.'&survey_id='.
+			$ret.= '[<a href="'.$GLOBALS['sys_urlprefix'].'/survey/admin/survey.php?group_id='.$group_id.'&survey_id='.
 				$survey_id.'&is_up=0&updown=Y'.
 				'&question_id='.$arr_to_del[$i]->getID().'">Down</a>]</center></td>';
 			
@@ -387,7 +387,7 @@
 				$ret.= '<td>'.$surveys[$i]->getID().'</td>';
 			}
 			
-			$ret.= '<td>'.$strike_open.'<a href="/survey/survey.php?group_id='.$group_id.'&survey_id='.
+			$ret.= '<td>'.$strike_open.'<a href="'.$GLOBALS['sys_urlprefix'].'/survey/survey.php?group_id='.$group_id.'&survey_id='.
 				$surveys[$i]->getID().'">'.$surveys[$i]->getTitle().'</A>'.$strike_close.'</td>';
 
 			if ($show_questions) {
@@ -408,13 +408,13 @@
 			}
 			if ($show_edit) {
 				/* Edit/Delete Link */
-				$ret.= "<td>[<a href=\"/survey/admin/survey.php?group_id=$group_id&survey_id=".
+				$ret.= "<td>[<a href=\"".$GLOBALS['sys_urlprefix']."/survey/admin/survey.php?group_id=$group_id&survey_id=".
 					$surveys[$i]->getID().'">';
 				$ret.= $Language->getText('survey_admin', 'edit').'</a>] ';
 
 				/* We don;t support delete yet. Need to delete all results as well */
 				/*
-				$ret.= "[<a href=\"/survey/admin/survey.php?delete=Y&group_id=$group_id&survey_id=".
+				$ret.= "[<a href=\"".$GLOBALS['sys_urlprefix']."/survey/admin/survey.php?delete=Y&group_id=$group_id&survey_id=".
 					$surveys[$i]->getID().'">';
 				$ret.= $Language->getText('survey_admin', 'delete').'</a>]
                                 */
@@ -422,19 +422,19 @@
 			}
 			if ($show_result) {
 				/* Edit/Delete Link */
-				$ret.= "<td>[<a href=\"/survey/admin/show_results.php?group_id=$group_id&survey_id=".
+				$ret.= "<td>[<a href=\"".$GLOBALS['sys_urlprefix']."/survey/admin/show_results.php?group_id=$group_id&survey_id=".
 					$surveys[$i]->getID().'">';
 				$ret.= $Language->getText('survey_index', 'survey_result').'</a>]</td>';
 			}
 			if ($show_result_graph) {
 				/* Edit/Delete Link */
-				$ret.= "<td>[<a href=\"/survey/admin/show_results.php?graph=yes&group_id=$group_id&survey_id=".
+				$ret.= "<td>[<a href=\"".$GLOBALS['sys_urlprefix']."/survey/admin/show_results.php?graph=yes&group_id=$group_id&survey_id=".
 					$surveys[$i]->getID().'">';
 				$ret.= $Language->getText('survey_index', 'survey_result_graph').'</a>]</td>';
 			}
 			if ($show_result_comment) {
 				/* Edit/Delete Link */
-				$ret.= "<td>[<a href=\"/survey/admin/show_results.php?graph=yes&show_comment=yes&group_id=$group_id&survey_id=".$surveys[$i]->getID().'">';
+				$ret.= "<td>[<a href=\"".$GLOBALS['sys_urlprefix']."/survey/admin/show_results.php?graph=yes&show_comment=yes&group_id=$group_id&survey_id=".$surveys[$i]->getID().'">';
 				$ret.= $Language->getText('survey_index', 'survey_result_comments').'</a>]</td>';
 			}
 			$ret.= "</tr>\n";
@@ -544,7 +544,7 @@
 		
 		$ret.='<tr><td align="center" colspan="2">'.
 			'<input type="submit" name="submit" value="'.$Language->getText('general','submit').'" />'.
-			'<br /><a href="/survey/privacy.php">'.$Language->getText('survey','survey_privacy').'</a>'.
+			'<br /><a href="'.$GLOBALS['sys_urlprefix'].'/survey/privacy.php">'.$Language->getText('survey','survey_privacy').'</a>'.
 			'</td></tr></form></table>';
 		
 		return $ret;

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/survey/index.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/survey/index.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/survey/index.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -24,6 +24,7 @@
  * along with GForge; if not, write to the Free Software
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('common/survey/SurveyFactory.class');
 require_once('www/survey/include/SurveyHTML.class');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/survey/privacy.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/survey/privacy.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/survey/privacy.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -26,6 +26,7 @@
  */
 
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('vote_function.php');
 require_once('www/survey/survey_utils.php');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/survey/rating_resp.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/survey/rating_resp.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/survey/rating_resp.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -26,6 +26,7 @@
  */
 
 
+require_once('../env.inc.php');
 require_once('pre.php');
 
 $HTML->header(array('title'=>$Language->getText('survey_rating_resp','title')));

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/survey/survey.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/survey/survey.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/survey/survey.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -26,6 +26,7 @@
  */
 
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('common/survey/Survey.class');
 require_once('www/survey/include/SurveyHTML.class');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/survey/survey_resp.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/survey/survey_resp.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/survey/survey_resp.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -26,6 +26,7 @@
  */
 
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('common/survey/Survey.class');
 require_once('common/survey/SurveyResponse.class');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/tarballs.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/tarballs.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/tarballs.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -11,6 +11,7 @@
 
 $no_gz_buffer=true;
 
+require_once('env.inc.php');
 require_once('pre.php');
 
 // get current information

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/COPYING
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/COPYING	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/COPYING	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,341 @@
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) 19yy  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 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 General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) 19yy name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
+

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/README.txt
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/README.txt	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/README.txt	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,60 @@
+--------------------------------------------------------------------------------
+                          T h e   S l i Q   T h e m e
+--------------------------------------------------------------------------------
+
+About the SliQ Theme:
+=====================
+
+The SliQ (read sleek) theme was created in an attempt to deliver a pleasurable 
+collaboration experience. The work on SliQ hasn't been finished yet, but it is 
+hopefully useful already. We therefore release it. Enjoy!
+
+The SliQ theme is Copyright 2006 (c) SAP (www.sap.com)
+
+The SliQ theme is free software; you can redistribute it and/or modify it under 
+the terms of the GNU General Public License as published by the Free Software 
+Foundation; either version 2 of the License, or (at your option) any later 
+version.
+
+
+Credits:
+========
+
+Author:     Barak Naveh (www.sap.com)
+  
+Design by:  <anon until theme finished>
+
+
+Installation:
+=============
+
+1. Copy the 'sliq' folder to the 'www/themes' folder of your GForge 
+   installation.
+
+2. Login to GForge as a site administrator and use the web interface to register
+   the theme.
+  
+
+Dependencies:
+=============
+
+WARNING: This version of the theme was designed to work with GForge 4.5.11. 
+
+It is hoped that someone will adapt it to run off the svn trunk.
+
+
+Customization:
+==============
+
+You may wish to customize the top left logo. You will find a blank version of 
+the image on which you can put a logo of your choice.
+
+
+History:
+========
+
+ver 0.5.0: 
+ - initial public release.
+
+
+ 
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/Theme.class
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/Theme.class	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/Theme.class	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,1150 @@
+<?php
+
+require_once('www/include/Layout.class');
+
+define(THEME_DIR, $GLOBALS['sys_urlprefix'].'/themes/gforge');
+
+define(TOP_TAB_HEIGHT, 30);
+define(BOTTOM_TAB_HEIGHT, 22);
+
+class Theme extends Layout {
+
+    function Theme() {
+        // Parent constructor
+        $this->Layout();
+
+        $this->imgroot = THEME_DIR.'/images/';
+        $this->COLOR_CONTENT_BACK= '#ffffff';
+        $this->COLOR_LTBACK1= '#eeeeef';
+        $this->COLOR_LTBACK2= '#fafafa';
+        $this->COLOR_SELECTED_TAB= '#e0e0e0';
+        $this->COLOR_HTMLBOX_TITLE = '#bbbbbb';
+        $this->COLOR_HTMLBOX_BACK = '#eaecef';
+        $this->FONT_CONTENT = 'helvetica';
+        $this->FONT_HTMLBOX_TITLE = 'helvetica';
+        $this->FONTCOLOR_HTMLBOX_TITLE = '#333333';
+        $this->FONTCOLOR_CONTENT = '#333333';
+        $this->FONTSIZE = 'small';
+        $this->FONTSIZE_SMALLER='x-small';
+        $this->FONTSIZE_SMALLEST='xx-small';
+        $this->FONTSIZE_HTMLBOX_TITLE = 'small';
+        $this->bgpri = array();
+    }
+
+    /**
+     * Layout() - Constructor
+     */
+    function Layout() {
+        GLOBAL $bgpri;
+        // Constructor for parent class...
+        if ( file_exists($GLOBALS['sys_custom_path'] . '/index_std.php') )
+        $this->rootindex = $GLOBALS['sys_custom_path'] . '/index_std.php';
+        $this->Error();
+
+        /*
+        Set up the priority color array one time only
+        */
+        $bgpri[1] = '#dadada';
+        $bgpri[2] = '#dacaca';
+        $bgpri[3] = '#dababa';
+        $bgpri[4] = '#daaaaa';
+        $bgpri[5] = '#da8a8a';
+
+        //determine font for this platform
+        if (browser_is_windows() && browser_is_ie()) {
+
+            //ie needs smaller fonts
+            $this->FONTSIZE='x-small';
+            $this->FONTSIZE_SMALLER='xx-small';
+            $this->FONTSIZE_SMALLEST='7pt';
+
+        } else if (browser_is_windows()) {
+
+            //netscape on wintel
+            $this->FONTSIZE='small';
+            $this->FONTSIZE_SMALLER='x-small';
+            $this->FONTSIZE_SMALLEST='x-small';
+
+        } else if (browser_is_mac()){
+
+            //mac users need bigger fonts
+            $this->FONTSIZE='medium';
+            $this->FONTSIZE_SMALLER='small';
+            $this->FONTSIZE_SMALLEST='x-small';
+
+        } else {
+
+            //linux and other users
+            $this->FONTSIZE='small';
+            $this->FONTSIZE_SMALLER='x-small';
+            $this->FONTSIZE_SMALLEST='xx-small';
+
+        }
+
+        $this->FONTSIZE_HTMLBOX_TITLE = $this->FONTSIZE;
+    }
+
+    /**
+     *    createLinkToUserHome() - Creates a link to a user's home page    
+     * 
+     *    @param    string    The user's user_name
+     *    @param    string    The user's realname
+     */
+    function createLinkToUserHome($user_name, $realname) {
+        return '<a href="'.$GLOBALS['sys_urlprefix'].'/users/'.$user_name.'/">'.$realname.'</a>';
+    }
+
+    /**
+     *    header() - "steel theme" top of page
+     *
+     * @param    array    Header parameters array
+     */
+    function header($params) {
+        global $Language;
+
+        if (!$params['title']) {
+            $params['title'] =  $GLOBALS['sys_name'];
+        } else {
+            $params['title'] =  $GLOBALS['sys_name'] . ': ' . $params['title'];
+        }
+        print '<?xml version="1.0" encoding="' . $Language->getEncoding(). '"?>';
+        ?>
+
+<!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" xml:lang="en" lang="<?php echo $Language->getLanguageCode(); ?>">
+
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=<?php echo $Language->getEncoding(); ?>" />
+    <title><?php echo $params['title']; ?></title>
+    <link rel="icon" type="image/png" href="<?php echo $this->imgroot; ?>icon.png"/>
+    <link rel="shortcut icon" href="<?php echo $this->imgroot; ?>icon.png"/>
+    <link rel="alternate" title="<?php echo $GLOBALS['sys_name']; ?> - Project News Highlights RSS" href="<?php echo $GLOBALS['sys_urlprefix']; ?>/export/rss_sfnews.php" type="application/rss+xml"/>
+    <link rel="alternate" title="<?php echo $GLOBALS['sys_name']; ?> - Project News Highlights RSS" href="<?php echo $GLOBALS['sys_urlprefix']; ?>/export/rss20_news.php" type="application/rss+xml"/>
+    <link rel="alternate" title="<?php echo $GLOBALS['sys_name']; ?> - New Projects RSS" href="<?php echo $GLOBALS['sys_urlprefix']; ?>/export/rss_sfprojects.php" type="application/rss+xml"/>
+
+    <script language="JavaScript" type="text/javascript">
+    <!--
+
+    function admin_window(adminurl) {
+        AdminWin = window.open( adminurl, 'AdminWindow','scrollbars=yes,resizable=yes, toolbar=yes, height=400, width=400, top=2, left=2');
+        AdminWin.focus();
+    }
+    function help_window(helpurl) {
+        HelpWin = window.open( helpurl,'HelpWindow','scrollbars=yes,resizable=yes,toolbar=no,height=400,width=400');
+    }
+    // -->
+    <?php plugin_hook ("javascript",false) ; ?>
+    </script>
+    <?php
+    /*
+
+    WARNING - changing this font call can affect
+    INTERNATIONALIZATION
+
+    */
+
+    //gets font from Language Object
+    $site_fonts=$GLOBALS['Language']->getFont();
+
+    $this->headerCSS();
+    ?>
+
+</head>
+
+<body>
+
+  <?php
+  $this->bodyHeader($params);
+  }
+
+  function bodyHeader($params){
+        global $Language;
+  ?>
+<div class="header">
+  <table border="0" width="100%" cellspacing="0" cellpadding="0">
+      <tr>
+        <td class="topLeft"><a href="/"><?php echo html_image('header/top-logo.gif',205,54,array('border'=>'0')); ?></a></td>
+        <td class="middleRight"><?php echo $this->searchBox(); ?></td>
+        <td class="middleRight"><?php
+          if (session_loggedin()) {
+            ?>
+            <a href="<?php echo $GLOBALS['sys_urlprefix']; ?>/account/logout.php"><?php echo $Language->getText('common','logout'); ?></a> 
+            |
+            <a href="<?php echo $GLOBALS['sys_urlprefix']; ?>/account/"><?php echo $Language->getText('common','myaccount'); ?></a>
+            <?php
+          } else {
+            ?>
+            <a href="<?php echo $GLOBALS['sys_urlprefix']; ?>/account/login.php"><?php echo $Language->getText('common','login'); ?></a>
+            |
+            <a href="<?php echo $GLOBALS['sys_urlprefix']; ?>/account/register.php"><?php echo $Language->getText('common','newaccount'); ?></a>
+            <?php
+          }
+          echo $this->quickNav();
+        ?></td>
+        <td>  </td>
+      </tr>
+  
+  </table>
+</div>
+
+<!-- outer tabs -->
+<table border="0" width="100%" cellspacing="0" cellpadding="0">
+    <tr>
+        <td><?php echo $this->outerTabs($params); ?></td>
+    </tr>
+</table>
+
+<!-- inner tabs -->
+<table border="0" width="100%" cellspacing="0" cellpadding="0">
+    <?php
+    if (isset($params['group']) && $params['group']) {
+    ?>
+      <tr>
+        <td>
+           <?php
+           echo $this->projectTabs($params['toptab'],$params['group']);
+           ?>
+        </td>
+      </tr>
+    <?php
+    }
+    ?>
+</table>
+
+<table border="0" width="100%" cellspacing="0" cellpadding="0">  
+  <tr>
+    <td class="mainCanvas"> <!-- main body area -->
+    <?php
+    }
+
+    function footer($params) {
+    ?>
+    </td> <!-- end main body area -->
+  </tr>
+</table>  
+ 
+<!-- PLEASE LEAVE "Powered By GForge" on your site -->
+<br />
+<center>
+<a href="http://gforge.org/"><img src="/images/pow-gforge.png" alt="Powered By GForge Collaborative Development Environment" border="0" /></a>
+</center>
+
+<?php
+global $sys_show_source;
+global $Language;
+if ($sys_show_source) {
+    global $SCRIPT_NAME;
+    print '<a class="showsource" href="'.$GLOBALS['sys_urlprefix'].'/source.php?file=' . $SCRIPT_NAME . '"> '.$Language->getText('source','show_source').' </a>';
+}
+?>
+
+</body>
+</html>
+
+<?php
+
+    }
+
+    function headerCSS(){
+       ?>
+       <link rel="stylesheet" type="text/css" href="<?php echo THEME_DIR ?>/css/theme.css" />
+       <?php
+       plugin_hook ('cssfile',$this);
+    }
+
+    function getRootIndex() {
+        return $this->rootindex;
+    }
+
+    /**
+     * boxTop() - Top HTML box
+     *
+     * @param   string  Box title
+     * @param   bool    Whether to echo or return the results
+     * @param   string  The box background color
+     */
+    function boxTop($title) {
+        return '
+        <!-- Box Top Start -->
+
+        <table cellspacing="0" cellpadding="0" width="100%" border="0" background="'.$this->imgroot.'vert-grad.png">
+        <tr align="center">
+            <td valign="top" align="right" width="10" background="'.$this->imgroot.'box-topleft.png"><img src="'.$this->imgroot.'clear.png" width="10" height="20" /></td>
+            <td width="100%" background="'.$this->imgroot.'box-grad.png"><span class="titlebar">'.$title.'</span></td>
+            <td valign="top" width="10" background="'.$this->imgroot.'box-topright.png"><img src="'.$this->imgroot.'clear.png" width="10" height="20" /></td>
+        </tr>
+        <tr>
+            <td colspan="3">
+            <table cellspacing="2" cellpadding="2" width="100%" border="0">
+                <tr align="left">
+                    <td colspan="2">
+
+        <!-- Box Top End -->';
+    }
+
+    /**
+     * boxMiddle() - Middle HTML box
+     *
+     * @param   string  Box title
+     * @param   string  The box background color
+     */
+    function boxMiddle($title) {
+        return '
+        <!-- Box Middle Start -->
+                    </td>
+                </tr>
+                <tr align="center">
+                    <td colspan="2" background="'.$this->imgroot.'box-grad.png"><span class="titlebar">'.$title.'</span></td>
+                </tr>
+                <tr align="left">
+                    <td colspan="2">
+        <!-- Box Middle End -->';
+    }
+
+    /**
+     * boxBottom() - Bottom HTML box
+     *
+     * @param   bool    Whether to echo or return the results
+     */
+    function boxBottom() {
+        return '
+            <!-- Box Bottom Start -->
+                    </td>
+                </tr>
+            </table>
+            </td>
+        </tr>
+        </table><br />
+        <!-- Box Bottom End -->';
+    }
+
+    /**
+     * boxGetAltRowStyle() - Get an alternating row style for tables
+     *
+     * @param               int             Row number
+     */
+    function boxGetAltRowStyle($i) {
+        if ($i % 2 == 0) {
+            return ' bgcolor="#EAEAEA"';
+        } else {
+            return ' bgcolor="#E0E0E0"';
+        }
+    }
+
+    /**
+     * listTableTop() - Takes an array of titles and builds the first row of a new table.
+     *
+     * @param       array   The array of titles
+     * @param       array   The array of title links
+     */
+    function listTableTop ($title_arr,$links_arr=false) {
+        $return = '
+        <table cellspacing="0" cellpadding="0" width="100%" border="0">
+        <tr align="center">
+    <!--        <td valign="top" align="right" width="10" background="'.$this->imgroot.'box-grad.png"><img src="'.$this->imgroot.'box-topleft.png" width="10" height="75" /></td> -->
+            <td background="'.$this->imgroot.'box-grad.png">
+        <table width="100%" border="0" cellspacing="1" cellpadding="2">
+            <tr>';
+
+        $count=count($title_arr);
+        if ($links_arr) {
+            for ($i=0; $i<$count; $i++) {
+                $return .= '
+                <td align="center"><a class="sortbutton" href="'.$GLOBALS['sys_urlprefix'].$links_arr[$i].'"><span style="color:'.
+                $this->FONTCOLOR_HTMLBOX_TITLE.'"><strong>'.$title_arr[$i].'</strong></span></a></td>';
+            }
+        } else {
+            for ($i=0; $i<$count; $i++) {
+                $return .= '
+                <td align="center"><span style="color:'.
+                $this->FONTCOLOR_HTMLBOX_TITLE.'"><strong>'.$title_arr[$i].'</strong></span></td>';
+            }
+        }
+        return $return.'</tr>';
+    }
+
+    function listTableBottom() {
+        return '</table></td>
+            <!-- <td valign="top" align="right" width="10" background="'.$this->imgroot.'box-grad.png"><img src="'.$this->imgroot.'box-topright.png" width="10" height="75" /></td> -->
+            </tr></table>';
+    }
+
+    function outerTabs($params) {
+        global $Language,$sys_use_trove,$sys_use_snippet,$sys_use_people;
+
+        $TABS_DIRS[]='/';
+        $TABS_DIRS[]='/my/';
+        if ($sys_use_trove) {
+            $TABS_DIRS[]='/softwaremap/';
+        }
+        if ($sys_use_snippet) {
+            $TABS_DIRS[]='/snippet/';
+        }
+        if ($sys_use_people) {
+            $TABS_DIRS[]='/people/';
+        }
+        $TABS_TITLES[]=$Language->getText('menu','home');
+        $TABS_TITLES[]=$Language->getText('menu','mypage');
+        if ($sys_use_trove) {
+            $TABS_TITLES[]=$Language->getText('menu','projectree');
+        }
+        if ($sys_use_snippet) {
+            $TABS_TITLES[]=$Language->getText('menu','code_snippet');
+        }
+        if ($sys_use_people) {
+            $TABS_TITLES[]=$Language->getText('menu','project_help_wanted');
+        }
+	// outermenu hook
+	$PLUGIN_TABS_DIRS = Array();
+	$hookParams['DIRS'] = &$PLUGIN_TABS_DIRS;
+	$hookParams['TITLES'] = &$TABS_TITLES;
+	plugin_hook ("outermenu", $hookParams) ;
+	$TABS_DIRS = array_merge($TABS_DIRS, $PLUGIN_TABS_DIRS);
+
+	$user_is_super=false;
+	if (session_loggedin()) {
+		$projectmaster =& group_get_object(GROUP_IS_MASTER);
+		$projectstats =& group_get_object(GROUP_IS_STATS);
+		$permmaster =& $projectmaster->getPermission( session_get_user() );
+		$permstats =& $projectstats->getPermission( session_get_user() );
+
+		if ($permmaster->isAdmin()) {
+			$user_is_super=true;
+			$TABS_DIRS[]='/admin/';
+			$TABS_TITLES[]=$Language->getText('menu','admin');
+		}
+		if ($permstats->isMember()) {
+			$TABS_DIRS[]='/reporting/';
+			$TABS_TITLES[]=$Language->getText('menu','reporting');
+		}
+	}
+        if(isset($params['group']) && $params['group']) {
+            // get group info using the common result set
+            $project =& group_get_object($params['group']);
+            if ($project && is_object($project)) {
+                if ($project->isError()) {
+
+                } elseif (!$project->isProject()) {
+
+                } else {
+                    $TABS_DIRS[]='/projects/'.$project->getUnixName().'/';
+                    $TABS_TITLES[]=$project->getPublicName();
+                    $selected=count($TABS_DIRS)-1;
+                }
+            }
+        } elseif (strstr(getStringFromServer('REQUEST_URI'),'/my/') || strstr(getStringFromServer('REQUEST_URI'),'/account/') ||
+        strstr(getStringFromServer('REQUEST_URI'),'/themes/') ) {
+            $selected=array_search("/my/", $TABS_DIRS);
+        } elseif (strstr(getStringFromServer('REQUEST_URI'),'softwaremap')) {
+            $selected=array_search("/softwaremap/", $TABS_DIRS);
+        } elseif (strstr(getStringFromServer('REQUEST_URI'),'/snippet/')) {
+            $selected=array_search("/snippet/", $TABS_DIRS);
+        } elseif (strstr(getStringFromServer('REQUEST_URI'),'/people/')) {
+            $selected=array_search("/people/", $TABS_DIRS);
+        } elseif (strstr(getStringFromServer('REQUEST_URI'),'/reporting/')) {
+            $selected=array_search('/reporting/',$TABS_DIRS);
+        } elseif (strstr(getStringFromServer('REQUEST_URI'),'/admin/') && $user_is_super) {
+            $selected=array_search('/admin/',$TABS_DIRS);
+        } else {
+            $selected=0;
+        }
+        if (!$this->COLOR_SELECTED_TAB) {
+            $this->COLOR_SELECTED_TAB= '#e0e0e0';
+        }
+        echo $this->tabGenerator($TABS_DIRS,$TABS_TITLES,false,$selected,$this->COLOR_SELECTED_TAB,'100%');
+
+    }
+
+    /**
+     *    projectTabs() - Prints out the project tabs, contained here in case
+     *        we want to allow it to be overriden
+     *
+     *    @param    string    Is the tab currently selected
+     *    @param    string    Is the group we should look up get title info
+     */
+    function projectTabs($toptab,$group) {
+
+        global $Language;
+
+        // get group info using the common result set
+        $project =& group_get_object($group);
+        if (!$project || !is_object($project)) {
+            return;
+        }
+        if ($project->isError()) {
+            //wasn't found or some other problem
+            return;
+        }
+        if (!$project->isProject()) {
+            return;
+        }
+
+        // Summary
+        $TABS_DIRS[]='/projects/'. $project->getUnixName() .'/';
+        $TABS_TITLES[]=$Language->getText('group','short_summary');
+        (($toptab == 'home') ? $selected=(count($TABS_TITLES)-1) : '' );
+
+	// Project Activity tab
+	$TABS_DIRS[]='/activity/?group_id='. $group;
+	$TABS_TITLES[]=$Language->getText('group','short_activity');
+	(($toptab == 'activity') ? $selected=(count($TABS_TITLES)-1) : '' );
+
+        // Project Admin
+        $perm =& $project->getPermission( session_get_user() );
+        if ($perm->isAdmin()) {
+            $TABS_DIRS[]='/project/admin/?group_id='. $group;
+            $TABS_TITLES[]=$Language->getText('group','short_admin');
+            (($toptab == 'admin') ? $selected=(count($TABS_TITLES)-1) : '' );
+        }
+        /* Homepage
+        $TABS_DIRS[]='http://'. $project->getHomePage();
+        $TABS_TITLES[]=$Language->getText('group','short_homepage');
+        */
+
+        // Forums
+        if ($project->usesForum()) {
+            $TABS_DIRS[]='/forum/?group_id='.$group;
+            $TABS_TITLES[]=$Language->getText('group','short_forum');
+            (($toptab == 'forums') ? $selected=(count($TABS_TITLES)-1) : '' );
+        }
+
+        // Artifact Tracking
+        if ($project->usesTracker()) {
+            $TABS_DIRS[]='/tracker/?group_id='.$group;
+            $TABS_TITLES[]=$Language->getText('group','short_tracker');
+            (($toptab == 'tracker' || $toptab == 'bugs' || $toptab == 'support' || $toptab == 'patch')
+            ? $selected=(count($TABS_TITLES)-1) : '' );
+        }
+
+        // Mailing Lists
+        if ($project->usesMail()) {
+            $TABS_DIRS[]='/mail/?group_id='.$group;
+            $TABS_TITLES[]=$Language->getText('group','short_mail');
+            (($toptab == 'mail') ? $selected=(count($TABS_TITLES)-1) : '' );
+        }
+
+        // Project Manager
+        if ($project->usesPm()) {
+            $TABS_DIRS[]='/pm/?group_id='.$group;
+            $TABS_TITLES[]=$Language->getText('group','short_pm');
+            (($toptab == 'pm') ? $selected=(count($TABS_TITLES)-1) : '' );
+        }
+
+        // Doc Manager
+        if ($project->usesDocman()) {
+            $TABS_DIRS[]='/docman/?group_id='.$group;
+            $TABS_TITLES[]=$Language->getText('group','short_docman');
+            (($toptab == 'docman') ? $selected=(count($TABS_TITLES)-1) : '' );
+        }
+
+        // Surveys
+        if ($project->usesSurvey()) {
+            $TABS_DIRS[]='/survey/?group_id='.$group;
+            $TABS_TITLES[]=$Language->getText('group','short_survey');
+            (($toptab == 'surveys') ? $selected=(count($TABS_TITLES)-1) : '' );
+        }
+
+        //newsbytes
+        if ($project->usesNews()) {
+            $TABS_DIRS[]='/news/?group_id='.$group;
+            $TABS_TITLES[]=$Language->getText('group','short_news');
+            (($toptab == 'news') ? $selected=(count($TABS_TITLES)-1) : '' );
+        }
+
+        // SCM systems
+        if ($project->usesSCM()) {
+            $TABS_DIRS[]='/scm/?group_id='.$group;
+            $TABS_TITLES[]=$Language->getText('group','short_scm');
+            (($toptab == 'scm') ? $selected=(count($TABS_TITLES)-1) : '' );
+        }
+
+        // groupmenu_after_scm hook
+        $hookParams['DIRS'] = &$TABS_DIRS;
+        $hookParams['TITLES'] = &$TABS_TITLES;
+        $hookParams['toptab'] = &$toptab;
+        $hookParams['selected'] = &$selected;
+        $hookParams['group_id'] = $group ;
+
+        plugin_hook ("groupmenu_scm", $hookParams) ;
+
+        // Downloads
+        if ($project->usesFRS()) {
+            $TABS_DIRS[]='/frs/?group_id='.$group;
+            $TABS_TITLES[]=$Language->getText('group','short_files');
+            (($toptab == 'frs') ? $selected=(count($TABS_TITLES)-1) : '' );
+        }
+
+        // groupmenu hook
+        $hookParams['DIRS'] = &$TABS_DIRS;
+        $hookParams['TITLES'] = &$TABS_TITLES;
+        $hookParams['toptab'] = &$toptab;
+        $hookParams['selected'] = &$selected;
+        $hookParams['group'] = $group;
+
+        plugin_hook ("groupmenu", $hookParams) ;
+
+        echo $this->tabGenerator($TABS_DIRS,$TABS_TITLES,true,$selected,'white','100%');
+
+    }
+
+    function tabGenerator($TABS_DIRS,$TABS_TITLES,$nested=false,$selected=false,$sel_tab_bgcolor='WHITE',$total_width='100%') {
+        $count=count($TABS_DIRS);
+        $width=intval((100/$count));
+
+        $return = '
+
+        <!-- start tabs -->
+
+        <table border="0" cellpadding="0" cellspacing="0" width="'.$total_width.'">
+        <tr>';
+
+        $folder = $this->imgroot.($nested ? 'bottomtab-new/' : 'toptab-new/');
+
+        for ($i=0; $i<$count; $i++) {
+            if ($selected == $i) {
+                $left_img   = $folder.'selected-left.gif';
+                $middle_img = $folder.'selected-middle.gif';
+                $right_img  = $folder.'selected-right.gif';
+                $separ_img  = $folder.'selected-separator.gif';
+                $css_class  = $nested ? 'bottomTabSelected' : 'topTabSelected';
+            } else {
+                $left_img   = $folder.'left.gif';
+                $middle_img = $folder.'middle.gif';
+                $right_img  = $folder.'right.gif';
+                $separ_img  = $folder.'separator.gif';
+                $css_class  = $nested ? 'bottomTab' : 'topTab';
+            }
+            
+            $clear_img = $this->imgroot.'clear.png';
+            
+            if ($nested) {
+                $tab_height = BOTTOM_TAB_HEIGHT;
+                $return .= sprintf(
+                    '<td valign="top" width="5" background="%s">
+      			<img src="%s" height="%d" width="5" alt="" />
+                	</td>', $middle_img, $clear_img, $tab_height );
+                $return .= sprintf(
+                    '<td background="%s" width="'.$width.'%%" align="center">
+            		<a class="%s" href="%s">%s</a>
+    		</td>', $middle_img, $css_class, $GLOBALS['sys_urlprefix'].$TABS_DIRS[$i], $TABS_TITLES[$i]);
+    
+                // if the next tab is not last, insert a separator
+                if ($i < $count-1) {
+                    $return .= sprintf(
+                        '<td valign="top" width="2" background="%s">
+          			<img src="%s" height="%d" width="2" alt="" />
+                    	  </td>', $separ_img, $clear_img, $tab_height );
+                }
+            }
+            else {
+                $tab_height = TOP_TAB_HEIGHT;
+                
+                $return .= sprintf(
+                    '<td valign="top" width="3" background="%s">
+      			<img src="%s" height="%d" width="3" alt="" />
+                	</td>', $left_img, $clear_img, $tab_height );
+                    
+                $return .= sprintf(
+                    '<td background="%s" width="'.$width.'%%" align="center">
+            		<a class="%s" href="%s">%s</a>
+    		</td>', $middle_img, $css_class, $GLOBALS['sys_urlprefix'].$TABS_DIRS[$i], $TABS_TITLES[$i]);
+    
+                // if the next tab is not selected, close this tab
+                if ($selected != $i+1) {
+                  $return .= sprintf(
+                      '<td valign="top" width="9" background="%s">
+        			<img src="%s" height="%d" width="9" alt="" />
+                  	  </td>', $right_img, $clear_img, $tab_height );
+                }
+            }
+        }
+                
+        //
+        //    Building a bottom row in this table, which will be darker
+        //
+        /*
+        if ($selected == 0) {
+            $beg_cols=0;
+            $end_cols=((count($TABS_DIRS)*3)-3);
+        } elseif ($selected == (count($TABS_DIRS)-1)) {
+            $beg_cols=((count($TABS_DIRS)*3)-3);
+            $end_cols=0;
+        } else {
+            $beg_cols=($selected*3);
+            $end_cols=(((count($TABS_DIRS)*3)-3)-$beg_cols);
+        }
+        
+        $return .= '<tr>';
+        
+        if ($beg_cols > 0) {
+            $return .= 
+                '<td colspan="'.$beg_cols.'" height="1" bgcolor="#909090">
+			<img src="'.$this->imgroot.'clear.png" height="1" width="10" />
+		</td>';
+        }
+        $return .= 
+                '<td colspan="3" height="1" bgcolor="'.$sel_tab_bgcolor.'">
+			<img src="'.$this->imgroot.'clear.png" height="1" width="10" />
+		</td>';
+        if ($end_cols > 0) {
+            $return .= 
+                '<td colspan="'.$end_cols.'" height="1" bgcolor="#909090">
+			  <img src="'.$this->imgroot.'clear.png" height="1" width="10" />
+		</td>';
+        }
+	    */
+        
+        $return .= '</tr>';
+
+        return $return.'
+        </table> 
+
+        <!-- end tabs -->
+';
+    }
+
+    function searchBox() {
+        global $Language,$words,$forum_id,$group_id,$group_project_id,$atid,$exact,$type_of_search;
+
+        if(get_magic_quotes_gpc()) {
+            $defaultWords = stripslashes($words);
+        } else {
+            $defaultWords = $words;
+        }
+        
+        // if there is no search currently, set the default
+        if ( ! isset($type_of_search) ) {
+            $exact = 1;
+        }
+
+        print '
+        <form action="/search/" method="get">
+        <table border="0" cellpadding="0" cellspacing="0">
+        <tr><td>
+        <div align="center" style="font-size:smaller">';
+        $parameters = array(
+        SEARCH__PARAMETER_GROUP_ID => $group_id,
+        SEARCH__PARAMETER_ARTIFACT_ID => $atid,
+        SEARCH__PARAMETER_FORUM_ID => $forum_id,
+        SEARCH__PARAMETER_GROUP_PROJECT_ID => $group_project_id
+        );
+
+        $searchManager =& getSearchManager();
+        $searchManager->setParametersValues($parameters);
+        $searchEngines =& $searchManager->getAvailableSearchEngines();
+
+        echo '<select name="type_of_search">';
+        for($i = 0, $max = count($searchEngines); $i < $max; $i++) {
+            $searchEngine =& $searchEngines[$i];
+            echo '<option value="'.$searchEngine->getType().'"'.( $type_of_search == $searchEngine->getType() ? ' selected="selected"' : '' ).'>'.$searchEngine->getLabel($parameters).'</option>'."\n";
+        }
+        echo '</select></div>';
+
+//        print '<br />';
+//        print '
+//        <input type="CHECKBOX" name="exact" value="1"'.( $exact ? ' CHECKED' : ' UNCHECKED' ).'> Require All Words';
+
+        print '</td><td> ';
+        $parameters = $searchManager->getParameters();
+        foreach($parameters AS $name => $value) {
+            print '<input type="hidden" value="'.$value.'" name="'.$name.'" />';
+        }
+        print '</td><td>';
+        print '<input type="text" size="12" name="words" value="'.$defaultWords.'" />';
+
+        print '</td><td> </td><td>';
+        print '<input type="submit" name="Search" value="'.$Language->getText('searchbox','search').'" />';
+        print '</td>';
+
+        if (isset($group_id)) {
+            print '
+                    <td width="10"> </td>
+                    <td><a href="/search/advanced_search.php?group_id='.$group_id.'"> '.$Language->getText('searchbox', 'advanced_search').'</a></td>';
+        }
+        print '</tr></table>';
+        print '</form>';
+
+    }
+    
+    function advancedSearchBox($sectionsArray, $group_id, $words, $isExact) {
+        global $Language;
+         // display the searchmask
+        print '
+        <form name="advancedsearch" action="'.$PHP_SELF.'" method="post">
+        <input type="hidden" name="search" value="1"/>
+        <input type="hidden" name="group_id" value="'.$group_id.'"/>
+        <div align="center"><br />
+            <table border="0">
+                <tr>
+                    <td colspan ="2">
+                        <input type="text" size="60" name="words" value="'.stripslashes(htmlspecialchars($words)).'" />
+                        <input type="submit" name="submitbutton" value="'.$Language->getText('advanced_search', 'search_button').'" />
+                    </td>
+                </tr>
+                <tr>
+                    <td valign="top">
+                        <input type="radio" name="mode" value="'.SEARCH__MODE_AND.'" '.($isExact ? 'checked="checked"' : '').' />'.$Language->getText('advanced_search', 'and_search').'
+                    </td>
+                    <td>
+                        <input type="radio" name="mode" value="'.SEARCH__MODE_OR.'" '.(!$isExact ? 'checked="checked"' : '').' />'.$Language->getText('advanced_search', 'or_search').'
+                    </td>
+                </tr>
+            </table><br /></div>'
+        .$this->createUnderSections($sectionsArray).'
+        </form>';
+
+
+        //create javascript methods for select none/all
+        print '
+        <script type="text/javascript">
+            <!-- method for disable/enable checkboxes
+            function setCheckBoxes(parent, checked) {
+
+
+                for (var i = 0; i < document.advancedsearch.elements.length; i++)
+                    if (document.advancedsearch.elements[i].type == "checkbox") 
+                            if (document.advancedsearch.elements[i].name.substr(0, parent.length) == parent)
+                                document.advancedsearch.elements[i].checked = checked;
+                }
+            //-->
+        </script>
+        ';
+
+    }
+    
+    function createUnderSections($sectionsArray) {
+        global $Language;
+        $countLines = 0;
+        foreach ($sectionsArray as $section) {
+            if(is_array($section)) {
+                $countLines += (3 + count ($section));
+            } else {
+                //2 lines one for section name and one for checkbox
+                $countLines += 3;
+            }
+        }
+        $breakLimit = round($countLines/3);
+        $break = $breakLimit;
+        $countLines = 0;
+        $return = '
+            <table width="100%" border="0" cellspacing="0" cellpadding="1" style="background-color:'. $this->COLOR_LTBACK2.'">
+                <tr>
+                    <td>
+                        <table width="100%" cellspacing="0" border="0" style="background-color:'. $this->COLOR_LTBACK1.'">
+                            <tr style="font-weight: bold;background-color:'. $this->COLOR_LTBACK2 .'">
+                                <td colspan="2">'.$Language->getText('advanced_search', 'search_in').':</td>
+                                <td align="right">'.$Language->getText('advanced_search', 'select').' <a href="javascript:setCheckBoxes(\'\', true)">'.$Language->getText('advanced_search', 'all').'</a> / <a href="javascript:setCheckBoxes(\'\', false)">'.$Language->getText('advanced_search', 'none').'</a></td>
+                            </tr>
+                            <tr height="20">
+                                <td colspan="3"> </td>
+                            </tr>
+                            <tr align="center" valign="top">
+                                <td>';
+        foreach($sectionsArray as $key => $section) {
+            $oldcountlines = $countLines;
+            if (is_array($section)) {
+                $countLines += (3 + count ($section));
+            } else {
+                $countLines += 3;
+            }
+            
+            if ($countLines >= $break) {
+                //if the next block is so large that shifting it to the next column hits the breakpoint better
+                //the second part of statement (behind &&) proofs, that no 4th column is added
+                if ((($countLines - $break) >= ($break - $countLines)) && ((($break + $breakLimit)/$breakLimit) <= 3)) {
+                    $return .= '</td><td>';
+                    $break += $breakLimit;
+                }
+            }
+            
+            $return .= '<table width="90%" border="0" cellpadding="1" cellspacing="0" style="background-color:'. $this->COLOR_LTBACK2.'">
+                            <tr><td><table width="100%" border="0" cellspacing="0" cellpadding="3">
+                            <tr style="background-color:'. $this->COLOR_LTBACK2 .'; font-weight: bold">
+                                <td cellspacing="0">
+                                    <a href="#'.$key.'">'.$Language->getText('group', $key).'</a>'
+            .'    </td>
+                                <td align="right">'
+            .$Language->getText('advanced_search', 'select').' <a href="javascript:setCheckBoxes(\''.$key.'\', true)">'.$Language->getText('advanced_search', 'all').'</a> / <a href="javascript:setCheckBoxes(\''.$key.'\', false)">'.$Language->getText('advanced_search', 'none').'</a>
+                                </td>
+                            </tr>
+                            <tr style="background-color:'. $this->COLOR_LTBACK1.'">
+                                <td colspan="2">';
+
+            if (!is_array($section)) {
+                $return .= '        <input type="checkbox" name="'.urlencode($key).'"';
+                if (isset($GLOBALS[urlencode($key)]))
+                $return .= ' checked="checked" ';
+                $return .= ' /></input>'.$Language->getText('group', $key).'<br />';
+            }
+            else
+            foreach($section as $underkey => $undersection) {
+                $return .= '    <input type="checkbox" name="'.urlencode($key.$underkey).'"';
+                if (isset($GLOBALS[urlencode($key.$underkey)]))
+                $return .= ' checked ';
+                $return .= '></input>'.$undersection.'<br />';
+
+            }
+            
+            $return .=        '    </td>
+                            </tr>
+                        </table></td></tr></table><br />';
+
+            if ($countLines >= $break) {
+                if (($countLines - $break) < ($break - $countLines)) {
+                    $return .= '</td><td width="33%">';
+                    $break += $breakLimit;
+                }
+            }
+        }
+        
+        return $return.'        </td>
+                            </tr>
+                        </table></td></tr></table>';
+    }
+
+    /**
+     * beginSubMenu() - Opening a submenu.
+     *
+     * @return    string    Html to start a submenu.
+     */
+    function beginSubMenu () {
+        $return = '
+            <p><strong>';
+        return $return;
+    }
+
+    /**
+     * endSubMenu() - Closing a submenu.
+     *
+     * @return    string    Html to end a submenu.
+     */
+    function endSubMenu () {
+        $return = '</strong></p>';
+        return $return;
+    }
+
+    /**
+     * printSubMenu() - Takes two array of titles and links and builds the contents of a menu.
+     *
+     * @param       array   The array of titles.
+     * @param       array   The array of title links.
+     * @return    string    Html to build a submenu.
+     */
+    function printSubMenu ($title_arr,$links_arr) {
+        $count=count($title_arr);
+        $count--;
+
+        $return = '';
+
+        for ($i=0; $i<$count; $i++) {
+            $return .= '
+                <a href="'.$links_arr[$i].'">'.$title_arr[$i].'</a> | ';
+        }
+        $return .= '
+                <a href="'.$links_arr[$i].'">'.$title_arr[$i].'</a>';
+        return $return;
+    }
+
+    /**
+     * subMenu() - Takes two array of titles and links and build a menu.
+     *
+     * @param       array   The array of titles.
+     * @param       array   The array of title links.
+     * @return    string    Html to build a submenu.
+     */
+    function subMenu ($title_arr,$links_arr) {
+        $return  = $this->beginSubMenu () ;
+        $return .= $this->printSubMenu ($title_arr,$links_arr) ;
+        $return .= $this->endSubMenu () ;
+        return $return;
+    }
+
+    /**
+     * multiTableRow() - create a mutlilevel row in a table
+     *
+     * @param    string    the row attributes
+     * @param    array    the array of cell data, each element is an array,
+     *                      the first item being the text,
+     *                    the subsequent items are attributes (dont include
+     *                    the bgcolor for the title here, that will be
+     *                    handled by $istitle
+     * @param    boolean is this row part of the title ?
+     *
+     */
+    function multiTableRow($row_attr, $cell_data, $istitle) {
+        $return= '
+        <tr '.$row_attr;
+        if ( $istitle ) {
+            $return .=' align="center" bgcolor="'. $this->COLOR_HTMLBOX_TITLE .'"';
+        }
+        $return .= '>';
+        for ( $c = 0; $c < count($cell_data); $c++ ) {
+            $return .='<td ';
+            for ( $a=1; $a < count($cell_data[$c]); $a++) {
+                $return .= $cell_data[$c][$a].' ';
+            }
+            $return .= '>';
+            if ( $istitle ) {
+                $return .='<font color="'.$this->FONTCOLOR_HTMLBOX_TITLE.'"><strong>';
+            }
+            $return .= $cell_data[$c][0];
+            if ( $istitle ) {
+                $return .='</strong></font>';
+            }
+            $return .= '</td>';
+
+        }
+        $return .= '</tr>
+        ';
+
+        return $return;
+    }
+
+    /**
+     * feedback() - returns the htmlized feedback string when an action is performed.
+     *
+     * @param string feedback string
+     * @return string htmlized feedback
+     */
+    function feedback($feedback) {
+        if (!$feedback) {
+            return '';
+        } else {
+            return '
+                <h3 style="color:red">'.strip_tags($feedback, '<br>').'</h3>';
+        }
+    }
+
+    /**
+     * getThemeIdFromName()
+     *
+     * @param    string  the dirname of the theme
+     * @return    integer the theme id    
+     */
+    function getThemeIdFromName($dirname) {
+        $res=db_query("SELECT theme_id FROM themes WHERE dirname='$dirname'");
+        return db_result($res,0,'theme_id');
+    }
+
+    function quickNav() {
+        if (!session_loggedin()) {
+            return '';
+        } else {
+            $res=db_query("SELECT * FROM groups NATURAL JOIN user_group WHERE user_id='".user_getid()."' ORDER BY group_name");
+            echo db_error();
+            if (!$res || db_numrows($res) < 1) {
+                return '';
+            } else {
+                $ret = '
+        <form name="quicknavform">
+            <select name="quicknav" onChange="location.href=document.quicknavform.quicknav.value">';
+                $ret .= '
+                <option value="">Quick Jump To...</option>';
+                for ($i=0; $i<db_numrows($res); $i++) {
+                    $ret .= '
+                <option value="/projects/'.db_result($res,$i,'unix_group_name').'/">'.db_result($res,$i,'group_name').'</option>';
+                    if (trim(db_result($res,$i,'admin_flags'))=='A') {
+                        $ret .= '
+                <option value="/project/admin/?group_id='.db_result($res,$i,'group_id').'">        Admin</option>';
+                    }
+        //tracker
+                    if (db_result($res,$i,'use_tracker')) {
+                        $ret .= '
+                <option value="/tracker/?group_id='.db_result($res,$i,'group_id').'">        Tracker</option>';
+                        if (db_result($res,$i,'admin_flags') || db_result($res,$i,'tracker_flags')) {
+                            $ret .= '
+                <option value="/tracker/admin/?group_id='.db_result($res,$i,'group_id').'">                Admin</option>';
+                        }
+                    }
+        //task mgr
+                    if (db_result($res,$i,'use_pm')) {
+                        $ret .= '
+                <option value="/pm/?group_id='.db_result($res,$i,'group_id').'">        Task Manager</option>';
+                        if (trim(db_result($res,$i,'admin_flags')) =='A' || db_result($res,$i,'project_flags')) {
+                            $ret .= '
+                <option value="/pm/admin/?group_id='.db_result($res,$i,'group_id').'">                Admin</option>';
+                        }
+                    }
+        //FRS
+                    if (db_result($res,$i,'use_frs')) {
+                        $ret .= '
+                <option value="/frs/?group_id='.db_result($res,$i,'group_id').'">        Files</option>';
+                        if (trim(db_result($res,$i,'admin_flags'))=='A' || db_result($res,$i,'release_flags')) {
+                            $ret .= '
+                <option value="/frs/admin/?group_id='.db_result($res,$i,'group_id').'">                Admin</option>';
+                        }
+                    }
+        //SCM
+                    if (db_result($res,$i,'use_scm')) {
+                        $ret .= '
+                <option value="/scm/?group_id='.db_result($res,$i,'group_id').'">        SCM</option>';
+                        /*if (db_result($res,$i,'admin_flags') || db_result($res,$i,'project_flags')) {
+                        $ret .= '
+                        <option value="/pm/admin/?group_id='.db_result($res,$i,'group_id').'">    Admin</option>';
+                    } */
+                    }
+        //forum
+                    if (db_result($res,$i,'use_forum')) {
+                        $ret .= '
+                <option value="/forum/?group_id='.db_result($res,$i,'group_id').'">        Forum</option>';
+                        if (trim(db_result($res,$i,'admin_flags'))=='A' || db_result($res,$i,'forum_flags')) {
+                            $ret .= '
+                <option value="/forum/admin/?group_id='.db_result($res,$i,'group_id').'">                Admin</option>';
+                        }
+                    }
+        //mail
+                    if (db_result($res,$i,'use_mail')) {
+                        $ret .= '
+                <option value="/mail/?group_id='.db_result($res,$i,'group_id').'">        Lists</option>';
+                        if (trim(db_result($res,$i,'admin_flags'))=='A') {
+                            $ret .= '
+                <option value="/mail/admin/?group_id='.db_result($res,$i,'group_id').'">                Admin</option>';
+                        }
+                    }
+        //doc
+                    if (db_result($res,$i,'use_docman')) {
+                        $ret .= '
+                <option value="/docman/?group_id='.db_result($res,$i,'group_id').'">        Docs</option>';
+                        if (trim(db_result($res,$i,'admin_flags'))=='A' || db_result($res,$i,'doc_flags')) {
+                            $ret .= '
+                <option value="/docman/admin/?group_id='.db_result($res,$i,'group_id').'">                Admin</option>';
+                        }
+                    }
+        //news
+                    if (db_result($res,$i,'use_news')) {
+                        $ret .= '
+                <option value="/news/?group_id='.db_result($res,$i,'group_id').'">        News</option>';
+                        if (trim(db_result($res,$i,'admin_flags'))=='A') {
+                            $ret .= '
+                <option value="/news/admin/?group_id='.db_result($res,$i,'group_id').'">                Admin</option>';
+                        }
+                    }
+        //survey
+                    if (db_result($res,$i,'use_survey')) {
+                        $ret .= '
+                <option value="/survey/?group_id='.db_result($res,$i,'group_id').'">        Surveys</option>';
+                        if (trim(db_result($res,$i,'admin_flags'))=='A') {
+                            $ret .= '
+                <option value="/survey/admin/?group_id='.db_result($res,$i,'group_id').'">                Admin</option>';
+                        }
+                    }
+                }
+                $ret .= '
+            </select>
+        </form>';
+            }
+        }
+        return $ret;
+    }
+
+}
+
+// Local Variables:
+// mode: php
+// c-file-style: "bsd"
+// End:
+
+?>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/css/theme.css
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/css/theme.css	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/css/theme.css	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,280 @@
+/* 
+ * Stylesheet for SAP Forge theme.
+ */
+BODY {
+  margin-top: 0em;
+  margin-left: 0em;
+  margin-right: 0em;
+  margin-bottom: 0em;
+  color: rgb(68, 68, 68);
+  background-color: rgb(247, 247, 247);
+  font-family: arial, helvetica, sans-serif;
+  font-size: small;
+}
+
+form { margin: 0; }
+
+img { border: 0; }
+
+a {
+  text-decoration: none;
+  color: rgb(1, 73, 144);
+}
+
+/*
+a:link {
+  color: #0000be
+}
+
+a:visited {
+  color: #0000be
+}
+
+a:active {
+}
+*/
+
+a:hover {
+  text-decoration: underline;
+  color: rgb(247, 0, 0);
+}
+
+h1,h2,h3,h4,h5,h6 {
+  font-family: verdana, arial, helvetica, sans-serif;
+}
+
+h1 {
+  font-size: x-large;
+}
+
+h2 {
+  font-size: large;
+}
+
+h3 {
+  font-size: medium;
+}
+
+h4 {
+  font-size: small;
+}
+
+h5 {
+  font-size: x-small;
+}
+
+h6 {
+  font-size: xx-small;
+}
+
+pre,tt {
+  font-family: courier, sans-serif
+}
+
+/* the style of the label on a box title  */
+.titlebar {
+  text-decoration: none;
+  font-weight: bold;
+}
+
+.topTab, a.topTab, a.topTab:visited, a.topTab:hover,
+.topTabSelected, a.topTabSelected, a.topTabSelected:visited, 
+a.topTabSelected:hover {
+  text-decoration: none;
+  font-weight: bold;
+  color: rgb(68, 68, 68);
+  font-family: arial, helvetica, sans-serif;
+  font-size: 0.9em;
+}
+
+.bottomTab, a.bottomTab, a.bottomTab:visited, a.bottomTab:hover {
+  text-decoration: none;
+  font-weight: bold;
+  color: white;
+  font-family: arial, helvetica, sans-serif;
+  font-size: 0.9em;
+}
+
+.bottomTabSelected, a.bottomTabSelected, a.bottomTabSelected:visited, 
+a.bottomTabSelected:hover {
+  text-decoration: none;
+  font-weight: bold;
+  color: rgb(68, 68, 68);
+  font-family: arial, helvetica, sans-serif;
+  font-size: 0.9em;
+}
+
+/* header style */
+.header {
+  background: rgb(66, 69, 82) url("../images/header/top-middle.gif") top left
+    repeat-x;
+  /* padding-right: 1em; */
+  padding-top: 0;
+  padding-bottom: 0;
+  padding-left: 0;
+  margin: 0 0 0 0;
+  vertical-align: top;
+}
+
+.topLeft {
+  vertical-align: top;
+  text-align: left;
+}
+
+.middleRight {
+  vertical-align: middle;
+  text-align: right;
+}
+
+.header form {
+  padding: 0 0 0 0;
+  margin: 0 0 0 0;
+  border-width: 0;
+}
+
+/*
+.header h1 {
+  position: absolute;
+  top: 0;
+  left: 0;
+  margin: 0;
+  font-size: 2px;
+  height: 8px;
+  z-index: 100;
+}
+
+.header h1 a {
+  display: block;
+  width: 205px;
+  height: 55px;
+  background: transparent url("../images/header/top-logo.gif") no-repeat;
+  text-indent: -700em;
+  text-decoration: none;
+}
+*/
+
+.header p,.header a {
+  color: white;
+  font-family: arial, helvetica, sans-serif;
+  font-weight: bold;
+  font-size: 0.8em;
+}
+
+.mainCanvas {
+  width: 100%;
+  padding: 0.6em 0.6em 0.6em 0.6em ;
+  border: 0;
+}
+
+.pane {
+  color: rgb(112, 112, 112);
+  background-color: white;
+}
+
+/*--------------------------------------------------
+  REQUIRED to hide the non-active tab content.
+  But do not hide them in the print stylesheet!
+  --------------------------------------------------*/
+.tabberlive .tabbertabhide {
+ display:none;
+}
+
+/*--------------------------------------------------
+  .tabber = before the tabber interface is set up
+  .tabberlive = after the tabber interface is set up
+  --------------------------------------------------*/
+.tabber {
+}
+.tabberlive {
+ margin-top:1em;
+}
+
+/*--------------------------------------------------
+  ul.tabbernav = the tab navigation list
+  li.tabberactive = the active tab
+  --------------------------------------------------*/
+ul.tabbernav
+{
+ margin:0;
+ padding: 3px 0;
+ border-bottom: 1px solid #778;
+}
+
+ul.tabbernav li
+{
+ list-style: none;
+ margin: 0;
+ display: inline;
+}
+
+ul.tabbernav li a
+{
+ padding: 3px 0.5em;
+ margin-left: 3px;
+ border: 1px solid #778;
+ border-bottom: none;
+ background: #D0D0D0;
+ text-decoration: none;
+}
+
+ul.tabbernav li a:link { color: #333333; }
+ul.tabbernav li a:visited { color: #667; }
+
+ul.tabbernav li a:hover
+{
+ color: #000;
+ background: #FED620;
+ border-color: #227;
+}
+
+ul.tabbernav li.tabberactive a
+{
+ background-color: #fff;
+ border-bottom: 1px solid #fff;
+}
+
+ul.tabbernav li.tabberactive a:hover
+{
+ color: #000;
+ background: white;
+ border-bottom: 1px solid white;
+}
+
+/*--------------------------------------------------
+  .tabbertab = the tab content
+  Add style only after the tabber interface is set up (.tabberlive)
+  --------------------------------------------------*/
+.tabberlive .tabbertab {
+ padding:5px;
+ border:1px solid #aaa;
+ border-top:0;
+
+ /* If you don't want the tab size changing whenever a tab is changed
+    you can set a fixed height */
+
+ /* height:200px; */
+
+ /* If you set a fix height set overflow to auto and you will get a
+    scrollbar when necessary */
+
+ /* overflow:auto; */
+}
+
+/* If desired, hide the heading since a heading is provided by the tab */
+.tabberlive .tabbertab h2 {
+ display:none;
+}
+.tabberlive .tabbertab h3 {
+ display:none;
+}
+
+/* Example of using an ID to set different styles for the tabs on the page */
+.tabberlive#tab1 {
+}
+.tabberlive#tab2 {
+}
+.tabberlive#tab2 .tabbertab {
+ height:200px;
+ overflow:auto;
+}
+

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/bottomtab-new/middle.gif
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/bottomtab-new/middle.gif	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/bottomtab-new/middle.gif	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1 @@
+GIF89a K ¢     ÿÿÿ||ˆªª²ÿÿÿ         !ù   ,     K  8º<ò0ÊI«½6 ;
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/bottomtab-new/selected-middle.gif
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/bottomtab-new/selected-middle.gif	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/bottomtab-new/selected-middle.gif	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1 @@
+GIF89a K ÷     ÿÿÿþÖ ý¿#ÿÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ,     K   HPÀ€ƒ*\È°¡Ã‡ ;
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/bottomtab-new/selected-separator.gif
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/bottomtab-new/selected-separator.gif	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/bottomtab-new/selected-separator.gif	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1 @@
+GIF89a K ³     ÿÿÿ•†AþÖ ÿïªý¿#•}Cþç«ÿÿÿ                     !ù   ,     K  p"¨­øÞc¸ïà'†äh–試ìê¶dQD ;
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/bottomtab-new/separator.gif
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/bottomtab-new/separator.gif	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/bottomtab-new/separator.gif	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1 @@
+GIF89a K ³     ÿÿÿ||ˆddiªª²uuyÍÍÒßßâÿÿÿ                     !ù   ,     K  S¨­ø^3¸ïà'†äh–試ì궤 D ;
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/box-grad.png
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/box-grad.png	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/box-grad.png	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,5 @@
+‰PNG
+
+   
+IHDR     Ð   …Y    	pHYs    ÒÝ~ü   tIMEÔ	(Ö˜þó   gIDATxœíË¡  1î‡þ[ù± —u›î[3É•«Êÿî?ÀÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌüÙ
+<•²Š     IEND®B`‚
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/box-topleft.png
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/box-topleft.png	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/box-topleft.png	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,6 @@
+‰PNG
+
+   
+IHDR   
+   K   ÆT#   	pHYs    ÒÝ~ü   tIMEÔ	22á6È   ©IDATxœíÍË
+ƒ0…á™÷9	‘ˆ¸p“…Š%ÔéFZëeºè¢P2Û/Žbf¼_Œ±ª*çÜ8Žt°º®ó<6j_Ea­Ý¿¦}W–¥Rꂽ÷Z냽Ø“eNG ú¾ïºîœnÜ4Í¥ fvÎÝrÛ¶—«Ãp— iš$!H<ϳ´½®«T€ˆhY–[ffiûÃçß±0üãmÉ'Nœ8ñßð†ÛQ’xV9    IEND®B`‚
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/box-topright.png
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/box-topright.png	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/box-topright.png	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,7 @@
+‰PNG
+
+   
+IHDR   
+   K   ÆT#   	pHYs    ­#½u   tIMEÔ	-”Ähþ   ³IDATxœíÏ1
+„0…á™(Øx [±Îá=‹ˆ‚‚E‹$ƒØˆcá.ì‚ì–üíGæ¬ë:Ïó¢(ªªÊ²¾K™™ˆˆhG­uY–Ÿ¬ð 4MÓ÷ý=_
+Ã0MS±m["zñm]×_#¢sÎ{dD4ÆH<Ï33§J)d­M¯߶,‹ÄëºJ¼m›´½ï»ôú8‰@â$I¤mf~pü¶Ÿ´-YäÈ‘#Gþ>Ò{Eyï«    IEND®B`‚
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/clear.png
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/clear.png	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/clear.png	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,5 @@
+‰PNG
+
+   
+IHDR         %ÛVÊ   PLTEÀÀÀ   +ס¦   tRNS @æØf   bKGDÿ-Þ   tEXtSoftware gif2png 2.4.6¤3ƒ   
+IDATxÚc`    å'Þü    IEND®B`‚
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/header/top-logo.blank.gif
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/header/top-logo.blank.gif	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/header/top-logo.blank.gif	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,14 @@
+GIF89aÍ 6 ÷     ÿÿÿü¹ü¸FFV 4f°­®QNR¾½ÃKJU`_kedpjitts~HGUGGWJJYLL[OO^RRaXXgWWfUUc[[i^^lccqhhummzrr~wwƒ||ˆ„„ppx™—— œœ¥¢¢ª««²¦¦­¶¶½®®µ³³¹½½ÃººÀýýþüüý Rùúüö÷ù V "Y2g &\ %[óõø '^ )^ (]+` -b +` +_-a0d.a
+6h:l?o#Jx1U€ /d /b .a -a3f2e5hEt<_‡HiTt—d€ rŒ©ž°Ä¸ÅÓ 3f 3e 1d 0c€˜±¥»¤¶È«»Ì¯¿Ï¾ËØáçíìðôúûü 5g 4eÆÒÝËÖàÖßçèíñðô÷D^0O`SgsúüýJ\d0KVQdkÿÿþþþýþÞ#þß%þß'øÛ*þØ!þÙ"þÛ"ìË'Ú¼-ýÓþÖ üÊýÏýÍûÊíÁ!üÄüÇü¿üÁüÂÞ­"úÅ(ùÀ(Ë¡)üÉ6¹–1ýÒU¤‹@ýÖdý×oýÚtýÙvýÛ}ýÜ‚ýÞƒ„tFýÞ‰þé±þîÁÿûðü¼ü»ü¹öµü¹üºí°ö¶ü» é® ü¼$ü¾%ü¾'ø¼&ù½'ü¿+ù½,üÀ0üÁ3ù¿2üÅ5üÂ5ùÁ7üÃ9üÃ:øÁ:üÄ>ýÅ@øÂ?ùÃBýÇEýÊEýÇGýÈIýÉMùÆKýÌSýËSýÌUùÉTýÍYýÎZúËZýÎ^ýÒbøÌ`ýÒdüÐdýÑhýÔiýÔoõÎlýÖsíÌvýÙ‚ýÚ‚ýÚ…ý݉ýÛ‰õÖ†ýÜŒþߎûÜ‘þá•ÞÅ„þâ™þášþâylKþäŸþä¢þå£òÛ£âÍ›mdMþìÁþíÂþîÅþîÆþîÈþòÓøµø¸"ɤPýÒmþã¤þä§þåªÿöợs̽ž»²¢ÏƵ©ž^VN¤ žXSR¹··þýýþþþÿÿÿ,    Í 6  ÿ H° Áƒ*\È°¡Ã‡
+Ù1úF¡¢Å‹3jÜȱ£ÇŒĉI²¤É“(Sª\ɲ¥Ë—+㍻‡@…Í›8sêÜɳ§ÏŸ7€J´¨Ñ£H“*]Ê´©Ó§PŸÎ\AµªÕ«X³jÝʵ+ÕÜŠK¶¬Ù³hÓª]˶­Û·3OȝK·®Ý»xóêÝ;@›ß¿€L¸°áÈ+^ÌX[6rüRHžL¹²å˘3kÎ< ›çÏ C‹Mº´éÓ¨S«^Íús¶z(bËžM»¶íÛ¸sßp©·ïßÀƒN¼¸ñãÈ“+_þ›9%¢KŸN½ºõëسW@©»÷ïàËÿO¾¼ùóèÓ«_Þš=ðãËŸO¿¾ýûøç˜Ä¿¿ÿÿ (à€hà&¨ €õààƒF(á„Vh!„H¢á†vèᇠ†(âˆ$–hâ‰(~I$Ûè3‹0Æ(ãŒ4Öhã/ ÉŽ<öèã@)äDiä‘H&9$4úˆàä“PF)å”TVi¥0£å–\véå—`†)æ˜d–iæ™hŽé>!´éæ›pÆ)çœtÖ9À1xæ©çž|öé矀*è „j¨ ÊÐóÁ¢Œ6ê裐F*©¤c饘fªé¦œvê駠†*ꨤ†j=¤ªêª¬¶êê«°¾ÿ: 0´Öj«0¶æªk®¸îêk­½úì¯Âûë°Æòšì²ÀÐÓÁ³ÐF+í´ÔVk-µô¢í¶Üvëí·à†+î¸ä–kî¹è¢ëN´ëî»ðÆ+ï¼ôÂ;À.øæ«ï¾üöëï¿ ,ðÀl°Á¼¸Â7ìðÃG,ñÄ`ËÅg¬ñÆwìñÇ ‡,òÈ$—l²-î0 ÁÊ,·ìòË0Ç,3ËÌbóÍ8ç¬óÎ<÷ìóÏ@-ôÐDm³;d ôÒL7íôÓPG­ô ­TmõÕXg­õÖ\wíõ×`‡-öØdWÍŠ;
+` öÚl·íöÛpǍÁ ¬Ôm÷Ýxç­÷Þ|÷ÿí÷߀.øà„Û­Š;\ øâŒ7îøãG>€*”Wnùå˜g®ùæœwîùç ‡.ú薧⤮úꬷîúë¯pÊì´×nûí¸ç®ûî¼÷îûïÀ/¼íª8bÁñÈ'¯üòÌ7ßü ¥D/ýôÔWoýõØg¯ýöÜwïý÷àWŠ%”oþù觯þúê0ÊûðÇ/ÿüô×oÿýøç¯ÿþü÷ï?ýí°„HÀð€Là Š:ðŒ 'HÁ
+Zð‚Ì 7ÈÁ	Š¢¡GHšð„$À'VȺð…0Œ¡gHÃÚð†8Ì¡eHŠ}@à‡@¢ÿ‡HÄ"q H¢—ÈÄ&:ñ‰PŒ¢§HÅ*ZñŠX„â ‘€xñ‹`£ÇHÆ/BäŒhL£×ÈÆ6&„ˆ£çHÇ:ÚñŽr€÷ÈÇ>úñ€¤ IÈBòˆLä â<:ò‘wT¤$'IÉJZò’‰ˆ% ÉIHbò“ ¥(G)O”£“¨´#'VÉÊVºò•°Œ¥,gIËZÚò–¸Ì¥.k©Ç„"©fwIÌbó˜ÈL¦1pˆ3•›ˆ¦4§¹	PóšØŒ¦5³ÉÍjvs›ÝÌ&8ÃIÍq’óšæ<§:³É‰-&à™\§<çIÏzÚóžøÄg'¸ÿOH⟠
+¨@JЂô M¨BÊІ:ô¡›`„úéÈBXô¢ͨF7ÊÑŽzô£ 
+©HGJÒ’šÔ¢p¤è
+ÁÒ–ºô¥0©LgJÓšÚô¦8Í©NwÊÓ–2â*¥£ †JÔ¢õ¨HMªR—ÊÔ¦:õ©PªT§ZT~UŽƒÈªV·ÊÕ®zõ«`
+«XÇJÖ²šõ¬hM+WáÌ«@­p«\çJ׺ʵ‡ æUûÀ×¾úõ¯€
+¬`KØÂö°ˆM¬bËØÀâWýƒd'KÙÊZö²˜Í¬f7ËÙÎzö³ 
+­h1;ˆFªt´¨M­jWËÚÖºl¥¨fKÛÚÿÚö¶¸Í­nwËÛÞúö·À
+®p‡ËÛÇösÈM®r—ËÜæ:÷¹Ð®t§KÝêZ÷ºØ.#ÚÌìz÷»à
+¯xÇKÞåæa“Áäƒz×ËÞöº÷½ð¯|çKßúÚ÷¾øͯ~ñ«ôvÒ °€LàøÀN°‚Ìà;øÁ†p;y‡
+[øÂΰ†7Ìá{øà ±ˆGLâØw@ñ„‰‡»øÅ0Ž±ŒgLãÛøÆ8αŽwÌãûØÅy`D9Ê(‡"ùÈHN²’—Ìä&;ùÉPŽ²”§Lå*[ùÈs˜C1ä0fùË`³˜ÇLæ2›ùÌhN³š×Ìæ6»¹Ítˆ³œçç:èÁ–( ;
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/header/top-logo.gif
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/header/top-logo.gif	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/header/top-logo.gif	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,19 @@
+GIF89aÍ 6 ÷     ÿÿÿü¹ü¸FFV 4f°­®QNR¾½ÃKJU`_kedpjitts~HGUGGWJJYLL[OO^RRaXXgWWfUUc[[i^^lccqhhummzrr~wwƒ||ˆ„„ppx™—— œœ¥¢¢ª««²¦¦­¶¶½®®µ³³¹½½ÃººÀýýþüüý Rùúüö÷ù V "Y2g &\ %[óõø '^ )^ (]+` -b +` +_-a0d.a
+6h:l?o#Jx1U€ /d /b .a -a3f2e5hEt<_‡HiTt—d€ rŒ©ž°Ä¸ÅÓ 3f 3e 1d 0c€˜±¥»¤¶È«»Ì¯¿Ï¾ËØáçíìðôúûü 5g 4eÆÒÝËÖàÖßçèíñðô÷D^0O`SgsúüýJ\d0KVQdkÿÿþþþýþÞ#þß%þß'øÛ*þØ!þÙ"þÛ"ìË'Ú¼-ýÓþÖ üÊýÏýÍûÊíÁ!üÄüÇü¿üÁüÂÞ­"úÅ(ùÀ(Ë¡)üÉ6¹–1ýÒU¤‹@ýÖdý×oýÚtýÙvýÛ}ýÜ‚ýÞƒ„tFýÞ‰þé±þîÁÿûðü¼ü»ü¹öµü¹üºí°ö¶ü» é® ü¼$ü¾%ü¾'ø¼&ù½'ü¿+ù½,üÀ0üÁ3ù¿2üÅ5üÂ5ùÁ7üÃ9üÃ:øÁ:üÄ>ýÅ@øÂ?ùÃBýÇEýÊEýÇGýÈIýÉMùÆKýÌSýËSýÌUùÉTýÍYýÎZúËZýÎ^ýÒbøÌ`ýÒdüÐdýÑhýÔiýÔoõÎlýÖsíÌvýÙ‚ýÚ‚ýÚ…ý݉ýÛ‰õÖ†ýÜŒþߎûÜ‘þá•ÞÅ„þâ™þášþâylKþäŸþä¢þå£òÛ£âÍ›mdMþìÁþíÂþîÅþîÆþîÈþòÓøµø¸"ɤPýÒmþã¤þä§þåªÿöợs̽ž»²¢ÏƵ©ž^VN¤ žXSR¹··þýýþþþÿÿÿ,    Í 6  ÿ H° Áƒ*\È°¡Ã‡
+Ù1úF¡¢Å‹3jÜȱ£ÇŒĉI²¤É“(Sª\ɲ¥Ë—+㍻‡@…Í›8sêÜɳ§ÏŸ7€J´¨Ñ£H“*]Ê´©Ó§PŸÎ\AµªÕ«X³jÝʵ+ÕÜŠK¶¬Ù³hÓª]˶­Û·3OȝK·®Ý»xóêÝ;@›ß¿€L¸°áÈ+^ÌX[6rüRHžL¹²å˘3kÎ< ›çÏ C‹Mº´éÓ¨S«^Íús¶z(bËžM»¶íÛ¸sßp©·ïßÀƒN¼¸ñãÈ“+_þ›9%¢KŸN½ºõëسW@©»÷ïàËÿO¾¼ùóèÓ«_Þš=ðãËŸO¿¾ýûøç˜Ä¿¿ÿÿ (à€hà&¨ €õààƒF(á„Vh!„H¢á†vèᇠ†(âˆ$–hâ‰(~I$Ûè3‹0Æ(ãŒ4Öhã/ ÉŽ<öèã@)äDiä‘H&9$4úˆàä“PF)å”TVi¥0£å–\véå—`†)æ˜d–iæ™hŽé>!´éæ›pÆ)çœtÖ9À1xæ©çž|öé矀*è „j¨ ÊÐóÁ¢Œ6ê裐F*©¤c饘fªé¦œvê駠†*ꨤ†j=¤ªêª¬¶êê«°¾ÿ: 0´Öj«0¶æªk®¸îêk­½úì¯Âûë°Æòšì²ÀÐÓÁ³ÐF+í´ÔVk-µô¢í¶Üv[À·à†û-DA„¸è¦«îºì¶ëî»àv+ï¼ôÖ«­;
+p ï¾üöëï¿ Üï »lðÁ¯ûÄ	eá…e”ÁÅðVlñÅ€ðÆwìqÁ¼¸Â$—lòÉ(§¬òÊ&`ËË0Ç,sºxA†EÌðíHáp-tÆ2môÑHÇì4íôÓPG-õÔT;=À,Xg­õÖèJñ…ìz
+öÐd—­îÖh§­öÚ[»³@pÇ-÷Üt×m÷ÝpÐÊÞ|÷ÿí·¸R˜Q„»E˜1¶Ùˆ—í÷âŒ7î¸ß¬¸£ ”Wnùå˜g®ùæÀÊç ‡.z¸O|q.¸kd1Å#P._¬î´×N»º<?QÎ¸ÛîîNèÎûì¶×þ­èÈ'¯üòÈ«âD/ýôÔWoýõØ ÊöÜwï}¸eDn^´`þùd8ne «ÅfÄÿâ‡;Ã_œÿÅCt
+¿üePëÄåØ@[8¸fP†ÿÍÏ:óž'HÁ
+N0Ž @6ÈÁzðƒ apŠšð„(\ŸÀõ„žï…- ê®ÀÐ|‡+€òwCÐð[#¸¡ùÿ~X )±`€B¸ˆàÂÚ@g(Œ¢§HÅ)ªÂÈ¢·ÈÅ.zñ‹_@)ÆHÆ2š\^Pâ·¤ óÍ0
+64úW€(¬0\q´AÄ"¦Æ¡‰fð‚^¨>pÑ|
+<†…–Á<lÁ†ÇDó}a,€7ÉÉNzÒ“§°ÄFIÊRšò”¨L%*0ŠVºò•°üÖÊ0¼ÌàEáj¤ù´°3Zâэê*Ÿù²À;#šáÊ"m9…ó¹n<´o¹¿Á½Î…9ü,·ÉÍnzó›í°„ÆIÎršóœèLç9 Švºóðü֐é.a¶ï[^`âxÿGqUà|¼×!chÈeàŸæS£.[@ÄtU²Ù, <'JÑŠZô¢ E9"ÀÑŽzô£ 
+©H?:€O˜ô¤(M©<O ®-˜ae0ƒë´`¾'~k}ÜgM÷H†bžÏš×4ßÀ¥Ìܳ¨-°f3‘È»(dA
+P…*ïzɘ4¥XͪV·ÊU“’b«XÇJÖ²šõ¬c@'ÖÊÖ¶ºu¥h¼aýŒi:âô—7¤cQ).hšom
+ д ‘<Ÿì
+ðЪà[n¬d'KÙÊ®u ŠHÀ6ËÙÎzö³ 
+-g!"Oz`盟ë–:I|ê3 ô©ù€º3ÿõ[HMmQÛ3€k0<ÝCÁ0¿€Bä¸a–ËÜæ:÷¹Ð.s@ÝêZ÷º¥/‹hIñnÀe©-Ë@ÇoñÓwßZÃù² ¸óõññ3ßcÃe̤Ê3
+O ©$§ŠM[» °€`8BºNpt	|]4N³-ØÂwU ØoÙQ\q4­¸Èà^pAÁ…f^Qóy¾Î Âýü…[ ^ƺ°¡Ž±Œ<K(øÆ
+žqv×ØÏú~áa‘œ³ÉOu©÷|^˜‚0ͧÏC¶·6 QÑ'(H¡?
+ª$mFèLÇ`Ö±@<Q›ºœH³š×ÌfN,°ÿ}Ìí…la
+›÷˜ëúð³	_[Bx»7="C—ØDEê¬ÍˆN´¢­hê ù8³¤—Ëh6“®µß*ÂxÉ-H¹ C)ºx›btaÅH.d2KO#ð¶ë.úôÉØ/ØàÖ·6ê¡+Íë^WZ ‡8À¤Ï¼‰bûØ›À±Å•…2(pgµdlØ;;rEÛ¡VŽÂ³ígív»¯ˆ‚¢@[nÛŽ¼C¶º•­îv»ûÝïæf0lÃ[ÝèÊýØ…¯%îßd»·ÀNðcw"³õV0!Îð†;œéZƒÃ´ím;za± Ï8ÆÎñŽ{üã oø&င#¸(ÿO¹ÊW^ˆuEAdpĺÜPÛÜ],ϹÎwÎóž³\¹&®!†Nô¢ÝíâÙÖ°»›;ÝbGºÔ§NõªGôºsÁõ®{ýë‚xºØö²›ýìhO»Ù®uæâíp»ÜçN÷ºÛýîxÏ»Þ÷Î÷¾ûýïrW„°ÛN ÀþðˆO¼âø>"Òmïƒä'OùÊ[þò˜Ï¼æ7ÏùÎ{þó ½è/ˆo´ý¨O½êWÏúÖ»þõ°½ìgOûÚÛþö¸wý ôÜûþ÷À¾ð‡O|@Þä~H¾ò—Ïüæ;ÿùЏ¾ô§Oýê[ÿúØϾôKŸð=xÿûà¿ÿøÇOþò›ÿüèO¿ú×Ïþö»?ýŒ¼¤ßOÿúÛÿþøÏ¿þßKš €8€X€x€˜€
+¸€Ø€ø€è€zà8fx˜¸؁ø ‚"8‚$X‚&h‚ˆcw°‚,Ø‚.ø‚0ƒ28ƒ4Xƒ6xƒ8˜ƒ:¸ƒ9hwàƒ)˜`x0„DX„Fx„H˜„J¸„LØ„Nø„P…R8…TH„yÀå Zr°…\Ø…^ø…`†b8†dX†fx†h˜†j¸†lØ…s0yàYèYoX‡vx‡x˜‡z¸‡|؇~ø‡€ˆ‚8ˆ„8ˆtpˆˆ˜ˆ‡Xzà–P ;
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/header/top-middle.gif
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/header/top-middle.gif	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/header/top-middle.gif	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,2 @@
+GIF89a 6 Ä     ÿÿÿGGWFFVIIYJJYLL[OO^RRaXXgWWfUUc[[i^^lccqhhummzrr~wwƒ||ˆ„„™—— œœ¥¢¢ª««²¦¦­¶¶½®®µ³³¹½½ÃººÀ,     6  `â}[ÇevY5Iô8
+£,ÈaÂàÿÀ Ð'B ;
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/header/top-right.gif
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/header/top-right.gif	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/header/top-right.gif	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1 @@
+GIF89a 6 ¢     ÿÿÿFFVJJYRRaXXgYYgmmz,     6  X¶ÌECÈI«½¸& ;
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/adddoc12.png
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/adddoc12.png	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/adddoc12.png	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,7 @@
+‰PNG
+
+   
+IHDR         ½ýì   bKGD ÿ ÿ ÿ ½§“   	pHYs     šœ   tIMEÕ튲œ  5IDAT(Ï…‘1ŠÂ@†¿‘1›*V.$…BÚTÞ@o [x ¯ ‹ì  ØÙå[å
+bñ jc%b+ŒÕÛB3d—,~ðª™ÿ?ïWiš
+O¾Œàs6#´ÖcUÒ4ˆ€‡C9ò4+€5Gî÷; "‚ˆPŠœ`½^;ÁívÀƒR
+¥\*QRYWGC©rÃÿ‘ªôû}ò<§(Š‡`6ò1…¡ûôæy¼·ÛDaÈåra³Ù¸7ÝjµX.—Xk!I èt:,â8Æ÷}¢(b¿ß?Zkâ8f<óýt¹^¯dYFÎy>ŸÿîÁZëzH’Dv»XkÝE!€èÒa0`{=N§œÏL&|ßwV«Õ#Rõ"žçÑívh6›µWÓ ÛíÖ9¼Bñ¢¸¿ü ‹s§TN¨    IEND®B`‚
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/caret.png
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/caret.png	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/caret.png	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,4 @@
+‰PNG
+
+   
+IHDR   	      ž¥#’   tIMEÐ	3bhŠ“   	pHYs    ÒÝ~ü   (IDATxÚcüÿÿ?022"s™%à$Š²‚l2À%3 < ®B-Î    IEND®B`‚
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/cfolder15.png
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/cfolder15.png	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/cfolder15.png	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,7 @@
+‰PNG
+
+   
+IHDR      
+   AÀÄs   gAMA  ±üa   PLTER‚LNÌü¦˜|ŠJL:B@°Ã¬¶òlrªd[f]¦¢”þ¤T{ƒ{ÞÊ”¦¶z•nRfüJt at JPüB>Bþâ\zBD $#¾³—®Ú|þOXæåÏ…¦yõóò–‰už’u7]1OþYlsl‰®€ÞÆœÆŧ¶§ŠzŽyjziæÕ²+2-±¶¼öéÝÆÌÄnfXÆ~„ræ´¨ª£‚ykƲ삢¼JIJšæÜÀJèüÖ¥¨ÞRüîêÙ¬½Æº•N–ü™¥Š†|~žpÆÞ|zz{9<=n“cþ„PZUMQUSÍÒÊztpŠŠŒÖÎÑî۾κ›[[SÖÔÓBJG„‡¶³³îæÔrn[©¬¯Þ´´RZVŠPüRnL‰”™)++þ`Pþþü—°ˆÖÆ´—œ¡ÆÆÄÞÞܾ¼»j†\zÆÌΊ즦«þOŒRþ|r}~¶flNþ¸ÆŠŒBDD–•—qut€Œ‘ÎÌ˝ªž"[]]ž¶Œ
+
+nPüîòlæä䄪}¶º½‚nôKNMJ¢üÖž¤þrTþQŠÚ|±[_R²üþ¸PRÖüÞÞ|þ’Lz>DþN¶ªPüÒþTP|üžÒ¬þÐRþxXþ^ÜþôP¾z|N\üö¸äžÚŒjö\jÆÜþ®Tžzô涔æÂÄr¶ìbr\ž¥¬Mþäöj„ꮰΚœ RT®þTâþPþNübªìbŒX¾¾Ä‚ÞÄ–þLæÌÌ¶®³æ¼ËR~Ir›lZöü^Pü¾NüÞÕÙŠšœr‚…Ö®´þþTb~\®ž„žŽm‚~ƒžª¬¾ÂĶ»´bkföîêþr¤ZþT¶®”jŠd‚δŠ–|*&,þöüîÕ×ÎÚÌbþL¾¶¼ÖÚÔ¶bdzNüRžüJÞüþêLÞÎ¥Oþœ–Ž“þOtîÚäþOÔž¦Ô¾þPîþL²´ØþšTRºü–NL–Nü¦š‘®³´Š¢ŒÞÖÄjfkíë띢¤‚š„kmiž±–r‚tÞÊäJþtRþÐRþü¦ž¤îæìþP¤®¢„‚“|Ƶ”Î羪„‚Š„r{tlÉ]   xIDATxœUÎ!€0…á&=ªrrff‚T“`PÌŽ‰j	Gà(ÚB¼eâÛoÓ Wö1pæ¯!S¦J`S—h§ÌK<õ%ò>ÈáÃ1©ÛºÞºUÖ¤…‡°n˜žÞhuˆþîV®dŽ=’÷~>›.#º<Èœ§ù    IEND®B`‚
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/check.png
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/check.png	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/check.png	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,7 @@
+‰PNG
+
+   
+IHDR         bØx   gAMA  ±üa   úIDATxœcüÿÿ?^ÀÈÈÈÀÀ WÆBPõæCË÷žÚÈÈÈÑÄ_Ã¥Û§>½ÿŠàÿÇ
+¦¯n+è‰@V†°‘‘â\dðîÓëg^#‹°ÀU/Ú;ïÚ­kp·222¶Î-|ýþùª){‘aó÷ÏDàÁÂÀÀðúýs4ãþÿÿ_RÃÀÀP1½¢'®Ì‹Íx,¡$ *ÙšÆÀÀÀ/či<#²ŒŒŒkZ\;ûïßÿY
+0£Å¸ÃXÙY_>~‡i<'A€´²Þƹ‡°¦ô¤ñÿÿFFFˆ7°F¬ÆÀcƒX
+x  /H‘öe+ƒ    IEND®B`‚
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/cvs16b.png
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/cvs16b.png	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/cvs16b.png	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,13 @@
+‰PNG
+
+   
+IHDR         ‰
+   bKGD ÿ ÿ ÿ ½§“   	pHYs     šœ   tIMEÕ&§LNW  oIDAT8ˍ”OhUÆ3™—Ÿ¯i“41Më{©‘¤–t¡(BZ7Vt!¸Hiîê+÷ҍ„RÄMtc@´%d!%QjÁ(
+mìK›?¯Ï¼¿3Ó™û×Eæ¥1$†sïýîù¾sÎçð8\v›|{†“¬G³ÙìˆçyÞ– ärY[«Õ¯ÏÍÍ­r/`pûúúF¦¦¦¾noo§Tõù§\ã…l7 «««LLLÌ
+…÷—––îâI€.€ã8^ɏÉ**«!™L†t:1†jµòrooïàÀÒln:žá»k7È>Û†V’(zDøtuu266F¡°Ö	ä€v õ$Ê ´ìkæÒ‡o#¥ä•ÁcÔj´6c"FJyèMŽ¯ ÞÐZ‹ÖŠ ’Ë
+¥$ÍÍ)Œ±(¥qמz’Â`Ð;*¥R DŒR
+¥ÖjŒÙx,•òŠÀ4pèJ²«µ­•ß¤¬”FÊ)RjŒÑ„aȽ{yÖ×K(¥s===¯;Ž£Â0ò<¯800pwffæ' hdšdhÐZERJŒÑh­‘R±¸ø7çνÇéÓoÎXû¸
+EGGÇg“““_UÀx år%^XXx¾kŒqÁZÀ!kmªûð×óšÈ¯¹që6CÇ{éÏfvv¶ø<›ÍÎäóù߀Èl¹\¾~öì; Ç},ðý¸R«}ûã/¼tâyZ3-´ïoÁ÷ëœ:õa0==i°õ’ËEàgàº_õL&óîÁýi†ç8Ôšfi¹@q½DÛþô¦4ÖZ·1²¢èDØe )Ù<	Ì[kBÐôR
+^Ìb̆æZotµ¶1ÿŽ·ÍQàa2	8éû~gG”­q1?ÿ'ù›ß°¼R@Æþ0óŸ¶I ëÉ ¾çy‘1BD(¥¸sç.ããWx±í6Ÿ\|
+Q‡þ¶ûŸ^¯þ ÜôvG”€©”H)ˆ¢­5çÏ_ \®.Íŏö¹Mõ5· }»6èG@)BÿÁƒ†ÖZ._þ‚«W¿b uÞÕÅ[n]øÌýU¯ ól7Ó]ÌcZ¶ž*EæÍaoçÚïêJñ= œÿá詬i›Ë7˜˜„MØ
+ÐÊ¼ç«    IEND®B`‚
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/docman16b.png
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/docman16b.png	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/docman16b.png	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,10 @@
+‰PNG
+
+   
+IHDR         ‰
+   bKGD ÿ ÿ ÿ ½§“   	pHYs     šœ   tIMEÕ-D¸—œ  áIDAT8Ë­”=oU†Ÿ;3¶aM?v\Гb-!¹±%šüáÂÍ"wt®,!ZR¦
+%5K‘X
+aYB‚ÆB–£Í®!&kYâÏ܏s(vv46W\iš«£gÞ÷=çøŸ™t9??³^¯ÏDQ4±.Š"ɲ¬ßét~, W£­­­¼Õj%à…BÐ~¿?ØÞÞ¾sppð9ðà Mª…‹‹‹­¬¬ÜÉÎÎc ª–5,//›óóó¹ë×ßù¤Óé¼LÓôà9à«ÀhuuõF»Ýþ Žãò²
+SUºÝ.»»» 4›ËµG¾}/MÓ€€z½~sccãË¥¥¥Ä˜‰±’$	×®½ÁÜÜ<÷ïßãôôOnßþ”[·Þÿ¦×ëÝ~ž' Fcfss3i6›ÄqŒª^PÊññoìïï³··G«õ!íöWœ¡ª `¢jsT•BùyïqÎ’ç–ZíuºÝ'rrò”ÙÙÙÉNªùxï1Æ *\ñ8AX__§^oðâÅß„ äy~ÉÉD „)©ôˆªcdÄqÄåÈÿ¼wxïKpÊœsˆÖZ¼Xk¹$pY´6Ç9GïG°SSS…bAD0f¬0¾*ÃQ&ÎÙêDBÐ"ÛP8Qœ³W7Źœ<·„àËN«JVŒ‰Q¢Èà½Ó^ï8Xk= —€Šˆ’çks¼wˆ("#‹Y–¡ªÔjµâÇžgÏúgwï~v¯èå[ÑRaš¦¨JE :r0==µ¹>~üý°×ëý|ü
+œ ç%p8âœ#MÇ3nˆãU!Š(À#ÃáÐ>xððkà'à	ÐNPSì·w×ÖÖ>β¬¡*3ªzaºÆÃkŒa0ø';::züt
+ØØr¹§€·€·7‹wùª#ÀKà)ðaU ^jÀô«6y¹)ÀªÎ«Ûà_qJ~´    IEND®B`‚
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/forum20g.png
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/forum20g.png	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/forum20g.png	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,14 @@
+‰PNG
+
+   
+IHDR         ‰
+   bKGD ÿ ÿ ÿ ½§“   	pHYs    ÒÝ~ü   tIMEÕ+bˆÄ•   tEXtComment Created with The GIMPïd%n  IDAT8Ë•”Ëk”WÆç|ß\ÉLL¢™˜1©ÆµqÔŠ¢ÒB…Þ¨ ÚM…‚«B7ýJ7ݵëb/”R{-(­…Z5*ÖK5:‰†˜ŒI&™Ìí›ù滞.:BŒìïâœÃûã}<¯àF×îÙ½ëÃtºëë¸rzfú¸ã˜Ÿ_ºüwÿ«D"Ñuäð[_ŒŽ\­WŠ9)ŸõOŸ<^y{赯^9°'ò¬œð*ptûöÁÏŸ;S¶Í%å4
+Ê2fT5M<ñim×Î͇W6ê+ÎX|lô{“ú÷ß}L.žÆõuÀGS&™û¢zÓ‡þº6öPÐV “ÀGÀ‚¶më7o‰}½
+6µÛ³XÅD¤-ñœ¼tùú™ºiŸ6ao$(fºC”LËQ¬ŽJŽâç?slMuKlËÆZZ¢5Ùߏ‡c‹K•ÿ¶Ü‘Áu¡–O†:°<í*ÂÒct¦Á©1‹ŠÑ ¢é”ª
+°‚^¥QÑÇÓžú‡éV=°·' xô´êtƬ†¡y\Ÿ4hoSîÃ…‡¢j˜ÁåŒÇèë“ÚšÁÎÀÑtBFrE
+…ò|.λØÁ؜ũŸÖtZ¿råN¨‚ÛÕ°ìÛžå. ê1 B¦âò¥xõcó•ºËy‡XPðƒ
+s#eŒ(õö ÷
+ä¢e¹éŁ>ÍÕ÷”•³¾å•–׈XÇ{•U}‚N91š3É•}f«Š‰z‚…x¡¤ÆÖ½[0c&v¹Z£*ªbÝ@wªr¿«-4€X<Ñ»9óÂg‡ß9v,³ÿõ¶lIg©jR¶„º2tdÞ¤#ñ<µi›B!‡L)DH |…ò†eP/Ôµ)㜠b;vïÿú#ïف$
+k™yym1®f羑¥n¹ø¾ÇÝ‘L†‰oà»>žíãÕ|ò¿.œ¯fKïë@_ÿ–ÌN?ØB­f"¥D)Å͉ú6ìg®8R'Õc2—§³wüõû”G¦-f#oÖêYë¶9cœ ò:Пl_Û5¿X!R"„àþÌæ˜ÍÙØÝÎŽ~ü­ÊR±D4˜fü§áÓÀ@˜&CZ+5+èúu4MC
+‰ ¸5>E¾Pdb*ÇïÃ#¸®‹m;ø
+¸œlæØÀÑu7›uR}‘€&5%5	Bˆºò¸=>E±TÁ¶\×QvÃRµjI>¿qmNgñoÔ£í2¯ú Õ¿ó c)©éRH)A)¾¯€ç:žÝ0»nŒTs_gÀ[¹®ÂÀj hBÍHÊæ;€ß´d³@(5­>±ÿh6ëËJk–\ôšPp›wOèðVí—þž û    IEND®B`‚
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/forum20w.png
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/forum20w.png	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/forum20w.png	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,14 @@
+‰PNG
+
+   
+IHDR         ‰
+   bKGD ÿ ÿ ÿ ½§“   	pHYs    ÒÝ~ü   tIMEÕ+bˆÄ•   tEXtComment Created with The GIMPïd%n  IDAT8Ë•”Ëk”WÆç|ß\ÉLL¢™˜1©ÆµqÔŠ¢ÒB…Þ¨ ÚM…‚«B7ýJ7ݵëb/”R{-(­…Z5*ÖK5:‰†˜ŒI&™Ìí›ù滞.:BŒìïâœÃûã}<¯àF×îÙ½ëÃtºëë¸rzfú¸ã˜Ÿ_ºüwÿ«D"Ñuäð[_ŒŽ\­WŠ9)ŸõOŸ<^y{赯^9°'ò¬œð*ptûöÁÏŸ;S¶Í%å4
+Ê2fT5M<ñim×Î͇W6ê+ÎX|lô{“ú÷ß}L.žÆõuÀGS&™û¢zÓ‡þº6öPÐV “ÀGÀ‚¶më7o‰}½
+6µÛ³XÅD¤-ñœ¼tùú™ºiŸ6ao$(fºC”LËQ¬ŽJŽâç?slMuKlËÆZZ¢5Ùߏ‡c‹K•ÿ¶Ü‘Áu¡–O†:°<í*ÂÒct¦Á©1‹ŠÑ ¢é”ª
+°‚^¥QÑÇÓžú‡éV=°·' xô´êtƬ†¡y\Ÿ4hoSîÃ…‡¢j˜ÁåŒÇèë“ÚšÁÎÀÑtBFrE
+…ò|.λØÁ؜ũŸÖtZ¿råN¨‚ÛÕ°ìÛžå. ê1 B¦âò¥xõcó•ºËy‡XPðƒ
+s#eŒ(õö ÷
+ä¢e¹éŁ>ÍÕ÷”•³¾å•–׈XÇ{•U}‚N91š3É•}f«Š‰z‚…x¡¤ÆÖ½[0c&v¹Z£*ªbÝ@wªr¿«-4€X<Ñ»9óÂg‡ß9v,³ÿõ¶lIg©jR¶„º2tdÞ¤#ñ<µi›B!‡L)DH |…ò†eP/Ôµ)㜠b;vïÿú#ïف$
+k™yym1®f羑¥n¹ø¾ÇÝ‘L†‰oà»>žíãÕ|ò¿.œ¯fKïë@_ÿ–ÌN?ØB­f"¥D)Å͉ú6ìg®8R'Õc2—§³wüõû”G¦-f#oÖêYë¶9cœ ò:Пl_Û5¿X!R"„àþÌæ˜ÍÙØÝÎŽ~ü­ÊR±D4˜fü§áÓÀ@˜&CZ+5+èúu4MC
+‰ ¸5>E¾Pdb*ÇïÃ#¸®‹m;ø
+¸œlæØÀÑu7›uR}‘€&5%5	Bˆºò¸=>E±TÁ¶\×QvÃRµjI>¿qmNgñoÔ£í2¯ú Õ¿ó c)©éRH)A)¾¯€ç:žÝ0»nŒTs_gÀ[¹®ÂÀj hBÍHÊæ;€ß´d³@(5­>±ÿh6ëËJk–\ôšPp›wOèðVí—þž û    IEND®B`‚
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/ftp16b.png
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/ftp16b.png	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/ftp16b.png	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,10 @@
+‰PNG
+
+   
+IHDR         ëŠZ   tIMEÐށ¥   	pHYs  
+ð  
+ðB¬4˜  NIDATxÚcd@¯Þ¼Â%ráÒ)))dYFˆ
+T Ô „³‘!€"ŠÕd³ 6£‰³à×w<Vq&
+ #Akñ üþÄïr\zšEÿÿÿ¯®¦îáéäòÃÄ‘MaAÓÔ$ÚþýûÇÈÈ‘²ßßmdbb‚›1%Àö­	¨íýóçO 6 R¸f&0¸yófbjmi2;vg«©©=¹TvõêU÷È­5Y|ììPu—/_ž6s•´»‡‹Xà
+Î ÓÖÖ~rIûÂù>ñ»š¶î<*.Âî`«CBhÜ;£¥d2aV‡.5ø	^@Q
+CÑ|ôèÑçÏŸã×ðòåK,~†eÝ£{Vùihh`Õyýúõþ…±<ßNn¸nai!))	—ºvíÚ„Eÿp¥0'Ü^Ðg„K0,pçg ¸•—ÐX™»Ã    IEND®B`‚
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/halfcheck.png
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/halfcheck.png	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/halfcheck.png	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,5 @@
+‰PNG
+
+   
+IHDR         bØx   gAMA  ±üa   ™IDATxœcüÿÿ?)€‰$ÕtÖÀÈÈÈÈÈHP\õ¢½ó®ÝºÆÈȈ?6<{ÿL at T ¢™°†ÿÿÿW„Ô000TL/è‰/÷&`ˆ
+d¶¦100ðqÐ ·D^].£)ðçßX݆b\+;ëËÇïˆrH+ëmœ{kp± ñÿÿÿÏÈÈñV€=Ôñāh ”8çUU    IEND®B`‚
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/home16b.png
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/home16b.png	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/home16b.png	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,12 @@
+‰PNG
+
+   
+IHDR         ‰
+   bKGD ÿ ÿ ÿ ½§“   	pHYs    d_‘   tIMEÕdY2¤  ŠIDAT8Ë•”ÏO+UÇ?ÓN—Ky´”VRñA] ¡ZpAHi‚!bHÞ…ĉ‘¤·Æ…ì\°€W„%J"?´ÏGD~…Ÿó¦´vfÜ/
+ø|~““Ü{Î=ß{sÎ÷\x9t:öŸîñÂYoÁ`ðY–Ñ4í}`ÿ‰ÍG}=v_Ûø®©©i³««ËN§Ó¶byQ²ë>çhª·­øýþ‘D"‘N&“d³YZ[[ÓÁ`° ý¡ûßÇ}íZ¾ÞþƒhkcccD"†‡‡I&“µ¨ª:fšæ·€úR„ߟüÙÒùæC2™Ùl¯×K.—#•JÑÛÛËÉɉ8==5ã«Û¤·	‡‚Áà£\.'ÆÇÇ ™LâñxèïïGUU‰Š¢pxxÈñññ{õzý1ppáH8þbzz:511A&“AAGG–eÇQU¯×‹¢(D£Ñ›—Öjµmà÷¿ËfHñe>ŸOÏÌÌ
+…ðûýX–…,Ë\__csssȲŒ,ˆÁàà +++llllišöэ¤:}·ÛmÇb1{uuÕÖuýŽ­¯¯ÛÝÝÝöüü¼½´´d+ŠbÏÎÎÚBÛívÛÀ>Ðéž	Ó4¥³³³…ƒƒöööh‹EéO)ô¼ÒNDü~?ñxœ|>Ïèè(@€óós4M[0MSÀÓ;:,‹Ø¶Í»o=dù“ù|âbá  ———,//³°°€¦iÔjµ;‘oí[\\,ONN$	Ì«g<98¢R«£ë:ÍÍÍ
+„(ŠB±X,Û/"üymm­T.—H–ìÅïóá’$E¡P( ë:@€b±ÈÔÔ”v{¶ïúÎÎNÔ,é”Kešñ¸]ìîî>?T*•¸¸¸ ¨{·	LÀÌ퍉”T¶~ù•SË…eÛ!þq³ªª89.§!à\²À`ú|¾^ãՏ׃KrQ«×¨eª•*F¥F¹T&
+‹G©T+”J×x=ÔËg?\©ú!ð™ÛÑÏ	0
+…ŽSÝÉ×|
+¢oÀ‹ËãÂ喐$°Lû°9Ú|oo‰º½.l,BáÕjåÉõUùSౄ€I ø	hwÊÐ	D ¸tFKÊΜؾÓé­›Ñs
+@ݩɍ?àÔØrb•{~&ËiÌsü“¤iO=v£Â    IEND®B`‚
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/index.png
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/index.png	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/index.png	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,9 @@
+‰PNG
+
+   
+IHDR         oª¯   gAMA  ±üa  ±IDATxœcüÿÿ?5 UL¡¦A,ÈFFF2Œ€šèƒ'H2EAF à5…-;Ö4ÝEh¦LhË|üôuNJ	Ï|&ýG˜²§¯šÐ–‰ß-½øÂHAF“‹ž2§«‹ˆ
+£ïß>A9)%
+2
+‡Æ¥’ØtTUåì`4cÚt\Áî5¸S!àÛ—÷†•©ÖÏ¿z§®™Ò{ÿÁ󜔒†|.zðä$˜Š³ÑCDVZ”AAV˜Ж‰¬gôCT300hkk@"NEIÎز¢…€×à@EIÂ`çà626þùã+² <~ú§Ahaôåãk>A	¸‰?¿Æe1Î0ºsïéÌþvN^„)?¾Â
+…€—¯Þã4n\AÕôïß";bœ{çÞÓ·ï?0 A ×üóÇWvndÛ÷œ†g,|aÔ;u¬´¨‘±1¦‹îÜ{ŠÒè.ú
+ Žúôþŧ÷/àfÁ#¡™ËÈÈ(+-ª­­÷Ü×KVïE.0ð7’üØ9¸á) Í9ŒÔªŽ UÚ«ÍTla    IEND®B`‚
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/mail16b.png
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/mail16b.png	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/mail16b.png	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,9 @@
+‰PNG
+
+   
+IHDR         ‰
+   bKGD ÿ ÿ ÿ ½§“   	pHYs     šœ   tIMEÕ	g8]h  IDAT8Ë唿kZQ†Ÿû#Ö*Tã¨EDÌ’@FI\¬ÈûŸ8´{Çný/²eB” hîMˆ Yܺ	R¨ÄsÔ{ï9]Œ´M-ÙúÂ;œÎÃá=¼üw2^8o#½
+x|>ü¨|€àiø1ŸÏë««+=ŸÏu:íû¾ö<OÏf3-¥ÔB=™Lôã㣏ÇúòòR—J%
+|b€i>ONNF4
+æó9B„H)™N§Ìf³¥¥”ÜÞÞÒjµ8>>x¼}…Bœ1h6›˜¦‰Özi¥Zk‚  ÝnÓjµ8==%˜æjáp˜r¹Œ‚‹‹‹5¨ïû¸®K·Û¥P(L&×}TJaÛ6¥R	¥õz}9WJÑëõh4°··‡mÛZ–…a†A<§ÝnÓl6ñ}Ÿn·Ëùù9ûûû$“I‰ÄÆ/_{¡çy8ŽƒmÛÔj5†Ã!Žãp}}M¹\&•J1R¾ô<››"‘Åb‘X,F¥RAAµZåð𐣣#Òé4÷÷÷ÏB¸»»cww—\.Çx<^ÆP,ØÙÙA)E6›Å²,Çù=°ÓéËåÈd2ôûý¿ë­aàºîÆîf€Ï‹ê™[Vï;ð
+pÆJ–QàÞrI(@?éêEk¹%P/–‚¨W__¯®_…ùþóyS=J    IEND®B`‚
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/mail16d.png
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/mail16d.png	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/mail16d.png	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,9 @@
+‰PNG
+
+   
+IHDR         ‰
+   bKGD ÿ ÿ ÿ ½§“   	pHYs     šœ   tIMEÕ	g8]h  IDAT8Ë唿kZQ†Ÿû#Ö*Tã¨EDÌ’@FI\¬ÈûŸ8´{Çný/²eB” hîMˆ Yܺ	R¨ÄsÔ{ï9]Œ´M-ÙúÂ;œÎÃá=¼üw2^8o#½
+x|>ü¨|€àiø1ŸÏë««+=ŸÏu:íû¾ö<OÏf3-¥ÔB=™Lôã㣏ÇúòòR—J%
+|b€i>ONNF4
+æó9B„H)™N§Ìf³¥¥”ÜÞÞÒjµ8>>x¼}…Bœ1h6›˜¦‰Özi¥Zk‚  ÝnÓjµ8==%˜æjáp˜r¹Œ‚‹‹‹5¨ïû¸®K·Û¥P(L&×}TJaÛ6¥R	¥õz}9WJÑëõh4°··‡mÛZ–…a†A<§ÝnÓl6ñ}Ÿn·Ëùù9ûûû$“I‰ÄÆ/_{¡çy8ŽƒmÛÔj5†Ã!Žãp}}M¹\&•J1R¾ô<››"‘Åb‘X,F¥RAAµZåð𐣣#Òé4÷÷÷ÏB¸»»cww—\.Çx<^ÆP,ØÙÙA)E6›Å²,Çù=°ÓéËåÈd2ôûý¿ë­aàºîÆîf€Ï‹ê™[Vï;ð
+pÆJ–QàÞrI(@?éêEk¹%P/–‚¨W__¯®_…ùþóyS=J    IEND®B`‚
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/mail16w.png
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/mail16w.png	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/mail16w.png	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,9 @@
+‰PNG
+
+   
+IHDR         ‰
+   bKGD ÿ ÿ ÿ ½§“   	pHYs     šœ   tIMEÕ	g8]h  IDAT8Ë唿kZQ†Ÿû#Ö*Tã¨EDÌ’@FI\¬ÈûŸ8´{Çný/²eB” hîMˆ Yܺ	R¨ÄsÔ{ï9]Œ´M-ÙúÂ;œÎÃá=¼üw2^8o#½
+x|>ü¨|€àiø1ŸÏë««+=ŸÏu:íû¾ö<OÏf3-¥ÔB=™Lôã㣏ÇúòòR—J%
+|b€i>ONNF4
+æó9B„H)™N§Ìf³¥¥”ÜÞÞÒjµ8>>x¼}…Bœ1h6›˜¦‰Özi¥Zk‚  ÝnÓjµ8==%˜æjáp˜r¹Œ‚‹‹‹5¨ïû¸®K·Û¥P(L&×}TJaÛ6¥R	¥õz}9WJÑëõh4°··‡mÛZ–…a†A<§ÝnÓl6ñ}Ÿn·Ëùù9ûûû$“I‰ÄÆ/_{¡çy8ŽƒmÛÔj5†Ã!Žãp}}M¹\&•J1R¾ô<››"‘Åb‘X,F¥RAAµZåð𐣣#Òé4÷÷÷ÏB¸»»cww—\.Çx<^ÆP,ØÙÙA)E6›Å²,Çù=°ÓéËåÈd2ôûý¿ë­aàºîÆîf€Ï‹ê™[Vï;ð
+pÆJ–QàÞrI(@?éêEk¹%P/–‚¨W__¯®_…ùþóyS=J    IEND®B`‚
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/manual16c.png
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/manual16c.png	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/manual16c.png	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,9 @@
+‰PNG
+
+   
+IHDR         ´´   tIMEÐ L.+   	pHYs  
+ð  
+ðB¬4˜  ¢IDATxÚc|õæÑ€‰x¥@À‚ÌY·vÝ’%‹0­[¿]õÙ3g'Î_dþûß¿?¿~A¿|x÷ðÔA,.Y·i£²ŽÁ?¸R ¸{át¨Ÿ7ºj Á[wì”Q×úýû7\îÝ‹§
+"üJJJ(ª_¿~ÓÖÕœ[þóçÏÿÂå¾¼~¡$+ýë÷ À „ê¥KsË©üúýçïŸ?Èž{{ë²££Ã®Ý»bbâ ªïܾ{ôÂ%eµ?¾#+=½}CZZÚ‡Oï9
+“³§N|ûðñÙ£‡ÿÿòñó0±q³°sƒ‚‹ù¿¬œÌ‚¦L™	7‚ùÁ•+1.Ž<\,
+"<rÂ\^¿:wòäõ‡“c"~üüñþýO/nn.¨Ùÿÿÿ332Ôñpeagÿþýû«W¯=~òþÝ{N.î#ÇKHH‹ŠŠÀÍf<}úleYéÏ?L\=LUdTµtå%E_½~sáÒÅÓçÂcªžª&Nè’çoßWæâ—”¹qõ’»£Ü誡‘w÷îǏ6lÞ2wÖ̧OŸ¡% ð§ÅaL5dÌ    IEND®B`‚
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/msg.png
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/msg.png	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/msg.png	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,5 @@
+‰PNG
+
+   
+IHDR   
+      ©E1“   0PLTEÿÿÿøøø      ÌÌÌÀÀÀ†††      UUU   999         ÿÿÿ HÖr   tRNS @æØf   tEXtSoftware gif2png 2.4.2£^G   tEXtComment Made with GIMP~e•   BIDATxÚcHKKK``Èÿÿ?Læ_`ȍ¿{Èþ(âː”’ÿäÌ™3¤ ˜½{÷n_†_†»   *´² I`é    IEND®B`‚
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/ofolder15.png
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/ofolder15.png	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/ofolder15.png	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,5 @@
+‰PNG
+
+   
+IHDR      
+   AÀÄs   gAMA  ±üa   ÀPLTE††„ÊÊÌJFDjfTææபœ~vd**,––”ööìÞÚÌVVTnnl–Ž|º¶¤~~|^^\ÖÖÔîîì:6,þþüjjl¶®œžžœââä†~lŽ†tÒÎÄVRDrj\îêä""¾¾¼>><¢š„vn\f^T®®¬ÞÞÜ..$úúôòòäzrdÎÎÌ‚zdšš”š’|‚‚|bb\Š‚l’Št::4ªª¬NF<ZVOÚÖÌæâÜnfTúö욎|‰€å   ªIDATxœ=k‚0E«âaÂ`Õ	.â‰8³AÌþÿ¿²hâùÔsÛ·€_R­Š¨e‚'	‘¦ZJX¨8ŒÕ{¹^/7µβcÞ®jŒ‹ÌqèöòÏUTŒsgŒ…ª¹Îp:)3Œ1øÌ}kAnÛð¸átÊ(3´Ç^y°¬#WÅ–ƒ17Æ8o/©¹l¸sžºwE;lj½ˆHâßtú{ä@RÒJ¥¼    IEND®B`‚
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/pencil.png
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/pencil.png	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/pencil.png	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,6 @@
+‰PNG
+
+   
+IHDR         Éþá   gAMA  ±üa   0PLTE
+ŠfÍ 83'„h0íØ¥¤£Ÿþþü§~û.ZK,àµZ`]V·5€yjô ¬   ±IDATxœeÑÑŽÄ P)Eþÿo»ÉHgx19¹PR‹"O¨ʼÚ‘,ѼW\NÊÚÝ+Òh™ô7NRer·‚øÁ
+®ÅÊÍ^ɘ—*nãƒ}ªjïýÌy;&fð ÏÄ=Ï]ÖÜÍÚöÛnÆܦ´v›Îá>VAŒØºaA1Ê}„|PÛó î—D~â£KAx–¯x@d¡´€úUÿ ×72Ü"?Éöeò]Ä^AÁô    IEND®B`‚
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/rss.png
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/rss.png	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/rss.png	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,10 @@
+‰PNG
+
+   
+IHDR         óÿa   bKGD ÿ ÿ ÿ ½§“   	pHYs     šœ   tIMEÔ&h'  vIDATxÚ¥“KlLaÅßÌ7/ÓV;U¶RªÚ±ð¶ *H-A‚ÄN$6µµh-6Ä$Bbå+±k"ÆsZ‰©z4Ã`f:¯Îë޹߽ŸÅT!ÿõÉ/çüsŽÐZó?''®‡CV<©¦óa˨ÁÄÄ¿@67¼‰6î:ý1¥µ¶¥ûñtصa'žÐ:<R”Etü>>+ŽÛ%~æÆóÝ˽¹Ð+„HÊj¢ž³v6ï˺vL“žÂøôÊ³c+¯qMQfΛAþq²hÒR™ ªŠúJ„çç¶`;ßÜetô ÔÑ‹¿}ˆÌ½~êã·ðÈšeÖâ¸p at XŠf‘§Ý|Ìë)áôU¬›ë‰Ý=‚QÌÚv‰dÓCAUó犉”ɼÁs‹°÷ÎíÌ»DìrF!KÛÞ+<=hCšp€ª´Ù×C$ÆF´® aßmÊKh­¼$yï$ ÞÍg±
+ë`Z4{4þ›}˜W3tt=•B–Y[OPiÛŽ/zÌ»‹6Qí¿´é`–&óšÖ ¬Óxyv ¾ãÔ	0ž^«udñŽß¥"ˆÃÃÌ9¯ý#H槞¦®cÙÈ// (ëô¯€„Ó‚oþ* Üm+Éä É
+ÒÈð5
+u. Dzz¢”ø2)
+o£Ôw­Áü0L=àµ!}efK'=`ÅÇxuã©7¸§ÕMÄ÷3€nŒgaI½µ=|Ÿ™ 
+¦‚Rò6±®;ì Fet’Ëü<Š…!/$òYž å&vè	™
+" 70{ªÛòW¬€üq¿6ÜmuW    IEND®B`‚
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/save.png
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/save.png	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/save.png	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,9 @@
+‰PNG
+
+   
+IHDR         oª¯   gAMA  ±üa   	pHYs    ÒÝ~ü  IDATxœ­•_hRqÇÏO7jÙ"ˆ½•DYK®5qÖˆžmm¸¨!±°ÜC‚=Õú3p“• L¶X	ÃÑ÷0Åt´\*j	1mÖÔ5½N½=üâ¦Ww‹ò<ý¸œïç~Ïùs/¢(
+ꜺPþ„ª!²+ÊYBÑ2L±Î}®È þ8M®7ÚEø²+k:Z6–9C³k!žLÉõæí(Û‚ÊÎP„$ɍÍ4¥¨ƒRÂõ¤Õâñ–#ÞÉV6G 0dµ[<ÞÀò
+={XM‰'7p§ªA¿¯?èvDÖ“Íû¸ `Ð
+÷ô  Aø¦oß·‘$Éá  ´‹Ó 
+ô „Ì®…\~«‘ ðÃ÷oÕƒ½‡Ž‰F `9YOg4 ´õ^÷ÏÛ™ƒFw!Ôyc@(¾pçü™F‚0è†oªóù­éL†$1Â?; I—çå˜ÞN•-|Cùd"„ºeÝ´©ï‰T†$•Ó à2v™]<~K‡Ø?;SmŠ¹"ã¦qíœ{3›»(“+'¦5›Ëd5ŽI£mêÕžÄW:“Ñ)DU~BCV{`õ.dT­:Â; ¹\®P(8¼ï=Õž’Ê\&Cjue-è£å5–öÃ’¯™Ë€GJÿ0¯ëj_,‘¤(ªX,
+ó¥’s KÄׂ>¶Ò(Š2Þ½µ÷N P=)•J±O!s1Ír8œp8ìöúŸ÷]þ²´X>Æ5JÃ՝¾r­¥C ª³ÂM{mï<­ü£Æ×o¦/@µä—…šK{BrI®7·I{¢Ñèí(K2ŽŽh_Œ÷ÕLc+íߢn‘ŸÍbc9%ÿ¥    IEND®B`‚
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/survey16b.png
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/survey16b.png	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/survey16b.png	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,8 @@
+‰PNG
+
+   
+IHDR         ëŠZ   tIMEÐÃ6Á   	pHYs  
+ð  
+ðB¬4˜  rIDATxÚc|õæ‚0°Ê¦6 š:µõΝ£÷²0Ãc4šÐòåÓ´™˜€†þÿ÷ïÿ޽ˀâÈö¹7öeA™à¶-[6åÚµý@@‘ÿ Àpôè)&&ÆM›æí‚èܶÿ6Ôf ¿¦¦æÅ‹@mÿÿÿêj8vì//·½½Ð	ææF&&&È:‹šwCÜÂÄÏŸ?ðol,–Û»÷(??¯9333+++ëåå4NHHM'Tó›7o¼|}½½]ÙØ€ºXØØضlÙàÁÂÂŒU'4À˜˜~‚ý	ÔÃöû÷/nnΝ; E‚ƒ½ö
+jaÕ	mƤ¤¬°07{{snnîmÛöz-zYçׯw¸¹QBÚBBRnnfV\\Ü»vòõuz¨Ùµ@@•߁‡<ÔæÊÊb''ë;233ùúº±°° ƒ@XXYç“'ž={òöí×ùó'Ãc¤Y^^è7oogf ¹åð’øÒ
+§i@ö‘#V¬Ø·íÉ“çp6#Ð I÷ïÚt*P7ÐfYY“_¿~ÏžÝÍpÕÉÉÅÈ	ªyß¾uêêò@þŽÞ½ûðùó G€fA4ê<}ú\MÍ-´!ü”¤„Y³š€:I‚Ì '@tþû÷o„Ùuu=˜9ªhùë×—!ndˆk_¼x…i!z–J‹ŠêídÛÔùýûÍ›wãщžŸÏœ¹±ööíû))%ÑÑ9øF´¼úùó­Í›÷DEeá׆^@ÏË+Ä@¨ô Ï5qUâ    IEND®B`‚
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/taskman20g.png
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/taskman20g.png	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/taskman20g.png	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,13 @@
+‰PNG
+
+   
+IHDR         ‰
+   bKGD ÿ ÿ ÿ ½§“   	pHYs    ÒÝ~ü   tIMEÕe½hÀ   >tEXtComment Created with The GIMP
+
+(c) 2003 Jakub 'jimmac' Steiner'3ïX  ¸IDAT8ˍ•ÏKaÇ?ï;îNîšî¦¨[JµKXPD
+	FH׬CA(AЭCôä©CÔ¡C+:tôÜÁº(Q"A(a)H‘?*–Í­ÙivÞ§ÃÌ.뺥/óò¾Ì<ïw¾Ï÷ùñ*êh’u¾­+€Wï ªÚ7ǁV žÉd.÷ôôc*žç±¸¸øv~~þ	°8Àkà  
+U€ƒ§úŽÜkŠEº×¿hë>ÈØؾïWr¹£££½¶r{;Z8E÷çä̇;À} H5àál:Õ½¯#Æê÷Ÿ‹à8…B¡bÏçq]—ý©Ù½í¬åÖ›'g ž«€¯«ý/yp_œº@cc#Éd²2[ZZ°m›³çGˆ55ã:NÙËeùª"F„¶T³³³ôõõ
+*­ÂÍÐÐroÑjb±P!N311V
+¥5Zk,Ë
+WÖï_>‘MQn¨}aŒ -
+B¨‚5œeÆ‚ÔÍ·€ÚB!(„,Ë€ÞÔ¤}7H OíØ#àƒ¥·Êîj­QZὛ‡H‘@¢ÿ3ƒ(üÌóêÑLñ7ßRˆF£ÍàŽ?¦éê-ìÌ¡ŠÞ[0Œ/èÒ’KsœÛ	×Nй²€óì>ñá›Ø ”Æü°&m—K‘¬íÉRú4ƒÿð6ýk_‰ßº‹Ýs¥Zkd;–¢ÑÅön¦[_]æ[¢“Xÿ`¨­F+hhdë(û¾Lìââ•ðŠÄKELƒ¶ÊiH$ȈÿšÐèÆ¥“5f‚ˆª"Џº.oªß|ßÅ$Ր&L•°¢-ç>.-i ÔeªZVu‡Où︞ÿ˜L½› NYÀf{£L³a“5ª¦{G€Xx¨m Jx8@	¿1 at G.‹ÂM    IEND®B`‚
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/taskman20w.png
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/taskman20w.png	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/taskman20w.png	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,13 @@
+‰PNG
+
+   
+IHDR         ‰
+   bKGD ÿ ÿ ÿ ½§“   	pHYs    ÒÝ~ü   tIMEÕe½hÀ   >tEXtComment Created with The GIMP
+
+(c) 2003 Jakub 'jimmac' Steiner'3ïX  ¸IDAT8ˍ•ÏKaÇ?ï;îNîšî¦¨[JµKXPD
+	FH׬CA(AЭCôä©CÔ¡C+:tôÜÁº(Q"A(a)H‘?*–Í­ÙivÞ§ÃÌ.뺥/óò¾Ì<ïw¾Ï÷ùñ*êh’u¾­+€Wï ªÚ7ǁV žÉd.÷ôôc*žç±¸¸øv~~þ	°8Àkà  
+U€ƒ§úŽÜkŠEº×¿hë>ÈØؾïWr¹£££½¶r{;Z8E÷çä̇;À} H5àál:Õ½¯#Æê÷Ÿ‹à8…B¡bÏçq]—ý©Ù½í¬åÖ›'g ž«€¯«ý/yp_œº@cc#Éd²2[ZZ°m›³çGˆ55ã:NÙËeùª"F„¶T³³³ôõõ
+*­ÂÍÐÐroÑjb±P!N311V
+¥5Zk,Ë
+WÖï_>‘MQn¨}aŒ -
+B¨‚5œeÆ‚ÔÍ·€ÚB!(„,Ë€ÞÔ¤}7H OíØ#àƒ¥·Êîj­QZὛ‡H‘@¢ÿ3ƒ(üÌóêÑLñ7ßRˆF£ÍàŽ?¦éê-ìÌ¡ŠÞ[0Œ/èÒ’KsœÛ	×Nй²€óì>ñá›Ø ”Æü°&m—K‘¬íÉRú4ƒÿð6ýk_‰ßº‹Ýs¥Zkd;–¢ÑÅön¦[_]æ[¢“Xÿ`¨­F+hhdë(û¾Lìââ•ðŠÄKELƒ¶ÊiH$ȈÿšÐèÆ¥“5f‚ˆª"Џº.oªß|ßÅ$Ր&L•°¢-ç>.-i ÔeªZVu‡Où︞ÿ˜L½› NYÀf{£L³a“5ª¦{G€Xx¨m Jx8@	¿1 at G.‹ÂM    IEND®B`‚
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/tracker20g.png
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/tracker20g.png	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/tracker20g.png	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,4 @@
+‰PNG
+
+   
+IHDR         ºWí?   gAMA  ¯È7Šé   <PLTEÀ·™”œŒÊê\UCzsZ™p;;:ID5”‹mÓ͸£¥£C at 2skT»±‘†i¹œ´¨„àäà   ÿÿÿŸÌõ®   tRNSÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ OOç   ŠIDAT(ÏmΉ1Pt½VâôÿÿuôP+i6ÍË쪆*–	|ÿÌDà´ ”‡btžuíÄ®ßɼdò¹âåuËçf')ŒñàÙ	NÌãk4T¨™ÿt4P)"aƽÓ`Žåã÷«”®[_	êIר¼d“–ôwÆžÚ’±‘cŽG£Àq›X¡’ÉÖDCx,Kû    IEND®B`‚
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/tracker20w.png
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/tracker20w.png	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/tracker20w.png	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,4 @@
+‰PNG
+
+   
+IHDR         ºWí?   gAMA  ¯È7Šé   <PLTEÀ·™”œŒÊê\UCzsZ™p;;:ID5”‹mÓ͸£¥£C at 2skT»±‘†i¹œ´¨„àäà   ÿÿÿŸÌõ®   tRNSÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ OOç   ŠIDAT(ÏmΉ1Pt½VâôÿÿuôP+i6ÍË쪆*–	|ÿÌDà´ ”‡btžuíÄ®ßɼdò¹âåuËçf')ŒñàÙ	NÌãk4T¨™ÿt4P)"aƽÓ`Žåã÷«”®[_	êIר¼d“–ôwÆžÚ’±‘cŽG£Àq›X¡’ÉÖDCx,Kû    IEND®B`‚
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/trash-x.png
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/trash-x.png	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/trash-x.png	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,12 @@
+‰PNG
+
+   
+IHDR         óÿa   bKGD ÿ ÿ ÿ ½§“   	pHYs     šœ   tIMEÕ.֏¥È  ŒIDAT8Ëm“]H“aÇ{·=NSçj«ÔR(%Pˆ.vÓ ºû¼û@è󦛨(»ñ¢‚¢$Š0+º±+1‘ÒDë"„-G®œkk+µ§Å«ëtÓû¦éÏáœóÿç<fA)å68ŽÇ^¯‡ÃA2™d||œþþ~”ReÀG]×#ü¥Ô@ ©¯;&ßÆäÇ÷/2>——½í²kç1òJ©
+ƒgùKöeddtµ<¼‚<mA__ˆÈ‡ÎìtvlßLnîR¬V
+MÓسïJ©Uº®G4€âââ®î®fòò
+ñmÚC™o#+òóYìr¡Òì¼{¥fÿiÜnÙÎLî4]@×õ¡ÙÈpü˜–ˆ$x&Ý]÷æÄÛZoHí©ÃÆ8Ø…¦»M½d- ykYòs”’t·Ùåæõsô6·199eƬƛ••Y„øt¨†u-m ØêÏ›…§N$‰14cp0Êèè×:à¹Å((,̏ÇÃ2›•4\»i’««*ˆÆ>1ŽcµY°Û¬DcŸ-sÖXR²Z¯Heeùœ™
+ËÉÉŸo½x½¥RTT(O3÷i±`·ÙhyÔiŠž<~Àô¿~› ´t
+‹¥£iÿšÏؽ÷ˆ™xìÃíYNuÕ63vµá.W6V«6_ àÁýÛ \ºx–4‡¢huveåVãe ÎԝwÁ¦€ˆà÷
+øù-æšMl­,GDH&§Y@`f&EOÏ+Z[Ÿà÷I¥RfQ2ù€Db˜x|„éééywÀÄÄÔëX,±»££“gmŠp8F(~
+…I$Fß39ù«,•JEYJ©*¥” ât:Ån·/ø
+üRælÐSŽ!    IEND®B`‚
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/trash.png
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/trash.png	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/trash.png	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,11 @@
+‰PNG
+
+   
+IHDR         óÿa   bKGD ÿ ÿ ÿ ½§“  ¿IDATxÚm“OOSY†ŸÛ{ïáRúÇ;P¨EÁl€Ç`bÔ¡Æ7ºPÇd’1î4nܘÌc\Íz¾ WJB&3$# Q'Ñ` 4±b)­TiKio‹ÜÛÛãÆVÞÍï$ç÷>É{ò…-B˜ÀqÃ0þÄ0,Ë"ŸÏ377‡"
+¼·m;É÷B$ ïܾ)¹7²¸¾"ó¹%ùâùCùóÅ3²~/„8[÷)_ÌC^¯wêï±?‘<|Âôtœäb†` ™ç‡Ù½»Uõàñx¸|å7„lÛNz zzz¦žNÝ'éfÿþ^¢C'ØÓÙɦ‰hÒy;ŸÂ¶ÚÚLAümÛ @,#ÔځÏßN
+‡£¿ï0…B–üÚ
+ÙlÓÜ…ÅbXl¾]«FîŽpýê¼-4i­È€Bk(¾ªÍÆF‰b©ÈÄãÇ<ñ’r¹Ò ¨õé÷û¢³³q–WV	‡›q6-ŠÅ<–KŒ299A2™fa!Í»w)²ÙµÛÀ„R'uwwÊP(DG¨½]]††S­¡*›¬þŸ'•þÀBb	USÐ5•Tú£òM„–ƒ7®1:zé×ÓXV]×X\|OµZE×5ú¨TJ
+Ö¶´··þ~*úCC§qìO\ºt_‹Ž”.ÃÃ'q]‡~Ö××(—7Èå
+· <B(
+F³—éstð$m¡0Ꮍ½ý˜f€`ЇiPÕ†í+`+HS=4‚C»Ð…ŠßïCUUEÙÖà@JÉÌÌ,µZš¬·ö[I)±¬
+Rî ¨V]ž=ûññ™™‰áºncɲÖÈd–YZZÅqœíX*U^¥Ó™_=šdWЏ⩐H¤‰Ç@x<A&³J,6O¹ü)êºnŠ$„øE!¥®ë;þº>çø#<(Hþ    IEND®B`‚
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/write16w.png
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/write16w.png	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/write16w.png	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,5 @@
+‰PNG
+
+   
+IHDR         ºWí?   gAMA  ¯È7Šé  PPLTEŽ}EòòÙååÍõõÜïïÖààÈÛÛÄóóÚ××Á––†ééÑîîÕççÏííÔññØááÊÄÄ°îîåÜÜÄßßÈêêÒììÔÜÜÅÖÖ¿™™ˆÕÕ¿ããËÚÚÃÝÝÇ|||Í͸dddŸŸ“776€ìììëëÓššŠ‘‘‚ÀÀ¬==7’’‚œœŒŠŠzððןŸŽ¢¢’u` ßßǬ¬¥ÐйNNN¿¿°êêÑããÜììӐèèЋ‹}²²Ÿ$$$××À””„­Ž0¦¦”ëëÒMMEÃ簾–444»»¨PPP¾¾®ææÎ<<<ÝÝÅ••…ÕÕ½ÙÙÃÑѹ¥¥”ääÌ««˜žžîîæ~~qééИ˜ââÊ¢¢‘§§–ááÉ  Â®ÓÓ¼ÒÒ¼ØØ‚‚tçç灁t››‹yysØØÁÙÙÌíííôôÛ¸¸¦Ø¾j   ÿÿÿlÖ   ptRNSÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ·abÒ   ûIDAT(Ï]ÐÕvÃ0EQKf×sÊÌLI!)333§×ÿÿVE²S·ó¸5KZ:’+€[É£íT|Ö;\»±ú0ßÅ7å´a<h—¹TMbˆ†¦ôNvîèðšZ+Â>µ|ÝMl©t0Y'ŒaÛGw_VS7:¾1ŒF7[GÕLfJñáñZÏ^Ì´øžìm¼×ÌÜ©ÃMžw¾¾u·í	nïã#Íüõs-?°KC@¤Âæ™ÿÃêµÎðÒ[5ž€á:¥•âI×íRDÎÃ2V¸I8
+Ñ?É#j•Ðžt”!yÓAékzb•è‹ÿ#C_Ðoù ¹?.ç}þ¨i    IEND®B`‚
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/xmail16w.png
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/xmail16w.png	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/ic/xmail16w.png	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,6 @@
+‰PNG
+
+   
+IHDR         ºWí?   gAMA  ¯È7Šé  PLTEòñííìæêèáóóïêéâëéãçåÝæäÜ¿¿¼èæßNNLéçàèçß—–‘xws§¦£©©¦õõòìëåçæÞööóÚÙÕëéâÇÇü¼·bb_•”ÐÐÍéèáðïë´³¯ba_éèà–•’ÌËÄåäÛ£¢òòîyxt~}|ONLÏÎÈöõò_^^ƒƒøøö{{xÍÌÆOOMôóðÛÛÙóòîæåÜìëäyyv¸·°îíç÷÷õèæÞ••ññ웚—™˜”îì瑐Š“‘Œôôðõôñyxu{zvæäÛ¼¼¶äâÚäãÚñðë½¼¸ããßÒÒÍXWTutowvqëêã¼»¶–•zzw®­¨aa^   ÿ  ÿÿÿóÁn   ZtRNSÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÑÖŠo   ËIDAT(Ï­Ð5nDCÑ7Ìaffffföõþ7’âg¤‰”2.Oçþcñ(I(IZê¾+*A$i¾ø™<|MXÜíh=Ë°rß,Û!`í|u=€£Þë\‚Àtg ;3o]iÙk8Rå­©êì°ú3 |”kÙý¦íB‚-Ú|MWJù—SÙa réÊ^þêöùD8ªíã7c’Ã@ª§–
+Ë}ÉÑ Ôö•)?×`]¼Ï~ÖcÔƒèé²Aê•~“ý
+ѲtJDG0ó    IEND®B`‚
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/t.png
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/t.png	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/t.png	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,4 @@
+‰PNG
+
+   
+IHDR         ó˜·G   	PLTEÀÀÀR!Œ   —w”ÿ   tRNS @æØf   bKGDf|d   tEXtSoftware gif2png 2.4.2£^G   *IDATxÚc````b``¢æ̘?00ÿ £`î°X Á|9_‹þ    IEND®B`‚
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/t2.png
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/t2.png	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/t2.png	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,4 @@
+‰PNG
+
+   
+IHDR         ó˜·G   	PLTEÀÀÀR!Œ   —w”ÿ   tRNS @æØf   bKGDf|d   tEXtSoftware gif2png 2.4.2£^G   *IDATxÚc` ‚Ææöþù{0’sÙÁR@@e »¨ñ ¬œV    IEND®B`‚
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/toptab-new/left.gif
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/toptab-new/left.gif	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/toptab-new/left.gif	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,2 @@
+GIF89a K ÷     ÿÿÿåäåmmzôôõóóôòòóððñ¸ÃÐïïïíííëëëéééçççÿÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   ,     K  ; @° ƒ*\È°¡C„"˜x b‚‹
+2.ØÈ cƒBŠI²¤É“(Sª\ɲ¥Ë—$È ;
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/toptab-new/middle.gif
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/toptab-new/middle.gif	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/toptab-new/middle.gif	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1 @@
+GIF89a K ³     ÿÿÿåäåmmzôôõóóôòòóððñ¸ÃÐïïïíííëëëéééçççÿÿÿ   !ù   ,     K  p„@ª½˜s’ZL#ŒdižhªŽH ;
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/toptab-new/right.gif
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/toptab-new/right.gif	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/toptab-new/right.gif	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,2 @@
+GIF89a K Õ     ÿÿÿçæçåä忾÷¶¼®­µmmzŠŠ”††—ŸŸ¨®®¶««³¥¥­¤¤¬¬¬³««²¢¢©¯¯¶®®µ­­´¹¹¿¼¼ÂÀÀÅÞÞáììîýýþüüýúúûôôõóóôòòóððñïïðííîééê‹–¨¸ÃÐÉÔáÌ×äþþþýýýüüüûûûúúúùùùøøø÷÷÷õõõïïïíííëëëéééÿÿÿ                           !ù  6 ,     K  ¾Àƒp(°2’‚*Àd®0ëµ4:.ž¬‹	“h²ž“`ÇR‘¨l3Áö0õM R_òÙ~}{‚`€ƒˆ…Y~ŽŽK
+ ““‘!——2+33#£ 4©©,55$¯¬µµ¬ºº-»¼¾À½¿ÀÅÃÈÇÂËÆ»ÊÏÌÑÎÁÔÄÒÕÉØ×ÖÐÙÍÚÝÛÞÜáæàèÓçêéßìïîñåíóðõòäùãûâ&ÿÿN ( ;
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/toptab-new/selected-left.gif
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/toptab-new/selected-left.gif	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/toptab-new/selected-left.gif	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1 @@
+GIF89a K ¢     ÿÿÿmmzcn„þá[þè‚ˬ>ÿÿÿ!ù   ,     K  (*UL/8%½6׍¹îà'zdXŽfŠ®g«rƒa$ ;
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/toptab-new/selected-middle.gif
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/toptab-new/selected-middle.gif	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/toptab-new/selected-middle.gif	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1 @@
+GIF89a K Ä     ÿÿÿmmzþá[þè‚þÒþÔþÕ þÖ ýÊýÌýÎþÐˬ>ýÅýÇÿÿÿ                                             !ù   ,     K   @Hiž(r³(ÉãÌtmßx®ÏM ;
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/toptab-new/selected-right.gif
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/toptab-new/selected-right.gif	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/toptab-new/selected-right.gif	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,5 @@
+GIF89a	 K æ     ÿÿÿ·¶¼vu}mmzuuŠ„„ŠŠ”››¤˜˜¡¢¢©žž£ååçôôõ|ƒÌʼnþ×$þÞIþàWþáZþämþåpþç|þèþè‚þèƒþêŽøë­þÒþÔþÕ þÖ þÖ!þÚ7þÜAþáoþâoþäpþåtþç~þæþçþç‚ýê•þë–̼zþìžé۝ýÊýÌýÎþÐˬ>þÞnþàoýÅýÇþÚmþÛmþÝmÊÁ¤™’}™’~‘Œ~½ºµûûûÿÿÿ                                                                                                                                                                                    !ù  C ,    	 K  Ü€‚ƒƒ,=B(/BB!#-	 Ÿ
+ŸŸ†A
+¦ 0¬ ³"†³!@³ '>ÂÅÇɳÈÆÌˬÍÊÎÑЦÍÙÚ&ÅÞßÜ>ãä%+>4éê$ç3îï7*>2ôõ6ò1ùú<ò9þÿ;RüÀA° 
+"Lˆãà@†6\˜0"DŠ
+VÄHÐâF%zydGŽM¦‰räI•.W–d	³¥Íš8iêœÉóãNŸ=I*´èËŸFSÖXÊÔ„  ;
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/vert-grad.png
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/vert-grad.png	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/images/vert-grad.png	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,5 @@
+‰PNG
+
+   
+IHDR     	Ä   M!9p   	pHYs    ­#½u   tIMEÔ	(1Ɲwß   ˜IDATxœíÔ±
+€0EAƒ²ÿªÁ´69èÜ]Š§TÿÈ̘îŒû}="b~ZíG_ï_½Ýþ«·Ö³zûz½zöB¯s_¯Wïí½`fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffæ=|	+š!pÃx    IEND®B`‚
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/help.css
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/help.css	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/help.css	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,14 @@
+/************************************/
+/***  ViewVC Help CSS Stylesheet ***/
+/************************************/
+
+/*** Standard Tags ***/
+body {
+  margin: 0.5em;
+}
+img { border: none; }
+
+table { width: 100%; }
+td { vertical-align: top; }
+
+col.menu { width:12em; }

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/help_dirview.html
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/help_dirview.html	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/help_dirview.html	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,130 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+  <title>ViewVC Help: Directory View</title>
+  <link rel="stylesheet" href="help.css" type="text/css" />
+</head>
+<body>
+  <table>
+    <col class="menu" />
+    <col />
+    <tr>
+      <td><a href="http://viewvc.org/index.html"><img
+	     src="images/logo.png" alt="ViewVC logotype" /></a>
+      </td>
+      <td>
+	<h1>ViewVC Help: Directory View</h1>
+      </td>
+    </tr>
+    <tr><td>
+       <h3>Help</h3>
+       <a href="help_rootview.html">General</a><br />
+       <strong>Directory View</strong><br />
+       <a href="help_log.html">Log View</a><br />
+
+       <h3>Internet</h3>
+       <a href="http://viewvc.org/index.html">Home</a><br />
+       <a href="http://viewvc.org/upgrading.html">Upgrading</a><br />
+       <a href="http://viewvc.org/contributing.html">Contributing</a><br />
+       <a href="http://viewvc.org/license-1.html">License</a><br />
+    </td><td colspan="2">
+
+    <p>The directory listing view should be a familiar sight to any
+    computer user. It shows the path of the current directory being viewed
+    at the top of the page. Below that is a table summarizing the
+    directory contents, and then comes actual contents, a sortable list of
+    all files and subdirectories inside the current directory.</p>
+
+    <p><a name="summary"></a>The summary table is made up of some or all
+    of the following rows:</p>
+    <ul>
+      <li><a name="summary-files-shown"><strong>Files Shown</strong></a>
+      - Number of files shown in the directory listing. This might be less
+      than the actual number of files in the directory if a
+      <a href="#option-search">regular expression search</a> is in place,
+      hiding files which don't meet the search criteria. In CVS directory
+      listings, this row will also have a link to toggle display of
+      <a href="help_rootview.html#dead-files">dead files</a>, if any are
+      present.</li>
+
+      <li><a name="summary-revision"><strong>Directory
+      Revision</strong></a> - For Subversion directories only.
+      Shown as "# of #" where the first number is the most recent
+      repository revision where the directory (or a path underneath it)
+      was modified. The second number is just the latest repository
+      revision. Both numbers are links to
+      <a href="help_rootview.html#view-rev">revision views</a></li>
+
+     <li><a name="summary-sticky-revision-tag"><strong>Sticky
+     Revision/Tag</strong></a> - shows the current
+     <a href="help_rootview.html#sticky-revision-tag">sticky revision or
+     tag</a> and contains form fields to set or clear it.</li>
+
+     <li><a name="summary-search"><strong>Current Search</strong></a> -
+     If a <a href="#option-search">regular expression search</a> is in place,
+     shows the search string.</li>
+
+     <li><a name="summary-query"><strong>Query</strong></a> - Provides
+     a link to a <a href="help_rootview.html#view-query">query form</a>
+     for the directory</li>
+   </ul>
+
+  <p><a name="list"></a>The actual directory list is a table with
+  filenames and directory names in one column and information about the
+  most recent revisions where each file or directory was modified in the
+  other columns. Column headers can be clicked to sort the directory
+  entries in order by a column, and clicked again to reverse the sort
+  order.</p>
+
+  <p>
+  <!-- If using directory.ezt template -->
+  File names are links to <a href="help_log.html">log views</a>
+  showing a list of revisions where a file was modified. Revision
+  numbers are links to either
+  <a href="help_rootview.html#view-markup">view</a>
+  or <a href="help_rootview.html#view-checkout">download</a> a file
+  (depending on its file type). The links are reversed for directories.
+  Directory revision numbers are links to <a href="help_log.html">log
+  views</a>, while directory names are links showing the contents of those
+  directories.
+
+  <!-- If using dir_alt.ezt template -->
+  <!--
+  File and directory names are links to retrieve their contents.
+  File links may be either
+  <a href="help_rootview.html#view-markup">view</a>
+  or <a href="help_rootview.html#view-download">download</a> links
+  depending on the file type. Directory links go to directory
+  listings. Revision numbers are links to <a href="help_log.html">log
+  views</a> showing lists of revisions where a file or directory was
+  modified.
+  -->
+
+  Also, in CVS repositories with the
+  <a href="help_rootview.html#view-graph">graph view</a> enabled, there
+  will be small
+  <img src="images/cvsgraph_16x16.png" width="16" height="16" alt="graph" />
+  icons next to file names which are links to revision graphs.</p>
+
+  <p>Depending on how ViewVC is configured, there may be more options
+  at the bottom of directory pages:</p>
+
+  <ul>
+    <li><a name="option-search"><strong>Regular expression
+    search</strong></a> - If enabled, will show a form field accepting
+    a search string (a
+    <a href="http://doc.python.org/lib/re-syntax.html">python regular
+    expression</a>). Once submitted, only files that have at least
+    one occurance of the expression will show up in directory listings.
+    </li>
+    <li><a name="option-tarball"><strong>Tarball download</strong></a> -
+    If enabled, will show a link to download a gzipped tar archive of
+    the directory contents.</li>
+  </ul>
+
+  </td></tr></table>
+  <hr />
+  <address><a href="mailto:users at viewvc.tigris.org">ViewVC Users Mailinglist</a></address>
+  </body>
+</html>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/help_log.html
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/help_log.html	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/help_log.html	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,75 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+  <title>ViewVC Help: Log View</title>
+  <link rel="stylesheet" href="help.css" type="text/css" />
+  <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
+</head>
+<body>
+  <table>
+    <col class="menu" />
+    <col />
+    <tr>
+      <td><a href="http://viewvc.org/index.html"><img
+	     src="images/logo.png" alt="ViewVC logotype" /></a>
+      </td>
+      <td>
+	<h1>ViewVC Help: Log View</h1>
+      </td>
+    </tr>
+    <tr><td>
+       <h3>Help</h3>
+       <a href="help_rootview.html">General</a><br />
+       <a href="help_dirview.html">Directory View</a><br />
+       <strong>Log View</strong><br />
+
+       <h3>Internet</h3>
+       <a href="http://viewvc.org/index.html">Home</a><br />
+       <a href="http://viewvc.org/upgrading.html">Upgrading</a><br />
+       <a href="http://viewvc.org/contributing.html">Contributing</a><br />
+       <a href="http://viewvc.org/license-1.html">License</a><br />
+    </td><td colspan="2">
+    <p>
+      The log view displays the revision history of the selected source
+      file or directory. For each revision the following information is
+      displayed:
+    </p>
+
+      <ul>
+        <li>The revision number. In Subversion repositories, this is a
+            link to the <a href="help_rootview.html#view-rev">revision
+            view</a></li>
+        <li>For files, links to
+        <a href="help_rootview.html#view-markup">view</a>,
+        <a href="help_rootview.html#view-checkout">download</a>, and
+        <a href="help_rootview.html#view-annotate">annotate</a> the
+          revision. For directories, a link to
+        <a href="help_dirview.html">list directory contents</a></li>
+        <li>A link to select the revision for diffs (see below)</li>
+        <li>The date and age of the change</li>
+        <li>The author of the modification</li>
+        <li>The CVS branch (usually <em>MAIN</em>, if not on a branch)</li>
+        <li>Possibly a list of CVS tags bound to the revision (if any)</li>
+        <li>The size of the change measured in added and removed lines of
+            code. (CVS only)</li>
+        <li>The size of the file in bytes at the time of the revision
+            (Subversion only)</li>
+        <li>Links to view diffs to the previous revision or possibly to
+            an arbitrary selected revision (if any, see above)</li>
+        <li>If the revision is the result of a copy, the path and revision
+            copied from</li>
+        <li>If the revision precedes a copy or rename, the path at the
+            time of the revision</li>
+        <li>And last but not least, the commit log message which should tell
+            about the reason for the change.</li>
+      </ul>
+    <p>
+      At the bottom of the page you will find a form which allows
+      to request diffs between arbitrary revisions.
+    </p>
+  </td></tr></table>
+  <hr />
+  <address><a href="mailto:users at viewvc.tigris.org">ViewVC Users Mailinglist</a></address>
+  </body>
+</html>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/help_query.html
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/help_query.html	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/help_query.html	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,67 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+  <title>ViewVC Help: Query The Commit Database</title>
+  <link rel="stylesheet" href="help.css" type="text/css" />
+</head>
+<body>
+<table>
+  <col class="menu" />
+  <col />
+  <tr>
+    <td><a href=".."><img
+        src="images/logo.png" alt="ViewVC logotype" /></a>
+    </td>
+    <td><h1>ViewVC Help: Query The Commit Database</h1></td>
+  </tr>
+  <tr><td>
+     <h3>Other Help:</h3>
+     <a href="help_rootview.html">General</a><br />
+     <a href="help_dirview.html">Directory View</a><br />
+     <a href="help_log.html">Classic Log View</a><br />
+     <a href="help_logtable.html">Alternative Log View</a><br />
+     <strong>Query Database</strong>
+
+     <h3>Internet</h3>
+     <a href="http://viewvc.org/index.html">Home</a><br />
+     <a href="http://viewvc.org/upgrading.html">Upgrading</a><br />
+     <a href="http://viewvc.org/contributing.html">Contributing</a><br />
+     <a href="http://viewvc.org/license-1.html">License</a><br />
+  </td><td colspan="2">
+
+  <p> 
+    Select your parameters for querying the CVS commit database in the
+    form at the top of the page.  You
+    can search for multiple matches by typing a comma-seperated list
+    into the text fields.  Regular expressions, and wildcards are also
+    supported.  Blank text input fields are treated as wildcards.
+  </p>
+  <p>
+    Any of the text entry fields can take a comma-seperated list of
+    search arguments.  For example, to search for all commits from
+    authors <em>jpaint</em> and <em>gstein</em>, just type: <code>jpaint,
+    gstein</code> in the <em>Author</em> input box.  If you are searching
+    for items containing spaces or quotes, you will need to quote your
+    request.  For example, the same search above with quotes is:
+    <code>"jpaint", "gstein"</code>.
+  </p>
+  <p>                           
+    Wildcard and regular expression searches are entered in a similar
+    way to the quoted requests.  You must quote any wildcard or
+    regular expression request, and a command character preceeds the
+    first quote.  The command character <code>l</code>(lowercase L) is for wildcard
+    searches, and the wildcard character is a percent (<code>%</code>).  The
+    command character for regular expressions is <code>r</code>, and is
+    passed directly to MySQL, so you'll need to refer to the MySQL
+    manual for the exact regex syntax.  It is very similar to Perl.  A
+    wildard search for all files with a <em>.py</em> extention is:
+    <code>l"%.py"</code> in the <em>File</em> input box.  The same search done
+    with a regular expression is: <code>r".*\.py"</code>.
+  </p>
+  <p>                  
+    All search types can be mixed, as long as they are seperated by
+    commas.
+  </p>                                                    
+  </td></tr></table>
+</body></html>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/help_rootview.html
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/help_rootview.html	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/help_rootview.html	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,169 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+  <title>ViewVC Help: General</title>
+  <link rel="stylesheet" href="help.css" type="text/css" />
+</head>
+<body>
+  <table>
+    <col class="menu" />
+    <col />
+    <tr>
+      <td><a href=".."><img
+	     src="images/logo.png" alt="ViewVC logotype" /></a>
+      </td>
+      <td>
+	<h1>ViewVC Help: General</h1>
+      </td>
+    </tr>
+    <tr><td>
+       <h3>Help</h3>
+       <strong>General</strong><br />
+       <a href="help_dirview.html">Directory View</a><br />
+       <a href="help_log.html">Log View</a><br />
+
+       <h3>Internet</h3>
+       <a href="http://viewvc.org/index.html">Home</a><br />
+       <a href="http://viewvc.org/upgrading.html">Upgrading</a><br />
+       <a href="http://viewvc.org/contributing.html">Contributing</a><br />
+       <a href="http://viewvc.org/license-1.html">License</a><br />
+    </td><td colspan="2">
+
+  <p><em>ViewVC</em> is a WWW interface for CVS and Subversion
+  repositories. It allows you to browse the files and directories in a
+  repository while showing you metadata from the repository history: log
+  messages, modification dates, author names, revision numbers, copy
+  history, and so on. It provides several different views of repository
+  data to help you find the information you are looking for:</p>
+
+  <ul>
+    <li><a name="view-dir" href="help_dirview.html"><strong>Directory
+    View</strong></a> - Shows a list of files and subdirectories in a
+    directory of the repository, along with metadata like author names and
+    log entries.</li>
+
+    <li><a name="view-log" href="help_log.html"><strong>Log
+    View</strong></a> - Shows a revision by revision list of all the
+    changes that have made to a file or directory in the repository, with
+    metadata and links to views of each revision.</li>
+
+    <li><a name="view-markup"><strong>File Contents View (Markup
+    View)</strong></a> - Shows the contents of a file at a particular
+    revision, with revision information at the top of the page. File
+    revisions which are GIF, PNG, or JPEG images are displayed inline on
+    the page. Other file types are displayed as marked up text. The markup
+    may be limited to turning URLs and email addresses into links, or
+    configured to show colorized source code.</li>
+
+    <li><a name="view-checkout"><strong>File Download (Checkout
+    View)</strong></a> - Retrieves the unaltered contents of a file
+    revision. Browsers may try to display the file, or just save it to
+    disk.</li>
+
+    <li><a name="view-annotate"><strong>File Annotate View</strong></a> -
+    Shows the contents of a file revision and breaks it down line by line,
+    showing the revision number where each one was last modified, along
+    with links and other information. <em>This view is disabled in some
+    ViewVC configurations</em></li>
+
+    <li><a name="view-diff"><strong>File Diff View</strong></a> - Shows
+    the changes made between two revisions of a file</li>
+
+    <li><a name="view-tarball"><strong>Directory Tarball View</strong></a> -
+    Retrieves a gzipped tar archive containing the contents of a
+    directory.<em>This view is disabled in the default ViewVC
+    configuration.</em></li>
+
+    <li><a name="view-query"><strong>Directory Query View</strong></a> -
+    Shows information about changes made to all subdirectories and files
+    under a parent directory, sorted and filtered by criteria you specify.
+    <em>This view is disabled in the default ViewVC configuration.</em>
+    </li>
+
+    <li><a name="view-rev"><strong>Revision View</strong></a> - Shows
+    information about a revision including log message, author, and a list
+    of changed paths. <em>For Subversion repositories only.</em></li>
+
+    <li><a name="view-graph"><strong>Graph View</strong></a> - Shows a
+    graphical representation of a file's revisions and branches complete
+    with tag and author names and links to markup and diff pages.
+    <em>For CVS repositories only, and disabled in the default
+    configuration.</em></li>
+  </ul>
+
+  <h3><a name="multiple-repositories">Multiple Repositories</a></h3>
+
+  <p>A single installation of ViewVC is often used to provide access to
+  more than one repository. In these installations, ViewVC shows a
+  <em>Project Root</em> drop down box in the top right corner of every
+  generated page to allow for quick access to any repository.</p>
+
+  <h3><a name="sticky-revision-tag">Sticky Revision and Tag</a></h3>
+
+  <p>By default, ViewVC will show the files and directories and revisions
+  that currently exist in the repository. But it's also possible to browse
+  the contents of a repository at a point in its past history by choosing
+  a "sticky tag" (in CVS) or a "sticky revision" (in Subversion) from the
+  forms at the top of directory and log pages. They're called sticky
+  because once they're chosen, they stick around when you navigate to
+  other pages, until you reset them. When they're set, directory and log
+  pages only show revisions preceding the specified point in history. In
+  CVS, when a tag refers to a branch or a revision on a branch, only
+  revisions from the branch history are shown, including branch points and
+  their preceding revisions.</p>
+
+  <h3><a name="dead-files">Dead Files</a></h3>
+
+  <p>In CVS directory listings, ViewVC can optionally display dead files.
+  Dead files are files which used to be in a directory but are currently
+  deleted, or files which just don't exist in the currently selected
+  <a href="#sticky-revision-tag">sticky tag</a>. Dead files cannot be
+  shown in Subversion repositories. The only way to see a deleted file in
+  a Subversion directory is to navigate to a sticky revision where the
+  file previously existed.</p>
+
+  <h3><a name="artificial-tags">Artificial Tags</a></h3>
+
+  <p>In CVS Repositories, ViewVC adds artificial tags <em>HEAD</em> and
+  <em>MAIN</em> to tag listings and accepts them in place of revision
+  numbers and real tag names in all URLs. <em>MAIN</em> acts like a branch
+  tag pointing at the default branch, while <em>HEAD</em> acts like a
+  revision tag pointing to the latest revision on the default branch. The
+  default branch is usually just the trunk, but may be set to other
+  branches inside individual repository files. CVS will always check out
+  revisions from a file's default branch when no other branch is specified
+  on the command line.</p>
+
+  <h3><a name="more-information">More Information</a></h3>
+
+  <p>More information about <em>ViewVC</em> is available from
+  <a href="http://viewvc.org/">viewvc.org</a>.
+  See the links below for guides to CVS and Subversion</p>
+
+  <h4>Documentation about CVS</h4>
+  <blockquote>
+    <p>
+      <a href="http://cvsbook.red-bean.com/"><em>Open Source
+      Development with CVS</em></a><br />
+      <a href="http://www.loria.fr/~molli/cvs/doc/cvs_toc.html">CVS
+      User's Guide</a><br />
+      <a href="http://cellworks.washington.edu/pub/docs/cvs/tutorial/cvs_tutorial_1.html">Another CVS tutorial</a><br />
+      <a href="http://www.csc.calpoly.edu/~dbutler/tutorials/winter96/cvs/">Yet another CVS tutorial (a little old, but nice)</a><br />
+      <a href="http://www.cs.utah.edu/dept/old/texinfo/cvs/FAQ.txt">An old but very useful FAQ about CVS</a>
+    </p>
+  </blockquote>
+
+  <h4>Documentation about Subversion</h4>
+  <blockquote>
+    <p>
+      <a href="http://svnbook.red-bean.com/"><em>Version Control with
+      Subversion</em></a><br />
+    </p>
+  </blockquote>
+
+  </td></tr></table>
+  <hr />
+  <address><a href="mailto:users at viewvc.tigris.org">ViewVC Users Mailinglist</a></address>
+  </body>
+</html>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/images/annotate.png
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/images/annotate.png	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/images/annotate.png	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,9 @@
+‰PNG
+
+   
+IHDR         óÿa   bKGD ÿ ÿ ÿ ½§“   	pHYs    ÒÝ~ü   tIMEÓ	"(1,   tEXtComment Created with The GIMPïd%n  `IDATxÚ­“KHTaÇß½3Ž3Ž:Íèä#
+\Qm£¥-JÛEÑÀÉ6‰Ñ2hÔ¢|Ð*1‹D›
+%ŠjŒHKzR˜Iæ£1;×;{ï×"M‰ýá,Îá|þçüÏG1ÐÈÅh^¬ý3šoôuˉ±a{núƒÝ×sI×W6ˆ•IEE¹/­QUgµ¢(žXl¾iäå ùyþå_°rÕ;ÇJÃH¶ÇãñæÚÚZgvv6]]]ôôÞâ@IÛ²(ÝyDee255Q¤¡!£,ݝB‘6W¯ÝÄmkdÊøº3®"z¤gŸr›=z'Ž¸× ˜ï'™H`	 Z[¶¯K0¯À—å&×íÂå ¯žë<ù¤pªí8ÀÅ¥n[³Ä­ã\MnæëÉ	v—gp¸?ņ]B¾0z±Â´6gÖcEÎGT@,)ápEÝ|Ú5K%ù6oñmÎb&f*†‘AáŽJæ­ z at Wÿt¡*¦i‡NxzGžñêÝc¤âdÔ»“M!7ÃwîSµyGžJ"-1S&«òƒ‘ƒ
+­9øKñ„’\9}†´	ýƒoøøuŠÂ¢jutQÖRb›IKÚ†´ç2Ïï÷–†·ðe2Š)ä7"…ŠÛ;JŽ7‹TÚDJ7C'‡–FV…Ǥ”¿]°Q•…„¦é¤lÁ\LççœRR_·—L—¡¨rqéRÊË
+LËffæq
+Cqwà)Bqòþó8ß’N&°¬´µÞ!-Ùؘ“Wtqí÷ ‘)µè÷6à,ÿ¿ »öuvæs    IEND®B`‚
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/images/back.png
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/images/back.png	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/images/back.png	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,5 @@
+‰PNG
+
+   
+IHDR         2o¡5   PLTEÌÿÿ™™™fff333   µ½ð   tRNS @æØf   bKGD ˆH   	pHYs     šœ   tIMEÔ	'œž   VtEXtComment This art is in the public domain. Kevin Hughes, kevinh at eit.com, September 1995LèôÄ   YIDATxÚeÌÑ	€0Ð@è¡r. Íþ3ÙÄxA¼¯ã%œÈ7¬
+Tö¥@ir(Jõùp³ÜÛéÕ/ÍÌ«É¢¨j™…™Yx­SÉß¹ûº¾%v•_ng	$à{üê    IEND®B`‚
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/images/back_small.png
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/images/back_small.png	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/images/back_small.png	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,4 @@
+‰PNG
+
+   
+IHDR         íÝâR   PLTEÿÿÿŒŒŒZZZ   „„„111!!!8Ð   tRNS @æØf   gIFg   Nnz   VIDATxÚc`@€4(Ífœ a$›i& CÌ66dÀd¸08€FŒ.J¬ÆÆL¡¡@õLÆÆ®¡¡ EÆÆAF²qRh T[(ØH "'ˆI‚‚@Í &]èP4Œ~    IEND®B`‚
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/images/broken.png
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/images/broken.png	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/images/broken.png	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,5 @@
+‰PNG
+
+   
+IHDR         íÝâR   PLTE  kkkŒŒŒÎÎÎçççÿÿÿ999F‹…/   tRNS @æØf   bKGD ˆH   	pHYs     šœ   tIMEÕ
+	÷w   [IDAT×c`€P P 1LCCƒ`Œ(Ã8ÂMKƒ2BaG #Ð54$Ä`Ht ©	`L`2TY@ŠXX@ŒPW„v#HÄ 'K!©¹°„    IEND®B`‚
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/images/chalk.jpg
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/images/chalk.jpg	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/images/chalk.jpg	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,9 @@
+ÿØÿà JFIF      ÿÛ C 		
+
+ $.' ",#(7),01444'9=82<.342ÿÛ C			
+
+2!!22222222222222222222222222222222222222222222222222ÿÀ  ` `" ÿÄ               ÿÄ &         !"1AQ2RaqBbÿÄ                ÿÄ                 ÿÚ   ? ö•¢>á^å„]Q5ðŠ	T¯«²,œT at O¦‰Ó°O©qžjÓzh‰‚î*¸‰U­~òbÞ¬›9顚݁0ž£I¥"(®Uþ€”¤Š³™‘9»‹N±Ì€ºTQ)ü¨JilZKw–n› IMËÑ©s†œ
+¾Ã½Ò…gœ ^¾$¹ßø.eà( ’â8[p4œ·–
+HtªSZI½š¦­È&î6§y’ߐu»ÛPŽ7#;±Qò5EöÀ6÷HÑC¹q€ó#¥»Ë%)«pB†ª°/6àÍÁòj›x„|™u+)Û²ªê#£–ª;Wø›º®E()o %>Ù);ImÆTE%§8_QðdêÍ[QŽ"F h+«ÜiœH}7pŸ#²ì°¾ØЗÔrÀ
+$ñq¥c%«`pï* º“»b`š°Z at +û
+YfSMH¸RÚ¹S×±›éÒ&µŠ#ݼ°ª¢’|†7lÔyÌ Uøä)ng/ 4éˆjÕî«&Q«.Æ÷•ÓeM¨á@iËÚ£ªŒE[€,ï/ —ù'úÆM2I¼°›QæöFN¼€×QÜSUÜ…AéÿÙ
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/images/cvsgraph_16x16.png
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/images/cvsgraph_16x16.png	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/images/cvsgraph_16x16.png	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,5 @@
+‰PNG
+
+   
+IHDR         bò   PLTEÿ  ÿÿ ¨Üÿ   »Kt   tRNS @æØf   gIFg   Nnz   4IDATxÚc` ûÏÿLëWÿa0-^
+å23ð Yì?0Xm°Ú"6@¸Ì@—Ø€& Ý] ÙO#Œ    IEND®B`‚
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/images/cvsgraph_32x32.png
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/images/cvsgraph_32x32.png	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/images/cvsgraph_32x32.png	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,5 @@
+‰PNG
+
+   
+IHDR           TgÇ   PLTEÿ   ÿÿÿÿ ¨Üÿ    jG>   tRNS @æØf   gIFg   Nnz   jIDATxÚc`À ...¨NJ*¤
+`˜Áà€Å fqqq€(vqaAA aAAf€mq@²ªá$Fgc „",€aa[@ábaL[°…Ö`D!I 3²  Àº(=uì´,    IEND®B`‚
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/images/diff.png
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/images/diff.png	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/images/diff.png	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,7 @@
+‰PNG
+
+   
+IHDR         íÝâR   PLTE   kkkŒŒŒÿÿÿÎÎÎççç999Û„+à   tRNS @æØf   bKGD ˆH   	pHYs     šœ   tIMEÕ
+m{gá   TIDAT×c`@
+ ÂÙØØ$Ì
+1	9§¥¦¸ADŒÓÒ@ŒÐà`cCˆT²q D$4,l“JKƒˆ„††BL†JC¥`"L‚@ ÆÀ  ä¤ðƒu    IEND®B`‚
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/images/dir.png
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/images/dir.png	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/images/dir.png	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,6 @@
+‰PNG
+
+   
+IHDR         íÝâR   PLTEÀÀÀÿÜ®ÿÞ­¸ }WK;+%   kÅ9û   tRNS @æØf   bKGD ˆH   	pHYs     šœ   tIMEÔ	6Aw¼}   HIDATxÚmƱ€0À_e7H&пˆ
+½/û`”^u€#=?…~Æfòx"±ÌZ¥¿•¡¿Ñ«ÒÖvbC
+{T»s4|ÖžwÝ=é?    IEND®B`‚
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/images/down.png
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/images/down.png	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/images/down.png	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,6 @@
+‰PNG
+
+   
+IHDR   
+   
+   H%v?   PLTE     âÇà   tRNS @æØf   bKGD ˆH   	pHYs    ÒÝ~ü   tIMEÔ	#èe"   IDATxÚc`À öä0ð70°300AÅ +q—‡Ž™    IEND®B`‚
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/images/download.png
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/images/download.png	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/images/download.png	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,5 @@
+‰PNG
+
+   
+IHDR         íÝâR   +tEXtCreation Time mer 4 giu 2003 10:11:54 +0100–êÙ¨   tIMEÓ
+/Q|   	pHYs    ÒÝ~ü   gAMA  ±üa   PLTEóóó   {{{ÆÆÆ „  ÿ „  ÿ  ™T*   tRNS @æØf   NIDATxÚc````Kd€ ¶B\¶´BA+½\ EJIIIHIIÉÀÂLŠÊ ¾I”ald( ˆVd(A€ £ 0  0ôšŒÐ²    IEND®B`‚
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/images/feed-icon-16x16.jpg
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/images/feed-icon-16x16.jpg	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/images/feed-icon-16x16.jpg	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,11 @@
+ÿØÿà JFIF   d d  ÿì Ducky     P  ÿî Adobe dÀ   ÿÛ „ 		
+
+				
+	
+ÿÀ    ÿÄ¢            	
+         	
+ s !1AQa"q2‘¡±B#ÁRÑá3bð$r‚ñ%C4S’¢²csÂ5D'“£³6TdtÃÒâ&ƒ	
+„”EF¤´VÓU(òãóÄÔäôeu…•¥µÅÕåõfv†–¦¶ÆÖæö7GWgw‡—§·Ç×ç÷8HXhxˆ˜¨¸ÈØèø)9IYiy‰™©¹ÉÙéù*:JZjzŠšªºÊÚêú m !1AQa"q‘2¡±ðÁÑá#BRbrñ3$4C‚’S%¢c²ÂsÒ5âDƒT“	
+&6E'dtU7ò£³Ã()Óã󄔤´ÄÔäôeu…•¥µÅÕåõFVfv†–¦¶ÆÖæöGWgw‡—§·Ç×ç÷8HXhxˆ˜¨¸ÈØèø9IYiy‰™©¹ÉÙéù*:JZjzŠšªºÊÚêúÿÚ   ? ÷‘<“£ùÃ˺‡šüí£ù’úîòþv½ó¾Ÿ$71ÅÅQ‰žÔò“ŠV¬Áztéž+£ÒbÖéç¨ÕC)õË
+/ªUdË“흥Út:ˆiô³Ä ˆ¬R$óúgôÙè	çÍ'ó¯—.?+îtûÛÈî ½O­ù_Ìö`*Ê«J:^.µZíîhµÝ™©ì½D2C'«Hòýu¡Øöv»kbœ'
+ôÎæé¡N´8èß–:3¥gùƒa©D.­ùñ¶6‰ÃÖ·ž.`@aBµ©Ïìíd{.2¸äŽª97ßÐaµÆB÷½úu[Ùù;[ õBZi@×ó¸÷©DÖÝ:ô"˜Çž0t=èú·|¥¥jw—·~m‹Sò¨·Uô º†—vÆŽx/ªÎÊ£ný³o©Õéõxg¦Á¾^,b¹	Tyì8¬€6Ogvf}Xjõˆ	†S|ÌO¢\·<4	æÿ ÿÙ
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/images/forward.png
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/images/forward.png	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/images/forward.png	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,5 @@
+‰PNG
+
+   
+IHDR         2o¡5   PLTEÌÿÿ™™™fff333   µ½ð   tRNS @æØf   bKGD ˆH   	pHYs     šœ   tIMEÔ	åL4^   VtEXtComment This art is in the public domain. Kevin Hughes, kevinh at eit.com, September 1995LèôÄ   ZIDATxÚUÑ
+À D©.Ф]Äà $½ýg*ô"_çar"çh+èªcÓ²NeC–UZ£Eø¼Âw÷ú@$-Ñ<—ãz.y©¨†åš%¥ÛEÀNv4üx,œÃ‡    IEND®B`‚
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/images/list.png
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/images/list.png	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/images/list.png	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,7 @@
+‰PNG
+
+   
+IHDR         óÿa   gAMA  ±üa   bKGD ÿ ÿ ÿ ½§“   	pHYs    ÒÝ~ü   tIMEÓ¸
+„  PIDATxÚ•’1OÂ@†HGg&'€3ô¸96G“þ g¢£lÔÍÙ[Ú6u7l!÷
+áŽå¨×!|É¥½ïí½ùîép
+hk]qbi¥”NÓT‡a¸3)”RŠ8Ž	ðrØÉ_‡Õjekàø®×ë÷¦÷¼7À9Ðtöäº.A4­	†Ëå’~¿Ïb±`>Ÿƒ ø»BEZ¡ƒ´¢`¸ÙlRæËÖàµÕjõ¬ïŸ“$)ŒÇc²,Ë÷eý(ÄCuây~—ÀÐ0p1€œæÿô›•	F£Y–Uîfç`6›1Ni·Ûý¥”ħ}iš²^¯ñ}ÿx]×ÝkàyN‡²®•RZJ©…v¤ù	¼x·¦7Á.â±ÛGQdç`˜$	Ýn€šIbѵS²pW‚Ø;åð6ùÖ&q÷    IEND®B`‚
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/images/log.png
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/images/log.png	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/images/log.png	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,6 @@
+‰PNG
+
+   
+IHDR         óÿa   bKGD ÿ ÿ ÿ ½§“  aIDATxÚ¥“OŠ"1Æ/)tåÎuÓ«9‚.½Š.z6½-E‹an 9Cm]¹ª;xqSB*É*³˜®š®l¤|$¼¼ïKÞŸ ü ~7 >ððót:Ekm´Öƺ®;pÎEç\ôÞGï}!ÄB<x Zk¹^¯ˆHJ©‡¾ápH‡5Îý~Oš¦(¥ØívˆHç`µZµûäòç[‹ÅÃ×´Hš¦­ˆˆçy'¸Y×ë5J©{Æِ–ËåÃ: 뺦ªª»À<Ï[Á&ïÏ‚ƒÁீsŽªª8ŸÏEÁt:e<Ù•~¿ßM¡(
+f³Æ&“	Y–Ýu at DØl6ݼ÷Ün7.—Ææó9£ÑèËyèõz¨FUk1áp8 ”"Ë2¶Û-J©Zk´Öÿ
+ÄÖÚ§¦PDH’ü*ËòirY– ï ¯ÀÛ“?1~p^ù®ý4þ© W£Àù    IEND®B`‚
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/images/logo.png
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/images/logo.png	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/images/logo.png	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,50 @@
+‰PNG
+
+   
+IHDR   €   0   Ùôr¾   bKGD ÿ ÿ ÿ ½§“   	pHYs     šœ   tIMEÕ"Ö„Ü  LIDATxÚíœy¸\e}Ç?¿÷œ3Ëݳ‘Œa'1D«,‚DÁ¥¶(‚K°"‚ˆu£²µ’HŒ7l«ˆ
+ˆ B AÀB[BIQäÆÜÜÜmî½³ííï™}æÞ¹Y¨­¼Ï3ϽÏÌœ3ç=ßïïû[gàõõ'½äÿËFœs­øó„>è DûõßøOäjžRa€& ‚¨ùù»?µéu¼FË^òÐRàÀIÞ\0iDŒF¤¨:‡Ò!ºìx	ƒª÷ç~”»ï¢¾N€&—µdílààÂñ/:¿g›­Cˆ2ì#"hßED—žð,'PöÁ¹¾´}ßÏä©Ë4@öá+䏒 öÒÇõ¾>§öÂ	e\BÔ#Þ)BÕsnéÿÐ'÷à%²¯k•“B^#°^¬̊dù¦I1!ªÉ0"(m>£@„fÔ 	*HPñÙ¡{Xöá+^Ú×À×Sُ ¸v_¾7¤(aŸaj }cõE"øAákH ¡[~=—dýÆu{ükB {éãˀ˛\ËØdËBAÍÿ
+߯óM“a<"Œéö‚5.a%¨"AD"½<»îê+öøFñ€ì#àOÖŒ|#ÀŲöÜç×!E#"Ô#ƒö¦Õ`"JP^=%hÖÎS~Ú×81…'WÓ}J kÉÚO‹£V'ñÕÀW®­Ø^H½;&)ªÉ°'®aOIP®ã†Õûý†*  ~ô¿Ÿ#Œu€Ó²GàØ{¾G1ð'¼V
+Ô"Ì×=G9
+Ÿ£ƒ -ñ
+®±š⨚¢¾Û²K$°ìJX‰"	
+Aai?V¥
+h©T½XÊw˜°uÆþ­ØKr€-šøìjðš™ä¾/ÎgöäZP7ÿ!Ç;®…T6,‚vè4‡'¿4‹)m%R¼´Ûãðe=|ûC]œûö6¾ðóßû÷ì˜9z5!ª¡Cè|Sî \ŽšÙÊ}_}3³§$j÷Ô=Ì;ÿ~©‘Òõ:£µßXÌ”öy·ìfޫ뺁EGÀY'ÎqGˆ Y×çЙ]Lë*Yóƒÿñ2¼ô'5*PT€HÌ=t¨	ÛgƒHSÖß4ì%i M¼h1ÕkJg+=+V<wùêm\ó‹mHÙi;Ž¶fLJ²ãºÃÑZsÙ½C\»¦ŸÛÝ×Ì wØgÆ׶¡ÅŠn Ê*˜9ˆÔ šqõÜÀÔv‡++Wþx×®~Þ”…‚ÀÜpe1c’ë?üZk®üñznXý,¡—‡0 at BDqÜüƒX~î±{ôLžÜ¼“¯¬ZÇ3/ì­<ÎÿB®¿àT”.½õ!Vüô·¥X Ì‚¨°.
+"Aò‘MÀnüe͐¤o´6Wþáý/¢û
+x:Ë&Œw@²ƒç$¸ðgƒÜºvÉg•æFˆ„¨áP¶ñ‰:;Nk…XÄn*&hZ
+븁¾¯æ}·Ý÷j¸|´‘qíÄ –död#ß_õ4«îå¹Hn¼<VèsõEïᢳ!"üËC›9ÿÆG	ƒ Â<>Ú÷¹õŽÇ™3µ…ÏŸ}<=ý{Tv ÂÐA)hMŽïÒ=„­3Æ­6$€sν´•ØP]YÓÄMô\GªW÷v¬n$—BÂoAÚ@¦¾o~äÍ\õËÝ|gíâç‘ü(»vnçæÕKß7øþÓ¨á>cÙ!<t²&Í&´„ éa¬Ì Q±!Ñwì@
+í†Ü(h'ŽníBuNåú¿YÄò;že՚ߺy$"–OóÓoË{Nz ®•Ï¬x­ÉæÀÍ›àP‡üËÏŸàãï}ÏnÜ
+^q󈛍â‰&	íEe{iÓ_-Ùx×s
+ß× ü€
+{[‡×ž‹¤ûQýÛQې‘>Äw¹úcGÑ=èóõ_õ—E¶YÄåË×ÝÏ”¯çû¿Šn¢—E¥zPƒÝ¨¡HnñÓ{,ýÍÊÃåùHf•êER½HfŸåçOw_še?ÝP
+CŸ•Vü\Þç¼ë@!¸9$=ŒŒ"£ýH֐ê¥î~Ö­ß
+–€íOàyˆçÕÈÿ8kCû›þꄉ*ÀºBС­ÄWßñ²HnÄ€™ìäÌwÍñó¦±ø†­à£Ã J}4ÚqÀiA·v¡c-æ¼¢ Ç‘üêº@3ià„À´ ¾‹ä2 Ct¢3ß½€ãÌæÔ+Qüèñ—'Ïç£<¶xü-¿XOwï.’AFSHvDЉt,F^κâߐXÜH~€ŸG|TE/óÿu²§uâ½ÄÎþù<]•W“@ȃg‚±\¶cƇ‹ Š£šÃeKåÔk6“ZÎ¤pñ;'1§koœº€93ÚhKÆ8𧢠0Dw€v³èD;Ø1Ž9(ÎYoïâˆé§ÏoÇõ57?Úσ›G9þóg&™wP’?y¼÷Ÿ^¬ÉXî¸àH\¾í…$_~åÍüÙÛ¹ôŽ—¸åáî1+‚Xˆ2{ÅÑGÏá²ÏœÆ»/û%ùÐŽ,?@û9l	Yþù3J!7ÿâY#ûéÔp?2:lö˜l3ˆ'!–@$ â`ÛFIhE{>ZGHúåõ	¯)JÑ1ï½ó†7Ý·©x^´.²Š¥È	AÂÒ…uv¶ñ½ë?É’«¡w¤iA
+øñÃ}ü~åââ{ïùÏ>|l$ E˜ì‚D“§v±âÓÇðöÃ:8ù†­ôúŒÜ4Ÿ„_;ã ~ôØ6â‡LåìES 8z¦ÆñFðc­q‹Ÿ]°Ãf$Ï<ºZlŽ;¬ÇV|ýC‡pëý¿3Á]ƒ¼Ê"Mé¦vv´ñ½ŸácW®¦gH é ÏX«›ãŒ?ŸËš\|ÿ£ÏngGï’K£Fáð]t²l…Dâ	“í²eãå¯Jå¼±U¸)ù¹çë©@j±ÿÛ²¢”h¿ø('BÝ:9y𲍢1@ó•˲÷ðüցèF†àçQ¹AüìpÅ!ý÷ ÊM¡Ò»Pé^ÄåÈY­<uÝ;ø𢩜uËKlïå
+“²âŠf´o7·¯)‘ÜRÂt;ƒŒ"»Xõñ¹9³K	3;
+)zúF¹êgÿ%¡‰îÝ,’BFÆt·Þòe®ºáNžßÒknfèëvóà¹|ð¤#+Þÿ«§¶ ¿?<ùŒQ“XO 8(«Ô0–…–ˆÅ+S¿Hþ+À]‚Ê4Y„®#/“ qÛº¼èOÊŠ.ÕC&mj±7té%ÍãOläþßlDBÏÉEeS¨\ŠŽêª8î7›ú‘ô ªïUÔ®-H?÷_uo˜–仿éaýö,âeøÄ¢Žâ1w=¹Ý;vÒóÊ+çêÈ¢úwpáâÉœuÒœâó³»lð]ÔènnþÉZ Y¿ñr¨\
+•Ú‰5°½!©/ý»%<ñÄs<ðȳ(­‘ÐEûxq³Hèó¶y³*{zS7ä2Èh
+òiD‡àÄ"éO€mWYt¤¼ ,ßT£Jg9ø•
+U?V:À±JººÈçÓµEE(¨A#U0ÊàqúâyL?`7­¼4hßøHñrˆ›Àç”·”nTÿˆÇÆ-½¨Ì jpVÿ«¬üÊ»8hZArý=[/ÃÑÓm>÷®Ù ¼ðê ŸýÇ!—!78Tq
+ñ`„EsÌê´M—®sv‡F¥PÃ}Ìm17í–ÕÿxYð=$3ŒŒô×q§Ÿ²éÓ'sÓʻ̀„âfQnÖ¨›esдŽŠC_ÞÚƒdF‘\ñ=´XèX,ß©QÛ"H⚘#t!tkÀ— _|­àû‹Ö䋽‡|6ßDäj#ë(B3ªpÈA]|üÌãùÒWWLdžMAfò£ s`Éú7¢]²$“â„cfqÆÉŒ}n¯îÊrìÁ	~õÕ…$ãw>¼‰w.]Åðp
+Ñ.x™Šk˜6©•+Ï?…«¿¹šž]ƒ
+ Ò}¨T}è-Üûð³<ùÌ< ý­ÚÓ¬É|ìÃ'ò¥¯Üd¬“ÐÔ*¼<â™´¥ÐJa[•·w8•2¤÷ò&¾°,´“@,A‹%ܲöoEãgܨ?jÁ¬¿©4Ѝ§¥¶»UþªkñVe£¤z]}Þq\ð…ñ}ÑÆï‹ï"nÎä·¢8äà©<­Tÿ~lón$È ~ñs|bÉ©ÅצOJòøUo¥-.ÜõÈüdõ:6<¿ì€Ö.8•AÒ?]ò>νr5y×cgÏ ‡Î5d›=)†¤Sœ¼à@N;qÇ¿ÿéB·DW,YC&€«/8•.^ï› Q¢=iÏË6)­ã@,Fo*ì©íÅc[cŠ´ï"…*¢e!¶"´l“îUÕû¥^¹wŸ_ôUz.ŽåM ?ð–\.˜¡¨J2T×ÊU¡ª­?0’ç²[eh8mD+~âÄЪ
+ì'¿ef¥ÿß؋ʏšÊWàs±óŠ¯ýíª§yì÷i¬¡&>éGDA<in’ï"~¥Ìݹî%þóÅ^,zv•‚ºYS“yP+¯ù$ùØ7èÝÕÓZÁϘœ\ñ–ª=å¸ìæ5
+gPZU|ð\°²&‚wlpb`ÙüvÓøðIG_xØtžxùÅR„/‚Vˆ2ÀEÆרٳ7à+ñ	´,;¸ûSWH µù5	ÝR{³àÊuÈàù!¹ú¶lëèÐ{!D,…Ž%9yA©¹c Ëï^î挷ÎDr#Hà2cú¤âën r)¡§‡ÀÍ2©#É_ž2	<ÓpqJÉ
+[úX~û#çZ³sgɧ/<ü@~¶â“üÍnaý†—̍u3&J÷\sc§bOg_õK^Þ¶)¤‡ZG{Ê›°ì¨GažÿÁ•Ø‹—R]]jÅEM-íkÎÿÀ"–¾ç˜ðՍžrð>ðCÏ-‚›chËSW4S
+ž/a@ù£š…G
+)¢õ¹UO±öùžâMÒH±pbXo£-ÍqGL)÷µÝÈ»9 /›6¾2ÙÝWJ/þÀQ$üQTz€vËçSç,æÁ;þŽ·õ£EÐN‚°ÍäÝ®°ôÛÿŽ*ú֝=%tu$ùô×WóøúW@)$ô‘|É#n-Úe¢uÑ-³î¹ntè£uä¯{B™;)ØÊȹøÍ3[¹ý×¥´ôŒçñ>ËÓ§D$	ˆ‰Ï©o}#k¾ý)›=‰Ûî~ü\ñ~›˜Á3.ÁÏUù{	óÅ`Oé ¾߀ïåQV8¿©J`îžó6Åϸ	±cõGšTy¤Ê÷ó›¹í×[Ì…Fy¬mҝd$ZÀŽ²hM”|ÇŠ¥ÇpãÏrÝ·A¹9@óƒÛåò/ž	À™ÇÏá´»Îc``„™Ó;Ùúj/ç|ñ66÷ktkWT at 1R¹ì'ÿŦWw›¨9ô@4;{SFiv
+ñ_þ)›_ډض±ÄÀ/g\e™œÜ1íïw>ÃmlßC¡
+ð–…Æ6|<ŽŽ%ÀQf¿e¤Ï®x !äìSL/à¯?t=óDº»{	BÍ̧bÛŠko{o|÷Þ’ÅûQ0ª1Á­ˆÙ›HmŽ_JT"«p¯l¬ûm¦ºyÎá§ÿœ‹ÐaˆhßüU¢uÅ€ÐçNáü›×š¯fù9T>cêÝZC²
+Ý9°}:‘Œ´'$“8öˆ©ô¦r,¿ýnüñZTj7*‚0àÉç¶$Û™5s
+mI‡0Ô¼²}77Ýz7Ÿûò-ô{ÆRm#½J‡œú¶9œÿ­GÆú9T>dFèêH°`þ\N¿øŸy¹?Z›kÌeLjj9QN7À:›Îgo|Ä ãæ WÖÛH´ Û'¡[ÛLF©HÒ]DˆŸ{ÛÀo7l%¦„Ž–8ɸCKK‚Áaî]ó^ù=îZó[sL`,VòYďÜZèEÁ­6iwì e¯C“e‰„ø0@© ýŽìPï¶	
+„$Þý­ØVÝŽ`q¤i¬©_7gjÝ=Hà¡“m„]ÓÑ­Æ²T¥÷±!ŸE†ûQ½¯ ©Ý¦ÙÒ>=e&ºc*ZÙH&…êëFR½è¶Ntûd£,ÊŠhˁxÒX¥ï¡†ûPƒ½æ|-è®ièXÂäã}@R»«K¶¡;§šs&ZLÝ?,øëÀ\ßÈ*ÕgJ¸ñtÇdtKk¤hªáŸöB”?
+Ù,’D2ð}S؉;hÇ6¤H4?aÒf”€SŽb†ºé_–±xy”
+
+ÓGÇvÿî¹	ÏäÖ|á9@§]£Qè’XˆmÕ7j-U5jm*WÉ6㟭h‰fötEM=:YTÈÌM‰ÅÍMˆêàšÀø[Û2
+’oCò“{g†d:qˆ%L:V¸4Z„0ž4¤K¶ í¨É„FâqhmG:ÞŠN$Ñ‘š ý’‰D_:ÅRFq
+›¸c |k'xUÔeÁœÏ’14’3ìyHà«@¨ãgÒD”2.AEÀ‹TD÷¦Pä¥@© í»vÿn܉¯¦FÂ﹡¶+¢-cbØUÞÄwÁÍA.ØÊøÔXÂVV‡ž%ñ=Ó€ì¢A·´™ÖpÁ£*Ã}¨|ÚôÕ-bf*GÇ“QG-n:‘‰€ÅÍbÄ"’ø¡ñù¹Œ	ú”eT#‘4–OmHÜtTê̓²¢Öu¼ä£«@¯IåB×(Š›×7:Wr‰DnD›±/[ÀR ]PÑ5Uøø2?_  wä’qÇÁ&4š8íZº5è©"rTÀÒ‘<ÇÌ&í߈š1âæJŒvb†<vÌXAõ{
+3y–b£ìdÝØÑ8•kþŠŠ¬Ê*ݸÀ+½f;ÑyT	°ªë/m®ATIòˇ0ý\m·®¼€¦£ê^¨ÁËAÐÚÌûY{á¯ÂÌBø^ÉÚË@/^#ä8‡jŒöz(´zU+E«X½@!’ÑèS”S3­Z÷­#‹(KT1¸2‘°.µkòˆ[‰IÃ
+ï-øÇâuDÑ{!%Ê¨Zl3XRLë¤ay[{¡±î⹨™ñ¯×¤©[¸ÑѽѺôz`,]ŠÈhß«±ö2ÿ^rÙ‘Å×[ûœ 	>
+¬Oµç_úØKB­bµ–\w¢©
+l_G…’úr^w£ÑTNY“¦¢hS–ÆUWîƳö"f,"è:lÜý5"Á>ùjXËñkbmõIÐäHÙ~!À8mëºþzŒy»q­»ºÛ$à]¼4Ù7}fB÷b¿ Øì8îsº<5‰#¶˜®–ýÚÿAC+èF–ÝPÒëŒaUjª{óuA¯
+èªežÀepçViäŠ÷„û
+•¶·«µ]5¾l¿jÐĤlÍ]ƒ_iƺDzðq­|K/XûÀ®n™HLöGA€òÕùgՁSé"´8ûN굇§þpä?ÕðÇ%Xu]°Ç ¼nÊVÈ…¡µÇ ï+¼æº<çďëþÁQp’ûô#Æû¥fÀm䦭»Ž…×Èzø¤Ž6¶¼øÂ^á1ÑŸ‡ù_!@½Õ1ï½Z#¦¦`í…2Œ÷#á8$ià««-z< ûpBAOØÂ÷%^óßÚ“5ýÍï×Ùl6j![Ô–÷„ c[q5Èunìè‹.¢ý}bÙ{C‚?Ú_	ÛÛÍt±XãgµD_B‰úóuŠNåÀ6·ÈZ#Ê/©¢ñÒh§µ©šûëk?ÉÚDžë½…ÇŸÚ}U¯SkübÉëø#gXh³¾òÿëú?µéý%Ѫ࿾^_ülPŽIËcX(    IEND®B`‚
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/images/text.png
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/images/text.png	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/images/text.png	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,6 @@
+‰PNG
+
+   
+IHDR         íÝâR   PLTE   kkkŒŒŒÿÿÿÎÎÎççç999Û„+à   tRNS @æØf   bKGD ˆH   	pHYs     šœ   tIMEÕ
+Q–Q   FIDAT×c`€c P 1œM‚`S(ÃÅÄHKKNK1BCƒ
+¡"Ɓ‘Ð`¨HZš!T$”ÈVÃHÄ =°¿­{ï…    IEND®B`‚
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/images/up.png
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/images/up.png	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/images/up.png	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,7 @@
+‰PNG
+
+   
+IHDR   
+   
+   H%v?   PLTE     âÇà   tRNS @æØf   bKGD ˆH   	pHYs    ÒÝ~ü   tIMEÔ2›Î‘   IDATxÚc`À Lìü
+òì@Ä —Gb2Þ    IEND®B`‚
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/images/view.png
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/images/view.png	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/images/view.png	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,6 @@
+‰PNG
+
+   
+IHDR         óÿa   bKGD ÿ ÿ ÿ ½§“   oIDATxÚc`T‚ÿbˆTg€MPJãrPyAdu‚H‚ÄØ,åÃ
+øOVÄfòÿ¹;.ýÿÿÿÿÿ¹;.ýG2—8°Ào^>g˜·“áÅÓG(
+`âOÞÅë7EÎD7M¨˜   ûB‰‘i4    IEND®B`‚
\ No newline at end of file

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/styles.css
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/styles.css	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge/viewvc/styles.css	2011-02-24 17:31:31 UTC (rev 11977)
@@ -0,0 +1,217 @@
+/*******************************/
+/***  ViewVC CSS Stylesheet ***/
+/*******************************/
+
+/*** Standard Tags ***/
+html, body {
+  color: #000000;
+  background-color: #ffffff;
+}
+
+a:link    { color: #0000ff; }
+a:visited { color: #880088; }
+a:active  { color: #0000ff; }
+
+img { border: none; }
+table {
+  width: 100%;
+  margin: 0; 
+  border: none;
+}
+table.auto {
+  width: auto;
+}
+table.fixed {
+  width: 100%;
+  table-layout: fixed;
+}
+table.fixed td {
+  overflow: hidden; 
+  text-overflow: ellipsis;
+  white-space: nowrap;
+}
+tr, td, th { vertical-align: top; }
+form { margin: 0; }
+
+/*** Icons ***/
+.vc_icon {
+  width: 16px;
+  height: 16px;
+  border: none;
+  padding: 0 1px;
+}
+
+
+/*** Navigation Headers ***/
+.vc_navheader {
+  background-color: #cccccc;
+}
+
+
+/*** Table Headers ***/
+.vc_header {
+  text-align: left;
+  vertical-align: top;
+  background-color: #cccccc;
+}
+.vc_header_sort {
+  text-align: left;
+  background-color: #88ff88;
+}
+
+
+/*** Table Rows ***/
+.vc_row_even {
+  background-color: #ffffff;
+}
+.vc_row_odd {
+  background-color: #ccccee;
+}
+
+
+/*** Log messages ***/
+.vc_log {
+  /* unfortunately, white-space: pre-wrap isn't widely supported ... */
+  white-space: -moz-pre-wrap; /* Mozilla based browsers */
+  white-space: -pre-wrap;     /* Opera 4 - 6 */
+  white-space: -o-pre-wrap;   /* Opera >= 7 */
+  white-space: pre-wrap;      /* CSS3 */
+  word-wrap: break-word;      /* IE 5.5+ */
+}
+
+
+/*** Markup Summary Header ***/
+.vc_summary {
+  background-color: #eeeeee;
+}
+
+/*** Highlight Markup Styles ***/
+#vc_markup .num  { color: #000000; }
+#vc_markup .esc  { color: #bd8d8b; }
+#vc_markup .str  { color: #bd8d8b; }
+#vc_markup .dstr { color: #bd8d8b; }
+#vc_markup .slc  { color: #ac2020; font-style: italic; }
+#vc_markup .com  { color: #ac2020; font-style: italic; }
+#vc_markup .dir  { color: #000000; }
+#vc_markup .sym  { color: #000000; }
+#vc_markup .line { color: #555555; }
+#vc_markup .kwa  { color: #9c20ee; font-weight: bold; }
+#vc_markup .kwb  { color: #208920; }
+#vc_markup .kwc  { color: #0000ff; }
+#vc_markup .kwd  { color: #404040; }
+
+/*** Py2html Markup Styles  ***/
+#vc_markup .PY_STRING     { color: #bd8d8b; }
+#vc_markup .PY_COMMENT    { color: #ac2020; font-style: italic; }
+#vc_markup .PY_KEYWORD    { color: #9c20ee; font-weight: bold; }
+#vc_markup .PY_IDENTIFIER { color: #404040; }
+
+/*** Line numbers outputted by highlight colorizer ***/
+.line {
+  border-right-width: 1px;
+  border-right-style: solid;
+  border-right-color: #505050;
+  padding: 1px;
+  background-color: #eeeeee;
+  color: #505050;
+  text-decoration: none;
+  font-weight: normal;
+  font-style: normal;
+}
+
+/*** Diff Styles ***/
+.vc_diff_header {
+  background-color: #ffffff;
+}
+.vc_diff_chunk_header {
+  background-color: #99cccc;
+}
+.vc_diff_chunk_extra {
+  font-size: smaller;
+}
+.vc_diff_empty {
+  background-color: #cccccc;
+  font-family: sans-serif;
+  font-size: smaller;
+}
+.vc_diff_add {
+  background-color: #aaffaa;
+  font-family: sans-serif;
+  font-size: smaller;
+}
+.vc_diff_remove {
+  background-color: #ffaaaa;
+  font-family: sans-serif;
+  font-size: smaller;
+}
+.vc_diff_change {
+  background-color: #ffff77;
+  font-family: sans-serif;
+  font-size: smaller;
+}
+.vc_diff_change_empty {
+  background-color: #eeee77;
+  font-family: sans-serif;
+  font-size: smaller;
+}
+.vc_diff_nochange {
+  font-family: sans-serif;
+  font-size: smaller;
+}
+.vc_raw_diff {
+  background-color: #cccccc;
+  font-size: smaller;
+}
+
+/*** Intraline Diff Styles ***/
+
+.vc_idiff_add {
+  background-color: #aaffaa;
+}
+.vc_idiff_change {
+  background-color:#ffff77;
+}
+.vc_idiff_remove {
+  background-color:#ffaaaa;
+}
+.vc_idiff_empty {
+  background-color:#e0e0e0;
+}
+
+table.vc_idiff col.content { 
+  width: 50%;
+}
+table.vc_idiff tbody {
+  font-family: monospace; 
+  /* unfortunately, white-space: pre-wrap isn't widely supported ... */
+  white-space: -moz-pre-wrap; /* Mozilla based browsers */
+  white-space: -pre-wrap;     /* Opera 4 - 6 */
+  white-space: -o-pre-wrap;   /* Opera >= 7 */
+  white-space: pre-wrap;      /* CSS3 */
+  word-wrap: break-word;      /* IE 5.5+ */
+}
+table.vc_idiff tbody th {
+  background-color:#e0e0e0;
+  text-align:right;
+}
+
+/*** Annotate Styles ***/
+.vc_blame_line, .vc_blame_author, .vc_blame_rev {
+  font-family: monospace;
+  font-size: smaller;
+  text-align: right;
+  white-space: nowrap;
+  padding-right: 1em;
+}
+.vc_blame_text {
+  font-family: monospace;
+  font-size: smaller;
+  text-align: left;
+  white-space: pre;
+  width: 100%;
+}
+
+/*** Query Form ***/
+.vc_query_form {
+  background-color: #e6e6e6;
+}

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge-classic/css/theme.css
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge-classic/css/theme.css	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge-classic/css/theme.css	2011-02-24 17:31:31 UTC (rev 11977)
@@ -5,7 +5,7 @@
 		margin-left: 3;
 		margin-right: 3;
 		margin-bottom: 3;
-		background-image: url("/themes/gforge/images/theme-top-blue.png");
+		background-image: url("../images/theme-top-blue.png");
 	}
 ol,ul,p,body,td,tr,th,form { font-family: verdana,arial,helvetica,sans-serif; font-size:small;
 		color: #333333; }
@@ -45,7 +45,20 @@
 
 
 /* $Id$ */
+/* header style */
+.header {
+//background: rgb(66, 69, 82) url("../images/theme-top-blue.png") top left
+background: url("../images/theme-top-blue.png") top left
+repeat-x;
+/* padding-right: 1em; */
+padding-top: 0;
+padding-bottom: 0;
+padding-left: 0;
+margin: 0 0 0 0;
+vertical-align: top;
+}
 
+
 /*--------------------------------------------------
   REQUIRED to hide the non-active tab content.
   But do not hide them in the print stylesheet!

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge-simple-theme/Theme.class
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge-simple-theme/Theme.class	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/gforge-simple-theme/Theme.class	2011-02-24 17:31:31 UTC (rev 11977)
@@ -65,7 +65,7 @@
 	 *	@param	string	The user's realname
 	 */
 	function createLinkToUserHome($user_name, $realname) {
-		return '<a href="/users/'.$user_name.'/">'.$realname.'</a>';
+		return '<a href="'.$GLOBALS['sys_urlprefix'].'/users/'.$user_name.'/">'.$realname.'</a>';
 	}
 
 	/**
@@ -93,12 +93,12 @@
   <head>
 	<meta http-equiv="Content-Type" content="text/html; charset=<?php echo $Language->getEncoding(); ?>" />
 	<title><?php echo $params['title']; ?></title>
-	<link rel="alternate" title="<?php echo $GLOBALS['sys_name']; ?> - Project News Highlights RSS" href="/export/rss_sfnews.php" type="application/rss+xml"/>
-	<link rel="alternate" title="<?php echo $GLOBALS['sys_name']; ?> - Project News Highlights RSS 2.0" href="/export/rss20_news.php" type="application/rss+xml"/>
-	<link rel="alternate" title="<?php echo $GLOBALS['sys_name']; ?> - New Projects RSS" href="/export/rss_sfprojects.php" type="application/rss+xml"/>
+	<link rel="alternate" title="<?php echo $GLOBALS['sys_name']; ?> - Project News Highlights RSS" href="<?php echo $GLOBALS['sys_urlprefix']; ?>/export/rss_sfnews.php" type="application/rss+xml"/>
+	<link rel="alternate" title="<?php echo $GLOBALS['sys_name']; ?> - Project News Highlights RSS 2.0" href="<?php echo $GLOBALS['sys_urlprefix']; ?>/export/rss20_news.php" type="application/rss+xml"/>
+	<link rel="alternate" title="<?php echo $GLOBALS['sys_name']; ?> - New Projects RSS" href="<?php echo $GLOBALS['sys_urlprefix']; ?>/export/rss_sfprojects.php" type="application/rss+xml"/>
 	
 	<?php	if (isset($GLOBALS['group_id'])) { 
-			$activity = '<link rel="alternate" title="' . $GLOBALS['sys_name'] . ' - New Activity RSS" href="/export/rss20_activity.php?group_id='.$GLOBALS['group_id'].'" type="application/rss+xml"/>';
+			$activity = '<link rel="alternate" title="' . $GLOBALS['sys_name'] . ' - New Activity RSS" href="<?php echo $GLOBALS['sys_urlprefix']; ?>/export/rss20_activity.php?group_id='.$GLOBALS['group_id'].'" type="application/rss+xml"/>';
 			echo $activity;
 		}
 	?>
@@ -111,7 +111,7 @@
 $theme_cssfile=$GLOBALS['sys_themeroot'].$GLOBALS['sys_theme'].'/css/'.$GLOBALS['sys_theme'].'.css';
 if (file_exists($theme_cssfile)){
 echo '
-<link rel="stylesheet" type="text/css" href="/themes/'.$GLOBALS['sys_theme'].'/css/'.$GLOBALS['sys_theme'].'.css"/>';
+<link rel="stylesheet" type="text/css" href="'.$GLOBALS['sys_urlprefix'].'/themes/'.$GLOBALS['sys_theme'].'/css/'.$GLOBALS['sys_theme'].'.css"/>';
 }
 ?>
 
@@ -145,22 +145,22 @@
 
 <div id="container">
 <div id="logo">
-<h1><a href="/">Goto GForge</a></h1>
-<!--<a href="/"><img src="/themes/gforge-simple-theme/images/logo.png" border="0" margin="0" padding="0" valign="top"/></a>-->
+<h1><a href="<?php echo $GLOBALS['sys_urlprefix']; ?>/">Goto GForge</a></h1>
+<!--<a href="<?php echo $GLOBALS['sys_urlprefix']; ?>/"><img src="<?php echo $GLOBALS['sys_urlprefix']; ?>/themes/gforge-simple-theme/images/logo.png" border="0" margin="0" padding="0" valign="top"/></a>-->
 </div>
     <div id="util">
 
 <?php	if (session_loggedin()) {
 				?>
 
-<a href="/account/logout.php"><?php echo $Language->getText('common','logout'); ?></a><br/>
-<a href="/account/"><?php echo $Language->getText('common','myaccount'); ?></a><br/>
+<a href="<?php echo $GLOBALS['sys_urlprefix']; ?>/account/logout.php"><?php echo $Language->getText('common','logout'); ?></a><br/>
+<a href="<?php echo $GLOBALS['sys_urlprefix']; ?>/account/"><?php echo $Language->getText('common','myaccount'); ?></a><br/>
 			
 				<?php
 			} else {
 				?>
-				<a href="/account/login.php"><?php echo $Language->getText('common','login'); ?></a><br/>
-				<a href="/account/register.php"><?php echo $Language->getText('common','newaccount'); ?></a>
+				<a href="<?php echo $GLOBALS['sys_urlprefix']; ?>/account/login.php"><?php echo $Language->getText('common','login'); ?></a><br/>
+				<a href="<?php echo $GLOBALS['sys_urlprefix']; ?>/account/register.php"><?php echo $Language->getText('common','newaccount'); ?></a>
 				<?php
 			}
 ?>
@@ -224,13 +224,13 @@
 
 <!-- PLEASE LEAVE "Powered By GForge" on your site -->
 <div id="footer">
-<a href="http://gforge.org/"><img src="/images/pow-gforge.png" alt="Powered By GForge Collaborative Development Environment" border="0" /></a>
+<a href="http://gforge.org/"><img src="<?php echo $GLOBALS['sys_urlprefix']; ?>/images/pow-gforge.png" alt="Powered By GForge Collaborative Development Environment" border="0" /></a>
 </div>
 <?php
 	global $sys_show_source;
 	global $Language;
 	if ($sys_show_source) {
-		print '<a class="showsource" href="/source.php?file=' . getStringFromServer('SCRIPT_NAME') . '"> '.$Language->getText('source','show_source').' </a>';
+		print '<a class="showsource" href="'.$GLOBALS['sys_urlprefix'].'/source.php?file=' . getStringFromServer('SCRIPT_NAME') . '"> '.$Language->getText('source','show_source').' </a>';
 	}
 ?>
 
@@ -692,7 +692,7 @@
 		if (isset($group_id)) {
 			print '
 					
-					<a class="lnkutility" href="/search/advanced_search.php?group_id='.$group_id.'"> '.$Language->getText('searchbox', 'advanced_search').'</a>';
+					<a class="lnkutility" href="'.$GLOBALS['sys_urlprefix'].'/search/advanced_search.php?group_id='.$group_id.'"> '.$Language->getText('searchbox', 'advanced_search').'</a>';
 		}
 		print '</form>';
 

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/lite/Theme.class
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/lite/Theme.class	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/lite/Theme.class	2011-02-24 17:31:31 UTC (rev 11977)
@@ -79,7 +79,7 @@
   <head>
 	<meta http-equiv="Content-Type" content="text/html; charset=<?php echo $Language->getEncoding(); ?>"/>
 	<title><?php echo $params['title']; ?></title>
-	<link rel="stylesheet" type="text/css" href="/themes/lite/css/theme.css" />
+	<link rel="stylesheet" type="text/css" href="<?php echo $GLOBALS['sys_urlprefix']; ?>/themes/lite/css/theme.css" />
 	<script type="text/javascript">
 	<!--
 	function help_window(helpurl) {
@@ -126,18 +126,18 @@
 <table border="0px" width="100%" cellspacing="0px" cellpadding="0px" class="content">
 
 	<tr>
-		<td><a href="/"><img src="/themes/lite/images/gforge_logo.png" border="0" alt="Gforge Logo" width="200px" /></a></td>
+		<td><a href="<?php echo $GLOBALS['sys_urlprefix']; ?>/"><img src="/themes/lite/images/gforge_logo.png" border="0" alt="Gforge Logo" width="200px" /></a></td>
 		<td align="right"><?php echo $this->searchBox(); ?></td>
 		<td align="right"><?php
 			if (session_loggedin()) {
 				?>
-				<a href="/account/logout.php">Logout</a><br />
-				<a href="/account/">My Account</a>
+				<a href="<?php echo $GLOBALS['sys_urlprefix']; ?>/account/logout.php">Logout</a><br />
+				<a href="<?php echo $GLOBALS['sys_urlprefix']; ?>/account/">My Account</a>
 				<?php
 			} else {
 				?>
-				<a href="/account/login.php">Login</a><br />
-				<a href="/account/register.php">New Account</a>
+				<a href="<?php echo $GLOBALS['sys_urlprefix']; ?>/account/login.php">Login</a><br />
+				<a href="<?php echo $GLOBALS['sys_urlprefix']; ?>/account/register.php">New Account</a>
 				<?php
 			}
 
@@ -185,7 +185,7 @@
 <!-- PLEASE LEAVE "Powered By GForge" on your site -->
 <br />
 <center>
-<a href="http://gforge.org/"><img src="/images/pow-gforge.png" alt="Powered By GForge Collaborative Development En
+<a href="http://gforge.org/"><img src="<?php echo $GLOBALS['sys_urlprefix']; ?>/images/pow-gforge.png" alt="Powered By GForge Collaborative Development En
 vironment" border="0" /></a>
 </center>
 

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/osx/Theme.class
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/osx/Theme.class	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/osx/Theme.class	2011-02-24 17:31:31 UTC (rev 11977)
@@ -55,13 +55,13 @@
 
 		$this->headerStart($params); ?>
 
-<link rel="stylesheet" type="text/css" href="/themes/osx/css/theme.css" />
+<link rel="stylesheet" type="text/css" href="<?php echo $GLOBALS['sys_urlprefix']; ?>/themes/osx/css/theme.css" />
 <body>
 
 <table border="0" width="100%" cellspacing="0" cellpadding="0">
 
 	<tr>
-		<td><a href="/"
+		<td><a href="<?php echo $GLOBALS['sys_urlprefix']; ?>/"
 			onmouseover="imgOver('logo')"
 			onmouseout="imgOff('logo')"><img name="logo" border="0" height="60" width="180"
 				src="<?php echo $this->imgroot.'logo.png'; ?>" alt="GForge Logo" /></a></td>
@@ -69,13 +69,13 @@
 		<td align="right"><?php
 			if (session_loggedin()) {
 				?>
-				<b><a href="/account/logout.php"><?php echo $Language->getText('common','logout'); ?></a></b><br />
-				<b><a href="/account/"><?php echo $Language->getText('common','myaccount'); ?></a></b>
+				<b><a href="<?php echo $GLOBALS['sys_urlprefix']; ?>/account/logout.php"><?php echo $Language->getText('common','logout'); ?></a></b><br />
+				<b><a href="<?php echo $GLOBALS['sys_urlprefix']; ?>/account/"><?php echo $Language->getText('common','myaccount'); ?></a></b>
 				<?php
 			} else {
 				?>
-				<b><a href="/account/login.php"><?php echo $Language->getText('common','login'); ?></a></b><br />
-				<b><a href="/account/register.php"><?php echo $Language->getText('common','newaccount'); ?></a></b>
+				<b><a href="<?php echo $GLOBALS['sys_urlprefix']; ?>/account/login.php"><?php echo $Language->getText('common','login'); ?></a></b><br />
+				<b><a href="<?php echo $GLOBALS['sys_urlprefix']; ?>/account/register.php"><?php echo $Language->getText('common','newaccount'); ?></a></b>
 				<?php
 			}
 

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/ultralite/Theme.class
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/ultralite/Theme.class	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/themes/ultralite/Theme.class	2011-02-24 17:31:31 UTC (rev 11977)
@@ -35,19 +35,19 @@
 		
 		<body>
 		<p align=left>
-		<a href="/"><h2>GForge</h2></a>
+		<a href="<?php echo $GLOBALS['sys_urlprefix']; ?>/"><h2>GForge</h2></a>
 		</p>
 		<p align=right>
 		<?
 		if (session_loggedin()) {
 		?>
-		<b><a href="/account/logout.php"><?php echo $Language->getText('common','logout'); ?></a></b>
-		<b><a href="/account/"><?php echo $Language->getText('common','myaccount'); ?></a></b>
+		<b><a href="<?php echo $GLOBALS['sys_urlprefix']; ?>/account/logout.php"><?php echo $Language->getText('common','logout'); ?></a></b>
+		<b><a href="<?php echo $GLOBALS['sys_urlprefix']; ?>/account/"><?php echo $Language->getText('common','myaccount'); ?></a></b>
 		<?php
 		} else {
 		?>
-		<b><a href="/account/login.php"><?php echo $Language->getText('common','login'); ?></a></b>
-		<b><a href="/account/register.php"><?php echo $Language->getText('common','newaccount'); ?></a></b>
+		<b><a href="<?php echo $GLOBALS['sys_urlprefix']; ?>/account/login.php"><?php echo $Language->getText('common','login'); ?></a></b>
+		<b><a href="<?php echo $GLOBALS['sys_urlprefix']; ?>/account/register.php"><?php echo $Language->getText('common','newaccount'); ?></a></b>
 		<?php
 		}
 		?>
@@ -144,7 +144,7 @@
 		<?php
 		global $sys_show_source;
 		if ($sys_show_source) {
-		print '<a class="showsource" href="/source.php?file=' . getStringFromServer('SCRIPT_NAME') . '">Show Source</a>';
+		print '<a class="showsource" href="'.$GLOBALS['sys_urlprefix'].'/source.php?file=' . getStringFromServer('SCRIPT_NAME') . '">Show Source</a>';
 		}
 		?>
 		</body>

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/top/index.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/top/index.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/top/index.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -25,6 +25,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 
 $HTML->header(array('title'=>$Language->getText('top','title')));

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/top/mostactive.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/top/mostactive.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/top/mostactive.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -48,7 +48,7 @@
 print '<p><h3>'.$title.'</h3>
 <br /><em>('.$Language->getText('top_mostactive','updated_daily').')</em>
 
-<p><a href="/top/">['.$Language->getText('top','view_other_top_category').']</a>';
+<p><a href="'.$GLOBALS['sys_urlprefix'].'/top/">['.$Language->getText('top','view_other_top_category').']</a>';
 
 $arr=array($Language->getText('top_mostactive','rank'),$Language->getText('top_mostactive','project_name'),$Language->getText('top_mostactive','percentile'));
 
@@ -61,7 +61,7 @@
 while ($row_top = db_fetch_array($res_top)) {
 	$i++;
 	print '<tr '. $HTML->boxGetAltRowStyle($i) .'><td>  '.$i
-		.'</td><td><a href="/projects/'. strtolower($row_top['unix_group_name']) .'/">'
+		.'</td><td><a href="'.$GLOBALS['sys_urlprefix'].'/projects/'. strtolower($row_top['unix_group_name']) .'/">'
 		.$row_top['group_name']."</a>"
 		.'</td><td align="right">'.substr($row_top['percentile'],0,5).'%</td></tr>';
 }

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/top/toplist.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/top/toplist.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/top/toplist.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -54,7 +54,7 @@
 	$column1 = $Language->getText('top_toplist','download');
 }
 $HTML->header(array('title'=>$title));
-print '<p><a href="/top/">['.$Language->getText('top','view_other_top_category').']</a>';
+print '<p><a href="'.$GLOBALS['sys_urlprefix'].'/top/">['.$Language->getText('top','view_other_top_category').']</a>';
 $arr=array($Language->getText('top_toplist','rank'),$Language->getText('top_toplist','project_name'),"$column1");
 echo $HTML->listTableTop($arr);
 
@@ -68,7 +68,7 @@
 	}
 	$display_rank++;
 	print '<tr '. $HTML->boxGetAltRowStyle($i) .'><td>  '.$display_rank
-		.'</td><td><a href="/projects/'. strtolower($row_top['unix_group_name']) .'/">'
+		.'</td><td><a href="'.$GLOBALS['sys_urlprefix'].'/projects/'. strtolower($row_top['unix_group_name']) .'/">'
 		.stripslashes($row_top['group_name'])."</a>"
 		.'</td><td align="right">'.$row_top['items']
 		.'   </td>'

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/top/topusers.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/top/topusers.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/top/topusers.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -28,6 +28,7 @@
 // Results per page
 $LIMIT = 50; 
 
+require_once('../env.inc.php');
 require_once('pre.php');
 
 $offset = getStringFromRequest('offset');
@@ -61,7 +62,7 @@
 print '<h1>'.$Language->getText('top_topusers','title').'</h1>
 <br /><em>('.$Language->getText('top','updated_daily').')</em>
 
-<p><a href="/top/">['.$Language->getText('top','view_other_top_category').']</a></p>';
+<p><a href="'.$GLOBALS['sys_urlprefix'].'/top/">['.$Language->getText('top','view_other_top_category').']</a></p>';
 
 $tableHeaders = array(
 	$Language->getText('top_topusers','rank'),
@@ -77,7 +78,7 @@
 while ($row_top = db_fetch_array($res_top)) {
 	$i++;
 	print '<tr '. $HTML->boxGetAltRowStyle($i) .'><td>  '.$row_top['ranking']
-		.'</td><td><a href="/users/'. $row_top['user_name'] .'/">'
+		.'</td><td><a href="'.$GLOBALS['sys_urlprefix'].'/users/'. $row_top['user_name'] .'/">'
 		.$row_top['user_name'].'</a></td>'
 		.'<td>'.$row_top['realname'].'</td>'
 		.'</td><td align="right">'.sprintf('%.2f', $row_top['metric'])

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/add.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/add.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/add.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -44,7 +44,7 @@
 		<td valign="top">';
 	if (!session_loggedin()) {
 		echo '
-		<span class="error">'.$Language->getText('tracker','please_login',array('<a href="/account/login.php?return_to='.urlencode($REQUEST_URI).'">','</a>')).'</span><<br />
+		<span class="error">'.$Language->getText('tracker','please_login',array('<a href="'.$GLOBALS['sys_urlprefix'].'/account/login.php?return_to='.urlencode($REQUEST_URI).'">','</a>')).'</span><<br />
 		'.$Language->getText('tracker','insert_email').':<p>
 		<input type="text" name="user_email" size="30" maxlength="35" /></p>
 		';
@@ -61,18 +61,18 @@
  
 	if ($ath->userIsAdmin()) {
 		echo '<tr>
-		<td><strong>'.$Language->getText('tracker','assigned_to').': <a href="javascript:help_window(\'/help/tracker.php?helpname=assignee\')"><strong>(?)</strong></a></strong><br />';
+		<td><strong>'.$Language->getText('tracker','assigned_to').': <a href="javascript:help_window(\''.$GLOBALS['sys_urlprefix'].'/help/tracker.php?helpname=assignee\')"><strong>(?)</strong></a></strong><br />';
 		echo $ath->technicianBox ('assigned_to');
-		echo ' <a href="/tracker/admin/?group_id='.$group_id.'&atid='. $ath->getID() .'&update_users=1">('.$Language->getText('tracker','admin').')</a>';
+		echo ' <a href="'.$GLOBALS['sys_urlprefix'].'/tracker/admin/?group_id='.$group_id.'&atid='. $ath->getID() .'&update_users=1">('.$Language->getText('tracker','admin').')</a>';
 
-		echo '</td><td><strong>'.$Language->getText('tracker','priority').': <a href="javascript:help_window(\'/help/tracker.php?helpname=priority\')"><strong>(?)</strong></a></strong><br />';
+		echo '</td><td><strong>'.$Language->getText('tracker','priority').': <a href="javascript:help_window(\''.$GLOBALS['sys_urlprefix'].'/help/tracker.php?helpname=priority\')"><strong>(?)</strong></a></strong><br />';
 		echo build_priority_select_box('priority');
 		echo '</td></tr>';
 	}
 	
 	?>
 	<tr>
-		<td colspan="2"><strong><?php echo $Language->getText('tracker','summary') ?>: <a href="javascript:help_window('/help/tracker.php?helpname=summary')"></strong><?php echo utils_requiredField(); ?><strong>(?)</strong></a><br />
+		<td colspan="2"><strong><?php echo $Language->getText('tracker','summary') ?>: <a href="javascript:help_window('<?php echo $GLOBALS['sys_urlprefix']; ?>/help/tracker.php?helpname=summary')"></strong><?php echo utils_requiredField(); ?><strong>(?)</strong></a><br />
 		<input type="text" name="summary" size="80" maxlength="255" />
 		</td>
 	</tr>
@@ -90,7 +90,7 @@
 	<?php 
 	if (!session_loggedin()) {
 		echo '
-		<span class="error">'.$Language->getText('tracker','please_login',array('<a href="/account/login.php?return_to='.urlencode(getStringFromServer('REQUEST_URI')).'">','</a>')).'</span><br />
+		<span class="error">'.$Language->getText('tracker','please_login',array('<a href="'.$GLOBALS['sys_urlprefix'].'/account/login.php?return_to='.urlencode(getStringFromServer('REQUEST_URI')).'">','</a>')).'</span><br />
 		'.$Language->getText('tracker','insert_email').':<p>
 		<input type="text" name="user_email" size="30" maxlength="255" /></p>
 		';
@@ -104,7 +104,7 @@
 
 	<tr>
 		<td colspan="2">
-		<a href="javascript:help_window('/help/tracker.php?helpname=attach_file')"><strong>(?)</strong></a><br />
+		<a href="javascript:help_window('<?php echo $GLOBALS['sys_urlprefix']; ?>/help/tracker.php?helpname=attach_file')"><strong>(?)</strong></a><br />
 		<p>
 		<strong><?php echo $Language->getText('tracker','file_upload') ?>:</strong><br />
 		<input type="file" name="input_file[]" size="30" /><br />

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/admin/ind.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/admin/ind.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/admin/ind.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -93,7 +93,7 @@
 		for ($j = 0; $j < count($at_arr); $j++) {
 			echo '
 			<tr '. $HTML->boxGetAltRowStyle($j) . '>
-				<td><a href="/tracker/admin/?atid='. $at_arr[$j]->getID() . '&group_id='.$group_id.'">' .
+				<td><a href="'.$GLOBALS['sys_urlprefix'].'/tracker/admin/?atid='. $at_arr[$j]->getID() . '&group_id='.$group_id.'">' .
 					html_image("ic/tracker20w.png","20","20",array("border"=>"0")) . '  '.
 					$at_arr[$j]->getName() .'</a>
 				</td>

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/admin/index.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/admin/index.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/admin/index.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -6,6 +6,7 @@
 //
 // $Id$
 
+require_once('../../env.inc.php');
 require_once('pre.php');
 require_once('common/tracker/Artifact.class');
 require_once('common/tracker/ArtifactFile.class');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/browse.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/browse.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/browse.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -218,11 +218,11 @@
 	echo 
 		html_build_select_box($res,'query_id',$af->getDefaultQuery(),false).'<br />
 		<input type="submit" name="run" value="'.$Language->getText('tracker','run_query').'"></input>
-		<strong><a href="javascript:admin_window(\'/tracker/?func=query&group_id='.$group_id.'&atid='. $ath->getID().'\')">'.
+		<strong><a href="javascript:admin_window('.$GLOBALS['sys_urlprefix'].'\'/tracker/?func=query&group_id='.$group_id.'&atid='. $ath->getID().'\')">'.
 		$Language->getText('tracker','build_query').'</a></strong>';
 	} else {
 		echo '<strong>
-		<a href="javascript:admin_window(\'/tracker/?func=query&group_id='.$group_id.'&atid='. $ath->getID().'\')">'.$Language->getText('tracker','build_query').'</a></strong>';
+		<a href="javascript:admin_window('.$GLOBALS['sys_urlprefix'].'\'/tracker/?func=query&group_id='.$group_id.'&atid='. $ath->getID().'\')">'.$Language->getText('tracker','build_query').'</a></strong>';
 	}
 	echo '
 		</form>
@@ -240,7 +240,7 @@
 
 	echo '
 	<tr>
-		<td align="right">'.$Language->getText('tracker_browse','sort_by').': <a href="javascript:help_window(\'/help/tracker.php?helpname=sort_by\')"><strong>(?)</strong></a></span></td>'.
+		<td align="right">'.$Language->getText('tracker_browse','sort_by').': <a href="javascript:help_window('.$GLOBALS['sys_urlprefix'].'\'/help/tracker.php?helpname=sort_by\')"><strong>(?)</strong></a></span></td>'.
 		'<td>'. 
 		html_build_select_box_from_arrays($order_arr,$order_name_arr,'_sort_col',$_sort_col,false) .
 		html_build_select_box_from_arrays($sort_arr,$sort_name_arr,'_sort_ord',$_sort_ord,false) .

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/detail.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/detail.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/detail.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -33,12 +33,12 @@
 					echo '
 					<a href="index.php?group_id='.$group_id.'&artifact_id='.$ah->getID().'&atid='.$ath->getID().'&func=monitor"><strong>'.
 						html_image('ic/'.$img.'','20','20',array()).' '.$Language->getText('tracker_utils',$key).'</strong></a>';
-					?> <a href="javascript:help_window('/help/tracker.php?helpname=monitor')"><strong>(?)</strong></a>
+					?> <a href="javascript:help_window('<?php echo $GLOBALS['sys_urlprefix']; ?>/help/tracker.php?helpname=monitor')"><strong>(?)</strong></a>
 
 				<?php /* } else { ?>
 
 				<span class="error">
-				<?php echo $Language->getText('tracker','please_login',array('<a href="/account/login.php?return_to='.urlencode($REQUEST_URI).'">','</a>')) ?></span>
+				<?php echo $Language->getText('tracker','please_login',array('<a href="'.$GLOBALS['sys_urlprefix'].'/account/login.php?return_to='.urlencode($REQUEST_URI).'">','</a>')) ?></span>
 				<?php if ($ath->allowsAnon()) { ?>
 				<?php echo $Language->getText('tracker','insert_email') ?>
 				<br />
@@ -71,7 +71,7 @@
 			/*if($ah->getSubmittedBy() != 100) {
 				$submittedUnixName = $ah->getSubmittedUnixName();
 				?>
-				(<tt><a href="/users/<?php echo $submittedUnixName; ?>"><?php echo $submittedUnixName; ?></a></tt>)
+				(<tt><a href="<?php echo $GLOBALS['sys_urlprefix']; ?>/users/<?php echo $submittedUnixName; ?>"><?php echo $submittedUnixName; ?></a></tt>)
 			<?php }*/ ?>
 			</td>
 			<td><strong><?php echo $Language->getText('tracker','assigned_to') ?>:</strong><br />
@@ -140,7 +140,7 @@
 				$enddate   = date($sys_datefmt, $taskinfo['end_date']);
 				echo '<tr '. $GLOBALS['HTML']->boxGetAltRowStyle($i) .'>
 					<td>'.$taskid.'</td>
-						<td><a href="/pm/task.php?func=detailtask&project_task_id='.$taskid.
+						<td><a href="'.$GLOBALS['sys_urlprefix'].'/pm/task.php?func=detailtask&project_task_id='.$taskid.
 						'&group_id='.$groupid.'&group_project_id='.$projectid.'">'.$summary.'</a></td>
 						<td>'.$startdate.'</td>
 						<td>'.$enddate.'</td>
@@ -185,7 +185,7 @@
 		for ($i=0; $i<$count; $i++) {
 			echo '<tr '. $GLOBALS['HTML']->boxGetAltRowStyle($i) .'>
 			<td>'. htmlspecialchars($file_list[$i]->getName()) .'</td>
-			<td><a href="/tracker/download.php/'.$group_id.'/'. $ath->getID().'/'. $ah->getID() .'/'.
+			<td><a href="'.$GLOBALS['sys_urlprefix'].'/tracker/download.php/'.$group_id.'/'. $ath->getID().'/'. $ah->getID() .'/'.
 				$file_list[$i]->getID().'/'. $file_list[$i]->getName() .'">'.$Language->getText('tracker_detail','download').'</a></td>
 			</tr>';
 		}

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/download.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/download.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/download.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -13,6 +13,7 @@
 
 $no_gz_buffer=true;
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('common/tracker/Artifact.class');
 require_once('common/tracker/ArtifactFile.class');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/include/ArtifactHtml.class
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/include/ArtifactHtml.class	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/include/ArtifactHtml.class	2011-02-24 17:31:31 UTC (rev 11977)
@@ -65,7 +65,7 @@
 				if(db_result($result,$i,'user_id') == 100) {
 					echo db_result($result,$i,'realname');
 				} else {
-					echo '<a href="/users/'.db_result($result,$i,'user_name').'/">'.db_result($result,$i,'realname').'</a>';
+					echo '<a href="'.$GLOBALS['sys_urlprefix'].'/users/'.db_result($result,$i,'user_name').'/">'.db_result($result,$i,'realname').'</a>';
 				}
 				echo "\n\n". util_line_wrap ( db_result($result, $i, 'body'),65,"\n"). '</pre></td></tr>';
 			}

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/ind.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/ind.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/ind.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -22,7 +22,7 @@
 
 if (!$at_arr || count($at_arr) < 1) {
 	echo "<h1>".$Language->getText('tracker','no_trackers')."</h1>";
-	echo "<p><strong>".$Language->getText('tracker','no_trackers_text',array('<a href="/tracker/admin/?group_id='.$group_id.'">','</a>'))."</strong>";
+	echo "<p><strong>".$Language->getText('tracker','no_trackers_text',array('<a href="'.$GLOBALS['sys_urlprefix'].'/tracker/admin/?group_id='.$group_id.'">','</a>'))."</strong>";
 	} else {
 
 	echo '<p>'.$Language->getText('tracker', 'choose').'<p>';
@@ -41,7 +41,7 @@
 		} else {
 		echo '
 		<tr '. $HTML->boxGetAltRowStyle($j) . '>
-			<td><a href="/tracker/?atid='.$at_arr[$j]->getID().'&group_id='.$group_id.'&func=browse">'.
+			<td><a href="'.$GLOBALS['sys_urlprefix'].'/tracker/?atid='.$at_arr[$j]->getID().'&group_id='.$group_id.'&func=browse">'.
 				html_image("ic/tracker20w.png","20","20",array("border"=>"0")).'  '.
 				$at_arr[$j]->getName() .'</a>
 			</td>

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/index.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/index.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/index.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -10,6 +10,7 @@
  */
 
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('note.php');
 require_once('common/tracker/Artifact.class');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/mod-limited.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/mod-limited.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/mod-limited.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -31,7 +31,7 @@
 				echo '
 				<a href="index.php?group_id='.$group_id.'&artifact_id='.$ah->getID().'&atid='.$ath->getID().'&func=monitor"><strong>'.
 					html_image('ic/'.$img.'','20','20',array()).' '.$Language->getText('tracker_utils',$key).'</strong></a>';
-				?> <a href="javascript:help_window('/help/tracker.php?helpname=monitor')"><strong>(?)</strong></a>
+				?> <a href="javascript:help_window('<?php echo $GLOBALS['sys_urlprefix']; ?>/help/tracker.php?helpname=monitor')"><strong>(?)</strong></a>
 			</td>
 			<td><?php
 				if ($group->usesPM()) {
@@ -61,7 +61,7 @@
 			if($ah->getSubmittedBy() != 100) {
 				$submittedUnixName = $ah->getSubmittedUnixName();
 				?>
-				(<tt><a href="/users/<?php echo $submittedUnixName; ?>"><?php echo $submittedUnixName; ?></a></tt>)
+				(<tt><a href="<?php echo $GLOBALS['sys_urlprefix']; ?>/users/<?php echo $submittedUnixName; ?>"><?php echo $submittedUnixName; ?></a></tt>)
 			<?php } ?>
 		</td>
 		<td><strong><?php echo $Language->getText('tracker_mod','date_submitted') ?>:</strong><br />
@@ -82,10 +82,10 @@
     ?>
 
 	<tr>
-		<td><strong><?php echo $Language->getText('tracker','assigned_to')?>: <a href="javascript:help_window('/help/tracker.php?helpname=assignee')"><strong>(?)</strong></a></strong><br />
+		<td><strong><?php echo $Language->getText('tracker','assigned_to')?>: <a href="javascript:help_window('<?php echo $GLOBALS['sys_urlprefix']; ?>/help/tracker.php?helpname=assignee')"><strong>(?)</strong></a></strong><br />
             <?php echo $ah->getAssignedRealName(); ?> (<?php echo $ah->getAssignedUnixName(); ?>)</td>
 		<td>
-		<strong><?php echo $Language->getText('tracker','priority') ?>: <a href="javascript:help_window('/help/tracker.php?helpname=priority')"><strong>(?)</strong></a></strong><br />
+		<strong><?php echo $Language->getText('tracker','priority') ?>: <a href="javascript:help_window('<?php echo $GLOBALS['sys_urlprefix']; ?>/help/tracker.php?helpname=priority')"><strong>(?)</strong></a></strong><br />
 		<?php
 		/*
 			Priority of this request
@@ -98,7 +98,7 @@
 	<tr>
 		<td>
 		<?php if (!$ath->usesCustomStatuses()) { ?>
-		<strong><?php echo $Language->getText('tracker','status') ?>: <a href="javascript:help_window('/help/tracker.php?helpname=status')"><strong>(?)</strong></a></strong><br />
+		<strong><?php echo $Language->getText('tracker','status') ?>: <a href="javascript:help_window('<?php echo $GLOBALS['sys_urlprefix']; ?>/help/tracker.php?helpname=status')"><strong>(?)</strong></a></strong><br />
 		<?php
 
 		echo $ath->statusBox ('status_id', $ah->getStatusID() );
@@ -110,7 +110,7 @@
 	</tr>
 
 	<tr>
-		<td colspan="2"><strong><?php echo $Language->getText('tracker','summary')?>: <a href="javascript:help_window('/help/tracker.php?helpname=summary')"><strong>(?)</strong></a></strong><br />
+		<td colspan="2"><strong><?php echo $Language->getText('tracker','summary')?>: <a href="javascript:help_window('<?php echo $GLOBALS['sys_urlprefix']; ?>/help/tracker.php?helpname=summary')"><strong>(?)</strong></a></strong><br />
 			<?php echo $ah->getSummary(); ?>
 		</td>
 	</tr>
@@ -125,7 +125,7 @@
 <div class="tabbertab" title="<?php echo $Language->getText('trackertab','followups');?>">
 <table border="0" width="80%">
 	<tr><td colspan="2">
-		<br /><strong><?php echo $Language->getText('tracker_mod','attach_comment') ?>: <?php echo notepad_button('document.forms[1].details') ?> <a href="javascript:help_window('/help/tracker.php?helpname=comment')"><strong>(?)</strong></a></strong><br />
+		<br /><strong><?php echo $Language->getText('tracker_mod','attach_comment') ?>: <?php echo notepad_button('document.forms[1].details') ?> <a href="javascript:help_window('<?php echo $GLOBALS['sys_urlprefix']; ?>/help/tracker.php?helpname=comment')"><strong>(?)</strong></a></strong><br />
 		<textarea name="details" rows="7" cols="60"></textarea></p>
 		<p>
 		<h3><?php echo $Language->getText('tracker','followups') ?>:</h3>
@@ -167,7 +167,7 @@
 				<td><input type="CHECKBOX" name="delete_file[]" value="'. $file_list[$i]->getID() .'">'.$Language->getText('tracker_mod','delete').' </td>
 				<td>'. htmlspecialchars($file_list[$i]->getName()) .'</td>
 				<td>'.  htmlspecialchars($file_list[$i]->getDescription()) .'</td>
-				<td><a href="/tracker/download.php/'.$group_id.'/'. $ath->getID().'/'. $ah->getID() .'/'.$file_list[$i]->getID().'/'.$file_list[$i]->getName() .'">'.$Language->getText('tracker_mod','download').'</a></td>
+				<td><a href="'.$GLOBALS['sys_urlprefix'].'/tracker/download.php/'.$group_id.'/'. $ath->getID().'/'. $ah->getID() .'/'.$file_list[$i]->getID().'/'.$file_list[$i]->getName() .'">'.$Language->getText('tracker_mod','download').'</a></td>
 				</tr>';
 			}
 

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/mod.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/mod.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/mod.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -66,7 +66,7 @@
 			if($ah->getSubmittedBy() != 100) {
 				$submittedUnixName = $ah->getSubmittedUnixName();
 				?>
-				(<tt><a href="/users/<?php echo $submittedUnixName; ?>"><?php echo $submittedUnixName; ?></a></tt>)
+				(<tt><a href="<?php echo $GLOBALS['sys_urlprefix']; ?>/users/<?php echo $submittedUnixName; ?>"><?php echo $submittedUnixName; ?></a></tt>)
 			<?php } ?>
 		</td>
 		<td><strong><?php echo $Language->getText('tracker_mod','date_submitted') ?>:</strong><br />
@@ -83,7 +83,7 @@
 	</tr>
 
 	<tr>
-		<td><strong><?php echo $Language->getText('tracker_mod','data_type') ?>: <a href="javascript:help_window('/help/tracker.php?helpname=data_type')"><strong>(?)</strong></a></strong><br />
+		<td><strong><?php echo $Language->getText('tracker_mod','data_type') ?>: <a href="javascript:help_window('<?php echo $GLOBALS['sys_urlprefix']; ?>/help/tracker.php?helpname=data_type')"><strong>(?)</strong></a></strong><br />
 		<?php
 
 //
@@ -117,13 +117,13 @@
 	?>
 
 	<tr>
-		<td><strong><?php echo $Language->getText('tracker','assigned_to')?>: <a href="javascript:help_window('/help/tracker.php?helpname=assignee')"><strong>(?)</strong></a></strong><br />
+		<td><strong><?php echo $Language->getText('tracker','assigned_to')?>: <a href="javascript:help_window('<?php echo $GLOBALS['sys_urlprefix']; ?>/help/tracker.php?helpname=assignee')"><strong>(?)</strong></a></strong><br />
 		<?php
 		echo $ath->technicianBox('assigned_to', $ah->getAssignedTo() );
-		echo ' <a href="/tracker/admin/?group_id='.$group_id.'&atid='. $ath->getID() .'&update_users=1">('.$Language->getText('tracker','admin').')</a>';
+		echo ' <a href="'.$GLOBALS['sys_urlprefix'].'/tracker/admin/?group_id='.$group_id.'&atid='. $ath->getID() .'&update_users=1">('.$Language->getText('tracker','admin').')</a>';
 		?>
 		</td><td>
-		<strong><?php echo $Language->getText('tracker','priority') ?>: <a href="javascript:help_window('/help/tracker.php?helpname=priority')"><strong>(?)</strong></a></strong><br />
+		<strong><?php echo $Language->getText('tracker','priority') ?>: <a href="javascript:help_window('<?php echo $GLOBALS['sys_urlprefix']; ?>/help/tracker.php?helpname=priority')"><strong>(?)</strong></a></strong><br />
 		<?php
 		/*
 			Priority of this request
@@ -136,7 +136,7 @@
 	<tr>
 		<td>
 		<?php if (!$ath->usesCustomStatuses()) { ?>
-		<strong><?php echo $Language->getText('tracker','status') ?>: <a href="javascript:help_window('/help/tracker.php?helpname=status')"><strong>(?)</strong></a></strong><br />
+		<strong><?php echo $Language->getText('tracker','status') ?>: <a href="javascript:help_window('<?php echo $GLOBALS['sys_urlprefix']; ?>/help/tracker.php?helpname=status')"><strong>(?)</strong></a></strong><br />
 		<?php
 
 		echo $ath->statusBox ('status_id', $ah->getStatusID() );
@@ -148,7 +148,7 @@
 	</tr>
 
 	<tr>
-		<td><strong><?php echo $Language->getText('tracker','summary')?>: <a href="javascript:help_window('/help/tracker.php?helpname=summary')"><strong>(?)</strong></a></strong><br />
+		<td><strong><?php echo $Language->getText('tracker','summary')?>: <a href="javascript:help_window('<?php echo $GLOBALS['sys_urlprefix']; ?>/help/tracker.php?helpname=summary')"><strong>(?)</strong></a></strong><br />
 		<input type="text" name="summary" size="70" value="<?php
 			echo $ah->getSummary(); 
 			?>" maxlength="255" />
@@ -167,13 +167,13 @@
 <div class="tabbertab" title="<?php echo $Language->getText('trackertab','followups'); ?>">
 <table border="0" width="80%">
 	<tr><td colspan="2">
-		<br /><strong><?php echo $Language->getText('tracker_mod','canned_response') ?>: <a href="javascript:help_window('/help/tracker.php?helpname=canned_response')"><strong>(?)</strong></a></strong><br />
+		<br /><strong><?php echo $Language->getText('tracker_mod','canned_response') ?>: <a href="javascript:help_window('<?php echo $GLOBALS['sys_urlprefix']; ?>/help/tracker.php?helpname=canned_response')"><strong>(?)</strong></a></strong><br />
 		<?php
 		echo $ath->cannedResponseBox('canned_response');
-		echo ' <a href="/tracker/admin/?group_id='.$group_id.'&atid='. $ath->getID() .'&add_canned=1">('.$Language->getText('tracker','admin').')</a>';
+		echo ' <a href="'.$GLOBALS['sys_urlprefix'].'/tracker/admin/?group_id='.$group_id.'&atid='. $ath->getID() .'&add_canned=1">('.$Language->getText('tracker','admin').')</a>';
 		?>
 		<p>
-		<strong><?php echo $Language->getText('tracker_mod','attach_comment') ?>:<?php echo notepad_button('document.forms[1].details') ?><a href="javascript:help_window('/help/tracker.php?helpname=comment')"><strong>(?)</strong></a></strong><br />
+		<strong><?php echo $Language->getText('tracker_mod','attach_comment') ?>:<?php echo notepad_button('document.forms[1].details') ?><a href="javascript:help_window('<?php echo $GLOBALS['sys_urlprefix']; ?>/help/tracker.php?helpname=comment')"><strong>(?)</strong></a></strong><br />
 		<textarea name="details" rows="7" cols="60"></textarea></p>
 		<h3><?php echo $Language->getText('tracker','followups') ?>:</h3>
 		<?php
@@ -210,7 +210,7 @@
 				$enddate   = date($sys_datefmt, $taskinfo['end_date']);
 				echo '<tr '. $GLOBALS['HTML']->boxGetAltRowStyle($i) .'>
 					<td>'.$taskid.'</td>
-						<td><a href="/pm/task.php?func=detailtask&project_task_id='.$taskid.
+						<td><a href="'.$GLOBALS['sys_urlprefix'].'/pm/task.php?func=detailtask&project_task_id='.$taskid.
 						'&group_id='.$groupid.'&group_project_id='.$projectid.'">'.$summary.'</a></td>
 						<td>'.$startdate.'</td>
 						<td>'.$enddate.'</td>
@@ -255,7 +255,7 @@
 				<tr '. $GLOBALS['HTML']->boxGetAltRowStyle($i) .'>
 				<td><input type="CHECKBOX" name="delete_file[]" value="'. $file_list[$i]->getID() .'">'.$Language->getText('tracker_mod','delete').' </td>'.
 				'<td>'. htmlspecialchars($file_list[$i]->getName()) .'</td>
-				<td><a href="/tracker/download.php/'.$group_id.'/'. $ath->getID().'/'. $ah->getID() .'/'.$file_list[$i]->getID().'/'.$file_list[$i]->getName() .'">'.$Language->getText('tracker_mod','download').'</a></td>
+				<td><a href="'.$GLOBALS['sys_urlprefix'].'/tracker/download.php/'.$group_id.'/'. $ath->getID().'/'. $ah->getID() .'/'.$file_list[$i]->getID().'/'.$file_list[$i]->getName() .'">'.$Language->getText('tracker_mod','download').'</a></td>
 				</tr>';
 			}
 

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/query.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/query.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/query.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -216,13 +216,13 @@
 ?><html>
 <head>
 <title>Query</title>
-<link rel="stylesheet" type="text/css" href="/themes/css/gforge-compat.css" />
+<link rel="stylesheet" type="text/css" href="<?php echo $GLOBALS['sys_urlprefix']; ?>/themes/css/gforge-compat.css" />
 <?php
 
 $theme_cssfile=$GLOBALS['sys_themeroot'].$GLOBALS['sys_theme'].'/css/theme.css';
 if (file_exists($theme_cssfile)){
 echo '
-<link rel="stylesheet" type="text/css" href="/themes/'.$GLOBALS['sys_theme'].'/css/theme.css" />
+<link rel="stylesheet" type="text/css" href="'.$GLOBALS['sys_urlprefix'].'/themes/'.$GLOBALS['sys_theme'].'/css/theme.css" />
 ';
 }
 echo '

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/reporting/index.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/reporting/index.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/reporting/index.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -24,6 +24,7 @@
  * along with GForge; if not, write to the Free Software
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
+require_once('../../env.inc.php');
 require_once('pre.php');
 require_once('common/reporting/report_utils.php');
 require_once('common/reporting/Report.class');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/reporting/trackeract_graph.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/reporting/trackeract_graph.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/reporting/trackeract_graph.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -25,6 +25,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../../env.inc.php');
 require_once('pre.php');
 require_once($sys_path_to_jpgraph.'/jpgraph.php');
 require_once($sys_path_to_jpgraph.'/jpgraph_line.php');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/reporting/trackerpie_graph.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/reporting/trackerpie_graph.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/reporting/trackerpie_graph.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -25,6 +25,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('../../env.inc.php');
 require_once('pre.php');
 require_once($sys_path_to_jpgraph.'/jpgraph.php');
 require_once($sys_path_to_jpgraph.'/jpgraph_pie.php');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/taskmgr.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/taskmgr.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/taskmgr.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -22,6 +22,7 @@
 //$related_artifact_id
 */
 
+require_once('../env.inc.php');
 require_once('pre.php');
 require_once('common/pm/ProjectGroupFactory.class');
 require_once('common/pm/ProjectTaskFactory.class');

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/tracker.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/tracker.php	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/tracker.php	2011-02-24 17:31:31 UTC (rev 11977)
@@ -461,7 +461,7 @@
 	}
 	case 'download' : {
 		$aid = getStringFromRequest('aid');
-		Header("Redirect: /tracker/download.php?group_id=$group_id&atid=$atid&aid=$aid&file_id=$file_id");
+		Header("Redirect: ".$GLOBALS['sys_urlprefix']."/tracker/download.php?group_id=$group_id&atid=$atid&aid=$aid&file_id=$file_id");
 		break;
 	}
 	case 'detail' : {

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/users
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/users	2011-02-24 17:31:22 UTC (rev 11976)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/users	2011-02-24 17:31:31 UTC (rev 11977)
@@ -25,6 +25,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+require_once('env.inc.php');
 require_once('pre.php');    
 require_once('common/include/User.class');    
 



More information about the evolvis-commits mailing list