Commit 3ce3fe95b489d29b23a8800963819fff5c594857

Add HTML5 Boilerplate

  Adding the HTML5 Boilerplate as our boilerplate.
.htaccess
(540 / 0)
  
1# Apache configuration file
2# httpd.apache.org/docs/2.2/mod/quickreference.html
3
4# Note .htaccess files are an overhead, this logic should be in your Apache
5# config if possible: httpd.apache.org/docs/2.2/howto/htaccess.html
6
7# Techniques in here adapted from all over, including:
8# Kroc Camen: camendesign.com/.htaccess
9# perishablepress.com/press/2006/01/10/stupid-htaccess-tricks/
10# Sample .htaccess file of CMS MODx: modxcms.com
11
12
13# ----------------------------------------------------------------------
14# Better website experience for IE users
15# ----------------------------------------------------------------------
16
17# Force the latest IE version, in various cases when it may fall back to IE7 mode
18# github.com/rails/rails/commit/123eb25#commitcomment-118920
19# Use ChromeFrame if it's installed for a better experience for the poor IE folk
20
21<IfModule mod_headers.c>
22 Header set X-UA-Compatible "IE=Edge,chrome=1"
23 # mod_headers can't match by content-type, but we don't want to send this header on *everything*...
24 <FilesMatch "\.(js|css|gif|png|jpe?g|pdf|xml|oga|ogg|m4a|ogv|mp4|m4v|webm|svg|svgz|eot|ttf|otf|woff|ico|webp|appcache|manifest|htc|crx|oex|xpi|safariextz|vcf)$" >
25 Header unset X-UA-Compatible
26 </FilesMatch>
27</IfModule>
28
29
30# ----------------------------------------------------------------------
31# Cross-domain AJAX requests
32# ----------------------------------------------------------------------
33
34# Serve cross-domain Ajax requests, disabled by default.
35# enable-cors.org
36# code.google.com/p/html5security/wiki/CrossOriginRequestSecurity
37
38# <IfModule mod_headers.c>
39# Header set Access-Control-Allow-Origin "*"
40# </IfModule>
41
42
43# ----------------------------------------------------------------------
44# CORS-enabled images (@crossorigin)
45# ----------------------------------------------------------------------
46
47# Send CORS headers if browsers request them; enabled by default for images.
48# developer.mozilla.org/en/CORS_Enabled_Image
49# blog.chromium.org/2011/07/using-cross-domain-images-in-webgl-and.html
50# hacks.mozilla.org/2011/11/using-cors-to-load-webgl-textures-from-cross-domain-images/
51# wiki.mozilla.org/Security/Reviews/crossoriginAttribute
52
53<IfModule mod_setenvif.c>
54 <IfModule mod_headers.c>
55 # mod_headers, y u no match by Content-Type?!
56 <FilesMatch "\.(gif|png|jpe?g|svg|svgz|ico|webp)$">
57 SetEnvIf Origin ":" IS_CORS
58 Header set Access-Control-Allow-Origin "*" env=IS_CORS
59 </FilesMatch>
60 </IfModule>
61</IfModule>
62
63
64# ----------------------------------------------------------------------
65# Webfont access
66# ----------------------------------------------------------------------
67
68# Allow access from all domains for webfonts.
69# Alternatively you could only whitelist your
70# subdomains like "subdomain.example.com".
71
72<IfModule mod_headers.c>
73 <FilesMatch "\.(ttf|ttc|otf|eot|woff|font.css)$">
74 Header set Access-Control-Allow-Origin "*"
75 </FilesMatch>
76</IfModule>
77
78
79# ----------------------------------------------------------------------
80# Proper MIME type for all files
81# ----------------------------------------------------------------------
82
83# JavaScript
84# Normalize to standard type (it's sniffed in IE anyways)
85# tools.ietf.org/html/rfc4329#section-7.2
86AddType application/javascript js jsonp
87AddType application/json json
88
89# Audio
90AddType audio/ogg oga ogg
91AddType audio/mp4 m4a f4a f4b
92
93# Video
94AddType video/ogg ogv
95AddType video/mp4 mp4 m4v f4v f4p
96AddType video/webm webm
97AddType video/x-flv flv
98
99# SVG
100# Required for svg webfonts on iPad
101# twitter.com/FontSquirrel/status/14855840545
102AddType image/svg+xml svg svgz
103AddEncoding gzip svgz
104
105# Webfonts
106AddType application/vnd.ms-fontobject eot
107AddType application/x-font-ttf ttf ttc
108AddType font/opentype otf
109AddType application/x-font-woff woff
110
111# Assorted types
112AddType image/x-icon ico
113AddType image/webp webp
114AddType text/cache-manifest appcache manifest
115AddType text/x-component htc
116AddType application/xml rss atom xml rdf
117AddType application/x-chrome-extension crx
118AddType application/x-opera-extension oex
119AddType application/x-xpinstall xpi
120AddType application/octet-stream safariextz
121AddType application/x-web-app-manifest+json webapp
122AddType text/x-vcard vcf
123AddType application/x-shockwave-flash swf
124AddType text/vtt vtt
125
126
127# ----------------------------------------------------------------------
128# Allow concatenation from within specific js and css files
129# ----------------------------------------------------------------------
130
131# e.g. Inside of script.combined.js you could have
132# <!--#include file="libs/jquery-1.5.0.min.js" -->
133# <!--#include file="plugins/jquery.idletimer.js" -->
134# and they would be included into this single file.
135
136# This is not in use in the boilerplate as it stands. You may
137# choose to use this technique if you do not have a build process.
138
139#<FilesMatch "\.combined\.js$">
140# Options +Includes
141# AddOutputFilterByType INCLUDES application/javascript application/json
142# SetOutputFilter INCLUDES
143#</FilesMatch>
144
145#<FilesMatch "\.combined\.css$">
146# Options +Includes
147# AddOutputFilterByType INCLUDES text/css
148# SetOutputFilter INCLUDES
149#</FilesMatch>
150
151
152# ----------------------------------------------------------------------
153# Gzip compression
154# ----------------------------------------------------------------------
155
156<IfModule mod_deflate.c>
157
158 # Force deflate for mangled headers developer.yahoo.com/blogs/ydn/posts/2010/12/pushing-beyond-gzipping/
159 <IfModule mod_setenvif.c>
160 <IfModule mod_headers.c>
161 SetEnvIfNoCase ^(Accept-EncodXng|X-cept-Encoding|X{15}|~{15}|-{15})$ ^((gzip|deflate)\s*,?\s*)+|[X~-]{4,13}$ HAVE_Accept-Encoding
162 RequestHeader append Accept-Encoding "gzip,deflate" env=HAVE_Accept-Encoding
163 </IfModule>
164 </IfModule>
165
166 # Compress all output labeled with one of the following MIME-types
167 <IfModule mod_filter.c>
168 AddOutputFilterByType DEFLATE application/atom+xml \
169 application/javascript \
170 application/json \
171 application/rss+xml \
172 application/vnd.ms-fontobject \
173 application/x-font-ttf \
174 application/xhtml+xml \
175 application/xml \
176 font/opentype \
177 image/svg+xml \
178 image/x-icon \
179 text/css \
180 text/html \
181 text/plain \
182 text/x-component \
183 text/xml
184 </IfModule>
185
186</IfModule>
187
188
189# ----------------------------------------------------------------------
190# Expires headers (for better cache control)
191# ----------------------------------------------------------------------
192
193# These are pretty far-future expires headers.
194# They assume you control versioning with filename-based cache busting
195# Additionally, consider that outdated proxies may miscache
196# www.stevesouders.com/blog/2008/08/23/revving-filenames-dont-use-querystring/
197
198# If you don't use filenames to version, lower the CSS and JS to something like
199# "access plus 1 week".
200
201<IfModule mod_expires.c>
202 ExpiresActive on
203
204# Perhaps better to whitelist expires rules? Perhaps.
205 ExpiresDefault "access plus 1 month"
206
207# cache.appcache needs re-requests in FF 3.6 (thanks Remy ~Introducing HTML5)
208 ExpiresByType text/cache-manifest "access plus 0 seconds"
209
210# Your document html
211 ExpiresByType text/html "access plus 0 seconds"
212
213# Data
214 ExpiresByType text/xml "access plus 0 seconds"
215 ExpiresByType application/xml "access plus 0 seconds"
216 ExpiresByType application/json "access plus 0 seconds"
217
218# Feed
219 ExpiresByType application/rss+xml "access plus 1 hour"
220 ExpiresByType application/atom+xml "access plus 1 hour"
221
222# Favicon (cannot be renamed)
223 ExpiresByType image/x-icon "access plus 1 week"
224
225# Media: images, video, audio
226 ExpiresByType image/gif "access plus 1 month"
227 ExpiresByType image/png "access plus 1 month"
228 ExpiresByType image/jpeg "access plus 1 month"
229 ExpiresByType video/ogg "access plus 1 month"
230 ExpiresByType audio/ogg "access plus 1 month"
231 ExpiresByType video/mp4 "access plus 1 month"
232 ExpiresByType video/webm "access plus 1 month"
233
234# HTC files (css3pie)
235 ExpiresByType text/x-component "access plus 1 month"
236
237# Webfonts
238 ExpiresByType application/x-font-ttf "access plus 1 month"
239 ExpiresByType font/opentype "access plus 1 month"
240 ExpiresByType application/x-font-woff "access plus 1 month"
241 ExpiresByType image/svg+xml "access plus 1 month"
242 ExpiresByType application/vnd.ms-fontobject "access plus 1 month"
243
244# CSS and JavaScript
245 ExpiresByType text/css "access plus 1 year"
246 ExpiresByType application/javascript "access plus 1 year"
247
248</IfModule>
249
250
251# ----------------------------------------------------------------------
252# Prevent mobile network providers from modifying your site
253# ----------------------------------------------------------------------
254
255# The following header prevents modification of your code over 3G on some
256# European providers.
257# This is the official 'bypass' suggested by O2 in the UK.
258
259# <IfModule mod_headers.c>
260# Header set Cache-Control "no-transform"
261# </IfModule>
262
263
264# ----------------------------------------------------------------------
265# ETag removal
266# ----------------------------------------------------------------------
267
268# FileETag None is not enough for every server.
269<IfModule mod_headers.c>
270 Header unset ETag
271</IfModule>
272
273# Since we're sending far-future expires, we don't need ETags for
274# static content.
275# developer.yahoo.com/performance/rules.html#etags
276FileETag None
277
278
279# ----------------------------------------------------------------------
280# Stop screen flicker in IE on CSS rollovers
281# ----------------------------------------------------------------------
282
283# The following directives stop screen flicker in IE on CSS rollovers - in
284# combination with the "ExpiresByType" rules for images (see above).
285
286# BrowserMatch "MSIE" brokenvary=1
287# BrowserMatch "Mozilla/4.[0-9]{2}" brokenvary=1
288# BrowserMatch "Opera" !brokenvary
289# SetEnvIf brokenvary 1 force-no-vary
290
291
292# ----------------------------------------------------------------------
293# Set Keep-Alive Header
294# ----------------------------------------------------------------------
295
296# Keep-Alive allows the server to send multiple requests through one
297# TCP-connection. Be aware of possible disadvantages of this setting. Turn on
298# if you serve a lot of static content.
299
300# <IfModule mod_headers.c>
301# Header set Connection Keep-Alive
302# </IfModule>
303
304
305# ----------------------------------------------------------------------
306# Cookie setting from iframes
307# ----------------------------------------------------------------------
308
309# Allow cookies to be set from iframes (for IE only)
310# If needed, specify a path or regex in the Location directive.
311
312# <IfModule mod_headers.c>
313# Header set P3P "policyref=\"/w3c/p3p.xml\", CP=\"IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT\""
314# </IfModule>
315
316
317# ----------------------------------------------------------------------
318# Start rewrite engine
319# ----------------------------------------------------------------------
320
321# Turning on the rewrite engine is necessary for the following rules and
322# features. FollowSymLinks must be enabled for this to work.
323
324# Some cloud hosting services require RewriteBase to be set: goo.gl/HOcPN
325# If using the h5bp in a subdirectory, use `RewriteBase /foo` instead where
326# 'foo' is your directory.
327
328# If your web host doesn't allow the FollowSymlinks option, you may need to
329# comment it out and use `Options +SymLinksOfOwnerMatch`, but be aware of the
330# performance impact: http://goo.gl/Mluzd
331
332<IfModule mod_rewrite.c>
333 Options +FollowSymlinks
334# Options +SymLinksIfOwnerMatch
335 RewriteEngine On
336# RewriteBase /
337</IfModule>
338
339
340# ----------------------------------------------------------------------
341# Suppress or force the "www." at the beginning of URLs
342# ----------------------------------------------------------------------
343
344# The same content should never be available under two different URLs -
345# especially not with and without "www." at the beginning, since this can cause
346# SEO problems (duplicate content). That's why you should choose one of the
347# alternatives and redirect the other one.
348
349# By default option 1 (no "www.") is activated.
350# no-www.org/faq.php?q=class_b
351
352# If you'd prefer to use option 2, just comment out all option 1 lines
353# and uncomment option 2.
354
355# IMPORTANT: NEVER USE BOTH RULES AT THE SAME TIME!
356
357# ----------------------------------------------------------------------
358
359# Option 1:
360# Rewrite "www.example.com -> example.com".
361
362<IfModule mod_rewrite.c>
363 RewriteCond %{HTTPS} !=on
364 RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
365 RewriteRule ^ http://%1%{REQUEST_URI} [R=301,L]
366</IfModule>
367
368# ----------------------------------------------------------------------
369
370# Option 2:
371# Rewrite "example.com -> www.example.com".
372# Be aware that the following rule might not be a good idea if you use "real"
373# subdomains for certain parts of your website.
374
375# <IfModule mod_rewrite.c>
376# RewriteCond %{HTTPS} !=on
377# RewriteCond %{HTTP_HOST} !^www\..+$ [NC]
378# RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
379# </IfModule>
380
381
382# ----------------------------------------------------------------------
383# Built-in filename-based cache busting
384# ----------------------------------------------------------------------
385
386# If you're not using the build script to manage your filename version revving,
387# you might want to consider enabling this, which will route requests for
388# /css/style.20110203.css to /css/style.css
389
390# To understand why this is important and a better idea than all.css?v1231,
391# read: github.com/h5bp/html5-boilerplate/wiki/cachebusting
392
393# <IfModule mod_rewrite.c>
394# RewriteCond %{REQUEST_FILENAME} !-f
395# RewriteCond %{REQUEST_FILENAME} !-d
396# RewriteRule ^(.+)\.(\d+)\.(js|css|png|jpg|gif)$ $1.$3 [L]
397# </IfModule>
398
399
400# ----------------------------------------------------------------------
401# Prevent SSL cert warnings
402# ----------------------------------------------------------------------
403
404# Rewrite secure requests properly to prevent SSL cert warnings, e.g. prevent
405# https://www.example.com when your cert only allows https://secure.example.com
406
407# <IfModule mod_rewrite.c>
408# RewriteCond %{SERVER_PORT} !^443
409# RewriteRule ^ https://example-domain-please-change-me.com%{REQUEST_URI} [R=301,L]
410# </IfModule>
411
412
413# ----------------------------------------------------------------------
414# Prevent 404 errors for non-existing redirected folders
415# ----------------------------------------------------------------------
416
417# without -MultiViews, Apache will give a 404 for a rewrite if a folder of the
418# same name does not exist.
419# webmasterworld.com/apache/3808792.htm
420
421Options -MultiViews
422
423
424# ----------------------------------------------------------------------
425# Custom 404 page
426# ----------------------------------------------------------------------
427
428# You can add custom pages to handle 500 or 403 pretty easily, if you like.
429# If you are hosting your site in subdirectory, adjust this accordingly
430# e.g. ErrorDocument 404 /subdir/404.html
431ErrorDocument 404 /404.html
432
433
434# ----------------------------------------------------------------------
435# UTF-8 encoding
436# ----------------------------------------------------------------------
437
438# Use UTF-8 encoding for anything served text/plain or text/html
439AddDefaultCharset utf-8
440
441# Force UTF-8 for a number of file formats
442AddCharset utf-8 .atom .css .js .json .rss .vtt .xml
443
444
445# ----------------------------------------------------------------------
446# A little more security
447# ----------------------------------------------------------------------
448
449# To avoid displaying the exact version number of Apache being used, add the
450# following to httpd.conf (it will not work in .htaccess):
451# ServerTokens Prod
452
453# "-Indexes" will have Apache block users from browsing folders without a
454# default document Usually you should leave this activated, because you
455# shouldn't allow everybody to surf through every folder on your server (which
456# includes rather private places like CMS system folders).
457<IfModule mod_autoindex.c>
458 Options -Indexes
459</IfModule>
460
461# Block access to "hidden" directories or files whose names begin with a
462# period. This includes directories used by version control systems such as
463# Subversion or Git.
464<IfModule mod_rewrite.c>
465 RewriteCond %{SCRIPT_FILENAME} -d [OR]
466 RewriteCond %{SCRIPT_FILENAME} -f
467 RewriteRule "(^|/)\." - [F]
468</IfModule>
469
470# Block access to backup and source files. These files may be left by some
471# text/html editors and pose a great security danger, when anyone can access
472# them.
473<FilesMatch "(\.(bak|config|sql|fla|psd|ini|log|sh|inc|swp|dist)|~)$">
474 Order allow,deny
475 Deny from all
476 Satisfy All
477</FilesMatch>
478
479# If your server is not already configured as such, the following directive
480# should be uncommented in order to set PHP's register_globals option to OFF.
481# This closes a major security hole that is abused by most XSS (cross-site
482# scripting) attacks. For more information: http://php.net/register_globals
483#
484# IF REGISTER_GLOBALS DIRECTIVE CAUSES 500 INTERNAL SERVER ERRORS:
485#
486# Your server does not allow PHP directives to be set via .htaccess. In that
487# case you must make this change in your php.ini file instead. If you are
488# using a commercial web host, contact the administrators for assistance in
489# doing this. Not all servers allow local php.ini files, and they should
490# include all PHP configurations (not just this one), or you will effectively
491# reset everything to PHP defaults. Consult www.php.net for more detailed
492# information about setting PHP directives.
493
494# php_flag register_globals Off
495
496# Rename session cookie to something else, than PHPSESSID
497# php_value session.name sid
498
499# Disable magic quotes (This feature has been DEPRECATED as of PHP 5.3.0 and REMOVED as of PHP 5.4.0.)
500# php_flag magic_quotes_gpc Off
501
502# Do not show you are using PHP
503# Note: Move this line to php.ini since it won't work in .htaccess
504# php_flag expose_php Off
505
506# Level of log detail - log all errors
507# php_value error_reporting -1
508
509# Write errors to log file
510# php_flag log_errors On
511
512# Do not display errors in browser (production - Off, development - On)
513# php_flag display_errors Off
514
515# Do not display startup errors (production - Off, development - On)
516# php_flag display_startup_errors Off
517
518# Format errors in plain text
519# Note: Leave this setting 'On' for xdebug's var_dump() output
520# php_flag html_errors Off
521
522# Show multiple occurrence of error
523# php_flag ignore_repeated_errors Off
524
525# Show same errors from different sources
526# php_flag ignore_repeated_source Off
527
528# Size limit for error messages
529# php_value log_errors_max_len 1024
530
531# Don't precede error with string (doesn't accept empty string, use whitespace if you need)
532# php_value error_prepend_string " "
533
534# Don't prepend to error (doesn't accept empty string, use whitespace if you need)
535# php_value error_append_string " "
536
537# Increase cookie security
538<IfModule php5_module>
539 php_value session.cookie_httponly true
540</IfModule>
404.html
(157 / 0)
  
