/* automatically generated by JSCoverage - do not edit */
if (typeof _$jscoverage === 'undefined') _$jscoverage = {};
if (! _$jscoverage['base/date.js']) {
  _$jscoverage['base/date.js'] = [];
  _$jscoverage['base/date.js'][1] = 0;
  _$jscoverage['base/date.js'][18] = 0;
  _$jscoverage['base/date.js'][19] = 0;
  _$jscoverage['base/date.js'][20] = 0;
  _$jscoverage['base/date.js'][21] = 0;
  _$jscoverage['base/date.js'][22] = 0;
  _$jscoverage['base/date.js'][23] = 0;
  _$jscoverage['base/date.js'][24] = 0;
  _$jscoverage['base/date.js'][25] = 0;
  _$jscoverage['base/date.js'][26] = 0;
  _$jscoverage['base/date.js'][27] = 0;
  _$jscoverage['base/date.js'][30] = 0;
  _$jscoverage['base/date.js'][38] = 0;
  _$jscoverage['base/date.js'][39] = 0;
  _$jscoverage['base/date.js'][40] = 0;
  _$jscoverage['base/date.js'][43] = 0;
  _$jscoverage['base/date.js'][45] = 0;
  _$jscoverage['base/date.js'][48] = 0;
  _$jscoverage['base/date.js'][49] = 0;
  _$jscoverage['base/date.js'][50] = 0;
  _$jscoverage['base/date.js'][51] = 0;
  _$jscoverage['base/date.js'][56] = 0;
  _$jscoverage['base/date.js'][57] = 0;
  _$jscoverage['base/date.js'][60] = 0;
  _$jscoverage['base/date.js'][63] = 0;
  _$jscoverage['base/date.js'][64] = 0;
  _$jscoverage['base/date.js'][67] = 0;
  _$jscoverage['base/date.js'][71] = 0;
  _$jscoverage['base/date.js'][72] = 0;
  _$jscoverage['base/date.js'][73] = 0;
  _$jscoverage['base/date.js'][75] = 0;
  _$jscoverage['base/date.js'][76] = 0;
  _$jscoverage['base/date.js'][78] = 0;
  _$jscoverage['base/date.js'][79] = 0;
  _$jscoverage['base/date.js'][81] = 0;
  _$jscoverage['base/date.js'][82] = 0;
  _$jscoverage['base/date.js'][84] = 0;
  _$jscoverage['base/date.js'][85] = 0;
  _$jscoverage['base/date.js'][87] = 0;
  _$jscoverage['base/date.js'][88] = 0;
  _$jscoverage['base/date.js'][90] = 0;
  _$jscoverage['base/date.js'][91] = 0;
  _$jscoverage['base/date.js'][93] = 0;
  _$jscoverage['base/date.js'][94] = 0;
  _$jscoverage['base/date.js'][96] = 0;
  _$jscoverage['base/date.js'][97] = 0;
  _$jscoverage['base/date.js'][99] = 0;
  _$jscoverage['base/date.js'][100] = 0;
  _$jscoverage['base/date.js'][102] = 0;
  _$jscoverage['base/date.js'][103] = 0;
  _$jscoverage['base/date.js'][106] = 0;
  _$jscoverage['base/date.js'][107] = 0;
  _$jscoverage['base/date.js'][109] = 0;
  _$jscoverage['base/date.js'][110] = 0;
  _$jscoverage['base/date.js'][112] = 0;
  _$jscoverage['base/date.js'][114] = 0;
  _$jscoverage['base/date.js'][115] = 0;
  _$jscoverage['base/date.js'][116] = 0;
  _$jscoverage['base/date.js'][118] = 0;
  _$jscoverage['base/date.js'][119] = 0;
  _$jscoverage['base/date.js'][121] = 0;
  _$jscoverage['base/date.js'][122] = 0;
  _$jscoverage['base/date.js'][127] = 0;
  _$jscoverage['base/date.js'][131] = 0;
  _$jscoverage['base/date.js'][132] = 0;
  _$jscoverage['base/date.js'][135] = 0;
  _$jscoverage['base/date.js'][143] = 0;
  _$jscoverage['base/date.js'][163] = 0;
  _$jscoverage['base/date.js'][164] = 0;
  _$jscoverage['base/date.js'][165] = 0;
  _$jscoverage['base/date.js'][166] = 0;
  _$jscoverage['base/date.js'][168] = 0;
  _$jscoverage['base/date.js'][188] = 0;
  _$jscoverage['base/date.js'][189] = 0;
  _$jscoverage['base/date.js'][213] = 0;
  _$jscoverage['base/date.js'][214] = 0;
  _$jscoverage['base/date.js'][234] = 0;
  _$jscoverage['base/date.js'][235] = 0;
  _$jscoverage['base/date.js'][236] = 0;
  _$jscoverage['base/date.js'][237] = 0;
  _$jscoverage['base/date.js'][238] = 0;
  _$jscoverage['base/date.js'][240] = 0;
  _$jscoverage['base/date.js'][276] = 0;
  _$jscoverage['base/date.js'][277] = 0;
  _$jscoverage['base/date.js'][279] = 0;
  _$jscoverage['base/date.js'][281] = 0;
  _$jscoverage['base/date.js'][282] = 0;
  _$jscoverage['base/date.js'][283] = 0;
  _$jscoverage['base/date.js'][285] = 0;
  _$jscoverage['base/date.js'][286] = 0;
  _$jscoverage['base/date.js'][288] = 0;
  _$jscoverage['base/date.js'][289] = 0;
  _$jscoverage['base/date.js'][290] = 0;
  _$jscoverage['base/date.js'][291] = 0;
  _$jscoverage['base/date.js'][354] = 0;
  _$jscoverage['base/date.js'][355] = 0;
  _$jscoverage['base/date.js'][356] = 0;
  _$jscoverage['base/date.js'][357] = 0;
  _$jscoverage['base/date.js'][360] = 0;
  _$jscoverage['base/date.js'][363] = 0;
  _$jscoverage['base/date.js'][370] = 0;
  _$jscoverage['base/date.js'][371] = 0;
  _$jscoverage['base/date.js'][372] = 0;
  _$jscoverage['base/date.js'][373] = 0;
  _$jscoverage['base/date.js'][375] = 0;
  _$jscoverage['base/date.js'][376] = 0;
  _$jscoverage['base/date.js'][378] = 0;
  _$jscoverage['base/date.js'][379] = 0;
  _$jscoverage['base/date.js'][380] = 0;
  _$jscoverage['base/date.js'][383] = 0;
  _$jscoverage['base/date.js'][386] = 0;
  _$jscoverage['base/date.js'][388] = 0;
  _$jscoverage['base/date.js'][389] = 0;
  _$jscoverage['base/date.js'][393] = 0;
  _$jscoverage['base/date.js'][394] = 0;
  _$jscoverage['base/date.js'][397] = 0;
  _$jscoverage['base/date.js'][398] = 0;
  _$jscoverage['base/date.js'][399] = 0;
  _$jscoverage['base/date.js'][402] = 0;
  _$jscoverage['base/date.js'][403] = 0;
  _$jscoverage['base/date.js'][407] = 0;
  _$jscoverage['base/date.js'][411] = 0;
  _$jscoverage['base/date.js'][412] = 0;
  _$jscoverage['base/date.js'][413] = 0;
  _$jscoverage['base/date.js'][415] = 0;
  _$jscoverage['base/date.js'][416] = 0;
  _$jscoverage['base/date.js'][419] = 0;
  _$jscoverage['base/date.js'][420] = 0;
  _$jscoverage['base/date.js'][423] = 0;
  _$jscoverage['base/date.js'][424] = 0;
  _$jscoverage['base/date.js'][427] = 0;
  _$jscoverage['base/date.js'][492] = 0;
  _$jscoverage['base/date.js'][493] = 0;
  _$jscoverage['base/date.js'][494] = 0;
  _$jscoverage['base/date.js'][495] = 0;
  _$jscoverage['base/date.js'][497] = 0;
  _$jscoverage['base/date.js'][500] = 0;
  _$jscoverage['base/date.js'][501] = 0;
  _$jscoverage['base/date.js'][503] = 0;
  _$jscoverage['base/date.js'][504] = 0;
  _$jscoverage['base/date.js'][506] = 0;
  _$jscoverage['base/date.js'][507] = 0;
  _$jscoverage['base/date.js'][508] = 0;
  _$jscoverage['base/date.js'][511] = 0;
  _$jscoverage['base/date.js'][512] = 0;
  _$jscoverage['base/date.js'][513] = 0;
  _$jscoverage['base/date.js'][516] = 0;
  _$jscoverage['base/date.js'][517] = 0;
  _$jscoverage['base/date.js'][520] = 0;
  _$jscoverage['base/date.js'][521] = 0;
  _$jscoverage['base/date.js'][522] = 0;
  _$jscoverage['base/date.js'][524] = 0;
  _$jscoverage['base/date.js'][525] = 0;
  _$jscoverage['base/date.js'][528] = 0;
  _$jscoverage['base/date.js'][529] = 0;
  _$jscoverage['base/date.js'][530] = 0;
  _$jscoverage['base/date.js'][533] = 0;
  _$jscoverage['base/date.js'][534] = 0;
  _$jscoverage['base/date.js'][537] = 0;
  _$jscoverage['base/date.js'][538] = 0;
  _$jscoverage['base/date.js'][541] = 0;
  _$jscoverage['base/date.js'][542] = 0;
  _$jscoverage['base/date.js'][545] = 0;
  _$jscoverage['base/date.js'][546] = 0;
  _$jscoverage['base/date.js'][549] = 0;
  _$jscoverage['base/date.js'][551] = 0;
  _$jscoverage['base/date.js'][552] = 0;
  _$jscoverage['base/date.js'][555] = 0;
  _$jscoverage['base/date.js'][556] = 0;
  _$jscoverage['base/date.js'][559] = 0;
  _$jscoverage['base/date.js'][560] = 0;
  _$jscoverage['base/date.js'][563] = 0;
  _$jscoverage['base/date.js'][564] = 0;
  _$jscoverage['base/date.js'][567] = 0;
  _$jscoverage['base/date.js'][568] = 0;
  _$jscoverage['base/date.js'][571] = 0;
  _$jscoverage['base/date.js'][574] = 0;
  _$jscoverage['base/date.js'][575] = 0;
  _$jscoverage['base/date.js'][577] = 0;
  _$jscoverage['base/date.js'][578] = 0;
  _$jscoverage['base/date.js'][581] = 0;
  _$jscoverage['base/date.js'][582] = 0;
  _$jscoverage['base/date.js'][585] = 0;
  _$jscoverage['base/date.js'][586] = 0;
  _$jscoverage['base/date.js'][587] = 0;
  _$jscoverage['base/date.js'][588] = 0;
  _$jscoverage['base/date.js'][591] = 0;
  _$jscoverage['base/date.js'][592] = 0;
  _$jscoverage['base/date.js'][595] = 0;
  _$jscoverage['base/date.js'][598] = 0;
  _$jscoverage['base/date.js'][601] = 0;
  _$jscoverage['base/date.js'][604] = 0;
  _$jscoverage['base/date.js'][607] = 0;
  _$jscoverage['base/date.js'][611] = 0;
  _$jscoverage['base/date.js'][655] = 0;
  _$jscoverage['base/date.js'][656] = 0;
  _$jscoverage['base/date.js'][659] = 0;
  _$jscoverage['base/date.js'][660] = 0;
  _$jscoverage['base/date.js'][663] = 0;
  _$jscoverage['base/date.js'][666] = 0;
  _$jscoverage['base/date.js'][667] = 0;
  _$jscoverage['base/date.js'][669] = 0;
  _$jscoverage['base/date.js'][670] = 0;
  _$jscoverage['base/date.js'][671] = 0;
  _$jscoverage['base/date.js'][673] = 0;
  _$jscoverage['base/date.js'][674] = 0;
  _$jscoverage['base/date.js'][677] = 0;
  _$jscoverage['base/date.js'][680] = 0;
  _$jscoverage['base/date.js'][682] = 0;
  _$jscoverage['base/date.js'][684] = 0;
  _$jscoverage['base/date.js'][686] = 0;
  _$jscoverage['base/date.js'][687] = 0;
  _$jscoverage['base/date.js'][688] = 0;
  _$jscoverage['base/date.js'][689] = 0;
  _$jscoverage['base/date.js'][693] = 0;
  _$jscoverage['base/date.js'][694] = 0;
  _$jscoverage['base/date.js'][695] = 0;
  _$jscoverage['base/date.js'][697] = 0;
  _$jscoverage['base/date.js'][698] = 0;
  _$jscoverage['base/date.js'][701] = 0;
  _$jscoverage['base/date.js'][703] = 0;
  _$jscoverage['base/date.js'][704] = 0;
  _$jscoverage['base/date.js'][707] = 0;
  _$jscoverage['base/date.js'][708] = 0;
  _$jscoverage['base/date.js'][709] = 0;
  _$jscoverage['base/date.js'][712] = 0;
  _$jscoverage['base/date.js'][713] = 0;
  _$jscoverage['base/date.js'][714] = 0;
  _$jscoverage['base/date.js'][716] = 0;
  _$jscoverage['base/date.js'][717] = 0;
  _$jscoverage['base/date.js'][718] = 0;
  _$jscoverage['base/date.js'][719] = 0;
  _$jscoverage['base/date.js'][720] = 0;
  _$jscoverage['base/date.js'][723] = 0;
  _$jscoverage['base/date.js'][725] = 0;
  _$jscoverage['base/date.js'][727] = 0;
  _$jscoverage['base/date.js'][729] = 0;
  _$jscoverage['base/date.js'][730] = 0;
  _$jscoverage['base/date.js'][732] = 0;
  _$jscoverage['base/date.js'][733] = 0;
  _$jscoverage['base/date.js'][734] = 0;
  _$jscoverage['base/date.js'][735] = 0;
  _$jscoverage['base/date.js'][737] = 0;
  _$jscoverage['base/date.js'][738] = 0;
  _$jscoverage['base/date.js'][740] = 0;
  _$jscoverage['base/date.js'][741] = 0;
  _$jscoverage['base/date.js'][749] = 0;
  _$jscoverage['base/date.js'][750] = 0;
  _$jscoverage['base/date.js'][752] = 0;
  _$jscoverage['base/date.js'][753] = 0;
  _$jscoverage['base/date.js'][755] = 0;
  _$jscoverage['base/date.js'][756] = 0;
  _$jscoverage['base/date.js'][758] = 0;
  _$jscoverage['base/date.js'][760] = 0;
  _$jscoverage['base/date.js'][762] = 0;
  _$jscoverage['base/date.js'][763] = 0;
  _$jscoverage['base/date.js'][765] = 0;
  _$jscoverage['base/date.js'][766] = 0;
  _$jscoverage['base/date.js'][767] = 0;
  _$jscoverage['base/date.js'][768] = 0;
  _$jscoverage['base/date.js'][770] = 0;
  _$jscoverage['base/date.js'][771] = 0;
  _$jscoverage['base/date.js'][777] = 0;
  _$jscoverage['base/date.js'][778] = 0;
  _$jscoverage['base/date.js'][780] = 0;
  _$jscoverage['base/date.js'][782] = 0;
  _$jscoverage['base/date.js'][826] = 0;
  _$jscoverage['base/date.js'][827] = 0;
  _$jscoverage['base/date.js'][828] = 0;
  _$jscoverage['base/date.js'][829] = 0;
  _$jscoverage['base/date.js'][838] = 0;
  _$jscoverage['base/date.js'][847] = 0;
  _$jscoverage['base/date.js'][848] = 0;
  _$jscoverage['base/date.js'][852] = 0;
  _$jscoverage['base/date.js'][854] = 0;
  _$jscoverage['base/date.js'][856] = 0;
  _$jscoverage['base/date.js'][858] = 0;
  _$jscoverage['base/date.js'][860] = 0;
  _$jscoverage['base/date.js'][861] = 0;
  _$jscoverage['base/date.js'][862] = 0;
  _$jscoverage['base/date.js'][864] = 0;
  _$jscoverage['base/date.js'][865] = 0;
  _$jscoverage['base/date.js'][867] = 0;
  _$jscoverage['base/date.js'][868] = 0;
  _$jscoverage['base/date.js'][869] = 0;
  _$jscoverage['base/date.js'][871] = 0;
  _$jscoverage['base/date.js'][874] = 0;
  _$jscoverage['base/date.js'][875] = 0;
  _$jscoverage['base/date.js'][876] = 0;
  _$jscoverage['base/date.js'][878] = 0;
  _$jscoverage['base/date.js'][879] = 0;
  _$jscoverage['base/date.js'][880] = 0;
  _$jscoverage['base/date.js'][882] = 0;
  _$jscoverage['base/date.js'][884] = 0;
  _$jscoverage['base/date.js'][886] = 0;
  _$jscoverage['base/date.js'][887] = 0;
  _$jscoverage['base/date.js'][889] = 0;
  _$jscoverage['base/date.js'][890] = 0;
  _$jscoverage['base/date.js'][892] = 0;
  _$jscoverage['base/date.js'][893] = 0;
  _$jscoverage['base/date.js'][894] = 0;
  _$jscoverage['base/date.js'][896] = 0;
  _$jscoverage['base/date.js'][898] = 0;
  _$jscoverage['base/date.js'][900] = 0;
  _$jscoverage['base/date.js'][901] = 0;
  _$jscoverage['base/date.js'][903] = 0;
  _$jscoverage['base/date.js'][904] = 0;
  _$jscoverage['base/date.js'][906] = 0;
  _$jscoverage['base/date.js'][907] = 0;
  _$jscoverage['base/date.js'][909] = 0;
  _$jscoverage['base/date.js'][910] = 0;
  _$jscoverage['base/date.js'][912] = 0;
  _$jscoverage['base/date.js'][913] = 0;
  _$jscoverage['base/date.js'][916] = 0;
  _$jscoverage['base/date.js'][917] = 0;
  _$jscoverage['base/date.js'][918] = 0;
  _$jscoverage['base/date.js'][920] = 0;
  _$jscoverage['base/date.js'][923] = 0;
  _$jscoverage['base/date.js'][924] = 0;
  _$jscoverage['base/date.js'][929] = 0;
  _$jscoverage['base/date.js'][930] = 0;
  _$jscoverage['base/date.js'][931] = 0;
  _$jscoverage['base/date.js'][933] = 0;
  _$jscoverage['base/date.js'][934] = 0;
  _$jscoverage['base/date.js'][938] = 0;
  _$jscoverage['base/date.js'][941] = 0;
  _$jscoverage['base/date.js'][942] = 0;
  _$jscoverage['base/date.js'][944] = 0;
  _$jscoverage['base/date.js'][950] = 0;
}
_$jscoverage['base/date.js'][1]++;
var string = require("./string").string;
_$jscoverage['base/date.js'][18]++;
var floor = Math.floor, round = Math.round, min = Math.min, pow = Math.pow, ceil = Math.ceil, abs = Math.abs;
_$jscoverage['base/date.js'][19]++;
var monthNames = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
_$jscoverage['base/date.js'][20]++;
var monthAbbr = ["Jan.", "Feb.", "Mar.", "Apr.", "May.", "Jun.", "Jul.", "Aug.", "Sep.", "Oct.", "Nov.", "Dec."];
_$jscoverage['base/date.js'][21]++;
var monthLetter = ["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"];
_$jscoverage['base/date.js'][22]++;
var dayNames = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
_$jscoverage['base/date.js'][23]++;
var dayAbbr = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
_$jscoverage['base/date.js'][24]++;
var dayLetter = ["S", "M", "T", "W", "T", "F", "S"];
_$jscoverage['base/date.js'][25]++;
var eraNames = ["Before Christ", "Anno Domini"];
_$jscoverage['base/date.js'][26]++;
var eraAbbr = ["BC", "AD"];
_$jscoverage['base/date.js'][27]++;
var eraLetter = ["B", "A"];
_$jscoverage['base/date.js'][30]++;
var comb = exports, date;
_$jscoverage['base/date.js'][38]++;
comb.isDate = (function (obj) {
  _$jscoverage['base/date.js'][39]++;
  var undef;
  _$jscoverage['base/date.js'][40]++;
  return (obj !== undef && typeof obj === "object" && obj instanceof Date);
});
_$jscoverage['base/date.js'][43]++;
function getDayOfYear(dateObject, utc) {
  _$jscoverage['base/date.js'][45]++;
  return date.difference(new Date(dateObject.getFullYear(), 0, 1, dateObject.getHours()), dateObject, null, utc) + 1;
}
_$jscoverage['base/date.js'][48]++;
function getWeekOfYear(dateObject, firstDayOfWeek, utc) {
  _$jscoverage['base/date.js'][49]++;
  firstDayOfWeek = firstDayOfWeek || 0;
  _$jscoverage['base/date.js'][50]++;
  var fullYear = dateObject[utc? "getUTCFullYear": "getFullYear"]();
  _$jscoverage['base/date.js'][51]++;
  var firstDayOfYear = new Date(fullYear, 0, 1).getDay(), adj = (firstDayOfYear - firstDayOfWeek + 7) % 7, week = floor((getDayOfYear(dateObject) + adj - 1) / 7);
  _$jscoverage['base/date.js'][56]++;
  if (firstDayOfYear == firstDayOfWeek) {
    _$jscoverage['base/date.js'][57]++;
    week++;
  }
  _$jscoverage['base/date.js'][60]++;
  return week;
}
_$jscoverage['base/date.js'][63]++;
function buildDateEXP(pattern, tokens) {
  _$jscoverage['base/date.js'][64]++;
  return pattern.replace(/([a-z])\1*/gi, (function (match) {
  _$jscoverage['base/date.js'][67]++;
  var s, c = match.charAt(0), l = match.length, p2 = "", p3 = "";
  _$jscoverage['base/date.js'][71]++;
  p2 = "0?";
  _$jscoverage['base/date.js'][72]++;
  p3 = "0{0,2}";
  _$jscoverage['base/date.js'][73]++;
  switch (c) {
  case "y":
    _$jscoverage['base/date.js'][75]++;
    s = "\\d{2,4}";
    _$jscoverage['base/date.js'][76]++;
    break;
  case "M":
    _$jscoverage['base/date.js'][78]++;
    s = (l > 2)? "\\S+?": p2 + "[1-9]|1[0-2]";
    _$jscoverage['base/date.js'][79]++;
    break;
  case "D":
    _$jscoverage['base/date.js'][81]++;
    s = p2 + "[1-9]|" + p3 + "[1-9][0-9]|[12][0-9][0-9]|3[0-5][0-9]|36[0-6]";
    _$jscoverage['base/date.js'][82]++;
    break;
  case "d":
    _$jscoverage['base/date.js'][84]++;
    s = "[12]\\d|" + p2 + "[1-9]|3[01]";
    _$jscoverage['base/date.js'][85]++;
    break;
  case "w":
    _$jscoverage['base/date.js'][87]++;
    s = p2 + "[1-9]|[1-4][0-9]|5[0-3]";
    _$jscoverage['base/date.js'][88]++;
    break;
  case "E":
    _$jscoverage['base/date.js'][90]++;
    s = "\\S+";
    _$jscoverage['base/date.js'][91]++;
    break;
  case "h":
    _$jscoverage['base/date.js'][93]++;
    s = p2 + "[1-9]|1[0-2]";
    _$jscoverage['base/date.js'][94]++;
    break;
  case "K":
    _$jscoverage['base/date.js'][96]++;
    s = p2 + "\\d|1[01]";
    _$jscoverage['base/date.js'][97]++;
    break;
  case "H":
    _$jscoverage['base/date.js'][99]++;
    s = p2 + "\\d|1\\d|2[0-3]";
    _$jscoverage['base/date.js'][100]++;
    break;
  case "k":
    _$jscoverage['base/date.js'][102]++;
    s = p2 + "[1-9]|1\\d|2[0-4]";
    _$jscoverage['base/date.js'][103]++;
    break;
  case "m":
  case "s":
    _$jscoverage['base/date.js'][106]++;
    s = "[0-5]\\d";
    _$jscoverage['base/date.js'][107]++;
    break;
  case "S":
    _$jscoverage['base/date.js'][109]++;
    s = "\\d{" + l + "}";
    _$jscoverage['base/date.js'][110]++;
    break;
  case "a":
    _$jscoverage['base/date.js'][112]++;
    var am = "AM", pm = "PM";
    _$jscoverage['base/date.js'][114]++;
    s = am + "|" + pm;
    _$jscoverage['base/date.js'][115]++;
    if (am != am.toLowerCase()) {
      _$jscoverage['base/date.js'][116]++;
      s += "|" + am.toLowerCase();
    }
    _$jscoverage['base/date.js'][118]++;
    if (pm != pm.toLowerCase()) {
      _$jscoverage['base/date.js'][119]++;
      s += "|" + pm.toLowerCase();
    }
    _$jscoverage['base/date.js'][121]++;
    s = s.replace(/\./g, "\\.");
    _$jscoverage['base/date.js'][122]++;
    break;
  default:
    _$jscoverage['base/date.js'][127]++;
    s = ".*";
  }
  _$jscoverage['base/date.js'][131]++;
  if (tokens) {
    _$jscoverage['base/date.js'][132]++;
    tokens.push(match);
  }
  _$jscoverage['base/date.js'][135]++;
  return "(" + s + ")";
})).replace(/[\xa0 ]/g, "[\\s\\xa0]");
}
_$jscoverage['base/date.js'][143]++;
comb.date = {getDaysInMonth: (function (dateObject) {
  _$jscoverage['base/date.js'][163]++;
  var month = dateObject.getMonth();
  _$jscoverage['base/date.js'][164]++;
  var days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
  _$jscoverage['base/date.js'][165]++;
  if (month == 1 && date.isLeapYear(dateObject)) {
    _$jscoverage['base/date.js'][166]++;
    return 29;
  }
  _$jscoverage['base/date.js'][168]++;
  return days[month];
}), isLeapYear: (function (dateObject, utc) {
  _$jscoverage['base/date.js'][188]++;
  var year = dateObject[utc? "getUTCFullYear": "getFullYear"]();
  _$jscoverage['base/date.js'][189]++;
  return ! (year % 400) || (! (year % 4) && ! ! (year % 100));
}), isWeekend: (function (dateObject, utc) {
  _$jscoverage['base/date.js'][213]++;
  var day = (dateObject || new Date())[utc? "getUTCDay": "getDay"]();
  _$jscoverage['base/date.js'][214]++;
  return day == 0 || day == 6;
}), getTimezoneName: (function (dateObject) {
  _$jscoverage['base/date.js'][234]++;
  var str = dateObject.toString();
  _$jscoverage['base/date.js'][235]++;
  var tz = "";
  _$jscoverage['base/date.js'][236]++;
  var pos = str.indexOf("(");
  _$jscoverage['base/date.js'][237]++;
  if (pos > -1) {
    _$jscoverage['base/date.js'][238]++;
    tz = str.substring(++pos, str.indexOf(")"));
  }
  _$jscoverage['base/date.js'][240]++;
  return tz;
}), compare: (function (date1, date2, portion) {
  _$jscoverage['base/date.js'][276]++;
  date1 = new Date(date1);
  _$jscoverage['base/date.js'][277]++;
  date2 = new Date((date2 || new Date()));
  _$jscoverage['base/date.js'][279]++;
  if (portion == "date") {
    _$jscoverage['base/date.js'][281]++;
    date1.setHours(0, 0, 0, 0);
    _$jscoverage['base/date.js'][282]++;
    date2.setHours(0, 0, 0, 0);
  }
  else {
    _$jscoverage['base/date.js'][283]++;
    if (portion == "time") {
      _$jscoverage['base/date.js'][285]++;
      date1.setFullYear(0, 0, 0);
      _$jscoverage['base/date.js'][286]++;
      date2.setFullYear(0, 0, 0);
    }
  }
  _$jscoverage['base/date.js'][288]++;
  var ret = 0;
  _$jscoverage['base/date.js'][289]++;
  date1 > date2 && (ret = 1);
  _$jscoverage['base/date.js'][290]++;
  date1 < date2 && (ret = -1);
  _$jscoverage['base/date.js'][291]++;
  return ret;
}), add: (function (date, interval, amount) {
  _$jscoverage['base/date.js'][354]++;
  amount = amount | 0;
  _$jscoverage['base/date.js'][355]++;
  var sum = new Date(date);
  _$jscoverage['base/date.js'][356]++;
  var fixOvershoot = false;
  _$jscoverage['base/date.js'][357]++;
  var property = "Date";
  _$jscoverage['base/date.js'][360]++;
  switch (interval) {
  case "day":
  case "days":
    _$jscoverage['base/date.js'][363]++;
    break;
  case "weekday":
  case "weekdays":
    _$jscoverage['base/date.js'][370]++;
    var days, weeks, mod = amount % 5, strt = date.getDay(), adj = 0;
    _$jscoverage['base/date.js'][371]++;
    if (! mod) {
      _$jscoverage['base/date.js'][372]++;
      days = (amount > 0)? 5: -5;
      _$jscoverage['base/date.js'][373]++;
      weeks = (amount > 0)? ((amount - 5) / 5): ((amount + 5) / 5);
    }
    else {
      _$jscoverage['base/date.js'][375]++;
      days = mod;
      _$jscoverage['base/date.js'][376]++;
      weeks = parseInt(amount / 5);
    }
    _$jscoverage['base/date.js'][378]++;
    if (strt == 6 && amount > 0) {
      _$jscoverage['base/date.js'][379]++;
      adj = 1;
    }
    else {
      _$jscoverage['base/date.js'][380]++;
      if (strt == 0 && amount < 0) {
        _$jscoverage['base/date.js'][383]++;
        adj = -1;
      }
    }
    _$jscoverage['base/date.js'][386]++;
    var trgt = strt + days;
    _$jscoverage['base/date.js'][388]++;
    if (trgt == 0 || trgt == 6) {
      _$jscoverage['base/date.js'][389]++;
      adj = (amount > 0)? 2: -2;
    }
    _$jscoverage['base/date.js'][393]++;
    amount = (7 * weeks) + days + adj;
    _$jscoverage['base/date.js'][394]++;
    break;
  case "year":
  case "years":
    _$jscoverage['base/date.js'][397]++;
    property = "FullYear";
    _$jscoverage['base/date.js'][398]++;
    fixOvershoot = true;
    _$jscoverage['base/date.js'][399]++;
    break;
  case "week":
  case "weeks":
    _$jscoverage['base/date.js'][402]++;
    amount *= 7;
    _$jscoverage['base/date.js'][403]++;
    break;
  case "quarter":
  case "quarters":
    _$jscoverage['base/date.js'][407]++;
    amount *= 3;
  case "month":
  case "months":
    _$jscoverage['base/date.js'][411]++;
    fixOvershoot = true;
    _$jscoverage['base/date.js'][412]++;
    property = "Month";
    _$jscoverage['base/date.js'][413]++;
    break;
  default:
    _$jscoverage['base/date.js'][415]++;
    interval = interval.replace(/s$/, "");
    _$jscoverage['base/date.js'][416]++;
    property = "UTC" + interval.charAt(0).toUpperCase() + interval.substring(1) + "s";
  }
  _$jscoverage['base/date.js'][419]++;
  if (property) {
    _$jscoverage['base/date.js'][420]++;
    sum["set" + property](sum["get" + property]() + amount);
  }
  _$jscoverage['base/date.js'][423]++;
  if (fixOvershoot && (sum.getDate() < date.getDate())) {
    _$jscoverage['base/date.js'][424]++;
    sum.setDate(0);
  }
  _$jscoverage['base/date.js'][427]++;
  return sum;
}), difference: (function (date1, date2, interval, utc) {
  _$jscoverage['base/date.js'][492]++;
  date2 = date2 || new Date();
  _$jscoverage['base/date.js'][493]++;
  interval = interval || "day";
  _$jscoverage['base/date.js'][494]++;
  var yearDiff = date2.getFullYear() - date1.getFullYear();
  _$jscoverage['base/date.js'][495]++;
  var delta = 1;
  _$jscoverage['base/date.js'][497]++;
  switch (interval) {
  case "quarter":
  case "quarters":
    _$jscoverage['base/date.js'][500]++;
    var m1 = date1[utc? "getUTCMonth": "getMonth"]();
    _$jscoverage['base/date.js'][501]++;
    var m2 = date2[utc? "getUTCMonth": "getMonth"]();
    _$jscoverage['base/date.js'][503]++;
    var q1 = floor(m1 / 3) + 1;
    _$jscoverage['base/date.js'][504]++;
    var q2 = floor(m2 / 3) + 1;
    _$jscoverage['base/date.js'][506]++;
    q2 += (yearDiff * 4);
    _$jscoverage['base/date.js'][507]++;
    delta = q2 - q1;
    _$jscoverage['base/date.js'][508]++;
    break;
  case "weekday":
  case "weekdays":
    _$jscoverage['base/date.js'][511]++;
    var days = round(date.difference(date1, date2, "day", utc));
    _$jscoverage['base/date.js'][512]++;
    var weeks = parseInt(date.difference(date1, date2, "week", utc));
    _$jscoverage['base/date.js'][513]++;
    var mod = days % 7;
    _$jscoverage['base/date.js'][516]++;
    if (mod == 0) {
      _$jscoverage['base/date.js'][517]++;
      days = weeks * 5;
    }
    else {
      _$jscoverage['base/date.js'][520]++;
      var adj = 0;
      _$jscoverage['base/date.js'][521]++;
      var aDay = date1[utc? "getUTCDay": "getDay"]();
      _$jscoverage['base/date.js'][522]++;
      var bDay = date2[utc? "getUTCDay": "getDay"]();
      _$jscoverage['base/date.js'][524]++;
      weeks = parseInt(days / 7);
      _$jscoverage['base/date.js'][525]++;
      mod = days % 7;
      _$jscoverage['base/date.js'][528]++;
      var dtMark = new Date(date1);
      _$jscoverage['base/date.js'][529]++;
      dtMark.setDate(dtMark[utc? "getUTCDate": "getDate"]() + (weeks * 7));
      _$jscoverage['base/date.js'][530]++;
      var dayMark = dtMark[utc? "getUTCDay": "getDay"]();
      _$jscoverage['base/date.js'][533]++;
      if (days > 0) {
        _$jscoverage['base/date.js'][534]++;
        switch (true) {
        case (aDay == 6 || bDay == 6):
          _$jscoverage['base/date.js'][537]++;
          adj = -1;
          _$jscoverage['base/date.js'][538]++;
          break;
        case aDay == 0:
          _$jscoverage['base/date.js'][541]++;
          adj = 0;
          _$jscoverage['base/date.js'][542]++;
          break;
        case bDay == 0:
          _$jscoverage['base/date.js'][545]++;
          adj = -2;
          _$jscoverage['base/date.js'][546]++;
          break;
        case (dayMark + mod) > 5:
          _$jscoverage['base/date.js'][549]++;
          adj = -2;
        }
      }
      else {
        _$jscoverage['base/date.js'][551]++;
        if (days < 0) {
          _$jscoverage['base/date.js'][552]++;
          switch (true) {
          case aDay == 6:
            _$jscoverage['base/date.js'][555]++;
            adj = 0;
            _$jscoverage['base/date.js'][556]++;
            break;
          case aDay == 0:
            _$jscoverage['base/date.js'][559]++;
            adj = 1;
            _$jscoverage['base/date.js'][560]++;
            break;
          case bDay == 6:
            _$jscoverage['base/date.js'][563]++;
            adj = 2;
            _$jscoverage['base/date.js'][564]++;
            break;
          case bDay == 0:
            _$jscoverage['base/date.js'][567]++;
            adj = 1;
            _$jscoverage['base/date.js'][568]++;
            break;
          case (dayMark + mod) < 0:
            _$jscoverage['base/date.js'][571]++;
            adj = 2;
          }
        }
      }
      _$jscoverage['base/date.js'][574]++;
      days += adj;
      _$jscoverage['base/date.js'][575]++;
      days -= (weeks * 2);
    }
    _$jscoverage['base/date.js'][577]++;
    delta = days;
    _$jscoverage['base/date.js'][578]++;
    break;
  case "year":
  case "years":
    _$jscoverage['base/date.js'][581]++;
    delta = yearDiff;
    _$jscoverage['base/date.js'][582]++;
    break;
  case "month":
  case "months":
    _$jscoverage['base/date.js'][585]++;
    var m1 = date1[utc? "getUTCMonth": "getMonth"]();
    _$jscoverage['base/date.js'][586]++;
    var m2 = date2[utc? "getUTCMonth": "getMonth"]();
    _$jscoverage['base/date.js'][587]++;
    delta = (m2 - m1) + (yearDiff * 12);
    _$jscoverage['base/date.js'][588]++;
    break;
  case "week":
  case "weeks":
    _$jscoverage['base/date.js'][591]++;
    delta = parseInt(date.difference(date1, date2, "day", utc) / 7);
    _$jscoverage['base/date.js'][592]++;
    break;
  case "day":
  case "days":
    _$jscoverage['base/date.js'][595]++;
    delta /= 24;
  case "hour":
  case "hours":
    _$jscoverage['base/date.js'][598]++;
    delta /= 60;
  case "minute":
  case "minutes":
    _$jscoverage['base/date.js'][601]++;
    delta /= 60;
  case "second":
  case "seconds":
    _$jscoverage['base/date.js'][604]++;
    delta /= 1000;
  case "millisecond":
  case "milliseconds":
    _$jscoverage['base/date.js'][607]++;
    delta *= date2.getTime() - date1.getTime();
  }
  _$jscoverage['base/date.js'][611]++;
  return round(delta);
}), parse: (function (dateStr, format) {
  _$jscoverage['base/date.js'][655]++;
  if (! format) {
    _$jscoverage['base/date.js'][655]++;
    throw new Error("format required when calling comb.date.parse");
  }
  _$jscoverage['base/date.js'][656]++;
  var tokens = [], regexp = buildDateEXP(format, tokens), re = new RegExp("^" + regexp + "$", "i"), match = re.exec(dateStr);
  _$jscoverage['base/date.js'][659]++;
  if (! match) {
    _$jscoverage['base/date.js'][660]++;
    return null;
  }
  _$jscoverage['base/date.js'][663]++;
  var result = [1970, 0, 1, 0, 0, 0, 0], amPm = "", valid = match.every((function (v, i) {
  _$jscoverage['base/date.js'][666]++;
  if (! i) {
    _$jscoverage['base/date.js'][667]++;
    return true;
  }
  _$jscoverage['base/date.js'][669]++;
  var token = tokens[i - 1];
  _$jscoverage['base/date.js'][670]++;
  var l = token.length;
  _$jscoverage['base/date.js'][671]++;
  switch (token.charAt(0)) {
  case "y":
    _$jscoverage['base/date.js'][673]++;
    if (v < 100) {
      _$jscoverage['base/date.js'][674]++;
      v = parseInt(v, 10);
      _$jscoverage['base/date.js'][677]++;
      var year = "" + new Date().getFullYear(), century = year.substring(0, 2) * 100, cutoff = min(year.substring(2, 4) + 20, 99);
      _$jscoverage['base/date.js'][680]++;
      result[0] = (v < cutoff)? century + v: century - 100 + v;
    }
    else {
      _$jscoverage['base/date.js'][682]++;
      result[0] = v;
    }
    _$jscoverage['base/date.js'][684]++;
    break;
  case "M":
    _$jscoverage['base/date.js'][686]++;
    if (l > 2) {
      _$jscoverage['base/date.js'][687]++;
      var months = monthNames;
      _$jscoverage['base/date.js'][688]++;
      if (l === 3) {
        _$jscoverage['base/date.js'][689]++;
        months = monthAbbr;
      }
      _$jscoverage['base/date.js'][693]++;
      v = v.replace(".", "").toLowerCase();
      _$jscoverage['base/date.js'][694]++;
      months = months.map((function (s) {
  _$jscoverage['base/date.js'][695]++;
  return s.replace(".", "").toLowerCase();
}));
      _$jscoverage['base/date.js'][697]++;
      if ((v = months.indexOf(v)) == -1) {
        _$jscoverage['base/date.js'][698]++;
        return false;
      }
    }
    else {
      _$jscoverage['base/date.js'][701]++;
      v--;
    }
    _$jscoverage['base/date.js'][703]++;
    result[1] = v;
    _$jscoverage['base/date.js'][704]++;
    break;
  case "E":
  case "e":
    _$jscoverage['base/date.js'][707]++;
    var days = dayNames;
    _$jscoverage['base/date.js'][708]++;
    if (l == 3) {
      _$jscoverage['base/date.js'][709]++;
      days = dayAbbr;
    }
    _$jscoverage['base/date.js'][712]++;
    v = v.toLowerCase();
    _$jscoverage['base/date.js'][713]++;
    days = days.map((function (d) {
  _$jscoverage['base/date.js'][714]++;
  return d.toLowerCase();
}));
    _$jscoverage['base/date.js'][716]++;
    var d = days.indexOf(v);
    _$jscoverage['base/date.js'][717]++;
    if (d == -1) {
      _$jscoverage['base/date.js'][718]++;
      v = parseInt(v);
      _$jscoverage['base/date.js'][719]++;
      if (isNaN(v) || v > days.length) {
        _$jscoverage['base/date.js'][720]++;
        return false;
      }
    }
    else {
      _$jscoverage['base/date.js'][723]++;
      v = d;
    }
    _$jscoverage['base/date.js'][725]++;
    break;
  case "D":
    _$jscoverage['base/date.js'][727]++;
    result[1] = 0;
  case "d":
    _$jscoverage['base/date.js'][729]++;
    result[2] = v;
    _$jscoverage['base/date.js'][730]++;
    break;
  case "a":
    _$jscoverage['base/date.js'][732]++;
    var am = "am";
    _$jscoverage['base/date.js'][733]++;
    var pm = "pm";
    _$jscoverage['base/date.js'][734]++;
    var period = /\./g;
    _$jscoverage['base/date.js'][735]++;
    v = v.replace(period, "").toLowerCase();
    _$jscoverage['base/date.js'][737]++;
    amPm = (v == pm)? "p": (v == am)? "a": "";
    _$jscoverage['base/date.js'][738]++;
    break;
  case "k":
    _$jscoverage['base/date.js'][740]++;
    if (v == 24) {
      _$jscoverage['base/date.js'][741]++;
      v = 0;
    }
  case "h":
  case "H":
  case "K":
    _$jscoverage['base/date.js'][749]++;
    result[3] = v;
    _$jscoverage['base/date.js'][750]++;
    break;
  case "m":
    _$jscoverage['base/date.js'][752]++;
    result[4] = v;
    _$jscoverage['base/date.js'][753]++;
    break;
  case "s":
    _$jscoverage['base/date.js'][755]++;
    result[5] = v;
    _$jscoverage['base/date.js'][756]++;
    break;
  case "S":
    _$jscoverage['base/date.js'][758]++;
    result[6] = v;
  }
  _$jscoverage['base/date.js'][760]++;
  return true;
}));
  _$jscoverage['base/date.js'][762]++;
  if (valid) {
    _$jscoverage['base/date.js'][763]++;
    var hours = + result[3];
    _$jscoverage['base/date.js'][765]++;
    if (amPm === "p" && hours < 12) {
      _$jscoverage['base/date.js'][766]++;
      result[3] = hours + 12;
    }
    else {
      _$jscoverage['base/date.js'][767]++;
      if (amPm === "a" && hours == 12) {
        _$jscoverage['base/date.js'][768]++;
        result[3] = 0;
      }
    }
    _$jscoverage['base/date.js'][770]++;
    var dateObject = new Date(result[0], result[1], result[2], result[3], result[4], result[5], result[6]);
    _$jscoverage['base/date.js'][771]++;
    var dateToken = (tokens.indexOf("d") != -1), monthToken = (tokens.indexOf("M") != -1), month = result[1], day = result[2], dateMonth = dateObject.getMonth(), dateDay = dateObject.getDate();
    _$jscoverage['base/date.js'][777]++;
    if ((monthToken && dateMonth > month) || (dateToken && dateDay > day)) {
      _$jscoverage['base/date.js'][778]++;
      return null;
    }
    _$jscoverage['base/date.js'][780]++;
    return dateObject;
  }
  else {
    _$jscoverage['base/date.js'][782]++;
    return null;
  }
}), format: (function (date, format, utc) {
  _$jscoverage['base/date.js'][826]++;
  utc = utc || false;
  _$jscoverage['base/date.js'][827]++;
  var fullYear, month, day, d, hour, minute, second, millisecond;
  _$jscoverage['base/date.js'][828]++;
  if (utc) {
    _$jscoverage['base/date.js'][829]++;
    fullYear = date.getUTCFullYear(), month = date.getUTCMonth(), day = date.getUTCDay(), d = date.getUTCDate(), hour = date.getUTCHours(), minute = date.getUTCMinutes(), second = date.getUTCSeconds(), millisecond = date.getUTCMilliseconds();
  }
  else {
    _$jscoverage['base/date.js'][838]++;
    fullYear = date.getFullYear(), month = date.getMonth(), d = date.getDate(), day = date.getDay(), hour = date.getHours(), minute = date.getMinutes(), second = date.getSeconds(), millisecond = date.getMilliseconds();
  }
  _$jscoverage['base/date.js'][847]++;
  return format.replace(/([a-z])\1*/gi, (function (match, options) {
  _$jscoverage['base/date.js'][848]++;
  var s, pad, h, c = match.charAt(0), l = match.length;
  _$jscoverage['base/date.js'][852]++;
  switch (c) {
  case "d":
    _$jscoverage['base/date.js'][854]++;
    s = "" + d;
  case "H":
    _$jscoverage['base/date.js'][856]++;
    ! s && (s = "" + hour);
  case "m":
    _$jscoverage['base/date.js'][858]++;
    ! s && (s = "" + minute);
  case "s":
    _$jscoverage['base/date.js'][860]++;
    ! s && (s = "" + second);
    _$jscoverage['base/date.js'][861]++;
    pad = true;
    _$jscoverage['base/date.js'][862]++;
    break;
  case "G":
    _$jscoverage['base/date.js'][864]++;
    s = ((l < 4)? eraAbbr: eraNames)[fullYear < 0? 0: 1];
    _$jscoverage['base/date.js'][865]++;
    break;
  case "y":
    _$jscoverage['base/date.js'][867]++;
    s = fullYear;
    _$jscoverage['base/date.js'][868]++;
    if (l > 1) {
      _$jscoverage['base/date.js'][869]++;
      l == 2? s = string.truncate("" + s, 2, true): pad = true;
    }
    _$jscoverage['base/date.js'][871]++;
    break;
  case "Q":
  case "q":
    _$jscoverage['base/date.js'][874]++;
    s = ceil((month + 1) / 3);
    _$jscoverage['base/date.js'][875]++;
    pad = true;
    _$jscoverage['base/date.js'][876]++;
    break;
  case "M":
    _$jscoverage['base/date.js'][878]++;
    if (l < 3) {
      _$jscoverage['base/date.js'][879]++;
      s = month + 1;
      _$jscoverage['base/date.js'][880]++;
      pad = true;
    }
    else {
      _$jscoverage['base/date.js'][882]++;
      s = (l == 3? monthAbbr: monthNames)[month];
    }
    _$jscoverage['base/date.js'][884]++;
    break;
  case "w":
    _$jscoverage['base/date.js'][886]++;
    s = getWeekOfYear(date, 0, utc), pad = true;
    _$jscoverage['base/date.js'][887]++;
    break;
  case "D":
    _$jscoverage['base/date.js'][889]++;
    s = getDayOfYear(date, utc), pad = true;
    _$jscoverage['base/date.js'][890]++;
    break;
  case "E":
    _$jscoverage['base/date.js'][892]++;
    if (l < 3) {
      _$jscoverage['base/date.js'][893]++;
      s = day + 1;
      _$jscoverage['base/date.js'][894]++;
      pad = true;
    }
    else {
      _$jscoverage['base/date.js'][896]++;
      s = (l == 3? dayAbbr: dayNames)[day];
    }
    _$jscoverage['base/date.js'][898]++;
    break;
  case "a":
    _$jscoverage['base/date.js'][900]++;
    s = (hour < 12)? "AM": "PM";
    _$jscoverage['base/date.js'][901]++;
    break;
  case "h":
    _$jscoverage['base/date.js'][903]++;
    s = (hour % 12) || 12, pad = true;
    _$jscoverage['base/date.js'][904]++;
    break;
  case "K":
    _$jscoverage['base/date.js'][906]++;
    s = (hour % 12), pad = true;
    _$jscoverage['base/date.js'][907]++;
    break;
  case "k":
    _$jscoverage['base/date.js'][909]++;
    s = hour || 24, pad = true;
    _$jscoverage['base/date.js'][910]++;
    break;
  case "S":
    _$jscoverage['base/date.js'][912]++;
    s = round(millisecond * pow(10, l - 3)), pad = true;
    _$jscoverage['base/date.js'][913]++;
    break;
  case "v":
  case "z":
    _$jscoverage['base/date.js'][916]++;
    s = comb.date.getTimezoneName(date);
    _$jscoverage['base/date.js'][917]++;
    if (s) {
      _$jscoverage['base/date.js'][918]++;
      break;
    }
    _$jscoverage['base/date.js'][920]++;
    l = 4;
  case "Z":
    _$jscoverage['base/date.js'][923]++;
    var offset = date.getTimezoneOffset();
    _$jscoverage['base/date.js'][924]++;
    var tz = [(offset >= 0? "-": "+"), string.pad(floor(abs(offset) / 60), 2, "0"), string.pad(abs(offset) % 60, 2, "0")];
    _$jscoverage['base/date.js'][929]++;
    if (l == 4) {
      _$jscoverage['base/date.js'][930]++;
      tz.splice(0, 0, "GMT");
      _$jscoverage['base/date.js'][931]++;
      tz.splice(3, 0, ":");
    }
    _$jscoverage['base/date.js'][933]++;
    s = tz.join("");
    _$jscoverage['base/date.js'][934]++;
    break;
  default:
    _$jscoverage['base/date.js'][938]++;
    s = match;
  }
  _$jscoverage['base/date.js'][941]++;
  if (pad) {
    _$jscoverage['base/date.js'][942]++;
    s = string.pad(s, l, "0");
  }
  _$jscoverage['base/date.js'][944]++;
  return s;
}));
})};
_$jscoverage['base/date.js'][950]++;
date = comb.date;
_$jscoverage['base/date.js'].source = ["var string = require(\"./string\").string;","","/**"," * @ignore"," * Based on DOJO Date Implementation"," *"," * Dojo is available under *either* the terms of the modified BSD license *or* the"," * Academic Free License version 2.1. As a recipient of Dojo, you may choose which"," * license to receive this code under (except as noted in per-module LICENSE"," * files). Some modules may not be the copyright of the Dojo Foundation. These"," * modules contain explicit declarations of copyright in both the LICENSE files in"," * the directories in which they reside and in the code itself. No external"," * contributions are allowed under licenses which are fundamentally incompatible"," * with the AFL or BSD licenses that Dojo is distributed under."," *"," */","","var floor = Math.floor, round = Math.round, min = Math.min, pow = Math.pow, ceil = Math.ceil, abs = Math.abs;","var monthNames = [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"];","var monthAbbr = [\"Jan.\", \"Feb.\", \"Mar.\", \"Apr.\", \"May.\", \"Jun.\", \"Jul.\", \"Aug.\", \"Sep.\", \"Oct.\", \"Nov.\", \"Dec.\"];","var monthLetter = [\"J\", \"F\", \"M\", \"A\", \"M\", \"J\", \"J\", \"A\", \"S\", \"O\", \"N\", \"D\"];","var dayNames = [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"];","var dayAbbr = [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"];","var dayLetter = [\"S\", \"M\", \"T\", \"W\", \"T\", \"F\", \"S\"];","var eraNames = [\"Before Christ\", \"Anno Domini\"];","var eraAbbr = [\"BC\", \"AD\"];","var eraLetter = [\"B\", \"A\"];","","","var comb = exports, date;","/**"," * Determines if obj is a Date"," *"," * @param {Anything} obj the thing to test if it is a Date"," * @memberOf comb"," * @returns {Boolean} true if it is a Date false otherwise"," */","comb.isDate = function(obj) {","    var undef;","    return (obj !== undef &amp;&amp; typeof obj === \"object\" &amp;&amp; obj instanceof Date);","};","","function getDayOfYear(/*Date*/dateObject, utc) {","    // summary: gets the day of the year as represented by dateObject","    return date.difference(new Date(dateObject.getFullYear(), 0, 1, dateObject.getHours()), dateObject, null, utc) + 1; // Number","}","","function getWeekOfYear(/*Date*/dateObject, /*Number*/firstDayOfWeek, utc) {","    firstDayOfWeek = firstDayOfWeek || 0;","    var fullYear = dateObject[utc ? \"getUTCFullYear\" : \"getFullYear\"]();","    var firstDayOfYear = new Date(fullYear, 0, 1).getDay(),","            adj = (firstDayOfYear - firstDayOfWeek + 7) % 7,","            week = floor((getDayOfYear(dateObject) + adj - 1) / 7);","","    // if year starts on the specified day, start counting weeks at 1","    if (firstDayOfYear == firstDayOfWeek) {","        week++;","    }","","    return week; // Number","}","","function buildDateEXP(pattern, tokens) {","    return pattern.replace(/([a-z])\\1*/ig,","            function(match) {","                // Build a simple regexp.  Avoid captures, which would ruin the tokens list","                var s,","                        c = match.charAt(0),","                        l = match.length,","                        p2 = '', p3 = '';","                p2 = '0?';","                p3 = '0{0,2}';","                switch (c) {","                    case 'y':","                        s = '\\\\d{2,4}';","                        break;","                    case 'M':","                        s = (l &gt; 2) ? '\\\\S+?' : p2 + '[1-9]|1[0-2]';","                        break;","                    case 'D':","                        s = p2 + '[1-9]|' + p3 + '[1-9][0-9]|[12][0-9][0-9]|3[0-5][0-9]|36[0-6]';","                        break;","                    case 'd':","                        s = '[12]\\\\d|' + p2 + '[1-9]|3[01]';","                        break;","                    case 'w':","                        s = p2 + '[1-9]|[1-4][0-9]|5[0-3]';","                        break;","                    case 'E':","                        s = '\\\\S+';","                        break;","                    case 'h': //hour (1-12)","                        s = p2 + '[1-9]|1[0-2]';","                        break;","                    case 'K': //hour (1-24)","                        s = p2 + '\\\\d|1[01]';","                        break;","                    case 'H': //hour (0-23)","                        s = p2 + '\\\\d|1\\\\d|2[0-3]';","                        break;","                    case 'k': //hour (1-24)","                        s = p2 + '[1-9]|1\\\\d|2[0-4]';","                        break;","                    case 'm':","                    case 's':","                        s = '[0-5]\\\\d';","                        break;","                    case 'S':","                        s = '\\\\d{' + l + '}';","                        break;","                    case 'a':","                        var am = 'AM', pm = 'PM';","","                        s = am + '|' + pm;","                        if (am != am.toLowerCase()) {","                            s += '|' + am.toLowerCase();","                        }","                        if (pm != pm.toLowerCase()) {","                            s += '|' + pm.toLowerCase();","                        }","                        s = s.replace(/\\./g, \"\\\\.\");","                        break;","                    default:","                        // case 'v':","                        // case 'z':","                        // case 'Z':","                        s = \".*\";","//\t\t\t\tconsole.log(\"parse of date format, pattern=\" + pattern);","                }","","                if (tokens) {","                    tokens.push(match);","                }","","                return \"(\" + s + \")\"; // add capture","            }).replace(/[\\xa0 ]/g, \"[\\\\s\\\\xa0]\"); // normalize whitespace.  Need explicit handling of \\xa0 for IE.","}","","","/**"," * @namespace Utilities for Dates"," */","comb.date = {","","    /**","     * Returns the number of days in the month of a date","     *","     * @example","     *","     *  comb.date.getDaysInMonth(new Date(2006, 1, 1)) =&gt; 28","     *  comb.date.getDaysInMonth(new Date(2004, 1, 1)) =&gt; 29","     *  comb.date.getDaysInMonth(new Date(2006, 2, 1)) =&gt; 31","     *  comb.date.getDaysInMonth(new Date(2006, 3, 1)) =&gt; 30","     *  comb.date.getDaysInMonth(new Date(2006, 4, 1)) =&gt; 31","     *  comb.date.getDaysInMonth(new Date(2006, 5, 1)) =&gt; 30","     *  comb.date.getDaysInMonth(new Date(2006, 6, 1)) =&gt; 31","     * @param {Date} dateObject the date containing the month","     * @return {Number} the number of days in the month","     */","    getDaysInMonth : function(/*Date*/dateObject) {","        //\tsummary:","        //\t\tReturns the number of days in the month used by dateObject","        var month = dateObject.getMonth();","        var days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];","        if (month == 1 &amp;&amp; date.isLeapYear(dateObject)) {","            return 29;","        } // Number","        return days[month]; // Number","    },","","    /**","     * Determines if a date is a leap year","     *","     * @example","     *","     *  comb.date.isLeapYear(new Date(1600, 0, 1)) =&gt; true","     *  comb.date.isLeapYear(new Date(2004, 0, 1)) =&gt; true","     *  comb.date.isLeapYear(new Date(2000, 0, 1)) =&gt; true","     *  comb.date.isLeapYear(new Date(2006, 0, 1)) =&gt; false","     *  comb.date.isLeapYear(new Date(1900, 0, 1)) =&gt; false","     *  comb.date.isLeapYear(new Date(1800, 0, 1)) =&gt; false","     *  comb.date.isLeapYear(new Date(1700, 0, 1)) =&gt; false","     *","     * @param {Date} dateObject","     * @returns {Boolean} true if it is a leap year false otherwise","     */","    isLeapYear : function(/*Date*/dateObject, utc) {","        var year = dateObject[utc ? \"getUTCFullYear\" : \"getFullYear\"]();","        return !(year % 400) || (!(year % 4) &amp;&amp; !!(year % 100)); // Boolean","    },","","    /**","     * Determines if a date is on a weekend","     *","     * @example","     *","     * var thursday = new Date(2006, 8, 21);","     * var saturday = new Date(2006, 8, 23);","     * var sunday = new Date(2006, 8, 24);","     * var monday = new Date(2006, 8, 25);","     * comb.date.isWeekend(thursday)) =&gt; false","     * comb.date.isWeekend(saturday) =&gt; true","     * comb.date.isWeekend(sunday) =&gt; true","     * comb.date.isWeekend(monday)) =&gt; false","     *","     * @param {Date} dateObject the date to test","     *","     * @returns {Boolean} true if the date is a weekend","     */","    isWeekend : function(/*Date?*/dateObject, utc) {","        // summary:","        //\tDetermines if the date falls on a weekend, according to local custom.","        var day = (dateObject || new Date())[utc ? \"getUTCDay\" : \"getDay\"]();","        return day == 0 || day == 6;","    },","","    /**","     * Get the timezone of a date","     *","     * @example","     *  //just setting the strLocal to simulate the toString() of a date","     *  dt.str = 'Sun Sep 17 2006 22:25:51 GMT-0500 (CDT)';","     *  //just setting the strLocal to simulate the locale","     *  dt.strLocale = 'Sun 17 Sep 2006 10:25:51 PM CDT';","     *  comb.date.getTimezoneName(dt) =&gt; 'CDT'","     *  dt.str = 'Sun Sep 17 2006 22:57:18 GMT-0500 (CDT)';","     *  dt.strLocale = 'Sun Sep 17 22:57:18 2006';","     *  comb.date.getTimezoneName(dt) =&gt; 'CDT'","     * @param dateObject the date to get the timezone from","     *","     * @returns {String} the timezone of the date","     */","    getTimezoneName : function(/*Date*/dateObject) {","        var str = dateObject.toString();","        var tz = '';","        var pos = str.indexOf('(');","        if (pos &gt; -1) {","            tz = str.substring(++pos, str.indexOf(')'));","        }","        return tz; // String","    },","","","    /**","     * Compares two dates","     *","     * @example","     *","     * var d1 = new Date();","     * d1.setHours(0);","     * comb.date.compare(d1, d1) =&gt; 0","     *","     *  var d1 = new Date();","     *  d1.setHours(0);","     *  var d2 = new Date();","     *  d2.setFullYear(2005);","     *  d2.setHours(12);","     *  comb.date.compare(d1, d2, \"date\") =&gt; 1","     *  comb.date.compare(d1, d2, \"datetime\") =&gt; 1","     *","     *  var d1 = new Date();","     *  d1.setHours(0);","     *  var d2 = new Date();","     *  d2.setFullYear(2005);","     *  d2.setHours(12);","     *  comb.date.compare(d2, d1, \"date\"), -1);","     *  comb.date.compare(d1, d2, \"time\"), -1);","     *","     * @param {Date|String} date1 the date to comapare","     * @param {Date|String} [date2=new Date()] the date to compare date1 againse","     * @param {\"date\"|\"time\"|\"datetime\"} portion compares the portion specified","     *","     * @returns -1 if date1 is &lt; date2 0 if date1 === date2  1 if date1 &gt; date2","     */","    compare : function(/*Date*/date1, /*Date*/date2, /*String*/portion) {","        date1 = new Date(date1);","        date2 = new Date((date2 || new Date()));","","        if (portion == \"date\") {","            // Ignore times and compare dates.","            date1.setHours(0, 0, 0, 0);","            date2.setHours(0, 0, 0, 0);","        } else if (portion == \"time\") {","            // Ignore dates and compare times.","            date1.setFullYear(0, 0, 0);","            date2.setFullYear(0, 0, 0);","        }","        var ret = 0;","        date1 &gt; date2 &amp;&amp; (ret = 1);","        date1 &lt; date2 &amp;&amp; (ret = -1);","        return ret; // int","    },","","","    /**","     * Adds a specified interval and amount to a date","     *","     * @example","     *  var dtA = new Date(2005, 11, 27);","     *  comb.date.add(dtA, \"year\", 1) =&gt; new Date(2006, 11, 27);","     *  comb.date.add(dtA, \"years\", 1) =&gt; new Date(2006, 11, 27);","     *","     *  dtA = new Date(2000, 0, 1);","     *  comb.date.add(dtA, \"quarter\", 1) =&gt; new Date(2000, 3, 1);","     *  comb.date.add(dtA, \"quarters\", 1) =&gt; new Date(2000, 3, 1);","     *","     *  dtA = new Date(2000, 0, 1);","     *  comb.date.add(dtA, \"month\", 1) =&gt; new Date(2000, 1, 1);","     *  comb.date.add(dtA, \"months\", 1) =&gt; new Date(2000, 1, 1);","     *","     *  dtA = new Date(2000, 0, 31);","     *  comb.date.add(dtA, \"month\", 1) =&gt; new Date(2000, 1, 29);","     *  comb.date.add(dtA, \"months\", 1) =&gt; new Date(2000, 1, 29);","     *","     *  dtA = new Date(2000, 0, 1);","     *  comb.date.add(dtA, \"week\", 1) =&gt; new Date(2000, 0, 8);","     *  comb.date.add(dtA, \"weeks\", 1) =&gt; new Date(2000, 0, 8);","     *","     *  dtA = new Date(2000, 0, 1);","     *  comb.date.add(dtA, \"day\", 1) =&gt; new Date(2000, 0, 2);","     *","     *  dtA = new Date(2000, 0, 1);","     *  comb.date.add(dtA, \"weekday\", 1) =&gt; new Date(2000, 0, 3);","     *","     *  dtA = new Date(2000, 0, 1, 11);","     *  comb.date.add(dtA, \"hour\", 1) =&gt; new Date(2000, 0, 1, 12);","     *","     *  dtA = new Date(2000, 11, 31, 23, 59);","     *  comb.date.add(dtA, \"minute\", 1) =&gt; new Date(2001, 0, 1, 0, 0);","     *","     *  dtA = new Date(2000, 11, 31, 23, 59, 59);","     *  comb.date.add(dtA, \"second\", 1) =&gt; new Date(2001, 0, 1, 0, 0, 0);","     *","     *  dtA = new Date(2000, 11, 31, 23, 59, 59, 999);","     *  comb.date.add(dtA, \"millisecond\", 1) =&gt; new Date(2001, 0, 1, 0, 0, 0, 0);","     *","     * @param {Date} date","     * @param {String} interval the interval to add","     *  &lt;ul&gt;","     *      &lt;li&gt;day | days&lt;/li&gt;","     *      &lt;li&gt;weekday | weekdays&lt;/li&gt;","     *      &lt;li&gt;year | years&lt;/li&gt;","     *      &lt;li&gt;week | weeks&lt;/li&gt;","     *      &lt;li&gt;quarter | quarters&lt;/li&gt;","     *      &lt;li&gt;months | months&lt;/li&gt;","     *      &lt;li&gt;hour | hours&lt;/li&gt;","     *      &lt;li&gt;minute | minutes&lt;/li&gt;","     *      &lt;li&gt;second | seconds&lt;/li&gt;","     *      &lt;li&gt;millisecond | milliseconds&lt;/li&gt;","     *  &lt;/ul&gt;","     * @param {Number} [amount=0] the amount to add","     */","    add : function(/*Date*/date, /*String*/interval, /*int*/amount) {","        amount = amount | 0","        var sum = new Date(date);","        var fixOvershoot = false;","        var property = \"Date\";","","        //noinspection FallthroughInSwitchStatementJS","        switch (interval) {","            case \"day\":","            case \"days\" :","                break;","            case \"weekday\":","            case \"weekdays\":","                // Divide the increment time span into weekspans plus leftover days","                // e.g., 8 days is one 5-day weekspan / and two leftover days","                // Can't have zero leftover days, so numbers divisible by 5 get","                // a days value of 5, and the remaining days make up the number of weeks","                var days, weeks, mod = amount % 5, strt = date.getDay(), adj = 0;","                if (!mod) {","                    days = (amount &gt; 0) ? 5 : -5;","                    weeks = (amount &gt; 0) ? ((amount - 5) / 5) : ((amount + 5) / 5);","                } else {","                    days = mod;","                    weeks = parseInt(amount / 5);","                }","                if (strt == 6 &amp;&amp; amount &gt; 0) {","                    adj = 1;","                } else if (strt == 0 &amp;&amp; amount &lt; 0) {","                    // Orig date is Sun / negative increment","                    // Jump back over Sat","                    adj = -1;","                }","                // Get weekday val for the new date","                var trgt = strt + days;","                // New date is on Sat or Sun","                if (trgt == 0 || trgt == 6) {","                    adj = (amount &gt; 0) ? 2 : -2;","                }","                // Increment by number of weeks plus leftover days plus","                // weekend adjustments","                amount = (7 * weeks) + days + adj;","                break;","            case \"year\":","            case \"years\":","                property = \"FullYear\";","                fixOvershoot = true;","                break;","            case \"week\":","            case \"weeks\":","                amount *= 7;","                break;","            case \"quarter\":","            case \"quarters\" :","                // Naive quarter is just three months","                amount *= 3;","            case \"month\":","            case \"months\":","                // Reset to last day of month if you overshoot","                fixOvershoot = true;","                property = \"Month\";","                break;","            default:","                interval = interval.replace(/s$/, \"\");","                property = \"UTC\" + interval.charAt(0).toUpperCase() + interval.substring(1) + \"s\";","        }","","        if (property) {","            sum[\"set\" + property](sum[\"get\" + property]() + amount);","        }","","        if (fixOvershoot &amp;&amp; (sum.getDate() &lt; date.getDate())) {","            sum.setDate(0);","        }","","        return sum; // Date","    },","","    /**","     * Finds the difference between two dates based on the specified interval","     *","     * @example","     *","     * var dtA, dtB;","     *","     * dtA = new Date(2005, 11, 27);","     * dtB = new Date(2006, 11, 27);","     * comb.date.difference(dtA, dtB, \"year\") =&gt; 1","     *","     * dtA = new Date(2000, 1, 29);","     * dtB = new Date(2001, 2, 1);","     * comb.date.difference(dtA, dtB, \"quarter\") =&gt; 4","     * comb.date.difference(dtA, dtB, \"month\") =&gt; 13","     *","     * dtA = new Date(2000, 1, 1);","     * dtB = new Date(2000, 1, 8);","     * comb.date.difference(dtA, dtB, \"week\") =&gt; 1","     *","     * dtA = new Date(2000, 1, 29);","     * dtB = new Date(2000, 2, 1);","     * comb.date.difference(dtA, dtB, \"day\") =&gt; 1","     *","     * dtA = new Date(2006, 7, 3);","     * dtB = new Date(2006, 7, 11);","     * comb.date.difference(dtA, dtB, \"weekday\") =&gt; 6","     *","     * dtA = new Date(2000, 11, 31, 23);","     * dtB = new Date(2001, 0, 1, 0);","     * comb.date.difference(dtA, dtB, \"hour\") =&gt; 1","     *","     * dtA = new Date(2000, 11, 31, 23, 59);","     * dtB = new Date(2001, 0, 1, 0, 0);","     * comb.date.difference(dtA, dtB, \"minute\") =&gt; 1","     *","     * dtA = new Date(2000, 11, 31, 23, 59, 59);","     * dtB = new Date(2001, 0, 1, 0, 0, 0);","     * comb.date.difference(dtA, dtB, \"second\") =&gt; 1","     *","     * dtA = new Date(2000, 11, 31, 23, 59, 59, 999);","     * dtB = new Date(2001, 0, 1, 0, 0, 0, 0);","     * comb.date.difference(dtA, dtB, \"millisecond\") =&gt; 1","     *","     *","     * @param {Date} date1","     * @param {Date} [date2 = new Date()]","     * @param {String} [interval = \"day\"] the intercal to find the difference of.","     *   &lt;ul&gt;","     *      &lt;li&gt;day | days&lt;/li&gt;","     *      &lt;li&gt;weekday | weekdays&lt;/li&gt;","     *      &lt;li&gt;year | years&lt;/li&gt;","     *      &lt;li&gt;week | weeks&lt;/li&gt;","     *      &lt;li&gt;quarter | quarters&lt;/li&gt;","     *      &lt;li&gt;months | months&lt;/li&gt;","     *      &lt;li&gt;hour | hours&lt;/li&gt;","     *      &lt;li&gt;minute | minutes&lt;/li&gt;","     *      &lt;li&gt;second | seconds&lt;/li&gt;","     *      &lt;li&gt;millisecond | milliseconds&lt;/li&gt;","     *  &lt;/ul&gt;","     */","    difference : function(/*Date*/date1, /*Date?*/date2, /*String*/interval, utc) {","        date2 = date2 || new Date();","        interval = interval || \"day\";","        var yearDiff = date2.getFullYear() - date1.getFullYear();","        var delta = 1; // Integer return value","","        switch (interval) {","            case \"quarter\":","            case \"quarters\":","                var m1 = date1[utc ? \"getUTCMonth\" : \"getMonth\"]();","                var m2 = date2[utc ? \"getUTCMonth\" : \"getMonth\"]();","                // Figure out which quarter the months are in","                var q1 = floor(m1 / 3) + 1;","                var q2 = floor(m2 / 3) + 1;","                // Add quarters for any year difference between the dates","                q2 += (yearDiff * 4);","                delta = q2 - q1;","                break;","            case \"weekday\":","            case \"weekdays\":","                var days = round(date.difference(date1, date2, \"day\", utc));","                var weeks = parseInt(date.difference(date1, date2, \"week\", utc));","                var mod = days % 7;","","                // Even number of weeks","                if (mod == 0) {","                    days = weeks * 5;","                } else {","                    // Weeks plus spare change (&lt; 7 days)","                    var adj = 0;","                    var aDay = date1[utc ? \"getUTCDay\" : \"getDay\"]();","                    var bDay = date2[utc ? \"getUTCDay\" : \"getDay\"]();","","                    weeks = parseInt(days / 7);","                    mod = days % 7;","                    // Mark the date advanced by the number of","                    // round weeks (may be zero)","                    var dtMark = new Date(date1);","                    dtMark.setDate(dtMark[utc ? \"getUTCDate\" : \"getDate\"]() + (weeks * 7));","                    var dayMark = dtMark[utc ? \"getUTCDay\" : \"getDay\"]();","","                    // Spare change days -- 6 or less","                    if (days &gt; 0) {","                        switch (true) {","                            // Range starts on Sat","                            case (aDay == 6 || bDay == 6):","                                adj = -1;","                                break;","                            // Range starts on Sun","                            case aDay == 0:","                                adj = 0;","                                break;","                            // Range ends on Sun","                            case bDay == 0:","                                adj = -2;","                                break;","                            // Range contains weekend","                            case (dayMark + mod) &gt; 5:","                                adj = -2;","                        }","                    } else if (days &lt; 0) {","                        switch (true) {","                            // Range starts on Sat","                            case aDay == 6:","                                adj = 0;","                                break;","                            // Range starts on Sun","                            case aDay == 0:","                                adj = 1;","                                break;","                            // Range ends on Sat","                            case bDay == 6:","                                adj = 2;","                                break;","                            // Range ends on Sun","                            case bDay == 0:","                                adj = 1;","                                break;","                            // Range contains weekend","                            case (dayMark + mod) &lt; 0:","                                adj = 2;","                        }","                    }","                    days += adj;","                    days -= (weeks * 2);","                }","                delta = days;","                break;","            case \"year\":","            case \"years\":","                delta = yearDiff;","                break;","            case \"month\":","            case \"months\":","                var m1 = date1[utc ? \"getUTCMonth\" : \"getMonth\"]();","                var m2 = date2[utc ? \"getUTCMonth\" : \"getMonth\"]();","                delta = (m2 - m1) + (yearDiff * 12);","                break;","            case \"week\":","            case \"weeks\":","                delta = parseInt(date.difference(date1, date2, \"day\", utc) / 7);","                break;","            case \"day\":","            case \"days\":","                delta /= 24;","            case \"hour\":","            case \"hours\":","                delta /= 60;","            case \"minute\":","            case \"minutes\":","                delta /= 60;","            case \"second\":","            case \"seconds\":","                delta /= 1000;","            case \"millisecond\":","            case \"milliseconds\":","                delta *= date2.getTime() - date1.getTime();","        }","","        // Round for fractional values and DST leaps","        return round(delta); // Number (integer)","    },","","","    /**","     * Parses a date string into a date object","     *","     * @example","     *  var aug_11_2006 = new Date(2006, 7, 11, 0);","     *  comb.date.parse(\"08/11/06\", \"MM/dd/yy\") =&gt; aug_11_2006","     *  comb.date.parse(\"11Aug2006\", 'ddMMMyyyy') =&gt; aug_11_2006","     *  comb.date.parse(\"Aug2006\", 'MMMyyyy') =&gt; new Date(2006, 7, 1)","     *  comb.date.parse(\"Aug 11, 2006\", \"MMM dd, yyyy\") =&gt; aug_11_2006","     *  comb.date.parse(\"August 11, 2006\", \"MMMM dd, yyyy\") =&gt; aug_11_2006","     *  comb.date.parse(\"Friday, August 11, 2006\", \"EEEE, MMMM dd, yyyy\") =&gt; aug_11_2006","     *","     * @param {String} dateStr The string to parse","     * @param {String} format the format of the date composed of the following options","     * &lt;ul&gt;","     *                  &lt;li&gt; G    Era designator    Text    AD&lt;/li&gt;","     *                  &lt;li&gt; y    Year    Year    1996; 96&lt;/li&gt;","     *                  &lt;li&gt; M    Month in year    Month    July; Jul; 07&lt;/li&gt;","     *                  &lt;li&gt; w    Week in year    Number    27&lt;/li&gt;","     *                  &lt;li&gt; W    Week in month    Number    2&lt;/li&gt;","     *                  &lt;li&gt; D    Day in year    Number    189&lt;/li&gt;","     *                  &lt;li&gt; d    Day in month    Number    10&lt;/li&gt;","     *                  &lt;li&gt; E    Day in week    Text    Tuesday; Tue&lt;/li&gt;","     *                  &lt;li&gt; a    Am/pm marker    Text    PM&lt;/li&gt;","     *                  &lt;li&gt; H    Hour in day (0-23)    Number    0&lt;/li&gt;","     *                  &lt;li&gt; k    Hour in day (1-24)    Number    24&lt;/li&gt;","     *                  &lt;li&gt; K    Hour in am/pm (0-11)    Number    0&lt;/li&gt;","     *                  &lt;li&gt; h    Hour in am/pm (1-12)    Number    12&lt;/li&gt;","     *                  &lt;li&gt; m    Minute in hour    Number    30&lt;/li&gt;","     *                  &lt;li&gt; s    Second in minute    Number    55&lt;/li&gt;","     *                  &lt;li&gt; S    Millisecond    Number    978&lt;/li&gt;","     *                  &lt;li&gt; z    Time zone    General time zone    Pacific Standard Time; PST; GMT-08:00&lt;/li&gt;","     *                  &lt;li&gt; Z    Time zone    RFC 822 time zone    -0800 &lt;/li&gt;","     * &lt;/ul&gt;","     *","     * @returns {Date} the parsed date","     *","     *","     */","    parse : function(dateStr, format) {","        if (!format) throw new Error('format required when calling comb.date.parse');","        var tokens = [], regexp = buildDateEXP(format, tokens),","                re = new RegExp(\"^\" + regexp + \"$\", \"i\"),","                match = re.exec(dateStr);","        if (!match) {","            return null;","        } // null","","        var result = [1970,0,1,0,0,0,0],// will get converted to a Date at the end","                amPm = \"\",","                valid = match.every(function(v, i) {","                    if (!i) {","                        return true;","                    }","                    var token = tokens[i - 1];","                    var l = token.length;","                    switch (token.charAt(0)) {","                        case 'y':","                            if (v &lt; 100) {","                                v = parseInt(v, 10);","                                //choose century to apply, according to a sliding window","                                //of 80 years before and 20 years after present year","                                var year = '' + new Date().getFullYear(),","                                        century = year.substring(0, 2) * 100,","                                        cutoff = min(year.substring(2, 4) + 20, 99);","                                result[0] = (v &lt; cutoff) ? century + v : century - 100 + v;","                            } else {","                                result[0] = v;","                            }","                            break;","                        case 'M':","                            if (l &gt; 2) {","                                var months = monthNames;","                                if (l === 3) {","                                    months = monthAbbr;","                                }","                                //Tolerate abbreviating period in month part","                                //Case-insensitive comparison","                                v = v.replace(\".\", \"\").toLowerCase();","                                months = months.map(function(s) {","                                    return s.replace(\".\", \"\").toLowerCase();","                                });","                                if ((v = months.indexOf(v)) == -1) {","                                    return false;","                                }","                            } else {","                                v--;","                            }","                            result[1] = v;","                            break;","                        case 'E':","                        case 'e':","                            var days = dayNames;","                            if (l == 3) {","                                days = dayAbbr;","                            }","                            //Case-insensitive comparison","                            v = v.toLowerCase();","                            days = days.map(function(d) {","                                return d.toLowerCase();","                            });","                            var d = days.indexOf(v);","                            if (d == -1) {","                                v = parseInt(v);","                                if(isNaN(v) || v &gt; days.length){","                                    return false;","                                }","                            }else{","                                v = d;","                            }","                            break;","                        case 'D':","                            result[1] = 0;","                        case 'd':","                            result[2] = v;","                            break;","                        case 'a': //am/pm","                            var am = \"am\";","                            var pm = \"pm\";","                            var period = /\\./g;","                            v = v.replace(period, '').toLowerCase();","                            // we might not have seen the hours field yet, so store the state and apply hour change later","                            amPm = (v == pm) ? 'p' : (v == am) ? 'a' : '';","                            break;","                        case 'k': //hour (0-11)","                            if (v == 24) {","                                v = 0;","                            }","                        // fallthrough...","                        case 'h': //hour (1-12)","                        case 'H': //hour (0-23)","                        case 'K': //hour (0-11)","                            //in the 12-hour case, adjusting for am/pm requires the 'a' part","                            //which could come before or after the hour, so we will adjust later","                            result[3] = v;","                            break;","                        case 'm': //minutes","                            result[4] = v;","                            break;","                        case 's': //seconds","                            result[5] = v;","                            break;","                        case 'S': //milliseconds","                            result[6] = v;","                    }","                    return true;","                });","        if (valid) {","            var hours = +result[3];","            //account for am/pm","            if (amPm === 'p' &amp;&amp; hours &lt; 12) {","                result[3] = hours + 12; //e.g., 3pm -&gt; 15","            } else if (amPm === 'a' &amp;&amp; hours == 12) {","                result[3] = 0; //12am -&gt; 0","            }","            var dateObject = new Date(result[0], result[1], result[2], result[3], result[4], result[5], result[6]); // Date","            var dateToken = (tokens.indexOf('d') != -1),","                    monthToken = (tokens.indexOf('M') != -1),","                    month = result[1],","                    day = result[2],","                    dateMonth = dateObject.getMonth(),","                    dateDay = dateObject.getDate();","            if ((monthToken &amp;&amp; dateMonth &gt; month) || (dateToken &amp;&amp; dateDay &gt; day)) {","                return null;","            }","            return dateObject; // Date","        } else {","            return null;","        }","    },","","    /**","     * Formats a date to the specidifed format string","     *","     * @example","     *","     * var date = new Date(2006, 7, 11, 0, 55, 12, 345);","     * comb.date.format(date, \"EEEE, MMMM dd, yyyy\") =&gt; \"Friday, August 11, 2006\"","     * comb.date.format(date, \"M/dd/yy\") =&gt; \"8/11/06\"","     * comb.date.format(date, \"E\") =&gt; \"6\"","     * comb.date.format(date, \"h:m a\") =&gt; \"12:55 AM\"","     * comb.date.format(date, 'h:m:s') =&gt; \"12:55:12\"","     * comb.date.format(date, 'h:m:s.SS') =&gt; \"12:55:12.35\"","     * comb.date.format(date, 'k:m:s.SS') =&gt; \"24:55:12.35\"","     * comb.date.format(date, 'H:m:s.SS') =&gt; \"0:55:12.35\"","     * comb.date.format(date, \"ddMMyyyy\") =&gt; \"11082006\"","     *","     * @param date the date to format","     * @param {String} format the format of the date composed of the following options","     * &lt;ul&gt;","     *                  &lt;li&gt; G    Era designator    Text    AD&lt;/li&gt;","     *                  &lt;li&gt; y    Year    Year    1996; 96&lt;/li&gt;","     *                  &lt;li&gt; M    Month in year    Month    July; Jul; 07&lt;/li&gt;","     *                  &lt;li&gt; w    Week in year    Number    27&lt;/li&gt;","     *                  &lt;li&gt; W    Week in month    Number    2&lt;/li&gt;","     *                  &lt;li&gt; D    Day in year    Number    189&lt;/li&gt;","     *                  &lt;li&gt; d    Day in month    Number    10&lt;/li&gt;","     *                  &lt;li&gt; E    Day in week    Text    Tuesday; Tue&lt;/li&gt;","     *                  &lt;li&gt; a    Am/pm marker    Text    PM&lt;/li&gt;","     *                  &lt;li&gt; H    Hour in day (0-23)    Number    0&lt;/li&gt;","     *                  &lt;li&gt; k    Hour in day (1-24)    Number    24&lt;/li&gt;","     *                  &lt;li&gt; K    Hour in am/pm (0-11)    Number    0&lt;/li&gt;","     *                  &lt;li&gt; h    Hour in am/pm (1-12)    Number    12&lt;/li&gt;","     *                  &lt;li&gt; m    Minute in hour    Number    30&lt;/li&gt;","     *                  &lt;li&gt; s    Second in minute    Number    55&lt;/li&gt;","     *                  &lt;li&gt; S    Millisecond    Number    978&lt;/li&gt;","     *                  &lt;li&gt; z    Time zone    General time zone    Pacific Standard Time; PST; GMT-08:00&lt;/li&gt;","     *                  &lt;li&gt; Z    Time zone    RFC 822 time zone    -0800 &lt;/li&gt;","     * &lt;/ul&gt;","     */","    format : function(date, format, utc) {","        utc = utc || false;","        var fullYear, month, day, d, hour, minute, second, millisecond;","        if (utc) {","            fullYear = date.getUTCFullYear(),","                    month = date.getUTCMonth(),","                    day = date.getUTCDay(),","                    d = date.getUTCDate(),","                    hour = date.getUTCHours(),","                    minute = date.getUTCMinutes(),","                    second = date.getUTCSeconds(),","                    millisecond = date.getUTCMilliseconds();","        } else {","            fullYear = date.getFullYear(),","                    month = date.getMonth(),","                    d = date.getDate(),","                    day = date.getDay(),","                    hour = date.getHours(),","                    minute = date.getMinutes(),","                    second = date.getSeconds(),","                    millisecond = date.getMilliseconds();","        }","        return format.replace(/([a-z])\\1*/ig, function(match, options) {","            var s, pad, h,","                    c = match.charAt(0),","                    l = match.length;","","            switch (c) {","                case 'd':","                    s = \"\" + d;","                case 'H':","                    !s &amp;&amp; (s = \"\" + hour);","                case 'm':","                    !s &amp;&amp; (s = \"\" + minute);","                case 's':","                    !s &amp;&amp; (s = \"\" + second);","                    pad = true;","                    break;","                case 'G':","                    s = ((l &lt; 4) ? eraAbbr : eraNames)[fullYear &lt; 0 ? 0 : 1];","                    break;","                case 'y':","                    s = fullYear;","                    if (l &gt; 1) {","                        l == 2 ? s = string.truncate(\"\" + s, 2, true) : pad = true;","                    }","                    break;","                case 'Q':","                case 'q':","                    s = ceil((month + 1) / 3);","                    pad = true;","                    break;","                case 'M':","                    if (l &lt; 3) {","                        s = month + 1;","                        pad = true;","                    } else {","                        s = (l == 3 ? monthAbbr : monthNames)[month];","                    }","                    break;","                case 'w':","                    s = getWeekOfYear(date, 0, utc),pad = true;","                    break;","                case 'D':","                    s = getDayOfYear(date, utc),pad = true;","                    break;","                case 'E':","                    if (l &lt; 3) {","                        s = day + 1;","                        pad = true;","                    } else {","                        s = (l == 3 ? dayAbbr : dayNames)[day];","                    }","                    break;","                case 'a':","                    s = (hour &lt; 12) ? 'AM' : 'PM';","                    break;","                case 'h':","                    s = (hour % 12) || 12,pad = true;","                    break;","                case 'K':","                    s = (hour % 12),pad = true;","                    break;","                case 'k':","                    s = hour || 24,pad = true;","                    break;","                case 'S':","                    s = round(millisecond * pow(10, l - 3)),pad = true;","                    break;","                case 'v':","                case 'z':","                    s = comb.date.getTimezoneName(date);","                    if (s) {","                        break;","                    }","                    l = 4;","                // fallthrough... use GMT if tz not available","                case 'Z':","                    var offset = date.getTimezoneOffset();","                    var tz = [","                        (offset &gt;= 0 ? \"-\" : \"+\"),","                        string.pad(floor(abs(offset) / 60), 2, \"0\"),","                        string.pad(abs(offset) % 60, 2, \"0\")","                    ];","                    if (l == 4) {","                        tz.splice(0, 0, \"GMT\");","                        tz.splice(3, 0, \":\");","                    }","                    s = tz.join(\"\");","                    break;","//\t\t\t\tcase 'Y': case 'u': case 'W': case 'F': case 'g': case 'A': case 'e':","//\t\t\t\t\tconsole.log(match+\" modifier unimplemented\");","                default:","                    s = match;","                //  throw new Error(\"comb.date.format: invalid pattern char: \" + match);","            }","            if (pad) {","                s = string.pad(s, l, '0');","            }","            return s;","        });","    }","","};","","date = comb.date;"];
