* Replaced custom SQL query in Comment.remove() with code using new Membership.comments collection
* Removed obsolete Sql.COMMENTS statement
* Added getConfirmText() method to Comment, File, Image, Layout, Membership, Poll, Skin and Story prototypes – which is used in HopObject.delete_action() for more convenient feedback about what is going to be deleted (fixes issue 37 for now)
* Fully enabled translation in global breadcrumb_macro()
* Removed obsolete Layout.getTitle() method
* Disabled translation in HopObject.toString() methods
* Fixed and added some i18n messages to ease translation
* Moved SITENOTIFICATIONPERIOD constant, health property as well as getFormOptions(), commitEntries(), commitRequests(), purgeReferrers(), invokeCallbacks(), updateHealth(), exportImport(), updateDomains(), queue() and dequeue() methods from Root to Admin prototype
* Renamed Admin.purgeDatabase() method to Admin.purgeSites() and added code for automatic blocking/deletion of restricted/abandoned sites
* Renamed Root.getScopes() method to Admin.getNotificationScopes()
* Renamed User.getScopes() method to Admin.getCreationScopes()
* Added Admin.getPhaseOutModes() method
* Removed obsolete code
* Fixed and renamed Admin.privateSites to Admin.restrictedSites collection
* Finally added simple and reasonable quota implementation
* Fixed gettext_macro() and ngettext_macro() with check for necessary arguments
* Removed sender argument from global sendMail() method – instead, the root.replyTo property is used
* Fixed some i18n messages
* Moved code setting res.handlers.layout before permission check in HopObject.onRequest() to prevent broken layout in error screen
* Completely rewrote HopObject.notify() method (hopefully fixing issue 49)
* Check free disk space before invoking create_action() of Files and Images prototypes
* Modified output of Membership.toString() method
* Fixed some linebreaks in Membership.skin
* Added option to set session.data.error for additonal information in $Root#error skin
* Slightly modified output of $Root#health skin
* Replaced Root.phaseOutInactiveSites and Root.phaseOutPrivateSites with Root.phaseOutMode
* Removed qualifyingDate property from Root
* Renamed Root.qualifyingPeriod property to Root.probationPeriod
* Removed autoCleanupEnabled and autoCleanupStartTime properties from Root
* Added replyTo property to Root
* Rewrote Root.getCreationPermission() method
* Added #notify_blocking and #notify_deletion skins to $Site.skin
* Replaced Site.notifiedOfBlocking and Site.notifiedOfDeletion properties with Site.notified
* Added Site.diskspace_macro() returning the free disk space in MB
* Fixed bug in Site.main_action() causing erroneous display of deletion warning
* Refactored and unified remove() methods and calls for greater flexibility as well as reliability
* Added option to remove all comments by a user to Comment.remove() method and $Comment#delete skin
* Added global #listItemFlag skin as well as listItemFlag_macro() for rendering vertically written text of items in a list view (e.g. closed)
* Fixed bug in gettext_macro() and ngettext_macro() causing incorrect whitespace
* Refactored timezone and locale handling
* Modified automatic translation of untitled links in HopObject.link_macro()
* Added honeypot to login and registration forms
* Fixed client-side JavaScript to be evaluated when login or registration form is submitted, not only when the submit button is clicked
* Removed redundant filter expression from DB mapping of Membership.images collection
* Added Membership.content collection
* Changed terminology from open to running polls, thus renaming Polls.open_action() method and Polls.open collection
* Moved a lot of CSS used in root or administration sections from Site#stylesheet to $Root#stylesheet skin
* Added Root.updateDomains() method (most likely already obsolete)
* Removed Root.processHref() method (only necessary for very advanced setup) and obsolete comments
* Fixed Root.xgettext() method to correctly read UTF-8 encoded data
* Fixed Site.deleted_macro() to return the date object for late formatting
* Refactored Site.processHref() for more convenient custom domain name mapping
* Renamed Skins.advanced_action() method to Skins.all_action()
* Removed redundant filter from Stories.comments collection
* Removed unnecessary filter from Story.comments collection
* Added kind of callback skin to HopObject#delete skin to include prototype-specific options in confirmation dialog
* Added content collection to Membership.properties
* Added check for req.postParams.mode in Membership.remove() – if it is set to "exhaustive" all contributions of the member to the site are going to be erased
* Added second argument to HopObject.remove() method; if set to true, any object will be removed without any checks for permissions or the like
* Enhanced notfound and error screens
* Removed obsolete Image.site property
* Added missing LogEntry.remove() method
* Added Site.deleted property
* Fixed missing calls for remove() methods of some collections in Site.remove()
* Added Root#stylesheet skin for future CSS classes necessary for GUI elements
* Added missing Site.entries collection
* Removed troublesome if condition in Skin.remove()
* Generally deny access to Skin.main_action
* Added missing Skin.getFormValue() method
* Added check in Skin.update() if the Site#page skin contains the <% response.body %> macro
* Added Skins.onRequest() method checking if we are in-between two Skins objects
* Improved import/export feature to run asynchronously amongst other things
* Remvoved exclusion of root site in Root's default collection (fingers crossed that this has no negative side effects)
* Fixed name of list item skin in Poll prototype
* Fixed fallback to _id property in HopObject.macro_macro() method
* Fixed bug in Membership.getPermission() method causing a subscriber getting the "Owner is not allowed to unsubscribe" error message when trying to unsubscribe from a site
* Removed relics of tests with ColourMod jQuery plugin in Site#page skin
* Added Membership.toString() method for human-readable output
* Assigned Membership.valueOf() method original toString() method
* Fixed output of site list in userland
* Added mountpoint for Api prototype in Root
* Added trimming for Story text and title input
* Modified Skins.getSkin() method to make use of Skin.getByName()
* Re-enabled controls in Tag#main skin
* Cleaned up and reorganized code
* Added some remarks to explain the most illicit code
* Removed a lot of obsolete code
* Removed obsolete skin files (ie. content moved to the protected skin file)
* Moved contents of Messages.skins to their protected siblings
* Prefixed notification skins (used in e-mails) with "notify_"
* Fixed and simplified a whole bunch of issues in compatibility layer
* Disabled tagging of layout images
* Disabled "days" page mode (ie. switched to counting stories only)
* Moved Site.href skin to Site#href (subskin)
* Fixed minor issues
* Edited text and messages
* Disabled file tags for now
* Renamed global renderPageNavigation() method to renderPager()
* Added support for rendering the list of updated sites in global list_macro()
* Fixed return point when cancelling a file edit action
* Fixed nasty bug in deletion routine
* Implemented sorting of values in Layout.values_macro()
* Disabled layout title, description, origin and sharing for now
* Renamed list_action() to sites_action() in Root prototype
* Enabled filter of root site in default collection
* Moved Root's list.skin as subskin in Root.skin
* Added experimental Root.search_xml_action()
* Renamed "unpublish" link to "close" in Story list
* Reduced display of backlinks to last 24 hours
* Removed obsolete skin files
* Slightly elaborated on what happens when a site or a user is blocked
* Fixed some permission issues
* Removed some more obsolete skin files
* Re-introduced Root.search_action() method with minimal output
* Switched search method from GET to POST
* Added User.logout() method
* Fixed User.require() method (check for TRUSTED constant was missing)
* Added encoding="form" parameter to most of the macros using the request handler
* Renamed commentsMode to commentMode (comments_mode to comment_mode in DB)
* Reactivated notifications in a simplified manner
* Throw an error in global sendMail() method if arguments are not sufficient
* Added HopObject.notify() method
* Added HopObject.kind_macro() method (provides the constructor's name in lowercase)
* Added Messages.skin containing subskins suited for e-mail output
* Removed obsolete skin files
* Added reset_action() method for resetting a user's password to Members prototype
* Added require() method to Membership prototype; wrapped static require() method around it
* Added Membership.notify() method which does all the member-related notification stuff
* Send notification on membership removal
* Fixed contact form in Membership prototype
* Dropped e-mail property from Site prototype (users can be contacted via Membership.contact_action(), Root prototype has extra e-mail property)
* Added missing getPermission() method to User prototype, always requiring a privileged user
* Fixed _children.filter in Archive
* Added missing permission checks
* Modified global defineConstants() method to return the getter function instead of automatically defining it with given argument
* Added HopObject.macro_macro() method to display userland macro code
* Removed colorpicker (will be replaced by third-party library)
* Removed obsolete global constants and functions
* Overhauled and tested global userland macros like story_macro(), image_macro() etc.
* Implemented global list_macro() to replace any special listFoobar_macro() methods
* Moved global autoLogin() method into User prototype
* Overhauled global randomize_macro()
* Renamed global evalURL() method to validateUrl() as well as evalEmail() to validateEmail()
* Re-added accidentally removed subskins to Members.skin
* Fixed some skin names which were changed recently
* Remove delete_action() from Membership
* Fixed foreign key of images collection in Membership
* Removed global username_macro() and replaced it with appropriate membership macros
* Moved contents of systemscripts.skin into javascript.skin in Root prototype
* Removed main_css_action(), main_js_action() and sitecounter_macro() methods from Root
* Added accessname to sites collection in Root
* Upgraded jQuery to version 1.2.1
* Replaced call for global history_macro() with corresponding list_macro() call
* Renamed "public" collection of Stories prototype to "featured"
* Moved a lot of styles from Root's style.skin to the one in Site
* Added comments collection to Site
* Moved embed.skin as subskin #embed into Site.skin
* Fixed some minor issues in Story.js (removed check for creator before setting the story's mode)
* Defined cookie names as constants of User which can be overriden via app.properties userCookie and hashCookie
* Moved a lot of code into compatibility module
* Changed order of filters in collection handlers (member items go first, all items last)
* Fixed global file_macro and image_macro methods
* Reactivated Images.Default
* Added Layout.value_macro to allow per request definitions of variables for the CSS stylesheet (still experimental)
* Finally removed PropertyMgr (replaced by Metadata)
* Renamed a bunch of collections, mountpoints and variables
* Reduced commentsMode options to "enabled" and "disabled" in Site prototype
* Renamed "shared" mode to "restricted" in Site prototype
* Moved a lot of stuff into the compatibility module
* Re-enabled calendar by switching to jala.Date.Calendar
* Removed obsolete calendar skins
* Re-enabled story archive by replacing Day prototype with new Archive prototype
* Moved story collections from Site to Stories prototype
* Enabled second option by default in HopObject.checkbox_macro
* Removed debugging code from Members/login.skin and User.js
* Replaced remaining occurrences of res.handlers.context with res.handlers.site
* Moved sites back from Root.sites to Root._children collection
* Moved Site.loginstatus_macro to Membership.status_macro
* Delegated rendering of story list in main.skin to archive
* Replaced Site.renderStorylist with Site.stories_macro
* Removed redundant Site.getMembership (see User.getMembership)
* Removed (currently) obsolete indexing methods
* Fixed some minor issues lately introduced
* Renamed PollMgr to Polls
* Removed graph.skin from Choice prototype
* Improved Choice skins by replacing param with choice handlers
* Unified output of Choice totals in choice.votes_macro
* Moved creation of new choices to client-side JavaScript
* Added labels for radiobuttons
* Added HopObject.radiobutton_macro
* Cache / reset status of story when rotating
* Renamed ImageMgr to Images
* Fiddled with more elegant context switch between Layout and Site images (still a little bit messy)
* Added getUrl and getDirectory methods to File and Image
* Moved global getPoolObj to HopObject.getFromPath
* Moved global renderImage to Image.render
* Moved global DefaultImages to Images.Default
* Moved global thumbnail constants to Image
* Moved global evalImageType to Image.validate
* Streamlined image_macro (good-bye pop-ups!)
* Added HopObject.upload_macro to support file upload form element
* Added conversion and compatibility scripts for images and layouts
* Implemented first basic version of skin management using subskins
* Added remove() method to HopObject and most object prototypes which are automatically called after confirmation in HopObject.delete_action()
* Enhanced support for various form elements via HopObject macros
* Added HopObject.removeChildren() method
* Removed color and font settings in layouts (maybe just temporarily)
* Implemented generic framework for layouts and skins
* Renamed LayoutMgr to Layouts and SkinMgr to Skins
* Renamed "properties" property to "metadata" (finally)
* Added conversion and compatibility code for the changes
* Added handleMetadata method to define getters and setters for metadata properties
* Reduced and renamed value() method to map()
* Renamed most of the sys_* properties
* Fixed issue caused by setting a Metadata property to a Java value, e.g. java.net.URL instance becomes string without quotes. (Could this be a Rhino bug?)
* Finalized conversion of AV_USER table to simple naming scheme ("user")
* Added global getTitle() method which returns either site.title or root.sys_title
* Implemented universal HopObject.value() method
* Rededicated User.update() method since its previous functionality is now taken over by User.value()
* Restructured login and register functionalities in User and MemberMgr
* Replaced first occurrences of Exception with Error
* Introduced i18n via gettext in User and MemberMgr
* Removed getMessage() and Message in User and MemberMgr
* Added first possible implementation of global getPermission() method
* Modified code of global evalEmail() and evalURL() methods to work with Helma modules
* Simplified global sendMail() method by not throwing any MailException anymore and returning the status code only
* sendMail() now is using helma.Mail (so we can debug message output)
* Passwords are not stored as clear text in the database any longer
* Passwords are sent MD5 encoded across the network
* Modified code structure to serve as template for all other prototypes (new value/update methods, database table/column naming etc.)
* Included jQuery JavaScript library from within page.skin