[
  {
    "path": ".bowerrc",
    "content": "{\n    \"directory\": \"src/bower_components\"\n}\n"
  },
  {
    "path": ".gitignore",
    "content": "dist/*.zip\ndoc/fonts\ndoc/scripts\nnode_modules\nreport\nsrc/bower_components\n"
  },
  {
    "path": ".jshintrc",
    "content": "{\n    \"bitwise\": true,\n    \"browser\": true,\n    \"camelcase\": true,\n    \"curly\": true,\n    \"eqeqeq\": true,\n\t\"forin\": true,\n\t\"freeze\": true,\n    \"immed\": true,\n    \"indent\": 4,\n    \"jquery\": true,\n    \"latedef\": true,\n    \"newcap\": true,\n    \"noarg\": true,\n\t\"nonew\": true,\n    \"quotmark\": \"single\",\n    \"strict\": true,\n    \"undef\": true,\n\t\"unused\": true\n}\n"
  },
  {
    "path": "Gruntfile.js",
    "content": "'use strict';\n\nmodule.exports = function (grunt) {\n\trequire('matchdep').filterDev('grunt-*').forEach(grunt.loadNpmTasks);\n\n\tvar config = {\n\t\tpkg: grunt.file.readJSON('package.json'),\n\t\tclean: {\n\t\t\tbuild: ['dist/*', 'doc/*', 'report/*', 'temp/*'],\n\t\t\ttests: ['test/*.min.tests.html']\n\t\t},\n\t\tcopy: {\n\t\t\tdist: {\n\t\t\t\tfiles: [\n\t\t\t\t\t{\n\t\t\t\t\t\texpand: true,\n\t\t\t\t\t\tcwd: 'src',\n\t\t\t\t\t\tsrc: ['*.html', 'css/*.*', 'img/*.*', 'js/*.*'],\n\t\t\t\t\t\tdest: 'dist'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\texpand: true,\n\t\t\t\t\t\tcwd: 'src/bower_components/kbw-plugin/dist/js',\n\t\t\t\t\t\tsrc: ['*.*'],\n\t\t\t\t\t\tdest: 'dist/js'\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\t},\n\t\tjsdoc: {\n\t\t\toptions: {\n\t\t\t\tdestination: 'doc'\n\t\t\t},\n\t\t\tall: ['src/js/*.js', '!src/js/*-*.js']\n\t\t},\n\t\tjshint: {\n\t\t\toptions: {\n\t\t\t\tjshintrc: true\n\t\t\t},\n\t\t\tall: ['src/js/*.js']\n\t\t},\n\t\tqunit: {\n\t\t\toptions: {\n\t\t\t\tcoverage: {\n\t\t\t\t\tdisposeCollector: true,\n\t\t\t\t\tsrc: ['src/js/*.js', '!src/js/*-*.js'],\n\t\t\t\t\tinstrumentedFiles: 'temp/',\n\t\t\t\t\thtmlReport: 'report/',\n\t\t\t\t\tlinesThresholdPct: 95,\n\t\t\t\t\tstatementsThresholdPct: 95,\n\t\t\t\t\tfunctionsThresholdPct: 95,\n\t\t\t\t\tbranchesThresholdPct: 80\n\t\t\t\t}\n\t\t\t},\n\t\t\tall: ['test/*.html']\n\t\t},\n\t\treplace: {\n\t\t\tdist: {\n\t\t\t\tsrc: ['dist/index.html'],\n\t\t\t\tdest: 'dist/index.html',\n\t\t\t\treplacements: [\n\t\t\t\t\t{\n\t\t\t\t\t\tfrom: /bower_components\\/jquery\\/dist\\/jquery.min.js/,\n\t\t\t\t\t\tto: 'http://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tfrom: /bower_components\\/kbw-plugin\\/dist\\/js\\/jquery.plugin.min.js/,\n\t\t\t\t\t\tto: 'js/jquery.plugin.min.js'\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\ttestmin: {\n\t\t\t\tsrc: ['test/countdown.tests.html'],\n\t\t\t\tdest: 'test/countdown.min.tests.html',\n\t\t\t\treplacements: [\n\t\t\t\t    {\n\t\t\t\t\t\tfrom: /src\\/js\\/jquery\\.(.*)\\.js/g,\n\t\t\t\t\t\tto: 'dist/js/jquery.$1.min.js'\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\t},\n\t\tuglify: {\n\t\t\toptions: {\n\t\t\t\tpreserveComments: 'some',\n\t\t\t\tsourceMap: true\n\t\t\t},\n\t\t\tplugin: {\n\t\t\t\tfiles: [\n\t\t\t\t\t{\n\t\t\t\t\t\texpand: true,\n\t\t\t\t\t\tcwd: 'src/js',\n\t\t\t\t\t\tsrc: ['*.js', '!*-*.js'],\n\t\t\t\t\t\tdest: 'dist/js',\n\t\t\t\t\t\text: '.min.js',\n\t\t\t\t\t\textDot: 'last'\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\t},\n\t\tzip: {\n\t\t\tall: {\n\t\t\t\tcwd: 'dist',\n\t\t\t\tsrc: ['dist/*.html', 'dist/css/*.*', 'dist/img/*.*', 'dist/js/*.*'],\n\t\t\t\tdest: 'dist/jquery.countdown.package-<%= pkg.version %>.zip'\n\t\t\t}\n\t\t}\n\t};\n\t\n\tgrunt.initConfig(config);\n\n\tgrunt.registerTask('dist', [\n\t\t'copy:dist',\n\t\t'replace:dist',\n\t\t'zip'\n\t]);\n\n\tgrunt.registerTask('test', [\n\t\t'replace:testmin',\n\t\t'qunit',\n\t\t'clean:tests'\n\t]);\n\n\tgrunt.registerTask('default', [\n\t\t'clean:build',\n\t\t'jshint',\n\t\t'uglify',\n\t\t'test',\n\t\t'jsdoc',\n\t\t'dist'\n\t]);\n};\n"
  },
  {
    "path": "README.md",
    "content": "jQuery Countdown\n================\n\nThis plugin sets a div or span to show a countdown to a given time.\n\n* Standard or compact formats, or create your own layout.\n* Decide which periods to show.\n* Count up from a date/time instead.\n* Cater for timezone differences and synchronise with server time.\n* Over 50 localisations.\n\nHave a look at the plugin Web site, http://keith-wood.name/countdown.html, for demonstrations of its abilities.\n\nFor documentation on the functionality see http://keith-wood.name/countdownRef.html.\n"
  },
  {
    "path": "bower.json",
    "content": "{\n\t\"name\": \"kbw-countdown\",\n\t\"description\": \"This plugin sets a div or span to show a countdown to a given time.\",\n\t\"keywords\": [\n\t\t\"countdown\",\n\t\t\"jQuery\",\n\t\t\"localisation\",\n\t\t\"timer\"\n\t],\n\t\"homepage\": \"https://github.com/kbwood/countdown\",\n\t\"authors\": [\n\t\t\"Keith Wood <wood.keith@optusnet.com.au> (http://keith-wood.name)\"\n\t],\n\t\"licence\": \"MIT\",\n\t\"main\": [\n\t\t\"src/css/jquery.countdown.css\",\n\t\t\"src/js/jquery.countdown.js\"\n\t],\n\t\"ignore\": [\n\t\t\"**/.*\",\n\t\t\"node_modules\",\n\t\t\"src/bower_components\"\n\t],\n\t\"dependencies\": {\n\t\t\"jquery\": \">=1.12.0\",\n\t\t\"kbw-plugin\": \"~1.0.3\"\n\t},\n\t\"devDependencies\": {\n\t\t\"qunit\": \"~1.23\",\n\t\t\"sinon\": \"http://sinonjs.org/releases/sinon-1.17.5.js\"\n\t}\n}\n"
  },
  {
    "path": "dist/css/jquery.countdown.css",
    "content": "/* jQuery Countdown styles 2.0.0. */\n.is-countdown {\n\tborder: 1px solid #ccc;\n\tbackground-color: #eee;\n}\n.countdown-rtl {\n\tdirection: rtl;\n}\n.countdown-holding span {\n\tcolor: #888;\n}\n.countdown-row {\n\tclear: both;\n\twidth: 100%;\n\tpadding: 0px 2px;\n\ttext-align: center;\n}\n.countdown-show1 .countdown-section {\n\twidth: 98%;\n}\n.countdown-show2 .countdown-section {\n\twidth: 48%;\n}\n.countdown-show3 .countdown-section {\n\twidth: 32.5%;\n}\n.countdown-show4 .countdown-section {\n\twidth: 24.5%;\n}\n.countdown-show5 .countdown-section {\n\twidth: 19.5%;\n}\n.countdown-show6 .countdown-section {\n\twidth: 16.25%;\n}\n.countdown-show7 .countdown-section {\n\twidth: 14%;\n}\n.countdown-section {\n\tdisplay: block;\n\tfloat: left;\n\tfont-size: 75%;\n\ttext-align: center;\n}\n.countdown-amount {\n    font-size: 200%;\n}\n.countdown-period {\n    display: block;\n}\n.countdown-descr {\n\tdisplay: block;\n\twidth: 100%;\n}\n"
  },
  {
    "path": "dist/index.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\">\n<title>jQuery Countdown</title>\n<link rel=\"stylesheet\" href=\"css/jquery.countdown.css\">\n<style type=\"text/css\">\n#defaultCountdown { width: 240px; height: 45px; }\n</style>\n<script src=\"http://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js\"></script>\n<script src=\"js/jquery.plugin.min.js\"></script>\n<script src=\"js/jquery.countdown.js\"></script>\n<script>\n$(function () {\n\tvar austDay = new Date();\n\taustDay = new Date(austDay.getFullYear() + 1, 1 - 1, 26);\n\t$('#defaultCountdown').countdown({until: austDay});\n\t$('#year').text(austDay.getFullYear());\n});\n</script>\n</head>\n<body>\n<h1>jQuery Countdown Basics</h1>\n<p>This page demonstrates the very basics of the\n\t<a href=\"http://keith-wood.name/countdown.html\">jQuery Countdown plugin</a>.\n\tIt contains the minimum requirements for using the plugin and\n\tcan be used as the basis for your own experimentation.</p>\n<p>For more detail see the <a href=\"http://keith-wood.name/countdownRef.html\">documentation reference</a> page.</p>\n<p>Counting down to 26 January <span id=\"year\">2014</span>.</p>\n<div id=\"defaultCountdown\"></div>\n<dl>\n\t<dt>Github</dt><dd><a href=\"https://github.com/kbwood/countdown\">https://github.com/kbwood/countdown</a></dd>\n\t<dt>Bower</dt><dd>kbw-countdown</dd>\n</dl>\n</body>\n</html>\n"
  },
  {
    "path": "dist/js/jquery.countdown-ar.js",
    "content": "/* http://keith-wood.name/countdown.html\n   Arabic (عربي) initialisation for the jQuery countdown extension\n   Translated by Talal Al Asmari (talal@psdgroups.com), April 2009. */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.ar = {\n\t\tlabels: ['سنوات','أشهر','أسابيع','أيام','ساعات','دقائق','ثواني'],\n\t\tlabels1: ['سنة','شهر','أسبوع','يوم','ساعة','دقيقة','ثانية'],\n\t\tcompactLabels: ['س','ش','أ','ي'],\n\t\twhichLabels: null,\n\t\tdigits: ['٠','١','٢','٣','٤','٥','٦','٧','٨','٩'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: true\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.ar);\n})(jQuery);\n"
  },
  {
    "path": "dist/js/jquery.countdown-bg.js",
    "content": "/* http://keith-wood.name/countdown.html\n * Bulgarian initialisation for the jQuery countdown extension\n * Written by Manol Trendafilov manol@rastermania.com (2010) */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.bg = {\n\t\tlabels: ['Години','Месеца','Седмица','Дни','Часа','Минути','Секунди'],\n\t\tlabels1: ['Година','Месец','Седмица','Ден','Час','Минута','Секунда'],\n\t\tcompactLabels: ['l','m','n','d'],\n\t\tcompactLabels1: ['g','m','n','d'],\n\t\twhichLabels: null,\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.bg);\n})(jQuery);\n"
  },
  {
    "path": "dist/js/jquery.countdown-bn.js",
    "content": "/* http://keith-wood.name/countdown.html\n * Bengali/Bangla initialisation for the jQuery countdown extension\n * Written by Mohammed Tajuddin (tajuddin@chittagong-it.com) Jan 2011. */\n(function($) {\n\t'use strict';\n    $.countdown.regionalOptions.bn = {\n        labels: ['বছর','মাস','সপ্তাহ','দিন','ঘন্টা','মিনিট','সেকেন্ড'],\n        labels1: ['বছর','মাস','সপ্তাহ','দিন','ঘন্টা','মিনিট','সেকেন্ড'],\n        compactLabels: ['ব','মা','স','দি'],\n        whichLabels: null,\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n        timeSeparator: ':',\n\t\tisRTL: false\n    };\n    $.countdown.setDefaults($.countdown.regionalOptions.bn);\n})(jQuery);"
  },
  {
    "path": "dist/js/jquery.countdown-bs.js",
    "content": "/* http://keith-wood.name/countdown.html\n * Bosnian Latin initialisation for the jQuery countdown extension\n * Written by Miralem Mehic miralem@mehic.info (2011) */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.bs = {\n\t\tlabels: ['Godina','Mjeseci','Sedmica','Dana','Sati','Minuta','Sekundi'],\n\t\tlabels1: ['Godina','Mjesec','Sedmica','Dan','Sat','Minuta','Sekunda'],\n\t\tlabels2: ['Godine','Mjeseca','Sedmica','Dana','Sata','Minute','Sekunde'],\n\t\tcompactLabels: ['g','m','t','d'],\n\t\twhichLabels: function(amount) {\n\t\t\treturn (amount === 1 ? 1 : (amount >= 2 && amount <= 4 ? 2 : 0));\n\t\t},\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.bs);\n})(jQuery);\n"
  },
  {
    "path": "dist/js/jquery.countdown-ca.js",
    "content": "/* http://keith-wood.name/countdown.html\n   Catalan initialisation for the jQuery countdown extension\n   Written by Amanida Media www.amanidamedia.com (2010) */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.ca = {\n\t\tlabels: ['Anys','Mesos','Setmanes','Dies','Hores','Minuts','Segons'],\n\t\tlabels1: ['Anys','Mesos','Setmanes','Dies','Hores','Minuts','Segons'],\n\t\tcompactLabels: ['a','m','s','g'],\n\t\twhichLabels: null,\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.ca);\n})(jQuery);\n"
  },
  {
    "path": "dist/js/jquery.countdown-cs.js",
    "content": "/* http://keith-wood.name/countdown.html\n * Czech initialisation for the jQuery countdown extension\n * Written by Roman Chlebec (creamd@c64.sk) (2008) */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.cs = {\n\t\tlabels: ['Roků','Měsíců','Týdnů','Dní','Hodin','Minut','Sekund'],\n\t\tlabels1: ['Rok','Měsíc','Týden','Den','Hodina','Minuta','Sekunda'],\n\t\tlabels2: ['Roky','Měsíce','Týdny','Dny','Hodiny','Minuty','Sekundy'],\n\t\tcompactLabels: ['r','m','t','d'],\n\t\twhichLabels: function(amount) {\n\t\t\treturn (amount === 1 ? 1 : (amount >= 2 && amount <= 4 ? 2 : 0));\n\t\t},\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.cs);\n})(jQuery);\n"
  },
  {
    "path": "dist/js/jquery.countdown-cy.js",
    "content": "/* http://keith-wood.name/countdown.html\r   Welsh initialisation for the jQuery countdown extension\r   Written by Gareth Jones | http://garethvjones.com | October 2011. */\r(function($) {\r\t'use strict';\r\t$.countdown.regionalOptions.cy = {\r\t\tlabels: ['Blynyddoedd','Mis','Wythnosau','Diwrnodau','Oriau','Munudau','Eiliadau'],\r\t\tlabels1: ['Blwyddyn','Mis','Wythnos','Diwrnod','Awr','Munud','Eiliad'],\r\t\tcompactLabels: ['b','m','w','d'],\r\t\twhichLabels: null,\r\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\r\t\ttimeSeparator: ':',\r\n\t\tisRTL: false\r\t};\r\t$.countdown.setDefaults($.countdown.regionalOptions.cy);\r})(jQuery);\r"
  },
  {
    "path": "dist/js/jquery.countdown-da.js",
    "content": "/* http://keith-wood.name/countdown.html\n   Danish initialisation for the jQuery countdown extension\n   Written by Buch (admin@buch90.dk). */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.da = {\n\t\tlabels: ['År','Måneder','Uger','Dage','Timer','Minutter','Sekunder'],\n\t\tlabels1: ['År','Måned','Uge','Dag','Time','Minut','Sekund'],\n\t\tcompactLabels: ['Å','M','U','D'],\n\t\twhichLabels: null,\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.da);\n})(jQuery);\n"
  },
  {
    "path": "dist/js/jquery.countdown-de.js",
    "content": "/* http://keith-wood.name/countdown.html\n   German initialisation for the jQuery countdown extension\n   Written by Samuel Wulf. */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.de = {\n\t\tlabels: ['Jahre','Monate','Wochen','Tage','Stunden','Minuten','Sekunden'],\n\t\tlabels1: ['Jahr','Monat','Woche','Tag','Stunde','Minute','Sekunde'],\n\t\tcompactLabels: ['J','M','W','T'],\n\t\twhichLabels: null,\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.de);\n})(jQuery);\n"
  },
  {
    "path": "dist/js/jquery.countdown-el.js",
    "content": "/* http://keith-wood.name/countdown.html\n   Greek initialisation for the jQuery countdown extension\n   Written by Philip. */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.el = {\n\t\tlabels: ['Χρόνια','Μήνες','Εβδομάδες','Μέρες','Ώρες','Λεπτά','Δευτερόλεπτα'],\n\t\tlabels1: ['Χρόνος','Μήνας','Εβδομάδα','Ημέρα','Ώρα','Λεπτό','Δευτερόλεπτο'],\n\t\tcompactLabels: ['Χρ.','Μην.','Εβδ.','Ημ.'],\n\t\twhichLabels: null,\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.el);\n})(jQuery);"
  },
  {
    "path": "dist/js/jquery.countdown-es.js",
    "content": "/* http://keith-wood.name/countdown.html\n * Spanish initialisation for the jQuery countdown extension\n * Written by Sergio Carracedo Martinez webmaster@neodisenoweb.com (2008) */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.es = {\n\t\tlabels: ['Años','Meses','Semanas','Días','Horas','Minutos','Segundos'],\n\t\tlabels1: ['Año','Mes','Semana','Día','Hora','Minuto','Segundo'],\n\t\tcompactLabels: ['a','m','s','d'],\n\t\twhichLabels: null,\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.es);\n})(jQuery);\n"
  },
  {
    "path": "dist/js/jquery.countdown-et.js",
    "content": "/* http://keith-wood.name/countdown.html\n   Estonian initialisation for the jQuery countdown extension\n   Written by Helmer <helmer{at}city.ee> */\n(function($) {\n\t'use strict';\n    $.countdown.regionalOptions.et = {\n        labels: ['Aastat','Kuud','Nädalat','Päeva','Tundi','Minutit','Sekundit'],\n        labels1: ['Aasta','Kuu','Nädal','Päev','Tund','Minut','Sekund'],\n        compactLabels: ['a','k','n','p'],\n        whichLabels: null,\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n        timeSeparator: ':',\n\t\tisRTL: false\n\t};\n    $.countdown.setDefaults($.countdown.regionalOptions.et);\n})(jQuery);\n"
  },
  {
    "path": "dist/js/jquery.countdown-fa.js",
    "content": "/* http://keith-wood.name/countdown.html\n   Persian (فارسی) initialisation for the jQuery countdown extension\n   Written by Alireza Ziaie (ziai@magfa.com) Oct 2008.\n   Digits corrected by Hamed Ramezanian Feb 2013. */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.fa = {\n\t\tlabels: ['سال','ماه','هفته','روز','ساعت','دقیقه','ثانیه'],\n\t\tlabels1: ['سال','ماه','هفته','روز','ساعت','دقیقه','ثانیه'],\n\t\tcompactLabels: ['س','م','ه','ر'],\n\t\twhichLabels: null,\n\t\tdigits: ['۰','۱','۲','۳','۴','۵','۶','۷','۸','۹'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: true\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.fa);\n})(jQuery);\n"
  },
  {
    "path": "dist/js/jquery.countdown-fi.js",
    "content": "/* http://keith-wood.name/countdown.html\n   Finnish initialisation for the jQuery countdown extension\n   Written by Kalle Vänskä and Juha Suni (juhis.suni@gmail.com). Corrected by Olli. */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.fi = {\n\t\tlabels: ['vuotta','kuukautta','viikkoa','päivää','tuntia','minuuttia','sekuntia'],\n\t\tlabels1: ['vuosi','kuukausi','viikko','päivä','tunti','minuutti','sekunti'],\n\t\tcompactLabels: ['v','kk','vk','pv'],\n\t\twhichLabels: null,\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.fi);\n})(jQuery);"
  },
  {
    "path": "dist/js/jquery.countdown-fo.js",
    "content": "/* http://keith-wood.name/countdown.html\n   Faroese initialisation for the jQuery countdown extension\n   Written by Kasper Friis Christensen (kasper@friischristensen.com). */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.fo = {\n\t\tlabels: ['Ár','Mánaðir','Vikur','Dagar','Tímar','Minuttir','Sekund'],\n\t\tlabels1: ['Ár','Mánaður','Vika','Dagur','Tími','Minuttur','Sekund'],\n\t\tcompactLabels: ['Á','M','V','D'],\n\t\twhichLabels: null,\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.fo);\n})(jQuery);\n"
  },
  {
    "path": "dist/js/jquery.countdown-fr.js",
    "content": "/* http://keith-wood.name/countdown.html\n   French initialisation for the jQuery countdown extension\n   Written by Keith Wood (wood.keith{at}optusnet.com.au) Jan 2008. */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.fr = {\n\t\tlabels: ['Années','Mois','Semaines','Jours','Heures','Minutes','Secondes'],\n\t\tlabels1: ['Année','Mois','Semaine','Jour','Heure','Minute','Seconde'],\n\t\tcompactLabels: ['a','m','s','j'],\n\t\twhichLabels: function(amount) {\n            return (amount > 1 ? 0 : 1);\n        },\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.fr);\n})(jQuery);\n"
  },
  {
    "path": "dist/js/jquery.countdown-gl.js",
    "content": "/* http://keith-wood.name/countdown.html\n * Galician initialisation for the jQuery countdown extension\n * Written by Moncho Pena ramon.pena.rodriguez@gmail.com (2009) and Angel Farrapeira */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.gl = {\n\t\tlabels: ['Anos','Meses','Semanas','Días','Horas','Minutos','Segundos'],\n\t\tlabels1: ['Ano','Mes','Semana','Día','Hora','Minuto','Segundo'],\n\t\tcompactLabels: ['a','m','s','g'],\n\t\twhichLabels: null,\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.gl);\n})(jQuery);"
  },
  {
    "path": "dist/js/jquery.countdown-gu.js",
    "content": "/* http://keith-wood.name/countdown.html\n * Gujarati initialization for the jQuery countdown extension\n * Written by Sahil Jariwala jariwala.sahil@gmail.com (2012) */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.gu = {\n\t\tlabels: ['વર્ષ','મહિનો','અઠવાડિયા','દિવસ','કલાક','મિનિટ','સેકન્ડ'],\n\t\tlabels1: ['વર્ષ','મહિનો','અઠવાડિયા','દિવસ','કલાક','મિનિટ','સેકન્ડ'],\n\t\tcompactLabels: ['વ','મ','અ','દિ'],\n\t\twhichLabels: null,\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.gu);\n})(jQuery);\n"
  },
  {
    "path": "dist/js/jquery.countdown-he.js",
    "content": "/* http://keith-wood.name/countdown.html\n * Hebrew initialisation for the jQuery countdown extension\n * Translated by Nir Livne, Dec 2008 */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.he = {\n\t\tlabels: ['שנים','חודשים','שבועות','ימים','שעות','דקות','שניות'],\n\t\tlabels1: ['שנה','חודש','שבוע','יום','שעה','דקה','שנייה'],\n\t\tcompactLabels: ['שנ','ח','שב','י'],\n\t\twhichLabels: null,\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: true\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.he);\n})(jQuery);\n"
  },
  {
    "path": "dist/js/jquery.countdown-hr.js",
    "content": "/* http://keith-wood.name/countdown.html\n * Croatian l10n for the jQuery countdown plugin\n * Written by Dejan Broz info@hqfactory.com (2011)\n * Improved by zytzagoo (2014) */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.hr = {\n\t\tlabels: ['Godina','Mjeseci','Tjedana','Dana','Sati','Minuta','Sekundi'], // plurals\n\t\tlabels1: ['Godina','Mjesec','Tjedan','Dan','Sat','Minutu','Sekundu'], // singles\n\t\tlabels2: ['Godine','Mjeseca','Tjedana','Dana','Sata','Minute','Sekunde'], // paucals\n\t\tcompactLabels: ['g','m','t','d'],\n\t\twhichLabels: function(amount){\n\t\t\tamount = parseInt(amount, 10);\n\t\t\tif (amount % 10 === 1 && amount % 100 !== 11) {\n\t\t\t\treturn 1; // singles (/.*1$/ && ! /.*11$/)\n\t\t\t}\n\t\t\tif (amount % 10 >= 2 && amount % 10 <= 4 && (amount % 100 < 10 || amount % 100 >= 20)) {\n\t\t\t\treturn 2; // paucals (/.*[234]$/ && ! /.*1[234]$/\n\t\t\t}\n\t\t\treturn 0; // default plural (most common case)\n\t\t},\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.hr);\n})(jQuery);\n"
  },
  {
    "path": "dist/js/jquery.countdown-hu.js",
    "content": "/* http://keith-wood.name/countdown.html\n * Hungarian initialisation for the jQuery countdown extension\n * Written by Edmond L. (webmond@gmail.com). */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.hu = {\n\t\tlabels: ['Év','Hónap','Hét','Nap','Óra','Perc','Másodperc'],\n\t\tlabels1: ['Év','Hónap','Hét','Nap','Óra','Perc','Másodperc'],\n\t\tcompactLabels: ['É','H','Hé','N'],\n\t\twhichLabels: null,\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.hu);\n})(jQuery);\n"
  },
  {
    "path": "dist/js/jquery.countdown-hy.js",
    "content": "/* http://keith-wood.name/countdown.html\n * Armenian initialisation for the jQuery countdown extension\n * Written by Artur Martirosyan. (artur{at}zoom.am) October 2011. */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.hy = {\n\t\tlabels: ['Տարի','Ամիս','Շաբաթ','Օր','Ժամ','Րոպե','Վարկյան'],\n\t\tlabels1: ['Տարի','Ամիս','Շաբաթ','Օր','Ժամ','Րոպե','Վարկյան'],\n\t\tcompactLabels: ['տ','ա','շ','օ'], \n\t\twhichLabels: null,\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.hy);\n})(jQuery);\n"
  },
  {
    "path": "dist/js/jquery.countdown-id.js",
    "content": "/* http://keith-wood.name/countdown.html\n   Indonesian initialisation for the jQuery countdown extension\n   Written by Erwin Yonathan Jan 2009. */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.id = {\n\t\tlabels: ['tahun','bulan','minggu','hari','jam','menit','detik'],\n\t\tlabels1: ['tahun','bulan','minggu','hari','jam','menit','detik'],\n\t\tcompactLabels: ['t','b','m','h'],\n\t\twhichLabels: null,\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.id);\n})(jQuery);\n"
  },
  {
    "path": "dist/js/jquery.countdown-is.js",
    "content": "/* http://keith-wood.name/countdown.html\n   Icelandic initialisation for the jQuery countdown extension\n   Written by Róbert K. L. */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.is = {\n\t\tlabels: ['Ár','Mánuðir','Vikur','Dagar','Klukkustundir','Mínútur','Sekúndur'],\n\t\tlabels1: ['Ár','Mánuður','Vika','Dagur','Klukkustund','Mínúta','Sekúnda'],\n\t\tcompactLabels: ['ár.','mán.','vik.','dag.','klst.','mín.','sek.'],\n\t\twhichLabels: null,\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.is);\n})(jQuery);"
  },
  {
    "path": "dist/js/jquery.countdown-it.js",
    "content": "/* http://keith-wood.name/countdown.html\n * Italian initialisation for the jQuery countdown extension\n * Written by Davide Bellettini and Roberto Chiaveri Feb 2008. */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.it = {\n\t\tlabels: ['Anni','Mesi','Settimane','Giorni','Ore','Minuti','Secondi'],\n\t\tlabels1: ['Anno','Mese','Settimana','Giorno','Ora','Minuto','Secondo'],\n\t\tcompactLabels: ['a','m','s','g'],\n\t\twhichLabels: null,\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.it);\n})(jQuery);\n"
  },
  {
    "path": "dist/js/jquery.countdown-ja.js",
    "content": "/* http://keith-wood.name/countdown.html\n   Japanese initialisation for the jQuery countdown extension\n   Written by Ken Ishimoto (ken@ksroom.com) Aug 2009. */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.ja = {\n\t\tlabels: ['年','月','週','日','時','分','秒'],\n\t\tlabels1: ['年','月','週','日','時','分','秒'],\n\t\tcompactLabels: ['年','月','週','日'],\n\t\twhichLabels: null,\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.ja);\n})(jQuery);\n"
  },
  {
    "path": "dist/js/jquery.countdown-kn.js",
    "content": "/* http://keith-wood.name/countdown.html\n * Kannada initialization for the jQuery countdown extension\n * Written by Guru Chaturvedi guru@gangarasa.com (2011) */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.kn = {\n\t\tlabels: ['ವರ್ಷಗಳು','ತಿಂಗಳು','ವಾರಗಳು','ದಿನಗಳು','ಘಂಟೆಗಳು','ನಿಮಿಷಗಳು','ಕ್ಷಣಗಳು'],\n\t\tlabels1: ['ವರ್ಷ','ತಿಂಗಳು','ವಾರ','ದಿನ','ಘಂಟೆ','ನಿಮಿಷ','ಕ್ಷಣ'],\n\t\tcompactLabels: ['ವ','ತಿ','ವಾ','ದಿ'],\n\t\twhichLabels: null,\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.kn);\n})(jQuery);\n"
  },
  {
    "path": "dist/js/jquery.countdown-ko.js",
    "content": "/* http://keith-wood.name/countdown.html\n   Korean initialisation for the jQuery countdown extension\n   Written by Ryan Yu (ryanyu79@gmail.com). */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.ko = {\n\t\tlabels: ['년','월','주','일','시','분','초'],\n\t\tlabels1: ['년','월','주','일','시','분','초'],\n\t\tcompactLabels: ['년','월','주','일'],\n\t\tcompactLabels1: ['년','월','주','일'],\n\t\twhichLabels: null,\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.ko);\n})(jQuery);\n"
  },
  {
    "path": "dist/js/jquery.countdown-lt.js",
    "content": "/* http://keith-wood.name/countdown.html\n * Lithuanian localisation for the jQuery countdown extension\n * Written by Moacir P. de Sá Pereira (moacir{at}gmail.com) (2009) */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.lt = {\n\t\tlabels: ['Metų','Mėnesių','Savaičių','Dienų','Valandų','Minučių','Sekundžių'],\n\t\tlabels1: ['Metai','Mėnuo','Savaitė','Diena','Valanda','Minutė','Sekundė'],\n\t\tcompactLabels: ['m','m','s','d'],\n\t\twhichLabels: null,\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.lt);\n})(jQuery);\n"
  },
  {
    "path": "dist/js/jquery.countdown-lv.js",
    "content": "/* http://keith-wood.name/countdown.html\n * Latvian initialisation for the jQuery countdown extension\n * Written by Jānis Peisenieks janis.peisenieks@gmail.com (2010) */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.lv = {\n\t\tlabels: ['Gadi','Mēneši','Nedēļas','Dienas','Stundas','Minūtes','Sekundes'],\n\t\tlabels1: ['Gads','Mēnesis','Nedēļa','Diena','Stunda','Minūte','Sekunde'],\n\t\tcompactLabels: ['l','m','n','d'],\n\t\tcompactLabels1: ['g','m','n','d'],\n\t\twhichLabels: null,\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.lv);\n})(jQuery);\n"
  },
  {
    "path": "dist/js/jquery.countdown-mk.js",
    "content": "/* http://keith-wood.name/countdown.html\n * Macedonian initialisation for the jQuery countdown extension\n * Written by Gorast Cvetkovski cvetkovski@gorast.com (2016) */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.mk = {\n\t\tlabels: ['Години','Месеци','Недели','Дена','Часа','Минути','Секунди'],\n\t\tlabels1: ['Година','Месец','Недела','Ден','Час','Минута','Секунда'],\n\t\tcompactLabels: ['l','m','n','d'],\n\t\tcompactLabels1: ['g','m','n','d'],\n\t\twhichLabels: null,\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.mk);\n})(jQuery);\n"
  },
  {
    "path": "dist/js/jquery.countdown-ml.js",
    "content": "/* http://keith-wood.name/countdown.html\n * Malayalam/(Indian>>Kerala) initialisation for the jQuery countdown extension\n * Written by Harilal.B (harilal1234@gmail.com) Feb 2013. */\n(function($) {\n\t'use strict';\n\t/* jshint -W100 */\n    $.countdown.regionalOptions.ml = {\n        labels: ['വര്‍ഷങ്ങള്‍','മാസങ്ങള്‍','ആഴ്ചകള്‍','ദിവസങ്ങള്‍','മണിക്കൂറുകള്‍','മിനിറ്റുകള്‍','സെക്കന്റുകള്‍'],\n        labels1: ['വര്‍ഷം','മാസം','ആഴ്ച','ദിവസം','മണിക്കൂര്‍','മിനിറ്റ്','സെക്കന്റ്'],\n        compactLabels: ['വ','മ','ആ','ദി'],\n        whichLabels: null,\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n//\t\tdigits: ['൦','൧','൨','൩','൪','൫','൬','൭','൮','൯'],\n        timeSeparator: ':',\n\t\tisRTL: false\n\t};\n    $.countdown.setDefaults($.countdown.regionalOptions.ml);\n})(jQuery);"
  },
  {
    "path": "dist/js/jquery.countdown-ms.js",
    "content": "/* http://keith-wood.name/countdown.html\n   Malay initialisation for the jQuery countdown extension\n   Written by Jason Ong (jason{at}portalgroove.com) May 2010. */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.ms = {\n\t\tlabels: ['Tahun','Bulan','Minggu','Hari','Jam','Minit','Saat'],\n\t\tlabels1: ['Tahun','Bulan','Minggu','Hari','Jam','Minit','Saat'],\n\t\tcompactLabels: ['t','b','m','h'],\n\t\twhichLabels: null,\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.ms);\n})(jQuery);\n"
  },
  {
    "path": "dist/js/jquery.countdown-my.js",
    "content": "/* http://keith-wood.name/countdown.html\n   Burmese initialisation for the jQuery countdown extension\n   Written by Win Lwin Moe (winnlwinmoe@gmail.com) Dec 2009. */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.my = {\n\t\tlabels: ['နွစ္','လ','ရက္သတဿတပတ္','ရက္','နာရီ','မိနစ္','စကဿကန့္'],\n\t\tlabels1: ['နွစ္','လ','ရက္သတဿတပတ္','ရက္','နာရီ','မိနစ္','စကဿကန့္'],\n\t\tcompactLabels: ['နွစ္','လ','ရက္သတဿတပတ္','ရက္'],\n\t\twhichLabels: null,\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.my);\n})(jQuery);"
  },
  {
    "path": "dist/js/jquery.countdown-nb.js",
    "content": "/* http://keith-wood.name/countdown.html\n   Norwegian Bokmål translation\n   Written by Kristian Ravnevand */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.nb = {\n\t\tlabels: ['År','Måneder','Uker','Dager','Timer','Minutter','Sekunder'],\n\t\tlabels1: ['År','Måned','Uke','Dag','Time','Minutt','Sekund'],\n\t\tcompactLabels: ['Å','M','U','D'],\n\t\twhichLabels: null,\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.nb);\n})(jQuery);\n"
  },
  {
    "path": "dist/js/jquery.countdown-nl.js",
    "content": "/* http://keith-wood.name/countdown.html\n   Dutch initialisation for the jQuery countdown extension\n   Written by Mathias Bynens <http://mathiasbynens.be/> Mar 2008. */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.nl = {\n\t\tlabels: ['Jaren','Maanden','Weken','Dagen','Uren','Minuten','Seconden'],\n\t\tlabels1: ['Jaar','Maand','Week','Dag','Uur','Minuut','Seconde'],\n\t\tcompactLabels: ['j','m','w','d'],\n\t\twhichLabels: null,\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.nl);\n})(jQuery);\n"
  },
  {
    "path": "dist/js/jquery.countdown-pl.js",
    "content": "/* http://keith-wood.name/countdown.html\n * Polish initialisation for the jQuery countdown extension\n * Written by Pawel Lewtak lewtak@gmail.com (2008) */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.pl = {\n\t\tlabels: ['lat','miesięcy','tygodni','dni','godzin','minut','sekund'],\n\t\tlabels1: ['rok','miesiąc','tydzień','dzień','godzina','minuta','sekunda'],\n\t\tlabels2: ['lata','miesiące','tygodnie','dni','godziny','minuty','sekundy'],\n\t\tcompactLabels: ['l','m','t','d'],\n\t\tcompactLabels1: ['r','m','t','d'],\n\t\twhichLabels: function(amount) {\n\t\t\tvar units = amount % 10;\n\t\t\tvar tens = Math.floor((amount % 100) / 10);\n\t\t\treturn (amount === 1 ? 1 : (units >= 2 && units <= 4 && tens !== 1 ? 2 : 0));\n\t\t},\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.pl);\n})(jQuery);\n"
  },
  {
    "path": "dist/js/jquery.countdown-pt-BR.js",
    "content": "/* http://keith-wood.name/countdown.html\n   Brazilian initialisation for the jQuery countdown extension\n   Translated by Marcelo Pellicano de Oliveira (pellicano@gmail.com) Feb 2008.\n   and Juan Roldan (juan.roldan[at]relayweb.com.br) Mar 2012. */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions['pt-BR'] = {\n\t\tlabels: ['Anos','Meses','Semanas','Dias','Horas','Minutos','Segundos'],\n\t\tlabels1: ['Ano','Mês','Semana','Dia','Hora','Minuto','Segundo'],\n\t\tcompactLabels: ['a','m','s','d'],\n\t\twhichLabels: null,\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions['pt-BR']);\n})(jQuery);\n"
  },
  {
    "path": "dist/js/jquery.countdown-ro.js",
    "content": "/* http://keith-wood.name/countdown.html\n * Romanian initialisation for the jQuery countdown extension\n * Written by Edmond L. (webmond@gmail.com). */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.ro = {\n\t\tlabels: ['Ani','Luni','Saptamani','Zile','Ore','Minute','Secunde'],\n\t\tlabels1: ['An','Luna','Saptamana','Ziua','Ora','Minutul','Secunda'],\n\t\tcompactLabels: ['A','L','S','Z'],\n\t\twhichLabels: null,\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.ro);\n})(jQuery);\n"
  },
  {
    "path": "dist/js/jquery.countdown-ru.js",
    "content": "/* http://keith-wood.name/countdown.html\n * Russian initialisation for the jQuery countdown extension\n * Written by Sergey K. (xslade{at}gmail.com) June 2010. */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.ru = {\n\t\tlabels: ['Лет','Месяцев','Недель','Дней','Часов','Минут','Секунд'],\n\t\tlabels1: ['Год','Месяц','Неделя','День','Час','Минута','Секунда'],\n\t\tlabels2: ['Года','Месяца','Недели','Дня','Часа','Минуты','Секунды'],\n\t\tcompactLabels: ['л','м','н','д'],\n\t\tcompactLabels1: ['г','м','н','д'],\n\t\twhichLabels: function(amount) {\n\t\t\tvar units = amount % 10;\n\t\t\tvar tens = Math.floor((amount % 100) / 10);\n\t\t\treturn (amount === 1 ? 1 : (units >= 2 && units <= 4 && tens !== 1 ? 2 :\n\t\t\t\t(units === 1 && tens !== 1 ? 1 : 0)));\n\t\t},\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.ru);\n})(jQuery);"
  },
  {
    "path": "dist/js/jquery.countdown-sk.js",
    "content": "/* http://keith-wood.name/countdown.html\n * Slovak initialisation for the jQuery countdown extension\n * Written by Roman Chlebec (creamd@c64.sk) (2008) */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.sk = {\n\t\tlabels: ['Rokov','Mesiacov','Týždňov','Dní','Hodín','Minút','Sekúnd'],\n\t\tlabels1: ['Rok','Mesiac','Týždeň','Deň','Hodina','Minúta','Sekunda'],\n\t\tlabels2: ['Roky','Mesiace','Týždne','Dni','Hodiny','Minúty','Sekundy'],\n\t\tcompactLabels: ['r','m','t','d'],\n\t\twhichLabels: function(amount) {\n\t\t\treturn (amount === 1 ? 1 : (amount >= 2 && amount <= 4 ? 2 : 0));\n\t\t},\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.sk);\n})(jQuery);\n"
  },
  {
    "path": "dist/js/jquery.countdown-sl.js",
    "content": "/* http://keith-wood.name/countdown.html\n * Slovenian localisation for the jQuery countdown extension\n * Written by Borut Tomažin (debijan{at}gmail.com) (2011)\n * updated by Jan Zavrl (jan@iuvo.si) (2015) */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.sl = {\n\t\tlabels: ['Let','Mesecev','Tednov','Dni','Ur','Minut','Sekund'], // Plurals\n\t\tlabels1: ['Leto','Mesec','Teden','Dan','Ura','Minuta','Sekunda'], // Singles\n\t\tlabels2: ['Leti','Meseca','Tedna','Dneva','Uri','Minuti','Sekundi'], // Doubles\n\t\tlabels3: ['Leta','Meseci','Tedni','Dnevi','Ure','Minute','Sekunde'], // 3's\n\t\tlabels4: ['Leta','Meseci','Tedni','Dnevi','Ure','Minute','Sekunde'], // 4's\n\t\tcompactLabels: ['l','m','t','d'],\n\t\twhichLabels: function(amount) {\n\t\t\treturn (amount > 4 ? 0 : amount);\n\t\t},\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.sl);\n})(jQuery);\n"
  },
  {
    "path": "dist/js/jquery.countdown-sq.js",
    "content": "/* http://keith-wood.name/countdown.html\n   Albanian initialisation for the jQuery countdown extension\n   Written by Erzen Komoni. */\n(function($) {\n\t'use strict';\n    $.countdown.regionalOptions.sq = {\n        labels: ['Vite','Muaj','Javë','Ditë','Orë','Minuta','Sekonda'],\n        labels1: ['Vit','Muaj','Javë','Dit','Orë','Minutë','Sekond'],\n        compactLabels: ['V','M','J','D'],\n        whichLabels: null,\n        digits: ['0','1','2','3','4','5','6','7','8','9'],\n        timeSeparator: ':',\n\t\tisRTL: false\n\t};\n    $.countdown.setDefaults($.countdown.regionalOptions.sq);\n})(jQuery);"
  },
  {
    "path": "dist/js/jquery.countdown-sr-SR.js",
    "content": "/* http://keith-wood.name/countdown.html\n * Serbian Latin initialisation for the jQuery countdown extension\n * Written by Predrag Leka lp@lemurcake.com (2010) */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions['sr-SR'] = {\n\t\tlabels: ['Godina','Meseci','Nedelja','Dana','Časova','Minuta','Sekundi'],\n\t\tlabels1: ['Godina','Mesec','Nedelja','Dan','Čas','Minut','Sekunda'],\n\t\tlabels2: ['Godine','Meseca','Nedelje','Dana','Časa','Minuta','Sekunde'],\n\t\tcompactLabels: ['g','m','n','d'],\n\t\twhichLabels: function(amount) {\n\t\t\treturn (amount === 1 ? 1 : (amount >= 2 && amount <= 4 ? 2 : 0));\n\t\t},\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions['sr-SR']);\n})(jQuery);\n"
  },
  {
    "path": "dist/js/jquery.countdown-sr.js",
    "content": "/* http://keith-wood.name/countdown.html\n * Serbian Cyrillic initialisation for the jQuery countdown extension\n * Written by Predrag Leka lp@lemurcake.com (2010) */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.sr = {\n\t\tlabels: ['Година','Месеци','Недеља','Дана','Часова','Минута','Секунди'],\n\t\tlabels1: ['Година','месец','Недеља','Дан','Час','Минут','Секунда'],\n\t\tlabels2: ['Године','Месеца','Недеље','Дана','Часа','Минута','Секунде'],\n\t\tcompactLabels: ['г','м','н','д'],\n\t\twhichLabels: function(amount) {\n\t\t\treturn (amount === 1 ? 1 : (amount >= 2 && amount <= 4 ? 2 : 0));\n\t\t},\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.sr);\n})(jQuery);\n"
  },
  {
    "path": "dist/js/jquery.countdown-sv.js",
    "content": "/* http://keith-wood.name/countdown.html\n   Swedish initialisation for the jQuery countdown extension\n   Written by Carl (carl@nordenfelt.com). */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.sv = {\n\t\tlabels: ['År','Månader','Veckor','Dagar','Timmar','Minuter','Sekunder'],\n\t\tlabels1: ['År','Månad','Vecka','Dag','Timme','Minut','Sekund'],\n\t\tcompactLabels: ['Å','M','V','D'],\n\t\twhichLabels: null,\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.sv);\n})(jQuery);\n"
  },
  {
    "path": "dist/js/jquery.countdown-th.js",
    "content": "/* http://keith-wood.name/countdown.html\n   Thai initialisation for the jQuery countdown extension\n   Written by Pornchai Sakulsrimontri (li_sin_th@yahoo.com). */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.th = {\n\t\tlabels: ['ปี','เดือน','สัปดาห์','วัน','ชั่วโมง','นาที','วินาที'],\n\t\tlabels1: ['ปี','เดือน','สัปดาห์','วัน','ชั่วโมง','นาที','วินาที'],\n\t\tcompactLabels: ['ปี','เดือน','สัปดาห์','วัน'],\n\t\twhichLabels: null,\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.th);\n})(jQuery);\n"
  },
  {
    "path": "dist/js/jquery.countdown-tr.js",
    "content": "/* http://keith-wood.name/countdown.html\n* Turkish initialisation for the jQuery countdown extension\n* Written by Bekir Ahmetoğlu (bekir@cerek.com) Aug 2008. */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.tr = {\n\t\tlabels: ['Yıl','Ay','Hafta','Gün','Saat','Dakika','Saniye'],\n\t\tlabels1: ['Yıl','Ay','Hafta','Gün','Saat','Dakika','Saniye'],\n\t\tcompactLabels: ['y','a','h','g'],\n\t\twhichLabels: null,\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.tr);\n})(jQuery);\n"
  },
  {
    "path": "dist/js/jquery.countdown-uk.js",
    "content": "/* http://keith-wood.name/countdown.html\n * Ukrainian initialisation for the jQuery countdown extension\n * Written by Goloborodko M misha.gm@gmail.com (2009), corrections by Iгор Kоновал */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.uk = {\n\t\tlabels: ['Років','Місяців','Тижнів','Днів','Годин','Хвилин','Секунд'],\n\t\tlabels1: ['Рік','Місяць','Тиждень','День','Година','Хвилина','Секунда'],\n\t\tlabels2: ['Роки','Місяці','Тижні','Дні','Години','Хвилини','Секунди'],\n\t\tcompactLabels: ['r','m','t','d'],\n\t\twhichLabels: function(amount) {\n\t\t\treturn (amount === 1 ? 1 : (amount >=2 && amount <= 4 ? 2 : 0));\n\t\t},\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.uk);\n})(jQuery);\n"
  },
  {
    "path": "dist/js/jquery.countdown-ur.js",
    "content": "/* http://keith-wood.name/countdown.html\n   Urdu (اردو) initialisation for the jQuery countdown extension\n   Translated by Azhar Rasheed (azhar.rasheed19@gmail.com), November 2013. */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.ur = {\n\t\tlabels: ['سال','مہينے','ہفتے','دن','گھنٹے','منٹس','سيکنڑز'],\n\t\tlabels1: ['سال','ماہ','ہفتہ','دن','گھنٹہ','منٹ','سیکنڈز'],\n\t\tcompactLabels: ['(ق)','سینٹ','ایک','J'],\n\t\twhichLabels: null,\n\t\tdigits: ['٠','١','٢','٣','۴','۵','۶','۷','٨','٩'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: true\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.ur);\n})(jQuery);\n"
  },
  {
    "path": "dist/js/jquery.countdown-uz.js",
    "content": "/* http://keith-wood.name/countdown.html\n * Uzbek initialisation for the jQuery countdown extension\n * Written by Alisher U. (ulugbekov{at}gmail.com) August 2012. */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.uz = {\n\t\tlabels: ['Yil','Oy','Hafta','Kun','Soat','Daqiqa','Soniya'],\n\t\tlabels1: ['Yil','Oy','Hafta','Kun','Soat','Daqiqa','Soniya'],\n\t\tcompactLabels: ['y','o','h','k'],\n\t\twhichLabels: null,\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.uz);\n})(jQuery);"
  },
  {
    "path": "dist/js/jquery.countdown-vi.js",
    "content": "/* http://keith-wood.name/countdown.html\n * Vietnamese initialisation for the jQuery countdown extension\n * Written by Pham Tien Hung phamtienhung@gmail.com (2010) */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.vi = {\n\t\tlabels: ['Năm','Tháng','Tuần','Ngày','Giờ','Phút','Giây'],\n\t\tlabels1: ['Năm','Tháng','Tuần','Ngày','Giờ','Phút','Giây'],\n\t\tcompactLabels: ['năm','th','tu','ng'],\n\t\twhichLabels: null,\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.vi);\n})(jQuery);"
  },
  {
    "path": "dist/js/jquery.countdown-zh-CN.js",
    "content": "/* http://keith-wood.name/countdown.html\n   Simplified Chinese initialisation for the jQuery countdown extension\n   Written by Cloudream (cloudream@gmail.com). */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions['zh-CN'] = {\n\t\tlabels: ['年','月','周','天','时','分','秒'],\n\t\tlabels1: ['年','月','周','天','时','分','秒'],\n\t\tcompactLabels: ['年','月','周','天'],\n\t\tcompactLabels1: ['年','月','周','天'],\n\t\twhichLabels: null,\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions['zh-CN']);\n})(jQuery);\n"
  },
  {
    "path": "dist/js/jquery.countdown-zh-TW.js",
    "content": "/* http://keith-wood.name/countdown.html\n   Traditional Chinese initialisation for the jQuery countdown extension\n   Written by Cloudream (cloudream@gmail.com). */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions['zh-TW'] = {\n\t\tlabels: ['年','月','周','天','時','分','秒'],\n\t\tlabels1: ['年','月','周','天','時','分','秒'],\n\t\tcompactLabels: ['年','月','周','天'],\n\t\tcompactLabels1: ['年','月','周','天'],\n\t\twhichLabels: null,\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions['zh-TW']);\n})(jQuery);\n"
  },
  {
    "path": "dist/js/jquery.countdown.js",
    "content": "/*! http://keith-wood.name/countdown.html\n\tCountdown for jQuery v2.1.0.\n\tWritten by Keith Wood (wood.keith{at}optusnet.com.au) January 2008.\n\tAvailable under the MIT (http://keith-wood.name/licence.html) license. \n\tPlease attribute the author if you use it. */\n\n(function($) { // Hide scope, no $ conflict\n\t'use strict';\n\n\tvar pluginName = 'countdown';\n\n\tvar Y = 0; // Years\n\tvar O = 1; // Months\n\tvar W = 2; // Weeks\n\tvar D = 3; // Days\n\tvar H = 4; // Hours\n\tvar M = 5; // Minutes\n\tvar S = 6; // Seconds\n\n\t/** Create the countdown plugin.\n\t\t<p>Sets an element to show the time remaining until a given instant.</p>\n\t\t<p>Expects HTML like:</p>\n\t\t<pre>&lt;div>&lt;/div></pre>\n\t\t<p>Provide inline configuration like:</p>\n\t\t<pre>&lt;div data-countdown=\"name: 'value', ...\">&lt;/div></pre>\n\t\t@module Countdown\n\t\t@augments JQPlugin\n\t\t@example $(selector).countdown({until: +300}) */\n\t$.JQPlugin.createPlugin({\n\t\n\t\t/** The name of the plugin.\n\t\t\t@default 'countdown' */\n\t\tname: pluginName,\n\n\t\t/** Countdown expiry callback.\n\t\t\tUsed with the {@linkcode module:Countdown~defaultOptions|onExpiry} option and\n\t\t\ttriggered when the countdown expires.\n\t\t\t@global\n\t\t\t@callback CountdownExpiryCallback\n\t\t\t@this <code>Element</code>\n\t\t\t@example onExpiry: function() {\n  alert('Done');\n} */\n\n\t\t/** Countdown server synchronisation callback.\n\t\t\tUsed with the {@linkcode module:Countdown~defaultOptions|serverSync} option and\n\t\t\ttriggered when the countdown is initialised.\n\t\t\t@global\n\t\t\t@callback CountdownServerSyncCallback\n\t\t\t@return {Date} The current date/time on the server as expressed in the local timezone.\n\t\t\t@this <code>$.countdown</code>\n\t\t\t@example serverSync: function() {\n  var time = null;\n  $.ajax({url: 'http://myserver.com/serverTime.php',\n    async: false, dataType: 'text',\n    success: function(text) {\n      time = new Date(text);\n    }, error: function(http, message, exc) {\n      time = new Date();\n  });\n  return time;\n} */\n\t\t\t\n\t\t/** Countdown tick callback.\n\t\t\tUsed with the {@linkcode module:Countdown~defaultOptions|onTick} option and\n\t\t\ttriggered on every {@linkcode module:Countdown~defaultOptions|tickInterval} ticks of the countdown.\n\t\t\t@global\n\t\t\t@callback CountdownTickCallback\n\t\t\t@this <code>Element</code>\n\t\t\t@param {number[]} periods The breakdown by period (years, months, weeks, days,\n\t\t\t\t\thours, minutes, seconds) of the time remaining/passed.\n\t\t\t@example onTick: function(periods) {\n  $('#altTime').text(periods[4] + ':' + twoDigits(periods[5]) +\n    ':' + twoDigits(periods[6]));\n} */\n\n\t\t/** Countdown which labels callback.\n\t\t\tUsed with the {@linkcode module:Countdown~regionalOptions|whichLabels} option and\n\t\t\ttriggered when the countdown is being display to determine which set of labels\n\t\t\t(<code>labels</code>, <code>labels1</code>, ...) are to be used for the current period value.\n\t\t\t@global\n\t\t\t@callback CountdownWhichLabelsCallback\n\t\t\t@param {number} num The current period value.\n\t\t\t@return {number} The suffix for the label set to use, or zero for the default labels.\n\t\t\t@example whichLabels: function(num) {\n  return (num === 1 ? 1 : (num >= 2 && num <= 4 ? 2 : 0));\n} */\n\t\t\t\n\t\t/** Default settings for the plugin.\n\t\t\t@property {Date|number|string} [until] The date/time to count down to, or number of seconds\n\t\t\t\t\t\toffset from now, or string of amounts and units for offset(s) from now:\n\t\t\t\t\t\t'Y' years, 'O' months, 'W' weeks, 'D' days, 'H' hours, 'M' minutes, 'S' seconds.\n\t\t\t\t\t\tOne of <code>until</code> or <code>since</code> must be specified.\n\t\t\t\t\t\tIf both are given <code>since</code> takes precedence.\n\t\t\t@example until: new Date(2013, 12-1, 25, 13, 30)\nuntil: +300\nuntil: '+1O -2D'\n\t\t\t@property {Date|number|string} [since] The date/time to count up from, or number of seconds\n\t\t\t\t\t\toffset from now, or string of amounts and units for offset(s) from now:\n\t\t\t\t\t\t'Y' years, 'O' months, 'W' weeks, 'D' days, 'H' hours, 'M' minutes, 'S' seconds.\n\t\t\t\t\t\tOne of <code>until</code> or <code>since</code> must be specified.\n\t\t\t\t\t\tIf both are given <code>since</code> takes precedence.\n\t\t\t@example since: new Date(2013, 1-1, 1)\nsince: -300\nsince: '-1O +2D'\n\t\t\t@property {number} [timezone=null] The timezone (hours or minutes from GMT) for the target times,\n\t\t\t\t\t\tor <code>null</code> for client local timezone.\n\t\t\t@example timezone: +10\ntimezone: -60\n\t\t\t@property {CountdownServerSyncCallback} [serverSync=null] A function to retrieve the current server time\n\t\t\t\t\t\tfor synchronisation.\n\t\t\t@property {string} [format='dHMS'] The format for display - upper case to always show,\n\t\t\t\t\t\tlower case to show only if non-zero,\n\t\t\t\t\t\t'Y' years, 'O' months, 'W' weeks, 'D' days, 'H' hours, 'M' minutes, 'S' seconds.\n\t\t\t@property {string} [layout=''] <p>Build your own layout for the countdown.</p>\n\t\t\t\t\t\t<p>Indicate substitution points with '{desc}' for the description, '{sep}' for the time separator,\n\t\t\t\t\t\t'{pv}' where p is 'y' for years, 'o' for months, 'w' for weeks, 'd' for days,\n\t\t\t\t\t\t'h' for hours, 'm' for minutes, or 's' for seconds and v is 'n' for the period value,\n\t\t\t\t\t\t'nn' for the period value with a minimum of two digits,\n\t\t\t\t\t\t'nnn' for the period value with a minimum of three digits, or\n\t\t\t\t\t\t'l' for the period label (long or short form depending on the compact setting), or\n\t\t\t\t\t\t'{pd}' where p is as above and d is '1' for the units digit, '10' for the tens digit,\n\t\t\t\t\t\t'100' for the hundreds digit, or '1000' for the thousands digit.</p>\n\t\t\t\t\t\t<p>If you need to exclude entire sections when the period value is zero and\n\t\t\t\t\t\tyou have specified the period as optional, surround these sections with\n\t\t\t\t\t\t'{p<}' and '{p>}', where p is the same as above.</p>\n\t\t\t\t\t\t<p>Your layout can just be simple text, or can contain HTML markup as well.</p>\n\t\t\t@example layout: '{d<}{dn} {dl}{d>} {hnn}:{mnn}:{snn}'\n\t\t\t@property {boolean} [compact=false] <code>true</code> to display in a compact format,\n\t\t\t\t\t\t<code>false</code> for an expanded one.\n\t\t\t@property {boolean} [padZeroes=false] <code>true</code> to add leading zeroes.\n\t\t\t@property {number} [significant=0] The maximum number of periods with non-zero values to show, zero for all.\n\t\t\t@property {string} [description=''] The description displayed for the countdown.\n\t\t\t@property {string} [expiryUrl=''] A URL to load upon expiry, replacing the current page.\n\t\t\t@property {string} [expiryText=''] Text to display upon expiry, replacing the countdown. This may be HTML.\n\t\t\t@property {boolean} [alwaysExpire=false] <code>true</code> to trigger <code>onExpiry</code>\n\t\t\t\t\t\teven if the target time has passed.\n\t\t\t@property {CountdownExpiryCallback} [onExpiry=null] Callback when the countdown expires -\n\t\t\t\t\t\treceives no parameters and <code>this</code> is the containing element.\n\t\t\t@example onExpiry: function() {\n  ...\n}\n\t\t\t@property {CountdownTickCallback} [onTick=null] Callback when the countdown is updated -\n\t\t\t\t\t\treceives <code>number[7]</code> being the breakdown by period\n\t\t\t\t\t\t(years, months, weeks, days, hours, minutes, seconds - based on\n\t\t\t\t\t\t<code>format</code>) and <code>this</code> is the containing element.\n\t\t\t@example onTick: function(periods) {\n  var secs = $.countdown.periodsToSeconds(periods);\n  if (secs < 300) { // Last five minutes\n    ...\n  }\n}\n\t\t\t@property {number} [tickInterval=1] The interval (seconds) between <code>onTick</code> callbacks. */\n\t\tdefaultOptions: {\n\t\t\tuntil: null,\n\t\t\tsince: null,\n\t\t\ttimezone: null,\n\t\t\tserverSync: null,\n\t\t\tformat: 'dHMS',\n\t\t\tlayout: '',\n\t\t\tcompact: false,\n\t\t\tpadZeroes: false,\n\t\t\tsignificant: 0,\n\t\t\tdescription: '',\n\t\t\texpiryUrl: '',\n\t\t\texpiryText: '',\n\t\t\talwaysExpire: false,\n\t\t\tonExpiry: null,\n\t\t\tonTick: null,\n\t\t\ttickInterval: 1\n\t\t},\n\n\t\t/** Localisations for the plugin.\n\t\t\tEntries are objects indexed by the language code ('' being the default US/English).\n\t\t\tEach object has the following attributes.\n\t\t\t@property {string[]} [labels=['Years','Months','Weeks','Days','Hours','Minutes','Seconds']]\n\t\t\t\t\t\tThe display texts for the counter periods.\n\t\t\t@property {string[]} [labels1=['Year','Month','Week','Day','Hour','Minute','Second']]\n\t\t\t\t\t\tThe display texts for the counter periods if they have a value of 1.\n\t\t\t\t\t\tAdd other <code>labels<em>n</em></code> attributes as necessary to\n\t\t\t\t\t\tcater for other numeric idiosyncrasies of the localisation.\n\t\t\t@property {string[]}[compactLabels=['y','m','w','d']] The compact texts for the counter periods.\n\t\t\t@property {CountdownWhichLabelsCallback} [whichLabels=null] A function to determine which\n\t\t\t\t\t\t<code>labels<em>n</em></code> to use.\n\t\t\t@example whichLabels: function(num) {\n  return (num > 1 ? 0 : 1);\n}\n\t\t\t@property {string[]} [digits=['0','1',...,'9']] The digits to display (0-9).\n\t\t\t@property {string} [timeSeparator=':'] Separator for time periods in the compact layout.\n\t\t\t@property {boolean} [isRTL=false] <code>true</code> for right-to-left languages,\n\t\t\t\t\t\t<code>false</code> for left-to-right. */\n\t\tregionalOptions: { // Available regional settings, indexed by language/country code\n\t\t\t'': { // Default regional settings - English/US\n\t\t\t\tlabels: ['Years', 'Months', 'Weeks', 'Days', 'Hours', 'Minutes', 'Seconds'],\n\t\t\t\tlabels1: ['Year', 'Month', 'Week', 'Day', 'Hour', 'Minute', 'Second'],\n\t\t\t\tcompactLabels: ['y', 'm', 'w', 'd'],\n\t\t\t\twhichLabels: null,\n\t\t\t\tdigits: ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'],\n\t\t\t\ttimeSeparator: ':',\n\t\t\t\tisRTL: false\n\t\t\t}\n\t\t},\n\n\t\t/* Class name for the right-to-left marker. */\n\t\t_rtlClass: pluginName + '-rtl',\n\t\t/* Class name for the countdown section marker. */\n\t\t_sectionClass: pluginName + '-section',\n\t\t/* Class name for the period amount marker. */\n\t\t_amountClass: pluginName + '-amount',\n\t\t/* Class name for the period name marker. */\n\t\t_periodClass: pluginName + '-period',\n\t\t/* Class name for the countdown row marker. */\n\t\t_rowClass: pluginName + '-row',\n\t\t/* Class name for the holding countdown marker. */\n\t\t_holdingClass: pluginName + '-holding',\n\t\t/* Class name for the showing countdown marker. */\n\t\t_showClass: pluginName + '-show',\n\t\t/* Class name for the description marker. */\n\t\t_descrClass: pluginName + '-descr',\n\n\t\t/* List of currently active countdown elements. */\n\t\t_timerElems: [],\n\n\t\t/** Additional setup for the countdown.\n\t\t\tApply default localisations.\n\t\t\tCreate the timer.\n\t\t\t@private */\n\t\t_init: function() {\n\t\t\tvar self = this;\n\t\t\tthis._super();\n\t\t\tthis._serverSyncs = [];\n\t\t\tvar now = (typeof Date.now === 'function' ? Date.now : function() { return new Date().getTime(); });\n\t\t\tvar perfAvail = (window.performance && typeof window.performance.now === 'function');\n\t\t\t// Shared timer for all countdowns\n\t\t\tfunction timerCallBack(timestamp) {\n\t\t\t\tvar drawStart = (timestamp < 1e12 ? // New HTML5 high resolution timer\n\t\t\t\t\t(perfAvail ? (window.performance.now() + window.performance.timing.navigationStart) : now()) :\n\t\t\t\t\t// Integer milliseconds since unix epoch\n\t\t\t\t\ttimestamp || now());\n\t\t\t\tif (drawStart - animationStartTime >= 1000) {\n\t\t\t\t\tself._updateElems();\n\t\t\t\t\tanimationStartTime = drawStart;\n\t\t\t\t}\n\t\t\t\trequestAnimationFrame(timerCallBack);\n\t\t\t}\n\t\t\tvar requestAnimationFrame = window.requestAnimationFrame ||\n\t\t\t\twindow.webkitRequestAnimationFrame || window.mozRequestAnimationFrame ||\n\t\t\t\twindow.oRequestAnimationFrame || window.msRequestAnimationFrame || null;\n\t\t\t\t// This is when we expect a fall-back to setInterval as it's much more fluid\n\t\t\tvar animationStartTime = 0;\n\t\t\tif (!requestAnimationFrame || $.noRequestAnimationFrame) {\n\t\t\t\t$.noRequestAnimationFrame = null;\n\t\t\t\t// Fall back to good old setInterval\n\t\t\t\t$.countdown._timer = setInterval(function() { self._updateElems(); }, 1000);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tanimationStartTime = window.animationStartTime ||\n\t\t\t\t\twindow.webkitAnimationStartTime || window.mozAnimationStartTime ||\n\t\t\t\t\twindow.oAnimationStartTime || window.msAnimationStartTime || now();\n\t\t\t\trequestAnimationFrame(timerCallBack);\n\t\t\t}\n\t\t},\n\n\t\t/** Convert a date/time to UTC.\n\t\t\t@param {number} tz The hour or minute offset from GMT, e.g. +9, -360.\n\t\t\t@param {Date|number} year the date/time in that timezone or the year in that timezone.\n\t\t\t@param {number} [month] The month (0 - 11) (omit if <code>year</code> is a <code>Date</code>).\n\t\t\t@param {number} [day] The day (omit if <code>year</code> is a <code>Date</code>).\n\t\t\t@param {number} [hours] The hour (omit if <code>year</code> is a <code>Date</code>).\n\t\t\t@param {number} [mins] The minute (omit if <code>year</code> is a <code>Date</code>).\n\t\t\t@param {number} [secs] The second (omit if <code>year</code> is a <code>Date</code>).\n\t\t\t@param {number} [ms] The millisecond (omit if <code>year</code> is a <code>Date</code>).\n\t\t\t@return {Date} The equivalent UTC date/time.\n\t\t\t@example $.countdown.UTCDate(+10, 2013, 12-1, 25, 12, 0)\n$.countdown.UTCDate(-7, new Date(2013, 12-1, 25, 12, 0)) */\n\t\tUTCDate: function(tz, year, month, day, hours, mins, secs, ms) {\n\t\t\tif (typeof year === 'object' && year instanceof Date) {\n\t\t\t\tms = year.getMilliseconds();\n\t\t\t\tsecs = year.getSeconds();\n\t\t\t\tmins = year.getMinutes();\n\t\t\t\thours = year.getHours();\n\t\t\t\tday = year.getDate();\n\t\t\t\tmonth = year.getMonth();\n\t\t\t\tyear = year.getFullYear();\n\t\t\t}\n\t\t\tvar d = new Date();\n\t\t\td.setUTCFullYear(year);\n\t\t\td.setUTCDate(1);\n\t\t\td.setUTCMonth(month || 0);\n\t\t\td.setUTCDate(day || 1);\n\t\t\td.setUTCHours(hours || 0);\n\t\t\td.setUTCMinutes((mins || 0) - (Math.abs(tz) < 30 ? tz * 60 : tz));\n\t\t\td.setUTCSeconds(secs || 0);\n\t\t\td.setUTCMilliseconds(ms || 0);\n\t\t\treturn d;\n\t\t},\n\n\t\t/** Convert a set of periods into seconds.\n\t\t\tAveraged for months and years.\n\t\t\t@param {number[]} periods The periods per year/month/week/day/hour/minute/second.\n\t\t\t@return {number} The corresponding number of seconds.\n\t\t\t@example var secs = $.countdown.periodsToSeconds(periods) */\n\t\tperiodsToSeconds: function(periods) {\n\t\t\treturn periods[0] * 31557600 + periods[1] * 2629800 + periods[2] * 604800 +\n\t\t\t\tperiods[3] * 86400 + periods[4] * 3600 + periods[5] * 60 + periods[6];\n\t\t},\n\n\t\t/** Resynchronise the countdowns with the server.\n\t\t\t@example $.countdown.resync() */\n\t\tresync: function() {\n\t\t\tvar self = this;\n\t\t\t$('.' + this._getMarker()).each(function() { // Each countdown\n\t\t\t\tvar inst = $.data(this, self.name);\n\t\t\t\tif (inst.options.serverSync) { // If synced\n\t\t\t\t\tvar serverSync = null;\n\t\t\t\t\tfor (var i = 0; i < self._serverSyncs.length; i++) {\n\t\t\t\t\t\tif (self._serverSyncs[i][0] === inst.options.serverSync) { // Find sync details\n\t\t\t\t\t\t\tserverSync = self._serverSyncs[i];\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (self._eqNull(serverSync[2])) { // Recalculate if missing\n\t\t\t\t\t\tvar serverResult = ($.isFunction(inst.options.serverSync) ?\n\t\t\t\t\t\t\tinst.options.serverSync.apply(this, []) : null);\n\t\t\t\t\t\tserverSync[2] =\n\t\t\t\t\t\t\t(serverResult ? new Date().getTime() - serverResult.getTime() : 0) - serverSync[1];\n\t\t\t\t\t}\n\t\t\t\t\tif (inst._since) { // Apply difference\n\t\t\t\t\t\tinst._since.setMilliseconds(inst._since.getMilliseconds() + serverSync[2]);\n\t\t\t\t\t}\n\t\t\t\t\tinst._until.setMilliseconds(inst._until.getMilliseconds() + serverSync[2]);\n\t\t\t\t}\n\t\t\t});\n\t\t\tfor (var i = 0; i < self._serverSyncs.length; i++) { // Update sync details\n\t\t\t\tif (!self._eqNull(self._serverSyncs[i][2])) {\n\t\t\t\t\tself._serverSyncs[i][1] += self._serverSyncs[i][2];\n\t\t\t\t\tdelete self._serverSyncs[i][2];\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t_instSettings: function(elem, options) { // jshint unused:false\n\t\t\treturn {_periods: [0, 0, 0, 0, 0, 0, 0]};\n\t\t},\n\n\t\t/** Add an element to the list of active ones.\n\t\t\t@private\n\t\t\t@param {Element} elem The countdown element. */\n\t\t_addElem: function(elem) {\n\t\t\tif (!this._hasElem(elem)) {\n\t\t\t\tthis._timerElems.push(elem);\n\t\t\t}\n\t\t},\n\n\t\t/** See if an element is in the list of active ones.\n\t\t\t@private\n\t\t\t@param {Element} elem The countdown element.\n\t\t\t@return {boolean} <code>true</code> if present, <code>false</code> if not. */\n\t\t_hasElem: function(elem) {\n\t\t\treturn ($.inArray(elem, this._timerElems) > -1);\n\t\t},\n\n\t\t/** Remove an element from the list of active ones.\n\t\t\t@private\n\t\t\t@param {Element} elem The countdown element. */\n\t\t_removeElem: function(elem) {\n\t\t\tthis._timerElems = $.map(this._timerElems,\n\t\t\t\tfunction(value) { return (value === elem ? null : value); }); // delete entry\n\t\t},\n\n\t\t/** Update each active timer element.\n\t\t\t@private */\n\t\t_updateElems: function() {\n\t\t\tfor (var i = this._timerElems.length - 1; i >= 0; i--) {\n\t\t\t\tthis._updateCountdown(this._timerElems[i]);\n\t\t\t}\n\t\t},\n\n\t\t_optionsChanged: function(elem, inst, options) {\n\t\t\tif (options.layout) {\n\t\t\t\toptions.layout = options.layout.replace(/&lt;/g, '<').replace(/&gt;/g, '>');\n\t\t\t}\n\t\t\tthis._resetExtraLabels(inst.options, options);\n\t\t\tvar timezoneChanged = (inst.options.timezone !== options.timezone);\n\t\t\t$.extend(inst.options, options);\n\t\t\tthis._adjustSettings(elem, inst,\n\t\t\t\t!this._eqNull(options.until) || !this._eqNull(options.since) || timezoneChanged);\n\t\t\tvar now = new Date();\n\t\t\tif ((inst._since && inst._since < now) || (inst._until && inst._until > now)) {\n\t\t\t\tthis._addElem(elem[0]);\n\t\t\t}\n\t\t\tthis._updateCountdown(elem, inst);\n\t\t},\n\n\t\t/** Redisplay the countdown with an updated display.\n\t\t\t@private\n\t\t\t@param {Element|jQuery} elem The containing element.\n\t\t\t@param {object} inst The current settings for this instance. */\n\t\t_updateCountdown: function(elem, inst) {\n\t\t\telem = elem.jquery ? elem : $(elem);\n\t\t\tinst = inst || this._getInst(elem);\n\t\t\tif (!inst) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\telem.html(this._generateHTML(inst)).toggleClass(this._rtlClass, inst.options.isRTL);\n\t\t\tif (inst._hold !== 'pause' && $.isFunction(inst.options.onTick)) {\n\t\t\t\tvar periods = inst._hold !== 'lap' ? inst._periods :\n\t\t\t\t\tthis._calculatePeriods(inst, inst._show, inst.options.significant, new Date());\n\t\t\t\tif (inst.options.tickInterval === 1 ||\n\t\t\t\t\t\tthis.periodsToSeconds(periods) % inst.options.tickInterval === 0) {\n\t\t\t\t\tinst.options.onTick.apply(elem[0], [periods]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar expired = inst._hold !== 'pause' &&\n\t\t\t\t(inst._since ? inst._now.getTime() < inst._since.getTime() :\n\t\t\t\tinst._now.getTime() >= inst._until.getTime());\n\t\t\tif (expired && !inst._expiring) {\n\t\t\t\tinst._expiring = true;\n\t\t\t\tif (this._hasElem(elem[0]) || inst.options.alwaysExpire) {\n\t\t\t\t\tthis._removeElem(elem[0]);\n\t\t\t\t\tif ($.isFunction(inst.options.onExpiry)) {\n\t\t\t\t\t\tinst.options.onExpiry.apply(elem[0], []);\n\t\t\t\t\t}\n\t\t\t\t\tif (inst.options.expiryText) {\n\t\t\t\t\t\tvar layout = inst.options.layout;\n\t\t\t\t\t\tinst.options.layout = inst.options.expiryText;\n\t\t\t\t\t\tthis._updateCountdown(elem[0], inst);\n\t\t\t\t\t\tinst.options.layout = layout;\n\t\t\t\t\t}\n\t\t\t\t\tif (inst.options.expiryUrl) {\n\t\t\t\t\t\twindow.location = inst.options.expiryUrl;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tinst._expiring = false;\n\t\t\t}\n\t\t\telse if (inst._hold === 'pause') {\n\t\t\t\tthis._removeElem(elem[0]);\n\t\t\t}\n\t\t},\n\n\t\t/** Reset any extra labelsn and compactLabelsn entries if changing labels.\n\t\t\t@private\n\t\t\t@param {object} base The options to be updated.\n\t\t\t@param {object} options The new option values. */\n\t\t_resetExtraLabels: function(base, options) {\n\t\t\tvar n = null;\n\t\t\tfor (n in options) {\n\t\t\t\tif (n.match(/[Ll]abels[02-9]|compactLabels1/)) {\n\t\t\t\t\tbase[n] = options[n];\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (n in base) { // Remove custom numbered labels\n\t\t\t\tif (n.match(/[Ll]abels[02-9]|compactLabels1/) && typeof options[n] === 'undefined') {\n\t\t\t\t\tbase[n] = null;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\n\t\t/** Determine whether or not a value is equivalent to <code>null</code>.\n\t\t\t@private\n\t\t\t@param {object} value The value to test.\n\t\t\t@return {boolean} <code>true</code> if equivalent to <code>null</code>, <code>false</code> if not. */\n\t\t_eqNull: function(value) {\n\t\t\treturn typeof value === 'undefined' || value === null;\n\t\t},\n\n\n\t\t/** Calculate internal settings for an instance.\n\t\t\t@private\n\t\t\t@param {jQuery} elem The containing element.\n\t\t\t@param {object} inst The current settings for this instance.\n\t\t\t@param {boolean} recalc <code>true</code> if until or since are set. */\n\t\t_adjustSettings: function(elem, inst, recalc) {\n\t\t\tvar serverEntry = null;\n\t\t\tfor (var i = 0; i < this._serverSyncs.length; i++) {\n\t\t\t\tif (this._serverSyncs[i][0] === inst.options.serverSync) {\n\t\t\t\t\tserverEntry = this._serverSyncs[i][1];\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar now = null;\n\t\t\tvar serverOffset = null;\n\t\t\tif (!this._eqNull(serverEntry)) {\n\t\t\t\tnow = new Date();\n\t\t\t\tserverOffset = (inst.options.serverSync ? serverEntry : 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tvar serverResult = ($.isFunction(inst.options.serverSync) ?\n\t\t\t\t\tinst.options.serverSync.apply(elem[0], []) : null);\n\t\t\t\tnow = new Date();\n\t\t\t\tserverOffset = (serverResult ? now.getTime() - serverResult.getTime() : 0);\n\t\t\t\tthis._serverSyncs.push([inst.options.serverSync, serverOffset]);\n\t\t\t}\n\t\t\tvar timezone = inst.options.timezone;\n\t\t\ttimezone = (this._eqNull(timezone) ? -now.getTimezoneOffset() : timezone);\n\t\t\tif (recalc || (!recalc && this._eqNull(inst._until) && this._eqNull(inst._since))) {\n\t\t\t\tinst._since = inst.options.since;\n\t\t\t\tif (!this._eqNull(inst._since)) {\n\t\t\t\t\tinst._since = this.UTCDate(timezone, this._determineTime(inst._since, null));\n\t\t\t\t\tif (inst._since && serverOffset) {\n\t\t\t\t\t\tinst._since.setMilliseconds(inst._since.getMilliseconds() + serverOffset);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tinst._until = this.UTCDate(timezone, this._determineTime(inst.options.until, now));\n\t\t\t\tif (serverOffset) {\n\t\t\t\t\tinst._until.setMilliseconds(inst._until.getMilliseconds() + serverOffset);\n\t\t\t\t}\n\t\t\t}\n\t\t\tinst._show = this._determineShow(inst);\n\t\t},\n\n\t\t/** Remove the countdown widget from an element.\n\t\t\t@private\n\t\t\t@param {jQuery} elem The containing element.\n\t\t\t@param {object} inst The current instance object. */\n\t\t_preDestroy: function(elem, inst) { // jshint unused:false\n\t\t\tthis._removeElem(elem[0]);\n\t\t\telem.empty();\n\t\t},\n\n\t\t/** Pause a countdown widget at the current time.\n\t\t\tStop it running but remember and display the current time.\n\t\t\t@param {Element} elem The containing element.\n\t\t\t@example $(selector).countdown('pause') */\n\t\tpause: function(elem) {\n\t\t\tthis._hold(elem, 'pause');\n\t\t},\n\n\t\t/** Pause a countdown widget at the current time.\n\t\t\tStop the display but keep the countdown running.\n\t\t\t@param {Element} elem The containing element.\n\t\t\t@example $(selector).countdown('lap') */\n\t\tlap: function(elem) {\n\t\t\tthis._hold(elem, 'lap');\n\t\t},\n\n\t\t/** Resume a paused countdown widget.\n\t\t\t@param {Element} elem The containing element.\n\t\t\t@example $(selector).countdown('resume') */\n\t\tresume: function(elem) {\n\t\t\tthis._hold(elem, null);\n\t\t},\n\n\t\t/** Toggle a paused countdown widget.\n\t\t\t@param {Element} elem The containing element.\n\t\t\t@example $(selector).countdown('toggle') */\n\t\ttoggle: function(elem) {\n\t\t\tvar inst = $.data(elem, this.name) || {};\n\t\t\tthis[!inst._hold ? 'pause' : 'resume'](elem);\n\t\t},\n\n\t\t/** Toggle a lapped countdown widget.\n\t\t\t@param {Element} elem The containing element.\n\t\t\t@example $(selector).countdown('toggleLap') */\n\t\ttoggleLap: function(elem) {\n\t\t\tvar inst = $.data(elem, this.name) || {};\n\t\t\tthis[!inst._hold ? 'lap' : 'resume'](elem);\n\t\t},\n\n\t\t/** Pause or resume a countdown widget.\n\t\t\t@private\n\t\t\t@param {Element} elem The containing element.\n\t\t\t@param {string} hold The new hold setting. */\n\t\t_hold: function(elem, hold) {\n\t\t\tvar inst = $.data(elem, this.name);\n\t\t\tif (inst) {\n\t\t\t\tif (inst._hold === 'pause' && !hold) {\n\t\t\t\t\tinst._periods = inst._savePeriods;\n\t\t\t\t\tvar sign = (inst._since ? '-' : '+');\n\t\t\t\t\tinst[inst._since ? '_since' : '_until'] =\n\t\t\t\t\t\tthis._determineTime(sign + inst._periods[0] + 'y' +\n\t\t\t\t\t\t\tsign + inst._periods[1] + 'o' + sign + inst._periods[2] + 'w' +\n\t\t\t\t\t\t\tsign + inst._periods[3] + 'd' + sign + inst._periods[4] + 'h' + \n\t\t\t\t\t\t\tsign + inst._periods[5] + 'm' + sign + inst._periods[6] + 's');\n\t\t\t\t\tthis._addElem(elem);\n\t\t\t\t}\n\t\t\t\tinst._hold = hold;\n\t\t\t\tinst._savePeriods = (hold === 'pause' ? inst._periods : null);\n\t\t\t\t$.data(elem, this.name, inst);\n\t\t\t\tthis._updateCountdown(elem, inst);\n\t\t\t}\n\t\t},\n\n\t\t/** Return the current time periods, broken down by years, months, weeks, days, hours, minutes, and seconds.\n\t\t\t@param {Element} elem The containing element.\n\t\t\t@return {number[]} The current periods for the countdown.\n\t\t\t@example var periods = $(selector).countdown('getTimes') */\n\t\tgetTimes: function(elem) {\n\t\t\tvar inst = $.data(elem, this.name);\n\t\t\treturn (!inst ? null : (inst._hold === 'pause' ? inst._savePeriods : (!inst._hold ? inst._periods :\n\t\t\t\tthis._calculatePeriods(inst, inst._show, inst.options.significant, new Date()))));\n\t\t},\n\n\t\t/** A time may be specified as an exact value or a relative one.\n\t\t\t@private\n\t\t\t@param {string|number|Date} setting The date/time value as a relative or absolute value.\n\t\t\t@param {Date} defaultTime The date/time to use if no other is supplied.\n\t\t\t@return {Date} The corresponding date/time. */\n\t\t_determineTime: function(setting, defaultTime) {\n\t\t\tvar self = this;\n\t\t\tvar offsetNumeric = function(offset) { // e.g. +300, -2\n\t\t\t\tvar time = new Date();\n\t\t\t\ttime.setTime(time.getTime() + offset * 1000);\n\t\t\t\treturn time;\n\t\t\t};\n\t\t\tvar offsetString = function(offset) { // e.g. '+2d', '-4w', '+3h +30m'\n\t\t\t\toffset = offset.toLowerCase();\n\t\t\t\tvar time = new Date();\n\t\t\t\tvar year = time.getFullYear();\n\t\t\t\tvar month = time.getMonth();\n\t\t\t\tvar day = time.getDate();\n\t\t\t\tvar hour = time.getHours();\n\t\t\t\tvar minute = time.getMinutes();\n\t\t\t\tvar second = time.getSeconds();\n\t\t\t\tvar pattern = /([+-]?[0-9]+)\\s*(s|m|h|d|w|o|y)?/g;\n\t\t\t\tvar matches = pattern.exec(offset);\n\t\t\t\twhile (matches) {\n\t\t\t\t\tswitch (matches[2] || 's') {\n\t\t\t\t\t\tcase 's':\n\t\t\t\t\t\t\tsecond += parseInt(matches[1], 10);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'm':\n\t\t\t\t\t\t\tminute += parseInt(matches[1], 10);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'h':\n\t\t\t\t\t\t\thour += parseInt(matches[1], 10);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'd':\n\t\t\t\t\t\t\tday += parseInt(matches[1], 10);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'w':\n\t\t\t\t\t\t\tday += parseInt(matches[1], 10) * 7;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'o':\n\t\t\t\t\t\t\tmonth += parseInt(matches[1], 10); \n\t\t\t\t\t\t\tday = Math.min(day, self._getDaysInMonth(year, month));\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'y':\n\t\t\t\t\t\t\tyear += parseInt(matches[1], 10);\n\t\t\t\t\t\t\tday = Math.min(day, self._getDaysInMonth(year, month));\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tmatches = pattern.exec(offset);\n\t\t\t\t}\n\t\t\t\treturn new Date(year, month, day, hour, minute, second, 0);\n\t\t\t};\n\t\t\tvar time = (this._eqNull(setting) ? defaultTime :\n\t\t\t\t(typeof setting === 'string' ? offsetString(setting) :\n\t\t\t\t(typeof setting === 'number' ? offsetNumeric(setting) : setting)));\n\t\t\tif (time) {\n\t\t\t\ttime.setMilliseconds(0);\n\t\t\t}\n\t\t\treturn time;\n\t\t},\n\n\t\t/** Determine the number of days in a month.\n\t\t\t@private\n\t\t\t@param {number} year The year.\n\t\t\t@param {number} month The month.\n\t\t\t@return {number} The days in that month. */\n\t\t_getDaysInMonth: function(year, month) {\n\t\t\treturn 32 - new Date(year, month, 32).getDate();\n\t\t},\n\n\t\t/** Default implementation to determine which set of labels should be used for an amount.\n\t\t\tUse the <code>labels</code> attribute with the same numeric suffix (if it exists).\n\t\t\t@private\n\t\t\t@param {number} num The amount to be displayed.\n\t\t\t@return {number} The set of labels to be used for this amount. */\n\t\t_normalLabels: function(num) {\n\t\t\treturn num;\n\t\t},\n\n\t\t/** Generate the HTML to display the countdown widget.\n\t\t\t@private\n\t\t\t@param {object} inst The current settings for this instance.\n\t\t\t@return {string} The new HTML for the countdown display. */\n\t\t_generateHTML: function(inst) {\n\t\t\tvar self = this;\n\t\t\t// Determine what to show\n\t\t\tinst._periods = (inst._hold ? inst._periods :\n\t\t\t\tthis._calculatePeriods(inst, inst._show, inst.options.significant, new Date()));\n\t\t\t// Show all 'asNeeded' after first non-zero value\n\t\t\tvar shownNonZero = false;\n\t\t\tvar showCount = 0;\n\t\t\tvar sigCount = inst.options.significant;\n\t\t\tvar show = $.extend({}, inst._show);\n\t\t\tvar period = null;\n\t\t\tfor (period = Y; period <= S; period++) {\n\t\t\t\tshownNonZero = shownNonZero || (inst._show[period] === '?' && inst._periods[period] > 0);\n\t\t\t\tshow[period] = (inst._show[period] === '?' && !shownNonZero ? null : inst._show[period]);\n\t\t\t\tshowCount += (show[period] ? 1 : 0);\n\t\t\t\tsigCount -= (inst._periods[period] > 0 ? 1 : 0);\n\t\t\t}\n\t\t\tvar showSignificant = [false, false, false, false, false, false, false];\n\t\t\tfor (period = S; period >= Y; period--) { // Determine significant periods\n\t\t\t\tif (inst._show[period]) {\n\t\t\t\t\tif (inst._periods[period]) {\n\t\t\t\t\t\tshowSignificant[period] = true;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tshowSignificant[period] = sigCount > 0;\n\t\t\t\t\t\tsigCount--;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar labels = (inst.options.compact ? inst.options.compactLabels : inst.options.labels);\n\t\t\tvar whichLabels = inst.options.whichLabels || this._normalLabels;\n\t\t\tvar showCompact = function(period) {\n\t\t\t\tvar labelsNum = inst.options['compactLabels' + whichLabels(inst._periods[period])];\n\t\t\t\treturn (show[period] ? self._translateDigits(inst, inst._periods[period]) +\n\t\t\t\t\t(labelsNum ? labelsNum[period] : labels[period]) + ' ' : '');\n\t\t\t};\n\t\t\tvar minDigits = (inst.options.padZeroes ? 2 : 1);\n\t\t\tvar showFull = function(period) {\n\t\t\t\tvar labelsNum = inst.options['labels' + whichLabels(inst._periods[period])];\n\t\t\t\treturn ((!inst.options.significant && show[period]) ||\n\t\t\t\t\t(inst.options.significant && showSignificant[period]) ?\n\t\t\t\t\t\t'<span class=\"' + self._sectionClass + '\">' +\n\t\t\t\t\t\t'<span class=\"' + self._amountClass + '\">' +\n\t\t\t\t\tself._minDigits(inst, inst._periods[period], minDigits) + '</span>' +\n\t\t\t\t\t'<span class=\"' + self._periodClass + '\">' +\n\t\t\t\t\t(labelsNum ? labelsNum[period] : labels[period]) + '</span></span>' : '');\n\t\t\t};\n\t\t\treturn (inst.options.layout ? this._buildLayout(inst, show, inst.options.layout,\n\t\t\t\tinst.options.compact, inst.options.significant, showSignificant) :\n\t\t\t\t((inst.options.compact ? // Compact version\n\t\t\t\t'<span class=\"' + this._rowClass + ' ' + this._amountClass +\n\t\t\t\t(inst._hold ? ' ' + this._holdingClass : '') + '\">' + \n\t\t\t\tshowCompact(Y) + showCompact(O) + showCompact(W) + showCompact(D) + \n\t\t\t\t(show[H] ? this._minDigits(inst, inst._periods[H], 2) : '') +\n\t\t\t\t(show[M] ? (show[H] ? inst.options.timeSeparator : '') +\n\t\t\t\tthis._minDigits(inst, inst._periods[M], 2) : '') +\n\t\t\t\t(show[S] ? (show[H] || show[M] ? inst.options.timeSeparator : '') +\n\t\t\t\tthis._minDigits(inst, inst._periods[S], 2) : '') :\n\t\t\t\t// Full version\n\t\t\t\t'<span class=\"' + this._rowClass + ' ' + this._showClass + (inst.options.significant || showCount) +\n\t\t\t\t(inst._hold ? ' ' + this._holdingClass : '') + '\">' +\n\t\t\t\tshowFull(Y) + showFull(O) + showFull(W) + showFull(D) +\n\t\t\t\tshowFull(H) + showFull(M) + showFull(S)) + '</span>' +\n\t\t\t\t(inst.options.description ? '<span class=\"' + this._rowClass + ' ' + this._descrClass + '\">' +\n\t\t\t\tinst.options.description + '</span>' : '')));\n\t\t},\n\n\t\t/** Construct a custom layout.\n\t\t\t@private\n\t\t\t@param {object} inst The current settings for this instance.\n\t\t\t@param {boolean[]} show Flags indicating which periods are requested.\n\t\t\t@param {string} layout The customised layout.\n\t\t\t@param {boolean} compact <code>true</code> if using compact labels.\n\t\t\t@param {number} significant The number of periods with values to show, zero for all.\n\t\t\t@param {boolean[]} showSignificant Other periods to show for significance.\n\t\t\t@return {string} The custom HTML. */\n\t\t_buildLayout: function(inst, show, layout, compact, significant, showSignificant) {\n\t\t\tvar labels = inst.options[compact ? 'compactLabels' : 'labels'];\n\t\t\tvar whichLabels = inst.options.whichLabels || this._normalLabels;\n\t\t\tvar labelFor = function(index) {\n\t\t\t\treturn (inst.options[(compact ? 'compactLabels' : 'labels') +\n\t\t\t\t\twhichLabels(inst._periods[index])] || labels)[index];\n\t\t\t};\n\t\t\tvar digit = function(value, position) {\n\t\t\t\treturn inst.options.digits[Math.floor(value / position) % 10];\n\t\t\t};\n\t\t\tvar subs = {desc: inst.options.description, sep: inst.options.timeSeparator,\n\t\t\t\tyl: labelFor(Y), yn: this._minDigits(inst, inst._periods[Y], 1),\n\t\t\t\tynn: this._minDigits(inst, inst._periods[Y], 2),\n\t\t\t\tynnn: this._minDigits(inst, inst._periods[Y], 3), y1: digit(inst._periods[Y], 1),\n\t\t\t\ty10: digit(inst._periods[Y], 10), y100: digit(inst._periods[Y], 100),\n\t\t\t\ty1000: digit(inst._periods[Y], 1000),\n\t\t\t\tol: labelFor(O), on: this._minDigits(inst, inst._periods[O], 1),\n\t\t\t\tonn: this._minDigits(inst, inst._periods[O], 2),\n\t\t\t\tonnn: this._minDigits(inst, inst._periods[O], 3), o1: digit(inst._periods[O], 1),\n\t\t\t\to10: digit(inst._periods[O], 10), o100: digit(inst._periods[O], 100),\n\t\t\t\to1000: digit(inst._periods[O], 1000),\n\t\t\t\twl: labelFor(W), wn: this._minDigits(inst, inst._periods[W], 1),\n\t\t\t\twnn: this._minDigits(inst, inst._periods[W], 2),\n\t\t\t\twnnn: this._minDigits(inst, inst._periods[W], 3), w1: digit(inst._periods[W], 1),\n\t\t\t\tw10: digit(inst._periods[W], 10), w100: digit(inst._periods[W], 100),\n\t\t\t\tw1000: digit(inst._periods[W], 1000),\n\t\t\t\tdl: labelFor(D), dn: this._minDigits(inst, inst._periods[D], 1),\n\t\t\t\tdnn: this._minDigits(inst, inst._periods[D], 2),\n\t\t\t\tdnnn: this._minDigits(inst, inst._periods[D], 3), d1: digit(inst._periods[D], 1),\n\t\t\t\td10: digit(inst._periods[D], 10), d100: digit(inst._periods[D], 100),\n\t\t\t\td1000: digit(inst._periods[D], 1000),\n\t\t\t\thl: labelFor(H), hn: this._minDigits(inst, inst._periods[H], 1),\n\t\t\t\thnn: this._minDigits(inst, inst._periods[H], 2),\n\t\t\t\thnnn: this._minDigits(inst, inst._periods[H], 3), h1: digit(inst._periods[H], 1),\n\t\t\t\th10: digit(inst._periods[H], 10), h100: digit(inst._periods[H], 100),\n\t\t\t\th1000: digit(inst._periods[H], 1000),\n\t\t\t\tml: labelFor(M), mn: this._minDigits(inst, inst._periods[M], 1),\n\t\t\t\tmnn: this._minDigits(inst, inst._periods[M], 2),\n\t\t\t\tmnnn: this._minDigits(inst, inst._periods[M], 3), m1: digit(inst._periods[M], 1),\n\t\t\t\tm10: digit(inst._periods[M], 10), m100: digit(inst._periods[M], 100),\n\t\t\t\tm1000: digit(inst._periods[M], 1000),\n\t\t\t\tsl: labelFor(S), sn: this._minDigits(inst, inst._periods[S], 1),\n\t\t\t\tsnn: this._minDigits(inst, inst._periods[S], 2),\n\t\t\t\tsnnn: this._minDigits(inst, inst._periods[S], 3), s1: digit(inst._periods[S], 1),\n\t\t\t\ts10: digit(inst._periods[S], 10), s100: digit(inst._periods[S], 100),\n\t\t\t\ts1000: digit(inst._periods[S], 1000)};\n\t\t\tvar html = layout;\n\t\t\t// Replace period containers: {p<}...{p>}\n\t\t\tfor (var i = Y; i <= S; i++) {\n\t\t\t\tvar period = 'yowdhms'.charAt(i);\n\t\t\t\tvar re = new RegExp('\\\\{' + period + '<\\\\}([\\\\s\\\\S]*)\\\\{' + period + '>\\\\}', 'g');\n\t\t\t\thtml = html.replace(re, ((!significant && show[i]) ||\n\t\t\t\t\t(significant && showSignificant[i]) ? '$1' : ''));\n\t\t\t}\n\t\t\t// Replace period values: {pn}\n\t\t\t$.each(subs, function(n, v) {\n\t\t\t\tvar re = new RegExp('\\\\{' + n + '\\\\}', 'g');\n\t\t\t\thtml = html.replace(re, v);\n\t\t\t});\n\t\t\treturn html;\n\t\t},\n\n\t\t/** Ensure a numeric value has at least n digits for display.\n\t\t\t@private\n\t\t\t@param {object} inst The current settings for this instance.\n\t\t\t@param {number} value The value to display.\n\t\t\t@param {number} len The minimum length.\n\t\t\t@return {string} The display text. */\n\t\t_minDigits: function(inst, value, len) {\n\t\t\tvalue = '' + value;\n\t\t\tif (value.length >= len) {\n\t\t\t\treturn this._translateDigits(inst, value);\n\t\t\t}\n\t\t\tvalue = '0000000000' + value;\n\t\t\treturn this._translateDigits(inst, value.substr(value.length - len));\n\t\t},\n\n\t\t/** Translate digits into other representations.\n\t\t\t@private\n\t\t\t@param {object} inst The current settings for this instance.\n\t\t\t@param {string} value The text to translate.\n\t\t\t@return {string} The translated text. */\n\t\t_translateDigits: function(inst, value) {\n\t\t\treturn ('' + value).replace(/[0-9]/g, function(digit) {\n\t\t\t\t\treturn inst.options.digits[digit];\n\t\t\t\t});\n\t\t},\n\n\t\t/** Translate the format into flags for each period.\n\t\t\t@private\n\t\t\t@param {object} inst The current settings for this instance.\n\t\t\t@return {string[]} Flags indicating which periods are requested (?) or\n\t\t\t\t\trequired (!) by year, month, week, day, hour, minute, second. */\n\t\t_determineShow: function(inst) {\n\t\t\tvar format = inst.options.format;\n\t\t\tvar show = [];\n\t\t\tshow[Y] = (format.match('y') ? '?' : (format.match('Y') ? '!' : null));\n\t\t\tshow[O] = (format.match('o') ? '?' : (format.match('O') ? '!' : null));\n\t\t\tshow[W] = (format.match('w') ? '?' : (format.match('W') ? '!' : null));\n\t\t\tshow[D] = (format.match('d') ? '?' : (format.match('D') ? '!' : null));\n\t\t\tshow[H] = (format.match('h') ? '?' : (format.match('H') ? '!' : null));\n\t\t\tshow[M] = (format.match('m') ? '?' : (format.match('M') ? '!' : null));\n\t\t\tshow[S] = (format.match('s') ? '?' : (format.match('S') ? '!' : null));\n\t\t\treturn show;\n\t\t},\n\n\t\t/** Calculate the requested periods between now and the target time.\n\t\t\t@private\n\t\t\t@param {object} inst The current settings for this instance.\n\t\t\t@param {string[]} show Flags indicating which periods are requested/required.\n\t\t\t@param {number} significant The number of periods with values to show, zero for all.\n\t\t\t@param {Date} now The current date and time.\n\t\t\t@return {number[]} The current time periods (always positive)\n\t\t\t\t\tby year, month, week, day, hour, minute, second. */\n\t\t_calculatePeriods: function(inst, show, significant, now) {\n\t\t\t// Find endpoints\n\t\t\tinst._now = now;\n\t\t\tinst._now.setMilliseconds(0);\n\t\t\tvar until = new Date(inst._now.getTime());\n\t\t\tif (inst._since) {\n\t\t\t\tif (now.getTime() < inst._since.getTime()) {\n\t\t\t\t\tinst._now = now = until;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tnow = inst._since;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tuntil.setTime(inst._until.getTime());\n\t\t\t\tif (now.getTime() > inst._until.getTime()) {\n\t\t\t\t\tinst._now = now = until;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Calculate differences by period\n\t\t\tvar periods = [0, 0, 0, 0, 0, 0, 0];\n\t\t\tif (show[Y] || show[O]) {\n\t\t\t\t// Treat end of months as the same\n\t\t\t\tvar lastNow = this._getDaysInMonth(now.getFullYear(), now.getMonth());\n\t\t\t\tvar lastUntil = this._getDaysInMonth(until.getFullYear(), until.getMonth());\n\t\t\t\tvar sameDay = (until.getDate() === now.getDate() ||\n\t\t\t\t\t(until.getDate() >= Math.min(lastNow, lastUntil) &&\n\t\t\t\t\tnow.getDate() >= Math.min(lastNow, lastUntil)));\n\t\t\t\tvar getSecs = function(date) {\n\t\t\t\t\treturn (date.getHours() * 60 + date.getMinutes()) * 60 + date.getSeconds();\n\t\t\t\t};\n\t\t\t\tvar months = Math.max(0,\n\t\t\t\t\t(until.getFullYear() - now.getFullYear()) * 12 + until.getMonth() - now.getMonth() +\n\t\t\t\t\t((until.getDate() < now.getDate() && !sameDay) ||\n\t\t\t\t\t(sameDay && getSecs(until) < getSecs(now)) ? -1 : 0));\n\t\t\t\tperiods[Y] = (show[Y] ? Math.floor(months / 12) : 0);\n\t\t\t\tperiods[O] = (show[O] ? months - periods[Y] * 12 : 0);\n\t\t\t\t// Adjust for months difference and end of month if necessary\n\t\t\t\tnow = new Date(now.getTime());\n\t\t\t\tvar wasLastDay = (now.getDate() === lastNow);\n\t\t\t\tvar lastDay = this._getDaysInMonth(now.getFullYear() + periods[Y],\n\t\t\t\t\tnow.getMonth() + periods[O]);\n\t\t\t\tif (now.getDate() > lastDay) {\n\t\t\t\t\tnow.setDate(lastDay);\n\t\t\t\t}\n\t\t\t\tnow.setFullYear(now.getFullYear() + periods[Y]);\n\t\t\t\tnow.setMonth(now.getMonth() + periods[O]);\n\t\t\t\tif (wasLastDay) {\n\t\t\t\t\tnow.setDate(lastDay);\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar diff = Math.floor((until.getTime() - now.getTime()) / 1000);\n\t\t\tvar period = null;\n\t\t\tvar extractPeriod = function(period, numSecs) {\n\t\t\t\tperiods[period] = (show[period] ? Math.floor(diff / numSecs) : 0);\n\t\t\t\tdiff -= periods[period] * numSecs;\n\t\t\t};\n\t\t\textractPeriod(W, 604800);\n\t\t\textractPeriod(D, 86400);\n\t\t\textractPeriod(H, 3600);\n\t\t\textractPeriod(M, 60);\n\t\t\textractPeriod(S, 1);\n\t\t\tif (diff > 0 && !inst._since) { // Round up if left overs\n\t\t\t\tvar multiplier = [1, 12, 4.3482, 7, 24, 60, 60];\n\t\t\t\tvar lastShown = S;\n\t\t\t\tvar max = 1;\n\t\t\t\tfor (period = S; period >= Y; period--) {\n\t\t\t\t\tif (show[period]) {\n\t\t\t\t\t\tif (periods[lastShown] >= max) {\n\t\t\t\t\t\t\tperiods[lastShown] = 0;\n\t\t\t\t\t\t\tdiff = 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (diff > 0) {\n\t\t\t\t\t\t\tperiods[period]++;\n\t\t\t\t\t\t\tdiff = 0;\n\t\t\t\t\t\t\tlastShown = period;\n\t\t\t\t\t\t\tmax = 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tmax *= multiplier[period];\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (significant) { // Zero out insignificant periods\n\t\t\t\tfor (period = Y; period <= S; period++) {\n\t\t\t\t\tif (significant && periods[period]) {\n\t\t\t\t\t\tsignificant--;\n\t\t\t\t\t}\n\t\t\t\t\telse if (!significant) {\n\t\t\t\t\t\tperiods[period] = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn periods;\n\t\t}\n\t});\n\n})(jQuery);\n"
  },
  {
    "path": "dist/js/jquery.plugin.js",
    "content": "/* globals JQClass */\n/*! Simple JavaScript Inheritance\n * By John Resig http://ejohn.org/\n * MIT Licensed.\n */\n// Inspired by base2 and Prototype\n(function(){\n\t'use strict';\n\tvar initializing = false;\n\n\t// The base JQClass implementation (does nothing)\n\twindow.JQClass = function(){};\n\n\t// Collection of derived classes\n\tJQClass.classes = {};\n \n\t// Create a new JQClass that inherits from this class\n\tJQClass.extend = function extender(prop) {\n\t\tvar base = this.prototype;\n\n\t\t// Instantiate a base class (but only create the instance, don't run the init constructor)\n\t\tinitializing = true;\n\t\tvar prototype = new this();\n\t\tinitializing = false;\n\n\t\t// Copy the properties over onto the new prototype\n\t\tfor (var name in prop) { // jshint loopfunc:true\n\t\t\t// Check if we're overwriting an existing function\n\t\t\tif (typeof prop[name] === 'function' && typeof base[name] === 'function') {\n\t\t\t\tprototype[name] = (function (name, fn) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tvar __super = this._super;\n\t\t\t\t\t\t// Add a new ._super() method that is the same method but on the super-class\n\t\t\t\t\t\tthis._super = function (args) {\n\t\t\t\t\t\t\treturn base[name].apply(this, args || []);\n\t\t\t\t\t\t};\n\t\t\t\t\t\tvar ret = fn.apply(this, arguments);\n\t\t\t\t\t\t// The method only needs to be bound temporarily, so we remove it when we're done executing\n\t\t\t\t\t\tthis._super = __super;\n\t\t\t\t\t\treturn ret;\n\t\t\t\t\t};\n\t\t\t\t})(name, prop[name]);\n\t\t\t// Check if we're overwriting existing default options.\n\t\t\t} else if (typeof prop[name] === 'object' && typeof base[name] === 'object' && name === 'defaultOptions') {\n\t\t\t\tvar obj1 = base[name];\n\t\t\t\tvar obj2 = prop[name];\n\t\t\t\tvar obj3 = {};\n\t\t\t\tvar key;\n\t\t\t\tfor (key in obj1) { // jshint forin:false\n\t\t\t\t\tobj3[key] = obj1[key];\n\t\t\t\t}\n\t\t\t\tfor (key in obj2) { // jshint forin:false\n\t\t\t\t\tobj3[key] = obj2[key];\n\t\t\t\t}\n\t\t\t\tprototype[name] = obj3;\n\t\t\t} else {\n\t\t\t\tprototype[name] = prop[name];\n\t\t\t}\n\t\t}\n\n\t\t// The dummy class constructor\n\t\tfunction JQClass() {\n\t\t\t// All construction is actually done in the init method\n\t\t\tif (!initializing && this._init) {\n\t\t\t\tthis._init.apply(this, arguments);\n\t\t\t}\n\t\t}\n\n\t\t// Populate our constructed prototype object\n\t\tJQClass.prototype = prototype;\n\n\t\t// Enforce the constructor to be what we expect\n\t\tJQClass.prototype.constructor = JQClass;\n\n\t\t// And make this class extendable\n\t\tJQClass.extend = extender;\n\n\t\treturn JQClass;\n\t};\n})();\n/*! Abstract base class for collection plugins v1.0.2.\n\tWritten by Keith Wood (wood.keith{at}optusnet.com.au) December 2013.\n\tLicensed under the MIT license (http://keith-wood.name/licence.html). */\n(function($) { // Ensure $, encapsulate\n\t'use strict';\n\n\t/** <p>Abstract base class for collection plugins v1.0.2.</p>\n\t\t<p>Written by Keith Wood (wood.keith{at}optusnet.com.au) December 2013.</p>\n\t\t<p>Licensed under the MIT license (http://keith-wood.name/licence.html).</p>\n\t\t<p>Use {@link $.JQPlugin.createPlugin} to create new plugins using this framework.</p>\n\t\t<p>This base class provides common functionality such as:</p>\n\t\t<ul>\n\t\t\t<li>Creates jQuery bridge - allowing you to invoke your plugin on a collection of elements.</li>\n\t\t\t<li>Handles initialisation including reading settings from metadata -\n\t\t\t\tan instance object is attached to the affected element(s) containing all the necessary data.</li>\n\t\t\t<li>Handles option retrieval and update - options can be set through default values,\n\t\t\t\tthrough inline metadata, or through instantiation settings.<br>\n\t\t\t\tMetadata is specified as an attribute on the element:\n\t\t\t\t<code>data-&lt;pluginName>=\"&lt;option name>: '&lt;value>', ...\"</code>.\n\t\t\t\tDates should be specified as strings in this format: <code>'new Date(y, m-1, d)'</code>.</li>\n\t\t\t<li>Handles method calling - inner functions starting with '_'are inaccessible,\n\t\t\t\twhereas others can be called via <code>$(selector).pluginName('functionName')</code>.</li>\n\t\t\t<li>Handles plugin destruction - removing all trace of the plugin.</li>\n\t\t</ul>\n\t\t@module JQPlugin\n\t\t@abstract */\n\tJQClass.classes.JQPlugin = JQClass.extend({\n\n\t\t/** Name to identify this plugin.\n\t\t\t@example name: 'tabs' */\n\t\tname: 'plugin',\n\n\t\t/** Default options for instances of this plugin (default: {}).\n\t\t\t@example defaultOptions: {\n  selectedClass: 'selected',\n  triggers: 'click'\n} */\n\t\tdefaultOptions: {},\n\n\t\t/** Options dependent on the locale.\n\t\t\tIndexed by language and (optional) country code, with '' denoting the default language (English/US).\n\t\t\tNormally additional languages would be provided as separate files to all them to be included as needed.\n\t\t\t@example regionalOptions: {\n  '': {\n    greeting: 'Hi'\n  }\n} */\n\t\tregionalOptions: {},\n\n\t\t/** Whether or not a deep merge should be performed when accumulating options.\n\t\t\tThe default is <code>true</code> but can be overridden in a sub-class. */\n\t\tdeepMerge: true,\n\n\t\t/** Retrieve a marker class for affected elements.\n\t\t\tIn the format: <code>is-&lt;pluginName&gt;</code>.\n\t\t\t@protected\n\t\t\t@return {string} The marker class. */\n\t\t_getMarker: function() {\n\t\t\treturn 'is-' + this.name;\n\t\t},\n\n\t\t/** Initialise the plugin.\n\t\t\tCreate the jQuery bridge - plugin name <code>xyz</code>\n\t\t\tproduces singleton <code>$.xyz</code> and collection function <code>$.fn.xyz</code>.\n\t\t\t@protected */\n\t\t_init: function() {\n\t\t\t// Apply default localisations\n\t\t\t$.extend(this.defaultOptions, (this.regionalOptions && this.regionalOptions['']) || {});\n\t\t\t// Camel-case the name\n\t\t\tvar jqName = camelCase(this.name);\n\t\t\t// Expose jQuery singleton manager\n\t\t\t$[jqName] = this;\n\t\t\t// Expose jQuery collection plugin\n\t\t\t$.fn[jqName] = function(options) {\n\t\t\t\tvar otherArgs = Array.prototype.slice.call(arguments, 1);\n\t\t\t\tvar inst = this;\n\t\t\t\tvar returnValue = this;\n\t\t\t\tthis.each(function () {\n\t\t\t\t\tif (typeof options === 'string') {\n\t\t\t\t\t\tif (options[0] === '_' || !$[jqName][options]) {\n\t\t\t\t\t\t\tthrow 'Unknown method: ' + options;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar methodValue = $[jqName][options].apply($[jqName], [this].concat(otherArgs));\n\t\t\t\t\t\tif (methodValue !== inst && methodValue !== undefined) {\n\t\t\t\t\t\t\treturnValue = methodValue;\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$[jqName]._attach(this, options);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\treturn returnValue;\n\t\t\t};\n\t\t},\n\n\t\t/** Set default options for all subsequent instances.\n\t\t\t@param {object} options The new default options.\n\t\t\t@example $.pluginName.setDefaults({name: value, ...}) */\n\t\tsetDefaults: function(options) {\n\t\t\t$.extend(this.defaultOptions, options || {});\n\t\t},\n\n\t\t/** Initialise an element. Called internally only.\n\t\t\tAdds an instance object as data named for the plugin.\n\t\t\tOverride {@linkcode module:JQPlugin~_postAttach|_postAttach} for plugin-specific processing.\n\t\t\t@private\n\t\t\t@param {Element} elem The element to enhance.\n\t\t\t@param {object} options Overriding settings. */\n\t\t_attach: function(elem, options) {\n\t\t\telem = $(elem);\n\t\t\tif (elem.hasClass(this._getMarker())) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\telem.addClass(this._getMarker());\n\t\t\toptions = $.extend(this.deepMerge, {}, this.defaultOptions, this._getMetadata(elem), options || {});\n\t\t\tvar inst = $.extend({name: this.name, elem: elem, options: options}, this._instSettings(elem, options));\n\t\t\telem.data(this.name, inst); // Save instance against element\n\t\t\tthis._postAttach(elem, inst);\n\t\t\tthis.option(elem, options);\n\t\t},\n\n\t\t/** Retrieve additional instance settings.\n\t\t\tOverride this in a sub-class to provide extra settings.\n\t\t\tThese are added directly to the instance object.\n\t\t\tDefault attributes of an instance object are shown as properties below:\n\t\t\t@protected\n\t\t\t@param {jQuery} elem The current jQuery element.\n\t\t\t@param {object} options The instance options.\n\t\t\t@return {object} Any extra instance values.\n\t\t\t@property {Element} elem The element to which this instance applies.\n\t\t\t@property {string} name The name of this plugin.\n\t\t\t@property {object} options The accumulated options for this instance.\n\t\t\t@example _instSettings: function(elem, options) {\n  return {nav: elem.find(options.navSelector)};\n} */\n\t\t_instSettings: function(elem, options) { // jshint unused:false\n\t\t\treturn {};\n\t\t},\n\n\t\t/** Plugin specific post initialisation.\n\t\t\tOverride this in a sub-class to perform extra activities.\n\t\t\tThis is where you would implement your plugin's main functionality.\n\t\t\t@protected\n\t\t\t@param {jQuery} elem The current jQuery element.\n\t\t\t@param {object} inst The instance settings.\n\t\t\t@example _postAttach: function(elem, inst) {\n  elem.on('click.' + this.name, function() {\n    ...\n  });\n} */\n\t\t_postAttach: function(elem, inst) { // jshint unused:false\n\t\t},\n\t\t\n\t\t/** Retrieve metadata configuration from the element.\n\t\t\tMetadata is specified as an attribute:\n\t\t\t<code>data-&lt;pluginName>=\"&lt;option name>: '&lt;value>', ...\"</code>.\n\t\t\tDates should be specified as strings in this format: <code>'new Date(y, m-1, d)'</code>.\n\t\t\t@private\n\t\t\t@param {jQuery} elem The source element.\n\t\t\t@return {object} The inline configuration or {}. */\n\t\t_getMetadata: function(elem) {\n\t\t\ttry {\n\t\t\t\tvar data = elem.data(this.name.toLowerCase()) || '';\n\t\t\t\tdata = data.replace(/(\\\\?)'/g, function(e, t) {\n\t\t\t\t\treturn t ? '\\'' : '\"';\n\t\t\t\t}).replace(/([a-zA-Z0-9]+):/g, function(match, group, i) {\n\t\t\t\t\tvar count = data.substring(0, i).match(/\"/g); // Handle embedded ':'\n\t\t\t\t\treturn (!count || count.length % 2 === 0 ? '\"' + group + '\":' : group + ':');\n\t\t\t\t}).replace(/\\\\:/g, ':');\n\t\t\t\tdata = $.parseJSON('{' + data + '}');\n\t\t\t\tfor (var key in data) {\n\t\t\t\t\tif (data.hasOwnProperty(key)) {\n\t\t\t\t\t\tvar value = data[key];\n\t\t\t\t\t\tif (typeof value === 'string' && value.match(/^new Date\\(([-0-9,\\s]*)\\)$/)) { // Convert dates\n\t\t\t\t\t\t\tdata[key] = eval(value); // jshint ignore:line\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn data;\n\t\t\t}\n\t\t\tcatch (e) {\n\t\t\t\treturn {};\n\t\t\t}\n\t\t},\n\n\t\t/** Retrieve the instance data for element.\n\t\t\t@protected\n\t\t\t@param {Element} elem The source element.\n\t\t\t@return {object} The instance data or <code>{}</code> if none. */\n\t\t_getInst: function(elem) {\n\t\t\treturn $(elem).data(this.name) || {};\n\t\t},\n\n\t\t/** Retrieve or reconfigure the settings for a plugin.\n\t\t\tIf new settings are provided they are applied to the instance options.\n\t\t\tIf an option name only is provided the value of that option is returned.\n\t\t\tIf no name or value is provided, all options are returned.\n\t\t\tOverride {@linkcode module:JQPlugin~_optionsChanged|_optionsChanged}\n\t\t\tfor plugin-specific processing when option values change.\n\t\t\t@param {Element} elem The source element.\n\t\t\t@param {object|string} [name] The collection of new option values or the name of a single option.\n\t\t\t@param {any} [value] The value for a single named option.\n\t\t\t@return {any|object} If retrieving a single value or all options.\n\t\t\t@example $(selector).plugin('option', 'name', value) // Set one option\n$(selector).plugin('option', {name: value, ...}) // Set multiple options\nvar value = $(selector).plugin('option', 'name') // Get one option\nvar options = $(selector).plugin('option') // Get all options */\n\t\toption: function(elem, name, value) {\n\t\t\telem = $(elem);\n\t\t\tvar inst = elem.data(this.name);\n\t\t\tvar options = name || {};\n\t\t\tif  (!name || (typeof name === 'string' && typeof value === 'undefined')) {\n\t\t\t\toptions = (inst || {}).options;\n\t\t\t\treturn (options && name ? options[name] : options);\n\t\t\t}\n\t\t\tif (!elem.hasClass(this._getMarker())) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (typeof name === 'string') {\n\t\t\t\toptions = {};\n\t\t\t\toptions[name] = value;\n\t\t\t}\n\t\t\tthis._optionsChanged(elem, inst, options);\n\t\t\t$.extend(inst.options, options);\n\t\t},\n\n\t\t/** Plugin specific options processing.\n\t\t\tOld value available in <code>inst.options[name]</code>, new value in <code>options[name]</code>.\n\t\t\tOverride this in a sub-class to perform extra activities.\n\t\t\t@protected\n\t\t\t@param {jQuery} elem The current jQuery element.\n\t\t\t@param {object} inst The instance settings.\n\t\t\t@param {object} options The new options.\n\t\t\t@example _optionsChanged: function(elem, inst, options) {\n  if (options.name != inst.options.name) {\n    elem.removeClass(inst.options.name).addClass(options.name);\n  }\n} */\n\t\t_optionsChanged: function(elem, inst, options) { // jshint unused:false\n\t\t},\n\n\t\t/** Remove all trace of the plugin.\n\t\t\tOverride {@linkcode module:JQPlugin~_preDestroy|_preDestroy} for plugin-specific processing.\n\t\t\t@param {Element} elem The source element.\n\t\t\t@example $(selector).plugin('destroy') */\n\t\tdestroy: function(elem) {\n\t\t\telem = $(elem);\n\t\t\tif (!elem.hasClass(this._getMarker())) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis._preDestroy(elem, this._getInst(elem));\n\t\t\telem.removeData(this.name).removeClass(this._getMarker());\n\t\t},\n\n\t\t/** Plugin specific pre destruction.\n\t\t\tIt is invoked as part of the {@linkcode module:JQPlugin~destroy|destroy} processing.\n\t\t\tOverride this in a sub-class to perform extra activities and undo everything that was\n\t\t\tdone in the {@linkcode module:JQPlugin~_postAttach|_postAttach} or\n\t\t\t{@linkcode module:JQPlugin~_optionsChanged|_optionsChanged} functions.\n\t\t\t@protected\n\t\t\t@param {jQuery} elem The current jQuery element.\n\t\t\t@param {object} inst The instance settings.\n\t\t\t@example _preDestroy: function(elem, inst) {\n  elem.off('.' + this.name);\n} */\n\t\t_preDestroy: function(elem, inst) { // jshint unused:false\n\t\t}\n\t});\n\n\t/** Convert names from hyphenated to camel-case.\n\t\t@private\n\t\t@param {string} value The original hyphenated name.\n\t\t@return {string} The camel-case version. */\n\tfunction camelCase(name) {\n\t\treturn name.replace(/-([a-z])/g, function(match, group) {\n\t\t\treturn group.toUpperCase();\n\t\t});\n\t}\n\n\t/** Expose the plugin base.\n\t\t@namespace $.JQPlugin */\n\t$.JQPlugin = {\n\n\t\t/** Create a new collection plugin.\n\t\t\t@memberof $.JQPlugin\n\t\t\t@param {string} [superClass='JQPlugin'] The name of the parent class to inherit from.\n\t\t\t@param {object} overrides The property/function overrides for the new class.\n\t\t\t\tSee {@link module:JQPlugin|JQPlugin} for the base functionality.\n\t\t\t@example $.JQPlugin.createPlugin({ // Define the plugin\n  name: 'tabs',\n  defaultOptions: {selectedClass: 'selected'},\n  _initSettings: function(elem, options) { return {...}; },\n  _postAttach: function(elem, inst) { ... }\n});\n$('selector').tabs(); // And instantiate it */\n\t\tcreatePlugin: function(superClass, overrides) {\n\t\t\tif (typeof superClass === 'object') {\n\t\t\t\toverrides = superClass;\n\t\t\t\tsuperClass = 'JQPlugin';\n\t\t\t}\n\t\t\tsuperClass = camelCase(superClass);\n\t\t\tvar className = camelCase(overrides.name);\n\t\t\tJQClass.classes[className] = JQClass.classes[superClass].extend(overrides);\n\t\t\tnew JQClass.classes[className](); // jshint ignore:line\n\t\t}\n\t};\n\n})(jQuery);"
  },
  {
    "path": "doc/global.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\">\n    <title>JSDoc: Global</title>\n\n    <script src=\"scripts/prettify/prettify.js\"> </script>\n    <script src=\"scripts/prettify/lang-css.js\"> </script>\n    <!--[if lt IE 9]>\n      <script src=\"//html5shiv.googlecode.com/svn/trunk/html5.js\"></script>\n    <![endif]-->\n    <link type=\"text/css\" rel=\"stylesheet\" href=\"styles/prettify-tomorrow.css\">\n    <link type=\"text/css\" rel=\"stylesheet\" href=\"styles/jsdoc-default.css\">\n</head>\n\n<body>\n\n<div id=\"main\">\n\n    <h1 class=\"page-title\">Global</h1>\n\n    \n\n\n\n\n<section>\n\n<header>\n    \n        <h2></h2>\n        \n    \n</header>\n\n<article>\n    <div class=\"container-overview\">\n    \n        \n\n        \n\n\n<dl class=\"details\">\n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n</dl>\n\n\n        \n    \n    </div>\n\n    \n\n    \n\n    \n\n     \n\n    \n\n    \n\n    \n\n    \n        <h3 class=\"subsection-title\">Type Definitions</h3>\n\n        \n                \n\n    \n\n    <h4 class=\"name\" id=\"CountdownExpiryCallback\"><span class=\"type-signature\"></span>CountdownExpiryCallback<span class=\"signature\">()</span><span class=\"type-signature\"></span></h4>\n\n    \n\n\n\n<div class=\"description\">\n    Countdown expiry callback.\n\t\t\tUsed with the <a href=\"module-Countdown.html#~defaultOptions\"><code>onExpiry</code></a> option and\n\t\t\ttriggered when the countdown expires.\n</div>\n\n\n\n\n\n\n\n    <h5>This:</h5>\n    <ul><li><code>Element</code></li></ul>\n\n\n\n\n\n\n\n<dl class=\"details\">\n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n    <dt class=\"tag-source\">Source:</dt>\n    <dd class=\"tag-source\"><ul class=\"dummy\"><li>\n        <a href=\"jquery.countdown.js.html\">jquery.countdown.js</a>, <a href=\"jquery.countdown.js.html#line35\">line 35</a>\n    </li></ul></dd>\n    \n\n    \n\n    \n\n    \n</dl>\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n    <h5>Example</h5>\n    \n    <pre class=\"prettyprint\"><code>onExpiry: function() {\n  alert('Done');\n}</code></pre>\n\n\n\n            \n                \n\n    \n\n    <h4 class=\"name\" id=\"CountdownServerSyncCallback\"><span class=\"type-signature\"></span>CountdownServerSyncCallback<span class=\"signature\">()</span><span class=\"type-signature\"> &rarr; {Date}</span></h4>\n\n    \n\n\n\n<div class=\"description\">\n    Countdown server synchronisation callback.\n\t\t\tUsed with the <a href=\"module-Countdown.html#~defaultOptions\"><code>serverSync</code></a> option and\n\t\t\ttriggered when the countdown is initialised.\n</div>\n\n\n\n\n\n\n\n    <h5>This:</h5>\n    <ul><li><code>$.countdown</code></li></ul>\n\n\n\n\n\n\n\n<dl class=\"details\">\n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n    <dt class=\"tag-source\">Source:</dt>\n    <dd class=\"tag-source\"><ul class=\"dummy\"><li>\n        <a href=\"jquery.countdown.js.html\">jquery.countdown.js</a>, <a href=\"jquery.countdown.js.html#line45\">line 45</a>\n    </li></ul></dd>\n    \n\n    \n\n    \n\n    \n</dl>\n\n\n\n\n\n\n\n\n\n\n\n\n\n<h5>Returns:</h5>\n\n        \n<div class=\"param-desc\">\n    The current date/time on the server as expressed in the local timezone.\n</div>\n\n\n\n<dl>\n    <dt>\n        Type\n    </dt>\n    <dd>\n        \n<span class=\"param-type\">Date</span>\n\n\n    </dd>\n</dl>\n\n    \n\n\n    <h5>Example</h5>\n    \n    <pre class=\"prettyprint\"><code>serverSync: function() {\n  var time = null;\n  $.ajax({url: 'http://myserver.com/serverTime.php',\n    async: false, dataType: 'text',\n    success: function(text) {\n      time = new Date(text);\n    }, error: function(http, message, exc) {\n      time = new Date();\n  });\n  return time;\n}</code></pre>\n\n\n\n            \n                \n\n    \n\n    <h4 class=\"name\" id=\"CountdownTickCallback\"><span class=\"type-signature\"></span>CountdownTickCallback<span class=\"signature\">(periods)</span><span class=\"type-signature\"></span></h4>\n\n    \n\n\n\n<div class=\"description\">\n    Countdown tick callback.\n\t\t\tUsed with the <a href=\"module-Countdown.html#~defaultOptions\"><code>onTick</code></a> option and\n\t\t\ttriggered on every <a href=\"module-Countdown.html#~defaultOptions\"><code>tickInterval</code></a> ticks of the countdown.\n</div>\n\n\n\n\n\n\n\n    <h5>This:</h5>\n    <ul><li><code>Element</code></li></ul>\n\n\n\n    <h5>Parameters:</h5>\n    \n\n<table class=\"params\">\n    <thead>\n    <tr>\n        \n        <th>Name</th>\n        \n\n        <th>Type</th>\n\n        \n\n        \n\n        <th class=\"last\">Description</th>\n    </tr>\n    </thead>\n\n    <tbody>\n    \n\n        <tr>\n            \n                <td class=\"name\"><code>periods</code></td>\n            \n\n            <td class=\"type\">\n            \n                \n<span class=\"param-type\">Array.&lt;number></span>\n\n\n            \n            </td>\n\n            \n\n            \n\n            <td class=\"description last\">The breakdown by period (years, months, weeks, days,\n\t\t\t\t\thours, minutes, seconds) of the time remaining/passed.</td>\n        </tr>\n\n    \n    </tbody>\n</table>\n\n\n\n\n\n\n<dl class=\"details\">\n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n    <dt class=\"tag-source\">Source:</dt>\n    <dd class=\"tag-source\"><ul class=\"dummy\"><li>\n        <a href=\"jquery.countdown.js.html\">jquery.countdown.js</a>, <a href=\"jquery.countdown.js.html#line64\">line 64</a>\n    </li></ul></dd>\n    \n\n    \n\n    \n\n    \n</dl>\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n    <h5>Example</h5>\n    \n    <pre class=\"prettyprint\"><code>onTick: function(periods) {\n  $('#altTime').text(periods[4] + ':' + twoDigits(periods[5]) +\n    ':' + twoDigits(periods[6]));\n}</code></pre>\n\n\n\n            \n                \n\n    \n\n    <h4 class=\"name\" id=\"CountdownWhichLabelsCallback\"><span class=\"type-signature\"></span>CountdownWhichLabelsCallback<span class=\"signature\">(num)</span><span class=\"type-signature\"> &rarr; {number}</span></h4>\n\n    \n\n\n\n<div class=\"description\">\n    Countdown which labels callback.\n\t\t\tUsed with the <a href=\"module-Countdown.html#~regionalOptions\"><code>whichLabels</code></a> option and\n\t\t\ttriggered when the countdown is being display to determine which set of labels\n\t\t\t(<code>labels</code>, <code>labels1</code>, ...) are to be used for the current period value.\n</div>\n\n\n\n\n\n\n\n\n\n    <h5>Parameters:</h5>\n    \n\n<table class=\"params\">\n    <thead>\n    <tr>\n        \n        <th>Name</th>\n        \n\n        <th>Type</th>\n\n        \n\n        \n\n        <th class=\"last\">Description</th>\n    </tr>\n    </thead>\n\n    <tbody>\n    \n\n        <tr>\n            \n                <td class=\"name\"><code>num</code></td>\n            \n\n            <td class=\"type\">\n            \n                \n<span class=\"param-type\">number</span>\n\n\n            \n            </td>\n\n            \n\n            \n\n            <td class=\"description last\">The current period value.</td>\n        </tr>\n\n    \n    </tbody>\n</table>\n\n\n\n\n\n\n<dl class=\"details\">\n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n    <dt class=\"tag-source\">Source:</dt>\n    <dd class=\"tag-source\"><ul class=\"dummy\"><li>\n        <a href=\"jquery.countdown.js.html\">jquery.countdown.js</a>, <a href=\"jquery.countdown.js.html#line77\">line 77</a>\n    </li></ul></dd>\n    \n\n    \n\n    \n\n    \n</dl>\n\n\n\n\n\n\n\n\n\n\n\n\n\n<h5>Returns:</h5>\n\n        \n<div class=\"param-desc\">\n    The suffix for the label set to use, or zero for the default labels.\n</div>\n\n\n\n<dl>\n    <dt>\n        Type\n    </dt>\n    <dd>\n        \n<span class=\"param-type\">number</span>\n\n\n    </dd>\n</dl>\n\n    \n\n\n    <h5>Example</h5>\n    \n    <pre class=\"prettyprint\"><code>whichLabels: function(num) {\n  return (num === 1 ? 1 : (num >= 2 &amp;&amp; num &lt;= 4 ? 2 : 0));\n}</code></pre>\n\n\n\n            \n    \n\n    \n</article>\n\n</section>\n\n\n\n\n</div>\n\n<nav>\n    <h2><a href=\"index.html\">Home</a></h2><h3>Modules</h3><ul><li><a href=\"module-Countdown.html\">Countdown</a></li></ul><h3><a href=\"global.html\">Global</a></h3>\n</nav>\n\n<br class=\"clear\">\n\n<footer>\n    Documentation generated by <a href=\"https://github.com/jsdoc3/jsdoc\">JSDoc 3.4.1</a> on Sat Nov 19 2016 20:51:10 GMT+1100 (AUS Eastern Daylight Time)\n</footer>\n\n<script> prettyPrint(); </script>\n<script src=\"scripts/linenumber.js\"> </script>\n</body>\n</html>"
  },
  {
    "path": "doc/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\">\n    <title>JSDoc: Home</title>\n\n    <script src=\"scripts/prettify/prettify.js\"> </script>\n    <script src=\"scripts/prettify/lang-css.js\"> </script>\n    <!--[if lt IE 9]>\n      <script src=\"//html5shiv.googlecode.com/svn/trunk/html5.js\"></script>\n    <![endif]-->\n    <link type=\"text/css\" rel=\"stylesheet\" href=\"styles/prettify-tomorrow.css\">\n    <link type=\"text/css\" rel=\"stylesheet\" href=\"styles/jsdoc-default.css\">\n</head>\n\n<body>\n\n<div id=\"main\">\n\n    <h1 class=\"page-title\">Home</h1>\n\n    \n\n\n\n    \n\n\n    <h3> </h3>\n\n\n\n\n\n\n\n\n\n\n    \n\n\n\n\n\n\n\n\n\n</div>\n\n<nav>\n    <h2><a href=\"index.html\">Home</a></h2><h3>Modules</h3><ul><li><a href=\"module-Countdown.html\">Countdown</a></li></ul><h3><a href=\"global.html\">Global</a></h3>\n</nav>\n\n<br class=\"clear\">\n\n<footer>\n    Documentation generated by <a href=\"https://github.com/jsdoc3/jsdoc\">JSDoc 3.4.1</a> on Sat Nov 19 2016 20:51:10 GMT+1100 (AUS Eastern Daylight Time)\n</footer>\n\n<script> prettyPrint(); </script>\n<script src=\"scripts/linenumber.js\"> </script>\n</body>\n</html>"
  },
  {
    "path": "doc/jquery.countdown.js.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\">\n    <title>JSDoc: Source: jquery.countdown.js</title>\n\n    <script src=\"scripts/prettify/prettify.js\"> </script>\n    <script src=\"scripts/prettify/lang-css.js\"> </script>\n    <!--[if lt IE 9]>\n      <script src=\"//html5shiv.googlecode.com/svn/trunk/html5.js\"></script>\n    <![endif]-->\n    <link type=\"text/css\" rel=\"stylesheet\" href=\"styles/prettify-tomorrow.css\">\n    <link type=\"text/css\" rel=\"stylesheet\" href=\"styles/jsdoc-default.css\">\n</head>\n\n<body>\n\n<div id=\"main\">\n\n    <h1 class=\"page-title\">Source: jquery.countdown.js</h1>\n\n    \n\n\n\n    \n    <section>\n        <article>\n            <pre class=\"prettyprint source linenums\"><code>/*! http://keith-wood.name/countdown.html\n\tCountdown for jQuery v2.1.0.\n\tWritten by Keith Wood (wood.keith{at}optusnet.com.au) January 2008.\n\tAvailable under the MIT (http://keith-wood.name/licence.html) license. \n\tPlease attribute the author if you use it. */\n\n(function($) { // Hide scope, no $ conflict\n\t'use strict';\n\n\tvar pluginName = 'countdown';\n\n\tvar Y = 0; // Years\n\tvar O = 1; // Months\n\tvar W = 2; // Weeks\n\tvar D = 3; // Days\n\tvar H = 4; // Hours\n\tvar M = 5; // Minutes\n\tvar S = 6; // Seconds\n\n\t/** Create the countdown plugin.\n\t\t&lt;p>Sets an element to show the time remaining until a given instant.&lt;/p>\n\t\t&lt;p>Expects HTML like:&lt;/p>\n\t\t&lt;pre>&amp;lt;div>&amp;lt;/div>&lt;/pre>\n\t\t&lt;p>Provide inline configuration like:&lt;/p>\n\t\t&lt;pre>&amp;lt;div data-countdown=\"name: 'value', ...\">&amp;lt;/div>&lt;/pre>\n\t\t@module Countdown\n\t\t@augments JQPlugin\n\t\t@example $(selector).countdown({until: +300}) */\n\t$.JQPlugin.createPlugin({\n\t\n\t\t/** The name of the plugin.\n\t\t\t@default 'countdown' */\n\t\tname: pluginName,\n\n\t\t/** Countdown expiry callback.\n\t\t\tUsed with the {@linkcode module:Countdown~defaultOptions|onExpiry} option and\n\t\t\ttriggered when the countdown expires.\n\t\t\t@global\n\t\t\t@callback CountdownExpiryCallback\n\t\t\t@this &lt;code>Element&lt;/code>\n\t\t\t@example onExpiry: function() {\n  alert('Done');\n} */\n\n\t\t/** Countdown server synchronisation callback.\n\t\t\tUsed with the {@linkcode module:Countdown~defaultOptions|serverSync} option and\n\t\t\ttriggered when the countdown is initialised.\n\t\t\t@global\n\t\t\t@callback CountdownServerSyncCallback\n\t\t\t@return {Date} The current date/time on the server as expressed in the local timezone.\n\t\t\t@this &lt;code>$.countdown&lt;/code>\n\t\t\t@example serverSync: function() {\n  var time = null;\n  $.ajax({url: 'http://myserver.com/serverTime.php',\n    async: false, dataType: 'text',\n    success: function(text) {\n      time = new Date(text);\n    }, error: function(http, message, exc) {\n      time = new Date();\n  });\n  return time;\n} */\n\t\t\t\n\t\t/** Countdown tick callback.\n\t\t\tUsed with the {@linkcode module:Countdown~defaultOptions|onTick} option and\n\t\t\ttriggered on every {@linkcode module:Countdown~defaultOptions|tickInterval} ticks of the countdown.\n\t\t\t@global\n\t\t\t@callback CountdownTickCallback\n\t\t\t@this &lt;code>Element&lt;/code>\n\t\t\t@param {number[]} periods The breakdown by period (years, months, weeks, days,\n\t\t\t\t\thours, minutes, seconds) of the time remaining/passed.\n\t\t\t@example onTick: function(periods) {\n  $('#altTime').text(periods[4] + ':' + twoDigits(periods[5]) +\n    ':' + twoDigits(periods[6]));\n} */\n\n\t\t/** Countdown which labels callback.\n\t\t\tUsed with the {@linkcode module:Countdown~regionalOptions|whichLabels} option and\n\t\t\ttriggered when the countdown is being display to determine which set of labels\n\t\t\t(&lt;code>labels&lt;/code>, &lt;code>labels1&lt;/code>, ...) are to be used for the current period value.\n\t\t\t@global\n\t\t\t@callback CountdownWhichLabelsCallback\n\t\t\t@param {number} num The current period value.\n\t\t\t@return {number} The suffix for the label set to use, or zero for the default labels.\n\t\t\t@example whichLabels: function(num) {\n  return (num === 1 ? 1 : (num >= 2 &amp;&amp; num &lt;= 4 ? 2 : 0));\n} */\n\t\t\t\n\t\t/** Default settings for the plugin.\n\t\t\t@property {Date|number|string} [until] The date/time to count down to, or number of seconds\n\t\t\t\t\t\toffset from now, or string of amounts and units for offset(s) from now:\n\t\t\t\t\t\t'Y' years, 'O' months, 'W' weeks, 'D' days, 'H' hours, 'M' minutes, 'S' seconds.\n\t\t\t\t\t\tOne of &lt;code>until&lt;/code> or &lt;code>since&lt;/code> must be specified.\n\t\t\t\t\t\tIf both are given &lt;code>since&lt;/code> takes precedence.\n\t\t\t@example until: new Date(2013, 12-1, 25, 13, 30)\nuntil: +300\nuntil: '+1O -2D'\n\t\t\t@property {Date|number|string} [since] The date/time to count up from, or number of seconds\n\t\t\t\t\t\toffset from now, or string of amounts and units for offset(s) from now:\n\t\t\t\t\t\t'Y' years, 'O' months, 'W' weeks, 'D' days, 'H' hours, 'M' minutes, 'S' seconds.\n\t\t\t\t\t\tOne of &lt;code>until&lt;/code> or &lt;code>since&lt;/code> must be specified.\n\t\t\t\t\t\tIf both are given &lt;code>since&lt;/code> takes precedence.\n\t\t\t@example since: new Date(2013, 1-1, 1)\nsince: -300\nsince: '-1O +2D'\n\t\t\t@property {number} [timezone=null] The timezone (hours or minutes from GMT) for the target times,\n\t\t\t\t\t\tor &lt;code>null&lt;/code> for client local timezone.\n\t\t\t@example timezone: +10\ntimezone: -60\n\t\t\t@property {CountdownServerSyncCallback} [serverSync=null] A function to retrieve the current server time\n\t\t\t\t\t\tfor synchronisation.\n\t\t\t@property {string} [format='dHMS'] The format for display - upper case to always show,\n\t\t\t\t\t\tlower case to show only if non-zero,\n\t\t\t\t\t\t'Y' years, 'O' months, 'W' weeks, 'D' days, 'H' hours, 'M' minutes, 'S' seconds.\n\t\t\t@property {string} [layout=''] &lt;p>Build your own layout for the countdown.&lt;/p>\n\t\t\t\t\t\t&lt;p>Indicate substitution points with '{desc}' for the description, '{sep}' for the time separator,\n\t\t\t\t\t\t'{pv}' where p is 'y' for years, 'o' for months, 'w' for weeks, 'd' for days,\n\t\t\t\t\t\t'h' for hours, 'm' for minutes, or 's' for seconds and v is 'n' for the period value,\n\t\t\t\t\t\t'nn' for the period value with a minimum of two digits,\n\t\t\t\t\t\t'nnn' for the period value with a minimum of three digits, or\n\t\t\t\t\t\t'l' for the period label (long or short form depending on the compact setting), or\n\t\t\t\t\t\t'{pd}' where p is as above and d is '1' for the units digit, '10' for the tens digit,\n\t\t\t\t\t\t'100' for the hundreds digit, or '1000' for the thousands digit.&lt;/p>\n\t\t\t\t\t\t&lt;p>If you need to exclude entire sections when the period value is zero and\n\t\t\t\t\t\tyou have specified the period as optional, surround these sections with\n\t\t\t\t\t\t'{p&lt;}' and '{p>}', where p is the same as above.&lt;/p>\n\t\t\t\t\t\t&lt;p>Your layout can just be simple text, or can contain HTML markup as well.&lt;/p>\n\t\t\t@example layout: '{d&lt;}{dn} {dl}{d>} {hnn}:{mnn}:{snn}'\n\t\t\t@property {boolean} [compact=false] &lt;code>true&lt;/code> to display in a compact format,\n\t\t\t\t\t\t&lt;code>false&lt;/code> for an expanded one.\n\t\t\t@property {boolean} [padZeroes=false] &lt;code>true&lt;/code> to add leading zeroes.\n\t\t\t@property {number} [significant=0] The maximum number of periods with non-zero values to show, zero for all.\n\t\t\t@property {string} [description=''] The description displayed for the countdown.\n\t\t\t@property {string} [expiryUrl=''] A URL to load upon expiry, replacing the current page.\n\t\t\t@property {string} [expiryText=''] Text to display upon expiry, replacing the countdown. This may be HTML.\n\t\t\t@property {boolean} [alwaysExpire=false] &lt;code>true&lt;/code> to trigger &lt;code>onExpiry&lt;/code>\n\t\t\t\t\t\teven if the target time has passed.\n\t\t\t@property {CountdownExpiryCallback} [onExpiry=null] Callback when the countdown expires -\n\t\t\t\t\t\treceives no parameters and &lt;code>this&lt;/code> is the containing element.\n\t\t\t@example onExpiry: function() {\n  ...\n}\n\t\t\t@property {CountdownTickCallback} [onTick=null] Callback when the countdown is updated -\n\t\t\t\t\t\treceives &lt;code>number[7]&lt;/code> being the breakdown by period\n\t\t\t\t\t\t(years, months, weeks, days, hours, minutes, seconds - based on\n\t\t\t\t\t\t&lt;code>format&lt;/code>) and &lt;code>this&lt;/code> is the containing element.\n\t\t\t@example onTick: function(periods) {\n  var secs = $.countdown.periodsToSeconds(periods);\n  if (secs &lt; 300) { // Last five minutes\n    ...\n  }\n}\n\t\t\t@property {number} [tickInterval=1] The interval (seconds) between &lt;code>onTick&lt;/code> callbacks. */\n\t\tdefaultOptions: {\n\t\t\tuntil: null,\n\t\t\tsince: null,\n\t\t\ttimezone: null,\n\t\t\tserverSync: null,\n\t\t\tformat: 'dHMS',\n\t\t\tlayout: '',\n\t\t\tcompact: false,\n\t\t\tpadZeroes: false,\n\t\t\tsignificant: 0,\n\t\t\tdescription: '',\n\t\t\texpiryUrl: '',\n\t\t\texpiryText: '',\n\t\t\talwaysExpire: false,\n\t\t\tonExpiry: null,\n\t\t\tonTick: null,\n\t\t\ttickInterval: 1\n\t\t},\n\n\t\t/** Localisations for the plugin.\n\t\t\tEntries are objects indexed by the language code ('' being the default US/English).\n\t\t\tEach object has the following attributes.\n\t\t\t@property {string[]} [labels=['Years','Months','Weeks','Days','Hours','Minutes','Seconds']]\n\t\t\t\t\t\tThe display texts for the counter periods.\n\t\t\t@property {string[]} [labels1=['Year','Month','Week','Day','Hour','Minute','Second']]\n\t\t\t\t\t\tThe display texts for the counter periods if they have a value of 1.\n\t\t\t\t\t\tAdd other &lt;code>labels&lt;em>n&lt;/em>&lt;/code> attributes as necessary to\n\t\t\t\t\t\tcater for other numeric idiosyncrasies of the localisation.\n\t\t\t@property {string[]}[compactLabels=['y','m','w','d']] The compact texts for the counter periods.\n\t\t\t@property {CountdownWhichLabelsCallback} [whichLabels=null] A function to determine which\n\t\t\t\t\t\t&lt;code>labels&lt;em>n&lt;/em>&lt;/code> to use.\n\t\t\t@example whichLabels: function(num) {\n  return (num > 1 ? 0 : 1);\n}\n\t\t\t@property {string[]} [digits=['0','1',...,'9']] The digits to display (0-9).\n\t\t\t@property {string} [timeSeparator=':'] Separator for time periods in the compact layout.\n\t\t\t@property {boolean} [isRTL=false] &lt;code>true&lt;/code> for right-to-left languages,\n\t\t\t\t\t\t&lt;code>false&lt;/code> for left-to-right. */\n\t\tregionalOptions: { // Available regional settings, indexed by language/country code\n\t\t\t'': { // Default regional settings - English/US\n\t\t\t\tlabels: ['Years', 'Months', 'Weeks', 'Days', 'Hours', 'Minutes', 'Seconds'],\n\t\t\t\tlabels1: ['Year', 'Month', 'Week', 'Day', 'Hour', 'Minute', 'Second'],\n\t\t\t\tcompactLabels: ['y', 'm', 'w', 'd'],\n\t\t\t\twhichLabels: null,\n\t\t\t\tdigits: ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'],\n\t\t\t\ttimeSeparator: ':',\n\t\t\t\tisRTL: false\n\t\t\t}\n\t\t},\n\n\t\t/* Class name for the right-to-left marker. */\n\t\t_rtlClass: pluginName + '-rtl',\n\t\t/* Class name for the countdown section marker. */\n\t\t_sectionClass: pluginName + '-section',\n\t\t/* Class name for the period amount marker. */\n\t\t_amountClass: pluginName + '-amount',\n\t\t/* Class name for the period name marker. */\n\t\t_periodClass: pluginName + '-period',\n\t\t/* Class name for the countdown row marker. */\n\t\t_rowClass: pluginName + '-row',\n\t\t/* Class name for the holding countdown marker. */\n\t\t_holdingClass: pluginName + '-holding',\n\t\t/* Class name for the showing countdown marker. */\n\t\t_showClass: pluginName + '-show',\n\t\t/* Class name for the description marker. */\n\t\t_descrClass: pluginName + '-descr',\n\n\t\t/* List of currently active countdown elements. */\n\t\t_timerElems: [],\n\n\t\t/** Additional setup for the countdown.\n\t\t\tApply default localisations.\n\t\t\tCreate the timer.\n\t\t\t@private */\n\t\t_init: function() {\n\t\t\tvar self = this;\n\t\t\tthis._super();\n\t\t\tthis._serverSyncs = [];\n\t\t\tvar now = (typeof Date.now === 'function' ? Date.now : function() { return new Date().getTime(); });\n\t\t\tvar perfAvail = (window.performance &amp;&amp; typeof window.performance.now === 'function');\n\t\t\t// Shared timer for all countdowns\n\t\t\tfunction timerCallBack(timestamp) {\n\t\t\t\tvar drawStart = (timestamp &lt; 1e12 ? // New HTML5 high resolution timer\n\t\t\t\t\t(perfAvail ? (window.performance.now() + window.performance.timing.navigationStart) : now()) :\n\t\t\t\t\t// Integer milliseconds since unix epoch\n\t\t\t\t\ttimestamp || now());\n\t\t\t\tif (drawStart - animationStartTime >= 1000) {\n\t\t\t\t\tself._updateElems();\n\t\t\t\t\tanimationStartTime = drawStart;\n\t\t\t\t}\n\t\t\t\trequestAnimationFrame(timerCallBack);\n\t\t\t}\n\t\t\tvar requestAnimationFrame = window.requestAnimationFrame ||\n\t\t\t\twindow.webkitRequestAnimationFrame || window.mozRequestAnimationFrame ||\n\t\t\t\twindow.oRequestAnimationFrame || window.msRequestAnimationFrame || null;\n\t\t\t\t// This is when we expect a fall-back to setInterval as it's much more fluid\n\t\t\tvar animationStartTime = 0;\n\t\t\tif (!requestAnimationFrame || $.noRequestAnimationFrame) {\n\t\t\t\t$.noRequestAnimationFrame = null;\n\t\t\t\t// Fall back to good old setInterval\n\t\t\t\t$.countdown._timer = setInterval(function() { self._updateElems(); }, 1000);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tanimationStartTime = window.animationStartTime ||\n\t\t\t\t\twindow.webkitAnimationStartTime || window.mozAnimationStartTime ||\n\t\t\t\t\twindow.oAnimationStartTime || window.msAnimationStartTime || now();\n\t\t\t\trequestAnimationFrame(timerCallBack);\n\t\t\t}\n\t\t},\n\n\t\t/** Convert a date/time to UTC.\n\t\t\t@param {number} tz The hour or minute offset from GMT, e.g. +9, -360.\n\t\t\t@param {Date|number} year the date/time in that timezone or the year in that timezone.\n\t\t\t@param {number} [month] The month (0 - 11) (omit if &lt;code>year&lt;/code> is a &lt;code>Date&lt;/code>).\n\t\t\t@param {number} [day] The day (omit if &lt;code>year&lt;/code> is a &lt;code>Date&lt;/code>).\n\t\t\t@param {number} [hours] The hour (omit if &lt;code>year&lt;/code> is a &lt;code>Date&lt;/code>).\n\t\t\t@param {number} [mins] The minute (omit if &lt;code>year&lt;/code> is a &lt;code>Date&lt;/code>).\n\t\t\t@param {number} [secs] The second (omit if &lt;code>year&lt;/code> is a &lt;code>Date&lt;/code>).\n\t\t\t@param {number} [ms] The millisecond (omit if &lt;code>year&lt;/code> is a &lt;code>Date&lt;/code>).\n\t\t\t@return {Date} The equivalent UTC date/time.\n\t\t\t@example $.countdown.UTCDate(+10, 2013, 12-1, 25, 12, 0)\n$.countdown.UTCDate(-7, new Date(2013, 12-1, 25, 12, 0)) */\n\t\tUTCDate: function(tz, year, month, day, hours, mins, secs, ms) {\n\t\t\tif (typeof year === 'object' &amp;&amp; year instanceof Date) {\n\t\t\t\tms = year.getMilliseconds();\n\t\t\t\tsecs = year.getSeconds();\n\t\t\t\tmins = year.getMinutes();\n\t\t\t\thours = year.getHours();\n\t\t\t\tday = year.getDate();\n\t\t\t\tmonth = year.getMonth();\n\t\t\t\tyear = year.getFullYear();\n\t\t\t}\n\t\t\tvar d = new Date();\n\t\t\td.setUTCFullYear(year);\n\t\t\td.setUTCDate(1);\n\t\t\td.setUTCMonth(month || 0);\n\t\t\td.setUTCDate(day || 1);\n\t\t\td.setUTCHours(hours || 0);\n\t\t\td.setUTCMinutes((mins || 0) - (Math.abs(tz) &lt; 30 ? tz * 60 : tz));\n\t\t\td.setUTCSeconds(secs || 0);\n\t\t\td.setUTCMilliseconds(ms || 0);\n\t\t\treturn d;\n\t\t},\n\n\t\t/** Convert a set of periods into seconds.\n\t\t\tAveraged for months and years.\n\t\t\t@param {number[]} periods The periods per year/month/week/day/hour/minute/second.\n\t\t\t@return {number} The corresponding number of seconds.\n\t\t\t@example var secs = $.countdown.periodsToSeconds(periods) */\n\t\tperiodsToSeconds: function(periods) {\n\t\t\treturn periods[0] * 31557600 + periods[1] * 2629800 + periods[2] * 604800 +\n\t\t\t\tperiods[3] * 86400 + periods[4] * 3600 + periods[5] * 60 + periods[6];\n\t\t},\n\n\t\t/** Resynchronise the countdowns with the server.\n\t\t\t@example $.countdown.resync() */\n\t\tresync: function() {\n\t\t\tvar self = this;\n\t\t\t$('.' + this._getMarker()).each(function() { // Each countdown\n\t\t\t\tvar inst = $.data(this, self.name);\n\t\t\t\tif (inst.options.serverSync) { // If synced\n\t\t\t\t\tvar serverSync = null;\n\t\t\t\t\tfor (var i = 0; i &lt; self._serverSyncs.length; i++) {\n\t\t\t\t\t\tif (self._serverSyncs[i][0] === inst.options.serverSync) { // Find sync details\n\t\t\t\t\t\t\tserverSync = self._serverSyncs[i];\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (self._eqNull(serverSync[2])) { // Recalculate if missing\n\t\t\t\t\t\tvar serverResult = ($.isFunction(inst.options.serverSync) ?\n\t\t\t\t\t\t\tinst.options.serverSync.apply(this, []) : null);\n\t\t\t\t\t\tserverSync[2] =\n\t\t\t\t\t\t\t(serverResult ? new Date().getTime() - serverResult.getTime() : 0) - serverSync[1];\n\t\t\t\t\t}\n\t\t\t\t\tif (inst._since) { // Apply difference\n\t\t\t\t\t\tinst._since.setMilliseconds(inst._since.getMilliseconds() + serverSync[2]);\n\t\t\t\t\t}\n\t\t\t\t\tinst._until.setMilliseconds(inst._until.getMilliseconds() + serverSync[2]);\n\t\t\t\t}\n\t\t\t});\n\t\t\tfor (var i = 0; i &lt; self._serverSyncs.length; i++) { // Update sync details\n\t\t\t\tif (!self._eqNull(self._serverSyncs[i][2])) {\n\t\t\t\t\tself._serverSyncs[i][1] += self._serverSyncs[i][2];\n\t\t\t\t\tdelete self._serverSyncs[i][2];\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t_instSettings: function(elem, options) { // jshint unused:false\n\t\t\treturn {_periods: [0, 0, 0, 0, 0, 0, 0]};\n\t\t},\n\n\t\t/** Add an element to the list of active ones.\n\t\t\t@private\n\t\t\t@param {Element} elem The countdown element. */\n\t\t_addElem: function(elem) {\n\t\t\tif (!this._hasElem(elem)) {\n\t\t\t\tthis._timerElems.push(elem);\n\t\t\t}\n\t\t},\n\n\t\t/** See if an element is in the list of active ones.\n\t\t\t@private\n\t\t\t@param {Element} elem The countdown element.\n\t\t\t@return {boolean} &lt;code>true&lt;/code> if present, &lt;code>false&lt;/code> if not. */\n\t\t_hasElem: function(elem) {\n\t\t\treturn ($.inArray(elem, this._timerElems) > -1);\n\t\t},\n\n\t\t/** Remove an element from the list of active ones.\n\t\t\t@private\n\t\t\t@param {Element} elem The countdown element. */\n\t\t_removeElem: function(elem) {\n\t\t\tthis._timerElems = $.map(this._timerElems,\n\t\t\t\tfunction(value) { return (value === elem ? null : value); }); // delete entry\n\t\t},\n\n\t\t/** Update each active timer element.\n\t\t\t@private */\n\t\t_updateElems: function() {\n\t\t\tfor (var i = this._timerElems.length - 1; i >= 0; i--) {\n\t\t\t\tthis._updateCountdown(this._timerElems[i]);\n\t\t\t}\n\t\t},\n\n\t\t_optionsChanged: function(elem, inst, options) {\n\t\t\tif (options.layout) {\n\t\t\t\toptions.layout = options.layout.replace(/&amp;lt;/g, '&lt;').replace(/&amp;gt;/g, '>');\n\t\t\t}\n\t\t\tthis._resetExtraLabels(inst.options, options);\n\t\t\tvar timezoneChanged = (inst.options.timezone !== options.timezone);\n\t\t\t$.extend(inst.options, options);\n\t\t\tthis._adjustSettings(elem, inst,\n\t\t\t\t!this._eqNull(options.until) || !this._eqNull(options.since) || timezoneChanged);\n\t\t\tvar now = new Date();\n\t\t\tif ((inst._since &amp;&amp; inst._since &lt; now) || (inst._until &amp;&amp; inst._until > now)) {\n\t\t\t\tthis._addElem(elem[0]);\n\t\t\t}\n\t\t\tthis._updateCountdown(elem, inst);\n\t\t},\n\n\t\t/** Redisplay the countdown with an updated display.\n\t\t\t@private\n\t\t\t@param {Element|jQuery} elem The containing element.\n\t\t\t@param {object} inst The current settings for this instance. */\n\t\t_updateCountdown: function(elem, inst) {\n\t\t\telem = elem.jquery ? elem : $(elem);\n\t\t\tinst = inst || this._getInst(elem);\n\t\t\tif (!inst) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\telem.html(this._generateHTML(inst)).toggleClass(this._rtlClass, inst.options.isRTL);\n\t\t\tif (inst._hold !== 'pause' &amp;&amp; $.isFunction(inst.options.onTick)) {\n\t\t\t\tvar periods = inst._hold !== 'lap' ? inst._periods :\n\t\t\t\t\tthis._calculatePeriods(inst, inst._show, inst.options.significant, new Date());\n\t\t\t\tif (inst.options.tickInterval === 1 ||\n\t\t\t\t\t\tthis.periodsToSeconds(periods) % inst.options.tickInterval === 0) {\n\t\t\t\t\tinst.options.onTick.apply(elem[0], [periods]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar expired = inst._hold !== 'pause' &amp;&amp;\n\t\t\t\t(inst._since ? inst._now.getTime() &lt; inst._since.getTime() :\n\t\t\t\tinst._now.getTime() >= inst._until.getTime());\n\t\t\tif (expired &amp;&amp; !inst._expiring) {\n\t\t\t\tinst._expiring = true;\n\t\t\t\tif (this._hasElem(elem[0]) || inst.options.alwaysExpire) {\n\t\t\t\t\tthis._removeElem(elem[0]);\n\t\t\t\t\tif ($.isFunction(inst.options.onExpiry)) {\n\t\t\t\t\t\tinst.options.onExpiry.apply(elem[0], []);\n\t\t\t\t\t}\n\t\t\t\t\tif (inst.options.expiryText) {\n\t\t\t\t\t\tvar layout = inst.options.layout;\n\t\t\t\t\t\tinst.options.layout = inst.options.expiryText;\n\t\t\t\t\t\tthis._updateCountdown(elem[0], inst);\n\t\t\t\t\t\tinst.options.layout = layout;\n\t\t\t\t\t}\n\t\t\t\t\tif (inst.options.expiryUrl) {\n\t\t\t\t\t\twindow.location = inst.options.expiryUrl;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tinst._expiring = false;\n\t\t\t}\n\t\t\telse if (inst._hold === 'pause') {\n\t\t\t\tthis._removeElem(elem[0]);\n\t\t\t}\n\t\t},\n\n\t\t/** Reset any extra labelsn and compactLabelsn entries if changing labels.\n\t\t\t@private\n\t\t\t@param {object} base The options to be updated.\n\t\t\t@param {object} options The new option values. */\n\t\t_resetExtraLabels: function(base, options) {\n\t\t\tvar n = null;\n\t\t\tfor (n in options) {\n\t\t\t\tif (n.match(/[Ll]abels[02-9]|compactLabels1/)) {\n\t\t\t\t\tbase[n] = options[n];\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (n in base) { // Remove custom numbered labels\n\t\t\t\tif (n.match(/[Ll]abels[02-9]|compactLabels1/) &amp;&amp; typeof options[n] === 'undefined') {\n\t\t\t\t\tbase[n] = null;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\n\t\t/** Determine whether or not a value is equivalent to &lt;code>null&lt;/code>.\n\t\t\t@private\n\t\t\t@param {object} value The value to test.\n\t\t\t@return {boolean} &lt;code>true&lt;/code> if equivalent to &lt;code>null&lt;/code>, &lt;code>false&lt;/code> if not. */\n\t\t_eqNull: function(value) {\n\t\t\treturn typeof value === 'undefined' || value === null;\n\t\t},\n\n\n\t\t/** Calculate internal settings for an instance.\n\t\t\t@private\n\t\t\t@param {jQuery} elem The containing element.\n\t\t\t@param {object} inst The current settings for this instance.\n\t\t\t@param {boolean} recalc &lt;code>true&lt;/code> if until or since are set. */\n\t\t_adjustSettings: function(elem, inst, recalc) {\n\t\t\tvar serverEntry = null;\n\t\t\tfor (var i = 0; i &lt; this._serverSyncs.length; i++) {\n\t\t\t\tif (this._serverSyncs[i][0] === inst.options.serverSync) {\n\t\t\t\t\tserverEntry = this._serverSyncs[i][1];\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar now = null;\n\t\t\tvar serverOffset = null;\n\t\t\tif (!this._eqNull(serverEntry)) {\n\t\t\t\tnow = new Date();\n\t\t\t\tserverOffset = (inst.options.serverSync ? serverEntry : 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tvar serverResult = ($.isFunction(inst.options.serverSync) ?\n\t\t\t\t\tinst.options.serverSync.apply(elem[0], []) : null);\n\t\t\t\tnow = new Date();\n\t\t\t\tserverOffset = (serverResult ? now.getTime() - serverResult.getTime() : 0);\n\t\t\t\tthis._serverSyncs.push([inst.options.serverSync, serverOffset]);\n\t\t\t}\n\t\t\tvar timezone = inst.options.timezone;\n\t\t\ttimezone = (this._eqNull(timezone) ? -now.getTimezoneOffset() : timezone);\n\t\t\tif (recalc || (!recalc &amp;&amp; this._eqNull(inst._until) &amp;&amp; this._eqNull(inst._since))) {\n\t\t\t\tinst._since = inst.options.since;\n\t\t\t\tif (!this._eqNull(inst._since)) {\n\t\t\t\t\tinst._since = this.UTCDate(timezone, this._determineTime(inst._since, null));\n\t\t\t\t\tif (inst._since &amp;&amp; serverOffset) {\n\t\t\t\t\t\tinst._since.setMilliseconds(inst._since.getMilliseconds() + serverOffset);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tinst._until = this.UTCDate(timezone, this._determineTime(inst.options.until, now));\n\t\t\t\tif (serverOffset) {\n\t\t\t\t\tinst._until.setMilliseconds(inst._until.getMilliseconds() + serverOffset);\n\t\t\t\t}\n\t\t\t}\n\t\t\tinst._show = this._determineShow(inst);\n\t\t},\n\n\t\t/** Remove the countdown widget from an element.\n\t\t\t@private\n\t\t\t@param {jQuery} elem The containing element.\n\t\t\t@param {object} inst The current instance object. */\n\t\t_preDestroy: function(elem, inst) { // jshint unused:false\n\t\t\tthis._removeElem(elem[0]);\n\t\t\telem.empty();\n\t\t},\n\n\t\t/** Pause a countdown widget at the current time.\n\t\t\tStop it running but remember and display the current time.\n\t\t\t@param {Element} elem The containing element.\n\t\t\t@example $(selector).countdown('pause') */\n\t\tpause: function(elem) {\n\t\t\tthis._hold(elem, 'pause');\n\t\t},\n\n\t\t/** Pause a countdown widget at the current time.\n\t\t\tStop the display but keep the countdown running.\n\t\t\t@param {Element} elem The containing element.\n\t\t\t@example $(selector).countdown('lap') */\n\t\tlap: function(elem) {\n\t\t\tthis._hold(elem, 'lap');\n\t\t},\n\n\t\t/** Resume a paused countdown widget.\n\t\t\t@param {Element} elem The containing element.\n\t\t\t@example $(selector).countdown('resume') */\n\t\tresume: function(elem) {\n\t\t\tthis._hold(elem, null);\n\t\t},\n\n\t\t/** Toggle a paused countdown widget.\n\t\t\t@param {Element} elem The containing element.\n\t\t\t@example $(selector).countdown('toggle') */\n\t\ttoggle: function(elem) {\n\t\t\tvar inst = $.data(elem, this.name) || {};\n\t\t\tthis[!inst._hold ? 'pause' : 'resume'](elem);\n\t\t},\n\n\t\t/** Toggle a lapped countdown widget.\n\t\t\t@param {Element} elem The containing element.\n\t\t\t@example $(selector).countdown('toggleLap') */\n\t\ttoggleLap: function(elem) {\n\t\t\tvar inst = $.data(elem, this.name) || {};\n\t\t\tthis[!inst._hold ? 'lap' : 'resume'](elem);\n\t\t},\n\n\t\t/** Pause or resume a countdown widget.\n\t\t\t@private\n\t\t\t@param {Element} elem The containing element.\n\t\t\t@param {string} hold The new hold setting. */\n\t\t_hold: function(elem, hold) {\n\t\t\tvar inst = $.data(elem, this.name);\n\t\t\tif (inst) {\n\t\t\t\tif (inst._hold === 'pause' &amp;&amp; !hold) {\n\t\t\t\t\tinst._periods = inst._savePeriods;\n\t\t\t\t\tvar sign = (inst._since ? '-' : '+');\n\t\t\t\t\tinst[inst._since ? '_since' : '_until'] =\n\t\t\t\t\t\tthis._determineTime(sign + inst._periods[0] + 'y' +\n\t\t\t\t\t\t\tsign + inst._periods[1] + 'o' + sign + inst._periods[2] + 'w' +\n\t\t\t\t\t\t\tsign + inst._periods[3] + 'd' + sign + inst._periods[4] + 'h' + \n\t\t\t\t\t\t\tsign + inst._periods[5] + 'm' + sign + inst._periods[6] + 's');\n\t\t\t\t\tthis._addElem(elem);\n\t\t\t\t}\n\t\t\t\tinst._hold = hold;\n\t\t\t\tinst._savePeriods = (hold === 'pause' ? inst._periods : null);\n\t\t\t\t$.data(elem, this.name, inst);\n\t\t\t\tthis._updateCountdown(elem, inst);\n\t\t\t}\n\t\t},\n\n\t\t/** Return the current time periods, broken down by years, months, weeks, days, hours, minutes, and seconds.\n\t\t\t@param {Element} elem The containing element.\n\t\t\t@return {number[]} The current periods for the countdown.\n\t\t\t@example var periods = $(selector).countdown('getTimes') */\n\t\tgetTimes: function(elem) {\n\t\t\tvar inst = $.data(elem, this.name);\n\t\t\treturn (!inst ? null : (inst._hold === 'pause' ? inst._savePeriods : (!inst._hold ? inst._periods :\n\t\t\t\tthis._calculatePeriods(inst, inst._show, inst.options.significant, new Date()))));\n\t\t},\n\n\t\t/** A time may be specified as an exact value or a relative one.\n\t\t\t@private\n\t\t\t@param {string|number|Date} setting The date/time value as a relative or absolute value.\n\t\t\t@param {Date} defaultTime The date/time to use if no other is supplied.\n\t\t\t@return {Date} The corresponding date/time. */\n\t\t_determineTime: function(setting, defaultTime) {\n\t\t\tvar self = this;\n\t\t\tvar offsetNumeric = function(offset) { // e.g. +300, -2\n\t\t\t\tvar time = new Date();\n\t\t\t\ttime.setTime(time.getTime() + offset * 1000);\n\t\t\t\treturn time;\n\t\t\t};\n\t\t\tvar offsetString = function(offset) { // e.g. '+2d', '-4w', '+3h +30m'\n\t\t\t\toffset = offset.toLowerCase();\n\t\t\t\tvar time = new Date();\n\t\t\t\tvar year = time.getFullYear();\n\t\t\t\tvar month = time.getMonth();\n\t\t\t\tvar day = time.getDate();\n\t\t\t\tvar hour = time.getHours();\n\t\t\t\tvar minute = time.getMinutes();\n\t\t\t\tvar second = time.getSeconds();\n\t\t\t\tvar pattern = /([+-]?[0-9]+)\\s*(s|m|h|d|w|o|y)?/g;\n\t\t\t\tvar matches = pattern.exec(offset);\n\t\t\t\twhile (matches) {\n\t\t\t\t\tswitch (matches[2] || 's') {\n\t\t\t\t\t\tcase 's':\n\t\t\t\t\t\t\tsecond += parseInt(matches[1], 10);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'm':\n\t\t\t\t\t\t\tminute += parseInt(matches[1], 10);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'h':\n\t\t\t\t\t\t\thour += parseInt(matches[1], 10);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'd':\n\t\t\t\t\t\t\tday += parseInt(matches[1], 10);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'w':\n\t\t\t\t\t\t\tday += parseInt(matches[1], 10) * 7;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'o':\n\t\t\t\t\t\t\tmonth += parseInt(matches[1], 10); \n\t\t\t\t\t\t\tday = Math.min(day, self._getDaysInMonth(year, month));\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'y':\n\t\t\t\t\t\t\tyear += parseInt(matches[1], 10);\n\t\t\t\t\t\t\tday = Math.min(day, self._getDaysInMonth(year, month));\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tmatches = pattern.exec(offset);\n\t\t\t\t}\n\t\t\t\treturn new Date(year, month, day, hour, minute, second, 0);\n\t\t\t};\n\t\t\tvar time = (this._eqNull(setting) ? defaultTime :\n\t\t\t\t(typeof setting === 'string' ? offsetString(setting) :\n\t\t\t\t(typeof setting === 'number' ? offsetNumeric(setting) : setting)));\n\t\t\tif (time) {\n\t\t\t\ttime.setMilliseconds(0);\n\t\t\t}\n\t\t\treturn time;\n\t\t},\n\n\t\t/** Determine the number of days in a month.\n\t\t\t@private\n\t\t\t@param {number} year The year.\n\t\t\t@param {number} month The month.\n\t\t\t@return {number} The days in that month. */\n\t\t_getDaysInMonth: function(year, month) {\n\t\t\treturn 32 - new Date(year, month, 32).getDate();\n\t\t},\n\n\t\t/** Default implementation to determine which set of labels should be used for an amount.\n\t\t\tUse the &lt;code>labels&lt;/code> attribute with the same numeric suffix (if it exists).\n\t\t\t@private\n\t\t\t@param {number} num The amount to be displayed.\n\t\t\t@return {number} The set of labels to be used for this amount. */\n\t\t_normalLabels: function(num) {\n\t\t\treturn num;\n\t\t},\n\n\t\t/** Generate the HTML to display the countdown widget.\n\t\t\t@private\n\t\t\t@param {object} inst The current settings for this instance.\n\t\t\t@return {string} The new HTML for the countdown display. */\n\t\t_generateHTML: function(inst) {\n\t\t\tvar self = this;\n\t\t\t// Determine what to show\n\t\t\tinst._periods = (inst._hold ? inst._periods :\n\t\t\t\tthis._calculatePeriods(inst, inst._show, inst.options.significant, new Date()));\n\t\t\t// Show all 'asNeeded' after first non-zero value\n\t\t\tvar shownNonZero = false;\n\t\t\tvar showCount = 0;\n\t\t\tvar sigCount = inst.options.significant;\n\t\t\tvar show = $.extend({}, inst._show);\n\t\t\tvar period = null;\n\t\t\tfor (period = Y; period &lt;= S; period++) {\n\t\t\t\tshownNonZero = shownNonZero || (inst._show[period] === '?' &amp;&amp; inst._periods[period] > 0);\n\t\t\t\tshow[period] = (inst._show[period] === '?' &amp;&amp; !shownNonZero ? null : inst._show[period]);\n\t\t\t\tshowCount += (show[period] ? 1 : 0);\n\t\t\t\tsigCount -= (inst._periods[period] > 0 ? 1 : 0);\n\t\t\t}\n\t\t\tvar showSignificant = [false, false, false, false, false, false, false];\n\t\t\tfor (period = S; period >= Y; period--) { // Determine significant periods\n\t\t\t\tif (inst._show[period]) {\n\t\t\t\t\tif (inst._periods[period]) {\n\t\t\t\t\t\tshowSignificant[period] = true;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tshowSignificant[period] = sigCount > 0;\n\t\t\t\t\t\tsigCount--;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar labels = (inst.options.compact ? inst.options.compactLabels : inst.options.labels);\n\t\t\tvar whichLabels = inst.options.whichLabels || this._normalLabels;\n\t\t\tvar showCompact = function(period) {\n\t\t\t\tvar labelsNum = inst.options['compactLabels' + whichLabels(inst._periods[period])];\n\t\t\t\treturn (show[period] ? self._translateDigits(inst, inst._periods[period]) +\n\t\t\t\t\t(labelsNum ? labelsNum[period] : labels[period]) + ' ' : '');\n\t\t\t};\n\t\t\tvar minDigits = (inst.options.padZeroes ? 2 : 1);\n\t\t\tvar showFull = function(period) {\n\t\t\t\tvar labelsNum = inst.options['labels' + whichLabels(inst._periods[period])];\n\t\t\t\treturn ((!inst.options.significant &amp;&amp; show[period]) ||\n\t\t\t\t\t(inst.options.significant &amp;&amp; showSignificant[period]) ?\n\t\t\t\t\t\t'&lt;span class=\"' + self._sectionClass + '\">' +\n\t\t\t\t\t\t'&lt;span class=\"' + self._amountClass + '\">' +\n\t\t\t\t\tself._minDigits(inst, inst._periods[period], minDigits) + '&lt;/span>' +\n\t\t\t\t\t'&lt;span class=\"' + self._periodClass + '\">' +\n\t\t\t\t\t(labelsNum ? labelsNum[period] : labels[period]) + '&lt;/span>&lt;/span>' : '');\n\t\t\t};\n\t\t\treturn (inst.options.layout ? this._buildLayout(inst, show, inst.options.layout,\n\t\t\t\tinst.options.compact, inst.options.significant, showSignificant) :\n\t\t\t\t((inst.options.compact ? // Compact version\n\t\t\t\t'&lt;span class=\"' + this._rowClass + ' ' + this._amountClass +\n\t\t\t\t(inst._hold ? ' ' + this._holdingClass : '') + '\">' + \n\t\t\t\tshowCompact(Y) + showCompact(O) + showCompact(W) + showCompact(D) + \n\t\t\t\t(show[H] ? this._minDigits(inst, inst._periods[H], 2) : '') +\n\t\t\t\t(show[M] ? (show[H] ? inst.options.timeSeparator : '') +\n\t\t\t\tthis._minDigits(inst, inst._periods[M], 2) : '') +\n\t\t\t\t(show[S] ? (show[H] || show[M] ? inst.options.timeSeparator : '') +\n\t\t\t\tthis._minDigits(inst, inst._periods[S], 2) : '') :\n\t\t\t\t// Full version\n\t\t\t\t'&lt;span class=\"' + this._rowClass + ' ' + this._showClass + (inst.options.significant || showCount) +\n\t\t\t\t(inst._hold ? ' ' + this._holdingClass : '') + '\">' +\n\t\t\t\tshowFull(Y) + showFull(O) + showFull(W) + showFull(D) +\n\t\t\t\tshowFull(H) + showFull(M) + showFull(S)) + '&lt;/span>' +\n\t\t\t\t(inst.options.description ? '&lt;span class=\"' + this._rowClass + ' ' + this._descrClass + '\">' +\n\t\t\t\tinst.options.description + '&lt;/span>' : '')));\n\t\t},\n\n\t\t/** Construct a custom layout.\n\t\t\t@private\n\t\t\t@param {object} inst The current settings for this instance.\n\t\t\t@param {boolean[]} show Flags indicating which periods are requested.\n\t\t\t@param {string} layout The customised layout.\n\t\t\t@param {boolean} compact &lt;code>true&lt;/code> if using compact labels.\n\t\t\t@param {number} significant The number of periods with values to show, zero for all.\n\t\t\t@param {boolean[]} showSignificant Other periods to show for significance.\n\t\t\t@return {string} The custom HTML. */\n\t\t_buildLayout: function(inst, show, layout, compact, significant, showSignificant) {\n\t\t\tvar labels = inst.options[compact ? 'compactLabels' : 'labels'];\n\t\t\tvar whichLabels = inst.options.whichLabels || this._normalLabels;\n\t\t\tvar labelFor = function(index) {\n\t\t\t\treturn (inst.options[(compact ? 'compactLabels' : 'labels') +\n\t\t\t\t\twhichLabels(inst._periods[index])] || labels)[index];\n\t\t\t};\n\t\t\tvar digit = function(value, position) {\n\t\t\t\treturn inst.options.digits[Math.floor(value / position) % 10];\n\t\t\t};\n\t\t\tvar subs = {desc: inst.options.description, sep: inst.options.timeSeparator,\n\t\t\t\tyl: labelFor(Y), yn: this._minDigits(inst, inst._periods[Y], 1),\n\t\t\t\tynn: this._minDigits(inst, inst._periods[Y], 2),\n\t\t\t\tynnn: this._minDigits(inst, inst._periods[Y], 3), y1: digit(inst._periods[Y], 1),\n\t\t\t\ty10: digit(inst._periods[Y], 10), y100: digit(inst._periods[Y], 100),\n\t\t\t\ty1000: digit(inst._periods[Y], 1000),\n\t\t\t\tol: labelFor(O), on: this._minDigits(inst, inst._periods[O], 1),\n\t\t\t\tonn: this._minDigits(inst, inst._periods[O], 2),\n\t\t\t\tonnn: this._minDigits(inst, inst._periods[O], 3), o1: digit(inst._periods[O], 1),\n\t\t\t\to10: digit(inst._periods[O], 10), o100: digit(inst._periods[O], 100),\n\t\t\t\to1000: digit(inst._periods[O], 1000),\n\t\t\t\twl: labelFor(W), wn: this._minDigits(inst, inst._periods[W], 1),\n\t\t\t\twnn: this._minDigits(inst, inst._periods[W], 2),\n\t\t\t\twnnn: this._minDigits(inst, inst._periods[W], 3), w1: digit(inst._periods[W], 1),\n\t\t\t\tw10: digit(inst._periods[W], 10), w100: digit(inst._periods[W], 100),\n\t\t\t\tw1000: digit(inst._periods[W], 1000),\n\t\t\t\tdl: labelFor(D), dn: this._minDigits(inst, inst._periods[D], 1),\n\t\t\t\tdnn: this._minDigits(inst, inst._periods[D], 2),\n\t\t\t\tdnnn: this._minDigits(inst, inst._periods[D], 3), d1: digit(inst._periods[D], 1),\n\t\t\t\td10: digit(inst._periods[D], 10), d100: digit(inst._periods[D], 100),\n\t\t\t\td1000: digit(inst._periods[D], 1000),\n\t\t\t\thl: labelFor(H), hn: this._minDigits(inst, inst._periods[H], 1),\n\t\t\t\thnn: this._minDigits(inst, inst._periods[H], 2),\n\t\t\t\thnnn: this._minDigits(inst, inst._periods[H], 3), h1: digit(inst._periods[H], 1),\n\t\t\t\th10: digit(inst._periods[H], 10), h100: digit(inst._periods[H], 100),\n\t\t\t\th1000: digit(inst._periods[H], 1000),\n\t\t\t\tml: labelFor(M), mn: this._minDigits(inst, inst._periods[M], 1),\n\t\t\t\tmnn: this._minDigits(inst, inst._periods[M], 2),\n\t\t\t\tmnnn: this._minDigits(inst, inst._periods[M], 3), m1: digit(inst._periods[M], 1),\n\t\t\t\tm10: digit(inst._periods[M], 10), m100: digit(inst._periods[M], 100),\n\t\t\t\tm1000: digit(inst._periods[M], 1000),\n\t\t\t\tsl: labelFor(S), sn: this._minDigits(inst, inst._periods[S], 1),\n\t\t\t\tsnn: this._minDigits(inst, inst._periods[S], 2),\n\t\t\t\tsnnn: this._minDigits(inst, inst._periods[S], 3), s1: digit(inst._periods[S], 1),\n\t\t\t\ts10: digit(inst._periods[S], 10), s100: digit(inst._periods[S], 100),\n\t\t\t\ts1000: digit(inst._periods[S], 1000)};\n\t\t\tvar html = layout;\n\t\t\t// Replace period containers: {p&lt;}...{p>}\n\t\t\tfor (var i = Y; i &lt;= S; i++) {\n\t\t\t\tvar period = 'yowdhms'.charAt(i);\n\t\t\t\tvar re = new RegExp('\\\\{' + period + '&lt;\\\\}([\\\\s\\\\S]*)\\\\{' + period + '>\\\\}', 'g');\n\t\t\t\thtml = html.replace(re, ((!significant &amp;&amp; show[i]) ||\n\t\t\t\t\t(significant &amp;&amp; showSignificant[i]) ? '$1' : ''));\n\t\t\t}\n\t\t\t// Replace period values: {pn}\n\t\t\t$.each(subs, function(n, v) {\n\t\t\t\tvar re = new RegExp('\\\\{' + n + '\\\\}', 'g');\n\t\t\t\thtml = html.replace(re, v);\n\t\t\t});\n\t\t\treturn html;\n\t\t},\n\n\t\t/** Ensure a numeric value has at least n digits for display.\n\t\t\t@private\n\t\t\t@param {object} inst The current settings for this instance.\n\t\t\t@param {number} value The value to display.\n\t\t\t@param {number} len The minimum length.\n\t\t\t@return {string} The display text. */\n\t\t_minDigits: function(inst, value, len) {\n\t\t\tvalue = '' + value;\n\t\t\tif (value.length >= len) {\n\t\t\t\treturn this._translateDigits(inst, value);\n\t\t\t}\n\t\t\tvalue = '0000000000' + value;\n\t\t\treturn this._translateDigits(inst, value.substr(value.length - len));\n\t\t},\n\n\t\t/** Translate digits into other representations.\n\t\t\t@private\n\t\t\t@param {object} inst The current settings for this instance.\n\t\t\t@param {string} value The text to translate.\n\t\t\t@return {string} The translated text. */\n\t\t_translateDigits: function(inst, value) {\n\t\t\treturn ('' + value).replace(/[0-9]/g, function(digit) {\n\t\t\t\t\treturn inst.options.digits[digit];\n\t\t\t\t});\n\t\t},\n\n\t\t/** Translate the format into flags for each period.\n\t\t\t@private\n\t\t\t@param {object} inst The current settings for this instance.\n\t\t\t@return {string[]} Flags indicating which periods are requested (?) or\n\t\t\t\t\trequired (!) by year, month, week, day, hour, minute, second. */\n\t\t_determineShow: function(inst) {\n\t\t\tvar format = inst.options.format;\n\t\t\tvar show = [];\n\t\t\tshow[Y] = (format.match('y') ? '?' : (format.match('Y') ? '!' : null));\n\t\t\tshow[O] = (format.match('o') ? '?' : (format.match('O') ? '!' : null));\n\t\t\tshow[W] = (format.match('w') ? '?' : (format.match('W') ? '!' : null));\n\t\t\tshow[D] = (format.match('d') ? '?' : (format.match('D') ? '!' : null));\n\t\t\tshow[H] = (format.match('h') ? '?' : (format.match('H') ? '!' : null));\n\t\t\tshow[M] = (format.match('m') ? '?' : (format.match('M') ? '!' : null));\n\t\t\tshow[S] = (format.match('s') ? '?' : (format.match('S') ? '!' : null));\n\t\t\treturn show;\n\t\t},\n\n\t\t/** Calculate the requested periods between now and the target time.\n\t\t\t@private\n\t\t\t@param {object} inst The current settings for this instance.\n\t\t\t@param {string[]} show Flags indicating which periods are requested/required.\n\t\t\t@param {number} significant The number of periods with values to show, zero for all.\n\t\t\t@param {Date} now The current date and time.\n\t\t\t@return {number[]} The current time periods (always positive)\n\t\t\t\t\tby year, month, week, day, hour, minute, second. */\n\t\t_calculatePeriods: function(inst, show, significant, now) {\n\t\t\t// Find endpoints\n\t\t\tinst._now = now;\n\t\t\tinst._now.setMilliseconds(0);\n\t\t\tvar until = new Date(inst._now.getTime());\n\t\t\tif (inst._since) {\n\t\t\t\tif (now.getTime() &lt; inst._since.getTime()) {\n\t\t\t\t\tinst._now = now = until;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tnow = inst._since;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tuntil.setTime(inst._until.getTime());\n\t\t\t\tif (now.getTime() > inst._until.getTime()) {\n\t\t\t\t\tinst._now = now = until;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Calculate differences by period\n\t\t\tvar periods = [0, 0, 0, 0, 0, 0, 0];\n\t\t\tif (show[Y] || show[O]) {\n\t\t\t\t// Treat end of months as the same\n\t\t\t\tvar lastNow = this._getDaysInMonth(now.getFullYear(), now.getMonth());\n\t\t\t\tvar lastUntil = this._getDaysInMonth(until.getFullYear(), until.getMonth());\n\t\t\t\tvar sameDay = (until.getDate() === now.getDate() ||\n\t\t\t\t\t(until.getDate() >= Math.min(lastNow, lastUntil) &amp;&amp;\n\t\t\t\t\tnow.getDate() >= Math.min(lastNow, lastUntil)));\n\t\t\t\tvar getSecs = function(date) {\n\t\t\t\t\treturn (date.getHours() * 60 + date.getMinutes()) * 60 + date.getSeconds();\n\t\t\t\t};\n\t\t\t\tvar months = Math.max(0,\n\t\t\t\t\t(until.getFullYear() - now.getFullYear()) * 12 + until.getMonth() - now.getMonth() +\n\t\t\t\t\t((until.getDate() &lt; now.getDate() &amp;&amp; !sameDay) ||\n\t\t\t\t\t(sameDay &amp;&amp; getSecs(until) &lt; getSecs(now)) ? -1 : 0));\n\t\t\t\tperiods[Y] = (show[Y] ? Math.floor(months / 12) : 0);\n\t\t\t\tperiods[O] = (show[O] ? months - periods[Y] * 12 : 0);\n\t\t\t\t// Adjust for months difference and end of month if necessary\n\t\t\t\tnow = new Date(now.getTime());\n\t\t\t\tvar wasLastDay = (now.getDate() === lastNow);\n\t\t\t\tvar lastDay = this._getDaysInMonth(now.getFullYear() + periods[Y],\n\t\t\t\t\tnow.getMonth() + periods[O]);\n\t\t\t\tif (now.getDate() > lastDay) {\n\t\t\t\t\tnow.setDate(lastDay);\n\t\t\t\t}\n\t\t\t\tnow.setFullYear(now.getFullYear() + periods[Y]);\n\t\t\t\tnow.setMonth(now.getMonth() + periods[O]);\n\t\t\t\tif (wasLastDay) {\n\t\t\t\t\tnow.setDate(lastDay);\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar diff = Math.floor((until.getTime() - now.getTime()) / 1000);\n\t\t\tvar period = null;\n\t\t\tvar extractPeriod = function(period, numSecs) {\n\t\t\t\tperiods[period] = (show[period] ? Math.floor(diff / numSecs) : 0);\n\t\t\t\tdiff -= periods[period] * numSecs;\n\t\t\t};\n\t\t\textractPeriod(W, 604800);\n\t\t\textractPeriod(D, 86400);\n\t\t\textractPeriod(H, 3600);\n\t\t\textractPeriod(M, 60);\n\t\t\textractPeriod(S, 1);\n\t\t\tif (diff > 0 &amp;&amp; !inst._since) { // Round up if left overs\n\t\t\t\tvar multiplier = [1, 12, 4.3482, 7, 24, 60, 60];\n\t\t\t\tvar lastShown = S;\n\t\t\t\tvar max = 1;\n\t\t\t\tfor (period = S; period >= Y; period--) {\n\t\t\t\t\tif (show[period]) {\n\t\t\t\t\t\tif (periods[lastShown] >= max) {\n\t\t\t\t\t\t\tperiods[lastShown] = 0;\n\t\t\t\t\t\t\tdiff = 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (diff > 0) {\n\t\t\t\t\t\t\tperiods[period]++;\n\t\t\t\t\t\t\tdiff = 0;\n\t\t\t\t\t\t\tlastShown = period;\n\t\t\t\t\t\t\tmax = 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tmax *= multiplier[period];\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (significant) { // Zero out insignificant periods\n\t\t\t\tfor (period = Y; period &lt;= S; period++) {\n\t\t\t\t\tif (significant &amp;&amp; periods[period]) {\n\t\t\t\t\t\tsignificant--;\n\t\t\t\t\t}\n\t\t\t\t\telse if (!significant) {\n\t\t\t\t\t\tperiods[period] = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn periods;\n\t\t}\n\t});\n\n})(jQuery);\n</code></pre>\n        </article>\n    </section>\n\n\n\n\n</div>\n\n<nav>\n    <h2><a href=\"index.html\">Home</a></h2><h3>Modules</h3><ul><li><a href=\"module-Countdown.html\">Countdown</a></li></ul><h3><a href=\"global.html\">Global</a></h3>\n</nav>\n\n<br class=\"clear\">\n\n<footer>\n    Documentation generated by <a href=\"https://github.com/jsdoc3/jsdoc\">JSDoc 3.4.1</a> on Sat Nov 19 2016 20:51:10 GMT+1100 (AUS Eastern Daylight Time)\n</footer>\n\n<script> prettyPrint(); </script>\n<script src=\"scripts/linenumber.js\"> </script>\n</body>\n</html>\n"
  },
  {
    "path": "doc/module-Countdown.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\">\n    <title>JSDoc: Module: Countdown</title>\n\n    <script src=\"scripts/prettify/prettify.js\"> </script>\n    <script src=\"scripts/prettify/lang-css.js\"> </script>\n    <!--[if lt IE 9]>\n      <script src=\"//html5shiv.googlecode.com/svn/trunk/html5.js\"></script>\n    <![endif]-->\n    <link type=\"text/css\" rel=\"stylesheet\" href=\"styles/prettify-tomorrow.css\">\n    <link type=\"text/css\" rel=\"stylesheet\" href=\"styles/jsdoc-default.css\">\n</head>\n\n<body>\n\n<div id=\"main\">\n\n    <h1 class=\"page-title\">Module: Countdown</h1>\n\n    \n\n\n\n\n<section>\n\n<header>\n    \n        \n            \n        \n    \n</header>\n\n<article>\n    <div class=\"container-overview\">\n    \n        \n            <div class=\"description\">Create the countdown plugin.\n\t\t<p>Sets an element to show the time remaining until a given instant.</p>\n\t\t<p>Expects HTML like:</p>\n\t\t<pre>&lt;div>&lt;/div></pre>\n\t\t<p>Provide inline configuration like:</p>\n\t\t<pre>&lt;div data-countdown=\"name: 'value', ...\">&lt;/div></pre></div>\n        \n\n        \n            \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<dl class=\"details\">\n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n    <dt class=\"tag-source\">Source:</dt>\n    <dd class=\"tag-source\"><ul class=\"dummy\"><li>\n        <a href=\"jquery.countdown.js.html\">jquery.countdown.js</a>, <a href=\"jquery.countdown.js.html#line20\">line 20</a>\n    </li></ul></dd>\n    \n\n    \n\n    \n\n    \n</dl>\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n    <h5>Example</h5>\n    \n    <pre class=\"prettyprint\"><code>$(selector).countdown({until: +300})</code></pre>\n\n\n\n        \n    \n    </div>\n\n    \n        <h3 class=\"subsection-title\">Extends</h3>\n\n        \n\n\n    <ul>\n        <li>JQPlugin</li>\n    </ul>\n\n\n    \n\n    \n\n    \n\n     \n\n    \n\n    \n        <h3 class=\"subsection-title\">Members</h3>\n\n        \n            \n<h4 class=\"name\" id=\"~defaultOptions\"><span class=\"type-signature\">(inner) </span>defaultOptions<span class=\"type-signature\"></span></h4>\n\n\n\n\n<div class=\"description\">\n    Default settings for the plugin.\n</div>\n\n\n\n\n\n\n\n    <h5 class=\"subsection-title\">Properties:</h5>\n\n    \n\n<table class=\"props\">\n    <thead>\n    <tr>\n        \n        <th>Name</th>\n        \n\n        <th>Type</th>\n\n        \n        <th>Attributes</th>\n        \n\n        \n        <th>Default</th>\n        \n\n        <th class=\"last\">Description</th>\n    </tr>\n    </thead>\n\n    <tbody>\n    \n\n        <tr>\n            \n                <td class=\"name\"><code>until</code></td>\n            \n\n            <td class=\"type\">\n            \n                \n<span class=\"param-type\">Date</span>\n|\n\n<span class=\"param-type\">number</span>\n|\n\n<span class=\"param-type\">string</span>\n\n\n            \n            </td>\n\n            \n                <td class=\"attributes\">\n                \n                    &lt;optional><br>\n                \n\n                \n                </td>\n            \n\n            \n                <td class=\"default\">\n                \n                </td>\n            \n\n            <td class=\"description last\">The date/time to count down to, or number of seconds\n\t\t\t\t\t\toffset from now, or string of amounts and units for offset(s) from now:\n\t\t\t\t\t\t'Y' years, 'O' months, 'W' weeks, 'D' days, 'H' hours, 'M' minutes, 'S' seconds.\n\t\t\t\t\t\tOne of <code>until</code> or <code>since</code> must be specified.\n\t\t\t\t\t\tIf both are given <code>since</code> takes precedence.</td>\n        </tr>\n\n    \n\n        <tr>\n            \n                <td class=\"name\"><code>since</code></td>\n            \n\n            <td class=\"type\">\n            \n                \n<span class=\"param-type\">Date</span>\n|\n\n<span class=\"param-type\">number</span>\n|\n\n<span class=\"param-type\">string</span>\n\n\n            \n            </td>\n\n            \n                <td class=\"attributes\">\n                \n                    &lt;optional><br>\n                \n\n                \n                </td>\n            \n\n            \n                <td class=\"default\">\n                \n                </td>\n            \n\n            <td class=\"description last\">The date/time to count up from, or number of seconds\n\t\t\t\t\t\toffset from now, or string of amounts and units for offset(s) from now:\n\t\t\t\t\t\t'Y' years, 'O' months, 'W' weeks, 'D' days, 'H' hours, 'M' minutes, 'S' seconds.\n\t\t\t\t\t\tOne of <code>until</code> or <code>since</code> must be specified.\n\t\t\t\t\t\tIf both are given <code>since</code> takes precedence.</td>\n        </tr>\n\n    \n\n        <tr>\n            \n                <td class=\"name\"><code>timezone</code></td>\n            \n\n            <td class=\"type\">\n            \n                \n<span class=\"param-type\">number</span>\n\n\n            \n            </td>\n\n            \n                <td class=\"attributes\">\n                \n                    &lt;optional><br>\n                \n\n                \n                </td>\n            \n\n            \n                <td class=\"default\">\n                \n                    null\n                \n                </td>\n            \n\n            <td class=\"description last\">The timezone (hours or minutes from GMT) for the target times,\n\t\t\t\t\t\tor <code>null</code> for client local timezone.</td>\n        </tr>\n\n    \n\n        <tr>\n            \n                <td class=\"name\"><code>serverSync</code></td>\n            \n\n            <td class=\"type\">\n            \n                \n<span class=\"param-type\"><a href=\"global.html#CountdownServerSyncCallback\">CountdownServerSyncCallback</a></span>\n\n\n            \n            </td>\n\n            \n                <td class=\"attributes\">\n                \n                    &lt;optional><br>\n                \n\n                \n                </td>\n            \n\n            \n                <td class=\"default\">\n                \n                    null\n                \n                </td>\n            \n\n            <td class=\"description last\">A function to retrieve the current server time\n\t\t\t\t\t\tfor synchronisation.</td>\n        </tr>\n\n    \n\n        <tr>\n            \n                <td class=\"name\"><code>format</code></td>\n            \n\n            <td class=\"type\">\n            \n                \n<span class=\"param-type\">string</span>\n\n\n            \n            </td>\n\n            \n                <td class=\"attributes\">\n                \n                    &lt;optional><br>\n                \n\n                \n                </td>\n            \n\n            \n                <td class=\"default\">\n                \n                    'dHMS'\n                \n                </td>\n            \n\n            <td class=\"description last\">The format for display - upper case to always show,\n\t\t\t\t\t\tlower case to show only if non-zero,\n\t\t\t\t\t\t'Y' years, 'O' months, 'W' weeks, 'D' days, 'H' hours, 'M' minutes, 'S' seconds.</td>\n        </tr>\n\n    \n\n        <tr>\n            \n                <td class=\"name\"><code>layout</code></td>\n            \n\n            <td class=\"type\">\n            \n                \n<span class=\"param-type\">string</span>\n\n\n            \n            </td>\n\n            \n                <td class=\"attributes\">\n                \n                    &lt;optional><br>\n                \n\n                \n                </td>\n            \n\n            \n                <td class=\"default\">\n                \n                    ''\n                \n                </td>\n            \n\n            <td class=\"description last\"><p>Build your own layout for the countdown.</p>\n\t\t\t\t\t\t<p>Indicate substitution points with '{desc}' for the description, '{sep}' for the time separator,\n\t\t\t\t\t\t'{pv}' where p is 'y' for years, 'o' for months, 'w' for weeks, 'd' for days,\n\t\t\t\t\t\t'h' for hours, 'm' for minutes, or 's' for seconds and v is 'n' for the period value,\n\t\t\t\t\t\t'nn' for the period value with a minimum of two digits,\n\t\t\t\t\t\t'nnn' for the period value with a minimum of three digits, or\n\t\t\t\t\t\t'l' for the period label (long or short form depending on the compact setting), or\n\t\t\t\t\t\t'{pd}' where p is as above and d is '1' for the units digit, '10' for the tens digit,\n\t\t\t\t\t\t'100' for the hundreds digit, or '1000' for the thousands digit.</p>\n\t\t\t\t\t\t<p>If you need to exclude entire sections when the period value is zero and\n\t\t\t\t\t\tyou have specified the period as optional, surround these sections with\n\t\t\t\t\t\t'{p<}' and '{p>}', where p is the same as above.</p>\n\t\t\t\t\t\t<p>Your layout can just be simple text, or can contain HTML markup as well.</p></td>\n        </tr>\n\n    \n\n        <tr>\n            \n                <td class=\"name\"><code>compact</code></td>\n            \n\n            <td class=\"type\">\n            \n                \n<span class=\"param-type\">boolean</span>\n\n\n            \n            </td>\n\n            \n                <td class=\"attributes\">\n                \n                    &lt;optional><br>\n                \n\n                \n                </td>\n            \n\n            \n                <td class=\"default\">\n                \n                    false\n                \n                </td>\n            \n\n            <td class=\"description last\"><code>true</code> to display in a compact format,\n\t\t\t\t\t\t<code>false</code> for an expanded one.</td>\n        </tr>\n\n    \n\n        <tr>\n            \n                <td class=\"name\"><code>padZeroes</code></td>\n            \n\n            <td class=\"type\">\n            \n                \n<span class=\"param-type\">boolean</span>\n\n\n            \n            </td>\n\n            \n                <td class=\"attributes\">\n                \n                    &lt;optional><br>\n                \n\n                \n                </td>\n            \n\n            \n                <td class=\"default\">\n                \n                    false\n                \n                </td>\n            \n\n            <td class=\"description last\"><code>true</code> to add leading zeroes.</td>\n        </tr>\n\n    \n\n        <tr>\n            \n                <td class=\"name\"><code>significant</code></td>\n            \n\n            <td class=\"type\">\n            \n                \n<span class=\"param-type\">number</span>\n\n\n            \n            </td>\n\n            \n                <td class=\"attributes\">\n                \n                    &lt;optional><br>\n                \n\n                \n                </td>\n            \n\n            \n                <td class=\"default\">\n                \n                    0\n                \n                </td>\n            \n\n            <td class=\"description last\">The maximum number of periods with non-zero values to show, zero for all.</td>\n        </tr>\n\n    \n\n        <tr>\n            \n                <td class=\"name\"><code>description</code></td>\n            \n\n            <td class=\"type\">\n            \n                \n<span class=\"param-type\">string</span>\n\n\n            \n            </td>\n\n            \n                <td class=\"attributes\">\n                \n                    &lt;optional><br>\n                \n\n                \n                </td>\n            \n\n            \n                <td class=\"default\">\n                \n                    ''\n                \n                </td>\n            \n\n            <td class=\"description last\">The description displayed for the countdown.</td>\n        </tr>\n\n    \n\n        <tr>\n            \n                <td class=\"name\"><code>expiryUrl</code></td>\n            \n\n            <td class=\"type\">\n            \n                \n<span class=\"param-type\">string</span>\n\n\n            \n            </td>\n\n            \n                <td class=\"attributes\">\n                \n                    &lt;optional><br>\n                \n\n                \n                </td>\n            \n\n            \n                <td class=\"default\">\n                \n                    ''\n                \n                </td>\n            \n\n            <td class=\"description last\">A URL to load upon expiry, replacing the current page.</td>\n        </tr>\n\n    \n\n        <tr>\n            \n                <td class=\"name\"><code>expiryText</code></td>\n            \n\n            <td class=\"type\">\n            \n                \n<span class=\"param-type\">string</span>\n\n\n            \n            </td>\n\n            \n                <td class=\"attributes\">\n                \n                    &lt;optional><br>\n                \n\n                \n                </td>\n            \n\n            \n                <td class=\"default\">\n                \n                    ''\n                \n                </td>\n            \n\n            <td class=\"description last\">Text to display upon expiry, replacing the countdown. This may be HTML.</td>\n        </tr>\n\n    \n\n        <tr>\n            \n                <td class=\"name\"><code>alwaysExpire</code></td>\n            \n\n            <td class=\"type\">\n            \n                \n<span class=\"param-type\">boolean</span>\n\n\n            \n            </td>\n\n            \n                <td class=\"attributes\">\n                \n                    &lt;optional><br>\n                \n\n                \n                </td>\n            \n\n            \n                <td class=\"default\">\n                \n                    false\n                \n                </td>\n            \n\n            <td class=\"description last\"><code>true</code> to trigger <code>onExpiry</code>\n\t\t\t\t\t\teven if the target time has passed.</td>\n        </tr>\n\n    \n\n        <tr>\n            \n                <td class=\"name\"><code>onExpiry</code></td>\n            \n\n            <td class=\"type\">\n            \n                \n<span class=\"param-type\"><a href=\"global.html#CountdownExpiryCallback\">CountdownExpiryCallback</a></span>\n\n\n            \n            </td>\n\n            \n                <td class=\"attributes\">\n                \n                    &lt;optional><br>\n                \n\n                \n                </td>\n            \n\n            \n                <td class=\"default\">\n                \n                    null\n                \n                </td>\n            \n\n            <td class=\"description last\">Callback when the countdown expires -\n\t\t\t\t\t\treceives no parameters and <code>this</code> is the containing element.</td>\n        </tr>\n\n    \n\n        <tr>\n            \n                <td class=\"name\"><code>onTick</code></td>\n            \n\n            <td class=\"type\">\n            \n                \n<span class=\"param-type\"><a href=\"global.html#CountdownTickCallback\">CountdownTickCallback</a></span>\n\n\n            \n            </td>\n\n            \n                <td class=\"attributes\">\n                \n                    &lt;optional><br>\n                \n\n                \n                </td>\n            \n\n            \n                <td class=\"default\">\n                \n                    null\n                \n                </td>\n            \n\n            <td class=\"description last\">Callback when the countdown is updated -\n\t\t\t\t\t\treceives <code>number[7]</code> being the breakdown by period\n\t\t\t\t\t\t(years, months, weeks, days, hours, minutes, seconds - based on\n\t\t\t\t\t\t<code>format</code>) and <code>this</code> is the containing element.</td>\n        </tr>\n\n    \n\n        <tr>\n            \n                <td class=\"name\"><code>tickInterval</code></td>\n            \n\n            <td class=\"type\">\n            \n                \n<span class=\"param-type\">number</span>\n\n\n            \n            </td>\n\n            \n                <td class=\"attributes\">\n                \n                    &lt;optional><br>\n                \n\n                \n                </td>\n            \n\n            \n                <td class=\"default\">\n                \n                    1\n                \n                </td>\n            \n\n            <td class=\"description last\">The interval (seconds) between <code>onTick</code> callbacks.</td>\n        </tr>\n\n    \n    </tbody>\n</table>\n\n\n\n\n<dl class=\"details\">\n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n    <dt class=\"tag-source\">Source:</dt>\n    <dd class=\"tag-source\"><ul class=\"dummy\"><li>\n        <a href=\"jquery.countdown.js.html\">jquery.countdown.js</a>, <a href=\"jquery.countdown.js.html#line154\">line 154</a>\n    </li></ul></dd>\n    \n\n    \n\n    \n\n    \n</dl>\n\n\n\n\n\n    <h5>Examples</h5>\n    \n    <pre class=\"prettyprint\"><code>until: new Date(2013, 12-1, 25, 13, 30)\nuntil: +300\nuntil: '+1O -2D'\n\t\t\t</code></pre>\n\n    <pre class=\"prettyprint\"><code>since: new Date(2013, 1-1, 1)\nsince: -300\nsince: '-1O +2D'\n\t\t\t</code></pre>\n\n    <pre class=\"prettyprint\"><code>timezone: +10\ntimezone: -60\n\t\t\t</code></pre>\n\n    <pre class=\"prettyprint\"><code>layout: '{d&lt;}{dn} {dl}{d>} {hnn}:{mnn}:{snn}'\n\t\t\t</code></pre>\n\n    <pre class=\"prettyprint\"><code>onExpiry: function() {\n  ...\n}\n\t\t\t</code></pre>\n\n    <pre class=\"prettyprint\"><code>onTick: function(periods) {\n  var secs = $.countdown.periodsToSeconds(periods);\n  if (secs &lt; 300) { // Last five minutes\n    ...\n  }\n}\n\t\t\t</code></pre>\n\n\n\n        \n            \n<h4 class=\"name\" id=\"~name\"><span class=\"type-signature\">(inner) </span>name<span class=\"type-signature\"></span></h4>\n\n\n\n\n<div class=\"description\">\n    The name of the plugin.\n</div>\n\n\n\n\n\n\n\n<dl class=\"details\">\n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n    <dt class=\"tag-default\">Default Value:</dt>\n    <dd class=\"tag-default\"><ul class=\"dummy\">\n            <li>'countdown'</li>\n        </ul></dd>\n    \n\n    \n    <dt class=\"tag-source\">Source:</dt>\n    <dd class=\"tag-source\"><ul class=\"dummy\"><li>\n        <a href=\"jquery.countdown.js.html\">jquery.countdown.js</a>, <a href=\"jquery.countdown.js.html#line33\">line 33</a>\n    </li></ul></dd>\n    \n\n    \n\n    \n\n    \n</dl>\n\n\n\n\n\n\n        \n            \n<h4 class=\"name\" id=\"~regionalOptions\"><span class=\"type-signature\">(inner) </span>regionalOptions<span class=\"type-signature\"></span></h4>\n\n\n\n\n<div class=\"description\">\n    Localisations for the plugin.\n\t\t\tEntries are objects indexed by the language code ('' being the default US/English).\n\t\t\tEach object has the following attributes.\n</div>\n\n\n\n\n\n\n\n    <h5 class=\"subsection-title\">Properties:</h5>\n\n    \n\n<table class=\"props\">\n    <thead>\n    <tr>\n        \n        <th>Name</th>\n        \n\n        <th>Type</th>\n\n        \n        <th>Attributes</th>\n        \n\n        \n        <th>Default</th>\n        \n\n        <th class=\"last\">Description</th>\n    </tr>\n    </thead>\n\n    <tbody>\n    \n\n        <tr>\n            \n                <td class=\"name\"><code>labels</code></td>\n            \n\n            <td class=\"type\">\n            \n                \n<span class=\"param-type\">Array.&lt;string></span>\n\n\n            \n            </td>\n\n            \n                <td class=\"attributes\">\n                \n                    &lt;optional><br>\n                \n\n                \n                </td>\n            \n\n            \n                <td class=\"default\">\n                \n                    ['Years','Months','Weeks','Days','Hours','Minutes','Seconds']\n                \n                </td>\n            \n\n            <td class=\"description last\">The display texts for the counter periods.</td>\n        </tr>\n\n    \n\n        <tr>\n            \n                <td class=\"name\"><code>labels1</code></td>\n            \n\n            <td class=\"type\">\n            \n                \n<span class=\"param-type\">Array.&lt;string></span>\n\n\n            \n            </td>\n\n            \n                <td class=\"attributes\">\n                \n                    &lt;optional><br>\n                \n\n                \n                </td>\n            \n\n            \n                <td class=\"default\">\n                \n                    ['Year','Month','Week','Day','Hour','Minute','Second']\n                \n                </td>\n            \n\n            <td class=\"description last\">The display texts for the counter periods if they have a value of 1.\n\t\t\t\t\t\tAdd other <code>labels<em>n</em></code> attributes as necessary to\n\t\t\t\t\t\tcater for other numeric idiosyncrasies of the localisation.</td>\n        </tr>\n\n    \n\n        <tr>\n            \n                <td class=\"name\"><code>compactLabels</code></td>\n            \n\n            <td class=\"type\">\n            \n                \n<span class=\"param-type\">Array.&lt;string></span>\n\n\n            \n            </td>\n\n            \n                <td class=\"attributes\">\n                \n                    &lt;optional><br>\n                \n\n                \n                </td>\n            \n\n            \n                <td class=\"default\">\n                \n                    ['y','m','w','d']\n                \n                </td>\n            \n\n            <td class=\"description last\">The compact texts for the counter periods.</td>\n        </tr>\n\n    \n\n        <tr>\n            \n                <td class=\"name\"><code>whichLabels</code></td>\n            \n\n            <td class=\"type\">\n            \n                \n<span class=\"param-type\"><a href=\"global.html#CountdownWhichLabelsCallback\">CountdownWhichLabelsCallback</a></span>\n\n\n            \n            </td>\n\n            \n                <td class=\"attributes\">\n                \n                    &lt;optional><br>\n                \n\n                \n                </td>\n            \n\n            \n                <td class=\"default\">\n                \n                    null\n                \n                </td>\n            \n\n            <td class=\"description last\">A function to determine which\n\t\t\t\t\t\t<code>labels<em>n</em></code> to use.</td>\n        </tr>\n\n    \n\n        <tr>\n            \n                <td class=\"name\"><code>digits</code></td>\n            \n\n            <td class=\"type\">\n            \n                \n<span class=\"param-type\">Array.&lt;string></span>\n\n\n            \n            </td>\n\n            \n                <td class=\"attributes\">\n                \n                    &lt;optional><br>\n                \n\n                \n                </td>\n            \n\n            \n                <td class=\"default\">\n                \n                    ['0','1',...,'9']\n                \n                </td>\n            \n\n            <td class=\"description last\">The digits to display (0-9).</td>\n        </tr>\n\n    \n\n        <tr>\n            \n                <td class=\"name\"><code>timeSeparator</code></td>\n            \n\n            <td class=\"type\">\n            \n                \n<span class=\"param-type\">string</span>\n\n\n            \n            </td>\n\n            \n                <td class=\"attributes\">\n                \n                    &lt;optional><br>\n                \n\n                \n                </td>\n            \n\n            \n                <td class=\"default\">\n                \n                    ':'\n                \n                </td>\n            \n\n            <td class=\"description last\">Separator for time periods in the compact layout.</td>\n        </tr>\n\n    \n\n        <tr>\n            \n                <td class=\"name\"><code>isRTL</code></td>\n            \n\n            <td class=\"type\">\n            \n                \n<span class=\"param-type\">boolean</span>\n\n\n            \n            </td>\n\n            \n                <td class=\"attributes\">\n                \n                    &lt;optional><br>\n                \n\n                \n                </td>\n            \n\n            \n                <td class=\"default\">\n                \n                    false\n                \n                </td>\n            \n\n            <td class=\"description last\"><code>true</code> for right-to-left languages,\n\t\t\t\t\t\t<code>false</code> for left-to-right.</td>\n        </tr>\n\n    \n    </tbody>\n</table>\n\n\n\n\n<dl class=\"details\">\n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n    <dt class=\"tag-source\">Source:</dt>\n    <dd class=\"tag-source\"><ul class=\"dummy\"><li>\n        <a href=\"jquery.countdown.js.html\">jquery.countdown.js</a>, <a href=\"jquery.countdown.js.html#line192\">line 192</a>\n    </li></ul></dd>\n    \n\n    \n\n    \n\n    \n</dl>\n\n\n\n\n\n    <h5>Example</h5>\n    \n    <pre class=\"prettyprint\"><code>whichLabels: function(num) {\n  return (num > 1 ? 0 : 1);\n}\n\t\t\t</code></pre>\n\n\n\n        \n    \n\n    \n        <h3 class=\"subsection-title\">Methods</h3>\n\n        \n            \n\n    \n\n    <h4 class=\"name\" id=\"~getTimes\"><span class=\"type-signature\">(inner) </span>getTimes<span class=\"signature\">(elem)</span><span class=\"type-signature\"> &rarr; {Array.&lt;number>}</span></h4>\n\n    \n\n\n\n<div class=\"description\">\n    Return the current time periods, broken down by years, months, weeks, days, hours, minutes, and seconds.\n</div>\n\n\n\n\n\n\n\n\n\n    <h5>Parameters:</h5>\n    \n\n<table class=\"params\">\n    <thead>\n    <tr>\n        \n        <th>Name</th>\n        \n\n        <th>Type</th>\n\n        \n\n        \n\n        <th class=\"last\">Description</th>\n    </tr>\n    </thead>\n\n    <tbody>\n    \n\n        <tr>\n            \n                <td class=\"name\"><code>elem</code></td>\n            \n\n            <td class=\"type\">\n            \n                \n<span class=\"param-type\">Element</span>\n\n\n            \n            </td>\n\n            \n\n            \n\n            <td class=\"description last\">The containing element.</td>\n        </tr>\n\n    \n    </tbody>\n</table>\n\n\n\n\n\n\n<dl class=\"details\">\n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n    <dt class=\"tag-source\">Source:</dt>\n    <dd class=\"tag-source\"><ul class=\"dummy\"><li>\n        <a href=\"jquery.countdown.js.html\">jquery.countdown.js</a>, <a href=\"jquery.countdown.js.html#line588\">line 588</a>\n    </li></ul></dd>\n    \n\n    \n\n    \n\n    \n</dl>\n\n\n\n\n\n\n\n\n\n\n\n\n\n<h5>Returns:</h5>\n\n        \n<div class=\"param-desc\">\n    The current periods for the countdown.\n</div>\n\n\n\n<dl>\n    <dt>\n        Type\n    </dt>\n    <dd>\n        \n<span class=\"param-type\">Array.&lt;number></span>\n\n\n    </dd>\n</dl>\n\n    \n\n\n    <h5>Example</h5>\n    \n    <pre class=\"prettyprint\"><code>var periods = $(selector).countdown('getTimes')</code></pre>\n\n\n\n        \n            \n\n    \n\n    <h4 class=\"name\" id=\"~lap\"><span class=\"type-signature\">(inner) </span>lap<span class=\"signature\">(elem)</span><span class=\"type-signature\"></span></h4>\n\n    \n\n\n\n<div class=\"description\">\n    Pause a countdown widget at the current time.\n\t\t\tStop the display but keep the countdown running.\n</div>\n\n\n\n\n\n\n\n\n\n    <h5>Parameters:</h5>\n    \n\n<table class=\"params\">\n    <thead>\n    <tr>\n        \n        <th>Name</th>\n        \n\n        <th>Type</th>\n\n        \n\n        \n\n        <th class=\"last\">Description</th>\n    </tr>\n    </thead>\n\n    <tbody>\n    \n\n        <tr>\n            \n                <td class=\"name\"><code>elem</code></td>\n            \n\n            <td class=\"type\">\n            \n                \n<span class=\"param-type\">Element</span>\n\n\n            \n            </td>\n\n            \n\n            \n\n            <td class=\"description last\">The containing element.</td>\n        </tr>\n\n    \n    </tbody>\n</table>\n\n\n\n\n\n\n<dl class=\"details\">\n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n    <dt class=\"tag-source\">Source:</dt>\n    <dd class=\"tag-source\"><ul class=\"dummy\"><li>\n        <a href=\"jquery.countdown.js.html\">jquery.countdown.js</a>, <a href=\"jquery.countdown.js.html#line533\">line 533</a>\n    </li></ul></dd>\n    \n\n    \n\n    \n\n    \n</dl>\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n    <h5>Example</h5>\n    \n    <pre class=\"prettyprint\"><code>$(selector).countdown('lap')</code></pre>\n\n\n\n        \n            \n\n    \n\n    <h4 class=\"name\" id=\"~pause\"><span class=\"type-signature\">(inner) </span>pause<span class=\"signature\">(elem)</span><span class=\"type-signature\"></span></h4>\n\n    \n\n\n\n<div class=\"description\">\n    Pause a countdown widget at the current time.\n\t\t\tStop it running but remember and display the current time.\n</div>\n\n\n\n\n\n\n\n\n\n    <h5>Parameters:</h5>\n    \n\n<table class=\"params\">\n    <thead>\n    <tr>\n        \n        <th>Name</th>\n        \n\n        <th>Type</th>\n\n        \n\n        \n\n        <th class=\"last\">Description</th>\n    </tr>\n    </thead>\n\n    <tbody>\n    \n\n        <tr>\n            \n                <td class=\"name\"><code>elem</code></td>\n            \n\n            <td class=\"type\">\n            \n                \n<span class=\"param-type\">Element</span>\n\n\n            \n            </td>\n\n            \n\n            \n\n            <td class=\"description last\">The containing element.</td>\n        </tr>\n\n    \n    </tbody>\n</table>\n\n\n\n\n\n\n<dl class=\"details\">\n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n    <dt class=\"tag-source\">Source:</dt>\n    <dd class=\"tag-source\"><ul class=\"dummy\"><li>\n        <a href=\"jquery.countdown.js.html\">jquery.countdown.js</a>, <a href=\"jquery.countdown.js.html#line525\">line 525</a>\n    </li></ul></dd>\n    \n\n    \n\n    \n\n    \n</dl>\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n    <h5>Example</h5>\n    \n    <pre class=\"prettyprint\"><code>$(selector).countdown('pause')</code></pre>\n\n\n\n        \n            \n\n    \n\n    <h4 class=\"name\" id=\"~periodsToSeconds\"><span class=\"type-signature\">(inner) </span>periodsToSeconds<span class=\"signature\">(periods)</span><span class=\"type-signature\"> &rarr; {number}</span></h4>\n\n    \n\n\n\n<div class=\"description\">\n    Convert a set of periods into seconds.\n\t\t\tAveraged for months and years.\n</div>\n\n\n\n\n\n\n\n\n\n    <h5>Parameters:</h5>\n    \n\n<table class=\"params\">\n    <thead>\n    <tr>\n        \n        <th>Name</th>\n        \n\n        <th>Type</th>\n\n        \n\n        \n\n        <th class=\"last\">Description</th>\n    </tr>\n    </thead>\n\n    <tbody>\n    \n\n        <tr>\n            \n                <td class=\"name\"><code>periods</code></td>\n            \n\n            <td class=\"type\">\n            \n                \n<span class=\"param-type\">Array.&lt;number></span>\n\n\n            \n            </td>\n\n            \n\n            \n\n            <td class=\"description last\">The periods per year/month/week/day/hour/minute/second.</td>\n        </tr>\n\n    \n    </tbody>\n</table>\n\n\n\n\n\n\n<dl class=\"details\">\n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n    <dt class=\"tag-source\">Source:</dt>\n    <dd class=\"tag-source\"><ul class=\"dummy\"><li>\n        <a href=\"jquery.countdown.js.html\">jquery.countdown.js</a>, <a href=\"jquery.countdown.js.html#line303\">line 303</a>\n    </li></ul></dd>\n    \n\n    \n\n    \n\n    \n</dl>\n\n\n\n\n\n\n\n\n\n\n\n\n\n<h5>Returns:</h5>\n\n        \n<div class=\"param-desc\">\n    The corresponding number of seconds.\n</div>\n\n\n\n<dl>\n    <dt>\n        Type\n    </dt>\n    <dd>\n        \n<span class=\"param-type\">number</span>\n\n\n    </dd>\n</dl>\n\n    \n\n\n    <h5>Example</h5>\n    \n    <pre class=\"prettyprint\"><code>var secs = $.countdown.periodsToSeconds(periods)</code></pre>\n\n\n\n        \n            \n\n    \n\n    <h4 class=\"name\" id=\"~resume\"><span class=\"type-signature\">(inner) </span>resume<span class=\"signature\">(elem)</span><span class=\"type-signature\"></span></h4>\n\n    \n\n\n\n<div class=\"description\">\n    Resume a paused countdown widget.\n</div>\n\n\n\n\n\n\n\n\n\n    <h5>Parameters:</h5>\n    \n\n<table class=\"params\">\n    <thead>\n    <tr>\n        \n        <th>Name</th>\n        \n\n        <th>Type</th>\n\n        \n\n        \n\n        <th class=\"last\">Description</th>\n    </tr>\n    </thead>\n\n    <tbody>\n    \n\n        <tr>\n            \n                <td class=\"name\"><code>elem</code></td>\n            \n\n            <td class=\"type\">\n            \n                \n<span class=\"param-type\">Element</span>\n\n\n            \n            </td>\n\n            \n\n            \n\n            <td class=\"description last\">The containing element.</td>\n        </tr>\n\n    \n    </tbody>\n</table>\n\n\n\n\n\n\n<dl class=\"details\">\n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n    <dt class=\"tag-source\">Source:</dt>\n    <dd class=\"tag-source\"><ul class=\"dummy\"><li>\n        <a href=\"jquery.countdown.js.html\">jquery.countdown.js</a>, <a href=\"jquery.countdown.js.html#line540\">line 540</a>\n    </li></ul></dd>\n    \n\n    \n\n    \n\n    \n</dl>\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n    <h5>Example</h5>\n    \n    <pre class=\"prettyprint\"><code>$(selector).countdown('resume')</code></pre>\n\n\n\n        \n            \n\n    \n\n    <h4 class=\"name\" id=\"~resync\"><span class=\"type-signature\">(inner) </span>resync<span class=\"signature\">()</span><span class=\"type-signature\"></span></h4>\n\n    \n\n\n\n<div class=\"description\">\n    Resynchronise the countdowns with the server.\n</div>\n\n\n\n\n\n\n\n\n\n\n\n\n\n<dl class=\"details\">\n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n    <dt class=\"tag-source\">Source:</dt>\n    <dd class=\"tag-source\"><ul class=\"dummy\"><li>\n        <a href=\"jquery.countdown.js.html\">jquery.countdown.js</a>, <a href=\"jquery.countdown.js.html#line310\">line 310</a>\n    </li></ul></dd>\n    \n\n    \n\n    \n\n    \n</dl>\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n    <h5>Example</h5>\n    \n    <pre class=\"prettyprint\"><code>$.countdown.resync()</code></pre>\n\n\n\n        \n            \n\n    \n\n    <h4 class=\"name\" id=\"~toggle\"><span class=\"type-signature\">(inner) </span>toggle<span class=\"signature\">(elem)</span><span class=\"type-signature\"></span></h4>\n\n    \n\n\n\n<div class=\"description\">\n    Toggle a paused countdown widget.\n</div>\n\n\n\n\n\n\n\n\n\n    <h5>Parameters:</h5>\n    \n\n<table class=\"params\">\n    <thead>\n    <tr>\n        \n        <th>Name</th>\n        \n\n        <th>Type</th>\n\n        \n\n        \n\n        <th class=\"last\">Description</th>\n    </tr>\n    </thead>\n\n    <tbody>\n    \n\n        <tr>\n            \n                <td class=\"name\"><code>elem</code></td>\n            \n\n            <td class=\"type\">\n            \n                \n<span class=\"param-type\">Element</span>\n\n\n            \n            </td>\n\n            \n\n            \n\n            <td class=\"description last\">The containing element.</td>\n        </tr>\n\n    \n    </tbody>\n</table>\n\n\n\n\n\n\n<dl class=\"details\">\n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n    <dt class=\"tag-source\">Source:</dt>\n    <dd class=\"tag-source\"><ul class=\"dummy\"><li>\n        <a href=\"jquery.countdown.js.html\">jquery.countdown.js</a>, <a href=\"jquery.countdown.js.html#line547\">line 547</a>\n    </li></ul></dd>\n    \n\n    \n\n    \n\n    \n</dl>\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n    <h5>Example</h5>\n    \n    <pre class=\"prettyprint\"><code>$(selector).countdown('toggle')</code></pre>\n\n\n\n        \n            \n\n    \n\n    <h4 class=\"name\" id=\"~toggleLap\"><span class=\"type-signature\">(inner) </span>toggleLap<span class=\"signature\">(elem)</span><span class=\"type-signature\"></span></h4>\n\n    \n\n\n\n<div class=\"description\">\n    Toggle a lapped countdown widget.\n</div>\n\n\n\n\n\n\n\n\n\n    <h5>Parameters:</h5>\n    \n\n<table class=\"params\">\n    <thead>\n    <tr>\n        \n        <th>Name</th>\n        \n\n        <th>Type</th>\n\n        \n\n        \n\n        <th class=\"last\">Description</th>\n    </tr>\n    </thead>\n\n    <tbody>\n    \n\n        <tr>\n            \n                <td class=\"name\"><code>elem</code></td>\n            \n\n            <td class=\"type\">\n            \n                \n<span class=\"param-type\">Element</span>\n\n\n            \n            </td>\n\n            \n\n            \n\n            <td class=\"description last\">The containing element.</td>\n        </tr>\n\n    \n    </tbody>\n</table>\n\n\n\n\n\n\n<dl class=\"details\">\n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n    <dt class=\"tag-source\">Source:</dt>\n    <dd class=\"tag-source\"><ul class=\"dummy\"><li>\n        <a href=\"jquery.countdown.js.html\">jquery.countdown.js</a>, <a href=\"jquery.countdown.js.html#line555\">line 555</a>\n    </li></ul></dd>\n    \n\n    \n\n    \n\n    \n</dl>\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n    <h5>Example</h5>\n    \n    <pre class=\"prettyprint\"><code>$(selector).countdown('toggleLap')</code></pre>\n\n\n\n        \n            \n\n    \n\n    <h4 class=\"name\" id=\"~UTCDate\"><span class=\"type-signature\">(inner) </span>UTCDate<span class=\"signature\">(tz, year, month<span class=\"signature-attributes\">opt</span>, day<span class=\"signature-attributes\">opt</span>, hours<span class=\"signature-attributes\">opt</span>, mins<span class=\"signature-attributes\">opt</span>, secs<span class=\"signature-attributes\">opt</span>, ms<span class=\"signature-attributes\">opt</span>)</span><span class=\"type-signature\"> &rarr; {Date}</span></h4>\n\n    \n\n\n\n<div class=\"description\">\n    Convert a date/time to UTC.\n</div>\n\n\n\n\n\n\n\n\n\n    <h5>Parameters:</h5>\n    \n\n<table class=\"params\">\n    <thead>\n    <tr>\n        \n        <th>Name</th>\n        \n\n        <th>Type</th>\n\n        \n        <th>Attributes</th>\n        \n\n        \n\n        <th class=\"last\">Description</th>\n    </tr>\n    </thead>\n\n    <tbody>\n    \n\n        <tr>\n            \n                <td class=\"name\"><code>tz</code></td>\n            \n\n            <td class=\"type\">\n            \n                \n<span class=\"param-type\">number</span>\n\n\n            \n            </td>\n\n            \n                <td class=\"attributes\">\n                \n\n                \n\n                \n                </td>\n            \n\n            \n\n            <td class=\"description last\">The hour or minute offset from GMT, e.g. +9, -360.</td>\n        </tr>\n\n    \n\n        <tr>\n            \n                <td class=\"name\"><code>year</code></td>\n            \n\n            <td class=\"type\">\n            \n                \n<span class=\"param-type\">Date</span>\n|\n\n<span class=\"param-type\">number</span>\n\n\n            \n            </td>\n\n            \n                <td class=\"attributes\">\n                \n\n                \n\n                \n                </td>\n            \n\n            \n\n            <td class=\"description last\">the date/time in that timezone or the year in that timezone.</td>\n        </tr>\n\n    \n\n        <tr>\n            \n                <td class=\"name\"><code>month</code></td>\n            \n\n            <td class=\"type\">\n            \n                \n<span class=\"param-type\">number</span>\n\n\n            \n            </td>\n\n            \n                <td class=\"attributes\">\n                \n                    &lt;optional><br>\n                \n\n                \n\n                \n                </td>\n            \n\n            \n\n            <td class=\"description last\">The month (0 - 11) (omit if <code>year</code> is a <code>Date</code>).</td>\n        </tr>\n\n    \n\n        <tr>\n            \n                <td class=\"name\"><code>day</code></td>\n            \n\n            <td class=\"type\">\n            \n                \n<span class=\"param-type\">number</span>\n\n\n            \n            </td>\n\n            \n                <td class=\"attributes\">\n                \n                    &lt;optional><br>\n                \n\n                \n\n                \n                </td>\n            \n\n            \n\n            <td class=\"description last\">The day (omit if <code>year</code> is a <code>Date</code>).</td>\n        </tr>\n\n    \n\n        <tr>\n            \n                <td class=\"name\"><code>hours</code></td>\n            \n\n            <td class=\"type\">\n            \n                \n<span class=\"param-type\">number</span>\n\n\n            \n            </td>\n\n            \n                <td class=\"attributes\">\n                \n                    &lt;optional><br>\n                \n\n                \n\n                \n                </td>\n            \n\n            \n\n            <td class=\"description last\">The hour (omit if <code>year</code> is a <code>Date</code>).</td>\n        </tr>\n\n    \n\n        <tr>\n            \n                <td class=\"name\"><code>mins</code></td>\n            \n\n            <td class=\"type\">\n            \n                \n<span class=\"param-type\">number</span>\n\n\n            \n            </td>\n\n            \n                <td class=\"attributes\">\n                \n                    &lt;optional><br>\n                \n\n                \n\n                \n                </td>\n            \n\n            \n\n            <td class=\"description last\">The minute (omit if <code>year</code> is a <code>Date</code>).</td>\n        </tr>\n\n    \n\n        <tr>\n            \n                <td class=\"name\"><code>secs</code></td>\n            \n\n            <td class=\"type\">\n            \n                \n<span class=\"param-type\">number</span>\n\n\n            \n            </td>\n\n            \n                <td class=\"attributes\">\n                \n                    &lt;optional><br>\n                \n\n                \n\n                \n                </td>\n            \n\n            \n\n            <td class=\"description last\">The second (omit if <code>year</code> is a <code>Date</code>).</td>\n        </tr>\n\n    \n\n        <tr>\n            \n                <td class=\"name\"><code>ms</code></td>\n            \n\n            <td class=\"type\">\n            \n                \n<span class=\"param-type\">number</span>\n\n\n            \n            </td>\n\n            \n                <td class=\"attributes\">\n                \n                    &lt;optional><br>\n                \n\n                \n\n                \n                </td>\n            \n\n            \n\n            <td class=\"description last\">The millisecond (omit if <code>year</code> is a <code>Date</code>).</td>\n        </tr>\n\n    \n    </tbody>\n</table>\n\n\n\n\n\n\n<dl class=\"details\">\n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n\n    \n    <dt class=\"tag-source\">Source:</dt>\n    <dd class=\"tag-source\"><ul class=\"dummy\"><li>\n        <a href=\"jquery.countdown.js.html\">jquery.countdown.js</a>, <a href=\"jquery.countdown.js.html#line276\">line 276</a>\n    </li></ul></dd>\n    \n\n    \n\n    \n\n    \n</dl>\n\n\n\n\n\n\n\n\n\n\n\n\n\n<h5>Returns:</h5>\n\n        \n<div class=\"param-desc\">\n    The equivalent UTC date/time.\n</div>\n\n\n\n<dl>\n    <dt>\n        Type\n    </dt>\n    <dd>\n        \n<span class=\"param-type\">Date</span>\n\n\n    </dd>\n</dl>\n\n    \n\n\n    <h5>Example</h5>\n    \n    <pre class=\"prettyprint\"><code>$.countdown.UTCDate(+10, 2013, 12-1, 25, 12, 0)\n$.countdown.UTCDate(-7, new Date(2013, 12-1, 25, 12, 0))</code></pre>\n\n\n\n        \n    \n\n    \n\n    \n</article>\n\n</section>\n\n\n\n\n</div>\n\n<nav>\n    <h2><a href=\"index.html\">Home</a></h2><h3>Modules</h3><ul><li><a href=\"module-Countdown.html\">Countdown</a></li></ul><h3><a href=\"global.html\">Global</a></h3>\n</nav>\n\n<br class=\"clear\">\n\n<footer>\n    Documentation generated by <a href=\"https://github.com/jsdoc3/jsdoc\">JSDoc 3.4.1</a> on Sat Nov 19 2016 20:51:10 GMT+1100 (AUS Eastern Daylight Time)\n</footer>\n\n<script> prettyPrint(); </script>\n<script src=\"scripts/linenumber.js\"> </script>\n</body>\n</html>"
  },
  {
    "path": "doc/styles/jsdoc-default.css",
    "content": "@font-face {\n    font-family: 'Open Sans';\n    font-weight: normal;\n    font-style: normal;\n    src: url('../fonts/OpenSans-Regular-webfont.eot');\n    src:\n        local('Open Sans'),\n        local('OpenSans'),\n        url('../fonts/OpenSans-Regular-webfont.eot?#iefix') format('embedded-opentype'),\n        url('../fonts/OpenSans-Regular-webfont.woff') format('woff'),\n        url('../fonts/OpenSans-Regular-webfont.svg#open_sansregular') format('svg');\n}\n\n@font-face {\n    font-family: 'Open Sans Light';\n    font-weight: normal;\n    font-style: normal;\n    src: url('../fonts/OpenSans-Light-webfont.eot');\n    src:\n        local('Open Sans Light'),\n        local('OpenSans Light'),\n        url('../fonts/OpenSans-Light-webfont.eot?#iefix') format('embedded-opentype'),\n        url('../fonts/OpenSans-Light-webfont.woff') format('woff'),\n        url('../fonts/OpenSans-Light-webfont.svg#open_sanslight') format('svg');\n}\n\nhtml\n{\n    overflow: auto;\n    background-color: #fff;\n    font-size: 14px;\n}\n\nbody\n{\n    font-family: 'Open Sans', sans-serif;\n    line-height: 1.5;\n    color: #4d4e53;\n    background-color: white;\n}\n\na, a:visited, a:active {\n    color: #0095dd;\n    text-decoration: none;\n}\n\na:hover {\n    text-decoration: underline;\n}\n\nheader\n{\n    display: block;\n    padding: 0px 4px;\n}\n\ntt, code, kbd, samp {\n    font-family: Consolas, Monaco, 'Andale Mono', monospace;\n}\n\n.class-description {\n    font-size: 130%;\n    line-height: 140%;\n    margin-bottom: 1em;\n    margin-top: 1em;\n}\n\n.class-description:empty {\n    margin: 0;\n}\n\n#main {\n    float: left;\n    width: 70%;\n}\n\narticle dl {\n    margin-bottom: 40px;\n}\n\nsection\n{\n    display: block;\n    background-color: #fff;\n    padding: 12px 24px;\n    border-bottom: 1px solid #ccc;\n    margin-right: 30px;\n}\n\n.variation {\n    display: none;\n}\n\n.signature-attributes {\n    font-size: 60%;\n    color: #aaa;\n    font-style: italic;\n    font-weight: lighter;\n}\n\nnav\n{\n    display: block;\n    float: right;\n    margin-top: 28px;\n    width: 30%;\n    box-sizing: border-box;\n    border-left: 1px solid #ccc;\n    padding-left: 16px;\n}\n\nnav ul {\n    font-family: 'Lucida Grande', 'Lucida Sans Unicode', arial, sans-serif;\n    font-size: 100%;\n    line-height: 17px;\n    padding: 0;\n    margin: 0;\n    list-style-type: none;\n}\n\nnav ul a, nav ul a:visited, nav ul a:active {\n    font-family: Consolas, Monaco, 'Andale Mono', monospace;\n    line-height: 18px;\n    color: #4D4E53;\n}\n\nnav h3 {\n    margin-top: 12px;\n}\n\nnav li {\n    margin-top: 6px;\n}\n\nfooter {\n    display: block;\n    padding: 6px;\n    margin-top: 12px;\n    font-style: italic;\n    font-size: 90%;\n}\n\nh1, h2, h3, h4 {\n    font-weight: 200;\n    margin: 0;\n}\n\nh1\n{\n    font-family: 'Open Sans Light', sans-serif;\n    font-size: 48px;\n    letter-spacing: -2px;\n    margin: 12px 24px 20px;\n}\n\nh2, h3.subsection-title\n{\n    font-size: 30px;\n    font-weight: 700;\n    letter-spacing: -1px;\n    margin-bottom: 12px;\n}\n\nh3\n{\n    font-size: 24px;\n    letter-spacing: -0.5px;\n    margin-bottom: 12px;\n}\n\nh4\n{\n    font-size: 18px;\n    letter-spacing: -0.33px;\n    margin-bottom: 12px;\n    color: #4d4e53;\n}\n\nh5, .container-overview .subsection-title\n{\n    font-size: 120%;\n    font-weight: bold;\n    letter-spacing: -0.01em;\n    margin: 8px 0 3px 0;\n}\n\nh6\n{\n    font-size: 100%;\n    letter-spacing: -0.01em;\n    margin: 6px 0 3px 0;\n    font-style: italic;\n}\n\ntable\n{\n    border-spacing: 0;\n    border: 0;\n    border-collapse: collapse;\n}\n\ntd, th\n{\n    border: 1px solid #ddd;\n    margin: 0px;\n    text-align: left;\n    vertical-align: top;\n    padding: 4px 6px;\n    display: table-cell;\n}\n\nthead tr\n{\n    background-color: #ddd;\n    font-weight: bold;\n}\n\nth { border-right: 1px solid #aaa; }\ntr > th:last-child { border-right: 1px solid #ddd; }\n\n.ancestors { color: #999; }\n.ancestors a\n{\n    color: #999 !important;\n    text-decoration: none;\n}\n\n.clear\n{\n    clear: both;\n}\n\n.important\n{\n    font-weight: bold;\n    color: #950B02;\n}\n\n.yes-def {\n    text-indent: -1000px;\n}\n\n.type-signature {\n    color: #aaa;\n}\n\n.name, .signature {\n    font-family: Consolas, Monaco, 'Andale Mono', monospace;\n}\n\n.details { margin-top: 14px; border-left: 2px solid #DDD; }\n.details dt { width: 120px; float: left; padding-left: 10px;  padding-top: 6px; }\n.details dd { margin-left: 70px; }\n.details ul { margin: 0; }\n.details ul { list-style-type: none; }\n.details li { margin-left: 30px; padding-top: 6px; }\n.details pre.prettyprint { margin: 0 }\n.details .object-value { padding-top: 0; }\n\n.description {\n    margin-bottom: 1em;\n    margin-top: 1em;\n}\n\n.code-caption\n{\n    font-style: italic;\n    font-size: 107%;\n    margin: 0;\n}\n\n.prettyprint\n{\n    border: 1px solid #ddd;\n    width: 80%;\n    overflow: auto;\n}\n\n.prettyprint.source {\n    width: inherit;\n}\n\n.prettyprint code\n{\n    font-size: 100%;\n    line-height: 18px;\n    display: block;\n    padding: 4px 12px;\n    margin: 0;\n    background-color: #fff;\n    color: #4D4E53;\n}\n\n.prettyprint code span.line\n{\n  display: inline-block;\n}\n\n.prettyprint.linenums\n{\n  padding-left: 70px;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n}\n\n.prettyprint.linenums ol\n{\n  padding-left: 0;\n}\n\n.prettyprint.linenums li\n{\n  border-left: 3px #ddd solid;\n}\n\n.prettyprint.linenums li.selected,\n.prettyprint.linenums li.selected *\n{\n  background-color: lightyellow;\n}\n\n.prettyprint.linenums li *\n{\n  -webkit-user-select: text;\n  -moz-user-select: text;\n  -ms-user-select: text;\n  user-select: text;\n}\n\n.params .name, .props .name, .name code {\n    color: #4D4E53;\n    font-family: Consolas, Monaco, 'Andale Mono', monospace;\n    font-size: 100%;\n}\n\n.params td.description > p:first-child,\n.props td.description > p:first-child\n{\n    margin-top: 0;\n    padding-top: 0;\n}\n\n.params td.description > p:last-child,\n.props td.description > p:last-child\n{\n    margin-bottom: 0;\n    padding-bottom: 0;\n}\n\n.disabled {\n    color: #454545;\n}\n"
  },
  {
    "path": "doc/styles/prettify-jsdoc.css",
    "content": "/* JSDoc prettify.js theme */\n\n/* plain text */\n.pln {\n  color: #000000;\n  font-weight: normal;\n  font-style: normal;\n}\n\n/* string content */\n.str {\n  color: #006400;\n  font-weight: normal;\n  font-style: normal;\n}\n\n/* a keyword */\n.kwd {\n  color: #000000;\n  font-weight: bold;\n  font-style: normal;\n}\n\n/* a comment */\n.com {\n  font-weight: normal;\n  font-style: italic;\n}\n\n/* a type name */\n.typ {\n  color: #000000;\n  font-weight: normal;\n  font-style: normal;\n}\n\n/* a literal value */\n.lit {\n  color: #006400;\n  font-weight: normal;\n  font-style: normal;\n}\n\n/* punctuation */\n.pun {\n  color: #000000;\n  font-weight: bold;\n  font-style: normal;\n}\n\n/* lisp open bracket */\n.opn {\n  color: #000000;\n  font-weight: bold;\n  font-style: normal;\n}\n\n/* lisp close bracket */\n.clo {\n  color: #000000;\n  font-weight: bold;\n  font-style: normal;\n}\n\n/* a markup tag name */\n.tag {\n  color: #006400;\n  font-weight: normal;\n  font-style: normal;\n}\n\n/* a markup attribute name */\n.atn {\n  color: #006400;\n  font-weight: normal;\n  font-style: normal;\n}\n\n/* a markup attribute value */\n.atv {\n  color: #006400;\n  font-weight: normal;\n  font-style: normal;\n}\n\n/* a declaration */\n.dec {\n  color: #000000;\n  font-weight: bold;\n  font-style: normal;\n}\n\n/* a variable name */\n.var {\n  color: #000000;\n  font-weight: normal;\n  font-style: normal;\n}\n\n/* a function name */\n.fun {\n  color: #000000;\n  font-weight: bold;\n  font-style: normal;\n}\n\n/* Specify class=linenums on a pre to get line numbering */\nol.linenums {\n  margin-top: 0;\n  margin-bottom: 0;\n}\n"
  },
  {
    "path": "doc/styles/prettify-tomorrow.css",
    "content": "/* Tomorrow Theme */\n/* Original theme - https://github.com/chriskempson/tomorrow-theme */\n/* Pretty printing styles. Used with prettify.js. */\n/* SPAN elements with the classes below are added by prettyprint. */\n/* plain text */\n.pln {\n  color: #4d4d4c; }\n\n@media screen {\n  /* string content */\n  .str {\n    color: #718c00; }\n\n  /* a keyword */\n  .kwd {\n    color: #8959a8; }\n\n  /* a comment */\n  .com {\n    color: #8e908c; }\n\n  /* a type name */\n  .typ {\n    color: #4271ae; }\n\n  /* a literal value */\n  .lit {\n    color: #f5871f; }\n\n  /* punctuation */\n  .pun {\n    color: #4d4d4c; }\n\n  /* lisp open bracket */\n  .opn {\n    color: #4d4d4c; }\n\n  /* lisp close bracket */\n  .clo {\n    color: #4d4d4c; }\n\n  /* a markup tag name */\n  .tag {\n    color: #c82829; }\n\n  /* a markup attribute name */\n  .atn {\n    color: #f5871f; }\n\n  /* a markup attribute value */\n  .atv {\n    color: #3e999f; }\n\n  /* a declaration */\n  .dec {\n    color: #f5871f; }\n\n  /* a variable name */\n  .var {\n    color: #c82829; }\n\n  /* a function name */\n  .fun {\n    color: #4271ae; } }\n/* Use higher contrast and text-weight for printable form. */\n@media print, projection {\n  .str {\n    color: #060; }\n\n  .kwd {\n    color: #006;\n    font-weight: bold; }\n\n  .com {\n    color: #600;\n    font-style: italic; }\n\n  .typ {\n    color: #404;\n    font-weight: bold; }\n\n  .lit {\n    color: #044; }\n\n  .pun, .opn, .clo {\n    color: #440; }\n\n  .tag {\n    color: #006;\n    font-weight: bold; }\n\n  .atn {\n    color: #404; }\n\n  .atv {\n    color: #060; } }\n/* Style */\n/*\npre.prettyprint {\n  background: white;\n  font-family: Consolas, Monaco, 'Andale Mono', monospace;\n  font-size: 12px;\n  line-height: 1.5;\n  border: 1px solid #ccc;\n  padding: 10px; }\n*/\n\n/* Specify class=linenums on a pre to get line numbering */\nol.linenums {\n  margin-top: 0;\n  margin-bottom: 0; }\n\n/* IE indents via margin-left */\nli.L0,\nli.L1,\nli.L2,\nli.L3,\nli.L4,\nli.L5,\nli.L6,\nli.L7,\nli.L8,\nli.L9 {\n  /* */ }\n\n/* Alternate shading for lines */\nli.L1,\nli.L3,\nli.L5,\nli.L7,\nli.L9 {\n  /* */ }\n"
  },
  {
    "path": "kbw.countdown.jquery.json",
    "content": "{\n\t\"name\": \"kbw.countdown\",\n\t\"title\": \"jQuery Countdown\",\n\t\"description\": \"This plugin sets a div or span to show a countdown to a given time. * Standard or compact formats, or create your own layout. * Decide which periods to show. * Count up from a date/time instead. * Cater for timezone differences and synchronise with server time. * Over 50 localisations.\",\n\t\"keywords\": [\n\t\t\"countdown\",\n\t\t\"i18n\",\n\t\t\"timer\",\n\t\t\"timezone\",\n\t\t\"ui\"\n\t],\n\t\"version\": \"2.1.0\",\n\t\"author\": {\n\t\t\"name\": \"Keith Wood\",\n\t\t\"email\": \"wood.keith@optusnet.com.au\",\n\t\t\"url\": \"http://keith-wood.name/\"\n\t},\n\t\"licenses\": [\n\t\t{\n\t\t\t\"type\": \"MIT\",\n\t\t\t\"url\": \"http://keith-wood.name/licence.html\"\n\t\t}\n\t],\n\t\"bugs\": \"https://github.com/kbwood/countdown/issues\",\n\t\"homepage\": \"http://keith-wood.name/countdown.html\",\n\t\"docs\": \"http://keith-wood.name/countdownRef.html\",\n\t\"download\": \"http://keith-wood.name/countdown.html\",\n\t\"dependencies\": {\n\t\t\"jquery\": \">=1.4\"\n\t}\n}"
  },
  {
    "path": "package.json",
    "content": "{\n\t\"name\": \"kbw-countdown\",\n\t\"version\": \"2.1.0\",\n\t\"license\" : \"MIT\",\n\t\"dependencies\": {},\n\t\"devDependencies\": {\n\t\t\"grunt\": \"~0.4.2\",\n\t\t\"grunt-contrib-clean\": \"~0.5.0\",\n\t\t\"grunt-contrib-copy\": \"~1.0.0\",\n\t\t\"grunt-contrib-jshint\": \"~0.8.0\",\n\t\t\"grunt-contrib-qunit\": \"~1.2.0\",\n\t\t\"grunt-contrib-uglify\": \"~0.4.0\",\n\t\t\"grunt-jsdoc\": \"~2.1.0\",\n\t\t\"grunt-qunit-istanbul\": \"~0.6.0\",\n\t\t\"grunt-text-replace\": \"~0.4.0\",\n\t\t\"grunt-zip\": \"~0.17.1\",\n\t\t\"matchdep\": \"~0.3.0\"\n\t},\n\t\"engines\": {\n\t\t\"node\": \">=0.8.0\"\n\t},\n\t\"repository\": {\n\t\t\"type\": \"git\",\n\t\t\"url\": \"https://github.com/kbwood/countdown.git\"\n\t}\n}\n"
  },
  {
    "path": "src/css/jquery.countdown.css",
    "content": "/* jQuery Countdown styles 2.0.0. */\n.is-countdown {\n\tborder: 1px solid #ccc;\n\tbackground-color: #eee;\n}\n.countdown-rtl {\n\tdirection: rtl;\n}\n.countdown-holding span {\n\tcolor: #888;\n}\n.countdown-row {\n\tclear: both;\n\twidth: 100%;\n\tpadding: 0px 2px;\n\ttext-align: center;\n}\n.countdown-show1 .countdown-section {\n\twidth: 98%;\n}\n.countdown-show2 .countdown-section {\n\twidth: 48%;\n}\n.countdown-show3 .countdown-section {\n\twidth: 32.5%;\n}\n.countdown-show4 .countdown-section {\n\twidth: 24.5%;\n}\n.countdown-show5 .countdown-section {\n\twidth: 19.5%;\n}\n.countdown-show6 .countdown-section {\n\twidth: 16.25%;\n}\n.countdown-show7 .countdown-section {\n\twidth: 14%;\n}\n.countdown-section {\n\tdisplay: block;\n\tfloat: left;\n\tfont-size: 75%;\n\ttext-align: center;\n}\n.countdown-amount {\n    font-size: 200%;\n}\n.countdown-period {\n    display: block;\n}\n.countdown-descr {\n\tdisplay: block;\n\twidth: 100%;\n}\n"
  },
  {
    "path": "src/index.html",
    "content": "﻿<!DOCTYPE html>\n<html>\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\">\n<title>jQuery Countdown</title>\n<link rel=\"stylesheet\" href=\"css/jquery.countdown.css\">\n<style type=\"text/css\">\n#defaultCountdown { width: 240px; height: 45px; }\n</style>\n<script src=\"bower_components/jquery/dist/jquery.min.js\"></script>\n<script src=\"bower_components/kbw-plugin/dist/js/jquery.plugin.min.js\"></script>\n<script src=\"js/jquery.countdown.js\"></script>\n<script>\n$(function () {\n\tvar austDay = new Date();\n\taustDay = new Date(austDay.getFullYear() + 1, 1 - 1, 26);\n\t$('#defaultCountdown').countdown({until: austDay});\n\t$('#year').text(austDay.getFullYear());\n});\n</script>\n</head>\n<body>\n<h1>jQuery Countdown Basics</h1>\n<p>This page demonstrates the very basics of the\n\t<a href=\"http://keith-wood.name/countdown.html\">jQuery Countdown plugin</a>.\n\tIt contains the minimum requirements for using the plugin and\n\tcan be used as the basis for your own experimentation.</p>\n<p>For more detail see the <a href=\"http://keith-wood.name/countdownRef.html\">documentation reference</a> page.</p>\n<p>Counting down to 26 January <span id=\"year\">2014</span>.</p>\n<div id=\"defaultCountdown\"></div>\n<dl>\n\t<dt>Github</dt><dd><a href=\"https://github.com/kbwood/countdown\">https://github.com/kbwood/countdown</a></dd>\n\t<dt>Bower</dt><dd>kbw-countdown</dd>\n</dl>\n</body>\n</html>\n"
  },
  {
    "path": "src/js/jquery.countdown-ar.js",
    "content": "/* http://keith-wood.name/countdown.html\n   Arabic (عربي) initialisation for the jQuery countdown extension\n   Translated by Talal Al Asmari (talal@psdgroups.com), April 2009. */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.ar = {\n\t\tlabels: ['سنوات','أشهر','أسابيع','أيام','ساعات','دقائق','ثواني'],\n\t\tlabels1: ['سنة','شهر','أسبوع','يوم','ساعة','دقيقة','ثانية'],\n\t\tcompactLabels: ['س','ش','أ','ي'],\n\t\twhichLabels: null,\n\t\tdigits: ['٠','١','٢','٣','٤','٥','٦','٧','٨','٩'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: true\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.ar);\n})(jQuery);\n"
  },
  {
    "path": "src/js/jquery.countdown-bg.js",
    "content": "/* http://keith-wood.name/countdown.html\n * Bulgarian initialisation for the jQuery countdown extension\n * Written by Manol Trendafilov manol@rastermania.com (2010) */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.bg = {\n\t\tlabels: ['Години','Месеца','Седмица','Дни','Часа','Минути','Секунди'],\n\t\tlabels1: ['Година','Месец','Седмица','Ден','Час','Минута','Секунда'],\n\t\tcompactLabels: ['l','m','n','d'],\n\t\tcompactLabels1: ['g','m','n','d'],\n\t\twhichLabels: null,\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.bg);\n})(jQuery);\n"
  },
  {
    "path": "src/js/jquery.countdown-bn.js",
    "content": "/* http://keith-wood.name/countdown.html\n * Bengali/Bangla initialisation for the jQuery countdown extension\n * Written by Mohammed Tajuddin (tajuddin@chittagong-it.com) Jan 2011. */\n(function($) {\n\t'use strict';\n    $.countdown.regionalOptions.bn = {\n        labels: ['বছর','মাস','সপ্তাহ','দিন','ঘন্টা','মিনিট','সেকেন্ড'],\n        labels1: ['বছর','মাস','সপ্তাহ','দিন','ঘন্টা','মিনিট','সেকেন্ড'],\n        compactLabels: ['ব','মা','স','দি'],\n        whichLabels: null,\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n        timeSeparator: ':',\n\t\tisRTL: false\n    };\n    $.countdown.setDefaults($.countdown.regionalOptions.bn);\n})(jQuery);"
  },
  {
    "path": "src/js/jquery.countdown-bs.js",
    "content": "/* http://keith-wood.name/countdown.html\n * Bosnian Latin initialisation for the jQuery countdown extension\n * Written by Miralem Mehic miralem@mehic.info (2011) */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.bs = {\n\t\tlabels: ['Godina','Mjeseci','Sedmica','Dana','Sati','Minuta','Sekundi'],\n\t\tlabels1: ['Godina','Mjesec','Sedmica','Dan','Sat','Minuta','Sekunda'],\n\t\tlabels2: ['Godine','Mjeseca','Sedmica','Dana','Sata','Minute','Sekunde'],\n\t\tcompactLabels: ['g','m','t','d'],\n\t\twhichLabels: function(amount) {\n\t\t\treturn (amount === 1 ? 1 : (amount >= 2 && amount <= 4 ? 2 : 0));\n\t\t},\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.bs);\n})(jQuery);\n"
  },
  {
    "path": "src/js/jquery.countdown-ca.js",
    "content": "/* http://keith-wood.name/countdown.html\n   Catalan initialisation for the jQuery countdown extension\n   Written by Amanida Media www.amanidamedia.com (2010) */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.ca = {\n\t\tlabels: ['Anys','Mesos','Setmanes','Dies','Hores','Minuts','Segons'],\n\t\tlabels1: ['Anys','Mesos','Setmanes','Dies','Hores','Minuts','Segons'],\n\t\tcompactLabels: ['a','m','s','g'],\n\t\twhichLabels: null,\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.ca);\n})(jQuery);\n"
  },
  {
    "path": "src/js/jquery.countdown-cs.js",
    "content": "/* http://keith-wood.name/countdown.html\n * Czech initialisation for the jQuery countdown extension\n * Written by Roman Chlebec (creamd@c64.sk) (2008) */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.cs = {\n\t\tlabels: ['Roků','Měsíců','Týdnů','Dní','Hodin','Minut','Sekund'],\n\t\tlabels1: ['Rok','Měsíc','Týden','Den','Hodina','Minuta','Sekunda'],\n\t\tlabels2: ['Roky','Měsíce','Týdny','Dny','Hodiny','Minuty','Sekundy'],\n\t\tcompactLabels: ['r','m','t','d'],\n\t\twhichLabels: function(amount) {\n\t\t\treturn (amount === 1 ? 1 : (amount >= 2 && amount <= 4 ? 2 : 0));\n\t\t},\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.cs);\n})(jQuery);\n"
  },
  {
    "path": "src/js/jquery.countdown-cy.js",
    "content": "/* http://keith-wood.name/countdown.html\r   Welsh initialisation for the jQuery countdown extension\r   Written by Gareth Jones | http://garethvjones.com | October 2011. */\r(function($) {\r\t'use strict';\r\t$.countdown.regionalOptions.cy = {\r\t\tlabels: ['Blynyddoedd','Mis','Wythnosau','Diwrnodau','Oriau','Munudau','Eiliadau'],\r\t\tlabels1: ['Blwyddyn','Mis','Wythnos','Diwrnod','Awr','Munud','Eiliad'],\r\t\tcompactLabels: ['b','m','w','d'],\r\t\twhichLabels: null,\r\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\r\t\ttimeSeparator: ':',\r\n\t\tisRTL: false\r\t};\r\t$.countdown.setDefaults($.countdown.regionalOptions.cy);\r})(jQuery);\r"
  },
  {
    "path": "src/js/jquery.countdown-da.js",
    "content": "/* http://keith-wood.name/countdown.html\n   Danish initialisation for the jQuery countdown extension\n   Written by Buch (admin@buch90.dk). */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.da = {\n\t\tlabels: ['År','Måneder','Uger','Dage','Timer','Minutter','Sekunder'],\n\t\tlabels1: ['År','Måned','Uge','Dag','Time','Minut','Sekund'],\n\t\tcompactLabels: ['Å','M','U','D'],\n\t\twhichLabels: null,\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.da);\n})(jQuery);\n"
  },
  {
    "path": "src/js/jquery.countdown-de.js",
    "content": "/* http://keith-wood.name/countdown.html\n   German initialisation for the jQuery countdown extension\n   Written by Samuel Wulf. */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.de = {\n\t\tlabels: ['Jahre','Monate','Wochen','Tage','Stunden','Minuten','Sekunden'],\n\t\tlabels1: ['Jahr','Monat','Woche','Tag','Stunde','Minute','Sekunde'],\n\t\tcompactLabels: ['J','M','W','T'],\n\t\twhichLabels: null,\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.de);\n})(jQuery);\n"
  },
  {
    "path": "src/js/jquery.countdown-el.js",
    "content": "/* http://keith-wood.name/countdown.html\n   Greek initialisation for the jQuery countdown extension\n   Written by Philip. */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.el = {\n\t\tlabels: ['Χρόνια','Μήνες','Εβδομάδες','Μέρες','Ώρες','Λεπτά','Δευτερόλεπτα'],\n\t\tlabels1: ['Χρόνος','Μήνας','Εβδομάδα','Ημέρα','Ώρα','Λεπτό','Δευτερόλεπτο'],\n\t\tcompactLabels: ['Χρ.','Μην.','Εβδ.','Ημ.'],\n\t\twhichLabels: null,\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.el);\n})(jQuery);"
  },
  {
    "path": "src/js/jquery.countdown-es.js",
    "content": "/* http://keith-wood.name/countdown.html\n * Spanish initialisation for the jQuery countdown extension\n * Written by Sergio Carracedo Martinez webmaster@neodisenoweb.com (2008) */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.es = {\n\t\tlabels: ['Años','Meses','Semanas','Días','Horas','Minutos','Segundos'],\n\t\tlabels1: ['Año','Mes','Semana','Día','Hora','Minuto','Segundo'],\n\t\tcompactLabels: ['a','m','s','d'],\n\t\twhichLabels: null,\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.es);\n})(jQuery);\n"
  },
  {
    "path": "src/js/jquery.countdown-et.js",
    "content": "/* http://keith-wood.name/countdown.html\n   Estonian initialisation for the jQuery countdown extension\n   Written by Helmer <helmer{at}city.ee> */\n(function($) {\n\t'use strict';\n    $.countdown.regionalOptions.et = {\n        labels: ['Aastat','Kuud','Nädalat','Päeva','Tundi','Minutit','Sekundit'],\n        labels1: ['Aasta','Kuu','Nädal','Päev','Tund','Minut','Sekund'],\n        compactLabels: ['a','k','n','p'],\n        whichLabels: null,\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n        timeSeparator: ':',\n\t\tisRTL: false\n\t};\n    $.countdown.setDefaults($.countdown.regionalOptions.et);\n})(jQuery);\n"
  },
  {
    "path": "src/js/jquery.countdown-fa.js",
    "content": "/* http://keith-wood.name/countdown.html\n   Persian (فارسی) initialisation for the jQuery countdown extension\n   Written by Alireza Ziaie (ziai@magfa.com) Oct 2008.\n   Digits corrected by Hamed Ramezanian Feb 2013. */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.fa = {\n\t\tlabels: ['سال','ماه','هفته','روز','ساعت','دقیقه','ثانیه'],\n\t\tlabels1: ['سال','ماه','هفته','روز','ساعت','دقیقه','ثانیه'],\n\t\tcompactLabels: ['س','م','ه','ر'],\n\t\twhichLabels: null,\n\t\tdigits: ['۰','۱','۲','۳','۴','۵','۶','۷','۸','۹'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: true\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.fa);\n})(jQuery);\n"
  },
  {
    "path": "src/js/jquery.countdown-fi.js",
    "content": "/* http://keith-wood.name/countdown.html\n   Finnish initialisation for the jQuery countdown extension\n   Written by Kalle Vänskä and Juha Suni (juhis.suni@gmail.com). Corrected by Olli. */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.fi = {\n\t\tlabels: ['vuotta','kuukautta','viikkoa','päivää','tuntia','minuuttia','sekuntia'],\n\t\tlabels1: ['vuosi','kuukausi','viikko','päivä','tunti','minuutti','sekunti'],\n\t\tcompactLabels: ['v','kk','vk','pv'],\n\t\twhichLabels: null,\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.fi);\n})(jQuery);"
  },
  {
    "path": "src/js/jquery.countdown-fo.js",
    "content": "/* http://keith-wood.name/countdown.html\n   Faroese initialisation for the jQuery countdown extension\n   Written by Kasper Friis Christensen (kasper@friischristensen.com). */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.fo = {\n\t\tlabels: ['Ár','Mánaðir','Vikur','Dagar','Tímar','Minuttir','Sekund'],\n\t\tlabels1: ['Ár','Mánaður','Vika','Dagur','Tími','Minuttur','Sekund'],\n\t\tcompactLabels: ['Á','M','V','D'],\n\t\twhichLabels: null,\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.fo);\n})(jQuery);\n"
  },
  {
    "path": "src/js/jquery.countdown-fr.js",
    "content": "/* http://keith-wood.name/countdown.html\n   French initialisation for the jQuery countdown extension\n   Written by Keith Wood (wood.keith{at}optusnet.com.au) Jan 2008. */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.fr = {\n\t\tlabels: ['Années','Mois','Semaines','Jours','Heures','Minutes','Secondes'],\n\t\tlabels1: ['Année','Mois','Semaine','Jour','Heure','Minute','Seconde'],\n\t\tcompactLabels: ['a','m','s','j'],\n\t\twhichLabels: function(amount) {\n            return (amount > 1 ? 0 : 1);\n        },\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.fr);\n})(jQuery);\n"
  },
  {
    "path": "src/js/jquery.countdown-gl.js",
    "content": "/* http://keith-wood.name/countdown.html\n * Galician initialisation for the jQuery countdown extension\n * Written by Moncho Pena ramon.pena.rodriguez@gmail.com (2009) and Angel Farrapeira */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.gl = {\n\t\tlabels: ['Anos','Meses','Semanas','Días','Horas','Minutos','Segundos'],\n\t\tlabels1: ['Ano','Mes','Semana','Día','Hora','Minuto','Segundo'],\n\t\tcompactLabels: ['a','m','s','g'],\n\t\twhichLabels: null,\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.gl);\n})(jQuery);"
  },
  {
    "path": "src/js/jquery.countdown-gu.js",
    "content": "/* http://keith-wood.name/countdown.html\n * Gujarati initialization for the jQuery countdown extension\n * Written by Sahil Jariwala jariwala.sahil@gmail.com (2012) */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.gu = {\n\t\tlabels: ['વર્ષ','મહિનો','અઠવાડિયા','દિવસ','કલાક','મિનિટ','સેકન્ડ'],\n\t\tlabels1: ['વર્ષ','મહિનો','અઠવાડિયા','દિવસ','કલાક','મિનિટ','સેકન્ડ'],\n\t\tcompactLabels: ['વ','મ','અ','દિ'],\n\t\twhichLabels: null,\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.gu);\n})(jQuery);\n"
  },
  {
    "path": "src/js/jquery.countdown-he.js",
    "content": "/* http://keith-wood.name/countdown.html\n * Hebrew initialisation for the jQuery countdown extension\n * Translated by Nir Livne, Dec 2008 */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.he = {\n\t\tlabels: ['שנים','חודשים','שבועות','ימים','שעות','דקות','שניות'],\n\t\tlabels1: ['שנה','חודש','שבוע','יום','שעה','דקה','שנייה'],\n\t\tcompactLabels: ['שנ','ח','שב','י'],\n\t\twhichLabels: null,\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: true\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.he);\n})(jQuery);\n"
  },
  {
    "path": "src/js/jquery.countdown-hr.js",
    "content": "/* http://keith-wood.name/countdown.html\n * Croatian l10n for the jQuery countdown plugin\n * Written by Dejan Broz info@hqfactory.com (2011)\n * Improved by zytzagoo (2014) */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.hr = {\n\t\tlabels: ['Godina','Mjeseci','Tjedana','Dana','Sati','Minuta','Sekundi'], // plurals\n\t\tlabels1: ['Godina','Mjesec','Tjedan','Dan','Sat','Minutu','Sekundu'], // singles\n\t\tlabels2: ['Godine','Mjeseca','Tjedana','Dana','Sata','Minute','Sekunde'], // paucals\n\t\tcompactLabels: ['g','m','t','d'],\n\t\twhichLabels: function(amount){\n\t\t\tamount = parseInt(amount, 10);\n\t\t\tif (amount % 10 === 1 && amount % 100 !== 11) {\n\t\t\t\treturn 1; // singles (/.*1$/ && ! /.*11$/)\n\t\t\t}\n\t\t\tif (amount % 10 >= 2 && amount % 10 <= 4 && (amount % 100 < 10 || amount % 100 >= 20)) {\n\t\t\t\treturn 2; // paucals (/.*[234]$/ && ! /.*1[234]$/\n\t\t\t}\n\t\t\treturn 0; // default plural (most common case)\n\t\t},\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.hr);\n})(jQuery);\n"
  },
  {
    "path": "src/js/jquery.countdown-hu.js",
    "content": "/* http://keith-wood.name/countdown.html\n * Hungarian initialisation for the jQuery countdown extension\n * Written by Edmond L. (webmond@gmail.com). */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.hu = {\n\t\tlabels: ['Év','Hónap','Hét','Nap','Óra','Perc','Másodperc'],\n\t\tlabels1: ['Év','Hónap','Hét','Nap','Óra','Perc','Másodperc'],\n\t\tcompactLabels: ['É','H','Hé','N'],\n\t\twhichLabels: null,\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.hu);\n})(jQuery);\n"
  },
  {
    "path": "src/js/jquery.countdown-hy.js",
    "content": "/* http://keith-wood.name/countdown.html\n * Armenian initialisation for the jQuery countdown extension\n * Written by Artur Martirosyan. (artur{at}zoom.am) October 2011. */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.hy = {\n\t\tlabels: ['Տարի','Ամիս','Շաբաթ','Օր','Ժամ','Րոպե','Վարկյան'],\n\t\tlabels1: ['Տարի','Ամիս','Շաբաթ','Օր','Ժամ','Րոպե','Վարկյան'],\n\t\tcompactLabels: ['տ','ա','շ','օ'], \n\t\twhichLabels: null,\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.hy);\n})(jQuery);\n"
  },
  {
    "path": "src/js/jquery.countdown-id.js",
    "content": "/* http://keith-wood.name/countdown.html\n   Indonesian initialisation for the jQuery countdown extension\n   Written by Erwin Yonathan Jan 2009. */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.id = {\n\t\tlabels: ['tahun','bulan','minggu','hari','jam','menit','detik'],\n\t\tlabels1: ['tahun','bulan','minggu','hari','jam','menit','detik'],\n\t\tcompactLabels: ['t','b','m','h'],\n\t\twhichLabels: null,\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.id);\n})(jQuery);\n"
  },
  {
    "path": "src/js/jquery.countdown-is.js",
    "content": "/* http://keith-wood.name/countdown.html\n   Icelandic initialisation for the jQuery countdown extension\n   Written by Róbert K. L. */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.is = {\n\t\tlabels: ['Ár','Mánuðir','Vikur','Dagar','Klukkustundir','Mínútur','Sekúndur'],\n\t\tlabels1: ['Ár','Mánuður','Vika','Dagur','Klukkustund','Mínúta','Sekúnda'],\n\t\tcompactLabels: ['ár.','mán.','vik.','dag.','klst.','mín.','sek.'],\n\t\twhichLabels: null,\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.is);\n})(jQuery);"
  },
  {
    "path": "src/js/jquery.countdown-it.js",
    "content": "/* http://keith-wood.name/countdown.html\n * Italian initialisation for the jQuery countdown extension\n * Written by Davide Bellettini and Roberto Chiaveri Feb 2008. */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.it = {\n\t\tlabels: ['Anni','Mesi','Settimane','Giorni','Ore','Minuti','Secondi'],\n\t\tlabels1: ['Anno','Mese','Settimana','Giorno','Ora','Minuto','Secondo'],\n\t\tcompactLabels: ['a','m','s','g'],\n\t\twhichLabels: null,\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.it);\n})(jQuery);\n"
  },
  {
    "path": "src/js/jquery.countdown-ja.js",
    "content": "/* http://keith-wood.name/countdown.html\n   Japanese initialisation for the jQuery countdown extension\n   Written by Ken Ishimoto (ken@ksroom.com) Aug 2009. */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.ja = {\n\t\tlabels: ['年','月','週','日','時','分','秒'],\n\t\tlabels1: ['年','月','週','日','時','分','秒'],\n\t\tcompactLabels: ['年','月','週','日'],\n\t\twhichLabels: null,\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.ja);\n})(jQuery);\n"
  },
  {
    "path": "src/js/jquery.countdown-kk.js",
    "content": "/* http://keith-wood.name/countdown.html\n * Kazakh initialisation for the jQuery countdown extension\n * Written by Veaceslav Grimalschi grimalschi@yandex.ru (2019) */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions['kk'] = {\n        labels: ['Жыл','Ай','Апта','Күн','Сағат','Минут','Секунд'],\n        labels1: ['Жыл','Ай','Апта','Күн','Сағат','Минут','Секунд'],\n\t\tcompactLabels: ['ж','а','а','к'],\n\t\twhichLabels: null,\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions['kk']);\n})(jQuery);\n"
  },
  {
    "path": "src/js/jquery.countdown-kn.js",
    "content": "/* http://keith-wood.name/countdown.html\n * Kannada initialization for the jQuery countdown extension\n * Written by Guru Chaturvedi guru@gangarasa.com (2011) */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.kn = {\n\t\tlabels: ['ವರ್ಷಗಳು','ತಿಂಗಳು','ವಾರಗಳು','ದಿನಗಳು','ಘಂಟೆಗಳು','ನಿಮಿಷಗಳು','ಕ್ಷಣಗಳು'],\n\t\tlabels1: ['ವರ್ಷ','ತಿಂಗಳು','ವಾರ','ದಿನ','ಘಂಟೆ','ನಿಮಿಷ','ಕ್ಷಣ'],\n\t\tcompactLabels: ['ವ','ತಿ','ವಾ','ದಿ'],\n\t\twhichLabels: null,\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.kn);\n})(jQuery);\n"
  },
  {
    "path": "src/js/jquery.countdown-ko.js",
    "content": "/* http://keith-wood.name/countdown.html\n   Korean initialisation for the jQuery countdown extension\n   Written by Ryan Yu (ryanyu79@gmail.com). */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.ko = {\n\t\tlabels: ['년','월','주','일','시','분','초'],\n\t\tlabels1: ['년','월','주','일','시','분','초'],\n\t\tcompactLabels: ['년','월','주','일'],\n\t\tcompactLabels1: ['년','월','주','일'],\n\t\twhichLabels: null,\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.ko);\n})(jQuery);\n"
  },
  {
    "path": "src/js/jquery.countdown-lt.js",
    "content": "/* http://keith-wood.name/countdown.html\n * Lithuanian localisation for the jQuery countdown extension\n * Written by Moacir P. de Sá Pereira (moacir{at}gmail.com) (2009) */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.lt = {\n\t\tlabels: ['Metų','Mėnesių','Savaičių','Dienų','Valandų','Minučių','Sekundžių'],\n\t\tlabels1: ['Metai','Mėnuo','Savaitė','Diena','Valanda','Minutė','Sekundė'],\n\t\tcompactLabels: ['m','m','s','d'],\n\t\twhichLabels: null,\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.lt);\n})(jQuery);\n"
  },
  {
    "path": "src/js/jquery.countdown-lv.js",
    "content": "/* http://keith-wood.name/countdown.html\n * Latvian initialisation for the jQuery countdown extension\n * Written by Jānis Peisenieks janis.peisenieks@gmail.com (2010) */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.lv = {\n\t\tlabels: ['Gadi','Mēneši','Nedēļas','Dienas','Stundas','Minūtes','Sekundes'],\n\t\tlabels1: ['Gads','Mēnesis','Nedēļa','Diena','Stunda','Minūte','Sekunde'],\n\t\tcompactLabels: ['l','m','n','d'],\n\t\tcompactLabels1: ['g','m','n','d'],\n\t\twhichLabels: null,\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.lv);\n})(jQuery);\n"
  },
  {
    "path": "src/js/jquery.countdown-mk.js",
    "content": "/* http://keith-wood.name/countdown.html\n * Macedonian initialisation for the jQuery countdown extension\n * Written by Gorast Cvetkovski cvetkovski@gorast.com (2016) */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.mk = {\n\t\tlabels: ['Години','Месеци','Недели','Дена','Часа','Минути','Секунди'],\n\t\tlabels1: ['Година','Месец','Недела','Ден','Час','Минута','Секунда'],\n\t\tcompactLabels: ['l','m','n','d'],\n\t\tcompactLabels1: ['g','m','n','d'],\n\t\twhichLabels: null,\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.mk);\n})(jQuery);\n"
  },
  {
    "path": "src/js/jquery.countdown-ml.js",
    "content": "/* http://keith-wood.name/countdown.html\n * Malayalam/(Indian>>Kerala) initialisation for the jQuery countdown extension\n * Written by Harilal.B (harilal1234@gmail.com) Feb 2013. */\n(function($) {\n\t'use strict';\n\t/* jshint -W100 */\n    $.countdown.regionalOptions.ml = {\n        labels: ['വര്‍ഷങ്ങള്‍','മാസങ്ങള്‍','ആഴ്ചകള്‍','ദിവസങ്ങള്‍','മണിക്കൂറുകള്‍','മിനിറ്റുകള്‍','സെക്കന്റുകള്‍'],\n        labels1: ['വര്‍ഷം','മാസം','ആഴ്ച','ദിവസം','മണിക്കൂര്‍','മിനിറ്റ്','സെക്കന്റ്'],\n        compactLabels: ['വ','മ','ആ','ദി'],\n        whichLabels: null,\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n//\t\tdigits: ['൦','൧','൨','൩','൪','൫','൬','൭','൮','൯'],\n        timeSeparator: ':',\n\t\tisRTL: false\n\t};\n    $.countdown.setDefaults($.countdown.regionalOptions.ml);\n})(jQuery);"
  },
  {
    "path": "src/js/jquery.countdown-ms.js",
    "content": "/* http://keith-wood.name/countdown.html\n   Malay initialisation for the jQuery countdown extension\n   Written by Jason Ong (jason{at}portalgroove.com) May 2010. */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.ms = {\n\t\tlabels: ['Tahun','Bulan','Minggu','Hari','Jam','Minit','Saat'],\n\t\tlabels1: ['Tahun','Bulan','Minggu','Hari','Jam','Minit','Saat'],\n\t\tcompactLabels: ['t','b','m','h'],\n\t\twhichLabels: null,\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.ms);\n})(jQuery);\n"
  },
  {
    "path": "src/js/jquery.countdown-my.js",
    "content": "/* http://keith-wood.name/countdown.html\n   Burmese initialisation for the jQuery countdown extension\n   Written by Win Lwin Moe (winnlwinmoe@gmail.com) Dec 2009. */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.my = {\n\t\tlabels: ['နွစ္','လ','ရက္သတဿတပတ္','ရက္','နာရီ','မိနစ္','စကဿကန့္'],\n\t\tlabels1: ['နွစ္','လ','ရက္သတဿတပတ္','ရက္','နာရီ','မိနစ္','စကဿကန့္'],\n\t\tcompactLabels: ['နွစ္','လ','ရက္သတဿတပတ္','ရက္'],\n\t\twhichLabels: null,\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.my);\n})(jQuery);"
  },
  {
    "path": "src/js/jquery.countdown-nb.js",
    "content": "/* http://keith-wood.name/countdown.html\n   Norwegian Bokmål translation\n   Written by Kristian Ravnevand */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.nb = {\n\t\tlabels: ['År','Måneder','Uker','Dager','Timer','Minutter','Sekunder'],\n\t\tlabels1: ['År','Måned','Uke','Dag','Time','Minutt','Sekund'],\n\t\tcompactLabels: ['Å','M','U','D'],\n\t\twhichLabels: null,\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.nb);\n})(jQuery);\n"
  },
  {
    "path": "src/js/jquery.countdown-nl.js",
    "content": "/* http://keith-wood.name/countdown.html\n   Dutch initialisation for the jQuery countdown extension\n   Written by Mathias Bynens <http://mathiasbynens.be/> Mar 2008. */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.nl = {\n\t\tlabels: ['Jaren','Maanden','Weken','Dagen','Uren','Minuten','Seconden'],\n\t\tlabels1: ['Jaar','Maand','Week','Dag','Uur','Minuut','Seconde'],\n\t\tcompactLabels: ['j','m','w','d'],\n\t\twhichLabels: null,\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.nl);\n})(jQuery);\n"
  },
  {
    "path": "src/js/jquery.countdown-pl.js",
    "content": "/* http://keith-wood.name/countdown.html\n * Polish initialisation for the jQuery countdown extension\n * Written by Pawel Lewtak lewtak@gmail.com (2008) */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.pl = {\n\t\tlabels: ['lat','miesięcy','tygodni','dni','godzin','minut','sekund'],\n\t\tlabels1: ['rok','miesiąc','tydzień','dzień','godzina','minuta','sekunda'],\n\t\tlabels2: ['lata','miesiące','tygodnie','dni','godziny','minuty','sekundy'],\n\t\tcompactLabels: ['l','m','t','d'],\n\t\tcompactLabels1: ['r','m','t','d'],\n\t\twhichLabels: function(amount) {\n\t\t\tvar units = amount % 10;\n\t\t\tvar tens = Math.floor((amount % 100) / 10);\n\t\t\treturn (amount === 1 ? 1 : (units >= 2 && units <= 4 && tens !== 1 ? 2 : 0));\n\t\t},\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.pl);\n})(jQuery);\n"
  },
  {
    "path": "src/js/jquery.countdown-pt-BR.js",
    "content": "/* http://keith-wood.name/countdown.html\n   Brazilian initialisation for the jQuery countdown extension\n   Translated by Marcelo Pellicano de Oliveira (pellicano@gmail.com) Feb 2008.\n   and Juan Roldan (juan.roldan[at]relayweb.com.br) Mar 2012. */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions['pt-BR'] = {\n\t\tlabels: ['Anos','Meses','Semanas','Dias','Horas','Minutos','Segundos'],\n\t\tlabels1: ['Ano','Mês','Semana','Dia','Hora','Minuto','Segundo'],\n\t\tcompactLabels: ['a','m','s','d'],\n\t\twhichLabels: null,\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions['pt-BR']);\n})(jQuery);\n"
  },
  {
    "path": "src/js/jquery.countdown-ro.js",
    "content": "/* http://keith-wood.name/countdown.html\n * Romanian initialisation for the jQuery countdown extension\n * Written by Edmond L. (webmond@gmail.com). */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.ro = {\n\t\tlabels: ['Ani','Luni','Saptamani','Zile','Ore','Minute','Secunde'],\n\t\tlabels1: ['An','Luna','Saptamana','Ziua','Ora','Minutul','Secunda'],\n\t\tcompactLabels: ['A','L','S','Z'],\n\t\twhichLabels: null,\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.ro);\n})(jQuery);\n"
  },
  {
    "path": "src/js/jquery.countdown-ru.js",
    "content": "/* http://keith-wood.name/countdown.html\n * Russian initialisation for the jQuery countdown extension\n * Written by Sergey K. (xslade{at}gmail.com) June 2010. */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.ru = {\n\t\tlabels: ['Лет','Месяцев','Недель','Дней','Часов','Минут','Секунд'],\n\t\tlabels1: ['Год','Месяц','Неделя','День','Час','Минута','Секунда'],\n\t\tlabels2: ['Года','Месяца','Недели','Дня','Часа','Минуты','Секунды'],\n\t\tcompactLabels: ['л','м','н','д'],\n\t\tcompactLabels1: ['г','м','н','д'],\n\t\twhichLabels: function(amount) {\n\t\t\tvar units = amount % 10;\n\t\t\tvar tens = Math.floor((amount % 100) / 10);\n\t\t\treturn (amount === 1 ? 1 : (units >= 2 && units <= 4 && tens !== 1 ? 2 :\n\t\t\t\t(units === 1 && tens !== 1 ? 1 : 0)));\n\t\t},\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.ru);\n})(jQuery);"
  },
  {
    "path": "src/js/jquery.countdown-sk.js",
    "content": "/* http://keith-wood.name/countdown.html\n * Slovak initialisation for the jQuery countdown extension\n * Written by Roman Chlebec (creamd@c64.sk) (2008) */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.sk = {\n\t\tlabels: ['Rokov','Mesiacov','Týždňov','Dní','Hodín','Minút','Sekúnd'],\n\t\tlabels1: ['Rok','Mesiac','Týždeň','Deň','Hodina','Minúta','Sekunda'],\n\t\tlabels2: ['Roky','Mesiace','Týždne','Dni','Hodiny','Minúty','Sekundy'],\n\t\tcompactLabels: ['r','m','t','d'],\n\t\twhichLabels: function(amount) {\n\t\t\treturn (amount === 1 ? 1 : (amount >= 2 && amount <= 4 ? 2 : 0));\n\t\t},\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.sk);\n})(jQuery);\n"
  },
  {
    "path": "src/js/jquery.countdown-sl.js",
    "content": "/* http://keith-wood.name/countdown.html\n * Slovenian localisation for the jQuery countdown extension\n * Written by Borut Tomažin (debijan{at}gmail.com) (2011)\n * updated by Jan Zavrl (jan@iuvo.si) (2015) */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.sl = {\n\t\tlabels: ['Let','Mesecev','Tednov','Dni','Ur','Minut','Sekund'], // Plurals\n\t\tlabels1: ['Leto','Mesec','Teden','Dan','Ura','Minuta','Sekunda'], // Singles\n\t\tlabels2: ['Leti','Meseca','Tedna','Dneva','Uri','Minuti','Sekundi'], // Doubles\n\t\tlabels3: ['Leta','Meseci','Tedni','Dnevi','Ure','Minute','Sekunde'], // 3's\n\t\tlabels4: ['Leta','Meseci','Tedni','Dnevi','Ure','Minute','Sekunde'], // 4's\n\t\tcompactLabels: ['l','m','t','d'],\n\t\twhichLabels: function(amount) {\n\t\t\treturn (amount > 4 ? 0 : amount);\n\t\t},\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.sl);\n})(jQuery);\n"
  },
  {
    "path": "src/js/jquery.countdown-sq.js",
    "content": "/* http://keith-wood.name/countdown.html\n   Albanian initialisation for the jQuery countdown extension\n   Written by Erzen Komoni. */\n(function($) {\n\t'use strict';\n    $.countdown.regionalOptions.sq = {\n        labels: ['Vite','Muaj','Javë','Ditë','Orë','Minuta','Sekonda'],\n        labels1: ['Vit','Muaj','Javë','Dit','Orë','Minutë','Sekond'],\n        compactLabels: ['V','M','J','D'],\n        whichLabels: null,\n        digits: ['0','1','2','3','4','5','6','7','8','9'],\n        timeSeparator: ':',\n\t\tisRTL: false\n\t};\n    $.countdown.setDefaults($.countdown.regionalOptions.sq);\n})(jQuery);"
  },
  {
    "path": "src/js/jquery.countdown-sr-SR.js",
    "content": "/* http://keith-wood.name/countdown.html\n * Serbian Latin initialisation for the jQuery countdown extension\n * Written by Predrag Leka lp@lemurcake.com (2010) */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions['sr-SR'] = {\n\t\tlabels: ['Godina','Meseci','Nedelja','Dana','Časova','Minuta','Sekundi'],\n\t\tlabels1: ['Godina','Mesec','Nedelja','Dan','Čas','Minut','Sekunda'],\n\t\tlabels2: ['Godine','Meseca','Nedelje','Dana','Časa','Minuta','Sekunde'],\n\t\tcompactLabels: ['g','m','n','d'],\n\t\twhichLabels: function(amount) {\n\t\t\treturn (amount === 1 ? 1 : (amount >= 2 && amount <= 4 ? 2 : 0));\n\t\t},\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions['sr-SR']);\n})(jQuery);\n"
  },
  {
    "path": "src/js/jquery.countdown-sr.js",
    "content": "/* http://keith-wood.name/countdown.html\n * Serbian Cyrillic initialisation for the jQuery countdown extension\n * Written by Predrag Leka lp@lemurcake.com (2010) */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.sr = {\n\t\tlabels: ['Година','Месеци','Недеља','Дана','Часова','Минута','Секунди'],\n\t\tlabels1: ['Година','месец','Недеља','Дан','Час','Минут','Секунда'],\n\t\tlabels2: ['Године','Месеца','Недеље','Дана','Часа','Минута','Секунде'],\n\t\tcompactLabels: ['г','м','н','д'],\n\t\twhichLabels: function(amount) {\n\t\t\treturn (amount === 1 ? 1 : (amount >= 2 && amount <= 4 ? 2 : 0));\n\t\t},\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.sr);\n})(jQuery);\n"
  },
  {
    "path": "src/js/jquery.countdown-sv.js",
    "content": "/* http://keith-wood.name/countdown.html\n   Swedish initialisation for the jQuery countdown extension\n   Written by Carl (carl@nordenfelt.com). */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.sv = {\n\t\tlabels: ['År','Månader','Veckor','Dagar','Timmar','Minuter','Sekunder'],\n\t\tlabels1: ['År','Månad','Vecka','Dag','Timme','Minut','Sekund'],\n\t\tcompactLabels: ['Å','M','V','D'],\n\t\twhichLabels: null,\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.sv);\n})(jQuery);\n"
  },
  {
    "path": "src/js/jquery.countdown-th.js",
    "content": "/* http://keith-wood.name/countdown.html\n   Thai initialisation for the jQuery countdown extension\n   Written by Pornchai Sakulsrimontri (li_sin_th@yahoo.com). */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.th = {\n\t\tlabels: ['ปี','เดือน','สัปดาห์','วัน','ชั่วโมง','นาที','วินาที'],\n\t\tlabels1: ['ปี','เดือน','สัปดาห์','วัน','ชั่วโมง','นาที','วินาที'],\n\t\tcompactLabels: ['ปี','เดือน','สัปดาห์','วัน'],\n\t\twhichLabels: null,\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.th);\n})(jQuery);\n"
  },
  {
    "path": "src/js/jquery.countdown-tr.js",
    "content": "/* http://keith-wood.name/countdown.html\n* Turkish initialisation for the jQuery countdown extension\n* Written by Bekir Ahmetoğlu (bekir@cerek.com) Aug 2008. */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.tr = {\n\t\tlabels: ['Yıl','Ay','Hafta','Gün','Saat','Dakika','Saniye'],\n\t\tlabels1: ['Yıl','Ay','Hafta','Gün','Saat','Dakika','Saniye'],\n\t\tcompactLabels: ['y','a','h','g'],\n\t\twhichLabels: null,\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.tr);\n})(jQuery);\n"
  },
  {
    "path": "src/js/jquery.countdown-uk.js",
    "content": "/* http://keith-wood.name/countdown.html\n * Ukrainian initialisation for the jQuery countdown extension\n * Written by Goloborodko M misha.gm@gmail.com (2009), corrections by Iгор Kоновал */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.uk = {\n\t\tlabels: ['Років','Місяців','Тижнів','Днів','Годин','Хвилин','Секунд'],\n\t\tlabels1: ['Рік','Місяць','Тиждень','День','Година','Хвилина','Секунда'],\n\t\tlabels2: ['Роки','Місяці','Тижні','Дні','Години','Хвилини','Секунди'],\n\t\tcompactLabels: ['r','m','t','d'],\n\t\twhichLabels: function(amount) {\n\t\t\treturn (amount === 1 ? 1 : (amount >=2 && amount <= 4 ? 2 : 0));\n\t\t},\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.uk);\n})(jQuery);\n"
  },
  {
    "path": "src/js/jquery.countdown-ur.js",
    "content": "/* http://keith-wood.name/countdown.html\n   Urdu (اردو) initialisation for the jQuery countdown extension\n   Translated by Azhar Rasheed (azhar.rasheed19@gmail.com), November 2013. */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.ur = {\n\t\tlabels: ['سال','مہينے','ہفتے','دن','گھنٹے','منٹس','سيکنڑز'],\n\t\tlabels1: ['سال','ماہ','ہفتہ','دن','گھنٹہ','منٹ','سیکنڈز'],\n\t\tcompactLabels: ['(ق)','سینٹ','ایک','J'],\n\t\twhichLabels: null,\n\t\tdigits: ['٠','١','٢','٣','۴','۵','۶','۷','٨','٩'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: true\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.ur);\n})(jQuery);\n"
  },
  {
    "path": "src/js/jquery.countdown-uz.js",
    "content": "/* http://keith-wood.name/countdown.html\n * Uzbek initialisation for the jQuery countdown extension\n * Written by Alisher U. (ulugbekov{at}gmail.com) August 2012. */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.uz = {\n\t\tlabels: ['Yil','Oy','Hafta','Kun','Soat','Daqiqa','Soniya'],\n\t\tlabels1: ['Yil','Oy','Hafta','Kun','Soat','Daqiqa','Soniya'],\n\t\tcompactLabels: ['y','o','h','k'],\n\t\twhichLabels: null,\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.uz);\n})(jQuery);"
  },
  {
    "path": "src/js/jquery.countdown-vi.js",
    "content": "/* http://keith-wood.name/countdown.html\n * Vietnamese initialisation for the jQuery countdown extension\n * Written by Pham Tien Hung phamtienhung@gmail.com (2010) */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions.vi = {\n\t\tlabels: ['Năm','Tháng','Tuần','Ngày','Giờ','Phút','Giây'],\n\t\tlabels1: ['Năm','Tháng','Tuần','Ngày','Giờ','Phút','Giây'],\n\t\tcompactLabels: ['năm','th','tu','ng'],\n\t\twhichLabels: null,\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions.vi);\n})(jQuery);"
  },
  {
    "path": "src/js/jquery.countdown-zh-CN.js",
    "content": "/* http://keith-wood.name/countdown.html\n   Simplified Chinese initialisation for the jQuery countdown extension\n   Written by Cloudream (cloudream@gmail.com). */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions['zh-CN'] = {\n\t\tlabels: ['年','月','周','天','时','分','秒'],\n\t\tlabels1: ['年','月','周','天','时','分','秒'],\n\t\tcompactLabels: ['年','月','周','天'],\n\t\tcompactLabels1: ['年','月','周','天'],\n\t\twhichLabels: null,\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions['zh-CN']);\n})(jQuery);\n"
  },
  {
    "path": "src/js/jquery.countdown-zh-TW.js",
    "content": "/* http://keith-wood.name/countdown.html\n   Traditional Chinese initialisation for the jQuery countdown extension\n   Written by Cloudream (cloudream@gmail.com). */\n(function($) {\n\t'use strict';\n\t$.countdown.regionalOptions['zh-TW'] = {\n\t\tlabels: ['年','月','周','天','時','分','秒'],\n\t\tlabels1: ['年','月','周','天','時','分','秒'],\n\t\tcompactLabels: ['年','月','周','天'],\n\t\tcompactLabels1: ['年','月','周','天'],\n\t\twhichLabels: null,\n\t\tdigits: ['0','1','2','3','4','5','6','7','8','9'],\n\t\ttimeSeparator: ':',\n\t\tisRTL: false\n\t};\n\t$.countdown.setDefaults($.countdown.regionalOptions['zh-TW']);\n})(jQuery);\n"
  },
  {
    "path": "src/js/jquery.countdown.js",
    "content": "/*! http://keith-wood.name/countdown.html\n\tCountdown for jQuery v2.1.0.\n\tWritten by Keith Wood (wood.keith{at}optusnet.com.au) January 2008.\n\tAvailable under the MIT (http://keith-wood.name/licence.html) license. \n\tPlease attribute the author if you use it. */\n\n(function($) { // Hide scope, no $ conflict\n\t'use strict';\n\n\tvar pluginName = 'countdown';\n\n\tvar Y = 0; // Years\n\tvar O = 1; // Months\n\tvar W = 2; // Weeks\n\tvar D = 3; // Days\n\tvar H = 4; // Hours\n\tvar M = 5; // Minutes\n\tvar S = 6; // Seconds\n\n\t/** Create the countdown plugin.\n\t\t<p>Sets an element to show the time remaining until a given instant.</p>\n\t\t<p>Expects HTML like:</p>\n\t\t<pre>&lt;div>&lt;/div></pre>\n\t\t<p>Provide inline configuration like:</p>\n\t\t<pre>&lt;div data-countdown=\"name: 'value', ...\">&lt;/div></pre>\n\t\t@module Countdown\n\t\t@augments JQPlugin\n\t\t@example $(selector).countdown({until: +300}) */\n\t$.JQPlugin.createPlugin({\n\t\n\t\t/** The name of the plugin.\n\t\t\t@default 'countdown' */\n\t\tname: pluginName,\n\n\t\t/** Countdown expiry callback.\n\t\t\tUsed with the {@linkcode module:Countdown~defaultOptions|onExpiry} option and\n\t\t\ttriggered when the countdown expires.\n\t\t\t@global\n\t\t\t@callback CountdownExpiryCallback\n\t\t\t@this <code>Element</code>\n\t\t\t@example onExpiry: function() {\n  alert('Done');\n} */\n\n\t\t/** Countdown server synchronisation callback.\n\t\t\tUsed with the {@linkcode module:Countdown~defaultOptions|serverSync} option and\n\t\t\ttriggered when the countdown is initialised.\n\t\t\t@global\n\t\t\t@callback CountdownServerSyncCallback\n\t\t\t@return {Date} The current date/time on the server as expressed in the local timezone.\n\t\t\t@this <code>$.countdown</code>\n\t\t\t@example serverSync: function() {\n  var time = null;\n  $.ajax({url: 'http://myserver.com/serverTime.php',\n    async: false, dataType: 'text',\n    success: function(text) {\n      time = new Date(text);\n    }, error: function(http, message, exc) {\n      time = new Date();\n  });\n  return time;\n} */\n\t\t\t\n\t\t/** Countdown tick callback.\n\t\t\tUsed with the {@linkcode module:Countdown~defaultOptions|onTick} option and\n\t\t\ttriggered on every {@linkcode module:Countdown~defaultOptions|tickInterval} ticks of the countdown.\n\t\t\t@global\n\t\t\t@callback CountdownTickCallback\n\t\t\t@this <code>Element</code>\n\t\t\t@param {number[]} periods The breakdown by period (years, months, weeks, days,\n\t\t\t\t\thours, minutes, seconds) of the time remaining/passed.\n\t\t\t@example onTick: function(periods) {\n  $('#altTime').text(periods[4] + ':' + twoDigits(periods[5]) +\n    ':' + twoDigits(periods[6]));\n} */\n\n\t\t/** Countdown which labels callback.\n\t\t\tUsed with the {@linkcode module:Countdown~regionalOptions|whichLabels} option and\n\t\t\ttriggered when the countdown is being display to determine which set of labels\n\t\t\t(<code>labels</code>, <code>labels1</code>, ...) are to be used for the current period value.\n\t\t\t@global\n\t\t\t@callback CountdownWhichLabelsCallback\n\t\t\t@param {number} num The current period value.\n\t\t\t@return {number} The suffix for the label set to use, or zero for the default labels.\n\t\t\t@example whichLabels: function(num) {\n  return (num === 1 ? 1 : (num >= 2 && num <= 4 ? 2 : 0));\n} */\n\t\t\t\n\t\t/** Default settings for the plugin.\n\t\t\t@property {Date|number|string} [until] The date/time to count down to, or number of seconds\n\t\t\t\t\t\toffset from now, or string of amounts and units for offset(s) from now:\n\t\t\t\t\t\t'Y' years, 'O' months, 'W' weeks, 'D' days, 'H' hours, 'M' minutes, 'S' seconds.\n\t\t\t\t\t\tOne of <code>until</code> or <code>since</code> must be specified.\n\t\t\t\t\t\tIf both are given <code>since</code> takes precedence.\n\t\t\t@example until: new Date(2013, 12-1, 25, 13, 30)\nuntil: +300\nuntil: '+1O -2D'\n\t\t\t@property {Date|number|string} [since] The date/time to count up from, or number of seconds\n\t\t\t\t\t\toffset from now, or string of amounts and units for offset(s) from now:\n\t\t\t\t\t\t'Y' years, 'O' months, 'W' weeks, 'D' days, 'H' hours, 'M' minutes, 'S' seconds.\n\t\t\t\t\t\tOne of <code>until</code> or <code>since</code> must be specified.\n\t\t\t\t\t\tIf both are given <code>since</code> takes precedence.\n\t\t\t@example since: new Date(2013, 1-1, 1)\nsince: -300\nsince: '-1O +2D'\n\t\t\t@property {number} [timezone=null] The timezone (hours or minutes from GMT) for the target times,\n\t\t\t\t\t\tor <code>null</code> for client local timezone.\n\t\t\t@example timezone: +10\ntimezone: -60\n\t\t\t@property {CountdownServerSyncCallback} [serverSync=null] A function to retrieve the current server time\n\t\t\t\t\t\tfor synchronisation.\n\t\t\t@property {string} [format='dHMS'] The format for display - upper case to always show,\n\t\t\t\t\t\tlower case to show only if non-zero,\n\t\t\t\t\t\t'Y' years, 'O' months, 'W' weeks, 'D' days, 'H' hours, 'M' minutes, 'S' seconds.\n\t\t\t@property {string} [layout=''] <p>Build your own layout for the countdown.</p>\n\t\t\t\t\t\t<p>Indicate substitution points with '{desc}' for the description, '{sep}' for the time separator,\n\t\t\t\t\t\t'{pv}' where p is 'y' for years, 'o' for months, 'w' for weeks, 'd' for days,\n\t\t\t\t\t\t'h' for hours, 'm' for minutes, or 's' for seconds and v is 'n' for the period value,\n\t\t\t\t\t\t'nn' for the period value with a minimum of two digits,\n\t\t\t\t\t\t'nnn' for the period value with a minimum of three digits, or\n\t\t\t\t\t\t'l' for the period label (long or short form depending on the compact setting), or\n\t\t\t\t\t\t'{pd}' where p is as above and d is '1' for the units digit, '10' for the tens digit,\n\t\t\t\t\t\t'100' for the hundreds digit, or '1000' for the thousands digit.</p>\n\t\t\t\t\t\t<p>If you need to exclude entire sections when the period value is zero and\n\t\t\t\t\t\tyou have specified the period as optional, surround these sections with\n\t\t\t\t\t\t'{p<}' and '{p>}', where p is the same as above.</p>\n\t\t\t\t\t\t<p>Your layout can just be simple text, or can contain HTML markup as well.</p>\n\t\t\t@example layout: '{d<}{dn} {dl}{d>} {hnn}:{mnn}:{snn}'\n\t\t\t@property {boolean} [compact=false] <code>true</code> to display in a compact format,\n\t\t\t\t\t\t<code>false</code> for an expanded one.\n\t\t\t@property {boolean} [padZeroes=false] <code>true</code> to add leading zeroes.\n\t\t\t@property {number} [significant=0] The maximum number of periods with non-zero values to show, zero for all.\n\t\t\t@property {string} [description=''] The description displayed for the countdown.\n\t\t\t@property {string} [expiryUrl=''] A URL to load upon expiry, replacing the current page.\n\t\t\t@property {string} [expiryText=''] Text to display upon expiry, replacing the countdown. This may be HTML.\n\t\t\t@property {boolean} [alwaysExpire=false] <code>true</code> to trigger <code>onExpiry</code>\n\t\t\t\t\t\teven if the target time has passed.\n\t\t\t@property {CountdownExpiryCallback} [onExpiry=null] Callback when the countdown expires -\n\t\t\t\t\t\treceives no parameters and <code>this</code> is the containing element.\n\t\t\t@example onExpiry: function() {\n  ...\n}\n\t\t\t@property {CountdownTickCallback} [onTick=null] Callback when the countdown is updated -\n\t\t\t\t\t\treceives <code>number[7]</code> being the breakdown by period\n\t\t\t\t\t\t(years, months, weeks, days, hours, minutes, seconds - based on\n\t\t\t\t\t\t<code>format</code>) and <code>this</code> is the containing element.\n\t\t\t@example onTick: function(periods) {\n  var secs = $.countdown.periodsToSeconds(periods);\n  if (secs < 300) { // Last five minutes\n    ...\n  }\n}\n\t\t\t@property {number} [tickInterval=1] The interval (seconds) between <code>onTick</code> callbacks. */\n\t\tdefaultOptions: {\n\t\t\tuntil: null,\n\t\t\tsince: null,\n\t\t\ttimezone: null,\n\t\t\tserverSync: null,\n\t\t\tformat: 'dHMS',\n\t\t\tlayout: '',\n\t\t\tcompact: false,\n\t\t\tpadZeroes: false,\n\t\t\tsignificant: 0,\n\t\t\tdescription: '',\n\t\t\texpiryUrl: '',\n\t\t\texpiryText: '',\n\t\t\talwaysExpire: false,\n\t\t\tonExpiry: null,\n\t\t\tonTick: null,\n\t\t\ttickInterval: 1\n\t\t},\n\n\t\t/** Localisations for the plugin.\n\t\t\tEntries are objects indexed by the language code ('' being the default US/English).\n\t\t\tEach object has the following attributes.\n\t\t\t@property {string[]} [labels=['Years','Months','Weeks','Days','Hours','Minutes','Seconds']]\n\t\t\t\t\t\tThe display texts for the counter periods.\n\t\t\t@property {string[]} [labels1=['Year','Month','Week','Day','Hour','Minute','Second']]\n\t\t\t\t\t\tThe display texts for the counter periods if they have a value of 1.\n\t\t\t\t\t\tAdd other <code>labels<em>n</em></code> attributes as necessary to\n\t\t\t\t\t\tcater for other numeric idiosyncrasies of the localisation.\n\t\t\t@property {string[]}[compactLabels=['y','m','w','d']] The compact texts for the counter periods.\n\t\t\t@property {CountdownWhichLabelsCallback} [whichLabels=null] A function to determine which\n\t\t\t\t\t\t<code>labels<em>n</em></code> to use.\n\t\t\t@example whichLabels: function(num) {\n  return (num > 1 ? 0 : 1);\n}\n\t\t\t@property {string[]} [digits=['0','1',...,'9']] The digits to display (0-9).\n\t\t\t@property {string} [timeSeparator=':'] Separator for time periods in the compact layout.\n\t\t\t@property {boolean} [isRTL=false] <code>true</code> for right-to-left languages,\n\t\t\t\t\t\t<code>false</code> for left-to-right. */\n\t\tregionalOptions: { // Available regional settings, indexed by language/country code\n\t\t\t'': { // Default regional settings - English/US\n\t\t\t\tlabels: ['Years', 'Months', 'Weeks', 'Days', 'Hours', 'Minutes', 'Seconds'],\n\t\t\t\tlabels1: ['Year', 'Month', 'Week', 'Day', 'Hour', 'Minute', 'Second'],\n\t\t\t\tcompactLabels: ['y', 'm', 'w', 'd'],\n\t\t\t\twhichLabels: null,\n\t\t\t\tdigits: ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'],\n\t\t\t\ttimeSeparator: ':',\n\t\t\t\tisRTL: false\n\t\t\t}\n\t\t},\n\n\t\t/* Class name for the right-to-left marker. */\n\t\t_rtlClass: pluginName + '-rtl',\n\t\t/* Class name for the countdown section marker. */\n\t\t_sectionClass: pluginName + '-section',\n\t\t/* Class name for the period amount marker. */\n\t\t_amountClass: pluginName + '-amount',\n\t\t/* Class name for the period name marker. */\n\t\t_periodClass: pluginName + '-period',\n\t\t/* Class name for the countdown row marker. */\n\t\t_rowClass: pluginName + '-row',\n\t\t/* Class name for the holding countdown marker. */\n\t\t_holdingClass: pluginName + '-holding',\n\t\t/* Class name for the showing countdown marker. */\n\t\t_showClass: pluginName + '-show',\n\t\t/* Class name for the description marker. */\n\t\t_descrClass: pluginName + '-descr',\n\n\t\t/* List of currently active countdown elements. */\n\t\t_timerElems: [],\n\n\t\t/** Additional setup for the countdown.\n\t\t\tApply default localisations.\n\t\t\tCreate the timer.\n\t\t\t@private */\n\t\t_init: function() {\n\t\t\tvar self = this;\n\t\t\tthis._super();\n\t\t\tthis._serverSyncs = [];\n\t\t\tvar now = (typeof Date.now === 'function' ? Date.now : function() { return new Date().getTime(); });\n\t\t\tvar perfAvail = (window.performance && typeof window.performance.now === 'function');\n\t\t\t// Shared timer for all countdowns\n\t\t\tfunction timerCallBack(timestamp) {\n\t\t\t\tvar drawStart = (timestamp < 1e12 ? // New HTML5 high resolution timer\n\t\t\t\t\t(perfAvail ? (window.performance.now() + window.performance.timing.navigationStart) : now()) :\n\t\t\t\t\t// Integer milliseconds since unix epoch\n\t\t\t\t\ttimestamp || now());\n\t\t\t\tif (drawStart - animationStartTime >= 1000) {\n\t\t\t\t\tself._updateElems();\n\t\t\t\t\tanimationStartTime = drawStart;\n\t\t\t\t}\n\t\t\t\trequestAnimationFrame(timerCallBack);\n\t\t\t}\n\t\t\tvar requestAnimationFrame = window.requestAnimationFrame ||\n\t\t\t\twindow.webkitRequestAnimationFrame || window.mozRequestAnimationFrame ||\n\t\t\t\twindow.oRequestAnimationFrame || window.msRequestAnimationFrame || null;\n\t\t\t\t// This is when we expect a fall-back to setInterval as it's much more fluid\n\t\t\tvar animationStartTime = 0;\n\t\t\tif (!requestAnimationFrame || $.noRequestAnimationFrame) {\n\t\t\t\t$.noRequestAnimationFrame = null;\n\t\t\t\t// Fall back to good old setInterval\n\t\t\t\t$.countdown._timer = setInterval(function() { self._updateElems(); }, 1000);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tanimationStartTime = window.animationStartTime ||\n\t\t\t\t\twindow.webkitAnimationStartTime || window.mozAnimationStartTime ||\n\t\t\t\t\twindow.oAnimationStartTime || window.msAnimationStartTime || now();\n\t\t\t\trequestAnimationFrame(timerCallBack);\n\t\t\t}\n\t\t},\n\n\t\t/** Convert a date/time to UTC.\n\t\t\t@param {number} tz The hour or minute offset from GMT, e.g. +9, -360.\n\t\t\t@param {Date|number} year the date/time in that timezone or the year in that timezone.\n\t\t\t@param {number} [month] The month (0 - 11) (omit if <code>year</code> is a <code>Date</code>).\n\t\t\t@param {number} [day] The day (omit if <code>year</code> is a <code>Date</code>).\n\t\t\t@param {number} [hours] The hour (omit if <code>year</code> is a <code>Date</code>).\n\t\t\t@param {number} [mins] The minute (omit if <code>year</code> is a <code>Date</code>).\n\t\t\t@param {number} [secs] The second (omit if <code>year</code> is a <code>Date</code>).\n\t\t\t@param {number} [ms] The millisecond (omit if <code>year</code> is a <code>Date</code>).\n\t\t\t@return {Date} The equivalent UTC date/time.\n\t\t\t@example $.countdown.UTCDate(+10, 2013, 12-1, 25, 12, 0)\n$.countdown.UTCDate(-7, new Date(2013, 12-1, 25, 12, 0)) */\n\t\tUTCDate: function(tz, year, month, day, hours, mins, secs, ms) {\n\t\t\tif (typeof year === 'object' && year instanceof Date) {\n\t\t\t\tms = year.getMilliseconds();\n\t\t\t\tsecs = year.getSeconds();\n\t\t\t\tmins = year.getMinutes();\n\t\t\t\thours = year.getHours();\n\t\t\t\tday = year.getDate();\n\t\t\t\tmonth = year.getMonth();\n\t\t\t\tyear = year.getFullYear();\n\t\t\t}\n\t\t\tvar d = new Date();\n\t\t\td.setUTCFullYear(year);\n\t\t\td.setUTCDate(1);\n\t\t\td.setUTCMonth(month || 0);\n\t\t\td.setUTCDate(day || 1);\n\t\t\td.setUTCHours(hours || 0);\n\t\t\td.setUTCMinutes((mins || 0) - (Math.abs(tz) < 30 ? tz * 60 : tz));\n\t\t\td.setUTCSeconds(secs || 0);\n\t\t\td.setUTCMilliseconds(ms || 0);\n\t\t\treturn d;\n\t\t},\n\n\t\t/** Convert a set of periods into seconds.\n\t\t\tAveraged for months and years.\n\t\t\t@param {number[]} periods The periods per year/month/week/day/hour/minute/second.\n\t\t\t@return {number} The corresponding number of seconds.\n\t\t\t@example var secs = $.countdown.periodsToSeconds(periods) */\n\t\tperiodsToSeconds: function(periods) {\n\t\t\treturn periods[0] * 31557600 + periods[1] * 2629800 + periods[2] * 604800 +\n\t\t\t\tperiods[3] * 86400 + periods[4] * 3600 + periods[5] * 60 + periods[6];\n\t\t},\n\n\t\t/** Resynchronise the countdowns with the server.\n\t\t\t@example $.countdown.resync() */\n\t\tresync: function() {\n\t\t\tvar self = this;\n\t\t\t$('.' + this._getMarker()).each(function() { // Each countdown\n\t\t\t\tvar inst = $.data(this, self.name);\n\t\t\t\tif (inst.options.serverSync) { // If synced\n\t\t\t\t\tvar serverSync = null;\n\t\t\t\t\tfor (var i = 0; i < self._serverSyncs.length; i++) {\n\t\t\t\t\t\tif (self._serverSyncs[i][0] === inst.options.serverSync) { // Find sync details\n\t\t\t\t\t\t\tserverSync = self._serverSyncs[i];\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (self._eqNull(serverSync[2])) { // Recalculate if missing\n\t\t\t\t\t\tvar serverResult = ($.isFunction(inst.options.serverSync) ?\n\t\t\t\t\t\t\tinst.options.serverSync.apply(this, []) : null);\n\t\t\t\t\t\tserverSync[2] =\n\t\t\t\t\t\t\t(serverResult ? new Date().getTime() - serverResult.getTime() : 0) - serverSync[1];\n\t\t\t\t\t}\n\t\t\t\t\tif (inst._since) { // Apply difference\n\t\t\t\t\t\tinst._since.setMilliseconds(inst._since.getMilliseconds() + serverSync[2]);\n\t\t\t\t\t}\n\t\t\t\t\tinst._until.setMilliseconds(inst._until.getMilliseconds() + serverSync[2]);\n\t\t\t\t}\n\t\t\t});\n\t\t\tfor (var i = 0; i < self._serverSyncs.length; i++) { // Update sync details\n\t\t\t\tif (!self._eqNull(self._serverSyncs[i][2])) {\n\t\t\t\t\tself._serverSyncs[i][1] += self._serverSyncs[i][2];\n\t\t\t\t\tdelete self._serverSyncs[i][2];\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t_instSettings: function(elem, options) { // jshint unused:false\n\t\t\treturn {_periods: [0, 0, 0, 0, 0, 0, 0]};\n\t\t},\n\n\t\t/** Add an element to the list of active ones.\n\t\t\t@private\n\t\t\t@param {Element} elem The countdown element. */\n\t\t_addElem: function(elem) {\n\t\t\tif (!this._hasElem(elem)) {\n\t\t\t\tthis._timerElems.push(elem);\n\t\t\t}\n\t\t},\n\n\t\t/** See if an element is in the list of active ones.\n\t\t\t@private\n\t\t\t@param {Element} elem The countdown element.\n\t\t\t@return {boolean} <code>true</code> if present, <code>false</code> if not. */\n\t\t_hasElem: function(elem) {\n\t\t\treturn ($.inArray(elem, this._timerElems) > -1);\n\t\t},\n\n\t\t/** Remove an element from the list of active ones.\n\t\t\t@private\n\t\t\t@param {Element} elem The countdown element. */\n\t\t_removeElem: function(elem) {\n\t\t\tthis._timerElems = $.map(this._timerElems,\n\t\t\t\tfunction(value) { return (value === elem ? null : value); }); // delete entry\n\t\t},\n\n\t\t/** Update each active timer element.\n\t\t\t@private */\n\t\t_updateElems: function() {\n\t\t\tfor (var i = this._timerElems.length - 1; i >= 0; i--) {\n\t\t\t\tthis._updateCountdown(this._timerElems[i]);\n\t\t\t}\n\t\t},\n\n\t\t_optionsChanged: function(elem, inst, options) {\n\t\t\tif (options.layout) {\n\t\t\t\toptions.layout = options.layout.replace(/&lt;/g, '<').replace(/&gt;/g, '>');\n\t\t\t}\n\t\t\tthis._resetExtraLabels(inst.options, options);\n\t\t\tvar timezoneChanged = (inst.options.timezone !== options.timezone);\n\t\t\t$.extend(inst.options, options);\n\t\t\tthis._adjustSettings(elem, inst,\n\t\t\t\t!this._eqNull(options.until) || !this._eqNull(options.since) || timezoneChanged);\n\t\t\tvar now = new Date();\n\t\t\tif ((inst._since && inst._since < now) || (inst._until && inst._until > now)) {\n\t\t\t\tthis._addElem(elem[0]);\n\t\t\t}\n\t\t\tthis._updateCountdown(elem, inst);\n\t\t},\n\n\t\t/** Redisplay the countdown with an updated display.\n\t\t\t@private\n\t\t\t@param {Element|jQuery} elem The containing element.\n\t\t\t@param {object} inst The current settings for this instance. */\n\t\t_updateCountdown: function(elem, inst) {\n\t\t\telem = elem.jquery ? elem : $(elem);\n\t\t\tinst = inst || this._getInst(elem);\n\t\t\tif (!inst) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\telem.html(this._generateHTML(inst)).toggleClass(this._rtlClass, inst.options.isRTL);\n\t\t\tif (inst._hold !== 'pause' && $.isFunction(inst.options.onTick)) {\n\t\t\t\tvar periods = inst._hold !== 'lap' ? inst._periods :\n\t\t\t\t\tthis._calculatePeriods(inst, inst._show, inst.options.significant, new Date());\n\t\t\t\tif (inst.options.tickInterval === 1 ||\n\t\t\t\t\t\tthis.periodsToSeconds(periods) % inst.options.tickInterval === 0) {\n\t\t\t\t\tinst.options.onTick.apply(elem[0], [periods]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar expired = inst._hold !== 'pause' &&\n\t\t\t\t(inst._since ? inst._now.getTime() < inst._since.getTime() :\n\t\t\t\tinst._now.getTime() >= inst._until.getTime());\n\t\t\tif (expired && !inst._expiring) {\n\t\t\t\tinst._expiring = true;\n\t\t\t\tif (this._hasElem(elem[0]) || inst.options.alwaysExpire) {\n\t\t\t\t\tthis._removeElem(elem[0]);\n\t\t\t\t\tif ($.isFunction(inst.options.onExpiry)) {\n\t\t\t\t\t\tinst.options.onExpiry.apply(elem[0], []);\n\t\t\t\t\t}\n\t\t\t\t\tif (inst.options.expiryText) {\n\t\t\t\t\t\tvar layout = inst.options.layout;\n\t\t\t\t\t\tinst.options.layout = inst.options.expiryText;\n\t\t\t\t\t\tthis._updateCountdown(elem[0], inst);\n\t\t\t\t\t\tinst.options.layout = layout;\n\t\t\t\t\t}\n\t\t\t\t\tif (inst.options.expiryUrl) {\n\t\t\t\t\t\twindow.location = inst.options.expiryUrl;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tinst._expiring = false;\n\t\t\t}\n\t\t\telse if (inst._hold === 'pause') {\n\t\t\t\tthis._removeElem(elem[0]);\n\t\t\t}\n\t\t},\n\n\t\t/** Reset any extra labelsn and compactLabelsn entries if changing labels.\n\t\t\t@private\n\t\t\t@param {object} base The options to be updated.\n\t\t\t@param {object} options The new option values. */\n\t\t_resetExtraLabels: function(base, options) {\n\t\t\tvar n = null;\n\t\t\tfor (n in options) {\n\t\t\t\tif (n.match(/[Ll]abels[02-9]|compactLabels1/)) {\n\t\t\t\t\tbase[n] = options[n];\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (n in base) { // Remove custom numbered labels\n\t\t\t\tif (n.match(/[Ll]abels[02-9]|compactLabels1/) && typeof options[n] === 'undefined') {\n\t\t\t\t\tbase[n] = null;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\n\t\t/** Determine whether or not a value is equivalent to <code>null</code>.\n\t\t\t@private\n\t\t\t@param {object} value The value to test.\n\t\t\t@return {boolean} <code>true</code> if equivalent to <code>null</code>, <code>false</code> if not. */\n\t\t_eqNull: function(value) {\n\t\t\treturn typeof value === 'undefined' || value === null;\n\t\t},\n\n\n\t\t/** Calculate internal settings for an instance.\n\t\t\t@private\n\t\t\t@param {jQuery} elem The containing element.\n\t\t\t@param {object} inst The current settings for this instance.\n\t\t\t@param {boolean} recalc <code>true</code> if until or since are set. */\n\t\t_adjustSettings: function(elem, inst, recalc) {\n\t\t\tvar serverEntry = null;\n\t\t\tfor (var i = 0; i < this._serverSyncs.length; i++) {\n\t\t\t\tif (this._serverSyncs[i][0] === inst.options.serverSync) {\n\t\t\t\t\tserverEntry = this._serverSyncs[i][1];\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar now = null;\n\t\t\tvar serverOffset = null;\n\t\t\tif (!this._eqNull(serverEntry)) {\n\t\t\t\tnow = new Date();\n\t\t\t\tserverOffset = (inst.options.serverSync ? serverEntry : 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tvar serverResult = ($.isFunction(inst.options.serverSync) ?\n\t\t\t\t\tinst.options.serverSync.apply(elem[0], []) : null);\n\t\t\t\tnow = new Date();\n\t\t\t\tserverOffset = (serverResult ? now.getTime() - serverResult.getTime() : 0);\n\t\t\t\tthis._serverSyncs.push([inst.options.serverSync, serverOffset]);\n\t\t\t}\n\t\t\tvar timezone = inst.options.timezone;\n\t\t\ttimezone = (this._eqNull(timezone) ? -now.getTimezoneOffset() : timezone);\n\t\t\tif (recalc || (!recalc && this._eqNull(inst._until) && this._eqNull(inst._since))) {\n\t\t\t\tinst._since = inst.options.since;\n\t\t\t\tif (!this._eqNull(inst._since)) {\n\t\t\t\t\tinst._since = this.UTCDate(timezone, this._determineTime(inst._since, null));\n\t\t\t\t\tif (inst._since && serverOffset) {\n\t\t\t\t\t\tinst._since.setMilliseconds(inst._since.getMilliseconds() + serverOffset);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tinst._until = this.UTCDate(timezone, this._determineTime(inst.options.until, now));\n\t\t\t\tif (serverOffset) {\n\t\t\t\t\tinst._until.setMilliseconds(inst._until.getMilliseconds() + serverOffset);\n\t\t\t\t}\n\t\t\t}\n\t\t\tinst._show = this._determineShow(inst);\n\t\t},\n\n\t\t/** Remove the countdown widget from an element.\n\t\t\t@private\n\t\t\t@param {jQuery} elem The containing element.\n\t\t\t@param {object} inst The current instance object. */\n\t\t_preDestroy: function(elem, inst) { // jshint unused:false\n\t\t\tthis._removeElem(elem[0]);\n\t\t\telem.empty();\n\t\t},\n\n\t\t/** Pause a countdown widget at the current time.\n\t\t\tStop it running but remember and display the current time.\n\t\t\t@param {Element} elem The containing element.\n\t\t\t@example $(selector).countdown('pause') */\n\t\tpause: function(elem) {\n\t\t\tthis._hold(elem, 'pause');\n\t\t},\n\n\t\t/** Pause a countdown widget at the current time.\n\t\t\tStop the display but keep the countdown running.\n\t\t\t@param {Element} elem The containing element.\n\t\t\t@example $(selector).countdown('lap') */\n\t\tlap: function(elem) {\n\t\t\tthis._hold(elem, 'lap');\n\t\t},\n\n\t\t/** Resume a paused countdown widget.\n\t\t\t@param {Element} elem The containing element.\n\t\t\t@example $(selector).countdown('resume') */\n\t\tresume: function(elem) {\n\t\t\tthis._hold(elem, null);\n\t\t},\n\n\t\t/** Toggle a paused countdown widget.\n\t\t\t@param {Element} elem The containing element.\n\t\t\t@example $(selector).countdown('toggle') */\n\t\ttoggle: function(elem) {\n\t\t\tvar inst = $.data(elem, this.name) || {};\n\t\t\tthis[!inst._hold ? 'pause' : 'resume'](elem);\n\t\t},\n\n\t\t/** Toggle a lapped countdown widget.\n\t\t\t@param {Element} elem The containing element.\n\t\t\t@example $(selector).countdown('toggleLap') */\n\t\ttoggleLap: function(elem) {\n\t\t\tvar inst = $.data(elem, this.name) || {};\n\t\t\tthis[!inst._hold ? 'lap' : 'resume'](elem);\n\t\t},\n\n\t\t/** Pause or resume a countdown widget.\n\t\t\t@private\n\t\t\t@param {Element} elem The containing element.\n\t\t\t@param {string} hold The new hold setting. */\n\t\t_hold: function(elem, hold) {\n\t\t\tvar inst = $.data(elem, this.name);\n\t\t\tif (inst) {\n\t\t\t\tif (inst._hold === 'pause' && !hold) {\n\t\t\t\t\tinst._periods = inst._savePeriods;\n\t\t\t\t\tvar sign = (inst._since ? '-' : '+');\n\t\t\t\t\tinst[inst._since ? '_since' : '_until'] =\n\t\t\t\t\t\tthis._determineTime(sign + inst._periods[0] + 'y' +\n\t\t\t\t\t\t\tsign + inst._periods[1] + 'o' + sign + inst._periods[2] + 'w' +\n\t\t\t\t\t\t\tsign + inst._periods[3] + 'd' + sign + inst._periods[4] + 'h' + \n\t\t\t\t\t\t\tsign + inst._periods[5] + 'm' + sign + inst._periods[6] + 's');\n\t\t\t\t\tthis._addElem(elem);\n\t\t\t\t}\n\t\t\t\tinst._hold = hold;\n\t\t\t\tinst._savePeriods = (hold === 'pause' ? inst._periods : null);\n\t\t\t\t$.data(elem, this.name, inst);\n\t\t\t\tthis._updateCountdown(elem, inst);\n\t\t\t}\n\t\t},\n\n\t\t/** Return the current time periods, broken down by years, months, weeks, days, hours, minutes, and seconds.\n\t\t\t@param {Element} elem The containing element.\n\t\t\t@return {number[]} The current periods for the countdown.\n\t\t\t@example var periods = $(selector).countdown('getTimes') */\n\t\tgetTimes: function(elem) {\n\t\t\tvar inst = $.data(elem, this.name);\n\t\t\treturn (!inst ? null : (inst._hold === 'pause' ? inst._savePeriods : (!inst._hold ? inst._periods :\n\t\t\t\tthis._calculatePeriods(inst, inst._show, inst.options.significant, new Date()))));\n\t\t},\n\n\t\t/** A time may be specified as an exact value or a relative one.\n\t\t\t@private\n\t\t\t@param {string|number|Date} setting The date/time value as a relative or absolute value.\n\t\t\t@param {Date} defaultTime The date/time to use if no other is supplied.\n\t\t\t@return {Date} The corresponding date/time. */\n\t\t_determineTime: function(setting, defaultTime) {\n\t\t\tvar self = this;\n\t\t\tvar offsetNumeric = function(offset) { // e.g. +300, -2\n\t\t\t\tvar time = new Date();\n\t\t\t\ttime.setTime(time.getTime() + offset * 1000);\n\t\t\t\treturn time;\n\t\t\t};\n\t\t\tvar offsetString = function(offset) { // e.g. '+2d', '-4w', '+3h +30m'\n\t\t\t\toffset = offset.toLowerCase();\n\t\t\t\tvar time = new Date();\n\t\t\t\tvar year = time.getFullYear();\n\t\t\t\tvar month = time.getMonth();\n\t\t\t\tvar day = time.getDate();\n\t\t\t\tvar hour = time.getHours();\n\t\t\t\tvar minute = time.getMinutes();\n\t\t\t\tvar second = time.getSeconds();\n\t\t\t\tvar pattern = /([+-]?[0-9]+)\\s*(s|m|h|d|w|o|y)?/g;\n\t\t\t\tvar matches = pattern.exec(offset);\n\t\t\t\twhile (matches) {\n\t\t\t\t\tswitch (matches[2] || 's') {\n\t\t\t\t\t\tcase 's':\n\t\t\t\t\t\t\tsecond += parseInt(matches[1], 10);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'm':\n\t\t\t\t\t\t\tminute += parseInt(matches[1], 10);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'h':\n\t\t\t\t\t\t\thour += parseInt(matches[1], 10);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'd':\n\t\t\t\t\t\t\tday += parseInt(matches[1], 10);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'w':\n\t\t\t\t\t\t\tday += parseInt(matches[1], 10) * 7;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'o':\n\t\t\t\t\t\t\tmonth += parseInt(matches[1], 10); \n\t\t\t\t\t\t\tday = Math.min(day, self._getDaysInMonth(year, month));\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'y':\n\t\t\t\t\t\t\tyear += parseInt(matches[1], 10);\n\t\t\t\t\t\t\tday = Math.min(day, self._getDaysInMonth(year, month));\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tmatches = pattern.exec(offset);\n\t\t\t\t}\n\t\t\t\treturn new Date(year, month, day, hour, minute, second, 0);\n\t\t\t};\n\t\t\tvar time = (this._eqNull(setting) ? defaultTime :\n\t\t\t\t(typeof setting === 'string' ? offsetString(setting) :\n\t\t\t\t(typeof setting === 'number' ? offsetNumeric(setting) : setting)));\n\t\t\tif (time) {\n\t\t\t\ttime.setMilliseconds(0);\n\t\t\t}\n\t\t\treturn time;\n\t\t},\n\n\t\t/** Determine the number of days in a month.\n\t\t\t@private\n\t\t\t@param {number} year The year.\n\t\t\t@param {number} month The month.\n\t\t\t@return {number} The days in that month. */\n\t\t_getDaysInMonth: function(year, month) {\n\t\t\treturn 32 - new Date(year, month, 32).getDate();\n\t\t},\n\n\t\t/** Default implementation to determine which set of labels should be used for an amount.\n\t\t\tUse the <code>labels</code> attribute with the same numeric suffix (if it exists).\n\t\t\t@private\n\t\t\t@param {number} num The amount to be displayed.\n\t\t\t@return {number} The set of labels to be used for this amount. */\n\t\t_normalLabels: function(num) {\n\t\t\treturn num;\n\t\t},\n\n\t\t/** Generate the HTML to display the countdown widget.\n\t\t\t@private\n\t\t\t@param {object} inst The current settings for this instance.\n\t\t\t@return {string} The new HTML for the countdown display. */\n\t\t_generateHTML: function(inst) {\n\t\t\tvar self = this;\n\t\t\t// Determine what to show\n\t\t\tinst._periods = (inst._hold ? inst._periods :\n\t\t\t\tthis._calculatePeriods(inst, inst._show, inst.options.significant, new Date()));\n\t\t\t// Show all 'asNeeded' after first non-zero value\n\t\t\tvar shownNonZero = false;\n\t\t\tvar showCount = 0;\n\t\t\tvar sigCount = inst.options.significant;\n\t\t\tvar show = $.extend({}, inst._show);\n\t\t\tvar period = null;\n\t\t\tfor (period = Y; period <= S; period++) {\n\t\t\t\tshownNonZero = shownNonZero || (inst._show[period] === '?' && inst._periods[period] > 0);\n\t\t\t\tshow[period] = (inst._show[period] === '?' && !shownNonZero ? null : inst._show[period]);\n\t\t\t\tshowCount += (show[period] ? 1 : 0);\n\t\t\t\tsigCount -= (inst._periods[period] > 0 ? 1 : 0);\n\t\t\t}\n\t\t\tvar showSignificant = [false, false, false, false, false, false, false];\n\t\t\tfor (period = S; period >= Y; period--) { // Determine significant periods\n\t\t\t\tif (inst._show[period]) {\n\t\t\t\t\tif (inst._periods[period]) {\n\t\t\t\t\t\tshowSignificant[period] = true;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tshowSignificant[period] = sigCount > 0;\n\t\t\t\t\t\tsigCount--;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar labels = (inst.options.compact ? inst.options.compactLabels : inst.options.labels);\n\t\t\tvar whichLabels = inst.options.whichLabels || this._normalLabels;\n\t\t\tvar showCompact = function(period) {\n\t\t\t\tvar labelsNum = inst.options['compactLabels' + whichLabels(inst._periods[period])];\n\t\t\t\treturn (show[period] ? self._translateDigits(inst, inst._periods[period]) +\n\t\t\t\t\t(labelsNum ? labelsNum[period] : labels[period]) + ' ' : '');\n\t\t\t};\n\t\t\tvar minDigits = (inst.options.padZeroes ? 2 : 1);\n\t\t\tvar showFull = function(period) {\n\t\t\t\tvar labelsNum = inst.options['labels' + whichLabels(inst._periods[period])];\n\t\t\t\treturn ((!inst.options.significant && show[period]) ||\n\t\t\t\t\t(inst.options.significant && showSignificant[period]) ?\n\t\t\t\t\t\t'<span class=\"' + self._sectionClass + '\">' +\n\t\t\t\t\t\t'<span class=\"' + self._amountClass + '\">' +\n\t\t\t\t\tself._minDigits(inst, inst._periods[period], minDigits) + '</span>' +\n\t\t\t\t\t'<span class=\"' + self._periodClass + '\">' +\n\t\t\t\t\t(labelsNum ? labelsNum[period] : labels[period]) + '</span></span>' : '');\n\t\t\t};\n\t\t\treturn (inst.options.layout ? this._buildLayout(inst, show, inst.options.layout,\n\t\t\t\tinst.options.compact, inst.options.significant, showSignificant) :\n\t\t\t\t((inst.options.compact ? // Compact version\n\t\t\t\t'<span class=\"' + this._rowClass + ' ' + this._amountClass +\n\t\t\t\t(inst._hold ? ' ' + this._holdingClass : '') + '\">' + \n\t\t\t\tshowCompact(Y) + showCompact(O) + showCompact(W) + showCompact(D) + \n\t\t\t\t(show[H] ? this._minDigits(inst, inst._periods[H], 2) : '') +\n\t\t\t\t(show[M] ? (show[H] ? inst.options.timeSeparator : '') +\n\t\t\t\tthis._minDigits(inst, inst._periods[M], 2) : '') +\n\t\t\t\t(show[S] ? (show[H] || show[M] ? inst.options.timeSeparator : '') +\n\t\t\t\tthis._minDigits(inst, inst._periods[S], 2) : '') :\n\t\t\t\t// Full version\n\t\t\t\t'<span class=\"' + this._rowClass + ' ' + this._showClass + (inst.options.significant || showCount) +\n\t\t\t\t(inst._hold ? ' ' + this._holdingClass : '') + '\">' +\n\t\t\t\tshowFull(Y) + showFull(O) + showFull(W) + showFull(D) +\n\t\t\t\tshowFull(H) + showFull(M) + showFull(S)) + '</span>' +\n\t\t\t\t(inst.options.description ? '<span class=\"' + this._rowClass + ' ' + this._descrClass + '\">' +\n\t\t\t\tinst.options.description + '</span>' : '')));\n\t\t},\n\n\t\t/** Construct a custom layout.\n\t\t\t@private\n\t\t\t@param {object} inst The current settings for this instance.\n\t\t\t@param {boolean[]} show Flags indicating which periods are requested.\n\t\t\t@param {string} layout The customised layout.\n\t\t\t@param {boolean} compact <code>true</code> if using compact labels.\n\t\t\t@param {number} significant The number of periods with values to show, zero for all.\n\t\t\t@param {boolean[]} showSignificant Other periods to show for significance.\n\t\t\t@return {string} The custom HTML. */\n\t\t_buildLayout: function(inst, show, layout, compact, significant, showSignificant) {\n\t\t\tvar labels = inst.options[compact ? 'compactLabels' : 'labels'];\n\t\t\tvar whichLabels = inst.options.whichLabels || this._normalLabels;\n\t\t\tvar labelFor = function(index) {\n\t\t\t\treturn (inst.options[(compact ? 'compactLabels' : 'labels') +\n\t\t\t\t\twhichLabels(inst._periods[index])] || labels)[index];\n\t\t\t};\n\t\t\tvar digit = function(value, position) {\n\t\t\t\treturn inst.options.digits[Math.floor(value / position) % 10];\n\t\t\t};\n\t\t\tvar subs = {desc: inst.options.description, sep: inst.options.timeSeparator,\n\t\t\t\tyl: labelFor(Y), yn: this._minDigits(inst, inst._periods[Y], 1),\n\t\t\t\tynn: this._minDigits(inst, inst._periods[Y], 2),\n\t\t\t\tynnn: this._minDigits(inst, inst._periods[Y], 3), y1: digit(inst._periods[Y], 1),\n\t\t\t\ty10: digit(inst._periods[Y], 10), y100: digit(inst._periods[Y], 100),\n\t\t\t\ty1000: digit(inst._periods[Y], 1000),\n\t\t\t\tol: labelFor(O), on: this._minDigits(inst, inst._periods[O], 1),\n\t\t\t\tonn: this._minDigits(inst, inst._periods[O], 2),\n\t\t\t\tonnn: this._minDigits(inst, inst._periods[O], 3), o1: digit(inst._periods[O], 1),\n\t\t\t\to10: digit(inst._periods[O], 10), o100: digit(inst._periods[O], 100),\n\t\t\t\to1000: digit(inst._periods[O], 1000),\n\t\t\t\twl: labelFor(W), wn: this._minDigits(inst, inst._periods[W], 1),\n\t\t\t\twnn: this._minDigits(inst, inst._periods[W], 2),\n\t\t\t\twnnn: this._minDigits(inst, inst._periods[W], 3), w1: digit(inst._periods[W], 1),\n\t\t\t\tw10: digit(inst._periods[W], 10), w100: digit(inst._periods[W], 100),\n\t\t\t\tw1000: digit(inst._periods[W], 1000),\n\t\t\t\tdl: labelFor(D), dn: this._minDigits(inst, inst._periods[D], 1),\n\t\t\t\tdnn: this._minDigits(inst, inst._periods[D], 2),\n\t\t\t\tdnnn: this._minDigits(inst, inst._periods[D], 3), d1: digit(inst._periods[D], 1),\n\t\t\t\td10: digit(inst._periods[D], 10), d100: digit(inst._periods[D], 100),\n\t\t\t\td1000: digit(inst._periods[D], 1000),\n\t\t\t\thl: labelFor(H), hn: this._minDigits(inst, inst._periods[H], 1),\n\t\t\t\thnn: this._minDigits(inst, inst._periods[H], 2),\n\t\t\t\thnnn: this._minDigits(inst, inst._periods[H], 3), h1: digit(inst._periods[H], 1),\n\t\t\t\th10: digit(inst._periods[H], 10), h100: digit(inst._periods[H], 100),\n\t\t\t\th1000: digit(inst._periods[H], 1000),\n\t\t\t\tml: labelFor(M), mn: this._minDigits(inst, inst._periods[M], 1),\n\t\t\t\tmnn: this._minDigits(inst, inst._periods[M], 2),\n\t\t\t\tmnnn: this._minDigits(inst, inst._periods[M], 3), m1: digit(inst._periods[M], 1),\n\t\t\t\tm10: digit(inst._periods[M], 10), m100: digit(inst._periods[M], 100),\n\t\t\t\tm1000: digit(inst._periods[M], 1000),\n\t\t\t\tsl: labelFor(S), sn: this._minDigits(inst, inst._periods[S], 1),\n\t\t\t\tsnn: this._minDigits(inst, inst._periods[S], 2),\n\t\t\t\tsnnn: this._minDigits(inst, inst._periods[S], 3), s1: digit(inst._periods[S], 1),\n\t\t\t\ts10: digit(inst._periods[S], 10), s100: digit(inst._periods[S], 100),\n\t\t\t\ts1000: digit(inst._periods[S], 1000)};\n\t\t\tvar html = layout;\n\t\t\t// Replace period containers: {p<}...{p>}\n\t\t\tfor (var i = Y; i <= S; i++) {\n\t\t\t\tvar period = 'yowdhms'.charAt(i);\n\t\t\t\tvar re = new RegExp('\\\\{' + period + '<\\\\}([\\\\s\\\\S]*)\\\\{' + period + '>\\\\}', 'g');\n\t\t\t\thtml = html.replace(re, ((!significant && show[i]) ||\n\t\t\t\t\t(significant && showSignificant[i]) ? '$1' : ''));\n\t\t\t}\n\t\t\t// Replace period values: {pn}\n\t\t\t$.each(subs, function(n, v) {\n\t\t\t\tvar re = new RegExp('\\\\{' + n + '\\\\}', 'g');\n\t\t\t\thtml = html.replace(re, v);\n\t\t\t});\n\t\t\treturn html;\n\t\t},\n\n\t\t/** Ensure a numeric value has at least n digits for display.\n\t\t\t@private\n\t\t\t@param {object} inst The current settings for this instance.\n\t\t\t@param {number} value The value to display.\n\t\t\t@param {number} len The minimum length.\n\t\t\t@return {string} The display text. */\n\t\t_minDigits: function(inst, value, len) {\n\t\t\tvalue = '' + value;\n\t\t\tif (value.length >= len) {\n\t\t\t\treturn this._translateDigits(inst, value);\n\t\t\t}\n\t\t\tvalue = '0000000000' + value;\n\t\t\treturn this._translateDigits(inst, value.substr(value.length - len));\n\t\t},\n\n\t\t/** Translate digits into other representations.\n\t\t\t@private\n\t\t\t@param {object} inst The current settings for this instance.\n\t\t\t@param {string} value The text to translate.\n\t\t\t@return {string} The translated text. */\n\t\t_translateDigits: function(inst, value) {\n\t\t\treturn ('' + value).replace(/[0-9]/g, function(digit) {\n\t\t\t\t\treturn inst.options.digits[digit];\n\t\t\t\t});\n\t\t},\n\n\t\t/** Translate the format into flags for each period.\n\t\t\t@private\n\t\t\t@param {object} inst The current settings for this instance.\n\t\t\t@return {string[]} Flags indicating which periods are requested (?) or\n\t\t\t\t\trequired (!) by year, month, week, day, hour, minute, second. */\n\t\t_determineShow: function(inst) {\n\t\t\tvar format = inst.options.format;\n\t\t\tvar show = [];\n\t\t\tshow[Y] = (format.match('y') ? '?' : (format.match('Y') ? '!' : null));\n\t\t\tshow[O] = (format.match('o') ? '?' : (format.match('O') ? '!' : null));\n\t\t\tshow[W] = (format.match('w') ? '?' : (format.match('W') ? '!' : null));\n\t\t\tshow[D] = (format.match('d') ? '?' : (format.match('D') ? '!' : null));\n\t\t\tshow[H] = (format.match('h') ? '?' : (format.match('H') ? '!' : null));\n\t\t\tshow[M] = (format.match('m') ? '?' : (format.match('M') ? '!' : null));\n\t\t\tshow[S] = (format.match('s') ? '?' : (format.match('S') ? '!' : null));\n\t\t\treturn show;\n\t\t},\n\n\t\t/** Calculate the requested periods between now and the target time.\n\t\t\t@private\n\t\t\t@param {object} inst The current settings for this instance.\n\t\t\t@param {string[]} show Flags indicating which periods are requested/required.\n\t\t\t@param {number} significant The number of periods with values to show, zero for all.\n\t\t\t@param {Date} now The current date and time.\n\t\t\t@return {number[]} The current time periods (always positive)\n\t\t\t\t\tby year, month, week, day, hour, minute, second. */\n\t\t_calculatePeriods: function(inst, show, significant, now) {\n\t\t\t// Find endpoints\n\t\t\tinst._now = now;\n\t\t\tinst._now.setMilliseconds(0);\n\t\t\tvar until = new Date(inst._now.getTime());\n\t\t\tif (inst._since) {\n\t\t\t\tif (now.getTime() < inst._since.getTime()) {\n\t\t\t\t\tinst._now = now = until;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tnow = inst._since;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tuntil.setTime(inst._until.getTime());\n\t\t\t\tif (now.getTime() > inst._until.getTime()) {\n\t\t\t\t\tinst._now = now = until;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Calculate differences by period\n\t\t\tvar periods = [0, 0, 0, 0, 0, 0, 0];\n\t\t\tif (show[Y] || show[O]) {\n\t\t\t\t// Treat end of months as the same\n\t\t\t\tvar lastNow = this._getDaysInMonth(now.getFullYear(), now.getMonth());\n\t\t\t\tvar lastUntil = this._getDaysInMonth(until.getFullYear(), until.getMonth());\n\t\t\t\tvar sameDay = (until.getDate() === now.getDate() ||\n\t\t\t\t\t(until.getDate() >= Math.min(lastNow, lastUntil) &&\n\t\t\t\t\tnow.getDate() >= Math.min(lastNow, lastUntil)));\n\t\t\t\tvar getSecs = function(date) {\n\t\t\t\t\treturn (date.getHours() * 60 + date.getMinutes()) * 60 + date.getSeconds();\n\t\t\t\t};\n\t\t\t\tvar months = Math.max(0,\n\t\t\t\t\t(until.getFullYear() - now.getFullYear()) * 12 + until.getMonth() - now.getMonth() +\n\t\t\t\t\t((until.getDate() < now.getDate() && !sameDay) ||\n\t\t\t\t\t(sameDay && getSecs(until) < getSecs(now)) ? -1 : 0));\n\t\t\t\tperiods[Y] = (show[Y] ? Math.floor(months / 12) : 0);\n\t\t\t\tperiods[O] = (show[O] ? months - periods[Y] * 12 : 0);\n\t\t\t\t// Adjust for months difference and end of month if necessary\n\t\t\t\tnow = new Date(now.getTime());\n\t\t\t\tvar wasLastDay = (now.getDate() === lastNow);\n\t\t\t\tvar lastDay = this._getDaysInMonth(now.getFullYear() + periods[Y],\n\t\t\t\t\tnow.getMonth() + periods[O]);\n\t\t\t\tif (now.getDate() > lastDay) {\n\t\t\t\t\tnow.setDate(lastDay);\n\t\t\t\t}\n\t\t\t\tnow.setFullYear(now.getFullYear() + periods[Y]);\n\t\t\t\tnow.setMonth(now.getMonth() + periods[O]);\n\t\t\t\tif (wasLastDay) {\n\t\t\t\t\tnow.setDate(lastDay);\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar diff = Math.floor((until.getTime() - now.getTime()) / 1000);\n\t\t\tvar period = null;\n\t\t\tvar extractPeriod = function(period, numSecs) {\n\t\t\t\tperiods[period] = (show[period] ? Math.floor(diff / numSecs) : 0);\n\t\t\t\tdiff -= periods[period] * numSecs;\n\t\t\t};\n\t\t\textractPeriod(W, 604800);\n\t\t\textractPeriod(D, 86400);\n\t\t\textractPeriod(H, 3600);\n\t\t\textractPeriod(M, 60);\n\t\t\textractPeriod(S, 1);\n\t\t\tif (diff > 0 && !inst._since) { // Round up if left overs\n\t\t\t\tvar multiplier = [1, 12, 4.3482, 7, 24, 60, 60];\n\t\t\t\tvar lastShown = S;\n\t\t\t\tvar max = 1;\n\t\t\t\tfor (period = S; period >= Y; period--) {\n\t\t\t\t\tif (show[period]) {\n\t\t\t\t\t\tif (periods[lastShown] >= max) {\n\t\t\t\t\t\t\tperiods[lastShown] = 0;\n\t\t\t\t\t\t\tdiff = 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (diff > 0) {\n\t\t\t\t\t\t\tperiods[period]++;\n\t\t\t\t\t\t\tdiff = 0;\n\t\t\t\t\t\t\tlastShown = period;\n\t\t\t\t\t\t\tmax = 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tmax *= multiplier[period];\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (significant) { // Zero out insignificant periods\n\t\t\t\tfor (period = Y; period <= S; period++) {\n\t\t\t\t\tif (significant && periods[period]) {\n\t\t\t\t\t\tsignificant--;\n\t\t\t\t\t}\n\t\t\t\t\telse if (!significant) {\n\t\t\t\t\t\tperiods[period] = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn periods;\n\t\t}\n\t});\n\n})(jQuery);\n"
  },
  {
    "path": "test/countdown.tests.html",
    "content": "﻿<!DOCTYPE html>\n<html>\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\">\n<title>jQuery Countdown Tests</title>\n<link rel=\"stylesheet\" href=\"../src/bower_components/qunit/qunit/qunit.css\">\n<link rel=\"stylesheet\" href=\"../src/css/jquery.countdown.css\">\n<script src=\"../src/bower_components/qunit/qunit/qunit.js\"></script>\n<script src=\"../src/bower_components/sinon/index.js\"></script>\n<script src=\"../src/bower_components/jquery/dist/jquery.min.js\"></script>\n<script src=\"../src/bower_components/kbw-plugin/dist/js/jquery.plugin.min.js\"></script>\n<script>\n$.noRequestAnimationFrame = true; // Use setInterval which is faked by Sinon\n</script>\n<script src=\"../src/js/jquery.countdown.js\"></script>\n<script src=\"js/jquery.countdown.tests.js\"></script>\n</head>\n<body>\n<div id=\"qunit\"></div>\n<div id=\"qunit-fixture\">\n\t<div id=\"cd\"></div>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "test/js/jquery.countdown.tests.js",
    "content": "$(function() {\n\tclearInterval($.countdown._timer);\n\tvar clock = sinon.useFakeTimers(new Date(2016, 7-1, 1, 12, 0, 0, 0).getTime());\n\t$.noRequestAnimationFrame = true; // Use setInterval which is faked by Sinon\n\t$.JQPlugin.createPlugin('countdown', { // Reinitialise\n\t\tname: 'countdown'\n\t});\n\t\n\ttest('Set defaults', function() {\n\t\texpect(3);\n\t\tequal($.countdown.defaultOptions.alwaysExpire, false, 'Initial alwaysExpire');\n\t\t$.extend($.countdown.defaultOptions, {alwaysExpire: true});\n\t\tequal($.countdown.defaultOptions.alwaysExpire, true, 'Changed alwaysExpire');\n\t\t$.countdown.setDefaults({alwaysExpire: false});\n\t\tequal($.countdown.defaultOptions.alwaysExpire, false, 'Set defaults alwaysExpire');\n\t});\n\n\ttest('UTC date', function() {\n\t\texpect(10);\n\t\tvar time = new Date(2009, 1 - 1, 26, 11, 30);\n\t\tvar offset = 600 + time.getTimezoneOffset(); // Brisbane GMT+10\n\t\tequalTime($.countdown.UTCDate(-time.getTimezoneOffset(), time),\n\t\t\ttime, 'UTC date - local offset');\n\t\tequalTime($.countdown.UTCDate(+7, time),\n\t\t\tnew Date(2009, 1 - 1, 26, 14, 30 - offset), 'UTC date - +7');\n\t\tequalTime($.countdown.UTCDate(+60, time),\n\t\t\tnew Date(2009, 1 - 1, 26, 20, 30 - offset), 'UTC date - +60');\n\t\tequalTime($.countdown.UTCDate(-300, time),\n\t\t\tnew Date(2009, 1 - 1, 27, 2, 30 - offset), 'UTC date - -300');\n\t\tequalTime($.countdown.UTCDate(-8, time),\n\t\t\tnew Date(2009, 1 - 1, 27, 5, 30 - offset), 'UTC date - -8');\n\t\tequalTime($.countdown.UTCDate(-time.getTimezoneOffset(), 2009, 1 - 1, 26, 11, 30),\n\t\t\ttime, 'UTC date - local offset');\n\t\tequalTime($.countdown.UTCDate(+7, 2009, 1 - 1, 26, 11, 30),\n\t\t\tnew Date(2009, 1 - 1, 26, 14, 30 - offset), 'UTC date - +7');\n\t\tequalTime($.countdown.UTCDate(+60, 2009, 1 - 1, 26, 11, 30),\n\t\t\tnew Date(2009, 1 - 1, 26, 20, 30 - offset), 'UTC date - +60');\n\t\tequalTime($.countdown.UTCDate(-300, 2009, 1 - 1, 26, 11, 30),\n\t\t\tnew Date(2009, 1 - 1, 27, 2, 30 - offset), 'UTC date - -300');\n\t\tequalTime($.countdown.UTCDate(-8, 2009, 1 - 1, 26, 11, 30),\n\t\t\tnew Date(2009, 1 - 1, 27, 5, 30 - offset), 'UTC date - -8');\n\t});\n\n\ttest('Destroy', function() {\n\t\texpect(6);\n\t\tvar cd = init();\n\t\tok(typeof cd.data('countdown') !== 'undefined', 'Instance present');\n\t\tok(cd.html() !== '', 'Content present');\n\t\tok(cd.is('.is-countdown'), 'Marker class present');\n\t\tcd.countdown('destroy');\n\t\tcd = $('#cd');\n\t\tok(typeof cd.data('countdown') === 'undefined', 'Instance gone');\n\t\tok(cd.html() === '', 'Content gone');\n\t\tok(!(cd.is('.is-countdown')), 'Marker class gone');\n\t});\n\n\ttest('Content', function() {\n\t\texpect(23);\n\t\tvar cd = init();\n\t\tequal(cd.text(), '0Hours0Minutes0Secondsdescr', 'Content - default');\n\t\t// Full\n\t\tcd.countdown('option', {until: +5, description: ''});\n\t\tequal(cd.text(), '0Hours0Minutes5Seconds', 'Content full - +5');\n\t\tcd.countdown('option', {until: +3665});\n\t\tequal(cd.text(), '1Hour1Minute5Seconds', 'Content full - +3665');\n\t\tcd.countdown('option', {until: +5, format: 'MS'});\n\t\tequal(cd.text(), '0Minutes5Seconds', 'Content full - +5 MS');\n\t\tcd.countdown('option', {until: +65, format: 'MS'});\n\t\tequal(cd.text(), '1Minute5Seconds', 'Content full - +65 MS');\n\t\tcd.countdown('option', {until: +5, format: 'S'});\n\t\tequal(cd.text(), '5Seconds', 'Content full - +5 S');\n\t\tcd.countdown('option', {until: +65, format: 'S'});\n\t\tequal(cd.text(), '65Seconds', 'Content full - +65 S');\n\t\tcd.countdown('option', {until: +5, format: 'M'});\n\t\tequal(cd.text(), '1Minute', 'Content full - +5 M');\n\t\tcd.countdown('option', {until: +65, format: 'M'});\n\t\tequal(cd.text(), '2Minutes', 'Content full - +65 M');\n\t\tcd.countdown('option', {until: +5, format: 'H'});\n\t\tequal(cd.text(), '1Hour', 'Content full - +5 H');\n\t\tcd.countdown('option', {until: +3665, format: 'H'});\n\t\tequal(cd.text(), '2Hours', 'Content full - +3665 H');\n\t\tcd.countdown('option', {until: '+1y+2o+3d+4h+5m+6s', format: 'yodHMS'});\n\t\tequal(cd.text(), '1Year2Months3Days4Hours5Minutes6Seconds', 'Content full - +1y+2o+3d+4h+5m+6s yodHMS');\n\t\t// Compact\n\t\tcd.countdown('option', {until: +5, compact: true, format: 'dHMS'});\n\t\tequal(cd.text(), '00:00:05', 'Content compact - +5');\n\t\tcd.countdown('option', {until: +3665});\n\t\tequal(cd.text(), '01:01:05', 'Content compact - +3665');\n\t\tcd.countdown('option', {until: +5, format: 'MS'});\n\t\tequal(cd.text(), '00:05', 'Content compact - +5 MS');\n\t\tcd.countdown('option', {until: +65, format: 'MS'});\n\t\tequal(cd.text(), '01:05', 'Content compact - +65 MS');\n\t\tcd.countdown('option', {until: +5, format: 'S'});\n\t\tequal(cd.text(), '05', 'Content compact - +5 S');\n\t\tcd.countdown('option', {until: +65, format: 'S'});\n\t\tequal(cd.text(), '65', 'Content compact - +65 S');\n\t\tcd.countdown('option', {until: +5, format: 'M'});\n\t\tequal(cd.text(), '01', 'Content compact - +5 M');\n\t\tcd.countdown('option', {until: +65, format: 'M'});\n\t\tequal(cd.text(), '02', 'Content compact - +65 M');\n\t\tcd.countdown('option', {until: +5, format: 'H'});\n\t\tequal(cd.text(), '01', 'Content compact - +5 H');\n\t\tcd.countdown('option', {until: +3665, format: 'H'});\n\t\tequal(cd.text(), '02', 'Content compact - +3665 H');\n\t\tcd.countdown('option', {until: '+1y+2o+3d+4h+5m+6s', format: 'yodHMS'});\n\t\tequal(cd.text(), '1y 2m 3d 04:05:06', 'Content compact - +1y+2o+3d+4h+5m+6s yodHMS');\n\t});\n\n\ttest('Option', function() {\n\t\texpect(9);\n\t\tvar cd = init();\n\t\tvar inst = cd.data('countdown');\n\t\tequal(inst.options.description, 'descr', 'Default description - descr');\n\t\tcd.countdown('option', {description: 'abcdef'});\n\t\tequal(inst.options.description, 'abcdef', 'Change description - abcdef');\n\t\t$('#cd:first').countdown('option', {description: 'uvwxyz'});\n\t\tequal(inst.options.description, 'uvwxyz', 'Change description - uvwxyz');\n\t\tcd.countdown('option', {description: 'descr'});\n\t\tequal(inst.options.description, 'descr', 'Change description - descr');\n\t\tcd.countdown('option', 'description', 'abcdef');\n\t\tequal(inst.options.description, 'abcdef', 'Change description - abcdef');\n\t\tcd.countdown('option', 'description', 'descr');\n\t\tequal(inst.options.description, 'descr', 'Change description - descr');\n\t\t// Settings\n\t\tdeepEqual(cd.countdown('option'),\n\t\t\t{labels: ['Years', 'Months', 'Weeks', 'Days', 'Hours', 'Minutes', 'Seconds'],\n\t\t\tlabels1: ['Year', 'Month', 'Week', 'Day', 'Hour', 'Minute', 'Second'],\n\t\t\tcompactLabels: ['y', 'm', 'w', 'd'], whichLabels: null,\n\t\t\tdigits: ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'], timeSeparator: ':', isRTL: false,\n\t\t\tuntil: null, since: null, timezone: null, serverSync: null, format: 'dHMS',\n\t\t\tlayout: '', compact: false, padZeroes: false, significant: 0, description: 'descr',\n\t\t\texpiryUrl: '', expiryText: '', alwaysExpire: false, onExpiry: null, \n\t\t\tonTick: null, tickInterval: 1}, 'Settings - instance');\n\t\tequal(cd.countdown('option', 'description'), 'descr', 'Settings - description');\n\t\tequal(cd.countdown('option', 'layout'), '', 'Settings - layout');\n\t});\n\n\ttest('Timezones', function() {\n\t\texpect(6);\n\t\tvar cd = init();\n\t\tvar inst = cd.data('countdown');\n\t\tvar time = new Date();\n\t\ttime.setHours(time.getHours() + 3);\n\t\tvar offset = 600 + time.getTimezoneOffset(); // BNE GMT+10\n\t\tvar timez = new Date();\n\t\ttimez.setHours(timez.getHours() + 3);\n\t\tcd.countdown('option', {until: time});\n\t\tequalTime(inst._until, timez, 'Timezone - null');\n\t\tcd.countdown('option', {timezone: +7});\n\t\ttimez.setHours(timez.getHours() + 3);\n\t\ttimez.setMinutes(timez.getMinutes() - offset);\n\t\tequalTime(inst._until, timez, 'Timezone - +7');\n\t\tcd.countdown('option', {timezone: +240});\n\t\ttimez.setHours(timez.getHours() + 3);\n\t\tequalTime(inst._until, timez, 'Timezone - +240');\n\t\tcd.countdown('option', {timezone: -2});\n\t\ttimez.setHours(timez.getHours() + 6);\n\t\tequalTime(inst._until, timez, 'Timezone - -2');\n\t\tcd.countdown('option', {timezone: -480});\n\t\ttimez.setHours(timez.getHours() + 6);\n\t\tequalTime(inst._until, timez, 'Timezone - -480');\n\t\tcd.countdown('option', {timezone: null});\n\t\ttimez.setHours(timez.getHours() - 18);\n\t\ttimez.setMinutes(timez.getMinutes() + offset);\n\t\tequalTime(inst._until, timez, 'Timezone - null');\n\t});\n\n\ttest('Server sync', function() {\n\t\texpect(2);\n\t\tvar cd = init();\n\t\tvar inst = cd.data('countdown');\n\t\tvar serverTime = function(offset) {\n\t\t\treturn function() {\n\t\t\t\tvar time = new Date();\n\t\t\t\ttime.setMinutes(time.getMinutes() + offset);\n\t\t\t\treturn time;\n\t\t\t};\n\t\t};\n\t\tvar time = new Date();\n\t\ttime.setHours(time.getHours() + 3);\n\t\tvar timesync = new Date();\n\t\ttimesync.setHours(timesync.getHours() + 3);\n\t\ttimesync.setMinutes(timesync.getMinutes() - 5);\n\t\tcd.countdown('option', {until: time, serverSync: serverTime(+5)});\n\t\tequalTime(inst._until, timesync, 'Server sync - +5');\n\t\ttimesync.setMinutes(timesync.getMinutes() + 10);\n\t\tcd.countdown('option', {until: time, serverSync: serverTime(-5)});\n\t\tequalTime(inst._until, timesync, 'Server sync - -5');\n\t});\n\n\ttest('Server resync', function() {\n\t\texpect(3);\n\t\tvar cd = init();\n\t\tvar inst = cd.data('countdown');\n\t\tvar offset = 0;\n\t\tvar serverTime = function() {\n\t\t\tvar time = new Date();\n\t\t\ttime.setMinutes(time.getMinutes() + offset);\n\t\t\treturn time;\n\t\t};\n\t\tvar time = new Date();\n\t\ttime.setHours(time.getHours() + 3);\n\t\tvar timesync = new Date();\n\t\ttimesync.setHours(timesync.getHours() + 3);\n\t\tcd.countdown('option', {until: time, serverSync: serverTime});\n\t\tequalTime(inst._until, timesync, 'Server resync - 0');\n\t\toffset = 10;\n\t\ttimesync.setMinutes(timesync.getMinutes() - 10);\n\t\t$.countdown.resync();\n\t\tequalTime(inst._until, timesync, 'Server resync - +10');\n\t\toffset = -5;\n\t\ttimesync.setMinutes(timesync.getMinutes() + 15);\n\t\t$.countdown.resync();\n\t\tequalTime(inst._until, timesync, 'Server resync - -5');\n\t});\n\n\ttest('Until', function() {\n\t\texpect(19);\n\t\tvar cd = init();\n\t\tvar inst = cd.data('countdown');\n\t\tvar now = new Date();\n\t\tequalTime(inst._until, now, 'Until - null');\n\t\tvar until = new Date();\n\t\tuntil.setHours(until.getHours() + 1);\n\t\tcd.countdown('option', {until: until});\n\t\tequalTime(inst._until, until, 'Until - absolute +1H');\n\t\t// relative numeric\n\t\tuntil = new Date();\n\t\tuntil.setSeconds(until.getSeconds() + 200);\n\t\tcd.countdown('option', {until: +200});\n\t\tequalTime(inst._until, until, 'Until - +200');\n\t\t// relative alpha\n\t\tuntil = new Date();\n\t\tuntil.setSeconds(until.getSeconds() + 20);\n\t\tcd.countdown('option', {until: '+20s'});\n\t\tequalTime(inst._until, until, 'Until - +20s');\n\t\tuntil = new Date();\n\t\tuntil.setSeconds(until.getSeconds() + 40);\n\t\tcd.countdown('option', {until: ' +40 S '});\n\t\tequalTime(inst._until, until, 'Until - +40 S');\n\t\tuntil = new Date();\n\t\tuntil.setMinutes(until.getMinutes() + 10);\n\t\tcd.countdown('option', {until: '+10m'});\n\t\tequalTime(inst._until, until, 'Until - +10m');\n\t\tuntil = new Date();\n\t\tuntil.setMinutes(until.getMinutes() + 25);\n\t\tcd.countdown('option', {until: ' +25 M '});\n\t\tequalTime(inst._until, until, 'Until - +25 M');\n\t\tuntil = new Date();\n\t\tuntil.setHours(until.getHours() + 3);\n\t\tcd.countdown('option', {until: '+3h'});\n\t\tequalTime(inst._until, until, 'Until - +3h');\n\t\tuntil = new Date();\n\t\tuntil.setHours(until.getHours() + 15);\n\t\tcd.countdown('option', {until: ' +15 H '});\n\t\tequalTime(inst._until, until, 'Until - +15 H');\n\t\tuntil = new Date();\n\t\tuntil.setDate(until.getDate() + 4);\n\t\tcd.countdown('option', {until: '+4d'});\n\t\tequalTime(inst._until, until, 'Until - +4d');\n\t\tuntil = new Date();\n\t\tuntil.setDate(until.getDate() + 30);\n\t\tcd.countdown('option', {until: ' +30 D '});\n\t\tequalTime(inst._until, until, 'Until - +30 D');\n\t\tuntil = new Date();\n\t\tuntil.setDate(until.getDate() + 7 * 2);\n\t\tcd.countdown('option', {until: '+2w'});\n\t\tequalTime(inst._until, until, 'Until - +2w');\n\t\tuntil = new Date();\n\t\tuntil.setDate(until.getDate() + 7 * 10);\n\t\tcd.countdown('option', {until: ' +10 W '});\n\t\tequalTime(inst._until, until, 'Until - +10 W');\n\t\tuntil = new Date();\n\t\tuntil.setMonth(until.getMonth() + 2);\n\t\tcd.countdown('option', {until: '+2o'});\n\t\tequalTime(inst._until, until, 'Until - +2o');\n\t\tuntil = new Date();\n\t\tuntil.setMonth(until.getMonth() + 12);\n\t\tcd.countdown('option', {until: ' +12 O '});\n\t\tequalTime(inst._until, until, 'Until - +12 O');\n\t\tuntil = new Date();\n\t\tuntil.setFullYear(until.getFullYear() + 2);\n\t\tcd.countdown('option', {until: '+2y'});\n\t\tequalTime(inst._until, until, 'Until - +2y');\n\t\tuntil = new Date();\n\t\tuntil.setFullYear(until.getFullYear() + 5);\n\t\tcd.countdown('option', {until: ' +5 Y '});\n\t\tequalTime(inst._until, until, 'Until - +5 Y');\n\t\tuntil = new Date();\n\t\tuntil.setDate(until.getDate() + 7 * 2);\n\t\tuntil.setHours(until.getHours() + 2);\n\t\tcd.countdown('option', {until: '+2w +2h'});\n\t\tequalTime(inst._until, until, 'Until - +2w +2h');\n\t\tuntil = new Date();\n\t\tuntil.setFullYear(until.getFullYear() + 5);\n\t\tuntil.setMonth(until.getMonth() + 1);\n\t\tcd.countdown('option', {until: ' +5 Y  +1 O'});\n\t\tequalTime(inst._until, until, 'Until - until +5 Y +1 O');\n\t\t// reset\n\t\tcd.countdown('option', {until: null});\n\t});\n\n\ttest('Since', function() {\n\t\texpect(20);\n\t\tvar cd = init();\n\t\tvar inst = cd.data('countdown');\n\t\tvar now = new Date();\n\t\tok(inst._since === null, 'Since - null');\n\t\tvar since = new Date();\n\t\tsince.setHours(since.getHours() - 1);\n\t\tcd.countdown('option', {since: since});\n\t\tequalTime(inst._since, since, 'Since - absolute -1H');\n\t\t// relative numeric\n\t\tsince = new Date();\n\t\tcd.countdown('option', {since: 0});\n\t\tequalTime(inst._since, since, 'Since - 0');\n\t\tsince.setSeconds(since.getSeconds() - 200);\n\t\tcd.countdown('option', {since: -200});\n\t\tequalTime(inst._since, since, 'Since - -200');\n\t\t// relative alpha\n\t\tsince = new Date();\n\t\tsince.setSeconds(since.getSeconds() - 20);\n\t\tcd.countdown('option', {since: '-20s'});\n\t\tequalTime(inst._since, since, 'Since - -20s');\n\t\tsince = new Date();\n\t\tsince.setSeconds(since.getSeconds() - 40);\n\t\tcd.countdown('option', {since: ' -40 S '});\n\t\tequalTime(inst._since, since, 'Since - -40 S');\n\t\tsince = new Date();\n\t\tsince.setMinutes(since.getMinutes() - 10);\n\t\tcd.countdown('option', {since: '-10m'});\n\t\tequalTime(inst._since, since, 'Since - -10m');\n\t\tsince = new Date();\n\t\tsince.setMinutes(since.getMinutes() - 25);\n\t\tcd.countdown('option', {since: ' -25 M '});\n\t\tequalTime(inst._since, since, 'Since - -25 M');\n\t\tsince = new Date();\n\t\tsince.setHours(since.getHours() - 3);\n\t\tcd.countdown('option', {since: '-3h'});\n\t\tequalTime(inst._since, since, 'Since - -3h');\n\t\tsince = new Date();\n\t\tsince.setHours(since.getHours() - 15);\n\t\tcd.countdown('option', {since: ' -15 H '});\n\t\tequalTime(inst._since, since, 'Since - -15 H');\n\t\tsince = new Date();\n\t\tsince.setDate(since.getDate() - 4);\n\t\tcd.countdown('option', {since: '-4d'});\n\t\tequalTime(inst._since, since, 'Since - -4d');\n\t\tsince = new Date();\n\t\tsince.setDate(since.getDate() - 30);\n\t\tcd.countdown('option', {since: ' -30 D '});\n\t\tequalTime(inst._since, since, 'Since - -30 D');\n\t\tsince = new Date();\n\t\tsince.setDate(since.getDate() - 7 * 2);\n\t\tcd.countdown('option', {since: '-2w'});\n\t\tequalTime(inst._since, since, 'Since - -2w');\n\t\tsince = new Date();\n\t\tsince.setDate(since.getDate() - 7 * 10);\n\t\tcd.countdown('option', {since: ' -10 W '});\n\t\tequalTime(inst._since, since, 'Since - -10 W');\n\t\tsince = new Date();\n\t\tsince.setMonth(since.getMonth() - 2);\n\t\tcd.countdown('option', {since: '-2o'});\n\t\tequalTime(inst._since, since, 'Since - -2o');\n\t\tsince = new Date();\n\t\tsince.setMonth(since.getMonth() - 12);\n\t\tcd.countdown('option', {since: ' -12 O '});\n\t\tequalTime(inst._since, since, 'Since - -12 O');\n\t\tsince = new Date();\n\t\tsince.setFullYear(since.getFullYear() - 2);\n\t\tcd.countdown('option', {since: '-2y'});\n\t\tequalTime(inst._since, since, 'Since - -2y');\n\t\tsince = new Date();\n\t\tsince.setFullYear(since.getFullYear() - 5);\n\t\tcd.countdown('option', {since: ' -5 Y '});\n\t\tequalTime(inst._since, since, 'Since - -5 Y');\n\t\tsince = new Date();\n\t\tsince.setDate(since.getDate() - 7 * 2);\n\t\tsince.setHours(since.getHours() - 2);\n\t\tcd.countdown('option', {since: '-2w -2h'});\n\t\tequalTime(inst._since, since, 'Since - -2w -2h');\n\t\tsince = new Date();\n\t\tsince.setFullYear(since.getFullYear() - 5);\n\t\tsince.setMonth(since.getMonth() - 1);\n\t\tcd.countdown('option', {since: ' -5 Y  -1 O'});\n\t\tequalTime(inst._since, since, 'Since - -5 Y -1 O');\n\t\t// reset\n\t\tcd.countdown('option', {since: null});\n\t});\n\n\ttest('Get', function() {\n\t\texpect(2);\n\t\tvar cd = init();\n\t\tvar inst = cd.data('countdown');\n\t\tequal($.countdown.defaultOptions.description, '', 'Default description');\n\t\tequal(inst.options.description, 'descr', 'Instance description');\n\t});\n\n\ttest('Get times', function() {\n\t\texpect(7);\n\t\tvar cd = init();\n\t\tvar inst = cd.data('countdown');\n\t\tcd.countdown('option', {format: 'YOWDHMS'});\n\t\tdeepEqual(cd.countdown('getTimes'), [0, 0, 0, 0, 0, 0, 0], 'Get time - nothing set');\n\t\tcd.countdown('option', {until: '+1y +2o +3w +4d +5h +6m +7s'});\n\t\tdeepEqual(cd.countdown('getTimes'), [1, 2, 3, 4, 5, 6, 7], 'Get time - until +1y +2o +3w +4d +5h +6m +7s');\n\t\tcd.countdown('option', {until: '+1y +3w +5h +7s'});\n\t\tdeepEqual(cd.countdown('getTimes'), [1, 0, 3, 0, 5, 0, 7], 'Get time - until +1y +3w +5h +7s');\n\t\tcd.countdown('option', {until: '+2o +4d +6m'});\n\t\tdeepEqual(cd.countdown('getTimes'), [0, 2, 0, 4, 0, 6, 0], 'Get time - until +2o +4d +6m');\n\t\tcd.countdown('option', {since: '-1y -2o -3w -4d -5h -6m -7s'});\n\t\tdeepEqual(cd.countdown('getTimes'), [1, 2, 3, 4, 5, 6, 7], 'Get time - since -1y -2o -3w -4d -5h -6m -7s');\n\t\tcd.countdown('option', {since: '-1y -3w -5h -7s'});\n\t\tdeepEqual(cd.countdown('getTimes'), [1, 0, 3, 0, 5, 0, 7], 'Get time - since -1y -3w -5h -7s');\n\t\tcd.countdown('option', {since: '-2o -4d -6m'});\n\t\tdeepEqual(cd.countdown('getTimes'), [0, 2, 0, 4, 0, 6, 0], 'Get time - since -2o -4d -6m');\n\t});\n\n\ttest('Calculate periods', function() {\n\t\texpect(38);\n\t\tvar cd = init();\n\t\tvar inst = cd.data('countdown');\n\t\t// Until\n\t\tcd.countdown('option', {until: '+1y +2o +3d +4h +5m +6s'});\n\t\tvar now = new Date();\n\t\tdeepEqual($.countdown._calculatePeriods(inst, generateShow('yodHMS'), 0, now),\n\t\t\t[1, 2, 0, 3, 4, 5, 6],\n\t\t\t'Calculate periods - yodHMS until +1y +2o +3d +4h +5m +6s');\n\t\tnow.setMilliseconds(0);\n\t\tvar days = Math.floor((inst._until.getTime() - now.getTime()) / (24 * 60 * 60 * 1000));\n\t\tnow = new Date();\n\t\tdeepEqual($.countdown._calculatePeriods(inst, generateShow('YODHMS'), 0, now),\n\t\t\t[1, 2, 0, 3, 4, 5, 6],\n\t\t\t'Calculate periods - YODHMS until +1y +2o +3d +4h +5m +6s');\n\t\tnow = new Date();\n\t\tdeepEqual($.countdown._calculatePeriods(inst, generateShow('odHMS'), 0, now),\n\t\t\t[0, 14, 0, 3, 4, 5, 6],\n\t\t\t'Calculate periods - odHMS until +1y +2o +3d +4h +5m +6s');\n\t\tnow = new Date();\n\t\tdeepEqual($.countdown._calculatePeriods(inst, generateShow('wHMS'), 0, now),\n\t\t\t[0, 0, Math.floor(days / 7), 0, (days % 7) * 24 + 4, 5, 6],\n\t\t\t'Calculate periods - wHMS until +1y +2o +3d +4h +5m +6s');\n\t\tnow = new Date();\n\t\tdeepEqual($.countdown._calculatePeriods(inst, generateShow('dHMS'), 0, now),\n\t\t\t[0, 0, 0, days, 4, 5, 6],\n\t\t\t'Calculate periods - dHMS until +1y +2o +3d +4h +5m +6s');\n\t\tnow = new Date();\n\t\tdeepEqual($.countdown._calculatePeriods(inst, generateShow('hms'), 0, now),\n\t\t\t[0, 0, 0, 0, days * 24 + 4, 5, 6],\n\t\t\t'Calculate periods - hms until +1y +2o +3d +4h +5m +6s');\n\t\tnow = new Date();\n\t\tdeepEqual($.countdown._calculatePeriods(inst, generateShow('MS'), 0, now),\n\t\t\t[0, 0, 0, 0, 0, (days * 24 + 4) * 60 + 5, 6],\n\t\t\t'Calculate periods - MS until +1y +2o +3d +4h +5m +6s');\n\t\tnow = new Date();\n\t\tdeepEqual($.countdown._calculatePeriods(inst, generateShow('s'), 0, now),\n\t\t\t[0, 0, 0, 0, 0, 0, ((days * 24 + 4) * 60 + 5) * 60 + 6],\n\t\t\t'Calculate periods - s until +1y +2o +3d +4h +5m +6s');\n\t\tnow = new Date();\n\t\tnow.setFullYear(now.getFullYear() + 1);\n\t\tnow.setMilliseconds(0);\n\t\tdays = Math.floor((inst._until.getTime() - now.getTime()) / (24 * 60 * 60 * 1000));\n\t\tnow = new Date();\n\t\tdeepEqual($.countdown._calculatePeriods(inst, generateShow('YDS'), 0, now),\n\t\t\t[1, 0, 0, days, 0, 0, 14706],\n\t\t\t'Calculate periods - YDS until +1y +2o +3d +4h +5m +6s');\n\t\tcd.countdown('option', {until: new Date(2009, 7 - 1, 20)});\n\t\tnow = new Date(2009, 4 - 1, 20, 11);\n\t\tdeepEqual($.countdown._calculatePeriods(inst, generateShow('OWDHM'), 0, now),\n\t\t\t[0, 2, 4, 1, 13, 0, 0],\n\t\t\t'Calculate periods - OWDHM until start of today + 3 months');\n\t\tcd.countdown('option', {until: new Date(2009, 6 - 1, 30)});\n\t\tnow = new Date(2009, 3 - 1, 31);\n\t\tdeepEqual($.countdown._calculatePeriods(inst, generateShow('OWDHM'), 0, now),\n\t\t\t[0, 3, 0, 0, 0, 0, 0],\n\t\t\t'Calculate periods - OWDHM until 31/03 to 30/06');\n\t\tnow = new Date(2009, 3 - 1, 31, 11);\n\t\tdeepEqual($.countdown._calculatePeriods(inst, generateShow('OWDHM'), 0, now),\n\t\t\t[0, 2, 4, 1, 13, 0, 0],\n\t\t\t'Calculate periods - OWDHM until 31/03 11:00 to 30/06 00:00');\n\t\tcd.countdown('option', {until: new Date(2009, 8 - 1, 31)});\n\t\tnow = new Date(2009, 6 - 1, 30);\n\t\tdeepEqual($.countdown._calculatePeriods(inst, generateShow('OWDHM'), 0, now),\n\t\t\t[0, 2, 0, 0, 0, 0, 0],\n\t\t\t'Calculate periods - OWDHM until 30/06 to 31/08');\n\t\tnow = new Date(2009, 6 - 1, 30, 11);\n\t\tdeepEqual($.countdown._calculatePeriods(inst, generateShow('OWDHM'), 0, now),\n\t\t\t[0, 1, 4, 2, 13, 0, 0],\n\t\t\t'Calculate periods - OWDHM until 30/06 11:00 to 31/08 00:00');\n\t\t// With rounding\n\t\tcd.countdown('option', {until: '13d 23h 59m 10s', format: 'YOWDHM'});\n\t\tnow = new Date();\n\t\tdeepEqual($.countdown._calculatePeriods(inst, generateShow('YOWDHM'), 0, now),\n\t\t\t[0, 0, 2, 0, 0, 0, 0],\n\t\t\t'Calculate periods - YOWDHM until 13d 23h 59m 10s');\n\t\tcd.countdown('option', {until: '13d 23h 59m -10s', format: 'YOWDHM'});\n\t\tnow = new Date();\n\t\tdeepEqual($.countdown._calculatePeriods(inst, generateShow('YOWDHM'), 0, now),\n\t\t\t[0, 0, 1, 6, 23, 59, 0],\n\t\t\t'Calculate periods - YOWDHM until 13d 23h 59m -10s');\n\t\tcd.countdown('option', {until: '13d 23h 10s', format: 'YOWDH'});\n\t\tnow = new Date();\n\t\tdeepEqual($.countdown._calculatePeriods(inst, generateShow('YOWDH'), 0, now),\n\t\t\t[0, 0, 2, 0, 0, 0, 0],\n\t\t\t'Calculate periods - YOWDH until 13d 23h 10s');\n\t\tcd.countdown('option', {until: '13d 23h -10s', format: 'YOWDH'});\n\t\tnow = new Date();\n\t\tdeepEqual($.countdown._calculatePeriods(inst, generateShow('YOWDH'), 0, now),\n\t\t\t[0, 0, 1, 6, 23, 0, 0],\n\t\t\t'Calculate periods - YOWDH until 13d 23h -10s');\n\t\tcd.countdown('option', {until: '13d 23h 59m 10s', format: 'YOWDM'});\n\t\tnow = new Date();\n\t\tdeepEqual($.countdown._calculatePeriods(inst, generateShow('YOWDM'), 0, now),\n\t\t\t[0, 0, 2, 0, 0, 0, 0],\n\t\t\t'Calculate periods - YOWDM until 13d 23h 59m 10s');\n\t\tcd.countdown('option', {until: '13d 23h 59m -10s', format: 'YOWDM'});\n\t\tnow = new Date();\n\t\tdeepEqual($.countdown._calculatePeriods(inst, generateShow('YOWDM'), 0, now),\n\t\t\t[0, 0, 1, 6, 0, 1439, 0],\n\t\t\t'Calculate periods - YOWDM until 13d 23h 59m -10s');\n\t\tcd.countdown('option', {until: '13d 23h 59m 10s', format: 'YOWD'});\n\t\tnow = new Date();\n\t\tdeepEqual($.countdown._calculatePeriods(inst, generateShow('YOWD'), 0, now),\n\t\t\t[0, 0, 2, 0, 0, 0, 0],\n\t\t\t'Calculate periods - YOWD until 13d 23h 59m 10s');\n\t\tcd.countdown('option', {until: '13d 23h 59m -10s', format: 'YOWD'});\n\t\tnow = new Date();\n\t\tdeepEqual($.countdown._calculatePeriods(inst, generateShow('YOWD'), 0, now),\n\t\t\t[0, 0, 2, 0, 0, 0, 0],\n\t\t\t'Calculate periods - YOWD until 13d 23h 59m -10s');\n\t\t// Since\n\t\tcd.countdown('option', {since: '-1y -2o -3d -4h -5m -6s', until: null});\n\t\tvar now = new Date();\n\t\tdeepEqual($.countdown._calculatePeriods(inst, generateShow('yodHMS'), 0, now),\n\t\t\t[1, 2, 0, 3, 4, 5, 6],\n\t\t\t'Calculate periods - yodHMS since -1y -2o -3d -4h -5m -6s');\n\t\tnow.setMilliseconds(0);\n\t\tdays = Math.floor((now.getTime() - inst._since.getTime()) / (24 * 60 * 60 * 1000));\n\t\tnow = new Date();\n\t\tdeepEqual($.countdown._calculatePeriods(inst, generateShow('YODHMS'), 0, now),\n\t\t\t[1, 2, 0, 3, 4, 5, 6],\n\t\t\t'Calculate periods - YODHMS since -1y -2o -3d -4h -5m -6s');\n\t\tnow = new Date();\n\t\tdeepEqual($.countdown._calculatePeriods(inst, generateShow('odHMS'), 0, now),\n\t\t\t[0, 14, 0, 3, 4, 5, 6],\n\t\t\t'Calculate periods - odHMS since -1y -2o -3d -4h -5m -6s');\n\t\tnow = new Date();\n\t\tdeepEqual($.countdown._calculatePeriods(inst, generateShow('wHMS'), 0, now),\n\t\t\t[0, 0, Math.floor(days / 7), 0, (days % 7) * 24 + 4, 5, 6],\n\t\t\t'Calculate periods - wHMS since -1y -2o -3d -4h -5m -6s');\n\t\tnow = new Date();\n\t\tdeepEqual($.countdown._calculatePeriods(inst, generateShow('dHMS'), 0, now),\n\t\t\t[0, 0, 0, days, 4, 5, 6],\n\t\t\t'Calculate periods - dHMS since -1y -2o -3d -4h -5m -6s');\n\t\tnow = new Date();\n\t\tdeepEqual($.countdown._calculatePeriods(inst, generateShow('hms'), 0, now),\n\t\t\t[0, 0, 0, 0, days * 24 + 4, 5, 6],\n\t\t\t'Calculate periods - hms since -1y -2o -3d -4h -5m -6s');\n\t\tnow = new Date();\n\t\tdeepEqual($.countdown._calculatePeriods(inst, generateShow('MS'), 0, now),\n\t\t\t[0, 0, 0, 0, 0, (days * 24 + 4) * 60 + 5, 6],\n\t\t\t'Calculate periods - MS since -1y -2o -3d -4h -5m -6s');\n\t\tnow = new Date();\n\t\tdeepEqual($.countdown._calculatePeriods(inst, generateShow('s'), 0, now), \n\t\t\t[0, 0, 0, 0, 0, 0, ((days * 24 + 4) * 60 + 5) * 60 + 6],\n\t\t\t'Calculate periods - s since -1y -2o -3d -4h -5m -6s');\n\t\tnow = new Date();\n\t\tnow.setHours(0);\n\t\tnow.setMinutes(0);\n\t\tnow.setSeconds(0);\n\t\tnow.setMilliseconds(0);\n\t\tvar then = new Date(inst._since.getTime());\n\t\tthen.setFullYear(then.getFullYear() + 1);\n\t\tthen.setHours(0);\n\t\tthen.setMinutes(0);\n\t\tthen.setSeconds(0);\n\t\tthen.setMilliseconds(0);\n\t\tdays = Math.ceil((now.getTime() - then.getTime()) / (24 * 60 * 60 * 1000));\n\t\tnow = new Date();\n\t\tdeepEqual($.countdown._calculatePeriods(inst, generateShow('YDS'), 0, now),\n\t\t\t[1, 0, 0, days, 0, 0, 14706],\n\t\t\t'Calculate periods - YDS since -1y -2o -3d -4h -5m -6s');\n\t\tcd.countdown('option', {since: new Date(2009, 4 - 1, 20, 11)});\n\t\tnow = new Date(2009, 7 - 1, 20);\n\t\tdeepEqual($.countdown._calculatePeriods(inst, generateShow('OWDHM'), 0, now),\n\t\t\t[0, 2, 4, 1, 13, 0, 0],\n\t\t\t'Calculate periods - OWDHM since start of today - 3 months');\n\t\tcd.countdown('option', {since: new Date(2009, 7 - 1, 31)});\n\t\tnow = new Date(2009, 9 - 1, 30);\n\t\tdeepEqual($.countdown._calculatePeriods(inst, generateShow('OWDHM'), 0, now),\n\t\t\t[0, 2, 0, 0, 0, 0, 0],\n\t\t\t'Calculate periods - OWDHM since 31/07 to 30/09');\n\t\tcd.countdown('option', {since: new Date(2009, 7 - 1, 31, 11)});\n\t\tdeepEqual($.countdown._calculatePeriods(inst, generateShow('OWDHM'), 0, now),\n\t\t\t[0, 1, 4, 1, 13, 0, 0],\n\t\t\t'Calculate periods - OWDHM since 31/07 11:00 to 30/09 00:00');\n\t\tcd.countdown('option', {since: new Date(2009, 6 - 1, 30)});\n\t\tnow = new Date(2009, 8 - 1, 31);\n\t\tdeepEqual($.countdown._calculatePeriods(inst, generateShow('OWDHM'), 0, now),\n\t\t\t[0, 2, 0, 0, 0, 0, 0],\n\t\t\t'Calculate periods - OWDHM since 30/06 to 31/08');\n\t\tcd.countdown('option', {since: new Date(2009, 6 - 1, 30, 11)});\n\t\tdeepEqual($.countdown._calculatePeriods(inst, generateShow('OWDHM'), 0, now),\n\t\t\t[0, 1, 4, 2, 13, 0, 0],\n\t\t\t'Calculate periods - OWDHM since 30/06 11:00 to 31/08 00:00');\n\t\t// With rounding\n\t\tcd.countdown('option', {since: '-13d -23h -59m 10s', format: 'YOWDHM'});\n\t\tnow = new Date();\n\t\tdeepEqual($.countdown._calculatePeriods(inst, generateShow('YOWDHM'), 0, now),\n\t\t\t[0, 0, 1, 6, 23, 58, 0],\n\t\t\t'Calculate periods - YOWDHM since -13d -23h -59m 10s');\n\t\tcd.countdown('option', {since: '-13d -23h -59m -10s', format: 'YOWDHM'});\n\t\tnow = new Date();\n\t\tdeepEqual($.countdown._calculatePeriods(inst, generateShow('YOWDHM'), 0, now),\n\t\t\t[0, 0, 1, 6, 23, 59, 0],\n\t\t\t'Calculate periods - YOWDHM since -13d -23h -59m -10s');\n\t});\n\n\ttest('Significant', function() {\n\t\texpect(11);\n\t\tvar cd = init({format: 'yowdHMS', description: ''});\n\t\tvar inst = cd.data('countdown');\n\t\t// Until\n\t\tcd.countdown('option', {until: '+1y +2o +3d +4h +5m +6s', significant: 2});\n\t\tvar now = new Date();\n\t\tdeepEqual($.countdown._calculatePeriods(inst, generateShow('yodHMS'), 2, now),\n\t\t\t[1, 2, 0, 0, 0, 0, 0],\n\t\t\t'Significant periods - 2 yodHMS until +1y +2o +3d +4h +5m +6s');\n\t\tequal(cd.text(), '1Year2Months', 'Significant text - 2');\n\t\tcd.countdown('option', {until: '+1y +2o +3d +4h +5m +6s', significant: 3});\n\t\tnow = new Date();\n\t\tdeepEqual($.countdown._calculatePeriods(inst, generateShow('yodHMS'), 3, now),\n\t\t\t[1, 2, 0, 3, 0, 0, 0],\n\t\t\t'Significant periods - 3 yodHMS until +1y +2o +3d +4h +5m +6s');\n\t\tequal(cd.text(), '1Year2Months3Days', 'Significant text - 3');\n\t\tcd.countdown('option', {until: '+4h', significant: 2});\n\t\tnow = new Date();\n\t\tdeepEqual($.countdown._calculatePeriods(inst, generateShow('yodHMS'), 2, now),\n\t\t\t[0, 0, 0, 0, 4, 0, 0],\n\t\t\t'Significant periods - 2 yodHMS until +4h');\n\t\tequal(cd.text(), '4Hours0Seconds', 'Significant text - 2');\n\t\tcd.countdown('option', {until: '+4h', format: 'dHM', significant: 2});\n\t\tnow = new Date();\n\t\tdeepEqual($.countdown._calculatePeriods(inst, generateShow('dHM'), 2, now),\n\t\t\t[0, 0, 0, 0, 4, 0, 0],\n\t\t\t'Significant periods - 2 dHM until +4h');\n\t\tequal(cd.text(), '4Hours0Minutes', 'Significant text - 2');\n\t\tcd.countdown('option', {until: '+4h', format: 'dHM', significant: 3});\n\t\tnow = new Date();\n\t\tdeepEqual($.countdown._calculatePeriods(inst, generateShow('dHM'), 3, now),\n\t\t\t[0, 0, 0, 0, 4, 0, 0],\n\t\t\t'Significant periods - 3 dHM until +4h');\n\t\tequal(cd.text(), '0Days4Hours0Minutes', 'Significant text - 3');\n\t\tcd.countdown('option', {until: '+1y +2o +3d +4h +5m +6s', format: 'yodHMS', significant: 3,\n\t\t\tlayout: '{y<}{yn} {yl} {y>}{o<}{on} {ol} {o>}{w<}{wn} {wl} {w>}' +\n\t\t\t'{d<}{dn} {dl} {d>}{h<}{hn} {hl} {h>}{m<}{mn} {ml} {m>}{s<}{sn} {sl}{s>}'});\n\t\tnow = new Date();\n\t\tequal(cd.text(), '1 Year 2 Months 3 Days ', 'Significant layout - 3');\n\t});\n\n\ttest('Periods to seconds', function() {\n\t\texpect(3);\n\t\tequal($.countdown.periodsToSeconds([0, 0, 0, 0, 1, 2, 3]), 3723,\n\t\t\t'Periods to seconds - 0, 0, 0, 0, 1, 2, 3');\n\t\tequal($.countdown.periodsToSeconds([0, 0, 1, 2, 0, 0, 0]), 777600,\n\t\t\t'Periods to seconds - 0, 0, 1, 2, 0, 0, 0');\n\t\tequal($.countdown.periodsToSeconds([1, 2, 0, 3, 4, 5, 6]), 37091106,\n\t\t\t'Periods to seconds - 1, 2, 0, 3, 4, 5, 6');\n\t});\n\n\ttest('Layouts', function() {\n\t\texpect(16);\n\t\tvar cd = init();\n\t\tvar inst = cd.data('countdown');\n\t\tvar show = generateShow('YODHMS');\n\t\tcd.countdown('option', {until: '+1y +2o +3d +4h +5m +6s',\n\t\t\tformat: 'YODHMS', description: 'until then'});\n\t\tequal($.countdown._buildLayout(inst, show, '{yn} {yl}', false),\n\t\t\t'1 Year', 'Layout - {yn} {yl}');\n\t\tequal($.countdown._buildLayout(inst, show, '{on} {ol}', false),\n\t\t\t'2 Months', 'Layout - {on} {ol}');\n\t\tequal($.countdown._buildLayout(inst, show, '{wn} {wl}', false),\n\t\t\t'0 Weeks', 'Layout - {wn} {wl}');\n\t\tequal($.countdown._buildLayout(inst, show, '{dn} {dl}', false),\n\t\t\t'3 Days', 'Layout - {dn} {dl}');\n\t\tequal($.countdown._buildLayout(inst, show, '{hn} {hl}', false),\n\t\t\t'4 Hours', 'Layout - {hn} {hl}');\n\t\tequal($.countdown._buildLayout(inst, show, '{mn} {ml}', false),\n\t\t\t'5 Minutes', 'Layout - {mn} {ml}');\n\t\tequal($.countdown._buildLayout(inst, show, '{sn} {sl}', false),\n\t\t\t'6 Seconds', 'Layout - {sn} {sl}');\n\t\tequal($.countdown._buildLayout(inst, show, '{yn} {yl}, {on} {ol}, {dn} {dl}, ' +\n\t\t\t'{hn} {hl}, {mn} {ml}, {sn} {sl}', false),\n\t\t\t'1 Year, 2 Months, 3 Days, 4 Hours, 5 Minutes, 6 Seconds',\n\t\t\t'Layout - {yn} {yl}, {on} {ol}, {dn} {dl}, {hn} {hl}, {mn} {ml}, {sn} {sl}');\n\t\tequal($.countdown._buildLayout(inst, show, '{ynn} {yl} + {onn} {ol} + {dnn} {dl} and ' +\n\t\t\t'{hnn} {hl}:{mnn} {ml}:{snn} {sl}', false),\n\t\t\t'01 Year + 02 Months + 03 Days and 04 Hours:05 Minutes:06 Seconds',\n\t\t\t'Layout - {ynn} {yl} + {onn} {ol} + {dnn} {dl} and ' +\n\t\t\t'{hnn} {hl}:{mnn} {ml}:{snn} {sl}');\n\t\tequal($.countdown._buildLayout(inst, show, '{ynnn} {yl} + {onnn} {ol} + {dnnn} {dl} and ' +\n\t\t\t'{hnnn} {hl}:{mnnn} {ml}:{snnn} {sl}', false),\n\t\t\t'001 Year + 002 Months + 003 Days and 004 Hours:005 Minutes:006 Seconds',\n\t\t\t'Layout - {ynnn} {yl} + {onnn} {ol} + {dnnn} {dl} and ' +\n\t\t\t'{hnnn} {hl}:{mnnn} {ml}:{snnn} {sl}');\n\t\tequal($.countdown._buildLayout(inst, show,\n\t\t\t'<ul><li>{yn} {yl}</li><li>{on} {ol}</li><li>{dn} {dl}</li>' +\n\t\t\t'<li>{hn} {hl}</li><li>{mn} {ml}</li><li>{sn} {sl}</li></ul>', false),\n\t\t\t'<ul><li>1 Year</li><li>2 Months</li><li>3 Days</li>' +\n\t\t\t'<li>4 Hours</li><li>5 Minutes</li><li>6 Seconds</li></ul>',\n\t\t\t'Layout - <ul><li>{yn} {yl}</li><li>{on} {ol}</li><li>{dn} {dl}</li>' +\n\t\t\t'<li>{hn} {hl}</li><li>{mn} {ml}</li><li>{sn} {sl}</li></ul>');\n\t\tequal($.countdown._buildLayout(inst, show,\n\t\t\t'{hn} {hl}, {mn} {ml}, {sn} {sl} ({hnn}:{mnn}:{snn})', false),\n\t\t\t'4 Hours, 5 Minutes, 6 Seconds (04:05:06)',\n\t\t\t'Layout - {hn} {hl}, {mn} {ml}, {sn} {sl} ({hnn}:{mnn}:{snn})');\n\t\tcd.countdown('option', {compactLabels1: ['Yr', 'Mn', 'W', 'Dy']});\n\t\tequal($.countdown._buildLayout(inst, show, '{yn} {yl}, {on} {ol}, {dn} {dl}, ' +\n\t\t\t'{hnn}{sep}{mnn}{sep}{snn} {desc}', true),\n\t\t\t'1 Yr, 2 m, 3 d, 04:05:06 until then',\n\t\t\t'Layout - {yn} {yl}, {on} {ol}, {dn} {dl}, {hnn}{sep}{mnn}{sep}{snn} {desc}');\n\t\tshow = generateShow('OHMS');\n\t\tcd.countdown('option', {format: 'OHMS'});\n\t\tequal($.countdown._buildLayout(inst, show, '{y<}{yn} {yl}, {y>}{o<}{on} {ol}, {o>}{d<}{dn} {dl}, {d>}' +\n\t\t\t'{h<}{hn} {hl}, {h>}{m<}{mn} {ml}, {m>}{s<}{sn} {sl}{s>}', false),\n\t\t\t'14 Months, 76 Hours, 5 Minutes, 6 Seconds',\n\t\t\t'Layout - {y<}{yn} {yl}, {y>}{o<}{on} {ol}, {o>}{d<}{dn} {dl}, {d>}' +\n\t\t\t'{h<}{hn} {hl}, {h>}{m<}{mn} {ml}, {m>}{s<}{sn} {sl}{s>}');\n\t\tshow = generateShow('YODHMS');\n\t\tcd.countdown('option', {format: 'YODHMS', until: '+123y +2o +15d +16h +37m +48s'});\n\t\tequal($.countdown._buildLayout(inst, show,\n\t\t\t'{y100} {y10} {y1} {o100} {o10} {o1} {w100} {w10} {w1} {d100} {d10} {d1} ' +\n\t\t\t'{h100} {h10} {h1} {m100} {m10} {m1} {s100} {s10} {s1}', false),\n\t\t\t'1 2 3 0 0 2 0 0 0 0 1 5 0 1 6 0 3 7 0 4 8',\n\t\t\t'Layout - {y100} {y10} {y1} {o100} {o10} {o1} {w100} {w10} {w1} ' +\n\t\t\t'{d100} {d10} {d1} {h100} {h10} {h1} {m100} {m10} {m1} {s100} {s10} {s1}');\n\t\tequal($.countdown._buildLayout(inst, show, '{} {x100} {xn} {xl}', false),\n\t\t\t'{} {x100} {xn} {xl}', 'Layout - {} {x100} {xn} {xl}');\n\t});\n\n\ttest('Labels', function() {\n\t\texpect(4);\n\t\tvar cd = init();\n\t\tvar plurals2 = ['Y2ars', 'M2nths', 'W2eks', 'D2ys', 'H2urs', 'M2nutes', 'S2conds'];\n\t\tvar plurals3 = ['Y3ars', 'M3nths', 'W3eks', 'D3ys', 'H3urs', 'M3nutes', 'S3conds'];\n\t\tcd.countdown('option', {until: '+1y+2o+3d+4h+5m+6s',\n\t\t\tformat: 'yodHMS', description: ''});\n\t\tequal(cd.text(), '1Year2Months3Days4Hours5Minutes6Seconds',\n\t\t\t'Labels standard - +1y+2o+3d+4h+5m+6s yodHMS');\n\t\tcd.countdown('option', {until: '+1y+2o+3d+4h+5m+6s',\n\t\t\tlabels2: plurals2, labels3: plurals3});\n\t\tequal(cd.text(), '1Year2M2nths3D3ys4Hours5Minutes6Seconds',\n\t\t\t'Labels custom - +1y+2o+3d+4h+5m+6s yodHMS');\n\t\tcd.countdown('option', {until: '+1y+2o+3d+4h+5m+6s',\n\t\t\tlabels: $.countdown.defaultOptions.labels});\n\t\tequal(cd.text(), '1Year2Months3Days4Hours5Minutes6Seconds',\n\t\t\t'Labels reset - +1y+2o+3d+4h+5m+6s yodHMS');\n\t\tcd.countdown('option', {until: '+1y+2o+3d+4h+5m+6s',\n\t\t\tlabels2: plurals2, labels3: plurals3,\n\t\t\twhichLabels: function(amount) { return amount % 2 + 2; }});\n\t\tequal(cd.text(), '1Y3ars2M2nths3D3ys4H2urs5M3nutes6S2conds',\n\t\t\t'Labels which - +1y+2o+3d+4h+5m+6s yodHMS');\n\t});\n\n\ttest('Digits', function() {\n\t\texpect(3);\n\t\tvar cd = init({digits: ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']});\n\t\tcd.countdown('option', {until: '+1y+2o+3d+4h+5m+6s',\n\t\t\tformat: 'yodHMS', description: ''});\n\t\tequal(cd.text(), 'BYearCMonthsDDaysEHoursFMinutesGSeconds',\n\t\t\t'Digits - +1y+2o+3d+4h+5m+6s yodHMS');\n\t\tcd.countdown('option', {until: '+1y+2o+3d+4h+5m+6s', compact: true});\n\t\tequal(cd.text(), 'By Cm Dd AE:AF:AG',\n\t\t\t'Digits compact - +1y+2o+3d+4h+5m+6s yodHMS');\n\t\tcd.countdown('option', {until: '+1y+2o+3d+4h+5m+6s',\n\t\t\tlayout: '{ynnn} {onn} {dn} {h10}{h1}:{m10}{m1}:{s10}{s1}'});\n\t\tequal(cd.text(), 'AAB AC D AE:AF:AG',\n\t\t\t'Digits layout - +1y+2o+3d+4h+5m+6s yodHMS');\n\t});\n\n\ttest('Expiry', function() {\n\t\texpect(4);\n\t\tvar expired = false;\n\t\tvar doExpiry = function() {\n\t\t\texpired = true;\n\t\t};\n\t\tvar cd = init({onExpiry: doExpiry, alwaysExpire: true, description: ''});\n\t\tequal(expired, true, 'Expiry - onExpiry');\n\t\tequal(cd.text(), '0Hours0Minutes0Seconds', 'Expiry - no expiryText');\n\t\texpired = false;\n\t\tcd.countdown('option', {onExpiry: null, expiryText: 'All over'});\n\t\tequal(expired, false, 'Expiry - no onExpiry');\n\t\tequal(cd.text(), 'All over', 'Expiry - expiryText');\n\t});\n\n\ttest('Pause', function() {\n\t\texpect(4);\n\t\tvar cd = init({until: +5, description: ''});\n\t\tequal(cd.text(), '0Hours0Minutes5Seconds', 'Pause - initial');\n\t\tclock.tick(1000);\n\t\tequal(cd.text(), '0Hours0Minutes4Seconds', 'Pause - tick');\n\t\tcd.countdown('pause');\n\t\tclock.tick(2000);\n\t\tequal(cd.text(), '0Hours0Minutes4Seconds', 'Pause - paused');\n\t\tcd.countdown('resume');\n\t\tclock.tick(2000);\n\t\tequal(cd.text(), '0Hours0Minutes2Seconds', 'Pause - resumed');\n\t});\n\n\ttest('Pause toggle', function() {\n\t\texpect(4);\n\t\tvar cd = init({until: +5, description: ''});\n\t\tequal(cd.text(), '0Hours0Minutes5Seconds', 'Pause toggle - initial');\n\t\tclock.tick(1000);\n\t\tequal(cd.text(), '0Hours0Minutes4Seconds', 'Pause toggle - tick');\n\t\tcd.countdown('toggle');\n\t\tclock.tick(2000);\n\t\tequal(cd.text(), '0Hours0Minutes4Seconds', 'Pause toggle - paused');\n\t\tcd.countdown('toggle');\n\t\tclock.tick(2000);\n\t\tequal(cd.text(), '0Hours0Minutes2Seconds', 'Pause toggle - resumed');\n\t});\n\n\ttest('Lap', function() {\n\t\texpect(4);\n\t\tvar cd = init({until: +5, description: ''});\n\t\tequal(cd.text(), '0Hours0Minutes5Seconds', 'Lap - initial');\n\t\tclock.tick(1000);\n\t\tequal(cd.text(), '0Hours0Minutes4Seconds', 'Lap - tick');\n\t\tcd.countdown('lap');\n\t\tclock.tick(2000);\n\t\tequal(cd.text(), '0Hours0Minutes4Seconds', 'Lap - paused');\n\t\tcd.countdown('resume');\n\t\tclock.tick(2000);\n\t\tequal(cd.text(), '0Hours0Minutes0Seconds', 'Lap - resumed');\n\t});\n\n\ttest('Lap toggle', function() {\n\t\texpect(4);\n\t\tvar cd = init({until: +5, description: ''});\n\t\tequal(cd.text(), '0Hours0Minutes5Seconds', 'Lap toggle - initial');\n\t\tclock.tick(1000);\n\t\tequal(cd.text(), '0Hours0Minutes4Seconds', 'Lap toggle - tick');\n\t\tcd.countdown('toggleLap');\n\t\tclock.tick(2000);\n\t\tequal(cd.text(), '0Hours0Minutes4Seconds', 'Lap toggle - paused');\n\t\tcd.countdown('toggleLap');\n\t\tclock.tick(2000);\n\t\tequal(cd.text(), '0Hours0Minutes0Seconds', 'Lap toggle - resumed');\n\t});\n\n\tfunction init(settings) {\n\t\tif ($('#cd').hasClass('is-countdown')) {\n\t\t\t$('#cd').countdown('destroy');\n\t\t}\n\t\treturn $('#cd').countdown($.extend({description: 'descr'}, settings || {}));\n\t}\n\n\tfunction generateShow(format) {\n\t\tvar show = [];\n\t\tshow[0] = (format.match('y') ? '?' : (format.match('Y') ? '!' : null));\n\t\tshow[1] = (format.match('o') ? '?' : (format.match('O') ? '!' : null));\n\t\tshow[2] = (format.match('w') ? '?' : (format.match('W') ? '!' : null));\n\t\tshow[3] = (format.match('d') ? '?' : (format.match('D') ? '!' : null));\n\t\tshow[4] = (format.match('h') ? '?' : (format.match('H') ? '!' : null));\n\t\tshow[5] = (format.match('m') ? '?' : (format.match('M') ? '!' : null));\n\t\tshow[6] = (format.match('s') ? '?' : (format.match('S') ? '!' : null));\n\t\treturn show;\n\t}\n\n\tfunction equalTime(time1, time2, msg) {\n\t\tif (typeof time1 === 'undefined' || time1 === null || typeof time2 === 'undefined' || time2 === null) {\n\t\t\tok(false, msg + ' - null time');\n\t\t\treturn;\n\t\t}\n\t\ttime1.setMilliseconds(0);\n\t\ttime2.setMilliseconds(0);\n\t\tequal(time1.toString(), time2.toString(), msg);\n\t}\n});\t\n"
  }
]