Update DEB-specs to 2013.2 version
authorDmitry Burmistrov <dburmistrov@mirantis.com>
Tue, 22 Oct 2013 09:22:57 +0000 (13:22 +0400)
committerDmitry Burmistrov <dburmistrov@mirantis.com>
Tue, 22 Oct 2013 09:22:57 +0000 (13:22 +0400)
21 files changed:
debian/README.compression
debian/changelog
debian/control
debian/openstack-dashboard.conf
debian/openstack-dashboard.dirs
debian/openstack-dashboard.install
debian/openstack-dashboard.postinst
debian/openstack-dashboard.postrm
debian/openstack-dashboard.preinst
debian/patches/fix-dashboard-django-wsgi.patch
debian/patches/fix-dashboard-manage.patch
debian/patches/fix-ubuntu-tests.patch
debian/patches/series
debian/patches/ubuntu_local_settings.patch [deleted file]
debian/patches/ubuntu_settings.patch [new file with mode: 0644]
debian/rules
debian/static/openstack-dashboard/css/d46048c6478b.css [moved from debian/static/openstack-dashboard/css/3c066b7fc33c.css with 63% similarity]
debian/static/openstack-dashboard/js/271a130e6a31.js [moved from debian/static/openstack-dashboard/js/7d82b0a14954.js with 77% similarity]
debian/static/openstack-dashboard/js/588884c5a22a.js [moved from debian/static/openstack-dashboard/js/967e5ade6890.js with 58% similarity]
debian/static/openstack-dashboard/manifest.json
debian/theme/css/ubuntu.css

index 4492b0feaf043dca256e15f26aa7346746e98cc6..a74700fca9de28e2f6542659ec0bc5c31f63b2af 100644 (file)
@@ -1,5 +1,6 @@
 Until this can be scripted and integrated into package build, updating the
 pre-compressed static CSS and JS requires a some manual steps:
 
-   sudo apt-get install node-less nodejs-legacy python-openstack-auth python-compressor
+   sudo apt-get install python-lesscpy python-openstack-auth python-compressor
+   quilt pop top
    ./debian/rules refresh-static-assets
index 61f16feb9c9b00ac6b4c221d451e789b72616c73..56c3afb9b77cf0921932cf0db17b8af0f883af8c 100644 (file)
@@ -1,8 +1,108 @@
-horizon (1:2013.2~b2-0ubuntu2~cloud0) precise-havana; urgency=low
+horizon (1:2013.2-0ubuntu1~cloud0) precise-havana; urgency=low
 
-  * New upstream release for the Ubuntu Cloud Archive.
+  * New upstream release for the Ubuntu Cloud Archive. 
 
- -- Chuck Short <zulcss@ubuntu.com>  Tue, 23 Jul 2013 08:19:16 -0400
+ -- Chuck Short <zulcss@ubuntu.com>  Wed, 16 Oct 2013 20:28:28 -0400
+
+horizon (1:2013.2~rc3-0ubuntu1) saucy; urgency=low
+
+  * New upstream release candidate (LP: #1240665).
+
+ -- Chuck Short <zulcss@ubuntu.com>  Wed, 16 Oct 2013 20:10:52 -0400
+
+horizon (1:2013.2~rc2-0ubuntu1) saucy; urgency=low
+
+  * New upstream release candidate. (#1239156)
+  * debian/README.compression: Updated documenation on how to
+    refresh the static assets.
+
+ -- Chuck Short <zulcss@ubuntu.com>  Tue, 15 Oct 2013 10:20:05 -0400
+
+horizon (1:2013.2~rc1-0ubuntu2) saucy; urgency=low
+
+  * d/theme/css/ubuntu.css: Refresh Ubuntu theme against new Havana
+    stylesheets, fixing network and chart layouts (LP: #1235249).
+  * d/openstack-dashboard.postinst: Allow horizon user to read and
+    write data in /var/lib/openstack-dashboard inline with user and
+    group permissions set in Apache configuration.
+
+ -- James Page <james.page@ubuntu.com>  Fri, 04 Oct 2013 14:17:43 +0100
+
+horizon (1:2013.2~rc1-0ubuntu1) saucy; urgency=low
+
+  [ James Page ]
+  * New upstream release candidate:
+    - d/static: Refreshed static assets for 2013.2~rc1.
+    - d/patches: Refreshed patches.
+
+  [ Chuck Short ]
+  * debian/control: Add python-lesscpy as a suggests to optionally
+    support online compression of static assets (LP: #1226674).
+
+ -- James Page <james.page@ubuntu.com>  Thu, 03 Oct 2013 13:48:12 +0100
+
+horizon (1:2013.2~b3-0ubuntu2) saucy; urgency=low
+
+  * Don't use /etc/openstack-dashboard for in-process generated data
+    (LP: #1233752):
+    - d/openstack-dashboard.{dirs,postinst}:
+      + Create /var/lib/openstack-dashboard with restricted permissions,
+        allowing www-data user to write a secret_key if need be.
+      + Move /etc/openstack-dashboard/secret_key to correct location if
+        it already exists.
+    - d/p/ubuntu_settings.patch: Use /var/lib/openstack-dashboard for
+      secret key storage instead of /etc/openstack-dashboard.
+
+ -- James Page <james.page@ubuntu.com>  Wed, 02 Oct 2013 10:31:15 +0100
+
+horizon (1:2013.2~b3-0ubuntu1) saucy; urgency=low
+
+  * New upstream release.
+  * debian/control: Minimum python-openstack-auth version >= 1.1.1.
+  * debian/control: Add python-troveclient.
+  * debian/static: Refresh static assets for 2013.2~b3.
+  * debian/patches: ubuntu_local_settings.patch -> ubuntu_settings.patch, also
+    patch location of secret key in openstack_dashboard/settings.py
+
+ -- Adam Gandelman <adamg@ubuntu.com>  Fri, 06 Sep 2013 11:59:43 -0700
+
+horizon (1:2013.2~b2-0ubuntu6) saucy; urgency=low
+
+  * debian/patches/ubuntu_local_settings.py: Set flexible
+    default for ALLOWED_HOSTS that should be changed for production
+    deployments (LP: #1214982).
+  * Fix (LP: #1216019):
+    - debian/openstack-dashboard.{postinst, postrm}: Add/remove horizon
+      user.  Ensure /etc/openstack-dashbard ownership.
+    - debian/openstack-dashboard.conf: Run WSGIDaemonProcess as user
+      horizon, set WSGIProcessGroup to horizon.
+    - debian/patches/ubuntu_local_settings.py: Generate and load secret
+      key from /etc/openstack-dashboard/secret_key.
+
+ -- Adam Gandelman <adamg@ubuntu.com>  Fri, 06 Sep 2013 10:33:18 -0700
+
+horizon (1:2013.2~b2-0ubuntu5) saucy; urgency=low
+
+  * d/static/*: Refresh static assets for 2013.2~b2.
+  * d/rules: Tweak helper for refreshing static assets to link
+    local_settings.py correctly.
+  * d/openstack-dashboard.p*: Fix typo in configuration file name,
+    ensure consistent use of tabs/spaces.
+
+ -- James Page <james.page@ubuntu.com>  Mon, 02 Sep 2013 16:43:56 +0100
+
+horizon (1:2013.2~b2-0ubuntu4) saucy; urgency=low
+
+  * Update for apache 2.4, preserve 2.2 compatability. (LP: #1218535)
+
+ -- Adam Gandelman <adamg@ubuntu.com>  Fri, 30 Aug 2013 15:31:49 -0700
+
+horizon (1:2013.2~b2-0ubuntu3) saucy; urgency=low
+
+  * debian/rules: Don't remove egg information while cleaning.
+    (LP: #1210253)
+
+ -- Chuck Short <zulcss@ubuntu.com>  Wed, 21 Aug 2013 10:08:35 -0400
 
 horizon (1:2013.2~b2-0ubuntu2) saucy; urgency=low
 
index e9e743f6cd8b797e61b02059aa1f53e4f4ccdc67..bb6895b8dfd87c83bebe566aa17a39a3565a2fe6 100644 (file)
@@ -33,13 +33,15 @@ Depends: python-cloudfiles,
  python-memcache,
  python-netaddr,
  python-novaclient,
- python-openstack-auth,
+ python-openstack-auth (>= 1.1.1),
  python-swiftclient,
+ python-troveclient,
  python-tz,
  python-neutronclient,
  ${misc:Depends},
  ${python:Depends}
 Recommends: memcached
+Suggests: python-lesscpy
 Description: Django module providing web based interaction with OpenStack
  The Django-Nova project is a Django module that is used to provide web based
  interactions with the OpenStack Nova cloud controller.
@@ -48,6 +50,7 @@ Package: openstack-dashboard
 Architecture: all
 Pre-Depends: dpkg (>= 1.15.7.2)
 Depends: adduser,
+ apache2 | httpd,
  libapache2-mod-wsgi (>= 2.3),
  python-django-horizon (= ${source:Version}),
  ${misc:Depends},
index 908c8c0009ca3e6d03f792d5bd63549fbec95bee..1dfc262b4572287df13cd803d446b97786df75d9 100755 (executable)
@@ -1,5 +1,6 @@
 WSGIScriptAlias /horizon /usr/share/openstack-dashboard/openstack_dashboard/wsgi/django.wsgi
-WSGIDaemonProcess horizon user=www-data group=www-data processes=3 threads=10
+WSGIDaemonProcess horizon user=horizon group=horizon processes=3 threads=10
+WSGIProcessGroup horizon
 Alias /static /usr/share/openstack-dashboard/openstack_dashboard/static/
 <Directory /usr/share/openstack-dashboard/openstack_dashboard/wsgi>
   Order allow,deny
index 2e95e15e2f6cd7316a0014667d94366f8b006b7e..b8f6a27c13824230d0bb114d78e4f31a55c7e5d1 100644 (file)
@@ -1,3 +1,6 @@
+/etc/openstack-dashboard
+/usr/share/openstack-dashboard
 /usr/share/openstack-dashboard/bin/less/
 /usr/share/openstack-dashboard/openstack_dashboard/static/dashboard/js
 /usr/share/openstack-dashboard/openstack_dashboard/static/dashboard/css
+/var/lib/openstack-dashboard
index 70c359a1e72b4fb7fccfc90e658ff58ddc602df5..ad31d08b6f3b4f162515c275ebf9747e843d05f9 100644 (file)
@@ -1,4 +1,4 @@
-etc/apache2/conf.d
+debian/openstack-dashboard.conf etc/apache2/conf-available
 etc/openstack-dashboard
 usr/share/openstack-dashboard
 debian/static/openstack-dashboard/manifest.json usr/share/openstack-dashboard/openstack_dashboard/static/dashboard
index b6f1adaa4acd856648af04d5bd6cd8abf8e29336..7e75670dfa8de2a3fa3dd7f578824a1ef71e2e04 100755 (executable)
@@ -1,21 +1,63 @@
 #!/bin/sh
+# vim: set ts=2 et:
 
 set -e
 
+CONF="openstack-dashboard.conf"
+
 if [ "$1" = "configure" ]; then
-       # /etc/apache2/conf.d/dashboard.conf -> /etc/apache2/conf.d/openstack-dashboard.conf
-       dpkg-maintscript-helper mv_conffile \
-         /etc/apache2/conf.d/dashboard.conf /etc/apache2/conf.d/openstack-dashboard.conf \
-         2012.1~rc1-0ubuntu1 -- "$@"
+  # /etc/apache2/conf.d/dashboard.conf -> /etc/apache2/conf-available/openstack-dashboard.conf
+  dpkg-maintscript-helper mv_conffile \
+    /etc/apache2/conf.d/dashboard.conf /etc/apache2/conf-available/$CONF \
+    2012.1~rc1-0ubuntu1 -- "$@"
+
+  # Transition config to apache 2.4 compatable location.
+  dpkg-maintscript-helper mv_conffile \
+    /etc/apache2/conf.d/$CONF \
+    /etc/apache2/conf-available/$CONF \
+    1:2013.2~b2-0ubuntu3 -- "$@"
 
-       if [ -x /etc/init.d/apache2 ]; then
-               invoke-rc.d --quiet apache2 reload
+       if ! getent group horizon > /dev/null 2>&1
+       then
+               addgroup --system horizon >/dev/null
+       fi
+       if ! getent passwd horizon > /dev/null 2>&1
+       then
+    adduser --system --home /usr/share/openstack-dashboard/ --ingroup horizon \
+            --no-create-home --shell /bin/false horizon
        fi
 
   if [ -e /usr/share/openstack-dashboard/openstack_dashboard/static ] ; then
-    chown -R www-data:www-data \
+    chown -R horizon:horizon \
       /usr/share/openstack-dashboard/openstack_dashboard/static
   fi
+
+  if [ -d /etc/openstack-dashboard/ ] ; then
+    chown horizon:horizon /etc/openstack-dashboard/
+  fi
+
+  A22_STATE=$(dpkg-query -f '${Status}' -W 'apache2.2-common' 2>/dev/null | awk '{print $3}' || true)
+
+  if [ -e /usr/share/apache2/apache2-maintscript-helper ] ; then
+    # apache 2.4
+    . /usr/share/apache2/apache2-maintscript-helper
+    apache2_invoke enconf $CONF || exit $?
+  elif [ "$A22_STATE" = "installed" ] || [ "$A22_STATE" = "unpacked" ] ; then
+    # apache 2.2
+    [ -d /etc/apache2/conf.d/ ] && [ ! -L /etc/apache2/conf.d/$CONF ] &&
+      ln -s ../conf-available/$CONF /etc/apache2/conf.d/$CONF
+    [ -x /etc/init.d/apache2 ] && invoke-rc.d --quiet apache2 reload
+  fi
+
+  if [ -d /var/lib/openstack-dashboard ] ; then
+    # Generated secret storage for single node use - see local_settings.py
+    # for more details of SECRET_KEY
+    chmod 0700 /var/lib/openstack-dashboard
+    if [ -f /etc/openstack-dashboard/secret_key ]; then
+      mv /etc/openstack-dashboard/secret_key /var/lib/openstack-dashboard
+    fi
+    chown -R horizon:horizon /var/lib/openstack-dashboard
+  fi
 fi
 
 #DEBHELPER#
index 5d3b5d407939729f407aad9bb90d279b74f355d3..407ec1b3cec9feb08c7de16569d34ebd06fdf988 100755 (executable)
@@ -1,14 +1,44 @@
 #!/bin/sh
+# vim: set ts=2 et:
 
 set -e
 
-# /etc/apache2/conf.d/dashboard.conf -> /etc/apache2/conf.d/openstack-dashboard.conf
+CONF="openstack-dashboard.conf"
+
+# /etc/apache2/conf.d/dashboard.conf -> /etc/apache2/conf-available/openstack-dashboard.conf
 dpkg-maintscript-helper mv_conffile \
-  /etc/apache2/conf.d/dashboard.conf /etc/apache2/conf.d/openstack-dashboard.conf \
+  /etc/apache2/conf.d/dashboard.conf /etc/apache2/conf-available/$CONF \
   2012.1~rc1-0ubuntu1 -- "$@"
 
-if [ -x "`which invoke-rc.d 2>/dev/null`" -a -x "/etc/init.d/apache2" ] ; then
-       invoke-rc.d --quiet apache2 reload
+# Transition config to apache 2.4 compatable location.
+dpkg-maintscript-helper mv_conffile \
+  /etc/apache2/conf.d/openstack-dashboard.conf \
+  /etc/apache2/conf-available/openstack-dashboard.conf \
+  1:2013.2~b2-0ubuntu3 -- "$@"
+
+if [ "$1" = "remove" ] || [ "$1" = "purge" ] ; then
+  A22_STATE=$(dpkg-query -f '${Status}' -W 'apache2.2-common' 2>/dev/null | awk '{print $3}' || true)
+
+  if [ -e /usr/share/apache2/apache2-maintscript-helper ] ; then
+    # apache 2.4
+    . /usr/share/apache2/apache2-maintscript-helper
+    apache2_invoke disconf $CONF || exit $?
+  elif [ "$A22_STATE" = "installed" ] || [ "$A22_STATE" = "unpacked" ] ; then
+    # apache 2.2
+    [ -d /etc/apache2/conf.d/ ] && [ -L /etc/apache2/conf.d/$CONF ] &&
+      rm /etc/apache2/conf.d/$CONF
+    [ -x /etc/init.d/apache2 ] && invoke-rc.d --quiet apache2 reload
+  fi
+
+fi
+
+if [ "$1" = "purge" ] ; then
+               if (which deluser && getent passwd horizon) > /dev/null 2>&1; then
+                       deluser --system --quiet --backup-to /var/lib horizon
+    fi
+               if (which delgroup && getent group horizon) > /dev/null 2>&1; then
+                       delgroup --system --quiet horizon
+               fi
 fi
 
 #DEBHELPER#
index fd4f4252cd874d0ad2fa8e70666f49b9020439e0..4979072ab0fdf787b553236bb73516c66daae24c 100755 (executable)
@@ -1,4 +1,5 @@
 #!/bin/sh
+# vim: set ts=2 et:
 
 set -e
 
@@ -7,4 +8,10 @@ dpkg-maintscript-helper mv_conffile \
   /etc/apache2/conf.d/dashboard.conf /etc/apache2/conf.d/openstack-dashboard.conf \
   2012.1~rc1-0ubuntu1 -- "$@"
 
+# Transition config to apache 2.4 compatable location.
+dpkg-maintscript-helper mv_conffile \
+  /etc/apache2/conf.d/openstack-dashboard.conf \
+  /etc/apache2/conf-available/openstack-dashboard.conf \
+  1:2013.2~b2-0ubuntu3 -- "$@"
+
 #DEBHELPER#
index af18a094a0f07d64e49db0b61d3cfaf3b607b64c..4b232aa9e44049a94cf1cfca7caf8df23ce57477 100644 (file)
@@ -1,8 +1,6 @@
-Index: horizon/openstack_dashboard/wsgi/django.wsgi
-===================================================================
---- horizon.orig/openstack_dashboard/wsgi/django.wsgi  2012-07-03 14:07:21.316118123 -0700
-+++ horizon/openstack_dashboard/wsgi/django.wsgi       2012-07-03 14:07:26.176118333 -0700
-@@ -9,6 +9,8 @@
+--- a/openstack_dashboard/wsgi/django.wsgi
++++ b/openstack_dashboard/wsgi/django.wsgi
+@@ -9,6 +9,8 @@ sys.path.insert(0, os.path.join(os.path.
  os.environ['DJANGO_SETTINGS_MODULE'] = 'openstack_dashboard.settings'
  sys.stdout = sys.stderr
  
index 426f87a8322f6e12b534302172e93546d7848c4f..060d69c288784ef6c63b1303da318ce57444e98b 100644 (file)
@@ -1,10 +1,9 @@
-diff -Naurp horizon-2013.1.orig/manage.py horizon-2013.1/manage.py
---- horizon-2013.1.orig/manage.py      2012-11-20 22:59:38.000000000 -0600
-+++ horizon-2013.1/manage.py   2012-11-21 12:28:58.773240222 -0600
+--- a/manage.py
++++ b/manage.py
 @@ -5,6 +5,8 @@ import sys
-
  from django.core.management import execute_from_command_line  # noqa
-
 +sys.path.append("/usr/share/openstack-dashboard")
 +
  if __name__ == "__main__":
index cc34d09d23967e35048b77a8ed53ac057321ccb0..585ff027819e723efa26a1105cb8e5974b47eeb0 100644 (file)
@@ -1,7 +1,6 @@
-diff -Naurp horizon-2013.1.orig/run_tests.sh horizon-2013.1/run_tests.sh
---- horizon-2013.1.orig/run_tests.sh   2012-11-20 22:59:39.000000000 -0600
-+++ horizon-2013.1/run_tests.sh        2012-11-21 12:25:55.197240133 -0600
-@@ -292,25 +292,25 @@ function run_tests_all {
+--- a/run_tests.sh
++++ b/run_tests.sh
+@@ -298,25 +298,25 @@ function run_tests_all {
    if [ "$NOSE_WITH_HTML_OUTPUT" = '1' ]; then
      export NOSE_HTML_OUT_FILE='horizon_nose_results.html'
    fi
index 75d32609580aa600eed9bb8342c4ecdec0547d79..cb08dbd5884284ea6d5e09d8331ed67886cd9375 100644 (file)
@@ -5,4 +5,4 @@ fix-dashboard-manage.patch
 #add_juju_settings_panel.patch
 
 fix-ubuntu-tests.patch
-ubuntu_local_settings.patch
+ubuntu_settings.patch
diff --git a/debian/patches/ubuntu_local_settings.patch b/debian/patches/ubuntu_local_settings.patch
deleted file mode 100644 (file)
index aa902ff..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-diff -Naurp horizon-2013.2.a96.gd17fd51.orig/openstack_dashboard/local/local_settings.py.example horizon-2013.2.a96.gd17fd51/openstack_dashboard/local/local_settings.py.example
---- horizon-2013.2.a96.gd17fd51.orig/openstack_dashboard/local/local_settings.py.example       2013-05-21 09:33:32.000000000 -0500
-+++ horizon-2013.2.a96.gd17fd51/openstack_dashboard/local/local_settings.py.example    2013-05-21 11:34:34.426566745 -0500
-@@ -4,7 +4,7 @@ from django.utils.translation import uge
- from openstack_dashboard import exceptions
--DEBUG = True
-+DEBUG = False
- TEMPLATE_DEBUG = DEBUG
- # Required for Django 1.5.
-@@ -90,19 +90,29 @@ SECRET_KEY = secret_key.generate_or_read
- # We recommend you use memcached for development; otherwise after every reload
- # of the django development server, you will have to login again. To use
- # memcached set CACHES to something like
--# CACHES = {
--#    'default': {
--#        'BACKEND' : 'django.core.cache.backends.memcached.MemcachedCache',
--#        'LOCATION' : '127.0.0.1:11211',
--#    }
--#}
--
- CACHES = {
--    'default': {
--        'BACKEND' : 'django.core.cache.backends.locmem.LocMemCache'
--    }
-+   'default': {
-+       'BACKEND' : 'django.core.cache.backends.memcached.MemcachedCache',
-+       'LOCATION' : '127.0.0.1:11211',
-+   }
- }
-+# Enable the Ubuntu theme if it is present.
-+try:
-+    from ubuntu_theme import *
-+except ImportError:
-+    pass
-+
-+# Default Ubuntu apache configuration uses /horizon as the application root.
-+# Configure auth redirects here accordingly.
-+LOGIN_URL='/horizon/auth/login/'
-+LOGIN_REDIRECT_URL='/horizon'
-+
-+# The Ubuntu package includes pre-compressed JS and compiled CSS to allow
-+# offline compression by default.  To enable online compression, install
-+# the node-less package and enable the following option.
-+COMPRESS_OFFLINE = True
-+
- # Send email to the console by default
- EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
- # Or send them to /dev/null
diff --git a/debian/patches/ubuntu_settings.patch b/debian/patches/ubuntu_settings.patch
new file mode 100644 (file)
index 0000000..bc064c1
--- /dev/null
@@ -0,0 +1,76 @@
+--- a/openstack_dashboard/local/local_settings.py.example
++++ b/openstack_dashboard/local/local_settings.py.example
+@@ -4,7 +4,7 @@ from django.utils.translation import uge
+ from openstack_dashboard import exceptions
+-DEBUG = True
++DEBUG = False
+ TEMPLATE_DEBUG = DEBUG
+ # Required for Django 1.5.
+@@ -89,22 +89,16 @@ LOCAL_PATH = os.path.dirname(os.path.abs
+ # requests routed to the same dashboard instance or you set the same SECRET_KEY
+ # for all of them.
+ from horizon.utils import secret_key
+-SECRET_KEY = secret_key.generate_or_read_from_file(os.path.join(LOCAL_PATH, '.secret_key_store'))
++SECRET_KEY = secret_key.generate_or_read_from_file('/var/lib/openstack-dashboard/secret_key')
+ # We recommend you use memcached for development; otherwise after every reload
+ # of the django development server, you will have to login again. To use
+ # memcached set CACHES to something like
+-# CACHES = {
+-#    'default': {
+-#        'BACKEND' : 'django.core.cache.backends.memcached.MemcachedCache',
+-#        'LOCATION' : '127.0.0.1:11211',
+-#    }
+-#}
+-
+ CACHES = {
+-    'default': {
+-        'BACKEND' : 'django.core.cache.backends.locmem.LocMemCache'
+-    }
++   'default': {
++       'BACKEND' : 'django.core.cache.backends.memcached.MemcachedCache',
++       'LOCATION' : '127.0.0.1:11211',
++   }
+ }
+ # Send email to the console by default
+@@ -406,3 +400,24 @@ SECURITY_GROUP_RULES = {
+         'to_port': '3389',
+     },
+ }
++
++# Enable the Ubuntu theme if it is present.
++try:
++    from ubuntu_theme import *
++except ImportError:
++    pass
++
++# Default Ubuntu apache configuration uses /horizon as the application root.
++# Configure auth redirects here accordingly.
++LOGIN_URL='/horizon/auth/login/'
++LOGIN_REDIRECT_URL='/horizon'
++
++# The Ubuntu package includes pre-compressed JS and compiled CSS to allow
++# offline compression by default.  To enable online compression, install
++# the node-less package and enable the following option.
++COMPRESS_OFFLINE = True
++
++# By default, validation of the HTTP Host header is disabled.  Production
++# installations should have this set accordingly.  For more information
++# see https://docs.djangoproject.com/en/dev/ref/settings/.
++ALLOWED_HOSTS = '*'
+--- a/openstack_dashboard/settings.py
++++ b/openstack_dashboard/settings.py
+@@ -217,8 +217,7 @@ if not SECRET_KEY:
+     from horizon.utils import secret_key
+     LOCAL_PATH = os.path.join(os.path.dirname(os.path.abspath(__file__)),
+                               'local')
+-    SECRET_KEY = secret_key.generate_or_read_from_file(os.path.join(LOCAL_PATH,
+-                                                       '.secret_key_store'))
++    SECRET_KEY = secret_key.generate_or_read_from_file('/var/lib/openstack-dashboard/secret_key')
+ from openstack_dashboard import policy
+ POLICY_CHECK_FUNCTION = policy.check
index 17e745e1a49a2949e3c6b30b1d300844816566ca..5730ae07546bf401af0b89520a8fff5cd7f9aa04 100755 (executable)
@@ -11,12 +11,12 @@ override_dh_auto_install:
        python setup.py install --root=$(CURDIR)/debian/tmp --no-compile -O0 --install-layout=deb
        install -d -m 755 $(CURDIR)/debian/tmp/usr/share/openstack-dashboard
        install -d -m 755 $(CURDIR)/debian/tmp/etc/openstack-dashboard
-       install -d -m 755 $(CURDIR)/debian/tmp/etc/apache2/conf.d
-       
+       install -d -m 755 $(CURDIR)/debian/tmp/etc/apache2/conf-available
+
        cp -a $(CURDIR)/openstack_dashboard/ $(CURDIR)/debian/tmp/usr/share/openstack-dashboard/
+       install -d -m 755 $(CURDIR)/debian/tmp/etc/openstack-dashboard
        cp -a $(CURDIR)/openstack_dashboard/settings.py $(CURDIR)/debian/tmp/usr/share/openstack-dashboard/
-       
-       cp -a $(CURDIR)/debian/openstack-dashboard.conf $(CURDIR)/debian/tmp/etc/apache2/conf.d
+
        cp $(CURDIR)/openstack_dashboard/local/local_settings.py.example \
                $(CURDIR)/debian/tmp/etc/openstack-dashboard/local_settings.py
        cp $(CURDIR)/manage.py \
@@ -34,7 +34,6 @@ endif
 override_dh_auto_clean:
        dh_clean
        rm -rf $(CURDIR)/build
-       rm -rf $(CURDIR)/horizon.egg-info
        rm -rf $(CURDIR)/debian/openstack-dashboard
        rm -rf $(CURDIR)/debian/python-django-horizon
        rm -rf $(CURDIR)/debian/tmp
@@ -44,7 +43,7 @@ get-orig-source:
        uscan --verbose --force-download --rename --destdir=../build-area
 
 refresh-static-assets:
-       ln -sf openstack_dashboard/local/local_settings.py.example openstack_dashboard/local/local_settings.py
+       (cd openstack_dashboard/local; ln -sf local_settings.py.example local_settings.py)
        python ./manage.py compress --force
        rm -rf debian/static/openstack-dashboard/*
        cp -r static/dashboard/* debian/static/openstack-dashboard/
similarity index 63%
rename from debian/static/openstack-dashboard/css/3c066b7fc33c.css
rename to debian/static/openstack-dashboard/css/d46048c6478b.css
index a2eb0a22ff72161e641369f3a06e16c3a4c1d277..2bfb435920288e34ce18f1abfe207356bc0a3a97 100644 (file)
@@ -1,12 +1,3 @@
-/*!
- * Bootstrap v2.0.1
- *
- * Copyright 2012 Twitter, Inc
- * Licensed under the Apache License v2.0
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Designed and built with all the love in the world @twitter by @mdo and @fat.
- */
 article,
 aside,
 details,
@@ -19,9 +10,7 @@ nav,
 section {
   display: block;
 }
-audio,
-canvas,
-video {
+audio, canvas, video {
   display: inline-block;
   *display: inline;
   *zoom: 1;
@@ -35,16 +24,14 @@ html {
   -ms-text-size-adjust: 100%;
 }
 a:focus {
-  outline: thin dotted #333;
+  outline: thin dotted #333333;
   outline: 5px auto -webkit-focus-ring-color;
   outline-offset: -2px;
 }
-a:hover,
-a:active {
+a:hover, a:active {
   outline: 0;
 }
-sub,
-sup {
+sub, sup {
   position: relative;
   font-size: 75%;
   line-height: 0;
@@ -62,28 +49,20 @@ img {
   border: 0;
   -ms-interpolation-mode: bicubic;
 }
-button,
-input,
-select,
-textarea {
+button, input, select, textarea {
   margin: 0;
   font-size: 100%;
   vertical-align: middle;
 }
-button,
-input {
+button, input {
   *overflow: visible;
   line-height: normal;
 }
-button::-moz-focus-inner,
-input::-moz-focus-inner {
+button::-moz-focus-inner, input::-moz-focus-inner {
   padding: 0;
   border: 0;
 }
-button,
-input[type="button"],
-input[type="reset"],
-input[type="submit"] {
+button, input[type="button"], input[type="reset"], input[type="submit"] {
   cursor: pointer;
   -webkit-appearance: button;
 }
@@ -104,8 +83,7 @@ textarea {
 .clearfix {
   *zoom: 1;
 }
-.clearfix:before,
-.clearfix:after {
+.clearfix:before, .clearfix:after {
   display: table;
   content: "";
 }
@@ -132,8 +110,7 @@ a:hover {
   margin-left: -20px;
   *zoom: 1;
 }
-.row:before,
-.row:after {
+.row:before, .row:after {
   display: table;
   content: "";
 }
@@ -177,8 +154,7 @@ a:hover {
 .span11 {
   width: 860px;
 }
-.span12,
-.container {
+.span12, .container {
   width: 940px;
 }
 .offset1 {
@@ -218,8 +194,7 @@ a:hover {
   width: 100%;
   *zoom: 1;
 }
-.row-fluid:before,
-.row-fluid:after {
+.row-fluid:before, .row-fluid:after {
   display: table;
   content: "";
 }
@@ -249,25 +224,25 @@ a:hover {
   width: 40.425531911%;
 }
 .row-fluid > .span6 {
-  width: 48.93617020799999%;
+  width: 48.936170208%;
 }
 .row-fluid > .span7 {
   width: 57.446808505%;
 }
 .row-fluid > .span8 {
-  width: 65.95744680199999%;
+  width: 65.957446802%;
 }
 .row-fluid > .span9 {
   width: 74.468085099%;
 }
 .row-fluid > .span10 {
-  width: 82.97872339599999%;
+  width: 82.978723396%;
 }
 .row-fluid > .span11 {
   width: 91.489361693%;
 }
 .row-fluid > .span12 {
-  width: 99.99999998999999%;
+  width: 99.99999999%;
 }
 .container {
   width: 940px;
@@ -275,8 +250,7 @@ a:hover {
   margin-right: auto;
   *zoom: 1;
 }
-.container:before,
-.container:after {
+.container:before, .container:after {
   display: table;
   content: "";
 }
@@ -288,8 +262,7 @@ a:hover {
   padding-right: 20px;
   *zoom: 1;
 }
-.container-fluid:before,
-.container-fluid:after {
+.container-fluid:before, .container-fluid:after {
   display: table;
   content: "";
 }
@@ -312,23 +285,13 @@ p small {
   font-weight: 200;
   line-height: 27px;
 }
-h1,
-h2,
-h3,
-h4,
-h5,
-h6 {
+h1, h2, h3, h4, h5, h6 {
   margin: 0;
   font-weight: bold;
   color: #333333;
   text-rendering: optimizelegibility;
 }
-h1 small,
-h2 small,
-h3 small,
-h4 small,
-h5 small,
-h6 small {
+h1 small, h2 small, h3 small, h4 small, h5 small, h6 small {
   font-weight: normal;
   color: #999999;
 }
@@ -353,9 +316,7 @@ h3 {
 h3 small {
   font-size: 14px;
 }
-h4,
-h5,
-h6 {
+h4, h5, h6 {
   line-height: 18px;
 }
 h4 {
@@ -380,15 +341,11 @@ h6 {
 .page-header h1 {
   line-height: 1;
 }
-ul,
-ol {
+ul, ol {
   padding: 0;
   margin: 0 0 9px 25px;
 }
-ul ul,
-ul ol,
-ol ol,
-ol ul {
+ul ul, ul ol, ol ol, ol ul {
   margin-bottom: 0;
 }
 ul {
@@ -400,8 +357,7 @@ ol {
 li {
   line-height: 18px;
 }
-ul.unstyled,
-ol.unstyled {
+ul.unstyled, ol.unstyled {
   margin-left: 0;
   list-style: none;
 }
@@ -412,8 +368,7 @@ table ul {
 dl {
   margin-bottom: 18px;
 }
-dt,
-dd {
+dt, dd {
   line-height: 18px;
 }
 dt {
@@ -440,7 +395,7 @@ em {
 abbr {
   font-size: 90%;
   text-transform: uppercase;
-  border-bottom: 1px dotted #ddd;
+  border-bottom: 1px dotted #dddddd;
   cursor: help;
 }
 blockquote {
@@ -469,14 +424,10 @@ blockquote.pull-right {
   border-left: 0;
   border-right: 5px solid #eeeeee;
 }
-blockquote.pull-right p,
-blockquote.pull-right small {
+blockquote.pull-right p, blockquote.pull-right small {
   text-align: right;
 }
-q:before,
-q:after,
-blockquote:before,
-blockquote:after {
+q:before, q:after, blockquote:before, blockquote:after {
   content: "";
 }
 address {
@@ -491,8 +442,7 @@ small {
 cite {
   font-style: normal;
 }
-code,
-pre {
+code, pre {
   padding: 0 3px 2px;
   font-family: Menlo, Monaco, "Courier New", monospace;
   font-size: 12px;
@@ -503,7 +453,7 @@ pre {
 }
 code {
   padding: 3px 4px;
-  color: #d14;
+  color: #dd1144;
   background-color: #f7f7f9;
   border: 1px solid #e1e1e8;
 }
@@ -514,8 +464,8 @@ pre {
   font-size: 12px;
   line-height: 18px;
   background-color: #f5f5f5;
-  border: 1px solid #ccc;
-  border: 1px solid rgba(0, 0, 0, 0.15);
+  border: 1px solid #cccccc;
+  border: 1px solid rgba(0,0,0,.15);
   -webkit-border-radius: 4px;
   -moz-border-radius: 4px;
   border-radius: 4px;
@@ -554,25 +504,18 @@ legend {
   line-height: 36px;
   color: #333333;
   border: 0;
-  border-bottom: 1px solid #eee;
+  border-bottom: 1px solid #eeeeee;
 }
 legend small {
   font-size: 13.5px;
   color: #999999;
 }
-label,
-input,
-button,
-select,
-textarea {
+label, input, button, select, textarea {
   font-size: 13px;
   font-weight: normal;
   line-height: 18px;
 }
-input,
-button,
-select,
-textarea {
+input, button, select, textarea {
   font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
 }
 label {
@@ -580,10 +523,7 @@ label {
   margin-bottom: 5px;
   color: #333333;
 }
-input,
-textarea,
-select,
-.uneditable-input {
+input, textarea, select, .uneditable-input {
   display: inline-block;
   width: 210px;
   height: 18px;
@@ -592,7 +532,7 @@ select,
   font-size: 13px;
   line-height: 18px;
   color: #555555;
-  border: 1px solid #ccc;
+  border: 1px solid #cccccc;
   -webkit-border-radius: 3px;
   -moz-border-radius: 3px;
   border-radius: 3px;
@@ -601,29 +541,21 @@ select,
   width: auto;
   height: auto;
 }
-label input,
-label textarea,
-label select {
+label input, label textarea, label select {
   display: block;
 }
-input[type="image"],
-input[type="checkbox"],
-input[type="radio"] {
+input[type="image"], input[type="checkbox"], input[type="radio"] {
   width: auto;
   height: auto;
   padding: 0;
   margin: 3px 0;
   *margin-top: 0;
-  /* IE7 */
-
   line-height: normal;
   cursor: pointer;
   -webkit-border-radius: 0;
   -moz-border-radius: 0;
   border-radius: 0;
   border: 0 \9;
-  /* IE9 and down */
-
 }
 input[type="image"] {
   border: 0;
@@ -639,20 +571,13 @@ input[type="file"] {
   -moz-box-shadow: none;
   box-shadow: none;
 }
-input[type="button"],
-input[type="reset"],
-input[type="submit"] {
+input[type="button"], input[type="reset"], input[type="submit"] {
   width: auto;
   height: auto;
 }
-select,
-input[type="file"] {
+select, input[type="file"] {
   height: 28px;
-  /* In IE7, the height of the select element cannot be changed by height, only font-size */
-
   *margin-top: 4px;
-  /* For IE7, add top margin to align select with labels */
-
   line-height: 28px;
 }
 input[type="file"] {
@@ -662,8 +587,7 @@ select {
   width: 220px;
   background-color: #ffffff;
 }
-select[multiple],
-select[size] {
+select[multiple], select[size] {
   height: auto;
 }
 input[type="image"] {
@@ -677,51 +601,42 @@ textarea {
 input[type="hidden"] {
   display: none;
 }
-.radio,
-.checkbox {
+.radio, .checkbox {
   padding-left: 18px;
 }
-.radio input[type="radio"],
-.checkbox input[type="checkbox"] {
+.radio input[type="radio"], .checkbox input[type="checkbox"] {
   float: left;
   margin-left: -18px;
 }
-.controls > .radio:first-child,
-.controls > .checkbox:first-child {
+.controls > .radio:first-child, .controls > .checkbox:first-child {
   padding-top: 5px;
 }
-.radio.inline,
-.checkbox.inline {
+.radio.inline, .checkbox.inline {
   display: inline-block;
   padding-top: 5px;
   margin-bottom: 0;
   vertical-align: middle;
 }
-.radio.inline + .radio.inline,
-.checkbox.inline + .checkbox.inline {
+.radio.inline + .radio.inline, .checkbox.inline + .checkbox.inline {
   margin-left: 10px;
 }
-input,
-textarea {
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-  -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-  -webkit-transition: border linear 0.2s, box-shadow linear 0.2s;
-  -moz-transition: border linear 0.2s, box-shadow linear 0.2s;
-  -ms-transition: border linear 0.2s, box-shadow linear 0.2s;
-  -o-transition: border linear 0.2s, box-shadow linear 0.2s;
-  transition: border linear 0.2s, box-shadow linear 0.2s;
-}
-input:focus,
-textarea:focus {
-  border-color: rgba(82, 168, 236, 0.8);
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
-  -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
-  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
+input, textarea {
+  -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075);
+  -moz-box-shadow: inset 0 1px 1px rgba(0,0,0,.075);
+  box-shadow: inset 0 1px 1px rgba(0,0,0,.075);
+  -webkit-transition: border linear .2s, box-shadow linear .2s;
+  -moz-transition: border linear .2s, box-shadow linear .2s;
+  -ms-transition: border linear .2s, box-shadow linear .2s;
+  -o-transition: border linear .2s, box-shadow linear .2s;
+  transition: border linear .2s, box-shadow linear .2s;
+}
+input:focus, textarea:focus {
+  border-color: rgba(82,168,236,.8);
+  -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6);
+  -moz-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6);
+  box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6);
   outline: 0;
   outline: thin dotted \9;
-  /* IE6-9 */
-
 }
 input[type="file"]:focus,
 input[type="radio"]:focus,
@@ -730,7 +645,7 @@ select:focus {
   -webkit-box-shadow: none;
   -moz-box-shadow: none;
   box-shadow: none;
-  outline: thin dotted #333;
+  outline: thin dotted #333333;
   outline: 5px auto -webkit-focus-ring-color;
   outline-offset: -2px;
 }
@@ -759,64 +674,40 @@ textarea[class*="span"],
   float: none;
   margin-left: 0;
 }
-input.span1,
-textarea.span1,
-.uneditable-input.span1 {
+input.span1, textarea.span1, .uneditable-input.span1 {
   width: 50px;
 }
-input.span2,
-textarea.span2,
-.uneditable-input.span2 {
+input.span2, textarea.span2, .uneditable-input.span2 {
   width: 130px;
 }
-input.span3,
-textarea.span3,
-.uneditable-input.span3 {
+input.span3, textarea.span3, .uneditable-input.span3 {
   width: 210px;
 }
-input.span4,
-textarea.span4,
-.uneditable-input.span4 {
+input.span4, textarea.span4, .uneditable-input.span4 {
   width: 290px;
 }
-input.span5,
-textarea.span5,
-.uneditable-input.span5 {
+input.span5, textarea.span5, .uneditable-input.span5 {
   width: 370px;
 }
-input.span6,
-textarea.span6,
-.uneditable-input.span6 {
+input.span6, textarea.span6, .uneditable-input.span6 {
   width: 450px;
 }
-input.span7,
-textarea.span7,
-.uneditable-input.span7 {
+input.span7, textarea.span7, .uneditable-input.span7 {
   width: 530px;
 }
-input.span8,
-textarea.span8,
-.uneditable-input.span8 {
+input.span8, textarea.span8, .uneditable-input.span8 {
   width: 610px;
 }
-input.span9,
-textarea.span9,
-.uneditable-input.span9 {
+input.span9, textarea.span9, .uneditable-input.span9 {
   width: 690px;
 }
-input.span10,
-textarea.span10,
-.uneditable-input.span10 {
+input.span10, textarea.span10, .uneditable-input.span10 {
   width: 770px;
 }
-input.span11,
-textarea.span11,
-.uneditable-input.span11 {
+input.span11, textarea.span11, .uneditable-input.span11 {
   width: 850px;
 }
-input.span12,
-textarea.span12,
-.uneditable-input.span12 {
+input.span12, textarea.span12, .uneditable-input.span12 {
   width: 930px;
 }
 input[disabled],
@@ -826,18 +717,18 @@ input[readonly],
 select[readonly],
 textarea[readonly] {
   background-color: #f5f5f5;
-  border-color: #ddd;
+  border-color: #dddddd;
   cursor: not-allowed;
 }
 .control-group.warning > label,
 .control-group.warning .help-block,
 .control-group.warning .help-inline {
-  color: #c09853;
+  color: #333333;
 }
 .control-group.warning input,
 .control-group.warning select,
 .control-group.warning textarea {
-  color: #c09853;
+  color: #333333;
   border-color: #c09853;
 }
 .control-group.warning input:focus,
@@ -850,19 +741,19 @@ textarea[readonly] {
 }
 .control-group.warning .input-prepend .add-on,
 .control-group.warning .input-append .add-on {
-  color: #c09853;
+  color: #333333;
   background-color: #fcf8e3;
-  border-color: #c09853;
+  border-color: #333333;
 }
 .control-group.error > label,
 .control-group.error .help-block,
 .control-group.error .help-inline {
-  color: #b94a48;
+  color: #333333;
 }
 .control-group.error input,
 .control-group.error select,
 .control-group.error textarea {
-  color: #b94a48;
+  color: #333333;
   border-color: #b94a48;
 }
 .control-group.error input:focus,
@@ -875,19 +766,19 @@ textarea[readonly] {
 }
 .control-group.error .input-prepend .add-on,
 .control-group.error .input-append .add-on {
-  color: #b94a48;
+  color: #333333;
   background-color: #f2dede;
-  border-color: #b94a48;
+  border-color: #333333;
 }
 .control-group.success > label,
 .control-group.success .help-block,
 .control-group.success .help-inline {
-  color: #468847;
+  color: #333333;
 }
 .control-group.success input,
 .control-group.success select,
 .control-group.success textarea {
-  color: #468847;
+  color: #333333;
   border-color: #468847;
 }
 .control-group.success input:focus,
@@ -900,9 +791,9 @@ textarea[readonly] {
 }
 .control-group.success .input-prepend .add-on,
 .control-group.success .input-append .add-on {
-  color: #468847;
+  color: #333333;
   background-color: #dff0d8;
-  border-color: #468847;
+  border-color: #333333;
 }
 input:focus:required:invalid,
 textarea:focus:required:invalid,
@@ -923,15 +814,15 @@ select:focus:required:invalid:focus {
   margin-top: 18px;
   margin-bottom: 18px;
   background-color: #f5f5f5;
-  border-top: 1px solid #ddd;
+  border-top: 1px solid #dddddd;
 }
 .uneditable-input {
   display: block;
   background-color: #ffffff;
-  border-color: #eee;
-  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025);
-  -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025);
-  box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025);
+  border-color: #eeeeee;
+  -webkit-box-shadow: inset 0 1px 2px rgba(0,0,0,.025);
+  -moz-box-shadow: inset 0 1px 2px rgba(0,0,0,.025);
+  box-shadow: inset 0 1px 2px rgba(0,0,0,.025);
   cursor: not-allowed;
 }
 :-moz-placeholder {
@@ -949,50 +840,44 @@ select:focus:required:invalid:focus {
 .help-inline {
   display: inline-block;
   *display: inline;
-  /* IE7 inline-block hack */
-
   *zoom: 1;
   margin-bottom: 9px;
   vertical-align: middle;
   padding-left: 5px;
 }
-.input-prepend,
-.input-append {
+.input-prepend, .input-append {
   margin-bottom: 5px;
   *zoom: 1;
 }
 .input-prepend:before,
-.input-append:before,
 .input-prepend:after,
+.input-append:before,
 .input-append:after {
   display: table;
   content: "";
 }
-.input-prepend:after,
-.input-append:after {
+.input-prepend:after, .input-append:after {
   clear: both;
 }
 .input-prepend input,
-.input-append input,
 .input-prepend .uneditable-input,
+.input-append input,
 .input-append .uneditable-input {
   -webkit-border-radius: 0 3px 3px 0;
   -moz-border-radius: 0 3px 3px 0;
   border-radius: 0 3px 3px 0;
 }
 .input-prepend input:focus,
-.input-append input:focus,
 .input-prepend .uneditable-input:focus,
+.input-append input:focus,
 .input-append .uneditable-input:focus {
   position: relative;
   z-index: 2;
 }
-.input-prepend .uneditable-input,
-.input-append .uneditable-input {
-  border-left-color: #ccc;
+.input-prepend .uneditable-input, .input-append .uneditable-input {
+  border-left-color: #cccccc;
 }
-.input-prepend .add-on,
-.input-append .add-on {
+.input-prepend .add-on, .input-append .add-on {
   float: left;
   display: block;
   width: auto;
@@ -1006,31 +891,27 @@ select:focus:required:invalid:focus {
   text-align: center;
   text-shadow: 0 1px 0 #ffffff;
   background-color: #f5f5f5;
-  border: 1px solid #ccc;
+  border: 1px solid #cccccc;
   -webkit-border-radius: 3px 0 0 3px;
   -moz-border-radius: 3px 0 0 3px;
   border-radius: 3px 0 0 3px;
 }
-.input-prepend .active,
-.input-append .active {
+.input-prepend .active, .input-append .active {
   background-color: #a9dba9;
   border-color: #46a546;
 }
 .input-prepend .add-on {
   *margin-top: 1px;
-  /* IE6-7 */
-
 }
-.input-append input,
-.input-append .uneditable-input {
+.input-append input, .input-append .uneditable-input {
   float: left;
   -webkit-border-radius: 3px 0 0 3px;
   -moz-border-radius: 3px 0 0 3px;
   border-radius: 3px 0 0 3px;
 }
 .input-append .uneditable-input {
-  border-left-color: #eee;
-  border-right-color: #ccc;
+  border-left-color: #eeeeee;
+  border-right-color: #cccccc;
 }
 .input-append .add-on {
   margin-right: 0;
@@ -1054,26 +935,24 @@ select:focus:required:invalid:focus {
   border-radius: 14px;
 }
 .form-search input,
-.form-inline input,
-.form-horizontal input,
 .form-search textarea,
-.form-inline textarea,
-.form-horizontal textarea,
 .form-search select,
-.form-inline select,
-.form-horizontal select,
 .form-search .help-inline,
-.form-inline .help-inline,
-.form-horizontal .help-inline,
 .form-search .uneditable-input,
+.form-inline input,
+.form-inline textarea,
+.form-inline select,
+.form-inline .help-inline,
 .form-inline .uneditable-input,
+.form-horizontal input,
+.form-horizontal textarea,
+.form-horizontal select,
+.form-horizontal .help-inline,
 .form-horizontal .uneditable-input {
   display: inline-block;
   margin-bottom: 0;
 }
-.form-search .hide,
-.form-inline .hide,
-.form-horizontal .hide {
+.form-search .hide, .form-inline .hide, .form-horizontal .hide {
   display: none;
 }
 .form-search label,
@@ -1108,8 +987,7 @@ legend + .control-group {
   margin-bottom: 18px;
   *zoom: 1;
 }
-.form-horizontal .control-group:before,
-.form-horizontal .control-group:after {
+.form-horizontal .control-group:before, .form-horizontal .control-group:after {
   display: table;
   content: "";
 }
@@ -1137,13 +1015,12 @@ table {
   width: 100%;
   margin-bottom: 18px;
 }
-.table th,
-.table td {
+.table th, .table td {
   padding: 8px;
   line-height: 18px;
   text-align: left;
   vertical-align: top;
-  border-top: 1px solid #ddd;
+  border-top: 1px solid #dddddd;
 }
 .table th {
   font-weight: bold;
@@ -1151,19 +1028,17 @@ table {
 .table thead th {
   vertical-align: bottom;
 }
-.table thead:first-child tr th,
-.table thead:first-child tr td {
+.table thead:first-child tr th, .table thead:first-child tr td {
   border-top: 0;
 }
 .table tbody + tbody {
-  border-top: 2px solid #ddd;
+  border-top: 2px solid #dddddd;
 }
-.table-condensed th,
-.table-condensed td {
+.table-condensed th, .table-condensed td {
   padding: 4px 5px;
 }
 .table-bordered {
-  border: 1px solid #ddd;
+  border: 1px solid #dddddd;
   border-collapse: separate;
   *border-collapse: collapsed;
   -webkit-border-radius: 4px;
@@ -1174,7 +1049,7 @@ table {
 .table-bordered td + td,
 .table-bordered th + td,
 .table-bordered td + th {
-  border-left: 1px solid #ddd;
+  border-left: 1px solid #dddddd;
 }
 .table-bordered thead:first-child tr:first-child th,
 .table-bordered tbody:first-child tr:first-child th,
@@ -1205,12 +1080,10 @@ table {
   -moz-border-radius: 0 0 4px 0;
   border-radius: 0 0 4px 0;
 }
-.table-striped tbody tr:nth-child(odd) td,
-.table-striped tbody tr:nth-child(odd) th {
+.table-striped tbody tr:nth-child(odd)td, .table-striped tbody tr:nth-child(odd)th {
   background-color: #f9f9f9;
 }
-.table tbody tr:hover td,
-.table tbody tr:hover th {
+.table tbody tr:hover td, .table tbody tr:hover th {
   background-color: #f5f5f5;
 }
 table .span1 {
@@ -1273,8 +1146,7 @@ table .span12 {
   width: 924px;
   margin-left: 0;
 }
-[class^="icon-"],
-[class*=" icon-"] {
+[class^="icon-"], [class*=" icon-"] {
   display: inline-block;
   width: 14px;
   height: 14px;
@@ -1285,15 +1157,14 @@ table .span12 {
   background-repeat: no-repeat;
   *margin-right: .3em;
 }
-[class^="icon-"]:last-child,
-[class*=" icon-"]:last-child {
+[class^="icon-"]:last-child, [class*=" icon-"]:last-child {
   *margin-left: 0;
 }
 .icon-white {
   background-image: url('/static/bootstrap/img/glyphicons-halflings-white.png');
 }
 .icon-glass {
-  background-position: 0      0;
+  background-position: 0 0;
 }
 .icon-music {
   background-position: -24px 0;
@@ -1658,8 +1529,7 @@ table .span12 {
 .dropdown-toggle {
   *margin-bottom: -3px;
 }
-.dropdown-toggle:active,
-.open .dropdown-toggle {
+.dropdown-toggle:active, .open .dropdown-toggle {
   outline: 0;
 }
 .caret {
@@ -1680,8 +1550,7 @@ table .span12 {
   margin-top: 8px;
   margin-left: 2px;
 }
-.dropdown:hover .caret,
-.open.dropdown .caret {
+.dropdown:hover .caret, .open.dropdown .caret {
   opacity: 1;
   filter: alpha(opacity=100);
 }
@@ -1698,16 +1567,16 @@ table .span12 {
   margin: 0;
   list-style: none;
   background-color: #ffffff;
-  border-color: #ccc;
-  border-color: rgba(0, 0, 0, 0.2);
+  border-color: #cccccc;
+  border-color: rgba(0,0,0,.2);
   border-style: solid;
   border-width: 1px;
   -webkit-border-radius: 0 0 5px 5px;
   -moz-border-radius: 0 0 5px 5px;
   border-radius: 0 0 5px 5px;
-  -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
-  -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
-  box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
+  -webkit-box-shadow: 0 5px 10px rgba(0,0,0,.2);
+  -moz-box-shadow: 0 5px 10px rgba(0,0,0,.2);
+  box-shadow: 0 5px 10px rgba(0,0,0,.2);
   -webkit-background-clip: padding-box;
   -moz-background-clip: padding;
   background-clip: padding-box;
@@ -1749,8 +1618,8 @@ table .span12 {
 }
 .dropdown.open .dropdown-toggle {
   color: #ffffff;
-  background: #ccc;
-  background: rgba(0, 0, 0, 0.3);
+  background: #cccccc;
+  background: rgba(0,0,0,.3);
 }
 .dropdown.open .dropdown-menu {
   display: block;
@@ -1766,36 +1635,36 @@ table .span12 {
   padding: 19px;
   margin-bottom: 20px;
   background-color: #f5f5f5;
-  border: 1px solid #eee;
-  border: 1px solid rgba(0, 0, 0, 0.05);
+  border: 1px solid #eeeeee;
+  border: 1px solid rgba(0,0,0,.05);
   -webkit-border-radius: 4px;
   -moz-border-radius: 4px;
   border-radius: 4px;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
-  -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
-  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
+  -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.05);
+  -moz-box-shadow: inset 0 1px 1px rgba(0,0,0,.05);
+  box-shadow: inset 0 1px 1px rgba(0,0,0,.05);
 }
 .well blockquote {
-  border-color: #ddd;
-  border-color: rgba(0, 0, 0, 0.15);
+  border-color: #dddddd;
+  border-color: rgba(0,0,0,.15);
 }
 .fade {
-  -webkit-transition: opacity 0.15s linear;
-  -moz-transition: opacity 0.15s linear;
-  -ms-transition: opacity 0.15s linear;
-  -o-transition: opacity 0.15s linear;
-  transition: opacity 0.15s linear;
+  -webkit-transition: opacity .15s linear;
+  -moz-transition: opacity .15s linear;
+  -ms-transition: opacity .15s linear;
+  -o-transition: opacity .15s linear;
+  transition: opacity .15s linear;
   opacity: 0;
 }
 .fade.in {
   opacity: 1;
 }
 .collapse {
-  -webkit-transition: height 0.35s ease;
-  -moz-transition: height 0.35s ease;
-  -ms-transition: height 0.35s ease;
-  -o-transition: height 0.35s ease;
-  transition: height 0.35s ease;
+  -webkit-transition: height .35s ease;
+  -moz-transition: height .35s ease;
+  -ms-transition: height .35s ease;
+  -o-transition: height .35s ease;
+  transition: height .35s ease;
   position: relative;
   overflow: hidden;
   height: 0;
@@ -1809,7 +1678,7 @@ table .span12 {
   font-weight: bold;
   line-height: 18px;
   color: #000000;
-  text-shadow: 0 1px 0 #ffffff;
+  text-shadow: 0 1px 0 #ffffff01;
   opacity: 0.2;
   filter: alpha(opacity=20);
 }
@@ -1828,41 +1697,37 @@ table .span12 {
   line-height: 18px;
   color: #333333;
   text-align: center;
-  text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75);
+  text-shadow: 0 1px 1px rgba(255,255,255,.75);
   vertical-align: middle;
   background-color: #f5f5f5;
-  background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6);
-  background-image: -ms-linear-gradient(top, #ffffff, #e6e6e6);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));
-  background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6);
-  background-image: -o-linear-gradient(top, #ffffff, #e6e6e6);
-  background-image: linear-gradient(top, #ffffff, #e6e6e6);
+  background-image: -moz-linear-gradient(top,#ffffff,#e6e6e6 );
+  background-image: -ms-linear-gradient(top,#ffffff,#e6e6e6 );
+  background-image: -webkit-gradient(linear,0 0,0 100%,from(#ffffff),to(#e6e6e6 ));
+  background-image: -webkit-linear-gradient(top,#ffffff,#e6e6e6 );
+  background-image: -o-linear-gradient(top,#ffffff,#e6e6e6 );
+  background-image: linear-gradient(top,#ffffff,#e6e6e6 );
   background-repeat: repeat-x;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);
-  border-color: #e6e6e6 #e6e6e6 #bfbfbf;
-  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
-  border: 1px solid #ccc;
-  border-bottom-color: #bbb;
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6 ', GradientType=0);
+  border-color: #e6e6e6  #e6e6e6  #c0c0c0;
+  border-color: rgba(0,0,0,.1)rgba(0,0,0,.1)fadein(rgba(0,0,0,.1),15%);
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+  border: 1px solid #cccccc;
+  border-bottom-color: #bbbbbb;
   -webkit-border-radius: 4px;
   -moz-border-radius: 4px;
   border-radius: 4px;
-  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
-  -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
-  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
+  -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);
+  -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);
+  box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);
   cursor: pointer;
   filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
   *margin-left: .3em;
 }
-.btn:hover,
-.btn:active,
-.btn.active,
-.btn.disabled,
-.btn[disabled] {
+.btn:hover, .btn:active, .btn.active, .btn.disabled, .btn[disabled] {
   background-color: #e6e6e6;
 }
-.btn:active,
-.btn.active {
-  background-color: #cccccc \9;
+.btn:active, .btn.active {
+  background-color: #cdcdcd \9;
 }
 .btn:first-child {
   *margin-left: 0;
@@ -1872,29 +1737,27 @@ table .span12 {
   text-decoration: none;
   background-color: #e6e6e6;
   background-position: 0 -15px;
-  -webkit-transition: background-position 0.1s linear;
-  -moz-transition: background-position 0.1s linear;
-  -ms-transition: background-position 0.1s linear;
-  -o-transition: background-position 0.1s linear;
-  transition: background-position 0.1s linear;
+  -webkit-transition: background-position .1s linear;
+  -moz-transition: background-position .1s linear;
+  -ms-transition: background-position .1s linear;
+  -o-transition: background-position .1s linear;
+  transition: background-position .1s linear;
 }
 .btn:focus {
-  outline: thin dotted #333;
+  outline: thin dotted #333333;
   outline: 5px auto -webkit-focus-ring-color;
   outline-offset: -2px;
 }
-.btn.active,
-.btn:active {
+.btn.active, .btn:active {
   background-image: none;
-  -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
-  -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
-  box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
+  -webkit-box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);
+  -moz-box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);
+  box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);
   background-color: #e6e6e6;
   background-color: #d9d9d9 \9;
   outline: 0;
 }
-.btn.disabled,
-.btn[disabled] {
+.btn.disabled, .btn[disabled] {
   cursor: default;
   background-image: none;
   background-color: #e6e6e6;
@@ -1940,7 +1803,7 @@ table .span12 {
 .btn-info:hover,
 .btn-inverse,
 .btn-inverse:hover {
-  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+  text-shadow: 0 -1px 0 rgba(0,0,0,.25);
   color: #ffffff;
 }
 .btn-primary.active,
@@ -1949,20 +1812,20 @@ table .span12 {
 .btn-success.active,
 .btn-info.active,
 .btn-dark.active {
-  color: rgba(255, 255, 255, 0.75);
+  color: rgba(255,255,255,.75);
 }
 .btn-primary {
-  background-color: #006dcc;
-  background-image: -moz-linear-gradient(top, #0088cc, #0044cc);
-  background-image: -ms-linear-gradient(top, #0088cc, #0044cc);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));
-  background-image: -webkit-linear-gradient(top, #0088cc, #0044cc);
-  background-image: -o-linear-gradient(top, #0088cc, #0044cc);
-  background-image: linear-gradient(top, #0088cc, #0044cc);
+  background-color: #006ccc;
+  background-image: -moz-linear-gradient(top,#0088cc,#0044cc );
+  background-image: -ms-linear-gradient(top,#0088cc,#0044cc );
+  background-image: -webkit-gradient(linear,0 0,0 100%,from(#0088cc),to(#0044cc ));
+  background-image: -webkit-linear-gradient(top,#0088cc,#0044cc );
+  background-image: -o-linear-gradient(top,#0088cc,#0044cc );
+  background-image: linear-gradient(top,#0088cc,#0044cc );
   background-repeat: repeat-x;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0044cc', GradientType=0);
-  border-color: #0044cc #0044cc #002a80;
-  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0044cc ', GradientType=0);
+  border-color: #0044cc  #0044cc  #002a80;
+  border-color: rgba(0,0,0,.1)rgba(0,0,0,.1)fadein(rgba(0,0,0,.1),15%);
   filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
 }
 .btn-primary:hover,
@@ -1972,22 +1835,21 @@ table .span12 {
 .btn-primary[disabled] {
   background-color: #0044cc;
 }
-.btn-primary:active,
-.btn-primary.active {
+.btn-primary:active, .btn-primary.active {
   background-color: #003399 \9;
 }
 .btn-warning {
-  background-color: #faa732;
-  background-image: -moz-linear-gradient(top, #fbb450, #f89406);
-  background-image: -ms-linear-gradient(top, #fbb450, #f89406);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));
-  background-image: -webkit-linear-gradient(top, #fbb450, #f89406);
-  background-image: -o-linear-gradient(top, #fbb450, #f89406);
-  background-image: linear-gradient(top, #fbb450, #f89406);
+  background-color: #f9a732;
+  background-image: -moz-linear-gradient(top,#fbb450 ,#f89406);
+  background-image: -ms-linear-gradient(top,#fbb450 ,#f89406);
+  background-image: -webkit-gradient(linear,0 0,0 100%,from(#fbb450 ),to(#f89406));
+  background-image: -webkit-linear-gradient(top,#fbb450 ,#f89406);
+  background-image: -o-linear-gradient(top,#fbb450 ,#f89406);
+  background-image: linear-gradient(top,#fbb450 ,#f89406);
   background-repeat: repeat-x;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fbb450', endColorstr='#f89406', GradientType=0);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fbb450 ', endColorstr='#f89406', GradientType=0);
   border-color: #f89406 #f89406 #ad6704;
-  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+  border-color: rgba(0,0,0,.1)rgba(0,0,0,.1)fadein(rgba(0,0,0,.1),15%);
   filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
 }
 .btn-warning:hover,
@@ -1997,22 +1859,21 @@ table .span12 {
 .btn-warning[disabled] {
   background-color: #f89406;
 }
-.btn-warning:active,
-.btn-warning.active {
+.btn-warning:active, .btn-warning.active {
   background-color: #c67605 \9;
 }
 .btn-danger {
-  background-color: #da4f49;
-  background-image: -moz-linear-gradient(top, #ee5f5b, #bd362f);
-  background-image: -ms-linear-gradient(top, #ee5f5b, #bd362f);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f));
-  background-image: -webkit-linear-gradient(top, #ee5f5b, #bd362f);
-  background-image: -o-linear-gradient(top, #ee5f5b, #bd362f);
-  background-image: linear-gradient(top, #ee5f5b, #bd362f);
+  background-color: #da4e49;
+  background-image: -moz-linear-gradient(top,#ee5f5b,#bd362f);
+  background-image: -ms-linear-gradient(top,#ee5f5b,#bd362f);
+  background-image: -webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#bd362f));
+  background-image: -webkit-linear-gradient(top,#ee5f5b,#bd362f);
+  background-image: -o-linear-gradient(top,#ee5f5b,#bd362f);
+  background-image: linear-gradient(top,#ee5f5b,#bd362f);
   background-repeat: repeat-x;
   filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#bd362f', GradientType=0);
   border-color: #bd362f #bd362f #802420;
-  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+  border-color: rgba(0,0,0,.1)rgba(0,0,0,.1)fadein(rgba(0,0,0,.1),15%);
   filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
 }
 .btn-danger:hover,
@@ -2022,22 +1883,21 @@ table .span12 {
 .btn-danger[disabled] {
   background-color: #bd362f;
 }
-.btn-danger:active,
-.btn-danger.active {
+.btn-danger:active, .btn-danger.active {
   background-color: #942a25 \9;
 }
 .btn-success {
-  background-color: #5bb75b;
-  background-image: -moz-linear-gradient(top, #62c462, #51a351);
-  background-image: -ms-linear-gradient(top, #62c462, #51a351);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351));
-  background-image: -webkit-linear-gradient(top, #62c462, #51a351);
-  background-image: -o-linear-gradient(top, #62c462, #51a351);
-  background-image: linear-gradient(top, #62c462, #51a351);
+  background-color: #5bb65b;
+  background-image: -moz-linear-gradient(top,#62c462,#51a351);
+  background-image: -ms-linear-gradient(top,#62c462,#51a351);
+  background-image: -webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#51a351));
+  background-image: -webkit-linear-gradient(top,#62c462,#51a351);
+  background-image: -o-linear-gradient(top,#62c462,#51a351);
+  background-image: linear-gradient(top,#62c462,#51a351);
   background-repeat: repeat-x;
   filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#51a351', GradientType=0);
   border-color: #51a351 #51a351 #387038;
-  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+  border-color: rgba(0,0,0,.1)rgba(0,0,0,.1)fadein(rgba(0,0,0,.1),15%);
   filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
 }
 .btn-success:hover,
@@ -2047,22 +1907,21 @@ table .span12 {
 .btn-success[disabled] {
   background-color: #51a351;
 }
-.btn-success:active,
-.btn-success.active {
+.btn-success:active, .btn-success.active {
   background-color: #408140 \9;
 }
 .btn-info {
   background-color: #49afcd;
-  background-image: -moz-linear-gradient(top, #5bc0de, #2f96b4);
-  background-image: -ms-linear-gradient(top, #5bc0de, #2f96b4);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4));
-  background-image: -webkit-linear-gradient(top, #5bc0de, #2f96b4);
-  background-image: -o-linear-gradient(top, #5bc0de, #2f96b4);
-  background-image: linear-gradient(top, #5bc0de, #2f96b4);
+  background-image: -moz-linear-gradient(top,#5bc0de,#2f96b4);
+  background-image: -ms-linear-gradient(top,#5bc0de,#2f96b4);
+  background-image: -webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#2f96b4));
+  background-image: -webkit-linear-gradient(top,#5bc0de,#2f96b4);
+  background-image: -o-linear-gradient(top,#5bc0de,#2f96b4);
+  background-image: linear-gradient(top,#5bc0de,#2f96b4);
   background-repeat: repeat-x;
   filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#2f96b4', GradientType=0);
   border-color: #2f96b4 #2f96b4 #1f6377;
-  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+  border-color: rgba(0,0,0,.1)rgba(0,0,0,.1)fadein(rgba(0,0,0,.1),15%);
   filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
 }
 .btn-info:hover,
@@ -2072,22 +1931,21 @@ table .span12 {
 .btn-info[disabled] {
   background-color: #2f96b4;
 }
-.btn-info:active,
-.btn-info.active {
+.btn-info:active, .btn-info.active {
   background-color: #24748c \9;
 }
 .btn-inverse {
-  background-color: #393939;
-  background-image: -moz-linear-gradient(top, #454545, #262626);
-  background-image: -ms-linear-gradient(top, #454545, #262626);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#454545), to(#262626));
-  background-image: -webkit-linear-gradient(top, #454545, #262626);
-  background-image: -o-linear-gradient(top, #454545, #262626);
-  background-image: linear-gradient(top, #454545, #262626);
+  background-color: #383838;
+  background-image: -moz-linear-gradient(top,#454545,#262626);
+  background-image: -ms-linear-gradient(top,#454545,#262626);
+  background-image: -webkit-gradient(linear,0 0,0 100%,from(#454545),to(#262626));
+  background-image: -webkit-linear-gradient(top,#454545,#262626);
+  background-image: -o-linear-gradient(top,#454545,#262626);
+  background-image: linear-gradient(top,#454545,#262626);
   background-repeat: repeat-x;
   filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#454545', endColorstr='#262626', GradientType=0);
   border-color: #262626 #262626 #000000;
-  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+  border-color: rgba(0,0,0,.1)rgba(0,0,0,.1)fadein(rgba(0,0,0,.1),15%);
   filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
 }
 .btn-inverse:hover,
@@ -2097,27 +1955,22 @@ table .span12 {
 .btn-inverse[disabled] {
   background-color: #262626;
 }
-.btn-inverse:active,
-.btn-inverse.active {
+.btn-inverse:active, .btn-inverse.active {
   background-color: #0c0c0c \9;
 }
-button.btn,
-input[type="submit"].btn {
+button.btn, input[type="submit"].btn {
   *padding-top: 2px;
   *padding-bottom: 2px;
 }
-button.btn::-moz-focus-inner,
-input[type="submit"].btn::-moz-focus-inner {
+button.btn::-moz-focus-inner, input[type="submit"].btn::-moz-focus-inner {
   padding: 0;
   border: 0;
 }
-button.btn.large,
-input[type="submit"].btn.large {
+button.btn.large, input[type="submit"].btn.large {
   *padding-top: 7px;
   *padding-bottom: 7px;
 }
-button.btn.small,
-input[type="submit"].btn.small {
+button.btn.small, input[type="submit"].btn.small {
   *padding-top: 3px;
   *padding-bottom: 3px;
 }
@@ -2126,8 +1979,7 @@ input[type="submit"].btn.small {
   *zoom: 1;
   *margin-left: .3em;
 }
-.btn-group:before,
-.btn-group:after {
+.btn-group:before, .btn-group:after {
   display: table;
   content: "";
 }
@@ -2147,8 +1999,6 @@ input[type="submit"].btn.small {
 .btn-toolbar .btn-group {
   display: inline-block;
   *display: inline;
-  /* IE7 inline-block hack */
-
   *zoom: 1;
 }
 .btn-group .btn {
@@ -2168,8 +2018,7 @@ input[type="submit"].btn.small {
   -moz-border-radius-bottomleft: 4px;
   border-bottom-left-radius: 4px;
 }
-.btn-group .btn:last-child,
-.btn-group .dropdown-toggle {
+.btn-group .btn:last-child, .btn-group .dropdown-toggle {
   -webkit-border-top-right-radius: 4px;
   -moz-border-radius-topright: 4px;
   border-top-right-radius: 4px;
@@ -2186,8 +2035,7 @@ input[type="submit"].btn.small {
   -moz-border-radius-bottomleft: 6px;
   border-bottom-left-radius: 6px;
 }
-.btn-group .btn.large:last-child,
-.btn-group .large.dropdown-toggle {
+.btn-group .btn.large:last-child, .btn-group .large.dropdown-toggle {
   -webkit-border-top-right-radius: 6px;
   -moz-border-radius-topright: 6px;
   border-top-right-radius: 6px;
@@ -2201,16 +2049,15 @@ input[type="submit"].btn.small {
 .btn-group .btn.active {
   z-index: 2;
 }
-.btn-group .dropdown-toggle:active,
-.btn-group.open .dropdown-toggle {
+.btn-group .dropdown-toggle:active, .btn-group.open .dropdown-toggle {
   outline: 0;
 }
 .btn-group .dropdown-toggle {
   padding-left: 8px;
   padding-right: 8px;
-  -webkit-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
-  -moz-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
-  box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
+  -webkit-box-shadow: inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);
+  -moz-box-shadow: inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);
+  box-shadow: inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);
   *padding-top: 5px;
   *padding-bottom: 5px;
 }
@@ -2226,16 +2073,15 @@ input[type="submit"].btn.small {
 }
 .btn-group.open .dropdown-toggle {
   background-image: none;
-  -webkit-box-shadow: inset 0 1px 6px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
-  -moz-box-shadow: inset 0 1px 6px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
-  box-shadow: inset 0 1px 6px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
+  -webkit-box-shadow: inset 0 1px 6px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);
+  -moz-box-shadow: inset 0 1px 6px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);
+  box-shadow: inset 0 1px 6px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);
 }
 .btn .caret {
   margin-top: 7px;
   margin-left: 0;
 }
-.btn:hover .caret,
-.open.btn-group .caret {
+.btn:hover .caret, .open.btn-group .caret {
   opacity: 1;
   filter: alpha(opacity=100);
 }
@@ -2254,15 +2100,14 @@ input[type="submit"].btn.small {
 .alert {
   padding: 8px 35px 8px 14px;
   margin-bottom: 18px;
-  text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
+  text-shadow: 0 1px 0 rgba(255,255,255,.5);
   background-color: #fcf8e3;
-  border: 1px solid #fbeed5;
+  border: 1px solid #fbefd5;
   -webkit-border-radius: 4px;
   -moz-border-radius: 4px;
   border-radius: 4px;
 }
-.alert,
-.alert-heading {
+.alert, .alert-heading {
   color: #c09853;
 }
 .alert .close {
@@ -2275,12 +2120,10 @@ input[type="submit"].btn.small {
   background-color: #dff0d8;
   border-color: #d6e9c6;
 }
-.alert-success,
-.alert-success .alert-heading {
+.alert-success, .alert-success .alert-heading {
   color: #468847;
 }
-.alert-danger,
-.alert-error {
+.alert-danger, .alert-error {
   background-color: #f2dede;
   border-color: #eed3d7;
 }
@@ -2294,16 +2137,14 @@ input[type="submit"].btn.small {
   background-color: #d9edf7;
   border-color: #bce8f1;
 }
-.alert-info,
-.alert-info .alert-heading {
+.alert-info, .alert-info .alert-heading {
   color: #3a87ad;
 }
 .alert-block {
   padding-top: 14px;
   padding-bottom: 14px;
 }
-.alert-block > p,
-.alert-block > ul {
+.alert-block > p, .alert-block > ul {
   margin-bottom: 0;
 }
 .alert-block p + p {
@@ -2328,7 +2169,7 @@ input[type="submit"].btn.small {
   font-weight: bold;
   line-height: 18px;
   color: #999999;
-  text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
+  text-shadow: 0 1px 0 rgba(255,255,255,.5);
   text-transform: uppercase;
 }
 .nav li + .nav-header {
@@ -2339,52 +2180,43 @@ input[type="submit"].btn.small {
   padding-right: 14px;
   margin-bottom: 0;
 }
-.nav-list > li > a,
-.nav-list .nav-header {
+.nav-list > li > a, .nav-list .nav-header {
   margin-left: -15px;
   margin-right: -15px;
-  text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
+  text-shadow: 0 1px 0 rgba(255,255,255,.5);
 }
 .nav-list > li > a {
   padding: 3px 15px;
 }
-.nav-list .active > a,
-.nav-list .active > a:hover {
+.nav-list .active > a, .nav-list .active > a:hover {
   color: #ffffff;
-  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2);
+  text-shadow: 0 -1px 0 rgba(0,0,0,.2);
   background-color: #0088cc;
 }
 .nav-list [class^="icon-"] {
   margin-right: 2px;
 }
-.nav-tabs,
-.nav-pills {
+.nav-tabs, .nav-pills {
   *zoom: 1;
 }
-.nav-tabs:before,
-.nav-pills:before,
-.nav-tabs:after,
-.nav-pills:after {
+.nav-tabs:before, .nav-tabs:after, .nav-pills:before, .nav-pills:after {
   display: table;
   content: "";
 }
-.nav-tabs:after,
-.nav-pills:after {
+.nav-tabs:after, .nav-pills:after {
   clear: both;
 }
-.nav-tabs > li,
-.nav-pills > li {
+.nav-tabs > li, .nav-pills > li {
   float: left;
 }
-.nav-tabs > li > a,
-.nav-pills > li > a {
+.nav-tabs > li > a, .nav-pills > li > a {
   padding-right: 12px;
   padding-left: 12px;
   margin-right: 2px;
   line-height: 14px;
 }
 .nav-tabs {
-  border-bottom: 1px solid #ddd;
+  border-bottom: 1px solid #dddddd;
 }
 .nav-tabs > li {
   margin-bottom: -1px;
@@ -2400,11 +2232,10 @@ input[type="submit"].btn.small {
 .nav-tabs > li > a:hover {
   border-color: #eeeeee #eeeeee #dddddd;
 }
-.nav-tabs > .active > a,
-.nav-tabs > .active > a:hover {
+.nav-tabs > .active > a, .nav-tabs > .active > a:hover {
   color: #555555;
   background-color: #ffffff;
-  border: 1px solid #ddd;
+  border: 1px solid #dddddd;
   border-bottom-color: transparent;
   cursor: default;
 }
@@ -2417,8 +2248,7 @@ input[type="submit"].btn.small {
   -moz-border-radius: 5px;
   border-radius: 5px;
 }
-.nav-pills .active > a,
-.nav-pills .active > a:hover {
+.nav-pills .active > a, .nav-pills .active > a:hover {
   color: #ffffff;
   background-color: #0088cc;
 }
@@ -2432,7 +2262,7 @@ input[type="submit"].btn.small {
   border-bottom: 0;
 }
 .nav-tabs.nav-stacked > li > a {
-  border: 1px solid #ddd;
+  border: 1px solid #dddddd;
   -webkit-border-radius: 0;
   -moz-border-radius: 0;
   border-radius: 0;
@@ -2448,7 +2278,7 @@ input[type="submit"].btn.small {
   border-radius: 0 0 4px 4px;
 }
 .nav-tabs.nav-stacked > li > a:hover {
-  border-color: #ddd;
+  border-color: #dddddd;
   z-index: 2;
 }
 .nav-pills.nav-stacked > li > a {
@@ -2457,8 +2287,7 @@ input[type="submit"].btn.small {
 .nav-pills.nav-stacked > li:last-child > a {
   margin-bottom: 1px;
 }
-.nav-tabs .dropdown-menu,
-.nav-pills .dropdown-menu {
+.nav-tabs .dropdown-menu, .nav-pills .dropdown-menu {
   margin-top: 1px;
   border-width: 1px;
 }
@@ -2467,13 +2296,11 @@ input[type="submit"].btn.small {
   -moz-border-radius: 4px;
   border-radius: 4px;
 }
-.nav-tabs .dropdown-toggle .caret,
-.nav-pills .dropdown-toggle .caret {
+.nav-tabs .dropdown-toggle .caret, .nav-pills .dropdown-toggle .caret {
   border-top-color: #0088cc;
   margin-top: 6px;
 }
-.nav-tabs .dropdown-toggle:hover .caret,
-.nav-pills .dropdown-toggle:hover .caret {
+.nav-tabs .dropdown-toggle:hover .caret, .nav-pills .dropdown-toggle:hover .caret {
   border-top-color: #005580;
 }
 .nav-tabs .active .dropdown-toggle .caret,
@@ -2491,9 +2318,7 @@ input[type="submit"].btn.small {
   background-color: #999999;
   border-color: #999999;
 }
-.nav .open .caret,
-.nav .open.active .caret,
-.nav .open a:hover .caret {
+.nav .open .caret, .nav .open.active .caret, .nav .open a:hover .caret {
   border-top-color: #ffffff;
   opacity: 1;
   filter: alpha(opacity=100);
@@ -2504,8 +2329,7 @@ input[type="submit"].btn.small {
 .tabbable {
   *zoom: 1;
 }
-.tabbable:before,
-.tabbable:after {
+.tabbable:before, .tabbable:after {
   display: table;
   content: "";
 }
@@ -2515,21 +2339,17 @@ input[type="submit"].btn.small {
 .tab-content {
   overflow: hidden;
 }
-.tabs-below .nav-tabs,
-.tabs-right .nav-tabs,
-.tabs-left .nav-tabs {
+.tabs-below .nav-tabs, .tabs-right .nav-tabs, .tabs-left .nav-tabs {
   border-bottom: 0;
 }
-.tab-content > .tab-pane,
-.pill-content > .pill-pane {
+.tab-content > .tab-pane, .pill-content > .pill-pane {
   display: none;
 }
-.tab-content > .active,
-.pill-content > .active {
+.tab-content > .active, .pill-content > .active {
   display: block;
 }
 .tabs-below .nav-tabs {
-  border-top: 1px solid #ddd;
+  border-top: 1px solid #dddddd;
 }
 .tabs-below .nav-tabs > li {
   margin-top: -1px;
@@ -2542,18 +2362,15 @@ input[type="submit"].btn.small {
 }
 .tabs-below .nav-tabs > li > a:hover {
   border-bottom-color: transparent;
-  border-top-color: #ddd;
+  border-top-color: #dddddd;
 }
-.tabs-below .nav-tabs .active > a,
-.tabs-below .nav-tabs .active > a:hover {
-  border-color: transparent #ddd #ddd #ddd;
+.tabs-below .nav-tabs .active > a, .tabs-below .nav-tabs .active > a:hover {
+  border-color: transparent #dddddd #dddddd #dddddd;
 }
-.tabs-left .nav-tabs > li,
-.tabs-right .nav-tabs > li {
+.tabs-left .nav-tabs > li, .tabs-right .nav-tabs > li {
   float: none;
 }
-.tabs-left .nav-tabs > li > a,
-.tabs-right .nav-tabs > li > a {
+.tabs-left .nav-tabs > li > a, .tabs-right .nav-tabs > li > a {
   min-width: 74px;
   margin-right: 0;
   margin-bottom: 3px;
@@ -2561,7 +2378,7 @@ input[type="submit"].btn.small {
 .tabs-left .nav-tabs {
   float: left;
   margin-right: 19px;
-  border-right: 1px solid #ddd;
+  border-right: 1px solid #dddddd;
 }
 .tabs-left .nav-tabs > li > a {
   margin-right: -1px;
@@ -2572,15 +2389,14 @@ input[type="submit"].btn.small {
 .tabs-left .nav-tabs > li > a:hover {
   border-color: #eeeeee #dddddd #eeeeee #eeeeee;
 }
-.tabs-left .nav-tabs .active > a,
-.tabs-left .nav-tabs .active > a:hover {
-  border-color: #ddd transparent #ddd #ddd;
+.tabs-left .nav-tabs .active > a, .tabs-left .nav-tabs .active > a:hover {
+  border-color: #dddddd transparent #dddddd #dddddd;
   *border-right-color: #ffffff;
 }
 .tabs-right .nav-tabs {
   float: right;
   margin-left: 19px;
-  border-left: 1px solid #ddd;
+  border-left: 1px solid #dddddd;
 }
 .tabs-right .nav-tabs > li > a {
   margin-left: -1px;
@@ -2591,9 +2407,8 @@ input[type="submit"].btn.small {
 .tabs-right .nav-tabs > li > a:hover {
   border-color: #eeeeee #eeeeee #eeeeee #dddddd;
 }
-.tabs-right .nav-tabs .active > a,
-.tabs-right .nav-tabs .active > a:hover {
-  border-color: #ddd #ddd #ddd transparent;
+.tabs-right .nav-tabs .active > a, .tabs-right .nav-tabs .active > a:hover {
+  border-color: #dddddd #dddddd #dddddd transparent;
   *border-left-color: #ffffff;
 }
 .navbar {
@@ -2604,20 +2419,20 @@ input[type="submit"].btn.small {
   padding-left: 20px;
   padding-right: 20px;
   background-color: #2c2c2c;
-  background-image: -moz-linear-gradient(top, #333333, #222222);
-  background-image: -ms-linear-gradient(top, #333333, #222222);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#222222));
-  background-image: -webkit-linear-gradient(top, #333333, #222222);
-  background-image: -o-linear-gradient(top, #333333, #222222);
-  background-image: linear-gradient(top, #333333, #222222);
+  background-image: -moz-linear-gradient(top,#333333,#222222);
+  background-image: -ms-linear-gradient(top,#333333,#222222);
+  background-image: -webkit-gradient(linear,0 0,0 100%,from(#333333),to(#222222));
+  background-image: -webkit-linear-gradient(top,#333333,#222222);
+  background-image: -o-linear-gradient(top,#333333,#222222);
+  background-image: linear-gradient(top,#333333,#222222);
   background-repeat: repeat-x;
   filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0);
   -webkit-border-radius: 4px;
   -moz-border-radius: 4px;
   border-radius: 4px;
-  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1);
-  -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1);
-  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1);
+  -webkit-box-shadow: 0 1px 3px rgba(0,0,0,.25), inset 0 -1px 0 rgba(0,0,0,.1);
+  -moz-box-shadow: 0 1px 3px rgba(0,0,0,.25), inset 0 -1px 0 rgba(0,0,0,.1);
+  box-shadow: 0 1px 3px rgba(0,0,0,.25), inset 0 -1px 0 rgba(0,0,0,.1);
 }
 .btn-navbar {
   display: none;
@@ -2626,20 +2441,20 @@ input[type="submit"].btn.small {
   margin-left: 5px;
   margin-right: 5px;
   background-color: #2c2c2c;
-  background-image: -moz-linear-gradient(top, #333333, #222222);
-  background-image: -ms-linear-gradient(top, #333333, #222222);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#222222));
-  background-image: -webkit-linear-gradient(top, #333333, #222222);
-  background-image: -o-linear-gradient(top, #333333, #222222);
-  background-image: linear-gradient(top, #333333, #222222);
+  background-image: -moz-linear-gradient(top,#333333,#222222);
+  background-image: -ms-linear-gradient(top,#333333,#222222);
+  background-image: -webkit-gradient(linear,0 0,0 100%,from(#333333),to(#222222));
+  background-image: -webkit-linear-gradient(top,#333333,#222222);
+  background-image: -o-linear-gradient(top,#333333,#222222);
+  background-image: linear-gradient(top,#333333,#222222);
   background-repeat: repeat-x;
   filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0);
   border-color: #222222 #222222 #000000;
-  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+  border-color: rgba(0,0,0,.1)rgba(0,0,0,.1)fadein(rgba(0,0,0,.1),15%);
   filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075);
-  -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075);
-  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075);
+  -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075);
+  -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075);
+  box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075);
 }
 .btn-navbar:hover,
 .btn-navbar:active,
@@ -2648,8 +2463,7 @@ input[type="submit"].btn.small {
 .btn-navbar[disabled] {
   background-color: #222222;
 }
-.btn-navbar:active,
-.btn-navbar.active {
+.btn-navbar:active, .btn-navbar.active {
   background-color: #080808 \9;
 }
 .btn-navbar .icon-bar {
@@ -2660,9 +2474,9 @@ input[type="submit"].btn.small {
   -webkit-border-radius: 1px;
   -moz-border-radius: 1px;
   border-radius: 1px;
-  -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25);
-  -moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25);
-  box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25);
+  -webkit-box-shadow: 0 1px 0 rgba(0,0,0,.25);
+  -moz-box-shadow: 0 1px 0 rgba(0,0,0,.25);
+  box-shadow: 0 1px 0 rgba(0,0,0,.25);
 }
 .btn-navbar .icon-bar + .icon-bar {
   margin-top: 3px;
@@ -2692,8 +2506,7 @@ input[type="submit"].btn.small {
   color: #ffffff;
   background-color: transparent;
 }
-.navbar .btn,
-.navbar .btn-group {
+.navbar .btn, .navbar .btn-group {
   margin-top: 5px;
 }
 .navbar .btn-group .btn {
@@ -2703,22 +2516,19 @@ input[type="submit"].btn.small {
   margin-bottom: 0;
   *zoom: 1;
 }
-.navbar-form:before,
-.navbar-form:after {
+.navbar-form:before, .navbar-form:after {
   display: table;
   content: "";
 }
 .navbar-form:after {
   clear: both;
 }
-.navbar-form input,
-.navbar-form select {
+.navbar-form input, .navbar-form select {
   display: inline-block;
   margin-top: 5px;
   margin-bottom: 0;
 }
-.navbar-form .radio,
-.navbar-form .checkbox {
+.navbar-form .radio, .navbar-form .checkbox {
   margin-top: 5px;
 }
 .navbar-form input[type="image"],
@@ -2726,13 +2536,11 @@ input[type="submit"].btn.small {
 .navbar-form input[type="radio"] {
   margin-top: 3px;
 }
-.navbar-form .input-append,
-.navbar-form .input-prepend {
+.navbar-form .input-append, .navbar-form .input-prepend {
   margin-top: 6px;
   white-space: nowrap;
 }
-.navbar-form .input-append input,
-.navbar-form .input-prepend input {
+.navbar-form .input-append input, .navbar-form .input-prepend input {
   margin-top: 0;
 }
 .navbar-search {
@@ -2748,13 +2556,13 @@ input[type="submit"].btn.small {
   font-weight: normal;
   line-height: 1;
   color: #ffffff;
-  color: rgba(255, 255, 255, 0.75);
-  background: #666;
-  background: rgba(255, 255, 255, 0.3);
-  border: 1px solid #111;
-  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15);
-  -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15);
-  box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15);
+  color: rgba(255,255,255,.75);
+  background: #666666;
+  background: rgba(255,255,255,.3);
+  border: 1px solid #111111;
+  -webkit-box-shadow: inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15);
+  -moz-box-shadow: inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15);
+  box-shadow: inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15);
   -webkit-transition: none;
   -moz-transition: none;
   -ms-transition: none;
@@ -2770,18 +2578,17 @@ input[type="submit"].btn.small {
 .navbar-search .search-query:hover {
   color: #ffffff;
   background-color: #999999;
-  background-color: rgba(255, 255, 255, 0.5);
+  background-color: rgba(255,255,255,.5);
 }
-.navbar-search .search-query:focus,
-.navbar-search .search-query.focused {
+.navbar-search .search-query:focus, .navbar-search .search-query.focused {
   padding: 5px 10px;
   color: #333333;
   text-shadow: 0 1px 0 #ffffff;
   background-color: #ffffff;
   border: 0;
-  -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15);
-  -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15);
-  box-shadow: 0 0 3px rgba(0, 0, 0, 0.15);
+  -webkit-box-shadow: 0 0 3px rgba(0,0,0,.15);
+  -moz-box-shadow: 0 0 3px rgba(0,0,0,.15);
+  box-shadow: 0 0 3px rgba(0,0,0,.15);
   outline: 0;
 }
 .navbar-fixed-top {
@@ -2818,15 +2625,14 @@ input[type="submit"].btn.small {
   line-height: 19px;
   color: #999999;
   text-decoration: none;
-  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+  text-shadow: 0 -1px 0 rgba(0,0,0,.25);
 }
 .navbar .nav > li > a:hover {
-  background-color: #NaNbbaaNaN00NaN00NaN00NaN00NaN;
+  background-color: transparent;
   color: #ffffff;
   text-decoration: none;
 }
-.navbar .nav .active > a,
-.navbar .nav .active > a:hover {
+.navbar .nav .active > a, .navbar .nav .active > a:hover {
   color: #ffffff;
   text-decoration: none;
   background-color: #222222;
@@ -2854,8 +2660,8 @@ input[type="submit"].btn.small {
   display: inline-block;
   border-left: 7px solid transparent;
   border-right: 7px solid transparent;
-  border-bottom: 7px solid #ccc;
-  border-bottom-color: rgba(0, 0, 0, 0.2);
+  border-bottom: 7px solid #cccccc;
+  border-bottom-color: rgba(0,0,0,.2);
   position: absolute;
   top: -7px;
   left: 9px;
@@ -2870,8 +2676,7 @@ input[type="submit"].btn.small {
   top: -6px;
   left: 10px;
 }
-.navbar .nav .dropdown-toggle .caret,
-.navbar .nav .open.dropdown .caret {
+.navbar .nav .dropdown-toggle .caret, .navbar .nav .open.dropdown .caret {
   border-top-color: #ffffff;
 }
 .navbar .nav .active .caret {
@@ -2902,15 +2707,15 @@ input[type="submit"].btn.small {
   padding: 7px 14px;
   margin: 0 0 18px;
   background-color: #fbfbfb;
-  background-image: -moz-linear-gradient(top, #ffffff, #f5f5f5);
-  background-image: -ms-linear-gradient(top, #ffffff, #f5f5f5);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f5f5f5));
-  background-image: -webkit-linear-gradient(top, #ffffff, #f5f5f5);
-  background-image: -o-linear-gradient(top, #ffffff, #f5f5f5);
-  background-image: linear-gradient(top, #ffffff, #f5f5f5);
+  background-image: -moz-linear-gradient(top,#ffffff,#f5f5f5);
+  background-image: -ms-linear-gradient(top,#ffffff,#f5f5f5);
+  background-image: -webkit-gradient(linear,0 0,0 100%,from(#ffffff),to(#f5f5f5));
+  background-image: -webkit-linear-gradient(top,#ffffff,#f5f5f5);
+  background-image: -o-linear-gradient(top,#ffffff,#f5f5f5);
+  background-image: linear-gradient(top,#ffffff,#f5f5f5);
   background-repeat: repeat-x;
   filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#f5f5f5', GradientType=0);
-  border: 1px solid #ddd;
+  border: 1px solid #dddddd;
   -webkit-border-radius: 3px;
   -moz-border-radius: 3px;
   border-radius: 3px;
@@ -2936,17 +2741,15 @@ input[type="submit"].btn.small {
 .pagination ul {
   display: inline-block;
   *display: inline;
-  /* IE7 inline-block hack */
-
   *zoom: 1;
   margin-left: 0;
   margin-bottom: 0;
   -webkit-border-radius: 3px;
   -moz-border-radius: 3px;
   border-radius: 3px;
-  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
-  -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
-  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
+  -webkit-box-shadow: 0 1px 2px rgba(0,0,0,.05);
+  -moz-box-shadow: 0 1px 2px rgba(0,0,0,.05);
+  box-shadow: 0 1px 2px rgba(0,0,0,.05);
 }
 .pagination li {
   display: inline;
@@ -2956,19 +2759,17 @@ input[type="submit"].btn.small {
   padding: 0 14px;
   line-height: 34px;
   text-decoration: none;
-  border: 1px solid #ddd;
+  border: 1px solid #dddddd;
   border-left-width: 0;
 }
-.pagination a:hover,
-.pagination .active a {
+.pagination a:hover, .pagination .active a {
   background-color: #f5f5f5;
 }
 .pagination .active a {
   color: #999999;
   cursor: default;
 }
-.pagination .disabled a,
-.pagination .disabled a:hover {
+.pagination .disabled a, .pagination .disabled a:hover {
   color: #999999;
   background-color: transparent;
   cursor: default;
@@ -2997,8 +2798,7 @@ input[type="submit"].btn.small {
   text-align: center;
   *zoom: 1;
 }
-.pager:before,
-.pager:after {
+.pager:before, .pager:after {
   display: table;
   content: "";
 }
@@ -3011,8 +2811,8 @@ input[type="submit"].btn.small {
 .pager a {
   display: inline-block;
   padding: 5px 14px;
-  background-color: #fff;
-  border: 1px solid #ddd;
+  background-color: #ffffff;
+  border: 1px solid #dddddd;
   -webkit-border-radius: 15px;
   -moz-border-radius: 15px;
   border-radius: 15px;
@@ -3051,8 +2851,7 @@ input[type="submit"].btn.small {
 .modal-backdrop.fade {
   opacity: 0;
 }
-.modal-backdrop,
-.modal-backdrop.fade.in {
+.modal-backdrop, .modal-backdrop.fade.in {
   opacity: 0.8;
   filter: alpha(opacity=80);
 }
@@ -3066,17 +2865,15 @@ input[type="submit"].btn.small {
   width: 560px;
   margin: -250px 0 0 -280px;
   background-color: #ffffff;
-  border: 1px solid #999;
-  border: 1px solid rgba(0, 0, 0, 0.3);
-  *border: 1px solid #999;
-  /* IE6-7 */
-
+  border: 1px solid #999999;
+  border: 1px solid rgba(0,0,0,.3);
+  *border: 1px solid #999999;
   -webkit-border-radius: 6px;
   -moz-border-radius: 6px;
   border-radius: 6px;
-  -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
-  -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
-  box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
+  -webkit-box-shadow: 0 3px 7px rgba(0,0,0,0.3);
+  -moz-box-shadow: 0 3px 7px rgba(0,0,0,0.3);
+  box-shadow: 0 3px 7px rgba(0,0,0,0.3);
   -webkit-background-clip: padding-box;
   -moz-background-clip: padding-box;
   background-clip: padding-box;
@@ -3094,7 +2891,7 @@ input[type="submit"].btn.small {
 }
 .modal-header {
   padding: 9px 15px;
-  border-bottom: 1px solid #eee;
+  border-bottom: 1px solid #eeeeee;
 }
 .modal-header .close {
   margin-top: 2px;
@@ -3109,7 +2906,7 @@ input[type="submit"].btn.small {
   padding: 14px 15px 15px;
   margin-bottom: 0;
   background-color: #f5f5f5;
-  border-top: 1px solid #ddd;
+  border-top: 1px solid #dddddd;
   -webkit-border-radius: 0 0 6px 6px;
   -moz-border-radius: 0 0 6px 6px;
   border-radius: 0 0 6px 6px;
@@ -3118,8 +2915,7 @@ input[type="submit"].btn.small {
   box-shadow: inset 0 1px 0 #ffffff;
   *zoom: 1;
 }
-.modal-footer:before,
-.modal-footer:after {
+.modal-footer:before, .modal-footer:after {
   display: table;
   content: "";
 }
@@ -3161,32 +2957,32 @@ input[type="submit"].btn.small {
   bottom: 0;
   left: 50%;
   margin-left: -5px;
-  border-left: 5px solid #NaNbbaaNaN00NaN00NaN00NaN00NaN;
-  border-right: 5px solid #NaNbbaaNaN00NaN00NaN00NaN00NaN;
+  border-left: 5px solid transparent;
+  border-right: 5px solid transparent;
   border-top: 5px solid #000000;
 }
 .tooltip.left .tooltip-arrow {
   top: 50%;
   right: 0;
   margin-top: -5px;
-  border-top: 5px solid #NaNbbaaNaN00NaN00NaN00NaN00NaN;
-  border-bottom: 5px solid #NaNbbaaNaN00NaN00NaN00NaN00NaN;
+  border-top: 5px solid transparent;
+  border-bottom: 5px solid transparent;
   border-left: 5px solid #000000;
 }
 .tooltip.bottom .tooltip-arrow {
   top: 0;
   left: 50%;
   margin-left: -5px;
-  border-left: 5px solid #NaNbbaaNaN00NaN00NaN00NaN00NaN;
-  border-right: 5px solid #NaNbbaaNaN00NaN00NaN00NaN00NaN;
+  border-left: 5px solid transparent;
+  border-right: 5px solid transparent;
   border-bottom: 5px solid #000000;
 }
 .tooltip.right .tooltip-arrow {
   top: 50%;
   left: 0;
   margin-top: -5px;
-  border-top: 5px solid #NaNbbaaNaN00NaN00NaN00NaN00NaN;
-  border-bottom: 5px solid #NaNbbaaNaN00NaN00NaN00NaN00NaN;
+  border-top: 5px solid transparent;
+  border-bottom: 5px solid transparent;
   border-right: 5px solid #000000;
 }
 .tooltip-inner {
@@ -3229,32 +3025,32 @@ input[type="submit"].btn.small {
   bottom: 0;
   left: 50%;
   margin-left: -5px;
-  border-left: 5px solid #NaNbbaaNaN00NaN00NaN00NaN00NaN;
-  border-right: 5px solid #NaNbbaaNaN00NaN00NaN00NaN00NaN;
+  border-left: 5px solid transparent;
+  border-right: 5px solid transparent;
   border-top: 5px solid #000000;
 }
 .popover.right .arrow {
   top: 50%;
   left: 0;
   margin-top: -5px;
-  border-top: 5px solid #NaNbbaaNaN00NaN00NaN00NaN00NaN;
-  border-bottom: 5px solid #NaNbbaaNaN00NaN00NaN00NaN00NaN;
+  border-top: 5px solid transparent;
+  border-bottom: 5px solid transparent;
   border-right: 5px solid #000000;
 }
 .popover.bottom .arrow {
   top: 0;
   left: 50%;
   margin-left: -5px;
-  border-left: 5px solid #NaNbbaaNaN00NaN00NaN00NaN00NaN;
-  border-right: 5px solid #NaNbbaaNaN00NaN00NaN00NaN00NaN;
+  border-left: 5px solid transparent;
+  border-right: 5px solid transparent;
   border-bottom: 5px solid #000000;
 }
 .popover.left .arrow {
   top: 50%;
   right: 0;
   margin-top: -5px;
-  border-top: 5px solid #NaNbbaaNaN00NaN00NaN00NaN00NaN;
-  border-bottom: 5px solid #NaNbbaaNaN00NaN00NaN00NaN00NaN;
+  border-top: 5px solid transparent;
+  border-bottom: 5px solid transparent;
   border-left: 5px solid #000000;
 }
 .popover .arrow {
@@ -3267,19 +3063,19 @@ input[type="submit"].btn.small {
   width: 280px;
   overflow: hidden;
   background: #000000;
-  background: rgba(0, 0, 0, 0.8);
+  background: rgba(0,0,0,.8);
   -webkit-border-radius: 6px;
   -moz-border-radius: 6px;
   border-radius: 6px;
-  -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
-  -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
-  box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
+  -webkit-box-shadow: 0 3px 7px rgba(0,0,0,0.3);
+  -moz-box-shadow: 0 3px 7px rgba(0,0,0,0.3);
+  box-shadow: 0 3px 7px rgba(0,0,0,0.3);
 }
 .popover-title {
   padding: 9px 15px;
   line-height: 1;
   background-color: #f5f5f5;
-  border-bottom: 1px solid #eee;
+  border-bottom: 1px solid #eeeeee;
   -webkit-border-radius: 3px 3px 0 0;
   -moz-border-radius: 3px 3px 0 0;
   border-radius: 3px 3px 0 0;
@@ -3294,9 +3090,7 @@ input[type="submit"].btn.small {
   -moz-background-clip: padding-box;
   background-clip: padding-box;
 }
-.popover-content p,
-.popover-content ul,
-.popover-content ol {
+.popover-content p, .popover-content ul, .popover-content ol {
   margin-bottom: 0;
 }
 .thumbnails {
@@ -3304,8 +3098,7 @@ input[type="submit"].btn.small {
   list-style: none;
   *zoom: 1;
 }
-.thumbnails:before,
-.thumbnails:after {
+.thumbnails:before, .thumbnails:after {
   display: table;
   content: "";
 }
@@ -3320,19 +3113,19 @@ input[type="submit"].btn.small {
   display: block;
   padding: 4px;
   line-height: 1;
-  border: 1px solid #ddd;
+  border: 1px solid #dddddd;
   -webkit-border-radius: 4px;
   -moz-border-radius: 4px;
   border-radius: 4px;
-  -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075);
-  -moz-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075);
-  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075);
+  -webkit-box-shadow: 0 1px 1px rgba(0,0,0,.075);
+  -moz-box-shadow: 0 1px 1px rgba(0,0,0,.075);
+  box-shadow: 0 1px 1px rgba(0,0,0,.075);
 }
 a.thumbnail:hover {
   border-color: #0088cc;
-  -webkit-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25);
-  -moz-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25);
-  box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25);
+  -webkit-box-shadow: 0 1px 4px rgba(0,105,214,.25);
+  -moz-box-shadow: 0 1px 4px rgba(0,105,214,.25);
+  box-shadow: 0 1px 4px rgba(0,105,214,.25);
 }
 .thumbnail > img {
   display: block;
@@ -3345,10 +3138,10 @@ a.thumbnail:hover {
 }
 .label {
   padding: 2px 4px 3px;
-  font-size: 11.049999999999999px;
+  font-size: 11.05px;
   font-weight: bold;
   color: #ffffff;
-  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+  text-shadow: 0 -1px 0 rgba(0,0,0,.25);
   background-color: #999999;
   -webkit-border-radius: 3px;
   -moz-border-radius: 3px;
@@ -3410,18 +3203,18 @@ a.thumbnail:hover {
   overflow: hidden;
   height: 18px;
   margin-bottom: 18px;
-  background-color: #f7f7f7;
-  background-image: -moz-linear-gradient(top, #f5f5f5, #f9f9f9);
-  background-image: -ms-linear-gradient(top, #f5f5f5, #f9f9f9);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#f9f9f9));
-  background-image: -webkit-linear-gradient(top, #f5f5f5, #f9f9f9);
-  background-image: -o-linear-gradient(top, #f5f5f5, #f9f9f9);
-  background-image: linear-gradient(top, #f5f5f5, #f9f9f9);
+  background-color: #f6f6f6;
+  background-image: -moz-linear-gradient(top,#f5f5f5,#f9f9f9);
+  background-image: -ms-linear-gradient(top,#f5f5f5,#f9f9f9);
+  background-image: -webkit-gradient(linear,0 0,0 100%,from(#f5f5f5),to(#f9f9f9));
+  background-image: -webkit-linear-gradient(top,#f5f5f5,#f9f9f9);
+  background-image: -o-linear-gradient(top,#f5f5f5,#f9f9f9);
+  background-image: linear-gradient(top,#f5f5f5,#f9f9f9);
   background-repeat: repeat-x;
   filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5', endColorstr='#f9f9f9', GradientType=0);
-  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
-  -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
-  box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
+  -webkit-box-shadow: inset 0 1px 2px rgba(0,0,0,.1);
+  -moz-box-shadow: inset 0 1px 2px rgba(0,0,0,.1);
+  box-shadow: inset 0 1px 2px rgba(0,0,0,.1);
   -webkit-border-radius: 4px;
   -moz-border-radius: 4px;
   border-radius: 4px;
@@ -3432,38 +3225,36 @@ a.thumbnail:hover {
   color: #ffffff;
   font-size: 12px;
   text-align: center;
-  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
-  background-color: #0e90d2;
-  background-image: -moz-linear-gradient(top, #149bdf, #0480be);
-  background-image: -ms-linear-gradient(top, #149bdf, #0480be);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#149bdf), to(#0480be));
-  background-image: -webkit-linear-gradient(top, #149bdf, #0480be);
-  background-image: -o-linear-gradient(top, #149bdf, #0480be);
-  background-image: linear-gradient(top, #149bdf, #0480be);
+  text-shadow: 0 -1px 0 rgba(0,0,0,.25);
+  background-color: #0d90d1;
+  background-image: -moz-linear-gradient(top,#149bdf,#0480be);
+  background-image: -ms-linear-gradient(top,#149bdf,#0480be);
+  background-image: -webkit-gradient(linear,0 0,0 100%,from(#149bdf),to(#0480be));
+  background-image: -webkit-linear-gradient(top,#149bdf,#0480be);
+  background-image: -o-linear-gradient(top,#149bdf,#0480be);
+  background-image: linear-gradient(top,#149bdf,#0480be);
   background-repeat: repeat-x;
   filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#149bdf', endColorstr='#0480be', GradientType=0);
-  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
-  -moz-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
-  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
+  -webkit-box-shadow: inset 0 -1px 0 rgba(0,0,0,.15);
+  -moz-box-shadow: inset 0 -1px 0 rgba(0,0,0,.15);
+  box-shadow: inset 0 -1px 0 rgba(0,0,0,.15);
   -webkit-box-sizing: border-box;
   -moz-box-sizing: border-box;
-  -ms-box-sizing: border-box;
-  -o-box-sizing: border-box;
   box-sizing: border-box;
-  -webkit-transition: width 0.6s ease;
-  -moz-transition: width 0.6s ease;
-  -ms-transition: width 0.6s ease;
-  -o-transition: width 0.6s ease;
-  transition: width 0.6s ease;
+  -webkit-transition: width .6s ease;
+  -moz-transition: width .6s ease;
+  -ms-transition: width .6s ease;
+  -o-transition: width .6s ease;
+  transition: width .6s ease;
 }
 .progress-striped .bar {
   background-color: #62c462;
-  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, #NaNbbaaNaN00NaN00NaN00NaN00NaN), color-stop(0.5, #NaNbbaaNaN00NaN00NaN00NaN00NaN), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, #NaNbbaaNaN00NaN00NaN00NaN00NaN), to(#NaNbbaaNaN00NaN00NaN00NaN00NaN));
-  background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 25%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 75%, #NaNbbaaNaN00NaN00NaN00NaN00NaN);
-  background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 25%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 75%, #NaNbbaaNaN00NaN00NaN00NaN00NaN);
-  background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 25%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 75%, #NaNbbaaNaN00NaN00NaN00NaN00NaN);
-  background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 25%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 75%, #NaNbbaaNaN00NaN00NaN00NaN00NaN);
-  background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 25%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 75%, #NaNbbaaNaN00NaN00NaN00NaN00NaN);
+  background-image: -webkit-gradient(linear,0 100%,100% 0,color-stop(.25,rgba(255,255,255,.15)),color-stop(.25,transparent),color-stop(.5,transparent),color-stop(.5,rgba(255,255,255,.15)),color-stop(.75,rgba(255,255,255,.15)),color-stop(.75,transparent),to(transparent));
+  background-image: -webkit-linear-gradient(-45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent);
+  background-image: -moz-linear-gradient(-45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent);
+  background-image: -ms-linear-gradient(-45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent);
+  background-image: -o-linear-gradient(-45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent);
+  background-image: linear-gradient(-45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent);
   -webkit-background-size: 40px 40px;
   -moz-background-size: 40px 40px;
   -o-background-size: 40px 40px;
@@ -3475,64 +3266,64 @@ a.thumbnail:hover {
   animation: progress-bar-stripes 2s linear infinite;
 }
 .progress-danger .bar {
-  background-color: #dd514c;
-  background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35);
-  background-image: -ms-linear-gradient(top, #ee5f5b, #c43c35);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#c43c35));
-  background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35);
-  background-image: -o-linear-gradient(top, #ee5f5b, #c43c35);
-  background-image: linear-gradient(top, #ee5f5b, #c43c35);
+  background-color: #dd514b;
+  background-image: -moz-linear-gradient(top,#ee5f5b,#c43c35);
+  background-image: -ms-linear-gradient(top,#ee5f5b,#c43c35);
+  background-image: -webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#c43c35));
+  background-image: -webkit-linear-gradient(top,#ee5f5b,#c43c35);
+  background-image: -o-linear-gradient(top,#ee5f5b,#c43c35);
+  background-image: linear-gradient(top,#ee5f5b,#c43c35);
   background-repeat: repeat-x;
   filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#c43c35', GradientType=0);
 }
 .progress-danger.progress-striped .bar {
   background-color: #ee5f5b;
-  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, #NaNbbaaNaN00NaN00NaN00NaN00NaN), color-stop(0.5, #NaNbbaaNaN00NaN00NaN00NaN00NaN), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, #NaNbbaaNaN00NaN00NaN00NaN00NaN), to(#NaNbbaaNaN00NaN00NaN00NaN00NaN));
-  background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 25%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 75%, #NaNbbaaNaN00NaN00NaN00NaN00NaN);
-  background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 25%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 75%, #NaNbbaaNaN00NaN00NaN00NaN00NaN);
-  background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 25%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 75%, #NaNbbaaNaN00NaN00NaN00NaN00NaN);
-  background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 25%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 75%, #NaNbbaaNaN00NaN00NaN00NaN00NaN);
-  background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 25%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 75%, #NaNbbaaNaN00NaN00NaN00NaN00NaN);
+  background-image: -webkit-gradient(linear,0 100%,100% 0,color-stop(.25,rgba(255,255,255,.15)),color-stop(.25,transparent),color-stop(.5,transparent),color-stop(.5,rgba(255,255,255,.15)),color-stop(.75,rgba(255,255,255,.15)),color-stop(.75,transparent),to(transparent));
+  background-image: -webkit-linear-gradient(-45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent);
+  background-image: -moz-linear-gradient(-45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent);
+  background-image: -ms-linear-gradient(-45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent);
+  background-image: -o-linear-gradient(-45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent);
+  background-image: linear-gradient(-45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent);
 }
 .progress-success .bar {
-  background-color: #5eb95e;
-  background-image: -moz-linear-gradient(top, #62c462, #57a957);
-  background-image: -ms-linear-gradient(top, #62c462, #57a957);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#57a957));
-  background-image: -webkit-linear-gradient(top, #62c462, #57a957);
-  background-image: -o-linear-gradient(top, #62c462, #57a957);
-  background-image: linear-gradient(top, #62c462, #57a957);
+  background-color: #5db95d;
+  background-image: -moz-linear-gradient(top,#62c462,#57a957);
+  background-image: -ms-linear-gradient(top,#62c462,#57a957);
+  background-image: -webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#57a957));
+  background-image: -webkit-linear-gradient(top,#62c462,#57a957);
+  background-image: -o-linear-gradient(top,#62c462,#57a957);
+  background-image: linear-gradient(top,#62c462,#57a957);
   background-repeat: repeat-x;
   filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#57a957', GradientType=0);
 }
 .progress-success.progress-striped .bar {
   background-color: #62c462;
-  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, #NaNbbaaNaN00NaN00NaN00NaN00NaN), color-stop(0.5, #NaNbbaaNaN00NaN00NaN00NaN00NaN), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, #NaNbbaaNaN00NaN00NaN00NaN00NaN), to(#NaNbbaaNaN00NaN00NaN00NaN00NaN));
-  background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 25%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 75%, #NaNbbaaNaN00NaN00NaN00NaN00NaN);
-  background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 25%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 75%, #NaNbbaaNaN00NaN00NaN00NaN00NaN);
-  background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 25%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 75%, #NaNbbaaNaN00NaN00NaN00NaN00NaN);
-  background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 25%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 75%, #NaNbbaaNaN00NaN00NaN00NaN00NaN);
-  background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 25%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 75%, #NaNbbaaNaN00NaN00NaN00NaN00NaN);
+  background-image: -webkit-gradient(linear,0 100%,100% 0,color-stop(.25,rgba(255,255,255,.15)),color-stop(.25,transparent),color-stop(.5,transparent),color-stop(.5,rgba(255,255,255,.15)),color-stop(.75,rgba(255,255,255,.15)),color-stop(.75,transparent),to(transparent));
+  background-image: -webkit-linear-gradient(-45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent);
+  background-image: -moz-linear-gradient(-45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent);
+  background-image: -ms-linear-gradient(-45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent);
+  background-image: -o-linear-gradient(-45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent);
+  background-image: linear-gradient(-45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent);
 }
 .progress-info .bar {
   background-color: #4bb1cf;
-  background-image: -moz-linear-gradient(top, #5bc0de, #339bb9);
-  background-image: -ms-linear-gradient(top, #5bc0de, #339bb9);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#339bb9));
-  background-image: -webkit-linear-gradient(top, #5bc0de, #339bb9);
-  background-image: -o-linear-gradient(top, #5bc0de, #339bb9);
-  background-image: linear-gradient(top, #5bc0de, #339bb9);
+  background-image: -moz-linear-gradient(top,#5bc0de,#339bb9);
+  background-image: -ms-linear-gradient(top,#5bc0de,#339bb9);
+  background-image: -webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#339bb9));
+  background-image: -webkit-linear-gradient(top,#5bc0de,#339bb9);
+  background-image: -o-linear-gradient(top,#5bc0de,#339bb9);
+  background-image: linear-gradient(top,#5bc0de,#339bb9);
   background-repeat: repeat-x;
   filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#339bb9', GradientType=0);
 }
 .progress-info.progress-striped .bar {
   background-color: #5bc0de;
-  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, #NaNbbaaNaN00NaN00NaN00NaN00NaN), color-stop(0.5, #NaNbbaaNaN00NaN00NaN00NaN00NaN), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, #NaNbbaaNaN00NaN00NaN00NaN00NaN), to(#NaNbbaaNaN00NaN00NaN00NaN00NaN));
-  background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 25%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 75%, #NaNbbaaNaN00NaN00NaN00NaN00NaN);
-  background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 25%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 75%, #NaNbbaaNaN00NaN00NaN00NaN00NaN);
-  background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 25%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 75%, #NaNbbaaNaN00NaN00NaN00NaN00NaN);
-  background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 25%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 75%, #NaNbbaaNaN00NaN00NaN00NaN00NaN);
-  background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 25%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 75%, #NaNbbaaNaN00NaN00NaN00NaN00NaN);
+  background-image: -webkit-gradient(linear,0 100%,100% 0,color-stop(.25,rgba(255,255,255,.15)),color-stop(.25,transparent),color-stop(.5,transparent),color-stop(.5,rgba(255,255,255,.15)),color-stop(.75,rgba(255,255,255,.15)),color-stop(.75,transparent),to(transparent));
+  background-image: -webkit-linear-gradient(-45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent);
+  background-image: -moz-linear-gradient(-45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent);
+  background-image: -ms-linear-gradient(-45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent);
+  background-image: -o-linear-gradient(-45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent);
+  background-image: linear-gradient(-45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent);
 }
 .accordion {
   margin-bottom: 18px;
@@ -3568,26 +3359,23 @@ a.thumbnail:hover {
 .carousel .item {
   display: none;
   position: relative;
-  -webkit-transition: 0.6s ease-in-out left;
-  -moz-transition: 0.6s ease-in-out left;
-  -ms-transition: 0.6s ease-in-out left;
-  -o-transition: 0.6s ease-in-out left;
-  transition: 0.6s ease-in-out left;
+  -webkit-transition: .6s ease-in-out left;
+  -moz-transition: .6s ease-in-out left;
+  -ms-transition: .6s ease-in-out left;
+  -o-transition: .6s ease-in-out left;
+  transition: .6s ease-in-out left;
 }
 .carousel .item > img {
   display: block;
   line-height: 1;
 }
-.carousel .active,
-.carousel .next,
-.carousel .prev {
+.carousel .active, .carousel .next, .carousel .prev {
   display: block;
 }
 .carousel .active {
   left: 0;
 }
-.carousel .next,
-.carousel .prev {
+.carousel .next, .carousel .prev {
   position: absolute;
   top: 0;
   width: 100%;
@@ -3598,8 +3386,7 @@ a.thumbnail:hover {
 .carousel .prev {
   left: -100%;
 }
-.carousel .next.left,
-.carousel .prev.right {
+.carousel .next.left, .carousel .prev.right {
   left: 0;
 }
 .carousel .active.left {
@@ -3645,10 +3432,9 @@ a.thumbnail:hover {
   bottom: 0;
   padding: 10px 15px 5px;
   background: #333333;
-  background: rgba(0, 0, 0, 0.75);
+  background: rgba(0,0,0,.75);
 }
-.carousel-caption h4,
-.carousel-caption p {
+.carousel-caption h4, .carousel-caption p {
   color: #ffffff;
 }
 .hero-unit {
@@ -3685,14 +3471,6 @@ a.thumbnail:hover {
 .invisible {
   visibility: hidden;
 }
-/*!
- * Datepicker for Bootstrap
- *
- * Copyright 2012 Stefan Petre
- * Licensed under the Apache License v2.0
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- */
 .datepicker {
   top: 0;
   left: 0;
@@ -3701,18 +3479,14 @@ a.thumbnail:hover {
   -webkit-border-radius: 4px;
   -moz-border-radius: 4px;
   border-radius: 4px;
-  /*.dow {
-    border-top: 1px solid #ddd !important;
-  }*/
-
 }
 .datepicker:before {
   content: '';
   display: inline-block;
   border-left: 7px solid transparent;
   border-right: 7px solid transparent;
-  border-bottom: 7px solid #ccc;
-  border-bottom-color: rgba(0, 0, 0, 0.2);
+  border-bottom: 7px solid #cccccc;
+  border-bottom-color: rgba(0,0,0,0.2);
   position: absolute;
   top: -7px;
   left: 6px;
@@ -3734,8 +3508,7 @@ a.thumbnail:hover {
   width: 100%;
   margin: 0;
 }
-.datepicker td,
-.datepicker th {
+.datepicker td, .datepicker th {
   text-align: center;
   width: 20px;
   height: 20px;
@@ -3750,29 +3523,25 @@ a.thumbnail:hover {
 .datepicker td.day.disabled {
   color: #eeeeee;
 }
-.datepicker td.old,
-.datepicker td.new {
+.datepicker td.old, .datepicker td.new {
   color: #999999;
 }
-.datepicker td.active,
-.datepicker td.active:hover {
+.datepicker td.active, .datepicker td.active:hover {
   color: #ffffff;
   background-color: #006dcc;
-  background-image: -moz-linear-gradient(top, #0088cc, #0044cc);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));
-  background-image: -webkit-linear-gradient(top, #0088cc, #0044cc);
-  background-image: -o-linear-gradient(top, #0088cc, #0044cc);
-  background-image: linear-gradient(to bottom, #0088cc, #0044cc);
+  background-image: -moz-linear-gradient(top,#0088cc,#0044cc);
+  background-image: -webkit-gradient(linear,0 0,0 100%,from(#0088cc),to(#0044cc));
+  background-image: -webkit-linear-gradient(top,#0088cc,#0044cc);
+  background-image: -o-linear-gradient(top,#0088cc,#0044cc);
+  background-image: linear-gradient(to bottom,#0088cc,#0044cc);
   background-repeat: repeat-x;
-  filter: progid:dximagetransform.microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0);
   border-color: #0044cc #0044cc #002a80;
-  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+  border-color: rgba(0,0,0,0.1)rgba(0,0,0,0.1)rgba(0,0,0,0.25);
   *background-color: #0044cc;
-  /* Darken IE7 buttons by default so they stand out more given they won't have borders */
-
-  filter: progid:dximagetransform.microsoft.gradient(enabled=false);
-  color: #fff;
-  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+  color: #ffffff;
+  text-shadow: 0 -1px 0 rgba(0,0,0,0.25);
 }
 .datepicker td.active:hover,
 .datepicker td.active:hover:hover,
@@ -3814,21 +3583,19 @@ a.thumbnail:hover {
 .datepicker td span.active {
   color: #ffffff;
   background-color: #006dcc;
-  background-image: -moz-linear-gradient(top, #0088cc, #0044cc);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));
-  background-image: -webkit-linear-gradient(top, #0088cc, #0044cc);
-  background-image: -o-linear-gradient(top, #0088cc, #0044cc);
-  background-image: linear-gradient(to bottom, #0088cc, #0044cc);
+  background-image: -moz-linear-gradient(top,#0088cc,#0044cc);
+  background-image: -webkit-gradient(linear,0 0,0 100%,from(#0088cc),to(#0044cc));
+  background-image: -webkit-linear-gradient(top,#0088cc,#0044cc);
+  background-image: -o-linear-gradient(top,#0088cc,#0044cc);
+  background-image: linear-gradient(to bottom,#0088cc,#0044cc);
   background-repeat: repeat-x;
-  filter: progid:dximagetransform.microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0);
   border-color: #0044cc #0044cc #002a80;
-  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+  border-color: rgba(0,0,0,0.1)rgba(0,0,0,0.1)rgba(0,0,0,0.25);
   *background-color: #0044cc;
-  /* Darken IE7 buttons by default so they stand out more given they won't have borders */
-
-  filter: progid:dximagetransform.microsoft.gradient(enabled=false);
-  color: #fff;
-  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+  color: #ffffff;
+  text-shadow: 0 -1px 0 rgba(0,0,0,0.25);
 }
 .datepicker td span.active:hover,
 .datepicker td span.active:focus,
@@ -3840,8 +3607,7 @@ a.thumbnail:hover {
   background-color: #0044cc;
   *background-color: #003bb3;
 }
-.datepicker td span.active:active,
-.datepicker td span.active.active {
+.datepicker td span.active:active, .datepicker td span.active.active {
   background-color: #003399 \9;
 }
 .datepicker td span.old {
@@ -3850,8 +3616,7 @@ a.thumbnail:hover {
 .datepicker th.switch {
   width: 145px;
 }
-.datepicker th.next,
-.datepicker th.prev {
+.datepicker th.next, .datepicker th.prev {
   font-size: 21px;
 }
 .datepicker thead tr:first-child th {
@@ -3860,14 +3625,12 @@ a.thumbnail:hover {
 .datepicker thead tr:first-child th:hover {
   background: #eeeeee;
 }
-.input-append.date .add-on i,
-.input-prepend.date .add-on i {
+.input-append.date .add-on i, .input-prepend.date .add-on i {
   display: block;
   cursor: pointer;
   width: 16px;
   height: 16px;
 }
-/* new clearfix */
 .clearfix:after {
   visibility: hidden;
   display: block;
@@ -3879,15 +3642,13 @@ a.thumbnail:hover {
 * html .clearfix {
   zoom: 1;
 }
-/* IE6 */
-*:first-child + html .clearfix {
+* :first-child + html .clearfix {
   zoom: 1;
 }
-/* IE7 */
 @font-face {
   font-family: 'anivers';
   src: url('/static/dashboard/fonts/Anivers_Regular-webfont.eot');
-  src: url('/static/dashboard/fonts/Anivers_Regular-webfont.eot?iefix') format('eot'), url('/static/dashboard/fonts/Anivers_Regular-webfont.woff') format('woff'), url('/static/dashboard/fonts/Anivers_Regular-webfont.ttf') format('truetype'), url('/static/dashboard/fonts/Anivers_Regular-webfont.svg#webfont3JLVF59W') format('svg');
+  src: url('/static/dashboard/fonts/Anivers_Regular-webfont.eot?iefix')format('eot'), url('/static/dashboard/fonts/Anivers_Regular-webfont.woff')format('woff'), url('/static/dashboard/fonts/Anivers_Regular-webfont.ttf')format('truetype'), url('/static/dashboard/fonts/Anivers_Regular-webfont.svg#webfont3JLVF59W') format('svg');
   font-weight: normal;
   font-style: normal;
 }
@@ -3938,7 +3699,7 @@ dt {
   width: 130px;
 }
 #user_info {
-  color: #888;
+  color: #888888;
   margin: auto 0;
 }
 #user_info > a {
@@ -3957,10 +3718,9 @@ h2 {
   font-weight: normal;
 }
 body {
-  background-color: #fff;
+  background-color: #ffffff;
   min-width: 890px;
 }
-/* Login Splash Page */
 #splash {
   background: #fafafa;
 }
@@ -3977,9 +3737,9 @@ body {
   -webkit-border-radius: 6px;
   -moz-border-radius: 6px;
   border-radius: 6px;
-  -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
-  -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
-  box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
+  -webkit-box-shadow: 0 3px 7px rgba(0,0,0,0.3);
+  -moz-box-shadow: 0 3px 7px rgba(0,0,0,0.3);
+  box-shadow: 0 3px 7px rgba(0,0,0,0.3);
   -webkit-background-clip: padding-box;
   -moz-background-clip: padding-box;
   background-clip: padding-box;
@@ -4000,7 +3760,7 @@ body {
   margin-top: 190px;
 }
 .nav li a {
-  color: #8EACB7;
+  color: #8eacb7;
   text-shadow: none;
 }
 .container-fluid {
@@ -4014,7 +3774,7 @@ body {
 }
 .sidebar h4 {
   margin-left: 14px;
-  color: #999;
+  color: #999999;
 }
 .sidebar .nav-tabs {
   margin-top: -34px;
@@ -4039,7 +3799,6 @@ h1.brand a {
   margin-top: 15px;
   margin-bottom: 25px;
 }
-/* Tenant Dropdown */
 a.current_item {
   width: 163px;
   float: left;
@@ -4047,8 +3806,7 @@ a.current_item {
 a.current_item:hover {
   text-decoration: none;
 }
-a.current_item:hover h3,
-a.current_item:hover h4 {
+a.current_item:hover h3, a.current_item:hover h4 {
   color: #39738c;
 }
 .sidebar .switcher_bar {
@@ -4164,43 +3922,40 @@ a.current_item:hover h4 {
   border: none;
 }
 .table-bordered tr.table_caption + tr th {
-  border-top: 1px solid #ddd;
+  border-top: 1px solid #dddddd;
 }
 .table-bordered tr.table_caption + tr th:first-child,
 .table-bordered tr.table_caption + tr th.hide + th {
   -moz-border-radius-topleft: 4px;
   -webkit-border-top-left-radius: 4px;
   border-top-left-radius: 4px;
-  border-left: 1px solid #ddd;
+  border-left: 1px solid #dddddd;
 }
 .table-bordered tr.table_caption + tr th:last-child {
   -moz-border-radius-topright: 4px;
   -webkit-border-top-right-radius: 4px;
   border-top-right-radius: 4px;
-  border-right: 1px solid #ddd;
+  border-right: 1px solid #dddddd;
 }
-.table-bordered tbody tr td:first-child,
-.table-bordered tfoot tr td:first-child {
-  border-left: 1px solid #ddd;
+.table-bordered tbody tr td:first-child, .table-bordered tfoot tr td:first-child {
+  border-left: 1px solid #dddddd;
 }
-.table-bordered tbody tr td:last-child,
-.table-bordered tfoot tr td:last-child {
-  border-right: 1px solid #ddd;
+.table-bordered tbody tr td:last-child, .table-bordered tfoot tr td:last-child {
+  border-right: 1px solid #dddddd;
 }
 .table-bordered tfoot tr td:first-child {
-  border-bottom: 1px solid #ddd;
+  border-bottom: 1px solid #dddddd;
   -moz-border-radius-bottomleft: 4px;
   -webkit-border-bottom-left-radius: 4px;
   border-bottom-left-radius: 4px;
 }
 .table-bordered tfoot tr td:last-child {
-  border-bottom: 1px solid #ddd;
+  border-bottom: 1px solid #dddddd;
   -moz-border-radius-bottomright: 4px;
   -webkit-border-bottom-right-radius: 4px;
   border-bottom-right-radius: 4px;
 }
-.table_title h3,
-.table_header h3 {
+.table_title h3, .table_header h3 {
   font-family: anivers;
   font-weight: normal;
   font-size: 24px;
@@ -4222,12 +3977,10 @@ a.current_item:hover h4 {
   background-color: transparent;
   cursor: default;
 }
-.table th.headerSortUp:hover,
-.table th.headerSortDown:hover {
+.table th.headerSortUp:hover, .table th.headerSortDown:hover {
   background-color: #dfdfdf;
 }
-.table th.headerSortUp,
-.table th.headerSortDown {
+.table th.headerSortUp, .table th.headerSortDown {
   background-color: #dfdfdf;
   background-repeat: no-repeat;
   background-position: 98% center;
@@ -4238,8 +3991,7 @@ a.current_item:hover h4 {
 .table th.headerSortUp {
   background-image: url('/static/dashboard/img/up_arrow.png');
 }
-.table tr.summation td:first-child,
-.table tr.summation td:last-child {
+.table tr.summation td:first-child, .table tr.summation td:last-child {
   border-radius: 0;
   border-bottom: 0 none;
 }
@@ -4258,17 +4010,17 @@ small {
   margin: 10px 0 20px 0;
 }
 .main_nav a {
-  color: #999;
+  color: #999999;
   width: 185px;
   padding: 10px;
   display: block;
   margin-left: 20px;
 }
 .main_nav a.active {
-  background: #fff;
+  background: #ffffff;
   border: 2px solid #d8d8d8;
   border-right: 0;
-  border-bottom-color: #ccc;
+  border-bottom-color: #cccccc;
 }
 table form {
   margin-bottom: 0;
@@ -4282,9 +4034,9 @@ table form {
   width: 300px;
 }
 .messages .alert-block {
-  -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
-  -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
-  box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
+  -webkit-box-shadow: 0 3px 7px rgba(0,0,0,0.3);
+  -moz-box-shadow: 0 3px 7px rgba(0,0,0,0.3);
+  box-shadow: 0 3px 7px rgba(0,0,0,0.3);
 }
 .messages .alert-block.alert-error {
   border: 1px solid #9d261d;
@@ -4296,9 +4048,7 @@ table form {
   margin-top: -23px;
   margin-right: -23px;
 }
-.modal > form,
-.login > form,
-.alert-actions > form {
+.modal > form, .login > form, .alert-actions > form {
   margin-bottom: 0;
 }
 .alert-block p {
@@ -4333,8 +4083,8 @@ table form {
   text-align: center;
 }
 .table tfoot tr td {
-  border-top: 1px solid #DDD;
-  background-color: #F1F1F1;
+  border-top: 1px solid #dddddd;
+  background-color: #f1f1f1;
   font-size: 11px;
   line-height: 14px;
 }
@@ -4342,8 +4092,7 @@ table form {
   float: right;
   min-width: 400px;
 }
-.table_actions .table_search,
-.table_actions .table_filter {
+.table_actions .table_search, .table_actions .table_filter {
   display: inline-block;
 }
 .table_search input {
@@ -4351,21 +4100,18 @@ table form {
   display: inline-block;
   margin-bottom: 0;
 }
-.table_actions a,
-.table_actions button {
+.table_actions a, .table_actions button {
   float: right;
   margin-left: 10px;
 }
 .table_actions button.filter {
   margin-left: 0;
 }
-.table_actions a.btn-create,
-.table_actions a.btn-launch {
+.table_actions a.btn-create, .table_actions a.btn-launch {
   padding-left: 23px;
   position: relative;
 }
-.table_actions a.btn-create:before,
-.table_actions a.btn-launch:before {
+.table_actions a.btn-create:before, .table_actions a.btn-launch:before {
   display: inline-block;
   content: "";
   width: 18px;
@@ -4418,13 +4164,11 @@ table form {
   top: 0px;
   left: 0px;
 }
-.table_actions button.btn-delete,
-.table_actions button.btn-terminate {
+.table_actions button.btn-delete, .table_actions button.btn-terminate {
   padding-left: 23px;
   position: relative;
 }
-.table_actions button.btn-delete:before,
-.table_actions button.btn-terminate:before {
+.table_actions button.btn-delete:before, .table_actions button.btn-terminate:before {
   display: inline-block;
   content: "";
   width: 18px;
@@ -4462,11 +4206,6 @@ table form {
 .hidden {
   display: none;
 }
-/*
- * Bootstrap styles table backgrounds using nth-child(2n+1), which is
- * oblivious to hidden elements. The styles below allow us to override
- * the bootstrap style when neccessary by setting the odd/even classes.
- */
 .table-striped.datatable tbody tr.odd td {
   background-color: #f9f9f9;
 }
@@ -4478,10 +4217,10 @@ table form {
 .table-striped.datatable tbody tr:hover th {
   background-color: #f5f5f5;
 }
-.table-striped tbody tr.status_unknown:nth-child(odd) td {
+.table-striped tbody tr.status_unknown:nth-child(odd)td {
   background-color: #ffffb5;
 }
-.table-striped tbody tr.status_unknown:nth-child(even) td {
+.table-striped tbody tr.status_unknown:nth-child(even)td {
   background-color: #ffffc6;
 }
 .nowrap-col {
@@ -4505,24 +4244,20 @@ table form {
   float: left;
   line-height: 18px;
 }
-#external_links,
-#external_links li {
+#external_links, #external_links li {
   float: left;
 }
 #external_links li {
   margin: 0 0 0 15px;
 }
-/* Forms */
 form label {
   text-align: left;
-  color: #555;
+  color: #555555;
   font-weight: bold;
 }
 .modal {
   width: 700px;
   max-height: none;
-  /* Prevents large modals from scrolling unnecessarily */
-
   top: 80px;
   margin-top: 0;
   position: absolute;
@@ -4539,23 +4274,27 @@ form label {
   bottom: 0;
   width: 150px;
 }
+.datepicker {
+  margin-top: 10px;
+}
+.datepicker input {
+  width: 65px;
+  margin-right: 10px;
+}
+.datepicker .btn {
+  margin-right: 10px;
+}
 form.horizontal .form-field {
   float: left;
 }
 form.horizontal.split_half .form-field {
   width: 334px;
-  /* Fits 2 fields to a row */
-
 }
 form.horizontal.split_quarter .form-field {
   width: 167px;
-  /* Fits 4 fields to a row */
-
 }
 form.horizontal.split_five .form-field {
   width: 133px;
-  /* Fits 5 fields to a row */
-
 }
 form.horizontal fieldset {
   width: 100%;
@@ -4573,8 +4312,8 @@ form.horizontal fieldset {
 .static_page {
   float: left;
   width: 700px;
-  background-color: #FFF;
-  border: 1px solid #DDD;
+  background-color: #ffffff;
+  border: 1px solid #dddddd;
 }
 .static_page > form {
   margin-bottom: 0;
@@ -4603,7 +4342,7 @@ form.horizontal fieldset {
   vertical-align: top;
   width: 340px;
   padding-left: 10px;
-  border-left: 1px solid #DDD;
+  border-left: 1px solid #dddddd;
 }
 .workflow fieldset > table {
   margin-bottom: 0;
@@ -4622,8 +4361,7 @@ form.horizontal fieldset {
 .modal-body fieldset ul {
   width: 90%;
 }
-.modal-body fieldset .form-field input,
-.modal-body fieldset .form-field textarea {
+.modal-body fieldset .form-field input, .modal-body fieldset .form-field textarea {
   width: 298px;
 }
 .modal-body fieldset .form-field select {
@@ -4644,7 +4382,7 @@ form.horizontal fieldset {
   margin-top: 0;
   margin-right: 5px;
   font-size: 12px;
-  color: #666;
+  color: #666666;
   font-weight: normal;
   filter: alpha(opacity=100);
   -khtml-opacity: 1;
@@ -4652,7 +4390,7 @@ form.horizontal fieldset {
   opacity: 1;
 }
 .modal-footer a.close:hover {
-  color: #333;
+  color: #333333;
   text-decoration: underline;
 }
 .modal-body .help-block {
@@ -4679,22 +4417,18 @@ form.horizontal fieldset {
 #images #actions {
   width: 100px;
 }
-/*New List Patches*/
 .details-modal .modal-body {
   padding-bottom: 20px;
 }
 .form-inline {
   display: inline;
 }
-.form-inline input,
-.form-inline button,
-.form-inline a.btn {
+.form-inline input, .form-inline button, .form-inline a.btn {
   margin-left: 5px;
 }
 td.select {
   width: 10px;
 }
-/* Actions dropdown */
 td.actions_column {
   white-space: nowrap;
   padding: 10px;
@@ -4725,9 +4459,10 @@ td.actions_column .row_actions .hide {
 td.actions_column .btn-action-required {
   font-weight: bold;
 }
-/* Makes size consistent across browsers when mixing "btn-group" and "small" */
-.btn.hide,
-.btn-group .hide {
+.tab-content {
+  overflow: visible;
+}
+.btn.hide, .btn-group .hide {
   display: none;
 }
 .btn-group .dropdown-toggle:focus {
@@ -4735,8 +4470,6 @@ td.actions_column .btn-action-required {
 }
 .dropdown-menu button {
   line-height: 18px;
-  /* Matches rule for ".dropdown-menu a" in bootstrap */
-
   width: 100%;
 }
 .btn-group .dropdown-menu .btn {
@@ -4749,26 +4482,23 @@ td.actions_column .btn-action-required {
 .dropdown-menu .btn.btn-info,
 .dropdown-menu .btn.btn-info:hover {
   text-shadow: none;
-  /* remove default bootstrap shadowing from button text. */
-
 }
 .dropdown-menu li:hover {
   background: none;
 }
 .dropdown-menu li.divider:hover {
-  background-color: #E5E5E5;
+  background-color: #e5e5e5;
 }
 td.actions_column .dropdown-menu a:hover,
 td.actions_column .dropdown-menu button:hover {
-  background-color: #CDCDCD;
+  background-color: #cdcdcd;
 }
 .dropdown-menu .btn.btn-danger {
-  color: #C43C35;
+  color: #c43c35;
 }
 .dropdown-menu .btn.btn-danger:hover {
   background-color: #f6e0df;
 }
-/* Overrides for single-action rows (no dropdown) */
 tr td.actions_column ul.row_actions.single,
 tr:hover td.actions_column ul.row_actions.single,
 td.actions_column ul.row_actions.single,
@@ -4791,12 +4521,10 @@ td.actions_column ul.row_actions.single input:hover,
 td.actions_column ul.row_actions.single button:hover {
   color: black;
 }
-th.multi_select_column,
-td.multi_select_column {
+th.multi_select_column, td.multi_select_column {
   width: 25px;
 }
-th.multi_select_column,
-td.multi_select_column {
+th.multi_select_column, td.multi_select_column {
   text-align: center;
 }
 .table-fixed {
@@ -4834,7 +4562,7 @@ tr.terminated {
   border-bottom: none;
 }
 #instance_tabs li.active a {
-  background: #fff;
+  background: #ffffff;
   padding-bottom: 8px;
   margin-bottom: -5px;
 }
@@ -4842,7 +4570,7 @@ tr.terminated {
   margin-bottom: 0;
 }
 #main_content .tab-content {
-  border: 1px solid #ddd;
+  border: 1px solid #dddddd;
   border-top: 0 none;
   padding: 10px;
 }
@@ -4858,13 +4586,12 @@ tr.terminated {
 .tab_wrapper {
   padding-top: 50px;
 }
-/* Fix tooltip z-index to show above modals. Bootstrap bug 582*/
 .tooltip {
   z-index: 12000;
 }
 .volume_boot_disclosure {
   font-weight: bold;
-  color: #555;
+  color: #555555;
   cursor: pointer;
   background-image: url('/static/dashboard/img/right_droparrow.png');
   background-repeat: no-repeat;
@@ -4873,7 +4600,7 @@ tr.terminated {
 .volume_boot_disclosure.on {
   width: 334px;
   margin-bottom: 10px;
-  border-bottom: solid 1px #E1E1E1;
+  border-bottom: solid 1px #e1e1e1;
   background-image: url('/static/dashboard/img/drop_arrow.png');
 }
 form div.clearfix.error {
@@ -4883,12 +4610,18 @@ form div.clearfix.error {
   cursor: pointer;
 }
 .nav-tabs li.error a {
-  color: #B94A48;
+  color: #b94a48;
 }
 .nav-tabs li.error a:after {
   content: "*";
 }
-/* Region selector in header */
+.nav-tabs li.required a:after, form .form-field.required > label:after {
+  content: "*";
+  font-weight: bold;
+  line-height: 0;
+  padding-left: 4px;
+  color: #3290c0;
+}
 #region_selector {
   position: absolute;
   z-index: 9999;
@@ -4910,7 +4643,7 @@ form div.clearfix.error {
 #region_selector li a {
   padding: 3px 3px 3px 5px;
   display: none;
-  background: #E1E1E1;
+  background: #e1e1e1;
   margin-top: -10px;
 }
 #region_selector li:first-child p {
@@ -4923,7 +4656,7 @@ iframe {
   border: none;
 }
 .item_detail ul li label {
-  color: #000;
+  color: #000000;
   font-weight: bold;
   display: block;
   margin-top: 5px;
@@ -4931,19 +4664,18 @@ iframe {
 .progress_bar {
   height: 100%;
   width: 100%;
-  border: 1px solid #CCC;
-  background-color: #CCC;
+  border: 1px solid #cccccc;
+  background-color: #cccccc;
 }
-.progress_bar_fill,
-.progress_bar_selected {
+.progress_bar_fill, .progress_bar_selected {
   height: 100%;
   float: left;
 }
 .progress_bar_fill {
-  background-color: #666;
+  background-color: #666666;
 }
 .progress_bar_selected {
-  background-color: #4790AE;
+  background-color: #4790ae;
   width: 0;
 }
 .progress_bar_over {
@@ -4961,12 +4693,12 @@ iframe {
   margin-bottom: 8px;
 }
 .quota_title {
-  color: #999;
+  color: #999999;
   padding-bottom: 0;
   margin-bottom: 8px;
 }
 .quota_title strong {
-  color: #000;
+  color: #000000;
 }
 .quota_title strong span {
   font-weight: normal;
@@ -4980,7 +4712,7 @@ iframe {
   margin: -8px 0 8px;
 }
 div .flavor_table {
-  border: 1px solid #AAA;
+  border: 1px solid #aaaaaa;
   width: 100%;
   margin-bottom: 14px;
 }
@@ -5005,8 +4737,7 @@ div .flavor_table {
   float: left;
   margin-right: 50px;
 }
-.error .help-inline,
-.dynamic-error {
+.error .help-inline, .dynamic-error {
   background: #efdfdf;
   border: 1px solid #ead5d8;
   padding: 10px;
@@ -5022,36 +4753,36 @@ label.log-length {
 }
 .progress-success.bar {
   background-color: #5eb95e;
-  background-image: -moz-linear-gradient(top, #62c462, #57a957);
-  background-image: -ms-linear-gradient(top, #62c462, #57a957);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#57a957));
-  background-image: -webkit-linear-gradient(top, #62c462, #57a957);
-  background-image: -o-linear-gradient(top, #62c462, #57a957);
-  background-image: linear-gradient(top, #62c462, #57a957);
+  background-image: -moz-linear-gradient(top,#62c462,#57a957);
+  background-image: -ms-linear-gradient(top,#62c462,#57a957);
+  background-image: -webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#57a957));
+  background-image: -webkit-linear-gradient(top,#62c462,#57a957);
+  background-image: -o-linear-gradient(top,#62c462,#57a957);
+  background-image: linear-gradient(top,#62c462,#57a957);
   background-repeat: repeat-x;
-  filter: progid:dximagetransform.microsoft.gradient(startColorstr='#62c462', endColorstr='#57a957', GradientType=0);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#57a957', GradientType=0);
 }
 .progress_bar_fill.progress-warning.bar {
   background-color: #898989;
-  background-image: -moz-linear-gradient(top, #999999, #333333);
-  background-image: -ms-linear-gradient(top, #999999, #333333);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#999999), to(#333333));
-  background-image: -webkit-linear-gradient(top, #999999, #333333);
-  background-image: -o-linear-gradient(top, #999999, #333333);
-  background-image: linear-gradient(top, #999999, #333333);
+  background-image: -moz-linear-gradient(top,#999999,#333333);
+  background-image: -ms-linear-gradient(top,#999999,#333333);
+  background-image: -webkit-gradient(linear,0 0,0 100%,from(#999999),to(#333333));
+  background-image: -webkit-linear-gradient(top,#999999,#333333);
+  background-image: -o-linear-gradient(top,#999999,#333333);
+  background-image: linear-gradient(top,#999999,#333333);
   background-repeat: repeat-x;
-  filter: progid:dximagetransform.microsoft.gradient(startColorstr='#999999', endColorstr='#333333', GradientType=0);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#999999', endColorstr='#333333', GradientType=0);
 }
 .progress_bar_over.bar {
   background-color: #dd514c;
-  background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35);
-  background-image: -ms-linear-gradient(top, #ee5f5b, #c43c35);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#c43c35));
-  background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35);
-  background-image: -o-linear-gradient(top, #ee5f5b, #c43c35);
-  background-image: linear-gradient(top, #ee5f5b, #c43c35);
+  background-image: -moz-linear-gradient(top,#ee5f5b,#c43c35);
+  background-image: -ms-linear-gradient(top,#ee5f5b,#c43c35);
+  background-image: -webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#c43c35));
+  background-image: -webkit-linear-gradient(top,#ee5f5b,#c43c35);
+  background-image: -o-linear-gradient(top,#ee5f5b,#c43c35);
+  background-image: linear-gradient(top,#ee5f5b,#c43c35);
   background-repeat: repeat-x;
-  filter: progid:dximagetransform.microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#c43c35', GradientType=0);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#c43c35', GradientType=0);
 }
 .split_five div.control-group input[type="text"],
 .split_five div.control-group select {
@@ -5065,8 +4796,7 @@ label.log-length {
 .warning .warning-text {
   text-align: center;
 }
-.warning .warning-text h3,
-.warning .warning-text a {
+.warning .warning-text h3, .warning .warning-text a {
   display: inline-block;
 }
 .warning .warning-text h3 {
@@ -5080,107 +4810,93 @@ label.log-length {
 .no_split {
   margin-top: -60px;
 }
-/* Project Membership UI */
-.project_membership {
+.membership {
   min-height: 200px;
-  /* Buttons */
-
-  /* Header */
-
-  /* 'Fake table' body */
-
-  /* User lists */
-
-  /* List filtering */
-
-  /* Role dropdown menus */
-
 }
-.project_membership .btn-group {
+.membership .btn-group {
   margin-left: 0px;
   padding: 2px 10px 0 0;
   margin-bottom: 0px;
-  border: 1px solid #DDD;
+  border: 1px solid #dddddd;
   border-bottom: none;
 }
-.project_membership .btn-group .active {
+.membership .btn-group .active {
   float: right;
 }
-.project_membership a.btn-primary:hover {
-  background-color: #04C;
+.membership a.btn-primary:hover {
+  background-color: #0044cc;
 }
-.project_membership .help_text {
+.membership .help_text {
   margin-left: 15px;
   margin-bottom: 15px;
 }
-.project_membership .users_title {
-  color: #555;
+.membership .members_title {
+  color: #555555;
   font-weight: bold;
   padding-left: 10px;
   float: left;
 }
-.project_membership input {
+.membership input {
   background: url('/static/dashboard/img/search.png') no-repeat 105px 5px whiteSmoke;
 }
-.project_membership .fake_table_header {
-  background-color: #F1F1F1;
+.membership .fake_table_header {
+  background-color: #f1f1f1;
   width: 306px;
   height: 38px;
   padding-top: 15px;
-  border: 1px solid #DDD;
+  border: 1px solid #dddddd;
   border-bottom: none;
 }
-.project_membership .fake_table {
+.membership .fake_table {
   margin-left: 5px;
   width: 315px;
 }
-.project_membership .fake_table ul.no_results {
+.membership .fake_table ul.no_results {
   width: 298px;
 }
-.project_membership .fake_table ul.btn-group:hover {
-  background-color: #DDD;
+.membership .fake_table ul.btn-group:hover {
+  background-color: #dddddd;
 }
-.project_membership .left .fake_table_header {
+.membership .left .fake_table_header {
   width: 318px;
 }
-.project_membership .right .fake_table_header {
+.membership .right .fake_table_header {
   width: 318px;
   margin-left: -15px;
 }
-.project_membership .right .fake_table ul.no_results {
+.membership .right .fake_table ul.no_results {
   margin-left: -20px;
 }
-.project_membership .member {
+.membership .member {
   padding: 10px;
   text-align: left;
 }
-.project_membership .project_members {
+.membership .members {
   margin-left: -20px;
 }
-.project_membership .project_members ul.btn-group,
-.project_membership .available_users ul.btn-group {
+.membership .members ul.btn-group, .membership .available_members ul.btn-group {
   width: 308px;
 }
-.project_membership .dark_stripe {
-  background-color: #F9F9F9;
+.membership .dark_stripe {
+  background-color: #f9f9f9;
 }
-.project_membership .light_stripe {
+.membership .light_stripe {
   background-color: white;
 }
-.project_membership .last_stripe {
-  border-bottom: 1px solid #DDD;
+.membership .last_stripe {
+  border-bottom: 1px solid #dddddd;
 }
-.project_membership .filter {
+.membership .filter {
   width: 120px;
   margin: -5px 13px 15px 0px;
   float: right;
 }
-.project_membership .no_results {
-  border: 1px solid #DDD;
+.membership .no_results {
+  border: 1px solid #dddddd;
   padding: 10px;
   opacity: 0.5;
 }
-.project_membership .role_dropdown li {
+.membership .role_dropdown li {
   cursor: pointer;
   background: none;
   float: none;
@@ -5195,40 +4911,37 @@ label.log-length {
   box-shadow: none;
   z-index: 99999;
 }
-.project_membership .role_dropdown li i {
+.membership .role_dropdown li i {
   opacity: 0;
 }
-.project_membership .role_dropdown li:hover {
-  background-color: #CDCDCD;
+.membership .role_dropdown li:hover {
+  background-color: #cdcdcd;
 }
-.project_membership .role_dropdown li.selected i {
+.membership .role_dropdown li.selected i {
   opacity: 1;
 }
-.project_membership .dropdown-menu.role_dropdown {
+.membership .dropdown-menu.role_dropdown {
   right: 0;
   left: auto;
 }
-.project_membership .nav .role_options {
+.membership .nav .role_options {
   float: right;
   padding-right: 5px;
 }
-/* Inline user creation */
-.add_user_btn {
+.add_member_btn {
   display: inline;
 }
-#add_user {
+#add_member {
   clear: both;
 }
-.add_user {
+.add_member {
   float: right;
   margin-top: 10px;
   margin-right: 15px;
 }
-/* Fixes overflow on dropdowns in modal */
 .dropdown_fix {
   overflow: visible;
 }
-/* Replaces CPU hungry spin.js with animated gif */
 .loading_gif {
   width: 35px;
   height: 13px;
@@ -5243,7 +4956,6 @@ label.log-length {
   padding-right: 5px;
   float: left;
 }
-/* ResourceBrowser style */
 #browser_wrapper {
   width: 100%;
   min-width: 1000px;
@@ -5257,7 +4969,7 @@ label.log-length {
   clear: both;
   padding: 8px;
   border-top: 1px solid #dddddd;
-  background-color: #F1F1F1;
+  background-color: #f1f1f1;
   font-size: 11px;
   line-height: 14px;
 }
@@ -5267,12 +4979,10 @@ label.log-length {
 #browser_wrapper .tfoot span.navigation_table_count {
   width: 30%;
 }
-#browser_wrapper form,
-#browser_wrapper table {
+#browser_wrapper form, #browser_wrapper table {
   margin-bottom: 0;
 }
-#browser_wrapper .navigation_wrapper,
-#browser_wrapper .content_wrapper {
+#browser_wrapper .navigation_wrapper, #browser_wrapper .content_wrapper {
   position: relative;
   float: left;
 }
@@ -5293,7 +5003,7 @@ label.log-length {
   max-width: 200px;
 }
 #browser_wrapper div.navigation_wrapper tr.current_selected td {
-  background-color: #E9F5FA;
+  background-color: #e9f5fa;
 }
 #browser_wrapper div.navigation_wrapper tfoot td {
   border-right: 0 none;
@@ -5312,12 +5022,6 @@ label.log-length {
 }
 #browser_wrapper div.content_wrapper {
   width: 70%;
-  /* FIXME(Ke Wu): for now there are two breadcrumb tr in both table
-    * and this one in the content table is hidden. This hack is made to
-    * fix the alignment of two table, needs a better solution in the
-    * future.
-    */
-
 }
 #browser_wrapper div.content_wrapper div.table_wrapper,
 #browser_wrapper div.content_wrapper thead th.table_header {
@@ -5354,7 +5058,7 @@ label.log-length {
   background-color: #eeeeee;
 }
 #browser_wrapper table tbody tr:last-child td {
-  border-bottom: 1px solid #ddd;
+  border-bottom: 1px solid #dddddd;
   border-radius: 0;
 }
 #browser_wrapper table tbody tr.empty td {
@@ -5368,7 +5072,6 @@ label.log-length {
   padding: 6px;
   margin: 0 0 1px 0;
 }
-/* Styling for inline object creation buttons */
 .btn-inline {
   margin-bottom: 9px;
 }
@@ -5376,14 +5079,13 @@ label.log-length {
   width: 275px;
   margin-right: 2px;
 }
-/* Styling for draged network object */
 #networkListSortContainer {
   display: none;
 }
 .networklist {
   padding: 6px;
-  background: #eee;
-  border: 1px solid #ccc;
+  background: #eeeeee;
+  border: 1px solid #cccccc;
   min-height: 2em;
   width: auto !important;
   -webkit-box-sizing: border-box;
@@ -5395,18 +5097,18 @@ label.log-length {
   list-style-type: none;
   margin: 6px auto;
   padding: 3px;
-  background: #fff;
-  border: 1px solid #aaa;
+  background: #ffffff;
+  border: 1px solid #aaaaaa;
   line-height: 18px;
   border-radius: 3px;
   cursor: move;
   padding-left: 23px;
-  background: #ffffff url('/static/dashboard/img/drag.png') no-repeat 11px 50%;
+  background: white url('/static/dashboard/img/drag.png') no-repeat 11px 50%;
 }
 .networklist li em {
   font-size: 0.5em;
   line-height: 1em;
-  color: #999;
+  color: #999999;
   font-style: normal;
   margin-left: 0.8em;
 }
@@ -5432,10 +5134,10 @@ label.log-length {
   content: "+";
 }
 .networklist li.ui-sortable-helper {
-  background-color: #def;
+  background-color: #ddeeff;
 }
 .networklist li.ui-state-highlight {
-  border: 1px dotted #ccc;
+  border: 1px dotted #cccccc;
   background: #efefef;
   height: 0.5em;
 }
@@ -5460,12 +5162,12 @@ label.log-length {
   content: "-";
 }
 #selected_network li:before {
-  content: "nic:" counter(v1);
+  content: "nic:"counter(v1);
   counter-increment: v1;
   display: inline-block;
   margin-right: 5px;
-  background: #666;
-  color: #fff;
+  background: #666666;
+  color: #ffffff;
   font-size: 90%;
   padding: 0px 4px;
   vertical-align: middle;
@@ -5475,344 +5177,235 @@ label.log-length {
 }
 #selected_network.dragging li:before {
   content: "nic:";
-  background-color: rgba(102, 102, 102, 0.5);
+  background-color: rgba(102,102,102,0.5);
   padding-right: 10px;
 }
 #selected_network.dragging li.ui-state-highlight:before {
   content: "";
   background: transparent;
 }
-/* Styling for network topology */
-@-webkit-keyframes progress-bar-stripes {
-  from {
-    background-position: 20px 0;
-  }
-  to {
-    background-position: 0 0;
-  }
-}
-@-moz-keyframes progress-bar-stripes {
-  from {
-    background-position: 20px 0;
-  }
-  to {
-    background-position: 0 0;
-  }
-}
-@-ms-keyframes progress-bar-stripes {
-  from {
-    background-position: 20px 0;
-  }
-  to {
-    background-position: 0 0;
-  }
-}
-@-o-keyframes progress-bar-stripes {
-  from {
-    background-position: 0 0;
-  }
-  to {
-    background-position: 20px 0;
-  }
-}
-@keyframes progress-bar-stripes {
-  from {
-    background-position: 20px 0;
-  }
-  to {
-    background-position: 0 0;
-  }
-}
-#topologyCanvas {
+#topologyCanvasContainer {
   -webkit-box-sizing: border-box;
   -moz-box-sizing: border-box;
-  -ms-box-sizing: border-box;
-  -o-box-sizing: border-box;
   box-sizing: border-box;
   width: 100%;
-  height: 500px;
+  height: auto;
   padding: 25px;
   padding-left: 50px;
   background: #efefef;
+  min-height: 400px;
 }
-#topologyCanvas div.nodata {
+#topologyCanvasContainer div.nodata {
   font-size: 150%;
-  font-weight: bold;
   text-align: center;
-  padding-top: 200px;
+  padding-top: 150px;
   display: none;
 }
-div.networks {
-  height: 100%;
+#topologyCanvasContainer.noinfo div.nodata {
+  display: block;
 }
-div.network {
-  -webkit-box-sizing: border-box;
-  -moz-box-sizing: border-box;
-  -ms-box-sizing: border-box;
-  -o-box-sizing: border-box;
-  box-sizing: border-box;
+#topologyCanvasContainer.noinfo #topology_canvas {
+  display: none;
+}
+.topologyNavi {
+  overflow: hidden;
+  margin: 10px 0 20px;
+}
+.topologyNavi i {
+  margin-right: 3px;
+}
+.topologyNavi .toggleView {
   float: left;
-  width: 270px;
-  height: 100%;
-  position: relative;
 }
-div.network .nicname {
-  -webkit-box-sizing: border-box;
-  -moz-box-sizing: border-box;
-  -ms-box-sizing: border-box;
-  -o-box-sizing: border-box;
-  box-sizing: border-box;
-  height: 100%;
-  width: 17px;
-  border-radius: 17px;
-  z-index: 200;
-  color: #fff;
+.topologyNavi .launchButtons {
+  float: right;
+  text-align: right;
+}
+.topologyNavi .launchButtons a.btn {
+  margin-left: 10px;
+}
+.topologyBalloon {
+  display: none;
+  background: #ffffff;
   position: absolute;
-  left: -8px;
+  left: 100px;
+  top: 20px;
+  z-index: 600;
+  border-radius: 5px;
+  color: #333333;
+  min-width: 200px;
+  line-height: 1.2;
+  font-size: 11px;
+  -webkit-box-shadow: 0px 1px 6px #777777;
+  -moz-box-shadow: 0px 1px 6px #777777;
+  box-shadow: 0px 1px 6px #777777;
+}
+.topologyBalloon.on {
+  display: block;
+}
+.topologyBalloon .vnc_window {
+  margin-left: 10px;
+}
+.topologyBalloon .closeTopologyBalloon {
+  font-size: 16px;
+  line-height: 1;
+  display: block;
+  position: absolute;
+  font-weight: bold;
+  right: 6px;
   top: 0px;
   cursor: pointer;
+  padding: 3px;
+  color: #aaaaaa;
 }
-div.network .nicname:hover {
-  background-image: -webkit-linear-gradient(rgba(0, 0, 0, 0.15), rgba(0, 0, 0, 0.15));
-  background-image: -moz-linear-gradient(rgba(0, 0, 0, 0.15), rgba(0, 0, 0, 0.15));
-  background-image: -ms-linear-gradient(rgba(0, 0, 0, 0.15), rgba(0, 0, 0, 0.15));
-  background-image: -o-linear-gradient(rgba(0, 0, 0, 0.15), rgba(0, 0, 0, 0.15));
-  background-image: linear-gradient(rgba(0, 0, 0, 0.15), rgba(0, 0, 0, 0.15));
-  background-size: 10px 10px;
+.topologyBalloon .closeTopologyBalloon:hover {
+  color: #777777;
+  text-decoration: none;
 }
-div.network .nicname.nourl {
-  cursor: auto;
+.topologyBalloon .contentBody {
+  padding: 8px 8px 0;
 }
-div.network .nicname.nourl:hover {
-  background-image: none;
+.topologyBalloon span.active:before, .topologyBalloon span.down:before {
+  content: "";
+  width: 9px;
+  height: 9px;
+  display: inline-block;
+  background: #0d925b;
+  margin-right: 3px;
+  border-radius: 10px;
+  vertical-align: middle;
+}
+.topologyBalloon span.down:before {
+  background: #e64b41;
+}
+.topologyBalloon .footer {
+  background: #efefef;
+  border-top: 1px solid #d9d9d9;
+  padding: 8px;
+  border-radius: 0px 0px 7px 7px;
+}
+.topologyBalloon .footer .footerInner {
+  display: table;
+  width: 100%;
+}
+.topologyBalloon .footer .cell {
+  display: table-cell;
+  padding-right: 10px;
 }
-div.network .nicname h3 {
+.topologyBalloon .footer .link {
   font-size: 12px;
-  line-height: 1;
-  position: relative;
-  font-weight: normal;
-  top: 55%;
-  color: #fff;
-  left: -1px;
-  letter-spacing: 0.2em;
-  -webkit-transform: rotate(-90deg);
-  -moz-transform: rotate(-90deg);
-  -ms-transform: rotate(-90deg);
-  -o-transform: rotate(-90deg);
-  transform: rotate(-90deg);
-  white-space: nowrap;
-  text-shadow: 0px 0px 5px #000;
 }
-div.network .nicname span.ip {
-  position: absolute;
-  bottom: -10px;
-  left: 20px;
-  color: #000;
-  display: block;
-  font-weight: normal;
-  font-size: 90%;
-  letter-spacing: 0.2em;
-  -webkit-transform: rotate(-90deg);
-  -moz-transform: rotate(-90deg);
-  -ms-transform: rotate(-90deg);
-  -o-transform: rotate(-90deg);
-  transform: rotate(-90deg);
-  -webkit-transform-origin: 0% 0%;
-  -moz-transform-origin: 0% 0%;
-  -ms-transform-origin: 0% 0%;
-  -o-transform-origin: 0% 0%;
-  transform-origin: 0% 0%;
-  white-space: nowrap;
-  text-shadow: 0px 0px 2px #fff,0px 0px 2px #fff;
+.topologyBalloon .footer .delete {
+  padding-right: 0;
+  text-align: right;
 }
-div.network .router,
-div.network .server,
-div.network .device {
-  -webkit-box-sizing: border-box;
-  -moz-box-sizing: border-box;
-  -ms-box-sizing: border-box;
-  -o-box-sizing: border-box;
-  box-sizing: border-box;
-  cursor: pointer;
-  width: 90px;
-  border: 3px solid #444;
-  position: absolute;
-  top: 30px;
-  left: 90px;
-  color: #fff;
-  padding: 0 3px;
-  background: #666;
-  margin-bottom: 20px;
-  border-radius: 8px;
+.topologyBalloon .footer .delete .btn:before {
+  content: "Delete ";
 }
-div.network .router:before,
-div.network .server:before,
-div.network .device:before {
-  content: "";
-  width: 20px;
-  height: 20px;
-  border: 2px solid #444;
-  line-height: 1.2;
-  position: absolute;
-  border-radius: 20px;
-  top: -10px;
-  left: -10px;
-  background: #ffffff url('/static/dashboard/img/router.png') no-repeat center center;
-  background-size: 16px 16px;
-}
-div.network .router:after,
-div.network .server:after,
-div.network .device:after {
-  content: "";
-  width: 100%;
-  line-height: 1.2;
-  position: absolute;
-  text-align: center;
-  border-radius: 0;
-  background: #444;
-  color: #fff;
-  font-size: 11px;
-  height: 1.5em;
-  bottom: 0px;
-  left: 0px;
+.topologyBalloon .footer .delete .btn.deleting:before {
+  content: "Deleting ";
 }
-div.network .router span.devicename,
-div.network .server span.devicename,
-div.network .device span.devicename {
-  position: absolute;
-  color: #fff;
-  bottom: 0px;
+.topologyBalloon .footer .delete .btn.instance:before {
+  content: "Terminate ";
+}
+.topologyBalloon .footer .delete .btn.instance.deleting:before {
+  content: "Terminating ";
+}
+.topologyBalloon table.detaiInfoTable {
+  margin-bottom: 5px;
+}
+.topologyBalloon table.detaiInfoTable caption {
+  text-align: left;
   font-size: 12px;
-  line-height: 14px;
-  width: 100%;
-  text-align: center;
-  z-index: 300;
-  left: -2px;
+  font-weight: bold;
+  margin-bottom: 0px;
 }
-div.network .router span.name,
-div.network .server span.name,
-div.network .device span.name {
-  overflow: hidden;
+.topologyBalloon table.detaiInfoTable th, .topologyBalloon table.detaiInfoTable td {
+  text-align: left;
+  vertical-align: middle;
+  padding-bottom: 3px;
+  background: transparent;
+}
+.topologyBalloon table.detaiInfoTable th {
+  color: #999999;
+  padding-right: 8px;
+  width: 80px;
+}
+.topologyBalloon table.detaiInfoTable th span {
+  vertical-align: middle;
+  width: 80px;
   white-space: nowrap;
+  overflow: hidden;
   text-overflow: ellipsis;
-  display: block;
-  font-size: 12px;
-  position: relative;
-  z-index: 10;
-  text-align: center;
-  top: 4px;
-  padding: 0 3px;
+  display: inline-block;
 }
-div.network .router div.port,
-div.network .server div.port,
-div.network .device div.port {
+.topologyBalloon table.detaiInfoTable th.device {
   text-align: right;
-  min-width: 90px;
-  height: 10px;
-  font: 0px/0px sans-serif;
-  position: absolute;
-  left: -91px;
-  top: 8px;
-  background-color: #37a9e3;
-  background-image: none;
-  -webkit-background-size: 20px 20px;
-  -moz-background-size: 20px 20px;
-  -o-background-size: 20px 20px;
-  background-size: 20px 20px;
-  z-index: 100;
-}
-div.network .router div.port span.ip,
-div.network .server div.port span.ip,
-div.network .device div.port span.ip {
-  -webkit-box-sizing: border-box;
-  -moz-box-sizing: border-box;
-  -ms-box-sizing: border-box;
-  -o-box-sizing: border-box;
-  box-sizing: border-box;
-  color: #333;
-  font-size: 9px;
-  line-height: 1;
-  text-shadow: 0px -1px #ffffff;
-  position: relative;
-  width: 90px;
-  display: inline-block;
-  padding-right: 8px;
-  padding-left: 8px;
-  word-wrap: break-word;
-  word-break: break-all;
 }
-div.network .router div.port.right,
-div.network .server div.port.right,
-div.network .device div.port.right {
-  left: auto;
-  right: -92px;
-  width: 92px;
-  text-align: left;
+.topologyBalloon table.detaiInfoTable td {
+  padding-right: 5px;
+  white-space: nowrap;
 }
-div.network .router:hover,
-div.network .server:hover,
-div.network .device:hover {
-  border-color: #222;
+.topologyBalloon table.detaiInfoTable td.delete {
+  padding-right: 0;
+  text-align: right;
 }
-div.network .router:hover div.port,
-div.network .server:hover div.port,
-div.network .device:hover div.port {
-  cursor: pointer;
-  background-color: #2688c0;
-  -webkit-animation: progress-bar-stripes 1s linear infinite;
-  -moz-animation: progress-bar-stripes 1s linear infinite;
-  -ms-animation: progress-bar-stripes 1s linear infinite;
-  -o-animation: progress-bar-stripes 1s linear infinite;
-  animation: progress-bar-stripes 1s linear infinite;
-}
-div.network .router:hover div.port:hover,
-div.network .server:hover div.port:hover,
-div.network .device:hover div.port:hover {
-  -webkit-animation: progress-bar-stripes 0.3s linear infinite;
-  -moz-animation: progress-bar-stripes 0.3s linear infinite;
-  -ms-animation: progress-bar-stripes 0.3s linear infinite;
-  -o-animation: progress-bar-stripes 0.3s linear infinite;
-  animation: progress-bar-stripes 0.3s linear infinite;
-}
-div.network .router:hover div.port.nourl,
-div.network .server:hover div.port.nourl,
-div.network .device:hover div.port.nourl {
-  cursor: auto;
-  background-image: none;
+.topologyBalloon table.detaiInfoTable .btn {
+  line-height: 1.4;
 }
-div.network .router:hover div.port.nourl:hover,
-div.network .server:hover div.port.nourl:hover,
-div.network .device:hover div.port.nourl:hover {
-  background-image: none;
+.topologyBalloon table.detaiInfoTable .btn:before {
+  content: "Delete ";
 }
-div.network .router:hover:after,
-div.network .server:hover:after,
-div.network .device:hover:after {
-  background-color: #222;
-  border-color: #222;
+.topologyBalloon table.detaiInfoTable .btn.deleting:before {
+  content: "Deleting ";
 }
-div.network .device {
-  border: none;
-  background: transparent;
+.topologyBalloon:before {
+  border-top: 7px solid transparent;
+  border-bottom: 7px solid transparent;
+  border-right: 9px solid #bbbbbb;
+  display: block;
+  position: absolute;
+  top: 30px;
+  left: -9px;
+  width: 0;
+  height: 0;
+  content: "";
 }
-div.network .server {
-  background: #fff;
-  color: #333;
+.topologyBalloon:after {
+  border-top: 6px solid transparent;
+  border-bottom: 6px solid transparent;
+  border-right: 8px solid #ffffff;
+  display: block;
+  position: absolute;
+  top: 31px;
+  left: -8px;
+  width: 0;
+  height: 0;
+  content: "";
 }
-div.network .server:before {
-  background: #ffffff url('/static/dashboard/img/server.png') no-repeat center center;
-  background-size: 14px 14px;
+.topologyBalloon.leftPosition:before {
+  border-right: none;
+  border-left: 9px solid #bbbbbb;
+  right: -9px;
+  top: 30px;
+  left: auto;
 }
-.launchButtons {
-  text-align: right;
-  margin: 10px 0px 15px 10px;
+.topologyBalloon.leftPosition:after {
+  border-right: none;
+  border-left: 8px solid #ffffff;
+  right: -8px;
+  top: 31px;
+  left: auto;
 }
-.launchButtons a.btn {
-  margin-left: 10px;
+#topologyMessages {
+  width: 1px;
+  height: 1px;
+  visibility: hidden;
+  position: absolute;
+  top: -100px;
 }
-/**** Resource Topology CSS ****/
 .link {
-  stroke: #000;
+  stroke: #999999;
   stroke-width: 1.5px;
 }
 .node {
@@ -5875,3 +5468,518 @@ div.network .server:before {
 #info_box .error {
   color: darkred;
 }
+#ceilometer-stats .form-horizontal .control-label {
+  width: auto;
+}
+#ceilometer-stats .form-horizontal .controls {
+  float: left;
+  margin-left: 0;
+}
+#ceilometer-stats .form-horizontal .control-group {
+  float: left;
+  margin-right: 20px;
+}
+#ceilometer-stats .form-horizontal .btn {
+  float: left;
+  margin-right: 20px;
+  margin-bottom: 18px;
+}
+#ruleListSortContainer {
+  display: none;
+}
+.rulelist {
+  padding: 6px;
+  background: #eeeeee;
+  border: 1px solid #cccccc;
+  min-height: 2em;
+  width: auto !important;
+  -webkit-box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+}
+.rulelist li {
+  width: 226px;
+  list-style-type: none;
+  margin: 6px auto;
+  padding: 3px;
+  background: #ffffff;
+  border: 1px solid #aaaaaa;
+  line-height: 18px;
+  border-radius: 3px;
+  cursor: move;
+  padding-left: 23px;
+  background: white url('/static/dashboard/img/drag.png') no-repeat 11px 50%;
+}
+.rulelist li em {
+  font-size: 0.5em;
+  line-height: 1em;
+  color: #999999;
+  font-style: normal;
+  margin-left: 0.8em;
+}
+.rulelist li i {
+  margin-right: 5px;
+  vertical-align: middle;
+}
+.rulelist li a.btn {
+  -webkit-box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  font-size: 11px;
+  line-height: 12px;
+  padding: 2px 5px 3px;
+  margin-right: 1px;
+  width: 18px;
+  text-align: center;
+  right: 5px;
+  vertical-align: middle;
+  float: right;
+}
+.rulelist li a.btn:before {
+  content: "+";
+}
+.rulelist li.ui-sortable-helper {
+  background-color: #ddeeff;
+}
+.rulelist li.ui-state-highlight {
+  border: 1px dotted #cccccc;
+  background: #efefef;
+  height: 0.5em;
+}
+.rulelist li:after {
+  visibility: hidden;
+  display: block;
+  font-size: 0;
+  content: " ";
+  clear: both;
+  height: 0;
+}
+#selected_rule {
+  margin-bottom: 1.5em;
+  counter-reset: v1 0;
+  background: #edf9ff;
+  border: 1px solid #c0d9e4;
+}
+#selected_rule li {
+  position: relative;
+}
+#selected_rule li a.btn:before {
+  content: "-";
+}
+#selected_rule li:before {
+  content: "rule:"counter(v1);
+  counter-increment: v1;
+  display: inline-block;
+  margin-right: 5px;
+  background: #666666;
+  color: #ffffff;
+  font-size: 90%;
+  padding: 0px 4px;
+  vertical-align: middle;
+  border-radius: 2px;
+  position: absolute;
+  left: -2em;
+}
+#selected_rule.dragging li:before {
+  content: "rule:";
+  background-color: rgba(102,102,102,0.5);
+  padding-right: 10px;
+}
+#selected_rule.dragging li.ui-state-highlight:before {
+  content: "";
+  background: transparent;
+}
+
+.rickshaw_graph .detail {
+    pointer-events: none;
+    position: absolute;
+    top: 0;
+    z-index: 2;
+    background: rgba(0, 0, 0, 0.1);
+    bottom: 0;
+    width: 1px;
+    transition: opacity 0.25s linear;
+    -moz-transition: opacity 0.25s linear;
+    -o-transition: opacity 0.25s linear;
+    -webkit-transition: opacity 0.25s linear;
+}
+.rickshaw_graph .detail.inactive {
+    opacity: 0;
+}
+.rickshaw_graph .detail .item.active {
+    opacity: 1;
+}
+.rickshaw_graph .detail .x_label {
+    font-family: Arial, sans-serif;
+    border-radius: 3px;
+    padding: 6px;
+    opacity: 0.5;
+    border: 1px solid #e0e0e0;
+    font-size: 12px;
+    position: absolute;
+    background: white;
+    white-space: nowrap;
+}
+.rickshaw_graph .detail .item {
+    position: absolute;
+    z-index: 2;
+    border-radius: 3px;
+    padding: 0.25em;
+    font-size: 12px;
+    font-family: Arial, sans-serif;
+    opacity: 0;
+    background: rgba(0, 0, 0, 0.4);
+    color: white;
+    border: 1px solid rgba(0, 0, 0, 0.4);
+    margin-left: 1em;
+    margin-top: -1em;
+    white-space: nowrap;
+}
+.rickshaw_graph .detail .item.active {
+    opacity: 1;
+    background: rgba(0, 0, 0, 0.8);
+}
+.rickshaw_graph .detail .item:before {
+    content: "\25c2";
+    position: absolute;
+    left: -0.5em;
+    color: rgba(0, 0, 0, 0.7);
+    width: 0;
+}
+.rickshaw_graph .detail .dot {
+    width: 4px;
+    height: 4px;
+    margin-left: -4px;
+    margin-top: -3px;
+    border-radius: 5px;
+    position: absolute;
+    box-shadow: 0 0 2px rgba(0, 0, 0, 0.6);
+    background: white;
+    border-width: 2px;
+    border-style: solid;
+    display: none;
+    background-clip: padding-box;
+}
+.rickshaw_graph .detail .dot.active {
+    display: block;
+}
+/* graph */
+
+.rickshaw_graph {
+    position: relative;
+}
+.rickshaw_graph svg {
+    display: block;
+    overflow: hidden;
+}
+
+/* ticks */
+
+.rickshaw_graph .x_tick {
+    position: absolute;
+    top: 0;
+    bottom: 0;
+    width: 0px;
+    border-left: 1px dotted rgba(0, 0, 0, 0.2);
+    pointer-events: none;
+}
+.rickshaw_graph .x_tick .title {
+    position: absolute;
+    font-size: 12px;
+    font-family: Arial, sans-serif;
+    opacity: 0.5;
+    white-space: nowrap;
+    margin-left: 3px;
+    bottom: 1px;
+}
+
+/* annotations */
+
+.rickshaw_annotation_timeline {
+    height: 1px;
+    border-top: 1px solid #e0e0e0;
+    margin-top: 10px;
+    position: relative;
+}
+.rickshaw_annotation_timeline .annotation {
+    position: absolute;
+    height: 6px;
+    width: 6px;
+    margin-left: -2px;
+    top: -3px;
+    border-radius: 5px;
+    background-color: rgba(0, 0, 0, 0.25);
+}
+.rickshaw_graph .annotation_line {
+    position: absolute;
+    top: 0;
+    bottom: -6px;
+    width: 0px;
+    border-left: 2px solid rgba(0, 0, 0, 0.3);
+    display: none;
+}
+.rickshaw_graph .annotation_line.active {
+    display: block;
+}
+
+.rickshaw_graph .annotation_range {
+        background: rgba(0, 0, 0, 0.1);
+        display: none;
+        position: absolute;
+        top: 0;
+        bottom: -6px;
+}
+.rickshaw_graph .annotation_range.active {
+        display: block;
+}
+.rickshaw_graph .annotation_range.active.offscreen {
+        display: none;
+}
+
+.rickshaw_annotation_timeline .annotation .content {
+    background: white;
+    color: black;
+    opacity: 0.9;
+    padding: 5px 5px;
+    box-shadow: 0 0 2px rgba(0, 0, 0, 0.8);
+    border-radius: 3px;
+    position: relative;
+    z-index: 20;
+    font-size: 12px;
+    padding: 6px 8px 8px;
+    top: 18px;
+    left: -11px;
+    width: 160px;
+    display: none;
+    cursor: pointer;
+}
+.rickshaw_annotation_timeline .annotation .content:before {
+    content: "\25b2";
+    position: absolute;
+    top: -11px;
+    color: white;
+    text-shadow: 0 -1px 1px rgba(0, 0, 0, 0.8);
+}
+.rickshaw_annotation_timeline .annotation.active,
+.rickshaw_annotation_timeline .annotation:hover {
+    background-color: rgba(0, 0, 0, 0.8);
+    cursor: none;
+}
+.rickshaw_annotation_timeline .annotation .content:hover {
+    z-index: 50;
+}
+.rickshaw_annotation_timeline .annotation.active .content {
+    display: block;
+}
+.rickshaw_annotation_timeline .annotation:hover .content {
+    display: block;
+    z-index: 50;
+}
+.rickshaw_graph .y_axis,
+.rickshaw_graph  .x_axis_d3 {
+    fill: none;
+}
+.rickshaw_graph .y_ticks .tick,
+.rickshaw_graph .x_ticks_d3 .tick {
+    stroke: rgba(0, 0, 0, 0.16);
+    stroke-width: 2px;
+    shape-rendering: crisp-edges;
+    pointer-events: none;
+}
+.rickshaw_graph .y_grid .tick,
+.rickshaw_graph .x_grid_d3 .tick {
+    z-index: -1;
+    stroke: rgba(0, 0, 0, 0.20);
+    stroke-width: 1px;
+    stroke-dasharray: 1 1;
+}
+.rickshaw_graph .y_grid path,
+.rickshaw_graph .x_grid_d3 path  {
+    fill: none;
+    stroke: none;
+}
+.rickshaw_graph .y_ticks path,
+.rickshaw_graph .x_ticks_d3 path {
+    fill: none;
+    stroke: #808080;
+}
+.rickshaw_graph .y_ticks text,
+.rickshaw_graph .x_ticks_d3 text {
+    opacity: 0.5;
+    font-size: 12px;
+    pointer-events: none;
+}
+.rickshaw_graph .x_tick.glow .title,
+.rickshaw_graph .y_ticks.glow text {
+    fill: black;
+    color: black;
+    text-shadow:
+        -1px 1px 0 rgba(255, 255, 255, 0.1),
+        1px -1px 0 rgba(255, 255, 255, 0.1),
+        1px 1px 0 rgba(255, 255, 255, 0.1),
+        0px 1px 0 rgba(255, 255, 255, 0.1),
+        0px -1px 0 rgba(255, 255, 255, 0.1),
+        1px 0px 0 rgba(255, 255, 255, 0.1),
+        -1px 0px 0 rgba(255, 255, 255, 0.1),
+        -1px -1px 0 rgba(255, 255, 255, 0.1);
+}
+.rickshaw_graph .x_tick.inverse .title,
+.rickshaw_graph .y_ticks.inverse text {
+    fill: white;
+    color: white;
+    text-shadow:
+        -1px 1px 0 rgba(0, 0, 0, 0.8),
+        1px -1px 0 rgba(0, 0, 0, 0.8),
+        1px 1px 0 rgba(0, 0, 0, 0.8),
+        0px 1px 0 rgba(0, 0, 0, 0.8),
+        0px -1px 0 rgba(0, 0, 0, 0.8),
+        1px 0px 0 rgba(0, 0, 0, 0.8),
+        -1px 0px 0 rgba(0, 0, 0, 0.8),
+        -1px -1px 0 rgba(0, 0, 0, 0.8);
+}
+.rickshaw_legend {
+    font-family: Arial;
+    font-size: 12px;
+    color: white;
+    background: #404040;
+    display: inline-block;
+    padding: 12px 5px;
+    border-radius: 2px;
+    position: relative;
+}
+.rickshaw_legend:hover {
+    z-index: 10;
+}
+.rickshaw_legend .swatch {
+    width: 10px;
+    height: 10px;
+    border: 1px solid rgba(0, 0, 0, 0.2);
+}
+.rickshaw_legend .line {
+    clear: both;
+    line-height: 140%;
+    padding-right: 15px;
+}
+.rickshaw_legend .line .swatch {
+    display: inline-block;
+    margin-right: 3px;
+    border-radius: 2px;
+}
+.rickshaw_legend .label {
+    margin: 0;
+    white-space: nowrap;
+    display: inline;
+    font-size: inherit;
+    background-color: transparent;
+    color: inherit;
+    font-weight: normal;
+    line-height: normal;
+    padding: 0px;
+    text-shadow: none;
+}
+.rickshaw_legend .action:hover {
+    opacity: 0.6;
+}
+.rickshaw_legend .action {
+    margin-right: 0.2em;
+    font-size: 10px;
+    opacity: 0.2;
+    cursor: pointer;
+    font-size: 14px;
+}
+.rickshaw_legend .line.disabled {
+    opacity: 0.4;
+}
+.rickshaw_legend ul {
+    list-style-type: none;
+    margin: 0;
+    padding: 0;
+    margin: 2px;
+    cursor: pointer;
+}
+.rickshaw_legend li {
+    padding: 0 0 0 2px;
+    min-width: 80px;
+    white-space: nowrap;
+}
+.rickshaw_legend li:hover {
+    background: rgba(255, 255, 255, 0.08);
+    border-radius: 3px;
+}
+.rickshaw_legend li:active {
+    background: rgba(255, 255, 255, 0.2);
+    border-radius: 3px;
+}
+
+.chart_container {
+  position: relative;
+  min-height: 300px;
+  min-width: 400px;
+}
+.chart_container .chart {
+  position: relative;
+  min-height: 300px;
+  min-width: 400px;
+}
+.chart_container .chart .detail .x_label {
+  display: none;
+}
+.chart_container .chart .detail .item {
+  line-height: 1.4;
+  padding: 0.5em;
+}
+.chart_container .chart .detail .date {
+  color: #a0a0a0;
+}
+.chart_container .chart .modal-backdrop {
+  position: absolute;
+  opacity: 0.5;
+  top: 0;
+  left: 0;
+  min-height: 300px;
+  min-width: 400px;
+}
+.chart_container .chart svg {
+  padding: 0 0 5px 0;
+}
+.chart_container .detail_swatch {
+  float: right;
+  display: inline-block;
+  width: 10px;
+  height: 10px;
+  margin: 0 4px 0 0;
+}
+.legend_container {
+  min-width: 90px;
+  margin-left: 20px;
+}
+.legend_container .swatch {
+  float: right;
+  display: inline-block;
+  width: 10px;
+  height: 10px;
+  margin: 0 4px 0 0;
+}
+.legend_container .modal-backdrop {
+  position: absolute;
+  opacity: 0.5;
+  top: 0;
+  left: 0;
+  min-width: 90px;
+}
+.legend_container .rickshaw_legend.disabled {
+  padding: 0;
+}
+.spinner_wrapper {
+  position: absolute;
+  top: 40%;
+  left: 40%;
+}
+.rickshaw_legend {
+  background: white;
+  color: #404040;
+}
+.rickshaw_legend .action {
+  text-decoration: none;
+  color: #000000;
+}
similarity index 77%
rename from debian/static/openstack-dashboard/js/7d82b0a14954.js
rename to debian/static/openstack-dashboard/js/271a130e6a31.js
index ced03d02bf405ccbef6e4874f23a1079e3e6be64..dd375e9b3188ca67b70c8485fc0d82e50c4cb23f 100644 (file)
@@ -193,18 +193,22 @@ Hogan.parse=function(tokens,text,options){options=options||{};return buildTree(t
 t=this.generate(this.parse(this.scan(text,options.delimiters),text,options),text,options);return this.cache[key]=t;};})(typeof exports!=='undefined'?exports:Hogan);horizon.ajax={_queue:[],_active:[],get_messages:function(request){return request.getResponseHeader("X-Horizon-Messages");},queue:function(opts){var complete=opts.complete,active=horizon.ajax._active;opts.complete=function(){var index=$.inArray(request,active);if(index>-1){active.splice(index,1);}
 horizon.ajax.next();if(complete){complete.apply(this,arguments);}};function request(){return $.ajax(opts);}
 horizon.ajax._queue.push(request);horizon.ajax.next();},next:function(){var queue=horizon.ajax._queue,limit=horizon.conf.ajax.queue_limit,request;if(queue.length&&(!limit||horizon.ajax._active.length<limit)){request=queue.pop();horizon.ajax._active.push(request);return request();}}};horizon.cookies={read:function(cookie_name){var cookie=$.cookie("horizon."+cookie_name);if(cookie===null){return{};}
-return $.parseJSON(cookie);},write:function(cookie_name,data){$.cookie("horizon."+cookie_name,JSON.stringify(data),{path:"/"});},update:function(cookie_name,key,value){var data=horizon.cookies.read("horizon."+cookie_name);data[key]=value;horizon.cookies.write(cookie_name,data);},remove:function(cookie_name){$.cookie("horizon."+cookie_name,null);}};horizon.forms={handle_snapshot_source:function(){$("div.table_wrapper, #modal_wrapper").on("change","select#id_snapshot_source",function(evt){var $option=$(this).find("option:selected");var $form=$(this).closest('form');var $volName=$form.find('input#id_name');$volName.val($option.data("display_name"));var $volSize=$form.find('input#id_size');$volSize.val($option.data("size"));});},handle_image_source:function(){$("div.table_wrapper, #modal_wrapper").on("change","select#id_image_source",function(evt){var $option=$(this).find("option:selected");var $form=$(this).closest('form');var $volName=$form.find('input#id_name');$volName.val($option.data("name"));var $volSize=$form.find('input#id_size');$volSize.val($option.data("size"));});}};horizon.forms.bind_add_item_handlers=function(el){var $selects=$(el).find('select[data-add-item-url]');$selects.each(function(){var $this=$(this);$button=$("<a href='"+$this.attr("data-add-item-url")+"' "+"data-add-to-field='"+$this.attr("id")+"' "+"class='btn ajax-add ajax-modal btn-inline'>+</a>");$this.after($button);});};horizon.forms.prevent_multiple_submission=function(el){var $form=$(el).find("form");$form.submit(function(){var button=$(this).find('[type="submit"]');if(button.hasClass('btn-primary')&&!button.hasClass('always-enabled')){$(this).submit(function(){return false;});button.removeClass('primary').addClass('disabled');button.attr('disabled','disabled');}
-return true;});};horizon.forms.init_examples=function(el){var $el=$(el);$el.find("#id_description").attr("placeholder",gettext("Additional information here..."));$el.find("#create_image_form input#id_copy_from").attr("placeholder","http://example.com/image.iso");$el.find(".table_search input").attr("placeholder",gettext("Filter"));$el.find("#attach_volume_form #id_device").attr("placeholder","/dev/vdc");};horizon.addInitFunction(function(){horizon.forms.prevent_multiple_submission($('body'));horizon.modals.addModalInitFunction(horizon.forms.prevent_multiple_submission);horizon.forms.bind_add_item_handlers($("body"));horizon.modals.addModalInitFunction(horizon.forms.bind_add_item_handlers);horizon.forms.init_examples($("body"));horizon.modals.addModalInitFunction(horizon.forms.init_examples);horizon.forms.handle_snapshot_source();horizon.forms.handle_image_source();$("body").on("click","form button.btn-danger",function(evt){horizon.datatables.confirm(this);evt.preventDefault();});$(document).on("change",'select.switchable',function(evt){var $fieldset=$(evt.target).closest('fieldset'),$switchables=$fieldset.find('.switchable');$switchables.each(function(index,switchable){var $switchable=$(switchable),slug=$switchable.data('slug'),visible=$switchable.is(':visible'),val=$switchable.val();$fieldset.find('.switched[data-switch-on*="'+slug+'"]').each(function(index,input){var $input=$(input),data=$input.data(slug+"-"+val);if(typeof data==="undefined"||!visible){$input.closest('.form-field').hide();}else{$('label[for='+$input.attr('id')+']').html(data);$input.closest('.form-field').show();}});});});$('select.switchable').trigger('change');horizon.modals.addModalInitFunction(function(modal){$(modal).find('select.switchable').trigger('change');});function update_volume_source_displayed_fields(field){var $this=$(field),base_type=$this.val();$this.find("option").each(function(){if(this.value!=base_type){$("#id_"+this.value).closest(".control-group").hide();}else{$("#id_"+this.value).closest(".control-group").show();}});}
-$(document).on('change','#id_volume_source_type',function(evt){update_volume_source_displayed_fields(this);});$('#id_volume_source_type').change();horizon.modals.addModalInitFunction(function(modal){$(modal).find("#id_volume_source_type").change();});$(document).tooltip({selector:"div.form-field :input:not(:checkbox)",placement:function(tip,input){return $(input).closest("form[class*='split']").length?"bottom":'right';},trigger:'focus',title:function(){return $(this).closest('div.form-field').children('.help-block').text();}});$(document).on('mousedown keydown','.form-field select',function(evt){$(this).tooltip('hide');});$('span.help-block').hide();});horizon.instances={user_decided_length:false,networks_selected:[],networks_available:[],getConsoleLog:function(via_user_submit){var form_element=$("#tail_length"),data;if(!via_user_submit){via_user_submit=false;}
+return $.parseJSON(cookie);},write:function(cookie_name,data){$.cookie("horizon."+cookie_name,JSON.stringify(data),{path:"/"});},update:function(cookie_name,key,value){var data=horizon.cookies.read("horizon."+cookie_name);data[key]=value;horizon.cookies.write(cookie_name,data);},remove:function(cookie_name){$.cookie("horizon."+cookie_name,null);}};horizon.forms={handle_snapshot_source:function(){$("div.table_wrapper, #modal_wrapper").on("change","select#id_snapshot_source",function(evt){var $option=$(this).find("option:selected");var $form=$(this).closest('form');var $volName=$form.find('input#id_name');if(_.isEmpty($volName.val())){$volName.val($option.data("display_name"));}
+var $volSize=$form.find('input#id_size');var volSize=parseInt($volSize.val(),10)||-1;var dataSize=parseInt($option.data("size"),10)||-1;if(volSize<dataSize){$volSize.val(dataSize);}});},handle_image_source:function(){$("div.table_wrapper, #modal_wrapper").on("change","select#id_image_source",function(evt){var $option=$(this).find("option:selected");var $form=$(this).closest('form');var $volName=$form.find('input#id_name');if(_.isEmpty($volName.val())){$volName.val($option.data("name"));}
+var $volSize=$form.find('input#id_size');var volSize=parseInt($volSize.val(),10)||-1;var dataSize=parseInt($option.data("size"),10)||-1;if(volSize<dataSize){$volSize.val(dataSize);}});},datepicker:function(){var startDate=$('input#id_start').datepicker().on('changeDate',function(ev){if(ev.date.valueOf()>endDate.date.valueOf()){var newDate=new Date(ev.date)
+newDate.setDate(newDate.getDate()+1);endDate.setValue(newDate);$('input#id_end')[0].focus();}
+startDate.hide();}).data('datepicker');var endDate=$('input#id_end').datepicker({onRender:function(date){return date.valueOf()<startDate.date.valueOf()?'disabled':'';}}).on('changeDate',function(ev){endDate.hide();}).data('datepicker');}};horizon.forms.bind_add_item_handlers=function(el){var $selects=$(el).find('select[data-add-item-url]');$selects.each(function(){var $this=$(this);$button=$("<a href='"+$this.attr("data-add-item-url")+"' "+"data-add-to-field='"+$this.attr("id")+"' "+"class='btn ajax-add ajax-modal btn-inline'>+</a>");$this.after($button);});};horizon.forms.prevent_multiple_submission=function(el){var $form=$(el).find("form");$form.submit(function(){var button=$(this).find('[type="submit"]');if(button.hasClass('btn-primary')&&!button.hasClass('always-enabled')){$(this).submit(function(){return false;});button.removeClass('primary').addClass('disabled');button.attr('disabled','disabled');}
+return true;});};horizon.forms.init_examples=function(el){var $el=$(el);$el.find("#id_description").attr("placeholder",gettext("Additional information here..."));$el.find("#create_image_form input#id_copy_from").attr("placeholder","http://example.com/image.iso");$el.find(".table_search input").attr("placeholder",gettext("Filter"));$el.find("#attach_volume_form #id_device").attr("placeholder","/dev/vdc");};horizon.addInitFunction(function(){horizon.forms.prevent_multiple_submission($('body'));horizon.modals.addModalInitFunction(horizon.forms.prevent_multiple_submission);horizon.forms.bind_add_item_handlers($("body"));horizon.modals.addModalInitFunction(horizon.forms.bind_add_item_handlers);horizon.forms.init_examples($("body"));horizon.modals.addModalInitFunction(horizon.forms.init_examples);horizon.forms.handle_snapshot_source();horizon.forms.handle_image_source();horizon.forms.datepicker();$("body").on("click","form button.btn-danger",function(evt){horizon.datatables.confirm(this);evt.preventDefault();});$(document).on("change",'select.switchable',function(evt){var $fieldset=$(evt.target).closest('fieldset'),$switchables=$fieldset.find('.switchable');$switchables.each(function(index,switchable){var $switchable=$(switchable),slug=$switchable.data('slug'),visible=$switchable.is(':visible'),val=$switchable.val();$fieldset.find('.switched[data-switch-on*="'+slug+'"]').each(function(index,input){var $input=$(input),data=$input.data(slug+"-"+val);if(typeof data==="undefined"||!visible){$input.closest('.form-field').hide();}else{$('label[for='+$input.attr('id')+']').html(data);$input.closest('.form-field').show();}});});});$('select.switchable').trigger('change');horizon.modals.addModalInitFunction(function(modal){$(modal).find('select.switchable').trigger('change');});function update_volume_source_displayed_fields(field){var $this=$(field),base_type=$this.val();$this.find("option").each(function(){if(this.value!=base_type){$("#id_"+this.value).closest(".control-group").hide();}else{$("#id_"+this.value).closest(".control-group").show();}});}
+$(document).on('change','#id_volume_source_type',function(evt){update_volume_source_displayed_fields(this);});$('#id_volume_source_type').change();horizon.modals.addModalInitFunction(function(modal){$(modal).find("#id_volume_source_type").change();});$(document).tooltip({selector:"div.form-field :input:not(:checkbox)",placement:function(tip,input){return $(input).closest("form[class*='split']").length?"bottom":'right';},trigger:'focus',title:function(){return $(this).closest('div.form-field').children('.help-block').text();}});$(document).on('mousedown keydown','.form-field select',function(evt){$(this).tooltip('hide');});$(document).on('keydown.esc_btn',function(evt){if(evt.keyCode==27){$('.tooltip').hide();}});$('span.help-block').hide();});horizon.instances={user_decided_length:false,networks_selected:[],networks_available:[],getConsoleLog:function(via_user_submit){var form_element=$("#tail_length"),data;if(!via_user_submit){via_user_submit=false;}
 if(this.user_decided_length){data=$(form_element).serialize();}else{data="length=35";}
-$.ajax({url:$(form_element).attr('action'),data:data,method:'get',success:function(response_body){$('pre.logs').text(response_body);},error:function(response){if(via_user_submit){horizon.clearErrorMessages();horizon.alert('error',gettext('There was a problem communicating with the server, please try again.'));}}});},disable_launch_button:function(){var launch_button="#instances__action_launch";$(launch_button).click(function(e){if($(launch_button).hasClass("disabled")){e.preventDefault();e.stopPropagation();}});},get_network_element:function(network_id){return $('li > label[for^="id_network_'+network_id+'"]');},init_network_list:function(){horizon.instances.networks_selected=[];horizon.instances.networks_available=[];$(this.get_network_element("")).each(function(){var $this=$(this);var $input=$this.children("input");var network_property={name:$this.text().replace(/^\s+/,""),id:$input.attr("id"),value:$input.attr("value")};if($input.is(':checked')){horizon.instances.networks_selected.push(network_property);}else{horizon.instances.networks_available.push(network_property);}});},generate_network_element:function(name,id,value){var $li=$('<li>');$li.attr('name',value).html(name+'<em class="network_id">('+value+')</em><a href="#" class="btn btn-primary"></a>');return $li;},generate_networklist_html:function(){var self=this;var updateForm=function(){var lists=$("#networkListId div.input li").attr('data-index',100);var active_networks=$("#selected_network > li").map(function(){return $(this).attr("name");});$("#networkListId div.input input:checkbox").removeAttr('checked');active_networks.each(function(index,value){$("#networkListId div.input input:checkbox[value="+value+"]").attr('checked','checked').parents("li").attr('data-index',index);});$("#networkListId div.input ul").html(lists.sort(function(a,b){if($(a).data("index")<$(b).data("index"))return-1;if($(a).data("index")>$(b).data("index"))return 1;return 0;}));};$("#networkListSortContainer").show();$("#networkListIdContainer").hide();self.init_network_list();$("#available_network").empty();$.each(self.networks_available,function(index,value){$("#available_network").append(self.generate_network_element(value.name,value.id,value.value));});$("#selected_network").empty();$.each(self.networks_selected,function(index,value){$("#selected_network").append(self.generate_network_element(value.name,value.id,value.value));});$(".networklist > li > a.btn").click(function(e){var $this=$(this);e.preventDefault();e.stopPropagation();if($this.parents("ul#available_network").length>0){$this.parent().appendTo($("#selected_network"));}else if($this.parents("ul#selected_network").length>0){$this.parent().appendTo($("#available_network"));}
+$.ajax({url:$(form_element).attr('action'),data:data,method:'get',success:function(response_body){$('pre.logs').text(response_body);},error:function(response){if(via_user_submit){horizon.clearErrorMessages();horizon.alert('error',gettext('There was a problem communicating with the server, please try again.'));}}});},get_network_element:function(network_id){return $('li > label[for^="id_network_'+network_id+'"]');},init_network_list:function(){horizon.instances.networks_selected=[];horizon.instances.networks_available=[];$(this.get_network_element("")).each(function(){var $this=$(this);var $input=$this.children("input");var network_property={name:$this.text().replace(/^\s+/,""),id:$input.attr("id"),value:$input.attr("value")};if($input.is(':checked')){horizon.instances.networks_selected.push(network_property);}else{horizon.instances.networks_available.push(network_property);}});},generate_network_element:function(name,id,value){var $li=$('<li>');$li.attr('name',value).html(name+'<em class="network_id">('+value+')</em><a href="#" class="btn btn-primary"></a>');return $li;},generate_networklist_html:function(){var self=this;var updateForm=function(){var lists=$("#networkListId div.input li").attr('data-index',100);var active_networks=$("#selected_network > li").map(function(){return $(this).attr("name");});$("#networkListId div.input input:checkbox").removeAttr('checked');active_networks.each(function(index,value){$("#networkListId div.input input:checkbox[value="+value+"]").attr('checked','checked').parents("li").attr('data-index',index);});$("#networkListId div.input ul").html(lists.sort(function(a,b){if($(a).data("index")<$(b).data("index"))return-1;if($(a).data("index")>$(b).data("index"))return 1;return 0;}));};$("#networkListSortContainer").show();$("#networkListIdContainer").hide();self.init_network_list();$("#available_network").empty();$.each(self.networks_available,function(index,value){$("#available_network").append(self.generate_network_element(value.name,value.id,value.value));});$("#selected_network").empty();$.each(self.networks_selected,function(index,value){$("#selected_network").append(self.generate_network_element(value.name,value.id,value.value));});$(".networklist > li > a.btn").click(function(e){var $this=$(this);e.preventDefault();e.stopPropagation();if($this.parents("ul#available_network").length>0){$this.parent().appendTo($("#selected_network"));}else if($this.parents("ul#selected_network").length>0){$this.parent().appendTo($("#available_network"));}
 updateForm();});if($("#networkListId > div.control-group.error").length>0){var errortext=$("#networkListId > div.control-group.error").find("span.help-inline").text();$("#selected_network_h4").before($('<div class="dynamic-error">').html(errortext));}
-$(".networklist").sortable({connectWith:"ul.networklist",placeholder:"ui-state-highlight",distance:5,start:function(e,info){$("#selected_network").addClass("dragging");},stop:function(e,info){$("#selected_network").removeClass("dragging");updateForm();}}).disableSelection();},workflow_init:function(modal){horizon.instances.generate_networklist_html();}};horizon.addInitFunction(function(){$(document).on('submit','#tail_length',function(evt){horizon.instances.user_decided_length=true;horizon.instances.getConsoleLog(true);evt.preventDefault();});horizon.instances.disable_launch_button();function update_launch_source_displayed_fields(field){var $this=$(field),base_type=$this.val();$this.find("option").each(function(){if(this.value!=base_type){$("#id_"+this.value).closest(".control-group").hide();}else{$("#id_"+this.value).closest(".control-group").show();}});}
-$(document).on('change','.workflow #id_source_type',function(evt){update_launch_source_displayed_fields(this);});$('.workflow #id_source_type').change();horizon.modals.addModalInitFunction(function(modal){$(modal).find("#id_source_type").change();});function update_launch_volume_displayed_fields(field){var $this=$(field),volume_opt=$this.val(),$extra_fields=$("#id_delete_on_terminate, #id_device_name");$this.find("option").each(function(){if(this.value!=volume_opt){$("#id_"+this.value).closest(".control-group").hide();}else{$("#id_"+this.value).closest(".control-group").show();}});if(volume_opt==="volume_id"||volume_opt==="volume_snapshot_id"){$extra_fields.closest(".control-group").show();}else{$extra_fields.closest(".control-group").hide();}}
-$(document).on('change','.workflow #id_volume_type',function(evt){update_launch_volume_displayed_fields(this);});$('.workflow #id_volume_type').change();horizon.modals.addModalInitFunction(function(modal){$(modal).find("#id_volume_type").change();});});horizon.alert=function(type,message,extra_tags){safe=false
+$(".networklist").sortable({connectWith:"ul.networklist",placeholder:"ui-state-highlight",distance:5,start:function(e,info){$("#selected_network").addClass("dragging");},stop:function(e,info){$("#selected_network").removeClass("dragging");updateForm();}}).disableSelection();},workflow_init:function(modal){horizon.instances.generate_networklist_html();}};horizon.addInitFunction(function(){$(document).on('submit','#tail_length',function(evt){horizon.instances.user_decided_length=true;horizon.instances.getConsoleLog(true);evt.preventDefault();});function update_launch_source_displayed_fields(field){var $this=$(field),base_type=$this.val();$this.closest(".control-group").nextAll().hide();switch(base_type){case"image_id":$("#id_image_id").closest(".control-group").show();break;case"instance_snapshot_id":$("#id_instance_snapshot_id").closest(".control-group").show();break;case"volume_id":$("#id_volume_id").closest(".control-group").show();break;case"volume_image_id":$("#id_image_id, #id_volume_size, #id_device_name, , #id_delete_on_terminate").closest(".control-group").show();break;case"volume_snapshot_id":$("#id_volume_snapshot_id, #id_device_name, #id_delete_on_terminate").closest(".control-group").show();break;}}
+$(document).on('change','.workflow #id_source_type',function(evt){update_launch_source_displayed_fields(this);});$('.workflow #id_source_type').change();horizon.modals.addModalInitFunction(function(modal){$(modal).find("#id_source_type").change();});function update_image_id_fields(field){var $this=$(field),volume_opt=$this.val();var $option=$this.find("option:selected");var $form=$this.closest('form');var $volSize=$form.find('input#id_volume_size');$volSize.val($option.data("volume_size"));}
+$(document).on('change','.workflow #id_image_id',function(evt){update_image_id_fields(this);});});horizon.alert=function(type,message,extra_tags){safe=false
 if(typeof(extra_tags)!=="undefined"&&_.contains(extra_tags.split(' '),'safe')){safe=true}
 var template=horizon.templates.compiled_templates["#alert_message_template"],params={"type":type,"type_capitalized":horizon.utils.capitalize(type),"message":message,"safe":safe};return $(template.render(params)).hide().prependTo("#main_content .messages").fadeIn(100);};horizon.clearErrorMessages=function(){$('#main_content .messages .alert.alert-error').remove();};horizon.clearSuccessMessages=function(){$('#main_content .messages .alert.alert-success').remove();};horizon.clearAllMessages=function(){horizon.clearErrorMessages();horizon.clearSuccessMessages();};horizon.autoDismissAlerts=function(){var $alerts=$('#main_content .messages .alert');$alerts.each(function(index,alert){var $alert=$(this),types=$alert.attr('class').split(' ');if(_.intersection(types,horizon.conf.auto_fade_alerts.types).length>0){setTimeout(function(){$alert.fadeOut(horizon.conf.auto_fade_alerts.fade_duration);},horizon.conf.auto_fade_alerts.delay);}});}
-horizon.addInitFunction(function(){$("body").ajaxComplete(function(event,request,settings){var message_array=$.parseJSON(horizon.ajax.get_messages(request));$(message_array).each(function(index,item){horizon.alert(item[0],item[1],item[2]);});});$('a.ajax-modal').click(function(){horizon.clearAllMessages();});$(".alert").alert();horizon.autoDismissAlerts();});horizon.modals={_request:null,spinner:null,_init_functions:[]};horizon.modals.addModalInitFunction=function(f){horizon.modals._init_functions.push(f);};horizon.modals.initModal=function(modal){$(horizon.modals._init_functions).each(function(index,f){f(modal);});};horizon.modals.create=function(title,body,confirm,cancel){if(!cancel){cancel="Cancel";}
+horizon.addInitFunction(function(){$("body").ajaxComplete(function(event,request,settings){var message_array=$.parseJSON(horizon.ajax.get_messages(request));$(message_array).each(function(index,item){horizon.alert(item[0],item[1],item[2]);});});$('a.ajax-modal').click(function(){horizon.clearAllMessages();});$(".alert").alert();horizon.autoDismissAlerts();});horizon.modals={_request:null,spinner:null,_init_functions:[]};horizon.modals.addModalInitFunction=function(f){horizon.modals._init_functions.push(f);};horizon.modals.initModal=function(modal){$(horizon.modals._init_functions).each(function(index,f){f(modal);});};horizon.modals.create=function(title,body,confirm,cancel){if(!cancel){cancel=gettext("Cancel");}
 var template=horizon.templates.compiled_templates["#modal_template"],params={title:title,body:body,confirm:confirm,cancel:cancel},modal=$(template.render(params)).appendTo("#modal_wrapper");return modal;};horizon.modals.success=function(data,textStatus,jqXHR){var modal;$('#modal_wrapper').append(data);$('.modal span.help-block').hide();modal=$('.modal:last');modal.modal();$(modal).trigger("new_modal",modal);return modal;};horizon.modals.modal_spinner=function(text){var template=horizon.templates.compiled_templates["#spinner-modal"];horizon.modals.spinner=$(template.render({text:text}));horizon.modals.spinner.appendTo("#modal_wrapper");horizon.modals.spinner.modal({backdrop:'static'});horizon.modals.spinner.spin(horizon.conf.spinner_options.modal);};horizon.addInitFunction(function(){$('#modal_wrapper').on('new_modal',function(evt,modal){horizon.modals.initModal(modal);});$(document).on('click','.modal .cancel',function(evt){$(this).closest('.modal').modal('hide');evt.preventDefault();});$(document).on('submit','.modal form',function(evt){var $form=$(this),$button=$form.find(".modal-footer .btn-primary"),update_field_id=$form.attr("data-add-to-field"),headers={};if($form.attr("enctype")==="multipart/form-data"){return;}
 evt.preventDefault();$button.prop("disabled",true);if(update_field_id){headers["X-Horizon-Add-To-Field"]=update_field_id;}
 $.ajax({type:"POST",url:$form.attr('action'),headers:headers,data:$form.serialize(),beforeSend:function(){$("#modal_wrapper .modal").last().modal("hide");horizon.modals.modal_spinner("Working");},complete:function(){horizon.modals.spinner.modal('hide');$("#modal_wrapper .modal").last().modal("show");$button.prop("disabled",false);},success:function(data,textStatus,jqXHR){var redirect_header=jqXHR.getResponseHeader("X-Horizon-Location"),add_to_field_header=jqXHR.getResponseHeader("X-Horizon-Add-To-Field"),json_data,field_to_update;$form.closest(".modal").modal("hide");if(redirect_header){location.href=redirect_header;}
@@ -227,74 +231,243 @@ else{return addition}});},_attachInputHandlers:function(){var scope=this;if(this
 $(this.user_value_form_inputs).each(function(index,element){$(element).on('keyup',function(evt){var progress_element=$('div[data-progress-indicator-for='+$(evt.target).attr('id')+']');var integers_in_input=$(evt.target).val().match(/\d+/g);var user_integer;if(integers_in_input===null){user_integer=0;}else if(integers_in_input.length>1){user_integer=integers_in_input.join('');}else if(integers_in_input.length==1){user_integer=integers_in_input[0];}
 var progress_amount=parseInt(user_integer,10);scope.updateUsageFor(progress_element,progress_amount);});});},_initialAnimations:function(){var scope=this;$(this.auto_value_progress_bars).each(function(index,element){var auto_progress=$(element);var update_amount=parseInt(auto_progress.attr('data-progress-indicator-step-by'),10);scope.updateUsageFor(auto_progress,update_amount);});},_initialCreation:function(bars){var scope=this;$(bars).each(function(index,element){var progress_element=$(element);var quota_limit=parseInt(progress_element.attr('data-quota-limit'),10);var quota_used=parseInt(progress_element.attr('data-quota-used'),10);if(!isNaN(quota_limit)&&!isNaN(quota_used)){var percentage_used=((quota_used/quota_limit)*100);}else{var percentage_used=0;}
 scope.drawUsed($(element).attr('id'),percentage_used);});}};horizon.datatables={update:function(){var $rows_to_update=$('tr.status_unknown.ajax-update');if($rows_to_update.length){var interval=$rows_to_update.attr('data-update-interval'),$table=$rows_to_update.closest('table'),decay_constant=$table.attr('decay_constant');if($rows_to_update.find('.actions_column .btn-group.open').length){setTimeout(horizon.datatables.update,interval);$table.removeAttr('decay_constant');return;}
-$rows_to_update.each(function(index,row){var $row=$(this),$table=$row.closest('table.datatable');horizon.ajax.queue({url:$row.attr('data-update-url'),error:function(jqXHR,textStatus,errorThrown){switch(jqXHR.status){case 404:var $footer,row_count,footer_text,colspan,template,params,$empty_row;horizon.datatables.update_footer_count($table,-1);if(row_count===0){colspan=$table.find('th[colspan]').attr('colspan');template=horizon.templates.compiled_templates["#empty_row_template"];params={"colspan":colspan};empty_row=template.render(params);$row.replaceWith(empty_row);}else{$row.remove();}
+$rows_to_update.each(function(index,row){var $row=$(this),$table=$row.closest('table.datatable');horizon.ajax.queue({url:$row.attr('data-update-url'),error:function(jqXHR,textStatus,errorThrown){switch(jqXHR.status){case 404:var $footer,row_count,footer_text,colspan,template,params,$empty_row;row_count=horizon.datatables.update_footer_count($table,-1);if(row_count===0){colspan=$table.find('th[colspan]').attr('colspan');template=horizon.templates.compiled_templates["#empty_row_template"];params={"colspan":colspan};empty_row=template.render(params);$row.replaceWith(empty_row);}else{$row.remove();}
 $table.trigger("update");break;default:horizon.utils.log(gettext("An error occurred while updating."));$row.removeClass("ajax-update");$row.find("i.ajax-updating").remove();break;}},success:function(data,textStatus,jqXHR){var $new_row=$(data);if($new_row.hasClass('status_unknown')){var spinner_elm=$new_row.find("td.status_unknown:last");if($new_row.find('a.btn-action-required').length>0){spinner_elm.prepend($("<div />").addClass("action_required_img").append($("<img />").attr("src","/static/dashboard/img/action_required.png")));}else{spinner_elm.prepend($("<div />").addClass("loading_gif").append($("<img />").attr("src","/static/dashboard/img/loading.gif")));}}
 if($new_row.html()!=$row.html()){if($row.find(':checkbox').is(':checked')){$new_row.find(':checkbox').prop('checked',true);}
 $row.replaceWith($new_row);$table.trigger("update");$table.removeAttr('decay_constant');}},complete:function(jqXHR,textStatus){horizon.datatables.validate_button();}});});if(decay_constant===undefined){decay_constant=1;}else{decay_constant++;}
 $table.attr('decay_constant',decay_constant);next_poll=interval*decay_constant;if(next_poll>30*1000)next_poll=30*1000;setTimeout(horizon.datatables.update,next_poll);}},validate_button:function(){$("form").each(function(i){var checkboxes=$(this).find(":checkbox");if(!checkboxes.length){return;}
 if(!checkboxes.filter(":checked").length){$(this).find(".table_actions button.btn-danger").addClass("disabled");}});}};horizon.datatables.confirm=function(action){var $action=$(action),$modal_parent=$(action).closest('.modal'),name_array=new Array(),closest_table_id,action_string,name_string,title,body,modal,form;if($action.hasClass("disabled")){return;}
-action_string=$action.text();name_string="";closest_table_id=$(action).closest("table").attr("id");if($("#"+closest_table_id+" tr[data-display]").length>0){name_string=gettext("You have selected ");if($(action).closest("div").hasClass("table_actions")){$("#"+closest_table_id+" tr[data-display]").has(":checkbox:checked").each(function(){name_array.push(" \""+$(this).attr("data-display")+"\"");});name_array.join(", ");name_string+=name_array.toString()+". ";}else{name_string+=" \""+$(action).closest("tr").attr("data-display")+"\". ";}}
-title=gettext("Confirm ")+action_string;body=name_string+gettext("Please confirm your selection. This action cannot be undone.");modal=horizon.modals.create(title,body,action_string);modal.modal();if($modal_parent.length){var child_backdrop=modal.next('.modal-backdrop');child_backdrop.css('z-index',$modal_parent.css('z-index')+10);modal.css('z-index',child_backdrop.css('z-index')+10);}
+action_string=$action.text();name_string="";closest_table_id=$(action).closest("table").attr("id");if($("#"+closest_table_id+" tr[data-display]").length>0){if($(action).closest("div").hasClass("table_actions")){$("#"+closest_table_id+" tr[data-display]").has(":checkbox:checked").each(function(){name_array.push(" \""+$(this).attr("data-display")+"\"");});name_array.join(", ");name_string=name_array.toString();}else{name_string=" \""+$(action).closest("tr").attr("data-display")+"\"";}
+name_string=interpolate(gettext("You have selected %s. "),[name_string]);}
+title=interpolate(gettext("Confirm %s"),[action_string]);body=name_string+gettext("Please confirm your selection. This action cannot be undone.");modal=horizon.modals.create(title,body,action_string);modal.modal();if($modal_parent.length){var child_backdrop=modal.next('.modal-backdrop');child_backdrop.css('z-index',$modal_parent.css('z-index')+10);modal.css('z-index',child_backdrop.css('z-index')+10);}
 modal.find('.btn-primary').click(function(evt){form=$action.closest('form');form.append("<input type='hidden' name='"+$action.attr('name')+"' value='"+$action.attr('value')+"'/>");form.submit();modal.modal('hide');horizon.modals.modal_spinner(gettext("Working"));return false;});return modal;};$.tablesorter.addParser({id:'sizeSorter',is:function(s){return false;},format:function(s){var sizes={BYTE:0,B:0,KB:1,MB:2,GB:3,TB:4,PB:5};var regex=/([\d\.,]+)\s*(byte|B|KB|MB|GB|TB|PB)+/i;var match=s.match(regex);if(match&&match.length===3){return parseFloat(match[1])*Math.pow(1024,sizes[match[2].toUpperCase()]);}
-return parseInt(s,10);},type:'numeric'});horizon.datatables.update_footer_count=function(el,modifier){var $el=$(el),$browser,$footer,row_count,footer_text_template,footer_text;if(!modifier){modifier=0;}
+return parseInt(s,10);},type:'numeric'});horizon.datatables.disable_buttons=function(){$("table .table_actions").on("click",".btn.disabled",function(event){event.preventDefault();event.stopPropagation();});};horizon.datatables.update_footer_count=function(el,modifier){var $el=$(el),$browser,$footer,row_count,footer_text_template,footer_text;if(!modifier){modifier=0;}
 $browser=$el.closest("#browser_wrapper");if($browser.length){$footer=$browser.find('.tfoot span.content_table_count');}
 else{$footer=$el.find('tfoot span.table_count');}
-row_count=$el.find('tbody tr:visible').length+modifier-$el.find('.empty').length;footer_text_template=ngettext("Displaying %s item","Displaying %s items",row_count);footer_text=interpolate(footer_text_template,[row_count]);$footer.text(footer_text);};horizon.datatables.add_no_results_row=function(table){template=horizon.templates.compiled_templates["#empty_row_template"];if(!table.find("tbody tr:visible").length&&typeof(template)!=="undefined"){colspan=table.find("th[colspan]").attr('colspan');params={"colspan":colspan};table.find("tbody").append(template.render(params));}};horizon.datatables.remove_no_results_row=function(table){table.find("tr.empty").remove();};horizon.datatables.fix_row_striping=function(table){table.trigger('applyWidgetId',['zebra']);};horizon.datatables.set_table_sorting=function(parent){$(parent).find("table.datatable").each(function(){var $table=$(this),header_options={};if($table.find('tbody tr').not('.empty').length>1){$table.find("thead th[class!='table_header']").each(function(i,val){$th=$(this);if(!$th.hasClass('sortable')){header_options[i]={sorter:false};}else if($th.data('type')=='size'){header_options[i]={sorter:'sizeSorter'};}else if($th.data('type')=='ip'){header_options[i]={sorter:'ipAddress'};}});$table.tablesorter({headers:header_options,selectorHeaders:"thead th[class!='table_header']",cancelSelection:false});}});};horizon.datatables.add_table_checkboxes=function(parent){$(parent).find('table thead .multi_select_column').each(function(index,thead){if(!$(thead).find(':checkbox').length&&$(thead).parents('table').find('tbody :checkbox').length){$(thead).append('<input type="checkbox">');}});};horizon.datatables.set_table_query_filter=function(parent){$(parent).find('table').each(function(index,elm){var input=$($(elm).find('div.table_search input')),table_selector;if(input.length>0){input.on('keypress',function(evt){if(evt.keyCode===13){return false;}});input.next('button.btn-search').on('click keypress',function(evt){return false;});table_selector='table#'+$(elm).attr('id');input.quicksearch(table_selector+' tbody tr',{'delay':300,'loader':'span.loading','bind':'keyup click','show':this.show,'hide':this.hide,onBefore:function(){var table=$(table_selector);horizon.datatables.remove_no_results_row(table);},onAfter:function(){var template,table,colspan,params;table=$(table_selector);horizon.datatables.update_footer_count(table);horizon.datatables.add_no_results_row(table);horizon.datatables.fix_row_striping(table);},prepareQuery:function(val){return new RegExp(val,"i");},testQuery:function(query,txt,_row){return query.test($(_row).find('td:not(.hidden):not(.actions_column)').text());}});}});};horizon.datatables.set_table_fixed_filter=function(parent){$(parent).find('table.datatable').each(function(index,elm){$(elm).on('click','div.table_filter button',function(evt){var table=$(elm);var category=$(this).val();evt.preventDefault();horizon.datatables.remove_no_results_row(table);table.find('tbody tr').hide();table.find('tbody tr.category-'+category).show();horizon.datatables.update_footer_count(table);horizon.datatables.add_no_results_row(table);horizon.datatables.fix_row_striping(table);});$(elm).find('div.table_filter button').each(function(i,button){if($(button).text().indexOf(' (0)')==-1){$(button).addClass('active');$(button).trigger('click');return false;}});});};horizon.addInitFunction(function(){horizon.datatables.validate_button();$('table.datatable').each(function(idx,el){horizon.datatables.update_footer_count($(el),0);});$('div.table_wrapper, #modal_wrapper').on('click','table thead .multi_select_column :checkbox',function(evt){var $this=$(this),$table=$this.closest('table'),is_checked=$this.prop('checked'),checkboxes=$table.find('tbody :visible:checkbox');checkboxes.prop('checked',is_checked);});$("div.table_wrapper, #modal_wrapper").on("click",'table tbody :checkbox',function(evt){var $table=$(this).closest('table');var $multi_select_checkbox=$table.find('thead .multi_select_column :checkbox');var any_unchecked=$table.find("tbody :checkbox").not(":checked");$multi_select_checkbox.prop('checked',!(any_unchecked.length>0));});$("div.table_wrapper, #modal_wrapper").on("click",':checkbox',function(evt){var $form=$(this).closest("form");var any_checked=$form.find("tbody :checkbox").is(":checked");if(any_checked){$form.find(".table_actions button.btn-danger").removeClass("disabled");}else{$form.find(".table_actions button.btn-danger").addClass("disabled");}});horizon.datatables.add_table_checkboxes($('body'));horizon.datatables.set_table_sorting($('body'));horizon.datatables.set_table_query_filter($('body'));horizon.datatables.set_table_fixed_filter($('body'));horizon.modals.addModalInitFunction(horizon.datatables.add_table_checkboxes);horizon.modals.addModalInitFunction(horizon.datatables.set_table_sorting);horizon.modals.addModalInitFunction(horizon.datatables.set_table_query_filter);horizon.modals.addModalInitFunction(horizon.datatables.set_table_fixed_filter);horizon.datatables.update();});horizon.tabs={};horizon.tabs.load_tab=function(evt){var $this=$(this),tab_id=$this.attr('data-target'),tab_pane=$(tab_id);tab_pane.append("<span style='margin-left: 30px;'>"+gettext("Loading")+"&hellip;</span>");tab_pane.spin(horizon.conf.spinner_options.inline);$(tab_pane.data().spinner.el).css('top','9px');$(tab_pane.data().spinner.el).css('left','15px');if(window.location.search.length>0){tab_pane.load(window.location.search+"&tab="+tab_id.replace('#',''));}else{tab_pane.load("?tab="+tab_id.replace('#',''));}
-$this.attr("data-loaded","true");evt.preventDefault();};horizon.addInitFunction(function(){var data=horizon.cookies.read('tabs');$(".tab-content").find(".js-tab-pane").addClass("tab-pane");horizon.modals.addModalInitFunction(function(el){$(el).find(".js-tab-pane").addClass("tab-pane");});$(document).on("show",".ajax-tabs a[data-loaded='false']",horizon.tabs.load_tab);$(document).on("shown",".nav-tabs a[data-toggle='tab']",function(evt){var $tab=$(evt.target),$content=$($(evt.target).attr('data-target'));$content.find("table.datatable").each(function(){horizon.datatables.update_footer_count($(this));});horizon.cookies.update("tabs",$tab.closest(".nav-tabs").attr("id"),$tab.attr('data-target'));});$(".nav-tabs[data-sticky-tabs='sticky']").each(function(index,item){var $this=$(this),id=$this.attr("id"),active_tab=data[id];if(active_tab&&window.location.search.indexOf("tab=")<0){$this.find("a[data-target='"+active_tab+"']").tab('show');}});$(document).on("keydown",".tab-pane :input:visible:last",function(evt){var $this=$(this),next_pane=$this.closest(".tab-pane").next(".tab-pane");if(evt.which===9&&!event.shiftKey&&next_pane.length){evt.preventDefault();$(".nav-tabs a[data-target='#"+next_pane.attr("id")+"']").tab('show');}});$(document).on("keydown",".tab-pane :input:visible:first",function(evt){var $this=$(this),prev_pane=$this.closest(".tab-pane").prev(".tab-pane");if(event.shiftKey&&evt.which===9&&prev_pane.length){evt.preventDefault();$(".nav-tabs a[data-target='#"+prev_pane.attr("id")+"']").tab('show');prev_pane.find(":input:last").focus();console.log(prev_pane);}});$(document).on("focus",".tab-content :input",function(){var $this=$(this),tab_pane=$this.closest(".tab-pane"),tab_id=tab_pane.attr('id');if(!tab_pane.hasClass("active")){$(".nav-tabs a[data-target='#"+tab_id+"']").tab('show');}});});horizon.templates={template_ids:["#modal_template","#empty_row_template","#alert_message_template","#spinner-modal","#project_user_template"],compiled_templates:{}};horizon.templates.compile_templates=function(){$.each(horizon.templates.template_ids,function(ind,template_id){horizon.templates.compiled_templates[template_id]=Hogan.compile($(template_id).html());});};horizon.addInitFunction(function(){horizon.templates.compile_templates();});horizon.user={init:function(){$("#id_password").change(function(){if($("#id_confirm_password").val()!=""){horizon.user.check_passwords_match();}});$("#id_confirm_password").change(function(){horizon.user.check_passwords_match();});},check_passwords_match:function(){var row=$("label[for='id_confirm_password']");var error_id="id_confirm_password_error";var msg="<span id='"+error_id+"' class='help-inline'>"+gettext("Passwords do not match.")+"</span>";var password=$("#id_password").val();var confirm_password=$("#id_confirm_password").val();if(password!=confirm_password&&$("#"+error_id).length==0){$(row).parent().addClass("error");$(row).after(msg);}else if(password==confirm_password){$(row).parent().removeClass("error");$("#"+error_id).remove();}}};horizon.utils={log:function(){if(horizon.conf.debug&&typeof(console)!=="undefined"&&typeof(console.log)!=="undefined"){console.log(arguments);}},capitalize:function(string){return string.charAt(0).toUpperCase()+string.slice(1);},humanizeNumbers:function(number){return number.toString().replace(/\B(?=(\d{3})+(?!\d))/g,",");},truncate:function(string,size,includeEllipsis){if(string.length>size){if(includeEllipsis){return string.substring(0,(size-3))+"&hellip;";}else{return string.substring(0,size);}}else{return string;}}};horizon.projects={current_membership:[],users:[],roles:[],has_roles:true,default_role_id:"",get_field_id:function(id_string){return id_string.slice(id_string.lastIndexOf("_")+1);},get_role_element:function(role_id){return $('select[id^="id_role_'+role_id+'"]');},get_user_element:function(user_id){return $('li[data-user-id$='+user_id+']').parent();},init_properties:function(){horizon.projects.has_roles=$(".project_membership").data('show-roles')!=="no";horizon.projects.default_role_id=$('#id_default_role').attr('value');horizon.projects.init_user_list();horizon.projects.init_role_list();horizon.projects.init_current_membership();},init_user_list:function(){horizon.projects.users=[];_.each($(this.get_role_element("")).find("option"),function(option){horizon.projects.users[option.value]=option.text;});},init_role_list:function(){horizon.projects.roles=[];_.each($('label[for^="id_role_"]'),function(role){var id=horizon.projects.get_field_id($(role).attr('for'));horizon.projects.roles[id]=$(role).text();});},init_current_membership:function(){horizon.projects.current_membership=[];var members_list=[];var role_name,role_id,selected_members;_.each(this.get_role_element(''),function(value,key){role_id=horizon.projects.get_field_id($(value).attr('id'));role_name=$('label[for="id_role_'+role_id+'"]').text();selected_members=$(value).find("option:selected");members_list=[];if(selected_members){_.each(selected_members,function(member){members_list.push(member.value);});}
-horizon.projects.current_membership[role_id]=members_list;});},get_user_roles:function(user_id){var roles=[];for(var role in horizon.projects.current_membership){if($.inArray(user_id,horizon.projects.current_membership[role])>=0){roles.push(role);}}
-return roles;},update_role_lists:function(role_id,new_list){this.get_role_element(role_id).val(new_list);horizon.projects.current_membership[role_id]=new_list;},remove_user:function(user_id,role_id,role_list){var index=role_list.indexOf(user_id);if(index>=0){role_list.splice(index,1);horizon.projects.update_role_lists(role_id,role_list);}},remove_user_from_role:function(user_id,role_id){var role_list;if(role_id){role_list=horizon.projects.current_membership[role_id];horizon.projects.remove_user(user_id,role_id,role_list);}
-else{for(var role in horizon.projects.current_membership){role_list=horizon.projects.current_membership[role];horizon.projects.remove_user(user_id,role,role_list);}}},add_user_to_role:function(user_id,role_id){var role_list=horizon.projects.current_membership[role_id];role_list.push(user_id);horizon.projects.update_role_lists(role_id,role_list);},update_user_role_dropdown:function(user_id,role_ids,user_el){if(typeof(role_ids)==='undefined'){role_ids=horizon.projects.get_user_roles(user_id);}
-if(typeof(user_el)==='undefined'){user_el=horizon.projects.get_user_element(user_id);}
-var $dropdown=user_el.find("li.member").siblings('.dropdown');var $role_items=$dropdown.children('.role_dropdown').children('li');$role_items.each(function(idx,el){if(_.contains(role_ids,$(el).data('role-id'))){$(el).addClass('selected');}else{$(el).removeClass('selected');}});var $roles_display=$dropdown.children('.dropdown-toggle').children('.roles_display');var roles_to_display=[];for(var i=0;i<role_ids.length;i++){if(i==2){roles_to_display.push('...');break;}
-roles_to_display.push(horizon.projects.roles[role_ids[i]]);}
-text=roles_to_display.join(', ');if(text.length==0)text='No roles';$roles_display.text(text);},generate_user_element:function(user_name,user_id,role_ids,text){var str_id="id_user_"+user_id;var roles=[];for(var r in horizon.projects.roles){var role={};role['role_id']=r;role['role_name']=horizon.projects.roles[r];roles.push(role);}
-var template=horizon.templates.compiled_templates["#project_user_template"],params={user_id:str_id,default_role:horizon.projects.roles[horizon.projects.default_role_id],user_name:user_name,text:text,roles:roles},user_el=$(template.render(params));this.update_user_role_dropdown(str_id,role_ids,user_el);return $(user_el);},generate_html:function(){var user;for(user in horizon.projects.users){var user_id=user;var user_name=horizon.projects.users[user];var role_ids=this.get_user_roles(user_id);if(role_ids.length>0){$(".project_members").append(this.generate_user_element(user_name,user_id,role_ids,"-"));}
-else{$(".available_users").append(this.generate_user_element(user_name,user_id,role_ids,"+"));}}
-horizon.projects.detect_no_results();},update_membership:function(){$(".available_users, .project_members").on('click',".btn-group a[href='#add_remove']",function(evt){evt.preventDefault();var available=$(".available_users").has($(this)).length;var user_id=horizon.projects.get_field_id($(this).parent().siblings().attr('data-user-id'));var user_el=$(this).parent().parent();if(available){var default_role=horizon.projects.default_role_id;$(this).text("-");$(".project_members").append(user_el);horizon.projects.add_user_to_role(user_id,default_role);if(horizon.projects.has_roles){$(this).parent().siblings(".role_options").show();horizon.projects.update_user_role_dropdown(user_id,[default_role],user_el);}}
-else{$(this).text("+");$(this).parent().siblings(".role_options").hide();$(".available_users").append(user_el);horizon.projects.remove_user_from_role(user_id);}
-horizon.projects.list_filtering();horizon.projects.detect_no_results();$("input.filter").val("");});},detect_no_results:function(){$('.filterable').each(function(){var filter=$(this).find('ul').attr('class');if(!$('.'+filter).children('ul').length){$('#no_'+filter).show();$("input[id='"+filter+"']").attr('disabled','disabled');}
-else{$('#no_'+filter).hide();$("input[id='"+filter+"']").removeAttr('disabled');}});},select_member_role:function(){$(".available_users, .project_members").on('click','.role_dropdown li',function(evt){evt.preventDefault();evt.stopPropagation();var new_role_id=$(this).attr("data-role-id");var id_str=$(this).parent().parent().siblings(".member").attr("data-user-id");var user_id=horizon.projects.get_field_id(id_str);if($(this).hasClass('selected')){$(this).removeClass('selected');horizon.projects.remove_user_from_role(user_id,new_role_id);}else{$(this).addClass('selected');horizon.projects.add_user_to_role(user_id,new_role_id);}
-horizon.projects.update_user_role_dropdown(user_id);});},add_new_user:function(){$("select[id='id_new_user']").on('change',function(evt){var user_name=$(this).find("option").text();var user_id=$(this).find("option").attr("value");var default_role_id=horizon.projects.default_role_id;$(".project_members").append(horizon.projects.generate_user_element(user_name,user_id,[default_role_id],"-"));horizon.projects.users[user_id]=user_name;$("select[multiple='multiple']").append("<option value='"+user_id+"'>"+horizon.projects.users[user_id]+"</option>");horizon.projects.add_user_to_role(user_id,default_role_id);$(this).text("");horizon.projects.list_filtering();horizon.projects.detect_no_results();$("input.filter").val("");$(".project_members .btn-group").removeClass('last_stripe');$(".project_members .btn-group:last").addClass('last_stripe');});},add_new_user_styling:function(){var add_user_el=$("label[for='id_new_user']").parent();$(add_user_el).find("select").hide();$("#add_user").append($(add_user_el));$(add_user_el).addClass("add_user");$(add_user_el).find("label, .input").addClass("add_user_btn");},fix_stripes:function(){$('.fake_table').each(function(){var filter="."+$(this).attr('id');var visible=" .btn-group:visible";var even=" .btn-group:visible:even";var last=" .btn-group:visible:last";$(filter+visible).removeClass('dark_stripe');$(filter+visible).addClass('light_stripe');$(filter+even).removeClass('light_stripe');$(filter+even).addClass('dark_stripe');$(filter+visible).removeClass('last_stripe');$(filter+last).addClass('last_stripe');});},list_filtering:function(){$('input.filter').unbind();$('.filterable').each(function(){var filter=$(this).children().children('ul').attr('class');var input=$("input[id='"+filter+"']");input.quicksearch('ul.'+filter+' ul li span.user_name',{'delay':200,'loader':'span.loading','show':function(){$(this).parent().parent().show();if(filter=="available_users"){$(this).parent('.dropdown-toggle').hide();}},'hide':function(){$(this).parent().parent().hide();},'noResults':'ul#no_'+filter,'onAfter':function(){horizon.projects.fix_stripes();},'prepareQuery':function(val){return new RegExp(val,"i");},'testQuery':function(query,txt,span){if($(input).attr('id')==filter){$(input).prev().removeAttr('disabled');return query.test($(span).text());}
+row_count=$el.find('tbody tr:visible').length+modifier-$el.find('.empty').length;footer_text_template=ngettext("Displaying %s item","Displaying %s items",row_count);footer_text=interpolate(footer_text_template,[row_count]);$footer.text(footer_text);return row_count;};horizon.datatables.add_no_results_row=function(table){template=horizon.templates.compiled_templates["#empty_row_template"];if(!table.find("tbody tr:visible").length&&typeof(template)!=="undefined"){colspan=table.find("th[colspan]").attr('colspan');params={"colspan":colspan};table.find("tbody").append(template.render(params));}};horizon.datatables.remove_no_results_row=function(table){table.find("tr.empty").remove();};horizon.datatables.fix_row_striping=function(table){table.trigger('applyWidgetId',['zebra']);};horizon.datatables.set_table_sorting=function(parent){$(parent).find("table.datatable").each(function(){var $table=$(this),header_options={};if($table.find('tbody tr').not('.empty').length>1){$table.find("thead th[class!='table_header']").each(function(i,val){$th=$(this);if(!$th.hasClass('sortable')){header_options[i]={sorter:false};}else if($th.data('type')=='size'){header_options[i]={sorter:'sizeSorter'};}else if($th.data('type')=='ip'){header_options[i]={sorter:'ipAddress'};}});$table.tablesorter({headers:header_options,widgets:['zebra'],selectorHeaders:"thead th[class!='table_header']",cancelSelection:false});}});};horizon.datatables.add_table_checkboxes=function(parent){$(parent).find('table thead .multi_select_column').each(function(index,thead){if(!$(thead).find(':checkbox').length&&$(thead).parents('table').find('tbody :checkbox').length){$(thead).append('<input type="checkbox">');}});};horizon.datatables.set_table_query_filter=function(parent){$(parent).find('table').each(function(index,elm){var input=$($(elm).find('div.table_search input')),table_selector;if(input.length>0){input.on('keypress',function(evt){if(evt.keyCode===13){return false;}});input.next('button.btn-search').on('click keypress',function(evt){return false;});table_selector='table#'+$(elm).attr('id');input.quicksearch(table_selector+' tbody tr',{'delay':300,'loader':'span.loading','bind':'keyup click','show':this.show,'hide':this.hide,onBefore:function(){var table=$(table_selector);horizon.datatables.remove_no_results_row(table);},onAfter:function(){var template,table,colspan,params;table=$(table_selector);horizon.datatables.update_footer_count(table);horizon.datatables.add_no_results_row(table);horizon.datatables.fix_row_striping(table);},prepareQuery:function(val){return new RegExp(val,"i");},testQuery:function(query,txt,_row){return query.test($(_row).find('td:not(.hidden):not(.actions_column)').text());}});}});};horizon.datatables.set_table_fixed_filter=function(parent){$(parent).find('table.datatable').each(function(index,elm){$(elm).on('click','div.table_filter button',function(evt){var table=$(elm);var category=$(this).val();evt.preventDefault();horizon.datatables.remove_no_results_row(table);table.find('tbody tr').hide();table.find('tbody tr.category-'+category).show();horizon.datatables.update_footer_count(table);horizon.datatables.add_no_results_row(table);horizon.datatables.fix_row_striping(table);});$(elm).find('div.table_filter button').each(function(i,button){if($(button).text().indexOf(' (0)')==-1){$(button).addClass('active');$(button).trigger('click');return false;}});});};horizon.addInitFunction(function(){horizon.datatables.validate_button();horizon.datatables.disable_buttons();$('table.datatable').each(function(idx,el){horizon.datatables.update_footer_count($(el),0);});$('div.table_wrapper, #modal_wrapper').on('click','table thead .multi_select_column :checkbox',function(evt){var $this=$(this),$table=$this.closest('table'),is_checked=$this.prop('checked'),checkboxes=$table.find('tbody :visible:checkbox');checkboxes.prop('checked',is_checked);});$("div.table_wrapper, #modal_wrapper").on("click",'table tbody :checkbox',function(evt){var $table=$(this).closest('table');var $multi_select_checkbox=$table.find('thead .multi_select_column :checkbox');var any_unchecked=$table.find("tbody :checkbox").not(":checked");$multi_select_checkbox.prop('checked',!(any_unchecked.length>0));});$("div.table_wrapper, #modal_wrapper").on("click",':checkbox',function(evt){var $form=$(this).closest("form");var any_checked=$form.find("tbody :checkbox").is(":checked");if(any_checked){$form.find(".table_actions button.btn-danger").removeClass("disabled");}else{$form.find(".table_actions button.btn-danger").addClass("disabled");}});horizon.datatables.add_table_checkboxes($('body'));horizon.datatables.set_table_sorting($('body'));horizon.datatables.set_table_query_filter($('body'));horizon.datatables.set_table_fixed_filter($('body'));horizon.modals.addModalInitFunction(horizon.datatables.add_table_checkboxes);horizon.modals.addModalInitFunction(horizon.datatables.set_table_sorting);horizon.modals.addModalInitFunction(horizon.datatables.set_table_query_filter);horizon.modals.addModalInitFunction(horizon.datatables.set_table_fixed_filter);horizon.datatables.update();});horizon.tabs={};horizon.tabs.load_tab=function(evt){var $this=$(this),tab_id=$this.attr('data-target'),tab_pane=$(tab_id);tab_pane.append("<span style='margin-left: 30px;'>"+gettext("Loading")+"&hellip;</span>");tab_pane.spin(horizon.conf.spinner_options.inline);$(tab_pane.data().spinner.el).css('top','9px');$(tab_pane.data().spinner.el).css('left','15px');if(window.location.search.length>0){tab_pane.load(window.location.search+"&tab="+tab_id.replace('#',''));}else{tab_pane.load("?tab="+tab_id.replace('#',''));}
+$this.attr("data-loaded","true");evt.preventDefault();};horizon.addInitFunction(function(){var data=horizon.cookies.read('tabs');$(".tab-content").find(".js-tab-pane").addClass("tab-pane");horizon.modals.addModalInitFunction(function(el){$(el).find(".js-tab-pane").addClass("tab-pane");});$(document).on("show",".ajax-tabs a[data-loaded='false']",horizon.tabs.load_tab);$(document).on("shown",".nav-tabs a[data-toggle='tab']",function(evt){var $tab=$(evt.target),$content=$($(evt.target).attr('data-target'));$content.find("table.datatable").each(function(){horizon.datatables.update_footer_count($(this));});horizon.cookies.update("tabs",$tab.closest(".nav-tabs").attr("id"),$tab.attr('data-target'));});$(".nav-tabs[data-sticky-tabs='sticky']").each(function(index,item){var $this=$(this),id=$this.attr("id"),active_tab=data[id];if(active_tab&&window.location.search.indexOf("tab=")<0){$this.find("a[data-target='"+active_tab+"']").tab('show');}});$(document).on("keydown",".tab-pane :input:visible:last",function(evt){var $this=$(this),next_pane=$this.closest(".tab-pane").next(".tab-pane");if(evt.which===9&&!event.shiftKey&&next_pane.length){evt.preventDefault();$(".nav-tabs a[data-target='#"+next_pane.attr("id")+"']").tab('show');}});$(document).on("keydown",".tab-pane :input:visible:first",function(evt){var $this=$(this),prev_pane=$this.closest(".tab-pane").prev(".tab-pane");if(event.shiftKey&&evt.which===9&&prev_pane.length){evt.preventDefault();$(".nav-tabs a[data-target='#"+prev_pane.attr("id")+"']").tab('show');prev_pane.find(":input:last").focus();console.log(prev_pane);}});$(document).on("focus",".tab-content :input",function(){var $this=$(this),tab_pane=$this.closest(".tab-pane"),tab_id=tab_pane.attr('id');if(!tab_pane.hasClass("active")){$(".nav-tabs a[data-target='#"+tab_id+"']").tab('show');}});});horizon.templates={template_ids:["#modal_template","#empty_row_template","#alert_message_template","#spinner-modal","#membership_template"],compiled_templates:{}};horizon.templates.compile_templates=function(){$.each(horizon.templates.template_ids,function(ind,template_id){horizon.templates.compiled_templates[template_id]=Hogan.compile($(template_id).html());});};horizon.addInitFunction(function(){horizon.templates.compile_templates();});horizon.user={init:function(){$("#id_password").change(function(){if($("#id_confirm_password").val()!=""){horizon.user.check_passwords_match();}});$("#id_confirm_password").change(function(){horizon.user.check_passwords_match();});},check_passwords_match:function(){var row=$("label[for='id_confirm_password']");var error_id="id_confirm_password_error";var msg="<span id='"+error_id+"' class='help-inline'>"+gettext("Passwords do not match.")+"</span>";var password=$("#id_password").val();var confirm_password=$("#id_confirm_password").val();if(password!=confirm_password&&$("#"+error_id).length==0){$(row).parent().addClass("error");$(row).after(msg);}else if(password==confirm_password){$(row).parent().removeClass("error");$("#"+error_id).remove();}}};horizon.utils={log:function(){if(horizon.conf.debug&&typeof(console)!=="undefined"&&typeof(console.log)!=="undefined"){console.log(arguments);}},capitalize:function(string){return string.charAt(0).toUpperCase()+string.slice(1);},humanizeNumbers:function(number){return number.toString().replace(/\B(?=(\d{3})+(?!\d))/g,",");},truncate:function(string,size,includeEllipsis){if(string.length>size){if(includeEllipsis){return string.substring(0,(size-3))+"&hellip;";}else{return string.substring(0,size);}}else{return string;}}};horizon.membership={current_membership:[],data:[],roles:[],has_roles:[],default_role_id:[],get_field_id:function(id_string){return id_string.slice(id_string.lastIndexOf("_")+1);},get_role_element:function(step_slug,role_id){return $('select[id^="id_'+step_slug+'_role_'+role_id+'"]');},get_member_element:function(step_slug,data_id){return $('li[data-'+step_slug+'-id$='+data_id+']').parent();},init_properties:function(step_slug){horizon.membership.has_roles[step_slug]=$("."+step_slug+"_membership").data('show-roles')!=="False";horizon.membership.default_role_id[step_slug]=$('#id_default_'+step_slug+'_role').attr('value');horizon.membership.init_data_list(step_slug);horizon.membership.init_role_list(step_slug);horizon.membership.init_current_membership(step_slug);},init_data_list:function(step_slug){horizon.membership.data[step_slug]=[];_.each($(this.get_role_element(step_slug,"")).find("option"),function(option){horizon.membership.data[step_slug][option.value]=option.text;});},init_role_list:function(step_slug){horizon.membership.roles[step_slug]=[];_.each($('label[for^="id_'+step_slug+'_role_"]'),function(role){var id=horizon.membership.get_field_id($(role).attr('for'));horizon.membership.roles[step_slug][id]=$(role).text();});},init_current_membership:function(step_slug){horizon.membership.current_membership[step_slug]=[];var members_list=[];var role_name,role_id,selected_members;_.each(this.get_role_element(step_slug,''),function(value,key){role_id=horizon.membership.get_field_id($(value).attr('id'));role_name=$('label[for="id_'+step_slug+'_role_'+role_id+'"]').text();selected_members=$(value).find("option:selected");members_list=[];if(selected_members){_.each(selected_members,function(member){members_list.push(member.value);});}
+horizon.membership.current_membership[step_slug][role_id]=members_list;});},get_member_roles:function(step_slug,data_id){var roles=[];for(var role in horizon.membership.current_membership[step_slug]){if($.inArray(data_id,horizon.membership.current_membership[step_slug][role])>=0){roles.push(role);}}
+return roles;},update_role_lists:function(step_slug,role_id,new_list){this.get_role_element(step_slug,role_id).val(new_list);horizon.membership.current_membership[step_slug][role_id]=new_list;},remove_member:function(step_slug,data_id,role_id,role_list){var index=role_list.indexOf(data_id);if(index>=0){role_list.splice(index,1);horizon.membership.update_role_lists(step_slug,role_id,role_list);}},remove_member_from_role:function(step_slug,data_id,role_id){var role_list;if(role_id){role_list=horizon.membership.current_membership[step_slug][role_id];horizon.membership.remove_member(step_slug,data_id,role_id,role_list);}
+else{for(var role in horizon.membership.current_membership[step_slug]){role_list=horizon.membership.current_membership[step_slug][role];horizon.membership.remove_member(step_slug,data_id,role,role_list);}}},add_member_to_role:function(step_slug,data_id,role_id){var role_list=horizon.membership.current_membership[step_slug][role_id];role_list.push(data_id);horizon.membership.update_role_lists(step_slug,role_id,role_list);},update_member_role_dropdown:function(step_slug,data_id,role_ids,member_el){if(typeof(role_ids)==='undefined'){role_ids=horizon.membership.get_member_roles(step_slug,data_id);}
+if(typeof(member_el)==='undefined'){member_el=horizon.membership.get_member_element(step_slug,data_id);}
+var $dropdown=member_el.find("li.member").siblings('.dropdown');var $role_items=$dropdown.children('.role_dropdown').children('li');$role_items.each(function(idx,el){if(_.contains(role_ids,$(el).data('role-id'))){$(el).addClass('selected');}else{$(el).removeClass('selected');}});var $roles_display=$dropdown.children('.dropdown-toggle').children('.roles_display');var roles_to_display=[];for(var i=0;i<role_ids.length;i++){if(i==2){roles_to_display.push('...');break;}
+roles_to_display.push(horizon.membership.roles[step_slug][role_ids[i]]);}
+text=roles_to_display.join(', ');if(text.length==0)text=gettext('No roles');$roles_display.text(text);},generate_member_element:function(step_slug,display_name,data_id,role_ids,text){var str_id="id_"+step_slug+"_"+data_id;var roles=[];for(var r in horizon.membership.roles[step_slug]){var role={};role['role_id']=r;role['role_name']=horizon.membership.roles[step_slug][r];roles.push(role);}
+var template=horizon.templates.compiled_templates["#membership_template"],params={data_id:str_id,step_slug:step_slug,default_role:horizon.membership.roles[horizon.membership.default_role_id[step_slug]],display_name:display_name,text:text,roles:roles},member_el=$(template.render(params));this.update_member_role_dropdown(step_slug,str_id,role_ids,member_el);return $(member_el);},generate_html:function(step_slug){var data;for(data in horizon.membership.data[step_slug]){var data_id=data;var display_name=horizon.membership.data[step_slug][data_id];var role_ids=this.get_member_roles(step_slug,data_id);if(role_ids.length>0){$("."+step_slug+"_members").append(this.generate_member_element(step_slug,display_name,data_id,role_ids,"-"));}
+else{$(".available_"+step_slug).append(this.generate_member_element(step_slug,display_name,data_id,role_ids,"+"));}}
+horizon.membership.detect_no_results(step_slug);},update_membership:function(step_slug){$(".available_"+step_slug+", ."+step_slug+"_members").on('click',".btn-group a[href='#add_remove']",function(evt){evt.preventDefault();var available=$(".available_"+step_slug).has($(this)).length;var data_id=horizon.membership.get_field_id($(this).parent().siblings().attr('data-'+step_slug+'-id'));var member_el=$(this).parent().parent();if(available){var default_role=horizon.membership.default_role_id[step_slug];$(this).text("-");$("."+step_slug+"_members").append(member_el);horizon.membership.add_member_to_role(step_slug,data_id,default_role);if(horizon.membership.has_roles[step_slug]){$(this).parent().siblings(".role_options").show();horizon.membership.update_member_role_dropdown(step_slug,data_id,[default_role],member_el);}}
+else{$(this).text("+");$(this).parent().siblings(".role_options").hide();$(".available_"+step_slug).append(member_el);horizon.membership.remove_member_from_role(step_slug,data_id);}
+horizon.membership.list_filtering(step_slug);horizon.membership.detect_no_results(step_slug);$("input."+step_slug+"_filter").val("");});},detect_no_results:function(step_slug){$('.'+step_slug+'_filterable').each(function(){var css_class=$(this).find('ul').attr('class');var filter=_.find(css_class.split(' '),function(val){return val.indexOf(step_slug)!=-1;});if(!$('.'+filter).children('ul').length){$('#no_'+filter).show();$("input[id='"+filter+"']").attr('disabled','disabled');}
+else{$('#no_'+filter).hide();$("input[id='"+filter+"']").removeAttr('disabled');}});},select_member_role:function(step_slug){$(".available_"+step_slug+", ."+step_slug+"_members").on('click','.role_dropdown li',function(evt){evt.preventDefault();evt.stopPropagation();var new_role_id=$(this).attr("data-role-id");var id_str=$(this).parent().parent().siblings(".member").attr("data-"+step_slug+"-id");var data_id=horizon.membership.get_field_id(id_str);if($(this).hasClass('selected')){$(this).removeClass('selected');horizon.membership.remove_member_from_role(step_slug,data_id,new_role_id);}else{$(this).addClass('selected');horizon.membership.add_member_to_role(step_slug,data_id,new_role_id);}
+horizon.membership.update_member_role_dropdown(step_slug,data_id);});},add_new_member:function(step_slug){$("select[id='id_new_"+step_slug+"']").on('change',function(evt){var display_name=$(this).find("option").text();var data_id=$(this).find("option").attr("value");var default_role_id=horizon.membership.default_role_id[step_slug];$("."+step_slug+"_members").append(horizon.membership.generate_member_element(step_slug,display_name,data_id,[default_role_id],"-"));horizon.membership.data[step_slug][data_id]=display_name;$("select[multiple='multiple']").append("<option value='"+data_id+"'>"+horizon.membership.data[step_slug][data_id]+"</option>");horizon.membership.add_member_to_role(step_slug,data_id,default_role_id);$(this).text("");horizon.membership.list_filtering(step_slug);horizon.membership.detect_no_results(step_slug);$("input.filter").val("");$("."+step_slug+"_members .btn-group").removeClass('last_stripe');$("."+step_slug+"_members .btn-group:last").addClass('last_stripe');});},add_new_member_styling:function(step_slug){var add_member_el=$("label[for='id_new_"+step_slug+"']").parent();$(add_member_el).find("select").hide();$("#add_"+step_slug).append($(add_member_el));$(add_member_el).addClass("add_"+step_slug);$(add_member_el).find("label, .input").addClass("add_"+step_slug+"_btn");},fix_stripes:function(step_slug){$('.fake_'+step_slug+'_table').each(function(){var filter="."+$(this).attr('id');var visible=" .btn-group:visible";var even=" .btn-group:visible:even";var last=" .btn-group:visible:last";$(filter+visible).removeClass('dark_stripe');$(filter+visible).addClass('light_stripe');$(filter+even).removeClass('light_stripe');$(filter+even).addClass('dark_stripe');$(filter+visible).removeClass('last_stripe');$(filter+last).addClass('last_stripe');});},list_filtering:function(step_slug){$('input.'+step_slug+'_filter').unbind();$('.'+step_slug+'_filterable').each(function(){var css_class=$(this).children().children('ul').attr('class');var filter=_.find(css_class.split(' '),function(val){return val.indexOf(step_slug)!=-1;});var input=$("input[id='"+filter+"']");input.quicksearch('ul.'+filter+' ul li span.display_name',{'delay':200,'loader':'span.loading','show':function(){$(this).parent().parent().show();if(filter=="available_"+step_slug){$(this).parent('.dropdown-toggle').hide();}},'hide':function(){$(this).parent().parent().hide();},'noResults':'ul#no_'+filter,'onAfter':function(){horizon.membership.fix_stripes(step_slug);},'prepareQuery':function(val){return new RegExp(val,"i");},'testQuery':function(query,txt,span){if($(input).attr('id')==filter){$(input).prev().removeAttr('disabled');return query.test($(span).text());}
 else
-return true;}});});},workflow_init:function(modal){$(".tab-content, .workflow").addClass("dropdown_fix");$(modal).find('form').each(function(){var $form=$(this);if($form.find('div.project_membership').length==0){return;}
-horizon.projects.init_properties();horizon.projects.generate_html();horizon.projects.update_membership();horizon.projects.select_member_role();horizon.projects.add_new_user();$form.find(".available_users .role_options").hide();if(!horizon.projects.has_roles){$form.find(".project_members .role_options").hide();}
-$form.find("#update_project__update_members input").blur();$form.find('.project_membership').keydown(function(event){if(event.keyCode==13){event.preventDefault();return false;}});horizon.projects.add_new_user_styling();horizon.projects.list_filtering();horizon.projects.detect_no_results();$form.find('.fake_table').each(function(){var filter="."+$(this).attr('id');$(filter+' .btn-group:even').addClass('dark_stripe');$(filter+' .btn-group:last').addClass('last_stripe');});});}};horizon.network_topology={model:null,network_margin:270,topologyCanvas_padding:120,min_network_height:500,port_margin:20,device_initial_position:40,device_last_position:0,device_left_position:90,device_margin:20,device_min_height:45,port_initial_position:1,network_index:{},network_color_unit:0,network_saturation:1,network_lightness:0.7,reload_duration:10000,spinner:null,init:function(){var self=this;$("#topologyCanvas").spin(horizon.conf.spinner_options.modal);self.retrieve_network_info();setInterval(function(){self.retrieve_network_info();},self.reload_duration);},retrieve_network_info:function(){var self=this;if($("#networktopology").length===0){return;}
-$.getJSON($("#networktopology").data("networktopology"),function(data){self.draw_graph(data);});},draw_loading:function(){$("#topologyCanvas").spin(horizon.conf.spinner_options.modal);},draw_graph:function(data){var canvas=$("#topologyCanvas");var networks=$("#topologyCanvas > .networks");var nodata=$("#topologyCanvas > .nodata");networks.show();nodata.hide();canvas.spin(false);networks.empty();this.model=data;this.device_last_position=this.device_initial_position;var network_elements=this.draw_networks();var router_elements=this.draw_routers();var server_elements=this.draw_servers();if((network_elements+router_elements+server_elements)<=0){networks.hide();nodata.show();}else{canvas.height(Math.max(this.device_last_position+this.topologyCanvas_padding,this.min_network_height));networks.width(this.model.networks.length*this.network_margin);}},network_color:function(network_id){var max_hue=360;var num_network=this.model.networks.length;if(num_network<=0){return;}
-num_network++;var hue=Math.floor(max_hue/num_network*(this.network_index(network_id)+1));return this.hsv2rgb(hue,this.network_saturation,this.network_lightness);},hsv2rgb:function(h,s,v){var hi=Math.round(h/60)%6;var f=h/60-hi;var p=v*(1-s);var q=v*(1-f*s);var t=v*(1-(1-f)*s);switch(hi){case 0:r=v;g=t;b=p;break;case 1:r=q;g=v;b=p;break;case 2:r=p;g=v;b=t;break;case 3:r=p;g=q;b=v;break;case 4:r=t;g=p;b=v;break;case 5:r=v;g=p;b=q;break;}
-return"rgb("+Math.round(r*255)+","+Math.round(g*255)+","+Math.round(b*255)+")";},draw_networks:function(){var self=this;var networks=$("#topologyCanvas > .networks");$.each(self.model.networks,function(index,network){var label=(network.name!="")?network.name:network.id;if(network['router:external']){label+=" (external) ";}
-self.network_index[network.id]=index;var network_html=$("<div class='network' />").attr("id",network.id);var nicname_html=$("<div class='nicname'><h3>"+label+"</h3><span class='ip'>"+self.select_cidr(network.id)+"</span></div>");if(network.url==undefined){nicname_html.addClass("nourl");}else{nicname_html.click(function(){window.location.href=network.url;});}
-nicname_html.css({'background-color':self.network_color(network.id)}).appendTo(network_html);networks.append(network_html);});return self.model.networks.length;},select_cidr:function(network_id){var cidr=[];$.each(this.model.subnets,function(index,subnet){if(subnet.network_id!=network_id){return;}
-cidr.push(subnet.cidr);});return cidr.join(', ');},draw_devices:function(type){var self=this;$.each(self.model[type+'s'],function(index,device){var id=device.id;var name=(device.name!="")?device.name:device.id;var ports=self.select_port(id);if(ports.length<=0){return;}
-var main_port=self.select_main_port(ports);var parent_network=main_port.network_id;var device_html=$("<div class='"+type+"'></div>");device_html.attr('id',device.id).css({top:self.device_last_position,position:'absolute'}).append($("<span class='devicename'><i></i>"+type+"</span>")).click(function(e){e.stopPropagation();window.location.href=device.url;});var name_html=$("<span class='name'></span>").html(device.name).attr('title',device.name).appendTo(device_html);var port_position=self.port_initial_position;$.each(ports,function(){var port=this;var port_html=self.port_html(port);port_position+=self.port_margin;self.port_css(port_html,port_position,parent_network,port.network_id);device_html.append(port_html);});port_position+=self.port_margin;device_html.css({height:Math.max(self.device_min_height,port_position)+"px"});self.device_last_position+=device_html.height()+self.device_margin;$("#"+parent_network).append(device_html);$('div.port span.ip').each(function(i,ip){$(ip).css('top','-'+$(ip).height()+'px');});});return self.model[type+'s'].length;},sum_port_length:function(network_id,ports){var self=this;var sum_port_length=0;var base_index=self.network_index(network_id);$.each(ports,function(index,port){sum_port_length+=base_index-self.network_index(port.network_id);});return sum_port_length;},select_main_port:function(ports){var main_port_index=0;var MAX_INT=4294967295;var min_port_length=MAX_INT;$.each(ports,function(index,port){port_length=horizon.network_topology.sum_port_length(port.network_id,ports)
-if(port_length<min_port_length){min_port_length=port_length;main_port_index=index;}})
-return ports[main_port_index];},draw_routers:function(){return this.draw_devices('router');},draw_servers:function(){return this.draw_devices('server');},select_port:function(device_id){return $.map(this.model.ports,function(port,index){if(port.device_id==device_id){return port;}});},port_html:function(port){var self=this;var port_html=$('<div class="port"><div class="dot"></div></div>');var ip_label="";$.each(port.fixed_ips,function(){ip_label+=this.ip_address+"<br />";})
-var ip_html=$('<span class="ip" />').html(ip_label);port_html.append(ip_html).css({'background-color':self.network_color(port.network_id)}).click(function(e){e.stopPropagation();if(port.url!=undefined){window.location.href=port.url;}});if(port.url==undefined){port_html.addClass("nourl");}
-return port_html;},port_css:function(port_html,position,network_a,network_b){var self=this;var index_diff=self.network_index(network_a)-self.network_index(network_b);var width=self.network_margin*index_diff;var direction="left";if(width<0){direction="right";width+=self.network_margin;}
-width=Math.abs(width)+self.device_left_position;var port_css={};port_css['width']=width+"px";port_css['top']=position+"px";port_css[direction]=(-width-3)+"px";port_html.addClass(direction).css(port_css);},network_index:function(network_id){return horizon.network_topology.network_index[network_id];}}
-horizon.addInitFunction(function(){horizon.network_topology.init();});horizon.d3_pie_chart={w:100,h:100,r:45,bkgrnd:"#F2F2F2",frgrnd:"#006CCF",full:"#D0342B",nearlyfull:"orange",init:function(){var self=this;var pie_chart_data=$(".d3_pie_chart");self.chart=d3.selectAll(".d3_pie_chart");for(var i=0;i<pie_chart_data.length;i++){used=parseInt(pie_chart_data[i].dataset.used);self.data=[{"percentage":used},{"percentage":100-used}];self.pieChart(i);}},pieChart:function(i){var self=this;var vis=d3.select(self.chart[0][i]).append("svg:svg").attr("class","chart").attr("width",self.w).attr("height",self.h).style("background-color","white").append("g").attr("transform","translate("+(self.r+2)+","+(self.r+2)+")")
+return true;}});});},workflow_init:function(modal,step_slug,step_id){$(".tab-content, .workflow").addClass("dropdown_fix");$(modal).find('form').each(function(){var $form=$(this);if($form.find('div.'+step_slug+'_membership').length==0){return;}
+horizon.membership.init_properties(step_slug);horizon.membership.generate_html(step_slug);horizon.membership.update_membership(step_slug);horizon.membership.select_member_role(step_slug);horizon.membership.add_new_member(step_slug);$form.find(".available_"+step_slug+" .role_options").hide();if(!horizon.membership.has_roles[step_slug]){$form.find("."+step_slug+"_members .role_options").hide();}
+if(step_id.indexOf('update')==0){$form.find("#"+step_id+" input").blur();}
+$form.find('.'+step_slug+'_membership').keydown(function(event){if(event.keyCode==13){event.preventDefault();return false;}});horizon.membership.add_new_member_styling(step_slug);horizon.membership.list_filtering(step_slug);horizon.membership.detect_no_results(step_slug);$form.find('.fake_'+step_slug+'_table').each(function(){var filter="."+$(this).attr('id');$(filter+' .btn-group:even').addClass('dark_stripe');$(filter+' .btn-group:last').addClass('last_stripe');});});}};horizon.network_topology={model:null,svg:'#topology_canvas',svg_container:'#topologyCanvasContainer',post_messages:'#topologyMessages',network_tmpl:{small:'#topology_template > .network_container_small',normal:'#topology_template > .network_container_normal'},router_tmpl:{small:'#topology_template > .router_small',normal:'#topology_template > .router_normal'},instance_tmpl:{small:'#topology_template > .instance_small',normal:'#topology_template > .instance_normal'},balloon_tmpl:null,balloon_device_tmpl:null,balloon_port_tmpl:null,network_index:{},balloon_id:null,reload_duration:10000,draw_mode:'normal',network_height:0,previous_message:null,element_properties:{normal:{network_width:270,network_min_height:500,top_margin:80,default_height:50,margin:20,device_x:98.5,device_width:90,port_margin:16,port_height:6,port_width:82,port_text_margin:{x:6,y:-4},texts_bg_y:32,type_y:46,balloon_margin:{x:12,y:-12}},small:{network_width:100,network_min_height:400,top_margin:50,default_height:20,margin:30,device_x:47.5,device_width:20,port_margin:5,port_height:3,port_width:32.5,port_text_margin:{x:0,y:0},texts_bg_y:0,type_y:0,balloon_margin:{x:12,y:-30}},cidr_margin:5,device_name_max_size:9,device_name_suffix:'..'},init:function(){var self=this;$(self.svg_container).spin(horizon.conf.spinner_options.modal);if($('#networktopology').length===0){return;}
+self.color=d3.scale.category10();self.balloon_tmpl=Hogan.compile($('#balloon_container').html());self.balloon_device_tmpl=Hogan.compile($('#balloon_device').html());self.balloon_port_tmpl=Hogan.compile($('#balloon_port').html());$(document).on('click','a.closeTopologyBalloon',function(e){e.preventDefault();self.delete_balloon();}).on('click','.topologyBalloon',function(e){e.stopPropagation();}).on('click','a.vnc_window',function(e){e.preventDefault();var vnc_window=window.open($(this).attr('href'),vnc_window,'width=760,height=560');self.delete_balloon();}).click(function(){self.delete_balloon();});$('.toggleView > .btn').click(function(){self.draw_mode=$(this).data('value');$('g.network').remove();$.cookie('ntp_draw_mode',self.draw_mode);self.data_convert();});$(window).on('message',function(e){var message=JSON.parse(e.originalEvent.data);if(self.previous_message!=message.message){horizon.alert(message.type,message.message);horizon.autoDismissAlerts();self.previous_message=message.message;self.delete_post_message(message.iframe_id);self.load_network_info();setTimeout(function(){self.previous_message=null;},10000);}});self.load_network_info();setInterval(function(){self.load_network_info();},self.reload_duration);},load_network_info:function(){var self=this;if($('#networktopology').length===0){return;}
+$.getJSON($('#networktopology').data('networktopology')+'?'+$.now(),function(data){self.model=data;self.data_convert();});},select_draw_mode:function(){var self=this;var draw_mode=$.cookie('ntp_draw_mode');if(draw_mode&&(draw_mode=='normal'|draw_mode=='small')){self.draw_mode=draw_mode;}else{if(self.model.networks.length*self.element_properties.normal.network_width>$('#topologyCanvas').width()){self.draw_mode='small';}else{self.draw_mode='normal';}
+$.cookie('ntp_draw_mode',self.draw_mode);}
+$('.toggleView > .btn').each(function(){var $this=$(this);if($this.hasClass(self.draw_mode)){$this.addClass('active');}});},data_convert:function(){var self=this;var model=self.model;$.each(model.networks,function(index,network){self.network_index[network.id]=index;});self.select_draw_mode();var element_properties=self.element_properties[self.draw_mode];self.network_height=element_properties.top_margin;$.each([{model:model.routers,type:'router'},{model:model.servers,type:'instance'}],function(index,devices){var type=devices.type;var model=devices.model;$.each(model,function(index,device){device.type=type;device.ports=self.select_port(device.id);var hasports=(device.ports.length<=0)?false:true;device.parent_network=(hasports)?self.select_main_port(device.ports).network_id:self.model.networks[0].id;var height=element_properties.port_margin*(device.ports.length-1);device.height=(self.draw_mode=='normal'&&height>element_properties.default_height)?height:element_properties.default_height;device.pos_y=self.network_height;device.port_height=(self.draw_mode=='small'&&height>device.height)?1:element_properties.port_height;device.port_margin=(self.draw_mode=='small'&&height>device.height)?device.height/device.ports.length:element_properties.port_margin;self.network_height+=device.height+element_properties.margin;});});$.each(model.networks,function(index,network){network.devices=[];$.each([model.routers,model.servers],function(index,devices){$.each(devices,function(index,device){if(network.id==device.parent_network){network.devices.push(device);}});});});self.network_height+=element_properties.top_margin;self.network_height=(self.network_height>element_properties.network_min_height)?self.network_height:element_properties.network_min_height;self.draw_topology();},draw_topology:function(){var self=this;$(self.svg_container).spin(false);$(self.svg_container).removeClass('noinfo');if(self.model.networks.length<=0){$('g.network').remove();$(self.svg_container).addClass('noinfo');return;}
+var svg=d3.select(self.svg);var element_properties=self.element_properties[self.draw_mode];svg.attr('width',self.model.networks.length*element_properties.network_width).attr('height',self.network_height);var network=svg.selectAll('g.network').data(self.model.networks);var network_enter=network.enter().append('g').attr('class','network').each(function(d,i){this.appendChild(d3.select(self.network_tmpl[self.draw_mode]).node().cloneNode(true));var $this=d3.select(this).select('.network-rect');if(d.url){var $this=d3.select(this).select('.network-rect');$this.on('mouseover',function(){$this.transition().style('fill',function(){return d3.rgb(self.network_color(d.id)).brighter(0.5)});}).on('mouseout',function(){$this.transition().style('fill',function(){return self.network_color(d.id)});}).on('click',function(){window.location.href=d.url;});}else{$this.classed('nourl',true);}});network.attr('id',function(d){return'id_'+d.id;}).attr('transform',function(d,i){return'translate('+element_properties.network_width*i+','+0+')'}).select('.network-rect').attr('height',function(d){return self.network_height}).style('fill',function(d){return self.network_color(d.id)});network.select('.network-name').attr('x',function(d){return self.network_height/2}).text(function(d){return d.name;});network.select('.network-cidr').attr('x',function(d){return self.network_height-self.element_properties.cidr_margin}).text(function(d){var cidr=$.map(d.subnets,function(n,i){return n.cidr;});return cidr.join(', ');});network.exit().remove();var device=network.selectAll('g.device').data(function(d){return d.devices;});var device_enter=device.enter().append("g").attr('class','device').each(function(d,i){var device_template=self[d.type+'_tmpl'][self.draw_mode];this.appendChild(d3.select(device_template).node().cloneNode(true));});device_enter.on('mouseenter',function(d){var $this=$(this);self.show_balloon(d,$this);}).on('click',function(){d3.event.stopPropagation();});device.attr('id',function(d){return'id_'+d.id;}).attr('transform',function(d,i){return'translate('+element_properties.device_x+','+d.pos_y+')';}).select('.frame').attr('height',function(d){return d.height;});device.select('.texts_bg').attr('y',function(d){return element_properties.texts_bg_y+d.height-element_properties.default_height;});device.select('.type').attr('y',function(d){return element_properties.type_y+d.height-element_properties.default_height;});device.select('.name').text(function(d){return self.string_truncate(d.name);});device.each(function(d){if(d.status=='BUILD'){d3.select(this).classed('loading',true);}else if(d.task=='deleting'){d3.select(this).classed('loading',true);if('bl_'+d.id==self.balloon_id){self.delete_balloon();}}else{d3.select(this).classed('loading',false);if('bl_'+d.id==self.balloon_id){var $this=$(this);self.show_balloon(d,$this);}}});device.exit().each(function(d){if('bl_'+d.id==self.balloon_id){self.delete_balloon();}}).remove();var port=device.select('g.ports').selectAll('g.port').data(function(d){return d.ports;});var port_enter=port.enter().append('g').attr('class','port').attr('id',function(d){return'id_'+d.id;});port_enter.append('line').attr('class','port_line');port_enter.append('text').attr('class','port_text');device.select('g.ports').each(function(d,i){this._portdata={};this._portdata.ports_length=d.ports.length;this._portdata.parent_network=d.parent_network;this._portdata.device_height=d.height;this._portdata.port_height=d.port_height;this._portdata.port_margin=d.port_margin;this._portdata.left=0;this._portdata.right=0;$(this).mouseenter(function(e){e.stopPropagation();});});port.each(function(d,i){var index_diff=self.network_index(this.parentNode._portdata.parent_network)-
+self.network_index(d.network_id);this._index_diff=index_diff=(index_diff>=0)?++index_diff:index_diff;this._direction=(this._index_diff<0)?'right':'left';this._index=this.parentNode._portdata[this._direction]++;});port.attr('transform',function(d,i){var x=(this._direction=='left')?0:element_properties.device_width;var ports_length=this.parentNode._portdata[this._direction];var distance=this.parentNode._portdata.port_margin;var y=(this.parentNode._portdata.device_height-
+(ports_length-1)*distance)/2+this._index*distance;return'translate('+x+','+y+')';});port.select('.port_line').attr('stroke-width',function(d,i){return this.parentNode.parentNode._portdata.port_height;}).attr('stroke',function(d,i){return self.network_color(d.network_id)}).attr('x1',0).attr('y1',0).attr('y2',0).attr('x2',function(d,i){var parent=this.parentNode;var width=(Math.abs(parent._index_diff)-1)*element_properties.network_width+
+element_properties.port_width;return(parent._direction=='left')?-1*width:width;});port.select('.port_text').attr('x',function(d){var parent=this.parentNode;if(parent._direction=='left'){d3.select(this).classed('left',true);return element_properties.port_text_margin.x*-1;}else{d3.select(this).classed('left',false);return element_properties.port_text_margin.x;}}).attr('y',function(d){return element_properties.port_text_margin.y}).text(function(d){var ip_label=[];$.each(d.fixed_ips,function(){ip_label.push(this.ip_address);});return ip_label.join(',');});port.exit().remove();},network_color:function(network_id){return this.color(this.network_index(network_id));},network_index:function(network_id){return this.network_index[network_id];},select_port:function(device_id){return $.map(this.model.ports,function(port,index){if(port.device_id==device_id){return port;}});},select_main_port:function(ports){var _self=this;var main_port_index=0;var MAX_INT=4294967295;var min_port_length=MAX_INT;$.each(ports,function(index,port){var port_length=_self.sum_port_length(port.network_id,ports);if(port_length<min_port_length){min_port_length=port_length;main_port_index=index;}});return ports[main_port_index];},sum_port_length:function(network_id,ports){var self=this;var sum_port_length=0;var base_index=self.network_index(network_id);$.each(ports,function(index,port){sum_port_length+=base_index-self.network_index(port.network_id);});return sum_port_length;},string_truncate:function(string){var self=this;var str=string;var max_size=self.element_properties.device_name_max_size;var suffix=self.element_properties.device_name_suffix;var bytes=0;for(var i=0;i<str.length;i++){bytes+=str.charCodeAt(i)<=255?1:2;if(bytes>max_size){str=str.substr(0,i)+suffix;break;}}
+return str;},delete_device:function(type,device_id){var self=this;var message={id:device_id};self.post_message(device_id,type,message);},delete_port:function(router_id,port_id){var self=this;var message={id:port_id};self.post_message(port_id,'router/'+router_id+'/',message);},show_balloon:function(d,element){var self=this;var element_properties=self.element_properties[self.draw_mode];if(self.balloon_id){self.delete_balloon();}
+var balloon_tmpl=self.balloon_tmpl;var device_tmpl=self.balloon_device_tmpl;var port_tmpl=self.balloon_port_tmpl;var balloon_id='bl_'+d.id;var ports=[];$.each(d.ports,function(i,port){var object={};object.id=port.id;object.router_id=port.device_id;object.url=port.url;object.port_status=port.status;object.port_status_css=(port.status=="ACTIVE")?'active':'down';var ip_address='';try{ip_address=port.fixed_ips[0].ip_address;}catch(e){ip_address='no info';}
+var device_owner='';try{device_owner=port.device_owner.replace('network:','');}catch(e){device_owner='no info';}
+object.ip_address=ip_address;object.device_owner=device_owner;object.is_interface=(device_owner=='router_interface')?true:false;ports.push(object);});var html_data={balloon_id:balloon_id,id:d.id,url:d.url,name:d.name,type:d.type,type_capital:d.type.replace(/^\w/,function($0){return $0.toUpperCase()}),id:d.id,status:d.status,status_class:(d.status=="ACTIVE")?'active':'down'};if(d.type=='router'){html_data.port=ports;html=balloon_tmpl.render(html_data,{table1:device_tmpl,table2:port_tmpl});}else if(d.type=='instance'){html_data.console_id=d.id;html_data.console=d.console;html=balloon_tmpl.render(html_data,{table1:device_tmpl});}else{return;}
+$(self.svg_container).append(html);var device_position=element.find('.frame');var x=device_position.position().left+
+element_properties.device_width+
+element_properties.balloon_margin.x;var y=device_position.position().top+
+element_properties.balloon_margin.y;$('#'+balloon_id).css({'left':x+'px','top':y+'px'}).show();var $balloon=$('#'+balloon_id);if($balloon.offset().left+$balloon.outerWidth()>$(window).outerWidth()){$balloon.css({'left':0+'px'}).css({'left':device_position.position().left
+-$balloon.outerWidth()
+-element_properties.balloon_margin.x+'px'}).addClass('leftPosition');}
+$balloon.find('.delete-device').click(function(e){var $this=$(this);$this.addClass('deleting');d3.select('#id_'+$this.data('device-id')).classed('loading',true);self.delete_device($this.data('type'),$this.data('device-id'));});$balloon.find('.delete-port').click(function(e){var $this=$(this);self.delete_port($this.data('router-id'),$this.data('port-id'));});self.balloon_id=balloon_id;},delete_balloon:function(){var self=this;if(self.balloon_id){$('#'+self.balloon_id).remove()
+self.balloon_id=null;}},post_message:function(id,url,message){var self=this;var iframe_id='ifr_'+id;var iframe=$('<iframe width="500" height="300" />').attr('id',iframe_id).attr('src',url).appendTo(self.post_messages);iframe.on('load',function(){$(this).get(0).contentWindow.postMessage(JSON.stringify(message,null,2),'*');});},delete_post_message:function(id){$('#'+id).remove();}};horizon.addInitFunction(function(){horizon.network_topology.init();});horizon.d3_pie_chart={w:100,h:100,r:45,bkgrnd:"#F2F2F2",frgrnd:"#006CCF",full:"#D0342B",nearlyfull:"orange",init:function(){var self=this;var pie_chart_data=$(".d3_pie_chart");self.chart=d3.selectAll(".d3_pie_chart");for(var i=0;i<pie_chart_data.length;i++){used=parseInt(pie_chart_data[i].dataset.used);self.data=[{"percentage":used},{"percentage":100-used}];self.pieChart(i);}},pieChart:function(i){var self=this;var vis=d3.select(self.chart[0][i]).append("svg:svg").attr("class","chart").attr("width",self.w).attr("height",self.h).style("background-color","white").append("g").attr("transform","translate("+(self.r+2)+","+(self.r+2)+")")
 var arc=d3.svg.arc().outerRadius(self.r).innerRadius(0)
 var pie=d3.layout.pie().sort(null).value(function(d){return d.percentage;})
 var piechart=vis.selectAll(".arc").data(pie([{"percentage":10}])).enter().append("path").attr("class","arc").attr("d",arc).style("fill",function(d){if(self.data[0].percentage>=100){return self.full;}else if(self.data[0].percentage>=80){return self.nearlyfull;}else{return self.frgrnd;}}).style("stroke","#CCCCCC").style("stroke-width",1).each(function(d){return self.current=d;})
 animate=function(data){var piechart=vis.selectAll(".arc").data(pie(data)).enter().append("path").attr("class","arc").attr("d",arc).style("fill",self.bkgrnd).style("stroke","#CCCCCC").style("stroke-width",1).each(function(d){return self.current=d;}).transition().duration(500).attrTween("d",function(a){var tween=d3.interpolate(self.current,a);self.current=tween(0);return function(t){return arc(tween(t));}})}
 animate(self.data)}}
-horizon.addInitFunction(function(){horizon.d3_pie_chart.init();});var container="#heat_resource_topology";if($(container).length){var width=$(container).width(),height=500,stack_id=$("#stack_id").data("stack_id"),ajax_url='/project/stacks/get_d3_data/'+stack_id+'/',graph=$("#d3_data").data("d3_data"),force=d3.layout.force().nodes(graph.nodes).links([]).gravity(0.1).charge(-2000).linkDistance(100).size([width,height]).on("tick",tick),svg=d3.select(container).append("svg").attr("width",width).attr("height",height),node=svg.selectAll(".node"),link=svg.selectAll(".link"),needs_update=false,nodes=force.nodes(),links=force.links();build_links();update();function update(){node=node.data(nodes,function(d){return d.name});link=link.data(links);var nodeEnter=node.enter().append("g").attr("class","node").attr("node_name",function(d){return d.name}).attr("node_id",function(d){return d.instance}).call(force.drag);nodeEnter.append("image").attr("xlink:href",function(d){return d.image;}).attr("id",function(d){return"image_"+d.name}).attr("x",function(d){return d.image_x;}).attr("y",function(d){return d.image_y;}).attr("width",function(d){return d.image_size;}).attr("height",function(d){return d.image_size;});node.exit().remove();link.enter().insert("svg:line","g.node").attr("class","link").style("stroke-width",function(d){return Math.sqrt(d.value);});link.exit().remove();node.on("mouseover",function(d){$("#info_box").html(d.info_box);current_info=d.name;});node.on("mouseout",function(d){$("#info_box").html('');});force.start();}
+horizon.addInitFunction(function(){horizon.d3_pie_chart.init();});var container="#heat_resource_topology";function update(){node=node.data(nodes,function(d){return d.name;});link=link.data(links);var nodeEnter=node.enter().append("g").attr("class","node").attr("node_name",function(d){return d.name;}).attr("node_id",function(d){return d.instance;}).call(force.drag);nodeEnter.append("image").attr("xlink:href",function(d){return d.image;}).attr("id",function(d){return"image_"+d.name;}).attr("x",function(d){return d.image_x;}).attr("y",function(d){return d.image_y;}).attr("width",function(d){return d.image_size;}).attr("height",function(d){return d.image_size;});node.exit().remove();link.enter().insert("svg:line","g.node").attr("class","link").style("stroke-width",function(d){return Math.sqrt(d.value);});link.exit().remove();node.on("mouseover",function(d){$("#info_box").html(d.info_box);current_info=d.name;});node.on("mouseout",function(d){$("#info_box").html('');});force.start();}
 function tick(){link.attr("x1",function(d){return d.source.x;}).attr("y1",function(d){return d.source.y;}).attr("x2",function(d){return d.target.x;}).attr("y2",function(d){return d.target.y;});node.attr("transform",function(d){return"translate("+d.x+","+d.y+")";});}
-$("#stack_box").html(graph.stack.info_box);var in_progress=false;set_in_progress(graph.stack,node);var poll_time=0;if(in_progress==true){poll_time=3000;}
-else{poll_time=30000;}
-ajax_poll(poll_time);function set_in_progress(stack,nodes){if(stack.in_progress==true){in_progress=true;}
-for(var i=0;i<nodes.length;i++){var d=nodes[i];if(d.in_progress==true){in_progress=true;return false;}}}
-function findNode(name){for(var i=0;i<nodes.length;i++){if(nodes[i].name===name){return nodes[i];}};};function findNodeIndex(name){for(var i=0;i<nodes.length;i++){if(nodes[i].name==name){return i;}};};function addNode(node){nodes.push(node);needs_update=true;};function removeNode(name){var i=0;var n=findNode(name);while(i<links.length){if((links[i]['source']==n)||(links[i]['target']==n))
+function set_in_progress(stack,nodes){if(stack.in_progress===true){in_progress=true;}
+for(var i=0;i<nodes.length;i++){var d=nodes[i];if(d.in_progress===true){in_progress=true;return false;}}}
+function findNode(name){for(var i=0;i<nodes.length;i++){if(nodes[i].name===name){return nodes[i];}}}
+function findNodeIndex(name){for(var i=0;i<nodes.length;i++){if(nodes[i].name===name){return i;}}}
+function addNode(node){nodes.push(node);needs_update=true;}
+function removeNode(name){var i=0;var n=findNode(name);while(i<links.length){if((links[i]['source']==n)||(links[i]['target']==n))
 {links.splice(i,1);}
 else i++;}
-nodes.splice(findNodeIndex(name),1);needs_update=true;};function remove_nodes(old_nodes,new_nodes){for(var i=0;i<old_nodes.length;i++){var remove_node=true;for(var j=0;j<new_nodes.length;j++){if(old_nodes[i].name==new_nodes[j].name){remove_node=false;break;}}
-if(remove_node==true){removeNode(old_nodes[i].name);}}}
+nodes.splice(findNodeIndex(name),1);needs_update=true;}
+function remove_nodes(old_nodes,new_nodes){for(var i=0;i<old_nodes.length;i++){var remove_node=true;for(var j=0;j<new_nodes.length;j++){if(old_nodes[i].name==new_nodes[j].name){remove_node=false;break;}}
+if(remove_node===true){removeNode(old_nodes[i].name);}}}
 function build_links(){for(var i=0;i<nodes.length;i++){build_node_links(nodes[i]);build_reverse_links(nodes[i]);}}
 function build_node_links(node){for(var j=0;j<node.required_by.length;j++){var push_link=true;var target_idx='';var source_idx=findNodeIndex(node.name);try{target_idx=findNodeIndex(node.required_by[j]);}catch(err){console.log(err);push_link=false;}
 for(var lidx=0;lidx<links.length;lidx++){if((links[lidx]['source']==source_idx)&&(links[lidx]['target']==target_idx))
 {push_link=false;break;}}
-if(push_link==true&&(source_idx&&target_idx)){links.push({'source':source_idx,'target':target_idx,'value':1});}}}
-function build_reverse_links(node){for(var i=0;i<nodes.length;i++){if(nodes[i].required_by){for(var j=0;j<nodes[i].required_by.length;j++){var dependency=nodes[i].required_by[j];if(node.name==dependency){links.push({'source':findNodeIndex(nodes[i].name),'target':findNodeIndex(node.name),'value':1})}}}}}
-function ajax_poll(poll_time){setTimeout(function(){$.getJSON(ajax_url,function(json){$("#d3_data").attr("data-d3_data",JSON.stringify(json));$("#stack_box").html(json.stack.info_box);set_in_progress(json.stack,json.nodes);needs_update=false;remove_nodes(nodes,json.nodes);json.nodes.forEach(function(d){current_node=findNode(d.name);if(current_node){current_node.status=d.status;if(current_node.image!=d.image){current_node.image=d.image;var this_image=d3.select("#image_"+current_node.name);this_image.transition().attr("x",function(d){return d.image_x+5;}).duration(100).transition().attr("x",function(d){return d.image_x-5;}).duration(100).transition().attr("x",function(d){return d.image_x+5;}).duration(100).transition().attr("x",function(d){return d.image_x-5;}).duration(100).transition().attr("xlink:href",d.image).transition().attr("x",function(d){return d.image_x;}).duration(100).ease("bounce")}
-current_node.info_box=d.info_box;}else{addNode(d);build_links();}});if(needs_update==true){update();}});if(in_progress==false){poll_time=30000;}
+if(push_link===true&&(source_idx&&target_idx)){links.push({'source':source_idx,'target':target_idx,'value':1});}}}
+function build_reverse_links(node){for(var i=0;i<nodes.length;i++){if(nodes[i].required_by){for(var j=0;j<nodes[i].required_by.length;j++){var dependency=nodes[i].required_by[j];if(node.name==dependency){links.push({'source':findNodeIndex(nodes[i].name),'target':findNodeIndex(node.name),'value':1});}}}}}
+function ajax_poll(poll_time){setTimeout(function(){$.getJSON(ajax_url,function(json){$("#d3_data").attr("data-d3_data",JSON.stringify(json));$("#stack_box").html(json.stack.info_box);set_in_progress(json.stack,json.nodes);needs_update=false;remove_nodes(nodes,json.nodes);json.nodes.forEach(function(d){current_node=findNode(d.name);if(current_node){current_node.status=d.status;if(current_node.image!=d.image){current_node.image=d.image;var this_image=d3.select("#image_"+current_node.name);this_image.transition().attr("x",function(d){return d.image_x+5;}).duration(100).transition().attr("x",function(d){return d.image_x-5;}).duration(100).transition().attr("x",function(d){return d.image_x+5;}).duration(100).transition().attr("x",function(d){return d.image_x-5;}).duration(100).transition().attr("xlink:href",d.image).transition().attr("x",function(d){return d.image_x;}).duration(100).ease("bounce");}
+current_node.info_box=d.info_box;}else{addNode(d);build_links();}});if(needs_update===true){update();}});if(in_progress===false){poll_time=30000;}
 else{poll_time=3000;}
-ajax_poll(poll_time);},poll_time);}}
\ No newline at end of file
+ajax_poll(poll_time);},poll_time);}
+if($(container).length){var width=$(container).width(),height=500,stack_id=$("#stack_id").data("stack_id"),ajax_url='/project/stacks/get_d3_data/'+stack_id+'/',graph=$("#d3_data").data("d3_data"),force=d3.layout.force().nodes(graph.nodes).links([]).gravity(0.1).charge(-2000).linkDistance(100).size([width,height]).on("tick",tick),svg=d3.select(container).append("svg").attr("width",width).attr("height",height),node=svg.selectAll(".node"),link=svg.selectAll(".link"),needs_update=false,nodes=force.nodes(),links=force.links();build_links();update();$("#stack_box").html(graph.stack.info_box);var in_progress=false;set_in_progress(graph.stack,node);var poll_time=0;if(in_progress===true){poll_time=3000;}
+else{poll_time=30000;}
+ajax_poll(poll_time);}
+var Rickshaw={namespace:function(namespace,obj){var parts=namespace.split('.');var parent=Rickshaw;for(var i=1,length=parts.length;i<length;i++){var currentPart=parts[i];parent[currentPart]=parent[currentPart]||{};parent=parent[currentPart];}
+return parent;},keys:function(obj){var keys=[];for(var key in obj)keys.push(key);return keys;},extend:function(destination,source){for(var property in source){destination[property]=source[property];}
+return destination;},clone:function(obj){return JSON.parse(JSON.stringify(obj));}};if(typeof module!=='undefined'&&module.exports){var d3=require('d3');module.exports=Rickshaw;}
+(function(globalContext){var _toString=Object.prototype.toString,NULL_TYPE='Null',UNDEFINED_TYPE='Undefined',BOOLEAN_TYPE='Boolean',NUMBER_TYPE='Number',STRING_TYPE='String',OBJECT_TYPE='Object',FUNCTION_CLASS='[object Function]';function isFunction(object){return _toString.call(object)===FUNCTION_CLASS;}
+function extend(destination,source){for(var property in source)if(source.hasOwnProperty(property))
+destination[property]=source[property];return destination;}
+function keys(object){if(Type(object)!==OBJECT_TYPE){throw new TypeError();}
+var results=[];for(var property in object){if(object.hasOwnProperty(property)){results.push(property);}}
+return results;}
+function Type(o){switch(o){case null:return NULL_TYPE;case(void 0):return UNDEFINED_TYPE;}
+var type=typeof o;switch(type){case'boolean':return BOOLEAN_TYPE;case'number':return NUMBER_TYPE;case'string':return STRING_TYPE;}
+return OBJECT_TYPE;}
+function isUndefined(object){return typeof object==="undefined";}
+var slice=Array.prototype.slice;function argumentNames(fn){var names=fn.toString().match(/^[\s\(]*function[^(]*\(([^)]*)\)/)[1].replace(/\/\/.*?[\r\n]|\/\*(?:.|[\r\n])*?\*\//g,'').replace(/\s+/g,'').split(',');return names.length==1&&!names[0]?[]:names;}
+function wrap(fn,wrapper){var __method=fn;return function(){var a=update([bind(__method,this)],arguments);return wrapper.apply(this,a);}}
+function update(array,args){var arrayLength=array.length,length=args.length;while(length--)array[arrayLength+length]=args[length];return array;}
+function merge(array,args){array=slice.call(array,0);return update(array,args);}
+function bind(fn,context){if(arguments.length<2&&isUndefined(arguments[0]))return this;var __method=fn,args=slice.call(arguments,2);return function(){var a=merge(args,arguments);return __method.apply(context,a);}}
+var emptyFunction=function(){};var Class=(function(){var IS_DONTENUM_BUGGY=(function(){for(var p in{toString:1}){if(p==='toString')return false;}
+return true;})();function subclass(){};function create(){var parent=null,properties=[].slice.apply(arguments);if(isFunction(properties[0]))
+parent=properties.shift();function klass(){this.initialize.apply(this,arguments);}
+extend(klass,Class.Methods);klass.superclass=parent;klass.subclasses=[];if(parent){subclass.prototype=parent.prototype;klass.prototype=new subclass;try{parent.subclasses.push(klass)}catch(e){}}
+for(var i=0,length=properties.length;i<length;i++)
+klass.addMethods(properties[i]);if(!klass.prototype.initialize)
+klass.prototype.initialize=emptyFunction;klass.prototype.constructor=klass;return klass;}
+function addMethods(source){var ancestor=this.superclass&&this.superclass.prototype,properties=keys(source);if(IS_DONTENUM_BUGGY){if(source.toString!=Object.prototype.toString)
+properties.push("toString");if(source.valueOf!=Object.prototype.valueOf)
+properties.push("valueOf");}
+for(var i=0,length=properties.length;i<length;i++){var property=properties[i],value=source[property];if(ancestor&&isFunction(value)&&argumentNames(value)[0]=="$super"){var method=value;value=wrap((function(m){return function(){return ancestor[m].apply(this,arguments);};})(property),method);value.valueOf=bind(method.valueOf,method);value.toString=bind(method.toString,method);}
+this.prototype[property]=value;}
+return this;}
+return{create:create,Methods:{addMethods:addMethods}};})();if(globalContext.exports){globalContext.exports.Class=Class;}
+else{globalContext.Class=Class;}})(Rickshaw);Rickshaw.namespace('Rickshaw.Compat.ClassList');Rickshaw.Compat.ClassList=function(){if(typeof document!=="undefined"&&!("classList"in document.createElement("a"))){(function(view){"use strict";var
+classListProp="classList",protoProp="prototype",elemCtrProto=(view.HTMLElement||view.Element)[protoProp],objCtr=Object,strTrim=String[protoProp].trim||function(){return this.replace(/^\s+|\s+$/g,"");},arrIndexOf=Array[protoProp].indexOf||function(item){var
+i=0,len=this.length;for(;i<len;i++){if(i in this&&this[i]===item){return i;}}
+return-1;},DOMEx=function(type,message){this.name=type;this.code=DOMException[type];this.message=message;},checkTokenAndGetIndex=function(classList,token){if(token===""){throw new DOMEx("SYNTAX_ERR","An invalid or illegal string was specified");}
+if(/\s/.test(token)){throw new DOMEx("INVALID_CHARACTER_ERR","String contains an invalid character");}
+return arrIndexOf.call(classList,token);},ClassList=function(elem){var
+trimmedClasses=strTrim.call(elem.className),classes=trimmedClasses?trimmedClasses.split(/\s+/):[],i=0,len=classes.length;for(;i<len;i++){this.push(classes[i]);}
+this._updateClassName=function(){elem.className=this.toString();};},classListProto=ClassList[protoProp]=[],classListGetter=function(){return new ClassList(this);};DOMEx[protoProp]=Error[protoProp];classListProto.item=function(i){return this[i]||null;};classListProto.contains=function(token){token+="";return checkTokenAndGetIndex(this,token)!==-1;};classListProto.add=function(token){token+="";if(checkTokenAndGetIndex(this,token)===-1){this.push(token);this._updateClassName();}};classListProto.remove=function(token){token+="";var index=checkTokenAndGetIndex(this,token);if(index!==-1){this.splice(index,1);this._updateClassName();}};classListProto.toggle=function(token){token+="";if(checkTokenAndGetIndex(this,token)===-1){this.add(token);}else{this.remove(token);}};classListProto.toString=function(){return this.join(" ");};if(objCtr.defineProperty){var classListPropDesc={get:classListGetter,enumerable:true,configurable:true};try{objCtr.defineProperty(elemCtrProto,classListProp,classListPropDesc);}catch(ex){if(ex.number===-0x7FF5EC54){classListPropDesc.enumerable=false;objCtr.defineProperty(elemCtrProto,classListProp,classListPropDesc);}}}else if(objCtr[protoProp].__defineGetter__){elemCtrProto.__defineGetter__(classListProp,classListGetter);}}(window));}};if((typeof RICKSHAW_NO_COMPAT!=="undefined"&&!RICKSHAW_NO_COMPAT)||typeof RICKSHAW_NO_COMPAT==="undefined"){new Rickshaw.Compat.ClassList();}
+Rickshaw.namespace('Rickshaw.Graph');Rickshaw.Graph=function(args){if(!args.element)throw"Rickshaw.Graph needs a reference to an element";this.element=args.element;this.series=args.series;this.defaults={interpolation:'cardinal',offset:'zero',min:undefined,max:undefined,preserve:false};Rickshaw.keys(this.defaults).forEach(function(k){this[k]=args[k]||this.defaults[k];},this);this.window={};this.updateCallbacks=[];var self=this;this.initialize=function(args){this.validateSeries(args.series);this.series.active=function(){return self.series.filter(function(s){return!s.disabled})};this.setSize({width:args.width,height:args.height});this.element.classList.add('rickshaw_graph');this.vis=d3.select(this.element).append("svg:svg").attr('width',this.width).attr('height',this.height);for(var name in Rickshaw.Graph.Renderer){if(!name||!Rickshaw.Graph.Renderer.hasOwnProperty(name))continue;var r=Rickshaw.Graph.Renderer[name];if(!r||!r.prototype||!r.prototype.render)continue;self.registerRenderer(new r({graph:self}));}
+this.setRenderer(args.renderer||'stack',args);this.discoverRange();};this.validateSeries=function(series){if(!Array.isArray(series)&&!(series instanceof Rickshaw.Series)){var seriesSignature=Object.prototype.toString.apply(series);throw"series is not an array: "+seriesSignature;}
+var pointsCount;series.forEach(function(s){if(!(s instanceof Object)){throw"series element is not an object: "+s;}
+if(!(s.data)){throw"series has no data: "+JSON.stringify(s);}
+if(!Array.isArray(s.data)){throw"series data is not an array: "+JSON.stringify(s.data);}
+var x=s.data[0].x;var y=s.data[0].y;if(typeof x!='number'||(typeof y!='number'&&y!==null)){throw"x and y properties of points should be numbers instead of "+
+(typeof x)+" and "+(typeof y);}
+if(s.data.length>=3){if(s.data[2].x<s.data[1].x||s.data[1].x<s.data[0].x||s.data[s.data.length-1].x<s.data[0].x){throw"series data needs to be sorted on x values for series name: "+s.name;}}},this);};this.dataDomain=function(){var data=this.series.map(function(s){return s.data});var min=d3.min(data.map(function(d){return d[0].x}));var max=d3.max(data.map(function(d){return d[d.length-1].x}));return[min,max];};this.discoverRange=function(){var domain=this.renderer.domain();this.x=d3.scale.linear().domain(domain.x).range([0,this.width]);this.y=d3.scale.linear().domain(domain.y).range([this.height,0]);this.y.magnitude=d3.scale.linear().domain([domain.y[0]-domain.y[0],domain.y[1]-domain.y[0]]).range([0,this.height]);};this.render=function(){var stackedData=this.stackData();this.discoverRange();this.renderer.render();this.updateCallbacks.forEach(function(callback){callback();});};this.update=this.render;this.stackData=function(){var data=this.series.active().map(function(d){return d.data}).map(function(d){return d.filter(function(d){return this._slice(d)},this)},this);var preserve=this.preserve;if(!preserve){this.series.forEach(function(series){if(series.scale){preserve=true;}});}
+data=preserve?Rickshaw.clone(data):data;this.series.active().forEach(function(series,index){if(series.scale){var seriesData=data[index];if(seriesData){seriesData.forEach(function(d){d.y=series.scale(d.y);});}}});this.stackData.hooks.data.forEach(function(entry){data=entry.f.apply(self,[data]);});var stackedData;if(!this.renderer.unstack){this._validateStackable();var layout=d3.layout.stack();layout.offset(self.offset);stackedData=layout(data);}
+stackedData=stackedData||data;this.stackData.hooks.after.forEach(function(entry){stackedData=entry.f.apply(self,[data]);});var i=0;this.series.forEach(function(series){if(series.disabled)return;series.stack=stackedData[i++];});this.stackedData=stackedData;return stackedData;};this._validateStackable=function(){var series=this.series;var pointsCount;series.forEach(function(s){pointsCount=pointsCount||s.data.length;if(pointsCount&&s.data.length!=pointsCount){throw"stacked series cannot have differing numbers of points: "+
+pointsCount+" vs "+s.data.length+"; see Rickshaw.Series.fill()";}},this);};this.stackData.hooks={data:[],after:[]};this._slice=function(d){if(this.window.xMin||this.window.xMax){var isInRange=true;if(this.window.xMin&&d.x<this.window.xMin)isInRange=false;if(this.window.xMax&&d.x>this.window.xMax)isInRange=false;return isInRange;}
+return true;};this.onUpdate=function(callback){this.updateCallbacks.push(callback);};this.registerRenderer=function(renderer){this._renderers=this._renderers||{};this._renderers[renderer.name]=renderer;};this.configure=function(args){if(args.width||args.height){this.setSize(args);}
+Rickshaw.keys(this.defaults).forEach(function(k){this[k]=k in args?args[k]:k in this?this[k]:this.defaults[k];},this);this.setRenderer(args.renderer||this.renderer.name,args);};this.setRenderer=function(r,args){if(typeof r=='function'){this.renderer=new r({graph:self});this.registerRenderer(this.renderer);}else{if(!this._renderers[r]){throw"couldn't find renderer "+r;}
+this.renderer=this._renderers[r];}
+if(typeof args=='object'){this.renderer.configure(args);}};this.setSize=function(args){args=args||{};if(typeof window!==undefined){var style=window.getComputedStyle(this.element,null);var elementWidth=parseInt(style.getPropertyValue('width'),10);var elementHeight=parseInt(style.getPropertyValue('height'),10);}
+this.width=args.width||elementWidth||400;this.height=args.height||elementHeight||250;this.vis&&this.vis.attr('width',this.width).attr('height',this.height);};this.initialize(args);};Rickshaw.namespace('Rickshaw.Fixtures.Color');Rickshaw.Fixtures.Color=function(){this.schemes={};this.schemes.spectrum14=['#ecb796','#dc8f70','#b2a470','#92875a','#716c49','#d2ed82','#bbe468','#a1d05d','#e7cbe6','#d8aad6','#a888c2','#9dc2d3','#649eb9','#387aa3'].reverse();this.schemes.spectrum2000=['#57306f','#514c76','#646583','#738394','#6b9c7d','#84b665','#a7ca50','#bfe746','#e2f528','#fff726','#ecdd00','#d4b11d','#de8800','#de4800','#c91515','#9a0000','#7b0429','#580839','#31082b'];this.schemes.spectrum2001=['#2f243f','#3c2c55','#4a3768','#565270','#6b6b7c','#72957f','#86ad6e','#a1bc5e','#b8d954','#d3e04e','#ccad2a','#cc8412','#c1521d','#ad3821','#8a1010','#681717','#531e1e','#3d1818','#320a1b'];this.schemes.classic9=['#423d4f','#4a6860','#848f39','#a2b73c','#ddcb53','#c5a32f','#7d5836','#963b20','#7c2626','#491d37','#2f254a'].reverse();this.schemes.httpStatus={503:'#ea5029',502:'#d23f14',500:'#bf3613',410:'#efacea',409:'#e291dc',403:'#f457e8',408:'#e121d2',401:'#b92dae',405:'#f47ceb',404:'#a82a9f',400:'#b263c6',301:'#6fa024',302:'#87c32b',307:'#a0d84c',304:'#28b55c',200:'#1a4f74',206:'#27839f',201:'#52adc9',202:'#7c979f',203:'#a5b8bd',204:'#c1cdd1'};this.schemes.colorwheel=['#b5b6a9','#858772','#785f43','#96557e','#4682b4','#65b9ac','#73c03a','#cb513a'].reverse();this.schemes.cool=['#5e9d2f','#73c03a','#4682b4','#7bc3b8','#a9884e','#c1b266','#a47493','#c09fb5'];this.schemes.munin=['#00cc00','#0066b3','#ff8000','#ffcc00','#330099','#990099','#ccff00','#ff0000','#808080','#008f00','#00487d','#b35a00','#b38f00','#6b006b','#8fb300','#b30000','#bebebe','#80ff80','#80c9ff','#ffc080','#ffe680','#aa80ff','#ee00cc','#ff8080','#666600','#ffbfff','#00ffcc','#cc6699','#999900'];};Rickshaw.namespace('Rickshaw.Fixtures.RandomData');Rickshaw.Fixtures.RandomData=function(timeInterval){var addData;timeInterval=timeInterval||1;var lastRandomValue=200;var timeBase=Math.floor(new Date().getTime()/1000);this.addData=function(data){var randomValue=Math.random()*100+15+lastRandomValue;var index=data[0].length;var counter=1;data.forEach(function(series){var randomVariance=Math.random()*20;var v=randomValue/25+counter++ +
+(Math.cos((index*counter*11)/960)+2)*15+
+(Math.cos(index/7)+2)*7+
+(Math.cos(index/17)+2)*1;series.push({x:(index*timeInterval)+timeBase,y:v+randomVariance});});lastRandomValue=randomValue*0.85;};this.removeData=function(data){data.forEach(function(series){series.shift();});timeBase+=timeInterval;};};Rickshaw.namespace('Rickshaw.Fixtures.Time');Rickshaw.Fixtures.Time=function(){var tzOffset=new Date().getTimezoneOffset()*60;var self=this;this.months=['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];this.units=[{name:'decade',seconds:86400*365.25*10,formatter:function(d){return(parseInt(d.getUTCFullYear()/10,10)*10)}},{name:'year',seconds:86400*365.25,formatter:function(d){return d.getUTCFullYear()}},{name:'month',seconds:86400*30.5,formatter:function(d){return self.months[d.getUTCMonth()]}},{name:'week',seconds:86400*7,formatter:function(d){return self.formatDate(d)}},{name:'day',seconds:86400,formatter:function(d){return d.getUTCDate()}},{name:'6 hour',seconds:3600*6,formatter:function(d){return self.formatTime(d)}},{name:'hour',seconds:3600,formatter:function(d){return self.formatTime(d)}},{name:'15 minute',seconds:60*15,formatter:function(d){return self.formatTime(d)}},{name:'minute',seconds:60,formatter:function(d){return d.getUTCMinutes()}},{name:'15 second',seconds:15,formatter:function(d){return d.getUTCSeconds()+'s'}},{name:'second',seconds:1,formatter:function(d){return d.getUTCSeconds()+'s'}}];this.unit=function(unitName){return this.units.filter(function(unit){return unitName==unit.name}).shift();};this.formatDate=function(d){return d3.time.format('%b %e')(d);};this.formatTime=function(d){return d.toUTCString().match(/(\d+:\d+):/)[1];};this.ceil=function(time,unit){var nearFuture;var rounded;if(unit.name=='month'){nearFuture=new Date((time+unit.seconds-1)*1000);rounded=new Date(0);rounded.setUTCFullYear(nearFuture.getUTCFullYear());rounded.setUTCMonth(nearFuture.getUTCMonth());rounded.setUTCDate(1);rounded.setUTCHours(0);rounded.setUTCMinutes(0);rounded.setUTCSeconds(0);rounded.setUTCMilliseconds(0);return rounded.getTime()/1000;}
+if(unit.name=='year'){nearFuture=new Date((time+unit.seconds-1)*1000);rounded=new Date(0);rounded.setUTCFullYear(nearFuture.getUTCFullYear());rounded.setUTCMonth(0);rounded.setUTCDate(1);rounded.setUTCHours(0);rounded.setUTCMinutes(0);rounded.setUTCSeconds(0);rounded.setUTCMilliseconds(0);return rounded.getTime()/1000;}
+return Math.ceil(time/unit.seconds)*unit.seconds;};};Rickshaw.namespace('Rickshaw.Fixtures.Time.Local');Rickshaw.Fixtures.Time.Local=function(){var tzOffset=new Date().getTimezoneOffset()*60;var self=this;this.months=['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];this.units=[{name:'decade',seconds:86400*365.25*10,formatter:function(d){return(parseInt(d.getFullYear()/10,10)*10)}},{name:'year',seconds:86400*365.25,formatter:function(d){return d.getFullYear()}},{name:'month',seconds:86400*30.5,formatter:function(d){return self.months[d.getMonth()]}},{name:'week',seconds:86400*7,formatter:function(d){return self.formatDate(d)}},{name:'day',seconds:86400,formatter:function(d){return d.getDate()}},{name:'6 hour',seconds:3600*6,formatter:function(d){return self.formatTime(d)}},{name:'hour',seconds:3600,formatter:function(d){return self.formatTime(d)}},{name:'15 minute',seconds:60*15,formatter:function(d){return self.formatTime(d)}},{name:'minute',seconds:60,formatter:function(d){return d.getMinutes()}},{name:'15 second',seconds:15,formatter:function(d){return d.getSeconds()+'s'}},{name:'second',seconds:1,formatter:function(d){return d.getSeconds()+'s'}}];this.unit=function(unitName){return this.units.filter(function(unit){return unitName==unit.name}).shift();};this.formatDate=function(d){return d3.time.format('%b %e')(d);};this.formatTime=function(d){return d.toString().match(/(\d+:\d+):/)[1];};this.ceil=function(time,unit){var nearFuture;var rounded;if(unit.name=='day'){nearFuture=new Date((time+unit.seconds-1)*1000);rounded=new Date(0);rounded.setMilliseconds(0);rounded.setSeconds(0);rounded.setMinutes(0);rounded.setHours(0);rounded.setDate(nearFuture.getDate());rounded.setMonth(nearFuture.getMonth());rounded.setFullYear(nearFuture.getFullYear());return rounded.getTime()/1000;}
+if(unit.name=='month'){nearFuture=new Date((time+unit.seconds-1)*1000);rounded=new Date(0);rounded.setMilliseconds(0);rounded.setSeconds(0);rounded.setMinutes(0);rounded.setHours(0);rounded.setDate(1);rounded.setMonth(nearFuture.getMonth());rounded.setFullYear(nearFuture.getFullYear());return rounded.getTime()/1000;}
+if(unit.name=='year'){nearFuture=new Date((time+unit.seconds-1)*1000);rounded=new Date(0);rounded.setFullYear(nearFuture.getFullYear());rounded.setMilliseconds(0);rounded.setSeconds(0);rounded.setMinutes(0);rounded.setHours(0);rounded.setDate(1);rounded.setMonth(0);return rounded.getTime()/1000;}
+return Math.ceil(time/unit.seconds)*unit.seconds;};};Rickshaw.namespace('Rickshaw.Fixtures.Number');Rickshaw.Fixtures.Number.formatKMBT=function(y){var abs_y=Math.abs(y);if(abs_y>=1000000000000){return y/1000000000000+"T"}
+else if(abs_y>=1000000000){return y/1000000000+"B"}
+else if(abs_y>=1000000){return y/1000000+"M"}
+else if(abs_y>=1000){return y/1000+"K"}
+else if(abs_y<1&&y>0){return y.toFixed(2)}
+else if(abs_y===0){return''}
+else{return y}};Rickshaw.Fixtures.Number.formatBase1024KMGTP=function(y){var abs_y=Math.abs(y);if(abs_y>=1125899906842624){return y/1125899906842624+"P"}
+else if(abs_y>=1099511627776){return y/1099511627776+"T"}
+else if(abs_y>=1073741824){return y/1073741824+"G"}
+else if(abs_y>=1048576){return y/1048576+"M"}
+else if(abs_y>=1024){return y/1024+"K"}
+else if(abs_y<1&&y>0){return y.toFixed(2)}
+else if(abs_y===0){return''}
+else{return y}};Rickshaw.namespace("Rickshaw.Color.Palette");Rickshaw.Color.Palette=function(args){var color=new Rickshaw.Fixtures.Color();args=args||{};this.schemes={};this.scheme=color.schemes[args.scheme]||args.scheme||color.schemes.colorwheel;this.runningIndex=0;this.generatorIndex=0;if(args.interpolatedStopCount){var schemeCount=this.scheme.length-1;var i,j,scheme=[];for(i=0;i<schemeCount;i++){scheme.push(this.scheme[i]);var generator=d3.interpolateHsl(this.scheme[i],this.scheme[i+1]);for(j=1;j<args.interpolatedStopCount;j++){scheme.push(generator((1/args.interpolatedStopCount)*j));}}
+scheme.push(this.scheme[this.scheme.length-1]);this.scheme=scheme;}
+this.rotateCount=this.scheme.length;this.color=function(key){return this.scheme[key]||this.scheme[this.runningIndex++]||this.interpolateColor()||'#808080';};this.interpolateColor=function(){if(!Array.isArray(this.scheme))return;var color;if(this.generatorIndex==this.rotateCount*2-1){color=d3.interpolateHsl(this.scheme[this.generatorIndex],this.scheme[0])(0.5);this.generatorIndex=0;this.rotateCount*=2;}else{color=d3.interpolateHsl(this.scheme[this.generatorIndex],this.scheme[this.generatorIndex+1])(0.5);this.generatorIndex++;}
+this.scheme.push(color);return color;};};Rickshaw.namespace('Rickshaw.Graph.Ajax');Rickshaw.Graph.Ajax=Rickshaw.Class.create({initialize:function(args){this.dataURL=args.dataURL;this.onData=args.onData||function(d){return d};this.onComplete=args.onComplete||function(){};this.onError=args.onError||function(){};this.args=args;this.request();},request:function(){$.ajax({url:this.dataURL,dataType:'json',success:this.success.bind(this),error:this.error.bind(this)});},error:function(){console.log("error loading dataURL: "+this.dataURL);this.onError(this);},success:function(data,status){data=this.onData(data);this.args.series=this._splice({data:data,series:this.args.series});this.graph=this.graph||new Rickshaw.Graph(this.args);this.graph.render();this.onComplete(this);},_splice:function(args){var data=args.data;var series=args.series;if(!args.series)return data;series.forEach(function(s){var seriesKey=s.key||s.name;if(!seriesKey)throw"series needs a key or a name";data.forEach(function(d){var dataKey=d.key||d.name;if(!dataKey)throw"data needs a key or a name";if(seriesKey==dataKey){var properties=['color','name','data'];properties.forEach(function(p){if(d[p])s[p]=d[p];});}});});return series;}});Rickshaw.namespace('Rickshaw.Graph.Annotate');Rickshaw.Graph.Annotate=function(args){var graph=this.graph=args.graph;this.elements={timeline:args.element};var self=this;this.data={};this.elements.timeline.classList.add('rickshaw_annotation_timeline');this.add=function(time,content,end_time){self.data[time]=self.data[time]||{'boxes':[]};self.data[time].boxes.push({content:content,end:end_time});};this.update=function(){Rickshaw.keys(self.data).forEach(function(time){var annotation=self.data[time];var left=self.graph.x(time);if(left<0||left>self.graph.x.range()[1]){if(annotation.element){annotation.line.classList.add('offscreen');annotation.element.style.display='none';}
+annotation.boxes.forEach(function(box){if(box.rangeElement)box.rangeElement.classList.add('offscreen');});return;}
+if(!annotation.element){var element=annotation.element=document.createElement('div');element.classList.add('annotation');this.elements.timeline.appendChild(element);element.addEventListener('click',function(e){element.classList.toggle('active');annotation.line.classList.toggle('active');annotation.boxes.forEach(function(box){if(box.rangeElement)box.rangeElement.classList.toggle('active');});},false);}
+annotation.element.style.left=left+'px';annotation.element.style.display='block';annotation.boxes.forEach(function(box){var element=box.element;if(!element){element=box.element=document.createElement('div');element.classList.add('content');element.innerHTML=box.content;annotation.element.appendChild(element);annotation.line=document.createElement('div');annotation.line.classList.add('annotation_line');self.graph.element.appendChild(annotation.line);if(box.end){box.rangeElement=document.createElement('div');box.rangeElement.classList.add('annotation_range');self.graph.element.appendChild(box.rangeElement);}}
+if(box.end){var annotationRangeStart=left;var annotationRangeEnd=Math.min(self.graph.x(box.end),self.graph.x.range()[1]);if(annotationRangeStart>annotationRangeEnd){annotationRangeEnd=left;annotationRangeStart=Math.max(self.graph.x(box.end),self.graph.x.range()[0]);}
+var annotationRangeWidth=annotationRangeEnd-annotationRangeStart;box.rangeElement.style.left=annotationRangeStart+'px';box.rangeElement.style.width=annotationRangeWidth+'px';box.rangeElement.classList.remove('offscreen');}
+annotation.line.classList.remove('offscreen');annotation.line.style.left=left+'px';});},this);};this.graph.onUpdate(function(){self.update()});};Rickshaw.namespace('Rickshaw.Graph.Axis.Time');Rickshaw.Graph.Axis.Time=function(args){var self=this;this.graph=args.graph;this.elements=[];this.ticksTreatment=args.ticksTreatment||'plain';this.fixedTimeUnit=args.timeUnit;var time=args.timeFixture||new Rickshaw.Fixtures.Time();this.appropriateTimeUnit=function(){var unit;var units=time.units;var domain=this.graph.x.domain();var rangeSeconds=domain[1]-domain[0];units.forEach(function(u){if(Math.floor(rangeSeconds/u.seconds)>=2){unit=unit||u;}});return(unit||time.units[time.units.length-1]);};this.tickOffsets=function(){var domain=this.graph.x.domain();var unit=this.fixedTimeUnit||this.appropriateTimeUnit();var count=Math.ceil((domain[1]-domain[0])/unit.seconds);var runningTick=domain[0];var offsets=[];for(var i=0;i<count;i++){var tickValue=time.ceil(runningTick,unit);runningTick=tickValue+unit.seconds/2;offsets.push({value:tickValue,unit:unit});}
+return offsets;};this.render=function(){this.elements.forEach(function(e){e.parentNode.removeChild(e);});this.elements=[];var offsets=this.tickOffsets();offsets.forEach(function(o){if(self.graph.x(o.value)>self.graph.x.range()[1])return;var element=document.createElement('div');element.style.left=self.graph.x(o.value)+'px';element.classList.add('x_tick');element.classList.add(self.ticksTreatment);var title=document.createElement('div');title.classList.add('title');title.innerHTML=o.unit.formatter(new Date(o.value*1000));element.appendChild(title);self.graph.element.appendChild(element);self.elements.push(element);});};this.graph.onUpdate(function(){self.render()});};Rickshaw.namespace('Rickshaw.Graph.Axis.X');Rickshaw.Graph.Axis.X=function(args){var self=this;var berthRate=0.10;this.initialize=function(args){this.graph=args.graph;this.orientation=args.orientation||'top';this.pixelsPerTick=args.pixelsPerTick||75;if(args.ticks)this.staticTicks=args.ticks;if(args.tickValues)this.tickValues=args.tickValues;this.tickSize=args.tickSize||4;this.ticksTreatment=args.ticksTreatment||'plain';if(args.element){this.element=args.element;this._discoverSize(args.element,args);this.vis=d3.select(args.element).append("svg:svg").attr('height',this.height).attr('width',this.width).attr('class','rickshaw_graph x_axis_d3');this.element=this.vis[0][0];this.element.style.position='relative';this.setSize({width:args.width,height:args.height});}else{this.vis=this.graph.vis;}
+this.graph.onUpdate(function(){self.render()});};this.setSize=function(args){args=args||{};if(!this.element)return;this._discoverSize(this.element.parentNode,args);this.vis.attr('height',this.height).attr('width',this.width*(1+berthRate));var berth=Math.floor(this.width*berthRate/2);this.element.style.left=-1*berth+'px';};this.render=function(){if(this.graph.width!==this._renderWidth)this.setSize({auto:true});var axis=d3.svg.axis().scale(this.graph.x).orient(this.orientation);axis.tickFormat(args.tickFormat||function(x){return x});if(this.tickValues)axis.tickValues(this.tickValues);this.ticks=this.staticTicks||Math.floor(this.graph.width/this.pixelsPerTick);var berth=Math.floor(this.width*berthRate/2)||0;var transform;if(this.orientation=='top'){var yOffset=this.height||this.graph.height;transform='translate('+berth+','+yOffset+')';}else{transform='translate('+berth+', 0)';}
+if(this.element){this.vis.selectAll('*').remove();}
+this.vis.append("svg:g").attr("class",["x_ticks_d3",this.ticksTreatment].join(" ")).attr("transform",transform).call(axis.ticks(this.ticks).tickSubdivide(0).tickSize(this.tickSize));var gridSize=(this.orientation=='bottom'?1:-1)*this.graph.height;this.graph.vis.append("svg:g").attr("class","x_grid_d3").call(axis.ticks(this.ticks).tickSubdivide(0).tickSize(gridSize));this._renderHeight=this.graph.height;};this._discoverSize=function(element,args){if(typeof window!=='undefined'){var style=window.getComputedStyle(element,null);var elementHeight=parseInt(style.getPropertyValue('height'),10);if(!args.auto){var elementWidth=parseInt(style.getPropertyValue('width'),10);}}
+this.width=(args.width||elementWidth||this.graph.width)*(1+berthRate);this.height=args.height||elementHeight||40;};this.initialize(args);};Rickshaw.namespace('Rickshaw.Graph.Axis.Y');Rickshaw.Graph.Axis.Y=Rickshaw.Class.create({initialize:function(args){this.graph=args.graph;this.orientation=args.orientation||'right';this.pixelsPerTick=args.pixelsPerTick||75;if(args.ticks)this.staticTicks=args.ticks;if(args.tickValues)this.tickValues=args.tickValues;this.tickSize=args.tickSize||4;this.ticksTreatment=args.ticksTreatment||'plain';this.tickFormat=args.tickFormat||function(y){return y};this.berthRate=0.10;if(args.element){this.element=args.element;this.vis=d3.select(args.element).append("svg:svg").attr('class','rickshaw_graph y_axis');this.element=this.vis[0][0];this.element.style.position='relative';this.setSize({width:args.width,height:args.height});}else{this.vis=this.graph.vis;}
+var self=this;this.graph.onUpdate(function(){self.render()});},setSize:function(args){args=args||{};if(!this.element)return;if(typeof window!=='undefined'){var style=window.getComputedStyle(this.element.parentNode,null);var elementWidth=parseInt(style.getPropertyValue('width'),10);if(!args.auto){var elementHeight=parseInt(style.getPropertyValue('height'),10);}}
+this.width=args.width||elementWidth||this.graph.width*this.berthRate;this.height=args.height||elementHeight||this.graph.height;this.vis.attr('width',this.width).attr('height',this.height*(1+this.berthRate));var berth=this.height*this.berthRate;if(this.orientation=='left'){this.element.style.top=-1*berth+'px';}},render:function(){if(this.graph.height!==this._renderHeight)this.setSize({auto:true});this.ticks=this.staticTicks||Math.floor(this.graph.height/this.pixelsPerTick);var axis=this._drawAxis(this.graph.y);this._drawGrid(axis);this._renderHeight=this.graph.height;},_drawAxis:function(scale){var axis=d3.svg.axis().scale(scale).orient(this.orientation);axis.tickFormat(this.tickFormat);if(this.tickValues)axis.tickValues(this.tickValues);if(this.orientation=='left'){var berth=this.height*this.berthRate;var transform='translate('+this.width+', '+berth+')';}
+if(this.element){this.vis.selectAll('*').remove();}
+this.vis.append("svg:g").attr("class",["y_ticks",this.ticksTreatment].join(" ")).attr("transform",transform).call(axis.ticks(this.ticks).tickSubdivide(0).tickSize(this.tickSize));return axis;},_drawGrid:function(axis){var gridSize=(this.orientation=='right'?1:-1)*this.graph.width;this.graph.vis.append("svg:g").attr("class","y_grid").call(axis.ticks(this.ticks).tickSubdivide(0).tickSize(gridSize));}});Rickshaw.namespace('Rickshaw.Graph.Axis.Y.Scaled');Rickshaw.Graph.Axis.Y.Scaled=Rickshaw.Class.create(Rickshaw.Graph.Axis.Y,{initialize:function($super,args){if(typeof(args.scale)==='undefined'){throw new Error('Scaled requires scale');}
+this.scale=args.scale;if(typeof(args.grid)==='undefined'){this.grid=true;}else{this.grid=args.grid;}
+$super(args);},_drawAxis:function($super,scale){var adjustedScale=this.scale.copy().range(scale.range());return $super(adjustedScale);},_drawGrid:function($super,axis){if(this.grid){$super(axis);}}});Rickshaw.namespace('Rickshaw.Graph.Behavior.Series.Highlight');Rickshaw.Graph.Behavior.Series.Highlight=function(args){this.graph=args.graph;this.legend=args.legend;var self=this;var colorSafe={};var activeLine=null;var disabledColor=args.disabledColor||function(seriesColor){return d3.interpolateRgb(seriesColor,d3.rgb('#d8d8d8'))(0.8).toString();};this.addHighlightEvents=function(l){l.element.addEventListener('mouseover',function(e){if(activeLine)return;else activeLine=l;self.legend.lines.forEach(function(line,index){if(l===line){if(index>0&&self.graph.renderer.unstack&&(line.series.renderer?line.series.renderer.unstack:true)){var seriesIndex=self.graph.series.length-index-1;line.originalIndex=seriesIndex;var series=self.graph.series.splice(seriesIndex,1)[0];self.graph.series.push(series);}
+return;}
+colorSafe[line.series.name]=colorSafe[line.series.name]||line.series.color;line.series.color=disabledColor(line.series.color);});self.graph.update();},false);l.element.addEventListener('mouseout',function(e){if(!activeLine)return;else activeLine=null;self.legend.lines.forEach(function(line){if(l===line&&line.hasOwnProperty('originalIndex')){var series=self.graph.series.pop();self.graph.series.splice(line.originalIndex,0,series);delete line.originalIndex;}
+if(colorSafe[line.series.name]){line.series.color=colorSafe[line.series.name];}});self.graph.update();},false);};if(this.legend){this.legend.lines.forEach(function(l){self.addHighlightEvents(l);});}};Rickshaw.namespace('Rickshaw.Graph.Behavior.Series.Order');Rickshaw.Graph.Behavior.Series.Order=function(args){this.graph=args.graph;this.legend=args.legend;var self=this;if(typeof window.$=='undefined'){throw"couldn't find jQuery at window.$";}
+if(typeof window.$.ui=='undefined'){throw"couldn't find jQuery UI at window.$.ui";}
+$(function(){$(self.legend.list).sortable({containment:'parent',tolerance:'pointer',update:function(event,ui){var series=[];$(self.legend.list).find('li').each(function(index,item){if(!item.series)return;series.push(item.series);});for(var i=self.graph.series.length-1;i>=0;i--){self.graph.series[i]=series.shift();}
+self.graph.update();}});$(self.legend.list).disableSelection();});this.graph.onUpdate(function(){var h=window.getComputedStyle(self.legend.element).height;self.legend.element.style.height=h;});};Rickshaw.namespace('Rickshaw.Graph.Behavior.Series.Toggle');Rickshaw.Graph.Behavior.Series.Toggle=function(args){this.graph=args.graph;this.legend=args.legend;var self=this;this.addAnchor=function(line){var anchor=document.createElement('a');anchor.innerHTML='&#10004;';anchor.classList.add('action');line.element.insertBefore(anchor,line.element.firstChild);anchor.onclick=function(e){if(line.series.disabled){line.series.enable();line.element.classList.remove('disabled');}else{if(this.graph.series.filter(function(s){return!s.disabled}).length<=1)return;line.series.disable();line.element.classList.add('disabled');}}.bind(this);var label=line.element.getElementsByTagName('span')[0];label.onclick=function(e){var disableAllOtherLines=line.series.disabled;if(!disableAllOtherLines){for(var i=0;i<self.legend.lines.length;i++){var l=self.legend.lines[i];if(line.series===l.series){}else if(l.series.disabled){}else{disableAllOtherLines=true;break;}}}
+if(disableAllOtherLines){line.series.enable();line.element.classList.remove('disabled');self.legend.lines.forEach(function(l){if(line.series===l.series){}else{l.series.disable();l.element.classList.add('disabled');}});}else{self.legend.lines.forEach(function(l){l.series.enable();l.element.classList.remove('disabled');});}};};if(this.legend){if(typeof $!='undefined'&&$(this.legend.list).sortable){$(this.legend.list).sortable({start:function(event,ui){ui.item.bind('no.onclick',function(event){event.preventDefault();});},stop:function(event,ui){setTimeout(function(){ui.item.unbind('no.onclick');},250);}});}
+this.legend.lines.forEach(function(l){self.addAnchor(l);});}
+this._addBehavior=function(){this.graph.series.forEach(function(s){s.disable=function(){if(self.graph.series.length<=1){throw('only one series left');}
+s.disabled=true;self.graph.update();};s.enable=function(){s.disabled=false;self.graph.update();};});};this._addBehavior();this.updateBehaviour=function(){this._addBehavior()};};Rickshaw.namespace('Rickshaw.Graph.HoverDetail');Rickshaw.Graph.HoverDetail=Rickshaw.Class.create({initialize:function(args){var graph=this.graph=args.graph;this.xFormatter=args.xFormatter||function(x){return new Date(x*1000).toUTCString();};this.yFormatter=args.yFormatter||function(y){return y===null?y:y.toFixed(2);};var element=this.element=document.createElement('div');element.className='detail';this.visible=true;graph.element.appendChild(element);this.lastEvent=null;this._addListeners();this.onShow=args.onShow;this.onHide=args.onHide;this.onRender=args.onRender;this.formatter=args.formatter||this.formatter;},formatter:function(series,x,y,formattedX,formattedY,d){return series.name+':&nbsp;'+formattedY;},update:function(e){e=e||this.lastEvent;if(!e)return;this.lastEvent=e;if(!e.target.nodeName.match(/^(path|svg|rect|circle)$/))return;var graph=this.graph;var eventX=e.offsetX||e.layerX;var eventY=e.offsetY||e.layerY;var j=0;var points=[];var nearestPoint;this.graph.series.active().forEach(function(series){var data=this.graph.stackedData[j++];if(!data.length)
+return;var domainX=graph.x.invert(eventX);var domainIndexScale=d3.scale.linear().domain([data[0].x,data.slice(-1)[0].x]).range([0,data.length-1]);var approximateIndex=Math.round(domainIndexScale(domainX));if(approximateIndex==data.length-1)approximateIndex--;var dataIndex=Math.min(approximateIndex||0,data.length-1);for(var i=approximateIndex;i<data.length-1;){if(!data[i]||!data[i+1])break;if(data[i].x<=domainX&&data[i+1].x>domainX){dataIndex=Math.abs(domainX-data[i].x)<Math.abs(domainX-data[i+1].x)?i:i+1;break;}
+if(data[i+1].x<=domainX){i++}else{i--}}
+if(dataIndex<0)dataIndex=0;var value=data[dataIndex];var distance=Math.sqrt(Math.pow(Math.abs(graph.x(value.x)-eventX),2)+
+Math.pow(Math.abs(graph.y(value.y+value.y0)-eventY),2));var xFormatter=series.xFormatter||this.xFormatter;var yFormatter=series.yFormatter||this.yFormatter;var point={formattedXValue:xFormatter(value.x),formattedYValue:yFormatter(series.scale?series.scale.invert(value.y):value.y),series:series,value:value,distance:distance,order:j,name:series.name};if(!nearestPoint||distance<nearestPoint.distance){nearestPoint=point;}
+points.push(point);},this);if(!nearestPoint)
+return;nearestPoint.active=true;var domainX=nearestPoint.value.x;var formattedXValue=nearestPoint.formattedXValue;this.element.innerHTML='';this.element.style.left=graph.x(domainX)+'px';this.visible&&this.render({points:points,detail:points,mouseX:eventX,mouseY:eventY,formattedXValue:formattedXValue,domainX:domainX});},hide:function(){this.visible=false;this.element.classList.add('inactive');if(typeof this.onHide=='function'){this.onHide();}},show:function(){this.visible=true;this.element.classList.remove('inactive');if(typeof this.onShow=='function'){this.onShow();}},render:function(args){var graph=this.graph;var points=args.points;var point=points.filter(function(p){return p.active}).shift();if(point.value.y===null)return;var formattedXValue=point.formattedXValue;var formattedYValue=point.formattedYValue;this.element.innerHTML='';this.element.style.left=graph.x(point.value.x)+'px';var xLabel=document.createElement('div');xLabel.className='x_label';xLabel.innerHTML=formattedXValue;this.element.appendChild(xLabel);var item=document.createElement('div');item.className='item';var series=point.series;var actualY=series.scale?series.scale.invert(point.value.y):point.value.y;item.innerHTML=this.formatter(series,point.value.x,actualY,formattedXValue,formattedYValue,point);item.style.top=this.graph.y(point.value.y0+point.value.y)+'px';this.element.appendChild(item);var dot=document.createElement('div');dot.className='dot';dot.style.top=item.style.top;dot.style.borderColor=series.color;this.element.appendChild(dot);if(point.active){item.className='item active';dot.className='dot active';}
+this.show();if(typeof this.onRender=='function'){this.onRender(args);}},_addListeners:function(){this.graph.element.addEventListener('mousemove',function(e){this.visible=true;this.update(e);}.bind(this),false);this.graph.onUpdate(function(){this.update()}.bind(this));this.graph.element.addEventListener('mouseout',function(e){if(e.relatedTarget&&!(e.relatedTarget.compareDocumentPosition(this.graph.element)&Node.DOCUMENT_POSITION_CONTAINS)){this.hide();}}.bind(this),false);}});Rickshaw.namespace('Rickshaw.Graph.JSONP');Rickshaw.Graph.JSONP=Rickshaw.Class.create(Rickshaw.Graph.Ajax,{request:function(){$.ajax({url:this.dataURL,dataType:'jsonp',success:this.success.bind(this),error:this.error.bind(this)});}});Rickshaw.namespace('Rickshaw.Graph.Legend');Rickshaw.Graph.Legend=function(args){var element=this.element=args.element;var graph=this.graph=args.graph;var self=this;element.classList.add('rickshaw_legend');var list=this.list=document.createElement('ul');element.appendChild(list);var series=graph.series.map(function(s){return s});if(!args.naturalOrder){series=series.reverse();}
+this.lines=[];this.addLine=function(series){var line=document.createElement('li');line.className='line';if(series.disabled){line.className+=' disabled';}
+var swatch=document.createElement('div');swatch.className='swatch';swatch.style.backgroundColor=series.color;line.appendChild(swatch);var label=document.createElement('span');label.className='label';label.innerHTML=series.name;line.appendChild(label);list.appendChild(line);line.series=series;if(series.noLegend){line.style.display='none';}
+var _line={element:line,series:series};if(self.shelving){self.shelving.addAnchor(_line);self.shelving.updateBehaviour();}
+if(self.highlighter){self.highlighter.addHighlightEvents(_line);}
+self.lines.push(_line);};series.forEach(function(s){self.addLine(s);});graph.onUpdate(function(){});};Rickshaw.namespace('Rickshaw.Graph.RangeSlider');Rickshaw.Graph.RangeSlider=Rickshaw.Class.create({initialize:function(args){var element=this.element=args.element;var graph=this.graph=args.graph;this.build();graph.onUpdate(function(){this.update()}.bind(this));},build:function(){var element=this.element;var graph=this.graph;var domain=graph.dataDomain();$(function(){$(element).slider({range:true,min:domain[0],max:domain[1],values:[domain[0],domain[1]],slide:function(event,ui){if(ui.values[1]<=ui.values[0])return;graph.window.xMin=ui.values[0];graph.window.xMax=ui.values[1];graph.update();var domain=graph.dataDomain();if(domain[0]==ui.values[0]){graph.window.xMin=undefined;}
+if(domain[1]==ui.values[1]){graph.window.xMax=undefined;}}});});element[0].style.width=graph.width+'px';},update:function(){var element=this.element;var graph=this.graph;var values=$(element).slider('option','values');var domain=graph.dataDomain();$(element).slider('option','min',domain[0]);$(element).slider('option','max',domain[1]);if(graph.window.xMin==null){values[0]=domain[0];}
+if(graph.window.xMax==null){values[1]=domain[1];}
+$(element).slider('option','values',values);}});Rickshaw.namespace("Rickshaw.Graph.Renderer");Rickshaw.Graph.Renderer=Rickshaw.Class.create({initialize:function(args){this.graph=args.graph;this.tension=args.tension||this.tension;this.graph.unstacker=this.graph.unstacker||new Rickshaw.Graph.Unstacker({graph:this.graph});this.configure(args);},seriesPathFactory:function(){},seriesStrokeFactory:function(){},defaults:function(){return{tension:0.8,strokeWidth:2,unstack:true,padding:{top:0.01,right:0,bottom:0.01,left:0},stroke:false,fill:false};},domain:function(data){var stackedData=data||this.graph.stackedData||this.graph.stackData();var firstPoint=stackedData[0][0];if(firstPoint===undefined){return{x:[null,null],y:[null,null]};}
+var xMin=firstPoint.x;var xMax=firstPoint.x;var yMin=firstPoint.y+firstPoint.y0;var yMax=firstPoint.y+firstPoint.y0;stackedData.forEach(function(series){series.forEach(function(d){if(d.y==null)return;var y=d.y+d.y0;if(y<yMin)yMin=y;if(y>yMax)yMax=y;});if(series[0].x<xMin)xMin=series[0].x;if(series[series.length-1].x>xMax)xMax=series[series.length-1].x;});xMin-=(xMax-xMin)*this.padding.left;xMax+=(xMax-xMin)*this.padding.right;yMin=this.graph.min==='auto'?yMin:this.graph.min||0;yMax=this.graph.max===undefined?yMax:this.graph.max;if(this.graph.min==='auto'||yMin<0){yMin-=(yMax-yMin)*this.padding.bottom;}
+if(this.graph.max===undefined){yMax+=(yMax-yMin)*this.padding.top;}
+return{x:[xMin,xMax],y:[yMin,yMax]};},render:function(args){args=args||{};var graph=this.graph;var series=args.series||graph.series;var vis=args.vis||graph.vis;vis.selectAll('*').remove();var data=series.filter(function(s){return!s.disabled}).map(function(s){return s.stack});var nodes=vis.selectAll("path").data(data).enter().append("svg:path").attr("d",this.seriesPathFactory());var i=0;series.forEach(function(series){if(series.disabled)return;series.path=nodes[0][i++];this._styleSeries(series);},this);},_styleSeries:function(series){var fill=this.fill?series.color:'none';var stroke=this.stroke?series.color:'none';series.path.setAttribute('fill',fill);series.path.setAttribute('stroke',stroke);series.path.setAttribute('stroke-width',this.strokeWidth);series.path.setAttribute('class',series.className);},configure:function(args){args=args||{};Rickshaw.keys(this.defaults()).forEach(function(key){if(!args.hasOwnProperty(key)){this[key]=this[key]||this.graph[key]||this.defaults()[key];return;}
+if(typeof this.defaults()[key]=='object'){Rickshaw.keys(this.defaults()[key]).forEach(function(k){this[key][k]=args[key][k]!==undefined?args[key][k]:this[key][k]!==undefined?this[key][k]:this.defaults()[key][k];},this);}else{this[key]=args[key]!==undefined?args[key]:this[key]!==undefined?this[key]:this.graph[key]!==undefined?this.graph[key]:this.defaults()[key];}},this);},setStrokeWidth:function(strokeWidth){if(strokeWidth!==undefined){this.strokeWidth=strokeWidth;}},setTension:function(tension){if(tension!==undefined){this.tension=tension;}}});Rickshaw.namespace('Rickshaw.Graph.Renderer.Line');Rickshaw.Graph.Renderer.Line=Rickshaw.Class.create(Rickshaw.Graph.Renderer,{name:'line',defaults:function($super){return Rickshaw.extend($super(),{unstack:true,fill:false,stroke:true});},seriesPathFactory:function(){var graph=this.graph;var factory=d3.svg.line().x(function(d){return graph.x(d.x)}).y(function(d){return graph.y(d.y)}).interpolate(this.graph.interpolation).tension(this.tension);factory.defined&&factory.defined(function(d){return d.y!==null});return factory;}});Rickshaw.namespace('Rickshaw.Graph.Renderer.Stack');Rickshaw.Graph.Renderer.Stack=Rickshaw.Class.create(Rickshaw.Graph.Renderer,{name:'stack',defaults:function($super){return Rickshaw.extend($super(),{fill:true,stroke:false,unstack:false});},seriesPathFactory:function(){var graph=this.graph;var factory=d3.svg.area().x(function(d){return graph.x(d.x)}).y0(function(d){return graph.y(d.y0)}).y1(function(d){return graph.y(d.y+d.y0)}).interpolate(this.graph.interpolation).tension(this.tension);factory.defined&&factory.defined(function(d){return d.y!==null});return factory;}});Rickshaw.namespace('Rickshaw.Graph.Renderer.Bar');Rickshaw.Graph.Renderer.Bar=Rickshaw.Class.create(Rickshaw.Graph.Renderer,{name:'bar',defaults:function($super){var defaults=Rickshaw.extend($super(),{gapSize:0.05,unstack:false});delete defaults.tension;return defaults;},initialize:function($super,args){args=args||{};this.gapSize=args.gapSize||this.gapSize;$super(args);},domain:function($super){var domain=$super();var frequentInterval=this._frequentInterval(this.graph.stackedData.slice(-1).shift());domain.x[1]+=Number(frequentInterval.magnitude);return domain;},barWidth:function(series){var frequentInterval=this._frequentInterval(series.stack);var barWidth=this.graph.x(series.stack[0].x+frequentInterval.magnitude*(1-this.gapSize));return barWidth;},render:function(args){args=args||{};var graph=this.graph;var series=args.series||graph.series;var vis=args.vis||graph.vis;vis.selectAll('*').remove();var barWidth=this.barWidth(series.active()[0]);var barXOffset=0;var activeSeriesCount=series.filter(function(s){return!s.disabled;}).length;var seriesBarWidth=this.unstack?barWidth/activeSeriesCount:barWidth;var transform=function(d){var matrix=[1,0,0,(d.y<0?-1:1),0,(d.y<0?graph.y.magnitude(Math.abs(d.y))*2:0)];return"matrix("+matrix.join(',')+")";};series.forEach(function(series){if(series.disabled)return;var barWidth=this.barWidth(series);var nodes=vis.selectAll("path").data(series.stack.filter(function(d){return d.y!==null})).enter().append("svg:rect").attr("x",function(d){return graph.x(d.x)+barXOffset}).attr("y",function(d){return(graph.y(d.y0+Math.abs(d.y)))*(d.y<0?-1:1)}).attr("width",seriesBarWidth).attr("height",function(d){return graph.y.magnitude(Math.abs(d.y))}).attr("transform",transform);Array.prototype.forEach.call(nodes[0],function(n){n.setAttribute('fill',series.color);});if(this.unstack)barXOffset+=seriesBarWidth;},this);},_frequentInterval:function(data){var intervalCounts={};for(var i=0;i<data.length-1;i++){var interval=data[i+1].x-data[i].x;intervalCounts[interval]=intervalCounts[interval]||0;intervalCounts[interval]++;}
+var frequentInterval={count:0,magnitude:1};Rickshaw.keys(intervalCounts).forEach(function(i){if(frequentInterval.count<intervalCounts[i]){frequentInterval={count:intervalCounts[i],magnitude:i};}});return frequentInterval;}});Rickshaw.namespace('Rickshaw.Graph.Renderer.Area');Rickshaw.Graph.Renderer.Area=Rickshaw.Class.create(Rickshaw.Graph.Renderer,{name:'area',defaults:function($super){return Rickshaw.extend($super(),{unstack:false,fill:false,stroke:false});},seriesPathFactory:function(){var graph=this.graph;var factory=d3.svg.area().x(function(d){return graph.x(d.x)}).y0(function(d){return graph.y(d.y0)}).y1(function(d){return graph.y(d.y+d.y0)}).interpolate(graph.interpolation).tension(this.tension);factory.defined&&factory.defined(function(d){return d.y!==null});return factory;},seriesStrokeFactory:function(){var graph=this.graph;var factory=d3.svg.line().x(function(d){return graph.x(d.x)}).y(function(d){return graph.y(d.y+d.y0)}).interpolate(graph.interpolation).tension(this.tension);factory.defined&&factory.defined(function(d){return d.y!==null});return factory;},render:function(){var graph=this.graph;graph.vis.selectAll('*').remove();var method=this.unstack?'append':'insert';var nodes=graph.vis.selectAll("path").data(this.graph.stackedData).enter()[method]("svg:g",'g');nodes.append("svg:path").attr("d",this.seriesPathFactory()).attr("class",'area');if(this.stroke){nodes.append("svg:path").attr("d",this.seriesStrokeFactory()).attr("class",'line');}
+var i=0;graph.series.forEach(function(series){if(series.disabled)return;series.path=nodes[0][i++];this._styleSeries(series);},this);},_styleSeries:function(series){if(!series.path)return;d3.select(series.path).select('.area').attr('fill',series.color);if(this.stroke){d3.select(series.path).select('.line').attr('fill','none').attr('stroke',series.stroke||d3.interpolateRgb(series.color,'black')(0.125)).attr('stroke-width',this.strokeWidth);}
+if(series.className){series.path.setAttribute('class',series.className);}}});Rickshaw.namespace('Rickshaw.Graph.Renderer.ScatterPlot');Rickshaw.Graph.Renderer.ScatterPlot=Rickshaw.Class.create(Rickshaw.Graph.Renderer,{name:'scatterplot',defaults:function($super){return Rickshaw.extend($super(),{unstack:true,fill:true,stroke:false,padding:{top:0.01,right:0.01,bottom:0.01,left:0.01},dotSize:4});},initialize:function($super,args){$super(args);},render:function(args){args=args||{};var graph=this.graph;var series=args.series||graph.series;var vis=args.vis||graph.vis;var dotSize=this.dotSize;vis.selectAll('*').remove();series.forEach(function(series){if(series.disabled)return;var nodes=vis.selectAll("path").data(series.stack.filter(function(d){return d.y!==null})).enter().append("svg:circle").attr("cx",function(d){return graph.x(d.x)}).attr("cy",function(d){return graph.y(d.y)}).attr("r",function(d){return("r"in d)?d.r:dotSize});Array.prototype.forEach.call(nodes[0],function(n){n.setAttribute('fill',series.color);});},this);}});Rickshaw.namespace('Rickshaw.Graph.Renderer.Multi');Rickshaw.Graph.Renderer.Multi=Rickshaw.Class.create(Rickshaw.Graph.Renderer,{name:'multi',initialize:function($super,args){$super(args);},defaults:function($super){return Rickshaw.extend($super(),{unstack:true,fill:false,stroke:true});},domain:function($super){this.graph.stackData();var domains=[];var groups=this._groups();this._stack(groups);groups.forEach(function(group){var data=group.series.filter(function(s){return!s.disabled}).map(function(s){return s.stack});if(!data.length)return;var domain=$super(data);domains.push(domain);});var xMin=d3.min(domains.map(function(d){return d.x[0]}));var xMax=d3.max(domains.map(function(d){return d.x[1]}));var yMin=d3.min(domains.map(function(d){return d.y[0]}));var yMax=d3.max(domains.map(function(d){return d.y[1]}));return{x:[xMin,xMax],y:[yMin,yMax]};},_groups:function(){var graph=this.graph;var renderGroups={};graph.series.forEach(function(series){if(series.disabled)return;if(!renderGroups[series.renderer]){var ns="http://www.w3.org/2000/svg";var vis=document.createElementNS(ns,'g');graph.vis[0][0].appendChild(vis);var renderer=graph._renderers[series.renderer];renderGroups[series.renderer]={renderer:renderer,series:[],vis:d3.select(vis)};}
+renderGroups[series.renderer].series.push(series);},this);var groups=[];Object.keys(renderGroups).forEach(function(key){var group=renderGroups[key];groups.push(group);});return groups;},_stack:function(groups){groups.forEach(function(group){var series=group.series.filter(function(series){return!series.disabled});var data=series.map(function(series){return series.stack});if(!group.renderer.unstack){var layout=d3.layout.stack();var stackedData=Rickshaw.clone(layout(data));series.forEach(function(series,index){series._stack=Rickshaw.clone(stackedData[index]);});}},this);return groups;},render:function(){this.graph.series.forEach(function(series){if(!series.renderer){throw new Error("Each series needs a renderer for graph 'multi' renderer");}});this.graph.vis.selectAll('*').remove();var groups=this._groups();groups=this._stack(groups);groups.forEach(function(group){var series=group.series.filter(function(series){return!series.disabled});group.renderer.render({series:series,vis:group.vis});series.forEach(function(s){s.stack=s._stack||s.stack||s.data;});});}});Rickshaw.namespace('Rickshaw.Graph.Renderer.LinePlot');Rickshaw.Graph.Renderer.LinePlot=Rickshaw.Class.create(Rickshaw.Graph.Renderer,{name:'lineplot',defaults:function($super){return Rickshaw.extend($super(),{unstack:true,fill:false,stroke:true,padding:{top:0.01,right:0.01,bottom:0.01,left:0.01},dotSize:3,strokeWidth:2});},initialize:function($super,args){$super(args);},seriesPathFactory:function(){var graph=this.graph;var factory=d3.svg.line().x(function(d){return graph.x(d.x)}).y(function(d){return graph.y(d.y)}).interpolate(this.graph.interpolation).tension(this.tension);factory.defined&&factory.defined(function(d){return d.y!==null});return factory;},_renderDots:function(){var graph=this.graph;graph.series.forEach(function(series){if(series.disabled)return;var nodes=graph.vis.selectAll("x").data(series.stack.filter(function(d){return d.y!==null})).enter().append("svg:circle").attr("cx",function(d){return graph.x(d.x)}).attr("cy",function(d){return graph.y(d.y)}).attr("r",function(d){return("r"in d)?d.r:graph.renderer.dotSize});Array.prototype.forEach.call(nodes[0],function(n){if(!n)return;n.setAttribute('data-color',series.color);n.setAttribute('fill','white');n.setAttribute('stroke',series.color);n.setAttribute('stroke-width',this.strokeWidth);}.bind(this));},this);},_renderLines:function(){var graph=this.graph;var nodes=graph.vis.selectAll("path").data(this.graph.stackedData).enter().append("svg:path").attr("d",this.seriesPathFactory());var i=0;graph.series.forEach(function(series){if(series.disabled)return;series.path=nodes[0][i++];this._styleSeries(series);},this);},render:function(){var graph=this.graph;graph.vis.selectAll('*').remove();this._renderLines();this._renderDots();}});Rickshaw.namespace('Rickshaw.Graph.Smoother');Rickshaw.Graph.Smoother=Rickshaw.Class.create({initialize:function(args){this.graph=args.graph;this.element=args.element;this.aggregationScale=1;this.build();this.graph.stackData.hooks.data.push({name:'smoother',orderPosition:50,f:this.transformer.bind(this)});},build:function(){var self=this;if(this.element){$(function(){$(self.element).slider({min:1,max:100,slide:function(event,ui){self.setScale(ui.value);self.graph.update();}});});}},setScale:function(scale){if(scale<1){throw"scale out of range: "+scale;}
+this.aggregationScale=scale;this.graph.update();},transformer:function(data){if(this.aggregationScale==1)return data;var aggregatedData=[];data.forEach(function(seriesData){var aggregatedSeriesData=[];while(seriesData.length){var avgX=0,avgY=0;var slice=seriesData.splice(0,this.aggregationScale);slice.forEach(function(d){avgX+=d.x/slice.length;avgY+=d.y/slice.length;});aggregatedSeriesData.push({x:avgX,y:avgY});}
+aggregatedData.push(aggregatedSeriesData);}.bind(this));return aggregatedData;}});Rickshaw.namespace('Rickshaw.Graph.Unstacker');Rickshaw.Graph.Unstacker=function(args){this.graph=args.graph;var self=this;this.graph.stackData.hooks.after.push({name:'unstacker',f:function(data){if(!self.graph.renderer.unstack)return data;data.forEach(function(seriesData){seriesData.forEach(function(d){d.y0=0;});});return data;}});};Rickshaw.namespace('Rickshaw.Series');Rickshaw.Series=Rickshaw.Class.create(Array,{initialize:function(data,palette,options){options=options||{};this.palette=new Rickshaw.Color.Palette(palette);this.timeBase=typeof(options.timeBase)==='undefined'?Math.floor(new Date().getTime()/1000):options.timeBase;var timeInterval=typeof(options.timeInterval)=='undefined'?1000:options.timeInterval;this.setTimeInterval(timeInterval);if(data&&(typeof(data)=="object")&&Array.isArray(data)){data.forEach(function(item){this.addItem(item)},this);}},addItem:function(item){if(typeof(item.name)==='undefined'){throw('addItem() needs a name');}
+item.color=(item.color||this.palette.color(item.name));item.data=(item.data||[]);if((item.data.length===0)&&this.length&&(this.getIndex()>0)){this[0].data.forEach(function(plot){item.data.push({x:plot.x,y:0});});}else if(item.data.length===0){item.data.push({x:this.timeBase-(this.timeInterval||0),y:0});}
+this.push(item);if(this.legend){this.legend.addLine(this.itemByName(item.name));}},addData:function(data,x){var index=this.getIndex();Rickshaw.keys(data).forEach(function(name){if(!this.itemByName(name)){this.addItem({name:name});}},this);this.forEach(function(item){item.data.push({x:x||(index*this.timeInterval||1)+this.timeBase,y:(data[item.name]||0)});},this);},getIndex:function(){return(this[0]&&this[0].data&&this[0].data.length)?this[0].data.length:0;},itemByName:function(name){for(var i=0;i<this.length;i++){if(this[i].name==name)
+return this[i];}},setTimeInterval:function(iv){this.timeInterval=iv/1000;},setTimeBase:function(t){this.timeBase=t;},dump:function(){var data={timeBase:this.timeBase,timeInterval:this.timeInterval,items:[]};this.forEach(function(item){var newItem={color:item.color,name:item.name,data:[]};item.data.forEach(function(plot){newItem.data.push({x:plot.x,y:plot.y});});data.items.push(newItem);});return data;},load:function(data){if(data.timeInterval){this.timeInterval=data.timeInterval;}
+if(data.timeBase){this.timeBase=data.timeBase;}
+if(data.items){data.items.forEach(function(item){this.push(item);if(this.legend){this.legend.addLine(this.itemByName(item.name));}},this);}}});Rickshaw.Series.zeroFill=function(series){Rickshaw.Series.fill(series,0);};Rickshaw.Series.fill=function(series,fill){var x;var i=0;var data=series.map(function(s){return s.data});while(i<Math.max.apply(null,data.map(function(d){return d.length}))){x=Math.min.apply(null,data.filter(function(d){return d[i]}).map(function(d){return d[i].x}));data.forEach(function(d){if(!d[i]||d[i].x!=x){d.splice(i,0,{x:x,y:fill});}});i++;}};Rickshaw.namespace('Rickshaw.Series.FixedDuration');Rickshaw.Series.FixedDuration=Rickshaw.Class.create(Rickshaw.Series,{initialize:function(data,palette,options){options=options||{};if(typeof(options.timeInterval)==='undefined'){throw new Error('FixedDuration series requires timeInterval');}
+if(typeof(options.maxDataPoints)==='undefined'){throw new Error('FixedDuration series requires maxDataPoints');}
+this.palette=new Rickshaw.Color.Palette(palette);this.timeBase=typeof(options.timeBase)==='undefined'?Math.floor(new Date().getTime()/1000):options.timeBase;this.setTimeInterval(options.timeInterval);if(this[0]&&this[0].data&&this[0].data.length){this.currentSize=this[0].data.length;this.currentIndex=this[0].data.length;}else{this.currentSize=0;this.currentIndex=0;}
+this.maxDataPoints=options.maxDataPoints;if(data&&(typeof(data)=="object")&&Array.isArray(data)){data.forEach(function(item){this.addItem(item)},this);this.currentSize+=1;this.currentIndex+=1;}
+this.timeBase-=(this.maxDataPoints-this.currentSize)*this.timeInterval;if((typeof(this.maxDataPoints)!=='undefined')&&(this.currentSize<this.maxDataPoints)){for(var i=this.maxDataPoints-this.currentSize-1;i>1;i--){this.currentSize+=1;this.currentIndex+=1;this.forEach(function(item){item.data.unshift({x:((i-1)*this.timeInterval||1)+this.timeBase,y:0,i:i});},this);}}},addData:function($super,data,x){$super(data,x);this.currentSize+=1;this.currentIndex+=1;if(this.maxDataPoints!==undefined){while(this.currentSize>this.maxDataPoints){this.dropData();}}},dropData:function(){this.forEach(function(item){item.data.splice(0,1);});this.currentSize-=1;},getIndex:function(){return this.currentIndex;}});horizon.d3_line_chart={LineChart:function(chart_class,html_element){var self=this;var jquery_element=$(html_element);self.chart_class=chart_class;self.html_element=html_element;self.legend_element=$(jquery_element.data("legend-selector")).get(0);self.slider_element=$(jquery_element.data("slider-selector")).get(0);self.url=jquery_element.data("url");self.url_parameters=jquery_element.data("url_parameters");self.final_url=self.url;if(jquery_element.data('form-selector')){$(jquery_element.data('form-selector')).each(function(){if(self.final_url.indexOf('?')>-1){self.final_url+='&'+$(this).serialize();}else{self.final_url+='?'+$(this).serialize();}});}
+self.data=[]
+self.color=d3.scale.category20();self.load_settings=function(settings){self.settings={};self.settings.renderer='line';self.settings.auto_size=true;}
+self.get_size=function(){$(self.html_element).css("height","");$(self.html_element).css("width","");var svg=$(self.html_element).find("svg");svg.hide();self.width=jquery_element.width();self.height=jquery_element.height();if(self.settings.auto_size){var auto_height=$(window).height()-jquery_element.offset().top-30;if(auto_height>self.height){self.height=auto_height;}}
+$(self.html_element).css("height",self.height);$(self.html_element).css("width",self.width);svg.show();svg.css("height",self.height);svg.css("width",self.width);}
+self.load_settings({});self.get_size();self.refresh=function(){var self=this;self.start_loading();horizon.ajax.queue({url:self.final_url,success:function(data,textStatus,jqXHR){$(self.html_element).html("");$(self.legend_element).html("");self.series=data.series;self.load_settings(data.settings);if(self.series.length<=0){$(self.html_element).html("No data available.");$(self.legend_element).html("");$(self.legend_element).css("height","");}else{self.render();}},error:function(jqXHR,textStatus,errorThrown){$(self.html_element).html("No data available.");$(self.legend_element).html("");$(self.legend_element).css("height","");horizon.alert("error",gettext("An error occurred. Please try again later."));},complete:function(jqXHR,textStatus){self.finish_loading();}});};self.render=function(){var self=this;$.map(self.series,function(serie){serie.color=self.color(serie.name)
+$.map(serie.data,function(statistic){statistic.x=d3.time.format("%Y-%m-%dT%H:%M:%S").parse(statistic.x);statistic.x=statistic.x.getTime()/1000;});});var graph=new Rickshaw.Graph({element:self.html_element,width:self.width,height:self.height,renderer:self.settings.renderer,series:self.series});graph.render();var hoverDetail=new Rickshaw.Graph.HoverDetail({graph:graph,formatter:function(series,x,y){var date='<span class="date">'+new Date(x*1000).toUTCString()+'</span>';var swatch='<span class="detail_swatch" style="background-color: '+series.color+'"></span>';var content=swatch+series.name+": "+parseInt(y)+" "+series.unit+'<br>'+date;return content;}});if(self.legend_element){var legend=new Rickshaw.Graph.Legend({graph:graph,element:self.legend_element});var shelving=new Rickshaw.Graph.Behavior.Series.Toggle({graph:graph,legend:legend});var order=new Rickshaw.Graph.Behavior.Series.Order({graph:graph,legend:legend});var highlighter=new Rickshaw.Graph.Behavior.Series.Highlight({graph:graph,legend:legend});}
+var axes_x=new Rickshaw.Graph.Axis.Time({graph:graph});axes_x.render();var axes_y=new Rickshaw.Graph.Axis.Y({graph:graph});axes_y.render();$(self.legend_element).css("height","");};self.start_loading=function(){var self=this;$(self.html_element).find(".modal-backdrop").remove();$(self.html_element).find(".spinner_wrapper").remove();self.backdrop=$("<div class='modal-backdrop'></div>");self.backdrop.css("width",self.width).css("height",self.height);$(self.html_element).append(self.backdrop);$(self.legend_element).html("").addClass("disabled");self.spinner=$("<div class='spinner_wrapper'></div>");$(self.html_element).append(self.spinner);self.spinner.spin(horizon.conf.spinner_options.line_chart);var radius=horizon.conf.spinner_options.line_chart.radius;var length=horizon.conf.spinner_options.line_chart.length;var spinner_size=radius+length;var top=(self.height/2)-spinner_size/2;var left=(self.width/2)-spinner_size/2;self.spinner.css("top",top).css("left",left);};self.finish_loading=function(){var self=this;$(self.legend_element).removeClass("disabled");};},init:function(selector,settings){var self=this;$(selector).each(function(){self.refresh(this);});var rtime=new Date(1,1,2000,12,00,00);var timeout=false;var delta=400;$(window).resize(function(){rtime=new Date();if(timeout===false){timeout=true;setTimeout(resizeend,delta);}});function resizeend(){if(new Date()-rtime<delta){setTimeout(resizeend,delta);}else{timeout=false;$(selector).each(function(){self.refresh(this);});}}
+self.bind_commands(selector);},refresh:function(html_element){var chart=new this.LineChart(this,html_element)
+chart.refresh();},bind_commands:function(selector){var select_box_selector='select[data-line-chart-command="select_box_change"]';var datepicker_selector='input[data-line-chart-command="date_picker_change"]';var self=this;connect_forms_to_charts=function(){$(selector).each(function(){var chart=$(this);$(chart.data('form-selector')).each(function(){var form=$(this);var chart_identifier='div[data-form-selector="'+chart.data('form-selector')+'"]';if(!form.data("charts_selector")){form.data("charts_selector",chart_identifier);}else{form.data("charts_selector",form.data("charts_selector")+", "+chart_identifier);}});});};delegate_event_and_refresh_charts=function(selector,event_name){$("form").delegate(selector,event_name,function(){var invoker=$(this);var form=invoker.parents("form").first();$(form.data("charts_selector")).each(function(){self.refresh(this);});});};bind_select_box_change=function(){delegate_event_and_refresh_charts(select_box_selector,"change");};bind_datepicker_change=function(){var now=new Date();$(datepicker_selector).each(function(){var el=$(this);el.datepicker({format:"yyyy-mm-dd",setDate:new Date(),showButtonPanel:true})});delegate_event_and_refresh_charts(datepicker_selector,"changeDate");};connect_forms_to_charts();bind_select_box_change();bind_datepicker_change();}}
+horizon.addInitFunction(function(){horizon.d3_line_chart.init("div[data-chart-type='line_chart']");});horizon.firewalls={user_decided_length:false,rules_selected:[],rules_available:[],getConsoleLog:function(via_user_submit){var form_element=$("#tail_length"),data;if(!via_user_submit){via_user_submit=false;}
+if(this.user_decided_length){data=$(form_element).serialize();}else{data="length=35";}
+$.ajax({url:$(form_element).attr('action'),data:data,method:'get',success:function(response_body){$('pre.logs').text(response_body);},error:function(response){if(via_user_submit){horizon.clearErrorMessages();horizon.alert('error',gettext('There was a problem communicating with the server, please try again.'));}}});},get_rule_element:function(rule_id){return $('li > label[for^="id_rule_'+rule_id+'"]');},init_rule_list:function(){horizon.firewalls.rules_selected=[];horizon.firewalls.rules_available=[];$(this.get_rule_element("")).each(function(){var $this=$(this);var $input=$this.children("input");var rule_property={name:$this.text().replace(/^\s+/,""),id:$input.attr("id"),value:$input.attr("value")};if($input.is(':checked')){horizon.firewalls.rules_selected.push(rule_property);}else{horizon.firewalls.rules_available.push(rule_property);}});},generate_rule_element:function(name,id,value){var $li=$('<li>');$li.attr('name',value).html(name+'<em class="rule_id">('+value+')</em><a href="#" class="btn btn-primary"></a>');return $li;},generate_rulelist_html:function(){var self=this;var updateForm=function(){var lists=$("#ruleListId div.input li").attr('data-index',100);var active_rules=$("#selected_rule > li").map(function(){return $(this).attr("name");});$("#ruleListId div.input input:checkbox").removeAttr('checked');active_rules.each(function(index,value){$("#ruleListId div.input input:checkbox[value="+value+"]").attr('checked','checked').parents("li").attr('data-index',index);});$("#ruleListId div.input ul").html(lists.sort(function(a,b){if($(a).data("index")<$(b).data("index"))return-1;if($(a).data("index")>$(b).data("index"))return 1;return 0;}));};$("#ruleListSortContainer").show();$("#ruleListIdContainer").hide();self.init_rule_list();$("#available_rule").empty();$.each(self.rules_available,function(index,value){$("#available_rule").append(self.generate_rule_element(value.name,value.id,value.value));});$("#selected_rule").empty();$.each(self.rules_selected,function(index,value){$("#selected_rule").append(self.generate_rule_element(value.name,value.id,value.value));});$(".rulelist > li > a.btn").click(function(e){var $this=$(this);e.preventDefault();e.stopPropagation();if($this.parents("ul#available_rule").length>0){$this.parent().appendTo($("#selected_rule"));}else if($this.parents("ul#selected_rule").length>0){$this.parent().appendTo($("#available_rule"));}
+updateForm();});if($("#ruleListId > div.control-group.error").length>0){var errortext=$("#ruleListId > div.control-group.error").find("span.help-inline").text();$("#selected_rule_h4").before($('<div class="dynamic-error">').html(errortext));}
+$(".rulelist").sortable({connectWith:"ul.rulelist",placeholder:"ui-state-highlight",distance:5,start:function(e,info){$("#selected_rule").addClass("dragging");},stop:function(e,info){$("#selected_rule").removeClass("dragging");updateForm();}}).disableSelection();},workflow_init:function(modal){horizon.firewalls.generate_rulelist_html();}};horizon.addInitFunction(function(){$(document).on('submit','#tail_length',function(evt){horizon.firewalls.user_decided_length=true;horizon.firewalls.getConsoleLog(true);evt.preventDefault();});});
\ No newline at end of file
similarity index 58%
rename from debian/static/openstack-dashboard/js/967e5ade6890.js
rename to debian/static/openstack-dashboard/js/588884c5a22a.js
index cffbf1b069ba435eebd41d5afbbefdc25ee14f90..307d06416939a4169a3632013180822fa79cf053 100644 (file)
@@ -1,2 +1,2 @@
 var Horizon=function(){var horizon={},initFunctions=[];horizon.addInitFunction=function(fn){initFunctions.push(fn);};horizon.init=function(){for(var i=0;i<initFunctions.length;i+=1){initFunctions[i]();}
-initFunctions=[];};return horizon;};var horizon=new Horizon();horizon.conf={debug:null,static_url:null,ajax:{queue_limit:null},spinner_options:{inline:{lines:10,length:5,width:2,radius:3,color:'#000',speed:0.8,trail:50,zIndex:100},modal:{lines:10,length:15,width:4,radius:10,color:'#000',speed:0.8,trail:50}}};horizon.conf.debug=false;horizon.conf.static_url="/static/";horizon.conf.ajax={queue_limit:10};horizon.conf.auto_fade_alerts={delay:3000,fade_duration:1500,types:['alert-success','alert-info']};
\ No newline at end of file
+initFunctions=[];};return horizon;};var horizon=new Horizon();horizon.conf={debug:null,static_url:null,ajax:{queue_limit:null},spinner_options:{inline:{lines:10,length:5,width:2,radius:3,color:'#000',speed:0.8,trail:50,zIndex:100},modal:{lines:10,length:15,width:4,radius:10,color:'#000',speed:0.8,trail:50},line_chart:{lines:10,length:15,width:4,radius:11,color:'#000',speed:0.8,trail:50}}};horizon.conf.debug=false;horizon.conf.static_url="/static/";horizon.conf.ajax={queue_limit:10};horizon.conf.auto_fade_alerts={delay:3000,fade_duration:1500,types:['alert-success','alert-info']};
\ No newline at end of file
index 932a89249b0adaf2f66dfa7f8f382e4b0c84b271..59345e8f02274cecc69e3ce7681fa55ce0b0aeff 100644 (file)
@@ -1,5 +1,5 @@
 {
-  "b035e11295a8c5428002ed96c433a992": "<link rel=\"stylesheet\" href=\"/static/dashboard/css/3c066b7fc33c.css\" type=\"text/css\" media=\"screen\" />",
-  "31e68b3a0f4dc1c7b2874c30d74a6c5f": "<script type=\"text/javascript\" src=\"/static/dashboard/js/967e5ade6890.js\"></script>",
-  "f993e41fe03b897b331e0839960c1def": "<script type=\"text/javascript\" src=\"/static/dashboard/js/7d82b0a14954.js\"></script>"
+  "31e68b3a0f4dc1c7b2874c30d74a6c5f": "<script type=\"text/javascript\" src=\"/static/dashboard/js/588884c5a22a.js\"></script>",
+  "fa1e37f67ab85248c0eeab1040fd5b0f": "<script type=\"text/javascript\" src=\"/static/dashboard/js/271a130e6a31.js\"></script>",
+  "cd3f60d28370bf68dc0658c05abae046": "<link rel=\"stylesheet\" href=\"/static/dashboard/css/d46048c6478b.css\" type=\"text/css\" media=\"screen\" />"
 }
\ No newline at end of file
index e325d411a2647d0b6badc33ffc8da36a07742d83..bc9f3e370da9ba0dc44d09fd68f483c173c46905 100644 (file)
@@ -1,12 +1,3 @@
-/*!
- * Bootstrap v2.0.1
- *
- * Copyright 2012 Twitter, Inc
- * Licensed under the Apache License v2.0
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Designed and built with all the love in the world @twitter by @mdo and @fat.
- */
 article,
 aside,
 details,
@@ -19,9 +10,7 @@ nav,
 section {
   display: block;
 }
-audio,
-canvas,
-video {
+audio, canvas, video {
   display: inline-block;
   *display: inline;
   *zoom: 1;
@@ -35,16 +24,14 @@ html {
   -ms-text-size-adjust: 100%;
 }
 a:focus {
-  outline: thin dotted #333;
+  outline: thin dotted #333333;
   outline: 5px auto -webkit-focus-ring-color;
   outline-offset: -2px;
 }
-a:hover,
-a:active {
+a:hover, a:active {
   outline: 0;
 }
-sub,
-sup {
+sub, sup {
   position: relative;
   font-size: 75%;
   line-height: 0;
@@ -62,28 +49,20 @@ img {
   border: 0;
   -ms-interpolation-mode: bicubic;
 }
-button,
-input,
-select,
-textarea {
+button, input, select, textarea {
   margin: 0;
   font-size: 100%;
   vertical-align: middle;
 }
-button,
-input {
+button, input {
   *overflow: visible;
   line-height: normal;
 }
-button::-moz-focus-inner,
-input::-moz-focus-inner {
+button::-moz-focus-inner, input::-moz-focus-inner {
   padding: 0;
   border: 0;
 }
-button,
-input[type="button"],
-input[type="reset"],
-input[type="submit"] {
+button, input[type="button"], input[type="reset"], input[type="submit"] {
   cursor: pointer;
   -webkit-appearance: button;
 }
@@ -104,8 +83,7 @@ textarea {
 .clearfix {
   *zoom: 1;
 }
-.clearfix:before,
-.clearfix:after {
+.clearfix:before, .clearfix:after {
   display: table;
   content: "";
 }
@@ -132,8 +110,7 @@ a:hover {
   margin-left: -20px;
   *zoom: 1;
 }
-.row:before,
-.row:after {
+.row:before, .row:after {
   display: table;
   content: "";
 }
@@ -177,8 +154,7 @@ a:hover {
 .span11 {
   width: 860px;
 }
-.span12,
-.container {
+.span12, .container {
   width: 940px;
 }
 .offset1 {
@@ -218,8 +194,7 @@ a:hover {
   width: 100%;
   *zoom: 1;
 }
-.row-fluid:before,
-.row-fluid:after {
+.row-fluid:before, .row-fluid:after {
   display: table;
   content: "";
 }
@@ -249,25 +224,25 @@ a:hover {
   width: 40.425531911%;
 }
 .row-fluid > .span6 {
-  width: 48.93617020799999%;
+  width: 48.936170208%;
 }
 .row-fluid > .span7 {
   width: 57.446808505%;
 }
 .row-fluid > .span8 {
-  width: 65.95744680199999%;
+  width: 65.957446802%;
 }
 .row-fluid > .span9 {
   width: 74.468085099%;
 }
 .row-fluid > .span10 {
-  width: 82.97872339599999%;
+  width: 82.978723396%;
 }
 .row-fluid > .span11 {
   width: 91.489361693%;
 }
 .row-fluid > .span12 {
-  width: 99.99999998999999%;
+  width: 99.99999999%;
 }
 .container {
   width: 940px;
@@ -275,8 +250,7 @@ a:hover {
   margin-right: auto;
   *zoom: 1;
 }
-.container:before,
-.container:after {
+.container:before, .container:after {
   display: table;
   content: "";
 }
@@ -288,8 +262,7 @@ a:hover {
   padding-right: 20px;
   *zoom: 1;
 }
-.container-fluid:before,
-.container-fluid:after {
+.container-fluid:before, .container-fluid:after {
   display: table;
   content: "";
 }
@@ -312,23 +285,13 @@ p small {
   font-weight: 200;
   line-height: 27px;
 }
-h1,
-h2,
-h3,
-h4,
-h5,
-h6 {
+h1, h2, h3, h4, h5, h6 {
   margin: 0;
   font-weight: bold;
   color: #333333;
   text-rendering: optimizelegibility;
 }
-h1 small,
-h2 small,
-h3 small,
-h4 small,
-h5 small,
-h6 small {
+h1 small, h2 small, h3 small, h4 small, h5 small, h6 small {
   font-weight: normal;
   color: #999999;
 }
@@ -353,9 +316,7 @@ h3 {
 h3 small {
   font-size: 14px;
 }
-h4,
-h5,
-h6 {
+h4, h5, h6 {
   line-height: 18px;
 }
 h4 {
@@ -380,15 +341,11 @@ h6 {
 .page-header h1 {
   line-height: 1;
 }
-ul,
-ol {
+ul, ol {
   padding: 0;
   margin: 0 0 9px 25px;
 }
-ul ul,
-ul ol,
-ol ol,
-ol ul {
+ul ul, ul ol, ol ol, ol ul {
   margin-bottom: 0;
 }
 ul {
@@ -400,8 +357,7 @@ ol {
 li {
   line-height: 18px;
 }
-ul.unstyled,
-ol.unstyled {
+ul.unstyled, ol.unstyled {
   margin-left: 0;
   list-style: none;
 }
@@ -412,8 +368,7 @@ table ul {
 dl {
   margin-bottom: 18px;
 }
-dt,
-dd {
+dt, dd {
   line-height: 18px;
 }
 dt {
@@ -440,7 +395,7 @@ em {
 abbr {
   font-size: 90%;
   text-transform: uppercase;
-  border-bottom: 1px dotted #ddd;
+  border-bottom: 1px dotted #dddddd;
   cursor: help;
 }
 blockquote {
@@ -469,14 +424,10 @@ blockquote.pull-right {
   border-left: 0;
   border-right: 5px solid #eeeeee;
 }
-blockquote.pull-right p,
-blockquote.pull-right small {
+blockquote.pull-right p, blockquote.pull-right small {
   text-align: right;
 }
-q:before,
-q:after,
-blockquote:before,
-blockquote:after {
+q:before, q:after, blockquote:before, blockquote:after {
   content: "";
 }
 address {
@@ -491,8 +442,7 @@ small {
 cite {
   font-style: normal;
 }
-code,
-pre {
+code, pre {
   padding: 0 3px 2px;
   font-family: Menlo, Monaco, "Courier New", monospace;
   font-size: 12px;
@@ -503,7 +453,7 @@ pre {
 }
 code {
   padding: 3px 4px;
-  color: #d14;
+  color: #dd1144;
   background-color: #f7f7f9;
   border: 1px solid #e1e1e8;
 }
@@ -514,8 +464,8 @@ pre {
   font-size: 12px;
   line-height: 18px;
   background-color: #f5f5f5;
-  border: 1px solid #ccc;
-  border: 1px solid rgba(0, 0, 0, 0.15);
+  border: 1px solid #cccccc;
+  border: 1px solid rgba(0,0,0,.15);
   -webkit-border-radius: 4px;
   -moz-border-radius: 4px;
   border-radius: 4px;
@@ -554,25 +504,18 @@ legend {
   line-height: 36px;
   color: #333333;
   border: 0;
-  border-bottom: 1px solid #eee;
+  border-bottom: 1px solid #eeeeee;
 }
 legend small {
   font-size: 13.5px;
   color: #999999;
 }
-label,
-input,
-button,
-select,
-textarea {
+label, input, button, select, textarea {
   font-size: 13px;
   font-weight: normal;
   line-height: 18px;
 }
-input,
-button,
-select,
-textarea {
+input, button, select, textarea {
   font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
 }
 label {
@@ -580,10 +523,7 @@ label {
   margin-bottom: 5px;
   color: #333333;
 }
-input,
-textarea,
-select,
-.uneditable-input {
+input, textarea, select, .uneditable-input {
   display: inline-block;
   width: 210px;
   height: 18px;
@@ -592,7 +532,7 @@ select,
   font-size: 13px;
   line-height: 18px;
   color: #555555;
-  border: 1px solid #ccc;
+  border: 1px solid #cccccc;
   -webkit-border-radius: 3px;
   -moz-border-radius: 3px;
   border-radius: 3px;
@@ -601,29 +541,21 @@ select,
   width: auto;
   height: auto;
 }
-label input,
-label textarea,
-label select {
+label input, label textarea, label select {
   display: block;
 }
-input[type="image"],
-input[type="checkbox"],
-input[type="radio"] {
+input[type="image"], input[type="checkbox"], input[type="radio"] {
   width: auto;
   height: auto;
   padding: 0;
   margin: 3px 0;
   *margin-top: 0;
-  /* IE7 */
-
   line-height: normal;
   cursor: pointer;
   -webkit-border-radius: 0;
   -moz-border-radius: 0;
   border-radius: 0;
   border: 0 \9;
-  /* IE9 and down */
-
 }
 input[type="image"] {
   border: 0;
@@ -639,20 +571,13 @@ input[type="file"] {
   -moz-box-shadow: none;
   box-shadow: none;
 }
-input[type="button"],
-input[type="reset"],
-input[type="submit"] {
+input[type="button"], input[type="reset"], input[type="submit"] {
   width: auto;
   height: auto;
 }
-select,
-input[type="file"] {
+select, input[type="file"] {
   height: 28px;
-  /* In IE7, the height of the select element cannot be changed by height, only font-size */
-
   *margin-top: 4px;
-  /* For IE7, add top margin to align select with labels */
-
   line-height: 28px;
 }
 input[type="file"] {
@@ -662,8 +587,7 @@ select {
   width: 220px;
   background-color: #ffffff;
 }
-select[multiple],
-select[size] {
+select[multiple], select[size] {
   height: auto;
 }
 input[type="image"] {
@@ -677,51 +601,42 @@ textarea {
 input[type="hidden"] {
   display: none;
 }
-.radio,
-.checkbox {
+.radio, .checkbox {
   padding-left: 18px;
 }
-.radio input[type="radio"],
-.checkbox input[type="checkbox"] {
+.radio input[type="radio"], .checkbox input[type="checkbox"] {
   float: left;
   margin-left: -18px;
 }
-.controls > .radio:first-child,
-.controls > .checkbox:first-child {
+.controls > .radio:first-child, .controls > .checkbox:first-child {
   padding-top: 5px;
 }
-.radio.inline,
-.checkbox.inline {
+.radio.inline, .checkbox.inline {
   display: inline-block;
   padding-top: 5px;
   margin-bottom: 0;
   vertical-align: middle;
 }
-.radio.inline + .radio.inline,
-.checkbox.inline + .checkbox.inline {
+.radio.inline + .radio.inline, .checkbox.inline + .checkbox.inline {
   margin-left: 10px;
 }
-input,
-textarea {
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-  -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-  -webkit-transition: border linear 0.2s, box-shadow linear 0.2s;
-  -moz-transition: border linear 0.2s, box-shadow linear 0.2s;
-  -ms-transition: border linear 0.2s, box-shadow linear 0.2s;
-  -o-transition: border linear 0.2s, box-shadow linear 0.2s;
-  transition: border linear 0.2s, box-shadow linear 0.2s;
-}
-input:focus,
-textarea:focus {
-  border-color: rgba(82, 168, 236, 0.8);
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
-  -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
-  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
+input, textarea {
+  -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075);
+  -moz-box-shadow: inset 0 1px 1px rgba(0,0,0,.075);
+  box-shadow: inset 0 1px 1px rgba(0,0,0,.075);
+  -webkit-transition: border linear .2s, box-shadow linear .2s;
+  -moz-transition: border linear .2s, box-shadow linear .2s;
+  -ms-transition: border linear .2s, box-shadow linear .2s;
+  -o-transition: border linear .2s, box-shadow linear .2s;
+  transition: border linear .2s, box-shadow linear .2s;
+}
+input:focus, textarea:focus {
+  border-color: rgba(82,168,236,.8);
+  -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6);
+  -moz-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6);
+  box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6);
   outline: 0;
   outline: thin dotted \9;
-  /* IE6-9 */
-
 }
 input[type="file"]:focus,
 input[type="radio"]:focus,
@@ -730,7 +645,7 @@ select:focus {
   -webkit-box-shadow: none;
   -moz-box-shadow: none;
   box-shadow: none;
-  outline: thin dotted #333;
+  outline: thin dotted #333333;
   outline: 5px auto -webkit-focus-ring-color;
   outline-offset: -2px;
 }
@@ -759,64 +674,40 @@ textarea[class*="span"],
   float: none;
   margin-left: 0;
 }
-input.span1,
-textarea.span1,
-.uneditable-input.span1 {
+input.span1, textarea.span1, .uneditable-input.span1 {
   width: 50px;
 }
-input.span2,
-textarea.span2,
-.uneditable-input.span2 {
+input.span2, textarea.span2, .uneditable-input.span2 {
   width: 130px;
 }
-input.span3,
-textarea.span3,
-.uneditable-input.span3 {
+input.span3, textarea.span3, .uneditable-input.span3 {
   width: 210px;
 }
-input.span4,
-textarea.span4,
-.uneditable-input.span4 {
+input.span4, textarea.span4, .uneditable-input.span4 {
   width: 290px;
 }
-input.span5,
-textarea.span5,
-.uneditable-input.span5 {
+input.span5, textarea.span5, .uneditable-input.span5 {
   width: 370px;
 }
-input.span6,
-textarea.span6,
-.uneditable-input.span6 {
+input.span6, textarea.span6, .uneditable-input.span6 {
   width: 450px;
 }
-input.span7,
-textarea.span7,
-.uneditable-input.span7 {
+input.span7, textarea.span7, .uneditable-input.span7 {
   width: 530px;
 }
-input.span8,
-textarea.span8,
-.uneditable-input.span8 {
+input.span8, textarea.span8, .uneditable-input.span8 {
   width: 610px;
 }
-input.span9,
-textarea.span9,
-.uneditable-input.span9 {
+input.span9, textarea.span9, .uneditable-input.span9 {
   width: 690px;
 }
-input.span10,
-textarea.span10,
-.uneditable-input.span10 {
+input.span10, textarea.span10, .uneditable-input.span10 {
   width: 770px;
 }
-input.span11,
-textarea.span11,
-.uneditable-input.span11 {
+input.span11, textarea.span11, .uneditable-input.span11 {
   width: 850px;
 }
-input.span12,
-textarea.span12,
-.uneditable-input.span12 {
+input.span12, textarea.span12, .uneditable-input.span12 {
   width: 930px;
 }
 input[disabled],
@@ -826,18 +717,18 @@ input[readonly],
 select[readonly],
 textarea[readonly] {
   background-color: #f5f5f5;
-  border-color: #ddd;
+  border-color: #dddddd;
   cursor: not-allowed;
 }
 .control-group.warning > label,
 .control-group.warning .help-block,
 .control-group.warning .help-inline {
-  color: #c09853;
+  color: #333333;
 }
 .control-group.warning input,
 .control-group.warning select,
 .control-group.warning textarea {
-  color: #c09853;
+  color: #333333;
   border-color: #c09853;
 }
 .control-group.warning input:focus,
@@ -850,19 +741,19 @@ textarea[readonly] {
 }
 .control-group.warning .input-prepend .add-on,
 .control-group.warning .input-append .add-on {
-  color: #c09853;
+  color: #333333;
   background-color: #fcf8e3;
-  border-color: #c09853;
+  border-color: #333333;
 }
 .control-group.error > label,
 .control-group.error .help-block,
 .control-group.error .help-inline {
-  color: #b94a48;
+  color: #333333;
 }
 .control-group.error input,
 .control-group.error select,
 .control-group.error textarea {
-  color: #b94a48;
+  color: #333333;
   border-color: #b94a48;
 }
 .control-group.error input:focus,
@@ -875,19 +766,19 @@ textarea[readonly] {
 }
 .control-group.error .input-prepend .add-on,
 .control-group.error .input-append .add-on {
-  color: #b94a48;
+  color: #333333;
   background-color: #f2dede;
-  border-color: #b94a48;
+  border-color: #333333;
 }
 .control-group.success > label,
 .control-group.success .help-block,
 .control-group.success .help-inline {
-  color: #468847;
+  color: #333333;
 }
 .control-group.success input,
 .control-group.success select,
 .control-group.success textarea {
-  color: #468847;
+  color: #333333;
   border-color: #468847;
 }
 .control-group.success input:focus,
@@ -900,9 +791,9 @@ textarea[readonly] {
 }
 .control-group.success .input-prepend .add-on,
 .control-group.success .input-append .add-on {
-  color: #468847;
+  color: #333333;
   background-color: #dff0d8;
-  border-color: #468847;
+  border-color: #333333;
 }
 input:focus:required:invalid,
 textarea:focus:required:invalid,
@@ -923,15 +814,15 @@ select:focus:required:invalid:focus {
   margin-top: 18px;
   margin-bottom: 18px;
   background-color: #f5f5f5;
-  border-top: 1px solid #ddd;
+  border-top: 1px solid #dddddd;
 }
 .uneditable-input {
   display: block;
   background-color: #ffffff;
-  border-color: #eee;
-  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025);
-  -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025);
-  box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025);
+  border-color: #eeeeee;
+  -webkit-box-shadow: inset 0 1px 2px rgba(0,0,0,.025);
+  -moz-box-shadow: inset 0 1px 2px rgba(0,0,0,.025);
+  box-shadow: inset 0 1px 2px rgba(0,0,0,.025);
   cursor: not-allowed;
 }
 :-moz-placeholder {
@@ -949,50 +840,44 @@ select:focus:required:invalid:focus {
 .help-inline {
   display: inline-block;
   *display: inline;
-  /* IE7 inline-block hack */
-
   *zoom: 1;
   margin-bottom: 9px;
   vertical-align: middle;
   padding-left: 5px;
 }
-.input-prepend,
-.input-append {
+.input-prepend, .input-append {
   margin-bottom: 5px;
   *zoom: 1;
 }
 .input-prepend:before,
-.input-append:before,
 .input-prepend:after,
+.input-append:before,
 .input-append:after {
   display: table;
   content: "";
 }
-.input-prepend:after,
-.input-append:after {
+.input-prepend:after, .input-append:after {
   clear: both;
 }
 .input-prepend input,
-.input-append input,
 .input-prepend .uneditable-input,
+.input-append input,
 .input-append .uneditable-input {
   -webkit-border-radius: 0 3px 3px 0;
   -moz-border-radius: 0 3px 3px 0;
   border-radius: 0 3px 3px 0;
 }
 .input-prepend input:focus,
-.input-append input:focus,
 .input-prepend .uneditable-input:focus,
+.input-append input:focus,
 .input-append .uneditable-input:focus {
   position: relative;
   z-index: 2;
 }
-.input-prepend .uneditable-input,
-.input-append .uneditable-input {
-  border-left-color: #ccc;
+.input-prepend .uneditable-input, .input-append .uneditable-input {
+  border-left-color: #cccccc;
 }
-.input-prepend .add-on,
-.input-append .add-on {
+.input-prepend .add-on, .input-append .add-on {
   float: left;
   display: block;
   width: auto;
@@ -1006,31 +891,27 @@ select:focus:required:invalid:focus {
   text-align: center;
   text-shadow: 0 1px 0 #ffffff;
   background-color: #f5f5f5;
-  border: 1px solid #ccc;
+  border: 1px solid #cccccc;
   -webkit-border-radius: 3px 0 0 3px;
   -moz-border-radius: 3px 0 0 3px;
   border-radius: 3px 0 0 3px;
 }
-.input-prepend .active,
-.input-append .active {
+.input-prepend .active, .input-append .active {
   background-color: #a9dba9;
   border-color: #46a546;
 }
 .input-prepend .add-on {
   *margin-top: 1px;
-  /* IE6-7 */
-
 }
-.input-append input,
-.input-append .uneditable-input {
+.input-append input, .input-append .uneditable-input {
   float: left;
   -webkit-border-radius: 3px 0 0 3px;
   -moz-border-radius: 3px 0 0 3px;
   border-radius: 3px 0 0 3px;
 }
 .input-append .uneditable-input {
-  border-left-color: #eee;
-  border-right-color: #ccc;
+  border-left-color: #eeeeee;
+  border-right-color: #cccccc;
 }
 .input-append .add-on {
   margin-right: 0;
@@ -1054,26 +935,24 @@ select:focus:required:invalid:focus {
   border-radius: 14px;
 }
 .form-search input,
-.form-inline input,
-.form-horizontal input,
 .form-search textarea,
-.form-inline textarea,
-.form-horizontal textarea,
 .form-search select,
-.form-inline select,
-.form-horizontal select,
 .form-search .help-inline,
-.form-inline .help-inline,
-.form-horizontal .help-inline,
 .form-search .uneditable-input,
+.form-inline input,
+.form-inline textarea,
+.form-inline select,
+.form-inline .help-inline,
 .form-inline .uneditable-input,
+.form-horizontal input,
+.form-horizontal textarea,
+.form-horizontal select,
+.form-horizontal .help-inline,
 .form-horizontal .uneditable-input {
   display: inline-block;
   margin-bottom: 0;
 }
-.form-search .hide,
-.form-inline .hide,
-.form-horizontal .hide {
+.form-search .hide, .form-inline .hide, .form-horizontal .hide {
   display: none;
 }
 .form-search label,
@@ -1108,8 +987,7 @@ legend + .control-group {
   margin-bottom: 18px;
   *zoom: 1;
 }
-.form-horizontal .control-group:before,
-.form-horizontal .control-group:after {
+.form-horizontal .control-group:before, .form-horizontal .control-group:after {
   display: table;
   content: "";
 }
@@ -1137,13 +1015,12 @@ table {
   width: 100%;
   margin-bottom: 18px;
 }
-.table th,
-.table td {
+.table th, .table td {
   padding: 8px;
   line-height: 18px;
   text-align: left;
   vertical-align: top;
-  border-top: 1px solid #ddd;
+  border-top: 1px solid #dddddd;
 }
 .table th {
   font-weight: bold;
@@ -1151,19 +1028,17 @@ table {
 .table thead th {
   vertical-align: bottom;
 }
-.table thead:first-child tr th,
-.table thead:first-child tr td {
+.table thead:first-child tr th, .table thead:first-child tr td {
   border-top: 0;
 }
 .table tbody + tbody {
-  border-top: 2px solid #ddd;
+  border-top: 2px solid #dddddd;
 }
-.table-condensed th,
-.table-condensed td {
+.table-condensed th, .table-condensed td {
   padding: 4px 5px;
 }
 .table-bordered {
-  border: 1px solid #ddd;
+  border: 1px solid #dddddd;
   border-collapse: separate;
   *border-collapse: collapsed;
   -webkit-border-radius: 4px;
@@ -1174,7 +1049,7 @@ table {
 .table-bordered td + td,
 .table-bordered th + td,
 .table-bordered td + th {
-  border-left: 1px solid #ddd;
+  border-left: 1px solid #dddddd;
 }
 .table-bordered thead:first-child tr:first-child th,
 .table-bordered tbody:first-child tr:first-child th,
@@ -1205,12 +1080,10 @@ table {
   -moz-border-radius: 0 0 4px 0;
   border-radius: 0 0 4px 0;
 }
-.table-striped tbody tr:nth-child(odd) td,
-.table-striped tbody tr:nth-child(odd) th {
+.table-striped tbody tr:nth-child(odd)td, .table-striped tbody tr:nth-child(odd)th {
   background-color: #f9f9f9;
 }
-.table tbody tr:hover td,
-.table tbody tr:hover th {
+.table tbody tr:hover td, .table tbody tr:hover th {
   background-color: #f5f5f5;
 }
 table .span1 {
@@ -1273,27 +1146,25 @@ table .span12 {
   width: 924px;
   margin-left: 0;
 }
-[class^="icon-"],
-[class*=" icon-"] {
+[class^="icon-"], [class*=" icon-"] {
   display: inline-block;
   width: 14px;
   height: 14px;
   line-height: 14px;
   vertical-align: text-top;
-  xbackground-image: url('/static/bootstrap/img/glyphicons-halflings.png?531d4b607365');
+  background-image: url('/static/bootstrap/img/glyphicons-halflings.png');
   background-position: 14px 14px;
   background-repeat: no-repeat;
   *margin-right: .3em;
 }
-[class^="icon-"]:last-child,
-[class*=" icon-"]:last-child {
+[class^="icon-"]:last-child, [class*=" icon-"]:last-child {
   *margin-left: 0;
 }
 .icon-white {
-  xbackground-image: url('/static/bootstrap/img/glyphicons-halflings-white.png?11118ae8db79');
+  background-image: url('/static/bootstrap/img/glyphicons-halflings-white.png');
 }
 .icon-glass {
-  background-position: 0      0;
+  background-position: 0 0;
 }
 .icon-music {
   background-position: -24px 0;
@@ -1658,8 +1529,7 @@ table .span12 {
 .dropdown-toggle {
   *margin-bottom: -3px;
 }
-.dropdown-toggle:active,
-.open .dropdown-toggle {
+.dropdown-toggle:active, .open .dropdown-toggle {
   outline: 0;
 }
 .caret {
@@ -1680,8 +1550,7 @@ table .span12 {
   margin-top: 8px;
   margin-left: 2px;
 }
-.dropdown:hover .caret,
-.open.dropdown .caret {
+.dropdown:hover .caret, .open.dropdown .caret {
   opacity: 1;
   filter: alpha(opacity=100);
 }
@@ -1698,16 +1567,16 @@ table .span12 {
   margin: 0;
   list-style: none;
   background-color: #ffffff;
-  border-color: #ccc;
-  border-color: rgba(0, 0, 0, 0.2);
+  border-color: #cccccc;
+  border-color: rgba(0,0,0,.2);
   border-style: solid;
   border-width: 1px;
   -webkit-border-radius: 0 0 5px 5px;
   -moz-border-radius: 0 0 5px 5px;
   border-radius: 0 0 5px 5px;
-  -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
-  -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
-  box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
+  -webkit-box-shadow: 0 5px 10px rgba(0,0,0,.2);
+  -moz-box-shadow: 0 5px 10px rgba(0,0,0,.2);
+  box-shadow: 0 5px 10px rgba(0,0,0,.2);
   -webkit-background-clip: padding-box;
   -moz-background-clip: padding;
   background-clip: padding-box;
@@ -1735,7 +1604,7 @@ table .span12 {
   font-weight: normal;
   line-height: 18px;
   color: #555555;
-  white-space: nowrap;
+  word-wrap: break-word;
 }
 .dropdown-menu li > a:hover,
 .dropdown-menu .active > a,
@@ -1749,8 +1618,8 @@ table .span12 {
 }
 .dropdown.open .dropdown-toggle {
   color: #ffffff;
-  background: #ccc;
-  background: rgba(0, 0, 0, 0.3);
+  background: #cccccc;
+  background: rgba(0,0,0,.3);
 }
 .dropdown.open .dropdown-menu {
   display: block;
@@ -1766,36 +1635,36 @@ table .span12 {
   padding: 19px;
   margin-bottom: 20px;
   background-color: #f5f5f5;
-  border: 1px solid #eee;
-  border: 1px solid rgba(0, 0, 0, 0.05);
+  border: 1px solid #eeeeee;
+  border: 1px solid rgba(0,0,0,.05);
   -webkit-border-radius: 4px;
   -moz-border-radius: 4px;
   border-radius: 4px;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
-  -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
-  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
+  -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.05);
+  -moz-box-shadow: inset 0 1px 1px rgba(0,0,0,.05);
+  box-shadow: inset 0 1px 1px rgba(0,0,0,.05);
 }
 .well blockquote {
-  border-color: #ddd;
-  border-color: rgba(0, 0, 0, 0.15);
+  border-color: #dddddd;
+  border-color: rgba(0,0,0,.15);
 }
 .fade {
-  -webkit-transition: opacity 0.15s linear;
-  -moz-transition: opacity 0.15s linear;
-  -ms-transition: opacity 0.15s linear;
-  -o-transition: opacity 0.15s linear;
-  transition: opacity 0.15s linear;
+  -webkit-transition: opacity .15s linear;
+  -moz-transition: opacity .15s linear;
+  -ms-transition: opacity .15s linear;
+  -o-transition: opacity .15s linear;
+  transition: opacity .15s linear;
   opacity: 0;
 }
 .fade.in {
   opacity: 1;
 }
 .collapse {
-  -webkit-transition: height 0.35s ease;
-  -moz-transition: height 0.35s ease;
-  -ms-transition: height 0.35s ease;
-  -o-transition: height 0.35s ease;
-  transition: height 0.35s ease;
+  -webkit-transition: height .35s ease;
+  -moz-transition: height .35s ease;
+  -ms-transition: height .35s ease;
+  -o-transition: height .35s ease;
+  transition: height .35s ease;
   position: relative;
   overflow: hidden;
   height: 0;
@@ -1809,7 +1678,7 @@ table .span12 {
   font-weight: bold;
   line-height: 18px;
   color: #000000;
-  text-shadow: 0 1px 0 #ffffff;
+  text-shadow: 0 1px 0 #ffffff01;
   opacity: 0.2;
   filter: alpha(opacity=20);
 }
@@ -1828,42 +1697,37 @@ table .span12 {
   line-height: 18px;
   color: #333333;
   text-align: center;
-  text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75);
+  text-shadow: 0 1px 1px rgba(255,255,255,.75);
   vertical-align: middle;
   background-color: #f5f5f5;
-  background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6);
-  background-image: -ms-linear-gradient(top, #ffffff, #e6e6e6);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));
-  background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6);
-  background-image: -o-linear-gradient(top, #ffffff, #e6e6e6);
-  background-image: linear-gradient(top, #ffffff, #e6e6e6);
+  background-image: -moz-linear-gradient(top,#ffffff,#e6e6e6 );
+  background-image: -ms-linear-gradient(top,#ffffff,#e6e6e6 );
+  background-image: -webkit-gradient(linear,0 0,0 100%,from(#ffffff),to(#e6e6e6 ));
+  background-image: -webkit-linear-gradient(top,#ffffff,#e6e6e6 );
+  background-image: -o-linear-gradient(top,#ffffff,#e6e6e6 );
+  background-image: linear-gradient(top,#ffffff,#e6e6e6 );
   background-repeat: repeat-x;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);
-  border-color: #e6e6e6 #e6e6e6 #bfbfbf;
-  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6 ', GradientType=0);
+  border-color: #e6e6e6  #e6e6e6  #c0c0c0;
+  border-color: rgba(0,0,0,.1)rgba(0,0,0,.1)fadein(rgba(0,0,0,.1),15%);
   filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-  border: 1px solid #ccc;
-  border-bottom-color: #bbb;
+  border: 1px solid #cccccc;
+  border-bottom-color: #bbbbbb;
   -webkit-border-radius: 4px;
   -moz-border-radius: 4px;
   border-radius: 4px;
-  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
-  -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
-  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
+  -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);
+  -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);
+  box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);
   cursor: pointer;
   filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
   *margin-left: .3em;
 }
-.btn:hover,
-.btn:active,
-.btn.active,
-.btn.disabled,
-.btn[disabled] {
+.btn:hover, .btn:active, .btn.active, .btn.disabled, .btn[disabled] {
   background-color: #e6e6e6;
 }
-.btn:active,
-.btn.active {
-  background-color: #cccccc \9;
+.btn:active, .btn.active {
+  background-color: #cdcdcd \9;
 }
 .btn:first-child {
   *margin-left: 0;
@@ -1873,29 +1737,27 @@ table .span12 {
   text-decoration: none;
   background-color: #e6e6e6;
   background-position: 0 -15px;
-  -webkit-transition: background-position 0.1s linear;
-  -moz-transition: background-position 0.1s linear;
-  -ms-transition: background-position 0.1s linear;
-  -o-transition: background-position 0.1s linear;
-  transition: background-position 0.1s linear;
+  -webkit-transition: background-position .1s linear;
+  -moz-transition: background-position .1s linear;
+  -ms-transition: background-position .1s linear;
+  -o-transition: background-position .1s linear;
+  transition: background-position .1s linear;
 }
 .btn:focus {
-  outline: thin dotted #333;
+  outline: thin dotted #333333;
   outline: 5px auto -webkit-focus-ring-color;
   outline-offset: -2px;
 }
-.btn.active,
-.btn:active {
+.btn.active, .btn:active {
   background-image: none;
-  -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
-  -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
-  box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
+  -webkit-box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);
+  -moz-box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);
+  box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);
   background-color: #e6e6e6;
   background-color: #d9d9d9 \9;
   outline: 0;
 }
-.btn.disabled,
-.btn[disabled] {
+.btn.disabled, .btn[disabled] {
   cursor: default;
   background-image: none;
   background-color: #e6e6e6;
@@ -1941,8 +1803,8 @@ table .span12 {
 .btn-info:hover,
 .btn-inverse,
 .btn-inverse:hover {
-  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
-  color: #fff;
+  text-shadow: 0 -1px 0 rgba(0,0,0,.25);
+  color: #ffffff;
 }
 .btn-primary.active,
 .btn-warning.active,
@@ -1950,57 +1812,44 @@ table .span12 {
 .btn-success.active,
 .btn-info.active,
 .btn-dark.active {
-  color: #fff,
-  background-color: #c44012;
-
+  color: rgba(255,255,255,.75);
 }
-
 .btn-primary {
-    color: #fff;
-    border: 1px solid #ab370f;
-    background-color: #DD4814;
-    background-image: linear-gradient(bottom, rgb(199,66,18) 0%, rgb(221,74,20) 100%);
-    background-image: -o-linear-gradient(bottom, rgb(199,66,18) 0%, rgb(221,74,20) 100%);
-    background-image: -moz-linear-gradient(bottom, rgb(199,66,18) 0%, rgb(221,74,20) 100%);
-    background-image: -webkit-linear-gradient(bottom, rgb(199,66,18) 0%, rgb(221,74,20) 100%);
-    background-image: -ms-linear-gradient(bottom, rgb(199,66,18) 0%, rgb(221,74,20) 100%);
-    -webkit-box-shadow: inset 0 1px 0 0 rgba(255, 255, 255, 0.2);
-    box-shadow: inset 0 1px 0 0 rgba(255, 255, 255, 0.2);
+  background-color: #006ccc;
+  background-image: -moz-linear-gradient(top,#dd4814,#dd4a14 );
+  background-image: -ms-linear-gradient(top,#dd4814,#dd4a14 );
+  background-image: -webkit-gradient(linear,0 0,0 100%,from(#dd4814),to(#dd4a14 ));
+  background-image: -webkit-linear-gradient(top,#dd4814,#dd4a14 );
+  background-image: -o-linear-gradient(top,#dd4814,#dd4a14 );
+  background-image: linear-gradient(top,#dd4814,#dd4a14 );
+  background-repeat: repeat-x;
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#dd4814', endColorstr='#dd4a14 ', GradientType=0);
+  border-color: #dd4a14  #dd4a14  #002a80;
+  border-color: rgba(0,0,0,.1)rgba(0,0,0,.1)fadein(rgba(0,0,0,.1),15%);
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
 }
 .btn-primary:hover,
 .btn-primary:active,
 .btn-primary.active,
 .btn-primary.disabled,
 .btn-primary[disabled] {
-  background-color: #DD4814;
-}
-/*.btn-primary.active {
-  background-color: #c44012 \9;
-}*/
-$.btn-primary:active,
-.btn-primary:active {
-    background-color: #DD4814;
-    background-image: linear-gradient(bottom, rgb(199,66,18) 0%, rgb(236,94,43) 100%);
-    background-image: -o-linear-gradient(bottom, rgb(199,66,18) 0%, rgb(236,94,43) 100%);
-    background-image: -moz-linear-gradient(bottom, rgb(199,66,18) 0%, rgb(236,94,43) 100%);
-    background-image: -webkit-linear-gradient(bottom, rgb(199,66,18) 0%, rgb(236,94,43) 100%);
-    background-image: -ms-linear-gradient(bottom, rgb(199,66,18) 0%, rgb(236,94,43) 100%);
-    text-decoration: none;
+  background-color: #dd4a14;
+}
+.btn-primary:active, .btn-primary.active {
+  background-color: #003399 \9;
 }
-
-
 .btn-warning {
-  background-color: #faa732;
-  background-image: -moz-linear-gradient(top, #fbb450, #f89406);
-  background-image: -ms-linear-gradient(top, #fbb450, #f89406);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));
-  background-image: -webkit-linear-gradient(top, #fbb450, #f89406);
-  background-image: -o-linear-gradient(top, #fbb450, #f89406);
-  background-image: linear-gradient(top, #fbb450, #f89406);
+  background-color: #f9a732;
+  background-image: -moz-linear-gradient(top,#fbb450 ,#f89406);
+  background-image: -ms-linear-gradient(top,#fbb450 ,#f89406);
+  background-image: -webkit-gradient(linear,0 0,0 100%,from(#fbb450 ),to(#f89406));
+  background-image: -webkit-linear-gradient(top,#fbb450 ,#f89406);
+  background-image: -o-linear-gradient(top,#fbb450 ,#f89406);
+  background-image: linear-gradient(top,#fbb450 ,#f89406);
   background-repeat: repeat-x;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fbb450', endColorstr='#f89406', GradientType=0);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fbb450 ', endColorstr='#f89406', GradientType=0);
   border-color: #f89406 #f89406 #ad6704;
-  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+  border-color: rgba(0,0,0,.1)rgba(0,0,0,.1)fadein(rgba(0,0,0,.1),15%);
   filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
 }
 .btn-warning:hover,
@@ -2010,22 +1859,21 @@ $.btn-primary:active,
 .btn-warning[disabled] {
   background-color: #f89406;
 }
-.btn-warning:active,
-.btn-warning.active {
+.btn-warning:active, .btn-warning.active {
   background-color: #c67605 \9;
 }
 .btn-danger {
-  background-color: #da4f49;
-  background-image: -moz-linear-gradient(top, #ee5f5b, #bd362f);
-  background-image: -ms-linear-gradient(top, #ee5f5b, #bd362f);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f));
-  background-image: -webkit-linear-gradient(top, #ee5f5b, #bd362f);
-  background-image: -o-linear-gradient(top, #ee5f5b, #bd362f);
-  background-image: linear-gradient(top, #ee5f5b, #bd362f);
+  background-color: #da4e49;
+  background-image: -moz-linear-gradient(top,#ee5f5b,#bd362f);
+  background-image: -ms-linear-gradient(top,#ee5f5b,#bd362f);
+  background-image: -webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#bd362f));
+  background-image: -webkit-linear-gradient(top,#ee5f5b,#bd362f);
+  background-image: -o-linear-gradient(top,#ee5f5b,#bd362f);
+  background-image: linear-gradient(top,#ee5f5b,#bd362f);
   background-repeat: repeat-x;
   filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#bd362f', GradientType=0);
   border-color: #bd362f #bd362f #802420;
-  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+  border-color: rgba(0,0,0,.1)rgba(0,0,0,.1)fadein(rgba(0,0,0,.1),15%);
   filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
 }
 .btn-danger:hover,
@@ -2035,22 +1883,21 @@ $.btn-primary:active,
 .btn-danger[disabled] {
   background-color: #bd362f;
 }
-.btn-danger:active,
-.btn-danger.active {
+.btn-danger:active, .btn-danger.active {
   background-color: #942a25 \9;
 }
 .btn-success {
-  background-color: #5bb75b;
-  background-image: -moz-linear-gradient(top, #62c462, #51a351);
-  background-image: -ms-linear-gradient(top, #62c462, #51a351);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351));
-  background-image: -webkit-linear-gradient(top, #62c462, #51a351);
-  background-image: -o-linear-gradient(top, #62c462, #51a351);
-  background-image: linear-gradient(top, #62c462, #51a351);
+  background-color: #5bb65b;
+  background-image: -moz-linear-gradient(top,#62c462,#51a351);
+  background-image: -ms-linear-gradient(top,#62c462,#51a351);
+  background-image: -webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#51a351));
+  background-image: -webkit-linear-gradient(top,#62c462,#51a351);
+  background-image: -o-linear-gradient(top,#62c462,#51a351);
+  background-image: linear-gradient(top,#62c462,#51a351);
   background-repeat: repeat-x;
   filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#51a351', GradientType=0);
   border-color: #51a351 #51a351 #387038;
-  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+  border-color: rgba(0,0,0,.1)rgba(0,0,0,.1)fadein(rgba(0,0,0,.1),15%);
   filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
 }
 .btn-success:hover,
@@ -2060,22 +1907,21 @@ $.btn-primary:active,
 .btn-success[disabled] {
   background-color: #51a351;
 }
-.btn-success:active,
-.btn-success.active {
+.btn-success:active, .btn-success.active {
   background-color: #408140 \9;
 }
 .btn-info {
   background-color: #49afcd;
-  background-image: -moz-linear-gradient(top, #5bc0de, #2f96b4);
-  background-image: -ms-linear-gradient(top, #5bc0de, #2f96b4);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4));
-  background-image: -webkit-linear-gradient(top, #5bc0de, #2f96b4);
-  background-image: -o-linear-gradient(top, #5bc0de, #2f96b4);
-  background-image: linear-gradient(top, #5bc0de, #2f96b4);
+  background-image: -moz-linear-gradient(top,#5bc0de,#2f96b4);
+  background-image: -ms-linear-gradient(top,#5bc0de,#2f96b4);
+  background-image: -webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#2f96b4));
+  background-image: -webkit-linear-gradient(top,#5bc0de,#2f96b4);
+  background-image: -o-linear-gradient(top,#5bc0de,#2f96b4);
+  background-image: linear-gradient(top,#5bc0de,#2f96b4);
   background-repeat: repeat-x;
   filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#2f96b4', GradientType=0);
   border-color: #2f96b4 #2f96b4 #1f6377;
-  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+  border-color: rgba(0,0,0,.1)rgba(0,0,0,.1)fadein(rgba(0,0,0,.1),15%);
   filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
 }
 .btn-info:hover,
@@ -2085,22 +1931,21 @@ $.btn-primary:active,
 .btn-info[disabled] {
   background-color: #2f96b4;
 }
-.btn-info:active,
-.btn-info.active {
+.btn-info:active, .btn-info.active {
   background-color: #24748c \9;
 }
 .btn-inverse {
-  background-color: #393939;
-  background-image: -moz-linear-gradient(top, #454545, #262626);
-  background-image: -ms-linear-gradient(top, #454545, #262626);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#454545), to(#262626));
-  background-image: -webkit-linear-gradient(top, #454545, #262626);
-  background-image: -o-linear-gradient(top, #454545, #262626);
-  background-image: linear-gradient(top, #454545, #262626);
+  background-color: #383838;
+  background-image: -moz-linear-gradient(top,#454545,#262626);
+  background-image: -ms-linear-gradient(top,#454545,#262626);
+  background-image: -webkit-gradient(linear,0 0,0 100%,from(#454545),to(#262626));
+  background-image: -webkit-linear-gradient(top,#454545,#262626);
+  background-image: -o-linear-gradient(top,#454545,#262626);
+  background-image: linear-gradient(top,#454545,#262626);
   background-repeat: repeat-x;
   filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#454545', endColorstr='#262626', GradientType=0);
   border-color: #262626 #262626 #000000;
-  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+  border-color: rgba(0,0,0,.1)rgba(0,0,0,.1)fadein(rgba(0,0,0,.1),15%);
   filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
 }
 .btn-inverse:hover,
@@ -2110,27 +1955,22 @@ $.btn-primary:active,
 .btn-inverse[disabled] {
   background-color: #262626;
 }
-.btn-inverse:active,
-.btn-inverse.active {
+.btn-inverse:active, .btn-inverse.active {
   background-color: #0c0c0c \9;
 }
-button.btn,
-input[type="submit"].btn {
+button.btn, input[type="submit"].btn {
   *padding-top: 2px;
   *padding-bottom: 2px;
 }
-button.btn::-moz-focus-inner,
-input[type="submit"].btn::-moz-focus-inner {
+button.btn::-moz-focus-inner, input[type="submit"].btn::-moz-focus-inner {
   padding: 0;
   border: 0;
 }
-button.btn.large,
-input[type="submit"].btn.large {
+button.btn.large, input[type="submit"].btn.large {
   *padding-top: 7px;
   *padding-bottom: 7px;
 }
-button.btn.small,
-input[type="submit"].btn.small {
+button.btn.small, input[type="submit"].btn.small {
   *padding-top: 3px;
   *padding-bottom: 3px;
 }
@@ -2139,8 +1979,7 @@ input[type="submit"].btn.small {
   *zoom: 1;
   *margin-left: .3em;
 }
-.btn-group:before,
-.btn-group:after {
+.btn-group:before, .btn-group:after {
   display: table;
   content: "";
 }
@@ -2160,8 +1999,6 @@ input[type="submit"].btn.small {
 .btn-toolbar .btn-group {
   display: inline-block;
   *display: inline;
-  /* IE7 inline-block hack */
-
   *zoom: 1;
 }
 .btn-group .btn {
@@ -2181,8 +2018,7 @@ input[type="submit"].btn.small {
   -moz-border-radius-bottomleft: 4px;
   border-bottom-left-radius: 4px;
 }
-.btn-group .btn:last-child,
-.btn-group .dropdown-toggle {
+.btn-group .btn:last-child, .btn-group .dropdown-toggle {
   -webkit-border-top-right-radius: 4px;
   -moz-border-radius-topright: 4px;
   border-top-right-radius: 4px;
@@ -2199,8 +2035,7 @@ input[type="submit"].btn.small {
   -moz-border-radius-bottomleft: 6px;
   border-bottom-left-radius: 6px;
 }
-.btn-group .btn.large:last-child,
-.btn-group .large.dropdown-toggle {
+.btn-group .btn.large:last-child, .btn-group .large.dropdown-toggle {
   -webkit-border-top-right-radius: 6px;
   -moz-border-radius-topright: 6px;
   border-top-right-radius: 6px;
@@ -2214,16 +2049,15 @@ input[type="submit"].btn.small {
 .btn-group .btn.active {
   z-index: 2;
 }
-.btn-group .dropdown-toggle:active,
-.btn-group.open .dropdown-toggle {
+.btn-group .dropdown-toggle:active, .btn-group.open .dropdown-toggle {
   outline: 0;
 }
 .btn-group .dropdown-toggle {
   padding-left: 8px;
   padding-right: 8px;
-  -webkit-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
-  -moz-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
-  box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
+  -webkit-box-shadow: inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);
+  -moz-box-shadow: inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);
+  box-shadow: inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);
   *padding-top: 5px;
   *padding-bottom: 5px;
 }
@@ -2239,16 +2073,15 @@ input[type="submit"].btn.small {
 }
 .btn-group.open .dropdown-toggle {
   background-image: none;
-  -webkit-box-shadow: inset 0 1px 6px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
-  -moz-box-shadow: inset 0 1px 6px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
-  box-shadow: inset 0 1px 6px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
+  -webkit-box-shadow: inset 0 1px 6px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);
+  -moz-box-shadow: inset 0 1px 6px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);
+  box-shadow: inset 0 1px 6px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);
 }
 .btn .caret {
   margin-top: 7px;
   margin-left: 0;
 }
-.btn:hover .caret,
-.open.btn-group .caret {
+.btn:hover .caret, .open.btn-group .caret {
   opacity: 1;
   filter: alpha(opacity=100);
 }
@@ -2267,15 +2100,14 @@ input[type="submit"].btn.small {
 .alert {
   padding: 8px 35px 8px 14px;
   margin-bottom: 18px;
-  text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
+  text-shadow: 0 1px 0 rgba(255,255,255,.5);
   background-color: #fcf8e3;
-  border: 1px solid #fbeed5;
+  border: 1px solid #fbefd5;
   -webkit-border-radius: 4px;
   -moz-border-radius: 4px;
   border-radius: 4px;
 }
-.alert,
-.alert-heading {
+.alert, .alert-heading {
   color: #c09853;
 }
 .alert .close {
@@ -2288,12 +2120,10 @@ input[type="submit"].btn.small {
   background-color: #dff0d8;
   border-color: #d6e9c6;
 }
-.alert-success,
-.alert-success .alert-heading {
+.alert-success, .alert-success .alert-heading {
   color: #468847;
 }
-.alert-danger,
-.alert-error {
+.alert-danger, .alert-error {
   background-color: #f2dede;
   border-color: #eed3d7;
 }
@@ -2307,16 +2137,14 @@ input[type="submit"].btn.small {
   background-color: #d9edf7;
   border-color: #bce8f1;
 }
-.alert-info,
-.alert-info .alert-heading {
+.alert-info, .alert-info .alert-heading {
   color: #3a87ad;
 }
 .alert-block {
   padding-top: 14px;
   padding-bottom: 14px;
 }
-.alert-block > p,
-.alert-block > ul {
+.alert-block > p, .alert-block > ul {
   margin-bottom: 0;
 }
 .alert-block p + p {
@@ -2341,7 +2169,7 @@ input[type="submit"].btn.small {
   font-weight: bold;
   line-height: 18px;
   color: #999999;
-  text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
+  text-shadow: 0 1px 0 rgba(255,255,255,.5);
   text-transform: uppercase;
 }
 .nav li + .nav-header {
@@ -2352,52 +2180,43 @@ input[type="submit"].btn.small {
   padding-right: 14px;
   margin-bottom: 0;
 }
-.nav-list > li > a,
-.nav-list .nav-header {
+.nav-list > li > a, .nav-list .nav-header {
   margin-left: -15px;
   margin-right: -15px;
-  text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
+  text-shadow: 0 1px 0 rgba(255,255,255,.5);
 }
 .nav-list > li > a {
   padding: 3px 15px;
 }
-.nav-list .active > a,
-.nav-list .active > a:hover {
+.nav-list .active > a, .nav-list .active > a:hover {
   color: #ffffff;
-  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2);
-  background-color: #0088cc;
+  text-shadow: 0 -1px 0 rgba(0,0,0,.2);
+  background-color: #dd4814;
 }
 .nav-list [class^="icon-"] {
   margin-right: 2px;
 }
-.nav-tabs,
-.nav-pills {
+.nav-tabs, .nav-pills {
   *zoom: 1;
 }
-.nav-tabs:before,
-.nav-pills:before,
-.nav-tabs:after,
-.nav-pills:after {
+.nav-tabs:before, .nav-tabs:after, .nav-pills:before, .nav-pills:after {
   display: table;
   content: "";
 }
-.nav-tabs:after,
-.nav-pills:after {
+.nav-tabs:after, .nav-pills:after {
   clear: both;
 }
-.nav-tabs > li,
-.nav-pills > li {
+.nav-tabs > li, .nav-pills > li {
   float: left;
 }
-.nav-tabs > li > a,
-.nav-pills > li > a {
+.nav-tabs > li > a, .nav-pills > li > a {
   padding-right: 12px;
   padding-left: 12px;
   margin-right: 2px;
   line-height: 14px;
 }
 .nav-tabs {
-  border-bottom: 1px solid #ddd;
+  border-bottom: 1px solid #dddddd;
 }
 .nav-tabs > li {
   margin-bottom: -1px;
@@ -2413,11 +2232,10 @@ input[type="submit"].btn.small {
 .nav-tabs > li > a:hover {
   border-color: #eeeeee #eeeeee #dddddd;
 }
-.nav-tabs > .active > a,
-.nav-tabs > .active > a:hover {
+.nav-tabs > .active > a, .nav-tabs > .active > a:hover {
   color: #555555;
   background-color: #ffffff;
-  border: 1px solid #ddd;
+  border: 1px solid #dddddd;
   border-bottom-color: transparent;
   cursor: default;
 }
@@ -2430,10 +2248,9 @@ input[type="submit"].btn.small {
   -moz-border-radius: 5px;
   border-radius: 5px;
 }
-.nav-pills .active > a,
-.nav-pills .active > a:hover {
+.nav-pills .active > a, .nav-pills .active > a:hover {
   color: #ffffff;
-  background-color: #0088cc;
+  background-color: #dd4814;
 }
 .nav-stacked > li {
   float: none;
@@ -2445,7 +2262,7 @@ input[type="submit"].btn.small {
   border-bottom: 0;
 }
 .nav-tabs.nav-stacked > li > a {
-  border: 1px solid #ddd;
+  border: 1px solid #dddddd;
   -webkit-border-radius: 0;
   -moz-border-radius: 0;
   border-radius: 0;
@@ -2461,7 +2278,7 @@ input[type="submit"].btn.small {
   border-radius: 0 0 4px 4px;
 }
 .nav-tabs.nav-stacked > li > a:hover {
-  border-color: #ddd;
+  border-color: #dddddd;
   z-index: 2;
 }
 .nav-pills.nav-stacked > li > a {
@@ -2470,8 +2287,7 @@ input[type="submit"].btn.small {
 .nav-pills.nav-stacked > li:last-child > a {
   margin-bottom: 1px;
 }
-.nav-tabs .dropdown-menu,
-.nav-pills .dropdown-menu {
+.nav-tabs .dropdown-menu, .nav-pills .dropdown-menu {
   margin-top: 1px;
   border-width: 1px;
 }
@@ -2480,14 +2296,12 @@ input[type="submit"].btn.small {
   -moz-border-radius: 4px;
   border-radius: 4px;
 }
-.nav-tabs .dropdown-toggle .caret,
-.nav-pills .dropdown-toggle .caret {
-  border-top-color: #0088cc;
+.nav-tabs .dropdown-toggle .caret, .nav-pills .dropdown-toggle .caret {
+  border-top-color: #dd4814;
   margin-top: 6px;
 }
-.nav-tabs .dropdown-toggle:hover .caret,
-.nav-pills .dropdown-toggle:hover .caret {
-  border-top-color: #005580;
+.nav-tabs .dropdown-toggle:hover .caret, .nav-pills .dropdown-toggle:hover .caret {
+  border-top-color: #dd4814;
 }
 .nav-tabs .active .dropdown-toggle .caret,
 .nav-pills .active .dropdown-toggle .caret {
@@ -2504,9 +2318,7 @@ input[type="submit"].btn.small {
   background-color: #999999;
   border-color: #999999;
 }
-.nav .open .caret,
-.nav .open.active .caret,
-.nav .open a:hover .caret {
+.nav .open .caret, .nav .open.active .caret, .nav .open a:hover .caret {
   border-top-color: #ffffff;
   opacity: 1;
   filter: alpha(opacity=100);
@@ -2517,8 +2329,7 @@ input[type="submit"].btn.small {
 .tabbable {
   *zoom: 1;
 }
-.tabbable:before,
-.tabbable:after {
+.tabbable:before, .tabbable:after {
   display: table;
   content: "";
 }
@@ -2528,21 +2339,17 @@ input[type="submit"].btn.small {
 .tab-content {
   overflow: hidden;
 }
-.tabs-below .nav-tabs,
-.tabs-right .nav-tabs,
-.tabs-left .nav-tabs {
+.tabs-below .nav-tabs, .tabs-right .nav-tabs, .tabs-left .nav-tabs {
   border-bottom: 0;
 }
-.tab-content > .tab-pane,
-.pill-content > .pill-pane {
+.tab-content > .tab-pane, .pill-content > .pill-pane {
   display: none;
 }
-.tab-content > .active,
-.pill-content > .active {
+.tab-content > .active, .pill-content > .active {
   display: block;
 }
 .tabs-below .nav-tabs {
-  border-top: 1px solid #ddd;
+  border-top: 1px solid #dddddd;
 }
 .tabs-below .nav-tabs > li {
   margin-top: -1px;
@@ -2555,18 +2362,15 @@ input[type="submit"].btn.small {
 }
 .tabs-below .nav-tabs > li > a:hover {
   border-bottom-color: transparent;
-  border-top-color: #ddd;
+  border-top-color: #dddddd;
 }
-.tabs-below .nav-tabs .active > a,
-.tabs-below .nav-tabs .active > a:hover {
-  border-color: transparent #ddd #ddd #ddd;
+.tabs-below .nav-tabs .active > a, .tabs-below .nav-tabs .active > a:hover {
+  border-color: transparent #dddddd #dddddd #dddddd;
 }
-.tabs-left .nav-tabs > li,
-.tabs-right .nav-tabs > li {
+.tabs-left .nav-tabs > li, .tabs-right .nav-tabs > li {
   float: none;
 }
-.tabs-left .nav-tabs > li > a,
-.tabs-right .nav-tabs > li > a {
+.tabs-left .nav-tabs > li > a, .tabs-right .nav-tabs > li > a {
   min-width: 74px;
   margin-right: 0;
   margin-bottom: 3px;
@@ -2574,7 +2378,7 @@ input[type="submit"].btn.small {
 .tabs-left .nav-tabs {
   float: left;
   margin-right: 19px;
-  border-right: 1px solid #ddd;
+  border-right: 1px solid #dddddd;
 }
 .tabs-left .nav-tabs > li > a {
   margin-right: -1px;
@@ -2585,15 +2389,14 @@ input[type="submit"].btn.small {
 .tabs-left .nav-tabs > li > a:hover {
   border-color: #eeeeee #dddddd #eeeeee #eeeeee;
 }
-.tabs-left .nav-tabs .active > a,
-.tabs-left .nav-tabs .active > a:hover {
-  border-color: #ddd transparent #ddd #ddd;
+.tabs-left .nav-tabs .active > a, .tabs-left .nav-tabs .active > a:hover {
+  border-color: #dddddd transparent #dddddd #dddddd;
   *border-right-color: #ffffff;
 }
 .tabs-right .nav-tabs {
   float: right;
   margin-left: 19px;
-  border-left: 1px solid #ddd;
+  border-left: 1px solid #dddddd;
 }
 .tabs-right .nav-tabs > li > a {
   margin-left: -1px;
@@ -2604,9 +2407,8 @@ input[type="submit"].btn.small {
 .tabs-right .nav-tabs > li > a:hover {
   border-color: #eeeeee #eeeeee #eeeeee #dddddd;
 }
-.tabs-right .nav-tabs .active > a,
-.tabs-right .nav-tabs .active > a:hover {
-  border-color: #ddd #ddd #ddd transparent;
+.tabs-right .nav-tabs .active > a, .tabs-right .nav-tabs .active > a:hover {
+  border-color: #dddddd #dddddd #dddddd transparent;
   *border-left-color: #ffffff;
 }
 .navbar {
@@ -2617,20 +2419,20 @@ input[type="submit"].btn.small {
   padding-left: 20px;
   padding-right: 20px;
   background-color: #2c2c2c;
-  background-image: -moz-linear-gradient(top, #333333, #222222);
-  background-image: -ms-linear-gradient(top, #333333, #222222);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#222222));
-  background-image: -webkit-linear-gradient(top, #333333, #222222);
-  background-image: -o-linear-gradient(top, #333333, #222222);
-  background-image: linear-gradient(top, #333333, #222222);
+  background-image: -moz-linear-gradient(top,#333333,#222222);
+  background-image: -ms-linear-gradient(top,#333333,#222222);
+  background-image: -webkit-gradient(linear,0 0,0 100%,from(#333333),to(#222222));
+  background-image: -webkit-linear-gradient(top,#333333,#222222);
+  background-image: -o-linear-gradient(top,#333333,#222222);
+  background-image: linear-gradient(top,#333333,#222222);
   background-repeat: repeat-x;
   filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0);
   -webkit-border-radius: 4px;
   -moz-border-radius: 4px;
   border-radius: 4px;
-  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1);
-  -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1);
-  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1);
+  -webkit-box-shadow: 0 1px 3px rgba(0,0,0,.25), inset 0 -1px 0 rgba(0,0,0,.1);
+  -moz-box-shadow: 0 1px 3px rgba(0,0,0,.25), inset 0 -1px 0 rgba(0,0,0,.1);
+  box-shadow: 0 1px 3px rgba(0,0,0,.25), inset 0 -1px 0 rgba(0,0,0,.1);
 }
 .btn-navbar {
   display: none;
@@ -2639,20 +2441,20 @@ input[type="submit"].btn.small {
   margin-left: 5px;
   margin-right: 5px;
   background-color: #2c2c2c;
-  background-image: -moz-linear-gradient(top, #333333, #222222);
-  background-image: -ms-linear-gradient(top, #333333, #222222);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#222222));
-  background-image: -webkit-linear-gradient(top, #333333, #222222);
-  background-image: -o-linear-gradient(top, #333333, #222222);
-  background-image: linear-gradient(top, #333333, #222222);
+  background-image: -moz-linear-gradient(top,#333333,#222222);
+  background-image: -ms-linear-gradient(top,#333333,#222222);
+  background-image: -webkit-gradient(linear,0 0,0 100%,from(#333333),to(#222222));
+  background-image: -webkit-linear-gradient(top,#333333,#222222);
+  background-image: -o-linear-gradient(top,#333333,#222222);
+  background-image: linear-gradient(top,#333333,#222222);
   background-repeat: repeat-x;
   filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0);
   border-color: #222222 #222222 #000000;
-  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+  border-color: rgba(0,0,0,.1)rgba(0,0,0,.1)fadein(rgba(0,0,0,.1),15%);
   filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075);
-  -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075);
-  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075);
+  -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075);
+  -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075);
+  box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075);
 }
 .btn-navbar:hover,
 .btn-navbar:active,
@@ -2661,8 +2463,7 @@ input[type="submit"].btn.small {
 .btn-navbar[disabled] {
   background-color: #222222;
 }
-.btn-navbar:active,
-.btn-navbar.active {
+.btn-navbar:active, .btn-navbar.active {
   background-color: #080808 \9;
 }
 .btn-navbar .icon-bar {
@@ -2673,9 +2474,9 @@ input[type="submit"].btn.small {
   -webkit-border-radius: 1px;
   -moz-border-radius: 1px;
   border-radius: 1px;
-  -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25);
-  -moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25);
-  box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25);
+  -webkit-box-shadow: 0 1px 0 rgba(0,0,0,.25);
+  -moz-box-shadow: 0 1px 0 rgba(0,0,0,.25);
+  box-shadow: 0 1px 0 rgba(0,0,0,.25);
 }
 .btn-navbar .icon-bar + .icon-bar {
   margin-top: 3px;
@@ -2705,8 +2506,7 @@ input[type="submit"].btn.small {
   color: #ffffff;
   background-color: transparent;
 }
-.navbar .btn,
-.navbar .btn-group {
+.navbar .btn, .navbar .btn-group {
   margin-top: 5px;
 }
 .navbar .btn-group .btn {
@@ -2716,22 +2516,19 @@ input[type="submit"].btn.small {
   margin-bottom: 0;
   *zoom: 1;
 }
-.navbar-form:before,
-.navbar-form:after {
+.navbar-form:before, .navbar-form:after {
   display: table;
   content: "";
 }
 .navbar-form:after {
   clear: both;
 }
-.navbar-form input,
-.navbar-form select {
+.navbar-form input, .navbar-form select {
   display: inline-block;
   margin-top: 5px;
   margin-bottom: 0;
 }
-.navbar-form .radio,
-.navbar-form .checkbox {
+.navbar-form .radio, .navbar-form .checkbox {
   margin-top: 5px;
 }
 .navbar-form input[type="image"],
@@ -2739,13 +2536,11 @@ input[type="submit"].btn.small {
 .navbar-form input[type="radio"] {
   margin-top: 3px;
 }
-.navbar-form .input-append,
-.navbar-form .input-prepend {
+.navbar-form .input-append, .navbar-form .input-prepend {
   margin-top: 6px;
   white-space: nowrap;
 }
-.navbar-form .input-append input,
-.navbar-form .input-prepend input {
+.navbar-form .input-append input, .navbar-form .input-prepend input {
   margin-top: 0;
 }
 .navbar-search {
@@ -2761,13 +2556,13 @@ input[type="submit"].btn.small {
   font-weight: normal;
   line-height: 1;
   color: #ffffff;
-  color: rgba(255, 255, 255, 0.75);
-  background: #666;
-  background: rgba(255, 255, 255, 0.3);
-  border: 1px solid #111;
-  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15);
-  -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15);
-  box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15);
+  color: rgba(255,255,255,.75);
+  background: #666666;
+  background: rgba(255,255,255,.3);
+  border: 1px solid #111111;
+  -webkit-box-shadow: inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15);
+  -moz-box-shadow: inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15);
+  box-shadow: inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15);
   -webkit-transition: none;
   -moz-transition: none;
   -ms-transition: none;
@@ -2783,18 +2578,17 @@ input[type="submit"].btn.small {
 .navbar-search .search-query:hover {
   color: #ffffff;
   background-color: #999999;
-  background-color: rgba(255, 255, 255, 0.5);
+  background-color: rgba(255,255,255,.5);
 }
-.navbar-search .search-query:focus,
-.navbar-search .search-query.focused {
+.navbar-search .search-query:focus, .navbar-search .search-query.focused {
   padding: 5px 10px;
   color: #333333;
   text-shadow: 0 1px 0 #ffffff;
   background-color: #ffffff;
   border: 0;
-  -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15);
-  -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15);
-  box-shadow: 0 0 3px rgba(0, 0, 0, 0.15);
+  -webkit-box-shadow: 0 0 3px rgba(0,0,0,.15);
+  -moz-box-shadow: 0 0 3px rgba(0,0,0,.15);
+  box-shadow: 0 0 3px rgba(0,0,0,.15);
   outline: 0;
 }
 .navbar-fixed-top {
@@ -2831,15 +2625,14 @@ input[type="submit"].btn.small {
   line-height: 19px;
   color: #999999;
   text-decoration: none;
-  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+  text-shadow: 0 -1px 0 rgba(0,0,0,.25);
 }
 .navbar .nav > li > a:hover {
   background-color: transparent;
   color: #ffffff;
   text-decoration: none;
 }
-.navbar .nav .active > a,
-.navbar .nav .active > a:hover {
+.navbar .nav .active > a, .navbar .nav .active > a:hover {
   color: #ffffff;
   text-decoration: none;
   background-color: #222222;
@@ -2867,8 +2660,8 @@ input[type="submit"].btn.small {
   display: inline-block;
   border-left: 7px solid transparent;
   border-right: 7px solid transparent;
-  border-bottom: 7px solid #ccc;
-  border-bottom-color: rgba(0, 0, 0, 0.2);
+  border-bottom: 7px solid #cccccc;
+  border-bottom-color: rgba(0,0,0,.2);
   position: absolute;
   top: -7px;
   left: 9px;
@@ -2883,8 +2676,7 @@ input[type="submit"].btn.small {
   top: -6px;
   left: 10px;
 }
-.navbar .nav .dropdown-toggle .caret,
-.navbar .nav .open.dropdown .caret {
+.navbar .nav .dropdown-toggle .caret, .navbar .nav .open.dropdown .caret {
   border-top-color: #ffffff;
 }
 .navbar .nav .active .caret {
@@ -2915,15 +2707,15 @@ input[type="submit"].btn.small {
   padding: 7px 14px;
   margin: 0 0 18px;
   background-color: #fbfbfb;
-  background-image: -moz-linear-gradient(top, #ffffff, #f5f5f5);
-  background-image: -ms-linear-gradient(top, #ffffff, #f5f5f5);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f5f5f5));
-  background-image: -webkit-linear-gradient(top, #ffffff, #f5f5f5);
-  background-image: -o-linear-gradient(top, #ffffff, #f5f5f5);
-  background-image: linear-gradient(top, #ffffff, #f5f5f5);
+  background-image: -moz-linear-gradient(top,#ffffff,#f5f5f5);
+  background-image: -ms-linear-gradient(top,#ffffff,#f5f5f5);
+  background-image: -webkit-gradient(linear,0 0,0 100%,from(#ffffff),to(#f5f5f5));
+  background-image: -webkit-linear-gradient(top,#ffffff,#f5f5f5);
+  background-image: -o-linear-gradient(top,#ffffff,#f5f5f5);
+  background-image: linear-gradient(top,#ffffff,#f5f5f5);
   background-repeat: repeat-x;
   filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#f5f5f5', GradientType=0);
-  border: 1px solid #ddd;
+  border: 1px solid #dddddd;
   -webkit-border-radius: 3px;
   -moz-border-radius: 3px;
   border-radius: 3px;
@@ -2949,17 +2741,15 @@ input[type="submit"].btn.small {
 .pagination ul {
   display: inline-block;
   *display: inline;
-  /* IE7 inline-block hack */
-
   *zoom: 1;
   margin-left: 0;
   margin-bottom: 0;
   -webkit-border-radius: 3px;
   -moz-border-radius: 3px;
   border-radius: 3px;
-  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
-  -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
-  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
+  -webkit-box-shadow: 0 1px 2px rgba(0,0,0,.05);
+  -moz-box-shadow: 0 1px 2px rgba(0,0,0,.05);
+  box-shadow: 0 1px 2px rgba(0,0,0,.05);
 }
 .pagination li {
   display: inline;
@@ -2969,19 +2759,17 @@ input[type="submit"].btn.small {
   padding: 0 14px;
   line-height: 34px;
   text-decoration: none;
-  border: 1px solid #ddd;
+  border: 1px solid #dddddd;
   border-left-width: 0;
 }
-.pagination a:hover,
-.pagination .active a {
+.pagination a:hover, .pagination .active a {
   background-color: #f5f5f5;
 }
 .pagination .active a {
   color: #999999;
   cursor: default;
 }
-.pagination .disabled a,
-.pagination .disabled a:hover {
+.pagination .disabled a, .pagination .disabled a:hover {
   color: #999999;
   background-color: transparent;
   cursor: default;
@@ -3010,8 +2798,7 @@ input[type="submit"].btn.small {
   text-align: center;
   *zoom: 1;
 }
-.pager:before,
-.pager:after {
+.pager:before, .pager:after {
   display: table;
   content: "";
 }
@@ -3024,8 +2811,8 @@ input[type="submit"].btn.small {
 .pager a {
   display: inline-block;
   padding: 5px 14px;
-  background-color: #fff;
-  border: 1px solid #ddd;
+  background-color: #ffffff;
+  border: 1px solid #dddddd;
   -webkit-border-radius: 15px;
   -moz-border-radius: 15px;
   border-radius: 15px;
@@ -3064,8 +2851,7 @@ input[type="submit"].btn.small {
 .modal-backdrop.fade {
   opacity: 0;
 }
-.modal-backdrop,
-.modal-backdrop.fade.in {
+.modal-backdrop, .modal-backdrop.fade.in {
   opacity: 0.8;
   filter: alpha(opacity=80);
 }
@@ -3079,17 +2865,15 @@ input[type="submit"].btn.small {
   width: 560px;
   margin: -250px 0 0 -280px;
   background-color: #ffffff;
-  border: 1px solid #999;
-  border: 1px solid rgba(0, 0, 0, 0.3);
-  *border: 1px solid #999;
-  /* IE6-7 */
-
+  border: 1px solid #999999;
+  border: 1px solid rgba(0,0,0,.3);
+  *border: 1px solid #999999;
   -webkit-border-radius: 6px;
   -moz-border-radius: 6px;
   border-radius: 6px;
-  -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
-  -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
-  box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
+  -webkit-box-shadow: 0 3px 7px rgba(0,0,0,0.3);
+  -moz-box-shadow: 0 3px 7px rgba(0,0,0,0.3);
+  box-shadow: 0 3px 7px rgba(0,0,0,0.3);
   -webkit-background-clip: padding-box;
   -moz-background-clip: padding-box;
   background-clip: padding-box;
@@ -3107,7 +2891,7 @@ input[type="submit"].btn.small {
 }
 .modal-header {
   padding: 9px 15px;
-  border-bottom: 1px solid #eee;
+  border-bottom: 1px solid #eeeeee;
 }
 .modal-header .close {
   margin-top: 2px;
@@ -3122,7 +2906,7 @@ input[type="submit"].btn.small {
   padding: 14px 15px 15px;
   margin-bottom: 0;
   background-color: #f5f5f5;
-  border-top: 1px solid #ddd;
+  border-top: 1px solid #dddddd;
   -webkit-border-radius: 0 0 6px 6px;
   -moz-border-radius: 0 0 6px 6px;
   border-radius: 0 0 6px 6px;
@@ -3131,8 +2915,7 @@ input[type="submit"].btn.small {
   box-shadow: inset 0 1px 0 #ffffff;
   *zoom: 1;
 }
-.modal-footer:before,
-.modal-footer:after {
+.modal-footer:before, .modal-footer:after {
   display: table;
   content: "";
 }
@@ -3280,19 +3063,19 @@ input[type="submit"].btn.small {
   width: 280px;
   overflow: hidden;
   background: #000000;
-  background: rgba(0, 0, 0, 0.8);
+  background: rgba(0,0,0,.8);
   -webkit-border-radius: 6px;
   -moz-border-radius: 6px;
   border-radius: 6px;
-  -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
-  -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
-  box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
+  -webkit-box-shadow: 0 3px 7px rgba(0,0,0,0.3);
+  -moz-box-shadow: 0 3px 7px rgba(0,0,0,0.3);
+  box-shadow: 0 3px 7px rgba(0,0,0,0.3);
 }
 .popover-title {
   padding: 9px 15px;
   line-height: 1;
   background-color: #f5f5f5;
-  border-bottom: 1px solid #eee;
+  border-bottom: 1px solid #eeeeee;
   -webkit-border-radius: 3px 3px 0 0;
   -moz-border-radius: 3px 3px 0 0;
   border-radius: 3px 3px 0 0;
@@ -3307,9 +3090,7 @@ input[type="submit"].btn.small {
   -moz-background-clip: padding-box;
   background-clip: padding-box;
 }
-.popover-content p,
-.popover-content ul,
-.popover-content ol {
+.popover-content p, .popover-content ul, .popover-content ol {
   margin-bottom: 0;
 }
 .thumbnails {
@@ -3317,8 +3098,7 @@ input[type="submit"].btn.small {
   list-style: none;
   *zoom: 1;
 }
-.thumbnails:before,
-.thumbnails:after {
+.thumbnails:before, .thumbnails:after {
   display: table;
   content: "";
 }
@@ -3333,19 +3113,19 @@ input[type="submit"].btn.small {
   display: block;
   padding: 4px;
   line-height: 1;
-  border: 1px solid #ddd;
+  border: 1px solid #dddddd;
   -webkit-border-radius: 4px;
   -moz-border-radius: 4px;
   border-radius: 4px;
-  -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075);
-  -moz-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075);
-  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075);
+  -webkit-box-shadow: 0 1px 1px rgba(0,0,0,.075);
+  -moz-box-shadow: 0 1px 1px rgba(0,0,0,.075);
+  box-shadow: 0 1px 1px rgba(0,0,0,.075);
 }
 a.thumbnail:hover {
-  border-color: #0088cc;
-  -webkit-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25);
-  -moz-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25);
-  box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25);
+  border-color: #dd4814;
+  -webkit-box-shadow: 0 1px 4px rgba(0,105,214,.25);
+  -moz-box-shadow: 0 1px 4px rgba(0,105,214,.25);
+  box-shadow: 0 1px 4px rgba(0,105,214,.25);
 }
 .thumbnail > img {
   display: block;
@@ -3358,10 +3138,10 @@ a.thumbnail:hover {
 }
 .label {
   padding: 2px 4px 3px;
-  font-size: 11.049999999999999px;
+  font-size: 11.05px;
   font-weight: bold;
   color: #ffffff;
-  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+  text-shadow: 0 -1px 0 rgba(0,0,0,.25);
   background-color: #999999;
   -webkit-border-radius: 3px;
   -moz-border-radius: 3px;
@@ -3423,18 +3203,18 @@ a.thumbnail:hover {
   overflow: hidden;
   height: 18px;
   margin-bottom: 18px;
-  background-color: #f7f7f7;
-  background-image: -moz-linear-gradient(top, #f5f5f5, #f9f9f9);
-  background-image: -ms-linear-gradient(top, #f5f5f5, #f9f9f9);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#f9f9f9));
-  background-image: -webkit-linear-gradient(top, #f5f5f5, #f9f9f9);
-  background-image: -o-linear-gradient(top, #f5f5f5, #f9f9f9);
-  background-image: linear-gradient(top, #f5f5f5, #f9f9f9);
+  background-color: #f6f6f6;
+  background-image: -moz-linear-gradient(top,#f5f5f5,#f9f9f9);
+  background-image: -ms-linear-gradient(top,#f5f5f5,#f9f9f9);
+  background-image: -webkit-gradient(linear,0 0,0 100%,from(#f5f5f5),to(#f9f9f9));
+  background-image: -webkit-linear-gradient(top,#f5f5f5,#f9f9f9);
+  background-image: -o-linear-gradient(top,#f5f5f5,#f9f9f9);
+  background-image: linear-gradient(top,#f5f5f5,#f9f9f9);
   background-repeat: repeat-x;
   filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5', endColorstr='#f9f9f9', GradientType=0);
-  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
-  -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
-  box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
+  -webkit-box-shadow: inset 0 1px 2px rgba(0,0,0,.1);
+  -moz-box-shadow: inset 0 1px 2px rgba(0,0,0,.1);
+  box-shadow: inset 0 1px 2px rgba(0,0,0,.1);
   -webkit-border-radius: 4px;
   -moz-border-radius: 4px;
   border-radius: 4px;
@@ -3445,36 +3225,36 @@ a.thumbnail:hover {
   color: #ffffff;
   font-size: 12px;
   text-align: center;
-  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
-  background-color: #0e90d2;
-  background-image: -moz-linear-gradient(top, #149bdf, #0480be);
-  background-image: -ms-linear-gradient(top, #149bdf, #0480be);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#149bdf), to(#0480be));
-  background-image: -webkit-linear-gradient(top, #149bdf, #0480be);
-  background-image: -o-linear-gradient(top, #149bdf, #0480be);
-  background-image: linear-gradient(top, #149bdf, #0480be);
+  text-shadow: 0 -1px 0 rgba(0,0,0,.25);
+  background-color: #0d90d1;
+  background-image: -moz-linear-gradient(top,#149bdf,#0480be);
+  background-image: -ms-linear-gradient(top,#149bdf,#0480be);
+  background-image: -webkit-gradient(linear,0 0,0 100%,from(#149bdf),to(#0480be));
+  background-image: -webkit-linear-gradient(top,#149bdf,#0480be);
+  background-image: -o-linear-gradient(top,#149bdf,#0480be);
+  background-image: linear-gradient(top,#149bdf,#0480be);
   background-repeat: repeat-x;
   filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#149bdf', endColorstr='#0480be', GradientType=0);
-  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
-  -moz-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
-  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
+  -webkit-box-shadow: inset 0 -1px 0 rgba(0,0,0,.15);
+  -moz-box-shadow: inset 0 -1px 0 rgba(0,0,0,.15);
+  box-shadow: inset 0 -1px 0 rgba(0,0,0,.15);
   -webkit-box-sizing: border-box;
   -moz-box-sizing: border-box;
   box-sizing: border-box;
-  -webkit-transition: width 0.6s ease;
-  -moz-transition: width 0.6s ease;
-  -ms-transition: width 0.6s ease;
-  -o-transition: width 0.6s ease;
-  transition: width 0.6s ease;
+  -webkit-transition: width .6s ease;
+  -moz-transition: width .6s ease;
+  -ms-transition: width .6s ease;
+  -o-transition: width .6s ease;
+  transition: width .6s ease;
 }
 .progress-striped .bar {
   background-color: #62c462;
-  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));
-  background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+  background-image: -webkit-gradient(linear,0 100%,100% 0,color-stop(.25,rgba(255,255,255,.15)),color-stop(.25,transparent),color-stop(.5,transparent),color-stop(.5,rgba(255,255,255,.15)),color-stop(.75,rgba(255,255,255,.15)),color-stop(.75,transparent),to(transparent));
+  background-image: -webkit-linear-gradient(-45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent);
+  background-image: -moz-linear-gradient(-45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent);
+  background-image: -ms-linear-gradient(-45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent);
+  background-image: -o-linear-gradient(-45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent);
+  background-image: linear-gradient(-45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent);
   -webkit-background-size: 40px 40px;
   -moz-background-size: 40px 40px;
   -o-background-size: 40px 40px;
@@ -3486,64 +3266,64 @@ a.thumbnail:hover {
   animation: progress-bar-stripes 2s linear infinite;
 }
 .progress-danger .bar {
-  background-color: #dd514c;
-  background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35);
-  background-image: -ms-linear-gradient(top, #ee5f5b, #c43c35);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#c43c35));
-  background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35);
-  background-image: -o-linear-gradient(top, #ee5f5b, #c43c35);
-  background-image: linear-gradient(top, #ee5f5b, #c43c35);
+  background-color: #dd514b;
+  background-image: -moz-linear-gradient(top,#ee5f5b,#c43c35);
+  background-image: -ms-linear-gradient(top,#ee5f5b,#c43c35);
+  background-image: -webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#c43c35));
+  background-image: -webkit-linear-gradient(top,#ee5f5b,#c43c35);
+  background-image: -o-linear-gradient(top,#ee5f5b,#c43c35);
+  background-image: linear-gradient(top,#ee5f5b,#c43c35);
   background-repeat: repeat-x;
   filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#c43c35', GradientType=0);
 }
 .progress-danger.progress-striped .bar {
   background-color: #ee5f5b;
-  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));
-  background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+  background-image: -webkit-gradient(linear,0 100%,100% 0,color-stop(.25,rgba(255,255,255,.15)),color-stop(.25,transparent),color-stop(.5,transparent),color-stop(.5,rgba(255,255,255,.15)),color-stop(.75,rgba(255,255,255,.15)),color-stop(.75,transparent),to(transparent));
+  background-image: -webkit-linear-gradient(-45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent);
+  background-image: -moz-linear-gradient(-45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent);
+  background-image: -ms-linear-gradient(-45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent);
+  background-image: -o-linear-gradient(-45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent);
+  background-image: linear-gradient(-45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent);
 }
 .progress-success .bar {
-  background-color: #5eb95e;
-  background-image: -moz-linear-gradient(top, #62c462, #57a957);
-  background-image: -ms-linear-gradient(top, #62c462, #57a957);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#57a957));
-  background-image: -webkit-linear-gradient(top, #62c462, #57a957);
-  background-image: -o-linear-gradient(top, #62c462, #57a957);
-  background-image: linear-gradient(top, #62c462, #57a957);
+  background-color: #5db95d;
+  background-image: -moz-linear-gradient(top,#62c462,#57a957);
+  background-image: -ms-linear-gradient(top,#62c462,#57a957);
+  background-image: -webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#57a957));
+  background-image: -webkit-linear-gradient(top,#62c462,#57a957);
+  background-image: -o-linear-gradient(top,#62c462,#57a957);
+  background-image: linear-gradient(top,#62c462,#57a957);
   background-repeat: repeat-x;
   filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#57a957', GradientType=0);
 }
 .progress-success.progress-striped .bar {
   background-color: #62c462;
-  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));
-  background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+  background-image: -webkit-gradient(linear,0 100%,100% 0,color-stop(.25,rgba(255,255,255,.15)),color-stop(.25,transparent),color-stop(.5,transparent),color-stop(.5,rgba(255,255,255,.15)),color-stop(.75,rgba(255,255,255,.15)),color-stop(.75,transparent),to(transparent));
+  background-image: -webkit-linear-gradient(-45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent);
+  background-image: -moz-linear-gradient(-45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent);
+  background-image: -ms-linear-gradient(-45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent);
+  background-image: -o-linear-gradient(-45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent);
+  background-image: linear-gradient(-45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent);
 }
 .progress-info .bar {
   background-color: #4bb1cf;
-  background-image: -moz-linear-gradient(top, #5bc0de, #339bb9);
-  background-image: -ms-linear-gradient(top, #5bc0de, #339bb9);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#339bb9));
-  background-image: -webkit-linear-gradient(top, #5bc0de, #339bb9);
-  background-image: -o-linear-gradient(top, #5bc0de, #339bb9);
-  background-image: linear-gradient(top, #5bc0de, #339bb9);
+  background-image: -moz-linear-gradient(top,#5bc0de,#339bb9);
+  background-image: -ms-linear-gradient(top,#5bc0de,#339bb9);
+  background-image: -webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#339bb9));
+  background-image: -webkit-linear-gradient(top,#5bc0de,#339bb9);
+  background-image: -o-linear-gradient(top,#5bc0de,#339bb9);
+  background-image: linear-gradient(top,#5bc0de,#339bb9);
   background-repeat: repeat-x;
   filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#339bb9', GradientType=0);
 }
 .progress-info.progress-striped .bar {
   background-color: #5bc0de;
-  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));
-  background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+  background-image: -webkit-gradient(linear,0 100%,100% 0,color-stop(.25,rgba(255,255,255,.15)),color-stop(.25,transparent),color-stop(.5,transparent),color-stop(.5,rgba(255,255,255,.15)),color-stop(.75,rgba(255,255,255,.15)),color-stop(.75,transparent),to(transparent));
+  background-image: -webkit-linear-gradient(-45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent);
+  background-image: -moz-linear-gradient(-45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent);
+  background-image: -ms-linear-gradient(-45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent);
+  background-image: -o-linear-gradient(-45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent);
+  background-image: linear-gradient(-45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent);
 }
 .accordion {
   margin-bottom: 18px;
@@ -3579,26 +3359,23 @@ a.thumbnail:hover {
 .carousel .item {
   display: none;
   position: relative;
-  -webkit-transition: 0.6s ease-in-out left;
-  -moz-transition: 0.6s ease-in-out left;
-  -ms-transition: 0.6s ease-in-out left;
-  -o-transition: 0.6s ease-in-out left;
-  transition: 0.6s ease-in-out left;
+  -webkit-transition: .6s ease-in-out left;
+  -moz-transition: .6s ease-in-out left;
+  -ms-transition: .6s ease-in-out left;
+  -o-transition: .6s ease-in-out left;
+  transition: .6s ease-in-out left;
 }
 .carousel .item > img {
   display: block;
   line-height: 1;
 }
-.carousel .active,
-.carousel .next,
-.carousel .prev {
+.carousel .active, .carousel .next, .carousel .prev {
   display: block;
 }
 .carousel .active {
   left: 0;
 }
-.carousel .next,
-.carousel .prev {
+.carousel .next, .carousel .prev {
   position: absolute;
   top: 0;
   width: 100%;
@@ -3609,8 +3386,7 @@ a.thumbnail:hover {
 .carousel .prev {
   left: -100%;
 }
-.carousel .next.left,
-.carousel .prev.right {
+.carousel .next.left, .carousel .prev.right {
   left: 0;
 }
 .carousel .active.left {
@@ -3656,10 +3432,9 @@ a.thumbnail:hover {
   bottom: 0;
   padding: 10px 15px 5px;
   background: #333333;
-  background: rgba(0, 0, 0, 0.75);
+  background: rgba(0,0,0,.75);
 }
-.carousel-caption h4,
-.carousel-caption p {
+.carousel-caption h4, .carousel-caption p {
   color: #ffffff;
 }
 .hero-unit {
@@ -3696,7 +3471,166 @@ a.thumbnail:hover {
 .invisible {
   visibility: hidden;
 }
-/* new clearfix */
+.datepicker {
+  top: 0;
+  left: 0;
+  padding: 4px;
+  margin-top: 1px;
+  -webkit-border-radius: 4px;
+  -moz-border-radius: 4px;
+  border-radius: 4px;
+}
+.datepicker:before {
+  content: '';
+  display: inline-block;
+  border-left: 7px solid transparent;
+  border-right: 7px solid transparent;
+  border-bottom: 7px solid #cccccc;
+  border-bottom-color: rgba(0,0,0,0.2);
+  position: absolute;
+  top: -7px;
+  left: 6px;
+}
+.datepicker:after {
+  content: '';
+  display: inline-block;
+  border-left: 6px solid transparent;
+  border-right: 6px solid transparent;
+  border-bottom: 6px solid #ffffff;
+  position: absolute;
+  top: -6px;
+  left: 7px;
+}
+.datepicker > div {
+  display: none;
+}
+.datepicker table {
+  width: 100%;
+  margin: 0;
+}
+.datepicker td, .datepicker th {
+  text-align: center;
+  width: 20px;
+  height: 20px;
+  -webkit-border-radius: 4px;
+  -moz-border-radius: 4px;
+  border-radius: 4px;
+}
+.datepicker td.day:hover {
+  background: #eeeeee;
+  cursor: pointer;
+}
+.datepicker td.day.disabled {
+  color: #eeeeee;
+}
+.datepicker td.old, .datepicker td.new {
+  color: #999999;
+}
+.datepicker td.active, .datepicker td.active:hover {
+  color: #ffffff;
+  background-color: #006dcc;
+  background-image: -moz-linear-gradient(top,#dd4814,#dd4a14);
+  background-image: -webkit-gradient(linear,0 0,0 100%,from(#dd4814),to(#dd4a14));
+  background-image: -webkit-linear-gradient(top,#dd4814,#dd4a14);
+  background-image: -o-linear-gradient(top,#dd4814,#dd4a14);
+  background-image: linear-gradient(to bottom,#dd4814,#dd4a14);
+  background-repeat: repeat-x;
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdd4814', endColorstr='#ffdd4a14', GradientType=0);
+  border-color: #dd4a14 #dd4a14 #002a80;
+  border-color: rgba(0,0,0,0.1)rgba(0,0,0,0.1)rgba(0,0,0,0.25);
+  *background-color: #dd4a14;
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+  color: #ffffff;
+  text-shadow: 0 -1px 0 rgba(0,0,0,0.25);
+}
+.datepicker td.active:hover,
+.datepicker td.active:hover:hover,
+.datepicker td.active:focus,
+.datepicker td.active:hover:focus,
+.datepicker td.active:active,
+.datepicker td.active:hover:active,
+.datepicker td.active.active,
+.datepicker td.active:hover.active,
+.datepicker td.active.disabled,
+.datepicker td.active:hover.disabled,
+.datepicker td.active[disabled],
+.datepicker td.active:hover[disabled] {
+  color: #ffffff;
+  background-color: #dd4a14;
+  *background-color: #003bb3;
+}
+.datepicker td.active:active,
+.datepicker td.active:hover:active,
+.datepicker td.active.active,
+.datepicker td.active:hover.active {
+  background-color: #003399 \9;
+}
+.datepicker td span {
+  display: block;
+  width: 47px;
+  height: 54px;
+  line-height: 54px;
+  float: left;
+  margin: 2px;
+  cursor: pointer;
+  -webkit-border-radius: 4px;
+  -moz-border-radius: 4px;
+  border-radius: 4px;
+}
+.datepicker td span:hover {
+  background: #eeeeee;
+}
+.datepicker td span.active {
+  color: #ffffff;
+  background-color: #006dcc;
+  background-image: -moz-linear-gradient(top,#dd4814,#dd4a14);
+  background-image: -webkit-gradient(linear,0 0,0 100%,from(#dd4814),to(#dd4a14));
+  background-image: -webkit-linear-gradient(top,#dd4814,#dd4a14);
+  background-image: -o-linear-gradient(top,#dd4814,#dd4a14);
+  background-image: linear-gradient(to bottom,#dd4814,#dd4a14);
+  background-repeat: repeat-x;
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdd4814', endColorstr='#ffdd4a14', GradientType=0);
+  border-color: #dd4a14 #dd4a14 #002a80;
+  border-color: rgba(0,0,0,0.1)rgba(0,0,0,0.1)rgba(0,0,0,0.25);
+  *background-color: #dd4a14;
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+  color: #ffffff;
+  text-shadow: 0 -1px 0 rgba(0,0,0,0.25);
+}
+.datepicker td span.active:hover,
+.datepicker td span.active:focus,
+.datepicker td span.active:active,
+.datepicker td span.active.active,
+.datepicker td span.active.disabled,
+.datepicker td span.active[disabled] {
+  color: #ffffff;
+  background-color: #dd4a14;
+  *background-color: #003bb3;
+}
+.datepicker td span.active:active, .datepicker td span.active.active {
+  background-color: #003399 \9;
+}
+.datepicker td span.old {
+  color: #999999;
+}
+.datepicker th.switch {
+  width: 145px;
+}
+.datepicker th.next, .datepicker th.prev {
+  font-size: 21px;
+}
+.datepicker thead tr:first-child th {
+  cursor: pointer;
+}
+.datepicker thead tr:first-child th:hover {
+  background: #eeeeee;
+}
+.input-append.date .add-on i, .input-prepend.date .add-on i {
+  display: block;
+  cursor: pointer;
+  width: 16px;
+  height: 16px;
+}
 .clearfix:after {
   visibility: hidden;
   display: block;
@@ -3708,18 +3642,10 @@ a.thumbnail:hover {
 * html .clearfix {
   zoom: 1;
 }
-/* IE6 */
-*:first-child + html .clearfix {
+* :first-child + html .clearfix {
   zoom: 1;
 }
-/* IE7 */
-@font-face {
-  font-family: 'anivers';
-  src: url('/static/dashboard/fonts/Anivers_Regular-webfont.eot?5f61443eb372');
-  src: url('/static/dashboard/fonts/Anivers_Regular-webfont.eot?iefix') format('eot'), url('/static/dashboard/fonts/Anivers_Regular-webfont.woff?2c3db88030ec') format('woff'), url('/static/dashboard/fonts/Anivers_Regular-webfont.ttf?6a7822aa21cf') format('truetype'), url('/static/dashboard/fonts/Anivers_Regular-webfont.svg#webfont3JLVF59W') format('svg');
-  font-weight: normal;
-  font-style: normal;
-}
+
 a {
   color: #dd4814;
 }
@@ -3753,9 +3679,9 @@ dt {
   font-size: 11px;
   margin-left: 20px;
   padding: 0;
-  background-image: url('../../dashboard/img/drop_arrow.png?2ec1100baed3');
-  border: 1px solid #c0d9e4;
-  background-color: #e9f5fa;
+  background-image: url('/static/dashboard/img/drop_arrow.png');
+  border: 1px solid #77216f;
+  background-color: #eddbea;
   background-repeat: no-repeat;
 }
 .topbar .switcher_bar a {
@@ -3767,18 +3693,18 @@ dt {
   width: 130px;
 }
 #user_info {
-  color: #888;
+  color: #ffffff;
   margin: auto 0;
 }
 #user_info > a {
   margin-left: 25px;
-  font-size: 11px;
+  font-size: 11px !important;
+  color: #ffffff;
 }
 .page-header {
   margin: 0;
   padding: 0;
   border: 0;
-  font-family: anivers;
 }
 h2 {
   color: #6a6a6a;
@@ -3786,15 +3712,14 @@ h2 {
   font-weight: normal;
 }
 body {
-  background-color: #fff;
+  background-color: #ffffff;
   min-width: 890px;
 }
-
-
-
-/* Login Splash Page */
+#splash {
+  background: #fafafa url(../img/dots.png) repeat center top;
+}
 #splash .login {
-  background: #DD4814 url(../img/ubuntu.png) no-repeat center 35px;
+  background: #dd4814 url('../img/ubuntu.png') no-repeat center 35px;
   position: absolute;
   top: 80px;
   left: 50%;
@@ -3806,9 +3731,9 @@ body {
   -webkit-border-radius: 6px;
   -moz-border-radius: 6px;
   border-radius: 6px;
-  -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
-  -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
-  box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
+  -webkit-box-shadow: 0 3px 7px rgba(0,0,0,0.3);
+  -moz-box-shadow: 0 3px 7px rgba(0,0,0,0.3);
+  box-shadow: 0 3px 7px rgba(0,0,0,0.3);
   -webkit-background-clip: padding-box;
   -moz-background-clip: padding-box;
   background-clip: padding-box;
@@ -3816,13 +3741,20 @@ body {
 
 #splash .login form,
 #splash .login .modal-header {
-    background-color: #fff;
+  background-color: #ffffff;
+}
+
+#splash .login .modal-header {
+  border-top: 1px solid #c44012;
 }
 
-#splash .login input {
+#splash .login form .error {
+  width: 100%;
+}
+#splash .login form input {
   width: 350px;
 }
-#splash .login select {
+#splash .login form select {
   width: 360px;
 }
 #splash .help-block {
@@ -3832,27 +3764,27 @@ body {
   margin-top: 190px;
 }
 .nav li a {
-  color: #8EACB7;
+  color: #8eacb7;
   text-shadow: none;
 }
 .container-fluid {
   padding-left: 0;
 }
 .sidebar {
-  background: #edf9ff;
+  background: #f2f2f2;
   border-right: 5px solid #e5e5e5;
   border-bottom: 5px solid #e5e5e5;
   float: left;
 }
 .sidebar h4 {
   margin-left: 14px;
-  color: #999;
+  color: #999999;
 }
 .sidebar .nav-tabs {
-  margin-top: -34px;
+  margin-top: 10px;
 }
 .sidebar .nav-tabs li.active a {
-  background-color: #edf9ff;
+  background-color: #f2f2f2;
 }
 h1.brand {
   width: 100%;
@@ -3861,7 +3793,7 @@ h1.brand {
   padding-bottom: 40px;
 }
 h1.brand a {
-  background: url(../img/ubuntu.png) top left no-repeat;
+  background: url('../img/logo.png') top left no-repeat;
   display: block;
   float: left;
   width: 116px;
@@ -3871,7 +3803,6 @@ h1.brand a {
   margin-top: 15px;
   margin-bottom: 25px;
 }
-/* Tenant Dropdown */
 a.current_item {
   width: 163px;
   float: left;
@@ -3879,11 +3810,12 @@ a.current_item {
 a.current_item:hover {
   text-decoration: none;
 }
-a.current_item:hover h3,
-a.current_item:hover h4 {
+a.current_item:hover h3, a.current_item:hover h4 {
   color: #39738c;
 }
 .sidebar .switcher_bar {
+  background-color: #eddbea;
+  border: 1px solid #77216f;
   width: 190px;
   height: 38px;
   padding: 5px 0;
@@ -3893,39 +3825,49 @@ a.current_item:hover h4 {
 .sidebar .switcher_bar a.dropdown-toggle {
   display: block;
   padding: 5px 0;
-  background-image: url('../../dashboard/img/drop_arrow.png');
-  border: 1px solid #c0d9e4;
-  background-color: #e9f5fa;
+  background-image: url('/static/dashboard/img/drop_arrow.png');
+  border: 1px solid #77216f;
+  background-color: #eddbea;
   background-repeat: no-repeat;
   background-position: 167px 23px;
 }
 .sidebar .switcher_bar a.dropdown-toggle:hover {
   text-decoration: none;
-  background-color: #cde8f4;
+  background-color: #dbb6d4;
 }
 .sidebar .switcher_bar:focus {
   outline: none;
 }
 .sidebar .switcher_bar h3 {
-  color: #4790ae;
+  color: #2c001e;
   font-size: 16px;
   margin: -6px 0 0 14px;
   padding: 0;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+}
+.sidebar .switcher_bar h3:hover {
+  white-space: normal;
+  overflow: visible;
+  text-overflow: none;
+  padding-right: 1em;
+  word-wrap: break-word;
 }
 .sidebar .switcher_bar h4 {
-  color: #6fabc4;
+  color: #5e2750;
   font-size: 10px;
   text-transform: uppercase;
   font-weight: normal;
   padding: 0;
 }
 .sidebar .switcher_bar ul {
-  border: 1px solid #c0d9e4;
+  border: 1px solid #77216f;
   margin-left: -1px;
   width: 190px;
 }
 .sidebar .switcher_bar li a:hover {
-  background: #92d6f1;
+  background: #77216f;
 }
 #usage {
   margin-bottom: 25px;
@@ -3986,43 +3928,40 @@ a.current_item:hover h4 {
   border: none;
 }
 .table-bordered tr.table_caption + tr th {
-  border-top: 1px solid #ddd;
+  border-top: 1px solid #dddddd;
 }
 .table-bordered tr.table_caption + tr th:first-child,
 .table-bordered tr.table_caption + tr th.hide + th {
   -moz-border-radius-topleft: 4px;
   -webkit-border-top-left-radius: 4px;
   border-top-left-radius: 4px;
-  border-left: 1px solid #ddd;
+  border-left: 1px solid #dddddd;
 }
 .table-bordered tr.table_caption + tr th:last-child {
   -moz-border-radius-topright: 4px;
   -webkit-border-top-right-radius: 4px;
   border-top-right-radius: 4px;
-  border-right: 1px solid #ddd;
+  border-right: 1px solid #dddddd;
 }
-.table-bordered tbody tr td:first-child,
-.table-bordered tfoot tr td:first-child {
-  border-left: 1px solid #ddd;
+.table-bordered tbody tr td:first-child, .table-bordered tfoot tr td:first-child {
+  border-left: 1px solid #dddddd;
 }
-.table-bordered tbody tr td:last-child,
-.table-bordered tfoot tr td:last-child {
-  border-right: 1px solid #ddd;
+.table-bordered tbody tr td:last-child, .table-bordered tfoot tr td:last-child {
+  border-right: 1px solid #dddddd;
 }
 .table-bordered tfoot tr td:first-child {
-  border-bottom: 1px solid #ddd;
+  border-bottom: 1px solid #dddddd;
   -moz-border-radius-bottomleft: 4px;
   -webkit-border-bottom-left-radius: 4px;
   border-bottom-left-radius: 4px;
 }
 .table-bordered tfoot tr td:last-child {
-  border-bottom: 1px solid #ddd;
+  border-bottom: 1px solid #dddddd;
   -moz-border-radius-bottomright: 4px;
   -webkit-border-bottom-right-radius: 4px;
   border-bottom-right-radius: 4px;
 }
-.table_title h3,
-.table_header h3 {
+.table_title h3, .table_header h3 {
   font-family: anivers;
   font-weight: normal;
   font-size: 24px;
@@ -4034,6 +3973,7 @@ a.current_item:hover h4 {
 }
 .table th.header:hover {
   background-color: #e8e8e8;
+  text-decoration: underline;
 }
 .table tbody td.anchor a {
   display: block;
@@ -4043,29 +3983,26 @@ a.current_item:hover h4 {
   background-color: transparent;
   cursor: default;
 }
-.table th.headerSortUp:hover,
-.table th.headerSortDown:hover {
+.table th.headerSortUp:hover, .table th.headerSortDown:hover {
   background-color: #dfdfdf;
 }
-.table th.headerSortUp,
-.table th.headerSortDown {
+.table th.headerSortUp, .table th.headerSortDown {
   background-color: #dfdfdf;
   background-repeat: no-repeat;
   background-position: 98% center;
 }
 .table th.headerSortDown {
-  background-image: url('../../dashboard/img/drop_arrow.png?2ec1100baed3');
+  background-image: url('/static/dashboard/img/drop_arrow.png');
 }
 .table th.headerSortUp {
-  background-image: url('../../dashboard/img/up_arrow.png?4293b62aa222');
+  background-image: url('/static/dashboard/img/up_arrow.png');
 }
-.table tr.summation td:first-child,
-.table tr.summation td:last-child {
+.table tr.summation td:first-child, .table tr.summation td:last-child {
   border-radius: 0;
   border-bottom: 0 none;
 }
 th {
-  background: #F7F2F6;
+  background: #f7f2f6;
 }
 td.anchor {
   padding: 0;
@@ -4080,17 +4017,18 @@ small {
   margin: 10px 0 20px 0;
 }
 .main_nav a {
-  color: #999;
+  color: #999999;
   width: 185px;
   padding: 10px;
   display: block;
   margin-left: 20px;
 }
 .main_nav a.active {
-  background: #fff;
+  background: #ffffff;
   border: 2px solid #d8d8d8;
   border-right: 0;
-  border-bottom-color: #ccc;
+  border-bottom-color: #cccccc;
+  color: #5e2750;
 }
 table form {
   margin-bottom: 0;
@@ -4104,9 +4042,9 @@ table form {
   width: 300px;
 }
 .messages .alert-block {
-  -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
-  -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
-  box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
+  -webkit-box-shadow: 0 3px 7px rgba(0,0,0,0.3);
+  -moz-box-shadow: 0 3px 7px rgba(0,0,0,0.3);
+  box-shadow: 0 3px 7px rgba(0,0,0,0.3);
 }
 .messages .alert-block.alert-error {
   border: 1px solid #9d261d;
@@ -4118,9 +4056,7 @@ table form {
   margin-top: -23px;
   margin-right: -23px;
 }
-.modal > form,
-.login > form,
-.alert-actions > form {
+.modal > form, .login > form, .alert-actions > form {
   margin-bottom: 0;
 }
 .alert-block p {
@@ -4155,8 +4091,8 @@ table form {
   text-align: center;
 }
 .table tfoot tr td {
-  border-top: 1px solid #DDD;
-  background-color: #F1F1F1;
+  border-top: 1px solid #dddddd;
+  background-color: #f1f1f1;
   font-size: 11px;
   line-height: 14px;
 }
@@ -4164,30 +4100,113 @@ table form {
   float: right;
   min-width: 400px;
 }
-.table_actions .table_search {
+.table_actions .table_search, .table_actions .table_filter {
   display: inline-block;
 }
 .table_search input {
-  background: url('../../dashboard/img/search.png?781fb162b111') no-repeat 195px 5px;
+  background: url('/static/dashboard/img/search.png') no-repeat 195px 5px;
   display: inline-block;
   margin-bottom: 0;
 }
-.table_actions a,
-.table_actions button {
+.table_actions a, .table_actions button {
   float: right;
   margin-left: 10px;
 }
 .table_actions button.filter {
   margin-left: 0;
 }
-.table_header .table_actions {
-  min-width: 0;
+.table_actions a.btn-create, .table_actions a.btn-launch {
+  padding-left: 23px;
+  position: relative;
 }
-.table_header .table_actions a,
-.table_header .table_actions button {
+.table_actions a.btn-create:before, .table_actions a.btn-launch:before {
+  display: inline-block;
+  content: "";
+  width: 18px;
+  height: 20px;
+  margin-top: 1px;
+  *margin-right: .3em;
+  line-height: 14px;
+  background-image: url('/static/bootstrap/img/glyphicons-halflings.png');
+  background-position: -403px -92px;
+  background-repeat: no-repeat;
+  position: absolute;
+  top: 0px;
+  left: 0px;
+}
+.table_actions a.btn-download {
+  padding-left: 23px;
+  position: relative;
+}
+.table_actions a.btn-download:before {
+  display: inline-block;
+  content: "";
+  width: 18px;
+  height: 20px;
+  margin-top: 1px;
+  *margin-right: .3em;
+  line-height: 14px;
+  background-image: url('/static/bootstrap/img/glyphicons-halflings.png');
+  background-position: -91px -19px;
+  background-repeat: no-repeat;
+  position: absolute;
+  top: 0px;
+  left: 0px;
+}
+.table_actions a.btn-upload {
+  padding-left: 23px;
+  position: relative;
+}
+.table_actions a.btn-upload:before {
+  display: inline-block;
+  content: "";
+  width: 18px;
+  height: 20px;
+  margin-top: 1px;
+  *margin-right: .3em;
+  line-height: 14px;
+  background-image: url('/static/bootstrap/img/glyphicons-halflings.png');
+  background-position: -283px -92px;
+  background-repeat: no-repeat;
+  position: absolute;
+  top: 0px;
+  left: 0px;
+}
+.table_actions button.btn-delete, .table_actions button.btn-terminate {
+  padding-left: 23px;
+  position: relative;
+}
+.table_actions button.btn-delete:before, .table_actions button.btn-terminate:before {
+  display: inline-block;
+  content: "";
+  width: 18px;
+  height: 20px;
+  margin-top: 1px;
+  *margin-right: .3em;
+  line-height: 14px;
+  background-image: url('/static/bootstrap/img/glyphicons-halflings-white.png');
+  background-position: -451px 5px;
+  background-repeat: no-repeat;
+  position: absolute;
+  top: 0px;
+  left: 0px;
+}
+.table_header .table_actions {
+  min-width: 0;
+}
+.table_header .table_actions a,
+.table_header .table_actions > button,
+.table_header .table_actions .table_search button {
   display: inline-block;
   float: none;
 }
+.table_header .table_filter {
+  vertical-align: bottom;
+  margin-right: 20px;
+}
+.table_header .table_filter i {
+  vertical-align: middle;
+}
 .table_actions form {
   float: right;
   margin-left: 10px;
@@ -4195,10 +4214,21 @@ table form {
 .hidden {
   display: none;
 }
-.table-striped tbody tr.status_unknown:nth-child(odd) td {
+.table-striped.datatable tbody tr.odd td {
+  background-color: #f9f9f9;
+}
+.table-striped.datatable tbody tr.even td {
+  background-color: inherit;
+}
+.table-striped.datatable tbody tr.odd:hover td,
+.table-striped.datatable tbody tr.even:hover td,
+.table-striped.datatable tbody tr:hover th {
+  background-color: #f5f5f5;
+}
+.table-striped tbody tr.status_unknown:nth-child(odd)td {
   background-color: #ffffb5;
 }
-.table-striped tbody tr.status_unknown:nth-child(even) td {
+.table-striped tbody tr.status_unknown:nth-child(even)td {
   background-color: #ffffc6;
 }
 .nowrap-col {
@@ -4222,24 +4252,20 @@ table form {
   float: left;
   line-height: 18px;
 }
-#external_links,
-#external_links li {
+#external_links, #external_links li {
   float: left;
 }
 #external_links li {
   margin: 0 0 0 15px;
 }
-/* Forms */
 form label {
   text-align: left;
-  color: #555;
+  color: #555555;
   font-weight: bold;
 }
 .modal {
   width: 700px;
   max-height: none;
-  /* Prevents large modals from scrolling unnecessarily */
-
   top: 80px;
   margin-top: 0;
   position: absolute;
@@ -4256,23 +4282,27 @@ form label {
   bottom: 0;
   width: 150px;
 }
+.datepicker {
+  margin-top: 10px;
+}
+.datepicker input {
+  width: 65px;
+  margin-right: 10px;
+}
+.datepicker .btn {
+  margin-right: 10px;
+}
 form.horizontal .form-field {
   float: left;
 }
 form.horizontal.split_half .form-field {
   width: 334px;
-  /* Fits 2 fields to a row */
-
 }
 form.horizontal.split_quarter .form-field {
   width: 167px;
-  /* Fits 4 fields to a row */
-
 }
 form.horizontal.split_five .form-field {
   width: 133px;
-  /* Fits 5 fields to a row */
-
 }
 form.horizontal fieldset {
   width: 100%;
@@ -4290,8 +4320,8 @@ form.horizontal fieldset {
 .static_page {
   float: left;
   width: 700px;
-  background-color: #FFF;
-  border: 1px solid #DDD;
+  background-color: #ffffff;
+  border: 1px solid #dddddd;
 }
 .static_page > form {
   margin-bottom: 0;
@@ -4320,7 +4350,7 @@ form.horizontal fieldset {
   vertical-align: top;
   width: 340px;
   padding-left: 10px;
-  border-left: 1px solid #DDD;
+  border-left: 1px solid #dddddd;
 }
 .workflow fieldset > table {
   margin-bottom: 0;
@@ -4339,8 +4369,7 @@ form.horizontal fieldset {
 .modal-body fieldset ul {
   width: 90%;
 }
-.modal-body fieldset .form-field input,
-.modal-body fieldset .form-field textarea {
+.modal-body fieldset .form-field input, .modal-body fieldset .form-field textarea {
   width: 298px;
 }
 .modal-body fieldset .form-field select {
@@ -4361,7 +4390,7 @@ form.horizontal fieldset {
   margin-top: 0;
   margin-right: 5px;
   font-size: 12px;
-  color: #666;
+  color: #666666;
   font-weight: normal;
   filter: alpha(opacity=100);
   -khtml-opacity: 1;
@@ -4369,7 +4398,7 @@ form.horizontal fieldset {
   opacity: 1;
 }
 .modal-footer a.close:hover {
-  color: #333;
+  color: #333333;
   text-decoration: underline;
 }
 .modal-body .help-block {
@@ -4396,28 +4425,26 @@ form.horizontal fieldset {
 #images #actions {
   width: 100px;
 }
-/*New List Patches*/
 .details-modal .modal-body {
   padding-bottom: 20px;
 }
 .form-inline {
   display: inline;
 }
-.form-inline input,
-.form-inline button,
-.form-inline a.btn {
+.form-inline input, .form-inline button, .form-inline a.btn {
   margin-left: 5px;
 }
 td.select {
   width: 10px;
 }
-/* Actions dropdown */
 td.actions_column {
-  width: 150px;
+  white-space: nowrap;
   padding: 10px;
   position: relative;
-  min-width: 140px;
-  min-height: 20px;
+  width: 200px;
+}
+td.actions_column .btn-group {
+  display: inline-block;
 }
 td.actions_column .row_actions a,
 td.actions_column .row_actions input,
@@ -4437,9 +4464,13 @@ td.actions_column .row_actions button {
 td.actions_column .row_actions .hide {
   display: none;
 }
-/* Makes size consistent across browsers when mixing "btn-group" and "small" */
-.btn.hide,
-.btn-group .hide {
+td.actions_column .btn-action-required {
+  font-weight: bold;
+}
+.tab-content {
+  overflow: visible;
+}
+.btn.hide, .btn-group .hide {
   display: none;
 }
 .btn-group .dropdown-toggle:focus {
@@ -4447,8 +4478,6 @@ td.actions_column .row_actions .hide {
 }
 .dropdown-menu button {
   line-height: 18px;
-  /* Matches rule for ".dropdown-menu a" in bootstrap */
-
   width: 100%;
 }
 .btn-group .dropdown-menu .btn {
@@ -4461,26 +4490,23 @@ td.actions_column .row_actions .hide {
 .dropdown-menu .btn.btn-info,
 .dropdown-menu .btn.btn-info:hover {
   text-shadow: none;
-  /* remove default bootstrap shadowing from button text. */
-
 }
 .dropdown-menu li:hover {
   background: none;
 }
 .dropdown-menu li.divider:hover {
-  background-color: #E5E5E5;
+  background-color: #e5e5e5;
 }
 td.actions_column .dropdown-menu a:hover,
 td.actions_column .dropdown-menu button:hover {
-  background-color: #CDCDCD;
+  background-color: #cdcdcd;
 }
 .dropdown-menu .btn.btn-danger {
-  color: #C43C35;
+  color: #c43c35;
 }
 .dropdown-menu .btn.btn-danger:hover {
   background-color: #f6e0df;
 }
-/* Overrides for single-action rows (no dropdown) */
 tr td.actions_column ul.row_actions.single,
 tr:hover td.actions_column ul.row_actions.single,
 td.actions_column ul.row_actions.single,
@@ -4503,12 +4529,10 @@ td.actions_column ul.row_actions.single input:hover,
 td.actions_column ul.row_actions.single button:hover {
   color: black;
 }
-th.multi_select_column,
-td.multi_select_column {
+th.multi_select_column, td.multi_select_column {
   width: 25px;
 }
-th.multi_select_column,
-td.multi_select_column {
+th.multi_select_column, td.multi_select_column {
   text-align: center;
 }
 .table-fixed {
@@ -4546,7 +4570,7 @@ tr.terminated {
   border-bottom: none;
 }
 #instance_tabs li.active a {
-  background: #fff;
+  background: #ffffff;
   padding-bottom: 8px;
   margin-bottom: -5px;
 }
@@ -4554,7 +4578,7 @@ tr.terminated {
   margin-bottom: 0;
 }
 #main_content .tab-content {
-  border: 1px solid #ddd;
+  border: 1px solid #dddddd;
   border-top: 0 none;
   padding: 10px;
 }
@@ -4570,23 +4594,22 @@ tr.terminated {
 .tab_wrapper {
   padding-top: 50px;
 }
-/* Fix tooltip z-index to show above modals. Bootstrap bug 582*/
 .tooltip {
   z-index: 12000;
 }
 .volume_boot_disclosure {
   font-weight: bold;
-  color: #555;
+  color: #555555;
   cursor: pointer;
-  background-image: url('../../dashboard/img/right_droparrow.png?b14134630332');
+  background-image: url('/static/dashboard/img/right_droparrow.png');
   background-repeat: no-repeat;
   background-position: 130px center;
 }
 .volume_boot_disclosure.on {
   width: 334px;
   margin-bottom: 10px;
-  border-bottom: solid 1px #E1E1E1;
-  background-image: url('../../dashboard/img/drop_arrow.png?2ec1100baed3');
+  border-bottom: solid 1px #e1e1e1;
+  background-image: url('/static/dashboard/img/drop_arrow.png');
 }
 form div.clearfix.error {
   width: 308px;
@@ -4595,12 +4618,18 @@ form div.clearfix.error {
   cursor: pointer;
 }
 .nav-tabs li.error a {
-  color: #B94A48;
+  color: #b94a48;
 }
 .nav-tabs li.error a:after {
   content: "*";
 }
-/* Region selector in header */
+.nav-tabs li.required a:after, form .form-field.required > label:after {
+  content: "*";
+  font-weight: bold;
+  line-height: 0;
+  padding-left: 4px;
+  color: #3290c0;
+}
 #region_selector {
   position: absolute;
   z-index: 9999;
@@ -4622,11 +4651,11 @@ form div.clearfix.error {
 #region_selector li a {
   padding: 3px 3px 3px 5px;
   display: none;
-  background: #E1E1E1;
+  background: #e1e1e1;
   margin-top: -10px;
 }
 #region_selector li:first-child p {
-  background: #ededed url('../../dashboard/img/drop_arrow.png?2ec1100baed3') no-repeat 106px 9px !important;
+  background: #ededed url('/static/dashboard/img/drop_arrow.png') no-repeat 106px 9px !important;
   display: block;
   border: 1px solid #e1e1e1;
   padding: 5px;
@@ -4635,7 +4664,7 @@ iframe {
   border: none;
 }
 .item_detail ul li label {
-  color: #000;
+  color: #000000;
   font-weight: bold;
   display: block;
   margin-top: 5px;
@@ -4643,31 +4672,41 @@ iframe {
 .progress_bar {
   height: 100%;
   width: 100%;
-  border: 1px solid #CCC;
-  background-color: #CCC;
+  border: 1px solid #cccccc;
+  background-color: #cccccc;
 }
-.progress_bar_fill,
-.progress_bar_selected {
+.progress_bar_fill, .progress_bar_selected {
   height: 100%;
   float: left;
 }
 .progress_bar_fill {
-  background-color: #666;
+  background-color: #666666;
 }
 .progress_bar_selected {
-  background-color: #4790AE;
+  background-color: #2c001e;
   width: 0;
 }
 .progress_bar_over {
   background-color: red;
 }
+.d3_quota_bar {
+  width: 20%;
+  margin-bottom: 8px;
+  margin-top: 10px;
+  float: left;
+  text-align: center;
+}
+.quota-dynamic {
+  overflow: hidden;
+  margin-bottom: 8px;
+}
 .quota_title {
-  color: #999;
+  color: #999999;
   padding-bottom: 0;
   margin-bottom: 8px;
 }
 .quota_title strong {
-  color: #000;
+  color: #000000;
 }
 .quota_title strong span {
   font-weight: normal;
@@ -4681,7 +4720,7 @@ iframe {
   margin: -8px 0 8px;
 }
 div .flavor_table {
-  border: 1px solid #AAA;
+  border: 1px solid #aaaaaa;
   width: 100%;
   margin-bottom: 14px;
 }
@@ -4706,48 +4745,52 @@ div .flavor_table {
   float: left;
   margin-right: 50px;
 }
-.error .help-inline {
+.error .help-inline, .dynamic-error {
   background: #efdfdf;
   border: 1px solid #ead5d8;
   padding: 10px;
   display: block;
 }
+.dynamic-error {
+  color: #b94a48;
+  margin-bottom: 0.5em;
+}
 label.log-length {
   line-height: 28px;
   margin-right: 10px;
 }
 .progress-success.bar {
   background-color: #5eb95e;
-  background-image: -moz-linear-gradient(top, #62c462, #57a957);
-  background-image: -ms-linear-gradient(top, #62c462, #57a957);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#57a957));
-  background-image: -webkit-linear-gradient(top, #62c462, #57a957);
-  background-image: -o-linear-gradient(top, #62c462, #57a957);
-  background-image: linear-gradient(top, #62c462, #57a957);
+  background-image: -moz-linear-gradient(top,#62c462,#57a957);
+  background-image: -ms-linear-gradient(top,#62c462,#57a957);
+  background-image: -webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#57a957));
+  background-image: -webkit-linear-gradient(top,#62c462,#57a957);
+  background-image: -o-linear-gradient(top,#62c462,#57a957);
+  background-image: linear-gradient(top,#62c462,#57a957);
   background-repeat: repeat-x;
-  filter: progid:dximagetransform.microsoft.gradient(startColorstr='#62c462', endColorstr='#57a957', GradientType=0);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#57a957', GradientType=0);
 }
 .progress_bar_fill.progress-warning.bar {
   background-color: #898989;
-  background-image: -moz-linear-gradient(top, #999999, #333333);
-  background-image: -ms-linear-gradient(top, #999999, #333333);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#999999), to(#333333));
-  background-image: -webkit-linear-gradient(top, #999999, #333333);
-  background-image: -o-linear-gradient(top, #999999, #333333);
-  background-image: linear-gradient(top, #999999, #333333);
+  background-image: -moz-linear-gradient(top,#999999,#333333);
+  background-image: -ms-linear-gradient(top,#999999,#333333);
+  background-image: -webkit-gradient(linear,0 0,0 100%,from(#999999),to(#333333));
+  background-image: -webkit-linear-gradient(top,#999999,#333333);
+  background-image: -o-linear-gradient(top,#999999,#333333);
+  background-image: linear-gradient(top,#999999,#333333);
   background-repeat: repeat-x;
-  filter: progid:dximagetransform.microsoft.gradient(startColorstr='#999999', endColorstr='#333333', GradientType=0);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#999999', endColorstr='#333333', GradientType=0);
 }
 .progress_bar_over.bar {
   background-color: #dd514c;
-  background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35);
-  background-image: -ms-linear-gradient(top, #ee5f5b, #c43c35);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#c43c35));
-  background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35);
-  background-image: -o-linear-gradient(top, #ee5f5b, #c43c35);
-  background-image: linear-gradient(top, #ee5f5b, #c43c35);
+  background-image: -moz-linear-gradient(top,#ee5f5b,#c43c35);
+  background-image: -ms-linear-gradient(top,#ee5f5b,#c43c35);
+  background-image: -webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#c43c35));
+  background-image: -webkit-linear-gradient(top,#ee5f5b,#c43c35);
+  background-image: -o-linear-gradient(top,#ee5f5b,#c43c35);
+  background-image: linear-gradient(top,#ee5f5b,#c43c35);
   background-repeat: repeat-x;
-  filter: progid:dximagetransform.microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#c43c35', GradientType=0);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#c43c35', GradientType=0);
 }
 .split_five div.control-group input[type="text"],
 .split_five div.control-group select {
@@ -4761,8 +4804,7 @@ label.log-length {
 .warning .warning-text {
   text-align: center;
 }
-.warning .warning-text h3,
-.warning .warning-text a {
+.warning .warning-text h3, .warning .warning-text a {
   display: inline-block;
 }
 .warning .warning-text h3 {
@@ -4776,107 +4818,93 @@ label.log-length {
 .no_split {
   margin-top: -60px;
 }
-/* Project Membership UI */
-.project_membership {
+.membership {
   min-height: 200px;
-  /* Buttons */
-
-  /* Header */
-
-  /* 'Fake table' body */
-
-  /* User lists */
-
-  /* List filtering */
-
-  /* Role dropdown menus */
-
 }
-.project_membership .btn-group {
+.membership .btn-group {
   margin-left: 0px;
   padding: 2px 10px 0 0;
   margin-bottom: 0px;
-  border: 1px solid #DDD;
+  border: 1px solid #dddddd;
   border-bottom: none;
 }
-.project_membership .btn-group .active {
+.membership .btn-group .active {
   float: right;
 }
-.project_membership a.btn-primary:hover {
-  background-color: #04C;
+.membership a.btn-primary:hover {
+  background-color: #dd4a14;
 }
-.project_membership .help_text {
+.membership .help_text {
   margin-left: 15px;
   margin-bottom: 15px;
 }
-.project_membership .users_title {
-  color: #555;
+.membership .members_title {
+  color: #555555;
   font-weight: bold;
   padding-left: 10px;
   float: left;
 }
-.project_membership input {
-  background: url('../../dashboard/img/search.png?781fb162b111') no-repeat 105px 5px whiteSmoke;
+.membership input {
+  background: url('/static/dashboard/img/search.png') no-repeat 105px 5px whiteSmoke;
 }
-.project_membership .fake_table_header {
-  background-color: #F1F1F1;
+.membership .fake_table_header {
+  background-color: #f1f1f1;
   width: 306px;
   height: 38px;
   padding-top: 15px;
-  border: 1px solid #DDD;
+  border: 1px solid #dddddd;
   border-bottom: none;
 }
-.project_membership .fake_table {
+.membership .fake_table {
   margin-left: 5px;
   width: 315px;
 }
-.project_membership .fake_table ul.no_results {
+.membership .fake_table ul.no_results {
   width: 298px;
 }
-.project_membership .fake_table ul.btn-group:hover {
-  background-color: #DDD;
+.membership .fake_table ul.btn-group:hover {
+  background-color: #dddddd;
 }
-.project_membership .left .fake_table_header {
+.membership .left .fake_table_header {
   width: 318px;
 }
-.project_membership .right .fake_table_header {
+.membership .right .fake_table_header {
   width: 318px;
   margin-left: -15px;
 }
-.project_membership .right .fake_table ul.no_results {
+.membership .right .fake_table ul.no_results {
   margin-left: -20px;
 }
-.project_membership .member {
+.membership .member {
   padding: 10px;
   text-align: left;
 }
-.project_membership .project_members {
+.membership .members {
   margin-left: -20px;
 }
-.project_membership .project_members ul.btn-group,
-.project_membership .available_users ul.btn-group {
+.membership .members ul.btn-group, .membership .available_members ul.btn-group {
   width: 308px;
 }
-.project_membership .dark_stripe {
-  background-color: #F9F9F9;
+.membership .dark_stripe {
+  background-color: #f9f9f9;
 }
-.project_membership .light_stripe {
+.membership .light_stripe {
   background-color: white;
 }
-.project_membership .last_stripe {
-  border-bottom: 1px solid #DDD;
+.membership .last_stripe {
+  border-bottom: 1px solid #dddddd;
 }
-.project_membership .filter {
+.membership .filter {
   width: 120px;
   margin: -5px 13px 15px 0px;
   float: right;
 }
-.project_membership .no_results {
-  border: 1px solid #DDD;
+.membership .no_results {
+  border: 1px solid #dddddd;
   padding: 10px;
-  color: #08C;
+  opacity: 0.5;
 }
-.project_membership .role_dropdown li {
+.membership .role_dropdown li {
   cursor: pointer;
   background: none;
   float: none;
@@ -4891,30 +4919,37 @@ label.log-length {
   box-shadow: none;
   z-index: 99999;
 }
-.project_membership .role_dropdown li:hover {
-  background-color: #CDCDCD;
+.membership .role_dropdown li i {
+  opacity: 0;
+}
+.membership .role_dropdown li:hover {
+  background-color: #cdcdcd;
+}
+.membership .role_dropdown li.selected i {
+  opacity: 1;
+}
+.membership .dropdown-menu.role_dropdown {
+  right: 0;
+  left: auto;
 }
-.project_membership .nav .role_options {
+.membership .nav .role_options {
   float: right;
   padding-right: 5px;
 }
-/* Inline user creation */
-.add_user_btn {
+.add_member_btn {
   display: inline;
 }
-#add_user {
+#add_member {
   clear: both;
 }
-.add_user {
+.add_member {
   float: right;
   margin-top: 10px;
   margin-right: 15px;
 }
-/* Fixes overflow on dropdowns in modal */
 .dropdown_fix {
   overflow: visible;
 }
-/* Replaces CPU hungry spin.js with animated gif */
 .loading_gif {
   width: 35px;
   height: 13px;
@@ -4922,7 +4957,13 @@ label.log-length {
   padding-right: 5px;
   float: left;
 }
-/* ResourceBrowser style */
+.action_required_img {
+  width: 35px;
+  height: 13px;
+  padding-top: 2px;
+  padding-right: 5px;
+  float: left;
+}
 #browser_wrapper {
   width: 100%;
   min-width: 1000px;
@@ -4936,7 +4977,7 @@ label.log-length {
   clear: both;
   padding: 8px;
   border-top: 1px solid #dddddd;
-  background-color: #F1F1F1;
+  background-color: #f1f1f1;
   font-size: 11px;
   line-height: 14px;
 }
@@ -4946,12 +4987,10 @@ label.log-length {
 #browser_wrapper .tfoot span.navigation_table_count {
   width: 30%;
 }
-#browser_wrapper form,
-#browser_wrapper table {
+#browser_wrapper form, #browser_wrapper table {
   margin-bottom: 0;
 }
-#browser_wrapper .navigation_wrapper,
-#browser_wrapper .content_wrapper {
+#browser_wrapper .navigation_wrapper, #browser_wrapper .content_wrapper {
   position: relative;
   float: left;
 }
@@ -4972,7 +5011,7 @@ label.log-length {
   max-width: 200px;
 }
 #browser_wrapper div.navigation_wrapper tr.current_selected td {
-  background-color: #E9F5FA;
+  background-color: #eddbea;
 }
 #browser_wrapper div.navigation_wrapper tfoot td {
   border-right: 0 none;
@@ -4991,12 +5030,6 @@ label.log-length {
 }
 #browser_wrapper div.content_wrapper {
   width: 70%;
-  /* FIXME(Ke Wu): for now there are two breadcrumb tr in both table
-    * and this one in the content table is hidden. This hack is made to
-    * fix the alignment of two table, needs a better solution in the
-    * future.
-    */
-
 }
 #browser_wrapper div.content_wrapper div.table_wrapper,
 #browser_wrapper div.content_wrapper thead th.table_header {
@@ -5033,7 +5066,7 @@ label.log-length {
   background-color: #eeeeee;
 }
 #browser_wrapper table tbody tr:last-child td {
-  border-bottom: 1px solid #ddd;
+  border-bottom: 1px solid #dddddd;
   border-radius: 0;
 }
 #browser_wrapper table tbody tr.empty td {
@@ -5047,7 +5080,6 @@ label.log-length {
   padding: 6px;
   margin: 0 0 1px 0;
 }
-/* Styling for inline object creation buttons */
 .btn-inline {
   margin-bottom: 9px;
 }
@@ -5055,15 +5087,13 @@ label.log-length {
   width: 275px;
   margin-right: 2px;
 }
-
-/* Styling for draged network object */
 #networkListSortContainer {
   display: none;
 }
 .networklist {
   padding: 6px;
-  background: #eee;
-  border: 1px solid #ccc;
+  background: #eeeeee;
+  border: 1px solid #cccccc;
   min-height: 2em;
   width: auto !important;
   -webkit-box-sizing: border-box;
@@ -5075,18 +5105,18 @@ label.log-length {
   list-style-type: none;
   margin: 6px auto;
   padding: 3px;
-  background: #fff;
-  border: 1px solid #aaa;
+  background: #ffffff;
+  border: 1px solid #aaaaaa;
   line-height: 18px;
   border-radius: 3px;
   cursor: move;
   padding-left: 23px;
-  background: #ffffff url(/static/dashboard/img/drag.png) no-repeat 11px 50%;
+  background: white url('/static/dashboard/img/drag.png') no-repeat 11px 50%;
 }
 .networklist li em {
   font-size: 0.5em;
   line-height: 1em;
-  color: #999;
+  color: #999999;
   font-style: normal;
   margin-left: 0.8em;
 }
@@ -5112,10 +5142,10 @@ label.log-length {
   content: "+";
 }
 .networklist li.ui-sortable-helper {
-  background-color: #def;
+  background-color: #ddeeff;
 }
 .networklist li.ui-state-highlight {
-  border: 1px dotted #ccc;
+  border: 1px dotted #cccccc;
   background: #efefef;
   height: 0.5em;
 }
@@ -5131,7 +5161,7 @@ label.log-length {
   margin-bottom: 1.5em;
   counter-reset: v1 0;
   background: #edf9ff;
-  border: 1px solid #c0d9e4;
+  border: 1px solid #77216f;
 }
 #selected_network li {
   position: relative;
@@ -5140,12 +5170,12 @@ label.log-length {
   content: "-";
 }
 #selected_network li:before {
-  content: "nic:" counter(v1);
+  content: "nic:"counter(v1);
   counter-increment: v1;
   display: inline-block;
   margin-right: 5px;
-  background: #666;
-  color: #fff;
+  background: #666666;
+  color: #ffffff;
   font-size: 90%;
   padding: 0px 4px;
   vertical-align: middle;
@@ -5155,353 +5185,822 @@ label.log-length {
 }
 #selected_network.dragging li:before {
   content: "nic:";
-  background-color: rgba(102, 102, 102, 0.5);
+  background-color: rgba(102,102,102,0.5);
   padding-right: 10px;
 }
 #selected_network.dragging li.ui-state-highlight:before {
   content: "";
   background: transparent;
 }
-/* Styling for network topology */
-@-webkit-keyframes progress-bar-stripes {
-  from {
-    background-position: 20px 0;
-  }
-  to {
-    background-position: 0 0;
-  }
-}
-@-moz-keyframes progress-bar-stripes {
-  from {
-    background-position: 20px 0;
-  }
-  to {
-    background-position: 0 0;
-  }
-}
-@-ms-keyframes progress-bar-stripes {
-  from {
-    background-position: 20px 0;
-  }
-  to {
-    background-position: 0 0;
-  }
-}
-@-o-keyframes progress-bar-stripes {
-  from {
-    background-position: 0 0;
-  }
-  to {
-    background-position: 20px 0;
-  }
-}
-@keyframes progress-bar-stripes {
-  from {
-    background-position: 20px 0;
-  }
-  to {
-    background-position: 0 0;
-  }
-}
-#topologyCanvas {
+#topologyCanvasContainer {
   -webkit-box-sizing: border-box;
   -moz-box-sizing: border-box;
-  -ms-box-sizing: border-box;
-  -o-box-sizing: border-box;
   box-sizing: border-box;
   width: 100%;
-  height: 500px;
+  height: auto;
   padding: 25px;
   padding-left: 50px;
   background: #efefef;
+  min-height: 400px;
 }
-#topologyCanvas div.nodata {
+#topologyCanvasContainer div.nodata {
   font-size: 150%;
-  font-weight: bold;
   text-align: center;
-  padding-top: 200px;
+  padding-top: 150px;
   display: none;
 }
-div.networks {
-  height: 100%;
+#topologyCanvasContainer.noinfo div.nodata {
+  display: block;
 }
-div.network {
-  -webkit-box-sizing: border-box;
-  -moz-box-sizing: border-box;
-  -ms-box-sizing: border-box;
-  -o-box-sizing: border-box;
-  box-sizing: border-box;
-  float: left;
-  width: 270px;
-  height: 100%;
-  position: relative;
+#topologyCanvasContainer.noinfo #topology_canvas {
+  display: none;
 }
-div.network .nicname {
-  -webkit-box-sizing: border-box;
-  -moz-box-sizing: border-box;
-  -ms-box-sizing: border-box;
-  -o-box-sizing: border-box;
-  box-sizing: border-box;
-  height: 100%;
-  width: 17px;
-  border-radius: 17px;
-  z-index: 200;
-  color: #fff;
-  position: absolute;
-  left: -8px;
-  top: 0px;
-  cursor: pointer;
+.topologyNavi {
+  overflow: hidden;
+  margin: 10px 0 20px;
 }
-div.network .nicname:hover {
-  background-image: -webkit-linear-gradient(rgba(0, 0, 0, 0.15), rgba(0, 0, 0, 0.15));
-  background-image: -moz-linear-gradient(rgba(0, 0, 0, 0.15), rgba(0, 0, 0, 0.15));
-  background-image: -ms-linear-gradient(rgba(0, 0, 0, 0.15), rgba(0, 0, 0, 0.15));
-  background-image: -o-linear-gradient(rgba(0, 0, 0, 0.15), rgba(0, 0, 0, 0.15));
-  background-image: linear-gradient(rgba(0, 0, 0, 0.15), rgba(0, 0, 0, 0.15));
-  background-size: 10px 10px;
+.topologyNavi i {
+  margin-right: 3px;
 }
-div.network .nicname.nourl {
-  cursor: auto;
+.topologyNavi .toggleView {
+  float: left;
 }
-div.network .nicname.nourl:hover {
-  background-image: none;
+.topologyNavi .launchButtons {
+  float: right;
+  text-align: right;
 }
-div.network .nicname h3 {
-  font-size: 12px;
-  line-height: 1;
-  position: relative;
-  font-weight: normal;
-  top: 55%;
-  color: #fff;
-  left: -1px;
-  letter-spacing: 0.2em;
-  -webkit-transform: rotate(-90deg);
-  -moz-transform: rotate(-90deg);
-  -ms-transform: rotate(-90deg);
-  -o-transform: rotate(-90deg);
-  transform: rotate(-90deg);
-  white-space: nowrap;
-  text-shadow: 0px 0px 5px #000;
+.topologyNavi .launchButtons a.btn {
+  margin-left: 10px;
 }
-div.network .nicname span.ip {
+.topologyBalloon {
+  display: none;
+  background: #ffffff;
   position: absolute;
-  bottom: -10px;
-  left: 20px;
-  color: #000;
+  left: 100px;
+  top: 20px;
+  z-index: 600;
+  border-radius: 5px;
+  color: #333333;
+  min-width: 200px;
+  line-height: 1.2;
+  font-size: 11px;
+  -webkit-box-shadow: 0px 1px 6px #777777;
+  -moz-box-shadow: 0px 1px 6px #777777;
+  box-shadow: 0px 1px 6px #777777;
+}
+.topologyBalloon.on {
   display: block;
-  font-weight: normal;
-  font-size: 90%;
-  letter-spacing: 0.2em;
-  -webkit-transform: rotate(-90deg);
-  -moz-transform: rotate(-90deg);
-  -ms-transform: rotate(-90deg);
-  -o-transform: rotate(-90deg);
-  transform: rotate(-90deg);
-  -webkit-transform-origin: 0% 0%;
-  -moz-transform-origin: 0% 0%;
-  -ms-transform-origin: 0% 0%;
-  -o-transform-origin: 0% 0%;
-  transform-origin: 0% 0%;
-  white-space: nowrap;
-  text-shadow: 0px 0px 2px #fff,0px 0px 2px #fff;
 }
-div.network .router,
-div.network .server,
-div.network .device {
-  -webkit-box-sizing: border-box;
-  -moz-box-sizing: border-box;
-  -ms-box-sizing: border-box;
-  -o-box-sizing: border-box;
-  box-sizing: border-box;
-  cursor: pointer;
-  width: 90px;
-  border: 3px solid #444;
-  position: absolute;
-  top: 30px;
-  left: 90px;
-  color: #fff;
-  padding: 0 3px;
-  background: #666;
-  margin-bottom: 20px;
-  border-radius: 8px;
+.topologyBalloon .vnc_window {
+  margin-left: 10px;
 }
-div.network .router:before,
-div.network .server:before,
-div.network .device:before {
-  content: "";
-  width: 20px;
-  height: 20px;
-  border: 2px solid #444;
-  line-height: 1.2;
+.topologyBalloon .closeTopologyBalloon {
+  font-size: 16px;
+  line-height: 1;
+  display: block;
   position: absolute;
-  border-radius: 20px;
-  top: -10px;
-  left: -10px;
-  background: #ffffff url(/static/dashboard/img/router.png) no-repeat center center;
-  background-size: 16px 16px;
-}
-div.network .router:after,
-div.network .server:after,
-div.network .device:after {
-  content: "";
+  font-weight: bold;
+  right: 6px;
+  top: 0px;
+  cursor: pointer;
+  padding: 3px;
+  color: #aaaaaa;
+}
+.topologyBalloon .closeTopologyBalloon:hover {
+  color: #777777;
+  text-decoration: none;
+}
+.topologyBalloon .contentBody {
+  padding: 8px 8px 0;
+}
+.topologyBalloon span.active:before, .topologyBalloon span.down:before {
+  content: "";
+  width: 9px;
+  height: 9px;
+  display: inline-block;
+  background: #0d925b;
+  margin-right: 3px;
+  border-radius: 10px;
+  vertical-align: middle;
+}
+.topologyBalloon span.down:before {
+  background: #e64b41;
+}
+.topologyBalloon .footer {
+  background: #efefef;
+  border-top: 1px solid #d9d9d9;
+  padding: 8px;
+  border-radius: 0px 0px 7px 7px;
+}
+.topologyBalloon .footer .footerInner {
+  display: table;
   width: 100%;
-  line-height: 1.2;
-  position: absolute;
-  text-align: center;
-  border-radius: 0;
-  background: #444;
-  color: #fff;
-  font-size: 11px;
-  height: 1.5em;
-  bottom: 0px;
-  left: 0px;
 }
-div.network .router span.devicename,
-div.network .server span.devicename,
-div.network .device span.devicename {
-  position: absolute;
-  color: #fff;
-  bottom: 0px;
+.topologyBalloon .footer .cell {
+  display: table-cell;
+  padding-right: 10px;
+}
+.topologyBalloon .footer .link {
   font-size: 12px;
-  line-height: 14px;
-  width: 100%;
-  text-align: center;
-  z-index: 300;
-  left: -2px;
 }
-div.network .router span.name,
-div.network .server span.name,
-div.network .device span.name {
-  overflow: hidden;
+.topologyBalloon .footer .delete {
+  padding-right: 0;
+  text-align: right;
+}
+.topologyBalloon .footer .delete .btn:before {
+  content: "Delete ";
+}
+.topologyBalloon .footer .delete .btn.deleting:before {
+  content: "Deleting ";
+}
+.topologyBalloon .footer .delete .btn.instance:before {
+  content: "Terminate ";
+}
+.topologyBalloon .footer .delete .btn.instance.deleting:before {
+  content: "Terminating ";
+}
+.topologyBalloon table.detaiInfoTable {
+  margin-bottom: 5px;
+}
+.topologyBalloon table.detaiInfoTable caption {
+  text-align: left;
+  font-size: 12px;
+  font-weight: bold;
+  margin-bottom: 0px;
+}
+.topologyBalloon table.detaiInfoTable th, .topologyBalloon table.detaiInfoTable td {
+  text-align: left;
+  vertical-align: middle;
+  padding-bottom: 3px;
+  background: transparent;
+}
+.topologyBalloon table.detaiInfoTable th {
+  color: #999999;
+  padding-right: 8px;
+  width: 80px;
+}
+.topologyBalloon table.detaiInfoTable th span {
+  vertical-align: middle;
+  width: 80px;
   white-space: nowrap;
+  overflow: hidden;
   text-overflow: ellipsis;
+  display: inline-block;
+}
+.topologyBalloon table.detaiInfoTable th.device {
+  text-align: right;
+}
+.topologyBalloon table.detaiInfoTable td {
+  padding-right: 5px;
+  white-space: nowrap;
+}
+.topologyBalloon table.detaiInfoTable td.delete {
+  padding-right: 0;
+  text-align: right;
+}
+.topologyBalloon table.detaiInfoTable .btn {
+  line-height: 1.4;
+}
+.topologyBalloon table.detaiInfoTable .btn:before {
+  content: "Delete ";
+}
+.topologyBalloon table.detaiInfoTable .btn.deleting:before {
+  content: "Deleting ";
+}
+.topologyBalloon:before {
+  border-top: 7px solid transparent;
+  border-bottom: 7px solid transparent;
+  border-right: 9px solid #bbbbbb;
   display: block;
-  font-size: 12px;
+  position: absolute;
+  top: 30px;
+  left: -9px;
+  width: 0;
+  height: 0;
+  content: "";
+}
+.topologyBalloon:after {
+  border-top: 6px solid transparent;
+  border-bottom: 6px solid transparent;
+  border-right: 8px solid #ffffff;
+  display: block;
+  position: absolute;
+  top: 31px;
+  left: -8px;
+  width: 0;
+  height: 0;
+  content: "";
+}
+.topologyBalloon.leftPosition:before {
+  border-right: none;
+  border-left: 9px solid #bbbbbb;
+  right: -9px;
+  top: 30px;
+  left: auto;
+}
+.topologyBalloon.leftPosition:after {
+  border-right: none;
+  border-left: 8px solid #ffffff;
+  right: -8px;
+  top: 31px;
+  left: auto;
+}
+#topologyMessages {
+  width: 1px;
+  height: 1px;
+  visibility: hidden;
+  position: absolute;
+  top: -100px;
+}
+.link {
+  stroke: #999999;
+  stroke-width: 1.5px;
+}
+.node {
+  cursor: pointer;
+}
+.node text {
+  font: 12px sans-serif;
+}
+#resource_container {
   position: relative;
-  z-index: 10;
-  text-align: center;
-  top: 4px;
-  padding: 0 3px;
 }
-div.network .router div.port,
-div.network .server div.port,
-div.network .device div.port {
-  text-align: right;
-  min-width: 90px;
-  height: 10px;
-  font: 0px/0px sans-serif;
+#stack_box {
   position: absolute;
-  left: -91px;
-  top: 8px;
-  background-color: #37a9e3;
-  background-image: none;
-  -webkit-background-size: 20px 20px;
-  -moz-background-size: 20px 20px;
-  -o-background-size: 20px 20px;
-  background-size: 20px 20px;
-  z-index: 100;
-}
-div.network .router div.port span.ip,
-div.network .server div.port span.ip,
-div.network .device div.port span.ip {
+  width: 300px;
+  top: 10px;
+  left: 10px;
+}
+#stack_box h3 {
+  font-size: 11pt;
+  line-height: 20px;
+}
+#stack_box p {
+  margin: 0;
+  font-size: 9pt;
+  line-height: 14px;
+}
+#stack_box a {
+  margin: 0;
+  font-size: 9pt;
+  line-height: 14px;
+}
+#stack_box img {
+  float: left;
+}
+#stack_box #stack_info {
+  float: left;
+  white-space: normal;
+  width: 200px;
+}
+#info_box {
+  position: absolute;
+  width: 300px;
+  top: 100px;
+  left: 10px;
+}
+#info_box h3 {
+  font-size: 9pt;
+  line-height: 20px;
+}
+#info_box p {
+  margin: 0;
+  font-size: 9pt;
+  line-height: 14px;
+}
+#info_box a {
+  margin: 0;
+  font-size: 9pt;
+  line-height: 14px;
+}
+#info_box .error {
+  color: darkred;
+}
+#ceilometer-stats .form-horizontal .control-label {
+  width: auto;
+}
+#ceilometer-stats .form-horizontal .controls {
+  float: left;
+  margin-left: 0;
+}
+#ceilometer-stats .form-horizontal .control-group {
+  float: left;
+  margin-right: 20px;
+}
+#ceilometer-stats .form-horizontal .btn {
+  float: left;
+  margin-right: 20px;
+  margin-bottom: 18px;
+}
+#ruleListSortContainer {
+  display: none;
+}
+.rulelist {
+  padding: 6px;
+  background: #eeeeee;
+  border: 1px solid #cccccc;
+  min-height: 2em;
+  width: auto !important;
   -webkit-box-sizing: border-box;
   -moz-box-sizing: border-box;
-  -ms-box-sizing: border-box;
-  -o-box-sizing: border-box;
   box-sizing: border-box;
-  color: #333;
-  font-size: 9px;
-  line-height: 1;
-  text-shadow: 0px -1px #ffffff;
+}
+.rulelist li {
+  width: 226px;
+  list-style-type: none;
+  margin: 6px auto;
+  padding: 3px;
+  background: #ffffff;
+  border: 1px solid #aaaaaa;
+  line-height: 18px;
+  border-radius: 3px;
+  cursor: move;
+  padding-left: 23px;
+  background: white url('/static/dashboard/img/drag.png') no-repeat 11px 50%;
+}
+.rulelist li em {
+  font-size: 0.5em;
+  line-height: 1em;
+  color: #999999;
+  font-style: normal;
+  margin-left: 0.8em;
+}
+.rulelist li i {
+  margin-right: 5px;
+  vertical-align: middle;
+}
+.rulelist li a.btn {
+  -webkit-box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  font-size: 11px;
+  line-height: 12px;
+  padding: 2px 5px 3px;
+  margin-right: 1px;
+  width: 18px;
+  text-align: center;
+  right: 5px;
+  vertical-align: middle;
+  float: right;
+}
+.rulelist li a.btn:before {
+  content: "+";
+}
+.rulelist li.ui-sortable-helper {
+  background-color: #ddeeff;
+}
+.rulelist li.ui-state-highlight {
+  border: 1px dotted #cccccc;
+  background: #efefef;
+  height: 0.5em;
+}
+.rulelist li:after {
+  visibility: hidden;
+  display: block;
+  font-size: 0;
+  content: " ";
+  clear: both;
+  height: 0;
+}
+#selected_rule {
+  margin-bottom: 1.5em;
+  counter-reset: v1 0;
+  background: #edf9ff;
+  border: 1px solid #77216f;
+}
+#selected_rule li {
   position: relative;
-  top: -1em;
-  width: 90px;
+}
+#selected_rule li a.btn:before {
+  content: "-";
+}
+#selected_rule li:before {
+  content: "rule:"counter(v1);
+  counter-increment: v1;
   display: inline-block;
-  padding-right: 8px;
-  padding-left: 8px;
-  word-wrap: break-word;
-  word-break: break-all;
+  margin-right: 5px;
+  background: #666666;
+  color: #ffffff;
+  font-size: 90%;
+  padding: 0px 4px;
+  vertical-align: middle;
+  border-radius: 2px;
+  position: absolute;
+  left: -2em;
 }
-div.network .router div.port.right,
-div.network .server div.port.right,
-div.network .device div.port.right {
-  left: auto;
-  right: -92px;
-  width: 92px;
-  text-align: left;
+#selected_rule.dragging li:before {
+  content: "rule:";
+  background-color: rgba(102,102,102,0.5);
+  padding-right: 10px;
 }
-div.network .router:hover,
-div.network .server:hover,
-div.network .device:hover {
-  border-color: #222;
+#selected_rule.dragging li.ui-state-highlight:before {
+  content: "";
+  background: transparent;
 }
-div.network .router:hover div.port,
-div.network .server:hover div.port,
-div.network .device:hover div.port {
-  cursor: pointer;
-  background-color: #2688c0;
-  -webkit-animation: progress-bar-stripes 1s linear infinite;
-  -moz-animation: progress-bar-stripes 1s linear infinite;
-  -ms-animation: progress-bar-stripes 1s linear infinite;
-  -o-animation: progress-bar-stripes 1s linear infinite;
-  animation: progress-bar-stripes 1s linear infinite;
-}
-div.network .router:hover div.port:hover,
-div.network .server:hover div.port:hover,
-div.network .device:hover div.port:hover {
-  -webkit-animation: progress-bar-stripes 0.3s linear infinite;
-  -moz-animation: progress-bar-stripes 0.3s linear infinite;
-  -ms-animation: progress-bar-stripes 0.3s linear infinite;
-  -o-animation: progress-bar-stripes 0.3s linear infinite;
-  animation: progress-bar-stripes 0.3s linear infinite;
-}
-div.network .router:hover div.port.nourl,
-div.network .server:hover div.port.nourl,
-div.network .device:hover div.port.nourl {
-  cursor: auto;
-  background-image: none;
+
+.rickshaw_graph .detail {
+    pointer-events: none;
+    position: absolute;
+    top: 0;
+    z-index: 2;
+    background: rgba(0, 0, 0, 0.1);
+    bottom: 0;
+    width: 1px;
+    transition: opacity 0.25s linear;
+    -moz-transition: opacity 0.25s linear;
+    -o-transition: opacity 0.25s linear;
+    -webkit-transition: opacity 0.25s linear;
+}
+.rickshaw_graph .detail.inactive {
+    opacity: 0;
+}
+.rickshaw_graph .detail .item.active {
+    opacity: 1;
+}
+.rickshaw_graph .detail .x_label {
+    font-family: Arial, sans-serif;
+    border-radius: 3px;
+    padding: 6px;
+    opacity: 0.5;
+    border: 1px solid #e0e0e0;
+    font-size: 12px;
+    position: absolute;
+    background: white;
+    white-space: nowrap;
+}
+.rickshaw_graph .detail .item {
+    position: absolute;
+    z-index: 2;
+    border-radius: 3px;
+    padding: 0.25em;
+    font-size: 12px;
+    font-family: Arial, sans-serif;
+    opacity: 0;
+    background: rgba(0, 0, 0, 0.4);
+    color: white;
+    border: 1px solid rgba(0, 0, 0, 0.4);
+    margin-left: 1em;
+    margin-top: -1em;
+    white-space: nowrap;
+}
+.rickshaw_graph .detail .item.active {
+    opacity: 1;
+    background: rgba(0, 0, 0, 0.8);
+}
+.rickshaw_graph .detail .item:before {
+    content: "\25c2";
+    position: absolute;
+    left: -0.5em;
+    color: rgba(0, 0, 0, 0.7);
+    width: 0;
+}
+.rickshaw_graph .detail .dot {
+    width: 4px;
+    height: 4px;
+    margin-left: -4px;
+    margin-top: -3px;
+    border-radius: 5px;
+    position: absolute;
+    box-shadow: 0 0 2px rgba(0, 0, 0, 0.6);
+    background: white;
+    border-width: 2px;
+    border-style: solid;
+    display: none;
+    background-clip: padding-box;
+}
+.rickshaw_graph .detail .dot.active {
+    display: block;
+}
+/* graph */
+
+.rickshaw_graph {
+    position: relative;
 }
-div.network .router:hover div.port.nourl:hover,
-div.network .server:hover div.port.nourl:hover,
-div.network .device:hover div.port.nourl:hover {
-  background-image: none;
+.rickshaw_graph svg {
+    display: block;
+    overflow: hidden;
 }
-div.network .router:hover:after,
-div.network .server:hover:after,
-div.network .device:hover:after {
-  background-color: #222;
-  border-color: #222;
+
+/* ticks */
+
+.rickshaw_graph .x_tick {
+    position: absolute;
+    top: 0;
+    bottom: 0;
+    width: 0px;
+    border-left: 1px dotted rgba(0, 0, 0, 0.2);
+    pointer-events: none;
+}
+.rickshaw_graph .x_tick .title {
+    position: absolute;
+    font-size: 12px;
+    font-family: Arial, sans-serif;
+    opacity: 0.5;
+    white-space: nowrap;
+    margin-left: 3px;
+    bottom: 1px;
 }
-div.network .device {
-  border: none;
-  background: transparent;
+
+/* annotations */
+
+.rickshaw_annotation_timeline {
+    height: 1px;
+    border-top: 1px solid #e0e0e0;
+    margin-top: 10px;
+    position: relative;
+}
+.rickshaw_annotation_timeline .annotation {
+    position: absolute;
+    height: 6px;
+    width: 6px;
+    margin-left: -2px;
+    top: -3px;
+    border-radius: 5px;
+    background-color: rgba(0, 0, 0, 0.25);
+}
+.rickshaw_graph .annotation_line {
+    position: absolute;
+    top: 0;
+    bottom: -6px;
+    width: 0px;
+    border-left: 2px solid rgba(0, 0, 0, 0.3);
+    display: none;
+}
+.rickshaw_graph .annotation_line.active {
+    display: block;
 }
-div.network .server {
-  background: #fff;
-  color: #333;
+
+.rickshaw_graph .annotation_range {
+        background: rgba(0, 0, 0, 0.1);
+        display: none;
+        position: absolute;
+        top: 0;
+        bottom: -6px;
 }
-div.network .server:before {
-  background: #ffffff url(/static/dashboard/img/server.png) no-repeat center center;
-  background-size: 14px 14px;
+.rickshaw_graph .annotation_range.active {
+        display: block;
 }
-.launchButtons {
-  text-align: right;
-  margin: 10px 0px 15px 10px;
+.rickshaw_graph .annotation_range.active.offscreen {
+        display: none;
 }
-.launchButtons a.btn {
-  margin-left: 10px;
+
+.rickshaw_annotation_timeline .annotation .content {
+    background: white;
+    color: black;
+    opacity: 0.9;
+    padding: 5px 5px;
+    box-shadow: 0 0 2px rgba(0, 0, 0, 0.8);
+    border-radius: 3px;
+    position: relative;
+    z-index: 20;
+    font-size: 12px;
+    padding: 6px 8px 8px;
+    top: 18px;
+    left: -11px;
+    width: 160px;
+    display: none;
+    cursor: pointer;
+}
+.rickshaw_annotation_timeline .annotation .content:before {
+    content: "\25b2";
+    position: absolute;
+    top: -11px;
+    color: white;
+    text-shadow: 0 -1px 1px rgba(0, 0, 0, 0.8);
+}
+.rickshaw_annotation_timeline .annotation.active,
+.rickshaw_annotation_timeline .annotation:hover {
+    background-color: rgba(0, 0, 0, 0.8);
+    cursor: none;
+}
+.rickshaw_annotation_timeline .annotation .content:hover {
+    z-index: 50;
+}
+.rickshaw_annotation_timeline .annotation.active .content {
+    display: block;
+}
+.rickshaw_annotation_timeline .annotation:hover .content {
+    display: block;
+    z-index: 50;
+}
+.rickshaw_graph .y_axis,
+.rickshaw_graph  .x_axis_d3 {
+    fill: none;
+}
+.rickshaw_graph .y_ticks .tick,
+.rickshaw_graph .x_ticks_d3 .tick {
+    stroke: rgba(0, 0, 0, 0.16);
+    stroke-width: 2px;
+    shape-rendering: crisp-edges;
+    pointer-events: none;
+}
+.rickshaw_graph .y_grid .tick,
+.rickshaw_graph .x_grid_d3 .tick {
+    z-index: -1;
+    stroke: rgba(0, 0, 0, 0.20);
+    stroke-width: 1px;
+    stroke-dasharray: 1 1;
+}
+.rickshaw_graph .y_grid path,
+.rickshaw_graph .x_grid_d3 path  {
+    fill: none;
+    stroke: none;
+}
+.rickshaw_graph .y_ticks path,
+.rickshaw_graph .x_ticks_d3 path {
+    fill: none;
+    stroke: #808080;
+}
+.rickshaw_graph .y_ticks text,
+.rickshaw_graph .x_ticks_d3 text {
+    opacity: 0.5;
+    font-size: 12px;
+    pointer-events: none;
+}
+.rickshaw_graph .x_tick.glow .title,
+.rickshaw_graph .y_ticks.glow text {
+    fill: black;
+    color: black;
+    text-shadow:
+        -1px 1px 0 rgba(255, 255, 255, 0.1),
+        1px -1px 0 rgba(255, 255, 255, 0.1),
+        1px 1px 0 rgba(255, 255, 255, 0.1),
+        0px 1px 0 rgba(255, 255, 255, 0.1),
+        0px -1px 0 rgba(255, 255, 255, 0.1),
+        1px 0px 0 rgba(255, 255, 255, 0.1),
+        -1px 0px 0 rgba(255, 255, 255, 0.1),
+        -1px -1px 0 rgba(255, 255, 255, 0.1);
+}
+.rickshaw_graph .x_tick.inverse .title,
+.rickshaw_graph .y_ticks.inverse text {
+    fill: white;
+    color: white;
+    text-shadow:
+        -1px 1px 0 rgba(0, 0, 0, 0.8),
+        1px -1px 0 rgba(0, 0, 0, 0.8),
+        1px 1px 0 rgba(0, 0, 0, 0.8),
+        0px 1px 0 rgba(0, 0, 0, 0.8),
+        0px -1px 0 rgba(0, 0, 0, 0.8),
+        1px 0px 0 rgba(0, 0, 0, 0.8),
+        -1px 0px 0 rgba(0, 0, 0, 0.8),
+        -1px -1px 0 rgba(0, 0, 0, 0.8);
+}
+.rickshaw_legend {
+    font-family: Arial;
+    font-size: 12px;
+    color: white;
+    background: #404040;
+    display: inline-block;
+    padding: 12px 5px;
+    border-radius: 2px;
+    position: relative;
+}
+.rickshaw_legend:hover {
+    z-index: 10;
+}
+.rickshaw_legend .swatch {
+    width: 10px;
+    height: 10px;
+    border: 1px solid rgba(0, 0, 0, 0.2);
+}
+.rickshaw_legend .line {
+    clear: both;
+    line-height: 140%;
+    padding-right: 15px;
+}
+.rickshaw_legend .line .swatch {
+    display: inline-block;
+    margin-right: 3px;
+    border-radius: 2px;
+}
+.rickshaw_legend .label {
+    margin: 0;
+    white-space: nowrap;
+    display: inline;
+    font-size: inherit;
+    background-color: transparent;
+    color: inherit;
+    font-weight: normal;
+    line-height: normal;
+    padding: 0px;
+    text-shadow: none;
+}
+.rickshaw_legend .action:hover {
+    opacity: 0.6;
+}
+.rickshaw_legend .action {
+    margin-right: 0.2em;
+    font-size: 10px;
+    opacity: 0.2;
+    cursor: pointer;
+    font-size: 14px;
+}
+.rickshaw_legend .line.disabled {
+    opacity: 0.4;
+}
+.rickshaw_legend ul {
+    list-style-type: none;
+    margin: 0;
+    padding: 0;
+    margin: 2px;
+    cursor: pointer;
+}
+.rickshaw_legend li {
+    padding: 0 0 0 2px;
+    min-width: 80px;
+    white-space: nowrap;
+}
+.rickshaw_legend li:hover {
+    background: rgba(255, 255, 255, 0.08);
+    border-radius: 3px;
+}
+.rickshaw_legend li:active {
+    background: rgba(255, 255, 255, 0.2);
+    border-radius: 3px;
 }
 
+.chart_container {
+  position: relative;
+  min-height: 300px;
+  min-width: 400px;
+}
+.chart_container .chart {
+  position: relative;
+  min-height: 300px;
+  min-width: 400px;
+}
+.chart_container .chart .detail .x_label {
+  display: none;
+}
+.chart_container .chart .detail .item {
+  line-height: 1.4;
+  padding: 0.5em;
+}
+.chart_container .chart .detail .date {
+  color: #a0a0a0;
+}
+.chart_container .chart .modal-backdrop {
+  position: absolute;
+  opacity: 0.5;
+  top: 0;
+  left: 0;
+  min-height: 300px;
+  min-width: 400px;
+}
+.chart_container .chart svg {
+  padding: 0 0 5px 0;
+}
+.chart_container .detail_swatch {
+  float: right;
+  display: inline-block;
+  width: 10px;
+  height: 10px;
+  margin: 0 4px 0 0;
+}
+.legend_container {
+  min-width: 90px;
+  margin-left: 20px;
+}
+.legend_container .swatch {
+  float: right;
+  display: inline-block;
+  width: 10px;
+  height: 10px;
+  margin: 0 4px 0 0;
+}
+.legend_container .modal-backdrop {
+  position: absolute;
+  opacity: 0.5;
+  top: 0;
+  left: 0;
+  min-width: 90px;
+}
+.legend_container .rickshaw_legend.disabled {
+  padding: 0;
+}
+.spinner_wrapper {
+  position: absolute;
+  top: 40%;
+  left: 40%;
+}
+.rickshaw_legend {
+  background: white;
+  color: #404040;
+}
+.rickshaw_legend .action {
+  text-decoration: none;
+  color: #000000;
+}
 
 /* Graham Bancroft graham.bancroft@canonical.com 03 October 2012 */
 @import url("https://fonts.googleapis.com/css?family=Ubuntu:300,400,400italic");
 
 html { height: 100%; }
 
-body { 
+body {
   background: #fff url(../img/dots.png);
   color: #333;
-  font-family: Ubuntu, Arial, 'libra sans', sans-serif; 
+  font-family: Ubuntu, Arial, 'libra sans', sans-serif;
   font-size: 16px;
   height: 100%;
 }
@@ -5526,7 +6025,7 @@ body {
 
 /* topbar */
 .topbar {
-  background: #dd4814 url('../../dashboard/img/header_b.png') -20% 0 repeat-x;
+  background: #dd4814 url('/static/dashboard/img/header_b.png') -20% 0 repeat-x;
   border-bottom: 0;
   color: #fff;
   left: -225px;
@@ -5581,11 +6080,11 @@ h1.brand a {
   margin-top: 10px;
 }
 
-#user_info, #user_info a { font-size: 14px; }
+#user_info, #user_info a { font-size: 14px !important; }
 
 /* main nav (in sidebar) */
 .main_nav li {
-       position: relative;     
+    position: relative;
 }
 
 .main_nav a {
@@ -5649,19 +6148,18 @@ h1.brand a {
 .sidebar .nav-tabs li a { color: #888; }
 
 .sidebar .nav-tabs li a:hover {
-       background: none;
-       border-color: #f7f7f7;
-       border-bottom-color: #ddd;
-       color: #333;
+    background: none;
+    border-color: #f7f7f7;
+    border-bottom-color: #ddd;
+    color: #333;
 }
 
 .sidebar .nav-tabs li.active a {
   background-color: #eee;
   color: #333;
 }
-
-.sidebar .nav-tabs li.active a:hover { 
-  border-color: #d7d6d6; 
+.sidebar .nav-tabs li.active a:hover {
+  border-color: #d7d6d6;
   border-bottom-color: #eee;
 }
 
@@ -5678,7 +6176,7 @@ h1.brand a {
 }
 
 .table_header h3 {
-  font-family: Ubuntu, Arial, 'libra sans', sans-serif;        
+  font-family: Ubuntu, Arial, 'libra sans', sans-serif;
   margin-left: -10px;
 }
 
@@ -5709,5 +6207,6 @@ table th {
 
 .static_page, .quota-dynamic, .table_wrapper, .usage_info_wrapper, .tab-content {
   background: #fff;
-  background: rgba(255, 255, 255, 0.70);
+  background: rbga(255, 255, 255, 0.70);
 }
+