1<!DOCTYPE html>
2<html lang="en">
3 <head>
4 <meta charset="utf-8">
5 <title>Page Not Found :(</title>
6 <style>
7 ::-moz-selection {
8 background: #b3d4fc;
9 text-shadow: none;
10 }
11
12 ::selection {
13 background: #b3d4fc;
14 text-shadow: none;
15 }
16
17 html {
18 padding: 30px 10px;
19 font-size: 20px;
20 line-height: 1.4;
21 color: #737373;
22 background: #f0f0f0;
23 -webkit-text-size-adjust: 100%;
24 -ms-text-size-adjust: 100%;
25 }
26
27 html,
28 input {
29 font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
30 }
31
32 body {
33 max-width: 500px;
34 _width: 500px;
35 padding: 30px 20px 50px;
36 border: 1px solid #b3b3b3;
37 border-radius: 4px;
38 margin: 0 auto;
39 box-shadow: 0 1px 10px #a7a7a7, inset 0 1px 0 #fff;
40 background: #fcfcfc;
41 }
42
43 h1 {
44 margin: 0 10px;
45 font-size: 50px;
46 text-align: center;
47 }
48
49 h1 span {
50 color: #bbb;
51 }
52
53 h3 {
54 margin: 1.5em 0 0.5em;
55 }
56
57 p {
58 margin: 1em 0;
59 }
60
61 ul {
62 padding: 0 0 0 40px;
63 margin: 1em 0;
64 }
65
66 .container {
67 max-width: 380px;
68 _width: 380px;
69 margin: 0 auto;
70 }
71
72 /* google search */
73
74 #goog-fixurl ul {
75 list-style: none;
76 padding: 0;
77 margin: 0;
78 }
79
80 #goog-fixurl form {
81 margin: 0;
82 }
83
84 #goog-wm-qt,
85 #goog-wm-sb {
86 border: 1px solid #bbb;
87 font-size: 16px;
88 line-height: normal;
89 vertical-align: top;
90 color: #444;
91 border-radius: 2px;
92 }
93
94 #goog-wm-qt {
95 width: 220px;
96 height: 20px;
97 padding: 5px;
98 margin: 5px 10px 0 0;
99 box-shadow: inset 0 1px 1px #ccc;
100 }
101
102 #goog-wm-sb {
103 display: inline-block;
104 height: 32px;
105 padding: 0 10px;
106 margin: 5px 0 0;
107 white-space: nowrap;
108 cursor: pointer;
109 background-color: #f5f5f5;
110 background-image: -webkit-linear-gradient(rgba(255,255,255,0), #f1f1f1);
111 background-image: -moz-linear-gradient(rgba(255,255,255,0), #f1f1f1);
112 background-image: -ms-linear-gradient(rgba(255,255,255,0), #f1f1f1);
113 background-image: -o-linear-gradient(rgba(255,255,255,0), #f1f1f1);
114 -webkit-appearance: none;
115 -moz-appearance: none;
116 appearance: none;
117 *overflow: visible;
118 *display: inline;
119 *zoom: 1;
120 }
121
122 #goog-wm-sb:hover,
123 #goog-wm-sb:focus {
124 border-color: #aaa;
125 box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);
126 background-color: #f8f8f8;
127 }
128
129 #goog-wm-qt:hover,
130 #goog-wm-qt:focus {
131 border-color: #105cb6;
132 outline: 0;
133 color: #222;
134 }
135
136 input::-moz-focus-inner {
137 padding: 0;
138 border: 0;
139 }
140 </style>
141 </head>
142 <body>
143 <div class="container">
144 <h1>Not found <span>:(</span></h1>
145 <p>Sorry, but the page you were trying to view does not exist.</p>
146 <p>It looks like this was the result of either:</p>
147 <ul>
148 <li>a mistyped address</li>
149 <li>an out-of-date link</li>
150 </ul>
151 <script>
152 var GOOG_FIXURL_LANG = (navigator.language || '').slice(0,2),GOOG_FIXURL_SITE = location.host;
153 </script>
154 <script src="http://linkhelp.clients.google.com/tbproxy/lh/wm/fixurl.js"></script>
155 </div>
156 </body>
157</html>
CHANGELOG.md
(87 / 0)
  
1### HEAD
2
3### 4.0.0 (28 August, 2012)
4
5* Improve the Apache compression configuration ([#1012](https://github.com/h5bp/html5-boilerplate/issues/1012), [#1173](https://github.com/h5bp/html5-boilerplate/issues/1173)).
6* Add a HiDPI example media query ([#1127](https://github.com/h5bp/html5-boilerplate/issues/1127)).
7* Add bundled docs ([#1154](https://github.com/h5bp/html5-boilerplate/issues/1154)).
8* Add MIT license ([#1139](https://github.com/h5bp/html5-boilerplate/issues/1139)).
9* Update to Normalize.css 1.0.1.
10* Separate Normalize.css from the rest of the CSS ([#1160](https://github.com/h5bp/html5-boilerplate/issues/1160)).
11* Improve `console.log` protection ([#1107](https://github.com/h5bp/html5-boilerplate/issues/1107)).
12* Replace hot pink text selection color with a neutral color.
13* Change image replacement technique ([#1149](https://github.com/h5bp/html5-boilerplate/issues/1149)).
14* Code format and consistency changes ([#1112](https://github.com/h5bp/html5-boilerplate/issues/1112)).
15* Rename CSS file and rename JS files and subdirectories.
16* Update to jQuery 1.8 ([#1161](https://github.com/h5bp/html5-boilerplate/issues/1161)).
17* Update to Modernizr 2.6.1 ([#1086](https://github.com/h5bp/html5-boilerplate/issues/1086)).
18* Remove uncompressed jQuery ([#1153](https://github.com/h5bp/html5-boilerplate/issues/1153)).
19* Remove superfluous inline comments ([#1150](https://github.com/h5bp/html5-boilerplate/issues/1150)).
20
21### 3.0.2 (February 19, 2012)
22
23* Update to Modernizr 2.5.3.
24
25### 3.0.1 (February 08, 2012).
26
27* Update to Modernizr 2.5.2 (includes html5shiv 3.3).
28
29### 3.0.0 (February 06, 2012)
30
31* Improvements to `.htaccess`.
32* Improve 404 design.
33* Simplify JS folder structure.
34* Change `html` IE class names changed to target ranges rather than specific versions of IE.
35* Update CSS to include latest normalize.css changes and better typographic defaults ([#825](https://github.com/h5bp/html5-boilerplate/issues/825)).
36* Update to Modernizr 2.5 (includes yepnope 1.5 and html5shiv 3.2).
37* Update to jQuery 1.7.1.
38* Revert to async snippet for the Google Analytics script.
39* Remove the ant build script ([#826](https://github.com/h5bp/html5-boilerplate/issues/826)).
40* Remove Respond.js ([#816](https://github.com/h5bp/html5-boilerplate/issues/816)).
41* Remove the `demo/` directory ([#808](https://github.com/h5bp/html5-boilerplate/issues/808)).
42* Remove the `test/` directory ([#808](https://github.com/h5bp/html5-boilerplate/issues/808)).
43* Remove Google Chrome Frame script for IE6 users; replace with links to Chrome Frame and options for alternative browsers.
44* Remove `initial-scale=1` from the viewport `meta` ([#824](https://github.com/h5bp/html5-boilerplate/issues/824)).
45* Remove `defer` from all scripts to avoid legacy IE bugs.
46* Remove explicit Site Speed tracking for Google Analytics. It's now enabled by default.
47
48### 2.0.0 (August 10, 2011)
49
50* Change starting CSS to be based on normalize.css instead of reset.css ([#500](https://github.com/h5bp/html5-boilerplate/issues/500)).
51* Add Respond.js media query polyfill.
52* Add Google Chrome Frame script prompt for IE6 users.
53* Simplify the `html` conditional comments for modern browsers and add an `oldie` class.
54* Update clearfix to use "micro clearfix".
55* Add placeholder CSS MQs for mobile-first approach.
56* Add `textarea { resize: vertical; }` to only allow vertical resizing.
57* Add `img { max-width: 100%; }` to the print styles; prevents images being truncated.
58* Add Site Speed tracking for Google Analytics.
59* Update to jQuery 1.6.2 (and use minified by default).
60* Update to Modernizr 2.0 Complete, Production minified (includes yepnope, html5shiv, and Respond.js).
61* Use `Modernizr.load()` to load the Google Analytics script.
62* Much faster build process.
63* Add build script options for CSSLint, JSLint, JSHint tools.
64* Build script now compresses all images in subfolders.
65* Build script now versions files by SHA hash.
66* Many `.htaccess` improvements including: disable directory browsing, improved support for all versions of Apache, more robust and extensive HTTP compression rules.
67* Remove `handheld.css` as it has very poor device support.
68* Remove touch-icon `link` elements from the HTML and include improved touch-icon support.
69* Remove the cache-busting query paramaters from files references in the HTML.
70* Remove IE6 PNGFix.
71
72### 1.0.0 (March 21, 2011)
73
74* Rewrite build script to make it more customizable and flexible.
75* Add a humans.txt.
76* Numerous `.htaccess` improvements (including inline documentation).
77* Move the alternative server configurations to the H5BP server configs repo.
78* Use a protocol-relative url to reference jQuery and prevent mixed content warnings.
79* Optimize the Google Analytics snippet.
80* Use Eric Meyer's recent CSS reset update and the HTML5 Doctor reset.
81* More robust `sub`/`sup` CSS styles.
82* Add keyboard `.focusable` helper class that extends `.visuallyhidden`.
83* Print styles no longer print hash or JavaScript links.
84* Add a print reset for IE's proprietary filters.
85* Remove IE9-specific conditional class on the `html` element.
86* Remove margins from lists within `nav` elements.
87* Remove YUI profiling.
LICENSE.md
(19 / 0)
  
1Copyright (c) HTML5 Boilerplate
2
3Permission is hereby granted, free of charge, to any person obtaining a copy of
4this software and associated documentation files (the "Software"), to deal in
5the Software without restriction, including without limitation the rights to
6use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
7of the Software, and to permit persons to whom the Software is furnished to do
8so, subject to the following conditions:
9
10The above copyright notice and this permission notice shall be included in all
11copies or substantial portions of the Software.
12
13THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19SOFTWARE.
  
1<?xml version="1.0"?>
2<!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">
3<cross-domain-policy>
4 <!-- Read this: www.adobe.com/devnet/articles/crossdomain_policy_file_spec.html -->
5
6 <!-- Most restrictive policy: -->
7 <site-control permitted-cross-domain-policies="none"/>
8
9 <!-- Least restrictive policy: -->
10 <!--
11 <site-control permitted-cross-domain-policies="all"/>
12 <allow-access-from domain="*" to-ports="*" secure="false"/>
13 <allow-http-request-headers-from domain="*" headers="*" secure="false"/>
14 -->
15</cross-domain-policy>
css/main.css
(298 / 0)
  
1/*
2 * HTML5 Boilerplate
3 *
4 * What follows is the result of much research on cross-browser styling.
5 * Credit left inline and big thanks to Nicolas Gallagher, Jonathan Neal,
6 * Kroc Camen, and the H5BP dev community and team.
7 */
8
9/* ==========================================================================
10 Base styles: opinionated defaults
11 ========================================================================== */
12
13html,
14button,
15input,
16select,
17textarea {
18 color: #222;
19}
20
21body {
22 font-size: 1em;
23 line-height: 1.4;
24}
25
26/*
27 * Remove text-shadow in selection highlight: h5bp.com/i
28 * These selection declarations have to be separate.
29 * Customize the background color to match your design.
30 */
31
32::-moz-selection {
33 background: #b3d4fc;
34 text-shadow: none;
35}
36
37::selection {
38 background: #b3d4fc;
39 text-shadow: none;
40}
41
42/*
43 * A better looking default horizontal rule
44 */
45
46hr {
47 display: block;
48 height: 1px;
49 border: 0;
50 border-top: 1px solid #ccc;
51 margin: 1em 0;
52 padding: 0;
53}
54
55/*
56 * Remove the gap between images and the bottom of their containers: h5bp.com/i/440
57 */
58
59img {
60 vertical-align: middle;
61}
62
63/*
64 * Remove default fieldset styles.
65 */
66
67fieldset {
68 border: 0;
69 margin: 0;
70 padding: 0;
71}
72
73/*
74 * Allow only vertical resizing of textareas.
75 */
76
77textarea {
78 resize: vertical;
79}
80
81/* ==========================================================================
82 Chrome Frame prompt
83 ========================================================================== */
84
85.chromeframe {
86 margin: 0.2em 0;
87 background: #ccc;
88 color: #000;
89 padding: 0.2em 0;
90}
91
92/* ==========================================================================
93 Author's custom styles
94 ========================================================================== */
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112/* ==========================================================================
113 Helper classes
114 ========================================================================== */
115
116/*
117 * Image replacement
118 */
119
120.ir {
121 background-color: transparent;
122 border: 0;
123 overflow: hidden;
124 /* IE 6/7 fallback */
125 *text-indent: -9999px;
126}
127
128.ir:before {
129 content: "";
130 display: block;
131 width: 0;
132 height: 100%;
133}
134
135/*
136 * Hide from both screenreaders and browsers: h5bp.com/u
137 */
138
139.hidden {
140 display: none !important;
141 visibility: hidden;
142}
143
144/*
145 * Hide only visually, but have it available for screenreaders: h5bp.com/v
146 */
147
148.visuallyhidden {
149 border: 0;
150 clip: rect(0 0 0 0);
151 height: 1px;
152 margin: -1px;
153 overflow: hidden;
154 padding: 0;
155 position: absolute;
156 width: 1px;
157}
158
159/*
160 * Extends the .visuallyhidden class to allow the element to be focusable
161 * when navigated to via the keyboard: h5bp.com/p
162 */
163
164.visuallyhidden.focusable:active,
165.visuallyhidden.focusable:focus {
166 clip: auto;
167 height: auto;
168 margin: 0;
169 overflow: visible;
170 position: static;
171 width: auto;
172}
173
174/*
175 * Hide visually and from screenreaders, but maintain layout
176 */
177
178.invisible {
179 visibility: hidden;
180}
181
182/*
183 * Clearfix: contain floats
184 *
185 * For modern browsers
186 * 1. The space content is one way to avoid an Opera bug when the
187 * `contenteditable` attribute is included anywhere else in the document.
188 * Otherwise it causes space to appear at the top and bottom of elements
189 * that receive the `clearfix` class.
190 * 2. The use of `table` rather than `block` is only necessary if using
191 * `:before` to contain the top-margins of child elements.
192 */
193
194.clearfix:before,
195.clearfix:after {
196 content: " "; /* 1 */
197 display: table; /* 2 */
198}
199
200.clearfix:after {
201 clear: both;
202}
203
204/*
205 * For IE 6/7 only
206 * Include this rule to trigger hasLayout and contain floats.
207 */
208
209.clearfix {
210 *zoom: 1;
211}
212
213/* ==========================================================================
214 EXAMPLE Media Queries for Responsive Design.
215 Theses examples override the primary ('mobile first') styles.
216 Modify as content requires.
217 ========================================================================== */
218
219@media only screen and (min-width: 35em) {
220 /* Style adjustments for viewports that meet the condition */
221}
222
223@media only screen and (-webkit-min-device-pixel-ratio: 1.5),
224 only screen and (min-resolution: 144dpi) {
225 /* Style adjustments for high resolution devices */
226}
227
228/* ==========================================================================
229 Print styles.
230 Inlined to avoid required HTTP connection: h5bp.com/r
231 ========================================================================== */
232
233@media print {
234 * {
235 background: transparent !important;
236 color: #000 !important; /* Black prints faster: h5bp.com/s */
237 box-shadow:none !important;
238 text-shadow: none !important;
239 }
240
241 a,
242 a:visited {
243 text-decoration: underline;
244 }
245
246 a[href]:after {
247 content: " (" attr(href) ")";
248 }
249
250 abbr[title]:after {
251 content: " (" attr(title) ")";
252 }
253
254 /*
255 * Don't show links for images, or javascript/internal links
256 */
257
258 .ir a:after,
259 a[href^="javascript:"]:after,
260 a[href^="#"]:after {
261 content: "";
262 }
263
264 pre,
265 blockquote {
266 border: 1px solid #999;
267 page-break-inside: avoid;
268 }
269
270 thead {
271 display: table-header-group; /* h5bp.com/t */
272 }
273
274 tr,
275 img {
276 page-break-inside: avoid;
277 }
278
279 img {
280 max-width: 100% !important;
281 }
282
283 @page {
284 margin: 0.5cm;
285 }
286
287 p,
288 h2,
289 h3 {
290 orphans: 3;
291 widows: 3;
292 }
293
294 h2,
295 h3 {
296 page-break-after: avoid;
297 }
298}
  
1/*! normalize.css v1.0.1 | MIT License | git.io/normalize */
2
3/* ==========================================================================
4 HTML5 display definitions
5 ========================================================================== */
6
7/*
8 * Corrects `block` display not defined in IE 6/7/8/9 and Firefox 3.
9 */
10
11article,
12aside,
13details,
14figcaption,
15figure,
16footer,
17header,
18hgroup,
19nav,
20section,
21summary {
22 display: block;
23}
24
25/*
26 * Corrects `inline-block` display not defined in IE 6/7/8/9 and Firefox 3.
27 */
28
29audio,
30canvas,
31video {
32 display: inline-block;
33 *display: inline;
34 *zoom: 1;
35}
36
37/*
38 * Prevents modern browsers from displaying `audio` without controls.
39 * Remove excess height in iOS 5 devices.
40 */
41
42audio:not([controls]) {
43 display: none;
44 height: 0;
45}
46
47/*
48 * Addresses styling for `hidden` attribute not present in IE 7/8/9, Firefox 3,
49 * and Safari 4.
50 * Known issue: no IE 6 support.
51 */
52
53[hidden] {
54 display: none;
55}
56
57/* ==========================================================================
58 Base
59 ========================================================================== */
60
61/*
62 * 1. Corrects text resizing oddly in IE 6/7 when body `font-size` is set using
63 * `em` units.
64 * 2. Prevents iOS text size adjust after orientation change, without disabling
65 * user zoom.
66 */
67
68html {
69 font-size: 100%; /* 1 */
70 -webkit-text-size-adjust: 100%; /* 2 */
71 -ms-text-size-adjust: 100%; /* 2 */
72}
73
74/*
75 * Addresses `font-family` inconsistency between `textarea` and other form
76 * elements.
77 */
78
79html,
80button,
81input,
82select,
83textarea {
84 font-family: sans-serif;
85}
86
87/*
88 * Addresses margins handled incorrectly in IE 6/7.
89 */
90
91body {
92 margin: 0;
93}
94
95/* ==========================================================================
96 Links
97 ========================================================================== */
98
99/*
100 * Addresses `outline` inconsistency between Chrome and other browsers.
101 */
102
103a:focus {
104 outline: thin dotted;
105}
106
107/*
108 * Improves readability when focused and also mouse hovered in all browsers.
109 */
110
111a:active,
112a:hover {
113 outline: 0;
114}
115
116/* ==========================================================================
117 Typography
118 ========================================================================== */
119
120/*
121 * Addresses font sizes and margins set differently in IE 6/7.
122 * Addresses font sizes within `section` and `article` in Firefox 4+, Safari 5,
123 * and Chrome.
124 */
125
126h1 {
127 font-size: 2em;
128 margin: 0.67em 0;
129}
130
131h2 {
132 font-size: 1.5em;
133 margin: 0.83em 0;
134}
135
136h3 {
137 font-size: 1.17em;
138 margin: 1em 0;
139}
140
141h4 {
142 font-size: 1em;
143 margin: 1.33em 0;
144}
145
146h5 {
147 font-size: 0.83em;
148 margin: 1.67em 0;
149}
150
151h6 {
152 font-size: 0.75em;
153 margin: 2.33em 0;
154}
155
156/*
157 * Addresses styling not present in IE 7/8/9, Safari 5, and Chrome.
158 */
159
160abbr[title] {
161 border-bottom: 1px dotted;
162}
163
164/*
165 * Addresses style set to `bolder` in Firefox 3+, Safari 4/5, and Chrome.
166 */
167
168b,
169strong {
170 font-weight: bold;
171}
172
173blockquote {
174 margin: 1em 40px;
175}
176
177/*
178 * Addresses styling not present in Safari 5 and Chrome.
179 */
180
181dfn {
182 font-style: italic;
183}
184
185/*
186 * Addresses styling not present in IE 6/7/8/9.
187 */
188
189mark {
190 background: #ff0;
191 color: #000;
192}
193
194/*
195 * Addresses margins set differently in IE 6/7.
196 */
197
198p,
199pre {
200 margin: 1em 0;
201}
202
203/*
204 * Corrects font family set oddly in IE 6, Safari 4/5, and Chrome.
205 */
206
207code,
208kbd,
209pre,
210samp {
211 font-family: monospace, serif;
212 _font-family: 'courier new', monospace;
213 font-size: 1em;
214}
215
216/*
217 * Improves readability of pre-formatted text in all browsers.
218 */
219
220pre {
221 white-space: pre;
222 white-space: pre-wrap;
223 word-wrap: break-word;
224}
225
226/*
227 * Addresses CSS quotes not supported in IE 6/7.
228 */
229
230q {
231 quotes: none;
232}
233
234/*
235 * Addresses `quotes` property not supported in Safari 4.
236 */
237
238q:before,
239q:after {
240 content: '';
241 content: none;
242}
243
244/*
245 * Addresses inconsistent and variable font size in all browsers.
246 */
247
248small {
249 font-size: 80%;
250}
251
252/*
253 * Prevents `sub` and `sup` affecting `line-height` in all browsers.
254 */
255
256sub,
257sup {
258 font-size: 75%;
259 line-height: 0;
260 position: relative;
261 vertical-align: baseline;
262}
263
264sup {
265 top: -0.5em;
266}
267
268sub {
269 bottom: -0.25em;
270}
271
272/* ==========================================================================
273 Lists
274 ========================================================================== */
275
276/*
277 * Addresses margins set differently in IE 6/7.
278 */
279
280dl,
281menu,
282ol,
283ul {
284 margin: 1em 0;
285}
286
287dd {
288 margin: 0 0 0 40px;
289}
290
291/*
292 * Addresses paddings set differently in IE 6/7.
293 */
294
295menu,
296ol,
297ul {
298 padding: 0 0 0 40px;
299}
300
301/*
302 * Corrects list images handled incorrectly in IE 7.
303 */
304
305nav ul,
306nav ol {
307 list-style: none;
308 list-style-image: none;
309}
310
311/* ==========================================================================
312 Embedded content
313 ========================================================================== */
314
315/*
316 * 1. Removes border when inside `a` element in IE 6/7/8/9 and Firefox 3.
317 * 2. Improves image quality when scaled in IE 7.
318 */
319
320img {
321 border: 0; /* 1 */
322 -ms-interpolation-mode: bicubic; /* 2 */
323}
324
325/*
326 * Corrects overflow displayed oddly in IE 9.
327 */
328
329svg:not(:root) {
330 overflow: hidden;
331}
332
333/* ==========================================================================
334 Figures
335 ========================================================================== */
336
337/*
338 * Addresses margin not present in IE 6/7/8/9, Safari 5, and Opera 11.
339 */
340
341figure {
342 margin: 0;
343}
344
345/* ==========================================================================
346 Forms
347 ========================================================================== */
348
349/*
350 * Corrects margin displayed oddly in IE 6/7.
351 */
352
353form {
354 margin: 0;
355}
356
357/*
358 * Define consistent border, margin, and padding.
359 */
360
361fieldset {
362 border: 1px solid #c0c0c0;
363 margin: 0 2px;
364 padding: 0.35em 0.625em 0.75em;
365}
366
367/*
368 * 1. Corrects color not being inherited in IE 6/7/8/9.
369 * 2. Corrects text not wrapping in Firefox 3.
370 * 3. Corrects alignment displayed oddly in IE 6/7.
371 */
372
373legend {
374 border: 0; /* 1 */
375 padding: 0;
376 white-space: normal; /* 2 */
377 *margin-left: -7px; /* 3 */
378}
379
380/*
381 * 1. Corrects font size not being inherited in all browsers.
382 * 2. Addresses margins set differently in IE 6/7, Firefox 3+, Safari 5,
383 * and Chrome.
384 * 3. Improves appearance and consistency in all browsers.
385 */
386
387button,
388input,
389select,
390textarea {
391 font-size: 100%; /* 1 */
392 margin: 0; /* 2 */
393 vertical-align: baseline; /* 3 */
394 *vertical-align: middle; /* 3 */
395}
396
397/*
398 * Addresses Firefox 3+ setting `line-height` on `input` using `!important` in
399 * the UA stylesheet.
400 */
401
402button,
403input {
404 line-height: normal;
405}
406
407/*
408 * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
409 * and `video` controls.
410 * 2. Corrects inability to style clickable `input` types in iOS.
411 * 3. Improves usability and consistency of cursor style between image-type
412 * `input` and others.
413 * 4. Removes inner spacing in IE 7 without affecting normal text inputs.
414 * Known issue: inner spacing remains in IE 6.
415 */
416
417button,
418html input[type="button"], /* 1 */
419input[type="reset"],
420input[type="submit"] {
421 -webkit-appearance: button; /* 2 */
422 cursor: pointer; /* 3 */
423 *overflow: visible; /* 4 */
424}
425
426/*
427 * Re-set default cursor for disabled elements.
428 */
429
430button[disabled],
431input[disabled] {
432 cursor: default;
433}
434
435/*
436 * 1. Addresses box sizing set to content-box in IE 8/9.
437 * 2. Removes excess padding in IE 8/9.
438 * 3. Removes excess padding in IE 7.
439 * Known issue: excess padding remains in IE 6.
440 */
441
442input[type="checkbox"],
443input[type="radio"] {
444 box-sizing: border-box; /* 1 */
445 padding: 0; /* 2 */
446 *height: 13px; /* 3 */
447 *width: 13px; /* 3 */
448}
449
450/*
451 * 1. Addresses `appearance` set to `searchfield` in Safari 5 and Chrome.
452 * 2. Addresses `box-sizing` set to `border-box` in Safari 5 and Chrome
453 * (include `-moz` to future-proof).
454 */
455
456input[type="search"] {
457 -webkit-appearance: textfield; /* 1 */
458 -moz-box-sizing: content-box;
459 -webkit-box-sizing: content-box; /* 2 */
460 box-sizing: content-box;
461}
462
463/*
464 * Removes inner padding and search cancel button in Safari 5 and Chrome
465 * on OS X.
466 */
467
468input[type="search"]::-webkit-search-cancel-button,
469input[type="search"]::-webkit-search-decoration {
470 -webkit-appearance: none;
471}
472
473/*
474 * Removes inner padding and border in Firefox 3+.
475 */
476
477button::-moz-focus-inner,
478input::-moz-focus-inner {
479 border: 0;
480 padding: 0;
481}
482
483/*
484 * 1. Removes default vertical scrollbar in IE 6/7/8/9.
485 * 2. Improves readability and alignment in all browsers.
486 */
487
488textarea {
489 overflow: auto; /* 1 */
490 vertical-align: top; /* 2 */
491}
492
493/* ==========================================================================
494 Tables
495 ========================================================================== */
496
497/*
498 * Remove most spacing between table cells.
499 */
500
501table {
502 border-collapse: collapse;
503 border-spacing: 0;
504}
  
1[HTML5 Boilerplate homepage](http://html5boilerplate.com)
2
3# HTML5 Boilerplate documentation:
4
5## Getting started
6
7* [Usage](usage.md) — Overview of the project contents.
8* [FAQ](faq.md) — Frequently asked questions, along with their answers.
9
10## The core of HTML5 Boilerplate
11
12* [HTML](html.md) — A guide to the default HTML.
13* [CSS](css.md) — A guide to the default CSS.
14* [JavaScript](js.md) — A guide to the default JavaScript.
15* [.htaccess](htaccess.md) — All about the Apache web server config (also see
16 our [alternative server configs](https://github.com/h5bp/server-configs)).
17* [crossdomain.xml](crossdomain.md) — An introduction to making use of
18 crossdomain requests.
19* [Everything else](misc.md).
20
21## Development
22
23* [Contributing to HTML5 Boilerplate](contribute.md) — Guidelines on how to
24 contribute effectively.
25* [Extending and customizing HTML5 Boilerplate](extend.md) — Going further with
26 the boilerplate.
27
28## Related projects
29
30HTML5 Boilerplate has several related projects to help improve the performance
31of your site/app in various production environments.
32
33* [Server configs](https://github.com/h5bp/server-configs) — Configs for
34 non-Apache servers.
35* [Node build script](https://github.com/h5bp/node-build-script) — A
36 feature-rich [grunt](https://github.com/cowboy/grunt) plugin.
37* [Ant build script](https://github.com/h5bp/ant-build-script) — The original
38 HTML5 Boilerplate build script.
  
1[HTML5 Boilerplate homepage](http://html5boilerplate.com) | [Documentation
2table of contents](README.md)
3
4# Contributing to HTML5 Boilerplate
5
6♥ HTML5 Boilerplate and want to get involved? Thanks! There are plenty of ways
7you can help!
8
9
10## Reporting issues
11
12A bug is a _demonstrable problem_ that is caused by the code in the
13repository.
14
15Please read the following guidelines before you [report an issue](https://github.com/h5bp/html5-boilerplate/issues/):
16
171. **Use the GitHub issue search** &mdash; check if the issue has already been
18 reported. If it has been, please comment on the existing issue.
19
202. **Check if the issue has been fixed** &mdash; the latest `master` or
21 development branch may already contain a fix.
22
233. **Isolate the demonstrable problem** &mdash; make sure that the code in the
24 project's repository is _definitely_ responsible for the issue. Create a
25 [reduced test case](http://css-tricks.com/6263-reduced-test-cases/) - an
26 extremely simple and immediately viewable example of the issue.
27
284. **Include a live example** &mdash; provide a link to your reduced test case
29 when appropriate (e.g. if the issue is related to (front-end technologies).
30 Please use [jsFiddle](http://jsfiddle.net) to host examples.
31
32Please try to be as detailed as possible in your report too. What is your
33environment? What steps will reproduce the issue? What browser(s) and OS
34experience the problem? What would you expect to be the outcome? All these
35details will help people to assess and fix any potential bugs.
36
37### Example of a good bug report:
38
39> Short and descriptive title
40>
41> A summary of the issue and the browser/OS environment in which it occurs. If
42> suitable, include the steps required to reproduce the bug.
43>
44> 1. This is the first step
45> 2. This is the second step
46> 3. Further steps, etc.
47>
48> `<url>` (a link to the reduced test case)
49>
50> Any other information you want to share that is relevant to the issue being
51> reported. This might include the lines of code that you have identified as
52> causing the bug, and potential solutions (and your opinions on their
53> merits).
54
55A good bug report shouldn't leave people needing to chase you up to get further
56information that is required to assess or fix the bug.
57
58**[File a bug report](https://github.com/h5bp/html5-boilerplate/issues/)**
59
60
61## Pull requests
62
63Good pull requests — patches, improvements, new features — are a fantastic
64help. They should remain focused in scope and avoid containing unrelated
65commits.
66
67If your contribution involves a significant amount of work or substantial
68changes to any part of the project, please open an issue to discuss it first.
69
70Please follow this process; it's the best way to get your work included in the
71project:
72
731. [Fork](http://help.github.com/fork-a-repo/) the project.
74
752. Clone your fork (`git clone
76 https://github.com/<your-username>/html5-boilerplate.git`).
77
783. Add an `upstream` remote (`git remote add upstream
79 https://github.com/h5bp/html5-boilerplate.git`).
80
814. Get the latest changes from upstream (e.g. `git pull upstream
82 <dev-branch>`).
83
845. Create a new topic branch to contain your feature, change, or fix (`git
85 checkout -b <topic-branch-name>`).
86
876. Make sure that your changes adhere to the current coding conventions used
88 throughout the project - indentation, accurate comments, etc. Please update
89 any documentation that is relevant to the change you are making.
90
917. Commit your changes in logical chunks; use git's [interactive
92 rebase](https://help.github.com/articles/interactive-rebase) feature to tidy
93 up your commits before making them public. Please adhere to these [git commit
94 message
95 guidelines](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html)
96 or your pull request is unlikely be merged into the main project.
97
988. Locally merge (or rebase) the upstream branch into your topic branch.
99
1009. Push your topic branch up to your fork (`git push origin
101 <topic-branch-name>`).
102
10310. [Open a Pull Request](http://help.github.com/send-pull-requests/) with a
104 clear title and description. Please mention which browsers you tested in.
  
1[HTML5 Boilerplate homepage](http://html5boilerplate.com) | [Documentation
2table of contents](README.md)
3
4# crossdomain.xml
5
6A cross-domain policy file is an XML document that grants a web client—such as
7Adobe Flash Player, Adobe Reader, etc., permission to handle data across
8multiple domains. When a client hosts content from a particular source domain
9and that content makes requests directed towards a domain other than its own,
10the remote domain would need to host a cross-domain policy file that grants
11access to the source domain, allowing the client to continue with the
12transaction. Policy files grant read access to data, permit a client to include
13custom headers in cross-domain requests, and are also used with sockets to
14grant permissions for socket-based connections.
15
16For full details, check out Adobe's article about the [cross-domain policy file
17specification](http://www.adobe.com/devnet/articles/crossdomain_policy_file_spec.html)
18
19Read the [Cross-domain policy file
20specification](http://learn.adobe.com/wiki/download/attachments/64389123/CrossDomain_PolicyFile_Specification.pdf?version=1)
21- (PDF, 129 KB)
doc/css.md
(135 / 0)
  
1[HTML5 Boilerplate homepage](http://html5boilerplate.com) | [Documentation
2table of contents](README.md)
3
4# The CSS
5
6The HTML5 Boilerplate starting CSS includes:
7
8* [Normalize.css](https://github.com/necolas/normalize.css).
9* Useful HTML5 Boilerplate defaults.
10* Common helpers.
11* Placeholder media queries.
12* Print styles.
13
14This starting CSS does not rely on the presence of conditional classnames,
15conditional style sheets, or Modernizr. It is ready to use whatever your
16development preferences happen to be.
17
18
19## Normalize.css
20
21Normalize.css is a modern, HTML5-ready alternative to CSS resets. It contains
22extensive inline documentation. Please refer to the [Normalize.css
23project](http://necolas.github.com/normalize.css/) for more information.
24
25
26## HTML5 Boilerplate defaults
27
28This project includes a handful of base styles that build upon Normalize.css.
29These include:
30
31* Basic typography settings to provide improved text readability by default.
32* Protection against unwanted `text-shadow` during text highlighting.
33* Tweaks to default image alignment, fieldsets, and textareas.
34* A pretty Chrome Frame prompt.
35
36You are free to modify or add to these base styles as your project requires.
37
38
39## Common helpers
40
41#### `.ir`
42
43Add the `.ir` class to any element you are applying image-replacement to. When
44replacing an element's content with an image, make sure to also set a specific
45`background-image: url(pathtoimage.png);`, `width`, and `height` so that your
46replacement image appears.
47
48#### `.hidden`
49
50Add the `.hidden` class to any elements that you want to hide from all
51presentations, including screen readers. It could be an element that will be
52populated later with JavaScript or an element you will hide with JavaScript. Do
53not use this for SEO keyword stuffing. That is just not cool.
54
55#### `.visuallyhidden`
56
57Add the `.visuallyhidden` class to hide text from browsers but make it
58available for screen readers. You can use this to hide text that is specific to
59screen readers but that other users should not see. [About invisible
60content](http://www.webaim.org/techniques/css/invisiblecontent/), [Hiding
61content for
62accessibility](http://snook.ca/archives/html_and_css/hiding-content-for-accessibility),
63[HTML5 Boilerplate
64issue/research](https://github.com/h5bp/html5-boilerplate/issues/194/).
65
66#### `.invisible`
67
68Add the `.invisible` class to any element you want to hide without affecting
69layout. When you use `display: none` an element is effectively removed from the
70layout. But in some cases you want the element to simply be invisible while
71remaining in the flow and not affecting the positioning of surrounding
72content.
73
74#### `.clearfix`
75
76Adding `.clearfix` to an element will ensure that it always fully contains its
77floated children. There have been many variants of the clearfix hack over the
78years, and there are other hacks that can also help you to contain floated
79children, but the HTML5 Boilerplate currently uses the [micro
80clearfix](http://nicolasgallagher.com/micro-clearfix-hack/).
81
82
83## Media Queries
84
85The boilerplate makes it easy to get started with a "Mobile First" and
86[Responsive Web
87Design](http://www.alistapart.com/articles/responsive-web-design/) approach to
88development. But it's worth remembering that there are [no silver
89bullets](http://www.cloudfour.com/css-media-query-for-mobile-is-fools-gold/).
90
91We include a placeholder Media Queries to build up your mobile styles for wider
92viewports and high-resolution displays. It's recommended that you adapt these
93Media Queries based on the content of your site rather than mirroring the fixed
94dimensions of specific devices.
95
96If you do not want to take a "Mobile First" approach, you can simply edit or
97remove these placeholder Media Queries. One possibility would be to work from
98wide viewports down and use `max-width` MQs instead, e.g., `@media only screen
99and (max-width: 480px)`.
100
101Take a look into the [Mobile
102Boilerplate](https://github.com/h5bp/mobile-boilerplate) for features that are
103useful when developing mobile wep apps.
104
105
106## Print styles
107
108* Print styles are inlined to [reduce the number of page
109 requests](http://www.phpied.com/delay-loading-your-print-css/).
110* We strip all background colors and change the font color to dark gray and
111 remove text-shadow. This is meant to help save printer ink.
112* Anchors do not need colors to indicate they are linked. They are underlined
113 to indicate so.
114* Anchors and Abbreviations are expanded to indicate where users reading the
115 printed page can refer to.
116* But we do not want to show link text for image replaced elements (given that
117 they are primarily images).
118
119### Paged media styles
120
121* Paged media is supported only in a [few
122 browsers](http://en.wikipedia.org/wiki/Comparison_of_layout_engines_%28Cascading_Style_Sheets%29#Grammar_and_rules).
123* Paged media support means browsers would know how to interpret instructions
124 on breaking content into pages and on orphans/widows.
125* We use `page-break-inside: avoid;` to prevent an image and table row from
126 being split into two different pages, so use the same `page-break-inside:
127 avoid;` for that as well.
128* Headings should always appear with the text they are titles for. So, we
129 ensure headings never appear in a different page than the text they describe
130 by using `page-break-after: avoid;`.
131* We also apply a default margin for the page specified in `cm`.
132* We do not want [orphans and
133 widows](http://en.wikipedia.org/wiki/Widows_and_orphans) to appear on pages
134 you print. So, by defining `orphans: 3` and `widows: 3` you define the minimal
135 number of words that every line should contain.
doc/extend.md
(507 / 0)
  
1[HTML5 Boilerplate homepage](http://html5boilerplate.com) | [Documentation
2table of contents](README.md)
3
4# Extend and customise HTML5 Boilerplate
5
6Here is some useful advice for how you can make your project with HTML5
7Boilerplate even better. We don't want to include it all by default, as not
8everything fits with everyone's needs.
9
10
11## DNS prefetching
12
13In short, DNS Prefetching is a method of informing the browser of domain names
14referenced on a site so that the client can resolve the DNS for those hosts,
15cache them, and when it comes time to use them, have a faster turn around on
16the request.
17
18### Implicit prefetches
19
20There is a lot of prefetching done for you automatically by the browser. When
21the browser encounters an anchor in your html that does not share the same
22domain name as the current location the browser requests, from the client OS,
23the IP address for this new domain. The client first checks its cache and
24then, lacking a cached copy, makes a request from a DNS server. These requests
25happen in the background and are not meant to block the rendering of the
26page.
27
28The goal of this is that when the foreign IP address is finally needed it will
29already be in the client cache and will not block the loading of the foreign
30content. Less requests result in faster page load times. The perception of this
31is increased on a mobile platform where DNS latency can be greater.
32
33#### Disable implicit prefetching
34
35```html
36<meta http-equiv="x-dns-prefetch-control" content="off">
37```
38
39Even with X-DNS-Prefetch-Control meta tag (or http header) browsers will still
40prefetch any explicit dns-prefetch links.
41
42**_WARNING:_** THIS MAY MAKE YOUR SITE SLOWER IF YOU RELY ON RESOURCES FROM
43FOREIGN DOMAINS.
44
45### Explicit prefetches
46
47Typically the browser only scans the HTML for foreign domains. If you have
48resources that are outside of your HTML (a javascript request to a remote
49server or a CDN that hosts content that may not be present on every page of
50your site, for example) then you can queue up a domain name to be prefetched.
51
52```html
53<link rel="dns-prefetch" href="//example.com">
54<link rel="dns-prefetch" href="//ajax.googleapis.com">
55```
56
57You can use as many of these as you need, but it's best if they are all
58immediately after the [Meta
59Charset](https://developer.mozilla.org/en/HTML/Element/meta#attr-charset)
60element (which should go right at the top of the `head`), so the browser can
61act on them ASAP.
62
63#### Common Prefetch Links
64
65Amazon S3:
66
67```html
68<link rel="dns-prefetch" href="//s3.amazonaws.com">
69```
70
71Google APIs:
72
73```html
74<link rel="dns-prefetch" href="//ajax.googleapis.com">
75```
76
77Microsoft Ajax Content Delivery Network:
78
79```html
80<link rel="dns-prefetch" href="//ajax.microsoft.com">
81<link rel="dns-prefetch" href="//ajax.aspnetcdn.com">
82```
83
84### Browser support for DNS prefetching
85
86Chrome, Firefox 3.5+, Safari 5+, Opera (Unknown), IE 9 (called "Pre-resolution"
87on blogs.msdn.com)
88
89### Further reading about DNS prefetching
90
91* https://developer.mozilla.org/En/Controlling_DNS_prefetching
92* http://dev.chromium.org/developers/design-documents/dns-prefetching
93* http://www.apple.com/safari/whats-new.html
94* http://blogs.msdn.com/b/ie/archive/2011/03/17/internet-explorer-9-network-performance-improvements.aspx
95* http://dayofjs.com/videos/22158462/web-browsers_alex-russel
96
97
98## Search
99
100### Direct search spiders to your sitemap
101
102[Learn how to make a sitemap](http://www.sitemaps.org/protocol.php)
103
104```html
105<link rel="sitemap" type="application/xml" title="Sitemap" href="/sitemap.xml">
106```
107
108### Hide pages from search engines
109
110According to Heather Champ, former community manager at Flickr, you should not
111allow search engines to index your "Contact Us" or "Complaints" page if you
112value your sanity. This is an HTML-centric way of achieving that.
113
114```html
115<meta name="robots" content="noindex">
116```
117
118**_WARNING:_** DO NOT INCLUDE ON PAGES THAT SHOULD APPEAR IN SEARCH ENGINES.
119
120### Firefox and IE Search Plugins
121
122Sites with in-site search functionality should be strongly considered for a
123browser search plugin. A "search plugin" is an XML file which defines how your
124plugin behaves in the browser. [How to make a browser search
125plugin](http://www.google.com/search?ie=UTF-8&q=how+to+make+browser+search+plugin).
126
127```html
128<link rel="search" title="" type="application/opensearchdescription+xml" href="">
129```
130
131
132## Internet Explorer
133
134### Prompt users to switch to "Desktop Mode" in IE10 Metro
135
136IE10 does not support plugins, such as Flash, in Metro mode. If your site
137requires plugins, you can let users know that via the X-UA-Compatible meta
138element, which will prompt them to switch to Desktop Mode.
139
140```html
141<meta http-equiv="X-UA-Compatible" content="requiresActiveX=true">
142```
143
144Here's what it looks like alongside H5BP's default X-UA-Compatible values:
145
146```html
147<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1,requiresActiveX=true">
148```
149
150You can find more information in [Microsoft's IEBlog post about prompting for
151plugin use in IE10 Metro
152Mode](http://blogs.msdn.com/b/ie/archive/2012/01/31/web-sites-and-a-plug-in-free-web.aspx).
153
154### IE Pinned Sites (IE9+)
155
156Enabling your application for pinning will allow IE9 users to add it to their
157Windows Taskbar and Start Menu. This comes with a range of new tools that you
158can easily configure with the elements below. See more [documentation on IE9
159Pinned Sites](http://msdn.microsoft.com/en-us/library/gg131029.aspx).
160
161### Name the Pinned Site for Windows
162
163Without this rule, Windows will use the page title as the name for your
164application.
165
166```html
167<meta name="application-name" content="Sample Title">
168```
169
170### Give your Pinned Site a tooltip
171
172You know — a tooltip. A little textbox that appears when the user holds their
173mouse over your Pinned Site's icon.
174
175```html
176<meta name="msapplication-tooltip" content="A description of what this site does.">
177```
178
179### Set a default page for your Pinned Site
180
181If the site should go to a specific URL when it is pinned (such as the
182homepage), enter it here. One idea is to send it to a special URL so you can
183track the number of pinned users, like so:
184`http://www.example.com/index.html?pinned=true`
185
186```html
187<meta name="msapplication-starturl" content="http://www.example.com/index.html?pinned=true">
188```
189
190### Recolor IE's controls manually for a Pinned Site
191
192IE9+ will automatically use the overall color of your Pinned Site's favicon to
193shade its browser buttons. UNLESS you give it another color here. Only use
194named colors (`red`) or hex colors (`#ff0000`).
195
196```html
197<meta name="msapplication-navbutton-color" content="#ff0000">
198```
199
200### Manually set the window size of a Pinned Site
201
202If the site should open at a certain window size once pinned, you can specify
203the dimensions here. It only supports static pixel dimensions. 800x600
204minimum.
205
206```html
207<meta name="msapplication-window" content="width=800;height=600">
208```
209
210### Jump List "Tasks" for Pinned Sites
211
212Add Jump List Tasks that will appear when the Pinned Site's icon gets a
213right-click. Each Task goes to the specified URL, and gets its own mini icon
214(essentially a favicon, a 16x16 .ICO). You can add as many of these as you
215need.
216
217```html
218<meta name="msapplication-task" content="name=Task 1;action-uri=http://host/Page1.html;icon-uri=http://host/icon1.ico">
219<meta name="msapplication-task" content="name=Task 2;action-uri=http://microsoft.com/Page2.html;icon-uri=http://host/icon2.ico">
220```
221
222### (Windows 8) High quality visuals for Pinned Sites
223
224Windows 8 adds the ability for you to provide a PNG tile image and specify the
225tile's background color. [Full details on the IE
226blog](http://blogs.msdn.com/b/ie/archive/2012/06/08/high-quality-visuals-for-pinned-sites-in-windows-8.aspx).
227
228* Create a 144x144 image of your site icon, filling all of the canvas, and
229 using a transparent background.
230* Save this image as a 32-bit PNG and optimize it without reducing
231 colour-depth. It can be named whatever you want (e.g. `metro-tile.png`).
232* To reference the tile and its color, add the HTML `meta` elements described
233 in the IE Blog post.
234
235### (Windows 8) Badges for Pinned Sites
236
237IE10 will poll an XML document for badge information to display on your app's
238tile in the Start screen. The user will be able to receive these badge updates
239even when your app isn't actively running. The badge's value can be a number,
240or one of a predefined list of glyphs.
241
242* [Tutorial on IEBlog with link to badge XML schema](http://blogs.msdn.com/b/ie/archive/2012/04/03/pinned-sites-in-windows-8.aspx)
243* [Available badge values](http://msdn.microsoft.com/en-us/library/ie/br212849.aspx)
244
245```html
246<meta name="msapplication-badge" value="frequency=NUMBER_IN_MINUTES;polling-uri=http://www.example.com/path/to/file.xml">
247```
248
249### Suppress IE6 image toolbar
250
251Kill IE6's pop-up-on-mouseover toolbar for images that can interfere with
252certain designs and be pretty distracting in general.
253
254```html
255<meta http-equiv="imagetoolbar" content="false">
256```
257
258
259## Social Networks
260
261### Facebook Open Graph data
262
263You can control the information that Facebook and others display when users
264share your site. Below are just the most basic data points you might need. For
265specific content types (including "website"), see [Facebook's built-in Open
266Graph content
267templates](https://developers.facebook.com/docs/opengraph/objects/builtin/).
268Take full advantage of Facebook's support for complex data and activity by
269following the [Open Graph
270tutorial](https://developers.facebook.com/docs/opengraph/tutorial/).
271
272```html
273<meta property="og:title" content="">
274<meta property="og:description" content="">
275<meta property="og:image" content="">
276```
277
278### Twitter Cards
279
280Twitter provides a snippet specification that serves a similar purpose to Open
281Graph. In fact, Twitter will use Open Graph when Cards is not available. Note
282that, as of this writing, Twitter requires that app developers activate Cards
283on a per-domain basis. You can read more about the various snippet formats
284and application process in the [official Twitter Cards
285documentation](https://dev.twitter.com/docs/cards).
286
287```html
288<meta name="twitter:card" content="summary">
289<meta name="twitter:site" content="@site_account">
290<meta name="twitter:creator" content="@individual_account">
291<meta name="twitter:url" content="http://www.example.com/path/to/page.html">
292<meta name="twitter:title" content="">
293<meta name="twitter:description" content="">
294<meta name="twitter:image" content="http://www.example.com/path/to/image.jpg">
295```
296
297
298## URLs
299
300### Canonical URL
301
302Signal to search engines and others "Use this URL for this page!" Useful when
303parameters after a `#` or `?` is used to control the display state of a page.
304`http://www.example.com/cart.html?shopping-cart-open=true` can be indexed as
305the cleaner, more accurate `http://www.example.com/cart.html`.
306
307```html
308<link rel="canonical" href="">
309```
310
311### Official shortlink
312
313Signal to the world "This is the shortened URL to use this page!" Poorly
314supported at this time. Learn more by reading the [article about shortlinks on
315the Microformats wiki](http://microformats.org/wiki/rel-shortlink).
316
317```html
318<link rel="shortlink" href="h5bp.com">
319```
320
321
322## News Feeds
323
324### RSS
325
326Have an RSS feed? Link to it here. Want to [learn how to write an RSS feed from
327scratch](http://www.rssboard.org/rss-specification)?
328
329```html
330<link rel="alternate" type="application/rss+xml" title="RSS" href="/rss.xml">
331```
332
333### Atom
334
335Atom is similar to RSS, and you might prefer to use it instead of or in
336addition to it. [See what Atom's all
337about](http://www.atomenabled.org/developers/syndication/).
338
339```html
340<link rel="alternate" type="application/atom+xml" title="Atom" href="/atom.xml">
341```
342
343### Pingbacks
344
345Your server may be notified when another site links to yours. The href
346attribute should contain the location of your pingback service.
347
348```html
349<link rel="pingback" href="">
350```
351
352* High-level explanation: http://codex.wordpress.org/Introduction_to_Blogging#Pingbacks
353* Step-by-step example case: http://www.hixie.ch/specs/pingback/pingback-1.0#TOC5
354* PHP pingback service: http://blog.perplexedlabs.com/2009/07/15/xmlrpc-pingbacks-using-php/
355
356
357## App Stores
358
359### Install a Chrome Web Store app
360
361Users can install a Chrome app directly from your website, as long as the app
362and site have been associated via Google's Webmaster Tools. Read more on
363[Chrome Web Store's Inline Installation
364docs](https://developers.google.com/chrome/web-store/docs/inline_installation).
365
366```html
367<link rel="chrome-webstore-item" href="https://chrome.google.com/webstore/detail/APP_ID">
368```
369
370### Smart App Banners in iOS 6 Safari
371
372Stop bothering everyone with gross modals advertising your entry in the App Store.
373This bit of code will unintrusively allow the user the option to download your iOS
374app, or open it with some data about the user's current state on the website.
375
376```html
377<meta name="apple-itunes-app" content="app-id=APP_ID,app-argument=SOME_TEXT">
378```
379
380## Google Analytics augments
381
382### More tracking settings
383
384The [optimized Google Analytics
385snippet](http://mathiasbynens.be/notes/async-analytics-snippet) included with
386HTML5 Boilerplate includes something like this:
387
388```js
389var _gaq = [['_setAccount', 'UA-XXXXX-X'], ['_trackPageview']];
390```
391
392In case you need more settings, just extend the array literal instead of
393[`.push()`ing to the
394array](http://mathiasbynens.be/notes/async-analytics-snippet#dont-push-it)
395afterwards:
396
397```js
398var _gaq = [['_setAccount', 'UA-XXXXX-X'], ['_trackPageview'], ['_setAllowAnchor', true]];
399```
400
401### Anonymize IP addresses
402
403In some countries, no personal data may be transferred outside jurisdictions
404that do not have similarly strict laws (i.e. from Germany to outside the EU).
405Thus a webmaster using the Google Analytics script may have to ensure that no
406personal (trackable) data is transferred to the US. You can do that with [the
407`_gat.anonymizeIp`
408option](http://code.google.com/apis/analytics/docs/gaJS/gaJSApi_gat.html#_gat._anonymizeIp).
409In use it looks like this:
410
411```js
412var _gaq = [['_setAccount', 'UA-XXXXX-X'], ['_gat._anonymizeIp'], ['_trackPageview']];
413```
414
415### Track jQuery AJAX requests in Google Analytics
416
417An article by @JangoSteve explains how to [track jQuery AJAX requests in Google
418Analytics](http://www.alfajango.com/blog/track-jquery-ajax-requests-in-google-analytics/).
419
420Add this to `plugins.js`:
421
422```js
423/*
424 * Log all jQuery AJAX requests to Google Analytics
425 * See: http://www.alfajango.com/blog/track-jquery-ajax-requests-in-google-analytics/
426 */
427if (typeof _gaq !== "undefined" && _gaq !== null) {
428 $(document).ajaxSend(function(event, xhr, settings){
429 _gaq.push(['_trackPageview', settings.url]);
430 });
431}
432```
433
434### Track JavaScript errors in Google Analytics
435
436Add this function after `_gaq` is defined:
437
438```js
439(function(window){
440 var undefined,
441 link = function (href) {
442 var a = window.document.createElement('a');
443 a.href = href;
444 return a;
445 };
446 window.onerror = function (message, file, row) {
447 var host = link(file).hostname;
448 _gaq.push([
449 '_trackEvent',
450 (host == window.location.hostname || host == undefined || host == '' ? '' : 'external ') + 'error',
451 message, file + ' LINE: ' + row, undefined, undefined, true
452 ]);
453 };
454}(window));
455```
456
457### Track page scroll
458
459Add this function after `_gaq` is defined:
460
461```js
462$(function(){
463 var isDuplicateScrollEvent,
464 scrollTimeStart = new Date,
465 $window = $(window),
466 $document = $(document),
467 scrollPercent;
468
469 $window.scroll(function() {
470 scrollPercent = Math.round(100 * ($window.height() + $window.scrollTop())/$document.height());
471 if (scrollPercent > 90 && !isDuplicateScrollEvent) { //page scrolled to 90%
472 isDuplicateScrollEvent = 1;
473 _gaq.push(['_trackEvent', 'scroll',
474 'Window: ' + $window.height() + 'px; Document: ' + $document.height() + 'px; Time: ' + Math.round((new Date - scrollTimeStart )/1000,1) + 's',
475 undefined, undefined, true
476 ]);
477 }
478 });
479});
480```
481
482
483## Miscellaneous
484
485* Use [HTML5
486 polyfills](https://github.com/Modernizr/Modernizr/wiki/HTML5-Cross-browser-Polyfills).
487
488* Use [Microformats](http://microformats.org/wiki/Main_Page) (via
489 [microdata](http://microformats.org/wiki/microdata)) for optimum search
490 results
491 [visibility](http://googlewebmastercentral.blogspot.com/2009/05/introducing-rich-snippets.html).
492
493* If you're building a web app you may want [native style momentum scrolling in
494 iOS5](http://johanbrook.com/browsers/native-momentum-scrolling-ios-5/) using
495 `-webkit-overflow-scrolling: touch`.
496
497* Avoid development/stage websites "leaking" into SERPs (search engine results
498 page) by [implementing X-Robots-tag
499 headers](https://github.com/h5bp/html5-boilerplate/issues/804).
500
501* Screen readers currently have less-than-stellar support for HTML5 but the JS
502 script [accessifyhtml5.js](https://github.com/yatil/accessifyhtml5.js) can
503 help increase accessibility by adding ARIA roles to HTML5 elements.
504
505
506*Many thanks to [Brian Blakely](https://github.com/brianblakely) for
507contributing much of this information.*
doc/faq.md
(77 / 0)
  
1[HTML5 Boilerplate homepage](http://html5boilerplate.com) | [Documentation
2table of contents](README.md)
3
4# Frequently asked questions
5
6### Why is the URL for jQuery without "http"?
7
8This is an intentional use of [protocol-relative
9URLs](http://paulirish.com/2010/the-protocol-relative-url/)
10
11**N.B.** Using a protocol-relative URL for files that exist on a CDN is
12problematic when you try to view your local files directly in the browser. The
13browser will attempt to fetch the file from your local file system. We
14recommend that you use a local server to test your pages (or Dropbox). This can
15be done using Python by running `python -m SimpleHTTPServer` from your local
16directory, using Ruby by installing and running
17[asdf](https://rubygems.org/gems/asdf), and by installing any one of XAMPP,
18MAMP, or WAMP.
19
20
21### Why don't you automatically load the latest version of jQuery from the Google CDN?
22
231. The latest version of jQuery may not be compatible with the existing
24 plugins/code on the site. Version updating should be an intentional
25 decision.
262. The latest version has a very short `max-age=3600` compares to the specific
27 version of `max-age=31536000`, which means you won't get the benefits of
28 long-term caching.
29
30
31### Why is the Google Analytics code at the bottom? Google recommends it be placed the `head`.
32
33The advantage to placing it in the `head` is that you will track a user's
34pageview even if they leave the page before it has been fully loaded. However,
35putting the code at the bottom keeps all the scripts together and reinforces
36that scripts at the bottom are the right move.
37
38
39### How can I integrate [Twitter Bootstrap](http://twitter.github.com/bootstrap/) with HTML5 Boilerplate?
40
41You can use [Initializr](http://initializr.com) to create a custom build that
42includes HTML5 Boilerplate with Twitter Bootstrap.
43
44Read more about how [HTML5 Boilerplate and Twitter Bootstrap complement each
45other](http://www.quora.com/Is-Bootstrap-a-complement-OR-an-alternative-to-HTML5-Boilerplate-or-viceversa/answer/Nicolas-Gallagher).
46
47
48### How do I prevent phone numbers looking twice as large and having a Skype highlight?
49
50If this is occurring, it is because a user has the Skype browser extension
51installed.
52
53Use the following CSS to prevent Skype from formatting the numbers on your
54page:
55
56```css
57span.skype_pnh_container {
58 display: none !important;
59}
60
61span.skype_pnh_print_container {
62 display: inline !important;
63}
64```
65
66
67### Do I need to upgrade my sites each time a new version of HTML5 Boilerplate is released?
68
69No. You don't normally replace the foundations of a house once it has been
70built. There is nothing stopping you from trying to work in the latest changes
71but you'll have to assess the costs/benefits of doing so.
72
73
74### Where can I get help for support questions?
75
76Please ask for help on
77[StackOverflow](http://stackoverflow.com/questions/tagged/html5boilerplate).
  
1[HTML5 Boilerplate homepage](http://html5boilerplate.com) | [Documentation
2table of contents](README.md)
3
4# .htaccess
5
6In Apache HTTP server, `.htaccess` (hypertext access) is the configuration file
7that allows for web server configuration. HTML5 Boilerplate includes a number
8of best practice server rules for making web pages fast and secure, these rules
9can be applied by configuring `.htaccess` file.
10
11**You'll want to have these modules enabled for optimum performance:**
12
13* `mod_setenvif.c` (setenvif_module)
14* `mod_headers.c` (headers_module)
15* `mod_deflate.c` (deflate_module)
16* `mod_filter.c` (filter_module)
17* `mod_expires.c` (expires_module)
18* `mod_rewrite.c` (rewrite_module)
19
20
21## On Windows
22
23You've got a couple of options that depend on how you installed Apache.
24
251. **WampServer**. This is by far the simplest option. If you have installed
26 WampServer just click on the icon in the task bar, hover over the Apache
27 section in the menu that comes up and then hover over the modules section.
28 You will be presented with a list of modules. Simply click on a module name
29 to enable it (or disable it if it is already enabled). A check mark next to
30 a module indicates that it is enabled. WampServer will automatically restart
31 the Apache service after you enable a module.
32
332. **Manually editing `httpd.conf`**. This assumes that you have manually
34 installed Apache. You will need to locate the `httpd.conf` file which is
35 normally in the `conf` folder in the folder where you installed Apache (for
36 example `C:\apache\conf\httpd.conf`). Open up this file in a text editor. Near
37 the top (after a bunch of comments) you will see a long list of modules. Check
38 to make sure that the modules listed above are not commented out. If they
39 are, go ahead and uncomment them and restart Apache.
40
41That's it, you're done!
42
43
44## On Linux
45
46These instructions should work on any distribution where `apt-get` has been
47used to install Apache.
48
491. Open up a terminal and type the following command. Enter your password when
50 prompted.
51
52 `sudo a2enmod setenvif headers deflate filter expires rewrite include`
53
541. Restart apache by using the following command so the new configuration takes
55 effect.
56
57 `sudo /etc/init.d/apache2 restart`
58
59That's it, you're done!
60
61
62## On Mac
63
64Coming soon...
65
66
67## Security
68
69Do not turn off your ServerSignature (i.e., the `Server:` HTTP header). Serious
70attackers can use other kinds of fingerprinting methods to figure out the
71actual server and components running behind a port. Instead, as a site owner,
72you should keep track of what's listening on ports on hosts that you control.
73Run a periodic scanner to make sure nothing suspicious is running on a host you
74control, and use the ServerSignature to determine if this is the web server and
75version that you expect.
76
77
78## Performance
79
80### Configure ETags
81
82```apache
83FileETag None
84```
85
86Entity tags (ETags) is a mechanism that web servers and browsers use to
87determine whether the component in the browser's cache matches the one on the
88origin server. (An "entity" is another word a "component": images, scripts,
89stylesheets, etc.) ETags were added to provide a mechanism for validating
90entities that is more flexible than the last-modified date. An `ETag` is a
91string that uniquely identifies a specific version of a component. The only
92format constraints are that the string be quoted. The origin server specifies
93the component's `ETag` using the `ETag` response header.
94
95```http
96HTTP/1.1 200 OK
97Last-Modified: Tue, 12 Dec 2006 03:03:59 GMT
98ETag: "10c24bc-4ab-457e1c1f"
99Content-Length: 12195
100```
101
102Later, if the browser has to validate a component, it uses the `If-None-Match`
103header to pass the `ETag` back to the origin server. If the ETags match, a 304
104status code is returned reducing the response by 12195 bytes for this
105example.
106
107```http
108GET /i/yahoo.gif HTTP/1.1
109Host: us.yimg.com
110If-Modified-Since: Tue, 12 Dec 2006 03:03:59 GMT
111If-None-Match: "10c24bc-4ab-457e1c1f"
112HTTP/1.1 304 Not Modified
113```
114
115The problem with ETags is that they typically are constructed using attributes
116that make them unique to a specific server hosting a site. ETags won't match
117when a browser gets the original component from one server and later tries to
118validate that component on a different server, a situation that is all too
119common on web sites that use a cluster of servers to handle requests. By
120default, both Apache and IIS embed data in the ETag that dramatically reduces
121the odds of the validity test succeeding on web sites with multiple servers.
122
123The ETag format for Apache 1.3 and 2.x is inode-size-timestamp. Although a
124given file may reside in the same directory across multiple servers, and have
125the same file size, permissions, timestamp, etc., its inode is different from
126one server to the next.
127
128IIS 5.0 and 6.0 have a similar issue with ETags. The format for ETags on IIS is
129Filetimestamp:ChangeNumber. A ChangeNumber is a counter used to track
130configuration changes to IIS. It's unlikely that the ChangeNumber is the same
131across all IIS servers behind a web site.
132
133The end result is ETags generated by Apache and IIS for the exact same
134component won't match from one server to another. If the ETags don't match, the
135user doesn't receive the small, fast 304 response that ETags were designed for;
136instead, they'll get a normal 200 response along with all the data for the
137component. If you host your web site on just one server, this isn't a problem.
138But if you have multiple servers hosting your web site, and you're using Apache
139or IIS with the default ETag configuration, your users are getting slower
140pages, your servers have a higher load, you're consuming greater bandwidth, and
141proxies aren't caching your content efficiently. Even if your components have a
142far future Expires header, a conditional GET request is still made whenever the
143user hits Reload or Refresh.
144
145If you're not taking advantage of the flexible validation model that ETags
146provide, it's better to just remove the ETag altogether. The Last-Modified
147header validates based on the component's timestamp. And removing the ETag
148reduces the size of the HTTP headers in both the response and subsequent
149requests. This Microsoft Support article describes how to remove ETags. In
150Apache, this is done by simply adding the above line to your Apache
151configuration file.
152
153
154### Gzip Components
155
156Compression reduces response times by reducing the size of the HTTP response.
157
158Starting with HTTP/1.1, web clients indicate support for compression with the
159Accept-Encoding header in the HTTP request.
160
161```
162Accept-Encoding: gzip, deflate
163```
164
165If the web server sees this header in the request, it may compress the response
166using one of the methods listed by the client. The web server notifies the web
167client of this via the Content-Encoding header in the response.
168
169```
170Content-Encoding: gzip
171```
172
173Gzip is the most popular and effective compression method at this time. It was
174developed by the GNU project and standardized by RFC 1952. The only other
175compression format you're likely to see is deflate, but it's less effective and
176less popular.
177
178Gzipping generally reduces the response size by about 70%. Approximately 90% of
179today's Internet traffic travels through browsers that claim to support gzip.
180If you use Apache, the module configuring gzip depends on your version: Apache
1811.3 uses `mod_gzip` while Apache 2.x uses `mod_deflate`.
182
183There are known issues with browsers and proxies that may cause a mismatch in
184what the browser expects and what it receives with regard to compressed
185content. Fortunately, these edge cases are dwindling as the use of older
186browsers drops off. The Apache modules help out by adding appropriate Vary
187response headers automatically.
188
189Servers choose what to gzip based on file type, but are typically too limited
190in what they decide to compress. Most web sites gzip their HTML documents. It's
191also worthwhile to gzip your scripts and stylesheets, but many web sites miss
192this opportunity. In fact, it's worthwhile to compress any text response
193including XML and JSON. Image and PDF files should not be gzipped because they
194are already compressed. Trying to gzip them not only wastes CPU but can
195potentially increase file sizes.
196
197Gzipping as many appropriate file types as possible is an easy way to reduce
198page weight and accelerate the user experience.
199
200
201### Cache busting
202
203A first-time visitor to your page may have to make several HTTP requests, but
204by using the Expires header you make those components cacheable. This avoids
205unnecessary HTTP requests on subsequent page views. Expires headers are most
206often used with images, but they should be used on all components including
207scripts, stylesheets, etc.
208
209Traditionally, if you use a far future Expires header you have to change the
210component's filename whenever the component changes.
211
212The H5BP `.htaccess` has built-in filename cache busting. To use it, uncomment
213the relevant lines in the `.htaccess` file.
214
215Doing so will route all requests for `/path/filename.20120101.ext` to
216`/path/filename.ext`. To use this, just add a time-stamp number (or your own
217numbered versioning system) into your resource filenames in your HTML source
218whenever you update those resources.
219
220#### Example:
221
222```html
223<script src="/js/myscript.20120305.js"></script>
224<script src="/js/jqueryplugin.45.js"></script>
225<link rel="stylesheet" href="css/somestyle.49559939932.css">
226<link rel="stylesheet" href="css/anotherstyle.2.css">
227```
228
229**N.B. You do not have to rename the resource on the filesystem.** All you have
230to do is add the timestamp number to the filename in your HTML source. The
231`.htaccess` directive will serve up the proper file.
232
233Traditional cache busting involved adding a query string to the end of your
234JavaScript or CSS filename whenever you updated it.
235
236```html
237<script src="/js/all.js?v=12"></script>
238```
239
240However, as [Steve Souders](http://stevesouders.com/) explains in [*Revving
241Filenames: don’t use
242querystring*](http://www.stevesouders.com/blog/2008/08/23/revving-filenames-dont-use-querystring/),
243the query string approach is not always reliable for clients behind a Squid
244Proxy Server.
245
246
247## Trailing slash redirects
248
249Trailing slash redirects can be done by adding one of the options below in `.htaccess`.
250
251### Option 1
252Rewrite `domain.com/foo` -> `domain.com/foo/`.
253
254```apache
255RewriteCond %{REQUEST_FILENAME} !-f
256RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/|#(.*))$
257RewriteRule ^(.*)$ $1/ [R=301,L]
258```
259
260### Option 2
261Rewrite `domain.com/foo/` -> `domain.com/foo`
262
263```apache
264RewriteRule ^(.*)/$ $1 [R=301,L]
265```
266
267Here are some tips to show you how to integrate the rewrite rules with
268different CMS tools. There are four areas you need to look out for:
269
270### 1. Keep a backup
271
272If you use trailing slash redirects on an existing site, always keep a backup
273of your `.htaccess` and test thoroughly on your staging server before using it on
274a production server.
275
276### 2. Don't replace existing rules, merge
277
278For example, if you use CodeIgniter you may have existing URL rewrite rules like:
279
280```apache
281RewriteCond %{REQUEST_FILENAME} !-f
282RewriteCond %{REQUEST_FILENAME} !-d
283RewriteRule ^(.*)$ index.php/$1
284```
285
286Merge the above with H5BP rules below:
287
288```apache
289RewriteCond %{REQUEST_FILENAME} !-f
290RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/|#(.*))$
291RewriteRule ^(.*)$ $1/ [R=301,L]
292```
293
294### 3. Be careful of the order
295
296Make sure you test thoroughly in your staging environment. For the above
297example, the order is add trailing slash first, and add your existing rule
298after:
299
300```apache
301# this adds trailing slash
302RewriteCond %{REQUEST_FILENAME} !-f
303RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/|#(.*))$
304RewriteRule ^(.*)$ $1/ [R=301,L]
305
306# this gets rid of index.php
307RewriteCond %{REQUEST_FILENAME} !-f
308RewriteCond %{REQUEST_FILENAME} !-d
309RewriteRule ^(.*)$ index.php/$1
310```
311
312### 4. Double-check `RewriteBase` path is correct
313
314Make sure your `RewriteBase` path points to the correct location and sits above
315any rewrite rules. This usually happens to those have WordPress and ran the
316auto install. For instance, if you have a site at `example.com/blog`, your
317RewriteBase may look like:
318
319```apache
320RewriteBase /blog/
321```
322
323If you already have a working RewriteBase, keep that and don't remove it.
doc/html.md
(170 / 0)
  
1[HTML5 Boilerplate homepage](http://html5boilerplate.com) | [Documentation
2table of contents](README.md)
3
4# The HTML
5
6## Conditional `html` classes
7
8A series of IE conditional comments apply the relevant IE-specific classes to
9the `html` tag. This provides one method of specifying CSS fixes for specific
10legacy versions of IE. While you may or may not choose to use this technique in
11your project code, HTML5 Boilerplate's default CSS does not rely on it.
12
13When using the conditional classes technique, applying classes to the `html`
14element has several benefits:
15
16* It avoids a [file blocking
17 issue](http://webforscher.wordpress.com/2010/05/20/ie-6-slowing-down-ie-8/)
18 discovered by Stoyan Stefanov and Markus Leptien.
19* It avoids the need for an empty comment that also fixes the above issue.
20* CMSes like WordPress and Drupal use the body class more heavily. This makes
21 integrating there a touch simpler.
22* It still validates as HTML5.
23* It uses the same element as Modernizr (and Dojo). That feels nice.
24* It can improve the clarity of code in multi-developer teams.
25
26
27## The `no-js` class
28
29Allows you to more easily explicitly add custom styles when JavaScript is
30disabled (`no-js`) or enabled (`js`). More here: [Avoiding the
31FOUC](http://paulirish.com/2009/avoiding-the-fouc-v3/).
32
33
34## The order of meta tags, and `<title>`
35
36As recommended by [the HTML5
37spec](http://www.whatwg.org/specs/web-apps/current-work/complete/semantics.html#charset)
38(4.2.5.5 Specifying the document's character encoding), add your charset
39declaration early (before any ASCII art ;) to avoid a potential
40[encoding-related security
41issue](http://code.google.com/p/doctype/wiki/ArticleUtf7) in IE. It should come
42in the first [1024
43bytes](http://www.whatwg.org/specs/web-apps/current-work/multipage/semantics.html#charset).
44
45The charset should also come before the `<title>` tag, due to [potential XSS
46vectors](http://code.google.com/p/doctype-mirror/wiki/ArticleUtf7).
47
48The meta tag for compatibility mode [needs to be before all elements except
49title and meta](http://h5bp.com/f "Defining Document Compatibility - MSDN").
50And that same meta tag can only be invoked for Google Chrome Frame if it is
51within the [first 1024
52bytes](http://code.google.com/p/chromium/issues/detail?id=23003).
53
54
55## X-UA-Compatible
56
57This makes sure the latest version of IE is used in versions of IE that contain
58multiple rendering engines. Even if a site visitor is using IE8 or IE9, it's
59possible that they're not using the latest rendering engine their browser
60contains. To fix this, use:
61
62```html
63<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
64```
65
66The `meta` tag tells the IE rendering engine two things:
67
681. It should use the latest, or edge, version of the IE rendering environment
692. If already installed, it should use the Google Chrome Frame rendering
70 engine.
71
72This `meta` tag ensures that anyone browsing your site in IE is treated to the
73best possible user experience that their browser can offer.
74
75This line breaks validation, and the Google Chrome Frame part won't work inside
76a conditional comment. To avoid these edge case issues it is recommended that
77you **remove this line and use the `.htaccess`** (or other server config)
78to send these headers instead. You also might want to read [Validating:
79X-UA-Compatible](http://groups.google.com/group/html5boilerplate/browse_thread/thread/6d1b6b152aca8ed2).
80
81If you are serving your site on a non-standard port, you will need to set this
82header on the server-side. This is because the IE preference option 'Display
83intranet sites in Compatibility View' is checked by default.
84
85
86## Mobile viewport
87
88There are a few different options that you can use with the [`viewport` meta
89tag](https://docs.google.com/present/view?id=dkx3qtm_22dxsrgcf4 "Viewport and
90Media Queries - The Complete Idiot's Guide"). You can find out more in [the
91Apple developer docs](http://j.mp/mobileviewport). HTML5 Boilerplate comes with
92a simple setup that strikes a good balance for general use cases.
93
94```html
95<meta name="viewport" content="width=device-width">
96```
97
98## Favicons and Touch Icons
99
100The shortcut icons should be put in the root directory of your site. HTML5
101Boilerplate comes with a default set of icons (include favicon and Apple Touch
102Icons) that you can use as a baseline to create your own.
103
104If your site or icons are in a sub-directory, you will need to reference the
105icons using `link` elements placed in the HTML `head` of your document.
106
107For a comprehensive overview, please read [Everything you always wanted to know
108about touch icons](http://mathiasbynens.be/notes/touch-icons) by Mathias
109Bynens.
110
111
112## Modernizr
113
114HTML5 Boilerplate uses a custom build of Modernizr.
115
116[Modernizr](http://modernizr.com) is a JavaScript library which adds classes to
117the `html` element based on the results of feature test and which ensures that
118all browsers can make use of HTML5 elements (as it includes the HTML5 Shiv).
119This allows you to target parts of your CSS and JavaScript based on the
120features supported by a browser.
121
122In general, in order to keep page load times to a minimum, it's best to call
123any JavaScript at the end of the page because if a script is slow to load
124from an external server it may cause the whole page to hang. That said, the
125Modernizr script *needs* to run *before* the browser begins rendering the page,
126so that browsers lacking support for some of the new HTML5 elements are able to
127handle them properly. Therefore the Modernizr script is the only JavaScript
128file synchronously loaded at the top of the document.
129
130
131## The content area
132
133The central part of the boilerplate template is pretty much empty. This is
134intentional, in order to make the boilerplate suitable for both web page and
135web app development.
136
137### Google Chrome Frame
138
139The main content area of the boilerplate includes a prompt to install Chrome
140Frame (which no longer requires administrative rights) for users of IE 6. If
141you intended to support IE 6, then you should remove the snippet of code.
142
143### Google CDN for jQuery
144
145The Google CDN version of the jQuery JavaScript library is referenced towards
146the bottom of the page using a protocol-independent path (read more about this
147in the [FAQ](faq.md). A local fallback of jQuery is included for rare instances
148when the CDN version might not be available, and to facilitate offline
149development.
150
151Regardless of which JavaScript library you choose to use, it is well worth the
152time and effort to look up and reference the Google CDN (Content Delivery
153Network) version. Your users may already have this version cached in their
154browsers, and Google's CDN is likely to deliver the asset faster than your
155server.
156
157### Google Analytics Tracking Code
158
159Finally, an optimized version of the latest Google Analytics tracking code is
160included. Google recommends that this script be placed at the top of the page.
161Factors to consider: if you place this script at the top of the page, you’ll be
162able to count users who don’t fully load the page, and you’ll incur the max
163number of simultaneous connections of the browser.
164
165Further information:
166
167* [Optimizing the asynchronous Google Analytics
168 snippet](http://mathiasbynens.be/notes/async-analytics-snippet).
169* [Tracking Site Activity - Google
170 Analytics](http://code.google.com/apis/analytics/docs/tracking/asyncTracking.html).
doc/js.md
(31 / 0)
  
1[HTML5 Boilerplate homepage](http://html5boilerplate.com) | [Documentation
2table of contents](README.md)
3
4# The JavaScript
5
6Information about the default JavaScript included in the project.
7
8## main.js
9
10This file can be used to contain or reference your site/app JavaScript code.
11For larger projects, you can make use of a JavaScript module loader, like
12[Require.js](http://requirejs.org/), to load any other scripts you need to
13run.
14
15## plugins.js
16
17This file can be used to contain all your plugins, such as jQuery plugins and
18other 3rd party scripts.
19
20One approach is to put jQuery plugins inside of a `(function($){ ...
21})(jQuery);` closure to make sure they're in the jQuery namespace safety
22blanket. Read more about [jQuery plugin
23authoring](http://docs.jquery.com/Plugins/Authoring#Getting_Started)
24
25## vendor
26
27This directory can be used to contain all 3rd party library code.
28
29Minified versions of the latest jQuery and Modernizr libraries are included by
30default. You may wish to create your own [custom Modernizr
31build](http://www.modernizr.com/download/).
doc/misc.md
(25 / 0)
  
1[HTML5 Boilerplate homepage](http://html5boilerplate.com) | [Documentation table of contents](README.md)
2
3# Miscellaneous
4
5## .gitignore
6
7HTML5 Boilerplate includes a basic project-level `.gitignore`. This should
8primarily be used to avoid certain project-level files and directories from
9being kept under source control. Different development-environments will
10benefit from different collections of ignores.
11
12OS-specific and editor-specific files should be ignored using a "global
13ignore" that applies to all repositories on your system.
14
15For example, add the following to your `~/.gitconfig`, where the `.gitignore`
16in your HOME directory contains the files and directories you'd like to
17globally ignore:
18
19```gitignore
20[core]
21 excludesfile = ~/.gitignore
22```
23
24* More on global ignores: http://help.github.com/ignore-files/
25* Comprehensive set of ignores on GitHub: https://github.com/github/gitignore
doc/usage.md
(109 / 0)
  
1[HTML5 Boilerplate homepage](http://html5boilerplate.com) | [Documentation
2table of contents](README.md)
3
4# Usage
5
6Once you have cloned or downloaded HTML5 Boilerplate, creating a site or app
7usually involves the following:
8
91. Set up the basic structure of the site.
102. Add some content, style, and functionality.
113. Run your site locally to see how it looks.
124. (Optionally run a build script to automate the optimization of your site -
13 e.g. [ant build script](https://github.com/h5bp/ant-build-script) or [node
14 build script](https://github.com/h5bp/node-build-script)).
155. Deploy your site.
16
17
18## Basic structure
19
20A basic HTML5 Boilerplate site initially looks something like this:
21
22```
23.
24├── css
25│ ├── main.css
26│ └── normalize.css
27├── doc
28├── img
29├── js
30│ ├── main.js
31│ ├── plugins.js
32│ └── vendor
33│ ├── jquery.min.js
34│ └── modernizr.min.js
35├── .htaccess
36├── 404.html
37├── index.html
38├── humans.txt
39├── robots.txt
40├── crossdomain.xml
41├── favicon.ico
42└── [apple-touch-icons]
43```
44
45What follows is a general overview of each major part and how to use them.
46
47### css
48
49This directory should contain all your project's CSS files. It includes some
50initial CSS to help get you started from a solid foundation. [About the
51CSS](css.md).
52
53### doc
54
55This directory contains all the HTML5 Boilerplate documentation. You can use it
56as the location and basis for your own project's documentation.
57
58### js
59
60This directory should contain all your project's JS files. Libraries, plugins,
61and custom code can all be included here. It includes some initial JS to help
62get you started. [About the JavaScript](js.md).
63
64### .htaccess
65
66The default web server config is for Apache. [About the .htaccess](htaccess.md).
67
68Host your site on a server other than Apache? You're likely to find the
69corresponding configuration file in our [server configs
70repo](https://github.com/h5bp/server-configs). If you cannot find a
71configuration file for your setup, please consider contributing one so that
72others can benefit too.
73
74### 404.html
75
76A helpful custom 404 to get you started.
77
78### index.html
79
80This is the default HTML skeleton that should form the basis of all pages on
81your site. If you are using a server-side templating framework, then you will
82need to integrate this starting HTML with your setup.
83
84Make sure that you update the URLs for the referenced CSS and JavaScript if you
85modify the directory structure at all.
86
87If you are using Google Analytics, make sure that you edit the corresponding
88snippet at the bottom to include your analytics ID.
89
90### humans.txt
91
92Edit this file to include the team that worked on your site/app, and the
93technology powering it.
94
95### robots.txt
96
97Edit this file to include any pages you need hidden from search engines.
98
99### crossdomain.xml
100
101A template for working with cross-domain requests. [About
102crossdomain.xml](crossdomain.md).
103
104### icons
105
106Replace the default `favicon.ico` and apple touch icons with your own. You
107might want to check out Hans Christian's handy [HTML5 Boilerplate Favicon and
108Apple Touch Icon
109PSD-Template](http://drublic.de/blog/html5-boilerplate-favicons-psd-template/).
humans.txt
(15 / 0)
  
1# humanstxt.org/
2# The humans responsible & technology colophon
3
4# TEAM
5
6 <name> -- <role> -- <twitter>
7
8# THANKS
9
10 <name>
11
12# TECHNOLOGY COLOPHON
13
14 HTML5, CSS3
15 jQuery, Modernizr
index.html
(40 / 0)
  
1<!DOCTYPE html>
2<!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
3<!--[if IE 7]> <html class="no-js lt-ie9 lt-ie8"> <![endif]-->
4<!--[if IE 8]> <html class="no-js lt-ie9"> <![endif]-->
5<!--[if gt IE 8]><!--> <html class="no-js"> <!--<![endif]-->
6 <head>
7 <meta charset="utf-8">
8 <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
9 <title></title>
10 <meta name="description" content="">
11 <meta name="viewport" content="width=device-width">
12
13 <!-- Place favicon.ico and apple-touch-icon.png in the root directory -->
14
15 <link rel="stylesheet" href="css/normalize.css">
16 <link rel="stylesheet" href="css/main.css">
17 <script src="js/vendor/modernizr-2.6.1.min.js"></script>
18 </head>
19 <body>
20 <!--[if lt IE 7]>
21 <p class="chromeframe">You are using an outdated browser. <a href="http://browsehappy.com/">Upgrade your browser today</a> or <a href="http://www.google.com/chromeframe/?redirect=true">install Google Chrome Frame</a> to better experience this site.</p>
22 <![endif]-->
23
24 <!-- Add your site or application content here -->
25 <p>Hello world! This is HTML5 Boilerplate.</p>
26
27 <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"></script>
28 <script>window.jQuery || document.write('<script src="js/vendor/jquery-1.8.0.min.js"><\/script>')</script>
29 <script src="js/plugins.js"></script>
30 <script src="js/main.js"></script>
31
32 <!-- Google Analytics: change UA-XXXXX-X to be your site's ID. -->
33 <script>
34 var _gaq=[['_setAccount','UA-XXXXX-X'],['_trackPageview']];
35 (function(d,t){var g=d.createElement(t),s=d.getElementsByTagName(t)[0];
36 g.src=('https:'==location.protocol?'//ssl':'//www')+'.google-analytics.com/ga.js';
37 s.parentNode.insertBefore(g,s)}(document,'script'));
38 </script>
39 </body>
40</html>
  
1// Avoid `console` errors in browsers that lack a console.
2if (!(window.console && console.log)) {
3 (function() {
4 var noop = function() {};
5 var methods = ['assert', 'clear', 'count', 'debug', 'dir', 'dirxml', 'error', 'exception', 'group', 'groupCollapsed', 'groupEnd', 'info', 'log', 'markTimeline', 'profile', 'profileEnd', 'markTimeline', 'table', 'time', 'timeEnd', 'timeStamp', 'trace', 'warn'];
6 var length = methods.length;
7 var console = window.console = {};
8 while (length--) {
9 console[methods[length]] = noop;
10 }
11 }());
12}
13
14// Place any jQuery/helper plugins in here.
  
1/*! jQuery v@1.8.0 jquery.com | jquery.org/license */
2(function(a,b){function G(a){var b=F[a]={};return p.each(a.split(s),function(a,c){b[c]=!0}),b}function J(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(I,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:+d+""===d?+d:H.test(d)?p.parseJSON(d):d}catch(f){}p.data(a,c,d)}else d=b}return d}function K(a){var b;for(b in a){if(b==="data"&&p.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function ba(){return!1}function bb(){return!0}function bh(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function bi(a,b){do a=a[b];while(a&&a.nodeType!==1);return a}function bj(a,b,c){b=b||0;if(p.isFunction(b))return p.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return p.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=p.grep(a,function(a){return a.nodeType===1});if(be.test(b))return p.filter(b,d,!c);b=p.filter(b,d)}return p.grep(a,function(a,d){return p.inArray(a,b)>=0===c})}function bk(a){var b=bl.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function bC(a,b){return a.getElementsByTagName(b)[0]||a.appendChild(a.ownerDocument.createElement(b))}function bD(a,b){if(b.nodeType!==1||!p.hasData(a))return;var c,d,e,f=p._data(a),g=p._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;d<e;d++)p.event.add(b,c,h[c][d])}g.data&&(g.data=p.extend({},g.data))}function bE(a,b){var c;if(b.nodeType!==1)return;b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase(),c==="object"?(b.parentNode&&(b.outerHTML=a.outerHTML),p.support.html5Clone&&a.innerHTML&&!p.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):c==="input"&&bv.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):c==="option"?b.selected=a.defaultSelected:c==="input"||c==="textarea"?b.defaultValue=a.defaultValue:c==="script"&&b.text!==a.text&&(b.text=a.text),b.removeAttribute(p.expando)}function bF(a){return typeof a.getElementsByTagName!="undefined"?a.getElementsByTagName("*"):typeof a.querySelectorAll!="undefined"?a.querySelectorAll("*"):[]}function bG(a){bv.test(a.type)&&(a.defaultChecked=a.checked)}function bX(a,b){if(b in a)return b;var c=b.charAt(0).toUpperCase()+b.slice(1),d=b,e=bV.length;while(e--){b=bV[e]+c;if(b in a)return b}return d}function bY(a,b){return a=b||a,p.css(a,"display")==="none"||!p.contains(a.ownerDocument,a)}function bZ(a,b){var c,d,e=[],f=0,g=a.length;for(;f<g;f++){c=a[f];if(!c.style)continue;e[f]=p._data(c,"olddisplay"),b?(!e[f]&&c.style.display==="none"&&(c.style.display=""),c.style.display===""&&bY(c)&&(e[f]=p._data(c,"olddisplay",cb(c.nodeName)))):(d=bH(c,"display"),!e[f]&&d!=="none"&&p._data(c,"olddisplay",d))}for(f=0;f<g;f++){c=a[f];if(!c.style)continue;if(!b||c.style.display==="none"||c.style.display==="")c.style.display=b?e[f]||"":"none"}return a}function b$(a,b,c){var d=bO.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function b_(a,b,c,d){var e=c===(d?"border":"content")?4:b==="width"?1:0,f=0;for(;e<4;e+=2)c==="margin"&&(f+=p.css(a,c+bU[e],!0)),d?(c==="content"&&(f-=parseFloat(bH(a,"padding"+bU[e]))||0),c!=="margin"&&(f-=parseFloat(bH(a,"border"+bU[e]+"Width"))||0)):(f+=parseFloat(bH(a,"padding"+bU[e]))||0,c!=="padding"&&(f+=parseFloat(bH(a,"border"+bU[e]+"Width"))||0));return f}function ca(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=!0,f=p.support.boxSizing&&p.css(a,"boxSizing")==="border-box";if(d<=0){d=bH(a,b);if(d<0||d==null)d=a.style[b];if(bP.test(d))return d;e=f&&(p.support.boxSizingReliable||d===a.style[b]),d=parseFloat(d)||0}return d+b_(a,b,c||(f?"border":"content"),e)+"px"}function cb(a){if(bR[a])return bR[a];var b=p("<"+a+">").appendTo(e.body),c=b.css("display");b.remove();if(c==="none"||c===""){bI=e.body.appendChild(bI||p.extend(e.createElement("iframe"),{frameBorder:0,width:0,height:0}));if(!bJ||!bI.createElement)bJ=(bI.contentWindow||bI.contentDocument).document,bJ.write("<!doctype html><html><body>"),bJ.close();b=bJ.body.appendChild(bJ.createElement(a)),c=bH(b,"display"),e.body.removeChild(bI)}return bR[a]=c,c}function ch(a,b,c,d){var e;if(p.isArray(b))p.each(b,function(b,e){c||cd.test(a)?d(a,e):ch(a+"["+(typeof e=="object"?b:"")+"]",e,c,d)});else if(!c&&p.type(b)==="object")for(e in b)ch(a+"["+e+"]",b[e],c,d);else d(a,b)}function cy(a){return function(b,c){typeof b!="string"&&(c=b,b="*");var d,e,f,g=b.toLowerCase().split(s),h=0,i=g.length;if(p.isFunction(c))for(;h<i;h++)d=g[h],f=/^\+/.test(d),f&&(d=d.substr(1)||"*"),e=a[d]=a[d]||[],e[f?"unshift":"push"](c)}}function cz(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h,i=a[f],j=0,k=i?i.length:0,l=a===cu;for(;j<k&&(l||!h);j++)h=i[j](c,d,e),typeof h=="string"&&(!l||g[h]?h=b:(c.dataTypes.unshift(h),h=cz(a,c,d,e,h,g)));return(l||!h)&&!g["*"]&&(h=cz(a,c,d,e,"*",g)),h}function cA(a,c){var d,e,f=p.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((f[d]?a:e||(e={}))[d]=c[d]);e&&p.extend(!0,a,e)}function cB(a,c,d){var e,f,g,h,i=a.contents,j=a.dataTypes,k=a.responseFields;for(f in k)f in d&&(c[k[f]]=d[f]);while(j[0]==="*")j.shift(),e===b&&(e=a.mimeType||c.getResponseHeader("content-type"));if(e)for(f in i)if(i[f]&&i[f].test(e)){j.unshift(f);break}if(j[0]in d)g=j[0];else{for(f in d){if(!j[0]||a.converters[f+" "+j[0]]){g=f;break}h||(h=f)}g=g||h}if(g)return g!==j[0]&&j.unshift(g),d[g]}function cC(a,b){var c,d,e,f,g=a.dataTypes.slice(),h=g[0],i={},j=0;a.dataFilter&&(b=a.dataFilter(b,a.dataType));if(g[1])for(c in a.converters)i[c.toLowerCase()]=a.converters[c];for(;e=g[++j];)if(e!=="*"){if(h!=="*"&&h!==e){c=i[h+" "+e]||i["* "+e];if(!c)for(d in i){f=d.split(" ");if(f[1]===e){c=i[h+" "+f[0]]||i["* "+f[0]];if(c){c===!0?c=i[d]:i[d]!==!0&&(e=f[0],g.splice(j--,0,e));break}}}if(c!==!0)if(c&&a["throws"])b=c(b);else try{b=c(b)}catch(k){return{state:"parsererror",error:c?k:"No conversion from "+h+" to "+e}}}h=e}return{state:"success",data:b}}function cK(){try{return new a.XMLHttpRequest}catch(b){}}function cL(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function cT(){return setTimeout(function(){cM=b},0),cM=p.now()}function cU(a,b){p.each(b,function(b,c){var d=(cS[b]||[]).concat(cS["*"]),e=0,f=d.length;for(;e<f;e++)if(d[e].call(a,b,c))return})}function cV(a,b,c){var d,e=0,f=0,g=cR.length,h=p.Deferred().always(function(){delete i.elem}),i=function(){var b=cM||cT(),c=Math.max(0,j.startTime+j.duration-b),d=1-(c/j.duration||0),e=0,f=j.tweens.length;for(;e<f;e++)j.tweens[e].run(d);return h.notifyWith(a,[j,d,c]),d<1&&f?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:p.extend({},b),opts:p.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:cM||cT(),duration:c.duration,tweens:[],createTween:function(b,c,d){var e=p.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(e),e},stop:function(b){var c=0,d=b?j.tweens.length:0;for(;c<d;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;cW(k,j.opts.specialEasing);for(;e<g;e++){d=cR[e].call(j,a,k,j.opts);if(d)return d}return cU(j,k),p.isFunction(j.opts.start)&&j.opts.start.call(a,j),p.fx.timer(p.extend(i,{anim:j,queue:j.opts.queue,elem:a})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}function cW(a,b){var c,d,e,f,g;for(c in a){d=p.camelCase(c),e=b[d],f=a[c],p.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=p.cssHooks[d];if(g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}}function cX(a,b,c){var d,e,f,g,h,i,j,k,l=this,m=a.style,n={},o=[],q=a.nodeType&&bY(a);c.queue||(j=p._queueHooks(a,"fx"),j.unqueued==null&&(j.unqueued=0,k=j.empty.fire,j.empty.fire=function(){j.unqueued||k()}),j.unqueued++,l.always(function(){l.always(function(){j.unqueued--,p.queue(a,"fx").length||j.empty.fire()})})),a.nodeType===1&&("height"in b||"width"in b)&&(c.overflow=[m.overflow,m.overflowX,m.overflowY],p.css(a,"display")==="inline"&&p.css(a,"float")==="none"&&(!p.support.inlineBlockNeedsLayout||cb(a.nodeName)==="inline"?m.display="inline-block":m.zoom=1)),c.overflow&&(m.overflow="hidden",p.support.shrinkWrapBlocks||l.done(function(){m.overflow=c.overflow[0],m.overflowX=c.overflow[1],m.overflowY=c.overflow[2]}));for(d in b){f=b[d];if(cO.exec(f)){delete b[d];if(f===(q?"hide":"show"))continue;o.push(d)}}g=o.length;if(g){h=p._data(a,"fxshow")||p._data(a,"fxshow",{}),q?p(a).show():l.done(function(){p(a).hide()}),l.done(function(){var b;p.removeData(a,"fxshow",!0);for(b in n)p.style(a,b,n[b])});for(d=0;d<g;d++)e=o[d],i=l.createTween(e,q?h[e]:0),n[e]=h[e]||p.style(a,e),e in h||(h[e]=i.start,q&&(i.end=i.start,i.start=e==="width"||e==="height"?1:0))}}function cY(a,b,c,d,e){return new cY.prototype.init(a,b,c,d,e)}function cZ(a,b){var c,d={height:a},e=0;for(;e<4;e+=2-b)c=bU[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function c_(a){return p.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}var c,d,e=a.document,f=a.location,g=a.navigator,h=a.jQuery,i=a.$,j=Array.prototype.push,k=Array.prototype.slice,l=Array.prototype.indexOf,m=Object.prototype.toString,n=Object.prototype.hasOwnProperty,o=String.prototype.trim,p=function(a,b){return new p.fn.init(a,b,c)},q=/[\-+]?(?:\d*\.|)\d+(?:[eE][\-+]?\d+|)/.source,r=/\S/,s=/\s+/,t=r.test(" ")?/^[\s\xA0]+|[\s\xA0]+$/g:/^\s+|\s+$/g,u=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^[\],:{}\s]*$/,x=/(?:^|:|,)(?:\s*\[)+/g,y=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,z=/"[^"\\\r\n]*"|true|false|null|-?(?:\d\d*\.|)\d+(?:[eE][\-+]?\d+|)/g,A=/^-ms-/,B=/-([\da-z])/gi,C=function(a,b){return(b+"").toUpperCase()},D=function(){e.addEventListener?(e.removeEventListener("DOMContentLoaded",D,!1),p.ready()):e.readyState==="complete"&&(e.detachEvent("onreadystatechange",D),p.ready())},E={};p.fn=p.prototype={constructor:p,init:function(a,c,d){var f,g,h,i;if(!a)return this;if(a.nodeType)return this.context=this[0]=a,this.length=1,this;if(typeof a=="string"){a.charAt(0)==="<"&&a.charAt(a.length-1)===">"&&a.length>=3?f=[null,a,null]:f=u.exec(a);if(f&&(f[1]||!c)){if(f[1])return c=c instanceof p?c[0]:c,i=c&&c.nodeType?c.ownerDocument||c:e,a=p.parseHTML(f[1],i,!0),v.test(f[1])&&p.isPlainObject(c)&&this.attr.call(a,c,!0),p.merge(this,a);g=e.getElementById(f[2]);if(g&&g.parentNode){if(g.id!==f[2])return d.find(a);this.length=1,this[0]=g}return this.context=e,this.selector=a,this}return!c||c.jquery?(c||d).find(a):this.constructor(c).find(a)}return p.isFunction(a)?d.ready(a):(a.selector!==b&&(this.selector=a.selector,this.context=a.context),p.makeArray(a,this))},selector:"",jquery:"1.8.0",length:0,size:function(){return this.length},toArray:function(){return k.call(this)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=p.merge(this.constructor(),a);return d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")"),d},each:function(a,b){return p.each(this,a,b)},ready:function(a){return p.ready.promise().done(a),this},eq:function(a){return a=+a,a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(k.apply(this,arguments),"slice",k.call(arguments).join(","))},map:function(a){return this.pushStack(p.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:j,sort:[].sort,splice:[].splice},p.fn.init.prototype=p.fn,p.extend=p.fn.extend=function(){var a,c,d,e,f,g,h=arguments[0]||{},i=1,j=arguments.length,k=!1;typeof h=="boolean"&&(k=h,h=arguments[1]||{},i=2),typeof h!="object"&&!p.isFunction(h)&&(h={}),j===i&&(h=this,--i);for(;i<j;i++)if((a=arguments[i])!=null)for(c in a){d=h[c],e=a[c];if(h===e)continue;k&&e&&(p.isPlainObject(e)||(f=p.isArray(e)))?(f?(f=!1,g=d&&p.isArray(d)?d:[]):g=d&&p.isPlainObject(d)?d:{},h[c]=p.extend(k,g,e)):e!==b&&(h[c]=e)}return h},p.extend({noConflict:function(b){return a.$===p&&(a.$=i),b&&a.jQuery===p&&(a.jQuery=h),p},isReady:!1,readyWait:1,holdReady:function(a){a?p.readyWait++:p.ready(!0)},ready:function(a){if(a===!0?--p.readyWait:p.isReady)return;if(!e.body)return setTimeout(p.ready,1);p.isReady=!0;if(a!==!0&&--p.readyWait>0)return;d.resolveWith(e,[p]),p.fn.trigger&&p(e).trigger("ready").off("ready")},isFunction:function(a){return p.type(a)==="function"},isArray:Array.isArray||function(a){return p.type(a)==="array"},isWindow:function(a){return a!=null&&a==a.window},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):E[m.call(a)]||"object"},isPlainObject:function(a){if(!a||p.type(a)!=="object"||a.nodeType||p.isWindow(a))return!1;try{if(a.constructor&&!n.call(a,"constructor")&&!n.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||n.call(a,d)},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},error:function(a){throw new Error(a)},parseHTML:function(a,b,c){var d;return!a||typeof a!="string"?null:(typeof b=="boolean"&&(c=b,b=0),b=b||e,(d=v.exec(a))?[b.createElement(d[1])]:(d=p.buildFragment([a],b,c?null:[]),p.merge([],(d.cacheable?p.clone(d.fragment):d.fragment).childNodes)))},parseJSON:function(b){if(!b||typeof b!="string")return null;b=p.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(w.test(b.replace(y,"@").replace(z,"]").replace(x,"")))return(new Function("return "+b))();p.error("Invalid JSON: "+b)},parseXML:function(c){var d,e;if(!c||typeof c!="string")return null;try{a.DOMParser?(e=new DOMParser,d=e.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(f){d=b}return(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&p.error("Invalid XML: "+c),d},noop:function(){},globalEval:function(b){b&&r.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(A,"ms-").replace(B,C)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var e,f=0,g=a.length,h=g===b||p.isFunction(a);if(d){if(h){for(e in a)if(c.apply(a[e],d)===!1)break}else for(;f<g;)if(c.apply(a[f++],d)===!1)break}else if(h){for(e in a)if(c.call(a[e],e,a[e])===!1)break}else for(;f<g;)if(c.call(a[f],f,a[f++])===!1)break;return a},trim:o?function(a){return a==null?"":o.call(a)}:function(a){return a==null?"":a.toString().replace(t,"")},makeArray:function(a,b){var c,d=b||[];return a!=null&&(c=p.type(a),a.length==null||c==="string"||c==="function"||c==="regexp"||p.isWindow(a)?j.call(d,a):p.merge(d,a)),d},inArray:function(a,b,c){var d;if(b){if(l)return l.call(b,a,c);d=b.length,c=c?c<0?Math.max(0,d+c):c:0;for(;c<d;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,c){var d=c.length,e=a.length,f=0;if(typeof d=="number")for(;f<d;f++)a[e++]=c[f];else while(c[f]!==b)a[e++]=c[f++];return a.length=e,a},grep:function(a,b,c){var d,e=[],f=0,g=a.length;c=!!c;for(;f<g;f++)d=!!b(a[f],f),c!==d&&e.push(a[f]);return e},map:function(a,c,d){var e,f,g=[],h=0,i=a.length,j=a instanceof p||i!==b&&typeof i=="number"&&(i>0&&a[0]&&a[i-1]||i===0||p.isArray(a));if(j)for(;h<i;h++)e=c(a[h],h,d),e!=null&&(g[g.length]=e);else for(f in a)e=c(a[f],f,d),e!=null&&(g[g.length]=e);return g.concat.apply([],g)},guid:1,proxy:function(a,c){var d,e,f;return typeof c=="string"&&(d=a[c],c=a,a=d),p.isFunction(a)?(e=k.call(arguments,2),f=function(){return a.apply(c,e.concat(k.call(arguments)))},f.guid=a.guid=a.guid||f.guid||p.guid++,f):b},access:function(a,c,d,e,f,g,h){var i,j=d==null,k=0,l=a.length;if(d&&typeof d=="object"){for(k in d)p.access(a,c,k,d[k],1,g,e);f=1}else if(e!==b){i=h===b&&p.isFunction(e),j&&(i?(i=c,c=function(a,b,c){return i.call(p(a),c)}):(c.call(a,e),c=null));if(c)for(;k<l;k++)c(a[k],d,i?e.call(a[k],k,c(a[k],d)):e,h);f=1}return f?a:j?c.call(a):l?c(a[0],d):g},now:function(){return(new Date).getTime()}}),p.ready.promise=function(b){if(!d){d=p.Deferred();if(e.readyState==="complete"||e.readyState!=="loading"&&e.addEventListener)setTimeout(p.ready,1);else if(e.addEventListener)e.addEventListener("DOMContentLoaded",D,!1),a.addEventListener("load",p.ready,!1);else{e.attachEvent("onreadystatechange",D),a.attachEvent("onload",p.ready);var c=!1;try{c=a.frameElement==null&&e.documentElement}catch(f){}c&&c.doScroll&&function g(){if(!p.isReady){try{c.doScroll("left")}catch(a){return setTimeout(g,50)}p.ready()}}()}}return d.promise(b)},p.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){E["[object "+b+"]"]=b.toLowerCase()}),c=p(e);var F={};p.Callbacks=function(a){a=typeof a=="string"?F[a]||G(a):p.extend({},a);var c,d,e,f,g,h,i=[],j=!a.once&&[],k=function(b){c=a.memory&&b,d=!0,h=f||0,f=0,g=i.length,e=!0;for(;i&&h<g;h++)if(i[h].apply(b[0],b[1])===!1&&a.stopOnFalse){c=!1;break}e=!1,i&&(j?j.length&&k(j.shift()):c?i=[]:l.disable())},l={add:function(){if(i){var b=i.length;(function d(b){p.each(b,function(b,c){p.isFunction(c)&&(!a.unique||!l.has(c))?i.push(c):c&&c.length&&d(c)})})(arguments),e?g=i.length:c&&(f=b,k(c))}return this},remove:function(){return i&&p.each(arguments,function(a,b){var c;while((c=p.inArray(b,i,c))>-1)i.splice(c,1),e&&(c<=g&&g--,c<=h&&h--)}),this},has:function(a){return p.inArray(a,i)>-1},empty:function(){return i=[],this},disable:function(){return i=j=c=b,this},disabled:function(){return!i},lock:function(){return j=b,c||l.disable(),this},locked:function(){return!j},fireWith:function(a,b){return b=b||[],b=[a,b.slice?b.slice():b],i&&(!d||j)&&(e?j.push(b):k(b)),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!d}};return l},p.extend({Deferred:function(a){var b=[["resolve","done",p.Callbacks("once memory"),"resolved"],["reject","fail",p.Callbacks("once memory"),"rejected"],["notify","progress",p.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return p.Deferred(function(c){p.each(b,function(b,d){var f=d[0],g=a[b];e[d[1]](p.isFunction(g)?function(){var a=g.apply(this,arguments);a&&p.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f+"With"](this===e?c:this,[a])}:c[f])}),a=null}).promise()},promise:function(a){return typeof a=="object"?p.extend(a,d):d}},e={};return d.pipe=d.then,p.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[a^1][2].disable,b[2][2].lock),e[f[0]]=g.fire,e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=k.call(arguments),d=c.length,e=d!==1||a&&p.isFunction(a.promise)?d:0,f=e===1?a:p.Deferred(),g=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?k.call(arguments):d,c===h?f.notifyWith(b,c):--e||f.resolveWith(b,c)}},h,i,j;if(d>1){h=new Array(d),i=new Array(d),j=new Array(d);for(;b<d;b++)c[b]&&p.isFunction(c[b].promise)?c[b].promise().done(g(b,j,c)).fail(f.reject).progress(g(b,i,h)):--e}return e||f.resolveWith(j,c),f.promise()}}),p.support=function(){var b,c,d,f,g,h,i,j,k,l,m,n=e.createElement("div");n.setAttribute("className","t"),n.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",c=n.getElementsByTagName("*"),d=n.getElementsByTagName("a")[0],d.style.cssText="top:1px;float:left;opacity:.5";if(!c||!c.length||!d)return{};f=e.createElement("select"),g=f.appendChild(e.createElement("option")),h=n.getElementsByTagName("input")[0],b={leadingWhitespace:n.firstChild.nodeType===3,tbody:!n.getElementsByTagName("tbody").length,htmlSerialize:!!n.getElementsByTagName("link").length,style:/top/.test(d.getAttribute("style")),hrefNormalized:d.getAttribute("href")==="/a",opacity:/^0.5/.test(d.style.opacity),cssFloat:!!d.style.cssFloat,checkOn:h.value==="on",optSelected:g.selected,getSetAttribute:n.className!=="t",enctype:!!e.createElement("form").enctype,html5Clone:e.createElement("nav").cloneNode(!0).outerHTML!=="<:nav></:nav>",boxModel:e.compatMode==="CSS1Compat",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},h.checked=!0,b.noCloneChecked=h.cloneNode(!0).checked,f.disabled=!0,b.optDisabled=!g.disabled;try{delete n.test}catch(o){b.deleteExpando=!1}!n.addEventListener&&n.attachEvent&&n.fireEvent&&(n.attachEvent("onclick",m=function(){b.noCloneEvent=!1}),n.cloneNode(!0).fireEvent("onclick"),n.detachEvent("onclick",m)),h=e.createElement("input"),h.value="t",h.setAttribute("type","radio"),b.radioValue=h.value==="t",h.setAttribute("checked","checked"),h.setAttribute("name","t"),n.appendChild(h),i=e.createDocumentFragment(),i.appendChild(n.lastChild),b.checkClone=i.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=h.checked,i.removeChild(h),i.appendChild(n);if(n.attachEvent)for(k in{submit:!0,change:!0,focusin:!0})j="on"+k,l=j in n,l||(n.setAttribute(j,"return;"),l=typeof n[j]=="function"),b[k+"Bubbles"]=l;return p(function(){var c,d,f,g,h="padding:0;margin:0;border:0;display:block;overflow:hidden;",i=e.getElementsByTagName("body")[0];if(!i)return;c=e.createElement("div"),c.style.cssText="visibility:hidden;border:0;width:0;height:0;position:static;top:0;margin-top:1px",i.insertBefore(c,i.firstChild),d=e.createElement("div"),c.appendChild(d),d.innerHTML="<table><tr><td></td><td>t</td></tr></table>",f=d.getElementsByTagName("td"),f[0].style.cssText="padding:0;margin:0;border:0;display:none",l=f[0].offsetHeight===0,f[0].style.display="",f[1].style.display="none",b.reliableHiddenOffsets=l&&f[0].offsetHeight===0,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%;",b.boxSizing=d.offsetWidth===4,b.doesNotIncludeMarginInBodyOffset=i.offsetTop!==1,a.getComputedStyle&&(b.pixelPosition=(a.getComputedStyle(d,null)||{}).top!=="1%",b.boxSizingReliable=(a.getComputedStyle(d,null)||{width:"4px"}).width==="4px",g=e.createElement("div"),g.style.cssText=d.style.cssText=h,g.style.marginRight=g.style.width="0",d.style.width="1px",d.appendChild(g),b.reliableMarginRight=!parseFloat((a.getComputedStyle(g,null)||{}).marginRight)),typeof d.style.zoom!="undefined"&&(d.innerHTML="",d.style.cssText=h+"width:1px;padding:1px;display:inline;zoom:1",b.inlineBlockNeedsLayout=d.offsetWidth===3,d.style.display="block",d.style.overflow="visible",d.innerHTML="<div></div>",d.firstChild.style.width="5px",b.shrinkWrapBlocks=d.offsetWidth!==3,c.style.zoom=1),i.removeChild(c),c=d=f=g=null}),i.removeChild(n),c=d=f=g=h=i=n=null,b}();var H=/^(?:\{.*\}|\[.*\])$/,I=/([A-Z])/g;p.extend({cache:{},deletedIds:[],uuid:0,expando:"jQuery"+(p.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){return a=a.nodeType?p.cache[a[p.expando]]:a[p.expando],!!a&&!K(a)},data:function(a,c,d,e){if(!p.acceptData(a))return;var f,g,h=p.expando,i=typeof c=="string",j=a.nodeType,k=j?p.cache:a,l=j?a[h]:a[h]&&h;if((!l||!k[l]||!e&&!k[l].data)&&i&&d===b)return;l||(j?a[h]=l=p.deletedIds.pop()||++p.uuid:l=h),k[l]||(k[l]={},j||(k[l].toJSON=p.noop));if(typeof c=="object"||typeof c=="function")e?k[l]=p.extend(k[l],c):k[l].data=p.extend(k[l].data,c);return f=k[l],e||(f.data||(f.data={}),f=f.data),d!==b&&(f[p.camelCase(c)]=d),i?(g=f[c],g==null&&(g=f[p.camelCase(c)])):g=f,g},removeData:function(a,b,c){if(!p.acceptData(a))return;var d,e,f,g=a.nodeType,h=g?p.cache:a,i=g?a[p.expando]:p.expando;if(!h[i])return;if(b){d=c?h[i]:h[i].data;if(d){p.isArray(b)||(b in d?b=[b]:(b=p.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,f=b.length;e<f;e++)delete d[b[e]];if(!(c?K:p.isEmptyObject)(d))return}}if(!c){delete h[i].data;if(!K(h[i]))return}g?p.cleanData([a],!0):p.support.deleteExpando||h!=h.window?delete h[i]:h[i]=null},_data:function(a,b,c){return p.data(a,b,c,!0)},acceptData:function(a){var b=a.nodeName&&p.noData[a.nodeName.toLowerCase()];return!b||b!==!0&&a.getAttribute("classid")===b}}),p.fn.extend({data:function(a,c){var d,e,f,g,h,i=this[0],j=0,k=null;if(a===b){if(this.length){k=p.data(i);if(i.nodeType===1&&!p._data(i,"parsedAttrs")){f=i.attributes;for(h=f.length;j<h;j++)g=f[j].name,g.indexOf("data-")===0&&(g=p.camelCase(g.substring(5)),J(i,g,k[g]));p._data(i,"parsedAttrs",!0)}}return k}return typeof a=="object"?this.each(function(){p.data(this,a)}):(d=a.split(".",2),d[1]=d[1]?"."+d[1]:"",e=d[1]+"!",p.access(this,function(c){if(c===b)return k=this.triggerHandler("getData"+e,[d[0]]),k===b&&i&&(k=p.data(i,a),k=J(i,a,k)),k===b&&d[1]?this.data(d[0]):k;d[1]=c,this.each(function(){var b=p(this);b.triggerHandler("setData"+e,d),p.data(this,a,c),b.triggerHandler("changeData"+e,d)})},null,c,arguments.length>1,null,!1))},removeData:function(a){return this.each(function(){p.removeData(this,a)})}}),p.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=p._data(a,b),c&&(!d||p.isArray(c)?d=p._data(a,b,p.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=p.queue(a,b),d=c.shift(),e=p._queueHooks(a,b),f=function(){p.dequeue(a,b)};d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),delete e.stop,d.call(a,f,e)),!c.length&&e&&e.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return p._data(a,c)||p._data(a,c,{empty:p.Callbacks("once memory").add(function(){p.removeData(a,b+"queue",!0),p.removeData(a,c,!0)})})}}),p.fn.extend({queue:function(a,c){var d=2;return typeof a!="string"&&(c=a,a="fx",d--),arguments.length<d?p.queue(this[0],a):c===b?this:this.each(function(){var b=p.queue(this,a,c);p._queueHooks(this,a),a==="fx"&&b[0]!=="inprogress"&&p.dequeue(this,a)})},dequeue:function(a){return this.each(function(){p.dequeue(this,a)})},delay:function(a,b){return a=p.fx?p.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){var d,e=1,f=p.Deferred(),g=this,h=this.length,i=function(){--e||f.resolveWith(g,[g])};typeof a!="string"&&(c=a,a=b),a=a||"fx";while(h--)(d=p._data(g[h],a+"queueHooks"))&&d.empty&&(e++,d.empty.add(i));return i(),f.promise(c)}});var L,M,N,O=/[\t\r\n]/g,P=/\r/g,Q=/^(?:button|input)$/i,R=/^(?:button|input|object|select|textarea)$/i,S=/^a(?:rea|)$/i,T=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,U=p.support.getSetAttribute;p.fn.extend({attr:function(a,b){return p.access(this,p.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){p.removeAttr(this,a)})},prop:function(a,b){return p.access(this,p.prop,a,b,arguments.length>1)},removeProp:function(a){return a=p.propFix[a]||a,this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,f,g,h;if(p.isFunction(a))return this.each(function(b){p(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(s);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{f=" "+e.className+" ";for(g=0,h=b.length;g<h;g++)~f.indexOf(" "+b[g]+" ")||(f+=b[g]+" ");e.className=p.trim(f)}}}return this},removeClass:function(a){var c,d,e,f,g,h,i;if(p.isFunction(a))return this.each(function(b){p(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(s);for(h=0,i=this.length;h<i;h++){e=this[h];if(e.nodeType===1&&e.className){d=(" "+e.className+" ").replace(O," ");for(f=0,g=c.length;f<g;f++)while(d.indexOf(" "+c[f]+" ")>-1)d=d.replace(" "+c[f]+" "," ");e.className=a?p.trim(d):""}}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";return p.isFunction(a)?this.each(function(c){p(this).toggleClass(a.call(this,c,this.className,b),b)}):this.each(function(){if(c==="string"){var e,f=0,g=p(this),h=b,i=a.split(s);while(e=i[f++])h=d?h:!g.hasClass(e),g[h?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&p._data(this,"__className__",this.className),this.className=this.className||a===!1?"":p._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(O," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e,f=this[0];if(!arguments.length){if(f)return c=p.valHooks[f.type]||p.valHooks[f.nodeName.toLowerCase()],c&&"get"in c&&(d=c.get(f,"value"))!==b?d:(d=f.value,typeof d=="string"?d.replace(P,""):d==null?"":d);return}return e=p.isFunction(a),this.each(function(d){var f,g=p(this);if(this.nodeType!==1)return;e?f=a.call(this,d,g.val()):f=a,f==null?f="":typeof f=="number"?f+="":p.isArray(f)&&(f=p.map(f,function(a){return a==null?"":a+""})),c=p.valHooks[this.type]||p.valHooks[this.nodeName.toLowerCase()];if(!c||!("set"in c)||c.set(this,f,"value")===b)this.value=f})}}),p.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,f=a.selectedIndex,g=[],h=a.options,i=a.type==="select-one";if(f<0)return null;c=i?f:0,d=i?f+1:h.length;for(;c<d;c++){e=h[c];if(e.selected&&(p.support.optDisabled?!e.disabled:e.getAttribute("disabled")===null)&&(!e.parentNode.disabled||!p.nodeName(e.parentNode,"optgroup"))){b=p(e).val();if(i)return b;g.push(b)}}return i&&!g.length&&h.length?p(h[f]).val():g},set:function(a,b){var c=p.makeArray(b);return p(a).find("option").each(function(){this.selected=p.inArray(p(this).val(),c)>=0}),c.length||(a.selectedIndex=-1),c}}},attrFn:{},attr:function(a,c,d,e){var f,g,h,i=a.nodeType;if(!a||i===3||i===8||i===2)return;if(e&&p.isFunction(p.fn[c]))return p(a)[c](d);if(typeof a.getAttribute=="undefined")return p.prop(a,c,d);h=i!==1||!p.isXMLDoc(a),h&&(c=c.toLowerCase(),g=p.attrHooks[c]||(T.test(c)?M:L));if(d!==b){if(d===null){p.removeAttr(a,c);return}return g&&"set"in g&&h&&(f=g.set(a,d,c))!==b?f:(a.setAttribute(c,""+d),d)}return g&&"get"in g&&h&&(f=g.get(a,c))!==null?f:(f=a.getAttribute(c),f===null?b:f)},removeAttr:function(a,b){var c,d,e,f,g=0;if(b&&a.nodeType===1){d=b.split(s);for(;g<d.length;g++)e=d[g],e&&(c=p.propFix[e]||e,f=T.test(e),f||p.attr(a,e,""),a.removeAttribute(U?e:c),f&&c in a&&(a[c]=!1))}},attrHooks:{type:{set:function(a,b){if(Q.test(a.nodeName)&&a.parentNode)p.error("type property can't be changed");else if(!p.support.radioValue&&b==="radio"&&p.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}},value:{get:function(a,b){return L&&p.nodeName(a,"button")?L.get(a,b):b in a?a.value:null},set:function(a,b,c){if(L&&p.nodeName(a,"button"))return L.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e,f,g,h=a.nodeType;if(!a||h===3||h===8||h===2)return;return g=h!==1||!p.isXMLDoc(a),g&&(c=p.propFix[c]||c,f=p.propHooks[c]),d!==b?f&&"set"in f&&(e=f.set(a,d,c))!==b?e:a[c]=d:f&&"get"in f&&(e=f.get(a,c))!==null?e:a[c]},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):R.test(a.nodeName)||S.test(a.nodeName)&&a.href?0:b}}}}),M={get:function(a,c){var d,e=p.prop(a,c);return e===!0||typeof e!="boolean"&&(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;return b===!1?p.removeAttr(a,c):(d=p.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase())),c}},U||(N={name:!0,id:!0,coords:!0},L=p.valHooks.button={get:function(a,c){var d;return d=a.getAttributeNode(c),d&&(N[c]?d.value!=="":d.specified)?d.value:b},set:function(a,b,c){var d=a.getAttributeNode(c);return d||(d=e.createAttribute(c),a.setAttributeNode(d)),d.value=b+""}},p.each(["width","height"],function(a,b){p.attrHooks[b]=p.extend(p.attrHooks[b],{set:function(a,c){if(c==="")return a.setAttribute(b,"auto"),c}})}),p.attrHooks.contenteditable={get:L.get,set:function(a,b,c){b===""&&(b="false"),L.set(a,b,c)}}),p.support.hrefNormalized||p.each(["href","src","width","height"],function(a,c){p.attrHooks[c]=p.extend(p.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),p.support.style||(p.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),p.support.optSelected||(p.propHooks.selected=p.extend(p.propHooks.selected,{get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null}})),p.support.enctype||(p.propFix.enctype="encoding"),p.support.checkOn||p.each(["radio","checkbox"],function(){p.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),p.each(["radio","checkbox"],function(){p.valHooks[this]=p.extend(p.valHooks[this],{set:function(a,b){if(p.isArray(b))return a.checked=p.inArray(p(a).val(),b)>=0}})});var V=/^(?:textarea|input|select)$/i,W=/^([^\.]*|)(?:\.(.+)|)$/,X=/(?:^|\s)hover(\.\S+|)\b/,Y=/^key/,Z=/^(?:mouse|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=function(a){return p.event.special.hover?a:a.replace(X,"mouseenter$1 mouseleave$1")};p.event={add:function(a,c,d,e,f){var g,h,i,j,k,l,m,n,o,q,r;if(a.nodeType===3||a.nodeType===8||!c||!d||!(g=p._data(a)))return;d.handler&&(o=d,d=o.handler,f=o.selector),d.guid||(d.guid=p.guid++),i=g.events,i||(g.events=i={}),h=g.handle,h||(g.handle=h=function(a){return typeof p!="undefined"&&(!a||p.event.triggered!==a.type)?p.event.dispatch.apply(h.elem,arguments):b},h.elem=a),c=p.trim(_(c)).split(" ");for(j=0;j<c.length;j++){k=W.exec(c[j])||[],l=k[1],m=(k[2]||"").split(".").sort(),r=p.event.special[l]||{},l=(f?r.delegateType:r.bindType)||l,r=p.event.special[l]||{},n=p.extend({type:l,origType:k[1],data:e,handler:d,guid:d.guid,selector:f,namespace:m.join(".")},o),q=i[l];if(!q){q=i[l]=[],q.delegateCount=0;if(!r.setup||r.setup.call(a,e,m,h)===!1)a.addEventListener?a.addEventListener(l,h,!1):a.attachEvent&&a.attachEvent("on"+l,h)}r.add&&(r.add.call(a,n),n.handler.guid||(n.handler.guid=d.guid)),f?q.splice(q.delegateCount++,0,n):q.push(n),p.event.global[l]=!0}a=null},global:{},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,q,r=p.hasData(a)&&p._data(a);if(!r||!(m=r.events))return;b=p.trim(_(b||"")).split(" ");for(f=0;f<b.length;f++){g=W.exec(b[f])||[],h=i=g[1],j=g[2];if(!h){for(h in m)p.event.remove(a,h+b[f],c,d,!0);continue}n=p.event.special[h]||{},h=(d?n.delegateType:n.bindType)||h,o=m[h]||[],k=o.length,j=j?new RegExp("(^|\\.)"+j.split(".").sort().join("\\.(?:.*\\.|)")+"(\\.|$)"):null;for(l=0;l<o.length;l++)q=o[l],(e||i===q.origType)&&(!c||c.guid===q.guid)&&(!j||j.test(q.namespace))&&(!d||d===q.selector||d==="**"&&q.selector)&&(o.splice(l--,1),q.selector&&o.delegateCount--,n.remove&&n.remove.call(a,q));o.length===0&&k!==o.length&&((!n.teardown||n.teardown.call(a,j,r.handle)===!1)&&p.removeEvent(a,h,r.handle),delete m[h])}p.isEmptyObject(m)&&(delete r.handle,p.removeData(a,"events",!0))},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,f,g){if(!f||f.nodeType!==3&&f.nodeType!==8){var h,i,j,k,l,m,n,o,q,r,s=c.type||c,t=[];if($.test(s+p.event.triggered))return;s.indexOf("!")>=0&&(s=s.slice(0,-1),i=!0),s.indexOf(".")>=0&&(t=s.split("."),s=t.shift(),t.sort());if((!f||p.event.customEvent[s])&&!p.event.global[s])return;c=typeof c=="object"?c[p.expando]?c:new p.Event(s,c):new p.Event(s),c.type=s,c.isTrigger=!0,c.exclusive=i,c.namespace=t.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+t.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,m=s.indexOf(":")<0?"on"+s:"";if(!f){h=p.cache;for(j in h)h[j].events&&h[j].events[s]&&p.event.trigger(c,d,h[j].handle.elem,!0);return}c.result=b,c.target||(c.target=f),d=d!=null?p.makeArray(d):[],d.unshift(c),n=p.event.special[s]||{};if(n.trigger&&n.trigger.apply(f,d)===!1)return;q=[[f,n.bindType||s]];if(!g&&!n.noBubble&&!p.isWindow(f)){r=n.delegateType||s,k=$.test(r+s)?f:f.parentNode;for(l=f;k;k=k.parentNode)q.push([k,r]),l=k;l===(f.ownerDocument||e)&&q.push([l.defaultView||l.parentWindow||a,r])}for(j=0;j<q.length&&!c.isPropagationStopped();j++)k=q[j][0],c.type=q[j][1],o=(p._data(k,"events")||{})[c.type]&&p._data(k,"handle"),o&&o.apply(k,d),o=m&&k[m],o&&p.acceptData(k)&&o.apply(k,d)===!1&&c.preventDefault();return c.type=s,!g&&!c.isDefaultPrevented()&&(!n._default||n._default.apply(f.ownerDocument,d)===!1)&&(s!=="click"||!p.nodeName(f,"a"))&&p.acceptData(f)&&m&&f[s]&&(s!=="focus"&&s!=="blur"||c.target.offsetWidth!==0)&&!p.isWindow(f)&&(l=f[m],l&&(f[m]=null),p.event.triggered=s,f[s](),p.event.triggered=b,l&&(f[m]=l)),c.result}return},dispatch:function(c){c=p.event.fix(c||a.event);var d,e,f,g,h,i,j,k,l,m,n,o=(p._data(this,"events")||{})[c.type]||[],q=o.delegateCount,r=[].slice.call(arguments),s=!c.exclusive&&!c.namespace,t=p.event.special[c.type]||{},u=[];r[0]=c,c.delegateTarget=this;if(t.preDispatch&&t.preDispatch.call(this,c)===!1)return;if(q&&(!c.button||c.type!=="click")){g=p(this),g.context=this;for(f=c.target;f!=this;f=f.parentNode||this)if(f.disabled!==!0||c.type!=="click"){i={},k=[],g[0]=f;for(d=0;d<q;d++)l=o[d],m=l.selector,i[m]===b&&(i[m]=g.is(m)),i[m]&&k.push(l);k.length&&u.push({elem:f,matches:k})}}o.length>q&&u.push({elem:this,matches:o.slice(q)});for(d=0;d<u.length&&!c.isPropagationStopped();d++){j=u[d],c.currentTarget=j.elem;for(e=0;e<j.matches.length&&!c.isImmediatePropagationStopped();e++){l=j.matches[e];if(s||!c.namespace&&!l.namespace||c.namespace_re&&c.namespace_re.test(l.namespace))c.data=l.data,c.handleObj=l,h=((p.event.special[l.origType]||{}).handle||l.handler).apply(j.elem,r),h!==b&&(c.result=h,h===!1&&(c.preventDefault(),c.stopPropagation()))}}return t.postDispatch&&t.postDispatch.call(this,c),c.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return a.which==null&&(a.which=b.charCode!=null?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,c){var d,f,g,h=c.button,i=c.fromElement;return a.pageX==null&&c.clientX!=null&&(d=a.target.ownerDocument||e,f=d.documentElement,g=d.body,a.pageX=c.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=c.clientY+(f&&f.scrollTop||g&&g.scrollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)),!a.relatedTarget&&i&&(a.relatedTarget=i===a.target?c.toElement:i),!a.which&&h!==b&&(a.which=h&1?1:h&2?3:h&4?2:0),a}},fix:function(a){if(a[p.expando])return a;var b,c,d=a,f=p.event.fixHooks[a.type]||{},g=f.props?this.props.concat(f.props):this.props;a=p.Event(d);for(b=g.length;b;)c=g[--b],a[c]=d[c];return a.target||(a.target=d.srcElement||e),a.target.nodeType===3&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,f.filter?f.filter(a,d):a},special:{ready:{setup:p.bindReady},load:{noBubble:!0},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(a,b,c){p.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}},simulate:function(a,b,c,d){var e=p.extend(new p.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?p.event.trigger(e,null,b):p.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},p.event.handle=p.event.dispatch,p.removeEvent=e.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){var d="on"+b;a.detachEvent&&(typeof a[d]=="undefined"&&(a[d]=null),a.detachEvent(d,c))},p.Event=function(a,b){if(this instanceof p.Event)a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?bb:ba):this.type=a,b&&p.extend(this,b),this.timeStamp=a&&a.timeStamp||p.now(),this[p.expando]=!0;else return new p.Event(a,b)},p.Event.prototype={preventDefault:function(){this.isDefaultPrevented=bb;var a=this.originalEvent;if(!a)return;a.preventDefault?a.preventDefault():a.returnValue=!1},stopPropagation:function(){this.isPropagationStopped=bb;var a=this.originalEvent;if(!a)return;a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=bb,this.stopPropagation()},isDefaultPrevented:ba,isPropagationStopped:ba,isImmediatePropagationStopped:ba},p.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){p.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj,g=f.selector;if(!e||e!==d&&!p.contains(d,e))a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b;return c}}}),p.support.submitBubbles||(p.event.special.submit={setup:function(){if(p.nodeName(this,"form"))return!1;p.event.add(this,"click._submit keypress._submit",function(a){var c=a.target,d=p.nodeName(c,"input")||p.nodeName(c,"button")?c.form:b;d&&!p._data(d,"_submit_attached")&&(p.event.add(d,"submit._submit",function(a){a._submit_bubble=!0}),p._data(d,"_submit_attached",!0))})},postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&p.event.simulate("submit",this.parentNode,a,!0))},teardown:function(){if(p.nodeName(this,"form"))return!1;p.event.remove(this,"._submit")}}),p.support.changeBubbles||(p.event.special.change={setup:function(){if(V.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio")p.event.add(this,"propertychange._change",function(a){a.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),p.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1),p.event.simulate("change",this,a,!0)});return!1}p.event.add(this,"beforeactivate._change",function(a){var b=a.target;V.test(b.nodeName)&&!p._data(b,"_change_attached")&&(p.event.add(b,"change._change",function(a){this.parentNode&&!a.isSimulated&&!a.isTrigger&&p.event.simulate("change",this.parentNode,a,!0)}),p._data(b,"_change_attached",!0))})},handle:function(a){var b=a.target;if(this!==b||a.isSimulated||a.isTrigger||b.type!=="radio"&&b.type!=="checkbox")return a.handleObj.handler.apply(this,arguments)},teardown:function(){return p.event.remove(this,"._change"),V.test(this.nodeName)}}),p.support.focusinBubbles||p.each({focus:"focusin",blur:"focusout"},function(a,b){var c=0,d=function(a){p.event.simulate(b,a.target,p.event.fix(a),!0)};p.event.special[b]={setup:function(){c++===0&&e.addEventListener(a,d,!0)},teardown:function(){--c===0&&e.removeEventListener(a,d,!0)}}}),p.fn.extend({on:function(a,c,d,e,f){var g,h;if(typeof a=="object"){typeof c!="string"&&(d=d||c,c=b);for(h in a)this.on(h,c,d,a[h],f);return this}d==null&&e==null?(e=c,d=c=b):e==null&&(typeof c=="string"?(e=d,d=b):(e=d,d=c,c=b));if(e===!1)e=ba;else if(!e)return this;return f===1&&(g=e,e=function(a){return p().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=p.guid++)),this.each(function(){p.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,c,d){var e,f;if(a&&a.preventDefault&&a.handleObj)return e=a.handleObj,p(a.delegateTarget).off(e.namespace?e.origType+"."+e.namespace:e.origType,e.selector,e.handler),this;if(typeof a=="object"){for(f in a)this.off(f,c,a[f]);return this}if(c===!1||typeof c=="function")d=c,c=b;return d===!1&&(d=ba),this.each(function(){p.event.remove(this,a,d,c)})},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},live:function(a,b,c){return p(this.context).on(a,this.selector,b,c),this},die:function(a,b){return p(this.context).off(a,this.selector||"**",b),this},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return arguments.length==1?this.off(a,"**"):this.off(b,a||"**",c)},trigger:function(a,b){return this.each(function(){p.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return p.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||p.guid++,d=0,e=function(c){var e=(p._data(this,"lastToggle"+a.guid)||0)%d;return p._data(this,"lastToggle"+a.guid,e+1),c.preventDefault(),b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),p.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(a,b){p.fn[b]=function(a,c){return c==null&&(c=a,a=null),arguments.length>0?this.on(b,null,a,c):this.trigger(b)},Y.test(b)&&(p.event.fixHooks[b]=p.event.keyHooks),Z.test(b)&&(p.event.fixHooks[b]=p.event.mouseHooks)}),function(a,b){function bd(a,b,c,d){var e=0,f=b.length;for(;e<f;e++)Z(a,b[e],c,d)}function be(a,b,c,d,e,f){var g,h=$.setFilters[b.toLowerCase()];return h||Z.error(b),(a||!(g=e))&&bd(a||"*",d,g=[],e),g.length>0?h(g,c,f):[]}function bf(a,c,d,e,f){var g,h,i,j,k,l,m,n,p=0,q=f.length,s=L.POS,t=new RegExp("^"+s.source+"(?!"+r+")","i"),u=function(){var a=1,c=arguments.length-2;for(;a<c;a++)arguments[a]===b&&(g[a]=b)};for(;p<q;p++){s.exec(""),a=f[p],j=[],i=0,k=e;while(g=s.exec(a)){n=s.lastIndex=g.index+g[0].length;if(n>i){m=a.slice(i,g.index),i=n,l=[c],B.test(m)&&(k&&(l=k),k=e);if(h=H.test(m))m=m.slice(0,-5).replace(B,"$&*");g.length>1&&g[0].replace(t,u),k=be(m,g[1],g[2],l,k,h)}}k?(j=j.concat(k),(m=a.slice(i))&&m!==")"?B.test(m)?bd(m,j,d,e):Z(m,c,d,e?e.concat(k):k):o.apply(d,j)):Z(a,c,d,e)}return q===1?d:Z.uniqueSort(d)}function bg(a,b,c){var d,e,f,g=[],i=0,j=D.exec(a),k=!j.pop()&&!j.pop(),l=k&&a.match(C)||[""],m=$.preFilter,n=$.filter,o=!c&&b!==h;for(;(e=l[i])!=null&&k;i++){g.push(d=[]),o&&(e=" "+e);while(e){k=!1;if(j=B.exec(e))e=e.slice(j[0].length),k=d.push({part:j.pop().replace(A," "),captures:j});for(f in n)(j=L[f].exec(e))&&(!m[f]||(j=m[f](j,b,c)))&&(e=e.slice(j.shift().length),k=d.push({part:f,captures:j}));if(!k)break}}return k||Z.error(a),g}function bh(a,b,e){var f=b.dir,g=m++;return a||(a=function(a){return a===e}),b.first?function(b,c){while(b=b[f])if(b.nodeType===1)return a(b,c)&&b}:function(b,e){var h,i=g+"."+d,j=i+"."+c;while(b=b[f])if(b.nodeType===1){if((h=b[q])===j)return b.sizset;if(typeof h=="string"&&h.indexOf(i)===0){if(b.sizset)return b}else{b[q]=j;if(a(b,e))return b.sizset=!0,b;b.sizset=!1}}}}function bi(a,b){return a?function(c,d){var e=b(c,d);return e&&a(e===!0?c:e,d)}:b}function bj(a,b,c){var d,e,f=0;for(;d=a[f];f++)$.relative[d.part]?e=bh(e,$.relative[d.part],b):(d.captures.push(b,c),e=bi(e,$.filter[d.part].apply(null,d.captures)));return e}function bk(a){return function(b,c){var d,e=0;for(;d=a[e];e++)if(d(b,c))return!0;return!1}}var c,d,e,f,g,h=a.document,i=h.documentElement,j="undefined",k=!1,l=!0,m=0,n=[].slice,o=[].push,q=("sizcache"+Math.random()).replace(".",""),r="[\\x20\\t\\r\\n\\f]",s="(?:\\\\.|[-\\w]|[^\\x00-\\xa0])+",t=s.replace("w","w#"),u="([*^$|!~]?=)",v="\\["+r+"*("+s+")"+r+"*(?:"+u+r+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+t+")|)|)"+r+"*\\]",w=":("+s+")(?:\\((?:(['\"])((?:\\\\.|[^\\\\])*?)\\2|((?:[^,]|\\\\,|(?:,(?=[^\\[]*\\]))|(?:,(?=[^\\(]*\\))))*))\\)|)",x=":(nth|eq|gt|lt|first|last|even|odd)(?:\\((\\d*)\\)|)(?=[^-]|$)",y=r+"*([\\x20\\t\\r\\n\\f>+~])"+r+"*",z="(?=[^\\x20\\t\\r\\n\\f])(?:\\\\.|"+v+"|"+w.replace(2,7)+"|[^\\\\(),])+",A=new RegExp("^"+r+"+|((?:^|[^\\\\])(?:\\\\.)*)"+r+"+$","g"),B=new RegExp("^"+y),C=new RegExp(z+"?(?="+r+"*,|$)","g"),D=new RegExp("^(?:(?!,)(?:(?:^|,)"+r+"*"+z+")*?|"+r+"*(.*?))(\\)|$)"),E=new RegExp(z.slice(19,-6)+"\\x20\\t\\r\\n\\f>+~])+|"+y,"g"),F=/^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/,G=/[\x20\t\r\n\f]*[+~]/,H=/:not\($/,I=/h\d/i,J=/input|select|textarea|button/i,K=/\\(?!\\)/g,L={ID:new RegExp("^#("+s+")"),CLASS:new RegExp("^\\.("+s+")"),NAME:new RegExp("^\\[name=['\"]?("+s+")['\"]?\\]"),TAG:new RegExp("^("+s.replace("[-","[-\\*")+")"),ATTR:new RegExp("^"+v),PSEUDO:new RegExp("^"+w),CHILD:new RegExp("^:(only|nth|last|first)-child(?:\\("+r+"*(even|odd|(([+-]|)(\\d*)n|)"+r+"*(?:([+-]|)"+r+"*(\\d+)|))"+r+"*\\)|)","i"),POS:new RegExp(x,"ig"),needsContext:new RegExp("^"+r+"*[>+~]|"+x,"i")},M={},N=[],O={},P=[],Q=function(a){return a.sizzleFilter=!0,a},R=function(a){return function(b){return b.nodeName.toLowerCase()==="input"&&b.type===a}},S=function(a){return function(b){var c=b.nodeName.toLowerCase();return(c==="input"||c==="button")&&b.type===a}},T=function(a){var b=!1,c=h.createElement("div");try{b=a(c)}catch(d){}return c=null,b},U=T(function(a){a.innerHTML="<select></select>";var b=typeof a.lastChild.getAttribute("multiple");return b!=="boolean"&&b!=="string"}),V=T(function(a){a.id=q+0,a.innerHTML="<a name='"+q+"'></a><div name='"+q+"'></div>",i.insertBefore(a,i.firstChild);var b=h.getElementsByName&&h.getElementsByName(q).length===2+h.getElementsByName(q+0).length;return g=!h.getElementById(q),i.removeChild(a),b}),W=T(function(a){return a.appendChild(h.createComment("")),a.getElementsByTagName("*").length===0}),X=T(function(a){return a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!==j&&a.firstChild.getAttribute("href")==="#"}),Y=T(function(a){return a.innerHTML="<div class='hidden e'></div><div class='hidden'></div>",!a.getElementsByClassName||a.getElementsByClassName("e").length===0?!1:(a.lastChild.className="e",a.getElementsByClassName("e").length!==1)}),Z=function(a,b,c,d){c=c||[],b=b||h;var e,f,g,i,j=b.nodeType;if(j!==1&&j!==9)return[];if(!a||typeof a!="string")return c;g=ba(b);if(!g&&!d)if(e=F.exec(a))if(i=e[1]){if(j===9){f=b.getElementById(i);if(!f||!f.parentNode)return c;if(f.id===i)return c.push(f),c}else if(b.ownerDocument&&(f=b.ownerDocument.getElementById(i))&&bb(b,f)&&f.id===i)return c.push(f),c}else{if(e[2])return o.apply(c,n.call(b.getElementsByTagName(a),0)),c;if((i=e[3])&&Y&&b.getElementsByClassName)return o.apply(c,n.call(b.getElementsByClassName(i),0)),c}return bm(a,b,c,d,g)},$=Z.selectors={cacheLength:50,match:L,order:["ID","TAG"],attrHandle:{},createPseudo:Q,find:{ID:g?function(a,b,c){if(typeof b.getElementById!==j&&!c){var d=b.getElementById(a);return d&&d.parentNode?[d]:[]}}:function(a,c,d){if(typeof c.getElementById!==j&&!d){var e=c.getElementById(a);return e?e.id===a||typeof e.getAttributeNode!==j&&e.getAttributeNode("id").value===a?[e]:b:[]}},TAG:W?function(a,b){if(typeof b.getElementsByTagName!==j)return b.getElementsByTagName(a)}:function(a,b){var c=b.getElementsByTagName(a);if(a==="*"){var d,e=[],f=0;for(;d=c[f];f++)d.nodeType===1&&e.push(d);return e}return c}},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(K,""),a[3]=(a[4]||a[5]||"").replace(K,""),a[2]==="~="&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),a[1]==="nth"?(a[2]||Z.error(a[0]),a[3]=+(a[3]?a[4]+(a[5]||1):2*(a[2]==="even"||a[2]==="odd")),a[4]=+(a[6]+a[7]||a[2]==="odd")):a[2]&&Z.error(a[0]),a},PSEUDO:function(a){var b,c=a[4];return L.CHILD.test(a[0])?null:(c&&(b=D.exec(c))&&b.pop()&&(a[0]=a[0].slice(0,b[0].length-c.length-1),c=b[0].slice(0,-1)),a.splice(2,3,c||a[3]),a)}},filter:{ID:g?function(a){return a=a.replace(K,""),function(b){return b.getAttribute("id")===a}}:function(a){return a=a.replace(K,""),function(b){var c=typeof b.getAttributeNode!==j&&b.getAttributeNode("id");return c&&c.value===a}},TAG:function(a){return a==="*"?function(){return!0}:(a=a.replace(K,"").toLowerCase(),function(b){return b.nodeName&&b.nodeName.toLowerCase()===a})},CLASS:function(a){var b=M[a];return b||(b=M[a]=new RegExp("(^|"+r+")"+a+"("+r+"|$)"),N.push(a),N.length>$.cacheLength&&delete M[N.shift()]),function(a){return b.test(a.className||typeof a.getAttribute!==j&&a.getAttribute("class")||"")}},ATTR:function(a,b,c){return b?function(d){var e=Z.attr(d,a),f=e+"";if(e==null)return b==="!=";switch(b){case"=":return f===c;case"!=":return f!==c;case"^=":return c&&f.indexOf(c)===0;case"*=":return c&&f.indexOf(c)>-1;case"$=":return c&&f.substr(f.length-c.length)===c;case"~=":return(" "+f+" ").indexOf(c)>-1;case"|=":return f===c||f.substr(0,c.length+1)===c+"-"}}:function(b){return Z.attr(b,a)!=null}},CHILD:function(a,b,c,d){if(a==="nth"){var e=m++;return function(a){var b,f,g=0,h=a;if(c===1&&d===0)return!0;b=a.parentNode;if(b&&(b[q]!==e||!a.sizset)){for(h=b.firstChild;h;h=h.nextSibling)if(h.nodeType===1){h.sizset=++g;if(h===a)break}b[q]=e}return f=a.sizset-d,c===0?f===0:f%c===0&&f/c>=0}}return function(b){var c=b;switch(a){case"only":case"first":while(c=c.previousSibling)if(c.nodeType===1)return!1;if(a==="first")return!0;c=b;case"last":while(c=c.nextSibling)if(c.nodeType===1)return!1;return!0}}},PSEUDO:function(a,b,c,d){var e=$.pseudos[a]||$.pseudos[a.toLowerCase()];return e||Z.error("unsupported pseudo: "+a),e.sizzleFilter?e(b,c,d):e}},pseudos:{not:Q(function(a,b,c){var d=bl(a.replace(A,"$1"),b,c);return function(a){return!d(a)}}),enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&!!a.checked||b==="option"&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},parent:function(a){return!$.pseudos.empty(a)},empty:function(a){var b;a=a.firstChild;while(a){if(a.nodeName>"@"||(b=a.nodeType)===3||b===4)return!1;a=a.nextSibling}return!0},contains:Q(function(a){return function(b){return(b.textContent||b.innerText||bc(b)).indexOf(a)>-1}}),has:Q(function(a){return function(b){return Z(a,b).length>0}}),header:function(a){return I.test(a.nodeName)},text:function(a){var b,c;return a.nodeName.toLowerCase()==="input"&&(b=a.type)==="text"&&((c=a.getAttribute("type"))==null||c.toLowerCase()===b)},radio:R("radio"),checkbox:R("checkbox"),file:R("file"),password:R("password"),image:R("image"),submit:S("submit"),reset:S("reset"),button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&a.type==="button"||b==="button"},input:function(a){return J.test(a.nodeName)},focus:function(a){var b=a.ownerDocument;return a===b.activeElement&&(!b.hasFocus||b.hasFocus())&&(!!a.type||!!a.href)},active:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b,c){return c?a.slice(1):[a[0]]},last:function(a,b,c){var d=a.pop();return c?a:[d]},even:function(a,b,c){var d=[],e=c?1:0,f=a.length;for(;e<f;e=e+2)d.push(a[e]);return d},odd:function(a,b,c){var d=[],e=c?0:1,f=a.length;for(;e<f;e=e+2)d.push(a[e]);return d},lt:function(a,b,c){return c?a.slice(+b):a.slice(0,+b)},gt:function(a,b,c){return c?a.slice(0,+b+1):a.slice(+b+1)},eq:function(a,b,c){var d=a.splice(+b,1);return c?a:d}}};$.setFilters.nth=$.setFilters.eq,$.filters=$.pseudos,X||($.attrHandle={href:function(a){return a.getAttribute("href",2)},type:function(a){return a.getAttribute("type")}}),V&&($.order.push("NAME"),$.find.NAME=function(a,b){if(typeof b.getElementsByName!==j)return b.getElementsByName(a)}),Y&&($.order.splice(1,0,"CLASS"),$.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!==j&&!c)return b.getElementsByClassName(a)});try{n.call(i.childNodes,0)[0].nodeType}catch(_){n=function(a){var b,c=[];for(;b=this[a];a++)c.push(b);return c}}var ba=Z.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?b.nodeName!=="HTML":!1},bb=Z.contains=i.compareDocumentPosition?function(a,b){return!!(a.compareDocumentPosition(b)&16)}:i.contains?function(a,b){var c=a.nodeType===9?a.documentElement:a,d=b.parentNode;return a===d||!!(d&&d.nodeType===1&&c.contains&&c.contains(d))}:function(a,b){while(b=b.parentNode)if(b===a)return!0;return!1},bc=Z.getText=function(a){var b,c="",d=0,e=a.nodeType;if(e){if(e===1||e===9||e===11){if(typeof a.textContent=="string")return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=bc(a)}else if(e===3||e===4)return a.nodeValue}else for(;b=a[d];d++)c+=bc(b);return c};Z.attr=function(a,b){var c,d=ba(a);return d||(b=b.toLowerCase()),$.attrHandle[b]?$.attrHandle[b](a):U||d?a.getAttribute(b):(c=a.getAttributeNode(b),c?typeof a[b]=="boolean"?a[b]?b:null:c.specified?c.value:null:null)},Z.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},[0,0].sort(function(){return l=0}),i.compareDocumentPosition?e=function(a,b){return a===b?(k=!0,0):(!a.compareDocumentPosition||!b.compareDocumentPosition?a.compareDocumentPosition:a.compareDocumentPosition(b)&4)?-1:1}:(e=function(a,b){if(a===b)return k=!0,0;if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],g=[],h=a.parentNode,i=b.parentNode,j=h;if(h===i)return f(a,b);if(!h)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)g.unshift(j),j=j.parentNode;c=e.length,d=g.length;for(var l=0;l<c&&l<d;l++)if(e[l]!==g[l])return f(e[l],g[l]);return l===c?f(a,g[l],-1):f(e[l],b,1)},f=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),Z.uniqueSort=function(a){var b,c=1;if(e){k=l,a.sort(e);if(k)for(;b=a[c];c++)b===a[c-1]&&a.splice(c--,1)}return a};var bl=Z.compile=function(a,b,c){var d,e,f,g=O[a];if(g&&g.context===b)return g;e=bg(a,b,c);for(f=0;d=e[f];f++)e[f]=bj(d,b,c);return g=O[a]=bk(e),g.context=b,g.runs=g.dirruns=0,P.push(a),P.length>$.cacheLength&&delete O[P.shift()],g};Z.matches=function(a,b){return Z(a,null,null,b)},Z.matchesSelector=function(a,b){return Z(b,null,null,[a]).length>0};var bm=function(a,b,e,f,g){a=a.replace(A,"$1");var h,i,j,k,l,m,p,q,r,s=a.match(C),t=a.match(E),u=b.nodeType;if(L.POS.test(a))return bf(a,b,e,f,s);if(f)h=n.call(f,0);else if(s&&s.length===1){if(t.length>1&&u===9&&!g&&(s=L.ID.exec(t[0]))){b=$.find.ID(s[1],b,g)[0];if(!b)return e;a=a.slice(t.shift().length)}q=(s=G.exec(t[0]))&&!s.index&&b.parentNode||b,r=t.pop(),m=r.split(":not")[0];for(j=0,k=$.order.length;j<k;j++){p=$.order[j];if(s=L[p].exec(m)){h=$.find[p]((s[1]||"").replace(K,""),q,g);if(h==null)continue;m===r&&(a=a.slice(0,a.length-r.length)+m.replace(L[p],""),a||o.apply(e,n.call(h,0)));break}}}if(a){i=bl(a,b,g),d=i.dirruns++,h==null&&(h=$.find.TAG("*",G.test(a)&&b.parentNode||b));for(j=0;l=h[j];j++)c=i.runs++,i(l,b)&&e.push(l)}return e};h.querySelectorAll&&function(){var a,b=bm,c=/'|\\/g,d=/\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,e=[],f=[":active"],g=i.matchesSelector||i.mozMatchesSelector||i.webkitMatchesSelector||i.oMatchesSelector||i.msMatchesSelector;T(function(a){a.innerHTML="<select><option selected></option></select>",a.querySelectorAll("[selected]").length||e.push("\\["+r+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),a.querySelectorAll(":checked").length||e.push(":checked")}),T(function(a){a.innerHTML="<p test=''></p>",a.querySelectorAll("[test^='']").length&&e.push("[*^$]="+r+"*(?:\"\"|'')"),a.innerHTML="<input type='hidden'>",a.querySelectorAll(":enabled").length||e.push(":enabled",":disabled")}),e=e.length&&new RegExp(e.join("|")),bm=function(a,d,f,g,h){if(!g&&!h&&(!e||!e.test(a)))if(d.nodeType===9)try{return o.apply(f,n.call(d.querySelectorAll(a),0)),f}catch(i){}else if(d.nodeType===1&&d.nodeName.toLowerCase()!=="object"){var j=d.getAttribute("id"),k=j||q,l=G.test(a)&&d.parentNode||d;j?k=k.replace(c,"\\$&"):d.setAttribute("id",k);try{return o.apply(f,n.call(l.querySelectorAll(a.replace(C,"[id='"+k+"'] $&")),0)),f}catch(i){}finally{j||d.removeAttribute("id")}}return b(a,d,f,g,h)},g&&(T(function(b){a=g.call(b,"div");try{g.call(b,"[test!='']:sizzle"),f.push($.match.PSEUDO)}catch(c){}}),f=new RegExp(f.join("|")),Z.matchesSelector=function(b,c){c=c.replace(d,"='$1']");if(!ba(b)&&!f.test(c)&&(!e||!e.test(c)))try{var h=g.call(b,c);if(h||a||b.document&&b.document.nodeType!==11)return h}catch(i){}return Z(c,null,null,[b]).length>0})}(),Z.attr=p.attr,p.find=Z,p.expr=Z.selectors,p.expr[":"]=p.expr.pseudos,p.unique=Z.uniqueSort,p.text=Z.getText,p.isXMLDoc=Z.isXML,p.contains=Z.contains}(a);var bc=/Until$/,bd=/^(?:parents|prev(?:Until|All))/,be=/^.[^:#\[\.,]*$/,bf=p.expr.match.needsContext,bg={children:!0,contents:!0,next:!0,prev:!0};p.fn.extend({find:function(a){var b,c,d,e,f,g,h=this;if(typeof a!="string")return p(a).filter(function(){for(b=0,c=h.length;b<c;b++)if(p.contains(h[b],this))return!0});g=this.pushStack("","find",a);for(b=0,c=this.length;b<c;b++){d=g.length,p.find(a,this[b],g);if(b>0)for(e=d;e<g.length;e++)for(f=0;f<d;f++)if(g[f]===g[e]){g.splice(e--,1);break}}return g},has:function(a){var b,c=p(a,this),d=c.length;return this.filter(function(){for(b=0;b<d;b++)if(p.contains(this,c[b]))return!0})},not:function(a){return this.pushStack(bj(this,a,!1),"not",a)},filter:function(a){return this.pushStack(bj(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?bf.test(a)?p(a,this.context).index(this[0])>=0:p.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c,d=0,e=this.length,f=[],g=bf.test(a)||typeof a!="string"?p(a,b||this.context):0;for(;d<e;d++){c=this[d];while(c&&c.ownerDocument&&c!==b&&c.nodeType!==11){if(g?g.index(c)>-1:p.find.matchesSelector(c,a)){f.push(c);break}c=c.parentNode}}return f=f.length>1?p.unique(f):f,this.pushStack(f,"closest",a)},index:function(a){return a?typeof a=="string"?p.inArray(this[0],p(a)):p.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.prevAll().length:-1},add:function(a,b){var c=typeof a=="string"?p(a,b):p.makeArray(a&&a.nodeType?[a]:a),d=p.merge(this.get(),c);return this.pushStack(bh(c[0])||bh(d[0])?d:p.unique(d))},addBack:function(a){return this.add(a==null?this.prevObject:this.prevObject.filter(a))}}),p.fn.andSelf=p.fn.addBack,p.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return p.dir(a,"parentNode")},parentsUntil:function(a,b,c){return p.dir(a,"parentNode",c)},next:function(a){return bi(a,"nextSibling")},prev:function(a){return bi(a,"previousSibling")},nextAll:function(a){return p.dir(a,"nextSibling")},prevAll:function(a){return p.dir(a,"previousSibling")},nextUntil:function(a,b,c){return p.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return p.dir(a,"previousSibling",c)},siblings:function(a){return p.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return p.sibling(a.firstChild)},contents:function(a){return p.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:p.merge([],a.childNodes)}},function(a,b){p.fn[a]=function(c,d){var e=p.map(this,b,c);return bc.test(a)||(d=c),d&&typeof d=="string"&&(e=p.filter(d,e)),e=this.length>1&&!bg[a]?p.unique(e):e,this.length>1&&bd.test(a)&&(e=e.reverse()),this.pushStack(e,a,k.call(arguments).join(","))}}),p.extend({filter:function(a,b,c){return c&&(a=":not("+a+")"),b.length===1?p.find.matchesSelector(b[0],a)?[b[0]]:[]:p.find.matches(a,b)},dir:function(a,c,d){var e=[],f=a[c];while(f&&f.nodeType!==9&&(d===b||f.nodeType!==1||!p(f).is(d)))f.nodeType===1&&e.push(f),f=f[c];return e},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var bl="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",bm=/ jQuery\d+="(?:null|\d+)"/g,bn=/^\s+/,bo=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bp=/<([\w:]+)/,bq=/<tbody/i,br=/<|&#?\w+;/,bs=/<(?:script|style|link)/i,bt=/<(?:script|object|embed|option|style)/i,bu=new RegExp("<(?:"+bl+")[\\s/>]","i"),bv=/^(?:checkbox|radio)$/,bw=/checked\s*(?:[^=]|=\s*.checked.)/i,bx=/\/(java|ecma)script/i,by=/^\s*<!(?:\[CDATA\[|\-\-)|[\]\-]{2}>\s*$/g,bz={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},bA=bk(e),bB=bA.appendChild(e.createElement("div"));bz.optgroup=bz.option,bz.tbody=bz.tfoot=bz.colgroup=bz.caption=bz.thead,bz.th=bz.td,p.support.htmlSerialize||(bz._default=[1,"X<div>","</div>"]),p.fn.extend({text:function(a){return p.access(this,function(a){return a===b?p.text(this):this.empty().append((this[0]&&this[0].ownerDocument||e).createTextNode(a))},null,a,arguments.length)},wrapAll:function(a){if(p.isFunction(a))return this.each(function(b){p(this).wrapAll(a.call(this,b))});if(this[0]){var b=p(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return p.isFunction(a)?this.each(function(b){p(this).wrapInner(a.call(this,b))}):this.each(function(){var b=p(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=p.isFunction(a);return this.each(function(c){p(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){p.nodeName(this,"body")||p(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){(this.nodeType===1||this.nodeType===11)&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){(this.nodeType===1||this.nodeType===11)&&this.insertBefore(a,this.firstChild)})},before:function(){if(!bh(this[0]))return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=p.clean(arguments);return this.pushStack(p.merge(a,this),"before",this.selector)}},after:function(){if(!bh(this[0]))return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=p.clean(arguments);return this.pushStack(p.merge(this,a),"after",this.selector)}},remove:function(a,b){var c,d=0;for(;(c=this[d])!=null;d++)if(!a||p.filter(a,[c]).length)!b&&c.nodeType===1&&(p.cleanData(c.getElementsByTagName("*")),p.cleanData([c])),c.parentNode&&c.parentNode.removeChild(c);return this},empty:function(){var a,b=0;for(;(a=this[b])!=null;b++){a.nodeType===1&&p.cleanData(a.getElementsByTagName("*"));while(a.firstChild)a.removeChild(a.firstChild)}return this},clone:function(a,b){return a=a==null?!1:a,b=b==null?a:b,this.map(function(){return p.clone(this,a,b)})},html:function(a){return p.access(this,function(a){var c=this[0]||{},d=0,e=this.length;if(a===b)return c.nodeType===1?c.innerHTML.replace(bm,""):b;if(typeof a=="string"&&!bs.test(a)&&(p.support.htmlSerialize||!bu.test(a))&&(p.support.leadingWhitespace||!bn.test(a))&&!bz[(bp.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(bo,"<$1></$2>");try{for(;d<e;d++)c=this[d]||{},c.nodeType===1&&(p.cleanData(c.getElementsByTagName("*")),c.innerHTML=a);c=0}catch(f){}}c&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(a){return bh(this[0])?this.length?this.pushStack(p(p.isFunction(a)?a():a),"replaceWith",a):this:p.isFunction(a)?this.each(function(b){var c=p(this),d=c.html();c.replaceWith(a.call(this,b,d))}):(typeof a!="string"&&(a=p(a).detach()),this.each(function(){var b=this.nextSibling,c=this.parentNode;p(this).remove(),b?p(b).before(a):p(c).append(a)}))},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){a=[].concat.apply([],a);var e,f,g,h,i=0,j=a[0],k=[],l=this.length;if(!p.support.checkClone&&l>1&&typeof j=="string"&&bw.test(j))return this.each(function(){p(this).domManip(a,c,d)});if(p.isFunction(j))return this.each(function(e){var f=p(this);a[0]=j.call(this,e,c?f.html():b),f.domManip(a,c,d)});if(this[0]){e=p.buildFragment(a,this,k),g=e.fragment,f=g.firstChild,g.childNodes.length===1&&(g=f);if(f){c=c&&p.nodeName(f,"tr");for(h=e.cacheable||l-1;i<l;i++)d.call(c&&p.nodeName(this[i],"table")?bC(this[i],"tbody"):this[i],i===h?g:p.clone(g,!0,!0))}g=f=null,k.length&&p.each(k,function(a,b){b.src?p.ajax?p.ajax({url:b.src,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0}):p.error("no ajax"):p.globalEval((b.text||b.textContent||b.innerHTML||"").replace(by,"")),b.parentNode&&b.parentNode.removeChild(b)})}return this}}),p.buildFragment=function(a,c,d){var f,g,h,i=a[0];return c=c||e,c=(c[0]||c).ownerDocument||c[0]||c,typeof c.createDocumentFragment=="undefined"&&(c=e),a.length===1&&typeof i=="string"&&i.length<512&&c===e&&i.charAt(0)==="<"&&!bt.test(i)&&(p.support.checkClone||!bw.test(i))&&(p.support.html5Clone||!bu.test(i))&&(g=!0,f=p.fragments[i],h=f!==b),f||(f=c.createDocumentFragment(),p.clean(a,c,f,d),g&&(p.fragments[i]=h&&f)),{fragment:f,cacheable:g}},p.fragments={},p.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){p.fn[a]=function(c){var d,e=0,f=[],g=p(c),h=g.length,i=this.length===1&&this[0].parentNode;if((i==null||i&&i.nodeType===11&&i.childNodes.length===1)&&h===1)return g[b](this[0]),this;for(;e<h;e++)d=(e>0?this.clone(!0):this).get(),p(g[e])[b](d),f=f.concat(d);return this.pushStack(f,a,g.selector)}}),p.extend({clone:function(a,b,c){var d,e,f,g;p.support.html5Clone||p.isXMLDoc(a)||!bu.test("<"+a.nodeName+">")?g=a.cloneNode(!0):(bB.innerHTML=a.outerHTML,bB.removeChild(g=bB.firstChild));if((!p.support.noCloneEvent||!p.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!p.isXMLDoc(a)){bE(a,g),d=bF(a),e=bF(g);for(f=0;d[f];++f)e[f]&&bE(d[f],e[f])}if(b){bD(a,g);if(c){d=bF(a),e=bF(g);for(f=0;d[f];++f)bD(d[f],e[f])}}return d=e=null,g},clean:function(a,b,c,d){var f,g,h,i,j,k,l,m,n,o,q,r,s=0,t=[];if(!b||typeof b.createDocumentFragment=="undefined")b=e;for(g=b===e&&bA;(h=a[s])!=null;s++){typeof h=="number"&&(h+="");if(!h)continue;if(typeof h=="string")if(!br.test(h))h=b.createTextNode(h);else{g=g||bk(b),l=l||g.appendChild(b.createElement("div")),h=h.replace(bo,"<$1></$2>"),i=(bp.exec(h)||["",""])[1].toLowerCase(),j=bz[i]||bz._default,k=j[0],l.innerHTML=j[1]+h+j[2];while(k--)l=l.lastChild;if(!p.support.tbody){m=bq.test(h),n=i==="table"&&!m?l.firstChild&&l.firstChild.childNodes:j[1]==="<table>"&&!m?l.childNodes:[];for(f=n.length-1;f>=0;--f)p.nodeName(n[f],"tbody")&&!n[f].childNodes.length&&n[f].parentNode.removeChild(n[f])}!p.support.leadingWhitespace&&bn.test(h)&&l.insertBefore(b.createTextNode(bn.exec(h)[0]),l.firstChild),h=l.childNodes,l=g.lastChild}h.nodeType?t.push(h):t=p.merge(t,h)}l&&(g.removeChild(l),h=l=g=null);if(!p.support.appendChecked)for(s=0;(h=t[s])!=null;s++)p.nodeName(h,"input")?bG(h):typeof h.getElementsByTagName!="undefined"&&p.grep(h.getElementsByTagName("input"),bG);if(c){q=function(a){if(!a.type||bx.test(a.type))return d?d.push(a.parentNode?a.parentNode.removeChild(a):a):c.appendChild(a)};for(s=0;(h=t[s])!=null;s++)if(!p.nodeName(h,"script")||!q(h))c.appendChild(h),typeof h.getElementsByTagName!="undefined"&&(r=p.grep(p.merge([],h.getElementsByTagName("script")),q),t.splice.apply(t,[s+1,0].concat(r)),s+=r.length)}return t},cleanData:function(a,b){var c,d,e,f,g=0,h=p.expando,i=p.cache,j=p.support.deleteExpando,k=p.event.special;for(;(e=a[g])!=null;g++)if(b||p.acceptData(e)){d=e[h],c=d&&i[d];if(c){if(c.events)for(f in c.events)k[f]?p.event.remove(e,f):p.removeEvent(e,f,c.handle);i[d]&&(delete i[d],j?delete e[h]:e.removeAttribute?e.removeAttribute(h):e[h]=null,p.deletedIds.push(d))}}}}),function(){var a,b;p.uaMatch=function(a){a=a.toLowerCase();var b=/(chrome)[ \/]([\w.]+)/.exec(a)||/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||a.indexOf("compatible")<0&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},a=p.uaMatch(g.userAgent),b={},a.browser&&(b[a.browser]=!0,b.version=a.version),b.webkit&&(b.safari=!0),p.browser=b,p.sub=function(){function a(b,c){return new a.fn.init(b,c)}p.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function c(c,d){return d&&d instanceof p&&!(d instanceof a)&&(d=a(d)),p.fn.init.call(this,c,d,b)},a.fn.init.prototype=a.fn;var b=a(e);return a}}();var bH,bI,bJ,bK=/alpha\([^)]*\)/i,bL=/opacity=([^)]*)/,bM=/^(top|right|bottom|left)$/,bN=/^margin/,bO=new RegExp("^("+q+")(.*)$","i"),bP=new RegExp("^("+q+")(?!px)[a-z%]+$","i"),bQ=new RegExp("^([-+])=("+q+")","i"),bR={},bS={position:"absolute",visibility:"hidden",display:"block"},bT={letterSpacing:0,fontWeight:400,lineHeight:1},bU=["Top","Right","Bottom","Left"],bV=["Webkit","O","Moz","ms"],bW=p.fn.toggle;p.fn.extend({css:function(a,c){return p.access(this,function(a,c,d){return d!==b?p.style(a,c,d):p.css(a,c)},a,c,arguments.length>1)},show:function(){return bZ(this,!0)},hide:function(){return bZ(this)},toggle:function(a,b){var c=typeof a=="boolean";return p.isFunction(a)&&p.isFunction(b)?bW.apply(this,arguments):this.each(function(){(c?a:bY(this))?p(this).show():p(this).hide()})}}),p.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bH(a,"opacity");return c===""?"1":c}}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":p.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!a||a.nodeType===3||a.nodeType===8||!a.style)return;var f,g,h,i=p.camelCase(c),j=a.style;c=p.cssProps[i]||(p.cssProps[i]=bX(j,i)),h=p.cssHooks[c]||p.cssHooks[i];if(d===b)return h&&"get"in h&&(f=h.get(a,!1,e))!==b?f:j[c];g=typeof d,g==="string"&&(f=bQ.exec(d))&&(d=(f[1]+1)*f[2]+parseFloat(p.css(a,c)),g="number");if(d==null||g==="number"&&isNaN(d))return;g==="number"&&!p.cssNumber[i]&&(d+="px");if(!h||!("set"in h)||(d=h.set(a,d,e))!==b)try{j[c]=d}catch(k){}},css:function(a,c,d,e){var f,g,h,i=p.camelCase(c);return c=p.cssProps[i]||(p.cssProps[i]=bX(a.style,i)),h=p.cssHooks[c]||p.cssHooks[i],h&&"get"in h&&(f=h.get(a,!0,e)),f===b&&(f=bH(a,c)),f==="normal"&&c in bT&&(f=bT[c]),d||e!==b?(g=parseFloat(f),d||p.isNumeric(g)?g||0:f):f},swap:function(a,b,c){var d,e,f={};for(e in b)f[e]=a.style[e],a.style[e]=b[e];d=c.call(a);for(e in b)a.style[e]=f[e];return d}}),a.getComputedStyle?bH=function(a,b){var c,d,e,f,g=getComputedStyle(a,null),h=a.style;return g&&(c=g[b],c===""&&!p.contains(a.ownerDocument.documentElement,a)&&(c=p.style(a,b)),bP.test(c)&&bN.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=c,c=g.width,h.width=d,h.minWidth=e,h.maxWidth=f)),c}:e.documentElement.currentStyle&&(bH=function(a,b){var c,d,e=a.currentStyle&&a.currentStyle[b],f=a.style;return e==null&&f&&f[b]&&(e=f[b]),bP.test(e)&&!bM.test(b)&&(c=f.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":e,e=f.pixelLeft+"px",f.left=c,d&&(a.runtimeStyle.left=d)),e===""?"auto":e}),p.each(["height","width"],function(a,b){p.cssHooks[b]={get:function(a,c,d){if(c)return a.offsetWidth!==0||bH(a,"display")!=="none"?ca(a,b,d):p.swap(a,bS,function(){return ca(a,b,d)})},set:function(a,c,d){return b$(a,c,d?b_(a,b,d,p.support.boxSizing&&p.css(a,"boxSizing")==="border-box"):0)}}}),p.support.opacity||(p.cssHooks.opacity={get:function(a,b){return bL.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=p.isNumeric(b)?"alpha(opacity="+b*100+")":"",f=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&p.trim(f.replace(bK,""))===""&&c.removeAttribute){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bK.test(f)?f.replace(bK,e):f+" "+e}}),p(function(){p.support.reliableMarginRight||(p.cssHooks.marginRight={get:function(a,b){return p.swap(a,{display:"inline-block"},function(){if(b)return bH(a,"marginRight")})}}),!p.support.pixelPosition&&p.fn.position&&p.each(["top","left"],function(a,b){p.cssHooks[b]={get:function(a,c){if(c){var d=bH(a,b);return bP.test(d)?p(a).position()[b]+"px":d}}}})}),p.expr&&p.expr.filters&&(p.expr.filters.hidden=function(a){return a.offsetWidth===0&&a.offsetHeight===0||!p.support.reliableHiddenOffsets&&(a.style&&a.style.display||bH(a,"display"))==="none"},p.expr.filters.visible=function(a){return!p.expr.filters.hidden(a)}),p.each({margin:"",padding:"",border:"Width"},function(a,b){p.cssHooks[a+b]={expand:function(c){var d,e=typeof c=="string"?c.split(" "):[c],f={};for(d=0;d<4;d++)f[a+bU[d]+b]=e[d]||e[d-2]||e[0];return f}},bN.test(a)||(p.cssHooks[a+b].set=b$)});var cc=/%20/g,cd=/\[\]$/,ce=/\r?\n/g,cf=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,cg=/^(?:select|textarea)/i;p.fn.extend({serialize:function(){return p.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?p.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||cg.test(this.nodeName)||cf.test(this.type))}).map(function(a,b){var c=p(this).val();return c==null?null:p.isArray(c)?p.map(c,function(a,c){return{name:b.name,value:a.replace(ce,"\r\n")}}):{name:b.name,value:c.replace(ce,"\r\n")}}).get()}}),p.param=function(a,c){var d,e=[],f=function(a,b){b=p.isFunction(b)?b():b==null?"":b,e[e.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=p.ajaxSettings&&p.ajaxSettings.traditional);if(p.isArray(a)||a.jquery&&!p.isPlainObject(a))p.each(a,function(){f(this.name,this.value)});else for(d in a)ch(d,a[d],c,f);return e.join("&").replace(cc,"+")};var ci,cj,ck=/#.*$/,cl=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,cm=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,cn=/^(?:GET|HEAD)$/,co=/^\/\//,cp=/\?/,cq=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,cr=/([?&])_=[^&]*/,cs=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,ct=p.fn.load,cu={},cv={},cw=["*/"]+["*"];try{ci=f.href}catch(cx){ci=e.createElement("a"),ci.href="",ci=ci.href}cj=cs.exec(ci.toLowerCase())||[],p.fn.load=function(a,c,d){if(typeof a!="string"&&ct)return ct.apply(this,arguments);if(!this.length)return this;var e,f,g,h=this,i=a.indexOf(" ");return i>=0&&(e=a.slice(i,a.length),a=a.slice(0,i)),p.isFunction(c)?(d=c,c=b):typeof c=="object"&&(f="POST"),p.ajax({url:a,type:f,dataType:"html",data:c,complete:function(a,b){d&&h.each(d,g||[a.responseText,b,a])}}).done(function(a){g=arguments,h.html(e?p("<div>").append(a.replace(cq,"")).find(e):a)}),this},p.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){p.fn[b]=function(a){return this.on(b,a)}}),p.each(["get","post"],function(a,c){p[c]=function(a,d,e,f){return p.isFunction(d)&&(f=f||e,e=d,d=b),p.ajax({type:c,url:a,data:d,success:e,dataType:f})}}),p.extend({getScript:function(a,c){return p.get(a,b,c,"script")},getJSON:function(a,b,c){return p.get(a,b,c,"json")},ajaxSetup:function(a,b){return b?cA(a,p.ajaxSettings):(b=a,a=p.ajaxSettings),cA(a,b),a},ajaxSettings:{url:ci,isLocal:cm.test(cj[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded; charset=UTF-8",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":cw},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":p.parseJSON,"text xml":p.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:cy(cu),ajaxTransport:cy(cv),ajax:function(a,c){function y(a,c,f,i){var k,s,t,u,w,y=c;if(v===2)return;v=2,h&&clearTimeout(h),g=b,e=i||"",x.readyState=a>0?4:0,f&&(u=cB(l,x,f));if(a>=200&&a<300||a===304)l.ifModified&&(w=x.getResponseHeader("Last-Modified"),w&&(p.lastModified[d]=w),w=x.getResponseHeader("Etag"),w&&(p.etag[d]=w)),a===304?(y="notmodified",k=!0):(k=cC(l,u),y=k.state,s=k.data,t=k.error,k=!t);else{t=y;if(!y||a)y="error",a<0&&(a=0)}x.status=a,x.statusText=""+(c||y),k?o.resolveWith(m,[s,y,x]):o.rejectWith(m,[x,y,t]),x.statusCode(r),r=b,j&&n.trigger("ajax"+(k?"Success":"Error"),[x,l,k?s:t]),q.fireWith(m,[x,y]),j&&(n.trigger("ajaxComplete",[x,l]),--p.active||p.event.trigger("ajaxStop"))}typeof a=="object"&&(c=a,a=b),c=c||{};var d,e,f,g,h,i,j,k,l=p.ajaxSetup({},c),m=l.context||l,n=m!==l&&(m.nodeType||m instanceof p)?p(m):p.event,o=p.Deferred(),q=p.Callbacks("once memory"),r=l.statusCode||{},t={},u={},v=0,w="canceled",x={readyState:0,setRequestHeader:function(a,b){if(!v){var c=a.toLowerCase();a=u[c]=u[c]||a,t[a]=b}return this},getAllResponseHeaders:function(){return v===2?e:null},getResponseHeader:function(a){var c;if(v===2){if(!f){f={};while(c=cl.exec(e))f[c[1].toLowerCase()]=c[2]}c=f[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){return v||(l.mimeType=a),this},abort:function(a){return a=a||w,g&&g.abort(a),y(0,a),this}};o.promise(x),x.success=x.done,x.error=x.fail,x.complete=q.add,x.statusCode=function(a){if(a){var b;if(v<2)for(b in a)r[b]=[r[b],a[b]];else b=a[x.status],x.always(b)}return this},l.url=((a||l.url)+"").replace(ck,"").replace(co,cj[1]+"//"),l.dataTypes=p.trim(l.dataType||"*").toLowerCase().split(s),l.crossDomain==null&&(i=cs.exec(l.url.toLowerCase()),l.crossDomain=!(!i||i[1]==cj[1]&&i[2]==cj[2]&&(i[3]||(i[1]==="http:"?80:443))==(cj[3]||(cj[1]==="http:"?80:443)))),l.data&&l.processData&&typeof l.data!="string"&&(l.data=p.param(l.data,l.traditional)),cz(cu,l,c,x);if(v===2)return x;j=l.global,l.type=l.type.toUpperCase(),l.hasContent=!cn.test(l.type),j&&p.active++===0&&p.event.trigger("ajaxStart");if(!l.hasContent){l.data&&(l.url+=(cp.test(l.url)?"&":"?")+l.data,delete l.data),d=l.url;if(l.cache===!1){var z=p.now(),A=l.url.replace(cr,"$1_="+z);l.url=A+(A===l.url?(cp.test(l.url)?"&":"?")+"_="+z:"")}}(l.data&&l.hasContent&&l.contentType!==!1||c.contentType)&&x.setRequestHeader("Content-Type",l.contentType),l.ifModified&&(d=d||l.url,p.lastModified[d]&&x.setRequestHeader("If-Modified-Since",p.lastModified[d]),p.etag[d]&&x.setRequestHeader("If-None-Match",p.etag[d])),x.setRequestHeader("Accept",l.dataTypes[0]&&l.accepts[l.dataTypes[0]]?l.accepts[l.dataTypes[0]]+(l.dataTypes[0]!=="*"?", "+cw+"; q=0.01":""):l.accepts["*"]);for(k in l.headers)x.setRequestHeader(k,l.headers[k]);if(!l.beforeSend||l.beforeSend.call(m,x,l)!==!1&&v!==2){w="abort";for(k in{success:1,error:1,complete:1})x[k](l[k]);g=cz(cv,l,c,x);if(!g)y(-1,"No Transport");else{x.readyState=1,j&&n.trigger("ajaxSend",[x,l]),l.async&&l.timeout>0&&(h=setTimeout(function(){x.abort("timeout")},l.timeout));try{v=1,g.send(t,y)}catch(B){if(v<2)y(-1,B);else throw B}}return x}return x.abort()},active:0,lastModified:{},etag:{}});var cD=[],cE=/\?/,cF=/(=)\?(?=&|$)|\?\?/,cG=p.now();p.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=cD.pop()||p.expando+"_"+cG++;return this[a]=!0,a}}),p.ajaxPrefilter("json jsonp",function(c,d,e){var f,g,h,i=c.data,j=c.url,k=c.jsonp!==!1,l=k&&cF.test(j),m=k&&!l&&typeof i=="string"&&!(c.contentType||"").indexOf("application/x-www-form-urlencoded")&&cF.test(i);if(c.dataTypes[0]==="jsonp"||l||m)return f=c.jsonpCallback=p.isFunction(c.jsonpCallback)?c.jsonpCallback():c.jsonpCallback,g=a[f],l?c.url=j.replace(cF,"$1"+f):m?c.data=i.replace(cF,"$1"+f):k&&(c.url+=(cE.test(j)?"&":"?")+c.jsonp+"="+f),c.converters["script json"]=function(){return h||p.error(f+" was not called"),h[0]},c.dataTypes[0]="json",a[f]=function(){h=arguments},e.always(function(){a[f]=g,c[f]&&(c.jsonpCallback=d.jsonpCallback,cD.push(f)),h&&p.isFunction(g)&&g(h[0]),h=g=b}),"script"}),p.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){return p.globalEval(a),a}}}),p.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),p.ajaxTransport("script",function(a){if(a.crossDomain){var c,d=e.head||e.getElementsByTagName("head")[0]||e.documentElement;return{send:function(f,g){c=e.createElement("script"),c.async="async",a.scriptCharset&&(c.charset=a.scriptCharset),c.src=a.url,c.onload=c.onreadystatechange=function(a,e){if(e||!c.readyState||/loaded|complete/.test(c.readyState))c.onload=c.onreadystatechange=null,d&&c.parentNode&&d.removeChild(c),c=b,e||g(200,"success")},d.insertBefore(c,d.firstChild)},abort:function(){c&&c.onload(0,1)}}}});var cH,cI=a.ActiveXObject?function(){for(var a in cH)cH[a](0,1)}:!1,cJ=0;p.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&cK()||cL()}:cK,function(a){p.extend(p.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(p.ajaxSettings.xhr()),p.support.ajax&&p.ajaxTransport(function(c){if(!c.crossDomain||p.support.cors){var d;return{send:function(e,f){var g,h,i=c.xhr();c.username?i.open(c.type,c.url,c.async,c.username,c.password):i.open(c.type,c.url,c.async);if(c.xhrFields)for(h in c.xhrFields)i[h]=c.xhrFields[h];c.mimeType&&i.overrideMimeType&&i.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(h in e)i.setRequestHeader(h,e[h])}catch(j){}i.send(c.hasContent&&c.data||null),d=function(a,e){var h,j,k,l,m;try{if(d&&(e||i.readyState===4)){d=b,g&&(i.onreadystatechange=p.noop,cI&&delete cH[g]);if(e)i.readyState!==4&&i.abort();else{h=i.status,k=i.getAllResponseHeaders(),l={},m=i.responseXML,m&&m.documentElement&&(l.xml=m);try{l.text=i.responseText}catch(a){}try{j=i.statusText}catch(n){j=""}!h&&c.isLocal&&!c.crossDomain?h=l.text?200:404:h===1223&&(h=204)}}}catch(o){e||f(-1,o)}l&&f(h,j,l,k)},c.async?i.readyState===4?setTimeout(d,0):(g=++cJ,cI&&(cH||(cH={},p(a).unload(cI)),cH[g]=d),i.onreadystatechange=d):d()},abort:function(){d&&d(0,1)}}}});var cM,cN,cO=/^(?:toggle|show|hide)$/,cP=new RegExp("^(?:([-+])=|)("+q+")([a-z%]*)$","i"),cQ=/queueHooks$/,cR=[cX],cS={"*":[function(a,b){var c,d,e,f=this.createTween(a,b),g=cP.exec(b),h=f.cur(),i=+h||0,j=1;if(g){c=+g[2],d=g[3]||(p.cssNumber[a]?"":"px");if(d!=="px"&&i){i=p.css(f.elem,a,!0)||c||1;do e=j=j||".5",i=i/j,p.style(f.elem,a,i+d),j=f.cur()/h;while(j!==1&&j!==e)}f.unit=d,f.start=i,f.end=g[1]?i+(g[1]+1)*c:c}return f}]};p.Animation=p.extend(cV,{tweener:function(a,b){p.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");var c,d=0,e=a.length;for(;d<e;d++)c=a[d],cS[c]=cS[c]||[],cS[c].unshift(b)},prefilter:function(a,b){b?cR.unshift(a):cR.push(a)}}),p.Tween=cY,cY.prototype={constructor:cY,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(p.cssNumber[c]?"":"px")},cur:function(){var a=cY.propHooks[this.prop];return a&&a.get?a.get(this):cY.propHooks._default.get(this)},run:function(a){var b,c=cY.propHooks[this.prop];return this.pos=b=p.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration),this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):cY.propHooks._default.set(this),this}},cY.prototype.init.prototype=cY.prototype,cY.propHooks={_default:{get:function(a){var b;return a.elem[a.prop]==null||!!a.elem.style&&a.elem.style[a.prop]!=null?(b=p.css(a.elem,a.prop,!1,""),!b||b==="auto"?0:b):a.elem[a.prop]},set:function(a){p.fx.step[a.prop]?p.fx.step[a.prop](a):a.elem.style&&(a.elem.style[p.cssProps[a.prop]]!=null||p.cssHooks[a.prop])?p.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},cY.propHooks.scrollTop=cY.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},p.each(["toggle","show","hide"],function(a,b){var c=p.fn[b];p.fn[b]=function(d,e,f){return d==null||typeof d=="boolean"||!a&&p.isFunction(d)&&p.isFunction(e)?c.apply(this,arguments):this.animate(cZ(b,!0),d,e,f)}}),p.fn.extend({fadeTo:function(a,b,c,d){return this.filter(bY).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=p.isEmptyObject(a),f=p.speed(b,c,d),g=function(){var b=cV(this,p.extend({},a),f);e&&b.stop(!0)};return e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,c,d){var e=function(a){var b=a.stop;delete a.stop,b(d)};return typeof a!="string"&&(d=c,c=a,a=b),c&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,c=a!=null&&a+"queueHooks",f=p.timers,g=p._data(this);if(c)g[c]&&g[c].stop&&e(g[c]);else for(c in g)g[c]&&g[c].stop&&cQ.test(c)&&e(g[c]);for(c=f.length;c--;)f[c].elem===this&&(a==null||f[c].queue===a)&&(f[c].anim.stop(d),b=!1,f.splice(c,1));(b||!d)&&p.dequeue(this,a)})}}),p.each({slideDown:cZ("show"),slideUp:cZ("hide"),slideToggle:cZ("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){p.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),p.speed=function(a,b,c){var d=a&&typeof a=="object"?p.extend({},a):{complete:c||!c&&b||p.isFunction(a)&&a,duration:a,easing:c&&b||b&&!p.isFunction(b)&&b};d.duration=p.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in p.fx.speeds?p.fx.speeds[d.duration]:p.fx.speeds._default;if(d.queue==null||d.queue===!0)d.queue="fx";return d.old=d.complete,d.complete=function(){p.isFunction(d.old)&&d.old.call(this),d.queue&&p.dequeue(this,d.queue)},d},p.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},p.timers=[],p.fx=cY.prototype.init,p.fx.tick=function(){var a,b=p.timers,c=0;for(;c<b.length;c++)a=b[c],!a()&&b[c]===a&&b.splice(c--,1);b.length||p.fx.stop()},p.fx.timer=function(a){a()&&p.timers.push(a)&&!cN&&(cN=setInterval(p.fx.tick,p.fx.interval))},p.fx.interval=13,p.fx.stop=function(){clearInterval(cN),cN=null},p.fx.speeds={slow:600,fast:200,_default:400},p.fx.step={},p.expr&&p.expr.filters&&(p.expr.filters.animated=function(a){return p.grep(p.timers,function(b){return a===b.elem}).length});var c$=/^(?:body|html)$/i;p.fn.offset=function(a){if(arguments.length)return a===b?this:this.each(function(b){p.offset.setOffset(this,a,b)});var c,d,e,f,g,h,i,j,k,l,m=this[0],n=m&&m.ownerDocument;if(!n)return;return(e=n.body)===m?p.offset.bodyOffset(m):(d=n.documentElement,p.contains(d,m)?(c=m.getBoundingClientRect(),f=c_(n),g=d.clientTop||e.clientTop||0,h=d.clientLeft||e.clientLeft||0,i=f.pageYOffset||d.scrollTop,j=f.pageXOffset||d.scrollLeft,k=c.top+i-g,l=c.left+j-h,{top:k,left:l}):{top:0,left:0})},p.offset={bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;return p.support.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(p.css(a,"marginTop"))||0,c+=parseFloat(p.css(a,"marginLeft"))||0),{top:b,left:c}},setOffset:function(a,b,c){var d=p.css(a,"position");d==="static"&&(a.style.position="relative");var e=p(a),f=e.offset(),g=p.css(a,"top"),h=p.css(a,"left"),i=(d==="absolute"||d==="fixed")&&p.inArray("auto",[g,h])>-1,j={},k={},l,m;i?(k=e.position(),l=k.top,m=k.left):(l=parseFloat(g)||0,m=parseFloat(h)||0),p.isFunction(b)&&(b=b.call(a,c,f)),b.top!=null&&(j.top=b.top-f.top+l),b.left!=null&&(j.left=b.left-f.left+m),"using"in b?b.using.call(a,j):e.css(j)}},p.fn.extend({position:function(){if(!this[0])return;var a=this[0],b=this.offsetParent(),c=this.offset(),d=c$.test(b[0].nodeName)?{top:0,left:0}:b.offset();return c.top-=parseFloat(p.css(a,"marginTop"))||0,c.left-=parseFloat(p.css(a,"marginLeft"))||0,d.top+=parseFloat(p.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(p.css(b[0],"borderLeftWidth"))||0,{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||e.body;while(a&&!c$.test(a.nodeName)&&p.css(a,"position")==="static")a=a.offsetParent;return a||e.body})}}),p.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,c){var d=/Y/.test(c);p.fn[a]=function(e){return p.access(this,function(a,e,f){var g=c_(a);if(f===b)return g?c in g?g[c]:g.document.documentElement[e]:a[e];g?g.scrollTo(d?p(g).scrollLeft():f,d?f:p(g).scrollTop()):a[e]=f},a,e,arguments.length,null)}}),p.each({Height:"height",Width:"width"},function(a,c){p.each({padding:"inner"+a,content:c,"":"outer"+a},function(d,e){p.fn[e]=function(e,f){var g=arguments.length&&(d||typeof e!="boolean"),h=d||(e===!0||f===!0?"margin":"border");return p.access(this,function(c,d,e){var f;return p.isWindow(c)?c.document.documentElement["client"+a]:c.nodeType===9?(f=c.documentElement,Math.max(c.body["scroll"+a],f["scroll"+a],c.body["offset"+a],f["offset"+a],f["client"+a])):e===b?p.css(c,d,e,h):p.style(c,d,e,h)},c,g?e:b,g)}})}),a.jQuery=a.$=p,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return p})})(window);
  
1/* Modernizr 2.6.1 (Custom Build) | MIT & BSD
2 * Build: http://modernizr.com/download/#-fontface-backgroundsize-borderimage-borderradius-boxshadow-flexbox-hsla-multiplebgs-opacity-rgba-textshadow-cssanimations-csscolumns-generatedcontent-cssgradients-cssreflections-csstransforms-csstransforms3d-csstransitions-applicationcache-canvas-canvastext-draganddrop-hashchange-history-audio-video-indexeddb-input-inputtypes-localstorage-postmessage-sessionstorage-websockets-websqldatabase-webworkers-geolocation-inlinesvg-smil-svg-svgclippaths-touch-webgl-shiv-mq-cssclasses-addtest-prefixed-teststyles-testprop-testallprops-hasevent-prefixes-domprefixes-load
3 */
4;window.Modernizr=function(a,b,c){function D(a){j.cssText=a}function E(a,b){return D(n.join(a+";")+(b||""))}function F(a,b){return typeof a===b}function G(a,b){return!!~(""+a).indexOf(b)}function H(a,b){for(var d in a){var e=a[d];if(!G(e,"-")&&j[e]!==c)return b=="pfx"?e:!0}return!1}function I(a,b,d){for(var e in a){var f=b[a[e]];if(f!==c)return d===!1?a[e]:F(f,"function")?f.bind(d||b):f}return!1}function J(a,b,c){var d=a.charAt(0).toUpperCase()+a.slice(1),e=(a+" "+p.join(d+" ")+d).split(" ");return F(b,"string")||F(b,"undefined")?H(e,b):(e=(a+" "+q.join(d+" ")+d).split(" "),I(e,b,c))}function K(){e.input=function(c){for(var d=0,e=c.length;d<e;d++)u[c[d]]=c[d]in k;return u.list&&(u.list=!!b.createElement("datalist")&&!!a.HTMLDataListElement),u}("autocomplete autofocus list placeholder max min multiple pattern required step".split(" ")),e.inputtypes=function(a){for(var d=0,e,f,h,i=a.length;d<i;d++)k.setAttribute("type",f=a[d]),e=k.type!=="text",e&&(k.value=l,k.style.cssText="position:absolute;visibility:hidden;",/^range$/.test(f)&&k.style.WebkitAppearance!==c?(g.appendChild(k),h=b.defaultView,e=h.getComputedStyle&&h.getComputedStyle(k,null).WebkitAppearance!=="textfield"&&k.offsetHeight!==0,g.removeChild(k)):/^(search|tel)$/.test(f)||(/^(url|email)$/.test(f)?e=k.checkValidity&&k.checkValidity()===!1:e=k.value!=l)),t[a[d]]=!!e;return t}("search tel url email datetime date month week time datetime-local number range color".split(" "))}var d="2.6.1",e={},f=!0,g=b.documentElement,h="modernizr",i=b.createElement(h),j=i.style,k=b.createElement("input"),l=":)",m={}.toString,n=" -webkit- -moz- -o- -ms- ".split(" "),o="Webkit Moz O ms",p=o.split(" "),q=o.toLowerCase().split(" "),r={svg:"http://www.w3.org/2000/svg"},s={},t={},u={},v=[],w=v.slice,x,y=function(a,c,d,e){var f,i,j,k=b.createElement("div"),l=b.body,m=l?l:b.createElement("body");if(parseInt(d,10))while(d--)j=b.createElement("div"),j.id=e?e[d]:h+(d+1),k.appendChild(j);return f=["&#173;",'<style id="s',h,'">',a,"</style>"].join(""),k.id=h,(l?k:m).innerHTML+=f,m.appendChild(k),l||(m.style.background="",g.appendChild(m)),i=c(k,a),l?k.parentNode.removeChild(k):m.parentNode.removeChild(m),!!i},z=function(b){var c=a.matchMedia||a.msMatchMedia;if(c)return c(b).matches;var d;return y("@media "+b+" { #"+h+" { position: absolute; } }",function(b){d=(a.getComputedStyle?getComputedStyle(b,null):b.currentStyle)["position"]=="absolute"}),d},A=function(){function d(d,e){e=e||b.createElement(a[d]||"div"),d="on"+d;var f=d in e;return f||(e.setAttribute||(e=b.createElement("div")),e.setAttribute&&e.removeAttribute&&(e.setAttribute(d,""),f=F(e[d],"function"),F(e[d],"undefined")||(e[d]=c),e.removeAttribute(d))),e=null,f}var a={select:"input",change:"input",submit:"form",reset:"form",error:"img",load:"img",abort:"img"};return d}(),B={}.hasOwnProperty,C;!F(B,"undefined")&&!F(B.call,"undefined")?C=function(a,b){return B.call(a,b)}:C=function(a,b){return b in a&&F(a.constructor.prototype[b],"undefined")},Function.prototype.bind||(Function.prototype.bind=function(b){var c=this;if(typeof c!="function")throw new TypeError;var d=w.call(arguments,1),e=function(){if(this instanceof e){var a=function(){};a.prototype=c.prototype;var f=new a,g=c.apply(f,d.concat(w.call(arguments)));return Object(g)===g?g:f}return c.apply(b,d.concat(w.call(arguments)))};return e}),s.flexbox=function(){return J("flexWrap")},s.canvas=function(){var a=b.createElement("canvas");return!!a.getContext&&!!a.getContext("2d")},s.canvastext=function(){return!!e.canvas&&!!F(b.createElement("canvas").getContext("2d").fillText,"function")},s.webgl=function(){return!!a.WebGLRenderingContext},s.touch=function(){var c;return"ontouchstart"in a||a.DocumentTouch&&b instanceof DocumentTouch?c=!0:y(["@media (",n.join("touch-enabled),("),h,")","{#modernizr{top:9px;position:absolute}}"].join(""),function(a){c=a.offsetTop===9}),c},s.geolocation=function(){return"geolocation"in navigator},s.postmessage=function(){return!!a.postMessage},s.websqldatabase=function(){return!!a.openDatabase},s.indexedDB=function(){return!!J("indexedDB",a)},s.hashchange=function(){return A("hashchange",a)&&(b.documentMode===c||b.documentMode>7)},s.history=function(){return!!a.history&&!!history.pushState},s.draganddrop=function(){var a=b.createElement("div");return"draggable"in a||"ondragstart"in a&&"ondrop"in a},s.websockets=function(){return"WebSocket"in a||"MozWebSocket"in a},s.rgba=function(){return D("background-color:rgba(150,255,150,.5)"),G(j.backgroundColor,"rgba")},s.hsla=function(){return D("background-color:hsla(120,40%,100%,.5)"),G(j.backgroundColor,"rgba")||G(j.backgroundColor,"hsla")},s.multiplebgs=function(){return D("background:url(https://),url(https://),red url(https://)"),/(url\s*\(.*?){3}/.test(j.background)},s.backgroundsize=function(){return J("backgroundSize")},s.borderimage=function(){return J("borderImage")},s.borderradius=function(){return J("borderRadius")},s.boxshadow=function(){return J("boxShadow")},s.textshadow=function(){return b.createElement("div").style.textShadow===""},s.opacity=function(){return E("opacity:.55"),/^0.55$/.test(j.opacity)},s.cssanimations=function(){return J("animationName")},s.csscolumns=function(){return J("columnCount")},s.cssgradients=function(){var a="background-image:",b="gradient(linear,left top,right bottom,from(#9f9),to(white));",c="linear-gradient(left top,#9f9, white);";return D((a+"-webkit- ".split(" ").join(b+a)+n.join(c+a)).slice(0,-a.length)),G(j.backgroundImage,"gradient")},s.cssreflections=function(){return J("boxReflect")},s.csstransforms=function(){return!!J("transform")},s.csstransforms3d=function(){var a=!!J("perspective");return a&&"webkitPerspective"in g.style&&y("@media (transform-3d),(-webkit-transform-3d){#modernizr{left:9px;position:absolute;height:3px;}}",function(b,c){a=b.offsetLeft===9&&b.offsetHeight===3}),a},s.csstransitions=function(){return J("transition")},s.fontface=function(){var a;return y('@font-face {font-family:"font";src:url("https://")}',function(c,d){var e=b.getElementById("smodernizr"),f=e.sheet||e.styleSheet,g=f?f.cssRules&&f.cssRules[0]?f.cssRules[0].cssText:f.cssText||"":"";a=/src/i.test(g)&&g.indexOf(d.split(" ")[0])===0}),a},s.generatedcontent=function(){var a;return y(['#modernizr:after{content:"',l,'";visibility:hidden}'].join(""),function(b){a=b.offsetHeight>=1}),a},s.video=function(){var a=b.createElement("video"),c=!1;try{if(c=!!a.canPlayType)c=new Boolean(c),c.ogg=a.canPlayType('video/ogg; codecs="theora"').replace(/^no$/,""),c.h264=a.canPlayType('video/mp4; codecs="avc1.42E01E"').replace(/^no$/,""),c.webm=a.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/^no$/,"")}catch(d){}return c},s.audio=function(){var a=b.createElement("audio"),c=!1;try{if(c=!!a.canPlayType)c=new Boolean(c),c.ogg=a.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,""),c.mp3=a.canPlayType("audio/mpeg;").replace(/^no$/,""),c.wav=a.canPlayType('audio/wav; codecs="1"').replace(/^no$/,""),c.m4a=(a.canPlayType("audio/x-m4a;")||a.canPlayType("audio/aac;")).replace(/^no$/,"")}catch(d){}return c},s.localstorage=function(){try{return localStorage.setItem(h,h),localStorage.removeItem(h),!0}catch(a){return!1}},s.sessionstorage=function(){try{return sessionStorage.setItem(h,h),sessionStorage.removeItem(h),!0}catch(a){return!1}},s.webworkers=function(){return!!a.Worker},s.applicationcache=function(){return!!a.applicationCache},s.svg=function(){return!!b.createElementNS&&!!b.createElementNS(r.svg,"svg").createSVGRect},s.inlinesvg=function(){var a=b.createElement("div");return a.innerHTML="<svg/>",(a.firstChild&&a.firstChild.namespaceURI)==r.svg},s.smil=function(){return!!b.createElementNS&&/SVGAnimate/.test(m.call(b.createElementNS(r.svg,"animate")))},s.svgclippaths=function(){return!!b.createElementNS&&/SVGClipPath/.test(m.call(b.createElementNS(r.svg,"clipPath")))};for(var L in s)C(s,L)&&(x=L.toLowerCase(),e[x]=s[L](),v.push((e[x]?"":"no-")+x));return e.input||K(),e.addTest=function(a,b){if(typeof a=="object")for(var d in a)C(a,d)&&e.addTest(d,a[d]);else{a=a.toLowerCase();if(e[a]!==c)return e;b=typeof b=="function"?b():b,f&&(g.className+=" "+(b?"":"no-")+a),e[a]=b}return e},D(""),i=k=null,function(a,b){function k(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x<style>"+b+"</style>",d.insertBefore(c.lastChild,d.firstChild)}function l(){var a=r.elements;return typeof a=="string"?a.split(" "):a}function m(a){var b=i[a[g]];return b||(b={},h++,a[g]=h,i[h]=b),b}function n(a,c,f){c||(c=b);if(j)return c.createElement(a);f||(f=m(c));var g;return f.cache[a]?g=f.cache[a].cloneNode():e.test(a)?g=(f.cache[a]=f.createElem(a)).cloneNode():g=f.createElem(a),g.canHaveChildren&&!d.test(a)?f.frag.appendChild(g):g}function o(a,c){a||(a=b);if(j)return a.createDocumentFragment();c=c||m(a);var d=c.frag.cloneNode(),e=0,f=l(),g=f.length;for(;e<g;e++)d.createElement(f[e]);return d}function p(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return r.shivMethods?n(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+l().join().replace(/\w+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(r,b.frag)}function q(a){a||(a=b);var c=m(a);return r.shivCSS&&!f&&!c.hasCSS&&(c.hasCSS=!!k(a,"article,aside,figcaption,figure,footer,header,hgroup,nav,section{display:block}mark{background:#FF0;color:#000}")),j||p(a,c),a}var c=a.html5||{},d=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,e=/^<|^(?:a|b|button|code|div|fieldset|form|h1|h2|h3|h4|h5|h6|i|iframe|img|input|label|li|link|ol|option|p|param|q|script|select|span|strong|style|table|tbody|td|textarea|tfoot|th|thead|tr|ul)$/i,f,g="_html5shiv",h=0,i={},j;(function(){try{var a=b.createElement("a");a.innerHTML="<xyz></xyz>",f="hidden"in a,j=a.childNodes.length==1||function(){b.createElement("a");var a=b.createDocumentFragment();return typeof a.cloneNode=="undefined"||typeof a.createDocumentFragment=="undefined"||typeof a.createElement=="undefined"}()}catch(c){f=!0,j=!0}})();var r={elements:c.elements||"abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video",shivCSS:c.shivCSS!==!1,supportsUnknownElements:j,shivMethods:c.shivMethods!==!1,type:"default",shivDocument:q,createElement:n,createDocumentFragment:o};a.html5=r,q(b)}(this,b),e._version=d,e._prefixes=n,e._domPrefixes=q,e._cssomPrefixes=p,e.mq=z,e.hasEvent=A,e.testProp=function(a){return H([a])},e.testAllProps=J,e.testStyles=y,e.prefixed=function(a,b,c){return b?J(a,b,c):J(a,"pfx")},g.className=g.className.replace(/(^|\s)no-js(\s|$)/,"$1$2")+(f?" js "+v.join(" "):""),e}(this,this.document),function(a,b,c){function d(a){return o.call(a)=="[object Function]"}function e(a){return typeof a=="string"}function f(){}function g(a){return!a||a=="loaded"||a=="complete"||a=="uninitialized"}function h(){var a=p.shift();q=1,a?a.t?m(function(){(a.t=="c"?B.injectCss:B.injectJs)(a.s,0,a.a,a.x,a.e,1)},0):(a(),h()):q=0}function i(a,c,d,e,f,i,j){function k(b){if(!o&&g(l.readyState)&&(u.r=o=1,!q&&h(),l.onload=l.onreadystatechange=null,b)){a!="img"&&m(function(){t.removeChild(l)},50);for(var d in y[c])y[c].hasOwnProperty(d)&&y[c][d].onload()}}var j=j||B.errorTimeout,l={},o=0,r=0,u={t:d,s:c,e:f,a:i,x:j};y[c]===1&&(r=1,y[c]=[],l=b.createElement(a)),a=="object"?l.data=c:(l.src=c,l.type=a),l.width=l.height="0",l.onerror=l.onload=l.onreadystatechange=function(){k.call(this,r)},p.splice(e,0,u),a!="img"&&(r||y[c]===2?(t.insertBefore(l,s?null:n),m(k,j)):y[c].push(l))}function j(a,b,c,d,f){return q=0,b=b||"j",e(a)?i(b=="c"?v:u,a,b,this.i++,c,d,f):(p.splice(this.i++,0,a),p.length==1&&h()),this}function k(){var a=B;return a.loader={load:j,i:0},a}var l=b.documentElement,m=a.setTimeout,n=b.getElementsByTagName("script")[0],o={}.toString,p=[],q=0,r="MozAppearance"in l.style,s=r&&!!b.createRange().compareNode,t=s?l:n.parentNode,l=a.opera&&o.call(a.opera)=="[object Opera]",l=!!b.attachEvent&&!l,u=r?"object":l?"script":"img",v=l?"script":u,w=Array.isArray||function(a){return o.call(a)=="[object Array]"},x=[],y={},z={timeout:function(a,b){return b.length&&(a.timeout=b[0]),a}},A,B;B=function(a){function b(a){var a=a.split("!"),b=x.length,c=a.pop(),d=a.length,c={url:c,origUrl:c,prefixes:a},e,f,g;for(f=0;f<d;f++)g=a[f].split("="),(e=z[g.shift()])&&(c=e(c,g));for(f=0;f<b;f++)c=x[f](c);return c}function g(a,e,f,g,i){var j=b(a),l=j.autoCallback;j.url.split(".").pop().split("?").shift(),j.bypass||(e&&(e=d(e)?e:e[a]||e[g]||e[a.split("/").pop().split("?")[0]]||h),j.instead?j.instead(a,e,f,g,i):(y[j.url]?j.noexec=!0:y[j.url]=1,f.load(j.url,j.forceCSS||!j.forceJS&&"css"==j.url.split(".").pop().split("?").shift()?"c":c,j.noexec,j.attrs,j.timeout),(d(e)||d(l))&&f.load(function(){k(),e&&e(j.origUrl,i,g),l&&l(j.origUrl,i,g),y[j.url]=2})))}function i(a,b){function c(a,c){if(a){if(e(a))c||(j=function(){var a=[].slice.call(arguments);k.apply(this,a),l()}),g(a,j,b,0,h);else if(Object(a)===a)for(n in m=function(){var b=0,c;for(c in a)a.hasOwnProperty(c)&&b++;return b}(),a)a.hasOwnProperty(n)&&(!c&&!--m&&(d(j)?j=function(){var a=[].slice.call(arguments);k.apply(this,a),l()}:j[n]=function(a){return function(){var b=[].slice.call(arguments);a&&a.apply(this,b),l()}}(k[n])),g(a[n],j,b,n,h))}else!c&&l()}var h=!!a.test,i=a.load||a.both,j=a.callback||f,k=j,l=a.complete||f,m,n;c(h?a.yep:a.nope,!!i),i&&c(i)}var j,l,m=this.yepnope.loader;if(e(a))g(a,0,m,0);else if(w(a))for(j=0;j<a.length;j++)l=a[j],e(l)?g(l,0,m,0):w(l)?B(l):Object(l)===l&&i(l,m);else Object(a)===a&&i(a,m)},B.addPrefix=function(a,b){z[a]=b},B.addFilter=function(a){x.push(a)},B.errorTimeout=1e4,b.readyState==null&&b.addEventListener&&(b.readyState="loading",b.addEventListener("DOMContentLoaded",A=function(){b.removeEventListener("DOMContentLoaded",A,0),b.readyState="complete"},0)),a.yepnope=k(),a.yepnope.executeStack=h,a.yepnope.injectJs=function(a,c,d,e,i,j){var k=b.createElement("script"),l,o,e=e||B.errorTimeout;k.src=a;for(o in d)k.setAttribute(o,d[o]);c=j?h:c||f,k.onreadystatechange=k.onload=function(){!l&&g(k.readyState)&&(l=1,c(),k.onload=k.onreadystatechange=null)},m(function(){l||(l=1,c(1))},e),i?k.onload():n.parentNode.insertBefore(k,n)},a.yepnope.injectCss=function(a,c,d,e,g,i){var e=b.createElement("link"),j,c=i?h:c||f;e.href=a,e.rel="stylesheet",e.type="text/css";for(j in d)e.setAttribute(j,d[j]);g||(n.parentNode.insertBefore(e,n),m(c,0))}}(this,document),Modernizr.load=function(){yepnope.apply(window,[].slice.call(arguments,0))};
robots.txt
(3 / 0)
  
1# robotstxt.org/
2
3User-agent: *