diff --git a/Gemfile b/Gemfile
deleted file mode 100644
index ae4e0259..00000000
--- a/Gemfile
+++ /dev/null
@@ -1,16 +0,0 @@
-source 'https://rubygems.org'
-
-ruby '2.1.1'
-
-gem 'sinatra', '~> 1.4.3'
-gem 'sinatra-contrib', '~> 1.4.1'
-gem 'kss', '~> 0.5.0'
-gem 'thin', '~> 1.6.0'
-
-gem 'scss-lint', '0.15.0'
-
-group :development do
- gem "pry"
- gem "pry-nav"
-end
-
diff --git a/Gemfile.lock b/Gemfile.lock
deleted file mode 100644
index 59368bfd..00000000
--- a/Gemfile.lock
+++ /dev/null
@@ -1,66 +0,0 @@
-GEM
- remote: https://rubygems.org/
- specs:
- backports (3.4.0)
- coderay (1.1.0)
- colorize (0.5.8)
- daemons (1.1.9)
- eventmachine (1.0.3)
- ffi (1.9.3)
- kss (0.5.0)
- listen (1.1.6)
- rb-fsevent (>= 0.9.3)
- rb-inotify (>= 0.9)
- rb-kqueue (>= 0.2)
- method_source (0.8.2)
- multi_json (1.8.2)
- pry (0.9.12.4)
- coderay (~> 1.0)
- method_source (~> 0.8)
- slop (~> 3.4)
- pry-nav (0.2.3)
- pry (~> 0.9.10)
- rack (1.5.2)
- rack-protection (1.5.1)
- rack
- rack-test (0.6.2)
- rack (>= 1.0)
- rb-fsevent (0.9.4)
- rb-inotify (0.9.3)
- ffi (>= 0.5.0)
- rb-kqueue (0.2.0)
- ffi (>= 0.5.0)
- sass (3.3.0.rc.1)
- listen (~> 1.1.0)
- scss-lint (0.15.0)
- colorize (= 0.5.8)
- sass (= 3.3.0.rc.1)
- sinatra (1.4.4)
- rack (~> 1.4)
- rack-protection (~> 1.4)
- tilt (~> 1.3, >= 1.3.4)
- sinatra-contrib (1.4.2)
- backports (>= 2.0)
- multi_json
- rack-protection
- rack-test
- sinatra (~> 1.4.0)
- tilt (~> 1.3)
- slop (3.4.7)
- thin (1.6.1)
- daemons (>= 1.0.9)
- eventmachine (>= 1.0.0)
- rack (>= 1.0.0)
- tilt (1.4.1)
-
-PLATFORMS
- ruby
-
-DEPENDENCIES
- kss (~> 0.5.0)
- pry
- pry-nav
- scss-lint (= 0.15.0)
- sinatra (~> 1.4.3)
- sinatra-contrib (~> 1.4.1)
- thin (~> 1.6.0)
diff --git a/Gruntfile.js b/Gruntfile.js
deleted file mode 100644
index 701483b4..00000000
--- a/Gruntfile.js
+++ /dev/null
@@ -1,17 +0,0 @@
-/* jshint node:true */
-"use strict";
-
-module.exports = function(grunt) {
- // Load tasks from `/tasks`
- grunt.loadTasks('tasks');
-
- // Load plugin configuration from `tasks/options`.
- require('load-grunt-config')(grunt, {
- configPath: require('path').join(process.cwd(), 'tasks/options'),
- init: true,
- config: {
- pkg: grunt.file.readJSON("package.json")
- }
- });
-};
-
diff --git a/Procfile b/Procfile
deleted file mode 100644
index 3e0040e1..00000000
--- a/Procfile
+++ /dev/null
@@ -1 +0,0 @@
-web: bundle exec thin -R config.ru start -p $PORT -e $RACK_ENV
diff --git a/amd.js b/amd.js
deleted file mode 100644
index 5a4f0002..00000000
--- a/amd.js
+++ /dev/null
@@ -1,5 +0,0 @@
-// Export Neue as an AMD module
-
-if ( typeof define === "function" && define.amd ) {
- define( ["jquery"], function ($) { return NEUE; } );
-}
diff --git a/app.rb b/app.rb
deleted file mode 100644
index 26925467..00000000
--- a/app.rb
+++ /dev/null
@@ -1,66 +0,0 @@
-require 'sinatra'
-require 'sinatra/content_for'
-require 'kss'
-
-set :public_folder, Proc.new { File.join(root, "dist") }
-
-get '/' do
- @styleguide = Kss::Parser.new('scss/')
- erb :styleguide
-end
-
-get '/example/*.html' do
- send_file "views/examples/#{params[:splat].first}.html"
-end
-
-get '/example/*' do
- render_layout
-end
-
-helpers do
- # Layout Handling (parse path and serve proper layout)
- def render_layout
- splat = params[:splat][0]
- render :erb, :"examples/#{splat}", layout: :drupal_layout
- end
-
- # Generates a styleguide block. A little bit evil with @_out_buf, but
- # if you're using something like Rails, you can write a much cleaner helper
- # very easily.
- def styleguide_block(section, &block)
- @section = @styleguide.section(section)
- @example_html = capture{ block.call }
- @escaped_html = ERB::Util.html_escape @example_html
- @_out_buf << erb(:_styleguide_block)
- end
-
- def styleguide_block_without_preview(section, &block)
- @section = @styleguide.section(section)
- @example_html = capture{ block.call }
- @escaped_html = ERB::Util.html_escape @example_html
- @_out_buf << erb(:_styleguide_block_without_preview)
- end
-
- def styleguide_block_without_modifiers(section, &block)
- @section = @styleguide.section(section)
- @example_html = capture{ block.call }
- @escaped_html = ERB::Util.html_escape @example_html
- @_out_buf << erb(:_styleguide_block_without_modifiers)
- end
-
- def styleguide_block_custom_example(section)
- @section = @styleguide.section(section)
- @_out_buf << erb(:_styleguide_block_custom_example)
- end
-
- # Captures the result of a block within an erb template without spitting it
- # to the output buffer.
- def capture(&block)
- out, @_out_buf = @_out_buf, ""
- yield
- @_out_buf
- ensure
- @_out_buf = out
- end
-end
-
diff --git a/assets/fonts/covered-grace/CoveredGrace-Regular.eot b/assets/fonts/covered-grace/CoveredGrace-Regular.eot
old mode 100755
new mode 100644
diff --git a/assets/fonts/covered-grace/CoveredGrace-Regular.svg b/assets/fonts/covered-grace/CoveredGrace-Regular.svg
old mode 100755
new mode 100644
diff --git a/assets/fonts/covered-grace/CoveredGrace-Regular.ttf b/assets/fonts/covered-grace/CoveredGrace-Regular.ttf
old mode 100755
new mode 100644
diff --git a/assets/fonts/covered-grace/CoveredGrace-Regular.woff b/assets/fonts/covered-grace/CoveredGrace-Regular.woff
old mode 100755
new mode 100644
diff --git a/assets/fonts/icomoon/icomoon.eot b/assets/fonts/icomoon/icomoon.eot
old mode 100755
new mode 100644
diff --git a/assets/fonts/icomoon/icomoon.svg b/assets/fonts/icomoon/icomoon.svg
old mode 100755
new mode 100644
diff --git a/assets/fonts/icomoon/icomoon.ttf b/assets/fonts/icomoon/icomoon.ttf
old mode 100755
new mode 100644
diff --git a/assets/fonts/icomoon/icomoon.woff b/assets/fonts/icomoon/icomoon.woff
old mode 100755
new mode 100644
diff --git a/config.ru b/config.ru
deleted file mode 100644
index 785bf5cf..00000000
--- a/config.ru
+++ /dev/null
@@ -1,2 +0,0 @@
-require './app'
-run Sinatra::Application
\ No newline at end of file
diff --git a/ie.css b/ie.css
new file mode 100644
index 00000000..c43db441
--- /dev/null
+++ b/ie.css
@@ -0,0 +1 @@
+form.search input[type=search]{color:#444;padding-top:8px;padding-bottom:6px;background:#999 url(images/search.png) no-repeat 12px 6px}form.search input[type=search]:hover{background-position:12px -21px}form.search input[type=search]:focus{background-position:12px 6px}.timeline li:before{display:none}
\ No newline at end of file
diff --git a/neue.css b/neue.css
new file mode 100644
index 00000000..63fd4a34
--- /dev/null
+++ b/neue.css
@@ -0,0 +1 @@
+@font-face{font-family:"Proxima Nova";font-weight:400;src:url(assets/fonts/proxima-nova/ProximaNova-Regular.eot);src:url(assets/fonts/proxima-nova/ProximaNova-Regular.eot?) format("eot"),url(assets/fonts/proxima-nova/ProximaNova-Regular.woff) format("woff")}@font-face{font-family:"Proxima Nova";font-weight:600;src:url(assets/fonts/proxima-nova/ProximaNova-SBold.eot);src:url(assets/fonts/proxima-nova/ProximaNova-SBold.eot?) format("eot"),url(assets/fonts/proxima-nova/ProximaNova-SBold.woff) format("woff")}@font-face{font-family:"Proxima Nova";font-weight:700;src:url(assets/fonts/proxima-nova/ProximaNova-Bold.eot);src:url(assets/fonts/proxima-nova/ProximaNova-Bold.eot?) format("eot"),url(assets/fonts/proxima-nova/ProximaNova-Bold.woff) format("woff")}@font-face{font-family:CoveredGrace;src:url(assets/fonts/covered-grace/CoveredGrace-Regular.eot);src:url(assets/fonts/covered-grace/CoveredGrace-Regular.eot?#iefix) format('embedded-opentype'),url(assets/fonts/covered-grace/CoveredGrace-Regular.woff) format('woff'),url(assets/fonts/covered-grace/CoveredGrace-Regular.ttf) format('truetype');font-style:normal;font-weight:400}@font-face{font-family:icomoon;src:url(assets/fonts/icomoon/icomoon.eot?1);src:url(assets/fonts/icomoon/icomoon.eot?1#iefix) format("embedded-opentype"),url(assets/fonts/icomoon/icomoon.ttf?1) format("truetype"),url(assets/fonts/icomoon/icomoon.woff?1) format("woff"),url(assets/fonts/icomoon/icomoon.svg?1#icomoon) format("svg");font-weight:400;font-style:normal}.icon-pencil:before{font-family:icomoon;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\e600"}.icon-lock:before{font-family:icomoon;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\e601"}.icon-search:before{font-family:icomoon;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\e602"}a,abbr,acronym,address,applet,article,aside,audio,b,big,blockquote,body,canvas,caption,center,cite,code,dd,del,details,dfn,div,dl,dt,em,embed,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,html,i,iframe,img,ins,kbd,label,legend,li,mark,menu,nav,object,ol,output,p,pre,q,ruby,s,samp,section,small,span,strike,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,tt,u,ul,var,video{margin:0;padding:0;border:0;font:inherit;vertical-align:baseline}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}ol,ul{list-style:none}blockquote,q{quotes:none}blockquote:after,blockquote:before,q:after,q:before{content:'';content:none}table{border-collapse:collapse;border-spacing:0}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{height:100%;font-size:18px;background:#ddd}body{width:100%;max-width:1440px;background:#fff;color:#444;font-family:"Proxima Nova","Helvetica Neue",Helvetica,Arial,sans-serif;font-size:1rem;font-weight:400;line-height:1.5;margin:0 auto;box-shadow:0 0 10px rgba(0,0,0,.5)}h1,h2,h3,h4{clear:both;font-weight:700;margin:1.5rem 0}h1.banner,h2.banner,h3.banner,h4.banner{background:#000;color:#fff;line-height:1.5;text-transform:uppercase;padding:.75rem 1.25rem}h1,h2{color:#4e2b63}h3,h4{color:#444}h1{font-size:3rem}h1.hero{font-size:4rem}h2{font-size:1.75rem}h3{font-size:1.25rem;font-weight:600}h4{color:#444;font-size:1rem;font-weight:600;margin:1.5rem 0 .5rem}ul{list-style-type:disc;padding-left:2em}ol{list-style-type:decimal;padding-left:2em}p{font-size:1rem;color:#444;margin:0 0 1.5rem}small{font-size:.75rem;margin:0 0 1.5rem}a{color:#23b7fb;font-weight:600;text-decoration:none}a:hover{color:#55cafc;text-decoration:underline}a:active{color:#04a3e7}a.secondary{color:#999;font-weight:400;text-decoration:underline}b,strong{font-weight:600}em{font-style:italic}mark{background:#fdfbbd}code{font-family:Menlo,Consolas,"Courier New",serif;font-weight:700;font-size:.8em}sup{display:inline-block;position:relative;top:-.4rem;font-size:.6em;padding:0}.chrome--nav{display:block;width:100%;margin-bottom:2rem;overflow:hidden}@media screen and (max-width:768px){body .chrome--nav.is-visible{display:block;position:fixed;top:0;width:100%;height:100%;background:#222;z-index:9997}body .chrome--nav.is-visible .menu{clear:both;display:block;position:static;width:auto;height:auto;background:0 0;margin-top:4rem}@media screen and (min-device-height:960px){body .chrome--nav.is-visible .menu{margin-top:5rem}}body .chrome--nav.is-visible .hamburger{color:#fff}}@media screen and (min-width:768px){.chrome--nav{padding:1rem 0}}.chrome--nav .logo{float:left;padding:.5rem}@media screen and (min-width:768px){.chrome--nav .logo{position:static;min-width:96px;padding:0 1rem;text-align:center;float:left;display:block;margin-right:2.22222%;width:10.55556%}.chrome--nav .logo:last-child{margin-right:0}}.chrome--nav .logo img{width:80px;height:70px}.chrome--nav .hamburger{float:right;color:#222;font-size:32px;text-decoration:none;margin:.5rem;padding:1rem .5rem;font-family:icomoon;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@media screen and (min-width:768px){.chrome--nav .hamburger{display:none}}.chrome--nav .menu{display:none}@media screen and (min-width:768px){.chrome--nav .menu{display:block}}.chrome--nav .primary-nav{list-style-type:none;padding:0}.chrome--nav .primary-nav li{line-height:1.4;font-size:1rem;text-align:center;padding:1rem 0}@media screen and (min-device-height:960px){.chrome--nav .primary-nav li{padding:.75rem 0}}@media screen and (min-width:768px){.chrome--nav .primary-nav li{float:left;display:block;text-align:left;margin:0 3.5% 0 0;padding:1.25rem 0;border-bottom:0}}@media screen and (min-width:1080px){.chrome--nav .primary-nav li{padding:.75rem 0;margin:0 5% 0 0}}.chrome--nav .primary-nav a{display:block;color:#fff;text-decoration:none}@media screen and (min-width:768px){.chrome--nav .primary-nav a{color:#222}}.chrome--nav .primary-nav strong{display:block;font-size:1rem}@media screen and (min-width:768px){.chrome--nav .primary-nav strong>span{display:none}}@media screen and (min-width:1080px){.chrome--nav .primary-nav strong>span{display:inline;font-size:1rem}}.chrome--nav .primary-nav span{font-size:.6rem}@media screen and (min-width:768px){.chrome--nav .primary-nav span{display:none}}@media screen and (min-width:1080px){.chrome--nav .primary-nav span{display:block}}.chrome--nav .secondary-nav{position:fixed;bottom:0;width:100%;margin-right:1rem}@media screen and (min-width:768px){.chrome--nav .secondary-nav{position:static;float:right;width:auto}}.chrome--nav .secondary-nav ul{display:block;list-style-type:none;overflow:hidden;padding:0}.chrome--nav .secondary-nav li{line-height:1.4;font-size:1rem;text-align:center;padding:1.5rem 0;box-sizing:border-box}@media screen and (min-width:768px){.chrome--nav .secondary-nav li{float:left;display:block;text-align:left;padding:.75rem 0;border-bottom:0}}@media screen and (min-width:1080px){.chrome--nav .secondary-nav li{padding:.75rem 0}}.chrome--nav .secondary-nav .searchfield{padding-right:.5rem}.chrome--nav .secondary-nav input[type=search]{margin:.2rem 0;padding-top:.3rem;padding-bottom:.3rem;background-image:url(assets/images/search_dark.png);-webkit-transition:width .5s;-moz-transition:width .5s;transition:width .5s}@media only screen and (-webkit-min-device-pixel-ratio:1.3),only screen and (min--moz-device-pixel-ratio:1.3),only screen and (-o-min-device-pixel-ratio:1.3/1),only screen and (min-resolution:125dpi),only screen and (min-resolution:1.3dppx){.chrome--nav .secondary-nav input[type=search]{background-image:url(/assets/images/search_dark@2x.png)}}@media screen and (min-width:768px){.chrome--nav .secondary-nav input[type=search]{width:110px;border:1px solid #222;background-color:transparent}}@media screen and (min-width:1080px){.chrome--nav .secondary-nav input[type=search]{width:200px}}.chrome--nav .secondary-nav a{display:block;color:#fff;font-weight:700;text-decoration:none;padding:.5rem .75rem}@media screen and (min-width:768px){.chrome--nav .secondary-nav a{color:#222}}@media screen and (min-width:768px){.chrome--nav .secondary-nav .account>a{position:relative}.chrome--nav .secondary-nav .account>a:after{background-color:#fff;content:'';height:1rem;margin-top:-.5rem;position:absolute;right:0;top:50%;width:1px}}.chrome--wrapper{position:relative;display:block;width:100%}.chrome--footer{display:block;width:100%;background:#000;margin:0 auto}@media screen and (min-width:768px){.chrome--footer{padding:1rem}}.chrome--footer h4{position:relative;color:#fff;padding:0 1rem;margin:0;cursor:pointer}.chrome--footer h4:after{font-family:icomoon;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\e609";color:#999;font-size:32px;position:absolute;right:.25rem;top:-.2rem;-webkit-transform:rotate(0);-moz-transform:rotate(0);-ms-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0);-webkit-transition-property:-webkit-transform;-moz-transition-property:-moz-transform;transition-property:transform;-webkit-transition-duration:.25s;-moz-transition-duration:.25s;transition-duration:.25s}@media screen and (min-width:768px){.chrome--footer h4{cursor:auto;margin:1rem 0 .5rem;padding:0}.chrome--footer h4:after{content:""}}.chrome--footer ul{height:auto;list-style-type:none;padding:.25rem;-webkit-transition:height .25s,padding .5s;-moz-transition:height .25s,padding .5s;transition:height .25s,padding .5s}@media screen and (min-width:768px){.chrome--footer ul{padding:0}}.chrome--footer li{line-height:1rem;margin-bottom:.25rem}.chrome--footer a{display:block;color:#ddd;font-family:"Proxima Nova","Helvetica Neue",Helvetica,Arial,sans-serif;font-size:.9rem;text-decoration:none;padding:.25rem .75rem}.chrome--footer a:hover{color:#fff;text-decoration:underline}@media screen and (min-width:768px){.chrome--footer a{padding:0}}.col{padding:.5rem 0}@media screen and (min-width:768px){.col{float:left;display:block;margin-right:2.22222%;width:16.94444%;margin-bottom:2rem}.col:last-child{margin-right:0}}.col.is-collapsed h4:after{-webkit-transform:rotate(-90deg);-moz-transform:rotate(-90deg);-ms-transform:rotate(-90deg);-o-transform:rotate(-90deg);transform:rotate(-90deg)}.col.is-collapsed ul{overflow:hidden;padding:0 .25rem;height:0}@media screen and (min-width:768px){.col.is-collapsed h4:after{content:""}.col.is-collapsed ul{height:auto;padding:0;-webkit-transition:none;-moz-transition:none;transition:none}}.about,.help,.knowus{border-top:1px solid #444}@media screen and (min-width:768px){.about,.help,.knowus{border-top:0;border-bottom:0}}.about{border-bottom:1px solid #444}@media screen and (min-width:768px){.about{border-bottom:0;margin-right:0}}.social{text-align:center}.social.mobile{padding:.5rem 0}@media screen and (min-width:768px){.social.mobile{display:none}}.social.tablet{display:none}@media screen and (min-width:768px){.social.tablet{display:block}}@media screen and (min-width:768px){.social{border-top:0;margin-top:1.65rem;text-align:left;float:left;display:block;margin-right:2.22222%;width:42.5%}.social:last-child{margin-right:0}}.social li{display:inline-block;margin-right:0}@media screen and (min-width:768px){.social li{margin-right:16px}}.social .social-link{font-family:icomoon;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:24px;color:#999;text-decoration:none}.social .social-link:hover{color:#ddd;text-decoration:none}.subfooter{clear:both;font-size:.75rem;border-top:1px solid #444;padding:.5rem 0;*zoom:1;display:block}.subfooter:after,.subfooter:before{content:" ";display:table}.subfooter:after{clear:both}.subfooter a{display:inline;color:#999;font-size:1em}.subfooter .utility{text-align:center;list-style-type:none}@media screen and (min-width:768px){.subfooter .utility{float:right;text-align:left;margin-right:.75rem}}.subfooter .utility li{display:inline}.subfooter .utility a{margin:0 .5rem}@media screen and (min-width:768px){.subfooter .utility a{margin:0 1rem 0 0}}.page{margin-bottom:3rem}@media screen and (min-width:768px){.page{float:left;display:block;margin-right:2.22222%;width:74.44444%;margin-left:12.77778%}.page:last-child{margin-right:0}}.sidebar{margin-top:4rem;margin-bottom:3rem}@media screen and (min-width:768px){.sidebar{float:left;display:block;width:16.94444%;margin-right:0}.sidebar:last-child{margin-right:0}.sidebar nav.is-stuck{position:fixed;top:0}}.sidebar-content{margin-top:0;margin-bottom:3rem}@media screen and (min-width:768px){.sidebar-content{margin-left:12.77778%;float:left;display:block;margin-right:2.22222%;width:61.66667%}.sidebar-content:last-child{margin-right:0}}.fade-in,.fade-in-up,.fade-out,.fade-out-down,.rotation,.shake,.tada,.wobble{-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:.5s;-moz-animation-duration:.5s;animation-duration:.5s}.fade-in{-webkit-animation-name:fadeIn;-moz-animation-name:fadeIn;animation-name:fadeIn}@-webkit-keyframes fadeIn{0%{opacity:0}100%{opacity:1}}@-moz-keyframes fadeIn{0%{opacity:0}100%{opacity:1}}@-o-keyframes fadeIn{0%{opacity:0}100%{opacity:1}}@keyframes fadeIn{0%{opacity:0}100%{opacity:1}}.fade-in-up{-webkit-animation-name:fadeInUp;-moz-animation-name:fadeInUp;animation-name:fadeInUp}@-webkit-keyframes fadeInUp{0%{opacity:0;-webkit-transform:translateY(20px)}100%{opacity:1;-webkit-transform:translateY(0)}}@-moz-keyframes fadeInUp{0%{opacity:0;-moz-transform:translateY(20px)}100%{opacity:1;-moz-transform:translateY(0)}}@-o-keyframes fadeInUp{0%{opacity:0;-o-transform:translateY(20px)}100%{opacity:1;-o-transform:translateY(0)}}@keyframes fadeInUp{0%{opacity:0;transform:translateY(20px)}100%{opacity:1;transform:translateY(0)}}.fade-out{-webkit-animation-name:fadeOut;-moz-animation-name:fadeOut;animation-name:fadeOut}@-webkit-keyframes fadeOut{0%{opacity:1}100%{opacity:0}}@-moz-keyframes fadeOut{0%{opacity:1}100%{opacity:0}}@-o-keyframes fadeOut{0%{opacity:1}100%{opacity:0}}@keyframes fadeOut{0%{opacity:1}100%{opacity:0}}.fade-out-down{-webkit-animation-name:fadeOutDown;-moz-animation-name:fadeOutDown;animation-name:fadeOutDown}@-webkit-keyframes fadeOutDown{0%{opacity:1;-webkit-transform:translateY(0)}100%{opacity:0;-webkit-transform:translateY(20px)}}@-moz-keyframes fadeOutDown{0%{opacity:1;-moz-transform:translateY(0)}100%{opacity:0;-moz-transform:translateY(20px)}}@-o-keyframes fadeOutDown{0%{opacity:1;-o-transform:translateY(0)}100%{opacity:0;-o-transform:translateY(20px)}}@keyframes fadeOutDown{0%{opacity:1;transform:translateY(0)}100%{opacity:0;transform:translateY(20px)}}.tada{-webkit-animation-name:tada;-moz-animation-name:tada;animation-name:tada}@-webkit-keyframes tada{0%{transform:scale(1)}10%,20%{transform:scale(0.9) rotate(-3deg)}30%,50%,70%,90%{transform:scale(1.1) rotate(3deg)}40%,60%,80%{transform:scale(1.1) rotate(-3deg)}100%{transform:scale(1) rotate(0)}}@-moz-keyframes tada{0%{transform:scale(1)}10%,20%{transform:scale(0.9) rotate(-3deg)}30%,50%,70%,90%{transform:scale(1.1) rotate(3deg)}40%,60%,80%{transform:scale(1.1) rotate(-3deg)}100%{transform:scale(1) rotate(0)}}@-o-keyframes tada{0%{transform:scale(1)}10%,20%{transform:scale(0.9) rotate(-3deg)}30%,50%,70%,90%{transform:scale(1.1) rotate(3deg)}40%,60%,80%{transform:scale(1.1) rotate(-3deg)}100%{transform:scale(1) rotate(0)}}@keyframes tada{0%{transform:scale(1)}10%,20%{transform:scale(0.9) rotate(-3deg)}30%,50%,70%,90%{transform:scale(1.1) rotate(3deg)}40%,60%,80%{transform:scale(1.1) rotate(-3deg)}100%{transform:scale(1) rotate(0)}}.wobble{-webkit-animation-duration:1s;-moz-animation-duration:1s;animation-duration:1s;-webkit-animation-name:wobble;-moz-animation-name:wobble;animation-name:wobble}@-webkit-keyframes wobble{0%{-webkit-transform:translateX(0)}15%{-webkit-transform:translateX(-25%) rotate(-5deg)}30%{-webkit-transform:translateX(20%) rotate(3deg)}45%{-webkit-transform:translateX(-15%) rotate(-3deg)}60%{-webkit-transform:translateX(10%) rotate(2deg)}75%{-webkit-transform:translateX(-5%) rotate(-1deg)}100%{-webkit-transform:translateX(0)}}@-moz-keyframes wobble{0%{-moz-transform:translateX(0)}15%{-moz-transform:translateX(-25%) rotate(-5deg)}30%{-moz-transform:translateX(20%) rotate(3deg)}45%{-moz-transform:translateX(-15%) rotate(-3deg)}60%{-moz-transform:translateX(10%) rotate(2deg)}75%{-moz-transform:translateX(-5%) rotate(-1deg)}100%{-moz-transform:translateX(0)}}@-o-keyframes wobble{0%{-o-transform:translateX(0)}15%{-o-transform:translateX(-25%) rotate(-5deg)}30%{-o-transform:translateX(20%) rotate(3deg)}45%{-o-transform:translateX(-15%) rotate(-3deg)}60%{-o-transform:translateX(10%) rotate(2deg)}75%{-o-transform:translateX(-5%) rotate(-1deg)}100%{-o-transform:translateX(0)}}@keyframes wobble{0%{transform:translateX(0)}15%{transform:translateX(-25%) rotate(-5deg)}30%{transform:translateX(20%) rotate(3deg)}45%{transform:translateX(-15%) rotate(-3deg)}60%{transform:translateX(10%) rotate(2deg)}75%{transform:translateX(-5%) rotate(-1deg)}100%{transform:translateX(0)}}@-webkit-keyframes shake{0%,100%{-webkit-transform:translateX(0)}10%,30%,50%,70%,90%{-webkit-transform:translateX(-10px)}20%,40%,60%,80%{-webkit-transform:translateX(10px)}}@-moz-keyframes shake{0%,100%{-moz-transform:translateX(0)}10%,30%,50%,70%,90%{-moz-transform:translateX(-10px)}20%,40%,60%,80%{-moz-transform:translateX(10px)}}@-o-keyframes shake{0%,100%{-o-transform:translateX(0)}10%,30%,50%,70%,90%{-o-transform:translateX(-10px)}20%,40%,60%,80%{-o-transform:translateX(10px)}}@keyframes shake{0%,100%{transform:translateX(0)}10%,30%,50%,70%,90%{transform:translateX(-10px)}20%,40%,60%,80%{transform:translateX(10px)}}.shake{-webkit-animation-duration:1s;-moz-animation-duration:1s;animation-duration:1s;-webkit-animation-name:shake;-moz-animation-name:shake;animation-name:shake}@-webkit-keyframes rotation{from{-webkit-transform:rotate(0)}to{-webkit-transform:rotate(359deg)}}@-moz-keyframes rotation{from{-moz-transform:rotate(0)}to{-moz-transform:rotate(359deg)}}@-o-keyframes rotation{from{-o-transform:rotate(0)}to{-o-transform:rotate(359deg)}}@keyframes rotation{from{transform:rotate(0)}to{transform:rotate(359deg)}}.rotation{-webkit-animation-duration:1s;-moz-animation-duration:1s;animation-duration:1s;-webkit-animation-name:rotation;-moz-animation-name:rotation;animation-name:rotation}body.show-visual-grid:before{content:'';display:inline-block;background-image:deprecated-webkit-gradient(linear,left top,left bottom,rgba(0,0,0,0) 0,#fcc 0,#fcc 8.52273%,rgba(0,0,0,0) 8.52273%,rgba(0,0,0,0) 13.06818%,#fcc 13.06818%,#fcc 21.59091%,rgba(0,0,0,0) 21.59091%,rgba(0,0,0,0) 26.13636%,#fcc 26.13636%,#fcc 34.65909%,rgba(0,0,0,0) 34.65909%,rgba(0,0,0,0) 39.20455%,#fcc 39.20455%,#fcc 47.72727%,rgba(0,0,0,0) 47.72727%,rgba(0,0,0,0) 52.27273%,#fcc 52.27273%,#fcc 60.79545%,rgba(0,0,0,0) 60.79545%,rgba(0,0,0,0) 65.34091%,#fcc 65.34091%,#fcc 73.86364%,rgba(0,0,0,0) 73.86364%,rgba(0,0,0,0) 78.40909%,#fcc 78.40909%,#fcc 86.93182%,rgba(0,0,0,0) 86.93182%,rgba(0,0,0,0) 91.47727%,#fcc 91.47727%,#fcc 100%,rgba(0,0,0,0) 100%);background-image:-webkit-linear-gradient(left,rgba(0,0,0,0) 0,#fcc 0,#fcc 8.52273%,rgba(0,0,0,0) 8.52273%,rgba(0,0,0,0) 13.06818%,#fcc 13.06818%,#fcc 21.59091%,rgba(0,0,0,0) 21.59091%,rgba(0,0,0,0) 26.13636%,#fcc 26.13636%,#fcc 34.65909%,rgba(0,0,0,0) 34.65909%,rgba(0,0,0,0) 39.20455%,#fcc 39.20455%,#fcc 47.72727%,rgba(0,0,0,0) 47.72727%,rgba(0,0,0,0) 52.27273%,#fcc 52.27273%,#fcc 60.79545%,rgba(0,0,0,0) 60.79545%,rgba(0,0,0,0) 65.34091%,#fcc 65.34091%,#fcc 73.86364%,rgba(0,0,0,0) 73.86364%,rgba(0,0,0,0) 78.40909%,#fcc 78.40909%,#fcc 86.93182%,rgba(0,0,0,0) 86.93182%,rgba(0,0,0,0) 91.47727%,#fcc 91.47727%,#fcc 100%,rgba(0,0,0,0) 100%);background-image:-moz-linear-gradient(left,rgba(0,0,0,0) 0,#fcc 0,#fcc 8.52273%,rgba(0,0,0,0) 8.52273%,rgba(0,0,0,0) 13.06818%,#fcc 13.06818%,#fcc 21.59091%,rgba(0,0,0,0) 21.59091%,rgba(0,0,0,0) 26.13636%,#fcc 26.13636%,#fcc 34.65909%,rgba(0,0,0,0) 34.65909%,rgba(0,0,0,0) 39.20455%,#fcc 39.20455%,#fcc 47.72727%,rgba(0,0,0,0) 47.72727%,rgba(0,0,0,0) 52.27273%,#fcc 52.27273%,#fcc 60.79545%,rgba(0,0,0,0) 60.79545%,rgba(0,0,0,0) 65.34091%,#fcc 65.34091%,#fcc 73.86364%,rgba(0,0,0,0) 73.86364%,rgba(0,0,0,0) 78.40909%,#fcc 78.40909%,#fcc 86.93182%,rgba(0,0,0,0) 86.93182%,rgba(0,0,0,0) 91.47727%,#fcc 91.47727%,#fcc 100%,rgba(0,0,0,0) 100%);background-image:-ms-linear-gradient(left,rgba(0,0,0,0) 0,#fcc 0,#fcc 8.52273%,rgba(0,0,0,0) 8.52273%,rgba(0,0,0,0) 13.06818%,#fcc 13.06818%,#fcc 21.59091%,rgba(0,0,0,0) 21.59091%,rgba(0,0,0,0) 26.13636%,#fcc 26.13636%,#fcc 34.65909%,rgba(0,0,0,0) 34.65909%,rgba(0,0,0,0) 39.20455%,#fcc 39.20455%,#fcc 47.72727%,rgba(0,0,0,0) 47.72727%,rgba(0,0,0,0) 52.27273%,#fcc 52.27273%,#fcc 60.79545%,rgba(0,0,0,0) 60.79545%,rgba(0,0,0,0) 65.34091%,#fcc 65.34091%,#fcc 73.86364%,rgba(0,0,0,0) 73.86364%,rgba(0,0,0,0) 78.40909%,#fcc 78.40909%,#fcc 86.93182%,rgba(0,0,0,0) 86.93182%,rgba(0,0,0,0) 91.47727%,#fcc 91.47727%,#fcc 100%,rgba(0,0,0,0) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,0) 0,#fcc 0,#fcc 8.52273%,rgba(0,0,0,0) 8.52273%,rgba(0,0,0,0) 13.06818%,#fcc 13.06818%,#fcc 21.59091%,rgba(0,0,0,0) 21.59091%,rgba(0,0,0,0) 26.13636%,#fcc 26.13636%,#fcc 34.65909%,rgba(0,0,0,0) 34.65909%,rgba(0,0,0,0) 39.20455%,#fcc 39.20455%,#fcc 47.72727%,rgba(0,0,0,0) 47.72727%,rgba(0,0,0,0) 52.27273%,#fcc 52.27273%,#fcc 60.79545%,rgba(0,0,0,0) 60.79545%,rgba(0,0,0,0) 65.34091%,#fcc 65.34091%,#fcc 73.86364%,rgba(0,0,0,0) 73.86364%,rgba(0,0,0,0) 78.40909%,#fcc 78.40909%,#fcc 86.93182%,rgba(0,0,0,0) 86.93182%,rgba(0,0,0,0) 91.47727%,#fcc 91.47727%,#fcc 100%,rgba(0,0,0,0) 100%);background-image:linear-gradient(left,rgba(0,0,0,0) 0,#fcc 0,#fcc 8.52273%,rgba(0,0,0,0) 8.52273%,rgba(0,0,0,0) 13.06818%,#fcc 13.06818%,#fcc 21.59091%,rgba(0,0,0,0) 21.59091%,rgba(0,0,0,0) 26.13636%,#fcc 26.13636%,#fcc 34.65909%,rgba(0,0,0,0) 34.65909%,rgba(0,0,0,0) 39.20455%,#fcc 39.20455%,#fcc 47.72727%,rgba(0,0,0,0) 47.72727%,rgba(0,0,0,0) 52.27273%,#fcc 52.27273%,#fcc 60.79545%,rgba(0,0,0,0) 60.79545%,rgba(0,0,0,0) 65.34091%,#fcc 65.34091%,#fcc 73.86364%,rgba(0,0,0,0) 73.86364%,rgba(0,0,0,0) 78.40909%,#fcc 78.40909%,#fcc 86.93182%,rgba(0,0,0,0) 86.93182%,rgba(0,0,0,0) 91.47727%,#fcc 91.47727%,#fcc 100%,rgba(0,0,0,0) 100%);height:100%;left:0;margin:0 auto;max-width:1440px;opacity:.4;position:fixed;right:0;width:100%;pointer-events:none;z-index:9999}@media screen and (max-width:768px){body.show-visual-grid:before{background-image:deprecated-webkit-gradient(linear,left top,left bottom,rgba(0,0,0,0) 0,#fcc 0,#fcc 8.52273%,rgba(0,0,0,0) 8.52273%,rgba(0,0,0,0) 13.06818%,#fcc 13.06818%,#fcc 21.59091%,rgba(0,0,0,0) 21.59091%,rgba(0,0,0,0) 26.13636%,#fcc 26.13636%,#fcc 34.65909%,rgba(0,0,0,0) 34.65909%,rgba(0,0,0,0) 39.20455%,#fcc 39.20455%,#fcc 47.72727%,rgba(0,0,0,0) 47.72727%,rgba(0,0,0,0) 52.27273%,#fcc 52.27273%,#fcc 60.79545%,rgba(0,0,0,0) 60.79545%,rgba(0,0,0,0) 65.34091%,#fcc 65.34091%,#fcc 73.86364%,rgba(0,0,0,0) 73.86364%,rgba(0,0,0,0) 78.40909%,#fcc 78.40909%,#fcc 86.93182%,rgba(0,0,0,0) 86.93182%,rgba(0,0,0,0) 91.47727%,#fcc 91.47727%,#fcc 100%,rgba(0,0,0,0) 100%);background-image:-webkit-linear-gradient(left,rgba(0,0,0,0) 0,#fcc 0,#fcc 8.52273%,rgba(0,0,0,0) 8.52273%,rgba(0,0,0,0) 13.06818%,#fcc 13.06818%,#fcc 21.59091%,rgba(0,0,0,0) 21.59091%,rgba(0,0,0,0) 26.13636%,#fcc 26.13636%,#fcc 34.65909%,rgba(0,0,0,0) 34.65909%,rgba(0,0,0,0) 39.20455%,#fcc 39.20455%,#fcc 47.72727%,rgba(0,0,0,0) 47.72727%,rgba(0,0,0,0) 52.27273%,#fcc 52.27273%,#fcc 60.79545%,rgba(0,0,0,0) 60.79545%,rgba(0,0,0,0) 65.34091%,#fcc 65.34091%,#fcc 73.86364%,rgba(0,0,0,0) 73.86364%,rgba(0,0,0,0) 78.40909%,#fcc 78.40909%,#fcc 86.93182%,rgba(0,0,0,0) 86.93182%,rgba(0,0,0,0) 91.47727%,#fcc 91.47727%,#fcc 100%,rgba(0,0,0,0) 100%);background-image:-moz-linear-gradient(left,rgba(0,0,0,0) 0,#fcc 0,#fcc 8.52273%,rgba(0,0,0,0) 8.52273%,rgba(0,0,0,0) 13.06818%,#fcc 13.06818%,#fcc 21.59091%,rgba(0,0,0,0) 21.59091%,rgba(0,0,0,0) 26.13636%,#fcc 26.13636%,#fcc 34.65909%,rgba(0,0,0,0) 34.65909%,rgba(0,0,0,0) 39.20455%,#fcc 39.20455%,#fcc 47.72727%,rgba(0,0,0,0) 47.72727%,rgba(0,0,0,0) 52.27273%,#fcc 52.27273%,#fcc 60.79545%,rgba(0,0,0,0) 60.79545%,rgba(0,0,0,0) 65.34091%,#fcc 65.34091%,#fcc 73.86364%,rgba(0,0,0,0) 73.86364%,rgba(0,0,0,0) 78.40909%,#fcc 78.40909%,#fcc 86.93182%,rgba(0,0,0,0) 86.93182%,rgba(0,0,0,0) 91.47727%,#fcc 91.47727%,#fcc 100%,rgba(0,0,0,0) 100%);background-image:-ms-linear-gradient(left,rgba(0,0,0,0) 0,#fcc 0,#fcc 8.52273%,rgba(0,0,0,0) 8.52273%,rgba(0,0,0,0) 13.06818%,#fcc 13.06818%,#fcc 21.59091%,rgba(0,0,0,0) 21.59091%,rgba(0,0,0,0) 26.13636%,#fcc 26.13636%,#fcc 34.65909%,rgba(0,0,0,0) 34.65909%,rgba(0,0,0,0) 39.20455%,#fcc 39.20455%,#fcc 47.72727%,rgba(0,0,0,0) 47.72727%,rgba(0,0,0,0) 52.27273%,#fcc 52.27273%,#fcc 60.79545%,rgba(0,0,0,0) 60.79545%,rgba(0,0,0,0) 65.34091%,#fcc 65.34091%,#fcc 73.86364%,rgba(0,0,0,0) 73.86364%,rgba(0,0,0,0) 78.40909%,#fcc 78.40909%,#fcc 86.93182%,rgba(0,0,0,0) 86.93182%,rgba(0,0,0,0) 91.47727%,#fcc 91.47727%,#fcc 100%,rgba(0,0,0,0) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,0) 0,#fcc 0,#fcc 8.52273%,rgba(0,0,0,0) 8.52273%,rgba(0,0,0,0) 13.06818%,#fcc 13.06818%,#fcc 21.59091%,rgba(0,0,0,0) 21.59091%,rgba(0,0,0,0) 26.13636%,#fcc 26.13636%,#fcc 34.65909%,rgba(0,0,0,0) 34.65909%,rgba(0,0,0,0) 39.20455%,#fcc 39.20455%,#fcc 47.72727%,rgba(0,0,0,0) 47.72727%,rgba(0,0,0,0) 52.27273%,#fcc 52.27273%,#fcc 60.79545%,rgba(0,0,0,0) 60.79545%,rgba(0,0,0,0) 65.34091%,#fcc 65.34091%,#fcc 73.86364%,rgba(0,0,0,0) 73.86364%,rgba(0,0,0,0) 78.40909%,#fcc 78.40909%,#fcc 86.93182%,rgba(0,0,0,0) 86.93182%,rgba(0,0,0,0) 91.47727%,#fcc 91.47727%,#fcc 100%,rgba(0,0,0,0) 100%);background-image:linear-gradient(left,rgba(0,0,0,0) 0,#fcc 0,#fcc 8.52273%,rgba(0,0,0,0) 8.52273%,rgba(0,0,0,0) 13.06818%,#fcc 13.06818%,#fcc 21.59091%,rgba(0,0,0,0) 21.59091%,rgba(0,0,0,0) 26.13636%,#fcc 26.13636%,#fcc 34.65909%,rgba(0,0,0,0) 34.65909%,rgba(0,0,0,0) 39.20455%,#fcc 39.20455%,#fcc 47.72727%,rgba(0,0,0,0) 47.72727%,rgba(0,0,0,0) 52.27273%,#fcc 52.27273%,#fcc 60.79545%,rgba(0,0,0,0) 60.79545%,rgba(0,0,0,0) 65.34091%,#fcc 65.34091%,#fcc 73.86364%,rgba(0,0,0,0) 73.86364%,rgba(0,0,0,0) 78.40909%,#fcc 78.40909%,#fcc 86.93182%,rgba(0,0,0,0) 86.93182%,rgba(0,0,0,0) 91.47727%,#fcc 91.47727%,#fcc 100%,rgba(0,0,0,0) 100%)}}@media screen and (min-width:768px){body.show-visual-grid:before{background-image:deprecated-webkit-gradient(linear,left top,left bottom,rgba(0,0,0,0) 0,#fcc 0,#fcc 4.16667%,rgba(0,0,0,0) 4.16667%,rgba(0,0,0,0) 6.38889%,#fcc 6.38889%,#fcc 10.55556%,rgba(0,0,0,0) 10.55556%,rgba(0,0,0,0) 12.77778%,#fcc 12.77778%,#fcc 16.94444%,rgba(0,0,0,0) 16.94444%,rgba(0,0,0,0) 19.16667%,#fcc 19.16667%,#fcc 23.33333%,rgba(0,0,0,0) 23.33333%,rgba(0,0,0,0) 25.55556%,#fcc 25.55556%,#fcc 29.72222%,rgba(0,0,0,0) 29.72222%,rgba(0,0,0,0) 31.94444%,#fcc 31.94444%,#fcc 36.11111%,rgba(0,0,0,0) 36.11111%,rgba(0,0,0,0) 38.33333%,#fcc 38.33333%,#fcc 42.5%,rgba(0,0,0,0) 42.5%,rgba(0,0,0,0) 44.72222%,#fcc 44.72222%,#fcc 48.88889%,rgba(0,0,0,0) 48.88889%,rgba(0,0,0,0) 51.11111%,#fcc 51.11111%,#fcc 55.27778%,rgba(0,0,0,0) 55.27778%,rgba(0,0,0,0) 57.5%,#fcc 57.5%,#fcc 61.66667%,rgba(0,0,0,0) 61.66667%,rgba(0,0,0,0) 63.88889%,#fcc 63.88889%,#fcc 68.05556%,rgba(0,0,0,0) 68.05556%,rgba(0,0,0,0) 70.27778%,#fcc 70.27778%,#fcc 74.44444%,rgba(0,0,0,0) 74.44444%,rgba(0,0,0,0) 76.66667%,#fcc 76.66667%,#fcc 80.83333%,rgba(0,0,0,0) 80.83333%,rgba(0,0,0,0) 83.05556%,#fcc 83.05556%,#fcc 87.22222%,rgba(0,0,0,0) 87.22222%,rgba(0,0,0,0) 89.44444%,#fcc 89.44444%,#fcc 93.61111%,rgba(0,0,0,0) 93.61111%,rgba(0,0,0,0) 95.83333%,#fcc 95.83333%,#fcc 100%,rgba(0,0,0,0) 100%);background-image:-webkit-linear-gradient(left,rgba(0,0,0,0) 0,#fcc 0,#fcc 4.16667%,rgba(0,0,0,0) 4.16667%,rgba(0,0,0,0) 6.38889%,#fcc 6.38889%,#fcc 10.55556%,rgba(0,0,0,0) 10.55556%,rgba(0,0,0,0) 12.77778%,#fcc 12.77778%,#fcc 16.94444%,rgba(0,0,0,0) 16.94444%,rgba(0,0,0,0) 19.16667%,#fcc 19.16667%,#fcc 23.33333%,rgba(0,0,0,0) 23.33333%,rgba(0,0,0,0) 25.55556%,#fcc 25.55556%,#fcc 29.72222%,rgba(0,0,0,0) 29.72222%,rgba(0,0,0,0) 31.94444%,#fcc 31.94444%,#fcc 36.11111%,rgba(0,0,0,0) 36.11111%,rgba(0,0,0,0) 38.33333%,#fcc 38.33333%,#fcc 42.5%,rgba(0,0,0,0) 42.5%,rgba(0,0,0,0) 44.72222%,#fcc 44.72222%,#fcc 48.88889%,rgba(0,0,0,0) 48.88889%,rgba(0,0,0,0) 51.11111%,#fcc 51.11111%,#fcc 55.27778%,rgba(0,0,0,0) 55.27778%,rgba(0,0,0,0) 57.5%,#fcc 57.5%,#fcc 61.66667%,rgba(0,0,0,0) 61.66667%,rgba(0,0,0,0) 63.88889%,#fcc 63.88889%,#fcc 68.05556%,rgba(0,0,0,0) 68.05556%,rgba(0,0,0,0) 70.27778%,#fcc 70.27778%,#fcc 74.44444%,rgba(0,0,0,0) 74.44444%,rgba(0,0,0,0) 76.66667%,#fcc 76.66667%,#fcc 80.83333%,rgba(0,0,0,0) 80.83333%,rgba(0,0,0,0) 83.05556%,#fcc 83.05556%,#fcc 87.22222%,rgba(0,0,0,0) 87.22222%,rgba(0,0,0,0) 89.44444%,#fcc 89.44444%,#fcc 93.61111%,rgba(0,0,0,0) 93.61111%,rgba(0,0,0,0) 95.83333%,#fcc 95.83333%,#fcc 100%,rgba(0,0,0,0) 100%);background-image:-moz-linear-gradient(left,rgba(0,0,0,0) 0,#fcc 0,#fcc 4.16667%,rgba(0,0,0,0) 4.16667%,rgba(0,0,0,0) 6.38889%,#fcc 6.38889%,#fcc 10.55556%,rgba(0,0,0,0) 10.55556%,rgba(0,0,0,0) 12.77778%,#fcc 12.77778%,#fcc 16.94444%,rgba(0,0,0,0) 16.94444%,rgba(0,0,0,0) 19.16667%,#fcc 19.16667%,#fcc 23.33333%,rgba(0,0,0,0) 23.33333%,rgba(0,0,0,0) 25.55556%,#fcc 25.55556%,#fcc 29.72222%,rgba(0,0,0,0) 29.72222%,rgba(0,0,0,0) 31.94444%,#fcc 31.94444%,#fcc 36.11111%,rgba(0,0,0,0) 36.11111%,rgba(0,0,0,0) 38.33333%,#fcc 38.33333%,#fcc 42.5%,rgba(0,0,0,0) 42.5%,rgba(0,0,0,0) 44.72222%,#fcc 44.72222%,#fcc 48.88889%,rgba(0,0,0,0) 48.88889%,rgba(0,0,0,0) 51.11111%,#fcc 51.11111%,#fcc 55.27778%,rgba(0,0,0,0) 55.27778%,rgba(0,0,0,0) 57.5%,#fcc 57.5%,#fcc 61.66667%,rgba(0,0,0,0) 61.66667%,rgba(0,0,0,0) 63.88889%,#fcc 63.88889%,#fcc 68.05556%,rgba(0,0,0,0) 68.05556%,rgba(0,0,0,0) 70.27778%,#fcc 70.27778%,#fcc 74.44444%,rgba(0,0,0,0) 74.44444%,rgba(0,0,0,0) 76.66667%,#fcc 76.66667%,#fcc 80.83333%,rgba(0,0,0,0) 80.83333%,rgba(0,0,0,0) 83.05556%,#fcc 83.05556%,#fcc 87.22222%,rgba(0,0,0,0) 87.22222%,rgba(0,0,0,0) 89.44444%,#fcc 89.44444%,#fcc 93.61111%,rgba(0,0,0,0) 93.61111%,rgba(0,0,0,0) 95.83333%,#fcc 95.83333%,#fcc 100%,rgba(0,0,0,0) 100%);background-image:-ms-linear-gradient(left,rgba(0,0,0,0) 0,#fcc 0,#fcc 4.16667%,rgba(0,0,0,0) 4.16667%,rgba(0,0,0,0) 6.38889%,#fcc 6.38889%,#fcc 10.55556%,rgba(0,0,0,0) 10.55556%,rgba(0,0,0,0) 12.77778%,#fcc 12.77778%,#fcc 16.94444%,rgba(0,0,0,0) 16.94444%,rgba(0,0,0,0) 19.16667%,#fcc 19.16667%,#fcc 23.33333%,rgba(0,0,0,0) 23.33333%,rgba(0,0,0,0) 25.55556%,#fcc 25.55556%,#fcc 29.72222%,rgba(0,0,0,0) 29.72222%,rgba(0,0,0,0) 31.94444%,#fcc 31.94444%,#fcc 36.11111%,rgba(0,0,0,0) 36.11111%,rgba(0,0,0,0) 38.33333%,#fcc 38.33333%,#fcc 42.5%,rgba(0,0,0,0) 42.5%,rgba(0,0,0,0) 44.72222%,#fcc 44.72222%,#fcc 48.88889%,rgba(0,0,0,0) 48.88889%,rgba(0,0,0,0) 51.11111%,#fcc 51.11111%,#fcc 55.27778%,rgba(0,0,0,0) 55.27778%,rgba(0,0,0,0) 57.5%,#fcc 57.5%,#fcc 61.66667%,rgba(0,0,0,0) 61.66667%,rgba(0,0,0,0) 63.88889%,#fcc 63.88889%,#fcc 68.05556%,rgba(0,0,0,0) 68.05556%,rgba(0,0,0,0) 70.27778%,#fcc 70.27778%,#fcc 74.44444%,rgba(0,0,0,0) 74.44444%,rgba(0,0,0,0) 76.66667%,#fcc 76.66667%,#fcc 80.83333%,rgba(0,0,0,0) 80.83333%,rgba(0,0,0,0) 83.05556%,#fcc 83.05556%,#fcc 87.22222%,rgba(0,0,0,0) 87.22222%,rgba(0,0,0,0) 89.44444%,#fcc 89.44444%,#fcc 93.61111%,rgba(0,0,0,0) 93.61111%,rgba(0,0,0,0) 95.83333%,#fcc 95.83333%,#fcc 100%,rgba(0,0,0,0) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,0) 0,#fcc 0,#fcc 4.16667%,rgba(0,0,0,0) 4.16667%,rgba(0,0,0,0) 6.38889%,#fcc 6.38889%,#fcc 10.55556%,rgba(0,0,0,0) 10.55556%,rgba(0,0,0,0) 12.77778%,#fcc 12.77778%,#fcc 16.94444%,rgba(0,0,0,0) 16.94444%,rgba(0,0,0,0) 19.16667%,#fcc 19.16667%,#fcc 23.33333%,rgba(0,0,0,0) 23.33333%,rgba(0,0,0,0) 25.55556%,#fcc 25.55556%,#fcc 29.72222%,rgba(0,0,0,0) 29.72222%,rgba(0,0,0,0) 31.94444%,#fcc 31.94444%,#fcc 36.11111%,rgba(0,0,0,0) 36.11111%,rgba(0,0,0,0) 38.33333%,#fcc 38.33333%,#fcc 42.5%,rgba(0,0,0,0) 42.5%,rgba(0,0,0,0) 44.72222%,#fcc 44.72222%,#fcc 48.88889%,rgba(0,0,0,0) 48.88889%,rgba(0,0,0,0) 51.11111%,#fcc 51.11111%,#fcc 55.27778%,rgba(0,0,0,0) 55.27778%,rgba(0,0,0,0) 57.5%,#fcc 57.5%,#fcc 61.66667%,rgba(0,0,0,0) 61.66667%,rgba(0,0,0,0) 63.88889%,#fcc 63.88889%,#fcc 68.05556%,rgba(0,0,0,0) 68.05556%,rgba(0,0,0,0) 70.27778%,#fcc 70.27778%,#fcc 74.44444%,rgba(0,0,0,0) 74.44444%,rgba(0,0,0,0) 76.66667%,#fcc 76.66667%,#fcc 80.83333%,rgba(0,0,0,0) 80.83333%,rgba(0,0,0,0) 83.05556%,#fcc 83.05556%,#fcc 87.22222%,rgba(0,0,0,0) 87.22222%,rgba(0,0,0,0) 89.44444%,#fcc 89.44444%,#fcc 93.61111%,rgba(0,0,0,0) 93.61111%,rgba(0,0,0,0) 95.83333%,#fcc 95.83333%,#fcc 100%,rgba(0,0,0,0) 100%);background-image:linear-gradient(left,rgba(0,0,0,0) 0,#fcc 0,#fcc 4.16667%,rgba(0,0,0,0) 4.16667%,rgba(0,0,0,0) 6.38889%,#fcc 6.38889%,#fcc 10.55556%,rgba(0,0,0,0) 10.55556%,rgba(0,0,0,0) 12.77778%,#fcc 12.77778%,#fcc 16.94444%,rgba(0,0,0,0) 16.94444%,rgba(0,0,0,0) 19.16667%,#fcc 19.16667%,#fcc 23.33333%,rgba(0,0,0,0) 23.33333%,rgba(0,0,0,0) 25.55556%,#fcc 25.55556%,#fcc 29.72222%,rgba(0,0,0,0) 29.72222%,rgba(0,0,0,0) 31.94444%,#fcc 31.94444%,#fcc 36.11111%,rgba(0,0,0,0) 36.11111%,rgba(0,0,0,0) 38.33333%,#fcc 38.33333%,#fcc 42.5%,rgba(0,0,0,0) 42.5%,rgba(0,0,0,0) 44.72222%,#fcc 44.72222%,#fcc 48.88889%,rgba(0,0,0,0) 48.88889%,rgba(0,0,0,0) 51.11111%,#fcc 51.11111%,#fcc 55.27778%,rgba(0,0,0,0) 55.27778%,rgba(0,0,0,0) 57.5%,#fcc 57.5%,#fcc 61.66667%,rgba(0,0,0,0) 61.66667%,rgba(0,0,0,0) 63.88889%,#fcc 63.88889%,#fcc 68.05556%,rgba(0,0,0,0) 68.05556%,rgba(0,0,0,0) 70.27778%,#fcc 70.27778%,#fcc 74.44444%,rgba(0,0,0,0) 74.44444%,rgba(0,0,0,0) 76.66667%,#fcc 76.66667%,#fcc 80.83333%,rgba(0,0,0,0) 80.83333%,rgba(0,0,0,0) 83.05556%,#fcc 83.05556%,#fcc 87.22222%,rgba(0,0,0,0) 87.22222%,rgba(0,0,0,0) 89.44444%,#fcc 89.44444%,#fcc 93.61111%,rgba(0,0,0,0) 93.61111%,rgba(0,0,0,0) 95.83333%,#fcc 95.83333%,#fcc 100%,rgba(0,0,0,0) 100%)}}@media screen and (min-width:1080px){body.show-visual-grid:before{background-image:deprecated-webkit-gradient(linear,left top,left bottom,rgba(0,0,0,0) 0,#fcc 0,#fcc 4.16667%,rgba(0,0,0,0) 4.16667%,rgba(0,0,0,0) 6.38889%,#fcc 6.38889%,#fcc 10.55556%,rgba(0,0,0,0) 10.55556%,rgba(0,0,0,0) 12.77778%,#fcc 12.77778%,#fcc 16.94444%,rgba(0,0,0,0) 16.94444%,rgba(0,0,0,0) 19.16667%,#fcc 19.16667%,#fcc 23.33333%,rgba(0,0,0,0) 23.33333%,rgba(0,0,0,0) 25.55556%,#fcc 25.55556%,#fcc 29.72222%,rgba(0,0,0,0) 29.72222%,rgba(0,0,0,0) 31.94444%,#fcc 31.94444%,#fcc 36.11111%,rgba(0,0,0,0) 36.11111%,rgba(0,0,0,0) 38.33333%,#fcc 38.33333%,#fcc 42.5%,rgba(0,0,0,0) 42.5%,rgba(0,0,0,0) 44.72222%,#fcc 44.72222%,#fcc 48.88889%,rgba(0,0,0,0) 48.88889%,rgba(0,0,0,0) 51.11111%,#fcc 51.11111%,#fcc 55.27778%,rgba(0,0,0,0) 55.27778%,rgba(0,0,0,0) 57.5%,#fcc 57.5%,#fcc 61.66667%,rgba(0,0,0,0) 61.66667%,rgba(0,0,0,0) 63.88889%,#fcc 63.88889%,#fcc 68.05556%,rgba(0,0,0,0) 68.05556%,rgba(0,0,0,0) 70.27778%,#fcc 70.27778%,#fcc 74.44444%,rgba(0,0,0,0) 74.44444%,rgba(0,0,0,0) 76.66667%,#fcc 76.66667%,#fcc 80.83333%,rgba(0,0,0,0) 80.83333%,rgba(0,0,0,0) 83.05556%,#fcc 83.05556%,#fcc 87.22222%,rgba(0,0,0,0) 87.22222%,rgba(0,0,0,0) 89.44444%,#fcc 89.44444%,#fcc 93.61111%,rgba(0,0,0,0) 93.61111%,rgba(0,0,0,0) 95.83333%,#fcc 95.83333%,#fcc 100%,rgba(0,0,0,0) 100%);background-image:-webkit-linear-gradient(left,rgba(0,0,0,0) 0,#fcc 0,#fcc 4.16667%,rgba(0,0,0,0) 4.16667%,rgba(0,0,0,0) 6.38889%,#fcc 6.38889%,#fcc 10.55556%,rgba(0,0,0,0) 10.55556%,rgba(0,0,0,0) 12.77778%,#fcc 12.77778%,#fcc 16.94444%,rgba(0,0,0,0) 16.94444%,rgba(0,0,0,0) 19.16667%,#fcc 19.16667%,#fcc 23.33333%,rgba(0,0,0,0) 23.33333%,rgba(0,0,0,0) 25.55556%,#fcc 25.55556%,#fcc 29.72222%,rgba(0,0,0,0) 29.72222%,rgba(0,0,0,0) 31.94444%,#fcc 31.94444%,#fcc 36.11111%,rgba(0,0,0,0) 36.11111%,rgba(0,0,0,0) 38.33333%,#fcc 38.33333%,#fcc 42.5%,rgba(0,0,0,0) 42.5%,rgba(0,0,0,0) 44.72222%,#fcc 44.72222%,#fcc 48.88889%,rgba(0,0,0,0) 48.88889%,rgba(0,0,0,0) 51.11111%,#fcc 51.11111%,#fcc 55.27778%,rgba(0,0,0,0) 55.27778%,rgba(0,0,0,0) 57.5%,#fcc 57.5%,#fcc 61.66667%,rgba(0,0,0,0) 61.66667%,rgba(0,0,0,0) 63.88889%,#fcc 63.88889%,#fcc 68.05556%,rgba(0,0,0,0) 68.05556%,rgba(0,0,0,0) 70.27778%,#fcc 70.27778%,#fcc 74.44444%,rgba(0,0,0,0) 74.44444%,rgba(0,0,0,0) 76.66667%,#fcc 76.66667%,#fcc 80.83333%,rgba(0,0,0,0) 80.83333%,rgba(0,0,0,0) 83.05556%,#fcc 83.05556%,#fcc 87.22222%,rgba(0,0,0,0) 87.22222%,rgba(0,0,0,0) 89.44444%,#fcc 89.44444%,#fcc 93.61111%,rgba(0,0,0,0) 93.61111%,rgba(0,0,0,0) 95.83333%,#fcc 95.83333%,#fcc 100%,rgba(0,0,0,0) 100%);background-image:-moz-linear-gradient(left,rgba(0,0,0,0) 0,#fcc 0,#fcc 4.16667%,rgba(0,0,0,0) 4.16667%,rgba(0,0,0,0) 6.38889%,#fcc 6.38889%,#fcc 10.55556%,rgba(0,0,0,0) 10.55556%,rgba(0,0,0,0) 12.77778%,#fcc 12.77778%,#fcc 16.94444%,rgba(0,0,0,0) 16.94444%,rgba(0,0,0,0) 19.16667%,#fcc 19.16667%,#fcc 23.33333%,rgba(0,0,0,0) 23.33333%,rgba(0,0,0,0) 25.55556%,#fcc 25.55556%,#fcc 29.72222%,rgba(0,0,0,0) 29.72222%,rgba(0,0,0,0) 31.94444%,#fcc 31.94444%,#fcc 36.11111%,rgba(0,0,0,0) 36.11111%,rgba(0,0,0,0) 38.33333%,#fcc 38.33333%,#fcc 42.5%,rgba(0,0,0,0) 42.5%,rgba(0,0,0,0) 44.72222%,#fcc 44.72222%,#fcc 48.88889%,rgba(0,0,0,0) 48.88889%,rgba(0,0,0,0) 51.11111%,#fcc 51.11111%,#fcc 55.27778%,rgba(0,0,0,0) 55.27778%,rgba(0,0,0,0) 57.5%,#fcc 57.5%,#fcc 61.66667%,rgba(0,0,0,0) 61.66667%,rgba(0,0,0,0) 63.88889%,#fcc 63.88889%,#fcc 68.05556%,rgba(0,0,0,0) 68.05556%,rgba(0,0,0,0) 70.27778%,#fcc 70.27778%,#fcc 74.44444%,rgba(0,0,0,0) 74.44444%,rgba(0,0,0,0) 76.66667%,#fcc 76.66667%,#fcc 80.83333%,rgba(0,0,0,0) 80.83333%,rgba(0,0,0,0) 83.05556%,#fcc 83.05556%,#fcc 87.22222%,rgba(0,0,0,0) 87.22222%,rgba(0,0,0,0) 89.44444%,#fcc 89.44444%,#fcc 93.61111%,rgba(0,0,0,0) 93.61111%,rgba(0,0,0,0) 95.83333%,#fcc 95.83333%,#fcc 100%,rgba(0,0,0,0) 100%);background-image:-ms-linear-gradient(left,rgba(0,0,0,0) 0,#fcc 0,#fcc 4.16667%,rgba(0,0,0,0) 4.16667%,rgba(0,0,0,0) 6.38889%,#fcc 6.38889%,#fcc 10.55556%,rgba(0,0,0,0) 10.55556%,rgba(0,0,0,0) 12.77778%,#fcc 12.77778%,#fcc 16.94444%,rgba(0,0,0,0) 16.94444%,rgba(0,0,0,0) 19.16667%,#fcc 19.16667%,#fcc 23.33333%,rgba(0,0,0,0) 23.33333%,rgba(0,0,0,0) 25.55556%,#fcc 25.55556%,#fcc 29.72222%,rgba(0,0,0,0) 29.72222%,rgba(0,0,0,0) 31.94444%,#fcc 31.94444%,#fcc 36.11111%,rgba(0,0,0,0) 36.11111%,rgba(0,0,0,0) 38.33333%,#fcc 38.33333%,#fcc 42.5%,rgba(0,0,0,0) 42.5%,rgba(0,0,0,0) 44.72222%,#fcc 44.72222%,#fcc 48.88889%,rgba(0,0,0,0) 48.88889%,rgba(0,0,0,0) 51.11111%,#fcc 51.11111%,#fcc 55.27778%,rgba(0,0,0,0) 55.27778%,rgba(0,0,0,0) 57.5%,#fcc 57.5%,#fcc 61.66667%,rgba(0,0,0,0) 61.66667%,rgba(0,0,0,0) 63.88889%,#fcc 63.88889%,#fcc 68.05556%,rgba(0,0,0,0) 68.05556%,rgba(0,0,0,0) 70.27778%,#fcc 70.27778%,#fcc 74.44444%,rgba(0,0,0,0) 74.44444%,rgba(0,0,0,0) 76.66667%,#fcc 76.66667%,#fcc 80.83333%,rgba(0,0,0,0) 80.83333%,rgba(0,0,0,0) 83.05556%,#fcc 83.05556%,#fcc 87.22222%,rgba(0,0,0,0) 87.22222%,rgba(0,0,0,0) 89.44444%,#fcc 89.44444%,#fcc 93.61111%,rgba(0,0,0,0) 93.61111%,rgba(0,0,0,0) 95.83333%,#fcc 95.83333%,#fcc 100%,rgba(0,0,0,0) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,0) 0,#fcc 0,#fcc 4.16667%,rgba(0,0,0,0) 4.16667%,rgba(0,0,0,0) 6.38889%,#fcc 6.38889%,#fcc 10.55556%,rgba(0,0,0,0) 10.55556%,rgba(0,0,0,0) 12.77778%,#fcc 12.77778%,#fcc 16.94444%,rgba(0,0,0,0) 16.94444%,rgba(0,0,0,0) 19.16667%,#fcc 19.16667%,#fcc 23.33333%,rgba(0,0,0,0) 23.33333%,rgba(0,0,0,0) 25.55556%,#fcc 25.55556%,#fcc 29.72222%,rgba(0,0,0,0) 29.72222%,rgba(0,0,0,0) 31.94444%,#fcc 31.94444%,#fcc 36.11111%,rgba(0,0,0,0) 36.11111%,rgba(0,0,0,0) 38.33333%,#fcc 38.33333%,#fcc 42.5%,rgba(0,0,0,0) 42.5%,rgba(0,0,0,0) 44.72222%,#fcc 44.72222%,#fcc 48.88889%,rgba(0,0,0,0) 48.88889%,rgba(0,0,0,0) 51.11111%,#fcc 51.11111%,#fcc 55.27778%,rgba(0,0,0,0) 55.27778%,rgba(0,0,0,0) 57.5%,#fcc 57.5%,#fcc 61.66667%,rgba(0,0,0,0) 61.66667%,rgba(0,0,0,0) 63.88889%,#fcc 63.88889%,#fcc 68.05556%,rgba(0,0,0,0) 68.05556%,rgba(0,0,0,0) 70.27778%,#fcc 70.27778%,#fcc 74.44444%,rgba(0,0,0,0) 74.44444%,rgba(0,0,0,0) 76.66667%,#fcc 76.66667%,#fcc 80.83333%,rgba(0,0,0,0) 80.83333%,rgba(0,0,0,0) 83.05556%,#fcc 83.05556%,#fcc 87.22222%,rgba(0,0,0,0) 87.22222%,rgba(0,0,0,0) 89.44444%,#fcc 89.44444%,#fcc 93.61111%,rgba(0,0,0,0) 93.61111%,rgba(0,0,0,0) 95.83333%,#fcc 95.83333%,#fcc 100%,rgba(0,0,0,0) 100%);background-image:linear-gradient(left,rgba(0,0,0,0) 0,#fcc 0,#fcc 4.16667%,rgba(0,0,0,0) 4.16667%,rgba(0,0,0,0) 6.38889%,#fcc 6.38889%,#fcc 10.55556%,rgba(0,0,0,0) 10.55556%,rgba(0,0,0,0) 12.77778%,#fcc 12.77778%,#fcc 16.94444%,rgba(0,0,0,0) 16.94444%,rgba(0,0,0,0) 19.16667%,#fcc 19.16667%,#fcc 23.33333%,rgba(0,0,0,0) 23.33333%,rgba(0,0,0,0) 25.55556%,#fcc 25.55556%,#fcc 29.72222%,rgba(0,0,0,0) 29.72222%,rgba(0,0,0,0) 31.94444%,#fcc 31.94444%,#fcc 36.11111%,rgba(0,0,0,0) 36.11111%,rgba(0,0,0,0) 38.33333%,#fcc 38.33333%,#fcc 42.5%,rgba(0,0,0,0) 42.5%,rgba(0,0,0,0) 44.72222%,#fcc 44.72222%,#fcc 48.88889%,rgba(0,0,0,0) 48.88889%,rgba(0,0,0,0) 51.11111%,#fcc 51.11111%,#fcc 55.27778%,rgba(0,0,0,0) 55.27778%,rgba(0,0,0,0) 57.5%,#fcc 57.5%,#fcc 61.66667%,rgba(0,0,0,0) 61.66667%,rgba(0,0,0,0) 63.88889%,#fcc 63.88889%,#fcc 68.05556%,rgba(0,0,0,0) 68.05556%,rgba(0,0,0,0) 70.27778%,#fcc 70.27778%,#fcc 74.44444%,rgba(0,0,0,0) 74.44444%,rgba(0,0,0,0) 76.66667%,#fcc 76.66667%,#fcc 80.83333%,rgba(0,0,0,0) 80.83333%,rgba(0,0,0,0) 83.05556%,#fcc 83.05556%,#fcc 87.22222%,rgba(0,0,0,0) 87.22222%,rgba(0,0,0,0) 89.44444%,#fcc 89.44444%,#fcc 93.61111%,rgba(0,0,0,0) 93.61111%,rgba(0,0,0,0) 95.83333%,#fcc 95.83333%,#fcc 100%,rgba(0,0,0,0) 100%)}}label{float:left;clear:both;width:100%;font-size:.9rem;font-weight:600;margin:1em 0 .25em;height:1.5em;overflow:hidden}label .inner-label{position:relative;-webkit-transition:top .5s;-moz-transition:top .5s;transition:top .5s}label.show-message .inner-label{top:-1.5em}label em{font-style:normal;color:#999}label .message.error{color:#ff4747}label .message.success,label .message.warning{color:#4e2b63}input[type=password],input[type=search],input[type=text]{width:100%;font-family:"Proxima Nova","Helvetica Neue",Helvetica,Arial,sans-serif;font-size:1rem;border:1px solid #ddd;border-radius:5px;padding:.5em 1em;margin:0 0 .5em;-webkit-transition:border .5s;-moz-transition:border .5s;transition:border .5s;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-appearance:none}input[type=password]:focus,input[type=search]:focus,input[type=text]:focus{outline:0;border:1px solid #23b7fb;box-shadow:0 0 3px #23b7fb}input[type=password].short,input[type=search].short,input[type=text].short{max-width:80px}input[type=password].medium,input[type=search].medium,input[type=text].medium{max-width:200px}input[type=password].error,input[type=search].error,input[type=text].error{border-color:#ff4747}input[type=search]{padding-left:32px;background:#fff no-repeat 12px 50%;background-image:url(assets/images/search.png)}@media only screen and (-webkit-min-device-pixel-ratio:1.3),only screen and (min--moz-device-pixel-ratio:1.3),only screen and (-o-min-device-pixel-ratio:1.3/1),only screen and (min-resolution:125dpi),only screen and (min-resolution:1.3dppx){input[type=search]{background-image:url(assets/images/search@2x.png);background-size:18px 18px}}textarea{width:100%;font-family:"Proxima Nova","Helvetica Neue",Helvetica,Arial,sans-serif;font-size:1rem;border:1px solid #ddd;border-radius:5px;padding:.5em 1em .3em;margin:0 0 .5em;resize:vertical;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}textarea:focus{outline:0;border:1px solid #23b7fb;box-shadow:0 0 3px #23b7fb}.btn{display:inline-block;clear:both;background:#23b7fb;border:0;margin:.25rem 0;padding:.5em 1em .4em;cursor:pointer;color:#fff;font-family:"Proxima Nova","Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:700;font-size:1.25rem;text-align:center;text-decoration:none;text-transform:uppercase;text-shadow:none;border-radius:5px;-webkit-appearance:none}.btn:focus{outline:0;border:1px solid #23b7fb;box-shadow:0 0 3px #23b7fb}.btn:hover{background:#55cafc}.btn:active{outline:0;background:#04a3e7}.btn:active,.btn:hover,.btn:link{color:#fff;text-decoration:none}.btn.secondary{background:#444;font-weight:700;color:#fff;text-transform:uppercase;text-decoration:none;border:0}.btn.secondary:hover{background:#3c3c3c;box-shadow:none}.btn.secondary:active{outline:0;background:#090909;box-shadow:none}.btn.tertiary{background:0 0;color:#444;font-weight:500;text-transform:none;text-decoration:underline;border:0}.btn.tertiary:hover{color:#222;background-color:none;box-shadow:none;text-decoration:underline}.btn.tertiary:active{outline:0;background-color:none;box-shadow:none}.btn.tiny{font-size:.75rem}.btn.small{font-size:1rem}.btn.medium{font-size:1.25rem}.btn.large{font-size:1.75rem}.btn.disabled,.btn[disabled=disabled]{clear:both;background:#ddd;border:1px solid #ddd;margin:0 auto;margin:.25rem;padding:.4rem 1em .25rem;cursor:default;color:#f7f7f7;font-family:"Proxima Nova","Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:600;text-align:center;text-decoration:none;text-transform:uppercase;border-radius:5px}.btn.disabled:hover,.btn[disabled=disabled]:hover{background:#ddd;box-shadow:none}.btn.disabled:active,.btn[disabled=disabled]:active{outline:0;background:#ddd;color:#f7f7f7;box-shadow:none}.btn.loading{position:relative;background:#ddd;border:2px solid #ddd;color:#ddd;box-shadow:none;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn.loading:hover{background:#ddd}.btn.loading:active{color:#ddd}.btn.loading:before{content:"";display:block;height:1.5em;width:1.5em;margin:0 auto;position:absolute;top:50%;left:50%;margin-top:-.75em;margin-left:-.75em;border:.3em solid #ddd;border-radius:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.btn.loading:after{content:"";display:block;height:1.5em;width:1.5em;margin:0 auto;position:absolute;top:50%;left:50%;margin-top:-.75em;margin-left:-.75em;border:.3em solid #c4c4c4;border-left:.3em solid transparent;border-bottom:.3em solid transparent;border-right:.3em solid transparent;border-radius:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-animation:rotation 1.5s infinite linear;-moz-animation:rotation 1.5s infinite linear;animation:rotation 1.5s infinite linear}input[type=submit]{white-space:normal}select{display:block;width:100%;height:41px;font-size:1rem;font-family:"Proxima Nova","Helvetica Neue",Helvetica,Arial,sans-serif;border:1px solid #ddd;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}select:focus{outline:0;border:1px solid #23b7fb;box-shadow:0 0 3px #23b7fb}.spinner{height:30px;width:30px;margin:0 auto;position:relative;-webkit-animation:rotation 1.5s infinite linear;-moz-animation:rotation 1.5s infinite linear;animation:rotation 1.5s infinite linear;border:6px solid #ddd;border-radius:100%}.spinner:before{content:"";display:block;position:absolute;left:-6px;top:-6px;height:100%;width:100%;border:6px solid #c4c4c4;border-left:6px solid transparent;border-bottom:6px solid transparent;border-right:6px solid transparent;border-radius:100%}.messages{position:relative;width:100%;background:#4e2b63;text-align:left;margin:0;padding:1rem 4rem 1rem 1.5rem;color:#fff;color:rgba(255,255,255,.7);*zoom:1;max-width:1440px;margin-left:auto;margin-right:auto}.messages:after,.messages:before{content:" ";display:table}.messages:after{clear:both}.messages b,.messages strong{font-weight:800;color:#fff;padding:0 .3rem}.messages a{font-weight:800;color:#fff}.messages.error{background:#ff4747}.messages .message-close-button{position:absolute;right:1.5rem;font-size:2rem;font-weight:700;color:#333;text-decoration:none;top:.4rem;opacity:.7}.messages .message-close-button:hover{opacity:1}.messages .message-close-button.white{color:#fff}figure{padding:2.5% 0}figure img{max-width:100%}figcaption{color:#999;font-size:.8rem;text-align:center;padding:0 1rem 1.5rem}img.bordered{border:5px solid #fff;box-shadow:0 2px 10px 0 rgba(0,0,0,.1);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.legal{font-size:.75rem;color:#999}.legal a,.legal p,.legal small,.legal strong,.legal sup{font-size:.75rem;color:#999;margin:0}.legal a{color:#999}.legal a:hover{color:#b3b3b3}.legal a:active{color:gray}.pullquote{color:#4e2b63;width:95%;font-size:1.25rem}@media screen and (min-width:768px){.pullquote{width:auto;font-size:1.5rem}}.pullquote cite{color:#ddd}.embed-container{position:relative;padding-bottom:54%;padding-top:30px;overflow:hidden;max-width:100%;height:auto}.embed-container embed,.embed-container iframe,.embed-container object{position:absolute;top:0;left:0;width:100%;height:100%}.full-link{position:absolute;background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);top:0;left:0;width:100%;height:100%;z-index:10}.full-link span{display:none}.full-link:hover~.full-link-delegate a{text-decoration:underline}.visually-hidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.visually-hidden.focusable:active,.visually-hidden.focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.clearfix:after,.clearfix:before{content:"";display:table}.clearfix:after{clear:both}.clearfix{*zoom:1}nav.breadcrumbs{margin:1.65rem;text-align:center}nav.breadcrumbs ul{list-style-type:none;margin-left:auto;padding-left:0}nav.breadcrumbs li{display:inline}nav.breadcrumbs li:after{font-family:"Proxima Nova","Helvetica Neue",Helvetica,Arial,sans-serif;content:">";color:#ddd;padding:0 1em}nav.breadcrumbs li:last-of-type:after{display:none}nav.breadcrumbs a{color:#999;text-decoration:none}nav.breadcrumbs a:hover{text-decoration:underline}.tabs{padding:3.25rem 0;font-size:1.1rem;text-align:center;overflow:hidden}.tabs ul{font-size:.9em;margin:1rem;padding:0}.tabs li{display:inline;margin:0 1rem}.tabs a{text-decoration:none;padding:0 .5rem}.tabs a:hover{text-decoration:underline}.tabs a.active,.tabs a.is-active{color:#000;font-weight:700}.tabs.vertical{font-size:1.1em;text-align:left}.tabs.vertical ul{font-size:.9em;margin:.5rem 1rem 1rem}.tabs.vertical li{display:block;margin:.5rem 0}.cta{background-color:#f7f7f7;border-bottom:2px solid #ddd;border-top:2px solid #ddd;padding:1rem;*zoom:1;display:block}.cta:after,.cta:before{content:" ";display:table}.cta:after{clear:both}@media screen and (min-width:768px){.cta{padding:0}}.cta>.wrapper{text-align:center;padding:2rem 0}@media screen and (min-width:768px){.cta>.wrapper{float:left;display:block;margin-right:2.22222%;width:74.44444%;margin-left:12.77778%}.cta>.wrapper:last-child{margin-right:0}}.cta .__message{color:#444;font-size:1.25rem;font-weight:600;margin:0 0 .5rem}.tile{height:0;padding-bottom:100%;position:relative}.tile>.wrapper{background-color:#fff;display:block;height:100%;left:0;overflow:hidden;position:absolute;top:0;width:100%}.tile>.wrapper:before{bottom:0;content:'';display:block;height:100%;position:absolute;width:100%;background-color:rgba(0,0,0,0);background-image:-webkit-gradient(linear,left top,left bottom,color-stop(40%,rgba(0,0,0,0)),color-stop(70%,rgba(0,0,0,.2)),color-stop(87%,rgba(0,0,0,.5)),color-stop(100%,rgba(0,0,0,.85)));background-image:-webkit-linear-gradient(rgba(0,0,0,0) 40%,rgba(0,0,0,.2) 70%,rgba(0,0,0,.5) 87%,rgba(0,0,0,.85) 100%);background-image:linear-gradient(rgba(0,0,0,0) 40%,rgba(0,0,0,.2) 70%,rgba(0,0,0,.5) 87%,rgba(0,0,0,.85) 100%)}.no-cssgradients .tile>.wrapper:before{background:transparent neue-image-url(black-gradient.png) 0 bottom repeat-x}.tile img{display:block;width:100%}.tile--meta{bottom:0;color:#fff;padding:1rem;position:absolute;width:100%}.tile--meta .__title{color:inherit;font-size:1.25rem;line-height:1.2;margin:0 0 .25rem}.tile--meta .__tagline{color:inherit;font-size:.9em;line-height:1;margin:0}.tile--meta .__tagline,.tile--meta .__title{text-shadow:0 1px 3px rgba(0,0,0,.3)}.no-cssgradients .tile--meta{background:transparent neue-image-url(black-gradient.png) 0 bottom repeat-x}.gallery{list-style-type:none;margin:0;padding:0;*zoom:1}.gallery:after,.gallery:before{content:" ";display:table}.gallery:after{clear:both}.gallery.-mosaic{background-color:#000}@media screen and (min-width:450px){.gallery>li{float:left;width:50%}}@media screen and (min-width:768px){.gallery>li{width:25%}}.gallery .empty{background-color:#f7f7f7;display:none;height:0;position:relative}.gallery .empty>.wrapper{height:100%;left:0;position:absolute;top:0;width:100%}@media screen and (min-width:450px){.gallery .empty.-trio{display:block;padding-bottom:50%}}@media screen and (min-width:768px){.gallery .empty.-trio{padding-bottom:25%;width:75%}.gallery .empty.-trio a,.gallery .empty.-trio p{font-size:1.25rem}}.gallery .empty.-duo{padding-bottom:25%;width:50%}.gallery .empty.-duo a,.gallery .empty.-duo p{font-size:1rem}@media screen and (min-width:768px){.gallery .empty.-duo{display:block}}@media screen and (min-width:1080px){.gallery .empty.-duo a,.gallery .empty.-duo p{font-size:1.25rem}}.gallery .empty.-mono{display:block;padding-bottom:50%}@media screen and (min-width:768px){.gallery .empty.-mono{padding-bottom:25%}}.gallery .__message{display:table;height:100%;padding:1rem;text-align:center;width:100%}.gallery .__message>.wrapper{display:table-cell;vertical-align:middle}.gallery .__message p{line-height:1.3;margin:.25rem}.modal{display:none;position:fixed;top:0;right:0;bottom:0;left:0;background:rgba(0,0,0,.5);z-index:9998;overflow:auto;overflow-y:scroll;-webkit-overflow-scrolling:touch}.modal .modal-content{position:relative;background:#fff;z-index:1050;width:auto;padding:2rem 1.5rem;margin-right:auto;margin-left:auto}.modal .modal-content .modal-close-button{position:absolute;top:.5rem;right:1.5rem;font-size:2rem;font-weight:700;color:#333;opacity:.5;text-decoration:none}.modal .modal-content .modal-close-button:hover{opacity:1}.modal .modal-content .modal-close-button.white{color:#fff}.modal .modal-content .modal-secure-button{position:absolute;top:1rem;left:1rem;text-decoration:none;font-size:16px;font-weight:700;color:#333;opacity:.5;-webkit-transition:opacity .5s;-moz-transition:opacity .5s;transition:opacity .5s}.modal .modal-content .modal-secure-button span{display:none;font-size:.75rem;background:#333;color:#fff;padding:.15rem .5rem .3rem;border-radius:2px;opacity:0;-webkit-transition:opacity .5s;-moz-transition:opacity .5s;transition:opacity .5s}.modal .modal-content .modal-secure-button span:after{content:"";position:absolute;display:block;border-style:solid;border-width:6px;border-color:transparent #333 transparent transparent;top:6px;left:6px}.modal .modal-content .modal-secure-button:hover{opacity:1}.modal .modal-content .modal-secure-button:hover span{display:inline-block;opacity:1}.modal .modal-content h2{margin-bottom:1rem}@media screen and (min-width:768px){.modal .modal-content{box-shadow:0 0 15px rgba(0,0,0,.5);max-width:600px;margin-top:5rem;margin-bottom:5rem;min-height:0}}body.modal-open{overflow:hidden}.carousel-wrapper{position:relative}.carousel-wrapper .slide-wrapper{float:left;width:100%}.carousel-wrapper .next-wrapper,.carousel-wrapper .prev-wrapper{position:absolute;width:25px;height:100%;cursor:pointer}.carousel-wrapper .prev-wrapper{left:-25px}.carousel-wrapper .next-wrapper{right:0}.carousel-wrapper .next-button,.carousel-wrapper .prev-button{position:relative;top:33.3333%;height:0;width:0;border:25px solid #fff;border-radius:25px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.carousel-wrapper .next-button span.arrow,.carousel-wrapper .prev-button span.arrow{font-size:40px;color:#4e2b63;position:absolute;top:-18px;font-family:icomoon;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.carousel-wrapper .prev-button{left:0}.carousel-wrapper .prev-button .arrow{left:-22px}.carousel-wrapper .next-button{right:0}.carousel-wrapper .next-button .arrow{right:-24px}.carousel-wrapper figure.slide{display:none;border:6px solid #fff;padding:0}.carousel-wrapper .slide.visible,.carousel-wrapper figure.slide img{display:block}.homepage-sponsors h4{color:#ddd;text-align:center;padding-top:2em}.homepage-sponsors img{margin:0 1rem}.homepage-sponsors p{text-align:center;padding-bottom:1em}.homepage-sponsors .sprite{background-image:url(images/sponsors.png);background-repeat:no-repeat;display:inline-block;background-size:175px 160px;width:50px;height:35px;margin:0 1rem}@media screen and (min-width:768px){.homepage-sponsors .sprite{background-size:350px 320px;width:100px;height:70px}}.homepage-sponsors .sprite-hrb{width:60px;background-position:-2.5px -2.5px}@media screen and (min-width:768px){.homepage-sponsors .sprite-hrb{width:120px}}@media screen and (min-width:768px){.homepage-sponsors .sprite-hrb{background-position:-5px -5px}}.homepage-sponsors .sprite-aeropostale{background-position:-67.5px -2.5px}@media screen and (min-width:768px){.homepage-sponsors .sprite-aeropostale{background-position:-135px -5px}}.homepage-sponsors .sprite-channel-one{background-position:-2.5px -42.5px}@media screen and (min-width:768px){.homepage-sponsors .sprite-channel-one{background-position:-5px -85px}}.homepage-sponsors .sprite-fastweb{background-position:-57.5px -42.5px}@media screen and (min-width:768px){.homepage-sponsors .sprite-fastweb{background-position:-115px -85px}}.homepage-sponsors .sprite-toyota{background-position:-2.5px -82.5px}@media screen and (min-width:768px){.homepage-sponsors .sprite-toyota{background-position:-5px -165px}}.homepage-sponsors .sprite-jetblue{background-position:-57.5px -82.5px}@media screen and (min-width:768px){.homepage-sponsors .sprite-jetblue{background-position:-115px -165px}}.homepage-sponsors .sprite-aarp{background-position:-122.5px -2.5px}@media screen and (min-width:768px){.homepage-sponsors .sprite-aarp{background-position:-245px -5px}}.homepage-sponsors .sprite-sprint{background-position:-112.5px -42.5px}@media screen and (min-width:768px){.homepage-sponsors .sprite-sprint{background-position:-225px -85px}}.homepage-sponsors .sprite-vh1{background-position:-112.5px -82.5px}@media screen and (min-width:768px){.homepage-sponsors .sprite-vh1{background-position:-225px -165px}}.homepage-sponsors .sprite-walmart{background-position:-2.5px -122.5px}@media screen and (min-width:768px){.homepage-sponsors .sprite-walmart{background-position:-5px -245px}}.homepage-sponsors .sprite-amex{background-position:-57.5px -122.5px}@media screen and (min-width:768px){.homepage-sponsors .sprite-amex{background-position:-115px -245px}}
\ No newline at end of file
diff --git a/neue.js b/neue.js
new file mode 100644
index 00000000..e69bb94c
--- /dev/null
+++ b/neue.js
@@ -0,0 +1,1368 @@
+(function () {/**
+ * @license almond 0.2.9 Copyright (c) 2011-2014, The Dojo Foundation All Rights Reserved.
+ * Available via the MIT or new BSD license.
+ * see: http://github.com/jrburke/almond for details
+ */
+//Going sloppy to avoid 'use strict' string cost, but strict practices should
+//be followed.
+/*jslint sloppy: true */
+/*global setTimeout: false */
+
+var requirejs, require, define;
+(function (undef) {
+ var main, req, makeMap, handlers,
+ defined = {},
+ waiting = {},
+ config = {},
+ defining = {},
+ hasOwn = Object.prototype.hasOwnProperty,
+ aps = [].slice,
+ jsSuffixRegExp = /\.js$/;
+
+ function hasProp(obj, prop) {
+ return hasOwn.call(obj, prop);
+ }
+
+ /**
+ * Given a relative module name, like ./something, normalize it to
+ * a real name that can be mapped to a path.
+ * @param {String} name the relative name
+ * @param {String} baseName a real name that the name arg is relative
+ * to.
+ * @returns {String} normalized name
+ */
+ function normalize(name, baseName) {
+ var nameParts, nameSegment, mapValue, foundMap, lastIndex,
+ foundI, foundStarMap, starI, i, j, part,
+ baseParts = baseName && baseName.split("/"),
+ map = config.map,
+ starMap = (map && map['*']) || {};
+
+ //Adjust any relative paths.
+ if (name && name.charAt(0) === ".") {
+ //If have a base name, try to normalize against it,
+ //otherwise, assume it is a top-level require that will
+ //be relative to baseUrl in the end.
+ if (baseName) {
+ //Convert baseName to array, and lop off the last part,
+ //so that . matches that "directory" and not name of the baseName's
+ //module. For instance, baseName of "one/two/three", maps to
+ //"one/two/three.js", but we want the directory, "one/two" for
+ //this normalization.
+ baseParts = baseParts.slice(0, baseParts.length - 1);
+ name = name.split('/');
+ lastIndex = name.length - 1;
+
+ // Node .js allowance:
+ if (config.nodeIdCompat && jsSuffixRegExp.test(name[lastIndex])) {
+ name[lastIndex] = name[lastIndex].replace(jsSuffixRegExp, '');
+ }
+
+ name = baseParts.concat(name);
+
+ //start trimDots
+ for (i = 0; i < name.length; i += 1) {
+ part = name[i];
+ if (part === ".") {
+ name.splice(i, 1);
+ i -= 1;
+ } else if (part === "..") {
+ if (i === 1 && (name[2] === '..' || name[0] === '..')) {
+ //End of the line. Keep at least one non-dot
+ //path segment at the front so it can be mapped
+ //correctly to disk. Otherwise, there is likely
+ //no path mapping for a path starting with '..'.
+ //This can still fail, but catches the most reasonable
+ //uses of ..
+ break;
+ } else if (i > 0) {
+ name.splice(i - 1, 2);
+ i -= 2;
+ }
+ }
+ }
+ //end trimDots
+
+ name = name.join("/");
+ } else if (name.indexOf('./') === 0) {
+ // No baseName, so this is ID is resolved relative
+ // to baseUrl, pull off the leading dot.
+ name = name.substring(2);
+ }
+ }
+
+ //Apply map config if available.
+ if ((baseParts || starMap) && map) {
+ nameParts = name.split('/');
+
+ for (i = nameParts.length; i > 0; i -= 1) {
+ nameSegment = nameParts.slice(0, i).join("/");
+
+ if (baseParts) {
+ //Find the longest baseName segment match in the config.
+ //So, do joins on the biggest to smallest lengths of baseParts.
+ for (j = baseParts.length; j > 0; j -= 1) {
+ mapValue = map[baseParts.slice(0, j).join('/')];
+
+ //baseName segment has config, find if it has one for
+ //this name.
+ if (mapValue) {
+ mapValue = mapValue[nameSegment];
+ if (mapValue) {
+ //Match, update name to the new value.
+ foundMap = mapValue;
+ foundI = i;
+ break;
+ }
+ }
+ }
+ }
+
+ if (foundMap) {
+ break;
+ }
+
+ //Check for a star map match, but just hold on to it,
+ //if there is a shorter segment match later in a matching
+ //config, then favor over this star map.
+ if (!foundStarMap && starMap && starMap[nameSegment]) {
+ foundStarMap = starMap[nameSegment];
+ starI = i;
+ }
+ }
+
+ if (!foundMap && foundStarMap) {
+ foundMap = foundStarMap;
+ foundI = starI;
+ }
+
+ if (foundMap) {
+ nameParts.splice(0, foundI, foundMap);
+ name = nameParts.join('/');
+ }
+ }
+
+ return name;
+ }
+
+ function makeRequire(relName, forceSync) {
+ return function () {
+ //A version of a require function that passes a moduleName
+ //value for items that may need to
+ //look up paths relative to the moduleName
+ return req.apply(undef, aps.call(arguments, 0).concat([relName, forceSync]));
+ };
+ }
+
+ function makeNormalize(relName) {
+ return function (name) {
+ return normalize(name, relName);
+ };
+ }
+
+ function makeLoad(depName) {
+ return function (value) {
+ defined[depName] = value;
+ };
+ }
+
+ function callDep(name) {
+ if (hasProp(waiting, name)) {
+ var args = waiting[name];
+ delete waiting[name];
+ defining[name] = true;
+ main.apply(undef, args);
+ }
+
+ if (!hasProp(defined, name) && !hasProp(defining, name)) {
+ throw new Error('No ' + name);
+ }
+ return defined[name];
+ }
+
+ //Turns a plugin!resource to [plugin, resource]
+ //with the plugin being undefined if the name
+ //did not have a plugin prefix.
+ function splitPrefix(name) {
+ var prefix,
+ index = name ? name.indexOf('!') : -1;
+ if (index > -1) {
+ prefix = name.substring(0, index);
+ name = name.substring(index + 1, name.length);
+ }
+ return [prefix, name];
+ }
+
+ /**
+ * Makes a name map, normalizing the name, and using a plugin
+ * for normalization if necessary. Grabs a ref to plugin
+ * too, as an optimization.
+ */
+ makeMap = function (name, relName) {
+ var plugin,
+ parts = splitPrefix(name),
+ prefix = parts[0];
+
+ name = parts[1];
+
+ if (prefix) {
+ prefix = normalize(prefix, relName);
+ plugin = callDep(prefix);
+ }
+
+ //Normalize according
+ if (prefix) {
+ if (plugin && plugin.normalize) {
+ name = plugin.normalize(name, makeNormalize(relName));
+ } else {
+ name = normalize(name, relName);
+ }
+ } else {
+ name = normalize(name, relName);
+ parts = splitPrefix(name);
+ prefix = parts[0];
+ name = parts[1];
+ if (prefix) {
+ plugin = callDep(prefix);
+ }
+ }
+
+ //Using ridiculous property names for space reasons
+ return {
+ f: prefix ? prefix + '!' + name : name, //fullName
+ n: name,
+ pr: prefix,
+ p: plugin
+ };
+ };
+
+ function makeConfig(name) {
+ return function () {
+ return (config && config.config && config.config[name]) || {};
+ };
+ }
+
+ handlers = {
+ require: function (name) {
+ return makeRequire(name);
+ },
+ exports: function (name) {
+ var e = defined[name];
+ if (typeof e !== 'undefined') {
+ return e;
+ } else {
+ return (defined[name] = {});
+ }
+ },
+ module: function (name) {
+ return {
+ id: name,
+ uri: '',
+ exports: defined[name],
+ config: makeConfig(name)
+ };
+ }
+ };
+
+ main = function (name, deps, callback, relName) {
+ var cjsModule, depName, ret, map, i,
+ args = [],
+ callbackType = typeof callback,
+ usingExports;
+
+ //Use name if no relName
+ relName = relName || name;
+
+ //Call the callback to define the module, if necessary.
+ if (callbackType === 'undefined' || callbackType === 'function') {
+ //Pull out the defined dependencies and pass the ordered
+ //values to the callback.
+ //Default to [require, exports, module] if no deps
+ deps = !deps.length && callback.length ? ['require', 'exports', 'module'] : deps;
+ for (i = 0; i < deps.length; i += 1) {
+ map = makeMap(deps[i], relName);
+ depName = map.f;
+
+ //Fast path CommonJS standard dependencies.
+ if (depName === "require") {
+ args[i] = handlers.require(name);
+ } else if (depName === "exports") {
+ //CommonJS module spec 1.1
+ args[i] = handlers.exports(name);
+ usingExports = true;
+ } else if (depName === "module") {
+ //CommonJS module spec 1.1
+ cjsModule = args[i] = handlers.module(name);
+ } else if (hasProp(defined, depName) ||
+ hasProp(waiting, depName) ||
+ hasProp(defining, depName)) {
+ args[i] = callDep(depName);
+ } else if (map.p) {
+ map.p.load(map.n, makeRequire(relName, true), makeLoad(depName), {});
+ args[i] = defined[depName];
+ } else {
+ throw new Error(name + ' missing ' + depName);
+ }
+ }
+
+ ret = callback ? callback.apply(defined[name], args) : undefined;
+
+ if (name) {
+ //If setting exports via "module" is in play,
+ //favor that over return value and exports. After that,
+ //favor a non-undefined return value over exports use.
+ if (cjsModule && cjsModule.exports !== undef &&
+ cjsModule.exports !== defined[name]) {
+ defined[name] = cjsModule.exports;
+ } else if (ret !== undef || !usingExports) {
+ //Use the return value from the function.
+ defined[name] = ret;
+ }
+ }
+ } else if (name) {
+ //May just be an object definition for the module. Only
+ //worry about defining if have a module name.
+ defined[name] = callback;
+ }
+ };
+
+ requirejs = require = req = function (deps, callback, relName, forceSync, alt) {
+ if (typeof deps === "string") {
+ if (handlers[deps]) {
+ //callback in this case is really relName
+ return handlers[deps](callback);
+ }
+ //Just return the module wanted. In this scenario, the
+ //deps arg is the module name, and second arg (if passed)
+ //is just the relName.
+ //Normalize module name, if it contains . or ..
+ return callDep(makeMap(deps, callback).f);
+ } else if (!deps.splice) {
+ //deps is a config object, not an array.
+ config = deps;
+ if (config.deps) {
+ req(config.deps, config.callback);
+ }
+ if (!callback) {
+ return;
+ }
+
+ if (callback.splice) {
+ //callback is an array, which means it is a dependency list.
+ //Adjust args if there are dependencies
+ deps = callback;
+ callback = relName;
+ relName = null;
+ } else {
+ deps = undef;
+ }
+ }
+
+ //Support require(['a'])
+ callback = callback || function () {};
+
+ //If relName is a function, it is an errback handler,
+ //so remove it.
+ if (typeof relName === 'function') {
+ relName = forceSync;
+ forceSync = alt;
+ }
+
+ //Simulate async callback;
+ if (forceSync) {
+ main(undef, deps, callback, relName);
+ } else {
+ //Using a non-zero value because of concern for what old browsers
+ //do, and latest browsers "upgrade" to 4 if lower value is used:
+ //http://www.whatwg.org/specs/web-apps/current-work/multipage/timers.html#dom-windowtimers-settimeout:
+ //If want a value immediately, use require('id') instead -- something
+ //that works in almond on the global level, but not guaranteed and
+ //unlikely to work in other AMD implementations.
+ setTimeout(function () {
+ main(undef, deps, callback, relName);
+ }, 4);
+ }
+
+ return req;
+ };
+
+ /**
+ * Just drops the config on the floor, but returns req in case
+ * the config return value is used.
+ */
+ req.config = function (cfg) {
+ return req(cfg);
+ };
+
+ /**
+ * Expose module registry for debugging and tooling
+ */
+ requirejs._defined = defined;
+
+ define = function (name, deps, callback) {
+
+ //This module may not have dependencies
+ if (!deps.splice) {
+ //deps is not an array, so probably means
+ //an object literal or factory function for
+ //the value. Adjust args.
+ callback = deps;
+ deps = [];
+ }
+
+ if (!hasProp(defined, name) && !hasProp(waiting, name)) {
+ waiting[name] = [name, deps, callback];
+ }
+ };
+
+ define.amd = {
+ jQuery: true
+ };
+}());
+
+define("bower_components/almond/almond", function(){});
+
+/**
+ * # Image Carousel
+ *
+ * Adds simple "previous/next" functionality to slide deck-style image
+ * galleries with the following markup:
+ *
+ * @example
+ * //
+ * //
+ * //
+ * //
+ * //
+ * //
+ * //
+ * //
+ * //
+ * //
+ * //
+ * //
+ *
+ */
+
+define('neue/carousel',[],function() {
+
+
+ var $ = window.jQuery;
+
+ $(function() {
+ // Show first image
+ $("#slide0").addClass("visible");
+
+ // Make carousel stateful
+ var counter = 0;
+
+ // Cache carousel buttons
+ var $buttons = $("#prev, #next");
+
+ // Decrement counter
+ function decrementCounter() {
+ // If first slide is shown, restart loop
+ // Else, show previous slide
+ counter === 0 ? counter = 2 : counter--;
+ }
+
+ // Increment counter
+ function incrementCounter() {
+ // If last slide is shown, restart loop
+ // Else, show next slide
+ counter === 2 ? counter = 0 : counter++;
+ }
+
+ // Toggle slide visibility
+ function showCurrentSlide( direction ) {
+ // Remove "visibile" class from the current slide
+ $("#slide" + counter).removeClass("visible");
+
+ // Increment or decrement slide position based on user"s request
+ direction === "prev" ? decrementCounter() : incrementCounter();
+
+ // Assign "visible" class to the requested slide
+ $("#slide" + counter).addClass("visible");
+ }
+
+ // Bind click event to carousel buttons
+ $buttons.click(function() {
+ showCurrentSlide( $(this).attr("id") );
+ });
+ });
+});
+
+/**
+ * @module neue/events
+ * Pub/Sub events: Allows modules to communicate via publishing
+ * and subscribing to events.
+ *
+ * Based on Addy Osmani's Pubsubz, licensed under the GPL.
+ * https://github.com/addyosmani/pubsubz
+ * http://jsfiddle.net/LxPrq/
+ */
+
+define('neue/events',[],function() {
+
+
+ var topics = {};
+ var subUid = -1;
+
+ var publish = function(topic, args) {
+ if (!topics[topic]) {
+ return false;
+ }
+
+ setTimeout(function() {
+ var subscribers = topics[topic],
+ len = subscribers ? subscribers.length : 0;
+
+ while(len--) {
+ subscribers[len].func(topic, args);
+ }
+ }, 0);
+
+ return true;
+ };
+
+ var subscribe = function(topic, func) {
+ if (!topics[topic]) {
+ topics[topic] = [];
+ }
+
+ var token = (++subUid).toString();
+ topics[topic].push({
+ token: token,
+ func: func
+ });
+
+ return token;
+ };
+
+ var unsubscribe = function(token) {
+ for (var m in topics) {
+ if (topics[m]) {
+ for (var i = 0, j = topics[m].length; i < j; i++) {
+ if (topics[m][i].token === token) {
+ topics[m].splice(i, 1);
+ return token;
+ }
+ }
+ }
+ }
+
+ return false;
+ };
+
+ // Export public API
+ return {
+ publish: publish,
+ subscribe: subscribe,
+ unsubscribe: unsubscribe
+ };
+});
+
+/**
+ * Applies a smooth-scroll animation on links with the `.js-jump-scroll` class.
+ */
+
+define('neue/jump-scroll',[],function() {
+
+
+ var $ = window.jQuery;
+
+ $(function() {
+ $(".js-jump-scroll").on("click", function(event) {
+ event.preventDefault();
+
+ var href = $(this).attr("href");
+
+ // Animate scroll position to the target of the link:
+ $("html,body").animate({scrollTop: $(event.target.hash).offset().top}, "slow", function() {
+ // Finally, set the correct hash in the address bar.
+ window.location.hash = href;
+ });
+ });
+ });
+});
+
+/**
+ * Initializes site-wide menu chrome functionality.
+ */
+
+define('neue/menu',[],function() {
+
+
+ var $ = window.jQuery;
+
+ $(function() {
+ // Toggle dropdown menu navigation on mobile:
+ $(".js-toggle-mobile-menu").on("click", function() {
+ $(".chrome--nav").toggleClass("is-visible");
+ });
+
+ // Hide footer on mobile until clicked
+ $(".js-footer-col").addClass("is-collapsed");
+ $(".js-footer-col h4").on("click", function() {
+ if( window.matchMedia("screen and (max-width: 768px)").matches ) {
+ $(this).closest(".js-footer-col").toggleClass("is-collapsed");
+ }
+ });
+ });
+});
+
+/**
+ * @module neue/messages
+ * System Messages. Will create a close ("X") button
+ * for users with JavaScript enabled that uses the following
+ * syntax to hook into this function:
+ *
+ * @example
+ * // Alert! You win.
+ *
+ * @returns
+ * // Alert! You win.
+ * //
x
+ * //
+ */
+
+define('neue/messages',[],function() {
+
+
+ var $ = window.jQuery;
+
+ var messageClose = "× ";
+
+ /**
+ * Adds a close button to system message banner, with optional callback.
+ *
+ * @param {jQuery} $messages Object containing message divs to be modified.
+ * @param {function} callback Callback fired after message is closed.
+ */
+ var attachCloseButton = function($messages, callback) {
+ // Create message close button
+ $messages.append(messageClose);
+
+ // Close message when "x" is clicked:
+ $messages.on("click", ".js-close-message", function(event) {
+ event.preventDefault();
+ $(this).parent(".messages").slideUp();
+
+ if(callback && typeof callback === "function") {
+ callback();
+ }
+ });
+ };
+
+ // Prepare any messages in the DOM on load
+ $(function() {
+ attachCloseButton( $(".messages") );
+ });
+
+ return {
+ attachCloseButton: attachCloseButton
+ };
+});
+
+/**
+ * @module neue/modal
+ * Show/hide modals. Link should have `.js-modal-link` class, and
+ * it's `href` should point to the hash of the modal. By convention, the
+ * modal ID should be prefixed with `modal--` like so:
+ *
+ * @example
+ * //
+ *
+ */
+
+define('neue/modal',['require','./events'],function(require) {
+
+
+ var $ = window.jQuery;
+ var Modernizr = window.Modernizr;
+ var Events = require("./events");
+
+ // We can only have one modal open at a time; we track that here.
+ var modalIsOpen = false;
+
+ // The modal container (including background overlay).
+ var $modal = null;
+
+ // The content of the modal.
+ var $modalContent = null;
+
+ // Reference to current modal source
+ var $reference = null;
+
+ // Return a boolean if modal is open or not
+ var isOpen = function() {
+ return modalIsOpen;
+ };
+
+ // Click handler for opening a new modal
+ var _openHandler = function(event) {
+ event.preventDefault();
+ var href = "";
+
+ if( $(this).data("cached-modal") ) {
+ // Preferred method: We load the modal specified in the `data-cached-modal` attribute.
+ // This allows `href` to act as a backup if JS is disabled. For example,
+ // `Click `
+ // would open a modal with the contents of `
`.
+ href = $($(this).data("cached-modal"));
+ } else if ( event.target.hash.charAt(0) === "#" ) {
+ // We find the modal based on the ID in the link"s `href`. For example,
+ // `Click me ` would open
+ // `
`.
+ href = $(event.target.hash);
+ } else {
+ // @TODO: We should handle AJAX loading things in.
+ }
+
+ open(href);
+ };
+
+ /**
+ * Open a new modal
+ * @param {jQuery} el Element that will be placed inside the modal.
+ * @param {boolean} [animated=true] Use animation for opening the modal.
+ */
+ var open = function($el, animated) {
+ // Default arguments
+ animated = typeof animated !== "undefined" ? animated : true;
+
+ var id = $el.attr("id");
+ if(id) {
+ // Save ID of modal for future reference
+ $reference = "#" + id;
+
+ // Set URL hash in the browser
+ window.location.hash = "#" + id;
+ } else {
+ $reference = "";
+ }
+
+ // If Google Analytics is set up, we fire an event to track that a
+ // modal has been opened.
+ if(typeof(_gaq) !== "undefined" && _gaq !== null) {
+ _gaq.push(["_trackEvent", "Modal", "Open", $reference, null, true]);
+ }
+
+ if( !modalIsOpen ) {
+ // create modal in DOM
+ $modal = $("
");
+ $modalContent = $("
");
+ $modal.append($modalContent);
+ $modalContent.html( $el.html() );
+
+ // set up overlay and show modal
+ $("body").addClass("modal-open");
+ $("body").append($modal);
+
+ if(animated && Modernizr.cssanimations) {
+ $modal.addClass("fade-in");
+ $modalContent.addClass("fade-in-up");
+ }
+
+ // copy classes from modal source
+ $modalContent.removeClass();
+ $modalContent.addClass("modal-content");
+ $modalContent.addClass( $el.attr("class") );
+
+ $modal.show();
+
+ // Bind events to close Modal
+ $modal.on("click", ".js-close-modal", _closeHandler);
+ $modal.on("click", _closeHandler);
+
+ modalIsOpen = true;
+
+ // **This fixes an issue with `position:fixed` and the virtual keyboard
+ // on Mobile Safari.** Since this is a browser bug, we're forced to use
+ // browser-detection here, and should look into removing this as soon
+ // as this is fixed in the future. Yes, it is gross.
+ if( /iPhone|iPad|iPod/i.test(window.navigator.userAgent) ) {
+ setTimeout(function () {
+ $modal.css({ "position": "absolute", "overflow": "visible", "height": $(document).height() + "px" });
+ $modalContent.css({ "margin-top": $(document).scrollTop() + "px" });
+ }, 0);
+ }
+ } else {
+ // modal is already open, so just replace current content
+ $modalContent.removeClass();
+ $modalContent.addClass("modal-content");
+ $modalContent.addClass( $el.attr("class") );
+ $modalContent.html( $($el).html() );
+ }
+
+
+
+ // We provide an event that other modules can hook into to perform custom functionality when
+ // a modal opens (such as preparing things that are added to the DOM, etc.)
+ Events.publish("Modal:opened", $modalContent);
+
+ // If Drupal has some messages on the screen, move them inside the modal
+ // @TODO: We need a better solution for this.
+ var $messages = $(".messages");
+ var $messagesClone = $modalContent.find(".js-messages-clone");
+ if($messagesClone && $messages.length ) {
+ $messagesClone.addClass("modal-messages");
+ $messagesClone.html( $messages[0].outerHTML );
+ $messagesClone.find(".js-close-message").remove();
+ }
+ };
+
+ var _closeHandler = function(event) {
+ // Don't let the event bubble.
+ if(event.target !== this) {
+ return;
+ }
+
+ // Only close if this modal has a close button
+ if($modalContent.find(".js-close-modal").length === 0) {
+ return;
+ }
+
+ // Override default link behavior.
+ event.preventDefault();
+
+ close();
+ };
+
+ /**
+ * Close the active modal.
+ * @param {boolean} [animated=true] Use animation for closing the modal.
+ */
+ var close = function(animated) {
+ // Default arguments
+ animated = typeof animated !== "undefined" ? animated : true;
+
+ // Remove URL hash for modal from browser
+ if(window.location.hash === $reference) {
+ window.location.hash = "/";
+ }
+
+ // If Google Analytics is set up, we fire an event to track that a
+ // modal has been closed.
+ if(typeof(_gaq) !== "undefined" && _gaq !== null) {
+ _gaq.push(["_trackEvent", "Modal", "Close", $reference, null, true]);
+ }
+
+ if(animated && Modernizr.cssanimations) {
+ $modalContent.addClass("fade-out-down");
+ $modal.addClass("fade-out");
+
+ $("body").removeClass("modal-open");
+
+ $modal.one("webkitAnimationEnd oanimationend msAnimationEnd animationend", function() {
+ $modal.remove();
+ modalIsOpen = false;
+ });
+ } else {
+ $("body").removeClass("modal-open");
+ $modal.remove();
+ modalIsOpen = false;
+ }
+ };
+
+ $(document).ready(function() {
+ // Attach modal handler to `.js-modal-link` elements on click
+ $("body").on("click", ".js-modal-link", _openHandler);
+
+ //If there's a hash in the URL, let's check if its a modal and load it
+ var hash = window.location.hash;
+ if(hash && hash !== "#/" && $(hash) && $(hash).attr("type") === "text/cached-modal" ) {
+ open($(hash), false);
+ }
+
+ // Close modal events are bound on modal initialization.
+ });
+
+
+ // Return public API for controlling modals
+ return {
+ isOpen: isOpen,
+ open: open,
+ close: close
+ };
+
+});
+
+/**
+ * Indicates current section in nav on scroll. Applies an `.is-active`
+ * class when the specified `href` reaches the top of the viewport.
+ *
+ * Triggered by a `.js-scroll-indicator` on a link.
+ */
+
+define('neue/scroll-indicator',[],function() {
+
+
+ var $ = window.jQuery;
+
+ var links = [];
+
+ // Prepare all `.js-scroll-indicator` links on the page.
+ function preparePage() {
+ links = [];
+
+ $(".js-scroll-indicator").each(function(index, link) {
+ prepareIndicator(link);
+ });
+ }
+
+ // Registers links and their targets with scroll handler
+ function prepareIndicator(link) {
+ // Calculate the element's offset from the top of the page while anchored
+ var linkTarget = $(link).attr("href");
+ var linkTargetOffset = $(linkTarget).offset().top;
+
+ // Create the data structure that we'll store this stuff in
+ var linkObj = {
+ $el: $(link),
+ targetOffset: linkTargetOffset
+ };
+
+ // Add jQuery object and offset value to links array
+ links.push(linkObj);
+
+ // Now that we're ready, let's calculate how stickies should be displayed
+ updateScrollIndicators();
+ }
+
+ // Scroll handler: highlights the furthest link the user has passed
+ function updateScrollIndicators() {
+ $.each(links, function(index, link) {
+ // In reverse order (moving up the nav from the bottom), check whether
+ // we've scrolled past the link's target. If so, set active and stop.
+ var windowOffset = $(window).scrollTop() + link.$el.height();
+ if (windowOffset > link.targetOffset) {
+ $(".js-scroll-indicator").removeClass("is-active");
+ link.$el.addClass("is-active");
+ return;
+ }
+ });
+ }
+
+ // Attach our functions to their respective events.
+ $(function() {
+ preparePage();
+
+ $(window).on("scroll", updateScrollIndicators);
+ $(window).on("resize", preparePage);
+ });
+
+});
+
+/**
+ * Pins an element to the top of the screen on scroll.
+ *
+ * Requires pinned element to have `.js-sticky` class, and have
+ * a `.is-stuck` modifier class in its CSS (which allows
+ * customized sticky behavior based on media queries).
+ *
+ * @example
+ * // .sidebar {
+ * // &.is-stuck {
+ * // position: fixed;
+ * // top: 0;
+ * // }
+ * // }
+ *
+ */
+
+define('neue/sticky',[],function() {
+
+
+ var $ = window.jQuery;
+
+ var divs = [];
+
+ // Prepare all `.js-sticky` divs on the page.
+ function preparePage() {
+ divs = [];
+
+ $(".js-sticky").each(function(index, div) {
+ prepareSticky(div);
+ });
+ }
+
+ // Prepare markup and register divs with scroll handler
+ function prepareSticky(div) {
+ // Calculate the element's offset from the top of the page while anchored
+ var divOffset = $(div).offset().top;
+
+ // Create the data structure that we'll store this stuff in
+ var divObj = {
+ $el: $(div),
+ offset: divOffset
+ };
+
+ // Add jQuery object and offset value to divs array
+ divs.push(divObj);
+
+ // Now that we're ready, let's calculate how stickies should be displayed
+ scrollSticky();
+ }
+
+ // Scroll handler: pins/unpins divs on scroll event
+ function scrollSticky() {
+ $.each(divs, function(index, div) {
+ // Compare the distance to the top of the page with the distance scrolled.
+ // For each div: if we've scrolled past it's offset, pin it to top.
+ if ($(window).scrollTop() > div.offset) {
+ div.$el.addClass("is-stuck");
+ } else {
+ div.$el.removeClass("is-stuck");
+ }
+ });
+ }
+
+ // Attach our functions to their respective events.
+ $(function() {
+ preparePage();
+
+ $(window).on("scroll", scrollSticky);
+ $(window).on("resize", preparePage);
+ });
+});
+
+/**
+ * Client-side form validation logic. Form element is validated based
+ * on `data-validate` attribute, and validation output is placed in
+ * corresponding ``.
+ *
+ * Validations can be added later by extending `NEUE.Validation.Validations`.
+ * Validators can be added later by extending `NEUE.Validation.Validators`.
+ *
+ * finished validating with a boolean `success` and a plain-text `message`
+ * value. (Alternatively, a `suggestion` value can be passed which will
+ * prompt the user "Did you mean {suggestion}?".
+ *
+ * ## Usage Notes:
+ * - Input field must have `data-validate` attribute.
+ * - If adding input fields to the DOM after load, run `prepareFields`
+ */
+
+define('neue/validation',['require','./events'],function(require) {
+
+
+ var $ = window.jQuery;
+ var Events = require("./events");
+
+ var validations = [];
+
+ /**
+ * Prepares form label DOM to display validation messages & register event handler
+ * @param {jQuery} $fields Fields to register validation handlers to.
+ */
+ var prepareFields = function($fields) {
+ $fields.each(function() {
+ var $field = $(this);
+
+ if($field.prop("tagName") === "INPUT") {
+ // If [data-validate] is set on a element, prepare it's
+ // associated label, and attach a "blur" event to trigger validation
+ prepareLabel( $("label[for='" + $field.attr("id") + "']") );
+
+ $field.on("blur", function(event) {
+ event.preventDefault();
+ validateField( $(this) );
+ });
+ } else if($field.prop("tagName") === "FIELDSET") {
+ // If [data-validate] is set on a element, prepare all
+ // inside fieldset, and attach blur/change event to all fields
+ // inside fieldset.
+ $field.find("label").each(function() {
+ prepareLabel( $(this) );
+ })
+
+ $field.find("input, textarea").on("blur", function(event) {
+ event.preventDefault();
+ validateField( $field );
+ });
+
+ $field.find("select").on("change", function(event) {
+ event.preventDefault();
+ validateField( $field );
+ });
+ }
+ });
+ };
+
+ /**
+ * Prepare field label DOM to display validation messages.
+ * @param {jQuery} $label Label element to prepare.
+ */
+ var prepareLabel = function($label) {
+ // Check to make sure we haven't already prepared this before
+ if($label.find(".inner-label").length === 0) {
+ var $innerLabel = $("
");
+ $innerLabel.append("" + $label.html() + "
");
+ $innerLabel.append("
");
+
+ $label.html($innerLabel);
+ }
+ }
+
+ /**
+ * Trigger a validation on a form element or fieldset.
+ * @param {jQuery} $field Form element to be validated.
+ * @param {jQuery} [force = false] Force validation (even on empty fields).
+ * @param {function} [callback=showValidationMessage] Callback function that receives validation result
+ */
+ var validateField = function($field, force, callback) {
+ // Default arguments
+ force = typeof force !== "undefined" ? force : false;
+ callback = typeof callback !== "undefined" ? callback : function($fieldLabel, result) {
+ showValidationMessage($fieldLabel, result);
+ };
+
+ var validation = $field.data("validate");
+
+ // Don't validate if validation doesn't exist
+ if(!validations[validation]) {
+ console.error("A validation with the name "+ validation + " has not been registered.");
+ return;
+ }
+
+ if($field.prop("tagName") === "INPUT") {
+ // Get field info
+ var fieldValue = $field.val();
+ var $fieldLabel = $("label[for='" + $field.attr("id") + "']");
+
+
+ // Finally, let's not validate blank fields unless forced to
+ if(force || $field.val() !== "") {
+
+ validations[validation].fn(fieldValue, function(result) {
+ callback($fieldLabel, result);
+ });
+
+ }
+ } else if($field.prop("tagName") === "FIELDSET") {
+ var fieldSetContents = $field.find("input, textarea, select");
+ validations[validation].fn( fieldSetContents , function(result) {
+ //@TODO: Look through returned JSON, and if corresponds to child element, show message on it's label
+
+ callback($fieldLabel, result);
+ });
+ }
+ };
+
+
+ /**
+ * Register a new validation.
+ *
+ * @param {String} name The name function will be referenced by in `data-validate` attribute.
+ * @param {Object} validation Collection of validation rules to apply
+ * @param {Function} [validation.fn] Custom validation, with callback `done(success[boolean], suggestion[string])`.
+ *
+ */
+ var registerValidation = function(name, validation) {
+ if(validations[name]) {
+ throw "A validation function with that name has already been registered";
+ }
+
+ validations[name] = validation;
+ };
+
+ /**
+ * @DEPRECATED: Will be removed in a future version in favor of `registerValidation`.
+ */
+ var registerValidationFunction = function(name, func) {
+ var v = {
+ fn: func
+ }
+
+ registerValidation(name, v);
+ };
+
+ /**
+ * Show validation message in markup.
+ *
+ * @param {jQuery} $fieldLabel Label to display validation message within.
+ * @param {Object} result Object containing `success` and either `message` or `suggestion`
+ */
+ var showValidationMessage = function($fieldLabel, result) {
+ var $field = $("#" + $fieldLabel.attr("for"));
+ var $fieldMessage = $fieldLabel.find(".message");
+
+ $field.removeClass("success error warning shake");
+ $fieldMessage.removeClass("success error warning");
+
+ // Highlight/animate field
+ if(result.success === true) {
+ $field.addClass("success");
+ $fieldMessage.addClass("success");
+ } else {
+ $field.addClass("shake");
+ $field.addClass("error");
+ $fieldMessage.addClass("error");
+
+ // If Google Analytics is set up, we fire an event to
+ // mark that an error has occurred
+ if(typeof(_gaq) !== "undefined" && _gaq !== null) {
+ _gaq.push(["_trackEvent", "Form", "Inline Validation Error", $fieldLabel.attr("for"), null, true]);
+ }
+ }
+
+ // Show validation message
+ if(result.message) {
+ $fieldMessage.text(result.message);
+ }
+
+ if(result.suggestion) {
+ $fieldMessage.html("Did you mean " + result.suggestion.full + "? Fix it! ");
+ $field.addClass("warning");
+ $fieldMessage.addClass("warning");
+
+
+ // If Google Analytics is set up, we fire an event to
+ // mark that a suggestion has been made
+ if(typeof(_gaq) !== "undefined" && _gaq !== null) {
+ _gaq.push(["_trackEvent", "Form", "Mailcheck Suggestion", result.suggestion.domain, null, true]);
+ }
+ }
+
+ $fieldLabel.addClass("show-message");
+
+ $(".js-mailcheck-fix").on("click", function(e) {
+ e.preventDefault();
+
+ var $field = $("#" + $(this).closest("label").attr("for"));
+ $field.val($(this).data("suggestion"));
+ $field.trigger("blur");
+
+ // If Google Analytics is set up, we fire an event to
+ // mark that a suggestion has been made
+ if(typeof(_gaq) !== "undefined" && _gaq !== null) {
+ _gaq.push(["_trackEvent", "Form", "Mailcheck Suggestion Used", $(this).text(), null, true]);
+ }
+
+ });
+
+ $field.on("focus", function() {
+ $field.removeClass("warning error success shake");
+ $fieldLabel.removeClass("show-message");
+ });
+
+ return result.success;
+ }
+
+ /**
+ * Validate form on submit.
+ */
+ $("body").on("submit", "form", function(e, isValidated) {
+ if(isValidated === true) {
+ // we're ready to submit the form
+
+ // If Google Analytics is set up, we fire an event to
+ // mark that the form has been successfully submitted
+ if(typeof(_gaq) !== "undefined" && _gaq !== null) {
+ _gaq.push(["_trackEvent", "Form", "Submitted", $(this).attr("id"), null, false]);
+ }
+
+ return true;
+ } else {
+ var $form = $(this);
+ var $validationFields = $form.find("[data-validate]").filter("[data-validate-required]");
+ var validatedResults = [];
+
+ $validationFields.each(function() {
+ validateField($(this), function($fieldLabel, result) {
+ if( result.success ) {
+ validatedResults.push(true);
+ }
+
+ if(validatedResults.length === $validationFields.length) {
+ // we've validated all that can be validated
+ $form.trigger("submit", true);
+ } else {
+ // some validation errors exist on the form
+
+ // If Google Analytics is set up, we fire an event to
+ // mark that the form had some errors
+ if(typeof(_gaq) !== "undefined" && _gaq !== null) {
+ _gaq.push(["_trackEvent", "Form", "Validation Error on submit", $(this).attr("id"), null, true]);
+ }
+
+ }
+ });
+ });
+
+ if($validationFields.length === 0) {
+ // if there are no fields to be validated, submit!
+ $form.trigger("submit", true);
+ }
+
+ return false; // don't submit form, wait for callback with `true` parameter
+ }
+ });
+
+ // Register the "match" validation.
+ registerValidationFunction("match", function(string, secondString, done) {
+ if(string === secondString && string !== "") {
+ return done({
+ success: true,
+ message: "Looks good!"
+ });
+ } else {
+ return done({
+ success: false,
+ message: "That doesn't match."
+ });
+ }
+ });
+
+ $(function() {
+ // Prepare the labels on any `[data-validate]` fields in the DOM at load
+ prepareFields( $("body").find("[data-validate]") );
+
+ Events.subscribe("Modal:opened", function(topic, args) {
+ prepareFields(args.find("[data-validate]"));
+ });
+ });
+
+ return {
+ prepareFields: prepareFields,
+ registerValidation: registerValidation,
+ registerValidationFunction: registerValidationFunction,
+ Validations: validations
+ };
+});
+
+/**
+ * Main build script. This will compile modules into `neue.js`
+ * and `neue.min.js` in dist package, and attach each module to
+ * a NEUE global variable attached to the window.
+ */
+
+define('neue/main',['require','./carousel','./events','./jump-scroll','./menu','./messages','./modal','./scroll-indicator','./sticky','./validation'],function(require) {
+
+
+ // Attach modules to window
+ window.NEUE = {
+ Carousel: require("./carousel"),
+ Events: require("./events"),
+ JumpScroll: require("./jump-scroll"),
+ Menu: require("./menu"),
+ Messages: require("./messages"),
+ Modal: require("./modal"),
+ ScrollIndicator: require("./scroll-indicator"),
+ Sticky: require("./sticky"),
+ Validation: require("./validation")
+ };
+
+ return window.NEUE;
+});
+
+
+require(["neue/main"]);
+}());
\ No newline at end of file
diff --git a/neue.min.js b/neue.min.js
new file mode 100644
index 00000000..efabc1a2
--- /dev/null
+++ b/neue.min.js
@@ -0,0 +1 @@
+!function(){var a,b,c;!function(d){function e(a,b){return u.call(a,b)}function f(a,b){var c,d,e,f,g,h,i,j,k,l,m,n=b&&b.split("/"),o=s.map,p=o&&o["*"]||{};if(a&&"."===a.charAt(0))if(b){for(n=n.slice(0,n.length-1),a=a.split("/"),g=a.length-1,s.nodeIdCompat&&w.test(a[g])&&(a[g]=a[g].replace(w,"")),a=n.concat(a),k=0;k0&&(a.splice(k-1,2),k-=2)}a=a.join("/")}else 0===a.indexOf("./")&&(a=a.substring(2));if((n||p)&&o){for(c=a.split("/"),k=c.length;k>0;k-=1){if(d=c.slice(0,k).join("/"),n)for(l=n.length;l>0;l-=1)if(e=o[n.slice(0,l).join("/")],e&&(e=e[d])){f=e,h=k;break}if(f)break;!i&&p&&p[d]&&(i=p[d],j=k)}!f&&i&&(f=i,h=j),f&&(c.splice(0,h,f),a=c.join("/"))}return a}function g(a,b){return function(){return n.apply(d,v.call(arguments,0).concat([a,b]))}}function h(a){return function(b){return f(b,a)}}function i(a){return function(b){q[a]=b}}function j(a){if(e(r,a)){var b=r[a];delete r[a],t[a]=!0,m.apply(d,b)}if(!e(q,a)&&!e(t,a))throw new Error("No "+a);return q[a]}function k(a){var b,c=a?a.indexOf("!"):-1;return c>-1&&(b=a.substring(0,c),a=a.substring(c+1,a.length)),[b,a]}function l(a){return function(){return s&&s.config&&s.config[a]||{}}}var m,n,o,p,q={},r={},s={},t={},u=Object.prototype.hasOwnProperty,v=[].slice,w=/\.js$/;o=function(a,b){var c,d=k(a),e=d[0];return a=d[1],e&&(e=f(e,b),c=j(e)),e?a=c&&c.normalize?c.normalize(a,h(b)):f(a,b):(a=f(a,b),d=k(a),e=d[0],a=d[1],e&&(c=j(e))),{f:e?e+"!"+a:a,n:a,pr:e,p:c}},p={require:function(a){return g(a)},exports:function(a){var b=q[a];return"undefined"!=typeof b?b:q[a]={}},module:function(a){return{id:a,uri:"",exports:q[a],config:l(a)}}},m=function(a,b,c,f){var h,k,l,m,n,s,u=[],v=typeof c;if(f=f||a,"undefined"===v||"function"===v){for(b=!b.length&&c.length?["require","exports","module"]:b,n=0;nd;d++)if(a[c][d].token===b)return a[c].splice(d,1),b;return!1};return{publish:c,subscribe:d,unsubscribe:e}}),c("neue/jump-scroll",[],function(){var $=window.jQuery;$(function(){$(".js-jump-scroll").on("click",function(a){a.preventDefault();var b=$(this).attr("href");$("html,body").animate({scrollTop:$(a.target.hash).offset().top},"slow",function(){window.location.hash=b})})})}),c("neue/menu",[],function(){var $=window.jQuery;$(function(){$(".js-toggle-mobile-menu").on("click",function(){$(".chrome--nav").toggleClass("is-visible")}),$(".js-footer-col").addClass("is-collapsed"),$(".js-footer-col h4").on("click",function(){window.matchMedia("screen and (max-width: 768px)").matches&&$(this).closest(".js-footer-col").toggleClass("is-collapsed")})})}),c("neue/messages",[],function(){var $=window.jQuery,a='× ',b=function(b,c){b.append(a),b.on("click",".js-close-message",function(a){a.preventDefault(),$(this).parent(".messages").slideUp(),c&&"function"==typeof c&&c()})};return $(function(){b($(".messages"))}),{attachCloseButton:b}}),c("neue/modal",["require","./events"],function(a){var $=window.jQuery,b=window.Modernizr,c=a("./events"),d=!1,e=null,f=null,g=null,h=function(){return d},i=function(a){a.preventDefault();var b="";$(this).data("cached-modal")?b=$($(this).data("cached-modal")):"#"===a.target.hash.charAt(0)&&(b=$(a.target.hash)),j(b)},j=function(a,h){h="undefined"!=typeof h?h:!0;var i=a.attr("id");i?(g="#"+i,window.location.hash="#"+i):g="","undefined"!=typeof _gaq&&null!==_gaq&&_gaq.push(["_trackEvent","Modal","Open",g,null,!0]),d?(f.removeClass(),f.addClass("modal-content"),f.addClass(a.attr("class")),f.html($(a).html())):(e=$('
'),f=$("
"),e.append(f),f.html(a.html()),$("body").addClass("modal-open"),$("body").append(e),h&&b.cssanimations&&(e.addClass("fade-in"),f.addClass("fade-in-up")),f.removeClass(),f.addClass("modal-content"),f.addClass(a.attr("class")),e.show(),e.on("click",".js-close-modal",k),e.on("click",k),d=!0,/iPhone|iPad|iPod/i.test(window.navigator.userAgent)&&setTimeout(function(){e.css({position:"absolute",overflow:"visible",height:$(document).height()+"px"}),f.css({"margin-top":$(document).scrollTop()+"px"})},0)),c.publish("Modal:opened",f);var j=$(".messages"),l=f.find(".js-messages-clone");l&&j.length&&(l.addClass("modal-messages"),l.html(j[0].outerHTML),l.find(".js-close-message").remove())},k=function(a){a.target===this&&0!==f.find(".js-close-modal").length&&(a.preventDefault(),l())},l=function(a){a="undefined"!=typeof a?a:!0,window.location.hash===g&&(window.location.hash="/"),"undefined"!=typeof _gaq&&null!==_gaq&&_gaq.push(["_trackEvent","Modal","Close",g,null,!0]),a&&b.cssanimations?(f.addClass("fade-out-down"),e.addClass("fade-out"),$("body").removeClass("modal-open"),e.one("webkitAnimationEnd oanimationend msAnimationEnd animationend",function(){e.remove(),d=!1})):($("body").removeClass("modal-open"),e.remove(),d=!1)};return $(document).ready(function(){$("body").on("click",".js-modal-link",i);var a=window.location.hash;a&&"#/"!==a&&$(a)&&"text/cached-modal"===$(a).attr("type")&&j($(a),!1)}),{isOpen:h,open:j,close:l}}),c("neue/scroll-indicator",[],function(){function a(){d=[],$(".js-scroll-indicator").each(function(a,c){b(c)})}function b(a){var b=$(a).attr("href"),e=$(b).offset().top,f={$el:$(a),targetOffset:e};d.push(f),c()}function c(){$.each(d,function(a,b){var c=$(window).scrollTop()+b.$el.height();return c>b.targetOffset?($(".js-scroll-indicator").removeClass("is-active"),void b.$el.addClass("is-active")):void 0})}var $=window.jQuery,d=[];$(function(){a(),$(window).on("scroll",c),$(window).on("resize",a)})}),c("neue/sticky",[],function(){function a(){d=[],$(".js-sticky").each(function(a,c){b(c)})}function b(a){var b=$(a).offset().top,e={$el:$(a),offset:b};d.push(e),c()}function c(){$.each(d,function(a,b){$(window).scrollTop()>b.offset?b.$el.addClass("is-stuck"):b.$el.removeClass("is-stuck")})}var $=window.jQuery,d=[];$(function(){a(),$(window).on("scroll",c),$(window).on("resize",a)})}),c("neue/validation",["require","./events"],function(a){var $=window.jQuery,b=a("./events"),c=[],d=function(a){a.each(function(){var a=$(this);"INPUT"===a.prop("tagName")?(e($("label[for='"+a.attr("id")+"']")),a.on("blur",function(a){a.preventDefault(),f($(this))})):"FIELDSET"===a.prop("tagName")&&(a.find("label").each(function(){e($(this))}),a.find("input, textarea").on("blur",function(b){b.preventDefault(),f(a)}),a.find("select").on("change",function(b){b.preventDefault(),f(a)}))})},e=function(a){if(0===a.find(".inner-label").length){var b=$("
");b.append(""+a.html()+"
"),b.append("
"),a.html(b)}},f=function(a,b,d){b="undefined"!=typeof b?b:!1,d="undefined"!=typeof d?d:function(a,b){i(a,b)};var e=a.data("validate");if(!c[e])return void console.error("A validation with the name "+e+" has not been registered.");if("INPUT"===a.prop("tagName")){var f=a.val(),g=$("label[for='"+a.attr("id")+"']");(b||""!==a.val())&&c[e].fn(f,function(a){d(g,a)})}else if("FIELDSET"===a.prop("tagName")){var h=a.find("input, textarea, select");c[e].fn(h,function(a){d(g,a)})}},g=function(a,b){if(c[a])throw"A validation function with that name has already been registered";c[a]=b},h=function(a,b){var c={fn:b};g(a,c)},i=function(a,b){var c=$("#"+a.attr("for")),d=a.find(".message");return c.removeClass("success error warning shake"),d.removeClass("success error warning"),b.success===!0?(c.addClass("success"),d.addClass("success")):(c.addClass("shake"),c.addClass("error"),d.addClass("error"),"undefined"!=typeof _gaq&&null!==_gaq&&_gaq.push(["_trackEvent","Form","Inline Validation Error",a.attr("for"),null,!0])),b.message&&d.text(b.message),b.suggestion&&(d.html("Did you mean "+b.suggestion.full+"? Fix it! "),c.addClass("warning"),d.addClass("warning"),"undefined"!=typeof _gaq&&null!==_gaq&&_gaq.push(["_trackEvent","Form","Mailcheck Suggestion",b.suggestion.domain,null,!0])),a.addClass("show-message"),$(".js-mailcheck-fix").on("click",function(a){a.preventDefault();var b=$("#"+$(this).closest("label").attr("for"));b.val($(this).data("suggestion")),b.trigger("blur"),"undefined"!=typeof _gaq&&null!==_gaq&&_gaq.push(["_trackEvent","Form","Mailcheck Suggestion Used",$(this).text(),null,!0])}),c.on("focus",function(){c.removeClass("warning error success shake"),a.removeClass("show-message")}),b.success};return $("body").on("submit","form",function(a,b){if(b===!0)return"undefined"!=typeof _gaq&&null!==_gaq&&_gaq.push(["_trackEvent","Form","Submitted",$(this).attr("id"),null,!1]),!0;var c=$(this),d=c.find("[data-validate]").filter("[data-validate-required]"),e=[];return d.each(function(){f($(this),function(a,b){b.success&&e.push(!0),e.length===d.length?c.trigger("submit",!0):"undefined"!=typeof _gaq&&null!==_gaq&&_gaq.push(["_trackEvent","Form","Validation Error on submit",$(this).attr("id"),null,!0])})}),0===d.length&&c.trigger("submit",!0),!1}),h("match",function(a,b,c){return c(a===b&&""!==a?{success:!0,message:"Looks good!"}:{success:!1,message:"That doesn't match."})}),$(function(){d($("body").find("[data-validate]")),b.subscribe("Modal:opened",function(a,b){d(b.find("[data-validate]"))})}),{prepareFields:d,registerValidation:g,registerValidationFunction:h,Validations:c}}),c("neue/main",["require","./carousel","./events","./jump-scroll","./menu","./messages","./modal","./scroll-indicator","./sticky","./validation"],function(a){return window.NEUE={Carousel:a("./carousel"),Events:a("./events"),JumpScroll:a("./jump-scroll"),Menu:a("./menu"),Messages:a("./messages"),Modal:a("./modal"),ScrollIndicator:a("./scroll-indicator"),Sticky:a("./sticky"),Validation:a("./validation")},window.NEUE}),b(["neue/main"])}();
\ No newline at end of file
diff --git a/tasks/build.js b/tasks/build.js
deleted file mode 100644
index e9f38beb..00000000
--- a/tasks/build.js
+++ /dev/null
@@ -1,8 +0,0 @@
-module.exports = function(grunt) {
- // The `build` task compiles assets for local development (unminified, with debugging comments).
- grunt.registerTask("build", ["lint", "sass:compile", "requirejs:compile", "copy:main"]);
-
- // The `prod` build task is used when building for production. Since compiled assets
- // are ignored in version control, this is run in Continuous Integration on deploy.
- grunt.registerTask("prod", ["shell:clean", "sass:compile", "cssmin:minify", "copy:main", "requirejs:compile", "uglify:prod"]);
-}
diff --git a/tasks/default.js b/tasks/default.js
deleted file mode 100644
index 738a0238..00000000
--- a/tasks/default.js
+++ /dev/null
@@ -1,3 +0,0 @@
-module.exports = function(grunt) {
- grunt.registerTask("default", ["build", "watch"]);
-};
diff --git a/tasks/deploy.js b/tasks/deploy.js
deleted file mode 100644
index 267f2d21..00000000
--- a/tasks/deploy.js
+++ /dev/null
@@ -1,21 +0,0 @@
-module.exports = function(grunt) {
- grunt.registerTask("deploy", "Runs tests and lints code, compiles for production, deploys master to the dist branch, and makes a git tag.", function(ver) {
- // Bump semantic version. Default to incrementing 'patch'.
- validBumps = ["patch", "minor", "major"];
- ver = ver || "patch";
-
- if( validBumps.indexOf(ver) === -1 ) {
- throw grunt.util.error("Invalid bump type: choose 'deploy:patch' (default), 'deploy:minor', or 'deploy:major'.");
- }
-
- // 1. Bump version using grunt-bump.
- // 2. Check that we're on "dev"
- // 3. Check that the current tag is valid.
- // 4. Compile for production before testing.
- // 5. Test and lint to catch any potential errors.
- // 6. Check that the repo is clean, since we're about to do some *serious shit*.
- // 7. Go crazy (i.e. run "shell:dist" task).
-
- grunt.task.run("bump:" + ver, "checkbranch:dev", "checkrepo:validtag", "prod", "test:js", "lint", "checkrepo:clean", "shell:dist");
- });
-}
diff --git a/tasks/lint.js b/tasks/lint.js
deleted file mode 100644
index 47d9571d..00000000
--- a/tasks/lint.js
+++ /dev/null
@@ -1,6 +0,0 @@
-module.exports = function(grunt) {
- grunt.registerTask("lint", ["lint:js", "lint:css"]);
-
- grunt.registerTask("lint:js", ["jshint:all"]);
- grunt.registerTask("lint:css", ["shell:scsslint"]);
-}
diff --git a/tasks/options/bump.js b/tasks/options/bump.js
deleted file mode 100644
index 78abdd06..00000000
--- a/tasks/options/bump.js
+++ /dev/null
@@ -1,9 +0,0 @@
-module.exports = {
- options: {
- files: ["package.json", "bower.json"],
- commitFiles: ["package.json", "bower.json"],
- updateConfigs: ["pkg"],
- pushTo: "origin",
- createTag: false
- }
-}
diff --git a/tasks/options/checkrepo.js b/tasks/options/checkrepo.js
deleted file mode 100644
index 7f572135..00000000
--- a/tasks/options/checkrepo.js
+++ /dev/null
@@ -1,11 +0,0 @@
-module.exports = {
- clean: {
- clean: true, // Require repo to be clean (no unstaged changes)
- },
- validtag: {
- tag: {
- valid: '<%= pkg.version %>', // check if pkg.version is valid semantic version
- lt: '<%= pkg.version %>' // check if highest repo tag is lower than pkg.version
- }
- }
-}
diff --git a/tasks/options/copy.js b/tasks/options/copy.js
deleted file mode 100644
index 563c711b..00000000
--- a/tasks/options/copy.js
+++ /dev/null
@@ -1,15 +0,0 @@
-module.exports = {
- main: {
- files: [
- { expand: true, src: ["assets/images/**"], dest: "dist/" },
- { expand: true, src: ["assets/kss/**"], dest: "dist/" },
- { expand: true, src: ["assets/fonts/**"], dest: "dist/" },
- { expand: true, src: ["scss/**"], dest: "dist/" },
- { expand: true, src: ["js/**"], dest: "dist/" },
- { src: "README.md", dest: "dist/README.md" },
- { src: "LICENSE", dest: "dist/LICENSE" },
- { src: "bower.json", dest: "dist/bower.json" },
- { src: "package.json", dest: "dist/package.json" }
- ]
- }
-}
diff --git a/tasks/options/cssmin.js b/tasks/options/cssmin.js
deleted file mode 100644
index 4f7d927a..00000000
--- a/tasks/options/cssmin.js
+++ /dev/null
@@ -1,11 +0,0 @@
-module.exports = {
- minify: {
- options: {
- report: "gzip"
- },
- files: {
- "dist/neue.css": ["dist/neue.css"],
- "dist/ie.css": ["dist/ie.css"]
- }
- }
-}
diff --git a/tasks/options/jshint.js b/tasks/options/jshint.js
deleted file mode 100644
index f75bec1e..00000000
--- a/tasks/options/jshint.js
+++ /dev/null
@@ -1,15 +0,0 @@
-module.exports = {
- options: {
- force: true,
- jshintrc: true,
- reporter: require("jshint-stylish")
- },
- all: [
- "js/**/*.js",
- "!js/vendor/**/*.js",
- "!js/polyfills/**/*.js",
- "tests/**/*.js",
- "!tests/wraith/**/*.js",
- "!tests/lib/**/*.js"
- ]
-}
diff --git a/tasks/options/qunit.js b/tasks/options/qunit.js
deleted file mode 100644
index 794e4b2d..00000000
--- a/tasks/options/qunit.js
+++ /dev/null
@@ -1,3 +0,0 @@
-module.exports = {
- all: ["tests/*.html"]
-}
diff --git a/tasks/options/requirejs.js b/tasks/options/requirejs.js
deleted file mode 100644
index 64d82b9b..00000000
--- a/tasks/options/requirejs.js
+++ /dev/null
@@ -1,15 +0,0 @@
-module.exports = {
- compile: {
- options: {
- name: "bower_components/almond/almond",
- paths: {
- "neue": "js"
- },
- include: "neue/main",
- insertRequire: ["neue/main"],
- out: "dist/neue.js",
- optimize: "none",
- wrap: true
- }
- }
-}
diff --git a/tasks/options/sass.js b/tasks/options/sass.js
deleted file mode 100644
index bd6aa511..00000000
--- a/tasks/options/sass.js
+++ /dev/null
@@ -1,11 +0,0 @@
-module.exports = {
- compile: {
- files: {
- "dist/neue.css": "scss/neue.scss",
- "dist/ie.css": "scss/ie.scss"
- },
- options: {
- sourceComments: "normal"
- }
- }
-}
diff --git a/tasks/options/shell.js b/tasks/options/shell.js
deleted file mode 100644
index 400715d6..00000000
--- a/tasks/options/shell.js
+++ /dev/null
@@ -1,51 +0,0 @@
-module.exports = {
- scsslint: {
- command: "scss-lint ./scss/ --config ./.scss-lint.yaml",
- options: {
- stdout: true
- }
- },
-
- clean: {
- command: "rm -rf dist/*"
- },
-
- dist: {
- command: [
- // checkout master, rebase and push
- "git checkout master",
- "git rebase dev",
- "git push origin master",
-
- // push to heroku
- "git push heroku master",
-
- // destroy current dist branch
- "git branch -D dist",
- "git push origin :dist",
-
- // create a new dist branch off of master
- "git checkout -b dist ",
-
- // get rid of everything besides the contents of the dist directory
- "find . -maxdepth 1 ! -name 'dist' ! -name 'node_modules' ! -name '.*' | xargs rm -rf",
- "cp -r dist/* .",
- "rm -rf dist",
-
- // commit those changes and tag with version
- "git add --all .",
- "git commit -m 'Prepared for distribution.'",
- "git tag -a v<%= pkg.version %> -m 'Version <%= pkg.version %>'",
-
- // push dist branch and tags to origin
- "git push origin dist --tags",
-
- // and finally, bring us back to the master branch
- "git checkout dev"
- ].join("&&"),
- options: {
- stdout: true,
- failOnError: true
- }
- }
-}
diff --git a/tasks/options/uglify.js b/tasks/options/uglify.js
deleted file mode 100644
index fe1a13b5..00000000
--- a/tasks/options/uglify.js
+++ /dev/null
@@ -1,13 +0,0 @@
-module.exports = {
- prod: {
- options: {
- report: "gzip",
- mangle: {
- except: ["$"]
- }
- },
- files: {
- "dist/neue.min.js": ["dist/neue.js"]
- }
- }
-}
diff --git a/tasks/options/watch.js b/tasks/options/watch.js
deleted file mode 100644
index 7e3f7c58..00000000
--- a/tasks/options/watch.js
+++ /dev/null
@@ -1,14 +0,0 @@
-module.exports = {
- sass: {
- files: ["scss/**/*.{scss,sass}"],
- tasks: ["shell:scsslint", "sass:compile"]
- },
- js: {
- files: ["js/**/*.js", "tests/**/*.js"],
- tasks: ["jshint:all", "requirejs:compile", "test:js"]
- },
- images: {
- files: ["assets/**/*"],
- tasks: ["copy"]
- }
-}
diff --git a/tasks/test.js b/tasks/test.js
deleted file mode 100644
index 84f9221b..00000000
--- a/tasks/test.js
+++ /dev/null
@@ -1,6 +0,0 @@
-module.exports = function(grunt) {
- grunt.registerTask("test", ["test:css", "test:js"]);
-
- grunt.registerTask("test:css", []);
- grunt.registerTask("test:js", ["qunit"]);
-}
diff --git a/tests/index.html b/tests/index.html
deleted file mode 100644
index 8d1bf286..00000000
--- a/tests/index.html
+++ /dev/null
@@ -1,31 +0,0 @@
-
-
-
-
-
-
- NEUE QUnit Test Runner
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/tests/lib/jquery.min.js b/tests/lib/jquery.min.js
deleted file mode 100644
index 29b3a2c7..00000000
--- a/tests/lib/jquery.min.js
+++ /dev/null
@@ -1,6 +0,0 @@
-/*! jQuery v1.10.2 | (c) 2005, 2013 jQuery Foundation, Inc. | jquery.org/license
-//@ sourceMappingURL=jquery.min.map
-*/
-(function(e,t){var n,r,i=typeof t,o=e.location,a=e.document,s=a.documentElement,l=e.jQuery,u=e.$,c={},p=[],f="1.10.2",d=p.concat,h=p.push,g=p.slice,m=p.indexOf,y=c.toString,v=c.hasOwnProperty,b=f.trim,x=function(e,t){return new x.fn.init(e,t,r)},w=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,T=/\S+/g,C=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,N=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,k=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,E=/^[\],:{}\s]*$/,S=/(?:^|:|,)(?:\s*\[)+/g,A=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,j=/"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,D=/^-ms-/,L=/-([\da-z])/gi,H=function(e,t){return t.toUpperCase()},q=function(e){(a.addEventListener||"load"===e.type||"complete"===a.readyState)&&(_(),x.ready())},_=function(){a.addEventListener?(a.removeEventListener("DOMContentLoaded",q,!1),e.removeEventListener("load",q,!1)):(a.detachEvent("onreadystatechange",q),e.detachEvent("onload",q))};x.fn=x.prototype={jquery:f,constructor:x,init:function(e,n,r){var i,o;if(!e)return this;if("string"==typeof e){if(i="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:N.exec(e),!i||!i[1]&&n)return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e);if(i[1]){if(n=n instanceof x?n[0]:n,x.merge(this,x.parseHTML(i[1],n&&n.nodeType?n.ownerDocument||n:a,!0)),k.test(i[1])&&x.isPlainObject(n))for(i in n)x.isFunction(this[i])?this[i](n[i]):this.attr(i,n[i]);return this}if(o=a.getElementById(i[2]),o&&o.parentNode){if(o.id!==i[2])return r.find(e);this.length=1,this[0]=o}return this.context=a,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):x.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),x.makeArray(e,this))},selector:"",length:0,toArray:function(){return g.call(this)},get:function(e){return null==e?this.toArray():0>e?this[this.length+e]:this[e]},pushStack:function(e){var t=x.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return x.each(this,e,t)},ready:function(e){return x.ready.promise().done(e),this},slice:function(){return this.pushStack(g.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},map:function(e){return this.pushStack(x.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:h,sort:[].sort,splice:[].splice},x.fn.init.prototype=x.fn,x.extend=x.fn.extend=function(){var e,n,r,i,o,a,s=arguments[0]||{},l=1,u=arguments.length,c=!1;for("boolean"==typeof s&&(c=s,s=arguments[1]||{},l=2),"object"==typeof s||x.isFunction(s)||(s={}),u===l&&(s=this,--l);u>l;l++)if(null!=(o=arguments[l]))for(i in o)e=s[i],r=o[i],s!==r&&(c&&r&&(x.isPlainObject(r)||(n=x.isArray(r)))?(n?(n=!1,a=e&&x.isArray(e)?e:[]):a=e&&x.isPlainObject(e)?e:{},s[i]=x.extend(c,a,r)):r!==t&&(s[i]=r));return s},x.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),noConflict:function(t){return e.$===x&&(e.$=u),t&&e.jQuery===x&&(e.jQuery=l),x},isReady:!1,readyWait:1,holdReady:function(e){e?x.readyWait++:x.ready(!0)},ready:function(e){if(e===!0?!--x.readyWait:!x.isReady){if(!a.body)return setTimeout(x.ready);x.isReady=!0,e!==!0&&--x.readyWait>0||(n.resolveWith(a,[x]),x.fn.trigger&&x(a).trigger("ready").off("ready"))}},isFunction:function(e){return"function"===x.type(e)},isArray:Array.isArray||function(e){return"array"===x.type(e)},isWindow:function(e){return null!=e&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?c[y.call(e)]||"object":typeof e},isPlainObject:function(e){var n;if(!e||"object"!==x.type(e)||e.nodeType||x.isWindow(e))return!1;try{if(e.constructor&&!v.call(e,"constructor")&&!v.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(r){return!1}if(x.support.ownLast)for(n in e)return v.call(e,n);for(n in e);return n===t||v.call(e,n)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||a;var r=k.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=x.buildFragment([e],t,i),i&&x(i).remove(),x.merge([],r.childNodes))},parseJSON:function(n){return e.JSON&&e.JSON.parse?e.JSON.parse(n):null===n?n:"string"==typeof n&&(n=x.trim(n),n&&E.test(n.replace(A,"@").replace(j,"]").replace(S,"")))?Function("return "+n)():(x.error("Invalid JSON: "+n),t)},parseXML:function(n){var r,i;if(!n||"string"!=typeof n)return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,"text/xml")):(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(n))}catch(o){r=t}return r&&r.documentElement&&!r.getElementsByTagName("parsererror").length||x.error("Invalid XML: "+n),r},noop:function(){},globalEval:function(t){t&&x.trim(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(D,"ms-").replace(L,H)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r,i=0,o=e.length,a=M(e);if(n){if(a){for(;o>i;i++)if(r=t.apply(e[i],n),r===!1)break}else for(i in e)if(r=t.apply(e[i],n),r===!1)break}else if(a){for(;o>i;i++)if(r=t.call(e[i],i,e[i]),r===!1)break}else for(i in e)if(r=t.call(e[i],i,e[i]),r===!1)break;return e},trim:b&&!b.call("\ufeff\u00a0")?function(e){return null==e?"":b.call(e)}:function(e){return null==e?"":(e+"").replace(C,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(M(Object(e))?x.merge(n,"string"==typeof e?[e]:e):h.call(n,e)),n},inArray:function(e,t,n){var r;if(t){if(m)return m.call(t,e,n);for(r=t.length,n=n?0>n?Math.max(0,r+n):n:0;r>n;n++)if(n in t&&t[n]===e)return n}return-1},merge:function(e,n){var r=n.length,i=e.length,o=0;if("number"==typeof r)for(;r>o;o++)e[i++]=n[o];else while(n[o]!==t)e[i++]=n[o++];return e.length=i,e},grep:function(e,t,n){var r,i=[],o=0,a=e.length;for(n=!!n;a>o;o++)r=!!t(e[o],o),n!==r&&i.push(e[o]);return i},map:function(e,t,n){var r,i=0,o=e.length,a=M(e),s=[];if(a)for(;o>i;i++)r=t(e[i],i,n),null!=r&&(s[s.length]=r);else for(i in e)r=t(e[i],i,n),null!=r&&(s[s.length]=r);return d.apply([],s)},guid:1,proxy:function(e,n){var r,i,o;return"string"==typeof n&&(o=e[n],n=e,e=o),x.isFunction(e)?(r=g.call(arguments,2),i=function(){return e.apply(n||this,r.concat(g.call(arguments)))},i.guid=e.guid=e.guid||x.guid++,i):t},access:function(e,n,r,i,o,a,s){var l=0,u=e.length,c=null==r;if("object"===x.type(r)){o=!0;for(l in r)x.access(e,n,l,r[l],!0,a,s)}else if(i!==t&&(o=!0,x.isFunction(i)||(s=!0),c&&(s?(n.call(e,i),n=null):(c=n,n=function(e,t,n){return c.call(x(e),n)})),n))for(;u>l;l++)n(e[l],r,s?i:i.call(e[l],l,n(e[l],r)));return o?e:c?n.call(e):u?n(e[0],r):a},now:function(){return(new Date).getTime()},swap:function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i}}),x.ready.promise=function(t){if(!n)if(n=x.Deferred(),"complete"===a.readyState)setTimeout(x.ready);else if(a.addEventListener)a.addEventListener("DOMContentLoaded",q,!1),e.addEventListener("load",q,!1);else{a.attachEvent("onreadystatechange",q),e.attachEvent("onload",q);var r=!1;try{r=null==e.frameElement&&a.documentElement}catch(i){}r&&r.doScroll&&function o(){if(!x.isReady){try{r.doScroll("left")}catch(e){return setTimeout(o,50)}_(),x.ready()}}()}return n.promise(t)},x.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(e,t){c["[object "+t+"]"]=t.toLowerCase()});function M(e){var t=e.length,n=x.type(e);return x.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||"function"!==n&&(0===t||"number"==typeof t&&t>0&&t-1 in e)}r=x(a),function(e,t){var n,r,i,o,a,s,l,u,c,p,f,d,h,g,m,y,v,b="sizzle"+-new Date,w=e.document,T=0,C=0,N=st(),k=st(),E=st(),S=!1,A=function(e,t){return e===t?(S=!0,0):0},j=typeof t,D=1<<31,L={}.hasOwnProperty,H=[],q=H.pop,_=H.push,M=H.push,O=H.slice,F=H.indexOf||function(e){var t=0,n=this.length;for(;n>t;t++)if(this[t]===e)return t;return-1},B="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",P="[\\x20\\t\\r\\n\\f]",R="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",W=R.replace("w","w#"),$="\\["+P+"*("+R+")"+P+"*(?:([*^$|!~]?=)"+P+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+W+")|)|)"+P+"*\\]",I=":("+R+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+$.replace(3,8)+")*)|.*)\\)|)",z=RegExp("^"+P+"+|((?:^|[^\\\\])(?:\\\\.)*)"+P+"+$","g"),X=RegExp("^"+P+"*,"+P+"*"),U=RegExp("^"+P+"*([>+~]|"+P+")"+P+"*"),V=RegExp(P+"*[+~]"),Y=RegExp("="+P+"*([^\\]'\"]*)"+P+"*\\]","g"),J=RegExp(I),G=RegExp("^"+W+"$"),Q={ID:RegExp("^#("+R+")"),CLASS:RegExp("^\\.("+R+")"),TAG:RegExp("^("+R.replace("w","w*")+")"),ATTR:RegExp("^"+$),PSEUDO:RegExp("^"+I),CHILD:RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+P+"*(even|odd|(([+-]|)(\\d*)n|)"+P+"*(?:([+-]|)"+P+"*(\\d+)|))"+P+"*\\)|)","i"),bool:RegExp("^(?:"+B+")$","i"),needsContext:RegExp("^"+P+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+P+"*((?:-\\d)?\\d*)"+P+"*\\)|)(?=[^-]|$)","i")},K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,et=/^(?:input|select|textarea|button)$/i,tt=/^h\d$/i,nt=/'|\\/g,rt=RegExp("\\\\([\\da-f]{1,6}"+P+"?|("+P+")|.)","ig"),it=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:0>r?String.fromCharCode(r+65536):String.fromCharCode(55296|r>>10,56320|1023&r)};try{M.apply(H=O.call(w.childNodes),w.childNodes),H[w.childNodes.length].nodeType}catch(ot){M={apply:H.length?function(e,t){_.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function at(e,t,n,i){var o,a,s,l,u,c,d,m,y,x;if((t?t.ownerDocument||t:w)!==f&&p(t),t=t||f,n=n||[],!e||"string"!=typeof e)return n;if(1!==(l=t.nodeType)&&9!==l)return[];if(h&&!i){if(o=Z.exec(e))if(s=o[1]){if(9===l){if(a=t.getElementById(s),!a||!a.parentNode)return n;if(a.id===s)return n.push(a),n}else if(t.ownerDocument&&(a=t.ownerDocument.getElementById(s))&&v(t,a)&&a.id===s)return n.push(a),n}else{if(o[2])return M.apply(n,t.getElementsByTagName(e)),n;if((s=o[3])&&r.getElementsByClassName&&t.getElementsByClassName)return M.apply(n,t.getElementsByClassName(s)),n}if(r.qsa&&(!g||!g.test(e))){if(m=d=b,y=t,x=9===l&&e,1===l&&"object"!==t.nodeName.toLowerCase()){c=mt(e),(d=t.getAttribute("id"))?m=d.replace(nt,"\\$&"):t.setAttribute("id",m),m="[id='"+m+"'] ",u=c.length;while(u--)c[u]=m+yt(c[u]);y=V.test(e)&&t.parentNode||t,x=c.join(",")}if(x)try{return M.apply(n,y.querySelectorAll(x)),n}catch(T){}finally{d||t.removeAttribute("id")}}}return kt(e.replace(z,"$1"),t,n,i)}function st(){var e=[];function t(n,r){return e.push(n+=" ")>o.cacheLength&&delete t[e.shift()],t[n]=r}return t}function lt(e){return e[b]=!0,e}function ut(e){var t=f.createElement("div");try{return!!e(t)}catch(n){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function ct(e,t){var n=e.split("|"),r=e.length;while(r--)o.attrHandle[n[r]]=t}function pt(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||D)-(~e.sourceIndex||D);if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function ft(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function dt(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function ht(e){return lt(function(t){return t=+t,lt(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}s=at.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},r=at.support={},p=at.setDocument=function(e){var n=e?e.ownerDocument||e:w,i=n.defaultView;return n!==f&&9===n.nodeType&&n.documentElement?(f=n,d=n.documentElement,h=!s(n),i&&i.attachEvent&&i!==i.top&&i.attachEvent("onbeforeunload",function(){p()}),r.attributes=ut(function(e){return e.className="i",!e.getAttribute("className")}),r.getElementsByTagName=ut(function(e){return e.appendChild(n.createComment("")),!e.getElementsByTagName("*").length}),r.getElementsByClassName=ut(function(e){return e.innerHTML="
",e.firstChild.className="i",2===e.getElementsByClassName("i").length}),r.getById=ut(function(e){return d.appendChild(e).id=b,!n.getElementsByName||!n.getElementsByName(b).length}),r.getById?(o.find.ID=function(e,t){if(typeof t.getElementById!==j&&h){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},o.filter.ID=function(e){var t=e.replace(rt,it);return function(e){return e.getAttribute("id")===t}}):(delete o.find.ID,o.filter.ID=function(e){var t=e.replace(rt,it);return function(e){var n=typeof e.getAttributeNode!==j&&e.getAttributeNode("id");return n&&n.value===t}}),o.find.TAG=r.getElementsByTagName?function(e,n){return typeof n.getElementsByTagName!==j?n.getElementsByTagName(e):t}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},o.find.CLASS=r.getElementsByClassName&&function(e,n){return typeof n.getElementsByClassName!==j&&h?n.getElementsByClassName(e):t},m=[],g=[],(r.qsa=K.test(n.querySelectorAll))&&(ut(function(e){e.innerHTML=" ",e.querySelectorAll("[selected]").length||g.push("\\["+P+"*(?:value|"+B+")"),e.querySelectorAll(":checked").length||g.push(":checked")}),ut(function(e){var t=n.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("t",""),e.querySelectorAll("[t^='']").length&&g.push("[*^$]="+P+"*(?:''|\"\")"),e.querySelectorAll(":enabled").length||g.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),g.push(",.*:")})),(r.matchesSelector=K.test(y=d.webkitMatchesSelector||d.mozMatchesSelector||d.oMatchesSelector||d.msMatchesSelector))&&ut(function(e){r.disconnectedMatch=y.call(e,"div"),y.call(e,"[s!='']:x"),m.push("!=",I)}),g=g.length&&RegExp(g.join("|")),m=m.length&&RegExp(m.join("|")),v=K.test(d.contains)||d.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},A=d.compareDocumentPosition?function(e,t){if(e===t)return S=!0,0;var i=t.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(t);return i?1&i||!r.sortDetached&&t.compareDocumentPosition(e)===i?e===n||v(w,e)?-1:t===n||v(w,t)?1:c?F.call(c,e)-F.call(c,t):0:4&i?-1:1:e.compareDocumentPosition?-1:1}:function(e,t){var r,i=0,o=e.parentNode,a=t.parentNode,s=[e],l=[t];if(e===t)return S=!0,0;if(!o||!a)return e===n?-1:t===n?1:o?-1:a?1:c?F.call(c,e)-F.call(c,t):0;if(o===a)return pt(e,t);r=e;while(r=r.parentNode)s.unshift(r);r=t;while(r=r.parentNode)l.unshift(r);while(s[i]===l[i])i++;return i?pt(s[i],l[i]):s[i]===w?-1:l[i]===w?1:0},n):f},at.matches=function(e,t){return at(e,null,null,t)},at.matchesSelector=function(e,t){if((e.ownerDocument||e)!==f&&p(e),t=t.replace(Y,"='$1']"),!(!r.matchesSelector||!h||m&&m.test(t)||g&&g.test(t)))try{var n=y.call(e,t);if(n||r.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(i){}return at(t,f,null,[e]).length>0},at.contains=function(e,t){return(e.ownerDocument||e)!==f&&p(e),v(e,t)},at.attr=function(e,n){(e.ownerDocument||e)!==f&&p(e);var i=o.attrHandle[n.toLowerCase()],a=i&&L.call(o.attrHandle,n.toLowerCase())?i(e,n,!h):t;return a===t?r.attributes||!h?e.getAttribute(n):(a=e.getAttributeNode(n))&&a.specified?a.value:null:a},at.error=function(e){throw Error("Syntax error, unrecognized expression: "+e)},at.uniqueSort=function(e){var t,n=[],i=0,o=0;if(S=!r.detectDuplicates,c=!r.sortStable&&e.slice(0),e.sort(A),S){while(t=e[o++])t===e[o]&&(i=n.push(o));while(i--)e.splice(n[i],1)}return e},a=at.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=a(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=a(t);return n},o=at.selectors={cacheLength:50,createPseudo:lt,match:Q,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(rt,it),e[3]=(e[4]||e[5]||"").replace(rt,it),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||at.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&at.error(e[0]),e},PSEUDO:function(e){var n,r=!e[5]&&e[2];return Q.CHILD.test(e[0])?null:(e[3]&&e[4]!==t?e[2]=e[4]:r&&J.test(r)&&(n=mt(r,!0))&&(n=r.indexOf(")",r.length-n)-r.length)&&(e[0]=e[0].slice(0,n),e[2]=r.slice(0,n)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(rt,it).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=N[e+" "];return t||(t=RegExp("(^|"+P+")"+e+"("+P+"|$)"))&&N(e,function(e){return t.test("string"==typeof e.className&&e.className||typeof e.getAttribute!==j&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=at.attr(r,e);return null==i?"!="===t:t?(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i+" ").indexOf(n)>-1:"|="===t?i===n||i.slice(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,l){var u,c,p,f,d,h,g=o!==a?"nextSibling":"previousSibling",m=t.parentNode,y=s&&t.nodeName.toLowerCase(),v=!l&&!s;if(m){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===y:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?m.firstChild:m.lastChild],a&&v){c=m[b]||(m[b]={}),u=c[e]||[],d=u[0]===T&&u[1],f=u[0]===T&&u[2],p=d&&m.childNodes[d];while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if(1===p.nodeType&&++f&&p===t){c[e]=[T,d,f];break}}else if(v&&(u=(t[b]||(t[b]={}))[e])&&u[0]===T)f=u[1];else while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===y:1===p.nodeType)&&++f&&(v&&((p[b]||(p[b]={}))[e]=[T,f]),p===t))break;return f-=i,f===r||0===f%r&&f/r>=0}}},PSEUDO:function(e,t){var n,r=o.pseudos[e]||o.setFilters[e.toLowerCase()]||at.error("unsupported pseudo: "+e);return r[b]?r(t):r.length>1?(n=[e,e,"",t],o.setFilters.hasOwnProperty(e.toLowerCase())?lt(function(e,n){var i,o=r(e,t),a=o.length;while(a--)i=F.call(e,o[a]),e[i]=!(n[i]=o[a])}):function(e){return r(e,0,n)}):r}},pseudos:{not:lt(function(e){var t=[],n=[],r=l(e.replace(z,"$1"));return r[b]?lt(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),!n.pop()}}),has:lt(function(e){return function(t){return at(e,t).length>0}}),contains:lt(function(e){return function(t){return(t.textContent||t.innerText||a(t)).indexOf(e)>-1}}),lang:lt(function(e){return G.test(e||"")||at.error("unsupported lang: "+e),e=e.replace(rt,it).toLowerCase(),function(t){var n;do if(n=h?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===d},focus:function(e){return e===f.activeElement&&(!f.hasFocus||f.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>"@"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!o.pseudos.empty(e)},header:function(e){return tt.test(e.nodeName)},input:function(e){return et.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||t.toLowerCase()===e.type)},first:ht(function(){return[0]}),last:ht(function(e,t){return[t-1]}),eq:ht(function(e,t,n){return[0>n?n+t:n]}),even:ht(function(e,t){var n=0;for(;t>n;n+=2)e.push(n);return e}),odd:ht(function(e,t){var n=1;for(;t>n;n+=2)e.push(n);return e}),lt:ht(function(e,t,n){var r=0>n?n+t:n;for(;--r>=0;)e.push(r);return e}),gt:ht(function(e,t,n){var r=0>n?n+t:n;for(;t>++r;)e.push(r);return e})}},o.pseudos.nth=o.pseudos.eq;for(n in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})o.pseudos[n]=ft(n);for(n in{submit:!0,reset:!0})o.pseudos[n]=dt(n);function gt(){}gt.prototype=o.filters=o.pseudos,o.setFilters=new gt;function mt(e,t){var n,r,i,a,s,l,u,c=k[e+" "];if(c)return t?0:c.slice(0);s=e,l=[],u=o.preFilter;while(s){(!n||(r=X.exec(s)))&&(r&&(s=s.slice(r[0].length)||s),l.push(i=[])),n=!1,(r=U.exec(s))&&(n=r.shift(),i.push({value:n,type:r[0].replace(z," ")}),s=s.slice(n.length));for(a in o.filter)!(r=Q[a].exec(s))||u[a]&&!(r=u[a](r))||(n=r.shift(),i.push({value:n,type:a,matches:r}),s=s.slice(n.length));if(!n)break}return t?s.length:s?at.error(e):k(e,l).slice(0)}function yt(e){var t=0,n=e.length,r="";for(;n>t;t++)r+=e[t].value;return r}function vt(e,t,n){var r=t.dir,o=n&&"parentNode"===r,a=C++;return t.first?function(t,n,i){while(t=t[r])if(1===t.nodeType||o)return e(t,n,i)}:function(t,n,s){var l,u,c,p=T+" "+a;if(s){while(t=t[r])if((1===t.nodeType||o)&&e(t,n,s))return!0}else while(t=t[r])if(1===t.nodeType||o)if(c=t[b]||(t[b]={}),(u=c[r])&&u[0]===p){if((l=u[1])===!0||l===i)return l===!0}else if(u=c[r]=[p],u[1]=e(t,n,s)||i,u[1]===!0)return!0}}function bt(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function xt(e,t,n,r,i){var o,a=[],s=0,l=e.length,u=null!=t;for(;l>s;s++)(o=e[s])&&(!n||n(o,r,i))&&(a.push(o),u&&t.push(s));return a}function wt(e,t,n,r,i,o){return r&&!r[b]&&(r=wt(r)),i&&!i[b]&&(i=wt(i,o)),lt(function(o,a,s,l){var u,c,p,f=[],d=[],h=a.length,g=o||Nt(t||"*",s.nodeType?[s]:s,[]),m=!e||!o&&t?g:xt(g,f,e,s,l),y=n?i||(o?e:h||r)?[]:a:m;if(n&&n(m,y,s,l),r){u=xt(y,d),r(u,[],s,l),c=u.length;while(c--)(p=u[c])&&(y[d[c]]=!(m[d[c]]=p))}if(o){if(i||e){if(i){u=[],c=y.length;while(c--)(p=y[c])&&u.push(m[c]=p);i(null,y=[],u,l)}c=y.length;while(c--)(p=y[c])&&(u=i?F.call(o,p):f[c])>-1&&(o[u]=!(a[u]=p))}}else y=xt(y===a?y.splice(h,y.length):y),i?i(null,a,y,l):M.apply(a,y)})}function Tt(e){var t,n,r,i=e.length,a=o.relative[e[0].type],s=a||o.relative[" "],l=a?1:0,c=vt(function(e){return e===t},s,!0),p=vt(function(e){return F.call(t,e)>-1},s,!0),f=[function(e,n,r){return!a&&(r||n!==u)||((t=n).nodeType?c(e,n,r):p(e,n,r))}];for(;i>l;l++)if(n=o.relative[e[l].type])f=[vt(bt(f),n)];else{if(n=o.filter[e[l].type].apply(null,e[l].matches),n[b]){for(r=++l;i>r;r++)if(o.relative[e[r].type])break;return wt(l>1&&bt(f),l>1&&yt(e.slice(0,l-1).concat({value:" "===e[l-2].type?"*":""})).replace(z,"$1"),n,r>l&&Tt(e.slice(l,r)),i>r&&Tt(e=e.slice(r)),i>r&&yt(e))}f.push(n)}return bt(f)}function Ct(e,t){var n=0,r=t.length>0,a=e.length>0,s=function(s,l,c,p,d){var h,g,m,y=[],v=0,b="0",x=s&&[],w=null!=d,C=u,N=s||a&&o.find.TAG("*",d&&l.parentNode||l),k=T+=null==C?1:Math.random()||.1;for(w&&(u=l!==f&&l,i=n);null!=(h=N[b]);b++){if(a&&h){g=0;while(m=e[g++])if(m(h,l,c)){p.push(h);break}w&&(T=k,i=++n)}r&&((h=!m&&h)&&v--,s&&x.push(h))}if(v+=b,r&&b!==v){g=0;while(m=t[g++])m(x,y,l,c);if(s){if(v>0)while(b--)x[b]||y[b]||(y[b]=q.call(p));y=xt(y)}M.apply(p,y),w&&!s&&y.length>0&&v+t.length>1&&at.uniqueSort(p)}return w&&(T=k,u=C),x};return r?lt(s):s}l=at.compile=function(e,t){var n,r=[],i=[],o=E[e+" "];if(!o){t||(t=mt(e)),n=t.length;while(n--)o=Tt(t[n]),o[b]?r.push(o):i.push(o);o=E(e,Ct(i,r))}return o};function Nt(e,t,n){var r=0,i=t.length;for(;i>r;r++)at(e,t[r],n);return n}function kt(e,t,n,i){var a,s,u,c,p,f=mt(e);if(!i&&1===f.length){if(s=f[0]=f[0].slice(0),s.length>2&&"ID"===(u=s[0]).type&&r.getById&&9===t.nodeType&&h&&o.relative[s[1].type]){if(t=(o.find.ID(u.matches[0].replace(rt,it),t)||[])[0],!t)return n;e=e.slice(s.shift().value.length)}a=Q.needsContext.test(e)?0:s.length;while(a--){if(u=s[a],o.relative[c=u.type])break;if((p=o.find[c])&&(i=p(u.matches[0].replace(rt,it),V.test(s[0].type)&&t.parentNode||t))){if(s.splice(a,1),e=i.length&&yt(s),!e)return M.apply(n,i),n;break}}}return l(e,f)(i,t,!h,n,V.test(e)),n}r.sortStable=b.split("").sort(A).join("")===b,r.detectDuplicates=S,p(),r.sortDetached=ut(function(e){return 1&e.compareDocumentPosition(f.createElement("div"))}),ut(function(e){return e.innerHTML=" ","#"===e.firstChild.getAttribute("href")})||ct("type|href|height|width",function(e,n,r){return r?t:e.getAttribute(n,"type"===n.toLowerCase()?1:2)}),r.attributes&&ut(function(e){return e.innerHTML=" ",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||ct("value",function(e,n,r){return r||"input"!==e.nodeName.toLowerCase()?t:e.defaultValue}),ut(function(e){return null==e.getAttribute("disabled")})||ct(B,function(e,n,r){var i;return r?t:(i=e.getAttributeNode(n))&&i.specified?i.value:e[n]===!0?n.toLowerCase():null}),x.find=at,x.expr=at.selectors,x.expr[":"]=x.expr.pseudos,x.unique=at.uniqueSort,x.text=at.getText,x.isXMLDoc=at.isXML,x.contains=at.contains}(e);var O={};function F(e){var t=O[e]={};return x.each(e.match(T)||[],function(e,n){t[n]=!0}),t}x.Callbacks=function(e){e="string"==typeof e?O[e]||F(e):x.extend({},e);var n,r,i,o,a,s,l=[],u=!e.once&&[],c=function(t){for(r=e.memory&&t,i=!0,a=s||0,s=0,o=l.length,n=!0;l&&o>a;a++)if(l[a].apply(t[0],t[1])===!1&&e.stopOnFalse){r=!1;break}n=!1,l&&(u?u.length&&c(u.shift()):r?l=[]:p.disable())},p={add:function(){if(l){var t=l.length;(function i(t){x.each(t,function(t,n){var r=x.type(n);"function"===r?e.unique&&p.has(n)||l.push(n):n&&n.length&&"string"!==r&&i(n)})})(arguments),n?o=l.length:r&&(s=t,c(r))}return this},remove:function(){return l&&x.each(arguments,function(e,t){var r;while((r=x.inArray(t,l,r))>-1)l.splice(r,1),n&&(o>=r&&o--,a>=r&&a--)}),this},has:function(e){return e?x.inArray(e,l)>-1:!(!l||!l.length)},empty:function(){return l=[],o=0,this},disable:function(){return l=u=r=t,this},disabled:function(){return!l},lock:function(){return u=t,r||p.disable(),this},locked:function(){return!u},fireWith:function(e,t){return!l||i&&!u||(t=t||[],t=[e,t.slice?t.slice():t],n?u.push(t):c(t)),this},fire:function(){return p.fireWith(this,arguments),this},fired:function(){return!!i}};return p},x.extend({Deferred:function(e){var t=[["resolve","done",x.Callbacks("once memory"),"resolved"],["reject","fail",x.Callbacks("once memory"),"rejected"],["notify","progress",x.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return x.Deferred(function(n){x.each(t,function(t,o){var a=o[0],s=x.isFunction(e[t])&&e[t];i[o[1]](function(){var e=s&&s.apply(this,arguments);e&&x.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[a+"With"](this===r?n.promise():this,s?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?x.extend(e,r):r}},i={};return r.pipe=r.then,x.each(t,function(e,o){var a=o[2],s=o[3];r[o[1]]=a.add,s&&a.add(function(){n=s},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+"With"](this===i?r:this,arguments),this},i[o[0]+"With"]=a.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=g.call(arguments),r=n.length,i=1!==r||e&&x.isFunction(e.promise)?r:0,o=1===i?e:x.Deferred(),a=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?g.call(arguments):r,n===s?o.notifyWith(t,n):--i||o.resolveWith(t,n)}},s,l,u;if(r>1)for(s=Array(r),l=Array(r),u=Array(r);r>t;t++)n[t]&&x.isFunction(n[t].promise)?n[t].promise().done(a(t,u,n)).fail(o.reject).progress(a(t,l,s)):--i;return i||o.resolveWith(u,n),o.promise()}}),x.support=function(t){var n,r,o,s,l,u,c,p,f,d=a.createElement("div");if(d.setAttribute("className","t"),d.innerHTML=" a ",n=d.getElementsByTagName("*")||[],r=d.getElementsByTagName("a")[0],!r||!r.style||!n.length)return t;s=a.createElement("select"),u=s.appendChild(a.createElement("option")),o=d.getElementsByTagName("input")[0],r.style.cssText="top:1px;float:left;opacity:.5",t.getSetAttribute="t"!==d.className,t.leadingWhitespace=3===d.firstChild.nodeType,t.tbody=!d.getElementsByTagName("tbody").length,t.htmlSerialize=!!d.getElementsByTagName("link").length,t.style=/top/.test(r.getAttribute("style")),t.hrefNormalized="/a"===r.getAttribute("href"),t.opacity=/^0.5/.test(r.style.opacity),t.cssFloat=!!r.style.cssFloat,t.checkOn=!!o.value,t.optSelected=u.selected,t.enctype=!!a.createElement("form").enctype,t.html5Clone="<:nav>"!==a.createElement("nav").cloneNode(!0).outerHTML,t.inlineBlockNeedsLayout=!1,t.shrinkWrapBlocks=!1,t.pixelPosition=!1,t.deleteExpando=!0,t.noCloneEvent=!0,t.reliableMarginRight=!0,t.boxSizingReliable=!0,o.checked=!0,t.noCloneChecked=o.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!u.disabled;try{delete d.test}catch(h){t.deleteExpando=!1}o=a.createElement("input"),o.setAttribute("value",""),t.input=""===o.getAttribute("value"),o.value="t",o.setAttribute("type","radio"),t.radioValue="t"===o.value,o.setAttribute("checked","t"),o.setAttribute("name","t"),l=a.createDocumentFragment(),l.appendChild(o),t.appendChecked=o.checked,t.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,d.attachEvent&&(d.attachEvent("onclick",function(){t.noCloneEvent=!1}),d.cloneNode(!0).click());for(f in{submit:!0,change:!0,focusin:!0})d.setAttribute(c="on"+f,"t"),t[f+"Bubbles"]=c in e||d.attributes[c].expando===!1;d.style.backgroundClip="content-box",d.cloneNode(!0).style.backgroundClip="",t.clearCloneStyle="content-box"===d.style.backgroundClip;for(f in x(t))break;return t.ownLast="0"!==f,x(function(){var n,r,o,s="padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",l=a.getElementsByTagName("body")[0];l&&(n=a.createElement("div"),n.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",l.appendChild(n).appendChild(d),d.innerHTML="",o=d.getElementsByTagName("td"),o[0].style.cssText="padding:0;margin:0;border:0;display:none",p=0===o[0].offsetHeight,o[0].style.display="",o[1].style.display="none",t.reliableHiddenOffsets=p&&0===o[0].offsetHeight,d.innerHTML="",d.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",x.swap(l,null!=l.style.zoom?{zoom:1}:{},function(){t.boxSizing=4===d.offsetWidth}),e.getComputedStyle&&(t.pixelPosition="1%"!==(e.getComputedStyle(d,null)||{}).top,t.boxSizingReliable="4px"===(e.getComputedStyle(d,null)||{width:"4px"}).width,r=d.appendChild(a.createElement("div")),r.style.cssText=d.style.cssText=s,r.style.marginRight=r.style.width="0",d.style.width="1px",t.reliableMarginRight=!parseFloat((e.getComputedStyle(r,null)||{}).marginRight)),typeof d.style.zoom!==i&&(d.innerHTML="",d.style.cssText=s+"width:1px;padding:1px;display:inline;zoom:1",t.inlineBlockNeedsLayout=3===d.offsetWidth,d.style.display="block",d.innerHTML="
",d.firstChild.style.width="5px",t.shrinkWrapBlocks=3!==d.offsetWidth,t.inlineBlockNeedsLayout&&(l.style.zoom=1)),l.removeChild(n),n=d=o=r=null)}),n=s=l=u=r=o=null,t
-}({});var B=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,P=/([A-Z])/g;function R(e,n,r,i){if(x.acceptData(e)){var o,a,s=x.expando,l=e.nodeType,u=l?x.cache:e,c=l?e[s]:e[s]&&s;if(c&&u[c]&&(i||u[c].data)||r!==t||"string"!=typeof n)return c||(c=l?e[s]=p.pop()||x.guid++:s),u[c]||(u[c]=l?{}:{toJSON:x.noop}),("object"==typeof n||"function"==typeof n)&&(i?u[c]=x.extend(u[c],n):u[c].data=x.extend(u[c].data,n)),a=u[c],i||(a.data||(a.data={}),a=a.data),r!==t&&(a[x.camelCase(n)]=r),"string"==typeof n?(o=a[n],null==o&&(o=a[x.camelCase(n)])):o=a,o}}function W(e,t,n){if(x.acceptData(e)){var r,i,o=e.nodeType,a=o?x.cache:e,s=o?e[x.expando]:x.expando;if(a[s]){if(t&&(r=n?a[s]:a[s].data)){x.isArray(t)?t=t.concat(x.map(t,x.camelCase)):t in r?t=[t]:(t=x.camelCase(t),t=t in r?[t]:t.split(" ")),i=t.length;while(i--)delete r[t[i]];if(n?!I(r):!x.isEmptyObject(r))return}(n||(delete a[s].data,I(a[s])))&&(o?x.cleanData([e],!0):x.support.deleteExpando||a!=a.window?delete a[s]:a[s]=null)}}}x.extend({cache:{},noData:{applet:!0,embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(e){return e=e.nodeType?x.cache[e[x.expando]]:e[x.expando],!!e&&!I(e)},data:function(e,t,n){return R(e,t,n)},removeData:function(e,t){return W(e,t)},_data:function(e,t,n){return R(e,t,n,!0)},_removeData:function(e,t){return W(e,t,!0)},acceptData:function(e){if(e.nodeType&&1!==e.nodeType&&9!==e.nodeType)return!1;var t=e.nodeName&&x.noData[e.nodeName.toLowerCase()];return!t||t!==!0&&e.getAttribute("classid")===t}}),x.fn.extend({data:function(e,n){var r,i,o=null,a=0,s=this[0];if(e===t){if(this.length&&(o=x.data(s),1===s.nodeType&&!x._data(s,"parsedAttrs"))){for(r=s.attributes;r.length>a;a++)i=r[a].name,0===i.indexOf("data-")&&(i=x.camelCase(i.slice(5)),$(s,i,o[i]));x._data(s,"parsedAttrs",!0)}return o}return"object"==typeof e?this.each(function(){x.data(this,e)}):arguments.length>1?this.each(function(){x.data(this,e,n)}):s?$(s,e,x.data(s,e)):null},removeData:function(e){return this.each(function(){x.removeData(this,e)})}});function $(e,n,r){if(r===t&&1===e.nodeType){var i="data-"+n.replace(P,"-$1").toLowerCase();if(r=e.getAttribute(i),"string"==typeof r){try{r="true"===r?!0:"false"===r?!1:"null"===r?null:+r+""===r?+r:B.test(r)?x.parseJSON(r):r}catch(o){}x.data(e,n,r)}else r=t}return r}function I(e){var t;for(t in e)if(("data"!==t||!x.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}x.extend({queue:function(e,n,r){var i;return e?(n=(n||"fx")+"queue",i=x._data(e,n),r&&(!i||x.isArray(r)?i=x._data(e,n,x.makeArray(r)):i.push(r)),i||[]):t},dequeue:function(e,t){t=t||"fx";var n=x.queue(e,t),r=n.length,i=n.shift(),o=x._queueHooks(e,t),a=function(){x.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return x._data(e,n)||x._data(e,n,{empty:x.Callbacks("once memory").add(function(){x._removeData(e,t+"queue"),x._removeData(e,n)})})}}),x.fn.extend({queue:function(e,n){var r=2;return"string"!=typeof e&&(n=e,e="fx",r--),r>arguments.length?x.queue(this[0],e):n===t?this:this.each(function(){var t=x.queue(this,e,n);x._queueHooks(this,e),"fx"===e&&"inprogress"!==t[0]&&x.dequeue(this,e)})},dequeue:function(e){return this.each(function(){x.dequeue(this,e)})},delay:function(e,t){return e=x.fx?x.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,n){var r,i=1,o=x.Deferred(),a=this,s=this.length,l=function(){--i||o.resolveWith(a,[a])};"string"!=typeof e&&(n=e,e=t),e=e||"fx";while(s--)r=x._data(a[s],e+"queueHooks"),r&&r.empty&&(i++,r.empty.add(l));return l(),o.promise(n)}});var z,X,U=/[\t\r\n\f]/g,V=/\r/g,Y=/^(?:input|select|textarea|button|object)$/i,J=/^(?:a|area)$/i,G=/^(?:checked|selected)$/i,Q=x.support.getSetAttribute,K=x.support.input;x.fn.extend({attr:function(e,t){return x.access(this,x.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){x.removeAttr(this,e)})},prop:function(e,t){return x.access(this,x.prop,e,t,arguments.length>1)},removeProp:function(e){return e=x.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,o,a=0,s=this.length,l="string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).addClass(e.call(this,t,this.className))});if(l)for(t=(e||"").match(T)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(U," "):" ")){o=0;while(i=t[o++])0>r.indexOf(" "+i+" ")&&(r+=i+" ");n.className=x.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,a=0,s=this.length,l=0===arguments.length||"string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).removeClass(e.call(this,t,this.className))});if(l)for(t=(e||"").match(T)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(U," "):"")){o=0;while(i=t[o++])while(r.indexOf(" "+i+" ")>=0)r=r.replace(" "+i+" "," ");n.className=e?x.trim(r):""}return this},toggleClass:function(e,t){var n=typeof e;return"boolean"==typeof t&&"string"===n?t?this.addClass(e):this.removeClass(e):x.isFunction(e)?this.each(function(n){x(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if("string"===n){var t,r=0,o=x(this),a=e.match(T)||[];while(t=a[r++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else(n===i||"boolean"===n)&&(this.className&&x._data(this,"__className__",this.className),this.className=this.className||e===!1?"":x._data(this,"__className__")||"")})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;r>n;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(U," ").indexOf(t)>=0)return!0;return!1},val:function(e){var n,r,i,o=this[0];{if(arguments.length)return i=x.isFunction(e),this.each(function(n){var o;1===this.nodeType&&(o=i?e.call(this,n,x(this).val()):e,null==o?o="":"number"==typeof o?o+="":x.isArray(o)&&(o=x.map(o,function(e){return null==e?"":e+""})),r=x.valHooks[this.type]||x.valHooks[this.nodeName.toLowerCase()],r&&"set"in r&&r.set(this,o,"value")!==t||(this.value=o))});if(o)return r=x.valHooks[o.type]||x.valHooks[o.nodeName.toLowerCase()],r&&"get"in r&&(n=r.get(o,"value"))!==t?n:(n=o.value,"string"==typeof n?n.replace(V,""):null==n?"":n)}}}),x.extend({valHooks:{option:{get:function(e){var t=x.find.attr(e,"value");return null!=t?t:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,o="select-one"===e.type||0>i,a=o?null:[],s=o?i+1:r.length,l=0>i?s:o?i:0;for(;s>l;l++)if(n=r[l],!(!n.selected&&l!==i||(x.support.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&x.nodeName(n.parentNode,"optgroup"))){if(t=x(n).val(),o)return t;a.push(t)}return a},set:function(e,t){var n,r,i=e.options,o=x.makeArray(t),a=i.length;while(a--)r=i[a],(r.selected=x.inArray(x(r).val(),o)>=0)&&(n=!0);return n||(e.selectedIndex=-1),o}}},attr:function(e,n,r){var o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return typeof e.getAttribute===i?x.prop(e,n,r):(1===s&&x.isXMLDoc(e)||(n=n.toLowerCase(),o=x.attrHooks[n]||(x.expr.match.bool.test(n)?X:z)),r===t?o&&"get"in o&&null!==(a=o.get(e,n))?a:(a=x.find.attr(e,n),null==a?t:a):null!==r?o&&"set"in o&&(a=o.set(e,r,n))!==t?a:(e.setAttribute(n,r+""),r):(x.removeAttr(e,n),t))},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(T);if(o&&1===e.nodeType)while(n=o[i++])r=x.propFix[n]||n,x.expr.match.bool.test(n)?K&&Q||!G.test(n)?e[r]=!1:e[x.camelCase("default-"+n)]=e[r]=!1:x.attr(e,n,""),e.removeAttribute(Q?n:r)},attrHooks:{type:{set:function(e,t){if(!x.support.radioValue&&"radio"===t&&x.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},propFix:{"for":"htmlFor","class":"className"},prop:function(e,n,r){var i,o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return a=1!==s||!x.isXMLDoc(e),a&&(n=x.propFix[n]||n,o=x.propHooks[n]),r!==t?o&&"set"in o&&(i=o.set(e,r,n))!==t?i:e[n]=r:o&&"get"in o&&null!==(i=o.get(e,n))?i:e[n]},propHooks:{tabIndex:{get:function(e){var t=x.find.attr(e,"tabindex");return t?parseInt(t,10):Y.test(e.nodeName)||J.test(e.nodeName)&&e.href?0:-1}}}}),X={set:function(e,t,n){return t===!1?x.removeAttr(e,n):K&&Q||!G.test(n)?e.setAttribute(!Q&&x.propFix[n]||n,n):e[x.camelCase("default-"+n)]=e[n]=!0,n}},x.each(x.expr.match.bool.source.match(/\w+/g),function(e,n){var r=x.expr.attrHandle[n]||x.find.attr;x.expr.attrHandle[n]=K&&Q||!G.test(n)?function(e,n,i){var o=x.expr.attrHandle[n],a=i?t:(x.expr.attrHandle[n]=t)!=r(e,n,i)?n.toLowerCase():null;return x.expr.attrHandle[n]=o,a}:function(e,n,r){return r?t:e[x.camelCase("default-"+n)]?n.toLowerCase():null}}),K&&Q||(x.attrHooks.value={set:function(e,n,r){return x.nodeName(e,"input")?(e.defaultValue=n,t):z&&z.set(e,n,r)}}),Q||(z={set:function(e,n,r){var i=e.getAttributeNode(r);return i||e.setAttributeNode(i=e.ownerDocument.createAttribute(r)),i.value=n+="","value"===r||n===e.getAttribute(r)?n:t}},x.expr.attrHandle.id=x.expr.attrHandle.name=x.expr.attrHandle.coords=function(e,n,r){var i;return r?t:(i=e.getAttributeNode(n))&&""!==i.value?i.value:null},x.valHooks.button={get:function(e,n){var r=e.getAttributeNode(n);return r&&r.specified?r.value:t},set:z.set},x.attrHooks.contenteditable={set:function(e,t,n){z.set(e,""===t?!1:t,n)}},x.each(["width","height"],function(e,n){x.attrHooks[n]={set:function(e,r){return""===r?(e.setAttribute(n,"auto"),r):t}}})),x.support.hrefNormalized||x.each(["href","src"],function(e,t){x.propHooks[t]={get:function(e){return e.getAttribute(t,4)}}}),x.support.style||(x.attrHooks.style={get:function(e){return e.style.cssText||t},set:function(e,t){return e.style.cssText=t+""}}),x.support.optSelected||(x.propHooks.selected={get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null}}),x.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){x.propFix[this.toLowerCase()]=this}),x.support.enctype||(x.propFix.enctype="encoding"),x.each(["radio","checkbox"],function(){x.valHooks[this]={set:function(e,n){return x.isArray(n)?e.checked=x.inArray(x(e).val(),n)>=0:t}},x.support.checkOn||(x.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var Z=/^(?:input|select|textarea)$/i,et=/^key/,tt=/^(?:mouse|contextmenu)|click/,nt=/^(?:focusinfocus|focusoutblur)$/,rt=/^([^.]*)(?:\.(.+)|)$/;function it(){return!0}function ot(){return!1}function at(){try{return a.activeElement}catch(e){}}x.event={global:{},add:function(e,n,r,o,a){var s,l,u,c,p,f,d,h,g,m,y,v=x._data(e);if(v){r.handler&&(c=r,r=c.handler,a=c.selector),r.guid||(r.guid=x.guid++),(l=v.events)||(l=v.events={}),(f=v.handle)||(f=v.handle=function(e){return typeof x===i||e&&x.event.triggered===e.type?t:x.event.dispatch.apply(f.elem,arguments)},f.elem=e),n=(n||"").match(T)||[""],u=n.length;while(u--)s=rt.exec(n[u])||[],g=y=s[1],m=(s[2]||"").split(".").sort(),g&&(p=x.event.special[g]||{},g=(a?p.delegateType:p.bindType)||g,p=x.event.special[g]||{},d=x.extend({type:g,origType:y,data:o,handler:r,guid:r.guid,selector:a,needsContext:a&&x.expr.match.needsContext.test(a),namespace:m.join(".")},c),(h=l[g])||(h=l[g]=[],h.delegateCount=0,p.setup&&p.setup.call(e,o,m,f)!==!1||(e.addEventListener?e.addEventListener(g,f,!1):e.attachEvent&&e.attachEvent("on"+g,f))),p.add&&(p.add.call(e,d),d.handler.guid||(d.handler.guid=r.guid)),a?h.splice(h.delegateCount++,0,d):h.push(d),x.event.global[g]=!0);e=null}},remove:function(e,t,n,r,i){var o,a,s,l,u,c,p,f,d,h,g,m=x.hasData(e)&&x._data(e);if(m&&(c=m.events)){t=(t||"").match(T)||[""],u=t.length;while(u--)if(s=rt.exec(t[u])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){p=x.event.special[d]||{},d=(r?p.delegateType:p.bindType)||d,f=c[d]||[],s=s[2]&&RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),l=o=f.length;while(o--)a=f[o],!i&&g!==a.origType||n&&n.guid!==a.guid||s&&!s.test(a.namespace)||r&&r!==a.selector&&("**"!==r||!a.selector)||(f.splice(o,1),a.selector&&f.delegateCount--,p.remove&&p.remove.call(e,a));l&&!f.length&&(p.teardown&&p.teardown.call(e,h,m.handle)!==!1||x.removeEvent(e,d,m.handle),delete c[d])}else for(d in c)x.event.remove(e,d+t[u],n,r,!0);x.isEmptyObject(c)&&(delete m.handle,x._removeData(e,"events"))}},trigger:function(n,r,i,o){var s,l,u,c,p,f,d,h=[i||a],g=v.call(n,"type")?n.type:n,m=v.call(n,"namespace")?n.namespace.split("."):[];if(u=f=i=i||a,3!==i.nodeType&&8!==i.nodeType&&!nt.test(g+x.event.triggered)&&(g.indexOf(".")>=0&&(m=g.split("."),g=m.shift(),m.sort()),l=0>g.indexOf(":")&&"on"+g,n=n[x.expando]?n:new x.Event(g,"object"==typeof n&&n),n.isTrigger=o?2:3,n.namespace=m.join("."),n.namespace_re=n.namespace?RegExp("(^|\\.)"+m.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,n.result=t,n.target||(n.target=i),r=null==r?[n]:x.makeArray(r,[n]),p=x.event.special[g]||{},o||!p.trigger||p.trigger.apply(i,r)!==!1)){if(!o&&!p.noBubble&&!x.isWindow(i)){for(c=p.delegateType||g,nt.test(c+g)||(u=u.parentNode);u;u=u.parentNode)h.push(u),f=u;f===(i.ownerDocument||a)&&h.push(f.defaultView||f.parentWindow||e)}d=0;while((u=h[d++])&&!n.isPropagationStopped())n.type=d>1?c:p.bindType||g,s=(x._data(u,"events")||{})[n.type]&&x._data(u,"handle"),s&&s.apply(u,r),s=l&&u[l],s&&x.acceptData(u)&&s.apply&&s.apply(u,r)===!1&&n.preventDefault();if(n.type=g,!o&&!n.isDefaultPrevented()&&(!p._default||p._default.apply(h.pop(),r)===!1)&&x.acceptData(i)&&l&&i[g]&&!x.isWindow(i)){f=i[l],f&&(i[l]=null),x.event.triggered=g;try{i[g]()}catch(y){}x.event.triggered=t,f&&(i[l]=f)}return n.result}},dispatch:function(e){e=x.event.fix(e);var n,r,i,o,a,s=[],l=g.call(arguments),u=(x._data(this,"events")||{})[e.type]||[],c=x.event.special[e.type]||{};if(l[0]=e,e.delegateTarget=this,!c.preDispatch||c.preDispatch.call(this,e)!==!1){s=x.event.handlers.call(this,e,u),n=0;while((o=s[n++])&&!e.isPropagationStopped()){e.currentTarget=o.elem,a=0;while((i=o.handlers[a++])&&!e.isImmediatePropagationStopped())(!e.namespace_re||e.namespace_re.test(i.namespace))&&(e.handleObj=i,e.data=i.data,r=((x.event.special[i.origType]||{}).handle||i.handler).apply(o.elem,l),r!==t&&(e.result=r)===!1&&(e.preventDefault(),e.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,e),e.result}},handlers:function(e,n){var r,i,o,a,s=[],l=n.delegateCount,u=e.target;if(l&&u.nodeType&&(!e.button||"click"!==e.type))for(;u!=this;u=u.parentNode||this)if(1===u.nodeType&&(u.disabled!==!0||"click"!==e.type)){for(o=[],a=0;l>a;a++)i=n[a],r=i.selector+" ",o[r]===t&&(o[r]=i.needsContext?x(r,this).index(u)>=0:x.find(r,this,null,[u]).length),o[r]&&o.push(i);o.length&&s.push({elem:u,handlers:o})}return n.length>l&&s.push({elem:this,handlers:n.slice(l)}),s},fix:function(e){if(e[x.expando])return e;var t,n,r,i=e.type,o=e,s=this.fixHooks[i];s||(this.fixHooks[i]=s=tt.test(i)?this.mouseHooks:et.test(i)?this.keyHooks:{}),r=s.props?this.props.concat(s.props):this.props,e=new x.Event(o),t=r.length;while(t--)n=r[t],e[n]=o[n];return e.target||(e.target=o.srcElement||a),3===e.target.nodeType&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,s.filter?s.filter(e,o):e},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,n){var r,i,o,s=n.button,l=n.fromElement;return null==e.pageX&&null!=n.clientX&&(i=e.target.ownerDocument||a,o=i.documentElement,r=i.body,e.pageX=n.clientX+(o&&o.scrollLeft||r&&r.scrollLeft||0)-(o&&o.clientLeft||r&&r.clientLeft||0),e.pageY=n.clientY+(o&&o.scrollTop||r&&r.scrollTop||0)-(o&&o.clientTop||r&&r.clientTop||0)),!e.relatedTarget&&l&&(e.relatedTarget=l===e.target?n.toElement:l),e.which||s===t||(e.which=1&s?1:2&s?3:4&s?2:0),e}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==at()&&this.focus)try{return this.focus(),!1}catch(e){}},delegateType:"focusin"},blur:{trigger:function(){return this===at()&&this.blur?(this.blur(),!1):t},delegateType:"focusout"},click:{trigger:function(){return x.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):t},_default:function(e){return x.nodeName(e.target,"a")}},beforeunload:{postDispatch:function(e){e.result!==t&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var i=x.extend(new x.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?x.event.trigger(i,null,t):x.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},x.removeEvent=a.removeEventListener?function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}:function(e,t,n){var r="on"+t;e.detachEvent&&(typeof e[r]===i&&(e[r]=null),e.detachEvent(r,n))},x.Event=function(e,n){return this instanceof x.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.returnValue===!1||e.getPreventDefault&&e.getPreventDefault()?it:ot):this.type=e,n&&x.extend(this,n),this.timeStamp=e&&e.timeStamp||x.now(),this[x.expando]=!0,t):new x.Event(e,n)},x.Event.prototype={isDefaultPrevented:ot,isPropagationStopped:ot,isImmediatePropagationStopped:ot,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=it,e&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=it,e&&(e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=it,this.stopPropagation()}},x.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){x.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return(!i||i!==r&&!x.contains(r,i))&&(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),x.support.submitBubbles||(x.event.special.submit={setup:function(){return x.nodeName(this,"form")?!1:(x.event.add(this,"click._submit keypress._submit",function(e){var n=e.target,r=x.nodeName(n,"input")||x.nodeName(n,"button")?n.form:t;r&&!x._data(r,"submitBubbles")&&(x.event.add(r,"submit._submit",function(e){e._submit_bubble=!0}),x._data(r,"submitBubbles",!0))}),t)},postDispatch:function(e){e._submit_bubble&&(delete e._submit_bubble,this.parentNode&&!e.isTrigger&&x.event.simulate("submit",this.parentNode,e,!0))},teardown:function(){return x.nodeName(this,"form")?!1:(x.event.remove(this,"._submit"),t)}}),x.support.changeBubbles||(x.event.special.change={setup:function(){return Z.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(x.event.add(this,"propertychange._change",function(e){"checked"===e.originalEvent.propertyName&&(this._just_changed=!0)}),x.event.add(this,"click._change",function(e){this._just_changed&&!e.isTrigger&&(this._just_changed=!1),x.event.simulate("change",this,e,!0)})),!1):(x.event.add(this,"beforeactivate._change",function(e){var t=e.target;Z.test(t.nodeName)&&!x._data(t,"changeBubbles")&&(x.event.add(t,"change._change",function(e){!this.parentNode||e.isSimulated||e.isTrigger||x.event.simulate("change",this.parentNode,e,!0)}),x._data(t,"changeBubbles",!0))}),t)},handle:function(e){var n=e.target;return this!==n||e.isSimulated||e.isTrigger||"radio"!==n.type&&"checkbox"!==n.type?e.handleObj.handler.apply(this,arguments):t},teardown:function(){return x.event.remove(this,"._change"),!Z.test(this.nodeName)}}),x.support.focusinBubbles||x.each({focus:"focusin",blur:"focusout"},function(e,t){var n=0,r=function(e){x.event.simulate(t,e.target,x.event.fix(e),!0)};x.event.special[t]={setup:function(){0===n++&&a.addEventListener(e,r,!0)},teardown:function(){0===--n&&a.removeEventListener(e,r,!0)}}}),x.fn.extend({on:function(e,n,r,i,o){var a,s;if("object"==typeof e){"string"!=typeof n&&(r=r||n,n=t);for(a in e)this.on(a,n,r,e[a],o);return this}if(null==r&&null==i?(i=n,r=n=t):null==i&&("string"==typeof n?(i=r,r=t):(i=r,r=n,n=t)),i===!1)i=ot;else if(!i)return this;return 1===o&&(s=i,i=function(e){return x().off(e),s.apply(this,arguments)},i.guid=s.guid||(s.guid=x.guid++)),this.each(function(){x.event.add(this,e,i,r,n)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,n,r){var i,o;if(e&&e.preventDefault&&e.handleObj)return i=e.handleObj,x(e.delegateTarget).off(i.namespace?i.origType+"."+i.namespace:i.origType,i.selector,i.handler),this;if("object"==typeof e){for(o in e)this.off(o,n,e[o]);return this}return(n===!1||"function"==typeof n)&&(r=n,n=t),r===!1&&(r=ot),this.each(function(){x.event.remove(this,e,r,n)})},trigger:function(e,t){return this.each(function(){x.event.trigger(e,t,this)})},triggerHandler:function(e,n){var r=this[0];return r?x.event.trigger(e,n,r,!0):t}});var st=/^.[^:#\[\.,]*$/,lt=/^(?:parents|prev(?:Until|All))/,ut=x.expr.match.needsContext,ct={children:!0,contents:!0,next:!0,prev:!0};x.fn.extend({find:function(e){var t,n=[],r=this,i=r.length;if("string"!=typeof e)return this.pushStack(x(e).filter(function(){for(t=0;i>t;t++)if(x.contains(r[t],this))return!0}));for(t=0;i>t;t++)x.find(e,r[t],n);return n=this.pushStack(i>1?x.unique(n):n),n.selector=this.selector?this.selector+" "+e:e,n},has:function(e){var t,n=x(e,this),r=n.length;return this.filter(function(){for(t=0;r>t;t++)if(x.contains(this,n[t]))return!0})},not:function(e){return this.pushStack(ft(this,e||[],!0))},filter:function(e){return this.pushStack(ft(this,e||[],!1))},is:function(e){return!!ft(this,"string"==typeof e&&ut.test(e)?x(e):e||[],!1).length},closest:function(e,t){var n,r=0,i=this.length,o=[],a=ut.test(e)||"string"!=typeof e?x(e,t||this.context):0;for(;i>r;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(11>n.nodeType&&(a?a.index(n)>-1:1===n.nodeType&&x.find.matchesSelector(n,e))){n=o.push(n);break}return this.pushStack(o.length>1?x.unique(o):o)},index:function(e){return e?"string"==typeof e?x.inArray(this[0],x(e)):x.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){var n="string"==typeof e?x(e,t):x.makeArray(e&&e.nodeType?[e]:e),r=x.merge(this.get(),n);return this.pushStack(x.unique(r))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function pt(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}x.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return x.dir(e,"parentNode")},parentsUntil:function(e,t,n){return x.dir(e,"parentNode",n)},next:function(e){return pt(e,"nextSibling")},prev:function(e){return pt(e,"previousSibling")},nextAll:function(e){return x.dir(e,"nextSibling")},prevAll:function(e){return x.dir(e,"previousSibling")},nextUntil:function(e,t,n){return x.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return x.dir(e,"previousSibling",n)},siblings:function(e){return x.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return x.sibling(e.firstChild)},contents:function(e){return x.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:x.merge([],e.childNodes)}},function(e,t){x.fn[e]=function(n,r){var i=x.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=x.filter(r,i)),this.length>1&&(ct[e]||(i=x.unique(i)),lt.test(e)&&(i=i.reverse())),this.pushStack(i)}}),x.extend({filter:function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?x.find.matchesSelector(r,e)?[r]:[]:x.find.matches(e,x.grep(t,function(e){return 1===e.nodeType}))},dir:function(e,n,r){var i=[],o=e[n];while(o&&9!==o.nodeType&&(r===t||1!==o.nodeType||!x(o).is(r)))1===o.nodeType&&i.push(o),o=o[n];return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}});function ft(e,t,n){if(x.isFunction(t))return x.grep(e,function(e,r){return!!t.call(e,r,e)!==n});if(t.nodeType)return x.grep(e,function(e){return e===t!==n});if("string"==typeof t){if(st.test(t))return x.filter(t,e,n);t=x.filter(t,e)}return x.grep(e,function(e){return x.inArray(e,t)>=0!==n})}function dt(e){var t=ht.split("|"),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}var ht="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",gt=/ jQuery\d+="(?:null|\d+)"/g,mt=RegExp("<(?:"+ht+")[\\s/>]","i"),yt=/^\s+/,vt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bt=/<([\w:]+)/,xt=/\s*$/g,At={option:[1,""," "],legend:[1,""," "],area:[1,""," "],param:[1,""," "],thead:[1,""],tr:[2,""],col:[2,""],td:[3,""],_default:x.support.htmlSerialize?[0,"",""]:[1,"X","
"]},jt=dt(a),Dt=jt.appendChild(a.createElement("div"));At.optgroup=At.option,At.tbody=At.tfoot=At.colgroup=At.caption=At.thead,At.th=At.td,x.fn.extend({text:function(e){return x.access(this,function(e){return e===t?x.text(this):this.empty().append((this[0]&&this[0].ownerDocument||a).createTextNode(e))},null,e,arguments.length)},append:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Lt(this,e);t.appendChild(e)}})},prepend:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Lt(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){var n,r=e?x.filter(e,this):this,i=0;for(;null!=(n=r[i]);i++)t||1!==n.nodeType||x.cleanData(Ft(n)),n.parentNode&&(t&&x.contains(n.ownerDocument,n)&&_t(Ft(n,"script")),n.parentNode.removeChild(n));return this},empty:function(){var e,t=0;for(;null!=(e=this[t]);t++){1===e.nodeType&&x.cleanData(Ft(e,!1));while(e.firstChild)e.removeChild(e.firstChild);e.options&&x.nodeName(e,"select")&&(e.options.length=0)}return this},clone:function(e,t){return e=null==e?!1:e,t=null==t?e:t,this.map(function(){return x.clone(this,e,t)})},html:function(e){return x.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return 1===n.nodeType?n.innerHTML.replace(gt,""):t;if(!("string"!=typeof e||Tt.test(e)||!x.support.htmlSerialize&&mt.test(e)||!x.support.leadingWhitespace&&yt.test(e)||At[(bt.exec(e)||["",""])[1].toLowerCase()])){e=e.replace(vt,"<$1>$2>");try{for(;i>r;r++)n=this[r]||{},1===n.nodeType&&(x.cleanData(Ft(n,!1)),n.innerHTML=e);n=0}catch(o){}}n&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=x.map(this,function(e){return[e.nextSibling,e.parentNode]}),t=0;return this.domManip(arguments,function(n){var r=e[t++],i=e[t++];i&&(r&&r.parentNode!==i&&(r=this.nextSibling),x(this).remove(),i.insertBefore(n,r))},!0),t?this:this.remove()},detach:function(e){return this.remove(e,!0)},domManip:function(e,t,n){e=d.apply([],e);var r,i,o,a,s,l,u=0,c=this.length,p=this,f=c-1,h=e[0],g=x.isFunction(h);if(g||!(1>=c||"string"!=typeof h||x.support.checkClone)&&Nt.test(h))return this.each(function(r){var i=p.eq(r);g&&(e[0]=h.call(this,r,i.html())),i.domManip(e,t,n)});if(c&&(l=x.buildFragment(e,this[0].ownerDocument,!1,!n&&this),r=l.firstChild,1===l.childNodes.length&&(l=r),r)){for(a=x.map(Ft(l,"script"),Ht),o=a.length;c>u;u++)i=l,u!==f&&(i=x.clone(i,!0,!0),o&&x.merge(a,Ft(i,"script"))),t.call(this[u],i,u);if(o)for(s=a[a.length-1].ownerDocument,x.map(a,qt),u=0;o>u;u++)i=a[u],kt.test(i.type||"")&&!x._data(i,"globalEval")&&x.contains(s,i)&&(i.src?x._evalUrl(i.src):x.globalEval((i.text||i.textContent||i.innerHTML||"").replace(St,"")));l=r=null}return this}});function Lt(e,t){return x.nodeName(e,"table")&&x.nodeName(1===t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function Ht(e){return e.type=(null!==x.find.attr(e,"type"))+"/"+e.type,e}function qt(e){var t=Et.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function _t(e,t){var n,r=0;for(;null!=(n=e[r]);r++)x._data(n,"globalEval",!t||x._data(t[r],"globalEval"))}function Mt(e,t){if(1===t.nodeType&&x.hasData(e)){var n,r,i,o=x._data(e),a=x._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(r=0,i=s[n].length;i>r;r++)x.event.add(t,n,s[n][r])}a.data&&(a.data=x.extend({},a.data))}}function Ot(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!x.support.noCloneEvent&&t[x.expando]){i=x._data(t);for(r in i.events)x.removeEvent(t,r,i.handle);t.removeAttribute(x.expando)}"script"===n&&t.text!==e.text?(Ht(t).text=e.text,qt(t)):"object"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),x.support.html5Clone&&e.innerHTML&&!x.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):"input"===n&&Ct.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):"option"===n?t.defaultSelected=t.selected=e.defaultSelected:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}}x.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){x.fn[e]=function(e){var n,r=0,i=[],o=x(e),a=o.length-1;for(;a>=r;r++)n=r===a?this:this.clone(!0),x(o[r])[t](n),h.apply(i,n.get());return this.pushStack(i)}});function Ft(e,n){var r,o,a=0,s=typeof e.getElementsByTagName!==i?e.getElementsByTagName(n||"*"):typeof e.querySelectorAll!==i?e.querySelectorAll(n||"*"):t;if(!s)for(s=[],r=e.childNodes||e;null!=(o=r[a]);a++)!n||x.nodeName(o,n)?s.push(o):x.merge(s,Ft(o,n));return n===t||n&&x.nodeName(e,n)?x.merge([e],s):s}function Bt(e){Ct.test(e.type)&&(e.defaultChecked=e.checked)}x.extend({clone:function(e,t,n){var r,i,o,a,s,l=x.contains(e.ownerDocument,e);if(x.support.html5Clone||x.isXMLDoc(e)||!mt.test("<"+e.nodeName+">")?o=e.cloneNode(!0):(Dt.innerHTML=e.outerHTML,Dt.removeChild(o=Dt.firstChild)),!(x.support.noCloneEvent&&x.support.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||x.isXMLDoc(e)))for(r=Ft(o),s=Ft(e),a=0;null!=(i=s[a]);++a)r[a]&&Ot(i,r[a]);if(t)if(n)for(s=s||Ft(e),r=r||Ft(o),a=0;null!=(i=s[a]);a++)Mt(i,r[a]);else Mt(e,o);return r=Ft(o,"script"),r.length>0&&_t(r,!l&&Ft(e,"script")),r=s=i=null,o},buildFragment:function(e,t,n,r){var i,o,a,s,l,u,c,p=e.length,f=dt(t),d=[],h=0;for(;p>h;h++)if(o=e[h],o||0===o)if("object"===x.type(o))x.merge(d,o.nodeType?[o]:o);else if(wt.test(o)){s=s||f.appendChild(t.createElement("div")),l=(bt.exec(o)||["",""])[1].toLowerCase(),c=At[l]||At._default,s.innerHTML=c[1]+o.replace(vt,"<$1>$2>")+c[2],i=c[0];while(i--)s=s.lastChild;if(!x.support.leadingWhitespace&&yt.test(o)&&d.push(t.createTextNode(yt.exec(o)[0])),!x.support.tbody){o="table"!==l||xt.test(o)?""!==c[1]||xt.test(o)?0:s:s.firstChild,i=o&&o.childNodes.length;while(i--)x.nodeName(u=o.childNodes[i],"tbody")&&!u.childNodes.length&&o.removeChild(u)}x.merge(d,s.childNodes),s.textContent="";while(s.firstChild)s.removeChild(s.firstChild);s=f.lastChild}else d.push(t.createTextNode(o));s&&f.removeChild(s),x.support.appendChecked||x.grep(Ft(d,"input"),Bt),h=0;while(o=d[h++])if((!r||-1===x.inArray(o,r))&&(a=x.contains(o.ownerDocument,o),s=Ft(f.appendChild(o),"script"),a&&_t(s),n)){i=0;while(o=s[i++])kt.test(o.type||"")&&n.push(o)}return s=null,f},cleanData:function(e,t){var n,r,o,a,s=0,l=x.expando,u=x.cache,c=x.support.deleteExpando,f=x.event.special;for(;null!=(n=e[s]);s++)if((t||x.acceptData(n))&&(o=n[l],a=o&&u[o])){if(a.events)for(r in a.events)f[r]?x.event.remove(n,r):x.removeEvent(n,r,a.handle);
-u[o]&&(delete u[o],c?delete n[l]:typeof n.removeAttribute!==i?n.removeAttribute(l):n[l]=null,p.push(o))}},_evalUrl:function(e){return x.ajax({url:e,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})}}),x.fn.extend({wrapAll:function(e){if(x.isFunction(e))return this.each(function(t){x(this).wrapAll(e.call(this,t))});if(this[0]){var t=x(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&&1===e.firstChild.nodeType)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return x.isFunction(e)?this.each(function(t){x(this).wrapInner(e.call(this,t))}):this.each(function(){var t=x(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=x.isFunction(e);return this.each(function(n){x(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){x.nodeName(this,"body")||x(this).replaceWith(this.childNodes)}).end()}});var Pt,Rt,Wt,$t=/alpha\([^)]*\)/i,It=/opacity\s*=\s*([^)]*)/,zt=/^(top|right|bottom|left)$/,Xt=/^(none|table(?!-c[ea]).+)/,Ut=/^margin/,Vt=RegExp("^("+w+")(.*)$","i"),Yt=RegExp("^("+w+")(?!px)[a-z%]+$","i"),Jt=RegExp("^([+-])=("+w+")","i"),Gt={BODY:"block"},Qt={position:"absolute",visibility:"hidden",display:"block"},Kt={letterSpacing:0,fontWeight:400},Zt=["Top","Right","Bottom","Left"],en=["Webkit","O","Moz","ms"];function tn(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=en.length;while(i--)if(t=en[i]+n,t in e)return t;return r}function nn(e,t){return e=t||e,"none"===x.css(e,"display")||!x.contains(e.ownerDocument,e)}function rn(e,t){var n,r,i,o=[],a=0,s=e.length;for(;s>a;a++)r=e[a],r.style&&(o[a]=x._data(r,"olddisplay"),n=r.style.display,t?(o[a]||"none"!==n||(r.style.display=""),""===r.style.display&&nn(r)&&(o[a]=x._data(r,"olddisplay",ln(r.nodeName)))):o[a]||(i=nn(r),(n&&"none"!==n||!i)&&x._data(r,"olddisplay",i?n:x.css(r,"display"))));for(a=0;s>a;a++)r=e[a],r.style&&(t&&"none"!==r.style.display&&""!==r.style.display||(r.style.display=t?o[a]||"":"none"));return e}x.fn.extend({css:function(e,n){return x.access(this,function(e,n,r){var i,o,a={},s=0;if(x.isArray(n)){for(o=Rt(e),i=n.length;i>s;s++)a[n[s]]=x.css(e,n[s],!1,o);return a}return r!==t?x.style(e,n,r):x.css(e,n)},e,n,arguments.length>1)},show:function(){return rn(this,!0)},hide:function(){return rn(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){nn(this)?x(this).show():x(this).hide()})}}),x.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Wt(e,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":x.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,a,s,l=x.camelCase(n),u=e.style;if(n=x.cssProps[l]||(x.cssProps[l]=tn(u,l)),s=x.cssHooks[n]||x.cssHooks[l],r===t)return s&&"get"in s&&(o=s.get(e,!1,i))!==t?o:u[n];if(a=typeof r,"string"===a&&(o=Jt.exec(r))&&(r=(o[1]+1)*o[2]+parseFloat(x.css(e,n)),a="number"),!(null==r||"number"===a&&isNaN(r)||("number"!==a||x.cssNumber[l]||(r+="px"),x.support.clearCloneStyle||""!==r||0!==n.indexOf("background")||(u[n]="inherit"),s&&"set"in s&&(r=s.set(e,r,i))===t)))try{u[n]=r}catch(c){}}},css:function(e,n,r,i){var o,a,s,l=x.camelCase(n);return n=x.cssProps[l]||(x.cssProps[l]=tn(e.style,l)),s=x.cssHooks[n]||x.cssHooks[l],s&&"get"in s&&(a=s.get(e,!0,r)),a===t&&(a=Wt(e,n,i)),"normal"===a&&n in Kt&&(a=Kt[n]),""===r||r?(o=parseFloat(a),r===!0||x.isNumeric(o)?o||0:a):a}}),e.getComputedStyle?(Rt=function(t){return e.getComputedStyle(t,null)},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),l=s?s.getPropertyValue(n)||s[n]:t,u=e.style;return s&&(""!==l||x.contains(e.ownerDocument,e)||(l=x.style(e,n)),Yt.test(l)&&Ut.test(n)&&(i=u.width,o=u.minWidth,a=u.maxWidth,u.minWidth=u.maxWidth=u.width=l,l=s.width,u.width=i,u.minWidth=o,u.maxWidth=a)),l}):a.documentElement.currentStyle&&(Rt=function(e){return e.currentStyle},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),l=s?s[n]:t,u=e.style;return null==l&&u&&u[n]&&(l=u[n]),Yt.test(l)&&!zt.test(n)&&(i=u.left,o=e.runtimeStyle,a=o&&o.left,a&&(o.left=e.currentStyle.left),u.left="fontSize"===n?"1em":l,l=u.pixelLeft+"px",u.left=i,a&&(o.left=a)),""===l?"auto":l});function on(e,t,n){var r=Vt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function an(e,t,n,r,i){var o=n===(r?"border":"content")?4:"width"===t?1:0,a=0;for(;4>o;o+=2)"margin"===n&&(a+=x.css(e,n+Zt[o],!0,i)),r?("content"===n&&(a-=x.css(e,"padding"+Zt[o],!0,i)),"margin"!==n&&(a-=x.css(e,"border"+Zt[o]+"Width",!0,i))):(a+=x.css(e,"padding"+Zt[o],!0,i),"padding"!==n&&(a+=x.css(e,"border"+Zt[o]+"Width",!0,i)));return a}function sn(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=Rt(e),a=x.support.boxSizing&&"border-box"===x.css(e,"boxSizing",!1,o);if(0>=i||null==i){if(i=Wt(e,t,o),(0>i||null==i)&&(i=e.style[t]),Yt.test(i))return i;r=a&&(x.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+an(e,t,n||(a?"border":"content"),r,o)+"px"}function ln(e){var t=a,n=Gt[e];return n||(n=un(e,t),"none"!==n&&n||(Pt=(Pt||x("").css("cssText","display:block !important")).appendTo(t.documentElement),t=(Pt[0].contentWindow||Pt[0].contentDocument).document,t.write(""),t.close(),n=un(e,t),Pt.detach()),Gt[e]=n),n}function un(e,t){var n=x(t.createElement(e)).appendTo(t.body),r=x.css(n[0],"display");return n.remove(),r}x.each(["height","width"],function(e,n){x.cssHooks[n]={get:function(e,r,i){return r?0===e.offsetWidth&&Xt.test(x.css(e,"display"))?x.swap(e,Qt,function(){return sn(e,n,i)}):sn(e,n,i):t},set:function(e,t,r){var i=r&&Rt(e);return on(e,t,r?an(e,n,r,x.support.boxSizing&&"border-box"===x.css(e,"boxSizing",!1,i),i):0)}}}),x.support.opacity||(x.cssHooks.opacity={get:function(e,t){return It.test((t&&e.currentStyle?e.currentStyle.filter:e.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":t?"1":""},set:function(e,t){var n=e.style,r=e.currentStyle,i=x.isNumeric(t)?"alpha(opacity="+100*t+")":"",o=r&&r.filter||n.filter||"";n.zoom=1,(t>=1||""===t)&&""===x.trim(o.replace($t,""))&&n.removeAttribute&&(n.removeAttribute("filter"),""===t||r&&!r.filter)||(n.filter=$t.test(o)?o.replace($t,i):o+" "+i)}}),x(function(){x.support.reliableMarginRight||(x.cssHooks.marginRight={get:function(e,n){return n?x.swap(e,{display:"inline-block"},Wt,[e,"marginRight"]):t}}),!x.support.pixelPosition&&x.fn.position&&x.each(["top","left"],function(e,n){x.cssHooks[n]={get:function(e,r){return r?(r=Wt(e,n),Yt.test(r)?x(e).position()[n]+"px":r):t}}})}),x.expr&&x.expr.filters&&(x.expr.filters.hidden=function(e){return 0>=e.offsetWidth&&0>=e.offsetHeight||!x.support.reliableHiddenOffsets&&"none"===(e.style&&e.style.display||x.css(e,"display"))},x.expr.filters.visible=function(e){return!x.expr.filters.hidden(e)}),x.each({margin:"",padding:"",border:"Width"},function(e,t){x.cssHooks[e+t]={expand:function(n){var r=0,i={},o="string"==typeof n?n.split(" "):[n];for(;4>r;r++)i[e+Zt[r]+t]=o[r]||o[r-2]||o[0];return i}},Ut.test(e)||(x.cssHooks[e+t].set=on)});var cn=/%20/g,pn=/\[\]$/,fn=/\r?\n/g,dn=/^(?:submit|button|image|reset|file)$/i,hn=/^(?:input|select|textarea|keygen)/i;x.fn.extend({serialize:function(){return x.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=x.prop(this,"elements");return e?x.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!x(this).is(":disabled")&&hn.test(this.nodeName)&&!dn.test(e)&&(this.checked||!Ct.test(e))}).map(function(e,t){var n=x(this).val();return null==n?null:x.isArray(n)?x.map(n,function(e){return{name:t.name,value:e.replace(fn,"\r\n")}}):{name:t.name,value:n.replace(fn,"\r\n")}}).get()}}),x.param=function(e,n){var r,i=[],o=function(e,t){t=x.isFunction(t)?t():null==t?"":t,i[i.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};if(n===t&&(n=x.ajaxSettings&&x.ajaxSettings.traditional),x.isArray(e)||e.jquery&&!x.isPlainObject(e))x.each(e,function(){o(this.name,this.value)});else for(r in e)gn(r,e[r],n,o);return i.join("&").replace(cn,"+")};function gn(e,t,n,r){var i;if(x.isArray(t))x.each(t,function(t,i){n||pn.test(e)?r(e,i):gn(e+"["+("object"==typeof i?t:"")+"]",i,n,r)});else if(n||"object"!==x.type(t))r(e,t);else for(i in t)gn(e+"["+i+"]",t[i],n,r)}x.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(e,t){x.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),x.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)},bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)}});var mn,yn,vn=x.now(),bn=/\?/,xn=/#.*$/,wn=/([?&])_=[^&]*/,Tn=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Cn=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Nn=/^(?:GET|HEAD)$/,kn=/^\/\//,En=/^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,Sn=x.fn.load,An={},jn={},Dn="*/".concat("*");try{yn=o.href}catch(Ln){yn=a.createElement("a"),yn.href="",yn=yn.href}mn=En.exec(yn.toLowerCase())||[];function Hn(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(T)||[];if(x.isFunction(n))while(r=o[i++])"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function qn(e,n,r,i){var o={},a=e===jn;function s(l){var u;return o[l]=!0,x.each(e[l]||[],function(e,l){var c=l(n,r,i);return"string"!=typeof c||a||o[c]?a?!(u=c):t:(n.dataTypes.unshift(c),s(c),!1)}),u}return s(n.dataTypes[0])||!o["*"]&&s("*")}function _n(e,n){var r,i,o=x.ajaxSettings.flatOptions||{};for(i in n)n[i]!==t&&((o[i]?e:r||(r={}))[i]=n[i]);return r&&x.extend(!0,e,r),e}x.fn.load=function(e,n,r){if("string"!=typeof e&&Sn)return Sn.apply(this,arguments);var i,o,a,s=this,l=e.indexOf(" ");return l>=0&&(i=e.slice(l,e.length),e=e.slice(0,l)),x.isFunction(n)?(r=n,n=t):n&&"object"==typeof n&&(a="POST"),s.length>0&&x.ajax({url:e,type:a,dataType:"html",data:n}).done(function(e){o=arguments,s.html(i?x("").append(x.parseHTML(e)).find(i):e)}).complete(r&&function(e,t){s.each(r,o||[e.responseText,t,e])}),this},x.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){x.fn[t]=function(e){return this.on(t,e)}}),x.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:yn,type:"GET",isLocal:Cn.test(mn[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Dn,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":x.parseJSON,"text xml":x.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?_n(_n(e,x.ajaxSettings),t):_n(x.ajaxSettings,e)},ajaxPrefilter:Hn(An),ajaxTransport:Hn(jn),ajax:function(e,n){"object"==typeof e&&(n=e,e=t),n=n||{};var r,i,o,a,s,l,u,c,p=x.ajaxSetup({},n),f=p.context||p,d=p.context&&(f.nodeType||f.jquery)?x(f):x.event,h=x.Deferred(),g=x.Callbacks("once memory"),m=p.statusCode||{},y={},v={},b=0,w="canceled",C={readyState:0,getResponseHeader:function(e){var t;if(2===b){if(!c){c={};while(t=Tn.exec(a))c[t[1].toLowerCase()]=t[2]}t=c[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return 2===b?a:null},setRequestHeader:function(e,t){var n=e.toLowerCase();return b||(e=v[n]=v[n]||e,y[e]=t),this},overrideMimeType:function(e){return b||(p.mimeType=e),this},statusCode:function(e){var t;if(e)if(2>b)for(t in e)m[t]=[m[t],e[t]];else C.always(e[C.status]);return this},abort:function(e){var t=e||w;return u&&u.abort(t),k(0,t),this}};if(h.promise(C).complete=g.add,C.success=C.done,C.error=C.fail,p.url=((e||p.url||yn)+"").replace(xn,"").replace(kn,mn[1]+"//"),p.type=n.method||n.type||p.method||p.type,p.dataTypes=x.trim(p.dataType||"*").toLowerCase().match(T)||[""],null==p.crossDomain&&(r=En.exec(p.url.toLowerCase()),p.crossDomain=!(!r||r[1]===mn[1]&&r[2]===mn[2]&&(r[3]||("http:"===r[1]?"80":"443"))===(mn[3]||("http:"===mn[1]?"80":"443")))),p.data&&p.processData&&"string"!=typeof p.data&&(p.data=x.param(p.data,p.traditional)),qn(An,p,n,C),2===b)return C;l=p.global,l&&0===x.active++&&x.event.trigger("ajaxStart"),p.type=p.type.toUpperCase(),p.hasContent=!Nn.test(p.type),o=p.url,p.hasContent||(p.data&&(o=p.url+=(bn.test(o)?"&":"?")+p.data,delete p.data),p.cache===!1&&(p.url=wn.test(o)?o.replace(wn,"$1_="+vn++):o+(bn.test(o)?"&":"?")+"_="+vn++)),p.ifModified&&(x.lastModified[o]&&C.setRequestHeader("If-Modified-Since",x.lastModified[o]),x.etag[o]&&C.setRequestHeader("If-None-Match",x.etag[o])),(p.data&&p.hasContent&&p.contentType!==!1||n.contentType)&&C.setRequestHeader("Content-Type",p.contentType),C.setRequestHeader("Accept",p.dataTypes[0]&&p.accepts[p.dataTypes[0]]?p.accepts[p.dataTypes[0]]+("*"!==p.dataTypes[0]?", "+Dn+"; q=0.01":""):p.accepts["*"]);for(i in p.headers)C.setRequestHeader(i,p.headers[i]);if(p.beforeSend&&(p.beforeSend.call(f,C,p)===!1||2===b))return C.abort();w="abort";for(i in{success:1,error:1,complete:1})C[i](p[i]);if(u=qn(jn,p,n,C)){C.readyState=1,l&&d.trigger("ajaxSend",[C,p]),p.async&&p.timeout>0&&(s=setTimeout(function(){C.abort("timeout")},p.timeout));try{b=1,u.send(y,k)}catch(N){if(!(2>b))throw N;k(-1,N)}}else k(-1,"No Transport");function k(e,n,r,i){var c,y,v,w,T,N=n;2!==b&&(b=2,s&&clearTimeout(s),u=t,a=i||"",C.readyState=e>0?4:0,c=e>=200&&300>e||304===e,r&&(w=Mn(p,C,r)),w=On(p,w,C,c),c?(p.ifModified&&(T=C.getResponseHeader("Last-Modified"),T&&(x.lastModified[o]=T),T=C.getResponseHeader("etag"),T&&(x.etag[o]=T)),204===e||"HEAD"===p.type?N="nocontent":304===e?N="notmodified":(N=w.state,y=w.data,v=w.error,c=!v)):(v=N,(e||!N)&&(N="error",0>e&&(e=0))),C.status=e,C.statusText=(n||N)+"",c?h.resolveWith(f,[y,N,C]):h.rejectWith(f,[C,N,v]),C.statusCode(m),m=t,l&&d.trigger(c?"ajaxSuccess":"ajaxError",[C,p,c?y:v]),g.fireWith(f,[C,N]),l&&(d.trigger("ajaxComplete",[C,p]),--x.active||x.event.trigger("ajaxStop")))}return C},getJSON:function(e,t,n){return x.get(e,t,n,"json")},getScript:function(e,n){return x.get(e,t,n,"script")}}),x.each(["get","post"],function(e,n){x[n]=function(e,r,i,o){return x.isFunction(r)&&(o=o||i,i=r,r=t),x.ajax({url:e,type:n,dataType:o,data:r,success:i})}});function Mn(e,n,r){var i,o,a,s,l=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),o===t&&(o=e.mimeType||n.getResponseHeader("Content-Type"));if(o)for(s in l)if(l[s]&&l[s].test(o)){u.unshift(s);break}if(u[0]in r)a=u[0];else{for(s in r){if(!u[0]||e.converters[s+" "+u[0]]){a=s;break}i||(i=s)}a=a||i}return a?(a!==u[0]&&u.unshift(a),r[a]):t}function On(e,t,n,r){var i,o,a,s,l,u={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)u[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!l&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),l=o,o=c.shift())if("*"===o)o=l;else if("*"!==l&&l!==o){if(a=u[l+" "+o]||u["* "+o],!a)for(i in u)if(s=i.split(" "),s[1]===o&&(a=u[l+" "+s[0]]||u["* "+s[0]])){a===!0?a=u[i]:u[i]!==!0&&(o=s[0],c.unshift(s[1]));break}if(a!==!0)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(p){return{state:"parsererror",error:a?p:"No conversion from "+l+" to "+o}}}return{state:"success",data:t}}x.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(e){return x.globalEval(e),e}}}),x.ajaxPrefilter("script",function(e){e.cache===t&&(e.cache=!1),e.crossDomain&&(e.type="GET",e.global=!1)}),x.ajaxTransport("script",function(e){if(e.crossDomain){var n,r=a.head||x("head")[0]||a.documentElement;return{send:function(t,i){n=a.createElement("script"),n.async=!0,e.scriptCharset&&(n.charset=e.scriptCharset),n.src=e.url,n.onload=n.onreadystatechange=function(e,t){(t||!n.readyState||/loaded|complete/.test(n.readyState))&&(n.onload=n.onreadystatechange=null,n.parentNode&&n.parentNode.removeChild(n),n=null,t||i(200,"success"))},r.insertBefore(n,r.firstChild)},abort:function(){n&&n.onload(t,!0)}}}});var Fn=[],Bn=/(=)\?(?=&|$)|\?\?/;x.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Fn.pop()||x.expando+"_"+vn++;return this[e]=!0,e}}),x.ajaxPrefilter("json jsonp",function(n,r,i){var o,a,s,l=n.jsonp!==!1&&(Bn.test(n.url)?"url":"string"==typeof n.data&&!(n.contentType||"").indexOf("application/x-www-form-urlencoded")&&Bn.test(n.data)&&"data");return l||"jsonp"===n.dataTypes[0]?(o=n.jsonpCallback=x.isFunction(n.jsonpCallback)?n.jsonpCallback():n.jsonpCallback,l?n[l]=n[l].replace(Bn,"$1"+o):n.jsonp!==!1&&(n.url+=(bn.test(n.url)?"&":"?")+n.jsonp+"="+o),n.converters["script json"]=function(){return s||x.error(o+" was not called"),s[0]},n.dataTypes[0]="json",a=e[o],e[o]=function(){s=arguments},i.always(function(){e[o]=a,n[o]&&(n.jsonpCallback=r.jsonpCallback,Fn.push(o)),s&&x.isFunction(a)&&a(s[0]),s=a=t}),"script"):t});var Pn,Rn,Wn=0,$n=e.ActiveXObject&&function(){var e;for(e in Pn)Pn[e](t,!0)};function In(){try{return new e.XMLHttpRequest}catch(t){}}function zn(){try{return new e.ActiveXObject("Microsoft.XMLHTTP")}catch(t){}}x.ajaxSettings.xhr=e.ActiveXObject?function(){return!this.isLocal&&In()||zn()}:In,Rn=x.ajaxSettings.xhr(),x.support.cors=!!Rn&&"withCredentials"in Rn,Rn=x.support.ajax=!!Rn,Rn&&x.ajaxTransport(function(n){if(!n.crossDomain||x.support.cors){var r;return{send:function(i,o){var a,s,l=n.xhr();if(n.username?l.open(n.type,n.url,n.async,n.username,n.password):l.open(n.type,n.url,n.async),n.xhrFields)for(s in n.xhrFields)l[s]=n.xhrFields[s];n.mimeType&&l.overrideMimeType&&l.overrideMimeType(n.mimeType),n.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");try{for(s in i)l.setRequestHeader(s,i[s])}catch(u){}l.send(n.hasContent&&n.data||null),r=function(e,i){var s,u,c,p;try{if(r&&(i||4===l.readyState))if(r=t,a&&(l.onreadystatechange=x.noop,$n&&delete Pn[a]),i)4!==l.readyState&&l.abort();else{p={},s=l.status,u=l.getAllResponseHeaders(),"string"==typeof l.responseText&&(p.text=l.responseText);try{c=l.statusText}catch(f){c=""}s||!n.isLocal||n.crossDomain?1223===s&&(s=204):s=p.text?200:404}}catch(d){i||o(-1,d)}p&&o(s,c,p,u)},n.async?4===l.readyState?setTimeout(r):(a=++Wn,$n&&(Pn||(Pn={},x(e).unload($n)),Pn[a]=r),l.onreadystatechange=r):r()},abort:function(){r&&r(t,!0)}}}});var Xn,Un,Vn=/^(?:toggle|show|hide)$/,Yn=RegExp("^(?:([+-])=|)("+w+")([a-z%]*)$","i"),Jn=/queueHooks$/,Gn=[nr],Qn={"*":[function(e,t){var n=this.createTween(e,t),r=n.cur(),i=Yn.exec(t),o=i&&i[3]||(x.cssNumber[e]?"":"px"),a=(x.cssNumber[e]||"px"!==o&&+r)&&Yn.exec(x.css(n.elem,e)),s=1,l=20;if(a&&a[3]!==o){o=o||a[3],i=i||[],a=+r||1;do s=s||".5",a/=s,x.style(n.elem,e,a+o);while(s!==(s=n.cur()/r)&&1!==s&&--l)}return i&&(a=n.start=+a||+r||0,n.unit=o,n.end=i[1]?a+(i[1]+1)*i[2]:+i[2]),n}]};function Kn(){return setTimeout(function(){Xn=t}),Xn=x.now()}function Zn(e,t,n){var r,i=(Qn[t]||[]).concat(Qn["*"]),o=0,a=i.length;for(;a>o;o++)if(r=i[o].call(n,t,e))return r}function er(e,t,n){var r,i,o=0,a=Gn.length,s=x.Deferred().always(function(){delete l.elem}),l=function(){if(i)return!1;var t=Xn||Kn(),n=Math.max(0,u.startTime+u.duration-t),r=n/u.duration||0,o=1-r,a=0,l=u.tweens.length;for(;l>a;a++)u.tweens[a].run(o);return s.notifyWith(e,[u,o,n]),1>o&&l?n:(s.resolveWith(e,[u]),!1)},u=s.promise({elem:e,props:x.extend({},t),opts:x.extend(!0,{specialEasing:{}},n),originalProperties:t,originalOptions:n,startTime:Xn||Kn(),duration:n.duration,tweens:[],createTween:function(t,n){var r=x.Tween(e,u.opts,t,n,u.opts.specialEasing[t]||u.opts.easing);return u.tweens.push(r),r},stop:function(t){var n=0,r=t?u.tweens.length:0;if(i)return this;for(i=!0;r>n;n++)u.tweens[n].run(1);return t?s.resolveWith(e,[u,t]):s.rejectWith(e,[u,t]),this}}),c=u.props;for(tr(c,u.opts.specialEasing);a>o;o++)if(r=Gn[o].call(u,e,c,u.opts))return r;return x.map(c,Zn,u),x.isFunction(u.opts.start)&&u.opts.start.call(e,u),x.fx.timer(x.extend(l,{elem:e,anim:u,queue:u.opts.queue})),u.progress(u.opts.progress).done(u.opts.done,u.opts.complete).fail(u.opts.fail).always(u.opts.always)}function tr(e,t){var n,r,i,o,a;for(n in e)if(r=x.camelCase(n),i=t[r],o=e[n],x.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),a=x.cssHooks[r],a&&"expand"in a){o=a.expand(o),delete e[r];for(n in o)n in e||(e[n]=o[n],t[n]=i)}else t[r]=i}x.Animation=x.extend(er,{tweener:function(e,t){x.isFunction(e)?(t=e,e=["*"]):e=e.split(" ");var n,r=0,i=e.length;for(;i>r;r++)n=e[r],Qn[n]=Qn[n]||[],Qn[n].unshift(t)},prefilter:function(e,t){t?Gn.unshift(e):Gn.push(e)}});function nr(e,t,n){var r,i,o,a,s,l,u=this,c={},p=e.style,f=e.nodeType&&nn(e),d=x._data(e,"fxshow");n.queue||(s=x._queueHooks(e,"fx"),null==s.unqueued&&(s.unqueued=0,l=s.empty.fire,s.empty.fire=function(){s.unqueued||l()}),s.unqueued++,u.always(function(){u.always(function(){s.unqueued--,x.queue(e,"fx").length||s.empty.fire()})})),1===e.nodeType&&("height"in t||"width"in t)&&(n.overflow=[p.overflow,p.overflowX,p.overflowY],"inline"===x.css(e,"display")&&"none"===x.css(e,"float")&&(x.support.inlineBlockNeedsLayout&&"inline"!==ln(e.nodeName)?p.zoom=1:p.display="inline-block")),n.overflow&&(p.overflow="hidden",x.support.shrinkWrapBlocks||u.always(function(){p.overflow=n.overflow[0],p.overflowX=n.overflow[1],p.overflowY=n.overflow[2]}));for(r in t)if(i=t[r],Vn.exec(i)){if(delete t[r],o=o||"toggle"===i,i===(f?"hide":"show"))continue;c[r]=d&&d[r]||x.style(e,r)}if(!x.isEmptyObject(c)){d?"hidden"in d&&(f=d.hidden):d=x._data(e,"fxshow",{}),o&&(d.hidden=!f),f?x(e).show():u.done(function(){x(e).hide()}),u.done(function(){var t;x._removeData(e,"fxshow");for(t in c)x.style(e,t,c[t])});for(r in c)a=Zn(f?d[r]:0,r,u),r in d||(d[r]=a.start,f&&(a.end=a.start,a.start="width"===r||"height"===r?1:0))}}function rr(e,t,n,r,i){return new rr.prototype.init(e,t,n,r,i)}x.Tween=rr,rr.prototype={constructor:rr,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||"swing",this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(x.cssNumber[n]?"":"px")},cur:function(){var e=rr.propHooks[this.prop];return e&&e.get?e.get(this):rr.propHooks._default.get(this)},run:function(e){var t,n=rr.propHooks[this.prop];return this.pos=t=this.options.duration?x.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):rr.propHooks._default.set(this),this}},rr.prototype.init.prototype=rr.prototype,rr.propHooks={_default:{get:function(e){var t;return null==e.elem[e.prop]||e.elem.style&&null!=e.elem.style[e.prop]?(t=x.css(e.elem,e.prop,""),t&&"auto"!==t?t:0):e.elem[e.prop]},set:function(e){x.fx.step[e.prop]?x.fx.step[e.prop](e):e.elem.style&&(null!=e.elem.style[x.cssProps[e.prop]]||x.cssHooks[e.prop])?x.style(e.elem,e.prop,e.now+e.unit):e.elem[e.prop]=e.now}}},rr.propHooks.scrollTop=rr.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},x.each(["toggle","show","hide"],function(e,t){var n=x.fn[t];x.fn[t]=function(e,r,i){return null==e||"boolean"==typeof e?n.apply(this,arguments):this.animate(ir(t,!0),e,r,i)}}),x.fn.extend({fadeTo:function(e,t,n,r){return this.filter(nn).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=x.isEmptyObject(e),o=x.speed(t,n,r),a=function(){var t=er(this,x.extend({},e),o);(i||x._data(this,"finish"))&&t.stop(!0)};return a.finish=a,i||o.queue===!1?this.each(a):this.queue(o.queue,a)},stop:function(e,n,r){var i=function(e){var t=e.stop;delete e.stop,t(r)};return"string"!=typeof e&&(r=n,n=e,e=t),n&&e!==!1&&this.queue(e||"fx",[]),this.each(function(){var t=!0,n=null!=e&&e+"queueHooks",o=x.timers,a=x._data(this);if(n)a[n]&&a[n].stop&&i(a[n]);else for(n in a)a[n]&&a[n].stop&&Jn.test(n)&&i(a[n]);for(n=o.length;n--;)o[n].elem!==this||null!=e&&o[n].queue!==e||(o[n].anim.stop(r),t=!1,o.splice(n,1));(t||!r)&&x.dequeue(this,e)})},finish:function(e){return e!==!1&&(e=e||"fx"),this.each(function(){var t,n=x._data(this),r=n[e+"queue"],i=n[e+"queueHooks"],o=x.timers,a=r?r.length:0;for(n.finish=!0,x.queue(this,e,[]),i&&i.stop&&i.stop.call(this,!0),t=o.length;t--;)o[t].elem===this&&o[t].queue===e&&(o[t].anim.stop(!0),o.splice(t,1));for(t=0;a>t;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}});function ir(e,t){var n,r={height:e},i=0;for(t=t?1:0;4>i;i+=2-t)n=Zt[i],r["margin"+n]=r["padding"+n]=e;return t&&(r.opacity=r.width=e),r}x.each({slideDown:ir("show"),slideUp:ir("hide"),slideToggle:ir("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,t){x.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),x.speed=function(e,t,n){var r=e&&"object"==typeof e?x.extend({},e):{complete:n||!n&&t||x.isFunction(e)&&e,duration:e,easing:n&&t||t&&!x.isFunction(t)&&t};return r.duration=x.fx.off?0:"number"==typeof r.duration?r.duration:r.duration in x.fx.speeds?x.fx.speeds[r.duration]:x.fx.speeds._default,(null==r.queue||r.queue===!0)&&(r.queue="fx"),r.old=r.complete,r.complete=function(){x.isFunction(r.old)&&r.old.call(this),r.queue&&x.dequeue(this,r.queue)},r},x.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2}},x.timers=[],x.fx=rr.prototype.init,x.fx.tick=function(){var e,n=x.timers,r=0;for(Xn=x.now();n.length>r;r++)e=n[r],e()||n[r]!==e||n.splice(r--,1);n.length||x.fx.stop(),Xn=t},x.fx.timer=function(e){e()&&x.timers.push(e)&&x.fx.start()},x.fx.interval=13,x.fx.start=function(){Un||(Un=setInterval(x.fx.tick,x.fx.interval))},x.fx.stop=function(){clearInterval(Un),Un=null},x.fx.speeds={slow:600,fast:200,_default:400},x.fx.step={},x.expr&&x.expr.filters&&(x.expr.filters.animated=function(e){return x.grep(x.timers,function(t){return e===t.elem}).length}),x.fn.offset=function(e){if(arguments.length)return e===t?this:this.each(function(t){x.offset.setOffset(this,e,t)});var n,r,o={top:0,left:0},a=this[0],s=a&&a.ownerDocument;if(s)return n=s.documentElement,x.contains(n,a)?(typeof a.getBoundingClientRect!==i&&(o=a.getBoundingClientRect()),r=or(s),{top:o.top+(r.pageYOffset||n.scrollTop)-(n.clientTop||0),left:o.left+(r.pageXOffset||n.scrollLeft)-(n.clientLeft||0)}):o},x.offset={setOffset:function(e,t,n){var r=x.css(e,"position");"static"===r&&(e.style.position="relative");var i=x(e),o=i.offset(),a=x.css(e,"top"),s=x.css(e,"left"),l=("absolute"===r||"fixed"===r)&&x.inArray("auto",[a,s])>-1,u={},c={},p,f;l?(c=i.position(),p=c.top,f=c.left):(p=parseFloat(a)||0,f=parseFloat(s)||0),x.isFunction(t)&&(t=t.call(e,n,o)),null!=t.top&&(u.top=t.top-o.top+p),null!=t.left&&(u.left=t.left-o.left+f),"using"in t?t.using.call(e,u):i.css(u)}},x.fn.extend({position:function(){if(this[0]){var e,t,n={top:0,left:0},r=this[0];return"fixed"===x.css(r,"position")?t=r.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),x.nodeName(e[0],"html")||(n=e.offset()),n.top+=x.css(e[0],"borderTopWidth",!0),n.left+=x.css(e[0],"borderLeftWidth",!0)),{top:t.top-n.top-x.css(r,"marginTop",!0),left:t.left-n.left-x.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||s;while(e&&!x.nodeName(e,"html")&&"static"===x.css(e,"position"))e=e.offsetParent;return e||s})}}),x.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,n){var r=/Y/.test(n);x.fn[e]=function(i){return x.access(this,function(e,i,o){var a=or(e);return o===t?a?n in a?a[n]:a.document.documentElement[i]:e[i]:(a?a.scrollTo(r?x(a).scrollLeft():o,r?o:x(a).scrollTop()):e[i]=o,t)},e,i,arguments.length,null)}});function or(e){return x.isWindow(e)?e:9===e.nodeType?e.defaultView||e.parentWindow:!1}x.each({Height:"height",Width:"width"},function(e,n){x.each({padding:"inner"+e,content:n,"":"outer"+e},function(r,i){x.fn[i]=function(i,o){var a=arguments.length&&(r||"boolean"!=typeof i),s=r||(i===!0||o===!0?"margin":"border");return x.access(this,function(n,r,i){var o;return x.isWindow(n)?n.document.documentElement["client"+e]:9===n.nodeType?(o=n.documentElement,Math.max(n.body["scroll"+e],o["scroll"+e],n.body["offset"+e],o["offset"+e],o["client"+e])):i===t?x.css(n,r,s):x.style(n,r,i,s)},n,a?i:t,a,null)}})}),x.fn.size=function(){return this.length},x.fn.andSelf=x.fn.addBack,"object"==typeof module&&module&&"object"==typeof module.exports?module.exports=x:(e.jQuery=e.$=x,"function"==typeof define&&define.amd&&define("jquery",[],function(){return x}))})(window);
diff --git a/tests/lib/qunit-1.12.0.css b/tests/lib/qunit-1.12.0.css
deleted file mode 100644
index 7ba3f9a3..00000000
--- a/tests/lib/qunit-1.12.0.css
+++ /dev/null
@@ -1,244 +0,0 @@
-/**
- * QUnit v1.12.0 - A JavaScript Unit Testing Framework
- *
- * http://qunitjs.com
- *
- * Copyright 2012 jQuery Foundation and other contributors
- * Released under the MIT license.
- * http://jquery.org/license
- */
-
-/** Font Family and Sizes */
-
-#qunit-tests, #qunit-header, #qunit-banner, #qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult {
- font-family: "Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial, sans-serif;
-}
-
-#qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult, #qunit-tests li { font-size: small; }
-#qunit-tests { font-size: smaller; }
-
-
-/** Resets */
-
-#qunit-tests, #qunit-header, #qunit-banner, #qunit-userAgent, #qunit-testresult, #qunit-modulefilter {
- margin: 0;
- padding: 0;
-}
-
-
-/** Header */
-
-#qunit-header {
- padding: 0.5em 0 0.5em 1em;
-
- color: #8699a4;
- background-color: #0d3349;
-
- font-size: 1.5em;
- line-height: 1em;
- font-weight: normal;
-
- border-radius: 5px 5px 0 0;
- -moz-border-radius: 5px 5px 0 0;
- -webkit-border-top-right-radius: 5px;
- -webkit-border-top-left-radius: 5px;
-}
-
-#qunit-header a {
- text-decoration: none;
- color: #c2ccd1;
-}
-
-#qunit-header a:hover,
-#qunit-header a:focus {
- color: #fff;
-}
-
-#qunit-testrunner-toolbar label {
- display: inline-block;
- padding: 0 .5em 0 .1em;
-}
-
-#qunit-banner {
- height: 5px;
-}
-
-#qunit-testrunner-toolbar {
- padding: 0.5em 0 0.5em 2em;
- color: #5E740B;
- background-color: #eee;
- overflow: hidden;
-}
-
-#qunit-userAgent {
- padding: 0.5em 0 0.5em 2.5em;
- background-color: #2b81af;
- color: #fff;
- text-shadow: rgba(0, 0, 0, 0.5) 2px 2px 1px;
-}
-
-#qunit-modulefilter-container {
- float: right;
-}
-
-/** Tests: Pass/Fail */
-
-#qunit-tests {
- list-style-position: inside;
-}
-
-#qunit-tests li {
- padding: 0.4em 0.5em 0.4em 2.5em;
- border-bottom: 1px solid #fff;
- list-style-position: inside;
-}
-
-#qunit-tests.hidepass li.pass, #qunit-tests.hidepass li.running {
- display: none;
-}
-
-#qunit-tests li strong {
- cursor: pointer;
-}
-
-#qunit-tests li a {
- padding: 0.5em;
- color: #c2ccd1;
- text-decoration: none;
-}
-#qunit-tests li a:hover,
-#qunit-tests li a:focus {
- color: #000;
-}
-
-#qunit-tests li .runtime {
- float: right;
- font-size: smaller;
-}
-
-.qunit-assert-list {
- margin-top: 0.5em;
- padding: 0.5em;
-
- background-color: #fff;
-
- border-radius: 5px;
- -moz-border-radius: 5px;
- -webkit-border-radius: 5px;
-}
-
-.qunit-collapsed {
- display: none;
-}
-
-#qunit-tests table {
- border-collapse: collapse;
- margin-top: .2em;
-}
-
-#qunit-tests th {
- text-align: right;
- vertical-align: top;
- padding: 0 .5em 0 0;
-}
-
-#qunit-tests td {
- vertical-align: top;
-}
-
-#qunit-tests pre {
- margin: 0;
- white-space: pre-wrap;
- word-wrap: break-word;
-}
-
-#qunit-tests del {
- background-color: #e0f2be;
- color: #374e0c;
- text-decoration: none;
-}
-
-#qunit-tests ins {
- background-color: #ffcaca;
- color: #500;
- text-decoration: none;
-}
-
-/*** Test Counts */
-
-#qunit-tests b.counts { color: black; }
-#qunit-tests b.passed { color: #5E740B; }
-#qunit-tests b.failed { color: #710909; }
-
-#qunit-tests li li {
- padding: 5px;
- background-color: #fff;
- border-bottom: none;
- list-style-position: inside;
-}
-
-/*** Passing Styles */
-
-#qunit-tests li li.pass {
- color: #3c510c;
- background-color: #fff;
- border-left: 10px solid #C6E746;
-}
-
-#qunit-tests .pass { color: #528CE0; background-color: #D2E0E6; }
-#qunit-tests .pass .test-name { color: #366097; }
-
-#qunit-tests .pass .test-actual,
-#qunit-tests .pass .test-expected { color: #999999; }
-
-#qunit-banner.qunit-pass { background-color: #C6E746; }
-
-/*** Failing Styles */
-
-#qunit-tests li li.fail {
- color: #710909;
- background-color: #fff;
- border-left: 10px solid #EE5757;
- white-space: pre;
-}
-
-#qunit-tests > li:last-child {
- border-radius: 0 0 5px 5px;
- -moz-border-radius: 0 0 5px 5px;
- -webkit-border-bottom-right-radius: 5px;
- -webkit-border-bottom-left-radius: 5px;
-}
-
-#qunit-tests .fail { color: #000000; background-color: #EE5757; }
-#qunit-tests .fail .test-name,
-#qunit-tests .fail .module-name { color: #000000; }
-
-#qunit-tests .fail .test-actual { color: #EE5757; }
-#qunit-tests .fail .test-expected { color: green; }
-
-#qunit-banner.qunit-fail { background-color: #EE5757; }
-
-
-/** Result */
-
-#qunit-testresult {
- padding: 0.5em 0.5em 0.5em 2.5em;
-
- color: #2b81af;
- background-color: #D2E0E6;
-
- border-bottom: 1px solid white;
-}
-#qunit-testresult .module-name {
- font-weight: bold;
-}
-
-/** Fixture */
-
-#qunit-fixture {
- position: absolute;
- top: -10000px;
- left: -10000px;
- width: 1000px;
- height: 1000px;
-}
diff --git a/tests/lib/qunit-1.12.0.js b/tests/lib/qunit-1.12.0.js
deleted file mode 100644
index 84c73907..00000000
--- a/tests/lib/qunit-1.12.0.js
+++ /dev/null
@@ -1,2212 +0,0 @@
-/**
- * QUnit v1.12.0 - A JavaScript Unit Testing Framework
- *
- * http://qunitjs.com
- *
- * Copyright 2013 jQuery Foundation and other contributors
- * Released under the MIT license.
- * https://jquery.org/license/
- */
-
-(function( window ) {
-
-var QUnit,
- assert,
- config,
- onErrorFnPrev,
- testId = 0,
- fileName = (sourceFromStacktrace( 0 ) || "" ).replace(/(:\d+)+\)?/, "").replace(/.+\//, ""),
- toString = Object.prototype.toString,
- hasOwn = Object.prototype.hasOwnProperty,
- // Keep a local reference to Date (GH-283)
- Date = window.Date,
- setTimeout = window.setTimeout,
- defined = {
- setTimeout: typeof window.setTimeout !== "undefined",
- sessionStorage: (function() {
- var x = "qunit-test-string";
- try {
- sessionStorage.setItem( x, x );
- sessionStorage.removeItem( x );
- return true;
- } catch( e ) {
- return false;
- }
- }())
- },
- /**
- * Provides a normalized error string, correcting an issue
- * with IE 7 (and prior) where Error.prototype.toString is
- * not properly implemented
- *
- * Based on http://es5.github.com/#x15.11.4.4
- *
- * @param {String|Error} error
- * @return {String} error message
- */
- errorString = function( error ) {
- var name, message,
- errorString = error.toString();
- if ( errorString.substring( 0, 7 ) === "[object" ) {
- name = error.name ? error.name.toString() : "Error";
- message = error.message ? error.message.toString() : "";
- if ( name && message ) {
- return name + ": " + message;
- } else if ( name ) {
- return name;
- } else if ( message ) {
- return message;
- } else {
- return "Error";
- }
- } else {
- return errorString;
- }
- },
- /**
- * Makes a clone of an object using only Array or Object as base,
- * and copies over the own enumerable properties.
- *
- * @param {Object} obj
- * @return {Object} New object with only the own properties (recursively).
- */
- objectValues = function( obj ) {
- // Grunt 0.3.x uses an older version of jshint that still has jshint/jshint#392.
- /*jshint newcap: false */
- var key, val,
- vals = QUnit.is( "array", obj ) ? [] : {};
- for ( key in obj ) {
- if ( hasOwn.call( obj, key ) ) {
- val = obj[key];
- vals[key] = val === Object(val) ? objectValues(val) : val;
- }
- }
- return vals;
- };
-
-function Test( settings ) {
- extend( this, settings );
- this.assertions = [];
- this.testNumber = ++Test.count;
-}
-
-Test.count = 0;
-
-Test.prototype = {
- init: function() {
- var a, b, li,
- tests = id( "qunit-tests" );
-
- if ( tests ) {
- b = document.createElement( "strong" );
- b.innerHTML = this.nameHtml;
-
- // `a` initialized at top of scope
- a = document.createElement( "a" );
- a.innerHTML = "Rerun";
- a.href = QUnit.url({ testNumber: this.testNumber });
-
- li = document.createElement( "li" );
- li.appendChild( b );
- li.appendChild( a );
- li.className = "running";
- li.id = this.id = "qunit-test-output" + testId++;
-
- tests.appendChild( li );
- }
- },
- setup: function() {
- if (
- // Emit moduleStart when we're switching from one module to another
- this.module !== config.previousModule ||
- // They could be equal (both undefined) but if the previousModule property doesn't
- // yet exist it means this is the first test in a suite that isn't wrapped in a
- // module, in which case we'll just emit a moduleStart event for 'undefined'.
- // Without this, reporters can get testStart before moduleStart which is a problem.
- !hasOwn.call( config, "previousModule" )
- ) {
- if ( hasOwn.call( config, "previousModule" ) ) {
- runLoggingCallbacks( "moduleDone", QUnit, {
- name: config.previousModule,
- failed: config.moduleStats.bad,
- passed: config.moduleStats.all - config.moduleStats.bad,
- total: config.moduleStats.all
- });
- }
- config.previousModule = this.module;
- config.moduleStats = { all: 0, bad: 0 };
- runLoggingCallbacks( "moduleStart", QUnit, {
- name: this.module
- });
- }
-
- config.current = this;
-
- this.testEnvironment = extend({
- setup: function() {},
- teardown: function() {}
- }, this.moduleTestEnvironment );
-
- this.started = +new Date();
- runLoggingCallbacks( "testStart", QUnit, {
- name: this.testName,
- module: this.module
- });
-
- /*jshint camelcase:false */
-
-
- /**
- * Expose the current test environment.
- *
- * @deprecated since 1.12.0: Use QUnit.config.current.testEnvironment instead.
- */
- QUnit.current_testEnvironment = this.testEnvironment;
-
- /*jshint camelcase:true */
-
- if ( !config.pollution ) {
- saveGlobal();
- }
- if ( config.notrycatch ) {
- this.testEnvironment.setup.call( this.testEnvironment, QUnit.assert );
- return;
- }
- try {
- this.testEnvironment.setup.call( this.testEnvironment, QUnit.assert );
- } catch( e ) {
- QUnit.pushFailure( "Setup failed on " + this.testName + ": " + ( e.message || e ), extractStacktrace( e, 1 ) );
- }
- },
- run: function() {
- config.current = this;
-
- var running = id( "qunit-testresult" );
-
- if ( running ) {
- running.innerHTML = "Running:
" + this.nameHtml;
- }
-
- if ( this.async ) {
- QUnit.stop();
- }
-
- this.callbackStarted = +new Date();
-
- if ( config.notrycatch ) {
- this.callback.call( this.testEnvironment, QUnit.assert );
- this.callbackRuntime = +new Date() - this.callbackStarted;
- return;
- }
-
- try {
- this.callback.call( this.testEnvironment, QUnit.assert );
- this.callbackRuntime = +new Date() - this.callbackStarted;
- } catch( e ) {
- this.callbackRuntime = +new Date() - this.callbackStarted;
-
- QUnit.pushFailure( "Died on test #" + (this.assertions.length + 1) + " " + this.stack + ": " + ( e.message || e ), extractStacktrace( e, 0 ) );
- // else next test will carry the responsibility
- saveGlobal();
-
- // Restart the tests if they're blocking
- if ( config.blocking ) {
- QUnit.start();
- }
- }
- },
- teardown: function() {
- config.current = this;
- if ( config.notrycatch ) {
- if ( typeof this.callbackRuntime === "undefined" ) {
- this.callbackRuntime = +new Date() - this.callbackStarted;
- }
- this.testEnvironment.teardown.call( this.testEnvironment, QUnit.assert );
- return;
- } else {
- try {
- this.testEnvironment.teardown.call( this.testEnvironment, QUnit.assert );
- } catch( e ) {
- QUnit.pushFailure( "Teardown failed on " + this.testName + ": " + ( e.message || e ), extractStacktrace( e, 1 ) );
- }
- }
- checkPollution();
- },
- finish: function() {
- config.current = this;
- if ( config.requireExpects && this.expected === null ) {
- QUnit.pushFailure( "Expected number of assertions to be defined, but expect() was not called.", this.stack );
- } else if ( this.expected !== null && this.expected !== this.assertions.length ) {
- QUnit.pushFailure( "Expected " + this.expected + " assertions, but " + this.assertions.length + " were run", this.stack );
- } else if ( this.expected === null && !this.assertions.length ) {
- QUnit.pushFailure( "Expected at least one assertion, but none were run - call expect(0) to accept zero assertions.", this.stack );
- }
-
- var i, assertion, a, b, time, li, ol,
- test = this,
- good = 0,
- bad = 0,
- tests = id( "qunit-tests" );
-
- this.runtime = +new Date() - this.started;
- config.stats.all += this.assertions.length;
- config.moduleStats.all += this.assertions.length;
-
- if ( tests ) {
- ol = document.createElement( "ol" );
- ol.className = "qunit-assert-list";
-
- for ( i = 0; i < this.assertions.length; i++ ) {
- assertion = this.assertions[i];
-
- li = document.createElement( "li" );
- li.className = assertion.result ? "pass" : "fail";
- li.innerHTML = assertion.message || ( assertion.result ? "okay" : "failed" );
- ol.appendChild( li );
-
- if ( assertion.result ) {
- good++;
- } else {
- bad++;
- config.stats.bad++;
- config.moduleStats.bad++;
- }
- }
-
- // store result when possible
- if ( QUnit.config.reorder && defined.sessionStorage ) {
- if ( bad ) {
- sessionStorage.setItem( "qunit-test-" + this.module + "-" + this.testName, bad );
- } else {
- sessionStorage.removeItem( "qunit-test-" + this.module + "-" + this.testName );
- }
- }
-
- if ( bad === 0 ) {
- addClass( ol, "qunit-collapsed" );
- }
-
- // `b` initialized at top of scope
- b = document.createElement( "strong" );
- b.innerHTML = this.nameHtml + "
(" + bad + " , " + good + " , " + this.assertions.length + ") ";
-
- addEvent(b, "click", function() {
- var next = b.parentNode.lastChild,
- collapsed = hasClass( next, "qunit-collapsed" );
- ( collapsed ? removeClass : addClass )( next, "qunit-collapsed" );
- });
-
- addEvent(b, "dblclick", function( e ) {
- var target = e && e.target ? e.target : window.event.srcElement;
- if ( target.nodeName.toLowerCase() === "span" || target.nodeName.toLowerCase() === "b" ) {
- target = target.parentNode;
- }
- if ( window.location && target.nodeName.toLowerCase() === "strong" ) {
- window.location = QUnit.url({ testNumber: test.testNumber });
- }
- });
-
- // `time` initialized at top of scope
- time = document.createElement( "span" );
- time.className = "runtime";
- time.innerHTML = this.runtime + " ms";
-
- // `li` initialized at top of scope
- li = id( this.id );
- li.className = bad ? "fail" : "pass";
- li.removeChild( li.firstChild );
- a = li.firstChild;
- li.appendChild( b );
- li.appendChild( a );
- li.appendChild( time );
- li.appendChild( ol );
-
- } else {
- for ( i = 0; i < this.assertions.length; i++ ) {
- if ( !this.assertions[i].result ) {
- bad++;
- config.stats.bad++;
- config.moduleStats.bad++;
- }
- }
- }
-
- runLoggingCallbacks( "testDone", QUnit, {
- name: this.testName,
- module: this.module,
- failed: bad,
- passed: this.assertions.length - bad,
- total: this.assertions.length,
- duration: this.runtime
- });
-
- QUnit.reset();
-
- config.current = undefined;
- },
-
- queue: function() {
- var bad,
- test = this;
-
- synchronize(function() {
- test.init();
- });
- function run() {
- // each of these can by async
- synchronize(function() {
- test.setup();
- });
- synchronize(function() {
- test.run();
- });
- synchronize(function() {
- test.teardown();
- });
- synchronize(function() {
- test.finish();
- });
- }
-
- // `bad` initialized at top of scope
- // defer when previous test run passed, if storage is available
- bad = QUnit.config.reorder && defined.sessionStorage &&
- +sessionStorage.getItem( "qunit-test-" + this.module + "-" + this.testName );
-
- if ( bad ) {
- run();
- } else {
- synchronize( run, true );
- }
- }
-};
-
-// Root QUnit object.
-// `QUnit` initialized at top of scope
-QUnit = {
-
- // call on start of module test to prepend name to all tests
- module: function( name, testEnvironment ) {
- config.currentModule = name;
- config.currentModuleTestEnvironment = testEnvironment;
- config.modules[name] = true;
- },
-
- asyncTest: function( testName, expected, callback ) {
- if ( arguments.length === 2 ) {
- callback = expected;
- expected = null;
- }
-
- QUnit.test( testName, expected, callback, true );
- },
-
- test: function( testName, expected, callback, async ) {
- var test,
- nameHtml = "
" + escapeText( testName ) + " ";
-
- if ( arguments.length === 2 ) {
- callback = expected;
- expected = null;
- }
-
- if ( config.currentModule ) {
- nameHtml = "
" + escapeText( config.currentModule ) + " : " + nameHtml;
- }
-
- test = new Test({
- nameHtml: nameHtml,
- testName: testName,
- expected: expected,
- async: async,
- callback: callback,
- module: config.currentModule,
- moduleTestEnvironment: config.currentModuleTestEnvironment,
- stack: sourceFromStacktrace( 2 )
- });
-
- if ( !validTest( test ) ) {
- return;
- }
-
- test.queue();
- },
-
- // Specify the number of expected assertions to guarantee that failed test (no assertions are run at all) don't slip through.
- expect: function( asserts ) {
- if (arguments.length === 1) {
- config.current.expected = asserts;
- } else {
- return config.current.expected;
- }
- },
-
- start: function( count ) {
- // QUnit hasn't been initialized yet.
- // Note: RequireJS (et al) may delay onLoad
- if ( config.semaphore === undefined ) {
- QUnit.begin(function() {
- // This is triggered at the top of QUnit.load, push start() to the event loop, to allow QUnit.load to finish first
- setTimeout(function() {
- QUnit.start( count );
- });
- });
- return;
- }
-
- config.semaphore -= count || 1;
- // don't start until equal number of stop-calls
- if ( config.semaphore > 0 ) {
- return;
- }
- // ignore if start is called more often then stop
- if ( config.semaphore < 0 ) {
- config.semaphore = 0;
- QUnit.pushFailure( "Called start() while already started (QUnit.config.semaphore was 0 already)", null, sourceFromStacktrace(2) );
- return;
- }
- // A slight delay, to avoid any current callbacks
- if ( defined.setTimeout ) {
- setTimeout(function() {
- if ( config.semaphore > 0 ) {
- return;
- }
- if ( config.timeout ) {
- clearTimeout( config.timeout );
- }
-
- config.blocking = false;
- process( true );
- }, 13);
- } else {
- config.blocking = false;
- process( true );
- }
- },
-
- stop: function( count ) {
- config.semaphore += count || 1;
- config.blocking = true;
-
- if ( config.testTimeout && defined.setTimeout ) {
- clearTimeout( config.timeout );
- config.timeout = setTimeout(function() {
- QUnit.ok( false, "Test timed out" );
- config.semaphore = 1;
- QUnit.start();
- }, config.testTimeout );
- }
- }
-};
-
-// `assert` initialized at top of scope
-// Assert helpers
-// All of these must either call QUnit.push() or manually do:
-// - runLoggingCallbacks( "log", .. );
-// - config.current.assertions.push({ .. });
-// We attach it to the QUnit object *after* we expose the public API,
-// otherwise `assert` will become a global variable in browsers (#341).
-assert = {
- /**
- * Asserts rough true-ish result.
- * @name ok
- * @function
- * @example ok( "asdfasdf".length > 5, "There must be at least 5 chars" );
- */
- ok: function( result, msg ) {
- if ( !config.current ) {
- throw new Error( "ok() assertion outside test context, was " + sourceFromStacktrace(2) );
- }
- result = !!result;
- msg = msg || (result ? "okay" : "failed" );
-
- var source,
- details = {
- module: config.current.module,
- name: config.current.testName,
- result: result,
- message: msg
- };
-
- msg = "
" + escapeText( msg ) + " ";
-
- if ( !result ) {
- source = sourceFromStacktrace( 2 );
- if ( source ) {
- details.source = source;
- msg += "
Source: " + escapeText( source ) + "
";
- }
- }
- runLoggingCallbacks( "log", QUnit, details );
- config.current.assertions.push({
- result: result,
- message: msg
- });
- },
-
- /**
- * Assert that the first two arguments are equal, with an optional message.
- * Prints out both actual and expected values.
- * @name equal
- * @function
- * @example equal( format( "Received {0} bytes.", 2), "Received 2 bytes.", "format() replaces {0} with next argument" );
- */
- equal: function( actual, expected, message ) {
- /*jshint eqeqeq:false */
- QUnit.push( expected == actual, actual, expected, message );
- },
-
- /**
- * @name notEqual
- * @function
- */
- notEqual: function( actual, expected, message ) {
- /*jshint eqeqeq:false */
- QUnit.push( expected != actual, actual, expected, message );
- },
-
- /**
- * @name propEqual
- * @function
- */
- propEqual: function( actual, expected, message ) {
- actual = objectValues(actual);
- expected = objectValues(expected);
- QUnit.push( QUnit.equiv(actual, expected), actual, expected, message );
- },
-
- /**
- * @name notPropEqual
- * @function
- */
- notPropEqual: function( actual, expected, message ) {
- actual = objectValues(actual);
- expected = objectValues(expected);
- QUnit.push( !QUnit.equiv(actual, expected), actual, expected, message );
- },
-
- /**
- * @name deepEqual
- * @function
- */
- deepEqual: function( actual, expected, message ) {
- QUnit.push( QUnit.equiv(actual, expected), actual, expected, message );
- },
-
- /**
- * @name notDeepEqual
- * @function
- */
- notDeepEqual: function( actual, expected, message ) {
- QUnit.push( !QUnit.equiv(actual, expected), actual, expected, message );
- },
-
- /**
- * @name strictEqual
- * @function
- */
- strictEqual: function( actual, expected, message ) {
- QUnit.push( expected === actual, actual, expected, message );
- },
-
- /**
- * @name notStrictEqual
- * @function
- */
- notStrictEqual: function( actual, expected, message ) {
- QUnit.push( expected !== actual, actual, expected, message );
- },
-
- "throws": function( block, expected, message ) {
- var actual,
- expectedOutput = expected,
- ok = false;
-
- // 'expected' is optional
- if ( typeof expected === "string" ) {
- message = expected;
- expected = null;
- }
-
- config.current.ignoreGlobalErrors = true;
- try {
- block.call( config.current.testEnvironment );
- } catch (e) {
- actual = e;
- }
- config.current.ignoreGlobalErrors = false;
-
- if ( actual ) {
- // we don't want to validate thrown error
- if ( !expected ) {
- ok = true;
- expectedOutput = null;
- // expected is a regexp
- } else if ( QUnit.objectType( expected ) === "regexp" ) {
- ok = expected.test( errorString( actual ) );
- // expected is a constructor
- } else if ( actual instanceof expected ) {
- ok = true;
- // expected is a validation function which returns true is validation passed
- } else if ( expected.call( {}, actual ) === true ) {
- expectedOutput = null;
- ok = true;
- }
-
- QUnit.push( ok, actual, expectedOutput, message );
- } else {
- QUnit.pushFailure( message, null, "No exception was thrown." );
- }
- }
-};
-
-/**
- * @deprecated since 1.8.0
- * Kept assertion helpers in root for backwards compatibility.
- */
-extend( QUnit, assert );
-
-/**
- * @deprecated since 1.9.0
- * Kept root "raises()" for backwards compatibility.
- * (Note that we don't introduce assert.raises).
- */
-QUnit.raises = assert[ "throws" ];
-
-/**
- * @deprecated since 1.0.0, replaced with error pushes since 1.3.0
- * Kept to avoid TypeErrors for undefined methods.
- */
-QUnit.equals = function() {
- QUnit.push( false, false, false, "QUnit.equals has been deprecated since 2009 (e88049a0), use QUnit.equal instead" );
-};
-QUnit.same = function() {
- QUnit.push( false, false, false, "QUnit.same has been deprecated since 2009 (e88049a0), use QUnit.deepEqual instead" );
-};
-
-// We want access to the constructor's prototype
-(function() {
- function F() {}
- F.prototype = QUnit;
- QUnit = new F();
- // Make F QUnit's constructor so that we can add to the prototype later
- QUnit.constructor = F;
-}());
-
-/**
- * Config object: Maintain internal state
- * Later exposed as QUnit.config
- * `config` initialized at top of scope
- */
-config = {
- // The queue of tests to run
- queue: [],
-
- // block until document ready
- blocking: true,
-
- // when enabled, show only failing tests
- // gets persisted through sessionStorage and can be changed in UI via checkbox
- hidepassed: false,
-
- // by default, run previously failed tests first
- // very useful in combination with "Hide passed tests" checked
- reorder: true,
-
- // by default, modify document.title when suite is done
- altertitle: true,
-
- // when enabled, all tests must call expect()
- requireExpects: false,
-
- // add checkboxes that are persisted in the query-string
- // when enabled, the id is set to `true` as a `QUnit.config` property
- urlConfig: [
- {
- id: "noglobals",
- label: "Check for Globals",
- tooltip: "Enabling this will test if any test introduces new properties on the `window` object. Stored as query-strings."
- },
- {
- id: "notrycatch",
- label: "No try-catch",
- tooltip: "Enabling this will run tests outside of a try-catch block. Makes debugging exceptions in IE reasonable. Stored as query-strings."
- }
- ],
-
- // Set of all modules.
- modules: {},
-
- // logging callback queues
- begin: [],
- done: [],
- log: [],
- testStart: [],
- testDone: [],
- moduleStart: [],
- moduleDone: []
-};
-
-// Export global variables, unless an 'exports' object exists,
-// in that case we assume we're in CommonJS (dealt with on the bottom of the script)
-if ( typeof exports === "undefined" ) {
- extend( window, QUnit.constructor.prototype );
-
- // Expose QUnit object
- window.QUnit = QUnit;
-}
-
-// Initialize more QUnit.config and QUnit.urlParams
-(function() {
- var i,
- location = window.location || { search: "", protocol: "file:" },
- params = location.search.slice( 1 ).split( "&" ),
- length = params.length,
- urlParams = {},
- current;
-
- if ( params[ 0 ] ) {
- for ( i = 0; i < length; i++ ) {
- current = params[ i ].split( "=" );
- current[ 0 ] = decodeURIComponent( current[ 0 ] );
- // allow just a key to turn on a flag, e.g., test.html?noglobals
- current[ 1 ] = current[ 1 ] ? decodeURIComponent( current[ 1 ] ) : true;
- urlParams[ current[ 0 ] ] = current[ 1 ];
- }
- }
-
- QUnit.urlParams = urlParams;
-
- // String search anywhere in moduleName+testName
- config.filter = urlParams.filter;
-
- // Exact match of the module name
- config.module = urlParams.module;
-
- config.testNumber = parseInt( urlParams.testNumber, 10 ) || null;
-
- // Figure out if we're running the tests from a server or not
- QUnit.isLocal = location.protocol === "file:";
-}());
-
-// Extend QUnit object,
-// these after set here because they should not be exposed as global functions
-extend( QUnit, {
- assert: assert,
-
- config: config,
-
- // Initialize the configuration options
- init: function() {
- extend( config, {
- stats: { all: 0, bad: 0 },
- moduleStats: { all: 0, bad: 0 },
- started: +new Date(),
- updateRate: 1000,
- blocking: false,
- autostart: true,
- autorun: false,
- filter: "",
- queue: [],
- semaphore: 1
- });
-
- var tests, banner, result,
- qunit = id( "qunit" );
-
- if ( qunit ) {
- qunit.innerHTML =
- "" +
- "
" +
- "
" +
- "
" +
- "
";
- }
-
- tests = id( "qunit-tests" );
- banner = id( "qunit-banner" );
- result = id( "qunit-testresult" );
-
- if ( tests ) {
- tests.innerHTML = "";
- }
-
- if ( banner ) {
- banner.className = "";
- }
-
- if ( result ) {
- result.parentNode.removeChild( result );
- }
-
- if ( tests ) {
- result = document.createElement( "p" );
- result.id = "qunit-testresult";
- result.className = "result";
- tests.parentNode.insertBefore( result, tests );
- result.innerHTML = "Running...
";
- }
- },
-
- // Resets the test setup. Useful for tests that modify the DOM.
- /*
- DEPRECATED: Use multiple tests instead of resetting inside a test.
- Use testStart or testDone for custom cleanup.
- This method will throw an error in 2.0, and will be removed in 2.1
- */
- reset: function() {
- var fixture = id( "qunit-fixture" );
- if ( fixture ) {
- fixture.innerHTML = config.fixture;
- }
- },
-
- // Trigger an event on an element.
- // @example triggerEvent( document.body, "click" );
- triggerEvent: function( elem, type, event ) {
- if ( document.createEvent ) {
- event = document.createEvent( "MouseEvents" );
- event.initMouseEvent(type, true, true, elem.ownerDocument.defaultView,
- 0, 0, 0, 0, 0, false, false, false, false, 0, null);
-
- elem.dispatchEvent( event );
- } else if ( elem.fireEvent ) {
- elem.fireEvent( "on" + type );
- }
- },
-
- // Safe object type checking
- is: function( type, obj ) {
- return QUnit.objectType( obj ) === type;
- },
-
- objectType: function( obj ) {
- if ( typeof obj === "undefined" ) {
- return "undefined";
- // consider: typeof null === object
- }
- if ( obj === null ) {
- return "null";
- }
-
- var match = toString.call( obj ).match(/^\[object\s(.*)\]$/),
- type = match && match[1] || "";
-
- switch ( type ) {
- case "Number":
- if ( isNaN(obj) ) {
- return "nan";
- }
- return "number";
- case "String":
- case "Boolean":
- case "Array":
- case "Date":
- case "RegExp":
- case "Function":
- return type.toLowerCase();
- }
- if ( typeof obj === "object" ) {
- return "object";
- }
- return undefined;
- },
-
- push: function( result, actual, expected, message ) {
- if ( !config.current ) {
- throw new Error( "assertion outside test context, was " + sourceFromStacktrace() );
- }
-
- var output, source,
- details = {
- module: config.current.module,
- name: config.current.testName,
- result: result,
- message: message,
- actual: actual,
- expected: expected
- };
-
- message = escapeText( message ) || ( result ? "okay" : "failed" );
- message = "
" + message + " ";
- output = message;
-
- if ( !result ) {
- expected = escapeText( QUnit.jsDump.parse(expected) );
- actual = escapeText( QUnit.jsDump.parse(actual) );
- output += "
Expected: " + expected + " ";
-
- if ( actual !== expected ) {
- output += "Result: " + actual + " ";
- output += "Diff: " + QUnit.diff( expected, actual ) + " ";
- }
-
- source = sourceFromStacktrace();
-
- if ( source ) {
- details.source = source;
- output += "Source: " + escapeText( source ) + " ";
- }
-
- output += "
";
- }
-
- runLoggingCallbacks( "log", QUnit, details );
-
- config.current.assertions.push({
- result: !!result,
- message: output
- });
- },
-
- pushFailure: function( message, source, actual ) {
- if ( !config.current ) {
- throw new Error( "pushFailure() assertion outside test context, was " + sourceFromStacktrace(2) );
- }
-
- var output,
- details = {
- module: config.current.module,
- name: config.current.testName,
- result: false,
- message: message
- };
-
- message = escapeText( message ) || "error";
- message = "
" + message + " ";
- output = message;
-
- output += "
";
-
- if ( actual ) {
- output += "Result: " + escapeText( actual ) + " ";
- }
-
- if ( source ) {
- details.source = source;
- output += "Source: " + escapeText( source ) + " ";
- }
-
- output += "
";
-
- runLoggingCallbacks( "log", QUnit, details );
-
- config.current.assertions.push({
- result: false,
- message: output
- });
- },
-
- url: function( params ) {
- params = extend( extend( {}, QUnit.urlParams ), params );
- var key,
- querystring = "?";
-
- for ( key in params ) {
- if ( hasOwn.call( params, key ) ) {
- querystring += encodeURIComponent( key ) + "=" +
- encodeURIComponent( params[ key ] ) + "&";
- }
- }
- return window.location.protocol + "//" + window.location.host +
- window.location.pathname + querystring.slice( 0, -1 );
- },
-
- extend: extend,
- id: id,
- addEvent: addEvent,
- addClass: addClass,
- hasClass: hasClass,
- removeClass: removeClass
- // load, equiv, jsDump, diff: Attached later
-});
-
-/**
- * @deprecated: Created for backwards compatibility with test runner that set the hook function
- * into QUnit.{hook}, instead of invoking it and passing the hook function.
- * QUnit.constructor is set to the empty F() above so that we can add to it's prototype here.
- * Doing this allows us to tell if the following methods have been overwritten on the actual
- * QUnit object.
- */
-extend( QUnit.constructor.prototype, {
-
- // Logging callbacks; all receive a single argument with the listed properties
- // run test/logs.html for any related changes
- begin: registerLoggingCallback( "begin" ),
-
- // done: { failed, passed, total, runtime }
- done: registerLoggingCallback( "done" ),
-
- // log: { result, actual, expected, message }
- log: registerLoggingCallback( "log" ),
-
- // testStart: { name }
- testStart: registerLoggingCallback( "testStart" ),
-
- // testDone: { name, failed, passed, total, duration }
- testDone: registerLoggingCallback( "testDone" ),
-
- // moduleStart: { name }
- moduleStart: registerLoggingCallback( "moduleStart" ),
-
- // moduleDone: { name, failed, passed, total }
- moduleDone: registerLoggingCallback( "moduleDone" )
-});
-
-if ( typeof document === "undefined" || document.readyState === "complete" ) {
- config.autorun = true;
-}
-
-QUnit.load = function() {
- runLoggingCallbacks( "begin", QUnit, {} );
-
- // Initialize the config, saving the execution queue
- var banner, filter, i, label, len, main, ol, toolbar, userAgent, val,
- urlConfigCheckboxesContainer, urlConfigCheckboxes, moduleFilter,
- numModules = 0,
- moduleNames = [],
- moduleFilterHtml = "",
- urlConfigHtml = "",
- oldconfig = extend( {}, config );
-
- QUnit.init();
- extend(config, oldconfig);
-
- config.blocking = false;
-
- len = config.urlConfig.length;
-
- for ( i = 0; i < len; i++ ) {
- val = config.urlConfig[i];
- if ( typeof val === "string" ) {
- val = {
- id: val,
- label: val,
- tooltip: "[no tooltip available]"
- };
- }
- config[ val.id ] = QUnit.urlParams[ val.id ];
- urlConfigHtml += "
" + val.label + " ";
- }
- for ( i in config.modules ) {
- if ( config.modules.hasOwnProperty( i ) ) {
- moduleNames.push(i);
- }
- }
- numModules = moduleNames.length;
- moduleNames.sort( function( a, b ) {
- return a.localeCompare( b );
- });
- moduleFilterHtml += "
Module: < All Modules > ";
-
-
- for ( i = 0; i < numModules; i++) {
- moduleFilterHtml += "" + escapeText(moduleNames[i]) + " ";
- }
- moduleFilterHtml += "";
-
- // `userAgent` initialized at top of scope
- userAgent = id( "qunit-userAgent" );
- if ( userAgent ) {
- userAgent.innerHTML = navigator.userAgent;
- }
-
- // `banner` initialized at top of scope
- banner = id( "qunit-header" );
- if ( banner ) {
- banner.innerHTML = "
" + banner.innerHTML + " ";
- }
-
- // `toolbar` initialized at top of scope
- toolbar = id( "qunit-testrunner-toolbar" );
- if ( toolbar ) {
- // `filter` initialized at top of scope
- filter = document.createElement( "input" );
- filter.type = "checkbox";
- filter.id = "qunit-filter-pass";
-
- addEvent( filter, "click", function() {
- var tmp,
- ol = document.getElementById( "qunit-tests" );
-
- if ( filter.checked ) {
- ol.className = ol.className + " hidepass";
- } else {
- tmp = " " + ol.className.replace( /[\n\t\r]/g, " " ) + " ";
- ol.className = tmp.replace( / hidepass /, " " );
- }
- if ( defined.sessionStorage ) {
- if (filter.checked) {
- sessionStorage.setItem( "qunit-filter-passed-tests", "true" );
- } else {
- sessionStorage.removeItem( "qunit-filter-passed-tests" );
- }
- }
- });
-
- if ( config.hidepassed || defined.sessionStorage && sessionStorage.getItem( "qunit-filter-passed-tests" ) ) {
- filter.checked = true;
- // `ol` initialized at top of scope
- ol = document.getElementById( "qunit-tests" );
- ol.className = ol.className + " hidepass";
- }
- toolbar.appendChild( filter );
-
- // `label` initialized at top of scope
- label = document.createElement( "label" );
- label.setAttribute( "for", "qunit-filter-pass" );
- label.setAttribute( "title", "Only show tests and assertions that fail. Stored in sessionStorage." );
- label.innerHTML = "Hide passed tests";
- toolbar.appendChild( label );
-
- urlConfigCheckboxesContainer = document.createElement("span");
- urlConfigCheckboxesContainer.innerHTML = urlConfigHtml;
- urlConfigCheckboxes = urlConfigCheckboxesContainer.getElementsByTagName("input");
- // For oldIE support:
- // * Add handlers to the individual elements instead of the container
- // * Use "click" instead of "change"
- // * Fallback from event.target to event.srcElement
- addEvents( urlConfigCheckboxes, "click", function( event ) {
- var params = {},
- target = event.target || event.srcElement;
- params[ target.name ] = target.checked ? true : undefined;
- window.location = QUnit.url( params );
- });
- toolbar.appendChild( urlConfigCheckboxesContainer );
-
- if (numModules > 1) {
- moduleFilter = document.createElement( "span" );
- moduleFilter.setAttribute( "id", "qunit-modulefilter-container" );
- moduleFilter.innerHTML = moduleFilterHtml;
- addEvent( moduleFilter.lastChild, "change", function() {
- var selectBox = moduleFilter.getElementsByTagName("select")[0],
- selectedModule = decodeURIComponent(selectBox.options[selectBox.selectedIndex].value);
-
- window.location = QUnit.url({
- module: ( selectedModule === "" ) ? undefined : selectedModule,
- // Remove any existing filters
- filter: undefined,
- testNumber: undefined
- });
- });
- toolbar.appendChild(moduleFilter);
- }
- }
-
- // `main` initialized at top of scope
- main = id( "qunit-fixture" );
- if ( main ) {
- config.fixture = main.innerHTML;
- }
-
- if ( config.autostart ) {
- QUnit.start();
- }
-};
-
-addEvent( window, "load", QUnit.load );
-
-// `onErrorFnPrev` initialized at top of scope
-// Preserve other handlers
-onErrorFnPrev = window.onerror;
-
-// Cover uncaught exceptions
-// Returning true will suppress the default browser handler,
-// returning false will let it run.
-window.onerror = function ( error, filePath, linerNr ) {
- var ret = false;
- if ( onErrorFnPrev ) {
- ret = onErrorFnPrev( error, filePath, linerNr );
- }
-
- // Treat return value as window.onerror itself does,
- // Only do our handling if not suppressed.
- if ( ret !== true ) {
- if ( QUnit.config.current ) {
- if ( QUnit.config.current.ignoreGlobalErrors ) {
- return true;
- }
- QUnit.pushFailure( error, filePath + ":" + linerNr );
- } else {
- QUnit.test( "global failure", extend( function() {
- QUnit.pushFailure( error, filePath + ":" + linerNr );
- }, { validTest: validTest } ) );
- }
- return false;
- }
-
- return ret;
-};
-
-function done() {
- config.autorun = true;
-
- // Log the last module results
- if ( config.currentModule ) {
- runLoggingCallbacks( "moduleDone", QUnit, {
- name: config.currentModule,
- failed: config.moduleStats.bad,
- passed: config.moduleStats.all - config.moduleStats.bad,
- total: config.moduleStats.all
- });
- }
- delete config.previousModule;
-
- var i, key,
- banner = id( "qunit-banner" ),
- tests = id( "qunit-tests" ),
- runtime = +new Date() - config.started,
- passed = config.stats.all - config.stats.bad,
- html = [
- "Tests completed in ",
- runtime,
- " milliseconds.
",
- "
",
- passed,
- " assertions of
",
- config.stats.all,
- " passed,
",
- config.stats.bad,
- " failed."
- ].join( "" );
-
- if ( banner ) {
- banner.className = ( config.stats.bad ? "qunit-fail" : "qunit-pass" );
- }
-
- if ( tests ) {
- id( "qunit-testresult" ).innerHTML = html;
- }
-
- if ( config.altertitle && typeof document !== "undefined" && document.title ) {
- // show ✖ for good, ✔ for bad suite result in title
- // use escape sequences in case file gets loaded with non-utf-8-charset
- document.title = [
- ( config.stats.bad ? "\u2716" : "\u2714" ),
- document.title.replace( /^[\u2714\u2716] /i, "" )
- ].join( " " );
- }
-
- // clear own sessionStorage items if all tests passed
- if ( config.reorder && defined.sessionStorage && config.stats.bad === 0 ) {
- // `key` & `i` initialized at top of scope
- for ( i = 0; i < sessionStorage.length; i++ ) {
- key = sessionStorage.key( i++ );
- if ( key.indexOf( "qunit-test-" ) === 0 ) {
- sessionStorage.removeItem( key );
- }
- }
- }
-
- // scroll back to top to show results
- if ( window.scrollTo ) {
- window.scrollTo(0, 0);
- }
-
- runLoggingCallbacks( "done", QUnit, {
- failed: config.stats.bad,
- passed: passed,
- total: config.stats.all,
- runtime: runtime
- });
-}
-
-/** @return Boolean: true if this test should be ran */
-function validTest( test ) {
- var include,
- filter = config.filter && config.filter.toLowerCase(),
- module = config.module && config.module.toLowerCase(),
- fullName = (test.module + ": " + test.testName).toLowerCase();
-
- // Internally-generated tests are always valid
- if ( test.callback && test.callback.validTest === validTest ) {
- delete test.callback.validTest;
- return true;
- }
-
- if ( config.testNumber ) {
- return test.testNumber === config.testNumber;
- }
-
- if ( module && ( !test.module || test.module.toLowerCase() !== module ) ) {
- return false;
- }
-
- if ( !filter ) {
- return true;
- }
-
- include = filter.charAt( 0 ) !== "!";
- if ( !include ) {
- filter = filter.slice( 1 );
- }
-
- // If the filter matches, we need to honour include
- if ( fullName.indexOf( filter ) !== -1 ) {
- return include;
- }
-
- // Otherwise, do the opposite
- return !include;
-}
-
-// so far supports only Firefox, Chrome and Opera (buggy), Safari (for real exceptions)
-// Later Safari and IE10 are supposed to support error.stack as well
-// See also https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error/Stack
-function extractStacktrace( e, offset ) {
- offset = offset === undefined ? 3 : offset;
-
- var stack, include, i;
-
- if ( e.stacktrace ) {
- // Opera
- return e.stacktrace.split( "\n" )[ offset + 3 ];
- } else if ( e.stack ) {
- // Firefox, Chrome
- stack = e.stack.split( "\n" );
- if (/^error$/i.test( stack[0] ) ) {
- stack.shift();
- }
- if ( fileName ) {
- include = [];
- for ( i = offset; i < stack.length; i++ ) {
- if ( stack[ i ].indexOf( fileName ) !== -1 ) {
- break;
- }
- include.push( stack[ i ] );
- }
- if ( include.length ) {
- return include.join( "\n" );
- }
- }
- return stack[ offset ];
- } else if ( e.sourceURL ) {
- // Safari, PhantomJS
- // hopefully one day Safari provides actual stacktraces
- // exclude useless self-reference for generated Error objects
- if ( /qunit.js$/.test( e.sourceURL ) ) {
- return;
- }
- // for actual exceptions, this is useful
- return e.sourceURL + ":" + e.line;
- }
-}
-function sourceFromStacktrace( offset ) {
- try {
- throw new Error();
- } catch ( e ) {
- return extractStacktrace( e, offset );
- }
-}
-
-/**
- * Escape text for attribute or text content.
- */
-function escapeText( s ) {
- if ( !s ) {
- return "";
- }
- s = s + "";
- // Both single quotes and double quotes (for attributes)
- return s.replace( /['"<>&]/g, function( s ) {
- switch( s ) {
- case "'":
- return "'";
- case "\"":
- return """;
- case "<":
- return "<";
- case ">":
- return ">";
- case "&":
- return "&";
- }
- });
-}
-
-function synchronize( callback, last ) {
- config.queue.push( callback );
-
- if ( config.autorun && !config.blocking ) {
- process( last );
- }
-}
-
-function process( last ) {
- function next() {
- process( last );
- }
- var start = new Date().getTime();
- config.depth = config.depth ? config.depth + 1 : 1;
-
- while ( config.queue.length && !config.blocking ) {
- if ( !defined.setTimeout || config.updateRate <= 0 || ( ( new Date().getTime() - start ) < config.updateRate ) ) {
- config.queue.shift()();
- } else {
- setTimeout( next, 13 );
- break;
- }
- }
- config.depth--;
- if ( last && !config.blocking && !config.queue.length && config.depth === 0 ) {
- done();
- }
-}
-
-function saveGlobal() {
- config.pollution = [];
-
- if ( config.noglobals ) {
- for ( var key in window ) {
- if ( hasOwn.call( window, key ) ) {
- // in Opera sometimes DOM element ids show up here, ignore them
- if ( /^qunit-test-output/.test( key ) ) {
- continue;
- }
- config.pollution.push( key );
- }
- }
- }
-}
-
-function checkPollution() {
- var newGlobals,
- deletedGlobals,
- old = config.pollution;
-
- saveGlobal();
-
- newGlobals = diff( config.pollution, old );
- if ( newGlobals.length > 0 ) {
- QUnit.pushFailure( "Introduced global variable(s): " + newGlobals.join(", ") );
- }
-
- deletedGlobals = diff( old, config.pollution );
- if ( deletedGlobals.length > 0 ) {
- QUnit.pushFailure( "Deleted global variable(s): " + deletedGlobals.join(", ") );
- }
-}
-
-// returns a new Array with the elements that are in a but not in b
-function diff( a, b ) {
- var i, j,
- result = a.slice();
-
- for ( i = 0; i < result.length; i++ ) {
- for ( j = 0; j < b.length; j++ ) {
- if ( result[i] === b[j] ) {
- result.splice( i, 1 );
- i--;
- break;
- }
- }
- }
- return result;
-}
-
-function extend( a, b ) {
- for ( var prop in b ) {
- if ( hasOwn.call( b, prop ) ) {
- // Avoid "Member not found" error in IE8 caused by messing with window.constructor
- if ( !( prop === "constructor" && a === window ) ) {
- if ( b[ prop ] === undefined ) {
- delete a[ prop ];
- } else {
- a[ prop ] = b[ prop ];
- }
- }
- }
- }
-
- return a;
-}
-
-/**
- * @param {HTMLElement} elem
- * @param {string} type
- * @param {Function} fn
- */
-function addEvent( elem, type, fn ) {
- // Standards-based browsers
- if ( elem.addEventListener ) {
- elem.addEventListener( type, fn, false );
- // IE
- } else {
- elem.attachEvent( "on" + type, fn );
- }
-}
-
-/**
- * @param {Array|NodeList} elems
- * @param {string} type
- * @param {Function} fn
- */
-function addEvents( elems, type, fn ) {
- var i = elems.length;
- while ( i-- ) {
- addEvent( elems[i], type, fn );
- }
-}
-
-function hasClass( elem, name ) {
- return (" " + elem.className + " ").indexOf(" " + name + " ") > -1;
-}
-
-function addClass( elem, name ) {
- if ( !hasClass( elem, name ) ) {
- elem.className += (elem.className ? " " : "") + name;
- }
-}
-
-function removeClass( elem, name ) {
- var set = " " + elem.className + " ";
- // Class name may appear multiple times
- while ( set.indexOf(" " + name + " ") > -1 ) {
- set = set.replace(" " + name + " " , " ");
- }
- // If possible, trim it for prettiness, but not necessarily
- elem.className = typeof set.trim === "function" ? set.trim() : set.replace(/^\s+|\s+$/g, "");
-}
-
-function id( name ) {
- return !!( typeof document !== "undefined" && document && document.getElementById ) &&
- document.getElementById( name );
-}
-
-function registerLoggingCallback( key ) {
- return function( callback ) {
- config[key].push( callback );
- };
-}
-
-// Supports deprecated method of completely overwriting logging callbacks
-function runLoggingCallbacks( key, scope, args ) {
- var i, callbacks;
- if ( QUnit.hasOwnProperty( key ) ) {
- QUnit[ key ].call(scope, args );
- } else {
- callbacks = config[ key ];
- for ( i = 0; i < callbacks.length; i++ ) {
- callbacks[ i ].call( scope, args );
- }
- }
-}
-
-// Test for equality any JavaScript type.
-// Author: Philippe Rathé
-QUnit.equiv = (function() {
-
- // Call the o related callback with the given arguments.
- function bindCallbacks( o, callbacks, args ) {
- var prop = QUnit.objectType( o );
- if ( prop ) {
- if ( QUnit.objectType( callbacks[ prop ] ) === "function" ) {
- return callbacks[ prop ].apply( callbacks, args );
- } else {
- return callbacks[ prop ]; // or undefined
- }
- }
- }
-
- // the real equiv function
- var innerEquiv,
- // stack to decide between skip/abort functions
- callers = [],
- // stack to avoiding loops from circular referencing
- parents = [],
- parentsB = [],
-
- getProto = Object.getPrototypeOf || function ( obj ) {
- /*jshint camelcase:false */
- return obj.__proto__;
- },
- callbacks = (function () {
-
- // for string, boolean, number and null
- function useStrictEquality( b, a ) {
- /*jshint eqeqeq:false */
- if ( b instanceof a.constructor || a instanceof b.constructor ) {
- // to catch short annotation VS 'new' annotation of a
- // declaration
- // e.g. var i = 1;
- // var j = new Number(1);
- return a == b;
- } else {
- return a === b;
- }
- }
-
- return {
- "string": useStrictEquality,
- "boolean": useStrictEquality,
- "number": useStrictEquality,
- "null": useStrictEquality,
- "undefined": useStrictEquality,
-
- "nan": function( b ) {
- return isNaN( b );
- },
-
- "date": function( b, a ) {
- return QUnit.objectType( b ) === "date" && a.valueOf() === b.valueOf();
- },
-
- "regexp": function( b, a ) {
- return QUnit.objectType( b ) === "regexp" &&
- // the regex itself
- a.source === b.source &&
- // and its modifiers
- a.global === b.global &&
- // (gmi) ...
- a.ignoreCase === b.ignoreCase &&
- a.multiline === b.multiline &&
- a.sticky === b.sticky;
- },
-
- // - skip when the property is a method of an instance (OOP)
- // - abort otherwise,
- // initial === would have catch identical references anyway
- "function": function() {
- var caller = callers[callers.length - 1];
- return caller !== Object && typeof caller !== "undefined";
- },
-
- "array": function( b, a ) {
- var i, j, len, loop, aCircular, bCircular;
-
- // b could be an object literal here
- if ( QUnit.objectType( b ) !== "array" ) {
- return false;
- }
-
- len = a.length;
- if ( len !== b.length ) {
- // safe and faster
- return false;
- }
-
- // track reference to avoid circular references
- parents.push( a );
- parentsB.push( b );
- for ( i = 0; i < len; i++ ) {
- loop = false;
- for ( j = 0; j < parents.length; j++ ) {
- aCircular = parents[j] === a[i];
- bCircular = parentsB[j] === b[i];
- if ( aCircular || bCircular ) {
- if ( a[i] === b[i] || aCircular && bCircular ) {
- loop = true;
- } else {
- parents.pop();
- parentsB.pop();
- return false;
- }
- }
- }
- if ( !loop && !innerEquiv(a[i], b[i]) ) {
- parents.pop();
- parentsB.pop();
- return false;
- }
- }
- parents.pop();
- parentsB.pop();
- return true;
- },
-
- "object": function( b, a ) {
- /*jshint forin:false */
- var i, j, loop, aCircular, bCircular,
- // Default to true
- eq = true,
- aProperties = [],
- bProperties = [];
-
- // comparing constructors is more strict than using
- // instanceof
- if ( a.constructor !== b.constructor ) {
- // Allow objects with no prototype to be equivalent to
- // objects with Object as their constructor.
- if ( !(( getProto(a) === null && getProto(b) === Object.prototype ) ||
- ( getProto(b) === null && getProto(a) === Object.prototype ) ) ) {
- return false;
- }
- }
-
- // stack constructor before traversing properties
- callers.push( a.constructor );
-
- // track reference to avoid circular references
- parents.push( a );
- parentsB.push( b );
-
- // be strict: don't ensure hasOwnProperty and go deep
- for ( i in a ) {
- loop = false;
- for ( j = 0; j < parents.length; j++ ) {
- aCircular = parents[j] === a[i];
- bCircular = parentsB[j] === b[i];
- if ( aCircular || bCircular ) {
- if ( a[i] === b[i] || aCircular && bCircular ) {
- loop = true;
- } else {
- eq = false;
- break;
- }
- }
- }
- aProperties.push(i);
- if ( !loop && !innerEquiv(a[i], b[i]) ) {
- eq = false;
- break;
- }
- }
-
- parents.pop();
- parentsB.pop();
- callers.pop(); // unstack, we are done
-
- for ( i in b ) {
- bProperties.push( i ); // collect b's properties
- }
-
- // Ensures identical properties name
- return eq && innerEquiv( aProperties.sort(), bProperties.sort() );
- }
- };
- }());
-
- innerEquiv = function() { // can take multiple arguments
- var args = [].slice.apply( arguments );
- if ( args.length < 2 ) {
- return true; // end transition
- }
-
- return (function( a, b ) {
- if ( a === b ) {
- return true; // catch the most you can
- } else if ( a === null || b === null || typeof a === "undefined" ||
- typeof b === "undefined" ||
- QUnit.objectType(a) !== QUnit.objectType(b) ) {
- return false; // don't lose time with error prone cases
- } else {
- return bindCallbacks(a, callbacks, [ b, a ]);
- }
-
- // apply transition with (1..n) arguments
- }( args[0], args[1] ) && innerEquiv.apply( this, args.splice(1, args.length - 1 )) );
- };
-
- return innerEquiv;
-}());
-
-/**
- * jsDump Copyright (c) 2008 Ariel Flesler - aflesler(at)gmail(dot)com |
- * http://flesler.blogspot.com Licensed under BSD
- * (http://www.opensource.org/licenses/bsd-license.php) Date: 5/15/2008
- *
- * @projectDescription Advanced and extensible data dumping for Javascript.
- * @version 1.0.0
- * @author Ariel Flesler
- * @link {http://flesler.blogspot.com/2008/05/jsdump-pretty-dump-of-any-javascript.html}
- */
-QUnit.jsDump = (function() {
- function quote( str ) {
- return "\"" + str.toString().replace( /"/g, "\\\"" ) + "\"";
- }
- function literal( o ) {
- return o + "";
- }
- function join( pre, arr, post ) {
- var s = jsDump.separator(),
- base = jsDump.indent(),
- inner = jsDump.indent(1);
- if ( arr.join ) {
- arr = arr.join( "," + s + inner );
- }
- if ( !arr ) {
- return pre + post;
- }
- return [ pre, inner + arr, base + post ].join(s);
- }
- function array( arr, stack ) {
- var i = arr.length, ret = new Array(i);
- this.up();
- while ( i-- ) {
- ret[i] = this.parse( arr[i] , undefined , stack);
- }
- this.down();
- return join( "[", ret, "]" );
- }
-
- var reName = /^function (\w+)/,
- jsDump = {
- // type is used mostly internally, you can fix a (custom)type in advance
- parse: function( obj, type, stack ) {
- stack = stack || [ ];
- var inStack, res,
- parser = this.parsers[ type || this.typeOf(obj) ];
-
- type = typeof parser;
- inStack = inArray( obj, stack );
-
- if ( inStack !== -1 ) {
- return "recursion(" + (inStack - stack.length) + ")";
- }
- if ( type === "function" ) {
- stack.push( obj );
- res = parser.call( this, obj, stack );
- stack.pop();
- return res;
- }
- return ( type === "string" ) ? parser : this.parsers.error;
- },
- typeOf: function( obj ) {
- var type;
- if ( obj === null ) {
- type = "null";
- } else if ( typeof obj === "undefined" ) {
- type = "undefined";
- } else if ( QUnit.is( "regexp", obj) ) {
- type = "regexp";
- } else if ( QUnit.is( "date", obj) ) {
- type = "date";
- } else if ( QUnit.is( "function", obj) ) {
- type = "function";
- } else if ( typeof obj.setInterval !== undefined && typeof obj.document !== "undefined" && typeof obj.nodeType === "undefined" ) {
- type = "window";
- } else if ( obj.nodeType === 9 ) {
- type = "document";
- } else if ( obj.nodeType ) {
- type = "node";
- } else if (
- // native arrays
- toString.call( obj ) === "[object Array]" ||
- // NodeList objects
- ( typeof obj.length === "number" && typeof obj.item !== "undefined" && ( obj.length ? obj.item(0) === obj[0] : ( obj.item( 0 ) === null && typeof obj[0] === "undefined" ) ) )
- ) {
- type = "array";
- } else if ( obj.constructor === Error.prototype.constructor ) {
- type = "error";
- } else {
- type = typeof obj;
- }
- return type;
- },
- separator: function() {
- return this.multiline ? this.HTML ? " " : "\n" : this.HTML ? " " : " ";
- },
- // extra can be a number, shortcut for increasing-calling-decreasing
- indent: function( extra ) {
- if ( !this.multiline ) {
- return "";
- }
- var chr = this.indentChar;
- if ( this.HTML ) {
- chr = chr.replace( /\t/g, " " ).replace( / /g, " " );
- }
- return new Array( this.depth + ( extra || 0 ) ).join(chr);
- },
- up: function( a ) {
- this.depth += a || 1;
- },
- down: function( a ) {
- this.depth -= a || 1;
- },
- setParser: function( name, parser ) {
- this.parsers[name] = parser;
- },
- // The next 3 are exposed so you can use them
- quote: quote,
- literal: literal,
- join: join,
- //
- depth: 1,
- // This is the list of parsers, to modify them, use jsDump.setParser
- parsers: {
- window: "[Window]",
- document: "[Document]",
- error: function(error) {
- return "Error(\"" + error.message + "\")";
- },
- unknown: "[Unknown]",
- "null": "null",
- "undefined": "undefined",
- "function": function( fn ) {
- var ret = "function",
- // functions never have name in IE
- name = "name" in fn ? fn.name : (reName.exec(fn) || [])[1];
-
- if ( name ) {
- ret += " " + name;
- }
- ret += "( ";
-
- ret = [ ret, QUnit.jsDump.parse( fn, "functionArgs" ), "){" ].join( "" );
- return join( ret, QUnit.jsDump.parse(fn,"functionCode" ), "}" );
- },
- array: array,
- nodelist: array,
- "arguments": array,
- object: function( map, stack ) {
- /*jshint forin:false */
- var ret = [ ], keys, key, val, i;
- QUnit.jsDump.up();
- keys = [];
- for ( key in map ) {
- keys.push( key );
- }
- keys.sort();
- for ( i = 0; i < keys.length; i++ ) {
- key = keys[ i ];
- val = map[ key ];
- ret.push( QUnit.jsDump.parse( key, "key" ) + ": " + QUnit.jsDump.parse( val, undefined, stack ) );
- }
- QUnit.jsDump.down();
- return join( "{", ret, "}" );
- },
- node: function( node ) {
- var len, i, val,
- open = QUnit.jsDump.HTML ? "<" : "<",
- close = QUnit.jsDump.HTML ? ">" : ">",
- tag = node.nodeName.toLowerCase(),
- ret = open + tag,
- attrs = node.attributes;
-
- if ( attrs ) {
- for ( i = 0, len = attrs.length; i < len; i++ ) {
- val = attrs[i].nodeValue;
- // IE6 includes all attributes in .attributes, even ones not explicitly set.
- // Those have values like undefined, null, 0, false, "" or "inherit".
- if ( val && val !== "inherit" ) {
- ret += " " + attrs[i].nodeName + "=" + QUnit.jsDump.parse( val, "attribute" );
- }
- }
- }
- ret += close;
-
- // Show content of TextNode or CDATASection
- if ( node.nodeType === 3 || node.nodeType === 4 ) {
- ret += node.nodeValue;
- }
-
- return ret + open + "/" + tag + close;
- },
- // function calls it internally, it's the arguments part of the function
- functionArgs: function( fn ) {
- var args,
- l = fn.length;
-
- if ( !l ) {
- return "";
- }
-
- args = new Array(l);
- while ( l-- ) {
- // 97 is 'a'
- args[l] = String.fromCharCode(97+l);
- }
- return " " + args.join( ", " ) + " ";
- },
- // object calls it internally, the key part of an item in a map
- key: quote,
- // function calls it internally, it's the content of the function
- functionCode: "[code]",
- // node calls it internally, it's an html attribute value
- attribute: quote,
- string: quote,
- date: quote,
- regexp: literal,
- number: literal,
- "boolean": literal
- },
- // if true, entities are escaped ( <, >, \t, space and \n )
- HTML: false,
- // indentation unit
- indentChar: " ",
- // if true, items in a collection, are separated by a \n, else just a space.
- multiline: true
- };
-
- return jsDump;
-}());
-
-// from jquery.js
-function inArray( elem, array ) {
- if ( array.indexOf ) {
- return array.indexOf( elem );
- }
-
- for ( var i = 0, length = array.length; i < length; i++ ) {
- if ( array[ i ] === elem ) {
- return i;
- }
- }
-
- return -1;
-}
-
-/*
- * Javascript Diff Algorithm
- * By John Resig (http://ejohn.org/)
- * Modified by Chu Alan "sprite"
- *
- * Released under the MIT license.
- *
- * More Info:
- * http://ejohn.org/projects/javascript-diff-algorithm/
- *
- * Usage: QUnit.diff(expected, actual)
- *
- * QUnit.diff( "the quick brown fox jumped over", "the quick fox jumps over" ) == "the quick brown fox jumped jumps over"
- */
-QUnit.diff = (function() {
- /*jshint eqeqeq:false, eqnull:true */
- function diff( o, n ) {
- var i,
- ns = {},
- os = {};
-
- for ( i = 0; i < n.length; i++ ) {
- if ( !hasOwn.call( ns, n[i] ) ) {
- ns[ n[i] ] = {
- rows: [],
- o: null
- };
- }
- ns[ n[i] ].rows.push( i );
- }
-
- for ( i = 0; i < o.length; i++ ) {
- if ( !hasOwn.call( os, o[i] ) ) {
- os[ o[i] ] = {
- rows: [],
- n: null
- };
- }
- os[ o[i] ].rows.push( i );
- }
-
- for ( i in ns ) {
- if ( hasOwn.call( ns, i ) ) {
- if ( ns[i].rows.length === 1 && hasOwn.call( os, i ) && os[i].rows.length === 1 ) {
- n[ ns[i].rows[0] ] = {
- text: n[ ns[i].rows[0] ],
- row: os[i].rows[0]
- };
- o[ os[i].rows[0] ] = {
- text: o[ os[i].rows[0] ],
- row: ns[i].rows[0]
- };
- }
- }
- }
-
- for ( i = 0; i < n.length - 1; i++ ) {
- if ( n[i].text != null && n[ i + 1 ].text == null && n[i].row + 1 < o.length && o[ n[i].row + 1 ].text == null &&
- n[ i + 1 ] == o[ n[i].row + 1 ] ) {
-
- n[ i + 1 ] = {
- text: n[ i + 1 ],
- row: n[i].row + 1
- };
- o[ n[i].row + 1 ] = {
- text: o[ n[i].row + 1 ],
- row: i + 1
- };
- }
- }
-
- for ( i = n.length - 1; i > 0; i-- ) {
- if ( n[i].text != null && n[ i - 1 ].text == null && n[i].row > 0 && o[ n[i].row - 1 ].text == null &&
- n[ i - 1 ] == o[ n[i].row - 1 ]) {
-
- n[ i - 1 ] = {
- text: n[ i - 1 ],
- row: n[i].row - 1
- };
- o[ n[i].row - 1 ] = {
- text: o[ n[i].row - 1 ],
- row: i - 1
- };
- }
- }
-
- return {
- o: o,
- n: n
- };
- }
-
- return function( o, n ) {
- o = o.replace( /\s+$/, "" );
- n = n.replace( /\s+$/, "" );
-
- var i, pre,
- str = "",
- out = diff( o === "" ? [] : o.split(/\s+/), n === "" ? [] : n.split(/\s+/) ),
- oSpace = o.match(/\s+/g),
- nSpace = n.match(/\s+/g);
-
- if ( oSpace == null ) {
- oSpace = [ " " ];
- }
- else {
- oSpace.push( " " );
- }
-
- if ( nSpace == null ) {
- nSpace = [ " " ];
- }
- else {
- nSpace.push( " " );
- }
-
- if ( out.n.length === 0 ) {
- for ( i = 0; i < out.o.length; i++ ) {
- str += "" + out.o[i] + oSpace[i] + "";
- }
- }
- else {
- if ( out.n[0].text == null ) {
- for ( n = 0; n < out.o.length && out.o[n].text == null; n++ ) {
- str += "" + out.o[n] + oSpace[n] + "";
- }
- }
-
- for ( i = 0; i < out.n.length; i++ ) {
- if (out.n[i].text == null) {
- str += "" + out.n[i] + nSpace[i] + " ";
- }
- else {
- // `pre` initialized at top of scope
- pre = "";
-
- for ( n = out.n[i].row + 1; n < out.o.length && out.o[n].text == null; n++ ) {
- pre += "" + out.o[n] + oSpace[n] + "";
- }
- str += " " + out.n[i].text + nSpace[i] + pre;
- }
- }
- }
-
- return str;
- };
-}());
-
-// for CommonJS environments, export everything
-if ( typeof exports !== "undefined" ) {
- extend( exports, QUnit.constructor.prototype );
-}
-
-// get at whatever the global object is, like window in browsers
-}( (function() {return this;}.call()) ));
diff --git a/tests/tests.js b/tests/tests.js
deleted file mode 100644
index 76c1ce6f..00000000
--- a/tests/tests.js
+++ /dev/null
@@ -1,22 +0,0 @@
-/* jshint ignore:start */
-
-module("Validation");
-
-test("Match", function() {
- window.NEUE.Validation.Validations.match.fn("dog", "cat", function(result) {
- ok(result.success == false, "should reject if different strings");
- });
-
- window.NEUE.Validation.Validations.match.fn("dog", "Dog", function(result) {
- ok(result.success == false, "should reject if different capitalization");
- });
-
- window.NEUE.Validation.Validations.match.fn("dog", "dog ", function(result) {
- ok(result.success == false, "should reject if different spacing");
- });
-
- window.NEUE.Validation.Validations.match.fn("super$ecure19", "super$ecure19", function(result) {
- ok(result.success == true, "should accept if the same");
- });
-});
-
diff --git a/views/_styleguide_block.erb b/views/_styleguide_block.erb
deleted file mode 100644
index 2e809a60..00000000
--- a/views/_styleguide_block.erb
+++ /dev/null
@@ -1,27 +0,0 @@
-
-
-
<%= @section.section %> <%= @section.filename %>
-
-
<%= @section.description %>
- <% if @section.modifiers.any? %>
-
- <% @section.modifiers.each do |modifier| %>
- <%= modifier.name %> - <%= modifier.description %>
- <% end %>
-
- <% end %>
-
-
- <%= @example_html %>
-
- <% @section.modifiers.each do |modifier| %>
-
- <%= modifier.name %>
- <%= @example_html.gsub('$modifier_class', " #{modifier.class_name}") %>
-
- <% end %>
-
-
-
diff --git a/views/_styleguide_block_custom_example.erb b/views/_styleguide_block_custom_example.erb
deleted file mode 100644
index 290907e1..00000000
--- a/views/_styleguide_block_custom_example.erb
+++ /dev/null
@@ -1,13 +0,0 @@
- <%= @section.section %> <%= @section.filename %>
-
-
<%= @section.description %>
- <% if @section.modifiers.any? %>
-
- <% @section.modifiers.each do |modifier| %>
- <%= modifier.name %> - <%= modifier.description %>
- <% end %>
-
- <% end %>
-
-
-
diff --git a/views/_styleguide_block_without_modifiers.erb b/views/_styleguide_block_without_modifiers.erb
deleted file mode 100644
index bf398838..00000000
--- a/views/_styleguide_block_without_modifiers.erb
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
<%= @section.section %> <%= @section.filename %>
-
-
<%= @section.description %>
- <% if @section.modifiers.any? %>
-
- <% @section.modifiers.each do |modifier| %>
- <%= modifier.name %> - <%= modifier.description %>
- <% end %>
-
- <% end %>
-
-
- <%= @example_html %>
-
-
-
-
diff --git a/views/_styleguide_block_without_preview.erb b/views/_styleguide_block_without_preview.erb
deleted file mode 100644
index 94c7ad2d..00000000
--- a/views/_styleguide_block_without_preview.erb
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-
<%= @section.section %> <%= @section.filename %>
-
-
<%= @section.description %>
- <% if @section.modifiers.any? %>
-
- <% @section.modifiers.each do |modifier| %>
- <%= modifier.name %> - <%= modifier.description %>
- <% end %>
-
- <% end %>
-
-
-
-
diff --git a/views/drupal_layout.erb b/views/drupal_layout.erb
deleted file mode 100644
index 3f32bbde..00000000
--- a/views/drupal_layout.erb
+++ /dev/null
@@ -1,136 +0,0 @@
-
-
-
-
-
- <%= yield_content :title %>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <%= yield %>
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/views/examples/blog.erb b/views/examples/blog.erb
deleted file mode 100644
index 3c0b6ffe..00000000
--- a/views/examples/blog.erb
+++ /dev/null
@@ -1,37 +0,0 @@
-<% content_for :title do %>
- Blog | DoSomething.org
-<% end %>
-
-
-
-
-
-
-
- Let's do something about heading tags. Awesome.
- Because typographic apathy sucks.
- Far far away, behind the word mountains, far from the countries Vokalia and Consonantia, there live the blind texts. Separated they live in Bookmarksgrove right at the coast of the Semantics, a large language ocean.
- Knight Rider, a shadowy flight into the dangerous world of a man who does not exist. Michael Knight, a young loner on a crusade to champion the cause of the innocent, the helpless in a world of criminals who operate above the law.
-
- Subheading
- Ten years ago a crack commando unit was sent to prison by a military court for a crime they didn't commit. These men promptly escaped from a maximum security stockade to the Los Angeles underground. Today, still wanted by the government, they survive as soldiers of fortune. If you have a problem and no one else can help, and if you can find them, maybe you can hire the A-team.
- Ten years ago a crack commando unit was sent to prison by a military court for a crime they didn't commit.
- Hong Kong Phooey, number one super guy. Hong Kong Phooey, quicker than the human eye. He's got style, a groovy style, and a car that just won't stop. When the going gets tough, he's really rough, with a Hong Kong Phooey chop (Hi-Ya!). Hong Kong Phooey, number one super guy. Hong Kong Phooey, quicker than the human eye. Hong Kong Phooey, he's fan-riffic!
-
-
-
- Mr. Bigglesworth — mild mannered cat with a dark secret... Housecat by day, monster by night.
-
-
- One for all and all for one, Muskehounds are always ready. One for all and all for one, helping everybody. One for all and all for one, it's a pretty story. Sharing everything with fun, that's the way to be. One for all and all for one, Muskehounds are always ready. One for all and all for one, helping everybody. One for all and all for one, can sound pretty corny. If you've got a problem chum, think how it could be.
-
- Time - we'll fight against the time, and we'll fly on the white wings of the wind.
-
- 80 days around the world, we'll find a pot of gold just sitting where the rainbow's ending. Time - we'll fight against the time, and we'll fly on the white wings of the wind. 80 days around the world, no we won't say a word before the ship is really back. Round, round, all around the world. Round, all around the world. Round, all around the world. Round, all around the world.
- Mutley, you snickering, floppy eared hound. When courage is needed, you're never around. Those medals you wear on your moth-eaten chest should be there for bungling at which you are best. So, stop that pigeon, stop that pigeon, stop that pigeon, stop that pigeon, stop that pigeon, stop that pigeon, stop that pigeon. Howwww! Nab him, jab him, tab him, grab him, stop that pigeon now.
-
-
diff --git a/views/examples/home.erb b/views/examples/home.erb
deleted file mode 100644
index 20bcbc3f..00000000
--- a/views/examples/home.erb
+++ /dev/null
@@ -1,11 +0,0 @@
-<% content_for :title do %>
- DoSomething.org
-<% end %>
-
-
-
Join 2.5 million young people. Any cause, anytime, anywhere. *mic drop*
-
-
DoSomething.org makes the world suck less. The largest org for young people and social change, our 2.5 million members tackle campaigns that impact every cause, from poverty to violence to the environment to literally everything else. Any cause, anytime, anywhere. *mic drop*
-
-
-
diff --git a/views/layout.erb b/views/layout.erb
deleted file mode 100644
index c3fb84bf..00000000
--- a/views/layout.erb
+++ /dev/null
@@ -1,86 +0,0 @@
-
-
-
-
-
- Pattern Library | DoSomething.org
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <%= yield %>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/views/login_form.erb b/views/login_form.erb
deleted file mode 100644
index 4a0f5e77..00000000
--- a/views/login_form.erb
+++ /dev/null
@@ -1,102 +0,0 @@
-
-
Sign in to get started!
-
-
-
-
-
diff --git a/views/styleguide.erb b/views/styleguide.erb
deleted file mode 100644
index cc1c2440..00000000
--- a/views/styleguide.erb
+++ /dev/null
@@ -1,377 +0,0 @@
-