Browse files

first commit

  • Loading branch information...
0 parents commit 3ba94e4c85d3ba55206df4831af2a0765bfa5197 @lancejpollard committed May 10, 2010
Showing with 2,323 additions and 0 deletions.
  1. BIN .DS_Store
  2. +6 −0 .gitignore
  3. +12 −0 Gemfile
  4. +7 −0 README.markdown
  5. +10 −0 Rakefile
  6. +52 −0 app/controllers/application_controller.rb
  7. +28 −0 app/controllers/user_sessions_controller.rb
  8. +41 −0 app/controllers/users_controller.rb
  9. +2 −0 app/helpers/application_helper.rb
  10. +3 −0 app/models/user.rb
  11. +3 −0 app/models/user_session.rb
  12. BIN app/views/.DS_Store
  13. +13 −0 app/views/layouts/application.html.haml
  14. +20 −0 app/views/layouts/application_old.html.haml
  15. +20 −0 app/views/shared/_head.haml
  16. +3 −0 app/views/shared/_logo.haml
  17. +14 −0 app/views/user_sessions/new.html.haml
  18. +4 −0 app/views/users/_form.html.haml
  19. +18 −0 app/views/users/_new.html.haml
  20. +9 −0 app/views/users/edit.html.haml
  21. +6 −0 app/views/users/new.html.haml
  22. +3 −0 app/views/users/show.html.haml
  23. +4 −0 config.ru
  24. +20 −0 config/application.rb
  25. +6 −0 config/boot.rb
  26. +22 −0 config/database.yml
  27. +5 −0 config/environment.rb
  28. +19 −0 config/environments/development.rb
  29. +42 −0 config/environments/production.rb
  30. +32 −0 config/environments/test.rb
  31. +33 −0 config/initializers/authlogic_connect_config.example.rb
  32. +7 −0 config/initializers/backtrace_silencers.rb
  33. +10 −0 config/initializers/inflections.rb
  34. +5 −0 config/initializers/mime_types.rb
  35. +7 −0 config/initializers/secret_token.rb
  36. +8 −0 config/initializers/session_store.rb
  37. +5 −0 config/locales/en.yml
  38. +6 −0 config/routes.rb
  39. BIN db/.DS_Store
  40. +30 −0 db/migrate/20100506020514_create_users.rb
  41. +16 −0 db/migrate/20100506020518_create_sessions.rb
  42. +18 −0 db/migrate/20100506020520_create_tokens.rb
  43. +20 −0 db/migrate/20100506020522_create_openid_tables.rb
  44. +73 −0 db/schema.rb
  45. +7 −0 db/seeds.rb
  46. +2 −0 doc/README_FOR_APP
  47. 0 lib/tasks/.gitkeep
  48. BIN public/.DS_Store
  49. +26 −0 public/404.html
  50. +26 −0 public/422.html
  51. +26 −0 public/500.html
  52. BIN public/favicon.png
  53. BIN public/images/.DS_Store
  54. BIN public/images/bg.jpg
  55. BIN public/images/bird.png
  56. BIN public/images/blue-arrow.png
  57. BIN public/images/blue-arrow2.png
  58. BIN public/images/blue-bg.jpg
  59. BIN public/images/blue-email.png
  60. BIN public/images/blue-pattern.jpg
  61. BIN public/images/blue-send.png
  62. BIN public/images/blue-submit.png
  63. BIN public/images/countbg.png
  64. BIN public/images/icon-del.png
  65. BIN public/images/icon-fb.png
  66. BIN public/images/icon-ff.png
  67. BIN public/images/icon-fl.png
  68. BIN public/images/icon-fm.png
  69. BIN public/images/icon-su.png
  70. BIN public/images/icon-tu.png
  71. BIN public/images/icons/.DS_Store
  72. BIN public/images/icons/blogger.png
  73. BIN public/images/icons/delicious.png
  74. BIN public/images/icons/digg.png
  75. BIN public/images/icons/facebook.png
  76. BIN public/images/icons/feedburner.png
  77. BIN public/images/icons/flickr.png
  78. BIN public/images/icons/furl.png
  79. BIN public/images/icons/google.png
  80. BIN public/images/icons/lastfm.png
  81. BIN public/images/icons/linkedin.png
  82. BIN public/images/icons/netvibes.png
  83. BIN public/images/icons/newsvine.png
  84. BIN public/images/icons/rss.png
  85. BIN public/images/icons/stumbleupon.png
  86. BIN public/images/icons/technorati.png
  87. BIN public/images/icons/twitter.png
  88. BIN public/images/icons/vimeo.png
  89. BIN public/images/icons/wordpress.png
  90. BIN public/images/icons/yahoo.png
  91. BIN public/images/icons/youtube.png
  92. BIN public/images/inputbg.png
  93. BIN public/images/loading.gif
  94. BIN public/images/logo.png
  95. BIN public/images/page.png
  96. BIN public/images/shadow2.png
  97. BIN public/images/textarea.png
  98. BIN public/images/twitterbg.png
  99. +40 −0 public/javascripts/application.js
  100. +7 −0 public/javascripts/cufon.yui.js
  101. +15 −0 public/javascripts/jquery.jcarousel.pack.js
  102. +22 −0 public/javascripts/kievit.js
  103. +5 −0 public/robots.txt
  104. BIN public/stylesheets/.DS_Store
  105. 0 public/stylesheets/.gitkeep
  106. +325 −0 public/stylesheets/application.css
  107. +19 −0 public/stylesheets/reset.css
  108. +9 −0 script/rails
  109. +9 −0 test/performance/browsing_test.rb
  110. +13 −0 test/test_helper.rb
  111. BIN vendor/plugins/.DS_Store
  112. 0 vendor/plugins/.gitkeep
  113. +18 −0 vendor/plugins/haml/init.rb
  114. +35 −0 vendor/plugins/open_id_authentication/CHANGELOG
  115. +231 −0 vendor/plugins/open_id_authentication/README
  116. +22 −0 vendor/plugins/open_id_authentication/Rakefile
  117. +11 −0 ...uthentication/generators/open_id_authentication_tables/open_id_authentication_tables_generator.rb
  118. +20 −0 ...or/plugins/open_id_authentication/generators/open_id_authentication_tables/templates/migration.rb
  119. +26 −0 ...ns/open_id_authentication/generators/upgrade_open_id_authentication_tables/templates/migration.rb
  120. +11 −0 ...nerators/upgrade_open_id_authentication_tables/upgrade_open_id_authentication_tables_generator.rb
  121. +18 −0 vendor/plugins/open_id_authentication/init.rb
  122. +243 −0 vendor/plugins/open_id_authentication/lib/open_id_authentication.rb
  123. +9 −0 vendor/plugins/open_id_authentication/lib/open_id_authentication/association.rb
  124. +55 −0 vendor/plugins/open_id_authentication/lib/open_id_authentication/db_store.rb
  125. +73 −0 vendor/plugins/open_id_authentication/lib/open_id_authentication/mem_cache_store.rb
  126. +5 −0 vendor/plugins/open_id_authentication/lib/open_id_authentication/nonce.rb
  127. +23 −0 vendor/plugins/open_id_authentication/lib/open_id_authentication/request.rb
  128. +20 −0 vendor/plugins/open_id_authentication/lib/open_id_authentication/timeout_fixes.rb
  129. +30 −0 vendor/plugins/open_id_authentication/tasks/open_id_authentication_tasks.rake
  130. +151 −0 vendor/plugins/open_id_authentication/test/mem_cache_store_test.rb
  131. +32 −0 vendor/plugins/open_id_authentication/test/normalize_test.rb
  132. +46 −0 vendor/plugins/open_id_authentication/test/open_id_authentication_test.rb
  133. +14 −0 vendor/plugins/open_id_authentication/test/status_test.rb
  134. +17 −0 vendor/plugins/open_id_authentication/test/test_helper.rb
