diff --git a/.components b/.components
new file mode 100644
index 0000000..aa20ddc
--- /dev/null
+++ b/.components
@@ -0,0 +1,8 @@
+---
+:admin_renderer: erb
+:test: shoulda
+:script: jquery
+:mock: rr
+:renderer: erb
+:stylesheet: none
+:orm: mongoid
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..85df2d0
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,7 @@
+.DS_Store
+log/**/*
+tmp/**/*
+bin/*
+vendor/gems/*
+!vendor/gems/cache/
+.sass-cache/*
\ No newline at end of file
diff --git a/Gemfile b/Gemfile
new file mode 100644
index 0000000..e0fa9fd
--- /dev/null
+++ b/Gemfile
@@ -0,0 +1,30 @@
+source :rubygems
+
+# Server requirements
+# gem 'thin' or mongrel
+
+# Project requirements
+gem 'rake'
+gem 'rack-flash'
+gem 'httparty'
+
+# Component requirements
+gem 'bcrypt-ruby', :require => "bcrypt"
+gem 'erubis', "~> 2.7.0"
+gem 'SystemTimer', :require => "system_timer"
+gem 'mongoid'
+gem 'bson_ext', :require => "mongo"
+
+# Test requirements
+gem 'faker', :group => "test"
+gem 'machinist', :group => "test"
+gem 'rack-test', :require => "rack/test", :group => "test"
+gem 'rr', :group => "test"
+gem 'shoulda', :group => "test"
+gem 'shoulda-activemodel', :group => "test"
+
+
+# Padrino
+gem 'padrino', "0.9.29"
+# Padrino EDGE
+# gem 'padrino', :git => "git://github.com/padrino/padrino-framework.git"
\ No newline at end of file
diff --git a/Gemfile.lock b/Gemfile.lock
new file mode 100644
index 0000000..21b29b7
--- /dev/null
+++ b/Gemfile.lock
@@ -0,0 +1,109 @@
+GEM
+ remote: http://rubygems.org/
+ specs:
+ SystemTimer (1.2.3)
+ activemodel (3.0.7)
+ activesupport (= 3.0.7)
+ builder (~> 2.1.2)
+ i18n (~> 0.5.0)
+ activesupport (3.0.7)
+ bcrypt-ruby (2.1.4)
+ bson (1.3.1)
+ bson_ext (1.3.1)
+ builder (2.1.2)
+ crack (0.1.8)
+ diff-lcs (1.1.2)
+ erubis (2.7.0)
+ faker (0.9.5)
+ i18n (~> 0.4)
+ grit (2.4.1)
+ diff-lcs (~> 1.1)
+ mime-types (~> 1.15)
+ http_router (0.7.9)
+ rack (>= 1.0.0)
+ url_mount (~> 0.2.1)
+ httparty (0.6.1)
+ crack (= 0.1.8)
+ i18n (0.5.0)
+ machinist (1.0.6)
+ mail (2.2.19)
+ activesupport (>= 2.3.6)
+ i18n (>= 0.4.0)
+ mime-types (~> 1.16)
+ treetop (~> 1.4.8)
+ mime-types (1.16)
+ mongo (1.3.1)
+ bson (>= 1.3.1)
+ mongoid (2.0.2)
+ activemodel (~> 3.0)
+ mongo (~> 1.3)
+ tzinfo (~> 0.3.22)
+ padrino (0.9.29)
+ padrino-admin (= 0.9.29)
+ padrino-cache (= 0.9.29)
+ padrino-core (= 0.9.29)
+ padrino-gen (= 0.9.29)
+ padrino-helpers (= 0.9.29)
+ padrino-mailer (= 0.9.29)
+ padrino-admin (0.9.29)
+ padrino-core (= 0.9.29)
+ padrino-helpers (= 0.9.29)
+ padrino-cache (0.9.29)
+ padrino-core (= 0.9.29)
+ padrino-core (0.9.29)
+ activesupport (>= 3.0.0)
+ http_router (~> 0.7.8)
+ sinatra (~> 1.2.6)
+ thor (>= 0.14.3)
+ tilt (~> 1.3.0)
+ padrino-gen (0.9.29)
+ bundler (>= 1.0.2)
+ grit
+ padrino-core (= 0.9.29)
+ padrino-helpers (0.9.29)
+ i18n (>= 0.4.1)
+ padrino-core (= 0.9.29)
+ padrino-mailer (0.9.29)
+ mail (>= 2.2.0)
+ padrino-core (= 0.9.29)
+ polyglot (0.3.1)
+ rack (1.3.0)
+ rack-flash (0.1.1)
+ rack
+ rack-test (0.5.7)
+ rack (>= 1.0)
+ rake (0.9.0)
+ rr (1.0.2)
+ shoulda (2.11.3)
+ shoulda-activemodel (0.0.2)
+ shoulda (>= 2.11.0)
+ sinatra (1.2.6)
+ rack (~> 1.1)
+ tilt (>= 1.2.2, < 2.0)
+ thor (0.14.6)
+ tilt (1.3.1)
+ treetop (1.4.9)
+ polyglot (>= 0.3.1)
+ tzinfo (0.3.27)
+ url_mount (0.2.1)
+ rack
+
+PLATFORMS
+ ruby
+
+DEPENDENCIES
+ SystemTimer
+ bcrypt-ruby
+ bson_ext
+ erubis (~> 2.7.0)
+ faker
+ httparty
+ machinist
+ mongoid
+ padrino (= 0.9.29)
+ rack-flash
+ rack-test
+ rake
+ rr
+ shoulda
+ shoulda-activemodel
diff --git a/admin/app.rb b/admin/app.rb
new file mode 100644
index 0000000..990accb
--- /dev/null
+++ b/admin/app.rb
@@ -0,0 +1,37 @@
+class Admin < Padrino::Application
+ register Padrino::Mailer
+ register Padrino::Helpers
+ register Padrino::Admin::AccessControl
+
+ ##
+ # Application configuration options
+ #
+ # set :raise_errors, true # Raise exceptions (will stop application) (default for test)
+ # set :dump_errors, true # Exception backtraces are written to STDERR (default for production/development)
+ # set :show_exceptions, true # Shows a stack trace in browser (default for development)
+ # set :logging, true # Logging in STDOUT for development and file for production (default only for development)
+ # set :public, "foo/bar" # Location for static assets (default root/public)
+ # set :reload, false # Reload application files (default in development)
+ # set :default_builder, "foo" # Set a custom form builder (default 'StandardFormBuilder')
+ # set :locale_path, "bar" # Set path for I18n translations (default your_app/locales)
+ # disable :sessions # Disabled sessions by default (enable if needed)
+ # disable :flash # Disables rack-flash (enabled by default if Rack::Flash is defined)
+ # layout :my_layout # Layout can be in views/layouts/foo.ext or views/foo.ext (default :application)
+ #
+
+ set :login_page, "/admin/sessions/new"
+
+ enable :sessions
+ disable :store_location
+
+ access_control.roles_for :any do |role|
+ role.protect "/"
+ role.allow "/sessions"
+ end
+
+ access_control.roles_for :admin do |role|
+ role.project_module :wires, "/wires"
+ role.project_module :feeds, "/feeds"
+ role.project_module :accounts, "/accounts"
+ end
+end
diff --git a/admin/controllers/accounts.rb b/admin/controllers/accounts.rb
new file mode 100644
index 0000000..173319b
--- /dev/null
+++ b/admin/controllers/accounts.rb
@@ -0,0 +1,47 @@
+Admin.controllers :accounts do
+
+ get :index do
+ @accounts = Account.all
+ render 'accounts/index'
+ end
+
+ get :new do
+ @account = Account.new
+ render 'accounts/new'
+ end
+
+ post :create do
+ @account = Account.new(params[:account])
+ if @account.save
+ flash[:notice] = 'Account was successfully created.'
+ redirect url(:accounts, :edit, :id => @account.id)
+ else
+ render 'accounts/new'
+ end
+ end
+
+ get :edit, :with => :id do
+ @account = Account.find(params[:id])
+ render 'accounts/edit'
+ end
+
+ put :update, :with => :id do
+ @account = Account.find(params[:id])
+ if @account.update_attributes(params[:account])
+ flash[:notice] = 'Account was successfully updated.'
+ redirect url(:accounts, :edit, :id => @account.id)
+ else
+ render 'accounts/edit'
+ end
+ end
+
+ delete :destroy, :with => :id do
+ account = Account.find(params[:id])
+ if account != current_account && account.destroy
+ flash[:notice] = 'Account was successfully destroyed.'
+ else
+ flash[:error] = 'Impossible destroy Account!'
+ end
+ redirect url(:accounts, :index)
+ end
+end
\ No newline at end of file
diff --git a/admin/controllers/base.rb b/admin/controllers/base.rb
new file mode 100644
index 0000000..d98538e
--- /dev/null
+++ b/admin/controllers/base.rb
@@ -0,0 +1,6 @@
+Admin.controllers :base do
+
+ get :index, :map => "/" do
+ render "base/index"
+ end
+end
\ No newline at end of file
diff --git a/admin/controllers/feeds.rb b/admin/controllers/feeds.rb
new file mode 100644
index 0000000..930c3cf
--- /dev/null
+++ b/admin/controllers/feeds.rb
@@ -0,0 +1,47 @@
+Admin.controllers :feeds do
+
+ get :index do
+ @feeds = Feed.all
+ render 'feeds/index'
+ end
+
+ get :new do
+ @feed = Feed.new
+ render 'feeds/new'
+ end
+
+ post :create do
+ @feed = Feed.new(params[:feed])
+ if @feed.save
+ flash[:notice] = 'Feed was successfully created.'
+ redirect url(:feeds, :edit, :id => @feed.id)
+ else
+ render 'feeds/new'
+ end
+ end
+
+ get :edit, :with => :id do
+ @feed = Feed.find(params[:id])
+ render 'feeds/edit'
+ end
+
+ put :update, :with => :id do
+ @feed = Feed.find(params[:id])
+ if @feed.update_attributes(params[:feed])
+ flash[:notice] = 'Feed was successfully updated.'
+ redirect url(:feeds, :edit, :id => @feed.id)
+ else
+ render 'feeds/edit'
+ end
+ end
+
+ delete :destroy, :with => :id do
+ feed = Feed.find(params[:id])
+ if feed.destroy
+ flash[:notice] = 'Feed was successfully destroyed.'
+ else
+ flash[:error] = 'Impossible destroy Feed!'
+ end
+ redirect url(:feeds, :index)
+ end
+end
\ No newline at end of file
diff --git a/admin/controllers/sessions.rb b/admin/controllers/sessions.rb
new file mode 100644
index 0000000..1557fae
--- /dev/null
+++ b/admin/controllers/sessions.rb
@@ -0,0 +1,25 @@
+Admin.controllers :sessions do
+
+ get :new do
+ render "/sessions/new", nil, :layout => false
+ end
+
+ post :create do
+ if account = Account.authenticate(params[:email], params[:password])
+ set_current_account(account)
+ redirect url(:base, :index)
+ elsif Padrino.env == :development && params[:bypass]
+ account = Account.first
+ set_current_account(account)
+ redirect url(:base, :index)
+ else
+ flash[:warning] = "Login or password wrong."
+ redirect url(:sessions, :new)
+ end
+ end
+
+ delete :destroy do
+ set_current_account(nil)
+ redirect url(:sessions, :new)
+ end
+end
\ No newline at end of file
diff --git a/admin/controllers/wires.rb b/admin/controllers/wires.rb
new file mode 100644
index 0000000..4b941cb
--- /dev/null
+++ b/admin/controllers/wires.rb
@@ -0,0 +1,47 @@
+Admin.controllers :wires do
+
+ get :index do
+ @wires = Wire.all
+ render 'wires/index'
+ end
+
+ get :new do
+ @wire = Wire.new
+ render 'wires/new'
+ end
+
+ post :create do
+ @wire = Wire.new(params[:wire])
+ if @wire.save
+ flash[:notice] = 'Wire was successfully created.'
+ redirect url(:wires, :edit, :id => @wire.id)
+ else
+ render 'wires/new'
+ end
+ end
+
+ get :edit, :with => :id do
+ @wire = Wire.find(params[:id])
+ render 'wires/edit'
+ end
+
+ put :update, :with => :id do
+ @wire = Wire.find(params[:id])
+ if @wire.update_attributes(params[:wire])
+ flash[:notice] = 'Wire was successfully updated.'
+ redirect url(:wires, :edit, :id => @wire.id)
+ else
+ render 'wires/edit'
+ end
+ end
+
+ delete :destroy, :with => :id do
+ wire = Wire.find(params[:id])
+ if wire.destroy
+ flash[:notice] = 'Wire was successfully destroyed.'
+ else
+ flash[:error] = 'Impossible destroy Wire!'
+ end
+ redirect url(:wires, :index)
+ end
+end
\ No newline at end of file
diff --git a/admin/views/accounts/_form.erb b/admin/views/accounts/_form.erb
new file mode 100644
index 0000000..36fedc7
--- /dev/null
+++ b/admin/views/accounts/_form.erb
@@ -0,0 +1,35 @@
+
+ <%= f.label :name %><%= f.error_message_on :name %>
+ <%= f.text_field :name, :class => :text_field %>
+ Ex: a simple text
+
+
+ <%= f.label :surname %><%= f.error_message_on :surname %>
+ <%= f.text_field :surname, :class => :text_field %>
+ Ex: a simple text
+
+
+ <%= f.label :email %><%= f.error_message_on :email %>
+ <%= f.text_field :email, :class => :text_field %>
+ Ex: a simple text
+
+
+ <%= f.label :password %><%= f.error_message_on :password %>
+ <%= f.password_field :password, :class => :password_field %>
+ Ex: a simple text
+
+
+ <%= f.label :password_confirmation %><%= f.error_message_on :password_confirmation %>
+ <%= f.password_field :password_confirmation, :class => :password_field %>
+ Ex: a simple text
+
+
+ <%= f.label :role %><%= f.error_message_on :role %>
+ <%= f.select :role, :options => access_control.roles %>
+ Ex: a simple text
+
+
+
+ <%= f.submit pat(:save), :class => :button %>
+ <%= f.submit pat(:cancel), :onclick => "window.location='#{url(:accounts, :index)}';return false", :class => :button %>
+
\ No newline at end of file
diff --git a/admin/views/accounts/edit.erb b/admin/views/accounts/edit.erb
new file mode 100644
index 0000000..2a41d2f
--- /dev/null
+++ b/admin/views/accounts/edit.erb
@@ -0,0 +1,18 @@
+
+
+
+ <%= link_to pat(:list), url(:accounts, :index) %>
+ <%= link_to pat(:new), url(:accounts, :new) %>
+ <%= link_to pat(:edit), url(:accounts, :edit, :id => @account.id) %>
+
+
+
+
<%= pat(:edit) %> <% mt(:account) %>
+
+ <% form_for :account, url(:accounts, :update, :id => @account.id), :method => :put, :class => :form do |f| %>
+ <%= partial "accounts/form", :locals => { :f => f } %>
+ <% end %>
+
+
+
+<% content_for :sidebar, partial("base/sidebar") %>
\ No newline at end of file
diff --git a/admin/views/accounts/index.erb b/admin/views/accounts/index.erb
new file mode 100644
index 0000000..ce7f99e
--- /dev/null
+++ b/admin/views/accounts/index.erb
@@ -0,0 +1,38 @@
+
+
+
+ <%= link_to pat(:list), url(:accounts, :index) %>
+ <%= link_to pat(:new), url(:accounts, :new) %>
+
+
+
+
<%= pat(:all) %> <% mt(:accounts) %>
+
+
+
+ <%= mat(:account, :id) %>
+ <%= mat(:account, :name) %>
+ <%= mat(:account, :surname) %>
+ <%= mat(:account, :email) %>
+
+
+ <% @accounts.each do |account| %>
+
+ <%= account.id %>
+ <%= account.name %>
+ <%= account.surname %>
+ <%= account.email %>
+
+ <%= button_to pat(:edit), url(:accounts, :edit, :id => account.id), :method => :get, :class => :button_to %> |
+ <%= button_to pat(:delete), url(:accounts, :destroy, :id => account.id), :method => :delete, :class => :button_to, :onsubmit => "return confirm('#{pat(:confirm)}')" %>
+
+
+ <% end %>
+
+
+
+
+
+<% content_for :sidebar, partial("base/sidebar") %>
\ No newline at end of file
diff --git a/admin/views/accounts/new.erb b/admin/views/accounts/new.erb
new file mode 100644
index 0000000..00249d3
--- /dev/null
+++ b/admin/views/accounts/new.erb
@@ -0,0 +1,17 @@
+
+
+
+ <%= link_to pat(:list), url(:accounts, :index) %>
+ <%= link_to pat(:new), url(:accounts, :new) %>
+
+
+
+
<%= pat(:new) %> <% mt(:account) %>
+
+ <% form_for :account, url(:accounts, :create), :class => :form do |f| %>
+ <%= partial "accounts/form", :locals => { :f => f } %>
+ <% end %>
+
+
+
+<% content_for :sidebar, partial("base/sidebar") %>
\ No newline at end of file
diff --git a/admin/views/base/_sidebar.erb b/admin/views/base/_sidebar.erb
new file mode 100644
index 0000000..bd7a989
--- /dev/null
+++ b/admin/views/base/_sidebar.erb
@@ -0,0 +1,13 @@
+
+
Simple Block
+
+
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
+
+
+
+
Links
+
+ <%= link_to "Link 1" %>
+ <%= link_to "Link 1" %>
+
+
\ No newline at end of file
diff --git a/admin/views/base/index.erb b/admin/views/base/index.erb
new file mode 100644
index 0000000..9b5a740
--- /dev/null
+++ b/admin/views/base/index.erb
@@ -0,0 +1,17 @@
+
+
+
Dashboard
+
+
+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident , sunt in culpa qui officia deserunt mollit anim id est laborum.
+
+
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore
+
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore
+
+
+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident , sunt in culpa qui officia deserunt mollit anim id est laborum.
+
+
+
+
+<% content_for :sidebar, partial("base/sidebar") %>
\ No newline at end of file
diff --git a/admin/views/feeds/_form.erb b/admin/views/feeds/_form.erb
new file mode 100644
index 0000000..1db30b5
--- /dev/null
+++ b/admin/views/feeds/_form.erb
@@ -0,0 +1,25 @@
+
+ <%= f.label :default_moderation_status %><%= f.error_message_on :default_moderation_status %>
+ <%= f.text_field :default_moderation_status, :class => :text_field %>
+ Ex: a simple text
+
+
+ <%= f.label :url %><%= f.error_message_on :url %>
+ <%= f.text_field :url, :class => :text_field %>
+ Ex: a simple text
+
+
+ <%= f.label :_id %><%= f.error_message_on :_id %>
+ <%= f.text_field :_id, :class => :text_field %>
+ Ex: a simple text
+
+
+ <%= f.label :_type %><%= f.error_message_on :_type %>
+ <%= f.text_field :_type, :class => :text_field %>
+ Ex: a simple text
+
+
+
+ <%= f.submit pat(:save), :class => :button %>
+ <%= f.submit pat(:cancel), :onclick => "window.location='#{url(:feeds, :index)}';return false", :class => :button %>
+
\ No newline at end of file
diff --git a/admin/views/feeds/edit.erb b/admin/views/feeds/edit.erb
new file mode 100644
index 0000000..073d1e9
--- /dev/null
+++ b/admin/views/feeds/edit.erb
@@ -0,0 +1,18 @@
+
+
+
+ <%= link_to pat(:list), url(:feeds, :index) %>
+ <%= link_to pat(:new), url(:feeds, :new) %>
+ <%= link_to pat(:edit), url(:feeds, :edit, :id => @feed.id) %>
+
+
+
+
<%= pat(:edit) %> <% mt(:feed) %>
+
+ <% form_for :feed, url(:feeds, :update, :id => @feed.id), :method => :put, :class => :form do |f| %>
+ <%= partial "feeds/form", :locals => { :f => f } %>
+ <% end %>
+
+
+
+<% content_for :sidebar, partial("base/sidebar") %>
\ No newline at end of file
diff --git a/admin/views/feeds/index.erb b/admin/views/feeds/index.erb
new file mode 100644
index 0000000..0f093ed
--- /dev/null
+++ b/admin/views/feeds/index.erb
@@ -0,0 +1,42 @@
+
+
+
+ <%= link_to pat(:list), url(:feeds, :index) %>
+ <%= link_to pat(:new), url(:feeds, :new) %>
+
+
+
+
<%= pat(:all) %> <% mt(:feeds) %>
+
+
+
+ <%= mat(:feed, :created_at) %>
+ <%= mat(:feed, :updated_at) %>
+ <%= mat(:feed, :default_moderation_status) %>
+ <%= mat(:feed, :url) %>
+ <%= mat(:feed, :_id) %>
+ <%= mat(:feed, :_type) %>
+
+
+ <% @feeds.each do |feed| %>
+
+ <%= feed.created_at %>
+ <%= feed.updated_at %>
+ <%= feed.default_moderation_status %>
+ <%= feed.url %>
+ <%= feed._id %>
+ <%= feed._type %>
+
+ <%= button_to pat(:edit), url(:feeds, :edit, :id => feed.id), :method => :get, :class => :button_to %> |
+ <%= button_to pat(:delete), url(:feeds, :destroy, :id => feed.id), :method => :delete, :class => :button_to, :onsubmit => "return confirm('#{pat(:confirm)}')" %>
+
+
+ <% end %>
+
+
+
+
+
+<% content_for :sidebar, partial("base/sidebar") %>
\ No newline at end of file
diff --git a/admin/views/feeds/new.erb b/admin/views/feeds/new.erb
new file mode 100644
index 0000000..5824b09
--- /dev/null
+++ b/admin/views/feeds/new.erb
@@ -0,0 +1,17 @@
+
+
+
+ <%= link_to pat(:list), url(:feeds, :index) %>
+ <%= link_to pat(:new), url(:feeds, :new) %>
+
+
+
+
<%= pat(:new) %> <% mt(:feed) %>
+
+ <% form_for :feed, url(:feeds, :create), :class => :form do |f| %>
+ <%= partial "feeds/form", :locals => { :f => f } %>
+ <% end %>
+
+
+
+<% content_for :sidebar, partial("base/sidebar") %>
\ No newline at end of file
diff --git a/admin/views/layouts/application.erb b/admin/views/layouts/application.erb
new file mode 100644
index 0000000..3a9cb12
--- /dev/null
+++ b/admin/views/layouts/application.erb
@@ -0,0 +1,44 @@
+
+
+
+
+ Padrino Admin
+ <%= stylesheet_link_tag :base, "themes/default/style" %>
+
+
+
+
+
+
+ <%= [:error, :warning, :notice].map { |type| flash_tag(type, :class => "message #{type}") }.join %>
+
+
+ <%= yield %>
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/admin/views/sessions/new.erb b/admin/views/sessions/new.erb
new file mode 100644
index 0000000..5b09394
--- /dev/null
+++ b/admin/views/sessions/new.erb
@@ -0,0 +1,56 @@
+
+
+
+
+ Padrino Admin
+ <%= stylesheet_link_tag :base, "themes/default/style" %>
+
+
+
+
+
Padrino Admin
+
+
Login Box
+
+
+ <%= [:error, :warning, :notice].map { |type| flash_tag(type, :class => "message #{type}") }.join %>
+
+ <% form_tag(url(:sessions, :create), :class => 'form login') do %>
+
+
+ Login
+
+
+ <%= text_field_tag :email, :value => params[:email], :class => 'text_field' %>
+
+
+
+
+ Password
+
+
+ <%= password_field_tag :password, :value => params[:password], :class => 'text_field' %>
+
+
+ <% if Padrino.env == :development %>
+
+
+ Bypass login?
+
+
+ <%= check_box_tag :bypass %>
+
+
+ <% end %>
+
+ <% end %>
+
+
+
+
+
+
\ No newline at end of file
diff --git a/admin/views/wires/_form.erb b/admin/views/wires/_form.erb
new file mode 100644
index 0000000..2f59f97
--- /dev/null
+++ b/admin/views/wires/_form.erb
@@ -0,0 +1,20 @@
+
+ <%= f.label :name %><%= f.error_message_on :name %>
+ <%= f.text_field :name, :class => :text_field %>
+ Ex: a simple text
+
+
+ <%= f.label :_id %><%= f.error_message_on :_id %>
+ <%= f.text_field :_id, :class => :text_field %>
+ Ex: a simple text
+
+
+ <%= f.label :_type %><%= f.error_message_on :_type %>
+ <%= f.text_field :_type, :class => :text_field %>
+ Ex: a simple text
+
+
+
+ <%= f.submit pat(:save), :class => :button %>
+ <%= f.submit pat(:cancel), :onclick => "window.location='#{url(:wires, :index)}';return false", :class => :button %>
+
\ No newline at end of file
diff --git a/admin/views/wires/edit.erb b/admin/views/wires/edit.erb
new file mode 100644
index 0000000..9e6f26e
--- /dev/null
+++ b/admin/views/wires/edit.erb
@@ -0,0 +1,18 @@
+
+
+
+ <%= link_to pat(:list), url(:wires, :index) %>
+ <%= link_to pat(:new), url(:wires, :new) %>
+ <%= link_to pat(:edit), url(:wires, :edit, :id => @wire.id) %>
+
+
+
+
<%= pat(:edit) %> <% mt(:wire) %>
+
+ <% form_for :wire, url(:wires, :update, :id => @wire.id), :method => :put, :class => :form do |f| %>
+ <%= partial "wires/form", :locals => { :f => f } %>
+ <% end %>
+
+
+
+<% content_for :sidebar, partial("base/sidebar") %>
\ No newline at end of file
diff --git a/admin/views/wires/index.erb b/admin/views/wires/index.erb
new file mode 100644
index 0000000..ffff895
--- /dev/null
+++ b/admin/views/wires/index.erb
@@ -0,0 +1,40 @@
+
+
+
+ <%= link_to pat(:list), url(:wires, :index) %>
+ <%= link_to pat(:new), url(:wires, :new) %>
+
+
+
+
<%= pat(:all) %> <% mt(:wires) %>
+
+
+
+ <%= mat(:wire, :name) %>
+ <%= mat(:wire, :created_at) %>
+ <%= mat(:wire, :updated_at) %>
+ <%= mat(:wire, :_id) %>
+ <%= mat(:wire, :_type) %>
+
+
+ <% @wires.each do |wire| %>
+
+ <%= wire.name %>
+ <%= wire.created_at %>
+ <%= wire.updated_at %>
+ <%= wire._id %>
+ <%= wire._type %>
+
+ <%= button_to pat(:edit), url(:wires, :edit, :id => wire.id), :method => :get, :class => :button_to %> |
+ <%= button_to pat(:delete), url(:wires, :destroy, :id => wire.id), :method => :delete, :class => :button_to, :onsubmit => "return confirm('#{pat(:confirm)}')" %>
+
+
+ <% end %>
+
+
+
+
+
+<% content_for :sidebar, partial("base/sidebar") %>
\ No newline at end of file
diff --git a/admin/views/wires/new.erb b/admin/views/wires/new.erb
new file mode 100644
index 0000000..956a744
--- /dev/null
+++ b/admin/views/wires/new.erb
@@ -0,0 +1,17 @@
+
+
+
+ <%= link_to pat(:list), url(:wires, :index) %>
+ <%= link_to pat(:new), url(:wires, :new) %>
+
+
+
+
<%= pat(:new) %> <% mt(:wire) %>
+
+ <% form_for :wire, url(:wires, :create), :class => :form do |f| %>
+ <%= partial "wires/form", :locals => { :f => f } %>
+ <% end %>
+
+
+
+<% content_for :sidebar, partial("base/sidebar") %>
\ No newline at end of file
diff --git a/app/app.rb b/app/app.rb
new file mode 100644
index 0000000..8d25873
--- /dev/null
+++ b/app/app.rb
@@ -0,0 +1,58 @@
+class Mongoaggro < Padrino::Application
+ register Padrino::Mailer
+ register Padrino::Helpers
+
+ enable :sessions
+
+ ##
+ # Caching support
+ #
+ # register Padrino::Cache
+ # enable :caching
+ #
+ # You can customize caching store engines:
+ #
+ # set :cache, Padrino::Cache::Store::Memcache.new(::Memcached.new('127.0.0.1:11211', :exception_retry_limit => 1))
+ # set :cache, Padrino::Cache::Store::Memcache.new(::Dalli::Client.new('127.0.0.1:11211', :exception_retry_limit => 1))
+ # set :cache, Padrino::Cache::Store::Redis.new(::Redis.new(:host => '127.0.0.1', :port => 6379, :db => 0))
+ # set :cache, Padrino::Cache::Store::Memory.new(50)
+ # set :cache, Padrino::Cache::Store::File.new(Padrino.root('tmp', app_name.to_s, 'cache')) # default choice
+ #
+
+ ##
+ # Application configuration options
+ #
+ # set :raise_errors, true # Raise exceptions (will stop application) (default for test)
+ # set :dump_errors, true # Exception backtraces are written to STDERR (default for production/development)
+ # set :show_exceptions, true # Shows a stack trace in browser (default for development)
+ # set :logging, true # Logging in STDOUT for development and file for production (default only for development)
+ # set :public, "foo/bar" # Location for static assets (default root/public)
+ # set :reload, false # Reload application files (default in development)
+ # set :default_builder, "foo" # Set a custom form builder (default 'StandardFormBuilder')
+ # set :locale_path, "bar" # Set path for I18n translations (default your_app/locales)
+ # disable :sessions # Disabled sessions by default (enable if needed)
+ # disable :flash # Disables rack-flash (enabled by default if Rack::Flash is defined)
+ # layout :my_layout # Layout can be in views/layouts/foo.ext or views/foo.ext (default :application)
+ #
+
+ ##
+ # You can configure for a specified environment like:
+ #
+ # configure :development do
+ # set :foo, :bar
+ # disable :asset_stamp # no asset timestamping for dev
+ # end
+ #
+
+ ##
+ # You can manage errors like:
+ #
+ # error 404 do
+ # render 'errors/404'
+ # end
+ #
+ # error 505 do
+ # render 'errors/505'
+ # end
+ #
+end
\ No newline at end of file
diff --git a/app/models/account.rb b/app/models/account.rb
new file mode 100644
index 0000000..4fa7d9f
--- /dev/null
+++ b/app/models/account.rb
@@ -0,0 +1,53 @@
+class Account
+ include Mongoid::Document
+ attr_accessor :password, :password_confirmation
+
+ # Fields
+ field :name, :type => String
+ field :surname, :type => String
+ field :email, :type => String
+ field :crypted_password, :type => String
+ field :role, :type => String
+
+ # Validations
+ validates_presence_of :email, :role
+ validates_presence_of :password, :if => :password_required
+ validates_presence_of :password_confirmation, :if => :password_required
+ validates_length_of :password, :within => 4..40, :if => :password_required
+ validates_confirmation_of :password, :if => :password_required
+ validates_length_of :email, :within => 3..100
+ validates_uniqueness_of :email, :case_sensitive => false
+ validates_format_of :email, :with => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i
+ validates_format_of :role, :with => /[A-Za-z]/
+
+ # Callbacks
+ before_save :encrypt_password, :if => :password_required
+
+ ##
+ # This method is for authentication purpose
+ #
+ def self.authenticate(email, password)
+ account = first(:conditions => { :email => email }) if email.present?
+ account && account.has_password?(password) ? account : nil
+ end
+
+ ##
+ # This method is used by AuthenticationHelper
+ #
+ def self.find_by_id(id)
+ find(id) rescue nil
+ end
+
+ def has_password?(password)
+ ::BCrypt::Password.new(crypted_password) == password
+ end
+
+ private
+ def encrypt_password
+ self.crypted_password = ::BCrypt::Password.create(self.password)
+ end
+
+ def password_required
+ crypted_password.blank? || self.password.present?
+ end
+end
\ No newline at end of file
diff --git a/app/models/feed.rb b/app/models/feed.rb
new file mode 100644
index 0000000..449f5d3
--- /dev/null
+++ b/app/models/feed.rb
@@ -0,0 +1,25 @@
+class Feed
+ include Mongoid::Document
+ include Mongoid::Timestamps # adds created_at and updated_at fields
+
+ # Fields
+ #
+ # field , :type => , :default =>
+ field :url, :type => String
+ field :default_moderation_status, :type => String
+
+ # Validations
+ #
+ validates_presence_of :url, :wire
+
+ # Associations
+ #
+ belongs_to :wire
+
+ # You can define indexes on documents using the index macro:
+ # index :field <, :unique => true>
+
+ # You can create a composite key in mongoid to replace the default id using
+ # the key macro:
+ # key :field <, :another_field, :one_more ....>
+end
diff --git a/app/models/wire.rb b/app/models/wire.rb
new file mode 100644
index 0000000..7ef6e07
--- /dev/null
+++ b/app/models/wire.rb
@@ -0,0 +1,19 @@
+class Wire
+ include Mongoid::Document
+ include Mongoid::Timestamps # adds created_at and updated_at fields
+
+ # Fields
+ #
+ # field , :type => , :default =>
+ field :name, :type => String
+
+ # Associations
+ #
+ has_many :feeds
+
+ # You can define indexes on documents using the index macro:
+ # index :field <, :unique => true>
+
+ # You can create a composite key in mongoid to replace the default id using the key macro:
+ # key :field <, :another_field, :one_more ....>
+end
diff --git a/config.ru b/config.ru
new file mode 100644
index 0000000..df825bf
--- /dev/null
+++ b/config.ru
@@ -0,0 +1,2 @@
+require ::File.dirname(__FILE__) + '/config/boot.rb'
+run Padrino.application
\ No newline at end of file
diff --git a/config/apps.rb b/config/apps.rb
new file mode 100644
index 0000000..ce8a465
--- /dev/null
+++ b/config/apps.rb
@@ -0,0 +1,36 @@
+##
+# This file mounts each app in the Padrino project to a specified sub-uri.
+# You can mount additional applications using any of these commands below:
+#
+# Padrino.mount("blog").to('/blog')
+# Padrino.mount("blog", :app_class => "BlogApp").to('/blog')
+# Padrino.mount("blog", :app_file => "path/to/blog/app.rb").to('/blog')
+#
+# You can also map apps to a specified host:
+#
+# Padrino.mount("Admin").host("admin.example.org")
+# Padrino.mount("WebSite").host(/.*\.?example.org/)
+# Padrino.mount("Foo").to("/foo").host("bar.example.org")
+#
+# Note 1: Mounted apps (by default) should be placed into the project root at '/app_name'.
+# Note 2: If you use the host matching remember to respect the order of the rules.
+#
+# By default, this file mounts the primary app which was generated with this project.
+# However, the mounted app can be modified as needed:
+#
+# Padrino.mount("AppName", :app_file => "path/to/file", :app_class => "BlogApp").to('/')
+#
+
+##
+# Setup global project settings for your apps. These settings are inherited by every subapp. You can
+# override these settings in the subapps as needed.
+#
+Padrino.configure_apps do
+ # enable :sessions
+ set :session_secret, 'd4665155d130fe669be1c013ca0f605a17f332c1c510b907082bcace66925e82'
+end
+
+# Mounts the core application for this project
+Padrino.mount("Mongoaggro").to('/')
+
+Padrino.mount("Admin").to("/admin")
\ No newline at end of file
diff --git a/config/boot.rb b/config/boot.rb
new file mode 100644
index 0000000..53c666d
--- /dev/null
+++ b/config/boot.rb
@@ -0,0 +1,29 @@
+# Defines our constants
+PADRINO_ENV = ENV["PADRINO_ENV"] ||= ENV["RACK_ENV"] ||= "development" unless defined?(PADRINO_ENV)
+PADRINO_ROOT = File.expand_path('../..', __FILE__) unless defined?(PADRINO_ROOT)
+
+# Load our dependencies
+require 'rubygems' unless defined?(Gem)
+require 'bundler/setup'
+Bundler.require(:default, PADRINO_ENV)
+
+##
+# Enable devel logging
+#
+# Padrino::Logger::Config[:development] = { :log_level => :devel, :stream => :stdout }
+# Padrino::Logger.log_static = true
+#
+
+##
+# Add your before load hooks here
+#
+Padrino.before_load do
+end
+
+##
+# Add your after load hooks here
+#
+Padrino.after_load do
+end
+
+Padrino.load!
\ No newline at end of file
diff --git a/config/database.rb b/config/database.rb
new file mode 100644
index 0000000..d7cbec7
--- /dev/null
+++ b/config/database.rb
@@ -0,0 +1,25 @@
+
+# Connection.new takes host, port
+host = 'localhost'
+port = Mongo::Connection::DEFAULT_PORT
+
+database_name = case Padrino.env
+ when :development then 'mongoaggro_development'
+ when :production then 'mongoaggro_production'
+ when :test then 'mongoaggro_test'
+end
+
+Mongoid.database = Mongo::Connection.new(host, port).db(database_name)
+
+# You can also configure Mongoid this way
+# Mongoid.configure do |config|
+# name = @settings["database"]
+# host = @settings["host"]
+# config.master = Mongo::Connection.new.db(name)
+# config.slaves = [
+# Mongo::Connection.new(host, @settings["slave_one"]["port"], :slave_ok => true).db(name),
+# Mongo::Connection.new(host, @settings["slave_two"]["port"], :slave_ok => true).db(name)
+# ]
+# end
+#
+# More installation and setup notes are on http://mongoid.org/docs/
diff --git a/db/seeds.rb b/db/seeds.rb
new file mode 100644
index 0000000..237cef4
--- /dev/null
+++ b/db/seeds.rb
@@ -0,0 +1,28 @@
+# Seed add you the ability to populate your db.
+# We provide you a basic shell for interaction with the end user.
+# So try some code like below:
+#
+# name = shell.ask("What's your name?")
+# shell.say name
+#
+email = shell.ask "Which email do you want use for logging into admin?"
+password = shell.ask "Tell me the password to use:"
+
+shell.say ""
+
+account = Account.create(:email => email, :name => "Foo", :surname => "Bar", :password => password, :password_confirmation => password, :role => "admin")
+
+if account.valid?
+ shell.say "================================================================="
+ shell.say "Account has been successfully created, now you can login with:"
+ shell.say "================================================================="
+ shell.say " email: #{email}"
+ shell.say " password: #{password}"
+ shell.say "================================================================="
+else
+ shell.say "Sorry but some thing went wrong!"
+ shell.say ""
+ account.errors.full_messages.each { |m| shell.say " - #{m}" }
+end
+
+shell.say ""
\ No newline at end of file
diff --git a/lib/image_finder.rb b/lib/image_finder.rb
new file mode 100644
index 0000000..9286035
--- /dev/null
+++ b/lib/image_finder.rb
@@ -0,0 +1,29 @@
+module ImageFinder
+
+ # Parses incoming feed data, returning an array of absolute paths to the
+ # JPG, PNG, and GIF images contained in the feed.
+ #
+ # @param [String] data the incoming feed data, which should be a string rather
+ # than some kind of FeedNormalizer object.
+ #
+ # @return [Array] an array of image URLs.
+ #
+ def parse(data)
+ image_urls = []
+ uris = URI.extract(data)
+ _image_urls = uris.select{|u|
+ begin
+ uri = URI.parse(u)
+ rescue URI::InvalidURIError
+ # Feel no pain! This guards against crappy uri parsing errors,
+ # e.g. on "URIs" like "TRON:" (which I'm getting an error on right now).
+ end
+ if uri && uri.path
+ File.extname(uri.path) == ".jpg" || File.extname(uri.path) == ".png" || uri.query =~ /.png/ || uri.query =~ /.jpg/
+ end
+ }
+ return _image_urls
+ end
+
+end
+
diff --git a/lib/octopus.rb b/lib/octopus.rb
new file mode 100644
index 0000000..98a4a5b
--- /dev/null
+++ b/lib/octopus.rb
@@ -0,0 +1,18 @@
+class Octopus
+
+ include HTTParty
+ base_uri "http://octopus:2001"
+ basic_auth "admin", "admin"
+
+ # Adds a resource to the Octopus.
+ #
+ def self.create_resource(feed)
+ options = {:body => {
+ :net_resource => { :url => feed.url },
+ :subscription => {:url => "#{::SERVER_URL}/admin/feeds/notify/#{feed.id}"}
+ }}
+ post( '/create', options)
+ end
+
+end
+
diff --git a/public/admin/stylesheets/base.css b/public/admin/stylesheets/base.css
new file mode 100644
index 0000000..f2fa5f7
--- /dev/null
+++ b/public/admin/stylesheets/base.css
@@ -0,0 +1,95 @@
+*{margin:0;padding:0}
+.clear{clear:both;height:0;}
+.wat-cf:after{content:".";display:block;height:0;clear:both;visibility:hidden;}
+.wat-cf{display:inline-block;}
+/* Hides from IE-mac \*/
+* html .wat-cf{height:1%;}
+.wat-cf{display:block;}
+/* End hide from IE-mac */
+h1{margin:15px 0;font-size:22px;font-weight:normal;}
+h2{font-size:22px;margin:15px 0;font-weight:normal;}
+h3{font-size:18px;margin:10px 0;font-weight:normal;}
+h4{font-size:16px;margin:10px 0;font-weight:normal;}
+hr{height:1px;border:0;}
+p{margin:15px 0;}
+a img{border:none;}
+body{font-size:12px;font-family:sans-serif;}
+#container{min-width:960px;}
+#header,#wrapper{padding:0 20px;}
+#header{position:relative;padding-top:1px;}
+#header h1{margin:0;padding:10px 0;font-size:26px;}
+#header h1 a:link,#header h1 a:active,#header h1 a:hover,#header h1 a:visited{text-decoration:none;}
+#main{width:73%;float:left;}
+.actions-bar{padding:10px 1px;}
+.actions-bar .actions{float:left;}
+.actions-bar .pagination{float:right;padding:1px 0;}
+#sidebar{width:25%;float:right;}
+#sidebar h3{padding:10px 15px;margin:0;font-size:13px;}
+#sidebar .block{margin-bottom:20px;padding-bottom:10px;}
+#sidebar .block .content{padding:0 15px;}
+#sidebar ul.navigation li a:link,#sidebar ul.navigation li a:visited{display:block;padding:10px 15px;}
+#sidebar .block .sidebar-block,#sidebar .notice{padding:10px;}
+.message.notice,.message.warning,.message.error{padding:10px;}
+#wrapper{padding-top:20px;}
+#main .block{margin-bottom:20px;padding-top:1px;}
+#main .block .content .inner{padding:0 15px 15px;}
+#main .block .content .inner .navform{text-align:right;}
+#main .main p.first{margin-top:0;}
+#user-navigation{position:absolute;top:0px;right:20px;}
+#main-navigation{width:100%;}
+#user-navigation ul,#main-navigation ul,.secondary-navigation ul,#sidebar ul.navigation{margin:0;padding:0;list-style-type:none;}
+#user-navigation ul li,#main-navigation ul li,.secondary-navigation ul li{float:left;}
+#main-navigation ul li{margin-right:5px;}
+#user-navigation ul li{padding:5px 10px;}
+#main-navigation ul li a:link,#main-navigation ul li a:visited,#main-navigation ul li a:hover,#main-navigation ul li a:active,
+.secondary-navigation ul li a:link,.secondary-navigation ul li a:visited,.secondary-navigation ul li a:hover,.secondary-navigation ul li a:active,
+#user-navigation ul li a:link,#user-navigation ul li a:visited,#user-navigation ul li a:hover,#user-navigation ul li a:active{text-decoration:none;}
+#main-navigation ul li a{font-size:14px;line-height:14px;display:block;padding:8px 15px;}
+.secondary-navigation{font-size:13px;border-bottom-width:10px;border-bottom-style:solid;}
+.secondary-navigation ul li a{display:block;padding:10px 15px;}
+#footer{padding-bottom:20px;}
+/* pagination */
+.pagination a,.pagination span{padding:2px 5px;margin-right:5px;display:block;float:left;border-style:solid;border-width:1px;}
+.pagination span.current{font-weight:bold;}
+.pagination a{text-decoration:none;}
+/* tables */
+.table{width:100%;border-collapse:collapse;margin-bottom:15px;}
+.table th{padding:10px;font-weight:bold;text-align:left;}
+/*.table th.first{width:30px;}*/
+.table th.last{width:80px;}
+.table .checkbox{margin-left:10px;}
+.table td{padding:10px;}
+.table td.last{text-align:right;}
+/* forms */
+input.check_box{margin:0;padding:0;}
+.form .group{margin-bottom:15px;}
+.form div.left{width:20%;float:left;}
+.form div.right{width:75%;float:right;}
+.form .columns .column{width:48%;}
+.form .columns .left{float:left;}
+.form .columns .right{float:right;}
+.form label,.form input.text_field,.form input.password_field,.form textarea.text_area{font-size:1.0em;padding:2px 0;margin:0;color:#36393D;}
+.form label.right{text-align:right;}
+.form input.check_box,.form input.radio{margin-right:5px;}
+.form label.check_box,.form label.radio{line-height:1.5em;}
+.form label{padding-bottom:2px;font-weight:bold;}
+.form .error{color:red;}
+.form a{color:red;font-size:14px;}
+.form input.text_field,.form input.password_field,.form textarea.text_area{width:100%;border-width:1px;border-style:solid;}
+.button_to{display:inline;}
+.button_to input{background:none;border:none;display:inline;font-size:12px;color:#A72D2E;cursor:pointer;font-family: helvetica, arial, sans-serif;}
+#user-navigation .button_to input{color:#FFFFFF;}
+/* lists */
+ul.list{margin:0;padding:0;list-style-type:none;}
+ul.list li{clear:left;padding-bottom:5px;}
+ul.list li .left{float:left;}
+ul.list li .left .avatar{width:50px;height:50px;}
+ul.list li .item{margin-left:80px;}
+ul.list li .item .avatar{float:left;margin:0 5px 5px 0;width:30px;height:30px;}
+/* box */
+#box{width:500px;margin:50px auto;}
+#box .block{margin-bottom:20px;}
+#box .block h2{padding:10px 15px;margin:0;}
+#box .block .content{padding:10px 20px;}
+/* custom */
+.code{font-family: Courier, 'Courier New', monospace;color:#36393D;}
\ No newline at end of file
diff --git a/public/admin/stylesheets/themes/amro/style.css b/public/admin/stylesheets/themes/amro/style.css
new file mode 100644
index 0000000..fc8b388
--- /dev/null
+++ b/public/admin/stylesheets/themes/amro/style.css
@@ -0,0 +1,364 @@
+/*
+
+ Amro
+ by Sandro Duarte
+ sandro[at]gmail.com
+
+ dark green #008080
+ light yellow #F6F5CD
+ orange #E8C53B
+ light green #76BBA5
+ light #F3F4EC
+
+*/
+
+.small {
+ font-size: 11px;
+ font-style: normal;
+ font-weight: normal;
+ text-transform: normal;
+ letter-spacing: normal;
+ line-height: 1.4em;
+}
+
+.gray {
+ color:#999999;
+ font-family: Georgia, serif;
+ font-size: 13px;
+ font-style: italic;
+ font-weight: normal;
+ text-transform: normal;
+ letter-spacing: normal;
+ line-height: 1.6em;
+}
+
+.hightlight {
+ background-color: #ffff88;
+ font-weight: bold;
+ color: #36393d;
+}
+
+a:link, a:visited, a:hover, a:active, h1, h2, h3 { color: #008080; }
+a { -moz-outline: none; }
+
+body {
+ color: #222;
+ background: #F6F5CD;
+ font-family: helvetica,Arial,sans-serif;
+}
+
+hr {
+ background: #f0f0ee;
+ color: #f0f0ee;
+}
+
+p {
+ margin: 10px 0;
+
+}
+
+#header {
+ background: #008080;
+}
+
+#header h1 {
+ padding: 15px 0;
+ font-size: 28px;
+ font-style: normal;
+ font-weight: bold;
+ text-transform: normal;
+ letter-spacing: -1px;
+ line-height: 1.2em;
+}
+
+#header h1 a:link, #header h1 a:active, #header h1 a:hover, #header h1 a:visited {
+ color: #FFF;
+}
+
+#user-navigation {
+ top: auto;
+ bottom: 5px;
+ right: 25px;
+}
+
+#main .block .content {
+ background: #FFF;
+ padding-top: 1px;
+}
+
+#main .block .content h2 {
+ margin-left: 15px;
+}
+
+#main .block .content p {
+ font-size:13px;
+ line-height:1.45em;
+}
+
+#main .block .content h2 {
+ font-size:22px;
+ font-style:normal;
+ font-weight:bold;
+ letter-spacing:-1px;
+ line-height:1.2em;
+ margin-left:15px;
+}
+
+#sidebar .block {
+ background: #FFF;
+}
+
+#sidebar .notice {
+ background: #76BBA5;
+ color: #fff;
+}
+
+#sidebar h3 {
+ background: #008080;
+ color: #FFF;
+ border-bottom: 6px solid #E8C53B;
+}
+
+#main-navigation ul li {
+ padding-left: 15px;
+}
+
+#main-navigation ul li a {
+ padding: 8px 0;
+}
+
+#main-navigation ul li.active {
+ padding: 0;
+ margin-left: 15px;
+}
+
+#main-navigation ul li.active {
+ margin-left: 15px;
+}
+
+#main-navigation ul li.active a {
+ padding: 8px 15px;
+}
+
+#sidebar ul li a:link, #sidebar ul li a:visited {
+ background: #FFF;
+ border-bottom: 1px solid #F0F0EE;
+ text-decoration: none;
+}
+
+#sidebar ul li a:hover, #sidebar ul li a:active {
+ background: #76BBA5;
+ color: #FFF;
+}
+
+#main-navigation {
+ background: #E8C53B;
+}
+
+#main-navigation ul li {
+ background: #E8C53B;
+ margin-right: 0;
+}
+
+#main-navigation ul li.active {
+ background: #F6F5CD;
+}
+
+#main-navigation ul li a:link, #main-navigation ul li a:visited, #main-navigation ul li a:hover, #main-navigation ul li a:active,
+#user-navigation ul li a:link, #user-navigation ul li a:visited, #user-navigation ul li a:hover, #user-navigation ul li a:active {
+ text-decoration: none;
+ color: #fff;
+}
+
+
+.secondary-navigation ul li a:link, .secondary-navigation ul li a:visited, .secondary-navigation ul li a:hover, .secondary-navigation ul li a:active {
+ text-decoration: none;
+ color: #FFF;
+}
+
+#user-navigation a.logout {
+ background: #cc0000;
+ padding: 2px 6px;
+ -moz-border-radius: 4px;
+ -webkit-border-radius: 3px;
+}
+
+.secondary-navigation li a:hover {
+ background: #76BBA5;
+}
+
+#main-navigation ul li.active a:link, #main-navigation ul li.active a:visited, #main-navigation ul li.active a:hover, #main-navigation ul li.active a:active {
+ color: #008080;
+}
+
+.secondary-navigation {
+ background: #008080;
+ border-bottom: 6px solid #E8C53B;
+}
+
+.secondary-navigation ul li.active, .secondary-navigation ul li.active a {
+ background-color: #E8C53B;
+}
+
+.secondary-navigation ul li a {
+ padding:8px 12px;
+}
+
+#footer .block {
+ color: #FFF;
+ background: #E8C53B;
+}
+
+#footer .block p {
+ margin: 0;
+ padding: 10px;
+}
+
+/* pagination */
+
+.pagination span.disabled {
+ color: #bbb;
+ border-color: #bbb;
+}
+
+.pagination span.current {
+ background: #008080;
+ color: #FFF;
+ border-color: #008080;
+}
+
+.pagination a, .pagination span {
+ color: #008080;
+ border-color: #008080;
+}
+
+.pagination a:hover {
+ color: #FFF;
+ background: #008080;
+}
+
+/* tables */
+
+.table th {
+ background: #008080;
+ color: #FFF;
+}
+
+.table td {
+ border-bottom:1px solid #F0F0EE;
+}
+
+.table tr.even {
+ background: #EFF3E4;
+}
+/* forms */
+
+.form input.text_field, .form input.password_field, .form textarea.text_area {
+ width: 100%;
+ border:1px solid #CFCFCF;
+}
+
+.form input.button {
+ padding: 5px 10px 5px 10px;
+ background-color:#008080;
+ text-decoration:none;
+ cursor: pointer;
+ color: #FFF;
+ font-size: 14px;
+ border:0px;
+ margin:0px;
+}
+
+.form .button:hover {
+ background: #E8C53B;
+}
+
+.form .description {
+ font-style: italic;
+ color: #8C8C8C;
+ font-size: .9em;
+}
+
+/* flash-messages */
+.flash .message {
+ -moz-border-radius: 3px;
+ -webkit-border-radius: 3px;
+ text-align:center;
+ margin: 0 auto 15px;
+
+}
+
+.flash .message p {
+ margin:8px;
+}
+.flash .error {
+ border: 1px solid #fbb;
+ background-color: #fdd;
+}
+.flash .warning {
+ border: 1px solid #fffaaa;
+ background-color: #ffffcc;
+}
+.flash .notice {
+ border: 1px solid #1FDF00;
+ background-color: #BBFFB6;
+}
+
+/* lists */
+
+ul.list li {
+ border-bottom-color: #F0F0EE;
+ border-bottom-width: 1px;
+ border-bottom-style: solid;
+}
+
+ul.list li .item .avatar {
+ border-color: #F0F0EE;
+ border-width: 1px;
+ border-style: solid;
+ padding: 2px;
+}
+
+/* box */
+
+#box .block {
+ background: #FFF;
+}
+
+#box .block h2 {
+ background: #008080;
+ color: #FFF;
+}
+
+
+/* rounded borders */
+
+#main, #main-navigation, #main-navigation li, .secondary-navigation, #main .block, #sidebar .block, #sidebar h3, ul.list li,
+#footer .block, .form input.button, #box .block, #box .block h2 {
+ -moz-border-radius-topleft: 4px;
+ -webkit-border-top-left-radius: 4px;
+ -moz-border-radius-topright: 4px;
+ -webkit-border-top-right-radius: 4px;
+}
+
+.secondary-navigation li.first a, .secondary-navigation ul li.first, .table th.first, .table th.first {
+ -moz-border-radius-topleft: 4px;
+ -webkit-border-top-left-radius: 4px;
+}
+
+.table th.last {
+ -moz-border-radius-topright: 4px;
+ -webkit-border-top-right-radius: 4px;
+}
+
+.secondary-navigation ul li.first {
+ -moz-border-radius-topleft: 4px;
+ -webkit-border-top-left-radius: 4px;
+}
+
+#sidebar, #sidebar .block, #main .block, #sidebar ul.navigation, ul.list li, #footer .block, .form input.button, #box .block {
+ -moz-border-radius-bottomleft: 4px;
+ -webkit-border-bottom-left-radius: 4px;
+ -moz-border-radius-bottomright: 4px;
+ -webkit-border-bottom-right-radius: 4px;
+}
\ No newline at end of file
diff --git a/public/admin/stylesheets/themes/bec-green/style.css b/public/admin/stylesheets/themes/bec-green/style.css
new file mode 100644
index 0000000..e1fc304
--- /dev/null
+++ b/public/admin/stylesheets/themes/bec-green/style.css
@@ -0,0 +1,290 @@
+a:link, a:visited, a:hover, a:active { color: #33f; }
+h1, h2, h3 {color:#444}
+
+body {
+ color: #222;
+ background: #e5e5e5;
+ font-family: "Bitstream Vera Sans", verdana, sans-serif;
+}
+
+hr {
+ background: #f0f0ee;
+}
+
+p {
+ font-size: 14px;
+ line-height: 20px;
+}
+
+input.check_box {
+ vertical-align:middle;
+}
+
+#header h1 {
+ font-size: 28px;
+ padding: 5px 0;
+ margin: 5px 0;
+}
+
+.hightlight {
+ background-color: #ffc;
+}
+.small {
+ font-size: 11px;
+}
+.gray {
+ color: #999;
+}
+#header {
+ background: #48625B;
+}
+
+#header h1 a:link, #header h1 a:active, #header h1 a:hover, #header h1 a:visited {
+ color: #FFF;
+}
+
+#main {
+ background: #e5e5e5;
+ width: 69%;
+}
+
+#main .block {
+ -moz-border-radius-topleft: 4px;
+ -moz-border-radius-topright: 4px;
+ padding: 0;
+ margin-bottom:20px;
+ padding-bottom: 20px;
+ background: #fff;
+}
+
+#main .block h2.title {
+ margin: 0 0 20px 0;
+ background-color: #E9FAE6;
+ padding: 5px 5px 5px 15px;
+ font-size:18px;
+}
+
+.main_container {
+ padding:10px;
+}
+
+/* #sidebar .block { background: #FFF; padding-bottom:0px; } */
+
+#sidebar .notice {
+ background-color: #ffc;
+ padding: 0 10px;
+ border-bottom:1px solid #ddd;
+ border-right:1px solid #ddd;
+ border-top:1px solid #fff;
+ border-left:1px solid #fff;
+}
+#sidebar .notice h2 {
+ font-size:16px;
+ margin: 5px 0;
+ border-bottom:1px solid #aaa;
+}
+#sidebar .notice p {
+ font-size:12px;
+}
+
+#sidebar .block {
+ padding-bottom: 0;
+}
+
+#sidebar .block .content {
+ padding: 0 10px;
+}
+
+
+#sidebar h3 {
+ background: #c7d8d8;
+ border-bottom:1px solid #999;
+ padding: 5px 10px;
+}
+
+#sidebar ul li a:link, #sidebar ul li a:visited {
+ font-size:14px;
+}
+
+#sidebar ul li a:hover, #sidebar ul li a:active {
+ background: #E9FAE6;
+ color: #444;
+ font-size:14px;
+ text-decoration:underline;
+}
+#sidebar ul.navigation li.last a {
+ border-bottom: none;
+}
+
+#sidebar ul.navigation li a:link,#sidebar ul.navigation li a:visited {
+ padding: 5px 10px;
+ color:#444;
+ text-decoration: none;
+}
+#sidebar ul.navigation li a:hover {
+ text-decoration:underline;
+}
+#sidebar .block .sidebar-block h4 {
+ border-bottom: 1px solid #bbb;
+}
+#main-navigation ul li {
+ background: #30423E;
+}
+
+#main-navigation ul li:hover {
+ background: #23302D;
+}
+
+#main-navigation ul li.active {
+ background: #e5e5e5;
+}
+
+#main-navigation ul li a:link, #main-navigation ul li a:visited, #main-navigation ul li a:hover, #main-navigation ul li a:active,
+.secondary-navigation ul li a:link, .secondary-navigation ul li a:visited, .secondary-navigation ul li a:hover, .secondary-navigation ul li a:active,
+#user-navigation ul li a:link, #user-navigation ul li a:visited, #user-navigation ul li a:hover, #user-navigation ul li a:active {
+ text-decoration: none;
+ color: #FFF;
+}
+
+#main-navigation ul li a {
+ font-size: 14px;
+ padding: 4px 10px;
+}
+
+#main-navigation ul li.active a:link, #main-navigation ul li.active a:visited, #main-navigation ul li.active a:hover, #main-navigation ul li.active a:active {
+ color: #333;
+}
+#user-navigation ul li a:hover {
+ text-decoration: underline;
+}
+.secondary-navigation {
+ background: #48625B;
+ border-bottom-color: #30423e;
+ border-bottom: 5px solid #30423e;
+}
+
+.secondary-navigation ul li.active {
+ background-color: #30423e;
+}
+
+.secondary-navigation ul li:hover {
+ background-color: #23302d;
+}
+
+/* pagination */
+
+.pagination span.current {
+ background: #30423e;
+ color: #FFF;
+ border: 1px solid #30423e;
+ -moz-border-radius:5px;
+}
+
+.pagination a {
+ color: #364B69;
+ border: 1px solid #ddd;
+ -moz-border-radius:5px;
+}
+
+.pagination a:hover {
+ color: #444;
+ background: #E9FAE6;
+}
+
+/* tables */
+
+.table th {
+ background: #48625B;
+ color: #FFF;
+ font-weight:normal;
+ padding:3px;
+}
+
+.table th a.toggle {
+ display: block;
+ width: 12px;
+ height: 12px;
+ background: transparent url('images/tick.png') center no-repeat;
+ text-indent: -9999px;
+ -moz-outline: none;
+}
+
+.table th.first {
+ width: 30px;
+ text-align: center;
+}
+
+.table td {
+ border-bottom: 1px solid #F0F0EE;
+}
+
+/* forms */
+
+.form input.text, .form textarea.textarea {
+ border: 1px solid #ddd;
+ padding: 5px;
+ width: 95%;
+}
+
+.form .navform {
+ padding:10px;
+ background-color: #E9FAE6;
+ font-size:14px;
+ border-bottom:1px solid #ddd;
+ border-right:1px solid #ddd;
+ border-top:1px solid #eee;
+ border-left:1px solid #eee;
+}
+.form .navform input {
+ font-size:14px;
+}
+
+/* flash-messages */
+.flash .message {
+ -moz-border-radius: 3px;
+ -webkit-border-radius: 3px;
+ text-align:center;
+ margin:0 auto 5px;
+ width:80%;
+}
+.flash .message p {
+ margin:8px;
+}
+.flash .error {
+ border: 1px solid #fbb;
+ background-color: #fdd;
+}
+.flash .warning {
+ border: 1px solid #fffaaa;
+ background-color: #ffffcc;
+}
+.flash .notice {
+ border: 1px solid #ddf;
+ background-color: #eef;
+}
+
+/* lists */
+
+ul.list li {
+ border-bottom-color: #F0F0EE;
+}
+
+ul.list li .item .avatar {
+ border-color: #F0F0EE;
+ margin: 3px 10px 0 0;
+}
+
+ul.list li .left {
+ padding: 5px 5px;
+}
+
+/* box */
+
+#box .block {
+ background: #FFF;
+}
+
+#box .block h2 {
+ background: #48625B;
+ color: #FFF;
+}
diff --git a/public/admin/stylesheets/themes/bec/style.css b/public/admin/stylesheets/themes/bec/style.css
new file mode 100644
index 0000000..27b0293
--- /dev/null
+++ b/public/admin/stylesheets/themes/bec/style.css
@@ -0,0 +1,301 @@
+a:link, a:visited, a:hover, a:active { color: #33f; }
+h1, h2, h3 {color:#444}
+
+body {
+ color: #333;
+ background: #e5e5e5;
+ font-family: Verdana, Arial, "Bitstream Vera Sans", sans-serif;
+}
+
+hr {
+ background: #f0f0ee;
+}
+
+p {
+ font-size: 12px;
+ line-height: 20px;
+}
+
+input.check_box {
+ vertical-align:middle;
+}
+
+#header h1 {
+ font-size: 28px;
+ padding: 5px 0;
+ margin: 5px 0;
+}
+
+.hightlight {
+ background-color: #ffc;
+}
+.small {
+ font-size: 11px;
+}
+.gray {
+ color: #999;
+}
+#header {
+ background: #006666;
+}
+
+#header h1 a:link, #header h1 a:active, #header h1 a:hover, #header h1 a:visited {
+ color: #FFF;
+}
+
+#main {
+ background: #e5e5e5;
+ width: 73%;
+}
+
+#main .block {
+ -moz-border-radius-topleft: 4px;
+ -moz-border-radius-topright: 4px;
+ padding: 0;
+ margin-bottom:20px;
+ padding-bottom: 20px;
+ background: #fff;
+}
+
+#main .block h2.title {
+ margin: 0 0 20px 0;
+ background-color: #E6FAFA;
+ padding: 5px 5px 5px 15px;
+ font-size:18px;
+}
+
+.main_container {
+ padding:10px;
+}
+
+#footer .block p {
+ color:#aaa;
+ font-size:11px;
+}
+
+/* #sidebar .block { background: #FFF; padding-bottom:0px; } */
+
+#sidebar .notice {
+ background-color: #ffc;
+ padding: 0 10px;
+ border-bottom:1px solid #ddd;
+ border-right:1px solid #ddd;
+ border-top:1px solid #fff;
+ border-left:1px solid #fff;
+}
+#sidebar .notice h2 {
+ font-size:16px;
+ margin: 5px 0;
+ border-bottom:1px solid #aaa;
+}
+#sidebar .notice p {
+ font-size:12px;
+}
+
+#sidebar .block {
+ padding-bottom: 0;
+}
+
+#sidebar .block .content {
+ padding: 0 10px;
+}
+
+
+#sidebar h3 {
+ background: #c7d8d8;
+ border-bottom:1px solid #999;
+ padding: 5px 10px;
+}
+
+#sidebar ul li a:link, #sidebar ul li a:visited {
+ font-size:12px;
+}
+
+#sidebar ul li a:hover, #sidebar ul li a:active {
+ background: #e1efef;
+ color: #444;
+ font-size:12px;
+ text-decoration:underline;
+}
+#sidebar ul.navigation li.last a {
+ border-bottom: none;
+}
+
+#sidebar ul.navigation li a:link,#sidebar ul.navigation li a:visited {
+ padding: 5px 10px;
+ color:#444;
+ text-decoration: none;
+}
+#sidebar ul.navigation li a:hover {
+ text-decoration:underline;
+}
+#sidebar .block .sidebar-block h4 {
+ border-bottom: 1px solid #bbb;
+}
+#main-navigation ul li {
+ background: #008c8c;
+}
+
+#main-navigation ul li:hover {
+ background: #00b2b2;
+}
+
+#main-navigation ul li.active {
+ background: #f0f0ee;
+}
+
+#main-navigation ul li a:link, #main-navigation ul li a:visited, #main-navigation ul li a:hover, #main-navigation ul li a:active,
+.secondary-navigation ul li a:link, .secondary-navigation ul li a:visited, .secondary-navigation ul li a:hover, .secondary-navigation ul li a:active,
+#user-navigation ul li a:link, #user-navigation ul li a:visited, #user-navigation ul li a:hover, #user-navigation ul li a:active {
+ text-decoration: none;
+ color: #FFF;
+}
+
+#main-navigation ul li a {
+ font-size: 12px;
+ padding: 4px 10px;
+}
+
+#main-navigation ul li.active a:link, #main-navigation ul li.active a:visited, #main-navigation ul li.active a:hover, #main-navigation ul li.active a:active {
+ color: #364b69;
+}
+#user-navigation ul li a:hover {
+ text-decoration: underline;
+}
+.secondary-navigation {
+ background: #006666;
+ border-bottom-color: #008c8c;
+ border-bottom: 5px solid #008c8c;
+}
+
+.secondary-navigation ul li.active {
+ background-color: #008c8c;
+}
+
+.secondary-navigation ul li:hover {
+ background-color: #00b2b2;
+}
+
+/* pagination */
+
+.pagination span.current {
+ background: #008c8c;
+ color: #FFF;
+ border: 1px solid #008c8c;
+ -moz-border-radius:5px;
+}
+
+.pagination a {
+ color: #364B69;
+ border: 1px solid #ddd;
+ -moz-border-radius:5px;
+ font-size:11px;
+}
+
+.pagination a:hover {
+ color: #444;
+ background: #E6FAFA;
+}
+
+/* tables */
+
+.table th {
+ background: #006666;
+ color: #FFF;
+ font-weight:normal;
+ padding:3px;
+}
+
+.table th a.toggle {
+ display: block;
+ width: 12px;
+ height: 12px;
+ background: transparent url('images/tick.png') center no-repeat;
+ text-indent: -9999px;
+ -moz-outline: none;
+}
+
+.table th.first {
+ width: 30px;
+ text-align: center;
+}
+
+.table td {
+ border-bottom: 1px solid #F0F0EE;
+}
+
+/* forms */
+
+.form input.text, .form textarea.textarea {
+ border: 1px solid #ddd;
+ padding: 5px;
+ width:99%;
+}
+
+.form .navform {
+ padding:10px;
+ background-color: #f1f8f8;
+ font-size:14px;
+ border-bottom:1px solid #ddd;
+ border-right:1px solid #ddd;
+ border-top:1px solid #eee;
+ border-left:1px solid #eee;
+}
+.form .navform input {
+ font-size:14px;
+}
+
+.description {
+ color:#aaa;
+ font-family:Georgia, serif;
+}
+
+/* flash-messages */
+.flash .message {
+ -moz-border-radius: 3px;
+ -webkit-border-radius: 3px;
+ text-align:center;
+ margin:0 auto 5px;
+ width:80%;
+}
+.flash .message p {
+ margin:8px;
+}
+.flash .error {
+ border: 1px solid #fbb;
+ background-color: #fdd;
+}
+.flash .warning {
+ border: 1px solid #fffaaa;
+ background-color: #ffffcc;
+}
+.flash .notice {
+ border: 1px solid #ddf;
+ background-color: #eef;
+}
+
+/* lists */
+
+ul.list li {
+ border-bottom-color: #F0F0EE;
+}
+
+ul.list li .item .avatar {
+ border-color: #F0F0EE;
+ margin: 3px 10px 0 0;
+}
+
+ul.list li .left {
+ padding: 5px 5px;
+}
+
+/* box */
+
+#box .block {
+ background: #FFF;
+}
+
+#box .block h2 {
+ background: #006666;
+ color: #FFF;
+}
diff --git a/public/admin/stylesheets/themes/blue/style.css b/public/admin/stylesheets/themes/blue/style.css
new file mode 100644
index 0000000..0767a09
--- /dev/null
+++ b/public/admin/stylesheets/themes/blue/style.css
@@ -0,0 +1,287 @@
+.small { font-size:12px; }
+.gray { color:#999999; }
+.hightlight { background-color:#FFFFCC; }
+
+a:link, a:visited, a:hover, a:active, h1, h2, h3 { color: #2F427A; }
+a { -moz-outline: none; }
+
+body {
+ color: #222;
+ background: #f0f0ee;
+ font-family: helvetica, arial, sans-serif;
+ font-size: 14px;
+}
+
+hr {
+ background: #f0f0ee;
+ color: #f0f0ee;
+}
+
+#header {
+ background: #2F427A;
+}
+
+#header h1 {
+ padding: 20px 0;
+}
+
+#header h1 a:link, #header h1 a:active, #header h1 a:hover, #header h1 a:visited {
+ color: #FFF;
+}
+
+#user-navigation {
+ top: auto;
+ bottom: 5px;
+ right: 25px;
+}
+
+#main .block .content {
+ background: #FFF;
+ padding-top: 1px;
+}
+
+#main .block .content h2 {
+ margin-left: 15px;
+}
+
+#sidebar .block {
+ background: #FFF;
+}
+
+#sidebar .notice {
+ background: #FFFFCC;
+}
+
+#sidebar h3 {
+ background: #2F427A;
+ color: #FFF;
+ border-bottom: 10px solid #262626;
+ font-size: 15px;
+}
+
+#main-navigation ul li {
+ padding-left: 15px;
+}
+
+#main-navigation ul li a {
+ padding: 8px 0;
+}
+
+#main-navigation ul li.active {
+ padding: 0;
+ margin-left: 15px;
+}
+
+#main-navigation ul li.active {
+ margin-left: 15px;
+}
+
+#main-navigation ul li.active a {
+ padding: 8px 15px;
+}
+
+#sidebar ul li a:link, #sidebar ul li a:visited {
+ background: #FFF;
+ border-bottom: 1px solid #F0F0EE;
+ text-decoration: none;
+}
+
+#sidebar ul li a:hover, #sidebar ul li a:active {
+ background: #316291;
+ color: #FFF;
+}
+
+#main-navigation {
+ background: #262626;
+}
+
+#main-navigation ul li {
+ background: #262626;
+ margin-right: 0;
+}
+
+#main-navigation ul li.active {
+ background: #f0f0ee;
+}
+
+#main-navigation ul li a:link, #main-navigation ul li a:visited, #main-navigation ul li a:hover, #main-navigation ul li a:active,
+.secondary-navigation ul li a:link, .secondary-navigation ul li a:visited, .secondary-navigation ul li a:hover, .secondary-navigation ul li a:active,
+#user-navigation ul li a:link, #user-navigation ul li a:visited, #user-navigation ul li a:hover, #user-navigation ul li a:active {
+ text-decoration: none;
+ color: #FFF;
+}
+
+.secondary-navigation li a:hover {
+ background: #5C637A;
+}
+
+#main-navigation ul li.active a:link, #main-navigation ul li.active a:visited, #main-navigation ul li.active a:hover, #main-navigation ul li.active a:active {
+ color: #262626;
+}
+
+.secondary-navigation {
+ background: #2F427A;
+ border-bottom-color: #262626;
+ font-size: 15px;
+}
+
+.secondary-navigation ul li.active, .secondary-navigation ul li.active a:hover {
+ background-color: #262626;
+}
+
+#footer .block {
+ color: #FFF;
+ background: #262626;
+}
+
+#footer .block p {
+ margin: 0;
+ padding: 10px;
+}
+
+/* pagination */
+
+.pagination span, .pagination a {
+ -moz-border-radius: 3px;
+ -webkit-border-radius: 3px;
+ padding-top: 4px;
+}
+
+.pagination span.current {
+ background: #262626;
+ color: #FFF;
+ border-color: #262626;
+}
+
+.pagination a {
+ color: #262626;
+ border-color: #262626;
+}
+
+.pagination a:hover {
+ color: #FFF;
+ background: #262626;
+}
+
+/* tables */
+
+.table th {
+ background: #262626;
+ color: #FFF;
+}
+
+.table td {
+ border-bottom:1px solid #F0F0EE;
+}
+
+/* forms */
+
+.form input.text_field, .form input.password_field, .form textarea.text_area {
+ width: 100%;
+ border: 1px solid #262626;
+}
+
+.form input.button {
+ padding: 5px 10px 5px 10px;
+ background-color:#2F427A;
+ text-decoration:none;
+ cursor: pointer;
+ color: #FFF;
+ font-size: 14px;
+ border:0px;
+ margin:0px;
+}
+
+.form .button:hover {
+ background: #262626;
+}
+
+.form .description {
+ font-style: italic;
+ color: #8C8C8C;
+ font-size: .9em;
+}
+
+/* flash-messages */
+.flash .message {
+ -moz-border-radius: 3px;
+ -webkit-border-radius: 3px;
+ text-align:center;
+ margin: 0 auto 15px;
+
+}
+
+.flash .message p {
+ margin:8px;
+}
+.flash .error {
+ border: 1px solid #fbb;
+ background-color: #fdd;
+}
+.flash .warning {
+ border: 1px solid #fffaaa;
+ background-color: #ffffcc;
+}
+.flash .notice {
+ border: 1px solid #1FDF00;
+ background-color: #BBFFB6;
+}
+
+/* lists */
+
+ul.list li {
+ border-bottom-color: #F0F0EE;
+ border-bottom-width: 1px;
+ border-bottom-style: solid;
+}
+
+ul.list li .item .avatar {
+ border-color: #F0F0EE;
+ border-width: 1px;
+ border-style: solid;
+ padding: 2px;
+}
+
+/* box */
+
+#box .block {
+ background: #FFF;
+}
+
+#box .block h2 {
+ background: #2F427A;
+ color: #FFF;
+}
+
+
+/* rounded borders */
+
+#main, #main-navigation, #main-navigation li, .secondary-navigation, #main .block, #sidebar .block, #sidebar h3, ul.list li,
+#footer .block, .form input.button, #box .block, #box .block h2 {
+ -moz-border-radius-topleft: 4px;
+ -webkit-border-top-left-radius: 4px;
+ -moz-border-radius-topright: 4px;
+ -webkit-border-top-right-radius: 4px;
+}
+
+.secondary-navigation li.first a, .secondary-navigation ul li.first, .table th.first, .table th.first {
+ -moz-border-radius-topleft: 4px;
+ -webkit-border-top-left-radius: 4px;
+}
+
+.table th.last {
+ -moz-border-radius-topright: 4px;
+ -webkit-border-top-right-radius: 4px;
+}
+
+.secondary-navigation ul li.first {
+ -moz-border-radius-topleft: 4px;
+ -webkit-border-top-left-radius: 4px;
+}
+
+#sidebar, #sidebar .block, #main .block, #sidebar ul.navigation, ul.list li, #footer .block, .form input.button, #box .block {
+ -moz-border-radius-bottomleft: 4px;
+ -webkit-border-bottom-left-radius: 4px;
+ -moz-border-radius-bottomright: 4px;
+ -webkit-border-bottom-right-radius: 4px;
+}
\ No newline at end of file
diff --git a/public/admin/stylesheets/themes/default/style.css b/public/admin/stylesheets/themes/default/style.css
new file mode 100644
index 0000000..a3f130d
--- /dev/null
+++ b/public/admin/stylesheets/themes/default/style.css
@@ -0,0 +1,373 @@
+/*
+
+ Drastic Dark
+ by Juan Maria Martinez Arce
+ juan[at]insignia4u.com
+
+ light grey: #cfcfcf
+ medium grey: #36393d
+ dark grey: #1a1a1a
+ interactive action yellow #ffff88
+ red #cc0000
+ light blue #E6EEFC
+ dark blue #0B43A8
+
+*/
+
+.small {
+ font-size: 11px;
+ font-style: normal;
+ font-weight: normal;
+ text-transform: normal;
+ letter-spacing: normal;
+ line-height: 1.4em;
+}
+
+.gray {
+ color:#999999;
+ font-family: Georgia, serif;
+ font-size: 13px;
+ font-style: italic;
+ font-weight: normal;
+ text-transform: normal;
+ letter-spacing: normal;
+ line-height: 1.6em;
+}
+
+.hightlight {
+ background-color: #ffff88;
+ font-weight: bold;
+ color: #36393d;
+}
+
+a:link, a:visited, a:hover, a:active, h1, h2, h3 { color: #36393d; }
+a { -moz-outline: none; }
+
+body {
+ color: #222;
+ background: #cfcfcf;
+ font-family: helvetica, arial, sans-serif;
+}
+
+hr {
+ background: #f0f0ee;
+ color: #f0f0ee;
+}
+
+#header {
+ background: #36393d;
+}
+
+#header h1 {
+ padding: 15px 0;
+ font-size: 28px;
+ font-style: normal;
+ font-weight: bold;
+ text-transform: normal;
+ letter-spacing: -1px;
+ line-height: 1.2em;
+}
+
+#header h1 a:link, #header h1 a:active, #header h1 a:hover, #header h1 a:visited {
+ color: #FFF;
+}
+
+#user-navigation {
+ top: auto;
+ bottom: 5px;
+ right: 25px;
+}
+
+#user-navigation a.logout {
+ background: #cc0000;
+ padding: 1px 4px;
+ -moz-border-radius: 4px;
+ -webkit-border-radius: 3px;
+}
+
+#main .block .content {
+ background: #FFF;
+ padding-top: 1px;
+}
+
+#main .block .content h2 {
+ margin-left: 15px;
+ font-size: 22px;
+ font-style: normal;
+ font-weight: bold;
+ text-transform: normal;
+ letter-spacing: -1px;
+ line-height: 1.2em;
+}
+
+#main .block .content p {
+ font-size: 13px;
+ font-style: normal;
+ font-weight: normal;
+ text-transform: normal;
+ letter-spacing: normal;
+ line-height: 1.45em;
+}
+
+#sidebar .block {
+ background: #FFF;
+}
+
+#sidebar .block h4 {
+ font-weight: bold;
+}
+
+#sidebar .notice {
+ background: #E6EEFC;
+}
+
+#sidebar .notice h4 {
+ color: #0B43A8;
+}
+
+#sidebar h3 {
+ background: #36393d;
+ color: #FFF;
+ border-bottom: 5px solid #1a1a1a;
+}
+
+#main-navigation ul li {
+ padding-left: 15px;
+}
+
+#main-navigation ul li a {
+ padding: 8px 0;
+}
+
+#main-navigation ul li.active {
+ padding: 0;
+ margin-left: 15px;
+}
+
+#main-navigation ul li.active {
+ margin-left: 15px;
+}
+
+#main-navigation ul li.active a {
+ padding: 8px 15px;
+}
+
+#sidebar ul li a:link, #sidebar ul li a:visited {
+ background: #FFF;
+ border-bottom: 1px solid #F0F0EE;
+ text-decoration: none;
+}
+
+#sidebar ul li a:hover, #sidebar ul li a:active {
+ background: #666666;
+ color: #ffffff;;
+}
+
+#main-navigation {
+ background: #1a1a1a;
+}
+
+#main-navigation ul li {
+ background: #1a1a1a;
+ margin-right: 0;
+}
+
+#main-navigation ul li.active {
+ background: #f0f0ee;
+}
+
+#main-navigation ul li a:link, #main-navigation ul li a:visited, #main-navigation ul li a:hover, #main-navigation ul li a:active,
+.secondary-navigation ul li a:link, .secondary-navigation ul li a:visited, .secondary-navigation ul li a:hover, .secondary-navigation ul li a:active,
+#user-navigation ul li a:link, #user-navigation ul li a:visited, #user-navigation ul li a:hover, #user-navigation ul li a:active {
+ text-decoration: none;
+ color: #FFF;
+}
+
+.secondary-navigation li a:hover {
+ background: #666666;
+}
+
+#main-navigation ul li.active a:link, #main-navigation ul li.active a:visited, #main-navigation ul li.active a:hover, #main-navigation ul li.active a:active {
+ color: #1a1a1a;
+}
+
+.secondary-navigation {
+ background: #36393d;
+ border-bottom-color: #1a1a1a;
+}
+
+.secondary-navigation ul li.active, .secondary-navigation ul li.active a:hover {
+ background-color: #1a1a1a;
+}
+
+#footer .block {
+ color: #FFF;
+ background: #1a1a1a;
+}
+
+#footer a {
+ color: #FFF;
+}
+
+#footer .block p {
+ margin: 0;
+ padding: 10px;
+}
+
+/* pagination */
+
+.pagination a, .pagination span {
+ background: #cfcfcf;
+ -moz-border-radius: 3px;
+ border: 1px solid #c1c1c1;
+}
+
+.pagination span.current {
+ background: #36393d;
+ color: #FFF;
+ border: 1px solid #36393d;
+}
+
+.pagination a {
+ color: #1a1a1a;
+}
+
+.pagination a:hover {
+ border: 1px solid #666;
+}
+
+/* tables */
+
+.table th {
+ background: #36393d;
+ color: #FFF;
+}
+
+.table td {
+ border-bottom:1px solid #F0F0EE;
+}
+
+.table tr.even {
+ background: #ebebeb;
+}
+
+/* forms */
+
+.form label.label {
+ color: #666666;
+}
+
+.form input.text_field, .form input.password_field, .form textarea.text_area {
+ width: 100%;
+ border: 1px solid #cfcfcf;
+}
+
+.form input.button {
+ padding: 5px 10px 5px 10px;
+ background-color:#36393D;
+ text-decoration:none;
+ cursor: pointer;
+ color: #FFF;
+ font-size: 14px;
+ border:0px;
+ margin:0px;
+}
+
+.form .button:hover {
+ background: #1A1A1A;
+}
+
+.form .description {
+ font-style: italic;
+ color: #8C8C8C;
+ font-size: .9em;
+}
+
+/* flash-messages */
+.flash .message {
+ -moz-border-radius: 3px;
+ -webkit-border-radius: 3px;
+ text-align:center;
+ margin: 0 auto 15px;
+
+}
+
+.flash .message p {
+ margin:8px;
+}
+.flash .error {
+ border: 1px solid #fbb;
+ background-color: #fdd;
+}
+.flash .warning {
+ border: 1px solid #fffaaa;
+ background-color: #ffffcc;
+}
+.flash .notice {
+ border: 1px solid #1FDF00;
+ background-color: #BBFFB6;
+}
+
+/* lists */
+
+ul.list li {
+ border-bottom-color: #F0F0EE;
+ border-bottom-width: 1px;
+ border-bottom-style: solid;
+}
+
+ul.list li .item .avatar {
+ border-color: #F0F0EE;
+ border-width: 1px;
+ border-style: solid;
+ padding: 2px;
+}
+
+/* box */
+
+#box .block {
+ background: #FFF;
+}
+
+#box .block h2 {
+ background: #36393d;
+ color: #FFF;
+}
+
+
+/* rounded borders */
+
+#main, #main-navigation, #main-navigation li, .secondary-navigation, #main .block, #sidebar .block, #sidebar h3, ul.list li,
+#footer .block, .form input.button, #box .block, #box .block h2 {
+ -moz-border-radius-topleft: 4px;
+ -webkit-border-top-left-radius: 4px;
+ -moz-border-radius-topright: 4px;
+ -webkit-border-top-right-radius: 4px;
+}
+
+.secondary-navigation li.first a, .secondary-navigation ul li.first, .table th.first, .table th.first {
+ -moz-border-radius-topleft: 4px;
+ -webkit-border-top-left-radius: 4px;
+}
+
+.table th.last {
+ -moz-border-radius-topright: 4px;
+ -webkit-border-top-right-radius: 4px;
+}
+
+.secondary-navigation ul li.first {
+ -moz-border-radius-topleft: 4px;
+ -webkit-border-top-left-radius: 4px;
+}
+
+#sidebar, #sidebar .block, #main .block, #sidebar ul.navigation, ul.list li, #footer .block, .form input.button, #box .block {
+ -moz-border-radius-bottomleft: 4px;
+ -webkit-border-bottom-left-radius: 4px;
+ -moz-border-radius-bottomright: 4px;
+ -webkit-border-bottom-right-radius: 4px;
+}
+
+.secondary-navigation {
+ border-bottom-width: 5px;
+}
+
diff --git a/public/admin/stylesheets/themes/djime-cerulean/style.css b/public/admin/stylesheets/themes/djime-cerulean/style.css
new file mode 100644
index 0000000..f466bfa
--- /dev/null
+++ b/public/admin/stylesheets/themes/djime-cerulean/style.css
@@ -0,0 +1,305 @@
+/**
+ * Cerulean web-app-theme made for Djime: http://github.com/mikl/djime/
+ *
+ * Please note that we're using CSSEdit's @group comment syntax.
+ *
+ * Colour sheme:
+ * Cerulean: #007BA7
+ * Bright blue: #01B8DE
+ * Near-white: #F7F7F8
+ * Silver grey: #C2C8D1
+ * Dark blue: #001C26
+ *
+ * http://www.colourlovers.com/palette/646252/Cerulean_touch
+ */
+
+/* @group General styles */
+
+.small { font-size:11px; }
+.gray { color:#999; }
+.hightlight { background-color:#ffc; }
+
+a:link, a:visited, a:hover, a:active, h1, h2, h3 { color: #007BA7; }
+
+body {
+ color: #222;
+ background: #C2C8D1;
+ font-family: "Helvetica Neue",Helvetica,Arial,"Bitstream Vera Sans",sans-serif;
+}
+
+hr {
+ background: #EEF0F0;
+ color: #EEF0F0;
+}
+
+/* @end */
+
+/* @group Header */
+
+#header {
+ background: #007BA7;
+}
+
+#header h1 {
+ padding: 20px 0;
+}
+
+#header h1 a:link, #header h1 a:active, #header h1 a:hover, #header h1 a:visited {
+ color: #F7F7F8;
+}
+
+/* @end */
+
+#user-navigation {
+ top: auto;
+ bottom: 5px;
+ right: 25px;
+}
+
+#main .block .content {
+ background: #F7F7F8;
+ padding-top: 1px;
+}
+
+#main .block .content h2 {
+ margin-left: 15px;
+}
+
+
+
+/* @group Main navigation */
+
+#main-navigation ul li {
+ padding-left: 0;
+}
+
+#main-navigation ul li a {
+ padding: 8px 0;
+}
+
+#main-navigation ul li a {
+ padding: 8px 15px;
+}
+
+#main-navigation {
+ background-color: #005573;
+}
+
+#main-navigation ul li a:hover {
+ background-color: #001C26;
+}
+
+#main-navigation ul li.active a {
+ background-color: #C2C8D1;
+ background: -webkit-gradient(linear, left top, left bottom, from(#C2C8D1), to(#C2C8D1), color-stop(0.5, #F7F7F8), color-stop(0.5, #F7F7F8));
+
+}
+
+/* @end */
+
+/* @group Secondary navigation */
+
+.secondary-navigation li a:hover {
+ background: #005573;
+}
+
+.secondary-navigation {
+ background: #007BA7;
+ border-bottom-width: 7px;
+ border-bottom-color: #005573;
+}
+
+.secondary-navigation ul li.active, .secondary-navigation ul li.active a:hover {
+ background-color: #005573;
+}
+
+/* @end */
+
+/* @group Sidebar */
+
+#sidebar .block {
+ background: #F7F7F8;
+}
+
+#sidebar h3 {
+ background: #007BA7;
+ color: #F7F7F8;
+ border-bottom: 7px solid #005573;
+}
+
+#sidebar ul li a:link, #sidebar ul li a:visited {
+ background: #F7F7F8;
+ border-bottom: 1px solid #EEF0F0;
+ text-decoration: none;
+}
+
+#sidebar ul li a:hover, #sidebar ul li a:active {
+ background: #005573;
+ color: #F7F7F8;
+}
+
+/* @end */
+
+#main-navigation ul li a:link, #main-navigation ul li a:visited, #main-navigation ul li a:hover, #main-navigation ul li a:active,
+.secondary-navigation ul li a:link, .secondary-navigation ul li a:visited, .secondary-navigation ul li a:hover, .secondary-navigation ul li a:active,
+#user-navigation ul li a:link, #user-navigation ul li a:visited, #user-navigation ul li a:hover, #user-navigation ul li a:active {
+ text-decoration: none;
+ color: #F7F7F8;
+}
+
+#main-navigation ul li.active a:link, #main-navigation ul li.active a:visited, #main-navigation ul li.active a:hover, #main-navigation ul li.active a:active {
+ color: #001C26;
+}
+
+#footer .block {
+ color: #F7F7F8;
+ background: #005573;
+}
+
+#footer .block p {
+ margin: 0;
+ padding: 10px;
+}
+
+/* pagination */
+
+.pagination span.current {
+ background: #005573;
+ color: #F7F7F8;
+ border-color: #005573;
+}
+
+.pagination a,
+.pagination span {
+ color: #001C26;
+ border-color: #005573;
+}
+
+.pagination a:hover {
+ color: #F7F7F8;
+ background: #005573;
+}
+
+/* tables */
+
+.table th {
+ background: #C2C8D1;
+ color: #001C26;
+}
+
+.table td {
+ border-bottom:1px solid #EEF0F0;
+}
+
+/* forms */
+
+.form input.text_field, .form input.password_field, .form textarea.text_area {
+ width: 100%;
+ border: 1px solid #001C26;
+}
+
+.form input.button {
+ padding: 5px 10px 5px 10px;
+ background-color:#007BA7;
+ text-decoration:none;
+ cursor: pointer;
+ color: #FFF;
+ font-size: 14px;
+ border:0px;
+ margin:0px;
+}
+
+.form .button:hover {
+ background: #005573;
+}
+
+.form .description {
+ color: #8C8C8C;
+ font-size: .9em;
+}
+
+/* @group Flash messages */
+
+.flash .message {
+ -moz-border-radius: 3px;
+ -webkit-border-radius: 3px;
+ text-align:center;
+ margin: 0 auto 15px;
+}
+
+.flash .message p {
+ margin:8px;
+}
+.flash .error {
+ border: 1px solid #fbb;
+ background-color: #fdd;
+}
+.flash .warning {
+ border: 1px solid #e0d300;
+ background-color: #ffffcc;
+}
+.flash .notice {
+ border: 1px solid #8ec4df;
+ background-color: #dffaff;
+}
+
+/* @end */
+
+/* lists */
+
+ul.list li {
+ border-bottom-color: #EEF0F0;
+ border-bottom-width: 1px;
+ border-bottom-style: solid;
+}
+
+ul.list li .item .avatar {
+ border-color: #EEF0F0;
+ border-width: 1px;
+ border-style: solid;
+ padding: 2px;
+}
+
+/* box */
+
+#box .block {
+ background: #F7F7F8;
+}
+
+#box .block h2 {
+ background: #005573;
+ color: #F7F7F8;
+}
+
+
+/* rounded borders */
+
+#main, #main-navigation, #main-navigation li, #main-navigation li a, .secondary-navigation, #main .block, #sidebar .block, #sidebar h3, ul.list li,
+#footer .block, .form input.button, #box .block, #box .block h2 {
+ -moz-border-radius-topleft: 4px;
+ -webkit-border-top-left-radius: 4px;
+ -moz-border-radius-topright: 4px;
+ -webkit-border-top-right-radius: 4px;
+}
+
+.secondary-navigation li.first a, .secondary-navigation ul li.first, .table th.first, .table th.first {
+ -moz-border-radius-topleft: 4px;
+ -webkit-border-top-left-radius: 4px;
+}
+
+.table th.last {
+ -moz-border-radius-topright: 4px;
+ -webkit-border-top-right-radius: 4px;
+}
+
+.secondary-navigation ul li.first {
+ -moz-border-radius-topleft: 4px;
+ -webkit-border-top-left-radius: 4px;
+}
+
+#sidebar, #sidebar .block, #main .block, #sidebar ul.navigation, ul.list li, #footer .block, .form input.button, #box .block {
+ -moz-border-radius-bottomleft: 4px;
+ -webkit-border-bottom-left-radius: 4px;
+ -moz-border-radius-bottomright: 4px;
+ -webkit-border-bottom-right-radius: 4px;
+}
\ No newline at end of file
diff --git a/public/admin/stylesheets/themes/kathleene/style.css b/public/admin/stylesheets/themes/kathleene/style.css
new file mode 100644
index 0000000..6b16791
--- /dev/null
+++ b/public/admin/stylesheets/themes/kathleene/style.css
@@ -0,0 +1,279 @@
+.small { font-size:11px; }
+.gray { color:#999999; }
+.hightlight { background-color:#FFFFCC; }
+
+a:link, a:visited, a:hover, a:active, h1, h2, h3 { color: #AF0000; }
+a { -moz-outline: none; }
+
+body {
+ color: #222;
+ background: #f0f0ee;
+ font-family: helvetica, arial, sans-serif;
+}
+
+hr {
+ background: #f0f0ee;
+ color: #f0f0ee;
+}
+
+#header {
+ background: #AF0000;
+}
+
+#header h1 {
+ padding: 20px 0;
+}
+
+#header h1 a:link, #header h1 a:active, #header h1 a:hover, #header h1 a:visited {
+ color: #FFF;
+}
+
+#user-navigation {
+ top: auto;
+ bottom: 5px;
+ right: 25px;
+}
+
+#main .block .content {
+ background: #FFF;
+ padding-top: 1px;
+}
+
+#main .block .content h2 {
+ margin-left: 15px;
+}
+
+#sidebar .block {
+ background: #FFF;
+}
+
+#sidebar h3 {
+ background: #AF0000;
+ color: #FFF;
+ border-bottom: 5px solid #2a0000;
+}
+
+#main-navigation ul li {
+ padding-left: 15px;
+}
+
+#main-navigation ul li a {
+ padding: 8px 0;
+}
+
+#main-navigation ul li.active {
+ padding: 0;
+ margin-left: 15px;
+}
+
+#main-navigation ul li.active {
+ margin-left: 15px;
+}
+
+#main-navigation ul li.active a {
+ padding: 8px 15px;
+}
+
+#sidebar ul li a:link, #sidebar ul li a:visited {
+ background: #FFF;
+ border-bottom: 1px solid #F0F0EE;
+ text-decoration: none;
+}
+
+#sidebar ul li a:hover, #sidebar ul li a:active {
+ background: #470E0E;
+ color: #FFF;
+}
+
+#main-navigation {
+ background: #2a0000;
+}
+
+#main-navigation ul li {
+ background: #2a0000;
+ margin-right: 0;
+}
+
+#main-navigation ul li.active {
+ background: #f0f0ee;
+}
+
+#main-navigation ul li a:link, #main-navigation ul li a:visited, #main-navigation ul li a:hover, #main-navigation ul li a:active,
+.secondary-navigation ul li a:link, .secondary-navigation ul li a:visited, .secondary-navigation ul li a:hover, .secondary-navigation ul li a:active,
+#user-navigation ul li a:link, #user-navigation ul li a:visited, #user-navigation ul li a:hover, #user-navigation ul li a:active {
+ text-decoration: none;
+ color: #FFF;
+}
+
+.secondary-navigation li a:hover {
+ background: #470E0E;
+}
+
+#main-navigation ul li.active a:link, #main-navigation ul li.active a:visited, #main-navigation ul li.active a:hover, #main-navigation ul li.active a:active {
+ color: #2a0000;
+}
+
+.secondary-navigation {
+ background: #AF0000;
+ border-bottom-color: #2a0000;
+}
+
+.secondary-navigation ul li.active, .secondary-navigation ul li.active a:hover {
+ background-color: #2a0000;
+}
+
+#footer .block {
+ color: #FFF;
+ background: #2a0000;
+}
+
+#footer .block p {
+ margin: 0;
+ padding: 10px;
+}
+
+/* pagination */
+
+.pagination span.current {
+ background: #2a0000;
+ color: #FFF;
+ border-color: #2a0000;
+}
+
+.pagination a {
+ color: #2a0000;
+ border-color: #2a0000;
+}
+
+.pagination a:hover {
+ color: #FFF;
+ background: #2a0000;
+}
+
+/* tables */
+
+.table th {
+ background: #100000;
+ border-bottom: 3px solid #700000;
+ color: #FFF;
+}
+
+.table td {
+ border-bottom:1px solid #F0F0EE;
+}
+
+/* forms */
+
+.form input.text_field, .form input.password_field, .form textarea.text_area {
+ width: 100%;
+ border: 1px solid #2a0000;
+}
+
+.form input.button {
+ padding: 5px 10px 5px 10px;
+ background-color:#AF0000;
+ text-decoration:none;
+ cursor: pointer;
+ color: #FFF;
+ font-size: 14px;
+ border:0px;
+ margin:0px;
+}
+
+.form .button:hover {
+ background: #2A0000;
+}
+
+.form .description {
+ font-style: italic;
+ color: #8C8C8C;
+ font-size: .9em;
+}
+
+/* flash-messages */
+.flash .message {
+ -moz-border-radius: 3px;
+ -webkit-border-radius: 3px;
+ text-align:center;
+ margin: 0 auto 15px;
+
+}
+
+.flash .message p {
+ margin:8px;
+}
+.flash .error {
+ border: 1px solid #fbb;
+ background-color: #fdd;
+}
+.flash .warning {
+ border: 1px solid #fffaaa;
+ background-color: #ffffcc;
+}
+.flash .notice {
+ border: 1px solid #1FDF00;
+ background-color: #BBFFB6;
+}
+
+/* lists */
+
+ul.list li {
+ border-bottom-color: #F0F0EE;
+ border-bottom-width: 1px;
+ border-bottom-style: solid;
+}
+
+ul.list li .item .avatar {
+ border-color: #F0F0EE;
+ border-width: 1px;
+ border-style: solid;
+ padding: 2px;
+}
+
+/* box */
+
+#box .block {
+ background: #FFF;
+}
+
+#box .block h2 {
+ background: #AF0000;
+ color: #FFF;
+}
+
+
+/* rounded borders */
+
+#main, #main-navigation, #main-navigation li, .secondary-navigation, #main .block, #sidebar .block, #sidebar h3, ul.list li,
+#footer .block, .form input.button, #box .block, #box .block h2 {
+ -moz-border-radius-topleft: 4px;
+ -webkit-border-top-left-radius: 4px;
+ -moz-border-radius-topright: 4px;
+ -webkit-border-top-right-radius: 4px;
+}
+
+.secondary-navigation li.first a, .secondary-navigation ul li.first, .table th.first, .table th.first {
+ -moz-border-radius-topleft: 4px;
+ -webkit-border-top-left-radius: 4px;
+}
+
+.table th.last {
+ -moz-border-radius-topright: 4px;
+ -webkit-border-top-right-radius: 4px;
+}
+
+.secondary-navigation ul li.first {
+ -moz-border-radius-topleft: 4px;
+ -webkit-border-top-left-radius: 4px;
+}
+
+#sidebar, #sidebar .block, #main .block, #sidebar ul.navigation, ul.list li, #footer .block, .form input.button, #box .block {
+ -moz-border-radius-bottomleft: 4px;
+ -webkit-border-bottom-left-radius: 4px;
+ -moz-border-radius-bottomright: 4px;
+ -webkit-border-bottom-right-radius: 4px;
+}
+
+.secondary-navigation {
+ border-bottom-width: 5px;
+}
diff --git a/public/admin/stylesheets/themes/olive/style.css b/public/admin/stylesheets/themes/olive/style.css
new file mode 100644
index 0000000..aa6685f
--- /dev/null
+++ b/public/admin/stylesheets/themes/olive/style.css
@@ -0,0 +1,345 @@
+.small {
+ font-size: 11px;
+ font-style: normal;
+ font-weight: normal;
+ text-transform: normal;
+ letter-spacing: normal;
+ line-height: 1.4em;
+}
+
+.gray {
+ color:#999999;
+ font-family: Georgia, serif;
+ font-size: 13px;
+ font-style: italic;
+ font-weight: normal;
+ text-transform: normal;
+ letter-spacing: normal;
+ line-height: 1.6em;
+}
+
+.hightlight {
+ background-color: #ffff88;
+ font-weight: bold;
+ color: #36393d;
+}
+
+a:link, a:visited, a:hover, a:active, h1, h2, h3 { color: #A3AB74; }
+a { -moz-outline: none; }
+
+body {
+ color: #222;
+ background: #EFF3E4;
+ font-family: helvetica,Arial,sans-serif;
+}
+
+hr {
+ background: #f0f0ee;
+ color: #f0f0ee;
+}
+
+p {
+ margin: 10px 0;
+
+}
+
+#header {
+ background: #5E634E;
+}
+
+#header h1 {
+ padding: 15px 0;
+ font-size: 28px;
+ font-style: normal;
+ font-weight: bold;
+ text-transform: normal;
+ letter-spacing: -1px;
+ line-height: 1.2em;
+}
+
+#header h1 a:link, #header h1 a:active, #header h1 a:hover, #header h1 a:visited {
+ color: #FFF;
+}
+
+#user-navigation {
+ top: auto;
+ bottom: 5px;
+ right: 25px;
+}
+
+#main .block .content {
+ background: #FFF;
+ padding-top: 1px;
+}
+
+#main .block .content h2 {
+ margin-left: 15px;
+}
+
+#main .block .content p {
+ font-size:13px;
+ line-height:1.45em;
+}
+
+#main .block .content h2 {
+ font-size:22px;
+ font-style:normal;
+ font-weight:bold;
+ letter-spacing:-1px;
+ line-height:1.2em;
+ margin-left:15px;
+}
+
+#sidebar .block {
+ background: #FFF;
+}
+
+#sidebar .notice {
+ background: #869453;
+ color: #fff;
+}
+
+#sidebar h3 {
+ background: #5E634E;
+ color: #FFF;
+ border-bottom: 6px solid #DACF77;
+}
+
+#main-navigation ul li {
+ padding-left: 15px;
+}
+
+#main-navigation ul li a {
+ padding: 8px 0;
+}
+
+#main-navigation ul li.active {
+ padding: 0;
+ margin-left: 15px;
+}
+
+#main-navigation ul li.active {
+ margin-left: 15px;
+}
+
+#main-navigation ul li.active a {
+ padding: 8px 15px;
+}
+
+#sidebar ul li a:link, #sidebar ul li a:visited {
+ background: #FFF;
+ border-bottom: 1px solid #F0F0EE;
+ text-decoration: none;
+}
+
+#sidebar ul li a:hover, #sidebar ul li a:active {
+ background: #ADBFD6;
+ color: #FFF;
+}
+
+#main-navigation {
+ background: #DACF77;
+}
+
+#main-navigation ul li {
+ background: #DACF77;
+ margin-right: 0;
+}
+
+#main-navigation ul li.active {
+ background: #EFF3E4;
+}
+
+#main-navigation ul li a:link, #main-navigation ul li a:visited, #main-navigation ul li a:hover, #main-navigation ul li a:active,
+.secondary-navigation ul li a:link, .secondary-navigation ul li a:visited, .secondary-navigation ul li a:hover, .secondary-navigation ul li a:active,
+#user-navigation ul li a:link, #user-navigation ul li a:visited, #user-navigation ul li a:hover, #user-navigation ul li a:active {
+ text-decoration: none;
+ color: #FFF;
+}
+
+#user-navigation a.logout {
+ background: #cc0000;
+ padding: 2px 6px;
+ -moz-border-radius: 4px;
+ -webkit-border-radius: 3px;
+}
+
+.secondary-navigation li a:hover {
+ background: #ADBFD6;
+}
+
+#main-navigation ul li.active a:link, #main-navigation ul li.active a:visited, #main-navigation ul li.active a:hover, #main-navigation ul li.active a:active {
+ color: #262626;
+}
+
+.secondary-navigation {
+ background: #5E634E;
+ border-bottom: 6px solid #DACF77;
+}
+
+.secondary-navigation ul li.active, .secondary-navigation ul li.active a:hover {
+ background-color: #DACF77;
+}
+
+.secondary-navigation ul li a {
+ padding:8px 12px;
+}
+
+#footer .block {
+ color: #FFF;
+ background: #262626;
+}
+
+#footer .block p {
+ margin: 0;
+ padding: 10px;
+}
+
+/* pagination */
+
+.pagination span.disabled {
+ color: #bbb;
+ border-color: #bbb;
+}
+
+.pagination span.current {
+ background: #869453;
+ color: #FFF;
+ border-color: #869453;
+}
+
+.pagination a, .pagination span {
+ color: #869453;
+ border-color: #869453;
+}
+
+.pagination a:hover {
+ color: #FFF;
+ background: #869453;
+}
+
+/* tables */
+
+.table th {
+ background: #5E634E;
+ color: #FFF;
+}
+
+.table td {
+ border-bottom:1px solid #F0F0EE;
+}
+
+.table tr.even {
+ background: #EFF3E4;
+}
+/* forms */
+
+.form input.text_field, .form input.password_field, .form textarea.text_area {
+ width: 100%;
+ border:1px solid #CFCFCF;
+}
+
+.form input.button {
+ padding: 5px 10px 5px 10px;
+ background-color:#5E634E;
+ text-decoration:none;
+ cursor: pointer;
+ color: #FFF;
+ font-size: 14px;
+ border:0px;
+ margin:0px;
+}
+
+.form .button:hover {
+ background: #ADBFD6;
+}
+
+.form .description {
+ font-style: italic;
+ color: #8C8C8C;
+ font-size: .9em;
+}
+
+/* flash-messages */
+.flash .message {
+ -moz-border-radius: 3px;
+ -webkit-border-radius: 3px;
+ text-align:center;
+ margin: 0 auto 15px;
+
+}
+
+.flash .message p {
+ margin:8px;
+}
+.flash .error {
+ border: 1px solid #fbb;
+ background-color: #fdd;
+}
+.flash .warning {
+ border: 1px solid #fffaaa;
+ background-color: #ffffcc;
+}
+.flash .notice {
+ border: 1px solid #1FDF00;
+ background-color: #BBFFB6;
+}
+
+/* lists */
+
+ul.list li {
+ border-bottom-color: #F0F0EE;
+ border-bottom-width: 1px;
+ border-bottom-style: solid;
+}
+
+ul.list li .item .avatar {
+ border-color: #F0F0EE;
+ border-width: 1px;
+ border-style: solid;
+ padding: 2px;
+}
+
+/* box */
+
+#box .block {
+ background: #FFF;
+}
+
+#box .block h2 {
+ background: #869453;
+ color: #FFF;
+}
+
+
+/* rounded borders */
+
+#main, #main-navigation, #main-navigation li, .secondary-navigation, #main .block, #sidebar .block, #sidebar h3, ul.list li,
+#footer .block, .form input.button, #box .block, #box .block h2 {
+ -moz-border-radius-topleft: 4px;
+ -webkit-border-top-left-radius: 4px;
+ -moz-border-radius-topright: 4px;
+ -webkit-border-top-right-radius: 4px;
+}
+
+.secondary-navigation li.first a, .secondary-navigation ul li.first, .table th.first, .table th.first {
+ -moz-border-radius-topleft: 4px;
+ -webkit-border-top-left-radius: 4px;
+}
+
+.table th.last {
+ -moz-border-radius-topright: 4px;
+ -webkit-border-top-right-radius: 4px;
+}
+
+.secondary-navigation ul li.first {
+ -moz-border-radius-topleft: 4px;
+ -webkit-border-top-left-radius: 4px;
+}
+
+#sidebar, #sidebar .block, #main .block, #sidebar ul.navigation, ul.list li, #footer .block, .form input.button, #box .block {
+ -moz-border-radius-bottomleft: 4px;
+ -webkit-border-bottom-left-radius: 4px;
+ -moz-border-radius-bottomright: 4px;
+ -webkit-border-bottom-right-radius: 4px;
+}
\ No newline at end of file
diff --git a/public/admin/stylesheets/themes/orange/style.css b/public/admin/stylesheets/themes/orange/style.css
new file mode 100644
index 0000000..0291bfe
--- /dev/null
+++ b/public/admin/stylesheets/themes/orange/style.css
@@ -0,0 +1,269 @@
+.small { font-size:11px; }
+.gray { color:#999999; }
+.hightlight { background-color:#FFFFCC; }
+
+a:link, a:visited, a:hover, a:active, h1, h2, h3 { color: #ff7900; }
+a { -moz-outline: none; }
+
+body {
+ color: #222;
+ background: #f0f0ee;
+ font-family: helvetica, arial, sans-serif;
+}
+
+hr {
+ background: #f0f0ee;
+ color: #f0f0ee;
+}
+
+#header {
+ background: #ff7900;
+}
+
+#header h1 a:link, #header h1 a:active, #header h1 a:hover, #header h1 a:visited {
+ color: #FFF;
+}
+
+#user-navigation {
+ top: auto;
+ bottom: 5px;
+ right: 25px;
+}
+
+#main .block .content {
+ background: #FFF;
+ padding-top: 1px;
+}
+
+#main .block .content h2 {
+ margin-left: 15px;
+}
+
+#sidebar .block {
+ background: #FFF;
+}
+
+#sidebar h3 {
+ background: #ff7900;
+ color: #FFF;
+ border-bottom: 10px solid #262626;
+}
+
+#main-navigation ul li {
+ padding-left: 15px;
+}
+
+#main-navigation ul li a {
+ padding: 8px 0;
+}
+
+#main-navigation ul li.active {
+ padding: 0;
+ margin-left: 15px;
+}
+
+#main-navigation ul li.active {
+ margin-left: 15px;
+}
+
+#main-navigation ul li.active a {
+ padding: 8px 15px;
+}
+
+#sidebar ul li a:link, #sidebar ul li a:visited {
+ background: #FFF;
+ border-bottom: 1px solid #F0F0EE;
+ text-decoration: none;
+}
+
+#sidebar ul li a:hover, #sidebar ul li a:active {
+ background: #863800;
+ color: #FFF;
+}
+
+#main-navigation {
+ background: #262626;
+}
+
+#main-navigation ul li {
+ background: #262626;
+ margin-right: 0;
+}
+
+#main-navigation ul li.active {
+ background: #f0f0ee;
+}
+
+#main-navigation ul li a:link, #main-navigation ul li a:visited, #main-navigation ul li a:hover, #main-navigation ul li a:active,
+.secondary-navigation ul li a:link, .secondary-navigation ul li a:visited, .secondary-navigation ul li a:hover, .secondary-navigation ul li a:active,
+#user-navigation ul li a:link, #user-navigation ul li a:visited, #user-navigation ul li a:hover, #user-navigation ul li a:active {
+ text-decoration: none;
+ color: #FFF;
+}
+
+.secondary-navigation li a:hover {
+ background: #863800;
+}
+
+#main-navigation ul li.active a:link, #main-navigation ul li.active a:visited, #main-navigation ul li.active a:hover, #main-navigation ul li.active a:active {
+ color: #262626;
+}
+
+.secondary-navigation {
+ background: #ff7900;
+ border-bottom-color: #262626;
+}
+
+.secondary-navigation ul li.active, .secondary-navigation ul li.active a:hover {
+ background-color: #262626;
+}
+
+#footer .block {
+ color: #FFF;
+ background: #262626;
+}
+
+#footer .block p {
+ margin: 0;
+ padding: 10px;
+}
+
+/* pagination */
+
+.pagination span.current {
+ background: #262626;
+ color: #FFF;
+ border-color: #262626;
+}
+
+.pagination a {
+ color: #262626;
+ border-color: #262626;
+}
+
+.pagination a:hover {
+ color: #FFF;
+ background: #262626;
+}
+
+/* tables */
+
+.table th {
+ background: #262626;
+ color: #FFF;
+}
+
+.table td {
+ border-bottom:1px solid #F0F0EE;
+}
+
+/* forms */
+
+.form input.text, .form textarea {
+ width: 100%;
+ border: 1px solid #262626;
+}
+
+.form input.button {
+ padding: 5px 10px 5px 10px;
+ background-color:#FF7900;
+ text-decoration:none;
+ cursor: pointer;
+ color: #FFF;
+ font-size: 14px;
+ border:0px;
+ margin:0px;
+}
+
+.form .button:hover {
+ background: #843700;
+}
+
+.form .description {
+ font-style: italic;
+ color: #8C8C8C;
+ font-size: .9em;
+}
+
+/* flash-messages */
+.flash .message {
+ -moz-border-radius: 3px;
+ -webkit-border-radius: 3px;
+ text-align:center;
+ margin:0 auto 5px;
+
+}
+.flash .message p {
+ margin:8px;
+}
+.flash .error {
+ border: 1px solid #fbb;
+ background-color: #fdd;
+}
+.flash .warning {
+ border: 1px solid #fffaaa;
+ background-color: #ffffcc;
+}
+.flash .notice {
+ border: 1px solid #1FDF00;
+ background-color: #BBFFB6;
+}
+
+/* lists */
+
+ul.list li {
+ border-bottom-color: #F0F0EE;
+ border-bottom-width: 1px;
+ border-bottom-style: solid;
+}
+
+ul.list li .item .avatar {
+ border-color: #F0F0EE;
+ border-width: 1px;
+ border-style: solid;
+ padding: 2px;
+}
+
+/* box */
+
+#box .block {
+ background: #FFF;
+}
+
+#box .block h2 {
+ background: #ff7900;
+ color: #FFF;
+}
+
+
+/* rounded borders */
+
+#main, #main-navigation, #main-navigation li, .secondary-navigation, #main .block, #sidebar .block, #sidebar h3, ul.list li,
+#footer .block, .form input.button, #box .block, #box .block h2 {
+ -moz-border-radius-topleft: 4px;
+ -webkit-border-top-left-radius: 4px;
+ -moz-border-radius-topright: 4px;
+ -webkit-border-top-right-radius: 4px;
+}
+
+.secondary-navigation li.first a, .secondary-navigation ul li.first, .table th.first, .table th.first {
+ -moz-border-radius-topleft: 4px;
+ -webkit-border-top-left-radius: 4px;
+}
+
+.table th.last {
+ -moz-border-radius-topright: 4px;
+ -webkit-border-top-right-radius: 4px;
+}
+
+.secondary-navigation ul li.first {
+ -moz-border-radius-topleft: 4px;
+ -webkit-border-top-left-radius: 4px;
+}
+
+#sidebar, #sidebar .block, #main .block, #sidebar ul.navigation, ul.list li, #footer .block, .form input.button, #box .block {
+ -moz-border-radius-bottomleft: 4px;
+ -webkit-border-bottom-left-radius: 4px;
+ -moz-border-radius-bottomright: 4px;
+ -webkit-border-bottom-right-radius: 4px;
+}
\ No newline at end of file
diff --git a/public/admin/stylesheets/themes/reidb-greenish/style.css b/public/admin/stylesheets/themes/reidb-greenish/style.css
new file mode 100644
index 0000000..de81f9e
--- /dev/null
+++ b/public/admin/stylesheets/themes/reidb-greenish/style.css
@@ -0,0 +1,302 @@
+.small { font-size:11px; }
+.gray { color:#a2b0b6; }
+.hightlight { background-color:#d6e7c7; }
+
+a:link, a:visited, a:hover, a:active { color: #81B953; }
+h1, h2, h3 { color: #3B5526; }
+a { -moz-outline: none; }
+
+body {
+ color: #222;
+ background: #e4ebe4;
+ font-family: helvetica, arial, sans-serif;
+}
+
+hr {
+ background: #f0f0ee;
+ color: #f0f0ee;
+}
+
+#header {
+ background: #c9deb7;
+
+}
+
+#header h1{
+ padding: 20px 0;
+ font-weight: bold;
+
+}
+
+#header h1 a:link, #header h1 a:active,
+#header h1 a:hover, #header h1 a:visited {
+ color: #3B5526;
+}
+
+#main .block .content {
+ background: #FFF;
+ padding-top: 1px;
+}
+
+#main .block .content h2 {
+ margin-left: 15px;
+}
+
+#main .content { border: 1px solid #81B953;}
+
+#sidebar .block {
+ background: #FFF;
+ border: none;
+}
+
+#sidebar h3 {
+ padding: 8px 12px;
+ background: #3B5526;
+ color: #FFF;
+ font-weight: bold;
+ border-bottom: 5px solid #81B953;
+}
+
+
+#sidebar ul li a:link,
+#sidebar ul li a:visited {
+ background: #FFF;
+ border-bottom: 1px solid #F0F0EE;
+ text-decoration: none;
+}
+
+#sidebar ul li a:hover,
+#sidebar ul li a:active {
+ background: #D3E8C1;
+ color: #FFF;
+}
+
+#main-navigation {
+ background: #44721e;
+ margin-right: 20px;
+ padding: 7px 7px 0 7px;
+}
+
+#main-navigation ul li {
+ background: #91B96F;
+ margin-right: 7px;
+}
+
+#main-navigation ul li a {
+ padding: 10px 10px 5px 10px;
+}
+
+#main-navigation ul li.active {
+ background: #e4ebe4;
+ border: 1px solid #91B96F;
+ border-bottom: none;
+ font-weight: bold;
+}
+
+#main-navigation ul li a:hover,
+#main-navigation ul li a:link,
+#main-navigation ul li a:visited,
+#main-navigation ul li a:active,
+.secondary-navigation ul li a:link, .secondary-navigation ul li a:visited,
+.secondary-navigation ul li a:hover, .secondary-navigation ul li a:active {
+ text-decoration: none;
+ color: #FFF;
+}
+
+#user-navigation ul li a:link,
+#user-navigation ul li a:visited,
+#user-navigation ul li a:active {
+ color: #3B5526;
+}
+
+#user-navigation ul li a:hover { color: #fff; }
+
+#main-navigation ul li.active a:link,
+#main-navigation ul li.active a:visited,
+#main-navigation ul li.active a:hover,
+#main-navigation ul li.active a:active {
+ color: #262626;
+}
+
+.secondary-navigation {
+ background: #3B5526;
+ border-bottom: 5px solid #81b953;
+}
+
+.secondary-navigation ul li a {
+display:block;
+padding: 8px 12px;
+}
+
+.secondary-navigation ul li.active {background: #81b953; font-weight: bold;}
+.secondary-navigation ul li.active a:hover {
+ background-color: #81B953;
+}
+
+.secondary-navigation li a:hover {
+ background: #81B953;
+}
+
+#footer .block {
+ color: #FFF;
+ background: #3B5526;
+}
+
+#footer .block p {
+ margin: 0;
+ padding: 5px;
+}
+
+/* pagination */
+
+.pagination span.current {
+ background: #262626;
+ color: #FFF;
+ border-color: #262626;
+}
+
+.pagination a {
+ color: #262626;
+ border-color: #262626;
+}
+
+.pagination a:hover {
+ color: #FFF;
+ background: #262626;
+}
+
+/* tables */
+
+
+.table th {
+ background: #253618;
+ color: #FFF;
+}
+
+.table tr th { padding: 5px; }
+
+.table td {
+ border-bottom:1px solid #F0F0EE;
+}
+.table tr.odd {background: #ebfadf;}
+.table tr.even {background: #d3e8c1;}
+
+
+/* forms */
+
+.form input.text_field, .form input.password_field, .form textarea.text_area {
+ width: 100%;
+ border: 1px solid #262626;
+}
+
+.form input.button {
+ padding: 5px 10px 5px 10px;
+ background-color:#3B5526;
+ text-decoration:none;
+ cursor: pointer;
+ color: #FFF;
+ font-size: 14px;
+ border:0px;
+ margin:0px;
+}
+
+.form .button:hover {
+ background: #81B953;
+}
+
+/* flash-messages */
+.flash .message {
+ -moz-border-radius: 3px;
+ -webkit-border-radius: 3px;
+ text-align:center;
+ margin: 0 auto 15px;
+
+}
+
+.flash .message p {
+ margin:8px;
+}
+.flash .error {
+ border: 1px solid #fbb;
+ background-color: #fdd;
+}
+.flash .warning {
+ border: 1px solid #fffaaa;
+ background-color: #ffffcc;
+}
+.flash .notice {
+ border: 1px solid #1FDF00;
+ background-color: #BBFFB6;
+}
+
+/* lists */
+
+ul.list li {
+ border-bottom-color: #F0F0EE;
+ border-bottom-width: 1px;
+ border-bottom-style: solid;
+}
+
+ul.list li .item .avatar {
+ border-color: #F0F0EE;
+ border-width: 1px;
+ border-style: solid;
+ padding: 2px;
+}
+
+/* box */
+
+#box .block {
+ background: #FFF;
+}
+
+#box .block h2 {
+ color: #fff;
+ background: #3B5526;
+ border-bottom: 5px solid #81b953;
+}
+
+#box .block .content { border: 1px solid #81b953; border}
+
+/* login */
+
+#block-login { }
+#block-login h2 { background: #3B5526;border-bottom: 5px solid #81b953;}
+
+/* rounded borders */
+
+#main, #main-navigation, #main-navigation li,
+.secondary-navigation, #main .block, #sidebar .block,
+#sidebar h3, ul.list li, #footer .block,
+.form input.button, #box .block, #box .block h2 {
+ -moz-border-radius-topleft: 4px;
+ -webkit-border-top-left-radius: 4px;
+ -moz-border-radius-topright: 4px;
+ -webkit-border-top-right-radius: 4px;
+}
+
+.secondary-navigation li.first a,
+.secondary-navigation ul li.first,
+.table th.first, .table th.first {
+ -moz-border-radius-topleft: 4px;
+ -webkit-border-top-left-radius: 4px;
+}
+
+.table th.last {
+ -moz-border-radius-topright: 4px;
+ -webkit-border-top-right-radius: 4px;
+}
+
+.secondary-navigation ul li.first {
+ -moz-border-radius-topleft: 4px;
+ -webkit-border-top-left-radius: 4px;
+}
+
+#sidebar, #sidebar .block, #main .block,
+#sidebar ul.navigation, ul.list li,
+#footer .block, .form input.button, #box .block {
+ -moz-border-radius-bottomleft: 4px;
+ -webkit-border-bottom-left-radius: 4px;
+ -moz-border-radius-bottomright: 4px;
+ -webkit-border-bottom-right-radius: 4px;
+}
\ No newline at end of file
diff --git a/public/admin/stylesheets/themes/ruby/style.css b/public/admin/stylesheets/themes/ruby/style.css
new file mode 100644
index 0000000..17959e1
--- /dev/null
+++ b/public/admin/stylesheets/themes/ruby/style.css
@@ -0,0 +1,281 @@
+.small { font-size:11px; }
+.gray { color:#999999; }
+.hightlight { background-color:#FFFFCC; }
+
+a:link, a:visited, a:hover, a:active, h1, h2, h3 { color: #7A1818; }
+a { -moz-outline: none; }
+
+body {
+ color: #222;
+ background: #e5e5e5;
+ font-family: helvetica, arial, sans-serif;
+}
+
+hr {
+ background: #f0f0ee;
+ color: #f0f0ee;
+}
+
+#header {
+ background: #7A1818;
+}
+
+#header h1 {
+ padding: 15px 0;
+}
+
+#header h1 a:link, #header h1 a:active, #header h1 a:hover, #header h1 a:visited {
+ color: #FFF;
+}
+
+#user-navigation {
+ top: auto;
+ bottom: 5px;
+ right: 25px;
+}
+
+#main .block .content {
+ background: #FFF;
+ padding-top: 1px;
+}
+
+#main .block .content h2 {
+ margin-left: 15px;
+}
+
+#sidebar .block {
+ background: #FFF;
+}
+
+#sidebar h3 {
+ background: #7A1818;
+ color: #FFF;
+ border-bottom: 10px solid #262626;
+}
+
+#main-navigation ul li {
+ padding-left: 15px;
+}
+
+#main-navigation ul li a {
+ padding: 8px 0;
+}
+
+#main-navigation ul li.active {
+ padding: 0;
+ margin-left: 15px;
+}
+
+#main-navigation ul li.active {
+ margin-left: 15px;
+}
+
+#main-navigation ul li.active a {
+ padding: 8px 15px;
+}
+
+#sidebar ul li a:link, #sidebar ul li a:visited {
+ background: #FFF;
+ border-bottom: 1px solid #F0F0EE;
+ text-decoration: none;
+}
+
+#sidebar ul li a:hover, #sidebar ul li a:active {
+ background: #470E0E;
+ color: #FFF;
+}
+
+#main-navigation {
+ background: #262626;
+}
+
+#main-navigation ul li {
+ background: #262626;
+ margin-right: 0;
+}
+
+#main-navigation ul li.active {
+ background: #e5e5e5;
+}
+
+#main-navigation ul li a:link, #main-navigation ul li a:visited, #main-navigation ul li a:hover, #main-navigation ul li a:active,
+.secondary-navigation ul li a:link, .secondary-navigation ul li a:visited, .secondary-navigation ul li a:hover, .secondary-navigation ul li a:active,
+#user-navigation ul li a:link, #user-navigation ul li a:visited, #user-navigation ul li a:hover, #user-navigation ul li a:active {
+ text-decoration: none;
+ color: #FFF;
+}
+
+#user-navigation a.logout {
+ background: #cc0000;
+ padding: 2px 6px;
+ -moz-border-radius: 4px;
+ -webkit-border-radius: 3px;
+}
+
+.secondary-navigation li a:hover {
+ background: #470E0E;
+}
+
+#main-navigation ul li.active a:link, #main-navigation ul li.active a:visited, #main-navigation ul li.active a:hover, #main-navigation ul li.active a:active {
+ color: #262626;
+}
+
+.secondary-navigation {
+ background: #7A1818;
+ border-bottom-color: #262626;
+}
+
+.secondary-navigation ul li.active, .secondary-navigation ul li.active a:hover {
+ background-color: #262626;
+}
+
+#footer .block {
+ color: #FFF;
+ background: #262626;
+}
+
+#footer .block p {
+ margin: 0;
+ padding: 10px;
+}
+
+/* pagination */
+
+.pagination span.current {
+ background: #262626;
+ color: #FFF;
+ border-color: #262626;
+}
+
+.pagination a {
+ color: #262626;
+ border-color: #262626;
+}
+
+.pagination a:hover {
+ color: #FFF;
+ background: #262626;
+}
+
+/* tables */
+
+.table th {
+ background: #262626;
+ color: #FFF;
+}
+
+.table td {
+ border-bottom:1px solid #F0F0EE;
+}
+
+/* forms */
+
+.form input.text_field, .form input.password_field, .form textarea.text_area {
+ width: 100%;
+ border: 1px solid #262626;
+}
+
+.form input.button {
+ padding: 5px 10px 5px 10px;
+ background-color:#7A1818;
+ text-decoration:none;
+ cursor: pointer;
+ color: #FFF;
+ font-size: 14px;
+ border:0px;
+ margin:0px;
+}
+
+.form .button:hover {
+ background: #470E0E;
+}
+
+.form .description {
+ font-style: italic;
+ color: #8C8C8C;
+ font-size: .9em;
+}
+
+/* flash-messages */
+.flash .message {
+ -moz-border-radius: 3px;
+ -webkit-border-radius: 3px;
+ text-align:center;
+ margin: 0 auto 15px;
+
+}
+
+.flash .message p {
+ margin:8px;
+}
+.flash .error {
+ border: 1px solid #fbb;
+ background-color: #fdd;
+}
+.flash .warning {
+ border: 1px solid #fffaaa;
+ background-color: #ffffcc;
+}
+.flash .notice {
+ border: 1px solid #1FDF00;
+ background-color: #BBFFB6;
+}
+
+/* lists */
+
+ul.list li {
+ border-bottom-color: #F0F0EE;
+ border-bottom-width: 1px;
+ border-bottom-style: solid;
+}
+
+ul.list li .item .avatar {
+ border-color: #F0F0EE;
+ border-width: 1px;
+ border-style: solid;
+ padding: 2px;
+}
+
+/* box */
+
+#box .block {
+ background: #FFF;
+}
+
+#box .block h2 {
+ background: #7A1818;
+ color: #FFF;
+}
+
+
+/* rounded borders */
+
+#main, #main-navigation, #main-navigation li, .secondary-navigation, #main .block, #sidebar .block, #sidebar h3, ul.list li,
+#footer .block, .form input.button, #box .block, #box .block h2 {
+ -moz-border-radius-topleft: 4px;
+ -webkit-border-top-left-radius: 4px;
+ -moz-border-radius-topright: 4px;
+ -webkit-border-top-right-radius: 4px;
+}
+
+.secondary-navigation li.first a, .secondary-navigation ul li.first, .table th.first, .table th.first {
+ -moz-border-radius-topleft: 4px;
+ -webkit-border-top-left-radius: 4px;
+}
+
+.table th.last {
+ -moz-border-radius-topright: 4px;
+ -webkit-border-top-right-radius: 4px;
+}
+
+.secondary-navigation ul li.first {
+ -moz-border-radius-topleft: 4px;
+ -webkit-border-top-left-radius: 4px;
+}
+
+#sidebar, #sidebar .block, #main .block, #sidebar ul.navigation, ul.list li, #footer .block, .form input.button, #box .block {
+ -moz-border-radius-bottomleft: 4px;
+ -webkit-border-bottom-left-radius: 4px;
+ -moz-border-radius-bottomright: 4px;
+ -webkit-border-bottom-right-radius: 4px;
+}
\ No newline at end of file
diff --git a/public/admin/stylesheets/themes/warehouse/style.css b/public/admin/stylesheets/themes/warehouse/style.css
new file mode 100644
index 0000000..d0b28a9
--- /dev/null
+++ b/public/admin/stylesheets/themes/warehouse/style.css
@@ -0,0 +1,391 @@
+a:link, a:visited { color: #07b; text-decoration: none; }
+a, a:hover, a:active { color: #d30; }
+h1, h2, h3 {color: #444}
+
+body {
+ color: #333;
+ background: #EBEBEB;
+ font: normal 12px/1.5em "Lucida Grande", "Helvetica Neue", Arial, sans-serif;
+}
+
+hr {
+ background: #aaa;
+}
+
+p {
+ font-size: 12px;
+ line-height: 20px;
+}
+
+input.check_box {
+ vertical-align:middle;
+}
+
+#header h1 {
+ font-size: 28px;
+ padding: 5px 0;
+ margin: 5px 0;
+}
+
+.hightlight {
+ background-color: #ffc;
+}
+.small {
+ font-size: 11px;
+}
+.gray {
+ color: #999;
+}
+#header {
+ background: #232C30;
+}
+
+#header h1 a:link, #header h1 a:active, #header h1 a:hover, #header h1 a:visited {
+ color: #eaeaea;
+}
+
+#main {
+ background: #EBEBEB;
+ width: 73%;
+}
+
+#main .block {
+ -moz-border-radius-topleft: 4px;
+ -moz-border-radius-topright: 4px;
+ padding: 0;
+ margin-bottom:20px;
+ padding-bottom: 20px;
+ background: transparent;
+}
+
+#main .block .content {
+ border-left: 1px solid #ddd;
+ border-top: 1px solid #ddd;
+ border-bottom: 1px solid #ccc;
+ border-right: 1px solid #ccc;
+ background: #fff;
+}
+
+#main .block h2.title {
+ margin: 10px 0 5px 0;
+ background-color: none;
+ padding: 5px 5px 5px 15px;
+ font-size:18px;
+ color: #456;
+}
+
+.main_container {
+ padding:10px;
+}
+
+#footer {
+ background-color: #ddd;
+ border-top: 1px solid #bbb;
+}
+
+#footer .block {
+ font-size:11px;
+ background-color: #ddd;
+ padding: 0 10px;
+ text-align: right;
+}
+
+/* #sidebar .block { background: #FFF; padding-bottom:0px; } */
+
+#sidebar .notice {
+ background-color: #ffc;
+ padding: 0 10px;
+ border-bottom:1px solid #ddd;
+ border-right:1px solid #ddd;
+ border-top:1px solid #fff;
+ border-left:1px solid #fff;
+}
+#sidebar .notice h2 {
+ font-size:16px;
+ margin: 5px 0;
+ border-bottom:1px solid #456;
+}
+#sidebar .notice p {
+ font-size:12px;
+}
+
+#sidebar .block {
+ padding-bottom: 0;
+}
+
+#sidebar .block .content {
+ padding: 0 10px;
+}
+
+
+#sidebar h3 {
+ background: #fff;
+ border-bottom:1px solid #ccc;
+ border-right:1px solid #ccc;
+ border-left:1px solid #ddd;
+ border-top:1px solid #ddd;
+ padding: 5px 10px;
+ color: #333;
+ font-weight: bold;
+}
+
+#sidebar ul li a:link, #sidebar ul li a:visited {
+ font-size:12px;
+}
+
+#sidebar ul li a:hover, #sidebar ul li a:active {
+ background: none;
+ color: #444;
+ font-size:12px;
+ text-decoration:underline;
+}
+#sidebar ul.navigation li.last a {
+ border-bottom: none;
+}
+
+#sidebar ul.navigation li a:link,#sidebar ul.navigation li a:visited {
+ padding: 5px 10px;
+ color:#6a6a6a;
+ text-decoration: none;
+}
+#sidebar ul.navigation li a:hover {
+ text-decoration:underline;
+}
+#sidebar .block .sidebar-block h4 {
+ border-bottom: 1px dotted #aaa;
+}
+#main-navigation ul li {
+ background: #456;
+ border-top: 1px solid #5C738A;
+ color: #eee;
+ border-top-left-radius: 5px;
+ border-top-right-radius: 5px;
+}
+
+#main-navigation ul li:hover {
+ border-top-color: #7593B0;
+ background-color: #576C82 !important;
+ color: #fff;
+}
+
+#main-navigation ul li.active {
+ border-top: 1px solid #fff;
+ background-color: #eee !important;
+ color: #333;
+}
+
+#main-navigation ul li a:link, #main-navigation ul li a:visited, #main-navigation ul li a:hover, #main-navigation ul li a:active,
+.secondary-navigation ul li a:link, .secondary-navigation ul li a:visited, .secondary-navigation ul li a:hover, .secondary-navigation ul li a:active,
+#user-navigation ul li a:link, #user-navigation ul li a:visited, #user-navigation ul li a:hover, #user-navigation ul li a:active {
+ text-decoration: none;
+ color: #FFF;
+}
+
+#user-navigation ul li a:link, #user-navigation ul li a:visited {
+ color: #CDE;
+ border-bottom: 1px dotted #345;
+}
+
+#user-navigation ul li a:hover {
+ color: #fff;
+ border-bottom: 1px dotted #CDE;
+ text-decoration: none;
+}
+
+#main-navigation ul li a {
+ font-size: 12px;
+ padding: 3px 10px;
+}
+
+#main-navigation ul li.active a:link, #main-navigation ul li.active a:visited, #main-navigation ul li.active a:hover, #main-navigation ul li.active a:active {
+ color: #364b69;
+}
+
+.secondary-navigation {
+ background: #eaeaea;
+ border-bottom: 0px;
+}
+
+.secondary-navigation ul li {
+ background: #456;
+ border-top: 1px solid #5C738A;
+ color: #eee;
+ margin-right: 5px;
+ border-top-left-radius: 5px;
+ border-top-right-radius: 5px;
+}
+
+.secondary-navigation ul li a {
+ padding: 3px 10px;
+}
+
+.secondary-navigation ul li.active:hover {
+ background: #fff !important;
+ border-top: 1px solid #ccc;
+ border-right: 1px solid #ccc;
+}
+
+.secondary-navigation ul li.active {
+ border-top: 1px solid #ddd;
+ border-left: 1px solid #ddd;
+ border-right: 1px solid #ccc;
+ border-bottom: 1px solid #fff;
+ margin-bottom: -1px;
+ background-color: #fff !important;
+ color: #333;
+}
+
+.secondary-navigation ul li.active a {
+ color: #333;
+}
+
+.secondary-navigation ul li:hover {
+ border-top-color: #7593B0;
+ background-color: #576C82 !important;
+ color: #fff;
+}
+
+/* pagination */
+
+.pagination span.current {
+ background: #576C82;
+ color: #FFF;
+ border: 1px solid #7593B0;
+ -moz-border-radius:5px;
+}
+
+.pagination span.disabled {
+ background: #eee;
+ color: #aaa;
+ border: 1px solid #ddd;
+ -moz-border-radius:5px;
+}
+
+.pagination a {
+ color: #364B69;
+ border: 1px solid #ddd;
+ -moz-border-radius:5px;
+ font-size:11px;
+}
+
+.pagination a:hover {
+ color: #444;
+ background: #eaeaea;
+ border: 1px solid #576C82;
+}
+
+/* tables */
+
+.table th {
+ background: #576C82;
+ color: #FFF;
+ font-weight:normal;
+ padding:3px;
+}
+
+.table th a.toggle {
+ display: block;
+ width: 12px;
+ height: 12px;
+ background: transparent url('images/tick.png') center no-repeat;
+ text-indent: -9999px;
+ -moz-outline: none;
+}
+
+.table th.first {
+ width: 30px;
+ text-align: center;
+}
+
+.table td {
+ border-bottom: 1px solid #AAA;
+}
+
+/* forms */
+
+.form input.text, .form textarea.textarea {
+ border: 1px solid #ddd;
+ padding: 5px;
+ width:99%;
+}
+
+.form input.text_field, .form input.password_field, .form textarea.text_area {
+ border-right: 1px solid #ddd;
+ border-bottom: 1px solid #ddd;
+ border-top: 2px solid #ccc;
+ border-left: 2px solid #ccc;
+ width:99%;
+}
+
+.form .navform {
+ padding:10px;
+ background-color: #eee;
+ font-size:14px;
+ border-bottom:1px solid #ddd;
+ border-right:1px solid #ddd;
+ border-top:1px solid #eee;
+ border-left:1px solid #eee;
+}
+
+.form .navform input {
+ font-size:14px;
+}
+
+.description {
+ color:#aaa;
+ font-family:Georgia, serif;
+}
+
+/* flash-messages */
+.flash .message {
+ -moz-border-radius: 3px;
+ -webkit-border-radius: 3px;
+ text-align:center;
+ margin:0 auto 5px;
+ width:80%;
+}
+.flash .message p {
+ margin:8px;
+}
+.flash .error {
+ border: 1px solid #fbb;
+ background-color: #fdd;
+}
+.flash .warning {
+ border: 1px solid #fffaaa;
+ background-color: #ffffcc;
+}
+.flash .notice {
+ border: 1px solid #ddf;
+ background-color: #eef;
+}
+
+/* lists */
+
+ul.list li {
+ border-bottom-color: #F0F0EE;
+}
+
+ul.list li .item .avatar {
+ border-color: #F0F0EE;
+ margin: 3px 10px 0 0;
+}
+
+ul.list li .left {
+ padding: 5px 5px;
+}
+
+/* box */
+
+#box .block {
+ background: #FFF;
+ border: 1px solid #ddd;
+ border-radius: 10px;
+}
+
+#box .block h2 {
+ background: #576C82;
+ color: #FFF;
+ border-top-left-radius: 5px;
+ border-top-right-radius: 5px;
+}
diff --git a/public/favicon.ico b/public/favicon.ico
new file mode 100644
index 0000000..e69de29
diff --git a/public/javascripts/application.js b/public/javascripts/application.js
new file mode 100644
index 0000000..88a3216
--- /dev/null
+++ b/public/javascripts/application.js
@@ -0,0 +1 @@
+// Put your application scripts here
\ No newline at end of file
diff --git a/public/javascripts/jquery-ujs.js b/public/javascripts/jquery-ujs.js
new file mode 100644
index 0000000..746d620
--- /dev/null
+++ b/public/javascripts/jquery-ujs.js
@@ -0,0 +1,91 @@
+/*
+ * Padrino Javascript Jquery Adapter
+ * Created for use with Padrino Ruby Web Framework (http://www.padrinorb.com)
+**/
+
+/* Remote Form Support
+ * form_for @user, '/user', :remote => true
+**/
+
+$("form[data-remote=true]").live('submit', function(e) {
+ e.preventDefault(); e.stopped = true;
+ var element = $(this);
+ var message = element.data('confirm');
+ if (message && !confirm(message)) { return false; }
+ JSAdapter.sendRequest(element, {
+ verb: element.data('method') || element.attr('method') || 'post',
+ url: element.attr('action'),
+ params: element.serializeArray()
+ });
+});
+
+/* Confirmation Support
+ * link_to 'sign out', '/logout', :confirm => "Log out?"
+**/
+
+$("a[data-confirm]").live('click', function(e) {
+ var message = $(this).data('confirm');
+ if (!confirm(message)) { e.preventDefault(); e.stopped = true; }
+});
+
+/*
+ * Link Remote Support
+ * link_to 'add item', '/create', :remote => true
+**/
+
+$("a[data-remote=true]").live('click', function(e) {
+ var element = $(this);
+ if (e.stopped) return;
+ e.preventDefault(); e.stopped = true;
+ JSAdapter.sendRequest(element, {
+ verb: element.data('method') || 'get',
+ url: element.attr('href')
+ });
+});
+
+/*
+ * Link Method Support
+ * link_to 'delete item', '/destroy', :method => :delete
+**/
+
+$("a[data-method]:not([data-remote])").live('click', function(e) {
+ if (e.stopped) return;
+ JSAdapter.sendMethod($(e.target));
+ e.preventDefault(); e.stopped = true;
+});
+
+/* JSAdapter */
+var JSAdapter = {
+ // Sends an xhr request to the specified url with given verb and params
+ // JSAdapter.sendRequest(element, { verb: 'put', url : '...', params: {} });
+ sendRequest : function(element, options) {
+ var verb = options.verb, url = options.url, params = options.params;
+ var event = element.trigger("ajax:before");
+ if (event.stopped) return false;
+ $.ajax({
+ url: url,
+ type: verb.toUpperCase() || 'POST',
+ data: params || [],
+ dataType: 'script',
+
+ beforeSend: function(request) { element.trigger("ajax:loading", [ request ]); },
+ complete: function(request) { element.trigger("ajax:complete", [ request ]); },
+ success: function(request) { element.trigger("ajax:success", [ request ]); },
+ error: function(request) { element.trigger("ajax:failure", [ request ]); }
+ });
+ element.trigger("ajax:after");
+ },
+ // Triggers a particular method verb to be triggered in a form posting to the url
+ // JSAdapter.sendMethod(element);
+ sendMethod : function(element) {
+ var verb = element.data('method');
+ var url = element.attr('href');
+ var form = $('');
+ form.hide().appendTo('body');
+ if (verb !== 'post') {
+ var field = ' ';
+ form.append(field);
+ }
+ form.submit();
+ }
+};
\ No newline at end of file
diff --git a/public/javascripts/jquery.js b/public/javascripts/jquery.js
new file mode 100644
index 0000000..14fd647
--- /dev/null
+++ b/public/javascripts/jquery.js
@@ -0,0 +1,16 @@
+/*!
+ * jQuery JavaScript Library v1.5.1
+ * http://jquery.com/
+ *
+ * Copyright 2011, John Resig
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * Includes Sizzle.js
+ * http://sizzlejs.com/
+ * Copyright 2011, The Dojo Foundation
+ * Released under the MIT, BSD, and GPL Licenses.
+ *
+ * Date: Wed Feb 23 13:55:29 2011 -0500
+ */
+(function(a,b){function cg(a){return d.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cd(a){if(!bZ[a]){var b=d("<"+a+">").appendTo("body"),c=b.css("display");b.remove();if(c==="none"||c==="")c="block";bZ[a]=c}return bZ[a]}function cc(a,b){var c={};d.each(cb.concat.apply([],cb.slice(0,b)),function(){c[this]=a});return c}function bY(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function bX(){try{return new a.XMLHttpRequest}catch(b){}}function bW(){d(a).unload(function(){for(var a in bU)bU[a](0,1)})}function bQ(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var e=a.dataTypes,f={},g,h,i=e.length,j,k=e[0],l,m,n,o,p;for(g=1;g=0===c})}function N(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function F(a,b){return(a&&a!=="*"?a+".":"")+b.replace(r,"`").replace(s,"&")}function E(a){var b,c,e,f,g,h,i,j,k,l,m,n,o,q=[],r=[],s=d._data(this,"events");if(a.liveFired!==this&&s&&s.live&&!a.target.disabled&&(!a.button||a.type!=="click")){a.namespace&&(n=new RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)")),a.liveFired=this;var t=s.live.slice(0);for(i=0;ic)break;a.currentTarget=f.elem,a.data=f.handleObj.data,a.handleObj=f.handleObj,o=f.handleObj.origHandler.apply(f.elem,arguments);if(o===!1||a.isPropagationStopped()){c=f.level,o===!1&&(b=!1);if(a.isImmediatePropagationStopped())break}}return b}}function C(a,c,e){var f=d.extend({},e[0]);f.type=a,f.originalEvent={},f.liveFired=b,d.event.handle.call(c,f),f.isDefaultPrevented()&&e[0].preventDefault()}function w(){return!0}function v(){return!1}function g(a){for(var b in a)if(b!=="toJSON")return!1;return!0}function f(a,c,f){if(f===b&&a.nodeType===1){f=a.getAttribute("data-"+c);if(typeof f==="string"){try{f=f==="true"?!0:f==="false"?!1:f==="null"?null:d.isNaN(f)?e.test(f)?d.parseJSON(f):f:parseFloat(f)}catch(g){}d.data(a,c,f)}else f=b}return f}var c=a.document,d=function(){function I(){if(!d.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(I,1);return}d.ready()}}var d=function(a,b){return new d.fn.init(a,b,g)},e=a.jQuery,f=a.$,g,h=/^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]+)$)/,i=/\S/,j=/^\s+/,k=/\s+$/,l=/\d/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=navigator.userAgent,w,x=!1,y,z="then done fail isResolved isRejected promise".split(" "),A,B=Object.prototype.toString,C=Object.prototype.hasOwnProperty,D=Array.prototype.push,E=Array.prototype.slice,F=String.prototype.trim,G=Array.prototype.indexOf,H={};d.fn=d.prototype={constructor:d,init:function(a,e,f){var g,i,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!e&&c.body){this.context=c,this[0]=c.body,this.selector="body",this.length=1;return this}if(typeof a==="string"){g=h.exec(a);if(!g||!g[1]&&e)return!e||e.jquery?(e||f).find(a):this.constructor(e).find(a);if(g[1]){e=e instanceof d?e[0]:e,k=e?e.ownerDocument||e:c,j=m.exec(a),j?d.isPlainObject(e)?(a=[c.createElement(j[1])],d.fn.attr.call(a,e,!0)):a=[k.createElement(j[1])]:(j=d.buildFragment([g[1]],[k]),a=(j.cacheable?d.clone(j.fragment):j.fragment).childNodes);return d.merge(this,a)}i=c.getElementById(g[2]);if(i&&i.parentNode){if(i.id!==g[2])return f.find(a);this.length=1,this[0]=i}this.context=c,this.selector=a;return this}if(d.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return d.makeArray(a,this)},selector:"",jquery:"1.5.1",length:0,size:function(){return this.length},toArray:function(){return E.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var e=this.constructor();d.isArray(a)?D.apply(e,a):d.merge(e,a),e.prevObject=this,e.context=this.context,b==="find"?e.selector=this.selector+(this.selector?" ":"")+c:b&&(e.selector=this.selector+"."+b+"("+c+")");return e},each:function(a,b){return d.each(this,a,b)},ready:function(a){d.bindReady(),y.done(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(E.apply(this,arguments),"slice",E.call(arguments).join(","))},map:function(a){return this.pushStack(d.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:D,sort:[].sort,splice:[].splice},d.fn.init.prototype=d.fn,d.extend=d.fn.extend=function(){var a,c,e,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i==="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!=="object"&&!d.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;y.resolveWith(c,[d]),d.fn.trigger&&d(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!x){x=!0;if(c.readyState==="complete")return setTimeout(d.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",A,!1),a.addEventListener("load",d.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",A),a.attachEvent("onload",d.ready);var b=!1;try{b=a.frameElement==null}catch(e){}c.documentElement.doScroll&&b&&I()}}},isFunction:function(a){return d.type(a)==="function"},isArray:Array.isArray||function(a){return d.type(a)==="array"},isWindow:function(a){return a&&typeof a==="object"&&"setInterval"in a},isNaN:function(a){return a==null||!l.test(a)||isNaN(a)},type:function(a){return a==null?String(a):H[B.call(a)]||"object"},isPlainObject:function(a){if(!a||d.type(a)!=="object"||a.nodeType||d.isWindow(a))return!1;if(a.constructor&&!C.call(a,"constructor")&&!C.call(a.constructor.prototype,"isPrototypeOf"))return!1;var c;for(c in a){}return c===b||C.call(a,c)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!=="string"||!b)return null;b=d.trim(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return a.JSON&&a.JSON.parse?a.JSON.parse(b):(new Function("return "+b))();d.error("Invalid JSON: "+b)},parseXML:function(b,c,e){a.DOMParser?(e=new DOMParser,c=e.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b)),e=c.documentElement,(!e||!e.nodeName||e.nodeName==="parsererror")&&d.error("Invalid XML: "+b);return c},noop:function(){},globalEval:function(a){if(a&&i.test(a)){var b=c.head||c.getElementsByTagName("head")[0]||c.documentElement,e=c.createElement("script");d.support.scriptEval()?e.appendChild(c.createTextNode(a)):e.text=a,b.insertBefore(e,b.firstChild),b.removeChild(e)}},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,e){var f,g=0,h=a.length,i=h===b||d.isFunction(a);if(e){if(i){for(f in a)if(c.apply(a[f],e)===!1)break}else for(;g1){var f=E.call(arguments,0),g=b,h=function(a){return function(b){f[a]=arguments.length>1?E.call(arguments,0):b,--g||c.resolveWith(e,f)}};while(b--)a=f[b],a&&d.isFunction(a.promise)?a.promise().then(h(b),c.reject):--g;g||c.resolveWith(e,f)}else c!==a&&c.resolve(a);return e},uaMatch:function(a){a=a.toLowerCase();var b=r.exec(a)||s.exec(a)||t.exec(a)||a.indexOf("compatible")<0&&u.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}d.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.subclass=this.subclass,a.fn.init=function b(b,c){c&&c instanceof d&&!(c instanceof a)&&(c=a(c));return d.fn.init.call(this,b,c,e)},a.fn.init.prototype=a.fn;var e=a(c);return a},browser:{}}),y=d._Deferred(),d.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){H["[object "+b+"]"]=b.toLowerCase()}),w=d.uaMatch(v),w.browser&&(d.browser[w.browser]=!0,d.browser.version=w.version),d.browser.webkit&&(d.browser.safari=!0),G&&(d.inArray=function(a,b){return G.call(b,a)}),i.test(" ")&&(j=/^[\s\xA0]+/,k=/[\s\xA0]+$/),g=d(c),c.addEventListener?A=function(){c.removeEventListener("DOMContentLoaded",A,!1),d.ready()}:c.attachEvent&&(A=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",A),d.ready())});return d}();(function(){d.support={};var b=c.createElement("div");b.style.display="none",b.innerHTML=" a ";var e=b.getElementsByTagName("*"),f=b.getElementsByTagName("a")[0],g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=b.getElementsByTagName("input")[0];if(e&&e.length&&f){d.support={leadingWhitespace:b.firstChild.nodeType===3,tbody:!b.getElementsByTagName("tbody").length,htmlSerialize:!!b.getElementsByTagName("link").length,style:/red/.test(f.getAttribute("style")),hrefNormalized:f.getAttribute("href")==="/a",opacity:/^0.55$/.test(f.style.opacity),cssFloat:!!f.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,deleteExpando:!0,optDisabled:!1,checkClone:!1,noCloneEvent:!0,noCloneChecked:!0,boxModel:null,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableHiddenOffsets:!0},i.checked=!0,d.support.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,d.support.optDisabled=!h.disabled;var j=null;d.support.scriptEval=function(){if(j===null){var b=c.documentElement,e=c.createElement("script"),f="script"+d.now();try{e.appendChild(c.createTextNode("window."+f+"=1;"))}catch(g){}b.insertBefore(e,b.firstChild),a[f]?(j=!0,delete a[f]):j=!1,b.removeChild(e),b=e=f=null}return j};try{delete b.test}catch(k){d.support.deleteExpando=!1}!b.addEventListener&&b.attachEvent&&b.fireEvent&&(b.attachEvent("onclick",function l(){d.support.noCloneEvent=!1,b.detachEvent("onclick",l)}),b.cloneNode(!0).fireEvent("onclick")),b=c.createElement("div"),b.innerHTML=" ";var m=c.createDocumentFragment();m.appendChild(b.firstChild),d.support.checkClone=m.cloneNode(!0).cloneNode(!0).lastChild.checked,d(function(){var a=c.createElement("div"),b=c.getElementsByTagName("body")[0];if(b){a.style.width=a.style.paddingLeft="1px",b.appendChild(a),d.boxModel=d.support.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,d.support.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="
",d.support.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="";var e=a.getElementsByTagName("td");d.support.reliableHiddenOffsets=e[0].offsetHeight===0,e[0].style.display="",e[1].style.display="none",d.support.reliableHiddenOffsets=d.support.reliableHiddenOffsets&&e[0].offsetHeight===0,a.innerHTML="",b.removeChild(a).style.display="none",a=e=null}});var n=function(a){var b=c.createElement("div");a="on"+a;if(!b.attachEvent)return!0;var d=a in b;d||(b.setAttribute(a,"return;"),d=typeof b[a]==="function"),b=null;return d};d.support.submitBubbles=n("submit"),d.support.changeBubbles=n("change"),b=e=f=null}})();var e=/^(?:\{.*\}|\[.*\])$/;d.extend({cache:{},uuid:0,expando:"jQuery"+(d.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?d.cache[a[d.expando]]:a[d.expando];return!!a&&!g(a)},data:function(a,c,e,f){if(d.acceptData(a)){var g=d.expando,h=typeof c==="string",i,j=a.nodeType,k=j?d.cache:a,l=j?a[d.expando]:a[d.expando]&&d.expando;if((!l||f&&l&&!k[l][g])&&h&&e===b)return;l||(j?a[d.expando]=l=++d.uuid:l=d.expando),k[l]||(k[l]={},j||(k[l].toJSON=d.noop));if(typeof c==="object"||typeof c==="function")f?k[l][g]=d.extend(k[l][g],c):k[l]=d.extend(k[l],c);i=k[l],f&&(i[g]||(i[g]={}),i=i[g]),e!==b&&(i[c]=e);if(c==="events"&&!i[c])return i[g]&&i[g].events;return h?i[c]:i}},removeData:function(b,c,e){if(d.acceptData(b)){var f=d.expando,h=b.nodeType,i=h?d.cache:b,j=h?b[d.expando]:d.expando;if(!i[j])return;if(c){var k=e?i[j][f]:i[j];if(k){delete k[c];if(!g(k))return}}if(e){delete i[j][f];if(!g(i[j]))return}var l=i[j][f];d.support.deleteExpando||i!=a?delete i[j]:i[j]=null,l?(i[j]={},h||(i[j].toJSON=d.noop),i[j][f]=l):h&&(d.support.deleteExpando?delete b[d.expando]:b.removeAttribute?b.removeAttribute(d.expando):b[d.expando]=null)}},_data:function(a,b,c){return d.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=d.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),d.fn.extend({data:function(a,c){var e=null;if(typeof a==="undefined"){if(this.length){e=d.data(this[0]);if(this[0].nodeType===1){var g=this[0].attributes,h;for(var i=0,j=g.length;i-1)return!0;return!1},val:function(a){if(!arguments.length){var c=this[0];if(c){if(d.nodeName(c,"option")){var e=c.attributes.value;return!e||e.specified?c.value:c.text}if(d.nodeName(c,"select")){var f=c.selectedIndex,g=[],h=c.options,i=c.type==="select-one";if(f<0)return null;for(var k=i?f:0,l=i?f+1:h.length;k=0;else if(d.nodeName(this,"select")){var f=d.makeArray(e);d("option",this).each(function(){this.selected=d.inArray(d(this).val(),f)>=0}),f.length||(this.selectedIndex=-1)}else this.value=e}})}}),d.extend({attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,e,f){if(!a||a.nodeType===3||a.nodeType===8||a.nodeType===2)return b;if(f&&c in d.attrFn)return d(a)[c](e);var g=a.nodeType!==1||!d.isXMLDoc(a),h=e!==b;c=g&&d.props[c]||c;if(a.nodeType===1){var i=k.test(c);if(c==="selected"&&!d.support.optSelected){var j=a.parentNode;j&&(j.selectedIndex,j.parentNode&&j.parentNode.selectedIndex)}if((c in a||a[c]!==b)&&g&&!i){h&&(c==="type"&&l.test(a.nodeName)&&a.parentNode&&d.error("type property can't be changed"),e===null?a.nodeType===1&&a.removeAttribute(c):a[c]=e);if(d.nodeName(a,"form")&&a.getAttributeNode(c))return a.getAttributeNode(c).nodeValue;if(c==="tabIndex"){var o=a.getAttributeNode("tabIndex");return o&&o.specified?o.value:m.test(a.nodeName)||n.test(a.nodeName)&&a.href?0:b}return a[c]}if(!d.support.style&&g&&c==="style"){h&&(a.style.cssText=""+e);return a.style.cssText}h&&a.setAttribute(c,""+e);if(!a.attributes[c]&&(a.hasAttribute&&!a.hasAttribute(c)))return b;var p=!d.support.hrefNormalized&&g&&i?a.getAttribute(c,2):a.getAttribute(c);return p===null?b:p}h&&(a[c]=e);return a[c]}});var p=/\.(.*)$/,q=/^(?:textarea|input|select)$/i,r=/\./g,s=/ /g,t=/[^\w\s.|`]/g,u=function(a){return a.replace(t,"\\$&")};d.event={add:function(c,e,f,g){if(c.nodeType!==3&&c.nodeType!==8){try{d.isWindow(c)&&(c!==a&&!c.frameElement)&&(c=a)}catch(h){}if(f===!1)f=v;else if(!f)return;var i,j;f.handler&&(i=f,f=i.handler),f.guid||(f.guid=d.guid++);var k=d._data(c);if(!k)return;var l=k.events,m=k.handle;l||(k.events=l={}),m||(k.handle=m=function(){return typeof d!=="undefined"&&!d.event.triggered?d.event.handle.apply(m.elem,arguments):b}),m.elem=c,e=e.split(" ");var n,o=0,p;while(n=e[o++]){j=i?d.extend({},i):{handler:f,data:g},n.indexOf(".")>-1?(p=n.split("."),n=p.shift(),j.namespace=p.slice(0).sort().join(".")):(p=[],j.namespace=""),j.type=n,j.guid||(j.guid=f.guid);var q=l[n],r=d.event.special[n]||{};if(!q){q=l[n]=[];if(!r.setup||r.setup.call(c,g,p,m)===!1)c.addEventListener?c.addEventListener(n,m,!1):c.attachEvent&&c.attachEvent("on"+n,m)}r.add&&(r.add.call(c,j),j.handler.guid||(j.handler.guid=f.guid)),q.push(j),d.event.global[n]=!0}c=null}},global:{},remove:function(a,c,e,f){if(a.nodeType!==3&&a.nodeType!==8){e===!1&&(e=v);var g,h,i,j,k=0,l,m,n,o,p,q,r,s=d.hasData(a)&&d._data(a),t=s&&s.events;if(!s||!t)return;c&&c.type&&(e=c.handler,c=c.type);if(!c||typeof c==="string"&&c.charAt(0)==="."){c=c||"";for(h in t)d.event.remove(a,h+c);return}c=c.split(" ");while(h=c[k++]){r=h,q=null,l=h.indexOf(".")<0,m=[],l||(m=h.split("."),h=m.shift(),n=new RegExp("(^|\\.)"+d.map(m.slice(0).sort(),u).join("\\.(?:.*\\.)?")+"(\\.|$)")),p=t[h];if(!p)continue;if(!e){for(j=0;j=0&&(a.type=f=f.slice(0,-1),a.exclusive=!0),e||(a.stopPropagation(),d.event.global[f]&&d.each(d.cache,function(){var b=d.expando,e=this[b];e&&e.events&&e.events[f]&&d.event.trigger(a,c,e.handle.elem)}));if(!e||e.nodeType===3||e.nodeType===8)return b;a.result=b,a.target=e,c=d.makeArray(c),c.unshift(a)}a.currentTarget=e;var h=d._data(e,"handle");h&&h.apply(e,c);var i=e.parentNode||e.ownerDocument;try{e&&e.nodeName&&d.noData[e.nodeName.toLowerCase()]||e["on"+f]&&e["on"+f].apply(e,c)===!1&&(a.result=!1,a.preventDefault())}catch(j){}if(!a.isPropagationStopped()&&i)d.event.trigger(a,c,i,!0);else if(!a.isDefaultPrevented()){var k,l=a.target,m=f.replace(p,""),n=d.nodeName(l,"a")&&m==="click",o=d.event.special[m]||{};if((!o._default||o._default.call(e,a)===!1)&&!n&&!(l&&l.nodeName&&d.noData[l.nodeName.toLowerCase()])){try{l[m]&&(k=l["on"+m],k&&(l["on"+m]=null),d.event.triggered=!0,l[m]())}catch(q){}k&&(l["on"+m]=k),d.event.triggered=!1}}},handle:function(c){var e,f,g,h,i,j=[],k=d.makeArray(arguments);c=k[0]=d.event.fix(c||a.event),c.currentTarget=this,e=c.type.indexOf(".")<0&&!c.exclusive,e||(g=c.type.split("."),c.type=g.shift(),j=g.slice(0).sort(),h=new RegExp("(^|\\.)"+j.join("\\.(?:.*\\.)?")+"(\\.|$)")),c.namespace=c.namespace||j.join("."),i=d._data(this,"events"),f=(i||{})[c.type];if(i&&f){f=f.slice(0);for(var l=0,m=f.length;l-1?d.map(a.options,function(a){return a.selected}).join("-"):"":a.nodeName.toLowerCase()==="select"&&(c=a.selectedIndex);return c},B=function B(a){var c=a.target,e,f;if(q.test(c.nodeName)&&!c.readOnly){e=d._data(c,"_change_data"),f=A(c),(a.type!=="focusout"||c.type!=="radio")&&d._data(c,"_change_data",f);if(e===b||f===e)return;if(e!=null||f)a.type="change",a.liveFired=b,d.event.trigger(a,arguments[1],c)}};d.event.special.change={filters:{focusout:B,beforedeactivate:B,click:function(a){var b=a.target,c=b.type;(c==="radio"||c==="checkbox"||b.nodeName.toLowerCase()==="select")&&B.call(this,a)},keydown:function(a){var b=a.target,c=b.type;(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(c==="checkbox"||c==="radio")||c==="select-multiple")&&B.call(this,a)},beforeactivate:function(a){var b=a.target;d._data(b,"_change_data",A(b))}},setup:function(a,b){if(this.type==="file")return!1;for(var c in z)d.event.add(this,c+".specialChange",z[c]);return q.test(this.nodeName)},teardown:function(a){d.event.remove(this,".specialChange");return q.test(this.nodeName)}},z=d.event.special.change.filters,z.focus=z.beforeactivate}c.addEventListener&&d.each({focus:"focusin",blur:"focusout"},function(a,b){function c(a){a=d.event.fix(a),a.type=b;return d.event.handle.call(this,a)}d.event.special[b]={setup:function(){this.addEventListener(a,c,!0)},teardown:function(){this.removeEventListener(a,c,!0)}}}),d.each(["bind","one"],function(a,c){d.fn[c]=function(a,e,f){if(typeof a==="object"){for(var g in a)this[c](g,e,a[g],f);return this}if(d.isFunction(e)||e===!1)f=e,e=b;var h=c==="one"?d.proxy(f,function(a){d(this).unbind(a,h);return f.apply(this,arguments)}):f;if(a==="unload"&&c!=="one")this.one(a,e,f);else for(var i=0,j=this.length;i0?this.bind(b,a,c):this.trigger(b)},d.attrFn&&(d.attrFn[b]=!0)}),function(){function u(a,b,c,d,e,f){for(var g=0,h=d.length;g0){j=i;break}}i=i[a]}d[g]=j}}}function t(a,b,c,d,e,f){for(var g=0,h=d.length;g+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,e=0,f=Object.prototype.toString,g=!1,h=!0,i=/\\/g,j=/\W/;[0,0].sort(function(){h=!1;return 0});var k=function(b,d,e,g){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!=="string")return e;var i,j,n,o,q,r,s,t,u=!0,w=k.isXML(d),x=[],y=b;do{a.exec(""),i=a.exec(y);if(i){y=i[3],x.push(i[1]);if(i[2]){o=i[3];break}}}while(i);if(x.length>1&&m.exec(b))if(x.length===2&&l.relative[x[0]])j=v(x[0]+x[1],d);else{j=l.relative[x[0]]?[d]:k(x.shift(),d);while(x.length)b=x.shift(),l.relative[b]&&(b+=x.shift()),j=v(b,j)}else{!g&&x.length>1&&d.nodeType===9&&!w&&l.match.ID.test(x[0])&&!l.match.ID.test(x[x.length-1])&&(q=k.find(x.shift(),d,w),d=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]);if(d){q=g?{expr:x.pop(),set:p(g)}:k.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&d.parentNode?d.parentNode:d,w),j=q.expr?k.filter(q.expr,q.set):q.set,x.length>0?n=p(j):u=!1;while(x.length)r=x.pop(),s=r,l.relative[r]?s=x.pop():r="",s==null&&(s=d),l.relative[r](n,s,w)}else n=x=[]}n||(n=j),n||k.error(r||b);if(f.call(n)==="[object Array]")if(u)if(d&&d.nodeType===1)for(t=0;n[t]!=null;t++)n[t]&&(n[t]===!0||n[t].nodeType===1&&k.contains(d,n[t]))&&e.push(j[t]);else for(t=0;n[t]!=null;t++)n[t]&&n[t].nodeType===1&&e.push(j[t]);else e.push.apply(e,n);else p(n,e);o&&(k(o,h,e,g),k.uniqueSort(e));return e};k.uniqueSort=function(a){if(r){g=h,a.sort(r);if(g)for(var b=1;b0},k.find=function(a,b,c){var d;if(!a)return[];for(var e=0,f=l.order.length;e":function(a,b){var c,d=typeof b==="string",e=0,f=a.length;if(d&&!j.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(i,"")},TAG:function(a,b){return a[1].replace(i,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||k.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&k.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(i,"");!f&&l.attrMap[g]&&(a[1]=l.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(i,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=k(b[3],null,null,c);else{var g=k.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(l.match.POS.test(b[0])||l.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!k(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){return"text"===a.getAttribute("type")},radio:function(a){return"radio"===a.type},checkbox:function(a){return"checkbox"===a.type},file:function(a){return"file"===a.type},password:function(a){return"password"===a.type},submit:function(a){return"submit"===a.type},image:function(a){return"image"===a.type},reset:function(a){return"reset"===a.type},button:function(a){return"button"===a.type||a.nodeName.toLowerCase()==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=l.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||k.getText([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=l.attrHandle[c]?l.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=l.setFilters[e];if(f)return f(a,c,b,d)}}},m=l.match.POS,n=function(a,b){return"\\"+(b-0+1)};for(var o in l.match)l.match[o]=new RegExp(l.match[o].source+/(?![^\[]*\])(?![^\(]*\))/.source),l.leftMatch[o]=new RegExp(/(^(?:.|\r|\n)*?)/.source+l.match[o].source.replace(/\\(\d+)/g,n));var p=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(q){p=function(a,b){var c=0,d=b||[];if(f.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length==="number")for(var e=a.length;c ",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(l.find.ID=function(a,c,d){if(typeof c.getElementById!=="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!=="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},l.filter.ID=function(a,b){var c=typeof a.getAttributeNode!=="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(l.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML=" ",a.firstChild&&typeof a.firstChild.getAttribute!=="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(l.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=k,b=c.createElement("div"),d="__sizzle__";b.innerHTML="
";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){k=function(b,e,f,g){e=e||c;if(!g&&!k.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return p(e.getElementsByTagName(b),f);if(h[2]&&l.find.CLASS&&e.getElementsByClassName)return p(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return p([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return p([],f);if(i.id===h[3])return p([i],f)}try{return p(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var m=e,n=e.getAttribute("id"),o=n||d,q=e.parentNode,r=/^\s*[+~]/.test(b);n?o=o.replace(/'/g,"\\$&"):e.setAttribute("id",o),r&&q&&(e=e.parentNode);try{if(!r||q)return p(e.querySelectorAll("[id='"+o+"'] "+b),f)}catch(s){}finally{n||m.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)k[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector,d=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(e){d=!0}b&&(k.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(a))try{if(d||!l.match.PSEUDO.test(c)&&!/!=/.test(c))return b.call(a,c)}catch(e){}return k(c,null,null,[a]).length>0})}(),function(){var a=c.createElement("div");a.innerHTML="
";if(a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;l.order.splice(1,0,"CLASS"),l.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!=="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?k.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?k.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:k.contains=function(){return!1},k.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var v=function(a,b){var c,d=[],e="",f=b.nodeType?[b]:b;while(c=l.match.PSEUDO.exec(a))e+=c[0],a=a.replace(l.match.PSEUDO,"");a=l.relative[a]?a+"*":a;for(var g=0,h=f.length;g0)for(var g=c;g0},closest:function(a,b){var c=[],e,f,g=this[0];if(d.isArray(a)){var h,i,j={},k=1;if(g&&a.length){for(e=0,f=a.length;e-1:d(g).is(h))&&c.push({selector:i,elem:g,level:k});g=g.parentNode,k++}}return c}var l=L.test(a)?d(a,b||this.context):null;for(e=0,f=this.length;e-1:d.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b)break}}c=c.length>1?d.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a||typeof a==="string")return d.inArray(this[0],a?d(a):this.parent().children());return d.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a==="string"?d(a,b):d.makeArray(a),e=d.merge(this.get(),c);return this.pushStack(N(c[0])||N(e[0])?e:d.unique(e))},andSelf:function(){return this.add(this.prevObject)}}),d.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return d.dir(a,"parentNode")},parentsUntil:function(a,b,c){return d.dir(a,"parentNode",c)},next:function(a){return d.nth(a,2,"nextSibling")},prev:function(a){return d.nth(a,2,"previousSibling")},nextAll:function(a){return d.dir(a,"nextSibling")},prevAll:function(a){return d.dir(a,"previousSibling")},nextUntil:function(a,b,c){return d.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return d.dir(a,"previousSibling",c)},siblings:function(a){return d.sibling(a.parentNode.firstChild,a)},children:function(a){return d.sibling(a.firstChild)},contents:function(a){return d.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:d.makeArray(a.childNodes)}},function(a,b){d.fn[a]=function(c,e){var f=d.map(this,b,c),g=K.call(arguments);G.test(a)||(e=c),e&&typeof e==="string"&&(f=d.filter(e,f)),f=this.length>1&&!M[a]?d.unique(f):f,(this.length>1||I.test(e))&&H.test(a)&&(f=f.reverse());return this.pushStack(f,a,g.join(","))}}),d.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?d.find.matchesSelector(b[0],a)?[b[0]]:[]:d.find.matches(a,b)},dir:function(a,c,e){var f=[],g=a[c];while(g&&g.nodeType!==9&&(e===b||g.nodeType!==1||!d(g).is(e)))g.nodeType===1&&f.push(g),g=g[c];return f},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var P=/ jQuery\d+="(?:\d+|null)"/g,Q=/^\s+/,R=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,S=/<([\w:]+)/,T=/",""],legend:[1,""," "],thead:[1,""],tr:[2,""],td:[3,""],col:[2,""],area:[1,""," "],_default:[0,"",""]};X.optgroup=X.option,X.tbody=X.tfoot=X.colgroup=X.caption=X.thead,X.th=X.td,d.support.htmlSerialize||(X._default=[1,"div","
"]),d.fn.extend({text:function(a){if(d.isFunction(a))return this.each(function(b){var c=d(this);c.text(a.call(this,b,c.text()))});if(typeof a!=="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return d.text(this)},wrapAll:function(a){if(d.isFunction(a))return this.each(function(b){d(this).wrapAll(a.call(this,b))});if(this[0]){var b=d(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(d.isFunction(a))return this.each(function(b){d(this).wrapInner(a.call(this,b))});return this.each(function(){var b=d(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){d(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){d.nodeName(this,"body")||d(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=d(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,d(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,e;(e=this[c])!=null;c++)if(!a||d.filter(a,[e]).length)!b&&e.nodeType===1&&(d.cleanData(e.getElementsByTagName("*")),d.cleanData([e])),e.parentNode&&e.parentNode.removeChild(e);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&d.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return d.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(P,""):null;if(typeof a!=="string"||V.test(a)||!d.support.leadingWhitespace&&Q.test(a)||X[(S.exec(a)||["",""])[1].toLowerCase()])d.isFunction(a)?this.each(function(b){var c=d(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);else{a=a.replace(R,"<$1>$2>");try{for(var c=0,e=this.length;c1&&l0?this.clone(!0):this).get();d(f[h])[b](j),e=e.concat(j)}return this.pushStack(e,a,f.selector)}}),d.extend({clone:function(a,b,c){var e=a.cloneNode(!0),f,g,h;if((!d.support.noCloneEvent||!d.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!d.isXMLDoc(a)){$(a,e),f=_(a),g=_(e);for(h=0;f[h];++h)$(f[h],g[h])}if(b){Z(a,e);if(c){f=_(a),g=_(e);for(h=0;f[h];++h)Z(f[h],g[h])}}return e},clean:function(a,b,e,f){b=b||c,typeof b.createElement==="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var g=[];for(var h=0,i;(i=a[h])!=null;h++){typeof i==="number"&&(i+="");if(!i)continue;if(typeof i!=="string"||U.test(i)){if(typeof i==="string"){i=i.replace(R,"<$1>$2>");var j=(S.exec(i)||["",""])[1].toLowerCase(),k=X[j]||X._default,l=k[0],m=b.createElement("div");m.innerHTML=k[1]+i+k[2];while(l--)m=m.lastChild;if(!d.support.tbody){var n=T.test(i),o=j==="table"&&!n?m.firstChild&&m.firstChild.childNodes:k[1]===""&&!n?m.childNodes:[];for(var p=o.length-1;p>=0;--p)d.nodeName(o[p],"tbody")&&!o[p].childNodes.length&&o[p].parentNode.removeChild(o[p])}!d.support.leadingWhitespace&&Q.test(i)&&m.insertBefore(b.createTextNode(Q.exec(i)[0]),m.firstChild),i=m.childNodes}}else i=b.createTextNode(i);i.nodeType?g.push(i):g=d.merge(g,i)}if(e)for(h=0;g[h];h++)!f||!d.nodeName(g[h],"script")||g[h].type&&g[h].type.toLowerCase()!=="text/javascript"?(g[h].nodeType===1&&g.splice.apply(g,[h+1,0].concat(d.makeArray(g[h].getElementsByTagName("script")))),e.appendChild(g[h])):f.push(g[h].parentNode?g[h].parentNode.removeChild(g[h]):g[h]);return g},cleanData:function(a){var b,c,e=d.cache,f=d.expando,g=d.event.special,h=d.support.deleteExpando;for(var i=0,j;(j=a[i])!=null;i++){if(j.nodeName&&d.noData[j.nodeName.toLowerCase()])continue;c=j[d.expando];if(c){b=e[c]&&e[c][f];if(b&&b.events){for(var k in b.events)g[k]?d.event.remove(j,k):d.removeEvent(j,k,b.handle);b.handle&&(b.handle.elem=null)}h?delete j[d.expando]:j.removeAttribute&&j.removeAttribute(d.expando),delete e[c]}}}});var bb=/alpha\([^)]*\)/i,bc=/opacity=([^)]*)/,bd=/-([a-z])/ig,be=/([A-Z])/g,bf=/^-?\d+(?:px)?$/i,bg=/^-?\d/,bh={position:"absolute",visibility:"hidden",display:"block"},bi=["Left","Right"],bj=["Top","Bottom"],bk,bl,bm,bn=function(a,b){return b.toUpperCase()};d.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return d.access(this,a,c,!0,function(a,c,e){return e!==b?d.style(a,c,e):d.css(a,c)})},d.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bk(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{zIndex:!0,fontWeight:!0,opacity:!0,zoom:!0,lineHeight:!0},cssProps:{"float":d.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,e,f){if(a&&a.nodeType!==3&&a.nodeType!==8&&a.style){var g,h=d.camelCase(c),i=a.style,j=d.cssHooks[h];c=d.cssProps[h]||h;if(e===b){if(j&&"get"in j&&(g=j.get(a,!1,f))!==b)return g;return i[c]}if(typeof e==="number"&&isNaN(e)||e==null)return;typeof e==="number"&&!d.cssNumber[h]&&(e+="px");if(!j||!("set"in j)||(e=j.set(a,e))!==b)try{i[c]=e}catch(k){}}},css:function(a,c,e){var f,g=d.camelCase(c),h=d.cssHooks[g];c=d.cssProps[g]||g;if(h&&"get"in h&&(f=h.get(a,!0,e))!==b)return f;if(bk)return bk(a,c,g)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]},camelCase:function(a){return a.replace(bd,bn)}}),d.curCSS=d.css,d.each(["height","width"],function(a,b){d.cssHooks[b]={get:function(a,c,e){var f;if(c){a.offsetWidth!==0?f=bo(a,b,e):d.swap(a,bh,function(){f=bo(a,b,e)});if(f<=0){f=bk(a,b,b),f==="0px"&&bm&&(f=bm(a,b,b));if(f!=null)return f===""||f==="auto"?"0px":f}if(f<0||f==null){f=a.style[b];return f===""||f==="auto"?"0px":f}return typeof f==="string"?f:f+"px"}},set:function(a,b){if(!bf.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),d.support.opacity||(d.cssHooks.opacity={get:function(a,b){return bc.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style;c.zoom=1;var e=d.isNaN(b)?"":"alpha(opacity="+b*100+")",f=c.filter||"";c.filter=bb.test(f)?f.replace(bb,e):c.filter+" "+e}}),c.defaultView&&c.defaultView.getComputedStyle&&(bl=function(a,c,e){var f,g,h;e=e.replace(be,"-$1").toLowerCase();if(!(g=a.ownerDocument.defaultView))return b;if(h=g.getComputedStyle(a,null))f=h.getPropertyValue(e),f===""&&!d.contains(a.ownerDocument.documentElement,a)&&(f=d.style(a,e));return f}),c.documentElement.currentStyle&&(bm=function(a,b){var c,d=a.currentStyle&&a.currentStyle[b],e=a.runtimeStyle&&a.runtimeStyle[b],f=a.style;!bf.test(d)&&bg.test(d)&&(c=f.left,e&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":d||0,d=f.pixelLeft+"px",f.left=c,e&&(a.runtimeStyle.left=e));return d===""?"auto":d}),bk=bl||bm,d.expr&&d.expr.filters&&(d.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!d.support.reliableHiddenOffsets&&(a.style.display||d.css(a,"display"))==="none"},d.expr.filters.visible=function(a){return!d.expr.filters.hidden(a)});var bp=/%20/g,bq=/\[\]$/,br=/\r?\n/g,bs=/#.*$/,bt=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bu=/^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bv=/(?:^file|^widget|\-extension):$/,bw=/^(?:GET|HEAD)$/,bx=/^\/\//,by=/\?/,bz=/