devise_cloudfuji_authenticatable 1.0.4
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +4 -0
- data/.project +12 -0
- data/.rspec +2 -0
- data/.travis.yml +6 -0
- data/Gemfile +10 -0
- data/README.md +121 -0
- data/Rakefile +1 -0
- data/app/controllers/devise/cas_sessions_controller.rb +101 -0
- data/app/views/devise/cas_sessions/new.html.erb +1 -0
- data/app/views/devise/cas_sessions/unregistered.html.erb +150 -0
- data/app/views/devise/cas_sessions/unregistered.html.erb.old +2 -0
- data/devise_cloudfuji_authenticatable.gemspec +36 -0
- data/lib/devise_cas_authenticatable.rb +135 -0
- data/lib/devise_cas_authenticatable/exceptions.rb +10 -0
- data/lib/devise_cas_authenticatable/missing_session_helpers.rb +9 -0
- data/lib/devise_cas_authenticatable/model.rb +56 -0
- data/lib/devise_cas_authenticatable/routes.rb +37 -0
- data/lib/devise_cas_authenticatable/schema.rb +13 -0
- data/lib/devise_cas_authenticatable/single_sign_out.rb +22 -0
- data/lib/devise_cas_authenticatable/single_sign_out/session_store/active_record.rb +12 -0
- data/lib/devise_cas_authenticatable/single_sign_out/session_store/redis.rb +27 -0
- data/lib/devise_cas_authenticatable/single_sign_out/strategies.rb +58 -0
- data/lib/devise_cas_authenticatable/single_sign_out/strategies/base.rb +11 -0
- data/lib/devise_cas_authenticatable/single_sign_out/strategies/rails_cache.rb +31 -0
- data/lib/devise_cas_authenticatable/strategy.rb +56 -0
- data/lib/devise_cloudfuji_authenticatable.rb +8 -0
- data/lib/devise_cloudfuji_authenticatable/version.rb +3 -0
- data/rails/init.rb +1 -0
- data/spec/devise_cas_authenticatable/model_spec.rb +39 -0
- data/spec/routes_spec.rb +38 -0
- data/spec/scenario/.gitignore +4 -0
- data/spec/scenario/app/controllers/application_controller.rb +3 -0
- data/spec/scenario/app/controllers/home_controller.rb +7 -0
- data/spec/scenario/app/models/user.rb +3 -0
- data/spec/scenario/app/views/layouts/application.html.erb +17 -0
- data/spec/scenario/config.ru +4 -0
- data/spec/scenario/config/application.rb +38 -0
- data/spec/scenario/config/boot.rb +13 -0
- data/spec/scenario/config/castronaut.yml +32 -0
- data/spec/scenario/config/database.yml +22 -0
- data/spec/scenario/config/environment.rb +5 -0
- data/spec/scenario/config/environments/development.rb +25 -0
- data/spec/scenario/config/environments/production.rb +49 -0
- data/spec/scenario/config/environments/test.rb +35 -0
- data/spec/scenario/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/scenario/config/initializers/castronaut.rb +1 -0
- data/spec/scenario/config/initializers/devise.rb +3 -0
- data/spec/scenario/config/initializers/inflections.rb +10 -0
- data/spec/scenario/config/initializers/mime_types.rb +5 -0
- data/spec/scenario/config/initializers/secret_token.rb +7 -0
- data/spec/scenario/config/initializers/session_store.rb +8 -0
- data/spec/scenario/config/locales/en.yml +5 -0
- data/spec/scenario/config/routes.rb +8 -0
- data/spec/scenario/config/rubycas-server.yml +13 -0
- data/spec/scenario/db/migrate/20100401102949_create_tables.rb +15 -0
- data/spec/scenario/db/migrate/20111002012903_add_sessions_table.rb +16 -0
- data/spec/scenario/db/schema.rb +25 -0
- data/spec/scenario/public/.gitkeep +0 -0
- data/spec/spec_helper.rb +23 -0
- data/spec/strategy_spec.rb +87 -0
- data/spec/support/migrations.rb +4 -0
- metadata +236 -0
data/.gitignore
ADDED
data/.project
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<projectDescription>
|
3
|
+
<name>devise_cas_authenticatable</name>
|
4
|
+
<comment></comment>
|
5
|
+
<projects>
|
6
|
+
</projects>
|
7
|
+
<buildSpec>
|
8
|
+
</buildSpec>
|
9
|
+
<natures>
|
10
|
+
<nature>org.radrails.rails.core.railsnature</nature>
|
11
|
+
</natures>
|
12
|
+
</projectDescription>
|
data/.rspec
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
source "http://rubygems.org"
|
2
|
+
|
3
|
+
# Specify your gem's dependencies in devise_cloudfuji_authenticatable.gemspec
|
4
|
+
gemspec
|
5
|
+
|
6
|
+
group :test do
|
7
|
+
gem "rails", ">= 2.3"
|
8
|
+
gem "rspec-rails"
|
9
|
+
gem 'castronaut', :git => 'https://github.com/nbudin/castronaut.git', :branch => 'dam5s-merge'
|
10
|
+
end
|
data/README.md
ADDED
@@ -0,0 +1,121 @@
|
|
1
|
+
devise_cloudfuji_authenticatable
|
2
|
+
=======
|
3
|
+
|
4
|
+
devise_cloudfuji_authenticatable provides single sign-on support for Cloudfuji applications, that use
|
5
|
+
[Devise](http://github.com/plataformatec/devise) for authentication. It acts as a **replacement for the database_authenticatable option that devise provides**
|
6
|
+
|
7
|
+
For applications running on Cloudfuji, the authentication server provides the following user data:
|
8
|
+
|
9
|
+
* ido_id - a string that is unique to the user
|
10
|
+
* email - user's email address
|
11
|
+
* first_name - user's first name
|
12
|
+
* last_name - user's last name
|
13
|
+
* locale - user's locale
|
14
|
+
|
15
|
+
|
16
|
+
Requirements
|
17
|
+
------------
|
18
|
+
|
19
|
+
- Rails 2.3 or 3.0
|
20
|
+
- Devise 1.0 or greater
|
21
|
+
|
22
|
+
Installation
|
23
|
+
------------
|
24
|
+
|
25
|
+
gem install --pre devise_cloudfuji_authenticatable
|
26
|
+
|
27
|
+
### Rails 3.x: Add the following to your Gemfile
|
28
|
+
|
29
|
+
gem 'devise'
|
30
|
+
gem 'devise_cloudfuji_authenticatable'
|
31
|
+
|
32
|
+
This has been tested with 3.1 rc5 too. So feel safe to use it :)
|
33
|
+
|
34
|
+
### Rails 2.3: Add the following in your config/environment.rb
|
35
|
+
|
36
|
+
config.gem 'devise', :version => '~> 1.0.6'
|
37
|
+
config.gem 'devise_cloudfuji_authenticatable'
|
38
|
+
|
39
|
+
|
40
|
+
Setup
|
41
|
+
-----
|
42
|
+
|
43
|
+
### 1.) Add the following to your devise model
|
44
|
+
|
45
|
+
attr_accessor :ido_id
|
46
|
+
devise :cloudfuji_authenticatable
|
47
|
+
|
48
|
+
To the devise() method, you can add other modules like trackable, but **do not use database_authenticatable**. cloudfuji_authenticatable is a replacement for that.
|
49
|
+
|
50
|
+
### 2.) Modify schema migration
|
51
|
+
|
52
|
+
Add the field required for the auth to work. For example, if the devise model is called User, add *cloudfuji_authenticatable* to the schema like below.
|
53
|
+
|
54
|
+
create_table :users do |t|
|
55
|
+
t.cloudfuji_authenticatable
|
56
|
+
end
|
57
|
+
|
58
|
+
That will add a string field called *ido_id*, which is unique to each Cloudfuji user.
|
59
|
+
|
60
|
+
|
61
|
+
### 3.) [OPTIONAL] Add ido_id to be indexed
|
62
|
+
|
63
|
+
add_index :users, :ido_id, :unique => true
|
64
|
+
|
65
|
+
|
66
|
+
Extra attributes
|
67
|
+
----------------
|
68
|
+
|
69
|
+
When the user is authenticated, Cloudfuji passed along the following extra attributes:
|
70
|
+
|
71
|
+
* email - user's email address
|
72
|
+
* first_name - user's first name
|
73
|
+
* last_name - user's last name
|
74
|
+
* locale - user's locale
|
75
|
+
|
76
|
+
If you find any of these attributes useful and want to capture them, add a cloudfuji_extra_attributes method to your User model (or whichever is your devise model). Below is an example that saves the email and the locale of a user.
|
77
|
+
|
78
|
+
class User < ActiveRecord::Base
|
79
|
+
attr_accessor :ido_id
|
80
|
+
devise :cloudfuji_authenticatable
|
81
|
+
|
82
|
+
def cloudfuji_extra_attributes(extra_attributes)
|
83
|
+
extra_attributes.each do |name, value|
|
84
|
+
case name.to_sym
|
85
|
+
when :email
|
86
|
+
self.email = value
|
87
|
+
when :locale
|
88
|
+
self.locale = value
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
The example above assumes that you have created fields called "email" and "locale" to save the attributes to. This gem doesn't create that for you. It has to be created manually and are optional.
|
95
|
+
|
96
|
+
__Note that these attributes might change anytime and are hence passed on as extra attributes. If defined, this method is called whenever the user logs into your app (starts a session). So when any of these are changed, your application will be able to capture those.__
|
97
|
+
|
98
|
+
**It is not advisable to use the user's email address to identify the user. Use the ido_id field for that purpose.**
|
99
|
+
|
100
|
+
Credits
|
101
|
+
--------
|
102
|
+
Based on [devise_cas_authenticatable](http://github.com/nbudin/devise_cas_authenticatable) by Nat Budin.
|
103
|
+
|
104
|
+
#### Tweaks by:
|
105
|
+
|
106
|
+
* Sean Grove
|
107
|
+
* Akash Manohar
|
108
|
+
|
109
|
+
[When contributing, add your name above and commit]
|
110
|
+
|
111
|
+
See also
|
112
|
+
--------
|
113
|
+
|
114
|
+
* [Devise](http://github.com/plataformatec/devise)
|
115
|
+
* [Warden](http://github.com/hassox/warden)
|
116
|
+
|
117
|
+
|
118
|
+
TODO
|
119
|
+
----
|
120
|
+
|
121
|
+
* Test on non-ActiveRecord ORMs
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
@@ -0,0 +1,101 @@
|
|
1
|
+
class Devise::CasSessionsController < Devise::SessionsController
|
2
|
+
|
3
|
+
def new
|
4
|
+
redirect_to(cas_login_url) unless returning_from_cas?
|
5
|
+
end
|
6
|
+
|
7
|
+
def service
|
8
|
+
warden.authenticate!(:scope => resource_name)
|
9
|
+
return redirect_to params[:redirect] if params[:redirect]
|
10
|
+
return redirect_to after_sign_in_path_for(resource_name)
|
11
|
+
end
|
12
|
+
|
13
|
+
def unregistered
|
14
|
+
end
|
15
|
+
|
16
|
+
def destroy
|
17
|
+
# Delete the ticket->session ID mapping if one exists for this session
|
18
|
+
if ticket = session['cas_last_valid_ticket']
|
19
|
+
::DeviseCasAuthenticatable::SingleSignOut::Strategies.current_strategy.delete_session_index(ticket)
|
20
|
+
end
|
21
|
+
|
22
|
+
# if :cas_create_user is false a CAS session might be open but not signed_in
|
23
|
+
# in such case we destroy the session here
|
24
|
+
if signed_in?(resource_name)
|
25
|
+
sign_out(resource_name)
|
26
|
+
else
|
27
|
+
reset_session
|
28
|
+
end
|
29
|
+
redirect_to(::Devise.cas_client.logout_url)
|
30
|
+
end
|
31
|
+
|
32
|
+
def single_sign_out
|
33
|
+
if ::Devise.cas_enable_single_sign_out
|
34
|
+
session_index = read_session_index
|
35
|
+
if session_index
|
36
|
+
logger.info "Intercepted single-sign-out request for CAS session #{session_index}."
|
37
|
+
session_id = ::DeviseCasAuthenticatable::SingleSignOut::Strategies.current_strategy.find_session_id_by_index(session_index)
|
38
|
+
destroy_cas_session(session_id, session_index) if session_id
|
39
|
+
else
|
40
|
+
logger.warn "Ignoring CAS single-sign-out request as no session index could be parsed from the parameters."
|
41
|
+
end
|
42
|
+
else
|
43
|
+
logger.warn "Ignoring CAS single-sign-out request as feature is not currently enabled."
|
44
|
+
end
|
45
|
+
|
46
|
+
render :nothing => true
|
47
|
+
end
|
48
|
+
|
49
|
+
protected
|
50
|
+
|
51
|
+
def read_session_index
|
52
|
+
if request.headers['CONTENT_TYPE'] =~ %r{^multipart/}
|
53
|
+
false
|
54
|
+
elsif request.post? && params['logoutRequest'] =~
|
55
|
+
%r{^<samlp:LogoutRequest.*?<samlp:SessionIndex>(.*)</samlp:SessionIndex>}m
|
56
|
+
$~[1]
|
57
|
+
else
|
58
|
+
false
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def destroy_cas_session(session_id, session_index)
|
63
|
+
if session_store && session_store.new.respond_to?(:destroy)
|
64
|
+
if session_store.respond_to? :find_by_session_id
|
65
|
+
user_session = session_store.find_by_session_id(session_id)
|
66
|
+
elsif session_store.respond_to? :find
|
67
|
+
user_session = session_store.find(session_id)
|
68
|
+
end
|
69
|
+
user_session.destroy if user_session
|
70
|
+
else
|
71
|
+
logger.info "A single sign out request was received for ticket #{session_index} but the Rails session_store is not a type supported for single-sign-out by devise_cas_authenticatable."
|
72
|
+
end
|
73
|
+
::DeviseCasAuthenticatable::SingleSignOut::Strategies.current_strategy.delete_session_index(session_index)
|
74
|
+
end
|
75
|
+
|
76
|
+
def session_store
|
77
|
+
if ::Rails.respond_to? :application
|
78
|
+
return @session_store ||= Rails.application.config.session_store.session_class
|
79
|
+
elsif ::ActionController::Base.respond_to? :session_store
|
80
|
+
return @session_store ||= ActionController::Base.session_store.session_class
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
def returning_from_cas?
|
85
|
+
params[:ticket] || request.referer =~ /^#{::Devise.cas_client.cas_base_url}/
|
86
|
+
end
|
87
|
+
|
88
|
+
def cas_return_to_url
|
89
|
+
resource_or_scope = ::Devise.mappings.keys.first rescue 'user'
|
90
|
+
session["#{resource_or_scope}_return_to"].nil? ? '/' : session["#{resource_or_scope}_return_to"].to_s
|
91
|
+
end
|
92
|
+
|
93
|
+
def cas_login_url
|
94
|
+
login_url = ::Devise.cas_client.add_service_to_login_url(::Devise.cas_service_url(request.url, devise_mapping))
|
95
|
+
|
96
|
+
redirect_url = "&redirect=#{cas_return_to_url}"
|
97
|
+
|
98
|
+
return "#{login_url}#{redirect_url}"
|
99
|
+
end
|
100
|
+
helper_method :cas_login_url
|
101
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
<p>Click <%= link_to "here", cas_login_url %> to sign in.</p>
|
@@ -0,0 +1,150 @@
|
|
1
|
+
<!doctype html>
|
2
|
+
|
3
|
+
<!-- paulirish.com/2008/conditional-stylesheets-vs-css-hacks-answer-neither/ -->
|
4
|
+
<!--[if lt IE 7 ]> <html lang="en" class="no-js ie6"> <![endif]-->
|
5
|
+
<!--[if IE 7 ]> <html lang="en" class="no-js ie7"> <![endif]-->
|
6
|
+
<!--[if IE 8 ]> <html lang="en" class="no-js ie8"> <![endif]-->
|
7
|
+
<!--[if IE 9 ]> <html lang="en" class="no-js ie9"> <![endif]-->
|
8
|
+
<!--[if (gt IE 9)|!(IE)]><!--> <html lang="en" class="no-js"> <!--<![endif]-->
|
9
|
+
<head>
|
10
|
+
<meta charset="utf-8">
|
11
|
+
|
12
|
+
<!-- Always force latest IE rendering engine (even in intranet) & Chrome Frame
|
13
|
+
Remove this if you use the .htaccess -->
|
14
|
+
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
15
|
+
|
16
|
+
<title>Beta Signups | Cloudfuji</title>
|
17
|
+
<meta name="description" content="">
|
18
|
+
<meta name="author" content="">
|
19
|
+
|
20
|
+
<!-- Mobile viewport optimized: j.mp/bplateviewport -->
|
21
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
22
|
+
|
23
|
+
<!-- Place favicon.ico & apple-touch-icon.png in the root of your domain and delete these references -->
|
24
|
+
<link rel="shortcut icon" href="/favicon.ico">
|
25
|
+
<link rel="apple-touch-icon" href="/apple-touch-icon.png" >
|
26
|
+
|
27
|
+
<!--[if (!IE)|(gte IE 8)]><!-->
|
28
|
+
<link href="/packages/common-datauri.css?1307048615" media="all" rel="stylesheet" type="text/css" />
|
29
|
+
<!--<![endif]-->
|
30
|
+
<!--[if lte IE 7]>
|
31
|
+
<link href="/packages/common-mhtml.css?1307084302" media="all" rel="stylesheet" type="text/css" />
|
32
|
+
<![endif]-->
|
33
|
+
<!--[if (!IE)|(gte IE 8)]><!-->
|
34
|
+
<link href="/packages/print-datauri.css?1307048614" media="print" rel="stylesheet" type="text/css" />
|
35
|
+
<!--<![endif]-->
|
36
|
+
<!--[if lte IE 7]>
|
37
|
+
<link href="/packages/print-mhtml.css?1307084303" media="print" rel="stylesheet" type="text/css" />
|
38
|
+
<![endif]-->
|
39
|
+
|
40
|
+
<!--[if IE]>
|
41
|
+
<link href="/stylesheets/ie.css?1307048560" media="screen, projection" rel="stylesheet" type="text/css" />
|
42
|
+
<![endif]-->
|
43
|
+
<!--[if !IE 7]>
|
44
|
+
<style type="text/css">
|
45
|
+
#wrap {display:table;height:100%}
|
46
|
+
</style>
|
47
|
+
<![endif]-->
|
48
|
+
<meta name="csrf-param" content="authenticity_token"/>
|
49
|
+
<meta name="csrf-token" content="P8qAtaA1MPX7p14725fxZyM3sFbvx4bSjokKHFmIs04="/>
|
50
|
+
|
51
|
+
<!-- Uncomment if you are specifically targeting less enabled mobile browsers
|
52
|
+
<link rel="stylesheet" media="handheld" href="css/handheld.css?v=2"> -->
|
53
|
+
<style>
|
54
|
+
@charset "UTF-8";.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{position:absolute!important;clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px)}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:after{content:".";display:block;height:0;clear:both;visibility:hidden}.ui-helper-clearfix{display:inline-block}/*\*/* html .ui-helper-clearfix{height:1%}.ui-helper-clearfix{display:block}/**/.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:absolute;top:0;left:0;width:100%;height:100%}.ui-widget{font-family:Verdana,Arial,sans-serif;font-size:1.1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Verdana,Arial,sans-serif;font-size:1em}.ui-widget-content{border:1px solid #aaa;background:#fff url(../javascripts/vendor/jquery-ui-1.8.12.custom/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png?1307048560) 50% 50% repeat-x;color:#222}.ui-widget-content a{color:#222}.ui-widget-header{border:1px solid #aaa;background:#ccc url(../javascripts/vendor/jquery-ui-1.8.12.custom/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png?1307048560) 50% 50% repeat-x;color:#222;font-weight:bold}.ui-widget-header a{color:#222}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid #d3d3d3;background:#e6e6e6 url(../javascripts/vendor/jquery-ui-1.8.12.custom/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png?1307048560) 50% 50% repeat-x;font-weight:normal;color:#555}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#555;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #999;background:#dadada url(../javascripts/vendor/jquery-ui-1.8.12.custom/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png?1307048560) 50% 50% repeat-x;font-weight:normal;color:#212121}.ui-state-hover a,.ui-state-hover a:hover{color:#212121;text-decoration:none}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #aaa;background:#fff url(../javascripts/vendor/jquery-ui-1.8.12.custom/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png?1307048560) 50% 50% repeat-x;font-weight:normal;color:#212121}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#212121;text-decoration:none}.ui-widget :active{outline:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #fcefa1;background:#fbf9ee url(../javascripts/vendor/jquery-ui-1.8.12.custom/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png?1307048560) 50% 50% repeat-x;color:#363636}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#363636}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#fef1ec url(../javascripts/vendor/jquery-ui-1.8.12.custom/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png?1307048560) 50% 50% repeat-x;color:#cd0a0a}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#cd0a0a}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#cd0a0a}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-icon{width:16px;height:16px;background-image:url(../javascripts/vendor/jquery-ui-1.8.12.custom/css/smoothness/images/ui-icons_222222_256x240.png?1307048560)}.ui-widget-content .ui-icon{background-image:url(../javascripts/vendor/jquery-ui-1.8.12.custom/css/smoothness/images/ui-icons_222222_256x240.png?1307048560)}.ui-widget-header .ui-icon{background-image:url(../javascripts/vendor/jquery-ui-1.8.12.custom/css/smoothness/images/ui-icons_222222_256x240.png?1307048560)}.ui-state-default .ui-icon{background-image:url(../javascripts/vendor/jquery-ui-1.8.12.custom/css/smoothness/images/ui-icons_888888_256x240.png?1307048560)}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url(../javascripts/vendor/jquery-ui-1.8.12.custom/css/smoothness/images/ui-icons_454545_256x240.png?1307048560)}.ui-state-active .ui-icon{background-image:url(../javascripts/vendor/jquery-ui-1.8.12.custom/css/smoothness/images/ui-icons_454545_256x240.png?1307048560)}.ui-state-highlight .ui-icon{background-image:url(../javascripts/vendor/jquery-ui-1.8.12.custom/css/smoothness/images/ui-icons_2e83ff_256x240.png?1307048560)}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url(../javascripts/vendor/jquery-ui-1.8.12.custom/css/smoothness/images/ui-icons_cd0a0a_256x240.png?1307048560)}.ui-icon-carat-1-n{background-position:0 0}.ui-icon-carat-1-ne{background-position:-16px 0}.ui-icon-carat-1-e{background-position:-32px 0}.ui-icon-carat-1-se{background-position:-48px 0}.ui-icon-carat-1-s{background-position:-64px 0}.ui-icon-carat-1-sw{background-position:-80px 0}.ui-icon-carat-1-w{background-position:-96px 0}.ui-icon-carat-1-nw{background-position:-112px 0}.ui-icon-carat-2-n-s{background-position:-128px 0}.ui-icon-carat-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-64px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-64px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:0 -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px - 48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-off{background-position:-96px -144px}.ui-icon-radio-on{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-tl{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px}.ui-corner-tr{-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;border-top-right-radius:4px}.ui-corner-bl{-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px}.ui-corner-br{-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px}.ui-corner-top{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;border-top-right-radius:4px}.ui-corner-bottom{-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px}.ui-corner-right{-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px}.ui-corner-left{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px}.ui-corner-all{-moz-border-radius:4px;-webkit-border-radius:4px;border-radius:4px}.ui-widget-overlay{background:#aaa url(../javascripts/vendor/jquery-ui-1.8.12.custom/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png?1307048560) 50% 50% repeat-x;opacity:.30;filter:Alpha(Opacity=30)}.ui-widget-shadow{margin:-8px 0 0 -8px;padding:8px;background:#aaa url(../javascripts/vendor/jquery-ui-1.8.12.custom/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png?1307048560) 50% 50% repeat-x;opacity:.30;filter:Alpha(Opacity=30);-moz-border-radius:8px;-webkit-border-radius:8px;border-radius:8px}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:.1px;z-index:99999;display:block;background-image:url(data:)}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted black}.ui-accordion{width:100%}.ui-accordion .ui-accordion-header{cursor:pointer;position:relative;margin-top:1px;zoom:1}.ui-accordion .ui-accordion-li-fix{display:inline}.ui-accordion .ui-accordion-header-active{border-bottom:0!important}.ui-accordion .ui-accordion-header a{display:block;font-size:1em;padding:.5em .5em .5em .7em}.ui-accordion-icons .ui-accordion-header a{padding-left:2.2em}.ui-accordion .ui-accordion-header .ui-icon{position:absolute;left:.5em;top:50%;margin-top:-8px}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;margin-top:-2px;position:relative;top:1px;margin-bottom:2px;overflow:auto;display:none;zoom:1}.ui-accordion .ui-accordion-content-active{display:block}.ui-autocomplete{position:absolute;cursor:default}* html .ui-autocomplete{width:1px}.ui-menu{list-style:none;padding:2px;margin:0;display:block;float:left}.ui-menu .ui-menu{margin-top:-3px}.ui-menu .ui-menu-item{margin:0;padding:0;zoom:1;float:left;clear:left;width:100%}.ui-menu .ui-menu-item a{text-decoration:none;display:block;padding:.2em .4em;line-height:1.5;zoom:1}.ui-menu .ui-menu-item a.ui-state-hover,.ui-menu .ui-menu-item a.ui-state-active{font-weight:normal;margin:-1px}.ui-button{display:inline-block;position:relative;padding:0;margin-right:.1em;text-decoration:none!important;cursor:pointer;text-align:center;zoom:1;overflow:visible}.ui-button-icon-only{width:2.2em}button.ui-button-icon-only{width:2.4em}.ui-button-icons-only{width:3.4em}button.ui-button-icons-only{width:3.7em}.ui-button .ui-button-text{display:block;line-height:1.4}.ui-button-text-only .ui-button-text{padding:.4em 1em}.ui-button-icon-only .ui-button-text,.ui-button-icons-only .ui-button-text{padding:.4em;text-indent:-9999999px}.ui-button-text-icon-primary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 1em .4em 2.1em}.ui-button-text-icon-secondary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 2.1em .4em 1em}.ui-button-text-icons .ui-button-text{padding-left:2.1em;padding-right:2.1em}input.ui-button{padding:.4em 1em}.ui-button-icon-only .ui-icon,.ui-button-text-icon-primary .ui-icon,.ui-button-text-icon-secondary .ui-icon,.ui-button-text-icons .ui-icon,.ui-button-icons-only .ui-icon{position:absolute;top:50%;margin-top:-8px}.ui-button-icon-only .ui-icon{left:50%;margin-left:-8px}.ui-button-text-icon-primary .ui-button-icon-primary,.ui-button-text-icons .ui-button-icon-primary,.ui-button-icons-only .ui-button-icon-primary{left:.5em}.ui-button-text-icon-secondary .ui-button-icon-secondary,.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary{right:.5em}.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary{right:.5em}.ui-buttonset{margin-right:7px}.ui-buttonset .ui-button{margin-left:0;margin-right:-.3em}button.ui-button::-moz-focus-inner{border:0;padding:0}.ui-dialog{position:absolute;padding:.2em;width:300px;overflow:hidden}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 16px .1em 0}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:19px;margin:-10px 0 0 0;padding:1px;height:18px}.ui-dialog .ui-dialog-titlebar-close span{display:block;margin:1px}.ui-dialog .ui-dialog-titlebar-close:hover,.ui-dialog .ui-dialog-titlebar-close:focus{padding:0}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:none;overflow:auto;zoom:1}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0 0;background-image:none;margin:.5em 0 0 0;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-se{width:14px;height:14px;right:3px;bottom:3px}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-tabs{position:relative;padding:.2em;zoom:1}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:1px;margin:0 .2em 1px 0;border-bottom:0!important;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav li a{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-selected{margin-bottom:0;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-tabs-selected a,.ui-tabs .ui-tabs-nav li.ui-state-disabled a,.ui-tabs .ui-tabs-nav li.ui-state-processing a{cursor:text}.ui-tabs .ui-tabs-nav li a,.ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:none}.ui-tabs .ui-tabs-hide{display:none!important}.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month-year{width:100%}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:49%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:bold;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em .6em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current{float:right}.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-datepicker-cover{display:none;display:block;position:absolute;z-index:-1;filter:mask();top:-4px;left:-4px;width:200px;height:200px}.ui-progressbar{height:2em;text-align:left}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%}.terminal .clipboard{position:absolute;bottom:0;left:0;opacity:.01;filter:alpha(opacity = .01);filter:alpha(opacity=0.01)}.cmd>.clipboard{position:fixed}.terminal{padding:10px;position:relative;overflow:hidden}.cmd{padding:0;margin:0;height:1.3em}.terminal .terminal-output div{display:block}.terminal,.terminal .terminal-output,.terminal .terminal-output div,.terminal .terminal-output div div,.cmd,.terminal .cmd span,.terminal .cmd div{font-family:monospace;color:#aaa;background-color:#000;font-size:12px}.terminal .cmd span{float:left}.terminal div::selection,.terminal span::selection{background-color:#aaa;color:#000}.terminal .cmd span.inverted{background-color:#aaa;color:#000}.terminal div::-moz-selection,.terminal span::-moz-selection{background-color:#aaa;color:#000}.terminal .terminal-output div.error,.terminal .terminal-output div.error div{color:red}.tilda{position:fixed;top:0;left:0;width:100%;z-index:1100}.inputContainer{position:relative;float:left}.formError{position:absolute;top:300px;left:300px;display:block;z-index:5000;cursor:pointer}.ajaxSubmit{padding:20px;background:#55ea55;border:1px solid #999;display:none}.formError .formErrorContent{width:100%;background:#ee0101;position:relative;z-index:5001;color:#fff;width:150px;font-family:tahoma;font-size:11px;border:2px solid #ddd;box-shadow:0 0 6px #000;-moz-box-shadow:0 0 6px #000;-webkit-box-shadow:0 0 6px #000;padding:4px 10px 4px 10px;border-radius:6px;-moz-border-radius:6px;-webkit-border-radius:6px}.greenPopup .formErrorContent{background:#33be40}.blackPopup .formErrorContent{background:#393939;color:#FFF}.formError .formErrorArrow{width:15px;margin:-2px 0 0 13px;position:relative;z-index:5006}.formError .formErrorArrowBottom{box-shadow:none;-moz-box-shadow:none;-webkit-box-shadow:none;margin:0 0 0 12px;top:2px}.formError .formErrorArrow div{border-left:2px solid #ddd;border-right:2px solid #ddd;box-shadow:0 2px 3px #444;-moz-box-shadow:0 2px 3px #444;-webkit-box-shadow:0 2px 3px #444;font-size:0;height:1px;background:#ee0101;margin:0 auto;line-height:0;font-size:0;display:block}.formError .formErrorArrowBottom div{box-shadow:none;-moz-box-shadow:none;-webkit-box-shadow:none}.greenPopup .formErrorArrow div{background:#33be40}.blackPopup .formErrorArrow div{background:#393939;color:#FFF}.formError .formErrorArrow .line10{width:15px;border:none}.formError .formErrorArrow .line9{width:13px;border:none}.formError .formErrorArrow .line8{width:11px}.formError .formErrorArrow .line7{width:9px}.formError .formErrorArrow .line6{width:7px}.formError .formErrorArrow .line5{width:5px}.formError .formErrorArrow .line4{width:3px}.formError .formErrorArrow .line3{width:1px;border-left:2px solid #ddd;border-right:2px solid #ddd;border-bottom:0 solid #ddd}.formError .formErrorArrow .line2{width:3px;border:none;background:#ddd}.formError .formErrorArrow .line1{width:1px;border:none;background:#ddd}#facebox{position:absolute;top:0;left:0;z-index:100;text-align:left}#facebox .popup{position:relative;border:3px solid rgba(0,0,0,0);-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;-webkit-box-shadow:0 0 18px rgba(0,0,0,0.4);-moz-box-shadow:0 0 18px rgba(0,0,0,0.4);box-shadow:0 0 18px rgba(0,0,0,0.4)}#facebox .content{display:table;width:370px;padding:10px;background:#fff;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}#facebox .content>p:first-child{margin-top:0}#facebox .content>p:last-child{margin-bottom:0}#facebox .close{position:absolute;top:5px;right:5px;padding:2px;background:#fff}#facebox .close img{opacity:.3}#facebox .close:hover img{opacity:1.0}#facebox .loading{text-align:center}#facebox .image{text-align:center}#facebox img{border:0;margin:0}#facebox_overlay{position:fixed;top:0;left:0;height:100%;width:100%}.facebox_hide{z-index:-100}.facebox_overlayBG{background-color:#000;z-index:99}html,body,div,span,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,abbr,address,cite,code,del,dfn,em,img,ins,kbd,q,samp,small,strong,sub,sup,var,b,i,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,figcaption,figure,footer,header,hgroup,menu,nav,section,summary,time,mark,audio,video{margin:0;padding:0;border:0;font-size:100%;font:inherit;vertical-align:baseline}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}blockquote,q{quotes:none}blockquote:before,blockquote:after{content:"";content:none}q:before,q:after{content:"";content:none}ins{background-color:#ff9;color:black;text-decoration:none}mark{background-color:#ff9;color:black;font-style:italic;font-weight:bold}del{text-decoration:line-through}abbr[title],dfn[title]{border-bottom:1px dotted;cursor:help}table{border-collapse:collapse;border-spacing:0}hr{display:block;height:1px;border:0;border-top:1px solid #ccc;margin:1em 0;padding:0}input,select{vertical-align:middle}body{font:13px/1.231 sans-serif;*font-size:small}select,input,textarea,button{font:99% sans-serif}pre,code,kbd,samp{font-family:monospace,sans-serif}html{overflow-y:scroll}a:hover,a:active{outline:none}ul{margin-left:2em}ol{margin-left:2em;list-style-type:decimal}nav ul,nav li{margin:0;list-style:none;list-style-image:none}small{font-size:85%}strong,th{font-weight:bold}td{vertical-align:top}sub{font-size:75%;line-height:0;position:relative}sup{font-size:75%;line-height:0;position:relative;top:-0.5em}sub{bottom:-0.25em}pre{white-space:pre;white-space:pre-wrap;word-wrap:break-word;padding:15px}textarea{overflow:auto}.ie6 legend,.ie7 legend{margin-left:-7px}input[type="radio"]{vertical-align:text-bottom}input[type="checkbox"]{vertical-align:bottom}.ie7 input[type="checkbox"]{vertical-align:baseline}.ie6 input{vertical-align:text-bottom}label{cursor:pointer}input[type="button"],input[type="submit"],input[type="image"]{cursor:pointer}button{cursor:pointer;margin:0}input,select,textarea{margin:0}input:invalid,textarea:invalid{border-radius:1px;-moz-box-shadow:0 0 5px red;-webkit-box-shadow:0 0 5px red;box-shadow:0 0 5px red}.no-boxshadow input:invalid,.no-boxshadow textarea:invalid{background-color:#f0dddd}button{width:auto;overflow:visible}.ie7 img{-ms-interpolation-mode:bicubic}body,select,input,textarea{color:#444}.ir{display:block;text-indent:-999em;overflow:hidden;background-repeat:no-repeat;text-align:left;direction:ltr}.hidden{display:none;visibility:hidden}.visuallyhidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.visuallyhidden.focusable:active,.visuallyhidden.focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.invisible{visibility:hidden}.clearfix{zoom:1}.clearfix:before{content:"\0020";display:block;height:0;overflow:hidden}.clearfix:after{content:"\0020";display:block;height:0;overflow:hidden;clear:both}@media print{*{background:transparent!important;color:black!important;text-shadow:none!important;filter:none!important;-ms-filter:none!important}a{color:#444!important;text-decoration:underline}a:visited{color:#444!important;text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after{content:""}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}@page{margin:.5cm}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}}.fancy-button-reset-base-class,button,.button,button.hot,.button.hot,button.cool,.button.cool{font-family:"Lucida Grande",Lucida,Arial,sans-serif;background:url(../images/button_bg.png) repeat-x bottom left;margin:0;width:auto;overflow:visible;display:inline-block;cursor:pointer;text-decoration:none;border-style:solid;font-weight:bold}.fancy-button-reset-base-class::-moz-focus-inner,button::-moz-focus-inner,.button::-moz-focus-inner,button.hot::-moz-focus-inner,.button.hot::-moz-focus-inner,button.cool::-moz-focus-inner,.button.cool::-moz-focus-inner{border:none;padding:0}.fancy-button-reset-base-class:focus,button:focus,.button:focus,button.hot:focus,.button.hot:focus,button.cool:focus,.button.cool:focus{outline:none}.l{float:left}.r{float:right}.alpha{margin-left:0!important;padding-left:0!important}.omega{margin-right:0!important;padding-right:0!important}button,.button{-moz-border-radius:6px;-webkit-border-radius:6px;-o-border-radius:6px;-ms-border-radius:6px;-khtml-border-radius:6px;border-radius:6px;font-size:18px;line-height:1.2em;padding:.3em 1em;border-width:1px;background-color:#444;background-image:-webkit-gradient(linear,0% 0,0% 100%,color-stop(0%,#989898),color-stop(10%,#6a6a6a),color-stop(50%,#3d3d3d),color-stop(50%,#353535),color-stop(100%,#4f4f4f));background-image:-moz-linear-gradient(top,#989898 0,#6a6a6a 10%,#3d3d3d 50%,#353535 50%,#4f4f4f 100%);background-image:linear-gradient(top,#989898 0,#6a6a6a 10%,#3d3d3d 50%,#353535 50%,#4f4f4f 100%);border-color:#1e1e1e;text-shadow:#040404 0 1px 1px;-moz-box-shadow:rgba(255,255,255,0.27) 0 0 .1em 1px inset;-webkit-box-shadow:rgba(255,255,255,0.27) 0 0 .1em 1px inset;-o-box-shadow:rgba(255,255,255,0.27) 0 0 .1em 1px inset;box-shadow:rgba(255,255,255,0.27) 0 0 .1em 1px inset;-moz-background-clip:padding;-webkit-background-clip:padding;-o-background-clip:padding-box;-ms-background-clip:padding-box;-khtml-background-clip:padding-box;background-clip:padding-box;font-weight:normal!important;font-size:1em!important}button,button:visited,.button,.button:visited{color:white}button:hover,button:focus,.button:hover,.button:focus{background-color:#3c3c3c;background-image:-webkit-gradient(linear,0% 0,0% 100%,color-stop(0%,#909090),color-stop(10%,#626262),color-stop(50%,#353535),color-stop(50%,#2d2d2d),color-stop(100%,#474747));background-image:-moz-linear-gradient(top,#909090 0,#626262 10%,#353535 50%,#2d2d2d 50%,#474747 100%);background-image:linear-gradient(top,#909090 0,#626262 10%,#353535 50%,#2d2d2d 50%,#474747 100%);border-color:#161616;text-shadow:black 0 1px 1px}button:hover,button:hover:visited,button:focus,button:focus:visited,.button:hover,.button:hover:visited,.button:focus,.button:focus:visited{color:white}button:active,.button:active{background-color:#353535;background-image:-webkit-gradient(linear,0% 0,0% 100%,color-stop(0%,#353535),color-stop(30%,#3a3a3a),color-stop(50%,#303030),color-stop(50%,#292929),color-stop(100%,#4a4a4a));background-image:-moz-linear-gradient(top,#353535 0,#3a3a3a 30%,#303030 50%,#292929 50%,#4a4a4a 100%);background-image:linear-gradient(top,#353535 0,#3a3a3a 30%,#303030 50%,#292929 50%,#4a4a4a 100%);border-color:#0f0f0f;text-shadow:black 0 -1px -1px;-moz-box-shadow:#1e1e1e 0 .08em .1em 1px inset;-webkit-box-shadow:#1e1e1e 0 .08em .1em 1px inset;-o-box-shadow:#1e1e1e 0 .08em .1em 1px inset;box-shadow:#1e1e1e 0 .08em .1em 1px inset}button:active,button:active:visited,.button:active,.button:active:visited{color:white}button.hot,.button.hot{-moz-border-radius:6px;-webkit-border-radius:6px;-o-border-radius:6px;-ms-border-radius:6px;-khtml-border-radius:6px;border-radius:6px;font-size:18px;line-height:1.2em;padding:.3em 1em;border-width:1px;background-color:#ff1c1c;background-image:-webkit-gradient(linear,0% 0,0% 100%,color-stop(0%,#f8cbcb),color-stop(10%,#ed7a7a),color-stop(50%,#e22929),color-stop(50%,#de1e1e),color-stop(100%,#e64949));background-image:-moz-linear-gradient(top,#f8cbcb 0,#ed7a7a 10%,#e22929 50%,#de1e1e 50%,#e64949 100%);background-image:linear-gradient(top,#f8cbcb 0,#ed7a7a 10%,#e22929 50%,#de1e1e 50%,#e64949 100%);border-color:#b61919;text-shadow:#9c0000 0 1px 1px;-moz-box-shadow:rgba(255,255,255,0.55) 0 0 .1em 1px inset;-webkit-box-shadow:rgba(255,255,255,0.55) 0 0 .1em 1px inset;-o-box-shadow:rgba(255,255,255,0.55) 0 0 .1em 1px inset;box-shadow:rgba(255,255,255,0.55) 0 0 .1em 1px inset;-moz-background-clip:padding;-webkit-background-clip:padding;-o-background-clip:padding-box;-ms-background-clip:padding-box;-khtml-background-clip:padding-box;background-clip:padding-box}button.hot,button.hot:visited,.button.hot,.button.hot:visited{color:white}button.hot:hover,button.hot:focus,.button.hot:hover,.button.hot:focus{background-color:#ff0d0d;background-image:-webkit-gradient(linear,0% 0,0% 100%,color-stop(0%,#f6bebe),color-stop(10%,#eb6d6d),color-stop(50%,#de1e1e),color-stop(50%,#d11c1c),color-stop(100%,#e53b3b));background-image:-moz-linear-gradient(top,#f6bebe 0,#eb6d6d 10%,#de1e1e 50%,#d11c1c 50%,#e53b3b 100%);background-image:linear-gradient(top,#f6bebe 0,#eb6d6d 10%,#de1e1e 50%,#d11c1c 50%,#e53b3b 100%);border-color:#a91717;text-shadow:#8d0000 0 1px 1px}button.hot:hover,button.hot:hover:visited,button.hot:focus,button.hot:focus:visited,.button.hot:hover,.button.hot:hover:visited,.button.hot:focus,.button.hot:focus:visited{color:white}button.hot:active,.button.hot:active{background-color:#fc0000;background-image:-webkit-gradient(linear,0% 0,0% 100%,color-stop(0%,#de1e1e),color-stop(30%,#e22424),color-stop(50%,#d51c1c),color-stop(50%,#c71b1b),color-stop(100%,#e53f3f));background-image:-moz-linear-gradient(top,#de1e1e 0,#e22424 30%,#d51c1c 50%,#c71b1b 50%,#e53f3f 100%);background-image:linear-gradient(top,#de1e1e 0,#e22424 30%,#d51c1c 50%,#c71b1b 50%,#e53f3f 100%);border-color:#9b1515;text-shadow:#7d0000 0 -1px -1px;-moz-box-shadow:#b61919 0 .08em .1em 1px inset;-webkit-box-shadow:#b61919 0 .08em .1em 1px inset;-o-box-shadow:#b61919 0 .08em .1em 1px inset;box-shadow:#b61919 0 .08em .1em 1px inset}button.hot:active,button.hot:active:visited,.button.hot:active,.button.hot:active:visited{color:white}button.cool,.button.cool{-moz-border-radius:6px;-webkit-border-radius:6px;-o-border-radius:6px;-ms-border-radius:6px;-khtml-border-radius:6px;border-radius:6px;font-size:18px;line-height:1.2em;padding:.3em 1em;border-width:1px;background-color:#0d225d;background-image:-webkit-gradient(linear,0% 0,0% 100%,color-stop(0%,#6075b3),color-stop(10%,#3b4c7c),color-stop(50%,#1d253d),color-stop(50%,#181f33),color-stop(100%,#283456));background-image:-moz-linear-gradient(top,#6075b3 0,#3b4c7c 10%,#1d253d 50%,#181f33 50%,#283456 100%);background-image:linear-gradient(top,#6075b3 0,#3b4c7c 10%,#1d253d 50%,#181f33 50%,#283456 100%);border-color:#090c14;text-shadow:black 0 1px 1px;-moz-box-shadow:rgba(255,255,255,0.21) 0 0 .1em 1px inset;-webkit-box-shadow:rgba(255,255,255,0.21) 0 0 .1em 1px inset;-o-box-shadow:rgba(255,255,255,0.21) 0 0 .1em 1px inset;box-shadow:rgba(255,255,255,0.21) 0 0 .1em 1px inset;-moz-background-clip:padding;-webkit-background-clip:padding;-o-background-clip:padding-box;-ms-background-clip:padding-box;-khtml-background-clip:padding-box;background-clip:padding-box}button.cool,button.cool:visited,.button.cool,.button.cool:visited{color:white}button.cool:hover,button.cool:focus,.button.cool:hover,.button.cool:focus{background-color:#0b1e50;background-image:-webkit-gradient(linear,0% 0,0% 100%,color-stop(0%,#546daf),color-stop(10%,#354672),color-stop(50%,#181f33),color-stop(50%,#131929),color-stop(100%,#232e4c));background-image:-moz-linear-gradient(top,#546daf 0,#354672 10%,#181f33 50%,#131929 50%,#232e4c 100%);background-image:linear-gradient(top,#546daf 0,#354672 10%,#181f33 50%,#131929 50%,#232e4c 100%);border-color:#05060a;text-shadow:black 0 1px 1px}button.cool:hover,button.cool:hover:visited,button.cool:focus,button.cool:focus:visited,.button.cool:hover,.button.cool:hover:visited,.button.cool:focus,.button.cool:focus:visited{color:white}button.cool:active,.button.cool:active{background-color:#091842;background-image:-webkit-gradient(linear,0% 0,0% 100%,color-stop(0%,#181f33),color-stop(30%,#1b233a),color-stop(50%,#141a2c),color-stop(50%,#101421),color-stop(100%,#252f4f));background-image:-moz-linear-gradient(top,#181f33 0,#1b233a 30%,#141a2c 50%,#101421 50%,#252f4f 100%);background-image:linear-gradient(top,#181f33 0,#1b233a 30%,#141a2c 50%,#101421 50%,#252f4f 100%);border-color:black;text-shadow:black 0 -1px -1px;-moz-box-shadow:#090c14 0 .08em .1em 1px inset;-webkit-box-shadow:#090c14 0 .08em .1em 1px inset;-o-box-shadow:#090c14 0 .08em .1em 1px inset;box-shadow:#090c14 0 .08em .1em 1px inset}button.cool:active,button.cool:active:visited,.button.cool:active,.button.cool:active:visited{color:white}input[type="text"],.text,.password,input[type="password"]{padding:7px;border:2px solid #bcc3c8;border-radius:5px;-moz-border-radius:5px;-webkit-border-radius:5px;color:#222c48;background:url(/images/input-sliver.png?1307048560) repeat-x}.app_cell{border-radius:10px;-moz-border-radius:10px;-webkit-border-radius:10px;background:#f5f6f2;width:910px;height:90px;margin:20px auto 0 auto;padding:10px}.app_cell .delete_app{color:#e43737;text-decoration:none;text-shadow:none!important}.app_cell .delete_app:hover{text-decoration:underline}.app_details{margin-left:10px;color:#222548;text-shadow:2px 2px 0 white}.app_details h2{font-size:1.6em}.app_details h2 a{color:#222548;text-decoration:none}.app_details p{font-size:1.2em}.app_control{display:block;width:60px;text-align:center;margin-right:10px;text-decoration:none;color:#e43737}.app_control:hover .app_control_caption{text-decoration:underline}.app_control_caption{padding-top:5px}.control_frame{display:block;clear:both;width:60px;height:55px;border-radius:5px;-moz-border-radius:5px;-webkit-border-radius:5px;line-height:60px;text-align:center;padding-top:15px;margin-bottom:5px;background:#e1e3e0}.control_icon{display:block;height:40px;width:40px;margin:0 auto;background:#e1e3e0 url(/images/actions-icons.png?1307048560) no-repeat}.logs_icon{background-position:0 -80px}.update_icon{background-position:0 -40px}.console_icon{background-position:0 -120px}.url-box{color:#002060;font-size:1.3em;padding:10px;width:434px;border:2px solid #002060;border-radius:5px;-moz-border-radius:5px;-webkit-border-radius:5px}.url-form{float:left}.url-holder{padding-bottom:15px}.url-holder h2{font-size:1.3em;font-weight:bold;margin:10px 0;color:#002060;float:left;clear:right;padding-left:10px}.url-holder h3{font-size:1.4em;margin-bottom:10px}.title{margin-bottom:20px}.title h1{font-size:1.4em;font-weight:bold;color:#c1af8a}.error-logs{height:200px;border:1px solid;overflow:scroll;padding:10px}.progress{display:none;width:530px;height:68px;font-size:1.3em;border-radius:16px;-moz-border-radius:16px;-webkit-border-radius:16px}.progress-percent{float:left;margin:0 15px}.throbber-holder{float:left;margin-right:15px;position:relative;top:10px}.progress-overlay{position:absolute;width:0;height:68px;opacity:.4;background-image:-webkit-gradient(linear,left bottom,left top,color-stop(0.08,#002060),color-stop(0.54,#364363));background-image:-moz-linear-gradient(center bottom,#002060 8%,#364363 54%)}.progress-box{position:relative;line-height:68px;background-image:-webkit-gradient(linear,left bottom,left top,color-stop(0.05,#323232),color-stop(0.1,#616161),color-stop(0.6,#c8c8c8),color-stop(0.8,#d6d6d6),color-stop(0.9,#e6e6e6));background-image:-moz-linear-gradient(center bottom,#323232 5%,#616161 10%,#c8c8c8 60%,#d6d6d6 80%,#e6e6e6 90%);color:#333}.progress-todo-list{list-style:none;position:absolute;left:65px}.showcase_app{float:left;display:block;width:279px;height:129px;padding:11px;background:#f5f6f2;border-radius:5px;-moz-border-radius:5px;-webkit-border-radius:5px;text-decoration:none}.showcase_app:hover span{text-decoration:underline}.showcase_app h3{color:#e43737;font-size:1.5em}.showcase_app cite{color:#222c48}.showcase_images{float:left;margin-right:10px}.showcase_text{width:180px}#customizer{background:white;padding:30px;width:520px}#customizer h2{color:#7b8287;font-size:1.5em}#customizer ul{border:1px solid #bcc3c8;border-radius:5px;-moz-border-radius:5px;-webkit-border-radius:5px;display:block;list-style-type:none;margin-left:0}#customizer ul li{border-bottom:1px solid #bcc3c8;padding:7px}#customizer p.domain_widget{padding-top:11px}#customizer .domain_input{width:388px;margin-right:4px}#variable_controls{padding-top:28px}.save_strip{height:40px;background:#f5f6f2;width:520px;text-align:center;padding:10px}body.logs_show,body.logs_index,body.console_index{background:white!important}body.logs_show #main,body.logs_index #main,body.console_index #main{padding:0;margin:0}body.logs_show .cursor,body.logs_index .cursor,body.console_index .cursor{background:#0e1e3a!important}.log_header{position:fixed;z-index:9000;width:100%}.log_body{padding-top:60px;font-family:sans-serif,monofont}.console_input{width:100%;display:inline}.terminal .clipboard{position:absolute;bottom:0;left:0;opacity:.01;filter:alpha(opacity=0.01);filter:alpha(opacity=0.01)}.cmd>.clipboard{position:fixed}.terminal{padding-left:10px;padding-right:10px;position:relative;overflow:hidden}.cmd{padding:0;margin:0;height:1.3em}.terminal{font-family:monospace;color:black;background-color:white;font-size:12px}.terminal .terminal-output{font-family:monospace;color:black;background-color:white;font-size:12px}.terminal .terminal-output div{display:block;font-family:monospace;color:black;background-color:white;font-size:12px}.terminal .terminal-output div div{font-family:monospace;color:black;background-color:white;font-size:12px}.cmd{font-family:monospace;color:black;background-color:white;font-size:12px}.terminal .cmd span,.terminal .cmd div{font-family:monospace;color:black;background-color:white;font-size:12px}.terminal .cmd span{float:left}.terminal div::selection,.terminal span::selection,.terminal .cmd span.inverted,.terminal div::-moz-selection,.terminal span::-moz-selection{background-color:black;color:white}.terminal .terminal-output div.error{color:red}.terminal .terminal-output div.error div{color:red}.tilda{position:fixed;top:0;left:0;width:100%;z-index:1100}.log_info{display:block;height:50px;line-height:50px;padding-left:15px}.log_controls{height:50px;line-height:50px}.sessions-holder{background:#f5f6f2;border-radius:5px;-moz-border-radius:5px;-webkit-border-radius:5px;padding:30px;width:310px}.sessions-holder a{text-decoration:none;color:#e43737}.sessions-holder a:hover{text-decoration:underline}.sessions-holder p{padding-bottom:20px}.sessions-holder label{color:#7b8287;font-weight:bold;text-shadow:0 0 2px white}.sessions-holder input[type="text"],.sessions-holder input[type="password"]{margin-top:8px}.sessions_title{color:#222c48;padding-bottom:15px}.sessions_title a{text-decoration:none;color:#e43737}.sessions_title a:hover{text-decoration:underline}html{height:100%}body{height:100%;background:#eeeded url(/images/pattern-bg.png?1307048560) repeat;color:#222548}body>div#root{height:auto;min-height:100%}div#root{height:100%;width:990px;margin:0 auto;background:white;-moz-box-shadow:0 0 10px #888;-webkit-box-shadow:0 0 10px #888;box-shadow:0 0 10px #888}.main_header{display:block;height:100px}#footer{display:block;background:#222c48 url(/images/footer-bg.png?1307048560);width:960px;margin:0 auto;height:70px;margin-top:-70px!important;color:white;padding:15px}#footer ul{float:left;display:block;margin-right:72px;list-style-type:none;margin-left:0}#main{display:block;padding-bottom:100px;background:white}#content{padding:15px}.main_header,.log_header{height:50px;background:#222c48;border-bottom:5px solid #e43737}.main_header a,.log_header a{text-decoration:none;color:#e43737}.main_header a.logo,.log_header a.logo{color:white;padding:15px 0 0 15px}.main_header span,.log_header span{color:white}.main_site_nav a{display:block;height:50px;float:left;padding-right:25px;text-shadow:0 0 3px black;text-align:center;margin-top:17px}.main_site_nav span{color:#e43737!important}.main_site_nav a.hot .flag{display:block;border-color:transparent transparent #e43737 transparent;border-style:solid;border-width:9px;margin:0 auto;width:0;height:0}#auth_links{padding:16px 15px 0}#auth_links .flag{display:block;border-color:white transparent transparent transparent;border-style:solid;border-width:7px;float:right;margin:5px 0 0 5px;width:0;height:0}.section_header{background:#f5f6f2 url(/images/title-bg.png?1307048560);padding:30px 15px}.section_logo{height:66px;height:66px;padding-left:65px}.section_title{color:#e43737;line-height:66px;font-size:2.8em;display:block;height:66px;padding-left:15px}.section_logo{background:url(/images/title-icons.png?1307048560)}.apps{background-position:0 -65px}.sign_up{background-position:0 -130px}.section_text{height:66px;line-height:66px;font-size:1.3em;color:#222c48}.section_text a{color:#e43737;text-decoration:none}.section_text a:hover{text-decoration:underline}.divider{height:40px;width:960px;padding:0 15px;line-height:40px}.divider label{color:#7b8287;text-shadow:0 0 3px white}.divider input[type="text"]{margin-left:15px;height:22px;width:120px;padding:0 10px;border:2px solid #7b8287;border-radius:5px;-moz-border-radius:5px;-webkit-border-radius:5px}.divider.dark{background:#bbc2c7;-moz-box-shadow:inset 0 2px 5px #888,inset 0 -2px 5px #888;-webkit-box-shadow:inset 0 2px 5px #888,inset 0 -2px 5px #888;box-shadow:inset 0 2px 5px #888,inset 0 -2px 5px #888}.bushi_box{background:#f5f6f2;@rounded_corners(10px);padding:30px;font-weight:bold;color:#7b8287}.bushi_box a{color:#e43737;text-decoration:none}.bushi_box a:hover{text-decoration:underline}#auth_links{display:block;background:#222c48}#auth_links nav{display:none;padding:10px 0;background:#222c48}#auth_links.open{-moz-box-shadow:inset 0 5px 5px #888,0px 5px 5px #888;-webkit-box-shadow:inset 0 5px 5px #888,0px 5px 5px #888;box-shadow:inset 0 5px 5px #888,0px 5px 5px #888;border-radius:5px;-moz-border-radius:5px;-webkit-border-radius:5px}
|
55
|
+
</style>
|
56
|
+
</head>
|
57
|
+
|
58
|
+
<body class="static_splash">
|
59
|
+
|
60
|
+
<div id="root">
|
61
|
+
<div class="clearfix main_header">
|
62
|
+
<a href="http://cloudfuji.com" class="logo l clearfix">
|
63
|
+
<img src="http://cloudfuji.com/images/header-logo.png" class="l" style="position:relative;bottom:10px;">
|
64
|
+
<img src="http://cloudfuji.com/images/logo.png" height="20" width="93" alt="cloudfuji" class="l logo_text" style="margin-left:10px;">
|
65
|
+
</a>
|
66
|
+
</div>
|
67
|
+
|
68
|
+
<section id="main">
|
69
|
+
<h1>The user <%=h params[:username] %> is not registered with this site.
|
70
|
+
Please <%= link_to "sign in using a different account", Devise.cas_client.logout_url(new_session_path(resource_name)) %>.</h1>
|
71
|
+
</section>
|
72
|
+
|
73
|
+
</div> <!-- end of #ro0t -->
|
74
|
+
|
75
|
+
<footer id="footer">
|
76
|
+
<div class="main_footer clearfix">
|
77
|
+
<!-- <div class="footer_disclaimer">
|
78
|
+
|
79
|
+
</div> -->
|
80
|
+
</div>
|
81
|
+
|
82
|
+
</footer>
|
83
|
+
<!-- Javascript at the bottom for fast page loading -->
|
84
|
+
|
85
|
+
<!-- Grab Google CDNs jQuery. fall back to local if necessary -->
|
86
|
+
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.0/jquery.min.js"></script>
|
87
|
+
|
88
|
+
<script type="text/javascript">
|
89
|
+
(function () {
|
90
|
+
var $name = $("#name");
|
91
|
+
var $url = $("#url");
|
92
|
+
var $source = $("#source");
|
93
|
+
var $message = $("#message");
|
94
|
+
|
95
|
+
var cloudfujiName = location.hostname.split(".cloudfuji.com")[0];
|
96
|
+
|
97
|
+
$name.text("Your app's Cloudfuji name is '" + cloudfujiName + "'.");
|
98
|
+
$url.html("The full address for the app is <a href='http://" + cloudfujiName + ".cloudfuji.com/'>http://" + cloudfujiName + ".cloudfuji.com/</a>");
|
99
|
+
|
100
|
+
var issueAppCommand = function(command, cb) {
|
101
|
+
//console.log("Updating app status for " + cloudfujiName);
|
102
|
+
$.ajax({
|
103
|
+
url: "http://cloudfuji.com/apps/" + cloudfujiName + "/command",
|
104
|
+
type: "get",
|
105
|
+
dataType: "jsonp",
|
106
|
+
data: {
|
107
|
+
command: command
|
108
|
+
},
|
109
|
+
error: function(err, status, xhr){
|
110
|
+
//console.log(err, status, xhr);
|
111
|
+
return cb(err);
|
112
|
+
},
|
113
|
+
success: function(data, status, xhr){
|
114
|
+
return cb(null, data);
|
115
|
+
}
|
116
|
+
});
|
117
|
+
};
|
118
|
+
|
119
|
+
var checkIntervalHandle;
|
120
|
+
|
121
|
+
var updateAppStatus = function() {
|
122
|
+
issueAppCommand("status", function(err, data) {
|
123
|
+
if (err) {
|
124
|
+
$message.html("We're experiencing some difficulty right now. Please try refreshing. If that doesn't work, shoot us an email at support@cloudfuji.com and we'll get on it as soon as we can.");
|
125
|
+
} else if ("stopped" === data.status) {
|
126
|
+
issueAppCommand("start", function() {});
|
127
|
+
} else {
|
128
|
+
$message.html("Your app is currently <strong>" + data.status + "</strong>");
|
129
|
+
$source.html("This app was deployed from " + data.app.app.url);
|
130
|
+
|
131
|
+
if ("running" === data.status) {
|
132
|
+
window.location = window.location;
|
133
|
+
clearInterval(checkIntervalHandle);
|
134
|
+
}
|
135
|
+
}
|
136
|
+
});
|
137
|
+
};
|
138
|
+
|
139
|
+
updateAppStatus();
|
140
|
+
checkIntervalHandle = setInterval(updateAppStatus, 1000);
|
141
|
+
})();
|
142
|
+
</script>
|
143
|
+
|
144
|
+
<!--[if lt IE 7 ]>
|
145
|
+
<script src="js/libs/dd_belatedpng.js"></script>
|
146
|
+
<script> DD_belatedPNG.fix('img, .png_bg'); //fix any <img> or .png_bg background-images </script>
|
147
|
+
<![endif]-->y
|
148
|
+
</body>
|
149
|
+
</html>
|
150
|
+
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "devise_cloudfuji_authenticatable/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "devise_cloudfuji_authenticatable"
|
7
|
+
s.version = DeviseCloudfujiAuthenticatable::VERSION
|
8
|
+
s.authors = ["Akash Manohar J", "Sean Grove", "Didier Lafforgue"]
|
9
|
+
s.email = "s@cloudfuji.com"
|
10
|
+
s.homepage = "http://github.com/cloudfuji/cloudfuji_cas_authenticatable"
|
11
|
+
s.summary = %q{Cloudfuji SSO authentication module for Devise}
|
12
|
+
s.description = %q{Cloudfuji SSO authentication module for Devise. A slight variant of the excellent work from Nat Budlin on devise_cas_authenticatable.}
|
13
|
+
|
14
|
+
s.rubyforge_project = "devise_cloudfuji_authenticatable"
|
15
|
+
|
16
|
+
s.files = `git ls-files`.split("\n")
|
17
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
|
+
s.require_paths = ["lib"]
|
20
|
+
|
21
|
+
# specify any dependencies here; for example:
|
22
|
+
# s.add_development_dependency "rspec"
|
23
|
+
# s.add_runtime_dependency "rest-client"
|
24
|
+
s.add_runtime_dependency(%q<devise>, ["= 1.5.3"])
|
25
|
+
s.add_runtime_dependency(%q<rubycas-client>, [">= 2.2.1"])
|
26
|
+
|
27
|
+
s.add_development_dependency("rspec")
|
28
|
+
s.add_development_dependency("mocha")
|
29
|
+
s.add_development_dependency("shoulda")
|
30
|
+
s.add_development_dependency("sqlite3-ruby")
|
31
|
+
s.add_development_dependency("sham_rack")
|
32
|
+
s.add_development_dependency("capybara")
|
33
|
+
s.add_development_dependency('crypt-isaac')
|
34
|
+
s.add_development_dependency('launchy')
|
35
|
+
s.add_development_dependency('pry')
|
36
|
+
end
|