BIN .DS_Store
Binary file not shown.
6 .gitignore
@@ -0,0 +1,6 @@
+.DS_Store
+.bundle
+db/*.sqlite3
+log/*.log
+tmp/**/*
+config/initializers/authlogic_connect_config.rb
12 Gemfile
@@ -0,0 +1,12 @@
+source 'http://rubygems.org'
+
+gem 'rails', '3.0.0.beta3'
+gem 'sqlite3-ruby', :require => 'sqlite3'
+gem "thin"
+gem "json"
+gem "haml"
+gem "ruby-openid"
+gem "authlogic", :git => "git://github.com/odorcicd/authlogic.git", :branch => "rails3"
+gem "oauth"
+gem "oauth2" # facebook only
+gem "authlogic-connect"
7 README.markdown
@@ -0,0 +1,7 @@
+## Install and use
+
+ git clone
+ cd authlogic-connect-example
+ bundle install
+ rake db:migrate
+ rails server thin
10 Rakefile
@@ -0,0 +1,10 @@
+# Add your own tasks in files placed in lib/tasks ending in .rake,
+# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
+
+require File.expand_path('../config/application', __FILE__)
+
+require 'rake'
+require 'rake/testtask'
+require 'rake/rdoctask'
+
+Rails::Application.load_tasks
52 app/controllers/application_controller.rb
@@ -0,0 +1,52 @@
+class ApplicationController < ActionController::Base
+ #protect_from_forgery
+ layout 'application'
+ helper :all
+ helper_method :current_user_session, :current_user
+
+ def login_required
+ if current_user.nil?
+ redirect_to new_user_url
+ true
+ end
+ false
+ end
+
+ private
+ def current_user_session
+ return @current_user_session if defined?(@current_user_session)
+ @current_user_session = UserSession.find
+ end
+
+ def current_user
+ return @current_user if defined?(@current_user)
+ @current_user = current_user_session && current_user_session.record
+ end
+
+ def require_user
+ unless current_user
+ store_location
+ flash[:notice] = "You must be logged in to access this page"
+ redirect_to new_user_session_url
+ return false
+ end
+ end
+
+ def require_no_user
+ if current_user
+ store_location
+ flash[:notice] = "You must be logged out to access this page"
+ redirect_to account_url
+ return false
+ end
+ end
+
+ def store_location
+ session[:return_to] = request.fullpath
+ end
+
+ def redirect_back_or_default(default)
+ redirect_to(session[:return_to] || default)
+ session[:return_to] = nil
+ end
+end
28 app/controllers/user_sessions_controller.rb
@@ -0,0 +1,28 @@
+class UserSessionsController < ApplicationController
+ before_filter :require_no_user, :only => [:new, :create]
+ before_filter :require_user, :only => :destroy
+
+ def new
+ @user_session = UserSession.new
+ end
+
+ def create
+ @user_session = UserSession.new(params[:user_session])
+ # uses a block to prevent double render error...
+ # because oauth and openid use redirects
+ @user_session.save do |result|
+ if result
+ flash[:notice] = "Login successful!"
+ redirect_back_or_default account_url
+ else
+ render :action => :new
+ end
+ end
+ end
+
+ def destroy
+ current_user_session.destroy
+ flash[:notice] = "Logout successful!"
+ redirect_back_or_default new_user_session_url
+ end
+end
41 app/controllers/users_controller.rb
@@ -0,0 +1,41 @@
+class UsersController < ApplicationController
+ before_filter :require_no_user, :only => [:new, :create]
+ before_filter :require_user, :only => [:show, :edit, :update]
+
+ def new
+ @user = User.new
+ end
+
+ def create
+ @user = User.new(params[:user])
+ # block! see user_sessions_controller.rb for description
+ @user.save do |result|
+ if result
+ flash[:notice] = "Account registered!"
+ redirect_back_or_default account_url
+ else
+ render :action => :new
+ end
+ end
+ end
+
+ def show
+ @user = @current_user
+ end
+
+ def edit
+ @user = @current_user
+ end
+
+ def update
+ @user = @current_user # makes our views "cleaner" and more consistent
+ @user.update_attributes(params[:user]) do |result|
+ if result
+ flash[:notice] = "Account updated!"
+ redirect_to account_url
+ else
+ render :action => :edit
+ end
+ end
+ end
+end
2 app/helpers/application_helper.rb
@@ -0,0 +1,2 @@
+module ApplicationHelper
+end
3 app/models/user.rb
@@ -0,0 +1,3 @@
+class User < ActiveRecord::Base
+ acts_as_authentic
+end
3 app/models/user_session.rb
@@ -0,0 +1,3 @@
+class UserSession < Authlogic::Session::Base
+
+end
BIN app/views/.DS_Store
Binary file not shown.
13 app/views/layouts/application.html.haml
@@ -0,0 +1,13 @@
+!!!
+%html{:dir => "ltr", :lang => "en-US", :xmlns => "http://www.w3.org/1999/xhtml"}
+ %head{:profile => "http://gmpg.org/xfn/11"}
+ %title Authlogic Connect Example
+ = render :partial => "shared/head"
+ %body
+ #wrapper
+ = render :partial => "shared/logo"
+ #page-container
+ %ul#page.jcarousel-skin-tango
+ %li
+ = render "users/new"
+ .shadow
20 app/views/layouts/application_old.html.haml
@@ -0,0 +1,20 @@
+!!!
+%html{:lang => "en", "xml:lang" => "en", :xmlns => "http://www.w3.org/1999/xhtml"}
+ %head
+ %meta{:content => "text/html;charset=UTF-8", "http-equiv" => "content-type"}/
+ %title Authlogic Connect
+ = javascript_include_tag :defaults
+ %body
+ = pluralize User.logged_in.count, "user"
+ currently logged in
+ %br/
+ - if !current_user
+ = link_to "Register", new_account_path
+ |
+ #{link_to "Log In", new_user_session_path} |
+ - else
+ = link_to "My Account", account_path
+ |
+ #{link_to "Logout", user_session_path, :method => :delete, :confirm => "Are you sure you want to logout?"}
+ %p{:style => "color: green"}= flash[:notice]
+ = yield
20 app/views/shared/_head.haml
@@ -0,0 +1,20 @@
+%meta{:content => "text/html; charset=UTF-8", "http-equiv" => "content-type"}/
+%meta{:content => "Just another WordPress weblog", :name => "description"}/
+= yield :meta_head
+
+%link{:href => "/stylesheets/reset.css", :media => "screen", :rel => "stylesheet", :type => "text/css"}/
+%link{:href => "/stylesheets/application.css", :rel => "stylesheet", :type => "text/css"}/
+= yield :stylesheet_head
+
+= javascript_include_tag "http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"
+-#
+ - %w(jquery/jquery-1.4.2 jquery/jquery.system-0.1.1).each do |javascript|
+ = javascript_include_tag "http://cachedcommons.org/javascripts/#{javascript}.js"
+- %w(jquery.jcarousel.pack cufon.yui kievit).each do |javascript|
+ = javascript_include_tag "/javascripts/#{javascript}.js"
+
+= javascript_include_tag "application"
+
+= yield :javascript_head
+
+= yield :extra_head
3 app/views/shared/_logo.haml
@@ -0,0 +1,3 @@
+#logo
+ %a{:href => "/"}
+ %img{:alt => "Authlogic Connect", :src => "/images/logo.png"}/
14 app/views/user_sessions/new.html.haml
@@ -0,0 +1,14 @@
+%h1 Login
+- User.logged_in_timeout(10.hours)
+%h2= User.logged_in.inspect
+
+= @user_session.errors.inspect
+- form_for @user_session, :url => user_session_path do |f|
+ %br
+ = f.label :login
+ = f.text_field :login
+ %br
+ = f.label :remember_me
+ = f.check_box :remember_me
+ %br
+ %input{:type => :submit, :name => "login_with_oauth", :value => "Submit"}
4 app/views/users/_form.html.haml
@@ -0,0 +1,4 @@
+= form.label :login
+= form.text_field :login
+= form.submit "Register"
+=raw oauth_register_button :value => "Register with Twitter", :class => 'twitter'
18 app/views/users/_new.html.haml
@@ -0,0 +1,18 @@
+.content
+ %h2 Login or Register!
+ %form#authentication_form{:action => "/users", :method => :post}
+ %fieldset
+ %input{:type => :hidden, :name => :register_with_oauth}
+ %legend Click your Oauth or OpenID provider.
+ .oauth_providers
+ %ul
+ - %w(google facebook twitter).each do |name|
+ %li.oauth_provider
+ %img{:src => "/images/icons/#{name}.png"}
+ %input{:type => :radio, :id => "#{name}_oauth_provider", :name => :oauth_provider, :value => name}
+ .clearfix
+ %fieldset
+ %legend Or type in your OpenID address
+ .openid_address
+ %input.nice{:type => :text, :name => "openid_identifier"}
+ %input.submit{:name => :submit, :type => :submit, :value => "Subscribe"}/
9 app/views/users/edit.html.haml
@@ -0,0 +1,9 @@
+%h1 Edit My Account
+
+- form_for @user, :url => users_path do |f|
+ = f.error_messages
+ = render :partial => "form", :object => f
+ = f.submit "Update"
+
+%br
+= link_to "My Profile", account_path
6 app/views/users/new.html.haml
@@ -0,0 +1,6 @@
+%h1 Register
+
+- form_for @user, :url => users_path do |f|
+ = render :partial => "form", :object => f
+ %input{:type => :hidden, :name => "oauth_provider", :value => "twitter"}
+ %input{:type => :submit, :name => "register_with_oauth", :value => "Submit"}
3 app/views/users/show.html.haml
@@ -0,0 +1,3 @@
+%h1= @user.login
+
+= link_to 'Edit', edit_account_path
4 config.ru
@@ -0,0 +1,4 @@
+# This file is used by Rack-based servers to start the application.
+
+require ::File.expand_path('../config/environment', __FILE__)
+run AuthlogicConnectExample::Application
20 config/application.rb
@@ -0,0 +1,20 @@
+require File.expand_path('../boot', __FILE__)
+
+require 'rails/all'
+
+Bundler.require(:default, Rails.env) if defined?(Bundler)
+
+module AuthlogicConnectExample
+ class Application < Rails::Application
+ config.middleware.use AuthlogicConnect::CallbackFilter
+
+ config.generators do |g|
+ g.orm :active_record
+ g.template_engine :haml
+ end
+
+ config.encoding = "utf-8"
+
+ config.filter_parameters += [:password, :password_confirmation]
+ end
+end
6 config/boot.rb
@@ -0,0 +1,6 @@
+require 'rubygems'
+# Set up gems listed in the Gemfile.
+if File.exist?(File.expand_path('../../Gemfile', __FILE__))
+ require 'bundler'
+ Bundler.setup
+end
22 config/database.yml
@@ -0,0 +1,22 @@
+# SQLite version 3.x
+# gem install sqlite3-ruby (not necessary on OS X Leopard)
+development:
+ adapter: sqlite3
+ database: db/development.sqlite3
+ pool: 5
+ timeout: 5000
+
+# Warning: The database defined as "test" will be erased and
+# re-generated from your development database when you run "rake".
+# Do not set this db to the same as development or production.
+test:
+ adapter: sqlite3
+ database: db/test.sqlite3
+ pool: 5
+ timeout: 5000
+
+production:
+ adapter: sqlite3
+ database: db/production.sqlite3
+ pool: 5
+ timeout: 5000
5 config/environment.rb
@@ -0,0 +1,5 @@
+# Load the rails application
+require File.expand_path('../application', __FILE__)
+
+# Initialize the rails application
+AuthlogicConnectExample::Application.initialize!
19 config/environments/development.rb
@@ -0,0 +1,19 @@
+AuthlogicConnectExample::Application.configure do
+ # Settings specified here will take precedence over those in config/environment.rb
+
+ # In the development environment your application's code is reloaded on
+ # every request. This slows down response time but is perfect for development
+ # since you don't have to restart the webserver when you make code changes.
+ 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.consider_all_requests_local = true
+ config.action_view.debug_rjs = true
+ config.action_controller.perform_caching = false
+
+ # Don't care if the mailer can't send
+ config.action_mailer.raise_delivery_errors = false
+end
42 config/environments/production.rb
@@ -0,0 +1,42 @@
+AuthlogicConnectExample::Application.configure do
+ # Settings specified here will take precedence over those in config/environment.rb
+
+ # The production environment is meant for finished, "live" apps.
+ # Code is not reloaded between requests
+ config.cache_classes = true
+
+ # Full error reports are disabled and caching is turned on
+ config.consider_all_requests_local = false
+ config.action_controller.perform_caching = true
+
+ # Specifies the header that your server uses for sending files
+ config.action_dispatch.x_sendfile_header = "X-Sendfile"
+
+ # For nginx:
+ # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect'
+
+ # If you have no front-end server that supports something like X-Sendfile,
+ # just comment this out and Rails will serve the files
+
+ # See everything in the log (default is :info)
+ # config.log_level = :debug
+
+ # Use a different logger for distributed setups
+ # config.logger = SyslogLogger.new
+
+ # Use a different cache store in production
+ # config.cache_store = :mem_cache_store
+
+ # Disable Rails's static asset server
+ # In production, Apache or nginx will already do this
+ config.serve_static_assets = false
+
+ # Enable serving of images, stylesheets, and javascripts from an asset server
+ # config.action_controller.asset_host = "http://assets.example.com"
+
+ # Disable delivery errors, bad email addresses will be ignored
+ # config.action_mailer.raise_delivery_errors = false
+
+ # Enable threaded mode
+ # config.threadsafe!
+end
32 config/environments/test.rb
@@ -0,0 +1,32 @@
+AuthlogicConnectExample::Application.configure do
+ # Settings specified here will take precedence over those in config/environment.rb
+
+ # 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.consider_all_requests_local = true
+ config.action_controller.perform_caching = false
+
+ # Raise exceptions instead of rendering exception templates
+ config.action_dispatch.show_exceptions = false
+
+ # Disable request forgery protection in test environment
+ config.action_controller.allow_forgery_protection = false
+
+ # Tell Action Mailer 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
+
+ # 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
+end
33 config/initializers/authlogic_connect_config.example.rb
@@ -0,0 +1,33 @@
+=begin
+
+This is how your config file should look.
+
+AuthlogicConnect.config = {
+ :services => {
+ :twitter => {
+ :key => "my_key",
+ :secret => "my_secret",
+ :label => "Twitter"
+ },
+ :facebook => {
+ :key => "my_key",
+ :secret => "my_secret",
+ :label => "Facebook"
+ },
+ :google => {
+ :key => "my_key",
+ :secret => "my_secret",
+ :label => "Google"
+ },
+ :yahoo => {
+ :key => "my_key",
+ :secret => "my_secret",
+ :label => "Yahoo"
+ },
+ :vimeo => {
+
+ }
+ }
+}
+
+=end
7 config/initializers/backtrace_silencers.rb
@@ -0,0 +1,7 @@
+# Be sure to restart your server when you modify this file.
+
+# You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces.
+# Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ }
+
+# You can also remove all the silencers if you're trying to debug a problem that might stem from framework code.
+# Rails.backtrace_cleaner.remove_silencers!
10 config/initializers/inflections.rb
@@ -0,0 +1,10 @@
+# Be sure to restart your server when you modify this file.
+
+# Add new inflection rules using the following format
+# (all these examples are active by default):
+# ActiveSupport::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
5 config/initializers/mime_types.rb
@@ -0,0 +1,5 @@
+# Be sure to restart your server when you modify this file.
+
+# Add new mime types for use in respond_to blocks:
+# Mime::Type.register "text/richtext", :rtf
+# Mime::Type.register_alias "text/html", :iphone
7 config/initializers/secret_token.rb
@@ -0,0 +1,7 @@
+# Be sure to restart your server when you modify this file.
+
+# Your secret key for verifying the integrity of signed cookies.
+# If you change this key, all old signed cookies will become invalid!
+# Make sure the secret is at least 30 characters and all random,
+# no regular words or you'll be exposed to dictionary attacks.
+Rails.application.config.secret_token = '4520ebd7314b040e9f228ed22ba3524b5021e582fd27b6b3d8b049aeb5a16a694cbb30b2f52ac265aad53cded8fbd85257cd2c76a0cd93bf98a3b3b6819dcaa3'
8 config/initializers/session_store.rb
@@ -0,0 +1,8 @@
+# Be sure to restart your server when you modify this file.
+
+Rails.application.config.session_store :cookie_store, :key => '_oauth-rails3_session'
+
+# Use the database for sessions instead of the cookie-based default,
+# which shouldn't be used to store highly confidential information
+# (create the session table with "rake db:sessions:create")
+# Rails.application.config.session_store :active_record_store
5 config/locales/en.yml
@@ -0,0 +1,5 @@
+# Sample localization file for English. Add more files in this directory for other locales.
+# See http://github.com/svenfuchs/rails-i18n/tree/master/rails%2Flocale for starting points.
+
+en:
+ hello: "Hello world"
6 config/routes.rb
@@ -0,0 +1,6 @@
+AuthlogicConnectExample::Application.routes.draw do |map|
+ map.resource :account, :controller => "users"
+ map.resources :users
+ map.resource :user_session
+ root :to => "users#new"
+end
BIN db/.DS_Store
Binary file not shown.
30 db/migrate/20100506020514_create_users.rb
@@ -0,0 +1,30 @@
+class CreateUsers < ActiveRecord::Migration
+ def self.up
+ create_table :users do |t|
+ # authlogic
+ t.timestamps
+ t.string :login, :null => true
+ t.string :crypted_password, :null => true
+ t.string :password_salt, :null => true
+ t.string :persistence_token, :null => false
+ t.integer :login_count, :default => 0, :null => false
+ t.datetime :last_request_at
+ t.datetime :last_login_at
+ t.datetime :current_login_at
+ t.string :last_login_ip
+ t.string :current_login_ip
+ # authlogic-connect
+ t.string :openid_identifier # should be a token, later...
+ t.integer :active_token_id
+ end
+
+ add_index :users, :login
+ add_index :users, :persistence_token
+ add_index :users, :last_request_at
+ add_index :users, :active_token_id
+ end
+
+ def self.down
+ drop_table :users
+ end
+end
16 db/migrate/20100506020518_create_sessions.rb
@@ -0,0 +1,16 @@
+class CreateSessions < ActiveRecord::Migration
+ def self.up
+ create_table :sessions do |t|
+ t.string :session_id, :null => false
+ t.text :data
+ t.timestamps
+ end
+
+ add_index :sessions, :session_id
+ add_index :sessions, :updated_at
+ end
+
+ def self.down
+ drop_table :sessions
+ end
+end
18 db/migrate/20100506020520_create_tokens.rb
@@ -0,0 +1,18 @@
+class CreateTokens < ActiveRecord::Migration
+ def self.up
+ create_table :tokens do |t|
+ t.integer :user_id
+ t.string :type, :limit => 30
+ t.string :key, :limit => 1024 # This has to be huge because of Yahoo's excessively large tokens
+ t.string :secret
+ t.boolean :active # whether or not it's associated with the account
+ t.timestamps
+ end
+
+ add_index :tokens, :key, :unique
+ end
+
+ def self.down
+ drop_table :tokens
+ end
+end
20 db/migrate/20100506020522_create_openid_tables.rb
@@ -0,0 +1,20 @@
+class CreateOpenidTables < ActiveRecord::Migration
+ def self.up
+ create_table :open_id_authentication_associations, :force => true do |t|
+ t.integer :issued, :lifetime
+ t.string :handle, :assoc_type
+ t.binary :server_url, :secret
+ end
+
+ create_table :open_id_authentication_nonces, :force => true do |t|
+ t.integer :timestamp, :null => false
+ t.string :server_url, :null => true
+ t.string :salt, :null => false
+ end
+ end
+
+ def self.down
+ drop_table :open_id_authentication_associations
+ drop_table :open_id_authentication_nonces
+ end
+end
73 db/schema.rb
@@ -0,0 +1,73 @@
+# This file is auto-generated from the current state of the database. Instead of editing this file,
+# please use the migrations feature of Active Record to incrementally modify your database, and
+# then regenerate this schema definition.
+#
+# Note that this schema.rb definition is the authoritative source for your database schema. If you need
+# to create the application database on another system, you should be using db:schema:load, not running
+# all the migrations from scratch. The latter is a flawed and unsustainable approach (the more migrations
+# you'll amass, the slower it'll run and the greater likelihood for issues).
+#
+# It's strongly recommended to check this file into your version control system.
+
+ActiveRecord::Schema.define(:version => 20100506020522) do
+
+ create_table "open_id_authentication_associations", :force => true do |t|
+ t.integer "issued"
+ t.integer "lifetime"
+ t.string "handle"
+ t.string "assoc_type"
+ t.binary "server_url"
+ t.binary "secret"
+ end
+
+ create_table "open_id_authentication_nonces", :force => true do |t|
+ t.integer "timestamp", :null => false
+ t.string "server_url"
+ t.string "salt", :null => false
+ end
+
+ create_table "sessions", :force => true do |t|
+ t.string "session_id", :null => false
+ t.text "data"
+ t.datetime "created_at"
+ t.datetime "updated_at"
+ end
+
+ add_index "sessions", ["session_id"], :name => "index_sessions_on_session_id"
+ add_index "sessions", ["updated_at"], :name => "index_sessions_on_updated_at"
+
+ create_table "tokens", :force => true do |t|
+ t.integer "user_id"
+ t.string "type", :limit => 30
+ t.string "key", :limit => 1024
+ t.string "secret"
+ t.boolean "active"
+ t.datetime "created_at"
+ t.datetime "updated_at"
+ end
+
+ add_index "tokens", ["key"], :name => "index_tokens_on_key", :unique => true
+
+ create_table "users", :force => true do |t|
+ t.datetime "created_at"
+ t.datetime "updated_at"
+ t.string "login"
+ t.string "crypted_password"
+ t.string "password_salt"
+ t.string "persistence_token", :null => false
+ t.integer "login_count", :default => 0, :null => false
+ t.datetime "last_request_at"
+ t.datetime "last_login_at"
+ t.datetime "current_login_at"
+ t.string "last_login_ip"
+ t.string "current_login_ip"
+ t.string "openid_identifier"
+ t.integer "active_token_id"
+ end
+
+ add_index "users", ["active_token_id"], :name => "index_users_on_active_token_id"
+ add_index "users", ["last_request_at"], :name => "index_users_on_last_request_at"
+ add_index "users", ["login"], :name => "index_users_on_login"
+ add_index "users", ["persistence_token"], :name => "index_users_on_persistence_token"
+
+end
7 db/seeds.rb
@@ -0,0 +1,7 @@
+# This file should contain all the record creation needed to seed the database with its default values.
+# The data can then be loaded with the rake db:seed (or created alongside the db with db:setup).
+#
+# Examples:
+#
+# cities = City.create([{ :name => 'Chicago' }, { :name => 'Copenhagen' }])
+# Mayor.create(:name => 'Daley', :city => cities.first)
2 doc/README_FOR_APP
@@ -0,0 +1,2 @@
+Use this README file to introduce your application and point to useful places in the API for learning more.
+Run "rake doc:app" to generate API documentation for your models, controllers, helpers, and libraries.
0 lib/tasks/.gitkeep
No changes.
BIN public/.DS_Store
Binary file not shown.
26 public/404.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <title>The page you were looking for doesn't exist (404)</title>
+ <style type="text/css">
+ body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
+ div.dialog {
+ width: 25em;
+ padding: 0 4em;
+ margin: 4em auto 0 auto;
+ border: 1px solid #ccc;
+ border-right-color: #999;
+ border-bottom-color: #999;
+ }
+ h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
+ </style>
+</head>
+
+<body>
+ <!-- This file lives in public/404.html -->
+ <div class="dialog">
+ <h1>The page you were looking for doesn't exist.</h1>
+ <p>You may have mistyped the address or the page may have moved.</p>
+ </div>
+</body>
+</html>
26 public/422.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <title>The change you wanted was rejected (422)</title>
+ <style type="text/css">
+ body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
+ div.dialog {
+ width: 25em;
+ padding: 0 4em;
+ margin: 4em auto 0 auto;
+ border: 1px solid #ccc;
+ border-right-color: #999;
+ border-bottom-color: #999;
+ }
+ h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
+ </style>
+</head>
+
+<body>
+ <!-- This file lives in public/422.html -->
+ <div class="dialog">
+ <h1>The change you wanted was rejected.</h1>
+ <p>Maybe you tried to change something you didn't have access to.</p>
+ </div>
+</body>
+</html>
26 public/500.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <title>We're sorry, but something went wrong (500)</title>
+ <style type="text/css">
+ body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
+ div.dialog {
+ width: 25em;
+ padding: 0 4em;
+ margin: 4em auto 0 auto;
+ border: 1px solid #ccc;
+ border-right-color: #999;
+ border-bottom-color: #999;
+ }
+ h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
+ </style>
+</head>
+
+<body>
+ <!-- This file lives in public/500.html -->
+ <div class="dialog">
+ <h1>We're sorry, but something went wrong.</h1>
+ <p>We've been notified about this issue and we'll take a look at it shortly.</p>
+ </div>
+</body>
+</html>
BIN public/favicon.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN public/images/.DS_Store
Binary file not shown.
BIN public/images/bg.jpg
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN public/images/bird.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN public/images/blue-arrow.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN public/images/blue-arrow2.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN public/images/blue-bg.jpg
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN public/images/blue-email.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN public/images/blue-pattern.jpg
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN public/images/blue-send.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN public/images/blue-submit.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN public/images/countbg.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN public/images/icon-del.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN public/images/icon-fb.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN public/images/icon-ff.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN public/images/icon-fl.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN public/images/icon-fm.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN public/images/icon-su.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN public/images/icon-tu.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN public/images/icons/.DS_Store
Binary file not shown.
BIN public/images/icons/blogger.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN public/images/icons/delicious.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN public/images/icons/digg.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN public/images/icons/facebook.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN public/images/icons/feedburner.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN public/images/icons/flickr.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN public/images/icons/furl.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN public/images/icons/google.png
Diff not rendered.
BIN public/images/icons/lastfm.png
Diff not rendered.
BIN public/images/icons/linkedin.png
Diff not rendered.
BIN public/images/icons/netvibes.png
Diff not rendered.
BIN public/images/icons/newsvine.png
Diff not rendered.
BIN public/images/icons/rss.png
Diff not rendered.
BIN public/images/icons/stumbleupon.png
Diff not rendered.
BIN public/images/icons/technorati.png
Diff not rendered.
BIN public/images/icons/twitter.png
Diff not rendered.
BIN public/images/icons/vimeo.png
Diff not rendered.
BIN public/images/icons/wordpress.png
Diff not rendered.
BIN public/images/icons/yahoo.png
Diff not rendered.
BIN public/images/icons/youtube.png
Diff not rendered.
BIN public/images/inputbg.png
Diff not rendered.
BIN public/images/loading.gif
Diff not rendered.
BIN public/images/logo.png
Diff not rendered.
BIN public/images/page.png
Diff not rendered.
BIN public/images/shadow2.png
Diff not rendered.
BIN public/images/textarea.png
Diff not rendered.
BIN public/images/twitterbg.png
Diff not rendered.
40 public/javascripts/application.js
@@ -0,0 +1,40 @@
+$ = jQuery.noConflict();
+Cufon.replace('h2, p, legend');
+
+$(document).ready(function() {
+ $form = $("#authentication_form");
+
+ $('#page').jcarousel({
+ vertical: true,
+ easing: 'BounceEaseOut',
+ animation: 1000,
+ scroll: 1,
+ visible: 1,
+ initCallback: carouselClickHandler,
+ buttonNextHTML: null,
+ buttonPrevHTML: null
+ });
+
+ // progressively enhance buttons
+ $("li.oauth_provider").each(function(index, element) {
+ var li = $(element);
+ var input = $("input", li);
+ input.css("display", "none");
+ li.css("cursor", "pointer");
+ li.data("oauth", input);
+ li.click(function(event) {
+ event.preventDefault();
+ li.data("oauth").attr("checked", "checked");
+ $form.submit();
+ $form.find('input[name=submit]').click();
+ return false;
+ });
+ });
+});
+
+function carouselClickHandler(carousel) {
+ $('a.control, a.control2').bind('click', function() {
+ carousel.scroll(jQuery.jcarousel.intval($(this).text()));
+ return false;
+ });
+};
7 public/javascripts/cufon.yui.js
@@ -0,0 +1,7 @@
+/*
+ * Copyright (c) 2009 Simo Kinnunen.
+ * Licensed under the MIT license.
+ *
+ * @version 1.09
+ */
+var Cufon=(function(){var m=function(){return m.replace.apply(null,arguments)};var x=m.DOM={ready:(function(){var C=false,E={loaded:1,complete:1};var B=[],D=function(){if(C){return}C=true;for(var F;F=B.shift();F()){}};if(document.addEventListener){document.addEventListener("DOMContentLoaded",D,false);window.addEventListener("pageshow",D,false)}if(!window.opera&&document.readyState){(function(){E[document.readyState]?D():setTimeout(arguments.callee,10)})()}if(document.readyState&&document.createStyleSheet){(function(){try{document.body.doScroll("left");D()}catch(F){setTimeout(arguments.callee,1)}})()}q(window,"load",D);return function(F){if(!arguments.length){D()}else{C?F():B.push(F)}}})(),root:function(){return document.documentElement||document.body}};var n=m.CSS={Size:function(C,B){this.value=parseFloat(C);this.unit=String(C).match(/[a-z%]*$/)[0]||"px";this.convert=function(D){return D/B*this.value};this.convertFrom=function(D){return D/this.value*B};this.toString=function(){return this.value+this.unit}},addClass:function(C,B){var D=C.className;C.className=D+(D&&" ")+B;return C},color:j(function(C){var B={};B.color=C.replace(/^rgba\((.*?),\s*([\d.]+)\)/,function(E,D,F){B.opacity=parseFloat(F);return"rgb("+D+")"});return B}),fontStretch:j(function(B){if(typeof B=="number"){return B}if(/%$/.test(B)){return parseFloat(B)/100}return{"ultra-condensed":0.5,"extra-condensed":0.625,condensed:0.75,"semi-condensed":0.875,"semi-expanded":1.125,expanded:1.25,"extra-expanded":1.5,"ultra-expanded":2}[B]||1}),getStyle:function(C){var B=document.defaultView;if(B&&B.getComputedStyle){return new a(B.getComputedStyle(C,null))}if(C.currentStyle){return new a(C.currentStyle)}return new a(C.style)},gradient:j(function(F){var G={id:F,type:F.match(/^-([a-z]+)-gradient\(/)[1],stops:[]},C=F.substr(F.indexOf("(")).match(/([\d.]+=)?(#[a-f0-9]+|[a-z]+\(.*?\)|[a-z]+)/ig);for(var E=0,B=C.length,D;E<B;++E){D=C[E].split("=",2).reverse();G.stops.push([D[1]||E/(B-1),D[0]])}return G}),quotedList:j(function(E){var D=[],C=/\s*((["'])([\s\S]*?[^\\])\2|[^,]+)\s*/g,B;while(B=C.exec(E)){D.push(B[3]||B[1])}return D}),recognizesMedia:j(function(G){var E=document.createElement("style"),D,C,B;E.type="text/css";E.media=G;try{E.appendChild(document.createTextNode("/**/"))}catch(F){}C=g("head")[0];C.insertBefore(E,C.firstChild);D=(E.sheet||E.styleSheet);B=D&&!D.disabled;C.removeChild(E);return B}),removeClass:function(D,C){var B=RegExp("(?:^|\\s+)"+C+"(?=\\s|$)","g");D.className=D.className.replace(B,"");return D},supports:function(D,C){var B=document.createElement("span").style;if(B[D]===undefined){return false}B[D]=C;return B[D]===C},textAlign:function(E,D,B,C){if(D.get("textAlign")=="right"){if(B>0){E=" "+E}}else{if(B<C-1){E+=" "}}return E},textShadow:j(function(F){if(F=="none"){return null}var E=[],G={},B,C=0;var D=/(#[a-f0-9]+|[a-z]+\(.*?\)|[a-z]+)|(-?[\d.]+[a-z%]*)|,/ig;while(B=D.exec(F)){if(B[0]==","){E.push(G);G={};C=0}else{if(B[1]){G.color=B[1]}else{G[["offX","offY","blur"][C++]]=B[2]}}}E.push(G);return E}),textTransform:(function(){var B={uppercase:function(C){return C.toUpperCase()},lowercase:function(C){return C.toLowerCase()},capitalize:function(C){return C.replace(/\b./g,function(D){return D.toUpperCase()})}};return function(E,D){var C=B[D.get("textTransform")];return C?C(E):E}})(),whiteSpace:(function(){var D={inline:1,"inline-block":1,"run-in":1};var C=/^\s+/,B=/\s+$/;return function(H,F,G,E){if(E){if(E.nodeName.toLowerCase()=="br"){H=H.replace(C,"")}}if(D[F.get("display")]){return H}if(!G.previousSibling){H=H.replace(C,"")}if(!G.nextSibling){H=H.replace(B,"")}return H}})()};n.ready=(function(){var B=!n.recognizesMedia("all"),E=false;var D=[],H=function(){B=true;for(var K;K=D.shift();K()){}};var I=g("link"),J=g("style");function C(K){return K.disabled||G(K.sheet,K.media||"screen")}function G(M,P){if(!n.recognizesMedia(P||"all")){return true}if(!M||M.disabled){return false}try{var Q=M.cssRules,O;if(Q){search:for(var L=0,K=Q.length;O=Q[L],L<K;++L){switch(O.type){case 2:break;case 3:if(!G(O.styleSheet,O.media.mediaText)){return false}break;default:break search}}}}catch(N){}return true}function F(){if(document.createStyleSheet){return true}var L,K;for(K=0;L=I[K];++K){if(L.rel.toLowerCase()=="stylesheet"&&!C(L)){return false}}for(K=0;L=J[K];++K){if(!C(L)){return false}}return true}x.ready(function(){if(!E){E=n.getStyle(document.body).isUsable()}if(B||(E&&F())){H()}else{setTimeout(arguments.callee,10)}});return function(K){if(B){K()}else{D.push(K)}}})();function s(D){var C=this.face=D.face,B={"\u0020":1,"\u00a0":1,"\u3000":1};this.glyphs=D.glyphs;this.w=D.w;this.baseSize=parseInt(C["units-per-em"],10);this.family=C["font-family"].toLowerCase();this.weight=C["font-weight"];this.style=C["font-style"]||"normal";this.viewBox=(function(){var F=C.bbox.split(/\s+/);var E={minX:parseInt(F[0],10),minY:parseInt(F[1],10),maxX:parseInt(F[2],10),maxY:parseInt(F[3],10)};E.width=E.maxX-E.minX;E.height=E.maxY-E.minY;E.toString=function(){return[this.minX,this.minY,this.width,this.height].join(" ")};return E})();this.ascent=-parseInt(C.ascent,10);this.descent=-parseInt(C.descent,10);this.height=-this.ascent+this.descent;this.spacing=function(L,N,E){var O=this.glyphs,M,K,G,P=[],F=0,J=-1,I=-1,H;while(H=L[++J]){M=O[H]||this.missingGlyph;if(!M){continue}if(K){F-=G=K[H]||0;P[I]-=G}F+=P[++I]=~~(M.w||this.w)+N+(B[H]?E:0);K=M.k}P.total=F;return P}}function f(){var C={},B={oblique:"italic",italic:"oblique"};this.add=function(D){(C[D.style]||(C[D.style]={}))[D.weight]=D};this.get=function(H,I){var G=C[H]||C[B[H]]||C.normal||C.italic||C.oblique;if(!G){return null}I={normal:400,bold:700}[I]||parseInt(I,10);if(G[I]){return G[I]}var E={1:1,99:0}[I%100],K=[],F,D;if(E===undefined){E=I>400}if(I==500){I=400}for(var J in G){if(!k(G,J)){continue}J=parseInt(J,10);if(!F||J<F){F=J}if(!D||J>D){D=J}K.push(J)}if(I<F){I=F}if(I>D){I=D}K.sort(function(M,L){return(E?(M>=I&&L>=I)?M<L:M>L:(M<=I&&L<=I)?M>L:M<L)?-1:1});return G[K[0]]}}function r(){function D(F,G){if(F.contains){return F.contains(G)}return F.compareDocumentPosition(G)&16}function B(G){var F=G.relatedTarget;if(!F||D(this,F)){return}C(this,G.type=="mouseover")}function E(F){C(this,F.type=="mouseenter")}function C(F,G){setTimeout(function(){var H=d.get(F).options;m.replace(F,G?h(H,H.hover):H,true)},10)}this.attach=function(F){if(F.onmouseenter===undefined){q(F,"mouseover",B);q(F,"mouseout",B)}else{q(F,"mouseenter",E);q(F,"mouseleave",E)}}}function u(){var C=[],D={};function B(H){var E=[],G;for(var F=0;G=H[F];++F){E[F]=C[D[G]]}return E}this.add=function(F,E){D[F]=C.push(E)-1};this.repeat=function(){var E=arguments.length?B(arguments):C,F;for(var G=0;F=E[G++];){m.replace(F[0],F[1],true)}}}function A(){var D={},B=0;function C(E){return E.cufid||(E.cufid=++B)}this.get=function(E){var F=C(E);return D[F]||(D[F]={})}}function a(B){var D={},C={};this.extend=function(E){for(var F in E){if(k(E,F)){D[F]=E[F]}}return this};this.get=function(E){return D[E]!=undefined?D[E]:B[E]};this.getSize=function(F,E){return C[F]||(C[F]=new n.Size(this.get(F),E))};this.isUsable=function(){return !!B}}function q(C,B,D){if(C.addEventListener){C.addEventListener(B,D,false)}else{if(C.attachEvent){C.attachEvent("on"+B,function(){return D.call(C,window.event)})}}}function v(C,B){var D=d.get(C);if(D.options){return C}if(B.hover&&B.hoverables[C.nodeName.toLowerCase()]){b.attach(C)}D.options=B;return C}function j(B){var C={};return function(D){if(!k(C,D)){C[D]=B.apply(null,arguments)}return C[D]}}function c(F,E){var B=n.quotedList(E.get("fontFamily").toLowerCase()),D;for(var C=0;D=B[C];++C){if(i[D]){return i[D].get(E.get("fontStyle"),E.get("fontWeight"))}}return null}function g(B){return document.getElementsByTagName(B)}function k(C,B){return C.hasOwnProperty(B)}function h(){var C={},B,F;for(var E=0,D=arguments.length;B=arguments[E],E<D;++E){for(F in B){if(k(B,F)){C[F]=B[F]}}}return C}function o(E,M,C,N,F,D){var K=document.createDocumentFragment(),H;if(M===""){return K}var L=N.separate;var I=M.split(p[L]),B=(L=="words");if(B&&t){if(/^\s/.test(M)){I.unshift("")}if(/\s$/.test(M)){I.push("")}}for(var J=0,G=I.length;J<G;++J){H=z[N.engine](E,B?n.textAlign(I[J],C,J,G):I[J],C,N,F,D,J<G-1);if(H){K.appendChild(H)}}return K}function l(D,M){var C=D.nodeName.toLowerCase();if(M.ignore[C]){return}var E=!M.textless[C];var B=n.getStyle(v(D,M)).extend(M);var F=c(D,B),G,K,I,H,L,J;if(!F){return}for(G=D.firstChild;G;G=I){K=G.nodeType;I=G.nextSibling;if(E&&K==3){if(H){H.appendData(G.data);D.removeChild(G)}else{H=G}if(I){continue}}if(H){D.replaceChild(o(F,n.whiteSpace(H.data,B,H,J),B,M,G,D),H);H=null}if(K==1){if(G.firstChild){if(G.nodeName.toLowerCase()=="cufon"){z[M.engine](F,null,B,M,G,D)}else{arguments.callee(G,M)}}J=G}}}var t=" ".split(/\s+/).length==0;var d=new A();var b=new r();var y=new u();var e=false;var z={},i={},w={autoDetect:false,engine:null,forceHitArea:false,hover:false,hoverables:{a:true},ignore:{applet:1,canvas:1,col:1,colgroup:1,head:1,iframe:1,map:1,optgroup:1,option:1,script:1,select:1,style:1,textarea:1,title:1,pre:1},printable:true,selector:(window.Sizzle||(window.jQuery&&function(B){return jQuery(B)})||(window.dojo&&dojo.query)||(window.Ext&&Ext.query)||(window.YAHOO&&YAHOO.util&&YAHOO.util.Selector&&YAHOO.util.Selector.query)||(window.$$&&function(B){return $$(B)})||(window.$&&function(B){return $(B)})||(document.querySelectorAll&&function(B){return document.querySelectorAll(B)})||g),separate:"words",textless:{dl:1,html:1,ol:1,table:1,tbody:1,thead:1,tfoot:1,tr:1,ul:1},textShadow:"none"};var p={words:/\s/.test("\u00a0")?/[^\S\u00a0]+/:/\s+/,characters:"",none:/^/};m.now=function(){x.ready();return m};m.refresh=function(){y.repeat.apply(y,arguments);return m};m.registerEngine=function(C,B){if(!B){return m}z[C]=B;return m.set("engine",C)};m.registerFont=function(D){if(!D){return m}var B=new s(D),C=B.family;if(!i[C]){i[C]=new f()}i[C].add(B);return m.set("fontFamily",'"'+C+'"')};m.replace=function(D,C,B){C=h(w,C);if(!C.engine){return m}if(!e){n.addClass(x.root(),"cufon-active cufon-loading");n.ready(function(){n.addClass(n.removeClass(x.root(),"cufon-loading"),"cufon-ready")});e=true}if(C.hover){C.forceHitArea=true}if(C.autoDetect){delete C.fontFamily}if(typeof C.textShadow=="string"){C.textShadow=n.textShadow(C.textShadow)}if(typeof C.color=="string"&&/^-/.test(C.color)){C.textGradient=n.gradient(C.color)}else{delete C.textGradient}if(!B){y.add(D,arguments)}if(D.nodeType||typeof D=="string"){D=[D]}n.ready(function(){for(var F=0,E=D.length;F<E;++F){var G=D[F];if(typeof G=="string"){m.replace(C.selector(G),C,true)}else{l(G,C)}}});return m};m.set=function(B,C){w[B]=C;return m};return m})();Cufon.registerEngine("canvas",(function(){var b=document.createElement("canvas");if(!b||!b.getContext||!b.getContext.apply){return}b=null;var a=Cufon.CSS.supports("display","inline-block");var e=!a&&(document.compatMode=="BackCompat"||/frameset|transitional/i.test(document.doctype.publicId));var f=document.createElement("style");f.type="text/css";f.appendChild(document.createTextNode(("cufon{text-indent:0;}@media screen,projection{cufon{display:inline;display:inline-block;position:relative;vertical-align:middle;"+(e?"":"font-size:1px;line-height:1px;")+"}cufon cufontext{display:-moz-inline-box;display:inline-block;width:0;height:0;overflow:hidden;text-indent:-10000in;}"+(a?"cufon canvas{position:relative;}":"cufon canvas{position:absolute;}")+"}@media print{cufon{padding:0;}cufon canvas{display:none;}}").replace(/;/g,"!important;")));document.getElementsByTagName("head")[0].appendChild(f);function d(p,h){var n=0,m=0;var g=[],o=/([mrvxe])([^a-z]*)/g,k;generate:for(var j=0;k=o.exec(p);++j){var l=k[2].split(",");switch(k[1]){case"v":g[j]={m:"bezierCurveTo",a:[n+~~l[0],m+~~l[1],n+~~l[2],m+~~l[3],n+=~~l[4],m+=~~l[5]]};break;case"r":g[j]={m:"lineTo",a:[n+=~~l[0],m+=~~l[1]]};break;case"m":g[j]={m:"moveTo",a:[n=~~l[0],m=~~l[1]]};break;case"x":g[j]={m:"closePath"};break;case"e":break generate}h[g[j].m].apply(h,g[j].a)}return g}function c(m,k){for(var j=0,h=m.length;j<h;++j){var g=m[j];k[g.m].apply(k,g.a)}}return function(V,w,P,t,C,W){var k=(w===null);if(k){w=C.getAttribute("alt")}var A=V.viewBox;var m=P.getSize("fontSize",V.baseSize);var B=0,O=0,N=0,u=0;var z=t.textShadow,L=[];if(z){for(var U=z.length;U--;){var F=z[U];var K=m.convertFrom(parseFloat(F.offX));var I=m.convertFrom(parseFloat(F.offY));L[U]=[K,I];if(I<B){B=I}if(K>O){O=K}if(I>N){N=I}if(K<u){u=K}}}var Z=Cufon.CSS.textTransform(w,P).split("");var E=V.spacing(Z,~~m.convertFrom(parseFloat(P.get("letterSpacing"))||0),~~m.convertFrom(parseFloat(P.get("wordSpacing"))||0));if(!E.length){return null}var h=E.total;O+=A.width-E[E.length-1];u+=A.minX;var s,n;if(k){s=C;n=C.firstChild}else{s=document.createElement("cufon");s.className="cufon cufon-canvas";s.setAttribute("alt",w);n=document.createElement("canvas");s.appendChild(n);if(t.printable){var S=document.createElement("cufontext");S.appendChild(document.createTextNode(w));s.appendChild(S)}}var aa=s.style;var H=n.style;var j=m.convert(A.height);var Y=Math.ceil(j);var M=Y/j;var G=M*Cufon.CSS.fontStretch(P.get("fontStretch"));var J=h*G;var Q=Math.ceil(m.convert(J+O-u));var o=Math.ceil(m.convert(A.height-B+N));n.width=Q;n.height=o;H.width=Q+"px";H.height=o+"px";B+=A.minY;H.top=Math.round(m.convert(B-V.ascent))+"px";H.left=Math.round(m.convert(u))+"px";var r=Math.max(Math.ceil(m.convert(J)),0)+"px";if(a){aa.width=r;aa.height=m.convert(V.height)+"px"}else{aa.paddingLeft=r;aa.paddingBottom=(m.convert(V.height)-1)+"px"}var X=n.getContext("2d"),D=j/A.height;X.scale(D,D*M);X.translate(-u,-B);X.save();function T(){var x=V.glyphs,ab,l=-1,g=-1,y;X.scale(G,1);while(y=Z[++l]){var ab=x[Z[l]]||V.missingGlyph;if(!ab){continue}if(ab.d){X.beginPath();if(ab.code){c(ab.code,X)}else{ab.code=d("m"+ab.d,X)}X.fill()}X.translate(E[++g],0)}X.restore()}if(z){for(var U=z.length;U--;){var F=z[U];X.save();X.fillStyle=F.color;X.translate.apply(X,L[U]);T()}}var q=t.textGradient;if(q){var v=q.stops,p=X.createLinearGradient(0,A.minY,0,A.maxY);for(var U=0,R=v.length;U<R;++U){p.addColorStop.apply(p,v[U])}X.fillStyle=p}else{X.fillStyle=P.get("color")}T();return s}})());Cufon.registerEngine("vml",(function(){var e=document.namespaces;if(!e){return}e.add("cvml","urn:schemas-microsoft-com:vml");e=null;var b=document.createElement("cvml:shape");b.style.behavior="url(#default#VML)";if(!b.coordsize){return}b=null;var h=(document.documentMode||0)<8;document.write(('<style type="text/css">cufoncanvas{text-indent:0;}@media screen{cvml\\:shape,cvml\\:rect,cvml\\:fill,cvml\\:shadow{behavior:url(#default#VML);display:block;antialias:true;position:absolute;}cufoncanvas{position:absolute;text-align:left;}cufon{display:inline-block;position:relative;vertical-align:'+(h?"middle":"text-bottom")+";}cufon cufontext{position:absolute;left:-10000in;font-size:1px;}a cufon{cursor:pointer}}@media print{cufon cufoncanvas{display:none;}}</style>").replace(/;/g,"!important;"));function c(i,j){return a(i,/(?:em|ex|%)$|^[a-z-]+$/i.test(j)?"1em":j)}function a(l,m){if(m==="0"){return 0}if(/px$/i.test(m)){return parseFloat(m)}var k=l.style.left,j=l.runtimeStyle.left;l.runtimeStyle.left=l.currentStyle.left;l.style.left=m.replace("%","em");var i=l.style.pixelLeft;l.style.left=k;l.runtimeStyle.left=j;return i}function f(l,k,j,n){var i="computed"+n,m=k[i];if(isNaN(m)){m=k.get(n);k[i]=m=(m=="normal")?0:~~j.convertFrom(a(l,m))}return m}var g={};function d(p){var q=p.id;if(!g[q]){var n=p.stops,o=document.createElement("cvml:fill"),i=[];o.type="gradient";o.angle=180;o.focus="0";o.method="sigma";o.color=n[0][1];for(var m=1,l=n.length-1;m<l;++m){i.push(n[m][0]*100+"% "+n[m][1])}o.colors=i.join(",");o.color2=n[l][1];g[q]=o}return g[q]}return function(ac,G,Y,C,K,ad,W){var n=(G===null);if(n){G=K.alt}var I=ac.viewBox;var p=Y.computedFontSize||(Y.computedFontSize=new Cufon.CSS.Size(c(ad,Y.get("fontSize"))+"px",ac.baseSize));var y,q;if(n){y=K;q=K.firstChild}else{y=document.createElement("cufon");y.className="cufon cufon-vml";y.alt=G;q=document.createElement("cufoncanvas");y.appendChild(q);if(C.printable){var Z=document.createElement("cufontext");Z.appendChild(document.createTextNode(G));y.appendChild(Z)}if(!W){y.appendChild(document.createElement("cvml:shape"))}}var ai=y.style;var R=q.style;var l=p.convert(I.height),af=Math.ceil(l);var V=af/l;var P=V*Cufon.CSS.fontStretch(Y.get("fontStretch"));var U=I.minX,T=I.minY;R.height=af;R.top=Math.round(p.convert(T-ac.ascent));R.left=Math.round(p.convert(U));ai.height=p.convert(ac.height)+"px";var F=Y.get("color");var ag=Cufon.CSS.textTransform(G,Y).split("");var L=ac.spacing(ag,f(ad,Y,p,"letterSpacing"),f(ad,Y,p,"wordSpacing"));if(!L.length){return null}var k=L.total;var x=-U+k+(I.width-L[L.length-1]);var ah=p.convert(x*P),X=Math.round(ah);var O=x+","+I.height,m;var J="r"+O+"ns";var u=C.textGradient&&d(C.textGradient);var o=ac.glyphs,S=0;var H=C.textShadow;var ab=-1,aa=0,w;while(w=ag[++ab]){var D=o[ag[ab]]||ac.missingGlyph,v;if(!D){continue}if(n){v=q.childNodes[aa];while(v.firstChild){v.removeChild(v.firstChild)}}else{v=document.createElement("cvml:shape");q.appendChild(v)}v.stroked="f";v.coordsize=O;v.coordorigin=m=(U-S)+","+T;v.path=(D.d?"m"+D.d+"xe":"")+"m"+m+J;v.fillcolor=F;if(u){v.appendChild(u.cloneNode(false))}var ae=v.style;ae.width=X;ae.height=af;if(H){var s=H[0],r=H[1];var B=Cufon.CSS.color(s.color),z;var N=document.createElement("cvml:shadow");N.on="t";N.color=B.color;N.offset=s.offX+","+s.offY;if(r){z=Cufon.CSS.color(r.color);N.type="double";N.color2=z.color;N.offset2=r.offX+","+r.offY}N.opacity=B.opacity||(z&&z.opacity)||1;v.appendChild(N)}S+=L[aa++]}var M=v.nextSibling,t,A;if(C.forceHitArea){if(!M){M=document.createElement("cvml:rect");M.stroked="f";M.className="cufon-vml-cover";t=document.createElement("cvml:fill");t.opacity=0;M.appendChild(t);q.appendChild(M)}A=M.style;A.width=X;A.height=af}else{if(M){q.removeChild(M)}}ai.width=Math.max(Math.ceil(p.convert(k*P)),0);if(h){var Q=Y.computedYAdjust;if(Q===undefined){var E=Y.get("lineHeight");if(E=="normal"){E="1em"}else{if(!isNaN(E)){E+="em"}}Y.computedYAdjust=Q=0.5*(a(ad,E)-parseFloat(ai.height))}if(Q){ai.marginTop=Math.ceil(Q)+"px";ai.marginBottom=Q+"px"}}return y}})());
15 public/javascripts/jquery.jcarousel.pack.js
@@ -0,0 +1,15 @@
+/**
+ * jCarousel - Riding carousels with jQuery
+ * http://sorgalla.com/jcarousel/
+ *
+ * Copyright (c) 2006 Jan Sorgalla (http://sorgalla.com)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * Built on top of the jQuery library
+ * http://jquery.com
+ *
+ * Inspired by the "Carousel Component" by Bill Scott
+ * http://billwscott.com/carousel/
+ */
+eval(function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('(9($){$.1s.A=9(o){z 4.14(9(){2H r(4,o)})};8 q={W:F,23:1,1G:1,u:7,15:3,16:7,1H:\'2I\',24:\'2J\',1i:0,B:7,1j:7,1I:7,25:7,26:7,27:7,28:7,29:7,2a:7,2b:7,1J:\'<N></N>\',1K:\'<N></N>\',2c:\'2d\',2e:\'2d\',1L:7,1M:7};$.A=9(e,o){4.5=$.17({},q,o||{});4.Q=F;4.D=7;4.H=7;4.t=7;4.R=7;4.S=7;4.O=!4.5.W?\'1N\':\'2f\';4.E=!4.5.W?\'2g\':\'2h\';8 a=\'\',1d=e.J.1d(\' \');1k(8 i=0;i<1d.K;i++){6(1d[i].2i(\'A-2j\')!=-1){$(e).1t(1d[i]);8 a=1d[i];1l}}6(e.2k==\'2K\'||e.2k==\'2L\'){4.t=$(e);4.D=4.t.18();6(4.D.1m(\'A-H\')){6(!4.D.18().1m(\'A-D\'))4.D=4.D.B(\'<N></N>\');4.D=4.D.18()}X 6(!4.D.1m(\'A-D\'))4.D=4.t.B(\'<N></N>\').18()}X{4.D=$(e);4.t=$(e).2M(\'>2l,>2m,N>2l,N>2m\')}6(a!=\'\'&&4.D.18()[0].J.2i(\'A-2j\')==-1)4.D.B(\'<N 2N=" \'+a+\'"></N>\');4.H=4.t.18();6(!4.H.K||!4.H.1m(\'A-H\'))4.H=4.t.B(\'<N></N>\').18();4.S=$(\'.A-11\',4.D);6(4.S.u()==0&&4.5.1K!=7)4.S=4.H.1u(4.5.1K).11();4.S.V(4.J(\'A-11\'));4.R=$(\'.A-19\',4.D);6(4.R.u()==0&&4.5.1J!=7)4.R=4.H.1u(4.5.1J).11();4.R.V(4.J(\'A-19\'));4.H.V(4.J(\'A-H\'));4.t.V(4.J(\'A-t\'));4.D.V(4.J(\'A-D\'));8 b=4.5.16!=7?1n.1O(4.1o()/4.5.16):7;8 c=4.t.2O(\'1v\');8 d=4;6(c.u()>0){8 f=0,i=4.5.1G;c.14(9(){d.1P(4,i++);f+=d.T(4,b)});4.t.y(4.O,f+\'U\');6(!o||o.u===L)4.5.u=c.u()}4.D.y(\'1w\',\'1x\');4.R.y(\'1w\',\'1x\');4.S.y(\'1w\',\'1x\');4.2n=9(){d.19()};4.2o=9(){d.11()};4.1Q=9(){d.2p()};6(4.5.1j!=7)4.5.1j(4,\'2q\');6($.2r.2s){4.1e(F,F);$(2t).1y(\'2P\',9(){d.1z()})}X 4.1z()};8 r=$.A;r.1s=r.2Q={A:\'0.2.3\'};r.1s.17=r.17=$.17;r.1s.17({1z:9(){4.C=7;4.G=7;4.Y=7;4.12=7;4.1a=F;4.1f=7;4.P=7;4.Z=F;6(4.Q)z;4.t.y(4.E,4.1A(4.5.1G)+\'U\');8 p=4.1A(4.5.23);4.Y=4.12=7;4.1p(p,F);$(2t).1R(\'2u\',4.1Q).1y(\'2u\',4.1Q)},2v:9(){4.t.2w();4.t.y(4.E,\'2R\');4.t.y(4.O,\'2S\');6(4.5.1j!=7)4.5.1j(4,\'2v\');4.1z()},2p:9(){6(4.P!=7&&4.Z)4.t.y(4.E,r.I(4.t.y(4.E))+4.P);4.P=7;4.Z=F;6(4.5.1I!=7)4.5.1I(4);6(4.5.16!=7){8 a=4;8 b=1n.1O(4.1o()/4.5.16),O=0,E=0;$(\'1v\',4.t).14(9(i){O+=a.T(4,b);6(i+1<a.C)E=O});4.t.y(4.O,O+\'U\');4.t.y(4.E,-E+\'U\')}4.15(4.C,F)},2T:9(){4.Q=1g;4.1e()},2U:9(){4.Q=F;4.1e()},u:9(s){6(s!=L){4.5.u=s;6(!4.Q)4.1e()}z 4.5.u},2V:9(i,a){6(a==L||!a)a=i;6(4.5.u!==7&&a>4.5.u)a=4.5.u;1k(8 j=i;j<=a;j++){8 e=4.M(j);6(!e.K||e.1m(\'A-1b-1B\'))z F}z 1g},M:9(i){z $(\'.A-1b-\'+i,4.t)},2x:9(i,s){8 e=4.M(i),1S=0,2x=0;6(e.K==0){8 c,e=4.1C(i),j=r.I(i);1q(c=4.M(--j)){6(j<=0||c.K){j<=0?4.t.2y(e):c.1T(e);1l}}}X 1S=4.T(e);e.1t(4.J(\'A-1b-1B\'));1U s==\'2W\'?e.2X(s):e.2w().2Y(s);8 a=4.5.16!=7?1n.1O(4.1o()/4.5.16):7;8 b=4.T(e,a)-1S;6(i>0&&i<4.C)4.t.y(4.E,r.I(4.t.y(4.E))-b+\'U\');4.t.y(4.O,r.I(4.t.y(4.O))+b+\'U\');z e},1V:9(i){8 e=4.M(i);6(!e.K||(i>=4.C&&i<=4.G))z;8 d=4.T(e);6(i<4.C)4.t.y(4.E,r.I(4.t.y(4.E))+d+\'U\');e.1V();4.t.y(4.O,r.I(4.t.y(4.O))-d+\'U\')},19:9(){4.1D();6(4.P!=7&&!4.Z)4.1W(F);X 4.15(((4.5.B==\'1X\'||4.5.B==\'G\')&&4.5.u!=7&&4.G==4.5.u)?1:4.C+4.5.15)},11:9(){4.1D();6(4.P!=7&&4.Z)4.1W(1g);X 4.15(((4.5.B==\'1X\'||4.5.B==\'C\')&&4.5.u!=7&&4.C==1)?4.5.u:4.C-4.5.15)},1W:9(b){6(4.Q||4.1a||!4.P)z;8 a=r.I(4.t.y(4.E));!b?a-=4.P:a+=4.P;4.Z=!b;4.Y=4.C;4.12=4.G;4.1p(a)},15:9(i,a){6(4.Q||4.1a)z;4.1p(4.1A(i),a)},1A:9(i){6(4.Q||4.1a)z;i=r.I(i);6(4.5.B!=\'1c\')i=i<1?1:(4.5.u&&i>4.5.u?4.5.u:i);8 a=4.C>i;8 b=r.I(4.t.y(4.E));8 f=4.5.B!=\'1c\'&&4.C<=1?1:4.C;8 c=a?4.M(f):4.M(4.G);8 j=a?f:f-1;8 e=7,l=0,p=F,d=0;1q(a?--j>=i:++j<i){e=4.M(j);p=!e.K;6(e.K==0){e=4.1C(j).V(4.J(\'A-1b-1B\'));c[a?\'1u\':\'1T\'](e)}c=e;d=4.T(e);6(p)l+=d;6(4.C!=7&&(4.5.B==\'1c\'||(j>=1&&(4.5.u==7||j<=4.5.u))))b=a?b+d:b-d}8 g=4.1o();8 h=[];8 k=0,j=i,v=0;8 c=4.M(i-1);1q(++k){e=4.M(j);p=!e.K;6(e.K==0){e=4.1C(j).V(4.J(\'A-1b-1B\'));c.K==0?4.t.2y(e):c[a?\'1u\':\'1T\'](e)}c=e;8 d=4.T(e);6(d==0){2Z(\'30: 31 1N/2f 32 1k 33. 34 35 36 37 38 39. 3a...\');z 0}6(4.5.B!=\'1c\'&&4.5.u!==7&&j>4.5.u)h.3b(e);X 6(p)l+=d;v+=d;6(v>=g)1l;j++}1k(8 x=0;x<h.K;x++)h[x].1V();6(l>0){4.t.y(4.O,4.T(4.t)+l+\'U\');6(a){b-=l;4.t.y(4.E,r.I(4.t.y(4.E))-l+\'U\')}}8 n=i+k-1;6(4.5.B!=\'1c\'&&4.5.u&&n>4.5.u)n=4.5.u;6(j>n){k=0,j=n,v=0;1q(++k){8 e=4.M(j--);6(!e.K)1l;v+=4.T(e);6(v>=g)1l}}8 o=n-k+1;6(4.5.B!=\'1c\'&&o<1)o=1;6(4.Z&&a){b+=4.P;4.Z=F}4.P=7;6(4.5.B!=\'1c\'&&n==4.5.u&&(n-k+1)>=1){8 m=r.10(4.M(n),!4.5.W?\'1r\':\'1Y\');6((v-m)>g)4.P=v-g-m}1q(i-->o)b+=4.T(4.M(i));4.Y=4.C;4.12=4.G;4.C=o;4.G=n;z b},1p:9(p,a){6(4.Q||4.1a)z;4.1a=1g;8 b=4;8 c=9(){b.1a=F;6(p==0)b.t.y(b.E,0);6(b.5.B==\'1X\'||b.5.B==\'G\'||b.5.u==7||b.G<b.5.u)b.2z();b.1e();b.1Z(\'2A\')};4.1Z(\'3c\');6(!4.5.1H||a==F){4.t.y(4.E,p+\'U\');c()}X{8 o=!4.5.W?{\'2g\':p}:{\'2h\':p};4.t.1p(o,4.5.1H,4.5.24,c)}},2z:9(s){6(s!=L)4.5.1i=s;6(4.5.1i==0)z 4.1D();6(4.1f!=7)z;8 a=4;4.1f=3d(9(){a.19()},4.5.1i*3e)},1D:9(){6(4.1f==7)z;3f(4.1f);4.1f=7},1e:9(n,p){6(n==L||n==7){8 n=!4.Q&&4.5.u!==0&&((4.5.B&&4.5.B!=\'C\')||4.5.u==7||4.G<4.5.u);6(!4.Q&&(!4.5.B||4.5.B==\'C\')&&4.5.u!=7&&4.G>=4.5.u)n=4.P!=7&&!4.Z}6(p==L||p==7){8 p=!4.Q&&4.5.u!==0&&((4.5.B&&4.5.B!=\'G\')||4.C>1);6(!4.Q&&(!4.5.B||4.5.B==\'G\')&&4.5.u!=7&&4.C==1)p=4.P!=7&&4.Z}8 a=4;4.R[n?\'1y\':\'1R\'](4.5.2c,4.2n)[n?\'1t\':\'V\'](4.J(\'A-19-1E\')).20(\'1E\',n?F:1g);4.S[p?\'1y\':\'1R\'](4.5.2e,4.2o)[p?\'1t\':\'V\'](4.J(\'A-11-1E\')).20(\'1E\',p?F:1g);6(4.R.K>0&&(4.R[0].1h==L||4.R[0].1h!=n)&&4.5.1L!=7){4.R.14(9(){a.5.1L(a,4,n)});4.R[0].1h=n}6(4.S.K>0&&(4.S[0].1h==L||4.S[0].1h!=p)&&4.5.1M!=7){4.S.14(9(){a.5.1M(a,4,p)});4.S[0].1h=p}},1Z:9(a){8 b=4.Y==7?\'2q\':(4.Y<4.C?\'19\':\'11\');4.13(\'25\',a,b);6(4.Y!==4.C){4.13(\'26\',a,b,4.C);4.13(\'27\',a,b,4.Y)}6(4.12!==4.G){4.13(\'28\',a,b,4.G);4.13(\'29\',a,b,4.12)}4.13(\'2a\',a,b,4.C,4.G,4.Y,4.12);4.13(\'2b\',a,b,4.Y,4.12,4.C,4.G)},13:9(a,b,c,d,e,f,g){6(4.5[a]==L||(1U 4.5[a]!=\'2B\'&&b!=\'2A\'))z;8 h=1U 4.5[a]==\'2B\'?4.5[a][b]:4.5[a];6(!$.3g(h))z;8 j=4;6(d===L)h(j,c,b);X 6(e===L)4.M(d).14(9(){h(j,4,d,c,b)});X{1k(8 i=d;i<=e;i++)6(i!==7&&!(i>=f&&i<=g))4.M(i).14(9(){h(j,4,i,c,b)})}},1C:9(i){z 4.1P(\'<1v></1v>\',i)},1P:9(e,i){8 a=$(e).V(4.J(\'A-1b\')).V(4.J(\'A-1b-\'+i));a.20(\'3h\',i);z a},J:9(c){z c+\' \'+c+(!4.5.W?\'-3i\':\'-W\')},T:9(e,d){8 a=e.2C!=L?e[0]:e;8 b=!4.5.W?a.1F+r.10(a,\'2D\')+r.10(a,\'1r\'):a.2E+r.10(a,\'2F\')+r.10(a,\'1Y\');6(d==L||b==d)z b;8 w=!4.5.W?d-r.10(a,\'2D\')-r.10(a,\'1r\'):d-r.10(a,\'2F\')-r.10(a,\'1Y\');$(a).y(4.O,w+\'U\');z 4.T(a)},1o:9(){z!4.5.W?4.H[0].1F-r.I(4.H.y(\'3j\'))-r.I(4.H.y(\'3k\')):4.H[0].2E-r.I(4.H.y(\'3l\'))-r.I(4.H.y(\'3m\'))},3n:9(i,s){6(s==L)s=4.5.u;z 1n.3o((((i-1)/s)-1n.3p((i-1)/s))*s)+1}});r.17({3q:9(d){z $.17(q,d||{})},10:9(e,p){6(!e)z 0;8 a=e.2C!=L?e[0]:e;6(p==\'1r\'&&$.2r.2s){8 b={\'1w\':\'1x\',\'3r\':\'3s\',\'1N\':\'1i\'},21,22;$.2G(a,b,9(){21=a.1F});b[\'1r\']=0;$.2G(a,b,9(){22=a.1F});z 22-21}z r.I($.y(a,p))},I:9(v){v=3t(v);z 3u(v)?0:v}})})(3v);',62,218,'||||this|options|if|null|var|function||||||||||||||||||||list|size||||css|return|jcarousel|wrap|first|container|lt|false|last|clip|intval|className|length|undefined|get|div|wh|tail|locked|buttonNext|buttonPrev|dimension|px|addClass|vertical|else|prevFirst|inTail|margin|prev|prevLast|callback|each|scroll|visible|extend|parent|next|animating|item|circular|split|buttons|timer|true|jcarouselstate|auto|initCallback|for|break|hasClass|Math|clipping|animate|while|marginRight|fn|removeClass|before|li|display|block|bind|setup|pos|placeholder|create|stopAuto|disabled|offsetWidth|offset|animation|reloadCallback|buttonNextHTML|buttonPrevHTML|buttonNextCallback|buttonPrevCallback|width|ceil|format|funcResize|unbind|old|after|typeof|remove|scrollTail|both|marginBottom|notify|attr|oWidth|oWidth2|start|easing|itemLoadCallback|itemFirstInCallback|itemFirstOutCallback|itemLastInCallback|itemLastOutCallback|itemVisibleInCallback|itemVisibleOutCallback|buttonNextEvent|click|buttonPrevEvent|height|left|top|indexOf|skin|nodeName|ul|ol|funcNext|funcPrev|reload|init|browser|safari|window|resize|reset|empty|add|prepend|startAuto|onAfterAnimation|object|jquery|marginLeft|offsetHeight|marginTop|swap|new|normal|swing|UL|OL|find|class|children|load|prototype|0px|10px|lock|unlock|has|string|html|append|alert|jCarousel|No|set|items|This|will|cause|an|infinite|loop|Aborting|push|onBeforeAnimation|setTimeout|1000|clearTimeout|isFunction|jcarouselindex|horizontal|borderLeftWidth|borderRightWidth|borderTopWidth|borderBottomWidth|index|round|floor|defaults|float|none|parseInt|isNaN|jQuery'.split('|'),0,{}))
22 public/javascripts/kievit.js
@@ -0,0 +1,22 @@
+/*!
+ * The following copyright notice may not be removed under any circumstances.
+ *
+ * Copyright:
+ * 2005 Mike Abbink published by FSI Fonts und Software GmbH
+ *
+ * Trademark:
+ * Kievit is a trademark of FSI Fonts und Software GmbH
+ *
+ * Manufacturer:
+ * FSI Fonts und Software GmbH
+ *
+ * Designer:
+ * Mike Abbink
+ *
+ * Vendor URL:
+ * http://www.fontfont.com
+ *
+ * License information:
+ * http://www.fontfont.com/eula/license.html
+ */
+Cufon.registerFont({"w":147,"face":{"font-family":"Kievit","font-weight":500,"font-stretch":"normal","units-per-em":"360","panose-1":"2 0 5 3 4 0 0 2 0 4","ascent":"274","descent":"-86","x-height":"4","bbox":"-13 -270 310 90","underline-thickness":"7.2","underline-position":"-40.68","stemh":"25","stemv":"31","unicode-range":"U+0020-U+007E"},"glyphs":{" ":{"w":78},"!":{"d":"50,3v-13,0,-22,-9,-22,-22v0,-12,9,-22,22,-22v12,0,23,10,23,22v0,13,-11,22,-23,22xm38,-73r-6,-167r37,0r-6,167r-25,0","w":101},"\"":{"d":"24,-158r-9,-82r36,0r-4,82r-23,0xm75,-158r-4,-82r36,0r-9,82r-23,0","w":121,"k":{"9":4,"7":-7,"5":6,"4":38,"0":4}},"#":{"d":"35,-37r8,-50r-35,0r4,-24r35,0r6,-38r-35,0r4,-24r34,0r7,-47r23,0r-7,47r35,0r7,-47r24,0r-7,47r34,0r-4,24r-34,0r-5,38r33,0r-4,24r-33,0r-7,50r-24,0r8,-50r-35,0r-8,50r-24,0xm70,-111r35,0r6,-38r-35,0","w":180,"k":{"9":2,"8":4,"7":-13,"4":28,"1":-7,"0":4}},"$":{"d":"47,-131v0,38,93,32,93,83v0,27,-18,46,-49,51r0,41r-28,0r0,-40v-22,-2,-38,-9,-49,-17r12,-23v16,18,84,23,84,-8v0,-36,-92,-31,-92,-85v0,-24,17,-42,45,-47r0,-38r28,0r0,37v19,2,34,9,43,16r-14,22v-15,-14,-73,-22,-73,8","k":{"7":-5}},"%":{"d":"64,-75v-71,-2,-70,-101,1,-102v73,1,70,100,-1,102xm65,-94v19,0,27,-14,27,-32v0,-18,-9,-32,-28,-32v-19,0,-27,13,-27,31v0,17,9,33,28,33xm212,4v-71,-2,-70,-101,1,-102v73,1,70,100,-1,102xm213,-15v19,0,27,-14,27,-32v0,-18,-9,-32,-28,-32v-19,0,-27,13,-27,31v0,17,9,33,28,33xm75,0r104,-174r25,0r-103,174r-26,0","w":277},"&":{"d":"164,-22v-43,47,-151,25,-151,-40v0,-30,16,-48,50,-67v-48,-41,-35,-115,36,-115v36,0,60,21,60,51v0,27,-17,45,-53,66r59,63v9,-15,15,-32,19,-52r28,5v-4,26,-14,49,-28,68r40,43r-40,0xm91,-144v28,-16,39,-30,39,-48v0,-15,-12,-28,-31,-28v-45,0,-41,48,-8,76xm46,-63v0,45,74,53,100,22r-66,-71v-22,13,-34,28,-34,49","w":227},"'":{"d":"23,-158r-7,-82r37,0r-7,82r-23,0","w":69,"k":{"9":4,"7":-7,"5":6,"4":38,"0":4}},"(":{"d":"84,63v-84,-78,-85,-248,0,-322r29,0v-29,30,-62,84,-62,157v0,68,24,121,62,165r-29,0","w":113,"k":{"y":-9,"j":-22,"J":-22}},")":{"d":"1,63v30,-31,62,-85,62,-158v0,-68,-25,-122,-62,-164r30,0v83,77,83,248,0,322r-30,0","w":114},"*":{"d":"54,-115r-19,-14r30,-40r-48,-15r7,-22r48,17r-2,-51r26,0r-1,51r47,-17r8,22r-49,15r31,40r-20,14r-29,-42","w":166},"+":{"d":"90,-8r0,-75r-75,0r0,-25r75,0r0,-72r28,0r0,72r72,0r0,25r-72,0r0,75r-28,0","w":205,"k":{"7":4,"4":10,"3":7,"2":7}},",":{"d":"21,49v9,-13,15,-27,15,-37v0,-14,-17,-17,-17,-35v0,-12,9,-21,22,-21v42,0,24,68,0,93r-20,0","w":83},"-":{"d":"19,-90r0,-26r75,0r0,26r-75,0","w":112,"k":{"z":3,"x":8,"s":-1,"a":3,"Y":19,"X":15,"W":11,"V":15,"T":18,"S":10,"M":3,"A":8,"4":21,"3":7,"2":7}},".":{"d":"42,3v-13,0,-24,-11,-24,-24v0,-13,11,-23,24,-23v13,0,24,10,24,23v0,13,-11,24,-24,24","w":83},"\/":{"d":"21,6r90,-248r29,0r-90,248r-29,0","k":{"z":11,"y":11,"x":14,"w":8,"v":7,"u":19,"t":5,"s":19,"r":19,"q":18,"p":19,"o":18,"n":19,"m":19,"g":23,"f":1,"e":17,"d":17,"c":24,"a":22,"Y":-4,"W":-4,"V":-4,"T":-7,"Q":7,"O":7,"M":5,"G":9,"C":7,"A":19,"9":22,"8":10,"6":12,"5":26,"4":48,"3":15,"2":17,"1":8,"0":23}},"0":{"d":"103,4v-62,0,-89,-48,-89,-90v0,-41,27,-91,89,-91v62,0,90,48,90,90v0,42,-28,91,-90,91xm103,-21v37,0,57,-28,57,-65v0,-36,-20,-66,-57,-66v-38,0,-57,28,-57,65v0,37,19,66,57,66","w":206,"k":{"7":2,"4":7,"3":4,"\/":12,"'":4,"#":-4,"\"":4}},"1":{"d":"58,0r0,-145r-40,13r-7,-25v25,-6,44,-18,77,-16r0,173r-30,0","w":119,"k":{"'":4,"\"":4}},"2":{"d":"9,0r0,-12v29,-24,102,-78,102,-112v0,-37,-59,-34,-77,-7r-17,-20v31,-38,126,-40,127,23v0,39,-57,81,-84,104v26,-4,70,-1,101,-2r0,26r-152,0","w":174,"k":{"<":7,"9":6,"8":7,"7":4,"5":5,"3":7,"1":4,"-":7,"+":7,"'":11,"%":10,"#":4,"\"":11}},"3":{"d":"142,-9v1,58,-63,86,-125,75r4,-25v40,6,88,-9,88,-47v0,-35,-27,-47,-67,-47r0,-23v26,0,60,-18,60,-47v1,-37,-55,-36,-74,-11r-16,-19v28,-39,122,-28,122,27v0,29,-26,51,-48,57v29,4,56,27,56,60","w":156,"k":{"8":4,"6":-2,"3":2,"2":-4,"\/":-7,"'":4,"%":4,"\"":4}},"4":{"d":"122,64r0,-64r-112,0r0,-20r117,-153r26,0r0,148r39,0r0,25r-39,0r0,64r-31,0xm44,-25r78,0r0,-102","w":204,"k":{"=":7,"<":11,"9":4,"5":4,"3":11,"2":2,"1":11,"0":7,"-":14,"+":10,"'":12,"%":18,"#":14,"\"":12}},"5":{"d":"140,-15v0,53,-57,94,-125,80r6,-25v40,8,86,-10,86,-53v0,-46,-38,-56,-83,-51r7,-109r105,0r0,24r-77,0r-4,59v58,0,85,35,85,75","w":153,"k":{"7":-4,"4":-3,"2":-4,"0":2,"\/":-7,"-":7,"+":7}},"6":{"d":"96,4v-58,0,-81,-53,-81,-102v0,-86,52,-146,142,-146r7,25v-65,-1,-108,34,-114,94v42,-37,122,-13,122,53v0,42,-30,76,-76,76xm97,-21v28,0,43,-23,43,-47v0,-56,-67,-60,-92,-33v-2,45,11,80,49,80","w":185,"k":{">":7,"7":5,"3":9,"2":4,"1":8,"\/":11}},"7":{"d":"44,72r-26,-13r96,-206r-108,0r0,-27r142,0r0,21","w":162,"k":{"@":2,"<":12,"8":7,"5":8,"4":29,"2":4,"\/":26,".":20,",":20}},"8":{"d":"93,4v-93,-3,-97,-97,-25,-129v-71,-32,-47,-119,24,-119v45,0,69,26,69,58v0,23,-14,40,-45,58v77,30,63,134,-23,132xm93,-21v27,0,42,-18,42,-40v0,-17,-11,-33,-46,-52v-27,17,-39,34,-39,53v0,23,16,39,43,39xm94,-141v25,-15,36,-29,36,-43v0,-19,-13,-35,-36,-35v-50,0,-50,56,0,78","w":185,"k":{"3":12,"2":5,"1":4,"\/":14,"%":7}},"9":{"d":"24,67r-6,-25v61,0,112,-31,118,-90v-49,38,-122,9,-122,-55v0,-42,34,-74,78,-74v59,0,79,54,79,102v0,86,-54,142,-147,142xm47,-104v0,52,60,60,91,32v3,-44,-12,-80,-48,-80v-23,0,-43,18,-43,48","w":186,"k":{"3":7,"\/":4,"'":8,"#":-4,"\"":8}},":":{"d":"42,3v-13,0,-23,-11,-23,-24v0,-13,10,-23,23,-23v13,0,24,10,24,23v0,13,-11,24,-24,24xm42,-129v-13,0,-23,-10,-23,-23v0,-13,10,-24,23,-24v13,0,24,11,24,24v0,13,-11,23,-24,23","w":85},";":{"d":"22,49v9,-12,15,-26,15,-37v0,-14,-17,-17,-17,-35v0,-12,9,-21,22,-21v42,0,23,70,0,93r-20,0xm42,-129v-13,0,-23,-10,-23,-23v0,-13,10,-24,23,-24v13,0,24,11,24,24v0,13,-11,23,-24,23","w":85},"<":{"d":"100,-9r-90,-80r90,-80r17,17r-70,62r70,62","w":132,"k":{"7":-7,"2":-7}},"=":{"d":"13,-53r0,-25r141,0r0,25r-141,0xm13,-113r0,-26r141,0r0,26r-141,0","w":166},">":{"d":"32,-9r-17,-18r70,-62r-70,-61r17,-19r90,79","w":132,"k":{"7":7,"4":15,"3":8,"2":8}},"?":{"d":"130,-183v0,64,-72,46,-63,111r-29,0r0,-22v-7,-42,59,-46,59,-87v0,-39,-44,-44,-72,-29r-11,-24v46,-26,116,0,116,51xm53,3v-13,0,-22,-9,-22,-22v0,-12,9,-22,22,-22v12,0,23,10,23,22v0,13,-11,22,-23,22","w":146},"@":{"d":"135,33v-75,0,-120,-52,-120,-119v0,-71,55,-138,132,-138v78,0,119,59,119,109v0,46,-27,85,-65,85v-25,1,-36,-18,-39,-38v-12,46,-85,52,-84,-4v0,-47,26,-95,77,-95v16,0,33,5,44,8r-14,84v0,13,7,23,18,23v23,0,40,-27,40,-60v0,-53,-42,-90,-96,-90v-55,0,-106,51,-106,115v0,78,81,118,151,88r9,20v-13,5,-39,12,-66,12xm121,-54v29,-1,46,-54,51,-90v-42,-14,-64,24,-65,68v0,10,4,22,14,22","w":278,"k":{"z":1,"x":4,"w":-1,"f":-1,"a":2,"Z":6,"Y":13,"X":8,"W":3,"V":8,"T":11,"S":7,"C":-1,"A":7}},"A":{"d":"70,-84r87,0r-44,-118v-10,35,-30,82,-43,118xm7,0r92,-240r31,0r93,240r-35,0r-21,-57r-107,0r-20,57r-33,0","w":229,"k":{"y":12,"w":10,"v":9,"u":2,"t":6,"o":1,"i":3,"g":5,"c":3,"\\":15,"Z":-1,"Y":18,"W":10,"V":12,"U":5,"T":15,"Q":8,"O":8,"G":6,"C":9,".":-3,"-":8,",":-3}},"B":{"d":"33,0r0,-240v69,-1,147,-8,147,60v0,30,-19,45,-43,54v29,5,53,26,53,59v0,72,-82,69,-157,67xm66,-26v45,2,95,-1,90,-41v5,-40,-42,-49,-90,-45r0,86xm66,-138v42,2,86,-1,81,-39v3,-36,-41,-38,-81,-36r0,75","w":208,"k":{"z":4,"y":4,"x":4,"w":3,"v":4,"j":2,"i":4,"g":3,"e":1,"Z":3,"Y":6,"X":4,"W":4,"V":5,"T":5,"A":5,"\/":7}},"C":{"d":"136,4v-76,0,-118,-60,-118,-125v0,-65,44,-123,119,-123v31,0,50,6,68,18r-16,24v-14,-9,-31,-15,-53,-15v-55,0,-83,46,-83,96v0,51,27,98,84,98v26,0,44,-8,58,-20r15,23v-12,12,-40,24,-74,24","w":221,"k":{"}":-1,"z":1,"y":9,"x":4,"w":8,"v":11,"u":2,"t":7,"q":1,"o":3,"i":1,"g":4,"e":5,"d":1,"]":-1,"\\":-4,"Z":-2,"U":2,"T":-3,"Q":8,"O":8,"G":6,"C":6,"?":-1,"-":10,")":-1}},"D":{"d":"33,0r0,-240r60,0v94,0,136,48,136,117v0,69,-42,123,-138,123r-58,0xm66,-27v80,6,129,-22,129,-95v0,-72,-48,-96,-129,-91r0,186","w":246,"k":{"z":3,"x":4,"i":4,"a":3,"Z":6,"Y":8,"X":7,"W":4,"V":6,"T":7,"A":12,"\/":12,".":8,",":8}},"E":{"d":"33,0r0,-240r127,0r0,28r-94,0r0,72r82,0r0,27r-82,0r0,86r96,0r0,27r-129,0","w":182,"k":{"z":2,"y":4,"w":6,"v":8,"u":6,"r":2,"q":2,"p":2,"o":4,"n":2,"m":2,"i":2,"g":4,"e":2,"d":2,"c":5,"\\":-7,"S":-2}},"F":{"d":"33,0r0,-240r129,0r0,28r-96,0r0,73r83,0r0,27r-83,0r0,112r-33,0","w":177,"k":{"z":10,"y":4,"x":11,"w":2,"v":6,"u":9,"s":4,"r":7,"q":4,"p":7,"o":4,"n":7,"m":7,"i":4,"g":5,"e":5,"d":6,"c":5,"a":8,"\\":-7,"Q":2,"O":2,"M":5,"J":1,"G":2,"C":2,"A":18,"?":-1,";":4,":":4,"\/":15,".":21,",":21}},"G":{"d":"139,4v-77,0,-121,-61,-121,-125v0,-65,45,-123,123,-123v32,0,57,7,76,22r-16,24v-18,-14,-36,-19,-61,-19v-60,0,-87,46,-87,96v0,51,27,98,87,98v25,0,44,-6,55,-14r0,-63r-50,0r0,-27r83,0r0,107v-18,14,-48,24,-89,24","w":254,"k":{"z":3,"y":8,"x":5,"w":5,"v":7,"u":3,"r":1,"p":1,"n":1,"m":1,"\\":4,"Z":3,"Y":7,"X":2,"W":5,"V":7,"U":2,"T":7,"A":1,"\/":7}},"H":{"d":"33,0r0,-240r33,0r0,100r130,0r0,-100r33,0r0,240r-33,0r0,-112r-130,0r0,112r-33,0","w":262,"k":{"i":4}},"I":{"d":"36,0r0,-240r32,0r0,240r-32,0","w":104,"k":{"w":4,"v":4,"i":6,"g":4}},"J":{"d":"72,4v2,51,-35,74,-81,62r5,-28v25,9,43,-4,43,-39r0,-239r33,0r0,244","w":105,"k":{"w":4,"v":4,"i":4,"g":2}},"K":{"d":"33,0r0,-240r33,0r0,114r94,-114r38,0r-95,113r101,127r-40,0r-98,-124r0,124r-33,0","w":209,"k":{"y":12,"w":8,"v":9,"u":9,"t":8,"s":5,"r":4,"q":7,"p":4,"o":8,"n":4,"m":4,"j":2,"i":6,"g":8,"f":4,"e":10,"d":7,"c":7,"a":4,"\\":-7,"Q":12,"O":12,"G":10,"C":12,"@":4,"?":-1,"-":18}},"L":{"d":"34,0r0,-240r32,0r0,213r94,0r0,27r-126,0","w":173,"k":{"y":14,"x":4,"w":12,"v":17,"u":5,"t":8,"s":4,"q":4,"o":5,"j":4,"i":4,"g":4,"f":4,"e":6,"d":6,"c":6,"\\":12,"Y":23,"W":18,"V":22,"U":7,"T":21,"Q":13,"O":13,"G":6,"C":10,"?":5,".":-3,"-":21,",":-3}},"M":{"d":"18,0r33,-240r31,0r73,204v20,-67,49,-138,72,-204r31,0r32,240r-33,0r-24,-184r-64,184r-32,0r-66,-184r-22,184r-31,0","w":308,"k":{"y":6,"w":4,"v":4,"u":4,"t":3,"s":1,"i":2,"g":2,"\\":4,"Y":8,"W":4,"V":4,"U":2,"T":4,"S":1,"Q":2,"O":2,"G":4,"C":5,"?":3,"-":3}},"N":{"d":"33,0r0,-240r32,0r132,191v-4,-53,-1,-132,-2,-191r30,0r0,240r-30,0r-133,-195r1,195r-30,0","w":258,"k":{"u":4}},"O":{"d":"138,4v-75,0,-120,-58,-120,-124v0,-66,44,-124,119,-124v75,0,119,58,119,124v0,66,-43,124,-118,124xm137,-23v55,0,85,-45,85,-97v0,-52,-29,-97,-84,-97v-55,0,-85,45,-85,97v0,52,29,97,84,97","w":274,"k":{"z":4,"x":4,"i":4,"a":4,"\\":4,"Z":6,"Y":8,"X":10,"W":4,"V":6,"U":2,"T":5,"S":5,"M":2,"A":7,"?":4,"\/":15,".":11,",":11}},"P":{"d":"33,0r0,-240v75,-4,150,0,150,71v0,57,-49,79,-117,74r0,95r-33,0xm66,-121v47,3,88,-6,84,-47v4,-36,-37,-49,-84,-45r0,92","w":198,"k":{"u":5,"s":3,"r":2,"q":6,"p":2,"o":7,"n":2,"m":2,"i":13,"g":4,"e":10,"d":8,"c":9,"a":4,"\\":-3,"Z":7,"X":5,"V":2,"M":8,"A":23,"@":4,"\/":28,".":40,"-":6,",":40}},"Q":{"d":"265,47v-49,25,-94,11,-135,-43v-70,-4,-112,-61,-112,-124v0,-66,44,-124,119,-124v145,0,158,220,29,245v18,31,59,41,87,22xm137,-23v55,0,85,-45,85,-97v0,-52,-29,-97,-84,-97v-55,0,-85,45,-85,97v0,52,29,97,84,97","w":274,"k":{"x":4,"j":-1,"a":2,"\\":4,"Z":7,"Y":11,"X":10,"W":2,"V":6,"U":2,"T":5,"S":3,"M":2,"J":-14,"A":7,"?":4,".":11,",":11}},"R":{"d":"33,0r0,-240v72,-4,150,-1,150,65v0,41,-31,58,-65,64v25,23,59,79,83,111r-38,0v-25,-27,-60,-112,-97,-108r0,108r-33,0xm66,-134v43,3,88,-2,84,-40v4,-37,-41,-42,-84,-39r0,79","w":208,"k":{"y":4,"w":4,"v":4,"u":6,"q":3,"o":4,"j":3,"i":1,"g":6,"e":6,"d":4,"c":6,"Y":4,"W":3,"V":3,"U":4,"T":3,"Q":4,"O":4,"J":1,"@":3,"?":5,"-":11}},"S":{"d":"54,-183v7,58,110,44,110,121v0,39,-32,66,-80,66v-37,0,-60,-15,-69,-24r16,-23v5,5,23,20,54,20v28,0,47,-18,47,-38v0,-57,-110,-49,-110,-121v0,-40,33,-62,71,-62v36,0,57,13,65,19r-15,24v-15,-18,-94,-27,-89,18","w":180,"k":{"z":2,"y":6,"x":3,"w":4,"v":4,"Y":3,"W":2,"V":2,"U":2,"@":-3,"\/":4,"-":3}},"T":{"d":"75,0r0,-212r-68,0r0,-28r168,0r0,28r-68,0r0,212r-32,0","w":181,"k":{"}":-1,"z":22,"y":23,"x":21,"w":21,"v":17,"u":21,"t":7,"s":23,"r":18,"q":23,"p":18,"o":24,"n":18,"m":18,"j":3,"i":7,"g":24,"f":6,"e":26,"d":22,"c":26,"a":28,"]":-1,"\\":-11,"Y":-7,"X":-5,"W":-7,"V":-6,"T":-6,"S":1,"Q":5,"O":5,"M":4,"G":6,"C":4,"A":15,"@":15,"?":-5,";":17,":":17,"\/":24,".":29,"-":18,",":29}},"U":{"d":"126,4v-125,0,-89,-134,-94,-244r32,0v8,84,-32,220,63,217v94,-3,52,-133,61,-217r31,0r0,147v0,60,-30,97,-93,97","w":250,"k":{"z":4,"y":4,"x":4,"w":4,"v":4,"u":4,"t":4,"s":4,"r":4,"p":4,"o":4,"n":4,"m":4,"l":2,"j":5,"i":4,"g":5,"e":4,"d":4,"c":4,"a":4,"S":5,"Q":2,"O":2,"M":2,"J":3,"G":1,"A":7,"?":1,"\/":19,".":7,",":7,"!":1}},"V":{"d":"98,0r-92,-240r35,0r74,203r72,-203r32,0r-89,240r-32,0","w":225,"k":{"z":10,"y":4,"x":8,"w":4,"v":4,"u":12,"t":1,"s":15,"r":12,"q":15,"p":12,"o":17,"n":12,"m":12,"j":7,"i":4,"g":18,"f":4,"e":20,"d":17,"c":20,"a":14,"\\":-4,"Y":-4,"X":-3,"W":-4,"T":-6,"Q":6,"O":6,"M":5,"J":3,"G":7,"C":4,"A":12,"@":12,"?":-1,";":12,":":12,"\/":25,".":33,"-":15,",":33,"!":1}},"W":{"d":"73,0r-66,-240r35,0r48,196r54,-196r33,0r54,195v10,-60,33,-136,47,-195r32,0r-66,240r-29,0r-56,-202v-13,61,-40,141,-57,202r-29,0","w":317,"k":{"z":6,"y":4,"x":5,"w":2,"v":4,"u":8,"s":8,"r":9,"q":8,"p":9,"o":13,"n":9,"m":9,"j":5,"i":4,"g":13,"e":13,"d":12,"c":17,"a":12,"\\":-4,"Y":-4,"W":-4,"V":-4,"T":-7,"Q":2,"O":4,"M":4,"G":4,"C":2,"A":15,"@":8,"?":-1,";":6,":":6,"\/":23,".":29,"-":11,",":29}},"X":{"d":"9,0r76,-124r-72,-116r37,0r55,90r52,-90r34,0r-70,116r77,124r-37,0r-61,-98r-58,98r-33,0","w":207,"k":{"y":8,"w":5,"v":5,"u":4,"t":5,"q":4,"o":8,"j":4,"g":9,"f":4,"e":8,"d":8,"c":8,"a":3,"Q":11,"O":10,"G":9,"C":6,"@":4,"-":15}},"Y":{"d":"86,0r0,-91r-80,-149r36,0r62,119r62,-119r31,0r-78,149r0,91r-33,0","w":202,"k":{"z":17,"y":13,"x":12,"w":12,"v":8,"u":19,"t":6,"s":23,"r":17,"q":23,"p":17,"o":23,"n":17,"m":17,"j":4,"i":4,"g":25,"f":6,"e":26,"d":23,"c":27,"a":22,"\\":-4,"Y":-1,"W":-4,"V":-4,"T":-7,"S":4,"Q":11,"O":8,"M":8,"J":4,"G":9,"C":7,"A":19,"@":20,"?":-1,";":17,":":17,"\/":31,".":36,"-":19,",":36}},"Z":{"d":"17,0r0,-22r126,-191r-121,0r0,-27r160,0r0,21r-128,192r132,0r0,27r-169,0","w":202,"k":{"y":9,"w":10,"v":8,"u":6,"t":5,"s":4,"q":5,"o":8,"j":1,"i":3,"g":7,"f":3,"e":7,"d":5,"c":6,"a":1,"T":1,"Q":6,"O":6,"M":3,"G":8,"C":10,"A":1,"?":-1,"-":11}},"[":{"d":"28,58r0,-317r76,0r0,23r-47,0r0,271r47,0r0,23r-76,0","w":112,"k":{"y":-9,"j":-22,"T":-1,"J":-22}},"\\":{"d":"117,58r-115,-317r29,0r115,317r-29,0","k":{"z":1,"y":-1,"x":4,"w":14,"v":18,"u":9,"t":8,"s":5,"r":3,"q":4,"o":6,"n":3,"m":3,"l":5,"k":3,"j":-19,"i":5,"h":3,"g":-1,"f":8,"e":6,"d":6,"c":5,"b":4,"Y":20,"W":18,"V":20,"U":14,"T":15,"Q":14,"O":14,"J":-23,"G":11,"C":14}},"]":{"d":"9,58r0,-23r46,0r0,-271r-46,0r0,-23r76,0r0,317r-76,0","w":112},"^":{"d":"21,-104r73,-136r22,0r73,136r-28,0r-56,-104r-56,104r-28,0","w":210},"_":{"d":"0,59r0,-25r145,0r0,25r-145,0","w":144},"`":{"d":"101,-194r-49,-46r44,0r32,46r-27,0","w":180},"a":{"d":"116,-21v-22,36,-103,34,-101,-22v2,-48,53,-61,100,-60v10,-57,-49,-61,-79,-30r-15,-21v34,-35,124,-36,124,35v0,37,-2,90,4,119r-30,0v-1,-5,-3,-16,-3,-21xm47,-44v4,40,55,22,68,0r0,-37v-37,-1,-71,7,-68,37","w":172,"k":{"y":2,"v":2,"u":1,"t":1,"g":1,"\\":18,"?":3}},"b":{"d":"175,-87v0,79,-88,111,-148,78r0,-250r31,0r0,100v48,-43,117,-4,117,72xm58,-26v44,18,90,-15,85,-61v8,-55,-52,-83,-85,-48r0,109","w":189,"k":{"\\":11,"\/":11,".":4,",":4}},"c":{"d":"95,4v-52,0,-81,-42,-81,-91v0,-84,87,-109,135,-74r-13,22v-9,-6,-20,-13,-40,-13v-34,0,-50,28,-50,65v0,36,15,66,50,66v21,0,37,-10,42,-14r11,22v-7,6,-23,17,-54,17","w":159,"k":{"}":-1,"z":-2,"y":-2,"w":-2,"v":-2,"t":-2,"o":2,"f":-4,"a":-2,"]":-1,"\\":3,"?":-1,";":-4,":":-4,".":-1,",":-2,")":-1,"!":-2}},"d":{"d":"135,-20v-44,50,-121,18,-121,-66v0,-74,66,-114,120,-77r0,-96r30,0v2,85,-6,182,5,259r-31,0v-1,-4,-3,-14,-3,-20xm46,-87v-7,62,58,86,88,42r0,-92v-35,-33,-94,-8,-88,50","w":190,"k":{"g":1,"\/":3}},"e":{"d":"98,4v-55,0,-84,-40,-84,-92v0,-51,33,-89,79,-89v48,-1,75,38,69,92r-116,0v1,35,16,64,53,64v24,0,39,-11,47,-15r12,23v-9,6,-28,17,-60,17xm48,-108r84,0v-1,-23,-11,-45,-39,-45v-26,0,-41,19,-45,45","w":178,"k":{"x":3,"f":-1,"\\":14,"\/":4}},"f":{"d":"35,0r0,-149r-28,0r0,-24r28,0v-13,-67,40,-106,96,-85r-8,25v-34,-14,-68,10,-57,60r43,0r0,24r-43,0r0,149r-31,0","w":117,"k":{"}":-21,"y":-1,"w":-3,"v":-3,"u":5,"s":3,"r":5,"q":2,"p":5,"o":3,"n":5,"m":5,"g":7,"e":9,"d":4,"c":6,"a":4,"]":-21,"\\":-22,"?":-10,"\/":14,".":16,"-":5,",":16,")":-21,"!":-2}},"g":{"d":"86,85v-41,0,-71,-14,-71,-48v0,-19,13,-34,30,-44v-22,-9,-18,-46,3,-54v-54,-29,-34,-122,40,-116v26,3,55,5,85,4r0,23r-26,0v35,48,-9,113,-78,97v-21,13,-11,26,16,27v37,1,89,0,89,53v0,36,-41,58,-88,58xm88,62v33,0,55,-13,55,-33v-1,-37,-47,-23,-76,-30v-32,19,-32,64,21,63xm88,-74v25,0,40,-17,40,-40v0,-23,-15,-40,-40,-40v-25,0,-40,17,-40,40v0,23,15,40,40,40","w":183,"k":{"y":-4,"u":1,"t":-3,"j":-8,"g":2,"f":-2,"\\":17,"?":5,"\/":-4,".":5,"-":5,",":4,"!":1}},"h":{"d":"27,0r0,-259r31,0r0,110v8,-10,26,-28,56,-28v80,1,43,107,51,177r-31,0r0,-117v0,-21,-7,-34,-29,-34v-25,0,-43,25,-47,30r0,121r-31,0","w":191,"k":{"y":2,"v":4,"\\":14,"\/":3}},"i":{"d":"46,-204v-12,0,-21,-9,-21,-21v0,-12,9,-21,21,-21v12,0,21,9,21,21v0,12,-9,21,-21,21xm31,0r0,-173r31,0r0,173r-31,0","w":92,"k":{"\/":3}},"j":{"d":"60,21v4,45,-30,71,-73,59r5,-25v24,8,37,-6,37,-39r0,-189r31,0r0,194xm44,-204v-12,0,-21,-9,-21,-21v0,-12,9,-21,21,-21v12,0,22,9,22,21v0,12,-10,21,-22,21","w":88},"k":{"d":"27,0r0,-259r31,0r0,162r70,-76r35,0r-70,77r73,96r-36,0r-72,-96r0,96r-31,0","w":172,"k":{"z":-2,"q":3,"o":4,"g":4,"e":4,"d":4,"c":4,"\\":4,"@":3,"?":3,"-":12}},"l":{"d":"29,0r0,-259r31,0r0,259r-31,0","w":89,"k":{"p":3,"l":-3,"g":2}},"m":{"d":"28,0r0,-173r31,0r0,24v8,-9,23,-28,53,-28v25,0,38,12,44,28v24,-40,105,-38,105,26r0,123r-31,0r0,-117v0,-20,-6,-34,-27,-34v-20,0,-35,16,-43,26r0,125r-31,0r0,-117v0,-21,-7,-34,-26,-34v-24,0,-40,25,-44,30r0,121r-31,0","w":287,"k":{"w":2,"v":2,"\\":14,"\/":3}},"n":{"d":"28,0r0,-173r31,0r0,24v27,-44,107,-35,107,26r0,123r-31,0r0,-117v2,-52,-62,-34,-76,-4r0,121r-31,0","w":192,"k":{"y":2,"w":2,"v":2,"\\":14,"\/":3}},"o":{"d":"95,4v-59,0,-81,-49,-81,-90v0,-41,21,-91,80,-91v59,0,84,49,84,90v0,41,-24,91,-83,91xm96,-21v34,0,49,-29,49,-65v0,-36,-17,-66,-51,-66v-35,0,-48,29,-48,65v0,36,15,66,50,66","w":191,"k":{"z":2,"y":2,"x":6,"v":4,"f":2,"\\":11,"\/":11,".":4,",":4}},"p":{"d":"28,79r0,-252r31,0r0,18v41,-45,129,-15,120,68v7,74,-72,113,-120,77r0,89r-31,0xm59,-36v31,31,87,10,87,-50v0,-37,-14,-65,-45,-65v-23,0,-37,17,-42,23r0,92","w":192,"k":{"x":1,"v":2,"f":1,"\\":13,"\/":7,".":3,",":3}},"q":{"d":"131,78r0,-92v-45,42,-117,3,-117,-72v0,-54,38,-91,88,-91v35,0,56,10,60,12r0,243r-31,0xm95,-22v19,0,33,-14,36,-17r0,-108v-40,-17,-85,13,-85,61v0,36,14,64,49,64","w":190,"k":{"x":2,"w":3,"v":3,"u":3,"p":3,"l":3,"k":5,"j":-1,"h":5,"b":5,"\\":14}},"r":{"d":"28,0r0,-173r31,0r0,26v5,-17,39,-38,65,-27r-8,29v-24,-14,-58,20,-57,30r0,115r-31,0","w":127,"k":{"y":-5,"x":-3,"w":-4,"v":-4,"t":-4,"k":-1,"h":-1,"g":3,"f":-4,"e":2,"c":3,"b":-1,"?":3,";":-3,":":-3,"\/":18,".":22,"-":6,",":22}},"s":{"d":"47,-130v6,37,93,34,86,82v8,56,-89,65,-119,36r12,-23v9,14,80,24,77,-9v-3,-34,-85,-35,-85,-85v0,-28,22,-48,57,-48v29,0,46,11,52,15r-14,22v-9,-12,-71,-21,-66,10","k":{"y":2,"g":3,"b":3,"a":-2,"\\":14,"\/":5,"-":8}},"t":{"d":"82,4v-69,2,-39,-93,-45,-153r-28,0r0,-24r28,0r0,-50r30,0r0,50r44,0r0,24r-44,0r0,102v-6,31,32,27,44,18r9,23v-5,4,-19,10,-38,10","w":128,"k":{"w":-3,"v":-3,"u":1,"g":6,"f":2,"e":2,"c":2,"a":-3,"\\":7,".":-4,"-":6,",":-4}},"u":{"d":"78,4v-81,0,-44,-107,-52,-177r31,0r0,117v0,21,7,33,29,33v24,0,43,-25,47,-30r0,-120r31,0r0,134v0,16,1,31,3,39r-30,0v-1,-4,-3,-17,-3,-25v-8,11,-26,29,-56,29","w":192,"k":{"\\":10,"\/":5}},"v":{"d":"71,0r-66,-173r34,0r47,133r46,-133r31,0r-63,173r-29,0","w":169,"k":{"y":-4,"w":-4,"v":-4,"t":-4,"q":3,"o":4,"g":4,"f":-4,"e":3,"d":2,"c":3,"\\":8,"?":1,";":-1,":":-1,"\/":12,".":19,"-":1,",":19}},"w":{"d":"57,0r-51,-173r33,0r36,127r38,-127r29,0r39,127r36,-127r30,0r-51,173r-28,0r-42,-131r-42,131r-27,0","w":254,"k":{"y":-3,"w":-4,"v":-4,"t":-4,"q":2,"g":4,"f":-4,"e":2,"d":2,"c":2,"\\":9,"?":3,";":-1,":":-1,"\/":12,".":17,",":17}},"x":{"d":"8,0r59,-90r-56,-83r34,0r40,59r37,-59r32,0r-54,81r63,92r-35,0r-46,-69r-43,69r-31,0","w":169,"k":{"x":-1,"q":4,"o":6,"g":4,"f":3,"e":6,"d":4,"c":5,"\\":13,"@":3,"\/":3,"-":12}},"y":{"d":"94,22v-12,39,-39,70,-91,60r5,-25v41,10,54,-26,64,-58r-65,-172r34,0r48,133r46,-133r32,0","w":172,"k":{"y":-3,"w":-4,"v":-4,"t":-3,"q":4,"p":1,"o":2,"l":2,"k":3,"h":3,"g":4,"f":-4,"e":3,"d":3,"b":3,"\\":10,"?":4,";":-1,":":-1,"\/":18,".":22,",":22,"!":1}},"z":{"d":"15,0r0,-18r85,-131r-80,0r0,-24r118,0r0,19r-86,130r87,0r0,24r-124,0","w":154,"k":{"w":-1,"v":-1,"o":2,"k":1,"g":6,"e":4,"d":4,"c":4,"\\":7,".":1,"-":4,",":2}},"{":{"d":"123,58v-39,1,-71,2,-73,-40v-2,-49,13,-110,-40,-109r0,-23v51,1,39,-58,40,-106v2,-41,34,-40,73,-39r0,23v-26,-2,-45,0,-43,28v3,48,5,99,-36,105v43,6,38,62,36,111v-1,30,17,28,43,27r0,23","w":132,"k":{"y":-9,"j":-22,"T":-1,"J":-22}},"|":{"d":"39,90r0,-360r25,0r0,360r-25,0","w":102},"}":{"d":"9,58r0,-23v26,2,44,0,44,-28v0,-47,-9,-105,35,-109v-42,-6,-38,-59,-35,-107v2,-29,-18,-28,-44,-27r0,-23v39,-1,71,-2,73,40v2,48,-12,106,40,105r0,23v-52,-1,-39,60,-40,109v-2,42,-34,42,-73,40","w":132},"~":{"d":"143,-63v-48,0,-76,-44,-110,-10r-14,-19v10,-10,27,-22,48,-22v41,0,75,44,112,10r14,18v-13,13,-31,23,-50,23","w":211},"\u00a0":{"w":78}}});
5 public/robots.txt
@@ -0,0 +1,5 @@
+# See http://www.robotstxt.org/wc/norobots.html for documentation on how to use the robots.txt file
+#
+# To ban all spiders from the entire site uncomment the next two lines:
+# User-Agent: *
+# Disallow: /
BIN public/stylesheets/.DS_Store
Binary file not shown.
0 public/stylesheets/.gitkeep
No changes.
325 public/stylesheets/application.css
@@ -0,0 +1,325 @@
+/* LAYOUT */
+/* ----------------------------------------- */
+
+html {
+ background-image: url(../images/bg.jpg);
+ background-repeat: repeat;
+}
+
+body {
+ background-image:url(../images/blue-pattern.jpg);
+ background-position: bottom;
+ background-repeat: repeat-x;
+ background-color:transparent;
+ color:#656565;
+ font-family:Tahoma, sans-serif;
+ font-size:13px;
+ height:367px;
+}
+
+#wrapper {
+ width:1060px;
+ margin:0 auto;
+ padding-top:110px;
+ background-image:url(../images/blue-bg.jpg);
+ background-position: top;
+ background-repeat: no-repeat;
+ height:250px;
+}
+
+h2 {
+ text-align: center;
+ font-size:2.3em;
+ line-height:1;
+ margin-bottom:27px;
+ padding-top:32px;
+
+}
+
+p, legend {
+ text-align: center;
+ font-size:1.6em;
+}
+
+a:link {
+ color: #2a6888;
+ text-decoration: underline;
+}
+
+a:visited {
+ color: #999;
+}
+
+a:hover,a:focus {
+ color: #2a6888;
+ text-decoration: none;
+}
+
+a:active {
+ color: #2a6888;
+ text-decoration: underline;
+}
+
+#logo {
+ width:154px;
+ height:50px;
+ margin:auto;
+ margin-bottom:20px;
+ text-align:center;
+}
+
+#page-container {
+ width:884px;
+ margin:0 auto;
+}
+
+.jcarousel-container {
+ background-image:url(../images/page.png);
+ background-repeat: no-repeat;
+ position: relative;
+ width: 740px;
+ height: 331px;
+ padding: 20px;
+ padding-left:0;
+ padding-right:0;
+ margin:0 auto;
+ z-index:3;
+}
+
+.shadow {
+ background-image:url(../images/shadow2.png);
+ background-repeat: no-repeat;
+ width:884px;
+ height:120px;
+ position:relative;
+ margin:0 auto;
+ z-index:1;
+ margin-top:-55px;
+}
+
+.content {
+ height:315px;
+ display: block;
+}
+
+a.control, a.control2 {
+ display: block;
+ width:38px;
+ height:15px;
+ text-indent: -9999px;
+ outline: 0;
+ clear:both;
+ float:right;
+ margin-right:20px;
+}
+
+a.control {
+ background-image:url(../images/blue-arrow2.png);
+ background-repeat: no-repeat;
+}
+
+a.control2 {
+ background-image:url(../images/blue-arrow.png);
+ background-repeat: no-repeat;
+}
+
+.jcarousel-clip {
+ z-index: 2;
+ padding: 0;
+ margin: 0;
+ overflow: hidden;
+ position: relative;
+ width: 740px;
+ height: 331px;
+}
+
+.jcarousel-list {
+ z-index: 1;
+ overflow: hidden;
+ position: relative;
+ top: 0;
+ left: 0;
+ margin: 0;
+ padding: 0;
+}
+
+.jcarousel-list li,
+.jcarousel-item {
+ float: left;
+ list-style: none;
+ margin:0;
+}
+.jcarousel-next {
+ z-index: 3;
+ display: none;
+}
+
+.jcarousel-prev {
+ z-index: 3;
+ display: none;
+}
+
+
+.jcarousel-item {
+ width: 740px;
+ height: 331px;
+
+}
+.contact {
+ width:280px;
+ padding:30px 0 0 60px;
+ float:left;
+}
+
+div.slider {
+ clear:both;
+ position:relative;
+ margin:0 0 6px;
+ display:block;
+}
+
+label {
+ cursor:pointer;
+ display:block;
+ font-size:12px;
+ color:#2a6888;
+}
+
+input.text-input {
+ border:0;
+ background-image:url(../images/inputbg.png);
+ width:241px;
+ height:15px;
+ padding:10px;
+ background-color: transparent;
+ font-family:Tahoma, sans-serif;
+ color:#656565;
+ font-size:12px;
+}
+
+textarea {
+ border:0;
+ background-image:url(../images/textarea.png);
+ width:241px;
+ height:130px;
+ background-color: transparent;
+ font-family:Tahoma, sans-serif;
+ color:#656565;
+ font-size:12px;
+ padding:10px;
+}
+
+input#btn {
+ cursor:pointer;
+ border:none;
+ background-color:transparent;
+ background-image:url(../images/blue-send.png);
+ height:33px;
+ width:100px;
+ background-position:0 0;
+}
+
+input#btn:hover, input#btn:focus {
+ background-image:url(../images/blue-send.png);
+ background-position:0 -33px;
+ outline:0;
+}
+
+input#btn:active {
+ margin-top:0; outline:0;
+}
+
+input#btn::-moz-focus-inner, input[type="button"]::-moz-focus-inner {
+ border : 0px;
+}
+
+#authentication_form {
+ clear:both;
+ width:501px;
+ height:45px;
+ margin:0 auto;
+ position: relative;
+}
+
+#open_id_container {
+ clear:both;
+ width:501px;
+ height:45px;
+ margin:0 auto;
+ position: relative;
+}
+
+input.submit {
+ width:100px;
+ height:33px;
+ clear:both;
+ background: transparent;
+ background-image:url(../images/blue-submit.png);
+ background-repeat:no-repeat;
+ background-position: 0 0;
+ border:none;
+ text-indent: -999px;
+ line-height: 0px;
+ display: block;
+ position: relative;
+ margin: auto;
+ cursor: pointer;
+ z-index: 10;
+}
+
+input.submit:focus {
+ background-image:url(../images/blue-submit.png);
+ background-repeat:no-repeat;
+ background-position: 0 -33px;
+ outline: 0;
+ border:0;
+}
+
+input.submit::-moz-focus-inner, input[type="button"]::-moz-focus-inner {
+ border : 0px;
+}
+
+.oauth_providers, .openid_address {
+ position:relative;
+ width:auto;
+ text-align:center;
+ padding:15px 0px 15px 0px;
+}
+.oauth_providers ul {
+ display:inline-block;
+ margin:auto;
+ text-align:center;
+}
+.oauth_provider {
+ position:relative;
+ width:80px;
+ margin:0px 30px 0px 30px;
+ text-align:center;
+}
+.oauth_provider input {
+ position:relative;
+ font-size:1em;
+ margin-bottom:16px;
+ display:block;
+ margin:auto;
+}
+.oauth_provider img {
+ position:relative;
+ margin-top:-5px;
+}
+.clearfix {
+ clear:both;
+}
+input.nice{
+ width:477px;
+ height:21px;
+ border:none;
+ padding:12px;
+ color: #2a6888;
+ position: relative;
+ float:left;
+}
+legend {
+ position:relative;
+ display:inline;
+}
19 public/stylesheets/reset.css
@@ -0,0 +1,19 @@
+/* RESET */
+/* ----------------------------------------- */
+
+/* Global reset */
+/* Based upon 'reset.css' in the Yahoo! User Interface Library: http://developer.yahoo.com/yui */
+*, html, body, div, dl, dt, dd, ul, ol, li, h1, h2, h3, h4, h5, h6, pre, form, label, fieldset, input, p, blockquote, th, td { margin:0; padding:0 }
+table { border-collapse:collapse; border-spacing:0 }
+fieldset, img { border:0 }
+address, caption, cite, code, dfn, em, strong, th, var { font-style:normal; font-weight:normal }
+ol, ul, li { list-style:none }
+caption, th { text-align:left }
+h1, h2, h3, h4, h5, h6 { font-size:100%; font-weight:normal }
+q:before, q:after { content:''}
+
+/* Global reset-RESET */
+/* The below restores some sensible defaults */
+strong { font-weight: bold }
+em { font-style: italic }
+a img { border:none } /* Gets rid of IE's blue borders */
9 script/rails
@@ -0,0 +1,9 @@
+#!/usr/bin/env ruby
+# This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
+
+ENV_PATH = File.expand_path('../../config/environment', __FILE__)
+BOOT_PATH = File.expand_path('../../config/boot', __FILE__)
+APP_PATH = File.expand_path('../../config/application', __FILE__)
+
+require BOOT_PATH
+require 'rails/commands'
9 test/performance/browsing_test.rb
@@ -0,0 +1,9 @@
+require 'test_helper'
+require 'rails/performance_test_help'
+
+# Profiling results for each test method are written to tmp/performance.
+class BrowsingTest < ActionDispatch::PerformanceTest
+ def test_homepage
+ get '/'
+ end
+end
13 test/test_helper.rb
@@ -0,0 +1,13 @@
+ENV["RAILS_ENV"] = "test"
+require File.expand_path('../../config/environment', __FILE__)
+require 'rails/test_help'
+
+class ActiveSupport::TestCase
+ # Setup all fixtures in test/fixtures/*.(yml|csv) for all tests in alphabetical order.
+ #
+ # Note: You'll currently still have to declare fixtures explicitly in integration tests
+ # -- they do not yet inherit this setting
+ fixtures :all
+
+ # Add more helper methods to be used by all tests here...
+end
BIN vendor/plugins/.DS_Store
Binary file not shown.
0 vendor/plugins/.gitkeep
No changes.
18 vendor/plugins/haml/init.rb
@@ -0,0 +1,18 @@
+begin
+ require File.join(File.dirname(__FILE__), 'lib', 'haml') # From here
+rescue LoadError
+ begin
+ require 'haml' # From gem
+ rescue LoadError => e
+ # gems:install may be run to install Haml with the skeleton plugin
+ # but not the gem itself installed.
+ # Don't die if this is the case.
+ raise e unless defined?(Rake) &&
+ (Rake.application.top_level_tasks.include?('gems') ||
+ Rake.application.top_level_tasks.include?('gems:install'))
+ end
+end
+
+# Load Haml and Sass.
+# Haml may be undefined if we're running gems:install.
+Haml.init_rails(binding) if defined?(Haml)
35 vendor/plugins/open_id_authentication/CHANGELOG
@@ -0,0 +1,35 @@
+* Fake HTTP method from OpenID server since they only support a GET. Eliminates the need to set an extra route to match the server's reply. [Josh Peek]
+
+* OpenID 2.0 recommends that forms should use the field name "openid_identifier" rather than "openid_url" [Josh Peek]
+
+* Return open_id_response.display_identifier to the application instead of .endpoints.claimed_id. [nbibler]
+
+* Add Timeout protection [Rick]
+
+* An invalid identity url passed through authenticate_with_open_id will no longer raise an InvalidOpenId exception. Instead it will return Result[:missing] to the completion block.
+
+* Allow a return_to option to be used instead of the requested url [Josh Peek]
+
+* Updated plugin to use Ruby OpenID 2.x.x [Josh Peek]
+
+* Tied plugin to ruby-openid 1.1.4 gem until we can make it compatible with 2.x [DHH]
+
+* Use URI instead of regexps to normalize the URL and gain free, better matching #8136 [dkubb]
+
+* Allow -'s in #normalize_url [Rick]
+
+* remove instance of mattr_accessor, it was breaking tests since they don't load ActiveSupport. Fix Timeout test [Rick]
+
+* Throw a InvalidOpenId exception instead of just a RuntimeError when the URL can't be normalized [DHH]
+
+* Just use the path for the return URL, so extra query parameters don't interfere [DHH]
+
+* Added a new default database-backed store after experiencing trouble with the filestore on NFS. The file store is still available as an option [DHH]
+
+* Added normalize_url and applied it to all operations going through the plugin [DHH]
+
+* Removed open_id? as the idea of using the same input box for both OpenID and username has died -- use using_open_id? instead (which checks for the presence of params[:openid_url] by default) [DHH]
+
+* Added OpenIdAuthentication::Result to make it easier to deal with default situations where you don't care to do something particular for each error state [DHH]
+
+* Stop relying on root_url being defined, we can just grab the current url instead [DHH]
231 vendor/plugins/open_id_authentication/README
@@ -0,0 +1,231 @@
+OpenIdAuthentication
+====================
+
+Provides a thin wrapper around the excellent ruby-openid gem from JanRan. Be sure to install that first:
+
+ gem install ruby-openid
+
+To understand what OpenID is about and how it works, it helps to read the documentation for lib/openid/consumer.rb
+from that gem.
+
+The specification used is http://openid.net/specs/openid-authentication-2_0.html.
+
+
+Prerequisites
+=============
+
+OpenID authentication uses the session, so be sure that you haven't turned that off. It also relies on a number of
+database tables to store the authentication keys. So you'll have to run the migration to create these before you get started:
+
+ rake open_id_authentication:db:create
+
+Or, use the included generators to install or upgrade:
+
+ ./script/generate open_id_authentication_tables MigrationName
+ ./script/generate upgrade_open_id_authentication_tables MigrationName
+
+Alternatively, you can use the file-based store, which just relies on on tmp/openids being present in RAILS_ROOT. But be aware that this store only works if you have a single application server. And it's not safe to use across NFS. It's recommended that you use the database store if at all possible. To use the file-based store, you'll also have to add this line to your config/environment.rb:
+
+ OpenIdAuthentication.store = :file
+
+This particular plugin also relies on the fact that the authentication action allows for both POST and GET operations.
+If you're using RESTful authentication, you'll need to explicitly allow for this in your routes.rb.
+
+The plugin also expects to find a root_url method that points to the home page of your site. You can accomplish this by using a root route in config/routes.rb:
+
+ map.root :controller => 'articles'
+
+This plugin relies on Rails Edge revision 6317 or newer.
+
+
+Example
+=======
+
+This example is just to meant to demonstrate how you could use OpenID authentication. You might well want to add
+salted hash logins instead of plain text passwords and other requirements on top of this. Treat it as a starting point,
+not a destination.
+
+Note that the User model referenced in the simple example below has an 'identity_url' attribute. You will want to add the same or similar field to whatever
+model you are using for authentication.
+
+Also of note is the following code block used in the example below:
+
+ authenticate_with_open_id do |result, identity_url|
+ ...
+ end
+
+In the above code block, 'identity_url' will need to match user.identity_url exactly. 'identity_url' will be a string in the form of 'http://example.com' -
+If you are storing just 'example.com' with your user, the lookup will fail.
+
+There is a handy method in this plugin called 'normalize_url' that will help with validating OpenID URLs.
+
+ OpenIdAuthentication.normalize_url(user.identity_url)
+
+The above will return a standardized version of the OpenID URL - the above called with 'example.com' will return 'http://example.com/'
+It will also raise an InvalidOpenId exception if the URL is determined to not be valid.
+Use the above code in your User model and validate OpenID URLs before saving them.
+
+config/routes.rb
+
+ map.root :controller => 'articles'
+ map.resource :session
+
+
+app/views/sessions/new.erb
+
+ <% form_tag(session_url) do %>
+ <p>
+ <label for="name">Username:</label>
+ <%= text_field_tag "name" %>
+ </p>
+
+ <p>
+ <label for="password">Password:</label>
+ <%= password_field_tag %>
+ </p>
+
+ <p>
+ ...or use:
+ </p>
+
+ <p>
+ <label for="openid_identifier">OpenID:</label>
+ <%= text_field_tag "openid_identifier" %>
+ </p>
+
+ <p>
+ <%= submit_tag 'Sign in', :disable_with => "Signing in&hellip;" %>
+ </p>
+ <% end %>
+
+app/controllers/sessions_controller.rb
+ class SessionsController < ApplicationController
+ def create
+ if using_open_id?
+ open_id_authentication
+ else
+ password_authentication(params[:name], params[:password])
+ end
+ end
+
+
+ protected
+ def password_authentication(name, password)
+ if @current_user = @account.users.authenticate(params[:name], params[:password])
+ successful_login
+ else
+ failed_login "Sorry, that username/password doesn't work"
+ end
+ end
+
+ def open_id_authentication
+ authenticate_with_open_id do |result, identity_url|
+ if result.successful?
+ if @current_user = @account.users.find_by_identity_url(identity_url)
+ successful_login
+ else
+ failed_login "Sorry, no user by that identity URL exists (#{identity_url})"
+ end
+ else
+ failed_login result.message
+ end
+ end
+ end
+
+
+ private
+ def successful_login
+ session[:user_id] = @current_user.id
+ redirect_to(root_url)
+ end
+
+ def failed_login(message)
+ flash[:error] = message
+ redirect_to(new_session_url)
+ end
+ end
+
+
+
+If you're fine with the result messages above and don't need individual logic on a per-failure basis,
+you can collapse the case into a mere boolean:
+
+ def open_id_authentication
+ authenticate_with_open_id do |result, identity_url|
+ if result.successful? && @current_user = @account.users.find_by_identity_url(identity_url)
+ successful_login
+ else
+ failed_login(result.message || "Sorry, no user by that identity URL exists (#{identity_url})")
+ end
+ end
+ end
+
+
+Simple Registration OpenID Extension
+====================================
+
+Some OpenID Providers support this lightweight profile exchange protocol. See more: http://www.openidenabled.com/openid/simple-registration-extension
+
+You can support it in your app by changing #open_id_authentication
+
+ def open_id_authentication(identity_url)
+ # Pass optional :required and :optional keys to specify what sreg fields you want.
+ # Be sure to yield registration, a third argument in the #authenticate_with_open_id block.
+ authenticate_with_open_id(identity_url,
+ :required => [ :nickname, :email ],
+ :optional => :fullname) do |result, identity_url, registration|
+ case result.status
+ when :missing
+ failed_login "Sorry, the OpenID server couldn't be found"
+ when :invalid
+ failed_login "Sorry, but this does not appear to be a valid OpenID"
+ when :canceled
+ failed_login "OpenID verification was canceled"
+ when :failed
+ failed_login "Sorry, the OpenID verification failed"
+ when :successful
+ if @current_user = @account.users.find_by_identity_url(identity_url)
+ assign_registration_attributes!(registration)
+
+ if current_user.save
+ successful_login
+ else
+ failed_login "Your OpenID profile registration failed: " +
+ @current_user.errors.full_messages.to_sentence
+ end
+ else
+ failed_login "Sorry, no user by that identity URL exists"
+ end
+ end
+ end
+ end
+
+ # registration is a hash containing the valid sreg keys given above
+ # use this to map them to fields of your user model
+ def assign_registration_attributes!(registration)
+ model_to_registration_mapping.each do |model_attribute, registration_attribute|
+ unless registration[registration_attribute].blank?
+ @current_user.send("#{model_attribute}=", registration[registration_attribute])
+ end
+ end
+ end
+
+ def model_to_registration_mapping
+ { :login => 'nickname', :email => 'email', :display_name => 'fullname' }
+ end
+
+Attribute Exchange OpenID Extension
+===================================
+
+Some OpenID providers also support the OpenID AX (attribute exchange) protocol for exchanging identity information between endpoints. See more: http://openid.net/specs/openid-attribute-exchange-1_0.html
+
+Accessing AX data is very similar to the Simple Registration process, described above -- just add the URI identifier for the AX field to your :optional or :required parameters. For example:
+
+ authenticate_with_open_id(identity_url,
+ :required => [ :email, 'http://schema.openid.net/birthDate' ]) do |result, identity_url, registration|
+
+This would provide the sreg data for :email, and the AX data for 'http://schema.openid.net/birthDate'
+
+
+
+Copyright (c) 2007 David Heinemeier Hansson, released under the MIT license
22 vendor/plugins/open_id_authentication/Rakefile
@@ -0,0 +1,22 @@
+require 'rake'
+require 'rake/testtask'
+require 'rake/rdoctask'
+
+desc 'Default: run unit tests.'
+task :default => :test
+
+desc 'Test the open_id_authentication plugin.'
+Rake::TestTask.new(:test) do |t|
+ t.libs << 'lib'