This commit was manufactured by cvs2svn to create tag 'EPFW_TPLLIB_R1_5'.
diff --git a/resources/coverage.zip b/resources/coverage.zip
deleted file mode 100644
index 644d243..0000000
--- a/resources/coverage.zip
+++ /dev/null
Binary files differ
diff --git a/source/.project b/source/.project
deleted file mode 100644
index 04b12eb..0000000
--- a/source/.project
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>EPF Wiki Sources</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-	</buildSpec>
-	<natures>
-	</natures>
-</projectDescription>
diff --git a/source/CHANGELOG b/source/CHANGELOG
deleted file mode 100644
index 4c170c7..0000000
--- a/source/CHANGELOG
+++ /dev/null
@@ -1,106 +0,0 @@
-* a folder test (regular expression) for baseline process creation (#Site.validate_on_create)
-* link for cadmin to a checkout, so we can reverse a test checkout
-* new layout 'site' for intro page and code in OtherController
-* Redirect_to_path deprecated in Rails 2.0.2, replaced with to redirect_to(path)
-* Removed terms of use, privacy policy from epf.eclipse.org
-* Removed migration code used for epfwiki.net to epf.eclips.org migration
-* Removed PinEdit support
-* Removed backup stuff
-* Removed ability to download_logfiles
-* Removed code to remove white/empty lines on save in the HTML Editor, this was a workaround for PinEdit
-* Removed CSDIFF dependencies (note: not all changes for CSDIFF replacement with XHTMLDiff have been made)
-* LogicaCMG -> Logica
-* Created TinyMCE plugin for EPF Wiki
-* Refactored HTML editor form parameter (removed save parameter created different actions: save, checkin, undocheckout, preview)
-* Checkin dialog nows redirects to 'View' not 'Info'
-* Added Templates plugin
-* Now using using uma.type, uma.presentationName, not content type, title element
-* Removed footer (site help and feedback) from layouts/wiki.rhtml
-* Discussion
-* Add me to this list
-* Brief description for a template
-* Removed 'Recent Uploads' from right bar in site.rhtml and removed app/views/uploads/_recent.rhtml
-* Replaced 'Help Area' with 'Toolbox'
-* Removed stuff about EPF Wiki downloads
-* Removed 005_feedback.rb
-* '/' and '/other/home' redirect to 'login' when there are no users
-* Renamed column 'site_id' to 'wiki_id' in table 'versions'. Added new column 'baseline_process_id'
-* Refactored page.html and version.html
-* Removed baselines_controller.rb, baseline.rb, /app/views/baselines/*
-, /test/functional/baselines_controller_test.rb, enhancements_controller.rbs
-(NOT REMOVED FROM CVS or in CVS operation)
-* Renamed Page.find_or_new to Page.new_from_epfc
-* Welcome messages, Help Message, About Page etc can be customized by the central administrator
-* Removed treebrowser.js from wiki.rhtml
-* Most Recent on Home page displays last 15 comments, versions, uploads and/or new pages
-* Cleanup of login page. Note that the welcome message can now also be changed.
-* Users are now automatically subscribed to a page if they add a comment or version
-* Added Hall of Fame: Monthly and Overall
-* Replaced application helpers url_for_site, url_for_page with #Page.url, #WikiPage.url, #BaselineProcess.url
-* Removed ApplicationHelper.tabs and replaced with #ApplicationHelper.menulink_to. This helper uses better CSS techniques for rendering tabs
-* Removed use of 'activate' in Controller code
-* Removed Site.find_wikis, replaced with Wiki.find(:all, :conditions => ['obsolete_on is null'])
-* Created PortalController, moved about, archives, feedback, home, search, wikis to portal
-* Implemented new toolbar for EPFC pages: discussion, edit, new, history      home (right), manage (right)
-* Implemented new menu links for Management: my EPF Wiki, home ,about(admin), logout
-* link_to_site shouldn't allow a site to get 'framed' (using popup now)
-* Split Version into BaselineProcessVersion and UserVersion for a clean seperation. Also don't create copies of html files in Wiki.
-* Removed PageLocation (was not really used)
-* Implemented new menu links for Management layout: Sites, Users, My EPF Wiki, About (admin) ->  home (right), logout(right)
-* Removed auto_update.rb (used for epf.eclipse.org)
-* New method for creating new pages WikiPage.new_using_template
-* Don't use size, use count (mainly a problem in test code)
-* Removed difference analysis stuff
-* Changed tidy config to not show errors and warnings (in the console). Value was show-errors: 1 and show-warnings: 1, added quiet: yes
-* Remove the ability to checkout to another Wiki
-* Replaced the markdown stuff for VersionsController.text using only strip_tags and simple_format
-* users/show/:id made public, changed helper link_to_to user always displays a link
-* Made link_to_notification_toggle user aware + cadmin can now change notification of user. Removed link_to_notificication helper
-* Made link_to_change_report_notification_toggle user aware, same as previous
-* Removed helper link_to_user_actions
-* Added Terms of Use and Privacy Policy dmin messages
-* Creating a new page now creates a notification subscription, see WikiPage.new_using_template
-* New pages created by users are 'enhanced' now with Page.enhance_file, see WikiPage.new_using_template
-* Error when creating new page based on template: "No checkout created; new page operation should have created a checkout" fixed in WikiPage (has_one :checkout)
-* Contributors will be notified about harvested contributions when the Wiki is updated with a new baseline. So no update means users are not notified
-* Improved generating of diffs, HTML is prepared for diff and stored in a separate directory 'diffs'. This way we don't have to manipulate the HTML of a BaselineProcess. The directory can be purged at any time.
-* Replaced Python markdown functionaliy with plain Rails helpers strip_tags and simple_format, see VersionsController.text
-* Improvement: notify immediate users receive notification of new uploads, comments, changes, updates
-* Validate presence of :user, :wiki, :page in Version
-* Fixed SystemStackError bug when updating a site with unharvested versions
-* Users can open checked out pages, they get a message that the file is checked out and cannot be saved
-* Removed Version.new_basedonversion
-* Improved archives
-* Removed comments_count versions_count in 001_initial.rb
-* Disable the terms of use restriction on sign up
-* More simple change reports (+ renamed report.rhtml to summary.rhtml)
-* Changed tidy config: indent: no + sort-attributes: alpha for better diffs 
-* Creating a Comment about a new WikiPage will cause an error. This should not be allowed and we should display a user friendly message
-* Expire all pages on do_update
-* Public page for user (column is in table: users.text)
-* "Couldn't find User without an ID" when sending report
-* No link to ordinary users when using link_to_user
-* Also expire public/index.html (same as portal/home)
-* Use self.version.wiki not self.version.site
-* Added tab4 image
-* Checkin fails with "No such file or directory - app/models/page_head_snippet.txt". Should use File.expand_path in Page.get_snippets
-* Removed 'Free' from "Free software...anyone can edit"
-* Allow users to add free text to public user page
-* Cleanup of unused, unnecessary things in checkout
-* Email view files 'new_password.rhtml' and 'confirmation_link.rhtml' replaced with 'welcome.rhtml'
-* Site.templates: checked out template causes "You have a nil object when you didn't expect it. The error occurred while evaluating nil.page" when trying to create a new page
-* "undefined method `versions_in_site' for #" on update of a Wiki
-* UserController.send_report: redirect to 'account', not 'show'    
-* Enhanced Wiki.enhance_files to prevent wrapping of elements after TinyMCE modifies content (pageTitle, expandCollapseLink)
-* Undo checkout when it is a new page should also delete the page (not only version) (Checkout.undo, PagesControllerTest.test_undocheckout, PagesController.undocheckout)
-* Bug 238010 - Allow all admin user to trigger a Wiki update (SitesController)
-* Deleted resend functionality (Notifier, LoginController, LoginControllerTest)
-* Bug 238009 - Support deleting and archiving wikis and baselines (ApplicationHelper.link_to_site, sites/list.rhtml, SitesContoller.obsolete
-* Support different port numbers than 80, use request.host + (request.port == 80 ? '' : ':' + request.port.to_s) and not only request.host: LoginController, PagesController, UploadsController, other/env.rhtml, versions/show.rhtml, CommentsControllerTest, LoginControllerTest, PagesControllerTest
-* Use error FLASH_USE_POST_NOT_GET with verify method post in controllers (FeedbacksController, LoginController, SitesController, UploadsController, UsersController)
-* When creating new pages, make the filename unique when it isn't unique (WikiPage.new_using_template, WikiPage.make_rel_path_unique)
-* Moved arrow.gif (for comment div) to images (default.css, wiki.css)
-* Other workaround for rjs caching problem (changed wiki.js, generic.expire_all_pages)
-* Removed support for index.html, we now explicitly assume EPFC will use index.htm
-* Added plugin for EPF Practices Library, this will replace OpenUP
-
diff --git a/source/COPYRIGHT b/source/COPYRIGHT
deleted file mode 100644
index b94bbe8..0000000
--- a/source/COPYRIGHT
+++ /dev/null
@@ -1,11 +0,0 @@
-
-Copyright (c) 2006 Logica, 2008 IBM, and others
- 
-All rights reserved. This program and the accompanying materials
-are made available under the terms of the Eclipse Public License v1.0
-which accompanies this distribution, and is available at
-http://www.eclipse.org/legal/epl-v10.html
-
-Contributors:
-* Onno van der Straaten:: initial implementation
-* Ricardo Balduino:: additions for feed generation (practices and UMA types)
diff --git a/source/Rakefile b/source/Rakefile
deleted file mode 100644
index 9404217..0000000
--- a/source/Rakefile
+++ /dev/null
@@ -1,9 +0,0 @@
-# Add your own tasks in files placed in lib/tasks ending in .rake,
-# for example lib/tasks/switchtower.rake, and they will automatically be available to Rake.
-
-require(File.join(File.dirname(__FILE__), 'config', 'boot'))
-
-require 'rake'
-require 'rake/testtask'
-require 'rake/rdoctask'
-require 'tasks/rails'
\ No newline at end of file
diff --git a/source/app/controllers/application.rb b/source/app/controllers/application.rb
deleted file mode 100644
index a637871..0000000
--- a/source/app/controllers/application.rb
+++ /dev/null
@@ -1,87 +0,0 @@
-# Filters added to this controller will be run for all controllers in the application.
-# Likewise, all the methods added will be available for all controllers.
-#--######################################################################
-# Copyright (c) 2006 Logica
-# 
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# 
-# Onno van der Straaten:: initial implementation
-#++######################################################################
-# {Copyright (c) 2006 Logica}[link:files/COPYRIGHT.html]
-
-class ApplicationController < ActionController::Base
-  
-  #########
-  protected   
-  #########
-  
-  def log_error(exception) #:doc:
-    super(exception)
-    begin
-      # TODO don't send error email when action error causes an error 
-      Notifier.deliver_error_report(exception, clean_backtrace(exception), 
-      session.instance_variable_get("@data"), 
-      params, 
-      request.env)
-    rescue => e
-      logger.error(e)
-    end
-  end
-  
-  # all exceptions are redirected to OtherController.error
-  def rescue_action_in_public(exception) #:doc:
-    flash['error'] = exception.message
-    flash['notice'] = "An application error occurred while processing your request. This error was logged and an email was sent to notify the administrator."
-    flash['notice'] = 'We\'re sorry, but something went wrong. We\'ve been notified about this issue and we\'ll take a look at it shortly.'
-    redirect_to :controller => 'other', :action => 'error'
-  end
-  
-  # instead of an error stack we want to display a nice user friendly error message
-  def local_request? #:doc:
-    false
-  end
-  
-  # The #authenticate method is used as a <tt>before_hook</tt> in
-  # controllers that require the user to be authenticated. If the
-  # session does not contain a valid user, the method
-  # redirects to the LoginController.login.
-  #-- 
-  # TODO to have caching of pages per user group add something like :params => params.merge( :utype=> 'admin' ) 
-  #++
-  def authenticate #:doc:
-    unless session['user']
-      logger.debug('No session, redirecting to login')
-      session['return_to'] = request.request_uri
-      redirect_to :controller => 'login' 
-      return false
-    end
-  end
-  
-  def authenticate_admin #:doc:
-    logger.debug("Authenticate admin #{session['user']}, #{session['user'].inspect}")
-    if  !admin?
-      logger.debug("User not authenticated as admin")
-      flash['notice'] = 'Administrators privileges are required to access this function'
-      flash['error'] = LoginController::FLASH_UNOT_ADMIN # TODO should be flash.now?
-      Notifier::deliver_authorisation_problem(session['user'], session.instance_variable_get("@data"), params, request.env)
-      redirect_to :controller => 'other', :action => 'error'
-      return false        
-    end
-  end
-  
-  def authenticate_cadmin #:doc:
-    if  !cadmin?
-      flash['notice'] = 'You need to be the central administrator to access this function'
-      flash['error'] = LoginController::FLASH_UNOT_CADMIN
-      Notifier::deliver_authorisation_problem(session['user'], session.instance_variable_get("@data"), params, request.env)
-      redirect_to :controller => 'other', :action => 'error'
-      return false
-    end
-  end
-  
-end
diff --git a/source/app/controllers/comments_controller.rb b/source/app/controllers/comments_controller.rb
deleted file mode 100644
index 6f463a8..0000000
--- a/source/app/controllers/comments_controller.rb
+++ /dev/null
@@ -1,48 +0,0 @@
-#--######################################################################
-# Copyright (c) 2006 Logica
-# 
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# 
-# Onno van der Straaten:: initial implementation
-#++######################################################################
-# {Copyright (c) 2006 Logica}[link:files/COPYRIGHT.html]
-
-class CommentsController < ApplicationController
-  
-  layout 'management'
-  
-  before_filter :authenticate_cadmin, :only => [:update, :destroy]
-  
-  cache_sweeper :sweeper, :only => [:update, :destroy]
-  
-  # Action #edit to display the edit form
-  def  edit
-    @comment = Comment.find(params[:id])
-  end
-  
-  # Action #update to update a Comment-record. 
-  def update
-    @comment = Comment.find(params[:id])
-    if @comment.update_attributes(params[:comment])
-      flash['success'] = ::FLASH_RECORD_UPDATED
-      redirect_to @comment.request_referer
-    else
-      render :action => 'edit'
-    end
-  end
-  
-  # Action #destroy to delete a Comment-record. 
-  def destroy
-    cmt = Comment.find(params[:id])
-    wiki = cmt.site
-    cmt.destroy
-    flash['success'] = ::FLASH_RECORD_DELETED
-    redirect_to :controller => 'sites', :action => 'comments', :id => wiki.id
-    #redirect_to request.referer TODO If you use this, functional tests will fail
-  end
-end
\ No newline at end of file
diff --git a/source/app/controllers/feedbacks_controller.rb b/source/app/controllers/feedbacks_controller.rb
deleted file mode 100644
index d303e08..0000000
--- a/source/app/controllers/feedbacks_controller.rb
+++ /dev/null
@@ -1,46 +0,0 @@
-# Feedback is created in the portal by authenticated and anonymous users, 
-# see OtherController.feedback. This controller together with SitesController
-# is used to manage feedback, see SitesController.feedback
-#--######################################################################
-# Copyright (c) 2006 Logica
-# 
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# 
-# Onno van der Straaten:: initial implementation
-#++######################################################################
-# {Copyright (c) 2006 Logica}[link:files/COPYRIGHT.html]
-
-class FeedbacksController < ApplicationController
-
-  layout 'management'
-  
-  before_filter :authenticate_cadmin
-
-  verify :method => :post, :only => [:destroy, :update], :add_flash => {'error' => ::FLASH_USE_POST_NOT_GET}, :redirect_to => { :controller => 'other', :action => 'error' }  
-
-  def edit
-    @feedback = Feedback.find(params[:id])
-  end
-  
-  def update
-    @feedback = Feedback.find(params[:id])
-    if @feedback.update_attributes(params[:feedback])
-      flash[:notice] = 'Feedback was successfully updated.'
-      redirect_to @feedback.request_referer
-    else
-      render :action => 'edit'
-    end
-  end
-  
-  def destroy
-    Feedback.find(params[:id]).destroy
-    logger.info("destroy en dan #{request.referer}")
-    redirect_to request.referer
-  end
-  
-end
diff --git a/source/app/controllers/login_controller.rb b/source/app/controllers/login_controller.rb
deleted file mode 100644
index f6c4f8b..0000000
--- a/source/app/controllers/login_controller.rb
+++ /dev/null
@@ -1,233 +0,0 @@
-# This controller takes care of security.  
-#--######################################################################
-# Copyright (c) 2006 Logica
-# 
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# 
-# Onno van der Straaten:: initial implementation
-#++######################################################################
-# {Copyright (c) 2006 Logica}[link:files/COPYRIGHT.html]
-
-class LoginController < ApplicationController
-  
-  layout 'management'
-  
-  before_filter :authenticate, :except => [:index, :sign_up2, :sign_up, :login, :lost_password, :new_cadmin,
-  :confirm_account, :report_password_reset_attempt, :auto_complete_for_user_email, :resend]
-  before_filter :authenticate_admin, :only => [:resend]
-  
-  verify :method => :post, :only => [:resend],:add_flash => {'error' => ::FLASH_USE_POST_NOT_GET}, :redirect_to => { :controller => 'other', :action => 'error' }
-  
-  filter_parameter_logging :password, :password_confirmation
-  
-  FLASH_CENTRAL_ADMIN_ALREADY_CREATED = 'You can only create the central admin if this user has not been created yet!'
-  FLASH_INVALID_PW = 'Invalid combination of username password!'
-  FLASH_NO_VALID_TOKEN = 'Not a valid token!'
-  FLASH_PASSWORD_ACTIVATED  = 'New password activated!'
-  FLASH_LOST_PASSWORD_ABUSE = 'A notification was sent to the administrator reporting the abuse of your email address'
-  FLASH_CENTRAL_ADMIN_CREATED = 'Central admin user created!' 
-  FLASH_PW_CONFIRMATION_EMAIL_SENT = 'A confirmation email has been sent to your email address. Please confirm your account by clicking on the hyperlink in this email'
-  FLASH_EMAIL_NOT_FOUND = 'Email address not found!'
-  FLASH_UNOT_ADMIN = "You are not an admin user!"
-  FLASH_UNOT_CADMIN = "You are not the central administrator!"
-  
-  # Is be used to create the first user, the central admin account
-  def new_cadmin
-    if  User.count > 0
-      flash['error'] = FLASH_CENTRAL_ADMIN_ALREADY_CREATED
-      redirect_to :action => 'login'
-    else
-      if request.get?
-        @user = User.new      
-      else
-        @user = User.new_cadmin(params[:user])
-        if  @user.save
-          flash['success'] = FLASH_CENTRAL_ADMIN_CREATED
-          redirect_to :action => 'login'
-        else
-          render :action => 'new_cadmin'
-        end
-      end
-    end
-  end
-  
-  # Action #sign_up creates the account or displays the form to create the account.
-  # Passwords can be generated or supplied by the user. 
-  # If passwords are supplied by the user the account needs to be confirmed, 
-  # see #confirm_account
-  def sign_up
-    if request.get?
-      @user = User.new
-    else
-      @user = User.new_signup(params[:user])
-      if @user.save
-        flash['success'] =  FLASH_PW_CONFIRMATION_EMAIL_SENT
-        Notifier::deliver_welcome_pw_confirmationlink(@user, request.host + (request.port == 80 ? '' : ':' + request.port.to_s))
-        redirect_to :action => "login" 
-      else
-        logger.info("Failed to save user on signup #{@user.inspect}")
-        @user.email = @user.email.gsub(@user.email_extension,"") if @user.email && @user.email_extension
-        @user.password = ""
-        @user.password_confirmation = ""
-      end
-    end
-  end
-  
-  # Action #confirm_account is used to confirm a new password send by email. Without confirmation anyone could reset passwords. 
-  # The token used for confirmation is just the new password hashed twice. The new password is stored in the column <tt>confirmation_token</tt>.
-  # Action #resend_password is used to request a new password. 
-  def confirm_account
-    @user = User.find(params[:id])
-    if  @user.confirm_account(params[:tk])
-      if  @user.save
-        flash['success'] = FLASH_PASSWORD_ACTIVATED 
-      else
-        raise "Failed to activate account for #{@user.email}"
-      end
-    else
-      flash['error'] = FLASH_NO_VALID_TOKEN
-    end
-    redirect_to :action => 'login'
-  end
-  
-  # Action #change_password allows a user to change the password 
-  #-- 
-  # TODO security enhancement: require the old password
-  # TODO like to use flash.now here but functional tests will fail! Is a bug?
-  #++
-  def  change_password
-    @user= User.find(session['user'].id)
-    if  request.get?
-    else
-      @user.errors.add(:password, "Can't be blank") if params[:user][:password].blank? # blank? returns true if its receiver is nil or an empty string
-      @user.change_password(User.new(params[:user]))
-      if  @user.save
-        flash['success'] = 'Password was succesfully changed'
-      else
-        @user= User.find(session['user'].id)
-      end
-    end
-  end
-  
-  def     index
-    redirect_to :action => 'login'
-  end
-  
-  # Generate a new password for a user and sends it in a email. 
-  # The new password is activated after the user confirms it. The old passwords remains
-  # active, otherwise any user can disable accounts!
-  def lost_password
-    if  request.get?
-      @user = User.new
-    else
-      @user = User.new(params[:user])
-      logger.info('Finding user with email: ' + @user.email.downcase)
-      @user_by_email = User.find_by_email(@user.email.downcase)
-      if @user_by_email
-        @user_by_email.password = @user.password
-        @user_by_email.password_confirmation = @user.password_confirmation
-        if @user_by_email.valid?
-          @user_by_email.set_new_pw(@user_by_email.password)
-          if  @user_by_email.save
-            urls = [url_for(:controller => 'login', :action => 'confirm_account', :id => @user_by_email.id, :tk => @user_by_email.token_new)]
-            Notifier::deliver_lost_password(@user_by_email, urls)
-            flash['success'] = FLASH_PW_CONFIRMATION_EMAIL_SENT
-            redirect_to :action => "login"
-          end
-        else
-        end
-      else
-        @user.email = ""
-        flash['notice'] = FLASH_EMAIL_NOT_FOUND
-      end
-    end
-  end
-  
-  # Action #login checks if there is a cookie. With 'posts' we try to login using User.try_to_login. If the user 
-  # wants to be remembered a cookie is created. 'Gets' can login the user if the user has a good cookie.
-  def login
-    @wikis = Wiki.find(:all, :conditions => ['obsolete_on is null'])
-    @login_message = AdminMessage.text('Login')    
-    if request.get?
-      if  cookies[:epfwiki_id] && User.exists?(cookies[:epfwiki_id])
-        logger.info("Found cookie and user with id " + cookies[:epfwiki_id])
-        @user = User.find(cookies[:epfwiki_id])         
-        token = cookies[:epfwiki_token]
-        if @user.confirm_account(token)
-          logger.info("Token good, refresh cookies and login user")
-          create_cookie(@user) # refresh van cookie
-          @user.update_attributes({:http_user_agent => request.env['HTTP_USER_AGENT'], :ip_address => request.env['REMOTE_ADDR'] , :last_logon => Time.now, :logon_count => @user.logon_count + 1, :logon_using_cookie_count => @user.logon_using_cookie_count + 1})
-          session['user'] = @user
-          redirect2page
-        else
-          logger.info("An account was found but the token was not correct #{request.env.inspect}")        
-          expire_cookie
-          session['user'] = nil
-          @user = User.new
-        end
-      else
-        logger.debug("Cookie not found, or user not found with id in cookie: #{cookies.inspect}, cookies['epfwiki_id']: #{cookies['epfwiki_id']}, User.exists?(cookies[:epfwiki_id]): #{User.exists?(cookies[:epfwiki_id])}")
-        expire_cookie # if it exists, it is invalid
-        @cadmin = User.find_central_admin
-        if  @cadmin
-		  logger.debug('Cadmin found, displaying the login form')
-          session['user'] = nil
-          @user = User.new
-        else
-          logger.debug('Cadmin not found, displaying form to create cadmin user')
-          redirect_to :action => 'new_cadmin'
-        end
-      end
-    else
-      @user = User.new(params[:user])
-      @logged_in_user = @user.try_to_login
-      if @logged_in_user
-        logger.info("Login succesfull")
-        session['user'] = @logged_in_user
-        if @user.remember_me == "0" # remember_me = 0, do not remember_me is 1
-          create_cookie(@logged_in_user)
-        end
-        @logged_in_user.update_attributes({:http_user_agent => request.env['HTTP_USER_AGENT'], :ip_address => request.env['REMOTE_ADDR'] , :last_logon => Time.now, :logon_count => @logged_in_user.logon_count + 1})
-        redirect2page
-      else
-        @user = User.new
-        flash['notice'] = FLASH_INVALID_PW
-        logger.info("Invalid combination of username password for #{@user.email}")
-      end
-    end
-  end
-  
-  # destroy the session and cookie redirect to #login
-  def logout
-    session['user'] = nil
-    flash[:notice] = "Logged out"
-    redirect_to :action => "login"
-    expire_cookie
-  end
-  
-  def redirect2page
-    if session["return_to"]
-      redirect_to(session["return_to"])
-      session["return_to"] = nil
-    else
-      redirect_to :controller => "users", :action => "account"
-    end
-  end
-  
-  def auto_complete_for_user_email
-    search = params[:user][:email]
-    logger.debug("search:" + search)
-    @users = User.find(:all, :conditions => ["email like ?", search + "%"], :order => "email ASC") unless search.blank?
-    if @users.length == 1
-      render :inline => "<ul class=\"autocomplete_list\"><li class=\"autocomplete_item\"><%= @users[0].email %></li></ul>" 
-    else
-      render :inline => "<ul class=\"autocomplete_list\"></ul>"
-    end
-  end
-
-end
\ No newline at end of file
diff --git a/source/app/controllers/other_controller.rb b/source/app/controllers/other_controller.rb
deleted file mode 100644
index ed10a01..0000000
--- a/source/app/controllers/other_controller.rb
+++ /dev/null
@@ -1,43 +0,0 @@
-require 'open-uri'
-
-#--######################################################################
-# Copyright (c) 2006 Logica
-# 
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# 
-# Onno van der Straaten:: initial implementation
-#++######################################################################
-# {Copyright (c) 2006 Logica}[link:files/COPYRIGHT.html]
-
-class OtherController < ApplicationController
-
-  layout 'management'
-
-  # Action #info displays information this application
-  def about
-    @version = db_script_version(ENV['EPFWIKI_ROOT_DIR'] + "db/migrate")
-    @database_schema = User.find_by_sql('select version from schema_info')[0]
-    if  @database_schema.version.to_s == @version.to_s
-      @version = nil
-    else
-      flash.now['warning'] = "Database seems out-of-date. Available scripts are of a higher version. Available is " + @version.to_s + ", installed is " + @database_schema.version.to_s 
-    end
-  end
-
-  # Action #error is redirected to from ApplicationController.resque_action_in_public
-  # to display a userfriendly error message
-  def error
-  end
-  
-  # See routes.rb
-  def show404
-      flash.now['error'] = 'The page you\'ve requested cannot be found.'
-      render :action => 'error', :status => 404 
-  end
- 
-end
diff --git a/source/app/controllers/pages_controller.rb b/source/app/controllers/pages_controller.rb
deleted file mode 100644
index f9dec28..0000000
--- a/source/app/controllers/pages_controller.rb
+++ /dev/null
@@ -1,296 +0,0 @@
-#--######################################################################
-# Copyright (c) 2006 Logica
-# 
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# 
-# Onno van der Straaten:: initial implementation
-#++######################################################################
-# {Copyright (c) 2006 Logica}[link:files/COPYRIGHT.html]
-
-class PagesController < ApplicationController
-  
-  before_filter :authenticate, :except => [:view]
-  before_filter :authenticate_cadmin, :only => [:destroy]
-  
-  caches_page :view
-  
-  #--
-  # TODO check that we really need this
-  #++
-  cache_sweeper :sweeper, :only => [:checkout, :checkin, :undocheckout, :destroy, :discussion]
-  
-  layout 'wiki'
-  
-  FLASH_CHECKIN_SUCCESS = "Check-in succesfull, please add or update the version note!"
-
-  def view
-    #--
-    # TODO add 'Compare with previous' link
-    #++ 
-    logger.debug("params[:url]:" + params[:url])
-    s3,s4,s5 = params[:url].split('/').values_at(2,3,4)
-    @rel_path = params[:url].sub("http://#{s3}/#{s4}/#{s5}/", '').split('?')[0] # url sometimes contains a parameter! 
-    logger.debug("Finding wiki by folder #{s4}")
-    @wiki = Wiki.find_by_folder(s5)
-    @page = WikiPage.find_by_rel_path_and_site_id(@rel_path, @wiki.id)
-    if @page
-      logger.debug("Page found")
-      @version = @page.current_version 
-      @comments = Comment.find(:all, :conditions => ["page_id=? and site_id=?", @page.id, @wiki.id], :order => 'created_on ASC') 
-      @checkout = @page.checkout
-      logger.debug("@version: #{@version.inspect}")
-      @contributor_names = @page.contributors
-    end
-    headers["Content-Type"] = 'text/javascript' 
-    render :update do |page|
-      page.replace_html 'epfwiki_header', :partial => 'header'
-      page.replace_html 'epfwiki_footer', :partial => 'footer'
-      if @checkout
-        if @version
-          page.replace_html 'checkout_text', :inline => "<%= image_tag('notice.png', :align => 'middle') %> This page is currently being modified by <%= @checkout.user.name %>"
-        else
-          page.replace_html 'checkout_text', :inline => "<%= image_tag('notice.png', :align => 'middle') %> This page is currently being created by <%= @checkout.user.name %>"
-        end
-      end
-    end 
-  end
-
-  def discussion
-    if request.get?
-      @wiki = Wiki.find_by_folder(params[:site_folder]) 
-      @page = Page.find(params[:id])
-      @comment = Comment.new(:site => @wiki, :page => @page) 
-    else
-      @comment = Comment.new(params[:comment].merge(:user => session['user']))
-      @page = @comment.page
-      @wiki = @page.site 
-      @comment.version = @page.current_version
-      if @comment.save
-        redirect_to :controller => 'pages', :site_folder => @wiki.folder, :id => @page.id, :action => 'discussion'
-        users = (User.find(:all, :conditions => ['notify_immediate=?', 1]) + Notification.find_all_users(@page, Page.name)).uniq
-        unless users.empty?
-          subject = "New comment about #{@page.presentation_name}"
-          introduction = "User #{@comment.user.name} created a comment about <a href=\"#{@comment.page.url(true, request.host + (request.port == 80 ? '' : ':' + request.port.to_s))}\">#{@comment.page.presentation_name}</a> in site #{@comment.site.title}<br>"
-          Notifier::deliver_notification(users,subject,introduction, @comment.text, request.host + (request.port == 80 ? '' : ':' + request.port.to_s)) 
-        end
-      end
-    end
-    @comments = Comment.find(:all, :conditions => ["page_id=? and site_id=?", @page.id, @wiki.id], :order => 'created_on ASC') 
-  end
-
-  def edit
-    if params[:checkout_id]
-      @checkout = Checkout.find(params[:checkout_id])
-      @page = @checkout.page 
-      @wiki = @checkout.site
-      render :layout => false
-    else
-      # TODO this is not used?
-      redirect_to :action => 'checkout', :id => params[:id], :site_folder => params[:site_folder]
-    end
-  end
-  
-  # Action #checkout to create a new checkout 
-  def checkout
-    if request.get?
-      @version = UserVersion.new
-      @page = Page.find(params[:id])
-      @wiki = @page.site
-      #--
-      #@wiki = Wiki.find_by_folder(params[:site_folder]) 
-      # TODO these kind of statement are no longer necessary, 
-      # do global search and replace
-      #++
-      @version.wiki = @wiki
-      co = @page.checkout 
-      if co
-        redirect_to :action => 'edit', :checkout_id => co.id
-      else
-        @version.source_version = @page.current_version
-      end
-    else
-      logger.info("Creating new checkout using params #{params[:version].inspect}")
-      @version = UserVersion.new(params[:version]) 
-      @page = @version.source_version.page
-      @wiki = @page.site
-      co = Checkout.new(:note => @version.note, :page => @page, :site => @wiki, :source_version => @version.source_version, :user => session['user'], :version => @version )
-      if co.save
-        redirect_to :action => 'edit', :checkout_id => co.id 
-      else
-        logger.info("Failed to save checkout #{co.inspect}")
-      end
-    end
-    @versions = @page.versions
-  end
-
-  # #save the HTML after checking that the User is the owner. The Page remains checked-out.
-  def save
-    @checkout = Checkout.find(params[:checkout_id])
-    raise LoginController::FLASH_UNOT_CADMIN if !mine?(@checkout) && !cadmin?
-    @checkout.version.html = params[:html]
-    @checkout.version.save
-    if params[:action] == 'save'
-      redirect_to :action => 'edit', :checkout_id => @checkout.id
-    else
-      redirect_to(url_for('/' + @checkout.version.rel_path_root))    
-    end
-  end
-  
-  def preview
-    save
-  end
-  
-  # Action #checkin to checkin a page that is checked-out
-  # TODO force post method
-  def checkin
-    if params[:checkout_id]
-      logger.info("Finding checkout with id #{params[:checkout_id]}")
-      co = Checkout.find(params[:checkout_id])
-      @version = co.version
-      @wiki = co.site
-      @page = co.page
-      co.checkin(session['user'], params[:html])
-      raise "Failed to checkin #{checkout.id}" if Checkout.exists?(co.id)
-      flash.now['success'] = FLASH_CHECKIN_SUCCESS
-      users = (User.find(:all, :conditions => ['notify_immediate=?', 1]) + Notification.find_all_users(@page, Page.name)).uniq
-      unless users.empty?
-          subject = "New version created of #{@version.page.presentation_name}"
-          introduction = "User #{@version.user.name} created a version of <a href=\"#{@version.page.url(true, request.host + (request.port == 80 ? '' : ':' + request.port.to_s))}\">#{@version.page.presentation_name}</a> in site #{@version.wiki.title}<br>"
-          Notifier::deliver_notification(users,subject,introduction, @version.note, request.host + (request.port == 80 ? '' : ':' + request.port.to_s)) 
-      end
-      #redirect_to :controller => 'versions', :action => 'edit', :id => version.id
-      if @version.template?
-        # Because we use note field to cache the brief description of a template
-        # the field should be empty. Maybe we should rethink this use of the note field
-        @version.note = ''
-        @version.save!
-        redirect_to '/' + @version.wiki.rel_path + '/' + @version.page.rel_path
-      end
-    else
-      logger.debug("Updating version note using params #{params.inspect}")
-      @version = Version.find(params[:version][:id])
-      @wiki = @version.wiki
-      @page = @version.page
-      if mine?(@version) || cadmin?
-        #@version.note = params[:version][:note]
-        if @version.update_attributes(params[:version])
-          flash['notice'] = ::FLASH_RECORD_UPDATED
-          #redirect_to :action => 'list', :site_id => @version.site_id, :page_id => @version.page_id
-          redirect_to '/' + @version.wiki.rel_path + '/' + @version.page.rel_path
-        end    
-      else
-        flash.now['error'] = ::FLASH_NOT_OWNER
-      end
-    end
-  end
-
-  # Action #new to create a new Page based on a template or based on another page.
-  def new
-    if  request.get?
-      @wiki = Wiki.find_by_folder(params[:site_folder])
-      @page = Page.find(params[:id])
-      version = @page.current_version 
-      version.save! if version.version == 0
-      @new_page = Page.new
-      @new_page.source_version = version.id # TODO a better name would be source_version_id?
-    else
-      logger.info("Creating new page with #{params.inspect}")
-      @page = Page.find(params[:id])
-      @wiki = Wiki.find_by_folder(params[:site_folder])
-      @templates = []
-      version = Version.find(params[:page][:source_version])
-      @new_page, @checkout = WikiPage.new_using_template(params[:page].merge(:user=> session['user'], :site => @wiki, :source_version => version))
-      if @new_page.save
-        if @checkout
-          redirect_to :action => 'edit', :checkout_id => @checkout.id
-        end
-      end
-      # TODO his will cause an error in new.rhtml. Implement test
-    end
-    @templates = Site.templates
-    @templates = [version] + @templates 
-
-  end
-  
-  #--
-  # TODO improved security - move authorisation check to Checkout.undo?
-  #++
-  def undocheckout
-    co = Checkout.find(params[:checkout_id])
-    page = co.page
-    wiki = co.site
-    if mine?(co) || cadmin?
-      co.undo
-      if  Checkout.exists?(co.id)
-        raise "Failed to undo checkout #{co.id} of page #{co.page.presentation_name}"
-      else
-        if Page.exists?(page.id)
-          redirect_to page.url
-        else
-          redirect_to wiki.pages[0].url
-        end
-      end
-    else
-      raise "This checkout is owned by #{co.user.name}. You cannot undo a checkout that belongs to another user"
-    end
-  end
-  
-  # TODO  Implement test
-  def destroy 
-    @page = Page.find(params[:id])
-    #paths.each {|path| File.delete(path) if File.exists?(path)} # decided not to delete the files
-    Checkout.destroy_all(['page_id=?', @page.id])
-    Comment.destroy_all(['page_id=?', @page.id])
-    Notification.destroy_all(['page_id=?', @page.id])
-    Version.destroy_all(['page_id=?', @page.id])
-    @page.destroy
-    flash['success'] = "Page #{@page.presentation_name}deleted!"
-    redirect_to request.referer
-  end
-  
-  def history
-    @page = Page.find(params[:id])
-    @wiki = Wiki.find_by_folder(params[:site_folder])
-    @versions = @page.versions
-    @versions << @page.checkout.version unless @page.checkout.nil?
-    @other_versions = Version.find(:all, :conditions => ['wiki_id<>? and page_id=?', @wiki.id, @page.id], :order=> 'wiki_id, version ASC')
-  end
-
-  def rollback
-    unless params[:version].nil?
-      to = Version.find(params[:version][:version_id])
-      if to.page.checkout.nil?
-        co = Checkout.new(:user => session['user'], :page => to.page, :site => to.wiki, :source_version => to, :note => "Rollback to version #{to.version}")
-        if co.save
-          co.checkin(session['user'])
-          flash['success'] = 'Rollback complete'
-        else
-          flash['error'] = 'Rollback failed'
-        end
-      else
-        flash['error'] = 'Cannot rollback checked out page'
-      end
-      redirect_to :action => 'history', :id => to.page.id, :site_folder => to.wiki.folder
-    end
-  end
-
-  def text
-    @page = Page.find(params[:id])
-    render :inline => "<%= (simple_format(strip_tags(@page.html))) %>", :layout => false
-  end
-  
-  # TODO be able to quickly retrieve a list of pages based on content type in a site
-  #def list
-  #  sidebar
-  #  uma_type = params[:type].capitalize.singularize
-  #  logger.info("Selecting pages with uma_type #{uma_type}")
-  #  @pages = Page.find(:all, :order => 'presentation_name ASC', :conditions => ['uma_type=?', uma_type])
-  #   render :layout => 'application'
-  #end
-  
-end
\ No newline at end of file
diff --git a/source/app/controllers/portal_controller.rb b/source/app/controllers/portal_controller.rb
deleted file mode 100644
index 94a028d..0000000
--- a/source/app/controllers/portal_controller.rb
+++ /dev/null
@@ -1,158 +0,0 @@
-require 'open-uri'
-
-#--######################################################################
-# Copyright (c) 2006 Logica
-# 
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# 
-# Onno van der Straaten:: initial implementation
-#++######################################################################
-# {Copyright (c) 2006 Logica}[link:files/COPYRIGHT.html]
-
-class PortalController < ApplicationController
-
-  before_filter :sidebar
-  
-  caches_page :home, :about, :archives, :wikis, :users, :privacypolicy, :termsofuse
-  
-  layout 'portal'
-
-  # See also #RssController.index
-  def home
-    if User.count > 0
-      @cadmin = User.find_central_admin
-      #@versions = Version.find(:all, :order => 'created_on DESC', :conditions => ['version <> 0 and created_on > ?',Time.now - 1.month])
-      @versions = Version.find(:all, :order => 'created_on DESC', :conditions => ['baseline_process_id is null and version is not null'], :limit => 15)
-      #@comments = Comment.find(:all, :order => 'created_on DESC', :conditions => ['created_on > ?',Time.now - 1.month])
-      @comments = Comment.find(:all, :order => 'created_on DESC', :limit => 15)
-      @templates = Site.templates
-      @uploads = Upload.find(:all, :order => 'created_on DESC', :limit => 15)
-      @pages = WikiPage.find(:all, :order => 'created_on DESC', :limit => 15, :conditions => ['tool = ?', 'Wiki'])
-      @welcome = AdminMessage.text('Welcome')
-      @tabitems = []
-      @tabitems << {:text => "Discussion", :id => 'discussion'} 
-      @tabitems << {:text => "Changes", :id => 'changes'} 
-      @tabitems << {:text => "Uploads", :id => 'uploads'} 
-      @tabitems << {:text => "Pages", :id => 'pages'} 
-    else
-      redirect_to :controller => 'login'
-    end
-  end  
-
-  def wikis
-    @wikis = Wiki.find(:all, :conditions => ['obsolete_on is null'])
-  end
-  
-  def users
-    version_counts = UserVersion.count(:group => 'user_id')
-    comment_counts = Comment.count(:group => 'user_id')
-    upload_counts = Upload.count(:group => 'user_id')
-    new_page_counts = WikiPage.count(:group => 'user_id', :conditions => ['tool=?','Wiki'])
-    @contributors = []
-    User.find(:all).each do |user|
-      version_count = 0
-      comment_count = 0
-      upload_count = 0
-      new_page_count = 0
-      count = 0
-      version_count = version_counts.assoc(user.id)[1] unless version_counts.assoc(user.id).nil?
-      comment_count = comment_counts.assoc(user.id)[1] unless comment_counts.assoc(user.id).nil?      
-      upload_count = upload_counts.assoc(user.id)[1] unless upload_counts.assoc(user.id).nil?
-      new_page_count = new_page_counts.assoc(user.id)[1] unless new_page_counts.assoc(user.id).nil?
-      count = version_count + comment_count + upload_count + new_page_count
-      @contributors << {:user => user, :version_count => version_count, :comment_count => comment_count, :upload_count => upload_count, :new_page_count => new_page_count, :count => count}
-    end
-    @contributors = @contributors.sort_by {|c|-c[:count]}
-  end
-
-  def about
-    @about = AdminMessage.text('About')
-  end 
-  
-  #--
-  # FIXME Bugzilla 231125
-  #def search
-  #  sidebar
-  #  if params[:q].blank?
-  #  else
-  #    @search_results = WikiPage.find_by_contents(params[:q])
-  #  end
-  #end  
-  #++
-
-  def archives
-    @cadmin = User.find_central_admin
-    @year = params[:year]
-    @month = params[:month]
-    month_start = Time.gm(@year, @month)
-    month_end = month_start.at_end_of_month
-    logger.debug("Versions for archives #{['version <> 0 and created_on >= ? and created_on < ?', month_start, month_end].inspect}")
-    @versions = UserVersion.find(:all, :order => 'created_on ASC', :conditions => ['created_on >= ? and created_on < ?',month_start, month_end])
-    @comments = Comment.find(:all, :order => 'created_on ASC', :conditions => ['created_on >= ? and created_on < ?',month_start, month_end])
-    @uploads = Upload.find(:all, :order => 'created_on ASC', :conditions => ['created_on >= ? and created_on < ?',month_start, month_end])
-    @updates = Update.find(:all, :order => 'created_on ASC', :conditions => ['created_on >= ? and created_on < ?',month_start, month_end])
-    @pages = WikiPage.find(:all, :order => 'created_on ASC', :conditions => ['created_on >= ? and created_on < ? and tool = ?',month_start, month_end, 'Wiki'])    
-    @tabitems = []
-    @tabitems << {:text => "Discussion (#{@comments.size.to_s})", :id => 'discussion'} 
-    @tabitems << {:text => "Changes (#{@versions.size.to_s})", :id => 'changes'} 
-    @tabitems << {:text => "Uploads (#{@uploads.size.to_s})", :id => 'uploads'} 
-    @tabitems << {:text => "Updates (#{@updates.size.to_s})", :id => 'updates'} 
-    @tabitems << {:text => "Pages (#{@pages.size.to_s})", :id => 'pages'}     
-  end
-  
-  def feedback
-    @help = AdminMessage.text('Help')
-    if request.get?
-      @feedback = Feedback.new
-    else  
-      @feedback = Feedback.new(params[:feedback].merge(:user => session['user']))
-      if @feedback.save
-        Notifier::deliver_feedback(@feedback)
-        flash['success'] = "Your feedback or question was succesfully sent. <br>Thanks for your interest in #{ENV['EPFWIKI_APP_NAME']}!"
-        redirect_to '/'
-      end
-    end
-  end
-  
-  def privacypolicy
-    render :inline => "<% @heading = 'Privacy Policy'  %><h2>Privacy Policy</h2><%= @privacypolicy %>", :layout => 'portal'
-  end
-  
-  def termsofuse
-    render :inline => "<% @heading = 'Terms of Use' %><h2>Terms of Use</h2><%= @termsofuse %>", :layout => 'portal'
-  end
-  
-  #######
-  private
-  #######
-  
-  def sidebar
-    @privacypolicy = AdminMessage.text('Privacy Policy')
-    @termsofuse = AdminMessage.text('Terms of Use')    
-    @wikis = Wiki.find(:all, :conditions => ['obsolete_on is null and baseline_process_id is not null'])
-    @updates_sidebar = Update.find(:all, :order => 'created_on ASC', :conditions => ['finished_on > ? and finished_on is not null and started_on is not null',Time.now - 14.days])
-    @checkouts = Checkout.find(:all, :order => 'created_on DESC')
-    version_counts = UserVersion.count(:group => 'month(created_on)', :conditions => ['year(created_on)=?', Time.now.year])
-    comment_counts = Comment.count(:group => 'month(created_on)', :conditions => ['year(created_on)=?', Time.now.year])
-    upload_counts = Upload.count(:group => 'month(created_on)', :conditions => ['year(created_on)=?', Time.now.year])
-    logger.debug([version_counts, comment_counts, upload_counts].inspect)
-    @archives_count = []
-    for i in 1..12
-      cnt = 0
-      [comment_counts.assoc(i.to_s), upload_counts.assoc(i.to_s), version_counts.assoc(i.to_s)].each {|c|  cnt += c[1] unless c.nil? } #cnt += c unless c.nil?
-      @archives_count << [i, cnt] if cnt > 0
-    end
-    @monthly_top = User.find(:all).collect {|u|[u, Version.count(:conditions => ['user_id = ? and baseline_process_id is null and created_on > ?',u.id, Time.now - 1.month]) + u.comments.count(:conditions => ['created_on > ?', Time.now - 1.month]) + u.uploads.count(:conditions => ['created_on > ?', Time.now - 1.month])]}
-    @monthly_top = @monthly_top.sort_by{|t|-t[1]}
-    @overall_top = User.find(:all).collect {|u|[u, Version.count(:conditions => ['user_id = ? and baseline_process_id is null',u.id]) + u.comments.count + u.uploads.count]}
-    @overall_top = @overall_top.sort_by{|t|-t[1]}
-    @overall_top = @overall_top[0..14]
-    @monthly_top = @monthly_top[0..14]
-  end 
- 
-end
diff --git a/source/app/controllers/review_controller.rb b/source/app/controllers/review_controller.rb
deleted file mode 100644
index 4fb97f2..0000000
--- a/source/app/controllers/review_controller.rb
+++ /dev/null
@@ -1,74 +0,0 @@
-#--######################################################################
-# Copyright (c) 2006 Logica
-# 
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# 
-# Onno van der Straaten:: initial implementation
-#++######################################################################
-# {Copyright (c) 2006 Logica}[link:files/COPYRIGHT.html]
-
-class ReviewController < ApplicationController
-  
-  before_filter :authenticate_admin
-  before_filter :find_record
-  
-  # Action #toggle_done toggles the <tt>done</tt> column. 
-  def toggle_done
-    if @record.reviewer.nil? || @record.reviewer == session['user'] || cadmin?
-      if @record.done == 'Y'
-        @record.update_attributes(:done => 'N')
-      else
-        @record.update_attributes(:done => 'Y')
-      end
-      render :inline => "<%= link_to_done_toggle(@record) %>"
-    else
-      render :inline => "<script language=\"JavaScript\">alert('To change the done flag you need to be the reviewer or the central administrator (#{User.find_central_admin.name})!')</script><%= link_to_done_toggle(@record) %>"
-    end
-  end
-  
-  #Action #review assigns current User as the reviewer
-  def assign
-    html = "<%= link_to_reviewer(@record) %>"
-    if @record.reviewer.nil?
-        @record.update_attributes(:reviewer => session['user'])
-    elsif @record.reviewer == session['user']
-        @record.update_attributes(:reviewer => nil)
-    elsif cadmin?
-        @record.update_attributes(:reviewer => session['user'])
-    elsif !@record.reviewer.nil? && !cadmin?
-        html = "<script language=\"JavaScript\">alert('Only the central administrator (#{User.find_central_admin.name}) can change or clear the reviewer!')</script><%= link_to_reviewer(@record) %>"
-    end
-    render :inline => html
-  end
-  
-  # Action #review_note updates the review note
-  def note
-    @record.review_note = params[:value]
-    @record.save! if @record.reviewer.nil? || @record.reviewer == session['user'] || cadmin?
-    # html = "<script language=\"JavaScript\">alert('Only the central administrator (#{User.find_central_admin.name}) or the reviewer can update the review note!')</script>#{html}"      
-    # It is not possible to display a alert when using in-place edit?
-    @record.reload
-    @record.review_note = '_______' if @record.review_note.blank?
-    render :text => @record.review_note
-  end
-  
-  #######
-  private
-  #######
-  
-  def find_record
-    logger.debug("Find record using params: #{params.inspect}")
-    case params['class_name'] 
-    when 'Version' then @record = Version.find(params[:id])
-    when 'UserVersion' then @record = Version.find(params[:id])
-    when 'BaselineProcessProcessVersion' then @record = Version.find(params[:id])
-    when 'Upload' then @record = Upload.find(params[:id])
-    else @record = DaText.find(params[:id])
-    end
-  end
-end
\ No newline at end of file
diff --git a/source/app/controllers/rss_controller.rb b/source/app/controllers/rss_controller.rb
deleted file mode 100644
index fe17e59..0000000
--- a/source/app/controllers/rss_controller.rb
+++ /dev/null
@@ -1,74 +0,0 @@
-#--######################################################################
-# Copyright (c) 2006 Logica
-# Copyright (c) 2008 IBM
-# 
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# 
-# Onno van der Straaten:: initial implementation
-# Ricardo Balduino:: added actions to handle Practice feed and UMA Types feed
-#++######################################################################
-# {Copyright (c) 2006 Logica, 2008 IBM}[link:files/COPYRIGHT.html]
-
-class RssController < ApplicationController
-
-  session :off # stateless RSS requests
-  
-  caches_page :list
-  
-  def list
-    @cadmin = User.find_central_admin
-    @updates = Update.find(:all, :order => 'finished_on DESC', :conditions => ['finished_on > ?', Time.now - 14.days], :limit => 14)
-    @uploads = Upload.find(:all, :order => 'created_on DESC', :conditions => ['created_on > ?', Time.now - 14.days], :limit => 14)
-    unless params[:site_folder] == 'all' then
-      @wiki = Wiki.find_by_folder(params[:site_folder])
-      @versions = Version.find(:all, :order => 'created_on DESC', :conditions => ['wiki_id=? and baseline_process_id is null and created_on > ? and not exists (select * from checkouts c where c.version_id=versions.id)', @wiki.id, Time.now - 14.days ], :limit => 14)
-      @comments = Comment.find(:all, :order => 'created_on DESC', :conditions => ['site_id=? and created_on > ?', @wiki.id, Time.now - 14.days], :limit => 14)
-    else
-      @versions = Version.find(:all, :order => 'created_on DESC', :conditions => ['baseline_process_id is null and created_on > ? and not exists (select * from checkouts c where c.version_id=versions.id)',Time.now - 14.days], :limit => 14)
-      @comments = Comment.find(:all, :order => 'created_on DESC', :conditions => ['created_on > ?',Time.now - 14.days], :limit => 14)
-    end if
-    headers['Content-Type'] = 'application/rss+xml'
-    render :layout => false
-  end
-  
-  # author: RB
-  def practice_feed # processes the request for a practice feed
-    @wiki = Wiki.find_by_folder(params[:site_folder]) # gets the wiki site folder that is part of the requesting url
-    if (@wiki == nil) 
-        render :action => 'error', :status => 404         
-    else
-      @practice_name = params[:practice_name] # gets the practice name that is part of the requestin url
-      @wikiId = Wiki.find(@wiki.id) # finds the wiki site with the given id
-      # queries for the practice page in this particular wiki site
-      @practice = WikiPage.find(:first, :conditions => ['uma_name=? and site_id=?', @practice_name, @wiki.id])
-      
-      if (@practice == nil)
-        render :action => 'error', :status => 404
-      end  
-    end
-  end
-
-  # author: RB
-  def any_uma_type_feed # processes the request for any uma element feed
-    @wiki = Wiki.find_by_folder(params[:site_folder]) # gets the wiki site folder that is part of the requesting url
-    @umaType = params[:uma_type] # gets the uma type that is part of the requesting url
-    if (@wiki == nil) 
-        render :action => 'error', :status => 404         
-    else
-      @wikiId = Wiki.find(@wiki.id) # finds the wiki site with the given id
-      # queries for all the elements of given uma type in this particular wiki site
-      @umaElements = WikiPage.find(:all, :conditions => ['uma_type=? and site_id=?', @umaType, @wiki.id])
-    
-      if (@umaElements.size == 0)
-        render :action => 'error', :status => 404
-      end  
-    end
-  end
-   
-end
-
diff --git a/source/app/controllers/sites_controller.rb b/source/app/controllers/sites_controller.rb
deleted file mode 100644
index 05362d3..0000000
--- a/source/app/controllers/sites_controller.rb
+++ /dev/null
@@ -1,200 +0,0 @@
-#--######################################################################
-# Copyright (c) 2006 Logica
-# 
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# 
-# Onno van der Straaten:: initial implementation
-#++######################################################################
-# {Copyright (c) 2006 Logica}[link:files/COPYRIGHT.html]
-
-class SitesController < ApplicationController
-  
-  layout 'management'
-  
-  before_filter :authenticate
-  before_filter :authenticate_admin, :only => [:csv, :new, :compare, :new_wiki, :create, :update, :upload, :edit, :update_now, :obsolete, :update_cancel]
-  before_filter :authenticate_cadmin, :only => [:scan4content]
-  
-  cache_sweeper :sweeper, :only => [:update, :update_cancel, :update_now, :new, :new_wiki]
-  
-  verify :method => :post, :only => [:update, :update_cancel, :update_now, :obsolete, :csv],:add_flash => {'error' => ::FLASH_USE_POST_NOT_GET}, :redirect_to => { :controller => 'other', :action => 'error' }  
-  
-  FLASH_WIKI_SITE_CREATED = 'An empty Wiki site has been created. Now you can schedule a job to update the Wiki with a Baseline Process'  
-  FLASH_WIKI_UPDATE_SUCCESS  = 'Wiki succesfully updated'
-  
-  #--
-  # TOOD Invalid argument in console
-  # In the console when running built-in server the message ERROR Errno::EINVAL: Invalid argument is displayed
-  #++
-  def index
-    list
-    render :action => 'list'
-  end
-  
-  def list
-    @baseline_processes = BaselineProcess.find(:all)
-    @wikis = Wiki.find(:all)
-  end
-  
-  # Action #new creates a BaselineProcess. A BaselineProcess is created from content in a server folder 
-  # (that you uploaded with FTP or a folder share or something) or from a zip file submitted with the form
-  def new
-    @baseline_processes = BaselineProcess.find(:all, :conditions => ['obsolete_on is null'])
-    @folders = BaselineProcess.unused_folders
-    if request.get?
-      @site = Site.new
-      flash['notice'] =  "<p>Although you can upload zip files with EPFC published sites here, it is recommended to upload content using some other means (FTP, SCP).  You need to upload to the location #{ENV['EPFWIKI_ROOT_DIR']}#{ENV['EPFWIKI_PUBLIC_FOLDER']}/#{ENV['EPFWIKI_SITES_FOLDER']}. Server folder created there can be used to create a new Baseline Process.</p>"
-      flash['notice'] += "<p>It is also recommended to use version info or baseline info in your zip file names. The name is used to derive other attributes (server folder and title). Example: oup_20060721.zip</p>"
-    else
-      logger.info("Creating a new Baseline Process with params #{params.inspect}")
-      if params[:site][:file].nil?
-        logger.info("Creating a new Baseline Process from server folder")
-        @site = BaselineProcess.new(params[:site].merge(:user => session['user']))       
-      else  
-        logger.info("Creating a new Baseline Process using zip")
-        @site = BaselineProcess.new_from_upload(params[:site].merge(:user => session['user']))        
-      end
-      if @site.errors.empty? && @site.save
-        flash['success'] = ::FLASH_RECORD_CREATED 
-        redirect_to :action => 'list'
-      end
-    end
-  end
-  
-  # Action #new_wiki creates a new Wiki. The typical next step is to schedule an #update to add content to this empty Wiki
-  def new_wiki
-    if request.get?
-      @wiki = Wiki.new
-    else
-      @wiki = Wiki.new(params[:wiki].merge(:user => session['user']))
-      if  @wiki.save
-        flash['success'] = FLASH_WIKI_SITE_CREATED
-        redirect_to :action => 'description', :id => @wiki.id
-      end
-    end
-  end
-
-  # Action #update schedules an update. The actual update is typically performed
-  # with a job ('job_daily') but could also be forced by #update_now
-  def update
-    site = Site.find(params[:id])
-    bp = BaselineProcess.find(params[:baseline_process_id])
-    u = Update.new(:user => session['user'], :wiki => site, :baseline_process => bp)
-    u.save!
-    flash['success'] = "Update of #{site.title} to #{u.baseline_process.title} scheduled"
-    redirect_to :action => 'description', :id => site.id
-  end
-  
-  # Action #update_cancel to cancel an scheduled updated
-  def update_cancel
-    site = Site.find(params[:id])
-    u = Update.find(params[:update_id])
-    u.destroy
-    flash['success'] = "Cancelled update of #{site.title} to #{u.baseline_process.title}"
-    redirect_to :action => 'description', :id => site.id
-  end
-  
-  # action #update_now allows the administrator to do the update immediately, see also #update_wiki 
-  def update_now
-    u = Update.find(params[:update_id])  
-    u.do_update
-    flash['success'] = FLASH_WIKI_UPDATE_SUCCESS            
-    redirect_to :action => 'description', :id => u.wiki.id
-  end
-  
-  def description
-    @site = Site.find(params[:id])
-  end
-
-  def versions
-    @site = Site.find(params[:id])
-    logger.debug("params.inspect: #{params.inspect}")
-    @filter = UserVersion.new(params[:filter]) # done is default 'N'
-    @filter.type_filter = 'UserVersion' if @filter.type_filter.blank?
-    logger.debug("@filter: #{@filter.inspect}")
-    case @filter.done + @filter.type_filter
-    when 'NAll': cond = ['wiki_id = ? and done = ?', @site.id, 'N',] # default 
-    when 'AllUserVersion': cond = ['wiki_id = ? and type = ?', @site.id, 'UserVersion' ] # all userversions
-    when 'AllAll': cond = ['wiki_id = ?', @site.id] # all versions
-    when 'NUserVersion': cond = ['wiki_id = ? and done = ? and type = ?', @site.id, 'N', 'UserVersion' ] # all todo userversions      
-    end
-    logger.debug("cond: #{cond.inspect}")
-    @version_pages, @versions = paginate :version, :per_page => 25, :order => 'created_on DESC', :conditions => cond    
-    render :action => 'description'
-  end
- 
-  def pages
-    @site = Site.find(params[:id])
-    @page_pages, @pages = paginate :page, :per_page => 25, :order => 'created_on DESC', :conditions => ['site_id=?', @site.id]
-    render :action => 'description'
-  end
-  
-  def comments
-    @site = Site.find(params[:id])
-    #logger.debug("params.inspect: #{params.inspect}")
-    @filter = Comment.new(params[:filter]) # done is default 'N'
-    cond = ['site_id = ?', @site.id ] 
-    cond = ['site_id = ? and done = ?', @site.id, 'N' ] if @filter.done == 'N' 
-    @comment_pages, @comments = paginate :comment, :per_page => 25, :order => 'created_on DESC', :conditions => cond
-    render :action => 'description'
-  end
-  
-  def uploads
-    @site = Site.find(params[:id])
-    @upload_pages, @uploads = paginate :uploads, :order => 'created_on DESC',  :per_page => 25
-    render :action => 'description'
-  end
- 
-  def feedback
-    @site = Site.find(params[:id])
-    @feedback_pages, @feedbacks = paginate :feedbacks, :order => 'created_on DESC',  :per_page => 25
-    render :action => 'description'
-  end
- 
-  def edit
-    @site = Site.find(params[:id])
-    if request.get?
-      flash.now['warning'] = 'Updating the folder here won\'t update the file system. If you want to change the folder you will have to rename the folder manually on the filesystem' 
-    else 
-      @site = Site.find(params[:id])
-      if @site.update_attributes(params[:site])
-        flash['success'] = 'Site was successfully updated.'
-        redirect_to :action => 'description', :id => @site
-      else
-        render :action => 'edit'
-      end
-    end
-  end
-  
-  def obsolete
-    site = Site.find(params[:id])
-    site.obsolete_by = session['user']
-    if site.obsolete_on.nil?
-      site.obsolete_on = Time.now
-      flash.now['success'] = "#{site.title} succesfully made obsolete"
-    else
-      site.obsolete_on = nil
-      flash.now['success'] = "#{site.title} is no longer obsolete"      
-    end
-    site.save!
-    list
-    render :action => 'list'
-  end
-  
-  def csv
-    site = Site.find(params[:id])
-    content_type = if request.user_agent =~ /windows/i
-      'application/vnd.ms-excel'
-    else
-      'text/csv'
-    end
-    site.export_csv if !File.exists?(site.path + '.csv')
-    send_data(IO.readlines(site.path + '.csv').join, :type => content_type, :filename => site.folder + '.csv')
-  end
-  
-end
diff --git a/source/app/controllers/uploads_controller.rb b/source/app/controllers/uploads_controller.rb
deleted file mode 100644
index 218fa24..0000000
--- a/source/app/controllers/uploads_controller.rb
+++ /dev/null
@@ -1,86 +0,0 @@
-#--######################################################################
-# Copyright (c) 2006 Logica
-# 
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# 
-# Onno van der Straaten:: initial implementation
-#++######################################################################
-# {Copyright (c) 2006 Logica}[link:files/COPYRIGHT.html]
-
-class UploadsController < ApplicationController
-  
-  layout 'management'
-  
-  before_filter :authenticate, :except => [:list, :show]
-  before_filter :authenticate_admin, :only => [:review, :review_note]
-  before_filter :authenticate_cadmin, :only => [:destroy]
-  
-  cache_sweeper :sweeper, :only => [:new]
-  
-  def index
-    list
-    render :action => 'list'
-  end
-  
-  # GETs should be safe (see http://www.w3.org/2001/tag/doc/whenToUseGet.html)
-  verify :method => :post, :only => [ :destroy, :create, :update ],:add_flash => {'error' => ::FLASH_USE_POST_NOT_GET}, :redirect_to => { :controller => 'other', :action => 'error' }  
-  
-  def list
-    @upload_pages, @uploads = paginate :uploads, :order => 'created_on DESC',  :per_page => 10
-  end
-  
-  def show
-    @upload = Upload.find(params[:id])
-  end
-  
-  def new
-    if request.get?
-      @upload = Upload.new
-    else
-      @upload = Upload.new(params[:upload].merge(:user => session['user']))
-      if @upload.save
-        @upload.save_file
-        flash[:notice] = 'Upload was successfully created.'
-        users = User.find(:all, :conditions => ['notify_immediate=?', 1])
-        unless users.empty?
-          subject = "New upload from #{@upload.user.name}"
-          introduction = "<p>User #{@upload.user.name} uploaded a document or image <a href=\"#{@upload.url(true, request.host + (request.port == 80 ? '' : ':' + request.port.to_s))}\">#{@upload.filename}</a></p>"
-          Notifier::deliver_notification(users,subject,introduction, @upload.description, request.host + (request.port == 80 ? '' : ':' + request.port.to_s)) 
-        end        
-        redirect_to :action => 'list'
-        #render :action => 'new'
-      end
-    end
-  end
-  
-  def edit
-    @upload = Upload.find(params[:id])
-  end
-  
-  def update
-    @upload = Upload.find(params[:id])
-    if mine?(@upload) || admin?
-      if @upload.update_attributes(params[:upload])
-        flash[:notice] = 'Upload was successfully updated.'
-        redirect_to :action => 'list'
-      else
-        render :action => 'edit'
-      end
-    else
-      flash['error'] = ::FLASH_NOT_OWNER
-      render :action => 'edit'
-    end
-  end
-  
-  def destroy
-    @upload = Upload.find(params[:id])
-    @upload.destroy
-    redirect_to request.referer
-  end
-  
-end
diff --git a/source/app/controllers/users_controller.rb b/source/app/controllers/users_controller.rb
deleted file mode 100644
index ce3e8ec..0000000
--- a/source/app/controllers/users_controller.rb
+++ /dev/null
@@ -1,161 +0,0 @@
-#--######################################################################
-# Copyright (c) 2006 Logica
-# 
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# 
-# Onno van der Straaten:: initial implementation
-#++######################################################################
-# {Copyright (c) 2006 Logica}[link:files/COPYRIGHT.html]
-
-class UsersController < ApplicationController
-  
-  layout 'management'
-  
-  before_filter :authenticate, :except => [:show]
-  before_filter :authenticate_admin, :only => [:list, :admin]
-  before_filter :authenticate_cadmin, :only => [:destroy, :cadmin, :adminmessage]
-  require 'ftools'
-  
-  verify :method => :post, :only => [:send_report, :destroy, :cadmin, :admin, :resend],:add_flash => {'error' => ::FLASH_USE_POST_NOT_GET}, :redirect_to => { :controller => 'other', :action => 'error' }  
-
-  FLASH_REPORT_SENT = "Report sent!"
-  FLASH_FAILED_TO_RESEND_PW = "New password could not be saved!"
-  FLASH_NO_LONGER_CADMIN = "You are no longer the central administrator"  
-  
-  def index
-    redirect_to :action => 'list'
-  end
-  
-  def list
-    @admins = User.find_all_by_admin('Y')
-    @users = User.find_all_by_admin('N')
-    @cadmin = User.find_central_admin
-  end    
-  
-  def send_report
-    Notifier::deliver_summary(params.merge(:user => session['user']))
-    flash['success'] = FLASH_REPORT_SENT
-    redirect_to :action => 'account', :id => session['user'].id
-  end
-  
-  # TODO caching of this page
-  def show
-    @user = User.find(params[:id])
-    @versions = UserVersion.find(:all, :order => 'created_on DESC', :conditions => ['user_id=?',@user.id])
-    @comments = Comment.find(:all, :order => 'created_on DESC', :conditions => ['user_id=?',@user.id])
-    @uploads = Upload.find(:all, :order => 'created_on DESC', :conditions => ['user_id=?',@user.id])
-    @pages = WikiPage.find(:all, :order => 'created_on DESC', :conditions => ['tool=? and user_id=?','Wiki', @user.id])
-    @tabitems = []
-    @tabitems << {:text => "General", :id => 'general'} 
-    @tabitems << {:text => "Comments (#{@comments.size.to_s})", :id => 'discussion'} 
-    @tabitems << {:text => "Changes (#{@versions.size.to_s})", :id => 'changes'} 
-    @tabitems << {:text => "Uploads (#{@uploads.size.to_s})", :id => 'uploads'}     
-    @tabitems << {:text => "New Pages (#{@pages.size.to_s})", :id => 'new_pages'}   
-  end
-
-  def account
-    select_user
-    #@version_pages, @versions = paginate :version, :per_page => 5, :order => 'created_on DESC', :conditions => ['user_id = ? and version <> 0', @user.id ]
-  end
-  
-  def edit
-    @user = User.find(params[:id])
-    if request.get?
-    else
-      if  mine?(@user) || cadmin?
-        if @user.update_attributes(params[:user].merge(:user => session['user']))
-          flash.now['success'] = ::FLASH_RECORD_UPDATED
-        end
-      else
-        flash.now['error'] = ::FLASH_NOT_OWNER        
-      end
-    end
-  end
-  
-  def destroy
-    #--
-    # TODO Cannot destroy user with versions and comments, 
-    # we should also do something with version and comments. Aassign versions 
-    # and comments to admin user, and do a flash notice
-    #++
-    User.find(params[:id]).destroy
-    redirect_to :action => 'list'
-  end
-  
-  def cadmin
-    @cadmin = User.find(session['user'].id) # about to become 'ordinary' admin
-    @user = User.find(params[:id]) # about to become cadmin
-    User.cadmin(@cadmin,@user)
-    flash['notice'] = FLASH_NO_LONGER_CADMIN 
-    redirect_to :action => 'list'
-  end
-  
-  def admin
-    @user = User.find(params[:id])
-    @user.user = session['user'] # used for authorisation
-    @user.admin = params[:admin]
-    if  @user.save
-      flash['success'] = ::FLASH_RECORD_UPDATED
-    end
-    redirect_to :action => 'list'
-  end    
-  
-  def toggle_change_report_notification
-    @user = User.find(params[:user_id])
-    if  mine?(@user) || cadmin?
-      @user.notify_daily = (@user.notify_daily - 1).abs  if params[:type] == 'D'
-      @user.notify_weekly = (@user.notify_weekly - 1).abs  if params[:type] == 'W'
-      @user.notify_monthly = (@user.notify_monthly - 1).abs  if params[:type] == 'M'
-      @user.notify_immediate = (@user.notify_immediate - 1).abs  if params[:type] == 'I'
-      #user.notify_dialy = 1
-      @user.save!
-    end
-    render :inline => "<%= link_to_change_report_notification_toggle(params[:type], @user) %>"
-  end
-  
-  # Action #notification creates or deletes (toggles) a notification of a certain type for a Page and Site
-  def notification
-    @user = User.find(params[:user_id])
-    @site = Site.find(params[:site_id])
-    @page = Page.find(params[:page_id])
-    @type = params[:notification_type]
-    if session['user'] == @user || cadmin?
-      n = Notification.find(:first, :conditions => ["user_id=? and page_id=? and notification_type=?", @user.id, @page.id, @type])
-      if  n
-        n.destroy
-      else
-        n = Notification.create(:user => session['user'], :page => @page, :notification_type => @type)
-      end
-      render :inline => "<%= link_to_notification_toggle(@page, @type, @user)%>"
-    else
-      render :inline => "<%= link_to_notification_toggle(@page, @type, @user)%>"
-    end
-  end
-  
-  def adminmessage
-    @admin_message = AdminMessage.find(params[:id])
-    if request.get?
-    else
-      @admin_message.update_attributes(params[:admin_message])
-    end
-  end
-  
-  protected
-  def select_user #:doc:
-    if params[:id]
-      @user = User.find(params[:id])
-    else
-      @user = session['user']
-    end
-    if  !cadmin? && !mine?(@user)
-      @user = session['user']
-      flash['notice'] = LoginController::FLASH_UNOT_ADMIN 
-    end
-  end
-  
-end
diff --git a/source/app/controllers/versions_controller.rb b/source/app/controllers/versions_controller.rb
deleted file mode 100644
index 606191d..0000000
--- a/source/app/controllers/versions_controller.rb
+++ /dev/null
@@ -1,69 +0,0 @@
-#--######################################################################
-# Copyright (c) 2006 Logica
-# 
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# 
-# Onno van der Straaten:: initial implementation
-#++######################################################################
-# {Copyright (c) 2006 Logica}[link:files/COPYRIGHT.html]
-
-class VersionsController < ApplicationController
-  
-  before_filter :authenticate, :except => [:list]
-  before_filter :authenticate_admin, :only => [:note]
-  
-  cache_sweeper :sweeper, :only => [:rollback]
-  
-  FLASH_FILES_IDENTICAL = "The two selected files are identical"
-  
-  layout 'wiki'
-  
-  def show
-    @version = Version.find(params[:id])
-    @page = @version.page
-    @wiki = @page.site
-    @baseversion = @version.baseversion
-    @last_version = @page.last_version
-    @current_version = @version.current_version
-    @source_version = @version.source_version
-    @previous_version = @version.previous_version
-  end
-  
-  def diff
-    if params[:version]
-      @version = Version.find(params[:version][:id])
-      @version.source_version = Version.find(params[:version][:version_id]) 
-    else
-      @version = Version.find(params[:id])
-      @version.source_version = @version.previous_version || @version
-    end 
-    @versions = @version.page.versions
-    @page = @version.page
-    @wiki = @page.site
-    @version.xhtmldiffpage(@version.source_version)
-  end
-  
-  def text
-    @version = Version.find(params[:id])
-    render :inline => "<%= (simple_format(strip_tags(@version.html))) %>", :layout => false
-  end
-  
-  # Action #note to update the version note by the reviewer, cadmin or 
-  # an admin when there is no reviewer defined yet.
-  def note
-    v = Version.find(params[:id])
-    if v.reviewer.nil? || v.reviewer == session['user'] || cadmin?
-      v.note = params[:value]
-      v.reviewer = session['user'] 
-      v.save!
-      v.reload
-    end
-    render :text => v.note
-  end  
-  
-end
\ No newline at end of file
diff --git a/source/app/helpers/application_helper.rb b/source/app/helpers/application_helper.rb
deleted file mode 100644
index eed817d..0000000
--- a/source/app/helpers/application_helper.rb
+++ /dev/null
@@ -1,277 +0,0 @@
-# Methods added to this helper will be available to all templates in the application.
-#--######################################################################
-# Copyright (c) 2006 Logica
-# 
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# 
-# Onno van der Straaten:: initial implementation
-#++######################################################################
-# {Copyright (c) 2006 Logica}[link:files/COPYRIGHT.html]
-
-module ApplicationHelper
-  
-  # Helper to simplify In-Place Editing 
-  def editable_content(options)
-    options[:content] = { :element => 'span' }.merge(options[:content])
-    options[:url] = {}.merge(options[:url])
-    options[:ajax] = { :okText => 'Save', :cancelText => 'Cancel'}.merge(options[:ajax] || {})
-    script = Array.new
-    script << 'new Ajax.InPlaceEditor('
-    script << "  '#{options[:content][:options][:id]}',"
-    script << "  '#{url_for(options[:url])}',"
-    script << "  {"
-    script << options[:ajax].map{ |key, value| "#{key.to_s}: #{value}" }.join(", ")
-    script << "  }"
-    script << ")"
-    content_tag(
-                options[:content][:element],
-                options[:content][:text],
-                options[:content][:options]
-    ) + javascript_tag( script.join)
-  end
-  
-  # TODO a better name for this method
-  def menulink_to(*args)
-    logger.debug("Creating menulink #{args.inspect}, #{params[:action]}")
-    current = @current || params[:action].capitalize 
-    s=' class="current"' if args[0].downcase == current.downcase
-    if current == 'Edit' 
-      txt = "Are you sure? By navigating away from the editor any unsaved changes will be lost."
-      if args.size == 3
-        args.last[:confirm] = txt
-      else
-        args << {:confirm => txt}        
-      end
-    end
-    args[0] = "<span>#{args[0]}</span>"
-    "<li#{s}>" + link_to(*args) + '</li>'
-  end
-  
-  class TabularFormBuilder < ActionView::Helpers::FormBuilder
-   (field_helpers - %w(radio_button hidden_field)).each do |selector|
-      src = <<-END_SRC
-        def #{selector}(field, options = {})
-          @template.content_tag("tr", 
-            @template.content_tag("th", field.to_s.humanize, :width => 200) + 
-              @template.content_tag("td", super))
-        end
-      END_SRC
-      class_eval src, __FILE__, __LINE__
-    end
-  end  
-  
-  def tabular_form_for(name, object = nil, options = nil, &proc)
-    if @table_heading
-      concat("<div>#{@table_heading}</div>", proc.binding)
-    else
-      concat("<div>#{name.to_s.humanize}</div>", proc.binding)
-    end
-    concat("<div class=\"sectionContent\"><table cellpadding=\"0\" cellspacing=\"0\" border=\"0\" class=\"sectionTable\"><tr valign=\"top\"><td class=\"sectionTableCell\"><table>",
-    proc.binding)
-    form_for(name, 
-             object, 
-     (options||{}).merge(:builder => TabularFormBuilder), 
-    &proc)
-    concat("</table></td></tr></table></div>", proc.binding)               
-  end   
-  
-  # Helper #tinymce in your view to render textarea's as TinyMCE textarea's
-  def tinymce(theme = 'simple')
-    @tinymce = theme
-  end
-
-   # Link To for a Page 
-  def link_to_page(page)
-      link_to(page.presentation_name + ' ' + image_tag("link.gif",:border => 0,:title => "Activate page \"#{page.presentation_name}\" in site \"#{page.site.title}\""), page.url)
-  end
-    
-  # Helper #link_to_notification_toggle
-  def link_to_notification_toggle(page, notification_type, user = session['user'])
-    returning html = [] do
-      notification = Notification.find(:first, :conditions => ["user_id=? and page_id=? and notification_type=?", user.id, page.id, notification_type])
-      if session['user'] && (mine?(user) || cadmin?)
-        div_id = "notification_" + page.id.to_s + "_" + notification_type
-        html << "<span id=\"" + div_id + "\">"
-        txt = "<input type=checkbox>notify me of new comments and changes"
-        txt = "<input type=checkbox checked>notify me of new comments and changes" if notification
-        html << link_to_remote(txt, :update => div_id, :url => {:controller => "users", :action => "notification", :page_id => page.id, :site_id => page.site.id,:user_id => user.id, :notification_type=> notification_type}, :method => 'post')
-        html << "</span>"
-      else
-        html << "<input type=checkbox #{'checked' if notification} DISABLED>notify me of new comments and changes"
-      end
-    end.join("\n")
-  end
-          
-  def link_to_change_report_notification_toggle(type = 'D', user = session['user'])
-    returning html = [] do
-      if !user.nil? && (mine?(user) || cadmin?)
-          checked = ""
-          checked = "checked" if (type == 'D' && user.notify_daily == 1) || (type == 'M' && user.notify_monthly == 1) || (type == 'W' && user.notify_weekly == 1) || (type == 'I' && user.notify_immediate == 1)
-          txt = "<input type=checkbox #{checked} DISABLED> Daily" if type == 'D'
-          txt = "<input type=checkbox #{checked} DISABLED> Monthly" if type == 'M'
-          txt = "<input type=checkbox #{checked} DISABLED> Weekly" if type == 'W'
-          txt = "<input type=checkbox #{checked} DISABLED> Immediate" if type == 'I'
-          div_id = "change_report_" + user.id.to_s + "_"  + type
-          #checked = "checked" if type == 'M' && user.notify_monthly == "1"
-          #checked = "checked" if type == 'D' && user.notify_weekly == "1"
-        if mine?(user) || cadmin?
-          html << "<span id=\"" + div_id + "\">"
-          html << link_to_remote(txt.gsub('DISABLED', ''), :update => div_id, :url => {:controller => "users", :action => "toggle_change_report_notification", :type => type, :user_id => user.id}, :method => 'post')
-          html << "</span>"
-        else
-          html << txt
-        end
-      else
-        html << "ERROR: No user specified"
-      end
-    end.join("\n")
-  end 
-              
-  def link_to_done_toggle(record)
-    class_name = 'DaText'
-    class_name = record.class.name if ['Version','Upload', 'UserVersion', 'BaselineProcessVersion'].include?(record.class.name)
-    returning html = [] do
-      html << "<span id=\"" + div_id(record, "done_toggle") + "\">"
-      if record.done == 'Y'
-        title = 'Click to mark this record \'todo\''
-        html4checkbox = "<input type=checkbox checked>"
-      else
-        title = 'Check to mark this record \'done\''
-        html4checkbox = "<input type=checkbox>"
-      end        
-      if  !session["user"] || !admin?
-        html << html4checkbox.gsub('type=checkbox', 'type=checkbox disabled=disabled')
-      else
-        html << link_to_remote(html4checkbox, :update => div_id(record, 'done_toggle'), :url => { :controller => 'review', :action => "toggle_done", :id => record.id, :class_name => class_name}, :title => title)
-      end
-      html << "</span>"
-    end.join("\n")
-  end
-                
-    # Helper #link_to_reviewer to set the reviewer. See ReviewController.
-    def link_to_reviewer(record)
-      returning url = [] do
-        url << "<span id=\"" + div_id(record, "reviewer") + "\">"
-        if  !session["user"]
-          if  record.reviewer_id != nil
-            url << link_to_user(record.reviewer)
-          end
-        else 
-          if  record.reviewer_id == nil
-            if  admin?
-              url << link_to_remote("_______", :update => div_id(record, "reviewer"), :url => { :controller => 'review', :action => 'assign', :id => record.id, :class_name => record.class} )
-            else
-              url << "" 
-            end
-          else
-              url << link_to_remote(record.reviewer.name, :update => div_id(record, "reviewer"), :url => { :controller => 'review', :action => 'assign', :id => record.id, :class_name => record.class} )
-          end
-          url << "</span> "
-        end
-      end.join("\n")
-    end
-                    
-  # link_to helper method for a Version. Renders a link with a given prefix (often "version") with possibly a lot of clickable images displaying status
-  def link_to_version(version,urlprefix)
-    returning link = [] do
-      # TODO below incorrect
-      urlprefix = 'CHECKOUT' if version.version.nil?
-      link << link_to(urlprefix + " " + version.version.to_s,:controller => 'versions',:action => 'show',:id => version.id)
-      if  !version.version_id
-      else
-        source_version = version.source_version
-        if  version.wiki_id != source_version.wiki_id 
-          from_site = source_version.wiki
-          to_site = version.wiki
-          link << link_to(image_tag('site.gif', :border => 0,  :title => 'Based on version ' + source_version.version.to_s + " from site " + from_site.title) ,:controller => 'versions',:action => 'show',:id => source_version.id)
-        else
-          if version.page_id != source_version.page_id
-            base_page = source_version.page
-            link << link_to(image_tag('new.png', :border => 0, :title => 'New page based on  ' + source_version.page.presentation_name + " version " + source_version.version.to_s) ,:controller => 'versions',:action => 'show',:id => source_version.id)  
-          else
-            if  version.version != source_version.version + 1
-              link <<  " (based on "
-              link << link_to(" version " + source_version.version.to_s,:controller => 'versions',:action => 'show',:id => source_version.id)
-              link <<  ")"
-            end
-          end
-        end
-      end
-      if version.current
-        link << image_tag('harvest.gif', :title => 'This version is the current version')
-      end
-      checkout = version.checkout
-      if  checkout
-        user = checkout.user
-        link << link_to(image_tag('checkout.gif', :border => 0, :title =>'Version is checked-out by ' + user.name ),:controller => 'versions',:action => 'show',:id => version.id)
-        link << " " 
-        if user == session['user'] || cadmin?
-          link << link_to(image_tag('edit.gif', :border => 0, :title =>'Version is checked-out by you. Click to continue editing.' ),:controller => 'pages',:action => 'edit',:checkout_id => checkout.id)
-        end
-      end
-      link << link_to(image_tag('compare.gif', :border => 0, :title =>'Compare with previous version' ),:controller => 'versions', :action => 'diff',:id => version) 
-      link << link_to(image_tag('txt.gif', :border => 0,  :title =>'View as plain text' ), {:controller => 'versions',:action => 'text',:id => version})
-    end.join("\n")
-  end
-                      
-  # Helper for a Version 
-  def link_to_version2(version)
-    link_to_page(version.page) + ' ' + link_to_version(version,'version')
-  end
-                        
-  # Helper for a Site
-  def link_to_site(site)
-    img = "link.gif"
-    img = "link_gs.gif" if !site.wiki?
-    ttl = site.title
-    ttl = site.title + ' (OBSOLETE)' unless site.obsolete_on.nil?
-    link = link_to(ttl,:controller => 'sites',:action => 'description',:id => site.id) #if !admin?
-    link += ' ' + link_to(image_tag(img,:border => 0,:title => "Activate site \"#{site.title}\""), site.url, :title => "Activate site \"#{site.title}\"", :popup => true)
-    if  site.type == 'BaselineProcess'
-      link += ' ' + link_to(image_tag("csv.gif", :border => 0, :title => "Download content information as CSV"), {:controller => "sites", :action => "csv", :id => site.id}, :method => :post )
-    end 
-    return link
-  end
-                          
-  # link_to helper method for a User
-  def link_to_user(user)
-    link_to(user.name,:controller => 'users',:action => 'show',:id => user.id) + image_tag("user" + user.admin + '.png', :border => 0, :title => "") 
-  end
-                            
-  # link_to helper method for a Comment
-  def link_to_comment(comment)
-    link_to(truncate(strip_tags(comment.text)), :controller => 'pages', :action => 'discussion', :site_folder => comment.site.folder, :id => comment.page.id)
-  end
-                              
-  # returns unique div id from a record in a page
-  def div_id(record, call_id)
-    return  record.class.to_s + record.id.to_s + "_" + call_id
-  end
-                              
-  # helper method for a displaying navigation links to first, next, previous, last pages to use when displaying records in pages.
-  # See preserving parameters [http://64.233.183.104/search?q=cache:VZkWDCGLNBIJ:wiki.rubyonrails.com/rails/show/HowtoPagination+pagination+how+to+ruby+on+rails&hl=nl&gl=nl&ct=clnk&cd=4]
-  def links_to_pages(pages)
-    if pages.length > 1
-      returning link = [] do
-        link << '<p>'
-      link << link_to(image_tag('first_page.png', :border => 0, :align=>"middle", :title => "First Page"), {:params => params.merge(:page => 1)} ) if pages.current.previous
-      link << image_tag('first_page_disabled.png', :border => 0, :align=>"middle", :title => "First Page")  if !pages.current.previous
-      link << link_to(image_tag('previous_page.png', :border => 0, :align=>"middle", :title => "Previous Page"), {:params => params.merge(:page => pages.current.previous)}) if pages.current.previous
-      link << image_tag('previous_page_disabled.png', :border => 0, :align=>"middle", :title => "Previous Page")  if !pages.current.previous  
-      link << "<small>[" + pages.current.number.to_s + "/" + pages.length.to_s + "]</small>"
-      link << link_to(image_tag('next_page.png', :border => 0, :align=>"middle", :title => "Next Page"),  {:params => params.merge(:page => pages.current.next)}) if pages.current.next
-      link << image_tag('next_page_disabled.png', :border => 0, :align=>"middle", :title => "Next Page")  if !pages.current.next
-      link << link_to(image_tag('last_page.png', :border => 0, :align=>"middle", :title => "Last Page"), {:params => params.merge( :page => pages.last)}) if pages.current.next
-      link << image_tag('last_page_disabled.png', :border => 0, :align=>"middle", :title => "Last Page")  if !pages.current.next
-      link << '</p>'
-      end.join("\n")
-    end
-  end
-                                  
-end
-                                
diff --git a/source/app/models/admin_message.rb b/source/app/models/admin_message.rb
deleted file mode 100644
index 98e5285..0000000
--- a/source/app/models/admin_message.rb
+++ /dev/null
@@ -1,26 +0,0 @@
-#--######################################################################
-# Copyright (c) 2006 Logica
-# 
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# 
-# Onno van der Straaten:: initial implementation
-#++######################################################################
-# {Copyright (c) 2006 Logica}[link:files/COPYRIGHT.html]
-
-class AdminMessage < DaText
-  
-  def self.text(id)
-    msg = AdminMessage.find_by_guid(id)
-    if msg
-      msg.text
-    else
-      nil
-    end
-  end
-  
-end
\ No newline at end of file
diff --git a/source/app/models/baseline_process.rb b/source/app/models/baseline_process.rb
deleted file mode 100644
index a069d3a..0000000
--- a/source/app/models/baseline_process.rb
+++ /dev/null
@@ -1,118 +0,0 @@
-#--######################################################################
-# Copyright (c) 2006 Logica
-# 
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# 
-# Onno van der Straaten:: initial implementation
-#++######################################################################
-# {Copyright (c) 2006 Logica}[link:files/COPYRIGHT.html]
-
-class BaselineProcess < Site
-
-  has_many :updates
-
-  # during creation of a new static Site this stores the zip-file that contains the content
-  attr_accessor :file 
-
-  # Method #new_upload to process a upload of content for a baseline process
-  def self.new_from_upload(params = nil)
-    logger.info("Site.new_upload #{params.inspect}")
-    site = BaselineProcess.new(params)
-    unless site.file.blank?
-      site.errors.add(:file, 'can\'t be blank') if  site.file.original_filename.blank?
-      site.errors.add(:file, 'needs to be a zip file') if site.file.original_filename.downcase.reverse[0..3] != 'piz.'
-      site.errors.add(:file, 'needs to be named using only characters, numbers, dots and underscores') unless site.file.original_filename =~ /\A[._a-zA-Z0-9]+\z/
-      site.folder = File.basename(site.file.original_filename, '.zip')
-      logger.info("Foldername for Baseline Process will be #{site.folder}")
-      site.errors.add(:folder, 'already exists') if  File.exists?(site.path) && !site.folder.blank? 
-      site.errors.add(:folder, 'is already being used by a Baseline Process') if  !BaselineProcess.find(:first, :conditions => ['folder =?', site.folder]).nil?
-      if site.errors.empty?
-        logger.debug("Writing upload zip to #{site.path2zip}")
-        File.open(site.path2zip, "wb") { |f| f.write(site.file.read) }
-        site.unzip_upload 
-      end
-    else
-      site.errors.add(:file, 'no zip file was selected for upload') 
-    end 
-    return site
-  end
-
-  # Return collection of Baseline Processes that need to scanned
-  def self.find_2scan
-    return BaselineProcess.find(:all, :conditions => ['content_scanned_on is null'], :order => "title ASC")
-  end
-
- # Method #scan4content scans the site folder for pages that can be wikified
-  def scan4content
-    logger.info("Scanning content in site #{self.title}")
-    self.pages = []
-    if self.content_scanned_on.nil?    
-      files = self.files_wikifiable
-      self.wikifiable_files_count = files.size # TODO obsolete?
-      files.each do |f|
-        page = BaselineProcessPage.new(:rel_path => f.gsub(self.path + '/', ''), :site => self, :tool => 'EPFC', :status => 'N.A.')
-        self.pages << page
-      end
-      self.content_scanned_on = Time.now
-      self.save!
-    else
-      logger.info("Content has already been scanned!")
-    end
-  end
-
-  # Method #unused_folders returns folders with content that have not been used to create a BaselineProcess
-  def self.unused_folders
-    sites_path = "#{ENV['EPFWIKI_ROOT_DIR']}#{ENV['EPFWIKI_PUBLIC_FOLDER']}/#{ENV['EPFWIKI_SITES_FOLDER']}"
-    File.makedirs(sites_path)
-    entries = Dir.entries(sites_path) - ['.', '..', 'compare', '.svn']
-    folders = []
-    entries.each do |entry|
-      if File.ftype(File.expand_path(entry, sites_path)) == 'directory' 
-        folders << entry
-      end
-    end
-    used_folders = BaselineProcess.find(:all, :conditions => ['obsolete_on is null']).collect {|bp| bp.folder}    
-    return folders - used_folders
-  end 
-
-  def url(absolute = false, request_host = ENV['EPFWIKI_HOST'])
-    s = "/#{ENV['EPFWIKI_SITES_FOLDER']}/#{self.folder}/index.htm"
-    s = "http://#{request_host}#{s}" if absolute
-    s
-  end 
-  
-  #--
-  # TODO do this for Wikis as well, including status
-  #++
-  def export_csv
-    path_csv = "#{self.path}.csv"
-    logger.info("Exporting #{self.title} to csv #{path_csv}")
-    self.scan4content if !self.content_scanned_on
-    csv_file = File.new(path_csv, 'w')
-    csv_file.puts("\"" + ['Plugin', 'UMA Type', 'Element Type', 'Presentation Name', 'Name', 'Relative path', 'URL'].join("\";\"") + "\"")
-    self.pages.each do |page|
-      plugin_name = page.rel_path.split('/')[0]
-      type = page.uma_type
-      name = page.uma_name
-      url = "http://#{ENV['EPFWIKI_HOST']}/#{self.rel_path}/#{page.rel_path}"
-      csv_file.puts("\"" + [plugin_name, type, page.uma_type, page.presentation_name, name, page.rel_path, url].join("\";\"") + "\"")
-    end
-    csv_file.close
-  end
-  
-  def validate
-    errors.add(:folder, 'doesn\'t exist') if self.folder.nil? || !File.exists?(self.path)
-    errors.add(:folder, "does not seem to contain a valid site, no index.htm was found") if !File.exists?(self.path + '/index.htm') 
-  end
-
-  def validate_on_create
-    logger.debug('Validate on create')
-    errors.add(:folder, 'was already used to create a baseline process') if !self.folder.nil? && BaselineProcess.find_all_by_folder(self.folder).size > 0
-  end
-
-end
\ No newline at end of file
diff --git a/source/app/models/baseline_process_page.rb b/source/app/models/baseline_process_page.rb
deleted file mode 100644
index 80edbd4..0000000
--- a/source/app/models/baseline_process_page.rb
+++ /dev/null
@@ -1,16 +0,0 @@
-#--######################################################################
-# Copyright (c) 2006 Logica
-# 
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# 
-# Onno van der Straaten:: initial implementation
-#++######################################################################
-# {Copyright (c) 2006 Logica}[link:files/COPYRIGHT.html]
-
-class BaselineProcessPage < Page
-end
\ No newline at end of file
diff --git a/source/app/models/baseline_process_version.rb b/source/app/models/baseline_process_version.rb
deleted file mode 100644
index 593e270..0000000
--- a/source/app/models/baseline_process_version.rb
+++ /dev/null
@@ -1,25 +0,0 @@
-#--######################################################################
-# Copyright (c) 2006 Logica
-# 
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# 
-# Onno van der Straaten:: initial implementation
-#++######################################################################
-# {Copyright (c) 2006 Logica}[link:files/COPYRIGHT.html]
-
-class BaselineProcessVersion < Version
-  
-  belongs_to  :baseline_process, :foreign_key => 'baseline_process_id'
-
-  validates_presence_of  :baseline_process
-  
-  def path
-    return self.baseline_process.path + '/' + self.page.rel_path
-  end
-  
-end
\ No newline at end of file
diff --git a/source/app/models/checkout.rb b/source/app/models/checkout.rb
deleted file mode 100644
index 9c9673b..0000000
--- a/source/app/models/checkout.rb
+++ /dev/null
@@ -1,136 +0,0 @@
-# A Checkout is a working copy (Version) of a Page created so that 
-# it can be edited. The HTML to create the version is typically 
-# copied from the source version but it is also possible to provide it
-# using the parameter :html
-#
-# More information:
-# * {EPF Wiki Data model}[link:files/doc/DATAMODEL.html]
-#--######################################################################
-# Copyright (c) 2006 Logica
-# 
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# 
-# Onno van der Straaten:: initial implementation
-#++######################################################################
-# {Copyright (c) 2006 Logica}[link:files/COPYRIGHT.html]
-
-class Checkout < ActiveRecord::Base
-  
-  belongs_to :version
-  belongs_to :user
-  belongs_to :page
-  belongs_to :site
-  
-  # Version we are checking out
-  attr_accessor :source_version
-  
-  # Note supplied with checkout will be used to create Version.note
-  attr_accessor :note
-  attr_accessor :html
-  
-  validates_presence_of :user, :page, :site, :version, :source_version
-  
-  HTML_START_ELEMENT = /<html([^\<])*/
-  
-  def undo
-    logger.info("Undo of checkout #{self.id}")
-    self.version.destroy
-    self.page.destroy if self.page.versions.size == 0 # If no versions remain, this must be a new page, so we also remove the page
-    self.destroy
-  end
-  
-  def checkin(user, h = nil)
-    logger.info("Checkin of version #{self.version.path}")
-    raise 'Cannot checkin, checked is not owned by user' if user != self.user && !user.cadmin?
-    h = self.version.html if h.nil?
-
-    # reset current attribute if set on a version
-    cv = self.page.current_version 
-    if !cv.nil? && cv.current
-      cv.current = false
-      cv.save!
-    end
-    Notification.find_or_create(self.page, self.user, Page.name)
-    old_path = self.version.path
-    self.version.version = self.page.max_version_no + 1
-    self.version.rel_path = "#{self.page.rel_path}_EPFWIKI_v#{self.version.version}.html"
-    logger.info("Moving version file from #{old_path} to #{self.version.path}")
-    File.move(old_path, self.version.path)
-    self.version.save!
-    
-    # Correct head tag of version file
-    # TODO rename HEAD_PATTERN -> HEAD_REGEXP
-    unless h.index(Page::HEAD_PATTERN).nil?
-      logger.info("Head element found, replacing it with head element of original page")
-      h = h.gsub(Page::HEAD_PATTERN, self.page.head_tag)
-    else
-      unless h.index(HTML_START_ELEMENT).nil?
-        logger.info("HTML element found, adding a head element to it")
-        h = h.gsub(HTML_START_ELEMENT, HTML_START_ELEMENT.match(h)[0] + self.page.head_tag)
-      else
-        logger.info("No head or html element found, adding head element and letting tidy do the rest")
-        h = self.page.head_tag + h
-      end
-    end
-    logger.info("Removing EPF Wiki Javascript library includes")
-    h = h.gsub(Page::PAGE_HEAD_SNIPPET_PATTERN,'') if h.index(Page::PAGE_HEAD_SNIPPET_PATTERN)
-    self.version.html = h
-    
-    # copy version to page and enhance
-    self.page.html = self.version.html
-    Page.enhance_file(self.page.path) 
-    h= self.page.html
-    h = h.gsub(Page::BODY_TAG_PATTERN, self.page.body_tag ) if self.page.body_tag
-    h = h.gsub(Page::TREEBROWSER_PLACEHOLDER, self.page.treebrowser_tag) if self.page.treebrowser_tag
-    h = h.gsub(Page::COPYRIGHT_PLACEHOLDER, self.page.copyright_tag) if self.page.copyright_tag
-    h = h.gsub('class="pageTitle"', 'nowrap="true" class="pageTitle"') # TODO workaround for 250148: No-wrap should be part of CSS file https://bugs.eclipse.org/bugs/show_bug.cgi?id=250148
-    self.page.html = h
-    # TODO set title equal to pageTitle? 
-    self.destroy
-  end
-  
-  def before_validation_on_create
-    logger.info("Before validation on create of checkout for #{self.page.presentation_name}")
-    raise "Versions can only be created in Wiki sites" if !self.site.wiki?
-    raise "Cannot create a checkout, a checkout already exists" if self.page.checkout 
-    
-    self.source_version = self.page.current_version if self.source_version.nil?
-    
-    logger.debug("Creating version for checkout")
-    self.version = UserVersion.new(:wiki => self.site, :page => self.page, :user => self.user, :source_version => self.source_version)
-    self.version.rel_path = "#{self.page.rel_path}_EPFWIKI_co.html"    
-    File.makedirs(File.dirname(self.version.path))
-    self.version.note = self.note
-    # Method #prepare_for_edit is used to prepare the file for editing in 
-    # the HTML editor that runs in the browser:
-    # 1. onload event is removed from the body element
-    # 2. Javascript lib treebrowser.js that chrashes the editor is replaced by a placeholder comment tag
-    # 3. the EPF iframe element is removed
-    # 4. the copyright_tag is replaced by a placeholder tag # DISABLED, didn't work after upgrade of EPF
-    # 5. head tag is removed, because this TinyMCE cannot (and should not) manage this (this was BUG 96 - Doubling meta-tags)
-    # 
-    # See also #Page.before_create 
-    #-- 
-    # TODO step 4 does not seem to work anymore with current version of OpenUP (EPF) 
-    # TODO move to version as part of checkout
-    #++ 
-    h = self.html # TODO is this right? document this
-    h = self.source_version.html if h.blank?
-    h = h.gsub(Page::BODY_TAG_PATTERN, '<body>') # 1
-    h = h.gsub(Page::TREEBROWSER_PATTERN, Page::TREEBROWSER_PLACEHOLDER) # 2
-    #html = html.gsub(COPYRIGHT_PATTERN, COPYRIGHT_PLACEHOLDER) # 4
-    h = h.gsub(Page::HEAD_PATTERN, '') # 5
-    self.version.html = h
-  end
-  
-  def validate_on_create
-    logger.debug('validate_on_create')
-    errors.add(:site, 'can\'t be a baseline process') if self.site.baseline_process?
-  end  
-  
-end
\ No newline at end of file
diff --git a/source/app/models/comment.rb b/source/app/models/comment.rb
deleted file mode 100644
index 99a3b69..0000000
--- a/source/app/models/comment.rb
+++ /dev/null
@@ -1,50 +0,0 @@
-#--######################################################################
-# Copyright (c) 2006 Logica
-# 
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# 
-# Onno van der Straaten:: initial implementation
-#++######################################################################
-# {Copyright (c) 2006 Logica}[link:files/COPYRIGHT.html]
-
-class Comment < DaText
-
-    belongs_to :site 
-    belongs_to :user 
-    belongs_to :page
-    belongs_to :version 
-
-    validates_presence_of :text, :user, :page, :site, :version
-
-    # Set some redundant properties
-    #--
-    # TODO remove these redundant properties
-    #++
-    def before_validation_on_create 
-      if self.version.nil?
-        if self.page.current_version
-          self.version = self.page.current_version 
-        end
-      end
-      unless self.version.nil?
-        self.page = self.version.page 
-     end
-     self.site = self.page.site
-    end
-
-    def validate_on_create
-      if self.version.nil?
-        errors.add("Cannot comment on new pages that are in the process of being created (not checked in yet). Comments would be left dangling on undo checkout.")       
-      end
-    end
-    
-    def after_create
-      Notification.find_or_create(self.page, self.user, Page.name)
-    end
-
-end
\ No newline at end of file
diff --git a/source/app/models/da_text.rb b/source/app/models/da_text.rb
deleted file mode 100644
index 0fd8f22..0000000
--- a/source/app/models/da_text.rb
+++ /dev/null
@@ -1,31 +0,0 @@
-#--######################################################################
-# Copyright (c) 2006 Logica
-# 
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# 
-# Onno van der Straaten:: initial implementation
-#++######################################################################
-# {Copyright (c) 2006 Logica}[link:files/COPYRIGHT.html]
-
-# Text is a reserved word, so we use DaText
-class DaText < ActiveRecord::Base
-  
-    belongs_to :reviewer, :class_name => "User", :foreign_key => "reviewer_id"  
-
-    # CommentsController and FeedbacksController don't have own list actions, so we use this attribute
-    # to redirect back to whereever we came from. 
-    attr_accessor :request_referer
-    #-- 
-    # TODO problably there is a better way to do this
-    #++    
-  
-end
-
-
-
-
diff --git a/source/app/models/feedback.rb b/source/app/models/feedback.rb
deleted file mode 100644
index 63faf2e..0000000
--- a/source/app/models/feedback.rb
+++ /dev/null
@@ -1,18 +0,0 @@
-#--######################################################################
-# Copyright (c) 2006 Logica
-# 
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# 
-# Onno van der Straaten:: initial implementation
-#++######################################################################
-# {Copyright (c) 2006 Logica}[link:files/COPYRIGHT.html]
-
-class Feedback < DaText
-  validates_presence_of :email, :text
-  belongs_to :user
-end
diff --git a/source/app/models/notification.rb b/source/app/models/notification.rb
deleted file mode 100644
index 5cc5929..0000000
--- a/source/app/models/notification.rb
+++ /dev/null
@@ -1,41 +0,0 @@
-# More information:
-# * {EPF Wiki Data model}[link:files/doc/DATAMODEL.html]
-#--######################################################################
-# Copyright (c) 2006 Logica
-# 
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# 
-# Onno van der Straaten:: initial implementation
-#++######################################################################
-# {Copyright (c) 2006 Logica}[link:files/COPYRIGHT.html]
- 
-class Notification < ActiveRecord::Base
-
-    belongs_to :user
-    belongs_to :page
-    belongs_to :site
-
-    #--
-    # TODO user class as third parameter?
-    #++ 
-    def self.find_all_users(page, class_name)
-      Notification.find(:all, :conditions => ["page_id=? and notification_type=?", page.id, class_name]).collect {|n|n.user}
-    end
-    
-    def self.find_or_create(page, user, class_name)
-      logger.info("Finding or creating notification for #{user.name} for #{page.presentation_name} and type #{class_name}")
-      n = Notification.find(:first, :conditions => ['page_id=? and notification_type=? and user_id=?',page.id, class_name, user.id])   
-      if n.nil?
-        logger.info("No")
-        n = Notification.create(:notification_type => class_name, :user => user, :page => page)
-      end
-      return n
-    end
-
-end
-    
diff --git a/source/app/models/notifier.rb b/source/app/models/notifier.rb
deleted file mode 100644
index b9a846c..0000000
--- a/source/app/models/notifier.rb
+++ /dev/null
@@ -1,201 +0,0 @@
-# More information:
-# * {EPF Wiki Data model}[link:files/doc/DATAMODEL.html]
-#--######################################################################
-# Copyright (c) 2006 Logica
-# 
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# 
-# Onno van der Straaten:: initial implementation
-#++######################################################################
-# {Copyright (c) 2006 Logica}[link:files/COPYRIGHT.html]
-
-class Notifier < ActionMailer::Base
-  
-  def welcome_pw_confirmationlink(user, request_host = ENV['EPFWIKI_HOST'])
-    content_type "text/html"
-    @recipients = user.email
-    @from = ENV['EPFWIKI_REPLY_ADDRESS']
-    @subject =  "[" + ENV['EPFWIKI_APP_NAME'] + "] Welcome" 
-    @body['user'] = user
-    @body['admin'] = User.find_central_admin
-    @body['subject'] = @subject
-    @body['request_host'] = request_host
-  end
-  
-  
-  def lost_password(user, urls)
-    content_type "text/html"
-    @recipients = user.email
-    @from = ENV['EPFWIKI_REPLY_ADDRESS']
-    @subject = "[" + ENV['EPFWIKI_APP_NAME'] + "] New Password"
-    @body['user'] = user
-    @body['admin'] = User.find_central_admin
-    @body['cnt'] = User.count
-    @body['urls'] = urls
-  end
-
-  def error_report(exception, trace, session, params, env, sent_on = Time.now)
-    content_type "text/html" 
-    @recipients         = User.find_central_admin.email
-    @from               = ENV['EPFWIKI_REPLY_ADDRESS']
-    @subject            = "[Error] exception in #{env['REQUEST_URI']}" 
-    @sent_on            = sent_on
-    @body["exception"]  = exception
-    @body["trace"]      = trace
-    @body["session"]    = session
-    @body["params"]     = params
-    @body["env"]        = env
-  end
-  
-  def summary(params, runtime = Time.now)
-    content_type "text/html" 
-    
-    case params[:type]
-    when 'D' # daily
-      starttime = (runtime - 1.day).at_beginning_of_day
-      endtime = runtime.at_beginning_of_day
-      @bcc = email_addresses_4_report(User.find_all_by_notify_daily(1))
-      subject_text = 'Daily'
-    when 'W' # weekly
-      starttime = (runtime - 1.week).at_beginning_of_week
-      endtime = runtime.at_beginning_of_week
-      @bcc = email_addresses_4_report(User.find_all_by_notify_weekly(1))
-      subject_text = 'Weekly'
-    when 'M' # monthly
-      starttime = (runtime - 1.month).at_beginning_of_month
-      endtime = runtime.at_beginning_of_month
-      @bcc = email_addresses_4_report(User.find_all_by_notify_monthly(1))
-      subject_text = 'Monthly'
-    else
-      raise 'Report type is required'
-    end
-    
-    @bcc = email_addresses_4_report(params[:user]) unless params[:user].blank?
-    @subject = "[#{ENV['EPFWIKI_APP_NAME']}] #{subject_text} Summary" 
-
-    items = UserVersion.find(:all, :conditions => ['created_on > ? and created_on < ?', starttime, endtime ]) +
-    Comment.find(:all, :conditions => ['created_on > ? and created_on < ?', starttime, endtime ]) +
-    Upload.find(:all, :conditions => ['created_on > ? and created_on < ?', starttime, endtime ]) +
-    Wiki.find(:all, :conditions => ['created_on > ? and created_on < ?', starttime, endtime ])+
-    Update.find(:all, :conditions => ['created_on > ? and created_on < ?', starttime, endtime ]) +
-    User.find(:all, :conditions => ['created_on > ? and created_on < ?', starttime, endtime ]) +
-    WikiPage.find(:all, :conditions => ['created_on > ? and created_on < ? and tool=?', starttime, endtime, 'Wiki'])
-    Checkout.find(:all)
-    items.sort_by {|item|item.created_on}
-    @body['wikis'] = []
-    items.each do |item|
-      logger.debug("item: #{item.inspect}")
-      w = nil
-      case item.class.name
-      when Comment.name then w = item.site
-      when Wiki.name then w = item
-      when Update.name then w = item.wiki
-      when Checkout.name then w = item.site
-      when Version.name then w = item.wiki
-      end
-      @body['wikis'] << w if !w.nil?
-    end
-    @body['wikis'] = @body['wikis'].uniq    
-    @from               = ENV['EPFWIKI_REPLY_ADDRESS']
-    @sent_on            = Time.now
-    @body['runtime']    = runtime
-    @body['endtime']    = endtime
-    @body['starttime']  = starttime
-    @body['contributions']   = items
-    @body['subject']    = subject
-    @body['admin']      = User.find_central_admin
-    @body['host']       = ENV['EPFWIKI_HOST']
-    @body['items'] = items
-  end 
-  
-  def env_to(user, session, params, env, sent_on = Time.now)
-    content_type "text/html" 
-    @recipients         = user.email
-    @from               = ENV['EPFWIKI_REPLY_ADDRESS']
-    @subject            = "[" + ENV['EPFWIKI_APP_NAME'] + "] " + params[:action]
-    @sent_on            = sent_on
-    @body["session"]    = session
-    @body["params"]     = params
-    @body["env"]        = env
-  end
-  
-  def site_status(update, subject)
-    content_type "text/html" 
-    @from = ENV['EPFWIKI_REPLY_ADDRESS']
-    @body['admin'] = User.find_central_admin
-    @subject =  "[#{ENV['EPFWIKI_APP_NAME']}] #{subject}"
-    @body['subject'] = @subject
-    @recipients = update.user.email
-    @cc = @body['admin'].email
-    @body['update'] = update
-  end
-  
-  def notification(theUsers, subject, introduction, text, request_host = ENV['EPFWIKI_HOST'])
-    @from = ENV['EPFWIKI_REPLY_ADDRESS']
-    content_type "text/html" 
-    @subject = "[#{ENV['EPFWIKI_APP_NAME']}] #{subject}" 
-    @bcc = email_addresses_4_report(theUsers)
-    @body['link'] = "<a href=\"http://#{request_host}/users/account\">#{ENV['EPFWIKI_APP_NAME']}</a>"
-    @body['introduction'] = introduction
-    @body['text'] = text
-    @body['admin'] = User.find_central_admin
-    @body['subject'] = @subject
-  end
-  
-  # TODO replace with notification
-  def email(theUsers, theSubject, theFilePaths, theText, cc = nil)
-    @from = ENV['EPFWIKI_REPLY_ADDRESS']
-    @cc = email_addresses_4_report(cc) unless cc.nil?
-    content_type "text/html" 
-    @subject = "[" + ENV['EPFWIKI_APP_NAME'] + "] " + theSubject
-    @recipients = email_addresses_4_report(theUsers)
-    @body['text'] = theText
-    @body['admin'] = User.find_central_admin
-    for filePath  in theFilePaths
-      attachment :content_type => "application/zip",   :body => File.open(filePath, "rb") {|io| io.read}, :filename => filePath.split("/").last
-    end
-  end
-  
-  def contributions_processed(user, contributions)
-    @recipients = email_addresses_4_report(user)
-    content_type "text/html" 
-    @body['contributions'] = contributions
-    @body['admin'] = User.find_central_admin
-    @body['user'] = user
-    @from = ENV['EPFWIKI_REPLY_ADDRESS']
-    @bcc = email_addresses_4_report(@body['admin'])
-    @subject = "[#{ENV['EPFWIKI_APP_NAME']}] Your contribution has been processed"
-    @body['subject'] = @subject
-  end
-  
-  def authorisation_problem(user, session, params, env)
-    user = User.new(:name => 'Unknown', :email => 'Unknown') if user.nil?
-    content_type 'text/html' 
-    @body['admin']     = User.find_central_admin 
-    @recipients         = email_addresses_4_report(@body['admin'])
-    @from               = ENV['EPFWIKI_REPLY_ADDRESS']
-    @subject            = "[#{ENV['EPFWIKI_APP_NAME']}] Autorisation Problem Detected"
-    @body['session']    = session
-    @body['params']     = params
-    @body['env']        = env
-    @body['subject']    = @subject
-    @body['user']       = user
-  end
-  
-  def feedback(feedback)
-    content_type 'text/html' 
-    @body['admin']     = User.find_central_admin 
-    @recipients         = email_addresses_4_report(@body['admin'])
-    @from               = ENV['EPFWIKI_REPLY_ADDRESS']
-    @subject            = "[#{ENV['EPFWIKI_APP_NAME']}] Feedback Posted"
-    @body['subject']    = @subject
-    @body['feedback']   = feedback
-    @body['anywiki']    = Wiki.find(:first, :conditions => ['obsolete_on is null'])
-  end
-
-end
diff --git a/source/app/models/page.rb b/source/app/models/page.rb
deleted file mode 100644
index c4d51fb..0000000
--- a/source/app/models/page.rb
+++ /dev/null
@@ -1,158 +0,0 @@
-# More information:
-# * {EPF Wiki Data model}[link:files/doc/DATAMODEL.html]
-#--######################################################################
-# Copyright (c) 2006 Logica
-# Copyright (c) 2008 IBM
-# 
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# 
-# Onno van der Straaten:: initial implementation
-# Ricardo Balduino:: tweaked method that returns brief description of UMA elements (overviewTable)
-#++######################################################################
-# {Copyright (c) 2006 Logica, 2008 IBM.}[link:files/COPYRIGHT.html]
-
-class Page < ActiveRecord::Base
-  
-  belongs_to :site #, :dependent => :destroy  
-
-  validates_format_of :status, :with => /N.A|New|Updated|Undetermined|RemovedOrMoved|Harvested/ 
-  validates_format_of :tool, :with => /EPFC|Wiki/   
-  
-  validates_presence_of   :rel_path, :site #, :presentation_name, :uma_type, :filename
-  #validates_length_of     :filename, :maximum => 250
-  #validates_length_of     :uma_type, :maximum => 100
-  #validates_length_of     :presentation_name, :maximum => 500
-  validates_length_of     :rel_path, :maximum => 250
-  
-  # For creating a new page, use to specify the source version of the template or page
-  # NOTE: depending where it is used (view or model) this stores an Id or and object.
-  attr_accessor :source_version
-  
-  # For creating a new page, use to specify the user
-  attr_accessor :user
-  
-  # When creating a new page, use to supply a note for creating the version
-  attr_accessor :note
-  
-  # Used to remove HTML fragment that wikifies the HTML file so it can be edited. 
-  PAGE_HEAD_SNIPPET_PATTERN = /<!-- epfwiki head.*head end -->/m
-  # Used to replace treebrowser.js from HTML files because it chrashes the HTML editor 
-  TREEBROWSER_PATTERN = /<script.*?scripts\/treebrowser\.js.*?<\/script>/i
-  # Placeholder for TREEBROWSER_PATTERN , so we can easily place it back in the file
-  TREEBROWSER_PLACEHOLDER = "<div id=\"treebrowser_tag_placeholder\"/>"
-  # Used to remove onload event from HTML files because it chrashed the HTML Editor
-  BODY_TAG_PATTERN = /<body.*>/i
-  # Used to add the page_script
-  BODY_CLOSING_TAG_PATTERN = /<\/body>/i
-  # Used to fix some layout problems with the 'horizontal rule'
-  SHIM_TAG_PATTERN = /images\/shim.gif(")?( )*\/?>.?( )*?.?( )*?<\/td>/im 
-  # Used to fix some layout problems with the 'horizontal rule'
-  SHIM_TAG = "images/shim.gif\" /></td>"
-  # Used to replace copyright notice from the file so it can be edited.
-  COPYRIGHT_PATTERN = /<p>( )*?(.)?( )*?copyright(.)*?<\/p>/im 
-  # Placeholder for copyright notice we find with COPYRIGHT_PATTERN
-  COPYRIGHT_PLACEHOLDER = "<!-- copyright statement -->"
-  TITLE_PATTERN = /<title>(.)*<\/title>/i
-  HEAD_PATTERN = /<head>(.)*<\/head>/im
-  TITLE2_PATTERN = /class="pageTitle">(.)*<\/td>/ # TODO use regular expressions the right way
-  TITLE2_START = /class="pageTitle">/i 
-  TITLE2_END = /<\/td>/ 
-  ELEMENT_TYPE_PATTERN = /<meta(.)*element_type(.)*>/i
-  
-  def self.get_snippets
-      return [IO.readlines(File.expand_path('app/models/page_head_snippet.txt', RAILS_ROOT)).join]
-  end
-  
-  # Method #enhance_file enhances a file if it hasn't been enhanced yet 
-  # with e.g. Javascript libs, CSS, (script) elements
-  def self.enhance_file(path, snippets = Page.get_snippets)
-    h = IO.readlines(path).join 
-    if h.index('epfwiki head start')
-      logger.info("File skipped (already enhanced): #{path}")
-    else
-      new_html = h.gsub(/<\/head>/i, snippets[0] + "\n</head>")
-      new_html = new_html.gsub("width=\"100%\"", "width=\"99%\"")  # workaround to prevent scrollbar from being displayed
-      file = File.new(path, "w")
-      file.puts(new_html)
-      file.close
-    end
-  end
-  
-  def path
-    return self.site.path + '/' + self.rel_path 
-  end
-  
-  def html
-    IO.readlines(self.path).join
-  end
-
-  def url(absolute = false, request_host = nil)
-    self.site.url(absolute, request_host).gsub('/index.htm','/') + self.rel_path
-  end
-
-  # extracts and returns the UMA Presentation Name from HTML
-  def self.uma_presentation_name_from_html(html)
-    return uma_value_from_html(html, /<meta.*? name="uma\.presentationName".*?>/)
-  end
-
-  # UMA Name from HTML
-  def self.uma_name_from_html(html)
-    return uma_value_from_html(html, /<meta.*? name="uma\.name".*?>/)
-  end
-
-  # UMA Type from HTML
-  def self.uma_type_from_html(html)
-    return uma_value_from_html(html, /<meta.*? name="uma\.type".*?>/)
-  end
-
-  # Order of content and name does not seem to be always the same? 
-  # So this method is independent of order 
-  def self.uma_value_from_html(html, pattern)
-    match = pattern.match(html)
-    result = ''
-    if match
-      match2 = /content="(.*?)"/.match(match[0])
-      result = match2[1] if match2
-    end
-    return result
-  end
-  
-  def overview_table
-    match = /class="overviewTable".*?>(.*?)<\/table>/m.match(self.html)
-    if match # some pages may not have overviewTable section
-      match1 = /td.*?>(.*?)<\/td>/m.match(match[1]) # returns only the text from the overviewTable section
-      if match1
-        result = match1[1]
-      end
-    else
-      result = ""
-    end
-    
-    return result
-  end
-  
-  def validate_on_create
-    if self.tool == 'Wiki'
-      errors.add(:rel_path, "already used; can\'t create another page with relative path #{self.rel_path}") if Page.exists?(['rel_path = ? and site_id = ?',self.rel_path, self.site.id])
-    end
-  end
-  
-  def before_create
-    h = self.html
-    self.uma_type = Page.uma_type_from_html(h)
-    self.uma_name = Page.uma_name_from_html(h)
-    logger.debug("...#{Page.uma_presentation_name_from_html(h)}")
-    self.presentation_name = Page.uma_presentation_name_from_html(h)
-    self.filename = File.basename(self.path)
-    self.body_tag = BODY_TAG_PATTERN.match(h).to_s
-    self.treebrowser_tag = TREEBROWSER_PATTERN.match(h).to_s
-    self.copyright_tag = COPYRIGHT_PATTERN.match(h).to_s
-    self.head_tag = Page::HEAD_PATTERN.match(h).to_s
-  end
-
-end
diff --git a/source/app/models/page_head_snippet.txt b/source/app/models/page_head_snippet.txt
deleted file mode 100644
index 59afdf7..0000000
--- a/source/app/models/page_head_snippet.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-<!-- epfwiki head start -->
-<script src="/javascripts/prototype.js" type="text/javascript" language="JavaScript"></script>
-<link href="/stylesheets/wiki.css" media="screen" rel="Stylesheet" type="text/css" />
-<script src="/javascripts/wiki.js" type="text/javascript" language="JavaScript"></script>
-<!-- epfwiki head end -->
\ No newline at end of file
diff --git a/source/app/models/site.rb b/source/app/models/site.rb
deleted file mode 100644
index 5f85e4e..0000000
--- a/source/app/models/site.rb
+++ /dev/null
@@ -1,159 +0,0 @@
-# A Site can be a BaselineProcess (static, published website from EPF) or a Wiki, 
-# which is an enhanced EPFC site. Baseline Processes are 
-# used to create or update Wiki sites.
-#
-# Creation or update of a Wiki is a two step process for performance reasons.
-# This way the second step can be performed using a job that runs at night.
-# 
-# More information:
-# * {EPF Wiki Data model}[link:files/doc/DATAMODEL.html]
-#--######################################################################
-# Copyright (c) 2006 Logica
-# 
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# 
-# Onno van der Straaten:: initial implementation
-#++######################################################################
-# {Copyright (c) 2006 Logica}[link:files/COPYRIGHT.html]
-
-class Site < ActiveRecord::Base
-  
-  belongs_to :user
-  has_many :pages
- 
-  validates_presence_of  :user_id, :title, :folder # TODO validate :user not :user_id
-  
-  # TODO Folde can contain . (dot) because it is created from a filename
-  validates_format_of :folder, :message => 'should consist of letters, digits and underscores', :with =>  /([-_.\dA-Za-z])*/  
-  
-  # A wikifiable file is a HTML file
-  HTML_FILE_PATTERN = /.*.htm(l)?/i
-  
-  # A wikifiable is not a Wiki file (a version file created using the Wiki)
-  WIKI_FILE_PATTERN = /(.)*wiki(.)*/i
-  
-   def content_scanned?
-    return !self.content_scanned_on.nil?
-  end
-  
-  def baseline_processes_candidate
-    returning bp_candidate = [] do
-      if self.status == 'Ready' # TODO
-        Site.find_baseline_processes.each do |bp|
-          bp_candidate << bp unless self.baselines.include?(bp.baseline)
-        end
-      end    
-    end
-  end
-  
-  def wiki?
-    return self.class.name == 'Wiki'
-  end
-  
-  def baseline_process?
-    return self.class.name == 'BaselineProcess'
-  end
-  
-  def path 
-    return "#{ENV['EPFWIKI_ROOT_DIR']}#{ENV['EPFWIKI_PUBLIC_FOLDER']}/#{ENV['EPFWIKI_WIKIS_FOLDER']}/#{self.folder}" if self.wiki?
-    return "#{ENV['EPFWIKI_ROOT_DIR']}#{ENV['EPFWIKI_PUBLIC_FOLDER']}/#{ENV['EPFWIKI_SITES_FOLDER']}/#{self.folder}"
-  end
-  
-  def rel_path
-    return self.path.gsub(ENV['EPFWIKI_ROOT_DIR'] + "#{ENV['EPFWIKI_PUBLIC_FOLDER']}/",'')
-  end
-  
-  def path2zip 
-    return self.path + '.zip'
-  end
-  
-  # Method #templates returns current versions of pages from the Wiki 'Templates'. 
-  # These pages are templates for creating new pages. 
-  def self.templates
-    w = Wiki.find_by_title('Templates')
-    raise "No Templates Wiki was found. There should always be a Wiki with title 'Templates' to provide templates for creating new pages" if !w
-    returning tpls = [] do
-      w.pages.each do |p|
-        tpls << p.current_version if p.current_version # NOTE: a new checked out Template has no current version
-      end
-    end
-  end
-  
-  def unzip_upload
-    logger.info("Unzipping upload #{self.path2zip}")
-    raise "Folder #{self.path} exists" if File.exists?(self.path)
-    cmdline = "unzip -q \"#{self.path2zip}\" -d \"#{self.path}\""
-    logger.debug("Executing command #{cmdline}")
-    unzip_success =  system(cmdline)
-    raise "Error executing command #{cmdline}: #{$?}" if !unzip_success
-  end
-  
-  # array of HTML files that are candate Wikification
-  def self.files_html(path)
-    paths = Array.new
-     (Dir.entries(path) - [".", ".."]).each do |entry| 
-      new_path = File.expand_path(entry, path)
-      if FileTest.directory?(new_path)   
-        paths = paths + Site.files_html(new_path)
-      else
-        paths << new_path if !HTML_FILE_PATTERN.match(entry).nil? && WIKI_FILE_PATTERN.match(entry).nil?
-      end
-    end
-    return paths
-  end
-  
-  def files_wikifiable
-    raise 'Path can\'t be blank' if self.path.blank?
-    logger.info("Finding wikifiable files in #{self.path}")
-    returning paths = [] do
-      Site.files_html(self.path).each do |path2|
-        #logger.info("#{path2}") 
-        paths << path2 unless Page::ELEMENT_TYPE_PATTERN.match(IO.readlines(path2).join("\n")).nil?
-      end
-    end
-  end
-  
-  ###########
-  private 
-  ###########
-  
- 
-  # action #copy_to copies the content of a site to another site (theDestSite). Files are overwritten if they exist in the destination site.
-  # NOTE: Ruby does not have a copy + overwrite command?
-  def copy_to(theDestSite, theFolderPath = nil)
-    if  theFolderPath
-     (Dir.entries(theFolderPath) - [".", ".."]).each do |aEntry|
-        aPath = File.expand_path(aEntry, theFolderPath)
-        aDestPath = aPath.gsub(self.path, theDestSite.path)
-        if  FileTest.directory?(aPath)
-          logger.info("Copying folder " + aPath + " to " + aDestPath)
-          File.makedirs(aDestPath)
-          copy_to(theDestSite, aPath)
-        else
-          if  !FileTest.exists?(aDestPath)
-            logger.info("New file copied " + aPath + " to " + aDestPath)
-            File.copy(aPath, aDestPath)
-          else
-            if  FileUtils.cmp(aPath, aDestPath)
-              logger.info("Not copied because equal: " + aPath)
-            else
-              logger.info("Overwritten: " + aPath)
-              File.delete(aDestPath) 
-              File.copy(aPath, aDestPath)
-            end
-          end
-        end
-      end 
-    else
-      logger.info("Copying content from site " + self.title + " to " + theDestSite.title)
-      logger.info("Source folder: " + self.path + ". Destination folder: " + theDestSite.path)
-      copy_to(theDestSite, self.path)
-    end
-  end
-  
-end
diff --git a/source/app/models/sweeper.rb b/source/app/models/sweeper.rb
deleted file mode 100644
index f1e876e..0000000
--- a/source/app/models/sweeper.rb
+++ /dev/null
@@ -1,34 +0,0 @@
-#--######################################################################
-# Copyright (c) 2006 Logica
-# 
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# 
-# Onno van der Straaten:: initial implementation
-#++######################################################################
-# {Copyright (c) 2006 Logica}[link:files/COPYRIGHT.html]
-
-class Sweeper < ActionController::Caching::Sweeper
-  
-  observe WikiPage, Checkout, Comment, Wiki, UserVersion, Upload 
-  
-  # TODO more advanced expiration
-  def after_create(record)
-    if record.is_a?(Wiki) || record.is_a?(Checkout) || record.is_a?(Comment) || record.is_a?(UserVersion) || record.is_a?(Wiki) || record.is_a?(Upload)
-      expire_all_pages
-    elsif record.is_a?(WikiPage)
-      expire_all_pages if record.tool = 'Wiki'
-    end
-  end
-  
-  def after_destroy(record)
-    if record.is_a?(Checkout)
-      expire_all_pages
-    end
-  end
-  
-end
\ No newline at end of file
diff --git a/source/app/models/update.rb b/source/app/models/update.rb
deleted file mode 100644
index 024f51e..0000000
--- a/source/app/models/update.rb
+++ /dev/null
@@ -1,93 +0,0 @@
-#--######################################################################
-# Copyright (c) 2006 Logica
-# 
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# 
-# Onno van der Straaten:: initial implementation
-#++######################################################################
-# {Copyright (c) 2006 Logica}[link:files/COPYRIGHT.html]
-
-class Update < ActiveRecord::Base
-
-  belongs_to :baseline_process, :foreign_key => 'baseline_process_id'
-  belongs_to :wiki, :foreign_key => 'wiki_id'
-  belongs_to :user
-  
-  # TODO validates_presence_of :user, :baseline_process, :wiki
-
-  def self.find_todo
-    Update.find(:all, :order => 'created_on ASC', :conditions => ['started_on is null'])
-  end
-  
-  def self.find_done 
-    Update.find(:all, :order => 'finished_on ASC', :conditions => ['finished_on is not null'])
-  end
-  
-  def self.find_inprogress
-    Update.find(:all, :order => 'finished_on ASC', :conditions => ['started_on is not null and finished_on is null'])
-  end
-  
-  def do_update
-    logger.info("Doing update of #{self.wiki.title} with #{self.baseline_process.title}")
-    if self.first_update?
-      Notifier::deliver_site_status(self, "STARTED creating New Wiki #{self.wiki.title} using Baseline Process #{self.baseline_process.title}")
-      self.wiki.wikify(self)
-      Notifier::deliver_site_status(self, "FINISHED creating new Wiki #{self.wiki.title} using Baseline Process #{self.baseline_process.title}")
-    else
-      Notifier::deliver_site_status(self, "STARTED update of Wiki #{self.wiki.title} with Baseline Process #{self.baseline_process.title}")
-      self.wiki.update_wiki(self)
-      Notifier::deliver_site_status(self, "FINISHED update of Wiki #{self.wiki.title} with Baseline Process #{self.baseline_process.title}")
-    end
-    self.finished_on = Time.now
-    self.save!
-    users = User.find(:all, :conditions => ['notify_immediate=?', 1])
-    unless users.empty?
-        subject = "Wiki #{self.wiki.title} Updated with Baseline Process #{self.baseline_process.title}"
-        introduction = "User #{self.user.name} updated Wiki <a href=\"http://#{self.wiki.url(true)}\">#{self.wiki.title}</a> with Baseline Process #{self.baseline_process.title}."
-        Notifier::deliver_notification(users,subject,introduction, nil) 
-    end 
-
-    expire_all_pages
-    
-    # Notify contributors of harvested stuff
-    contributions = Upload.find(:all, :conditions => ['done=? and review_note_send_on is null', 'Y']) + 
-      Comment.find(:all, :conditions => ['done=? and review_note_send_on is null and site_id=?', 'Y', self.wiki.id]) + 
-      UserVersion.find(:all, :conditions => ['done=? and review_note_send_on is null and wiki_id=?', 'Y', self.wiki.id])  
-    contributions.collect{|rec|rec.user}.uniq.each do |u |
-      Notifier::deliver_contributions_processed(u, contributions.collect{|rec|rec if rec.user == u}.compact)
-    end
-  
-   contributions.each do |record|
-      record.review_note_send_on = Time.now
-      record.save!
-    end    
-  end
-
-
-  def first_update?
-    self.wiki.updates_done.empty? && wiki.updates_inprogress.empty?
-  end
-
-  def validate
-    errors.add(:baseline_process, 'is not a BaselineProcess') if !self.baseline_process_id.nil? && Site.find(baseline_process_id).wiki?
-    errors.add(:wiki, 'is not a Wiki') if !self.wiki_id.nil? && Site.find(wiki_id).baseline_process?
-  end 
-
-  def after_create
-    if first_update?
-      Notifier::deliver_site_status(self, "SCHEDULED creation new Wiki #{self.wiki.title} using Baseline Process #{self.baseline_process.title}")
-    else
-      Notifier::deliver_site_status(self, "SCHEDULED update of Wiki #{self.wiki.title} with Baseline Process #{self.baseline_process.title}")
-    end
-  end
-
-  def after_destroy
-    Notifier::deliver_site_status(self, "CANCELLED update of Wiki #{self.wiki.title} with Baseline Process #{self.baseline_process.title}")    
-  end
-
-end
diff --git a/source/app/models/upload.rb b/source/app/models/upload.rb
deleted file mode 100644
index f0894af..0000000
--- a/source/app/models/upload.rb
+++ /dev/null
@@ -1,54 +0,0 @@
-#--######################################################################
-# Copyright (c) 2006 Logica
-# 
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# 
-# Onno van der Straaten:: initial implementation
-#++######################################################################
-# {Copyright (c) 2006 Logica}[link:files/COPYRIGHT.html]
-
-class Upload < ActiveRecord::Base
-
-  belongs_to :user
-  belongs_to :reviewer,              :class_name => 'User',    :foreign_key => 'reviewer_id'
-
-  attr_accessor :file
-  validates_presence_of :user
-  #after_save :process
-
-  def new_filename
-    return  "#{self.id.to_s}.#{self.filename.split('.').last.downcase}"
-  end
-  
-  def path
-    return "#{ENV['EPFWIKI_ROOT_DIR']}public/uploads/#{self.new_filename}"
-  end
-  
-  def file=(file)
-    @file = file
-    write_attribute 'filename', file.original_filename 
-    write_attribute 'content_type', file.content_type.strip 
-  end
-  
-  def save_file
-    raise 'Cannot save without id' if self.id.nil?
-    uploads_path = "#{ENV['EPFWIKI_ROOT_DIR']}public/uploads/"
-    File.makedirs(uploads_path) if !File.exists?(uploads_path)
-    self.rel_path = write_attribute 'rel_path', "uploads/#{self.id.to_s}.#{self.filename.split('.').last.downcase}"
-    File.open(self.path, 'wb') do |file_date|
-      file_date.puts file.read
-    end
-  end
-  
-  def url(absolute = false, request_host = ENV['EPFWIKI_HOST'])
-    s = "/uploads/#{self.new_filename}"
-    s = "http://#{request_host}#{s}" if absolute
-    s
-  end
-  
-end
diff --git a/source/app/models/user.rb b/source/app/models/user.rb
deleted file mode 100644
index 482f41f..0000000
--- a/source/app/models/user.rb
+++ /dev/null
@@ -1,326 +0,0 @@
-require 'digest/sha1'
-require 'net/http'
-
-#--
-# require 'net/https'
-# 
-# TODO disabled this, because this causes some error and we are not using Bugzilla integration
-# see http://jira.codehaus.org/browse/JRUBY-986
-#++
-# More information:
-# * {EPF Wiki Data model}[link:files/doc/DATAMODEL.html]
-#--######################################################################
-# Copyright (c) 2006 Logica
-# 
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# 
-# Onno van der Straaten:: initial implementation
-#++######################################################################
-# {Copyright (c) 2006 Logica}[link:files/COPYRIGHT.html]
- 
-class User < ActiveRecord::Base
-
-    DOMAIN_PATTERN = /@.*/
-
-    has_many :sites
-    has_many :checkouts
-    has_many :versions
-    has_many :user_versions, :class_name => "Version", :conditions => ['baseline_process_id is null']
-    has_many :comments
-    has_many :notifications
-    has_many :uploads
-    has_many :versions2review, :class_name => "Version", :foreign_key => "reviewer_id"
-    has_many :comments2review, :class_name => "Comment", :foreign_key => "reviewer_id"
-    belongs_to :site # default site of user TODO: not used
-
-    validates_confirmation_of :password
-    validates_presence_of :name, :email
-    validates_uniqueness_of :name, :email
-    validates_format_of :email, :with => /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i
-    validates_format_of :admin, :with => /Y|N|C/
-
-    attr_accessor :password, :remember_me, :email_extension#, :i_agree_to_the_terms_of_use TODO reactivate this
-    
-    # Changing account to admin or cadmin requires that 
-    # you specify the user that is requesting the change
-    attr_accessor :user
-    validates_associated :user
-    
-    # #new_cadmin creates the central adminstrator user
-    def self.new_cadmin(params)
-      raise 'Already create central admin' if User.count > 0      
-      u= User.new(params)
-      u.hashed_password = hash_pw(u.password) if u.password
-      u.admin = "C"
-      u.confirmed_on = Time.now
-      return u
-    end
-
-    # #new_signup creates an ordinary user account
-    def self.new_signup(params)
-      user = User.new(params)
-      user.email = user.email + user.email_extension if ENV['EPFWIKI_DOMAINS'] && user.email_extension
-      logger.info("Creating account with supplied password for #{user.email}")
-      user.hashed_password = hash_pw(user.password) if user.password
-      return user
-    end
-
-    # #login searches the user on email and hashed_password and returns it, see also #try_to_login
-    def self.login(email, password)
-      user = nil
-      ENV['EPFWIKI_AUTH_METHODS'].split(',').each do |method|
-        logger.info("Doing login of #{email} using method #{method}")
-        if method == 'bugzilla' #&& user.nil?
-          user = User.login_bugzilla(email, password)
-        elsif method == 'validemail' #&& user.nil?
-          user = User.login_validemail(email, password)
-        elsif method == 'basic' #&& user.nil?
-          user = User.login_basicauthentication(email, password)     
-        end
-        break if !user.nil?
-      end
-      return user
-    end
-    
-    def self.login_bugzilla(email, password)
-      user = nil
-      host, port = ENV['EPFWIKI_AUTH_BUGZILLA'].split(',')
-      logger.debug("Login using bugzilla with settings: #{host} with port #{port}")
-      http = Net::HTTP.new(host, port)
-
-      # avoid console message "peer certificate won't be verified in this SSL session"
-      http.verify_mode = OpenSSL::SSL::VERIFY_NONE 
-
-      http.use_ssl = true
-      path = '/bugs/index.cgi'
-
-      # POST request -> logging in
-      data = "Bugzilla_login=#{email}&Bugzilla_password=#{password}&GoAheadAndLogIn=1"
-      logger.debug('data = ' + data)
-      headers = {
-      'Referer' => "https://#{host}/bugs/index.cgi?GoAheadAndLogIn=",
-      'Content-Type' => 'application/x-www-form-urlencoded'
-      }
-
-      resp, data = http.post(path, data, headers)
-      logger.info('Code = ' + resp.code)
-      logger.info('Message = ' + resp.message)
-      resp.each {|key, val| logger.info(key + ' = ' + val)}
-
-      if resp['set-cookie'].nil?
-        logger.info("Unauthorized (didn't get a cookie)")
-      else
-          logger.debug("Authorized #{email}/#{password}")
-          user = User.find_by_email(email)
-          if user
-            logger.info("User #{email} has account")
-          else
-            logger.info("Creating account #{email}")
-            user = User.new(:email => email, :name => email.split('@')[0])
-            user.set_new_pw
-            user.password_confirmation = user.password
-            user.hashed_password = hash_pw(user.password) if user.password
-            if user.save
-              logger.info("Succesfully created account: #{user.inspect}")
-            else
-              logger.info("Failed to create account #{user.errors.full_messages.join(", ")}")
-              Notifier::deliver_email(User.find_central_admin, 
-              "[#{ENV['EPFWIKI_APP_NAME']}] Error creating account using bugzilla!",[],
-              "#{user.errors.full_messages.join(", ")}")
-              user = nil
-            end
-          end
-        end      
-      return user
-    end
-    
-    def self.login_basicauthentication(account, password)
-      logger.info("Checking un/pw using basic authentication") 
-      user = nil
-      hostname, fail_code, maildomain = ENV['EPFWIKI_AUTH_BASIC'].split(',')
-      logger.debug("BASIC AUTH Settings: #{hostname},#{fail_code},#{maildomain}")
-      Net::HTTP.start(hostname) {|http|
-        req = Net::HTTP::Get.new('/')
-        req.basic_auth account, password
-        response = http.request(req)
-        logger.debug("response.code: #{response.code.inspect}, fail_code #{fail_code.inspect}")
-        if response.code == fail_code
-          logger.debug("Unauthorized #{account}/#{password}: #{response.inspect}")
-          return nil
-        else
-          logger.debug("Authorized #{account}/#{password}: #{response.inspect}")
-          user = User.find_by_account(account)
-          if user
-            logger.info("User #{account} has account")
-          else
-            logger.info("Creating account #{account}")
-            user = User.new(:account => account, :email => "#{account}@#{maildomain}", :name => account)
-            user.set_new_pw
-            user.password_confirmation = user.password
-            user.hashed_password = hash_pw(user.password) if user.password
-            if user.save
-              logger.info("Succesfully created account: #{user.inspect}")
-            else
-              logger.info("Failed to create account #{user.errors.full_messages.join(", ")}")
-              Notifier::deliver_email(User.find_central_admin, 
-              "[#{ENV['EPFWIKI_APP_NAME']}] Error creating account using basic authentication!",[],
-              "#{user.errors.full_messages.join(", ")}")
-              user = nil
-            end
-            #return User.create() if user.nil
-          end
-        end      
-      }
-      return user
-    end
-    
-    def self.login_validemail(email, password)
-      logger.info("Checking un/pw of valid email #{email} hash_pw is #{hash_pw(password)}")
-        hashed_password = hash_pw(password)
-        user = find(:first,  :conditions => ["email = ? and hashed_password = ?", email.downcase, hashed_password])
-        return nil if user && (password.nil? ||  user.confirmed_on.nil?)
-        return user 
-    end
-    
-    # #confirm_account is used to confirm new accounts or confirm new passwords in case user requested on
-    def confirm_account(token)
-      logger.debug("Confirming account with token: " + token)
-      logger.debug("Hashed password is: " + self.hashed_password)
-      logger.debug("Hashed password new is: " + (self.hashed_password_new || '')) 
-      if  self.hashed_password && (hash_pw(self.hashed_password) == token)
-          logger.debug('Confirming new account:' + self.inspect) 
-          self.confirmed_on = Time.now
-          return true
-      elsif self.hashed_password_new && (hash_pw(self.hashed_password_new) == token)
-          logger.debug('Confirming a lost password:' + self.inspect) 
-          self.confirmed_on = Time.now
-          self.hashed_password = self.hashed_password_new
-          self.hashed_password_new = nil
-          return true
-      else
-        return false
-      end
-    end
-
-    # Use #set_new_pw to set and return a new password for a user.
-    # Needs to be confirmed using #confirm_account 
-    def set_new_pw(new_pw)
-        self.password = new_pw
-        self.hashed_password_new = hash_pw(new_pw)
-        logger.debug("This is the new password #{new_pw}")        
-    end
-
-    # Log in if the name and password (after hashing)
-    # match the database, or if the name matches
-    # an entry in the database with no password
-    def try_to_login
-        User.login(self.email.downcase, self.password) 
-    end 
-
-    # #change_password changes the password of a User
-    def change_password(user)
-      raise "Password can't be blank" if user.password.blank?
-      self.password = user.password
-      self.password_confirmation = user.password_confirmation
-      self.hashed_password = hash_pw(user.password)
-      self.confirmed_on = Time.now
-    end
-    
-    def self.cadmin(from, to)
-      raise 'From needs to be central admin' if !from.cadmin?
-      User.transaction do
-        to.admin = 'C'
-        to.user = from
-        from.admin = 'Y'
-        to.save 
-        from.save
-      end
-    end
-    
-    # Token that can be used to confirm a new account
-    def token
-      return hash_pw(self.hashed_password)
-    end
-
-    # Token that can be used to confirm a lost password (existing account)
-    def token_new
-      return hash_pw(self.hashed_password_new)
-    end
-
-    def user?
-      return admin == 'N'    
-    end
-  
-    def admin?
-        return admin == 'Y' || admin == 'C'
-    end
-
-    def cadmin?
-        return admin  == 'C'
-    end
-
-    def self.find_central_admin
-        return  User.find(:first, :conditions => ["admin=?", "C"] )
-    end
-
-    def documents_path
-        return "users/" + id.to_s + "/docs"
-    end
-
-    def images_path
-        return  "users/" + id.to_s + "/images"
-    end
-
-    # #sites returns Site records where user created versions or comments
-    def sites
-        return Site.find(:all, :conditions => ['exists (select * from versions where user_id = ? and wiki_id = sites.id) or exists (select * from da_texts where user_id = ? and site_id = sites.id)', id, id])
-    end
-    
-    def before_validation_on_update
-    end
-  
-    def validate
-      if  ENV['EPFWIKI_DOMAINS']
-        valid_domain = !ENV['EPFWIKI_DOMAINS'].split(" ").index(DOMAIN_PATTERN.match(email.downcase).to_s).nil?
-        errors.add(:email, "domain not valid") if !valid_domain && !self.cadmin?
-      end
-    end
-    
-    def validate_on_create
-      errors.add(:password, "can't be blank") if password.blank? || hashed_password.blank?
-      errors.add(:password_confirmation, "can't be blank") if password_confirmation.blank?
-      errors.add("Central admin already exists") if User.count > 0 && admin == 'C'
-      # all users have to agree to the terms of use (except the first user)
-      # errors.add_to_base("You have to agree to the terms of use") if i_agree_to_the_terms_of_use != "1" && User.count != 0
-    end
-    
-    def validate_on_update
-      errors.add(:hashed_password, "can't be blank") if hashed_password.blank?
-      old_admin = User.find(id).admin
-      if admin == 'C' and old_admin != 'C'
-        if user.nil? || User.find(user.id).admin != 'C'
-          errors.add(:admin, 'can only be set to C by the central admin') 
-        end
-      end
-      if admin == 'Y' and old_admin == 'N'
-        errors.add(:admin, 'can only be set by an admin') if user.nil? || user.admin == 'N'
-      end
-      if admin == 'N' and !old_admin.index(/Y|C/).nil?
-        errors.add(:admin, 'can only be revoked by the central admin') if user.nil? || user.admin != 'C'
-      end
-    end
-
-    def after_create
-      create_templates if User.count == 1
-    end
-
-    def before_save
-      self.email = self.email.downcase 
-    end
-          
-end
diff --git a/source/app/models/user_version.rb b/source/app/models/user_version.rb
deleted file mode 100644
index 5255705..0000000
--- a/source/app/models/user_version.rb
+++ /dev/null
@@ -1,34 +0,0 @@
-#--######################################################################
-# Copyright (c) 2006 Logica
-# 
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# 
-# Onno van der Straaten:: initial implementation
-#++######################################################################
-# {Copyright (c) 2006 Logica}[link:files/COPYRIGHT.html]
-
-class UserVersion < Version
-
-  def path
-    return self.wiki.path + '/' + self.rel_path
-  end
-    
-  def html=(h)
-    logger.debug("Saving HTML to #{self.path}")
-    f = File.new(self.path, "w")
-    f.puts(h)
-    f.close
-    # works on the file, we are using tidy lib
-    self.tidy if self.user_version? 
-    h = self.html.gsub(Page::SHIM_TAG_PATTERN, Page::SHIM_TAG)
-    f = File.new(self.path, "w")
-    f.puts(h)
-    f.close
-end
-  
-end
\ No newline at end of file
diff --git a/source/app/models/version.rb b/source/app/models/version.rb
deleted file mode 100644
index 3ee8800..0000000
--- a/source/app/models/version.rb
+++ /dev/null
@@ -1,256 +0,0 @@
-require 'ftools'
-require 'xhtmldiff'
-
-# More information:
-# * {EPF Wiki Data model}[link:files/doc/DATAMODEL.html]
-# 
-#--######################################################################
-# Copyright (c) 2006 Logica
-# 
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# 
-# Onno van der Straaten:: initial implementation
-#++######################################################################
-# {Copyright (c) 2006 Logica}[link:files/COPYRIGHT.html]
-
-class Version < ActiveRecord::Base
-  
-  belongs_to  :user
-  belongs_to  :wiki, :foreign_key => 'wiki_id' # TODO not necessary?
-  belongs_to  :page
-  has_one     :checkout
-  belongs_to  :source_version,        :class_name => 'Version', :foreign_key => 'version_id'
-  belongs_to  :reviewer,              :class_name => 'User',    :foreign_key => 'reviewer_id'
-  has_many    :child_versions,        :class_name => 'Version', :foreign_key => 'version_id'
-  has_many    :comments
-
-  attr_accessor :type_filter # used for selection filter
-
-  # NOTE: it is not possible to use 'update' below, this is reserved by ActiveRecord. 
-  # If you use it, the record won't save
-  belongs_to  :baseline_update, :class_name => 'Update', :foreign_key => 'update_id'
-  
-  validates_presence_of :user, :wiki, :page
-  
-  BODY_PATTERN = /<body.*<\/body>/m
-  LINKS_PATTERN = /<a.*?href=".*?".*?<\/a>/
-  HREF_PATTERN = /href="(.*?)"/
-
-  DIFF_STYLE =   ["<style type=\"text/css\">",
-"  .diffdel,del.diffmod, .diffdel *, del.diffmod * {",
-"  background-color:#FAA;",
-"  text-decoration:line-through;",
-"  }",
-"  .diffins,ins.diffmod, .diffins *, ins.diffmod * {",
-"  background-color:#AFA;",
-"  text-decoration:underline;",
-"  }",
-"  .diffmod, .diffmod * {",
-"  border: 2px solid #FE0;",
-"}",
-"</style>"].join("\n")
-  
-  def previous_version
-    case self.version
-    when 0 then nil 
-    when nil then self.page.current_version 
-    else Version.find(:first, :conditions => ['page_id=? and version=?', self.page_id, self.version - 1])
-    end
-  end
-  
-  # TODO this doesn't add value
-  def baseversion
-    return Version.find(:first, :conditions => ['wiki_id = ? and page_id=? and version=0',
-    self.wiki_id, self.page_id])
-  end  
-  
-  def current_version
-    return self.page.current_version
-  end
-  
-  # return the latest version of page in a site
-  def self.find_latest_version(site, page)
-    return Version.find(:first ,:order => 'version DESC', :conditions => ["page_id=? and wiki_id =?", page.id, site.id])    
-  end  
-  
-  # return the latest version based on a version
-  # TODO use page.last_version
-  def latest_version
-    return Version.find(:first ,:order => 'version DESC', :conditions => ["page_id=? and wiki_id =?", self.page, self.wiki])    
-  end
-  
-  # Returns relative path of a version in folder 'public', 
-  # the column rel_path stores the relatieve path in a Site folder
-    def rel_path_root
-    return self.path.gsub("#{ENV['EPFWIKI_ROOT_DIR']}#{ENV['EPFWIKI_PUBLIC_FOLDER']}/", '')
-  end
-  
-  # use #tidy to tidy the file using HTML Tidy. 
-  # This also removes any empty lines that may have been 
-  # created by PinEdit.
-  def tidy
-    logger.info("Tidying file " + path)
-    tidy_file(path)
-  end
-  
-  
-  # method #html read or writes the HTML of a version from or to the version file.
-  # When writing HTML Tidy is used to cleanup the file
-  def html
-    IO.readlines(self.path).join
-  end
-
-  # Create the tmp diff source file, clean it using Tidy and prepare for use with XHTMLDiff
-  def html4diff(h = nil)
-    logger.info("Create tmp diff source file #{self.path_to_tmp_diff_html} using #{self.path}")    
-    File.copy(self.path, self.path_to_tmp_diff_html)
-    tidy_file(self.path_to_tmp_diff_html)    
-    h = IO.readlines(self.path_to_tmp_diff_html).join if h.nil?
-    h = BODY_PATTERN.match(h)[0]
-    h = h.gsub(Page::TREEBROWSER_PLACEHOLDER, '').gsub(Page::TREEBROWSER_PATTERN, '')
-    h = h.gsub(Page::SHIM_TAG_PATTERN, Page::SHIM_TAG) # TODO remove? This should not be necessary, see html
-    h = h.gsub(/<!-- epfwiki.*end -->/m, '') # TODO remove?
-    h = h.gsub('</body>','').gsub(/<body.*>/, '')
-    
-    # If the html originates from TinyMCE it contains extra tbody tags.
-    # TinyMCE adds those and this is good XHTML but if
-    # we strip those so we get better diff results
-    # Because without it, compare with the baseversion (not modified by TinyMCE) will 
-    # result false positives (changes)
-    h = h.gsub(/<[\/]{0,1}(tbody){1}[.]*>/, '') 
-    
-    # TODO Workaround for Tidy adding title attributes which causes false changes
-    #--
-    # The question mark makes it lazy, so it won't match for instance  
-    # title="Org"></a><span class="overview" it will match
-    # title="Org" only
-    #++
-    h = h.gsub(/title="(.*?)"/, '') # WE REMOVE ALL TITLE ATTRIBUTES FOR BETTER DIFFS
-    logger.debug("html4diff #{self.path}: ")
-    #logger.debug(h)
-    file = File.new(self.path_to_tmp_diff_html, 'w')
-    file.puts(h)
-    file.close    
-    h 
-  end
-
-  # Create diff results using XHTMLDiff
-  def xhtmldiff(from_version)
-    content_from = "<div>\n" + from_version.html4diff + "\n</div>"
-    content_to = "<div>\n" + self.html4diff + "\n</div>"
-
-    diff_doc = REXML::Document.new
-    diff_doc << (div = REXML::Element.new 'div')
-    hd = XHTMLDiff.new(div)
-    
-    parsed_from_content = REXML::HashableElementDelegator.new(REXML::XPath.first(REXML::Document.new(content_from), '/div'))
-    parsed_to_content = REXML::HashableElementDelegator.new(REXML::XPath.first(REXML::Document.new(content_to), '/div'))
-    Diff::LCS.traverse_balanced(parsed_from_content, parsed_to_content , hd)
-    diffs = ''
-    diff_doc.write(diffs, -1, true, true)
-    diffs    
-  end
-  
-  # Create diff file using #xhtmldiff. The file is generated if doesn't exist of if one of the versions is checked out.
-  def xhtmldiffpage(from_version, force = false)
-    p = path_to_diff(from_version)
-      if !File.exists?(p) || !from_version.checkout.nil? || !self.checkout.nil? || force
-      logger.info("Generating xhtmldiffpage #{p}")
-      diffs = xhtmldiff(from_version)
-      h = page.html
-      body_tag = Page::BODY_TAG_PATTERN.match(h)[0]
-      h = h.gsub(BODY_PATTERN,body_tag + diffs + '</body>')
-      h = h.gsub('</head>',DIFF_STYLE + '</head>')
-      h = h.gsub(Page::PAGE_HEAD_SNIPPET_PATTERN, '')
-      file = File.new(p, 'w')
-      file.puts(h)
-      file.close
-    end
-  end
-  
-  # Absolute path to the diff file and paths to the intermediate (tidied, cleaned) HTML files
-  def path_to_diff(from_version)
-    return "#{ENV['EPFWIKI_ROOT_DIR']}#{ENV['EPFWIKI_PUBLIC_FOLDER']}/#{relpath_to_diff(from_version)}"
-  end
-  
-  # Relative path to the diff file
-  def relpath_to_diff(from_version)
-    return '/' + self.wiki.rel_path + '/' + self.page.rel_path + "_EPFWIKI_DIFF_V#{from_version.version}_V#{self.version}.html"  
-  end
-  
-  # Path intermediate (tidied, cleaned) HTML files, prepared for XHTMLDiff
-  def path_to_tmp_diff_html
-    File.makedirs(ENV['EPFWIKI_DIFFS_PATH']) unless File.exists?(ENV['EPFWIKI_DIFFS_PATH'])    
-    "#{ENV['EPFWIKI_DIFFS_PATH']}#{self.id.to_s}.html"  
-  end
-  
-  # Compares hrefs to determine new or added 
-  #--
-  # Depends on covert_urls settings of TinyMCE
-  #++
-  # TODO implement
-  #def diff_links(from_version)
-  #  links = self.html.scan(LINKS_PATTERN)
-  #  links_from = from_version.html.scan(LINKS_PATTERN)
-  #  hrefs = links.collect {|link | HREF_PATTERN.match(link)[0]}
-  #  hrefs_from = links_from.collect {|link | HREF_PATTERN.match(link)[0]}
-  #  new_removed = [hrefs - hrefs_from, hrefs_from - hrefs]
-  #  new_removed
-  #end
-  
-  # TODO implement
-  #def diff_img(from_version)
-  #end
-
-  #def diff_area_links
-  #end
-   
-  def template?
-    self.wiki.title == 'Templates' 
-  end
-  
-  def base_version?
-    !user_version?
-  end
-  
-  def user_version?
-    baseline_process_id.nil?
-  end
-  
-  # #version_text returns version number, site title and baseline,
-  # for example <tt>1 from OpenUP(OUP_20060721)</tt>
-  def version_text
-    if self.base_version? 
-      return self.version.to_s + ' from ' + self.wiki.title + ' (' + self.baseline_process.title+ ')'
-    else
-      return self.version.to_s + ' from ' + self.wiki.title + ' (' + self.user.name + ')'
-    end
-  end
-  
-  def before_destroy
-    logger.debug("Before Destroy: deleting file #{self.path}")
-    File.delete(self.path)
-  end
-  
-  # #uma_type_descr is used to retrieve the brief description for a template, see app/views/pages/new
-  def uma_type_descr
-    logger.debug("Returning uma_type_description from: #{self.inspect}")
-    if self.note.blank? || self.note == 'Automatically created'
-      match = /<table class="overviewTable".*?<td valign="top">(.*?)<\/td>/m.match(self.html)
-      if match
-        self.note = match[1]
-        self.save!
-        logger.info("Match found: #{self.note}")
-      else
-        logger.debug('No match')
-      end
-    end
-    return self.note
-  end
-  
-end
diff --git a/source/app/models/wiki.rb b/source/app/models/wiki.rb
deleted file mode 100644
index f141bb6..0000000
--- a/source/app/models/wiki.rb
+++ /dev/null
@@ -1,248 +0,0 @@
-#--######################################################################
-# Copyright (c) 2006 Logica
-# 
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# 
-# Onno van der Straaten:: initial implementation
-#++######################################################################
-# {Copyright (c) 2006 Logica}[link:files/COPYRIGHT.html]
-
-class Wiki < Site
-
-  has_many :versions, :foreign_key => 'wiki_id' 
-  has_many :user_versions, :foreign_key => 'wiki_id'
-  has_many :baseline_process_versions, :foreign_key => 'wiki_id'
-  has_many :comments, :foreign_key => 'site_id'
-  has_many :checkouts, :foreign_key => 'site_id'
-
-  # Current BaselineProcess: the BaselineProcess used to create the Wiki or 
-  # the BaselineProcess used last time the Wiki was updated
-  belongs_to :baseline_process, :foreign_key => "baseline_process_id"
-
-  # Baseline processes are used to create and update the Wiki
-  has_many :updates, :order => 'finished_on DESC, created_on DESC'
-  has_many :updates_todo, :class_name => 'Update', :order => 'created_on ASC', :foreign_key => 'wiki_id', :conditions => 'started_on is null'
-  has_many :updates_done, :class_name => 'Update', :order => 'finished_on ASC', :foreign_key => 'wiki_id', :conditions => 'finished_on is not null'
-  has_many :updates_inprogress, :class_name => 'Update', :order => 'started_on ASC', :foreign_key => 'wiki_id', :conditions => 'started_on is not null and finished_on is null'
-  
-  validates_format_of :folder, :with => /^([0-9a-zA-Z]|_)*$/, :message => 'Folder name can only have characters,digits and underscores'
-      
-  # Used only for Notifier.report TODO a better solution
-  attr_accessor :contributors
-  
-
-  # HTML Editors remove the nowrap attribute, so we add it to the CSS-file, see Wiki.enhance_files
-  DEFAULT_CSS = 'css/default.css'
-  
-  def status
-    logger.debug("Determining status of wiki #{self.title}")
-    s = 'Ready' 
-    if self.updates.count == 0
-      logger.debug("Wiki #{self.title} does not have any update records")
-      s = 'Pending' 
-    elsif self.updates_todo.count > 0
-      logger.debug("Wiki #{self.title} has #{self.updates_todo.count.to_s} updates to do")
-      s = 'Scheduled'
-      self.updates_todo.each do |u|
-        logger.debug("Update todo #{u.baseline_process.title} is started on #{u.started_on}")
-        s = 'UpdateInProgress' if !u.started_on.nil?
-      end
-    end
-    return s
-  end
-  
-  def top_contributors
-    arr = User.find(:all).collect {|u|[u, Version.count(:conditions => ['user_id = ? and baseline_process_id is null and wiki_id=?',u.id, self.id]) + 
-    Comment.count(:conditions => ['user_id = ? and site_id=?',u.id, self.id]) + 
-    Upload.count(:conditions => ['user_id = ?',u.id])]}
-    arr = arr.sort_by{|t|-t[1]}
-  end
-  
-  def top_monthly_contributors
-    arr = User.find(:all).collect {|u|[u, Version.count(:conditions => ['user_id = ? and baseline_process_id is null and wiki_id=?',u.id, self.id]) + 
-    Comment.count(:conditions => ['user_id = ? and site_id=?',u.id, self.id]) + 
-    Upload.count(:conditions => ['user_id = ?',u.id])]}
-    arr = arr.sort_by{|t|-t[1]}
-  end
-
-  # Method #wikify does the actual wikifying of the content. It is the second step of the two step
-  # process (the first step created the Wiki record and Update record).
-  # * copies content of the source Site (parent) into that folder
-  # * scans the content of the baseline process if this was not done yet, see #scan4content
-  # * enhances the files in that site using method #enhance_files
-  # * creates a relation between the Baseline and the Site
-  # NOTE: This method is typically not called directly but called via #Update.wikify
-  def wikify(update)
-    bp = update.baseline_process
-    logger.info("Updating Wiki #{self.title} with baseline process #{bp.title}")
-    raise 'The site was updated already or has a an update in progress!' if !update.first_update?
-    raise "Can only update with a baseline process (static site)" if bp.wiki?
-    update.update_attributes(:started_on => Time.now) # changes the wiki status to 'UpdateInProgress'
-    File.makedirs(self.path)   
-    logger.info("Copying files from #{bp.path} to #{self.path}")
-    FileUtils.cp_r(bp.path + "/.", self.path) # How to copy the contents of a folder and not the folder [http://www.ruby-doc.org/core/classes/FileUtils.html#M001703]
-    bp.scan4content if !bp.content_scanned_on
-    cadmin = User.find_central_admin
-    bp.pages.each do |p| 
-      newp = WikiPage.new(:rel_path => p.rel_path, :site => self, :tool => 'EPFC', :status => 'New', :site_id => self.id)
-      # create baseversion
-      baseversion = BaselineProcessVersion.new(:baseline_update => update, :user => cadmin, :page => newp,
-                      :wiki => self, :version => 0, :done => 'Y', :note => 'Automatically created',
-        :baseline_process_id => bp.id) 
-      newp.baseline_process_versions << baseversion
-      newp.save!
-    end
-    enhance_files
-    self.baseline_process = bp
-    self.wikified_on = Time.now
-    self.save!
-  end
-
-  # Method #update_wiki updates a Wiki with a BaselineProcess with the following steps:
-  # 1. Copy content (overwriting all pages)
-  # 2. Update status of EPFC pages to 'Undetermined'
-  # 3. Update status of the Wiki pages, find 'Updated' and 'New' pages
-  # 4. Make EPFC pages obsolete if they are not part of the new BaselineProcess
-  # 5. Make Wiki pages obsolete if they have been harvested
-  # 6. Enhance files
-  # TODO: notify users that want to be notified (add about notify_baseline_updates column to users)
-  # TODO: Change 68 - Update should continue with checkouts and should not overwrite not harvested changes
-  def  update_wiki(update)
-    update.update_attributes(:started_on => Time.now)    
-    bp = update.baseline_process
-    logger.info("Starting update of wiki #{self.title} from baseline process #{self.baseline_process.title} (#{self.baseline_process.id}) to #{bp.title} (#{bp.id})")
-    logger.info("Copy update site " + bp.path + " to " + self.path)
-    cadmin = User.find_central_admin
-    # 1. 
-    bp.copy_to(self, nil)
-    
-    # 2. Update status of EPFC pages to 'undetermined'  
-    Page.update_all( "status = 'Undetermined'", ["tool = ? and site_id = ? ", 'EPFC', self.id, ])
-
-    # 3. Update
-    bp.scan4content if bp.content_scanned_on.nil?
-    bp.pages.each do |p|
-      page = Page.find_by_site_id_and_rel_path(self.id, p.rel_path)
-      if page
-        page.status = 'Updated'
-        no = page.max_version_no + 1
-      else
-        page = WikiPage.new(:rel_path => p.rel_path, :site => self, :tool => 'EPFC', :status => 'New', :site_id => self.id)
-        no = 0
-      end
-      # create baseversion
-      baseversion = BaselineProcessVersion.new(:baseline_update => update,:user => cadmin, :page => page,
-                      :wiki => self, :version => no, :done => 'Y', :note => 'Automatically created',
-        :baseline_process_id => bp.id) 
-      page.baseline_process_versions << baseversion
-      page.save!
-    end
-
-    # 4. 
-    Page.find(:all, :conditions => ['site_id = ? and status = ?', self.id, 'Undetermined']).each do |p|
-      p.status = 'RemovedOrMoved'
-      p.save!
-    end 
-    
-    # 5.
-    Page.find(:all, :conditions => ['site_id = ? and tool = ?', self.id, 'Wiki']).each do |p|
-      if p.harvested?
-        p.status = 'Harvested'
-      end
-    end
-
-    # 6.
-    enhance_files
-
-    # Change 68 - current versions not harvested
-    versions = UserVersion.find(:all, :conditions => ['wiki_id =? and done <> ? and version is not null', self.id, 'Y'])
-    logger.info("Found #{versions.size.to_s} versions with unharvested changes")
-    pages = versions.collect{|version| version.page}.uniq
-    if pages
-      logger.info("Found #{pages.size.to_s} pages with unharvested changes") if pages
-      snippets = Page.get_snippets
-      pages.each do |page|
-        logger.info("Processing page #{page.presentation_name}")
-        if page.checkout
-          logger.info("Page has unharvested versions, we don't need to set a current version")
-        else  
-          cv = page.current_version 
-          unless cv.nil?
-            if cv.current 
-              logger.info("Page #{page.presentation_name} already has current version with id #{cv.id}, we don't need to set a current version")
-            else
-              logger.info("Page #{page.presentation_name} does not have a current version")          
-              # set the current version equal to the last version that is not part of the update we are doing
-              page.current_version = Version.find(:first, :order => 'version DESC', :conditions => ['page_id=? and version is not null and update_id is null',page.id])
-            end
-            page.html = page.current_version.html
-            Page.enhance_file(page.path, snippets)
-          end
-        end
-      end
-    end
-    self.baseline_updated_on = Time.now
-    self.baseline_process = bp
-    self.save!
-  end
-  
-  def url(absolute = false, request_host = ENV['EPFWIKI_HOST'])
-    #--
-    # TODO anomaly, the following line shouldn't be necessary but is, in some cases. 
-    # When this method is called from page.url request_host will be nil    
-    #++
-    request_host = ENV['EPFWIKI_HOST'] if request_host.nil? 
-
-    logger.debug("url for site #{self.title}, absolute #{absolute.inspect}, request_host #{request_host.inspect}")
-    s = "/#{ENV['EPFWIKI_WIKIS_FOLDER']}/#{self.folder}/index.htm"
-    s = "http://#{request_host}#{s}" if absolute
-    logger.debug("returning: #{s}")
-    s
-  end
-  
-  def validate_on_create
-      logger.info("Folder #{ENV['EPFWIKI_WIKIS_PATH']}/#{self.folder} should not exists already")
-      errors.add(:folder, 'already exists') if  (!self.folder.blank? && File.exists?("#{ENV['EPFWIKI_WIKIS_PATH']}/#{self.folder}")) || !Wiki.find_by_folder(self.folder).nil?
-      if self.title == 'Templates'
-        if Wiki.find(:first, :conditions => ['title = ?','Templates'])
-          errors.add(:title, ' "Templates" has been used. There can only be one Wiki with that name.') 
-        end
-      end 
-  end
-
-  def users
-    return User.find(:all, :conditions => ['exists (select * from versions vsn where vsn.wiki_id = ? and vsn.user_id = users.id and baseline_process_id is null) or exists (select * from da_texts cmt where cmt.user_id = users.id and cmt.site_id = ?) or exists (select * from uploads where uploads.user_id = ?)', id, id, id])
-  end
-
-  #######
-  private
-  #######
-
-  def enhance_files
-
-    # CSS enhancement making it more robust layout of html, which shouldn't influence how the page is displayed
-    css = IO.readlines(self.path + '/' + DEFAULT_CSS).join + "\n"
-    [/.pageTitle .*?\{.*?\}/m, /.expandCollapseLink \{.*?\}/m].each do |regex|
-      match = regex.match(css)
-      if match
-        new_css_snip = match[0].gsub('}', "\nwhite-space: nowrap;}") 
-        css = css.gsub(match[0], new_css_snip) 
-      else
-        logger.info("CSS snippet not found, #{DEFAULT_CSS} changed in newer release of EPF?")
-      end
-    end
-    f = File.new(self.path + '/' + DEFAULT_CSS, 'w')
-    f.puts(css)
-    f.close
-    snippets = Page.get_snippets # TODO rename to snippets
-    self.files_wikifiable.each do |path|
-      Page.enhance_file(path, snippets)
-    end
-  end  
-  
-end
\ No newline at end of file
diff --git a/source/app/models/wiki_page.rb b/source/app/models/wiki_page.rb
deleted file mode 100644
index a942454..0000000
--- a/source/app/models/wiki_page.rb
+++ /dev/null
@@ -1,249 +0,0 @@
-#--######################################################################
-# Copyright (c) 2006 Logica
-# 
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# 
-# Onno van der Straaten:: initial implementation
-#++######################################################################
-# {Copyright (c) 2006 Logica}[link:files/COPYRIGHT.html]
-
-class WikiPage < Page
-
-  # When creating a new page, the page will belong to the user creating the page
-  belongs_to :user
-  
-  #--
-  # TODO database change -> rename page_id to wiki_page_id
-  #++
-  has_many :notifications#, :dependent => :destroy
-
-  #--
-  # TODO not working, find out why
-  #has_many :versions, :foreign_key => 'page_id' 
-  #++
-  
-  has_many :user_versions, :foreign_key => 'page_id', :conditions => ['version is not null']
-  has_many :baseline_process_versions, :foreign_key => 'page_id'
-  
-  #--
-  # TODO (but now now) anomaly works in the console but not in the application or in tests. Then is always returns nil. Replaced with method
-  # has_one :checkout, :foreign_key => 'page_id' 
-  #++
-  
-  #--
-  # has_many :comments, :foreign_key => 'page_id' #, :dependent => :destroy
-  # TODO anomaly. the above statement does not work. Comments is always nil. When I change the key
-  # I see the statement, it looks allright.
-  # ActiveRecord::StatementInvalid: Mysql::Error: Unknown column 'da_texts.page_id_2
-  # ' in 'where clause': SELECT * FROM `da_texts`   WHERE (da_texts.page_id_2 = 1431
-  # ) AND ( (`da_texts`.`type` = 'Comment' ) )
-  #++
-
-  #--
-  # FIXME Bugzilla 231125
-  # acts_as_ferret :fields => [:presentation_name, :tool, :status, :uma_name, :uma_type, :text, :contributors]
-  #++
-
-  def versions
-    (self.user_versions + self.baseline_process_versions).sort_by{|v|v.version}
-  end
-
-  def checkout
-    Checkout.find(:first, :conditions => ['page_id=?',self.id])
-  end
-  
-  def comments
-    Comment.find(:all, :order => 'created_on ASC', :conditions => ['page_id=?',self.id])
-  end
-
-  # change 68 TODO remove
-  def unharvested_versions
-    Version.find(:all, :order => 'created_on DESC', :conditions => ['page_id = ? and done=?',self.id, 'N'])
-  end
-  
-  #--
-  # TODO not sure if this is used
-  #++
-  def harvested?
-    self.unharvested_versions.size == 0
-  end
-
-  # Method #new_using_template requires presentation_name, note, site, user and source_version and returns: page, checkout.
-  # For an example see PagesController.new 
-  #--
-  # TODO new_using_template when there is already a checkout causes error without clear message
-  #++
-  def self.new_using_template(params)
-    logger.info("Creating new page using params: #{params.inspect}" )
-    sv = Version.find(params[:source_version])
-    p = sv.page.clone 
-    p.site = params[:site]
-    p.tool = 'Wiki'
-    p.user = params[:user]
-    p.presentation_name = params[:presentation_name]
-    p.filename = p.presentation_name.downcase.delete('&+-.\"/\[]:;=,').tr(' ','_') + '.html' if !p.presentation_name.blank?
-    old_path = File.expand_path(p.filename, File.dirname(sv.path))
-    if sv.class.name == UserVersion.name
-      p.rel_path = old_path.gsub(sv.wiki.path + '/','')
-    else
-      p.rel_path = old_path.gsub(sv.baseline_process.path + '/','')
-    end
-
-    # make the rel_path unique, this way we can create multiple pages with the same presentation name
-    unique = false
-    while !unique
-      if Page.exists?(['rel_path = ? and site_id = ?',p.rel_path, p.site.id])     
-        p.make_rel_path_unique 
-      else
-        unique = true
-      end
-    end
-
-    logger.debug("New path is #{p.rel_path}, site path is #{sv.wiki.path}, old_path is #{old_path}")
-    h = sv.html
-    h = h.gsub(/<meta.*? name="uma\.presentationName".*?>/, '<meta content="' + p.presentation_name + '" name="uma.presentationName">')
-    h = h.gsub(TITLE_PATTERN, "<title>#{p.presentation_name}</title>")
-    h = h.gsub(TITLE2_PATTERN, 'class="pageTitle">' + p.presentation_name + '<\/td>') # TODO don't think this is working, but there is a workaround
-    p.html = h
-    Page.enhance_file(p.path)
-    if p.save
-      logger.info("Page saved, creating co")
-        co = Checkout.new(:note => p.note, :page => p, :site => p.site, :source_version => sv, :user => params[:user], :html => h)
-        logger.debug("creating co: #{co.inspect}")
-        co.save
-        Notification.find_or_create(p, params[:user], Page.name)
-      return p, co
-    else
-      logger.info("Failed to save page, returned unsaved page")
-      return p, nil
-    end
-  end
-  
-  def max_version_no
-    max = Version.maximum('version', :conditions => ['page_id=? and wiki_id = ?',self.id, self.site.id]) 
-    max = 0 if max.nil? # max can be zero when creating new pages, there is no BaselineProcessVersion only a UserVersion
-    return max
-  end
-
-  # Method #current_version=(version) makes the version the current version of the page 
-  #--
-  # TODO this method should also do the html stuff
-  #++
-  def current_version=(v)
-    v2 = self.current_version
-    if v2 && v2.current
-      v2.current = false 
-      v2.save!
-    end
-    if v
-      logger.info("Making version #{v.id} the current version")
-      v.current = true
-      v.save!
-    end
-    return v
-  end
-
-  # Method #current_version returns the current version of the page   
-  def current_version
-    logger.debug("Finding current version of page #{self.presentation_name}")
-    version = Version.find(:first ,:conditions => ["page_id=? and current = ?", self.id, true]) #TODO check that true works instead of 1
-    version = Version.find(:first ,:order => "version DESC", :conditions => ["page_id=? and version is not null", self.id]) if version.nil?
-    version = version.previous_version if !version.nil? && version.checkout #NOTE: version can be nil, it will be nil when creating a new page
-    return version
-  end
-
-  # Method #last_version return the last created version (the version with the highest version number). Versions that are
-  # part of a checkout are excluded (version is nil for those versions)
-  def last_version
-    return Version.find(:first ,:order => 'version DESC', :conditions => ["page_id=? and version is not null", self.id])    
-  end
-
-  def contributors
-    (self.user_versions.collect {|v|v.user.name} + self.comments.collect {|c|c.user.name}).uniq
-  end
-
-  # See also #Page.html
-  def html=(h)
-    logger.debug("Writing html to #{self.path}")
-    d = File.dirname(self.path)
-    File.makedirs(d) if !File.exists?(d) # In case of a new page being created using a template, the dir possible doesn't exist yet
-    f = File.new(self.path, "w")
-    f.puts(h)
-    f.close     
-  end
-
-  # Example wiki.pages.active
-  def self.active
-    find(:all, :conditions=>["status = ? or status = ?", 'New','Updated'])
-  end
-  
-  # TODO Bugzilla 231125
-  # A method like below could be used to create a good index for finding pages
-  #def text
-  #  t = read_attribute('text')
-  #  if t.blank?
-  #    t = self.html.gsub(/<\/?[^>]*>/, '')    
-  #    t += self.comments.collect {|c|c.text} 
-  #    t += self.versions.collect {|v|v.note}
-  #    write_attribute('text', t)
-  #  end
-  #  t
-  #end
-  
-  def other_pages_with_comments
-    returning pages = [] do 
-      WikiPage.find(:all, :conditions => ['rel_path = ? and id <> ?', self.rel_path, self.id]).each do |p|
-        pages << p if Comment.count(:conditions => ['page_id =?', self.id]) > 0        
-      end
-    end
-  end
-
-  def other_pages_with_versions
-    returning pages = [] do 
-      WikiPage.find(:all, :conditions => ['rel_path = ? and id <> ?', self.rel_path, self.id]).each do |p|
-        pages << p if Version.count(:conditions => ['page_id =? and baseline_process_id is null', self.id]) > 0        
-      end
-    end
-  end
-  
-  def wikis
-    return WikiPage.find(:all, :conditions => ['rel_path=?', self.rel_path]).collect {|p|p.site}
-  end
-
-  def comments_in_other_wikis_count
-    Comment.count(:conditions => ['site_id in (?) and page_id <> ?', WikiPage.find(:all, :conditions => ['rel_path=?', self.rel_path]).collect{|p|p.id}, self.id])    
-  end
-
-  def versions_in_other_wikis
-    Version.find(:all, :conditions => ['wiki_id in ? and baseline_process_id is null and page_id <> ?', WikiPage.find(:all, :rel_path => self.rel_path).collect{|p|p.id}, self.id])
-  end
-  
-  def versions_in_other_wikis_count
-    ids = WikiPage.find(:all, :conditions => ['rel_path=?', self.rel_path]).collect{|p|p.id}
-    Version.count(:conditions => ['wiki_id in (?) and baseline_process_id is null and page_id <> ?', ids , self.id])    
-  end
-  
-  def checkedout?
-    !self.checkout.nil?  
-  end
-
-  # TODO add check that if the page is a new page (tool = 'Wiki'), the user needs to be set
-
-  # Make rel_path unique if it isn't unique. Used for creating new pages with the same presentation name. 
-  # Only used by WikiPage.new_using_template
-  def make_rel_path_unique
-       match = /_([\d]+)\.html/.match(self.rel_path)
-        if match
-          nr = (match[1].to_i + 1)
-          self.rel_path = self.rel_path.gsub(match[0], "_#{nr}.html")
-        else
-          self.rel_path = self.rel_path.gsub('.html', '_1.html')
-        end
-  end
-
-end
\ No newline at end of file
diff --git a/source/app/views/comments/_comments_list.rhtml b/source/app/views/comments/_comments_list.rhtml
deleted file mode 100644
index 5f9dd1b..0000000
--- a/source/app/views/comments/_comments_list.rhtml
+++ /dev/null
@@ -1,60 +0,0 @@
-<div class="sectionHeading">Comments</div>
-<div class="sectionContent">
-  <% if @comments %>  
-  <table cellpadding="0" cellspacing="0" border="0" class="sectionTable">
-     <tr>
-        <td class="sectionTableCell">
-        <table width="100%">
-        	<tr>
-				<th>ID</th>
-				<th>Title</th>    
-				<th>Created</th>
-				<th>Created By</th>
-				<th>Page</th>
-				<th>Review<br>Complete<br>(Harvested)</th>
-				<th>Reviewer</th>
-				<th>Review Note</th>
-				<th>Review Note<br>Send On</th>
-				<% if @site.nil? %><th>Site</th><% end %>
-			   <<th>Actions</th>
-          </tr>
-
-           <% for comment in @comments %>
-		   <% comment.review_note = 'Click to add...' if comment.review_note.blank? %>
-             <tr>
-                <td><%= comment.id %></td>
-                 <td><%= link_to_comment comment %></td>
-                 <td><%= comment.created_on.strftime("%I:%M %p %d-%b-%y") %></td>         
-                 <td><%= link_to_user comment.user %></td>         
-                 <td><%= link_to_page comment.page %></td> 
-                <td><%= link_to_done_toggle comment %></td>
-                 <td><%= link_to_reviewer comment %></td>				 
-					 <td>
-				 		<% if admin? %>
-					 	<%= editable_content(:content => {:element => 'span',
-        						:text => comment.review_note,
-        						:options => {:id => "review_note_#{comment.id}",
-          									:class => 'editable-content'}},
-      										:url => { :controller => 'review',
-        										:action => 'note',
-        										:id => comment.id
-   											},
-      							:ajax => {:okText => "'Ok'",:cancelText => "'Cancel'" }) %>
-						<% else %>
-							<%= comment.review_note %>
-						<% end %>
-					</td>
-					<td><%= comment.review_note_send_on.localtime.strftime(TIME_FORMAT) unless comment.review_note_send_on.nil? %></td>
-                     <% if @site.nil? %><td><%= link_to_site comment.site %></td><% end %>
-					 <td>[<%= link_to 'Edit', :controller => 'comments', :action => 'edit', :id => comment.id %>] 
-					 [<%= link_to 'Destroy', {:controller => 'comments', :action => 'destroy', :id => comment.id}, :confirm => 'Are you sure?', :method => :post %>]</td>
-             </tr>
-           <% end %>
-        </table>
-        <% else %>
-           No comments found!
-        <% end %>
-        </td>
-     </tr>
-  </table>
-</div>
\ No newline at end of file
diff --git a/source/app/views/comments/edit.rhtml b/source/app/views/comments/edit.rhtml
deleted file mode 100644
index 8d61d14..0000000
--- a/source/app/views/comments/edit.rhtml
+++ /dev/null
@@ -1,12 +0,0 @@
-<% @heading = "Edit Comment" %>
-<% @overview = "Edit Comment of #{link_to_user(@comment.user)} about #{link_to_page(@comment.page)} in Wiki #{link_to_site(@comment.site)} " %>
-<% tinymce('advanced') %>
-
-<%= error_messages_for :comment %>
-
-<% tabular_form_for :comment, @comment, :url => { :action => 'update', :id => @comment.id } do |f| %>
-    <%= f.text_area 'text', :cols => 100, :rows => 10 %>
-	<%= f.hidden_field 'request_referer', :value => request.referer %>
-    <tr><th></th><td><%= submit_tag "Submit" %></td></tr>  
-<% end %>
-
diff --git a/source/app/views/feedbacks/_list.rhtml b/source/app/views/feedbacks/_list.rhtml
deleted file mode 100644
index f946bc4..0000000
--- a/source/app/views/feedbacks/_list.rhtml
+++ /dev/null
@@ -1,53 +0,0 @@
-   <div class="sectionHeading">Feedback</div>
-   <div class="sectionContent">
-      <% if @feedbacks %>  
-      <table cellpadding="0" cellspacing="0" border="0" class="sectionTable">
-         <tr>
-            <td class="sectionTableCell">
-            <table width="100%">
-               <tr>
-                  <th>ID</th> 
-                  <th>Done</th>
-				  <th width="20%">Text</th> 
-                  <th>Created</th>
-                  <th>Created By</th>
-                  <th>Reviewer</th>
-				  <th width="20%">Review Note</th>
-				  <th>Actions</th>
-              </tr>
-               <% for feedback in @feedbacks %>
-			   <% feedback.review_note = 'Click to add...' if feedback.review_note.blank? %>
-                 <tr>
-                    <td><%= feedback.id %></td>
-                    <td><%= link_to_done_toggle(feedback) %></td>
-                    <td><%= truncate(strip_tags(feedback.text)) %></td>
-                     <td><%= feedback.created_on.localtime.strftime(TIME_FORMAT) %></td>         
-                     <td><%= link_to_user feedback.user unless feedback.user.nil? %></td>
-                     <td><%= link_to_reviewer feedback %></td>
-					 <td>
-				 		<% if admin? %>
-					 	<%= editable_content(:content => {:element => 'span',
-        						:text => feedback.review_note,
-        						:options => {:id => "feedback_note_#{feedback.id}",
-          									:class => 'editable-content'}},
-      										:url => { :controller => 'review',
-        										:action => 'note',
-        										:id => feedback.id,
-   											},
-      							:ajax => {:okText => "'Ok'",:cancelText => "'Cancel'" }) %>
-						<% else %>
-							<%= feedback.review_note %>
-						<% end %>
-					</td>
-					 <td><%= link_to 'Edit', :controller => 'feedbacks', :action => 'edit', :id => feedback.id %> 
-					 | <%= link_to 'Destroy', {:controller => 'feedbacks', :action => 'destroy', :id => feedback.id}, :confirm => 'Are you sure?', :method => :post %></td>
-                 </tr>
-               <% end %>
-            </table>
-            <% else %>
-               No feedback found!
-            <% end %>
-            </td>
-         </tr>
-      </table>
-   </div>
\ No newline at end of file
diff --git a/source/app/views/feedbacks/edit.rhtml b/source/app/views/feedbacks/edit.rhtml
deleted file mode 100644
index 26202eb..0000000
--- a/source/app/views/feedbacks/edit.rhtml
+++ /dev/null
@@ -1,16 +0,0 @@
-<% @heading = "Edit Feedback" %>
-<% if @feedback.user.nil? %>
-	<% @overview = "Edit Feedback of #{link_to(@feedback.email, 'mailto:'+@feedback.email)}"  %>
-<% else %>
-	<% @overview = "Edit Feedback of #{link_to_user(@feedback.user)}  " %>
-<% end %>
-
-<%= error_messages_for :feedback %>
-
-<% tabular_form_for :feedback, @feedback, :url => { :action => 'update', :id => @feedback.id } do |f| %>
-    <%= f.text_area 'text', :cols => 100, :rows => 10 %>
-	<%= f.hidden_field 'request_referer', :value => request.referer %>
-    <tr><th></th><td><%= submit_tag "Submit" %></td></tr>  
-<% end %>
-
-<%= link_to 'Back', :action => request.referer %>
diff --git a/source/app/views/layouts/management.rhtml b/source/app/views/layouts/management.rhtml
deleted file mode 100644
index 6955763..0000000
--- a/source/app/views/layouts/management.rhtml
+++ /dev/null
@@ -1,187 +0,0 @@
-<html>
-  <head>
-    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
-    <title><%= (ENV['EPFWIKI_APP_NAME'] + " - ") if !@site || !@site.id %><% if @site && @site.id %><%= @site.title + ' - ' %><% end %><%= @heading %></title>
-    <%= stylesheet_link_tag 'default' %>
-	<%= stylesheet_link_tag 'wiki' %>
-    <%= javascript_include_tag "prototype" %>
-    <%= javascript_include_tag "contentpage" %>
-    <%= javascript_include_tag "steps" %>
-    <%= javascript_include_tag :defaults %>
-    <script type="text/javascript" language="JavaScript">
-               backPath = './../../';
-    </script>
-    <% unless @tinymce.blank? %>
-        <%= javascript_include_tag 'tiny_mce/tiny_mce.js' %>  
-        <script language="javascript" type="text/javascript">
-        tinyMCE.init({
-        gecko_spellcheck : true,
-        mode : "textareas",
-        theme : "<%= @tinymce %>",
-        theme_advanced_statusbar_location: "bottom",
-        theme_advanced_resizing : true,
-        content_css : "../../stylesheets/default.css"
-        });
-        </script>        
-    <% end %>
-    </head>
-  <body onload="createSectionLinks('div', 'sectionHeading', './../../images/');">
-
-<% unless params[:action] == 'login' %>  
-<% case params[:controller] + '/' + params[:action]
-when 'sites/list' then params[:action] = 'Sites'
-when 'users/list' then params[:action] = 'Users'
-when 'users/account' then params[:action] = "Account"
-when 'other/about' then params[:action] = 'About'
-end
-%>	
-<div id="epfwiki_header">
-<div id="toolbar">
-	<ol id="toc">
-	    <%= menulink_to 'Sites', :controller => 'sites', :action => 'list' %>
-		<%= menulink_to 'Users', :controller => 'users', :action => 'list' %>
-		<% if admin? %>
-		<%= menulink_to 'About', :controller => 'other', :action => 'about' %>				
-		<% end %>
-		<% if session['user'] %>
-			<li class="simple"><%= link_to '<span>Logout</span>', :controller => 'login', :action => 'logout' %></li>
-		<% else %>
-			<li class="simple"><%= link_to '<span>Login</span>', :controller => 'login', :action => 'login' %></li>
-		<% end %>
-		<li class="simple"><a href="/" target="_parent"><span>Home</span></a></li>
-		<% if session['user'] %>
-			<li class="simple"><%= link_to "<span>#{session['user'].email}</span>", :controller => 'users', :action => 'account' %></li>
-		<% end %>
-	</ol>
-</div>
-</div>
-<div id="spacer"></div>
-<% end %>
-	
-  <table width="100%" cellspacing="0" cellpadding="0" border="0">
-      <tr>
-        <td valign="top">
-          <a name="Top" id="Top"></a>
-
-          <table width="100%" cellpadding="0" cellspacing="0" border="0">
-            <tr>
-              <td class="pageTitle">
-                  <%= @heading %>
-              </td>
-            </tr>
-          </table>
-          
-          <table cellspacing="0" cellpadding="0" border="0" width="100%">
-            <tr>
-               <td class="pageTitleSeparator">
-                  <%= image_tag 'shim.gif',:height => 1 %></td>
-            </tr>
-          </table>
-          
-           <div class="overview">
-             <table cellpadding="0" cellspacing="0" border="0"
-             width="97%">
-               <tr>
-                 <td width="50">
-                    <%= image_tag('site_logo.jpg') %>
-                 </td>
-                 <td>
-                   <table cellpadding="0" cellspacing="0" border="0"
-                   class="overviewTable">
-                     <tr>
-                       <td valign="top">
-                           <%= @overview %>
-                       </td>
-                     </tr>
-                   </table>
-                 </td>
-               </tr>
-             </table>
-           </div>
-
-<!-- start of what should be a partial because it is also in layout wiki.rhtml -->
-<% if flash.size > 0 %>
-    <div class="sectionContent">
-        <table cellpadding="0" cellspacing="0" border="0" class="sectionTable">
-            <tr>
-                <td class="sectionTableCell">
-                    <table>
-                    <% ['error', 'warning', 'notice', 'success'].each do |flash_type| %>
-                        <% if flash[flash_type] %>
-                            <tr>
-                                <th valign="top" width="100"><%= image_tag(flash_type + '.png') %></th>
-                                <td><%= flash[flash_type] %></td>
-                            </tr>
-                        <% end %>
-                    <% end %>
-                    </table>
-                </td>
-            </tr>
-        </table>
-    </div>
-    <br>
-<% end %>
-<!-- end of partial -->       
-            
-            <%= @content_for_layout %>
-         </td>
-      </tr>
-  </table>
-  <br>
-  <br>
-  <br>
-              <% if RAILS_ENV == "development2" %>
-                <div class="sectionHeading">Debug</div>
-                <div class="sectionContent">
-                    <table cellpadding="0" cellspacing="0" border="0" class="sectionTable">
-                        <tr>
-                            <td class="sectionTableCell">
-                                <table>
-                                  <tr valign="top">
-                                      <th scope="row" class="sectionTableHeading">Session</th>
-                                      <td align="left" class="sectionTableCell"><%= debug(session) %></td>
-                                  </tr> 
-                                  <tr valign="top">
-                                      <th scope="row" class="sectionTableHeading">Params</th>
-                                      <td align="left" class="sectionTableCell"><%= debug(params) %></td>
-                                  </tr> 
-                                  <!--<tr valign="top">
-                                      <th scope="row" class="sectionTableHeading">Response</th>
-                                      <td align="left" class="sectionTableCell"> debug(response) </td>
-                                  </tr> -->
-                                  <tr valign="top">
-                                      <th scope="row" class="sectionTableHeading">Request Environment</th>
-                                      <td align="left" class="sectionTableCell"><%= debug(request.env) %></td>
-                                  </tr>
-                                  <% if @site %>
-                                  <tr valign="top">
-                                      <th scope="row" class="sectionTableHeading">Site</th>
-                                      <td align="left" class="sectionTableCell"><!-- TODOdebug(@site) --></td>
-                                  </tr>
-                                  <% end %>
-                                <% if @page %>
-                                    <tr valign="top">
-                                        <th scope="row" class="sectionTableHeading">Page</th>
-                                        <td align="left" class="sectionTableCell"><%= debug(@page) %></td>
-                                    </tr>
-                                <% end %>
-                                <% if @version %>
-                                    <tr valign="top">
-                                        <th scope="row" class="sectionTableHeading">Version</th>
-                                        <td align="left" class="sectionTableCell"><%= debug(@version) %></td>
-                                    </tr>
-                                <% end %>
-                                </table>
-                            </td>
-                      </tr>
-                  </table>
-              </div>
-            <% end %>
-                    <div id="footer">
-        <p>
-            <%= link_to 'Site Help and Feedback', :controller => 'help' %> 
-        </p>
-        </div>
-     </body>
-</html>
-
diff --git a/source/app/views/layouts/portal.rhtml b/source/app/views/layouts/portal.rhtml
deleted file mode 100644
index 730f889..0000000
--- a/source/app/views/layouts/portal.rhtml
+++ /dev/null
@@ -1,194 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html>
-  <head>
-    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
-    <title><%= ENV['EPFWIKI_APP_NAME'] %><%= ' - ' + @heading if @heading %>
-    </title>
-    <meta name="keywords" content="epf, wiki, eclipse, process, framework, community, software, process, openup, scrum, xp, rup, description, composer" />
-    <%= javascript_include_tag :defaults %>
-    <%= stylesheet_link_tag 'default' %> 
-    </head>
-<body>
-    <div id="wrap">
-        <div id="header"><h1 class="pageTitle"><%= ENV['EPFWIKI_APP_NAME'] %></h1></div>
-        <div id="nav">
-            <p>
-            <ul>
-                <li><%= link_to 'Home', :controller => 'portal', :action => 'home' %> |</li> 
-                <li><%= link_to 'Wikis', :controller => 'portal', :action => 'wikis' %> |</li>
-				<li><%= link_to 'Users', :controller => 'portal', :action => 'users' %> |</li>
-				<li><%= link_to 'Manage', :controller => 'sites', :action => 'list' %> |</li>
-                <li><%= link_to 'About', :controller => 'portal', :action => 'about' %></li> 
-            </ul>
-            </p>
-			<% if false %>
-			  # TODO Bugzilla 231125
-			<div id="search" style="float: right; position: relative; top: -60px">
-				<form id="searchbox_018374592628869583324:qxgzcbdmdag" action="/other/search">
-                 <input name="q" size="20" value="Search" onfocus="this.value=''" type="text">
-                <input type="submit" value="Go" />
-                </form>
-        	</div>
-			<% end %> 			
-        </div>
-   
-        <div id="main">
-<% if flash.size > 0 %>        
-    <div class="sectionContent">
-        <table cellpadding="0" cellspacing="0" border="0" class="sectionTable">
-            <tr>
-                <td class="sectionTableCell">
-                    <table>
-                    <% ['error', 'warning', 'notice', 'success'].each do |flash_type| %>
-                        <% if flash[flash_type] %>
-                            <tr>
-                                <th valign="top" width="100"><%= image_tag(flash_type + '.png') %></th>
-                                <td><%= flash[flash_type] %></td>
-                            </tr>
-                        <% end %>
-                    <% end %>
-                    </table>
-                </td>
-            </tr>
-        </table>
-    </div>
-    <br>
-<% end %>      
-            <%= @content_for_layout %>
-            <p></p>
-        </div>
-        <div id="sidebar">
-
-            <h3>Wikis</h3>
-            <p>Process descriptions created using EPF Composer deployed as Wikis:
-			    <ul>
-			        <% for wiki in @wikis %>
-					<% if wiki.title != 'Templates' %>
-			            <li>
-			                <%= link_to(wiki.title + " " + image_tag('link.gif', :border => 0, :title => "Activate this site"), wiki.url) %> 
-							<%= link_to(image_tag('rss.gif', :border => 0, :title => "Link to RSS feed"), :controller => 'rss', :action => 'list', :site_folder => wiki.folder) %>
-			                <% if wiki.created_on > (Time.now - 14.days ) %> 
-			                    <%= image_tag ('new.png') %>
-			                <% end %>
-			            </li>
-					<% end %>	
-			        <% end %>
-			    </ul>
-            </p>
-			<p>RSS for all Wikis: <%= link_to(image_tag('rss.gif', :border => 0, :title => "Link to RSS feed"), :controller => 'rss', :action => 'list', :site_folder => 'all') %>
-			</p>
-            <% unless @updates_sidebar.empty? %>
-            <p>Updates:
-                <ul>
-                    <% for update in @updates_sidebar %>
-                        <li><%= update.wiki.title%> was updated to <%= update.wiki.baseline_process.title %> on <%= update.started_on.localtime.strftime(TIME_FORMAT)%></li>
-                    <% end %>
-                </ul>
-            </p>
-            <% end %>
-
-            <h3>Toolbox</h3>
-            <p>
-                <ul>
-                    <li><%= link_to_function("Create new page in ...") do |page| 
-		    				page.visual_effect :toggle_appear, "sites_for_new_pages"  
-		  				end %>
-						<ul id="sites_for_new_pages" style="display:none;">
-					        <% for wiki in @wikis %>
-							<% page = Page.find(:first, :conditions => ['site_id=?',wiki.id]) %>
-							<% if page %>
-					            <li>
-					                <%= link_to wiki.title, :controller => 'pages', :site_folder => wiki.folder, :id => page.id, :action => 'new' %> 
-					            </li>
-							<% end %>
-					        <% end %>
-						</ul>
-					</li>
-                    <li><%= link_to 'Upload file', :controller => 'uploads', :action => 'new' %></li>
-					<li><%= link_to 'My Account', :controller => 'users', :action => 'account' %></li>
-					<li><%= link_to 'EPF Wiki User Guide', 'http://wiki.eclipse.org/EPF_Wiki_User_Guide' %></li>
-                </ul>
-            </p>
-			
-			
-			<h3>Hall of Fame</h3>
-			<p>
-				<div id="monthly_top">
-				<div id="tabs">
-				<ol id="toc_tabs">
-				    <li class="current"><a><span>Monthly</span></a></li>
-					<li>
-						<%= link_to_function("<span>Overall</span>") do |page| 
-							page.hide "monthly_top"
-							page.show "overall_top"
-						end %>
-					</li>
-				</ol>
-				</div>
-				<ul>
-				<% @monthly_top.each do | top | %>
-					<li><%= link_to_user top[0] %>: <%= top[1].to_s %></li>
-				<% end %>		
-				</ul>
-				</div>
-
-				<div id="overall_top" style="display:none;">
-				<div id="tabs">
-				<ol id="toc_tabs">
-					<li>
-						<%= link_to_function("<span>Monthly</span>") do |page| 
-							page.show "monthly_top"
-							page.hide "overall_top"
-						end %>
-					</li>
-				    <li class="current"><a><span>Overall</span></a></li>
-				</ol>
-				</div>
-				<ul>
-				<% @overall_top.each do | top | %>
-					<li><%= link_to_user top[0] %>: <%= top[1].to_s %></li>
-				<% end %>		
-				</ul>
-				</div>
-			
-			</p>
-            <% if @checkouts.size > 0 %>
-            <h3>Checkouts</h3>
-            <p>
-                <ul>
-                    <% for checkout in @checkouts %>
-                        <li>
-                            <%= checkout.created_on.localtime.strftime(TIME_FORMAT)%> - <%= link_to_page checkout.page %>
-							by <%= link_to_user checkout.user %>
-                        </li>
-                    <% end %>
-                </ul>
-            </p>
-            <% end %>
-            <h3>Archives</h3>
-            <p>
-                <ul>
-                    <% @archives_count.each do |archive_count| %>
-                    <li><%= link_to "#{Time.gm(Time.now.year,archive_count[0]).strftime('%B')} (#{archive_count[1]})", :controller => 'portal', :action => 'archives', :year => Time.now.year, :month => archive_count[0] %></li>
-                    <% end %>
-                </ul>
-            </p>
-
-
-            
-        </div>
-        <div id="footer">
-        <p>
-            <%= link_to 'Site Help and Feedback', :controller => 'portal', :action => 'feedback' %> 
-			<% unless @termsofuse.blank? %>
-			| <%= link_to 'Terms of Use', :controller => 'portal', :action => 'termsofuse' %>
-			<% end %>
-			<% unless @privacypolicy.blank? %>
-			| <%= link_to 'Privacy Policy', :controller => 'portal', :action => 'privacypolicy' %>
-			<% end %>
-        </p>
-        </div>
-    </div>
- </body>
-</html>           
-                
\ No newline at end of file
diff --git a/source/app/views/layouts/wiki.rhtml b/source/app/views/layouts/wiki.rhtml
deleted file mode 100644
index 65004b6..0000000
--- a/source/app/views/layouts/wiki.rhtml
+++ /dev/null
@@ -1,157 +0,0 @@
-<html>
-  <head>
-    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
-    <title><%= @wiki.title + ' - ' + @page.presentation_name + ' - ' + params[:action].split(/\s+/).each{ |word| word.capitalize! }.join(' ') %></title>
-	<%= javascript_include_tag :defaults %>
-    <%= javascript_include_tag 'contentpage' if @tinymce.blank? %>
-    <%= stylesheet_link_tag 'wiki' %>
-	<link type="text/css" href="<%= "/#{ENV['EPFWIKI_WIKIS_FOLDER']}/#{@wiki.folder}/css/default.css" %>" rel="StyleSheet">
-	<% if !@tinymce.blank? %>
-        <%= javascript_include_tag 'tiny_mce/tiny_mce.js' %>  
-        <script language="javascript" type="text/javascript">
-        tinyMCE.init({
-        gecko_spellcheck : true,
-        mode : "textareas",
-        theme : "<%= @tinymce %>",
-        theme_advanced_statusbar_location: "bottom",
-        theme_advanced_resizing : true,
-        content_css : "../../stylesheets/default.css"
-        });
-        </script>        
-    <% end %>
-    </head>
-
-	<% if @tinymce.blank? %>
-		<body onload="createSectionLinks('div', 'sectionHeading', './../../images/');">
-  	<% else %>
-		<body>
-	<% end %>
-	
-	<div id="epfwiki_header">
-		<%= render :partial => 'pages/header' %>
-	</div>
-	<div id="spacer"></div>
-
-  <table width="100%" cellspacing="0" cellpadding="0" border="0">
-      <tr>
-        <td valign="top">
-          <a name="Top" id="Top"></a>
-			<table cellpadding="0" cellspacing="0" border="0">
-			<tr>
-			<td nowrap="true" class="pageTitle"><%= params[:action].capitalize.split(/\s+/).each{ |word| word.capitalize! }.join(' ') + ': ' + @page.presentation_name %></td><td align="right" class="expandCollapseLink" width="99%"><a href="./../../../index.htm"></a></td>
-			</tr>
-			</table>
-          <table cellspacing="0" cellpadding="0" border="0" width="100%">
-            <tr>
-               <td class="pageTitleSeparator">
-                  <%= image_tag 'shim.gif',:height => 1 %></td>
-            </tr>
-          </table>
-
-
-           <div class="overview">
-             <table cellpadding="0" cellspacing="0" border="0"
-             width="97%">
-               <tr>
-                 <td width="50">
-                    <%= image_tag('site_logo.jpg') %>
-                 </td>
-                 <td>
-                   <table cellpadding="0" cellspacing="0" border="0"
-                   class="overviewTable">
-                     <tr>
-                       <td valign="top">
-                           <%= @overview %>
-                       </td>
-                     </tr>
-                   </table>
-                 </td>
-               </tr>
-             </table>
-           </div>
-
-<!-- start of what should be a partial because it is also in management.rhtml -->
-<% if flash.size > 0 %>
-    <div class="sectionContent">
-        <table cellpadding="0" cellspacing="0" border="0" class="sectionTable">
-            <tr>
-                <td class="sectionTableCell">
-                    <table>
-                    <% ['error', 'warning', 'notice', 'success'].each do |flash_type| %>
-                        <% if flash[flash_type] %>
-                            <tr>
-                                <th valign="top" width="100"><%= image_tag(flash_type + '.png') %></th>
-                                <td><%= flash[flash_type] %></td>
-                            </tr>
-                        <% end %>
-                    <% end %>
-                    </table>
-                </td>
-            </tr>
-        </table>
-    </div>
-    <br>
-<% end %>
-<!-- end of partial -->
-            <%= @content_for_layout %>
-         </td>
-      </tr>
-  </table>
-  <br>
-  <br>
-  <br>
-              <% if RAILS_ENV == "development2" %>
-                <div class="sectionHeading">Debug</div>
-                <div class="sectionContent">
-                    <table cellpadding="0" cellspacing="0" border="0" class="sectionTable">
-                        <tr>
-                            <td class="sectionTableCell">
-                                <table>
-                                  <tr valign="top">
-                                      <th scope="row" class="sectionTableHeading">Session</th>
-                                      <td align="left" class="sectionTableCell"><%= debug(session) %></td>
-                                  </tr> 
-                                  <tr valign="top">
-                                      <th scope="row" class="sectionTableHeading">Params</th>
-                                      <td align="left" class="sectionTableCell"><%= debug(params) %></td>
-                                  </tr> 
-                                  <!--<tr valign="top">
-                                      <th scope="row" class="sectionTableHeading">Response</th>
-                                      <td align="left" class="sectionTableCell"> debug(response) </td>
-                                  </tr> -->
-                                  <tr valign="top">
-                                      <th scope="row" class="sectionTableHeading">Request Environment</th>
-                                      <td align="left" class="sectionTableCell"><%= debug(request.env) %></td>
-                                  </tr>
-                                  <% if @site %>
-                                  <tr valign="top">
-                                      <th scope="row" class="sectionTableHeading">Site</th>
-                                      <td align="left" class="sectionTableCell"><!-- TODOdebug(@site) --></td>
-                                  </tr>
-                                  <% end %>
-                                <% if @page %>
-                                    <tr valign="top">
-                                        <th scope="row" class="sectionTableHeading">Page</th>
-                                        <td align="left" class="sectionTableCell"><%= debug(@page) %></td>
-                                    </tr>
-                                <% end %>
-                                <% if @baseline %>
-                                    <tr valign="top">
-                                        <th scope="row" class="sectionTableHeading">Baseline</th>
-                                        <td align="left" class="sectionTableCell"><%= debug(@baseline) %></td>
-                                    </tr>
-                                <% end %>
-                                <% if @version %>
-                                    <tr valign="top">
-                                        <th scope="row" class="sectionTableHeading">Version</th>
-                                        <td align="left" class="sectionTableCell"><%= debug(@version) %></td>
-                                    </tr>
-                                <% end %>
-                                </table>
-                            </td>
-                      </tr>
-                  </table>
-              </div>
-            <% end %>
-     </body>
-</html>
diff --git a/source/app/views/login/change_password.rhtml b/source/app/views/login/change_password.rhtml
deleted file mode 100644
index 1ec0e28..0000000
--- a/source/app/views/login/change_password.rhtml
+++ /dev/null
@@ -1,8 +0,0 @@
-<% @heading = 'Change Password' %>
-<%= error_messages_for 'user' %>
-
-<% tabular_form_for :user do |f| %>
-    <%= f.password_field :password, :size => 42 %>
-    <%= f.password_field :password_confirmation, :size => 42 %>    
-    <tr><th></th><td><%= submit_tag "Change password" %></td></tr>    
-<% end %>
\ No newline at end of file
diff --git a/source/app/views/login/login.rhtml b/source/app/views/login/login.rhtml
deleted file mode 100644
index 8676f7e..0000000
--- a/source/app/views/login/login.rhtml
+++ /dev/null
@@ -1,29 +0,0 @@
-<%= javascript_include_tag  :defaults %>
-<% @heading = 'Log in' %>
-<% @overview =  "Not a user? Click #{link_to('here', :controller => 'login', :action => 'sign_up')} to create a new account!"  %>
-
-<%= error_messages_for 'user' %>
-
-<div class="sectionContent">
-    <table cellpadding="0" cellspacing="0" border="0" class="sectionTable">
-        <tr>
-            <td class="sectionTableCell">
-                <table width=100% border=0>
-                    <tr>
-                        <td>
-							<%= @login_message %>
-                        </td>
-                    </tr>
-                </table>
-            </td>
-        </tr>
-    </table>
-</div>
-
-
-<% tabular_form_for :user do |f| %>
-    <tr><th>Email</th><td><%= text_field_with_auto_complete :user, :email, :size => 40 %><td></tr>
-    <tr><th>Password</th><td><%= password_field(:user, :password, :size => 42) %> (<%= link_to 'I forgot my password', :controller => 'login', :action => 'lost_password' %>)</td></tr>
-    <tr><th></th><td><%= check_box(:user, :remember_me, {}, 0, 1) %> Remember me on this computer</td></tr>
-    <tr><th></th><td><%= submit_tag 'Let me in!' %></td></tr>
-<% end %>
diff --git a/source/app/views/login/lost_password.rhtml b/source/app/views/login/lost_password.rhtml
deleted file mode 100644
index d0c48b6..0000000
--- a/source/app/views/login/lost_password.rhtml
+++ /dev/null
@@ -1,11 +0,0 @@
-<% @heading = 'Lost Password' %>
-<% @overview = 'Use this form to reset the password for your email address. The new password will only be actived after it is confirmed with the link in the confirmation email.' %>
-<%= error_messages_for 'user' %>
-<%= error_messages_for 'user_by_email' %>
-
-<% tabular_form_for :user do |f| %>
-    <%= f.text_field :email, :size => 30 %>
-    <%= f.password_field :password, :size => 42 %>
-    <%= f.password_field :password_confirmation, :size => 42 %>    	
-    <tr><th></th><td><%= submit_tag "Submit" %></td></tr>    
-<% end %>
\ No newline at end of file
diff --git a/source/app/views/login/new_cadmin.rhtml b/source/app/views/login/new_cadmin.rhtml
deleted file mode 100644
index d77df9a..0000000
--- a/source/app/views/login/new_cadmin.rhtml
+++ /dev/null
@@ -1,10 +0,0 @@
-<% @heading = 'Create Central Admin User' %>
-<%= error_messages_for 'user' %>
-
-<% tabular_form_for :user do |f| %>
-    <%= f.text_field :name, :size => 30 %>
-    <%= f.text_field :email, :size => 30 %>
-    <%= f.password_field :password, :size => 42 %>
-    <%= f.password_field :password_confirmation, :size => 42 %>    
-    <tr><th></th><td><%= submit_tag 'Submit' %></td></tr>    
-<% end %>
diff --git a/source/app/views/login/sign_up.rhtml b/source/app/views/login/sign_up.rhtml
deleted file mode 100644
index f8d62b7..0000000
--- a/source/app/views/login/sign_up.rhtml
+++ /dev/null
@@ -1,18 +0,0 @@
-<% @heading = 'Sign up' %>
-<%= error_messages_for 'user' %>
-
-<% tabular_form_for :user do |f| %>
-    <%= f.text_field :name, :size => 30 %>
-    <tr><th>Email</th><td><%= text_field('user', 'email', :size => 41) %>
-            					<% if ENV['EPFWIKI_DOMAINS'] %>
-        						<select  name="user[email_extension]">
-        						   <% for domain in ENV['EPFWIKI_DOMAINS'].split(' ') %>
-        						      <%= '<option>' + domain + '</option>' %>
-        						   <% end %>
-        						</select>
-        					<% end %>
-    </td></tr>
-    <%= f.password_field :password, :size => 42 %>
-    <%= f.password_field :password_confirmation, :size => 42 %>    
-    <tr><th></th><td><%= submit_tag 'Sign me up!' %></td></tr>    
-<% end %>
\ No newline at end of file
diff --git a/source/app/views/notifier/_footer.rhtml b/source/app/views/notifier/_footer.rhtml
deleted file mode 100644
index 77df3f9..0000000
--- a/source/app/views/notifier/_footer.rhtml
+++ /dev/null
@@ -1 +0,0 @@
-<p>If you have questions regarding <%= ENV['EPFWIKI_APP_NAME'] %> or this e-mail, please contact <%= link_to @admin.name, 'mailto:' + @admin.email %></p>
\ No newline at end of file
diff --git a/source/app/views/notifier/_header.rhtml b/source/app/views/notifier/_header.rhtml
deleted file mode 100644
index 1020451..0000000
--- a/source/app/views/notifier/_header.rhtml
+++ /dev/null
@@ -1,45 +0,0 @@
-<style>
-<!--
-
-* {    font-size:    9pt;    font-family:    arial, helvetica, sans-serif; line-height: 1.7em; }
-p { margin: 10px;}
-th {background-color:#EEEEEE}
-table {border: 0px;
-empty-cells: show;}
-.header{background-color:#98B1C4; color: white;}
-#header {
-    background:#9999CC;
-    color:#FFFFFF;
-    }
-#header .pageTitle {
-    color: #ffffff;
-    font-size: 12pt;
-    font-weight: bold;
-    padding-top: 2px;
-    padding-bottom: 2px;
-    padding-left: 10px;
-    padding-right: 10px;
-    background: #9999cc; text-align: left;
-    border-bottom: 1px solid black;
-}
-
-.sectionHeading
-{
-	/*background-color: #98b1c4;*/
-	background-color: #FFFFFF;
-	color: #000000;
-	cursor: hand;
-	font-family: arial, helvetica, sans-serif;
-	font-size: 10pt;
-	font-weight: bold;
-	padding-bottom: 2px;
-	padding-left: 2px;
-	padding-top: 2px;
-	text-decoration: none;
-	border: 0px;
-}
--->
-</style>
-<div id="header"><h1 class="pageTitle"><%= @subject %></h1></div>
-<p><%= ::MSG_EMAIL_SERVER_GENERATED %></p>
-
diff --git a/source/app/views/notifier/authorisation_problem.rhtml b/source/app/views/notifier/authorisation_problem.rhtml
deleted file mode 100644
index 7117459..0000000
--- a/source/app/views/notifier/authorisation_problem.rhtml
+++ /dev/null
@@ -1,51 +0,0 @@
-<%= render :partial => 'header' %>
-
-<p>Hi <%= @admin.name %>,</p>
-<p>A authorisation problem was detected when user <%= link_to @user.name, "mailto:#{@user.email}" %> 
-was using <%= link_to ENV['EPFWIKI_APP_NAME'] , "http://#{ENV['EPFWIKI_HOST']}/" %>. This could mean
-many things. It could mean there is a problem in the application. Or maybe the user needs extra privileges (admin privileges).
-Or the user tried to hack the system. Details of the event are below to help you analyse the event</p>
-
-Your <%= ENV['EPFWIKI_APP_NAME'] %> Server</p>
-
-<table border="0">
-<tr><th>Location</th><td><%= @env['REQUEST_URI'] %></td></tr>
-<tr><th>Action</th><td><%= @params.delete('action') %></td></tr>
-<tr><th>Controller</th><td><%= @params.delete('controller') %></td></tr>
-<tr><th>Query</th><td><%= @env['QUERY_STRING'] %></td></tr>
-<tr><th>Method</th><td><%= @env['REQUEST_METHOD'] %></td></tr>
-<tr><th>SSL</th><td><%= @env['SERVER_PORT'].to_i == 443 ? "true" : "false"  %></td></tr>
-<tr><th>Agent</th><td><%= @env['HTTP_USER_AGENT']  %></td></tr>
-</table>
-
-<h3>Params</h3>
-<hr/>
-<% for key, val in @params -%>
-<p><b><%= key %></b></p>
-<p><%= val.to_yaml.to_a.join("</p>\n<p>    ") %></p>
-<% end if @params -%>
-
-<h3>Session</h3>
-<hr/>
-<% for key, val in @session -%>
-<p><b><%= key %></b></p>
-<p><%= val.to_yaml.to_a.join("</p>\n<p>    ") %></p>
-<% end if @session -%>
-
-<h3>Environment</h3>
-<hr/>
-<table border="0">
-<% for key, val in @env -%>
-<tr>
-  <td>
-    <small><b><%= key %></b></small>
-
-  </td>
-  <td>
-    <small><%= val %></small>
-  </td>
-</tr>
-<% end if @env -%>
-</table>
-
-<%= render :partial => 'footer' %>
\ No newline at end of file
diff --git a/source/app/views/notifier/contributions_processed.rhtml b/source/app/views/notifier/contributions_processed.rhtml
deleted file mode 100644
index 319e785..0000000
--- a/source/app/views/notifier/contributions_processed.rhtml
+++ /dev/null
@@ -1,28 +0,0 @@
-<%= render :partial => 'header' %>
-<p>Hi <%= @user.name %>,</p>
-<p>One or more contributions you made through <%= link_to ENV['EPFWIKI_APP_NAME'] , "http://#{ENV['EPFWIKI_HOST']}/" %> have been processed.
-Contributions through the Wiki are typically used to update the process asset library but they might also be recorded 
-as enhancement requests or defects for more formal processing and tracking of the request or issue raised.
-This email is send to inform you on how the contribution was processed.</p>
-<p>
-	<table>
-		<tr><th>Contribution</th><th>Reviewer</th><th>Review Note</th><th>Wiki</th></tr>
-		<% @contributions.each do | contribution | %>
-			<% if contribution.class.name == Upload.name %>
-				<% upload = contribution %>
-				<tr><td><%= link_to upload.filename, upload.url(true) %></td><td><%= upload.reviewer.name if upload.reviewer %></td><td><%= upload.review_note %></td><td></td></tr>          
-			<% elsif contribution.class.name == UserVersion.name %>
-				<% version = contribution %>
-				<tr><td><%= link_to version.page.presentation_name + ' version ' + version.version.to_s , version.page.url(true) %></td><td><%= version.reviewer.name if version.reviewer %></td><td><%= version.review_note %></td><td><%= link_to version.wiki.title, version.wiki.url(true) %></td></tr>
-			<% elsif contribution.class.name == Comment.name %>
-				<% comment = contribution %>
-				<tr><td><%= link_to comment.text, comment.page.url(true) %></td><td><%= comment.reviewer.name if comment.reviewer %></td><td><%= comment.review_note %></td><td><%= link_to comment.site.title, comment.site.url(true) %></td></tr>
-			<% end %>
-		<% end %>
-	</table>
-</p>
-
-<p>Thanks for your contributions,<br>
-Your <%= ENV['EPFWIKI_APP_NAME'] %> Server</p>
-
-<%= render :partial => 'footer' %>
\ No newline at end of file
diff --git a/source/app/views/notifier/email.rhtml b/source/app/views/notifier/email.rhtml
deleted file mode 100644
index 5e86bee..0000000
--- a/source/app/views/notifier/email.rhtml
+++ /dev/null
@@ -1,17 +0,0 @@
-<style>
-<!--
-
-* { font-size:    9pt;    
-    font-family:    verdana, helvetica, arial, sans-serif; line-height: 1.7em; 
-    }
-
-p   {   margin: 0 
-    }
--->
-</style>
-<%= ::MSG_EMAIL_SERVER_GENERATED %><br><br>
-<br>
-<%= @text %>
-<br><br><br>
-If you have questions regarding <%= ENV['EPFWIKI_APP_NAME'] %> or this e-mail, please contact <a href="mailto:<%= @admin.email %>"><%= @admin.name %></a>
-
diff --git a/source/app/views/notifier/env_to.rhtml b/source/app/views/notifier/env_to.rhtml
deleted file mode 100644
index 74de72a..0000000
--- a/source/app/views/notifier/env_to.rhtml
+++ /dev/null
@@ -1,49 +0,0 @@
-<style>
-<!--
-
-* {    font-size:    9pt;    font-family:    verdana, helvetica, arial, sans-serif; line-height: 1.7em; }
-p { margin: 0 }
--->
-</style>
-<h2>EPF Wiki Environment <%= Time.now %></h2>
-
-<table border="0">
-<tr><td>Location</td><td><%= @env['REQUEST_URI'] %></td></tr>
-<tr><td>Action</td><td><%= @params.delete('action') %></td></tr>
-<tr><td>Controller</td><td><%= @params.delete('controller') %></td></tr>
-<tr><td>Query</td><td><%= @env['QUERY_STRING'] %></td></tr>
-<tr><td>Method</td><td><%= @env['REQUEST_METHOD'] %></td></tr>
-<tr><td>SSL</td><td><%= @env['SERVER_PORT'].to_i == 443 ? "true" : "false"  %></td></tr>
-<tr><td>Agent</td><td><%= @env['HTTP_USER_AGENT']  %></td></tr>
-</table>
-
-<h3>Params</h3>
-<hr/>
-<% for key, val in @params -%>
-<p><b><%= key %></b></p>
-<p><%= val.to_yaml.to_a.join("</p>\n<p>    ") %></p>
-<% end if @params -%>
-
-<h3>Session</h3>
-<hr/>
-<% for key, val in @session -%>
-<p><b><%= key %></b></p>
-<p><%= val.to_yaml.to_a.join("</p>\n<p>    ") %></p>
-<% end if @session -%>
-
-<h3>Environment</h3>
-<hr/>
-<table border="0">
-<% for key, val in @env -%>
-<tr>
-  <td>
-    <small><b><%= key %></b></small>
-
-  </td>
-  <td>
-    <small><%= val %></small>
-  </td>
-</tr>
-<% end if @env -%>
-</table>
-
diff --git a/source/app/views/notifier/error_report.rhtml b/source/app/views/notifier/error_report.rhtml
deleted file mode 100644
index 547ae99..0000000
--- a/source/app/views/notifier/error_report.rhtml
+++ /dev/null
@@ -1,52 +0,0 @@
-<style>
-<!--
-
-* {    font-size:    9pt;    font-family:    verdana, helvetica, arial, sans-serif; line-height: 1.7em; }
-p { margin: 0 }
--->
-</style>
-<h2>Error report from <%= Time.now %></h2>
-
-<table border="0">
-<tr><td>Message</td><td><%= @exception.message %></td></tr>
-<tr><td>Location</td><td><%= @env['REQUEST_URI'] %></td></tr>
-<tr><td>Action</td><td><%= @params.delete('action') %></td></tr>
-<tr><td>Controller</td><td><%= @params.delete('controller') %></td></tr>
-<tr><td>Query</td><td><%= @env['QUERY_STRING'] %></td></tr>
-<tr><td>Method</td><td><%= @env['REQUEST_METHOD'] %></td></tr>
-<tr><td>SSL</td><td><%= @env['SERVER_PORT'].to_i == 443 ? "true" : "false"  %></td></tr>
-<tr><td>Agent</td><td><%= @env['HTTP_USER_AGENT']  %></td></tr>
-</table>
-
-<h3>Backtrace</h3>
-<div><%= @trace.to_a.join("</p>\n<p>") -%></div>
-
-<h3>Params</h3>
-<hr/>
-<% for key, val in @params -%>
-<p><b><%= key %></b></p>
-<p><%= val.to_yaml.to_a.join("</p>\n<p>    ").gsub(/password:.*/, 'password: ****') %></p>
-<% end if @params -%>
-
-<h3>Session</h3>
-<hr/>
-<% for key, val in @session -%>
-<p><b><%= key %></b></p>
-<p><%= val.to_yaml.to_a.join("</p>\n<p>    ").gsub(/password:.*/, 'password: ****') %></p>
-<% end if @session -%>
-
-<h3>Environment</h3>
-<hr/>
-<table border="0">
-<% for key, val in @env -%>
-<tr>
-  <td>
-    <small><b><%= key %></b></small>
-
-  </td>
-  <td>
-    <small><%= val %></small>
-  </td>
-</tr>
-<% end if @env -%>
-</table>
diff --git a/source/app/views/notifier/feedback.rhtml b/source/app/views/notifier/feedback.rhtml
deleted file mode 100644
index f518b5a..0000000
--- a/source/app/views/notifier/feedback.rhtml
+++ /dev/null
@@ -1,15 +0,0 @@
-<%= render :partial => 'header' %>
-
-<p>Hi <%= @admin.name %>,</p>
-<p>Feedback was posted or help was requested via <%= link_to ENV['EPFWIKI_APP_NAME'] , "http://#{ENV['EPFWIKI_HOST']}/" %> by
-<%= link_to(@feedback.user.name, "mailto:#{@feedback.user.email}") unless @feedback.user.nil? %>
-<%= link_to(@feedback.email, "mailto:#{@feedback.email}") if @feedback.user.nil? %>.</p>
-<p>The user posted the following message:<br>"<i><%= @feedback.text %></i>"</p>
-
-<p>
-You can manage follow-up of feedback using <%= link_to ENV['EPFWIKI_APP_NAME'], "http://#{ENV['EPFWIKI_HOST']}/sites/feedback/#{@anywiki.id}" %>
-</p>
-
-<p></>Your <%= ENV['EPFWIKI_APP_NAME'] %> Server</p>
-
-<%= render :partial => 'footer' %>
\ No newline at end of file
diff --git a/source/app/views/notifier/lost_password.rhtml b/source/app/views/notifier/lost_password.rhtml
deleted file mode 100644
index b278565..0000000
--- a/source/app/views/notifier/lost_password.rhtml
+++ /dev/null
@@ -1,15 +0,0 @@
-<style>
-<!--
-
-* {    font-size:    9pt;    font-family:    verdana, helvetica, arial, sans-serif; line-height: 1.7em; }
-p { margin: 0 }
--->
-</style>
-<%= ::MSG_EMAIL_SERVER_GENERATED %><br><br>
-A request to reset a password was received for this email address. <br><br>
-To complete the process and activate the new password, click the link below.<br>
-<a href="<%= @urls[0] %>">Activate my new password</a><br>
-<br>
-If this request was not made by you, you can ignore this email.<br>
-<br><br><br>
-If you have questions regarding <%= ENV['EPFWIKI_APP_NAME'] %> or this e-mail, please contact <a href="mailto:<%= @admin.email %>"><%= @admin.name %></a>
\ No newline at end of file
diff --git a/source/app/views/notifier/notification.rhtml b/source/app/views/notifier/notification.rhtml
deleted file mode 100644
index c26f233..0000000
--- a/source/app/views/notifier/notification.rhtml
+++ /dev/null
@@ -1,8 +0,0 @@
-<%= render :partial => 'header' %>
-<p><%= @introduction %></p>
-<% unless @text.blank? %><p><table width=100% border=1><tr><td>
-<%= @text %>
-</td></tr></table></p>
-<% end %>
-<p>To unsubscribe from receiving notifications, edit your user details at <%= @link %></p>
-<%= render :partial => 'footer' %>
\ No newline at end of file
diff --git a/source/app/views/notifier/site_status.rhtml b/source/app/views/notifier/site_status.rhtml
deleted file mode 100644
index 7cfd641..0000000
--- a/source/app/views/notifier/site_status.rhtml
+++ /dev/null
@@ -1,24 +0,0 @@
-<%= render :partial => 'header' %>
-<p>Hi <%= @update.user.name %>,</p>
-<% if @subject.include? 'STARTED' %>
-	<p>The update (or creation) of Wiki <%= @update.wiki.title %> with baseline <%= @update.baseline_process.title %> has finished</p>
-<% elsif @subject.include? 'FINISHED' %>
-	<p>The update (or creation) of Wiki <%= link_to @update.wiki.title, @update.wiki.url(true) %> with baseline <%= @update.baseline_process.title %> has finished</p>
-<% elsif @subject.include? 'CANCELLED' %>
-	<p>The update (or creation) of Wiki <%= @update.wiki.title %> with baseline <%= @update.baseline_process.title %> has been cancelled</p>
-<% elsif @subject.include? 'SCHEDULED' %>
-	<% if @update.first_update? %>
-	<p>The creation of the new Wiki <%= @update.wiki.title %> has been scheduled. The new Wiki will be created using
-	Baseline Process <%= @update.baseline_process.title %>. At what time this will take place depends on the schedule of 'job_daily' cause that job will trigger the creation.</p>
-	<p>You can monitor status, cancel or force the update using <%= link_to ENV['EPFWIKI_APP_NAME'] , "http://#{ENV['EPFWIKI_HOST']}/" %>.</p>
-	</p>
-	<% else %>
-	<p>The update of Wiki <%= @update.wiki.title %> has been scheduled. The Wiki will be updated using
-	Baseline Process <%= @update.baseline_process.title %>. At what time this will take place depends on the schedule of 'job_daily' cause that job will trigger the creation.</p>
-	<p>You can monitor status, cancel or force the update using <%= link_to ENV['EPFWIKI_APP_NAME'] , "http://#{ENV['EPFWIKI_HOST']}/" %>.</p>
-	</p>
-s	<% end %>
-<% end%>
-Your <%= ENV['EPFWIKI_APP_NAME'] %> Server</p>
-
-<%= render :partial => 'footer' %>
\ No newline at end of file
diff --git a/source/app/views/notifier/summary.rhtml b/source/app/views/notifier/summary.rhtml
deleted file mode 100644
index 193f694..0000000
--- a/source/app/views/notifier/summary.rhtml
+++ /dev/null
@@ -1,44 +0,0 @@
-    <%= render :partial => 'notifier/header' %>
-    <p>
-	<%= link_to ENV['EPFWIKI_APP_NAME'], "http://#{ENV['EPFWIKI_HOST']}/" %>
-	</p>
-	<hr>
-	<p>
-		<strong>General Summary</strong>
-		<ul>
-		<% @items.each do |itm| %>
-			<% if itm.class.name == 'Upload' %>
-				<li><%= link_to itm.filename, itm.url(true) %> was uploaded by <%= itm.user.name %> at <%= itm.created_on.strftime(TIME_FORMAT) %></li>
-			<% elsif itm.class.name == 'User' %>
-				<li><%= itm.name %> registered as a new user at <%= itm.created_on.strftime(TIME_FORMAT) %></li>
-			<% end %>
-		<% end %>
-		</ul>
-	</p>
-	<% @wikis.each do |w| %>
-		<hr>
-		<p>
-			<strong><%= link_to w.title, w.url(true) %> Summary</strong>
-			<ul>
-				<% @items.each do |itm| %>
-					<% if itm.class.name == 'Version' && itm.wiki == w %>
-						<li><%= link_to itm.presentation_name, itm.page.url(true) %> was changed by <%= itm.user.name %> at <%= itm.created_on.strftime(TIME_FORMAT) %></li>
-					<% elsif itm.class.name == 'Comment' && itm.site == w %>
-						<li><%= link_to itm.page.presentation_name, itm.page.url(true) %> was discussed by <%= itm.user.name %> at <%= itm.created_on.strftime(TIME_FORMAT) %></li>
-					<% elsif itm.class.name == 'Update' && itm.wiki == w %> 
-						<li><%= link_to itm.wiki.title, itm.wiki.url(true) %> was updated with <%= link_to itm.baseline_process.title, itm.baseline_process.url(true) %> by <%= itm.user.name %> at <%= itm.created_on.strftime(TIME_FORMAT) %></li>
-					<% elsif itm.class.name == 'Wiki' && itm == w %>
-						<li><%= link_to itm.title, itm.url(true) %> was created by <%= itm.user.name %> at <%= itm.created_on.strftime(TIME_FORMAT) %></li>
-					<% elsif itm.class.name == 'Checkout' && itm.site == w %>
-						<li><%= link_to itm.page.presentation_name, itm.page.url(true) %> was checked out by <%= itm.user.name %> at <%= itm.created_on.strftime(TIME_FORMAT) %></li>
-					<% elsif itm.class.name == 'WikiPage' && itm.site == w %>
-						<li><%= link_to itm.presentation_name, itm.url(true) %> was created by <%= itm.user.name %> at <%= itm.created_on.strftime(TIME_FORMAT) %></li>
-					<% end %>
-				<% end %>
-			</ul>
-		</p>
-	<% end %>	
-
-<p>Generated on: <strong><%= @runtime.to_s %></strong><br>
-Showing from <strong><%= @starttime.to_s %></strong> to <strong><%= @endtime.to_s %></strong></p>
-<%= render :partial => 'notifier/footer' %>
\ No newline at end of file
diff --git a/source/app/views/notifier/welcome_pw_confirmationlink.rhtml b/source/app/views/notifier/welcome_pw_confirmationlink.rhtml
deleted file mode 100644
index 8a0d956..0000000
--- a/source/app/views/notifier/welcome_pw_confirmationlink.rhtml
+++ /dev/null
@@ -1,11 +0,0 @@
-<%= render :partial => 'header' %>
-<p>Hi <%= @user.name %>,</p>
-<p>A request was made to create an account at <%= link_to ENV['EPFWIKI_APP_NAME'], "http://#{@request_host}/" %> for your email address.</p>
-<p>To complete the process and activate the new password.</strong>
-, click the link below.<p>
-<p><%= link_to "Activate my new password", "http://#{@request_host}/login/confirm_account/#{@user.id}?tk=#{@user.token}" %>
-</p>
-
-<p>Best Regards,<br>
-Your <%= ENV['EPFWIKI_APP_NAME'] %> Server</p>
-<%= render :partial => 'footer' %>
\ No newline at end of file
diff --git a/source/app/views/other/_revision.rhtml b/source/app/views/other/_revision.rhtml
deleted file mode 100644
index 2ad4f96..0000000
--- a/source/app/views/other/_revision.rhtml
+++ /dev/null
@@ -1 +0,0 @@
-CURRENT
\ No newline at end of file
diff --git a/source/app/views/other/about.rhtml b/source/app/views/other/about.rhtml
deleted file mode 100644
index 095dd66..0000000
--- a/source/app/views/other/about.rhtml
+++ /dev/null
@@ -1,112 +0,0 @@
-<% @heading = "About" %>
-<% @overview = "<strong>#{ENV['EPFWIKI_APP_NAME']} </strong> (#{render(:partial => 'revision')})<br>Designed to be used together with Eclipse Process Framework (EPF) <br>Copyright (c) 2006 Logica Result Centre" %>
-
-<div class="sectionHeading"><%= "About " + ENV['EPFWIKI_APP_NAME'] %></div>
-<div class="sectionContent">
-    <table cellpadding="0" cellspacing="0" border="0" class="sectionTable">
-        <tr valign="top">
-            <td scope="row" class="sectionTableCell">
-            <p>EPF Wiki is Wiki technology designed to be used together with Eclipse Process Framework (EPF). This offers the best of two distinct worlds: the worlds of Wikis and powerfull process frameworks. It combines a modular method construction approach and the flexibility and ease of use that is the defining characteristic of a wiki. 
-            </p>
-            <p><ul><li>EPF Wiki enhances EPFC published process descriptions with Wiki functions using Javascript (wiki.js) </li>
-				<li>EPF Wiki is a Web Application created using Ruby On Rails Framework</li>
-				<li>EPF Wiki is Wiki technology that works on plain HTML (no Wiki markup language) easy editable using commonly available browser-based WYSIWYG HTML editors (e.g. TinyMCE)</li>
-				</ul>
-            </p>
-            </td>
-        </tr>
-    </table>
- </div>
-
-<div class="sectionHeading">Properties</div>
-<div class="sectionContent">
-<table cellpadding="0" cellspacing="0" border="0" class="sectionTable">
-    <tr valign="top">
-        <th scope="row" class="sectionTableHeading">Application Name</th>
-        <td align="left" class="sectionTableCell"><%= ENV['EPFWIKI_APP_NAME'] %></td>
-    </tr>
-    <tr valign="top">
-        <th scope="row" class="sectionTableHeading">Revision</th>
-        <td align="left" class="sectionTableCell"><%= render :partial => 'revision' %></td>
-    </tr>        
-    <tr valign="top">
-        <th scope="row" class="sectionTableHeading">Rails Version</th>
-        <td align="left" class="sectionTableCell"><%= Rails::VERSION::STRING %></td>
-    </tr> 
-    <tr valign="top">
-        <th scope="row" class="sectionTableHeading">Database Schema Version</th>
-        <td align="left" class="sectionTableCell"><%= @database_schema.version %> 
-        </td>
-    </tr>
-
-    <% if admin? %>
-        <tr valign="top">
-            <th scope="row" class="sectionTableHeading">Database Name</th>
-            <td align="left" class="sectionTableCell"><%= ActiveRecord::Base.configurations[RAILS_ENV]['database'] %></td>
-        </tr>
-        <tr valign="top">
-            <th scope="row" class="sectionTableHeading">Database User</th>
-            <td align="left" class="sectionTableCell"><%= ActiveRecord::Base.configurations[RAILS_ENV]['username'] %></td>
-        </tr>
-        <tr valign="top">
-            <th scope="row" class="sectionTableHeading">Environment</th>
-            <td align="left" class="sectionTableCell"><%= RAILS_ENV %></td>
-        </tr>
-    <tr valign="top">
-        <th scope="row" class="sectionTableHeading">Search index updated on</th>
-        <td align="left" class="sectionTableCell"><%= @index_mtime.strftime("%I:%M %p %d-%b-%y") if @index_mtime  %>
-        </td>
-    </tr>
-    <% end %>
-</table>
-</div>
-
-<div class="sectionHeading">Change Log</div>
-<div class="sectionContent">
-    <table cellpadding="0" cellspacing="0" border="0" class="sectionTable">
-        <tr valign="top">
-            <td scope="row" class="sectionTableCell">
-<%= simple_format(IO.readlines(ENV['EPFWIKI_ROOT_DIR'] + "CHANGELOG").join) %>
-</td>
-        </tr>
-    </table>
- </div>
-
- 
- <div class="sectionHeading"><%= ENV['EPFWIKI_APP_NAME'] %> Environment Variables</div>
-<div class="sectionContent">
-    <table cellpadding="0" cellspacing="0" border="0" class="sectionTable">
-        <tr>
-            <td class="sectionTableCell">
-                <table>
-                <% ENV.keys.sort.each do |key| %>
-                <% if key.index("EPFWIKI") %>
-                    <tr>
-                        <th><%=key%></th><td><%=ENV[key]%></td>
-                    </tr>
-                <% end %>
-                <% end %>
-                </table>
-            </td>
-        </tr>
-    </table>
-</div>
-
-<div class="sectionHeading">Other Environment Variables</div>
-<div class="sectionContent">
-    <table cellpadding="0" cellspacing="0" border="0" class="sectionTable">
-        <tr>
-            <td class="sectionTableCell">
-                <table>
-                <% ENV.keys.sort.each do |key| %>
-                <% if !key.index("EPFWIKI") %>
-                <tr>
-                    <th><%=key%></th><td><%=ENV[key]%></td>
-                </tr>
-                <% end %>
-                <% end %>
-                </table>
-            </td>
-        </tr>
-    </table>
-</div>
\ No newline at end of file
diff --git a/source/app/views/other/error.rhtml b/source/app/views/other/error.rhtml
deleted file mode 100644
index 7d5b09b..0000000
--- a/source/app/views/other/error.rhtml
+++ /dev/null
@@ -1,3 +0,0 @@
-<% @heading = "Application Error" %>
-<% @overview = "An application error occurred while processing your request. " %>
-
diff --git a/source/app/views/pages/_footer.rhtml b/source/app/views/pages/_footer.rhtml
deleted file mode 100644
index 1b873ec..0000000
--- a/source/app/views/pages/_footer.rhtml
+++ /dev/null
@@ -1,54 +0,0 @@
-<div class="versionInfo" style="text-align:left">
-	<p>
-	<% if @version %>
-		<% if @version.base_version? %>
-			This page was last modified <%= time_ago_in_words(@wiki.baseline_updated_on || @wiki.wikified_on) %> ago with baseline <%= @version.baseline_process.title %>
-		<% else %>
-			<br/>Last updated <%= time_ago_in_words(@version.created_on) %> ago by <%= @version.user.name %>
-			<% if !@version.note.blank? %>
-				 <i>(<%= @version.note %>)</i>
-			<% end %>
-		<% end %>
-		<% if @contributor_names.size > 0 %>
-			<br/><%= @contributor_names.join(', ') %> contributed to this page.
-		<% end %>
-	        <br/>Version <%= @version.version.to_s %> - 
-			<% if @version.base_version? %>
-				<%= @version.baseline_process.title %>
-			<% else %>
-				<%= @version.user.name %>
-			<% end %>
-	<% else %>
-	<% end %>
-	</p>
-</div>
-<br>
-<br>
-
-<% if @comments.size > 0 %>
-	<table width="99%" cellspacing="0" cellpadding="0" border="0">
-		<tr>
-			<td valign="top"><a name="Top"></a>
-				<table cellpadding="0" cellspacing="0" border="0">
-					<tr>
-						<td nowrap="true" class="pageTitle">Discussion</td><td align="right" class="expandCollapseLink" width="99%"><a href="./../../index.htm" name="mainIndex"></a></td>
-	
-					</tr>
-				</table>
-				<table cellspacing="0" cellpadding="0" border="0" width="99%">
-					<tr>
-						<td class="pageTitleSeparator"><img height="1" title="" alt="" src="./../../images/shim.gif"></td>
-					</tr>
-				</table>
-			</td>
-		</tr>
-	</table>
-	<div id="commentsList">
-    <% for comment in @comments %>
-	<p>
-		<%= comment.created_on.localtime.strftime(TIME_FORMAT) %>
-		<div class="comment"><%= comment.text %></div>
-		<div class="commentfooter"><%= link_to_user comment.user %></div>
-	</p>
-	<% end %>
-<% end %>
\ No newline at end of file
diff --git a/source/app/views/pages/_header.rhtml b/source/app/views/pages/_header.rhtml
deleted file mode 100644
index 05bfe4f..0000000
--- a/source/app/views/pages/_header.rhtml
+++ /dev/null
@@ -1,18 +0,0 @@
-<div id="toolbar">
-	<ol id="toc">
-	    <%= menulink_to 'View', @page.url %>
-		<%= menulink_to 'Discussion', :controller => 'pages', :action => 'discussion', :site_folder => @wiki.folder, :id => @page.id %>
-		<%= menulink_to 'Edit', :controller => 'pages', :action => 'edit', :id => @page.id, :site_folder => @wiki.folder %>		
-		<%= menulink_to 'New', :controller => 'pages', :action => 'new', :id => @page.id, :site_folder => @wiki.folder %>				
-		<%= menulink_to 'History', :controller => 'pages', :action => 'history', :id => @page.id, :site_folder => @wiki.folder %>
-		<li class="simple"><%= link_to '<span>Manage</span>', {:controller => 'sites', :action => 'description', :id => @wiki.id}, :popup => true %></li>
-		<li class="simple"><a href="/" target="_parent"><span>Home</span></a></li>
-		<% if params[:action] != 'view' %>
-			<% if session['user'] %>
-				<li class="simple"><%= link_to "<span>#{session['user'].email}</span>", :controller => 'users', :action => 'account' %></li>
-			<% else %>
-				<li class="simple"><%= link_to '<span>Login</span>', :controller => 'login', :action => 'login' %></li>
-			<% end %>
-		<% end %>
-	</ol>
-</div>
\ No newline at end of file
diff --git a/source/app/views/pages/_list.rhtml b/source/app/views/pages/_list.rhtml
deleted file mode 100644
index 4690b15..0000000
--- a/source/app/views/pages/_list.rhtml
+++ /dev/null
@@ -1,33 +0,0 @@
-   <div class="sectionHeading">Pages</div>
-   <div class="sectionContent">
-      <% unless @pages.empty? %>  
-      <table cellpadding="0" cellspacing="0" border="0" class="sectionTable">
-         <tr>
-            <td class="sectionTableCell">
-            <table width="100%">
-               <tr>
-                  <th>ID</th>    
-                  <th>Presentation Name</th>
-                  <th>Filename</th>
-                  <th>Type</th>
-                  <th>Created</th>
-              </tr>
-
-               <% for page in @pages %>
-                    <td><%= page.id %></td>
-                     <td>
-                        <%= link_to_page page %>
-                     </td>
-                     <td><%= page.filename %></td>
-                     <td><%= page.uma_type %></td>
-                     <td><%= page.created_on.strftime("%I:%M %p %d-%b-%y") %></td>         
-                 </tr>
-               <% end %>
-            </table>
-            </td>
-         </tr>
-      </table>
-    <% else %>
-       No pages found!
-    <% end %>
-   </div>
\ No newline at end of file
diff --git a/source/app/views/pages/_relationships.rhtml b/source/app/views/pages/_relationships.rhtml
deleted file mode 100644
index 0004378..0000000
--- a/source/app/views/pages/_relationships.rhtml
+++ /dev/null
@@ -1,64 +0,0 @@
-  <div class="sectionHeading">Relationships</div>
-  <div class="sectionContent">
-    <table cellpadding="0" cellspacing="0" border="0"
-    class="sectionTable">
-	<% if !@versions.nil? && @versions.size > 0%>
-    <tr valign="top">
-     <th scope="row" class="sectionTableHeading">
-       Baseline Updates
-     </th>
-     <td class="sectionTableCell" colspan=2>
-     <p>This page was updated with the following Baseline Processes:</p>
-         <ul>
-            <% for v in @versions %>
-			<% if v.baseline_process_id %>
-               <li>
-                  <%= v.created_on.localtime.strftime(TIME_FORMAT) %> with <%= link_to_site v.baseline_process %>
-               </li>
-            <% end %>
-			<% end %>
-         </ul>
-     </td>
-   </tr> 
-   <% end %>
-   
-    <tr valign="top">
-     <th scope="row" class="sectionTableHeading">
-       Notifications
-     </th>
-     <td class="sectionTableCell" colspan=2>
-        The following users will be notified of changes and new comments:<ul>
-        	<% Notification.find_all_users(@page, Page.name).each do |user| %>
-        	<li><%= link_to_user user %></li>
-			<% end %>
-			</ul>
-     </td>
-   </tr> 
-
-      <tr valign="top">
-     <th scope="row" class="sectionTableHeading">
-       Sites
-     </th>
-     <td class="sectionTableCell">
-         <p>This page was modified in other Wiki sites: </p>
-         <ul>
-            <% @page.other_pages_with_versions.each do |p| %>
-               <li>
-                  <%= link_to_page(p) %>  
-               </li>
-            <% end %>
-         </ul>
-    </td>
-     <td class="sectionTableCell">
-         <p>This page was discusses in other Wiki sites: </p>
-         <ul>
-            <% @page.other_pages_with_comments.each do |p| %>
-               <li>
-                  <%= link_to_page(p) %> 
-               </li>
-            <% end %>
-         </ul>
-    </td>
-   </tr>
-       </table>
-  </div>
\ No newline at end of file
diff --git a/source/app/views/pages/_tinymce.rhtml b/source/app/views/pages/_tinymce.rhtml
deleted file mode 100644
index c920d4e..0000000
--- a/source/app/views/pages/_tinymce.rhtml
+++ /dev/null
@@ -1,339 +0,0 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
-    <title><%= @checkout.site.title + ' -  Edit ' + @checkout.page.presentation_name %></title>
-    <%= javascript_include_tag "tiny_mce/tiny_mce" %>    
-    <%= stylesheet_link_tag 'default' %>
-	<%= stylesheet_link_tag 'wiki' %>
-<!-- TinyMCE -->
-<script language="javascript" type="text/javascript">
-    tinyMCE.init({
-    gecko_spellcheck : true,
-    valid_elements : "a[accesskey|charset|class|coords|dir<ltr?rtl|href|hreflang|id|lang|name" + 
-    "|onblur|onclick|ondblclick|onfocus|onkeydown|onkeypress|onkeyup" + 
-    "|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|rel|rev" + 
-    "|shape<circle?default?poly?rect|style|tabindex|title|target|type]," + 
-    "abbr[class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress" + 
-    "|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style" + 
-    "|title]," + 
-    "acronym[class|dir<ltr?rtl|id|id|lang|onclick|ondblclick|onkeydown|onkeypress" + 
-    "|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style" + 
-    "|title]," + 
-    "address[class|align|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown" + 
-    "|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover" + 
-    "|onmouseup|style|title]," + 
-    "applet[align<bottom?left?middle?right?top|alt|archive|class|code|codebase" + 
-    "|height|hspace|id|name|object|style|title|vspace|width]," + 
-    "area[accesskey|alt|class|coords|dir<ltr?rtl|href|id|lang|nohref<nohref" + 
-    "|onblur|onclick|ondblclick|onfocus|onkeydown|onkeypress|onkeyup" + 
-    "|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup" + 
-    "|shape<circle?default?poly?rect|style|tabindex|title|target]," + 
-    "base[href|target]," + 
-    "basefont[color|face|id|size]," + 
-    "bdo[class|dir<ltr?rtl|id|lang|style|title]," + 
-    "big[class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress" + 
-    "|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style" + 
-    "|title]," + 
-    "blockquote[dir|style|cite|class|dir<ltr?rtl|id|lang|onclick|ondblclick" + 
-    "|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout" + 
-    "|onmouseover|onmouseup|style|title]," + 
-    "body[alink|background|bgcolor|class|dir<ltr?rtl|id|lang|link|onclick" + 
-    "|ondblclick|onkeydown|onkeypress|onkeyup|onload|onmousedown|onmousemove" + 
-    "|onmouseout|onmouseover|onmouseup|onunload|style|title|text|vlink]," + 
-    "br[class|clear<all?left?none?right|id|style|title]," + 
-    "button[accesskey|class|dir<ltr?rtl|disabled<disabled|id|lang|name|onblur" + 
-    "|onclick|ondblclick|onfocus|onkeydown|onkeypress|onkeyup|onmousedown" + 
-    "|onmousemove|onmouseout|onmouseover|onmouseup|style|tabindex|title|type" + 
-    "|value]," + 
-    "caption[align<bottom?left?right?top|class|dir<ltr?rtl|id|lang|onclick" + 
-    "|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove" + 
-    "|onmouseout|onmouseover|onmouseup|style|title]," + 
-    "center[class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress" + 
-    "|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style" + 
-    "|title]," + 
-    "cite[class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress" + 
-    "|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style" + 
-    "|title]," + 
-    "code[class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress" + 
-    "|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style" + 
-    "|title]," + "col[align<center?char?justify?left?right|char|charoff|class|dir<ltr?rtl|id" + 
-    "|lang|onclick|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown" + 
-    "|onmousemove|onmouseout|onmouseover|onmouseup|span|style|title" + 
-    "|valign<baseline?bottom?middle?top|width]," + 
-    "colgroup[align<center?char?justify?left?right|char|charoff|class|dir<ltr?rtl" + 
-    "|id|lang|onclick|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown" + 
-    "|onmousemove|onmouseout|onmouseover|onmouseup|span|style|title" + 
-    "|valign<baseline?bottom?middle?top|width]," + 
-    "dd[class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress|onkeyup" + 
-    "|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style|title]," + 
-    "del[cite|class|datetime|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown" + 
-    "|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover" + 
-    "|onmouseup|style|title]," + 
-    "dfn[class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress" + 
-    "|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style" + 
-    "|title]," + 
-    "dir[class|compact<compact|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown" + 
-    "|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover" + 
-    "|onmouseup|style|title]," + 
-    "div[align<center?justify?left?right|class|dir<ltr?rtl|id|lang|onclick" + 
-    "|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove" + 
-    "|onmouseout|onmouseover|onmouseup|style|title]," + 
-    "dl[class|compact<compact|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown" + 
-    "|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover" + 
-    "|onmouseup|style|title]," + 
-    "dt[class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress|onkeyup" + 
-    "|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style|title]," +
-    "em/i[class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress" + 
-    "|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style" + 
-    "|title]," + 
-    "fieldset[class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress" + 
-    "|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style" + 
-    "|title]," +
-    "font[class|color|dir<ltr?rtl|face|id|lang|size|style|title]," + 
-    "form[accept|accept-charset|action|class|dir<ltr?rtl|enctype|id|lang" + 
-    "|method<get?post|name|onclick|ondblclick|onkeydown|onkeypress|onkeyup" + 
-    "|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|onreset|onsubmit" + 
-    "|style|title|target]," + 
-    "frame[class|frameborder|id|longdesc|marginheight|marginwidth|name" + 
-    "|noresize<noresize|scrolling<auto?no?yes|src|style|title]," + 
-    "frameset[class|cols|id|onload|onunload|rows|style|title]," + 
-    "h1[align<center?justify?left?right|class|dir<ltr?rtl|id|lang|onclick" + 
-    "|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove" + 
-    "|onmouseout|onmouseover|onmouseup|style|title]," + 
-    "h2[align<center?justify?left?right|class|dir<ltr?rtl|id|lang|onclick" +
-    "|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove" +
-    "|onmouseout|onmouseover|onmouseup|style|title]," + 
-    "h3[align<center?justify?left?right|class|dir<ltr?rtl|id|lang|onclick" + 
-    "|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove" + 
-    "|onmouseout|onmouseover|onmouseup|style|title]," +
-    "h4[align<center?justify?left?right|class|dir<ltr?rtl|id|lang|onclick" + 
-    "|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove" + 
-    "|onmouseout|onmouseover|onmouseup|style|title]," +
-    "h5[align<center?justify?left?right|class|dir<ltr?rtl|id|lang|onclick" +
-    "|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove" +
-    "|onmouseout|onmouseover|onmouseup|style|title]," +
-    "h6[align<center?justify?left?right|class|dir<ltr?rtl|id|lang|onclick" + 
-    "|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove" + 
-    "|onmouseout|onmouseover|onmouseup|style|title]," + 
-    "head[dir<ltr?rtl|lang|profile]," + 
-    "hr[align<center?left?right|class|dir<ltr?rtl|id|lang|noshade<noshade|onclick" + 
-    "|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove" +
-    "|onmouseout|onmouseover|onmouseup|size|style|title|width]," + 
-    "html[dir<ltr?rtl|lang|version]," + 
-    "iframe[align<bottom?left?middle?right?top|class|frameborder|height|id" + 
-    "|longdesc|marginheight|marginwidth|name|scrolling<auto?no?yes|src|style" + 
-    "|title|width]," +
-    "img[align<bottom?left?middle?right?top|alt|border|class|dir<ltr?rtl|height" + 
-    "|hspace|id|ismap<ismap|lang|longdesc|name|onclick|ondblclick|onkeydown" + 
-    "|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover" + 
-    "|onmouseup|src|style|title|usemap|vspace|width]," +
-    "input[accept|accesskey|align<bottom?left?middle?right?top|alt" +
-    "|checked<checked|class|dir<ltr?rtl|disabled<disabled|id|ismap<ismap|lang" + 
-    "|maxlength|name|onblur|onclick|ondblclick|onfocus|onkeydown|onkeypress" + 
-    "|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|onselect" +
-    "|readonly<readonly|size|src|style|tabindex|title" + 
-    "|type<button?checkbox?file?hidden?image?password?radio?reset?submit?text" + 
-    "|usemap|value]," + 
-    "ins[cite|class|datetime|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown" + 
-    "|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover" +
-    "|onmouseup|style|title]," +
-    "isindex[class|dir<ltr?rtl|id|lang|prompt|style|title]," +
-    "kbd[class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress" +
-    "|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style" +
-    "|title]," +
-    "label[accesskey|class|dir<ltr?rtl|for|id|lang|onblur|onclick|ondblclick" +
-    "|onfocus|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout" +
-    "|onmouseover|onmouseup|style|title]," +
-    "legend[align<bottom?left?right?top|accesskey|class|dir<ltr?rtl|id|lang" + 
-    "|onclick|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove" + 
-    "|onmouseout|onmouseover|onmouseup|style|title]," +
-    "li[class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress|onkeyup"  +
-    "|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style|title|type" + 
-    "|value]," +
-    "link[charset|class|dir<ltr?rtl|href|hreflang|id|lang|media|onclick" + 
-    "|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove" +
-    "|onmouseout|onmouseover|onmouseup|rel|rev|style|title|target|type]," + 
-    "map[class|dir<ltr?rtl|id|lang|name|onclick|ondblclick|onkeydown|onkeypress" +
-    "|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style" + 
-    "|title]," +
-    "menu[class|compact<compact|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown" + 
-    "|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover" +
-    "|onmouseup|style|title]," +
-    "meta[content|dir<ltr?rtl|http-equiv|lang|name|scheme]," +
-    "noframes[class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress"  +
-    "|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style"  +
-    "|title]," +
-    "noscript[class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress"  +
-    "|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style"  +
-    "|title]," + 
-    "object[align<bottom?left?middle?right?top|archive|border|class|classid"   +
-    "|codebase|codetype|data|declare|dir<ltr?rtl|height|hspace|id|lang|name"  +
-    "|onclick|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove"  +
-    "|onmouseout|onmouseover|onmouseup|standby|style|tabindex|title|type|usemap" +
-    "|vspace|width]," +
-    "ol[class|compact<compact|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown"   +
-    "|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover"   +
-    "|onmouseup|start|style|title|type]," +
-    "optgroup[class|dir<ltr?rtl|disabled<disabled|id|label|lang|onclick"   +
-    "|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove"   +
-    "|onmouseout|onmouseover|onmouseup|style|title]," +
-    "option[class|dir<ltr?rtl|disabled<disabled|id|label|lang|onclick|ondblclick"   +
-    "|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout"  +
-    "|onmouseover|onmouseup|selected<selected|style|title|value]," +
-    "p[align<center?justify?left?right|class|dir<ltr?rtl|id|lang|onclick"   +
-    "|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove"   +
-    "|onmouseout|onmouseover|onmouseup|style|title]," +
-    "param[id|name|type|value|valuetype<DATA?OBJECT?REF]," +
-    "pre/listing/plaintext/xmp[align|class|dir<ltr?rtl|id|lang|onclick|ondblclick"   +
-    "|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout"   +
-    "|onmouseover|onmouseup|style|title|width]," +
-    "q[cite|class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress"  +
-    "|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style"  +
-    "|title]," +
-    "s[class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress|onkeyup"   +
-    "|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style|title]," +
-    "samp[class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress"   +
-    "|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style"   +
-    "|title]," +
-    "script[charset|defer|language|src|type]," +
-    "select[class|dir<ltr?rtl|disabled<disabled|id|lang|multiple<multiple|name"   +
-    "|onblur|onchange|onclick|ondblclick|onfocus|onkeydown|onkeypress|onkeyup"   +
-    "|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|size|style"   +
-    "|tabindex|title]," +
-    "small[class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress"   +
-    "|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style"   +
-    "|title]," + 
-    "span[align<center?justify?left?right|class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown"   +
-    "|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover"   +
-    "|onmouseup|style|title]," +
-    "strike[class|class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown"   +
-    "|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover"   +
-    "|onmouseup|style|title]," +
-    "strong/b[class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress"   +
-    "|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style"   +
-    "|title]," +
-    "style[dir<ltr?rtl|lang|media|title|type]," +
-    "sub[class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress"   +
-    "|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style"   +
-    "|title]," +
-    "sup[class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress"   +
-    "|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style"   +
-    "|title]," +
-    "table[align<center?left?right|bgcolor|border|cellpadding|cellspacing|class"   +
-    "|dir<ltr?rtl|frame|height|id|lang|onclick|ondblclick|onkeydown|onkeypress"   +
-    "|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|rules"   +
-    "|style|summary|title|width]," +
-    "tbody[align<center?char?justify?left?right|char|class|charoff|dir<ltr?rtl|id"   +
-    "|lang|onclick|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown"   +
-    "|onmousemove|onmouseout|onmouseover|onmouseup|style|title"   +
-    "|valign<baseline?bottom?middle?top]," +
-    "td[abbr|align<center?char?justify?left?right|axis|bgcolor|char|charoff|class"   +
-    "|colspan|dir<ltr?rtl|headers|height|id|lang|nowrap<nowrap|onclick"   +
-    "|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove"   +
-    "|onmouseout|onmouseover|onmouseup|rowspan|scope<col?colgroup?row?rowgroup"   +
-    "|style|title|valign<baseline?bottom?middle?top|width]," +
-    "textarea[accesskey|class|cols|dir<ltr?rtl|disabled<disabled|id|lang|name"   +
-    "|onblur|onclick|ondblclick|onfocus|onkeydown|onkeypress|onkeyup"   +
-    "|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|onselect"   +
-    "|readonly<readonly|rows|style|tabindex|title]," + 
-    "tfoot[align<center?char?justify?left?right|char|charoff|class|dir<ltr?rtl|id"   +
-    "|lang|onclick|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown"   +
-    "|onmousemove|onmouseout|onmouseover|onmouseup|style|title"   + 
-    "|valign<baseline?bottom?middle?top],"  +
-    "th[abbr|align<center?char?justify?left?right|axis|bgcolor|char|charoff|class"   +
-    "|colspan|dir<ltr?rtl|headers|height|id|lang|nowrap<nowrap|onclick"   +
-    "|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove"   +
-    "|onmouseout|onmouseover|onmouseup|rowspan|scope<col?colgroup?row?rowgroup"   +
-    "|style|title|valign<baseline?bottom?middle?top|width]," + 
-    "thead[align<center?char?justify?left?right|char|charoff|class|dir<ltr?rtl|id"   +
-    "|lang|onclick|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown"   +
-    "|onmousemove|onmouseout|onmouseover|onmouseup|style|title"   +
-    "|valign<baseline?bottom?middle?top]," +
-    "title[dir<ltr?rtl|lang]," +
-    "tr[abbr|align<center?char?justify?left?right|bgcolor|char|charoff|class"   +
-    "|rowspan|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress"   +
-    "|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style"   +
-    "|title|valign<baseline?bottom?middle?top]," +
-    "tt[class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress|onkeyup"   +
-    "|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style|title]," +
-    "u[class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress|onkeyup"   +
-    "|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style|title]," +
-    "ul[class|compact<compact|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown"   +
-    "|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover"   +
-    "|onmouseup|style|title|type]," +
-    "var[class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress"   +
-    "|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style"   + 
-    "|title]", 
-        mode : "textareas",
-        theme : "advanced",
-        plugins : "epfwiki,style,layer,table,advhr,advimage,advlink,emotions,iespell,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras",
-        theme_advanced_buttons1_add_before : "save,checkin,undocheckout,preview,separator",
-        theme_advanced_buttons1_add : "fontselect,fontsizeselect",
-        theme_advanced_buttons2_add : "separator,insertdate,inserttime,separator,forecolor,backcolor,advsearchreplace",
-        theme_advanced_buttons2_add_before: "cut,copy,paste,pastetext,pasteword,separator,search,replace,separator",
-        theme_advanced_buttons3_add_before : "tablecontrols,separator",
-        theme_advanced_buttons3_add : "emotions,iespell,media,advhr,separator,print,separator,ltr,rtl,separator,fullscreen",
-        theme_advanced_buttons4 : "insertlayer,moveforward,movebackward,absolute,|,styleprops,|,cite,abbr,acronym,del,ins,|,visualchars,nonbreaking",
-        theme_advanced_toolbar_location : "top",
-        theme_advanced_toolbar_align : "left",
-        theme_advanced_path_location : "bottom",
-		content_css : "/<%= @checkout.site.rel_path %>/css/default.css",
-        plugin_insertdate_dateFormat : "%Y-%m-%d",
-        plugin_insertdate_timeFormat : "%H:%M:%S",
-        extended_valid_elements : "hr[class|width|size|noshade],font[face|size|color|style],span[class|align|style]",
-        external_link_list_url : "example_link_list.js",
-        external_image_list_url : "example_image_list.js",
-        flash_external_list_url : "example_flash_list.js",
-        media_external_list_url : "example_media_list.js",
-        file_browser_callback : "fileBrowserCallBack",
-        theme_advanced_resize_horizontal : false,
-        theme_advanced_resizing : true,
-        nonbreaking_force_tab : true,
-        apply_source_formatting : true,
-        convert_urls : false,
-		document_base_url : "/<%= File.dirname(@checkout.version.rel_path_root) %>/"
-    });
-	
-	// TODO implement filebrowser for TinyMCE
-    function fileBrowserCallBack(field_name, url, type, win) {
-        // This is where you insert your custom filebrowser logic
-        alert("Example of filebrowser callback: field_name: " + field_name + ", url: " + url + ", type: " + type);
-
-        // Insert new URL, this would normaly be done in a popup
-        win.document.forms[0].elements[field_name].value = "someurl.htm";
-    }
-</script>
-<!-- /TinyMCE -->
-</head>
-<body  style="margin-left:0px;margin-bottom:0px;margin-right:0px;overflow:hidden;">
-
-<div id="epfwiki_header">
-<% @current = 'Edit' %>
-<%= render :partial => 'pages/header' %>
-</div>
-<div id="spacer"></div>
-
-  <table width="100%" cellpadding="0" cellspacing="0" border="0">
-    <tr>
-      <td class="pageTitle">
-          <%= "Edit " + @checkout.page.presentation_name %>
-      </td>
-    </tr>
-  </table>
-          
-  <table cellspacing="0" cellpadding="0" border="0" width="100%">
-    <tr>
-       <td class="pageTitleSeparator">
-          <img alt="Shim" height="1" src="/images/shim.gif" /></td>
-    </tr>
-  </table>
-
-<!-- default action is save, but other actions are set in the TinyMCE Plugin: checkin, undocheckout and preview -->
-<% form_tag :action => 'save' do -%>
-   <input type="hidden" name="checkout_id" value="<%= @checkout.id.to_s %>">
-    <textarea id="html" name="html" rows="15" cols="80" style="width: 100%">
-        <%= @checkout.version.html %>
-    </textarea>
-<% end %>
-</body>
-</html>
diff --git a/source/app/views/pages/checkin.rhtml b/source/app/views/pages/checkin.rhtml
deleted file mode 100644
index b8042b3..0000000
--- a/source/app/views/pages/checkin.rhtml
+++ /dev/null
@@ -1,7 +0,0 @@
-<% @overview = "Add or change the version note" %>
-
-<% tabular_form_for :version, @version, :url => { :controller => 'pages', :action => 'checkin' } do |f| %>
-	<%= f.hidden_field  :id %>
-    <%= f.text_area :note, :cols => 60, :rows => 8  %>    
-    <tr><th></th><td><%= submit_tag 'Submit' %></td></tr>    
-<% end %>
\ No newline at end of file
diff --git a/source/app/views/pages/checkout.rhtml b/source/app/views/pages/checkout.rhtml
deleted file mode 100644
index 61e7466..0000000
--- a/source/app/views/pages/checkout.rhtml
+++ /dev/null
@@ -1,15 +0,0 @@
-<% @heading = "Checking Out #{@page.presentation_name}" %>
-<%= "You are about to check-out the page \"#{@page.presentation_name}\". <p>To be able to edit this page a reserved working copy will be created. <br>The page will be locked untill you check-in or undo the check-out. The changes will be visible to other users only after you check-in.</p><p>It is recommended to add a check-out note, you can modify this note when you check-in the file.</p>" %>
-
-<%= error_messages_for 'checkout' %>
-
-<% tabular_form_for :version, @version do |f| %>
-    <tr>
-        <th></th>
-        <td><%= f.text_area :note, :cols => 60, :rows => 8 %></td>
-    <tr>
-        <th>Source Version</th>
-        <td><%= f.select :version_id, @versions.collect {|version| [version.version_text, version.id]} %></td></tr> 
-    </tr>
-    <tr><th></th><td><%= submit_tag "Continue" %></td></tr>    
-<% end %>
diff --git a/source/app/views/pages/discussion.rhtml b/source/app/views/pages/discussion.rhtml
deleted file mode 100644
index a1799ae..0000000
--- a/source/app/views/pages/discussion.rhtml
+++ /dev/null
@@ -1,28 +0,0 @@
-<% tinymce('advanced') %>
-
-<% @overview =  "Discussion about #{link_to_page @page}" %>
-
-<div id="menu">
-    <%= link_to_notification_toggle(@page, Page.name)  %>
-</div>
-
-    <div id="commentsList">
-		<% @comments.each do |comment | %>
-			<p><%= comment.created_on.localtime.strftime(TIME_FORMAT) %>
-			<div class="comment"><%= comment.text %></div>
-		    <div class="commentfooter"><%= link_to_user comment.user %></div>
-			</p>
-		<% end %>
-    </div>
-
-<%= error_messages_for :comment %>
-
-<% tabular_form_for :comment do |f| %>
-    <%= f.text_area 'text', :cols => 80, :rows => 10 %>
-	<%= f.hidden_field 'page_id' %>
-    <tr><th></th><td><%= submit_tag "Submit" %></td></tr>  
-<% end %>
-
-<p>
-<%= render :partial => 'relationships' %>
-</p>
\ No newline at end of file
diff --git a/source/app/views/pages/edit.rhtml b/source/app/views/pages/edit.rhtml
deleted file mode 100644
index bed2471..0000000
--- a/source/app/views/pages/edit.rhtml
+++ /dev/null
@@ -1,3 +0,0 @@
-<%= render :partial => ENV['EPFWIKI_EDITOR'] %>
-<%= javascript_tag("alert('The page is currently checked out by user #{@checkout.user.name}. You can modify the HTML but you cannot commit any changes!')") if !mine?(@checkout) && !cadmin? %>
-<%= javascript_tag("alert('The page is currently checked out by user #{@checkout.user.name}. As you are the central administrator you can perform operations on this checkout. Other users cannot!')") if !mine?(@checkout) && cadmin? %>
diff --git a/source/app/views/pages/history.rhtml b/source/app/views/pages/history.rhtml
deleted file mode 100644
index 94b5225..0000000
--- a/source/app/views/pages/history.rhtml
+++ /dev/null
@@ -1,30 +0,0 @@
-<% @overview = "This page displays the history of changes of #{@page.presentation_name} in Wiki #{@wiki.title}" %>
-
-<div id="menu">
-    <%= link_to('Edit', {:controller => 'pages', :action=> 'checkout', :id=> @page.id, :site_id => @wiki.id}) %>
-    <% if session['user'] %>
-    | <%= link_to_notification_toggle(@page, Page.name) %>
-    <% end %>
-    <% if @versions && @versions.size > 1 && !@page.checkedout? %>
-	| <%= link_to_function("Rollback") do |page| 
-			page.visual_effect :toggle_appear, "rollback_form"  
-		end %>
-    <% end %>
-</div>
-<br>
-<% if @versions && @versions.size > 1 %>
-<div id="rollback_form" style="display: none;">
-<% @table_heading = "Rollback" %>
-<% tabular_form_for :version, @versions.first, :url => { :action => 'rollback' } do |f| %>
-    <tr>
-        <th>Back to Version</th>
-        <td><%= f.select :version_id, (@versions - [@versions.last]).collect {|version| [version.version_text, version.id]} %></td></tr> 
-    </tr>
-    <tr><th></th><td><%= submit_tag 'Submit' %></td></tr>    
-<% end %>
-</div>
-<% end %>
-
-<%= render :partial => 'versions/versions_list' %>
-<%= render :partial => 'relationships' %>
-
diff --git a/source/app/views/pages/list.rhtml b/source/app/views/pages/list.rhtml
deleted file mode 100644
index b1cd88a..0000000
--- a/source/app/views/pages/list.rhtml
+++ /dev/null
@@ -1,14 +0,0 @@
-<% @heading = params[:type].capitalize %>
-<h2><%= @heading %></h2>
-
-<ul>
-    <% @pages.each do |page| %>
-    <li><%= page.presentation_name %>
-        <% page.sites.each do |site| %>
-            <% if site.wiki? %>
-            | <%= site.title %> <%= link_to_page(page) %>
-            <% end %>
-        <% end %>
-    </li>
-    <% end %>
-</ul>
\ No newline at end of file
diff --git a/source/app/views/pages/new.rhtml b/source/app/views/pages/new.rhtml
deleted file mode 100644
index 28bab01..0000000
--- a/source/app/views/pages/new.rhtml
+++ /dev/null
@@ -1,33 +0,0 @@
-<% @overview = "Use this form to create a new page in site #{link_to_site(@wiki)}" %>    
-
-<%= error_messages_for 'new_page' %>
-
-<% unless @templates.empty? %>
-    <% tabular_form_for :page, @new_page, :url => {:site_folder => params[:site_folder], :id => params[:id], :action => 'new'} do |f| %>
-    <%= f.text_field :presentation_name  %>
-	<%= f.hidden_field :tool, :value => 'Wiki' %>
-    <%= f.text_area :note, :cols => 60, :rows => 8 %>
-    <tr>
-        <th align="right">Template</th>
-        <td><ul>
-                <% for template in @templates %>
-				<% if template.page.presentation_name != 'Templates' %>
-					<li style = "list-style-type:none"><%= radio_button(:page, :source_version, template.id) %> 
-					<% if template.template? %>
-						<%= link_to_function("#{template.page.presentation_name.gsub(' Template','')}") do |page| 
-		    				page.visual_effect :toggle_appear, "#{template.id}"  
-		  				end %>
-						  [<%= link_to 'View', '/' + template.wiki.rel_path + '/' + template.page.rel_path, :popup => true %>]
-					<p id="<%= template.id %>" style="display:none;"><%= template.uma_type_descr %></p>
-					<% else %>
-						<%= "#{template.page.presentation_name} (version #{template.version} from #{template.wiki.title})" %>
-					<% end %>
-					</li>
-				<% end %>	
-                <% end %>    			
-			</ul>
-        </td>
-    </tr>
-    <tr><th></th><td><%= submit_tag "Submit" %></td></tr>
-    <% end %>
-<% end %>
\ No newline at end of file
diff --git a/source/app/views/pages/show.rhtml b/source/app/views/pages/show.rhtml
deleted file mode 100644
index 2266378..0000000
--- a/source/app/views/pages/show.rhtml
+++ /dev/null
@@ -1,85 +0,0 @@
-<% @heading = @page.presentation_name  %>
-<% @overview = "This page shows the details of #{link_to_page(@page)} in site #{link_to_site(@site)}" %>
-
-<% if @site.wiki? %>
-<div id="menu">
-    <%= link_to 'Edit', :action => 'checkout', :id => @page.id, :site_id => @site %>
-    | <%= link_to 'New Page', :action => 'new', :id => @page, :site_id => @site %>
-    <% if cadmin? %>
-    | <%= link_to 'Destroy', {:action => 'destroy', :id => @page}, :confirm => 'Are you sure? This will remove the page, comments and versions from the database. This will remove all meta-data and could cause a corruption. To undo changes you should use rollback or checkout, checkin!' %>
-    <% end %>
-    <%= link_to_notification_toggle(@page, Page.name) %>
-</div>
-
-<p>
-<%= tabs([["Versions", url_for(:action => 'show', :id => @page.id, :site_id => @site), (params[:action] == "show")],
-["Comments", url_for(:action=> 'show_comments', :id => @page.id, :site_id => @site.id), (params[:action] == "show_comments")]], 80) %>
-</p>
-
-<%= links_to_pages(@version_pages) if @version_pages %>
-<%= links_to_pages(@comment_pages) if @comment_pages %>
-
-<%= render(:partial => 'versions/versions_list') if @version_pages %>
-<%= render(:partial => 'comments/comments_list') if @comment_pages %>
-
-<% end %>
-<div class="sectionHeading"> Relationships</div>
-<div class="sectionContent">
- <table cellpadding="0" cellspacing="0" border="0" class="sectionTable">
-    <%= render_partial("relationships") %>
- </table>
-</div>
-
-<div class="sectionHeading">Properties</div>
-<div class="sectionContent">
-<table cellpadding="0" cellspacing="0" border="0" class="sectionTable">
-    <tr valign="top">
-        <th scope="row" class="sectionTableHeading">ID</th>
-        <td align="left" class="sectionTableCell"><%= @page.id.to_s %></td>
-    </tr>
-    <tr valign="top">
-            <th scope="row" class="sectionTableHeading">Presentation Name</th>
-            <td align="left" class="sectionTableCell"><%= @page.presentation_name %></td>
-    </tr>
-    <tr valign="top">
-            <th scope="row" class="sectionTableHeading">Content Type</th>
-            <td align="left" class="sectionTableCell"><%= @page.content_type %></td>
-    </tr>
-    <tr valign="top">
-            <th scope="row" class="sectionTableHeading">File Name</th>
-            <td align="left" class="sectionTableCell"><%= @page.filename %></td>
-    </tr>    
-    <tr valign="top">
-        <th scope="row" class="sectionTableHeading">Relative Path</th>
-        <td align="left" class="sectionTableCell"><%= @page.rel_path %></td>
-    </tr> 
-    <tr valign="top">
-        <th scope="row" class="sectionTableHeading">URL</th>
-        <td align="left" class="sectionTableCell">http://<%= ENV['EPFWIKI_HOST'] %><%= @page.url %> </td>
-    </tr>   
-    <tr valign="top">
-        <th scope="row" class="sectionTableHeading">Updated On</th>
-        <td align="left" class="sectionTableCell"><%= @page.updated_on.strftime("%I:%M %p %d-%b-%y") %></td>
-    </tr>
-    <tr valign="top">
-        <th scope="row" class="sectionTableHeading">Updated On</th>
-        <td align="left" class="sectionTableCell"><%= @page.updated_on.strftime("%I:%M %p %d-%b-%y") %></td>
-    </tr>
-    <% if cadmin? %>
-    <tr valign="top">
-        <th scope="row" class="sectionTableHeading">body_tag</th>
-        <td align="left" class="sectionTableCell"><%=h @page.body_tag %></td>
-    </tr>
-    <tr valign="top">
-        <th scope="row" class="sectionTableHeading">treebrowser_tag</th>
-        <td align="left" class="sectionTableCell"><%=h @page.treebrowser_tag %></td>
-    </tr>
-    <tr valign="top">
-        <th scope="row" class="sectionTableHeading">copyright_tag</th>
-        <td align="left" class="sectionTableCell"><%=h @page.copyright_tag %></td>
-    </tr>    
-    <% end %>
-</table>
-</div>
-
-
diff --git a/source/app/views/portal/_tabmenu.rhtml b/source/app/views/portal/_tabmenu.rhtml
deleted file mode 100644
index deef547..0000000
--- a/source/app/views/portal/_tabmenu.rhtml
+++ /dev/null
@@ -1,25 +0,0 @@
-<% div_id = 'tabs' if div_id.nil? %>
-<% ol_id = 'toc_tabs' if ol_id.nil? %>
-	<div id="<%= div_id %>">
-	<ol id="<%= ol_id %>">
-		<% items.each do |item| %>
-			<% logger.debug('items:' + items.inspect) %>
-			<% logger.debug('current:' + current.inspect) %>
-			<% if item[:id] == current %>
-				<li class="current"><a><span><%= item[:text] %></span></a></li>
-			<% else %>
-				<li>
-					<%= link_to_function("<span>#{item[:text]}</span>") do |page| 
-						items.each do |item2|
-							if item[:id] == item2[:id]
-								page.show item2[:id]
-							else
-								page.hide item2[:id]
-							end
-						end
-					end %>
-				</li>
-			<% end %>
-		<% end %>
-	</ol>
-	</div>
\ No newline at end of file
diff --git a/source/app/views/portal/about.rhtml b/source/app/views/portal/about.rhtml
deleted file mode 100644
index a1d290c..0000000
--- a/source/app/views/portal/about.rhtml
+++ /dev/null
@@ -1,3 +0,0 @@
-<% @heading = 'About' %>
-<h2>About</h2>
-<%= @about %>
\ No newline at end of file
diff --git a/source/app/views/portal/archives.rhtml b/source/app/views/portal/archives.rhtml
deleted file mode 100644
index 2f3baff..0000000
--- a/source/app/views/portal/archives.rhtml
+++ /dev/null
@@ -1,99 +0,0 @@
-<% @heading = "#{Time.gm(@year,@month).strftime('%B')} #{@year}" %>
-<h2><%= @heading %></h2>
-
-<p>
-<div id="discussion">
-	<%= render :partial => 'tabmenu', :locals => {:items => @tabitems, :current => 'discussion' }%>
-	<div id="comments_list">
-		<% @comments.each do |comment | %>
-		<p><%= comment.created_on.localtime.strftime(TIME_FORMAT) %>
-			 - <%= link_to comment.page.presentation_name, comment.site.rel_path + '/' + comment.page.rel_path %> 
-			 in <%= comment.site.title %>
-			<div class="comment"><%= comment.text %></div>
-		    <div class="commentfooter"><%= link_to_user comment.user %></div>
-		</p>
-		<% end %>
-		<% if @comments.size == 0 %>
-		<div id="notice">
-			<h2>No comments have been submitted</h2>
-		</div>
-		<% end %>		
-	</div>
-</div>
-
-<div id="changes" style="display:none;">
-	<%= render :partial => 'tabmenu', :locals => {:items => @tabitems,:current => 'changes' }%>	
-	<div id="versions_list">
-		<% @versions.each do |version| %>
-		<p><%= version.created_on.localtime.strftime(TIME_FORMAT) %>
-			 - <%= link_to version.page.presentation_name, version.wiki.rel_path + '/' + version.page.rel_path %> 
-			 in <%= version.wiki.title %>
-			<div class="comment"><%= version.note || '' %></div>
-		    <div class="commentfooter"><%= link_to_user version.user %></div>
-		</p>
-		<% end %>
-
-		<% if @versions.size == 0 %>
-		<div id="notice">
-			<h2>No changes were made</h2>
-		</div>
-		<% end %>
-		</ul>
-	</div>
-	
-</div>
-
-<div id="uploads" style="display:none;">
-	<%= render :partial => 'tabmenu', :locals => {:items => @tabitems,:current => 'uploads' }%>
-	
-	<div id="uploads_list">
-		<ul>
-		<% @uploads.each do |upload| %>
-			<li><%= upload.created_on.localtime.strftime(TIME_FORMAT) %>
-			 - <%= link_to upload.filename , "/uploads/#{upload.new_filename}" %>
-			 - <%= link_to upload.user.name, :controller => 'users', :action => 'show', :id => upload.user.id %>
-			 <% if !upload.description.blank? %> <i>"<%= upload.description %>"</i><% end %>
-			 </li>
-		<% end %>
-		<% if @uploads.size == 0  %>
-		<div id="notice">
-			<h2>No uploads or new pages available yet</h2>
-		</div>
-		<% end %>
-		</ul>
-	</div>
-</div>
-
-<div id="updates" style="display:none;">
-	<%= render :partial => 'tabmenu', :locals => {:items => @tabitems,:current => 'updates'}%>
-	<div id="updates_list">
-		<ul>
-		<% @updates.each do |update| %>
-			<li><%= update.created_on.localtime.strftime(TIME_FORMAT) %>
-			 - <%= link_to_site update.wiki %> updated to <%= link_to_site update.baseline_process %>
-			 </li>
-		<% end %>
-		<% if @updates.size == 0 %>
-		<div id="notice">
-			<h2>No updates were made</h2>
-		</div>
-		<% end %>
-		</ul>
-	</div>
-</div>
-
-<div id="pages" style="display:none;">
-	<%= render :partial => 'tabmenu', :locals => {:items => @tabitems,:current => 'pages'}%>
-	<div id="pages_list">
-		<ul>
-		<% @pages.each do |p| %>
-			<li><%= p.created_on.localtime.strftime(TIME_FORMAT) %>
-			 - <%= link_to_page p %> in <%= link_to_site p.site %> 
-			 by <%= link_to_user p.user %>
-			 </li>
-		<% end %>
-		</ul>
-	</div>
-</div>
-
-</p>
diff --git a/source/app/views/portal/feedback.rhtml b/source/app/views/portal/feedback.rhtml
deleted file mode 100644
index a92708e..0000000
--- a/source/app/views/portal/feedback.rhtml
+++ /dev/null
@@ -1,13 +0,0 @@
-<% @heading = 'Site Help & Feedback' %>
-<h1><%= @heading %></h1>
-
-<%= @help %>
-
-<%= error_messages_for :feedback %>
-
-    <% form_for :feedback, :url => {:controller =>'portal', :action => 'feedback'} do  |f| %>
-    Your Email Address<br>
-    <%= f.text_field :email %><br><br>
-    Question or Feedback<br>
-    <%= f.text_area :text, :cols => 40, :rows => 8  %><br><br><%= submit_tag 'Submit' %>
-    <% end %>
\ No newline at end of file
diff --git a/source/app/views/portal/home.rhtml b/source/app/views/portal/home.rhtml
deleted file mode 100644
index d383c42..0000000
--- a/source/app/views/portal/home.rhtml
+++ /dev/null
@@ -1,87 +0,0 @@
-<% @heading = 'Home' %>
-<h2>Welcome</h2>        
-<%= @welcome %>
-<h2>Most Recent</h2> 
-
-<p>
-<div id="discussion">
-	<%= render :partial => 'tabmenu', :locals => {:items => @tabitems, :current => 'discussion' }%>
-
-	<div id="comments_list">
-		<% @comments.each do |comment | %>
-		<p><%= comment.created_on.localtime.strftime(TIME_FORMAT) %>
-			 - <%= link_to comment.page.presentation_name, comment.site.rel_path + '/' + comment.page.rel_path %> 
-			 in <%= comment.site.title %>
-			<div class="comment"><%= comment.text %></div>
-		    <div class="commentfooter"><%= link_to_user comment.user %></div>
-		</p>
-		<% end %>
-		<% if @comments.size == 0 %>
-		<div id="notice">
-			<h2>No comments have been submitted</h2>
-		</div>
-		<% end %>		
-	</div>
-</div>
-
-<div id="changes" style="display:none;">
-	<%= render :partial => 'tabmenu', :locals => {:items => @tabitems, :current => 'changes' }%>
-	
-	<div id="versions">
-		<% @versions.each do |version| %>
-		<p><%= version.created_on.localtime.strftime(TIME_FORMAT) %>
-			 - <%= link_to version.page.presentation_name, version.wiki.rel_path + '/' + version.page.rel_path %> 
-			 in <%= version.wiki.title %>
-			<div class="comment"><%= version.note || '' %></div>
-		    <div class="commentfooter"><%= link_to_user version.user %></div>
-		</p>
-		<% end %>
-
-		<% if @versions.size == 0 %>
-		<div id="notice">
-			<h2>No changes were made</h2>
-		</div>
-		<% end %>
-	</div>
-</div>
-
-<div id="uploads" style="display:none;">
-	<%= render :partial => 'tabmenu', :locals => {:items => @tabitems, :current => 'uploads' }%>
-	
-	<div id="uploads_list">
-		<ul>
-		<% @uploads.each do |upload| %>
-			<li><%= upload.created_on.localtime.strftime(TIME_FORMAT) %>
-			 - <%= link_to upload.filename , "/uploads/#{upload.new_filename}" %>
-			 - <%= link_to upload.user.name, :controller => 'users', :action => 'show', :id => upload.user.id %>
-			 <% if !upload.description.blank? %> <i>"<%= upload.description %>"</i><% end %>
-			 </li>
-		<% end %>
-		<% if @uploads.size == 0 && @pages.size == 0 %>
-		<div id="notice">
-			<h2>No uploads or new pages available yet</h2>
-		</div>
-		<% end %>
-		</ul>
-		<p><%= link_to 'More uploads...', :controller => 'uploads' %></p>
-	</div>
-</div>
-
-
-<div id="pages" style="display:none;">
-	<%= render :partial => 'tabmenu', :locals => {:items => @tabitems, :current => 'pages' }%>
-	
-	<div id="pages_list">
-		<ul>
-		<% @pages.each do |p| %>
-			<li><%= p.created_on.localtime.strftime(TIME_FORMAT) %>
-			 - <%= link_to p.presentation_name, p.url %> in <%= link_to p.site.title, p.site.url %> 
-			 by <%= link_to_user p.user %>
-			 </li>
-		<% end %>
-		</ul>
-	</div>
-</div>
-
-</p>
-
diff --git a/source/app/views/portal/users.rhtml b/source/app/views/portal/users.rhtml
deleted file mode 100644
index 66bd7a7..0000000
--- a/source/app/views/portal/users.rhtml
+++ /dev/null
@@ -1,18 +0,0 @@
-<% @heading = 'Users' %>
-<h2>Users</h2>  
-
-<p>
-<table width="100%">
-<tr><th>User</th><th>Changes</th><th>Comments</th><th>Uploads</th><th>New Pages</th><th>Total</th></tr>
-<% @contributors.each do |c| %>
-<tr>
-	<td><%= link_to_user c[:user] %></td>
-	<td><%= c[:version_count].to_s %></td>
-	<td><%= c[:comment_count].to_s %></td>	
-	<td><%= c[:upload_count].to_s %></td>
-	<td><%= c[:new_page_count].to_s %></td>
-	<td><strong><%= c[:count].to_s %></strong></td>
-</tr>
-<% end %>
-</table>
-</p>
diff --git a/source/app/views/portal/wikis.rhtml b/source/app/views/portal/wikis.rhtml
deleted file mode 100644
index 1f4b3fd..0000000
--- a/source/app/views/portal/wikis.rhtml
+++ /dev/null
@@ -1,17 +0,0 @@
-<% @heading = 'Wikis' %>
-<h2>Wikis</h2>        
-
-<p>
-<table width="100%">
-<tr><th>Title</th><th>Contributions<br><small>(Changes/Comments/Uploads)</small></th><th>Baseline</th><th>Status</th></tr>
-<% @wikis.each do |wiki| %>
-<tr>
-	<td><%= link_to_site wiki %></td>
-	<td><%= wiki.versions.count(:conditions => ['baseline_process_id is null and version is not null']) %>
-	/<%= wiki.comments.count %>/<%= Upload.count %></td>
-	<td><%= wiki.baseline_process.title if wiki.baseline_process %></td>
-	<td><%= wiki.status %></td>
-</tr>
-<% end %>
-</table>
-</p>
\ No newline at end of file
diff --git a/source/app/views/rss/any_uma_type_feed.rxml b/source/app/views/rss/any_uma_type_feed.rxml
deleted file mode 100644
index 3f3d761..0000000
--- a/source/app/views/rss/any_uma_type_feed.rxml
+++ /dev/null
@@ -1,68 +0,0 @@
-#--######################################################################
-# Copyright (c) 2008 IBM
-# 
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# 
-# Ricardo Balduino:: Initial implementation, based on design discussions with Onno van der Straaten
-#++######################################################################
-# {Copyright (c) 2008 IBM}[link:files/COPYRIGHT.html]
-
-records = (@umaElements).uniq
-imageSrc = ""
-imageSrcTag = ""
-
-
-xml.instruct!
-  #xml.rss "version" => "2.0", "xmlns:dc" => "http://purl.org/dc/elements/1.1/" do
-  xml.rss "version" => "2.0", "xmlns:atom" => "http://www.w3.org/2005/Atom" do
-  
-  scope = @wiki.title + " Wiki" if @wiki
-  scope = ENV['EPFWIKI_APP_NAME'] unless @wiki
-  
-  xml.channel do
-    xml.title "#{scope}"
-    if @wiki
-      xml.link @wiki.url(true) 
-      xml.atom:link, :href => "http://#{ENV['EPFWIKI_HOST']}/rss/#{@wiki.folder}/#{@umaType}", :rel => 'self', :type => 'application/rss+xml'      
-    end
-    xml.pubDate CGI.rfc1123_date(Time.now.gmtime) 
-    xml.description h("All #{@umaType} elements in '#{scope}'")
-    records.sort_by{|record| [record.presentation_name]}.each do |record| # can sort on more columns but we have the baseline_updated_on column
-      xml.item do
-        logger.debug("RSS item for #{record.class.to_s} with ID #{record.id}")
-        wiki_page = record
-
-        # extracts the image for each item
-        match1 = /<td width="50">(.*?)<\/td>/m.match(wiki_page.html)
-        if(match1)
-          match2 = /src="(.*?)"/m.match(match1[1])
-          if match2
-            imageSrc = match2[1]
-            imageSrc = imageSrc.gsub("../", '')
-            imageSrc = imageSrc.gsub("./", '')
-            imageSrc = "http://" + ENV['EPFWIKI_HOST'] + "/" + "#{ENV['EPFWIKI_WIKIS_FOLDER']}/" + wiki_page.site.folder + "/" + imageSrc # uses this to show an image by the channel title
-            imageSrcTag = '<img src="'+imageSrc+'" width="16" height="16" />' # uses this to show an image by the brief description
-          end      
-        end       
-        xml.guid "WikiPage#{wiki_page.id.to_s}", :isPermaLink => false
-        xml.title "#{wiki_page.presentation_name}"
-        xml.link wiki_page.url(true)
-        xml.description imageSrcTag+" "+wiki_page.overview_table
-        xml.pubDate CGI.rfc1123_date(Time.now.gmtime)
-        #xml.dc_creator h(wiki_page.user.name) # this is raising an exception -> user is nil
-      end
-    end
-   
-    # shows the image with link on the channel section
-    xml.image do
-      xml.url imageSrc
-      xml.link @wiki.url(true)
-      xml.title @wiki.title
-    end  
-  end
-end
diff --git a/source/app/views/rss/error.rhtml b/source/app/views/rss/error.rhtml
deleted file mode 100644
index 01f64a0..0000000
--- a/source/app/views/rss/error.rhtml
+++ /dev/null
@@ -1,37 +0,0 @@
-<!--
-#--######################################################################
-# Copyright (c) 2008 IBM
-# 
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# 
-# Ricardo Balduino:: Initial implementation
-#++######################################################################
-# {Copyright (c) 2008 IBM}[link:files/COPYRIGHT.html]
--->
-
-<% @heading = "Feed Error" %>
-<% @overview = "Element is not available in this Wiki. Please request another feed." %>
-
-
-<head>
-	<h1>Feed Error</h1>
-</head>
-<body>
-<div class="sectionHeading">
-	<%= "Error " + "'" + ENV['EPFWIKI_APP_NAME'] + "'" %>
-</div>
-<div class="sectionContent">
-    <table cellpadding="0" cellspacing="0" border="0" class="sectionTable">
-        <tr valign="top">
-            <td scope="row" class="sectionTableCell">
-            	<p>Element is not available in this Wiki. Please request another feed.</p>
-        	</td>
-        </tr>
-    </table>
-</div>
-</body>
\ No newline at end of file
diff --git a/source/app/views/rss/list.rxml b/source/app/views/rss/list.rxml
deleted file mode 100644
index bbd1be7..0000000
--- a/source/app/views/rss/list.rxml
+++ /dev/null
@@ -1,68 +0,0 @@
-records = (@versions + @comments + @updates + @uploads).uniq
-xml.instruct!
-#xml.rss "version" => "2.0", "xmlns:dc" => "http://purl.org/dc/elements/1.1/" do
-  xml.rss "version" => "2.0", "xmlns:atom" => "http://www.w3.org/2005/Atom" do
-  scope = @wiki.title if @wiki
-  scope = ENV['EPFWIKI_APP_NAME'] unless @wiki
-  xml.channel do
-    xml.title "#{scope}"
-    if @wiki
-      xml.link @wiki.url(true) 
-      xml.atom:link, :href => "http://#{ENV['EPFWIKI_HOST']}/rss/#{@wiki.folder}", :rel => 'self', :type => 'application/rss+xml'      
-    else
-      xml.link "http://#{ENV['EPFWIKI_HOST']}/rss/all"
-      xml.atom:link, :href => "http://#{ENV['EPFWIKI_HOST']}/rss/all", :rel => 'self', :type => 'application/rss+xml'      
-    end
-    if records.size > 0
-      xml.pubDate CGI.rfc1123_date(records.first.created_on.gmtime) 
-    else
-      xml.pubDate CGI.rfc1123_date(Time.now.gmtime) 
-    end
-    xml.description h("News, changes, comments, baseline updates in #{scope}")
-    records.sort_by{|record| [record.created_on]}.reverse.each do |record| # can sort on more columns but we have the baseline_updated_on column
-      xml.item do
-        logger.debug("RSS item for #{record.class.to_s} with ID #{record.id}")
-        if record.class.name == 'UserVersion'
-          version = record
-          xml.guid "Version#{version.id.to_s}", :isPermaLink => false
-          xml.title "#{version.user.name} changed '#{version.page.presentation_name}'"
-          xml.link version.page.url(true)
-          xml.description version.note
-          xml.pubDate CGI.rfc1123_date(version.created_on.gmtime)
-          xml.dc_creator h(version.user.name)
-        elsif record.class.name == 'Upload'
-          upload = record
-          xml.guid "Upload#{upload.id.to_s}", :isPermaLink => false
-          xml.title "#{upload.user.name} uploaded #{upload.filename}"
-          xml.link upload.url(true)
-          xml.description "#{upload.description}"
-          xml.pubDate CGI.rfc1123_date(upload.created_on.gmtime)
-          xml.dc_creator h(upload.user.name)
-        elsif record.class.name == 'Comment'
-          comment = record
-          xml.guid "Comment#{comment.id.to_s}", :isPermaLink => false
-          xml.title "#{comment.user.name} discussed '#{comment.page.presentation_name}'"
-          xml.link comment.page.url(true)
-          xml.description "#{comment.text}"
-          xml.pubDate CGI.rfc1123_date(comment.created_on.gmtime)
-          xml.dc_creator h(comment.user.name)
-        elsif record.class.name == 'Update'
-          update = record
-          wiki = update.wiki
-          xml.link wiki.url(true)
-          xml.pubDate CGI.rfc1123_date(wiki.created_on.gmtime)
-          xml.dc_creator h(@cadmin.name) 
-          if update.first_update?
-            xml.title "#{wiki.title} created!"
-            xml.description h("A new Wiki with title \"#{wiki.title}\" was created")
-            xml.guid "WikiCreated#{wiki.id.to_s}", :isPermaLink => false
-          else
-            xml.title "#{wiki.title} updated!"
-            xml.description "Wiki #{wiki.title} was updated with baseline #{wiki.baseline_process.title}"
-            xml.guid "WikiUpdated#{wiki.id.to_s}_#{update.id.to_s}", :isPermaLink => false
-          end
-        end
-      end
-    end
-  end
-end
diff --git a/source/app/views/rss/practice_feed.rxml b/source/app/views/rss/practice_feed.rxml
deleted file mode 100644
index 7fa5d0e..0000000
--- a/source/app/views/rss/practice_feed.rxml
+++ /dev/null
@@ -1,106 +0,0 @@
-#--######################################################################
-# Copyright (c) 2008 IBM
-# 
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# 
-# Ricardo Balduino:: Initial implementation, based on design discussions with Onno van der Straaten
-#++######################################################################
-# {Copyright (c) 2008 IBM}[link:files/COPYRIGHT.html]
-
-record = (@practice)
-imageSrc = ""
-
-xml.instruct!
-  #xml.rss "version" => "2.0", "xmlns:dc" => "http://purl.org/dc/elements/1.1/" do
-  xml.rss "version" => "2.0", "xmlns:atom" => "http://www.w3.org/2005/Atom" do
-  
-  scope = @practice.presentation_name + " Practice" if @practice
-  scope = ENV['EPFWIKI_APP_NAME'] unless @wiki
-  
-  wiki_page = record
-
-  xml.channel do
-    xml.title "#{scope}" 
-    if @wiki
-      xml.link wiki_page.url(true) 
-      xml.atom:link, :href => "http://#{ENV['EPFWIKI_HOST']}/rss/#{@wiki.folder}/practice/#{@practice_name}", :rel => 'self', :type => 'application/rss+xml'      
-    end
-    
-    xml.pubDate CGI.rfc1123_date(Time.now.gmtime) 
-    
-    xml.image do
-      xml.url "http://" + ENV['EPFWIKI_HOST'] + "/" + "#{ENV['EPFWIKI_WIKIS_FOLDER']}/" + wiki_page.site.folder + "/" + "images/practice.gif"
-      xml.link wiki_page.url(true)
-      xml.title @practice.presentation_name
-    end
-    
-    # xml.description h("Practice #{wiki_page.presentation_name} in '#{@wiki.title}' Wiki") # use this and remove the line below in case the practice itself is added as first item in the feed, see commented section below 
-    xml.description wiki_page.overview_table # Gets the brief description from the element page
-
-    # The first entry could be the practice itself, but is it redundant with the channel information above.
-    #xml.item do
-    #  xml.guid "WikiPage#{wiki_page.id.to_s}", :isPermaLink => false
-    #  xml.title "#{wiki_page.presentation_name}"
-    #  xml.link wiki_page.url(true)
-    #  xml.description wiki_page.overview_table # Gets the brief description from the element page
-    #  xml.pubDate CGI.rfc1123_date(Time.now.gmtime)
-      #xml.dc_creator h(wiki_page.user.name) # this is raising an exception -> user is nil
-    #end
-    
-    # crawls the practice page and finds all the elements the practice relates to
-    match = /class="sectionTableHeading"(.*?)<\/td>/m.match(wiki_page.html) #finds first sectionTableHeading (Relationships table)
-    if match
-      sectionTableHeading = '<th class="sectionTableHeading"'+match[1]+'</td>'
-      more_nodes = true
-      while (more_nodes) do
-        # finds the image that is included by the brief description of the element
-        match1 = /img src="(.*?)"/m.match(sectionTableHeading)
-        if match1
-          imageTag = '<img src="'+match1[1]+'"'+' height="16" width="16">'
-          imageSrc = match1[1]
-          imageSrc = imageSrc.gsub("../", '')
-          imageSrc = imageSrc.gsub("./", '')
-          imageSrc = "http://" + ENV['EPFWIKI_HOST'] + "/" + "#{ENV['EPFWIKI_WIKIS_FOLDER']}/" + wiki_page.site.folder + "/" + imageSrc
-          sectionTableHeading = sectionTableHeading.sub(imageTag, '') # removes the img section from the sectionTableHeading, so next time next image will be returned
-          imageSrc = '<img src="'+imageSrc+'" width="16" height="16" />' # this is added to the brief description later
-        end
-        
-        match2 = /a (.*?)<\/a>/m.match(sectionTableHeading) #finds first <a href...</a> section in the sectionTableHeading block returned
-        if match2
-          xml.item do
-            aSection = '<a '+match2[1]+'</a>'
-            match3 = /"\>(.*?)<\/a>/m.match(aSection) # returns the text in the <a></a> section
-            title = match3[1]
-            xml.title title
-            match4 = /href="(.*?)"/m.match(aSection) # returns the relative path in the href attribute
-            if match4
-              aHref = match4[1]
-              # extracts the "./../../../" and adds the full url of the wiki site to the relative path
-              aHref = aHref.gsub("../", '')
-              aHref = aHref.gsub("./", '')
-              relPath = aHref # but the relative path is preserved for the purposes of using it on the wiki page query below
-              aHref = "http://" + ENV['EPFWIKI_HOST'] + "/" + "#{ENV['EPFWIKI_WIKIS_FOLDER']}/" + wiki_page.site.folder + "/" + aHref
-              xml.link aHref
-            end
-            page = WikiPage.find (:first, :conditions => ['rel_path=?', relPath]) # finds the page that is pointed by this relative path
-            briefDescr = page.overview_table
-            if briefDescr
-              xml.description imageSrc+" "+briefDescr # returns the brief description of the element represented by this page, but first adds the relate image
-            end
-            xml.guid "WikiPage#{page.id.to_s}", :isPermaLink => false
-            xml.pubDate CGI.rfc1123_date(Time.now.gmtime)
-            
-            sectionTableHeading = sectionTableHeading.gsub(aSection, '') # removes the used <a>...</a> section from the whole, so this block repeats for the next <a>..</a> section found
-          end      
-        else
-          more_nodes = false
-        end
-      end
-    end # ends crawler
-  end
-end
diff --git a/source/app/views/sites/description.rhtml b/source/app/views/sites/description.rhtml
deleted file mode 100644
index 99c81de..0000000
--- a/source/app/views/sites/description.rhtml
+++ /dev/null
@@ -1,320 +0,0 @@
-<% @heading = "Baseline Process: #{@site.title}" if @site.baseline_process? %>
-<% @heading = "Wiki: #{@site.title}" if @site.wiki? %>
-<% @overview = "Use this page to manage " + link_to_site(@site) %>
-
-<div id="menu">
-	<%= link_to 'Edit', {:action => 'edit', :id => @site}, :title => "Edit detail information of #{@site.title}" %>   
-    <% if @site.wiki? %>
-		 <% if admin? %>
-		 	| <%= link_to 'New Wiki', :action => 'new_wiki' %>
-		 <% end %>
-    <% end %>
-</div>
-
-<% if @site.wiki?  %>
-<br>
-<br>
-
-<div id="epfc_tabs">
-	<ol id="epfc_tabs_toc">
-		<%= menulink_to 'Description',  :controller => 'sites', :action => 'description', :id => @site.id %>
-	    <%= menulink_to 'Versions',  :controller => 'sites', :action => 'versions', :id => @site.id %>
-		<%= menulink_to 'Comments', :controller => 'sites', :action => 'comments', :id => @site.id %>
-		<%= menulink_to 'Pages', :controller => 'sites', :action => 'pages', :id => @site.id %>		
-		<%= menulink_to 'Uploads', :controller => 'sites', :action => 'uploads', :id => @site.id %>		
-		<% if admin? %><%= menulink_to 'Feedback', :controller => 'sites', :action => 'feedback', :id => @site.id  %><% end %>
-	</ol>
-</div>
-
-
-<% if @version_pages %>
-	<%= links_to_pages(@version_pages)  %>
-	<p>
-	<form name="filter" method="get">
-		Filter:
-		<%= check_box('filter', 'done', {}, 'N', 'All' )%> Only Todo
-		<%= check_box('filter', 'type_filter', {}, 'UserVersion', 'All' )%> Only User Versions
-		<input type=submit value=OK>
-	</form>
-	</p>
-	<%= render(:partial => 'versions/versions_list') %>
-<% end %>
-
-<% if @comment_pages %>
-	<%= links_to_pages(@comment_pages)  %>
-	<p>
-	<form name="filter" method="get">
-		Filter:
-		<%= check_box('filter', 'done', {}, 'N', 'All' )%> Only Todo
-		<input type=submit value=OK>
-	</form>
-	</p>
-	<%= render(:partial => 'comments/comments_list')  %>
-<% end  %>
-
-
-
-<%= links_to_pages(@page_pages) if @page_pages %>
-<%= links_to_pages(@upload_pages) if @upload_pages %>
-
-
-
-<% if admin? %><%= links_to_pages(@feedback_pages) if @feedback_pages %><% end %>
-<%= render(:partial => 'pages/list') if @page_pages %>
-<%= render(:partial => 'uploads/list') if @upload_pages %>
-<% if admin? %><%= render(:partial => 'feedbacks/list') if @feedback_pages %><% end %>
-
-<br>
-<br>
-<% end %>
-
-<% if params[:action] == 'description' %>
-
-<div class="sectionHeading">Description</div>
-<div class="sectionContent">
-    <table cellpadding="0" cellspacing="0" border="0" class="sectionTable">
-        <tr>
-            <td class="sectionTableCell">
-            	<%= if @site.description.blank? 
-					link_to 'Click to add a description...', {:action => 'edit', :id => @site}
-				else
-					@site.description
-				end %>
-            </td>
-        </tr>
-    </table>
-</div>
-
-
-<% if @site.wiki? %>
-<div class="sectionHeading">Updates</div>
-<div class="sectionContent">
-    <table cellpadding="0" cellspacing="0" border="0" class="sectionTable">
-        <tr>
-            <th scope="row" class="sectionTableHeading">Current Baseline Process</th>
-            <td align="left" class="sectionTableCell">
-    			<ul>
-					<% if @site.status != 'Pending' %>
-						<%= link_to_site @site.baseline_process if @site.baseline_process %>
-					<% else %>
-						<%= @site.title %> is pending and so there is no current Baseline Process Yet. The Wiki is empty.
-					<% end %>
-				</ul>
-			</td>
-        </tr>
-        <tr>
-            <th scope="row" class="sectionTableHeading">Status</th>
-            <td align="left" class="sectionTableCell">
-				<%= @site.status %>
-			</td>
-        </tr>
-        <tr valign="top">
-            <th scope="row" class="sectionTableHeading">Updates</th>
-            <td align="left" class="sectionTableCell" >
-             <ul>
-             	<% @site.updates_done.each do |update| %>
-					<li><%= link_to_site update.baseline_process %>  deployed on  <%= update.started_on.localtime.strftime(TIME_FORMAT) %> </li>
-				<% end %>
-             </ul>
-            </td>
-        </tr>
-        <tr valign="top">
-            <th scope="row" class="sectionTableHeading">Scheduled</th>
-            <td align="left" class="sectionTableCell" >
-             <ul>
-             	<% @site.updates_todo.each do |update| %>
-					<li><%= link_to_site update.baseline_process %> scheduled on <%= update.created_on.localtime.strftime(TIME_FORMAT) %> 
-					[<%= link_to 'Cancel', {:action => 'update_cancel', :update_id => update.id, :id => @site.id}, :confirm => 'Are you sure?', :method => :post %>] 
-					[<%= link_to 'Update Now', {:action => 'update_now', :update_id => update.id, :id => @site.id}, :confirm => 'Are you sure? It is recommended to schedule a task to run \'job_daily\' at night, or when ever your site is used the least. Depending on size of the baseline, users might notice a performance degradation if you do it right now.', :method => :post %>] </li>
-				<% end %>
-             </ul>
-            </td>
-        </tr>
-        <tr valign="top">
-            <th scope="row" class="sectionTableHeading">Schedule New Update</th>
-            <td align="left" class="sectionTableCell" ><%= link_to_function("Select a Baseline Process ...") do |page| 
-		    				page.visual_effect :toggle_appear, "baselines"  
-		  				end %>
-             <ul id="baselines" style="display:none;" >
-             	<% BaselineProcess.find(:all, :order => 'created_on DESC', :conditions => ['obsolete_on is null']).each do |bp| %>
-					<li><%= link_to bp.title, {:action => 'update', :baseline_process_id => bp.id, :id => @site.id}, :confirm => "Schedule update of Wiki '#{@site.title}' with Baseline Process '#{bp.title}'?", :method => :post %> created on <%= bp.created_on.localtime.strftime(TIME_FORMAT) %></li>
-				<% end %>
-             </ul>
-            </td>
-        </tr>		
-    </table>
-</div>
-
-
-<div class="sectionHeading">Harvesting/Reviewing</div>
-<div class="sectionContent">
-    <table cellpadding="0" cellspacing="0" border="0" class="sectionTable">
-        <tr>
-            <th scope="row" class="sectionTableHeading">Versions</th>
-            <td align="left" class="sectionTableCell">
-            	<%= Version.count(:conditions => ['wiki_id=? and done=? and baseline_process_id is null', @site.id, 'N']).to_s %> to do of a total of <%= Version.count(:conditions => ['wiki_id=? and baseline_process_id is null', @site.id]).to_s %> versions
-			</td>
-        </tr>
-        <tr valign="top">
-            <th scope="row" class="sectionTableHeading">Comments</th>
-            <td align="left" class="sectionTableCell" >
-            	<%= @site.comments.count(:conditions => ['done=?', 'N']).to_s %> to do of a total of <%= @site.comments.count.to_s %> comments
-            </td>
-        </tr>
-        <tr valign="top">
-            <th scope="row" class="sectionTableHeading">Uploads</th>
-            <td align="left" class="sectionTableCell" >
-				<%= Upload.count(:conditions => ['done=?', 'N']).to_s %> to do of a total of <%= Upload.count.to_s %> uploads
-            </td>
-        </tr>
-        <tr valign="top">
-            <th scope="row" class="sectionTableHeading">Feedback</th>
-            <td align="left" class="sectionTableCell" >
-				<%= Feedback.count(:conditions => ['done=?', 'N']).to_s %> to do of a total of <%= Feedback.count.to_s %> feedback items
-            </td>
-        </tr>
-    </table>
-</div>
-<% end %>
-
-<div class="sectionHeading">Content</div>
-<div class="sectionContent">
-    <table cellpadding="0" cellspacing="0" border="0" class="sectionTable">
-		<% if @site.wiki? %>
-        <tr>
-            <th scope="row" class="sectionTableHeading">Harvesting</th>
-            <td align="left" class="sectionTableCell" colspan="2">
-    			<ul>
-					<li><%= Version.count(:conditions => ['wiki_id=? and done=? and baseline_process_id is null', @site.id, 'N']).to_s %> versions to do of <%= Version.count(:conditions => ['wiki_id=? and baseline_process_id is null', @site.id]).to_s %> </li>
-					<li><%= @site.comments.count(:conditions => ['done=?', 'N']).to_s %> comments to do of <%= @site.comments.count.to_s %> </li>
-					<li><%= Upload.count(:conditions => ['done=?', 'N']).to_s %> uploads to do of <%= Upload.count.to_s %> </li>
-				</ul>
-			</td>
-        </tr>
-		<% end %>
-        <tr valign="top">
-            <th scope="row" class="sectionTableHeading">Content Types</th>
-			<% if @site.wiki? %>
-	            <td align="left" class="sectionTableCell" >EPFC Pages:<ul><li>
-					<%= WikiPage.count(:group => 'uma_type', :conditions => ['site_id=? and tool=?',@site.id, 'EPFC'] ).collect{|t|t.join(': ')}.join('</li><li>') %>
-					</li></ul>
-	            </td>
-	            <td align="left" class="sectionTableCell" >Wiki Pages:<ul><li>
-					<%= WikiPage.count(:group => 'uma_type', :conditions => ['site_id=? and tool=?',@site.id, 'Wiki'] ).collect{|t|t.join(': ')}.join('</li><li>') %>
-					</li></ul>
-	            </td>
-			<% else %>
-	            <td align="left" class="sectionTableCell" ><ul><li>
-					<%= BaselineProcessPage.count(:group => 'uma_type', :conditions => ['site_id=?',@site.id] ).collect{|t|t.join(': ')}.join('</li><li>') %>
-					</li></ul>
-	            </td>
-			<% end %>
-        </tr>
-		<% if @site.wiki? %>
-        <tr valign="top">
-            <th scope="row" class="sectionTableHeading">Status</th>
-            <td align="left" class="sectionTableCell" >EPFC Pages:
-				<ul><li>
-					<%= WikiPage.count(:group => 'status', :conditions => ['site_id=? and tool=?',@site.id, 'EPFC'] ).collect{|t|t.join(': ')}.join('</li><li>') %>
-				</li></ul>
-            </td>
-            <td align="left" class="sectionTableCell" >Wiki Pages:
-				<ul><li>
-					<%= WikiPage.count(:group => 'status', :conditions => ['site_id=? and tool=?',@site.id, 'Wiki'] ).collect{|t|t.join(': ')}.join('</li><li>') %>
-				</li></ul>
-            </td>
-        </tr>
-        <tr valign="top">
-            <th scope="row" class="sectionTableHeading">Checkouts</th>
-            <td align="left" class="sectionTableCell" colspan="2">
-             <ul>
-                <% for checkout in @site.checkouts %>
-                <li>
-                   <%= checkout.created_on.localtime.strftime(TIME_FORMAT) %> <%= link_to_user checkout.user %> of <%= link_to_page checkout.page %> in Wiki <%= link_to_site checkout.site %>
-                </li>
-                <% end %>
-             </ul>
-            </td>
-        </tr>
-		<% end %>
-    </table>
-</div>
-
-<% if @site.wiki? %>
-<div class="sectionHeading">Contributors</div>
-<div class="sectionContent">
-    <table cellpadding="0" cellspacing="0" border="0" class="sectionTable">
-        <tr>
-            <th scope="row" class="sectionTableHeading">Overall</th>
-            <td align="left" class="sectionTableCell">
-            	<ul>
-            	<% @site.top_contributors.each do |c | %>
-					<% if c[1] > 5 %>
-					<li><%= link_to_user c[0] %>: <%= c[1].to_s %></li>
-					<% end %>
-				<% end %>
-				</ul>
-            </td>
-        </tr>
-        <tr valign="top">
-            <th scope="row" class="sectionTableHeading">All</th>
-            <td align="left" class="sectionTableCell" >
-               <ul>
-                   <% for user in @site.users %>
-                   <li>
-                      <%= link_to_user(user) %>
-                   </li>
-                   <% end %>
-                </ul>
-            </td>
-        </tr>
-    </table>
-</div>
-<% end %>
-
-<div class="sectionHeading">Properties</div>
-<div class="sectionContent">
-<table cellpadding="0" cellspacing="0" border="0" class="sectionTable">
-    <tr valign="top">
-        <th scope="row" class="sectionTableHeading">ID</th>
-        <td align="left" class="sectionTableCell"><%= @site.id %></td>
-    </tr>
-    <tr valign="top">
-            <th scope="row" class="sectionTableHeading">Title</th>
-            <td align="left" class="sectionTableCell"><%= @site.title %></td>
-    </tr>
-    <tr valign="top">
-        <th scope="row" class="sectionTableHeading">Root Path</th>
-        <td align="left" class="sectionTableCell"><%= @site.path %></td>
-    </tr>
-    <tr valign="top">
-        <th scope="row" class="sectionTableHeading">URL</th>
-        <td align="left" class="sectionTableCell"><%= url_for(@site.rel_path) %></td>
-    </tr>
-    <tr valign="top">
-        <th scope="row" class="sectionTableHeading">Created On</th>
-        <td align="left" class="sectionTableCell"><%= @site.created_on.strftime("%I:%M %p %d-%b-%y") %></td>
-    </tr>
-    <tr valign="top">
-        <th scope="row" class="sectionTableHeading">Updated On</th>
-        <td align="left" class="sectionTableCell"><%= @site.updated_on.strftime("%I:%M %p %d-%b-%y") %></td>
-    </tr>
-    <tr valign="top">
-        <th scope="row" class="sectionTableHeading">Content Scanned On</th>
-        <td align="left" class="sectionTableCell"><%= @site.content_scanned_on.strftime("%I:%M %p %d-%b-%y") if @site.content_scanned_on %>
-        </td>
-    </tr>
-
-    <tr valign="top">
-        <th scope="row" class="sectionTableHeading">Pages</th>
-        <td align="left" class="sectionTableCell">
-			<% if @site.wiki? %>
-				<%= WikiPage.count(:conditions => ['site_id=?',@site.id] ) %>
-			<% else %>
-				<%= BaselineProcessPage.count(:conditions => ['site_id=?',@site.id] ) %>
-			<% end %>
-        </td>
-    </tr>
-</table>
-</div>
-<% end %>
\ No newline at end of file
diff --git a/source/app/views/sites/edit.rhtml b/source/app/views/sites/edit.rhtml
deleted file mode 100644
index b8e6ae7..0000000
--- a/source/app/views/sites/edit.rhtml
+++ /dev/null
@@ -1,12 +0,0 @@
-<% @heading = "Edit Baseline Process: #{@site.title}" if @site.baseline_process? %>
-<% @heading = "Edit Wiki: #{@site.title}" if @site.wiki? %>
-<% @overview = "Use the form below to update properties of #{link_to_site(@site)}" %>
-
-<%= error_messages_for 'site' %>
-
-<% tabular_form_for :site do |f| %>
-    <%= f.text_field :title %>
-    <%= f.text_field :folder %>
-    <%= f.text_area :description, :cols => 60, :rows => 8 %>
-    <tr><th></th><td><%= submit_tag "Submit" %></td></tr> 
-<% end %>
diff --git a/source/app/views/sites/list.rhtml b/source/app/views/sites/list.rhtml
deleted file mode 100644
index 1c08c8c..0000000
--- a/source/app/views/sites/list.rhtml
+++ /dev/null
@@ -1,78 +0,0 @@
-<% @heading = 'Sites' %>
-
-<div id="menu">
-    <%= link_to 'New Baseline Process', :action => 'new' %> 
-    | <%= link_to 'New Wiki', :action => 'new_wiki' %>
-</div>
-
-<div class="sectionHeading">Wikis</div>
-<div class="sectionContent">
-    <table cellpadding="0" cellspacing="0" border="0" class="sectionTable">
-        <tr>
-            <td class="sectionTableCell">
-				<table width="100%">
-				    <tr>
-				        <th>ID</th>    
-				        <th>Title</th>
-				        <th>Pages</th>
-				        <th>Versions</th>
-				        <th>Comments</th>
-				        <th>Created By</th>
-				        <th>Created</th>
-				        <th>Baseline Process</th>
-						<th>Actions</th>
-				    </tr>
-				    <% @wikis.each do |wiki| %>
-				    <tr>
-				        <td><%= wiki.id %></td>
-				        <td>
-				            <%= link_to_site wiki %> 
-				            <%= link_to(image_tag('rss.gif', :border => 0, :title => "Link to RSS feed"), :controller => 'rss', :action => 'list', :site_folder => wiki.folder) %>
-				        </td>
-				        <td><%= wiki.pages.count %></td>
-				        <td><%= wiki.versions.count(:conditions => ['baseline_process_id is null'])%></td>
-				        <td><%= wiki.comments.count %></td>
-				        <td><%= link_to_user wiki.user %></td>
-				        <td><%= wiki.created_on.strftime("%I:%M %p %d-%b-%y") %></td>         
-				        <td><%= link_to_site wiki.baseline_process if wiki.baseline_process %></td>         
-						<td>
-							<% if wiki.obsolete_on.nil? %>
-								[<%= link_to 'Make Obsolete', {:action => 'obsolete', :id => wiki.id}, :confirm => "'Make Obsolete' will hide Wiki #{wiki.title} from end users. This operation can be reversed at any time. Do you want to make Wiki #{wiki.title} obsolete?", :method => :post %>]
-							<% else %>
-								[<%= link_to 'Undo Make Obsolete', {:action => 'obsolete', :id => wiki.id}, :method => :post %>]
-							<% end %>
-						</td>
-				    </tr>
-				    <% end %>
-				</table>
-            </td>
-        </tr>
-    </table>
-</div>
-
-<div class="sectionHeading">Baseline Processes</div>
-<div class="sectionContent">
-    <table cellpadding="0" cellspacing="0" border="0" class="sectionTable">
-        <tr>
-            <td class="sectionTableCell">
-				<table width="100%">
-				   <tr>
-				      <th>ID</th>    
-				      <th>Name</th>
-				      <th>Pages</th>
-				      <th>Created By</th>
-				      <th>Created</th>
-				  </tr>
-				   <% @baseline_processes.each do |site| %>
-				     <tr><td><%= site.id %></td>
-				         <td><%= link_to_site site %></td>
-				         <td><%= site.pages.count %></td>
-				         <td><%= link_to_user site.user %></td>
-				         <td><%= site.created_on.strftime("%I:%M %p %d-%b-%y") %></td>         
-				     </tr>
-				   <% end %>
-				</table>
-            </td>
-        </tr>
-    </table>
-</div>
diff --git a/source/app/views/sites/new.rhtml b/source/app/views/sites/new.rhtml
deleted file mode 100644
index 2c40e9f..0000000
--- a/source/app/views/sites/new.rhtml
+++ /dev/null
@@ -1,50 +0,0 @@
-<% @heading = 'New Baseline Process' %>
-<% @overview = "Use this form to create a new Baseline Process or to first upload content to create a Baseline Process." %>
-<% @table_heading = 'New Baseline Process' %>
-
-<%= error_messages_for 'site' %>
-
-<p><div id="create_from_folder">
-<div id="epfc_tabs">
-	<ol id="epfc_tabs_toc">
-			<li class="current"><a><span>Create From Server Folder</span></a>
-			</li>
-			<li><%= link_to_function("<span>Create From Upload (Zip File)</span>") do |page| 
-				page.hide "create_from_folder"
-				page.show "create_from_file"
-			end %>
-			</li>
-	</ol>
-</div>
-
-    <% tabular_form_for :site do |f| %>
-        <tr><th>Server Folder</th><td><%= f.select :folder, @folders.collect {|folder| [folder,folder]} %></td></tr> 
-        <%= f.text_field :title %>    
-        <%= f.text_area :description, :cols => 60, :rows => 8 %>
-        <tr><th></th><td><%= submit_tag 'Submit' %></td></tr> 
-    <% end %>
-</div>
-</p>
-
-
-<p><div id="create_from_file" style="display:none;">
-<div id="epfc_tabs">
-	<ol id="epfc_tabs_toc">
-			<li >
-			<%= link_to_function("<span>Create From Server Folder</span>") do |page| 
-				page.hide "create_from_file"
-				page.show "create_from_folder"
-			end %>
-			</li>
-			<li class="current"><a><span>Create From Upload(Zip file)</span></a>
-			</li>
-	</ol>
-</div>
-
-    <% tabular_form_for :site, @site, :html => {:multipart=> true} do |f| %>
-	    <%= f.file_field :file, :size => 120 %>		
-        <%= f.text_field :title %>    
-        <%= f.text_area :description, :cols => 60, :rows => 8 %>
-        <tr><th></th><td><%= submit_tag 'Submit' %></td></tr> 
-    <% end %>
-</div></p>
\ No newline at end of file
diff --git a/source/app/views/sites/new_wiki.rhtml b/source/app/views/sites/new_wiki.rhtml
deleted file mode 100644
index 4e79260..0000000
--- a/source/app/views/sites/new_wiki.rhtml
+++ /dev/null
@@ -1,15 +0,0 @@
-<% @heading = 'New Wiki' %>
-<% @overview =  'Use this form to create a new Wiki'  %>
-
-<%= error_messages_for 'wiki' %>
-
-<% tabular_form_for :wiki do |f| %>
-    <%= f.text_field :title %>
-    <%= f.text_field :folder %>
-    <%= f.text_area :description, :cols => 60, :rows => 8  %>    
-    <tr><th></th><td><%= submit_tag 'Submit' %></td></tr>    
-<% end %>
-
-
-
-
diff --git a/source/app/views/uploads/_form.rhtml b/source/app/views/uploads/_form.rhtml
deleted file mode 100644
index dab498c..0000000
--- a/source/app/views/uploads/_form.rhtml
+++ /dev/null
@@ -1,11 +0,0 @@
-<%= error_messages_for 'upload' %>
-
-<!--[form:upload]-->
-<% tabular_form_for :upload, @upload, :url =>{:controller => 'uploads', :action => action, :id => @upload}, :html => {:multipart=> true} do |f| %>
-<tr><th>Type</th><td><%= f.select :upload_type, ['Image', 'Document'] %></td></tr> 
-        <%= f.file_field :file if params[:action] == 'new' || params[:action] == 'home' %>
-        <%= f.text_area :description, :cols => 30, :rows => 3 %>
-        <tr><th></th><td><%= submit_tag 'Submit' %></td></tr> 
-<% end %>
-<!--[eoform:upload]-->
-
diff --git a/source/app/views/uploads/_list.rhtml b/source/app/views/uploads/_list.rhtml
deleted file mode 100644
index 17cdda3..0000000
--- a/source/app/views/uploads/_list.rhtml
+++ /dev/null
@@ -1,58 +0,0 @@
-   <div class="sectionHeading">Uploads</div>
-   <div class="sectionContent">
-      <table cellpadding="0" cellspacing="0" border="0" class="sectionTable">
-         <tr>
-            <td class="sectionTableCell">
-            <table width="100%">
-               <tr>
-                  <th>ID</th>
-                  <th>Filename</th>    
-                  <th>Type</th>                      
-                  <th>Content_type</th>    
-                  <th width="20%">Description</th>
-                  <th>Comment</th>
-                  <th>Review<br>Complete<br>(Harvested)</th>					  
-                  <th>Reviewer</th>
-				  <th width="20%">Review Note</th>
-				  <th>Review Note<br>Send On</th>				  
-                  <th>Action</th>				  
-              </tr>
-               <% for upload in @uploads%>
-			   <% upload.review_note = 'Click to add...' if upload.review_note.blank? %>
-                 <tr>
-                    <td><%= upload.id %></td>
-                    <td><%= link_to upload.filename, upload.url %></td>
-                    <td><%= upload.upload_type %></td>
-                    <td><%= upload.content_type %></td>
-                     <td><%= truncate(strip_tags(upload.description))%></td>
-                     <td>Created <%= time_ago_in_words(upload.created_on) %> ago by <%= link_to_user upload.user %></td> 
-					 <td><%= link_to_done_toggle(upload) %></td>
-                     <td><%= link_to_reviewer upload %></td>
-					 <td>
-				 		<% if admin? %>
-					 	<%= editable_content(:content => {:element => 'span',
-        						:text => upload.review_note,
-        						:options => {:id => "review_note_#{upload.id}",
-          									:class => 'editable-content'}},
-      										:url => { :controller => 'review',
-        										:action => 'note',
-        										:id => upload.id,
-												:class_name => Upload.name
-   											},
-      							:ajax => {:okText => "'Ok'",:cancelText => "'Cancel'" }) %>
-						<% else %>
-							<%= upload.review_note %>
-						<% end %>
-					</td>
-					<td><%= upload.review_note_send_on.localtime.strftime(TIME_FORMAT) unless upload.review_note_send_on.nil? %></td>
-                     <td>
-                        [<%= link_to 'Edit', :action => 'edit', :id => upload %>] 
-                        [<%= link_to 'Destroy', { :action => 'destroy', :id => upload }, :confirm => 'Are you sure?', :method => 'post' %>]
-                    </td>
-                </tr>
-               <% end %>
-            </table>
-            </td>
-         </tr>
-      </table>
-   </div>
diff --git a/source/app/views/uploads/edit.rhtml b/source/app/views/uploads/edit.rhtml
deleted file mode 100644
index c79b09a..0000000
--- a/source/app/views/uploads/edit.rhtml
+++ /dev/null
@@ -1,9 +0,0 @@
-<% @heading = 'Edit Upload' %>
-<% @overview = '' %>
-<% tinymce %>
-
-<div id="menu">
-    <%= link_to 'List', :action => 'list' %> 
-</div>
-
-<%= render :partial => 'form' , :locals => {:action => 'update'} %>
diff --git a/source/app/views/uploads/list.rhtml b/source/app/views/uploads/list.rhtml
deleted file mode 100644
index 02902b2..0000000
--- a/source/app/views/uploads/list.rhtml
+++ /dev/null
@@ -1,15 +0,0 @@
-<% @heading = 'Uploads' %>
-<% @overview = '' %>
-<% tinymce %>
-
-<div id="menu">
-    <%= link_to 'New Upload', :action => 'new' %> 
-</div>
-
-<%= links_to_pages @upload_pages %>
-
-<%= render :partial => 'list' %>
-
-
-
-
diff --git a/source/app/views/uploads/new.rhtml b/source/app/views/uploads/new.rhtml
deleted file mode 100644
index 6480745..0000000
--- a/source/app/views/uploads/new.rhtml
+++ /dev/null
@@ -1,9 +0,0 @@
-<% @heading = 'New Upload' %>
-<% @overview = 'Upload an image or document' %>
-
-<div id="menu">
-    <%= link_to 'List', :action => 'list' %> 
-</div>
-
-<%= render :partial => 'form' , :locals => {:action => 'new'} %>
-
diff --git a/source/app/views/users/_list.rhtml b/source/app/views/users/_list.rhtml
deleted file mode 100644
index 47b6bf7..0000000
--- a/source/app/views/users/_list.rhtml
+++ /dev/null
@@ -1,50 +0,0 @@
-<div class="sectionContent">
-    <table cellpadding="0" cellspacing="0" border="0" class="sectionTable">
-        <tr>
-            <td class="sectionTableCell">
-                <table width="100%">
-                     <tr>
-                        <th>ID</th>    
-                        <th>Name</th> 
-                        <th>Email</th>    
-                        <th>IP Address</th>
-						<th>Notifications<br><small>(Daily, Weekly,<br>Monthly,Immediate)</small></th>
-                        <th>Logon</th>
-                        <th>Created On</th>    
-                        <th>Last Logon On</th>    
-                        <th>Actions</th>
-                    </tr>
-                    <% for user in list %>
-                    <tr>
-                        <td><%= user.id %></td>
-                        <td><%= link_to_user user %></td>
-                        <td><%= user.email %></td>
-                        <td><%= user.ip_address %></td>
-						<td><%= [user.notify_daily, user.notify_weekly, user.notify_monthly, user.notify_immediate].join(', ') %></td>
-                        <td><%= user.logon_count.to_s %></td>
-                        <td><%= user.created_on.strftime("%I:%M %p %d-%b-%y") %></td>         
-                        <td><%= user.last_logon.strftime("%I:%M %p %d-%b-%y") if user.last_logon %></td>         
-                        <td>
-                    		<% if cadmin? %>
-								<% if user.admin? && !user.cadmin? %>
-									<%= link_to(image_tag("up.png", :border => 0, :align=>"middle", :title=>'Make this user the central administrator'), {:controller => 'users', :action => 'cadmin', :id => user.id}, :confirm => 'Are you sure? There can only be one!', :method => 'post' )%>
-									<%= link_to(image_tag("down.png", :border => 0, :align=>"middle", :title=>'Revoke administrator privileges'), {:controller => 'users', :action => 'admin', :id => user.id, :admin => 'N'}, :method => 'post' ) %>
-								<% elsif user.cadmin? %>
-								<% else %>
-									<%= link_to(image_tag("up.png" , :border => 0, :align=>"middle", :title=>'Grant administrator privileges'), {:controller => 'users', :action => 'admin', :id => user.id, :admin => 'Y'}, :method => 'post' ) %>									
-								<% end %>
-								<% if !user.cadmin? %>								
-									<%= link_to(image_tag("delete.png", :border => 0, :align=>"middle", :title=>'Delete this User'), {:controller => 'users', :action => 'destroy', :id => user.id}, :method => 'post', :confirm => 'Not properly implemented yet! Leads to corruption if user has versions, comments. This user has ' + user.versions.count.to_s + " versions and " + Comment.count(:conditions => ['user_id=?',user.id]).to_s + " comments!")%>
-								<% end %>
-							<% end %>
-							<% if admin? %>
-								[<%= link_to 'Edit Account', :action => 'account', :id => user.id %>]
-							<% end %>
-						</td>
-                    </tr>              
-                    <% end %>
-                </table>
-            </td>
-        </tr>
-    </table>
-</div>
\ No newline at end of file
diff --git a/source/app/views/users/account.rhtml b/source/app/views/users/account.rhtml
deleted file mode 100644
index 3e8bac4..0000000
--- a/source/app/views/users/account.rhtml
+++ /dev/null
@@ -1,91 +0,0 @@
-<% @heading = "Account: #{@user.name}" %>
-
-
-<% if mine?(@user) || cadmin? %>
-<div id="menu">
-    <%= link_to('Edit', :action => 'edit', :id => @user.id) %>
-	<% if session['user'] == @user.id %>
-    | <%= link_to 'Change Password', :controller => 'login', :action => 'change_password' %>
-	<% end %>
-	| <%= link_to 'My Public Page', :action => 'show', :id => @user.id %>
-</div>
-<% end %>
-
-<div class="sectionHeading">Relationships</div>
-<div class="sectionContent">
-    <table cellpadding="0" cellspacing="0" border="0" class="sectionTable">
-        <tr valign="top">
-            <th scope="row" class="sectionTableHeading">Notifications</th>
-            <td class="sectionTableCell" colspan="2">
-                <ul><% for notification in @user.notifications %>
-				<% p = Page.find(notification.page_id)%>
-                <li><%= link_to_notification_toggle(p, Page.name, @user) %> for <%= link_to_page p %> in Wiki <%= link_to_site p.site %></li>
-                <% end %></ul>
-            </td>
-        </tr>
-		<% if admin? %>  
-        <tr valign="top">
-            <th scope="row" class="sectionTableHeading">Admin Messages</th>
-            <td class="sectionTableCell" colspan="2">
-                <ul><% for m in AdminMessage.find(:all) %>
-                    <li><%= m.guid %> [<%= link_to 'Edit', :controller => 'users', :action => 'adminmessage', :id => m.id %>]</li>
-                <% end %></ul>
-            </td>
-        </tr>
-		<% end %>  
-    </table>
-</div>
-
-<div class="sectionHeading">Properties</div>
-<div class="sectionContent">
-    <table cellpadding="0" cellspacing="0" border="0" class="sectionTable">
-        <tr valign="top">
-            <th scope="row" class="sectionTableHeading">ID</th>
-            <td align="left" class="sectionTableCell"><%= @user.id.to_s %></td>
-        </tr>
-        <tr valign="top">
-                <th scope="row" class="sectionTableHeading">Name</th>
-                <td align="left" class="sectionTableCell"><%= @user.name %></td>
-        </tr>
-        <tr valign="top">
-                <th scope="row" class="sectionTableHeading">Admin</th>
-                <td align="left" class="sectionTableCell"><%= @user.admin %></td>
-        </tr>
-        <tr valign="top">
-                <th scope="row" class="sectionTableHeading">Email</th>
-                <td align="left" class="sectionTableCell"><%= @user.email %></td>
-        </tr>    
-        <tr valign="top">
-            <th scope="row" class="sectionTableHeading">Change Report</th>
-            <td align="left" class="sectionTableCell">
-            <p>Receive a change report via email:</p>
-            <%= link_to_change_report_notification_toggle('D', @user) %> <%= link_to_change_report_notification_toggle('W', @user) %> <%= link_to_change_report_notification_toggle('M', @user) %> <%= link_to_change_report_notification_toggle('I', @user) %>
-            <p>Send me a change report now:</p>
-            <%= link_to(image_tag('report.gif', :border => 0, :title => 'Send now to me via email!') + " Changes of the last day", {:action => 'send_report', :type => 'D'}, :method => 'post') if mine?(@user) %>
-            <%= link_to(image_tag('report.gif', :border => 0, :title => 'Send now to me via email!') + " Changes of the last week", { :action => 'send_report', :type => 'W'}, :method => 'post') if mine?(@user) %>
-            <%= link_to(image_tag('report.gif', :border => 0, :title => 'Send now to me via email!') + " Changes of the last month", {:action => 'send_report', :type => 'M'}, :method => 'post') if mine?(@user) %>
-            </td>
-        </tr>     
-        <tr valign="top">
-                <th scope="row" class="sectionTableHeading">IP Address</th>
-                <td align="left" class="sectionTableCell"><%= @user.ip_address %></td>
-        </tr>
-        <tr valign="top">
-            <th scope="row" class="sectionTableHeading">Logon Count</th>
-            <td align="left" class="sectionTableCell"><%= @user.logon_count.to_s %></td>
-        </tr>
-        <tr valign="top">
-            <th scope="row" class="sectionTableHeading">Created On</th>
-            <td align="left" class="sectionTableCell"><%= @user.created_on.strftime("%I:%M %p %d-%b-%y") %></td>
-        </tr>
-        <tr valign="top">
-            <th scope="row" class="sectionTableHeading">Last Logon On</th>
-            <td align="left" class="sectionTableCell"><%= @user.last_logon.strftime("%I:%M %p %d-%b-%y") if @user.last_logon %></td>
-        </tr>    
-    </table>
-</div>
-
-
-
-
-
diff --git a/source/app/views/users/adminmessage.rhtml b/source/app/views/users/adminmessage.rhtml
deleted file mode 100644
index cb20f61..0000000
--- a/source/app/views/users/adminmessage.rhtml
+++ /dev/null
@@ -1,12 +0,0 @@
-<% @heading = 'Admin Messages' %>
-<% @overview = 'Use this form to update a standard message text. Depending on caching settings the changes applied here might not be immediately visible' %>
-<% tinymce 'advanced' %>
-
-<%= error_messages_for 'admin_message' %>
-
-<% tabular_form_for :admin_message, @admin_message do |f| %>
-	<%= f.text_field  'id', :value => @admin_message.id  %>
-	<%= f.text_field  'guid', :value => @admin_message.guid  %>
-    <%= f.text_area :text, :cols => 60, :rows => 8  %>    
-    <tr><th></th><td><%= submit_tag 'Submit' %></td></tr>    
-<% end %>
\ No newline at end of file
diff --git a/source/app/views/users/edit.rhtml b/source/app/views/users/edit.rhtml
deleted file mode 100644
index 0fdc9f0..0000000
--- a/source/app/views/users/edit.rhtml
+++ /dev/null
@@ -1,16 +0,0 @@
-<% @heading = 'Edit User Details' %>
-<% @overview = "Use the form below to edit details of user #{link_to_user(@user)}. The page field is part of your public page. " %>
-
-<% tinymce 'advanced' %>
-
-<%= error_messages_for 'user' %>
-
-<% tabular_form_for :user do |f| %>
-    <%= f.text_field :name, :size => 30 %>
-	<%= f.text_area :page, :cols => 80, :rows => 10 %>
-    <tr>
-        <th align="right">Notifications</th>
-            <td><%= check_box("user", "notify_daily") %> Daily <%= check_box("user", "notify_weekly") %> Weekly <%= check_box("user", "notify_monthly") %> Monthly</td> <%= check_box("user", "notify_immediate") %> immediate</td>
-    </tr>        
-    <tr><th></th><td><%= submit_tag "Submit" %></td></tr>    
-<% end %>
\ No newline at end of file
diff --git a/source/app/views/users/list.rhtml b/source/app/views/users/list.rhtml
deleted file mode 100644
index 7bd67bc..0000000
--- a/source/app/views/users/list.rhtml
+++ /dev/null
@@ -1,11 +0,0 @@
-<% @heading = 'Users' %>
-
-<div class="sectionHeading">Central Administrator</div>
-<%= render_partial 'list', [@cadmin] %>
-
-
-<div class="sectionHeading">Administrators</div>
-<%= render_partial 'list', @admins %>
-
-<div class="sectionHeading">Users</div>
-<%= render_partial 'list', @users %>
\ No newline at end of file
diff --git a/source/app/views/users/show.rhtml b/source/app/views/users/show.rhtml
deleted file mode 100644
index 41890ba..0000000
--- a/source/app/views/users/show.rhtml
+++ /dev/null
@@ -1,112 +0,0 @@
-<% @heading = "User: #{@user.name}" %>
-<% @overview = "User details of user #{@user.name}" %>
-
-<div id="discussion" style="display:none;">
-	<%= render :partial => 'portal/tabmenu', :locals => {:items => @tabitems, :current => 'discussion', :div_id => 'epfc_tabs', :ol_id => 'epfc_tabs_toc' }%>
-	<p><%= render(:partial => 'comments/comments_list') %></p>
-</div>
-
-<div id="changes"  style="display:none;">
-	<%= render :partial => 'portal/tabmenu', :locals => {:items => @tabitems, :current => 'changes', :div_id => 'epfc_tabs', :ol_id => 'epfc_tabs_toc' }%>
-	<p><%= render(:partial => 'versions/versions_list') %></p>
-</div>
-
-<div id="uploads"  style="display:none;">
-	<%= render :partial => 'portal/tabmenu', :locals => {:items => @tabitems, :current => 'uploads', :div_id => 'epfc_tabs', :ol_id => 'epfc_tabs_toc' }%>
-	<p><%= render(:partial => 'uploads/list') %></p>
-</div>
-
-<div id="new_pages"  style="display:none;">
-	<%= render :partial => 'portal/tabmenu', :locals => {:items => @tabitems, :current => 'new_pages', :div_id => 'epfc_tabs', :ol_id => 'epfc_tabs_toc' }%>
-	<p><%= render(:partial => 'pages/list') %></p>
-</div>
-
-<div id="general">
-	<%= render :partial => 'portal/tabmenu', :locals => {:items => @tabitems, :current => 'general', :div_id => 'epfc_tabs', :ol_id => 'epfc_tabs_toc' }%>
-	<% unless @user.page.blank? %>
-	<div class="sectionHeading"></div>	
-	<div class="sectionContent">
-	    <table class="sectionTable" border="0" cellpadding="0" cellspacing="0">
-	        <tbody><tr>
-	            <td class="sectionTableCell">
-	        		<%= @user.page %>
-	            </td>
-	        </tr>
-	    </tbody></table>
-	</div>
-	<% end %>
-	<div class="sectionHeading">Relationships</div>
-	<div class="sectionContent">
-	    <table cellpadding="0" cellspacing="0" border="0" class="sectionTable">
-	        <tr valign="top">
-	            <th scope="row" class="sectionTableHeading">Sites</th>
-	            <td class="sectionTableCell" colspan="2">The user contributed in the following Wikis:
-	                <ul><% for site in @user.sites %>
-	                    <li><%= link_to_site site %></li>
-	                <% end %></ul>
-	            </td>
-	        </tr>                
-	        <tr valign="top">
-	            <th scope="row" class="sectionTableHeading">Notifications</th>
-	            <td class="sectionTableCell" colspan="2">
-	                <ul><% for notification in @user.notifications %>
-					<% p = Page.find(notification.page_id)%>
-	                	<li><input type="checkbox" 'checked' DISABLED> for <%= link_to_page p %> in Wiki <%= link_to_site p.site %></li>
-	                <% end %></ul>
-	            </td>
-	        </tr>
-	    </table>
-	</div>
-	
-	<div class="sectionHeading">Properties</div>
-	<div class="sectionContent">
-	    <table cellpadding="0" cellspacing="0" border="0" class="sectionTable">
-	        <tr valign="top">
-	            <th scope="row" class="sectionTableHeading">ID</th>
-	            <td align="left" class="sectionTableCell"><%= @user.id.to_s %></td>
-	        </tr>
-	        <tr valign="top">
-	                <th scope="row" class="sectionTableHeading">Name</th>
-	                <td align="left" class="sectionTableCell"><%= @user.name %></td>
-	        </tr>
-	        <tr valign="top">
-	                <th scope="row" class="sectionTableHeading">Admin</th>
-	                <td align="left" class="sectionTableCell"><%= @user.admin %></td>
-	        </tr>
-	        <tr valign="top">
-	                <th scope="row" class="sectionTableHeading">Email</th>
-	                <td align="left" class="sectionTableCell">
-	                	[<%= mail_to @user.email, "Send Email", :encode => "hex" %>]
-					</td>
-	        </tr>    
-	        <tr valign="top">
-	            <th scope="row" class="sectionTableHeading">Change Report</th>
-	            <td align="left" class="sectionTableCell">
-	            <p>Receive a change report via email:</p>
-				<p>
-					<input type="checkbox" <%= 'checked' if @user.notify_daily == 1 %> DISABLED> Daily
-					<input type="checkbox" <%= 'checked' if @user.notify_weekly == 1 %> DISABLED> Weekly
-					<input type="checkbox" <%= 'checked' if @user.notify_monthly == 1 %> DISABLED> Monthly
-					<input type="checkbox" <%= 'checked' if @user.notify_immediate == 1 %> DISABLED> Immediate
-				</p>
-	            </td>
-	        </tr>     
-	        <tr valign="top">
-	            <th scope="row" class="sectionTableHeading">Contributed</th>
-	            <td align="left" class="sectionTableCell"><%= @comments.size.to_s %> Comments, <%= @versions.size.to_s %> Changes, <%= @uploads.size.to_s %> Uploads, <%= @pages.size.to_s %> New Pages </td>
-	        </tr>
-	        <tr valign="top">
-	            <th scope="row" class="sectionTableHeading">Logon Count</th>
-	            <td align="left" class="sectionTableCell"><%= @user.logon_count.to_s %></td>
-	        </tr>
-	        <tr valign="top">
-	            <th scope="row" class="sectionTableHeading">Created On</th>
-	            <td align="left" class="sectionTableCell"><%= @user.created_on.strftime("%I:%M %p %d-%b-%y") %></td>
-	        </tr>
-	        <tr valign="top">
-	            <th scope="row" class="sectionTableHeading">Last Logon On</th>
-	            <td align="left" class="sectionTableCell"><%= @user.last_logon.strftime("%I:%M %p %d-%b-%y") if @user.last_logon %></td>
-	        </tr>    
-	    </table>
-	</div>
-</div>
\ No newline at end of file
diff --git a/source/app/views/versions/_versions_list.rhtml b/source/app/views/versions/_versions_list.rhtml
deleted file mode 100644
index 045e042..0000000
--- a/source/app/views/versions/_versions_list.rhtml
+++ /dev/null
@@ -1,85 +0,0 @@
-   <div class="sectionHeading">Versions</div>
-   <div class="sectionContent">
-      <% if @versions %>  
-      <table cellpadding="0" cellspacing="0" border="0" class="sectionTable">
-         <tr>
-            <td class="sectionTableCell">
-            <table width="100%">
-               <tr>
-                  <th>ID</th> 
-				  <% if @page.nil? %>
-				  	<th>Page</th>
-				  <% end %>
-                  <th>Version</th>
-				  <th>Note</th> 
-                  <th>Created</th>
-                  <th>Created By</th>
-                  <th>Review<br>Complete<br>(Harvested)</th>				  
-                  <th>Reviewer</th>
-				  <th>Review Note</th>
-				  <th>Review Note<br>Send On</th>
-                  <% if @site.nil? && @wiki.nil? %><th>Site</th><% end %>
-              </tr>
-               <% for version in @versions %>
-			   <% version.review_note = '_______' if version.review_note.blank? %>
-			   <% version.note = '_______' if version.note.blank? %>
-                 <tr>
-                    <td><%= version.id %></td>
-					<% if @page.nil? %>
-                    	<td><%= link_to_page(version.page) %></td>
-					<% end %>
-                     <td><%= link_to_version(version, 'Version') %></td>
-					 <td>
-						<% if admin? %>
-					 	<%= editable_content(:content => {:element => 'span',
-        						:text => version.note,
-        						:options => {:id => "note_#{version.id}",
-          									:class => 'editable-content'}},
-      										:url => { :controller => 'versions',
-        										:action => 'note',
-        										:id => version.id,
-												:class_name => version.class.name
-   											},
-      							:ajax => {:okText => "'Ok'",:cancelText => "'Cancel'" }) %>
-					 	<% else %>
-							<%= version.note %>
-					 	<% end %>
-					 </td>
-                     <td><%= version.created_on.localtime.strftime(TIME_FORMAT) %></td> 
-					 <td>
-					 	<% if version.user_version? %>        
-                     		<%= link_to_user version.user %>
-					 	<% else %>
-					 		<%= link_to_site version.baseline_process %>
-					 	<% end %>
-					 </td>
-						<td><%= link_to_done_toggle(version) %></td>
-                     <td><%= link_to_reviewer version %></td>
-					 <td>
-				 		<% if admin? %>
-					 	<%= editable_content(:content => {:element => 'span',
-        						:text => version.review_note,
-        						:options => {:id => "review_note_#{version.id}",
-          									:class => 'editable-content'}},
-      										:url => { :controller => 'review',
-        										:action => 'note',
-        										:id => version.id,
-												:class_name => 'Version'
-   											},
-      							:ajax => {:okText => "'Ok'",:cancelText => "'Cancel'" }) %>
-						<% else %>
-							<%= version.review_note %>
-						<% end %>
-					</td>
-					<td><%= version.review_note_send_on.localtime.strftime(TIME_FORMAT) unless version.review_note_send_on.nil? %></td>
-                     <% if @site.nil? && @wiki.nil? %><td><%= link_to_site version.wiki %></td><% end %>
-                 </tr>
-               <% end %>
-            </table>
-            <% else %>
-               No versions found!
-            <% end %>
-            </td>
-         </tr>
-      </table>
-   </div>
\ No newline at end of file
diff --git a/source/app/views/versions/diff.rhtml b/source/app/views/versions/diff.rhtml
deleted file mode 100644
index 80d82d8..0000000
--- a/source/app/views/versions/diff.rhtml
+++ /dev/null
@@ -1,48 +0,0 @@
-<% @heading = 'Compare Versions' %>
-<% @overview =  "This page shows changes between versions of #{link_to_page(@version.page)} in #{link_to_site(@wiki)}" %>
-
-
-<% tabular_form_for :version, nil, :html => {:method => 'get'} do |f| %>
-    <tr><th>Source Version</th><td><%= f.select :version_id, @versions.collect { |v| [ v.version_text, v.id ] } %></td></tr>
-    <tr><th>Target Version</th><td><%= f.select :id, @versions.collect { |v| [ v.version_text, v.id ] } %></td></tr>
-    <tr><th></th><td><input type="submit" value="Compare"></td></tr>
-<% end %>
-
-   <div class="sectionHeading">Differences Analysis</div>
-    <div class="sectionContent">
-      <table cellpadding="0" cellspacing="0" border="0"
-      class="sectionTable">
-        <tr valign="top">
-          <th scope="row" class="sectionTableHeading">
-            Old Version
-          </th>
-          <td class="sectionTableCell">
-           <%= link_to_version2 @version.source_version %> 
-          </td>
-        </tr>              
-        <tr valign="top">
-          <th scope="row" class="sectionTableHeading">
-            New Version
-          </th>
-          <td class="sectionTableCell">
-            <%= link_to_version2 @version %> 
-          </td>
-        </tr>
-        <tr valign="top">
-          <th scope="row" class="sectionTableHeading">
-            Differences
-          </th>
-          <td class="sectionTableCell">
-            <p><a href="<%= @version.relpath_to_diff(@version.source_version) %>" target="_blank">Open in a new window</a></p>
-            <iframe 
-            height = "600"
-            src ="<%= @version.relpath_to_diff(@version.source_version) %>"
-            width="100%">
-            </iframe>
-          </td>
-        </tr>
-      </table>
-   </div>
-   
-<%= render :partial => 'pages/relationships'%>
-
diff --git a/source/app/views/versions/show.rhtml b/source/app/views/versions/show.rhtml
deleted file mode 100644
index b40a653..0000000
--- a/source/app/views/versions/show.rhtml
+++ /dev/null
@@ -1,123 +0,0 @@
-<% params[:action] = @version.class.name.gsub('UserVersion', 'User Version').gsub('BaselineProcessVersion', 'Baseline Process Version') + " V#{@version.version}" %>
-<% @overview = "This page show the details of version #{link_to_version(@version, 'version')} of page #{link_to_page(@version.page)}" %>
-
-<%= error_messages_for 'version' %>
-
-<div class="sectionHeading">Description</div>
-<div class="sectionContent">
-<table cellpadding="0" cellspacing="0" border="0" class="sectionTable">
-<tr valign="top">
-    <td class="sectionTableCell"> 
-        <%= @version.note %>
-    </td>
-</tr>
-</table>
-</div>
-
-<div class="sectionHeading">Relationships</div>
-<div class="sectionContent">
-<table cellpadding="0" cellspacing="0" border="0" class="sectionTable">
-    <tr valign="top">
-        <th scope="row" class="sectionTableHeading">Last Version</th>
-        <td align="left" class="sectionTableCell">
-            <%= link_to_version @last_version, 'version' if @last_version %>
-        </td>
-    </tr>
-    <tr valign="top">
-        <th scope="row" class="sectionTableHeading">Current Version</th>
-        <td align="left" class="sectionTableCell">
-            <%= link_to_version @current_version, 'version' if @current_version %>
-        </td>
-    </tr>
-    <tr valign="top">
-        <th scope="row" class="sectionTableHeading">Source Version</th>
-        <td align="left" class="sectionTableCell">
-            <%= link_to_version @source_version, 'version' if @source_version %>
-        </td>
-    </tr>    
-    <tr valign="top">
-        <th scope="row" class="sectionTableHeading">Previous Version</th>
-        <td align="left" class="sectionTableCell">
-            <%= link_to_version @previous_version, 'version' if @previous_version %>
-        </td>
-    </tr>    
-    <tr valign="top">
-            <th scope="row" class="sectionTableHeading">Page</th>
-            <td align="left" class="sectionTableCell"><%= link_to_page @page %></td>
-    </tr>
-    <tr valign="top">
-            <th scope="row" class="sectionTableHeading">Created By</th>
-            <td align="left" class="sectionTableCell">
-			 	<% if @version.user_version? %>        
-             		<%= link_to_user @version.user %>
-			 	<% else %>
-			 		<%= link_to_site @version.baseline_process %>
-			 	<% end %>
-            </td>
-    </tr>
-    <tr valign="top">
-            <th scope="row" class="sectionTableHeading">Reviewer</th>
-            <td align="left" class="sectionTableCell">
-            <%= link_to_user(@version.reviewer) if @version.reviewer %>
-            </td>
-    </tr>
-    <tr valign="top">
-        <th scope="row" class="sectionTableHeading">Wiki</th>
-        <td align="left" class="sectionTableCell"><%= link_to_site @version.wiki %> </td>
-    </tr>
-</table>
-</div>
-
-<div class="sectionHeading">Properties</div>
-<div class="sectionContent">
-<table cellpadding="0" cellspacing="0" border="0" class="sectionTable">
-    <tr valign="top">
-        <th scope="row" class="sectionTableHeading">ID</th>
-        <td align="left" class="sectionTableCell"><%= @version.id.to_s %></td>
-    </tr>
-     <tr valign="top">
-
-             <th scope="row" class="sectionTableHeading">Version</th>
-             <td align="left" class="sectionTableCell"><%= @version.version %></td>
-    </tr>
- <tr valign="top">
-            <th scope="row" class="sectionTableHeading">Path</th>
-            <td align="left" class="sectionTableCell"><%= @version.path %></td>
-    </tr>
-    <tr valign="top">
-            <th scope="row" class="sectionTableHeading">URL</th>
-            <td align="left" class="sectionTableCell"><%= link_to "http://#{request.host + (request.port == 80 ? '' : ':' + request.port.to_s)}/#{@version.rel_path_root}", "/#{@version.rel_path_root}" %></td>
-    </tr>
-    <tr valign="top">
-        <th scope="row" class="sectionTableHeading">Created On</th>
-        <td align="left" class="sectionTableCell"><%= @version.created_on.strftime(TIME_FORMAT) %></td>
-    </tr>
-    <tr valign="top">
-        <th scope="row" class="sectionTableHeading">Updated On</th>
-        <td align="left" class="sectionTableCell"><%= @version.updated_on.strftime(TIME_FORMAT) %></td>
-    </tr>
-</table>
-</div>
-
-<% if @checkout %>
-<div class="sectionHeading">Checkout Properties</div>
-<div class="sectionContent">
-<table cellpadding="0" cellspacing="0" border="0" class="sectionTable">
-    <tr valign="top">
-        <th scope="row" class="sectionTableHeading">ID</th>
-        <td align="left" class="sectionTableCell"><%= @checkout.id.to_s %></td>
-    </tr>
-    <tr valign="top">
-        <th scope="row" class="sectionTableHeading">Created On</th>
-        <td align="left" class="sectionTableCell"><%= @checkout.created_on.strftime(TIME_FORMAT) %></td>
-    </tr>
-</table>
-</div>
-<% end %>
-
-
-
-
-
-
-
diff --git a/source/config/boot.rb b/source/config/boot.rb
deleted file mode 100644
index 1e2a641..0000000
--- a/source/config/boot.rb
+++ /dev/null
@@ -1,45 +0,0 @@
-# Don't change this file. Configuration is done in config/environment.rb and config/environments/*.rb
-
-unless defined?(RAILS_ROOT)
-  root_path = File.join(File.dirname(__FILE__), '..')
-
-  unless RUBY_PLATFORM =~ /mswin32/
-    require 'pathname'
-    root_path = Pathname.new(root_path).cleanpath(true).to_s
-  end
-
-  RAILS_ROOT = root_path
-end
-
-unless defined?(Rails::Initializer)
-  if File.directory?("#{RAILS_ROOT}/vendor/rails")
-    require "#{RAILS_ROOT}/vendor/rails/railties/lib/initializer"
-  else
-    require 'rubygems'
-
-    environment_without_comments = IO.readlines(File.dirname(__FILE__) + '/environment.rb').reject { |l| l =~ /^#/ }.join
-    environment_without_comments =~ /[^#]RAILS_GEM_VERSION = '([\d.]+)'/
-    rails_gem_version = $1
-
-    if version = defined?(RAILS_GEM_VERSION) ? RAILS_GEM_VERSION : rails_gem_version
-      # Asking for 1.1.6 will give you 1.1.6.5206, if available -- makes it easier to use beta gems
-      rails_gem = Gem.cache.search('rails', "~>#{version}.0").sort_by { |g| g.version.version }.last
-
-      if rails_gem
-        gem "rails", "=#{rails_gem.version.version}"
-        require rails_gem.full_gem_path + '/lib/initializer'
-      else
-        STDERR.puts %(Cannot find gem for Rails ~>#{version}.0:
-    Install the missing gem with 'gem install -v=#{version} rails', or
-    change environment.rb to define RAILS_GEM_VERSION with your desired version.
-  )
-        exit 1
-      end
-    else
-      gem "rails"
-      require 'initializer'
-    end
-  end
-
-  Rails::Initializer.run(:set_load_path)
-end
\ No newline at end of file
diff --git a/source/config/database.yml b/source/config/database.yml
deleted file mode 100644
index ee9f93c..0000000
--- a/source/config/database.yml
+++ /dev/null
@@ -1,26 +0,0 @@
-development:
-  adapter: mysql
-  database: epfwiki_dev
-  host: localhost
-  username: epfwiki
-  password: ikiwpur
-  encoding: utf8
-  #socket: /opt/lampp/var/mysql/mysql.sock  
-
-test:
-  adapter: mysql
-  database: epfwiki_test
-  host: localhost
-  username: epfwiki
-  password: ikiwpur
-  encoding: utf8  
-  #socket: /opt/lampp/var/mysql/mysql.sock
-
-production:
-  adapter: mysql
-  database: epfwiki
-  host: localhost
-  username: epfwiki
-  password: ikiwpur
-  encoding: utf8  
-  #socket: /opt/lampp/var/mysql/mysql.sock
\ No newline at end of file
diff --git a/source/config/environment.rb b/source/config/environment.rb
deleted file mode 100644
index 504e615..0000000
--- a/source/config/environment.rb
+++ /dev/null
@@ -1,62 +0,0 @@
-# Be sure to restart your web server when you modify this file.
-
-# Uncomment below to force Rails into production mode when 
-# you don't control web/app server and can't set it the proper way
-ENV['RAILS_ENV'] ||= 'production'
-
-# Specifies gem version of Rails to use when vendor/rails is not present
-RAILS_GEM_VERSION = '2.0.2' unless defined? RAILS_GEM_VERSION
-
-# Bootstrap the Rails environment, frameworks, and default configuration
-require File.join(File.dirname(__FILE__), 'boot')
-
-Rails::Initializer.run do |config|
-  # Settings in config/environments/* take precedence over those specified here
-  
-  # Skip frameworks you're not going to use (only works if using vendor/rails)
-  # config.frameworks -= [ :action_web_service, :action_mailer ]
-
-  # Only load the plugins named here, by default all plugins in vendor/plugins are loaded
-  # config.plugins = %W( exception_notification ssl_requirement )
-
-  # Add additional load paths for your own custom dirs
-  # config.load_paths += %W( #{RAILS_ROOT}/extras )
-
-  # Force all environments to use the same logger level 
-  # (by default production uses :info, the others :debug)
-  # config.log_level = :debug
-
-  # Use the database for sessions instead of the file system
-  # (create the session table with 'rake db:sessions:create')
-  config.action_controller.session_store = :active_record_store
-
-  # Use SQL instead of Active Record's schema dumper when creating the test database.
-  # This is necessary if your schema can't be completely dumped by the schema dumper, 
-  # like if you have constraints or database-specific column types
-  # config.active_record.schema_format = :sql
-
-  # Activate observers that should always be running
-  # config.active_record.observers = :cacher, :garbage_collector
-
-  # Make Active Record use UTC-base instead of local time
-  # config.active_record.default_timezone = :utc
-  
-  # See Rails::Configuration for more options
-  TIME_FORMAT = "%H:%M %d %b %Y"
-end
-
-# Add new inflection rules using the following format 
-# (all these examples are active by default):
-# Inflector.inflections do |inflect|
-#   inflect.plural /^(ox)$/i, '\1en'
-#   inflect.singular /^(ox)en/i, '\1'
-#   inflect.irregular 'person', 'people'
-#   inflect.uncountable %w( fish sheep )
-# end
-
-# Add new mime types for use in respond_to blocks:
-# Mime::Type.register "text/richtext", :rtf
-# Mime::Type.register "application/x-mobile", :mobile
-
-# Include your application configuration below
-require 'generic'
diff --git a/source/config/environments/development.rb b/source/config/environments/development.rb
deleted file mode 100644
index f8565c9..0000000
--- a/source/config/environments/development.rb
+++ /dev/null
@@ -1,36 +0,0 @@
-# Reload application code on every request
-config.cache_classes     = false
-
-# Log error messages when you accidentally call methods on nil.
-config.whiny_nils        = true
-
-# Show full error reports and disable caching
-config.action_controller.consider_all_requests_local = true
-config.action_controller.perform_caching = false
-
-# Don't care if the mailer can't send
-config.action_mailer.raise_delivery_errors = false
-
-ENV['EPFWIKI_APP_NAME'] = "EPF Wiki - Development Environment"
-ENV['EPFWIKI_PUBLIC_FOLDER'] = 'public'
-ENV['EPFWIKI_EDITOR'] = 'tinymce' # TODO Bug 218832 - RTE
-ENV['EPFWIKI_ROOT_DIR'] = File.expand_path(RAILS_ROOT) + '/'
-ENV['EPFWIKI_HOST'] = "localhost:3000" # used for jobs, when there is no host variable in the environment
-ENV['EPFWIKI_SITES_FOLDER'] = 'development_sites'
-ENV['EPFWIKI_SITES_PATH'] = ENV['EPFWIKI_ROOT_DIR'] + ENV['EPFWIKI_PUBLIC_FOLDER'] + '/' + ENV['EPFWIKI_SITES_FOLDER']
-ENV['EPFWIKI_WIKIS_FOLDER'] = 'development_wikis'
-ENV['EPFWIKI_WIKIS_PATH'] = ENV['EPFWIKI_ROOT_DIR'] + ENV['EPFWIKI_PUBLIC_FOLDER'] + '/' + ENV['EPFWIKI_WIKIS_FOLDER']
-ENV['EPFWIKI_DIFFS_PATH'] = ENV['EPFWIKI_ROOT_DIR'] + ENV['EPFWIKI_PUBLIC_FOLDER'] + "/#{RAILS_ENV}_diffs/"
-#ENV['EPFWIKI_DOMAINS'] = "@epf.org @openup.org" # specify to restrict valid emails to these domains. Uncomment to allow all.
-
-ENV['EPFWIKI_REPLY_ADDRESS'] = "no-reply@epwiki.net"
-ENV['EPFWIKI_TEMPLATES_DIR'] = "#{ENV['EPFWIKI_ROOT_DIR']}#{ENV['EPFWIKI_PUBLIC_FOLDER']}/templates/"
-
-ENV['EPFWIKI_GOOGLE_CUSTOM_SEARCH'] = 'N' # Google Custom Search example for EPFWiki.net
-
- # authentication methods that can be used to authenticate users
-ENV['EPFWIKI_AUTH_METHODS'] = 'validemail'# valid values, for instance: bugzilla,basic,validemail
-ENV['EPFWIKI_AUTH_BASIC'] = 'home.global.logicacmg.com,401,logicacmg.com'  # host,fail code,domain for creating email
-ENV['EPFWIKI_AUTH_BUGZILLA'] = 'bugs.eclipse.org,443'  # host,port
-
-ActionMailer::Base.delivery_method = :sendmail
diff --git a/source/config/environments/production.rb b/source/config/environments/production.rb
deleted file mode 100644
index f9db375..0000000
--- a/source/config/environments/production.rb
+++ /dev/null
@@ -1,50 +0,0 @@
-# The production environment is meant for finished, "live" apps.
-# Code is not reloaded between requests
-config.cache_classes = true
-
-# Use a different logger for distributed setups
-# config.logger        = SyslogLogger.new
-
-# Full error reports are disabled and caching is turned on
-config.action_controller.consider_all_requests_local = false
-config.action_controller.perform_caching             = true
-
-# Enable serving of images, stylesheets, and javascripts from an asset server
-# config.action_controller.asset_host                  = "http://assets.example.com"
-
-# Disable delivery errors if you bad email addresses should just be ignored
-# config.action_mailer.raise_delivery_errors = false
-
-ENV['EPFWIKI_APP_NAME'] = 'EPF Wiki'
-ENV['EPFWIKI_PUBLIC_FOLDER'] = 'public'
-ENV['EPFWIKI_EDITOR'] = 'tinymce' # TODO Bug 218832 - RTE
-ENV['EPFWIKI_ROOT_DIR'] = File.expand_path(RAILS_ROOT) + '/'
-ENV['EPFWIKI_HOST'] = "localhost" # used for jobs, when there is no host variable in the environment
-ENV['EPFWIKI_SITES_FOLDER'] = 'bp'
-ENV['EPFWIKI_SITES_PATH'] = ENV['EPFWIKI_ROOT_DIR'] + ENV['EPFWIKI_PUBLIC_FOLDER'] + '/' + ENV['EPFWIKI_SITES_FOLDER']
-ENV['EPFWIKI_WIKIS_FOLDER'] = 'wikis' 
-ENV['EPFWIKI_WIKIS_PATH'] = ENV['EPFWIKI_ROOT_DIR'] + ENV['EPFWIKI_PUBLIC_FOLDER'] + '/' + ENV['EPFWIKI_WIKIS_FOLDER']
-ENV['EPFWIKI_DIFFS_PATH'] = ENV['EPFWIKI_ROOT_DIR'] + ENV['EPFWIKI_PUBLIC_FOLDER'] + "/#{RAILS_ENV}_diffs/"
-#ENV['EPFWIKI_DOMAINS'] = "@epfwiki.org @openup.org" # specify to restrict valid emails to these domains. Uncomment to allow all.
-
-ENV['EPFWIKI_REPLY_ADDRESS'] = "no-reply@epf.eclipse.org"
-ENV['EPFWIKI_TEMPLATES_DIR'] = "#{ENV['EPFWIKI_ROOT_DIR']}#{ENV['EPFWIKI_PUBLIC_FOLDER']}/templates/"
-
-ENV['EPFWIKI_GOOGLE_CUSTOM_SEARCH'] = 'N' # Google Custom Search example for EPFWiki.net
-
- # authentication methods that can be used to authenticate users
-ENV['EPFWIKI_AUTH_METHODS'] = 'validemail' # valid values, for instance: bugzilla,basic,validemail
-#ENV['EPFWIKI_AUTH_BASIC'] = 'home.global.logicacmg.com,401,logicacmg.com'  # host,fail code,domain for creating email
-#ENV['EPFWIKI_AUTH_BUGZILLA'] = 'bugs.eclipse.org,443'  # host,port
-
-ActionMailer::Base.delivery_method = :sendmail
-
-#ActionMailer::Base.smtp_settings = {
-#  :address  => 'mail.eclipse.org',
-#  :port  => 25 , 
-#  :domain  => 'epf.eclipse.org'#,
-  #:user_name  => ,
-  #:password  => ,
-  #:authentication  => :login
-#} 
-
diff --git a/source/config/environments/test.rb b/source/config/environments/test.rb
deleted file mode 100644
index 24e2d45..0000000
--- a/source/config/environments/test.rb
+++ /dev/null
@@ -1,55 +0,0 @@
-    # The test environment is used exclusively to run your application's
-# test suite.  You never need to work with it otherwise.  Remember that
-# your test database is "scratch space" for the test suite and is wiped
-# and recreated between test runs.  Don't rely on the data there!
-config.cache_classes = true
-
-# Log error messages when you accidentally call methods on nil.
-config.whiny_nils    = true
-
-# Show full error reports and disable caching
-config.action_controller.consider_all_requests_local = true
-config.action_controller.perform_caching             = false
-
-# Tell ActionMailer not to deliver emails to the real world.
-# The :test delivery method accumulates sent emails in the
-# ActionMailer::Base.deliveries array.
-config.action_mailer.delivery_method = :test
-
-# Overwrite the default settings for fixtures in tests. See Fixtures 
-# for more details about these settings.
-# config.transactional_fixtures = true
-# config.instantiated_fixtures = false
-# config.pre_loaded_fixtures = false
-
-ENV['EPFWIKI_APP_NAME'] = "EPF Wiki - Test Enviroment"
-ENV['EPFWIKI_PUBLIC_FOLDER'] = 'public'
-ENV['EPFWIKI_EDITOR'] = 'tinymce' # TODO Bug 218832 - RTE
-ENV['EPFWIKI_ROOT_DIR'] = File.expand_path(RAILS_ROOT) + '/'
-ENV['EPFWIKI_HOST'] = "localhost:3000" # used for jobs, when there is no host variable in the environment
-ENV['EPFWIKI_SITES_FOLDER'] = 'test_sites'
-ENV['EPFWIKI_SITES_PATH'] = ENV['EPFWIKI_ROOT_DIR'] + ENV['EPFWIKI_PUBLIC_FOLDER'] + '/' + ENV['EPFWIKI_SITES_FOLDER']
-ENV['EPFWIKI_WIKIS_FOLDER'] = 'test_wikis'
-ENV['EPFWIKI_WIKIS_PATH'] = ENV['EPFWIKI_ROOT_DIR'] + ENV['EPFWIKI_PUBLIC_FOLDER'] + '/' + ENV['EPFWIKI_WIKIS_FOLDER']
-ENV['EPFWIKI_DIFFS_PATH'] = ENV['EPFWIKI_ROOT_DIR'] + ENV['EPFWIKI_PUBLIC_FOLDER'] + "/#{RAILS_ENV}_diffs/"
-ENV['EPFWIKI_DOMAINS'] = "@epf.eclipse.org @openup.org" # specify to restrict valid emails to these domains. Uncomment to allow all.
-
-ENV['EPFWIKI_REPLY_ADDRESS'] = "no-reply@epfwiki.org"
-ENV['EPFWIKI_TEMPLATES_DIR'] = "#{ENV['EPFWIKI_ROOT_DIR']}#{ENV['EPFWIKI_PUBLIC_FOLDER']}/templates/"
-
-ENV['EPFWIKI_GOOGLE_CUSTOM_SEARCH'] = 'N' # Google Custom Search example for EPFWiki.net
-
- # authentication methods that can be used to authenticate users
-ENV['EPFWIKI_AUTH_METHODS'] = 'validemail' # valid values, for instance: bugzilla,basic,validemail
-#ENV['EPFWIKI_AUTH_BASIC'] = 'home.global.logicacmg.com,401,logicacmg.com'  # host,fail code,domain for creating email
-ENV['EPFWIKI_AUTH_BUGZILLA'] = 'bugs.eclipse.org,443'  # host,port
-
-ActionMailer::Base.smtp_settings = {
-  :address  => 'epfwiki.org',
-  :port  => 25, 
-  #:domain  => ,
-  #:user_name  => ,
-  #:password  => ,
-  #:authentication  => :login
-} 
-
diff --git a/source/config/routes.rb b/source/config/routes.rb
deleted file mode 100644
index c5c260e..0000000
--- a/source/config/routes.rb
+++ /dev/null
@@ -1,91 +0,0 @@
-#--######################################################################
-# Copyright (c) 2006 Logica
-# Copyright (c) 2008 IBM
-# 
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# 
-# Onno van der Straaten:: initial implementation
-# Ricardo Balduino:: added mappings to handle Practice feed and UMA Types feed
-#++######################################################################
-# {Copyright (c) 2006 Logica, 2008 IBM}[link:files/COPYRIGHT.html]
-
-ActionController::Routing::Routes.draw do |map|
-  # The priority is based upon order of creation: first created -> highest priority.
-  
-  # Sample of regular route:
-  # map.connect 'products/:id', :controller => 'catalog', :action => 'view'
-  # Keep in mind you can assign values other than :controller and :action
-  
-  # Sample of named route:
-  # map.purchase 'products/:id/purchase', :controller => 'catalog', :action => 'purchase'
-  # This route can be invoked with purchase_url(:id => product.id)
-  
-  # You can have the root of your site routed by hooking up '' 
-  # -- just remember to delete public/index.html.
-  # map.connect '', :controller => "welcome"
-  
-  # Allow downloading Web Service WSDL as a file with an extension
-  # instead of a file named 'wsdl'
-  map.connect ':controller/service.wsdl', :action => 'wsdl'
-  
-  # Install the default route as the lowest priority.
-  map.connect 'archives/:year/:month' ,
-  :controller => 'portal' ,
-  :action => 'archives' ,
-#  :year => Time.now.year,
- # :month => Time.now.month,
-  :requirements => {
-  :year => /\d+/,
-  :month => /\d+/
-  }
-  
-  # author - RB
-  # A route for generating feed for a given practice from a given wiki site.
-  # http://myepfwiki/rss/[wiki folder]/practice/[practice_name]  
-  # for example "http://epf.eclipse.org/rss/EPF_Practices/practice/iterative_development" returns a feed with all elements of Iterative Development practice found in the EPF_Practices Wiki
-  map.connect "rss/:site_folder/practice/:practice_name",
-    :controller => 'rss',
-    :action => 'practice_feed',
-    :requirements => {:site_folder => /.*/,
-                      :practice_name => /.*/}
-
-  # author - RB
-  # A route for generating feed for all elements of a given uma_type found in a given wiki site.
-  # http://myepfwiki/rss/[wiki folder]/[uma_type]  
-  # for example "http://epf.eclipse.org/rss/EPF_Practices/practice" returns a feed with all practices in the EPF Practices Wiki
-  map.connect "rss/:site_folder/:uma_type",
-    :controller => 'rss',
-    :action => 'any_uma_type_feed',
-    :requirements => {:site_folder => /.*/,
-                      :uma_type => /.*/}
-
-
-# TODO implement
-#  map.connect 'pages/list/:type',
-#    :controller => 'pages',
-#    :action => 'list',
-#    :requirements => {:type => /\D+/}
-
-  map.connect 'rss/:site_folder',
-    :controller => 'rss',
-    :action => 'list',
-    :requirements => {:site_folder => /.*/}
-  map.connect ':controller/:action/:id.:format'
-  map.connect ':controller/:action/:id'
-  # TODO evaluate this
-  map.connect ':site_folder/:id/:action',
-    :controller => 'pages'
-  map.connect '', :controller => 'portal', :action => 'home', :title => 'Welcome'
-
-  # See http://rambleon.org/2007/03/07/rails-12-route-changes-are-a-pain-in-the-arse/
-  # The following made sense for Apache, but not for LiteSpeed. 
-  # BTW, LiteSpeed can be configured to use a custom error page
-  map.connect '*path', :controller => 'other', :action => 'show404', :requirements => { :path => /.*/ }
-
-
-end
diff --git a/source/config/tidy.cfg b/source/config/tidy.cfg
deleted file mode 100644
index 7d33fd6..0000000
--- a/source/config/tidy.cfg
+++ /dev/null
@@ -1,18 +0,0 @@
-indent: no
-quote-ampersand: no
-output-encoding: utf8
-input-encoding: utf8
-char-encoding: utf8
-output-xhtml: yes
-vertical-space: 0
-wrap: 0
-quote-nbsp: 1
-tidy-mark: 0
-doctype: omit
-clean: no
-show-errors: 0
-show-warnings: 0
-quiet: yes
-sort-attributes: alpha
-hide-comments: yes
-drop-proprietary-attributes: yes
\ No newline at end of file
diff --git a/source/db/migrate/001_initial.rb b/source/db/migrate/001_initial.rb
deleted file mode 100644
index 240532d..0000000
--- a/source/db/migrate/001_initial.rb
+++ /dev/null
@@ -1,239 +0,0 @@
-#--
-# ENH R1 database sessions (ActiveRecordStore instead of sessions stored in a flat file
-#++
-#
-#--######################################################################
-# Copyright (c) 2006 Logica
-# 
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# 
-# Onno van der Straaten:: initial implementation
-#++######################################################################
-# {Copyright (c) 2006 Logica}[link:files/COPYRIGHT.html]
-
-class Initial < ActiveRecord::Migration
-  def self.up
-
-    create_table "checkouts", :force => true do |t|
-      t.column "user_id", :integer, :limit => 10, :default => 0, :null => false
-      t.column "site_id", :integer, :limit => 10
-      t.column "page_id", :integer, :limit => 10
-      t.column "version_id", :integer, :limit => 10, :default => 0, :null => false
-      t.column "created_on", :datetime
-      t.column "updated_on", :datetime
-    end
-    
-    add_index "checkouts", ["user_id"], :name => "checkouts_user_id_index"
-    add_index "checkouts", ["page_id"], :name => "checkouts_page_id_index"
-    add_index "checkouts", ["version_id"], :name => "checkouts_version_id_index"
-    add_index "checkouts", ["site_id"], :name => "checkouts_site_id_index"
-    
-    create_table "da_texts", :force => true do |t|
-      t.column "text", :text
-      t.column "type", :string, :limit => 15, :null => false
-      t.column "guid", :string, :limit => 45
-      t.column "ip_address", :string, :limit => 500
-      t.column "done", :string, :limit => 1, :default => "N", :null => false
-      t.column "review_note", :text
-      t.column "review_note_send_on", :datetime
-      t.column "user_id", :integer, :limit => 10
-      t.column "page_id", :integer, :limit => 10
-      t.column "site_id", :integer, :limit => 10
-      t.column "version_id", :integer, :limit => 10
-      t.column "created_on", :datetime
-      t.column "updated_on", :datetime
-      t.column "reviewer_id", :integer
-      # feedback
-      t.column "email", :string
-    end
-    
-    add_index "da_texts", ["page_id"], :name => "da_texts_page_id_index"
-    add_index "da_texts", ["site_id"], :name => "da_texts_site_id_index"
-    add_index "da_texts", ["user_id"], :name => "da_texts_user_id_index"
-    add_index "da_texts", ["version_id"], :name => "da_texts_version_id_index"
-    add_index "da_texts", ["guid"], :name => "da_texts_guid_index", :unique => false
-    
-    
-    create_table "notifications", :force => true do |t|
-      t.column "page_id", :integer, :limit => 10
-      t.column "user_id", :integer, :limit => 10, :default => 0, :null => false
-      t.column "notification_type", :string, :limit => 50, :default => "", :null => false
-      t.column "created_on", :datetime
-      t.column "updated_on", :datetime
-    end
-    
-    add_index "notifications", ["page_id"], :name => "notifications_page_id_index"
-    add_index "notifications", ["user_id"], :name => "notifications_user_id_index"
-    
-    create_table "pages", :force => true do |t|
-      t.column "rel_path", :string, :limit => 220, :default => "", :null => false
-      t.column "presentation_name", :string, :limit => 500, :null => false
-      t.column "type", :string, :limit => 20, :null => false
-      t.column "tool", :string, :limit => 4, :null => false, :default => "EPFC"
-      t.column "status", :string, :limit => 20, :default => "New", :null => false 
-      t.column "uma_type", :string, :limit => 100, :default => "", :null => false 
-      t.column "filename", :string, :limit => 250, :default => "", :null => false
-      t.column "uma_name", :string, :limit => 250, :default => "", :null => false
-      t.column "site_id", :integer, :limit => 10      
-      t.column "user_id", :integer, :limit => 10            
-      t.column "created_on", :datetime
-      t.column "updated_on", :datetime
-      t.column "body_tag", :string, :limit => 1000
-      t.column "treebrowser_tag", :string, :limit => 1000
-      t.column "copyright_tag", :string, :limit => 1000
-      t.column "text", :text
-      t.column "head_tag", :text
-    end
-    
-    add_index "pages", ["rel_path"], :name => "pages_rel_path_index", :unique => false
-    
-    # TODO verwijderen
-    create_table "pages_sites", :id => false, :force => true do |t|
-      t.column "site_id", :integer, :limit => 10
-      t.column "page_id", :integer, :limit => 10
-      t.column "created_on", :datetime
-      t.column "updated_on", :datetime
-    end
-    
-    add_index "pages_sites", ["site_id", "page_id"], :name => "pages_sites_site_id_index", :unique => true
-    
-    create_table "sites", :force => true do |t|
-      t.column "title", :string, :limit => 40, :default => "", :null => false
-      t.column "type", :string, :limit => 15, :null => false
-      t.column "description", :text
-      #t.column "site_type", :string, :limit => 1 # TODO obsolete
-      t.column "baseline_process_id", :integer, :limit => 10
-      t.column "created_on", :datetime
-      t.column "updated_on", :datetime
-      t.column 'baseline_updated_on' , :datetime      
-      t.column "html_files_count", :integer # TODO obsolete?
-      t.column "wikifiable_files_count", :integer # TODO obsolete?
-      t.column "user_id", :integer
-      t.column "folder", :string, :limit => 200, :default => "", :null => false
-      # for type is 'BaselineProcess'
-      t.column "content_scanned_on", :datetime
-      # for type is 'Wiki'
-      t.column "wikified_on", :datetime
-      t.column "obsolete_on", :datetime
-      t.column "obsolete_by", :integer, :limit => 10
-      # the following columns are not used yet but will be in a futher version, see Bug 238009
-      t.column "zip_removed_on", :datetime
-      t.column "zip_removed_by", :integer, :limit => 10
-      t.column "content_removed_on", :datetime
-      t.column "content_removed_by", :integer, :limit => 10      
-    end
-    
-    add_index "sites", ["baseline_process_id"], :name => "sites_baseline_process_id_index"
-    add_index "sites", ["user_id"], :name => "sites_user_id_index"
-
-    create_table :updates do |t|
-      t.column "wiki_id", :integer, :limit => 10, :null => false
-      t.column "baseline_process_id", :integer, :limit => 10, :null => false
-      t.column "user_id", :integer, :limit => 10, :null => false
-      t.column "started_on", :datetime
-      t.column "finished_on", :datetime      
-      t.column "created_on", :datetime
-      t.column "updated_on", :datetime
-    end
-    
-    create_table "users", :force => true do |t|
-      t.column "email", :string, :limit => 250, :default => "", :null => false
-      t.column 'account', :string # used for basic authentication
-      t.column "name", :string, :limit => 50, :default => "", :null => false
-      t.column "page", :text 
-      t.column "ip_address", :string, :limit => 20, :default => "", :null => false
-      t.column "hashed_password", :string, :limit => 40
-      t.column "hashed_password_new", :string, :limit => 40
-      t.column "admin", :string, :limit => 1, :default => "N", :null => false
-      t.column "notify_daily", :integer, :limit => 1, :default => 0, :null => false
-      t.column "notify_weekly", :integer, :limit => 1, :default => 0, :null => false
-      t.column "notify_monthly", :integer, :limit => 1, :default => 0, :null => false
-      t.column "notify_immediate", :integer, :limit => 1, :default => 0, :null => false
-      t.column "site_id", :integer, :limit => 10
-      t.column "created_on", :datetime
-      t.column "updated_on", :datetime
-      t.column "http_user_agent", :string, :limit => 250
-      t.column "logon_count", :integer, :limit => 5, :default => 0
-      t.column "logon_using_cookie_count", :integer, :limit => 5, :default => 0
-      t.column "last_logon", :datetime
-      t.column "confirmed_on", :datetime
-    end
-    
-    add_index "users", ["email"], :name => "users_email_index", :unique => true
-    add_index "users", ["site_id"], :name => "users_site_id_index"
-    
-    create_table "versions", :force => true do |t|
-      t.column "version", :integer, :limit => 4
-      t.column "type", :string, :limit => 25, :null => false            
-      t.column "note", :text
-      t.column "done", :string, :limit => 1, :default => "N", :null => false
-      t.column 'current', :boolean      
-      t.column "review_note", :text
-      t.column "review_note_send_on", :datetime
-      t.column "user_id", :integer, :limit => 10, :default => 0, :null => false
-      t.column "page_id", :integer, :limit => 10
-      t.column "wiki_id", :integer, :limit => 10, :null => false
-      t.column "baseline_process_id", :integer, :limit => 10
-      t.column "version_id", :integer, :limit => 10
-      t.column "update_id", :integer, :limit => 10
-      t.column "created_on", :datetime
-      t.column "updated_on", :datetime
-      t.column "reviewer_id", :integer
-      t.column "rel_path", :string, :limit => 1000, :default => "", :null => false
-    end
-    
-    add_index "versions", ["version", "wiki_id", "page_id"], :name => "versions_version_index", :unique => true
-    add_index "versions", ["user_id"], :name => "versions_user_id_index"
-    add_index "versions", ["page_id"], :name => "versions_page_id_index"
-    add_index "versions", ["wiki_id"], :name => "versions_site_id_index"
-    add_index "versions", ["baseline_process_id"], :name => "versions_baseline_process_id_index"    
-    add_index "versions", ["version_id"], :name => "versions_version_id_index"
-    add_index "versions", ["reviewer_id"], :name => "versions_reviewer_id_index"
-
-    create_table :sessions do |t|
-      t.column :session_id, :string
-      t.column :data, :text
-      t.column :updated_at, :datetime
-    end
-
-    add_index :sessions, :session_id
-    add_index :sessions, :updated_at
-    
-    create_table :uploads do |t|
-      t.column :filename, :string
-      t.column :upload_type, :string, :limit => 10 # 'Document'  or 'Image'
-      t.column :done, :string, :limit => 1, :default => "N", :null => false
-      t.column :review_note, :text
-      t.column :review_note_send_on, :datetime
-      t.column :content_type, :string
-      t.column :description, :text
-      t.column :user_id, :integer, :limit => 10
-      t.column :reviewer_id, :integer, :limit => 10
-      t.column :user_id_markdone, :integer, :limit => 10
-      t.column :user_id_marktodo, :integer, :limit => 10
-      t.column :rel_path, :string, :limit => 1000, :default => "", :null => false      
-      t.column :created_on, :datetime
-      t.column :updated_on, :datetime
-    end
-    
-  end
-  
-  def self.down
-    drop_table "checkouts"
-    drop_table "comments"
-    drop_table "notifications"  
-    drop_table "pages"    
-    drop_table  "pages_sites"
-    drop_table  "sites"
-    drop_table  "users"  
-    drop_table  "versions"  
-    drop_table :sessions  
-    drop_table :uploads    
-    drop_table :updates    
-  end
-end
diff --git a/source/db/migrate/002_admin_messages.rb b/source/db/migrate/002_admin_messages.rb
deleted file mode 100644
index 4f3015d..0000000
--- a/source/db/migrate/002_admin_messages.rb
+++ /dev/null
@@ -1,234 +0,0 @@
-#--######################################################################
-# Copyright (c) 2006 Logica
-# 
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# 
-# Onno van der Straaten:: initial implementation
-#++######################################################################
-# {Copyright (c) 2006 Logica}[link:files/COPYRIGHT.html]
-
-class AdminMessages < ActiveRecord::Migration
-  def self.up
-    AdminMessage.create(:guid => 'Welcome', :text => 'Welcome to EPF Wiki, the Wiki technology for Eclipse Process Framework Composer.' )
-    AdminMessage.create(:guid => 'About', :text => '<p>EPF Wiki is Wiki technology designed to be used together with Eclipse Process Framework (EPF). 
-This offers the best of two distinct worlds: the worlds of powerful process frameworks and Wikis. 
-It offers an process engineering infrastructure that combines a modular method construction approach and the flexibility and ease of use that is the defining characteristic of a Wiki. </p>
-<p>EPF Wiki is an innovation that adds Wiki features to the hypertext process descriptions created with EPF Composer.</p>
-<ul>
-    <li><a href="/images/epfwiki_infra_overview.jpg">Overview EPF Wiki Infrastructure</a>
-    </li>
-
-</ul>
-
-<h2>Eclipse Process Framework</h2>
-<p>The Eclipse Process Framework (EPF) aims at producing a customizable software process enginering framework, with exemplary process content and tools, supporting a broad variety of project types and development styles</p>
-<p>More information:
-</p><ul>
-    <li><a href="http://www.eclipse.org/epf/">EPF Project</a>
-    </li>
-
-    <li><a href="http://www.eclipse.org/epf/general/getting_started.php">Getting Started with EPF</a>
-    </li>
-</ul>
-
-
-
-<h2>Rules of Conduct</h2>
-<p>If you want to contribute to the process descriptions published here, you are welcome to do so. 
-You can <a href="/login/sing_up">sign up</a> with a valid email account. 
-Your email account will not be visible anywhere on this site, so signing up here won\'t cause unwanted messages (spam).
-</p>
-<p>The purpose of this site is to exchange information, views, opinions on the process descriptions published here. Please avoid personal attacks, slurs, and profanity in your interactions.
-Please make sure that your postings in are relevant to the subject at hand. 
-It is normal for some topics to drift from the stated subject. 
-However, to ensure maximum benefit for everyone, 
-we encourage you to keep your postings as close to the subject as possible.
-Please keep in mind that this is a public space, so don\'t post anything that you don\'t want the world to see. 
-            </p><p></p>')
-AdminMessage.create(:guid => 'Login', :text => '<h3>Welcome to EPF Wiki</h3><br>
-                            Software process descriptions that anyone can edit.<br>')
-AdminMessage.create(:guid => 'Help', :text => '')
-AdminMessage.create(:guid => 'Terms of Use', :text => '<p>15th November, 2004</p> 
-
-    <p><strong>Terms and Conditions of Use for the  EPF Wiki Web Site</strong></p>
-
-    <p>These terms of use are based on <a href="http://www.eclipse.org/legal/termsofuse.php" target="_new">Eclipse.org Terms of Use</a></p><p>BY ACCESSING, BROWSING OR USING THIS WEB SITE, YOU
-    ACKNOWLEDGE THAT YOU HAVE READ, UNDERSTAND AND AGREE TO BE BOUND BY THESE TERMS
-    AND CONDITIONS.</p>
-
-    <p>This Web site is a service made available by the Eclipse Foundation. 
-    All software, documentation, information and/or other materials provided on and through this Web site
-    ("Content") may be used solely under the following terms and conditions ("Terms of Use").</p>
-
-    <p>This Web site may contain other proprietary notices and copyright information, the terms of which must
-    be observed and followed.  The Content on this Web site may contain technical inaccuracies or typographical
-    errors and may be changed or updated without notice. The Eclipse Foundation may also make improvements
-    and/or changes to the Content at any time without notice.</p>
-
-    <p>The Eclipse Foundation, its members ("Members") assume no responsibility regarding the
-    accuracy of the Content and use of the Content is at the recipient’s own risk.  The Eclipse Foundation and
-    the Members provide no assurances that any reported problems with any Content will be resolved.
-    Except as otherwise expressly stated, by providing the Content, neither the Eclipse Foundation or the Members
-    grant any licenses to any copyrights, patents or any other intellectual property rights.</p>
-
-    <p>The Eclipse Foundation and the Members do not want to receive confidential information from you
-    through this Web site.  Please note that any information or material sent to The Eclipse Foundation or the Members
-    will be deemed NOT to be confidential.</p>
-
-    <p>You are prohibited from posting or transmitting to or from this Web site any unlawful, threatening, libelous,
-    defamatory, obscene, scandalous, inflammatory, pornographic, or profane material, or any other material that
-    could give rise to any civil or criminal liability under the law.</p>
-
-    <p>The Eclipse Foundation and the Members make no representations whatsoever about any other
-    Web site that you may access through this Web site. When you access a non-Eclipse Foundation Web site,
-    even one that may contain the organization’s name or mark, please understand that it is independent from
-    The Eclipse Foundation, and that the the Eclipse Foundation and the Members have no control over
-    the content on such Web site. In addition, a link to a non-Eclipse Foundation Web site does not mean that
-    the Eclipse Foundation or the Members endorse or accept any responsibility for the content, or the use,
-    of such Web site. It is up to you to take precautions to ensure that whatever you select for your use is free of such
-    items as viruses, worms, Trojan horses and other items of a destructive nature.  </p>
-
-    <p>IN NO EVENT WILL THE ECLIPSE FOUNDATION AND/OR THE MEMBERS BE LIABLE TO YOU
-    (AN INDIVIDUAL OR ENTITY) OR ANY OTHER INDIVIDUAL OR ENTITY FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-    PUNITIVE, SPECIAL OR CONSEQUENTIAL DAMAGES RELATED TO ANY USE OF THIS WEB SITE, THE CONTENT,
-    OR ON ANY OTHER HYPER LINKED WEB SITE, INCLUDING, WITHOUT LIMITATION, ANY LOST PROFITS, LOST SALES,
-    LOST REVENUE, LOSS OF GOODWILL, BUSINESS INTERRUPTION, LOSS OF PROGRAMS OR OTHER DATA ON
-    YOUR INFORMATION HANDLING SYSTEM OR OTHERWISE, EVEN IF THE ECLIPSE FOUNDATION OR THE MEMBERS
-    ARE EXPRESSLY ADVISED OR AWARE OF THE POSSIBILITY OF SUCH DAMAGES OR LOSSES.</p>
-
-    <p>ALL CONTENT IS PROVIDED BY THE ECLIPSE FOUNDATION AND/OR THE MEMBERS ON AN
-    "AS IS" BASIS ONLY.  THE ECLIPSE FOUNDATION AND THE MEMBERS PROVIDE NO REPRESENTATIONS,
-    CONDITIONS AND/OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
-    WARRANTIES OF FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABILITY AND NONINFRINGEMENT.</p>
-
-    <p>The Eclipse Foundation and the Members reserve the right to investigate complaints or reported
-    violations of these Terms of Use and to take any action they deem appropriate including, without limitation,
-    reporting any suspected unlawful activity to law enforcement officials, regulators, or other third parties and
-    disclosing any information necessary or appropriate to such persons or entities relating to user profiles,
-    e-mail addresses, usage history, posted materials, IP addresses and traffic information.</p>
-
-    <p>The Eclipse Foundation and the Members reserve the right to seek all remedies available at law
-    and in equity for violations of these Terms of Use, including but not limited to the right to block access from
-    a particular Internet address to this Web site.</p>
-
-    <p><strong>Licenses</strong></p>
-
-    <p>The Content provided on this Web site is provided under the terms and conditions of the
-    <a href="http://www.eclipse.org/legal/epl/notice.php" target="_new">Eclipse Foundation Software User Agreement</a> and
-    those additional terms, conditions and notices referenced therein.</p>
-
-    <p>If the Content is licensed to you under the terms and conditions of the <a href="http://www-128.ibm.com/developerworks/library/os-cpl.html" target="_blank">Common Public License </a>("CPL")
-    or the <a href="http://www.eclipse.org/legal/../org/documents/epl-v10.php" target="_new">Eclipse Public License</a> ("EPL"), any Contributions, as defined in the
-    applicable license(s), uploaded, submitted, or otherwise made available to the Eclipse Foundation and/or the Members,
-    by you that relate to such Content are provided under the terms and conditions of both the CPL and the EPL and can be made
-    available to others under the terms of the CPL and/or the EPL.</p>
-
-  
-    <p>If the Content is licensed to you under license terms and conditions other than the CPL or the EPL
-    ("Other License"), any modifications, enhancements and/or other code and/or documentation
-    ("Modifications") uploaded, submitted, or otherwise made available to the Eclipse Foundation and/or the
-    Members, by you that relate to such Content are provided under terms and conditions of the
-    Other License and can be made available to others under the terms of the Other License. In addition, with regard
-    to Modifications for which you are the copyright holder, you are also providing the Modifications under the terms
-    and conditions of both the CPL and the EPL and such Modifications can be made available to others under the
-    terms of the CPL and/or the EPL.</p>
-
-    <p>For all other software, information and other material including, without limitation, ideas, concepts, know-how
-    and techniques, uploaded, submitted or otherwise made available to The Eclipse Foundation, the Members,
-    and/or users of this Web-site, (collectively "Material"), you grant (or warrant that the
-    owner of such rights has expressly granted) the Eclipse Foundation, the Members and the users of
-    this Web-site a worldwide, unrestricted, royalty free, fully paid up, irrevocable, perpetual, non-exclusive license
-    to use, make, reproduce, prepare derivative works of, publicly display, publicly perform, transmit, sell, distribute,
-    sublicense or otherwise transfer such Materials, and/or derivative works thereof, and authorize third parties to do
-    any, some or all of the foregoing including, but not limited to, sublicensing others to do any some or all of
-    the foregoing indefinitely. You represent and warrant that to your knowledge, you have sufficient rights in the
-    Materials to grant the foregoing rights and licenses.</p>
-
-    <p>All logos and trademarks contained on this Web site are and remain the property of their respective owners.
-    No licenses or other rights in or to such logos and/or trademarks are granted to you.</p>
-
-    <p>You can learn more about the <a href="privacypolicy">EPF Wiki privacy practices</a> on the Web.</p>')
-AdminMessage.create(:guid => 'Privacy Policy', :text => '<p>15th November, 2004</p> 
-
-    <p><strong>Privacy</strong></p>
-  
-    <p>You can visit EPF Wiki without revealing who you are or
-    any information about yourself. There are times, however, when the Eclipse Foundation or its Members
-    ("We" or "Us") may need information from you.
-    You may choose to give personal information, such as your name
-    and address or e-mail id that may be needed, for example, to correspond with
-    you. We intend to let you know how such information will be used before it is
-    collected from you on the Internet. If
-    you tell Us that you do not want Us to use this information as a basis for
-    further contact with you, We will respect your wishes.</p>
-
-    <p><strong>Information Security and Quality</strong></p>
-
-    <p>We intend to protect the quality and integrity of your
-    personally identifiable information. We
-    have tried to implement appropriate technical and organizational measures, such
-    as using encryption for transmission of certain forms of information, to help
-    keep that information secure, accurate, current, and complete.</p>
-
-    <p>We will make a sincere effort to respond in a timely manner
-    to your requests to correct inaccuracies in your personal information. To
-    correct inaccuracies in your personal information please return the message
-    containing the inaccuracies to the sender with details of the correction
-    requested.</p>
-
-    <p><strong>Clickstream Data and Cookies</strong></p>
-
-    <p>We sometimes collect anonymous information from visits to
-    this Web site to help provide better service.
-    For example, We keep track of the domains from which people visit and We
-    also measure visitor activity on EPF Wiki, but in ways that keep the
-    information anonymous. This anonymous
-    information is sometimes known as "clickstream data." We may use this data to analyze trends and statistics and to help
-    us tailor the Web site to better serve Eclipse participants.</p>
-  
-    <p>Also, when personal data is collected from you in connection
-    with a transaction (such as contribution of code or posting to newsgroups) We
-    may extract some information about that transaction in an anonymous format and
-    combine it with other anonymous information such as clickstream data. This anonymous information is used and
-    analyzed only at an aggregate level to help Us understand trends and patterns.</p>
-
-    <p>Some EPF Wiki pages use cookies to better serve you when
-    you return to the site. You can set
-    your browser to notify you before you receive a cookie, giving you the chance
-    to decide whether to accept it. You can
-    also set your browser to turn off cookies.
-    If you do so, however, some areas of some sites may not function
-    properly.</p>
-
-    <p>To the extent Contributions and other Material (as defined
-    in the Terms of Use) contain personal information about you, including, but not
-    limited to, you name, We have the right to provide that information to others
-    pursuant to the Term of Use.</p>
-
-    <p><strong>Business Relationships</strong></p>
-
-    <p>This Web site contains links to other Web sites.We are not responsible for the privacy
-    practices or the content of such Web sites.</p>
-
-    <p><strong>Notification of Changes</strong></p>
-
-    <p>This privacy statement was last updated on November 15, 2004.
-    A notice will be posted on this Web site home page for thirty (30) days
-    whenever this privacy statement is changed.</p>
-
-    <p><strong>Questions Regarding This Statement</strong></p><p>This statement is based on <a href="http://www.eclipse.org/legal/privacy.php" target="_new">Eclipse.org Privacy Practices</a>.</p>
-
-    <p>Questions regarding this statement should be directed to: <a href="mailto:license@eclipse.org">license@eclipse.org</a>.</p>
-    ')
-
-end
-
-  def self.down
-    AdminMessage.destroy_all
-  end
-end
diff --git a/source/db/migrate/003_ip_address_optional.rb b/source/db/migrate/003_ip_address_optional.rb
deleted file mode 100644
index 6a7640a..0000000
--- a/source/db/migrate/003_ip_address_optional.rb
+++ /dev/null
@@ -1,23 +0,0 @@
-#--######################################################################
-# Copyright (c) 2008 Logica
-# 
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# 
-# Onno van der Straaten:: initial implementation
-#++######################################################################
-# {Copyright (c) 2006 Logica}[link:files/COPYRIGHT.html]
-
-class IpAddressOptional < ActiveRecord::Migration
-  def self.up
-    change_column :users, :ip_address, :string, :limit => 20, :null => true
-  end
-
-  def self.down
-    change_column :users, :ip_address, :string, :limit => 20, :default => "", :null => false
-  end
-end
diff --git a/source/db/migrate/004_guid_should_allow_nil_values.rb b/source/db/migrate/004_guid_should_allow_nil_values.rb
deleted file mode 100644
index d421cc5..0000000
--- a/source/db/migrate/004_guid_should_allow_nil_values.rb
+++ /dev/null
@@ -1,23 +0,0 @@
-#--######################################################################
-# Copyright (c) 2008 Logica
-# 
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# 
-# Onno van der Straaten:: initial implementation
-#++######################################################################
-# {Copyright (c) 2006 Logica}[link:files/COPYRIGHT.html]
-
-class GuidShouldAllowNilValues < ActiveRecord::Migration
-  def self.up
-    change_column :da_texts, :guid, :string, :limit => 45, :null => true
-  end
-
-  def self.down
-    change_column :da_texts, :guid, :string, :limit => 45, :null => true
-  end
-end 
diff --git a/source/doc/DATAMODEL b/source/doc/DATAMODEL
deleted file mode 100644
index b1a6ecb..0000000
--- a/source/doc/DATAMODEL
+++ /dev/null
@@ -1 +0,0 @@
-link:../datamodel.png
\ No newline at end of file
diff --git a/source/doc/FEATURES b/source/doc/FEATURES
deleted file mode 100644
index 602befa..0000000
--- a/source/doc/FEATURES
+++ /dev/null
@@ -1,192 +0,0 @@
-= Features
-
-* <b>Portal</b>
-* <b>Installation and Configuration</b>
-* <b>Browser Based WYSIWYG HTML Editing</b>
-* <b>Templates</b>
-* <b>Linking Pages</b>
-* <b>Wikis</b>
-* <b>Revision Control</b>
-* <b>Harvesting</b>
-* <b>Access Control</b>
-* <b>File attachments</b>
-* <b>Search</b>
-* <b>Managing users:</b> 
-* <b>RSS</b>
-* <b>Email</b>
-
-
-== Portal
-
-The portal is the easy entry point for new and returning users, which allows anonymous access. The Home page
-shows most recent discussions and changes. There is a list of Wikis and Users, an About Page, a Toolbox, Hall of Fame
-and the archives can be accessed. 
-
-* Implementation: PortalController.home, PortalController.archives, PortalController.wikis, PortalController.users
-* Testing: PortalControllerTest
-
-== Installation and Configuration
-
-The first time the application is accessed the user is redirected to create the central admin
-* Implementation: PortalController.home
-* Testing: PortalControllerTest.test_home, LoginControllerTest.test_signup_central_admin
-
-Several texts can be customized by the central admin: Welcome, About, Login, Help, Privacy Policy, Terms of Use
-* Implementation: AdminMessage, UsersController.adminmessage, UsersController.account
-* Testing:
-
-== Browser Based WYSIWYG HTML Editing
-
-WYSIWYG or HTML Editing provided by third party tool TinyMCE. Currently only TinyMCE is supported.
-* Implementation: PagesController.checkout, PagesController.edit
-* Testing: PagesControllerTest
-
-== Templates
-
-New pages can be created using templates. The templates are provided by a special Wiki with the title 'Templates'.
-This Wiki is automatically created when the first user account (the administrator) is created. 
-The 'Templates' Wiki is an ordinary Wiki except for the fact that the title ('Templates') gives 
-special status to the pages that the pages of this Wiki appear in the new page dialog.
-
-* Implementation: LoginController.new_cadmin, PagesController.new, WikiPage.new_using_template
-* Testing: UserTest.test_new_cadmin, PortalControllerTest.test_home, PagesControllerTest.test_checkout_edithtml_save_checkin_new, PageTest.test_new_page_using_template
-
-== Linking Pages
-
-Users can link pages by copy past URL in a dialog box
-* Implementation: feature of HTML editor (TinyMCE or PinEdit)
-* Testing: tbd
-
-== Wikis
-
-Administrators can upload a zip file containing a published website created with EPF (or RMC)
-* Implementation: Site.unzip_upload, SitesController.new
-* Testing: SiteTest.test_upload
-
-Administrators can define a baseline process with a EPF published site
-* Implementation: Site, BaselineProcess, SitesController.new
-* Testing: SiteTest.test_new_baseline_process, SitesControllerTest.test_new
-
-Administrators can create a Wiki based on a baseline process (published site from EPF)
-* Implementation: Site, Wiki, Wiki.wikify, SitesController.new_wiki,
-* Testing: SiteTest.test_new_wiki, SitesControllerTest.test_new_wiki, SitesControllerTest.test_new_wiki_job_daily, SitesControllerTest.test_new_wiki_post 
-
-Administrators can update a Wiki with a baseline process (published site from EPF) 
-* Implementation: Wiki.update_wiki, SitesController.update
-* Testing: SiteTest.test_update_wiki, SitesControllerTest.test_update_wiki
-
-For performance reasons there is an option of using scheduled jobs to perform actual wikifying.
-* Implementation: SitesController.update_now, SitesController.update_cancel
-* Testing: SitesControllerTest.test_wikify_now, SitesControllerTest.test_new_wiki_job_daily, 
-
-Administrator can make a Wiki obsolete
-* Implementation: SitesController.obsolete
-* Testing: SitesControllerTest.test_obsolete
-
-== Revision Control
-
-Checkout a page
-* Implementation: Checkout
-* Testing: CheckoutTest.test_new, CheckoutTest.test_checkin, PagesControllerTest.test_checkout_edithtml_save_checkin_new
-
-Create a new page using a (predefined) template or any other page
-* Implementation: PagesController.new, WikiPage.new_using_template
-* Testing: PagesControllerTest.test_checkout_edithtml_save_checkin_new, PageTest.test_new_page_using_template
-
-Save a checked out page
-* Implementation: PagesController.save
-* Testing: PagesControllerTest.test_checkout_edithtml_save_checkin_new
-
-Check in a checked out page
-* Implementation: PagesController.checkin
-* Testing: PagesControllerTest.test_checkout_edithtml_save_checkin_new
-
-Preview a checked out page
-* Implementation: PagesController.preview
-* Testing: TBD
-
-Undo a checkout
-* Implementation: PagesController.undocheckout
-* Testing: PagesControllerTest.test_undocheckout
-
-Rollback a change
-* Implementation: PagesController.rollback
-* Testing: PagesControllerTest.test_rollback
-
-The central admin can delete a page with its associated records
-* Implementation: PagesController.destroy
-* Testing: TBD
-
-Users can access version information of a version and add/update a version note
-* Implementation: VersionsController.show, VersionsController.note
-* Testing: VersionsControllerTest.test_show_and_diff
-
-Admins (process engineers) can assign reviewer, mark versions reviewed ('done')
-* Implementation: ReviewController
-* Testing: TBD
-
-Users can compare versions of a page
-* Implementation: VersionsController.diff, Version.xhtmldiffpage
-* Testing: VersionsControllerTest.test_show_and_diff
-
-
-== Harvesting
-
-Contributions can be reviewed and marked 'done'
-* Implementation: DaText(Comment, Feedback), Version, Upload, ReviewController.toggle_done, ReviewController.assign, ReviewController.note
-* Testing: TBD
-
-Contributors receive email notification when changes, comments, uploads are harvested (are marked 'done') and when a Wiki gets updated with a new baseline
-* Implementation: ReviewController.assign, ReviewController.note, ReviewController.toggle_done, ApplicationHelper.link_to_done_toggle
-* Testing: UpdateTest.test_reviewed_notification_email
-
-== Access Control
-
-After installation the first unauthenticated (!) user can create the central admin account 
-* Implementation: User, LoginController.login, LoginController.new_cadmin
-* Testing: LoginControllerSetupTest.test01_signup_central_admin, LoginControllerTest.test01_signup_central_admin
-
-The central admin account can grant and revoke admin privileges
-* Implementation: UsersController.admin
-* Testing:
-
-The central admin can assign someone else as central admin
-* Implementation: UsersController.cadmin, User.cadmin
-* Testing: 
-
-Admins can grant admin privileges
-* Implementation: UsersController.admin
-* Testing:
-
-== File attachments
-Users can upload documents and images
-* Implementation: UploadsController, Upload
-* Testing: UploadsControllerTest
-
-== Managing users
-
-Users can sign up with a valid email account and by providing and confirming a password (accounts need to be confirmed via a link sent via email)
-* Implementation: LoginController
-* Testing: LoginControllerTest.test_sign_up_with_pw, LoginControllerTest.test_sign_up_without_pw, LoginControllerTest.test_lost_password, SetupAndSignInTest.test_sign_up
-
-User can sign up with a valid email account, a password is generated and sent via email
-* Implementation: User.validate_on_create, LoginController, UsersController
-* Testing: UserTest, SetupAndSignInTest.test_sign_up
-
-Valid email accounts can be restriced to certain domains
-* Implementation: User.validate, LoginController.sign_up, ENV['EPFWIKI_DOMAINS']
-* Testing: SetupAndSignInTest.test02_sign_up
-
-== Email
-
-User are auto subscribed for receiving email
-* Testing: CheckoutTest.test_notification_subscription, PageTest.test_new_page_using_template
-* Implementation: Comment.after_create, Checkout.checkin, WikiPage.new_using_template
-
-Users are send email about changes
-* Implementation: PagesController.checkin, PagesController.discussion, Update.do_update
-* Testing: UserTest.test_reviewed_notification_email, UpdateTest.test_notification, PagesControllerTest.test_discussion
-
-User can subscribe and unsubscribe for receiving email
-* Implementation: UsersController.toggle_change_report_notification, UsersController.notification
-* Testing: TBD
\ No newline at end of file
diff --git a/source/doc/INFRASTRUCTURE b/source/doc/INFRASTRUCTURE
deleted file mode 100644
index 50bc8f7..0000000
--- a/source/doc/INFRASTRUCTURE
+++ /dev/null
@@ -1 +0,0 @@
-link:../infrastructure.jpg
\ No newline at end of file
diff --git a/source/doc/README_FOR_APP b/source/doc/README_FOR_APP
deleted file mode 100644
index de827f7..0000000
--- a/source/doc/README_FOR_APP
+++ /dev/null
@@ -1,25 +0,0 @@
-= About EPF Wiki
-
-EPF Wiki is Wiki technology designed to be used together with Eclipse Process Framework (EPF). This offers the best of two distinct worlds: the worlds powerful process frameworks and Wikis. It offers an process engineering infrastructure that combines a modular method construction approach and the flexibility and ease of use that is the defining characteristic of a Wiki. 
-
-Architecture:
-* Enhances EPFC published process descriptions with Wiki functions using Javascript (wiki.js)
-* Web Application created using Ruby On Rails Framework
-* Wiki technology that works on plain HTML (no Wiki markup language) easy editable using commonly available browser-based WYSIWYG HTML editors (e.g. TinyMCE)
-
-More information:
-* {EPF Wiki Infrastructure}[link:files/doc/INFRASTRUCTURE.html]
-* {Code Statistics}[link:files/doc/STATS.html]
-* {Change Log}[link:files/CHANGELOG.html]
-* {Features}[link:../req/files/doc/FEATURES.html]
-* {To Do}[link:files/doc/TODO.html]
-* {Development Guide}[http://wiki.eclipse.org/index.php/EPF_Wiki_Development_Guide]
-
-= Installation
-
-See the {EPF Wiki Installation Guide for Windows}[http://wiki.eclipse.org/index.php/EPF_Wiki_Installation_Guide] on http://wiki.eclipse.org. 
-
-
-= Support
-
-Please post your questions and/or feedback to the EPF Developers list epf-dev@eclipse.org
\ No newline at end of file
diff --git a/source/doc/TODO b/source/doc/TODO
deleted file mode 100644
index 5bafb10..0000000
--- a/source/doc/TODO
+++ /dev/null
@@ -1,33 +0,0 @@
-= TODO
-
-<b>Browser Based HTML Editing</b>: edit existing pages or create new pages using a browser 
-* Maybe offer more than two templates (Tool Mentor, Checklist) currently available?
-  
-<b>Edit/Info link</b>: to edit a page, simply click on the ‘Edit/Info’ link at the top of each page 
-* Floating toolbar is replaced with 'Edit/Info' link 
-
-<b>Linking pages</b>: links to pages can be created or edited using dialog boxes 
-* currently linking pages requires you to copy paste an URL in de dialog box. 
-* Maybe this should be replaced for something more advanced, for instance select a page in the Wiki from a list. 
-
-<b>WYSIWYG or HTML editing</b>: choice of two HTML editors: TinyMCE (open-source) and/or PinEdit (commercial) 
-* TinyMCE support is present, but some extra work will be required to completely integrate TinyMCE, for instance to be able to upload documents from within TinyMCE. Also support for EPF editor should be added. 
-
-<b>Wikis</b>: support for multiple Wikis with the possibility of sharing content between Wikis 
-
-<b>Revision Control</b>: all changes to pages are tracked, revisions can be retrieved, differences 
-* Current version uses non-EPL open source components CSDIFF and HTML2TEXT-script. The donated documentation has information on how to download and integrate these components. We have to find EPL alternatives for these components or code ourselves? 
-
-<b>Access Control</b>: two groups: administrators and users 
-* The access control is basic but suffices for now I think; maybe we need to provide something more advanced. 
-
-<b>File attachments</b>: upload files (for instance templates, examples) using your browser 
-* Uploads are supported from PinEdit but not from TinyMCE. There is no version control on uploads, I think it suffices for a first release.
-
-<b>Search</b>: full text search 
-* Full text search is a beta feature we introduced; it basically works but still requires some work. The engine is a bit basic, maybe we can offer something more advanced.
-
-<b>Managing users</b>: web based user registration and change of password 
-
-<b>Difference Analysis</b>: compare successive baseline processes (created with EPF): what is new, removed, changed, equal. 
-* Basically works but maybe needs some more thought. Some changes should be ignored I think. 
diff --git a/source/doc/datamodel.png b/source/doc/datamodel.png
deleted file mode 100644
index 3c2f85a..0000000
--- a/source/doc/datamodel.png
+++ /dev/null
Binary files differ
diff --git a/source/doc/infrastructure.jpg b/source/doc/infrastructure.jpg
deleted file mode 100644
index a0faee1..0000000
--- a/source/doc/infrastructure.jpg
+++ /dev/null
Binary files differ
diff --git a/source/lib/generic.rb b/source/lib/generic.rb
deleted file mode 100644
index 31c1429..0000000
--- a/source/lib/generic.rb
+++ /dev/null
@@ -1,204 +0,0 @@
-require 'digest/sha1'
-require 'logger' 
-require 'ftools'
-require 'cgi'
-
-#--######################################################################
-# Copyright (c) 2006 Logica
-# 
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# 
-# Onno van der Straaten:: initial implementation
-#++######################################################################
-# {Copyright (c) 2006 Logica}[link:files/COPYRIGHT.html]
-
-EPFWIKI_CSDIFF_PATH = "\"" + File.expand_path(RAILS_ROOT) + "/script/other/CSDiff/CSDiff.exe\""
-FLASH_RECORD_UPDATED = "Record updated!"
-FLASH_RECORD_CREATED = "Record created!"
-FLASH_RECORD_DELETED = "Record deleted!"
-FLASH_USE_POST_NOT_GET = 'The action does not allow a GET request, a POST request should be used'
-FLASH_NOT_OWNER = "This record was created by someone else, it can only be modified by the user that created it."
-
-MSG_EMAIL_SERVER_GENERATED = "**This message was generated by a server. Don't reply to this address.**"
-
-REMOVE_PATTERN1 = /<script([^\<])*(ContentPageResource|ContentPageSection|ContentPageToolbar|contentPage\.preload|contentPage\.js|ContentPageSubSection|steps\.js|backPath =)([^\<])*<\/script>/mi
-
-def create_cookie(theUser)
-  cookies[:epfwiki_id] = {:value => theUser.id.to_s, :expires => Time.now+31536000}
-  cookies[:epfwiki_token] = {:value => hash_pw(theUser.hashed_password),:expires => Time.now+31536000}
-end
-
-def expire_cookie
-  cookies.delete :epfwiki_id
-  cookies.delete :epfwiki_token
-end
-
-def notify_cadmin
-  Notifier::deliver_env_to(User.find_central_admin, session.instance_variable_get("@data"), params, request.env, nil)
-end
-
-def wrap_text(txt, col = 80)
-  txt.gsub(/(.{1,#{col}})( +|$\n?)|(.{1,#{col}})/,
-    "\\1\\3\n") 
-end
-
-def buildid(time)
-  return time.strftime("%Y%m%d_%H%M")
-end
-
-def valid_filename(filename)
-  filename.downcase.delete("&+-.\"/\[]:;=,\\").tr(' ','_')
-end
-
-def email_addresses_4_report(users)
-  if  users.class.to_s == "User"
-    return users.email
-  else
-    recipients = Array.new
-    for user in users
-      recipients = user.email if !recipients
-      recipients << user.email
-    end
-    return recipients
-  end
-end
-
-def mine?(theRecord)
-  return (theRecord.id == session['user'].id) if (theRecord.class.to_s == "User")
-  return (theRecord.user_id == session['user'].id)
-end
-
-def admin?
-  return session['user'].admin? if session['user']
-  return false
-end
-
-def user?
-  return !session['user'].nil?
-end
-
-def cadmin?
-  return (session['user'].admin == "C") if session['user']
-  return false
-end
-
-# HTML Tidy Configuration Options see http://tidy.sourceforge.net/docs/quickref.html
-# Ruby Interface on SuSE linux does not seem to work. Causes a segmentation fault.
-# If this is fixed we can start using it again instead of the current #tidy_file. 
-# To be able to use this we should add the EPFWIKI_TIDY_PATH environment variable.
-# Examples:
-# ENV['EPFWIKI_TIDY_PATH'] = '/usr/lib/libtidy.so'
-# ENV['EPFWIKI_TIDY_PATH'] = ENV['EPFWIKI_ROOT_DIR'] + "vendor/tidy/bin/tidy.dll"
-def tidy_file_segfaults_on_SuSE_Linux(path)
-  require 'tidy'
-  Tidy.path = ENV['EPFWIKI_TIDY_PATH'] 
-  html = IO.readlines(path).join
-  xml = Tidy.open(:show_warnings=>true) do |tidy|
-    tidy.options.indent = 'auto' # auto won't indent title, li elements
-    tidy.options.quote_ampersand = false # TODO is Tidy ignoring this option
-    tidy.options.output_encoding = 'utf8'
-    tidy.options.input_encoding = 'utf8'
-    tidy.options.char_encoding = 'utf8'
-    tidy.options.output_xhtml = true 
-    tidy.options.vertical_space = 0
-    tidy.options.wrap = 0
-    tidy.options.quote_nbsp = 1
-    tidy.options.tidy_mark = 0
-    tidy.options.doctype = 'omit' # Prevent Tidy from adding some old doctype 
-    
-    # tidy.options.sort_attributes = 'alpha' #
-    # the current version supports sort_attributes but unfortunatly there is no dll distribution, only an exe
-    # TODO integrate new tidy dll when it is available. Note: this will improve generated diffs with xhtmldiff
-    
-    xml = tidy.clean(html)
-    xml
-    outFile = File.new(path, "w")
-    outFile.puts(xml)
-    outFile.close
-    #puts tidy.errors
-    #puts tidy.diagnostics       
-  end
-end
-
-# HTML Tidy Configuration Options see http://tidy.sourceforge.net/docs/quickref.html
-# Note: tidy_success is false when there are warnings and there are always warnings!
-# Tidy exists with 1 when there are warnings, 2 when there are errors, 0 when there
-# are no errors or warnings. 
-def tidy_file(path)
-    cmdline = "tidy -m -config \"#{File.expand_path(RAILS_ROOT)}/config/tidy.cfg\" \"#{path}\""
-    RAILS_DEFAULT_LOGGER.info("HTML Tidy file with command #{cmdline}")
-    tidy_success = system(cmdline)
-    #puts "Message #{$?.exitstatus}, #{$?.pid}"
-    raise "Error executing command #{cmdline}: #{$?}" if $?.exitstatus ==  2
-end
-
-def db_script_version(path2migratefolder)
-  files = Dir.entries(path2migratefolder)  - [".", ".."]
-  version = 0
-  files.each { |file| version = file.split("_")[0].to_i if file.split("_")[0].to_i > version } 
-  return version
-end
-
-def write_log(logfilename, content)
-  aOutputFile = File.new("#{ENV['EPFWIKI_ROOT_DIR']}log/#{logfilename}", "w")
-  aOutputFile.puts(content)
-  aOutputFile.close       
-end
-
-def hash_pw(pw)
-  return Digest::SHA1.hexdigest(pw || '') 
-end
-
-# Schedule a job to run #job_daily. Schedule this job to run at night if 
-# your sites are large (pages in the thousands). Under Windows this could be
-# Scheduled Task to run from the app root the following command:
-# ruby script/runner -e production 'job_daily'
-# NOTE: ENV['EPFWIKI_HOST'] env variable is needed, because in a job we don't know the host
-def job_daily
-
-  @cadmin = User.find_central_admin
-  
-  BaselineProcess.find_2scan.each do |bp|
-    bp.scan4content
-  end
-  
-  expired_by_update = false
-  Update.find_todo.each do |update|
-    update.do_update
-    expired_by_update = true
-  end
-  
-  expire_all_pages unless expired_by_update
-  
-  # send reports
-  Notifier::deliver_summary(:type => 'D', :host => ENV['EPFWIKI_HOST'])
-  Notifier::deliver_summary(:type => 'W', :host => ENV['EPFWIKI_HOST']) if Time.now.wday == 1 # monday, sunday is 0
-  Notifier::deliver_summary(:type => 'M', :host => ENV['EPFWIKI_HOST']) if Time.now.day == 1 # first day of the month
-  
-rescue => e
-  Notifier::deliver_email(User.find_central_admin, 'Error running job_daily', [], e.message + "\n" + e.backtrace.join("\n"))
-end
-
-def expire_all_pages
-  # expire cached pages
-  FileUtils.rm_rf File.expand_path("public/index.html", RAILS_ROOT)
-  FileUtils.rm_rf File.expand_path("public/portal/home.html", RAILS_ROOT)
-  FileUtils.rm_rf File.expand_path("public/portal/about.html", RAILS_ROOT)
-  #FileUtils.rm_rf File.expand_path("public/portal/search.html", RAILS_ROOT)
-  FileUtils.rm_rf File.expand_path("public/portal/wikis.html", RAILS_ROOT)
-  FileUtils.rm_rf File.expand_path("public/portal/users.html", RAILS_ROOT)  
-  FileUtils.rm_rf File.expand_path("public/portal/privacypolicy.html", RAILS_ROOT)  
-  FileUtils.rm_rf File.expand_path("public/portal/termsofuse.html", RAILS_ROOT)  
-  
-  # remove cache folders 
-  ['public/archives', 'public/pages/view', 'public/rss'].each do |f|
-    p = File.expand_path(f, RAILS_ROOT)
-    FileUtils.rm_r(p) if File.exists?(p)
-  end
-  
-end
\ No newline at end of file
diff --git a/source/lib/tasks/capistrano.rake b/source/lib/tasks/capistrano.rake
deleted file mode 100644
index d83042f..0000000
--- a/source/lib/tasks/capistrano.rake
+++ /dev/null
@@ -1,102 +0,0 @@
-# =============================================================================
-# A set of rake tasks for invoking the Capistrano automation utility.
-# =============================================================================
-
-# Invoke the given actions via Capistrano
-def cap(*parameters)
-  begin
-    require 'rubygems'
-  rescue LoadError
-    # no rubygems to load, so we fail silently
-  end
-
-  require 'capistrano/cli'
-
-  STDERR.puts "Capistrano/Rake integration is deprecated."
-  STDERR.puts "Please invoke the 'cap' command directly: `cap #{parameters.join(" ")}'"
-
-  Capistrano::CLI.new(parameters.map { |param| param.to_s }).execute!
-end
-
-namespace :remote do
-  desc "Removes unused releases from the releases directory."
-  task(:cleanup) { cap :cleanup }
-
-  desc "Used only for deploying when the spinner isn't running."
-  task(:cold_deploy) { cap :cold_deploy }
-
-  desc "A macro-task that updates the code, fixes the symlink, and restarts the application servers."
-  task(:deploy) { cap :deploy }
-
-  desc "Similar to deploy, but it runs the migrate task on the new release before updating the symlink."
-  task(:deploy_with_migrations) { cap :deploy_with_migrations }
-
-  desc "Displays the diff between HEAD and what was last deployed."
-  task(:diff_from_last_deploy) { cap :diff_from_last_deploy }
-
-  desc "Disable the web server by writing a \"maintenance.html\" file to the web servers."
-  task(:disable_web) { cap :disable_web }
-
-  desc "Re-enable the web server by deleting any \"maintenance.html\" file."
-  task(:enable_web) { cap :enable_web }
-
-  desc "A simple task for performing one-off commands that may not require a full task to be written for them."
-  task(:invoke) { cap :invoke }
-
-  desc "Run the migrate rake task."
-  task(:migrate) { cap :migrate }
-
-  desc "Restart the FCGI processes on the app server."
-  task(:restart) { cap :restart }
-
-  desc "A macro-task that rolls back the code and restarts the application servers."
-  task(:rollback) { cap :rollback }
-
-  desc "Rollback the latest checked-out version to the previous one by fixing the symlinks and deleting the current release from all servers."
-  task(:rollback_code) { cap :rollback_code }
-
-  desc "Sets group permissions on checkout."
-  task(:set_permissions) { cap :set_permissions }
-
-  desc "Set up the expected application directory structure on all boxes"
-  task(:setup) { cap :setup }
-
-  desc "Begin an interactive Capistrano session."
-  task(:shell) { cap :shell }
-
-  desc "Enumerate and describe every available task."
-  task(:show_tasks) { cap :show_tasks, '-q' }
-
-  desc "Start the spinner daemon for the application (requires script/spin)."
-  task(:spinner) { cap :spinner }
-
-  desc "Update the 'current' symlink to point to the latest version of the application's code."
-  task(:symlink) { cap :symlink }
-
-  desc "Updates the code and fixes the symlink under a transaction"
-  task(:update) { cap :update }
-
-  desc "Update all servers with the latest release of the source code."
-  task(:update_code) { cap :update_code }
-
-  desc "Update the currently released version of the software directly via an SCM update operation"
-  task(:update_current) { cap :update_current }
-
-  desc "Execute a specific action using capistrano"
-  task :exec do
-    unless ENV['ACTION']
-      raise "Please specify an action (or comma separated list of actions) via the ACTION environment variable"
-    end
-
-    actions = ENV['ACTION'].split(",")
-    actions.concat(ENV['PARAMS'].split(" ")) if ENV['PARAMS']
-
-    cap(*actions)
-  end
-end
-
-desc "Push the latest revision into production (delegates to remote:deploy)"
-task :deploy => "remote:deploy"
-
-desc "Rollback to the release before the current release in production (delegates to remote:rollback)"
-task :rollback => "remote:rollback"
diff --git a/source/lib/tasks/epfwiki.rake b/source/lib/tasks/epfwiki.rake
deleted file mode 100644
index d3b1db4..0000000
--- a/source/lib/tasks/epfwiki.rake
+++ /dev/null
@@ -1,14 +0,0 @@
-namespace :test do
-
-  desc 'Test Coverage'
-  task :rcoverage do
-    rm_f "rcoverage"
-    rm_f "rcoverage.data"
-    rcov = "rcov --rails --aggregate rcoverage.data --text-summary -Ilib"
-    system("#{rcov} --no-html test/unit/*_test.rb")
-    system("#{rcov} --no-html test/functional/*_test.rb")
-    system("#{rcov} --html test/integration/*_test.rb")
-    system("open rcoverage/index.html")
-  end
-
-end
\ No newline at end of file
diff --git a/source/lib/validations.rb b/source/lib/validations.rb
deleted file mode 100644
index ac9099d..0000000
--- a/source/lib/validations.rb
+++ /dev/null
@@ -1,14 +0,0 @@
-#--######################################################################
-# Copyright (c) 2006 Logica
-# 
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# 
-# Onno van der Straaten:: initial implementation
-#++######################################################################
-# {Copyright (c) 2006 Logica}[link:files/COPYRIGHT.html]
-
diff --git a/source/log/readme b/source/log/readme
deleted file mode 100644
index c372b16..0000000
--- a/source/log/readme
+++ /dev/null
@@ -1 +0,0 @@
-created to 'add' log folder to CVS
\ No newline at end of file
diff --git a/source/public/.htaccess b/source/public/.htaccess
deleted file mode 100644
index 7e122c8..0000000
--- a/source/public/.htaccess
+++ /dev/null
@@ -1,57 +0,0 @@
-# General Apache options
-AddHandler fastcgi-script .fcgi
-AddHandler cgi-script .cgi
-Options +FollowSymLinks +ExecCGI
-
-# If you don't want Rails to look in certain directories,
-# use the following rewrite rules so that Apache won't rewrite certain requests
-# 
-# Example:
-#   RewriteCond %{REQUEST_URI} ^/notrails.*
-#   RewriteRule .* - [L]
-
-# Redirect all requests not available on the filesystem to Rails
-# By default the cgi dispatcher is used which is very slow
-# 
-# For better performance replace the dispatcher with the fastcgi one
-#
-# Example:
-#   RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]
-RewriteEngine On
-
-RewriteCond %{DOCUMENT_ROOT}/system/maintenance.html -f
-RewriteCond %{SCRIPT_FILENAME} !maintenance.html
-RewriteRule ^.*$ /system/maintenance.html [L]
-
-
-# If your Rails application is accessed via an Alias directive,
-# then you MUST also set the RewriteBase in this htaccess file.
-#
-# Example:
-#   Alias /myrailsapp /path/to/myrailsapp/public
-#   RewriteBase /myrailsapp
-
-RewriteCond %{REQUEST_URI} ^/bp.*
-RewriteRule .* - [L]
-
-RewriteCond %{REQUEST_URI} ^/stylesheets.*
-RewriteRule .* - [L]
-
-RewriteCond %{REQUEST_URI} ^/javascripts.*
-RewriteRule .* - [L]
-
-RewriteCond %{REQUEST_URI} ^/images.*
-RewriteRule .* - [L]
-
-RewriteRule ^$ index.html [QSA]
-RewriteRule ^([^.]+)$ $1.html [QSA]
-RewriteCond %{REQUEST_FILENAME} !-f
-RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]
-
-# In case Rails experiences terminal errors
-# Instead of displaying this message you can supply a file here which will be rendered instead
-# 
-# Example:
-#   ErrorDocument 500 /500.html
-#
-ErrorDocument 500 "<h2>Application error</h2>Rails application failed to start properly"
\ No newline at end of file
diff --git a/source/public/404.html b/source/public/404.html
deleted file mode 100644
index 0e18456..0000000
--- a/source/public/404.html
+++ /dev/null
@@ -1,8 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-   "http://www.w3.org/TR/html4/loose.dtd">
-<html>
-<body>
-  <h1>File not found</h1>
-  <p>Change this error message for pages not found in public/404.html</p>
-</body>
-</html>
\ No newline at end of file
diff --git a/source/public/500.html b/source/public/500.html
deleted file mode 100644
index a1001a0..0000000
--- a/source/public/500.html
+++ /dev/null
@@ -1,8 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-   "http://www.w3.org/TR/html4/loose.dtd">
-<html>
-<body>
-  <h1>Application error (Apache)</h1>
-  <p>Change this error message for exceptions thrown outside of an action (like in Dispatcher setups or broken Ruby code) in public/500.html</p>
-</body>
-</html>
\ No newline at end of file
diff --git a/source/public/dispatch.cgi b/source/public/dispatch.cgi
deleted file mode 100644
index 3848806..0000000
--- a/source/public/dispatch.cgi
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/usr/bin/ruby1.8
-
-require File.dirname(__FILE__) + "/../config/environment" unless defined?(RAILS_ROOT)
-
-# If you're using RubyGems and mod_ruby, this require should be changed to an absolute path one, like:
-# "/usr/local/lib/ruby/gems/1.8/gems/rails-0.8.0/lib/dispatcher" -- otherwise performance is severely impaired
-require "dispatcher"
-
-ADDITIONAL_LOAD_PATHS.reverse.each { |dir| $:.unshift(dir) if File.directory?(dir) } if defined?(Apache::RubyRun)
-Dispatcher.dispatch
\ No newline at end of file
diff --git a/source/public/dispatch.fcgi b/source/public/dispatch.fcgi
deleted file mode 100644
index f9504e7..0000000
--- a/source/public/dispatch.fcgi
+++ /dev/null
@@ -1,38 +0,0 @@
-#!/usr/bin/ruby
-#
-# You may specify the path to the FastCGI crash log (a log of unhandled
-# exceptions which forced the FastCGI instance to exit, great for debugging)
-# and the number of requests to process before running garbage collection.
-#
-# By default, the FastCGI crash log is RAILS_ROOT/log/fastcgi.crash.log
-# and the GC period is nil (turned off).  A reasonable number of requests
-# could range from 10-100 depending on the memory footprint of your app.
-#
-# Example:
-#   # Default log path, normal GC behavior.
-#   RailsFCGIHandler.process!
-#
-#   # Default log path, 50 requests between GC.
-#   RailsFCGIHandler.process! nil, 50
-#
-#   # Custom log path, normal GC behavior.
-#   RailsFCGIHandler.process! '/var/log/myapp_fcgi_crash.log'
-#
-
-require File.dirname(__FILE__) + "/../config/environment"
-require 'fcgi_handler'
-
-# see http://wiki.dreamhost.com/index.php/Rails#Performance_Notes
-# TODO (but not now) this doesn't work
- class RailsFCGIHandler
- private
-   def frao_handler(signal)
-     dispatcher_log :info, "asked to terminate immediately"
-     dispatcher_log :info, "frao handler working its magic!"
-     restart_handler(signal)
-   end
-   alias_method :exit_now_handler, :frao_handler
- end
-
-RailsFCGIHandler.process!
-
diff --git a/source/public/dispatch.rb b/source/public/dispatch.rb
deleted file mode 100644
index 4b89b01..0000000
--- a/source/public/dispatch.rb
+++ /dev/null
@@ -1,11 +0,0 @@
-#!c:/ruby/bin/ruby
-
-require File.dirname(__FILE__) + "/../config/environment" unless defined?(RAILS_ROOT)
-
-# If you're using RubyGems and mod_ruby, this require should be changed to an absolute path one, like:
-# "/usr/local/lib/ruby/gems/1.8/gems/rails-0.8.0/lib/dispatcher" -- otherwise performance is severely impaired
-# require "dispatcher"
-require "C:\ruby\lib\ruby\gems\1.8\gems\rails-0.14.2\lib\dispatcher"
-
-ADDITIONAL_LOAD_PATHS.reverse.each { |dir| $:.unshift(dir) if File.directory?(dir) } if defined?(Apache::RubyRun)
-Dispatcher.dispatch
\ No newline at end of file
diff --git a/source/public/favicon.ico b/source/public/favicon.ico
deleted file mode 100644
index d8201cc..0000000
--- a/source/public/favicon.ico
+++ /dev/null
Binary files differ
diff --git a/source/public/images/arrow.gif b/source/public/images/arrow.gif
deleted file mode 100644
index 24e7d60..0000000
--- a/source/public/images/arrow.gif
+++ /dev/null
Binary files differ
diff --git a/source/public/images/arrow2.gif b/source/public/images/arrow2.gif
deleted file mode 100644
index 641c65a..0000000
--- a/source/public/images/arrow2.gif
+++ /dev/null
Binary files differ
diff --git a/source/public/images/back_to_top.gif b/source/public/images/back_to_top.gif
deleted file mode 100644
index 8fcd5a3..0000000
--- a/source/public/images/back_to_top.gif
+++ /dev/null
Binary files differ
diff --git a/source/public/images/baseline.png b/source/public/images/baseline.png
deleted file mode 100644
index b0c761d..0000000
--- a/source/public/images/baseline.png
+++ /dev/null
Binary files differ
diff --git a/source/public/images/busy.gif b/source/public/images/busy.gif
deleted file mode 100644
index 7dacfb1..0000000
--- a/source/public/images/busy.gif
+++ /dev/null
Binary files differ
diff --git a/source/public/images/checkin.gif b/source/public/images/checkin.gif
deleted file mode 100644
index 3085488..0000000
--- a/source/public/images/checkin.gif
+++ /dev/null
Binary files differ
diff --git a/source/public/images/checkin2.GIF b/source/public/images/checkin2.GIF
deleted file mode 100644
index 9fb040a..0000000
--- a/source/public/images/checkin2.GIF
+++ /dev/null
Binary files differ
diff --git a/source/public/images/checkout.gif b/source/public/images/checkout.gif
deleted file mode 100644
index 5fa6755..0000000
--- a/source/public/images/checkout.gif
+++ /dev/null
Binary files differ
diff --git a/source/public/images/checkout2.gif b/source/public/images/checkout2.gif
deleted file mode 100644
index 73c1b5b..0000000
--- a/source/public/images/checkout2.gif
+++ /dev/null
Binary files differ
diff --git a/source/public/images/collapse.gif b/source/public/images/collapse.gif
deleted file mode 100644
index 3f6541f..0000000
--- a/source/public/images/collapse.gif
+++ /dev/null
Binary files differ
diff --git a/source/public/images/collapse_all.gif b/source/public/images/collapse_all.gif
deleted file mode 100644
index 38f7019..0000000
--- a/source/public/images/collapse_all.gif
+++ /dev/null
Binary files differ
diff --git a/source/public/images/comment.gif b/source/public/images/comment.gif
deleted file mode 100644
index e5d480e..0000000
--- a/source/public/images/comment.gif
+++ /dev/null
Binary files differ
diff --git a/source/public/images/comment2.png b/source/public/images/comment2.png
deleted file mode 100644
index fc616b4..0000000
--- a/source/public/images/comment2.png
+++ /dev/null
Binary files differ
diff --git a/source/public/images/comment2_zw.png b/source/public/images/comment2_zw.png
deleted file mode 100644
index 19aea76..0000000
--- a/source/public/images/comment2_zw.png
+++ /dev/null
Binary files differ
diff --git a/source/public/images/comment_gs.gif b/source/public/images/comment_gs.gif
deleted file mode 100644
index 4ab51ac..0000000
--- a/source/public/images/comment_gs.gif
+++ /dev/null
Binary files differ
diff --git a/source/public/images/comment_large.gif b/source/public/images/comment_large.gif
deleted file mode 100644
index fc4aa32..0000000
--- a/source/public/images/comment_large.gif
+++ /dev/null
Binary files differ
diff --git a/source/public/images/compare.PNG b/source/public/images/compare.PNG
deleted file mode 100644
index 01e5e8d..0000000
--- a/source/public/images/compare.PNG
+++ /dev/null
Binary files differ
diff --git a/source/public/images/compare.gif b/source/public/images/compare.gif
deleted file mode 100644
index 5807912..0000000
--- a/source/public/images/compare.gif
+++ /dev/null
Binary files differ
diff --git a/source/public/images/csv.gif b/source/public/images/csv.gif
deleted file mode 100644
index c31cb21..0000000
--- a/source/public/images/csv.gif
+++ /dev/null
Binary files differ
diff --git a/source/public/images/delete.png b/source/public/images/delete.png
deleted file mode 100644
index 225bb77..0000000
--- a/source/public/images/delete.png
+++ /dev/null
Binary files differ
diff --git a/source/public/images/down.png b/source/public/images/down.png
deleted file mode 100644
index 5e9ba7f..0000000
--- a/source/public/images/down.png
+++ /dev/null
Binary files differ
diff --git a/source/public/images/edit.gif b/source/public/images/edit.gif
deleted file mode 100644
index d154c91..0000000
--- a/source/public/images/edit.gif
+++ /dev/null
Binary files differ
diff --git a/source/public/images/epf_logo.jpg b/source/public/images/epf_logo.jpg
deleted file mode 100644
index 18742d7..0000000
--- a/source/public/images/epf_logo.jpg
+++ /dev/null
Binary files differ
diff --git a/source/public/images/epfwiki_infra_overview.jpg b/source/public/images/epfwiki_infra_overview.jpg
deleted file mode 100644
index a0faee1..0000000
--- a/source/public/images/epfwiki_infra_overview.jpg
+++ /dev/null
Binary files differ
diff --git a/source/public/images/error.png b/source/public/images/error.png
deleted file mode 100644
index b4fe06e..0000000
--- a/source/public/images/error.png
+++ /dev/null
Binary files differ
diff --git a/source/public/images/expand.gif b/source/public/images/expand.gif
deleted file mode 100644
index 2c0fe8f..0000000
--- a/source/public/images/expand.gif
+++ /dev/null
Binary files differ
diff --git a/source/public/images/expand_all.gif b/source/public/images/expand_all.gif
deleted file mode 100644
index 8a18a39..0000000
--- a/source/public/images/expand_all.gif
+++ /dev/null
Binary files differ
diff --git a/source/public/images/extlink.gif b/source/public/images/extlink.gif
deleted file mode 100644
index bbc8b4e..0000000
--- a/source/public/images/extlink.gif
+++ /dev/null
Binary files differ
diff --git a/source/public/images/extlink2.gif b/source/public/images/extlink2.gif
deleted file mode 100644
index e1a0eed..0000000
--- a/source/public/images/extlink2.gif
+++ /dev/null
Binary files differ
diff --git a/source/public/images/first_page.png b/source/public/images/first_page.png
deleted file mode 100644
index 6bd805a..0000000
--- a/source/public/images/first_page.png
+++ /dev/null
Binary files differ
diff --git a/source/public/images/first_page_disabled.png b/source/public/images/first_page_disabled.png
deleted file mode 100644
index 7de1a0e..0000000
--- a/source/public/images/first_page_disabled.png
+++ /dev/null
Binary files differ
diff --git a/source/public/images/format_txt.png b/source/public/images/format_txt.png
deleted file mode 100644
index bf0de68..0000000
--- a/source/public/images/format_txt.png
+++ /dev/null
Binary files differ
diff --git a/source/public/images/harvest.gif b/source/public/images/harvest.gif
deleted file mode 100644
index 52c4ee2..0000000
--- a/source/public/images/harvest.gif
+++ /dev/null
Binary files differ
diff --git a/source/public/images/info.png b/source/public/images/info.png
deleted file mode 100644
index 60bbc43..0000000
--- a/source/public/images/info.png
+++ /dev/null
Binary files differ
diff --git a/source/public/images/last_page.png b/source/public/images/last_page.png
deleted file mode 100644
index a5f0452..0000000
--- a/source/public/images/last_page.png
+++ /dev/null
Binary files differ
diff --git a/source/public/images/last_page_disabled.png b/source/public/images/last_page_disabled.png
deleted file mode 100644
index 70187f8..0000000
--- a/source/public/images/last_page_disabled.png
+++ /dev/null
Binary files differ
diff --git a/source/public/images/link.gif b/source/public/images/link.gif
deleted file mode 100644
index 827dc26..0000000
--- a/source/public/images/link.gif
+++ /dev/null
Binary files differ
diff --git a/source/public/images/link_gs.gif b/source/public/images/link_gs.gif
deleted file mode 100644
index df67f03..0000000
--- a/source/public/images/link_gs.gif
+++ /dev/null
Binary files differ
diff --git a/source/public/images/new.png b/source/public/images/new.png
deleted file mode 100644
index c661bbc..0000000
--- a/source/public/images/new.png
+++ /dev/null
Binary files differ
diff --git a/source/public/images/next_page.png b/source/public/images/next_page.png
deleted file mode 100644
index f1122d4..0000000
--- a/source/public/images/next_page.png
+++ /dev/null
Binary files differ
diff --git a/source/public/images/next_page_disabled.png b/source/public/images/next_page_disabled.png
deleted file mode 100644
index dbb8348..0000000
--- a/source/public/images/next_page_disabled.png
+++ /dev/null
Binary files differ
diff --git a/source/public/images/notice.png b/source/public/images/notice.png
deleted file mode 100644
index 2e53447..0000000
--- a/source/public/images/notice.png
+++ /dev/null
Binary files differ
diff --git a/source/public/images/previous_page.png b/source/public/images/previous_page.png
deleted file mode 100644
index 895de55..0000000
--- a/source/public/images/previous_page.png
+++ /dev/null
Binary files differ
diff --git a/source/public/images/previous_page_disabled.png b/source/public/images/previous_page_disabled.png
deleted file mode 100644
index 7b355df..0000000
--- a/source/public/images/previous_page_disabled.png
+++ /dev/null
Binary files differ
diff --git a/source/public/images/progress.gif b/source/public/images/progress.gif
deleted file mode 100644
index f3b5688..0000000
--- a/source/public/images/progress.gif
+++ /dev/null
Binary files differ
diff --git a/source/public/images/report.gif b/source/public/images/report.gif
deleted file mode 100644
index 0016d00..0000000
--- a/source/public/images/report.gif
+++ /dev/null
Binary files differ
diff --git a/source/public/images/report.png b/source/public/images/report.png
deleted file mode 100644
index 9c31fef..0000000
--- a/source/public/images/report.png
+++ /dev/null
Binary files differ
diff --git a/source/public/images/rss.gif b/source/public/images/rss.gif
deleted file mode 100644
index e5f2114..0000000
--- a/source/public/images/rss.gif
+++ /dev/null
Binary files differ
diff --git a/source/public/images/save.gif b/source/public/images/save.gif
deleted file mode 100644
index 175092b..0000000
--- a/source/public/images/save.gif
+++ /dev/null
Binary files differ
diff --git a/source/public/images/sendpassword.png b/source/public/images/sendpassword.png
deleted file mode 100644
index 686555c..0000000
--- a/source/public/images/sendpassword.png
+++ /dev/null
Binary files differ
diff --git a/source/public/images/shim.gif b/source/public/images/shim.gif
deleted file mode 100644
index 0aba790..0000000
--- a/source/public/images/shim.gif
+++ /dev/null
Binary files differ
diff --git a/source/public/images/site.gif b/source/public/images/site.gif
deleted file mode 100644
index f8ef9b6..0000000
--- a/source/public/images/site.gif
+++ /dev/null
Binary files differ
diff --git a/source/public/images/site.png b/source/public/images/site.png
deleted file mode 100644
index 8f41c91..0000000
--- a/source/public/images/site.png
+++ /dev/null
Binary files differ
diff --git a/source/public/images/site_logo.jpg b/source/public/images/site_logo.jpg
deleted file mode 100644
index 036adf5..0000000
--- a/source/public/images/site_logo.jpg
+++ /dev/null
Binary files differ
diff --git a/source/public/images/success.png b/source/public/images/success.png
deleted file mode 100644
index 96fcfea..0000000
--- a/source/public/images/success.png
+++ /dev/null
Binary files differ
diff --git a/source/public/images/tab.png b/source/public/images/tab.png
deleted file mode 100644
index 8d36152..0000000
--- a/source/public/images/tab.png
+++ /dev/null
Binary files differ
diff --git a/source/public/images/tab2.png b/source/public/images/tab2.png
deleted file mode 100644
index dad2622..0000000
--- a/source/public/images/tab2.png
+++ /dev/null
Binary files differ
diff --git a/source/public/images/tab2_background.png b/source/public/images/tab2_background.png
deleted file mode 100644
index 6857bc1..0000000
--- a/source/public/images/tab2_background.png
+++ /dev/null
Binary files differ
diff --git a/source/public/images/tab3.png b/source/public/images/tab3.png
deleted file mode 100644
index cac988e..0000000
--- a/source/public/images/tab3.png
+++ /dev/null
Binary files differ
diff --git a/source/public/images/tab3_background.png b/source/public/images/tab3_background.png
deleted file mode 100644
index e86141f..0000000
--- a/source/public/images/tab3_background.png
+++ /dev/null
Binary files differ
diff --git a/source/public/images/tab4.png b/source/public/images/tab4.png
deleted file mode 100644
index cac988e..0000000
--- a/source/public/images/tab4.png
+++ /dev/null
Binary files differ
diff --git a/source/public/images/tab_background.png b/source/public/images/tab_background.png
deleted file mode 100644
index 28f892d..0000000
--- a/source/public/images/tab_background.png
+++ /dev/null
Binary files differ
diff --git a/source/public/images/txt.gif b/source/public/images/txt.gif
deleted file mode 100644
index e737ec7..0000000
--- a/source/public/images/txt.gif
+++ /dev/null
Binary files differ
diff --git a/source/public/images/undo_checkout.gif b/source/public/images/undo_checkout.gif
deleted file mode 100644
index 7c7ec4d..0000000
--- a/source/public/images/undo_checkout.gif
+++ /dev/null
Binary files differ
diff --git a/source/public/images/up.png b/source/public/images/up.png
deleted file mode 100644
index 277f496..0000000
--- a/source/public/images/up.png
+++ /dev/null
Binary files differ
diff --git a/source/public/images/userC.gif b/source/public/images/userC.gif
deleted file mode 100644
index 5fd935e..0000000
--- a/source/public/images/userC.gif
+++ /dev/null
Binary files differ
diff --git a/source/public/images/userC.png b/source/public/images/userC.png
deleted file mode 100644
index 8ed7283..0000000
--- a/source/public/images/userC.png
+++ /dev/null
Binary files differ
diff --git a/source/public/images/userN.gif b/source/public/images/userN.gif
deleted file mode 100644
index 5037f65..0000000
--- a/source/public/images/userN.gif
+++ /dev/null
Binary files differ
diff --git a/source/public/images/userN.png b/source/public/images/userN.png
deleted file mode 100644
index fc43d37..0000000
--- a/source/public/images/userN.png
+++ /dev/null
Binary files differ
diff --git a/source/public/images/userY.gif b/source/public/images/userY.gif
deleted file mode 100644
index 87c10f6..0000000
--- a/source/public/images/userY.gif
+++ /dev/null
Binary files differ
diff --git a/source/public/images/userY.png b/source/public/images/userY.png
deleted file mode 100644
index 2299f1d..0000000
--- a/source/public/images/userY.png
+++ /dev/null
Binary files differ
diff --git a/source/public/images/version.png b/source/public/images/version.png
deleted file mode 100644
index 91f3ddc..0000000
--- a/source/public/images/version.png
+++ /dev/null
Binary files differ
diff --git a/source/public/images/version_zw.png b/source/public/images/version_zw.png
deleted file mode 100644
index 90eb9d1..0000000
--- a/source/public/images/version_zw.png
+++ /dev/null
Binary files differ
diff --git a/source/public/images/versions.gif b/source/public/images/versions.gif
deleted file mode 100644
index 1956c38..0000000
--- a/source/public/images/versions.gif
+++ /dev/null
Binary files differ
diff --git a/source/public/images/versions_gs.gif b/source/public/images/versions_gs.gif
deleted file mode 100644
index f8c9350..0000000
--- a/source/public/images/versions_gs.gif
+++ /dev/null
Binary files differ
diff --git a/source/public/images/warning.png b/source/public/images/warning.png
deleted file mode 100644
index b81b2ce..0000000
--- a/source/public/images/warning.png
+++ /dev/null
Binary files differ
diff --git a/source/public/javascripts/application.js b/source/public/javascripts/application.js
deleted file mode 100644
index fe45776..0000000
--- a/source/public/javascripts/application.js
+++ /dev/null
@@ -1,2 +0,0 @@
-// Place your application-specific JavaScript functions and classes here
-// This file is automatically included by javascript_include_tag :defaults
diff --git a/source/public/javascripts/contentpage.js b/source/public/javascripts/contentpage.js
deleted file mode 100644
index 3828aff..0000000
--- a/source/public/javascripts/contentpage.js
+++ /dev/null
@@ -1,242 +0,0 @@
-//------------------------------------------------------------------------------
-// Copyright (c) 2005, 2006 IBM Corporation and others.
-// All rights reserved. This program and the accompanying materials
-// are made available under the terms of the Eclipse Public License v1.0
-// which accompanies this distribution, and is available at
-// http://www.eclipse.org/legal/epl-v10.html
-// 
-// Contributors:
-// IBM Corporation - initial implementation
-//------------------------------------------------------------------------------
-
-var collapseSectionsByDefault = false;
-var firstSection;
-var expandImage;
-var collapseImage;
-var expandAllImage;
-var collapseAllImage;
-var backToTopImage;
-var shimImage;
-var expandMessage = "Expand All Sections";
-var collapseMessage = "Collapse All Sections";
-var backMessage = "Back to top";
-
-// Creates the collapsible section links.
-function createSectionLinks(tagName, classSelector, imgPath) {
-	expandImage = imgPath + 'expand.gif';	
-	collapseImage = imgPath + 'collapse.gif';
-	expandAllImage = imgPath + 'expand_all.gif';	
-	collapseAllImage = imgPath + 'collapse_all.gif';
-	backToTopImage = imgPath + 'back_to_top.gif';
-	shimImage = imgPath + 'shim.gif';
-	
-	if (document.getElementsByTagName) {
-		var elements = document.getElementsByTagName(tagName);
-		var sectionElements = new Array(elements.length);
-		var totalLinks = 0;
-		for (var i = 0; i < elements.length; i++) {
-			var element = elements[i];
-			if (element.className == classSelector) {
-				sectionElements[totalLinks++] = element;
-			}
-		}
-		sectionElements.length = totalLinks;
-		sectionCollapseDivs = new Array(totalLinks);
-		sectionCollapseLinks = new Array(totalLinks);
-		firstSection = sectionElements[0];
-		for (var i = 0; i < sectionElements.length; i++) {
-			var element = sectionElements[i];
-			var siblingContainer;
-			if (document.createElement && (siblingContainer = document.createElement('div')) && siblingContainer.style) {	
-				var nextSibling = element.nextSibling;
-				element.parentNode.insertBefore(siblingContainer, nextSibling);
-				var nextElement = sectionElements[i + 1];
-				while (nextSibling != nextElement && nextSibling != null && nextSibling.className != 'copyright') {
-					var toMove = nextSibling;
-					nextSibling = nextSibling.nextSibling;
-					siblingContainer.appendChild(toMove);
-				}
-				if (collapseSectionsByDefault) {
-    				siblingContainer.style.display = 'none';
-    			}
-    			sectionCollapseDivs[i] = siblingContainer;
-    			createCollapsibleSection(element, siblingContainer, i);
-			}
-			else {
-				return;
-			}
-		}
-		createExpandCollapseAllSectionsLinks(sectionElements[0]);
-	}
-}
-
-// Creates a collapsible section.
-function createCollapsibleSection(element, siblingContainer, index) {
-	if (document.createElement) {
-		// Add a spacing between the sections.
-		var sectionSeparator = document.createElement('img');
-		sectionSeparator.src = shimImage;
-		sectionSeparator.height = '3';
-		sectionSeparator.border = '0';
-		sectionSeparator.align = 'absmiddle';
-		element.parentNode.insertBefore(sectionSeparator, element);
-		
-		// Add a expand/collapse link to the section heading.
-		var span = document.createElement('span');
-		var link = document.createElement('a');
-		link.collapseDiv = siblingContainer;
-		link.href = '#';
-		var image = document.createElement('img');
-		if (collapseSectionsByDefault) {
-			image.src = expandImage;
-		}
-		else {
-			image.src = collapseImage;
-		}
-		image.width = '17';
-		image.height = '15';
-		image.border = '0';
-		image.align = 'absmiddle';
-		link.appendChild(image);
-		link.onclick = expandCollapseSection;
-		sectionCollapseLinks[index] = link;
-		span.appendChild(link);
-		element.insertBefore(span, element.firstChild);
-		element.appendChild(document.createTextNode(String.fromCharCode(160)));
-		element.appendChild(document.createTextNode(String.fromCharCode(160)));
-    	
-		// Add a Back To Top link in the section heading.
-		createBackToTopLink(siblingContainer);
-	}
-}
-
-// Creates a Back to top link.
-function createBackToTopLink(element) {
-	var div;
-	
-	if (document.createElement && (div = document.createElement('div'))) {
-		div.className = 'backToTopLink';
-		div.align = 'right';
-		var image = document.createElement('img');
-		image.src = backToTopImage;
-		image.width = '16';
-		image.height = '16';
-		image.border = '0';
-		image.align = 'absmiddle';		
-		var link = document.createElement('a');
-		link.className = 'backToTopLink';
-		link.href = '#';
-		link.appendChild(image);
-		var span = document.createElement('span');
-		span.className = 'backToTopLink';
-		span.appendChild(document.createTextNode(backMessage));		
-		link.appendChild(span);
-		div.appendChild(link);
-		element.appendChild(div);
-	}
-}
-
-// Expands or collapses a section based on the received event.
-function expandCollapseSection(evt) {
-	if (this.collapseDiv.style.display == '') {
-		this.parentNode.parentNode.nextSibling.style.display = 'none';
-		this.firstChild.src = expandImage;
-	}
-	else {
-		this.parentNode.parentNode.nextSibling.style.display = '';
-		this.firstChild.src = collapseImage;
-	}
-	if (evt && evt.preventDefault) {
-		evt.preventDefault();
-	}
-	return false;
-}
-
-// Creates the Expand All and Collapse All Sections links.
-function createExpandCollapseAllSectionsLinks(firstElement) {
-	var div;
-		
-	if (document.createElement && (div = document.createElement('div'))) {
-		div.className = 'expandCollapseLink';
-		div.align = 'right';
-		var image = document.createElement('img');
-		image.src = expandAllImage;
-		image.width = '16';
-		image.height = '16';
-		image.border = '0';
-		image.align = 'absmiddle';		
-		var link = document.createElement('a');
-		link.className = 'expandCollapseLink';
-		link.href = '#';
-		link.appendChild(image);
-		link.onclick = expandAll;
-		var span = document.createElement('span');
-		span.className = 'expandCollapseText';
-		span.appendChild(document.createTextNode(expandMessage));
-		link.appendChild(span);
-		div.appendChild(link);
-		div.appendChild(document.createTextNode(String.fromCharCode(160)));
-		div.appendChild(document.createTextNode(String.fromCharCode(160)));
-		div.appendChild(document.createTextNode(String.fromCharCode(160)));
-		div.appendChild(document.createTextNode(String.fromCharCode(160)));						
-		
-		image = document.createElement('img');
-		image.src = collapseAllImage;
-		image.width = '16';
-		image.height = '16';
-		image.border = '0';
-		image.align = 'absmiddle';
-		link = document.createElement('a');
-		link.className = 'expandCollapseLink';
-		link.href = '#';
-		link.appendChild(image);
-		link.onclick = collapseAll;
-		span = document.createElement('span');
-		span.className = 'expandCollapseText';
-		span.appendChild(document.createTextNode(collapseMessage));				
-		link.appendChild(span);
-		div.appendChild(link);
-		
-		/*
-		var overviewSeparator = document.getElementById("overviewSeparator");
-		overviewSeparator.parentNode.insertBefore(div, overviewSeparator);
-		*/
-		if (firstSection != null) {
-			firstSection.parentNode.insertBefore(div, firstSection);
-		}
-	}
-}
-
-// Expands all sections.
-function expandAll(evt) {
-	 for (var i = 0; i < sectionCollapseDivs.length; i++) {
-	 	sectionCollapseDivs[i].style.display = '';
-	 	sectionCollapseLinks[i].firstChild.src = collapseImage;
-	 }
-	 if (evt && evt.preventDefault) {
-	 	evt.preventDefault();
-	 }
-	 return false;
-}
-
-// Collapses all sections.
-function collapseAll(evt) {
-	for (var i = 0; i < sectionCollapseDivs.length; i++) {
-		sectionCollapseDivs[i].style.display = 'none';
-		sectionCollapseLinks[i].firstChild.src = expandImage;
-	}
-	if (evt && evt.preventDefault) {
-		evt.preventDefault();
-	}
-	return false;
-}
-
-// This temporary function helps to resolve Javascript errors in the migrated RUP
-// content pages. It will be removed once the corresponding .js files are being
-// migrated along with the HTML content pages.
-function ReferenceHelpTopic (topicName, book , fileName) {
-   document.write("<i>"+ topicName + "<\/i>");
-}
-
-
-
diff --git a/source/public/javascripts/controls.js b/source/public/javascripts/controls.js
deleted file mode 100644
index 8c273f8..0000000
--- a/source/public/javascripts/controls.js
+++ /dev/null
@@ -1,833 +0,0 @@
-// Copyright (c) 2005, 2006 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
-//           (c) 2005, 2006 Ivan Krstic (http://blogs.law.harvard.edu/ivan)
-//           (c) 2005, 2006 Jon Tirsen (http://www.tirsen.com)
-// Contributors:
-//  Richard Livsey
-//  Rahul Bhargava
-//  Rob Wills
-// 
-// script.aculo.us is freely distributable under the terms of an MIT-style license.
-// For details, see the script.aculo.us web site: http://script.aculo.us/
-
-// Autocompleter.Base handles all the autocompletion functionality 
-// that's independent of the data source for autocompletion. This
-// includes drawing the autocompletion menu, observing keyboard
-// and mouse events, and similar.
-//
-// Specific autocompleters need to provide, at the very least, 
-// a getUpdatedChoices function that will be invoked every time
-// the text inside the monitored textbox changes. This method 
-// should get the text for which to provide autocompletion by
-// invoking this.getToken(), NOT by directly accessing
-// this.element.value. This is to allow incremental tokenized
-// autocompletion. Specific auto-completion logic (AJAX, etc)
-// belongs in getUpdatedChoices.
-//
-// Tokenized incremental autocompletion is enabled automatically
-// when an autocompleter is instantiated with the 'tokens' option
-// in the options parameter, e.g.:
-// new Ajax.Autocompleter('id','upd', '/url/', { tokens: ',' });
-// will incrementally autocomplete with a comma as the token.
-// Additionally, ',' in the above example can be replaced with
-// a token array, e.g. { tokens: [',', '\n'] } which
-// enables autocompletion on multiple tokens. This is most 
-// useful when one of the tokens is \n (a newline), as it 
-// allows smart autocompletion after linebreaks.
-
-if(typeof Effect == 'undefined')
-  throw("controls.js requires including script.aculo.us' effects.js library");
-
-var Autocompleter = {}
-Autocompleter.Base = function() {};
-Autocompleter.Base.prototype = {
-  baseInitialize: function(element, update, options) {
-    this.element     = $(element); 
-    this.update      = $(update);  
-    this.hasFocus    = false; 
-    this.changed     = false; 
-    this.active      = false; 
-    this.index       = 0;     
-    this.entryCount  = 0;
-
-    if(this.setOptions)
-      this.setOptions(options);
-    else
-      this.options = options || {};
-
-    this.options.paramName    = this.options.paramName || this.element.name;
-    this.options.tokens       = this.options.tokens || [];
-    this.options.frequency    = this.options.frequency || 0.4;
-    this.options.minChars     = this.options.minChars || 1;
-    this.options.onShow       = this.options.onShow || 
-      function(element, update){ 
-        if(!update.style.position || update.style.position=='absolute') {
-          update.style.position = 'absolute';
-          Position.clone(element, update, {
-            setHeight: false, 
-            offsetTop: element.offsetHeight
-          });
-        }
-        Effect.Appear(update,{duration:0.15});
-      };
-    this.options.onHide = this.options.onHide || 
-      function(element, update){ new Effect.Fade(update,{duration:0.15}) };
-
-    if(typeof(this.options.tokens) == 'string') 
-      this.options.tokens = new Array(this.options.tokens);
-
-    this.observer = null;
-    
-    this.element.setAttribute('autocomplete','off');
-
-    Element.hide(this.update);
-
-    Event.observe(this.element, "blur", this.onBlur.bindAsEventListener(this));
-    Event.observe(this.element, "keypress", this.onKeyPress.bindAsEventListener(this));
-  },
-
-  show: function() {
-    if(Element.getStyle(this.update, 'display')=='none') this.options.onShow(this.element, this.update);
-    if(!this.iefix && 
-      (navigator.appVersion.indexOf('MSIE')>0) &&
-      (navigator.userAgent.indexOf('Opera')<0) &&
-      (Element.getStyle(this.update, 'position')=='absolute')) {
-      new Insertion.After(this.update, 
-       '<iframe id="' + this.update.id + '_iefix" '+
-       'style="display:none;position:absolute;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0);" ' +
-       'src="javascript:false;" frameborder="0" scrolling="no"></iframe>');
-      this.iefix = $(this.update.id+'_iefix');
-    }
-    if(this.iefix) setTimeout(this.fixIEOverlapping.bind(this), 50);
-  },
-  
-  fixIEOverlapping: function() {
-    Position.clone(this.update, this.iefix, {setTop:(!this.update.style.height)});
-    this.iefix.style.zIndex = 1;
-    this.update.style.zIndex = 2;
-    Element.show(this.iefix);
-  },
-
-  hide: function() {
-    this.stopIndicator();
-    if(Element.getStyle(this.update, 'display')!='none') this.options.onHide(this.element, this.update);
-    if(this.iefix) Element.hide(this.iefix);
-  },
-
-  startIndicator: function() {
-    if(this.options.indicator) Element.show(this.options.indicator);
-  },
-
-  stopIndicator: function() {
-    if(this.options.indicator) Element.hide(this.options.indicator);
-  },
-
-  onKeyPress: function(event) {
-    if(this.active)
-      switch(event.keyCode) {
-       case Event.KEY_TAB:
-       case Event.KEY_RETURN:
-         this.selectEntry();
-         Event.stop(event);
-       case Event.KEY_ESC:
-         this.hide();
-         this.active = false;
-         Event.stop(event);
-         return;
-       case Event.KEY_LEFT:
-       case Event.KEY_RIGHT:
-         return;
-       case Event.KEY_UP:
-         this.markPrevious();
-         this.render();
-         if(navigator.appVersion.indexOf('AppleWebKit')>0) Event.stop(event);
-         return;
-       case Event.KEY_DOWN:
-         this.markNext();
-         this.render();
-         if(navigator.appVersion.indexOf('AppleWebKit')>0) Event.stop(event);
-         return;
-      }
-     else 
-       if(event.keyCode==Event.KEY_TAB || event.keyCode==Event.KEY_RETURN || 
-         (navigator.appVersion.indexOf('AppleWebKit') > 0 && event.keyCode == 0)) return;
-
-    this.changed = true;
-    this.hasFocus = true;
-
-    if(this.observer) clearTimeout(this.observer);
-      this.observer = 
-        setTimeout(this.onObserverEvent.bind(this), this.options.frequency*1000);
-  },
-
-  activate: function() {
-    this.changed = false;
-    this.hasFocus = true;
-    this.getUpdatedChoices();
-  },
-
-  onHover: function(event) {
-    var element = Event.findElement(event, 'LI');
-    if(this.index != element.autocompleteIndex) 
-    {
-        this.index = element.autocompleteIndex;
-        this.render();
-    }
-    Event.stop(event);
-  },
-  
-  onClick: function(event) {
-    var element = Event.findElement(event, 'LI');
-    this.index = element.autocompleteIndex;
-    this.selectEntry();
-    this.hide();
-  },
-  
-  onBlur: function(event) {
-    // needed to make click events working
-    setTimeout(this.hide.bind(this), 250);
-    this.hasFocus = false;
-    this.active = false;     
-  }, 
-  
-  render: function() {
-    if(this.entryCount > 0) {
-      for (var i = 0; i < this.entryCount; i++)
-        this.index==i ? 
-          Element.addClassName(this.getEntry(i),"selected") : 
-          Element.removeClassName(this.getEntry(i),"selected");
-        
-      if(this.hasFocus) { 
-        this.show();
-        this.active = true;
-      }
-    } else {
-      this.active = false;
-      this.hide();
-    }
-  },
-  
-  markPrevious: function() {
-    if(this.index > 0) this.index--
-      else this.index = this.entryCount-1;
-    this.getEntry(this.index).scrollIntoView(true);
-  },
-  
-  markNext: function() {
-    if(this.index < this.entryCount-1) this.index++
-      else this.index = 0;
-    this.getEntry(this.index).scrollIntoView(false);
-  },
-  
-  getEntry: function(index) {
-    return this.update.firstChild.childNodes[index];
-  },
-  
-  getCurrentEntry: function() {
-    return this.getEntry(this.index);
-  },
-  
-  selectEntry: function() {
-    this.active = false;
-    this.updateElement(this.getCurrentEntry());
-  },
-
-  updateElement: function(selectedElement) {
-    if (this.options.updateElement) {
-      this.options.updateElement(selectedElement);
-      return;
-    }
-    var value = '';
-    if (this.options.select) {
-      var nodes = document.getElementsByClassName(this.options.select, selectedElement) || [];
-      if(nodes.length>0) value = Element.collectTextNodes(nodes[0], this.options.select);
-    } else
-      value = Element.collectTextNodesIgnoreClass(selectedElement, 'informal');
-    
-    var lastTokenPos = this.findLastToken();
-    if (lastTokenPos != -1) {
-      var newValue = this.element.value.substr(0, lastTokenPos + 1);
-      var whitespace = this.element.value.substr(lastTokenPos + 1).match(/^\s+/);
-      if (whitespace)
-        newValue += whitespace[0];
-      this.element.value = newValue + value;
-    } else {
-      this.element.value = value;
-    }
-    this.element.focus();
-    
-    if (this.options.afterUpdateElement)
-      this.options.afterUpdateElement(this.element, selectedElement);
-  },
-
-  updateChoices: function(choices) {
-    if(!this.changed && this.hasFocus) {
-      this.update.innerHTML = choices;
-      Element.cleanWhitespace(this.update);
-      Element.cleanWhitespace(this.update.down());
-
-      if(this.update.firstChild && this.update.down().childNodes) {
-        this.entryCount = 
-          this.update.down().childNodes.length;
-        for (var i = 0; i < this.entryCount; i++) {
-          var entry = this.getEntry(i);
-          entry.autocompleteIndex = i;
-          this.addObservers(entry);
-        }
-      } else { 
-        this.entryCount = 0;
-      }
-
-      this.stopIndicator();
-      this.index = 0;
-      
-      if(this.entryCount==1 && this.options.autoSelect) {
-        this.selectEntry();
-        this.hide();
-      } else {
-        this.render();
-      }
-    }
-  },
-
-  addObservers: function(element) {
-    Event.observe(element, "mouseover", this.onHover.bindAsEventListener(this));
-    Event.observe(element, "click", this.onClick.bindAsEventListener(this));
-  },
-
-  onObserverEvent: function() {
-    this.changed = false;   
-    if(this.getToken().length>=this.options.minChars) {
-      this.startIndicator();
-      this.getUpdatedChoices();
-    } else {
-      this.active = false;
-      this.hide();
-    }
-  },
-
-  getToken: function() {
-    var tokenPos = this.findLastToken();
-    if (tokenPos != -1)
-      var ret = this.element.value.substr(tokenPos + 1).replace(/^\s+/,'').replace(/\s+$/,'');
-    else
-      var ret = this.element.value;
-
-    return /\n/.test(ret) ? '' : ret;
-  },
-
-  findLastToken: function() {
-    var lastTokenPos = -1;
-
-    for (var i=0; i<this.options.tokens.length; i++) {
-      var thisTokenPos = this.element.value.lastIndexOf(this.options.tokens[i]);
-      if (thisTokenPos > lastTokenPos)
-        lastTokenPos = thisTokenPos;
-    }
-    return lastTokenPos;
-  }
-}
-
-Ajax.Autocompleter = Class.create();
-Object.extend(Object.extend(Ajax.Autocompleter.prototype, Autocompleter.Base.prototype), {
-  initialize: function(element, update, url, options) {
-    this.baseInitialize(element, update, options);
-    this.options.asynchronous  = true;
-    this.options.onComplete    = this.onComplete.bind(this);
-    this.options.defaultParams = this.options.parameters || null;
-    this.url                   = url;
-  },
-
-  getUpdatedChoices: function() {
-    entry = encodeURIComponent(this.options.paramName) + '=' + 
-      encodeURIComponent(this.getToken());
-
-    this.options.parameters = this.options.callback ?
-      this.options.callback(this.element, entry) : entry;
-
-    if(this.options.defaultParams) 
-      this.options.parameters += '&' + this.options.defaultParams;
-
-    new Ajax.Request(this.url, this.options);
-  },
-
-  onComplete: function(request) {
-    this.updateChoices(request.responseText);
-  }
-
-});
-
-// The local array autocompleter. Used when you'd prefer to
-// inject an array of autocompletion options into the page, rather
-// than sending out Ajax queries, which can be quite slow sometimes.
-//
-// The constructor takes four parameters. The first two are, as usual,
-// the id of the monitored textbox, and id of the autocompletion menu.
-// The third is the array you want to autocomplete from, and the fourth
-// is the options block.
-//
-// Extra local autocompletion options:
-// - choices - How many autocompletion choices to offer
-//
-// - partialSearch - If false, the autocompleter will match entered
-//                    text only at the beginning of strings in the 
-//                    autocomplete array. Defaults to true, which will
-//                    match text at the beginning of any *word* in the
-//                    strings in the autocomplete array. If you want to
-//                    search anywhere in the string, additionally set
-//                    the option fullSearch to true (default: off).
-//
-// - fullSsearch - Search anywhere in autocomplete array strings.
-//
-// - partialChars - How many characters to enter before triggering
-//                   a partial match (unlike minChars, which defines
-//                   how many characters are required to do any match
-//                   at all). Defaults to 2.
-//
-// - ignoreCase - Whether to ignore case when autocompleting.
-//                 Defaults to true.
-//
-// It's possible to pass in a custom function as the 'selector' 
-// option, if you prefer to write your own autocompletion logic.
-// In that case, the other options above will not apply unless
-// you support them.
-
-Autocompleter.Local = Class.create();
-Autocompleter.Local.prototype = Object.extend(new Autocompleter.Base(), {
-  initialize: function(element, update, array, options) {
-    this.baseInitialize(element, update, options);
-    this.options.array = array;
-  },
-
-  getUpdatedChoices: function() {
-    this.updateChoices(this.options.selector(this));
-  },
-
-  setOptions: function(options) {
-    this.options = Object.extend({
-      choices: 10,
-      partialSearch: true,
-      partialChars: 2,
-      ignoreCase: true,
-      fullSearch: false,
-      selector: function(instance) {
-        var ret       = []; // Beginning matches
-        var partial   = []; // Inside matches
-        var entry     = instance.getToken();
-        var count     = 0;
-
-        for (var i = 0; i < instance.options.array.length &&  
-          ret.length < instance.options.choices ; i++) { 
-
-          var elem = instance.options.array[i];
-          var foundPos = instance.options.ignoreCase ? 
-            elem.toLowerCase().indexOf(entry.toLowerCase()) : 
-            elem.indexOf(entry);
-
-          while (foundPos != -1) {
-            if (foundPos == 0 && elem.length != entry.length) { 
-              ret.push("<li><strong>" + elem.substr(0, entry.length) + "</strong>" + 
-                elem.substr(entry.length) + "</li>");
-              break;
-            } else if (entry.length >= instance.options.partialChars && 
-              instance.options.partialSearch && foundPos != -1) {
-              if (instance.options.fullSearch || /\s/.test(elem.substr(foundPos-1,1))) {
-                partial.push("<li>" + elem.substr(0, foundPos) + "<strong>" +
-                  elem.substr(foundPos, entry.length) + "</strong>" + elem.substr(
-                  foundPos + entry.length) + "</li>");
-                break;
-              }
-            }
-
-            foundPos = instance.options.ignoreCase ? 
-              elem.toLowerCase().indexOf(entry.toLowerCase(), foundPos + 1) : 
-              elem.indexOf(entry, foundPos + 1);
-
-          }
-        }
-        if (partial.length)
-          ret = ret.concat(partial.slice(0, instance.options.choices - ret.length))
-        return "<ul>" + ret.join('') + "</ul>";
-      }
-    }, options || {});
-  }
-});
-
-// AJAX in-place editor
-//
-// see documentation on http://wiki.script.aculo.us/scriptaculous/show/Ajax.InPlaceEditor
-
-// Use this if you notice weird scrolling problems on some browsers,
-// the DOM might be a bit confused when this gets called so do this
-// waits 1 ms (with setTimeout) until it does the activation
-Field.scrollFreeActivate = function(field) {
-  setTimeout(function() {
-    Field.activate(field);
-  }, 1);
-}
-
-Ajax.InPlaceEditor = Class.create();
-Ajax.InPlaceEditor.defaultHighlightColor = "#FFFF99";
-Ajax.InPlaceEditor.prototype = {
-  initialize: function(element, url, options) {
-    this.url = url;
-    this.element = $(element);
-
-    this.options = Object.extend({
-      paramName: "value",
-      okButton: true,
-      okText: "ok",
-      cancelLink: true,
-      cancelText: "cancel",
-      savingText: "Saving...",
-      clickToEditText: "Click to edit",
-      okText: "ok",
-      rows: 1,
-      onComplete: function(transport, element) {
-        new Effect.Highlight(element, {startcolor: this.options.highlightcolor});
-      },
-      onFailure: function(transport) {
-        alert("Error communicating with the server: " + transport.responseText.stripTags());
-      },
-      callback: function(form) {
-        return Form.serialize(form);
-      },
-      handleLineBreaks: true,
-      loadingText: 'Loading...',
-      savingClassName: 'inplaceeditor-saving',
-      loadingClassName: 'inplaceeditor-loading',
-      formClassName: 'inplaceeditor-form',
-      highlightcolor: Ajax.InPlaceEditor.defaultHighlightColor,
-      highlightendcolor: "#FFFFFF",
-      externalControl: null,
-      submitOnBlur: false,
-      ajaxOptions: {},
-      evalScripts: false
-    }, options || {});
-
-    if(!this.options.formId && this.element.id) {
-      this.options.formId = this.element.id + "-inplaceeditor";
-      if ($(this.options.formId)) {
-        // there's already a form with that name, don't specify an id
-        this.options.formId = null;
-      }
-    }
-    
-    if (this.options.externalControl) {
-      this.options.externalControl = $(this.options.externalControl);
-    }
-    
-    this.originalBackground = Element.getStyle(this.element, 'background-color');
-    if (!this.originalBackground) {
-      this.originalBackground = "transparent";
-    }
-    
-    this.element.title = this.options.clickToEditText;
-    
-    this.onclickListener = this.enterEditMode.bindAsEventListener(this);
-    this.mouseoverListener = this.enterHover.bindAsEventListener(this);
-    this.mouseoutListener = this.leaveHover.bindAsEventListener(this);
-    Event.observe(this.element, 'click', this.onclickListener);
-    Event.observe(this.element, 'mouseover', this.mouseoverListener);
-    Event.observe(this.element, 'mouseout', this.mouseoutListener);
-    if (this.options.externalControl) {
-      Event.observe(this.options.externalControl, 'click', this.onclickListener);
-      Event.observe(this.options.externalControl, 'mouseover', this.mouseoverListener);
-      Event.observe(this.options.externalControl, 'mouseout', this.mouseoutListener);
-    }
-  },
-  enterEditMode: function(evt) {
-    if (this.saving) return;
-    if (this.editing) return;
-    this.editing = true;
-    this.onEnterEditMode();
-    if (this.options.externalControl) {
-      Element.hide(this.options.externalControl);
-    }
-    Element.hide(this.element);
-    this.createForm();
-    this.element.parentNode.insertBefore(this.form, this.element);
-    if (!this.options.loadTextURL) Field.scrollFreeActivate(this.editField);
-    // stop the event to avoid a page refresh in Safari
-    if (evt) {
-      Event.stop(evt);
-    }
-    return false;
-  },
-  createForm: function() {
-    this.form = document.createElement("form");
-    this.form.id = this.options.formId;
-    Element.addClassName(this.form, this.options.formClassName)
-    this.form.onsubmit = this.onSubmit.bind(this);
-
-    this.createEditField();
-
-    if (this.options.textarea) {
-      var br = document.createElement("br");
-      this.form.appendChild(br);
-    }
-
-    if (this.options.okButton) {
-      okButton = document.createElement("input");
-      okButton.type = "submit";
-      okButton.value = this.options.okText;
-      okButton.className = 'editor_ok_button';
-      this.form.appendChild(okButton);
-    }
-
-    if (this.options.cancelLink) {
-      cancelLink = document.createElement("a");
-      cancelLink.href = "#";
-      cancelLink.appendChild(document.createTextNode(this.options.cancelText));
-      cancelLink.onclick = this.onclickCancel.bind(this);
-      cancelLink.className = 'editor_cancel';      
-      this.form.appendChild(cancelLink);
-    }
-  },
-  hasHTMLLineBreaks: function(string) {
-    if (!this.options.handleLineBreaks) return false;
-    return string.match(/<br/i) || string.match(/<p>/i);
-  },
-  convertHTMLLineBreaks: function(string) {
-    return string.replace(/<br>/gi, "\n").replace(/<br\/>/gi, "\n").replace(/<\/p>/gi, "\n").replace(/<p>/gi, "");
-  },
-  createEditField: function() {
-    var text;
-    if(this.options.loadTextURL) {
-      text = this.options.loadingText;
-    } else {
-      text = this.getText();
-    }
-
-    var obj = this;
-    
-    if (this.options.rows == 1 && !this.hasHTMLLineBreaks(text)) {
-      this.options.textarea = false;
-      var textField = document.createElement("input");
-      textField.obj = this;
-      textField.type = "text";
-      textField.name = this.options.paramName;
-      textField.value = text;
-      textField.style.backgroundColor = this.options.highlightcolor;
-      textField.className = 'editor_field';
-      var size = this.options.size || this.options.cols || 0;
-      if (size != 0) textField.size = size;
-      if (this.options.submitOnBlur)
-        textField.onblur = this.onSubmit.bind(this);
-      this.editField = textField;
-    } else {
-      this.options.textarea = true;
-      var textArea = document.createElement("textarea");
-      textArea.obj = this;
-      textArea.name = this.options.paramName;
-      textArea.value = this.convertHTMLLineBreaks(text);
-      textArea.rows = this.options.rows;
-      textArea.cols = this.options.cols || 40;
-      textArea.className = 'editor_field';      
-      if (this.options.submitOnBlur)
-        textArea.onblur = this.onSubmit.bind(this);
-      this.editField = textArea;
-    }
-    
-    if(this.options.loadTextURL) {
-      this.loadExternalText();
-    }
-    this.form.appendChild(this.editField);
-  },
-  getText: function() {
-    return this.element.innerHTML;
-  },
-  loadExternalText: function() {
-    Element.addClassName(this.form, this.options.loadingClassName);
-    this.editField.disabled = true;
-    new Ajax.Request(
-      this.options.loadTextURL,
-      Object.extend({
-        asynchronous: true,
-        onComplete: this.onLoadedExternalText.bind(this)
-      }, this.options.ajaxOptions)
-    );
-  },
-  onLoadedExternalText: function(transport) {
-    Element.removeClassName(this.form, this.options.loadingClassName);
-    this.editField.disabled = false;
-    this.editField.value = transport.responseText.stripTags();
-    Field.scrollFreeActivate(this.editField);
-  },
-  onclickCancel: function() {
-    this.onComplete();
-    this.leaveEditMode();
-    return false;
-  },
-  onFailure: function(transport) {
-    this.options.onFailure(transport);
-    if (this.oldInnerHTML) {
-      this.element.innerHTML = this.oldInnerHTML;
-      this.oldInnerHTML = null;
-    }
-    return false;
-  },
-  onSubmit: function() {
-    // onLoading resets these so we need to save them away for the Ajax call
-    var form = this.form;
-    var value = this.editField.value;
-    
-    // do this first, sometimes the ajax call returns before we get a chance to switch on Saving...
-    // which means this will actually switch on Saving... *after* we've left edit mode causing Saving...
-    // to be displayed indefinitely
-    this.onLoading();
-    
-    if (this.options.evalScripts) {
-      new Ajax.Request(
-        this.url, Object.extend({
-          parameters: this.options.callback(form, value),
-          onComplete: this.onComplete.bind(this),
-          onFailure: this.onFailure.bind(this),
-          asynchronous:true, 
-          evalScripts:true
-        }, this.options.ajaxOptions));
-    } else  {
-      new Ajax.Updater(
-        { success: this.element,
-          // don't update on failure (this could be an option)
-          failure: null }, 
-        this.url, Object.extend({
-          parameters: this.options.callback(form, value),
-          onComplete: this.onComplete.bind(this),
-          onFailure: this.onFailure.bind(this)
-        }, this.options.ajaxOptions));
-    }
-    // stop the event to avoid a page refresh in Safari
-    if (arguments.length > 1) {
-      Event.stop(arguments[0]);
-    }
-    return false;
-  },
-  onLoading: function() {
-    this.saving = true;
-    this.removeForm();
-    this.leaveHover();
-    this.showSaving();
-  },
-  showSaving: function() {
-    this.oldInnerHTML = this.element.innerHTML;
-    this.element.innerHTML = this.options.savingText;
-    Element.addClassName(this.element, this.options.savingClassName);
-    this.element.style.backgroundColor = this.originalBackground;
-    Element.show(this.element);
-  },
-  removeForm: function() {
-    if(this.form) {
-      if (this.form.parentNode) Element.remove(this.form);
-      this.form = null;
-    }
-  },
-  enterHover: function() {
-    if (this.saving) return;
-    this.element.style.backgroundColor = this.options.highlightcolor;
-    if (this.effect) {
-      this.effect.cancel();
-    }
-    Element.addClassName(this.element, this.options.hoverClassName)
-  },
-  leaveHover: function() {
-    if (this.options.backgroundColor) {
-      this.element.style.backgroundColor = this.oldBackground;
-    }
-    Element.removeClassName(this.element, this.options.hoverClassName)
-    if (this.saving) return;
-    this.effect = new Effect.Highlight(this.element, {
-      startcolor: this.options.highlightcolor,
-      endcolor: this.options.highlightendcolor,
-      restorecolor: this.originalBackground
-    });
-  },
-  leaveEditMode: function() {
-    Element.removeClassName(this.element, this.options.savingClassName);
-    this.removeForm();
-    this.leaveHover();
-    this.element.style.backgroundColor = this.originalBackground;
-    Element.show(this.element);
-    if (this.options.externalControl) {
-      Element.show(this.options.externalControl);
-    }
-    this.editing = false;
-    this.saving = false;
-    this.oldInnerHTML = null;
-    this.onLeaveEditMode();
-  },
-  onComplete: function(transport) {
-    this.leaveEditMode();
-    this.options.onComplete.bind(this)(transport, this.element);
-  },
-  onEnterEditMode: function() {},
-  onLeaveEditMode: function() {},
-  dispose: function() {
-    if (this.oldInnerHTML) {
-      this.element.innerHTML = this.oldInnerHTML;
-    }
-    this.leaveEditMode();
-    Event.stopObserving(this.element, 'click', this.onclickListener);
-    Event.stopObserving(this.element, 'mouseover', this.mouseoverListener);
-    Event.stopObserving(this.element, 'mouseout', this.mouseoutListener);
-    if (this.options.externalControl) {
-      Event.stopObserving(this.options.externalControl, 'click', this.onclickListener);
-      Event.stopObserving(this.options.externalControl, 'mouseover', this.mouseoverListener);
-      Event.stopObserving(this.options.externalControl, 'mouseout', this.mouseoutListener);
-    }
-  }
-};
-
-Ajax.InPlaceCollectionEditor = Class.create();
-Object.extend(Ajax.InPlaceCollectionEditor.prototype, Ajax.InPlaceEditor.prototype);
-Object.extend(Ajax.InPlaceCollectionEditor.prototype, {
-  createEditField: function() {
-    if (!this.cached_selectTag) {
-      var selectTag = document.createElement("select");
-      var collection = this.options.collection || [];
-      var optionTag;
-      collection.each(function(e,i) {
-        optionTag = document.createElement("option");
-        optionTag.value = (e instanceof Array) ? e[0] : e;
-        if((typeof this.options.value == 'undefined') && 
-          ((e instanceof Array) ? this.element.innerHTML == e[1] : e == optionTag.value)) optionTag.selected = true;
-        if(this.options.value==optionTag.value) optionTag.selected = true;
-        optionTag.appendChild(document.createTextNode((e instanceof Array) ? e[1] : e));
-        selectTag.appendChild(optionTag);
-      }.bind(this));
-      this.cached_selectTag = selectTag;
-    }
-
-    this.editField = this.cached_selectTag;
-    if(this.options.loadTextURL) this.loadExternalText();
-    this.form.appendChild(this.editField);
-    this.options.callback = function(form, value) {
-      return "value=" + encodeURIComponent(value);
-    }
-  }
-});
-
-// Delayed observer, like Form.Element.Observer, 
-// but waits for delay after last key input
-// Ideal for live-search fields
-
-Form.Element.DelayedObserver = Class.create();
-Form.Element.DelayedObserver.prototype = {
-  initialize: function(element, delay, callback) {
-    this.delay     = delay || 0.5;
-    this.element   = $(element);
-    this.callback  = callback;
-    this.timer     = null;
-    this.lastValue = $F(this.element); 
-    Event.observe(this.element,'keyup',this.delayedListener.bindAsEventListener(this));
-  },
-  delayedListener: function(event) {
-    if(this.lastValue == $F(this.element)) return;
-    if(this.timer) clearTimeout(this.timer);
-    this.timer = setTimeout(this.onTimerEvent.bind(this), this.delay * 1000);
-    this.lastValue = $F(this.element);
-  },
-  onTimerEvent: function() {
-    this.timer = null;
-    this.callback(this.element, $F(this.element));
-  }
-};
diff --git a/source/public/javascripts/dragdrop.js b/source/public/javascripts/dragdrop.js
deleted file mode 100644
index c71ddb8..0000000
--- a/source/public/javascripts/dragdrop.js
+++ /dev/null
@@ -1,942 +0,0 @@
-// Copyright (c) 2005, 2006 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
-//           (c) 2005, 2006 Sammi Williams (http://www.oriontransfer.co.nz, sammi@oriontransfer.co.nz)
-// 
-// script.aculo.us is freely distributable under the terms of an MIT-style license.
-// For details, see the script.aculo.us web site: http://script.aculo.us/
-
-if(typeof Effect == 'undefined')
-  throw("dragdrop.js requires including script.aculo.us' effects.js library");
-
-var Droppables = {
-  drops: [],
-
-  remove: function(element) {
-    this.drops = this.drops.reject(function(d) { return d.element==$(element) });
-  },
-
-  add: function(element) {
-    element = $(element);
-    var options = Object.extend({
-      greedy:     true,
-      hoverclass: null,
-      tree:       false
-    }, arguments[1] || {});
-
-    // cache containers
-    if(options.containment) {
-      options._containers = [];
-      var containment = options.containment;
-      if((typeof containment == 'object') && 
-        (containment.constructor == Array)) {
-        containment.each( function(c) { options._containers.push($(c)) });
-      } else {
-        options._containers.push($(containment));
-      }
-    }
-    
-    if(options.accept) options.accept = [options.accept].flatten();
-
-    Element.makePositioned(element); // fix IE
-    options.element = element;
-
-    this.drops.push(options);
-  },
-  
-  findDeepestChild: function(drops) {
-    deepest = drops[0];
-      
-    for (i = 1; i < drops.length; ++i)
-      if (Element.isParent(drops[i].element, deepest.element))
-        deepest = drops[i];
-    
-    return deepest;
-  },
-
-  isContained: function(element, drop) {
-    var containmentNode;
-    if(drop.tree) {
-      containmentNode = element.treeNode; 
-    } else {
-      containmentNode = element.parentNode;
-    }
-    return drop._containers.detect(function(c) { return containmentNode == c });
-  },
-  
-  isAffected: function(point, element, drop) {
-    return (
-      (drop.element!=element) &&
-      ((!drop._containers) ||
-        this.isContained(element, drop)) &&
-      ((!drop.accept) ||
-        (Element.classNames(element).detect( 
-          function(v) { return drop.accept.include(v) } ) )) &&
-      Position.within(drop.element, point[0], point[1]) );
-  },
-
-  deactivate: function(drop) {
-    if(drop.hoverclass)
-      Element.removeClassName(drop.element, drop.hoverclass);
-    this.last_active = null;
-  },
-
-  activate: function(drop) {
-    if(drop.hoverclass)
-      Element.addClassName(drop.element, drop.hoverclass);
-    this.last_active = drop;
-  },
-
-  show: function(point, element) {
-    if(!this.drops.length) return;
-    var affected = [];
-    
-    if(this.last_active) this.deactivate(this.last_active);
-    this.drops.each( function(drop) {
-      if(Droppables.isAffected(point, element, drop))
-        affected.push(drop);
-    });
-        
-    if(affected.length>0) {
-      drop = Droppables.findDeepestChild(affected);
-      Position.within(drop.element, point[0], point[1]);
-      if(drop.onHover)
-        drop.onHover(element, drop.element, Position.overlap(drop.overlap, drop.element));
-      
-      Droppables.activate(drop);
-    }
-  },
-
-  fire: function(event, element) {
-    if(!this.last_active) return;
-    Position.prepare();
-
-    if (this.isAffected([Event.pointerX(event), Event.pointerY(event)], element, this.last_active))
-      if (this.last_active.onDrop) 
-        this.last_active.onDrop(element, this.last_active.element, event);
-  },
-
-  reset: function() {
-    if(this.last_active)
-      this.deactivate(this.last_active);
-  }
-}
-
-var Draggables = {
-  drags: [],
-  observers: [],
-  
-  register: function(draggable) {
-    if(this.drags.length == 0) {
-      this.eventMouseUp   = this.endDrag.bindAsEventListener(this);
-      this.eventMouseMove = this.updateDrag.bindAsEventListener(this);
-      this.eventKeypress  = this.keyPress.bindAsEventListener(this);
-      
-      Event.observe(document, "mouseup", this.eventMouseUp);
-      Event.observe(document, "mousemove", this.eventMouseMove);
-      Event.observe(document, "keypress", this.eventKeypress);
-    }
-    this.drags.push(draggable);
-  },
-  
-  unregister: function(draggable) {
-    this.drags = this.drags.reject(function(d) { return d==draggable });
-    if(this.drags.length == 0) {
-      Event.stopObserving(document, "mouseup", this.eventMouseUp);
-      Event.stopObserving(document, "mousemove", this.eventMouseMove);
-      Event.stopObserving(document, "keypress", this.eventKeypress);
-    }
-  },
-  
-  activate: function(draggable) {
-    if(draggable.options.delay) { 
-      this._timeout = setTimeout(function() { 
-        Draggables._timeout = null; 
-        window.focus(); 
-        Draggables.activeDraggable = draggable; 
-      }.bind(this), draggable.options.delay); 
-    } else {
-      window.focus(); // allows keypress events if window isn't currently focused, fails for Safari
-      this.activeDraggable = draggable;
-    }
-  },
-  
-  deactivate: function() {
-    this.activeDraggable = null;
-  },
-  
-  updateDrag: function(event) {
-    if(!this.activeDraggable) return;
-    var pointer = [Event.pointerX(event), Event.pointerY(event)];
-    // Mozilla-based browsers fire successive mousemove events with
-    // the same coordinates, prevent needless redrawing (moz bug?)
-    if(this._lastPointer && (this._lastPointer.inspect() == pointer.inspect())) return;
-    this._lastPointer = pointer;
-    
-    this.activeDraggable.updateDrag(event, pointer);
-  },
-  
-  endDrag: function(event) {
-    if(this._timeout) { 
-      clearTimeout(this._timeout); 
-      this._timeout = null; 
-    }
-    if(!this.activeDraggable) return;
-    this._lastPointer = null;
-    this.activeDraggable.endDrag(event);
-    this.activeDraggable = null;
-  },
-  
-  keyPress: function(event) {
-    if(this.activeDraggable)
-      this.activeDraggable.keyPress(event);
-  },
-  
-  addObserver: function(observer) {
-    this.observers.push(observer);
-    this._cacheObserverCallbacks();
-  },
-  
-  removeObserver: function(element) {  // element instead of observer fixes mem leaks
-    this.observers = this.observers.reject( function(o) { return o.element==element });
-    this._cacheObserverCallbacks();
-  },
-  
-  notify: function(eventName, draggable, event) {  // 'onStart', 'onEnd', 'onDrag'
-    if(this[eventName+'Count'] > 0)
-      this.observers.each( function(o) {
-        if(o[eventName]) o[eventName](eventName, draggable, event);
-      });
-    if(draggable.options[eventName]) draggable.options[eventName](draggable, event);
-  },
-  
-  _cacheObserverCallbacks: function() {
-    ['onStart','onEnd','onDrag'].each( function(eventName) {
-      Draggables[eventName+'Count'] = Draggables.observers.select(
-        function(o) { return o[eventName]; }
-      ).length;
-    });
-  }
-}
-
-/*--------------------------------------------------------------------------*/
-
-var Draggable = Class.create();
-Draggable._dragging    = {};
-
-Draggable.prototype = {
-  initialize: function(element) {
-    var defaults = {
-      handle: false,
-      reverteffect: function(element, top_offset, left_offset) {
-        var dur = Math.sqrt(Math.abs(top_offset^2)+Math.abs(left_offset^2))*0.02;
-        new Effect.Move(element, { x: -left_offset, y: -top_offset, duration: dur,
-          queue: {scope:'_draggable', position:'end'}
-        });
-      },
-      endeffect: function(element) {
-        var toOpacity = typeof element._opacity == 'number' ? element._opacity : 1.0;
-        new Effect.Opacity(element, {duration:0.2, from:0.7, to:toOpacity, 
-          queue: {scope:'_draggable', position:'end'},
-          afterFinish: function(){ 
-            Draggable._dragging[element] = false 
-          }
-        }); 
-      },
-      zindex: 1000,
-      revert: false,
-      scroll: false,
-      scrollSensitivity: 20,
-      scrollSpeed: 15,
-      snap: false,  // false, or xy or [x,y] or function(x,y){ return [x,y] }
-      delay: 0
-    };
-    
-    if(!arguments[1] || typeof arguments[1].endeffect == 'undefined')
-      Object.extend(defaults, {
-        starteffect: function(element) {
-          element._opacity = Element.getOpacity(element);
-          Draggable._dragging[element] = true;
-          new Effect.Opacity(element, {duration:0.2, from:element._opacity, to:0.7}); 
-        }
-      });
-    
-    var options = Object.extend(defaults, arguments[1] || {});
-
-    this.element = $(element);
-    
-    if(options.handle && (typeof options.handle == 'string'))
-      this.handle = this.element.down('.'+options.handle, 0);
-    
-    if(!this.handle) this.handle = $(options.handle);
-    if(!this.handle) this.handle = this.element;
-    
-    if(options.scroll && !options.scroll.scrollTo && !options.scroll.outerHTML) {
-      options.scroll = $(options.scroll);
-      this._isScrollChild = Element.childOf(this.element, options.scroll);
-    }
-
-    Element.makePositioned(this.element); // fix IE    
-
-    this.delta    = this.currentDelta();
-    this.options  = options;
-    this.dragging = false;   
-
-    this.eventMouseDown = this.initDrag.bindAsEventListener(this);
-    Event.observe(this.handle, "mousedown", this.eventMouseDown);
-    
-    Draggables.register(this);
-  },
-  
-  destroy: function() {
-    Event.stopObserving(this.handle, "mousedown", this.eventMouseDown);
-    Draggables.unregister(this);
-  },
-  
-  currentDelta: function() {
-    return([
-      parseInt(Element.getStyle(this.element,'left') || '0'),
-      parseInt(Element.getStyle(this.element,'top') || '0')]);
-  },
-  
-  initDrag: function(event) {
-    if(typeof Draggable._dragging[this.element] != 'undefined' &&
-      Draggable._dragging[this.element]) return;
-    if(Event.isLeftClick(event)) {    
-      // abort on form elements, fixes a Firefox issue
-      var src = Event.element(event);
-      if(src.tagName && (
-        src.tagName=='INPUT' ||
-        src.tagName=='SELECT' ||
-        src.tagName=='OPTION' ||
-        src.tagName=='BUTTON' ||
-        src.tagName=='TEXTAREA')) return;
-        
-      var pointer = [Event.pointerX(event), Event.pointerY(event)];
-      var pos     = Position.cumulativeOffset(this.element);
-      this.offset = [0,1].map( function(i) { return (pointer[i] - pos[i]) });
-      
-      Draggables.activate(this);
-      Event.stop(event);
-    }
-  },
-  
-  startDrag: function(event) {
-    this.dragging = true;
-    
-    if(this.options.zindex) {
-      this.originalZ = parseInt(Element.getStyle(this.element,'z-index') || 0);
-      this.element.style.zIndex = this.options.zindex;
-    }
-    
-    if(this.options.ghosting) {
-      this._clone = this.element.cloneNode(true);
-      Position.absolutize(this.element);
-      this.element.parentNode.insertBefore(this._clone, this.element);
-    }
-    
-    if(this.options.scroll) {
-      if (this.options.scroll == window) {
-        var where = this._getWindowScroll(this.options.scroll);
-        this.originalScrollLeft = where.left;
-        this.originalScrollTop = where.top;
-      } else {
-        this.originalScrollLeft = this.options.scroll.scrollLeft;
-        this.originalScrollTop = this.options.scroll.scrollTop;
-      }
-    }
-    
-    Draggables.notify('onStart', this, event);
-        
-    if(this.options.starteffect) this.options.starteffect(this.element);
-  },
-  
-  updateDrag: function(event, pointer) {
-    if(!this.dragging) this.startDrag(event);
-    Position.prepare();
-    Droppables.show(pointer, this.element);
-    Draggables.notify('onDrag', this, event);
-    
-    this.draw(pointer);
-    if(this.options.change) this.options.change(this);
-    
-    if(this.options.scroll) {
-      this.stopScrolling();
-      
-      var p;
-      if (this.options.scroll == window) {
-        with(this._getWindowScroll(this.options.scroll)) { p = [ left, top, left+width, top+height ]; }
-      } else {
-        p = Position.page(this.options.scroll);
-        p[0] += this.options.scroll.scrollLeft + Position.deltaX;
-        p[1] += this.options.scroll.scrollTop + Position.deltaY;
-        p.push(p[0]+this.options.scroll.offsetWidth);
-        p.push(p[1]+this.options.scroll.offsetHeight);
-      }
-      var speed = [0,0];
-      if(pointer[0] < (p[0]+this.options.scrollSensitivity)) speed[0] = pointer[0]-(p[0]+this.options.scrollSensitivity);
-      if(pointer[1] < (p[1]+this.options.scrollSensitivity)) speed[1] = pointer[1]-(p[1]+this.options.scrollSensitivity);
-      if(pointer[0] > (p[2]-this.options.scrollSensitivity)) speed[0] = pointer[0]-(p[2]-this.options.scrollSensitivity);
-      if(pointer[1] > (p[3]-this.options.scrollSensitivity)) speed[1] = pointer[1]-(p[3]-this.options.scrollSensitivity);
-      this.startScrolling(speed);
-    }
-    
-    // fix AppleWebKit rendering
-    if(navigator.appVersion.indexOf('AppleWebKit')>0) window.scrollBy(0,0);
-    
-    Event.stop(event);
-  },
-  
-  finishDrag: function(event, success) {
-    this.dragging = false;
-
-    if(this.options.ghosting) {
-      Position.relativize(this.element);
-      Element.remove(this._clone);
-      this._clone = null;
-    }
-
-    if(success) Droppables.fire(event, this.element);
-    Draggables.notify('onEnd', this, event);
-
-    var revert = this.options.revert;
-    if(revert && typeof revert == 'function') revert = revert(this.element);
-    
-    var d = this.currentDelta();
-    if(revert && this.options.reverteffect) {
-      this.options.reverteffect(this.element, 
-        d[1]-this.delta[1], d[0]-this.delta[0]);
-    } else {
-      this.delta = d;
-    }
-
-    if(this.options.zindex)
-      this.element.style.zIndex = this.originalZ;
-
-    if(this.options.endeffect) 
-      this.options.endeffect(this.element);
-      
-    Draggables.deactivate(this);
-    Droppables.reset();
-  },
-  
-  keyPress: function(event) {
-    if(event.keyCode!=Event.KEY_ESC) return;
-    this.finishDrag(event, false);
-    Event.stop(event);
-  },
-  
-  endDrag: function(event) {
-    if(!this.dragging) return;
-    this.stopScrolling();
-    this.finishDrag(event, true);
-    Event.stop(event);
-  },
-  
-  draw: function(point) {
-    var pos = Position.cumulativeOffset(this.element);
-    if(this.options.ghosting) {
-      var r   = Position.realOffset(this.element);
-      pos[0] += r[0] - Position.deltaX; pos[1] += r[1] - Position.deltaY;
-    }
-    
-    var d = this.currentDelta();
-    pos[0] -= d[0]; pos[1] -= d[1];
-    
-    if(this.options.scroll && (this.options.scroll != window && this._isScrollChild)) {
-      pos[0] -= this.options.scroll.scrollLeft-this.originalScrollLeft;
-      pos[1] -= this.options.scroll.scrollTop-this.originalScrollTop;
-    }
-    
-    var p = [0,1].map(function(i){ 
-      return (point[i]-pos[i]-this.offset[i]) 
-    }.bind(this));
-    
-    if(this.options.snap) {
-      if(typeof this.options.snap == 'function') {
-        p = this.options.snap(p[0],p[1],this);
-      } else {
-      if(this.options.snap instanceof Array) {
-        p = p.map( function(v, i) {
-          return Math.round(v/this.options.snap[i])*this.options.snap[i] }.bind(this))
-      } else {
-        p = p.map( function(v) {
-          return Math.round(v/this.options.snap)*this.options.snap }.bind(this))
-      }
-    }}
-    
-    var style = this.element.style;
-    if((!this.options.constraint) || (this.options.constraint=='horizontal'))
-      style.left = p[0] + "px";
-    if((!this.options.constraint) || (this.options.constraint=='vertical'))
-      style.top  = p[1] + "px";
-    
-    if(style.visibility=="hidden") style.visibility = ""; // fix gecko rendering
-  },
-  
-  stopScrolling: function() {
-    if(this.scrollInterval) {
-      clearInterval(this.scrollInterval);
-      this.scrollInterval = null;
-      Draggables._lastScrollPointer = null;
-    }
-  },
-  
-  startScrolling: function(speed) {
-    if(!(speed[0] || speed[1])) return;
-    this.scrollSpeed = [speed[0]*this.options.scrollSpeed,speed[1]*this.options.scrollSpeed];
-    this.lastScrolled = new Date();
-    this.scrollInterval = setInterval(this.scroll.bind(this), 10);
-  },
-  
-  scroll: function() {
-    var current = new Date();
-    var delta = current - this.lastScrolled;
-    this.lastScrolled = current;
-    if(this.options.scroll == window) {
-      with (this._getWindowScroll(this.options.scroll)) {
-        if (this.scrollSpeed[0] || this.scrollSpeed[1]) {
-          var d = delta / 1000;
-          this.options.scroll.scrollTo( left + d*this.scrollSpeed[0], top + d*this.scrollSpeed[1] );
-        }
-      }
-    } else {
-      this.options.scroll.scrollLeft += this.scrollSpeed[0] * delta / 1000;
-      this.options.scroll.scrollTop  += this.scrollSpeed[1] * delta / 1000;
-    }
-    
-    Position.prepare();
-    Droppables.show(Draggables._lastPointer, this.element);
-    Draggables.notify('onDrag', this);
-    if (this._isScrollChild) {
-      Draggables._lastScrollPointer = Draggables._lastScrollPointer || $A(Draggables._lastPointer);
-      Draggables._lastScrollPointer[0] += this.scrollSpeed[0] * delta / 1000;
-      Draggables._lastScrollPointer[1] += this.scrollSpeed[1] * delta / 1000;
-      if (Draggables._lastScrollPointer[0] < 0)
-        Draggables._lastScrollPointer[0] = 0;
-      if (Draggables._lastScrollPointer[1] < 0)
-        Draggables._lastScrollPointer[1] = 0;
-      this.draw(Draggables._lastScrollPointer);
-    }
-    
-    if(this.options.change) this.options.change(this);
-  },
-  
-  _getWindowScroll: function(w) {
-    var T, L, W, H;
-    with (w.document) {
-      if (w.document.documentElement && documentElement.scrollTop) {
-        T = documentElement.scrollTop;
-        L = documentElement.scrollLeft;
-      } else if (w.document.body) {
-        T = body.scrollTop;
-        L = body.scrollLeft;
-      }
-      if (w.innerWidth) {
-        W = w.innerWidth;
-        H = w.innerHeight;
-      } else if (w.document.documentElement && documentElement.clientWidth) {
-        W = documentElement.clientWidth;
-        H = documentElement.clientHeight;
-      } else {
-        W = body.offsetWidth;
-        H = body.offsetHeight
-      }
-    }
-    return { top: T, left: L, width: W, height: H };
-  }
-}
-
-/*--------------------------------------------------------------------------*/
-
-var SortableObserver = Class.create();
-SortableObserver.prototype = {
-  initialize: function(element, observer) {
-    this.element   = $(element);
-    this.observer  = observer;
-    this.lastValue = Sortable.serialize(this.element);
-  },
-  
-  onStart: function() {
-    this.lastValue = Sortable.serialize(this.element);
-  },
-  
-  onEnd: function() {
-    Sortable.unmark();
-    if(this.lastValue != Sortable.serialize(this.element))
-      this.observer(this.element)
-  }
-}
-
-var Sortable = {
-  SERIALIZE_RULE: /^[^_\-](?:[A-Za-z0-9\-\_]*)[_](.*)$/,
-  
-  sortables: {},
-  
-  _findRootElement: function(element) {
-    while (element.tagName != "BODY") {  
-      if(element.id && Sortable.sortables[element.id]) return element;
-      element = element.parentNode;
-    }
-  },
-
-  options: function(element) {
-    element = Sortable._findRootElement($(element));
-    if(!element) return;
-    return Sortable.sortables[element.id];
-  },
-  
-  destroy: function(element){
-    var s = Sortable.options(element);
-    
-    if(s) {
-      Draggables.removeObserver(s.element);
-      s.droppables.each(function(d){ Droppables.remove(d) });
-      s.draggables.invoke('destroy');
-      
-      delete Sortable.sortables[s.element.id];
-    }
-  },
-
-  create: function(element) {
-    element = $(element);
-    var options = Object.extend({ 
-      element:     element,
-      tag:         'li',       // assumes li children, override with tag: 'tagname'
-      dropOnEmpty: false,
-      tree:        false,
-      treeTag:     'ul',
-      overlap:     'vertical', // one of 'vertical', 'horizontal'
-      constraint:  'vertical', // one of 'vertical', 'horizontal', false
-      containment: element,    // also takes array of elements (or id's); or false
-      handle:      false,      // or a CSS class
-      only:        false,
-      delay:       0,
-      hoverclass:  null,
-      ghosting:    false,
-      scroll:      false,
-      scrollSensitivity: 20,
-      scrollSpeed: 15,
-      format:      this.SERIALIZE_RULE,
-      onChange:    Prototype.emptyFunction,
-      onUpdate:    Prototype.emptyFunction
-    }, arguments[1] || {});
-
-    // clear any old sortable with same element
-    this.destroy(element);
-
-    // build options for the draggables
-    var options_for_draggable = {
-      revert:      true,
-      scroll:      options.scroll,
-      scrollSpeed: options.scrollSpeed,
-      scrollSensitivity: options.scrollSensitivity,
-      delay:       options.delay,
-      ghosting:    options.ghosting,
-      constraint:  options.constraint,
-      handle:      options.handle };
-
-    if(options.starteffect)
-      options_for_draggable.starteffect = options.starteffect;
-
-    if(options.reverteffect)
-      options_for_draggable.reverteffect = options.reverteffect;
-    else
-      if(options.ghosting) options_for_draggable.reverteffect = function(element) {
-        element.style.top  = 0;
-        element.style.left = 0;
-      };
-
-    if(options.endeffect)
-      options_for_draggable.endeffect = options.endeffect;
-
-    if(options.zindex)
-      options_for_draggable.zindex = options.zindex;
-
-    // build options for the droppables  
-    var options_for_droppable = {
-      overlap:     options.overlap,
-      containment: options.containment,
-      tree:        options.tree,
-      hoverclass:  options.hoverclass,
-      onHover:     Sortable.onHover
-    }
-    
-    var options_for_tree = {
-      onHover:      Sortable.onEmptyHover,
-      overlap:      options.overlap,
-      containment:  options.containment,
-      hoverclass:   options.hoverclass
-    }
-
-    // fix for gecko engine
-    Element.cleanWhitespace(element); 
-
-    options.draggables = [];
-    options.droppables = [];
-
-    // drop on empty handling
-    if(options.dropOnEmpty || options.tree) {
-      Droppables.add(element, options_for_tree);
-      options.droppables.push(element);
-    }
-
-    (this.findElements(element, options) || []).each( function(e) {
-      // handles are per-draggable
-      var handle = options.handle ? 
-        $(e).down('.'+options.handle,0) : e;    
-      options.draggables.push(
-        new Draggable(e, Object.extend(options_for_draggable, { handle: handle })));
-      Droppables.add(e, options_for_droppable);
-      if(options.tree) e.treeNode = element;
-      options.droppables.push(e);      
-    });
-    
-    if(options.tree) {
-      (Sortable.findTreeElements(element, options) || []).each( function(e) {
-        Droppables.add(e, options_for_tree);
-        e.treeNode = element;
-        options.droppables.push(e);
-      });
-    }
-
-    // keep reference
-    this.sortables[element.id] = options;
-
-    // for onupdate
-    Draggables.addObserver(new SortableObserver(element, options.onUpdate));
-
-  },
-
-  // return all suitable-for-sortable elements in a guaranteed order
-  findElements: function(element, options) {
-    return Element.findChildren(
-      element, options.only, options.tree ? true : false, options.tag);
-  },
-  
-  findTreeElements: function(element, options) {
-    return Element.findChildren(
-      element, options.only, options.tree ? true : false, options.treeTag);
-  },
-
-  onHover: function(element, dropon, overlap) {
-    if(Element.isParent(dropon, element)) return;
-
-    if(overlap > .33 && overlap < .66 && Sortable.options(dropon).tree) {
-      return;
-    } else if(overlap>0.5) {
-      Sortable.mark(dropon, 'before');
-      if(dropon.previousSibling != element) {
-        var oldParentNode = element.parentNode;
-        element.style.visibility = "hidden"; // fix gecko rendering
-        dropon.parentNode.insertBefore(element, dropon);
-        if(dropon.parentNode!=oldParentNode) 
-          Sortable.options(oldParentNode).onChange(element);
-        Sortable.options(dropon.parentNode).onChange(element);
-      }
-    } else {
-      Sortable.mark(dropon, 'after');
-      var nextElement = dropon.nextSibling || null;
-      if(nextElement != element) {
-        var oldParentNode = element.parentNode;
-        element.style.visibility = "hidden"; // fix gecko rendering
-        dropon.parentNode.insertBefore(element, nextElement);
-        if(dropon.parentNode!=oldParentNode) 
-          Sortable.options(oldParentNode).onChange(element);
-        Sortable.options(dropon.parentNode).onChange(element);
-      }
-    }
-  },
-  
-  onEmptyHover: function(element, dropon, overlap) {
-    var oldParentNode = element.parentNode;
-    var droponOptions = Sortable.options(dropon);
-        
-    if(!Element.isParent(dropon, element)) {
-      var index;
-      
-      var children = Sortable.findElements(dropon, {tag: droponOptions.tag, only: droponOptions.only});
-      var child = null;
-            
-      if(children) {
-        var offset = Element.offsetSize(dropon, droponOptions.overlap) * (1.0 - overlap);
-        
-        for (index = 0; index < children.length; index += 1) {
-          if (offset - Element.offsetSize (children[index], droponOptions.overlap) >= 0) {
-            offset -= Element.offsetSize (children[index], droponOptions.overlap);
-          } else if (offset - (Element.offsetSize (children[index], droponOptions.overlap) / 2) >= 0) {
-            child = index + 1 < children.length ? children[index + 1] : null;
-            break;
-          } else {
-            child = children[index];
-            break;
-          }
-        }
-      }
-      
-      dropon.insertBefore(element, child);
-      
-      Sortable.options(oldParentNode).onChange(element);
-      droponOptions.onChange(element);
-    }
-  },
-
-  unmark: function() {
-    if(Sortable._marker) Sortable._marker.hide();
-  },
-
-  mark: function(dropon, position) {
-    // mark on ghosting only
-    var sortable = Sortable.options(dropon.parentNode);
-    if(sortable && !sortable.ghosting) return; 
-
-    if(!Sortable._marker) {
-      Sortable._marker = 
-        ($('dropmarker') || Element.extend(document.createElement('DIV'))).
-          hide().addClassName('dropmarker').setStyle({position:'absolute'});
-      document.getElementsByTagName("body").item(0).appendChild(Sortable._marker);
-    }    
-    var offsets = Position.cumulativeOffset(dropon);
-    Sortable._marker.setStyle({left: offsets[0]+'px', top: offsets[1] + 'px'});
-    
-    if(position=='after')
-      if(sortable.overlap == 'horizontal') 
-        Sortable._marker.setStyle({left: (offsets[0]+dropon.clientWidth) + 'px'});
-      else
-        Sortable._marker.setStyle({top: (offsets[1]+dropon.clientHeight) + 'px'});
-    
-    Sortable._marker.show();
-  },
-  
-  _tree: function(element, options, parent) {
-    var children = Sortable.findElements(element, options) || [];
-  
-    for (var i = 0; i < children.length; ++i) {
-      var match = children[i].id.match(options.format);
-
-      if (!match) continue;
-      
-      var child = {
-        id: encodeURIComponent(match ? match[1] : null),
-        element: element,
-        parent: parent,
-        children: [],
-        position: parent.children.length,
-        container: $(children[i]).down(options.treeTag)
-      }
-      
-      /* Get the element containing the children and recurse over it */
-      if (child.container)
-        this._tree(child.container, options, child)
-      
-      parent.children.push (child);
-    }
-
-    return parent; 
-  },
-
-  tree: function(element) {
-    element = $(element);
-    var sortableOptions = this.options(element);
-    var options = Object.extend({
-      tag: sortableOptions.tag,
-      treeTag: sortableOptions.treeTag,
-      only: sortableOptions.only,
-      name: element.id,
-      format: sortableOptions.format
-    }, arguments[1] || {});
-    
-    var root = {
-      id: null,
-      parent: null,
-      children: [],
-      container: element,
-      position: 0
-    }
-    
-    return Sortable._tree(element, options, root);
-  },
-
-  /* Construct a [i] index for a particular node */
-  _constructIndex: function(node) {
-    var index = '';
-    do {
-      if (node.id) index = '[' + node.position + ']' + index;
-    } while ((node = node.parent) != null);
-    return index;
-  },
-
-  sequence: function(element) {
-    element = $(element);
-    var options = Object.extend(this.options(element), arguments[1] || {});
-    
-    return $(this.findElements(element, options) || []).map( function(item) {
-      return item.id.match(options.format) ? item.id.match(options.format)[1] : '';
-    });
-  },
-
-  setSequence: function(element, new_sequence) {
-    element = $(element);
-    var options = Object.extend(this.options(element), arguments[2] || {});
-    
-    var nodeMap = {};
-    this.findElements(element, options).each( function(n) {
-        if (n.id.match(options.format))
-            nodeMap[n.id.match(options.format)[1]] = [n, n.parentNode];
-        n.parentNode.removeChild(n);
-    });
-   
-    new_sequence.each(function(ident) {
-      var n = nodeMap[ident];
-      if (n) {
-        n[1].appendChild(n[0]);
-        delete nodeMap[ident];
-      }
-    });
-  },
-  
-  serialize: function(element) {
-    element = $(element);
-    var options = Object.extend(Sortable.options(element), arguments[1] || {});
-    var name = encodeURIComponent(
-      (arguments[1] && arguments[1].name) ? arguments[1].name : element.id);
-    
-    if (options.tree) {
-      return Sortable.tree(element, arguments[1]).children.map( function (item) {
-        return [name + Sortable._constructIndex(item) + "[id]=" + 
-                encodeURIComponent(item.id)].concat(item.children.map(arguments.callee));
-      }).flatten().join('&');
-    } else {
-      return Sortable.sequence(element, arguments[1]).map( function(item) {
-        return name + "[]=" + encodeURIComponent(item);
-      }).join('&');
-    }
-  }
-}
-
-// Returns true if child is contained within element
-Element.isParent = function(child, element) {
-  if (!child.parentNode || child == element) return false;
-  if (child.parentNode == element) return true;
-  return Element.isParent(child.parentNode, element);
-}
-
-Element.findChildren = function(element, only, recursive, tagName) {    
-  if(!element.hasChildNodes()) return null;
-  tagName = tagName.toUpperCase();
-  if(only) only = [only].flatten();
-  var elements = [];
-  $A(element.childNodes).each( function(e) {
-    if(e.tagName && e.tagName.toUpperCase()==tagName &&
-      (!only || (Element.classNames(e).detect(function(v) { return only.include(v) }))))
-        elements.push(e);
-    if(recursive) {
-      var grandchildren = Element.findChildren(e, only, recursive, tagName);
-      if(grandchildren) elements.push(grandchildren);
-    }
-  });
-
-  return (elements.length>0 ? elements.flatten() : []);
-}
-
-Element.offsetSize = function (element, type) {
-  return element['offset' + ((type=='vertical' || type=='height') ? 'Height' : 'Width')];
-}
diff --git a/source/public/javascripts/effects.js b/source/public/javascripts/effects.js
deleted file mode 100644
index 3b02eda..0000000
--- a/source/public/javascripts/effects.js
+++ /dev/null
@@ -1,1088 +0,0 @@
-// Copyright (c) 2005, 2006 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
-// Contributors:
-//  Justin Palmer (http://encytemedia.com/)
-//  Mark Pilgrim (http://diveintomark.org/)
-//  Martin Bialasinki
-// 
-// script.aculo.us is freely distributable under the terms of an MIT-style license.
-// For details, see the script.aculo.us web site: http://script.aculo.us/ 
-
-// converts rgb() and #xxx to #xxxxxx format,  
-// returns self (or first argument) if not convertable  
-String.prototype.parseColor = function() {  
-  var color = '#';
-  if(this.slice(0,4) == 'rgb(') {  
-    var cols = this.slice(4,this.length-1).split(',');  
-    var i=0; do { color += parseInt(cols[i]).toColorPart() } while (++i<3);  
-  } else {  
-    if(this.slice(0,1) == '#') {  
-      if(this.length==4) for(var i=1;i<4;i++) color += (this.charAt(i) + this.charAt(i)).toLowerCase();  
-      if(this.length==7) color = this.toLowerCase();  
-    }  
-  }  
-  return(color.length==7 ? color : (arguments[0] || this));  
-}
-
-/*--------------------------------------------------------------------------*/
-
-Element.collectTextNodes = function(element) {  
-  return $A($(element).childNodes).collect( function(node) {
-    return (node.nodeType==3 ? node.nodeValue : 
-      (node.hasChildNodes() ? Element.collectTextNodes(node) : ''));
-  }).flatten().join('');
-}
-
-Element.collectTextNodesIgnoreClass = function(element, className) {  
-  return $A($(element).childNodes).collect( function(node) {
-    return (node.nodeType==3 ? node.nodeValue : 
-      ((node.hasChildNodes() && !Element.hasClassName(node,className)) ? 
-        Element.collectTextNodesIgnoreClass(node, className) : ''));
-  }).flatten().join('');
-}
-
-Element.setContentZoom = function(element, percent) {
-  element = $(element);  
-  element.setStyle({fontSize: (percent/100) + 'em'});   
-  if(navigator.appVersion.indexOf('AppleWebKit')>0) window.scrollBy(0,0);
-  return element;
-}
-
-Element.getOpacity = function(element){
-  element = $(element);
-  var opacity;
-  if (opacity = element.getStyle('opacity'))  
-    return parseFloat(opacity);  
-  if (opacity = (element.getStyle('filter') || '').match(/alpha\(opacity=(.*)\)/))  
-    if(opacity[1]) return parseFloat(opacity[1]) / 100;  
-  return 1.0;  
-}
-
-Element.setOpacity = function(element, value){  
-  element= $(element);  
-  if (value == 1){
-    element.setStyle({ opacity: 
-      (/Gecko/.test(navigator.userAgent) && !/Konqueror|Safari|KHTML/.test(navigator.userAgent)) ? 
-      0.999999 : 1.0 });
-    if(/MSIE/.test(navigator.userAgent) && !window.opera)  
-      element.setStyle({filter: Element.getStyle(element,'filter').replace(/alpha\([^\)]*\)/gi,'')});  
-  } else {  
-    if(value < 0.00001) value = 0;  
-    element.setStyle({opacity: value});
-    if(/MSIE/.test(navigator.userAgent) && !window.opera)  
-      element.setStyle(
-        { filter: element.getStyle('filter').replace(/alpha\([^\)]*\)/gi,'') +
-            'alpha(opacity='+value*100+')' });  
-  }
-  return element;
-}  
- 
-Element.getInlineOpacity = function(element){  
-  return $(element).style.opacity || '';
-}  
-
-Element.forceRerendering = function(element) {
-  try {
-    element = $(element);
-    var n = document.createTextNode(' ');
-    element.appendChild(n);
-    element.removeChild(n);
-  } catch(e) { }
-};
-
-/*--------------------------------------------------------------------------*/
-
-Array.prototype.call = function() {
-  var args = arguments;
-  this.each(function(f){ f.apply(this, args) });
-}
-
-/*--------------------------------------------------------------------------*/
-
-var Effect = {
-  _elementDoesNotExistError: {
-    name: 'ElementDoesNotExistError',
-    message: 'The specified DOM element does not exist, but is required for this effect to operate'
-  },
-  tagifyText: function(element) {
-    if(typeof Builder == 'undefined')
-      throw("Effect.tagifyText requires including script.aculo.us' builder.js library");
-      
-    var tagifyStyle = 'position:relative';
-    if(/MSIE/.test(navigator.userAgent) && !window.opera) tagifyStyle += ';zoom:1';
-    
-    element = $(element);
-    $A(element.childNodes).each( function(child) {
-      if(child.nodeType==3) {
-        child.nodeValue.toArray().each( function(character) {
-          element.insertBefore(
-            Builder.node('span',{style: tagifyStyle},
-              character == ' ' ? String.fromCharCode(160) : character), 
-              child);
-        });
-        Element.remove(child);
-      }
-    });
-  },
-  multiple: function(element, effect) {
-    var elements;
-    if(((typeof element == 'object') || 
-        (typeof element == 'function')) && 
-       (element.length))
-      elements = element;
-    else
-      elements = $(element).childNodes;
-      
-    var options = Object.extend({
-      speed: 0.1,
-      delay: 0.0
-    }, arguments[2] || {});
-    var masterDelay = options.delay;
-
-    $A(elements).each( function(element, index) {
-      new effect(element, Object.extend(options, { delay: index * options.speed + masterDelay }));
-    });
-  },
-  PAIRS: {
-    'slide':  ['SlideDown','SlideUp'],
-    'blind':  ['BlindDown','BlindUp'],
-    'appear': ['Appear','Fade']
-  },
-  toggle: function(element, effect) {
-    element = $(element);
-    effect = (effect || 'appear').toLowerCase();
-    var options = Object.extend({
-      queue: { position:'end', scope:(element.id || 'global'), limit: 1 }
-    }, arguments[2] || {});
-    Effect[element.visible() ? 
-      Effect.PAIRS[effect][1] : Effect.PAIRS[effect][0]](element, options);
-  }
-};
-
-var Effect2 = Effect; // deprecated
-
-/* ------------- transitions ------------- */
-
-Effect.Transitions = {
-  linear: Prototype.K,
-  sinoidal: function(pos) {
-    return (-Math.cos(pos*Math.PI)/2) + 0.5;
-  },
-  reverse: function(pos) {
-    return 1-pos;
-  },
-  flicker: function(pos) {
-    return ((-Math.cos(pos*Math.PI)/4) + 0.75) + Math.random()/4;
-  },
-  wobble: function(pos) {
-    return (-Math.cos(pos*Math.PI*(9*pos))/2) + 0.5;
-  },
-  pulse: function(pos, pulses) { 
-    pulses = pulses || 5; 
-    return (
-      Math.round((pos % (1/pulses)) * pulses) == 0 ? 
-            ((pos * pulses * 2) - Math.floor(pos * pulses * 2)) : 
-        1 - ((pos * pulses * 2) - Math.floor(pos * pulses * 2))
-      );
-  },
-  none: function(pos) {
-    return 0;
-  },
-  full: function(pos) {
-    return 1;
-  }
-};
-
-/* ------------- core effects ------------- */
-
-Effect.ScopedQueue = Class.create();
-Object.extend(Object.extend(Effect.ScopedQueue.prototype, Enumerable), {
-  initialize: function() {
-    this.effects  = [];
-    this.interval = null;
-  },
-  _each: function(iterator) {
-    this.effects._each(iterator);
-  },
-  add: function(effect) {
-    var timestamp = new Date().getTime();
-    
-    var position = (typeof effect.options.queue == 'string') ? 
-      effect.options.queue : effect.options.queue.position;
-    
-    switch(position) {
-      case 'front':
-        // move unstarted effects after this effect  
-        this.effects.findAll(function(e){ return e.state=='idle' }).each( function(e) {
-            e.startOn  += effect.finishOn;
-            e.finishOn += effect.finishOn;
-          });
-        break;
-      case 'with-last':
-        timestamp = this.effects.pluck('startOn').max() || timestamp;
-        break;
-      case 'end':
-        // start effect after last queued effect has finished
-        timestamp = this.effects.pluck('finishOn').max() || timestamp;
-        break;
-    }
-    
-    effect.startOn  += timestamp;
-    effect.finishOn += timestamp;
-
-    if(!effect.options.queue.limit || (this.effects.length < effect.options.queue.limit))
-      this.effects.push(effect);
-    
-    if(!this.interval) 
-      this.interval = setInterval(this.loop.bind(this), 40);
-  },
-  remove: function(effect) {
-    this.effects = this.effects.reject(function(e) { return e==effect });
-    if(this.effects.length == 0) {
-      clearInterval(this.interval);
-      this.interval = null;
-    }
-  },
-  loop: function() {
-    var timePos = new Date().getTime();
-    this.effects.invoke('loop', timePos);
-  }
-});
-
-Effect.Queues = {
-  instances: $H(),
-  get: function(queueName) {
-    if(typeof queueName != 'string') return queueName;
-    
-    if(!this.instances[queueName])
-      this.instances[queueName] = new Effect.ScopedQueue();
-      
-    return this.instances[queueName];
-  }
-}
-Effect.Queue = Effect.Queues.get('global');
-
-Effect.DefaultOptions = {
-  transition: Effect.Transitions.sinoidal,
-  duration:   1.0,   // seconds
-  fps:        25.0,  // max. 25fps due to Effect.Queue implementation
-  sync:       false, // true for combining
-  from:       0.0,
-  to:         1.0,
-  delay:      0.0,
-  queue:      'parallel'
-}
-
-Effect.Base = function() {};
-Effect.Base.prototype = {
-  position: null,
-  start: function(options) {
-    this.options      = Object.extend(Object.extend({},Effect.DefaultOptions), options || {});
-    this.currentFrame = 0;
-    this.state        = 'idle';
-    this.startOn      = this.options.delay*1000;
-    this.finishOn     = this.startOn + (this.options.duration*1000);
-    this.event('beforeStart');
-    if(!this.options.sync)
-      Effect.Queues.get(typeof this.options.queue == 'string' ? 
-        'global' : this.options.queue.scope).add(this);
-  },
-  loop: function(timePos) {
-    if(timePos >= this.startOn) {
-      if(timePos >= this.finishOn) {
-        this.render(1.0);
-        this.cancel();
-        this.event('beforeFinish');
-        if(this.finish) this.finish(); 
-        this.event('afterFinish');
-        return;  
-      }
-      var pos   = (timePos - this.startOn) / (this.finishOn - this.startOn);
-      var frame = Math.round(pos * this.options.fps * this.options.duration);
-      if(frame > this.currentFrame) {
-        this.render(pos);
-        this.currentFrame = frame;
-      }
-    }
-  },
-  render: function(pos) {
-    if(this.state == 'idle') {
-      this.state = 'running';
-      this.event('beforeSetup');
-      if(this.setup) this.setup();
-      this.event('afterSetup');
-    }
-    if(this.state == 'running') {
-      if(this.options.transition) pos = this.options.transition(pos);
-      pos *= (this.options.to-this.options.from);
-      pos += this.options.from;
-      this.position = pos;
-      this.event('beforeUpdate');
-      if(this.update) this.update(pos);
-      this.event('afterUpdate');
-    }
-  },
-  cancel: function() {
-    if(!this.options.sync)
-      Effect.Queues.get(typeof this.options.queue == 'string' ? 
-        'global' : this.options.queue.scope).remove(this);
-    this.state = 'finished';
-  },
-  event: function(eventName) {
-    if(this.options[eventName + 'Internal']) this.options[eventName + 'Internal'](this);
-    if(this.options[eventName]) this.options[eventName](this);
-  },
-  inspect: function() {
-    return '#<Effect:' + $H(this).inspect() + ',options:' + $H(this.options).inspect() + '>';
-  }
-}
-
-Effect.Parallel = Class.create();
-Object.extend(Object.extend(Effect.Parallel.prototype, Effect.Base.prototype), {
-  initialize: function(effects) {
-    this.effects = effects || [];
-    this.start(arguments[1]);
-  },
-  update: function(position) {
-    this.effects.invoke('render', position);
-  },
-  finish: function(position) {
-    this.effects.each( function(effect) {
-      effect.render(1.0);
-      effect.cancel();
-      effect.event('beforeFinish');
-      if(effect.finish) effect.finish(position);
-      effect.event('afterFinish');
-    });
-  }
-});
-
-Effect.Event = Class.create();
-Object.extend(Object.extend(Effect.Event.prototype, Effect.Base.prototype), {
-  initialize: function() {
-    var options = Object.extend({
-      duration: 0
-    }, arguments[0] || {});
-    this.start(options);
-  },
-  update: Prototype.emptyFunction
-});
-
-Effect.Opacity = Class.create();
-Object.extend(Object.extend(Effect.Opacity.prototype, Effect.Base.prototype), {
-  initialize: function(element) {
-    this.element = $(element);
-    if(!this.element) throw(Effect._elementDoesNotExistError);
-    // make this work on IE on elements without 'layout'
-    if(/MSIE/.test(navigator.userAgent) && !window.opera && (!this.element.currentStyle.hasLayout))
-      this.element.setStyle({zoom: 1});
-    var options = Object.extend({
-      from: this.element.getOpacity() || 0.0,
-      to:   1.0
-    }, arguments[1] || {});
-    this.start(options);
-  },
-  update: function(position) {
-    this.element.setOpacity(position);
-  }
-});
-
-Effect.Move = Class.create();
-Object.extend(Object.extend(Effect.Move.prototype, Effect.Base.prototype), {
-  initialize: function(element) {
-    this.element = $(element);
-    if(!this.element) throw(Effect._elementDoesNotExistError);
-    var options = Object.extend({
-      x:    0,
-      y:    0,
-      mode: 'relative'
-    }, arguments[1] || {});
-    this.start(options);
-  },
-  setup: function() {
-    // Bug in Opera: Opera returns the "real" position of a static element or
-    // relative element that does not have top/left explicitly set.
-    // ==> Always set top and left for position relative elements in your stylesheets 
-    // (to 0 if you do not need them) 
-    this.element.makePositioned();
-    this.originalLeft = parseFloat(this.element.getStyle('left') || '0');
-    this.originalTop  = parseFloat(this.element.getStyle('top')  || '0');
-    if(this.options.mode == 'absolute') {
-      // absolute movement, so we need to calc deltaX and deltaY
-      this.options.x = this.options.x - this.originalLeft;
-      this.options.y = this.options.y - this.originalTop;
-    }
-  },
-  update: function(position) {
-    this.element.setStyle({
-      left: Math.round(this.options.x  * position + this.originalLeft) + 'px',
-      top:  Math.round(this.options.y  * position + this.originalTop)  + 'px'
-    });
-  }
-});
-
-// for backwards compatibility
-Effect.MoveBy = function(element, toTop, toLeft) {
-  return new Effect.Move(element, 
-    Object.extend({ x: toLeft, y: toTop }, arguments[3] || {}));
-};
-
-Effect.Scale = Class.create();
-Object.extend(Object.extend(Effect.Scale.prototype, Effect.Base.prototype), {
-  initialize: function(element, percent) {
-    this.element = $(element);
-    if(!this.element) throw(Effect._elementDoesNotExistError);
-    var options = Object.extend({
-      scaleX: true,
-      scaleY: true,
-      scaleContent: true,
-      scaleFromCenter: false,
-      scaleMode: 'box',        // 'box' or 'contents' or {} with provided values
-      scaleFrom: 100.0,
-      scaleTo:   percent
-    }, arguments[2] || {});
-    this.start(options);
-  },
-  setup: function() {
-    this.restoreAfterFinish = this.options.restoreAfterFinish || false;
-    this.elementPositioning = this.element.getStyle('position');
-    
-    this.originalStyle = {};
-    ['top','left','width','height','fontSize'].each( function(k) {
-      this.originalStyle[k] = this.element.style[k];
-    }.bind(this));
-      
-    this.originalTop  = this.element.offsetTop;
-    this.originalLeft = this.element.offsetLeft;
-    
-    var fontSize = this.element.getStyle('font-size') || '100%';
-    ['em','px','%','pt'].each( function(fontSizeType) {
-      if(fontSize.indexOf(fontSizeType)>0) {
-        this.fontSize     = parseFloat(fontSize);
-        this.fontSizeType = fontSizeType;
-      }
-    }.bind(this));
-    
-    this.factor = (this.options.scaleTo - this.options.scaleFrom)/100;
-    
-    this.dims = null;
-    if(this.options.scaleMode=='box')
-      this.dims = [this.element.offsetHeight, this.element.offsetWidth];
-    if(/^content/.test(this.options.scaleMode))
-      this.dims = [this.element.scrollHeight, this.element.scrollWidth];
-    if(!this.dims)
-      this.dims = [this.options.scaleMode.originalHeight,
-                   this.options.scaleMode.originalWidth];
-  },
-  update: function(position) {
-    var currentScale = (this.options.scaleFrom/100.0) + (this.factor * position);
-    if(this.options.scaleContent && this.fontSize)
-      this.element.setStyle({fontSize: this.fontSize * currentScale + this.fontSizeType });
-    this.setDimensions(this.dims[0] * currentScale, this.dims[1] * currentScale);
-  },
-  finish: function(position) {
-    if(this.restoreAfterFinish) this.element.setStyle(this.originalStyle);
-  },
-  setDimensions: function(height, width) {
-    var d = {};
-    if(this.options.scaleX) d.width = Math.round(width) + 'px';
-    if(this.options.scaleY) d.height = Math.round(height) + 'px';
-    if(this.options.scaleFromCenter) {
-      var topd  = (height - this.dims[0])/2;
-      var leftd = (width  - this.dims[1])/2;
-      if(this.elementPositioning == 'absolute') {
-        if(this.options.scaleY) d.top = this.originalTop-topd + 'px';
-        if(this.options.scaleX) d.left = this.originalLeft-leftd + 'px';
-      } else {
-        if(this.options.scaleY) d.top = -topd + 'px';
-        if(this.options.scaleX) d.left = -leftd + 'px';
-      }
-    }
-    this.element.setStyle(d);
-  }
-});
-
-Effect.Highlight = Class.create();
-Object.extend(Object.extend(Effect.Highlight.prototype, Effect.Base.prototype), {
-  initialize: function(element) {
-    this.element = $(element);
-    if(!this.element) throw(Effect._elementDoesNotExistError);
-    var options = Object.extend({ startcolor: '#ffff99' }, arguments[1] || {});
-    this.start(options);
-  },
-  setup: function() {
-    // Prevent executing on elements not in the layout flow
-    if(this.element.getStyle('display')=='none') { this.cancel(); return; }
-    // Disable background image during the effect
-    this.oldStyle = {
-      backgroundImage: this.element.getStyle('background-image') };
-    this.element.setStyle({backgroundImage: 'none'});
-    if(!this.options.endcolor)
-      this.options.endcolor = this.element.getStyle('background-color').parseColor('#ffffff');
-    if(!this.options.restorecolor)
-      this.options.restorecolor = this.element.getStyle('background-color');
-    // init color calculations
-    this._base  = $R(0,2).map(function(i){ return parseInt(this.options.startcolor.slice(i*2+1,i*2+3),16) }.bind(this));
-    this._delta = $R(0,2).map(function(i){ return parseInt(this.options.endcolor.slice(i*2+1,i*2+3),16)-this._base[i] }.bind(this));
-  },
-  update: function(position) {
-    this.element.setStyle({backgroundColor: $R(0,2).inject('#',function(m,v,i){
-      return m+(Math.round(this._base[i]+(this._delta[i]*position)).toColorPart()); }.bind(this)) });
-  },
-  finish: function() {
-    this.element.setStyle(Object.extend(this.oldStyle, {
-      backgroundColor: this.options.restorecolor
-    }));
-  }
-});
-
-Effect.ScrollTo = Class.create();
-Object.extend(Object.extend(Effect.ScrollTo.prototype, Effect.Base.prototype), {
-  initialize: function(element) {
-    this.element = $(element);
-    this.start(arguments[1] || {});
-  },
-  setup: function() {
-    Position.prepare();
-    var offsets = Position.cumulativeOffset(this.element);
-    if(this.options.offset) offsets[1] += this.options.offset;
-    var max = window.innerHeight ? 
-      window.height - window.innerHeight :
-      document.body.scrollHeight - 
-        (document.documentElement.clientHeight ? 
-          document.documentElement.clientHeight : document.body.clientHeight);
-    this.scrollStart = Position.deltaY;
-    this.delta = (offsets[1] > max ? max : offsets[1]) - this.scrollStart;
-  },
-  update: function(position) {
-    Position.prepare();
-    window.scrollTo(Position.deltaX, 
-      this.scrollStart + (position*this.delta));
-  }
-});
-
-/* ------------- combination effects ------------- */
-
-Effect.Fade = function(element) {
-  element = $(element);
-  var oldOpacity = element.getInlineOpacity();
-  var options = Object.extend({
-  from: element.getOpacity() || 1.0,
-  to:   0.0,
-  afterFinishInternal: function(effect) { 
-    if(effect.options.to!=0) return;
-    effect.element.hide().setStyle({opacity: oldOpacity}); 
-  }}, arguments[1] || {});
-  return new Effect.Opacity(element,options);
-}
-
-Effect.Appear = function(element) {
-  element = $(element);
-  var options = Object.extend({
-  from: (element.getStyle('display') == 'none' ? 0.0 : element.getOpacity() || 0.0),
-  to:   1.0,
-  // force Safari to render floated elements properly
-  afterFinishInternal: function(effect) {
-    effect.element.forceRerendering();
-  },
-  beforeSetup: function(effect) {
-    effect.element.setOpacity(effect.options.from).show(); 
-  }}, arguments[1] || {});
-  return new Effect.Opacity(element,options);
-}
-
-Effect.Puff = function(element) {
-  element = $(element);
-  var oldStyle = { 
-    opacity: element.getInlineOpacity(), 
-    position: element.getStyle('position'),
-    top:  element.style.top,
-    left: element.style.left,
-    width: element.style.width,
-    height: element.style.height
-  };
-  return new Effect.Parallel(
-   [ new Effect.Scale(element, 200, 
-      { sync: true, scaleFromCenter: true, scaleContent: true, restoreAfterFinish: true }), 
-     new Effect.Opacity(element, { sync: true, to: 0.0 } ) ], 
-     Object.extend({ duration: 1.0, 
-      beforeSetupInternal: function(effect) {
-        Position.absolutize(effect.effects[0].element)
-      },
-      afterFinishInternal: function(effect) {
-         effect.effects[0].element.hide().setStyle(oldStyle); }
-     }, arguments[1] || {})
-   );
-}
-
-Effect.BlindUp = function(element) {
-  element = $(element);
-  element.makeClipping();
-  return new Effect.Scale(element, 0,
-    Object.extend({ scaleContent: false, 
-      scaleX: false, 
-      restoreAfterFinish: true,
-      afterFinishInternal: function(effect) {
-        effect.element.hide().undoClipping();
-      } 
-    }, arguments[1] || {})
-  );
-}
-
-Effect.BlindDown = function(element) {
-  element = $(element);
-  var elementDimensions = element.getDimensions();
-  return new Effect.Scale(element, 100, Object.extend({ 
-    scaleContent: false, 
-    scaleX: false,
-    scaleFrom: 0,
-    scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
-    restoreAfterFinish: true,
-    afterSetup: function(effect) {
-      effect.element.makeClipping().setStyle({height: '0px'}).show(); 
-    },  
-    afterFinishInternal: function(effect) {
-      effect.element.undoClipping();
-    }
-  }, arguments[1] || {}));
-}
-
-Effect.SwitchOff = function(element) {
-  element = $(element);
-  var oldOpacity = element.getInlineOpacity();
-  return new Effect.Appear(element, Object.extend({
-    duration: 0.4,
-    from: 0,
-    transition: Effect.Transitions.flicker,
-    afterFinishInternal: function(effect) {
-      new Effect.Scale(effect.element, 1, { 
-        duration: 0.3, scaleFromCenter: true,
-        scaleX: false, scaleContent: false, restoreAfterFinish: true,
-        beforeSetup: function(effect) { 
-          effect.element.makePositioned().makeClipping();
-        },
-        afterFinishInternal: function(effect) {
-          effect.element.hide().undoClipping().undoPositioned().setStyle({opacity: oldOpacity});
-        }
-      })
-    }
-  }, arguments[1] || {}));
-}
-
-Effect.DropOut = function(element) {
-  element = $(element);
-  var oldStyle = {
-    top: element.getStyle('top'),
-    left: element.getStyle('left'),
-    opacity: element.getInlineOpacity() };
-  return new Effect.Parallel(
-    [ new Effect.Move(element, {x: 0, y: 100, sync: true }), 
-      new Effect.Opacity(element, { sync: true, to: 0.0 }) ],
-    Object.extend(
-      { duration: 0.5,
-        beforeSetup: function(effect) {
-          effect.effects[0].element.makePositioned(); 
-        },
-        afterFinishInternal: function(effect) {
-          effect.effects[0].element.hide().undoPositioned().setStyle(oldStyle);
-        } 
-      }, arguments[1] || {}));
-}
-
-Effect.Shake = function(element) {
-  element = $(element);
-  var oldStyle = {
-    top: element.getStyle('top'),
-    left: element.getStyle('left') };
-    return new Effect.Move(element, 
-      { x:  20, y: 0, duration: 0.05, afterFinishInternal: function(effect) {
-    new Effect.Move(effect.element,
-      { x: -40, y: 0, duration: 0.1,  afterFinishInternal: function(effect) {
-    new Effect.Move(effect.element,
-      { x:  40, y: 0, duration: 0.1,  afterFinishInternal: function(effect) {
-    new Effect.Move(effect.element,
-      { x: -40, y: 0, duration: 0.1,  afterFinishInternal: function(effect) {
-    new Effect.Move(effect.element,
-      { x:  40, y: 0, duration: 0.1,  afterFinishInternal: function(effect) {
-    new Effect.Move(effect.element,
-      { x: -20, y: 0, duration: 0.05, afterFinishInternal: function(effect) {
-        effect.element.undoPositioned().setStyle(oldStyle);
-  }}) }}) }}) }}) }}) }});
-}
-
-Effect.SlideDown = function(element) {
-  element = $(element).cleanWhitespace();
-  // SlideDown need to have the content of the element wrapped in a container element with fixed height!
-  var oldInnerBottom = element.down().getStyle('bottom');
-  var elementDimensions = element.getDimensions();
-  return new Effect.Scale(element, 100, Object.extend({ 
-    scaleContent: false, 
-    scaleX: false, 
-    scaleFrom: window.opera ? 0 : 1,
-    scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
-    restoreAfterFinish: true,
-    afterSetup: function(effect) {
-      effect.element.makePositioned();
-      effect.element.down().makePositioned();
-      if(window.opera) effect.element.setStyle({top: ''});
-      effect.element.makeClipping().setStyle({height: '0px'}).show(); 
-    },
-    afterUpdateInternal: function(effect) {
-      effect.element.down().setStyle({bottom:
-        (effect.dims[0] - effect.element.clientHeight) + 'px' }); 
-    },
-    afterFinishInternal: function(effect) {
-      effect.element.undoClipping().undoPositioned();
-      effect.element.down().undoPositioned().setStyle({bottom: oldInnerBottom}); }
-    }, arguments[1] || {})
-  );
-}
-
-Effect.SlideUp = function(element) {
-  element = $(element).cleanWhitespace();
-  var oldInnerBottom = element.down().getStyle('bottom');
-  return new Effect.Scale(element, window.opera ? 0 : 1,
-   Object.extend({ scaleContent: false, 
-    scaleX: false, 
-    scaleMode: 'box',
-    scaleFrom: 100,
-    restoreAfterFinish: true,
-    beforeStartInternal: function(effect) {
-      effect.element.makePositioned();
-      effect.element.down().makePositioned();
-      if(window.opera) effect.element.setStyle({top: ''});
-      effect.element.makeClipping().show();
-    },  
-    afterUpdateInternal: function(effect) {
-      effect.element.down().setStyle({bottom:
-        (effect.dims[0] - effect.element.clientHeight) + 'px' });
-    },
-    afterFinishInternal: function(effect) {
-      effect.element.hide().undoClipping().undoPositioned().setStyle({bottom: oldInnerBottom});
-      effect.element.down().undoPositioned();
-    }
-   }, arguments[1] || {})
-  );
-}
-
-// Bug in opera makes the TD containing this element expand for a instance after finish 
-Effect.Squish = function(element) {
-  return new Effect.Scale(element, window.opera ? 1 : 0, { 
-    restoreAfterFinish: true,
-    beforeSetup: function(effect) {
-      effect.element.makeClipping(); 
-    },  
-    afterFinishInternal: function(effect) {
-      effect.element.hide().undoClipping(); 
-    }
-  });
-}
-
-Effect.Grow = function(element) {
-  element = $(element);
-  var options = Object.extend({
-    direction: 'center',
-    moveTransition: Effect.Transitions.sinoidal,
-    scaleTransition: Effect.Transitions.sinoidal,
-    opacityTransition: Effect.Transitions.full
-  }, arguments[1] || {});
-  var oldStyle = {
-    top: element.style.top,
-    left: element.style.left,
-    height: element.style.height,
-    width: element.style.width,
-    opacity: element.getInlineOpacity() };
-
-  var dims = element.getDimensions();    
-  var initialMoveX, initialMoveY;
-  var moveX, moveY;
-  
-  switch (options.direction) {
-    case 'top-left':
-      initialMoveX = initialMoveY = moveX = moveY = 0; 
-      break;
-    case 'top-right':
-      initialMoveX = dims.width;
-      initialMoveY = moveY = 0;
-      moveX = -dims.width;
-      break;
-    case 'bottom-left':
-      initialMoveX = moveX = 0;
-      initialMoveY = dims.height;
-      moveY = -dims.height;
-      break;
-    case 'bottom-right':
-      initialMoveX = dims.width;
-      initialMoveY = dims.height;
-      moveX = -dims.width;
-      moveY = -dims.height;
-      break;
-    case 'center':
-      initialMoveX = dims.width / 2;
-      initialMoveY = dims.height / 2;
-      moveX = -dims.width / 2;
-      moveY = -dims.height / 2;
-      break;
-  }
-  
-  return new Effect.Move(element, {
-    x: initialMoveX,
-    y: initialMoveY,
-    duration: 0.01, 
-    beforeSetup: function(effect) {
-      effect.element.hide().makeClipping().makePositioned();
-    },
-    afterFinishInternal: function(effect) {
-      new Effect.Parallel(
-        [ new Effect.Opacity(effect.element, { sync: true, to: 1.0, from: 0.0, transition: options.opacityTransition }),
-          new Effect.Move(effect.element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition }),
-          new Effect.Scale(effect.element, 100, {
-            scaleMode: { originalHeight: dims.height, originalWidth: dims.width }, 
-            sync: true, scaleFrom: window.opera ? 1 : 0, transition: options.scaleTransition, restoreAfterFinish: true})
-        ], Object.extend({
-             beforeSetup: function(effect) {
-               effect.effects[0].element.setStyle({height: '0px'}).show(); 
-             },
-             afterFinishInternal: function(effect) {
-               effect.effects[0].element.undoClipping().undoPositioned().setStyle(oldStyle); 
-             }
-           }, options)
-      )
-    }
-  });
-}
-
-Effect.Shrink = function(element) {
-  element = $(element);
-  var options = Object.extend({
-    direction: 'center',
-    moveTransition: Effect.Transitions.sinoidal,
-    scaleTransition: Effect.Transitions.sinoidal,
-    opacityTransition: Effect.Transitions.none
-  }, arguments[1] || {});
-  var oldStyle = {
-    top: element.style.top,
-    left: element.style.left,
-    height: element.style.height,
-    width: element.style.width,
-    opacity: element.getInlineOpacity() };
-
-  var dims = element.getDimensions();
-  var moveX, moveY;
-  
-  switch (options.direction) {
-    case 'top-left':
-      moveX = moveY = 0;
-      break;
-    case 'top-right':
-      moveX = dims.width;
-      moveY = 0;
-      break;
-    case 'bottom-left':
-      moveX = 0;
-      moveY = dims.height;
-      break;
-    case 'bottom-right':
-      moveX = dims.width;
-      moveY = dims.height;
-      break;
-    case 'center':  
-      moveX = dims.width / 2;
-      moveY = dims.height / 2;
-      break;
-  }
-  
-  return new Effect.Parallel(
-    [ new Effect.Opacity(element, { sync: true, to: 0.0, from: 1.0, transition: options.opacityTransition }),
-      new Effect.Scale(element, window.opera ? 1 : 0, { sync: true, transition: options.scaleTransition, restoreAfterFinish: true}),
-      new Effect.Move(element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition })
-    ], Object.extend({            
-         beforeStartInternal: function(effect) {
-           effect.effects[0].element.makePositioned().makeClipping(); 
-         },
-         afterFinishInternal: function(effect) {
-           effect.effects[0].element.hide().undoClipping().undoPositioned().setStyle(oldStyle); }
-       }, options)
-  );
-}
-
-Effect.Pulsate = function(element) {
-  element = $(element);
-  var options    = arguments[1] || {};
-  var oldOpacity = element.getInlineOpacity();
-  var transition = options.transition || Effect.Transitions.sinoidal;
-  var reverser   = function(pos){ return transition(1-Effect.Transitions.pulse(pos, options.pulses)) };
-  reverser.bind(transition);
-  return new Effect.Opacity(element, 
-    Object.extend(Object.extend({  duration: 2.0, from: 0,
-      afterFinishInternal: function(effect) { effect.element.setStyle({opacity: oldOpacity}); }
-    }, options), {transition: reverser}));
-}
-
-Effect.Fold = function(element) {
-  element = $(element);
-  var oldStyle = {
-    top: element.style.top,
-    left: element.style.left,
-    width: element.style.width,
-    height: element.style.height };
-  element.makeClipping();
-  return new Effect.Scale(element, 5, Object.extend({   
-    scaleContent: false,
-    scaleX: false,
-    afterFinishInternal: function(effect) {
-    new Effect.Scale(element, 1, { 
-      scaleContent: false, 
-      scaleY: false,
-      afterFinishInternal: function(effect) {
-        effect.element.hide().undoClipping().setStyle(oldStyle);
-      } });
-  }}, arguments[1] || {}));
-};
-
-Effect.Morph = Class.create();
-Object.extend(Object.extend(Effect.Morph.prototype, Effect.Base.prototype), {
-  initialize: function(element) {
-    this.element = $(element);
-    if(!this.element) throw(Effect._elementDoesNotExistError);
-    var options = Object.extend({
-      style: ''
-    }, arguments[1] || {});
-    this.start(options);
-  },
-  setup: function(){
-    function parseColor(color){
-      if(!color || ['rgba(0, 0, 0, 0)','transparent'].include(color)) color = '#ffffff';
-      color = color.parseColor();
-      return $R(0,2).map(function(i){
-        return parseInt( color.slice(i*2+1,i*2+3), 16 ) 
-      });
-    }
-    this.transforms = this.options.style.parseStyle().map(function(property){
-      var originalValue = this.element.getStyle(property[0]);
-      return $H({ 
-        style: property[0], 
-        originalValue: property[1].unit=='color' ? 
-          parseColor(originalValue) : parseFloat(originalValue || 0), 
-        targetValue: property[1].unit=='color' ? 
-          parseColor(property[1].value) : property[1].value,
-        unit: property[1].unit
-      });
-    }.bind(this)).reject(function(transform){
-      return (
-        (transform.originalValue == transform.targetValue) ||
-        (
-          transform.unit != 'color' &&
-          (isNaN(transform.originalValue) || isNaN(transform.targetValue))
-        )
-      )
-    });
-  },
-  update: function(position) {
-    var style = $H(), value = null;
-    this.transforms.each(function(transform){
-      value = transform.unit=='color' ?
-        $R(0,2).inject('#',function(m,v,i){
-          return m+(Math.round(transform.originalValue[i]+
-            (transform.targetValue[i] - transform.originalValue[i])*position)).toColorPart() }) : 
-        transform.originalValue + Math.round(
-          ((transform.targetValue - transform.originalValue) * position) * 1000)/1000 + transform.unit;
-      style[transform.style] = value;
-    });
-    this.element.setStyle(style);
-  }
-});
-
-Effect.Transform = Class.create();
-Object.extend(Effect.Transform.prototype, {
-  initialize: function(tracks){
-    this.tracks  = [];
-    this.options = arguments[1] || {};
-    this.addTracks(tracks);
-  },
-  addTracks: function(tracks){
-    tracks.each(function(track){
-      var data = $H(track).values().first();
-      this.tracks.push($H({
-        ids:     $H(track).keys().first(),
-        effect:  Effect.Morph,
-        options: { style: data }
-      }));
-    }.bind(this));
-    return this;
-  },
-  play: function(){
-    return new Effect.Parallel(
-      this.tracks.map(function(track){
-        var elements = [$(track.ids) || $$(track.ids)].flatten();
-        return elements.map(function(e){ return new track.effect(e, Object.extend({ sync:true }, track.options)) });
-      }).flatten(),
-      this.options
-    );
-  }
-});
-
-Element.CSS_PROPERTIES = ['azimuth', 'backgroundAttachment', 'backgroundColor', 'backgroundImage', 
-  'backgroundPosition', 'backgroundRepeat', 'borderBottomColor', 'borderBottomStyle', 
-  'borderBottomWidth', 'borderCollapse', 'borderLeftColor', 'borderLeftStyle', 'borderLeftWidth',
-  'borderRightColor', 'borderRightStyle', 'borderRightWidth', 'borderSpacing', 'borderTopColor',
-  'borderTopStyle', 'borderTopWidth', 'bottom', 'captionSide', 'clear', 'clip', 'color', 'content',
-  'counterIncrement', 'counterReset', 'cssFloat', 'cueAfter', 'cueBefore', 'cursor', 'direction',
-  'display', 'elevation', 'emptyCells', 'fontFamily', 'fontSize', 'fontSizeAdjust', 'fontStretch',
-  'fontStyle', 'fontVariant', 'fontWeight', 'height', 'left', 'letterSpacing', 'lineHeight',
-  'listStyleImage', 'listStylePosition', 'listStyleType', 'marginBottom', 'marginLeft', 'marginRight',
-  'marginTop', 'markerOffset', 'marks', 'maxHeight', 'maxWidth', 'minHeight', 'minWidth', 'opacity',
-  'orphans', 'outlineColor', 'outlineOffset', 'outlineStyle', 'outlineWidth', 'overflowX', 'overflowY',
-  'paddingBottom', 'paddingLeft', 'paddingRight', 'paddingTop', 'page', 'pageBreakAfter', 'pageBreakBefore',
-  'pageBreakInside', 'pauseAfter', 'pauseBefore', 'pitch', 'pitchRange', 'position', 'quotes',
-  'richness', 'right', 'size', 'speakHeader', 'speakNumeral', 'speakPunctuation', 'speechRate', 'stress',
-  'tableLayout', 'textAlign', 'textDecoration', 'textIndent', 'textShadow', 'textTransform', 'top',
-  'unicodeBidi', 'verticalAlign', 'visibility', 'voiceFamily', 'volume', 'whiteSpace', 'widows',
-  'width', 'wordSpacing', 'zIndex'];
-  
-Element.CSS_LENGTH = /^(([\+\-]?[0-9\.]+)(em|ex|px|in|cm|mm|pt|pc|\%))|0$/;
-
-String.prototype.parseStyle = function(){
-  var element = Element.extend(document.createElement('div'));
-  element.innerHTML = '<div style="' + this + '"></div>';
-  var style = element.down().style, styleRules = $H();
-  
-  Element.CSS_PROPERTIES.each(function(property){
-   if(style[property]) styleRules[property] = style[property]; 
-  });
-  
-  var result = $H();
-  
-  styleRules.each(function(pair){
-    var property = pair[0], value = pair[1], unit = null;
-    
-    if(value.parseColor('#zzzzzz') != '#zzzzzz') {
-      value = value.parseColor();
-      unit  = 'color';
-    } else if(Element.CSS_LENGTH.test(value)) 
-      var components = value.match(/^([\+\-]?[0-9\.]+)(.*)$/),
-          value = parseFloat(components[1]), unit = (components.length == 3) ? components[2] : null;
-    
-    result[property.underscore().dasherize()] = $H({ value:value, unit:unit });
-  }.bind(this));
-  
-  return result;
-};
-
-Element.morph = function(element, style) {
-  new Effect.Morph(element, Object.extend({ style: style }, arguments[2] || {}));
-  return element;
-};
-
-['setOpacity','getOpacity','getInlineOpacity','forceRerendering','setContentZoom',
- 'collectTextNodes','collectTextNodesIgnoreClass','morph'].each( 
-  function(f) { Element.Methods[f] = Element[f]; }
-);
-
-Element.Methods.visualEffect = function(element, effect, options) {
-  s = effect.gsub(/_/, '-').camelize();
-  effect_class = s.charAt(0).toUpperCase() + s.substring(1);
-  new Effect[effect_class](element, options);
-  return $(element);
-};
-
-Element.addMethods();
\ No newline at end of file
diff --git a/source/public/javascripts/prototype.js b/source/public/javascripts/prototype.js
deleted file mode 100644
index 5058221..0000000
--- a/source/public/javascripts/prototype.js
+++ /dev/null
@@ -1,2515 +0,0 @@
-/*  Prototype JavaScript framework, version 1.5.0
- *  (c) 2005-2007 Sam Stephenson
- *
- *  Prototype is freely distributable under the terms of an MIT-style license.
- *  For details, see the Prototype web site: http://prototype.conio.net/
- *
-/*--------------------------------------------------------------------------*/
-
-var Prototype = {
-  Version: '1.5.0',
-  BrowserFeatures: {
-    XPath: !!document.evaluate
-  },
-
-  ScriptFragment: '(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)',
-  emptyFunction: function() {},
-  K: function(x) { return x }
-}
-
-var Class = {
-  create: function() {
-    return function() {
-      this.initialize.apply(this, arguments);
-    }
-  }
-}
-
-var Abstract = new Object();
-
-Object.extend = function(destination, source) {
-  for (var property in source) {
-    destination[property] = source[property];
-  }
-  return destination;
-}
-
-Object.extend(Object, {
-  inspect: function(object) {
-    try {
-      if (object === undefined) return 'undefined';
-      if (object === null) return 'null';
-      return object.inspect ? object.inspect() : object.toString();
-    } catch (e) {
-      if (e instanceof RangeError) return '...';
-      throw e;
-    }
-  },
-
-  keys: function(object) {
-    var keys = [];
-    for (var property in object)
-      keys.push(property);
-    return keys;
-  },
-
-  values: function(object) {
-    var values = [];
-    for (var property in object)
-      values.push(object[property]);
-    return values;
-  },
-
-  clone: function(object) {
-    return Object.extend({}, object);
-  }
-});
-
-Function.prototype.bind = function() {
-  var __method = this, args = $A(arguments), object = args.shift();
-  return function() {
-    return __method.apply(object, args.concat($A(arguments)));
-  }
-}
-
-Function.prototype.bindAsEventListener = function(object) {
-  var __method = this, args = $A(arguments), object = args.shift();
-  return function(event) {
-    return __method.apply(object, [( event || window.event)].concat(args).concat($A(arguments)));
-  }
-}
-
-Object.extend(Number.prototype, {
-  toColorPart: function() {
-    var digits = this.toString(16);
-    if (this < 16) return '0' + digits;
-    return digits;
-  },
-
-  succ: function() {
-    return this + 1;
-  },
-
-  times: function(iterator) {
-    $R(0, this, true).each(iterator);
-    return this;
-  }
-});
-
-var Try = {
-  these: function() {
-    var returnValue;
-
-    for (var i = 0, length = arguments.length; i < length; i++) {
-      var lambda = arguments[i];
-      try {
-        returnValue = lambda();
-        break;
-      } catch (e) {}
-    }
-
-    return returnValue;
-  }
-}
-
-/*--------------------------------------------------------------------------*/
-
-var PeriodicalExecuter = Class.create();
-PeriodicalExecuter.prototype = {
-  initialize: function(callback, frequency) {
-    this.callback = callback;
-    this.frequency = frequency;
-    this.currentlyExecuting = false;
-
-    this.registerCallback();
-  },
-
-  registerCallback: function() {
-    this.timer = setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);
-  },
-
-  stop: function() {
-    if (!this.timer) return;
-    clearInterval(this.timer);
-    this.timer = null;
-  },
-
-  onTimerEvent: function() {
-    if (!this.currentlyExecuting) {
-      try {
-        this.currentlyExecuting = true;
-        this.callback(this);
-      } finally {
-        this.currentlyExecuting = false;
-      }
-    }
-  }
-}
-String.interpret = function(value){
-  return value == null ? '' : String(value);
-}
-
-Object.extend(String.prototype, {
-  gsub: function(pattern, replacement) {
-    var result = '', source = this, match;
-    replacement = arguments.callee.prepareReplacement(replacement);
-
-    while (source.length > 0) {
-      if (match = source.match(pattern)) {
-        result += source.slice(0, match.index);
-        result += String.interpret(replacement(match));
-        source  = source.slice(match.index + match[0].length);
-      } else {
-        result += source, source = '';
-      }
-    }
-    return result;
-  },
-
-  sub: function(pattern, replacement, count) {
-    replacement = this.gsub.prepareReplacement(replacement);
-    count = count === undefined ? 1 : count;
-
-    return this.gsub(pattern, function(match) {
-      if (--count < 0) return match[0];
-      return replacement(match);
-    });
-  },
-
-  scan: function(pattern, iterator) {
-    this.gsub(pattern, iterator);
-    return this;
-  },
-
-  truncate: function(length, truncation) {
-    length = length || 30;
-    truncation = truncation === undefined ? '...' : truncation;
-    return this.length > length ?
-      this.slice(0, length - truncation.length) + truncation : this;
-  },
-
-  strip: function() {
-    return this.replace(/^\s+/, '').replace(/\s+$/, '');
-  },
-
-  stripTags: function() {
-    return this.replace(/<\/?[^>]+>/gi, '');
-  },
-
-  stripScripts: function() {
-    return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), '');
-  },
-
-  extractScripts: function() {
-    var matchAll = new RegExp(Prototype.ScriptFragment, 'img');
-    var matchOne = new RegExp(Prototype.ScriptFragment, 'im');
-    return (this.match(matchAll) || []).map(function(scriptTag) {
-      return (scriptTag.match(matchOne) || ['', ''])[1];
-    });
-  },
-
-  evalScripts: function() {
-    return this.extractScripts().map(function(script) { return eval(script) });
-  },
-
-  escapeHTML: function() {
-    var div = document.createElement('div');
-    var text = document.createTextNode(this);
-    div.appendChild(text);
-    return div.innerHTML;
-  },
-
-  unescapeHTML: function() {
-    var div = document.createElement('div');
-    div.innerHTML = this.stripTags();
-    return div.childNodes[0] ? (div.childNodes.length > 1 ?
-      $A(div.childNodes).inject('',function(memo,node){ return memo+node.nodeValue }) :
-      div.childNodes[0].nodeValue) : '';
-  },
-
-  toQueryParams: function(separator) {
-    var match = this.strip().match(/([^?#]*)(#.*)?$/);
-    if (!match) return {};
-
-    return match[1].split(separator || '&').inject({}, function(hash, pair) {
-      if ((pair = pair.split('='))[0]) {
-        var name = decodeURIComponent(pair[0]);
-        var value = pair[1] ? decodeURIComponent(pair[1]) : undefined;
-
-        if (hash[name] !== undefined) {
-          if (hash[name].constructor != Array)
-            hash[name] = [hash[name]];
-          if (value) hash[name].push(value);
-        }
-        else hash[name] = value;
-      }
-      return hash;
-    });
-  },
-
-  toArray: function() {
-    return this.split('');
-  },
-
-  succ: function() {
-    return this.slice(0, this.length - 1) +
-      String.fromCharCode(this.charCodeAt(this.length - 1) + 1);
-  },
-
-  camelize: function() {
-    var parts = this.split('-'), len = parts.length;
-    if (len == 1) return parts[0];
-
-    var camelized = this.charAt(0) == '-'
-      ? parts[0].charAt(0).toUpperCase() + parts[0].substring(1)
-      : parts[0];
-
-    for (var i = 1; i < len; i++)
-      camelized += parts[i].charAt(0).toUpperCase() + parts[i].substring(1);
-
-    return camelized;
-  },
-
-  capitalize: function(){
-    return this.charAt(0).toUpperCase() + this.substring(1).toLowerCase();
-  },
-
-  underscore: function() {
-    return this.gsub(/::/, '/').gsub(/([A-Z]+)([A-Z][a-z])/,'#{1}_#{2}').gsub(/([a-z\d])([A-Z])/,'#{1}_#{2}').gsub(/-/,'_').toLowerCase();
-  },
-
-  dasherize: function() {
-    return this.gsub(/_/,'-');
-  },
-
-  inspect: function(useDoubleQuotes) {
-    var escapedString = this.replace(/\\/g, '\\\\');
-    if (useDoubleQuotes)
-      return '"' + escapedString.replace(/"/g, '\\"') + '"';
-    else
-      return "'" + escapedString.replace(/'/g, '\\\'') + "'";
-  }
-});
-
-String.prototype.gsub.prepareReplacement = function(replacement) {
-  if (typeof replacement == 'function') return replacement;
-  var template = new Template(replacement);
-  return function(match) { return template.evaluate(match) };
-}
-
-String.prototype.parseQuery = String.prototype.toQueryParams;
-
-var Template = Class.create();
-Template.Pattern = /(^|.|\r|\n)(#\{(.*?)\})/;
-Template.prototype = {
-  initialize: function(template, pattern) {
-    this.template = template.toString();
-    this.pattern  = pattern || Template.Pattern;
-  },
-
-  evaluate: function(object) {
-    return this.template.gsub(this.pattern, function(match) {
-      var before = match[1];
-      if (before == '\\') return match[2];
-      return before + String.interpret(object[match[3]]);
-    });
-  }
-}
-
-var $break    = new Object();
-var $continue = new Object();
-
-var Enumerable = {
-  each: function(iterator) {
-    var index = 0;
-    try {
-      this._each(function(value) {
-        try {
-          iterator(value, index++);
-        } catch (e) {
-          if (e != $continue) throw e;
-        }
-      });
-    } catch (e) {
-      if (e != $break) throw e;
-    }
-    return this;
-  },
-
-  eachSlice: function(number, iterator) {
-    var index = -number, slices = [], array = this.toArray();
-    while ((index += number) < array.length)
-      slices.push(array.slice(index, index+number));
-    return slices.map(iterator);
-  },
-
-  all: function(iterator) {
-    var result = true;
-    this.each(function(value, index) {
-      result = result && !!(iterator || Prototype.K)(value, index);
-      if (!result) throw $break;
-    });
-    return result;
-  },
-
-  any: function(iterator) {
-    var result = false;
-    this.each(function(value, index) {
-      if (result = !!(iterator || Prototype.K)(value, index))
-        throw $break;
-    });
-    return result;
-  },
-
-  collect: function(iterator) {
-    var results = [];
-    this.each(function(value, index) {
-      results.push((iterator || Prototype.K)(value, index));
-    });
-    return results;
-  },
-
-  detect: function(iterator) {
-    var result;
-    this.each(function(value, index) {
-      if (iterator(value, index)) {
-        result = value;
-        throw $break;
-      }
-    });
-    return result;
-  },
-
-  findAll: function(iterator) {
-    var results = [];
-    this.each(function(value, index) {
-      if (iterator(value, index))
-        results.push(value);
-    });
-    return results;
-  },
-
-  grep: function(pattern, iterator) {
-    var results = [];
-    this.each(function(value, index) {
-      var stringValue = value.toString();
-      if (stringValue.match(pattern))
-        results.push((iterator || Prototype.K)(value, index));
-    })
-    return results;
-  },
-
-  include: function(object) {
-    var found = false;
-    this.each(function(value) {
-      if (value == object) {
-        found = true;
-        throw $break;
-      }
-    });
-    return found;
-  },
-
-  inGroupsOf: function(number, fillWith) {
-    fillWith = fillWith === undefined ? null : fillWith;
-    return this.eachSlice(number, function(slice) {
-      while(slice.length < number) slice.push(fillWith);
-      return slice;
-    });
-  },
-
-  inject: function(memo, iterator) {
-    this.each(function(value, index) {
-      memo = iterator(memo, value, index);
-    });
-    return memo;
-  },
-
-  invoke: function(method) {
-    var args = $A(arguments).slice(1);
-    return this.map(function(value) {
-      return value[method].apply(value, args);
-    });
-  },
-
-  max: function(iterator) {
-    var result;
-    this.each(function(value, index) {
-      value = (iterator || Prototype.K)(value, index);
-      if (result == undefined || value >= result)
-        result = value;
-    });
-    return result;
-  },
-
-  min: function(iterator) {
-    var result;
-    this.each(function(value, index) {
-      value = (iterator || Prototype.K)(value, index);
-      if (result == undefined || value < result)
-        result = value;
-    });
-    return result;
-  },
-
-  partition: function(iterator) {
-    var trues = [], falses = [];
-    this.each(function(value, index) {
-      ((iterator || Prototype.K)(value, index) ?
-        trues : falses).push(value);
-    });
-    return [trues, falses];
-  },
-
-  pluck: function(property) {
-    var results = [];
-    this.each(function(value, index) {
-      results.push(value[property]);
-    });
-    return results;
-  },
-
-  reject: function(iterator) {
-    var results = [];
-    this.each(function(value, index) {
-      if (!iterator(value, index))
-        results.push(value);
-    });
-    return results;
-  },
-
-  sortBy: function(iterator) {
-    return this.map(function(value, index) {
-      return {value: value, criteria: iterator(value, index)};
-    }).sort(function(left, right) {
-      var a = left.criteria, b = right.criteria;
-      return a < b ? -1 : a > b ? 1 : 0;
-    }).pluck('value');
-  },
-
-  toArray: function() {
-    return this.map();
-  },
-
-  zip: function() {
-    var iterator = Prototype.K, args = $A(arguments);
-    if (typeof args.last() == 'function')
-      iterator = args.pop();
-
-    var collections = [this].concat(args).map($A);
-    return this.map(function(value, index) {
-      return iterator(collections.pluck(index));
-    });
-  },
-
-  size: function() {
-    return this.toArray().length;
-  },
-
-  inspect: function() {
-    return '#<Enumerable:' + this.toArray().inspect() + '>';
-  }
-}
-
-Object.extend(Enumerable, {
-  map:     Enumerable.collect,
-  find:    Enumerable.detect,
-  select:  Enumerable.findAll,
-  member:  Enumerable.include,
-  entries: Enumerable.toArray
-});
-var $A = Array.from = function(iterable) {
-  if (!iterable) return [];
-  if (iterable.toArray) {
-    return iterable.toArray();
-  } else {
-    var results = [];
-    for (var i = 0, length = iterable.length; i < length; i++)
-      results.push(iterable[i]);
-    return results;
-  }
-}
-
-Object.extend(Array.prototype, Enumerable);
-
-if (!Array.prototype._reverse)
-  Array.prototype._reverse = Array.prototype.reverse;
-
-Object.extend(Array.prototype, {
-  _each: function(iterator) {
-    for (var i = 0, length = this.length; i < length; i++)
-      iterator(this[i]);
-  },
-
-  clear: function() {
-    this.length = 0;
-    return this;
-  },
-
-  first: function() {
-    return this[0];
-  },
-
-  last: function() {
-    return this[this.length - 1];
-  },
-
-  compact: function() {
-    return this.select(function(value) {
-      return value != null;
-    });
-  },
-
-  flatten: function() {
-    return this.inject([], function(array, value) {
-      return array.concat(value && value.constructor == Array ?
-        value.flatten() : [value]);
-    });
-  },
-
-  without: function() {
-    var values = $A(arguments);
-    return this.select(function(value) {
-      return !values.include(value);
-    });
-  },
-
-  indexOf: function(object) {
-    for (var i = 0, length = this.length; i < length; i++)
-      if (this[i] == object) return i;
-    return -1;
-  },
-
-  reverse: function(inline) {
-    return (inline !== false ? this : this.toArray())._reverse();
-  },
-
-  reduce: function() {
-    return this.length > 1 ? this : this[0];
-  },
-
-  uniq: function() {
-    return this.inject([], function(array, value) {
-      return array.include(value) ? array : array.concat([value]);
-    });
-  },
-
-  clone: function() {
-    return [].concat(this);
-  },
-
-  size: function() {
-    return this.length;
-  },
-
-  inspect: function() {
-    return '[' + this.map(Object.inspect).join(', ') + ']';
-  }
-});
-
-Array.prototype.toArray = Array.prototype.clone;
-
-function $w(string){
-  string = string.strip();
-  return string ? string.split(/\s+/) : [];
-}
-
-if(window.opera){
-  Array.prototype.concat = function(){
-    var array = [];
-    for(var i = 0, length = this.length; i < length; i++) array.push(this[i]);
-    for(var i = 0, length = arguments.length; i < length; i++) {
-      if(arguments[i].constructor == Array) {
-        for(var j = 0, arrayLength = arguments[i].length; j < arrayLength; j++)
-          array.push(arguments[i][j]);
-      } else {
-        array.push(arguments[i]);
-      }
-    }
-    return array;
-  }
-}
-var Hash = function(obj) {
-  Object.extend(this, obj || {});
-};
-
-Object.extend(Hash, {
-  toQueryString: function(obj) {
-    var parts = [];
-
-	  this.prototype._each.call(obj, function(pair) {
-      if (!pair.key) return;
-
-      if (pair.value && pair.value.constructor == Array) {
-        var values = pair.value.compact();
-        if (values.length < 2) pair.value = values.reduce();
-        else {
-        	key = encodeURIComponent(pair.key);
-          values.each(function(value) {
-            value = value != undefined ? encodeURIComponent(value) : '';
-            parts.push(key + '=' + encodeURIComponent(value));
-          });
-          return;
-        }
-      }
-      if (pair.value == undefined) pair[1] = '';
-      parts.push(pair.map(encodeURIComponent).join('='));
-	  });
-
-    return parts.join('&');
-  }
-});
-
-Object.extend(Hash.prototype, Enumerable);
-Object.extend(Hash.prototype, {
-  _each: function(iterator) {
-    for (var key in this) {
-      var value = this[key];
-      if (value && value == Hash.prototype[key]) continue;
-
-      var pair = [key, value];
-      pair.key = key;
-      pair.value = value;
-      iterator(pair);
-    }
-  },
-
-  keys: function() {
-    return this.pluck('key');
-  },
-
-  values: function() {
-    return this.pluck('value');
-  },
-
-  merge: function(hash) {
-    return $H(hash).inject(this, function(mergedHash, pair) {
-      mergedHash[pair.key] = pair.value;
-      return mergedHash;
-    });
-  },
-
-  remove: function() {
-    var result;
-    for(var i = 0, length = arguments.length; i < length; i++) {
-      var value = this[arguments[i]];
-      if (value !== undefined){
-        if (result === undefined) result = value;
-        else {
-          if (result.constructor != Array) result = [result];
-          result.push(value)
-        }
-      }
-      delete this[arguments[i]];
-    }
-    return result;
-  },
-
-  toQueryString: function() {
-    return Hash.toQueryString(this);
-  },
-
-  inspect: function() {
-    return '#<Hash:{' + this.map(function(pair) {
-      return pair.map(Object.inspect).join(': ');
-    }).join(', ') + '}>';
-  }
-});
-
-function $H(object) {
-  if (object && object.constructor == Hash) return object;
-  return new Hash(object);
-};
-ObjectRange = Class.create();
-Object.extend(ObjectRange.prototype, Enumerable);
-Object.extend(ObjectRange.prototype, {
-  initialize: function(start, end, exclusive) {
-    this.start = start;
-    this.end = end;
-    this.exclusive = exclusive;
-  },
-
-  _each: function(iterator) {
-    var value = this.start;
-    while (this.include(value)) {
-      iterator(value);
-      value = value.succ();
-    }
-  },
-
-  include: function(value) {
-    if (value < this.start)
-      return false;
-    if (this.exclusive)
-      return value < this.end;
-    return value <= this.end;
-  }
-});
-
-var $R = function(start, end, exclusive) {
-  return new ObjectRange(start, end, exclusive);
-}
-
-var Ajax = {
-  getTransport: function() {
-    return Try.these(
-      function() {return new XMLHttpRequest()},
-      function() {return new ActiveXObject('Msxml2.XMLHTTP')},
-      function() {return new ActiveXObject('Microsoft.XMLHTTP')}
-    ) || false;
-  },
-
-  activeRequestCount: 0
-}
-
-Ajax.Responders = {
-  responders: [],
-
-  _each: function(iterator) {
-    this.responders._each(iterator);
-  },
-
-  register: function(responder) {
-    if (!this.include(responder))
-      this.responders.push(responder);
-  },
-
-  unregister: function(responder) {
-    this.responders = this.responders.without(responder);
-  },
-
-  dispatch: function(callback, request, transport, json) {
-    this.each(function(responder) {
-      if (typeof responder[callback] == 'function') {
-        try {
-          responder[callback].apply(responder, [request, transport, json]);
-        } catch (e) {}
-      }
-    });
-  }
-};
-
-Object.extend(Ajax.Responders, Enumerable);
-
-Ajax.Responders.register({
-  onCreate: function() {
-    Ajax.activeRequestCount++;
-  },
-  onComplete: function() {
-    Ajax.activeRequestCount--;
-  }
-});
-
-Ajax.Base = function() {};
-Ajax.Base.prototype = {
-  setOptions: function(options) {
-    this.options = {
-      method:       'post',
-      asynchronous: true,
-      contentType:  'application/x-www-form-urlencoded',
-      encoding:     'UTF-8',
-      parameters:   ''
-    }
-    Object.extend(this.options, options || {});
-
-    this.options.method = this.options.method.toLowerCase();
-    if (typeof this.options.parameters == 'string')
-      this.options.parameters = this.options.parameters.toQueryParams();
-  }
-}
-
-Ajax.Request = Class.create();
-Ajax.Request.Events =
-  ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete'];
-
-Ajax.Request.prototype = Object.extend(new Ajax.Base(), {
-  _complete: false,
-
-  initialize: function(url, options) {
-    this.transport = Ajax.getTransport();
-    this.setOptions(options);
-    this.request(url);
-  },
-
-  request: function(url) {
-    this.url = url;
-    this.method = this.options.method;
-    var params = this.options.parameters;
-
-    if (!['get', 'post'].include(this.method)) {
-      // simulate other verbs over post
-      params['_method'] = this.method;
-      this.method = 'post';
-    }
-
-    params = Hash.toQueryString(params);
-    if (params && /Konqueror|Safari|KHTML/.test(navigator.userAgent)) params += '&_='
-
-    // when GET, append parameters to URL
-    if (this.method == 'get' && params)
-      this.url += (this.url.indexOf('?') > -1 ? '&' : '?') + params;
-
-    try {
-      Ajax.Responders.dispatch('onCreate', this, this.transport);
-
-      this.transport.open(this.method.toUpperCase(), this.url,
-        this.options.asynchronous);
-
-      if (this.options.asynchronous)
-        setTimeout(function() { this.respondToReadyState(1) }.bind(this), 10);
-
-      this.transport.onreadystatechange = this.onStateChange.bind(this);
-      this.setRequestHeaders();
-
-      var body = this.method == 'post' ? (this.options.postBody || params) : null;
-
-      this.transport.send(body);
-
-      /* Force Firefox to handle ready state 4 for synchronous requests */
-      if (!this.options.asynchronous && this.transport.overrideMimeType)
-        this.onStateChange();
-
-    }
-    catch (e) {
-      this.dispatchException(e);
-    }
-  },
-
-  onStateChange: function() {
-    var readyState = this.transport.readyState;
-    if (readyState > 1 && !((readyState == 4) && this._complete))
-      this.respondToReadyState(this.transport.readyState);
-  },
-
-  setRequestHeaders: function() {
-    var headers = {
-      'X-Requested-With': 'XMLHttpRequest',
-      'X-Prototype-Version': Prototype.Version,
-      'Accept': 'text/javascript, text/html, application/xml, text/xml, */*'
-    };
-
-    if (this.method == 'post') {
-      headers['Content-type'] = this.options.contentType +
-        (this.options.encoding ? '; charset=' + this.options.encoding : '');
-
-      /* Force "Connection: close" for older Mozilla browsers to work
-       * around a bug where XMLHttpRequest sends an incorrect
-       * Content-length header. See Mozilla Bugzilla #246651.
-       */
-      if (this.transport.overrideMimeType &&
-          (navigator.userAgent.match(/Gecko\/(\d{4})/) || [0,2005])[1] < 2005)
-            headers['Connection'] = 'close';
-    }
-
-    // user-defined headers
-    if (typeof this.options.requestHeaders == 'object') {
-      var extras = this.options.requestHeaders;
-
-      if (typeof extras.push == 'function')
-        for (var i = 0, length = extras.length; i < length; i += 2)
-          headers[extras[i]] = extras[i+1];
-      else
-        $H(extras).each(function(pair) { headers[pair.key] = pair.value });
-    }
-
-    for (var name in headers)
-      this.transport.setRequestHeader(name, headers[name]);
-  },
-
-  success: function() {
-    return !this.transport.status
-        || (this.transport.status >= 200 && this.transport.status < 300);
-  },
-
-  respondToReadyState: function(readyState) {
-    var state = Ajax.Request.Events[readyState];
-    var transport = this.transport, json = this.evalJSON();
-
-    if (state == 'Complete') {
-      try {
-        this._complete = true;
-        (this.options['on' + this.transport.status]
-         || this.options['on' + (this.success() ? 'Success' : 'Failure')]
-         || Prototype.emptyFunction)(transport, json);
-      } catch (e) {
-        this.dispatchException(e);
-      }
-
-      if ((this.getHeader('Content-type') || 'text/javascript').strip().
-        match(/^(text|application)\/(x-)?(java|ecma)script(;.*)?$/i))
-          this.evalResponse();
-    }
-
-    try {
-      (this.options['on' + state] || Prototype.emptyFunction)(transport, json);
-      Ajax.Responders.dispatch('on' + state, this, transport, json);
-    } catch (e) {
-      this.dispatchException(e);
-    }
-
-    if (state == 'Complete') {
-      // avoid memory leak in MSIE: clean up
-      this.transport.onreadystatechange = Prototype.emptyFunction;
-    }
-  },
-
-  getHeader: function(name) {
-    try {
-      return this.transport.getResponseHeader(name);
-    } catch (e) { return null }
-  },
-
-  evalJSON: function() {
-    try {
-      var json = this.getHeader('X-JSON');
-      return json ? eval('(' + json + ')') : null;
-    } catch (e) { return null }
-  },
-
-  evalResponse: function() {
-    try {
-      return eval(this.transport.responseText);
-    } catch (e) {
-      this.dispatchException(e);
-    }
-  },
-
-  dispatchException: function(exception) {
-    (this.options.onException || Prototype.emptyFunction)(this, exception);
-    Ajax.Responders.dispatch('onException', this, exception);
-  }
-});
-
-Ajax.Updater = Class.create();
-
-Object.extend(Object.extend(Ajax.Updater.prototype, Ajax.Request.prototype), {
-  initialize: function(container, url, options) {
-    this.container = {
-      success: (container.success || container),
-      failure: (container.failure || (container.success ? null : container))
-    }
-
-    this.transport = Ajax.getTransport();
-    this.setOptions(options);
-
-    var onComplete = this.options.onComplete || Prototype.emptyFunction;
-    this.options.onComplete = (function(transport, param) {
-      this.updateContent();
-      onComplete(transport, param);
-    }).bind(this);
-
-    this.request(url);
-  },
-
-  updateContent: function() {
-    var receiver = this.container[this.success() ? 'success' : 'failure'];
-    var response = this.transport.responseText;
-
-    if (!this.options.evalScripts) response = response.stripScripts();
-
-    if (receiver = $(receiver)) {
-      if (this.options.insertion)
-        new this.options.insertion(receiver, response);
-      else
-        receiver.update(response);
-    }
-
-    if (this.success()) {
-      if (this.onComplete)
-        setTimeout(this.onComplete.bind(this), 10);
-    }
-  }
-});
-
-Ajax.PeriodicalUpdater = Class.create();
-Ajax.PeriodicalUpdater.prototype = Object.extend(new Ajax.Base(), {
-  initialize: function(container, url, options) {
-    this.setOptions(options);
-    this.onComplete = this.options.onComplete;
-
-    this.frequency = (this.options.frequency || 2);
-    this.decay = (this.options.decay || 1);
-
-    this.updater = {};
-    this.container = container;
-    this.url = url;
-
-    this.start();
-  },
-
-  start: function() {
-    this.options.onComplete = this.updateComplete.bind(this);
-    this.onTimerEvent();
-  },
-
-  stop: function() {
-    this.updater.options.onComplete = undefined;
-    clearTimeout(this.timer);
-    (this.onComplete || Prototype.emptyFunction).apply(this, arguments);
-  },
-
-  updateComplete: function(request) {
-    if (this.options.decay) {
-      this.decay = (request.responseText == this.lastText ?
-        this.decay * this.options.decay : 1);
-
-      this.lastText = request.responseText;
-    }
-    this.timer = setTimeout(this.onTimerEvent.bind(this),
-      this.decay * this.frequency * 1000);
-  },
-
-  onTimerEvent: function() {
-    this.updater = new Ajax.Updater(this.container, this.url, this.options);
-  }
-});
-function $(element) {
-  if (arguments.length > 1) {
-    for (var i = 0, elements = [], length = arguments.length; i < length; i++)
-      elements.push($(arguments[i]));
-    return elements;
-  }
-  if (typeof element == 'string')
-    element = document.getElementById(element);
-  return Element.extend(element);
-}
-
-if (Prototype.BrowserFeatures.XPath) {
-  document._getElementsByXPath = function(expression, parentElement) {
-    var results = [];
-    var query = document.evaluate(expression, $(parentElement) || document,
-      null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
-    for (var i = 0, length = query.snapshotLength; i < length; i++)
-      results.push(query.snapshotItem(i));
-    return results;
-  };
-}
-
-document.getElementsByClassName = function(className, parentElement) {
-  if (Prototype.BrowserFeatures.XPath) {
-    var q = ".//*[contains(concat(' ', @class, ' '), ' " + className + " ')]";
-    return document._getElementsByXPath(q, parentElement);
-  } else {
-    var children = ($(parentElement) || document.body).getElementsByTagName('*');
-    var elements = [], child;
-    for (var i = 0, length = children.length; i < length; i++) {
-      child = children[i];
-      if (Element.hasClassName(child, className))
-        elements.push(Element.extend(child));
-    }
-    return elements;
-  }
-};
-
-/*--------------------------------------------------------------------------*/
-
-if (!window.Element)
-  var Element = new Object();
-
-Element.extend = function(element) {
-  if (!element || _nativeExtensions || element.nodeType == 3) return element;
-
-  if (!element._extended && element.tagName && element != window) {
-    var methods = Object.clone(Element.Methods), cache = Element.extend.cache;
-
-    if (element.tagName == 'FORM')
-      Object.extend(methods, Form.Methods);
-    if (['INPUT', 'TEXTAREA', 'SELECT'].include(element.tagName))
-      Object.extend(methods, Form.Element.Methods);
-
-    Object.extend(methods, Element.Methods.Simulated);
-
-    for (var property in methods) {
-      var value = methods[property];
-      if (typeof value == 'function' && !(property in element))
-        element[property] = cache.findOrStore(value);
-    }
-  }
-
-  element._extended = true;
-  return element;
-};
-
-Element.extend.cache = {
-  findOrStore: function(value) {
-    return this[value] = this[value] || function() {
-      return value.apply(null, [this].concat($A(arguments)));
-    }
-  }
-};
-
-Element.Methods = {
-  visible: function(element) {
-    return $(element).style.display != 'none';
-  },
-
-  toggle: function(element) {
-    element = $(element);
-    Element[Element.visible(element) ? 'hide' : 'show'](element);
-    return element;
-  },
-
-  hide: function(element) {
-    $(element).style.display = 'none';
-    return element;
-  },
-
-  show: function(element) {
-    $(element).style.display = '';
-    return element;
-  },
-
-  remove: function(element) {
-    element = $(element);
-    element.parentNode.removeChild(element);
-    return element;
-  },
-
-  update: function(element, html) {
-    html = typeof html == 'undefined' ? '' : html.toString();
-    $(element).innerHTML = html.stripScripts();
-    setTimeout(function() {html.evalScripts()}, 10);
-    return element;
-  },
-
-  replace: function(element, html) {
-    element = $(element);
-    html = typeof html == 'undefined' ? '' : html.toString();
-    if (element.outerHTML) {
-      element.outerHTML = html.stripScripts();
-    } else {
-      var range = element.ownerDocument.createRange();
-      range.selectNodeContents(element);
-      element.parentNode.replaceChild(
-        range.createContextualFragment(html.stripScripts()), element);
-    }
-    setTimeout(function() {html.evalScripts()}, 10);
-    return element;
-  },
-
-  inspect: function(element) {
-    element = $(element);
-    var result = '<' + element.tagName.toLowerCase();
-    $H({'id': 'id', 'className': 'class'}).each(function(pair) {
-      var property = pair.first(), attribute = pair.last();
-      var value = (element[property] || '').toString();
-      if (value) result += ' ' + attribute + '=' + value.inspect(true);
-    });
-    return result + '>';
-  },
-
-  recursivelyCollect: function(element, property) {
-    element = $(element);
-    var elements = [];
-    while (element = element[property])
-      if (element.nodeType == 1)
-        elements.push(Element.extend(element));
-    return elements;
-  },
-
-  ancestors: function(element) {
-    return $(element).recursivelyCollect('parentNode');
-  },
-
-  descendants: function(element) {
-    return $A($(element).getElementsByTagName('*'));
-  },
-
-  immediateDescendants: function(element) {
-    if (!(element = $(element).firstChild)) return [];
-    while (element && element.nodeType != 1) element = element.nextSibling;
-    if (element) return [element].concat($(element).nextSiblings());
-    return [];
-  },
-
-  previousSiblings: function(element) {
-    return $(element).recursivelyCollect('previousSibling');
-  },
-
-  nextSiblings: function(element) {
-    return $(element).recursivelyCollect('nextSibling');
-  },
-
-  siblings: function(element) {
-    element = $(element);
-    return element.previousSiblings().reverse().concat(element.nextSiblings());
-  },
-
-  match: function(element, selector) {
-    if (typeof selector == 'string')
-      selector = new Selector(selector);
-    return selector.match($(element));
-  },
-
-  up: function(element, expression, index) {
-    return Selector.findElement($(element).ancestors(), expression, index);
-  },
-
-  down: function(element, expression, index) {
-    return Selector.findElement($(element).descendants(), expression, index);
-  },
-
-  previous: function(element, expression, index) {
-    return Selector.findElement($(element).previousSiblings(), expression, index);
-  },
-
-  next: function(element, expression, index) {
-    return Selector.findElement($(element).nextSiblings(), expression, index);
-  },
-
-  getElementsBySelector: function() {
-    var args = $A(arguments), element = $(args.shift());
-    return Selector.findChildElements(element, args);
-  },
-
-  getElementsByClassName: function(element, className) {
-    return document.getElementsByClassName(className, element);
-  },
-
-  readAttribute: function(element, name) {
-    element = $(element);
-    if (document.all && !window.opera) {
-      var t = Element._attributeTranslations;
-      if (t.values[name]) return t.values[name](element, name);
-      if (t.names[name])  name = t.names[name];
-      var attribute = element.attributes[name];
-      if(attribute) return attribute.nodeValue;
-    }
-    return element.getAttribute(name);
-  },
-
-  getHeight: function(element) {
-    return $(element).getDimensions().height;
-  },
-
-  getWidth: function(element) {
-    return $(element).getDimensions().width;
-  },
-
-  classNames: function(element) {
-    return new Element.ClassNames(element);
-  },
-
-  hasClassName: function(element, className) {
-    if (!(element = $(element))) return;
-    var elementClassName = element.className;
-    if (elementClassName.length == 0) return false;
-    if (elementClassName == className ||
-        elementClassName.match(new RegExp("(^|\\s)" + className + "(\\s|$)")))
-      return true;
-    return false;
-  },
-
-  addClassName: function(element, className) {
-    if (!(element = $(element))) return;
-    Element.classNames(element).add(className);
-    return element;
-  },
-
-  removeClassName: function(element, className) {
-    if (!(element = $(element))) return;
-    Element.classNames(element).remove(className);
-    return element;
-  },
-
-  toggleClassName: function(element, className) {
-    if (!(element = $(element))) return;
-    Element.classNames(element)[element.hasClassName(className) ? 'remove' : 'add'](className);
-    return element;
-  },
-
-  observe: function() {
-    Event.observe.apply(Event, arguments);
-    return $A(arguments).first();
-  },
-
-  stopObserving: function() {
-    Event.stopObserving.apply(Event, arguments);
-    return $A(arguments).first();
-  },
-
-  // removes whitespace-only text node children
-  cleanWhitespace: function(element) {
-    element = $(element);
-    var node = element.firstChild;
-    while (node) {
-      var nextNode = node.nextSibling;
-      if (node.nodeType == 3 && !/\S/.test(node.nodeValue))
-        element.removeChild(node);
-      node = nextNode;
-    }
-    return element;
-  },
-
-  empty: function(element) {
-    return $(element).innerHTML.match(/^\s*$/);
-  },
-
-  descendantOf: function(element, ancestor) {
-    element = $(element), ancestor = $(ancestor);
-    while (element = element.parentNode)
-      if (element == ancestor) return true;
-    return false;
-  },
-
-  scrollTo: function(element) {
-    element = $(element);
-    var pos = Position.cumulativeOffset(element);
-    window.scrollTo(pos[0], pos[1]);
-    return element;
-  },
-
-  getStyle: function(element, style) {
-    element = $(element);
-    if (['float','cssFloat'].include(style))
-      style = (typeof element.style.styleFloat != 'undefined' ? 'styleFloat' : 'cssFloat');
-    style = style.camelize();
-    var value = element.style[style];
-    if (!value) {
-      if (document.defaultView && document.defaultView.getComputedStyle) {
-        var css = document.defaultView.getComputedStyle(element, null);
-        value = css ? css[style] : null;
-      } else if (element.currentStyle) {
-        value = element.currentStyle[style];
-      }
-    }
-
-    if((value == 'auto') && ['width','height'].include(style) && (element.getStyle('display') != 'none'))
-      value = element['offset'+style.capitalize()] + 'px';
-
-    if (window.opera && ['left', 'top', 'right', 'bottom'].include(style))
-      if (Element.getStyle(element, 'position') == 'static') value = 'auto';
-    if(style == 'opacity') {
-      if(value) return parseFloat(value);
-      if(value = (element.getStyle('filter') || '').match(/alpha\(opacity=(.*)\)/))
-        if(value[1]) return parseFloat(value[1]) / 100;
-      return 1.0;
-    }
-    return value == 'auto' ? null : value;
-  },
-
-  setStyle: function(element, style) {
-    element = $(element);
-    for (var name in style) {
-      var value = style[name];
-      if(name == 'opacity') {
-        if (value == 1) {
-          value = (/Gecko/.test(navigator.userAgent) &&
-            !/Konqueror|Safari|KHTML/.test(navigator.userAgent)) ? 0.999999 : 1.0;
-          if(/MSIE/.test(navigator.userAgent) && !window.opera)
-            element.style.filter = element.getStyle('filter').replace(/alpha\([^\)]*\)/gi,'');
-        } else if(value == '') {
-          if(/MSIE/.test(navigator.userAgent) && !window.opera)
-            element.style.filter = element.getStyle('filter').replace(/alpha\([^\)]*\)/gi,'');
-        } else {
-          if(value < 0.00001) value = 0;
-          if(/MSIE/.test(navigator.userAgent) && !window.opera)
-            element.style.filter = element.getStyle('filter').replace(/alpha\([^\)]*\)/gi,'') +
-              'alpha(opacity='+value*100+')';
-        }
-      } else if(['float','cssFloat'].include(name)) name = (typeof element.style.styleFloat != 'undefined') ? 'styleFloat' : 'cssFloat';
-      element.style[name.camelize()] = value;
-    }
-    return element;
-  },
-
-  getDimensions: function(element) {
-    element = $(element);
-    var display = $(element).getStyle('display');
-    if (display != 'none' && display != null) // Safari bug
-      return {width: element.offsetWidth, height: element.offsetHeight};
-
-    // All *Width and *Height properties give 0 on elements with display none,
-    // so enable the element temporarily
-    var els = element.style;
-    var originalVisibility = els.visibility;
-    var originalPosition = els.position;
-    var originalDisplay = els.display;
-    els.visibility = 'hidden';
-    els.position = 'absolute';
-    els.display = 'block';
-    var originalWidth = element.clientWidth;
-    var originalHeight = element.clientHeight;
-    els.display = originalDisplay;
-    els.position = originalPosition;
-    els.visibility = originalVisibility;
-    return {width: originalWidth, height: originalHeight};
-  },
-
-  makePositioned: function(element) {
-    element = $(element);
-    var pos = Element.getStyle(element, 'position');
-    if (pos == 'static' || !pos) {
-      element._madePositioned = true;
-      element.style.position = 'relative';
-      // Opera returns the offset relative to the positioning context, when an
-      // element is position relative but top and left have not been defined
-      if (window.opera) {
-        element.style.top = 0;
-        element.style.left = 0;
-      }
-    }
-    return element;
-  },
-
-  undoPositioned: function(element) {
-    element = $(element);
-    if (element._madePositioned) {
-      element._madePositioned = undefined;
-      element.style.position =
-        element.style.top =
-        element.style.left =
-        element.style.bottom =
-        element.style.right = '';
-    }
-    return element;
-  },
-
-  makeClipping: function(element) {
-    element = $(element);
-    if (element._overflow) return element;
-    element._overflow = element.style.overflow || 'auto';
-    if ((Element.getStyle(element, 'overflow') || 'visible') != 'hidden')
-      element.style.overflow = 'hidden';
-    return element;
-  },
-
-  undoClipping: function(element) {
-    element = $(element);
-    if (!element._overflow) return element;
-    element.style.overflow = element._overflow == 'auto' ? '' : element._overflow;
-    element._overflow = null;
-    return element;
-  }
-};
-
-Object.extend(Element.Methods, {childOf: Element.Methods.descendantOf});
-
-Element._attributeTranslations = {};
-
-Element._attributeTranslations.names = {
-  colspan:   "colSpan",
-  rowspan:   "rowSpan",
-  valign:    "vAlign",
-  datetime:  "dateTime",
-  accesskey: "accessKey",
-  tabindex:  "tabIndex",
-  enctype:   "encType",
-  maxlength: "maxLength",
-  readonly:  "readOnly",
-  longdesc:  "longDesc"
-};
-
-Element._attributeTranslations.values = {
-  _getAttr: function(element, attribute) {
-    return element.getAttribute(attribute, 2);
-  },
-
-  _flag: function(element, attribute) {
-    return $(element).hasAttribute(attribute) ? attribute : null;
-  },
-
-  style: function(element) {
-    return element.style.cssText.toLowerCase();
-  },
-
-  title: function(element) {
-    var node = element.getAttributeNode('title');
-    return node.specified ? node.nodeValue : null;
-  }
-};
-
-Object.extend(Element._attributeTranslations.values, {
-  href: Element._attributeTranslations.values._getAttr,
-  src:  Element._attributeTranslations.values._getAttr,
-  disabled: Element._attributeTranslations.values._flag,
-  checked:  Element._attributeTranslations.values._flag,
-  readonly: Element._attributeTranslations.values._flag,
-  multiple: Element._attributeTranslations.values._flag
-});
-
-Element.Methods.Simulated = {
-  hasAttribute: function(element, attribute) {
-    var t = Element._attributeTranslations;
-    attribute = t.names[attribute] || attribute;
-    return $(element).getAttributeNode(attribute).specified;
-  }
-};
-
-// IE is missing .innerHTML support for TABLE-related elements
-if (document.all && !window.opera){
-  Element.Methods.update = function(element, html) {
-    element = $(element);
-    html = typeof html == 'undefined' ? '' : html.toString();
-    var tagName = element.tagName.toUpperCase();
-    if (['THEAD','TBODY','TR','TD'].include(tagName)) {
-      var div = document.createElement('div');
-      switch (tagName) {
-        case 'THEAD':
-        case 'TBODY':
-          div.innerHTML = '<table><tbody>' +  html.stripScripts() + '</tbody></table>';
-          depth = 2;
-          break;
-        case 'TR':
-          div.innerHTML = '<table><tbody><tr>' +  html.stripScripts() + '</tr></tbody></table>';
-          depth = 3;
-          break;
-        case 'TD':
-          div.innerHTML = '<table><tbody><tr><td>' +  html.stripScripts() + '</td></tr></tbody></table>';
-          depth = 4;
-      }
-      $A(element.childNodes).each(function(node){
-        element.removeChild(node)
-      });
-      depth.times(function(){ div = div.firstChild });
-
-      $A(div.childNodes).each(
-        function(node){ element.appendChild(node) });
-    } else {
-      element.innerHTML = html.stripScripts();
-    }
-    setTimeout(function() {html.evalScripts()}, 10);
-    return element;
-  }
-};
-
-Object.extend(Element, Element.Methods);
-
-var _nativeExtensions = false;
-
-if(/Konqueror|Safari|KHTML/.test(navigator.userAgent))
-  ['', 'Form', 'Input', 'TextArea', 'Select'].each(function(tag) {
-    var className = 'HTML' + tag + 'Element';
-    if(window[className]) return;
-    var klass = window[className] = {};
-    klass.prototype = document.createElement(tag ? tag.toLowerCase() : 'div').__proto__;
-  });
-
-Element.addMethods = function(methods) {
-  Object.extend(Element.Methods, methods || {});
-
-  function copy(methods, destination, onlyIfAbsent) {
-    onlyIfAbsent = onlyIfAbsent || false;
-    var cache = Element.extend.cache;
-    for (var property in methods) {
-      var value = methods[property];
-      if (!onlyIfAbsent || !(property in destination))
-        destination[property] = cache.findOrStore(value);
-    }
-  }
-
-  if (typeof HTMLElement != 'undefined') {
-    copy(Element.Methods, HTMLElement.prototype);
-    copy(Element.Methods.Simulated, HTMLElement.prototype, true);
-    copy(Form.Methods, HTMLFormElement.prototype);
-    [HTMLInputElement, HTMLTextAreaElement, HTMLSelectElement].each(function(klass) {
-      copy(Form.Element.Methods, klass.prototype);
-    });
-    _nativeExtensions = true;
-  }
-}
-
-var Toggle = new Object();
-Toggle.display = Element.toggle;
-
-/*--------------------------------------------------------------------------*/
-
-Abstract.Insertion = function(adjacency) {
-  this.adjacency = adjacency;
-}
-
-Abstract.Insertion.prototype = {
-  initialize: function(element, content) {
-    this.element = $(element);
-    this.content = content.stripScripts();
-
-    if (this.adjacency && this.element.insertAdjacentHTML) {
-      try {
-        this.element.insertAdjacentHTML(this.adjacency, this.content);
-      } catch (e) {
-        var tagName = this.element.tagName.toUpperCase();
-        if (['TBODY', 'TR'].include(tagName)) {
-          this.insertContent(this.contentFromAnonymousTable());
-        } else {
-          throw e;
-        }
-      }
-    } else {
-      this.range = this.element.ownerDocument.createRange();
-      if (this.initializeRange) this.initializeRange();
-      this.insertContent([this.range.createContextualFragment(this.content)]);
-    }
-
-    setTimeout(function() {content.evalScripts()}, 10);
-  },
-
-  contentFromAnonymousTable: function() {
-    var div = document.createElement('div');
-    div.innerHTML = '<table><tbody>' + this.content + '</tbody></table>';
-    return $A(div.childNodes[0].childNodes[0].childNodes);
-  }
-}
-
-var Insertion = new Object();
-
-Insertion.Before = Class.create();
-Insertion.Before.prototype = Object.extend(new Abstract.Insertion('beforeBegin'), {
-  initializeRange: function() {
-    this.range.setStartBefore(this.element);
-  },
-
-  insertContent: function(fragments) {
-    fragments.each((function(fragment) {
-      this.element.parentNode.insertBefore(fragment, this.element);
-    }).bind(this));
-  }
-});
-
-Insertion.Top = Class.create();
-Insertion.Top.prototype = Object.extend(new Abstract.Insertion('afterBegin'), {
-  initializeRange: function() {
-    this.range.selectNodeContents(this.element);
-    this.range.collapse(true);
-  },
-
-  insertContent: function(fragments) {
-    fragments.reverse(false).each((function(fragment) {
-      this.element.insertBefore(fragment, this.element.firstChild);
-    }).bind(this));
-  }
-});
-
-Insertion.Bottom = Class.create();
-Insertion.Bottom.prototype = Object.extend(new Abstract.Insertion('beforeEnd'), {
-  initializeRange: function() {
-    this.range.selectNodeContents(this.element);
-    this.range.collapse(this.element);
-  },
-
-  insertContent: function(fragments) {
-    fragments.each((function(fragment) {
-      this.element.appendChild(fragment);
-    }).bind(this));
-  }
-});
-
-Insertion.After = Class.create();
-Insertion.After.prototype = Object.extend(new Abstract.Insertion('afterEnd'), {
-  initializeRange: function() {
-    this.range.setStartAfter(this.element);
-  },
-
-  insertContent: function(fragments) {
-    fragments.each((function(fragment) {
-      this.element.parentNode.insertBefore(fragment,
-        this.element.nextSibling);
-    }).bind(this));
-  }
-});
-
-/*--------------------------------------------------------------------------*/
-
-Element.ClassNames = Class.create();
-Element.ClassNames.prototype = {
-  initialize: function(element) {
-    this.element = $(element);
-  },
-
-  _each: function(iterator) {
-    this.element.className.split(/\s+/).select(function(name) {
-      return name.length > 0;
-    })._each(iterator);
-  },
-
-  set: function(className) {
-    this.element.className = className;
-  },
-
-  add: function(classNameToAdd) {
-    if (this.include(classNameToAdd)) return;
-    this.set($A(this).concat(classNameToAdd).join(' '));
-  },
-
-  remove: function(classNameToRemove) {
-    if (!this.include(classNameToRemove)) return;
-    this.set($A(this).without(classNameToRemove).join(' '));
-  },
-
-  toString: function() {
-    return $A(this).join(' ');
-  }
-};
-
-Object.extend(Element.ClassNames.prototype, Enumerable);
-var Selector = Class.create();
-Selector.prototype = {
-  initialize: function(expression) {
-    this.params = {classNames: []};
-    this.expression = expression.toString().strip();
-    this.parseExpression();
-    this.compileMatcher();
-  },
-
-  parseExpression: function() {
-    function abort(message) { throw 'Parse error in selector: ' + message; }
-
-    if (this.expression == '')  abort('empty expression');
-
-    var params = this.params, expr = this.expression, match, modifier, clause, rest;
-    while (match = expr.match(/^(.*)\[([a-z0-9_:-]+?)(?:([~\|!]?=)(?:"([^"]*)"|([^\]\s]*)))?\]$/i)) {
-      params.attributes = params.attributes || [];
-      params.attributes.push({name: match[2], operator: match[3], value: match[4] || match[5] || ''});
-      expr = match[1];
-    }
-
-    if (expr == '*') return this.params.wildcard = true;
-
-    while (match = expr.match(/^([^a-z0-9_-])?([a-z0-9_-]+)(.*)/i)) {
-      modifier = match[1], clause = match[2], rest = match[3];
-      switch (modifier) {
-        case '#':       params.id = clause; break;
-        case '.':       params.classNames.push(clause); break;
-        case '':
-        case undefined: params.tagName = clause.toUpperCase(); break;
-        default:        abort(expr.inspect());
-      }
-      expr = rest;
-    }
-
-    if (expr.length > 0) abort(expr.inspect());
-  },
-
-  buildMatchExpression: function() {
-    var params = this.params, conditions = [], clause;
-
-    if (params.wildcard)
-      conditions.push('true');
-    if (clause = params.id)
-      conditions.push('element.readAttribute("id") == ' + clause.inspect());
-    if (clause = params.tagName)
-      conditions.push('element.tagName.toUpperCase() == ' + clause.inspect());
-    if ((clause = params.classNames).length > 0)
-      for (var i = 0, length = clause.length; i < length; i++)
-        conditions.push('element.hasClassName(' + clause[i].inspect() + ')');
-    if (clause = params.attributes) {
-      clause.each(function(attribute) {
-        var value = 'element.readAttribute(' + attribute.name.inspect() + ')';
-        var splitValueBy = function(delimiter) {
-          return value + ' && ' + value + '.split(' + delimiter.inspect() + ')';
-        }
-
-        switch (attribute.operator) {
-          case '=':       conditions.push(value + ' == ' + attribute.value.inspect()); break;
-          case '~=':      conditions.push(splitValueBy(' ') + '.include(' + attribute.value.inspect() + ')'); break;
-          case '|=':      conditions.push(
-                            splitValueBy('-') + '.first().toUpperCase() == ' + attribute.value.toUpperCase().inspect()
-                          ); break;
-          case '!=':      conditions.push(value + ' != ' + attribute.value.inspect()); break;
-          case '':
-          case undefined: conditions.push('element.hasAttribute(' + attribute.name.inspect() + ')'); break;
-          default:        throw 'Unknown operator ' + attribute.operator + ' in selector';
-        }
-      });
-    }
-
-    return conditions.join(' && ');
-  },
-
-  compileMatcher: function() {
-    this.match = new Function('element', 'if (!element.tagName) return false; \
-      element = $(element); \
-      return ' + this.buildMatchExpression());
-  },
-
-  findElements: function(scope) {
-    var element;
-
-    if (element = $(this.params.id))
-      if (this.match(element))
-        if (!scope || Element.childOf(element, scope))
-          return [element];
-
-    scope = (scope || document).getElementsByTagName(this.params.tagName || '*');
-
-    var results = [];
-    for (var i = 0, length = scope.length; i < length; i++)
-      if (this.match(element = scope[i]))
-        results.push(Element.extend(element));
-
-    return results;
-  },
-
-  toString: function() {
-    return this.expression;
-  }
-}
-
-Object.extend(Selector, {
-  matchElements: function(elements, expression) {
-    var selector = new Selector(expression);
-    return elements.select(selector.match.bind(selector)).map(Element.extend);
-  },
-
-  findElement: function(elements, expression, index) {
-    if (typeof expression == 'number') index = expression, expression = false;
-    return Selector.matchElements(elements, expression || '*')[index || 0];
-  },
-
-  findChildElements: function(element, expressions) {
-    return expressions.map(function(expression) {
-      return expression.match(/[^\s"]+(?:"[^"]*"[^\s"]+)*/g).inject([null], function(results, expr) {
-        var selector = new Selector(expr);
-        return results.inject([], function(elements, result) {
-          return elements.concat(selector.findElements(result || element));
-        });
-      });
-    }).flatten();
-  }
-});
-
-function $$() {
-  return Selector.findChildElements(document, $A(arguments));
-}
-var Form = {
-  reset: function(form) {
-    $(form).reset();
-    return form;
-  },
-
-  serializeElements: function(elements, getHash) {
-    var data = elements.inject({}, function(result, element) {
-      if (!element.disabled && element.name) {
-        var key = element.name, value = $(element).getValue();
-        if (value != undefined) {
-          if (result[key]) {
-            if (result[key].constructor != Array) result[key] = [result[key]];
-            result[key].push(value);
-          }
-          else result[key] = value;
-        }
-      }
-      return result;
-    });
-
-    return getHash ? data : Hash.toQueryString(data);
-  }
-};
-
-Form.Methods = {
-  serialize: function(form, getHash) {
-    return Form.serializeElements(Form.getElements(form), getHash);
-  },
-
-  getElements: function(form) {
-    return $A($(form).getElementsByTagName('*')).inject([],
-      function(elements, child) {
-        if (Form.Element.Serializers[child.tagName.toLowerCase()])
-          elements.push(Element.extend(child));
-        return elements;
-      }
-    );
-  },
-
-  getInputs: function(form, typeName, name) {
-    form = $(form);
-    var inputs = form.getElementsByTagName('input');
-
-    if (!typeName && !name) return $A(inputs).map(Element.extend);
-
-    for (var i = 0, matchingInputs = [], length = inputs.length; i < length; i++) {
-      var input = inputs[i];
-      if ((typeName && input.type != typeName) || (name && input.name != name))
-        continue;
-      matchingInputs.push(Element.extend(input));
-    }
-
-    return matchingInputs;
-  },
-
-  disable: function(form) {
-    form = $(form);
-    form.getElements().each(function(element) {
-      element.blur();
-      element.disabled = 'true';
-    });
-    return form;
-  },
-
-  enable: function(form) {
-    form = $(form);
-    form.getElements().each(function(element) {
-      element.disabled = '';
-    });
-    return form;
-  },
-
-  findFirstElement: function(form) {
-    return $(form).getElements().find(function(element) {
-      return element.type != 'hidden' && !element.disabled &&
-        ['input', 'select', 'textarea'].include(element.tagName.toLowerCase());
-    });
-  },
-
-  focusFirstElement: function(form) {
-    form = $(form);
-    form.findFirstElement().activate();
-    return form;
-  }
-}
-
-Object.extend(Form, Form.Methods);
-
-/*--------------------------------------------------------------------------*/
-
-Form.Element = {
-  focus: function(element) {
-    $(element).focus();
-    return element;
-  },
-
-  select: function(element) {
-    $(element).select();
-    return element;
-  }
-}
-
-Form.Element.Methods = {
-  serialize: function(element) {
-    element = $(element);
-    if (!element.disabled && element.name) {
-      var value = element.getValue();
-      if (value != undefined) {
-        var pair = {};
-        pair[element.name] = value;
-        return Hash.toQueryString(pair);
-      }
-    }
-    return '';
-  },
-
-  getValue: function(element) {
-    element = $(element);
-    var method = element.tagName.toLowerCase();
-    return Form.Element.Serializers[method](element);
-  },
-
-  clear: function(element) {
-    $(element).value = '';
-    return element;
-  },
-
-  present: function(element) {
-    return $(element).value != '';
-  },
-
-  activate: function(element) {
-    element = $(element);
-    element.focus();
-    if (element.select && ( element.tagName.toLowerCase() != 'input' ||
-      !['button', 'reset', 'submit'].include(element.type) ) )
-      element.select();
-    return element;
-  },
-
-  disable: function(element) {
-    element = $(element);
-    element.disabled = true;
-    return element;
-  },
-
-  enable: function(element) {
-    element = $(element);
-    element.blur();
-    element.disabled = false;
-    return element;
-  }
-}
-
-Object.extend(Form.Element, Form.Element.Methods);
-var Field = Form.Element;
-var $F = Form.Element.getValue;
-
-/*--------------------------------------------------------------------------*/
-
-Form.Element.Serializers = {
-  input: function(element) {
-    switch (element.type.toLowerCase()) {
-      case 'checkbox':
-      case 'radio':
-        return Form.Element.Serializers.inputSelector(element);
-      default:
-        return Form.Element.Serializers.textarea(element);
-    }
-  },
-
-  inputSelector: function(element) {
-    return element.checked ? element.value : null;
-  },
-
-  textarea: function(element) {
-    return element.value;
-  },
-
-  select: function(element) {
-    return this[element.type == 'select-one' ?
-      'selectOne' : 'selectMany'](element);
-  },
-
-  selectOne: function(element) {
-    var index = element.selectedIndex;
-    return index >= 0 ? this.optionValue(element.options[index]) : null;
-  },
-
-  selectMany: function(element) {
-    var values, length = element.length;
-    if (!length) return null;
-
-    for (var i = 0, values = []; i < length; i++) {
-      var opt = element.options[i];
-      if (opt.selected) values.push(this.optionValue(opt));
-    }
-    return values;
-  },
-
-  optionValue: function(opt) {
-    // extend element because hasAttribute may not be native
-    return Element.extend(opt).hasAttribute('value') ? opt.value : opt.text;
-  }
-}
-
-/*--------------------------------------------------------------------------*/
-
-Abstract.TimedObserver = function() {}
-Abstract.TimedObserver.prototype = {
-  initialize: function(element, frequency, callback) {
-    this.frequency = frequency;
-    this.element   = $(element);
-    this.callback  = callback;
-
-    this.lastValue = this.getValue();
-    this.registerCallback();
-  },
-
-  registerCallback: function() {
-    setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);
-  },
-
-  onTimerEvent: function() {
-    var value = this.getValue();
-    var changed = ('string' == typeof this.lastValue && 'string' == typeof value
-      ? this.lastValue != value : String(this.lastValue) != String(value));
-    if (changed) {
-      this.callback(this.element, value);
-      this.lastValue = value;
-    }
-  }
-}
-
-Form.Element.Observer = Class.create();
-Form.Element.Observer.prototype = Object.extend(new Abstract.TimedObserver(), {
-  getValue: function() {
-    return Form.Element.getValue(this.element);
-  }
-});
-
-Form.Observer = Class.create();
-Form.Observer.prototype = Object.extend(new Abstract.TimedObserver(), {
-  getValue: function() {
-    return Form.serialize(this.element);
-  }
-});
-
-/*--------------------------------------------------------------------------*/
-
-Abstract.EventObserver = function() {}
-Abstract.EventObserver.prototype = {
-  initialize: function(element, callback) {
-    this.element  = $(element);
-    this.callback = callback;
-
-    this.lastValue = this.getValue();
-    if (this.element.tagName.toLowerCase() == 'form')
-      this.registerFormCallbacks();
-    else
-      this.registerCallback(this.element);
-  },
-
-  onElementEvent: function() {
-    var value = this.getValue();
-    if (this.lastValue != value) {
-      this.callback(this.element, value);
-      this.lastValue = value;
-    }
-  },
-
-  registerFormCallbacks: function() {
-    Form.getElements(this.element).each(this.registerCallback.bind(this));
-  },
-
-  registerCallback: function(element) {
-    if (element.type) {
-      switch (element.type.toLowerCase()) {
-        case 'checkbox':
-        case 'radio':
-          Event.observe(element, 'click', this.onElementEvent.bind(this));
-          break;
-        default:
-          Event.observe(element, 'change', this.onElementEvent.bind(this));
-          break;
-      }
-    }
-  }
-}
-
-Form.Element.EventObserver = Class.create();
-Form.Element.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), {
-  getValue: function() {
-    return Form.Element.getValue(this.element);
-  }
-});
-
-Form.EventObserver = Class.create();
-Form.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), {
-  getValue: function() {
-    return Form.serialize(this.element);
-  }
-});
-if (!window.Event) {
-  var Event = new Object();
-}
-
-Object.extend(Event, {
-  KEY_BACKSPACE: 8,
-  KEY_TAB:       9,
-  KEY_RETURN:   13,
-  KEY_ESC:      27,
-  KEY_LEFT:     37,
-  KEY_UP:       38,
-  KEY_RIGHT:    39,
-  KEY_DOWN:     40,
-  KEY_DELETE:   46,
-  KEY_HOME:     36,
-  KEY_END:      35,
-  KEY_PAGEUP:   33,
-  KEY_PAGEDOWN: 34,
-
-  element: function(event) {
-    return event.target || event.srcElement;
-  },
-
-  isLeftClick: function(event) {
-    return (((event.which) && (event.which == 1)) ||
-            ((event.button) && (event.button == 1)));
-  },
-
-  pointerX: function(event) {
-    return event.pageX || (event.clientX +
-      (document.documentElement.scrollLeft || document.body.scrollLeft));
-  },
-
-  pointerY: function(event) {
-    return event.pageY || (event.clientY +
-      (document.documentElement.scrollTop || document.body.scrollTop));
-  },
-
-  stop: function(event) {
-    if (event.preventDefault) {
-      event.preventDefault();
-      event.stopPropagation();
-    } else {
-      event.returnValue = false;
-      event.cancelBubble = true;
-    }
-  },
-
-  // find the first node with the given tagName, starting from the
-  // node the event was triggered on; traverses the DOM upwards
-  findElement: function(event, tagName) {
-    var element = Event.element(event);
-    while (element.parentNode && (!element.tagName ||
-        (element.tagName.toUpperCase() != tagName.toUpperCase())))
-      element = element.parentNode;
-    return element;
-  },
-
-  observers: false,
-
-  _observeAndCache: function(element, name, observer, useCapture) {
-    if (!this.observers) this.observers = [];
-    if (element.addEventListener) {
-      this.observers.push([element, name, observer, useCapture]);
-      element.addEventListener(name, observer, useCapture);
-    } else if (element.attachEvent) {
-      this.observers.push([element, name, observer, useCapture]);
-      element.attachEvent('on' + name, observer);
-    }
-  },
-
-  unloadCache: function() {
-    if (!Event.observers) return;
-    for (var i = 0, length = Event.observers.length; i < length; i++) {
-      Event.stopObserving.apply(this, Event.observers[i]);
-      Event.observers[i][0] = null;
-    }
-    Event.observers = false;
-  },
-
-  observe: function(element, name, observer, useCapture) {
-    element = $(element);
-    useCapture = useCapture || false;
-
-    if (name == 'keypress' &&
-        (navigator.appVersion.match(/Konqueror|Safari|KHTML/)
-        || element.attachEvent))
-      name = 'keydown';
-
-    Event._observeAndCache(element, name, observer, useCapture);
-  },
-
-  stopObserving: function(element, name, observer, useCapture) {
-    element = $(element);
-    useCapture = useCapture || false;
-
-    if (name == 'keypress' &&
-        (navigator.appVersion.match(/Konqueror|Safari|KHTML/)
-        || element.detachEvent))
-      name = 'keydown';
-
-    if (element.removeEventListener) {
-      element.removeEventListener(name, observer, useCapture);
-    } else if (element.detachEvent) {
-      try {
-        element.detachEvent('on' + name, observer);
-      } catch (e) {}
-    }
-  }
-});
-
-/* prevent memory leaks in IE */
-if (navigator.appVersion.match(/\bMSIE\b/))
-  Event.observe(window, 'unload', Event.unloadCache, false);
-var Position = {
-  // set to true if needed, warning: firefox performance problems
-  // NOT neeeded for page scrolling, only if draggable contained in
-  // scrollable elements
-  includeScrollOffsets: false,
-
-  // must be called before calling withinIncludingScrolloffset, every time the
-  // page is scrolled
-  prepare: function() {
-    this.deltaX =  window.pageXOffset
-                || document.documentElement.scrollLeft
-                || document.body.scrollLeft
-                || 0;
-    this.deltaY =  window.pageYOffset
-                || document.documentElement.scrollTop
-                || document.body.scrollTop
-                || 0;
-  },
-
-  realOffset: function(element) {
-    var valueT = 0, valueL = 0;
-    do {
-      valueT += element.scrollTop  || 0;
-      valueL += element.scrollLeft || 0;
-      element = element.parentNode;
-    } while (element);
-    return [valueL, valueT];
-  },
-
-  cumulativeOffset: function(element) {
-    var valueT = 0, valueL = 0;
-    do {
-      valueT += element.offsetTop  || 0;
-      valueL += element.offsetLeft || 0;
-      element = element.offsetParent;
-    } while (element);
-    return [valueL, valueT];
-  },
-
-  positionedOffset: function(element) {
-    var valueT = 0, valueL = 0;
-    do {
-      valueT += element.offsetTop  || 0;
-      valueL += element.offsetLeft || 0;
-      element = element.offsetParent;
-      if (element) {
-        if(element.tagName=='BODY') break;
-        var p = Element.getStyle(element, 'position');
-        if (p == 'relative' || p == 'absolute') break;
-      }
-    } while (element);
-    return [valueL, valueT];
-  },
-
-  offsetParent: function(element) {
-    if (element.offsetParent) return element.offsetParent;
-    if (element == document.body) return element;
-
-    while ((element = element.parentNode) && element != document.body)
-      if (Element.getStyle(element, 'position') != 'static')
-        return element;
-
-    return document.body;
-  },
-
-  // caches x/y coordinate pair to use with overlap
-  within: function(element, x, y) {
-    if (this.includeScrollOffsets)
-      return this.withinIncludingScrolloffsets(element, x, y);
-    this.xcomp = x;
-    this.ycomp = y;
-    this.offset = this.cumulativeOffset(element);
-
-    return (y >= this.offset[1] &&
-            y <  this.offset[1] + element.offsetHeight &&
-            x >= this.offset[0] &&
-            x <  this.offset[0] + element.offsetWidth);
-  },
-
-  withinIncludingScrolloffsets: function(element, x, y) {
-    var offsetcache = this.realOffset(element);
-
-    this.xcomp = x + offsetcache[0] - this.deltaX;
-    this.ycomp = y + offsetcache[1] - this.deltaY;
-    this.offset = this.cumulativeOffset(element);
-
-    return (this.ycomp >= this.offset[1] &&
-            this.ycomp <  this.offset[1] + element.offsetHeight &&
-            this.xcomp >= this.offset[0] &&
-            this.xcomp <  this.offset[0] + element.offsetWidth);
-  },
-
-  // within must be called directly before
-  overlap: function(mode, element) {
-    if (!mode) return 0;
-    if (mode == 'vertical')
-      return ((this.offset[1] + element.offsetHeight) - this.ycomp) /
-        element.offsetHeight;
-    if (mode == 'horizontal')
-      return ((this.offset[0] + element.offsetWidth) - this.xcomp) /
-        element.offsetWidth;
-  },
-
-  page: function(forElement) {
-    var valueT = 0, valueL = 0;
-
-    var element = forElement;
-    do {
-      valueT += element.offsetTop  || 0;
-      valueL += element.offsetLeft || 0;
-
-      // Safari fix
-      if (element.offsetParent==document.body)
-        if (Element.getStyle(element,'position')=='absolute') break;
-
-    } while (element = element.offsetParent);
-
-    element = forElement;
-    do {
-      if (!window.opera || element.tagName=='BODY') {
-        valueT -= element.scrollTop  || 0;
-        valueL -= element.scrollLeft || 0;
-      }
-    } while (element = element.parentNode);
-
-    return [valueL, valueT];
-  },
-
-  clone: function(source, target) {
-    var options = Object.extend({
-      setLeft:    true,
-      setTop:     true,
-      setWidth:   true,
-      setHeight:  true,
-      offsetTop:  0,
-      offsetLeft: 0
-    }, arguments[2] || {})
-
-    // find page position of source
-    source = $(source);
-    var p = Position.page(source);
-
-    // find coordinate system to use
-    target = $(target);
-    var delta = [0, 0];
-    var parent = null;
-    // delta [0,0] will do fine with position: fixed elements,
-    // position:absolute needs offsetParent deltas
-    if (Element.getStyle(target,'position') == 'absolute') {
-      parent = Position.offsetParent(target);
-      delta = Position.page(parent);
-    }
-
-    // correct by body offsets (fixes Safari)
-    if (parent == document.body) {
-      delta[0] -= document.body.offsetLeft;
-      delta[1] -= document.body.offsetTop;
-    }
-
-    // set position
-    if(options.setLeft)   target.style.left  = (p[0] - delta[0] + options.offsetLeft) + 'px';
-    if(options.setTop)    target.style.top   = (p[1] - delta[1] + options.offsetTop) + 'px';
-    if(options.setWidth)  target.style.width = source.offsetWidth + 'px';
-    if(options.setHeight) target.style.height = source.offsetHeight + 'px';
-  },
-
-  absolutize: function(element) {
-    element = $(element);
-    if (element.style.position == 'absolute') return;
-    Position.prepare();
-
-    var offsets = Position.positionedOffset(element);
-    var top     = offsets[1];
-    var left    = offsets[0];
-    var width   = element.clientWidth;
-    var height  = element.clientHeight;
-
-    element._originalLeft   = left - parseFloat(element.style.left  || 0);
-    element._originalTop    = top  - parseFloat(element.style.top || 0);
-    element._originalWidth  = element.style.width;
-    element._originalHeight = element.style.height;
-
-    element.style.position = 'absolute';
-    element.style.top    = top + 'px';
-    element.style.left   = left + 'px';
-    element.style.width  = width + 'px';
-    element.style.height = height + 'px';
-  },
-
-  relativize: function(element) {
-    element = $(element);
-    if (element.style.position == 'relative') return;
-    Position.prepare();
-
-    element.style.position = 'relative';
-    var top  = parseFloat(element.style.top  || 0) - (element._originalTop || 0);
-    var left = parseFloat(element.style.left || 0) - (element._originalLeft || 0);
-
-    element.style.top    = top + 'px';
-    element.style.left   = left + 'px';
-    element.style.height = element._originalHeight;
-    element.style.width  = element._originalWidth;
-  }
-}
-
-// Safari returns margins on body which is incorrect if the child is absolutely
-// positioned.  For performance reasons, redefine Position.cumulativeOffset for
-// KHTML/WebKit only.
-if (/Konqueror|Safari|KHTML/.test(navigator.userAgent)) {
-  Position.cumulativeOffset = function(element) {
-    var valueT = 0, valueL = 0;
-    do {
-      valueT += element.offsetTop  || 0;
-      valueL += element.offsetLeft || 0;
-      if (element.offsetParent == document.body)
-        if (Element.getStyle(element, 'position') == 'absolute') break;
-
-      element = element.offsetParent;
-    } while (element);
-
-    return [valueL, valueT];
-  }
-}
-
-Element.addMethods();
\ No newline at end of file
diff --git a/source/public/javascripts/steps.js b/source/public/javascripts/steps.js
deleted file mode 100644
index 128083d..0000000
--- a/source/public/javascripts/steps.js
+++ /dev/null
@@ -1,176 +0,0 @@
-//------------------------------------------------------------------------------
-// Copyright (c) 2005, 2006 IBM Corporation and others.
-// All rights reserved. This program and the accompanying materials
-// are made available under the terms of the Eclipse Public License v1.0
-// which accompanies this distribution, and is available at
-// http://www.eclipse.org/legal/epl-v10.html
-// 
-// Contributors:
-// IBM Corporation - initial implementation
-//------------------------------------------------------------------------------
-
-var collapseStepsByDefault = true;
-var stepImgBackPath = '../../';
-var expandAllText = "Expand All Steps";
-var collapseAllText = "Collapse All Steps";
-var firstStepSection;
-
-// Creates the collapsible step section links.
-function createStepLinks(tagName, classSelector) {
-	if (document.getElementsByTagName) {
-		var elements = document.getElementsByTagName(tagName);
-		if (elements.length == 0) return;
-		var stepElements = new Array(elements.length);
-		var totalLinks = 0;
-		for (var i = 0; i < elements.length; i++) {
-			var element = elements[i];
-			if (element.className == classSelector) {
-				stepElements[totalLinks++] = element;
-			}
-		}
-		if (totalLinks == 0) return;
-		stepElements.length = totalLinks;
-		stepCollapseDivs = new Array(totalLinks);
-		stepCollapseLinks = new Array(totalLinks);
-		firstStepSection = stepElements[0];
-		for (var i = 0; i < stepElements.length; i++) {
-			var element = stepElements[i];
-			var siblingContainer;
-			if (document.createElement && (siblingContainer = document.createElement('div')) && siblingContainer.style) {
-				var nextSibling = element.nextSibling;
-				element.parentNode.insertBefore(siblingContainer, nextSibling);
-				var nextElement = stepElements[i + 1];
-				while (nextSibling != nextElement && nextSibling != null) {
-					var toMove = nextSibling;
-					nextSibling = nextSibling.nextSibling;
-					siblingContainer.appendChild(toMove);
-				}
-				if (collapseStepsByDefault) {
-    				siblingContainer.style.display = 'none';
-    			}
-    			siblingContainer.style.display = 'none';
-    			stepCollapseDivs[i] = siblingContainer;
-    			createCollapsibleStepSection(element, siblingContainer, i);
-			}
-			else {
-				return;
-			}
-		}
-		createExpandCollapseAllStepsLinks(stepElements[0]);
-	}
-}
-
-// Creates a collapsible step section.
-function createCollapsibleStepSection(element, siblingContainer, index) {
-	if (document.createElement) {
-		var span = document.createElement('span');
-		var link = document.createElement('a');
-		link.collapseDiv = siblingContainer;
-		link.href = '#';
-		var image = document.createElement('img');
-		if (collapseStepsByDefault) {
-			image.src = expandImage;
-		}
-		else {
-			image.src = collapseImage;
-		}
-		image.width = '17';
-		image.height = '15';
-		image.border = '0';
-		image.align = 'absmiddle';
-		link.appendChild(image);
-		link.onclick = expandCollapseStepSection;
-		stepCollapseLinks[index] = link;
-		span.appendChild(link);
-		element.insertBefore(span, element.firstChild);
-		element.appendChild(document.createTextNode(String.fromCharCode(160)));
-		element.appendChild(document.createTextNode(String.fromCharCode(160)));
-	}
-}
-
-// Expands or collapses a step section based on the received event.
-function expandCollapseStepSection(evt) {
-	if (this.collapseDiv.style.display == '') {
-		this.parentNode.parentNode.nextSibling.style.display = 'none';
-		this.firstChild.src = expandImage;
-	}
-	else {
-		this.parentNode.parentNode.nextSibling.style.display = '';
-		this.firstChild.src = collapseImage;
-	}
-	if (evt && evt.preventDefault) {
-		evt.preventDefault();
-	}
-	return false;
-}
-
-// Creates the Expand All and Collapse All Steps links.
-function createExpandCollapseAllStepsLinks(firstElement) {
-	var div;
-	if (document.createElement && (div = document.createElement('div'))) {
-		div.className = 'expandCollapseLink';
-		div.align = 'right';		
-		var image = document.createElement('img');
-		image.src = expandAllImage;
-		image.width = '16';
-		image.height = '16';
-		image.border = '0';
-		image.align = 'absmiddle';
-		var link = document.createElement('a');
-		link.className = 'expandCollapseLink';
-		link.href = '#';
-		link.appendChild(image);
-		link.onclick = expandAllSteps;
-		var span = document.createElement('span');
-		span.className = 'expandCollapseText';
-		span.appendChild(document.createTextNode(expandAllText));
-		link.appendChild(span);
-		div.appendChild(link);
-		div.appendChild(document.createTextNode(String.fromCharCode(160)));
-		
-		image = document.createElement('img');
-		image.src = collapseAllImage;
-		image.width = '16';
-		image.height = '16';
-		image.border = '0';
-		image.align = 'absmiddle';
-		link = document.createElement('a');
-		link.className = 'expandCollapseLink';
-		link.href = '#';
-		link.appendChild(image);
-		link.onclick = collapseAllSteps;
-		span = document.createElement('span');
-		span.className = 'expandCollapseText';
-		span.appendChild(document.createTextNode(collapseAllText));
-		link.appendChild(span);
-		div.appendChild(link);
-		
-		if (firstStepSection) {
-			firstStepSection.parentNode.insertBefore(div, firstStepSection);
-		}
-	}
-}
-
-// Expands all steps.
-function expandAllSteps(evt) {
-	 for (var i = 0; i < stepCollapseDivs.length; i++) {
-	 	stepCollapseDivs[i].style.display = '';
-	 	stepCollapseLinks[i].firstChild.src = collapseImage;
-	 }
-	 if (evt && evt.preventDefault) {
-	 	evt.preventDefault();
-	 }
-	 return false;
-}
-
-// Collapses all steps.
-function collapseAllSteps(evt) {
-	for (var i = 0; i < stepCollapseDivs.length; i++) {
-		stepCollapseDivs[i].style.display = 'none';
-		stepCollapseLinks[i].firstChild.src = expandImage;
-	}
-	if (evt && evt.preventDefault) {
-		evt.preventDefault();
-	}
-	return false;
-}
diff --git a/source/public/javascripts/tiny_mce/plugins/epfwiki/editor_plugin.js b/source/public/javascripts/tiny_mce/plugins/epfwiki/editor_plugin.js
deleted file mode 100644
index 8e2d460..0000000
--- a/source/public/javascripts/tiny_mce/plugins/epfwiki/editor_plugin.js
+++ /dev/null
@@ -1,118 +0,0 @@
-//------------------------------------------------------------------------------
-// Copyright (c) 2008 Logica and others.
-// All rights reserved. This program and the accompanying materials
-// are made available under the terms of the Eclipse Public License v1.0
-// which accompanies this distribution, and is available at
-// http://www.eclipse.org/legal/epl-v10.html
-// 
-// Contributors:
-// Onno van der Straaten - initial implementation
-//------------------------------------------------------------------------------
-(function() {
-	tinymce.create('tinymce.plugins.EPFWiki', {
-		init : function(ed, url) {
-			var t = this;
-
-			t.editor = ed;
-
-			// Register commands
-			ed.addCommand('epfwikiUndoCheckout', t._undocheckout, t);
-			ed.addCommand('epfwikiCheckin', t._checkin, t);
-			ed.addCommand('epfwikiSave', t._save, t);
-			//ed.addCommand('mceCancel', t._cancel, t);
-
-			// Register example button
-			ed.addButton('example', {
-				title : 'example.desc',
-				cmd : 'mceExample',
-				image : url + '/img/example.gif'
-			});
-
-			// Register buttons
-			ed.addButton('undocheckout', {title : 'Undo checkout', cmd : 'epfwikiUndoCheckout',image : url + '/img/undocheckout.gif'});
-			ed.addButton('checkin', {title : 'Checkin', cmd : 'epfwikiCheckin',image : url + '/img/checkin.gif'});
-			ed.addButton('save', {title : 'Save', cmd : 'epfwikiSave',image : url + '/img/save.gif'});
-			//ed.addButton('cancel', {title : 'save.cancel_desc', cmd : 'mceCancel'});
-
-			ed.onNodeChange.add(t._nodeChange, t);
-			ed.addShortcut('ctrl+s', ed.getLang('save.save_desc'), 'epfwikiSave');
-		},
-
-		getInfo : function() {
-			return {
-				longname : 'EPF Wiki',
-				author : 'Onno van der Straaten',
-				authorurl : 'http://www.eclipse.org/epf',
-				infourl : 'http://www.eclipse.org/epf',
-				version : tinymce.majorVersion + "." + tinymce.minorVersion
-			};
-		},
-
-		// Private methods
-
-		_nodeChange : function(ed, cm, n) {
-			var ed = this.editor;
-
-			if (ed.getParam('save_enablewhendirty')) {
-				cm.setDisabled('save', !ed.isDirty());
-				//cm.setDisabled('cancel', !ed.isDirty());
-			}
-		},
-
-		// Private methods
-
-		_save : function() {
-			var ed = this.editor, formObj, os, i, elementId;
-
-			formObj = tinymce.DOM.get(ed.id).form || tinymce.DOM.getParent(ed.id, 'form');
-
-			if (ed.getParam("save_enablewhendirty") && !ed.isDirty())
-				return;
-
-			tinyMCE.triggerSave();
-
-			// Use callback instead
-			if (os = ed.getParam("save_onsavecallback")) {
-				if (ed.execCallback('save_onsavecallback', ed)) {
-					ed.startContent = tinymce.trim(ed.getContent({format : 'raw'}));
-					ed.nodeChanged();
-				}
-
-				return;
-			}
-
-			if (formObj) {
-				ed.isNotDirty = true;
-
-				if (formObj.onsubmit == null || formObj.onsubmit() != false)
-					formObj.submit();
-
-				ed.nodeChanged();
-			} else
-				ed.windowManager.alert("Error: No form element found.");
-		},
-		_checkin : function() {
-				var inst = tinyMCE.selectedInstance;
-				var ed = this.editor, formObj, os, i, elementId;
-				formObj = tinymce.DOM.get(ed.id).form || tinymce.DOM.getParent(ed.id, 'form');
-				if (confirm('Save and check-in the current document?')) {  
-					formObj.action = '/pages/checkin';
-					inst.execCommand('epfwikiSave');
-				}
-				return true;
-		},
-		_undocheckout : function() {
-				var inst = tinyMCE.selectedInstance;
-				var ed = this.editor, formObj, os, i, elementId;				
-				formObj = tinymce.DOM.get(ed.id).form || tinymce.DOM.getParent(ed.id, 'form');
-   				if (confirm('Are you sure to want to undo the checkout? Any changes made to this version will be lost.')) {  
-   					formObj.action = '/pages/undocheckout';
-  					formObj.submit();
-  				 }
-				formObj.onsubmit;
-				return true;
-		}
-	});
-	// Register plugin
-	tinymce.PluginManager.add('epfwiki', tinymce.plugins.EPFWiki);
-})();
diff --git a/source/public/javascripts/tiny_mce/plugins/epfwiki/editor_plugin_src.js b/source/public/javascripts/tiny_mce/plugins/epfwiki/editor_plugin_src.js
deleted file mode 100644
index 8e2d460..0000000
--- a/source/public/javascripts/tiny_mce/plugins/epfwiki/editor_plugin_src.js
+++ /dev/null
@@ -1,118 +0,0 @@
-//------------------------------------------------------------------------------
-// Copyright (c) 2008 Logica and others.
-// All rights reserved. This program and the accompanying materials
-// are made available under the terms of the Eclipse Public License v1.0
-// which accompanies this distribution, and is available at
-// http://www.eclipse.org/legal/epl-v10.html
-// 
-// Contributors:
-// Onno van der Straaten - initial implementation
-//------------------------------------------------------------------------------
-(function() {
-	tinymce.create('tinymce.plugins.EPFWiki', {
-		init : function(ed, url) {
-			var t = this;
-
-			t.editor = ed;
-
-			// Register commands
-			ed.addCommand('epfwikiUndoCheckout', t._undocheckout, t);
-			ed.addCommand('epfwikiCheckin', t._checkin, t);
-			ed.addCommand('epfwikiSave', t._save, t);
-			//ed.addCommand('mceCancel', t._cancel, t);
-
-			// Register example button
-			ed.addButton('example', {
-				title : 'example.desc',
-				cmd : 'mceExample',
-				image : url + '/img/example.gif'
-			});
-
-			// Register buttons
-			ed.addButton('undocheckout', {title : 'Undo checkout', cmd : 'epfwikiUndoCheckout',image : url + '/img/undocheckout.gif'});
-			ed.addButton('checkin', {title : 'Checkin', cmd : 'epfwikiCheckin',image : url + '/img/checkin.gif'});
-			ed.addButton('save', {title : 'Save', cmd : 'epfwikiSave',image : url + '/img/save.gif'});
-			//ed.addButton('cancel', {title : 'save.cancel_desc', cmd : 'mceCancel'});
-
-			ed.onNodeChange.add(t._nodeChange, t);
-			ed.addShortcut('ctrl+s', ed.getLang('save.save_desc'), 'epfwikiSave');
-		},
-
-		getInfo : function() {
-			return {
-				longname : 'EPF Wiki',
-				author : 'Onno van der Straaten',
-				authorurl : 'http://www.eclipse.org/epf',
-				infourl : 'http://www.eclipse.org/epf',
-				version : tinymce.majorVersion + "." + tinymce.minorVersion
-			};
-		},
-
-		// Private methods
-
-		_nodeChange : function(ed, cm, n) {
-			var ed = this.editor;
-
-			if (ed.getParam('save_enablewhendirty')) {
-				cm.setDisabled('save', !ed.isDirty());
-				//cm.setDisabled('cancel', !ed.isDirty());
-			}
-		},
-
-		// Private methods
-
-		_save : function() {
-			var ed = this.editor, formObj, os, i, elementId;
-
-			formObj = tinymce.DOM.get(ed.id).form || tinymce.DOM.getParent(ed.id, 'form');
-
-			if (ed.getParam("save_enablewhendirty") && !ed.isDirty())
-				return;
-
-			tinyMCE.triggerSave();
-
-			// Use callback instead
-			if (os = ed.getParam("save_onsavecallback")) {
-				if (ed.execCallback('save_onsavecallback', ed)) {
-					ed.startContent = tinymce.trim(ed.getContent({format : 'raw'}));
-					ed.nodeChanged();
-				}
-
-				return;
-			}
-
-			if (formObj) {
-				ed.isNotDirty = true;
-
-				if (formObj.onsubmit == null || formObj.onsubmit() != false)
-					formObj.submit();
-
-				ed.nodeChanged();
-			} else
-				ed.windowManager.alert("Error: No form element found.");
-		},
-		_checkin : function() {
-				var inst = tinyMCE.selectedInstance;
-				var ed = this.editor, formObj, os, i, elementId;
-				formObj = tinymce.DOM.get(ed.id).form || tinymce.DOM.getParent(ed.id, 'form');
-				if (confirm('Save and check-in the current document?')) {  
-					formObj.action = '/pages/checkin';
-					inst.execCommand('epfwikiSave');
-				}
-				return true;
-		},
-		_undocheckout : function() {
-				var inst = tinyMCE.selectedInstance;
-				var ed = this.editor, formObj, os, i, elementId;				
-				formObj = tinymce.DOM.get(ed.id).form || tinymce.DOM.getParent(ed.id, 'form');
-   				if (confirm('Are you sure to want to undo the checkout? Any changes made to this version will be lost.')) {  
-   					formObj.action = '/pages/undocheckout';
-  					formObj.submit();
-  				 }
-				formObj.onsubmit;
-				return true;
-		}
-	});
-	// Register plugin
-	tinymce.PluginManager.add('epfwiki', tinymce.plugins.EPFWiki);
-})();
diff --git a/source/public/javascripts/tiny_mce/plugins/epfwiki/img/checkin.gif b/source/public/javascripts/tiny_mce/plugins/epfwiki/img/checkin.gif
deleted file mode 100644
index 317ae95..0000000
--- a/source/public/javascripts/tiny_mce/plugins/epfwiki/img/checkin.gif
+++ /dev/null
Binary files differ
diff --git a/source/public/javascripts/tiny_mce/plugins/epfwiki/img/preview.gif b/source/public/javascripts/tiny_mce/plugins/epfwiki/img/preview.gif
deleted file mode 100644
index 4b8a923..0000000
--- a/source/public/javascripts/tiny_mce/plugins/epfwiki/img/preview.gif
+++ /dev/null
Binary files differ
diff --git a/source/public/javascripts/tiny_mce/plugins/epfwiki/img/save.gif b/source/public/javascripts/tiny_mce/plugins/epfwiki/img/save.gif
deleted file mode 100644
index c924140..0000000
--- a/source/public/javascripts/tiny_mce/plugins/epfwiki/img/save.gif
+++ /dev/null
Binary files differ
diff --git a/source/public/javascripts/tiny_mce/plugins/epfwiki/img/undocheckout.gif b/source/public/javascripts/tiny_mce/plugins/epfwiki/img/undocheckout.gif
deleted file mode 100644
index 3b8a1b0..0000000
--- a/source/public/javascripts/tiny_mce/plugins/epfwiki/img/undocheckout.gif
+++ /dev/null
Binary files differ
diff --git a/source/public/javascripts/treebrowser.js b/source/public/javascripts/treebrowser.js
deleted file mode 100644
index d521375..0000000
--- a/source/public/javascripts/treebrowser.js
+++ /dev/null
@@ -1,105 +0,0 @@
-//------------------------------------------------------------------------------
-// Copyright (c) 2005, 2006 IBM Corporation and others.
-// All rights reserved. This program and the accompanying materials
-// are made available under the terms of the Eclipse Public License v1.0
-// which accompanies this distribution, and is available at
-// http://www.eclipse.org/legal/epl-v10.html
-// 
-// Contributors:
-// IBM Corporation - initial implementation
-// Onno van der Straaten - changes for use with EPF Wiki
-//------------------------------------------------------------------------------
-
-// Here defines all the I18N specific messages used in the javascripts
-var treebrowser_js_MESSAGE1 = "The configuration is already displayed using views";
-var treebrowser_js_MESSAGE2 = "Display views";
-var treebrowser_js_MESSAGE3 = "Home";
-var treebrowser_js_MESSAGE4 = "Hide Treebrowser";
-
-function loadTop()
-{
-    var expires = new Date();
-    expires.setTime (expires.getTime() + (1000 * 20));
-    document.cookie = "rup_ory_doc=" + escape (document.URL) +
-    "; expires=" + expires.toUTCString() +  "; path=/";
-
-    var new_ory_doc_loc = null;
-
-    for(i=document.links.length-1;i>=0;i--)
-    {
-       if(document.links[i].href.indexOf("index.htm")!=-1)
-       {
-         new_ory_doc_loc = document.links[i].href;
-         break;
-       }
-    }
-
-    if(new_ory_doc_loc!=null)
-    {
-	if( self.name == "ory_doc" )
-	{
-		window.close();
-		window.open( new_ory_doc_loc );		
-	}
-	else
-	{
-	       	top.location = new_ory_doc_loc;
-	}
-    }
-}
-
-function looseTop()
-{
-    top.location = document.location;
-}
-
-
-  function getImageUrl(image)
-  {
-    var new_ory_doc_loc=null;
-    for(i=document.links.length-1;i>=0;i--)
-    {
-       if(document.links[i].href.indexOf("index.htm")!=-1)
-       {
-         new_ory_doc_loc = document.links[i].href.substring(0,document.links[i].href.lastIndexOf("/"));
-         new_ory_doc_loc = new_ory_doc_loc + "" + image;
-         return new_ory_doc_loc;
-       }
-    }
-    return null;
-  }
-
-MSFPhover =
-(((navigator.appName == "Netscape") &&
-  (parseInt(navigator.appVersion) >= 3 )) ||
-  ((navigator.appName == "Microsoft Internet Explorer") &&
-  (parseInt(navigator.appVersion) >= 4 )));
-
-  function MSFPpreload(img)
-  {
-     var a=new Image();
-     a.src=img;
-     return a;
-  }
-
-    if(MSFPhover)
-    {
-        RupGray=MSFPpreload(getImageUrl('/images/display_views.gif'));
-        RupBlue=MSFPpreload(getImageUrl('/images/display_views_a.gif'));
-    }
-
-
-//new code to display the load button or not
-var ory_toc_exist = typeof parent.ory_toc;
-if (ory_toc_exist == "undefined") {
-   ory_toc_exist = typeof parent.ory_toc_frame;
-}
-
-if (ory_toc_exist == "undefined") {
-    document.write("<a class=\"expandCollapseLink\" href=\"JavaScript:loadTop();\" onmouseover=\"if(MSFPhover) document['Home'].src=RupBlue.src; self.status=treebrowser_js_MESSAGE2; return true\" onmouseout=\"if(MSFPhover) document['Home'].src=RupGray.src; self.status= ' ';return true\"> <br> <img src=\"" + backPath + "images/rup1.gif");
-    document.write("\"  border=\"0\" align=\"absmiddle\" alt=\"" + treebrowser_js_MESSAGE2 + "\" name=\"" + treebrowser_js_MESSAGE3 + "\" width=\"16\" height=\"16\">" + treebrowser_js_MESSAGE2 + "<\/a>");
-}
-else {
-    document.write("<a class=\"expandCollapseLink\" href=\"JavaScript:looseTop();\" onmouseover=\"if(MSFPhover) document['Home'].src=RupBlue.src; self.status=treebrowser_js_MESSAGE4; return true\" onmouseout=\"if(MSFPhover) document['Home'].src=RupGray.src; self.status= ' ';return true\"> <br> <img src=\"" + backPath + "images/rup1.gif");
-    document.write("\"  border=\"0\" align=\"absmiddle\" alt=\"" + treebrowser_js_MESSAGE4 + "\" name=\"" + treebrowser_js_MESSAGE3 + "\" width=\"16\" height=\"16\">" + treebrowser_js_MESSAGE4 + "<\/a>");
-}
diff --git a/source/public/javascripts/wiki.js b/source/public/javascripts/wiki.js
deleted file mode 100644
index 2f95bfb..0000000
--- a/source/public/javascripts/wiki.js
+++ /dev/null
@@ -1,36 +0,0 @@
-//------------------------------------------------------------------------------
-// Copyright (c) 2008 Logica and others.
-// All rights reserved. This program and the accompanying materials
-// are made available under the terms of the Eclipse Public License v1.0
-// which accompanies this distribution, and is available at
-// http://www.eclipse.org/legal/epl-v10.html
-// 
-// Contributors:
-// Onno van der Straaten - initial implementation
-//------------------------------------------------------------------------------
-function epfwiki_includes(){
-	var epfwiki_footer = document.createElement("div");
-	epfwiki_footer.id="epfwiki_footer";
-	epfwiki_footer.innerHTML="<img src='/images/busy.gif'></img>";
-	document.body.appendChild(epfwiki_footer)
-	
-	var checkout_text = document.createElement("div");
-	checkout_text.id = "checkout_text";
-	document.body.insertBefore(checkout_text, document.body.firstChild);
-
-	var spacer = document.createElement("div");
-	spacer.id = "spacer";
-	document.body.insertBefore(spacer, document.body.firstChild);
-
-	var epfwiki_header = document.createElement("div");
-	epfwiki_header.id="epfwiki_header";
-	epfwiki_header.innerHTML="<img src='/images/busy.gif'></img>";
-	document.body.insertBefore(epfwiki_header,document.body.firstChild);
-
-	var page_href = document.location.href;
-	var page_id = location.pathname.replace(/\//g, '_').replace(/\./g,'_') + '.js';
-	// page_id is to allow the possibility for caching
-    var url = '/pages/view/'+page_id+'?url='+page_href;
-    var myAjax = new Ajax.Request(url, {method: 'get'});
-}
-Event.observe(window, 'load', epfwiki_includes, false);
\ No newline at end of file
diff --git a/source/public/pages/view/.htaccess b/source/public/pages/view/.htaccess
deleted file mode 100644
index 91091a7..0000000
--- a/source/public/pages/view/.htaccess
+++ /dev/null
@@ -1 +0,0 @@
-ForceType text/javascript;charset=utf-8
\ No newline at end of file
diff --git a/source/public/robots.txt b/source/public/robots.txt
deleted file mode 100644
index 4ab9e89..0000000
--- a/source/public/robots.txt
+++ /dev/null
@@ -1 +0,0 @@
-# See http://www.robotstxt.org/wc/norobots.html for documentation on how to use the robots.txt file
\ No newline at end of file
diff --git a/source/public/stylesheets/default.css b/source/public/stylesheets/default.css
deleted file mode 100644
index 48758a6..0000000
--- a/source/public/stylesheets/default.css
+++ /dev/null
@@ -1,824 +0,0 @@
-/*
- * Copyright (c) 2005, 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial implementation
- * Onno van der Straaten - changes for use with EPF Wiki
- */
-
-/* Portal  
-
-Layout of portal is based on example
-
-
-*/
-
-body,
-html {
-    margin:0;
-    padding:0;
-    background:#FFFFFF;
-    color:#000;
-    }
-body {
-    min-width:850px;
-    }
-#wrap {
-    margin:0 auto;
-    width:850px;
-    }
-
-#logo {
-    top: -10px;
-    text-align: right;
-}
-
-#header {
-    background:#9999CC;
-    color:#FFFFFF;
-    }
-#footer {
-    background:#9999CC;
-    color:#FFFFFF;
-    }    
-#nav {
-    }
-   
-#main {
-    float:left;
-    width:500px;
-    }
-#footer {
-    clear:both;
-    }
-#footer p {
-    padding:5px;
-    margin:0;
-    } 
-#footer a {
-text-decoration: none;	
-    color: #ffffff;
-}       
-#footer a:hover {
-    text-decoration: underline;
-    color: #ffffff;
-}       
-
-#nav ul{
-    margin:0;
-    padding:0;
-    list-style:none;
-    }
-#nav li{
-    display:inline;
-    margin:0;
-    padding:0;
-    }
-    
-#header h1 {
-    padding:5px;
-    margin:0;
-    }
-#nav {
-    padding:5px;
-    }
-#main h2, #main h3, #main p {
-    padding:0 10px;
-    }
-#sidebar ul {
-    margin-bottom:0;
-    }
-#sidebar h3, #sidebar p {
-    padding:0 10px;
-    }
-     
-#sidebar {
-    background:#FFFFFF;
-    float:right;
-    width:240px;
-    }
-#sidebar h3, #sidebar p {
-    padding: 10px 10px 10px 10px;
-    }    
-
-#header .pageTitle {
-    color: #ffffff;
-    font-size: 12pt;
-    font-weight: bold;
-    padding-top: 10px;
-    padding-bottom: 10px;
-    padding-left: 10px;
-    padding-right: 10px;
-    background: #9999cc; text-align: left;
-    border-bottom: 1px solid black;
-}
-
-/* large tabs used for the portal */
-
-div#tabs {
-background: url(../images/tab2_background.png);
-
-}
-
-ol#toc_tabs {
-    list-style: none;
-    margin-left: 15px;
-	margin-top: 0px;
-    padding: 0;
-    font-size: x-small;
-    height: 29px;
-    font-family: Microsoft Sans Serif;
-    font-weight: bold;
-}
-
-ol#toc_tabs li {
-    float: left;
-    margin: 0 0 0 0;
-}
-
-ol#toc_tabs a {
-    background: url(../images/tab2.png);
-    color: black;
-    display: block;
-    float: left;
-    height: 29px;
-    padding-left: 10px;
-    text-decoration: none;
-}
-
-ol#toc_tabs a:hover {
-    background-position: 0 -58px;
-}
-
-ol#toc_tabs a:hover span {
-    background-position: 100% -58px;
-}
-
-ol#toc_tabs li.current a {
-    background-position: 0 -29px;
-    color: black;
-}
-
-ol#toc_tabs li.current span {
-    background-position: 100% -29px;
-}
-
-ol#toc_tabs span {
-    background: url(../images/tab2.png) 100% 0;
-    display: block;
-    line-height: 29px;
-    padding-right: 10px;
-}
-
-.comment{
-background-color: #ececec;
-padding: 10px;
-}
-
-.commentfooter{
-background: url(../images/arrow.gif) 20px 0 no-repeat;
-padding-left: 58px;
-padding-top: 1px;
-margin-bottom: 2em;
-font-size: 90%;
-color: #4A4A4A;
-}
-
-/* EPFC style tabs */
-
-div#epfc_tabs {
-	border-bottom: solid;
-	border-width: 5px;
-	color: #C8D7E3;
-	margin: 0px;
-	padding: 0px;
-}
-
-ol#epfc_tabs_toc {
-    list-style: none;
-    margin-left: 0;
-    padding: 4px;
-    height: 0;
-    font-family: Microsoft Sans Serif;
-    font-weight: bold;
-}
-
-ol#epfc_tabs_toc li {
-    float: left;
-    margin: 0 0 0 0;
-    color: #FF0000;
-    }
-
-ol#epfc_tabs_toc a {
-    background: url(../images/tab4.png);
-    display: block;
-    float: left;
-    height: 17px;
-    padding-left: 0px;
-    text-decoration: none;
-font-family:verdana,arial,sans-serif;
-font-size:11px;
-font-weight:bold;    
-
-}
-
-ol#epfc_tabs_toc a:hover {
-    background-position: 0 -34px;
-    text-decoration: underline;
-}
-
-ol#epfc_tabs_toc a:hover span {
-    background-position: 100% -34px;
-   
-}
-ol#epfc_tabs_toc span {
-    background: url(../images/tab4.png) 100% 0;
-    display: block;
-    line-height: 17px;
-    padding-right: 34px;
-    padding-left: 10px;
-  
-}
-
-ol#epfc_tabs_toc li.current span {
-    background-position: 100% -17px;
-    padding-left: 10px; 
-}
-
-ol#epfc_tabs_toc li a {
-    background-position: 0 -17px;
-    color: white;
-}
-
-ol#epfc_tabs_toc li.current a {
-    background-position: 0 -17px;
-    color: black;
-}
-
-.HDNormal {  }
-.HDDeleted {  color: #00ff00;background:  #ffffff;text-decoration:line-through ; font-family: Courier New ; font-size: 10pt;}
-.HDAdded {  color: #000000;background:  #ffff00;text-decoration:none ; font-family: Courier New ; font-size: 10pt;}
-
-#errorExplanation  
-{
-    border:1px solid #CCC;
-    padding-bottom:10px;
-    background: transparent url(../images/error.png) no-repeat 15px 15px;
-}
-
-#errorExplanation h2
-{
-    font-family: arial, helvetica, sans-serif;
-    font-size: 10pt;
-    font-weight: normal;
-    margin-left: 220px;
-}
-
-#errorExplanation p
-{
-    margin-left: 220px;
-}
-
-#errorExplanation ul
-{
-    margin-left: 240px;
-}
-
-#notice  {
-    border:1px solid #CCC;
-    padding-bottom:10px;
-    background: transparent url(../images/notice.png) no-repeat 10px 10px;
-	margin-left: 0px;
-	margin-top: 10px;
-	margin-bottom: 10px;
-}
-
-#notice h2 {
-    font-family: arial, helvetica, sans-serif;
-    font-size: 10pt;
-    font-weight: bold;
-    margin-left: 50px;
-}
-
-#notice p {
-    margin-left: 220px;
-}
-
-#notice ul {
-    margin-left: 240px;
-}
-
-body
-{
-	background-image: none;
-	background-color: #ffffff;
-	font-family: arial, helvetica, sans-serif;
-	font-size: 10pt;
-}
-
-p
-{
-	font-family: arial, helvetica, sans-serif;
-	font-size: 10pt;
-}
-
-h1
-{
-	font-family: arial, helvetica, sans-serif;
-	font-size: large;
-}
-
-h2
-{
-	font-family: arial, helvetica, sans-serif;
-	font-size: 150%;
-}
-
-h3
-{
-	font-family: arial, helvetica, sans-serif;
-}
-
-h4, h5, h6
-{
-	font-family: arial, helvetica, sans-serif;
-}
-
-a:link
-{
-	color: #003399;
-	font-family: arial, helvetica, sans-serif;
-	font-size: 10pt;
-	text-decoration: none;
-}
-
-a:active
-{
-	color: #003399;
-	font-family: arial, helvetica, sans-serif;
-	font-size: 10pt;
-	text-decoration: underline;
-}
-
-a:visited
-{
-	color: #003399;
-	font-family: arial, helvetica, sans-serif;
-	font-size: 10pt;
-	text-decoration: none;
-}
-
-a[href]:hover
-{
-	color: #ff0000;
-	font-family: arial, helvetica, sans-serif;
-	font-size: 10pt;
-	text-decoration: underline;
-}
-
-ol
-{
-	font-family: arial, helvetica, sans-serif;
-	font-size: 10pt;
-	list-style-type: decimal;
-	margin-left: 30px;
-}
-
-ol li
-{
-	font-family: arial, helvetica, sans-serif;
-	font-size: 10pt;
-	text-align: left;
-}
-
-ul
-{
-	font-family: arial, helvetica, sans-serif;
-	font-size: 10pt;
-	list-style-type: disc;
-	margin-left: 30px;
-	margin-top: 5px;
-	padding-left: 0px;
-}
-
-ul li
-{
-	font-family: arial, helvetica, sans-serif;
-	font-size: 10pt;
-	text-align: left;
-}
-
-table
-{
-	background-image: none;
-	background: #ffffff;
-	font-family: arial, helvetica, sans-serif;
-	font-size: 10pt;	
-}
-
-tbody
-{
-	font-family: arial, helvetica, sans-serif;
-	font-size: 10pt;
-	/*valign: baseline;*/
-}
-
-th
-{
-	font-family: arial, helvetica, sans-serif;
-	font-size: 10pt;
-	text-align: left;
-}
-
-td
-{
-	font-family: arial, helvetica, sans-serif;
-	font-size: 10pt;
-}
-
-td ul
-{
-	font-family: arial, helvetica, sans-serif;
-	font-size: 10pt;
-	margin-bottom: 0px;
-	margin-left: 30px;
-}
-
-.pageTitle
-{
-	background: #9999cc;
-	color: #ffffff;
-	font-size: 12pt;
-	font-weight: bold;
-	padding-bottom: 5px;
-	padding-left: 10px;
-	padding-right: 10px;
-	padding-top: 5px;
-	text-align: left;
-}
-
-.pageTitleSeparator
-{
-	background-color: #000000;
-	padding: 0px;
-}
-
-.tab
-{
-	background-color: #5c81a7;
-	color: #ffffff;
-	font-family: verdana, arial, sans-serif; 
-	font-size: 11px;
-	font-weight: bold;
-}
-
-.activeTab
-{
-	background-color: #c8d7e3;
-	color: #293d6b;	
-	font-family: verdana, arial, sans-serif; 
-	font-size: 11px;
-	font-weight: bold;
-}
-
-a.tab:link, a.tab:active, a.tab:visited
-{
-	color: #ffffff;
-	font-family: verdana, arial, sans-serif; 
-	font-size: 11px;
-	font-weight: bold;
-}
-
-a.tab:hover
-{
-	text-decoration: underline;	
-}
-
-.overview
-{
-	font-family: arial, helvetica, sans-serif;
-	font-size: 10pt;
-	font-weight: normal;
-	padding-bottom: 10px;
-	padding-left: 20px;
-	padding-right: 0px;
-	padding-top: 10px;
-}
-
-.overviewTable
-{
-	background: #ffffff;
-	width: 100%;	
-}
-
-.overviewTable td
-{
-	padding-bottom: 5px;
-	padding-left: 5px;
-	padding-right: 5px;
-	padding-top: 5px;
-}
-
-.overviewSeparator
-{
-	background-color: #000000;
-	padding: 0px;
-}
-
-.expandCollapseText
-{
-	font-family: verdana, arial, sans-serif;
-	font-size: 8pt;
-	padding-left: 5px;
-	padding-right: 5px;
-}
-
-.expandCollapseLink
-{
-	color: #333333;
-	padding-bottom: 5px;
-	text-decoration: none;
-}
-
-.expandCollapseLink:hover
-{
-	color: #0000ff;
-	text-decoration: underline;
-}
-
-.expandCollapseLink:visited
-{
-	color: #333333;
-}
-
-.sectionHeading
-{
-	background-color: #98b1c4;
-	color: #ffffff;
-	cursor: hand;
-	font-family: arial, helvetica, sans-serif;
-	font-size: 10pt;
-	font-weight: bold;
-	padding-bottom: 2px;
-	padding-left: 2px;
-	padding-top: 2px;
-	text-decoration: none;
-}
-
-.sectionContent
-{
-	padding-bottom: 0px;
-	padding-left: 0px;
-	padding-right: 0px;
-	padding-top: 0px;
-	text-align: right;
-}
-
-.sectionTable
-{
-	border-bottom: #ccc solid 0px;
-	border-left: #ccc solid 1px;
-	border-right: #ccc solid 0px;
-	border-top: #ccc solid 1px;
-	border-top-color: #ccc;
-	width: 100%;
-}
-
-.sectionTableHeading
-{
-	background: #eee;
-	border-bottom: #ccc solid 1px;
-	border-left: #ccc solid 0px;
-	border-right: #ccc solid 1px;
-	border-top: #ccc solid 0px;
-	color: #333333;
-	/*height: 20; TODO */
-	padding-bottom: 10px;
-	padding-left: 10px;
-	padding-right: 10px;
-	padding-top: 10px;
-	text-align: left;
-	width: 20%;
-}
-
-.sectionTableCell
-{
-	border-bottom: #ccc solid 1px;
-	border-left: #ccc solid 0px;
-	border-right: #ccc solid 1px;
-	border-top: #ccc solid 0px;
-	padding-bottom: 10px;
-	padding-left: 10px;
-	padding-right: 10px;
-	padding-top: 10px;
-}
-
-.breakdownTable
-{
-	border-bottom: #ccc solid 0px;
-	border-left: #ccc solid 1px;
-	border-right: #ccc solid 0px;
-	border-top: #ccc solid 1px;
-	padding-bottom: 0px;
-	padding-left: 0px;
-	padding-right: 0px;
-	padding-top: 0px;
-	width: 100%;
-}
-
-.breakdownTable th
-{
-	background: #eee;
-	border-bottom: #ccc solid 1px;
-	border-left: #ccc solid 0px;
-	border-right: #ccc solid 1px;
-	border-top: #ccc solid 0px;
-	color: #333333;
-	/*height: 20; TODO*/
-	text-align: left;
-}
-
-.breakdownTable td
-{
-	border-bottom: #ccc solid 1px;
-	border-left: #ccc solid 0px;
-	border-right: #ccc solid 1px;
-	border-top: #ccc solid 0px;
-}
-
-.defaultTable
-{
-	border-bottom: #ccc solid 0px;
-	border-left: #ccc solid 0px;
-	border-right: #ccc solid 0px;
-	border-top: #ccc solid 0px;
-	padding-bottom: 0px;
-	padding-left: 0px;
-	padding-right: 0px;
-	padding-top: 0px;
-	width: 100%;
-}
-
-.defaultTable td
-{
-	border-bottom: #ccc solid 0px;
-	border-left: #ccc solid 0px;
-	border-right: #ccc solid 0px;
-	border-top: #ccc solid 0px;
-	text-align: left;
-}
-
-.subSectionHeading
-{
-	color: #333333;
-	font-family: arial, helvetica, sans-serif;
-	font-size: 10pt;
-	font-weight: bold;
-	text-decoration: none;
-}
-
-.subSectionContent
-{
-	font-family: arial, helvetica, sans-serif;
-	font-size: 10pt;
-	text-decoration: none;	
-}
-
-.stepHeading
-{
-	background-color: #ffffff;
-	color: #293d6b;
-	font-family: arial, helvetica, sans-serif;
-	font-size: 10pt;
-	font-weight: bold;
-	padding-bottom: 2px;
-	padding-left: 2px;
-	padding-top: 2px;
-	text-decoration: none;
-}
-
-.stepContent
-{
-	border-bottom: #ccc solid 0px;
-	border-left: #ccc solid 0px;
-	border-right: #ccc solid 0px;
-	border-top: #ccc solid 0px;
-	padding-bottom: 5px;
-	padding-left: 0px;
-	padding-right: 0px;
-	padding-top: 0px;
-	text-align: right;
-}
-
-.stepTable
-{
-	border-bottom: #999999 solid 1px;
-	border-left: #999999 solid 0px;
-	border-right: #999999 solid 0px;
-	border-top: #999999 solid 0px;
-	padding-bottom: 20px;
-	padding-left: 10px;
-	padding-right: 10px;
-	padding-top: 10px;
-	width: 100%;
-}
-
-.stepTable td
-{
-	border: #ccc solid 0px;
-}
-
-.stepSeparator
-{
-	background-color: #cccccc;
-	padding: 0px;
-}
-
-.backToTopLink
-{
-	color: #ffffff; /* fixed this, used to be fffff (five) */
-	font-family: verdana, arial, sans-serif;
-	font-size: 8pt;
-	font-weight: normal;	
-	margin: 0px;
-	padding-bottom: 10px;
-	text-align:center;	/* fixed this, used to be middle */
-	text-decoration: none;
-}
-
-.backToTopLink:hover
-{
-	color: #969;
-	text-decoration: underline;
-}
-
-.backToTopLink:visited
-{
-	color: #5c81a7;
-	text-decoration: none;	
-}
-
-.copyright
-{
-	color: #7080b0;
-	font-family: verdana, arial, sans-serif;
-	font-size: 8pt;
-	font-weight: normal;
-	padding-left: 0px;
-	padding-right: 10px;
-	padding-top: 25px;
-	text-align: left;
-	width: 100%;
-}
-
-.versionInfo
-{
-	color: #7080b0;
-	font-family: verdana, arial, sans-serif;
-	font-size: 8pt;
-	font-weight: normal;
-	padding-left: 10px;
-	padding-right: 0px;
-	padding-top: 25px;
-	text-align: right;
-}
-
-.quote
-{
-	font-family: arial, helvetica, sans-serif;
-	font-size: 10pt;
-	font-style: italic;
-}
-
-.codeSample
-{
-	font-family: courier;
-	font-size: 10pt;		
-}
-
-.elementLink
-{
-	font-family: arial, helvetica, sans-serif;
-	font-size: 10pt;	
-	color: #0000ff;
-}
-
-.elementLinkWithType
-{
-	font-family: arial, helvetica, sans-serif;
-	font-size: 10pt;
-	color: #0000ff;
-}
-
-.elementLinkWithUserText
-{
-	font-family: arial, helvetica, sans-serif;
-	font-size: 10pt;
-	color: #0000ff;
-}
-
diff --git a/source/public/stylesheets/wiki.css b/source/public/stylesheets/wiki.css
deleted file mode 100644
index 525d25e..0000000
--- a/source/public/stylesheets/wiki.css
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * Copyright (c) 2008 Logica and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Onno van der Straaten - initial implementation
- */
-
-div#epfwiki_header {
-	margin: 0px;
-	top: 0px;
-	left: 0px;
-	right: 0px;  
-}
-
-div#spacer {
-	height: 40px;
-}
-
-div#toolbar {
-	position: absolute;
-	top: 0px;
-	left: 0px;
-	right: 0px;	
-	height: 24px;	
-	background: url(../images/tab_background.png);
-}
-
-ol#toc {
-    list-style: none;
-    margin-left: 10px;
-	margin-top: 0px;	
-    padding: 0px;
-	font-size: 10pt;
-    height: 24px;
-	font-family: arial, helvetica, sans-serif;
-}
-
-ol#toc li {
-    float: left;
-    margin: 0 0 0 0;
-}
-
-ol#toc a {
-    background: url(../images/tab.png);
-    color: black;
-    display: block;
-    float: left;
-    height: 20px;
-    padding-left: 10px;
-    text-decoration: none;
-}
-
-ol#toc a:hover {
-    background-position: 0 -40px;
-}
-
-ol#toc a:hover span {
-    background-position: 100% -40px;
-}
-
-ol#toc li.current a {
-    background-position: 0 -20px;
-    color: black;
-}
-
-ol#toc li.current span {
-    background-position: 100% -20px;
-}
-
-ol#toc span {
-    background: url(../images/tab.png) 100% 0;
-    display: block;
-    line-height: 20px;
-    padding-right: 10px;
-}
-
-ol#toc li.simple {
-    float: right;
-    margin: 0 0 0 0;
-}
-
-ol#toc li.simple a {
-    background: none;
-    color: #565656;
-    display: block;
-    height: 20px;
-    padding-left: 10px;
-    text-decoration: none;
-}
-
-ol#toc li.simple a:hover{
-    text-decoration: underline;
-}
-
-ol#toc li.simple span {
-background: none;
-}
-
-
-div#page_status {
-	font-size: xx-small; 
-	font-family: verdana, arial, helvetica, sans-serif, kanji2; 
-	color: gray; 
-	padding: 4px; 
-	text-align: left;
-}
-
-#commentsList {
-padding-left: 100px
-}
-
-.comment{
-background-color: #ececec;
-width: 700px;
-padding: 10px;
-}
-
-.commentfooter{
-background: url(../images/arrow.gif) 20px 0 no-repeat;
-padding-left: 58px;
-padding-top: 1px;
-margin-bottom: 2em;
-font-size: 90%;
-color: #4A4A4A;
-}
\ No newline at end of file
diff --git a/source/script/about b/source/script/about
deleted file mode 100644
index 7b07d46..0000000
--- a/source/script/about
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../config/boot'
-require 'commands/about'
\ No newline at end of file
diff --git a/source/script/breakpointer b/source/script/breakpointer
deleted file mode 100644
index 64af76e..0000000
--- a/source/script/breakpointer
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../config/boot'
-require 'commands/breakpointer'
\ No newline at end of file
diff --git a/source/script/console b/source/script/console
deleted file mode 100644
index 42f28f7..0000000
--- a/source/script/console
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../config/boot'
-require 'commands/console'
\ No newline at end of file
diff --git a/source/script/destroy b/source/script/destroy
deleted file mode 100644
index fa0e6fc..0000000
--- a/source/script/destroy
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../config/boot'
-require 'commands/destroy'
\ No newline at end of file
diff --git a/source/script/generate b/source/script/generate
deleted file mode 100644
index ef976e0..0000000
--- a/source/script/generate
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../config/boot'
-require 'commands/generate'
\ No newline at end of file
diff --git a/source/script/performance/benchmarker b/source/script/performance/benchmarker
deleted file mode 100644
index c842d35..0000000
--- a/source/script/performance/benchmarker
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../config/boot'
-require 'commands/performance/benchmarker'
diff --git a/source/script/performance/profiler b/source/script/performance/profiler
deleted file mode 100644
index d855ac8..0000000
--- a/source/script/performance/profiler
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../config/boot'
-require 'commands/performance/profiler'
diff --git a/source/script/plugin b/source/script/plugin
deleted file mode 100644
index 26ca64c..0000000
--- a/source/script/plugin
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../config/boot'
-require 'commands/plugin'
\ No newline at end of file
diff --git a/source/script/process/inspector b/source/script/process/inspector
deleted file mode 100644
index bf25ad8..0000000
--- a/source/script/process/inspector
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../config/boot'
-require 'commands/process/inspector'
diff --git a/source/script/process/reaper b/source/script/process/reaper
deleted file mode 100644
index c77f045..0000000
--- a/source/script/process/reaper
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../config/boot'
-require 'commands/process/reaper'
diff --git a/source/script/process/spawner b/source/script/process/spawner
deleted file mode 100644
index 7118f39..0000000
--- a/source/script/process/spawner
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../config/boot'
-require 'commands/process/spawner'
diff --git a/source/script/runner b/source/script/runner
deleted file mode 100644
index ccc30f9..0000000
--- a/source/script/runner
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../config/boot'
-require 'commands/runner'
\ No newline at end of file
diff --git a/source/script/server b/source/script/server
deleted file mode 100644
index dfabcb8..0000000
--- a/source/script/server
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../config/boot'
-require 'commands/server'
\ No newline at end of file
diff --git a/source/test/fixtures/users.yml b/source/test/fixtures/users.yml
deleted file mode 100644
index 1da9549..0000000
--- a/source/test/fixtures/users.yml
+++ /dev/null
@@ -1,76 +0,0 @@
-# == Schema Information
-# Schema version: 1
-#
-# Table name: users
-#
-#  id                       :integer(11)   not null, primary key
-#  email                    :string(250)   default(), not null
-#  name                     :string(50)    default(), not null
-#  ip_address               :string(20)    default(), not null
-#  hashed_password          :string(40)    
-#  hashed_password_new      :string(40)    
-#  admin                    :string(1)     default(N), not null
-#  notify_daily             :integer(1)    default(0), not null
-#  notify_weekly            :integer(1)    default(0), not null
-#  notify_monthly           :integer(1)    default(0), not null
-#  site_id                  :integer(10)   
-#  created_on               :datetime      
-#  updated_on               :datetime      
-#  http_user_agent          :string(250)   
-#  logon_count              :integer(5)    default(0)
-#  logon_using_cookie_count :integer(5)    default(0)
-#  last_logon               :datetime      
-#  confirmed_on             :datetime      
-#
-
-# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
-andy:
-    id: 1
-    email: "andy.kaufman@epf.eclipse.org"
-    name: "Andy Kaufman"
-    ip_address: "localhost"
-    hashed_password: "<%= hash_pw("Andy Kaufman") %> "
-    admin: "Y"
-    created_on: "<%= Time.now.strftime "%Y-%m-%d %H:%M:%S" %>"
-    updated_on: "<%= Time.now.strftime "%Y-%m-%d %H:%M:%S" %>"
-    confirmed_on: "<%= Time.now.strftime "%Y-%m-%d %H:%M:%S" %>"
-admin:
-    id: 2
-    email: "user2@epf.eclipse.org"
-    name: "User2"
-    ip_address: "localhost"
-    hashed_password: "<%= hash_pw("user2") %> "
-    admin: "Y"
-    created_on:  "2006-01-01 00:00:00"
-    updated_on: "2006-01-02 00:00:00"
-    confirmed_on: "<%= Time.now.strftime "%Y-%m-%d %H:%M:%S" %>"    
-cash:
-    id: 3
-    email: "cash.oshman@epf.eclipse.org"
-    name: "Cash Oshman"
-    ip_address: "localhost"
-    hashed_password: "<%= hash_pw("Cash Oshman") %> "
-    admin: "N"
-    created_on: "<%= Time.now.strftime "%Y-%m-%d %H:%M:%S" %>"
-    updated_on: "<%= Time.now.strftime "%Y-%m-%d %H:%M:%S" %>" 
-    confirmed_on: "<%= Time.now.strftime "%Y-%m-%d %H:%M:%S" %>"    
-tony:
-    id: 4
-    email: "tony.clifton@epf.eclipse.org"
-    name: "Tony Clifton"
-    ip_address: "localhost"
-    hashed_password: "<%= hash_pw("Tony Clifton") %> "
-    admin: "N"
-    created_on: "<%= Time.now.strftime "%Y-%m-%d %H:%M:%S" %>"
-    updated_on: "<%= Time.now.strftime "%Y-%m-%d %H:%M:%S" %>"
-    confirmed_on: "<%= Time.now.strftime "%Y-%m-%d %H:%M:%S" %>"
-george:
-    id: 5
-    email: "george.shapiro@epf.eclipse.org"
-    name: "George Shapiro"
-    ip_address: "localhost"
-    hashed_password: "<%= hash_pw("George Shapiro") %> "
-    admin: "C"
-    created_on: "<%= Time.now.strftime "%Y-%m-%d %H:%M:%S" %>"
-    updated_on: "<%= Time.now.strftime "%Y-%m-%d %H:%M:%S" %>"
-    confirmed_on: "<%= Time.now.strftime "%Y-%m-%d %H:%M:%S" %>"
diff --git a/source/test/functional/comments_controller_test.rb b/source/test/functional/comments_controller_test.rb
deleted file mode 100644
index 1df87f9..0000000
--- a/source/test/functional/comments_controller_test.rb
+++ /dev/null
@@ -1,64 +0,0 @@
-require File.dirname(__FILE__) + '/../test_helper'
-require 'comments_controller'
-
-#--######################################################################
-# Copyright (c) 2006 Logica
-# 
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# 
-# Onno van der Straaten:: initial implementation
-#++######################################################################
-# {Copyright (c) 2006 Logica}[link:files/COPYRIGHT.html]
-
-class CommentsController; def rescue_action(e) raise e end; end
-
-class CommentsControllerTest < Test::Unit::TestCase
-
-  fixtures :users
-  
-  def setup
-    logger.debug "Test Case: #{name}"  
-    @controller = CommentsController.new
-    @request    = ActionController::TestRequest.new
-    @response   = ActionController::TestResponse.new
-    @wiki = create_templates
-    @andy, @george, @tony = users(:andy), users(:george), users(:tony) # admin, cadmin, user    
-  end
-
-  def teardown
-    [ENV['EPFWIKI_SITES_PATH'], ENV['EPFWIKI_WIKIS_PATH']].each do |p|
-      FileUtils.rm_r(p) if File.exists?(p)
-      File.makedirs(p)
-    end
-  end
-  
-  # Shows:
-  # 1. All users can access the edit form (including anonymous users)
-  # 2. Cadmin can update and destroy
-  def test_edit_update_destroy
-    # 1
-    p = WikiPage.find_by_presentation_name('Toolmentor Template')
-    c = Comment.create(:text => 'Text of comment by user tony', :user => @tony, :version => p.current_version, :page => p, :site => p.site)
-    get :edit, :id => c.id
-    assert_response :success
-    session['user'] = @andy
-    get :edit, :id => c.id
-    assert_response :success
-    assert_match 'Text of comment by user tony', @response.body
-    # 2
-    post :destroy
-    assert_unot_cadmin_message
-    post :update
-    assert_unot_cadmin_message
-    session['user'] = @george
-    post :destroy, :id => c.id 
-    assert_redirected_to :controller => 'sites', :action => 'comments', :id => p.site.id
-    # TODO test update
-  end
-  
-end
diff --git a/source/test/functional/feedbacks_controller_test.rb b/source/test/functional/feedbacks_controller_test.rb
deleted file mode 100644
index dbaab03..0000000
--- a/source/test/functional/feedbacks_controller_test.rb
+++ /dev/null
@@ -1,59 +0,0 @@
-require File.dirname(__FILE__) + '/../test_helper'
-require 'feedbacks_controller'
-
-#--######################################################################
-# Copyright (c) 2006 Logica
-# 
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# 
-# Onno van der Straaten:: initial implementation
-#++######################################################################
-# {Copyright (c) 2006 Logica}[link:files/COPYRIGHT.html]
-
-class FeedbacksController; def rescue_action(e) raise e end; end
-
-class FeedbacksControllerTest < Test::Unit::TestCase
-
-  fixtures :users
-
-  def setup
-    logger.debug "Test Case: #{name}"  
-    @controller = FeedbacksController.new
-    @request    = ActionController::TestRequest.new
-    @response   = ActionController::TestResponse.new
-    @andy = users(:andy) # admin
-    @george = users(:george) # central admin
-    @tony = users(:tony) # user
-    @emails = ActionMailer::Base::deliveries
-    @emails.clear
-  end
-
-  def test_edit
-    get :edit, :id => 999
-    assert_unot_cadmin_message
-  end
-
-  def test_destroy
-    feedback = Feedback.create(:email => 'x@adb.com',:text => 'test_show')
-    get :index
-    session['user'] = @andy
-    assert_nothing_raised {Feedback.find(feedback.id)}
-
-    post :destroy, :id => feedback.id
-    assert_unot_cadmin_message
-    
-    # TODO cannot test this because the controller uses request.referer
-    #session['user'] = @george
-    #post :destroy, :id => feedback.id
-    
-    #assert_response :redirect
-    #assert_redirected_to :action => 'list'
-
-    #assert_raise(ActiveRecord::RecordNotFound) {Feedback.find(feedback.id)}
-  end
-end
diff --git a/source/test/functional/login_controller_test.rb b/source/test/functional/login_controller_test.rb
deleted file mode 100644
index 7469895..0000000
--- a/source/test/functional/login_controller_test.rb
+++ /dev/null
@@ -1,116 +0,0 @@
-# All testing of the correct working of cookies is in integration testing because
-# cookies don't work as expected with functional tests, see for instance
-# http://www.pluitsolutions.com/2006/08/02/rails-functional-test-with-cookie/
-
-require File.dirname(__FILE__) + '/../test_helper'
-require 'login_controller'
-
-#--######################################################################
-# Copyright (c) 2006 Logica
-# 
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# 
-# Onno van der Straaten:: initial implementation
-#++######################################################################
-# {Copyright (c) 2006 Logica}[link:files/COPYRIGHT.html]
-
-class LoginController; def rescue_action(e) raise e end; end
-
-class LoginControllerTest < Test::Unit::TestCase
-  
-  fixtures :users
-  
-  def setup
-    logger.debug "Test Case: #{name}"  
-    @controller = LoginController.new
-    @request    = ActionController::TestRequest.new
-    @response   = ActionController::TestResponse.new
-    @emails = ActionMailer::Base::deliveries
-    @emails.clear
-  end
-  
-  # Shows we can create the central admin
-  def  test_signup_central_admin
-    User.delete_all
-    assert User.count == 0
-    get :index
-    assert_redirected_to :action => 'login'
-    get :login
-    assert_redirected_to :action => 'new_cadmin'
-    get :new_cadmin
-    assert_field 'user_name'        
-    assert_field 'user_email'   
-    assert_field 'user_password'
-    assert_field 'user_password_confirmation'
-    assert_tag :tag => 'input', :attributes => {:type => 'submit'}    
-    assert_tag :tag => 'form', :attributes => {:action => '/login/new_cadmin'}
-    post	:new_cadmin, :user => {:name => 'George Shapiro', :email=> 'george.shapiro@epf.eclipse.org', :password => 'pass2', :password_confirmation => 'pass2'}
-    assert_equal LoginController::FLASH_CENTRAL_ADMIN_CREATED, flash['success']
-    assert_redirected_to :action => 'login'
-  end
-  
-  # Shows that a user can sign up by supplying name, email, password and password confirmation
-  def test_sign_up_with_pw
-    get :sign_up 
-    assert_response :success
-    assert_field 'user_name'        
-    assert_field 'user_email'
-    assert_field 'user_password'
-    assert_field 'user_password_confirmation'
-    assert !ENV['EPFWIKI_DOMAINS'].blank?
-    assert_tag :tag => 'select', :attributes => {:name => 'user[email_extension]'}
-    post :sign_up, :user => {:name => "user1", :email=>"user1", :email_extension => "@somedomain.com"} # , :i_agree_to_the_terms_of_use => '1'
-    assert_errors
-    assert_not_nil assigns(:user)
-    assert_equal 'Password confirmation can\'t be blank, Password can\'t be blank, Email domain not valid', assigns(:user).errors.full_messages.join(', ')        
-    post :sign_up, :user => {:name => "user1", :email=>"user1", :email_extension => "@epf.eclipse.org", :password => 'user1', :password_confirmation => 'user1'} # , :i_agree_to_the_terms_of_use => '1'
-    assert_equal 'test.host', @request.host + (@request.port == 80 ? '' : ':' + @request.port.to_s)
-    assert_redirected_to :action => 'login'
-    assert_equal LoginController::FLASH_PW_CONFIRMATION_EMAIL_SENT, flash['success']
-    assert_equal(1, @emails.size)
-    email = @emails.first
-    assert_equal("[#{ENV['EPFWIKI_APP_NAME']}] Welcome", email.subject)
-    assert_equal("user1@epf.eclipse.org", email.to[0])
-    assert_equal([ENV['EPFWIKI_REPLY_ADDRESS']], email.from)
-    assert_redirected_to :action => 'login'
-  end  
-  
-  # Shows:
-  # 1. Request Lost password form
-  # 2. Error on wrong email addresses  
-  # 3. New password set, email sent with password and token
-  # 4. Cannot logon with 'new' password (not activated yet)
-  def	test_lost_password
-    # 1
-    get :lost_password
-    assert_response	:success
-    assert_field 'user_email'
-    assert_tag :tag => 'form', :attributes => {:action => '/login/lost_password'}
-    # 2
-    post :lost_password, :user => {:email => 'noneexisting email', :password => 'new_password', :password_confirmation => 'new_password'}
-    assert_response :success
-    assert_equal LoginController::FLASH_EMAIL_NOT_FOUND, flash['notice']
-    # 3
-    post :lost_password, :user => {:email => 'andy.kaufman@epf.eclipse.org'}
-    user_by_email = assigns(:user_by_email)
-    assert_not_nil user_by_email
-    assert_equal LoginController::FLASH_PW_CONFIRMATION_EMAIL_SENT, flash['success']
-    assert_equal(1, @emails.size)
-    email = @emails.first
-    assert_equal("[#{ENV['EPFWIKI_APP_NAME']}] New Password", email.subject)
-    assert_equal("andy.kaufman@epf.eclipse.org", email.to[0])
-    assert_equal([ENV['EPFWIKI_REPLY_ADDRESS']], email.from)
-    assert_match(assigns(:user_by_email).token_new, email.body) 
-    assert_redirected_to :action => 'login'
-    @emails.clear
-    # 4
-    post :login, :user => {:email => user_by_email.email, :password => user_by_email.password}
-    assert_equal LoginController::FLASH_INVALID_PW, flash['notice']  
-  end
-  
-end
diff --git a/source/test/functional/other_controller_test.rb b/source/test/functional/other_controller_test.rb
deleted file mode 100644
index d004c7d..0000000
--- a/source/test/functional/other_controller_test.rb
+++ /dev/null
@@ -1,51 +0,0 @@
-require File.dirname(__FILE__) + '/../test_helper'
-require 'other_controller'
-
-#--######################################################################
-# Copyright (c) 2006 Logica
-# 
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# 
-# Onno van der Straaten:: initial implementation
-#++######################################################################
-# {Copyright (c) 2006 Logica}[link:files/COPYRIGHT.html]
-
-class OtherController; def rescue_action(e) raise e end; end
-
-class OtherControllerTest < Test::Unit::TestCase
-
-  fixtures :users
-  
-  def setup
-    logger.debug "Test Case: #{name}"  
-    @controller = OtherController.new
-    @request    = ActionController::TestRequest.new
-    @response   = ActionController::TestResponse.new
-    #@oup_20060721 = create_oup_20060721
-    #@oup_20060728 = create_oup_20060728
-    #@oup_wiki = create_oup_wiki(@oup_20060721)
-    @andy = users(:andy) # admin
-    @george = users(:george) # central admin
-    @tony = users(:tony) # user
-    @cash = users(:cash) 
-  end
-  
-  def teardown
-    [ENV['EPFWIKI_SITES_PATH'], ENV['EPFWIKI_WIKIS_PATH']].each do |p|
-      FileUtils.rm_r(p) if File.exists?(p)
-      File.makedirs(p)
-    end
-  end  
-
-  # Shows all users can access information about the application with other/about
-  def test_about
-    get :about
-    assert_response :success
-  end
-  
-end
diff --git a/source/test/functional/pages_controller_test.rb b/source/test/functional/pages_controller_test.rb
deleted file mode 100644
index df131f2..0000000
--- a/source/test/functional/pages_controller_test.rb
+++ /dev/null
@@ -1,386 +0,0 @@
-require File.dirname(__FILE__) + '/../test_helper'
-require 'pages_controller'
-require 'ftools'
-
-#--######################################################################
-# Copyright (c) 2006 Logica
-# 
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# 
-# Onno van der Straaten:: initial implementation
-#++######################################################################
-# {Copyright (c) 2006 Logica}[link:files/COPYRIGHT.html]
-
-class PagesController; def rescue_action(e) raise e end; end
-
-class PagesControllerTest < Test::Unit::TestCase
-
-  fixtures :users
-  
-  def setup
-    logger.debug "Test Case: #{name}"  
-    @controller = PagesController.new
-    @request    = ActionController::TestRequest.new
-    @response   = ActionController::TestResponse.new
-    @andy, @george, @tony = users(:andy), users(:george),users(:tony) 
-    #@oup_20060721 = create_oup_20060721
-    #@oupwiki = create_oup_wiki(@oup_20060721)     
-    @wiki = create_templates
-    @wiki.reload
-    @bp = @wiki.baseline_process
-    @emails = ActionMailer::Base::deliveries
-    @emails.clear
-  end
-  
-  def teardown
-    [ENV['EPFWIKI_SITES_PATH'], ENV['EPFWIKI_WIKIS_PATH']].each do |p|
-      FileUtils.rm_r(p) if File.exists?(p)
-      File.makedirs(p)
-    end
-  end
-  
-  # Shows:
-  # 1. 'View' does not require logon 
-  # 2. 'View' of a Page with Comment records, displays these records
-  # 3. Contributors are displayed on the page
-  # 4. If the page is checked out, this is displayed in the page
-  def test_view
-    # 1
-    @wiki.pages.each do |page|
-      id = (@wiki.rel_path + page.rel_path).gsub('/', '_') # id allows us to cache the requests (pages)
-      get :view, :url => page.url(true), :id => id
-      assert_response :success
-      assert_equal @wiki, assigns(:wiki)
-      assert_equal page, assigns(:page)
-      assert_not_nil assigns(:version)
-      assert_equal [], assigns(:comments)
-      assert_nil assigns(:checkout)
-      assert_equal [], assigns(:contributor_names)
-    end
-    # 2
-    page = @wiki.pages[3]
-    Comment.create(:text => 'Comment', :user => @andy, :page => page, :site => @wiki, :version => page.current_version)
-    Comment.create(:text => 'Another comment', :user => @andy, :page => page, :site => @wiki, :version => page.current_version)
-    Comment.create(:text => 'And another comment', :user => @andy, :page => page, :site => @wiki, :version => page.current_version)
-    page.reload
-    assert_equal 3, page.comments.size 
-    get :view, :url => page.url(true)
-    assert_response :success
-    assert_match "Comment", @response.body
-    assert_match "Another comment", @response.body
-    assert_match "And another comment", @response.body
-    # 3
-    assert_equal [@andy.name], assigns(:contributor_names)
-    assert_match @andy.name, @response.body
-    # 4
-    co = Checkout.new(:user => @andy, :page => page, :site => @wiki)
-    assert co.save
-    get :view, :url => page.url(true)
-    assert_response :success
-    assert_match 'This page is currently being modified by ' + @andy.name, @response.body
-  end
-
-  # Shows:
-  # 1. Access 'discussion' space for a page requires logon
-  # 2. Comment submitted by specifying page and Wiki
-  # 3. Users are immediately notified about the new comment
-  # 4. user cannot mark 'todo', 'done'
-  # 5. admin can, admin is recorded as the user that marked 'done'
-  # 6. cadmin can, cadmin is recorded as the user that marked 'todo'
-  def test_discussion
-    # 1
-    page = WikiPage.find_by_presentation_name('Toolmentor Template')
-    get :discussion
-    assert_redirected_to :controller => 'login'
-    session['user'] = @tony
-    get :discussion, :site_folder => @wiki.folder, :id => page.id
-    assert_response :success
-    assert_not_nil assigns(:wiki)
-    assert_not_nil assigns(:page)
-    assert_not_nil assigns(:comment)
-    assert_not_nil assigns(:comments)
-    assert_equal 1, page.versions.size
-    assert_equal 0, assigns(:comments).size
-    # preparation for 3
-    [@andy, @george].each {|u|u.update_attributes(:notify_immediate => 1)}
-    assert_equal 0, @emails.size
-    # 2
-    post :discussion, :comment => {:text => 'comment 1 submitted in test01_new', :page_id => page.id}
-    assert_redirected_to :controller => 'pages', :site_folder => @wiki.folder, :id => page.id, :action => 'discussion'
-    assert_not_nil assigns(:wiki)
-    assert_not_nil assigns(:page)
-    assert_not_nil assigns(:comment)
-    assert_not_nil assigns(:comment).version
-    assert_equal page.current_version, assigns(:comment).version
-    assert_not_nil assigns(:comments)
-    assert_no_errors
-    assert_no_errors(assigns(:comment))
-    assert_equal 1, assigns(:comments).size
-    get :discussion, :site_folder => @wiki.folder, :id => page.id
-    assert_response :success    
-    # 3
-    assert_equal 1, @emails.size
-    assert_equal "[EPF Wiki - Test Enviroment] New comment about #{page.presentation_name}", @emails[0].subject
-    assert_equal [@andy.email, @george.email, @tony.email], @emails[0].bcc # tony because he created the comment, george and andy because they want to be notified immediately
-  end
-  
-  # Shows:
-  # 1. 'Edit' requires logon, after logon redirects to 'Checkout'
-  # 2. Get 'Checkout' will display the checkout dialog 
-  # 3. We can create a checkout
-  # 4. We cannot checkout again, if a checkout exists the HTML editor will open but a warning is displayed
-  # 7. Can open page with TinyMCE if TinyMCE is installed in public/javascripts/tiny_mce
-  # 8. All users can start the HTML editor but only the owner or cadmin can commit changes
-  # 9. Other user can't save HTML
-  # 10. Owner can save HTML
-  # 11. Cadmin can save HTML of other user  
-  # 12. Other user cannot checkin 
-  # 13. Can checkin without submit of HTML 
-  # 14. Checkout of version 1 of page
-  # 15. Can checkin with submit of HTML
-  # 16. Authentication to request form
-  # 17. user request for form to create page based on a template
-  # 18. form has field 'presentation_name', textarea 'note' and radio button for selecting a version, last version of first template is default
-  # 19. new page '' based on 'Tool Mentor Template.html' creates a checkout
-  # 20. page does not exist untill checkin
-  # 21. undo checkout deletes new page 
-  # 22. we can edit, preview, save and checkin a new page created based on a template
-   def test_checkout_edithtml_save_checkin_new
-    page = WikiPage.find_by_presentation_name('Toolmentor Template')
-    assert_not_nil page
-    assert !page.versions.empty?
-    # 1
-    get :edit, :id => page.id, :site_folder => @wiki.folder
-    assert_redirected_to :controller => 'login'
-    session['user'] = @tony
-    get :edit, :id => page.id, :site_folder => @wiki.folder
-    assert_redirected_to :action => 'checkout', :id => page.id, :site_folder => @wiki.folder
-    # 2 
-    get :checkout, :id => page.id, :site_folder => @wiki.folder
-    assert_response :success
-    assert_not_nil assigns(:page)
-    assert_not_nil assigns(:wiki)      
-    assert_not_nil assigns(:version)   
-    assert_equal page.current_version, assigns(:version).source_version # source version is default current_version
-    assert_not_nil @bp
-    # 3
-    post :checkout, :version => {:version_id => assigns(:version).source_version.id, :note => 'test01_checkout'}
-    assert_not_nil page.checkout
-    assert_redirected_to  :action => 'edit', :checkout_id => page.checkout.id 
-    # 4
-    session['user'] = @andy
-    get :checkout, :id => page.id, :site_folder => @wiki.folder # get checkout will redirect
-    assert_redirected_to  :action => 'edit', :checkout_id => page.checkout.id
-    get :edit, :checkout_id => page.checkout.id # will just open the page in the HTML editor
-    assert_response :success
-    assert_match 'The page is currently checked out by user',@response.body
-    # 7
-    checkout = Checkout.find(:first)
-    session['user'] = checkout.user
-    ENV['EPFWIKI_EDITOR'] = 'tinymce' # TODO Bug 218832 - RTE
-    assert File.exists?("#{ENV['EPFWIKI_ROOT_DIR']}public/javascripts/tiny_mce/tiny_mce.js")       
-    get :edit, :checkout_id => checkout.id
-    assert_response :success
-    # 8
-    session['user'] = @andy
-    get :edit, :checkout_id => checkout.id
-    assert_response :success
-    assert_match "The page is currently checked out by user #{@tony.name}", @response.body
-    assert_match "You can modify the HTML but you cannot commit any changes", @response.body
-    session['user'] = @george
-    get :edit, :checkout_id => checkout.id
-    assert_response :success
-    assert_not_nil assigns(:checkout)
-    assert_match "The page is currently checked out by user #{@tony.name}", @response.body
-    assert_match "As you are the central administrator you can perform operations on this checkout", @response.body
-    # 9    
-    page.reload
-    assert_not_nil page.checkout
-    co = page.checkout
-    assert_equal co.version.source_version.page, co.page # ordinary checkout, not a new page
-    html = co.version.html.gsub('</body>','adding some text</body>')
-    session['user'] = @andy
-    assert_raise(RuntimeError) {post :save, :html => html, :checkout_id => co.id}
-    # 10
-    session['user'] = checkout.user
-    post :save, :html => html, :checkout_id => co.id
-    assert_redirected_to :action => 'edit', :checkout_id => co.id
-    assert_match 'adding some text', checkout.version.html 
-    # 11
-    session['user'] = @george
-    post :save,  :checkout_id => co.id, :html => co.version.html.gsub('adding some text', 'adding some text, adding some more by by cadmin')
-    assert_redirected_to :action => 'edit', :checkout_id => co.id    
-    assert_equal nil, co.version.version
-    assert_match 'adding some text, adding some more by by cadmin', co.version.html
-    # 12     
-    logger.debug 'test05_checkin'
-    assert_equal 1, Checkout.count
-    #page = WikiPage.find_by_presentation_name('Role Template')
-    assert_not_nil page.checkout
-    co = page.checkout
-    session['user'] = @andy
-    assert @andy != checkout.user
-    assert_raise(RuntimeError) {post :checkin, :checkout_id => checkout.id}
-    # 13
-    session['user'] = checkout.user
-    post :checkin, :checkout_id => checkout.id
-    assert_raise(ActiveRecord::RecordNotFound) {Checkout.find(checkout.id)}
-    assert_match 'adding some text, adding some more by by cadmin', page.html
-    assert_enhanced_file(page.path)
-    assert_version_file(page.current_version.path)  
-    # 14
-    page.reload
-    assert_equal 1, page.versions[1].version
-    post :checkout, :version => {:version_id => page.versions[1].id, :note => 'Checkout of version 1'}   
-    assert_not_nil page.checkout
-    assert_redirected_to :action => 'edit', :checkout_id => page.checkout.id
-    co = page.checkout
-    v = co.version
-    # 15
-    post :checkin, :checkout_id => co.id, :html => checkout.version.html.gsub('</body>', 'Checkin with submit of html</body>')
-    assert_raise(ActiveRecord::RecordNotFound) {Checkout.find(co.id)}    
-    assert_match 'Checkin with submit of html', page.html    
-    assert_enhanced_file(page.path)
-    v.reload
-    assert_version_file(v.path)
-    # 16
-    #create_templates
-    session['user'] = @tony
-    get :new, :site_folder => @wiki.folder, :id => @wiki.pages[10]
-    assert_not_nil assigns(:wiki)
-    assert_not_nil assigns(:page)    
-    assert_not_nil assigns(:new_page).source_version
-    assert_not_nil assigns(:templates)    
-    assert_equal 27, assigns(:templates).size
-    assert_equal assigns(:templates)[0].id, assigns(:new_page).source_version
-    #assert_tag :tag => 'input', :attributes => {:type => 'radio',  :name => 'new_page[source_version]', :value => assigns(:page).source_version, :checked => 'checked'}
-    # 17
-    #assert_field('page_presentation_name') TODO update
-    #assert_tag :tag => 'textarea', :attributes => {:id => 'new_page_note', :name => 'new_page[note]'}
-    #assigns(:templates).each do |version|
-    #  assert_tag :tag => 'input', :attributes => {:type => 'radio', :id => "new_page_source_version_#{version.id.to_s}", :name => 'new_page[source_version]', :value => version.id}
-    #end
-    # 18
-    template = WikiPage.find_by_presentation_name('Toolmentor Template')
-    assert_not_nil template
-    post :new, :id => template.id, :site_folder => template.site.folder, :page => {:presentation_name => 'A strange name&2//++-09976', :source_version => template.current_version.id, :note => 'test03_new_page_using_template'}
-    assert_not_nil assigns(:checkout)
-    co = assigns(:checkout)
-    new_page = co.page
-    assert_not_nil new_page.user
-    assert_redirected_to :action => 'edit', :checkout_id => co.id
-    assert_equal template.current_version, co.version.source_version
-    assert_version_file(co.version.path)
-    assert_equal 'a_strange_name209976.html', new_page.filename
-    assert co.version.source_version.html.index('Tool Mentor: Toolmentor Template')
-    # 19
-    assert File.exists?(new_page.path) # 
-    assert File.exists?(co.version.path)
-    # 20
-    # 21
-    # 22
-    page = WikiPage.find_by_presentation_name('A strange name&2//++-09976')
-    assert_not_nil page.checkout
-    co = page.checkout
-    v = co.version
-    session['user'] = co.user
-    get :edit, :checkout_id => co.id # we can edit
-    post :preview, :html => co.version.html.gsub('accomplish a piece of work', 'accomplish a piece of work####'), :checkout_id => co.id
-    assert_redirected_to '/' + co.version.rel_path_root
-    assert_match 'work####', co.version.html
-    post :save, :html => co.version.html.gsub('work####', '####work####'), :checkout_id => co.id    
-    assert_match '####work####', co.version.html    
-    post :checkin, :checkout_id => co.id
-    assert_raise(ActiveRecord::RecordNotFound) {Checkout.find(co.id)}
-    assert_match '####work####', page.html
-    assert_enhanced_file(page.path)
-    v.reload
-    assert_version_file(v.path)
-  end 
-  
-  # Shows:
-  # 1. Owner can undo checkout
-  # 2. Other user can't undo
-  # 3. Cadmin can undo any checkout
-  # 4. Undo of new page deletes the checkout, version, page and redirects to first page of the wiki
-  def test_undocheckout
-    get :checkout
-    session['user'] = @tony
-    page = WikiPage.find_by_presentation_name('Toolmentor Template')
-    assert_nil page.checkout
-    # 1
-    v = page.current_version
-    assert_not_nil v
-    post :checkout, :version => {:version_id => v.id, :note => 'test_undocheckout'}    
-    assert_not_nil page.checkout
-    assert_redirected_to :action => 'edit', :checkout_id => page.checkout.id
-    co = page.checkout
-    v = page.checkout.version
-    get :undocheckout, :checkout_id => co.id
-    assert !Checkout.exists?(co.id)
-    assert !Version.exists?(v.id)
-    # 2
-    post :checkout, :version => {:version_id => page.current_version.id, :note => 'test_undocheckout'}    
-    co = page.checkout
-    v = page.checkout.version    
-    session['user'] = @andy
-    assert_raise(RuntimeError) {get :undocheckout, :checkout_id => co.id}
-    # 3
-    session['user'] = @george
-
-    get :undocheckout, :checkout_id => co.id
-    assert_redirected_to '/' + @wiki.rel_path + '/' + page.rel_path
-    assert_nil page.checkout
-    assert !Checkout.exists?(co.id)
-    assert !Version.exists?(v.id)
-    # 4 
-    session['user'] = @tony
-    page.reload
-    assert_not_nil page
-    assert_not_nil page.site
-    assert page.site.pages.size > 0
-    post :new, :id => page.site.pages[0].id, :site_folder =>page.site.folder, :page => {:presentation_name => "New page based on #{page.presentation_name}", :source_version => page.versions.last.id, :note => 'Undo also deletes page'}
-    new_page = WikiPage.find_by_presentation_name("New page based on #{page.presentation_name}")
-    assert_not_nil new_page
-    assert_not_nil new_page.checkout
-    assert_not_nil new_page.checkout.version
-    co, v = new_page.checkout, new_page.checkout.version
-    post :undocheckout, :checkout_id => new_page.checkout.id
-    assert !Page.exists?(new_page.id)
-    assert !Checkout.exists?(co.id)
-    assert !Version.exists?(v.id)
-    assert_redirected_to page.site.pages[0].url
-    end
-  
-  # Shows:
-  # 1. Creating a new version with some added text ####
-  # 2. checkout, checkin van base version is rollback of CHANGE 1
-  # 4. Cannot rollback checked out version
-  def test_rollback
-    get :new
-    session['user'] = @tony
-    page = WikiPage.find_by_presentation_name('Toolmentor Template')
-    assert_equal 1, page.versions.size
-    # 1
-    post :checkout, :version => {:version_id => page.current_version.id, :note => 'test_rollback'}    
-    assert_not_nil page.checkout
-    co = page.checkout
-    post :checkin, :checkout_id => co.id, :html => co.version.html.gsub('</body>', '####</body>')
-    page.reload
-    assert_nil page.checkout
-    assert_match '####', page.html
-    # 2
-    post :rollback, :version => {:version_id => page.versions[0].id}    
-    page.reload
-    assert_nil page.checkout
-    assert_equal 2, page.versions.last.version
-    assert !page.versions.last.html.index('#### 1')
-    assert !page.html.index('####')
-  end
-  
- end
\ No newline at end of file
diff --git a/source/test/functional/portal_controller_test.rb b/source/test/functional/portal_controller_test.rb
deleted file mode 100644
index ac89691..0000000
--- a/source/test/functional/portal_controller_test.rb
+++ /dev/null
@@ -1,152 +0,0 @@
-require File.dirname(__FILE__) + '/../test_helper'
-require 'portal_controller'
-
-#--######################################################################
-# Copyright (c) 2006 Logica
-# 
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# 
-# Onno van der Straaten:: initial implementation
-#++######################################################################
-# {Copyright (c) 2006 Logica}[link:files/COPYRIGHT.html]
-
-class PortalController; def rescue_action(e) raise e end; end
-
-class PortalControllerTest < Test::Unit::TestCase
-  
-  fixtures :users
-  
-  def setup
-    logger.debug "Test Case: #{name}"  
-    @controller = PortalController.new
-    @request    = ActionController::TestRequest.new
-    @response   = ActionController::TestResponse.new
-    @andy = users(:andy) # admin
-    @george = users(:george) #cadmin
-    @tony = users(:tony) #user
-    #create_templates
-    #@emails = ActionMailer::Base::deliveries
-    #@emails.clear
-    #get :list     
-  end
-  
-  def teardown
-    [ENV['EPFWIKI_SITES_PATH'], ENV['EPFWIKI_WIKIS_PATH']].each do |p|
-      FileUtils.rm_r(p) if File.exists?(p)
-      File.makedirs(p)
-    end
-  end
-
-  # Shows:
-  # 1. We can access home, wikis, users ... when there is no data
-  # 2. We can access ... with data
-  def test_all
-    # 1.
-    @wiki = create_templates
-    get :home
-    assert_response :success
-    get :wikis
-    assert_response :success
-    get :users
-    assert_response :success
-    get :about
-    assert_response :success
-    get :feedback
-    assert_response :success
-    get :privacypolicy
-    assert_response :success
-    get :termsofuse
-    assert_response :success
-    get :archives, :year => Time.now.year, :month => Time.now.month
-    assert_response :success
-
-    # 2. 
-    create_some_data(WikiPage.find(:first))  
-    get :home
-    assert_response :success
-    get :wikis
-    assert_response :success
-    get :users
-    assert_response :success
-    get :about
-    assert_response :success
-    get :feedback
-    assert_response :success
-    get :privacypolicy
-    assert_response :success
-    get :termsofuse
-    assert_response :success
-    get :archives, :year => Time.now.year, :month => Time.now.month
-    assert_response :success
-  end 
-
-  # Shows that if there no users, the user is redirected to create the first user
-  def test_home
-    User.destroy_all
-    get :home
-    assert_redirected_to :controller => 'login'
-  end  
-  
-  # Shows:
-  def test_with_different_status_wikis
-    create_templates
-    # 1.
-    get :home
-    assert_response :success
-    get :about
-    assert_response :success
-    get :wikis
-    assert_response :success
-    get :feedback
-    assert_response :success    
-    # 2.
-    w1 = Wiki.create(:folder =>'test_with_different_status_wikis', :user => @andy, :title => 'test_with_different_status_wikis', :description => 'test_with_different_status_wikis' )
-    assert_equal 'Pending', w1.status 
-    w2 = Wiki.create(:folder =>'test_with_different_status_wikis2', :user => @andy, :title => 'test_with_different_status_wikis2', :description => 'test_with_different_status_wikis2' )    
-    assert_equal 'Pending', w2.status
-    bp = BaselineProcess.find(:first)
-    update = Update.create(:baseline_process => bp, :wiki => w2, :user => @andy)
-    assert_equal 'Scheduled', w2.status
-    update.do_update
-    w2.reload
-    assert_equal 'Ready', w2.status
-    w3 = Wiki.create(:folder =>'test_with_different_status_wikis3', :user => @andy, :title => 'test_with_different_status_wikis3', :description => 'test_with_different_status_wikis3' )    
-    update = Update.create(:baseline_process => bp, :wiki => w3, :user => @andy)
-    update.do_update
-    update = Update.create(:baseline_process => bp, :wiki => w3, :user => @andy)
-    w3.reload
-    assert_equal 'Scheduled', w3.status 
-    get :home
-    assert_response :success
-    get :about
-    assert_response :success
-    get :wikis
-    assert_response :success
-    get :feedback
-    assert_response :success     
-  end
-  
-  # TODO more advanced archives test
-  #def tst_archives
-  #  create_templates
-  #  get :home
-  #  archive_links = @response.body.scan(/<a href="\/archives.+<\/a>/)
-  #  archive_links.each do |archive_link|
-  #    year = archive_link.split('/')[2]
-  #    month = archive_link.split('/')[3].split('"')[0]
-  #    FileUtils.rm_rf File.expand_path("public/archives/#{year}/#{month}.html", RAILS_ROOT)
-  #    logger.info "get request archives/#{year}/#{month}"
-  #    get :archives, :year => year, :month => month
-  #    assert_response :success
-  #    assert File.exists?(File.expand_path("public/archives/#{year}/#{month}.html", RAILS_ROOT))
-  #    job_daily
-  #    assert !File.exists?(File.expand_path("public/archives/#{year}/#{month}.html", RAILS_ROOT))
-  #  end
-  #end
-  
-end
diff --git a/source/test/functional/rss_controller_test.rb b/source/test/functional/rss_controller_test.rb
deleted file mode 100644
index 4c9d45d..0000000
--- a/source/test/functional/rss_controller_test.rb
+++ /dev/null
@@ -1,68 +0,0 @@
-
-require File.dirname(__FILE__) + '/../test_helper'
-require 'rss_controller'
-require 'feed_validator'
-
-#--######################################################################
-# Copyright (c) 2006 Logica
-# 
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# 
-# Onno van der Straaten:: initial implementation
-#++######################################################################
-# {Copyright (c) 2006 Logica}[link:files/COPYRIGHT.html]
-
-class RssController; def rescue_action(e) raise e end; end
-
-class RssControllerTest < Test::Unit::TestCase
-
-  fixtures :users
-  
-  def setup
-    logger.debug "Test Case: #{name}"  
-    @controller = RssController.new
-    @request    = ActionController::TestRequest.new
-    @response   = ActionController::TestResponse.new
-    @andy, @george, @tony = users(:andy), users(:george), users(:tony) # admin, cadmin, user
-  end
-
-  def teardown
-    [ENV['EPFWIKI_SITES_PATH'], ENV['EPFWIKI_WIKIS_PATH']].each do |p|
-      FileUtils.rm_r(p) if File.exists?(p)
-      File.makedirs(p)
-    end
-  end
-
-  def test_list
-    @wiki = create_templates
-    p = WikiPage.find_by_presentation_name('Toolmentor Template')
-    assert_not_nil p
-    for i in 0..2
-      c= Comment.new(:text => "Text of comment #{i} by user tony", :user => @tony, :version => p.current_version, :page => p, :site => p.site)
-      assert c.save
-      co = Checkout.new(:user => @andy, :page => p, :site => @wiki, :note => "Checkout #{i} by Andy")
-      assert co.save
-      co.checkin(@andy)
-      u = Upload.new(:filename => 'filename.html', :upload_type => 'Image', 
-        :content_type => 'Content type', :description => 'Description of upload', 
-        :user_id => @andy.id, :rel_path => 'x/y/z.html')
-      assert u.save
-    end
-    get :list, :site_folder => 'all'
-    assert_valid_feed
-    get :list, :site_folder => @wiki.folder
-    assert_valid_feed
-  end
-  
-  # Assumes you will have a development environment on http://localhost:3000 with some data
-  #def test_development_with_feed_validator
-  #  v = W3C::FeedValidator.new()
-  #  v.validate_url('http://localhost:3000/rss/all') 
-  #  puts v.to_s unless v.valid?
-  #end
-end
diff --git a/source/test/functional/sites_controller_test.rb b/source/test/functional/sites_controller_test.rb
deleted file mode 100644
index cfa37be..0000000
--- a/source/test/functional/sites_controller_test.rb
+++ /dev/null
@@ -1,279 +0,0 @@
-require File.dirname(__FILE__) + '/../test_helper'
-require 'sites_controller'
-
-#--######################################################################
-# Copyright (c) 2006 Logica
-# 
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# 
-# Onno van der Straaten:: initial implementation
-#++######################################################################
-# {Copyright (c) 2006 Logica}[link:files/COPYRIGHT.html]
-
-class SitesController; def rescue_action(e) raise e end; end
-
-class SitesControllerTest < Test::Unit::TestCase
-  
-  fixtures :users
-  
-  def setup
-    logger.debug "Test Case: #{name}"  
-    @controller = SitesController.new
-    @request    = ActionController::TestRequest.new
-    @response   = ActionController::TestResponse.new
-    @andy, @george, @tony = users(:andy), users(:george), users(:tony) # admin, cadmin, user
-    @emails = ActionMailer::Base::deliveries
-    @emails.clear
-    get :list     
-  end
-  
-  def teardown
-    [ENV['EPFWIKI_SITES_PATH'], ENV['EPFWIKI_WIKIS_PATH']].each do |p|
-      FileUtils.rm_r(p) if File.exists?(p)
-      File.makedirs(p)
-    end
-  end
-  
-  def test_index
-    get :index
-    assert_redirected_to :controller => 'login'
-    session['user'] = @tony
-    assert_not_nil(session['user'])
-  end
-  
-  def test_list
-    get :list
-    assert_redirected_to :controller => 'login'
-    session['user'] = @tony
-    get :list
-    assert_response :success
-    assert_template 'list'
-    assert_not_nil assigns(:baseline_processes)
-    assert_not_nil assigns(:wikis)
-  end
-  
-  # Shows:
-  # 1. Need to be an admin to create a baseline process
-  # 2. Admin get link to create baseline process
-  # 3. Admin can upload baseline process
-  def test_new
-    # 1
-    session['user'] = @tony
-    get :new
-    assert_unot_admin_message
-    # 2
-    session['user'] = @andy
-    get :list
-    assert_response :success
-    assert_tag :tag => 'a', :attributes => {:href => "/sites/new"}    
-    # 3
-    get :new
-    assert_response :success
-    assert assigns(:site)
-    assert assigns(:baseline_processes)
-    assert assigns(:folders)        
-    assert assigns(:folders).empty?
-    assert assigns(:baseline_processes).empty?
-    assert_response :success
-    #post :upload, :site => nil TODO how to test this here
-    #assert_not_nil assigns(:site)
-    #assert_errors
-    #assert_equal "Folder can't be blank, File can't be blank", assigns(:site).errors.full_messages.join(", ")
-    assert_equal 0, Site.count
-    @oup_20060721 = create_oup_20060721
-    @oup_20060728 = create_oup_20060728  
-    @oup_20060825 = create_oup_20060825
-    @oup_20060721.destroy
-    @oup_20060728.destroy
-    @oup_20060825.destroy
-    get :new    
-    assert_equal ['oup_20060721', 'oup_20060728', 'oup_20060825'].sort, assigns(:folders).sort
-    assigns(:folders).each do |folder|
-      assert_tag :tag => 'option', :content => folder
-    end
-    site_count = Site.count
-    assert session['user'].admin?
-    post :new, :site => {:title => 'oup_20060721', :folder => assigns(:folders)[0], :description => 'test03_new'}
-    assert_not_nil assigns(:baseline_processes)
-    assert_not_nil assigns(:folders)
-    site = assigns(:site)
-    assert_not_nil site
-    assert_no_errors(site)
-    assert site.valid? 
-    assert_redirected_to :action => 'list'
-    assert_equal site_count + 1, Site.count    
-    assert_equal ::FLASH_RECORD_CREATED, flash['success']
-  end
-  
-  # Shows:
-  # 1. Only admins can create wikis
-  # 2. Admin can request form to create a new wiki
-  def test_new_wiki
-    @oup_20060721 = create_oup_20060721
-    # 1
-    session['user'] = @tony
-    get :new_wiki
-    assert_unot_admin_message
-    # 2
-    session['user'] = @andy 
-    assert @andy.admin?
-    get :new_wiki 
-    assert_not_nil assigns(:wiki)
-    assert_field 'wiki_folder' 
-    assert_tag :tag => 'textarea', :attributes => {:id => 'wiki_description', :name => 'wiki[description]'}
-    assert_field 'wiki_title'
-  end
-  
-  # Shows:
-  # 1. Admin can create a Wiki (note: the Wiki is empty after create)
-  def test_new_wiki_post
-    @emails.clear
-    # 1
-    get :new_wiki
-    session['user'] = @andy
-    @oup_20060721 = create_oup_20060721
-    post :new_wiki, :wiki => {:folder => 'openup', :title => 'OpenUP Wiki', :description => 'Wiki for OpenUP created in test05_new_wiki_post', :baseline_process => @oup_20060721}
-    assert_redirected_to :action => 'description'
-    assert SitesController::FLASH_WIKI_SITE_CREATED, flash['success']
-    wiki = assigns(:wiki)
-    assert_not_nil wiki
-    # 2
-  end
-  
-  # Shows
-  # 1. Ordinary users cannot do wikify now 
-  # 2. Admin can wikify content directly
-  def test_wikify_now
-    @emails.clear
-    get 'list'
-    # 1.
-    session['user'] = @tony
-    @oup_20060721 = create_oup_20060721
-    wiki = Wiki.new(:folder => 'openup', :title => 'OpenUP Wiki', :user_id => session['user'].id)
-    assert wiki.save
-    assert_equal 'Pending', wiki.status
-    update = Update.new(:wiki => wiki, :baseline_process => @oup_20060721, :user => session['user'])
-    assert update.save
-    get :update_now, :update_id => update.id
-    assert_unot_admin_message
-    # 2
-    session['user'] = @andy
-    post :update_now, :update_id => update.id 
-    assert_equal(4, @emails.size) 
-    assert_equal ["[EPF Wiki - Test Enviroment] SCHEDULED creation new Wiki OpenUP Wiki using Baseline Process oup_20060721",
- "[EPF Wiki - Test Enviroment] Autorisation Problem Detected",
- "[EPF Wiki - Test Enviroment] STARTED creating New Wiki OpenUP Wiki using Baseline Process oup_20060721",
- "[EPF Wiki - Test Enviroment] FINISHED creating new Wiki OpenUP Wiki using Baseline Process oup_20060721"], 
- [@emails[0].subject, @emails[1].subject, @emails[2].subject, @emails[3].subject]
-    assert_equal 'Ready', wiki.status
-    wiki.reload
-    assert_equal wiki.baseline_process, @oup_20060721
-  end
-  
-  # Shows
-  # 1. Admin requests creation of Wiki
-  # 2. Content is wikified using job_daily (an email is sent if the job fails)
-  def test_new_wiki_job_daily
-    # 1
-    get :new_wiki
-    session['user'] = @andy
-    #baseline_process = Site.find_by_title('openup0721')
-    #assert_not_nil baseline_process
-    @oup_20060721 = create_oup_20060721    
-    post :new_wiki, :wiki => {:folder => 'openup2', :title => 'OpenUP Wiki2', :description => 'Wiki for OpenUP created in tst06_new_wiki2'}
-    openupwiki2 = Site.find_by_folder('openup2')
-    assert_not_nil openupwiki2
-    assert_equal 'Pending', openupwiki2.status
-    # 2
-    @emails.clear
-    update = Update.new(:user => @andy, :baseline_process => @oup_20060721, :wiki => openupwiki2)
-    assert update.save
-    job_daily
-    openupwiki2.reload
-    assert_equal [], Update.find_todo
-    rep_cnt = 1 # daily
-    rep_cnt = 1 if Time.now.wday == 1 # weekly
-    rep_cnt += 1 if Time.now.day == 1 # monthly
-    assert_equal(3+rep_cnt, @emails.size) # scheduled, started, finished
-    assert_equal 'Ready', openupwiki2.status
-  end
-  
-  # Shows
-  # 1. Wikis can be updated from the 'description' page
-  # 2. Admin can schedule an update (create an update record) (ordinary user cannot)
-  # 3. Admin can cancel an update 
-  # 4. Admin can do update_now
-  def test_update_wiki
-    # 1
-    @oup_20060721 = create_oup_20060721
-    @oupwiki = create_oup_wiki(@oup_20060721)    
-    get :description, :id => @oupwiki.id
-    assert_redirected_to :controller => 'login'
-    session['user'] = @tony
-    get :description, :id => @oupwiki.id
-    BaselineProcess.find(:all).each do |bp|
-      assert_match "/sites/update/#{@oupwiki.id}?baseline_process_id=#{bp.id}", @response.body
-    end
-    # 2
-    session['user'] = @tony
-    post :update
-    assert_unot_admin_message
-    session['user'] =  @andy
-    cnt = Update.count
-    post :update, :id => @oupwiki.id, :baseline_process_id => @oup_20060721.id    
-    assert_equal 1+cnt, Update.count
-    assert_redirected_to :action => 'description', :id => @oupwiki.id
-    # 3
-    assert_equal 1, Update.find_todo.size
-    update = Update.find_todo[0]
-    session['user'] = @tony
-    post :update_cancel, :id => @oupwiki.id , :update_id => update.id
-    assert_unot_admin_message
-    session['user'] = @andy
-    post :update_cancel, :id => @oupwiki.id , :update_id => update.id
-    assert_equal cnt, Update.count
-    assert_equal 0, Update.find_todo.size
-    # 4
-    @emails.clear 
-    update = Update.new(:wiki => @oupwiki, :baseline_process => @oup_20060721, :user => @andy)
-    assert update.save
-    assert_equal(1, @emails.size) # scheduled 
-    session['user'] = @tony
-    post :update_now, :update_id => update.id
-    assert_unot_admin_message
-    session['user'] = @andy
-    @emails.clear    
-    post :update_now, :update_id => update.id
-    assert_equal SitesController::FLASH_WIKI_UPDATE_SUCCESS, flash['success']
-    assert_equal [], Update.find_todo    
-    assert_equal(2, @emails.size) # started, created
-  end
-
-  # Shows:
-  # 1. Cannot make a Wiki obsolete with a get request
-  # 2. Ordinary users cannot make a Wiki obsolete
-  # 3. Admin users can make a Wiki obsolete
-  def test_obsolete
-    wiki = create_templates
-    assert wiki.obsolete_on.nil?
-    # 1
-    session['user'] = @george
-    get :obsolete, :id => wiki.id
-    assert_illegal_get
-    # 2
-    session['user'] = @tony
-    get :obsolete, :id => wiki.id
-    assert_unot_admin_message
-    session['user'] = @andy
-    post :obsolete, :id => wiki.id
-    wiki.reload
-    assert !wiki.obsolete_on.nil?
-    assert_equal @andy.id, wiki.obsolete_by 
-  end
-  
-end
diff --git a/source/test/functional/uploads_controller_test.rb b/source/test/functional/uploads_controller_test.rb
deleted file mode 100644
index 639dde8..0000000
--- a/source/test/functional/uploads_controller_test.rb
+++ /dev/null
@@ -1,96 +0,0 @@
-require File.dirname(__FILE__) + '/../test_helper'
-require 'uploads_controller'
-
-#--######################################################################
-# Copyright (c) 2006 Logica
-# 
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# 
-# Onno van der Straaten:: initial implementation
-#++######################################################################
-# {Copyright (c) 2006 Logica}[link:files/COPYRIGHT.html]
-
-class UploadsController; def rescue_action(e) raise e end; end
-
-class UploadsControllerTest < Test::Unit::TestCase
-
-  fixtures :users
-  
-  def setup
-    logger.debug "Test Case: #{name}"  
-    @controller = UploadsController.new
-    @request    = ActionController::TestRequest.new
-    @response   = ActionController::TestResponse.new
-    @andy = users(:andy) # admin
-    @george = users(:george) # central admin
-    @tony = users(:tony) # user
-  end
-  
-  # Shows:
-  # 1. Logon
-  # 2. Logged in user can upload image
-  # 4. User cannot update upload of another user
-  # 5. Admin can update upload of another user
-  # 6. Admin cannot destroy upload of another user
-  # 7. User cannot destroy own upload
-  # 8. Cadmin can destroy upload of another user
-  def test_new
-    assert_equal 0, Upload.count
-    # 1
-    post :new
-    assert_redirected_to :controller => 'login'
-    # 2
-    session['user'] = @andy
-    post :new, :upload => {:upload_type => 'Image', :description => 'OpenUP PT image', :file => upload_file("#{ENV['EPFWIKI_ROOT_DIR']}test/functional/uploads_controller_test/openup_pt.jpg", 'image/jpeg')}
-    assert_redirected_to :action => 'list'
-    assert_equal 1, Upload.count
-    assert_not_nil assigns(:upload)
-    assert File.exists?(assigns(:upload).path)
-
-    # 4
-    get :index
-    session['user'] = @tony
-    upload = Upload.find(:first)
-    post :update, :id => upload.id, :upload => {:description => 'image'}
-    assert_equal ::FLASH_NOT_OWNER, flash['error']
-    upload.reload
-    assert_equal 'OpenUP PT image', upload.description
-    # 5
-    upload.user = @tony
-    assert upload.save
-    session['user'] = @andy
-    post :update, :id => upload.id, :upload => {:description => 'image'}
-    assert_equal nil, flash['error']
-    upload.reload
-    assert_equal 'image', upload.description
-    # 6
-    get :index
-    session['user'] = @andy
-    upload = Upload.find(:first)
-    assert session['user'] != upload.user
-    post :destroy, :id => upload
-    assert_equal LoginController::FLASH_UNOT_CADMIN, flash['error']
-    assert Upload.exists?(upload.id)
-    upload2 = Upload.new(:filename => upload.filename, :upload_type => upload.upload_type, 
-    :content_type => upload.content_type, :description => upload.description, 
-    :user_id => upload.user_id, :rel_path => upload.rel_path)
-    assert upload2.save
-    # 7
-    session['user'] = @tony
-    assert session['user'], upload.user
-    post :destroy, :id => upload
-    assert Upload.exists?(upload)
-    # 8 # TODO test this, currently we cannot test this because use of request.referer causes errors: "The error occurred while evaluating nil.[]"
-    #session['user'] = @george
-    #assert session['user'], upload2.user
-    #post :destroy, :id => upload2
-    #assert !Upload.exists?(upload2)
-    #assert_equal 0, Upload.count    
-  end
-  
-end
diff --git a/source/test/functional/uploads_controller_test/openup_pt.jpg b/source/test/functional/uploads_controller_test/openup_pt.jpg
deleted file mode 100644
index 97d76fb..0000000
--- a/source/test/functional/uploads_controller_test/openup_pt.jpg
+++ /dev/null
Binary files differ
diff --git a/source/test/functional/users_controller_test.rb b/source/test/functional/users_controller_test.rb
deleted file mode 100644
index 36e687f..0000000
--- a/source/test/functional/users_controller_test.rb
+++ /dev/null
@@ -1,241 +0,0 @@
-require File.dirname(__FILE__) + '/../test_helper'
-require 'users_controller'
-
-#--######################################################################
-# Copyright (c) 2006 Logica
-# 
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# 
-# Onno van der Straaten:: initial implementation
-#++######################################################################
-# {Copyright (c) 2006 Logica}[link:files/COPYRIGHT.html]
-
-class UsersController; def rescue_action(e) raise e end; end
-
-class UsersControllerTest < Test::Unit::TestCase
-  fixtures :users
-  
-  def setup
-    logger.debug "Test Case: #{name}"
-    @andy = users(:andy) # admin
-    @george = users(:george) #cadmin
-    @tony = users(:tony) #user
-    @cash = users(:cash) #user
-    @controller = UsersController.new
-    @request    = ActionController::TestRequest.new
-    @response   = ActionController::TestResponse.new
-    @emails = ActionMailer::Base::deliveries
-    @emails.clear        
-  end
-  
-  def test_list
-    get :list
-    assert_tologin
-    get :index
-    assert_tologin
-  end
-  
-  def test_list_cadmin
-    # get the central admin
-    get :list
-    session['user'] = @george
-    get :list
-    assert_not_nil assigns(:users)
-    assert_not_nil assigns(:admins)
-    assert_not_nil assigns(:cadmin)     
-  end
-  
-  def test_list_admin
-    get :index
-    session['user'] = @andy
-    get :list
-    assert_not_nil assigns(:users)
-    assert_not_nil assigns(:admins)
-    assert_not_nil assigns(:cadmin)     
-  end
-  
-  # Shows:
-  # 1. Only admins can request users list
-  # 2. User cannot access account details
-  def test_list_normaluser
-    # 1
-    get :list
-    session['user'] = @tony
-    get :list
-    assert_unot_admin_message
-    # 2
-    post :account, :id => 1
-    assert_equal session['user'], assigns(:user)
-    assert_equal LoginController::FLASH_UNOT_ADMIN, flash['notice']
-  end
-  
-  # Shows:
-  # 1. user can edit his details
-  # 2. user cannot edit another users details
-  # 3. admin cannot edit another users details
-  # 4. cadmin can edit another users details
-  def test_edit
-    # 1
-    get :index
-    session['user'] = @tony
-    saved_name = @tony.name
-    post :edit, :id => @tony.id, :user => {:name => 'test06_edit'}
-    assert_response :success
-    @tony.reload
-    assert_equal 'test06_edit', @tony.name
-    @tony.name = saved_name
-    @tony.save!
-    # 2
-    session['user'] = @cash
-    post :edit, :id => @tony.id, :user => {:name => 'test06_edit'}
-    assert_response :success
-    @tony.reload
-    assert_equal saved_name, @tony.name # unchanged
-    # 3
-    session['user'] = @andy
-    post :edit, :id => @tony.id, :user => {:name => 'test06_edit'}
-    assert_response :success
-    @tony.reload
-    assert_equal saved_name, @tony.name # unchanged
-    # 4
-    session['user'] = @george
-    post :edit, :id => @tony.id, :user => {:name => 'test06_edit'}
-    assert_response :success
-    @tony.reload
-    assert_equal 'test06_edit', @tony.name # changed
-    @tony.name = saved_name
-    @tony.save!
-  end
-  
-  def test_send_report
-    get :index
-    session['user'] = @cash
-    post    :send_report, :type => 'M'
-    assert_equal UsersController::FLASH_REPORT_SENT, flash['success']
-    assert_redirected_to :action => 'account', :id => @cash.id
-    assert_equal(1, @emails.size)
-    email = @emails.first
-    assert email.subject.index('Monthly')
-    assert_equal("cash.oshman@epf.eclipse.org", email.bcc[0])
-    assert_equal([ENV['EPFWIKI_REPLY_ADDRESS']], email.from)
-    post    :send_report, :type => 'D'
-    assert_equal UsersController::FLASH_REPORT_SENT, flash['success']
-    post    :send_report, :type => 'W'
-    assert_equal UsersController::FLASH_REPORT_SENT, flash['success']
-  end
-
-  # Show:
-  # 1. User can access details 
-  # 2. Cadmin is shown links 'list'
-  # 3. User with data (comments, pages, uploads)
-  def test_show
-    get :index
-    # 1
-    session['user'] = @tony
-    get :show, :id => @tony.id
-    assert_response :success
-    assert_template 'show'
-    assert_not_nil assigns(:user)
-    assert_not_nil assigns(:versions)
-    assert_not_nil assigns(:comments)
-    assert_not_nil assigns(:uploads)
-    assert_not_nil assigns(:pages)    
-    assert_equal @tony.id, assigns(:user).id
-    # 2
-    session['user'] = @george
-    get :show, :id => @tony.id
-    assert_equal @tony.id, assigns(:user).id # cadmin sees details of user
-    assert_tag :tag => 'a', :attributes => {:href => '/users/list'}    
-    assert_tag :tag => 'a', :attributes => {:href => '/sites/list'}        
-    # 3
-    create_templates
-    p = WikiPage.find(:first)
-    create_some_data(p)    
-    get :show, :id => @andy.id
-  end
-
-  def test_edit_user
-    get :list
-    session['user'] = @tony
-    post :edit, :id => session['user'].id, :user => { :name => 'Tony Renamed'}
-    assert_response :success
-    assert_template 'edit'    
-    assert_not_nil assigns(:user)
-    assert_equal User.find(assigns(:user).id).name, 'Tony Renamed' 
-  end
-  
-  # Shows:
-  # 1. George is central admin, Tony an ordinary user
-  # 2. list of users contains links to make other admins the cadmin, and links to make other users admins
-  # 3. George can make another Tony the central admin
-  # 4. George can make another user cadmin after making Tony the central admin (untill his session expires) 
-  # 5. Tony can make another user the cadmin after becoming central admin
-  # 6. This is all one transaction (we cannot end up with having no cadmin)
-  def test_cadmin
-    # 1
-    assert @george.cadmin?
-    assert @tony.user?
-    # 2
-    get :list    
-    session['user'] = @george
-    get :list
-    assert_response :success
-    assert_template 'list'
-    User.find_all_by_admin('Y').each do |user|
-      assert_tag :tag => 'a', :attributes => {:href => "/users/cadmin/#{user.id}"}     
-      assert_tag :tag => 'a', :attributes => {:href => "/users/admin/#{user.id}?admin=N"}           
-    end
-    User.find_all_by_admin('N').each do |user|
-      assert_tag :tag => 'a', :attributes => {:href => "/users/admin/#{user.id}?admin=Y"}     
-    end
-    # 3
-    assert_not_nil @george
-    assert_not_nil @tony
-    get :list
-    post :cadmin, :id => @tony.id
-    assert_redirected_to :action => 'list'
-    assert_equal '', assigns(:cadmin).errors.full_messages.join(", ")        
-    assert_equal '', assigns(:user).errors.full_messages.join(", ")
-    @george.reload
-    @tony.reload
-    assert !@george.cadmin?
-    assert @george.admin?
-    assert @tony.cadmin?
-    # 4
-    post :cadmin, :id => @tony.id
-    assert_unot_cadmin_message
-    # 5
-    session['user'] = @tony
-    post :cadmin, :id => @george.id
-    assert_redirected_to :action => 'list'
-    @george.reload
-    @tony.reload
-    assert @george.cadmin?
-    assert @george.admin?
-    assert !@tony.cadmin?
-    assert @tony.admin?
-    # 6
-    @george.name = nil # will cause save of this user to fail
-    User.cadmin(@george, @tony)
-    @george.reload
-    @tony.reload
-    assert @george.cadmin?
-    assert @george.admin?
-    assert !@tony.cadmin?
-    assert @tony.admin?
-    assert !@george.name.nil?
-  end
-
-  def test_account
-    # TODO implement test
-    #assert_tag :tag => 'a', :attributes => {:href => "/users/edit/#{@tony.id.to_s}"}
-    #assert_tag :tag => 'a', :attributes => {:href => '/login/change_password'}
-
-  end
-
-end
diff --git a/source/test/functional/versions_controller_test.rb b/source/test/functional/versions_controller_test.rb
deleted file mode 100644
index fb5e2f0..0000000
--- a/source/test/functional/versions_controller_test.rb
+++ /dev/null
@@ -1,97 +0,0 @@
-require File.dirname(__FILE__) + '/../test_helper'
-require 'versions_controller'
-require 'pathname'
-
-#--######################################################################
-# Copyright (c) 2006 Logica
-# 
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# 
-# Onno van der Straaten:: initial implementation
-#++######################################################################
-# {Copyright (c) 2006 Logica}[link:files/COPYRIGHT.html]
-
-class VersionsController; def rescue_action(e) raise e end; end
-
-class VersionsControllerTest < Test::Unit::TestCase
-
-  fixtures :users
-  
-  def setup
-    logger.debug "Test Case: #{name}"  
-    @controller = VersionsController.new
-    @request    = ActionController::TestRequest.new
-    @response   = ActionController::TestResponse.new
-    #@oup_20060721 = create_oup_20060721
-    #@oup_wiki = create_oup_wiki(@oup_20060721)
-    @andy = users(:andy) # admin
-    @george = users(:george) # central admin
-    @tony = users(:tony) # user
-    @admin = users(:admin)
-  end
-
-  def teardown
-    [ENV['EPFWIKI_SITES_PATH'], ENV['EPFWIKI_WIKIS_PATH']].each do |p|
-      FileUtils.rm_r(p) if File.exists?(p)
-      File.makedirs(p)
-    end
-  end
-  
-  # Shows
-  # 1. Login required
-  # 2. All users can access version details
-  # 3. Get diif of equal versions
-  # 4. Post diff of equal versions
-  # 5. Post diff of versions with differences
-    #show, diff, text, note
-  def test_show_and_diff
-    create_templates
-    p = WikiPage.find(:first)
-    create_some_data(p)
-    # 1
-    version = Version.find(:first)
-    assert_not_nil version
-    get :show, :id => version.id
-    assert_tologin
-    # 2
-    [@andy, @george, @tony].each do |user|
-      session['user'] = user
-      Version.find(:all).each do |v|  
-        get :show, :id => v.id
-        # 2
-        assert_response :success
-        assert_not_nil assigns(:version)
-      end
-    end
-    assert_equal 17, p.versions.size
-    v1 = p.versions[14]
-    v2 = p.versions[15]
-    # 3
-    get :diff, :id => v2.id
-    assert_response :success
-    assert_not_nil assigns(:version)
-    assert_equal v1, assigns(:version).source_version
-    assert_equal assigns(:versions), p.versions
-    assert_equal p, assigns(:page)
-    assert_equal p.site, assigns(:wiki)
-    # 4
-    post :diff, :version => {:id => v2.id, :version_id => v1.id}
-    assert_response :success
-    assert_equal assigns(:versions), p.versions
-    assert_equal p, assigns(:page)
-    assert_equal p.site, assigns(:wiki)
-    # 5
-    v2.html = v2.html.gsub('</body>','a change</body>')      
-    post :diff, :version => {:id => v2.id, :version_id => v1.id}
-    assert_response :success
-    assert_equal assigns(:versions), p.versions
-    assert_equal p, assigns(:page)
-    assert_equal p.site, assigns(:wiki)
-  end
-  
-end
\ No newline at end of file
diff --git a/source/test/functional/versions_controller_test/version1.txt b/source/test/functional/versions_controller_test/version1.txt
deleted file mode 100644
index 230c6b3..0000000
--- a/source/test/functional/versions_controller_test/version1.txt
+++ /dev/null
@@ -1,35 +0,0 @@
-Concept: Artifact[][1]
-![][2]
-
-![][3]
-Artifact is a Work Product that provides a description and definition for tangible, non-trivial work products.
-
-Main Description
-
-Artifacts are tangible well-defined Work Products consumed, produced, or modified by Tasks.  Artifacts may be composed of other Artifacts. For example, a model Artifact can be composed of model elements, which are also Artifacts. They may serve as a basis for defining Reusable Assets.  Roles use Artifacts to perform Tasks and produce Artifacts in the course of performing Tasks. 
-
-Artifacts are the responsibility of a single Role, making responsibility easy to identify and understand, and promoting the idea that every piece of information produced in the method requires the appropriate set of skills. Even though one Role might "own" a specific type of Artifact, other Roles can still use the Artifacts, and perhaps even update them if the Role has been given permission to do so. 
-
-**Artifacts are generally _not_ documents**. Many methods have an excessive focus on documents, and in particular on _paper documentation_. The most efficient and pragmatic approach to managing project Artifacts is to maintain them _within_ the appropriate tool used to create and manage them. When necessary, one may generate documents (snapshots) from these tools, on a just-in-time basis. 
-
-Examples Artifacts: 
-
-  * A use case specification stored in a word processor tool 
-  * A design model stored in a visual modeling tool. 
-  * A project plan stored in a project planning tool. 
-  * A defect stored in a change requests tools 
-  * A project requirements database in a requirements management tool. 
-
-Note also that formats such as on **whiteboards** or **flip charts** can be used to capture pictorial information such as UML diagrams, tabular information such as short lists of status information or even textual information such as short vision statements. These formats work well for smaller, collocated teams where all team members have ready access to these resources. 
-
-However, there are still Artifacts which either have to be or are best suited to being plain text documents, as in the case of external input to the project, or in some cases where it is simply the best means of presenting descriptive information. Where possible, teams should consider using collaborative **Work Group** tools, such as WikiWiki webs or Groove to capture textual documentation electronically, thus simplifying ongoing content and version management. This is especially of importance where historic records must be maintained for purposes such as fulfilling audit requirements. For any nontrivial development effort, especially where large development teams are involved, Work Products **are** **most likely to be subject to version control and configuration management.** This is sometimes only achieved by versioning the container Work Product, when it is not possible to do it for the elementary, contained Work Products. For example, in software development, you may control the versions of a whole design model, or design package, and not the individual classes they contain. 
-
-Copyright (c) 1987, 2006 IBM Corp. and others. All Rights Reserved.  
-This program and the accompanying materials are made available under the  
-[Eclipse Public License v1.0][4] which accompanies this distribution. 
-
-   [1]: ./../../../index.htm
-   [2]: ./../../../images/shim.gif
-   [3]: ./../../../images/concept.gif
-   [4]: http://www.eclipse.org/org/documents/epl-v10.php
-
diff --git a/source/test/integration/creating_sites_and_wikis_test.rb b/source/test/integration/creating_sites_and_wikis_test.rb
deleted file mode 100644
index d60676d..0000000
--- a/source/test/integration/creating_sites_and_wikis_test.rb
+++ /dev/null
@@ -1,223 +0,0 @@
-require "#{File.dirname(__FILE__)}/../test_helper"
-#--
-# Some usefull links:
-# http://api.rubyonrails.org/classes/ActionController/IntegrationTest.html
-# http://blog.finalist.com/2007/02/12/test-driven-development-met-ruby-on-rails/
-# http://dev.rubyonrails.org/ticket/4635
-# http://weblog.jamisbuck.org/2006/3/9/integration-testing-in-rails-1-1
-#++
-#  
-#--######################################################################
-# Copyright (c) 2006 Logica
-# 
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# 
-# Onno van der Straaten:: initial implementation
-#++######################################################################
-# {Copyright (c) 2006 Logica}[link:files/COPYRIGHT.html]
-
-class CreatingSitesAndWikisTest < ActionController::IntegrationTest
-  
-  fixtures :users
-  
-  def setup
-    logger.debug "Test Case: #{name}"  
-    @wiki = create_templates
-    @wiki.reload
-    @bp = @wiki.baseline_process
-    @george = users(:george) # central admin
-    @tony = users(:tony) # user
-  end
-  
-  def teardown
-    [ENV['EPFWIKI_SITES_PATH'], ENV['EPFWIKI_WIKIS_PATH']].each do |p|
-      FileUtils.rm_r(p) if File.exists?(p)
-      File.makedirs(p)
-    end
-  end
-  
-  # Shows:
-  # 1. user makes a change (checkout, checkin) (about_base_concepts)
-  # 2. user makes a change (checkout, checkin) (any_role) and marks versions done
-  # 3. user creates a checkout and saves a change (determine_architectural_feasibility)
-  # 4. user create a checkout and saves a change (requirements)
-  # 5. openup is updated to "openup0728"
-  # 6. changes to "about_page_concepts" are still there, 
-  #     the page was not harvested (there are version marked 'todo'
-  # 7. changes to any_role are gone, the page was harvested
-  # 8. changes to feasibility are gone, but they remain in checked-out version, of course
-  # 9. changes to requirements are gone, but they remain in checked-out version, of course
-  # 10. user checks in feasibility
-  # 11. undo of checkout requirements, changes are lost, there are no unharvested versions
-  # 12. undo of page with unharvested changes of another baseline (update to "openup0825"), feasibility
-  # 13. checkout of "about_page_concepts" creates version 1
-  # TODO http://blog.finalist.com/2007/02/12/test-driven-development-met-ruby-on-rails/
-  
-  def test_create_site
-    get '/'
-    get 'portal/home'
-    assert_response :success
-    assert_no_errors
-    @tony.confirmed_on = Time.now
-    @tony.password = 'Tony Clifton'
-    @tony.save!
-    user = login(@tony)
-    # 1
-    @page1 = WikiPage.find_by_presentation_name('Toolmentor Template')
-    user.post 'pages/checkout', :version => {:version_id => @page1.current_version.id, :note => 'Changing toolmentor template'}
-    user.assert_redirected_to :action => 'edit', :checkout_id => @page1.checkout.id
-    assert_not_nil @page1.checkout
-    html = @page1.html
-    assert_not_nil html
-    html = html.gsub('type of guidance', 'novel, novel, novel, aspects')
-    user.post 'pages/checkin', :checkout_id => @page1.checkout.id, :html => html
-    #assert_equal PagesController::FLASH_CHECKIN_SUCCESS, user.flash['success'] # TODO can't test this because we use flash.now, this only works without 'now'
-    assert_equal 1, @page1.current_version.version
-    assert_nil @page1.checkout
-    assert @page1.html.include?('novel, novel, novel, aspects')
-    # 2
-    page2 = WikiPage.find_by_presentation_name('Checklist Template')
-    user.post 'pages/checkout', :version => {:version_id => page2.current_version.id, :note => 'Changing checklist template'}
-    user.assert_redirected_to :action => 'edit', :checkout_id => page2.checkout.id
-    assert_equal 0, page2.checkout.version.source_version.version
-    html = page2.html
-    assert_not_nil html
-    html = html.gsub('completed or verified', 'by any, any, any one')
-    user.post 'pages/checkin', :checkout_id => page2.checkout.id, :html => html
-    #assert_equal PagesController::FLASH_CHECKIN_SUCCESS, user.flash['success'] can't test for flash now
-    assert_equal 2, page2.versions.size
-    assert_nil page2.checkout
-    page2.versions.each do |v|
-      if v.version == 0
-        assert_equal 'Y', v.done 
-      else
-        assert_equal 'N', v.done
-        v.done = 'Y'
-        assert v.save       
-      end
-    end
-    # 3
-    page3 = WikiPage.find_by_presentation_name('Practice Template')
-    user.post 'pages/checkout', :version => {:version_id => page3.current_version.id, :note => 'Changing feasibility'}
-    user.assert_redirected_to :action => 'edit', :checkout_id => page3.checkout.id    
-    assert_equal 0, page3.checkout.version.source_version.version
-    html = page3.html
-    assert_not_nil html
-    html = html.gsub('a proven way or strategy of doing work', 'Confirm, confirm, confirm that the project')
-    user.post 'pages/save', :checkout_id => page3.checkout.id, :html => html
-    assert_not_nil page3.checkout
-    # 4
-    page4 = WikiPage.find_by_presentation_name('Report Template')
-    user.post 'pages/checkout', :version => {:version_id => page4.current_version.id, :note => 'Changing requirements'}
-    user.assert_redirected_to :action => 'edit', :checkout_id => page4.checkout.id   
-    assert_equal 0, page4.checkout.version.source_version.version
-    html = page4.html
-    assert_not_nil html
-    html = html.gsub('predefined template of a result', 'list, list, list of work')
-    user.post 'pages/save', :checkout_id => page4.checkout.id, :html => html
-    assert_not_nil page4.checkout
-    assert_equal 1, page4.versions.size # NOTE checkout.version is not counted by page4.versions
-    # 5
-    # TODO test for sending of email
-    cv_before = @page1.current_version
-    update = Update.new(:wiki => @wiki, :user => @george, :baseline_process => @bp)
-    assert update.save
-    update.do_update
-    # 6
-    #assert @page1.html.index('novel, novel, novel, aspects') todo activate
-    cv_after = @page1.current_version
-    assert_equal cv_before, cv_after # same version
-    assert cv_after.current # marked current
-    # 7
-    assert !page2.html.index('by any, any, any one')
-    # 8
-    assert !page3.html.index('Confirm, confirm, confirm that the project')
-    assert page3.checkout.version.html.index('Confirm, confirm, confirm that the project')
-    # 9
-    assert !page4.html.index('list, list, list of work')
-    assert page4.checkout.version.html.index('list, list, list of work')
-    # 10
-    co = page3.checkout
-    user.post 'pages/checkin', :checkout_id => co.id # is checked in on baseline OpenUP-Basic_published_20060728test!
-    page3.reload
-    assert_nil page3.checkout
-    assert page3.html.index('Confirm, confirm, confirm that the project')
-    page3.reload
-    v0, v1, v2 = page3.versions[0], page3.versions[1], page3.versions[2]
-    assert_equal ['BaselineProcessVersion', 'BaselineProcessVersion', 'UserVersion'],[v0.class.name, v1.class.name, v2.class.name]
-    assert_equal [[0,@bp.title],[1,@bp.title], [2,nil]],
-    [  [v0.version, v0.baseline_process.title],
-    [v1.version, v1.baseline_process.title],
-    [v2.version, v2.baseline_process_id]]
-    assert_equal 3, page3.versions.size # previous 2, current 2 versions 
-    version = page3.current_version
-    # 11
-    checkout = page4.checkout
-    user.post 'pages/undocheckout', :checkout_id => checkout.id
-    page4.reload
-    assert_nil page4.checkout
-    version = page4.current_version
-    assert_equal 1, version.version
-    assert !version.current 
-    # 12
-    # create checkout
-    user.post 'pages/checkout',:version => {:version_id => page3.current_version.id, :note => 'Changing stuff'}
-    user.assert_redirected_to :action => 'edit', :checkout_id => page3.checkout.id
-    assert_equal 2, page3.checkout.version.source_version.version 
-    v = page3.current_version
-    lv = page3.last_version
-    assert_equal 'N', v.done # version is not harvested
-    assert !v.current # also not current, it doesn't need to be, because there is a checkout
-    assert v = lv
-    assert_equal 2, lv.version
-    assert_equal 2, v.version
-    assert_equal v.id, page3.checkout.version.source_version.id
-    html = page3.html
-    assert_not_nil html
-    assert html.index('Confirm, confirm, confirm that')
-    # update wiki
-    update = Update.new(:wiki => @wiki, :user => @george, :baseline_process => @bp)
-    assert update.save
-    update.do_update
-    version = page3.current_version
-    # undo checkout
-    user.post 'pages/undocheckout', :checkout_id => page3.checkout.id
-    version.reload
-    assert_equal version, page3.current_version
-    # 13
-    version = @page1.current_version
-    assert version.current # explicitly set version as there were unharvested versions during update
-    assert_not_nil @page1.current_version
-    user.post 'pages/checkout',:version => {:version_id => @page1.current_version.id, :note => 'Changing stuff'}
-    version.reload
-    assert version.current # version remains current
-    checkout = @page1.checkout
-    assert_not_nil checkout
-    assert_equal version, checkout.version.source_version # current version was selected as the source version    
-  end
-  
-  #######
-  private
-  #######
-  
-  module TestingDSL
-    # TODO cleanup    
-  end
-  
-  def login(who)
-    logger.debug("Login: #{who.inspect}")
-    open_session do |sess|
-      logger.debug("Opening session")
-      sess.extend(TestingDSL)
-      sess.post "login/login", :user => {:email => who.email, :password => who.password }
-      assert_not_nil sess.assigns(:logged_in_user)
-    end
-  end
-  
-end
-
diff --git a/source/test/integration/setup_and_sign_in_test.rb b/source/test/integration/setup_and_sign_in_test.rb
deleted file mode 100644
index 5e8fb12..0000000
--- a/source/test/integration/setup_and_sign_in_test.rb
+++ /dev/null
@@ -1,229 +0,0 @@
-require "#{File.dirname(__FILE__)}/../test_helper"
-
-#--######################################################################
-# Copyright (c) 2006 Logica
-# 
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# 
-# Onno van der Straaten:: initial implementation
-#++######################################################################
-# {Copyright (c) 2006 Logica}[link:files/COPYRIGHT.html]
-
-class SetupAndSignInTest < ActionController::IntegrationTest
-  
-  fixtures :users
-  
-  #	If there are no users: 
-  # * all request are redirected to the new page
-  # * the new page can be used to create the central admin account
-  # After the first user is created (User.count > 0) it is not possible to create the central admin user
-  def	test_signup_central_admin
-    User.destroy_all
-    assert_equal 0, User.count
-    get	"login/login"
-    assert_redirected_to :action => 'new_cadmin'
-    # fields cannot be null
-    post "login/new_cadmin"
-    assert_response :success
-    assert_errors
-    assert_equal 0, User.count
-    # no password confirmation
-    post "login/new_cadmin", :user => {:name => "cadmin", :email => "cadmin@logicacmg.com", :password => "cadmin"}
-    assert_response :success 
-    #assert nil, @response.body
-    assert_equal "Password confirmation can't be blank",assigns(:user).errors.full_messages.join(', ') 
-    assert_equal 0, User.count
-    assert_errors
-    # passwords don't match
-    post "login/new_cadmin", :user => {:name => "cadmin", :email => "cadmin@logicacmg.com", :password => "cadmin", :password_confirmation => ""}
-    assert_equal "Password confirmation can't be blank, Password doesn't match confirmation",assigns(:user).errors.full_messages.join(', ') 
-    assert_response :success #302?
-    assert_equal 0, User.count
-    assert_errors
-    # passwords should be present
-    post "login/new_cadmin", :user => {:name => "cadmin", :email => "cadmin@logicacmg.com"}
-    assert_equal "Password confirmation can't be blank, Password can't be blank",assigns(:user).errors.full_messages.join(', ') 
-    assert_equal 0, User.count    
-    assert_response :success
-    assert_errors
-    post "login/new_cadmin", :user => {:name => "cadmin", :email => "cadmin@logicacmg.com", :password => "cadmin", :password_confirmation => "cadmin"}    
-    assert_equal "",assigns(:user).errors.full_messages.join(', ') 
-    assert_equal 1, User.count    
-    cadmin = User.find_central_admin
-    assert_not_nil cadmin
-    assert_redirected_to :action => 'login' 
-    post "login/new_cadmin", :user => {:name => "cadmin", :email => "cadmin@logicacmg.com", :password => "cadmin", :password_confirmation => "cadmin"}    
-    assert_equal LoginController::FLASH_CENTRAL_ADMIN_ALREADY_CREATED, flash['error']    
-    assert_equal 1, User.count    
-    assert_redirected_to :action => 'login'
-  end
-  
-  # if ENV['EPFWIKI_DOMAINS'] is set sign-up is restricted to those domains
-  def	test_sign_up
-    @emails = ActionMailer::Base::deliveries
-    @emails.clear
-    user_count = User.count
-    # 1 . sign with domain restriction
-    get "login/sign_up"
-    assert_field("user_email")
-    assert_field("user_name")
-    assert_field("user_password")
-    assert_field("user_password_confirmation")    
-    assert_tag :tag => "select", :attributes => {:name => "user[email_extension]"}    
-    @html_document = nil # workaround for bug in assert_tag used in assert_errors   
-    post "login/sign_up", :user => {:name => "user1", :email => "user1", :email_extension => "@somedomain.nl", :password => 'mypassword', :password_confirmation => 'mypassword'} # , :i_agree_to_the_terms_of_use => '1'
-    assert_errors
-#    assert_tag :tag => "div", :attributes => { :class => "fieldWithErrors" }
-    assert_response :success
-    assert_equal user_count, User.count
-    user = assigns(:user)
-    assert_equal "Email domain not valid",user.errors.full_messages.join(', ') 
-    # this domain is allowed, the user is created
-    post	"login/sign_up", :user => {:name => "user1", :email=>"user1", :email_extension => "@epf.eclipse.org", :password => 'mypassword', :password_confirmation => 'mypassword'} # , :i_agree_to_the_terms_of_use => '1'
-    user = assigns(:user)
-    assert_no_errors(user)
-    assert_redirected_to :action => 'login'
-    assert_equal user_count + 1 , User.count 
-    assert_equal 1, @emails.size
-    email = @emails.first
-    assert_equal("[#{ENV['EPFWIKI_APP_NAME']}] Welcome", email.subject)
-    assert_equal("user1@epf.eclipse.org", email.to[0])
-    assert_equal([ENV['EPFWIKI_REPLY_ADDRESS']], email.from)
-    assert_redirected_to :action => 'login'
-    assert_equal LoginController::FLASH_PW_CONFIRMATION_EMAIL_SENT, flash['success']
-    # cannot sign up with already taken name, email
-    @html_document = nil
-    post	"login/sign_up", :user => {:name => "user1", :email => "user1", :email_extension => "@epf.eclipse.org", :password => 'mypassword', :password_confirmation => 'mypassword'} # , :i_agree_to_the_terms_of_use => '1'
-    assert_equal "Name has already been taken, Email has already been taken",assigns(:user).errors.full_messages.join(', ') 
-    # sign up without domain restriction
-    ENV['EPFWIKI_DOMAINS'] = nil    
-    get "login/sign_up"
-    assert_field("user_email")
-    assert_field("user_name")
-    assert_field("user_password")
-    assert_field("user_password_confirmation")    
-    assert_no_tag :tag => "select", :attributes => {:name => "email_extension"}    
-    user_count = User.count
-    @html_document = nil
-    post "login/sign_up", :user => {:name => "user3", :email => "user2@xyz.com", :password => 'mypassword', :password_confirmation => 'mypassword'} # , :i_agree_to_the_terms_of_use => '1'
-    assert_no_errors(assigns(:user))
-    assert_equal user_count + 1, User.count 
-    assert_redirected_to :controller => 'login', :action => 'login'
-    #assert_equal "Name has already been taken, Email has already been taken",assigns(:user).errors.full_messages.join(', ') 
-    @html_document = nil
-    get "login/sign_up"
-    assert_field("user_email")
-    assert_field("user_name")
-    assert_field("user_password")
-    assert_field("user_password_confirmation")    
-    assert_no_tag :tag => "select", :attributes => {:name => "email_extension"}        
-    user_count = User.count
-    # user exists
-    @html_document = nil
-    post "login/sign_up", :user => {:name => "user2", :email => "user2@xyz.com"} # , :i_agree_to_the_terms_of_use => '1'
-    assert_equal "Name has already been taken, Password confirmation can't be blank, Password can't be blank, Email has already been taken",assigns(:user).errors.full_messages.join(', ') 
-    assert_equal user_count, User.count 
-    assert_errors
-    # creating user3
-    @html_document = nil
-    post "login/sign_up", :user => {:name => "user4", :email => "user4@xyz.com", :password => 'user4', :password_confirmation => 'user4'} # , :i_agree_to_the_terms_of_use => '1'
-    assert_no_errors(assigns(:user))
-    assert_equal LoginController::FLASH_PW_CONFIRMATION_EMAIL_SENT,  flash['success']   
-    assert_equal "",assigns(:user).errors.full_messages.join(', ') 
-    assert_equal user_count + 1, User.count 
-    assert_redirected_to :action => 'login'
-    assert_equal Digest::SHA1.hexdigest('user4'), assigns(:user).hashed_password
-    get "login/login" 
-    assert_response :success
-    # assert_field("user_email")# TODO Rails bug?
-    # assert_field("user_password")    # TODO Rails bug?
-    # user3 cannot sign-in, it needs to be confirmed
-    user3 = User.find_by_name('user4')
-    post "login/login" , :user => {:email => 'user4@epf.org', :password => 'user3'}
-    assert_equal LoginController::FLASH_INVALID_PW, flash['notice']
-    # cannot confirm with wrong token 
-    # ? log reports a RunTimeError but then the assert says there is no runtime error! assert_raise(RuntimeError){ get "login/confirm_account", :id => user3.id, :tk => "anystring"}
-    get "login/confirm_account", :id => user3.id, :tk => "anystring"
-    user3 = User.find_by_name('user4')
-    assert_equal nil, user3.confirmed_on
-    # can confirm with right token
-    get "login/confirm_account", :id => user3.id, :tk => Digest::SHA1.hexdigest(user3.hashed_password)
-    assert_equal LoginController::FLASH_PASSWORD_ACTIVATED, flash['success']
-    assert_not_nil assigns(:user).confirmed_on
-    # user can now logon
-    # user can sign in and check that they want to be remembered
-    post "login/login" , :user => {:email => 'user4@xyz.com', :password => 'user4', :remember_me => 0}
-    assert_equal User.find_by_name("user4"), session['user']
-    assert_not_nil cookies
-    # TODO we can't use cookies[:epfwiki_id] anymore?
-    assert_equal cookies["epfwiki_id"], session['user'].id.to_s 
-    # automatically sign-in for remembered users
-    # redirected to user details or requested page (not tested)
-    get "login/login"
-    assert_redirected_to :controller => "users", :action => "account"
-  end
-
-  # Shows 
-  # 1. new sign up user5 we can logon
-  # 2. user can be remembered
-  # 3. a cookie with wrong id is deleted and the user is prompted to logon again
-  #     Note: this can happen when a user uses multiple EPF Wiki sites
-   def test_cookies
-    @user5 = User.new(:name => 'user5', :email=>'user5@epf.eclipse.org', :password => 'mypassword', :password_confirmation => 'mypassword')
-    # 1
-    assert_not_nil User.find_central_admin
-    post 'login/sign_up', :user => {:name => @user5.name, :email => @user5.email, :password => @user5.password, :password_confirmation => @user5.password_confirmation} # , :i_agree_to_the_terms_of_use => '1'
-    assert_not_nil assigns(:user)
-    assert_no_errors(assigns(:user))
-    assert_redirected_to :action => 'login'
-    @user5 = assigns(:user)
-    @user5.id = User.find_by_name(@user5.name).id     # Note: we don't reload @user5 because we loose the password
-    @user5.hashed_password = User.find(@user5).hashed_password
-    assert_equal LoginController::FLASH_PW_CONFIRMATION_EMAIL_SENT, flash['success']
-    get "login/confirm_account", :id => @user5.id, :tk => Digest::SHA1.hexdigest(@user5.hashed_password)    
-    post 'login/login', :user => {:email => @user5.email, :password => @user5.password}
-    assert_not_nil session['user']
-    assert_nil cookies[:epfwiki_id]
-    session['user'] = nil
-    # 2
-    post 'login/login', :user => {:email => @user5.email, :password => @user5.password, :remember_me => "0"}
-    assert_not_nil assigns(:user)
-    assert_not_nil session['user']
-
-    logger.info("Cookies: #{cookies.inspect}")    
-    
-    assert_not_nil cookies['epfwiki_id'] 
-    # cookies[:epfwiki_id] doesn't work either
-    # Testing cookies with functional tests is hard work but here is not easy either
-    # We also cannot use symbols, and values are converted to strings
-    assert_equal cookies['epfwiki_id'],session['user'].id.to_s
-
-    session['user'] = nil
-    get 'login/login'
-    assert_not_nil assigns(:user)
-    assert_not_nil session['user']
-    # 3 
-    session['user'] = nil
-    assert_not_nil cookies['epfwiki_id']    
-    assert_equal cookies['epfwiki_id'], @user5.id.to_s
-    cookies['epfwiki_id'] = 123456 # cookie with a non-existing id
-    get 'login/login'
-    assert_response :success
-    assert_nil session['user']
-    assert cookies['epfwiki_id'].blank?
-    # 4
-    cookies[:epfwiki_id] = @user5.id
-    cookies[:epfwiki_token] = 'xyz'
-    get 'login/login'
-    assert_response :success 
-    assert_nil session['user']
-    assert cookies['epfwiki_id'].blank?
-    @user5.destroy
-  end
-  
-end
diff --git a/source/test/test_helper.rb b/source/test/test_helper.rb
deleted file mode 100644
index 4c9ca56..0000000
--- a/source/test/test_helper.rb
+++ /dev/null
@@ -1,194 +0,0 @@
-ENV["RAILS_ENV"] = "test"
-require File.expand_path(File.dirname(__FILE__) + "/../config/environment")
-require 'test_help'
-require 'feed_validator/assertions'
-require 'ftools'
-
-#--######################################################################
-# Copyright (c) 2006 Logica
-# 
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# 
-# Onno van der Straaten:: initial implementation
-#++######################################################################
-# {Copyright (c) 2006 Logica}[link:files/COPYRIGHT.html]
-
-module Test::Unit::Assertions
-  def assert_block(msg="") 
-    _wrap_assertion do
-      if (! yield)
-        logger.debug("Failure: #{msg}")
-        raise Test::Unit::AssertionFailedError.new(msg.to_s)
-      end
-    end
-  end
-end
-
-class ActionController::Integration::Session
-  def logger
-    RAILS_DEFAULT_LOGGER
-  end
-end
-
-class Test::Unit::TestCase
-  # Turn off transactional fixtures if you're working with MyISAM tables in MySQL
-  self.use_transactional_fixtures = true
-  
-  # Instantiated fixtures are slow, but give you @david where you otherwise would need people(:david)
-  self.use_instantiated_fixtures  = false
-  
-  # Add more helper methods to be used by all tests here...
-  def logger
-    RAILS_DEFAULT_LOGGER
-  end
-  
-  def login(who)
-    logger.debug("Login: #{who.inspect}")
-    open_session do |sess|
-      logger.debug("Opening session")
-      sess.post "login/login", :user => {:email => who.email, :password => who.password }
-      assert_not_nil sess.assigns(:logged_in_user)
-    end
-  end
-  
-  # Method #create_some_data creates some test records for a page (Comment, Checkout, Upload, New Page)
-  def create_some_data(p, u = @andy)
-    for i in 0..15
-      c= Comment.new(:text => "Text of comment #{i} by user tony", :user => u, :version => p.current_version, :page => p, :site => p.site)
-      assert c.save
-      co = Checkout.new(:user => u, :page => p, :site => p.site, :note => "Checkout #{i} by Andy")
-      assert co.save
-      co.checkin(u)
-      upl = Upload.new(:filename => 'filename.html', :upload_type => 'Image', 
-        :content_type => 'Content type', :description => 'Description of upload', 
-        :user_id => u.id, :rel_path => 'x/y/z.html')
-      assert upl.save
-      new_page2, new_co2 = WikiPage.new_using_template(:presentation_name => 'New Page Using Another Page as a Template', :source_version => p.current_version, :user => u, :site => p.site)  
-      assert_no_errors(new_page2)
-      assert_no_errors(new_co2)
-      new_co2.checkin(u)
-    end
-  end
-  
-  def assert_field(name)
-    assert_tag :tag => "input", :attributes => {:id => name}
-  end
-  
-  def assert_no_field(name)
-    assert_no_tag :tag => "input", :attributes => {:id => name}
-  end
-  
-  def assert_wiki_menu(wiki, page, html, action)
-    result_expected = []
-    result_expected << ["", '/' + wiki.rel_path + '/' + page.rel_path, "View"]
-    result_expected << ["", "/#{wiki.site_folder}/#{page.id}/discussion", "Discussion"]
-    result_expected << ["", "/#{wiki.site_folder}/#{page.id}/edit", "Edit"]
-    result_expected << ["", "/#{wiki.site_folder}/#{page.id}/new", "New"]
-    result_expected << ["", "/#{wiki.site_folder}/#{page.id}/info", "Info"]
-    result_expected << ["", "/", "Home"]
-    result_expected.each do |r|
-      r[0] = " class=\"current\"" if r[2] == action
-    end
-    result = html.scan(/<a href="(.*?)".*?<span>(.*?)<\/span>/)    
-    assert result_expected, result
-    if action == 'edit'
-      # TODO implement functional test for confirm message
-    end
-  end
-  
-  def assert_errors(object = nil)
-    if object
-      object.errors.full_messages.each do |message|
-        assert_tag :content => message
-      end
-    else
-      assert_tag error_message_field      
-    end
-  end
-  
-  def assert_no_errors(object = nil)
-    if object
-      object.errors.full_messages.each do |message|
-        assert_no_tag :content => message 
-      end
-    else
-      assert_no_tag error_message_field
-    end
-  end
-  
-  def assert_pattern(pat, html, result)
-    html =~ pat
-    assert_equal result, $&
-  end
-  
-  def error_message_field
-    {:tag => 'div', :attributes => { :class => 'errorExplanation', :id => 'errorExplanation' }}
-  end
-  
-  def assert_save(object)
-    if !object.save
-      assert_equal '', object.errors.full_messages.join(", ")      
-    end
-  end
-  
-  def assert_enhanced_file(path)
-    html = IO.readlines(path).join
-    assert [true, true, true], [html.include?("<!-- epfwiki head start -->"), html.include?("onload"), html.include?("<!-- epfwiki head end -->")]
-  end 
-  
-  def assert_version_file(path)
-    html = IO.readlines(path).join
-    logger.debug('html: ' + html)
-    assert_equal [path, false,true, true], [path, html.include?('<!-- epfwiki head start -->'), html.include?('<body>'), html.include?("<div id=\"treebrowser_tag_placeholder\">")]
-  end
-  
-  def assert_tologin
-    #assert_equal  ::MSG_LOGIN, flash['notice']
-    assert_equal @request.request_uri, session["return_to"]
-    assert_redirected_to :controller => 'login'
-  end
-  def assert_unot_admin_message
-    assert_equal LoginController::FLASH_UNOT_ADMIN, flash['error']
-    assert_redirected_to :controller => "other", :action => "error"
-  end
-  def assert_unot_cadmin_message
-    assert_equal LoginController::FLASH_UNOT_CADMIN, flash['error']
-    assert_redirected_to :controller => "other", :action => "error"
-  end
-  
-  def assert_illegal_get
-    assert_redirected_to :controller => 'other', :action => 'error'
-    assert ::FLASH_USE_POST_NOT_GET, flash['error']
-  end
- 
-  def upload_file(path, content_type="application/octet-stream")
-    file = Tempfile.new(File.basename(path))
-    FileUtils.copy_file(path, file.path)
-    (class << file; self; end;).class_eval do
-      alias local_path path
-      define_method(:original_filename) { File.basename(path)}
-      define_method(:content_type) { content_type }
-    end
-    return file
-  end
-  
-  def copyright_files(path)
-    paths = Array.new
-     (Dir.entries(path) - [".", ".."]).each do |entry| 
-      new_path = File.expand_path(entry, path)
-      if FileTest.directory?(new_path)   
-        paths = paths + copyright_files(new_path)
-      else
-        if entry =~ /\.rb\z/i
-          paths << new_path 
-        end
-      end
-    end
-    return paths
-  end
-end
\ No newline at end of file
diff --git a/source/test/unit/checkout_test.rb b/source/test/unit/checkout_test.rb
deleted file mode 100644
index ca6573f..0000000
--- a/source/test/unit/checkout_test.rb
+++ /dev/null
@@ -1,187 +0,0 @@
-require File.dirname(__FILE__) + '/../test_helper'
-
-#--######################################################################
-# Copyright (c) 2006 Logica
-# 
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# 
-# Onno van der Straaten:: initial implementation
-#++######################################################################
-# {Copyright (c) 2006 Logica}[link:files/COPYRIGHT.html]
-
-class CheckoutTest < Test::Unit::TestCase
-  fixtures :users
-  
-  def setup
-    logger.debug "Test Case: #{name}" 
-    @oup_20060721 = create_oup_20060721
-    @oup_wiki = create_oup_wiki(@oup_20060721)
-    @andy = users(:andy)
-    @george = users(:george)
-    @tony = users(:tony)
-    @cash = users(:cash)    
-  end
-  
-  # Shows:
-  # 1. we cannot check out a page of a baseline process
-  # 2. we can check out a page by supplying the user, page and site
-  # 3. we cannot check out the same page twice
-  # 4. we can undo a checkout
-  # TODO 5. we cannot checkout a page in a site that has not been wikified yet
-  # TODO 6. we can supply a note with a checkout
-  # TODO 7. checkout removes 
-  def tst01_new
-    logger.debug('1 - we cannot check out a page of a baseline process')
-    assert_equal 617, @oup_20060721.pages.count 
-    page = WikiPage.find_by_filename('requirements,_allMQMWfEdqiT9CqkRksWQ.html')
-    assert_not_nil page
-    version_count = Version.count
-    checkout_count = Checkout.count
-    html_files_count = Site.files_html(@oup_20060721.path).size
-    checkout = Checkout.new(:user => @andy, :page => page, :site => @oup_20060721)
-    assert_raise(RuntimeError) {checkout.save} # TODO test for message, how "RuntimeError: Versions can only be created in Wiki sites"
-    #assert_equal 'Version can\'t be blank, Site can\'t be a baseline process', checkout.errors.full_messages.join(", ")
-    assert_equal version_count, Version.count
-    assert_equal checkout_count, Checkout.count
-    assert_equal html_files_count, Site.files_html(@oup_20060721.path).size
-    
-    logger.debug('2 - we can check out a page by supplying the user, page and site')
-    version_count = Version.count
-    checkout_count = Checkout.count
-    html_files_count = Site.files_html(@oup_20060721.path).size
-    checkout = Checkout.new(:user => @andy, :page => page, :site => @oup_wiki)
-    assert checkout.save
-    assert_equal version_count + 1, Version.count 
-    assert_equal checkout_count + 1, Checkout.count
-    assert_equal @oup_wiki, checkout.site # created checkout
-    assert_equal page, checkout.page
-    assert_equal @andy, checkout.user
-    version = checkout.version # version created
-    assert_equal @andy, version.user
-    assert_equal @oup_wiki, version.wiki
-    assert_equal page, version.page
-    assert File.exists?(version.path)
-    
-    logger.debug('3 - we cannot check out the same page twice')
-    checkout = Checkout.new(:user => @andy, :page => page, :site => @oup_wiki)
-    assert_raise(RuntimeError) {checkout.save} # Checkout already exists #TODO mixed results with this, caused by page.checkout, that doesn't seem to work
-    assert_errors(checkout)
-    assert_equal version_count + 1, Version.count # same as before, nothing changed
-    assert_equal checkout_count + 1, Checkout.count
-    
-    logger.debug('4 - we can undo a checkout')
-    assert_equal 1, Checkout.count
-    checkout = Checkout.find(:first)
-    assert_kind_of Checkout,  checkout
-    assert File.exists?(checkout.version.path)
-    version_path = checkout.version.path
-    checkout.undo
-    assert_equal version_count, Version.count # undo destroys checkout + version
-    assert_equal checkout_count, Checkout.count
-    assert !File.exists?(version_path)    
-    checkout = Checkout.new(:user => @andy, :page => page, :site => @oup_wiki, :note => 'My checkout')
-    assert checkout.save
-    assert_equal 'My checkout', checkout.version.note
-  end
-  
-  # Shows:
-  # 1. an admin or user cannot checkin a file of another user
-  # 2. owner (who is not an admin) can checkin
-  # 3. cadmin can check in
-  # 4. html can be supplied during checkin 
-  # TODO 5. don't supply html which will checkin using the version file
-  # 6. the version file does not contain wiki tags
-  # 7. after checkin the page does
-  def tst02_checkin
-    page = WikiPage.find_by_filename('artifact,_fdRfkBUJEdqrUt4zetC1gg.html')
-    assert page.html.include?('body onload')
-    checkout = Checkout.new(:user => @tony, :page => page, :site => @oup_wiki, :note => 'Another checkout')
-    assert checkout.save
-    assert_kind_of Checkout,  checkout
-    assert File.exists?(checkout.version.path)
-    checkout.reload
-    checkout_id = checkout.id
-    
-    logger.debug('1 - an admin or user cannot checkin a file of another user')
-    assert_raise(RuntimeError) {checkout.checkin(@andy)}
-    assert_raise(RuntimeError) {checkout.checkin(@cash)}
-
-    logger.debug('2 - owner (who is not an admin) can checkin')
-    checkout.checkin(@tony)
-    assert !Checkout.exists?(checkout_id)
-    
-    logger.debug('3 - cadmin can check in')
-    checkout = Checkout.new(:user => @tony, :page => page, :site => @oup_wiki, :note => 'Another checkout')
-    assert checkout.save!
-    checkout_id = checkout.id
-    checkout.checkin(@george)
-    assert !Checkout.exists?(checkout_id)
-    
-    logger.debug('4 - html can be supplied during checkin')
-    checkout = Checkout.new(:user => @tony, :page => page, :site => @oup_wiki, :note => 'Another checkout')
-    assert checkout.save!
-    version = checkout.version
-    checkout_id = checkout.id
-    html = checkout.version.html
-    html = html.gsub('making responsibility easy to identify','##replaced text##')
-    checkout.checkin(@tony, html)
-    assert !Checkout.exists?(checkout_id)
-    assert version.html.index('##replaced text##')
-    assert page.html.index('##replaced text##')
-    
-    logger.debug('5 - don\'t supply html which will checkin using the version file')
-    
-    logger.debug('6 - the version file does not contain wiki tags')
-    checkout = Checkout.new(:user => @tony, :page => page, :site => @oup_wiki, :note => 'Another checkout')     
-    assert checkout.save!
-    version = checkout.version
-    html_version = version.html
-    html_page = version.page.html
-    # removed stuff in version file
-    assert_equal nil, html_version.index('body onload') # onload was removed
-    assert_equal nil, html_version.index('<!-- epfwiki head start -->') # wiki stuff removed
-    assert_equal nil, html_version.index('<!-- epfwiki iframe start -->')
-    # replaced stuff in version file
-    assert_not_nil html_version.index(Page.TREEBROWSER_PLACEHOLDER)    
-    # assert_not_nil html_version.index('<!-- copyright statement -->')    
-    # stuff to be removed from page
-    assert_not_nil html_page.index('body onload') 
-    # stuff to be replace in page
-    assert_not_nil  html_page.index('treebrowser.js')
-    assert_not_nil  html_page.index('class="copyright"')   
-
-    logger.debug('7 - after checkin the page does')
-    html_version = html_version.gsub('making responsibility easy to identify','##replaced text##')
-    checkout.checkin(@tony, html_version)
-    html_page = version.page.html
-    # stuff to be removed from page back in page
-    assert_not_nil html_page.index('##replaced text##') 
-    assert_not_nil html_page.index('body onload')     
-    # stuff to be replaced in page back in page
-    assert_not_nil  html_page.index('treebrowser.js')
-    assert_not_nil  html_page.index('class="copyright"') 
-  end
-  
-  # Shows that a user will start receiving notifications about page changes after checkin of a page
-  def test_notification_subscription
-    page = WikiPage.find(:first)
-    checkout = Checkout.new(:user => @andy, :page => page, :site => page.site)
-    assert checkout.save
-    assert !Notification.find_all_users(page, Page.name).include?(@andy)
-    checkout.checkin(@andy)
-    assert Notification.find_all_users(page, Page.name).include?(@andy)
-    checkout = Checkout.create(:user => @andy, :page => page, :site => page.site)    
-    assert checkout.save
-    checkout.checkin(@andy)
-    assert Notification.find_all_users(page, Page.name).include?(@andy)
-    checkout = Checkout.create(:user => @george, :page => page, :site => page.site)    
-    assert checkout.save
-    checkout.checkin(@george)
-    assert Notification.find_all_users(page, Page.name).include?(@george)
-  end
-end
diff --git a/source/test/unit/comment_test.rb b/source/test/unit/comment_test.rb
deleted file mode 100644
index dfd73fe..0000000
--- a/source/test/unit/comment_test.rb
+++ /dev/null
@@ -1,40 +0,0 @@
-require File.dirname(__FILE__) + '/../test_helper'
-
-#--######################################################################
-# Copyright (c) 2006 Logica
-# 
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# 
-# Onno van der Straaten:: initial implementation
-#++######################################################################
-# {Copyright (c) 2006 Logica}[link:files/COPYRIGHT.html]
-
-class CommentTest < Test::Unit::TestCase
-  
-  fixtures :users
-  
-  def setup
-    logger.debug "Test Case: #{name}"  
-    @andy = users(:andy)
-    @cash = users(:cash)
-  end
-  
-  # Shows that a user will start receiving notifications about page changes after creating a comment about a page
-  def test_notification
-    wiki = create_templates
-    wiki.reload
-    version = Version.find(:first)
-    assert !Notification.find_all_users(version.page, Page.name).include?(@andy)
-    Comment.create(:text => 'test', :user => @andy, :version => version, :page => version.page, :site => version.wiki)
-    assert Notification.find_all_users(version.page, Page.name).include?(@andy)
-    Comment.create(:text => 'another test', :user => @andy, :version => version, :page => version.page, :site => version.wiki)
-    assert Notification.find_all_users(version.page, Page.name).include?(@andy)
-    Comment.create(:text => 'another test', :user => @cash, :version => version, :page => version.page, :site => version.wiki)
-    assert Notification.find_all_users(version.page, Page.name).include?(@cash)
-  end
-end
diff --git a/source/test/unit/copyright_test.rb b/source/test/unit/copyright_test.rb
deleted file mode 100644
index 29a0ce2..0000000
--- a/source/test/unit/copyright_test.rb
+++ /dev/null
@@ -1,36 +0,0 @@
-require File.dirname(__FILE__) + '/../test_helper'
-
-#--######################################################################
-# Copyright (c) 2006 Logica
-# 
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# 
-# Onno van der Straaten:: initial implementation
-#++######################################################################
-# {Copyright (c) 2006 Logica}[link:files/COPYRIGHT.html]
-
-class CopyrightTest < Test::Unit::TestCase
-  
-  def test01_rb_files
-    files = copyright_files(File.expand_path(RAILS_ROOT) + '/app')
-    files = files + copyright_files(File.expand_path(RAILS_ROOT) + '/db')
-    files = files + copyright_files(File.expand_path(RAILS_ROOT) + '/lib')    
-    files = files + copyright_files(File.expand_path(RAILS_ROOT) + '/test')  
-    files = files - [File.expand_path(RAILS_ROOT) + '/db/schema.rb'] # generated file, not in svn
-    files_without = []
-    files.each do |file|
-      content = IO.readlines(file).join
-      if content.index('# Copyright (c)') 
-      else
-        files_without << file
-      end
-    end
-    logger.info("Files without copyright notice #{files_without.size} from total #{files.size}")
-    assert_equal [], files_without
-  end
-end
diff --git a/source/test/unit/notifier_test.rb b/source/test/unit/notifier_test.rb
deleted file mode 100644
index 7d20e3f..0000000
--- a/source/test/unit/notifier_test.rb
+++ /dev/null
@@ -1,59 +0,0 @@
-require File.dirname(__FILE__) + '/../test_helper'
-
-#--######################################################################
-# Copyright (c) 2006 Logica
-# 
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# 
-# Onno van der Straaten:: initial implementation
-#++######################################################################
-# {Copyright (c) 2006 Logica}[link:files/COPYRIGHT.html]
-
-class UserTest < Test::Unit::TestCase
-  
-  fixtures :users
-  
-  def setup
-    logger.debug "Test Case: #{name}"  
-    @oup_20060721 = create_oup_20060721
-    @oup_wiki = create_oup_wiki(@oup_20060721)
-    @andy = users(:andy)
-    @george = users(:george)
-    @tony = users(:tony)
-    @cash = users(:cash)
-  end
-  
-  # TODO include all record types: 
-  def test01_deliver_summary
-    assert_not_nil @oup_wiki
-    page = WikiPage.find_by_filename('artifact,_fdRfkBUJEdqrUt4zetC1gg.html')
-    assert_not_nil page
-    #date_previous_week = date - 7.days
-    #puts "Previous week: #{date_previous_week}"
-    #start_of_previous_week = (date - 7.days).at_beginning_of_week
-    #start_of_week = date.at_beginning_of_week
-    #puts "Previous week: from #{start_of_previous_week} to #{start_of_week}"
-    #puts "Previous day from #{(Time.now - 1.day).at_beginning_of_day} to #{Time.now.at_beginning_of_day}"
-    #puts "Previous month #{(Time.now - 1.month).at_beginning_of_month} to #{Time.now.at_beginning_of_month}"
-    comment1 = Comment.new(:user => @andy, :text => 'some text', :page => page, :site => @oup_wiki, :version => page.versions[0])
-    comment1.created_on = Time.now - 3.days
-    assert comment1.save!
-    page = WikiPage.find_by_filename('artifact,_fdRfkBUJEdqrUt4zetC1gg.html')
-    checkout = Checkout.new(:user => @andy, :page => page, :site => @oup_wiki, :note => 'Checkout to test notifier')
-    assert checkout.save! 
-    assert Checkout.count > 0
-    assert Comment.count > 0
-    starttime = Time.now.at_beginning_of_month
-    endtime = (Time.now + 1.month).at_beginning_of_month
-    @tony.created_on = Time.now - 3.days
-    @tony.save!
-    assert 0 < User.find(:all, :conditions => ['created_on > ? and created_on < ?', starttime, endtime ], :order => 'created_on DESC').size
-    Notifier::deliver_summary({:type => 'M', :dummy => ''}, Time.now + 1.month) # plus 1 month, because records are created in the current month
-  end
-  
-end
\ No newline at end of file
diff --git a/source/test/unit/notifier_test/contributions_processed.html b/source/test/unit/notifier_test/contributions_processed.html
deleted file mode 100644
index 5925521..0000000
--- a/source/test/unit/notifier_test/contributions_processed.html
+++ /dev/null
@@ -1,92 +0,0 @@
-<style>
-<!--
-
-* {    font-size:    9pt;    font-family:    arial, helvetica, sans-serif; line-height: 1.7em; }
-p { margin: 10px; margin-bottom:20px; }
-th {background-color:#EEEEEE}
-table {border: 0px;
-empty-cells: show;}
-.header{background-color:#98B1C4; color: white;}
-#header {
-    background:#9999CC;
-    color:#FFFFFF;
-    }
-#header .pageTitle {
-    color: #ffffff;
-    font-size: 12pt;
-    font-weight: bold;
-    padding-top: 10px;
-    padding-bottom: 10px;
-    padding-left: 10px;
-    padding-right: 10px;
-    background: #9999cc; text-align: left;
-    border-bottom: 1px solid black;
-}
-
-.sectionHeading
-{
-	/*background-color: #98b1c4;*/
-	background-color: #FFFFFF;
-	color: #000000;
-	cursor: hand;
-	font-family: arial, helvetica, sans-serif;
-	font-size: 10pt;
-	font-weight: bold;
-	padding-bottom: 2px;
-	padding-left: 2px;
-	padding-top: 2px;
-	text-decoration: none;
-	border: 0px;
-}
--->
-</style>
-<div id="header"><h1 class="pageTitle">[EPF Wiki - Test Enviroment] Your contribution has been processed</h1></div>
-<p>**This message was generated by a server. Don't reply to this address.**</p>
-
-
-<p>Hi Cash Oshman,</p>
-<p>One or more contributions you made through <a href="http://localhost:3000/">EPF Wiki - Test Enviroment</a> have been processed.
-Contributions through the Wiki are typically used to update the process asset library but they might also be recorded 
-as enhancement requests or defects for more formal processing and tracking of the request or issue raised.
-This email is send to inform you on how the contribution was processed.</p>
-<p>
-	<table>
-		<tr><th>Contribution</th><th>Reviewer</th><th>Review Note</th><th>Wiki</th></tr>
-		
-			
-				
-				<tr><td><a href="http://localhost:3000/uploads/4.html">index.html</a></td><td>Andy Kaufman</td><td>Review note of upload 1</td><td></td></tr>          
-			
-		
-			
-				
-				<tr><td><a href="http://localhost:3000/uploads/5.html">index.html</a></td><td>Andy Kaufman</td><td>Review note of upload 2</td><td></td></tr>          
-			
-		
-			
-				
-				<tr><td><a href="http://localhost:3000/uploads/6.html">index.html</a></td><td>Andy Kaufman</td><td>Review note of upload 3</td><td></td></tr>          
-			
-		
-			
-				
-				<tr><td><a href="http://localhost:3000/test_wikis/templates/new/workproducts/deliverable_template_7EA8A93C.html">Comment 2</a></td><td>Andy Kaufman</td><td>Comment 2</td><td><a href="http://localhost:3000/test_wikis/templates/">Templates</a></td></tr>
-			
-		
-			
-				
-				<tr><td><a href="http://localhost:3000/test_wikis/templates/new/guidances/examples/example_template_5E41AF53.html">Comment 3</a></td><td>Andy Kaufman</td><td>Comment 3</td><td><a href="http://localhost:3000/test_wikis/templates/">Templates</a></td></tr>
-			
-		
-			
-				
-				<tr><td><a href="http://localhost:3000/test_wikis/templates/new/guidances/examples/example_template_5E41AF53.html">Example Template version 1</a></td><td>George Shapiro</td><td>Review note 2</td><td><a href="http://localhost:3000/test_wikis/templates/">Templates</a></td></tr>
-			
-		
-	</table>
-</p>
-
-<p>Thanks for your contributions,<br>
-Your EPF Wiki - Test Enviroment Server</p>
-
-<p>If you have questions regarding EPF Wiki - Test Enviroment or this e-mail, please contact <a href="mailto:george.shapiro@epf.eclipse.org">George Shapiro</a></p>
\ No newline at end of file
diff --git a/source/test/unit/notifier_test/feedback.html b/source/test/unit/notifier_test/feedback.html
deleted file mode 100644
index 77d3a53..0000000
--- a/source/test/unit/notifier_test/feedback.html
+++ /dev/null
@@ -1,60 +0,0 @@
-<style>
-<!--
-
-* {    font-size:    9pt;    font-family:    arial, helvetica, sans-serif; line-height: 1.7em; }
-p { margin: 10px; margin-bottom:20px; }
-th {background-color:#EEEEEE}
-table {border: 0px;
-empty-cells: show;}
-.header{background-color:#98B1C4; color: white;}
-#header {
-    background:#9999CC;
-    color:#FFFFFF;
-    }
-#header .pageTitle {
-    color: #ffffff;
-    font-size: 12pt;
-    font-weight: bold;
-    padding-top: 10px;
-    padding-bottom: 10px;
-    padding-left: 10px;
-    padding-right: 10px;
-    background: #9999cc; text-align: left;
-    border-bottom: 1px solid black;
-}
-
-.sectionHeading
-{
-	/*background-color: #98b1c4;*/
-	background-color: #FFFFFF;
-	color: #000000;
-	cursor: hand;
-	font-family: arial, helvetica, sans-serif;
-	font-size: 10pt;
-	font-weight: bold;
-	padding-bottom: 2px;
-	padding-left: 2px;
-	padding-top: 2px;
-	text-decoration: none;
-	border: 0px;
-}
--->
-</style>
-<div id="header"><h1 class="pageTitle">[EPF Wiki - Development Environment] Feedback Posted</h1></div>
-<p>**This message was generated by a server. Don't reply to this address.**</p>
-
-
-
-<p>Hi George Shapiro,</p>
-<p>Feedback was posted or help was requested via <a href="http://localhost:3000/">EPF Wiki - Development Environment</a> by
-
-<a href="mailto:test@test.com">test@test.com</a>.</p>
-<p>The user posted the following message:<br>"<i>Strings can continue across multiple input lines, in which case they will contain newline characters. It is also possible to use here documents to express long string literals. Whenever Ruby parses the sequence <<identifier or <<quoted string, it replaces it with a string literal built from successive logical input lines. It stops building the string when it finds a line that starts with the identifier or the quoted string. You can put a minus sign immediately after the << characters, in which case the terminator can be indented from the left margin. If a quoted string was used to specify the terminator, its quoting rules will be applied to the here document; otherwise, double-quoting rules apply. </i>"</p>
-
-<p>
-You can manage follow-up of feedback using <a href="http://localhost:3000/sites/feedback/2">EPF Wiki - Development Environment</a>
-</p>
-
-<p></>Your EPF Wiki - Development Environment Server</p>
-
-<p>If you have questions regarding EPF Wiki - Development Environment or this e-mail, please contact <a href="mailto:george.shapiro@epf.eclipse.org">George Shapiro</a></p>
\ No newline at end of file
diff --git a/source/test/unit/notifier_test/notifier_new_baseline_deployed.html b/source/test/unit/notifier_test/notifier_new_baseline_deployed.html
deleted file mode 100644
index e09fc54..0000000
--- a/source/test/unit/notifier_test/notifier_new_baseline_deployed.html
+++ /dev/null
@@ -1,55 +0,0 @@
-<style>
-<!--
-
-* {    font-size:    9pt;    font-family:    arial, helvetica, sans-serif; line-height: 1.7em; }
-p { margin: 10px;}
-th {background-color:#EEEEEE}
-table {border: 0px;
-empty-cells: show;}
-.header{background-color:#98B1C4; color: white;}
-#header {
-    background:#9999CC;
-    color:#FFFFFF;
-    }
-#header .pageTitle {
-    color: #ffffff;
-    font-size: 12pt;
-    font-weight: bold;
-    padding-top: 2px;
-    padding-bottom: 2px;
-    padding-left: 10px;
-    padding-right: 10px;
-    background: #9999cc; text-align: left;
-    border-bottom: 1px solid black;
-}
-
-.sectionHeading
-{
-	/*background-color: #98b1c4;*/
-	background-color: #FFFFFF;
-	color: #000000;
-	cursor: hand;
-	font-family: arial, helvetica, sans-serif;
-	font-size: 10pt;
-	font-weight: bold;
-	padding-bottom: 2px;
-	padding-left: 2px;
-	padding-top: 2px;
-	text-decoration: none;
-	border: 0px;
-}
--->
-</style>
-<div id="header"><h1 class="pageTitle">[EPF Wiki - Test Enviroment] Wiki Templates Updated with Baseline Process templates_20080828</h1></div>
-<p>**This message was generated by a server. Don't reply to this address.**</p>
-
-
-User Andy Kaufman updated Wiki <a href="http://http://localhost:3000/test_wikis/templates/">Templates</a> with Baseline Process templates_20080828.
-<br></br>
-<table width=100% border=1><tr><td>
-
-</td></tr></table>
-<br>
-<br>
-<p>To unsubscribe from receiving notifications, edit your user details at <a href="http:///users/mywiki"></a></p>
-<p>If you have questions regarding EPF Wiki - Test Enviroment or this e-mail, please contact <a href="mailto:george.shapiro@epf.eclipse.org">George Shapiro</a></p>
\ No newline at end of file
diff --git a/source/test/unit/notifier_test/site_status.html b/source/test/unit/notifier_test/site_status.html
deleted file mode 100644
index 28e6d61..0000000
--- a/source/test/unit/notifier_test/site_status.html
+++ /dev/null
@@ -1,53 +0,0 @@
-<style>
-<!--
-
-* {    font-size:    9pt;    font-family:    arial, helvetica, sans-serif; line-height: 1.7em; }
-p { margin: 10px;  }
-th {background-color:#EEEEEE}
-table {border: 0px;
-empty-cells: show;}
-.header{background-color:#98B1C4; color: white;}
-#header {
-    background:#9999CC;
-    color:#FFFFFF;
-    }
-#header .pageTitle {
-    color: #ffffff;
-    font-size: 12pt;
-    font-weight: bold;
-    padding-top: 2px;
-    padding-bottom: 2px;
-    padding-left: 10px;
-    padding-right: 10px;
-    background: #9999cc; text-align: left;
-    border-bottom: 1px solid black;
-}
-
-.sectionHeading
-{
-	/*background-color: #98b1c4;*/
-	background-color: #FFFFFF;
-	color: #000000;
-	cursor: hand;
-	font-family: arial, helvetica, sans-serif;
-	font-size: 10pt;
-	font-weight: bold;
-	padding-bottom: 2px;
-	padding-left: 2px;
-	padding-top: 2px;
-	text-decoration: none;
-	border: 0px;
-}
--->
-</style>
-<div id="header"><h1 class="pageTitle">FINISHED creating new Wiki Templates using Baseline Process templates_20080828</h1></div>
-<p>**This message was generated by a server. Don't reply to this address.**</p>
-
-
-<p>Hi George Shapiro,</p>
-
-	<p>The update (or creation) of Wiki <a href="/test_wikis/templates/">Templates</a> with baseline templates_20080828 has finished</p>
-
-Your EPF Wiki - Test Enviroment Server</p>
-
-<p>If you have questions regarding EPF Wiki - Test Enviroment or this e-mail, please contact <a href="mailto:george.shapiro@epf.eclipse.org">George Shapiro</a></p>
\ No newline at end of file
diff --git a/source/test/unit/notifier_test/xhtmldiff_error_report.html b/source/test/unit/notifier_test/xhtmldiff_error_report.html
deleted file mode 100644
index 752c06f..0000000
--- a/source/test/unit/notifier_test/xhtmldiff_error_report.html
+++ /dev/null
@@ -1,425 +0,0 @@
-<style>
-<!--
-
-* {    font-size:    9pt;    font-family:    verdana, helvetica, arial, sans-serif; line-height: 1.7em; }
-p { margin: 0 }
--->
-</style>
-<h2>Error report from Mon Jun 16 14:02:01 W. Europe Daylight Time 2008</h2>
-
-<table border="0">
-<tr><td>Message</td><td>#<REXML::ParseException: Missing end tag for 'img' (got "td")
-Line:
-Position:
-Last 80 unconsumed characters:
-<td> <table cellpadding="0" cellspacing="0" border="0" class="overviewTable"> <tr>
-c:/ruby/lib/ruby/1.8/rexml/parsers/baseparser.rb:315:in `pull'
-c:/ruby/lib/ruby/1.8/rexml/parsers/treeparser.rb:21:in `parse'
-c:/ruby/lib/ruby/1.8/rexml/document.rb:190:in `build'
-c:/ruby/lib/ruby/1.8/rexml/document.rb:45:in `initialize'
-D:/My Documents/My Apatana Workspaces/epfproject/EPF Wiki Sources/app/models/version.rb:266:in `xhtmldiff'
-D:/My Documents/My Apatana Workspaces/epfproject/EPF Wiki Sources/app/models/version.rb:284:in `xhtmldiffpage'
-D:/My Documents/My Apatana Workspaces/epfproject/EPF Wiki Sources/app/controllers/versions_controller.rb:129:in `diff'
-c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/base.rb:1158:in `perform_action_without_filters'
-c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/filters.rb:697:in `call_filters'
-c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/filters.rb:689:in `perform_action_without_benchmark'
-c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/benchmarking.rb:68:in `perform_action_without_rescue'
-c:/ruby/lib/ruby/1.8/benchmark.rb:293:in `measure'
-c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/benchmarking.rb:68:in `perform_action_without_rescue'
-c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/rescue.rb:199:in `perform_action_without_caching'
-c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/caching.rb:678:in `perform_action'
-c:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record/connection_adapters/abstract/query_cache.rb:33:in `cache'
-c:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record/query_cache.rb:8:in `cache'
-c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/caching.rb:677:in `perform_action'
-c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/base.rb:524:in `process_without_filters'
-c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/filters.rb:685:in `process_without_session_management_support'
-c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/session_management.rb:123:in `process'
-c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/base.rb:388:in `process'
-c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/dispatcher.rb:171:in `handle_request'
-c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/dispatcher.rb:115:in `dispatch'
-c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/dispatcher.rb:126:in `dispatch_cgi'
-c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/dispatcher.rb:9:in `dispatch'
-c:/ruby/lib/ruby/gems/1.8/gems/rails-2.0.2/lib/webrick_server.rb:112:in `handle_dispatch'
-c:/ruby/lib/ruby/gems/1.8/gems/rails-2.0.2/lib/webrick_server.rb:78:in `service'
-c:/ruby/lib/ruby/1.8/webrick/httpserver.rb:104:in `service'
-c:/ruby/lib/ruby/1.8/webrick/httpserver.rb:65:in `run'
-c:/ruby/lib/ruby/1.8/webrick/server.rb:173:in `start_thread'
-c:/ruby/lib/ruby/1.8/webrick/server.rb:162:in `start_thread'
-c:/ruby/lib/ruby/1.8/webrick/server.rb:95:in `start'
-c:/ruby/lib/ruby/1.8/webrick/server.rb:92:in `start'
-c:/ruby/lib/ruby/1.8/webrick/server.rb:23:in `start'
-c:/ruby/lib/ruby/1.8/webrick/server.rb:82:in `start'
-c:/ruby/lib/ruby/gems/1.8/gems/rails-2.0.2/lib/webrick_server.rb:62:in `dispatch'
-c:/ruby/lib/ruby/gems/1.8/gems/rails-2.0.2/lib/commands/servers/webrick.rb:66
-c:/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `require'
-c:/ruby/lib/ruby/gems/1.8/gems/activesupport-2.0.2/lib/active_support/dependencies.rb:496:in `require'
-c:/ruby/lib/ruby/gems/1.8/gems/activesupport-2.0.2/lib/active_support/dependencies.rb:342:in `new_constants_in'
-c:/ruby/lib/ruby/gems/1.8/gems/activesupport-2.0.2/lib/active_support/dependencies.rb:496:in `require'
-c:/ruby/lib/ruby/gems/1.8/gems/rails-2.0.2/lib/commands/server.rb:39
-c:/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `require'
-./script/server:3
--e:2
-...
-Missing end tag for 'img' (got "td")
-Line:
-Position:
-Last 80 unconsumed characters:
-<td> <table cellpadding="0" cellspacing="0" border="0" class="overviewTable"> <tr
-Line:
-Position:
-Last 80 unconsumed characters:
-<td> <table cellpadding="0" cellspacing="0" border="0" class="overviewTable"> <tr</td></tr>
-<tr><td>Location</td><td>http://localhost:3000/versions/diff/645</td></tr>
-<tr><td>Action</td><td>diff</td></tr>
-<tr><td>Controller</td><td>versions</td></tr>
-<tr><td>Query</td><td></td></tr>
-<tr><td>Method</td><td>GET</td></tr>
-<tr><td>SSL</td><td>false</td></tr>
-<tr><td>Agent</td><td>Mozilla/5.0 (Windows; U; Windows NT 5.1; nl; rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14</td></tr>
-</table>
-
-<h3>Backtrace</h3>
-<div>c:/ruby/lib/ruby/1.8/rexml/parsers/treeparser.rb:89:in `parse'</p>
-<p>c:/ruby/lib/ruby/1.8/rexml/document.rb:190:in `build'</p>
-<p>c:/ruby/lib/ruby/1.8/rexml/document.rb:45:in `initialize'</p>
-<p>/app/models/version.rb:266:in `xhtmldiff'</p>
-<p>/app/models/version.rb:284:in `xhtmldiffpage'</p>
-<p>/app/controllers/versions_controller.rb:129:in `diff'</p>
-<p>c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/base.rb:1158:in `perform_action_without_filters'</p>
-<p>c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/filters.rb:697:in `call_filters'</p>
-<p>c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/filters.rb:689:in `perform_action_without_benchmark'</p>
-<p>c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/benchmarking.rb:68:in `perform_action_without_rescue'</p>
-<p>c:/ruby/lib/ruby/1.8/benchmark.rb:293:in `measure'</p>
-<p>c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/benchmarking.rb:68:in `perform_action_without_rescue'</p>
-<p>c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/rescue.rb:199:in `perform_action_without_caching'</p>
-<p>c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/caching.rb:678:in `perform_action'</p>
-<p>c:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record/connection_adapters/abstract/query_cache.rb:33:in `cache'</p>
-<p>c:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record/query_cache.rb:8:in `cache'</p>
-<p>c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/caching.rb:677:in `perform_action'</p>
-<p>c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/base.rb:524:in `process_without_filters'</p>
-<p>c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/filters.rb:685:in `process_without_session_management_support'</p>
-<p>c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/session_management.rb:123:in `process'</p>
-<p>c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/base.rb:388:in `process'</p>
-<p>c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/dispatcher.rb:171:in `handle_request'</p>
-<p>c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/dispatcher.rb:115:in `dispatch'</p>
-<p>c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/dispatcher.rb:126:in `dispatch_cgi'</p>
-<p>c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/dispatcher.rb:9:in `dispatch'</p>
-<p>c:/ruby/lib/ruby/gems/1.8/gems/rails-2.0.2/lib/webrick_server.rb:112:in `handle_dispatch'</p>
-<p>c:/ruby/lib/ruby/gems/1.8/gems/rails-2.0.2/lib/webrick_server.rb:78:in `service'</p>
-<p>c:/ruby/lib/ruby/1.8/webrick/httpserver.rb:104:in `service'</p>
-<p>c:/ruby/lib/ruby/1.8/webrick/httpserver.rb:65:in `run'</p>
-<p>c:/ruby/lib/ruby/1.8/webrick/server.rb:173:in `start_thread'</p>
-<p>c:/ruby/lib/ruby/1.8/webrick/server.rb:162:in `start_thread'</p>
-<p>c:/ruby/lib/ruby/1.8/webrick/server.rb:95:in `start'</p>
-<p>c:/ruby/lib/ruby/1.8/webrick/server.rb:92:in `start'</p>
-<p>c:/ruby/lib/ruby/1.8/webrick/server.rb:23:in `start'</p>
-<p>c:/ruby/lib/ruby/1.8/webrick/server.rb:82:in `start'</p>
-<p>c:/ruby/lib/ruby/gems/1.8/gems/rails-2.0.2/lib/webrick_server.rb:62:in `dispatch'</p>
-<p>c:/ruby/lib/ruby/gems/1.8/gems/rails-2.0.2/lib/commands/servers/webrick.rb:66</p>
-<p>c:/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `require'</p>
-<p>c:/ruby/lib/ruby/gems/1.8/gems/activesupport-2.0.2/lib/active_support/dependencies.rb:496:in `require'</p>
-<p>c:/ruby/lib/ruby/gems/1.8/gems/activesupport-2.0.2/lib/active_support/dependencies.rb:342:in `new_constants_in'</p>
-<p>c:/ruby/lib/ruby/gems/1.8/gems/activesupport-2.0.2/lib/active_support/dependencies.rb:496:in `require'</p>
-<p>c:/ruby/lib/ruby/gems/1.8/gems/rails-2.0.2/lib/commands/server.rb:39</p>
-<p>c:/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `require'</p>
-<p>./script/server:3</p>
-<p>-e:2</div>
-
-<h3>Params</h3>
-<hr/>
-<p><b>id</b></p>
-<p>--- "645"
-</p>
-
-<h3>Session</h3>
-<hr/>
-<p><b>user</b></p>
-<p>--- &id001 !ruby/object:User
-</p>
-<p>    attributes:
-</p>
-<p>      logon_using_cookie_count: "0"
-</p>
-<p>      created_on: 2008-06-16 10:33:10
-</p>
-<p>      name: Andy Kaufman
-</p>
-<p>      logon_count: 1
-</p>
-<p>      http_user_agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; nl; rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14
-</p>
-<p>      site_id:
-</p>
-<p>      notify_monthly: "0"
-</p>
-<p>      notify_weekly: "0"
-</p>
-<p>      account:
-</p>
-<p>      confirmed_on: 2008-06-16 10:33:10
-</p>
-<p>      hashed_password: 8585cc1bc7a2e4cdcc7bae8d6caaefa70ea27339
-</p>
-<p>      updated_on: 2008-06-16 10:55:18.905000 +02:00
-</p>
-<p>      hashed_password_new:
-</p>
-<p>      last_logon: 2008-06-16 10:55:18.889000 +02:00
-</p>
-<p>      admin: Y
-</p>
-<p>      id: "1"
-</p>
-<p>      notify_daily: "0"
-</p>
-<p>      notify_immediate: "0"
-</p>
-<p>      ip_address: 127.0.0.1
-</p>
-<p>      email: andy.kaufman@epf.eclipse.org
-</p>
-<p>    attributes_cache:
-</p>
-<p>      confirmed_on: 2008-06-16 10:33:10 +02:00
-</p>
-<p>    checkouts:
-</p>
-<p>    comments:
-</p>
-<p>    comments2review:
-</p>
-<p>    errors: !ruby/object:ActiveRecord::Errors
-</p>
-<p>      base: *id001
-</p>
-<p>      errors: {}
-</p>
-<p>
-</p>
-<p>    new_record_before_save:
-</p>
-<p>    notifications:
-</p>
-<p>    site:
-</p>
-<p>    sites:
-</p>
-<p>    uploads:
-</p>
-<p>    user_versions:
-</p>
-<p>    versions:
-</p>
-<p>    versions2review:
-</p>
-<p><b>return_to</b></p>
-<p>---
-</p>
-<p><b>flash</b></p>
-<p>--- !map:ActionController::Flash::FlashHash {}
-</p>
-<p>
-</p>
-
-<h3>Environment</h3>
-<hr/>
-<table border="0">
-<tr>
-  <td>
-    <small><b>SERVER_NAME</b></small>
-
-  </td>
-  <td>
-    <small>localhost</small>
-  </td>
-</tr>
-<tr>
-  <td>
-    <small><b>PATH_INFO</b></small>
-
-  </td>
-  <td>
-    <small>/versions/diff/645</small>
-  </td>
-</tr>
-<tr>
-  <td>
-    <small><b>REMOTE_HOST</b></small>
-
-  </td>
-  <td>
-    <small>127.0.0.1</small>
-  </td>
-</tr>
-<tr>
-  <td>
-    <small><b>HTTP_ACCEPT_ENCODING</b></small>
-
-  </td>
-  <td>
-    <small>gzip,deflate</small>
-  </td>
-</tr>
-<tr>
-  <td>
-    <small><b>HTTP_USER_AGENT</b></small>
-
-  </td>
-  <td>
-    <small>Mozilla/5.0 (Windows; U; Windows NT 5.1; nl; rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14</small>
-  </td>
-</tr>
-<tr>
-  <td>
-    <small><b>SERVER_PROTOCOL</b></small>
-
-  </td>
-  <td>
-    <small>HTTP/1.1</small>
-  </td>
-</tr>
-<tr>
-  <td>
-    <small><b>HTTP_ACCEPT_LANGUAGE</b></small>
-
-  </td>
-  <td>
-    <small>en,en-us;q=0.7,nl;q=0.3</small>
-  </td>
-</tr>
-<tr>
-  <td>
-    <small><b>HTTP_HOST</b></small>
-
-  </td>
-  <td>
-    <small>localhost:3000</small>
-  </td>
-</tr>
-<tr>
-  <td>
-    <small><b>REMOTE_ADDR</b></small>
-
-  </td>
-  <td>
-    <small>127.0.0.1</small>
-  </td>
-</tr>
-<tr>
-  <td>
-    <small><b>SERVER_SOFTWARE</b></small>
-
-  </td>
-  <td>
-    <small>WEBrick/1.3.1 (Ruby/1.8.4/2006-04-14)</small>
-  </td>
-</tr>
-<tr>
-  <td>
-    <small><b>HTTP_KEEP_ALIVE</b></small>
-
-  </td>
-  <td>
-    <small>300</small>
-  </td>
-</tr>
-<tr>
-  <td>
-    <small><b>HTTP_REFERER</b></small>
-
-  </td>
-  <td>
-    <small>http://localhost:3000/openup/958/history</small>
-  </td>
-</tr>
-<tr>
-  <td>
-    <small><b>HTTP_COOKIE</b></small>
-
-  </td>
-  <td>
-    <small>_session_id=c53e3437c4e59d3ef9cd1dacebb35a29</small>
-  </td>
-</tr>
-<tr>
-  <td>
-    <small><b>HTTP_ACCEPT_CHARSET</b></small>
-
-  </td>
-  <td>
-    <small>ISO-8859-1,utf-8;q=0.7,*;q=0.7</small>
-  </td>
-</tr>
-<tr>
-  <td>
-    <small><b>REQUEST_URI</b></small>
-
-  </td>
-  <td>
-    <small>http://localhost:3000/versions/diff/645</small>
-  </td>
-</tr>
-<tr>
-  <td>
-    <small><b>SERVER_PORT</b></small>
-
-  </td>
-  <td>
-    <small>3000</small>
-  </td>
-</tr>
-<tr>
-  <td>
-    <small><b>GATEWAY_INTERFACE</b></small>
-
-  </td>
-  <td>
-    <small>CGI/1.1</small>
-  </td>
-</tr>
-<tr>
-  <td>
-    <small><b>QUERY_STRING</b></small>
-
-  </td>
-  <td>
-    <small></small>
-  </td>
-</tr>
-<tr>
-  <td>
-    <small><b>REMOTE_USER</b></small>
-
-  </td>
-  <td>
-    <small></small>
-  </td>
-</tr>
-<tr>
-  <td>
-    <small><b>HTTP_ACCEPT</b></small>
-
-  </td>
-  <td>
-    <small>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5</small>
-  </td>
-</tr>
-<tr>
-  <td>
-    <small><b>REQUEST_METHOD</b></small>
-
-  </td>
-  <td>
-    <small>GET</small>
-  </td>
-</tr>
-<tr>
-  <td>
-    <small><b>HTTP_CONNECTION</b></small>
-
-  </td>
-  <td>
-    <small>keep-alive</small>
-  </td>
-</tr>
-</table>
diff --git a/source/test/unit/page_test.rb b/source/test/unit/page_test.rb
deleted file mode 100644
index d44f64a..0000000
--- a/source/test/unit/page_test.rb
+++ /dev/null
@@ -1,298 +0,0 @@
-require File.dirname(__FILE__) + '/../test_helper'
-
-#--######################################################################
-# Copyright (c) 2006 Logica
-# 
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# 
-# Onno van der Straaten:: initial implementation
-#++######################################################################
-# {Copyright (c) 2006 Logica}[link:files/COPYRIGHT.html]
-
-class PageTest < Test::Unit::TestCase
-  fixtures :users
-  
-  def setup
-    logger.debug "Test Case: #{name}"
-    @andy = users(:andy)
-    @george = users(:george)
-    @tony = users(:tony)
-    @cash = users(:cash)    
-    @html = IO.readlines('test/unit/page_test/test_html.txt').join.split("####")
-  end
-  
-  def test_new
-    @oup_20060721 = create_oup_20060721
-    @oup_wiki = create_oup_wiki(@oup_20060721)
-    @oup_20060728 = create_oup_20060728
-    treebrowser_tag_count = 0
-    copyright_tag_count = 0
-    #text_count = 0
-    body_tag_count = 0
-    assert_equal 1, Wiki.count
-    @oup_wiki.pages.each do |page|
-      find_page = WikiPage.find_by_rel_path(page.rel_path) # assumes there is only 1 Wiki
-      assert_not_nil find_page
-      assert_equal page, find_page
-      treebrowser_tag_count = treebrowser_tag_count + 1 if  !find_page.treebrowser_tag.nil?
-      copyright_tag_count = copyright_tag_count + 1 if !find_page.copyright_tag.nil?
-      #text_count = text_count + 1 if !find_page.text.nil?
-      body_tag_count = body_tag_count + 1 if !find_page.body_tag.nil?
-    end
-    assert_equal 617, treebrowser_tag_count 
-    assert_equal 617, copyright_tag_count 
-    # assert_equal 617, text_count  
-    assert_equal 617, body_tag_count 
-  end
-  
-   def test_shim_tag_pattern
-    assert_pattern(Page::SHIM_TAG_PATTERN, @html[4],    
-        "images/shim.gif\"></td>")
-    assert_pattern(Page::SHIM_TAG_PATTERN,@html[2],    
-        "images/shim.gif\" />\n              </td>")
-    assert_pattern(Page::SHIM_TAG_PATTERN, @html[3],    
-        "images/shim.gif\"></td>")
-  end
-  
-  def test_copyright_pattern
-    assert_pattern(Page::COPYRIGHT_PATTERN, @html[5],    
-        "<p>Copyright (c) 1987, 2006 IBM Corp. and others. All Rights Reserved.\n\n                <br />This program and the accompanying materials are made available under the\n\n                <br />\n\n                <a href=\"http://www.eclipse.org/org/documents/epl-v10.php\" target=\"_blank\">Eclipse Public License v1.0</a> which accompanies this distribution.</p>")
-    assert_pattern(Page::COPYRIGHT_PATTERN, @html[2],    
-        "<p>\n    Copyright (c) 1987, 2006 IBM Corp. and others. All Rights Reserved.<br />\n    This program and the accompanying materials are made available under the<br />\n    <a href=\"http://www.eclipse.org/org/documents/epl-v10.php\" target=\"_blank\">Eclipse Public License v1.0</a> which\n    accompanies this distribution.\n</p>")
-  end
- 
-  # Shows:
-  # 1. can extract title from the file using Page.uma_presentation_name_from_file
-  def  test_title_from_file
-    @oup_20060721 = create_oup_20060721   
-    filenames = Array.new
-    filenames << ['about_base_concepts,_uvje4D_fEdqDFvujd6NHiA.html','About Base Concepts']
-    filenames << ['any_role,_3TCEoeB5EdqnKu908IEluw.html', 'Any Role']
-    filenames << ['determine_architectural_feasibility_0oreoclgEdmt3adZL5Dmdw_desc.html', 'Determine Architectural Feasibility']
-    for filename in filenames
-      page = Page.find_by_filename(filename[0])
-      assert_not_nil page
-      assert_equal filename[1], Page.uma_presentation_name_from_html(page.html)
-    end
-    #pages = Page.find(:all)
-  end
-  
-  # Shows:
-  # 1. There should always be a Wiki 'Templates'. It is create with the first user.  
-  # 2. Creating a new page creates a page, a version, a checkout
-  # 3. A Page file does exist after new page, before checkin
-  # 4. A Version file is created and prepared for edit
-  # 5. Notification record is created for the page after checkin
-  # 6. We can create another new page with the same presentation name
-  def test_new_page_using_template
-    @oup_20060721 = create_oup_20060721
-    @oup_wiki = create_oup_wiki(@oup_20060721)
-    #@oup_20060728 = create_oup_20060728
-    # 1
-    assert_raise(RuntimeError) {Site.templates}
-    create_templates # Using templates plugin to create the 'Templates' Wiki
-    assert_equal 26, Site.templates.size
-    @templates = Wiki.find(:first, :conditions => ['title = ?', 'Templates'])
-    # 2
-    pc, vc, cc = Page.count, Version.count, Checkout.count
-    tool_tpl = WikiPage.find_by_presentation_name('Toolmentor Template')
-    assert_not_nil tool_tpl
-    assert_equal @templates, tool_tpl.site
-    assert_equal [0,0,0], [Page.count - pc, Version.count - vc, Checkout.count - cc]
-    assert_equal 1, Version.count(:conditions => ['page_id=? and wiki_id =?', tool_tpl.id, @templates.id])
-    source_version = tool_tpl.current_version
-    assert_not_nil source_version
-    new_page, new_co = WikiPage.new_using_template(:presentation_name => 'New Tool Mentor created in test10_new_page_using_tempalte', :source_version => source_version, :user => @andy, :site => @oup_wiki)
-    #5
-    assert_no_errors(new_page)
-    assert_no_errors(new_co)
-    assert_equal [1,1,1], [Page.count - pc, Version.count - vc, Checkout.count - cc]    
-    assert_equal new_co, new_page.checkout
-    new_page.reload
-    assert_equal 'New Tool Mentor created in test10_new_page_using_tempalte', new_page.presentation_name
-    assert_equal 'new_tool_mentor_created_in_test10_new_page_using_tempalte.html', new_page.filename
-    assert_equal "#{ENV['EPFWIKI_ROOT_DIR']}#{ENV['EPFWIKI_PUBLIC_FOLDER']}/#{ENV['EPFWIKI_WIKIS_FOLDER']}/openup/new/guidances/toolmentors/#{new_page.filename}", new_page.path 
-    # 3
-    assert File.exists?(new_page.path)
-    # 4
-    assert File.exists?(new_co.version.path)
-    assert_version_file(new_co.version.path)
-    # 5
-    new_co.checkin(@andy)
-    assert Notification.find_all_users(new_page, Page.name).include?(@andy)
-    # 6
-    new_page2, new_co2 = WikiPage.new_using_template(:presentation_name => 'New Tool Mentor created in test10_new_page_using_tempalte', :source_version => source_version, :user => @andy, :site => @oup_wiki)  
-    assert_no_errors(new_page2)
-    assert_no_errors(new_co2)
-    new_co2.checkin(@andy)
-    assert_equal new_page.rel_path.gsub('.html', '_1.html'), new_page2.rel_path
-    new_page3, new_co3 = WikiPage.new_using_template(:presentation_name => 'New Tool Mentor created in test10_new_page_using_tempalte', :source_version => source_version, :user => @andy, :site => @oup_wiki)  
-    assert_no_errors(new_page3)
-    assert_no_errors(new_co3)
-    new_co3.checkin(@andy)
-    assert_equal new_page.rel_path.gsub('.html', '_2.html'), new_page3.rel_path
-  end
-  
-  # Shows: we do get uma_type, uma_presentation_name, uma_name, body_tag, treebrowser_tag and copyright tag from the HTML
-  def test_patterns
-    @wiki = create_templates
-    assert_equal ["CustomCategory",
-     "Discipline",
-     "Domain",
-     "Checklist",
-     "Concept",
-     "EstimationConsiderations",
-     "Example",
-     "Guideline",
-     "Guideline",
-     "Practice",
-     "Report",
-     "ReusableAsset",
-     "Roadmap",
-     "SupportingMaterial",
-     "Template",
-     "TermDefinition",
-     "ToolMentor",
-     "Whitepaper",
-     "Role",
-     "RoleSetGrouping",
-     "RoleSet",
-     "Task",
-     "Artifact",
-     "Deliverable",
-     "Outcome",
-     "WorkProductType"].sort, @wiki.pages.collect {|page| page.uma_type}.sort
-    assert_equal ["Templates",
-"Discipline Template",
-"Domain Template",
-"Checklist Template",
-"Concept Template",
-"Estimation Considerations Template",
-"Example Template",
-"Estimating Guideline Template",
-"Guideline Template",
-"Practice Template",
-"Report Template",
-"Reusable Asset Template",
-"Roadmap Template",
-"Supporting Material Template",
-"Template Template",
-"Term Definition Template",
-"Toolmentor Template",
-"Whitepaper Template",
-"Role Template",
-"Role Set Grouping Template",
-"Role Set Template",
-"Task Template",
-"Artifact Template",
-"Deliverable Template",
-"Outcome Template",
-"Work Product Kind Template"].sort, @wiki.pages.collect {|page| page.presentation_name}.sort
-    assert_equal ["view", "discipline_template", "domain_template", "checklist_template", 
-    "concept_template", "estimation_considerations_template", "example_template", 
-    "estimating_guideline_templae", "guideline_template", "practice_template", "report_template", 
-    "reusable_asset_template", "roadmap_template", "supporting_material_template", 
-    "template_template", "term_definition_template", "toolmentor_template", "whitepaper_template", 
-    "role_template", "role_set_grouping_template", "role_set_template", "task_template", 
-    "artifact_template", "deliverable_template", "outcome_template", "work_product_kind_template"].sort, @wiki.pages.collect {|page| page.uma_name}.sort
-    assert_equal ["<body>"]*26, @wiki.pages.collect {|page| page.body_tag} 
-    @wiki.pages.each do |p|
-      assert_equal [p.filename, true, true, true, true], [p.filename, p.treebrowser_tag.include?('treebrowser.js'), p.treebrowser_tag.include?('<script'), p.treebrowser_tag.include?('script>'), p.copyright_tag.include?('http://www.eclipse.org/org/documents/epl-v10.php')]
-    end
-  end
-  
-  # Shows:
-  # 1. we replace 'UMA Method Architecture' with 'Unified Method Architecture (UMA)' in about base concepts
-  # 2. we create a new page based on that changed version and then remove 'Method'
-  def test_new_page_using_other_page
-    @oup_20060721 = create_oup_20060721
-    @oup_wiki = create_oup_wiki(@oup_20060721)
-    @oup_20060728 = create_oup_20060728    
-    # 1 
-    assert_equal 1, WikiPage.find(:all, :conditions => ['presentation_name=?','About Base Concepts']).size
-    page = WikiPage.find_by_presentation_name('About Base Concepts')
-    assert !page.nil? # Shouldn't fail but does, this really sucks, big time.
-    assert_equal [617, 617, 617*3, 617*2], [Version.count, WikiPage.count, Page.count, BaselineProcessPage.count]
-    assert_equal 1, page.versions.size
-    checkout = Checkout.new(:user => @andy, :page => page, :site => @oup_wiki, :note => 'test13_new_page_using_other_page')
-    assert checkout.save
-    checkout.reload
-    page.reload
-    assert_equal 'test13_new_page_using_other_page', checkout.version.note
-    assert_equal 1, page.versions.size # versions doesn't count checked out
-    assert_equal nil, checkout.version.version
-    checkout.checkin(@andy, checkout.version.html.gsub('UMA Method Architecture', 'Unified Method Architecture (UMA)'))
-    page.reload
-    assert_equal 2, page.versions.size
-    version = page.current_version
-    assert_equal 1, version.version
-    assert version.html.index('Unified Method Architecture (UMA)')
-    assert page.html.index('Unified Method Architecture (UMA)')
-    assert_enhanced_file(page.path)
-    assert_version_file(version.path)
-    # 2
-    pages_count = @oup_wiki.pages.count
-    page, co = WikiPage.new_using_template(:presentation_name => 'New page created using base concepts', :source_version => version, :user => @andy, :site => @oup_wiki)
-    assert_not_nil page
-    assert_not_nil co
-    page.reload
-    co.reload
-    @oup_wiki.reload
-    assert_equal pages_count + 1, @oup_wiki.pages.count
-    assert_equal 0, page.versions.size # checkouts are not counted here
-    v = co.version
-    assert_not_nil v
-    assert_not_nil v.version_id 
-    assert_equal version, v.source_version # the template version
-    assert v.previous_version.nil? # the first version of a new page
-    checkout = page.checkout
-    assert_not_nil checkout
-    assert checkout.version.html.index('Unified Method Architecture (UMA)')
-    assert_not_nil checkout.version.source_version
-    checkout.checkin(@andy, checkout.version.html.gsub('Unified Method Architecture (UMA)','Unified Architecture (UMA)'))
-    version = page.current_version
-    assert_equal 1, version.version
-    assert version.html.index('Unified Architecture (UMA)')
-    assert page.html.index('Unified Architecture (UMA)')
-    assert_enhanced_file(page.path)
-    assert_version_file(version.path)
-  end
-
-  # Shows:
-  # 
-  def test_max_rel_path
-    @oup_20060721 = create_oup_20060721
-    max_rel_path = 0 
-    @oup_20060721.pages.each do |page|
-      max_rel_path = page.rel_path.length if page.rel_path.length > max_rel_path
-    end
-    assert_equal 101, max_rel_path
-  end
-  
-  def test_make_rel_path_unique
-    @wiki = create_templates
-    page = WikiPage.find_by_presentation_name('Toolmentor Template')
-    assert_equal 'new/guidances/toolmentors/toolmentor_template_E9930C53.html', page.rel_path
-    for i in 1..15
-      page.make_rel_path_unique
-      assert_equal "new/guidances/toolmentors/toolmentor_template_E9930C53_#{i}.html", page.rel_path
-    end
-  end
-  
-  def tst_overview_table
-    @wiki = create_templates
-    page = WikiPage.find_by_presentation_name('Concept Template')
-    assert_equal "A concept is a specific type of guidance that outlines key ideas associated with basic principles underlying the referenced item. Concepts normally address more general topics than guidelines and may be applicable to several work products, tasks, and activities.<br/>&#xD;&#xA;", page.overview_table
-    WikiPage.find(:all).each do |page|
-      if ['Templates'].include? page.presentation_name  # Not all pages have a overview table
-        assert_equal [page.presentation_name, false], [page.presentation_name, page.overview_table.blank?]
-      end
-    end
-  end
-
-end
diff --git a/source/test/unit/page_test/test_html.txt b/source/test/unit/page_test/test_html.txt
deleted file mode 100644
index 29cc0f8..0000000
--- a/source/test/unit/page_test/test_html.txt
+++ /dev/null
@@ -1,1413 +0,0 @@
-<html xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-<head>
-<META http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>Concept: Collaborate to align interests and share understanding</title>
-<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
-<meta content="Concept" name="uma.type">
-<meta content="core_principle_collaborate" name="uma.name">
-<meta content="Collaborate to align interests and share understanding" name="uma.presentationName">
-<meta name="element_type" content="concept">
-<meta content="description" name="filetype">
-<meta name="role" content="">
-<link type="text/css" href="./../../../css/default.css" rel="StyleSheet">
-<script src="./../../../scripts/contentpage.js" type="text/javascript" language="JavaScript"></script><script type="text/javascript" language="JavaScript">
-                    backPath = './../../../';
-                </script>
-</head>
-<body onload="createSectionLinks('div', 'sectionHeading', './../../../images/');">
-<table width="100%" cellspacing="0" cellpadding="0" border="0">
-<tr>
-<td valign="top"><a name="Top"></a>
-<table cellpadding="0" cellspacing="0" border="0">
-<tr>
-<td nowrap="true" class="pageTitle">Concept: Collaborate to align interests and share understanding</td><td align="right" class="expandCollapseLink" width="100%"><a href="./../../../index.htm"></a><script src="./../../../scripts/treebrowser.js" type="text/javascript" language="JavaScript"></script></td>
-</tr>
-</table>
-<table cellspacing="0" cellpadding="0" border="0" width="100%">
-<tr>
-<td class="pageTitleSeparator"><img height="1" alt="" src="./../../../images/shim.gif"></td>
-</tr>
-</table>
-<div class="overview">
-<table cellpadding="0" cellspacing="0" border="0" width="97%">
-<tr>
-<td width="50"><img alt="" src="./../../../images/concept.gif"></td><td>
-<table cellpadding="0" cellspacing="0" border="0" class="overviewTable">
-<tr>
-<td valign="top">Develop collaborative practices that foster a healthy team environment. Good collaborative practices align the interests of project participants and help them develop a shared understanding of the project.</td>
-</tr>
-</table>
-</td>
-</tr>
-</table>
-</div>
-<div class="sectionHeading">Main Description</div>
-<div class="sectionContent">
-<table cellpadding="0" cellspacing="0" border="0" class="sectionTable">
-<tr valign="top">
-<td class="sectionTableCell"><H3>Collaborate to align interests and share understanding </H3>
-<P>Software is created by people with different interests and skills who must work together to create software effectively. Therefore develop collaborative practices that foster a healthy team environment. Good collaborative practices align the interests of project participants (e.g. development team, quality assurance, product stakeholders, customers) and help project participants develop a shared understanding of the project. </P>
-<H3>Practices </H3>
-<H4>Maintain a Common Understanding </H4>
-<P>Project participants require a common understanding of a project to cooperative effectively. Without a common understanding among project participants disorder sets in because they cannot align their interests and will work at cross purposes to one another. </P>
-<P>Therefore be proactive communicating and sharing information with project participants and do not assume everyone will just find what they need to know or has the same understanding of the project as everyone else. Use work products such as the vision and requirements to align the understanding of the stake holders and developers. Use the architecture to focus and align the interests of the developers. At the end of each iteration get agreement iteration goals have been reached and if not then what remedial actions must be taken. </P>The <a class=elementlinkwithusertext href="./resources/core_principle_focus,_9gocwMvoEdqukPpotm3DYg.html" guid="_9gocwMvoEdqukPpotm3DYg">Focus</a>&nbsp;principle helps to maintain a common understanding.<BR>
-<H4>Foster a High Trust Environment </H4>
-<P>People who do not feel safe will not communicate their ideas, take the initiative, or admit their ignorance. This leads to work environments where actions must be laboriously and expensively negotiated and work which must be carefully monitored and audited. </P>
-<P>Therefore take actions that will foster a high trust environment: </P>
-<UL>
-<LI>Manage by intent - create an environment where teams manage themselves and managers mentor teams to complete their objectives. 
-<LI>Tear down the walls � work to remove both the physical and mental barriers that inhibit development of a common understanding between project participants. 
-<LI>Walk mile (or a kilometer and a half) in someone else�s shoes � respect and try to understand the perspective of others before criticizing their ideas or responding to their criticism. </LI></UL>
-<H4>Share Responsibility<BR></H4>
-<P>When a person works alone communications can stop and they can �go dark� Their understanding of the project may become misaligned with the rest of the team. They may get into trouble and not ask for help, or not realize the team is in trouble. In the worse situations trust breaks down as people see the team working at cross purposes to their interests. </P>
-<P>Therefore, while project participants have primary responsibility for their work products, responsibility for work products is shared. Nothing is someone else�s job. It may mean either taking up slack and working with someone who�s lagging for some reason or asking for help. Experienced staff should be extra vigilant and watch over less experienced staff encouraging them to ask for help if necessary. </P>
-<P>The&nbsp;collaborative practice Foster a High Trust Environment reinforces sharing responsibility by making it safe for people to take the initiative, or to admit their ignorance. </P>
-<H4>Learn Continuously </H4>
-<P>Not only is software development a fast developing field where technical skills rapidly become obsolescent, it is also an experimental field where software is developed often by a process that resembles trial and error. Furthermore, software is developed by teams of people. </P>
-<P>Therefore continuously develop both your technical and interpersonal skills. Learn from the examples of your colleagues. Take the opportunity to be both a student and a teacher to your colleagues. Always increase your personal ability to overcome your own antagonism towards other team members. </P>
-<P>The&nbsp;<a class=elementlinkwithusertext href="./resources/core_principle_evolve,_GXiogMvoEdqukPpotm3DYg.html" guid="_GXiogMvoEdqukPpotm3DYg">Evolve</a> principle closely supports continuous learning. Learn Continuously helps develop trust.</P>
-<H4 style="MARGIN: 12pt 0in 3pt">Organize around the architecture</H4>
-<P class=MsoNormal style="MARGIN: 0in 0in 0pt">&nbsp;</P>
-<P class=MsoNormal style="MARGIN: 0in 0in 0pt">As projects grow in size, communication between team members becomes increasingly complex. </P>
-<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p>&nbsp;</o:p></P>
-<P class=MsoNormal style="MARGIN: 0in 0in 0pt">Therefore organize the team around the architecture of the system so all team members understand the overall system but can focus primarily on a subset of a system, that is, one or more subsystems are assigned to them. Organizing around the architecture also helps with communication by providing the team with a common vocabulary and shared mental model of the system. However, be watchful that individuals and teams organized this way do not form a "silo" mentality where they focus striclty on their sub-systems and become ignorant of the other subsystems.</P>
-<P><BR>&nbsp;</P></td>
-</tr>
-</table>
-</div>
-<table cellpadding="0" cellspacing="0" border="0" class="copyright">
-<tr>
-<td class="copyright"><p>
-    Copyright (c) 1987, 2006 IBM Corp. and others. All Rights Reserved.<br />
-    This program and the accompanying materials are made available under the<br />
-    <a href="http://www.eclipse.org/org/documents/epl-v10.php" target="_blank">Eclipse Public License v1.0</a> which
-    accompanies this distribution.
-</p></td>
-</tr>
-</table>
-</td>
-</tr>
-</table>
-</body>
-</html>
-#### 1
-<html xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-<head>
-<META http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>Concept: Collaborate to align interests and share understanding</title>
-<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
-<meta content="Concept" name="uma.type">
-<meta content="core_principle_collaborate" name="uma.name">
-<meta content="Collaborate to align interests and share understanding" name="uma.presentationName">
-<meta name="element_type" content="concept">
-<meta content="description" name="filetype">
-<meta name="role" content="">
-<link type="text/css" href="./../../../css/default.css" rel="StyleSheet">
-<script src="./../../../scripts/contentpage.js" type="text/javascript" language="JavaScript"></script><script type="text/javascript" language="JavaScript">
-                    backPath = './../../../';
-                </script>
-</head>
-<BoDy>
-<table width="100%" cellspacing="0" cellpadding="0" border="0">
-<tr>
-<td valign="top"><a name="Top"></a>
-<table cellpadding="0" cellspacing="0" border="0">
-<tr>
-<td nowrap="true" class="pageTitle">Concept: Collaborate to align interests and share understanding</td><td align="right" class="expandCollapseLink" width="100%"><a href="./../../../index.htm"></a><script  src=./../../../scripts/treebrowser.js" type="text/javascript" language="JavaScript"></script></td>
-</tr>
-</table>
-<table cellspacing="0" cellpadding="0" border="0" width="100%">
-            <tr>              <td class="pageTitleSeparator">                <img height="1" alt="" src="../../images/shim.gif" />              </td>            </tr>
-</table>
-<div class="overview">
-<table cellpadding="0" cellspacing="0" border="0" width="97%">
-<tr>
-<td width="50"><img alt="" src="./../../../images/concept.gif"></td><td>
-<table cellpadding="0" cellspacing="0" border="0" class="overviewTable">
-<tr>
-<td valign="top">Develop collaborative practices that foster a healthy team environment. Good collaborative practices align the interests of project participants and help them develop a shared understanding of the project.</td>
-</tr>
-</table>
-</td>
-</tr>
-</table>
-</div>
-<div class="sectionHeading">Main Description</div>
-<div class="sectionContent">
-<table cellpadding="0" cellspacing="0" border="0" class="sectionTable">
-<tr valign="top">
-<td class="sectionTableCell"><H3>Collaborate to align interests and share understanding </H3>
-<P>Software is created by people with different interests and skills who must work together to create software effectively. Therefore develop collaborative practices that foster a healthy team environment. Good collaborative practices align the interests of project participants (e.g. development team, quality assurance, product stakeholders, customers) and help project participants develop a shared understanding of the project. </P>
-<H3>Practices </H3>
-<H4>Maintain a Common Understanding </H4>
-<P>Project participants require a common understanding of a project to cooperative effectively. Without a common understanding among project participants disorder sets in because they cannot align their interests and will work at cross purposes to one another. </P>
-<P>Therefore be proactive communicating and sharing information with project participants and do not assume everyone will just find what they need to know or has the same understanding of the project as everyone else. Use work products such as the vision and requirements to align the understanding of the stake holders and developers. Use the architecture to focus and align the interests of the developers. At the end of each iteration get agreement iteration goals have been reached and if not then what remedial actions must be taken. </P>The <a class=elementlinkwithusertext href="./resources/core_principle_focus,_9gocwMvoEdqukPpotm3DYg.html" guid="_9gocwMvoEdqukPpotm3DYg">Focus</a>&nbsp;principle helps to maintain a common understanding.<BR>
-<H4>Foster a High Trust Environment </H4>
-<P>People who do not feel safe will not communicate their ideas, take the initiative, or admit their ignorance. This leads to work environments where actions must be laboriously and expensively negotiated and work which must be carefully monitored and audited. </P>
-<P>Therefore take actions that will foster a high trust environment: </P>
-<UL>
-<LI>Manage by intent - create an environment where teams manage themselves and managers mentor teams to complete their objectives. 
-<LI>Tear down the walls � work to remove both the physical and mental barriers that inhibit development of a common understanding between project participants. 
-<LI>Walk mile (or a kilometer and a half) in someone else�s shoes � respect and try to understand the perspective of others before criticizing their ideas or responding to their criticism. </LI></UL>
-<H4>Share Responsibility<BR></H4>
-<P>When a person works alone communications can stop and they can �go dark� Their understanding of the project may become misaligned with the rest of the team. They may get into trouble and not ask for help, or not realize the team is in trouble. In the worse situations trust breaks down as people see the team working at cross purposes to their interests. </P>
-<P>Therefore, while project participants have primary responsibility for their work products, responsibility for work products is shared. Nothing is someone else�s job. It may mean either taking up slack and working with someone who�s lagging for some reason or asking for help. Experienced staff should be extra vigilant and watch over less experienced staff encouraging them to ask for help if necessary. </P>
-<P>The&nbsp;collaborative practice Foster a High Trust Environment reinforces sharing responsibility by making it safe for people to take the initiative, or to admit their ignorance. </P>
-<H4>Learn Continuously </H4>
-<P>Not only is software development a fast developing field where technical skills rapidly become obsolescent, it is also an experimental field where software is developed often by a process that resembles trial and error. Furthermore, software is developed by teams of people. </P>
-<P>Therefore continuously develop both your technical and interpersonal skills. Learn from the examples of your colleagues. Take the opportunity to be both a student and a teacher to your colleagues. Always increase your personal ability to overcome your own antagonism towards other team members. </P>
-<P>The&nbsp;<a class=elementlinkwithusertext href="./resources/core_principle_evolve,_GXiogMvoEdqukPpotm3DYg.html" guid="_GXiogMvoEdqukPpotm3DYg">Evolve</a> principle closely supports continuous learning. Learn Continuously helps develop trust.</P>
-<H4 style="MARGIN: 12pt 0in 3pt">Organize around the architecture</H4>
-<P class=MsoNormal style="MARGIN: 0in 0in 0pt">&nbsp;</P>
-<P class=MsoNormal style="MARGIN: 0in 0in 0pt">As projects grow in size, communication between team members becomes increasingly complex. </P>
-<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p>&nbsp;</o:p></P>
-<P class=MsoNormal style="MARGIN: 0in 0in 0pt">Therefore organize the team around the architecture of the system so all team members understand the overall system but can focus primarily on a subset of a system, that is, one or more subsystems are assigned to them. Organizing around the architecture also helps with communication by providing the team with a common vocabulary and shared mental model of the system. However, be watchful that individuals and teams organized this way do not form a "silo" mentality where they focus striclty on their sub-systems and become ignorant of the other subsystems.</P>
-<P><BR>&nbsp;</P></td>
-</tr>
-</table>
-</div>
-<table cellpadding="0" cellspacing="0" border="0" class="copyright">
-<tr>
-<td class="copyright"><p>
-    Copyright (c) 1987, 2006 IBM Corp. and others. All Rights Reserved.<br />
-    This program and the accompanying materials are made available under the<br />
-    <a href="http://www.eclipse.org/org/documents/epl-v10.php" target="_blank">Eclipse Public License v1.0</a> which
-    accompanies this distribution.
-</p></td>
-</tr>
-</table>
-</td>
-</tr>
-</table>
-</body>
-</html>
-#### 2
-<html xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-<head>
-<META http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>Concept: Collaborate to align interests and share understanding</title>
-<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
-<meta content="Concept" name="uma.type">
-<meta content="core_principle_collaborate" name="uma.name">
-<meta content="Collaborate to align interests and share understanding" name="uma.presentationName">
-<meta name="element_type" content="concept">
-<meta content="description" name="filetype">
-<meta name="role" content="">
-<link type="text/css" href="./../../../css/default.css" rel="StyleSheet">
-<script src="./../../../scripts/contentpage.js" type="text/javascript" language="JavaScript"></script><script type="text/javascript" language="JavaScript">
-                    backPath = './../../../';
-                </script>
-</head>
-<body onload="createSectionLinks('div', 'sectionHeading', './../../../images/');">
-<table width="100%" cellspacing="0" cellpadding="0" border="0">
-<tr>
-<td valign="top"><a name="Top"></a>
-<table cellpadding="0" cellspacing="0" border="0">
-<tr>
-<td nowrap="true" class="pageTitle">Concept: Collaborate to align interests and share understanding</td><td align="right" class="expandCollapseLink" width="100%"><a href="./../../../index.htm"></a><scRipT  SrC=./../../../../../../../../scripts/treebrowser.js" type="text/javascript" language="JavaScript"></scripT></td>
-</tr>
-</table>
-<table cellspacing="0" cellpadding="0" border="0" wid<tr>
-<td class="pageTitleSeparator">                                <img height="1" alt="" src="./../../images/shim.gif" />
-              </td>
-
-
-</tr>tr>
-</table>
-<div class="overview">
-<table cellpadding="0" cellspacing="0" border="0" width="97%">
-<tr>
-<td width="50"><img alt="" src="./../../../images/concept.gif"></td><td>
-<table cellpadding="0" cellspacing="0" border="0" class="overviewTable">
-<tr>
-<td valign="top">Develop collaborative practices that foster a healthy team environment. Good collaborative practices align the interests of project participants and help them develop a shared understanding of the project.</td>
-</tr>
-</table>
-</td>
-</tr>
-</table>
-</div>
-<div class="sectionHeading">Main Description</div>
-<div class="sectionContent">
-<table cellpadding="0" cellspacing="0" border="0" class="sectionTable">
-<tr valign="top">
-<td class="sectionTableCell"><H3>Collaborate to align interests and share understanding </H3>
-<P>Software is created by people with different interests and skills who must work together to create software effectively. Therefore develop collaborative practices that foster a healthy team environment. Good collaborative practices align the interests of project participants (e.g. development team, quality assurance, product stakeholders, customers) and help project participants develop a shared understanding of the project. </P>
-<H3>Practices </H3>
-<H4>Maintain a Common Understanding </H4>
-<P>Project participants require a common understanding of a project to cooperative effectively. Without a common understanding among project participants disorder sets in because they cannot align their interests and will work at cross purposes to one another. </P>
-<P>Therefore be proactive communicating and sharing information with project participants and do not assume everyone will just find what they need to know or has the same understanding of the project as everyone else. Use work products such as the vision and requirements to align the understanding of the stake holders and developers. Use the architecture to focus and align the interests of the developers. At the end of each iteration get agreement iteration goals have been reached and if not then what remedial actions must be taken. </P>The <a class=elementlinkwithusertext href="./resources/core_principle_focus,_9gocwMvoEdqukPpotm3DYg.html" guid="_9gocwMvoEdqukPpotm3DYg">Focus</a>&nbsp;principle helps to maintain a common understanding.<BR>
-<H4>Foster a High Trust Environment </H4>
-<P>People who do not feel safe will not communicate their ideas, take the initiative, or admit their ignorance. This leads to work environments where actions must be laboriously and expensively negotiated and work which must be carefully monitored and audited. </P>
-<P>Therefore take actions that will foster a high trust environment: </P>
-<UL>
-<LI>Manage by intent - create an environment where teams manage themselves and managers mentor teams to complete their objectives. 
-<LI>Tear down the walls � work to remove both the physical and mental barriers that inhibit development of a common understanding between project participants. 
-<LI>Walk mile (or a kilometer and a half) in someone else�s shoes � respect and try to understand the perspective of others before criticizing their ideas or responding to their criticism. </LI></UL>
-<H4>Share Responsibility<BR></H4>
-<P>When a person works alone communications can stop and they can �go dark� Their understanding of the project may become misaligned with the rest of the team. They may get into trouble and not ask for help, or not realize the team is in trouble. In the worse situations trust breaks down as people see the team working at cross purposes to their interests. </P>
-<P>Therefore, while project participants have primary responsibility for their work products, responsibility for work products is shared. Nothing is someone else�s job. It may mean either taking up slack and working with someone who�s lagging for some reason or asking for help. Experienced staff should be extra vigilant and watch over less experienced staff encouraging them to ask for help if necessary. </P>
-<P>The&nbsp;collaborative practice Foster a High Trust Environment reinforces sharing responsibility by making it safe for people to take the initiative, or to admit their ignorance. </P>
-<H4>Learn Continuously </H4>
-<P>Not only is software development a fast developing field where technical skills rapidly become obsolescent, it is also an experimental field where software is developed often by a process that resembles trial and error. Furthermore, software is developed by teams of people. </P>
-<P>Therefore continuously develop both your technical and interpersonal skills. Learn from the examples of your colleagues. Take the opportunity to be both a student and a teacher to your colleagues. Always increase your personal ability to overcome your own antagonism towards other team members. </P>
-<P>The&nbsp;<a class=elementlinkwithusertext href="./resources/core_principle_evolve,_GXiogMvoEdqukPpotm3DYg.html" guid="_GXiogMvoEdqukPpotm3DYg">Evolve</a> principle closely supports continuous learning. Learn Continuously helps develop trust.</P>
-<H4 style="MARGIN: 12pt 0in 3pt">Organize around the architecture</H4>
-<P class=MsoNormal style="MARGIN: 0in 0in 0pt">&nbsp;</P>
-<P class=MsoNormal style="MARGIN: 0in 0in 0pt">As projects grow in size, communication between team members becomes increasingly complex. </P>
-<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p>&nbsp;</o:p></P>
-<P class=MsoNormal style="MARGIN: 0in 0in 0pt">Therefore organize the team around the architecture of the system so all team members understand the overall system but can focus primarily on a subset of a system, that is, one or more subsystems are assigned to them. Organizing around the architecture also helps with communication by providing the team with a common vocabulary and shared mental model of the system. However, be watchful that individuals and teams organized this way do not form a "silo" mentality where they focus striclty on their sub-systems and become ignorant of the other subsystems.</P>
-<P><BR>&nbsp;</P></td>
-</tr>
-</table>
-</div>
-<table cellpadding="0" cellspacing="0" border="0" class="copyright">
-<tr>
-<td class="copyright"><p>
-    Copyright (c) 1987, 2006 IBM Corp. and others. All Rights Reserved.<br />
-    This program and the accompanying materials are made available under the<br />
-    <a href="http://www.eclipse.org/org/documents/epl-v10.php" target="_blank">Eclipse Public License v1.0</a> which
-    accompanies this distribution.
-</p></td>
-</tr>
-</table>
-</td>
-</tr>
-</table>
-</body>
-</html>
-#### 3
-<html xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-<head>
-<META http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>Task: Assess Results</title>
-<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
-<meta content="Task" name="uma.type">
-<meta content="assess_results" name="uma.name">
-<meta content="Assess Results" name="uma.presentationName">
-<meta content="Discipline:project_management:Project Management" name="uma.category">
-<meta name="element_type" content="activity">
-<meta content="description" name="filetype">
-<meta name="role" content="Project Manager">
-<link type="text/css" href="./../../css/default.css" rel="StyleSheet">
-<script src="./../../scripts/contentpage.js" type="text/javascript" language="JavaScript"></script><script src="./../../scripts/steps.js" type="text/javascript" language="JavaScript"></script><script type="text/javascript" language="JavaScript">
-					backPath = './../../';
-					imgPath = './../../images/';
-				</script>
-<!-- epfwiki head start -->
-<link type='text/css' href='http://localhost/stylesheets/epfwiki.css' rel='StyleSheet'/>
-<script src='http://localhost/javascripts/wiki.js' type='text/javascript' language='JavaScript'></script>
-<!-- epfwiki head end -->
-</head>
-<body onload="createSectionLinks('div', 'sectionHeading', './../../images/'); createStepLinks('div', 'stepHeading');">
-<table width="99%" cellspacing="0" cellpadding="0" border="0">
-<tr>
-<td valign="top">
-<table cellpadding="0" cellspacing="0" border="0">
-<tr>
-<td nowrap="true" class="pageTitle">Task: Assess Results</td><td align="right" class="expandCollapseLink" width="99%"><a href="./../../index.htm"></a><script src="./../../scripts/treebrowser.js" type="text/javascript" language="JavaScript"></script></td>
-</tr>
-</table>
-<table cellspacing="0" cellpadding="0" border="0" width="99%">
-<tr>
-<td class="pageTitleSeparator"><img height="1" alt="" src="./../../images/shim.gif"></td>
-</tr>
-</table>
-<div class="overview">
-<table cellpadding="0" cellspacing="0" border="0" width="97%">
-<tr>
-<td width="50"><img alt="" src="./../../images/task.gif"></td><td>
-<table cellpadding="0" cellspacing="0" border="0" class="overviewTable">
-<tr>
-<td valign="top">Determine success or failure of the iteration. Apply the lessons learned to modify the project or improve the process.</td>
-</tr>
-<tr>
-<td>Discipline:&nbsp;
-					<a href="./../../openup_basic/disciplines/project_management,_0TqQ4MlgEdmt3adZL5Dmdw.html" guid="_0TqQ4MlgEdmt3adZL5Dmdw">Project Management</a></td>
-</tr>
-</table>
-</td>
-</tr>
-</table>
-</div>
-<div class="sectionHeading">Purpose</div>
-<div class="sectionContent">
-<table cellpadding="0" cellspacing="0" border="0" class="sectionTable">
-<tr valign="top">
-<td class="sectionTableCell">To assess the results of planned goals and objectives.</td>
-</tr>
-</table>
-</div>
-<div class="sectionHeading">Relationships</div>
-<div class="sectionContent">
-<table cellpadding="0" cellspacing="0" border="0" class="sectionTable">
-<tr valign="top">
-<th scope="row" class="sectionTableHeading">Roles</th><td width="42%" class="sectionTableCell">Primary Performer:
-								<ul>
-<li>
-<a href="./../../openup_basic/roles/project_manager,_0a0o0MlgEdmt3adZL5Dmdw.html" guid="_0a0o0MlgEdmt3adZL5Dmdw">Project Manager</a>
-</li>
-</ul>
-</td><td class="sectionTableCell">Additional Performers:
-								<ul>
-<li>
-<a href="./../../openup_basic/roles/stakeholder,_dTa6gMAYEdqX-s4mWhkyqQ.html" guid="_dTa6gMAYEdqX-s4mWhkyqQ">Stakeholder</a>
-</li>
-<li>
-<a href="./../../openup_basic/roles/any_role,_0dsWoMlgEdmt3adZL5Dmdw.html" guid="_0dsWoMlgEdmt3adZL5Dmdw">Any Role</a>
-</li>
-</ul>
-</td>
-</tr>
-<tr valign="top">
-<th scope="row" class="sectionTableHeading">Inputs</th><td width="42%" class="sectionTableCell">Mandatory:
-								<ul>
-<li>
-<a href="./../../openup_basic/workproducts/iteration_plan,_0aQBEslgEdmt3adZL5Dmdw.html" guid="_0aQBEslgEdmt3adZL5Dmdw">Iteration Plan</a>
-</li>
-<li>
-<a href="./../../openup_basic/workproducts/project_plan,_0a6vcMlgEdmt3adZL5Dmdw.html" guid="_0a6vcMlgEdmt3adZL5Dmdw">Project Plan</a>
-</li>
-</ul>
-</td><td class="sectionTableCell">Optional:
-								<ul>
-<li>
-<a href="./../../openup_basic/workproducts/status_assessment,_0bA2EMlgEdmt3adZL5Dmdw.html" guid="_0bA2EMlgEdmt3adZL5Dmdw">Status Assessment</a>
-</li>
-<li>
-<a href="./../../openup_basic/workproducts/vision,_0WVxcMlgEdmt3adZL5Dmdw.html" guid="_0WVxcMlgEdmt3adZL5Dmdw">Vision</a>
-</li>
-</ul>
-</td>
-</tr>
-<tr valign="top">
-<th scope="row" class="sectionTableHeading">Outputs</th><td colspan="2" class="sectionTableCell">
-<ul>
-<li>
-<a href="./../../openup_basic/workproducts/status_assessment,_0bA2EMlgEdmt3adZL5Dmdw.html" guid="_0bA2EMlgEdmt3adZL5Dmdw">Status Assessment</a>
-</li>
-</ul>
-</td>
-</tr>
-</table>
-</div>
-<div class="sectionHeading">Steps</div>
-<div class="sectionContent">
-<table cellpadding="0" cellspacing="0" border="0" class="sectionTable">
-<tr>
-<td class="sectionTableCell">
-<div class="stepHeading">Assess results</div>
-<div class="stepContent">
-<table cellpadding="0" cellspacing="0" border="0" class="stepTable">
-<tr valign="top">
-<td><p>
-    The project manager needs to regularly assess the results as planned. For example, in iterative development, this will
-    be done at the end of each iteration. Even if&nbsp;he or she is not&nbsp;using iterative development, the manager
-    should define quantifiable goals for a given period to facilitate regular assessment of the project's progress.
-</p>
-<p>
-    Below&nbsp;are questions that project managers can ask themselves and the rest of the team to help know the project
-    status:
-</p>
-<div dir="ltr" style="MARGIN-LEFT: 2em; MARGIN-RIGHT: 0px">
-    <ul>
-        <li>
-            &nbsp;Were the defined goals and objectives met?
-        </li>
-        <li style="LIST-STYLE-TYPE: none">
-            <ul>
-                <li>
-                    Were risks reduced or eliminated?
-                </li>
-                <li>
-                    Did the release meet its functionality and quality goals? Did the release meet performance and capacity
-                    goals?
-                </li>
-            </ul>
-        </li>
-        <li>
-            Are changes to the project plan required?
-        </li>
-        <li>
-            What portion of the current release will be baselined? What portion will need to be reworked?
-        </li>
-        <li>
-            Have new risks been identified?
-        </li>
-        <li>
-            Have there been external changes such as changes in the marketplace, in the user community, or in the
-            requirements?
-        </li>
-    </ul>
-</div>
-<p dir="ltr">
-    One very important aspect of project assessment is to base the assessments on objective measures, as much as it is
-    possible to do so. For example, to assess that a given requirement is developed, the project manager must check that
-    the corresponding test cases were successfully run against it, rather than considering it done when the implementation
-    is done.
-</p></td>
-</tr>
-</table>
-</div>
-<div class="stepHeading">Gather stakeholder feedback</div>
-<div class="stepContent">
-<table cellpadding="0" cellspacing="0" border="0" class="stepTable">
-<tr valign="top">
-<td><p>
-    Assessing the results is also a good opportunity to get feedback from the stakeholders.
-</p>
-<p>
-    This feedback can be gathered through ways such as giving stakeholders informal demonstrations of what's developed as
-
-    the project progress and sending partial deliveries to stakeholders. However the feedback is gathered, it is good to
-    record changes that could have an impact on the project's scope or duration.
-</p></td>
-</tr>
-</table>
-</div>
-<div class="stepHeading">Refine project scope and duration</div>
-<div class="stepContent">
-<table cellpadding="0" cellspacing="0" border="0" class="stepTable">
-<tr valign="top">
-<td><p>
-    Depending on the result assessment and the stakeholders' feedback, the project manager could need to revise the project
-    plan to adapt to those changes. If a change affects defined project milestones, the project manager should consult with
-    the stakeholders before committing to the changes.
-</p>
-<p>
-    Necessary changes can also encompass the need to acquire new resources, to absorb an unplanned effort increase, or be
-    something specialized able to implement a specific change request.
-</p></td>
-</tr>
-</table>
-</div>
-<div class="stepHeading">Close-out phase</div>
-<div class="stepContent">
-<table cellpadding="0" cellspacing="0" border="0" class="stepTable">
-<tr valign="top">
-<td><p>
-    This step is optional and must be performed only when the assessed period coincide with the end of a phase.
-</p>
-<p>
-    The end of&nbsp;a phase represents a point of synchronization of technical and management expectations and closure for
-    a project. In iterative development, it coincides&nbsp;with the end of an iteration. However, phase ends mark a point
-    when it is possible to consider re-scoping and even re-contracting a project. For example, the inception phase is
-    exploratory and may be appropriately performed under a time-and-materials contract or a cost-plus type of contract. The
-    elaboration phase could be done as a fixed-price contract or a cost-plus contract, depending on the extent to which the
-    development is unusual. By the construction and transition phases, enough is known about the system that fixed-price
-    contracts are more appealing to the acquirer and vendor.
-</p>
-<p>
-    The phase end is marked by a major milestone and a corresponding milestone review. The degree of formality of
-    these&nbsp;reviews depends on the project. The important thing is to take advantage&nbsp;of this milestone review to
-    achieve agreement among all stakeholders on the current state of the project. For more information, refer to <a class="elementLinkWithType" href="./../../openup_basic/guidances/concepts/milestones,_HNxbwMBJEdqSgKaj2SZBmg.html" guid="_HNxbwMBJEdqSgKaj2SZBmg">Concept: Milestones</a>.
-</p></td>
-</tr>
-</table>
-</div>
-</td>
-</tr>
-</table>
-</div>
-<div class="sectionHeading">More Information</div>
-<div class="sectionContent">
-<table cellpadding="0" cellspacing="0" border="0" class="sectionTable">
-<tr valign="top">
-<th scope="row" class="sectionTableHeading">Concepts</th><td class="sectionTableCell">
-<ul>
-<li>
-<a href="./../../openup_basic/guidances/concepts/milestones,_HNxbwMBJEdqSgKaj2SZBmg.html" guid="_HNxbwMBJEdqSgKaj2SZBmg">Milestones</a>
-</li>
-</ul>
-</td>
-</tr>
-<tr valign="top">
-<th scope="row" class="sectionTableHeading">Guidelines</th><td class="sectionTableCell">
-<ul>
-<li>
-<a href="./../../openup_basic/guidances/guidelines/status_assessment,_0daCwMlgEdmt3adZL5Dmdw.html" guid="_0daCwMlgEdmt3adZL5Dmdw">Status Assessment Representation</a>
-</li>
-<li>
-<a href="./../../openup_basic/guidances/guidelines/type_freq_assessments,_pI_-YMA5EdqSgKaj2SZBmg.html" guid="_pI_-YMA5EdqSgKaj2SZBmg">Type and Frequency of Assessments</a>
-</li>
-</ul>
-</td>
-</tr>
-</table>
-</div>
-<table cellpadding="0" cellspacing="0" border="0" class="copyright">
-<tr>
-<td class="copyright"><p>
-    Copyright (c) 1987, 2006 IBM Corp. and others. All Rights Reserved.<br />
-    This program and the accompanying materials are made available under the<br />
-    <a href="http://www.eclipse.org/org/documents/epl-v10.php" target="_blank">Eclipse Public License v1.0</a> which
-    accompanies this distribution.
-</p></td>
-</tr>
-</table>
-</td>
-</tr>
-</table>
-
-<!-- epfwiki iframe start -->
-<script language="JavaScript">
-
-    aURL = "http://localhost/epfwiki/toolbar?url=" + document.location.href;
-
-    document.write("  <div id=\"topbar\">\n");
-
-    document.write("    <iframe width=\"100%\" height=\"25\" frameborder=\"0\" src=\"" + aURL +  "\" scrolling=\"no\" marginwidth=\"0\">\n");
-
-    document.writeln("   </div>");
-
-  </script>
-<!-- epfwiki iframe end -->
-</body>
-</html>
-#### 4
-<html xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-<head>
-<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Guideline: Architectural Analysis for J2EE Applications</title>
-<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
-<meta name="element_type" content="other">
-<meta content="description" name="filetype">
-<meta name="role" content="">
-<link type="text/css" href="./../../../css/default.css" rel="StyleSheet">
-<script src="./../../../scripts/contentpage.js" type="text/javascript" language="JavaScript"></script><script type="text/javascript" language="JavaScript">
-					backPath = './../../../';
-				</script>
-</head>
-<body onload="createSectionLinks('div', 'sectionHeading', './../../../images/');">
-<table width="99%" cellspacing="0" cellpadding="0" border="0">
-<tr>
-<td valign="top"><a name="Top"></a>
-<table cellpadding="0" cellspacing="0" border="0">
-<tr>
-<td class="pageTitle">Guideline: Architectural Analysis for J2EE Applications</td>
-</tr>
-</table>
-<table cellspacing="0" cellpadding="0" border="0" width="99%">
-<tr>
-<td class="pageTitleSeparator"><img height="1" alt="" src="./../../../images/shim.gif"></td>
-</tr>
-</table>
-<div class="overview">
-<table cellpadding="0" cellspacing="0" border="0" width="97%">
-<tr>
-<td width="50"><img alt="" src="./../../../images/guidance.gif"></td><td>
-<table cellpadding="0" cellspacing="0" border="0" class="overviewTable">
-<tr>
-<td valign="top">This guideline discusses some of the technologies provided by J2EE that the Software Architect needs to consider.</td>
-</tr>
-</table>
-</td>
-</tr>
-</table>
-</div>
-<div class="sectionHeading">Relationships</div>
-<div class="sectionContent">
-<table cellpadding="0" cellspacing="0" border="0" class="sectionTable">
-<tr valign="top">
-<th scope="row" class="sectionTableHeading">Related Elements</th><td class="sectionTableCell">
-<ul>
-<li>
-<a href="./../../../rup/tasks/architectural_analysis,{8CB48402-D4C5-4E17-BB33-507315CB1BBF}.html" guid="{8CB48402-D4C5-4E17-BB33-507315CB1BBF}">Architectural Analysis</a>
-</li>
-</ul>
-</td>
-</tr>
-</table>
-</div>
-<div class="sectionHeading">Main Description</div>
-<div class="sectionContent">
-<table cellpadding="0" cellspacing="0" border="0" class="sectionTable">
-<tr valign="top">
-<td class="sectionTableCell"><h3>
-    <a id="Introduction" name="Introduction"></a>Introduction
-</h3>
-<p>
-    <a class="elementLink" href="./../../../rup/tasks/architectural_analysis,{8CB48402-D4C5-4E17-BB33-507315CB1BBF}.html" guid="{8CB48402-D4C5-4E17-BB33-507315CB1BBF}">Architectural Analysis</a> is where the <a class="elementLink" href="./../../../rup/roles/rup_software_architect,{4AC346F0-E6FC-4D2C-8410-2EDF8DDDC91D}.html" guid="{4AC346F0-E6FC-4D2C-8410-2EDF8DDDC91D}">Software Architect</a> determines how to best leverage the technologies
-    provided by the <a class="elementLink" href="./../../../rup_j2ee_plug_in/guidances/concepts/java_2_platform_enterprise_edition_j2ee_overview,1.527482214591853E-307.html" guid="1.527482214591853E-307">Java 2 Platform Enterprise Edition (J2EE) Overview</a> to meet both the functional and
-    nonfunctional requirements of the system. This guideline discusses some of those technologies.
-</p>
-<h3>
-    <a id="J2EE_Deployment_Configurations" name="J2EE_Deployment_Configurations"></a>J2EE Deployment Configurations
-</h3>
-<p>
-    J2EE supports a number of <a class="elementLink" href="./../../../rup_j2ee_plug_in/guidances/concepts/j2ee_deployment_configurations,7.671163061311939E-306.html" guid="7.671163061311939E-306">J2EE Deployment Configurations</a>.&nbsp;Selecting&nbsp;a particular deployment
-    configuration is an important step in Architectural Analysis as it becomes the foundation on which the initial
-    architecture is based.
-</p>
-<p>
-    Selecting a J2EE deployment configuration drives the definition of the initial <a class="elementLink" href="./../../../rup/workproducts/rup_deployment_model,{5981B6BE-2FD1-4984-AA94-2F7428439BA6}.html" guid="{5981B6BE-2FD1-4984-AA94-2F7428439BA6}">Deployment Model</a>.&nbsp;The selected J2EE deployment configuration
-    defines the configuration of physical nodes (that is, machines) and logical nodes (<a class="elementLinkWithUserText" href="./../../../rup_j2ee_plug_in/guidances/concepts/java_2_platform_enterprise_edition_j2ee_overview,1.527482214591853E-307.html" guid="1.527482214591853E-307">J2EE containers</a>).&nbsp;This is where you decide whether or not you have a separate
-    Web server and an EJB server, and whether your clients are browsers using HTTP or are fat application clients.
-</p>
-<p>
-    Each of these deployment configurations exhibits different characteristics, so one should be selected based upon a
-    number of factors. Some factors that should be considered when selecting a deployment configuration include:
-    maintainability (how do you isolate changes in one tier so they don't affect other tiers, how easy is it to deploy
-    upgrades?), performance and scalability (how easy is it to add additional computing resources?), and reliability (what
-    happens if one of the resources goes down?).
-</p>
-<p>
-    The selection of a deployment configuration constrains a number of other architectural decisions regarding the
-    architectural mechanisms that must be defined, the application's concurrency (see <a class="elementLinkWithType" href="./../../../rup/tasks/describe_runtime_architecture,{4D35C038-A2D0-48B8-9ECD-52717FEAE33A}.html" guid="{4D35C038-A2D0-48B8-9ECD-52717FEAE33A}">Task: Describe the Run-time Architecture</a>), and the application's
-    distribution (see <a class="elementLinkWithType" href="./../../../rup/tasks/describe_distribution,{6A112808-0A90-427A-BAB9-E14F3FBF72B5}.html" guid="{6A112808-0A90-427A-BAB9-E14F3FBF72B5}">Task: Describe Distribution</a>).&nbsp;
-</p>
-<h3>
-    <a id="J2EE_Mechanisms" name="J2EE_Mechanisms"></a>J2EE Mechanisms
-</h3>
-<p>
-    The <a class="elementLink" href="./../../../rup_j2ee_plug_in/guidances/concepts/java_2_platform_enterprise_edition_j2ee_overview,1.527482214591853E-307.html" guid="1.527482214591853E-307">Java 2 Platform Enterprise Edition (J2EE) Overview</a> provides a number of mechanisms
-    that support the development of multi-tier enterprise systems (persistency, inter-process communication, transaction
-    management, security, etc.).&nbsp;During Architectural Analysis, the Software Architect defines what needs to be built,
-    as opposed to what will be provided by the J2EE platform.
-</p>
-<p>
-    Effective management of application state is an important aspect of designing distributed applications. For an overview
-    of some of the common design considerations and mechanisms for state management in a J2EE application, see <a class="elementLinkWithType" href="./../../../rup_j2ee_plug_in/guidances/guidelines/designing_state_for_j2ee_applications,7.896195949843941E-306.html" guid="7.896195949843941E-306">Guideline: Designing State for J2EE Applications</a>.
-</p>
-<br />
-<br /></td>
-</tr>
-</table>
-</div>
-<table cellpadding="0" cellspacing="0" border="0" class="copyright">
-<tr>
-<td class="copyright"><p>
-    &copy; &nbsp;Copyright IBM Corp.&nbsp;1987, 2005. &nbsp;All Rights Reserved.
-</p></td>
-</tr>
-</table>
-</td><td width="24" valign="top"></td><td width="1%" valign="top">
-<p>
-<a href="./../../../index.htm"></a>
-</p>
-<script src="./../../../scripts/treebrowser.js" type="text/javascript" language="JavaScript"></script></td>
-</tr>
-</table>
-
-<!-- epfwiki include start -->
-<script language="Javascript">
-// load prototype library
-var html_doc = document.getElementsByTagName('head').item(0);
-var js = document.createElement('script');
-js.setAttribute('language','Javascript');
-js.setAttribute('type','text/javascript');
-js.setAttribute('src',"/javascripts/prototype.js");
-html_doc.appendChild(js);
-// load stylesheet for the stuff that epfwiki includes
-var ss = document.createElement('link');
-ss.setAttribute('type', 'text/css');
-ss.setAttribute('href', '/stylesheets/epfwiki_includes.css');
-ss.setAttribute('rel','StyleSheet');
-html_doc.appendChild(ss);
-</script>
-
-<script language="Javascript">
-function epfwiki_includes(){
-     var url = '/includes/header?url='+document.location.href;
-     //var pars = 'url='+escape(document.location.href);
-     var target = 'epfwiki_header';
-     var myAjax = new Ajax.Updater(target, url, {method: 'get'});
-     var url = '/includes/footer?url='+document.location.href;
-     var target = 'epfwiki_footer';
-     var myAjax = new Ajax.Updater(target, url, {method: 'get'});
-}
-
-// creating epfwiki_footer
-var epfwiki_footer = document.createElement("div");
-epfwiki_footer.id="epfwiki_footer";
-epfwiki_footer.innerHTML="<img src='/images/busy.gif'></img>";
-document.body.appendChild(epfwiki_footer)
-
-// creating epfwiki_header
-var epfwiki_header = document.createElement("div");
-epfwiki_header.id="epfwiki_header";
-epfwiki_header.innerHTML="<img src='/images/busy.gif'></img>";
-document.body.insertBefore(epfwiki_header,document.body.firstChild);
-
-Event.observe(window, 'load', epfwiki, false);
-</script>
-<!-- epfwiki include end -->
-</body>
-
-</html>
-#### 5
-<html xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-
-  <head>
-
-    <meta name="generator" content="HTML Tidy for Windows (vers 14 February 2006), see www.w3.org" />
-
-    <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
-
-    <title>Concept: Collaborate to align interests and share understanding</title>
-
-    <meta content="text/html; charset=us-ascii" http-equiv="Content-Type" />
-
-    <meta content="Concept" name="uma.type" />
-
-    <meta content="core_principle_collaborate" name="uma.name" />
-
-    <meta content="Collaborate to align interests and share understanding" name="uma.presentationName" />
-
-    <meta name="element_type" content="concept" />
-
-    <meta content="description" name="filetype" />
-
-    <meta name="role" content="" />
-
-    <link type="text/css" href="./../../../css/default.css" rel="StyleSheet" />
-
-    <script src="./../../../scripts/contentpage.js" type="text/javascript" language="JavaScript"></script>
-
-    <script type="text/javascript" language="JavaScript">
-
-
-
-                    backPath = './../../../';
-
-
-
-                
-
-</script>
-
-  </head>
-
-  <body>
-
-    <table width="100%" cellspacing="0" cellpadding="0" border="0">
-
-      <tr>
-
-        <td valign="top">
-
-          <a name="Top"></a>
-
-          <table cellpadding="0" cellspacing="0" border="0">
-
-            <tr>
-
-              <td nowrap="true" class="pageTitle">Concept: Collaborate to align interests and share understanding</td>
-
-              <td align="right" class="expandCollapseLink" width="100%">
-
-                <a href="./../../../index.htm"></a>
-
-                <!-- treebrowser tag -->
-
-              </td>
-
-            </tr>
-
-          </table>
-
-          <table cellspacing="0" cellpadding="0" border="0" width="100%">
-
-            <tr>
-
-              <td class="pageTitleSeparator">
-
-                <img height="1" alt="" src="./../../../images/shim.gif" />
-
-              </td>
-
-            </tr>
-
-          </table>
-
-          <div class="overview">
-
-            <table cellpadding="0" cellspacing="0" border="0" width="97%">
-
-              <tr>
-
-                <td width="50">
-
-                  <img alt="" src="./../../../images/concept.gif" />
-
-                </td>
-
-                <td>
-
-                  <table cellpadding="0" cellspacing="0" border="0" class="overviewTable">
-
-                    <tr>
-
-                      <td valign="top">Develop collaborative practices that foster a healthy team environment. Good collaborative practices align the interests of project participants and help them develop a shared understanding of the project.</td>
-
-                    </tr>
-
-                  </table>
-
-                </td>
-
-              </tr>
-
-            </table>
-
-          </div>
-
-          <div class="sectionHeading">Main Description</div>
-
-          <div class="sectionContent">
-
-            <table cellpadding="0" cellspacing="0" border="0" class="sectionTable">
-
-              <tr valign="top">
-
-                <td class="sectionTableCell">
-
-                <h3>Collaborate to align interests and share understanding</h3>
-
-                <p>Software is created by people with different interests and skills who must work together to create software effectively. Therefore develop collaborative practices that foster a healthy team environment. Good collaborative practices align the interests of project participants (e.g. development team, quality assurance, product stakeholders, customers) and help project participants develop a shared understanding of the project.</p>
-
-                <h3>Practices</h3>
-
-                <h4>Maintain a Common Understanding</h4>
-
-                <p>Project participants require a common understanding of a project to cooperative effectively. Without a common understanding among project participants disorder sets in because they cannot align their interests and will work at cross purposes to one another.</p>
-
-                <p>Therefore be proactive communicating and sharing information with project participants and do not assume everyone will just find what they need to know or has the same understanding of the project as everyone else. Use work products such as the vision and requirements to align the understanding of the stake holders and developers. Use the architecture to focus and align the interests of the developers. At the end of each iteration get agreement iteration goals have been reached and if not then what remedial actions must be taken.</p>The 
-
-                <a class="elementlinkwithusertext" href="./resources/core_principle_focus,_9gocwMvoEdqukPpotm3DYg.html" guid="_9gocwMvoEdqukPpotm3DYg">Focus</a>&nbsp;principle helps to maintain a common understanding.
-
-                <br />
-
-                <h4>Foster a High Trust Environment</h4>
-
-                <p>People who do not feel safe will not communicate their ideas, take the initiative, or admit their ignorance. This leads to work environments where actions must be laboriously and expensively negotiated and work which must be carefully monitored and audited.</p>
-
-                <p>Therefore take actions that will foster a high trust environment:</p>
-
-                <ul>
-
-                  <li>Manage by intent - create an environment where teams manage themselves and managers mentor teams to complete their objectives.</li>
-
-                  <li>Tear down the walls &ndash; work to remove both the physical and mental barriers that inhibit development of a common understanding between project participants.</li>
-
-                  <li>Walk mile (or a kilometer and a half) in someone else&rsquo;s shoes &ndash; respect and try to understand the perspective of others before criticizing their ideas or responding to their criticism.</li>
-
-                </ul>
-
-                <h4>Share Responsibility
-
-                <br /></h4>
-
-                <p>When a person works alone communications can stop and they can &ldquo;go dark&rdquo; Their understanding of the project may become misaligned with the rest of the team. They may get into trouble and not ask for help, or not realize the team is in trouble. In the worse situations trust breaks down as people see the team working at cross purposes to their interests.</p>
-
-                <p>Therefore, while project participants have primary responsibility for their work products, responsibility for work products is shared. Nothing is someone else&rsquo;s job. It may mean either taking up slack and working with someone who&rsquo;s lagging for some reason or asking for help. Experienced staff should be extra vigilant and watch over less experienced staff encouraging them to ask for help if necessary.</p>
-
-                <p>The&nbsp;collaborative practice Foster a High Trust Environment reinforces sharing responsibility by making it safe for people to take the initiative, or to admit their ignorance.</p>
-
-                <h4>Learn Continuously</h4>
-
-                <p>Not only is software development a fast developing field where technical skills rapidly become obsolescent, it is also an experimental field where software is developed often by a process that resembles trial and error. Furthermore, software is developed by teams of people.</p>
-
-                <p>Therefore continuously develop both your technical and interpersonal skills. Learn from the examples of your colleagues. Take the opportunity to be both a student and a teacher to your colleagues. Always increase your personal ability to overcome your own antagonism towards other team members.</p>
-
-                <p>The&nbsp;
-
-                <a class="elementlinkwithusertext" href="./resources/core_principle_evolve,_GXiogMvoEdqukPpotm3DYg.html" guid="_GXiogMvoEdqukPpotm3DYg">Evolve</a> principle closely supports continuous learning. Learn Continuously helps develop trust.</p>
-
-                <h4 style="MARGIN: 12pt 0in 3pt">Organize around the architecture</h4>
-
-                <p class="MsoNormal" style="MARGIN: 0in 0in 0pt">&nbsp;</p>
-
-                <p class="MsoNormal" style="MARGIN: 0in 0in 0pt">As projects grow in size, communication between team members becomes increasingly complex.</p>
-
-                <p class="MsoNormal" style="MARGIN: 0in 0in 0pt"><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?>
-
-                &nbsp;</p>
-
-                <p class="MsoNormal" style="MARGIN: 0in 0in 0pt">Therefore organize the team around the architecture of the system so all team members understand the overall system but can focus primarily on a subset of a system, that is, one or more subsystems are assigned to them. Organizing around the architecture also helps with communication by providing the team with a common vocabulary and shared mental model of the system. However, be watchful that individuals and teams organized this way do not form a "silo" mentality where they focus striclty on their sub-systems and become ignorant of the other subsystems.</p>
-
-                <p>
-
-                <br />&nbsp;</p></td>
-
-              </tr>
-
-            </table>
-
-          </div>
-
-          <table cellpadding="0" cellspacing="0" border="0" class="copyright">
-
-            <tr>
-
-              <td class="copyright">
-
-                <p>Copyright (c) 1987, 2006 IBM Corp. and others. All Rights Reserved.
-
-                <br />This program and the accompanying materials are made available under the
-
-                <br />
-
-                <a href="http://www.eclipse.org/org/documents/epl-v10.php" target="_blank">Eclipse Public License v1.0</a> which accompanies this distribution.</p>
-
-                <p>test</p>
-
-              </td>
-
-            </tr>
-
-          </table>
-
-        </td>
-
-      </tr>
-
-    </table>
-
-  </body>
-
-</html>
-#### 6
-<html xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-<head>
-<META http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>Task: Assess Results</title>
-<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
-<meta content="Task" name="uma.type">
-<meta content="assess_results" name="uma.name">
-<meta content="Assess Results" name="uma.presentationName">
-<meta content="Discipline:project_management:Project Management" name="uma.category">
-<meta name="element_type" content="activity">
-<meta content="description" name="filetype">
-<meta name="role" content="Project Manager">
-<link type="text/css" href="./../../css/default.css" rel="StyleSheet">
-<script src="./../../scripts/contentpage.js" type="text/javascript" language="JavaScript"></script><script src="./../../scripts/steps.js" type="text/javascript" language="JavaScript"></script><script type="text/javascript" language="JavaScript">
-                    backPath = './../../';
-                    imgPath = './../../images/';
-                </script>
-<!-- epfwiki head start -->
-<link type='text/css' href='http://localhost/stylesheets/epfwiki.css' rel='StyleSheet'/>
-<script src='http://localhost/javascripts/wiki.js' type='text/javascript' language='JavaScript'></script>
-<!-- epfwiki head end -->
-</head>
-<body onload="createSectionLinks('div', 'sectionHeading', './../../images/'); createStepLinks('div', 'stepHeading');">
-<table width="99%" cellspacing="0" cellpadding="0" border="0">
-<tr>
-<td valign="top">
-<table cellpadding="0" cellspacing="0" border="0">
-<tr>
-<td nowrap="true" class="pageTitle">Task: Assess Results</td><td align="right" class="expandCollapseLink" width="99%"><a href="./../../index.htm"></a><script src="./../../scripts/treebrowser.js" type="text/javascript" language="JavaScript"></script></td>
-</tr>
-</table>
-<table cellspacing="0" cellpadding="0" border="0" width="99%">
-<tr>
-<td class="pageTitleSeparator"><img height="1" alt="" src="./../../images/shim.gif"></td>
-</tr>
-</table>
-<div class="overview">
-<table cellpadding="0" cellspacing="0" border="0" width="97%">
-<tr>
-<td width="50"><img alt="" src="./../../images/task.gif"></td><td>
-<table cellpadding="0" cellspacing="0" border="0" class="overviewTable">
-<tr>
-<td valign="top">Determine success or failure of the iteration. Apply the lessons learned to modify the project or improve the process.</td>
-</tr>
-<tr>
-<td>Discipline:&nbsp;
-                    <a href="./../../openup_basic/disciplines/project_management,_0TqQ4MlgEdmt3adZL5Dmdw.html" guid="_0TqQ4MlgEdmt3adZL5Dmdw">Project Management</a></td>
-</tr>
-</table>
-</td>
-</tr>
-</table>
-</div>
-<div class="sectionHeading">Purpose</div>
-<div class="sectionContent">
-<table cellpadding="0" cellspacing="0" border="0" class="sectionTable">
-<tr valign="top">
-<td class="sectionTableCell">To assess the results of planned goals and objectives.</td>
-</tr>
-</table>
-</div>
-<div class="sectionHeading">Relationships</div>
-<div class="sectionContent">
-<table cellpadding="0" cellspacing="0" border="0" class="sectionTable">
-<tr valign="top">
-<th scope="row" class="sectionTableHeading">Roles</th><td width="42%" class="sectionTableCell">Primary Performer:
-                                <ul>
-<li>
-<a href="./../../openup_basic/roles/project_manager,_0a0o0MlgEdmt3adZL5Dmdw.html" guid="_0a0o0MlgEdmt3adZL5Dmdw">Project Manager</a>
-</li>
-</ul>
-</td><td class="sectionTableCell">Additional Performers:
-                                <ul>
-<li>
-<a href="./../../openup_basic/roles/stakeholder,_dTa6gMAYEdqX-s4mWhkyqQ.html" guid="_dTa6gMAYEdqX-s4mWhkyqQ">Stakeholder</a>
-</li>
-<li>
-<a href="./../../openup_basic/roles/any_role,_0dsWoMlgEdmt3adZL5Dmdw.html" guid="_0dsWoMlgEdmt3adZL5Dmdw">Any Role</a>
-</li>
-</ul>
-</td>
-</tr>
-<tr valign="top">
-<th scope="row" class="sectionTableHeading">Inputs</th><td width="42%" class="sectionTableCell">Mandatory:
-                                <ul>
-<li>
-<a href="./../../openup_basic/workproducts/iteration_plan,_0aQBEslgEdmt3adZL5Dmdw.html" guid="_0aQBEslgEdmt3adZL5Dmdw">Iteration Plan</a>
-</li>
-<li>
-<a href="./../../openup_basic/workproducts/project_plan,_0a6vcMlgEdmt3adZL5Dmdw.html" guid="_0a6vcMlgEdmt3adZL5Dmdw">Project Plan</a>
-</li>
-</ul>
-</td><td class="sectionTableCell">Optional:
-                                <ul>
-<li>
-<a href="./../../openup_basic/workproducts/status_assessment,_0bA2EMlgEdmt3adZL5Dmdw.html" guid="_0bA2EMlgEdmt3adZL5Dmdw">Status Assessment</a>
-</li>
-<li>
-<a href="./../../openup_basic/workproducts/vision,_0WVxcMlgEdmt3adZL5Dmdw.html" guid="_0WVxcMlgEdmt3adZL5Dmdw">Vision</a>
-</li>
-</ul>
-</td>
-</tr>
-<tr valign="top">
-<th scope="row" class="sectionTableHeading">Outputs</th><td colspan="2" class="sectionTableCell">
-<ul>
-<li>
-<a href="./../../openup_basic/workproducts/status_assessment,_0bA2EMlgEdmt3adZL5Dmdw.html" guid="_0bA2EMlgEdmt3adZL5Dmdw">Status Assessment</a>
-</li>
-</ul>
-</td>
-</tr>
-</table>
-</div>
-<div class="sectionHeading">Steps</div>
-<div class="sectionContent">
-<table cellpadding="0" cellspacing="0" border="0" class="sectionTable">
-<tr>
-<td class="sectionTableCell">
-<div class="stepHeading">Assess results</div>
-<div class="stepContent">
-<table cellpadding="0" cellspacing="0" border="0" class="stepTable">
-<tr valign="top">
-<td><p>
-    The project manager needs to regularly assess the results as planned. For example, in iterative development, this will
-    be done at the end of each iteration. Even if&nbsp;he or she is not&nbsp;using iterative development, the manager
-    should define quantifiable goals for a given period to facilitate regular assessment of the project's progress.
-</p>
-<p>
-    Below&nbsp;are questions that project managers can ask themselves and the rest of the team to help know the project
-    status:
-</p>
-<div dir="ltr" style="MARGIN-LEFT: 2em; MARGIN-RIGHT: 0px">
-    <ul>
-        <li>
-            &nbsp;Were the defined goals and objectives met?
-        </li>
-        <li style="LIST-STYLE-TYPE: none">
-            <ul>
-                <li>
-                    Were risks reduced or eliminated?
-                </li>
-                <li>
-                    Did the release meet its functionality and quality goals? Did the release meet performance and capacity
-                    goals?
-                </li>
-            </ul>
-        </li>
-        <li>
-            Are changes to the project plan required?
-        </li>
-        <li>
-            What portion of the current release will be baselined? What portion will need to be reworked?
-        </li>
-        <li>
-            Have new risks been identified?
-        </li>
-        <li>
-            Have there been external changes such as changes in the marketplace, in the user community, or in the
-            requirements?
-        </li>
-    </ul>
-</div>
-<p dir="ltr">
-    One very important aspect of project assessment is to base the assessments on objective measures, as much as it is
-    possible to do so. For example, to assess that a given requirement is developed, the project manager must check that
-    the corresponding test cases were successfully run against it, rather than considering it done when the implementation
-    is done.
-</p></td>
-</tr>
-</table>
-</div>
-<div class="stepHeading">Gather stakeholder feedback</div>
-<div class="stepContent">
-<table cellpadding="0" cellspacing="0" border="0" class="stepTable">
-<tr valign="top">
-<td><p>
-    Assessing the results is also a good opportunity to get feedback from the stakeholders.
-</p>
-<p>
-    This feedback can be gathered through ways such as giving stakeholders informal demonstrations of what's developed as
-
-    the project progress and sending partial deliveries to stakeholders. However the feedback is gathered, it is good to
-    record changes that could have an impact on the project's scope or duration.
-</p></td>
-</tr>
-</table>
-</div>
-<div class="stepHeading">Refine project scope and duration</div>
-<div class="stepContent">
-<table cellpadding="0" cellspacing="0" border="0" class="stepTable">
-<tr valign="top">
-<td><p>
-    Depending on the result assessment and the stakeholders' feedback, the project manager could need to revise the project
-    plan to adapt to those changes. If a change affects defined project milestones, the project manager should consult with
-    the stakeholders before committing to the changes.
-</p>
-<p>
-    Necessary changes can also encompass the need to acquire new resources, to absorb an unplanned effort increase, or be
-    something specialized able to implement a specific change request.
-</p></td>
-</tr>
-</table>
-</div>
-<div class="stepHeading">Close-out phase</div>
-<div class="stepContent">
-<table cellpadding="0" cellspacing="0" border="0" class="stepTable">
-<tr valign="top">
-<td><p>
-    This step is optional and must be performed only when the assessed period coincide with the end of a phase.
-</p>
-<p>
-    The end of&nbsp;a phase represents a point of synchronization of technical and management expectations and closure for
-    a project. In iterative development, it coincides&nbsp;with the end of an iteration. However, phase ends mark a point
-    when it is possible to consider re-scoping and even re-contracting a project. For example, the inception phase is
-    exploratory and may be appropriately performed under a time-and-materials contract or a cost-plus type of contract. The
-    elaboration phase could be done as a fixed-price contract or a cost-plus contract, depending on the extent to which the
-    development is unusual. By the construction and transition phases, enough is known about the system that fixed-price
-    contracts are more appealing to the acquirer and vendor.
-</p>
-<p>
-    The phase end is marked by a major milestone and a corresponding milestone review. The degree of formality of
-    these&nbsp;reviews depends on the project. The important thing is to take advantage&nbsp;of this milestone review to
-    achieve agreement among all stakeholders on the current state of the project. For more information, refer to <a class="elementLinkWithType" href="./../../openup_basic/guidances/concepts/milestones,_HNxbwMBJEdqSgKaj2SZBmg.html" guid="_HNxbwMBJEdqSgKaj2SZBmg">Concept: Milestones</a>.
-</p></td>
-</tr>
-</table>
-</div>
-</td>
-</tr>
-</table>
-</div>
-<div class="sectionHeading">More Information</div>
-<div class="sectionContent">
-<table cellpadding="0" cellspacing="0" border="0" class="sectionTable">
-<tr valign="top">
-<th scope="row" class="sectionTableHeading">Concepts</th><td class="sectionTableCell">
-<ul>
-<li>
-<a href="./../../openup_basic/guidances/concepts/milestones,_HNxbwMBJEdqSgKaj2SZBmg.html" guid="_HNxbwMBJEdqSgKaj2SZBmg">Milestones</a>
-</li>
-</ul>
-</td>
-</tr>
-<tr valign="top">
-<th scope="row" class="sectionTableHeading">Guidelines</th><td class="sectionTableCell">
-<ul>
-<li>
-<a href="./../../openup_basic/guidances/guidelines/status_assessment,_0daCwMlgEdmt3adZL5Dmdw.html" guid="_0daCwMlgEdmt3adZL5Dmdw">Status Assessment Representation</a>
-</li>
-<li>
-<a href="./../../openup_basic/guidances/guidelines/type_freq_assessments,_pI_-YMA5EdqSgKaj2SZBmg.html" guid="_pI_-YMA5EdqSgKaj2SZBmg">Type and Frequency of Assessments</a>
-</li>
-</ul>
-</td>
-</tr>
-</table>
-</div>
-<table cellpadding="0" cellspacing="0" border="0" class="copyright">
-<tr>
-<td class="copyright"><p>
-    Copyright (c) 1987, 2006 IBM Corp. and others. All Rights Reserved.<br />
-    This program and the accompanying materials are made available under the<br />
-    <a href="http://www.eclipse.org/org/documents/epl-v10.php" target="_blank">Eclipse Public License v1.0</a> which
-    accompanies this distribution.
-</p></td>
-</tr>
-</table>
-</td>
-</tr>
-</table>
-
-<!-- epfwiki iframe start -->
-<script language="JavaScript">
-
-    aURL = "http://localhost/epfwiki/toolbar?url=" + document.location.href;
-
-    document.write("  <div id=\"topbar\">\n");
-
-    document.write("    <iframe width=\"100%\" height=\"25\" frameborder=\"0\" src=\"" + aURL +  "\" scrolling=\"no\" marginwidth=\"0\">\n");
-
-    document.writeln("   </div>");
-
-  </script>
-<!-- epfwiki iframe end -->
-</body>
-
-</html>
-#### 7
-<table cellpadding="0" cellspacing="0" border="0">
-<tr>
-<td nowrap="true" class="pageTitle">Checklist: ..</td><td align="right" class="expandCollapseLink" width="99%"><a href="./../../index.htm"></a><script src="./../../scripts/treebrowser.js" type="text/javascript" language="JavaScript"></script></td>
-</tr>
-</table>
-#### 8
-<table cellpadding="0" cellspacing="0" border="0">
-<tr>
-<td nowrap="true" class="pageTitle">Tool Mentor: </td><td align="right" class="expandCollapseLink" width="99%"><a href="./../../index.htm"></a><script src="./../../scripts/treebrowser.js" type="text/javascript" language="JavaScript"></script></td>
-</tr>
-</table>
-#### 9 
-<html xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-<head>
-<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Checklist: Actor</title>
-<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
-<meta content="Checklist" name="element_type">
-<meta content="Checklist" name="uma.type">
-<meta content="description" name="filetype">
-<meta name="role" content="">
-<link type="text/css" href="./../../../css/default.css" rel="StyleSheet">
-<script src="./../../../scripts/contentpage.js" type="text/javascript" language="JavaScript"></script><script src="./../../../scripts/steps.js" type="text/javascript" language="JavaScript"></script><script type="text/javascript" language="JavaScript">
-					backPath = './../../../';
-					expandAllText = 'Expand All Check Items';
-					collapseAllText = 'Collapse All Check Items';
-				</script>
-<!-- rupwiki head start -->
-<link type='text/css' href='http://localhost:3000/stylesheets/rupwiki.css' rel='StyleSheet'/>
-<script src='http://localhost:3000/javascripts/wiki.js' type='text/javascript' language='JavaScript'></script>
-<!-- rupwiki head end -->
-</head>
-#### 10 
-<html xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-<head>
-<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Checklist: Actor</title>
-<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
-<meta content=Checklist name=element_type>
-<meta content="description" name="filetype">
-<meta name="role" content="">
-<link type="text/css" href="./../../../css/default.css" rel="StyleSheet">
-<script src="./../../../scripts/contentpage.js" type="text/javascript" language="JavaScript"></script><script src="./../../../scripts/steps.js" type="text/javascript" language="JavaScript"></script><script type="text/javascript" language="JavaScript">
-					backPath = './../../../';
-					expandAllText = 'Expand All Check Items';
-					collapseAllText = 'Collapse All Check Items';
-				</script>
-<!-- rupwiki head start -->
-<link type='text/css' href='http://localhost:3000/stylesheets/rupwiki.css' rel='StyleSheet'/>
-<script src='http://localhost:3000/javascripts/wiki.js' type='text/javascript' language='JavaScript'></script>
-<!-- rupwiki head end -->
-</head>
-#### 11
-<html xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-<head>
-<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Checklist: Actor</title>
-<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
-< MetA name="element_type" content="Tool Mentor" >
-<meta content="description" name="filetype">
-<meta name="role" content="">
-<link type="text/css" href="./../../../css/default.css" rel="StyleSheet">
-<script src="./../../../scripts/contentpage.js" type="text/javascript" language="JavaScript"></script><script src="./../../../scripts/steps.js" type="text/javascript" language="JavaScript"></script><script type="text/javascript" language="JavaScript">
-					backPath = './../../../';
-					expandAllText = 'Expand All Check Items';
-					collapseAllText = 'Collapse All Check Items';
-				</script>
-<!-- rupwiki head start -->
-<link type='text/css' href='http://localhost:3000/stylesheets/rupwiki.css' rel='StyleSheet'/>
-<script src='http://localhost:3000/javascripts/wiki.js' type='text/javascript' language='JavaScript'></script>
-<!-- rupwiki head end -->
-</head>
-#### 12
-<html xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-<head>
-<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Checklist: Actor</title>
-<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
-<META NAME="element_type" CONTENT=" Tool Mentor " >
-<meta content="description" name="filetype">
-<meta name="role" content="">
-<link type="text/css" href="./../../../css/default.css" rel="StyleSheet">
-<script src="./../../../scripts/contentpage.js" type="text/javascript" language="JavaScript"></script><script src="./../../../scripts/steps.js" type="text/javascript" language="JavaScript"></script><script type="text/javascript" language="JavaScript">
-					backPath = './../../../';
-					expandAllText = 'Expand All Check Items';
-					collapseAllText = 'Collapse All Check Items';
-				</script>
-<!-- rupwiki head start -->
-<link type='text/css' href='http://localhost:3000/stylesheets/rupwiki.css' rel='StyleSheet'/>
-<script src='http://localhost:3000/javascripts/wiki.js' type='text/javascript' language='JavaScript'></script>
-<!-- rupwiki head end -->
-</head>
-#### 13
-<html xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-<head>
-<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Checklist: Actor</title>
-<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
-<meta content="Checklist" name="element_type">
-<meta content="description" name="filetype">
-<meta name="role" content="">
-<link type="text/css" href="./../../../css/default.css" rel="StyleSheet">
-<script src="./../../../scripts/contentpage.js" type="text/javascript" language="JavaScript"></script><script src="./../../../scripts/steps.js" type="text/javascript" language="JavaScript"></script><script type="text/javascript" language="JavaScript">
-					backPath = './../../../';
-					expandAllText = 'Expand All Check Items';
-					collapseAllText = 'Collapse All Check Items';
-				</script>
-<!-- rupwiki head start -->
-<link type='text/css' href='http://localhost:3000/stylesheets/rupwiki.css' rel='StyleSheet'/>
-<script src='http://localhost:3000/javascripts/wiki.js' type='text/javascript' language='JavaScript'></script>
-<!-- rupwiki head end -->
-</head>
-#### 14
-<html xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-<head>
-<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Checklist: Actor</title>
-<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
-<meta content="Checklist" name="element_type">
-<meta content="description" name="filetype">
-<meta name="role" content="">
-<link type="text/css" href="./../../../css/default.css" rel="StyleSheet">
-<script src="./../../../scripts/contentpage.js" type="text/javascript" language="JavaScript"></script><script src="./../../../scripts/steps.js" type="text/javascript" language="JavaScript"></script><script type="text/javascript" language="JavaScript">
-					backPath = './../../../';
-					expandAllText = 'Expand All Check Items';
-					collapseAllText = 'Collapse All Check Items';
-				</script>
-<!-- rupwiki head start -->
-<link type='text/css' href='http://localhost:3000/stylesheets/rupwiki.css' rel='StyleSheet'/>
-<script src='http://localhost:3000/javascripts/wiki.js' type='text/javascript' language='JavaScript'></script>
-<!-- rupwiki head end -->
-</head>
-#### 15
-<html xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-<head>
-<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Checklist: Actor</title>
-<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
-<meta content="description" name="filetype">
-<meta name="role" content="">
-<link type="text/css" href="./../../../css/default.css" rel="StyleSheet">
-<script src="./../../../scripts/contentpage.js" type="text/javascript" language="JavaScript"></script><script src="./../../../scripts/steps.js" type="text/javascript" language="JavaScript"></script><script type="text/javascript" language="JavaScript">
-					backPath = './../../../';
-					expandAllText = 'Expand All Check Items';
-					collapseAllText = 'Collapse All Check Items';
-				</script>
-<!-- rupwiki head start -->
-<link type='text/css' href='http://localhost:3000/stylesheets/rupwiki.css' rel='StyleSheet'/>
-<script src='http://localhost:3000/javascripts/wiki.js' type='text/javascript' language='JavaScript'></script>
-<!-- rupwiki head end -->
-</head>
-
-
-
diff --git a/source/test/unit/site_test.rb b/source/test/unit/site_test.rb
deleted file mode 100644
index 84eba9d..0000000
--- a/source/test/unit/site_test.rb
+++ /dev/null
@@ -1,301 +0,0 @@
-require File.dirname(__FILE__) + '/../test_helper'
-
-#--######################################################################
-# Copyright (c) 2006 Logica
-# 
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# 
-# Onno van der Straaten:: initial implementation
-#++######################################################################
-# {Copyright (c) 2006 Logica}[link:files/COPYRIGHT.html]
-
-class SiteTest < Test::Unit::TestCase
-  
-  fixtures :users
-  
-  def setup
-    logger.debug "Test Case: #{name}"  
-    @george = users(:george)
-    @oup_20060721 = create_oup_20060721
-    @emails = ActionMailer::Base::deliveries
-    @emails.clear    
-  end
-  
-  def teardown
-    [ENV['EPFWIKI_SITES_PATH'], ENV['EPFWIKI_WIKIS_PATH']].each do |p|
-      FileUtils.rm_r(p) if File.exists?(p)
-      File.makedirs(p)
-    end
-  end
-  
-  # Shows:
-  # 1. To create a new BaselineProcess we have to specifiy: title, folder, baseline, user
-  # 2. We cannot create a BaselineProcess from non-existing folder
-  # 3. We can create a BaselineProcess
-  # 4. We cannot use a folder twice (create two or more sites from the same folder)
-  # 5. We can scan the content
-  def test_new_baseline_process
-    BaselineProcess.destroy_all
-    # 1.
-    site = BaselineProcess.new
-    assert !site.save
-    assert_equal "Title can't be blank, Folder can't be blank, Folder does not seem to contain a valid site, no index.htm was found, User can't be blank", site.errors.full_messages.join(", ")
-    # 2.
-    site_count = Site.count
-    site = BaselineProcess.new(:folder => 'nonexistingfolder', :title => 'OUP_20060721', :user_id => @george.id)
-    assert !site.save
-    assert_equal 'Folder doesn\'t exist, Folder does not seem to contain a valid site, no index.htm was found', site.errors.full_messages.join(', ')        
-    assert_equal site_count, Site.count
-    # 3.
-    site = BaselineProcess.new(:folder => 'oup_20060721', :title => 'oup_20060721', :user_id => @george.id)
-    assert site.save
-    assert_equal '', site.errors.full_messages.join(', ')
-    assert_equal site_count + 1, Site.count
-    site = Site.find(site.id)
-    # 4.
-    site = BaselineProcess.new(:folder => 'oup_20060721', :title => 'oup_20060721', :user_id => @george.id)
-    assert !site.save
-    assert_equal 'Folder was already used to create a baseline process', site.errors.full_messages.join(', ')
-    assert_equal site_count + 1, Site.count    
-    # 5.
-    sites = BaselineProcess.find_2scan
-    assert_equal 1, sites.size
-    site = sites[0]
-    assert_equal ['oup_20060721', 'oup_20060721'], [site.title, site.folder]
-    assert site.content_scanned_on.nil?
-    site.scan4content
-    assert_not_nil site.content_scanned_on
-    assert_equal 617, site.pages.size
-    #site.versions[0..3].each do |v|
-    #  assert_equal [true, 0, false, false, false, false], [v.base_version?, v.version, v.rel_path.nil?, v.wiki_id.nil?, v.user_id.nil?, v.page_id.nil?]
-    #end
-    site.pages[0..3].each do |p|
-      assert_equal [false, false, 'BaselineProcessPage', 'EPFC', 'N.A.', false, false, false, false,false,false], [p.rel_path.nil?, p.presentation_name.nil?, p.type, p.tool, 
-        p.status, p.uma_type.nil?, p.filename.nil?, p.uma_name.nil?, p.body_tag.nil?, p.treebrowser_tag.nil?, p.copyright_tag.nil?]
-    end
-  end
-
-  # Shows:
-  # 1. we cannot unzip same content twice
-  def test_upload
-    # 1
-    assert_raise(RuntimeError){@oup_20060721.unzip_upload}
-    names = ['OpenUP_Basic_published-0.9-W-20070316']
-    assert_equal 'openup_basic_published09w20070316', valid_filename(names[0])    
-  end
-  
-  # Shows:
-  # 1. To create a Wiki we need to specifiy a folder, title and user
-  # 2. We create a Wiki
-  # 3. We try to schedule an Update of the Wiki but we mix things up
-  # 4. We schedule an Update of the Wiki with a BaselineProcess
-  # 5. The Wiki folder should be unique
-  # 6. We cannot wikify a BaselineProcess
-  # 7. We can Wikify a Wiki
-  def test_new_wiki
-    # 1.
-    sites_count, update_count = Site.count, Update.count
-    wiki = Wiki.new#(:folder => 'openup', :title => 'OpenUP Wiki', :user_id => @george.id) 
-    assert !wiki.save
-    assert_equal "Title can't be blank, Folder can't be blank, User can't be blank", wiki.errors.full_messages.join(', ')
-    assert_equal [sites_count, update_count], [Site.count, Update.count]
-    # 2.
-    wiki = Wiki.new(:folder => 'openup', :title => 'OpenUP Wiki', :user_id => @george.id)
-    assert wiki.save 
-    assert_equal "", wiki.errors.full_messages.join(', ')
-    wiki.reload
-    assert_equal sites_count+1, Site.count
-    # 3
-    update = Update.new(:baseline_process_id => wiki.id, :wiki_id => @oup_20060721.id, :user_id => @george.id)
-    assert !update.save
-    assert_equal "Baseline process is not a BaselineProcess, Wiki is not a Wiki", update.errors.full_messages.join(', ')
-    assert_equal 'Pending', wiki.status
-    # 4
-    update = Update.new(:baseline_process_id => @oup_20060721.id, :wiki_id => wiki.id, :user_id => @george.id)
-    assert update.save
-    assert_equal 'Pending', wiki.status
-    assert_equal 1, @emails.size
-    assert_equal "SCHEDULED creation new Wiki #{update.wiki.title} using Baseline Process #{update.baseline_process.title}", @emails[0].subject
-    @emails.clear
-    # 5.
-    wiki = Wiki.new(:folder => 'openup', :title => 'OpenUP Wiki', :user_id => @george.id)
-    assert !wiki.save    
-    assert_equal 'Folder already exists', wiki.errors.full_messages.join(', ')    
-    # 6
-    assert_raise(NoMethodError) {@oup_20060721.wikify} 
-    # 7
-    assert_equal 1, Update.find_todo.size
-    update = Update.find_todo[0]
-    w, bp = update.wiki, update.baseline_process
-    assert_equal ['Ready', 617], [bp.status, bp.pages.size]
-    update.baseline_process.scan4content
-    assert_equal ['Ready', 617], [bp.status, bp.pages.size]
-    assert_equal ['Pending', 0], [w.status, w.pages.size]
-    update.do_update
-    assert_equal 0, Update.find_todo.size
-    assert_equal ['Ready', 617], [w.status, w.pages.size]
-    assert_equal w.pages.size + bp.pages.size, Page.count
-    assert_equal 2, @emails.size
-    assert_equal "STARTED creating New Wiki #{update.wiki.title} using Baseline Process #{update.baseline_process.title}", @emails[0].subject
-    assert_equal "FINISHED creating new Wiki #{update.wiki.title} using Baseline Process #{update.baseline_process.title}", @emails[0].subject
-    assert_equal update.user.email, @emails.to[0]
-    assert_equal User.find_central_admin, @emails.cc[0]
-  end
-  
-  # Shows:
-  # 1. We cannot Wikify a BaselineProcess TODO?
-  # 2. We can update content in a Wiki site    
-  # 3. The Wikify operation will cause content of baseline process to be scanned (because it was not scanned yet)
-  # 4. 
-  # 5. TODO: test if content was wikified correctly
-  def test_new_wiki
-    @oup_20060728 = create_oup_20060728
-    @oup_wiki = create_oup_wiki(@oup_20060721)
-    @oup_wiki.reload # zou niet nodig moeten zijn maar is dat wel????
-    assert_equal @oup_20060721, @oup_wiki.baseline_process # Is nil, weer zo'n probleem dat niet kan maar toch 0ptreedt, ik wordt hier echt kriegel van
-    # 1
-    #assert_raise(RuntimeError) {@oup_20060721.wikify} 
-    # 2
-    #@oup_wiki.baseline_process = @oup_20060728
-    assert_equal 'Ready', @oup_wiki.status
-    cnt = Update.count
-    update = Update.create(:baseline_process_id => @oup_20060728.id, :wiki_id => @oup_wiki.id, :user_id => @george.id )
-    assert_equal cnt+1, Update.count
-    #assert @oup_wiki.save
-    @oup_wiki.reload # NOTE: @oup_wiki.updates is cached so status will wrong without reload
-    assert_equal 'Scheduled', @oup_wiki.status
-    updates = Update.find_todo
-    assert_equal 1, updates.size
-    assert_equal @oup_wiki, updates[0].wiki
-    update.do_update
-    update.reload
-    assert_equal 'Ready', update.wiki.status  
-    @oup_wiki.reload
-    assert_equal [], Update.find_todo
-    assert_equal 1, Wiki.find(:all).size 
-    @oup_20060721.reload 
-    assert_not_nil @oup_20060721 
-    assert_equal 'oup_20060721',@oup_20060721.title 
-    #assert_equal @oup_wiki.baseline, @oup_20060728.baseline
-    assert_equal 617, @oup_wiki.pages.size 
-    # 3
-    assert_equal @oup_wiki.pages.size, @oup_20060728.pages.size  
-    # 4
-    assert_equal [1234, [["Updated", 617]], [["N.A.", 1234]]],[@oup_wiki.versions.size, WikiPage.count(:group => 'status'), BaselineProcessPage.count(:group => 'status')]
-    status = WikiPage.count(:group => 'status')
-    types = WikiPage.count(:group => 'uma_type')
-    assert_equal [["Updated", 617]], status
-    assert_equal [["Activity", 140],
- ["Artifact", 23],
- ["CapabilityPattern", 35],
- ["Checklist", 10],
- ["Concept", 48],
- ["CustomCategory", 4],
- ["DeliveryProcess", 5],
- ["Discipline", 6],
- ["DisciplineGrouping", 1],
- ["Domain", 6],
- ["Guideline", 45],
- ["Milestone", 4],
- ["Roadmap", 1],
- ["Role", 7],
- ["RoleDescriptor", 33],
- ["RoleSet", 1],
- ["Summary", 114],
- ["SupportingMaterial", 4],
- ["Task", 23],
- ["TaskDescriptor", 25],
- ["Template", 8],
- ["TermDefinition", 7],
- ["WorkProductDescriptor", 59],
- ["WorkProductType", 8]], types
-  end
- 
-  # Shows:
-  # 2. Can't update a BaselineProcess (site_type != 'W')
-  # 3. Can update a wiki with a current or previous BaselineProcess
-  # 4. Can update or cancel a pending wiki 
-  # 5. We can do the actual update
-  # 6. Update with Templates baseline  
-  # 7. We can also update with a previous baseline process
-  def test_update_wiki
-    @oup_20060728 = create_oup_20060728
-    @oup_20060825 = create_oup_20060825
-    @oup_wiki = create_oup_wiki(@oup_20060721)
-    # 2
-    update = Update.new(:baseline_process_id => @oup_20060728.id, :wiki_id => @oup_20060721.id, :user_id => @george.id)
-    assert !update.save
-    assert_equal 'Wiki is not a Wiki', update.errors.full_messages.join(', ')  
-    @oup_wiki.reload
-    assert_equal 'Ready', @oup_wiki.status        
-    # 3
-    @oup_20060721.reload
-    #@oup_wiki = create_oup_wiki(@oup_20060721)
-    update = Update.new(:baseline_process_id => @oup_20060721.id, :wiki_id => @oup_wiki.id, :user_id => @george.id)
-    assert update.save
-    @oup_wiki.reload
-    assert_equal 'Scheduled', @oup_wiki.status    
-    # 4
-    update.baseline_process = @oup_20060825
-    assert update.save
-    @oup_wiki.reload
-    assert_equal 'Scheduled', @oup_wiki.status
-    assert_equal @oup_20060721, @oup_wiki.baseline_process
-    assert_equal 'Scheduled', @oup_wiki.status
-    update.destroy
-    #assert @oup_wiki.save
-    @oup_wiki.reload
-    assert_equal 'Ready', @oup_wiki.status
-    # 5
-    update = Update.new(:baseline_process_id => @oup_20060728.id, :wiki_id => @oup_wiki.id, :user_id => @george.id)
-    assert update.save
-    @oup_wiki.reload
-    assert_equal 'Scheduled', @oup_wiki.status
-    assert_equal 617, @oup_20060728.pages.size 
-    update.do_update
-    @oup_wiki.reload
-    @oup_20060728.reload
-    assert_equal @oup_wiki.baseline_process,@oup_20060728
-    assert_equal 617, @oup_wiki.pages.size 
-    @oup_20060728.reload
-    assert_equal 617, @oup_20060728.pages.size # content scan triggered by update
-    status = WikiPage.count(:group => 'status')
-    assert_equal [["Updated", 617]], status
-    # 6
-    tpb_bl = create_templates_baseline
-    assert_equal 'Ready', @oup_wiki.status
-    update = Update.new(:baseline_process_id => tpb_bl.id, :wiki_id => @oup_wiki.id, :user_id => @george.id)
-    assert update.save
-    @oup_wiki.reload
-    assert_equal 'Scheduled', @oup_wiki.status
-    status = WikiPage.count(:group => 'status')
-    assert_equal [["Updated", 617]], status
-    update.do_update
-    @oup_wiki.reload
-    assert_equal 'Ready', @oup_wiki.status
-    assert_equal tpb_bl, @oup_wiki.baseline_process
-    assert_equal [["New", 26], ["RemovedOrMoved", 617]], WikiPage.count(:group => 'status', :conditions => ['site_id=?',@oup_wiki.id])
-    # 7
-    update = Update.new(:baseline_process_id => @oup_20060728.id, :wiki_id => @oup_wiki.id, :user_id => @george.id)
-    assert update.save
-    @oup_wiki.reload
-    assert_equal 'Scheduled', @oup_wiki.status
-    update.do_update
-    @oup_wiki.reload
-    assert_equal 'Ready', @oup_wiki.status
-    assert_equal @oup_wiki.baseline_process, @oup_20060728
-    assert_equal [["RemovedOrMoved", 26], ["Updated", 617]], WikiPage.count(:group => 'status', :conditions => ['site_id=?',@oup_wiki.id])    
-  end
-
-  def test_wikifiable_files
-    wikifiable_files = @oup_20060721.files_wikifiable
-    assert_equal 617, wikifiable_files.size 
-    assert_equal 617, wikifiable_files.size
-  end
-  
-end
diff --git a/source/test/unit/unzip_test.rb b/source/test/unit/unzip_test.rb
deleted file mode 100644
index d4bdf23..0000000
--- a/source/test/unit/unzip_test.rb
+++ /dev/null
@@ -1,25 +0,0 @@
-require File.dirname(__FILE__) + '/../test_helper'
-
-#--######################################################################
-# Copyright (c) 2006 Logica
-# 
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# 
-# Onno van der Straaten:: initial implementation
-#++######################################################################
-# {Copyright (c) 2006 Logica}[link:files/COPYRIGHT.html]
-
-class UnzipTest < Test::Unit::TestCase
-  
-  # running tests on Windows requires UnxUtils, please see the README_FOR_APP.
-  # This test causes a runtime error if unzip is not installed
-  def test01_unzip
-    cmd = IO.popen('unzip -version', "w+")
-    cmd.close_write
-  end
-end
diff --git a/source/test/unit/update_test.rb b/source/test/unit/update_test.rb
deleted file mode 100644
index 7278342..0000000
--- a/source/test/unit/update_test.rb
+++ /dev/null
@@ -1,159 +0,0 @@
-require File.dirname(__FILE__) + '/../test_helper'
-
-#--######################################################################
-# Copyright (c) 2006 Logica
-# 
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# 
-# Onno van der Straaten:: initial implementation
-#++######################################################################
-# {Copyright (c) 2006 Logica}[link:files/COPYRIGHT.html]
-
-class UpdateTest < ActiveSupport::TestCase
-
-  fixtures :users 
-
-  def setup
-    logger.debug "Test Case: #{name}"  
-    @andy, @george, @cash, @tony = users(:andy), users(:george), users(:cash), users(:tony)
-    @emails = ActionMailer::Base::deliveries
-    @emails.clear
-  end
-  
-  # Shows:
-  # 1. No notify_immediate users, no email
-  # 2. Notify_immediate users are receiving email
-  def test_notification
-    # 1. Note: create_templates uses update.do_update which sends emails
-    @emails.clear
-    wiki = create_templates
-    wiki.reload
-    bp = wiki.baseline_process
-    assert_equal 2, Site.count # 1 wiki, 1 baseline
-    assert_equal 3, @emails.size # STARTED and FINISHED
-    assert_not_nil wiki
-    assert_not_nil bp
-    @emails.clear
-    update = Update.create(:wiki_id => wiki.id, :baseline_process_id => bp.id, :user_id => @andy.id)
-    @andy.notify_immediate = 1
-    @george.notify_immediate = 1
-    @cash.notify_immediate = 1
-    @andy.save!
-    @george.save!
-    @cash.save!
-    update.do_update
-    assert_equal 4, @emails.size
-    email = @emails[3]
-    assert_equal ["[EPF Wiki - Test Enviroment] SCHEDULED update of Wiki Templates with Baseline Process templates_20080828",
- "[EPF Wiki - Test Enviroment] STARTED update of Wiki Templates with Baseline Process templates_20080828",
- "[EPF Wiki - Test Enviroment] FINISHED update of Wiki Templates with Baseline Process templates_20080828",
- "[EPF Wiki - Test Enviroment] Wiki Templates Updated with Baseline Process templates_20080828"],
- [@emails[0].subject, @emails[1].subject, @emails[2].subject, @emails[3].subject]
-    assert_equal ["[EPF Wiki - Test Enviroment] Wiki Templates Updated with Baseline Process templates_20080828",["andy.kaufman@epf.eclipse.org",
- "cash.oshman@epf.eclipse.org",
- "george.shapiro@epf.eclipse.org"], true], [email.subject, email.bcc, email.body.include?('http://localhost:3000/users/account')]
-  end
-
-  # Shows
-  # 1. That #job_daily can be used to notify users on the status of contributions
-  # 2. Users are auto subscribed to receive alerts on the page
-  # 3. Tony receives notification on update of the harvested comment and version
-  # 4. Andy receives notification of having been processed
-  def test_reviewed_notification_email
-    @emails.clear
-    create_templates
-    wiki = Wiki.find_by_folder('templates')
-    assert_not_nil wiki
-    assert_equal 'Ready', wiki.status
-    p1, p2 = wiki.pages[23], wiki.pages[6]
-    # create some versions
-    co1 = Checkout.new(:note => 'Checkout to test notification email', :page => p1, :site => wiki, :source_version => p1.current_version, :user => @tony)
-    co2 = Checkout.new(:note => 'Checkout to test notification email', :page => p2, :site => wiki, :source_version => p2.current_version, :user => @cash)
-    # 2
-    assert !Notification.find_all_users(p1, Page.name).include?(@tony) 
-    assert !Notification.find_all_users(p2, Page.name).include?(@cash)    
-    assert co1.save 
-    assert co2.save
-    v1 = co1.version
-    v2 = co2.version
-    assert_equal 2, Checkout.count
-    co1.checkin(@tony)
-    co2.checkin(@cash)
-    assert Notification.find_all_users(p1, Page.name).include?(@tony) 
-    assert Notification.find_all_users(p2, Page.name).include?(@cash)    
-    assert_equal 0, Checkout.count
-    v1.review_note = "Review note 1"
-    v2.review_note = "Review note 2"
-    v1.done = 'Y'
-    v2.done = 'Y'
-    v1.reviewer = @andy
-    v2.reviewer = @george
-    assert v1.save
-    assert v2.save
-    # create some comments
-    cmt1 = Comment.create(:text => 'Comment 1', :user => @tony, :version => v1, :page => v1.page, :site => v1.wiki)
-    cmt2 = Comment.create(:text => 'Comment 2', :user => @cash, :version => v1, :page => v1.page, :site => v1.wiki)
-    cmt3 = Comment.create(:text => 'Comment 3', :user => @george, :version => v2, :page => v2.page, :site => v2.wiki)
-    assert cmt1.save
-    assert cmt2.save
-    assert cmt3.save
-    assert Notification.find_all_users(p2, Page.name).include?(@cash)    
-    assert Notification.find_all_users(p1, Page.name).include?(@tony) 
-    assert Notification.find_all_users(p2, Page.name).include?(@cash)    
-    assert Notification.find_all_users(p2, Page.name).include?(@george)    
-    [cmt1, cmt2, cmt3].each do |cmt|
-      assert cmt.save
-      cmt.review_note = cmt.text
-      cmt.done = 'Y'
-      cmt.reviewer = @andy
-      assert cmt.save
-    end
-    for i in 1..3
-      Upload.create(:filename => 'index.html', :upload_type => 'Image', :description => 'Description of upload ' + i.to_s, :user => @cash, :reviewer => @andy, :review_note => 'Review note of upload ' + i.to_s, :done => 'Y')
-    end
-    @emails.clear 
-    update = Update.new(:wiki => Wiki.find_by_folder('templates'), :baseline_process => BaselineProcess.find(:first), :user => @andy)
-    assert update.save
-    job_daily
-    assert_equal ['[EPF Wiki - Test Enviroment] SCHEDULED update of Wiki Templates with Baseline Process templates_20080828',
-'[EPF Wiki - Test Enviroment] STARTED update of Wiki Templates with Baseline Process templates_20080828',
-'[EPF Wiki - Test Enviroment] FINISHED update of Wiki Templates with Baseline Process templates_20080828',
-'[EPF Wiki - Test Enviroment] Your contribution has been processed',
-'[EPF Wiki - Test Enviroment] Your contribution has been processed',
-'[EPF Wiki - Test Enviroment] Your contribution has been processed',
-'[EPF Wiki - Test Enviroment] Daily Summary'],
-@emails.collect {|e|e.subject}
-    assert_equal [["cash.oshman@epf.eclipse.org"],
- ["tony.clifton@epf.eclipse.org"], ['george.shapiro@epf.eclipse.org'],
- "[EPF Wiki - Test Enviroment] Your contribution has been processed",
- "[EPF Wiki - Test Enviroment] Your contribution has been processed",
- "[EPF Wiki - Test Enviroment] Your contribution has been processed"], [@emails[3].to, @emails[4].to, @emails[5].to, @emails[3].subject, @emails[4].subject, @emails[5].subject]
-    assert IO.readlines(File.expand_path('test/unit/notifier_test/contributions_processed.html', RAILS_ROOT)).join.index('Hi Cash Oshman')
-    # 3
-    #v1, cmt1
-    email = @emails[4]
-    assert_equal ["tony.clifton@epf.eclipse.org"], email.to
-    assert email.body.include?(v1.page.url(true))
-    assert email.body.include?(v1.page.presentation_name)
-    assert email.body.include?(v1.reviewer.name)    
-    assert email.body.include?(v1.review_note)    
-    assert email.body.include?(cmt1.page.url(true))
-    assert email.body.include?(cmt1.text)
-    assert email.body.include?(cmt1.reviewer.name)    
-    assert email.body.include?(cmt1.review_note)    
-    # 4
-    u = Upload.find(:first)
-    email = @emails[3]
-    assert_equal ["cash.oshman@epf.eclipse.org"], email.to
-    assert email.body.include?(u.url(true))
-    assert email.body.include?(u.filename)
-    assert email.body.include?(u.reviewer.name)    
-    assert email.body.include?(u.review_note)    
-  end
-  
-end
diff --git a/source/test/unit/upload_test.rb b/source/test/unit/upload_test.rb
deleted file mode 100644
index d69e5ed..0000000
--- a/source/test/unit/upload_test.rb
+++ /dev/null
@@ -1,24 +0,0 @@
-require File.dirname(__FILE__) + '/../test_helper'
-
-#--######################################################################
-# Copyright (c) 2006 Logica
-# 
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# 
-# Onno van der Straaten:: initial implementation
-#++######################################################################
-# {Copyright (c) 2006 Logica}[link:files/COPYRIGHT.html]
-
-class UploadTest < Test::Unit::TestCase
-  #fixtures :uploads
-
-  # Replace this with your real tests.
-  def test_truth
-    assert true
-  end
-end
diff --git a/source/test/unit/user_test.rb b/source/test/unit/user_test.rb
deleted file mode 100644
index 1054a43..0000000
--- a/source/test/unit/user_test.rb
+++ /dev/null
@@ -1,290 +0,0 @@
-require File.dirname(__FILE__) + '/../test_helper'
-require 'openssl'
-require 'digest/sha1'
-
-#--######################################################################
-# Copyright (c) 2006 Logica
-# 
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# 
-# Onno van der Straaten:: initial implementation
-#++######################################################################
-# {Copyright (c) 2006 Logica}[link:files/COPYRIGHT.html]
-
-class UserTest < Test::Unit::TestCase
-  
-  fixtures :users
-  
-  def setup
-    logger.debug "Test Case: #{name}"  
-    @emails = ActionMailer::Base::deliveries
-    @emails.clear
-    @andy, @cash, @tony, @george = users(:andy), users(:cash), users(:tony), users(:george)
-  end
-  
-  def test_create
-    assert_kind_of User, @andy
-    #assert_equal 1, @andy.id
-    assert_equal "andy.kaufman@epf.eclipse.org", @andy.email
-    assert_equal "Andy Kaufman", @andy.name
-    assert_equal "localhost", @andy.ip_address
-    assert_equal hash_pw(@andy.name), @andy.hashed_password
-    assert_equal "Y", @andy.admin
-  end
-  
-  def test_new_signup
-    assert User.count > 0
-    assert_not_nil ENV['EPFWIKI_DOMAINS']
-    # we need params
-    user = User.new_signup({}) 
-    assert !user.save
-    assert_equal "Name can't be blank, Password confirmation can't be blank, Password can't be blank, Email can't be blank, Email is invalid, Email domain not valid", user.errors.full_messages.join(", ")
-    # password needs to be confirmed
-    user = User.new_signup({:name => "User10", :password => "User10", :email => "User10@epf.eclipse.org"}) #, :i_agree_to_the_terms_of_use => '1'
-    assert !user.save
-    assert_equal "Password confirmation can't be blank", user.errors.full_messages.join(", ")    
-    # password needs to be confirmed 2
-    user = User.new_signup({:name => "User10", :password => "User10", :password_confirmation => "xyz", :email => "User10@epf.eclipse.org"})  # , :i_agree_to_the_terms_of_use => '1'
-    assert !user.save
-    assert_equal "Password doesn't match confirmation", user.errors.full_messages.join(", ")    
-    # user created
-    user = User.new_signup({:name => "User10", :password => "User10", :password_confirmation => "User10", :email => "User10@epf.eclipse.org"})  # , :i_agree_to_the_terms_of_use => '1'
-    assert user.save
-    assert_equal "user10@epf.eclipse.org", user.email
-    assert_equal nil, user.confirmed_on # account needs to be confirmed
-    assert_equal hash_pw('User10'), user.hashed_password
-    assert_equal nil, user.hashed_password_new
-    # cannot login, not confirmed
-    login_user = user.try_to_login
-    assert_equal nil, login_user
-    # confirm account
-    # assert_equal hash_pw('User10'), user.hashed_password 
-    user.confirm_account(hash_pw(user.hashed_password))  
-    assert user.save
-    assert_not_nil user.confirmed_on
-    # can login
-    login_user = user.try_to_login
-    assert_not_nil login_user
-  end
-  
-  def test_set_new_pw
-    # user created
-    user = User.new_signup({:name => "User11", :password => "User11", :password_confirmation => "User11", :email => "User11@epf.eclipse.org"})  # , :i_agree_to_the_terms_of_use => '1'
-    assert user.save
-    # confirm account
-    user.confirm_account(hash_pw(user.hashed_password))  
-    assert user.save
-    assert_equal "", user.errors.full_messages.join(", ")    
-    user = User.find_by_name('User11')
-    assert_not_nil user.confirmed_on
-    # can login
-    user.password = 'User11'
-    login_user = user.try_to_login
-    assert_not_nil login_user
-    # set new password  
-    hashed_password = user.hashed_password
-    user.set_new_pw('new_password')
-    new_pw = user.password
-    assert user.save
-    assert_equal "", user.errors.full_messages.join(", ")
-    user.reload
-    assert_not_nil user.confirmed_on 
-    assert_equal hash_pw(new_pw), user.hashed_password_new
-    # we can still sign in with the old password
-    user.password = "User11"
-    login_user = user.try_to_login
-    assert_not_nil login_user
-    # we cannot sign in with the new password
-    user.password = new_pw
-    login_user = user.try_to_login
-    assert_equal nil, login_user
-    # cannot confirm with the wrong token
-    user = User.find_by_name('User11')
-    assert_equal false, user.confirm_account("somewrongtoken")
-    # confirm the account
-    user = User.find_by_name('User11')
-    #assert_equal hash_pw(hash_pw(new_pw)), hash_pw(user.hashed_password_new)
-    user.confirm_account(hash_pw(hash_pw(new_pw)))
-    assert_equal hash_pw(new_pw), user.hashed_password
-    user.save
-    assert_equal "", user.errors.full_messages.join(", ")
-    user = User.find_by_name('User11')
-    assert_not_equal hashed_password, user.hashed_password
-    assert_equal hash_pw(new_pw), user.hashed_password
-    assert_equal nil, user.hashed_password_new
-    assert_not_nil user.confirmed_on
-    # we can sign in with the new password
-    user.password = new_pw
-    login_user = user.try_to_login
-    assert_not_nil login_user
-  end
-  
-  def test_updates
-    user = User.find_by_name('Andy Kaufman')
-    user.name = "test04_updates"
-    assert user.save
-    assert_equal "", user.errors.full_messages.join(", ")
-  end
-  
-  def test_change_password
-    user = User.find_by_name('User2')
-    assert_raise(RuntimeError) {user.change_password(User.new)}
-    assert_raise(RuntimeError) {user.change_password(User.new(:password =>'', :password_confirmation => ''))}
-    user.change_password(User.new(:password =>'xyz', :password_confirmation => '123'))    
-    assert !user.save
-    assert_equal "Password doesn't match confirmation", user.errors.full_messages.join(", ")
-    user.change_password(User.new(:password =>'xyz', :password_confirmation => 'xyz'))    
-    assert user.save
-    assert_equal '', user.errors.full_messages.join(', ')
-    user = User.find_by_name('User2')
-    user.password = 'xyz'
-    login_user = user.try_to_login
-    assert_equal hash_pw('xyz'), login_user.hashed_password
-    assert_not_nil login_user
-  end
-  
-  # Shows:
-  # 1 User can logon using basic authentication, first logon -> an account is created
-  # 2 Second logon succesfull, account is not created
-  # 3 Wrong password cannot logon
-  # 4 Failed to save, sends email
-  def tst_login_basicauthentication
-    # get password
-    pw = IO.readlines('S:/Keys/epfwiki_basic_authentication_key')[0]
-    # 1
-    ENV['EPFWIKI_DOMAINS'] = ENV['EPFWIKI_DOMAINS'] + ' @logicacmg.com'
-    user_count = User.count
-    user = User.new(:account => 'ostraaten', :password => pw)
-    logon_user = User.login(user.account, user.password)
-    assert_equal user_count + 1, User.count
-    # 2
-    logon_user = User.login(user.account, user.password)
-    assert_not_nil logon_user
-    assert_equal user_count + 1, User.count
-    # 3
-    logon_user = User.login(user.account, user.password + 'xyz')
-    assert_nil logon_user
-    assert_equal user_count + 1, User.count
-    # 4
-    User.find_by_account(user.account).destroy
-    assert_equal user_count, User.count
-    ActiveRecord::Migration::drop_column 'users', 'account'
-    assert_equal 0,@emails.size
-    logon_user = nil
-    logon_user = User.login(user.account, user.password)
-    assert_nil logon_user
-    assert_equal user_count, User.count
-  end
-  
-  # Shows:
-  # 1. Cannot update a user to Y or C without specifying the user
-  # 2. Cadmin can upgrade user to admin, downgrade to user, admin kan upgrade user to admin but not downgrade admin to user
-  # 3. Cadmin can make another user the cadmin
-  # . C -> Y or C -> N not possible
-  def test_admin
-    cadmin = User.find_central_admin
-    user = User.find_all_by_admin('N')[0]
-    admin = User.find_all_by_admin('Y')[0]
-    assert_not_nil cadmin
-    assert_not_nil user
-    assert_not_nil admin
-    user.admin = 'Y'
-    assert !user.save
-    assert_equal 'Admin can only be set by an admin', user.errors.full_messages.join(", ")
-    user.admin = 'C'
-    assert !user.save
-    assert_equal 'Admin can only be set to C by the central admin', user.errors.full_messages.join(", ")
-    # 2
-    user.admin = 'Y' 
-    user.user = cadmin
-    assert user.save
-    user.admin = 'N' 
-    user.user = cadmin
-    assert user.save
-    user.admin = 'Y' 
-    user.user = admin
-    assert user.save
-    user.admin = 'N' 
-    user.user = admin
-    assert !user.save
-    assert_equal 'Admin can only be revoked by the central admin', user.errors.full_messages.join(", ")    
-    user.user = cadmin
-    assert user.save
-    # 3
-    assert cadmin.cadmin?
-    User.cadmin(cadmin, user) 
-    user.save
-    cadmin.save
-    assert_equal '', user.errors.full_messages.join(", ")        
-    assert_equal '', cadmin.errors.full_messages.join(", ")            
-    user.reload
-    cadmin.reload
-    assert user.cadmin?
-    assert !cadmin.cadmin?
-    assert_equal 'Y', cadmin.admin
-    assert_equal 'C', user.admin
-  end
-
-  # Shows:
-  # 1 User can logon using bugzilla authentication, on first logon an account is created
-  # 2 Second logon succesfull, account is not created
-  # 3 Wrong password cannot logon
-  # 4 User tries to switch validemail to Bugzilla authentication when using the same email -> TODO
-  def tst_login_bugzilla 
-    # get password
-    pw = IO.readlines('S:/Keys/epfwiki_bugzilla_authentication_key')[0]
-    # 1
-    ENV['EPFWIKI_DOMAINS'] = ENV['EPFWIKI_DOMAINS'] + ' @logicacmg.com'
-    user_count = User.count
-    user = User.new(:email => 'onno.van.der.straaten@logicacmg.com', :password => pw)
-    logon_user = User.login(user.email, user.password)
-    assert_equal user_count + 1, User.count # TODO fails
-    # 2
-    logon_user = User.login(user.email, user.password)
-    assert_not_nil logon_user
-    assert_equal user_count + 1, User.count
-    # 3
-    logon_user = User.login(user.email, user.password + 'xyz')
-    assert_nil logon_user
-    assert_equal user_count + 1, User.count
-    # 4
-  end
-  
-  # Shows:
-  # 1. When the central admin is created, the 'Templates' Wiki is created
-  def test_new_cadmin
-    params = {:name => 'onno', :email => 'Onno@epf.eclipse.org', :password => 'xyz', :password_confirmation => 'xyz'}
-    # cannot create cadmin if there are users
-    assert_raise(RuntimeError) {cadmin = User.new_cadmin(params)}
-    User.delete_all
-    # params are needed
-    cadmin = User.new_cadmin({})
-    assert !cadmin.save
-    assert_equal "Name can't be blank, Password confirmation can't be blank, Password can't be blank, Email can't be blank, Email is invalid", cadmin.errors.full_messages.join(", ")
-    # password needs to be confirmed    
-    cadmin = User.new_cadmin(:name => 'onno', :email => 'Onno@epf.eclipse.org', :password => 'xyz', :password_confirmation => '123')
-    assert !cadmin.save
-    assert_equal "Password doesn't match confirmation", cadmin.errors.full_messages.join(", ")
-    # valid email is required
-    cadmin = User.new_cadmin(:name => 'onno', :email => 'Onno(at)epf.org', :password => 'xyz', :password_confirmation => 'xyz')
-    assert !cadmin.save
-    assert_equal "Email is invalid", cadmin.errors.full_messages.join(", ")
-    # cadmin is created, note domain restriction does not apply to cadmin account
-    cadmin = User.new_cadmin(:id => 5, :name => 'onno', :email => 'Onno@noneExistingDomain.Com', :password => 'xyz', :password_confirmation => 'xyz')
-    assert cadmin.save 
-    assert_equal 26, Site.templates.size
-    # 1
-    assert_equal "", cadmin.errors.full_messages.join(", ")
-    assert_equal 'onno@noneexistingdomain.com', cadmin.email # email set to downcase
-    assert_not_nil cadmin.hashed_password
-    assert_equal hash_pw('xyz'), cadmin.hashed_password # password is hashed and stored
-    assert_not_nil cadmin.confirmed_on # account or email does not need to be confirmed
-    # TODO: we can update attributes
-  end
-  
-end
diff --git a/source/test/unit/version_test.rb b/source/test/unit/version_test.rb
deleted file mode 100644
index 6ec806b..0000000
--- a/source/test/unit/version_test.rb
+++ /dev/null
@@ -1,184 +0,0 @@
-require File.dirname(__FILE__) + '/../test_helper'
-
-#--######################################################################
-# Copyright (c) 2006 Logica
-# 
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# 
-# Onno van der Straaten:: initial implementation
-#++######################################################################
-# {Copyright (c) 2006 Logica}[link:files/COPYRIGHT.html]
-
-class VersionTest < Test::Unit::TestCase
-  
-  fixtures :users #, :checkouts, :versions
-  
-  def setup
-    logger.debug "Test Case: #{name}"  
-    @oup_20060721 = create_oup_20060721
-    @oup_wiki = create_oup_wiki(@oup_20060721)
-    @oup_20060728 = create_oup_20060728 
-    @oup_20060825 = create_oup_20060825
-    @andy = users(:andy) 
-    @tony = users(:tony) 
-    @cash = users(:cash) 
-    @emails = ActionMailer::Base::deliveries
-    @emails.clear
-  end
-
-  # Shows:
-  # 1. We cannot checkout to baseline process, only to a Wiki
-  # 2. We cannot write the html from a BaselineProcessVersion
-  # 4. The path of a BaselineProcessVersion is just the path of the Page
-  def test_various
-    # 1
-    assert_equal [0, 617], [UserVersion.count, BaselineProcessVersion.count]
-    page = WikiPage.find(:first, :conditions => ['filename = ? and site_id = ?','test_data,_0ZZFcMlgEdmt3adZL5Dmdw.html', @oup_wiki])
-    page.reload
-    assert_equal 1, page.versions.size
-    assert_equal 0, page.current_version.version
-    co = Checkout.new(:user => @andy, :page => page, :site => @oup_20060825, :source_version => page.current_version)
-    assert_raise(RuntimeError) {co.save}
-    # 2
-    assert_raise(NoMethodError) {page.current_version.html = 'version3 from @oup_wiki'}
-    # 3
-    page = WikiPage.find_by_filename('test_data,_0ZZFcMlgEdmt3adZL5Dmdw.html')
-    assert_not_nil page
-    version = page.current_version
-    assert_equal 0, version.version
-    bp_page = BaselineProcessPage.find_by_filename('test_data,_0ZZFcMlgEdmt3adZL5Dmdw.html')
-    assert_equal bp_page.path, version.path
-  end
-  
-  # Shows:
-  # 1. The first version (version 0) does not have a previous_version
-  # 2. We create version 1: previous_version is equal to the first version
-  # 3. We create version 2 which has some added text 
-  # 4. We can rollback changes by creating version 3 based on version 1
-  # 5. Shows we can make a version 'current'
-  # 6. Checkout doesn't change the 'current' version but checkin does
-  def test_various_2
-    page = WikiPage.find_by_filename('implementation,_0TeDoMlgEdmt3adZL5Dmdw.html')
-    page.reload
-    assert_not_nil page.versions
-    assert File.exists?(page.path)
-    cv0 = page.current_version
-    assert_equal BaselineProcessVersion.name, cv0.class.name
-    assert_equal 0, cv0.version 
-    # 1
-    assert_equal nil, cv0.previous_version 
-    # 2
-    # creating a new version
-    co = Checkout.new(:user => @andy, :page => page, :site => @oup_wiki, :source_version => cv0)
-    assert co.save
-    co.checkin(@andy)
-    cv1 = page.current_version
-    assert_equal 1, cv1.version
-    assert_equal cv1.previous_version, cv0
-    # 3
-    co = Checkout.new(:user => @andy, :page => page, :site => @oup_wiki, :source_version => cv1)
-    assert co.save
-    cv2 = co.version
-    assert_nil cv2.version # number is determined on checkin
-    cv2.html = cv2.html.gsub('</body>', '####</body>')
-    co.checkin(@andy)
-    cv2.reload
-    assert_equal 2, cv2.version
-    assert page.html.include?('####')
-    # 4
-    co = Checkout.new(:user => @andy, :page => page, :site => @oup_wiki, :source_version => cv1)
-    assert co.save
-    cv3 = co.version
-    h = cv3.html
-    assert_not_nil h
-    assert !h.include?('####')
-    co.checkin(@andy)
-    cv3.reload
-    assert_equal 3, cv3.version
-    assert_equal cv3, page.current_version
-    assert !page.html.include?('####')
-    # 5
-    assert_equal page.current_version, page.last_version # because there is no checkout
-    page.current_version = cv1 
-    assert_equal cv1, page.current_version
-    page.current_version = cv2
-    assert_equal cv2, page.current_version
-    cv2.current = false 
-    assert cv2.save
-    assert cv2 != page.current_version
-    assert_equal cv3, page.current_version
-    # 6
-    page.current_version = cv1 # we make cv1 current
-    co = Checkout.new(:user => @andy, :page => page, :site => @oup_wiki, :source_version => cv3)
-    assert co.save
-    cv4 = co.version
-    assert_equal cv1, page.current_version
-    co.checkin(@andy)
-    cv4.reload
-    assert_equal cv4, page.current_version
-    assert_equal cv4, page.last_version
-    assert page.current_version.current.nil?
-  end
-  
-  def test_xhtmldiff_diff_links
-    page = WikiPage.find_by_filename('implementation,_0TeDoMlgEdmt3adZL5Dmdw.html') 
-    # setup the page html
-    page_html = IO.readlines(File.expand_path("test/unit/version_test/xp_environment,3.754748120034442E-307.html", RAILS_ROOT)).join
-    page.html = page_html
-    for i in 1..3
-      co = Checkout.new(:user => @andy, :page => page, :site => @oup_wiki, :source_version => page.current_version)
-      assert co.save
-      assert_equal nil, co.version.version
-      co.checkin(@andy)
-      cv = page.current_version
-      assert_equal i, cv.version
-      assert_not_nil cv.page_id
-    end
-    page.reload
-    assert_equal 4, page.versions.size
-    html0 = IO.readlines(File.expand_path("test/unit/version_test/xp_environment,3.754748120034442E-307.html_EPFWIKI_BL2_v0.html", RAILS_ROOT)).join
-    html1 = IO.readlines(File.expand_path("test/unit/version_test/xp_environment,3.754748120034442E-307.html_EPFWIKI_BL2_v1.html", RAILS_ROOT)).join
-    html2 = IO.readlines(File.expand_path("test/unit/version_test/xp_environment,3.754748120034442E-307.html_EPFWIKI_BL2_v2.html", RAILS_ROOT)).join 
-    version1 = page.versions[1]
-    version2 = page.versions[2]
-    version3 = page.versions[3]
-    assert_equal [1,2,3],[version1.version, version2.version, version3.version]
-    version1.html = html0
-    version2.html = html1
-    version3.html = html2
-    assert_equal 0, @emails.size
-    [[version2,version1],[version3,version2]].each do |versions|
-      versions[0].xhtmldiffpage(versions[1])
-      assert_equal "#{versions[0].relpath_to_diff(versions[1])} generated 0 email", "#{versions[0].relpath_to_diff(versions[1])} generated #{@emails.size} email"      
-    end
-    html3 = IO.readlines(File.expand_path("test/unit/version_test/architect.html_EPFWIKI_BL1_v0.html", RAILS_ROOT)).join 
-    html4 = IO.readlines(File.expand_path("test/unit/version_test/architect.html_EPFWIKI_BL1_v1.html", RAILS_ROOT)).join     
-    version4 = page.versions[1]
-    version5 = page.versions[2]
-    version4.html = html3
-    version5.html = html4
-    version5.xhtmldiffpage(version4)
-    page = WikiPage.find_by_filename('implementation,_0TeDoMlgEdmt3adZL5Dmdw.html')
-    versions = []
-    versions << ['xp_programmer.html_EPFWIKI_BL2_v0.html', page.versions[1], '']
-    versions << ['xp_programmer.html_EPFWIKI_BL2_v1.html', page.versions[2], '']
-    versions.each do |v|
-      v[2] = v[1].html # save the html, so we can rollback changes
-      v[1].html = IO.readlines(File.expand_path("test/unit/version_test/#{v[0]}", RAILS_ROOT)).join
-    end
-    #links  = versions[0][1].diff_links(versions[1][1])  # new, removed
-    #assert_equal [["href=\"./../../xp/guidances/concepts/coding_standard,8.8116853923311E-307.html\""],
-    #["href=\"http://www.demo.epfwiki.net/wikis/openup/openup_basic/customcategories/resources/GetStarted_48.gif\""]], 
-    #links
-  end
-  
-  # TODO (but now now) note part of it is in the previous test
-  # def test11_diff_links
-  # end
-
-end
diff --git a/source/test/unit/version_test/architect.html_EPFWIKI_BL1_v0.html b/source/test/unit/version_test/architect.html_EPFWIKI_BL1_v0.html
deleted file mode 100644
index b138186..0000000
--- a/source/test/unit/version_test/architect.html_EPFWIKI_BL1_v0.html
+++ /dev/null
@@ -1,306 +0,0 @@
-<html xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-<head>
-<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Role: Architect</title>
-<meta content="Role" name="uma.type">
-<meta content="architect" name="uma.name">
-<meta content="Architect" name="uma.presentationName">
-<meta content="RoleSet:openup_basic_roles:OpenUP/Basic Roles" name="uma.category">
-<meta content="Role" name="element_type">
-<meta content="description" name="filetype">
-<meta content="Architect" name="role">
-<link type="text/css" href="./../../css/default.css" rel="StyleSheet">
-<script language="JavaScript" type="text/javascript" src="./../../scripts/ContentPageResource.js"></script><script language="JavaScript" type="text/javascript" src="./../../scripts/ContentPageSection.js"></script><script language="JavaScript" type="text/javascript" src="./../../scripts/ContentPageSubSection.js"></script><script language="JavaScript" type="text/javascript" src="./../../scripts/ContentPageToolbar.js"></script><script language="JavaScript" type="text/javascript" src="./../../scripts/contentPage.js"></script><script language="JavaScript" type="text/javascript">
-					var backPath = './../../';
-					var imgPath = './../../images/';
-					var nodeInfo=null;
-					contentPage.preload(imgPath, backPath, nodeInfo,  '', false, false, false);
-				</script>
-</head>
-<body>
-<div id="breadcrumbs"></div>
-<table width="99%" cellspacing="0" cellpadding="0" border="0">
-<tr>
-<td valign="top"><a name="Top"></a>
-<div id="page-guid" value="_0X9iEMlgEdmt3adZL5Dmdw"></div>
-<table width="99%" cellpadding="0" cellspacing="0" border="0">
-<tr>
-<td nowrap="true" class="pageTitle">Role: Architect</td><td width="99%">
-<div id="contentPageToolbar" align="right"></div>
-</td><td align="right" class="expandCollapseLink" width="99%"><a href="./../../index.htm" name="mainIndex"></a><script src="./../../scripts/treebrowser.js" type="text/javascript" language="JavaScript"></script></td>
-</tr>
-</table>
-<table cellspacing="0" cellpadding="0" border="0" width="99%">
-<tr>
-<td class="pageTitleSeparator"><img height="1" title="" alt="" src="./../../images/shim.gif"></td>
-</tr>
-</table>
-<div class="overview">
-<table cellpadding="0" cellspacing="0" border="0" width="97%">
-<tr>
-<td width="50"><img title="" alt="" src="./../../images/role.gif"></td><td>
-<table cellpadding="0" cellspacing="0" border="0" class="overviewTable">
-<tr>
-<td valign="top">This role is responsible for defining the software architecture, which includes making the key technical decisions that constrain the overall design and implementation of the project.</td>
-</tr>
-<tr>
-<td>Role Sets: <a href="./../../openup_basic/rolesets/openup_basic_roles.html" guid="_TZIJ0O8NEdmKSqa_gSYthg">OpenUP/Basic Roles</a></td>
-</tr>
-</table>
-</td>
-</tr>
-</table>
-</div>
-<div class="sectionHeading">Relationships</div>
-<div class="sectionContent">
-<table cellpadding="0" cellspacing="0" border="0" class="sectionTable">
-<tr>
-<td align="center" colspan="2" class="sectionTableCell"><p><map name="Architect"><area href="./../../openup_basic/tasks/develop_arch.html" shape="rect" coords="210, 10, 242, 42" alt="Develop the Architecture" title="Develop the Architecture"/><area href="./../../openup_basic/tasks/outline_the_architecture.html" shape="rect" coords="312, 10, 344, 42" alt="Outline the Architecture" title="Outline the Architecture"/><area href="./../../openup_basic/workproducts/architecture_notebook-1.html" shape="rect" coords="210, 87, 242, 119" alt="Architecture Notebook" title="Architecture Notebook"/></map><img border="0" src="architect.jpg" alt="Architect" title="Architect" usemap="#Architect"/></p></td>
-</tr>
-<tr valign="top">
-<th scope="row" class="sectionTableHeading">Additionally Performs</th><td class="sectionTableCell">
-<ul>
-<li>
-<a href="./../../openup_basic/tasks/define_vision.html" guid="_0fOAoMlgEdmt3adZL5Dmdw">Define Vision</a>
-</li>
-<li>
-<a href="./../../openup_basic/tasks/find_and_outline_requirements.html" guid="_P9cMUPV_EdmdHa9MmVPgqQ">Find and Outline Requirements</a>
-</li>
-<li>
-<a href="./../../openup_basic/tasks/detail_requirements.html" guid="_0e1mIMlgEdmt3adZL5Dmdw">Detail Requirements</a>
-</li>
-<li>
-<a href="./../../openup_basic/tasks/design_solution.html" guid="_0fshwMlgEdmt3adZL5Dmdw">Design the Solution</a>
-</li>
-<li>
-<a href="./../../openup_basic/tasks/plan_the_project.html" guid="_0lC70MlgEdmt3adZL5Dmdw">Plan Project</a>
-</li>
-<li>
-<a href="./../../openup_basic/tasks/assess_results.html" guid="_0l53cMlgEdmt3adZL5Dmdw">Assess Results</a>
-</li>
-<li>
-<a href="./../../openup_basic/tasks/manage_iteration.html" guid="_8S2aICbYEdqh1LYUOGRh2A">Manage Iteration</a>
-</li>
-<li>
-<a href="./../../openup_basic/tasks/plan_iteration.html" guid="_0keUEMlgEdmt3adZL5Dmdw">Plan Iteration</a>
-</li>
-</ul>
-</td>
-</tr>
-<tr valign="top">
-<th scope="row" class="sectionTableHeading">Modifies</th><td class="sectionTableCell">
-<ul>
-<li>
-<a href="./../../openup_basic/workproducts/architecture_notebook-1.html" guid="_0XAf0MlgEdmt3adZL5Dmdw">Architecture Notebook</a>
-</li>
-<li>
-<a href="./../../openup_basic/workproducts/design-2.html" guid="_0WuL8slgEdmt3adZL5Dmdw">Design</a>
-</li>
-</ul>
-</td>
-</tr>
-</table>
-</div>
-<div class="sectionHeading">Main Description</div>
-<div class="sectionContent">
-<table cellpadding="0" cellspacing="0" border="0" class="sectionTable">
-<tr valign="top">
-<td class="sectionTableCell"><p>
-
-    This role leads or coordinates the technical design of the system and has overall responsibility for facilitating the
-
-    major technical decisions expressed as software architecture. This typically includes identifying and documenting the
-
-    architecturally significant aspects of the system as views that describe requirements, design, implementation, and
-
-    deployment.
-
-</p>
-
-<p>
-
-    This role is also responsible for providing the rationale for these decisions, balancing the concerns of the various
-
-    stakeholders, reducing technical risks, and ensuring that decisions are effectively communicated, validated, and
-
-    followed.
-
-</p>
-
-<p>
-
-    This role is closely involved in organizing the team around the architecture by working closely with the&nbsp;<a class="elementLink" href="./../../openup_basic/roles/project_manager.html" guid="_0a0o0MlgEdmt3adZL5Dmdw">Project Manager</a>&nbsp;in staffing and planning the project.
-
-</p></td>
-</tr>
-</table>
-</div>
-<div class="sectionHeading">Staffing</div>
-<div class="sectionContent">
-<table cellpadding="0" cellspacing="0" border="0" class="sectionTable">
-<tr valign="top">
-<th scope="row" class="sectionTableHeading">Skills</th><td class="sectionTableCell"><p>
-
-    Architects must be well-rounded people with maturity, vision, and a depth of experience that allows for grasping issues
-
-    quickly and making educated, critical judgments in the absence of complete information. Specifically, the person must
-
-    possess this combination of qualifications:
-
-</p>
-
-<ul>
-
-    <li>
-
-        <b>Experience</b> <strong>in both problem and software engineering domains</strong>, with evidence of a thorough
-
-        understanding of the requirements to solve the problem and active participation in software development. If there
-
-        is a team, this experience can be represented by different team members, but at least one person must be able to
-
-        provide the overall vision for the project.
-
-    </li>
-
-    <li>
-
-        <b>Leadership ability</b> to motivate and maintain momentum for the technical effort across the various teams and
-
-        to make critical decisions under pressure, plus make those decisions stick. To be effective, this role must have
-
-        the authority to make technical decisions.
-
-    </li>
-
-    <li>
-
-        <b>Excellent communication</b> <strong>skills</strong> to earn trust, persuade, motivate, and mentor. This role
-
-        cannot lead by decree, but only by the consent of the rest of the project team. To be effective, this&nbsp;person
-
-        must earn the respect of the team members, the <a class="elementLink" href="./../../openup_basic/roles/project_manager.html" guid="_0a0o0MlgEdmt3adZL5Dmdw">Project Manager</a>, the customer, and the user community, as well as the management
-
-        team.
-
-    </li>
-
-    <li>
-
-        <b>Goal-oriented and proactive</b> <strong>orientation</strong> with a relentless focus on results.&nbsp;This
-
-        person is the technical driving force behind the project, not a visionary or dreamer. The career of a successful
-
-        architect is a long series of sub-optimal decisions made in uncertainty and under pressure. Only those who can
-
-        focus on doing what needs to be done will be successful.
-
-    </li>
-
-</ul>
-
-<p>
-
-    From an expertise standpoint, this role also needs to show both design and implementation abilities. However, from the
-
-    design perspective, the effective architect typically exhibits these traits:
-
-</p>
-
-<ul>
-
-    <li>
-
-        Tends to be a generalist, rather than a specialist, who knows many technologies at a high level rather than a few
-
-        technologies at the detail level
-
-    </li>
-
-    <li>
-
-        Makes the broader technical decisions, thereby demonstrating broad knowledge and experience, as well as
-
-        communication and leadership skills
-
-    </li>
-
-</ul></td>
-</tr>
-<tr valign="top">
-<th scope="row" class="sectionTableHeading">Assignment Approaches</th><td class="sectionTableCell"><p>
-
-    This person in this role should be engaged in the project from start to finish.
-
-</p>
-
-<p>
-
-    For smaller projects, a single person may act as both Architect and <a class="elementLink" href="./../../openup_basic/roles/project_manager.html" guid="_0a0o0MlgEdmt3adZL5Dmdw">Project Manager</a>. However, it is better to have these roles performed by different people to ensure that the pressures one
-
-    role doesn't cause neglect of the other role.&nbsp;The Architect and Project Manager&nbsp;must work together closely.
-
-</p></td>
-</tr>
-</table>
-</div>
-<div class="sectionHeading">Key Considerations</div>
-<div class="sectionContent">
-<table cellpadding="0" cellspacing="0" border="0" class="sectionTable">
-<tr valign="top">
-<td class="sectionTableCell">This role&nbsp;places emphasis on the core principle <a class="elementLink" href="./../../openup_basic/guidances/concepts/core_principle_focus.html" guid="_9gocwMvoEdqukPpotm3DYg">Focus on the architecture early to minimize risks and organize development</a>.</td>
-</tr>
-</table>
-</div>
-<div class="sectionHeading">More Information</div>
-<div class="sectionContent">
-<table cellpadding="0" cellspacing="0" border="0" class="sectionTable">
-<tr valign="top">
-<th scope="row" class="sectionTableHeading">Concepts</th><td class="sectionTableCell">
-<ul>
-<li>
-<a href="./../../openup_basic/guidances/concepts/core_principle_focus.html" guid="_9gocwMvoEdqukPpotm3DYg">Focus on the architecture early to minimize risks and organize development</a>
-</li>
-<li>
-<a href="./../../openup_basic/guidances/concepts/software_architecture.html" guid="__O7tAMVvEduLYZUGfgZrkQ">Software Architecture</a>
-</li>
-</ul>
-</td>
-</tr>
-</table>
-</div>
-<table cellpadding="0" cellspacing="0" border="0" class="copyright">
-<tr>
-<td class="copyright"><p>
-
-    This program and the accompanying materials are made available under the<br />
-
-     <a href="http://www.eclipse.org/org/documents/epl-v10.php" target="_blank">Eclipse Public License v1.0</a> which
-
-    accompanies this distribution.
-
-</p><p/><p>
-
-    View copyright information here:&nbsp;<a class="elementLink" href="./../../openup_basic/guidances/supportingmaterials/openup_copyright.html" guid="_UaGfECcTEduSX6N2jUafGA">OpenUP Copyright</a>.
-
-</p></td>
-</tr>
-</table>
-</td>
-</tr>
-</table>
-<!-- epfwiki iframe start -->
-<script language="JavaScript">
-if  (location.protocol == "http:") {
-aURL = "http://" + location.host + "/toolbar/show?url=" + document.location.href;
-document.write("  <div id=\"toolbar\">\n");
-document.write("    <iframe width=\"250\" height=\"700\" frameborder=\"0\" src=\"" + aURL +  "\" frameborder=\"0\" scrolling=\"auto\" ALLOWTRANSPARENCY=\"TRUE\"></iframe>\n");
-document.writeln("   </div>");
-}
-</script>
-<!-- epfwiki iframe end --></body>
-
-<script language="JavaScript" type="text/javascript">
-				contentPage.onload();
-			</script>
-</html>
diff --git a/source/test/unit/version_test/architect.html_EPFWIKI_BL1_v1.html b/source/test/unit/version_test/architect.html_EPFWIKI_BL1_v1.html
deleted file mode 100644
index 72a7f94..0000000
--- a/source/test/unit/version_test/architect.html_EPFWIKI_BL1_v1.html
+++ /dev/null
@@ -1,250 +0,0 @@
-<html xmlns="http://www.w3.org/1999/xhtml">

-<head>

-  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

-

-  <title>Role: Architect</title>

-  <meta content="Role" name="uma.type" />

-  <meta content="architect" name="uma.name" />

-  <meta content="Architect" name="uma.presentationName" />

-  <meta content="RoleSet:openup_basic_roles:OpenUP/Basic Roles" name="uma.category" />

-  <meta content="Role" name="element_type" />

-  <meta content="description" name="filetype" />

-  <meta content="Architect" name="role" />

-  <link type="text/css" href="./../../css/default.css" rel="StyleSheet" />

-  <script language="JavaScript" type="text/javascript" src="./../../scripts/ContentPageResource.js">

-</script>

-  <script language="JavaScript" type="text/javascript" src="./../../scripts/ContentPageSection.js">

-</script>

-  <script language="JavaScript" type="text/javascript" src="./../../scripts/ContentPageSubSection.js">

-</script>

-  <script language="JavaScript" type="text/javascript" src="./../../scripts/ContentPageToolbar.js">

-</script>

-  <script language="JavaScript" type="text/javascript" src="./../../scripts/contentPage.js">

-</script>

-  <script language="JavaScript" type="text/javascript">

-//<![CDATA[

-                                        var backPath = './../../';

-                                        var imgPath = './../../images/';

-                                        var nodeInfo=null;

-                                        contentPage.preload(imgPath, backPath, nodeInfo,  '', false, false, false);

-  //]]>

-  </script>

-</head>

-

-<body>

-  <div id="breadcrumbs"></div>

-

-  <table border="0" cellpadding="0" cellspacing="0" width="99%">

-    <tr>

-      <td valign="top">

-        <a name="Top" title="Top" id="Top"></a>

-

-        <div id="page-guid"></div>

-

-        <table border="0" cellpadding="0" cellspacing="0" width="99%">

-          <tr>

-            <td class="pageTitle">Role: Architect</td>

-

-            <td width="99%">

-              <div align="right" id="contentPageToolbar"></div>

-            </td>

-

-            <td align="right" class="expandCollapseLink" width="99%"><a href="./../../index.htm" name="mainIndex" title="mainIndex" id="mainIndex"></a><!-- treebrowser tag --></td>

-          </tr>

-        </table>

-

-        <table border="0" cellpadding="0" cellspacing="0" width="99%">

-          <tr>

-            <td class="pageTitleSeparator"><img height="1" src="./../../images/shim.gif" width="1" /></td>

-          </tr>

-        </table>

-

-        <div class="overview">

-          <table border="0" cellpadding="0" cellspacing="0" width="97%">

-            <tr>

-              <td width="50"><img height="32" src="./../../images/role.gif" width="32" /></td>

-

-              <td>

-                <table border="0" cellpadding="0" cellspacing="0" class="overviewTable">

-                  <tr>

-                    <td valign="top">This role is responsible for defining the software architecture, which includes making the key technical decisions that constrain the overall design and implementation of the project.</td>

-                  </tr>

-

-                  <tr>

-                    <td>Role Sets: <a href="./../../openup_basic/rolesets/openup_basic_roles.html">OpenUP/Basic Roles</a></td>

-                  </tr>

-                </table>

-              </td>

-            </tr>

-          </table>

-        </div>

-

-        <div class="sectionHeading">

-          Relationships

-        </div>

-

-        <div class="sectionContent">

-          <table border="0" cellpadding="0" cellspacing="0" class="sectionTable">

-            <tr>

-              <td align="center" class="sectionTableCell" colspan="2">

-                <p><map name="Architect" id="Architect">

-                  <area alt="Develop the Architecture" coords="210,10,242,42" href="./../../openup_basic/tasks/develop_arch.html" shape="rect" title="Develop the Architecture" />

-                  <area alt="Outline the Architecture" coords="312,10,344,42" href="./../../openup_basic/tasks/outline_the_architecture.html" shape="rect" title="Outline the Architecture" />

-                  <area alt="Architecture Notebook" coords="210,87,242,119" href="./../../openup_basic/workproducts/architecture_notebook-1.html" shape="rect" title="Architecture Notebook" />

-                </map><img alt="Architect" border="0" height="159" src="architect.jpg" title="Architect" usemap="#Architect" width="389" /></p>

-              </td>

-            </tr>

-

-            <tr valign="top">

-              <th class="sectionTableHeading" scope="row">Additionally Performs</th>

-

-              <td class="sectionTableCell">

-                <ul>

-                  <li><a href="./../../openup_basic/tasks/define_vision.html">Define Vision</a></li>

-

-                  <li><a href="./../../openup_basic/tasks/find_and_outline_requirements.html">Find and Outline Requirements</a></li>

-

-                  <li><a href="./../../openup_basic/tasks/detail_requirements.html">Detail Requirements</a></li>

-

-                  <li><a href="./../../openup_basic/tasks/design_solution.html">Design the Solution</a></li>

-

-                  <li><a href="./../../openup_basic/tasks/plan_the_project.html">Plan Project</a></li>

-

-                  <li><a href="./../../openup_basic/tasks/assess_results.html">Assess Results</a></li>

-

-                  <li><a href="./../../openup_basic/tasks/manage_iteration.html">Manage Iteration</a></li>

-

-                  <li><a href="./../../openup_basic/tasks/plan_iteration.html">Plan Iteration</a></li>

-

-                  <li><a href="some%20direction">Develop Test Plan</a></li>

-                </ul>

-              </td>

-            </tr>

-

-            <tr valign="top">

-              <th class="sectionTableHeading" scope="row">Modifies</th>

-

-              <td class="sectionTableCell">

-                <ul>

-                  <li><a href="./../../openup_basic/workproducts/architecture_notebook-1.html">Architecture Notebook</a></li>

-

-                  <li><a href="./../../openup_basic/workproducts/design-2.html">Design</a></li>

-                </ul>

-              </td>

-            </tr>

-          </table>

-        </div>

-

-        <div class="sectionHeading">

-          Main Description

-        </div>

-

-        <div class="sectionContent">

-          <table border="0" cellpadding="0" cellspacing="0" class="sectionTable">

-            <tr valign="top">

-              <td class="sectionTableCell">

-                <p>This role leads or coordinates the technical design of the system and has overall responsibility for facilitating the major technical decisions expressed as software architecture. This typically includes identifying and documenting the architecturally significant aspects of the system as views that describe requirements, design, implementation, and deployment.</p>

-

-                <p>This role is also responsible for providing the rationale for these decisions, balancing the concerns of the various stakeholders, reducing technical risks, and ensuring that decisions are effectively communicated, validated, and followed.</p>

-

-                <p>This role is closely involved in organizing the team around the architecture by working closely with the&nbsp;<a class="elementLink" href="./../../openup_basic/roles/project_manager.html">Project Manager</a>&nbsp;in staffing and planning the project.</p>

-              </td>

-            </tr>

-          </table>

-        </div>

-

-        <div class="sectionHeading">

-          Staffing

-        </div>

-

-        <div class="sectionContent">

-          <table border="0" cellpadding="0" cellspacing="0" class="sectionTable">

-            <tr valign="top">

-              <th class="sectionTableHeading" scope="row">Skills</th>

-

-              <td class="sectionTableCell">

-                <p>Architects must be well-rounded people with maturity, vision, and a depth of experience that allows for grasping issues quickly and making educated, critical judgments in the absence of complete information. Specifically, the person must possess this combination of qualifications:</p>

-

-                <ul>

-                  <li><strong>Experience</strong> <strong>in both problem and software engineering domains</strong>, with evidence of a thorough understanding of the requirements to solve the problem and active participation in software development. If there is a team, this experience can be represented by different team members, but at least one person must be able to provide the overall vision for the project.</li>

-

-                  <li><strong>Leadership ability</strong> to motivate and maintain momentum for the technical effort across the various teams and to make critical decisions under pressure, plus make those decisions stick. To be effective, this role must have the authority to make technical decisions.</li>

-

-                  <li><strong>Excellent communication</strong> <strong>skills</strong> to earn trust, persuade, motivate, and mentor. This role cannot lead by decree, but only by the consent of the rest of the project team. To be effective, this&nbsp;person must earn the respect of the team members, the <a class="elementLink" href="./../../openup_basic/roles/project_manager.html">Project Manager</a>, the customer, and the user community, as well as the management team.</li>

-

-                  <li><strong>Goal-oriented and proactive</strong> <strong>orientation</strong> with a relentless focus on results.&nbsp;This person is the technical driving force behind the project, not a visionary or dreamer. The career of a successful architect is a long series of sub-optimal decisions made in uncertainty and under pressure. Only those who can focus on doing what needs to be done will be successful.</li>

-                </ul>

-

-                <p>From an expertise standpoint, this role also needs to show both design and implementation abilities. However, from the design perspective, the effective architect typically exhibits these traits:</p>

-

-                <ul>

-                  <li>Tends to be a generalist, rather than a specialist, who knows many technologies at a high level rather than a few technologies at the detail level</li>

-

-                  <li>Makes the broader technical decisions, thereby demonstrating broad knowledge and experience, as well as communication and leadership skills</li>

-                </ul>

-              </td>

-            </tr>

-

-            <tr valign="top">

-              <th class="sectionTableHeading" scope="row">Assignment Approaches</th>

-

-              <td class="sectionTableCell">

-                <p>This person in this role should be engaged in the project from start to finish.</p>

-

-                <p>For smaller projects, a single person may act as both Architect and <a class="elementLink" href="./../../openup_basic/roles/project_manager.html">Project Manager</a>. However, it is better to have these roles performed by different people to ensure that the pressures one role doesn't cause neglect of the other role.&nbsp;The Architect and Project Manager&nbsp;must work together closely.</p>

-              </td>

-            </tr>

-          </table>

-        </div>

-

-        <div class="sectionHeading">

-          Key Considerations

-        </div>

-

-        <div class="sectionContent">

-          <table border="0" cellpadding="0" cellspacing="0" class="sectionTable">

-            <tr valign="top">

-              <td class="sectionTableCell">This role&nbsp;places emphasis on the core principle <a class="elementLink" href="./../../openup_basic/guidances/concepts/core_principle_focus.html">Focus on the architecture early to minimize risks and organize development</a>.</td>

-            </tr>

-          </table>

-        </div>

-

-        <div class="sectionHeading">

-          More Information

-        </div>

-

-        <div class="sectionContent">

-          <table border="0" cellpadding="0" cellspacing="0" class="sectionTable">

-            <tr valign="top">

-              <th class="sectionTableHeading" scope="row">Concepts</th>

-

-              <td class="sectionTableCell">

-                <ul>

-                  <li><a href="./../../openup_basic/guidances/concepts/core_principle_focus.html">Focus on the architecture early to minimize risks and organize development</a></li>

-

-                  <li><a href="./../../openup_basic/guidances/concepts/software_architecture.html">Software Architecture</a></li>

-                </ul>

-              </td>

-            </tr>

-          </table>

-        </div>

-

-        <table border="0" cellpadding="0" cellspacing="0" class="copyright">

-          <tr>

-            <td class="copyright">

-              <p>This program and the accompanying materials are made available under the<br />

-              <a href="http://www.eclipse.org/org/documents/epl-v10.php" target="_blank">Eclipse Public License v1.0</a> which accompanies this distribution.</p>

-

-              <p>View copyright information here:&nbsp;<a class="elementLink" href="./../../openup_basic/guidances/supportingmaterials/openup_copyright.html">OpenUP Copyright</a>.</p>

-            </td>

-          </tr>

-        </table>

-      </td>

-    </tr>

-  </table><script language="JavaScript" type="text/javascript">

-//<![CDATA[

-  contentPage.onload();

-  //]]>

-  </script>

-</body>

-</html>

diff --git a/source/test/unit/version_test/determine_architectural_feasibility_0oreoclgEdmt3adZL5Dmdw_desc.html_EPFWIKI_v0_OUP_20060728.html b/source/test/unit/version_test/determine_architectural_feasibility_0oreoclgEdmt3adZL5Dmdw_desc.html_EPFWIKI_v0_OUP_20060728.html
deleted file mode 100644
index e244746..0000000
--- a/source/test/unit/version_test/determine_architectural_feasibility_0oreoclgEdmt3adZL5Dmdw_desc.html_EPFWIKI_v0_OUP_20060728.html
+++ /dev/null
@@ -1,156 +0,0 @@
-<html xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-<head>
-<META http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>Activity: Determine Architectural Feasibility</title>
-<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
-<meta content="Activity" name="uma.type">
-<meta content="determine_architectural_feasibility" name="uma.name">
-<meta content="Determine Architectural Feasibility" name="uma.presentationName">
-<meta name="element_type" content="workflow_detail">
-<meta content="description" name="filetype">
-<meta name="role" content="">
-<link type="text/css" href="./../../css/default.css" rel="StyleSheet">
-<script src="./../../scripts/contentpage.js" type="text/javascript" language="JavaScript"></script><script src="./../../scripts/steps.js" type="text/javascript" language="JavaScript"></script><script src="./../../scripts/activitylayout.js" type="text/javascript" language="JavaScript"></script><script type="text/javascript" language="JavaScript">
-					backPath = './../../';
-					imgPath = './../../images/';
-					
-									// get url parameters here
-					// query string from url take precedence, if not, use the one passed in form xml
-					// this handles both published site, and browsing, where user click in a node, there is no url parameter
-					var defaultQueryStr = '?proc=_0o3r4slgEdmt3adZL5Dmdw&path=_0o3r4slgEdmt3adZL5Dmdw,_0oreoclgEdmt3adZL5Dmdw';
-					var queryStr = location.search;
-					if ( queryStr == null || queryStr == "" )
-					{
-						queryStr = defaultQueryStr;
-					}
-					var parameters = getUrlParameters(queryStr.substring(1));
-					var par_proc = parameters["proc"];
-					var par_path = parameters["path"];
-//					document.write( "queryStr=" + queryStr + "<br/>");
-//					document.write( "proc=" + par_proc + "<br/>");
-//					document.write( "path=" + par_path + "<br/>");
-					
-					
-				</script>
-<!-- epfwiki head start -->
-<link href="/stylesheets/epfwiki_enhancements.css" media="screen" rel="Stylesheet" type="text/css" />
-<script src="/javascripts/prototype.js" type="text/javascript" language="JavaScript"></script>
-<!-- epfwiki head end -->
-</head>
-<body onload="createSectionLinks('div', 'sectionHeading', './../../images/'); ">
-<table width="99%" cellspacing="0" cellpadding="0" border="0">
-<tr>
-<td valign="top">
-<table cellpadding="0" cellspacing="0" border="0">
-<tr>
-<td nowrap="true" class="pageTitle">Activity: Determine Architectural Feasibility</td><td align="right" class="expandCollapseLink" width="99%"><a href="./../../index.htm"></a><script src="./../../scripts/treebrowser.js" type="text/javascript" language="JavaScript"></script></td>
-</tr>
-</table>
-<table cellspacing="0" cellpadding="0" border="0" width="99%">
-<tr>
-<td class="pageTitleSeparator"><img height="1" alt="" src="./../../images/shim.gif"></td>
-</tr>
-</table>
-<div class="overview">
-<table cellpadding="0" cellspacing="0" border="0" width="97%">
-<tr>
-<td width="50"><img alt="" src="./../../images/process.gif"></td><td>
-<table cellpadding="0" cellspacing="0" border="0" class="overviewTable">
-<tr>
-<td valign="top">Confirm that the project is feasible by constructing an architectural proof-of-concept.</td>
-</tr>
-</table>
-</td>
-</tr>
-</table>
-</div>
-<table cellpadding="0" cellspacing="0" border="0" width="99%">
-<tr valign="middle">
-<td class="activeTab" width="10"><img alt="" height="17" width="10" src="./../../images/shim.gif"></td><td class="activeTab" nowrap="nowrap">Description</td><td width="21"><img alt="" align="absmiddle" height="17" width="21" src="./../../images/tab_middle-a_i.gif"></td><td class="tab" nowrap="nowrap"><a class="tab" href="javascript:location.href=getTabUrl('./../../openup_basic/capabilitypatterns/determine_architectural_feasibility_0oreoclgEdmt3adZL5Dmdw_wbs.html', queryStr);"><span style="white-space:nowrap;">Work Breakdown Structure</span></a></td><td width="1"><img alt="" align="absmiddle" height="17" width="21" src="./../../images/tab_middle-i_i.gif"></td><td class="tab" nowrap="nowrap"><a class="tab" href="javascript:location.href=getTabUrl('./../../openup_basic/capabilitypatterns/determine_architectural_feasibility_0oreoclgEdmt3adZL5Dmdw_tbs.html', queryStr);"><span style="white-space:nowrap;">Team Allocation</span></a></td><td width="21"><img alt="" align="absmiddle" height="17" width="21" src="./../../images/tab_middle-i_i.gif"></td><td class="tab" nowrap="nowrap"><a class="tab" href="javascript:location.href=getTabUrl('./../../openup_basic/capabilitypatterns/determine_architectural_feasibility_0oreoclgEdmt3adZL5Dmdw_wpbs.html', queryStr);"><span style="white-space:nowrap;">Work Product Usage</span></a></td><td width="21"><img alt="" height="17" width="21" src="./../../images/tab_end-i.gif"></td><td width="50%"><img alt="" height="17" width="10" src="./../../images/shim.gif"></td>
-</tr>
-<tr>
-<td class="activeTab" colspan="2"><img alt="" height="2" src="./../../images/shim.gif"></td><td class="activeTab"><img alt="" height="2" width="21" src="./../../images/tab_space.gif"></td><td colspan="2"><img alt="" height="2" src="./../../images/shim.gif"></td>
-</tr>
-<tr>
-<td class="activeTab" colspan="10"><img alt="" height="5" src="./../../images/shim.gif"></td>
-</tr>
-</table>
-<div class="sectionHeading">Relationships</div>
-<div class="sectionContent">
-<table cellpadding="0" cellspacing="0" border="0" class="sectionTable">
-<tr valign="top">
-<th scope="row" class="sectionTableHeading">Parent Activities</th><td class="sectionTableCell">
-<ul>
-<li>
-<a href="./../../openup_basic/capabilitypatterns/inception_phase_iteration,_0o3r4slgEdmt3adZL5Dmdw.html" guid="_0o3r4slgEdmt3adZL5Dmdw">Inception Phase Iteration</a>
-</li>
-</ul>
-</td>
-</tr>
-</table>
-</div>
-<div class="sectionHeading">Properties</div>
-<div class="sectionContent">
-<table cellpadding="0" cellspacing="0" border="0" class="sectionTable">
-<tr valign="top">
-<th scope="row" class="sectionTableHeading">Event-Driven</th><td align="left" class="sectionTableCell"><img alt="" height="15" width="20" src="./../../images/indent.gif"></td>
-</tr>
-<tr valign="top">
-<th scope="row" class="sectionTableHeading">Multiple Occurrences</th><td align="left" class="sectionTableCell"><img alt="" height="15" width="20" src="./../../images/indent.gif"></td>
-</tr>
-<tr valign="top">
-<th scope="row" class="sectionTableHeading">Ongoing</th><td align="left" class="sectionTableCell"><img alt="" height="15" width="20" src="./../../images/indent.gif"></td>
-</tr>
-<tr valign="top">
-<th scope="row" class="sectionTableHeading">Optional</th><td align="left" class="sectionTableCell"><img alt="" height="15" width="20" src="./../../images/true.gif"></td>
-</tr>
-<tr valign="top">
-<th scope="row" class="sectionTableHeading">Planned</th><td align="left" class="sectionTableCell"><img alt="" height="15" width="20" src="./../../images/true.gif"></td>
-</tr>
-<tr valign="top">
-<th scope="row" class="sectionTableHeading">Repeatable</th><td align="left" class="sectionTableCell"><img alt="" height="15" width="20" src="./../../images/indent.gif"></td>
-</tr>
-</table>
-</div>
-<table cellpadding="0" cellspacing="0" border="0" class="copyright">
-<tr>
-<td class="copyright"><p>
-    Copyright (c) 1987, 2006 IBM Corp. and others. All Rights Reserved.<br />
-    This program and the accompanying materials are made available under the<br />
-    <a href="http://www.eclipse.org/org/documents/epl-v10.php" target="_blank">Eclipse Public License v1.0</a> which
-    accompanies this distribution.
-</p></td>
-</tr>
-</table>
-</td>
-</tr>
-</table>
-<!-- epfwiki script start -->
-<script language="Javascript">
-function epfwiki_includes(){
-	 var page_href = document.location.href;
-	 var page_id = document.pathname.replace(''/, '_');
-	// page_id is added to URL for caching
-
-     var url = '/enhancements/header/'+page_id+'?url='+page_href;
-     var target = 'epfwiki_header';
-     var myAjax = new Ajax.Updater(target, url, {method: 'get'});
-     var url = '/enhancements/footer/'+page_id+'?url='+page_href;     
-     var target = 'epfwiki_footer';
-     var myAjax = new Ajax.Updater(target, url, {method: 'get'});
-}
-var epfwiki_footer = document.createElement("div");
-epfwiki_footer.id="epfwiki_footer";
-epfwiki_footer.innerHTML="<img src='/images/busy.gif'></img>";
-document.body.appendChild(epfwiki_footer)
-
-var epfwiki_header = document.createElement("div");
-epfwiki_header.id="epfwiki_header";
-epfwiki_header.innerHTML="<img src='/images/busy.gif'></img>";
-document.body.insertBefore(epfwiki_header,document.body.firstChild);
-
-Event.observe(window, 'load', epfwiki, false);
-</script>
-<!-- epfwiki script end -->
-</body>
-</html>
diff --git a/source/test/unit/version_test/xp_environment,3.754748120034442E-307.html b/source/test/unit/version_test/xp_environment,3.754748120034442E-307.html
deleted file mode 100644
index 564ad12..0000000
--- a/source/test/unit/version_test/xp_environment,3.754748120034442E-307.html
+++ /dev/null
@@ -1,207 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

-

-<html>

-<head>

-  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">

-

-  <title>Guideline: XP Environment</title>

-  <meta content="Guideline" name="uma.type">

-  <meta content="xp_environment" name="uma.name">

-  <meta content="XP Environment" name="uma.presentationName">

-  <meta name="element_type" content="other">

-  <meta content="description" name="filetype">

-  <meta name="role" content="">

-  <link type="text/css" href="./../../../css/default.css" rel="StyleSheet">

-  <script src="./../../../scripts/contentpage.js" type="text/javascript" language="JavaScript">

-</script>

-  <script type="text/javascript" language="JavaScript">

-                                    backPath = './../../../';

-  </script>

-</head>

-

-<body onload="createSectionLinks('div', 'sectionHeading', './../../../images/');">

-  <table border="0" cellpadding="0" cellspacing="0" width="99%">

-    <tbody>

-      <tr>

-        <td valign="top">

-          <a id="Top" name="Top" title="Top"></a>

-

-          <table border="0" cellpadding="0" cellspacing="0">

-            <tbody>

-              <tr>

-                <td class="pageTitle">Guideline: XP Environment</td>

-

-                <td align="right" class="expandCollapseLink" width="99%"><a href="../../../index.htm" id="mainIndex" name="mainIndex" title="mainIndex"></a><script src="./../../../scripts/treebrowser.js" type="text/javascript" language="JavaScript"></script></td>

-              </tr>

-            </tbody>

-          </table>

-

-          <table border="0" cellpadding="0" cellspacing="0" width="99%">

-            <tbody>

-              <tr>

-                <td class="pageTitleSeparator"><img height="1" src="../../../images/shim.gif"></td>

-              </tr>

-            </tbody>

-          </table>

-

-          <div class="overview">

-            <table border="0" cellpadding="0" cellspacing="0" width="97%">

-              <tbody>

-                <tr>

-                  <td>

-                    <table border="0" cellpadding="0" cellspacing="0" class="overviewTable">

-                      <tbody>

-                        <tr>

-                          <td valign="top">&nbsp;</td>

-                        </tr>

-                      </tbody>

-                    </table>

-                  </td>

-                </tr>

-              </tbody>

-            </table>

-          </div>

-

-          <div class="sectionHeading">

-            Relationships

-          </div>

-

-          <div class="sectionContent">

-            <table border="0" cellpadding="0" cellspacing="0" class="sectionTable">

-              <tbody>

-                <tr valign="top">

-                  <th class="sectionTableHeading" scope="row">Related Elements</th>

-

-                  <td class="sectionTableCell">

-                    <ul>

-                      <li><a href="../../tasks/setup_programmer_environment,{D3AA9FEE-AAD9-4884-BF71-425E122110A7}.html">Setup Programmer Environment</a></li>

-                    </ul>

-                  </td>

-                </tr>

-              </tbody>

-            </table>

-          </div>

-

-          <div class="sectionHeading">

-            Main Description

-          </div>

-

-          <div class="sectionContent">

-            <table border="0" cellpadding="0" cellspacing="0" class="sectionTable">

-              <tbody>

-                <tr valign="top">

-                  <td class="sectionTableCell">

-                    <a id="XE_xp__environment" name="XE_xp__environment" title="XE_xp__environment"></a><a id="XE_environment__in_xp" name="XE_environment__in_xp" title="XE_environment__in_xp"></a>

-

-                    <p>No process is an island. In other words, you can't expect to just take a process or process elements off a shelf and use them without regard to their context.</p>

-

-                    <p>XP has certain key requirements of the "environment"; the physical, organizational, and business setting where it will be applied.</p>

-

-                    <p>Applied changes to this file:</p>

-

-                    <ol>

-                      <li>Changed a link</li>

-

-                      <li>added added</li>

-

-                      <li>removed</li>

-

-                      <li>bold</li>

-

-                      <li>italic<br></li>

-                    </ol>

-

-                    <p>&nbsp;Changes to this version</p>

-

-                    <ol>

-                      <li>&nbsp;removed a link</li>

-

-                      <li>Changed sectionheading to overview</li>

-

-                      <li>moved each team</li>

-

-                      <li>moved a sentence</li>

-                    </ol>

-

-                    <h3>Topics</h3>

-

-                    <ul>

-                      <li>

-                        <a href="#Test">Physical Requirement</a>

-

-                        <ul>

-                          <li><a href="#OpenWorkspace">Open Workspace</a></li>

-

-                          <li><a href="#Toolset">Uniform Toolset</a></li>

-

-                          <li><a href="#BuildMachine">Dedicated Build Machine</a></li>

-

-                          <li><a href="#VersionControl">Version Control Tool</a></li>

-                        </ul>

-                      </li>

-

-                      <li><a href="#Business">Organizational Requirements</a></li>

-                    </ul>

-

-                    <h3><a id="Physical" name="Physical" title="Physical"></a>Physical Requirements</h3>

-

-                    <h4><a id="OpenWorkspace" name="OpenWorkspace" title="OpenWorkspace"></a>Open Workspace</h4>

-

-                    <p>One key aspect of XP is a strong focus on communication added added. To communicate effectively, a team should have as few physical barriers to each other as possible. The ideal XP programming environment is an open workspace filled with tables and room for pairs of people to work together and maintain contact with their peers. For more details, see the <a class="elementLinkWithUserText" href="open_workspace,3.269440809144354E-305.html">open workspace guideline</a>.</p>

-

-                    <h4><a id="Toolset" name="Toolset" title="Toolset"></a>Uniform Toolset</h4>

-

-                    <p>XP works best when there are no artificial impediments to getting and giving help. Think about your own experiences. Do you feel hindered working in an unfamiliar IDE? How much does that impede you when someone asks for your help. If, as a team, you adopt a uniform set of tools and keep your development machines homogenous, you are making it far easier for people to give and receive help.</p>

-

-                    <h4><a id="BuildMachine" name="BuildMachine" title="BuildMachine"></a>Dedicated Build Machine</h4>

-

-                    <p>In XP, there are many different ways to do builds. However, the <span style="font-weight: bold">primary constraint</span> is that all unit tests are run prior to checking in any production code. In most situations, the easiest way to accomplish this is to have a dedicated build machine. You can check in your code and trigger a build across the network or <span style="font-style: italic">walk</span> to the build machine and run the build. Either way, having a dedicated machine gives you the advantage of having a common, pristine environment for your builds.</p>

-

-                    <h4><a id="VersionControl" name="VersionControl" title="VersionControl"></a>Version Control Tool</h4>

-

-                    <p>All software projects need version control tools; however, in XP we place a premium upon their usability. The ability to be able to check out code without locking it is also valued. When a team writes pervasive unit tests and practices collective code ownership, locking code for revision is often too pessimistic. It creates unncessary bottlenecks.</p>

-

-                    <h3><a id="Org" name="Org" title="Org"></a><span class="overview">Organizational Requirements</span></h3>

-

-                    <p>Organizations adopting XP should be able to dedicate someone to act as the customer for each XP team. The customer role in XP is critical. If the person who is acting as the customer has other responsibilities, it is best if those responsibilities are subordinate to being available to the rest of the team.</p>

-

-                    <p>In addition to having an available customer, organizations practicing XP should allow teams to be self-sufficient. In organizations where many functions are supported by different groups (configuration management group, deployment group, QA), the different functions can impede development if there are not mechanisms to allow each team to do what it takes to finalize its iterations without waiting for other teams.</p>

-

-                    <h3><a id="Business" name="Business" title="Business"></a>Business Requirements</h3>

-

-                    <p>XP works best in situations where organizations can take advantage of variable scope.</p>

-

-                    <p>People in the organizations look at the schedule rather than the velocity data that XP produces. The result is all too predictable. Software may be delivered on time, but it may also be buggy and a poor platform for future development. In XP, each team we recognize that&nbsp; has a particular speed at which they can reliably develop software. That speed varies from team to team. If a team is pushed faster than that speed, the results are often disasterous. If a business creates a fixed scope contract with a fixed end date, it can be hard to discern how long it really takes for a team to sustainably develop good software.</p>

-

-                    <p>&nbsp;</p>

-                  </td>

-                </tr>

-              </tbody>

-            </table>

-          </div>

-

-          <table border="0" cellpadding="0" cellspacing="0" class="copyright">

-            <tbody>

-              <tr>

-                <td class="copyright">Copyright (c) 2002, 2006 IBM Corporation and Object Mentor. All rights reserved.<br>

-                This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at <a href="http://www.eclipse.org/legal/epl-v10.html" target="_blank">http://www.eclipse.org/legal/epl-v10.html</a>.<br>

-                Contributors: IBM Corporation and Object Mentor - initial implementation<br></td>

-              </tr>

-            </tbody>

-          </table>

-        </td>

-      </tr>

-    </tbody>

-  </table>

-<!-- epfwiki iframe start -->
-<script language="JavaScript">
-if  (location.protocol == "http:") {
-aURL = "http://" + location.host + "/toolbar/show?url=" + document.location.href;
-document.write("  <div id=\"toolbar\">\n");
-document.write("    <iframe width=\"250\" height=\"700\" frameborder=\"0\" src=\"" + aURL +  "\" frameborder=\"0\" scrolling=\"auto\" ALLOWTRANSPARENCY=\"TRUE\"></iframe>\n");
-document.writeln("   </div>");
-}
-</script>
-<!-- epfwiki iframe end --></body>
-

-</html>

diff --git a/source/test/unit/version_test/xp_environment,3.754748120034442E-307.html_EPFWIKI_BL2_v0.html b/source/test/unit/version_test/xp_environment,3.754748120034442E-307.html_EPFWIKI_BL2_v0.html
deleted file mode 100644
index 885028b..0000000
--- a/source/test/unit/version_test/xp_environment,3.754748120034442E-307.html_EPFWIKI_BL2_v0.html
+++ /dev/null
@@ -1,196 +0,0 @@
-<html xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-<head>
-<META http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>Guideline: XP Environment</title>
-<meta content="Guideline" name="uma.type">
-<meta content="xp_environment" name="uma.name">
-<meta content="XP Environment" name="uma.presentationName">
-<meta name="element_type" content="other">
-<meta content="description" name="filetype">
-<meta name="role" content="">
-<link type="text/css" href="./../../../css/default.css" rel="StyleSheet">
-<script src="./../../../scripts/contentpage.js" type="text/javascript" language="JavaScript"></script><script type="text/javascript" language="JavaScript">
-					backPath = './../../../';
-				</script>
-</head>
-<body onload="createSectionLinks('div', 'sectionHeading', './../../../images/');">
-<table width="99%" cellspacing="0" cellpadding="0" border="0">
-<tr>
-<td valign="top"><a name="Top"></a>
-<table cellpadding="0" cellspacing="0" border="0">
-<tr>
-<td nowrap="true" class="pageTitle">Guideline: XP Environment</td><td align="right" class="expandCollapseLink" width="99%"><a href="./../../../index.htm" name="mainIndex"></a><script src="./../../../scripts/treebrowser.js" type="text/javascript" language="JavaScript"></script></td>
-</tr>
-</table>
-<table cellspacing="0" cellpadding="0" border="0" width="99%">
-<tr>
-<td class="pageTitleSeparator"><img height="1" title="" alt="" src="./../../../images/shim.gif"></td>
-</tr>
-</table>
-<div class="overview">
-<table cellpadding="0" cellspacing="0" border="0" width="97%">
-<tr>
-<td>
-<table cellpadding="0" cellspacing="0" border="0" class="overviewTable">
-<tr>
-<td valign="top"></td>
-</tr>
-</table>
-</td>
-</tr>
-</table>
-</div>
-<div class="sectionHeading">Relationships</div>
-<div class="sectionContent">
-<table cellpadding="0" cellspacing="0" border="0" class="sectionTable">
-<tr valign="top">
-<th scope="row" class="sectionTableHeading">Related Elements</th><td class="sectionTableCell">
-<ul>
-<li>
-<a href="./../../../xp/tasks/setup_programmer_environment,{D3AA9FEE-AAD9-4884-BF71-425E122110A7}.html" guid="{D3AA9FEE-AAD9-4884-BF71-425E122110A7}">Setup Programmer Environment</a>
-</li>
-</ul>
-</td>
-</tr>
-</table>
-</div>
-<div class="sectionHeading">Main Description</div>
-<div class="sectionContent">
-<table cellpadding="0" cellspacing="0" border="0" class="sectionTable">
-<tr valign="top">
-<td class="sectionTableCell"><a id="XE_xp__environment" name="XE_xp__environment"></a><a id="XE_environment__in_xp" name="XE_environment__in_xp"></a> 
-<p>
-    No process is an island. In other words, you can't expect to just take a process or process elements off a shelf and
-    use them without regard to their context.
-</p>
-<p>
-    XP has certain key requirements of the "environment"; the physical, organizational, and business setting where it will
-    be applied.
-</p>
-<h3>
-    Topics
-</h3>
-<ul>
-    <li>
-        <a href="#Physical">Physical Requirements</a> 
-        <ul>
-            <li>
-                <a href="#OpenWorkspace">Open Workspace</a>
-            </li>
-            <li>
-                <a href="#Toolset">Uniform Toolset</a>
-            </li>
-            <li>
-                <a href="#BuildMachine">Dedicated Build Machine</a>
-            </li>
-            <li>
-                <a href="#VersionControl">Version Control Tool</a>
-            </li>
-        </ul>
-    </li>
-    <li>
-        <a href="#Org">Organizational Requirements</a>
-    </li>
-    <li>
-        <a href="#Business">Business Requirements</a>
-    </li>
-</ul>
-<h3>
-    <a id="Physical" name="Physical">Physical Requirements</a>
-</h3>
-<h4>
-    <a id="OpenWorkspace" name="OpenWorkspace">Open Workspace</a>
-</h4>
-<p>
-    One key aspect of XP is a strong focus on communication. To communicate effectively, a team should have as few physical
-    barriers to each other as possible. The ideal XP programming environment is an open workspace filled with tables and
-    room for pairs of people to work together and maintain contact with their peers. For more details, see the <a class="elementLinkWithUserText" href="./../../../xp/guidances/guidelines/open_workspace,3.269440809144354E-305.html" guid="3.269440809144354E-305">open workspace guideline</a>.
-</p>
-<h4>
-    <a id="Toolset" name="Toolset">Uniform Toolset</a>
-</h4>
-<p>
-    XP works best when there are no artificial impediments to getting and giving help. If you have an open workspace with
-    five computers for production coding and each of them has a wildly different set of tools, some people will gravitate
-    to the machines that have the tools they like and feel uncomfortable moving to the machines that have unfamiliar tools.
-    Think about your own experiences. Do you feel hindered working in an unfamiliar IDE? How much does that impede you when
-    someone asks for your help. If, as a team, you adopt a uniform set of tools and keep your development machines
-    homogenous, you are making it far easier for people to give and receive help.
-</p>
-<h4>
-    <a id="BuildMachine" name="BuildMachine">Dedicated Build Machine</a>
-</h4>
-<p>
-    In XP, there are many different ways to do builds. However, the primary constraint is that all unit tests are run prior
-    to checking in any production code. In most situations, the easiest way to accomplish this is to have a dedicated build
-    machine. You can check in your code and trigger a build across the network or walk to the build machine and run the
-    build. Either way, having a dedicated machine gives you the advantage of having a common, pristine environment for your
-    builds.
-</p>
-<h4>
-    <a id="VersionControl" name="VersionControl">Version Control Tool</a>
-</h4>
-<p>
-    All software projects need version control tools; however, in XP we place a premium upon their usability. The ability
-    to be able to check out code without locking it is also valued. When a team writes pervasive unit tests and practices
-    collective code ownership, locking code for revision is often too pessimistic. It creates unncessary bottlenecks.
-</p>
-<h3>
-    <a id="Org" name="Org">Organizational Requirements</a>
-</h3>
-<p>
-    Organizations adopting XP should be able to dedicate someone to act as the customer for each XP team. The customer role
-    in XP is critical. If the person who is acting as the customer has other responsibilities, it is best if those
-    responsibilities are subordinate to being available to the rest of the team.
-</p>
-<p>
-    In addition to having an available customer, organizations practicing XP should allow teams to be self-sufficient. In
-    organizations where many functions are supported by different groups (configuration management group, deployment group,
-
-    QA), the different functions can impede development if there are not mechanisms to allow each team to do what it takes
-    to finalize its iterations without waiting for other teams.
-</p>
-<h3>
-    <a id="Business" name="Business">Business Requirements</a>
-</h3>
-<p>
-    XP works best in situations where organizations can take advantage of variable scope. If a business creates a fixed
-    scope contract with a fixed end date, it can be hard to discern how long it really takes for a team to sustainably
-    develop good software.
-</p>
-<p>
-    People in the organizations look at the schedule rather than the velocity data that XP produces. The result is all too
-    predictable. Software may be delivered on time, but it may also be buggy and a poor platform for future development. In
-    XP, we recognize that each team has a particular speed at which they can reliably develop software. That speed varies
-    from team to team. If a team is pushed faster than that speed, the results are often disasterous.
-</p>
-<p>
-    <br />
-    <br />
-</p></td>
-</tr>
-</table>
-</div>
-<table cellpadding="0" cellspacing="0" border="0" class="copyright">
-<tr>
-<td class="copyright">Copyright (c) 2002, 2006 IBM Corporation and Object Mentor. All rights reserved. <br />
-This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which
-accompanies this distribution, and is available at <a href="http://www.eclipse.org/legal/epl-v10.html" target="_blank">http://www.eclipse.org/legal/epl-v10.html</a>. <br />
-Contributors: IBM Corporation and Object Mentor - initial implementation<br /></td>
-</tr>
-</table>
-</td>
-</tr>
-</table>
-<!-- epfwiki iframe start -->
-<script language="JavaScript">
-if  (location.protocol == "http:") {
-aURL = "http://" + location.host + "/toolbar/show?url=" + document.location.href;
-document.write("  <div id=\"toolbar\">\n");
-document.write("    <iframe width=\"250\" height=\"700\" frameborder=\"0\" src=\"" + aURL +  "\" frameborder=\"0\" scrolling=\"auto\" ALLOWTRANSPARENCY=\"TRUE\"></iframe>\n");
-document.writeln("   </div>");
-}
-</script>
-<!-- epfwiki iframe end --></body>
-
-</html>
diff --git a/source/test/unit/version_test/xp_environment,3.754748120034442E-307.html_EPFWIKI_BL2_v1.html b/source/test/unit/version_test/xp_environment,3.754748120034442E-307.html_EPFWIKI_BL2_v1.html
deleted file mode 100644
index 0db5b3d..0000000
--- a/source/test/unit/version_test/xp_environment,3.754748120034442E-307.html_EPFWIKI_BL2_v1.html
+++ /dev/null
@@ -1,189 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

-

-<html>

-<head>

-  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">

-

-  <title>Guideline: XP Environment</title>

-  <meta content="Guideline" name="uma.type">

-  <meta content="xp_environment" name="uma.name">

-  <meta content="XP Environment" name="uma.presentationName">

-  <meta name="element_type" content="other">

-  <meta content="description" name="filetype">

-  <meta name="role" content="">

-  <link type="text/css" href="./../../../css/default.css" rel="StyleSheet">

-  <script src="./../../../scripts/contentpage.js" type="text/javascript" language="JavaScript">

-</script>

-  <script type="text/javascript" language="JavaScript">

-                                      backPath = './../../../';

-  </script>

-</head>

-

-<body>

-  <table border="0" cellpadding="0" cellspacing="0" width="99%">

-    <tbody>

-      <tr>

-        <td valign="top">

-          <a id="Top" name="Top" title="Top"></a>

-

-          <table border="0" cellpadding="0" cellspacing="0">

-            <tbody>

-              <tr>

-                <td class="pageTitle">Guideline: XP Environment</td>

-

-                <td align="right" class="expandCollapseLink" width="99%"><a href="../../../index.htm" id="mainIndex" name="mainIndex" title="mainIndex"></a><!-- treebrowser tag --></td>

-              </tr>

-            </tbody>

-          </table>

-

-          <table border="0" cellpadding="0" cellspacing="0" width="99%">

-            <tbody>

-              <tr>

-                <td class="pageTitleSeparator"><img height="1" src="../../../images/shim.gif"></td>

-              </tr>

-            </tbody>

-          </table>

-

-          <div class="overview">

-            <table border="0" cellpadding="0" cellspacing="0" width="97%">

-              <tbody>

-                <tr>

-                  <td>

-                    <table border="0" cellpadding="0" cellspacing="0" class="overviewTable">

-                      <tbody>

-                        <tr>

-                          <td valign="top">&nbsp;</td>

-                        </tr>

-                      </tbody>

-                    </table>

-                  </td>

-                </tr>

-              </tbody>

-            </table>

-          </div>

-

-          <div class="sectionHeading">

-            Relationships

-          </div>

-

-          <div class="sectionContent">

-            <table border="0" cellpadding="0" cellspacing="0" class="sectionTable">

-              <tbody>

-                <tr valign="top">

-                  <th class="sectionTableHeading" scope="row">Related Elements</th>

-

-                  <td class="sectionTableCell">

-                    <ul>

-                      <li><a href="../../tasks/setup_programmer_environment,{D3AA9FEE-AAD9-4884-BF71-425E122110A7}.html">Setup Programmer Environment</a></li>

-                    </ul>

-                  </td>

-                </tr>

-              </tbody>

-            </table>

-          </div>

-

-          <div class="sectionHeading">

-            Main Description

-          </div>

-

-          <div class="sectionContent">

-            <table border="0" cellpadding="0" cellspacing="0" class="sectionTable">

-              <tbody>

-                <tr valign="top">

-                  <td class="sectionTableCell">

-                    <a id="XE_xp__environment" name="XE_xp__environment" title="XE_xp__environment"></a><a id="XE_environment__in_xp" name="XE_environment__in_xp" title="XE_environment__in_xp"></a>

-

-                    <p>No process is an island. In other words, you can't expect to just take a process or process elements off a shelf and use them without regard to their context.</p>

-

-                    <p>XP has certain key requirements of the "environment"; the physical, organizational, and business setting where it will be applied.</p>

-

-                    <p>Applied changes to this file:</p>

-

-                    <ol>

-                      <li>Changed a link</li>

-

-                      <li>added added</li>

-

-                      <li>removed</li>

-

-                      <li>bold</li>

-

-                      <li>italic<br></li>

-                    </ol>

-

-                    <p>&nbsp;</p>

-

-                    <h3>Topics</h3>

-

-                    <ul>

-                      <li>

-                        <a href="#Test">Physical Requirement</a>

-

-                        <ul>

-                          <li><a href="#OpenWorkspace">Open Workspace</a></li>

-

-                          <li><a href="#Toolset">Uniform Toolset</a></li>

-

-                          <li><a href="#BuildMachine">Dedicated Build Machine</a></li>

-

-                          <li><a href="#VersionControl">Version Control Tool</a></li>

-                        </ul>

-                      </li>

-

-                      <li><a href="#Org">Organizational Requirements</a></li>

-

-                      <li><a href="#Business">Business Requirements</a></li>

-                    </ul>

-

-                    <h3><a id="Physical" name="Physical" title="Physical"></a>Physical Requirements</h3>

-

-                    <h4><a id="OpenWorkspace" name="OpenWorkspace" title="OpenWorkspace"></a>Open Workspace</h4>

-

-                    <p>One key aspect of XP is a strong focus on communication added added. To communicate effectively, a team should have as few physical barriers to each other as possible. The ideal XP programming environment is an open workspace filled with tables and room for pairs of people to work together and maintain contact with their peers. For more details, see the <a class="elementLinkWithUserText" href="open_workspace,3.269440809144354E-305.html">open workspace guideline</a>.</p>

-

-                    <h4><a id="Toolset" name="Toolset" title="Toolset"></a>Uniform Toolset</h4>

-

-                    <p>XP works best when there are no artificial impediments to getting and giving help. Think about your own experiences. Do you feel hindered working in an unfamiliar IDE? How much does that impede you when someone asks for your help. If, as a team, you adopt a uniform set of tools and keep your development machines homogenous, you are making it far easier for people to give and receive help.</p>

-

-                    <h4><a id="BuildMachine" name="BuildMachine" title="BuildMachine"></a>Dedicated Build Machine</h4>

-

-                    <p>In XP, there are many different ways to do builds. However, the <span style="font-weight: bold">primary constraint</span> is that all unit tests are run prior to checking in any production code. In most situations, the easiest way to accomplish this is to have a dedicated build machine. You can check in your code and trigger a build across the network or <span style="font-style: italic">walk</span> to the build machine and run the build. Either way, having a dedicated machine gives you the advantage of having a common, pristine environment for your builds.</p>

-

-                    <h4><a id="VersionControl" name="VersionControl" title="VersionControl"></a>Version Control Tool</h4>

-

-                    <p>All software projects need version control tools; however, in XP we place a premium upon their usability. The ability to be able to check out code without locking it is also valued. When a team writes pervasive unit tests and practices collective code ownership, locking code for revision is often too pessimistic. It creates unncessary bottlenecks.</p>

-

-                    <h3><a id="Org" name="Org" title="Org"></a>Organizational Requirements</h3>

-

-                    <p>Organizations adopting XP should be able to dedicate someone to act as the customer for each XP team. The customer role in XP is critical. If the person who is acting as the customer has other responsibilities, it is best if those responsibilities are subordinate to being available to the rest of the team.</p>

-

-                    <p>In addition to having an available customer, organizations practicing XP should allow teams to be self-sufficient. In organizations where many functions are supported by different groups (configuration management group, deployment group, QA), the different functions can impede development if there are not mechanisms to allow each team to do what it takes to finalize its iterations without waiting for other teams.</p>

-

-                    <h3><a id="Business" name="Business" title="Business"></a>Business Requirements</h3>

-

-                    <p>XP works best in situations where organizations can take advantage of variable scope. If a business creates a fixed scope contract with a fixed end date, it can be hard to discern how long it really takes for a team to sustainably develop good software.</p>

-

-                    <p>People in the organizations look at the schedule rather than the velocity data that XP produces. The result is all too predictable. Software may be delivered on time, but it may also be buggy and a poor platform for future development. In XP, we recognize that each team has a particular speed at which they can reliably develop software. That speed varies from team to team. If a team is pushed faster than that speed, the results are often disasterous.</p>

-

-                    <p><br></p>

-                  </td>

-                </tr>

-              </tbody>

-            </table>

-          </div>

-

-          <table border="0" cellpadding="0" cellspacing="0" class="copyright">

-            <tbody>

-              <tr>

-                <td class="copyright">Copyright (c) 2002, 2006 IBM Corporation and Object Mentor. All rights reserved.<br>

-                This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at <a href="http://www.eclipse.org/legal/epl-v10.html" target="_blank">http://www.eclipse.org/legal/epl-v10.html</a>.<br>

-                Contributors: IBM Corporation and Object Mentor - initial implementation<br></td>

-              </tr>

-            </tbody>

-          </table>

-        </td>

-      </tr>

-    </tbody>

-  </table>

-</body>

-</html>

diff --git a/source/test/unit/version_test/xp_environment,3.754748120034442E-307.html_EPFWIKI_BL2_v2.html b/source/test/unit/version_test/xp_environment,3.754748120034442E-307.html_EPFWIKI_BL2_v2.html
deleted file mode 100644
index 401f93e..0000000
--- a/source/test/unit/version_test/xp_environment,3.754748120034442E-307.html_EPFWIKI_BL2_v2.html
+++ /dev/null
@@ -1,197 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

-

-<html>

-<head>

-  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">

-

-  <title>Guideline: XP Environment</title>

-  <meta content="Guideline" name="uma.type">

-  <meta content="xp_environment" name="uma.name">

-  <meta content="XP Environment" name="uma.presentationName">

-  <meta name="element_type" content="other">

-  <meta content="description" name="filetype">

-  <meta name="role" content="">

-  <link type="text/css" href="./../../../css/default.css" rel="StyleSheet">

-  <script src="./../../../scripts/contentpage.js" type="text/javascript" language="JavaScript">

-</script>

-  <script type="text/javascript" language="JavaScript">

-                                    backPath = './../../../';

-  </script>

-</head>

-

-<body>

-  <table border="0" cellpadding="0" cellspacing="0" width="99%">

-    <tbody>

-      <tr>

-        <td valign="top">

-          <a id="Top" name="Top" title="Top"></a>

-

-          <table border="0" cellpadding="0" cellspacing="0">

-            <tbody>

-              <tr>

-                <td class="pageTitle">Guideline: XP Environment</td>

-

-                <td align="right" class="expandCollapseLink" width="99%"><a href="../../../index.htm" id="mainIndex" name="mainIndex" title="mainIndex"></a><!-- treebrowser tag --></td>

-              </tr>

-            </tbody>

-          </table>

-

-          <table border="0" cellpadding="0" cellspacing="0" width="99%">

-            <tbody>

-              <tr>

-                <td class="pageTitleSeparator"><img height="1" src="../../../images/shim.gif"></td>

-              </tr>

-            </tbody>

-          </table>

-

-          <div class="overview">

-            <table border="0" cellpadding="0" cellspacing="0" width="97%">

-              <tbody>

-                <tr>

-                  <td>

-                    <table border="0" cellpadding="0" cellspacing="0" class="overviewTable">

-                      <tbody>

-                        <tr>

-                          <td valign="top">&nbsp;</td>

-                        </tr>

-                      </tbody>

-                    </table>

-                  </td>

-                </tr>

-              </tbody>

-            </table>

-          </div>

-

-          <div class="sectionHeading">

-            Relationships

-          </div>

-

-          <div class="sectionContent">

-            <table border="0" cellpadding="0" cellspacing="0" class="sectionTable">

-              <tbody>

-                <tr valign="top">

-                  <th class="sectionTableHeading" scope="row">Related Elements</th>

-

-                  <td class="sectionTableCell">

-                    <ul>

-                      <li><a href="../../tasks/setup_programmer_environment,{D3AA9FEE-AAD9-4884-BF71-425E122110A7}.html">Setup Programmer Environment</a></li>

-                    </ul>

-                  </td>

-                </tr>

-              </tbody>

-            </table>

-          </div>

-

-          <div class="sectionHeading">

-            Main Description

-          </div>

-

-          <div class="sectionContent">

-            <table border="0" cellpadding="0" cellspacing="0" class="sectionTable">

-              <tbody>

-                <tr valign="top">

-                  <td class="sectionTableCell">

-                    <a id="XE_xp__environment" name="XE_xp__environment" title="XE_xp__environment"></a><a id="XE_environment__in_xp" name="XE_environment__in_xp" title="XE_environment__in_xp"></a>

-

-                    <p>No process is an island. In other words, you can't expect to just take a process or process elements off a shelf and use them without regard to their context.</p>

-

-                    <p>XP has certain key requirements of the "environment"; the physical, organizational, and business setting where it will be applied.</p>

-

-                    <p>Applied changes to this file:</p>

-

-                    <ol>

-                      <li>Changed a link</li>

-

-                      <li>added added</li>

-

-                      <li>removed</li>

-

-                      <li>bold</li>

-

-                      <li>italic<br></li>

-                    </ol>

-

-                    <p>&nbsp;Changes to this version</p>

-

-                    <ol>

-                      <li>&nbsp;removed a link</li>

-

-                      <li>Changed sectionheading to overview</li>

-

-                      <li>moved each team</li>

-

-                      <li>moved a sentence</li>

-                    </ol>

-

-                    <h3>Topics</h3>

-

-                    <ul>

-                      <li>

-                        <a href="#Test">Physical Requirement</a>

-

-                        <ul>

-                          <li><a href="#OpenWorkspace">Open Workspace</a></li>

-

-                          <li><a href="#Toolset">Uniform Toolset</a></li>

-

-                          <li><a href="#BuildMachine">Dedicated Build Machine</a></li>

-

-                          <li><a href="#VersionControl">Version Control Tool</a></li>

-                        </ul>

-                      </li>

-

-                      <li><a href="#Business">Organizational Requirements</a></li>

-                    </ul>

-

-                    <h3><a id="Physical" name="Physical" title="Physical"></a>Physical Requirements</h3>

-

-                    <h4><a id="OpenWorkspace" name="OpenWorkspace" title="OpenWorkspace"></a>Open Workspace</h4>

-

-                    <p>One key aspect of XP is a strong focus on communication added added. To communicate effectively, a team should have as few physical barriers to each other as possible. The ideal XP programming environment is an open workspace filled with tables and room for pairs of people to work together and maintain contact with their peers. For more details, see the <a class="elementLinkWithUserText" href="open_workspace,3.269440809144354E-305.html">open workspace guideline</a>.</p>

-

-                    <h4><a id="Toolset" name="Toolset" title="Toolset"></a>Uniform Toolset</h4>

-

-                    <p>XP works best when there are no artificial impediments to getting and giving help. Think about your own experiences. Do you feel hindered working in an unfamiliar IDE? How much does that impede you when someone asks for your help. If, as a team, you adopt a uniform set of tools and keep your development machines homogenous, you are making it far easier for people to give and receive help.</p>

-

-                    <h4><a id="BuildMachine" name="BuildMachine" title="BuildMachine"></a>Dedicated Build Machine</h4>

-

-                    <p>In XP, there are many different ways to do builds. However, the <span style="font-weight: bold">primary constraint</span> is that all unit tests are run prior to checking in any production code. In most situations, the easiest way to accomplish this is to have a dedicated build machine. You can check in your code and trigger a build across the network or <span style="font-style: italic">walk</span> to the build machine and run the build. Either way, having a dedicated machine gives you the advantage of having a common, pristine environment for your builds.</p>

-

-                    <h4><a id="VersionControl" name="VersionControl" title="VersionControl"></a>Version Control Tool</h4>

-

-                    <p>All software projects need version control tools; however, in XP we place a premium upon their usability. The ability to be able to check out code without locking it is also valued. When a team writes pervasive unit tests and practices collective code ownership, locking code for revision is often too pessimistic. It creates unncessary bottlenecks.</p>

-

-                    <h3><a id="Org" name="Org" title="Org"></a><span class="overview">Organizational Requirements</span></h3>

-

-                    <p>Organizations adopting XP should be able to dedicate someone to act as the customer for each XP team. The customer role in XP is critical. If the person who is acting as the customer has other responsibilities, it is best if those responsibilities are subordinate to being available to the rest of the team.</p>

-

-                    <p>In addition to having an available customer, organizations practicing XP should allow teams to be self-sufficient. In organizations where many functions are supported by different groups (configuration management group, deployment group, QA), the different functions can impede development if there are not mechanisms to allow each team to do what it takes to finalize its iterations without waiting for other teams.</p>

-

-                    <h3><a id="Business" name="Business" title="Business"></a>Business Requirements</h3>

-

-                    <p>XP works best in situations where organizations can take advantage of variable scope.</p>

-

-                    <p>People in the organizations look at the schedule rather than the velocity data that XP produces. The result is all too predictable. Software may be delivered on time, but it may also be buggy and a poor platform for future development. In XP, each team we recognize that&nbsp; has a particular speed at which they can reliably develop software. That speed varies from team to team. If a team is pushed faster than that speed, the results are often disasterous. If a business creates a fixed scope contract with a fixed end date, it can be hard to discern how long it really takes for a team to sustainably develop good software.</p>

-

-                    <p>&nbsp;</p>

-                  </td>

-                </tr>

-              </tbody>

-            </table>

-          </div>

-

-          <table border="0" cellpadding="0" cellspacing="0" class="copyright">

-            <tbody>

-              <tr>

-                <td class="copyright">Copyright (c) 2002, 2006 IBM Corporation and Object Mentor. All rights reserved.<br>

-                This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at <a href="http://www.eclipse.org/legal/epl-v10.html" target="_blank">http://www.eclipse.org/legal/epl-v10.html</a>.<br>

-                Contributors: IBM Corporation and Object Mentor - initial implementation<br></td>

-              </tr>

-            </tbody>

-          </table>

-        </td>

-      </tr>

-    </tbody>

-  </table>

-</body>

-</html>

diff --git a/source/test/unit/version_test/xp_programmer.html_EPFWIKI_BL2_v0.html b/source/test/unit/version_test/xp_programmer.html_EPFWIKI_BL2_v0.html
deleted file mode 100644
index 48da6bc..0000000
--- a/source/test/unit/version_test/xp_programmer.html_EPFWIKI_BL2_v0.html
+++ /dev/null
@@ -1,165 +0,0 @@
-<html xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-<head>
-<META http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>Role: XP Programmer</title>
-<meta content="Role" name="uma.type">
-<meta content="xp_programmer" name="uma.name">
-<meta content="XP Programmer" name="uma.presentationName">
-<meta content="RoleSet:xp_roles:XP Roles" name="uma.category">
-<meta content="Role" name="element_type">
-<meta content="description" name="filetype">
-<meta content="XP Programmer" name="role">
-<link type="text/css" href="./../../css/default.css" rel="StyleSheet">
-<script src="./../../scripts/contentpage.js" type="text/javascript" language="JavaScript"></script><script type="text/javascript" language="JavaScript">
-					backPath = './../../';
-				</script>
-</head>
-<body onload="createSectionLinks('div', 'sectionHeading', './../../images/');">
-<table width="99%" cellspacing="0" cellpadding="0" border="0">
-<tr>
-<td valign="top"><a name="Top"></a>
-<table cellpadding="0" cellspacing="0" border="0">
-<tr>
-<td nowrap="true" class="pageTitle">Role: XP Programmer</td><td align="right" class="expandCollapseLink" width="99%"><a href="./../../index.htm" name="mainIndex"></a><script src="./../../scripts/treebrowser.js" type="text/javascript" language="JavaScript"></script></td>
-</tr>
-</table>
-<table cellspacing="0" cellpadding="0" border="0" width="99%">
-<tr>
-<td class="pageTitleSeparator"><img height="1" title="" alt="" src="./../../images/shim.gif"></td>
-</tr>
-</table>
-<div class="overview">
-<table cellpadding="0" cellspacing="0" border="0" width="97%">
-<tr>
-<td width="50"><img title="" alt="" src="./../../images/role.gif"></td><td>
-<table cellpadding="0" cellspacing="0" border="0" class="overviewTable">
-<tr>
-<td valign="top">The XP Programmer is responsible for implementing the code to support the user stories.</td>
-</tr>
-<tr>
-<td>Role Sets: <a href="./../../xp/rolesets/xp_roles,_13azwGNdEdqsrK7eslBiiA.html" guid="_13azwGNdEdqsrK7eslBiiA">XP Roles</a></td>
-</tr>
-</table>
-</td>
-</tr>
-</table>
-</div>
-<div class="sectionHeading">Relationships</div>
-<div class="sectionContent">
-<table cellpadding="0" cellspacing="0" border="0" class="sectionTable">
-<tr>
-<td align="center" colspan="2" class="sectionTableCell"><p><map name="XP_Programmer"><area href="./../../xp/tasks/breakdown_story,{90DBD758-58B8-4383-94DD-312D349512BC}.html" shape="rect" coords="210, 10, 242, 42" alt="Break down Story" title="Break down Story"/><area href="./../../xp/tasks/define_coding_standard,{C88D5B0A-1A59-4575-ADDF-8ECBBAB83410}.html" shape="rect" coords="312, 10, 344, 42" alt="Define Coding Standard" title="Define Coding Standard"/><area href="./../../xp/tasks/estimate_task,{EC483990-8129-4AE3-893C-0F7406C128DA}.html" shape="rect" coords="414, 10, 446, 42" alt="Estimate Task" title="Estimate Task"/><area href="./../../xp/tasks/estimate_user_story,{23A924D3-5989-40DD-86A9-9D8FCFB8AE52}.html" shape="rect" coords="516, 10, 548, 42" alt="Estimate User Story" title="Estimate User Story"/><area href="./../../xp/tasks/implement_spike,{85BE1C0E-F389-4246-BB22-9A52988018B7}.html" shape="rect" coords="618, 10, 650, 42" alt="Implement Spike" title="Implement Spike"/><area href="./../../xp/tasks/integrate_system,{70FEC254-8555-4844-AD82-68367E25F082}.html" shape="rect" coords="720, 10, 752, 42" alt="Integrate and Build" title="Integrate and Build"/><area href="./../../xp/tasks/refactor_code,{3DD335BB-45F6-49C7-B17A-90652C73A485}.html" shape="rect" coords="822, 10, 854, 42" alt="Refactor Code" title="Refactor Code"/><area href="./../../xp/tasks/write_code,{8F6CB99A-D2EA-44BB-8CE5-F97220D44088}.html" shape="rect" coords="210, 72, 242, 104" alt="Write Code" title="Write Code"/><area href="./../../xp/workproducts/xp_coding_standard,{1D7E042C-B29E-4169-8DF3-37DE0A5F64ED}.html" shape="rect" coords="210, 149, 242, 181" alt="Coding Standard" title="Coding Standard"/><area href="./../../xp/workproducts/xp_metaphor,{7C34EE96-C3EA-49FD-A53C-7C113B86AE01}.html" shape="rect" coords="312, 149, 344, 181" alt="Metaphor (System of Names)" title="Metaphor (System of Names)"/><area href="./../../xp/workproducts/xp_production_code,{3EDA30A8-932C-4EC2-B9AB-A840304C5BC1}.html" shape="rect" coords="414, 149, 446, 181" alt="Production Code" title="Production Code"/><area href="./../../xp/workproducts/xp_build,{FE89AB1C-E0FE-4E7F-92B4-3FA2A0ED6222}.html" shape="rect" coords="516, 149, 548, 181" alt="XP Build" title="XP Build"/><area href="./../../xp/workproducts/xp_unit_test,{D156652E-7C52-4EBD-8F23-F38169877A57}.html" shape="rect" coords="618, 149, 650, 181" alt="XP Unit Test" title="XP Unit Test"/></map><img border="0" src="xp_programmer,{08A6AF28-69B1-42DC-A957-2E6CDCB436C1}.jpg" alt="XP_Programmer" title="XP_Programmer" usemap="#XP_Programmer"/></p></td>
-</tr>
-<tr>
-<td valign="top" class="sectionTableCell"><b>Modifies:</b>
-<ul>
-<li>
-<a href="./../../xp/workproducts/xp_coding_standard,{1D7E042C-B29E-4169-8DF3-37DE0A5F64ED}.html" guid="{1D7E042C-B29E-4169-8DF3-37DE0A5F64ED}">Coding Standard</a>
-</li>
-<li>
-<a href="./../../xp/workproducts/xp_production_code,{3EDA30A8-932C-4EC2-B9AB-A840304C5BC1}.html" guid="{3EDA30A8-932C-4EC2-B9AB-A840304C5BC1}">Production Code</a>
-</li>
-<li>
-<a href="./../../xp/workproducts/xp_build,{FE89AB1C-E0FE-4E7F-92B4-3FA2A0ED6222}.html" guid="{FE89AB1C-E0FE-4E7F-92B4-3FA2A0ED6222}">XP Build</a>
-</li>
-<li>
-<a href="./../../xp/workproducts/xp_unit_test,{D156652E-7C52-4EBD-8F23-F38169877A57}.html" guid="{D156652E-7C52-4EBD-8F23-F38169877A57}">XP Unit Test</a>
-</li>
-</ul>
-</td>
-</tr>
-</table>
-</div>
-<div class="sectionHeading">Main Description</div>
-<div class="sectionContent">
-<table cellpadding="0" cellspacing="0" border="0" class="sectionTable">
-<tr valign="top">
-<td class="sectionTableCell"><a id="XE_xp_programmer__role_definition" name="XE_xp_programmer__role_definition"></a></td>
-</tr>
-</table>
-</div>
-<div class="sectionHeading">More Information</div>
-<div class="sectionContent">
-<table cellpadding="0" cellspacing="0" border="0" class="sectionTable">
-<tr valign="top">
-<th scope="row" class="sectionTableHeading">Concepts</th><td class="sectionTableCell">
-<ul>
-<li>
-<a href="./../../xp/guidances/concepts/test_driven_development,1.620567348185129E-306.html" guid="1.620567348185129E-306">Test Driven Development</a>
-</li>
-<li>
-<a href="./../../xp/guidances/concepts/collective_ownership,9.300699588493279E-306.html" guid="9.300699588493279E-306">Collective Ownership</a>
-</li>
-<li>
-<a href="./../../xp/guidances/concepts/developer_testing,4.085829182735815E-305.html" guid="4.085829182735815E-305">Developer Testing</a>
-</li>
-<li>
-<a href="./../../xp/guidances/concepts/test-first_design,6.556259235358794E-306.html" guid="6.556259235358794E-306">Test-first Design</a>
-</li>
-<li>
-<a href="./../../xp/guidances/concepts/test-ideas_list,8.834380241450745E-306.html" guid="8.834380241450745E-306">Test-Ideas List</a>
-</li>
-<li>
-<a href="./../../xp/guidances/concepts/test-ideas_catalog,1.2384224477983028E-305.html" guid="1.2384224477983028E-305">Test-Ideas Catalog</a>
-</li>
-<li>
-<a href="./../../xp/guidances/concepts/refactoring_xp_programming,1.4410217108363206E-306.html" guid="1.4410217108363206E-306">Refactoring</a>
-</li>
-<li>
-<a href="./../../xp/guidances/concepts/coding_standard,8.8116853923311E-307.html" guid="8.8116853923311E-307">Coding Standard</a>
-</li>
-<li>
-<a href="./../../xp/guidances/concepts/pair_programming,3.876855509996079E-307.html" guid="3.876855509996079E-307">Pair Programming</a>
-</li>
-<li>
-<a href="./../../xp/guidances/concepts/simple_design,1.6109092258980447E-306.html" guid="1.6109092258980447E-306">Simple Design</a>
-</li>
-<li>
-<a href="./../../xp/guidances/concepts/metaphor_system_of_names,4.884861766532753E-306.html" guid="4.884861766532753E-306">Metaphor (System of Names)</a>
-</li>
-<li>
-<a href="./../../xp/guidances/concepts/continuous_integration,3.193414568279561E-305.html" guid="3.193414568279561E-305">Continuous Integration</a>
-</li>
-</ul>
-</td>
-</tr>
-<tr valign="top">
-<th scope="row" class="sectionTableHeading">Whitepapers</th><td class="sectionTableCell">
-<ul>
-<li>
-<a href="./../../xp/guidances/whitepapers/xp_guidelines_pair_programming,7.290386721197834E-306.html" guid="7.290386721197834E-306">XP Guidelines: Pair Programming</a>
-</li>
-<li>
-<a href="./../../xp/guidances/whitepapers/xp_guidelines_test-first_design_and_refactoring,6.334658646686929E-306.html" guid="6.334658646686929E-306">XP Guidelines: Test-first Design and Refactoring</a>
-</li>
-<li>
-<a href="./../../xp/guidances/whitepapers/refactoring,1.0713784560673905E-305.html" guid="1.0713784560673905E-305">Refactoring</a>
-</li>
-</ul>
-</td>
-</tr>
-</table>
-</div>
-<table cellpadding="0" cellspacing="0" border="0" class="copyright">
-<tr>
-<td class="copyright">Copyright (c) 2002, 2006 IBM Corporation and Object Mentor. All rights reserved. <br />
-This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which
-accompanies this distribution, and is available at <a href="http://www.eclipse.org/legal/epl-v10.html" target="_blank">http://www.eclipse.org/legal/epl-v10.html</a>. <br />
-Contributors: IBM Corporation and Object Mentor - initial implementation<br /></td>
-</tr>
-</table>
-</td>
-</tr>
-</table>
-<!-- epfwiki iframe start -->
-<script language="JavaScript">
-if  (location.protocol == "http:") {
-aURL = "http://" + location.host + "/toolbar/show?url=" + document.location.href;
-document.write("  <div id=\"toolbar\">\n");
-document.write("    <iframe width=\"250\" height=\"700\" frameborder=\"0\" src=\"" + aURL +  "\" frameborder=\"0\" scrolling=\"auto\" ALLOWTRANSPARENCY=\"TRUE\"></iframe>\n");
-document.writeln("   </div>");
-}
-</script>
-<!-- epfwiki iframe end --></body>
-
-</html>
diff --git a/source/test/unit/version_test/xp_programmer.html_EPFWIKI_BL2_v1.html b/source/test/unit/version_test/xp_programmer.html_EPFWIKI_BL2_v1.html
deleted file mode 100644
index 26c9e72..0000000
--- a/source/test/unit/version_test/xp_programmer.html_EPFWIKI_BL2_v1.html
+++ /dev/null
@@ -1,190 +0,0 @@
-<html xmlns="http://www.w3.org/1999/xhtml">

-<head>

-  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

-

-  <title>Role: XP Programmer</title>

-  <meta content="Role" name="uma.type" />

-  <meta content="xp_programmer" name="uma.name" />

-  <meta content="XP Programmer" name="uma.presentationName" />

-  <meta content="RoleSet:xp_roles:XP Roles" name="uma.category" />

-  <meta content="Role" name="element_type" />

-  <meta content="description" name="filetype" />

-  <meta content="XP Programmer" name="role" />

-  <link type="text/css" href="./../../css/default.css" rel="StyleSheet" />

-  <script src="./../../scripts/contentpage.js" type="text/javascript" language="JavaScript">

-</script>

-  <script type="text/javascript" language="JavaScript">

-//<![CDATA[

-                                        backPath = './../../';

-  //]]>

-  </script>

-</head>

-

-<body>

-  <table border="0" cellpadding="0" cellspacing="0" width="99%">

-    <tr>

-      <td valign="top">

-        <a id="Top" name="Top" title="Top"></a>

-

-        <table border="0" cellpadding="0" cellspacing="0">

-          <tr>

-            <td class="pageTitle">Role: XP Programmer</td>

-

-            <td align="right" class="expandCollapseLink" width="99%"><a href="./../../index.htm" id="mainIndex" name="mainIndex" title="mainIndex"></a><!-- treebrowser tag --></td>

-          </tr>

-        </table>

-

-        <table border="0" cellpadding="0" cellspacing="0" width="99%">

-          <tr>

-            <td class="pageTitleSeparator"><img height="1" src="./../../images/shim.gif" /></td>

-          </tr>

-        </table>

-

-        <div class="overview">

-          <table border="0" cellpadding="0" cellspacing="0" width="97%">

-            <tr>

-              <td width="50">&nbsp;</td>

-

-              <td>

-                <table border="0" cellpadding="0" cellspacing="0" class="overviewTable">

-                  <tr>

-                    <td valign="top">The XP Programmer is responsible for implementing the code to support the user stories.</td>

-                  </tr>

-

-                  <tr>

-                    <td>Role Sets: <a href="./../../xp/rolesets/xp_roles,_13azwGNdEdqsrK7eslBiiA.html">XP Roles</a></td>

-                  </tr>

-                </table>

-              </td>

-            </tr>

-          </table>

-        </div>

-

-        <div class="sectionHeading">

-          Relationships

-        </div>

-

-        <div class="sectionContent">

-          <table border="0" cellpadding="0" cellspacing="0" class="sectionTable">

-            <tr>

-              <td align="center" class="sectionTableCell" colspan="2">

-                <p><map id="XP_Programmer" name="XP_Programmer">

-                  <area alt="Break down Story" coords="210, 10, 242, 42" href="./../../xp/tasks/breakdown_story,{90DBD758-58B8-4383-94DD-312D349512BC}.html" shape="rect" title="Break down Story" />

-                  <area alt="Define Coding Standard" coords="312, 10, 344, 42" href="./../../xp/tasks/define_coding_standard,{C88D5B0A-1A59-4575-ADDF-8ECBBAB83410}.html" shape="rect" title="Define Coding Standard" />

-                  <area alt="Estimate Task" coords="414, 10, 446, 42" href="./../../xp/tasks/estimate_task,{EC483990-8129-4AE3-893C-0F7406C128DA}.html" shape="rect" title="Estimate Task" />

-                  <area alt="Estimate User Story" coords="516, 10, 548, 42" href="./../../xp/tasks/estimate_user_story,{23A924D3-5989-40DD-86A9-9D8FCFB8AE52}.html" shape="rect" title="Estimate User Story" />

-                  <area alt="Implement Spike" coords="618, 10, 650, 42" href="./../../xp/tasks/implement_spike,{85BE1C0E-F389-4246-BB22-9A52988018B7}.html" shape="rect" title="Implement Spike" />

-                  <area alt="Integrate and Build" coords="720, 10, 752, 42" href="./../../xp/tasks/integrate_system,{70FEC254-8555-4844-AD82-68367E25F082}.html" shape="rect" title="Integrate and Build" />

-                  <area alt="Refactor Code" coords="822, 10, 854, 42" href="./../../xp/tasks/refactor_code,{3DD335BB-45F6-49C7-B17A-90652C73A485}.html" shape="rect" title="Refactor Code" />

-                  <area alt="Write Code" coords="210, 72, 242, 104" href="./../../xp/tasks/write_code,{8F6CB99A-D2EA-44BB-8CE5-F97220D44088}.html" shape="rect" title="Write Code" />

-                  <area alt="Coding Standard" coords="210, 149, 242, 181" href="./../../xp/workproducts/xp_coding_standard,{1D7E042C-B29E-4169-8DF3-37DE0A5F64ED}.html" shape="rect" title="Coding Standard" />

-                  <area alt="Metaphor (System of Names)" coords="312, 149, 344, 181" href="./../../xp/workproducts/xp_metaphor,{7C34EE96-C3EA-49FD-A53C-7C113B86AE01}.html" shape="rect" title="Metaphor (System of Names)" />

-                  <area alt="Production Code" coords="414, 149, 446, 181" href="./../../xp/workproducts/xp_production_code,{3EDA30A8-932C-4EC2-B9AB-A840304C5BC1}.html" shape="rect" title="Production Code" />

-                  <area alt="XP Build" coords="516, 149, 548, 181" href="./../../xp/workproducts/xp_build,{FE89AB1C-E0FE-4E7F-92B4-3FA2A0ED6222}.html" shape="rect" title="XP Build" />

-                  <area alt="XP Unit Test" coords="618, 149, 650, 181" href="./../../xp/workproducts/xp_unit_test,{D156652E-7C52-4EBD-8F23-F38169877A57}.html" shape="rect" title="XP Unit Test" />

-                </map><img alt="XP_Programmer" border="0" src="xp_programmer,{08A6AF28-69B1-42DC-A957-2E6CDCB436C1}.jpg" title="XP_Programmer" usemap="#XP_Programmer" /></p>

-              </td>

-            </tr>

-

-            <tr>

-              <td class="sectionTableCell" valign="top">

-                <strong>Modifies:</strong>

-

-                <ul>

-                  <li><a href="./../../xp/workproducts/xp_coding_standard,{1D7E042C-B29E-4169-8DF3-37DE0A5F64ED}.html">Coding Standard</a></li>

-

-                  <li><a href="./../../xp/workproducts/xp_production_code,{3EDA30A8-932C-4EC2-B9AB-A840304C5BC1}.html">Production Code</a></li>

-

-                  <li><a href="./../../xp/workproducts/xp_build,{FE89AB1C-E0FE-4E7F-92B4-3FA2A0ED6222}.html">XP Build</a></li>

-

-                  <li><a href="./../../xp/workproducts/xp_unit_test,{D156652E-7C52-4EBD-8F23-F38169877A57}.html">XP Unit Test</a></li>

-                </ul>

-              </td>

-            </tr>

-          </table>

-        </div>

-

-        <div class="sectionHeading">

-          Main Description

-        </div>

-

-        <div class="sectionContent">

-          <table border="0" cellpadding="0" cellspacing="0" class="sectionTable">

-            <tr valign="top">

-              <td class="sectionTableCell"><a id="XE_xp_programmer__role_definition" name="XE_xp_programmer__role_definition" title="XE_xp_programmer__role_definition"></a></td>

-            </tr>

-          </table>

-        </div>

-

-        <div class="sectionHeading">

-          More Information

-        </div>

-

-        <div class="sectionContent">

-          <table border="0" cellpadding="0" cellspacing="0" class="sectionTable">

-            <tr valign="top">

-              <th class="sectionTableHeading" scope="row">Concepts</th>

-

-              <td class="sectionTableCell">

-                <ul>

-                  <li><a href="./../../xp/guidances/concepts/test_driven_development,1.620567348185129E-306.html">Test Driven Development</a></li>

-

-                  <li><a href="./../../xp/guidances/concepts/collective_ownership,9.300699588493279E-306.html">Collective Ownership</a></li>

-

-                  <li><a href="./../../xp/guidances/concepts/developer_testing,4.085829182735815E-305.html">Developer Testing</a></li>

-

-                  <li><a href="./../../xp/guidances/concepts/test-first_design,6.556259235358794E-306.html">Test-first Design</a></li>

-

-                  <li><a href="./../../xp/guidances/concepts/test-ideas_list,8.834380241450745E-306.html">Test-Ideas List</a></li>

-

-                  <li><a href="./../../xp/guidances/concepts/test-ideas_catalog,1.2384224477983028E-305.html">Test-Ideas Catalog</a></li>

-

-                  <li><a href="./../../xp/guidances/concepts/refactoring_xp_programming,1.4410217108363206E-306.html">Refactoring</a></li>

-

-                  <li><a href="./../../xp/guidances/concepts/pair_programming,3.876855509996079E-307.html">Pair Programming</a></li>

-

-                  <li><a href="./../../xp/guidances/concepts/simple_design,1.6109092258980447E-306.html">Simple Design</a></li>

-

-                  <li><a href="./../../xp/guidances/concepts/metaphor_system_of_names,4.884861766532753E-306.html">Metaphor (System of Names)</a></li>

-

-                  <li><a href="./../../xp/guidances/concepts/continuous_integration,3.193414568279561E-305.html">Continuous Integration</a></li>

-

-                  <li><a href="http://www.demo.epfwiki.net/wikis/openup/openup_basic/customcategories/resources/GetStarted_48.gif">Toegevoegd</a><br /></li>

-                </ul>

-              </td>

-            </tr>

-

-            <tr valign="top">

-              <th class="sectionTableHeading" scope="row">Whitepapers</th>

-

-              <td class="sectionTableCell">

-                <ul>

-                  <li><a href="./../../xp/guidances/whitepapers/xp_guidelines_pair_programming,7.290386721197834E-306.html">XP Guidelines: Pair Programming</a></li>

-

-                  <li><a href="./../../xp/guidances/whitepapers/xp_guidelines_test-first_design_and_refactoring,6.334658646686929E-306.html">XP Guidelines: Test-first Design and Refactoring</a></li>

-

-                  <li><a href="./../../xp/guidances/whitepapers/refactoring,1.0713784560673905E-305.html">Refactoring</a></li>

-                </ul>

-              </td>

-            </tr>

-

-            <tr>

-              <td>&nbsp;</td>

-

-              <td>&nbsp;<img alt=" " height="48" src="http://www.demo.epfwiki.net/wikis/openup/openup_basic/customcategories/resources/GetStarted_48.gif" width="48" /></td>

-            </tr>

-          </table>

-        </div>

-

-        <table border="0" cellpadding="0" cellspacing="0" class="copyright">

-          <tr>

-            <td class="copyright">Copyright (c) 2002, 2006 IBM Corporation and Object Mentor. All rights reserved.<br />

-            This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at <a href="http://www.eclipse.org/legal/epl-v10.html" target="_blank">http://www.eclipse.org/legal/epl-v10.html</a>.<br />

-            Contributors: IBM Corporation and Object Mentor - initial implementation<br /></td>

-          </tr>

-        </table>

-      </td>

-    </tr>

-  </table>

-</body>

-</html>

diff --git a/source/vendor/plugins/auto_complete/README b/source/vendor/plugins/auto_complete/README
deleted file mode 100644
index e08a815..0000000
--- a/source/vendor/plugins/auto_complete/README
+++ /dev/null
@@ -1,23 +0,0 @@
-Example:
-
-  # Controller
-  class BlogController < ApplicationController
-    auto_complete_for :post, :title
-  end
-
-  # View
-  <%= text_field_with_auto_complete :post, title %>
-
-By default, auto_complete_for limits the results to 10 entries,
-and sorts by the given field.
-
-auto_complete_for takes a third parameter, an options hash to
-the find method used to search for the records:
-
-  auto_complete_for :post, :title, :limit => 15, :order => 'created_at DESC'
-
-For more examples, see script.aculo.us:
-* http://script.aculo.us/demos/ajax/autocompleter
-* http://script.aculo.us/demos/ajax/autocompleter_customized
-
-Copyright (c) 2007 David Heinemeier Hansson, released under the MIT license   
diff --git a/source/vendor/plugins/auto_complete/Rakefile b/source/vendor/plugins/auto_complete/Rakefile
deleted file mode 100644
index 5af4e82..0000000
--- a/source/vendor/plugins/auto_complete/Rakefile
+++ /dev/null
@@ -1,22 +0,0 @@
-require 'rake' 
-require 'rake/testtask' 
-require 'rake/rdoctask' 
- 
-desc 'Default: run unit tests.' 
-task :default => :test 
- 
-desc 'Test auto_complete plugin.' 
-Rake::TestTask.new(:test) do |t| 
-  t.libs << 'lib' 
-  t.pattern = 'test/**/*_test.rb' 
-  t.verbose = true 
-end 
- 
-desc 'Generate documentation for auto_complete plugin.' 
-Rake::RDocTask.new(:rdoc) do |rdoc| 
-  rdoc.rdoc_dir = 'rdoc' 
-  rdoc.title    = 'Auto Complete' 
-  rdoc.options << '--line-numbers' << '--inline-source' 
-  rdoc.rdoc_files.include('README') 
-  rdoc.rdoc_files.include('lib/**/*.rb') 
-end
diff --git a/source/vendor/plugins/auto_complete/init.rb b/source/vendor/plugins/auto_complete/init.rb
deleted file mode 100644
index 87bf027..0000000
--- a/source/vendor/plugins/auto_complete/init.rb
+++ /dev/null
@@ -1,2 +0,0 @@
-ActionController::Base.send :include, AutoComplete
-ActionController::Base.helper AutoCompleteMacrosHelper
\ No newline at end of file
diff --git a/source/vendor/plugins/auto_complete/lib/auto_complete.rb b/source/vendor/plugins/auto_complete/lib/auto_complete.rb
deleted file mode 100644
index 4afc7c2..0000000
--- a/source/vendor/plugins/auto_complete/lib/auto_complete.rb
+++ /dev/null
@@ -1,47 +0,0 @@
-module AutoComplete      
-  
-  def self.included(base)
-    base.extend(ClassMethods)
-  end
-
-  #
-  # Example:
-  #
-  #   # Controller
-  #   class BlogController < ApplicationController
-  #     auto_complete_for :post, :title
-  #   end
-  #
-  #   # View
-  #   <%= text_field_with_auto_complete :post, title %>
-  #
-  # By default, auto_complete_for limits the results to 10 entries,
-  # and sorts by the given field.
-  # 
-  # auto_complete_for takes a third parameter, an options hash to
-  # the find method used to search for the records:
-  #
-  #   auto_complete_for :post, :title, :limit => 15, :order => 'created_at DESC'
-  #
-  # For help on defining text input fields with autocompletion, 
-  # see ActionView::Helpers::JavaScriptHelper.
-  #
-  # For more examples, see script.aculo.us:
-  # * http://script.aculo.us/demos/ajax/autocompleter
-  # * http://script.aculo.us/demos/ajax/autocompleter_customized
-  module ClassMethods
-    def auto_complete_for(object, method, options = {})
-      define_method("auto_complete_for_#{object}_#{method}") do
-        find_options = { 
-          :conditions => [ "LOWER(#{method}) LIKE ?", '%' + params[object][method].downcase + '%' ], 
-          :order => "#{method} ASC",
-          :limit => 10 }.merge!(options)
-        
-        @items = object.to_s.camelize.constantize.find(:all, find_options)
-
-        render :inline => "<%= auto_complete_result @items, '#{method}' %>"
-      end
-    end
-  end
-  
-end
\ No newline at end of file
diff --git a/source/vendor/plugins/auto_complete/lib/auto_complete_macros_helper.rb b/source/vendor/plugins/auto_complete/lib/auto_complete_macros_helper.rb
deleted file mode 100644
index 1d25ee4..0000000
--- a/source/vendor/plugins/auto_complete/lib/auto_complete_macros_helper.rb
+++ /dev/null
@@ -1,143 +0,0 @@
-module AutoCompleteMacrosHelper      
-  # Adds AJAX autocomplete functionality to the text input field with the 
-  # DOM ID specified by +field_id+.
-  #
-  # This function expects that the called action returns an HTML <ul> list,
-  # or nothing if no entries should be displayed for autocompletion.
-  #
-  # You'll probably want to turn the browser's built-in autocompletion off,
-  # so be sure to include an <tt>autocomplete="off"</tt> attribute with your text
-  # input field.
-  #
-  # The autocompleter object is assigned to a Javascript variable named <tt>field_id</tt>_auto_completer.
-  # This object is useful if you for example want to trigger the auto-complete suggestions through
-  # other means than user input (for that specific case, call the <tt>activate</tt> method on that object). 
-  # 
-  # Required +options+ are:
-  # <tt>:url</tt>::                  URL to call for autocompletion results
-  #                                  in url_for format.
-  # 
-  # Addtional +options+ are:
-  # <tt>:update</tt>::               Specifies the DOM ID of the element whose 
-  #                                  innerHTML should be updated with the autocomplete
-  #                                  entries returned by the AJAX request. 
-  #                                  Defaults to <tt>field_id</tt> + '_auto_complete'
-  # <tt>:with</tt>::                 A JavaScript expression specifying the
-  #                                  parameters for the XMLHttpRequest. This defaults
-  #                                  to 'fieldname=value'.
-  # <tt>:frequency</tt>::            Determines the time to wait after the last keystroke
-  #                                  for the AJAX request to be initiated.
-  # <tt>:indicator</tt>::            Specifies the DOM ID of an element which will be
-  #                                  displayed while autocomplete is running.
-  # <tt>:tokens</tt>::               A string or an array of strings containing
-  #                                  separator tokens for tokenized incremental 
-  #                                  autocompletion. Example: <tt>:tokens => ','</tt> would
-  #                                  allow multiple autocompletion entries, separated
-  #                                  by commas.
-  # <tt>:min_chars</tt>::            The minimum number of characters that should be
-  #                                  in the input field before an Ajax call is made
-  #                                  to the server.
-  # <tt>:on_hide</tt>::              A Javascript expression that is called when the
-  #                                  autocompletion div is hidden. The expression
-  #                                  should take two variables: element and update.
-  #                                  Element is a DOM element for the field, update
-  #                                  is a DOM element for the div from which the
-  #                                  innerHTML is replaced.
-  # <tt>:on_show</tt>::              Like on_hide, only now the expression is called
-  #                                  then the div is shown.
-  # <tt>:after_update_element</tt>:: A Javascript expression that is called when the
-  #                                  user has selected one of the proposed values. 
-  #                                  The expression should take two variables: element and value.
-  #                                  Element is a DOM element for the field, value
-  #                                  is the value selected by the user.
-  # <tt>:select</tt>::               Pick the class of the element from which the value for 
-  #                                  insertion should be extracted. If this is not specified,
-  #                                  the entire element is used.
-  # <tt>:method</tt>::               Specifies the HTTP verb to use when the autocompletion
-  #                                  request is made. Defaults to POST.
-  def auto_complete_field(field_id, options = {})
-    function =  "var #{field_id}_auto_completer = new Ajax.Autocompleter("
-    function << "'#{field_id}', "
-    function << "'" + (options[:update] || "#{field_id}_auto_complete") + "', "
-    function << "'#{url_for(options[:url])}'"
-    
-    js_options = {}
-    js_options[:tokens] = array_or_string_for_javascript(options[:tokens]) if options[:tokens]
-    js_options[:callback]   = "function(element, value) { return #{options[:with]} }" if options[:with]
-    js_options[:indicator]  = "'#{options[:indicator]}'" if options[:indicator]
-    js_options[:select]     = "'#{options[:select]}'" if options[:select]
-    js_options[:paramName]  = "'#{options[:param_name]}'" if options[:param_name]
-    js_options[:frequency]  = "#{options[:frequency]}" if options[:frequency]
-    js_options[:method]     = "'#{options[:method].to_s}'" if options[:method]
-
-    { :after_update_element => :afterUpdateElement, 
-      :on_show => :onShow, :on_hide => :onHide, :min_chars => :minChars }.each do |k,v|
-      js_options[v] = options[k] if options[k]
-    end
-
-    function << (', ' + options_for_javascript(js_options) + ')')
-
-    javascript_tag(function)
-  end
-  
-  # Use this method in your view to generate a return for the AJAX autocomplete requests.
-  #
-  # Example action:
-  #
-  #   def auto_complete_for_item_title
-  #     @items = Item.find(:all, 
-  #       :conditions => [ 'LOWER(description) LIKE ?', 
-  #       '%' + request.raw_post.downcase + '%' ])
-  #     render :inline => "<%= auto_complete_result(@items, 'description') %>"
-  #   end
-  #
-  # The auto_complete_result can of course also be called from a view belonging to the 
-  # auto_complete action if you need to decorate it further.
-  def auto_complete_result(entries, field, phrase = nil)
-    return unless entries
-    items = entries.map { |entry| content_tag("li", phrase ? highlight(entry[field], phrase) : h(entry[field])) }
-    content_tag("ul", items.uniq)
-  end
-  
-  # Wrapper for text_field with added AJAX autocompletion functionality.
-  #
-  # In your controller, you'll need to define an action called
-  # auto_complete_for to respond the AJAX calls,
-  # 
-  def text_field_with_auto_complete(object, method, tag_options = {}, completion_options = {})
-    (completion_options[:skip_style] ? "" : auto_complete_stylesheet) +
-    text_field(object, method, tag_options) +
-    content_tag("div", "", :id => "#{object}_#{method}_auto_complete", :class => "auto_complete") +
-    auto_complete_field("#{object}_#{method}", { :url => { :action => "auto_complete_for_#{object}_#{method}" } }.update(completion_options))
-  end
-
-  private
-    def auto_complete_stylesheet
-      content_tag('style', <<-EOT, :type => Mime::CSS)
-        div.auto_complete {
-          width: 350px;
-          background: #fff;
-        }
-        div.auto_complete ul {
-          border:1px solid #888;
-          margin:0;
-          padding:0;
-          width:100%;
-          list-style-type:none;
-        }
-        div.auto_complete ul li {
-          margin:0;
-          padding:3px;
-        }
-        div.auto_complete ul li.selected {
-          background-color: #ffb;
-        }
-        div.auto_complete ul strong.highlight {
-          color: #800; 
-          margin:0;
-          padding:0;
-        }
-      EOT
-    end
-
-end   
diff --git a/source/vendor/plugins/auto_complete/test/auto_complete_test.rb b/source/vendor/plugins/auto_complete/test/auto_complete_test.rb
deleted file mode 100644
index dc9a5c9..0000000
--- a/source/vendor/plugins/auto_complete/test/auto_complete_test.rb
+++ /dev/null
@@ -1,67 +0,0 @@
-require File.expand_path(File.join(File.dirname(__FILE__), '../../../../test/test_helper')) 
-
-class AutoCompleteTest < Test::Unit::TestCase
-  include AutoComplete
-  include AutoCompleteMacrosHelper
-  
-  include ActionView::Helpers::UrlHelper
-  include ActionView::Helpers::TagHelper
-  include ActionView::Helpers::TextHelper
-  include ActionView::Helpers::FormHelper
-  include ActionView::Helpers::CaptureHelper
-  
-  def setup
-    @controller = Class.new do
-      def url_for(options)
-        url =  "http://www.example.com/"
-        url << options[:action].to_s if options and options[:action]
-        url
-      end
-    end
-    @controller = @controller.new
-  end
-
-
-  def test_auto_complete_field
-    assert_dom_equal %(<script type=\"text/javascript\">\n//<![CDATA[\nvar some_input_auto_completer = new Ajax.Autocompleter('some_input', 'some_input_auto_complete', 'http://www.example.com/autocomplete', {})\n//]]>\n</script>),
-      auto_complete_field("some_input", :url => { :action => "autocomplete" });
-    assert_dom_equal %(<script type=\"text/javascript\">\n//<![CDATA[\nvar some_input_auto_completer = new Ajax.Autocompleter('some_input', 'some_input_auto_complete', 'http://www.example.com/autocomplete', {tokens:','})\n//]]>\n</script>),
-      auto_complete_field("some_input", :url => { :action => "autocomplete" }, :tokens => ',');
-    assert_dom_equal %(<script type=\"text/javascript\">\n//<![CDATA[\nvar some_input_auto_completer = new Ajax.Autocompleter('some_input', 'some_input_auto_complete', 'http://www.example.com/autocomplete', {tokens:[',']})\n//]]>\n</script>),
-      auto_complete_field("some_input", :url => { :action => "autocomplete" }, :tokens => [',']);  
-    assert_dom_equal %(<script type=\"text/javascript\">\n//<![CDATA[\nvar some_input_auto_completer = new Ajax.Autocompleter('some_input', 'some_input_auto_complete', 'http://www.example.com/autocomplete', {minChars:3})\n//]]>\n</script>),
-      auto_complete_field("some_input", :url => { :action => "autocomplete" }, :min_chars => 3);
-    assert_dom_equal %(<script type=\"text/javascript\">\n//<![CDATA[\nvar some_input_auto_completer = new Ajax.Autocompleter('some_input', 'some_input_auto_complete', 'http://www.example.com/autocomplete', {onHide:function(element, update){alert('me');}})\n//]]>\n</script>),
-      auto_complete_field("some_input", :url => { :action => "autocomplete" }, :on_hide => "function(element, update){alert('me');}");
-    assert_dom_equal %(<script type=\"text/javascript\">\n//<![CDATA[\nvar some_input_auto_completer = new Ajax.Autocompleter('some_input', 'some_input_auto_complete', 'http://www.example.com/autocomplete', {frequency:2})\n//]]>\n</script>),
-      auto_complete_field("some_input", :url => { :action => "autocomplete" }, :frequency => 2);
-    assert_dom_equal %(<script type=\"text/javascript\">\n//<![CDATA[\nvar some_input_auto_completer = new Ajax.Autocompleter('some_input', 'some_input_auto_complete', 'http://www.example.com/autocomplete', {afterUpdateElement:function(element,value){alert('You have chosen: '+value)}})\n//]]>\n</script>),
-      auto_complete_field("some_input", :url => { :action => "autocomplete" }, 
-        :after_update_element => "function(element,value){alert('You have chosen: '+value)}");
-    assert_dom_equal %(<script type=\"text/javascript\">\n//<![CDATA[\nvar some_input_auto_completer = new Ajax.Autocompleter('some_input', 'some_input_auto_complete', 'http://www.example.com/autocomplete', {paramName:'huidriwusch'})\n//]]>\n</script>),
-      auto_complete_field("some_input", :url => { :action => "autocomplete" }, :param_name => 'huidriwusch');
-    assert_dom_equal %(<script type=\"text/javascript\">\n//<![CDATA[\nvar some_input_auto_completer = new Ajax.Autocompleter('some_input', 'some_input_auto_complete', 'http://www.example.com/autocomplete', {method:'get'})\n//]]>\n</script>),
-      auto_complete_field("some_input", :url => { :action => "autocomplete" }, :method => :get);
-  end
-  
-  def test_auto_complete_result
-    result = [ { :title => 'test1'  }, { :title => 'test2'  } ]
-    assert_equal %(<ul><li>test1</li><li>test2</li></ul>), 
-      auto_complete_result(result, :title)
-    assert_equal %(<ul><li>t<strong class=\"highlight\">est</strong>1</li><li>t<strong class=\"highlight\">est</strong>2</li></ul>), 
-      auto_complete_result(result, :title, "est")
-    
-    resultuniq = [ { :title => 'test1'  }, { :title => 'test1'  } ]
-    assert_equal %(<ul><li>t<strong class=\"highlight\">est</strong>1</li></ul>), 
-      auto_complete_result(resultuniq, :title, "est")
-  end
-  
-  def test_text_field_with_auto_complete
-    assert_match %(<style type="text/css">),
-      text_field_with_auto_complete(:message, :recipient)
-
-    assert_dom_equal %(<input id=\"message_recipient\" name=\"message[recipient]\" size=\"30\" type=\"text\" /><div class=\"auto_complete\" id=\"message_recipient_auto_complete\"></div><script type=\"text/javascript\">\n//<![CDATA[\nvar message_recipient_auto_completer = new Ajax.Autocompleter('message_recipient', 'message_recipient_auto_complete', 'http://www.example.com/auto_complete_for_message_recipient', {})\n//]]>\n</script>),
-      text_field_with_auto_complete(:message, :recipient, {}, :skip_style => true)
-  end
-  
-end
diff --git a/source/vendor/plugins/classic_pagination/CHANGELOG b/source/vendor/plugins/classic_pagination/CHANGELOG
deleted file mode 100644
index d7d11f1..0000000
--- a/source/vendor/plugins/classic_pagination/CHANGELOG
+++ /dev/null
@@ -1,152 +0,0 @@
-* Exported the changelog of Pagination code for historical reference.
-
-* Imported some patches from Rails Trac (others closed as "wontfix"):
-  #8176, #7325, #7028, #4113. Documentation is much cleaner now and there
-  are some new unobtrusive features!
-
-* Extracted Pagination from Rails trunk (r6795)
-
-#
-# ChangeLog for /trunk/actionpack/lib/action_controller/pagination.rb 
-# 
-# Generated by Trac 0.10.3
-# 05/20/07 23:48:02
-#
-
-09/03/06 23:28:54 david [4953]
-	* trunk/actionpack/lib/action_controller/pagination.rb (modified)
-	Docs and deprecation
-
-08/07/06 12:40:14 bitsweat [4715]
-	* trunk/actionpack/lib/action_controller/pagination.rb (modified)
-	Deprecate direct usage of @params. Update ActionView::Base for
-	instance var deprecation.
-
-06/21/06 02:16:11 rick [4476]
-	* trunk/actionpack/lib/action_controller/pagination.rb (modified)
-	Fix indent in pagination documentation. Closes #4990.  [Kevin Clark]
-
-04/25/06 17:42:48 marcel [4268]
-	* trunk/actionpack/lib/action_controller/pagination.rb (modified)
-	Remove all remaining references to @params in the documentation.
-
-03/16/06 06:38:08 rick [3899]
-	* trunk/actionpack/lib/action_view/helpers/pagination_helper.rb (modified)
-	trivial documentation patch for #pagination_links [Francois
-	Beausoleil] closes #4258
-
-02/20/06 03:15:22 david [3620]
-	* trunk/actionpack/lib/action_controller/pagination.rb (modified)
-	* trunk/actionpack/test/activerecord/pagination_test.rb (modified)
-	* trunk/activerecord/CHANGELOG (modified)
-	* trunk/activerecord/lib/active_record/base.rb (modified)
-	* trunk/activerecord/test/base_test.rb (modified)
-	Added :count option to pagination that'll make it possible for the
-	ActiveRecord::Base.count call to using something else than * for the
-	count. Especially important for count queries using DISTINCT #3839
-	[skaes]. Added :select option to Base.count that'll allow you to
-	select something else than * to be counted on. Especially important
-	for count queries using DISTINCT (closes #3839) [skaes].
-
-02/09/06 09:17:40 nzkoz [3553]
-	* trunk/actionpack/lib/action_controller/pagination.rb (modified)
-	* trunk/actionpack/test/active_record_unit.rb (added)
-	* trunk/actionpack/test/activerecord (added)
-	* trunk/actionpack/test/activerecord/active_record_assertions_test.rb (added)
-	* trunk/actionpack/test/activerecord/pagination_test.rb (added)
-	* trunk/actionpack/test/controller/active_record_assertions_test.rb (deleted)
-	* trunk/actionpack/test/fixtures/companies.yml (added)
-	* trunk/actionpack/test/fixtures/company.rb (added)
-	* trunk/actionpack/test/fixtures/db_definitions (added)
-	* trunk/actionpack/test/fixtures/db_definitions/sqlite.sql (added)
-	* trunk/actionpack/test/fixtures/developer.rb (added)
-	* trunk/actionpack/test/fixtures/developers_projects.yml (added)
-	* trunk/actionpack/test/fixtures/developers.yml (added)
-	* trunk/actionpack/test/fixtures/project.rb (added)
-	* trunk/actionpack/test/fixtures/projects.yml (added)
-	* trunk/actionpack/test/fixtures/replies.yml (added)
-	* trunk/actionpack/test/fixtures/reply.rb (added)
-	* trunk/actionpack/test/fixtures/topic.rb (added)
-	* trunk/actionpack/test/fixtures/topics.yml (added)
-	* Fix pagination problems when using include
-	* Introduce Unit Tests for pagination
-	* Allow count to work with :include by using count distinct.
-
-	[Kevin Clark &amp; Jeremy Hopple]
-
-11/05/05 02:10:29 bitsweat [2878]
-	* trunk/actionpack/lib/action_controller/pagination.rb (modified)
-	Update paginator docs.  Closes #2744.
-
-10/16/05 15:42:03 minam [2649]
-	* trunk/actionpack/lib/action_controller/pagination.rb (modified)
-	Update/clean up AP documentation (rdoc)
-
-08/31/05 00:13:10 ulysses [2078]
-	* trunk/actionpack/CHANGELOG (modified)
-	* trunk/actionpack/lib/action_controller/pagination.rb (modified)
-	Add option to specify the singular name used by pagination. Closes
-	#1960
-
-08/23/05 14:24:15 minam [2041]
-	* trunk/actionpack/CHANGELOG (modified)
-	* trunk/actionpack/lib/action_controller/pagination.rb (modified)
-	Add support for :include with pagination (subject to existing
-	constraints for :include with :limit and :offset) #1478
-	[michael@schubert.cx]
-
-07/15/05 20:27:38 david [1839]
-	* trunk/actionpack/lib/action_controller/pagination.rb (modified)
-	* trunk/actionpack/lib/action_view/helpers/pagination_helper.rb (modified)
-	More pagination speed #1334 [Stefan Kaes]
-
-07/14/05 08:02:01 david [1832]
-	* trunk/actionpack/lib/action_controller/pagination.rb (modified)
-	* trunk/actionpack/lib/action_view/helpers/pagination_helper.rb (modified)
-	* trunk/actionpack/test/controller/addresses_render_test.rb (modified)
-	Made pagination faster #1334 [Stefan Kaes]
-
-04/13/05 05:40:22 david [1159]
-	* trunk/actionpack/CHANGELOG (modified)
-	* trunk/actionpack/lib/action_controller/pagination.rb (modified)
-	* trunk/activerecord/lib/active_record/base.rb (modified)
-	Fixed pagination to work with joins #1034 [scott@sigkill.org]
-
-04/02/05 09:11:17 david [1067]
-	* trunk/actionpack/CHANGELOG (modified)
-	* trunk/actionpack/lib/action_controller/pagination.rb (modified)
-	* trunk/actionpack/lib/action_controller/scaffolding.rb (modified)
-	* trunk/actionpack/lib/action_controller/templates/scaffolds/list.rhtml (modified)
-	* trunk/railties/lib/rails_generator/generators/components/scaffold/templates/controller.rb (modified)
-	* trunk/railties/lib/rails_generator/generators/components/scaffold/templates/view_list.rhtml (modified)
-	Added pagination for scaffolding (10 items per page) #964
-	[mortonda@dgrmm.net]
-
-03/31/05 14:46:11 david [1048]
-	* trunk/actionpack/lib/action_view/helpers/pagination_helper.rb (modified)
-	Improved the message display on the exception handler pages #963
-	[Johan Sorensen]
-
-03/27/05 00:04:07 david [1017]
-	* trunk/actionpack/CHANGELOG (modified)
-	* trunk/actionpack/lib/action_view/helpers/pagination_helper.rb (modified)
-	Fixed that pagination_helper would ignore :params #947 [Sebastian
-	Kanthak]
-
-03/22/05 13:09:44 david [976]
-	* trunk/actionpack/lib/action_view/helpers/pagination_helper.rb (modified)
-	Fixed documentation and prepared for 0.11.0 release
-
-03/21/05 14:35:36 david [967]
-	* trunk/actionpack/lib/action_controller/pagination.rb (modified)
-	* trunk/actionpack/lib/action_view/helpers/pagination_helper.rb (modified)
-	Tweaked the documentation
-
-03/20/05 23:12:05 david [949]
-	* trunk/actionpack/CHANGELOG (modified)
-	* trunk/actionpack/lib/action_controller.rb (modified)
-	* trunk/actionpack/lib/action_controller/pagination.rb (added)
-	* trunk/actionpack/lib/action_view/helpers/pagination_helper.rb (added)
-	* trunk/activesupport/lib/active_support/core_ext/kernel.rb (added)
-	Added pagination support through both a controller and helper add-on
-	#817 [Sam Stephenson]
diff --git a/source/vendor/plugins/classic_pagination/README b/source/vendor/plugins/classic_pagination/README
deleted file mode 100644
index e949049..0000000
--- a/source/vendor/plugins/classic_pagination/README
+++ /dev/null
@@ -1,18 +0,0 @@
-Pagination
-==========
-
-To install:
-
-  script/plugin install svn://errtheblog.com/svn/plugins/classic_pagination
-
-This code was extracted from Rails trunk after the release 1.2.3.
-WARNING: this code is dead. It is unmaintained, untested and full of cruft.
-
-There is a much better pagination plugin called will_paginate.
-Install it like this and glance through the README:
-
-  script/plugin install svn://errtheblog.com/svn/plugins/will_paginate
-
-It doesn't have the same API, but is in fact much nicer. You can
-have both plugins installed until you change your controller/view code that
-handles pagination. Then, simply uninstall classic_pagination.
diff --git a/source/vendor/plugins/classic_pagination/Rakefile b/source/vendor/plugins/classic_pagination/Rakefile
deleted file mode 100644
index c7e374b..0000000
--- a/source/vendor/plugins/classic_pagination/Rakefile
+++ /dev/null
@@ -1,22 +0,0 @@
-require 'rake'
-require 'rake/testtask'
-require 'rake/rdoctask'
-
-desc 'Default: run unit tests.'
-task :default => :test
-
-desc 'Test the classic_pagination plugin.'
-Rake::TestTask.new(:test) do |t|
-  t.libs << 'lib'
-  t.pattern = 'test/**/*_test.rb'
-  t.verbose = true
-end
-
-desc 'Generate documentation for the classic_pagination plugin.'
-Rake::RDocTask.new(:rdoc) do |rdoc|
-  rdoc.rdoc_dir = 'rdoc'
-  rdoc.title    = 'Pagination'
-  rdoc.options << '--line-numbers' << '--inline-source'
-  rdoc.rdoc_files.include('README')
-  rdoc.rdoc_files.include('lib/**/*.rb')
-end
diff --git a/source/vendor/plugins/classic_pagination/init.rb b/source/vendor/plugins/classic_pagination/init.rb
deleted file mode 100644
index 25e552f..0000000
--- a/source/vendor/plugins/classic_pagination/init.rb
+++ /dev/null
@@ -1,33 +0,0 @@
-#--
-# Copyright (c) 2004-2006 David Heinemeier Hansson
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be
-# included in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#++
-
-require 'pagination'
-require 'pagination_helper'
-
-ActionController::Base.class_eval do
-  include ActionController::Pagination
-end
-
-ActionView::Base.class_eval do
-  include ActionView::Helpers::PaginationHelper
-end
diff --git a/source/vendor/plugins/classic_pagination/install.rb b/source/vendor/plugins/classic_pagination/install.rb
deleted file mode 100644
index adf746f..0000000
--- a/source/vendor/plugins/classic_pagination/install.rb
+++ /dev/null
@@ -1 +0,0 @@
-puts "\n\n" + File.read(File.dirname(__FILE__) + '/README')
diff --git a/source/vendor/plugins/classic_pagination/lib/pagination.rb b/source/vendor/plugins/classic_pagination/lib/pagination.rb
deleted file mode 100644
index b6e9cf4..0000000
--- a/source/vendor/plugins/classic_pagination/lib/pagination.rb
+++ /dev/null
@@ -1,405 +0,0 @@
-module ActionController
-  # === Action Pack pagination for Active Record collections
-  #
-  # The Pagination module aids in the process of paging large collections of
-  # Active Record objects. It offers macro-style automatic fetching of your
-  # model for multiple views, or explicit fetching for single actions. And if
-  # the magic isn't flexible enough for your needs, you can create your own
-  # paginators with a minimal amount of code.
-  #
-  # The Pagination module can handle as much or as little as you wish. In the
-  # controller, have it automatically query your model for pagination; or,
-  # if you prefer, create Paginator objects yourself.
-  #
-  # Pagination is included automatically for all controllers.
-  #
-  # For help rendering pagination links, see 
-  # ActionView::Helpers::PaginationHelper.
-  #
-  # ==== Automatic pagination for every action in a controller
-  #
-  #   class PersonController < ApplicationController   
-  #     model :person
-  #
-  #     paginate :people, :order => 'last_name, first_name',
-  #              :per_page => 20
-  #     
-  #     # ...
-  #   end
-  #
-  # Each action in this controller now has access to a <tt>@people</tt>
-  # instance variable, which is an ordered collection of model objects for the
-  # current page (at most 20, sorted by last name and first name), and a 
-  # <tt>@person_pages</tt> Paginator instance. The current page is determined
-  # by the <tt>params[:page]</tt> variable.
-  #
-  # ==== Pagination for a single action
-  #
-  #   def list
-  #     @person_pages, @people =
-  #       paginate :people, :order => 'last_name, first_name'
-  #   end
-  #
-  # Like the previous example, but explicitly creates <tt>@person_pages</tt>
-  # and <tt>@people</tt> for a single action, and uses the default of 10 items
-  # per page.
-  #
-  # ==== Custom/"classic" pagination 
-  #
-  #   def list
-  #     @person_pages = Paginator.new self, Person.count, 10, params[:page]
-  #     @people = Person.find :all, :order => 'last_name, first_name', 
-  #                           :limit  =>  @person_pages.items_per_page,
-  #                           :offset =>  @person_pages.current.offset
-  #   end
-  # 
-  # Explicitly creates the paginator from the previous example and uses 
-  # Paginator#to_sql to retrieve <tt>@people</tt> from the model.
-  #
-  module Pagination
-    unless const_defined?(:OPTIONS)
-      # A hash holding options for controllers using macro-style pagination
-      OPTIONS = Hash.new
-  
-      # The default options for pagination
-      DEFAULT_OPTIONS = {
-        :class_name => nil,
-        :singular_name => nil,
-        :per_page   => 10,
-        :conditions => nil,
-        :order_by   => nil,
-        :order      => nil,
-        :join       => nil,
-        :joins      => nil,
-        :count      => nil,
-        :include    => nil,
-        :select     => nil,
-        :group      => nil,
-        :parameter  => 'page'
-      }
-    else
-      DEFAULT_OPTIONS[:group] = nil
-    end
-      
-    def self.included(base) #:nodoc:
-      super
-      base.extend(ClassMethods)
-    end
-  
-    def self.validate_options!(collection_id, options, in_action) #:nodoc:
-      options.merge!(DEFAULT_OPTIONS) {|key, old, new| old}
-
-      valid_options = DEFAULT_OPTIONS.keys
-      valid_options << :actions unless in_action
-    
-      unknown_option_keys = options.keys - valid_options
-      raise ActionController::ActionControllerError,
-            "Unknown options: #{unknown_option_keys.join(', ')}" unless
-              unknown_option_keys.empty?
-
-      options[:singular_name] ||= Inflector.singularize(collection_id.to_s)
-      options[:class_name]  ||= Inflector.camelize(options[:singular_name])
-    end
-
-    # Returns a paginator and a collection of Active Record model instances
-    # for the paginator's current page. This is designed to be used in a
-    # single action; to automatically paginate multiple actions, consider
-    # ClassMethods#paginate.
-    #
-    # +options+ are:
-    # <tt>:singular_name</tt>:: the singular name to use, if it can't be inferred by singularizing the collection name
-    # <tt>:class_name</tt>:: the class name to use, if it can't be inferred by
-    #                        camelizing the singular name
-    # <tt>:per_page</tt>::   the maximum number of items to include in a 
-    #                        single page. Defaults to 10
-    # <tt>:conditions</tt>:: optional conditions passed to Model.find(:all, *params) and
-    #                        Model.count
-    # <tt>:order</tt>::      optional order parameter passed to Model.find(:all, *params)
-    # <tt>:order_by</tt>::   (deprecated, used :order) optional order parameter passed to Model.find(:all, *params)
-    # <tt>:joins</tt>::      optional joins parameter passed to Model.find(:all, *params)
-    #                        and Model.count
-    # <tt>:join</tt>::       (deprecated, used :joins or :include) optional join parameter passed to Model.find(:all, *params)
-    #                        and Model.count
-    # <tt>:include</tt>::    optional eager loading parameter passed to Model.find(:all, *params)
-    #                        and Model.count
-    # <tt>:select</tt>::     :select parameter passed to Model.find(:all, *params)
-    #
-    # <tt>:count</tt>::      parameter passed as :select option to Model.count(*params)
-    #
-    # <tt>:group</tt>::     :group parameter passed to Model.find(:all, *params). It forces the use of DISTINCT instead of plain COUNT to come up with the total number of records
-    #
-    def paginate(collection_id, options={})
-      Pagination.validate_options!(collection_id, options, true)
-      paginator_and_collection_for(collection_id, options)
-    end
-
-    # These methods become class methods on any controller 
-    module ClassMethods
-      # Creates a +before_filter+ which automatically paginates an Active
-      # Record model for all actions in a controller (or certain actions if
-      # specified with the <tt>:actions</tt> option).
-      #
-      # +options+ are the same as PaginationHelper#paginate, with the addition 
-      # of:
-      # <tt>:actions</tt>:: an array of actions for which the pagination is
-      #                     active. Defaults to +nil+ (i.e., every action)
-      def paginate(collection_id, options={})
-        Pagination.validate_options!(collection_id, options, false)
-        module_eval do
-          before_filter :create_paginators_and_retrieve_collections
-          OPTIONS[self] ||= Hash.new
-          OPTIONS[self][collection_id] = options
-        end
-      end
-    end
-
-    def create_paginators_and_retrieve_collections #:nodoc:
-      Pagination::OPTIONS[self.class].each do |collection_id, options|
-        next unless options[:actions].include? action_name if
-          options[:actions]
-
-        paginator, collection = 
-          paginator_and_collection_for(collection_id, options)
-
-        paginator_name = "@#{options[:singular_name]}_pages"
-        self.instance_variable_set(paginator_name, paginator)
-
-        collection_name = "@#{collection_id.to_s}"
-        self.instance_variable_set(collection_name, collection)     
-      end
-    end
-  
-    # Returns the total number of items in the collection to be paginated for
-    # the +model+ and given +conditions+. Override this method to implement a
-    # custom counter.
-    def count_collection_for_pagination(model, options)
-      model.count(:conditions => options[:conditions],
-                  :joins => options[:join] || options[:joins],
-                  :include => options[:include],
-                  :select => (options[:group] ? "DISTINCT #{options[:group]}" : options[:count]))
-    end
-    
-    # Returns a collection of items for the given +model+ and +options[conditions]+,
-    # ordered by +options[order]+, for the current page in the given +paginator+.
-    # Override this method to implement a custom finder.
-    def find_collection_for_pagination(model, options, paginator)
-      model.find(:all, :conditions => options[:conditions],
-                 :order => options[:order_by] || options[:order],
-                 :joins => options[:join] || options[:joins], :include => options[:include],
-                 :select => options[:select], :limit => options[:per_page],
-                 :group => options[:group], :offset => paginator.current.offset)
-    end
-  
-    protected :create_paginators_and_retrieve_collections,
-              :count_collection_for_pagination,
-              :find_collection_for_pagination
-
-    def paginator_and_collection_for(collection_id, options) #:nodoc:
-      klass = options[:class_name].constantize
-      page  = params[options[:parameter]]
-      count = count_collection_for_pagination(klass, options)
-      paginator = Paginator.new(self, count, options[:per_page], page)
-      collection = find_collection_for_pagination(klass, options, paginator)
-    
-      return paginator, collection 
-    end
-      
-    private :paginator_and_collection_for
-
-    # A class representing a paginator for an Active Record collection.
-    class Paginator
-      include Enumerable
-
-      # Creates a new Paginator on the given +controller+ for a set of items
-      # of size +item_count+ and having +items_per_page+ items per page.
-      # Raises ArgumentError if items_per_page is out of bounds (i.e., less
-      # than or equal to zero). The page CGI parameter for links defaults to
-      # "page" and can be overridden with +page_parameter+.
-      def initialize(controller, item_count, items_per_page, current_page=1)
-        raise ArgumentError, 'must have at least one item per page' if
-          items_per_page <= 0
-
-        @controller = controller
-        @item_count = item_count || 0
-        @items_per_page = items_per_page
-        @pages = {}
-        
-        self.current_page = current_page
-      end
-      attr_reader :controller, :item_count, :items_per_page
-      
-      # Sets the current page number of this paginator. If +page+ is a Page
-      # object, its +number+ attribute is used as the value; if the page does 
-      # not belong to this Paginator, an ArgumentError is raised.
-      def current_page=(page)
-        if page.is_a? Page
-          raise ArgumentError, 'Page/Paginator mismatch' unless
-            page.paginator == self
-        end
-        page = page.to_i
-        @current_page_number = has_page_number?(page) ? page : 1
-      end
-
-      # Returns a Page object representing this paginator's current page.
-      def current_page
-        @current_page ||= self[@current_page_number]
-      end
-      alias current :current_page
-
-      # Returns a new Page representing the first page in this paginator.
-      def first_page
-        @first_page ||= self[1]
-      end
-      alias first :first_page
-
-      # Returns a new Page representing the last page in this paginator.
-      def last_page
-        @last_page ||= self[page_count] 
-      end
-      alias last :last_page
-
-      # Returns the number of pages in this paginator.
-      def page_count
-        @page_count ||= @item_count.zero? ? 1 :
-                          (q,r=@item_count.divmod(@items_per_page); r==0? q : q+1)
-      end
-
-      alias length :page_count
-
-      # Returns true if this paginator contains the page of index +number+.
-      def has_page_number?(number)
-        number >= 1 and number <= page_count
-      end
-
-      # Returns a new Page representing the page with the given index
-      # +number+.
-      def [](number)
-        @pages[number] ||= Page.new(self, number)
-      end
-
-      # Successively yields all the paginator's pages to the given block.
-      def each(&block)
-        page_count.times do |n|
-          yield self[n+1]
-        end
-      end
-
-      # A class representing a single page in a paginator.
-      class Page
-        include Comparable
-
-        # Creates a new Page for the given +paginator+ with the index
-        # +number+. If +number+ is not in the range of valid page numbers or
-        # is not a number at all, it defaults to 1.
-        def initialize(paginator, number)
-          @paginator = paginator
-          @number = number.to_i
-          @number = 1 unless @paginator.has_page_number? @number
-        end
-        attr_reader :paginator, :number
-        alias to_i :number
-
-        # Compares two Page objects and returns true when they represent the 
-        # same page (i.e., their paginators are the same and they have the
-        # same page number).
-        def ==(page)
-          return false if page.nil?
-          @paginator == page.paginator and 
-            @number == page.number
-        end
-
-        # Compares two Page objects and returns -1 if the left-hand page comes
-        # before the right-hand page, 0 if the pages are equal, and 1 if the
-        # left-hand page comes after the right-hand page. Raises ArgumentError
-        # if the pages do not belong to the same Paginator object.
-        def <=>(page)
-          raise ArgumentError unless @paginator == page.paginator
-          @number <=> page.number
-        end
-
-        # Returns the item offset for the first item in this page.
-        def offset
-          @paginator.items_per_page * (@number - 1)
-        end
-        
-        # Returns the number of the first item displayed.
-        def first_item
-          offset + 1
-        end
-        
-        # Returns the number of the last item displayed.
-        def last_item
-          [@paginator.items_per_page * @number, @paginator.item_count].min
-        end
-
-        # Returns true if this page is the first page in the paginator.
-        def first?
-          self == @paginator.first
-        end
-
-        # Returns true if this page is the last page in the paginator.
-        def last?
-          self == @paginator.last
-        end
-
-        # Returns a new Page object representing the page just before this
-        # page, or nil if this is the first page.
-        def previous
-          if first? then nil else @paginator[@number - 1] end
-        end
-
-        # Returns a new Page object representing the page just after this
-        # page, or nil if this is the last page.
-        def next
-          if last? then nil else @paginator[@number + 1] end
-        end
-
-        # Returns a new Window object for this page with the specified 
-        # +padding+.
-        def window(padding=2)
-          Window.new(self, padding)
-        end
-
-        # Returns the limit/offset array for this page.
-        def to_sql
-          [@paginator.items_per_page, offset]
-        end
-        
-        def to_param #:nodoc:
-          @number.to_s
-        end
-      end
-
-      # A class for representing ranges around a given page.
-      class Window
-        # Creates a new Window object for the given +page+ with the specified
-        # +padding+.
-        def initialize(page, padding=2)
-          @paginator = page.paginator
-          @page = page
-          self.padding = padding
-        end
-        attr_reader :paginator, :page
-
-        # Sets the window's padding (the number of pages on either side of the
-        # window page).
-        def padding=(padding)
-          @padding = padding < 0 ? 0 : padding
-          # Find the beginning and end pages of the window
-          @first = @paginator.has_page_number?(@page.number - @padding) ?
-            @paginator[@page.number - @padding] : @paginator.first
-          @last =  @paginator.has_page_number?(@page.number + @padding) ?
-            @paginator[@page.number + @padding] : @paginator.last
-        end
-        attr_reader :padding, :first, :last
-
-        # Returns an array of Page objects in the current window.
-        def pages
-          (@first.number..@last.number).to_a.collect! {|n| @paginator[n]}
-        end
-        alias to_a :pages
-      end
-    end
-
-  end
-end
diff --git a/source/vendor/plugins/classic_pagination/lib/pagination_helper.rb b/source/vendor/plugins/classic_pagination/lib/pagination_helper.rb
deleted file mode 100644
index 069d775..0000000
--- a/source/vendor/plugins/classic_pagination/lib/pagination_helper.rb
+++ /dev/null
@@ -1,135 +0,0 @@
-module ActionView
-  module Helpers
-    # Provides methods for linking to ActionController::Pagination objects using a simple generator API.  You can optionally
-    # also build your links manually using ActionView::Helpers::AssetHelper#link_to like so:
-    #
-    # <%= link_to "Previous page", { :page => paginator.current.previous } if paginator.current.previous %>
-    # <%= link_to "Next page", { :page => paginator.current.next } if paginator.current.next %>
-    module PaginationHelper
-      unless const_defined?(:DEFAULT_OPTIONS)
-        DEFAULT_OPTIONS = {
-          :name => :page,
-          :window_size => 2,
-          :always_show_anchors => true,
-          :link_to_current_page => false,
-          :params => {}
-        }
-      end
-
-      # Creates a basic HTML link bar for the given +paginator+.  Links will be created
-      # for the next and/or previous page and for a number of other pages around the current
-      # pages position. The +html_options+ hash is passed to +link_to+ when the links are created.
-      #
-      # ==== Options
-      # <tt>:name</tt>::                 the routing name for this paginator
-      #                                  (defaults to +page+)
-      # <tt>:prefix</tt>::               prefix for pagination links
-      #                                  (i.e. Older Pages: 1 2 3 4)
-      # <tt>:suffix</tt>::               suffix for pagination links
-      #                                  (i.e. 1 2 3 4 <- Older Pages)
-      # <tt>:window_size</tt>::          the number of pages to show around 
-      #                                  the current page (defaults to <tt>2</tt>)
-      # <tt>:always_show_anchors</tt>::  whether or not the first and last
-      #                                  pages should always be shown
-      #                                  (defaults to +true+)
-      # <tt>:link_to_current_page</tt>:: whether or not the current page
-      #                                  should be linked to (defaults to
-      #                                  +false+)
-      # <tt>:params</tt>::               any additional routing parameters
-      #                                  for page URLs
-      #
-      # ==== Examples
-      #  # We'll assume we have a paginator setup in @person_pages...
-      #
-      #  pagination_links(@person_pages)
-      #  # => 1 <a href="/?page=2/">2</a> <a href="/?page=3/">3</a>  ... <a href="/?page=10/">10</a>
-      #
-      #  pagination_links(@person_pages, :link_to_current_page => true)
-      #  # => <a href="/?page=1/">1</a> <a href="/?page=2/">2</a> <a href="/?page=3/">3</a>  ... <a href="/?page=10/">10</a>
-      #
-      #  pagination_links(@person_pages, :always_show_anchors => false)
-      #  # => 1 <a href="/?page=2/">2</a> <a href="/?page=3/">3</a> 
-      #
-      #  pagination_links(@person_pages, :window_size => 1)
-      #  # => 1 <a href="/?page=2/">2</a>  ... <a href="/?page=10/">10</a>
-      #
-      #  pagination_links(@person_pages, :params => { :viewer => "flash" })
-      #  # => 1 <a href="/?page=2&amp;viewer=flash/">2</a> <a href="/?page=3&amp;viewer=flash/">3</a>  ... 
-      #  #    <a href="/?page=10&amp;viewer=flash/">10</a>
-      def pagination_links(paginator, options={}, html_options={})
-        name = options[:name] || DEFAULT_OPTIONS[:name]
-        params = (options[:params] || DEFAULT_OPTIONS[:params]).clone
-        
-        prefix = options[:prefix] || ''
-        suffix = options[:suffix] || ''
-
-        pagination_links_each(paginator, options, prefix, suffix) do |n|
-          params[name] = n
-          link_to(n.to_s, params, html_options)
-        end
-      end
-
-      # Iterate through the pages of a given +paginator+, invoking a
-      # block for each page number that needs to be rendered as a link.
-      # 
-      # ==== Options
-      # <tt>:window_size</tt>::          the number of pages to show around 
-      #                                  the current page (defaults to +2+)
-      # <tt>:always_show_anchors</tt>::  whether or not the first and last
-      #                                  pages should always be shown
-      #                                  (defaults to +true+)
-      # <tt>:link_to_current_page</tt>:: whether or not the current page
-      #                                  should be linked to (defaults to
-      #                                  +false+)
-      #
-      # ==== Example
-      #  # Turn paginated links into an Ajax call
-      #  pagination_links_each(paginator, page_options) do |link|
-      #    options = { :url => {:action => 'list'}, :update => 'results' }
-      #    html_options = { :href => url_for(:action => 'list') }
-      #
-      #    link_to_remote(link.to_s, options, html_options)
-      #  end
-      def pagination_links_each(paginator, options, prefix = nil, suffix = nil)
-        options = DEFAULT_OPTIONS.merge(options)
-        link_to_current_page = options[:link_to_current_page]
-        always_show_anchors = options[:always_show_anchors]
-
-        current_page = paginator.current_page
-        window_pages = current_page.window(options[:window_size]).pages
-        return if window_pages.length <= 1 unless link_to_current_page
-        
-        first, last = paginator.first, paginator.last
-        
-        html = ''
-
-        html << prefix if prefix
-
-        if always_show_anchors and not (wp_first = window_pages[0]).first?
-          html << yield(first.number)
-          html << ' ... ' if wp_first.number - first.number > 1
-          html << ' '
-        end
-          
-        window_pages.each do |page|
-          if current_page == page && !link_to_current_page
-            html << page.number.to_s
-          else
-            html << yield(page.number)
-          end
-          html << ' '
-        end
-        
-        if always_show_anchors and not (wp_last = window_pages[-1]).last? 
-          html << ' ... ' if last.number - wp_last.number > 1
-          html << yield(last.number)
-        end
-
-        html << suffix if suffix
-
-        html
-      end
-      
-    end # PaginationHelper
-  end # Helpers
-end # ActionView
diff --git a/source/vendor/plugins/classic_pagination/test/fixtures/companies.yml b/source/vendor/plugins/classic_pagination/test/fixtures/companies.yml
deleted file mode 100644
index 707f72a..0000000
--- a/source/vendor/plugins/classic_pagination/test/fixtures/companies.yml
+++ /dev/null
@@ -1,24 +0,0 @@
-thirty_seven_signals:
-  id: 1
-  name: 37Signals
-  rating: 4
-
-TextDrive:
-  id: 2
-  name: TextDrive
-  rating: 4
-
-PlanetArgon:
-  id: 3
-  name: Planet Argon
-  rating: 4
-
-Google:
-  id: 4
-  name: Google
-  rating: 4
-  
-Ionist:
-  id: 5
-  name: Ioni.st
-  rating: 4
\ No newline at end of file
diff --git a/source/vendor/plugins/classic_pagination/test/fixtures/company.rb b/source/vendor/plugins/classic_pagination/test/fixtures/company.rb
deleted file mode 100644
index 0d1c29b..0000000
--- a/source/vendor/plugins/classic_pagination/test/fixtures/company.rb
+++ /dev/null
@@ -1,9 +0,0 @@
-class Company < ActiveRecord::Base
-  attr_protected :rating
-  set_sequence_name :companies_nonstd_seq
-
-  validates_presence_of :name
-  def validate
-    errors.add('rating', 'rating should not be 2') if rating == 2
-  end  
-end
\ No newline at end of file
diff --git a/source/vendor/plugins/classic_pagination/test/fixtures/developer.rb b/source/vendor/plugins/classic_pagination/test/fixtures/developer.rb
deleted file mode 100644
index f5e5b90..0000000
--- a/source/vendor/plugins/classic_pagination/test/fixtures/developer.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-class Developer < ActiveRecord::Base
-  has_and_belongs_to_many :projects
-end
-
-class DeVeLoPeR < ActiveRecord::Base
-  set_table_name "developers"
-end
diff --git a/source/vendor/plugins/classic_pagination/test/fixtures/developers.yml b/source/vendor/plugins/classic_pagination/test/fixtures/developers.yml
deleted file mode 100644
index 308bf75..0000000
--- a/source/vendor/plugins/classic_pagination/test/fixtures/developers.yml
+++ /dev/null
@@ -1,21 +0,0 @@
-david:
-  id: 1
-  name: David
-  salary: 80000
-
-jamis:
-  id: 2
-  name: Jamis
-  salary: 150000
-
-<% for digit in 3..10 %>
-dev_<%= digit %>:
-  id: <%= digit %>
-  name: fixture_<%= digit %>
-  salary: 100000
-<% end %>
-
-poor_jamis:
-  id: 11
-  name: Jamis
-  salary: 9000
\ No newline at end of file
diff --git a/source/vendor/plugins/classic_pagination/test/fixtures/developers_projects.yml b/source/vendor/plugins/classic_pagination/test/fixtures/developers_projects.yml
deleted file mode 100644
index cee359c..0000000
--- a/source/vendor/plugins/classic_pagination/test/fixtures/developers_projects.yml
+++ /dev/null
@@ -1,13 +0,0 @@
-david_action_controller:
-  developer_id: 1
-  project_id: 2
-  joined_on: 2004-10-10
-
-david_active_record:
-  developer_id: 1
-  project_id: 1
-  joined_on: 2004-10-10
-
-jamis_active_record:
-  developer_id: 2
-  project_id: 1
\ No newline at end of file
diff --git a/source/vendor/plugins/classic_pagination/test/fixtures/project.rb b/source/vendor/plugins/classic_pagination/test/fixtures/project.rb
deleted file mode 100644
index 2b53d39..0000000
--- a/source/vendor/plugins/classic_pagination/test/fixtures/project.rb
+++ /dev/null
@@ -1,3 +0,0 @@
-class Project < ActiveRecord::Base
-  has_and_belongs_to_many :developers, :uniq => true
-end
diff --git a/source/vendor/plugins/classic_pagination/test/fixtures/projects.yml b/source/vendor/plugins/classic_pagination/test/fixtures/projects.yml
deleted file mode 100644
index 02800c7..0000000
--- a/source/vendor/plugins/classic_pagination/test/fixtures/projects.yml
+++ /dev/null
@@ -1,7 +0,0 @@
-action_controller:
-  id: 2
-  name: Active Controller
-
-active_record:
-  id: 1
-  name: Active Record
diff --git a/source/vendor/plugins/classic_pagination/test/fixtures/replies.yml b/source/vendor/plugins/classic_pagination/test/fixtures/replies.yml
deleted file mode 100644
index 284c9c0..0000000
--- a/source/vendor/plugins/classic_pagination/test/fixtures/replies.yml
+++ /dev/null
@@ -1,13 +0,0 @@
-witty_retort:
-  id: 1
-  topic_id: 1
-  content: Birdman is better!
-  created_at: <%= 6.hours.ago.to_s(:db) %>
-  updated_at: nil
-  
-another:
-  id: 2
-  topic_id: 2
-  content: Nuh uh!
-  created_at: <%= 1.hour.ago.to_s(:db) %>
-  updated_at: nil
\ No newline at end of file
diff --git a/source/vendor/plugins/classic_pagination/test/fixtures/reply.rb b/source/vendor/plugins/classic_pagination/test/fixtures/reply.rb
deleted file mode 100644
index ea84042..0000000
--- a/source/vendor/plugins/classic_pagination/test/fixtures/reply.rb
+++ /dev/null
@@ -1,5 +0,0 @@
-class Reply < ActiveRecord::Base
-  belongs_to :topic, :include => [:replies]
-  
-  validates_presence_of :content
-end
diff --git a/source/vendor/plugins/classic_pagination/test/fixtures/schema.sql b/source/vendor/plugins/classic_pagination/test/fixtures/schema.sql
deleted file mode 100644
index b4e7539..0000000
--- a/source/vendor/plugins/classic_pagination/test/fixtures/schema.sql
+++ /dev/null
@@ -1,42 +0,0 @@
-CREATE TABLE 'companies' (
-  'id' INTEGER PRIMARY KEY NOT NULL,
-  'name' TEXT DEFAULT NULL,
-  'rating' INTEGER DEFAULT 1
-);
-
-CREATE TABLE 'replies' (
-  'id' INTEGER PRIMARY KEY NOT NULL, 
-  'content' text, 
-  'created_at' datetime, 
-  'updated_at' datetime, 
-  'topic_id' integer
-);
-
-CREATE TABLE 'topics' (
-  'id' INTEGER PRIMARY KEY NOT NULL, 
-  'title' varchar(255), 
-  'subtitle' varchar(255), 
-  'content' text, 
-  'created_at' datetime, 
-  'updated_at' datetime
-);
-
-CREATE TABLE 'developers' (
-  'id' INTEGER PRIMARY KEY NOT NULL,
-  'name' TEXT DEFAULT NULL,
-  'salary' INTEGER DEFAULT 70000,
-  'created_at' DATETIME DEFAULT NULL,
-  'updated_at' DATETIME DEFAULT NULL
-);
-
-CREATE TABLE 'projects' (
-  'id' INTEGER PRIMARY KEY NOT NULL,
-  'name' TEXT DEFAULT NULL
-);
-
-CREATE TABLE 'developers_projects' (
-  'developer_id' INTEGER NOT NULL,
-  'project_id' INTEGER NOT NULL,
-  'joined_on' DATE DEFAULT NULL,
-  'access_level' INTEGER DEFAULT 1
-);
diff --git a/source/vendor/plugins/classic_pagination/test/fixtures/topic.rb b/source/vendor/plugins/classic_pagination/test/fixtures/topic.rb
deleted file mode 100644
index 0beeecf..0000000
--- a/source/vendor/plugins/classic_pagination/test/fixtures/topic.rb
+++ /dev/null
@@ -1,3 +0,0 @@
-class Topic < ActiveRecord::Base
-  has_many :replies, :include => [:user], :dependent => :destroy
-end
diff --git a/source/vendor/plugins/classic_pagination/test/fixtures/topics.yml b/source/vendor/plugins/classic_pagination/test/fixtures/topics.yml
deleted file mode 100644
index 61ea02d..0000000
--- a/source/vendor/plugins/classic_pagination/test/fixtures/topics.yml
+++ /dev/null
@@ -1,22 +0,0 @@
-futurama:
-  id: 1
-  title: Isnt futurama awesome?
-  subtitle: It really is, isnt it.
-  content: I like futurama
-  created_at: <%= 1.day.ago.to_s(:db) %>
-  updated_at:
-  
-harvey_birdman:
-  id: 2
-  title: Harvey Birdman is the king of all men
-  subtitle: yup
-  content: It really is
-  created_at: <%= 2.hours.ago.to_s(:db) %>
-  updated_at:
-
-rails:
-  id: 3
-  title: Rails is nice
-  subtitle: It makes me happy
-  content: except when I have to hack internals to fix pagination. even then really.
-  created_at: <%= 20.minutes.ago.to_s(:db) %>
diff --git a/source/vendor/plugins/classic_pagination/test/helper.rb b/source/vendor/plugins/classic_pagination/test/helper.rb
deleted file mode 100644
index 3f76d5a..0000000
--- a/source/vendor/plugins/classic_pagination/test/helper.rb
+++ /dev/null
@@ -1,117 +0,0 @@
-require 'test/unit'
-
-unless defined?(ActiveRecord)
-  plugin_root = File.join(File.dirname(__FILE__), '..')
-
-  # first look for a symlink to a copy of the framework
-  if framework_root = ["#{plugin_root}/rails", "#{plugin_root}/../../rails"].find { |p| File.directory? p }
-    puts "found framework root: #{framework_root}"
-    # this allows for a plugin to be tested outside an app
-    $:.unshift "#{framework_root}/activesupport/lib", "#{framework_root}/activerecord/lib", "#{framework_root}/actionpack/lib"
-  else
-    # is the plugin installed in an application?
-    app_root = plugin_root + '/../../..'
-
-    if File.directory? app_root + '/config'
-      puts 'using config/boot.rb'
-      ENV['RAILS_ENV'] = 'test'
-      require File.expand_path(app_root + '/config/boot')
-    else
-      # simply use installed gems if available
-      puts 'using rubygems'
-      require 'rubygems'
-      gem 'actionpack'; gem 'activerecord'
-    end
-  end
-
-  %w(action_pack active_record action_controller active_record/fixtures action_controller/test_process).each {|f| require f}
-
-  Dependencies.load_paths.unshift "#{plugin_root}/lib"
-end
-
-# Define the connector
-class ActiveRecordTestConnector
-  cattr_accessor :able_to_connect
-  cattr_accessor :connected
-
-  # Set our defaults
-  self.connected = false
-  self.able_to_connect = true
-
-  class << self
-    def setup
-      unless self.connected || !self.able_to_connect
-        setup_connection
-        load_schema
-        require_fixture_models
-        self.connected = true
-      end
-    rescue Exception => e  # errors from ActiveRecord setup
-      $stderr.puts "\nSkipping ActiveRecord assertion tests: #{e}"
-      #$stderr.puts "  #{e.backtrace.join("\n  ")}\n"
-      self.able_to_connect = false
-    end
-
-    private
-
-    def setup_connection
-      if Object.const_defined?(:ActiveRecord)
-        defaults = { :database => ':memory:' }
-        begin
-          options = defaults.merge :adapter => 'sqlite3', :timeout => 500
-          ActiveRecord::Base.establish_connection(options)
-          ActiveRecord::Base.configurations = { 'sqlite3_ar_integration' => options }
-          ActiveRecord::Base.connection
-        rescue Exception  # errors from establishing a connection
-          $stderr.puts 'SQLite 3 unavailable; trying SQLite 2.'
-          options = defaults.merge :adapter => 'sqlite'
-          ActiveRecord::Base.establish_connection(options)
-          ActiveRecord::Base.configurations = { 'sqlite2_ar_integration' => options }
-          ActiveRecord::Base.connection
-        end
-
-        Object.send(:const_set, :QUOTED_TYPE, ActiveRecord::Base.connection.quote_column_name('type')) unless Object.const_defined?(:QUOTED_TYPE)
-      else
-        raise "Can't setup connection since ActiveRecord isn't loaded."
-      end
-    end
-
-    # Load actionpack sqlite tables
-    def load_schema
-      File.read(File.dirname(__FILE__) + "/fixtures/schema.sql").split(';').each do |sql|
-        ActiveRecord::Base.connection.execute(sql) unless sql.blank?
-      end
-    end
-
-    def require_fixture_models
-      Dir.glob(File.dirname(__FILE__) + "/fixtures/*.rb").each {|f| require f}
-    end
-  end
-end
-
-# Test case for inheritance
-class ActiveRecordTestCase < Test::Unit::TestCase
-  # Set our fixture path
-  if ActiveRecordTestConnector.able_to_connect
-    self.fixture_path = "#{File.dirname(__FILE__)}/fixtures/"
-    self.use_transactional_fixtures = false
-  end
-
-  def self.fixtures(*args)
-    super if ActiveRecordTestConnector.connected
-  end
-
-  def run(*args)
-    super if ActiveRecordTestConnector.connected
-  end
-
-  # Default so Test::Unit::TestCase doesn't complain
-  def test_truth
-  end
-end
-
-ActiveRecordTestConnector.setup
-ActionController::Routing::Routes.reload rescue nil
-ActionController::Routing::Routes.draw do |map|
-  map.connect ':controller/:action/:id'
-end
diff --git a/source/vendor/plugins/classic_pagination/test/pagination_helper_test.rb b/source/vendor/plugins/classic_pagination/test/pagination_helper_test.rb
deleted file mode 100644
index d8394a7..0000000
--- a/source/vendor/plugins/classic_pagination/test/pagination_helper_test.rb
+++ /dev/null
@@ -1,38 +0,0 @@
-require File.dirname(__FILE__) + '/helper'
-require File.dirname(__FILE__) + '/../init'
-
-class PaginationHelperTest < Test::Unit::TestCase
-  include ActionController::Pagination
-  include ActionView::Helpers::PaginationHelper
-  include ActionView::Helpers::UrlHelper
-  include ActionView::Helpers::TagHelper
-
-  def setup
-    @controller = Class.new do
-      attr_accessor :url, :request
-      def url_for(options, *parameters_for_method_reference)
-        url
-      end
-    end
-    @controller = @controller.new
-    @controller.url = "http://www.example.com"
-  end
-
-  def test_pagination_links
-    total, per_page, page = 30, 10, 1
-    output = pagination_links Paginator.new(@controller, total, per_page, page)
-    assert_equal "1 <a href=\"http://www.example.com\">2</a> <a href=\"http://www.example.com\">3</a> ", output
-  end
-
-  def test_pagination_links_with_prefix
-    total, per_page, page = 30, 10, 1
-    output = pagination_links Paginator.new(@controller, total, per_page, page), :prefix => 'Newer '
-    assert_equal "Newer 1 <a href=\"http://www.example.com\">2</a> <a href=\"http://www.example.com\">3</a> ", output
-  end
-
-  def test_pagination_links_with_suffix
-    total, per_page, page = 30, 10, 1
-    output = pagination_links Paginator.new(@controller, total, per_page, page), :suffix => 'Older'
-    assert_equal "1 <a href=\"http://www.example.com\">2</a> <a href=\"http://www.example.com\">3</a> Older", output
-  end
-end
diff --git a/source/vendor/plugins/classic_pagination/test/pagination_test.rb b/source/vendor/plugins/classic_pagination/test/pagination_test.rb
deleted file mode 100644
index 16a6f1d..0000000
--- a/source/vendor/plugins/classic_pagination/test/pagination_test.rb
+++ /dev/null
@@ -1,177 +0,0 @@
-require File.dirname(__FILE__) + '/helper'
-require File.dirname(__FILE__) + '/../init'
-
-class PaginationTest < ActiveRecordTestCase
-  fixtures :topics, :replies, :developers, :projects, :developers_projects
-  
-  class PaginationController < ActionController::Base
-    if respond_to? :view_paths=
-      self.view_paths = [ "#{File.dirname(__FILE__)}/../fixtures/" ]
-    else
-      self.template_root = [ "#{File.dirname(__FILE__)}/../fixtures/" ]
-    end
-    
-    def simple_paginate
-      @topic_pages, @topics = paginate(:topics)
-      render :nothing => true
-    end
-    
-    def paginate_with_per_page
-      @topic_pages, @topics = paginate(:topics, :per_page => 1)
-      render :nothing => true
-    end
-    
-    def paginate_with_order
-      @topic_pages, @topics = paginate(:topics, :order => 'created_at asc')
-      render :nothing => true
-    end
-    
-    def paginate_with_order_by
-      @topic_pages, @topics = paginate(:topics, :order_by => 'created_at asc')
-      render :nothing => true
-    end
-    
-    def paginate_with_include_and_order
-      @topic_pages, @topics = paginate(:topics, :include => :replies, :order => 'replies.created_at asc, topics.created_at asc')
-      render :nothing => true
-    end
-    
-    def paginate_with_conditions
-      @topic_pages, @topics = paginate(:topics, :conditions => ["created_at > ?", 30.minutes.ago])
-      render :nothing => true
-    end
-    
-    def paginate_with_class_name
-      @developer_pages, @developers = paginate(:developers, :class_name => "DeVeLoPeR")
-      render :nothing => true
-    end
-    
-    def paginate_with_singular_name
-      @developer_pages, @developers = paginate()
-      render :nothing => true
-    end
-    
-    def paginate_with_joins
-      @developer_pages, @developers = paginate(:developers, 
-                                             :joins => 'LEFT JOIN developers_projects ON developers.id = developers_projects.developer_id',
-                                             :conditions => 'project_id=1')        
-      render :nothing => true
-    end
-    
-    def paginate_with_join
-      @developer_pages, @developers = paginate(:developers, 
-                                             :join => 'LEFT JOIN developers_projects ON developers.id = developers_projects.developer_id',
-                                             :conditions => 'project_id=1')        
-      render :nothing => true
-    end
-     
-    def paginate_with_join_and_count
-      @developer_pages, @developers = paginate(:developers, 
-                                             :join => 'd LEFT JOIN developers_projects ON d.id = developers_projects.developer_id',
-                                             :conditions => 'project_id=1',
-                                             :count => "d.id")        
-      render :nothing => true
-    end
-
-    def paginate_with_join_and_group
-      @developer_pages, @developers = paginate(:developers, 
-                                             :join => 'INNER JOIN developers_projects ON developers.id = developers_projects.developer_id',
-                                             :group => 'developers.id')
-      render :nothing => true
-    end
-    
-    def rescue_errors(e) raise e end
-
-    def rescue_action(e) raise end
-    
-  end
-  
-  def setup
-    @controller = PaginationController.new
-    @request    = ActionController::TestRequest.new
-    @response   = ActionController::TestResponse.new
-    super
-  end
-
-  # Single Action Pagination Tests
-
-  def test_simple_paginate
-    get :simple_paginate
-    assert_equal 1, assigns(:topic_pages).page_count
-    assert_equal 3, assigns(:topics).size
-  end
-  
-  def test_paginate_with_per_page
-    get :paginate_with_per_page
-    assert_equal 1, assigns(:topics).size
-    assert_equal 3, assigns(:topic_pages).page_count
-  end
-  
-  def test_paginate_with_order
-    get :paginate_with_order
-    expected = [topics(:futurama),
-               topics(:harvey_birdman),
-               topics(:rails)]
-    assert_equal expected, assigns(:topics)
-    assert_equal 1, assigns(:topic_pages).page_count
-  end
-  
-  def test_paginate_with_order_by
-    get :paginate_with_order
-    expected = assigns(:topics)
-    get :paginate_with_order_by
-    assert_equal expected, assigns(:topics)  
-    assert_equal 1, assigns(:topic_pages).page_count    
-  end
-  
-  def test_paginate_with_conditions
-    get :paginate_with_conditions
-    expected = [topics(:rails)]
-    assert_equal expected, assigns(:topics)
-    assert_equal 1, assigns(:topic_pages).page_count
-  end
-  
-  def test_paginate_with_class_name
-    get :paginate_with_class_name
-    
-    assert assigns(:developers).size > 0
-    assert_equal DeVeLoPeR, assigns(:developers).first.class
-  end
-      
-  def test_paginate_with_joins
-    get :paginate_with_joins
-    assert_equal 2, assigns(:developers).size
-    developer_names = assigns(:developers).map { |d| d.name }
-    assert developer_names.include?('David')
-    assert developer_names.include?('Jamis')
-  end
-  
-  def test_paginate_with_join_and_conditions
-    get :paginate_with_joins
-    expected = assigns(:developers)
-    get :paginate_with_join
-    assert_equal expected, assigns(:developers)
-  end
-  
-  def test_paginate_with_join_and_count
-    get :paginate_with_joins
-    expected = assigns(:developers)
-    get :paginate_with_join_and_count
-    assert_equal expected, assigns(:developers)
-  end
-  
-  def test_paginate_with_include_and_order
-    get :paginate_with_include_and_order
-    expected = Topic.find(:all, :include => 'replies', :order => 'replies.created_at asc, topics.created_at asc', :limit => 10)
-    assert_equal expected, assigns(:topics)
-  end
-
-  def test_paginate_with_join_and_group
-    get :paginate_with_join_and_group
-    assert_equal 2, assigns(:developers).size
-    assert_equal 2, assigns(:developer_pages).item_count
-    developer_names = assigns(:developers).map { |d| d.name }
-    assert developer_names.include?('David')
-    assert developer_names.include?('Jamis')
-  end
-end
diff --git a/source/vendor/plugins/openup/COPYRIGHT b/source/vendor/plugins/openup/COPYRIGHT
deleted file mode 100644
index 6db5b26..0000000
--- a/source/vendor/plugins/openup/COPYRIGHT
+++ /dev/null
@@ -1,10 +0,0 @@
-
-Copyright (c) 2006 Logica and others
- 
-All rights reserved. This program and the accompanying materials
-are made available under the terms of the Eclipse Public License v1.0
-which accompanies this distribution, and is available at
-http://www.eclipse.org/legal/epl-v10.html
-
-Contributors:
-* Onno van der Straaten:: initial implementation
\ No newline at end of file
diff --git a/source/vendor/plugins/openup/README b/source/vendor/plugins/openup/README
deleted file mode 100644
index 698737a..0000000
--- a/source/vendor/plugins/openup/README
+++ /dev/null
@@ -1,10 +0,0 @@
-Openup
-======
-
-This plugin was created to allow a test Wiki to be created easily. 
-The code and OpenUP content was orginally in the test folder.
-
-rake db:fixtures:load
-ruby script/runner 'create_oup_wiki'
-
-Copyright (c) 2008 Onno van der Straaten, released under the EPL License
diff --git a/source/vendor/plugins/openup/data/oup_20060721.zip b/source/vendor/plugins/openup/data/oup_20060721.zip
deleted file mode 100644
index 9bf0cd2..0000000
--- a/source/vendor/plugins/openup/data/oup_20060721.zip
+++ /dev/null
Binary files differ
diff --git a/source/vendor/plugins/openup/data/oup_20060728.zip b/source/vendor/plugins/openup/data/oup_20060728.zip
deleted file mode 100644
index 1aa3eb6..0000000
--- a/source/vendor/plugins/openup/data/oup_20060728.zip
+++ /dev/null
Binary files differ
diff --git a/source/vendor/plugins/openup/data/oup_20060825.zip b/source/vendor/plugins/openup/data/oup_20060825.zip
deleted file mode 100644
index da3fccc..0000000
--- a/source/vendor/plugins/openup/data/oup_20060825.zip
+++ /dev/null
Binary files differ
diff --git a/source/vendor/plugins/openup/init.rb b/source/vendor/plugins/openup/init.rb
deleted file mode 100644
index 4f54526..0000000
--- a/source/vendor/plugins/openup/init.rb
+++ /dev/null
@@ -1,2 +0,0 @@
-# Include hook code here
-require 'openup'
diff --git a/source/vendor/plugins/openup/lib/openup.rb b/source/vendor/plugins/openup/lib/openup.rb
deleted file mode 100644
index 58251de..0000000
--- a/source/vendor/plugins/openup/lib/openup.rb
+++ /dev/null
@@ -1,49 +0,0 @@
-# Openup
-  
-  def create_oup_version(folder)
-    RAILS_DEFAULT_LOGGER.debug("Creating baseline #{folder}")
-    bp = BaselineProcess.new(:folder => folder, :title => folder, :user_id => User.find_central_admin.id)    
-    if File.exists?(bp.path)
-      RAILS_DEFAULT_LOGGER.debug('Removing old folder')
-      FileUtils.rm_r(bp.path)
-    end
-    if !File.exists?(bp.path2zip)
-      path = File.expand_path(File.dirname(__FILE__) + "/../data/#{bp.folder}.zip")
-      File.makedirs(File.dirname(bp.path2zip))
-      RAILS_DEFAULT_LOGGER.debug("Copying #{path} to #{bp.path2zip}")
-      File.copy(path, bp.path2zip) 
-    end
-    bp.unzip_upload
-    bp.save!
-    bp.scan4content
-    return bp
-  end
-  
-  def create_oup_20060721
-    return create_oup_version('oup_20060721')
-  end
-  
-  def create_oup_20060728
-    return create_oup_version('oup_20060728')
-  end
-  
-  def create_oup_20060825
-    return create_oup_version('oup_20060825')
-  end
-  
-  def create_oup_wiki(baseline = create_oup_20060721, folder = 'openup')
-    RAILS_DEFAULT_LOGGER.debug('Creating OpenUP wiki')
-    cadmin = User.find_central_admin
-    wiki = Wiki.new(:folder => folder, :title => 'OpenUP Wiki', :user_id => cadmin.id) # , :baseline_process_id => baseline.id TODO cleanup
-    if File.exists?(wiki.path)
-      RAILS_DEFAULT_LOGGER.debug('Removing old folder')
-      FileUtils.rm_r(wiki.path)
-    end
-    File.makedirs(File.dirname(wiki.path))
-    wiki.save!
-    update = Update.create(:wiki_id => wiki.id, :baseline_process_id => baseline.id, :user_id => cadmin.id)
-    #wiki.wikify
-    #wiki.save!
-    update.do_update
-    return wiki
-  end
diff --git a/source/vendor/plugins/templates/COPYRIGHT b/source/vendor/plugins/templates/COPYRIGHT
deleted file mode 100644
index 6db5b26..0000000
--- a/source/vendor/plugins/templates/COPYRIGHT
+++ /dev/null
@@ -1,10 +0,0 @@
-
-Copyright (c) 2006 Logica and others
- 
-All rights reserved. This program and the accompanying materials
-are made available under the terms of the Eclipse Public License v1.0
-which accompanies this distribution, and is available at
-http://www.eclipse.org/legal/epl-v10.html
-
-Contributors:
-* Onno van der Straaten:: initial implementation
\ No newline at end of file
diff --git a/source/vendor/plugins/templates/README b/source/vendor/plugins/templates/README
deleted file mode 100644
index 8bde24d..0000000
--- a/source/vendor/plugins/templates/README
+++ /dev/null
@@ -1,8 +0,0 @@
-Templates
-======
-
-This plugin contains a templates site for EPF Wiki. 
-
-ruby script/runner -e production 'create_templates'
-
-Copyright (c) 2008 Onno van der Straaten, released under the EPL License
diff --git a/source/vendor/plugins/templates/data/library.zip b/source/vendor/plugins/templates/data/library.zip
deleted file mode 100644
index 0245e1a..0000000
--- a/source/vendor/plugins/templates/data/library.zip
+++ /dev/null
Binary files differ
diff --git a/source/vendor/plugins/templates/data/templates_20080828.zip b/source/vendor/plugins/templates/data/templates_20080828.zip
deleted file mode 100644
index 78a0cc1..0000000
--- a/source/vendor/plugins/templates/data/templates_20080828.zip
+++ /dev/null
Binary files differ
diff --git a/source/vendor/plugins/templates/init.rb b/source/vendor/plugins/templates/init.rb
deleted file mode 100644
index 803e842..0000000
--- a/source/vendor/plugins/templates/init.rb
+++ /dev/null
@@ -1,2 +0,0 @@
-# Include hook code here
-require 'templates'
diff --git a/source/vendor/plugins/templates/lib/templates.rb b/source/vendor/plugins/templates/lib/templates.rb
deleted file mode 100644
index 45b04dd..0000000
--- a/source/vendor/plugins/templates/lib/templates.rb
+++ /dev/null
@@ -1,37 +0,0 @@
-# Templates
-  
-  def create_templates_baseline(folder = 'templates_20080828')
-    RAILS_DEFAULT_LOGGER.debug("Creating baseline #{folder}")
-    cadmin = User.find_central_admin
-    bp = BaselineProcess.new(:folder => folder, :title => folder, :user_id => cadmin.id)
-    if File.exists?(bp.path)
-      RAILS_DEFAULT_LOGGER.debug('Removing old folder')
-      FileUtils.rm_r(bp.path)
-    end
-    if !File.exists?(bp.path2zip)
-      path = File.expand_path(File.dirname(__FILE__) + "/../data/#{bp.folder}.zip")
-      File.makedirs(File.dirname(bp.path2zip))
-      RAILS_DEFAULT_LOGGER.debug("Copying #{path} to #{bp.path2zip}")
-      File.copy(path, bp.path2zip) 
-    end
-    bp.unzip_upload
-    bp.save!
-    bp.scan4content
-    return bp
-  end
-  
-  def create_templates(bp = create_templates_baseline, folder = 'templates')
-    RAILS_DEFAULT_LOGGER.debug('Creating Templates Wiki')
-    cadmin = User.find_central_admin
-    wiki = Wiki.new(:folder => folder, :title => 'Templates', :user_id => cadmin.id)
-    if File.exists?(wiki.path)
-      RAILS_DEFAULT_LOGGER.debug('Removing old folder')
-      FileUtils.rm_r(wiki.path)
-    end
-    File.makedirs(File.dirname(wiki.path))
-    wiki.save!
-    update = Update.create(:wiki_id => wiki.id, :baseline_process_id => bp.id, :user_id => cadmin.id)
-    update.do_update
-    return wiki
-  end
-  
diff --git a/source/vendor/plugins/xhtmldiff/lib/xhtmldiff.rb b/source/vendor/plugins/xhtmldiff/lib/xhtmldiff.rb
deleted file mode 100644
index b3197ce..0000000
--- a/source/vendor/plugins/xhtmldiff/lib/xhtmldiff.rb
+++ /dev/null
@@ -1,179 +0,0 @@
-#!/usr/bin/env ruby
-# Author: Aredridel <aredridel@nbtsc.org>
-# Website: http://theinternetco.net/projects/ruby/xhtmldiff.html
-# Licence: same as Ruby
-# Version: 1.2.2
-#
-# Tweaks by Jacques Distler <distler@golem.ph.utexas.edu>
-#  -- add classnames to <del> and <ins> elements added by XHTMLDiff,
-#     for better CSS styling
-
-require 'diff/lcs'
-require 'rexml/document'
-require 'delegate'
-
-def Math.max(a, b)
-	a > b ? a : b
-end
-
-module REXML
-
-	class Text 
-		def deep_clone
-			clone
-		end
-	end
-
-	class HashableElementDelegator < DelegateClass(Element)
-		def initialize(sub)
-			super sub
-		end
-		def == other
-			res = other.to_s.strip == self.to_s.strip
-			res
-		end
-
-		def eql? other
-			self == other
-		end
-
-		def[](k)
-			r = super
-			if r.kind_of? __getobj__.class
-				self.class.new(r)
-			else
-				r
-			end
-		end
-
-		def hash
-			r = __getobj__.to_s.hash
-			r
-		end
-	end
-
-end
-
-class XHTMLDiff
-	include REXML
-  attr_accessor :output
-
-	class << self
-		BLOCK_CONTAINERS = ['div', 'ul', 'li']
-		def diff(a, b)
-			if a == b
-				return a.deep_clone
-			end
-			if REXML::HashableElementDelegator === a and REXML::HashableElementDelegator === b
-				o = REXML::Element.new(a.name)
-				o.add_attributes  a.attributes
-				hd = self.new(o)
-				Diff::LCS.traverse_balanced(a, b, hd)
-				o
-			elsif REXML::Text === a and REXML::Text === b
-				o = REXML::Element.new('span')
-				aa = a.value.split(/\s/)
-				ba = b.value.split(/\s/)
-				hd = XHTMLTextDiff.new(o)
-				Diff::LCS.traverse_balanced(aa, ba, hd)
-				o
-			else
-				raise ArgumentError.new("both arguments must be equal or both be elements. a is #{a.class.name} and b is #{b.class.name}")
-			end
-		end
-	end
-
-	def diff(a, b)
-		self.class.diff(a,b)
-	end
-
-  def initialize(output)
-    @output = output
-  end
-
-    # This will be called with both elements are the same
-  def match(event)
-    @output << event.old_element.deep_clone if event.old_element
-  end
-
-  # This will be called when there is an element in A that isn't in B
-  def discard_a(event)
-		@output << wrap(event.old_element, 'del', 'diffdel') 
-  end
-  
-	def change(event)
-		begin
-			sd = diff(event.old_element, event.new_element)
-		rescue ArgumentError
-			sd = nil
-		end
-		if sd and (ratio = (Float(rs = sd.to_s.gsub(%r{<(ins|del)>.*</\1>}, '').size) / bs = Math.max(event.old_element.to_s.size, event.new_element.to_s.size))) > 0.5
-			@output << sd
-		else
-			@output << wrap(event.old_element, 'del', 'diffmod')
-			@output << wrap(event.new_element, 'ins', 'diffmod')
-		end
-  end
-
-  # This will be called when there is an element in B that isn't in A
-  def discard_b(event)
-		@output << wrap(event.new_element, 'ins', 'diffins')
-	end
-
-	def choose_event(event, element, tag)
-  end
-
-	def wrap(element, tag = nil, class_name = nil)
-		if tag 
-			el = Element.new tag
-			el << element.deep_clone
-		else
-			el = element.deep_clone
-		end
-                if class_name
-                   el.add_attribute('class', class_name)
-                end
-		el
-	end
-
-	class XHTMLTextDiff < XHTMLDiff
-		def change(event)
-			@output << wrap(event.old_element, 'del', 'diffmod')
-			@output << wrap(event.new_element, 'ins', 'diffmod')
-		end
-
-		# This will be called with both elements are the same
-		def match(event)
-			@output << wrap(event.old_element, nil, nil) if event.old_element
-		end
-
-		# This will be called when there is an element in A that isn't in B
-		def discard_a(event)
-			@output << wrap(event.old_element, 'del', 'diffdel') 
-		end
-		
-		# This will be called when there is an element in B that isn't in A
-		def discard_b(event)
-			@output << wrap(event.new_element, 'ins', 'diffins')
-		end
-
-		def wrap(element, tag = nil, class_name = nil)
-			element = REXML::Text.new(" " << element) if String === element
-                        return element unless tag
-                        wrapper_element = REXML::Element.new(tag)
-                        wrapper_element.add_text element
-                        if class_name
-                           wrapper_element.add_attribute('class', class_name)
-                        end
-                        wrapper_element
-		end
-	end
-		
-end
-
-if $0 == __FILE__
-
-	$stderr.puts "No tests available yet"
-	exit(1)
-
-end