PageSourceSearch

https://td-mmz.ru/media/system/js/mootools-more.js?c8f8f692403a478aecc78ab91b5dd39d

js td-mmz.ru collected 2026-10-08 12:38:57 UTC 321,229 bytes, 11,306 lines download raw bytes

1// MooTools: the javascript framework.
2// Load this file's selection again by visiting: http://mootools.net/more/065f2f092ece4e3b32bb5214464cf926
3// Or build this file again with packager using: packager build More/More More/Events.Pseudos More/Class.Refactor More/Class.Binds More/Class.Occlude More/Chain.Wait More/Array.Extras More/Date More/Date.Extras More/Number.Format More/Object.Extras More/String.Extras More/String.QueryString More/URI More/URI.Relative More/Hash More/Hash.Extras More/ElementCust.Forms More/Elements.From More/ElementCust.Event.Pseudos More/ElementCust.Event.Pseudos.Keys More/ElementCust.Measure More/ElementCust.Pin More/ElementCust.Position More/ElementCust.Shortcuts More/Form.Request More/Form.Request.Append More/Form.Validator More/Form.Validator.Inline More/Form.Validator.Extras More/OverText More/Fx.Elements More/Fx.Accordion More/Fx.Move More/Fx.Reveal More/Fx.Scroll More/Fx.Slide More/Fx.SmoothScroll More/Fx.Sort More/Drag More/Drag.Move More/Slider More/Sortables More/Request.JSONP More/Request.Queue More/Request.Periodical More/Assets More/Color More/Group More/Hash.Cookie More/IframeShim More/Table More/HtmlTable More/HtmlTable.Zebra More/HtmlTable.Sort More/HtmlTable.Select More/Keyboard More/Keyboard.Extras More/Mask More/Scroller More/Tips More/Spinner More/Locale More/Locale.Set.From More/Locale.en-US.Date More/Locale.en-US.Form.Validator More/Locale.en-US.Number More/Locale.ar.Date More/Locale.ar.Form.Validator More/Locale.ca-CA.Date More/Locale.ca-CA.Form.Validator More/Locale.cs-CZ.Date More/Locale.cs-CZ.Form.Validator More/Locale.da-DK.Date More/Locale.da-DK.Form.Validator More/Locale.de-CH.Date More/Locale.de-CH.Form.Validator More/Locale.de-DE.Date More/Locale.de-DE.Form.Validator More/Locale.de-DE.Number More/Locale.en-GB.Date More/Locale.es-AR.Date More/Locale.es-AR.Form.Validator More/Locale.es-ES.Date More/Locale.es-ES.Form.Validator More/Locale.et-EE.Date More/Locale.et-EE.Form.Validator More/Locale.EU.Number More/Locale.fa.Date More/Locale.fa.Form.Validator More/Locale.fi-FI.Date More/Locale.fi-FI.Form.Validator More/Locale.fi-FI.Number More/Locale.fr-FR.Date More/Locale.fr-FR.Form.Validator More/Locale.fr-FR.Number More/Locale.he-IL.Date More/Locale.he-IL.Form.Validator More/Locale.he-IL.Number More/Locale.hu-HU.Date More/Locale.hu-HU.Form.Validator More/Locale.it-IT.Date More/Locale.it-IT.Form.Validator More/Locale.ja-JP.Date More/Locale.ja-JP.Form.Validator More/Locale.ja-JP.Number More/Locale.nl-NL.Date More/Locale.nl-NL.Form.Validator More/Locale.nl-NL.Number More/Locale.no-NO.Date More/Locale.no-NO.Form.Validator More/Locale.pl-PL.Date More/Locale.pl-PL.Form.Validator More/Locale.pt-BR.Date More/Locale.pt-BR.Form.Validator More/Locale.pt-PT.Date More/Locale.pt-PT.Form.Validator More/Locale.ru-RU-unicode.Date More/Locale.ru-RU-unicode.Form.Validator More/Locale.si-SI.Date More/Locale.si-SI.Form.Validator More/Locale.sv-SE.Date More/Locale.sv-SE.Form.Validator More/Locale.uk-UA.Date More/Locale.uk-UA.Form.Validator More/Locale.zh-CH.Date More/Locale.zh-CH.Form.Validator
4/*
5---
6copyrights:
7  - [MooTools](http://mootools.net)
8
9licenses:
10  - [MIT License](http://mootools.net/license.txt)
11...
12*/
13MooTools.More = {
14  version: "1.4.0.1",
15  build: "a4244edf2aa97ac8a196fc96082dd35af1abab87",
16};
17// (function () {
18//   Events.Pseudos = function (h, e, f) {
19//     var d = "_monitorEvents:";
20//     var c = function (i) {
21//       return {
22//         store: i.store
23//           ? function (j, k) {
24//               i.store(d + j, k);
25//             }
26//           : function (j, k) {
27//               (i._monitorEvents || (i._monitorEvents = {}))[j] = k;
28//             },
29//         retrieve: i.retrieve
30//           ? function (j, k) {
31//               return i.retrieve(d + j, k);
32//             }
33//           : function (j, k) {
34//               if (!i._monitorEvents) {
35//                 return k;
36//               }
37//               return i._monitorEvents[j] || k;
38//             },
39//       };
40//     };
41//     var g = function (k) {
42//       if (k.indexOf(":") == -1 || !h) {
43//         return null;
44//       }
45//       var j = Slick.parse(k).expressions[0][0],
46//         p = j.pseudos,
47//         i = p.length,
48//         o = [];
49//       while (i--) {
50//         var n = p[i].key,
51//           m = h[n];
52//         if (m != null) {
53//           o.push({
54//             event: j.tag,
55//             value: p[i].value,
56//             pseudo: n,
57//             original: k,
58//             listener: m,
59//           });
60//         }
61//       }
62//       return o.length ? o : null;
63//     };
64//     return {
65//       addEvent: function (m, p, j) {
66//         var n = g(m);
67//         console.log(e);
68//         console.log(m);
69//         console.log(p);
70//         console.log(j);
71//         console.log('jk');
72//         if (!n) {
73//           return e.call(this, m, p, j);
74//         }
75//         var k = c(this),
76//           r = k.retrieve(m, []),
77//           i = n[0].event,
78//           l = Array.slice(arguments, 2),
79//           o = p,
80//           q = this;
81//         n.each(function (s) {
82//           var t = s.listener,
83//             u = o;
84//           if (t == false) {
85//             i += ":" + s.pseudo + "(" + s.value + ")";
86//           } else {
87//             o = function () {
88//               t.call(q, s, u, arguments, o);
89//             };
90//           }
91//         });
92//         r.include({ type: i, event: p, monitor: o });
93//         k.store(m, r);
94//         if (m != i) {
95//           e.apply(this, [m, p].concat(l));
96//         }
97//         return e.apply(this, [i, o].concat(l));
98//       },
99//       removeEvent: function (m, l) {
100//         var k = g(m);
101//         if (!k) {
102//           return f.call(this, m, l);
103//         }
104//         var n = c(this),
105//           j = n.retrieve(m);
106//         if (!j) {
107//           return this;
108//         }
109//         var i = Array.slice(arguments, 2);
110//         f.apply(this, [m, l].concat(i));
111//         j.each(function (o, p) {
112//           if (!l || o.event == l) {
113//             f.apply(this, [o.type, o.monitor].concat(i));
114//           }
115//           delete j[p];
116//         }, this);
117//         n.store(m, j);
118//         return this;
119//       },
120//     };
121//   };
122//   var b = {
123//     once: function (e, f, d, c) {
124//       f.apply(this, d);
125//       this.removeEvent(e.event, c).removeEvent(e.original, f);
126//     },
127//     throttle: function (d, e, c) {
128//       if (!e._throttled) {
129//         e.apply(this, c);
130//         e._throttled = setTimeout(function () {
131//           e._throttled = false;
132//         }, d.value || 250);
133//       }
134//     },
135//     pause: function (d, e, c) {
136//       clearTimeout(e._pause);
137//       e._pause = e.delay(d.value || 250, this, c);
138//     },
139//   };
140//   Events.definePseudo = function (c, d) {
141//     b[c] = d;
142//     return this;
143//   };
144//   Events.lookupPseudo = function (c) {
145//     return b[c];
146//   };
147//   var a = Events.prototype;
148//   Events.implement(Events.Pseudos(b, a.addEvent, a.removeEvent));
149//   ["Request", "Fx"].each(function (c) {
150//     if (this[c]) {
151//       this[c].implement(Events.prototype);
152//     }
153//   });
154// })();
155Class.refactor = function (b, a) {
156  Object.each(a, function (e, d) {
157    var c = b.prototype[d];
158    c = (c && c.$origin) || c || function () {};
159    b.implement(
160      d,
161      typeof e == "function"
162        ? function () {
163            var f = this.previous;
164            this.previous = c;
165            var g = e.apply(this, arguments);
166            this.previous = f;
167            return g;
168          }
169        : e
170    );
171  });
172  return b;
173};
174Class.Mutators.Binds = function (a) {
175  if (!this.prototype.initialize) {
176    this.implement("initialize", function () {});
177  }
178  return Array.from(a).concat(this.prototype.Binds || []);
179};
180Class.Mutators.initialize = function (a) {
181  return function () {
182    Array.from(this.Binds).each(function (b) {
183      var c = this[b];
184      if (c) {
185        this[b] = c.bind(this);
186      }
187    }, this);
188    return a.apply(this, arguments);
189  };
190};
191Class.Occlude = new Class({
192  occlude: function (c, b) {
193    b = document.id(b || this.ElementCust);
194    var a = b.retrieve(c || this.property);
195    if (a && !this.occluded) {
196      return (this.occluded = a);
197    }
198    this.occluded = false;
199    b.store(c || this.property, this);
200    return this.occluded;
201  },
202});
203(function () {
204  var a = {
205    wait: function (b) {
206      return this.chain(
207        function () {
208          this.callChain.delay(b == null ? 500 : b, this);
209          return this;
210        }.bind(this)
211      );
212    },
213  };
214  Chain.implement(a);
215  if (this.Fx) {
216    Fx.implement(a);
217  }
218  if (this.ElementCust && ElementCust.implement && this.Fx) {
219    ElementCust.implement({
220      chains: function (b) {
221        Array.from(b || ["tween", "morph", "reveal"]).each(function (c) {
222          c = this.get(c);
223          if (!c) {
224            return;
225          }
226          c.setOptions({ link: "chain" });
227        }, this);
228        return this;
229      },
230      pauseFx: function (c, b) {
231        this.chains(b)
232          .get(b || "tween")
233          .wait(c);
234        return this;
235      },
236    });
237  }
238})();
239(function (a) {
240  Array.implement({
241    min: function () {
242      return Math.min.apply(null, this);
243    },
244    max: function () {
245      return Math.max.apply(null, this);
246    },
247    average: function () {
248      return this.length ? this.sum() / this.length : 0;
249    },
250    sum: function () {
251      var b = 0,
252        c = this.length;
253      if (c) {
254        while (c--) {
255          b += this[c];
256        }
257      }
258      return b;
259    },
260    unique: function () {
261      return [].combine(this);
262    },
263    shuffle: function () {
264      for (var c = this.length; c && --c; ) {
265        var b = this[c],
266          d = Math.floor(Math.random() * (c + 1));
267        this[c] = this[d];
268        this[d] = b;
269      }
270      return this;
271    },
272    reduce: function (d, e) {
273      for (var c = 0, b = this.length; c < b; c++) {
274        if (c in this) {
275          e = e === a ? this[c] : d.call(null, e, this[c], c, this);
276        }
277      }
278      return e;
279    },
280    reduceRight: function (c, d) {
281      var b = this.length;
282      while (b--) {
283        if (b in this) {
284          d = d === a ? this[b] : c.call(null, d, this[b], b, this);
285        }
286      }
287      return d;
288    },
289  });
290})();
291(function () {
292  var b = function (c) {
293    return c != null;
294  };
295  var a = Object.prototype.hasOwnProperty;
296  Object.extend({
297    getFromPath: function (e, f) {
298      if (typeof f == "string") {
299        f = f.split(".");
300      }
301      for (var d = 0, c = f.length; d < c; d++) {
302        if (a.call(e, f[d])) {
303          e = e[f[d]];
304        } else {
305          return null;
306        }
307      }
308      return e;
309    },
310    cleanValues: function (c, e) {
311      e = e || b;
312      for (var d in c) {
313        if (!e(c[d])) {
314          delete c[d];
315        }
316      }
317      return c;
318    },
319    erase: function (c, d) {
320      if (a.call(c, d)) {
321        delete c[d];
322      }
323      return c;
324    },
325    run: function (d) {
326      var c = Array.slice(arguments, 1);
327      for (var e in d) {
328        if (d[e].apply) {
329          d[e].apply(d, c);
330        }
331      }
332      return d;
333    },
334  });
335})();
336(function () {
337  var b = null,
338    a = {},
339    d = {};
340  var c = function (f) {
341    if (instanceOf(f, e.Set)) {
342      return f;
343    } else {
344      return a[f];
345    }
346  };
347  var e = (this.Locale = {
348    define: function (f, j, h, i) {
349      var g;
350      if (instanceOf(f, e.Set)) {
351        g = f.name;
352        if (g) {
353          a[g] = f;
354        }
355      } else {
356        g = f;
357        if (!a[g]) {
358          a[g] = new e.Set(g);
359        }
360        f = a[g];
361      }
362      if (j) {
363        f.define(j, h, i);
364      }
365      if (!b) {
366        b = f;
367      }
368      return f;
369    },
370    use: function (f) {
371      f = c(f);
372      if (f) {
373        b = f;
374        this.fireEvent("change", f);
375      }
376      return this;
377    },
378    getCurrent: function () {
379      return b;
380    },
381    get: function (g, f) {
382      return b ? b.get(g, f) : "";
383    },
384    inherit: function (f, g, h) {
385      f = c(f);
386      if (f) {
387        f.inherit(g, h);
388      }
389      return this;
390    },
391    list: function () {
392      return Object.keys(a);
393    },
394  });
395  Object.append(e, new Events());
396  e.Set = new Class({
397    sets: {},
398    inherits: { locales: [], sets: {} },
399    initialize: function (f) {
400      this.name = f || "";
401    },
402    define: function (i, g, h) {
403      var f = this.sets[i];
404      if (!f) {
405        f = {};
406      }
407      if (g) {
408        if (typeOf(g) == "object") {
409          f = Object.merge(f, g);
410        } else {
411          f[g] = h;
412        }
413      }
414      this.sets[i] = f;
415      return this;
416    },
417    get: function (r, j, q) {
418      var p = Object.getFromPath(this.sets, r);
419      if (p != null) {
420        var m = typeOf(p);
421        if (m == "function") {
422          p = p.apply(null, Array.from(j));
423        } else {
424          if (m == "object") {
425            p = Object.clone(p);
426          }
427        }
428        return p;
429      }
430      var h = r.indexOf("."),
431        o = h < 0 ? r : r.substr(0, h),
432        k = (this.inherits.sets[o] || [])
433          .combine(this.inherits.locales)
434          .include("en-US");
435      if (!q) {
436        q = [];
437      }
438      for (var g = 0, f = k.length; g < f; g++) {
439        if (q.contains(k[g])) {
440          continue;
441        }
442        q.include(k[g]);
443        var n = a[k[g]];
444        if (!n) {
445          continue;
446        }
447        p = n.get(r, j, q);
448        if (p != null) {
449          return p;
450        }
451      }
452      return "";
453    },
454    inherit: function (g, h) {
455      g = Array.from(g);
456      if (h && !this.inherits.sets[h]) {
457        this.inherits.sets[h] = [];
458      }
459      var f = g.length;
460      while (f--) {
461        (h ? this.inherits.sets[h] : this.inherits.locales).unshift(g[f]);
462      }
463      return this;
464    },
465  });
466})();
467Locale.define("en-US", "Date", {
468  months: [
469    "January",
470    "February",
471    "March",
472    "April",
473    "May",
474    "June",
475    "July",
476    "August",
477    "September",
478    "October",
479    "November",
480    "December",
481  ],
482  months_abbr: [
483    "Jan",
484    "Feb",
485    "Mar",
486    "Apr",
487    "May",
488    "Jun",
489    "Jul",
490    "Aug",
491    "Sep",
492    "Oct",
493    "Nov",
494    "Dec",
495  ],
496  days: [
497    "Sunday",
498    "Monday",
499    "Tuesday",
500    "Wednesday",
501    "Thursday",
502    "Friday",
503    "Saturday",
504  ],
505  days_abbr: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
506  dateOrder: ["month", "date", "year"],
507  shortDate: "%m/%d/%Y",
508  shortTime: "%I:%M%p",
509  AM: "AM",
510  PM: "PM",
511  firstDayOfWeek: 0,
512  ordinal: function (a) {
513    return a > 3 && a < 21
514      ? "th"
515      : ["th", "st", "nd", "rd", "th"][Math.min(a % 10, 4)];
516  },
517  lessThanMinuteAgo: "less than a minute ago",
518  minuteAgo: "about a minute ago",
519  minutesAgo: "{delta} minutes ago",
520  hourAgo: "about an hour ago",
521  hoursAgo: "about {delta} hours ago",
522  dayAgo: "1 day ago",
523  daysAgo: "{delta} days ago",
524  weekAgo: "1 week ago",
525  weeksAgo: "{delta} weeks ago",
526  monthAgo: "1 month ago",
527  monthsAgo: "{delta} months ago",
528  yearAgo: "1 year ago",
529  yearsAgo: "{delta} years ago",
530  lessThanMinuteUntil: "less than a minute from now",
531  minuteUntil: "about a minute from now",
532  minutesUntil: "{delta} minutes from now",
533  hourUntil: "about an hour from now",
534  hoursUntil: "about {delta} hours from now",
535  dayUntil: "1 day from now",
536  daysUntil: "{delta} days from now",
537  weekUntil: "1 week from now",
538  weeksUntil: "{delta} weeks from now",
539  monthUntil: "1 month from now",
540  monthsUntil: "{delta} months from now",
541  yearUntil: "1 year from now",
542  yearsUntil: "{delta} years from now",
543});
544(function () {
545  var a = this.Date;
546  var f = (a.Methods = {
547    ms: "Milliseconds",
548    year: "FullYear",
549    min: "Minutes",
550    mo: "Month",
551    sec: "Seconds",
552    hr: "Hours",
553  });
554  [
555    "Date",
556    "Day",
557    "FullYear",
558    "Hours",
559    "Milliseconds",
560    "Minutes",
561    "Month",
562    "Seconds",
563    "Time",
564    "TimezoneOffset",
565    "Week",
566    "Timezone",
567    "GMTOffset",
568    "DayOfYear",
569    "LastMonth",
570    "LastDayOfMonth",
571    "UTCDate",
572    "UTCDay",
573    "UTCFullYear",
574    "AMPM",
575    "Ordinal",
576    "UTCHours",
577    "UTCMilliseconds",
578    "UTCMinutes",
579    "UTCMonth",
580    "UTCSeconds",
581    "UTCMilliseconds",
582  ].each(function (s) {
583    a.Methods[s.toLowerCase()] = s;
584  });
585  var p = function (u, t, s) {
586    if (t == 1) {
587      return u;
588    }
589    return u < Math.pow(10, t - 1) ? (s || "0") + p(u, t - 1, s) : u;
590  };
591  a.implement({
592    set: function (u, s) {
593      u = u.toLowerCase();
594      var t = f[u] && "set" + f[u];
595      if (t && this[t]) {
596        this[t](s);
597      }
598      return this;
599    }.overloadSetter(),
600    get: function (t) {
601      t = t.toLowerCase();
602      var s = f[t] && "get" + f[t];
603      if (s && this[s]) {
604        return this[s]();
605      }
606      return null;
607    }.overloadGetter(),
608    clone: function () {
609      return new a(this.get("time"));
610    },
611    increment: function (s, u) {
612      s = s || "day";
613      u = u != null ? u : 1;
614      switch (s) {
615        case "year":
616          return this.increment("month", u * 12);
617        case "month":
618          var t = this.get("date");
619          this.set("date", 1).set("mo", this.get("mo") + u);
620          return this.set("date", t.min(this.get("lastdayofmonth")));
621        case "week":
622          return this.increment("day", u * 7);
623        case "day":
624          return this.set("date", this.get("date") + u);
625      }
626      if (!a.units[s]) {
627        throw new Error(s + " is not a supported interval");
628      }
629      return this.set("time", this.get("time") + u * a.units[s]());
630    },
631    decrement: function (s, t) {
632      return this.increment(s, -1 * (t != null ? t : 1));
633    },
634    isLeapYear: function () {
635      return a.isLeapYear(this.get("year"));
636    },
637    clearTime: function () {
638      return this.set({ hr: 0, min: 0, sec: 0, ms: 0 });
639    },
640    diff: function (t, s) {
641      if (typeOf(t) == "string") {
642        t = a.parse(t);
643      }
644      return ((t - this) / a.units[s || "day"](3, 3)).round();
645    },
646    getLastDayOfMonth: function () {
647      return a.daysInMonth(this.get("mo"), this.get("year"));
648    },
649    getDayOfYear: function () {
650      return (
651        (a.UTC(this.get("year"), this.get("mo"), this.get("date") + 1) -
652          a.UTC(this.get("year"), 0, 1)) /
653        a.units.day()
654      );
655    },
656    setDay: function (t, s) {
657      if (s == null) {
658        s = a.getMsg("firstDayOfWeek");
659        if (s === "") {
660          s = 1;
661        }
662      }
663      t = (7 + a.parseDay(t, true) - s) % 7;
664      var u = (7 + this.get("day") - s) % 7;
665      return this.increment("day", t - u);
666    },
667    getWeek: function (v) {
668      if (v == null) {
669        v = a.getMsg("firstDayOfWeek");
670        if (v === "") {
671          v = 1;
672        }
673      }
674      var x = this,
675        u = (7 + x.get("day") - v) % 7,
676        t = 0,
677        w;
678      if (v == 1) {
679        var y = x.get("month"),
680          s = x.get("date") - u;
681        if (y == 11 && s > 28) {
682          return 1;
683        }
684        if (y == 0 && s < -2) {
685          x = new a(x).decrement("day", u);
686          u = 0;
687        }
688        w = new a(x.get("year"), 0, 1).get("day") || 7;
689        if (w > 4) {
690          t = -7;
691        }
692      } else {
693        w = new a(x.get("year"), 0, 1).get("day");
694      }
695      t += x.get("dayofyear");
696      t += 6 - u;
697      t += (7 + w - v) % 7;
698      return t / 7;
699    },
700    getOrdinal: function (s) {
701      return a.getMsg("ordinal", s || this.get("date"));
702    },
703    getTimezone: function () {
704      return this.toString()
705        .replace(/^.*? ([A-Z]{3}).[0-9]{4}.*$/, "$1")
706        .replace(
707          /^.*?\(([A-Z])[a-z]+ ([A-Z])[a-z]+ ([A-Z])[a-z]+\)$/,
708          "$1$2$3"
709        );
710    },
711    getGMTOffset: function () {
712      var s = this.get("timezoneOffset");
713      return (s > 0 ? "-" : "+") + p((s.abs() / 60).floor(), 2) + p(s % 60, 2);
714    },
715    setAMPM: function (s) {
716      s = s.toUpperCase();
717      var t = this.get("hr");
718      if (t > 11 && s == "AM") {
719        return this.decrement("hour", 12);
720      } else {
721        if (t < 12 && s == "PM") {
722          return this.increment("hour", 12);
723        }
724      }
725      return this;
726    },
727    getAMPM: function () {
728      return this.get("hr") < 12 ? "AM" : "PM";
729    },
730    parse: function (s) {
731      this.set("time", a.parse(s));
732      return this;
733    },
734    isValid: function (s) {
735      if (!s) {
736        s = this;
737      }
738      return typeOf(s) == "date" && !isNaN(s.valueOf());
739    },
740    format: function (s) {
741      if (!this.isValid()) {
742        return "invalid date";
743      }
744      if (!s) {
745        s = "%x %X";
746      }
747      if (typeof s == "string") {
748        s = g[s.toLowerCase()] || s;
749      }
750      if (typeof s == "function") {
751        return s(this);
752      }
753      var t = this;
754      return s.replace(/%([a-z%])/gi, function (v, u) {
755        switch (u) {
756          case "a":
757            return a.getMsg("days_abbr")[t.get("day")];
758          case "A":
759            return a.getMsg("days")[t.get("day")];
760          case "b":
761            return a.getMsg("months_abbr")[t.get("month")];
762          case "B":
763            return a.getMsg("months")[t.get("month")];
764          case "c":
765            return t.format("%a %b %d %H:%M:%S %Y");
766          case "d":
767            return p(t.get("date"), 2);
768          case "e":
769            return p(t.get("date"), 2, " ");
770          case "H":
771            return p(t.get("hr"), 2);
772          case "I":
773            return p(t.get("hr") % 12 || 12, 2);
774          case "j":
775            return p(t.get("dayofyear"), 3);
776          case "k":
777            return p(t.get("hr"), 2, " ");
778          case "l":
779            return p(t.get("hr") % 12 || 12, 2, " ");
780          case "L":
781            return p(t.get("ms"), 3);
782          case "m":
783            return p(t.get("mo") + 1, 2);
784          case "M":
785            return p(t.get("min"), 2);
786          case "o":
787            return t.get("ordinal");
788          case "p":
789            return a.getMsg(t.get("ampm"));
790          case "s":
791            return Math.round(t / 1000);
792          case "S":
793            return p(t.get("seconds"), 2);
794          case "T":
795            return t.format("%H:%M:%S");
796          case "U":
797            return p(t.get("week"), 2);
798          case "w":
799            return t.get("day");
800          case "x":
801            return t.format(a.getMsg("shortDate"));
802          case "X":
803            return t.format(a.getMsg("shortTime"));
804          case "y":
805            return t.get("year").toString().substr(2);
806          case "Y":
807            return t.get("year");
808          case "z":
809            return t.get("GMTOffset");
810          case "Z":
811            return t.get("Timezone");
812        }
813        return u;
814      });
815    },
816    toISOString: function () {
817      return this.format("iso8601");
818    },
819  }).alias({ toJSON: "toISOString", compare: "diff", strftime: "format" });
820  var k = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
821    h = [
822      "Jan",
823      "Feb",
824      "Mar",
825      "Apr",
826      "May",
827      "Jun",
828      "Jul",
829      "Aug",
830      "Sep",
831      "Oct",
832      "Nov",
833      "Dec",
834    ];
835  var g = {
836    db: "%Y-%m-%d %H:%M:%S",
837    compact: "%Y%m%dT%H%M%S",
838    short: "%d %b %H:%M",
839    long: "%B %d, %Y %H:%M",
840    rfc822: function (s) {
841      return (
842        k[s.get("day")] +
843        s.format(", %d ") +
844        h[s.get("month")] +
845        s.format(" %Y %H:%M:%S %Z")
846      );
847    },
848    rfc2822: function (s) {
849      return (
850        k[s.get("day")] +
851        s.format(", %d ") +
852        h[s.get("month")] +
853        s.format(" %Y %H:%M:%S %z")
854      );
855    },
856    iso8601: function (s) {
857      return (
858        s.getUTCFullYear() +
859        "-" +
860        p(s.getUTCMonth() + 1, 2) +
861        "-" +
862        p(s.getUTCDate(), 2) +
863        "T" +
864        p(s.getUTCHours(), 2) +
865        ":" +
866        p(s.getUTCMinutes(), 2) +
867        ":" +
868        p(s.getUTCSeconds(), 2) +
869        "." +
870        p(s.getUTCMilliseconds(), 3) +
871        "Z"
872      );
873    },
874  };
875  var c = [],
876    n = a.parse;
877  var r = function (v, x, u) {
878    var t = -1,
879      w = a.getMsg(v + "s");
880    switch (typeOf(x)) {
881      case "object":
882        t = w[x.get(v)];
883        break;
884      case "number":
885        t = w[x];
886        if (!t) {
887          throw new Error("Invalid " + v + " index: " + x);
888        }
889        break;
890      case "string":
891        var s = w.filter(function (y) {
892          return this.test(y);
893        }, new RegExp("^" + x, "i"));
894        if (!s.length) {
895          throw new Error("Invalid " + v + " string");
896        }
897        if (s.length > 1) {
898          throw new Error("Ambiguous " + v);
899        }
900        t = s[0];
901    }
902    return u ? w.indexOf(t) : t;
903  };
904  var i = 1900,
905    o = 70;
906  a.extend({
907    getMsg: function (t, s) {
908      return Locale.get("Date." + t, s);
909    },
910    units: {
911      ms: Function.from(1),
912      second: Function.from(1000),
913      minute: Function.from(60000),
914      hour: Function.from(3600000),
915      day: Function.from(86400000),
916      week: Function.from(608400000),
917      month: function (t, s) {
918        var u = new a();
919        return (
920          a.daysInMonth(
921            t != null ? t : u.get("mo"),
922            s != null ? s : u.get("year")
923          ) * 86400000
924        );
925      },
926      year: function (s) {
927        s = s || new a().get("year");
928        return a.isLeapYear(s) ? 31622400000 : 31536000000;
929      },
930    },
931    daysInMonth: function (t, s) {
932      return [
933        31,
934        a.isLeapYear(s) ? 29 : 28,
935        31,
936        30,
937        31,
938        30,
939        31,
940        31,
941        30,
942        31,
943        30,
944        31,
945      ][t];
946    },
947    isLeapYear: function (s) {
948      return (s % 4 === 0 && s % 100 !== 0) || s % 400 === 0;
949    },
950    parse: function (v) {
951      var u = typeOf(v);
952      if (u == "number") {
953        return new a(v);
954      }
955      if (u != "string") {
956        return v;
957      }
958      v = v.clean();
959      if (!v.length) {
960        return null;
961      }
962      var s;
963      c.some(function (w) {
964        var t = w.re.exec(v);
965        return t ? (s = w.handler(t)) : false;
966      });
967      if (!(s && s.isValid())) {
968        s = new a(n(v));
969        if (!(s && s.isValid())) {
970          s = new a(v.toInt());
971        }
972      }
973      return s;
974    },
975    parseDay: function (s, t) {
976      return r("day", s, t);
977    },
978    parseMonth: function (t, s) {
979      return r("month", t, s);
980    },
981    parseUTC: function (t) {
982      var s = new a(t);
983      var u = a.UTC(
984        s.get("year"),
985        s.get("mo"),
986        s.get("date"),
987        s.get("hr"),
988        s.get("min"),
989        s.get("sec"),
990        s.get("ms")
991      );
992      return new a(u);
993    },
994    orderIndex: function (s) {
995      return a.getMsg("dateOrder").indexOf(s) + 1;
996    },
997    defineFormat: function (s, t) {
998      g[s] = t;
999      return this;
1000    },
1001    defineParser: function (s) {
1002      c.push(s.re && s.handler ? s : l(s));
1003      return this;
1004    },
1005    defineParsers: function () {
1006      Array.flatten(arguments).each(a.defineParser);
1007      return this;
1008    },
1009    define2DigitYearStart: function (s) {
1010      o = s % 100;
1011      i = s - o;
1012      return this;
1013    },
1014  }).extend({ defineFormats: a.defineFormat.overloadSetter() });
1015  var d = function (s) {
1016    return new RegExp(
1017      "(?:" +
1018        a
1019          .getMsg(s)
1020          .map(function (t) {
1021            return t.substr(0, 3);
1022          })
1023          .join("|") +
1024        ")[a-z]*"
1025    );
1026  };
1027  var m = function (s) {
1028    switch (s) {
1029      case "T":
1030        return "%H:%M:%S";
1031      case "x":
1032        return (
1033          (a.orderIndex("month") == 1 ? "%m[-./]%d" : "%d[-./]%m") +
1034          "([-./]%y)?"
1035        );
1036      case "X":
1037        return "%H([.:]%M)?([.:]%S([.:]%s)?)? ?%p? ?%z?";
1038    }
1039    return null;
1040  };
1041  var j = {
1042    d: /[0-2]?[0-9]|3[01]/,
1043    H: /[01]?[0-9]|2[0-3]/,
1044    I: /0?[1-9]|1[0-2]/,
1045    M: /[0-5]?\d/,
1046    s: /\d+/,
1047    o: /[a-z]*/,
1048    p: /[ap]\.?m\.?/,
1049    y: /\d{2}|\d{4}/,
1050    Y: /\d{4}/,
1051    z: /Z|[+-]\d{2}(?::?\d{2})?/,
1052  };
1053  j.m = j.I;
1054  j.S = j.M;
1055  var e;
1056  var b = function (s) {
1057    e = s;
1058    j.a = j.A = d("days");
1059    j.b = j.B = d("months");
1060    c.each(function (u, t) {
1061      if (u.format) {
1062        c[t] = l(u.format);
1063      }
1064    });
1065  };
1066  var l = function (u) {
1067    if (!e) {
1068      return { format: u };
1069    }
1070    var s = [];
1071    var t = (u.source || u)
1072      .replace(/%([a-z])/gi, function (w, v) {
1073        return m(v) || w;
1074      })
1075      .replace(/\((?!\?)/g, "(?:")
1076      .replace(/ (?!\?|\*)/g, ",? ")
1077      .replace(/%([a-z%])/gi, function (w, v) {
1078        var x = j[v];
1079        if (!x) {
1080          return v;
1081        }
1082        s.push(v);
1083        return "(" + x.source + ")";
1084      })
1085      .replace(/\[a-z\]/gi, "[a-z\\u00c0-\\uffff;&]");
1086    return {
1087      format: u,
1088      re: new RegExp("^" + t + "$", "i"),
1089      handler: function (y) {
1090        y = y.slice(1).associate(s);
1091        var v = new a().clearTime(),
1092          x = y.y || y.Y;
1093        if (x != null) {
1094          q.call(v, "y", x);
1095        }
1096        if ("d" in y) {
1097          q.call(v, "d", 1);
1098        }
1099        if ("m" in y || y.b || y.B) {
1100          q.call(v, "m", 1);
1101        }
1102        for (var w in y) {
1103          q.call(v, w, y[w]);
1104        }
1105        return v;
1106      },
1107    };
1108  };
1109  var q = function (s, t) {
1110    if (!t) {
1111      return this;
1112    }
1113    switch (s) {
1114      case "a":
1115      case "A":
1116        return this.set("day", a.parseDay(t, true));
1117      case "b":
1118      case "B":
1119        return this.set("mo", a.parseMonth(t, true));
1120      case "d":
1121        return this.set("date", t);
1122      case "H":
1123      case "I":
1124        return this.set("hr", t);
1125      case "m":
1126        return this.set("mo", t - 1);
1127      case "M":
1128        return this.set("min", t);
1129      case "p":
1130        return this.set("ampm", t.replace(/\./g, ""));
1131      case "S":
1132        return this.set("sec", t);
1133      case "s":
1134        return this.set("ms", ("0." + t) * 1000);
1135      case "w":
1136        return this.set("day", t);
1137      case "Y":
1138        return this.set("year", t);
1139      case "y":
1140        t = +t;
1141        if (t < 100) {
1142          t += i + (t < o ? 100 : 0);
1143        }
1144        return this.set("year", t);
1145      case "z":
1146        if (t == "Z") {
1147          t = "+00";
1148        }
1149        var u = t.match(/([+-])(\d{2}):?(\d{2})?/);
1150        u =
1151          (u[1] + "1") * (u[2] * 60 + (+u[3] || 0)) + this.getTimezoneOffset();
1152        return this.set("time", this - u * 60000);
1153    }
1154    return this;
1155  };
1156  a.defineParsers(
1157    "%Y([-./]%m([-./]%d((T| )%X)?)?)?",
1158    "%Y%m%d(T%H(%M%S?)?)?",
1159    "%x( %X)?",
1160    "%d%o( %b( %Y)?)?( %X)?",
1161    "%b( %d%o)?( %Y)?( %X)?",
1162    "%Y %b( %d%o( %X)?)?",
1163    "%o %b %d %X %z %Y",
1164    "%T",
1165    "%H:%M( ?%p)?"
1166  );
1167  Locale.addEvent("change", function (s) {
1168    if (Locale.get("Date")) {
1169      b(s);
1170    }
1171  }).fireEvent("change", Locale.getCurrent());
1172})();
1173Date.implement({
1174  timeDiffInWords: function (a) {
1175    return Date.distanceOfTimeInWords(this, a || new Date());
1176  },
1177  timeDiff: function (f, c) {
1178    if (f == null) {
1179      f = new Date();
1180    }
1181    var h = ((f - this) / 1000).floor().abs();
1182    var e = [],
1183      a = [60, 60, 24, 365, 0],
1184      d = ["s", "m", "h", "d", "y"],
1185      g,
1186      b;
1187    for (var i = 0; i < a.length; i++) {
1188      if (i && !h) {
1189        break;
1190      }
1191      g = h;
1192      if ((b = a[i])) {
1193        g = h % b;
1194        h = (h / b).floor();
1195      }
1196      e.unshift(g + (d[i] || ""));
1197    }
1198    return e.join(c || ":");
1199  },
1200})
1201  .extend({
1202    distanceOfTimeInWords: function (b, a) {
1203      return Date.getTimePhrase(((a - b) / 1000).toInt());
1204    },
1205    getTimePhrase: function (f) {
1206      var d = f < 0 ? "Until" : "Ago";
1207      if (f < 0) {
1208        f *= -1;
1209      }
1210      var b = {
1211        minute: 60,
1212        hour: 60,
1213        day: 24,
1214        week: 7,
1215        month: 52 / 12,
1216        year: 12,
1217        eon: Infinity,
1218      };
1219      var e = "lessThanMinute";
1220      for (var c in b) {
1221        var a = b[c];
1222        if (f < 1.5 * a) {
1223          if (f > 0.75 * a) {
1224            e = c;
1225          }
1226          break;
1227        }
1228        f /= a;
1229        e = c + "s";
1230      }
1231      f = f.round();
1232      return Date.getMsg(e + d, f).substitute({ delta: f });
1233    },
1234  })
1235  .defineParsers(
1236    {
1237      re: /^(?:tod|tom|yes)/i,
1238      handler: function (a) {
1239        var b = new Date().clearTime();
1240        switch (a[0]) {
1241          case "tom":
1242            return b.increment();
1243          case "yes":
1244            return b.decrement();
1245          default:
1246            return b;
1247        }
1248      },
1249    },
1250    {
1251      re: /^(next|last) ([a-z]+)$/i,
1252      handler: function (e) {
1253        var f = new Date().clearTime();
1254        var b = f.getDay();
1255        var c = Date.parseDay(e[2], true);
1256        var a = c - b;
1257        if (c <= b) {
1258          a += 7;
1259        }
1260        if (e[1] == "last") {
1261          a -= 7;
1262        }
1263        return f.set("date", f.getDate() + a);
1264      },
1265    }
1266  )
1267  .alias("timeAgoInWords", "timeDiffInWords");
1268Locale.define("en-US", "Number", {
1269  decimal: ".",
1270  group: ",",
1271  currency: { prefix: "$ " },
1272});
1273Number.implement({
1274  format: function (q) {
1275    var n = this;
1276    q = q ? Object.clone(q) : {};
1277    var a = function (i) {
1278      if (q[i] != null) {
1279        return q[i];
1280      }
1281      return Locale.get("Number." + i);
1282    };
1283    var f = n < 0,
1284      h = a("decimal"),
1285      k = a("precision"),
1286      o = a("group"),
1287      c = a("decimals");
1288    if (f) {
1289      var e = a("negative") || {};
1290      if (e.prefix == null && e.suffix == null) {
1291        e.prefix = "-";
1292      }
1293      ["prefix", "suffix"].each(function (i) {
1294        if (e[i]) {
1295          q[i] = a(i) + e[i];
1296        }
1297      });
1298      n = -n;
1299    }
1300    var l = a("prefix"),
1301      p = a("suffix");
1302    if (c !== "" && c >= 0 && c <= 20) {
1303      n = n.toFixed(c);
1304    }
1305    if (k >= 1 && k <= 21) {
1306      n = (+n).toPrecision(k);
1307    }
1308    n += "";
1309    var m;
1310    if (a("scientific") === false && n.indexOf("e") > -1) {
1311      var j = n.split("e"),
1312        b = +j[1];
1313      n = j[0].replace(".", "");
1314      if (b < 0) {
1315        b = -b - 1;
1316        m = j[0].indexOf(".");
1317        if (m > -1) {
1318          b -= m - 1;
1319        }
1320        while (b--) {
1321          n = "0" + n;
1322        }
1323        n = "0." + n;
1324      } else {
1325        m = j[0].lastIndexOf(".");
1326        if (m > -1) {
1327          b -= j[0].length - m - 1;
1328        }
1329        while (b--) {
1330          n += "0";
1331        }
1332      }
1333    }
1334    if (h != ".") {
1335      n = n.replace(".", h);
1336    }
1337    if (o) {
1338      m = n.lastIndexOf(h);
1339      m = m > -1 ? m : n.length;
1340      var d = n.substring(m),
1341        g = m;
1342      while (g--) {
1343        if ((m - g - 1) % 3 == 0 && g != m - 1) {
1344          d = o + d;
1345        }
1346        d = n.charAt(g) + d;
1347      }
1348      n = d;
1349    }
1350    if (l) {
1351      n = l + n;
1352    }
1353    if (p) {
1354      n += p;
1355    }
1356    return n;
1357  },
1358  formatCurrency: function (b) {
1359    var a = Locale.get("Number.currency") || {};
1360    if (a.scientific == null) {
1361      a.scientific = false;
1362    }
1363    a.decimals = b != null ? b : a.decimals == null ? 2 : a.decimals;
1364    return this.format(a);
1365  },
1366  formatPercentage: function (b) {
1367    var a = Locale.get("Number.percentage") || {};
1368    if (a.suffix == null) {
1369      a.suffix = "%";
1370    }
1371    a.decimals = b != null ? b : a.decimals == null ? 2 : a.decimals;
1372    return this.format(a);
1373  },
1374});
1375(function () {
1376  var c = {
1377      a: /[àáâãäåăą]/g,
1378      A: /[ÀÁÂÃÄÅĂĄ]/g,
1379      c: /[ćčç]/g,
1380      C: /[ĆČÇ]/g,
1381      d: /[ďđ]/g,
1382      D: /[ĎÐ]/g,
1383      e: /[èéêëěę]/g,
1384      E: /[ÈÉÊËĚĘ]/g,
1385      g: /[ğ]/g,
1386      G: /[Ğ]/g,
1387      i: /[ìíîï]/g,
1388      I: /[ÌÍÎÏ]/g,
1389      l: /[ĺľł]/g,
1390      L: /[ĹĽŁ]/g,
1391      n: /[ñňń]/g,
1392      N: /[ÑŇŃ]/g,
1393      o: /[òóôõöøő]/g,
1394      O: /[ÒÓÔÕÖØ]/g,
1395      r: /[řŕ]/g,
1396      R: /[ŘŔ]/g,
1397      s: /[ššş]/g,
1398      S: /[ŠŞŚ]/g,
1399      t: /[ťţ]/g,
1400      T: /[ŤŢ]/g,
1401      ue: /[ü]/g,
1402      UE: /[Ü]/g,
1403      u: /[ùúûůµ]/g,
1404      U: /[ÙÚÛŮ]/g,
1405      y: /[ÿý]/g,
1406      Y: /[ŸÝ]/g,
1407      z: /[žźż]/g,
1408      Z: /[ŽŹŻ]/g,
1409      th: /[þ]/g,
1410      TH: /[Þ]/g,
1411      dh: /[ð]/g,
1412      DH: /[Ð]/g,
1413      ss: /[ß]/g,
1414      oe: /[œ]/g,
1415      OE: /[Œ]/g,
1416      ae: /[æ]/g,
1417      AE: /[Æ]/g,
1418    },
1419    b = {
1420      " ": /[\xa0\u2002\u2003\u2009]/g,
1421      "*": /[\xb7]/g,
1422      "'": /[\u2018\u2019]/g,
1423      '"': /[\u201c\u201d]/g,
1424      "...": /[\u2026]/g,
1425      "-": /[\u2013]/g,
1426      "&raquo;": /[\uFFFD]/g,
1427    };
1428  var a = function (f, h) {
1429    var e = f,
1430      g;
1431    for (g in h) {
1432      e = e.replace(h[g], g);
1433    }
1434    return e;
1435  };
1436  var d = function (e, g) {
1437    e = e || "";
1438    var h = g
1439        ? "<" + e + "(?!\\w)[^>]*>([\\s\\S]*?)</" + e + "(?!\\w)>"
1440        : "</?" + e + "([^>]+)?>",
1441      f = new RegExp(h, "gi");
1442    return f;
1443  };
1444  String.implement({
1445    standardize: function () {
1446      return a(this, c);
1447    },
1448    repeat: function (e) {
1449      return new Array(e + 1).join(this);
1450    },
1451    pad: function (e, h, g) {
1452      if (this.length >= e) {
1453        return this;
1454      }
1455      var f = (h == null ? " " : "" + h)
1456        .repeat(e - this.length)
1457        .substr(0, e - this.length);
1458      if (!g || g == "right") {
1459        return this + f;
1460      }
1461      if (g == "left") {
1462        return f + this;
1463      }
1464      return (
1465        f.substr(0, (f.length / 2).floor()) +
1466        this +
1467        f.substr(0, (f.length / 2).ceil())
1468      );
1469    },
1470    getTags: function (e, f) {
1471      return this.match(d(e, f)) || [];
1472    },
1473    stripTags: function (e, f) {
1474      return this.replace(d(e, f), "");
1475    },
1476    tidy: function () {
1477      return a(this, b);
1478    },
1479    truncate: function (e, f, i) {
1480      var h = this;
1481      if (f == null && arguments.length == 1) {
1482        f = "…";
1483      }
1484      if (h.length > e) {
1485        h = h.substring(0, e);
1486        if (i) {
1487          var g = h.lastIndexOf(i);
1488          if (g != -1) {
1489            h = h.substr(0, g);
1490          }
1491        }
1492        if (f) {
1493          h += f;
1494        }
1495      }
1496      return h;
1497    },
1498  });
1499})();
1500String.implement({
1501  parseQueryString: function (d, a) {
1502    if (d == null) {
1503      d = true;
1504    }
1505    if (a == null) {
1506      a = true;
1507    }
1508    var c = this.split(/[&;]/),
1509      b = {};
1510    if (!c.length) {
1511      return b;
1512    }
1513    c.each(function (i) {
1514      var e = i.indexOf("=") + 1,
1515        g = e ? i.substr(e) : "",
1516        f = e ? i.substr(0, e - 1).match(/([^\]\[]+|(\B)(?=\]))/g) : [i],
1517        h = b;
1518      if (!f) {
1519        return;
1520      }
1521      if (a) {
1522        g = decodeURIComponent(g);
1523      }
1524      f.each(function (k, j) {
1525        if (d) {
1526          k = decodeURIComponent(k);
1527        }
1528        var l = h[k];
1529        if (j < f.length - 1) {
1530          h = h[k] = l || {};
1531        } else {
1532          if (typeOf(l) == "array") {
1533            l.push(g);
1534          } else {
1535            h[k] = l != null ? [l, g] : g;
1536          }
1537        }
1538      });
1539    });
1540    return b;
1541  },
1542  cleanQueryString: function (a) {
1543    return this.split("&")
1544      .filter(function (e) {
1545        var b = e.indexOf("="),
1546          c = b < 0 ? "" : e.substr(0, b),
1547          d = e.substr(b + 1);
1548        return a ? a.call(null, c, d) : d || d === 0;
1549      })
1550      .join("&");
1551  },
1552});
1553(function () {
1554  var b = function () {
1555    return this.get("value");
1556  };
1557  var a = (this.URI = new Class({
1558    Implements: Options,
1559    options: {},
1560    regex:
1561      /^(?:(\w+):)?(?:\/\/(?:(?:([^:@\/]*):?([^:@\/]*))?@)?([^:\/?#]*)(?::(\d*))?)?(\.\.?$|(?:[^?#\/]*\/)*)([^?#]*)(?:\?([^#]*))?(?:#(.*))?/,
1562    parts: [
1563      "scheme",
1564      "user",
1565      "password",
1566      "host",
1567      "port",
1568      "directory",
1569      "file",
1570      "query",
1571      "fragment",
1572    ],
1573    schemes: { http: 80, https: 443, ftp: 21, rtsp: 554, mms: 1755, file: 0 },
1574    initialize: function (d, c) {
1575      this.setOptions(c);
1576      var e = this.options.base || a.base;
1577      if (!d) {
1578        d = e;
1579      }
1580      if (d && d.parsed) {
1581        this.parsed = Object.clone(d.parsed);
1582      } else {
1583        this.set("value", d.href || d.toString(), e ? new a(e) : false);
1584      }
1585    },
1586    parse: function (e, d) {
1587      var c = e.match(this.regex);
1588      if (!c) {
1589        return false;
1590      }
1591      c.shift();
1592      return this.merge(c.associate(this.parts), d);
1593    },
1594    merge: function (d, c) {
1595      if ((!d || !d.scheme) && (!c || !c.scheme)) {
1596        return false;
1597      }
1598      if (c) {
1599        this.parts.every(function (e) {
1600          if (d[e]) {
1601            return false;
1602          }
1603          d[e] = c[e] || "";
1604          return true;
1605        });
1606      }
1607      d.port = d.port || this.schemes[d.scheme.toLowerCase()];
1608      d.directory = d.directory
1609        ? this.parseDirectory(d.directory, c ? c.directory : "")
1610        : "/";
1611      return d;
1612    },
1613    parseDirectory: function (d, e) {
1614      d = (d.substr(0, 1) == "/" ? "" : e || "/") + d;
1615      if (!d.test(a.regs.directoryDot)) {
1616        return d;
1617      }
1618      var c = [];
1619      d.replace(a.regs.endSlash, "")
1620        .split("/")
1621        .each(function (f) {
1622          if (f == ".." && c.length > 0) {
1623            c.pop();
1624          } else {
1625            if (f != ".") {
1626              c.push(f);
1627            }
1628          }
1629        });
1630      return c.join("/") + "/";
1631    },
1632    combine: function (c) {
1633      return (
1634        c.value ||
1635        c.scheme +
1636          "://" +
1637          (c.user ? c.user + (c.password ? ":" + c.password : "") + "@" : "") +
1638          (c.host || "") +
1639          (c.port && c.port != this.schemes[c.scheme] ? ":" + c.port : "") +
1640          (c.directory || "/") +
1641          (c.file || "") +
1642          (c.query ? "?" + c.query : "") +
1643          (c.fragment ? "#" + c.fragment : "")
1644      );
1645    },
1646    set: function (d, f, e) {
1647      if (d == "value") {
1648        var c = f.match(a.regs.scheme);
1649        if (c) {
1650          c = c[1];
1651        }
1652        if (c && this.schemes[c.toLowerCase()] == null) {
1653          this.parsed = { scheme: c, value: f };
1654        } else {
1655          this.parsed =
1656            this.parse(f, (e || this).parsed) ||
1657            (c ? { scheme: c, value: f } : { value: f });
1658        }
1659      } else {
1660        if (d == "data") {
1661          this.setData(f);
1662        } else {
1663          this.parsed[d] = f;
1664        }
1665      }
1666      return this;
1667    },
1668    get: function (c, d) {
1669      switch (c) {
1670        case "value":
1671          return this.combine(this.parsed, d ? d.parsed : false);
1672        case "data":
1673          return this.getData();
1674      }
1675      return this.parsed[c] || "";
1676    },
1677    go: function () {
1678      document.location.href = this.toString();
1679    },
1680    toURI: function () {
1681      return this;
1682    },
1683    getData: function (e, d) {
1684      var c = this.get(d || "query");
1685      if (!(c || c === 0)) {
1686        return e ? null : {};
1687      }
1688      var f = c.parseQueryString();
1689      return e ? f[e] : f;
1690    },
1691    setData: function (c, f, d) {
1692      if (typeof c == "string") {
1693        var e = this.getData();
1694        e[arguments[0]] = arguments[1];
1695        c = e;
1696      } else {
1697        if (f) {
1698          c = Object.merge(this.getData(), c);
1699        }
1700      }
1701      return this.set(d || "query", Object.toQueryString(c));
1702    },
1703    clearData: function (c) {
1704      return this.set(c || "query", "");
1705    },
1706    toString: b,
1707    valueOf: b,
1708  }));
1709  a.regs = { endSlash: /\/$/, scheme: /^(\w+):/, directoryDot: /\.\/|\.$/ };
1710  a.base = new a(
1711    Array.from(document.getElements("base[href]", true)).getLast(),
1712    { base: document.location }
1713  );
1714  String.implement({
1715    toURI: function (c) {
1716      return new a(this, c);
1717    },
1718  });
1719})();
1720URI = Class.refactor(URI, {
1721  combine: function (f, e) {
1722    if (!e || f.scheme != e.scheme || f.host != e.host || f.port != e.port) {
1723      return this.previous.apply(this, arguments);
1724    }
1725    var a =
1726      f.file +
1727      (f.query ? "?" + f.query : "") +
1728      (f.fragment ? "#" + f.fragment : "");
1729    if (!e.directory) {
1730      return (f.directory || (f.file ? "" : "./")) + a;
1731    }
1732    var d = e.directory.split("/"),
1733      c = f.directory.split("/"),
1734      g = "",
1735      h;
1736    var b = 0;
1737    for (h = 0; h < d.length && h < c.length && d[h] == c[h]; h++) {}
1738    for (b = 0; b < d.length - h - 1; b++) {
1739      g += "../";
1740    }
1741    for (b = h; b < c.length - 1; b++) {
1742      g += c[b] + "/";
1743    }
1744    return (g || (f.file ? "" : "./")) + a;
1745  },
1746  toAbsolute: function (a) {
1747    a = new URI(a);
1748    if (a) {
1749      a.set("directory", "").set("file", "");
1750    }
1751    return this.toRelative(a);
1752  },
1753  toRelative: function (a) {
1754    return this.get("value", new URI(a));
1755  },
1756});
1757(function () {
1758  if (this.Hash) {
1759    return;
1760  }
1761  var a = (this.Hash = new Type("Hash", function (b) {
1762    if (typeOf(b) == "hash") {
1763      b = Object.clone(b.getClean());
1764    }
1765    for (var c in b) {
1766      this[c] = b[c];
1767    }
1768    return this;
1769  }));
1770  this.$H = function (b) {
1771    return new a(b);
1772  };
1773  a.implement({
1774    forEach: function (b, c) {
1775      Object.forEach(this, b, c);
1776    },
1777    getClean: function () {
1778      var c = {};
1779      for (var b in this) {
1780        if (this.hasOwnProperty(b)) {
1781          c[b] = this[b];
1782        }
1783      }
1784      return c;
1785    },
1786    getLength: function () {
1787      var c = 0;
1788      for (var b in this) {
1789        if (this.hasOwnProperty(b)) {
1790          c++;
1791        }
1792      }
1793      return c;
1794    },
1795  });
1796  a.alias("each", "forEach");
1797  a.implement({
1798    has: Object.prototype.hasOwnProperty,
1799    keyOf: function (b) {
1800      return Object.keyOf(this, b);
1801    },
1802    hasValue: function (b) {
1803      return Object.contains(this, b);
1804    },
1805    extend: function (b) {
1806      a.each(
1807        b || {},
1808        function (d, c) {
1809          a.set(this, c, d);
1810        },
1811        this
1812      );
1813      return this;
1814    },
1815    combine: function (b) {
1816      a.each(
1817        b || {},
1818        function (d, c) {
1819          a.include(this, c, d);
1820        },
1821        this
1822      );
1823      return this;
1824    },
1825    erase: function (b) {
1826      if (this.hasOwnProperty(b)) {
1827        delete this[b];
1828      }
1829      return this;
1830    },
1831    get: function (b) {
1832      return this.hasOwnProperty(b) ? this[b] : null;
1833    },
1834    set: function (b, c) {
1835      if (!this[b] || this.hasOwnProperty(b)) {
1836        this[b] = c;
1837      }
1838      return this;
1839    },
1840    empty: function () {
1841      a.each(
1842        this,
1843        function (c, b) {
1844          delete this[b];
1845        },
1846        this
1847      );
1848      return this;
1849    },
1850    include: function (b, c) {
1851      if (this[b] == undefined) {
1852        this[b] = c;
1853      }
1854      return this;
1855    },
1856    map: function (b, c) {
1857      return new a(Object.map(this, b, c));
1858    },
1859    filter: function (b, c) {
1860      return new a(Object.filter(this, b, c));
1861    },
1862    every: function (b, c) {
1863      return Object.every(this, b, c);
1864    },
1865    some: function (b, c) {
1866      return Object.some(this, b, c);
1867    },
1868    getKeys: function () {
1869      return Object.keys(this);
1870    },
1871    getValues: function () {
1872      return Object.values(this);
1873    },
1874    toQueryString: function (b) {
1875      return Object.toQueryString(this, b);
1876    },
1877  });
1878  a.alias({ indexOf: "keyOf", contains: "hasValue" });
1879})();
1880Hash.implement({
1881  getFromPath: function (a) {
1882    return Object.getFromPath(this, a);
1883  },
1884  cleanValues: function (a) {
1885    return new Hash(Object.cleanValues(this, a));
1886  },
1887  run: function () {
1888    Object.run(arguments);
1889  },
1890});
1891ElementCust.implement({
1892  tidy: function () {
1893    this.set("value", this.get("value").tidy());
1894  },
1895  getTextInRange: function (b, a) {
1896    return this.get("value").substring(b, a);
1897  },
1898  getSelectedText: function () {
1899    if (this.setSelectionRange) {
1900      return this.getTextInRange(
1901        this.getSelectionStart(),
1902        this.getSelectionEnd()
1903      );
1904    }
1905    return document.selection.createRange().text;
1906  },
1907  getSelectedRange: function () {
1908    if (this.selectionStart != null) {
1909      return { start: this.selectionStart, end: this.selectionEnd };
1910    }
1911    var e = { start: 0, end: 0 };
1912    var a = this.getDocument().selection.createRange();
1913    if (!a || a.parentElement() != this) {
1914      return e;
1915    }
1916    var c = a.duplicate();
1917    if (this.type == "text") {
1918      e.start = 0 - c.moveStart("character", -100000);
1919      e.end = e.start + a.text.length;
1920    } else {
1921      var b = this.get("value");
1922      var d = b.length;
1923      c.moveToElementText(this);
1924      c.setEndPoint("StartToEnd", a);
1925      if (c.text.length) {
1926        d -= b.match(/[\n\r]*$/)[0].length;
1927      }
1928      e.end = d - c.text.length;
1929      c.setEndPoint("StartToStart", a);
1930      e.start = d - c.text.length;
1931    }
1932    return e;
1933  },
1934  getSelectionStart: function () {
1935    return this.getSelectedRange().start;
1936  },
1937  getSelectionEnd: function () {
1938    return this.getSelectedRange().end;
1939  },
1940  setCaretPosition: function (a) {
1941    if (a == "end") {
1942      a = this.get("value").length;
1943    }
1944    this.selectRange(a, a);
1945    return this;
1946  },
1947  getCaretPosition: function () {
1948    return this.getSelectedRange().start;
1949  },
1950  selectRange: function (e, a) {
1951    if (this.setSelectionRange) {
1952      this.focus();
1953      this.setSelectionRange(e, a);
1954    } else {
1955      var c = this.get("value");
1956      var d = c.substr(e, a - e).replace(/\r/g, "").length;
1957      e = c.substr(0, e).replace(/\r/g, "").length;
1958      var b = this.createTextRange();
1959      b.collapse(true);
1960      b.moveEnd("character", e + d);
1961      b.moveStart("character", e);
1962      b.select();
1963    }
1964    return this;
1965  },
1966  insertAtCursor: function (b, a) {
1967    var d = this.getSelectedRange();
1968    var c = this.get("value");
1969    this.set(
1970      "value",
1971      c.substring(0, d.start) + b + c.substring(d.end, c.length)
1972    );
1973    if (a !== false) {
1974      this.selectRange(d.start, d.start + b.length);
1975    } else {
1976      this.setCaretPosition(d.start + b.length);
1977    }
1978    return this;
1979  },
1980  insertAroundCursor: function (b, a) {
1981    b = Object.append({ before: "", defaultMiddle: "", after: "" }, b);
1982    var c = this.getSelectedText() || b.defaultMiddle;
1983    var g = this.getSelectedRange();
1984    var f = this.get("value");
1985    if (g.start == g.end) {
1986      this.set(
1987        "value",
1988        f.substring(0, g.start) +
1989          b.before +
1990          c +
1991          b.after +
1992          f.substring(g.end, f.length)
1993      );
1994      this.selectRange(
1995        g.start + b.before.length,
1996        g.end + b.before.length + c.length
1997      );
1998    } else {
1999      var d = f.substring(g.start, g.end);
2000      this.set(
2001        "value",
2002        f.substring(0, g.start) +
2003          b.before +
2004          d +
2005          b.after +
2006          f.substring(g.end, f.length)
2007      );
2008      var e = g.start + b.before.length;
2009      if (a !== false) {
2010        this.selectRange(e, e + d.length);
2011      } else {
2012        this.setCaretPosition(e + f.length);
2013      }
2014    }
2015    return this;
2016  },
2017});
2018Elements.from = function (e, d) {
2019  if (d || d == null) {
2020    e = e.stripScripts();
2021  }
2022  var b,
2023    c = e.match(/^\s*<(t[dhr]|tbody|tfoot|thead)/i);
2024  if (c) {
2025    b = new ElementCust("table");
2026    var a = c[1].toLowerCase();
2027    if (["td", "th", "tr"].contains(a)) {
2028      b = new ElementCust("tbody").inject(b);
2029      if (a != "tr") {
2030        b = new ElementCust("tr").inject(b);
2031      }
2032    }
2033  }
2034  return (b || new ElementCust("div")).set("html", e).getChildren();
2035};
2036// (function () {
2037//   var d = { relay: false },
2038//     c = ["once", "throttle", "pause"],
2039//     b = c.length;
2040//   while (b--) {
2041//     d[c[b]] = Events.lookupPseudo(c[b]);
2042//   }
2043//   DOMEvent.definePseudo = function (e, f) {
2044//     d[e] = f;
2045//     return this;
2046//   };
2047//   var a = ElementCust.prototype;
2048//   [ElementCust, Window, Document].invoke(
2049//     "implement",
2050//     Events.Pseudos(d, a.addEvent, a.removeEvent)
2051//   );
2052// })();
2053// (function () {
2054//   var a = "$moo:keys-pressed",
2055//     b = "$moo:keys-keyup";
2056//   DOMEvent.definePseudo("keys", function (d, e, c) {
2057//     var g = c[0],
2058//       f = [],
2059//       h = this.retrieve(a, []);
2060//     f.append(
2061//       d.value
2062//         .replace("++", function () {
2063//           f.push("+");
2064//           return "";
2065//         })
2066//         .split("+")
2067//     );
2068 //   h.include(g.key);
2069//     if (
2070//       f.every(function (j) {
2071//         return h.contains(j);
2072//       })
2073//     ) {
2074//       e.apply(this, c);
2075//     }
2076//     this.store(a, h);
2077//     if (!this.retrieve(b)) {
2078//       var i = function (j) {
2079//         (function () {
2080//           h = this.retrieve(a, []).erase(j.key);
2081//           this.store(a, h);
2082//         }).delay(0, this);
2083//       };
2084//       this.store(b, i).addEvent("keyup", i);
2085//     }
2086//   });
2087//   DOMEvent.defineKeys({
2088//     16: "shift",
2089//     17: "control",
2090//     18: "alt",
2091//     20: "capslock",
2092//     33: "pageup",
2093//     34: "pagedown",
2094//     35: "end",
2095//     36: "home",
2096//     144: "numlock",
2097//     145: "scrolllock",
2098//     186: ";",
2099//     187: "=",
2100//     188: ",",
2101//     190: ".",
2102//     191: "/",
2103//     192: "`",
2104//     219: "[",
2105//     220: "\\",
2106//     221: "]",
2107//     222: "'",
2108//     107: "+",
2109//   }).defineKey(Browser.firefox ? 109 : 189, "-");
2110// })();
2111(function () {
2112  var b = function (e, d) {
2113    var f = [];
2114    Object.each(d, function (g) {
2115      Object.each(g, function (h) {
2116        e.each(function (i) {
2117          f.push(i + "-" + h + (i == "border" ? "-width" : ""));
2118        });
2119      });
2120    });
2121    return f;
2122  };
2123  var c = function (f, e) {
2124    var d = 0;
2125    Object.each(e, function (h, g) {
2126      if (g.test(f)) {
2127        d = d + h.toInt();
2128      }
2129    });
2130    return d;
2131  };
2132  var a = function (d) {
2133    return !!(!d || d.offsetHeight || d.offsetWidth);
2134  };
2135  ElementCust.implement({
2136    measure: function (h) {
2137      if (a(this)) {
2138        return h.call(this);
2139      }
2140      var g = this.getParent(),
2141        e = [];
2142      while (!a(g) && g != document.body) {
2143        e.push(g.expose());
2144        g = g.getParent();
2145      }
2146      var f = this.expose(),
2147        d = h.call(this);
2148      f();
2149      e.each(function (i) {
2150        i();
2151      });
2152      return d;
2153    },
2154    expose: function () {
2155      if (this.getStyle("display") != "none") {
2156        return function () {};
2157      }
2158      var d = this.style.cssText;
2159      this.setStyles({
2160        display: "block",
2161        position: "absolute",
2162        visibility: "hidden",
2163      });
2164      return function () {
2165        this.style.cssText = d;
2166      }.bind(this);
2167    },
2168    getDimensions: function (d) {
2169      d = Object.merge({ computeSize: false }, d);
2170      var i = { x: 0, y: 0 };
2171      var h = function (j, e) {
2172        return e.computeSize ? j.getComputedSize(e) : j.getSize();
2173      };
2174      var f = this.getParent("body");
2175      if (f && this.getStyle("display") == "none") {
2176        i = this.measure(function () {
2177          return h(this, d);
2178        });
2179      } else {
2180        if (f) {
2181          try {
2182            i = h(this, d);
2183          } catch (g) {}
2184        }
2185      }
2186      return Object.append(
2187        i,
2188        i.x || i.x === 0
2189          ? { width: i.x, height: i.y }
2190          : { x: i.width, y: i.height }
2191      );
2192    },
2193    getComputedSize: function (d) {
2194      d = Object.merge(
2195        {
2196          styles: ["padding", "border"],
2197          planes: { height: ["top", "bottom"], width: ["left", "right"] },
2198          mode: "both",
2199        },
2200        d
2201      );
2202      var g = {},
2203        e = { width: 0, height: 0 },
2204        f;
2205      if (d.mode == "vertical") {
2206        delete e.width;
2207        delete d.planes.width;
2208      } else {
2209        if (d.mode == "horizontal") {
2210          delete e.height;
2211          delete d.planes.height;
2212        }
2213      }
2214      b(d.styles, d.planes).each(function (h) {
2215        g[h] = this.getStyle(h).toInt();
2216      }, this);
2217      Object.each(
2218        d.planes,
2219        function (i, h) {
2220          var k = h.capitalize(),
2221            j = this.getStyle(h);
2222          if (j == "auto" && !f) {
2223            f = this.getDimensions();
2224          }
2225          j = g[h] = j == "auto" ? f[h] : j.toInt();
2226          e["total" + k] = j;
2227          i.each(function (m) {
2228            var l = c(m, g);
2229            e["computed" + m.capitalize()] = l;
2230            e["total" + k] += l;
2231          });
2232        },
2233        this
2234      );
2235      return Object.append(e, g);
2236    },
2237  });
2238})();
2239(function () {
2240  var a = false,
2241    b = false;
2242  var c = function () {
2243    var d = new ElementCust("div")
2244      .setStyles({ position: "fixed", top: 0, right: 0 })
2245      .inject(document.body);
2246    a = d.offsetTop === 0;
2247    d.dispose();
2248    b = true;
2249  };
2250  ElementCust.implement({
2251    pin: function (h, f) {
2252      if (!b) {
2253        c();
2254      }
2255      if (this.getStyle("display") == "none") {
2256        return this;
2257      }
2258      var j,
2259        k = window.getScroll(),
2260        l,
2261        e;
2262      if (h !== false) {
2263        j = this.getPosition(a ? document.body : this.getOffsetParent());
2264        if (!this.retrieve("pin:_pinned")) {
2265          var g = { top: j.y - k.y, left: j.x - k.x };
2266          if (a && !f) {
2267            this.setStyle("position", "fixed").setStyles(g);
2268          } else {
2269            l = this.getOffsetParent();
2270            var i = this.getPosition(l),
2271              m = this.getStyles("left", "top");
2272            if ((l && m.left == "auto") || m.top == "auto") {
2273              this.setPosition(i);
2274            }
2275            if (this.getStyle("position") == "static") {
2276              this.setStyle("position", "absolute");
2277            }
2278            i = { x: m.left.toInt() - k.x, y: m.top.toInt() - k.y };
2279            e = function () {
2280              if (!this.retrieve("pin:_pinned")) {
2281                return;
2282              }
2283              var n = window.getScroll();
2284              this.setStyles({ left: i.x + n.x, top: i.y + n.y });
2285            }.bind(this);
2286            this.store("pin:_scrollFixer", e);
2287            window.addEvent("scroll", e);
2288          }
2289          this.store("pin:_pinned", true);
2290        }
2291      } else {
2292        if (!this.retrieve("pin:_pinned")) {
2293          return this;
2294        }
2295        l = this.getParent();
2296        var d =
2297          l.getComputedStyle("position") != "static" ? l : l.getOffsetParent();
2298        j = this.getPosition(d);
2299        this.store("pin:_pinned", false);
2300        e = this.retrieve("pin:_scrollFixer");
2301        if (!e) {
2302          this.setStyles({
2303            position: "absolute",
2304            top: j.y + k.y,
2305            left: j.x + k.x,
2306          });
2307        } else {
2308          this.store("pin:_scrollFixer", null);
2309          window.removeEvent("scroll", e);
2310        }
2311        this.removeClass("isPinned");
2312      }
2313      return this;
2314    },
2315    unpin: function () {
2316      return this.pin(false);
2317    },
2318    togglePin: function () {
2319      return this.pin(!this.retrieve("pin:_pinned"));
2320    },
2321  });
2322})();
2323(function (b) {
2324  var a = (ElementCust.Position = {
2325    options: {
2326      relativeTo: document.body,
2327      position: { x: "center", y: "center" },
2328      offset: { x: 0, y: 0 },
2329    },
2330    getOptions: function (d, c) {
2331      c = Object.merge({}, a.options, c);
2332      a.setPositionOption(c);
2333      a.setEdgeOption(c);
2334      a.setOffsetOption(d, c);
2335      a.setDimensionsOption(d, c);
2336      return c;
2337    },
2338    setPositionOption: function (c) {
2339      c.position = a.getCoordinateFromValue(c.position);
2340    },
2341    setEdgeOption: function (d) {
2342      var c = a.getCoordinateFromValue(d.edge);
2343      d.edge = c
2344        ? c
2345        : d.position.x == "center" && d.position.y == "center"
2346        ? { x: "center", y: "center" }
2347        : { x: "left", y: "top" };
2348    },
2349    setOffsetOption: function (f, d) {
2350      var c = { x: 0, y: 0 },
2351        g = f.measure(function () {
2352          return document.id(this.getOffsetParent());
2353        }),
2354        e = g.getScroll();
2355      if (!g || g == f.getDocument().body) {
2356        return;
2357      }
2358      c = g.measure(function () {
2359        var i = this.getPosition();
2360        if (this.getStyle("position") == "fixed") {
2361          var h = window.getScroll();
2362          i.x += h.x;
2363          i.y += h.y;
2364        }
2365        return i;
2366      });
2367      d.offset = {
2368        parentPositioned: g != document.id(d.relativeTo),
2369        x: d.offset.x - c.x + e.x,
2370        y: d.offset.y - c.y + e.y,
2371      };
2372    },
2373    setDimensionsOption: function (d, c) {
2374      c.dimensions = d.getDimensions({
2375        computeSize: true,
2376        styles: ["padding", "border", "margin"],
2377      });
2378    },
2379    getPosition: function (e, d) {
2380      var c = {};
2381      d = a.getOptions(e, d);
2382      var f = document.id(d.relativeTo) || document.body;
2383      a.setPositionCoordinates(d, c, f);
2384      if (d.edge) {
2385        a.toEdge(c, d);
2386      }
2387      var g = d.offset;
2388      c.left = (
2389        c.x >= 0 || g.parentPositioned || d.allowNegative ? c.x : 0
2390      ).toInt();
2391      c.top = (
2392        c.y >= 0 || g.parentPositioned || d.allowNegative ? c.y : 0
2393      ).toInt();
2394      a.toMinMax(c, d);
2395      if (d.relFixedPosition || f.getStyle("position") == "fixed") {
2396        a.toRelFixedPosition(f, c);
2397      }
2398      if (d.ignoreScroll) {
2399        a.toIgnoreScroll(f, c);
2400      }
2401      if (d.ignoreMargins) {
2402        a.toIgnoreMargins(c, d);
2403      }
2404      c.left = Math.ceil(c.left);
2405      c.top = Math.ceil(c.top);
2406      delete c.x;
2407      delete c.y;
2408      return c;
2409    },
2410    setPositionCoordinates: function (k, g, d) {
2411      var f = k.offset.y,
2412        h = k.offset.x,
2413        e = d == document.body ? window.getScroll() : d.getPosition(),
2414        j = e.y,
2415        c = e.x,
2416        i = window.getSize();
2417      switch (k.position.x) {
2418        case "left":
2419          g.x = c + h;
2420          break;
2421        case "right":
2422          g.x = c + h + d.offsetWidth;
2423          break;
2424        default:
2425          g.x = c + (d == document.body ? i.x : d.offsetWidth) / 2 + h;
2426          break;
2427      }
2428      switch (k.position.y) {
2429        case "top":
2430          g.y = j + f;
2431          break;
2432        case "bottom":
2433          g.y = j + f + d.offsetHeight;
2434          break;
2435        default:
2436          g.y = j + (d == document.body ? i.y : d.offsetHeight) / 2 + f;
2437          break;
2438      }
2439    },
2440    toMinMax: function (c, d) {
2441      var f = { left: "x", top: "y" },
2442        e;
2443      ["minimum", "maximum"].each(function (g) {
2444        ["left", "top"].each(function (h) {
2445          e = d[g] ? d[g][f[h]] : null;
2446          if (e != null && (g == "minimum" ? c[h] < e : c[h] > e)) {
2447            c[h] = e;
2448          }
2449        });
2450      });
2451    },
2452    toRelFixedPosition: function (e, c) {
2453      var d = window.getScroll();
2454      c.top += d.y;
2455      c.left += d.x;
2456    },
2457    toIgnoreScroll: function (e, d) {
2458      var c = e.getScroll();
2459      d.top -= c.y;
2460      d.left -= c.x;
2461    },
2462    toIgnoreMargins: function (c, d) {
2463      c.left +=
2464        d.edge.x == "right"
2465          ? d.dimensions["margin-right"]
2466          : d.edge.x != "center"
2467          ? -d.dimensions["margin-left"]
2468          : -d.dimensions["margin-left"] +
2469            (d.dimensions["margin-right"] + d.dimensions["margin-left"]) / 2;
2470      c.top +=
2471        d.edge.y == "bottom"
2472          ? d.dimensions["margin-bottom"]
2473          : d.edge.y != "center"
2474          ? -d.dimensions["margin-top"]
2475          : -d.dimensions["margin-top"] +
2476            (d.dimensions["margin-bottom"] + d.dimensions["margin-top"]) / 2;
2477    },
2478    toEdge: function (c, d) {
2479      var e = {},
2480        g = d.dimensions,
2481        f = d.edge;
2482      switch (f.x) {
2483        case "left":
2484          e.x = 0;
2485          break;
2486        case "right":
2487          e.x = -g.x - g.computedRight - g.computedLeft;
2488          break;
2489        default:
2490          e.x = -Math.round(g.totalWidth / 2);
2491          break;
2492      }
2493      switch (f.y) {
2494        case "top":
2495          e.y = 0;
2496          break;
2497        case "bottom":
2498          e.y = -g.y - g.computedTop - g.computedBottom;
2499          break;
2500        default:
2501          e.y = -Math.round(g.totalHeight / 2);
2502          break;
2503      }
2504      c.x += e.x;
2505      c.y += e.y;
2506    },
2507    getCoordinateFromValue: function (c) {
2508      if (typeOf(c) != "string") {
2509        return c;
2510      }
2511      c = c.toLowerCase();
2512      return {
2513        x: c.test("left") ? "left" : c.test("right") ? "right" : "center",
2514        y: c.test(/upper|top/) ? "top" : c.test("bottom") ? "bottom" : "center",
2515      };
2516    },
2517  });
2518  ElementCust.implement({
2519    position: function (d) {
2520      if (d && (d.x != null || d.y != null)) {
2521        return b ? b.apply(this, arguments) : this;
2522      }
2523      var c = this.setStyle("position", "absolute").calculatePosition(d);
2524      return d && d.returnPos ? c : this.setStyles(c);
2525    },
2526    calculatePosition: function (c) {
2527      return a.getPosition(this, c);
2528    },
2529  });
2530})(ElementCust.prototype.position);
2531ElementCust.implement({
2532  isDisplayed: function () {
2533    return this.getStyle("display") != "none";
2534  },
2535  isVisible: function () {
2536    var a = this.offsetWidth,
2537      b = this.offsetHeight;
2538    return a == 0 && b == 0
2539      ? false
2540      : a > 0 && b > 0
2541      ? true
2542      : this.style.display != "none";
2543  },
2544  toggle: function () {
2545    return this[this.isDisplayed() ? "hide" : "show"]();
2546  },
2547  hide: function () {
2548    var b;
2549    try {
2550      b = this.getStyle("display");
2551    } catch (a) {}
2552    if (b == "none") {
2553      return this;
2554    }
2555    return this.store("ElementCust:_originalDisplay", b || "").setStyle(
2556      "display",
2557      "none"
2558    );
2559  },
2560  show: function (a) {
2561    if (!a && this.isDisplayed()) {
2562      return this;
2563    }
2564    a = a || this.retrieve("ElementCust:_originalDisplay") || "block";
2565    return this.setStyle("display", a == "none" ? "block" : a);
2566  },
2567  swapClass: function (a, b) {
2568    return this.removeClass(a).addClass(b);
2569  },
2570});
2571Document.implement({
2572  clearSelection: function () {
2573    if (window.getSelection) {
2574      var a = window.getSelection();
2575      if (a && a.removeAllRanges) {
2576        a.removeAllRanges();
2577      }
2578    } else {
2579      if (document.selection && document.selection.empty) {
2580        try {
2581          document.selection.empty();
2582        } catch (b) {}
2583      }
2584    }
2585  },
2586});
2587var IframeShim = new Class({
2588  Implements: [Options, Events, Class.Occlude],
2589  options: {
2590    className: "iframeShim",
2591    src: 'javascript:false;document.write("");',
2592    display: false,
2593    zIndex: null,
2594    margin: 0,
2595    offset: { x: 0, y: 0 },
2596    browsers:
2597      Browser.ie6 ||
2598      (Browser.firefox && Browser.version < 3 && Browser.Platform.mac),
2599  },
2600  property: "IframeShim",
2601  initialize: function (b, a) {
2602    this.ElementCust = document.id(b);
2603    if (this.occlude()) {
2604      return this.occluded;
2605    }
2606    this.setOptions(a);
2607    this.makeShim();
2608    return this;
2609  },
2610  makeShim: function () {
2611    if (this.options.browsers) {
2612      var c = this.ElementCust.getStyle("zIndex").toInt();
2613      if (!c) {
2614        c = 1;
2615        var b = this.ElementCust.getStyle("position");
2616        if (b == "static" || !b) {
2617          this.ElementCust.setStyle("position", "relative");
2618        }
2619        this.ElementCust.setStyle("zIndex", c);
2620      }
2621      c =
2622        (this.options.zIndex != null || this.options.zIndex === 0) &&
2623        c > this.options.zIndex
2624          ? this.options.zIndex
2625          : c - 1;
2626      if (c < 0) {
2627        c = 1;
2628      }
2629      this.shim = new ElementCust("iframe", {
2630        src: this.options.src,
2631        scrolling: "no",
2632        frameborder: 0,
2633        styles: {
2634          zIndex: c,
2635          position: "absolute",
2636          border: "none",
2637          filter: "progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0)",
2638        },
2639        class: this.options.className,
2640      }).store("IframeShim", this);
2641      var a = function () {
2642        this.shim.inject(this.ElementCust, "after");
2643        this[this.options.display ? "show" : "hide"]();
2644        this.fireEvent("inject");
2645      }.bind(this);
2646      if (!IframeShim.ready) {
2647        window.addEvent("load", a);
2648      } else {
2649        a();
2650      }
2651    } else {
2652      this.position =
2653        this.hide =
2654        this.show =
2655        this.dispose =
2656          Function.from(this);
2657    }
2658  },
2659  position: function () {
2660    if (!IframeShim.ready || !this.shim) {
2661      return this;
2662    }
2663    var a = this.ElementCust.measure(function () {
2664      return this.getSize();
2665    });
2666    if (this.options.margin != undefined) {
2667      a.x = a.x - this.options.margin * 2;
2668      a.y = a.y - this.options.margin * 2;
2669      this.options.offset.x += this.options.margin;
2670      this.options.offset.y += this.options.margin;
2671    }
2672    this.shim
2673      .set({ width: a.x, height: a.y })
2674      .position({ relativeTo: this.ElementCust, offset: this.options.offset });
2675    return this;
2676  },
2677  hide: function () {
2678    if (this.shim) {
2679      this.shim.setStyle("display", "none");
2680    }
2681    return this;
2682  },
2683  show: function () {
2684    if (this.shim) {
2685      this.shim.setStyle("display", "block");
2686    }
2687    return this.position();
2688  },
2689  dispose: function () {
2690    if (this.shim) {
2691      this.shim.dispose();
2692    }
2693    return this;
2694  },
2695  destroy: function () {
2696    if (this.shim) {
2697      this.shim.destroy();
2698    }
2699    return this;
2700  },
2701});
2702window.addEvent("load", function () {
2703  IframeShim.ready = true;
2704});
2705var Mask = new Class({
2706  Implements: [Options, Events],
2707  Binds: ["position"],
2708  options: {
2709    style: {},
2710    class: "mask",
2711    maskMargins: false,
2712    useIframeShim: true,
2713    iframeShimOptions: {},
2714  },
2715  initialize: function (b, a) {
2716    this.target = document.id(b) || document.id(document.body);
2717    this.target.store("mask", this);
2718    this.setOptions(a);
2719    this.render();
2720    this.inject();
2721  },
2722  render: function () {
2723    this.ElementCust = new ElementCust("div", {
2724      class: this.options["class"],
2725      id: this.options.id || "mask-" + String.uniqueID(),
2726      styles: Object.merge({}, this.options.style, { display: "none" }),
2727      events: {
2728        click: function (a) {
2729          this.fireEvent("click", a);
2730          if (this.options.hideOnClick) {
2731            this.hide();
2732          }
2733        }.bind(this),
2734      },
2735    });
2736    this.hidden = true;
2737  },
2738  toElement: function () {
2739    return this.ElementCust;
2740  },
2741  inject: function (b, a) {
2742    a =
2743      a ||
2744      (this.options.inject ? this.options.inject.where : "") ||
2745      this.target == document.body
2746        ? "inside"
2747        : "after";
2748    b = b || (this.options.inject && this.options.inject.target) || this.target;
2749    this.ElementCust.inject(b, a);
2750    if (this.options.useIframeShim) {
2751      this.shim = new IframeShim(this.ElementCust, this.options.iframeShimOptions);
2752      this.addEvents({
2753        show: this.shim.show.bind(this.shim),
2754        hide: this.shim.hide.bind(this.shim),
2755        destroy: this.shim.destroy.bind(this.shim),
2756      });
2757    }
2758  },
2759  position: function () {
2760    this.resize(this.options.width, this.options.height);
2761    this.ElementCust.position({
2762      relativeTo: this.target,
2763      position: "topLeft",
2764      ignoreMargins: !this.options.maskMargins,
2765      ignoreScroll: this.target == document.body,
2766    });
2767    return this;
2768  },
2769  resize: function (a, e) {
2770    var b = { styles: ["padding", "border"] };
2771    if (this.options.maskMargins) {
2772      b.styles.push("margin");
2773    }
2774    var d = this.target.getComputedSize(b);
2775    if (this.target == document.body) {
2776      this.ElementCust.setStyles({ width: 0, height: 0 });
2777      var c = window.getScrollSize();
2778      if (d.totalHeight < c.y) {
2779        d.totalHeight = c.y;
2780      }
2781      if (d.totalWidth < c.x) {
2782        d.totalWidth = c.x;
2783      }
2784    }
2785    this.ElementCust.setStyles({
2786      width: Array.pick([a, d.totalWidth, d.x]),
2787      height: Array.pick([e, d.totalHeight, d.y]),
2788    });
2789    return this;
2790  },
2791  show: function () {
2792    if (!this.hidden) {
2793      return this;
2794    }
2795    window.addEvent("resize", this.position);
2796    this.position();
2797    this.showMask.apply(this, arguments);
2798    return this;
2799  },
2800  showMask: function () {
2801    this.ElementCust.setStyle("display", "block");
2802    this.hidden = false;
2803    this.fireEvent("show");
2804  },
2805  hide: function () {
2806    if (this.hidden) {
2807      return this;
2808    }
2809    window.removeEvent("resize", this.position);
2810    this.hideMask.apply(this, arguments);
2811    if (this.options.destroyOnHide) {
2812      return this.destroy();
2813    }
2814    return this;
2815  },
2816  hideMask: function () {
2817    this.ElementCust.setStyle("display", "none");
2818    this.hidden = true;
2819    this.fireEvent("hide");
2820  },
2821  toggle: function () {
2822    this[this.hidden ? "show" : "hide"]();
2823  },
2824  destroy: function () {
2825    this.hide();
2826    this.ElementCust.destroy();
2827    this.fireEvent("destroy");
2828    this.target.eliminate("mask");
2829  },
2830});
2831ElementCust.Properties.mask = {
2832  set: function (b) {
2833    var a = this.retrieve("mask");
2834    if (a) {
2835      a.destroy();
2836    }
2837    return this.eliminate("mask").store("mask:options", b);
2838  },
2839  get: function () {
2840    var a = this.retrieve("mask");
2841    if (!a) {
2842      a = new Mask(this, this.retrieve("mask:options"));
2843      this.store("mask", a);
2844    }
2845    return a;
2846  },
2847};
2848ElementCust.implement({
2849  mask: function (a) {
2850    if (a) {
2851      this.set("mask", a);
2852    }
2853    this.get("mask").show();
2854    return this;
2855  },
2856  unmask: function () {
2857    this.get("mask").hide();
2858    return this;
2859  },
2860});
2861var Spinner = new Class({
2862  Extends: Mask,
2863  Implements: Chain,
2864  options: {
2865    class: "spinner",
2866    containerPosition: {},
2867    content: { class: "spinner-content" },
2868    messageContainer: { class: "spinner-msg" },
2869    img: { class: "spinner-img" },
2870    fxOptions: { link: "chain" },
2871  },
2872  initialize: function (c, a) {
2873    this.target = document.id(c) || document.id(document.body);
2874    this.target.store("spinner", this);
2875    this.setOptions(a);
2876    this.render();
2877    this.inject();
2878    var b = function () {
2879      this.active = false;
2880    }.bind(this);
2881    this.addEvents({ hide: b, show: b });
2882  },
2883  render: function () {
2884    this.parent();
2885    this.ElementCust.set("id", this.options.id || "spinner-" + String.uniqueID());
2886    this.content =
2887      document.id(this.options.content) ||
2888      new ElementCust("div", this.options.content);
2889    this.content.inject(this.ElementCust);
2890    if (this.options.message) {
2891      this.msg =
2892        document.id(this.options.message) ||
2893        new ElementCust("p", this.options.messageContainer).appendText(
2894          this.options.message
2895        );
2896      this.msg.inject(this.content);
2897    }
2898    if (this.options.img) {
2899      this.img =
2900        document.id(this.options.img) || new ElementCust("div", this.options.img);
2901      this.img.inject(this.content);
2902    }
2903    this.ElementCust.set("tween", this.options.fxOptions);
2904  },
2905  show: function (a) {
2906    if (this.active) {
2907      return this.chain(this.show.bind(this));
2908    }
2909    if (!this.hidden) {
2910      this.callChain.delay(20, this);
2911      return this;
2912    }
2913    this.active = true;
2914    return this.parent(a);
2915  },
2916  showMask: function (a) {
2917    var b = function () {
2918      this.content.position(
2919        Object.merge(
2920          { relativeTo: this.ElementCust },
2921          this.options.containerPosition
2922        )
2923      );
2924    }.bind(this);
2925    if (a) {
2926      this.parent();
2927      b();
2928    } else {
2929      if (!this.options.style.opacity) {
2930        this.options.style.opacity = this.ElementCust.getStyle("opacity").toFloat();
2931      }
2932      this.ElementCust
2933        .setStyles({ display: "block", opacity: 0 })
2934        .tween("opacity", this.options.style.opacity);
2935      b();
2936      this.hidden = false;
2937      this.fireEvent("show");
2938      this.callChain();
2939    }
2940  },
2941  hide: function (a) {
2942    if (this.active) {
2943      return this.chain(this.hide.bind(this));
2944    }
2945    if (this.hidden) {
2946      this.callChain.delay(20, this);
2947      return this;
2948    }
2949    this.active = true;
2950    return this.parent(a);
2951  },
2952  hideMask: function (a) {
2953    if (a) {
2954      return this.parent();
2955    }
2956    this.ElementCust
2957      .tween("opacity", 0)
2958      .get("tween")
2959      .chain(
2960        function () {
2961          this.ElementCust.setStyle("display", "none");
2962          this.hidden = true;
2963          this.fireEvent("hide");
2964          this.callChain();
2965        }.bind(this)
2966      );
2967  },
2968  destroy: function () {
2969    this.content.destroy();
2970    this.parent();
2971    this.target.eliminate("spinner");
2972  },
2973});
2974Request = Class.refactor(Request, {
2975  options: { useSpinner: false, spinnerOptions: {}, spinnerTarget: false },
2976  initialize: function (a) {
2977    this._send = this.send;
2978    this.send = function (b) {
2979      var c = this.getSpinner();
2980      if (c) {
2981        c.chain(this._send.pass(b, this)).show();
2982      } else {
2983        this._send(b);
2984      }
2985      return this;
2986    };
2987    this.previous(a);
2988  },
2989  getSpinner: function () {
2990    if (!this.spinner) {
2991      var b =
2992        document.id(this.options.spinnerTarget) ||
2993        document.id(this.options.update);
2994      if (this.options.useSpinner && b) {
2995        b.set("spinner", this.options.spinnerOptions);
2996        var a = (this.spinner = b.get("spinner"));
2997        ["complete", "exception", "cancel"].each(function (c) {
2998          this.addEvent(c, a.hide.bind(a));
2999        }, this);
3000      }
3001    }
3002    return this.spinner;
3003  },
3004});
3005ElementCust.Properties.spinner = {
3006  set: function (a) {
3007    var b = this.retrieve("spinner");
3008    if (b) {
3009      b.destroy();
3010    }
3011    return this.eliminate("spinner").store("spinner:options", a);
3012  },
3013  get: function () {
3014    var a = this.retrieve("spinner");
3015    if (!a) {
3016      a = new Spinner(this, this.retrieve("spinner:options"));
3017      this.store("spinner", a);
3018    }
3019    return a;
3020  },
3021};
3022ElementCust.implement({
3023  spin: function (a) {
3024    if (a) {
3025      this.set("spinner", a);
3026    }
3027    this.get("spinner").show();
3028    return this;
3029  },
3030  unspin: function () {
3031    this.get("spinner").hide();
3032    return this;
3033  },
3034});
3035if (!window.Form) {
3036  window.Form = {};
3037}
3038(function () {
3039  Form.Request = new Class({
3040    Binds: ["onSubmit", "onFormValidate"],
3041    Implements: [Options, Events, Class.Occlude],
3042    options: {
3043      requestOptions: {
3044        evalScripts: true,
3045        useSpinner: true,
3046        emulation: false,
3047        link: "ignore",
3048      },
3049      sendButtonClicked: true,
3050      extraData: {},
3051      resetForm: true,
3052    },
3053    property: "form.request",
3054    initialize: function (b, c, a) {
3055      this.ElementCust = document.id(b);
3056      if (this.occlude()) {
3057        return this.occluded;
3058      }
3059      this.setOptions(a).setTarget(c).attach();
3060    },
3061    setTarget: function (a) {
3062      this.target = document.id(a);
3063      if (!this.request) {
3064        this.makeRequest();
3065      } else {
3066        this.request.setOptions({ update: this.target });
3067      }
3068      return this;
3069    },
3070    toElement: function () {
3071      return this.ElementCust;
3072    },
3073    makeRequest: function () {
3074      var a = this;
3075      this.request = new Request.HTML(
3076        Object.merge(
3077          {
3078            update: this.target,
3079            emulation: false,
3080            spinnerTarget: this.ElementCust,
3081            method: this.ElementCust.get("method") || "post",
3082          },
3083          this.options.requestOptions
3084        )
3085      ).addEvents({
3086        success: function (c, e, d, b) {
3087          ["complete", "success"].each(function (f) {
3088            a.fireEvent(f, [a.target, c, e, d, b]);
3089          });
3090        },
3091        failure: function () {
3092          a.fireEvent("complete", arguments).fireEvent("failure", arguments);
3093        },
3094        exception: function () {
3095          a.fireEvent("failure", arguments);
3096        },
3097      });
3098      return this.attachReset();
3099    },
3100    attachReset: function () {
3101      if (!this.options.resetForm) {
3102        return this;
3103      }
3104      this.request.addEvent(
3105        "success",
3106        function () {
3107          Function.attempt(
3108            function () {
3109              this.ElementCust.reset();
3110            }.bind(this)
3111          );
3112          if (window.OverText) {
3113            OverText.update();
3114          }
3115        }.bind(this)
3116      );
3117      return this;
3118    },
3119    attach: function (a) {
3120      var c = a != false ? "addEvent" : "removeEvent";
3121      this.ElementCust[c](
3122        "click:relay(button, input[type=submit])",
3123        this.saveClickedButton.bind(this)
3124      );
3125      var b = this.ElementCust.retrieve("validator");
3126      if (b) {
3127        b[c]("onFormValidate", this.onFormValidate);
3128      } else {
3129        this.ElementCust[c]("submit", this.onSubmit);
3130      }
3131      return this;
3132    },
3133    detach: function () {
3134      return this.attach(false);
3135    },
3136    enable: function () {
3137      return this.attach();
3138    },
3139    disable: function () {
3140      return this.detach();
3141    },
3142    onFormValidate: function (c, b, a) {
3143      if (!a) {
3144        return;
3145      }
3146      var d = this.ElementCust.retrieve("validator");
3147      if (c || (d && !d.options.stopOnFailure)) {
3148        a.stop();
3149        this.send();
3150      }
3151    },
3152    onSubmit: function (a) {
3153      var b = this.ElementCust.retrieve("validator");
3154      if (b) {
3155        this.ElementCust.removeEvent("submit", this.onSubmit);
3156        b.addEvent("onFormValidate", this.onFormValidate);
3157        this.ElementCust.validate();
3158        return;
3159      }
3160      if (a) {
3161        a.stop();
3162      }
3163      this.send();
3164    },
3165    saveClickedButton: function (b, c) {
3166      var a = c.get("name");
3167      if (!a || !this.options.sendButtonClicked) {
3168        return;
3169      }
3170      this.options.extraData[a] = c.get("value") || true;
3171      this.clickedCleaner = function () {
3172        delete this.options.extraData[a];
3173        this.clickedCleaner = function () {};
3174      }.bind(this);
3175    },
3176    clickedCleaner: function () {},
3177    send: function () {
3178      var b = this.ElementCust.toQueryString().trim(),
3179        a = Object.toQueryString(this.options.extraData);
3180      if (b) {
3181        b += "&" + a;
3182      } else {
3183        b = a;
3184      }
3185      this.fireEvent("send", [this.ElementCust, b.parseQueryString()]);
3186      this.request.send({
3187        data: b,
3188        url: this.options.requestOptions.url || this.ElementCust.get("action"),
3189      });
3190      this.clickedCleaner();
3191      return this;
3192    },
3193  });
3194  ElementCust.implement("formUpdate", function (c, b) {
3195    var a = this.retrieve("form.request");
3196    if (!a) {
3197      a = new Form.Request(this, c, b);
3198    } else {
3199      if (c) {
3200        a.setTarget(c);
3201      }
3202      if (b) {
3203        a.setOptions(b).makeRequest();
3204      }
3205    }
3206    a.send();
3207    return this;
3208  });
3209})();
3210(function () {
3211  var a = function (d) {
3212    var b = d.options.hideInputs;
3213    if (window.OverText) {
3214      var c = [null];
3215      OverText.each(function (e) {
3216        c.include("." + e.options.labelClass);
3217      });
3218      if (c) {
3219        b += c.join(", ");
3220      }
3221    }
3222    return b ? d.ElementCust.getElements(b) : null;
3223  };
3224  Fx.Reveal = new Class({
3225    Extends: Fx.Morph,
3226    options: {
3227      link: "cancel",
3228      styles: ["padding", "border", "margin"],
3229      transitionOpacity: !Browser.ie6,
3230      mode: "vertical",
3231      display: function () {
3232        return this.ElementCust.get("tag") != "tr" ? "block" : "table-row";
3233      },
3234      opacity: 1,
3235      hideInputs: Browser.ie ? "select, input, textarea, object, embed" : null,
3236    },
3237    dissolve: function () {
3238      if (!this.hiding && !this.showing) {
3239        if (this.ElementCust.getStyle("display") != "none") {
3240          this.hiding = true;
3241          this.showing = false;
3242          this.hidden = true;
3243          this.cssText = this.ElementCust.style.cssText;
3244          var d = this.ElementCust.getComputedSize({
3245            styles: this.options.styles,
3246            mode: this.options.mode,
3247          });
3248          if (this.options.transitionOpacity) {
3249            d.opacity = this.options.opacity;
3250          }
3251          var c = {};
3252          Object.each(d, function (f, e) {
3253            c[e] = [f, 0];
3254          });
3255          this.ElementCust.setStyles({
3256            display: Function.from(this.options.display).call(this),
3257            overflow: "hidden",
3258          });
3259          var b = a(this);
3260          if (b) {
3261            b.setStyle("visibility", "hidden");
3262          }
3263          this.$chain.unshift(
3264            function () {
3265              if (this.hidden) {
3266                this.hiding = false;
3267                this.ElementCust.style.cssText = this.cssText;
3268                this.ElementCust.setStyle("display", "none");
3269                if (b) {
3270                  b.setStyle("visibility", "visible");
3271                }
3272              }
3273              this.fireEvent("hide", this.ElementCust);
3274              this.callChain();
3275            }.bind(this)
3276          );
3277          this.start(c);
3278        } else {
3279          this.callChain.delay(10, this);
3280          this.fireEvent("complete", this.ElementCust);
3281          this.fireEvent("hide", this.ElementCust);
3282        }
3283      } else {
3284        if (this.options.link == "chain") {
3285          this.chain(this.dissolve.bind(this));
3286        } else {
3287          if (this.options.link == "cancel" && !this.hiding) {
3288            this.cancel();
3289            this.dissolve();
3290          }
3291        }
3292      }
3293      return this;
3294    },
3295    reveal: function () {
3296      if (!this.showing && !this.hiding) {
3297        if (this.ElementCust.getStyle("display") == "none") {
3298          this.hiding = false;
3299          this.showing = true;
3300          this.hidden = false;
3301          this.cssText = this.ElementCust.style.cssText;
3302          var d;
3303          this.ElementCust.measure(
3304            function () {
3305              d = this.ElementCust.getComputedSize({
3306                styles: this.options.styles,
3307                mode: this.options.mode,
3308              });
3309            }.bind(this)
3310          );
3311          if (this.options.heightOverride != null) {
3312            d.height = this.options.heightOverride.toInt();
3313          }
3314          if (this.options.widthOverride != null) {
3315            d.width = this.options.widthOverride.toInt();
3316          }
3317          if (this.options.transitionOpacity) {
3318            this.ElementCust.setStyle("opacity", 0);
3319            d.opacity = this.options.opacity;
3320          }
3321          var c = {
3322            height: 0,
3323            display: Function.from(this.options.display).call(this),
3324          };
3325          Object.each(d, function (f, e) {
3326            c[e] = 0;
3327          });
3328          c.overflow = "hidden";
3329          this.ElementCust.setStyles(c);
3330          var b = a(this);
3331          if (b) {
3332            b.setStyle("visibility", "hidden");
3333          }
3334          this.$chain.unshift(
3335            function () {
3336              this.ElementCust.style.cssText = this.cssText;
3337              this.ElementCust.setStyle(
3338                "display",
3339                Function.from(this.options.display).call(this)
3340              );
3341              if (!this.hidden) {
3342                this.showing = false;
3343              }
3344              if (b) {
3345                b.setStyle("visibility", "visible");
3346              }
3347              this.callChain();
3348              this.fireEvent("show", this.ElementCust);
3349            }.bind(this)
3350          );
3351          this.start(d);
3352        } else {
3353          this.callChain();
3354          this.fireEvent("complete", this.ElementCust);
3355          this.fireEvent("show", this.ElementCust);
3356        }
3357      } else {
3358        if (this.options.link == "chain") {
3359          this.chain(this.reveal.bind(this));
3360        } else {
3361          if (this.options.link == "cancel" && !this.showing) {
3362            this.cancel();
3363            this.reveal();
3364          }
3365        }
3366      }
3367      return this;
3368    },
3369    toggle: function () {
3370      if (this.ElementCust.getStyle("display") == "none") {
3371        this.reveal();
3372      } else {
3373        this.dissolve();
3374      }
3375      return this;
3376    },
3377    cancel: function () {
3378      this.parent.apply(this, arguments);
3379      if (this.cssText != null) {
3380        this.ElementCust.style.cssText = this.cssText;
3381      }
3382      this.hiding = false;
3383      this.showing = false;
3384      return this;
3385    },
3386  });
3387  ElementCust.Properties.reveal = {
3388    set: function (b) {
3389      this.get("reveal").cancel().setOptions(b);
3390      return this;
3391    },
3392    get: function () {
3393      var b = this.retrieve("reveal");
3394      if (!b) {
3395        b = new Fx.Reveal(this);
3396        this.store("reveal", b);
3397      }
3398      return b;
3399    },
3400  };
3401  ElementCust.Properties.dissolve = ElementCust.Properties.reveal;
3402  ElementCust.implement({
3403    reveal: function (b) {
3404      this.get("reveal").setOptions(b).reveal();
3405      return this;
3406    },
3407    dissolve: function (b) {
3408      this.get("reveal").setOptions(b).dissolve();
3409      return this;
3410    },
3411    nix: function (b) {
3412      var c = Array.link(arguments, {
3413        destroy: Type.isBoolean,
3414        options: Type.isObject,
3415      });
3416      this.get("reveal")
3417        .setOptions(b)
3418        .dissolve()
3419        .chain(
3420          function () {
3421            this[c.destroy ? "destroy" : "dispose"]();
3422          }.bind(this)
3423        );
3424      return this;
3425    },
3426    wink: function () {
3427      var c = Array.link(arguments, {
3428        duration: Type.isNumber,
3429        options: Type.isObject,
3430      });
3431      var b = this.get("reveal").setOptions(c.options);
3432      b.reveal().chain(function () {
3433        (function () {
3434          b.dissolve();
3435        }).delay(c.duration || 2000);
3436      });
3437    },
3438  });
3439})();
3440Form.Request.Append = new Class({
3441  Extends: Form.Request,
3442  options: { useReveal: true, revealOptions: {}, inject: "bottom" },
3443  makeRequest: function () {
3444    this.request = new Request.HTML(
3445      Object.merge(
3446        {
3447          url: this.ElementCust.get("action"),
3448          method: this.ElementCust.get("method") || "post",
3449          spinnerTarget: this.ElementCust,
3450        },
3451        this.options.requestOptions,
3452        { evalScripts: false }
3453      )
3454    ).addEvents({
3455      success: function (b, g, f, a) {
3456        var c;
3457        var d = Elements.from(f);
3458        if (d.length == 1) {
3459          c = d[0];
3460        } else {
3461          c = new ElementCust("div", { styles: { display: "none" } }).adopt(d);
3462        }
3463        c.inject(this.target, this.options.inject);
3464        if (this.options.requestOptions.evalScripts) {
3465          Browser.exec(a);
3466        }
3467        this.fireEvent("beforeEffect", c);
3468        var e = function () {
3469          this.fireEvent("success", [c, this.target, b, g, f, a]);
3470        }.bind(this);
3471        if (this.options.useReveal) {
3472          c.set("reveal", this.options.revealOptions).get("reveal").chain(e);
3473          c.reveal();
3474        } else {
3475          e();
3476        }
3477      }.bind(this),
3478      failure: function (a) {
3479        this.fireEvent("failure", a);
3480      }.bind(this),
3481    });
3482    this.attachReset();
3483  },
3484});
3485Locale.define("en-US", "FormValidator", {
3486  required: "This field is required.",
3487  length:
3488    "Please enter {length} characters (you entered {elLength} characters)",
3489  minLength:
3490    "Please enter at least {minLength} characters (you entered {length} characters).",
3491  maxLength:
3492    "Please enter no more than {maxLength} characters (you entered {length} characters).",
3493  integer:
3494    "Please enter an integer in this field. Numbers with decimals (e.g. 1.25) are not permitted.",
3495  numeric:
3496    'Please enter only numeric values in this field (i.e. "1" or "1.1" or "-1" or "-1.1").',
3497  digits:
3498    "Please use numbers and punctuation only in this field (for example, a phone number with dashes or dots is permitted).",
3499  alpha:
3500    "Please use only letters (a-z) within this field. No spaces or other characters are allowed.",
3501  alphanum:
3502    "Please use only letters (a-z) or numbers (0-9) in this field. No spaces or other characters are allowed.",
3503  dateSuchAs: "Please enter a valid date such as {date}",
3504  dateInFormatMDY:
3505    'Please enter a valid date such as MM/DD/YYYY (i.e. "12/31/1999")',
3506  email: 'Please enter a valid email address. For example "[email protected]".',
3507  url: "Please enter a valid URL such as http://www.example.com.",
3508  currencyDollar: "Please enter a valid $ amount. For example $100.00 .",
3509  oneRequired: "Please enter something for at least one of these inputs.",
3510  errorPrefix: "Error: ",
3511  warningPrefix: "Warning: ",
3512  noSpace: "There can be no spaces in this input.",
3513  reqChkByNode: "No items are selected.",
3514  requiredChk: "This field is required.",
3515  reqChkByName: "Please select a {label}.",
3516  match: "This field needs to match the {matchName} field",
3517  startDate: "the start date",
3518  endDate: "the end date",
3519  currendDate: "the current date",
3520  afterDate: "The date should be the same or after {label}.",
3521  beforeDate: "The date should be the same or before {label}.",
3522  startMonth: "Please select a start month",
3523  sameMonth:
3524    "These two dates must be in the same month - you must change one or the other.",
3525  creditcard:
3526    "The credit card number entered is invalid. Please check the number and try again. {length} digits entered.",
3527});
3528if (!window.Form) {
3529  window.Form = {};
3530}
3531var InputValidator = (this.InputValidator = new Class({
3532  Implements: [Options],
3533  options: { errorMsg: "Validation failed.", test: Function.from(true) },
3534  initialize: function (b, a) {
3535    this.setOptions(a);
3536    this.className = b;
3537  },
3538  test: function (b, a) {
3539    b = document.id(b);
3540    return b ? this.options.test(b, a || this.getProps(b)) : false;
3541  },
3542  getError: function (c, a) {
3543    c = document.id(c);
3544    var b = this.options.errorMsg;
3545    if (typeOf(b) == "function") {
3546      b = b(c, a || this.getProps(c));
3547    }
3548    return b;
3549  },
3550  getProps: function (a) {
3551    a = document.id(a);
3552    return a ? a.get("validatorProps") : {};
3553  },
3554}));
3555ElementCust.Properties.validators = {
3556  get: function () {
3557    return (this.get("data-validators") || this.className).clean().split(" ");
3558  },
3559};
3560ElementCust.Properties.validatorProps = {
3561  set: function (a) {
3562    return this.eliminate("$moo:validatorProps").store(
3563      "$moo:validatorProps",
3564      a
3565    );
3566  },
3567  get: function (a) {
3568    if (a) {
3569      this.set(a);
3570    }
3571    if (this.retrieve("$moo:validatorProps")) {
3572      return this.retrieve("$moo:validatorProps");
3573    }
3574    if (
3575      this.getProperty("data-validator-properties") ||
3576      this.getProperty("validatorProps")
3577    ) {
3578      try {
3579        this.store(
3580          "$moo:validatorProps",
3581          JSON.decode(
3582            this.getProperty("validatorProps") ||
3583              this.getProperty("data-validator-properties")
3584          )
3585        );
3586      } catch (c) {
3587        return {};
3588      }
3589    } else {
3590      var b = this.get("validators").filter(function (d) {
3591        return d.test(":");
3592      });
3593      if (!b.length) {
3594        this.store("$moo:validatorProps", {});
3595      } else {
3596        a = {};
3597        b.each(function (d) {
3598          var f = d.split(":");
3599          if (f[1]) {
3600            try {
3601              a[f[0]] = JSON.decode(f[1]);
3602            } catch (g) {}
3603          }
3604        });
3605        this.store("$moo:validatorProps", a);
3606      }
3607    }
3608    return this.retrieve("$moo:validatorProps");
3609  },
3610};
3611Form.Validator = new Class({
3612  Implements: [Options, Events],
3613  Binds: ["onSubmit"],
3614  options: {
3615    fieldSelectors: "input, select, textarea",
3616    ignoreHidden: true,
3617    ignoreDisabled: true,
3618    useTitles: false,
3619    evaluateOnSubmit: true,
3620    evaluateFieldsOnBlur: true,
3621    evaluateFieldsOnChange: true,
3622    serial: true,
3623    stopOnFailure: true,
3624    warningPrefix: function () {
3625      return Form.Validator.getMsg("warningPrefix") || "Warning: ";
3626    },
3627    errorPrefix: function () {
3628      return Form.Validator.getMsg("errorPrefix") || "Error: ";
3629    },
3630  },
3631  initialize: function (b, a) {
3632    this.setOptions(a);
3633    this.ElementCust = document.id(b);
3634    this.ElementCust.store("validator", this);
3635    this.warningPrefix = Function.from(this.options.warningPrefix)();
3636    this.errorPrefix = Function.from(this.options.errorPrefix)();
3637    if (this.options.evaluateOnSubmit) {
3638      this.ElementCust.addEvent("submit", this.onSubmit);
3639    }
3640    if (
3641      this.options.evaluateFieldsOnBlur ||
3642      this.options.evaluateFieldsOnChange
3643    ) {
3644      this.watchFields(this.getFields());
3645    }
3646  },
3647  toElement: function () {
3648    return this.ElementCust;
3649  },
3650  getFields: function () {
3651    return (this.fields = this.ElementCust.getElements(
3652      this.options.fieldSelectors
3653    ));
3654  },
3655  watchFields: function (a) {
3656    a.each(function (b) {
3657      if (this.options.evaluateFieldsOnBlur) {
3658        b.addEvent("blur", this.validationMonitor.pass([b, false], this));
3659      }
3660      if (this.options.evaluateFieldsOnChange) {
3661        b.addEvent("change", this.validationMonitor.pass([b, true], this));
3662      }
3663    }, this);
3664  },
3665  validationMonitor: function () {
3666    clearTimeout(this.timer);
3667    this.timer = this.validateField.delay(50, this, arguments);
3668  },
3669  onSubmit: function (a) {
3670    if (this.validate(a)) {
3671      this.reset();
3672    }
3673  },
3674  reset: function () {
3675    this.getFields().each(this.resetField, this);
3676    return this;
3677  },
3678  validate: function (b) {
3679    var a = this.getFields()
3680      .map(function (c) {
3681        return this.validateField(c, true);
3682      }, this)
3683      .every(function (c) {
3684        return c;
3685      });
3686    this.fireEvent("formValidate", [a, this.ElementCust, b]);
3687    if (this.options.stopOnFailure && !a && b) {
3688      b.preventDefault();
3689    }
3690    return a;
3691  },
3692  validateField: function (j, b) {
3693    if (this.paused) {
3694      return true;
3695    }
3696    j = document.id(j);
3697    var f = !j.hasClass("validation-failed");
3698    var g, i;
3699    if (this.options.serial && !b) {
3700      g = this.ElementCust.getElement(".validation-failed");
3701      i = this.ElementCust.getElement(".warning");
3702    }
3703    if (
3704      j &&
3705      (!g ||
3706        b ||
3707        j.hasClass("validation-failed") ||
3708        (g && !this.options.serial))
3709    ) {
3710      var a = j.get("validators");
3711      var d = a.some(function (k) {
3712        return this.getValidator(k);
3713      }, this);
3714      var h = [];
3715      a.each(function (k) {
3716        if (k && !this.test(k, j)) {
3717          h.include(k);
3718        }
3719      }, this);
3720      f = h.length === 0;
3721      if (d && !this.hasValidator(j, "warnOnly")) {
3722        if (f) {
3723          j.addClass("validation-passed").removeClass("validation-failed");
3724          this.fireEvent("elementPass", [j]);
3725        } else {
3726          j.addClass("validation-failed").removeClass("validation-passed");
3727          this.fireEvent("elementFail", [j, h]);
3728        }
3729      }
3730      if (!i) {
3731        var e = a.some(function (k) {
3732          if (k.test("^warn")) {
3733            return this.getValidator(k.replace(/^warn-/, ""));
3734          } else {
3735            return null;
3736          }
3737        }, this);
3738        j.removeClass("warning");
3739        var c = a.map(function (k) {
3740          if (k.test("^warn")) {
3741            return this.test(k.replace(/^warn-/, ""), j, true);
3742          } else {
3743            return null;
3744          }
3745        }, this);
3746      }
3747    }
3748    return f;
3749  },
3750  test: function (b, d, e) {
3751    d = document.id(d);
3752    if (
3753      (this.options.ignoreHidden && !d.isVisible()) ||
3754      (this.options.ignoreDisabled && d.get("disabled"))
3755    ) {
3756      return true;
3757    }
3758    var a = this.getValidator(b);
3759    if (e != null) {
3760      e = false;
3761    }
3762    if (this.hasValidator(d, "warnOnly")) {
3763      e = true;
3764    }
3765    var c = this.hasValidator(d, "ignoreValidation") || (a ? a.test(d) : true);
3766    if (a && d.isVisible()) {
3767      this.fireEvent("elementValidate", [c, d, b, e]);
3768    }
3769    if (e) {
3770      return true;
3771    }
3772    return c;
3773  },
3774  hasValidator: function (b, a) {
3775    return b.get("validators").contains(a);
3776  },
3777  resetField: function (a) {
3778    a = document.id(a);
3779    if (a) {
3780      a.get("validators").each(function (b) {
3781        if (b.test("^warn-")) {
3782          b = b.replace(/^warn-/, "");
3783        }
3784        a.removeClass("validation-failed");
3785        a.removeClass("warning");
3786        a.removeClass("validation-passed");
3787      }, this);
3788    }
3789    return this;
3790  },
3791  stop: function () {
3792    this.paused = true;
3793    return this;
3794  },
3795  start: function () {
3796    this.paused = false;
3797    return this;
3798  },
3799  ignoreField: function (a, b) {
3800    a = document.id(a);
3801    if (a) {
3802      this.enforceField(a);
3803      if (b) {
3804        a.addClass("warnOnly");
3805      } else {
3806        a.addClass("ignoreValidation");
3807      }
3808    }
3809    return this;
3810  },
3811  enforceField: function (a) {
3812    a = document.id(a);
3813    if (a) {
3814      a.removeClass("warnOnly").removeClass("ignoreValidation");
3815    }
3816    return this;
3817  },
3818});
3819Form.Validator.getMsg = function (a) {
3820  return Locale.get("FormValidator." + a);
3821};
3822Form.Validator.adders = {
3823  validators: {},
3824  add: function (b, a) {
3825    this.validators[b] = new InputValidator(b, a);
3826    if (!this.initialize) {
3827      this.implement({ validators: this.validators });
3828    }
3829  },
3830  addAllThese: function (a) {
3831    Array.from(a).each(function (b) {
3832      this.add(b[0], b[1]);
3833    }, this);
3834  },
3835  getValidator: function (a) {
3836    return this.validators[a.split(":")[0]];
3837  },
3838};
3839Object.append(Form.Validator, Form.Validator.adders);
3840Form.Validator.implement(Form.Validator.adders);
3841Form.Validator.add("IsEmpty", {
3842  errorMsg: false,
3843  test: function (a) {
3844    if (a.type == "select-one" || a.type == "select") {
3845      return !(a.selectedIndex >= 0 && a.options[a.selectedIndex].value != "");
3846    } else {
3847      return a.get("value") == null || a.get("value").length == 0;
3848    }
3849  },
3850});
3851Form.Validator.addAllThese([
3852  [
3853    "required",
3854    {
3855      errorMsg: function () {
3856        return Form.Validator.getMsg("required");
3857      },
3858      test: function (a) {
3859        return !Form.Validator.getValidator("IsEmpty").test(a);
3860      },
3861    },
3862  ],
3863  [
3864    "length",
3865    {
3866      errorMsg: function (a, b) {
3867        if (typeOf(b.length) != "null") {
3868          return Form.Validator.getMsg("length").substitute({
3869            length: b.length,
3870            elLength: a.get("value").length,
3871          });
3872        } else {
3873          return "";
3874        }
3875      },
3876      test: function (a, b) {
3877        if (typeOf(b.length) != "null") {
3878          return (
3879            a.get("value").length == b.length || a.get("value").length == 0
3880          );
3881        } else {
3882          return true;
3883        }
3884      },
3885    },
3886  ],
3887  [
3888    "minLength",
3889    {
3890      errorMsg: function (a, b) {
3891        if (typeOf(b.minLength) != "null") {
3892          return Form.Validator.getMsg("minLength").substitute({
3893            minLength: b.minLength,
3894            length: a.get("value").length,
3895          });
3896        } else {
3897          return "";
3898        }
3899      },
3900      test: function (a, b) {
3901        if (typeOf(b.minLength) != "null") {
3902          return a.get("value").length >= (b.minLength || 0);
3903        } else {
3904          return true;
3905        }
3906      },
3907    },
3908  ],
3909  [
3910    "maxLength",
3911    {
3912      errorMsg: function (a, b) {
3913        if (typeOf(b.maxLength) != "null") {
3914          return Form.Validator.getMsg("maxLength").substitute({
3915            maxLength: b.maxLength,
3916            length: a.get("value").length,
3917          });
3918        } else {
3919          return "";
3920        }
3921      },
3922      test: function (a, b) {
3923        return a.get("value").length <= (b.maxLength || 10000);
3924      },
3925    },
3926  ],
3927  [
3928    "validate-integer",
3929    {
3930      errorMsg: Form.Validator.getMsg.pass("integer"),
3931      test: function (a) {
3932        return (
3933          Form.Validator.getValidator("IsEmpty").test(a) ||
3934          /^(-?[1-9]\d*|0)$/.test(a.get("value"))
3935        );
3936      },
3937    },
3938  ],
3939  [
3940    "validate-numeric",
3941    {
3942      errorMsg: Form.Validator.getMsg.pass("numeric"),
3943      test: function (a) {
3944        return (
3945          Form.Validator.getValidator("IsEmpty").test(a) ||
3946          /^-?(?:0$0(?=\d*\.)|[1-9]|0)\d*(\.\d+)?$/.test(a.get("value"))
3947        );
3948      },
3949    },
3950  ],
3951  [
3952    "validate-digits",
3953    {
3954      errorMsg: Form.Validator.getMsg.pass("digits"),
3955      test: function (a) {
3956        return (
3957          Form.Validator.getValidator("IsEmpty").test(a) ||
3958          /^[\d() .:\-\+#]+$/.test(a.get("value"))
3959        );
3960      },
3961    },
3962  ],
3963  [
3964    "validate-alpha",
3965    {
3966      errorMsg: Form.Validator.getMsg.pass("alpha"),
3967      test: function (a) {
3968        return (
3969          Form.Validator.getValidator("IsEmpty").test(a) ||
3970          /^[a-zA-Z]+$/.test(a.get("value"))
3971        );
3972      },
3973    },
3974  ],
3975  [
3976    "validate-alphanum",
3977    {
3978      errorMsg: Form.Validator.getMsg.pass("alphanum"),
3979      test: function (a) {
3980        return (
3981          Form.Validator.getValidator("IsEmpty").test(a) ||
3982          !/\W/.test(a.get("value"))
3983        );
3984      },
3985    },
3986  ],
3987  [
3988    "validate-date",
3989    {
3990      errorMsg: function (a, b) {
3991        if (Date.parse) {
3992          var c = b.dateFormat || "%x";
3993          return Form.Validator.getMsg("dateSuchAs").substitute({
3994            date: new Date().format(c),
3995          });
3996        } else {
3997          return Form.Validator.getMsg("dateInFormatMDY");
3998        }
3999      },
4000      test: function (e, g) {
4001        if (Form.Validator.getValidator("IsEmpty").test(e)) {
4002          return true;
4003        }
4004        var a = Locale.getCurrent().sets.Date,
4005          b = new RegExp(
4006            [a.days, a.days_abbr, a.months, a.months_abbr].flatten().join("|"),
4007            "i"
4008          ),
4009          i = e.get("value"),
4010          f = i.match(/[a-z]+/gi);
4011        if (f && !f.every(b.exec, b)) {
4012          return false;
4013        }
4014        var c = Date.parse(i),
4015          h = g.dateFormat || "%x",
4016          d = c.format(h);
4017        if (d != "invalid date") {
4018          e.set("value", d);
4019        }
4020        return c.isValid();
4021      },
4022    },
4023  ],
4024  [
4025    "validate-email",
4026    {
4027      errorMsg: Form.Validator.getMsg.pass("email"),
4028      test: function (a) {
4029        return (
4030          Form.Validator.getValidator("IsEmpty").test(a) ||
4031          /^(?:[a-z0-9!#$%&'*+\/=?^_`{|}~-]\.?){0,63}[a-z0-9!#$%&'*+\/=?^_`{|}~-]@(?:(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)*[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\])$/i.test(
4032            a.get("value")
4033          )
4034        );
4035      },
4036    },
4037  ],
4038  [
4039    "validate-url",
4040    {
4041      errorMsg: Form.Validator.getMsg.pass("url"),
4042      test: function (a) {
4043        return (
4044          Form.Validator.getValidator("IsEmpty").test(a) ||
4045          /^(https?|ftp|rmtp|mms):\/\/(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+)(:(\d+))?\/?/i.test(
4046            a.get("value")
4047          )
4048        );
4049      },
4050    },
4051  ],
4052  [
4053    "validate-currency-dollar",
4054    {
4055      errorMsg: Form.Validator.getMsg.pass("currencyDollar"),
4056      test: function (a) {
4057        return (
4058          Form.Validator.getValidator("IsEmpty").test(a) ||
4059          /^\$?\-?([1-9]{1}[0-9]{0,2}(\,[0-9]{3})*(\.[0-9]{0,2})?|[1-9]{1}\d*(\.[0-9]{0,2})?|0(\.[0-9]{0,2})?|(\.[0-9]{1,2})?)$/.test(
4060            a.get("value")
4061          )
4062        );
4063      },
4064    },
4065  ],
4066  [
4067    "validate-one-required",
4068    {
4069      errorMsg: Form.Validator.getMsg.pass("oneRequired"),
4070      test: function (a, b) {
4071        var c =
4072          document.id(b["validate-one-required"]) ||
4073          a.getParent(b["validate-one-required"]);
4074        return c.getElements("input").some(function (d) {
4075          if (["checkbox", "radio"].contains(d.get("type"))) {
4076            return d.get("checked");
4077          }
4078          return d.get("value");
4079        });
4080      },
4081    },
4082  ],
4083]);
4084ElementCust.Properties.validator = {
4085  set: function (a) {
4086    this.get("validator").setOptions(a);
4087  },
4088  get: function () {
4089    var a = this.retrieve("validator");
4090    if (!a) {
4091      a = new Form.Validator(this);
4092      this.store("validator", a);
4093    }
4094    return a;
4095  },
4096};
4097ElementCust.implement({
4098  validate: function (a) {
4099    if (a) {
4100      this.set("validator", a);
4101    }
4102    return this.get("validator").validate();
4103  },
4104});
4105Form.Validator.Inline = new Class({
4106  Extends: Form.Validator,
4107  options: {
4108    showError: function (a) {
4109      if (a.reveal) {
4110        a.reveal();
4111      } else {
4112        a.setStyle("display", "block");
4113      }
4114    },
4115    hideError: function (a) {
4116      if (a.dissolve) {
4117        a.dissolve();
4118      } else {
4119        a.setStyle("display", "none");
4120      }
4121    },
4122    scrollToErrorsOnSubmit: true,
4123    scrollToErrorsOnBlur: false,
4124    scrollToErrorsOnChange: false,
4125    scrollFxOptions: { transition: "quad:out", offset: { y: -20 } },
4126  },
4127  initialize: function (b, a) {
4128    this.parent(b, a);
4129    this.addEvent("onElementValidate", function (g, f, e, h) {
4130      var d = this.getValidator(e);
4131      if (!g && d.getError(f)) {
4132        if (h) {
4133          f.addClass("warning");
4134        }
4135        var c = this.makeAdvice(e, f, d.getError(f), h);
4136        this.insertAdvice(c, f);
4137        this.showAdvice(e, f);
4138      } else {
4139        this.hideAdvice(e, f);
4140      }
4141    });
4142  },
4143  makeAdvice: function (d, f, c, g) {
4144    var e = g ? this.warningPrefix : this.errorPrefix;
4145    e += this.options.useTitles ? f.title || c : c;
4146    var a = g ? "warning-advice" : "validation-advice";
4147    var b = this.getAdvice(d, f);
4148    if (b) {
4149      b = b.set("html", e);
4150    } else {
4151      b = new ElementCust("div", {
4152        html: e,
4153        styles: { display: "none" },
4154        id: "advice-" + d.split(":")[0] + "-" + this.getFieldId(f),
4155      }).addClass(a);
4156    }
4157    f.store("$moo:advice-" + d, b);
4158    return b;
4159  },
4160  getFieldId: function (a) {
4161    return a.id ? a.id : (a.id = "input_" + a.name);
4162  },
4163  showAdvice: function (b, c) {
4164    var a = this.getAdvice(b, c);
4165    if (
4166      a &&
4167      !c.retrieve("$moo:" + this.getPropName(b)) &&
4168      (a.getStyle("display") == "none" ||
4169        a.getStyle("visiblity") == "hidden" ||
4170        a.getStyle("opacity") == 0)
4171    ) {
4172      c.store("$moo:" + this.getPropName(b), true);
4173      this.options.showError(a);
4174      this.fireEvent("showAdvice", [c, a, b]);
4175    }
4176  },
4177  hideAdvice: function (b, c) {
4178    var a = this.getAdvice(b, c);
4179    if (a && c.retrieve("$moo:" + this.getPropName(b))) {
4180      c.store("$moo:" + this.getPropName(b), false);
4181      this.options.hideError(a);
4182      this.fireEvent("hideAdvice", [c, a, b]);
4183    }
4184  },
4185  getPropName: function (a) {
4186    return "advice" + a;
4187  },
4188  resetField: function (a) {
4189    a = document.id(a);
4190    if (!a) {
4191      return this;
4192    }
4193    this.parent(a);
4194    a.get("validators").each(function (b) {
4195      this.hideAdvice(b, a);
4196    }, this);
4197    return this;
4198  },
4199  getAllAdviceMessages: function (d, c) {
4200    var b = [];
4201    if (d.hasClass("ignoreValidation") && !c) {
4202      return b;
4203    }
4204    var a = d.get("validators").some(function (g) {
4205      var e = g.test("^warn-") || d.hasClass("warnOnly");
4206      if (e) {
4207        g = g.replace(/^warn-/, "");
4208      }
4209      var f = this.getValidator(g);
4210      if (!f) {
4211        return;
4212      }
4213      b.push({
4214        message: f.getError(d),
4215        warnOnly: e,
4216        passed: f.test(),
4217        validator: f,
4218      });
4219    }, this);
4220    return b;
4221  },
4222  getAdvice: function (a, b) {
4223    return b.retrieve("$moo:advice-" + a);
4224  },
4225  insertAdvice: function (a, c) {
4226    var b = c.get("validatorProps");
4227    if (!b.msgPos || !document.id(b.msgPos)) {
4228      if (c.type && c.type.toLowerCase() == "radio") {
4229        c.getParent().adopt(a);
4230      } else {
4231        a.inject(document.id(c), "after");
4232      }
4233    } else {
4234      document.id(b.msgPos).grab(a);
4235    }
4236  },
4237  validateField: function (g, f, b) {
4238    var a = this.parent(g, f);
4239    if (((this.options.scrollToErrorsOnSubmit && b == null) || b) && !a) {
4240      var c = document.id(this).getElement(".validation-failed");
4241      var d = document.id(this).getParent();
4242      while (d != document.body && d.getScrollSize().y == d.getSize().y) {
4243        d = d.getParent();
4244      }
4245      var e = d.retrieve("$moo:fvScroller");
4246      if (!e && window.Fx && Fx.Scroll) {
4247        e = new Fx.Scroll(d, this.options.scrollFxOptions);
4248        d.store("$moo:fvScroller", e);
4249      }
4250      if (c) {
4251        if (e) {
4252          e.toElement(c);
4253        } else {
4254          d.scrollTo(d.getScroll().x, c.getPosition(d).y - 20);
4255        }
4256      }
4257    }
4258    return a;
4259  },
4260  watchFields: function (a) {
4261    a.each(function (b) {
4262      if (this.options.evaluateFieldsOnBlur) {
4263        b.addEvent(
4264          "blur",
4265          this.validationMonitor.pass(
4266            [b, false, this.options.scrollToErrorsOnBlur],
4267            this
4268          )
4269        );
4270      }
4271      if (this.options.evaluateFieldsOnChange) {
4272        b.addEvent(
4273          "change",
4274          this.validationMonitor.pass(
4275            [b, true, this.options.scrollToErrorsOnChange],
4276            this
4277          )
4278        );
4279      }
4280    }, this);
4281  },
4282});
4283Form.Validator.addAllThese([
4284  [
4285    "validate-enforce-oncheck",
4286    {
4287      test: function (a, b) {
4288        var c = a.getParent("form").retrieve("validator");
4289        if (!c) {
4290          return true;
4291        }
4292        (
4293          b.toEnforce ||
4294          document
4295            .id(b.enforceChildrenOf)
4296            .getElements("input, select, textarea")
4297        ).map(function (d) {
4298          if (a.checked) {
4299            c.enforceField(d);
4300          } else {
4301            c.ignoreField(d);
4302            c.resetField(d);
4303          }
4304        });
4305        return true;
4306      },
4307    },
4308  ],
4309  [
4310    "validate-ignore-oncheck",
4311    {
4312      test: function (a, b) {
4313        var c = a.getParent("form").retrieve("validator");
4314        if (!c) {
4315          return true;
4316        }
4317        (
4318          b.toIgnore ||
4319          document.id(b.ignoreChildrenOf).getElements("input, select, textarea")
4320        ).each(function (d) {
4321          if (a.checked) {
4322            c.ignoreField(d);
4323            c.resetField(d);
4324          } else {
4325            c.enforceField(d);
4326          }
4327        });
4328        return true;
4329      },
4330    },
4331  ],
4332  [
4333    "validate-nospace",
4334    {
4335      errorMsg: function () {
4336        return Form.Validator.getMsg("noSpace");
4337      },
4338      test: function (a, b) {
4339        return !a.get("value").test(/\s/);
4340      },
4341    },
4342  ],
4343  [
4344    "validate-toggle-oncheck",
4345    {
4346      test: function (b, c) {
4347        var d = b.getParent("form").retrieve("validator");
4348        if (!d) {
4349          return true;
4350        }
4351        var a =
4352          c.toToggle ||
4353          document
4354            .id(c.toToggleChildrenOf)
4355            .getElements("input, select, textarea");
4356        if (!b.checked) {
4357          a.each(function (e) {
4358            d.ignoreField(e);
4359            d.resetField(e);
4360          });
4361        } else {
4362          a.each(function (e) {
4363            d.enforceField(e);
4364          });
4365        }
4366        return true;
4367      },
4368    },
4369  ],
4370  [
4371    "validate-reqchk-bynode",
4372    {
4373      errorMsg: function () {
4374        return Form.Validator.getMsg("reqChkByNode");
4375      },
4376      test: function (a, b) {
4377        return document
4378          .id(b.nodeId)
4379          .getElements(b.selector || "input[type=checkbox], input[type=radio]")
4380          .some(function (c) {
4381            return c.checked;
4382          });
4383      },
4384    },
4385  ],
4386  [
4387    "validate-required-check",
4388    {
4389      errorMsg: function (a, b) {
4390        return b.useTitle
4391          ? a.get("title")
4392          : Form.Validator.getMsg("requiredChk");
4393      },
4394      test: function (a, b) {
4395        return !!a.checked;
4396      },
4397    },
4398  ],
4399  [
4400    "validate-reqchk-byname",
4401    {
4402      errorMsg: function (a, b) {
4403        return Form.Validator.getMsg("reqChkByName").substitute({
4404          label: b.label || a.get("type"),
4405        });
4406      },
4407      test: function (b, d) {
4408        var c = d.groupName || b.get("name");
4409        var a = $$(document.getElementsByName(c)).some(function (g, f) {
4410          return g.checked;
4411        });
4412        var e = b.getParent("form").retrieve("validator");
4413        if (a && e) {
4414          e.resetField(b);
4415        }
4416        return a;
4417      },
4418    },
4419  ],
4420  [
4421    "validate-match",
4422    {
4423      errorMsg: function (a, b) {
4424        return Form.Validator.getMsg("match").substitute({
4425          matchName: b.matchName || document.id(b.matchInput).get("name"),
4426        });
4427      },
4428      test: function (b, c) {
4429        var d = b.get("value");
4430        var a =
4431          document.id(c.matchInput) && document.id(c.matchInput).get("value");
4432        return d && a ? d == a : true;
4433      },
4434    },
4435  ],
4436  [
4437    "validate-after-date",
4438    {
4439      errorMsg: function (a, b) {
4440        return Form.Validator.getMsg("afterDate").substitute({
4441          label:
4442            b.afterLabel ||
4443            (b.afterElement
4444              ? Form.Validator.getMsg("startDate")
4445              : Form.Validator.getMsg("currentDate")),
4446        });
4447      },
4448      test: function (b, c) {
4449        var d = document.id(c.afterElement)
4450          ? Date.parse(document.id(c.afterElement).get("value"))
4451          : new Date();
4452        var a = Date.parse(b.get("value"));
4453        return a && d ? a >= d : true;
4454      },
4455    },
4456  ],
4457  [
4458    "validate-before-date",
4459    {
4460      errorMsg: function (a, b) {
4461        return Form.Validator.getMsg("beforeDate").substitute({
4462          label:
4463            b.beforeLabel ||
4464            (b.beforeElement
4465              ? Form.Validator.getMsg("endDate")
4466              : Form.Validator.getMsg("currentDate")),
4467        });
4468      },
4469      test: function (b, c) {
4470        var d = Date.parse(b.get("value"));
4471        var a = document.id(c.beforeElement)
4472          ? Date.parse(document.id(c.beforeElement).get("value"))
4473          : new Date();
4474        return a && d ? a >= d : true;
4475      },
4476    },
4477  ],
4478  [
4479    "validate-custom-required",
4480    {
4481      errorMsg: function () {
4482        return Form.Validator.getMsg("required");
4483      },
4484      test: function (a, b) {
4485        return a.get("value") != b.emptyValue;
4486      },
4487    },
4488  ],
4489  [
4490    "validate-same-month",
4491    {
4492      errorMsg: function (a, b) {
4493        var c =
4494          document.id(b.sameMonthAs) && document.id(b.sameMonthAs).get("value");
4495        var d = a.get("value");
4496        if (d != "") {
4497          return Form.Validator.getMsg(c ? "sameMonth" : "startMonth");
4498        }
4499      },
4500      test: function (a, b) {
4501        var d = Date.parse(a.get("value"));
4502        var c = Date.parse(
4503          document.id(b.sameMonthAs) && document.id(b.sameMonthAs).get("value")
4504        );
4505        return d && c ? d.format("%B") == c.format("%B") : true;
4506      },
4507    },
4508  ],
4509  [
4510    "validate-cc-num",
4511    {
4512      errorMsg: function (a) {
4513        var b = a.get("value").replace(/[^0-9]/g, "");
4514        return Form.Validator.getMsg("creditcard").substitute({
4515          length: b.length,
4516        });
4517      },
4518      test: function (c) {
4519        if (Form.Validator.getValidator("IsEmpty").test(c)) {
4520          return true;
4521        }
4522        var g = c.get("value");
4523        g = g.replace(/[^0-9]/g, "");
4524        var a = false;
4525        if (g.test(/^4[0-9]{12}([0-9]{3})?$/)) {
4526          a = "Visa";
4527        } else {
4528          if (g.test(/^5[1-5]([0-9]{14})$/)) {
4529            a = "Master Card";
4530          } else {
4531            if (g.test(/^3[47][0-9]{13}$/)) {
4532              a = "American Express";
4533            } else {
4534              if (g.test(/^6011[0-9]{12}$/)) {
4535                a = "Discover";
4536              }
4537            }
4538          }
4539        }
4540        if (a) {
4541          var d = 0;
4542          var e = 0;
4543          for (var b = g.length - 1; b >= 0; --b) {
4544            e = g.charAt(b).toInt();
4545            if (e == 0) {
4546              continue;
4547            }
4548            if ((g.length - b) % 2 == 0) {
4549              e += e;
4550            }
4551            if (e > 9) {
4552              e =
4553                e.toString().charAt(0).toInt() + e.toString().charAt(1).toInt();
4554            }
4555            d += e;
4556          }
4557          if (d % 10 == 0) {
4558            return true;
4559          }
4560        }
4561        var f = "";
4562        while (g != "") {
4563          f += " " + g.substr(0, 4);
4564          g = g.substr(4);
4565        }
4566        c.getParent("form").retrieve("validator").ignoreField(c);
4567        c.set("value", f.clean());
4568        c.getParent("form").retrieve("validator").enforceField(c);
4569        return false;
4570      },
4571    },
4572  ],
4573]);
4574var OverText = new Class({
4575  Implements: [Options, Events, Class.Occlude],
4576  Binds: ["reposition", "assert", "focus", "hide"],
4577  options: {
4578    ElementCust: "label",
4579    labelClass: "overTxtLabel",
4580    positionOptions: {
4581      position: "upperLeft",
4582      edge: "upperLeft",
4583      offset: { x: 4, y: 2 },
4584    },
4585    poll: false,
4586    pollInterval: 250,
4587    wrap: false,
4588  },
4589  property: "OverText",
4590  initialize: function (b, a) {
4591    b = this.ElementCust = document.id(b);
4592    if (this.occlude()) {
4593      return this.occluded;
4594    }
4595    this.setOptions(a);
4596    this.attach(b);
4597    OverText.instances.push(this);
4598    if (this.options.poll) {
4599      this.poll();
4600    }
4601  },
4602  toElement: function () {
4603    return this.ElementCust;
4604  },
4605  attach: function () {
4606    var b = this.ElementCust,
4607      a = this.options,
4608      c = a.textOverride || b.get("alt") || b.get("title");
4609    if (!c) {
4610      return this;
4611    }
4612    var d = (this.text = new ElementCust(a.ElementCust, {
4613      class: a.labelClass,
4614      styles: { lineHeight: "normal", position: "absolute", cursor: "text" },
4615      html: c,
4616      events: { click: this.hide.pass(a.ElementCust == "label", this) },
4617    }).inject(b, "after"));
4618    if (a.ElementCust == "label") {
4619      if (!b.get("id")) {
4620        b.set("id", "input_" + String.uniqueID());
4621      }
4622      d.set("for", b.get("id"));
4623    }
4624    if (a.wrap) {
4625      this.textHolder = new ElementCust("div.overTxtWrapper", {
4626        styles: { lineHeight: "normal", position: "relative" },
4627      })
4628        .grab(d)
4629        .inject(b, "before");
4630    }
4631    return this.enable();
4632  },
4633  destroy: function () {
4634    this.ElementCust.eliminate(this.property);
4635    this.disable();
4636    if (this.text) {
4637      this.text.destroy();
4638    }
4639    if (this.textHolder) {
4640      this.textHolder.destroy();
4641    }
4642    return this;
4643  },
4644  disable: function () {
4645    this.ElementCust.removeEvents({
4646      focus: this.focus,
4647      blur: this.assert,
4648      change: this.assert,
4649    });
4650    window.removeEvent("resize", this.reposition);
4651    this.hide(true, true);
4652    return this;
4653  },
4654  enable: function () {
4655    this.ElementCust.addEvents({
4656      focus: this.focus,
4657      blur: this.assert,
4658      change: this.assert,
4659    });
4660    window.addEvent("resize", this.reposition);
4661    this.reposition();
4662    return this;
4663  },
4664  wrap: function () {
4665    if (this.options.ElementCust == "label") {
4666      if (!this.ElementCust.get("id")) {
4667        this.ElementCust.set("id", "input_" + String.uniqueID());
4668      }
4669      this.text.set("for", this.ElementCust.get("id"));
4670    }
4671  },
4672  startPolling: function () {
4673    this.pollingPaused = false;
4674    return this.poll();
4675  },
4676  poll: function (a) {
4677    if (this.poller && !a) {
4678      return this;
4679    }
4680    if (a) {
4681      clearInterval(this.poller);
4682    } else {
4683      this.poller = function () {
4684        if (!this.pollingPaused) {
4685          this.assert(true);
4686        }
4687      }.periodical(this.options.pollInterval, this);
4688    }
4689    return this;
4690  },
4691  stopPolling: function () {
4692    this.pollingPaused = true;
4693    return this.poll(true);
4694  },
4695  focus: function () {
4696    if (
4697      this.text &&
4698      (!this.text.isDisplayed() || this.ElementCust.get("disabled"))
4699    ) {
4700      return this;
4701    }
4702    return this.hide();
4703  },
4704  hide: function (c, a) {
4705    if (
4706      this.text &&
4707      this.text.isDisplayed() &&
4708      (!this.ElementCust.get("disabled") || a)
4709    ) {
4710      this.text.hide();
4711      this.fireEvent("textHide", [this.text, this.ElementCust]);
4712      this.pollingPaused = true;
4713      if (!c) {
4714        try {
4715          this.ElementCust.fireEvent("focus");
4716          this.ElementCust.focus();
4717        } catch (b) {}
4718      }
4719    }
4720    return this;
4721  },
4722  show: function () {
4723    if (this.text && !this.text.isDisplayed()) {
4724      this.text.show();
4725      this.reposition();
4726      this.fireEvent("textShow", [this.text, this.ElementCust]);
4727      this.pollingPaused = false;
4728    }
4729    return this;
4730  },
4731  test: function () {
4732    return !this.ElementCust.get("value");
4733  },
4734  assert: function (a) {
4735    return this[this.test() ? "show" : "hide"](a);
4736  },
4737  reposition: function () {
4738    this.assert(true);
4739    if (!this.ElementCust.isVisible()) {
4740      return this.stopPolling().hide();
4741    }
4742    if (this.text && this.test()) {
4743      this.text.position(
4744        Object.merge(this.options.positionOptions, { relativeTo: this.ElementCust })
4745      );
4746    }
4747    return this;
4748  },
4749});
4750OverText.instances = [];
4751Object.append(OverText, {
4752  each: function (a) {
4753    return OverText.instances.each(function (c, b) {
4754      if (c.ElementCust && c.text) {
4755        a.call(OverText, c, b);
4756      }
4757    });
4758  },
4759  update: function () {
4760    return OverText.each(function (a) {
4761      return a.reposition();
4762    });
4763  },
4764  hideAll: function () {
4765    return OverText.each(function (a) {
4766      return a.hide(true, true);
4767    });
4768  },
4769  showAll: function () {
4770    return OverText.each(function (a) {
4771      return a.show();
4772    });
4773  },
4774});
4775Fx.Elements = new Class({
4776  Extends: Fx.CSS,
4777  initialize: function (b, a) {
4778    this.elements = this.subject = $$(b);
4779    this.parent(a);
4780  },
4781  compute: function (g, h, j) {
4782    var c = {};
4783    for (var d in g) {
4784      var a = g[d],
4785        e = h[d],
4786        f = (c[d] = {});
4787      for (var b in a) {
4788        f[b] = this.parent(a[b], e[b], j);
4789      }
4790    }
4791    return c;
4792  },
4793  set: function (b) {
4794    for (var c in b) {
4795      if (!this.elements[c]) {
4796        continue;
4797      }
4798      var a = b[c];
4799      for (var d in a) {
4800        this.render(this.elements[c], d, a[d], this.options.unit);
4801      }
4802    }
4803    return this;
4804  },
4805  start: function (c) {
4806    if (!this.check(c)) {
4807      return this;
4808    }
4809    var h = {},
4810      j = {};
4811    for (var d in c) {
4812      if (!this.elements[d]) {
4813        continue;
4814      }
4815      var f = c[d],
4816        a = (h[d] = {}),
4817        g = (j[d] = {});
4818      for (var b in f) {
4819        var e = this.prepare(this.elements[d], b, f[b]);
4820        a[b] = e.from;
4821        g[b] = e.to;
4822      }
4823    }
4824    return this.parent(h, j);
4825  },
4826});
4827Fx.Accordion = new Class({
4828  Extends: Fx.Elements,
4829  options: {
4830    fixedHeight: false,
4831    fixedWidth: false,
4832    display: 0,
4833    show: false,
4834    height: true,
4835    width: false,
4836    opacity: true,
4837    alwaysHide: false,
4838    trigger: "click",
4839    initialDisplayFx: true,
4840    resetHeight: true,
4841  },
4842  initialize: function () {
4843    var g = function (h) {
4844      return h != null;
4845    };
4846    var f = Array.link(arguments, {
4847      container: Type.isElement,
4848      options: Type.isObject,
4849      togglers: g,
4850      elements: g,
4851    });
4852    this.parent(f.elements, f.options);
4853    var b = this.options,
4854      e = (this.togglers = $$(f.togglers));
4855    this.previous = -1;
4856    this.internalChain = new Chain();
4857    if (b.alwaysHide) {
4858      this.options.link = "chain";
4859    }
4860    if (b.show || this.options.show === 0) {
4861      b.display = false;
4862      this.previous = b.show;
4863    }
4864    if (b.start) {
4865      b.display = false;
4866      b.show = false;
4867    }
4868    var d = (this.effects = {});
4869    if (b.opacity) {
4870      d.opacity = "fullOpacity";
4871    }
4872    if (b.width) {
4873      d.width = b.fixedWidth ? "fullWidth" : "offsetWidth";
4874    }
4875    if (b.height) {
4876      d.height = b.fixedHeight ? "fullHeight" : "scrollHeight";
4877    }
4878    for (var c = 0, a = e.length; c < a; c++) {
4879      this.addSection(e[c], this.elements[c]);
4880    }
4881    this.elements.each(function (j, h) {
4882      if (b.show === h) {
4883        this.fireEvent("active", [e[h], j]);
4884      } else {
4885        for (var k in d) {
4886          j.setStyle(k, 0);
4887        }
4888      }
4889    }, this);
4890    if (b.display || b.display === 0 || b.initialDisplayFx === false) {
4891      this.display(b.display, b.initialDisplayFx);
4892    }
4893    if (b.fixedHeight !== false) {
4894      b.resetHeight = false;
4895    }
4896    this.addEvent(
4897      "complete",
4898      this.internalChain.callChain.bind(this.internalChain)
4899    );
4900  },
4901  addSection: function (g, d) {
4902    g = document.id(g);
4903    d = document.id(d);
4904    this.togglers.include(g);
4905    this.elements.include(d);
4906    var f = this.togglers,
4907      c = this.options,
4908      h = f.contains(g),
4909      a = f.indexOf(g),
4910      b = this.display.pass(a, this);
4911    g.store("accordion:display", b).addEvent(c.trigger, b);
4912    if (c.height) {
4913      d.setStyles({
4914        "padding-top": 0,
4915        "border-top": "none",
4916        "padding-bottom": 0,
4917        "border-bottom": "none",
4918      });
4919    }
4920    if (c.width) {
4921      d.setStyles({
4922        "padding-left": 0,
4923        "border-left": "none",
4924        "padding-right": 0,
4925        "border-right": "none",
4926      });
4927    }
4928    d.fullOpacity = 1;
4929    if (c.fixedWidth) {
4930      d.fullWidth = c.fixedWidth;
4931    }
4932    if (c.fixedHeight) {
4933      d.fullHeight = c.fixedHeight;
4934    }
4935    d.setStyle("overflow", "hidden");
4936    if (!h) {
4937      for (var e in this.effects) {
4938        d.setStyle(e, 0);
4939      }
4940    }
4941    return this;
4942  },
4943  removeSection: function (f, b) {
4944    var e = this.togglers,
4945      a = e.indexOf(f),
4946      c = this.elements[a];
4947    var d = function () {
4948      e.erase(f);
4949      this.elements.erase(c);
4950      this.detach(f);
4951    }.bind(this);
4952    if (this.now == a || b != null) {
4953      this.display(b != null ? b : a - 1 >= 0 ? a - 1 : 0).chain(d);
4954    } else {
4955      d();
4956    }
4957    return this;
4958  },
4959  detach: function (b) {
4960    var a = function (c) {
4961      c.removeEvent(this.options.trigger, c.retrieve("accordion:display"));
4962    }.bind(this);
4963    if (!b) {
4964      this.togglers.each(a);
4965    } else {
4966      a(b);
4967    }
4968    return this;
4969  },
4970  display: function (b, c) {
4971    if (!this.check(b, c)) {
4972      return this;
4973    }
4974    var h = {},
4975      g = this.elements,
4976      a = this.options,
4977      f = this.effects;
4978    if (c == null) {
4979      c = true;
4980    }
4981    if (typeOf(b) == "ElementCust") {
4982      b = g.indexOf(b);
4983    }
4984    if (b == this.previous && !a.alwaysHide) {
4985      return this;
4986    }
4987    if (a.resetHeight) {
4988      var e = g[this.previous];
4989      if (e && !this.selfHidden) {
4990        for (var d in f) {
4991          e.setStyle(d, e[f[d]]);
4992        }
4993      }
4994    }
4995    if (
4996      (this.timer && a.link == "chain") ||
4997      (b === this.previous && !a.alwaysHide)
4998    ) {
4999      return this;
5000    }
5001    this.previous = b;
5002    this.selfHidden = false;
5003    g.each(function (l, k) {
5004      h[k] = {};
5005      var j;
5006      if (k != b) {
5007        j = true;
5008      } else {
5009        if (
5010          a.alwaysHide &&
5011          ((l.offsetHeight > 0 && a.height) || (l.offsetWidth > 0 && a.width))
5012        ) {
5013          j = true;
5014          this.selfHidden = true;
5015        }
5016      }
5017      this.fireEvent(j ? "background" : "active", [this.togglers[k], l]);
5018      for (var m in f) {
5019        h[k][m] = j ? 0 : l[f[m]];
5020      }
5021      if (!c && !j && a.resetHeight) {
5022        h[k].height = "auto";
5023      }
5024    }, this);
5025    this.internalChain.clearChain();
5026    this.internalChain.chain(
5027      function () {
5028        if (a.resetHeight && !this.selfHidden) {
5029          var i = g[b];
5030          if (i) {
5031            i.setStyle("height", "auto");
5032          }
5033        }
5034      }.bind(this)
5035    );
5036    return c ? this.start(h) : this.set(h).internalChain.callChain();
5037  },
5038});
5039Fx.Move = new Class({
5040  Extends: Fx.Morph,
5041  options: {
5042    relativeTo: document.body,
5043    position: "center",
5044    edge: false,
5045    offset: { x: 0, y: 0 },
5046  },
5047  start: function (a) {
5048    var b = this.ElementCust,
5049      c = b.getStyles("top", "left");
5050    if (c.top == "auto" || c.left == "auto") {
5051      b.setPosition(b.getPosition(b.getOffsetParent()));
5052    }
5053    return this.parent(
5054      b.position(Object.merge({}, this.options, a, { returnPos: true }))
5055    );
5056  },
5057});
5058ElementCust.Properties.move = {
5059  set: function (a) {
5060    this.get("move").cancel().setOptions(a);
5061    return this;
5062  },
5063  get: function () {
5064    var a = this.retrieve("move");
5065    if (!a) {
5066      a = new Fx.Move(this, { link: "cancel" });
5067      this.store("move", a);
5068    }
5069    return a;
5070  },
5071};
5072ElementCust.implement({
5073  move: function (a) {
5074    this.get("move").start(a);
5075    return this;
5076  },
5077});
5078(function () {
5079  Fx.Scroll = new Class({
5080    Extends: Fx,
5081    options: { offset: { x: 0, y: 0 }, wheelStops: true },
5082    initialize: function (c, b) {
5083      this.ElementCust = this.subject = document.id(c);
5084      this.parent(b);
5085      if (typeOf(this.ElementCust) != "ElementCust") {
5086        this.ElementCust = document.id(this.ElementCust.getDocument().body);
5087      }
5088      if (this.options.wheelStops) {
5089        var d = this.ElementCust,
5090          e = this.cancel.pass(false, this);
5091        this.addEvent(
5092          "start",
5093          function () {
5094            d.addEvent("mousewheel", e);
5095          },
5096          true
5097        );
5098        this.addEvent(
5099          "complete",
5100          function () {
5101            d.removeEvent("mousewheel", e);
5102          },
5103          true
5104        );
5105      }
5106    },
5107    set: function () {
5108      var b = Array.flatten(arguments);
5109      if (Browser.firefox) {
5110        b = [Math.round(b[0]), Math.round(b[1])];
5111      }
5112      this.ElementCust.scrollTo(b[0], b[1]);
5113      return this;
5114    },
5115    compute: function (d, c, b) {
5116      return [0, 1].map(function (e) {
5117        return Fx.compute(d[e], c[e], b);
5118      });
5119    },
5120    start: function (c, d) {
5121      if (!this.check(c, d)) {
5122        return this;
5123      }
5124      var b = this.ElementCust.getScroll();
5125      return this.parent([b.x, b.y], [c, d]);
5126    },
5127    calculateScroll: function (g, f) {
5128      var d = this.ElementCust,
5129        b = d.getScrollSize(),
5130        h = d.getScroll(),
5131        j = d.getSize(),
5132        c = this.options.offset,
5133        i = { x: g, y: f };
5134      for (var e in i) {
5135        if (!i[e] && i[e] !== 0) {
5136          i[e] = h[e];
5137        }
5138        if (typeOf(i[e]) != "number") {
5139          i[e] = b[e] - j[e];
5140        }
5141        i[e] += c[e];
5142      }
5143      return [i.x, i.y];
5144    },
5145    toTop: function () {
5146      return this.start.apply(this, this.calculateScroll(false, 0));
5147    },
5148    toLeft: function () {
5149      return this.start.apply(this, this.calculateScroll(0, false));
5150    },
5151    toRight: function () {
5152      return this.start.apply(this, this.calculateScroll("right", false));
5153    },
5154    toBottom: function () {
5155      return this.start.apply(this, this.calculateScroll(false, "bottom"));
5156    },
5157    toElement: function (d, e) {
5158      e = e ? Array.from(e) : ["x", "y"];
5159      var c = a(this.ElementCust) ? { x: 0, y: 0 } : this.ElementCust.getScroll();
5160      var b = Object.map(
5161        document.id(d).getPosition(this.ElementCust),
5162        function (g, f) {
5163          return e.contains(f) ? g + c[f] : false;
5164        }
5165      );
5166      return this.start.apply(this, this.calculateScroll(b.x, b.y));
5167    },
5168    toElementEdge: function (d, g, e) {
5169      g = g ? Array.from(g) : ["x", "y"];
5170      d = document.id(d);
5171      var i = {},
5172        f = d.getPosition(this.ElementCust),
5173        j = d.getSize(),
5174        h = this.ElementCust.getScroll(),
5175        b = this.ElementCust.getSize(),
5176        c = { x: f.x + j.x, y: f.y + j.y };
5177      ["x", "y"].each(function (k) {
5178        if (g.contains(k)) {
5179          if (c[k] > h[k] + b[k]) {
5180            i[k] = c[k] - b[k];
5181          }
5182          if (f[k] < h[k]) {
5183            i[k] = f[k];
5184          }
5185        }
5186        if (i[k] == null) {
5187          i[k] = h[k];
5188        }
5189        if (e && e[k]) {
5190          i[k] = i[k] + e[k];
5191        }
5192      }, this);
5193      if (i.x != h.x || i.y != h.y) {
5194        this.start(i.x, i.y);
5195      }
5196      return this;
5197    },
5198    toElementCenter: function (e, f, h) {
5199      f = f ? Array.from(f) : ["x", "y"];
5200      e = document.id(e);
5201      var i = {},
5202        c = e.getPosition(this.ElementCust),
5203        d = e.getSize(),
5204        b = this.ElementCust.getScroll(),
5205        g = this.ElementCust.getSize();
5206      ["x", "y"].each(function (j) {
5207        if (f.contains(j)) {
5208          i[j] = c[j] - (g[j] - d[j]) / 2;
5209        }
5210        if (i[j] == null) {
5211          i[j] = b[j];
5212        }
5213        if (h && h[j]) {
5214          i[j] = i[j] + h[j];
5215        }
5216      }, this);
5217      if (i.x != b.x || i.y != b.y) {
5218        this.start(i.x, i.y);
5219      }
5220      return this;
5221    },
5222  });
5223  function a(b) {
5224    return /^(?:body|html)$/i.test(b.tagName);
5225  }
5226})();
5227Fx.Slide = new Class({
5228  Extends: Fx,
5229  options: {
5230    mode: "vertical",
5231    wrapper: false,
5232    hideOverflow: true,
5233    resetHeight: false,
5234  },
5235  initialize: function (b, a) {
5236    b = this.ElementCust = this.subject = document.id(b);
5237    this.parent(a);
5238    a = this.options;
5239    var d = b.retrieve("wrapper"),
5240      c = b.getStyles("margin", "position", "overflow");
5241    if (a.hideOverflow) {
5242      c = Object.append(c, { overflow: "hidden" });
5243    }
5244    if (a.wrapper) {
5245      d = document.id(a.wrapper).setStyles(c);
5246    }
5247    if (!d) {
5248      d = new ElementCust("div", { styles: c }).wraps(b);
5249    }
5250    b.store("wrapper", d).setStyle("margin", 0);
5251    if (b.getStyle("overflow") == "visible") {
5252      b.setStyle("overflow", "hidden");
5253    }
5254    this.now = [];
5255    this.open = true;
5256    this.wrapper = d;
5257    this.addEvent(
5258      "complete",
5259      function () {
5260        this.open = d["offset" + this.layout.capitalize()] != 0;
5261        if (this.open && this.options.resetHeight) {
5262          d.setStyle("height", "");
5263        }
5264      },
5265      true
5266    );
5267  },
5268  vertical: function () {
5269    this.margin = "margin-top";
5270    this.layout = "height";
5271    this.offset = this.ElementCust.offsetHeight;
5272  },
5273  horizontal: function () {
5274    this.margin = "margin-left";
5275    this.layout = "width";
5276    this.offset = this.ElementCust.offsetWidth;
5277  },
5278  set: function (a) {
5279    this.ElementCust.setStyle(this.margin, a[0]);
5280    this.wrapper.setStyle(this.layout, a[1]);
5281    return this;
5282  },
5283  compute: function (c, b, a) {
5284    return [0, 1].map(function (d) {
5285      return Fx.compute(c[d], b[d], a);
5286    });
5287  },
5288  start: function (b, e) {
5289    if (!this.check(b, e)) {
5290      return this;
5291    }
5292    this[e || this.options.mode]();
5293    var d = this.ElementCust.getStyle(this.margin).toInt(),
5294      c = this.wrapper.getStyle(this.layout).toInt(),
5295      a = [
5296        [d, c],
5297        [0, this.offset],
5298      ],
5299      g = [
5300        [d, c],
5301        [-this.offset, 0],
5302      ],
5303      f;
5304    switch (b) {
5305      case "in":
5306        f = a;
5307        break;
5308      case "out":
5309        f = g;
5310        break;
5311      case "toggle":
5312        f = c == 0 ? a : g;
5313    }
5314    return this.parent(f[0], f[1]);
5315  },
5316  slideIn: function (a) {
5317    return this.start("in", a);
5318  },
5319  slideOut: function (a) {
5320    return this.start("out", a);
5321  },
5322  hide: function (a) {
5323    this[a || this.options.mode]();
5324    this.open = false;
5325    return this.set([-this.offset, 0]);
5326  },
5327  show: function (a) {
5328    this[a || this.options.mode]();
5329    this.open = true;
5330    return this.set([0, this.offset]);
5331  },
5332  toggle: function (a) {
5333    return this.start("toggle", a);
5334  },
5335});
5336ElementCust.Properties.slide = {
5337  set: function (a) {
5338    this.get("slide").cancel().setOptions(a);
5339    return this;
5340  },
5341  get: function () {
5342    var a = this.retrieve("slide");
5343    if (!a) {
5344      a = new Fx.Slide(this, { link: "cancel" });
5345      this.store("slide", a);
5346    }
5347    return a;
5348  },
5349};
5350ElementCust.implement({
5351  slide: function (d, e) {
5352    d = d || "toggle";
5353    var b = this.get("slide"),
5354      a;
5355    switch (d) {
5356      case "hide":
5357        b.hide(e);
5358        break;
5359      case "show":
5360        b.show(e);
5361        break;
5362      case "toggle":
5363        var c = this.retrieve("slide:flag", b.open);
5364        b[c ? "slideOut" : "slideIn"](e);
5365        this.store("slide:flag", !c);
5366        a = true;
5367        break;
5368      default:
5369        b.start(d, e);
5370    }
5371    if (!a) {
5372      this.eliminate("slide:flag");
5373    }
5374    return this;
5375  },
5376});
5377Fx.SmoothScroll = new Class({
5378  Extends: Fx.Scroll,
5379  options: { axes: ["x", "y"] },
5380  initialize: function (c, d) {
5381    d = d || document;
5382    this.doc = d.getDocument();
5383    this.parent(this.doc, c);
5384    var e = d.getWindow(),
5385      a = e.location.href.match(/^[^#]*/)[0] + "#",
5386      b = $$(this.options.links || this.doc.links);
5387    b.each(function (g) {
5388      if (g.href.indexOf(a) != 0) {
5389        return;
5390      }
5391      var f = g.href.substr(a.length);
5392      if (f) {
5393        this.useLink(g, f);
5394      }
5395    }, this);
5396    this.addEvent(
5397      "complete",
5398      function () {
5399        e.location.hash = this.anchor;
5400        this.ElementCust.scrollTo(this.to[0], this.to[1]);
5401      },
5402      true
5403    );
5404  },
5405  useLink: function (b, a) {
5406    b.addEvent(
5407      "click",
5408      function (d) {
5409        var c = document.id(a) || this.doc.getElement("a[name=" + a + "]");
5410        if (!c) {
5411          return;
5412        }
5413        d.preventDefault();
5414        this.toElement(c, this.options.axes).chain(
5415          function () {
5416            this.fireEvent("scrolledTo", [b, c]);
5417          }.bind(this)
5418        );
5419        this.anchor = a;
5420      }.bind(this)
5421    );
5422    return this;
5423  },
5424});
5425Fx.Sort = new Class({
5426  Extends: Fx.Elements,
5427  options: { mode: "vertical" },
5428  initialize: function (b, a) {
5429    this.parent(b, a);
5430    this.elements.each(function (c) {
5431      if (c.getStyle("position") == "static") {
5432        c.setStyle("position", "relative");
5433      }
5434    });
5435    this.setDefaultOrder();
5436  },
5437  setDefaultOrder: function () {
5438    this.currentOrder = this.elements.map(function (b, a) {
5439      return a;
5440    });
5441  },
5442  sort: function () {
5443    if (!this.check(arguments)) {
5444      return this;
5445    }
5446    var e = Array.flatten(arguments);
5447    var i = 0,
5448      a = 0,
5449      c = {},
5450      h = {},
5451      d = this.options.mode == "vertical";
5452    var f = this.elements.map(function (m, k) {
5453      var l = m.getComputedSize({ styles: ["border", "padding", "margin"] });
5454      var n;
5455      if (d) {
5456        n = { top: i, margin: l["margin-top"], height: l.totalHeight };
5457        i += n.height - l["margin-top"];
5458      } else {
5459        n = { left: a, margin: l["margin-left"], width: l.totalWidth };
5460        a += n.width;
5461      }
5462      var j = d ? "top" : "left";
5463      h[k] = {};
5464      var o = m.getStyle(j).toInt();
5465      h[k][j] = o || 0;
5466      return n;
5467    }, this);
5468    this.set(h);
5469    e = e.map(function (j) {
5470      return j.toInt();
5471    });
5472    if (e.length != this.elements.length) {
5473      this.currentOrder.each(function (j) {
5474        if (!e.contains(j)) {
5475          e.push(j);
5476        }
5477      });
5478      if (e.length > this.elements.length) {
5479        e.splice(this.elements.length - 1, e.length - this.elements.length);
5480      }
5481    }
5482    var b = 0;
5483    i = a = 0;
5484    e.each(function (k) {
5485      var j = {};
5486      if (d) {
5487        j.top = i - f[k].top - b;
5488        i += f[k].height;
5489      } else {
5490        j.left = a - f[k].left;
5491        a += f[k].width;
5492      }
5493      b = b + f[k].margin;
5494      c[k] = j;
5495    }, this);
5496    var g = {};
5497    Array.clone(e)
5498      .sort()
5499      .each(function (j) {
5500        g[j] = c[j];
5501      });
5502    this.start(g);
5503    this.currentOrder = e;
5504    return this;
5505  },
5506  rearrangeDOM: function (a) {
5507    a = a || this.currentOrder;
5508    var b = this.elements[0].getParent();
5509    var c = [];
5510    this.elements.setStyle("opacity", 0);
5511    a.each(function (d) {
5512      c.push(this.elements[d].inject(b).setStyles({ top: 0, left: 0 }));
5513    }, this);
5514    this.elements.setStyle("opacity", 1);
5515    this.elements = $$(c);
5516    this.setDefaultOrder();
5517    return this;
5518  },
5519  getDefaultOrder: function () {
5520    return this.elements.map(function (b, a) {
5521      return a;
5522    });
5523  },
5524  getCurrentOrder: function () {
5525    return this.currentOrder;
5526  },
5527  forward: function () {
5528    return this.sort(this.getDefaultOrder());
5529  },
5530  backward: function () {
5531    return this.sort(this.getDefaultOrder().reverse());
5532  },
5533  reverse: function () {
5534    return this.sort(this.currentOrder.reverse());
5535  },
5536  sortByElements: function (a) {
5537    return this.sort(
5538      a.map(function (b) {
5539        return this.elements.indexOf(b);
5540      }, this)
5541    );
5542  },
5543  swap: function (c, b) {
5544    if (typeOf(c) == "ElementCust") {
5545      c = this.elements.indexOf(c);
5546    }
5547    if (typeOf(b) == "ElementCust") {
5548      b = this.elements.indexOf(b);
5549    }
5550    var a = Array.clone(this.currentOrder);
5551    a[this.currentOrder.indexOf(c)] = b;
5552    a[this.currentOrder.indexOf(b)] = c;
5553    return this.sort(a);
5554  },
5555});
5556var Drag = new Class({
5557  Implements: [Events, Options],
5558  options: {
5559    snap: 6,
5560    unit: "px",
5561    grid: false,
5562    style: true,
5563    limit: false,
5564    handle: false,
5565    invert: false,
5566    preventDefault: false,
5567    stopPropagation: false,
5568    modifiers: { x: "left", y: "top" },
5569  },
5570  initialize: function () {
5571    var b = Array.link(arguments, {
5572      options: Type.isObject,
5573      ElementCust: function (c) {
5574        return c != null;
5575      },
5576    });
5577    this.ElementCust = document.id(b.ElementCust);
5578    this.document = this.ElementCust.getDocument();
5579    this.setOptions(b.options || {});
5580    var a = typeOf(this.options.handle);
5581    this.handles =
5582      (a == "array" || a == "collection"
5583        ? $$(this.options.handle)
5584        : document.id(this.options.handle)) || this.ElementCust;
5585    this.mouse = { now: {}, pos: {} };
5586    this.value = { start: {}, now: {} };
5587    this.selection = Browser.ie ? "selectstart" : "mousedown";
5588    if (Browser.ie && !Drag.ondragstartFixed) {
5589      document.ondragstart = Function.from(false);
5590      Drag.ondragstartFixed = true;
5591    }
5592    this.bound = {
5593      start: this.start.bind(this),
5594      check: this.check.bind(this),
5595      drag: this.drag.bind(this),
5596      stop: this.stop.bind(this),
5597      cancel: this.cancel.bind(this),
5598      eventStop: Function.from(false),
5599    };
5600    this.attach();
5601  },
5602  attach: function () {
5603    this.handles.addEvent("mousedown", this.bound.start);
5604    return this;
5605  },
5606  detach: function () {
5607    this.handles.removeEvent("mousedown", this.bound.start);
5608    return this;
5609  },
5610  start: function (a) {
5611    var j = this.options;
5612    if (a.rightClick) {
5613      return;
5614    }
5615    if (j.preventDefault) {
5616      a.preventDefault();
5617    }
5618    if (j.stopPropagation) {
5619      a.stopPropagation();
5620    }
5621    this.mouse.start = a.page;
5622    this.fireEvent("beforeStart", this.ElementCust);
5623    var c = j.limit;
5624    this.limit = { x: [], y: [] };
5625    var e, g;
5626    for (e in j.modifiers) {
5627      if (!j.modifiers[e]) {
5628        continue;
5629      }
5630      var b = this.ElementCust.getStyle(j.modifiers[e]);
5631      if (b && !b.match(/px$/)) {
5632        if (!g) {
5633          g = this.ElementCust.getCoordinates(this.ElementCust.getOffsetParent());
5634        }
5635        b = g[j.modifiers[e]];
5636      }
5637      if (j.style) {
5638        this.value.now[e] = (b || 0).toInt();
5639      } else {
5640        this.value.now[e] = this.ElementCust[j.modifiers[e]];
5641      }
5642      if (j.invert) {
5643        this.value.now[e] *= -1;
5644      }
5645      this.mouse.pos[e] = a.page[e] - this.value.now[e];
5646      if (c && c[e]) {
5647        var d = 2;
5648        while (d--) {
5649          var f = c[e][d];
5650          if (f || f === 0) {
5651            this.limit[e][d] = typeof f == "function" ? f() : f;
5652          }
5653        }
5654      }
5655    }
5656    if (typeOf(this.options.grid) == "number") {
5657      this.options.grid = { x: this.options.grid, y: this.options.grid };
5658    }
5659    var h = { mousemove: this.bound.check, mouseup: this.bound.cancel };
5660    h[this.selection] = this.bound.eventStop;
5661    this.document.addEvents(h);
5662  },
5663  check: function (a) {
5664    if (this.options.preventDefault) {
5665      a.preventDefault();
5666    }
5667    var b = Math.round(
5668      Math.sqrt(
5669        Math.pow(a.page.x - this.mouse.start.x, 2) +
5670          Math.pow(a.page.y - this.mouse.start.y, 2)
5671      )
5672    );
5673    if (b > this.options.snap) {
5674      this.cancel();
5675      this.document.addEvents({
5676        mousemove: this.bound.drag,
5677        mouseup: this.bound.stop,
5678      });
5679      this.fireEvent("start", [this.ElementCust, a]).fireEvent(
5680        "snap",
5681        this.ElementCust
5682      );
5683    }
5684  },
5685  drag: function (b) {
5686    var a = this.options;
5687    if (a.preventDefault) {
5688      b.preventDefault();
5689    }
5690    this.mouse.now = b.page;
5691    for (var c in a.modifiers) {
5692      if (!a.modifiers[c]) {
5693        continue;
5694      }
5695      this.value.now[c] = this.mouse.now[c] - this.mouse.pos[c];
5696      if (a.invert) {
5697        this.value.now[c] *= -1;
5698      }
5699      if (a.limit && this.limit[c]) {
5700        if (
5701          (this.limit[c][1] || this.limit[c][1] === 0) &&
5702          this.value.now[c] > this.limit[c][1]
5703        ) {
5704          this.value.now[c] = this.limit[c][1];
5705        } else {
5706          if (
5707            (this.limit[c][0] || this.limit[c][0] === 0) &&
5708            this.value.now[c] < this.limit[c][0]
5709          ) {
5710            this.value.now[c] = this.limit[c][0];
5711          }
5712        }
5713      }
5714      if (a.grid[c]) {
5715        this.value.now[c] -=
5716          (this.value.now[c] - (this.limit[c][0] || 0)) % a.grid[c];
5717      }
5718      if (a.style) {
5719        this.ElementCust.setStyle(a.modifiers[c], this.value.now[c] + a.unit);
5720      } else {
5721        this.ElementCust[a.modifiers[c]] = this.value.now[c];
5722      }
5723    }
5724    this.fireEvent("drag", [this.ElementCust, b]);
5725  },
5726  cancel: function (a) {
5727    this.document.removeEvents({
5728      mousemove: this.bound.check,
5729      mouseup: this.bound.cancel,
5730    });
5731    if (a) {
5732      this.document.removeEvent(this.selection, this.bound.eventStop);
5733      this.fireEvent("cancel", this.ElementCust);
5734    }
5735  },
5736  stop: function (b) {
5737    var a = { mousemove: this.bound.drag, mouseup: this.bound.stop };
5738    a[this.selection] = this.bound.eventStop;
5739    this.document.removeEvents(a);
5740    if (b) {
5741      this.fireEvent("complete", [this.ElementCust, b]);
5742    }
5743  },
5744});
5745ElementCust.implement({
5746  makeResizable: function (a) {
5747    var b = new Drag(
5748      this,
5749      Object.merge({ modifiers: { x: "width", y: "height" } }, a)
5750    );
5751    this.store("resizer", b);
5752    return b.addEvent(
5753      "drag",
5754      function () {
5755        this.fireEvent("resize", b);
5756      }.bind(this)
5757    );
5758  },
5759});
5760Drag.Move = new Class({
5761  Extends: Drag,
5762  options: {
5763    droppables: [],
5764    container: false,
5765    precalculate: false,
5766    includeMargins: true,
5767    checkDroppables: true,
5768  },
5769  initialize: function (b, a) {
5770    this.parent(b, a);
5771    b = this.ElementCust;
5772    this.droppables = $$(this.options.droppables);
5773    this.container = document.id(this.options.container);
5774    if (this.container && typeOf(this.container) != "ElementCust") {
5775      this.container = document.id(this.container.getDocument().body);
5776    }
5777    if (this.options.style) {
5778      if (
5779        this.options.modifiers.x == "left" &&
5780        this.options.modifiers.y == "top"
5781      ) {
5782        var c = b.getOffsetParent(),
5783          d = b.getStyles("left", "top");
5784        if (c && (d.left == "auto" || d.top == "auto")) {
5785          b.setPosition(b.getPosition(c));
5786        }
5787      }
5788      if (b.getStyle("position") == "static") {
5789        b.setStyle("position", "absolute");
5790      }
5791    }
5792    this.addEvent("start", this.checkDroppables, true);
5793    this.overed = null;
5794  },
5795  start: function (a) {
5796    if (this.container) {
5797      this.options.limit = this.calculateLimit();
5798    }
5799    if (this.options.precalculate) {
5800      this.positions = this.droppables.map(function (b) {
5801        return b.getCoordinates();
5802      });
5803    }
5804    this.parent(a);
5805  },
5806  calculateLimit: function () {
5807    var j = this.ElementCust,
5808      e = this.container,
5809      d = document.id(j.getOffsetParent()) || document.body,
5810      h = e.getCoordinates(d),
5811      c = {},
5812      b = {},
5813      k = {},
5814      g = {},
5815      m = {};
5816    ["top", "right", "bottom", "left"].each(function (q) {
5817      c[q] = j.getStyle("margin-" + q).toInt();
5818      b[q] = j.getStyle("border-" + q).toInt();
5819      k[q] = e.getStyle("margin-" + q).toInt();
5820      g[q] = e.getStyle("border-" + q).toInt();
5821      m[q] = d.getStyle("padding-" + q).toInt();
5822    }, this);
5823    var f = j.offsetWidth + c.left + c.right,
5824      p = j.offsetHeight + c.top + c.bottom,
5825      i = 0,
5826      l = 0,
5827      o = h.right - g.right - f,
5828      a = h.bottom - g.bottom - p;
5829    if (this.options.includeMargins) {
5830      i += c.left;
5831      l += c.top;
5832    } else {
5833      o += c.right;
5834      a += c.bottom;
5835    }
5836    if (j.getStyle("position") == "relative") {
5837      var n = j.getCoordinates(d);
5838      n.left -= j.getStyle("left").toInt();
5839      n.top -= j.getStyle("top").toInt();
5840      i -= n.left;
5841      l -= n.top;
5842      if (e.getStyle("position") != "relative") {
5843        i += g.left;
5844        l += g.top;
5845      }
5846      o += c.left - n.left;
5847      a += c.top - n.top;
5848      if (e != d) {
5849        i += k.left + m.left;
5850        l += (Browser.ie6 || Browser.ie7 ? 0 : k.top) + m.top;
5851      }
5852    } else {
5853      i -= c.left;
5854      l -= c.top;
5855      if (e != d) {
5856        i += h.left + g.left;
5857        l += h.top + g.top;
5858      }
5859    }
5860    return { x: [i, o], y: [l, a] };
5861  },
5862  getDroppableCoordinates: function (c) {
5863    var b = c.getCoordinates();
5864    if (c.getStyle("position") == "fixed") {
5865      var a = window.getScroll();
5866      b.left += a.x;
5867      b.right += a.x;
5868      b.top += a.y;
5869      b.bottom += a.y;
5870    }
5871    return b;
5872  },
5873  checkDroppables: function () {
5874    var a = this.droppables
5875      .filter(function (d, c) {
5876        d = this.positions
5877          ? this.positions[c]
5878          : this.getDroppableCoordinates(d);
5879        var b = this.mouse.now;
5880        return b.x > d.left && b.x < d.right && b.y < d.bottom && b.y > d.top;
5881      }, this)
5882      .getLast();
5883    if (this.overed != a) {
5884      if (this.overed) {
5885        this.fireEvent("leave", [this.ElementCust, this.overed]);
5886      }
5887      if (a) {
5888        this.fireEvent("enter", [this.ElementCust, a]);
5889      }
5890      this.overed = a;
5891    }
5892  },
5893  drag: function (a) {
5894    this.parent(a);
5895    if (this.options.checkDroppables && this.droppables.length) {
5896      this.checkDroppables();
5897    }
5898  },
5899  stop: function (a) {
5900    this.checkDroppables();
5901    this.fireEvent("drop", [this.ElementCust, this.overed, a]);
5902    this.overed = null;
5903    return this.parent(a);
5904  },
5905});
5906ElementCust.implement({
5907  makeDraggable: function (a) {
5908    var b = new Drag.Move(this, a);
5909    this.store("dragger", b);
5910    return b;
5911  },
5912});
5913var Slider = new Class({
5914  Implements: [Events, Options],
5915  Binds: ["clickedElement", "draggedKnob", "scrolledElement"],
5916  options: {
5917    onTick: function (a) {
5918      this.setKnobPosition(a);
5919    },
5920    initialStep: 0,
5921    snap: false,
5922    offset: 0,
5923    range: false,
5924    wheel: false,
5925    steps: 100,
5926    mode: "horizontal",
5927  },
5928  initialize: function (f, a, e) {
5929    this.setOptions(e);
5930    e = this.options;
5931    this.ElementCust = document.id(f);
5932    a = this.knob = document.id(a);
5933    this.previousChange = this.previousEnd = this.step = -1;
5934    var b = {},
5935      d = { x: false, y: false };
5936    switch (e.mode) {
5937      case "vertical":
5938        this.axis = "y";
5939        this.property = "top";
5940        this.offset = "offsetHeight";
5941        break;
5942      case "horizontal":
5943        this.axis = "x";
5944        this.property = "left";
5945        this.offset = "offsetWidth";
5946    }
5947    this.setSliderDimensions();
5948    this.setRange(e.range);
5949    if (a.getStyle("position") == "static")
5949 {
5950      a.setStyle("position", "relative");
5951    }
5952    a.setStyle(this.property, -e.offset);
5953    d[this.axis] = this.property;
5954    b[this.axis] = [-e.offset, this.full - e.offset];
5955    var c = {
5956      snap: 0,
5957      limit: b,
5958      modifiers: d,
5959      onDrag: this.draggedKnob,
5960      onStart: this.draggedKnob,
5961      onBeforeStart: function () {
5962        this.isDragging = true;
5963      }.bind(this),
5964      onCancel: function () {
5965        this.isDragging = false;
5966      }.bind(this),
5967      onComplete: function () {
5968        this.isDragging = false;
5969        this.draggedKnob();
5970        this.end();
5971      }.bind(this),
5972    };
5973    if (e.snap) {
5974      this.setSnap(c);
5975    }
5976    this.drag = new Drag(a, c);
5977    this.attach();
5978    if (e.initialStep != null) {
5979      this.set(e.initialStep);
5980    }
5981  },
5982  attach: function () {
5983    this.ElementCust.addEvent("mousedown", this.clickedElement);
5984    if (this.options.wheel) {
5985      this.ElementCust.addEvent("mousewheel", this.scrolledElement);
5986    }
5987    this.drag.attach();
5988    return this;
5989  },
5990  detach: function () {
5991    this.ElementCust
5992      .removeEvent("mousedown", this.clickedElement)
5993      .removeEvent("mousewheel", this.scrolledElement);
5994    this.drag.detach();
5995    return this;
5996  },
5997  autosize: function () {
5998    this.setSliderDimensions().setKnobPosition(this.toPosition(this.step));
5999    this.drag.options.limit[this.axis] = [
6000      -this.options.offset,
6001      this.full - this.options.offset,
6002    ];
6003    if (this.options.snap) {
6004      this.setSnap();
6005    }
6006    return this;
6007  },
6008  setSnap: function (a) {
6009    if (!a) {
6010      a = this.drag.options;
6011    }
6012    a.grid = Math.ceil(this.stepWidth);
6013    a.limit[this.axis][1] = this.full;
6014    return this;
6015  },
6016  setKnobPosition: function (a) {
6017    if (this.options.snap) {
6018      a = this.toPosition(this.step);
6019    }
6020    this.knob.setStyle(this.property, a);
6021    return this;
6022  },
6023  setSliderDimensions: function () {
6024    this.full = this.ElementCust.measure(
6025      function () {
6026        this.half = this.knob[this.offset] / 2;
6027        return (
6028          this.ElementCust[this.offset] -
6029          this.knob[this.offset] +
6030          this.options.offset * 2
6031        );
6032      }.bind(this)
6033    );
6034    return this;
6035  },
6036  set: function (a) {
6037    if (!((this.range > 0) ^ (a < this.min))) {
6038      a = this.min;
6039    }
6040    if (!((this.range > 0) ^ (a > this.max))) {
6041      a = this.max;
6042    }
6043    this.step = Math.round(a);
6044    return this.checkStep().fireEvent("tick", this.toPosition(this.step)).end();
6045  },
6046  setRange: function (a, b) {
6047    this.min = Array.pick([a[0], 0]);
6048    this.max = Array.pick([a[1], this.options.steps]);
6049    this.range = this.max - this.min;
6050    this.steps = this.options.steps || this.full;
6051    this.stepSize = Math.abs(this.range) / this.steps;
6052    this.stepWidth = (this.stepSize * this.full) / Math.abs(this.range);
6053    if (a) {
6054      this.set(Array.pick([b, this.step]).floor(this.min).max(this.max));
6055    }
6056    return this;
6057  },
6058  clickedElement: function (c) {
6059    if (this.isDragging || c.target == this.knob) {
6060      return;
6061    }
6062    var b = this.range < 0 ? -1 : 1,
6063      a = c.page[this.axis] - this.ElementCust.getPosition()[this.axis] - this.half;
6064    a = a.limit(-this.options.offset, this.full - this.options.offset);
6065    this.step = Math.round(this.min + b * this.toStep(a));
6066    this.checkStep().fireEvent("tick", a).end();
6067  },
6068  scrolledElement: function (a) {
6069    var b = this.options.mode == "horizontal" ? a.wheel < 0 : a.wheel > 0;
6070    this.set(this.step + (b ? -1 : 1) * this.stepSize);
6071    a.stop();
6072  },
6073  draggedKnob: function () {
6074    var b = this.range < 0 ? -1 : 1,
6075      a = this.drag.value.now[this.axis];
6076    a = a.limit(-this.options.offset, this.full - this.options.offset);
6077    this.step = Math.round(this.min + b * this.toStep(a));
6078    this.checkStep();
6079  },
6080  checkStep: function () {
6081    var a = this.step;
6082    if (this.previousChange != a) {
6083      this.previousChange = a;
6084      this.fireEvent("change", a);
6085    }
6086    return this;
6087  },
6088  end: function () {
6089    var a = this.step;
6090    if (this.previousEnd !== a) {
6091      this.previousEnd = a;
6092      this.fireEvent("complete", a + "");
6093    }
6094    return this;
6095  },
6096  toStep: function (a) {
6097    var b =
6098      (((a + this.options.offset) * this.stepSize) / this.full) * this.steps;
6099    return this.options.steps ? Math.round((b -= b % this.stepSize)) : b;
6100  },
6101  toPosition: function (a) {
6102    return (
6103      (this.full * Math.abs(this.min - a)) / (this.steps * this.stepSize) -
6104      this.options.offset
6105    );
6106  },
6107});
6108var Sortables = new Class({
6109  Implements: [Events, Options],
6110  options: {
6111    opacity: 1,
6112    clone: false,
6113    revert: false,
6114    handle: false,
6115    dragOptions: {},
6116  },
6117  initialize: function (a, b) {
6118    this.setOptions(b);
6119    this.elements = [];
6120    this.lists = [];
6121    this.idle = true;
6122    this.addLists($$(document.id(a) || a));
6123    if (!this.options.clone) {
6124      this.options.revert = false;
6125    }
6126    if (this.options.revert) {
6127      this.effect = new Fx.Morph(
6128        null,
6129        Object.merge({ duration: 250, link: "cancel" }, this.options.revert)
6130      );
6131    }
6132  },
6133  attach: function () {
6134    this.addLists(this.lists);
6135    return this;
6136  },
6137  detach: function () {
6138    this.lists = this.removeLists(this.lists);
6139    return this;
6140  },
6141  addItems: function () {
6142    Array.flatten(arguments).each(function (a) {
6143      this.elements.push(a);
6144      var b = a.retrieve(
6145        "sortables:start",
6146        function (c) {
6147          this.start.call(this, c, a);
6148        }.bind(this)
6149      );
6150      (this.options.handle
6151        ? a.getElement(this.options.handle) || a
6152        : a
6153      ).addEvent("mousedown", b);
6154    }, this);
6155    return this;
6156  },
6157  addLists: function () {
6158    Array.flatten(arguments).each(function (a) {
6159      this.lists.include(a);
6160      this.addItems(a.getChildren());
6161    }, this);
6162    return this;
6163  },
6164  removeItems: function () {
6165    return $$(
6166      Array.flatten(arguments).map(function (a) {
6167        this.elements.erase(a);
6168        var b = a.retrieve("sortables:start");
6169        (this.options.handle
6170          ? a.getElement(this.options.handle) || a
6171          : a
6172        ).removeEvent("mousedown", b);
6173        return a;
6174      }, this)
6175    );
6176  },
6177  removeLists: function () {
6178    return $$(
6179      Array.flatten(arguments).map(function (a) {
6180        this.lists.erase(a);
6181        this.removeItems(a.getChildren());
6182        return a;
6183      }, this)
6184    );
6185  },
6186  getClone: function (b, a) {
6187    if (!this.options.clone) {
6188      return new ElementCust(a.tagName).inject(document.body);
6189    }
6190    if (typeOf(this.options.clone) == "function") {
6191      return this.options.clone.call(this, b, a, this.list);
6192    }
6193    var c = a
6194      .clone(true)
6195      .setStyles({
6196        margin: 0,
6197        position: "absolute",
6198        visibility: "hidden",
6199        width: a.getStyle("width"),
6200      })
6201      .addEvent("mousedown", function (d) {
6202        a.fireEvent("mousedown", d);
6203      });
6204    if (c.get("html").test("radio")) {
6205      c.getElements("input[type=radio]").each(function (d, e) {
6206        d.set("name", "clone_" + e);
6207        if (d.get("checked")) {
6208          a.getElements("input[type=radio]")[e].set("checked", true);
6209        }
6210      });
6211    }
6212    return c.inject(this.list).setPosition(a.getPosition(a.getOffsetParent()));
6213  },
6214  getDroppables: function () {
6215    var a = this.list.getChildren().erase(this.clone).erase(this.ElementCust);
6216    if (!this.options.constrain) {
6217      a.append(this.lists).erase(this.list);
6218    }
6219    return a;
6220  },
6221  insert: function (c, b) {
6222    var a = "inside";
6223    if (this.lists.contains(b)) {
6224      this.list = b;
6225      this.drag.droppables = this.getDroppables();
6226    } else {
6227      a = this.ElementCust.getAllPrevious().contains(b) ? "before" : "after";
6228    }
6229    this.ElementCust.inject(b, a);
6230    this.fireEvent("sort", [this.ElementCust, this.clone]);
6231  },
6232  start: function (b, a) {
6233    if (
6234      !this.idle ||
6235      b.rightClick ||
6236      ["button", "input", "a", "textarea"].contains(b.target.get("tag"))
6237    ) {
6238      return;
6239    }
6240    this.idle = false;
6241    this.ElementCust = a;
6242    this.opacity = a.getStyle("opacity");
6243    this.list = a.getParent();
6244    this.clone = this.getClone(b, a);
6245    this.drag = new Drag.Move(
6246      this.clone,
6247      Object.merge(
6248        { droppables: this.getDroppables() },
6249        this.options.dragOptions
6250      )
6251    ).addEvents({
6252      onSnap: function () {
6253        b.stop();
6254        this.clone.setStyle("visibility", "visible");
6255        this.ElementCust.setStyle("opacity", this.options.opacity || 0);
6256        this.fireEvent("start", [this.ElementCust, this.clone]);
6257      }.bind(this),
6258      onEnter: this.insert.bind(this),
6259      onCancel: this.end.bind(this),
6260      onComplete: this.end.bind(this),
6261    });
6262    this.clone.inject(this.ElementCust, "before");
6263    this.drag.start(b);
6264  },
6265  end: function () {
6266    this.drag.detach();
6267    this.ElementCust.setStyle("opacity", this.opacity);
6268    if (this.effect) {
6269      var b = this.ElementCust.getStyles("width", "height"),
6270        d = this.clone,
6271        c = d.computePosition(
6272          this.ElementCust.getPosition(this.clone.getOffsetParent())
6273        );
6274      var a = function () {
6275        this.removeEvent("cancel", a);
6276        d.destroy();
6277      };
6278      this.effect.ElementCust = d;
6279      this.effect
6280        .start({
6281          top: c.top,
6282          left: c.left,
6283          width: b.width,
6284          height: b.height,
6285          opacity: 0.25,
6286        })
6287        .addEvent("cancel", a)
6288        .chain(a);
6289    } else {
6290      this.clone.destroy();
6291    }
6292    this.reset();
6293  },
6294  reset: function () {
6295    this.idle = true;
6296    this.fireEvent("complete", this.ElementCust);
6297  },
6298  serialize: function () {
6299    var c = Array.link(arguments, {
6300      modifier: Type.isFunction,
6301      index: function (d) {
6302        return d != null;
6303      },
6304    });
6305    var b = this.lists.map(function (d) {
6306      return d.getChildren().map(
6307        c.modifier ||
6308          function (e) {
6309            return e.get("id");
6310          },
6311        this
6312      );
6313    }, this);
6314    var a = c.index;
6315    if (this.lists.length == 1) {
6316      a = 0;
6317    }
6318    return (a || a === 0) && a >= 0 && a < this.lists.length ? b[a] : b;
6319  },
6320});
6321Request.JSONP = new Class({
6322  Implements: [Chain, Events, Options],
6323  options: {
6324    onRequest: function (a) {
6325      if (this.options.log && window.console && console.log) {
6326        console.log("JSONP retrieving script with url:" + a);
6327      }
6328    },
6329    onError: function (a) {
6330      if (this.options.log && window.console && console.warn) {
6331        console.warn(
6332          "JSONP " +
6333            a +
6334            " will fail in Internet Explorer, which enforces a 2083 bytes length limit on URIs"
6335        );
6336      }
6337    },
6338    url: "",
6339    callbackKey: "callback",
6340    injectScript: document.head,
6341    data: "",
6342    link: "ignore",
6343    timeout: 0,
6344    log: false,
6345  },
6346  initialize: function (a) {
6347    this.setOptions(a);
6348  },
6349  send: function (c) {
6350    if (!Request.prototype.check.call(this, c)) {
6351      return this;
6352    }
6353    this.running = true;
6354    var d = typeOf(c);
6355    if (d == "string" || d == "ElementCust") {
6356      c = { data: c };
6357    }
6358    c = Object.merge(this.options, c || {});
6359    var e = c.data;
6360    switch (typeOf(e)) {
6361      case "ElementCust":
6362        e = document.id(e).toQueryString();
6363        break;
6364      case "object":
6365      case "hash":
6366        e = Object.toQueryString(e);
6367    }
6368    var b = (this.index = Request.JSONP.counter++);
6369    var f =
6370      c.url +
6371      (c.url.test("\\?") ? "&" : "?") +
6372      c.callbackKey +
6373      "=Request.JSONP.request_map.request_" +
6374      b +
6375      (e ? "&" + e : "");
6376    if (f.length > 2083) {
6377      this.fireEvent("error", f);
6378    }
6379    Request.JSONP.request_map["request_" + b] = function () {
6380      this.success(arguments, b);
6381    }.bind(this);
6382    var a = this.getScript(f).inject(c.injectScript);
6383    this.fireEvent("request", [f, a]);
6384    if (c.timeout) {
6385      this.timeout.delay(c.timeout, this);
6386    }
6387    return this;
6388  },
6389  getScript: function (a) {
6390    if (!this.script) {
6391      this.script = new ElementCust("script", {
6392        type: "text/javascript",
6393        async: true,
6394        src: a,
6395      });
6396    }
6397    return this.script;
6398  },
6399  success: function (b, a) {
6400    if (!this.running) {
6401      return;
6402    }
6403    this.clear().fireEvent("complete", b).fireEvent("success", b).callChain();
6404  },
6405  cancel: function () {
6406    if (this.running) {
6407      this.clear().fireEvent("cancel");
6408    }
6409    return this;
6410  },
6411  isRunning: function () {
6412    return !!this.running;
6413  },
6414  clear: function () {
6415    this.running = false;
6416    if (this.script) {
6417      this.script.destroy();
6418      this.script = null;
6419    }
6420    return this;
6421  },
6422  timeout: function () {
6423    if (this.running) {
6424      this.running = false;
6425      this.fireEvent("timeout", [this.script.get("src"), this.script])
6426        .fireEvent("failure")
6427        .cancel();
6428    }
6429    return this;
6430  },
6431});
6432Request.JSONP.counter = 0;
6433Request.JSONP.request_map = {};
6434Request.Queue = new Class({
6435  Implements: [Options, Events],
6436  Binds: [
6437    "attach",
6438    "request",
6439    "complete",
6440    "cancel",
6441    "success",
6442    "failure",
6443    "exception",
6444  ],
6445  options: {
6446    stopOnFailure: true,
6447    autoAdvance: true,
6448    concurrent: 1,
6449    requests: {},
6450  },
6451  initialize: function (a) {
6452    var b;
6453    if (a) {
6454      b = a.requests;
6455      delete a.requests;
6456    }
6457    this.setOptions(a);
6458    this.requests = {};
6459    this.queue = [];
6460    this.reqBinders = {};
6461    if (b) {
6462      this.addRequests(b);
6463    }
6464  },
6465  addRequest: function (a, b) {
6466    this.requests[a] = b;
6467    this.attach(a, b);
6468    return this;
6469  },
6470  addRequests: function (a) {
6471    Object.each(
6472      a,
6473      function (c, b) {
6474        this.addRequest(b, c);
6475      },
6476      this
6477    );
6478    return this;
6479  },
6480  getName: function (a) {
6481    return Object.keyOf(this.requests, a);
6482  },
6483  attach: function (a, b) {
6484    if (b._groupSend) {
6485      return this;
6486    }
6487    ["request", "complete", "cancel", "success", "failure", "exception"].each(
6488      function (c) {
6489        if (!this.reqBinders[a]) {
6490          this.reqBinders[a] = {};
6491        }
6492        this.reqBinders[a][c] = function () {
6493          this["on" + c.capitalize()].apply(this, [a, b].append(arguments));
6494        }.bind(this);
6495        b.addEvent(c, this.reqBinders[a][c]);
6496      },
6497      this
6498    );
6499    b._groupSend = b.send;
6500    b.send = function (c) {
6501      this.send(a, c);
6502      return b;
6503    }.bind(this);
6504    return this;
6505  },
6506  removeRequest: function (b) {
6507    var a = typeOf(b) == "object" ? this.getName(b) : b;
6508    if (!a && typeOf(a) != "string") {
6509      return this;
6510    }
6511    b = this.requests[a];
6512    if (!b) {
6513      return this;
6514    }
6515    ["request", "complete", "cancel", "success", "failure", "exception"].each(
6516      function (c) {
6517        b.removeEvent(c, this.reqBinders[a][c]);
6518      },
6519      this
6520    );
6521    b.send = b._groupSend;
6522    delete b._groupSend;
6523    return this;
6524  },
6525  getRunning: function () {
6526    return Object.filter(this.requests, function (a) {
6527      return a.running;
6528    });
6529  },
6530  isRunning: function () {
6531    return !!Object.keys(this.getRunning()).length;
6532  },
6533  send: function (b, a) {
6534    var c = function () {
6535      this.requests[b]._groupSend(a);
6536      this.queue.erase(c);
6537    }.bind(this);
6538    c.name = b;
6539    if (
6540      Object.keys(this.getRunning()).length >= this.options.concurrent ||
6541      (this.error && this.options.stopOnFailure)
6542    ) {
6543      this.queue.push(c);
6544    } else {
6545      c();
6546    }
6547    return this;
6548  },
6549  hasNext: function (a) {
6550    return !a
6551      ? !!this.queue.length
6552      : !!this.queue.filter(function (b) {
6553          return b.name == a;
6554        }).length;
6555  },
6556  resume: function () {
6557    this.error = false;
6558    (this.options.concurrent - Object.keys(this.getRunning()).length).times(
6559      this.runNext,
6560      this
6561    );
6562    return this;
6563  },
6564  runNext: function (a) {
6565    if (!this.queue.length) {
6566      return this;
6567    }
6568    if (!a) {
6569      this.queue[0]();
6570    } else {
6571      var b;
6572      this.queue.each(function (c) {
6573        if (!b && c.name == a) {
6574          b = true;
6575          c();
6576        }
6577      });
6578    }
6579    return this;
6580  },
6581  runAll: function () {
6582    this.queue.each(function (a) {
6583      a();
6584    });
6585    return this;
6586  },
6587  clear: function (a) {
6588    if (!a) {
6589      this.queue.empty();
6590    } else {
6591      this.queue = this.queue
6592        .map(function (b) {
6593          if (b.name != a) {
6594            return b;
6595          } else {
6596            return false;
6597          }
6598        })
6599        .filter(function (b) {
6600          return b;
6601        });
6602    }
6603    return this;
6604  },
6605  cancel: function (a) {
6606    this.requests[a].cancel();
6607    return this;
6608  },
6609  onRequest: function () {
6610    this.fireEvent("request", arguments);
6611  },
6612  onComplete: function () {
6613    this.fireEvent("complete", arguments);
6614    if (!this.queue.length) {
6615      this.fireEvent("end");
6616    }
6617  },
6618  onCancel: function () {
6619    if (this.options.autoAdvance && !this.error) {
6620      this.runNext();
6621    }
6622    this.fireEvent("cancel", arguments);
6623  },
6624  onSuccess: function () {
6625    if (this.options.autoAdvance && !this.error) {
6626      this.runNext();
6627    }
6628    this.fireEvent("success", arguments);
6629  },
6630  onFailure: function () {
6631    this.error = true;
6632    if (!this.options.stopOnFailure && this.options.autoAdvance) {
6633      this.runNext();
6634    }
6635    this.fireEvent("failure", arguments);
6636  },
6637  onException: function () {
6638    this.error = true;
6639    if (!this.options.stopOnFailure && this.options.autoAdvance) {
6640      this.runNext();
6641    }
6642    this.fireEvent("exception", arguments);
6643  },
6644});
6645Request.implement({
6646  options: { initialDelay: 5000, delay: 5000, limit: 60000 },
6647  startTimer: function (b) {
6648    var a = function () {
6649      if (!this.running) {
6650        this.send({ data: b });
6651      }
6652    };
6653    this.lastDelay = this.options.initialDelay;
6654    this.timer = a.delay(this.lastDelay, this);
6655    this.completeCheck = function (c) {
6656      clearTimeout(this.timer);
6657      this.lastDelay = c
6658        ? this.options.delay
6659        : (this.lastDelay + this.options.delay).min(this.options.limit);
6660      this.timer = a.delay(this.lastDelay, this);
6661    };
6662    return this.addEvent("complete", this.completeCheck);
6663  },
6664  stopTimer: function () {
6665    clearTimeout(this.timer);
6666    return this.removeEvent("complete", this.completeCheck);
6667  },
6668});
6669var Asset = {
6670  javascript: function (d, b) {
6671    if (!b) {
6672      b = {};
6673    }
6674    var a = new ElementCust("script", { src: d, type: "text/javascript" }),
6675      e = b.document || document,
6676      c = b.onload || b.onLoad;
6677    delete b.onload;
6678    delete b.onLoad;
6679    delete b.document;
6680    if (c) {
6681      if (typeof a.onreadystatechange != "undefined") {
6682        a.addEvent("readystatechange", function () {
6683          if (["loaded", "complete"].contains(this.readyState)) {
6684            c.call(this);
6685          }
6686        });
6687      } else {
6688        a.addEvent("load", c);
6689      }
6690    }
6691    return a.set(b).inject(e.head);
6692  },
6693  css: function (d, a) {
6694    if (!a) {
6695      a = {};
6696    }
6697    var b = new ElementCust("link", {
6698      rel: "stylesheet",
6699      media: "screen",
6700      type: "text/css",
6701      href: d,
6702    });
6703    var c = a.onload || a.onLoad,
6704      e = a.document || document;
6705    delete a.onload;
6706    delete a.onLoad;
6707    delete a.document;
6708    if (c) {
6709      b.addEvent("load", c);
6710    }
6711    return b.set(a).inject(e.head);
6712  },
6713  image: function (c, b) {
6714    if (!b) {
6715      b = {};
6716    }
6717    var d = new Image(),
6718      a = document.id(d) || new ElementCust("img");
6719    ["load", "abort", "error"].each(function (e) {
6720      var g = "on" + e,
6721        f = "on" + e.capitalize(),
6722        h = b[g] || b[f] || function () {};
6723      delete b[f];
6724      delete b[g];
6725      d[g] = function () {
6726        if (!d) {
6727          return;
6728        }
6729        if (!a.parentNode) {
6730          a.width = d.width;
6731          a.height = d.height;
6732        }
6733        d = d.onload = d.onabort = d.onerror = null;
6734        h.delay(1, a, a);
6735        a.fireEvent(e, a, 1);
6736      };
6737    });
6738    d.src = a.src = c;
6739    if (d && d.complete) {
6740      d.onload.delay(1);
6741    }
6742    return a.set(b);
6743  },
6744  images: function (c, b) {
6745    c = Array.from(c);
6746    var d = function () {},
6747      a = 0;
6748    b = Object.merge(
6749      { onComplete: d, onProgress: d, onError: d, properties: {} },
6750      b
6751    );
6752    return new Elements(
6753      c.map(function (f, e) {
6754        return Asset.image(
6755          f,
6756          Object.append(b.properties, {
6757            onload: function () {
6758              a++;
6759              b.onProgress.call(this, a, e, f);
6760              if (a == c.length) {
6761                b.onComplete();
6762              }
6763            },
6764            onerror: function () {
6765              a++;
6766              b.onError.call(this, a, e, f);
6767              if (a == c.length) {
6768                b.onComplete();
6769              }
6770            },
6771          })
6772        );
6773      })
6774    );
6775  },
6776};
6777(function () {
6778  var a = (this.Color = new Type("Color", function (c, d) {
6779    if (arguments.length >= 3) {
6780      d = "rgb";
6781      c = Array.slice(arguments, 0, 3);
6782    } else {
6783      if (typeof c == "string") {
6784        if (c.match(/rgb/)) {
6785          c = c.rgbToHex().hexToRgb(true);
6786        } else {
6787          if (c.match(/hsb/)) {
6788            c = c.hsbToRgb();
6789          } else {
6790            c = c.hexToRgb(true);
6791          }
6792        }
6793      }
6794    }
6795    d = d || "rgb";
6796    switch (d) {
6797      case "hsb":
6798        var b = c;
6799        c = c.hsbToRgb();
6800        c.hsb = b;
6801        break;
6802      case "hex":
6803        c = c.hexToRgb(true);
6804        break;
6805    }
6806    c.rgb = c.slice(0, 3);
6807    c.hsb = c.hsb || c.rgbToHsb();
6808    c.hex = c.rgbToHex();
6809    return Object.append(c, this);
6810  }));
6811  a.implement({
6812    mix: function () {
6813      var b = Array.slice(arguments);
6814      var d = typeOf(b.getLast()) == "number" ? b.pop() : 50;
6815      var c = this.slice();
6816      b.each(function (e) {
6817        e = new a(e);
6818        for (var f = 0; f < 3; f++) {
6819          c[f] = Math.round((c[f] / 100) * (100 - d) + (e[f] / 100) * d);
6820        }
6821      });
6822      return new a(c, "rgb");
6823    },
6824    invert: function () {
6825      return new a(
6826        this.map(function (b) {
6827          return 255 - b;
6828        })
6829      );
6830    },
6831    setHue: function (b) {
6832      return new a([b, this.hsb[1], this.hsb[2]], "hsb");
6833    },
6834    setSaturation: function (b) {
6835      return new a([this.hsb[0], b, this.hsb[2]], "hsb");
6836    },
6837    setBrightness: function (b) {
6838      return new a([this.hsb[0], this.hsb[1], b], "hsb");
6839    },
6840  });
6841  this.$RGB = function (e, d, c) {
6842    return new a([e, d, c], "rgb");
6843  };
6844  this.$HSB = function (e, d, c) {
6845    return new a([e, d, c], "hsb");
6846  };
6847  this.$HEX = function (b) {
6848    return new a(b, "hex");
6849  };
6850  Array.implement({
6851    rgbToHsb: function () {
6852      var c = this[0],
6853        d = this[1],
6854        k = this[2],
6855        h = 0;
6856      var j = Math.max(c, d, k),
6857        f = Math.min(c, d, k);
6858      var l = j - f;
6859      var i = j / 255,
6860        g = j != 0 ? l / j : 0;
6861      if (g != 0) {
6862        var e = (j - c) / l;
6863        var b = (j - d) / l;
6864        var m = (j - k) / l;
6865        if (c == j) {
6866          h = m - b;
6867        } else {
6868          if (d == j) {
6869            h = 2 + e - m;
6870          } else {
6871            h = 4 + b - e;
6872          }
6873        }
6874        h /= 6;
6875        if (h < 0) {
6876          h++;
6877        }
6878      }
6879      return [Math.round(h * 360), Math.round(g * 100), Math.round(i * 100)];
6880    },
6881    hsbToRgb: function () {
6882      var d = Math.round((this[2] / 100) * 255);
6883      if (this[1] == 0) {
6884        return [d, d, d];
6885      } else {
6886        var b = this[0] % 360;
6887        var g = b % 60;
6888        var h = Math.round(((this[2] * (100 - this[1])) / 10000) * 255);
6889        var e = Math.round(((this[2] * (6000 - this[1] * g)) / 600000) * 255);
6890        var c = Math.round(
6891          ((this[2] * (6000 - this[1] * (60 - g))) / 600000) * 255
6892        );
6893        switch (Math.floor(b / 60)) {
6894          case 0:
6895            return [d, c, h];
6896          case 1:
6897            return [e, d, h];
6898          case 2:
6899            return [h, d, c];
6900          case 3:
6901            return [h, e, d];
6902          case 4:
6903            return [c, h, d];
6904          case 5:
6905            return [d, h, e];
6906        }
6907      }
6908      return false;
6909    },
6910  });
6911  String.implement({
6912    rgbToHsb: function () {
6913      var b = this.match(/\d{1,3}/g);
6914      return b ? b.rgbToHsb() : null;
6915    },
6916    hsbToRgb: function () {
6917      var b = this.match(/\d{1,3}/g);
6918      return b ? b.hsbToRgb() : null;
6919    },
6920  });
6921})();
6922(function () {
6923  this.Group = new Class({
6924    initialize: function () {
6925      this.instances = Array.flatten(arguments);
6926    },
6927    addEvent: function (e, d) {
6928      var g = this.instances,
6929        a = g.length,
6930        f = a,
6931        c = new Array(a),
6932        b = this;
6933      g.each(function (h, j) {
6934        h.addEvent(e, function () {
6935          if (!c[j]) {
6936            f--;
6937          }
6938          c[j] = arguments;
6939          if (!f) {
6940            d.call(b, g, h, c);
6941            f = a;
6942            c = new Array(a);
6943          }
6944        });
6945      });
6946    },
6947  });
6948})();
6949Hash.Cookie = new Class({
6950  Extends: Cookie,
6951  options: { autoSave: true },
6952  initialize: function (b, a) {
6953    this.parent(b, a);
6954    this.load();
6955  },
6956  save: function () {
6957    var a = JSON.encode(this.hash);
6958    if (!a || a.length > 4096) {
6959      return false;
6960    }
6961    if (a == "{}") {
6962      this.dispose();
6963    } else {
6964      this.write(a);
6965    }
6966    return true;
6967  },
6968  load: function () {
6969    this.hash = new Hash(JSON.decode(this.read(), true));
6970    return this;
6971  },
6972});
6973Hash.each(Hash.prototype, function (b, a) {
6974  if (typeof b == "function") {
6975    Hash.Cookie.implement(a, function () {
6976      var c = b.apply(this.hash, arguments);
6977      if (this.options.autoSave) {
6978        this.save();
6979      }
6980      return c;
6981    });
6982  }
6983});
6984(function () {
6985  var a = (this.Table = function () {
6986    this.length = 0;
6987    var c = [],
6988      b = [];
6989    this.set = function (e, g) {
6990      var d = c.indexOf(e);
6991      if (d == -1) {
6992        var f = c.length;
6993        c[f] = e;
6994        b[f] = g;
6995        this.length++;
6996      } else {
6997        b[d] = g;
6998      }
6999      return this;
7000    };
7001    this.get = function (e) {
7002      var d = c.indexOf(e);
7003      return d == -1 ? null : b[d];
7004    };
7005    this.erase = function (e) {
7006      var d = c.indexOf(e);
7007      if (d != -1) {
7008        this.length--;
7009        c.splice(d, 1);
7010        return b.splice(d, 1)[0];
7011      }
7012      return null;
7013    };
7014    this.each = this.forEach = function (f, g) {
7015      for (var e = 0, d = this.length; e < d; e++) {
7016        f.call(g, c[e], b[e], this);
7017      }
7018    };
7019  });
7020  if (this.Type) {
7021    new Type("Table", a);
7022  }
7023})();
7024var HtmlTable = new Class({
7025  Implements: [Options, Events, Class.Occlude],
7026  options: {
7027    properties: { cellpadding: 0, cellspacing: 0, border: 0 },
7028    rows: [],
7029    headers: [],
7030    footers: [],
7031  },
7032  property: "HtmlTable",
7033  initialize: function () {
7034    var a = Array.link(arguments, {
7035      options: Type.isObject,
7036      table: Type.isElement,
7037      id: Type.isString,
7038    });
7039    this.setOptions(a.options);
7040    if (!a.table && a.id) {
7041      a.table = document.id(a.id);
7042    }
7043    this.ElementCust = a.table || new ElementCust("table", this.options.properties);
7044    if (this.occlude()) {
7045      return this.occluded;
7046    }
7047    this.build();
7048  },
7049  build: function () {
7050    this.ElementCust.store("HtmlTable", this);
7051    this.body =
7052      document.id(this.ElementCust.tBodies[0]) ||
7053      new ElementCust("tbody").inject(this.ElementCust);
7054    $$(this.body.rows);
7055    if (this.options.headers.length) {
7056      this.setHeaders(this.options.headers);
7057    } else {
7058      this.thead = document.id(this.ElementCust.tHead);
7059    }
7060    if (this.thead) {
7061      this.head = this.getHead();
7062    }
7063    if (this.options.footers.length) {
7064      this.setFooters(this.options.footers);
7065    }
7066    this.tfoot = document.id(this.ElementCust.tFoot);
7067    if (this.tfoot) {
7068      this.foot = document.id(this.tfoot.rows[0]);
7069    }
7070    this.options.rows.each(function (a) {
7071      this.push(a);
7072    }, this);
7073  },
7074  toElement: function () {
7075    return this.ElementCust;
7076  },
7077  empty: function () {
7078    this.body.empty();
7079    return this;
7080  },
7081  set: function (e, a) {
7082    var d = e == "headers" ? "tHead" : "tFoot",
7083      b = d.toLowerCase();
7084    this[b] = (
7085      document.id(this.ElementCust[d]) || new ElementCust(b).inject(this.ElementCust, "top")
7086    ).empty();
7087    var c = this.push(a, {}, this[b], e == "headers" ? "th" : "td");
7088    if (e == "headers") {
7089      this.head = this.getHead();
7090    } else {
7091      this.foot = this.getHead();
7092    }
7093    return c;
7094  },
7095  getHead: function () {
7096    var a = this.thead.rows;
7097    return a.length > 1 ? $$(a) : a.length ? document.id(a[0]) : false;
7098  },
7099  setHeaders: function (a) {
7100    this.set("headers", a);
7101    return this;
7102  },
7103  setFooters: function (a) {
7104    this.set("footers", a);
7105    return this;
7106  },
7107  update: function (d, e, a) {
7108    var b = d.getChildren(a || "td"),
7109      c = b.length - 1;
7110    e.each(function (i, f) {
7111      var j = b[f] || new ElementCust(a || "td").inject(d),
7112        h = (i ? i.content : "") || i,
7113        g = typeOf(h);
7114      if (i && i.properties) {
7115        j.set(i.properties);
7116      }
7117      if (/(ElementCust(s?)|array|collection)/.test(g)) {
7118        j.empty().adopt(h);
7119      } else {
7120        j.set("html", h);
7121      }
7122      if (f > c) {
7123        b.push(j);
7124      } else {
7125        b[f] = j;
7126      }
7127    });
7128    return { tr: d, tds: b };
7129  },
7130  push: function (e, c, d, a, b) {
7131    if (typeOf(e) == "ElementCust" && e.get("tag") == "tr") {
7132      e.inject(d || this.body, b);
7133      return { tr: e, tds: e.getChildren("td") };
7134    }
7135    return this.update(new ElementCust("tr", c).inject(d || this.body, b), e, a);
7136  },
7137  pushMany: function (d, c, e, a, b) {
7138    return d.map(function (f) {
7139      return this.push(f, c, e, a, b);
7140    }, this);
7141  },
7142});
7143["adopt", "inject", "wraps", "grab", "replaces", "dispose"].each(function (a) {
7144  HtmlTable.implement(a, function () {
7145    this.ElementCust[a].apply(this.ElementCust, arguments);
7146    return this;
7147  });
7148});
7149HtmlTable = Class.refactor(HtmlTable, {
7150  options: {
7151    classZebra: "table-tr-odd",
7152    zebra: true,
7153    zebraOnlyVisibleRows: true,
7154  },
7155  initialize: function () {
7156    this.previous.apply(this, arguments);
7157    if (this.occluded) {
7158      return this.occluded;
7159    }
7160    if (this.options.zebra) {
7161      this.updateZebras();
7162    }
7163  },
7164  updateZebras: function () {
7165    var a = 0;
7166    Array.each(
7167      this.body.rows,
7168      function (b) {
7169        if (!this.options.zebraOnlyVisibleRows || b.isDisplayed()) {
7170          this.zebra(b, a++);
7171        }
7172      },
7173      this
7174    );
7175  },
7176  setRowStyle: function (b, a) {
7177    if (this.previous) {
7178      this.previous(b, a);
7179    }
7180    this.zebra(b, a);
7181  },
7182  zebra: function (b, a) {
7183    return b[(a % 2 ? "remove" : "add") + "Class"](this.options.classZebra);
7184  },
7185  push: function () {
7186    var a = this.previous.apply(this, arguments);
7187    if (this.options.zebra) {
7188      this.updateZebras();
7189    }
7190    return a;
7191  },
7192});
7193HtmlTable = Class.refactor(HtmlTable, {
7194  options: {
7195    sortIndex: 0,
7196    sortReverse: false,
7197    parsers: [],
7198    defaultParser: "string",
7199    classSortable: "table-sortable",
7200    classHeadSort: "table-th-sort",
7201    classHeadSortRev: "table-th-sort-rev",
7202    classNoSort: "table-th-nosort",
7203    classGroupHead: "table-tr-group-head",
7204    classGroup: "table-tr-group",
7205    classCellSort: "table-td-sort",
7206    classSortSpan: "table-th-sort-span",
7207    sortable: false,
7208    thSelector: "th",
7209  },
7210  initialize: function () {
7211    this.previous.apply(this, arguments);
7212    if (this.occluded) {
7213      return this.occluded;
7214    }
7215    this.sorted = { index: null, dir: 1 };
7216    if (!this.bound) {
7217      this.bound = {};
7218    }
7219    this.bound.headClick = this.headClick.bind(this);
7220    this.sortSpans = new Elements();
7221    if (this.options.sortable) {
7222      this.enableSort();
7223      if (this.options.sortIndex != null) {
7224        this.sort(this.options.sortIndex, this.options.sortReverse);
7225      }
7226    }
7227  },
7228  attachSorts: function (a) {
7229    this.detachSorts();
7230    if (a !== false) {
7231      this.ElementCust.addEvent(
7232        "click:relay(" + this.options.thSelector + ")",
7233        this.bound.headClick
7234      );
7235    }
7236  },
7237  detachSorts: function () {
7238    this.ElementCust.removeEvents("click:relay(" + this.options.thSelector + ")");
7239  },
7240  setHeaders: function () {
7241    this.previous.apply(this, arguments);
7242    if (this.sortEnabled) {
7243      this.setParsers();
7244    }
7245  },
7246  setParsers: function () {
7247    this.parsers = this.detectParsers();
7248  },
7249  detectParsers: function () {
7250    return (
7251      this.head &&
7252      this.head
7253        .getElements(this.options.thSelector)
7254        .flatten()
7255        .map(this.detectParser, this)
7256    );
7257  },
7258  detectParser: function (a, b) {
7259    if (
7260      a.hasClass(this.options.classNoSort) ||
7261      a.retrieve("htmltable-parser")
7262    ) {
7263      return a.retrieve("htmltable-parser");
7264    }
7265    var c = new ElementCust("div");
7266    c.adopt(a.childNodes).inject(a);
7267    var f = new ElementCust("span", { class: this.options.classSortSpan }).inject(
7268      c,
7269      "top"
7270    );
7271    this.sortSpans.push(f);
7272    var g = this.options.parsers[b],
7273      e = this.body.rows,
7274      d;
7275    switch (typeOf(g)) {
7276      case "function":
7277        g = { convert: g };
7278        d = true;
7279        break;
7280      case "string":
7281        g = g;
7282        d = true;
7283        break;
7284    }
7285    if (!d) {
7286      HtmlTable.ParserPriority.some(function (k) {
7287        var o = HtmlTable.Parsers[k],
7288          m = o.match;
7289        if (!m) {
7290          return false;
7291        }
7292        for (var n = 0, l = e.length; n < l; n++) {
7293          var h = document.id(e[n].cells[b]),
7294            p = h ? h.get("html").clean() : "";
7295          if (p && m.test(p)) {
7296            g = o;
7297            return true;
7298          }
7299        }
7300      });
7301    }
7302    if (!g) {
7303      g = this.options.defaultParser;
7304    }
7305    a.store("htmltable-parser", g);
7306    return g;
7307  },
7308  headClick: function (b, a) {
7309    if (!this.head || a.hasClass(this.options.classNoSort)) {
7310      return;
7311    }
7312    return this.sort(
7313      Array.indexOf(
7314        this.head.getElements(this.options.thSelector).flatten(),
7315        a
7316      ) % this.body.rows[0].cells.length
7317    );
7318  },
7319  serialize: function () {
7320    var a = this.previous.apply(this, arguments) || {};
7321    if (this.options.sortable) {
7322      a.sortIndex = this.sorted.index;
7323      a.sortReverse = this.sorted.reverse;
7324    }
7325    return a;
7326  },
7327  restore: function (a) {
7328    if (this.options.sortable && a.sortIndex) {
7329      this.sort(a.sortIndex, a.sortReverse);
7330    }
7331    this.previous.apply(this, arguments);
7332  },
7333  setSortedState: function (b, a) {
7334    if (a != null) {
7335      this.sorted.reverse = a;
7336    } else {
7337      if (this.sorted.index == b) {
7338        this.sorted.reverse = !this.sorted.reverse;
7339      } else {
7340        this.sorted.reverse = this.sorted.index == null;
7341      }
7342    }
7343    if (b != null) {
7344      this.sorted.index = b;
7345    }
7346  },
7347  setHeadSort: function (a) {
7348    var b = $$(
7349      !this.head.length
7350        ? this.head.cells[this.sorted.index]
7351        : this.head
7352            .map(function (c) {
7353              return c.getElements(this.options.thSelector)[this.sorted.index];
7354            }, this)
7355            .clean()
7356    );
7357    if (!b.length) {
7358      return;
7359    }
7360    if (a) {
7361      b.addClass(this.options.classHeadSort);
7362      if (this.sorted.reverse) {
7363        b.addClass(this.options.classHeadSortRev);
7364      } else {
7365        b.removeClass(this.options.classHeadSortRev);
7366      }
7367    } else {
7368      b.removeClass(this.options.classHeadSort).removeClass(
7369        this.options.classHeadSortRev
7370      );
7371    }
7372  },
7373  setRowSort: function (b, a) {
7374    var e = b.length,
7375      d = this.body,
7376      g,
7377      f;
7378    while (e) {
7379      var h = b[--e],
7380        c = h.position,
7381        i = d.rows[c];
7382      if (i.disabled) {
7383        continue;
7384      }
7385      if (!a) {
7386        g = this.setGroupSort(g, i, h);
7387        this.setRowStyle(i, e);
7388      }
7389      d.appendChild(i);
7390      for (f = 0; f < e; f++) {
7391        if (b[f].position > c) {
7392          b[f].position--;
7393        }
7394      }
7395    }
7396  },
7397  setRowStyle: function (b, a) {
7398    this.previous(b, a);
7399    b.cells[this.sorted.index].addClass(this.options.classCellSort);
7400  },
7401  setGroupSort: function (b, c, a) {
7402    if (b == a.value) {
7403      c.removeClass(this.options.classGroupHead).addClass(
7404        this.options.classGroup
7405      );
7406    } else {
7407      c.removeClass(this.options.classGroup).addClass(
7408        this.options.classGroupHead
7409      );
7410    }
7411    return a.value;
7412  },
7413  getParser: function () {
7414    var a = this.parsers[this.sorted.index];
7415    return typeOf(a) == "string" ? HtmlTable.Parsers[a] : a;
7416  },
7417  sort: function (c, b, e) {
7418    if (!this.head) {
7419      return;
7420    }
7421    if (!e) {
7422      this.clearSort();
7423      this.setSortedState(c, b);
7424      this.setHeadSort(true);
7425    }
7426    var f = this.getParser();
7427    if (!f) {
7428      return;
7429    }
7430    var a;
7431    if (!Browser.ie) {
7432      a = this.body.getParent();
7433      this.body.dispose();
7434    }
7435    var d = this.parseData(f).sort(function (h, g) {
7436      if (h.value === g.value) {
7437        return 0;
7438      }
7439      return h.value > g.value ? 1 : -1;
7440    });
7441    if (this.sorted.reverse == (f == HtmlTable.Parsers["input-checked"])) {
7442      d.reverse(true);
7443    }
7444    this.setRowSort(d, e);
7445    if (a) {
7446      a.grab(this.body);
7447    }
7448    this.fireEvent("stateChanged");
7449    return this.fireEvent("sort", [this.body, this.sorted.index]);
7450  },
7451  parseData: function (a) {
7452    return Array.map(
7453      this.body.rows,
7454      function (d, b) {
7455        var c = a.convert.call(document.id(d.cells[this.sorted.index]));
7456        return { position: b, value: c };
7457      },
7458      this
7459    );
7460  },
7461  clearSort: function () {
7462    this.setHeadSort(false);
7463    this.body.getElements("td").removeClass(this.options.classCellSort);
7464  },
7465  reSort: function () {
7466    if (this.sortEnabled) {
7467      this.sort.call(this, this.sorted.index, this.sorted.reverse);
7468    }
7469    return this;
7470  },
7471  enableSort: function () {
7472    this.ElementCust.addClass(this.options.classSortable);
7473    this.attachSorts(true);
7474    this.setParsers();
7475    this.sortEnabled = true;
7476    return this;
7477  },
7478  disableSort: function () {
7479    this.ElementCust.removeClass(this.options.classSortable);
7480    this.attachSorts(false);
7481    this.sortSpans.each(function (a) {
7482      a.destroy();
7483    });
7484    this.sortSpans.empty();
7485    this.sortEnabled = false;
7486    return this;
7487  },
7488});
7489HtmlTable.ParserPriority = [
7490  "date",
7491  "input-checked",
7492  "input-value",
7493  "float",
7494  "number",
7495];
7496HtmlTable.Parsers = {
7497  date: {
7498    match: /^\d{2}[-\/ ]\d{2}[-\/ ]\d{2,4}$/,
7499    convert: function () {
7500      var a = Date.parse(this.get("text").stripTags());
7501      return typeOf(a) == "date" ? a.format("db") : "";
7502    },
7503    type: "date",
7504  },
7505  "input-checked": {
7506    match: / type="(radio|checkbox)" /,
7507    convert: function () {
7508      return this.getElement("input").checked;
7509    },
7510  },
7511  "input-value": {
7512    match: /<input/,
7513    convert: function () {
7514      return this.getElement("input").value;
7515    },
7516  },
7517  number: {
7518    match: /^\d+[^\d.,]*$/,
7519    convert: function () {
7520      return this.get("text").stripTags().toInt();
7521    },
7522    number: true,
7523  },
7524  numberLax: {
7525    match: /^[^\d]+\d+$/,
7526    convert: function () {
7527      return this.get("text")
7528        .replace(/[^-?^0-9]/, "")
7529        .stripTags()
7530        .toInt();
7531    },
7532    number: true,
7533  },
7534  float: {
7535    match: /^[\d]+\.[\d]+/,
7536    convert: function () {
7537      return this.get("text")
7538        .replace(/[^-?^\d.]/, "")
7539        .stripTags()
7540        .toFloat();
7541    },
7542    number: true,
7543  },
7544  floatLax: {
7545    match: /^[^\d]+[\d]+\.[\d]+$/,
7546    convert: function () {
7547      return this.get("text")
7548        .replace(/[^-?^\d.]/, "")
7549        .stripTags();
7550    },
7551    number: true,
7552  },
7553  string: {
7554    match: null,
7555    convert: function () {
7556      return this.get("text").stripTags().toLowerCase();
7557    },
7558  },
7559  title: {
7560    match: null,
7561    convert: function () {
7562      return this.title;
7563    },
7564  },
7565};
7566HtmlTable.defineParsers = function (a) {
7567  HtmlTable.Parsers = Object.append(HtmlTable.Parsers, a);
7568  for (var b in a) {
7569    HtmlTable.ParserPriority.unshift(b);
7570  }
7571};
7572(function () {
7573  var a = (this.Keyboard = new Class({
7574    Extends: Events,
7575    Implements: [Options],
7576    options: {
7577      defaultEventType: "keydown",
7578      active: false,
7579      manager: null,
7580      events: {},
7581      nonParsedEvents: [
7582        "activate",
7583        "deactivate",
7584        "onactivate",
7585        "ondeactivate",
7586        "changed",
7587        "onchanged",
7588      ],
7589    },
7590    initialize: function (f) {
7591      if (f && f.manager) {
7592        this._manager = f.manager;
7593        delete f.manager;
7594      }
7595      this.setOptions(f);
7596      this._setup();
7597    },
7598    addEvent: function (h, g, f) {
7599      return this.parent(
7600        a.parse(h, this.options.defaultEventType, this.options.nonParsedEvents),
7601        g,
7602        f
7603      );
7604    },
7605    removeEvent: function (g, f) {
7606      return this.parent(
7607        a.parse(g, this.options.defaultEventType, this.options.nonParsedEvents),
7608        f
7609      );
7610    },
7611    toggleActive: function () {
7612      return this[this.isActive() ? "deactivate" : "activate"]();
7613    },
7614    activate: function (f) {
7615      if (f) {
7616        if (f.isActive()) {
7617          return this;
7618        }
7619        if (this._activeKB && f != this._activeKB) {
7620          this.previous = this._activeKB;
7621          this.previous.fireEvent("deactivate");
7622        }
7623        this._activeKB = f.fireEvent("activate");
7624        a.manager.fireEvent("changed");
7625      } else {
7626        if (this._manager) {
7627          this._manager.activate(this);
7628        }
7629      }
7630      return this;
7631    },
7632    isActive: function () {
7633      return this._manager
7634        ? this._manager._activeKB == this
7635        : a.manager == this;
7636    },
7637    deactivate: function (f) {
7638      if (f) {
7639        if (f === this._activeKB) {
7640          this._activeKB = null;
7641          f.fireEvent("deactivate");
7642          a.manager.fireEvent("changed");
7643        }
7644      } else {
7645        if (this._manager) {
7646          this._manager.deactivate(this);
7647        }
7648      }
7649      return this;
7650    },
7651    relinquish: function () {
7652      if (this.isActive() && this._manager && this._manager.previous) {
7653        this._manager.activate(this._manager.previous);
7654      } else {
7655        this.deactivate();
7656      }
7657      return this;
7658    },
7659    manage: function (f) {
7660      if (f._manager) {
7661        f._manager.drop(f);
7662      }
7663      this._instances.push(f);
7664      f._manager = this;
7665      if (!this._activeKB) {
7666        this.activate(f);
7667      }
7668      return this;
7669    },
7670    drop: function (f) {
7671      f.relinquish();
7672      this._instances.erase(f);
7673      if (this._activeKB == f) {
7674        if (this.previous && this._instances.contains(this.previous)) {
7675          this.activate(this.previous);
7676        } else {
7677          this._activeKB = this._instances[0];
7678        }
7679      }
7680      return this;
7681    },
7682    trace: function () {
7683      a.trace(this);
7684    },
7685    each: function (f) {
7686      a.each(this, f);
7687    },
7688    _instances: [],
7689    _disable: function (f) {
7690      if (this._activeKB == f) {
7691        this._activeKB = null;
7692      }
7693    },
7694    _setup: function () {
7695      this.addEvents(this.options.events);
7696      if (a.manager && !this._manager) {
7697        a.manager.manage(this);
7698      }
7699      if (this.options.active) {
7700        this.activate();
7701      } else {
7702        this.relinquish();
7703      }
7704    },
7705    _handle: function (h, g) {
7706      if (h.preventKeyboardPropagation) {
7707        return;
7708      }
7709      var f = !!this._manager;
7710      if (f && this._activeKB) {
7711        this._activeKB._handle(h, g);
7712        if (h.preventKeyboardPropagation) {
7713          return;
7714        }
7715      }
7716      this.fireEvent(g, h);
7717      if (!f && this._activeKB) {
7718        this._activeKB._handle(h, g);
7719      }
7720    },
7721  }));
7722  var b = {};
7723  var c = ["shift", "control", "alt", "meta"];
7724  var e = /^(?:shift|control|ctrl|alt|meta)$/;
7725  a.parse = function (h, g, k) {
7726    if (k && k.contains(h.toLowerCase())) {
7727      return h;
7728    }
7729    h = h.toLowerCase().replace(/^(keyup|keydown):/, function (m, l) {
7730      g = l;
7731      return "";
7732    });
7733    if (!b[h]) {
7734      var f,
7735        j = {};
7736      h.split("+").each(function (l) {
7737        if (e.test(l)) {
7738          j[l] = true;
7739        } else {
7740          f = l;
7741        }
7742      });
7743      j.control = j.control || j.ctrl;
7744      var i = [];
7745      c.each(function (l) {
7746        if (j[l]) {
7747          i.push(l);
7748        }
7749      });
7750      if (f) {
7751        i.push(f);
7752      }
7753      b[h] = i.join("+");
7754    }
7755    return g + ":keys(" + b[h] + ")";
7756  };
7757  a.each = function (f, g) {
7758    var h = f || a.manager;
7759    while (h) {
7760      g.run(h);
7761      h = h._activeKB;
7762    }
7763  };
7764  a.stop = function (f) {
7765    f.preventKeyboardPropagation = true;
7766  };
7767  a.manager = new a({ active: true });
7768  a.trace = function (f) {
7769    f = f || a.manager;
7770    var g = window.console && console.log;
7771    if (g) {
7772      console.log("the following items have focus: ");
7773    }
7774    a.each(f, function (h) {
7775      if (g) {
7776        console.log(document.id(h.widget) || h.wiget || h);
7777      }
7778    });
7779  };
7780  var d = function (g) {
7781    var f = [];
7782    c.each(function (h) {
7783      if (g[h]) {
7784        f.push(h);
7785      }
7786    });
7787    if (!e.test(g.key)) {
7788      f.push(g.key);
7789    }
7790    a.manager._handle(g, g.type + ":keys(" + f.join("+") + ")");
7791  };
7792  document.addEvents({ keyup: d, keydown: d });
7793})();
7794Keyboard.prototype.options.nonParsedEvents.combine(["rebound", "onrebound"]);
7795Keyboard.implement({
7796  addShortcut: function (b, a) {
7797    this._shortcuts = this._shortcuts || [];
7798    this._shortcutIndex = this._shortcutIndex || {};
7799    a.getKeyboard = Function.from(this);
7800    a.name = b;
7801    this._shortcutIndex[b] = a;
7802    this._shortcuts.push(a);
7803    if (a.keys) {
7804      this.addEvent(a.keys, a.handler);
7805    }
7806    return this;
7807  },
7808  addShortcuts: function (b) {
7809    for (var a in b) {
7810      this.addShortcut(a, b[a]);
7811    }
7812    return this;
7813  },
7814  removeShortcut: function (b) {
7815    var a = this.getShortcut(b);
7816    if (a && a.keys) {
7817      this.removeEvent(a.keys, a.handler);
7818      delete this._shortcutIndex[b];
7819      this._shortcuts.erase(a);
7820    }
7821    return this;
7822  },
7823  removeShortcuts: function (a) {
7824    a.each(this.removeShortcut, this);
7825    return this;
7826  },
7827  getShortcuts: function () {
7828    return this._shortcuts || [];
7829  },
7830  getShortcut: function (a) {
7831    return (this._shortcutIndex || {})[a];
7832  },
7833});
7834Keyboard.rebind = function (b, a) {
7835  Array.from(a).each(function (c) {
7836    c.getKeyboard().removeEvent(c.keys, c.handler);
7837    c.getKeyboard().addEvent(b, c.handler);
7838    c.keys = b;
7839    c.getKeyboard().fireEvent("rebound");
7840  });
7841};
7842Keyboard.getActiveShortcuts = function (b) {
7843  var a = [],
7844    c = [];
7845  Keyboard.each(b, [].push.bind(a));
7846  a.each(function (d) {
7847    c.extend(d.getShortcuts());
7848  });
7849  return c;
7850};
7851Keyboard.getShortcut = function (c, b, d) {
7852  d = d || {};
7853  var a = d.many ? [] : null,
7854    e = d.many
7855      ? function (g) {
7856          var f = g.getShortcut(c);
7857          if (f) {
7858            a.push(f);
7859          }
7860        }
7861      : function (f) {
7862          if (!a) {
7863            a = f.getShortcut(c);
7864          }
7865        };
7866  Keyboard.each(b, e);
7867  return a;
7868};
7869Keyboard.getShortcuts = function (b, a) {
7870  return Keyboard.getShortcut(b, a, { many: true });
7871};
7872HtmlTable = Class.refactor(HtmlTable, {
7873  options: {
7874    useKeyboard: true,
7875    classRowSelected: "table-tr-selected",
7876    classRowHovered: "table-tr-hovered",
7877    classSelectable: "table-selectable",
7878    shiftForMultiSelect: true,
7879    allowMultiSelect: true,
7880    selectable: false,
7881    selectHiddenRows: false,
7882  },
7883  initialize: function () {
7884    this.previous.apply(this, arguments);
7885    if (this.occluded) {
7886      return this.occluded;
7887    }
7888    this.selectedRows = new Elements();
7889    if (!this.bound) {
7890      this.bound = {};
7891    }
7892    this.bound.mouseleave = this.mouseleave.bind(this);
7893    this.bound.clickRow = this.clickRow.bind(this);
7894    this.bound.activateKeyboard = function () {
7895      if (this.keyboard && this.selectEnabled) {
7896        this.keyboard.activate();
7897      }
7898    }.bind(this);
7899    if (this.options.selectable) {
7900      this.enableSelect();
7901    }
7902  },
7903  empty: function () {
7904    this.selectNone();
7905    return this.previous();
7906  },
7907  enableSelect: function () {
7908    this.selectEnabled = true;
7909    this.attachSelects();
7910    this.ElementCust.addClass(this.options.classSelectable);
7911    return this;
7912  },
7913  disableSelect: function () {
7914    this.selectEnabled = false;
7915    this.attachSelects(false);
7916    this.ElementCust.removeClass(this.options.classSelectable);
7917    return this;
7918  },
7919  push: function () {
7920    var a = this.previous.apply(this, arguments);
7921    this.updateSelects();
7922    return a;
7923  },
7924  toggleRow: function (a) {
7925    return this[(this.isSelected(a) ? "de" : "") + "selectRow"](a);
7926  },
7927  selectRow: function (b, a) {
7928    if (this.isSelected(b) || (!a && !this.body.getChildren().contains(b))) {
7929      return;
7930    }
7931    if (!this.options.allowMultiSelect) {
7932      this.selectNone();
7933    }
7934    if (!this.isSelected(b)) {
7935      this.selectedRows.push(b);
7936      b.addClass(this.options.classRowSelected);
7937      this.fireEvent("rowFocus", [b, this.selectedRows]);
7938      this.fireEvent("stateChanged");
7939    }
7940    this.focused = b;
7941    document.clearSelection();
7942    return this;
7943  },
7944  isSelected: function (a) {
7945    return this.selectedRows.contains(a);
7946  },
7947  getSelected: function () {
7948    return this.selectedRows;
7949  },
7950  getSelected: function () {
7951    return this.selectedRows;
7952  },
7953  serialize: function () {
7954    var a = this.previous.apply(this, arguments) || {};
7955    if (this.options.selectable) {
7956      a.selectedRows = this.selectedRows.map(
7957        function (b) {
7958          return Array.indexOf(this.body.rows, b);
7959        }.bind(this)
7960      );
7961    }
7962    return a;
7963  },
7964  restore: function (a) {
7965    if (this.options.selectable && a.selectedRows) {
7966      a.selectedRows.each(
7967        function (b) {
7968          this.selectRow(this.body.rows[b]);
7969        }.bind(this)
7970      );
7971    }
7972    this.previous.apply(this, arguments);
7973  },
7974  deselectRow: function (b, a) {
7975    if (!this.isSelected(b) || (!a && !this.body.getChildren().contains(b))) {
7976      return;
7977    }
7978    this.selectedRows = new Elements(Array.from(this.selectedRows).erase(b));
7979    b.removeClass(this.options.classRowSelected);
7980    this.fireEvent("rowUnfocus", [b, this.selectedRows]);
7981    this.fireEvent("stateChanged");
7982    return this;
7983  },
7984  selectAll: function (a) {
7985    if (!a && !this.options.allowMultiSelect) {
7986      return;
7987    }
7988    this.selectRange(0, this.body.rows.length, a);
7989    return this;
7990  },
7991  selectNone: function () {
7992    return this.selectAll(true);
7993  },
7994  selectRange: function (b, a, f) {
7995    if (!this.options.allowMultiSelect && !f) {
7996      return;
7997    }
7998    var g = f ? "deselectRow" : "selectRow",
7999      e = Array.clone(this.body.rows);
8000    if (typeOf(b) == "ElementCust") {
8001      b = e.indexOf(b);
8002    }
8003    if (typeOf(a) == "ElementCust") {
8004      a = e.indexOf(a);
8005    }
8006    a = a < e.length - 1 ? a : e.length - 1;
8007    if (a < b) {
8008      var d = b;
8009      b = a;
8010      a = d;
8011    }
8012    for (var c = b; c <= a; c++) {
8013      if (this.options.selectHiddenRows || e[c].isDisplayed()) {
8014        this[g](e[c], true);
8015      }
8016    }
8017    return this;
8018  },
8019  deselectRange: function (b, a) {
8020    this.selectRange(b, a, true);
8021  },
8022  getSelected: function () {
8023    return this.selectedRows;
8024  },
8025  enterRow: function (a) {
8026    if (this.hovered) {
8027      this.hovered = this.leaveRow(this.hovered);
8028    }
8029    this.hovered = a.addClass(this.options.classRowHovered);
8030  },
8031  leaveRow: function (a) {
8032    a.removeClass(this.options.classRowHovered);
8033  },
8034  updateSelects: function () {
8035    Array.each(
8036      this.body.rows,
8037      function (a) {
8038        var b = a.retrieve("binders");
8039        if (!b && !this.selectEnabled) {
8040          return;
8041        }
8042        if (!b) {
8043          b = {
8044            mouseenter: this.enterRow.pass([a], this),
8045            mouseleave: this.leaveRow.pass([a], this),
8046          };
8047          a.store("binders", b);
8048        }
8049        if (this.selectEnabled) {
8050          a.addEvents(b);
8051        } else {
8052          a.removeEvents(b);
8053        }
8054      },
8055      this
8056    );
8057  },
8058  shiftFocus: function (b, a) {
8059    if (!this.focused) {
8060      return this.selectRow(this.body.rows[0], a);
8061    }
8062    var c = this.getRowByOffset(b, this.options.selectHiddenRows);
8063    if (c === null || this.focused == this.body.rows[c]) {
8064      return this;
8065    }
8066    this.toggleRow(this.body.rows[c], a);
8067  },
8068  clickRow: function (a, b) {
8069    var c =
8070      (a.shift || a.meta || a.control) && this.options.shiftForMultiSelect;
8071    if (
8072      !c &&
8073      !(a.rightClick && this.isSelected(b) && this.options.allowMultiSelect)
8074    ) {
8075      this.selectNone();
8076    }
8077    if (a.rightClick) {
8078      this.selectRow(b);
8079    } else {
8080      this.toggleRow(b);
8081    }
8082    if (a.shift) {
8083      this.selectRange(
8084        this.rangeStart || this.body.rows[0],
8085        b,
8086        this.rangeStart ? !this.isSelected(b) : true
8087      );
8088      this.focused = b;
8089    }
8090    this.rangeStart = b;
8091  },
8092  getRowByOffset: function (e, d) {
8093    if (!this.focused) {
8094      return 0;
8095    }
8096    var b = Array.indexOf(this.body.rows, this.focused);
8097    if ((b == 0 && e < 0) || (b == this.body.rows.length - 1 && e > 0)) {
8098      return null;
8099    }
8100    if (d) {
8101      b += e;
8102    } else {
8103      var a = 0,
8104        c = 0;
8105      if (e > 0) {
8106        while (c < e && b < this.body.rows.length - 1) {
8107          if (this.body.rows[++b].isDisplayed()) {
8108            c++;
8109          }
8110        }
8111      } else {
8112        while (c > e && b > 0) {
8113          if (this.body.rows[--b].isDisplayed()) {
8114            c--;
8115          }
8116        }
8117      }
8118    }
8119    return b;
8120  },
8121  attachSelects: function (d) {
8122    d = d != null ? d : true;
8123    var g = d ? "addEvents" : "removeEvents";
8124    this.ElementCust[g]({
8125      mouseleave: this.bound.mouseleave,
8126      click: this.bound.activateKeyboard,
8127    });
8128    this.body[g]({
8129      "click:relay(tr)": this.bound.clickRow,
8130      "contextmenu:relay(tr)": this.bound.clickRow,
8131    });
8132    if (this.options.useKeyboard || this.keyboard) {
8133      if (!this.keyboard) {
8134        this.keyboard = new Keyboard();
8135      }
8136      if (!this.selectKeysDefined) {
8137        this.selectKeysDefined = true;
8138        var f, e;
8139        var c = function (i) {
8140          var h = function (j) {
8141            clearTimeout(f);
8142            j.preventDefault();
8143            var k =
8144              this.body.rows[
8145                this.getRowByOffset(i, this.options.selectHiddenRows)
8146              ];
8147            if (j.shift && k && this.isSelected(k)) {
8148              this.deselectRow(this.focused);
8149              this.focused = k;
8150            } else {
8151              if (k && (!this.options.allowMultiSelect || !j.shift)) {
8152                this.selectNone();
8153              }
8154              this.shiftFocus(i, j);
8155            }
8156            if (e) {
8157              f = h.delay(100, this, j);
8158            } else {
8159              f = function () {
8160                e = true;
8161                h(j);
8162              }.delay(400);
8163            }
8164          }.bind(this);
8165          return h;
8166        }.bind(this);
8167        var b = function () {
8168          clearTimeout(f);
8169          e = false;
8170        };
8171        this.keyboard.addEvents({
8172          "keydown:shift+up": c(-1),
8173          "keydown:shift+down": c(1),
8174          "keyup:shift+up": b,
8175          "keyup:shift+down": b,
8176          "keyup:up": b,
8177          "keyup:down": b,
8178        });
8179        var a = "";
8180        if (
8181          this.options.allowMultiSelect &&
8182          this.options.shiftForMultiSelect &&
8183          this.options.useKeyboard
8184        ) {
8185          a = " (Shift multi-selects).";
8186        }
8187        this.keyboard.addShortcuts({
8188          "Select Previous Row": {
8189            keys: "up",
8190            shortcut: "up arrow",
8191            handler: c(-1),
8192            description: "Select the previous row in the table." + a,
8193          },
8194          "Select Next Row": {
8195            keys: "down",
8196            shortcut: "down arrow",
8197            handler: c(1),
8198            description: "Select the next row in the table." + a,
8199          },
8200        });
8201      }
8202      this.keyboard[d ? "activate" : "deactivate"]();
8203    }
8204    this.updateSelects();
8205  },
8206  mouseleave: function () {
8207    if (this.hovered) {
8208      this.leaveRow(this.hovered);
8209    }
8210  },
8211});
8212var Scroller = new Class({
8213  Implements: [Events, Options],
8214  options: {
8215    area: 20,
8216    velocity: 1,
8217    onChange: function (a, b) {
8218      this.ElementCust.scrollTo(a, b);
8219    },
8220    fps: 50,
8221  },
8222  initialize: function (b, a) {
8223    this.setOptions(a);
8224    this.ElementCust = document.id(b);
8225    this.docBody = document.id(this.ElementCust.getDocument().body);
8226    this.listener =
8227      typeOf(this.ElementCust) != "ElementCust" ? this.docBody : this.ElementCust;
8228    this.timer = null;
8229    this.bound = {
8230      attach: this.attach.bind(this),
8231      detach: this.detach.bind(this),
8232      getCoords: this.getCoords.bind(this),
8233    };
8234  },
8235  start: function () {
8236    this.listener.addEvents({
8237      mouseover: this.bound.attach,
8238      mouseleave: this.bound.detach,
8239    });
8240    return this;
8241  },
8242  stop: function () {
8243    this.listener.removeEvents({
8244      mouseover: this.bound.attach,
8245      mouseleave: this.bound.detach,
8246    });
8247    this.detach();
8248    this.timer = clearInterval(this.timer);
8249    return this;
8250  },
8251  attach: function () {
8252    this.listener.addEvent("mousemove", this.bound.getCoords);
8253  },
8254  detach: function () {
8255    this.listener.removeEvent("mousemove", this.bound.getCoords);
8256    this.timer = clearInterval(this.timer);
8257  },
8258  getCoords: function (a) {
8259    this.page = this.listener.get("tag") == "body" ? a.client : a.page;
8260    if (!this.timer) {
8261      this.timer = this.scroll.periodical(
8262        Math.round(1000 / this.options.fps),
8263        this
8264      );
8265    }
8266  },
8267  scroll: function () {
8268    var c = this.ElementCust.getSize(),
8269      a = this.ElementCust.getScroll(),
8270      h =
8271        this.ElementCust != this.docBody
8272          ? this.ElementCust.getOffsets()
8273          : { x: 0, y: 0 },
8274      d = this.ElementCust.getScrollSize(),
8275      g = { x: 0, y: 0 },
8276      e = this.options.area.top || this.options.area,
8277      b = this.options.area.bottom || this.options.area;
8278    for (var f in this.page) {
8279      if (this.page[f] < e + h[f] && a[f] != 0) {
8280        g[f] = (this.page[f] - e - h[f]) * this.options.velocity;
8281      } else {
8282        if (this.page[f] + b > c[f] + h[f] && a[f] + c[f] != d[f]) {
8283          g[f] = (this.page[f] - c[f] + b - h[f]) * this.options.velocity;
8284        }
8285      }
8286      g[f] = g[f].round();
8287    }
8288    if (g.y || g.x) {
8289      this.fireEvent("change", [a.x + g.x, a.y + g.y]);
8290    }
8291  },
8292});
8293(function () {
8294  var a = function (c, b) {
8295    return c ? (typeOf(c) == "function" ? c(b) : b.get(c)) : "";
8296  };
8297  this.Tips = new Class({
8298    Implements: [Events, Options],
8299    options: {
8300      onShow: function () {
8301        this.tip.setStyle("display", "block");
8302      },
8303      onHide: function () {
8304        this.tip.setStyle("display", "none");
8305      },
8306      title: "title",
8307      text: function (b) {
8308        return b.get("rel") || b.get("href");
8309      },
8310      showDelay: 100,
8311      hideDelay: 100,
8312      className: "tip-wrap",
8313      offset: { x: 16, y: 16 },
8314      windowPadding: { x: 0, y: 0 },
8315      fixed: false,
8316      waiAria: true,
8317    },
8318    initialize: function () {
8319      var b = Array.link(arguments, {
8320        options: Type.isObject,
8321        elements: function (c) {
8322          return c != null;
8323        },
8324      });
8325      this.setOptions(b.options);
8326      if (b.elements) {
8327        this.attach(b.elements);
8328      }
8329      this.container = new ElementCust("div", { class: "tip" });
8330      if (this.options.id) {
8331        this.container.set("id", this.options.id);
8332        if (this.options.waiAria) {
8333          this.attachWaiAria();
8334        }
8335      }
8336    },
8337    toElement: function () {
8338      if (this.tip) {
8339        return this.tip;
8340      }
8341      this.tip = new ElementCust("div", {
8342        class: this.options.className,
8343        styles: { position: "absolute", top: 0, left: 0 },
8344      }).adopt(
8345        new ElementCust("div", { class: "tip-top" }),
8346        this.container,
8347        new ElementCust("div", { class: "tip-bottom" })
8348      );
8349      return this.tip;
8350    },
8351    attachWaiAria: function () {
8352      var b = this.options.id;
8353      this.container.set("role", "tooltip");
8354      if (!this.waiAria) {
8355        this.waiAria = {
8356          show: function (c) {
8357            if (b) {
8358              c.set("aria-describedby", b);
8359            }
8360            this.container.set("aria-hidden", "false");
8361          },
8362          hide: function (c) {
8363            if (b) {
8364              c.erase("aria-describedby");
8365            }
8366            this.container.set("aria-hidden", "true");
8367          },
8368        };
8369      }
8370      this.addEvents(this.waiAria);
8371    },
8372    detachWaiAria: function () {
8373      if (this.waiAria) {
8374        this.container.erase("role");
8375        this.container.erase("aria-hidden");
8376        this.removeEvents(this.waiAria);
8377      }
8378    },
8379    attach: function (b) {
8380      $$(b).each(function (d) {
8381        var f = a(this.options.title, d),
8382          e = a(this.options.text, d);
8383        d.set("title", "").store("tip:native", f).retrieve("tip:title", f);
8384        d.retrieve("tip:text", e);
8385        this.fireEvent("attach", [d]);
8386        var c = ["enter", "leave"];
8387        if (!this.options.fixed) {
8388          c.push("move");
8389        }
8390        c.each(function (h) {
8391          var g = d.retrieve("tip:" + h);
8392          if (!g) {
8393            g = function (i) {
8394              this["ElementCust" + h.capitalize()].apply(this, [i, d]);
8395            }.bind(this);
8396          }
8397          d.store("tip:" + h, g).addEvent("mouse" + h, g);
8398        }, this);
8399      }, this);
8400      return this;
8401    },
8402    detach: function (b) {
8403      $$(b).each(function (d) {
8404        ["enter", "leave", "move"].each(function (e) {
8405          d.removeEvent("mouse" + e, d.retrieve("tip:" + e)).eliminate(
8406            "tip:" + e
8407          );
8408        });
8409        this.fireEvent("detach", [d]);
8410        if (this.options.title == "title") {
8411          var c = d.retrieve("tip:native");
8412          if (c) {
8413            d.set("title", c);
8414          }
8415        }
8416      }, this);
8417      return this;
8418    },
8419    elementEnter: function (c, b) {
8420      clearTimeout(this.timer);
8421      this.timer = function () {
8422        this.container.empty();
8423        ["title", "text"].each(function (e) {
8424          var d = b.retrieve("tip:" + e);
8425          var f = (this["_" + e + "ElementCust"] = new ElementCust("div", {
8426            class: "tip-" + e,
8427          }).inject(this.container));
8428          if (d) {
8429            this.fill(f, d);
8430          }
8431        }, this);
8432        this.show(b);
8433        this.position(this.options.fixed ? { page: b.getPosition() } : c);
8434      }.delay(this.options.showDelay, this);
8435    },
8436    elementLeave: function (c, b) {
8437      clearTimeout(this.timer);
8438      this.timer = this.hide.delay(this.options.hideDelay, this, b);
8439      this.fireForParent(c, b);
8440    },
8441    setTitle: function (b) {
8442      if (this._titleElement) {
8443        this._titleElement.empty();
8444        this.fill(this._titleElement, b);
8445      }
8446      return this;
8447    },
8448    setText: function (b) {
8449      if (this._textElement) {
8450        this._textElement.empty();
8451        this.fill(this._textElement, b);
8452      }
8453      return this;
8454    },
8455    fireForParent: function (c, b) {
8456      b = b.getParent();
8457      if (!b || b == document.body) {
8458        return;
8459      }
8460      if (b.retrieve("tip:enter")) {
8461        b.fireEvent("mouseenter", c);
8462      } else {
8463        this.fireForParent(c, b);
8464      }
8465    },
8466    elementMove: function (c, b) {
8467      this.position(c);
8468    },
8469    position: function (f) {
8470      if (!this.tip) {
8471        document.id(this);
8472      }
8473      var c = window.getSize(),
8474        b = window.getScroll(),
8475        g = { x: this.tip.offsetWidth, y: this.tip.offsetHeight },
8476        d = { x: "left", y: "top" },
8477        e = { y: false, x2: false, y2: false, x: false },
8478        h = {};
8479      for (var i in d) {
8480        h[d[i]] = f.page[i] + this.options.offset[i];
8481        if (h[d[i]] < 0) {
8482          e[i] = true;
8483        }
8484        if (h[d[i]] + g[i] - b[i] > c[i] - this.options.windowPadding[i]) {
8485          h[d[i]] = f.page[i] - this.options.offset[i] - g[i];
8486          e[i + "2"] = true;
8487        }
8488      }
8489      this.fireEvent("bound", e);
8490      this.tip.setStyles(h);
8491    },
8492    fill: function (b, c) {
8493      if (typeof c == "string") {
8494        b.set("html", c);
8495      } else {
8496        b.adopt(c);
8497      }
8498    },
8499    show: function (b) {
8500      if (!this.tip) {
8501        document.id(this);
8502      }
8503      if (!this.tip.getParent()) {
8504        this.tip.inject(document.body);
8505      }
8506      this.fireEvent("show", [this.tip, b]);
8507    },
8508    hide: function (b) {
8509      if (!this.tip) {
8510        document.id(this);
8511      }
8512      this.fireEvent("hide", [this.tip, b]);
8513    },
8514  });
8515})();
8516(function () {
8517  var a = { json: JSON.decode };
8518  Locale.Set.defineParser = function (b, c) {
8519    a[b] = c;
8520  };
8521  Locale.Set.from = function (d, c) {
8522    if (instanceOf(d, Locale.Set)) {
8523      return d;
8524    }
8525    if (!c && typeOf(d) == "string") {
8526      c = "json";
8527    }
8528    if (a[c]) {
8529      d = a[c](d);
8530    }
8531    var b = new Locale.Set();
8532    b.sets = d.sets || {};
8533    if (d.inherits) {
8534      b.inherits.locales = Array.from(d.inherits.locales);
8535      b.inherits.sets = d.inherits.sets || {};
8536    }
8537    return b;
8538  };
8539})();
8540Locale.define("ar", "Date", {
8541  dateOrder: ["date", "month", "year"],
8542  shortDate: "%d/%m/%Y",
8543  shortTime: "%H:%M",
8544});
8545Locale.define("ar", "FormValidator", {
8546  required: "هذا الحقل مطلوب.",
8547  minLength: "رجاءً إدخال {minLength} أحرف على الأقل (تم إدخال {length} أحرف).",
8548  maxLength:
8549    "الرجاء عدم إدخال أكثر من {maxLength} أحرف (تم إدخال {length} أحرف).",
8550  integer:
8551    "الرجاء إدخال عدد صحيح في هذا الحقل. أي رقم ذو كسر عشري أو مئوي (مثال 1.25 ) غير مسموح.",
8552  numeric:
8553    'الرجاء إدخال قيم رقمية في هذا الحقل (مثال "1" أو "1.1" أو "-1" أو "-1.1").',
8554  digits:
8555    "الرجاء أستخدام قيم رقمية وعلامات ترقيمية فقط في هذا الحقل (مثال, رقم هاتف مع نقطة أو شحطة)",
8556  alpha:
8557    "الرجاء أستخدام أحرف فقط (ا-ي) في هذا الحقل. أي فراغات أو علامات غير مسموحة.",
8558  alphanum:
8559    "الرجاء أستخدام أحرف فقط (ا-ي) أو أرقام (0-9) فقط في هذا الحقل. أي فراغات أو علامات غير مسموحة.",
8560  dateSuchAs: "الرجاء إدخال تاريخ صحيح كالتالي {date}",
8561  dateInFormatMDY: "الرجاء إدخال تاريخ صحيح (مثال, 31-12-1999)",
8562  email: "الرجاء إدخال بريد إلكتروني صحيح.",
8563  url: "الرجاء إدخال عنوان إلكتروني صحيح مثل http://www.example.com",
8564  currencyDollar: "الرجاء إدخال قيمة $ صحيحة. مثال, 100.00$",
8565  oneRequired: "الرجاء إدخال قيمة في أحد هذه الحقول على الأقل.",
8566  errorPrefix: "خطأ: ",
8567  warningPrefix: "تحذير: ",
8568});
8569Locale.define("ca-CA", "Date", {
8570  months: [
8571    "Gener",
8572    "Febrer",
8573    "Març",
8574    "Abril",
8575    "Maig",
8576    "Juny",
8577    "Juli",
8578    "Agost",
8579    "Setembre",
8580    "Octubre",
8581    "Novembre",
8582    "Desembre",
8583  ],
8584  months_abbr: [
8585    "gen.",
8586    "febr.",
8587    "març",
8588    "abr.",
8589    "maig",
8590    "juny",
8591    "jul.",
8592    "ag.",
8593    "set.",
8594    "oct.",
8595    "nov.",
8596    "des.",
8597  ],
8598  days: [
8599    "Diumenge",
8600    "Dilluns",
8601    "Dimarts",
8602    "Dimecres",
8603    "Dijous",
8604    "Divendres",
8605    "Dissabte",
8606  ],
8607  days_abbr: ["dg", "dl", "dt", "dc", "dj", "dv", "ds"],
8608  dateOrder: ["date", "month", "year"],
8609  shortDate: "%d/%m/%Y",
8610  shortTime: "%H:%M",
8611  AM: "AM",
8612  PM: "PM",
8613  firstDayOfWeek: 0,
8614  ordinal: "",
8615  lessThanMinuteAgo: "fa menys d`un minut",
8616  minuteAgo: "fa un minut",
8617  minutesAgo: "fa {delta} minuts",
8618  hourAgo: "fa un hora",
8619  hoursAgo: "fa unes {delta} hores",
8620  dayAgo: "fa un dia",
8621  daysAgo: "fa {delta} dies",
8622  lessThanMinuteUntil: "menys d`un minut des d`ara",
8623  minuteUntil: "un minut des d`ara",
8624  minutesUntil: "{delta} minuts des d`ara",
8625  hourUntil: "un hora des d`ara",
8626  hoursUntil: "unes {delta} hores des d`ara",
8627  dayUntil: "1 dia des d`ara",
8628  daysUntil: "{delta} dies des d`ara",
8629});
8630Locale.define("ca-CA", "FormValidator", {
8631  required: "Aquest camp es obligatori.",
8632  minLength:
8633    "Per favor introdueix al menys {minLength} caracters (has introduit {length} caracters).",
8634  maxLength:
8635    "Per favor introdueix no mes de {maxLength} caracters (has introduit {length} caracters).",
8636  integer:
8637    "Per favor introdueix un nombre enter en aquest camp. Nombres amb decimals (p.e. 1,25) no estan permesos.",
8638  numeric:
8639    'Per favor introdueix sols valors numerics en aquest camp (p.e. "1" o "1,1" o "-1" o "-1,1").',
8640  digits:
8641    "Per favor usa sols numeros i puntuacio en aquest camp (per exemple, un nombre de telefon amb guions i punts no esta permes).",
8642  alpha:
8643    "Per favor utilitza lletres nomes (a-z) en aquest camp. No s´admitei
8643xen espais ni altres caracters.",
8644  alphanum:
8645    "Per favor, utilitza nomes lletres (a-z) o numeros (0-9) en aquest camp. No s´admiteixen espais ni altres caracters.",
8646  dateSuchAs: "Per favor introdueix una data valida com {date}",
8647  dateInFormatMDY:
8648    'Per favor introdueix una data valida com DD/MM/YYYY (p.e. "31/12/1999")',
8649  email:
8650    'Per favor, introdueix una adreça de correu electronic valida. Per exemple, "[email protected]".',
8651  url: "Per favor introdueix una URL valida com http://www.example.com.",
8652  currencyDollar:
8653    "Per favor introdueix una quantitat valida de €. Per exemple €100,00 .",
8654  oneRequired:
8655    "Per favor introdueix alguna cosa per al menys una d´aquestes entrades.",
8656  errorPrefix: "Error: ",
8657  warningPrefix: "Avis: ",
8658  noSpace: "No poden haver espais en aquesta entrada.",
8659  reqChkByNode: "No hi han elements seleccionats.",
8660  requiredChk: "Aquest camp es obligatori.",
8661  reqChkByName: "Per favor selecciona una {label}.",
8662  match: "Aquest camp necessita coincidir amb el camp {matchName}",
8663  startDate: "la data de inici",
8664  endDate: "la data de fi",
8665  currendDate: "la data actual",
8666  afterDate: "La data deu ser igual o posterior a {label}.",
8667  beforeDate: "La data deu ser igual o anterior a {label}.",
8668  startMonth: "Per favor selecciona un mes d´orige",
8669  sameMonth:
8670    "Aquestes dos dates deuen estar dins del mateix mes - deus canviar una o altra.",
8671});
8672(function () {
8673  var a = function (e, d, c, b) {
8674    if (e == 1) {
8675      return d;
8676    } else {
8677      if (e == 2 || e == 3 || e == 4) {
8678        return c;
8679      } else {
8680        return b;
8681      }
8682    }
8683  };
8684  Locale.define("cs-CZ", "Date", {
8685    months: [
8686      "Leden",
8687      "Únor",
8688      "Březen",
8689      "Duben",
8690      "Květen",
8691      "Červen",
8692      "Červenec",
8693      "Srpen",
8694      "Září",
8695      "Říjen",
8696      "Listopad",
8697      "Prosinec",
8698    ],
8699    months_abbr: [
8700      "ledna",
8701      "února",
8702      "března",
8703      "dubna",
8704      "května",
8705      "června",
8706      "července",
8707      "srpna",
8708      "září",
8709      "října",
8710      "listopadu",
8711      "prosince",
8712    ],
8713    days: [
8714      "Neděle",
8715      "Pondělí",
8716      "Úterý",
8717      "Středa",
8718      "Čtvrtek",
8719      "Pátek",
8720      "Sobota",
8721    ],
8722    days_abbr: ["ne", "po", "út", "st", "čt", "pá", "so"],
8723    dateOrder: ["date", "month", "year"],
8724    shortDate: "%d.%m.%Y",
8725    shortTime: "%H:%M",
8726    AM: "dop.",
8727    PM: "odp.",
8728    firstDayOfWeek: 1,
8729    ordinal: ".",
8730    lessThanMinuteAgo: "před chvílí",
8731    minuteAgo: "přibližně před minutou",
8732    minutesAgo: function (b) {
8733      return "před {delta} " + a(b, "minutou", "minutami", "minutami");
8734    },
8735    hourAgo: "přibližně před hodinou",
8736    hoursAgo: function (b) {
8737      return "před {delta} " + a(b, "hodinou", "hodinami", "hodinami");
8738    },
8739    dayAgo: "před dnem",
8740    daysAgo: function (b) {
8741      return "před {delta} " + a(b, "dnem", "dny", "dny");
8742    },
8743    weekAgo: "před týdnem",
8744    weeksAgo: function (b) {
8745      return "před {delta} " + a(b, "týdnem", "týdny", "týdny");
8746    },
8747    monthAgo: "před měsícem",
8748    monthsAgo: function (b) {
8749      return "před {delta} " + a(b, "měsícem", "měsíci", "měsíci");
8750    },
8751    yearAgo: "před rokem",
8752    yearsAgo: function (b) {
8753      return "před {delta} " + a(b, "rokem", "lety", "lety");
8754    },
8755    lessThanMinuteUntil: "za chvíli",
8756    minuteUntil: "přibližně za minutu",
8757    minutesUntil: function (b) {
8758      return "za {delta} " + a(b, "minutu", "minuty", "minut");
8759    },
8760    hourUntil: "přibližně za hodinu",
8761    hoursUntil: function (b) {
8762      return "za {delta} " + a(b, "hodinu", "hodiny", "hodin");
8763    },
8764    dayUntil: "za den",
8765    daysUntil: function (b) {
8766      return "za {delta} " + a(b, "den", "dny", "dnů");
8767    },
8768    weekUntil: "za týden",
8769    weeksUntil: function (b) {
8770      return "za {delta} " + a(b, "týden", "týdny", "týdnů");
8771    },
8772    monthUntil: "za měsíc",
8773    monthsUntil: function (b) {
8774      return "za {delta} " + a(b, "měsíc", "měsíce", "měsíců");
8775    },
8776    yearUntil: "za rok",
8777    yearsUntil: function (b) {
8778      return "za {delta} " + a(b, "rok", "roky", "let");
8779    },
8780  });
8781})();
8782Locale.define("cs-CZ", "FormValidator", {
8783  required: "Tato položka je povinná.",
8784  minLength:
8785    "Zadejte prosím alespoň {minLength} znaků (napsáno {length} znaků).",
8786  maxLength:
8787    "Zadejte prosím méně než {maxLength} znaků (nápsáno {length} znaků).",
8788  integer:
8789    "Zadejte prosím celé číslo. Desetinná čísla (např. 1.25) nejsou povolena.",
8790  numeric:
8791    'Zadejte jen číselné hodnoty (tj. "1" nebo "1.1" nebo "-1" nebo "-1.1").',
8792  digits:
8793    "Zadejte prosím pouze čísla a interpunkční znaménka(například telefonní číslo s pomlčkami nebo tečkami je povoleno).",
8794  alpha:
8795    "Zadejte prosím pouze písmena (a-z). Mezery nebo jiné znaky nejsou povoleny.",
8796  alphanum:
8797    "Zadejte prosím pouze písmena (a-z) nebo číslice (0-9). Mezery nebo jiné znaky nejsou povoleny.",
8798  dateSuchAs: "Zadejte prosím platné datum jako {date}",
8799  dateInFormatMDY:
8800    'Zadejte prosím platné datum jako MM / DD / RRRR (tj. "12/31/1999")',
8801  email:
8802    'Zadejte prosím platnou e-mailovou adresu. Například "[email protected]".',
8803  url: "Zadejte prosím platnou URL adresu jako http://www.example.com.",
8804  currencyDollar: "Zadejte prosím platnou částku. Například $100.00.",
8805  oneRequired: "Zadejte prosím alespoň jednu hodnotu pro tyto položky.",
8806  errorPrefix: "Chyba: ",
8807  warningPrefix: "Upozornění: ",
8808  noSpace: "V této položce nejsou povoleny mezery",
8809  reqChkByNode: "Nejsou vybrány žádné položky.",
8810  requiredChk: "Tato položka je vyžadována.",
8811  reqChkByName: "Prosím vyberte {label}.",
8812  match: "Tato položka se musí shodovat s položkou {matchName}",
8813  startDate: "datum zahájení",
8814  endDate: "datum ukončení",
8815  currendDate: "aktuální datum",
8816  afterDate: "Datum by mělo být stejné nebo větší než {label}.",
8817  beforeDate: "Datum by mělo být stejné nebo menší než {label}.",
8818  startMonth: "Vyberte počáteční měsíc.",
8819  sameMonth:
8820    "Tyto dva datumy musí být ve stejném měsíci - změňte jeden z nich.",
8821  creditcard:
8822    "Zadané číslo kreditní karty je neplatné. Prosím opravte ho. Bylo zadáno {length} čísel.",
8823});
8824Locale.define("da-DK", "Date", {
8825  months: [
8826    "Januar",
8827    "Februar",
8828    "Marts",
8829    "April",
8830    "Maj",
8831    "Juni",
8832    "Juli",
8833    "August",
8834    "September",
8835    "Oktober",
8836    "November",
8837    "December",
8838  ],
8839  months_abbr: [
8840    "jan.",
8841    "feb.",
8842    "mar.",
8843    "apr.",
8844    "maj.",
8845    "jun.",
8846    "jul.",
8847    "aug.",
8848    "sep.",
8849    "okt.",
8850    "nov.",
8851    "dec.",
8852  ],
8853  days: [
8854    "Søndag",
8855    "Mandag",
8856    "Tirsdag",
8857    "Onsdag",
8858    "Torsdag",
8859    "Fredag",
8860    "Lørdag",
8861  ],
8862  days_abbr: ["søn", "man", "tir", "ons", "tor", "fre", "lør"],
8863  dateOrder: ["date", "month", "year"],
8864  shortDate: "%d-%m-%Y",
8865  shortTime: "%H:%M",
8866  AM: "AM",
8867  PM: "PM",
8868  firstDayOfWeek: 1,
8869  ordinal: ".",
8870  lessThanMinuteAgo: "mindre end et minut siden",
8871  minuteAgo: "omkring et minut siden",
8872  minutesAgo: "{delta} minutter siden",
8873  hourAgo: "omkring en time siden",
8874  hoursAgo: "omkring {delta} timer siden",
8875  dayAgo: "1 dag siden",
8876  daysAgo: "{delta} dage siden",
8877  weekAgo: "1 uge siden",
8878  weeksAgo: "{delta} uger siden",
8879  monthAgo: "1 måned siden",
8880  monthsAgo: "{delta} måneder siden",
8881  yearAgo: "1 år siden",
8882  yearsAgo: "{delta} år siden",
8883  lessThanMinuteUntil: "mindre end et minut fra nu",
8884  minuteUntil: "omkring et minut fra nu",
8885  minutesUntil: "{delta} minutter fra nu",
8886  hourUntil: "omkring en time fra nu",
8887  hoursUntil: "omkring {delta} timer fra nu",
8888  dayUntil: "1 dag fra nu",
8889  daysUntil: "{delta} dage fra nu",
8890  weekUntil: "1 uge fra nu",
8891  weeksUntil: "{delta} uger fra nu",
8892  monthUntil: "1 måned fra nu",
8893  monthsUntil: "{delta} måneder fra nu",
8894  yearUntil: "1 år fra nu",
8895  yearsUntil: "{delta} år fra nu",
8896});
8897Locale.define("da-DK", "FormValidator", {
8898  required: "Feltet skal udfyldes.",
8899  minLength: "Skriv mindst {minLength} tegn (du skrev {length} tegn).",
8900  maxLength: "Skriv maksimalt {maxLength} tegn (du skrev {length} tegn).",
8901  integer:
8902    "Skriv et tal i dette felt. Decimal tal (f.eks. 1.25) er ikke tilladt.",
8903  numeric:
8904    'Skriv kun tal i dette felt (i.e. "1" eller "1.1" eller "-1" eller "-1.1").',
8905  digits:
8906    "Skriv kun tal og tegnsætning i dette felt (eksempel, et telefon nummer med bindestreg eller punktum er tilladt).",
8907  alpha:
8908    "Skriv kun bogstaver (a-z) i dette felt. Mellemrum og andre tegn er ikke tilladt.",
8909  alphanum:
8910    "Skriv kun bogstaver (a-z) eller tal (0-9) i dette felt. Mellemrum og andre tegn er ikke tilladt.",
8911  dateSuchAs: "Skriv en gyldig dato som {date}",
8912  dateInFormatMDY: 'Skriv dato i formatet DD-MM-YYYY (f.eks. "31-12-1999")',
8913  email: 'Skriv en gyldig e-mail adresse. F.eks "[email protected]".',
8914  url: 'Skriv en gyldig URL adresse. F.eks "http://www.example.com".',
8915  currencyDollar: "Skriv et gldigt beløb. F.eks Kr.100.00 .",
8916  oneRequired: "Et eller flere af felterne i denne formular skal udfyldes.",
8917  errorPrefix: "Fejl: ",
8918  warningPrefix: "Advarsel: ",
8919  noSpace: "Der må ikke benyttes mellemrum i dette felt.",
8920  reqChkByNode: "Foretag et valg.",
8921  requiredChk: "Dette felt skal udfyldes.",
8922  reqChkByName: "Vælg en {label}.",
8923  match: "Dette felt skal matche {matchName} feltet",
8924  startDate: "start dato",
8925  endDate: "slut dato",
8926  currendDate: "dags dato",
8927  afterDate: "Datoen skal være større end eller lig med {label}.",
8928  beforeDate: "Datoen skal være mindre end eller lig med {label}.",
8929  startMonth: "Vælg en start måned",
8930  sameMonth: "De valgte datoer skal være i samme måned - skift en af dem.",
8931});
8932Locale.define("de-DE", "Date", {
8933  months: [
8934    "Januar",
8935    "Februar",
8936    "März",
8937    "April",
8938    "Mai",
8939    "Juni",
8940    "Juli",
8941    "August",
8942    "September",
8943    "Oktober",
8944    "November",
8945    "Dezember",
8946  ],
8947  months_abbr: [
8948    "Jan",
8949    "Feb",
8950    "Mär",
8951    "Apr",
8952    "Mai",
8953    "Jun",
8954    "Jul",
8955    "Aug",
8956    "Sep",
8957    "Okt",
8958    "Nov",
8959    "Dez",
8960  ],
8961  days: [
8962    "Sonntag",
8963    "Montag",
8964    "Dienstag",
8965    "Mittwoch",
8966    "Donnerstag",
8967    "Freitag",
8968    "Samstag",
8969  ],
8970  days_abbr: ["So.", "Mo.", "Di.", "Mi.", "Do.", "Fr.", "Sa."],
8971  dateOrder: ["date", "month", "year"],
8972  shortDate: "%d.%m.%Y",
8973  shortTime: "%H:%M",
8974  AM: "vormittags",
8975  PM: "nachmittags",
8976  firstDayOfWeek: 1,
8977  ordinal: ".",
8978  lessThanMinuteAgo: "vor weniger als einer Minute",
8979  minuteAgo: "vor einer Minute",
8980  minutesAgo: "vor {delta} Minuten",
8981  hourAgo: "vor einer Stunde",
8982  hoursAgo: "vor {delta} Stunden",
8983  dayAgo: "vor einem Tag",
8984  daysAgo: "vor {delta} Tagen",
8985  weekAgo: "vor einer Woche",
8986  weeksAgo: "vor {delta} Wochen",
8987  monthAgo: "vor einem Monat",
8988  monthsAgo: "vor {delta} Monaten",
8989  yearAgo: "vor einem Jahr",
8990  yearsAgo: "vor {delta} Jahren",
8991  lessThanMinuteUntil: "in weniger als einer Minute",
8992  minuteUntil: "in einer Minute",
8993  minutesUntil: "in {delta} Minuten",
8994  hourUntil: "in ca. einer Stunde",
8995  hoursUntil: "in ca. {delta} Stunden",
8996  dayUntil: "in einem Tag",
8997  daysUntil: "in {delta} Tagen",
8998  weekUntil: "in einer Woche",
8999  weeksUntil: "in {delta} Wochen",
9000  monthUntil: "in einem Monat",
9001  monthsUntil: "in {delta} Monaten",
9002  yearUntil: "in einem Jahr",
9003  yearsUntil: "in {delta} Jahren",
9004});
9005Locale.define("de-CH").inherit("de-DE", "Date");
9006Locale.define("de-CH", "FormValidator", {
9007  required: "Dieses Feld ist obligatorisch.",
9008  minLength:
9009    "Geben Sie bitte mindestens {minLength} Zeichen ein (Sie haben {length} Zeichen eingegeben).",
9010  maxLength:
9011    "Bitte geben Sie nicht mehr als {maxLength} Zeichen ein (Sie haben {length} Zeichen eingegeben).",
9012  integer:
9013    "Geben Sie bitte eine ganze Zahl ein. Dezimalzahlen (z.B. 1.25) sind nicht erlaubt.",
9014  numeric:
9015    "Geben Sie bitte nur Zahlenwerte in dieses Eingabefeld ein (z.B. &quot;1&quot;, &quot;1.1&quot;, &quot;-1&quot; oder &quot;-1.1&quot;).",
9016  digits:
9017    "Benutzen Sie bitte nur Zahlen und Satzzeichen in diesem Eingabefeld (erlaubt ist z.B. eine Telefonnummer mit Bindestrichen und Punkten).",
9018  alpha:
9019    "Benutzen Sie bitte nur Buchstaben (a-z) in diesem Feld. Leerzeichen und andere Zeichen sind nicht erlaubt.",
9020  alphanum:
9021    "Benutzen Sie bitte nur Buchstaben (a-z) und Zahlen (0-9) in diesem Eingabefeld. Leerzeichen und andere Zeichen sind nicht erlaubt.",
9022  dateSuchAs:
9023    "Geben Sie bitte ein g&uuml;ltiges Datum ein. Wie zum Beispiel {date}",
9024  dateInFormatMDY:
9025    "Geben Sie bitte ein g&uuml;ltiges Datum ein. Wie zum Beispiel TT.MM.JJJJ (z.B. &quot;31.12.1999&quot;)",
9026  email:
9027    "Geben Sie bitte eine g&uuml;ltige E-Mail Adresse ein. Wie zum Beispiel &quot;[email protected]&quot;.",
9028  url: "Geben Sie bitte eine g&uuml;ltige URL ein. Wie zum Beispiel http://www.example.com.",
9029  currencyDollar:
9030    "Geben Sie bitte einen g&uuml;ltigen Betrag in Schweizer Franken ein. Wie zum Beispiel 100.00 CHF .",
9031  oneRequired:
9032    "Machen Sie f&uuml;r mindestens eines der Eingabefelder einen Eintrag.",
9033  errorPrefix: "Fehler: ",
9034  warningPrefix: "Warnung: ",
9035  noSpace: "In diesem Eingabefeld darf kein Leerzeichen sein.",
9036  reqChkByNode: "Es wurden keine Elemente gew&auml;hlt.",
9037  requiredChk: "Dieses Feld ist obligatorisch.",
9038  reqChkByName: "Bitte w&auml;hlen Sie ein {label}.",
9039  match:
9040    "Dieses Eingabefeld muss mit dem Feld {matchName} &uuml;bereinstimmen.",
9041  startDate: "Das Anfangsdatum",
9042  endDate: "Das Enddatum",
9043  currendDate: "Das aktuelle Datum",
9044  afterDate:
9045    "Das Datum sollte zur gleichen Zeit oder sp&auml;ter sein {label}.",
9046  beforeDate:
9047    "Das Datum sollte zur gleichen Zeit oder fr&uuml;her sein {label}.",
9048  startMonth: "W&auml;hlen Sie bitte einen Anfangsmonat",
9049  sameMonth:
9050    "Diese zwei Datumsangaben m&uuml;ssen im selben Monat sein - Sie m&uuml;ssen eine von beiden ver&auml;ndern.",
9051  creditcard:
9052    "Die eingegebene Kreditkartennummer ist ung&uuml;ltig. Bitte &uuml;berpr&uuml;fen Sie diese und versuchen Sie es erneut. {length} Zahlen eingegeben.",
9053});
9054Locale.define("de-DE", "FormValidator", {
9055  required: "Dieses Eingabefeld muss ausgefüllt werden.",
9056  minLength:
9057    "Geben Sie bitte mindestens {minLength} Zeichen ein (Sie haben nur {length} Zeichen eingegeben).",
9058  maxLength:
9059    "Geben Sie bitte nicht mehr als {maxLength} Zeichen ein (Sie haben {length} Zeichen eingegeben).",
9060  integer:
9061    'Geben Sie in diesem Eingabefeld bitte eine ganze Zahl ein. Dezimalzahlen (z.B. "1.25") sind nicht erlaubt.',
9062  numeric:
9063    'Geben Sie in diesem Eingabefeld bitte nur Zahlenwerte (z.B. "1", "1.1", "-1" oder "-1.1") ein.',
9064  digits:
9065    "Geben Sie in diesem Eingabefeld bitte nur Zahlen und Satzzeichen ein (z.B. eine Telefonnummer mit Bindestrichen und Punkten ist erlaubt).",
9066  alpha:
9067    "Geben Sie in diesem Eingabefeld bitte nur Buchstaben (a-z) ein. Leerzeichen und andere Zeichen sind nicht erlaubt.",
9068  alphanum:
9069    "Geben Sie in diesem Eingabefeld bitte nur Buchstaben (a-z) und Zahlen (0-9) ein. Leerzeichen oder andere Zeichen sind nicht erlaubt.",
9070  dateSuchAs: 'Geben Sie bitte ein gültiges Datum ein (z.B. "{date}").',
9071  dateInFormatMDY:
9072    'Geben Sie bitte ein gültiges Datum im Format TT.MM.JJJJ ein (z.B. "31.12.1999").',
9073  email:
9074    'Geben Sie bitte eine gültige E-Mail-Adresse ein (z.B. "[email protected]").',
9075  url: 'Geben Sie bitte eine gültige URL ein (z.B. "http://www.example.com").',
9076  currencyDollar:
9077    "Geben Sie bitte einen gültigen Betrag in EURO ein (z.B. 100.00€).",
9078  oneRequired: "Bitte füllen Sie mindestens ein Eingabefeld aus.",
9079  errorPrefix: "Fehler: ",
9080  warningPrefix: "Warnung: ",
9081  noSpace: "Es darf kein Leerzeichen in diesem Eingabefeld sein.",
9082  reqChkByNode: "Es wurden keine Elemente gewählt.",
9083  requiredChk: "Dieses Feld muss ausgefüllt werden.",
9084  reqChkByName: "Bitte wählen Sie ein {label}.",
9085  match:
9086    "Dieses Eingabefeld muss mit dem {matchName} Eingabefeld übereinstimmen.",
9087  startDate: "Das Anfangsdatum",
9088  endDate: "Das Enddatum",
9089  currendDate: "Das aktuelle Datum",
9090  afterDate: "Das Datum sollte zur gleichen Zeit oder später sein als {label}.",
9091  beforeDate:
9092    "Das Datum sollte zur gleichen Zeit oder früher sein als {label}.",
9093  startMonth: "Wählen Sie bitte einen Anfangsmonat",
9094  sameMonth:
9095    "Diese zwei Datumsangaben müssen im selben Monat sein - Sie müssen eines von beiden verändern.",
9096  creditcard:
9097    "Die eingegebene Kreditkartennummer ist ungültig. Bitte überprüfen Sie diese und versuchen Sie es erneut. {length} Zahlen eingegeben.",
9098});
9099Locale.define("EU", "Number", {
9100  decimal: ",",
9101  group: ".",
9102  currency: { prefix: "€ " },
9103});
9104Locale.define("de-DE").inherit("EU", "Number");
9105Locale.define("en-GB", "Date", {
9106  dateOrder: ["date", "month", "year"],
9107  shortDate: "%d/%m/%Y",
9108  shortTime: "%H:%M",
9109}).inherit("en-US", "Date");
9110Locale.define("es-ES", "Date", {
9111  months: [
9112    "Enero",
9113    "Febrero",
9114    "Marzo",
9115    "Abril",
9116    "Mayo",
9117    "Junio",
9118    "Julio",
9119    "Agosto",
9120    "Septiembre",
9121    "Octubre",
9122    "Noviembre",
9123    "Diciembre",
9124  ],
9125  months_abbr: [
9126    "ene",
9127    "feb",
9128    "mar",
9129    "abr",
9130    "may",
9131    "jun",
9132    "jul",
9133    "ago",
9134    "sep",
9135    "oct",
9136    "nov",
9137    "dic",
9138  ],
9139  days: [
9140    "Domingo",
9141    "Lunes",
9142    "Martes",
9143    "Miércoles",
9144    "Jueves",
9145    "Viernes",
9146    "Sábado",
9147  ],
9148  days_abbr: ["dom", "lun", "mar", "mié", "juv", "vie", "sáb"],
9149  dateOrder: ["date", "month", "year"],
9150  shortDate: "%d/%m/%Y",
9151  shortTime: "%H:%M",
9152  AM: "AM",
9153  PM: "PM",
9154  firstDayOfWeek: 1,
9155  ordinal: "",
9156  lessThanMinuteAgo: "hace menos de un minuto",
9157  minuteAgo: "hace un minuto",
9158  minutesAgo: "hace {delta} minutos",
9159  hourAgo: "hace una hora",
9160  hoursAgo: "hace unas {delta} horas",
9161  dayAgo: "hace un día",
9162  daysAgo: "hace {delta} días",
9163  weekAgo: "hace una semana",
9164  weeksAgo: "hace unas {delta} semanas",
9165  monthAgo: "hace un mes",
9166  monthsAgo: "hace {delta} meses",
9167  yearAgo: "hace un año",
9168  yearsAgo: "hace {delta} años",
9169  lessThanMinuteUntil: "menos de un minuto desde ahora",
9170  minuteUntil: "un minuto desde ahora",
9171  minutesUntil: "{delta} minutos desde ahora",
9172  hourUntil: "una hora desde ahora",
9173  hoursUntil: "unas {delta} horas desde ahora",
9174  dayUntil: "un día desde ahora",
9175  daysUntil: "{delta} días desde ahora",
9176  weekUntil: "una semana desde ahora",
9177  weeksUntil: "unas {delta} semanas desde ahora",
9178  monthUntil: "un mes desde ahora",
9179  monthsUntil: "{delta} meses desde ahora",
9180  yearUntil: "un año desde ahora",
9181  yearsUntil: "{delta} años desde ahora",
9182});
9183Locale.define("es-AR").inherit("es-ES", "Date");
9184Locale.define("es-AR", "FormValidator", {
9185  required: "Este campo es obligatorio.",
9186  minLength:
9187    "Por favor ingrese al menos {minLength} caracteres (ha ingresado {length} caracteres).",
9188  maxLength:
9189    "Por favor no ingrese más de {maxLength} caracteres (ha ingresado {length} caracteres).",
9190  integer:
9191    "Por favor ingrese un número entero en este campo. Números con decimales (p.e. 1,25) no se permiten.",
9192  numeric:
9193    'Por favor ingrese solo valores numéricos en este campo (p.e. "1" o "1,1" o "-1" o "-1,1").',
9194  digits:
9195    "Por favor use sólo números y puntuación en este campo (por ejemplo, un número de teléfono con guiones y/o puntos no está permitido).",
9196  alpha:
9197    "Por favor use sólo letras (a-z) en este campo. No se permiten espacios ni otros caracteres.",
9198  alphanum:
9199    "Por favor, usa sólo letras (a-z) o números (0-9) en este campo. No se permiten espacios u otros caracteres.",
9200  dateSuchAs: "Por favor ingrese una fecha válida como {date}",
9201  dateInFormatMDY:
9202    'Por favor ingrese una fecha válida, utulizando el formato DD/MM/YYYY (p.e. "31/12/1999")',
9203  email:
9204    'Por favor, ingrese una dirección de e-mail válida. Por ejemplo, "[email protected]".',
9205  url: "Por favor ingrese una URL válida como http://www.example.com.",
9206  currencyDollar:
9207    "Por favor ingrese una cantidad válida de pesos. Por ejemplo $100,00 .",
9208  oneRequired:
9209    "Por favor ingrese algo para por lo menos una de estas entradas.",
9210  errorPrefix: "Error: ",
9211  warningPrefix: "Advertencia: ",
9212  noSpace: "No se permiten espacios en este campo.",
9213  reqChkByNode: "No hay elementos seleccionados.",
9214  requiredChk: "Este campo es obligatorio.",
9215  reqChkByName: "Por favor selecciona una {label}.",
9216  match: "Este campo necesita coincidir con el campo {matchName}",
9217  startDate: "la fecha de inicio",
9218  endDate: "la fecha de fin",
9219  currendDate: "la fecha actual",
9220  afterDate: "La fecha debe ser igual o posterior a {label}.",
9221  beforeDate: "La fecha debe ser igual o anterior a {label}.",
9222  startMonth: "Por favor selecciona un mes de origen",
9223  sameMonth:
9224    "Estas dos fechas deben estar en el mismo mes - debes cambiar una u otra.",
9225});
9226Locale.define("es-ES", "FormValidator", {
9227  required: "Este campo es obligatorio.",
9228  minLength:
9229    "Por favor introduce al menos {minLength} caracteres (has introducido {length} caracteres).",
9230  maxLength:
9231    "Por favor introduce no m&aacute;s de {maxLength} caracteres (has introducido {length} caracteres).",
9232  integer:
9233    "Por favor introduce un n&uacute;mero entero en este campo. N&uacute;meros con decimales (p.e. 1,25) no se permiten.",
9234  numeric:
9235    'Por favor introduce solo valores num&eacute;ricos en este campo (p.e. "1" o "1,1" o "-1" o "-1,1").',
9236  digits:
9237    "Por favor usa solo n&uacute;meros y puntuaci&oacute;n en este campo (por ejemplo, un n&uacute;mero de tel&eacute;fono con guiones y puntos no esta permitido).",
9238  alpha:
9239    "Por favor usa letras solo (a-z) en este campo. No se admiten espacios ni otros caracteres.",
9240  alphanum:
9241    "Por favor, usa solo letras (a-z) o n&uacute;meros (0-9) en este campo. No se admiten espacios ni otros caracteres.",
9242  dateSuchAs: "Por favor introduce una fecha v&aacute;lida como {date}",
9243  dateInFormatMDY:
9244    'Por favor introduce una fecha v&aacute;lida como DD/MM/YYYY (p.e. "31/12/1999")',
9245  email:
9246    'Por favor, introduce una direcci&oacute;n de email v&aacute;lida. Por ejemplo, "[email protected]".',
9247  url: "Por favor introduce una URL v&aacute;lida como http://www.example.com.",
9248  currencyDollar:
9249    "Por favor introduce una cantidad v&aacute;lida de €. Por ejemplo €100,00 .",
9250  oneRequired:
9251    "Por favor introduce algo para por lo menos una de estas entradas.",
9252  errorPrefix: "Error: ",
9253  warningPrefix: "Aviso: ",
9254  noSpace: "No pueden haber espacios en esta entrada.",
9255  reqChkByNode: "No hay elementos seleccionados.",
9256  requiredChk: "Este campo es obligatorio.",
9257  reqChkByName: "Por favor selecciona una {label}.",
9258  match: "Este campo necesita coincidir con el campo {matchName}",
9259  startDate: "la fecha de inicio",
9260  endDate: "la fecha de fin",
9261  currendDate: "la fecha actual",
9262  afterDate: "La fecha debe ser igual o posterior a {label}.",
9263  beforeDate: "La fecha debe ser igual o anterior a {label}.",
9264  startMonth: "Por favor selecciona un mes de origen",
9265  sameMonth:
9266    "Estas dos fechas deben estar en el mismo mes - debes cambiar una u otra.",
9267});
9268Locale.define("et-EE", "Date", {
9269  months: [
9270    "jaanuar",
9271    "veebruar",
9272    "märts",
9273    "aprill",
9274    "mai",
9275    "juuni",
9276    "juuli",
9277    "august",
9278    "september",
9279    "oktoober",
9280    "november",
9281    "detsember",
9282  ],
9283  months_abbr: [
9284    "jaan",
9285    "veebr",
9286    "märts",
9287    "apr",
9288    "mai",
9289    "juuni",
9290    "juuli",
9291    "aug",
9292    "sept",
9293    "okt",
9294    "nov",
9295    "dets",
9296  ],
9297  days: [
9298    "pühapäev",
9299    "esmaspäev",
9300    "teisipäev",
9301    "kolmapäev",
9302    "neljapäev",
9303    "reede",
9304    "laupäev",
9305  ],
9306  days_abbr: ["pühap", "esmasp", "teisip", "kolmap", "neljap", "reede", "laup"],
9307  dateOrder: ["month", "date", "year"],
9308  shortDate: "%m.%d.%Y",
9309  shortTime: "%H:%M",
9310  AM: "AM",
9311  PM: "PM",
9312  firstDayOfWeek: 1,
9313  ordinal: "",
9314  lessThanMinuteAgo: "vähem kui minut aega tagasi",
9315  minuteAgo: "umbes minut aega tagasi",
9316  minutesAgo: "{delta} minutit tagasi",
9317  hourAgo: "umbes tund aega tagasi",
9318  hoursAgo: "umbes {delta} tundi tagasi",
9319  dayAgo: "1 päev tagasi",
9320  daysAgo: "{delta} päeva tagasi",
9321  weekAgo: "1 nädal tagasi",
9322  weeksAgo: "{delta} nädalat tagasi",
9323  monthAgo: "1 kuu tagasi",
9324  monthsAgo: "{delta} kuud tagasi",
9325  yearAgo: "1 aasta tagasi",
9326  yearsAgo: "{delta} aastat tagasi",
9327  lessThanMinuteUntil: "vähem kui minuti aja pärast",
9328  minuteUntil: "umbes minuti aja pärast",
9329  minutesUntil: "{delta} minuti pärast",
9330  hourUntil: "umbes tunni aja pärast",
9331  hoursUntil: "umbes {delta} tunni pärast",
9332  dayUntil: "1 päeva pärast",
9333  daysUntil: "{delta} päeva pärast",
9334  weekUntil: "1 nädala pärast",
9335  weeksUntil: "{delta} nädala pärast",
9336  monthUntil: "1 kuu pärast",
9337  monthsUntil: "{delta} kuu pärast",
9338  yearUntil: "1 aasta pärast",
9339  yearsUntil: "{delta} aasta pärast",
9340});
9341Locale.define("et-EE", "FormValidator", {
9342  required: "Väli peab olema täidetud.",
9343  minLength:
9344    "Palun sisestage vähemalt {minLength} tähte (te sisestasite {length} tähte).",
9345  maxLength:
9346    "Palun ärge sisestage rohkem kui {maxLength} tähte (te sisestasite {length} tähte).",
9347  integer:
9348    "Palun sisestage väljale täisarv. Kümnendarvud (näiteks 1.25) ei ole lubatud.",
9349  numeric:
9350    'Palun sisestage ainult numbreid väljale (näiteks "1", "1.1", "-1" või "-1.1").',
9351  digits:
9352    "Palun kasutage ainult numbreid ja kirjavahemärke (telefoninumbri sisestamisel on lubatud kasutada kriipse ja punkte).",
9353  alpha:
9354    "Palun kasutage ainult tähti (a-z). Tühikud ja teised sümbolid on keelatud.",
9355  alphanum:
9356    "Palun kasutage ainult tähti (a-z) või numbreid (0-9). Tühikud ja teised sümbolid on keelatud.",
9357  dateSuchAs: "Palun sisestage kehtiv kuupäev kujul {date}",
9358  dateInFormatMDY:
9359    'Palun sisestage kehtiv kuupäev kujul MM.DD.YYYY (näiteks: "12.31.1999").',
9360  email: 'Palun sisestage kehtiv e-maili aadress (näiteks: "[email protected]").',
9361  url: "Palun sisestage kehtiv URL (näiteks: http://www.example.com).",
9362  currencyDollar: "Palun sisestage kehtiv $ summa (näiteks: $100.00).",
9363  oneRequired: "Palun sisestage midagi vähemalt ühele antud väljadest.",
9364  errorPrefix: "Viga: ",
9365  warningPrefix: "Hoiatus: ",
9366  noSpace: "Väli ei tohi sisaldada tühikuid.",
9367  reqChkByNode: "Ükski väljadest pole valitud.",
9368  requiredChk: "Välja täitmine on vajalik.",
9369  reqChkByName: "Palun valige üks {label}.",
9370  match: "Väli peab sobima {matchName} väljaga",
9371  startDate: "algkuupäev",
9372  endDate: "lõppkuupäev",
9373  currendDate: "praegune kuupäev",
9374  afterDate: "Kuupäev peab olema võrdne või pärast {label}.",
9375  beforeDate: "Kuupäev peab olema võrdne või enne {label}.",
9376  startMonth: "Palun valige algkuupäev.",
9377  sameMonth:
9378    "Antud kaks kuupäeva peavad olema samas kuus - peate muutma ühte kuupäeva.",
9379});
9380Locale.define("fa", "Date", {
9381  months: [
9382    "ژانویه",
9383    "فوریه",
9384    "مارس",
9385    "آپریل",
9386    "مه",
9387    "ژوئن",
9388    "ژوئیه",
9389    "آگوست",
9390    "سپتامبر",
9391    "اکتبر",
9392    "نوامبر",
9393    "دسامبر",
9394  ],
9395  months_abbr: ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"],
9396  days: ["یکشنبه", "دوشنبه", "سه شنبه", "چهارشنبه", "پنجشنبه", "جمعه", "شنبه"],
9397  days_abbr: ["ي", "د", "س", "چ", "پ", "ج", "ش"],
9398  dateOrder: ["month", "date", "year"],
9399  shortDate: "%m/%d/%Y",
9400  shortTime: "%I:%M%p",
9401  AM: "ق.ظ",
9402  PM: "ب.ظ",
9403  ordinal: "ام",
9404  lessThanMinuteAgo: "کمتر از یک دقیقه پیش",
9405  minuteAgo: "حدود یک دقیقه پیش",
9406  minutesAgo: "{delta} دقیقه پیش",
9407  hourAgo: "حدود یک ساعت پیش",
9408  hoursAgo: "حدود {delta} ساعت پیش",
9409  dayAgo: "1 روز پیش",
9410  daysAgo: "{delta} روز پیش",
9411  weekAgo: "1 هفته پیش",
9412  weeksAgo: "{delta} هفته پیش",
9413  monthAgo: "1 ماه پیش",
9414  monthsAgo: "{delta} ماه پیش",
9415  yearAgo: "1 سال پیش",
9416  yearsAgo: "{delta} سال پیش",
9417  lessThanMinuteUntil: "کمتر از یک دقیقه از حالا",
9418  minuteUntil: "حدود یک دقیقه از حالا",
9419  minutesUntil: "{delta} دقیقه از حالا",
9420  hourUntil: "حدود یک ساعت از حالا",
9421  hoursUntil: "حدود {delta} ساعت از حالا",
9422  dayUntil: "1 روز از حالا",
9423  daysUntil: "{delta} روز از حالا",
9424  weekUntil: "1 هفته از حالا",
9425  weeksUntil: "{delta} هفته از حالا",
9426  monthUntil: "1 ماه از حالا",
9427  monthsUntil: "{delta} ماه از حالا",
9428  yearUntil: "1 سال از حالا",
9429  yearsUntil: "{delta} سال از حالا",
9430});
9431Locale.define("fa", "FormValidator", {
9432  required: "این فیلد الزامی است.",
9433  minLength:
9434    "شما باید حداقل {minLength} حرف وارد کنید ({length} حرف وارد کرده اید).",
9435  maxLength:
9436    "لطفا حداکثر {maxLength} حرف وارد کنید (شما {length} حرف وارد کرده اید).",
9437  integer:
9438    "لطفا از عدد صحیح استفاده کنید. اعداد اعشاری (مانند 1.25) مجاز نیستند.",
9439  numeric:
9440    'لطفا فقط داده عددی وارد کنید (مانند "1" یا "1.1" یا "1-" یا "1.1-").',
9441  digits:
9442    "لطفا فقط از اعداد و علامتها در این فیلد استفاده کنید (برای مثال شماره تلفن با خط تیره و نقطه قابل قبول است).",
9443  alpha:
9444    "لطفا فقط از حروف الفباء برای این بخش استفاده کنید. کاراکترهای دیگر و فاصله مجاز نیستند.",
9445  alphanum:
9446    "لطفا فقط از حروف الفباء و اعداد در این بخش استفاده کنید. کاراکترهای دیگر و فاصله مجاز نیستند.",
9447  dateSuchAs: "لطفا یک تاریخ معتبر مانند {date} وارد کنید.",
9448  dateInFormatMDY:
9449    'لطفا یک تاریخ معتبر به شکل MM/DD/YYYY وارد کنید (مانند "12/31/1999").',
9450  email: 'لطفا یک آدرس ایمیل معتبر وارد کنید. برای مثال "[email protected]".',
9451  url: "لطفا یک URL معتبر مانند http://www.example.com وارد کنید.",
9452  currencyDollar: "لطفا یک محدوده معتبر برای این بخش وارد کنید مانند 100.00$ .",
9453  oneRequired: "لطفا حداقل یکی از فیلدها را پر کنید.",
9454  errorPrefix: "خطا: ",
9455  warningPrefix: "هشدار: ",
9456  noSpace: "استفاده از فاصله در این بخش مجاز نیست.",
9457  reqChkByNode: "موردی انتخاب نشده است.",
9458  requiredChk: "این فیلد الزامی است.",
9459  reqChkByName: "لطفا یک {label} را انتخاب کنید.",
9460  match: "این فیلد باید با فیلد {matchName} مطابقت داشته باشد.",
9461  startDate: "تاریخ شروع",
9462  endDate: "تاریخ پایان",
9463  currendDate: "تاریخ کنونی",
9464  afterDate: "تاریخ میبایست برابر یا بعد از {label} باشد",
9465  beforeDate: "تاریخ میبایست برابر یا قبل از {label} باشد",
9466  startMonth: "لطفا ماه شروع را انتخاب کنید",
9467  sameMonth:
9468    "این دو تاریخ باید در یک ماه باشند - شما باید یکی یا هر دو را تغییر دهید.",
9469  creditcard:
9470    "شماره کارت اعتباری که وارد کرده اید معتبر نیست. لطفا شماره را بررسی کنید و مجددا تلاش کنید. {length} رقم وارد شده است.",
9471});
9472Locale.define("fi-FI", "Date", {
9473  months: [
9474    "tammikuu",
9475    "helmikuu",
9476    "maaliskuu",
9477    "huhtikuu",
9478    "toukokuu",
9479    "kesäkuu",
9480    "heinäkuu",
9481    "elokuu",
9482    "syyskuu",
9483    "lokakuu",
9484    "marraskuu",
9485    "joulukuu",
9486  ],
9487  months_abbr: [
9488    "tammik.",
9489    "helmik.",
9490    "maalisk.",
9491    "huhtik.",
9492    "toukok.",
9493    "kesäk.",
9494    "heinäk.",
9495    "elok.",
9496    "syysk.",
9497    "lokak.",
9498    "marrask.",
9499    "jouluk.",
9500  ],
9501  days: [
9502    "sunnuntai",
9503    "maanantai",
9504    "tiistai",
9505    "keskiviikko",
9506    "torstai",
9507    "perjantai",
9508    "lauantai",
9509  ],
9510  days_abbr: ["su", "ma", "ti", "ke", "to", "pe", "la"],
9511  dateOrder: ["date", "month", "year"],
9512  shortDate: "%d.%m.%Y",
9513  shortTime: "%H:%M",
9514  AM: "AM",
9515  PM: "PM",
9516  firstDayOfWeek: 1,
9517  ordinal: ".",
9518  lessThanMinuteAgo: "vajaa minuutti sitten",
9519  minuteAgo: "noin minuutti sitten",
9520  minutesAgo: "{delta} minuuttia sitten",
9521  hourAgo: "noin tunti sitten",
9522  hoursAgo: "noin {delta} tuntia sitten",
9523  dayAgo: "päivä sitten",
9524  daysAgo: "{delta} päivää sitten",
9525  weekAgo: "viikko sitten",
9526  weeksAgo: "{delta} viikkoa sitten",
9527  monthAgo: "kuukausi sitten",
9528  monthsAgo: "{delta} kuukautta sitten",
9529  yearAgo: "vuosi sitten",
9530  yearsAgo: "{delta} vuotta sitten",
9531  lessThanMinuteUntil: "vajaan minuutin kuluttua",
9532  minuteUntil: "noin minuutin kuluttua",
9533  minutesUntil: "{delta} minuutin kuluttua",
9534  hourUntil: "noin tunnin kuluttua",
9535  hoursUntil: "noin {delta} tunnin kuluttua",
9536  dayUntil: "päivän kuluttua",
9537  daysUntil: "{delta} päivän kuluttua",
9538  weekUntil: "viikon kuluttua",
9539  weeksUntil: "{delta} viikon kuluttua",
9540  monthUntil: "kuukauden kuluttua",
9541  monthsUntil: "{delta} kuukauden kuluttua",
9542  yearUntil: "vuoden kuluttua",
9543  yearsUntil: "{delta} vuoden kuluttua",
9544});
9545Locale.define("fi-FI", "FormValidator", {
9546  required: "Tämä kenttä on pakollinen.",
9547  minLength:
9548    "Ole hyvä ja anna vähintään {minLength} merkkiä (annoit {length} merkkiä).",
9549  maxLength:
9550    "Älä anna enempää kuin {maxLength} merkkiä (annoit {length} merkkiä).",
9551  integer:
9552    "Ole hyvä ja anna kokonaisluku. Luvut, joissa on desimaaleja (esim. 1.25) eivät ole sallittuja.",
9553  numeric:
9554    'Anna tähän kenttään lukuarvo (kuten "1" tai "1.1" tai "-1" tai "-1.1").',
9555  digits:
9556    "Käytä pelkästään numeroita ja välimerkkejä tässä kentässä (syötteet, kuten esim. puhelinnumero, jossa on väliviivoja, pilkkuja tai pisteitä, kelpaa).",
9557  alpha:
9558    "Anna tähän kenttään vain kirjaimia (a-z). Välilyönnit tai muut merkit eivät ole sallittuja.",
9559  alphanum:
9560    "Anna tähän kenttään vain kirjaimia (a-z) tai numeroita (0-9). Välilyönnit tai muut merkit eivät ole sallittuja.",
9561  dateSuchAs:
9562    "Ole hyvä ja anna kelvollinen päivmäärä, kuten esimerkiksi {date}",
9563  dateInFormatMDY:
9564    'Ole hyvä ja anna kelvollinen päivämäärä muodossa pp/kk/vvvv (kuten "12/31/1999")',
9565  email:
9566    'Ole hyvä ja anna kelvollinen sähköpostiosoite (kuten esimerkiksi "[email protected]").',
9567  url: "Ole hyvä ja anna kelvollinen URL, kuten esimerkiksi http://www.example.com.",
9568  currencyDollar:
9569    "Ole hyvä ja anna kelvollinen eurosumma (kuten esimerkiksi 100,00 EUR) .",
9570  oneRequired: "Ole hyvä ja syötä jotakin ainakin johonkin näistä kentistä.",
9571  errorPrefix: "Virhe: ",
9572  warningPrefix: "Varoitus: ",
9573  noSpace: "Tässä syötteessä ei voi olla välilyöntejä",
9574  reqChkByNode: "Ei valintoja.",
9575  requiredChk: "Tämä kenttä on pakollinen.",
9576  reqChkByName: "Ole hyvä ja valitse {label}.",
9577  match: "Tämän kentän tulee vastata kenttää {matchName}",
9578  startDate: "alkupäivämäärä",
9579  endDate: "loppupäivämäärä",
9580  currendDate: "nykyinen päivämäärä",
9581  afterDate:
9582    "Päivämäärän tulisi olla sama tai myöhäisempi ajankohta kuin {label}.",
9583  beforeDate:
9584    "Päivämäärän tulisi olla sama tai aikaisempi ajankohta kuin {label}.",
9585  startMonth: "Ole hyvä ja valitse aloituskuukausi",
9586  sameMonth:
9587    "Näiden kahden päivämäärän tulee olla saman kuun sisällä -- sinun pitää muuttaa jompaa kumpaa.",
9588  creditcard:
9589    "Annettu luottokortin numero ei kelpaa. Ole hyvä ja tarkista numero sekä yritä uudelleen. {length} numeroa syötetty.",
9590});
9591Locale.define("fi-FI", "Number", { group: " " }).inherit("EU", "Number");
9592Locale.define("fr-FR", "Date", {
9593  months: [
9594    "Janvier",
9595    "Février",
9596    "Mars",
9597    "Avril",
9598    "Mai",
9599    "Juin",
9600    "Juillet",
9601    "Août",
9602    "Septembre",
9603    "Octobre",
9604    "Novembre",
9605    "Décembre",
9606  ],
9607  months_abbr: [
9608    "janv.",
9609    "févr.",
9610    "mars",
9611    "avr.",
9612    "mai",
9613    "juin",
9614    "juil.",
9615    "août",
9616    "sept.",
9617    "oct.",
9618    "nov.",
9619    "déc.",
9620  ],
9621  days: [
9622    "Dimanche",
9623    "Lundi",
9624    "Mardi",
9625    "Mercredi",
9626    "Jeudi",
9627    "Vendredi",
9628    "Samedi",
9629  ],
9630  days_abbr: ["dim.", "lun.", "mar.", "mer.", "jeu.", "ven.", "sam."],
9631  dateOrder: ["date", "month", "year"],
9632  shortDate: "%d/%m/%Y",
9633  shortTime: "%H:%M",
9634  AM: "AM",
9635  PM: "PM",
9636  firstDayOfWeek: 1,
9637  ordinal: function (a) {
9638    return a > 1 ? "" : "er";
9639  },
9640  lessThanMinuteAgo: "il y a moins d'une minute",
9641  minuteAgo: "il y a une minute",
9642  minutesAgo: "il y a {delta} minutes",
9643  hourAgo: "il y a une heure",
9644  hoursAgo: "il y a {delta} heures",
9645  dayAgo: "il y a un jour",
9646  daysAgo: "il y a {delta} jours",
9647  weekAgo: "il y a une semaine",
9648  weeksAgo: "il y a {delta} semaines",
9649  monthAgo: "il y a 1 mois",
9650  monthsAgo: "il y a {delta} mois",
9651  yearthAgo: "il y a 1 an",
9652  yearsAgo: "il y a {delta} ans",
9653  lessThanMinuteUntil: "dans moins d'une minute",
9654  minuteUntil: "dans une minute",
9655  minutesUntil: "dans {delta} minutes",
9656  hourUntil: "dans une heure",
9657  hoursUntil: "dans {delta} heures",
9658  dayUntil: "dans un jour",
9659  daysUntil: "dans {delta} jours",
9660  weekUntil: "dans 1 semaine",
9661  weeksUntil: "dans {delta} semaines",
9662  monthUntil: "dans 1 mois",
9663  monthsUntil: "dans {delta} mois",
9664  yearUntil: "dans 1 an",
9665  yearsUntil: "dans {delta} ans",
9666});
9667Locale.define("fr-FR", "FormValidator", {
9668  required: "Ce champ est obligatoire.",
9669  length:
9670    "Veuillez saisir {length} caract&egrave;re(s) (vous avez saisi {elLength} caract&egrave;re(s)",
9671  minLength:
9672    "Veuillez saisir un minimum de {minLength} caract&egrave;re(s) (vous avez saisi {length} caract&egrave;re(s)).",
9673  maxLength:
9674    "Veuillez saisir un maximum de {maxLength} caract&egrave;re(s) (vous avez saisi {length} caract&egrave;re(s)).",
9675  integer:
9676    'Veuillez saisir un nombre entier dans ce champ. Les nombres d&eacute;cimaux (ex : "1,25") ne sont pas autoris&eacute;s.',
9677  numeric:
9678    'Veuillez saisir uniquement des chiffres dans ce champ (ex : "1" ou "1,1" ou "-1" ou "-1,1").',
9679  digits:
9680    "Veuillez saisir uniquement des chiffres et des signes de ponctuation dans ce champ (ex : un num&eacute;ro de t&eacute;l&eacute;phone avec des traits d'union est autoris&eacute;).",
9681  alpha:
9682    "Veuillez saisir uniquement des lettres (a-z) dans ce champ. Les espaces ou autres caract&egrave;res ne sont pas autoris&eacute;s.",
9683  alphanum:
9684    "Veuillez saisir uniquement des lettres (a-z) ou des chiffres (0-9) dans ce champ. Les espaces ou autres caract&egrave;res ne sont pas autoris&eacute;s.",
9685  dateSuchAs: "Veuillez saisir une date correcte comme {date}",
9686  dateInFormatMDY:
9687    'Veuillez saisir une date correcte, au format JJ/MM/AAAA (ex : "31/11/1999").',
9688  email:
9689    'Veuillez saisir une adresse de courrier &eacute;lectronique. Par example "[email protected]".',
9690  url: "Veuillez saisir une URL, comme http://www.example.com.",
9691  currencyDollar:
9692    "Veuillez saisir une quantit&eacute; correcte. Par example 100,00&euro;.",
9693  oneRequired: "Veuillez s&eacute;lectionner au moins une de ces options.",
9694  errorPrefix: "Erreur : ",
9695  warningPrefix: "Attention : ",
9696  noSpace: "Ce champ n'accepte pas les espaces.",
9697  reqChkByNode: "Aucun &eacute;l&eacute;ment n'est s&eacute;lectionn&eacute;.",
9698  requiredChk: "Ce champ est obligatoire.",
9699  reqChkByName: "Veuillez s&eacute;lectionner un(e) {label}.",
9700  match: "Ce champ doit correspondre avec le champ {matchName}.",
9701  startDate: "date de d&eacute;but",
9702  endDate: "date de fin",
9703  currendDate: "date actuelle",
9704  afterDate:
9705    "La date doit &ecirc;tre identique ou post&eacute;rieure &agrave; {label}.",
9706  beforeDate:
9707    "La date doit &ecirc;tre identique ou ant&eacute;rieure &agrave; {label}.",
9708  startMonth: "Veuillez s&eacute;lectionner un mois de d&eacute;but.",
9709  sameMonth:
9710    "Ces deux dates doivent &ecirc;tre dans le m&ecirc;me mois - vous devez en modifier une.",
9711  creditcard:
9712    "Le num&eacute;ro de carte de cr&eacute;dit est invalide. Merci de v&eacute;rifier le num&eacute;ro et de r&eacute;essayer. Vous avez entr&eacute; {length} chiffre(s).",
9713});
9714Locale.define("fr-FR", "Number", { group: " " }).inherit("EU", "Number");
9715Locale.define("he-IL", "Date", {
9716  months: [
9717    "ינואר",
9718    "פברואר",
9719    "מרץ",
9720    "אפריל",
9721    "מאי",
9722    "יוני",
9723    "יולי",
9724    "אוגוסט",
9725    "ספטמבר",
9726    "אוקטובר",
9727    "נובמבר",
9728    "דצמבר",
9729  ],
9730  months_abbr: [
9731    "ינואר",
9732    "פברואר",
9733    "מרץ",
9734    "אפריל",
9735    "מאי",
9736    "יוני",
9737    "יולי",
9738    "אוגוסט",
9739    "ספטמבר",
9740    "אוקטובר",
9741    "נובמבר",
9742    "דצמבר",
9743  ],
9744  days: ["ראשון", "שני", "שלישי", "רביעי", "חמישי", "שישי", "שבת"],
9745  days_abbr: ["ראשון", "שני", "שלישי", "רביעי", "חמישי", "שישי", "שבת"],
9746  dateOrder: ["date", "month", "year"],
9747  shortDate: "%d/%m/%Y",
9748  shortTime: "%H:%M",
9749  AM: "AM",
9750  PM: "PM",
9751  firstDayOfWeek: 0,
9752  ordinal: "",
9753  lessThanMinuteAgo: "לפני פחות מדקה",
9754  minuteAgo: "לפני כדקה",
9755  minutesAgo: "לפני {delta} דקות",
9756  hourAgo: "לפני כשעה",
9757  hoursAgo: "לפני {delta} שעות",
9758  dayAgo: "לפני יום",
9759  daysAgo: "לפני {delta} ימים",
9760  weekAgo: "לפני שבוע",
9761  weeksAgo: "לפני {delta} שבועות",
9762  monthAgo: "לפני חודש",
9763  monthsAgo: "לפני {delta} חודשים",
9764  yearAgo: "לפני שנה",
9765  yearsAgo: "לפני {delta} שנים",
9766  lessThanMinuteUntil: "בעוד פחות מדקה",
9767  minuteUntil: "בעוד כדקה",
9768  minutesUntil: "בעוד {delta} דקות",
9769  hourUntil: "בעוד כשעה",
9770  hoursUntil: "בעוד {delta} שעות",
9771  dayUntil: "בעוד יום",
9772  daysUntil: "בעוד {delta} ימים",
9773  weekUntil: "בעוד שבוע",
9774  weeksUntil: "בעוד {delta} שבועות",
9775  monthUntil: "בעוד חודש",
9776  monthsUntil: "בעוד {delta} חודשים",
9777  yearUntil: "בעוד שנה",
9778  yearsUntil: "בעוד {delta} שנים",
9779});
9780Locale.define("he-IL", "FormValidator", {
9781  required: "נא למלא שדה זה.",
9782  minLength: "נא להזין לפחות {minLength} תווים (הזנת {length} תווים).",
9783  maxLength: "נא להזין עד {maxLength} תווים (הזנת {length} תווים).",
9784  integer: "נא להזין מספר שלם לשדה זה. מספרים עשרוניים (כמו 1.25) אינם חוקיים.",
9785  numeric: 'נא להזין ערך מספרי בלבד בשדה זה (כמו "1", "1.1", "-1" או "-1.1").',
9786  digits:
9787    "נא להזין רק ספרות וסימני הפרדה בשדה זה (למשל, מספר טלפון עם מקפים או נקודות הוא חוקי).",
9788  alpha:
9789    "נא להזין רק אותיות באנגלית (a-z) בשדה זה. רווחים או תווים אחרים אינם חוקיים.",
9790  alphanum:
9791    "נא להזין רק אותריות באנגלית (a-z) או ספרות (0-9) בשדה זה. אווחרים או תווים אחרים אינם חוקיים.",
9792  dateSuchAs: "נא להזין תאריך חוקי, כמו {date}",
9793  dateInFormatMDY: 'נא להזין תאריך חוקי בפורמט MM/DD/YYYY (כמו "12/31/1999")',
9794  email: 'נא להזין כתובת אימייל חוקית. לדוגמה: "[email protected]".',
9795  url: "נא להזין כתובת אתר חוקית, כמו http://www.example.com.",
9796  currencyDollar: "נא להזין סכום דולרי חוקי. לדוגמה $100.00.",
9797  oneRequired: "נא לבחור לפחות בשדה אחד.",
9798  errorPrefix: "שגיאה: ",
9799  warningPrefix: "אזהרה: ",
9800  noSpace: "אין להזין רווחים בשדה זה.",
9801  reqChkByNode: "נא לבחור אחת מהאפשרויות.",
9802  requiredChk: "שדה זה נדרש.",
9803  reqChkByName: "נא לבחור {label}.",
9804  match: "שדה זה צריך להתאים לשדה {matchName}",
9805  startDate: "תאריך ההתחלה",
9806  endDate: "תאריך הסיום",
9807  currendDate: "התאריך הנוכחי",
9808  afterDate: "התאריך צריך להיות זהה או אחרי {label}.",
9809  beforeDate: "התאריך צריך להיות זהה או לפני {label}.",
9810  startMonth: "נא לבחור חודש התחלה",
9811  sameMonth: "שני תאריכים אלה צריכים להיות באותו חודש - נא לשנות אחד התאריכים.",
9812  creditcard:
9813    "מספר כרטיס האשראי שהוזן אינו חוקי. נא לבדוק שנית. הוזנו {length} ספרות.",
9814});
9815Locale.define("he-IL", "Number", {
9816  decimal: ".",
9817  group: ",",
9818  currency: { suffix: " ₪" },
9819});
9820Locale.define("hu-HU", "Date", {
9821  months: [
9822    "Január",
9823    "Február",
9824    "Március",
9825    "Április",
9826    "Május",
9827    "Június",
9828    "Július",
9829    "Augusztus",
9830    "Szeptember",
9831    "Október",
9832    "November",
9833    "December",
9834  ],
9835  months_abbr: [
9836    "jan.",
9837    "febr.",
9838    "márc.",
9839    "ápr.",
9840    "máj.",
9841    "jún.",
9842    "júl.",
9843    "aug.",
9844    "szept.",
9845    "okt.",
9846    "nov.",
9847    "dec.",
9848  ],
9849  days: [
9850    "Vasárnap",
9851    "Hétfő",
9852    "Kedd",
9853    "Szerda",
9854    "Csütörtök",
9855    "Péntek",
9856    "Szombat",
9857  ],
9858  days_abbr: ["V", "H", "K", "Sze", "Cs", "P", "Szo"],
9859  dateOrder: ["year", "month", "date"],
9860  shortDate: "%Y.%m.%d.",
9861  shortTime: "%I:%M",
9862  AM: "de.",
9863  PM: "du.",
9864  firstDayOfWeek: 1,
9865  ordinal: ".",
9866  lessThanMinuteAgo: "alig egy perce",
9867  minuteAgo: "egy perce",
9868  minutesAgo: "{delta} perce",
9869  hourAgo: "egy órája",
9870  hoursAgo: "{delta} órája",
9871  dayAgo: "1 napja",
9872  daysAgo: "{delta} napja",
9873  weekAgo: "1 hete",
9874  weeksAgo: "{delta} hete",
9875  monthAgo: "1 hónapja",
9876  monthsAgo: "{delta} hónapja",
9877  yearAgo: "1 éve",
9878  yearsAgo: "{delta} éve",
9879  lessThanMinuteUntil: "alig egy perc múlva",
9880  minuteUntil: "egy perc múlva",
9881  minutesUntil: "{delta} perc múlva",
9882  hourUntil: "egy óra múlva",
9883  hoursUntil: "{delta} óra múlva",
9884  dayUntil: "1 nap múlva",
9885  daysUntil: "{delta} nap múlva",
9886  weekUntil: "1 hét múlva",
9887  weeksUntil: "{delta} hét múlva",
9888  monthUntil: "1 hónap múlva",
9889  monthsUntil: "{delta} hónap múlva",
9890  yearUntil: "1 év múlva",
9891  yearsUntil: "{delta} év múlva",
9892});
9893Locale.define("hu-HU", "FormValidator", {
9894  required: "A mező kitöltése kötelező.",
9895  minLength:
9896    "Legalább {minLength} karakter megadása szükséges (megadva {length} karakter).",
9897  maxLength:
9898    "Legfeljebb {maxLength} karakter megadása lehetséges (megadva {length} karakter).",
9899  integer:
9900    "Egész szám megadása szükséges. A tizedesjegyek (pl. 1.25) nem engedélyezettek.",
9901  numeric:
9902    'Szám megadása szükséges (pl. "1" vagy "1.1" vagy "-1" vagy "-1.1").',
9903  digits:
9904    "Csak számok és írásjelek megadása lehetséges (pl. telefonszám kötőjelek és/vagy perjelekkel).",
9905  alpha:
9906    "Csak betűk (a-z) megadása lehetséges. Szóköz és egyéb karakterek nem engedélyezettek.",
9907  alphanum:
9908    "Csak betűk (a-z) vagy számok (0-9) megadása lehetséges. Szóköz és egyéb karakterek nem engedélyezettek.",
9909  dateSuchAs: "Valós dátum megadása szükséges (pl. {date}).",
9910  dateInFormatMDY:
9911    'Valós dátum megadása szükséges ÉÉÉÉ.HH.NN. formában. (pl. "1999.12.31.")',
9912  email: 'Valós e-mail cím megadása szükséges (pl. "[email protected]").',
9913  url: "Valós URL megadása szükséges (pl. http://www.example.com).",
9914  currencyDollar: "Valós pénzösszeg megadása szükséges (pl. 100.00 Ft.).",
9915  oneRequired: "Az alábbi mezők legalább egyikének kitöltése kötelező.",
9916  errorPrefix: "Hiba: ",
9917  warningPrefix: "Figyelem: ",
9918  noSpace: "A mező nem tartalmazhat szóközöket.",
9919  reqChkByNode: "Nincs egyetlen kijelölt elem sem.",
9920  requiredChk: "A mező kitöltése kötelező.",
9921  reqChkByName: "Egy {label} kiválasztása szükséges.",
9922  match: "A mezőnek egyeznie kell a(z) {matchName} mezővel.",
9923  startDate: "a kezdet dátuma",
9924  endDate: "a vég dátuma",
9925  currendDate: "jelenlegi dátum",
9926  afterDate: "A dátum nem lehet kisebb, mint {label}.",
9927  beforeDate: "A dátum nem lehet nagyobb, mint {label}.",
9928  startMonth: "Kezdeti hónap megadása szükséges.",
9929  sameMonth: "A két dátumnak ugyanazon hónapban kell lennie.",
9930  creditcard:
9931    "A megadott bankkártyaszám nem valódi (megadva {length} számjegy).",
9932});
9933Locale.define("it-IT", "Date", {
9934  months: [
9935    "Gennaio",
9936    "Febbraio",
9937    "Marzo",
9938    "Aprile",
9939    "Maggio",
9940    "Giugno",
9941    "Luglio",
9942    "Agosto",
9943    "Settembre",
9944    "Ottobre",
9945    "Novembre",
9946    "Dicembre",
9947  ],
9948  months_abbr: [
9949    "gen",
9950    "feb",
9951    "mar",
9952    "apr",
9953    "mag",
9954    "giu",
9955    "lug",
9956    "ago",
9957    "set",
9958    "ott",
9959    "nov",
9960    "dic",
9961  ],
9962  days: [
9963    "Domenica",
9964    "Lunedì",
9965    "Martedì",
9966    "Mercoledì",
9967    "Giovedì",
9968    "Venerdì",
9969    "Sabato",
9970  ],
9971  days_abbr: ["dom", "lun", "mar", "mer", "gio", "ven", "sab"],
9972  dateOrder: ["date", "month", "year"],
9973  shortDate: "%d/%m/%Y",
9974  shortTime: "%H.%M",
9975  AM: "AM",
9976  PM: "PM",
9977  firstDayOfWeek: 1,
9978  ordinal: "º",
9979  lessThanMinuteAgo: "meno di un minuto fa",
9980  minuteAgo: "circa un minuto fa",
9981  minutesAgo: "circa {delta} minuti fa",
9982  hourAgo: "circa un'ora fa",
9983  hoursAgo: "circa {delta} ore fa",
9984  dayAgo: "circa 1 giorno fa",
9985  daysAgo: "circa {delta} giorni fa",
9986  weekAgo: "una settimana fa",
9987  weeksAgo: "{delta} settimane fa",
9988  monthAgo: "un mese fa",
9989  monthsAgo: "{delta} mesi fa",
9990  yearAgo: "un anno fa",
9991  yearsAgo: "{delta} anni fa",
9992  lessThanMinuteUntil: "tra meno di un minuto",
9993  minuteUntil: "tra circa un minuto",
9994  minutesUntil: "tra circa {delta} minuti",
9995  hourUntil: "tra circa un'ora",
9996  hoursUntil: "tra circa {delta} ore",
9997  dayUntil: "tra circa un giorno",
9998  daysUntil: "tra circa {delta} giorni",
9999  weekUntil: "tra una settimana",
10000  weeksUntil: "tra {delta} settimane",
10001  monthUntil: "tra un mese",
10002  monthsUntil: "tra {delta} mesi",
10003  yearUntil: "tra un anno",
10004  yearsUntil: "tra {delta} anni",
10005});
10006Locale.define("it-IT", "FormValidator", {
10007  required: "Il campo &egrave; obbligatorio.",
10008  minLength:
10009    "Inserire almeno {minLength} caratteri (ne sono stati inseriti {length}).",
10010  maxLength:
10011    "Inserire al massimo {maxLength} caratteri (ne sono stati inseriti {length}).",
10012  integer:
10013    "Inserire un numero intero. Non sono consentiti decimali (es.: 1.25).",
10014  numeric:
10015    'Inserire solo valori numerici (es.: "1" oppure "1.1" oppure "-1" oppure "-1.1").',
10016  digits:
10017    "Inserire solo numeri e caratteri di punteggiatura. Per esempio &egrave; consentito un numero telefonico con trattini o punti.",
10018  alpha:
10019    "Inserire solo lettere (a-z). Non sono consentiti spazi o altri caratteri.",
10020  alphanum:
10021    "Inserire solo lettere (a-z) o numeri (0-9). Non sono consentiti spazi o altri caratteri.",
10022  dateSuchAs: "Inserire una data valida del tipo {date}",
10023  dateInFormatMDY:
10024    'Inserire una data valida nel formato MM/GG/AAAA (es.: "12/31/1999")',
10025  email: 'Inserire un indirizzo email valido. Per esempio "[email protected]".',
10026  url: 'Inserire un indirizzo valido. Per esempio "http://www.example.com".',
10027  currencyDollar: 'Inserire un importo valido. Per esempio "$100.00".',
10028  oneRequired: "Completare almeno uno dei campi richiesti.",
10029  errorPrefix: "Errore: ",
10030  warningPrefix: "Attenzione: ",
10031  noSpace: "Non sono consentiti spazi.",
10032  reqChkByNode: "Nessuna voce selezionata.",
10033  requiredChk: "Il campo &egrave; obbligatorio.",
10034  reqChkByName: "Selezionare un(a) {label}.",
10035  match: "Il valore deve corrispondere al campo {matchName}",
10036  startDate: "data d'inizio",
10037  endDate: "data di fine",
10038  currendDate: "data attuale",
10039  afterDate: "La data deve corrispondere o essere successiva al {label}.",
10040  beforeDate: "La data deve corrispondere o essere precedente al {label}.",
10041  startMonth: "Selezionare un mese d'inizio",
10042  sameMonth:
10043    "Le due date devono essere dello stesso mese - occorre modificarne una.",
10044});
10045Locale.define("ja-JP", "Date", {
10046  months: [
10047    "1月",
10048    "2月",
10049    "3月",
10050    "4月",
10051    "5月",
10052    "6月",
10053    "7月",
10054    "8月",
10055    "9月",
10056    "10月",
10057    "11月",
10058    "12月",
10059  ],
10060  months_abbr: [
10061    "1月",
10062    "2月",
10063    "3月",
10064    "4月",
10065    "5月",
10066    "6月",
10067    "7月",
10068    "8月",
10069    "9月",
10070    "10月",
10071    "11月",
10072    "12月",
10073  ],
10074  days: ["日曜日", "月曜日", "火曜日", "水曜日", "木曜日", "金曜日", "土曜日"],
10075  days_abbr: ["日", "月", "火", "水", "木", "金", "土"],
10076  dateOrder: ["year", "month", "date"],
10077  shortDate: "%Y/%m/%d",
10078  shortTime: "%H:%M",
10079  AM: "午前",
10080  PM: "午後",
10081  firstDayOfWeek: 0,
10082  ordinal: "",
10083  lessThanMinuteAgo: "1分以内前",
10084  minuteAgo: "約1分前",
10085  minutesAgo: "約{delta}分前",
10086  hourAgo: "約1時間前",
10087  hoursAgo: "約{delta}時間前",
10088  dayAgo: "1日前",
10089  daysAgo: "{delta}日前",
10090  weekAgo: "1週間前",
10091  weeksAgo: "{delta}週間前",
10092  monthAgo: "1ヶ月前",
10093  monthsAgo: "{delta}ヶ月前",
10094  yearAgo: "1年前",
10095  yearsAgo: "{delta}年前",
10096  lessThanMinuteUntil: "今から約1分以内",
10097  minuteUntil: "今から約1分",
10098  minutesUntil: "今から約{delta}分",
10099  hourUntil: "今から約1時間",
10100  hoursUntil: "今から約{delta}時間",
10101  dayUntil: "今から1日間",
10102  daysUntil: "今から{delta}日間",
10103  weekUntil: "今から1週間",
10104  weeksUntil: "今から{delta}週間",
10105  monthUntil: "今から1ヶ月",
10106  monthsUntil: "今から{delta}ヶ月",
10107  yearUntil: "今から1年",
10108  yearsUntil: "今から{delta}年",
10109});
10110Locale.define("ja-JP", "FormValidator", {
10111  required: "入力は必須です。",
10112  minLength: "入力文字数は{minLength}以上にしてください。({length}文字)",
10113  maxLength: "入力文字数は{maxLength}以下にしてください。({length}文字)",
10114  integer: "整数を入力してください。",
10115  numeric: '入力できるのは数値だけです。(例: "1", "1.1", "-1", "-1.1"....)',
10116  digits: "入力できるのは数値と句読記号です。 (例: -や+を含む電話番号など).",
10117  alpha: "入力できるのは半角英字だけです。それ以外の文字は入力できません。",
10118  alphanum:
10119    "入力できるのは半角英数字だけです。それ以外の文字は入力できません。",
10120  dateSuchAs: "有効な日付を入力してください。{date}",
10121  dateInFormatMDY: '日付の書式に誤りがあります。YYYY/MM/DD (i.e. "1999/12/31")',
10122  email: "メールアドレスに誤りがあります。",
10123  url: "URLアドレスに誤りがあります。",
10124  currencyDollar: "金額に誤りがあります。",
10125  oneRequired: "ひとつ以上入力してください。",
10126  errorPrefix: "エラー: ",
10127  warningPrefix: "警告: ",
10128  noSpace: "スペースは入力できません。",
10129  reqChkByNode: "選択されていません。",
10130  requiredChk: "この項目は必須です。",
10131  reqChkByName: "{label}を選択してください。",
10132  match: "{matchName}が入力されている場合必須です。",
10133  startDate: "開始日",
10134  endDate: "終了日",
10135  currendDate: "今日",
10136  afterDate: "{label}以降の日付にしてください。",
10137  beforeDate: "{label}以前の日付にしてください。",
10138  startMonth: "開始月を選択してください。",
10139  sameMonth: "日付が同一です。どちらかを変更してください。",
10140});
10141Locale.define("ja-JP", "Number", {
10142  decimal: ".",
10143  group: ",",
10144  currency: { decimals: 0, prefix: "\\" },
10145});
10146Locale.define("nl-NL", "Date", {
10147  months: [
10148    "januari",
10149    "februari",
10150    "maart",
10151    "april",
10152    "mei",
10153    "juni",
10154    "juli",
10155    "augustus",
10156    "september",
10157    "oktober",
10158    "november",
10159    "december",
10160  ],
10161  months_abbr: [
10162    "jan",
10163    "feb",
10164    "mrt",
10165    "apr",
10166    "mei",
10167    "jun",
10168    "jul",
10169    "aug",
10170    "sep",
10171    "okt",
10172    "nov",
10173    "dec",
10174  ],
10175  days: [
10176    "zondag",
10177    "maandag",
10178    "dinsdag",
10179    "woensdag",
10180    "donderdag",
10181    "vrijdag",
10182    "zaterdag",
10183  ],
10184  days_abbr: ["zo", "ma", "di", "wo", "do", "vr", "za"],
10185  dateOrder: ["date", "month", "year"],
10186  shortDate: "%d-%m-%Y",
10187  shortTime: "%H:%M",
10188  AM: "AM",
10189  PM: "PM",
10190  firstDayOfWeek: 1,
10191  ordinal: "e",
10192  lessThanMinuteAgo: "minder dan een minuut geleden",
10193  minuteAgo: "ongeveer een minuut geleden",
10194  minutesAgo: "{delta} minuten geleden",
10195  hourAgo: "ongeveer een uur geleden",
10196  hoursAgo: "ongeveer {delta} uur geleden",
10197  dayAgo: "een dag geleden",
10198  daysAgo: "{delta} dagen geleden",
10199  weekAgo: "een week geleden",
10200  weeksAgo: "{delta} weken geleden",
10201  monthAgo: "een maand geleden",
10202  monthsAgo: "{delta} maanden geleden",
10203  yearAgo: "een jaar geleden",
10204  yearsAgo: "{delta} jaar geleden",
10205  lessThanMinuteUntil: "over minder dan een minuut",
10206  minuteUntil: "over ongeveer een minuut",
10207  minutesUntil: "over {delta} minuten",
10208  hourUntil: "over ongeveer een uur",
10209  hoursUntil: "over {delta} uur",
10210  dayUntil: "over ongeveer een dag",
10211  daysUntil: "over {delta} dagen",
10212  weekUntil: "over een week",
10213  weeksUntil: "over {delta} weken",
10214  monthUntil: "over een maand",
10215  monthsUntil: "over {delta} maanden",
10216  yearUntil: "over een jaar",
10217  yearsUntil: "over {delta} jaar",
10218});
10219Locale.define("nl-NL", "FormValidator", {
10220  required: "Dit veld is verplicht.",
10221  length:
10222    "Vul precies {length} karakters in (je hebt {elLength} karakters ingevoerd).",
10223  minLength:
10224    "Vul minimaal {minLength} karakters in (je hebt {length} karakters ingevoerd).",
10225  maxLength:
10226    "Vul niet meer dan {maxLength} karakters in (je hebt {length} karakters ingevoerd).",
10227  integer:
10228    "Vul een getal in. Getallen met decimalen (bijvoorbeeld 1.25) zijn niet toegestaan.",
10229  numeric:
10230    'Vul alleen numerieke waarden in (bijvoorbeeld "1" of "1.1" of "-1" of "-1.1").',
10231  digits:
10232    "Vul alleen nummers en leestekens in (bijvoorbeeld een telefoonnummer met streepjes is toegestaan).",
10233  alpha:
10234    "Vul alleen letters in (a-z). Spaties en andere karakters zijn niet toegestaan.",
10235  alphanum:
10236    "Vul alleen letters (a-z) of nummers (0-9) in. Spaties en andere karakters zijn niet toegestaan.",
10237  dateSuchAs: "Vul een geldige datum in, zoals {date}",
10238  dateInFormatMDY:
10239    'Vul een geldige datum, in het formaat MM/DD/YYYY (bijvoorbeeld "12/31/1999")',
10240  email: 'Vul een geldig e-mailadres in. Bijvoorbeeld "[email protected]".',
10241  url: "Vul een geldige URL in, zoals http://www.example.com.",
10242  currencyDollar: "Vul een geldig $ bedrag in. Bijvoorbeeld $100.00 .",
10243  oneRequired: "Vul iets in bij in ieder geval een van deze velden.",
10244  warningPrefix: "Waarschuwing: ",
10245  errorPrefix: "Fout: ",
10246  noSpace: "Spaties zijn niet toegestaan in dit veld.",
10247  reqChkByNode: "Er zijn geen items geselecteerd.",
10248  requiredChk: "Dit veld is verplicht.",
10249  reqChkByName: "Selecteer een {label}.",
10250  match: "Dit veld moet overeen komen met het {matchName} veld",
10251  startDate: "de begin datum",
10252  endDate: "de eind datum",
10253  currendDate: "de huidige datum",
10254  afterDate: "De datum moet hetzelfde of na {label} zijn.",
10255  beforeDate: "De datum moet hetzelfde of voor {label} zijn.",
10256  startMonth: "Selecteer een begin maand",
10257  sameMonth:
10258    "Deze twee data moeten in dezelfde maand zijn - u moet een van beide aanpassen.",
10259  creditcard:
10260    "Het ingevulde creditcardnummer is niet geldig. Controleer het nummer en probeer opnieuw. {length} getallen ingevuld.",
10261});
10262Locale.define("nl-NL").inherit("EU", "Number");
10263Locale.define("no-NO", "Date", {
10264  dateOrder: ["date", "month", "year"],
10265  shortDate: "%d.%m.%Y",
10266  shortTime: "%H:%M",
10267  AM: "AM",
10268  PM: "PM",
10269  firstDayOfWeek: 1,
10270  lessThanMinuteAgo: "kortere enn et minutt siden",
10271  minuteAgo: "omtrent et minutt siden",
10272  minutesAgo: "{delta} minutter siden",
10273  hourAgo: "omtrent en time siden",
10274  hoursAgo: "omtrent {delta} timer siden",
10275  dayAgo: "{delta} dag siden",
10276  daysAgo: "{delta} dager siden",
10277});
10278Locale.define("no-NO", "FormValidator", {
10279  required: "Dette feltet er påkrevd.",
10280  minLength:
10281    "Vennligst skriv inn minst {minLength} tegn (du skrev {length} tegn).",
10282  maxLength:
10283    "Vennligst skriv inn maksimalt {maxLength} tegn (du skrev {length} tegn).",
10284  integer:
10285    "Vennligst skriv inn et tall i dette feltet. Tall med desimaler (for eksempel 1,25) er ikke tillat.",
10286  numeric:
10287    'Vennligst skriv inn kun numeriske verdier i dette feltet (for eksempel "1", "1.1", "-1" eller "-1.1").',
10288  digits: "Vennligst bruk kun nummer og skilletegn i dette feltet.",
10289  alpha:
10290    "Vennligst bruk kun bokstaver (a-z) i dette feltet. Ingen mellomrom eller andre tegn er tillat.",
10291  alphanum:
10292    "Vennligst bruk kun bokstaver (a-z) eller nummer (0-9) i dette feltet. Ingen mellomrom eller andre tegn er tillat.",
10293  dateSuchAs: "Vennligst skriv inn en gyldig dato, som {date}",
10294  dateInFormatMDY:
10295    'Vennligst skriv inn en gyldig dato, i formatet MM/DD/YYYY (for eksempel "12/31/1999")',
10296  email:
10297    'Vennligst skriv inn en gyldig epost-adresse. For eksempel "[email protected]".',
10298  url: "Vennligst skriv inn en gyldig URL, for eksempel http://www.example.com.",
10299  currencyDollar:
10300    "Vennligst fyll ut et gyldig $ beløp. For eksempel $100.00 .",
10301  oneRequired: "Vennligst fyll ut noe i minst ett av disse feltene.",
10302  errorPrefix: "Feil: ",
10303  warningPrefix: "Advarsel: ",
10304});
10305Locale.define("pl-PL", "Date", {
10306  months: [
10307    "Styczeń",
10308    "Luty",
10309    "Marzec",
10310    "Kwiecień",
10311    "Maj",
10312    "Czerwiec",
10313    "Lipiec",
10314    "Sierpień",
10315    "Wrzesień",
10316    "Październik",
10317    "Listopad",
10318    "Grudzień",
10319  ],
10320  months_abbr: [
10321    "sty",
10322    "lut",
10323    "mar",
10324    "kwi",
10325    "maj",
10326    "cze",
10327    "lip",
10328    "sie",
10329    "wrz",
10330    "paź",
10331    "lis",
10332    "gru",
10333  ],
10334  days: [
10335    "Niedziela",
10336    "Poniedziałek",
10337    "Wtorek",
10338    "Środa",
10339    "Czwartek",
10340    "Piątek",
10341    "Sobota",
10342  ],
10343  days_abbr: ["niedz.", "pon.", "wt.", "śr.", "czw.", "pt.", "sob."],
10344  dateOrder: ["year", "month", "date"],
10345  shortDate: "%Y-%m-%d",
10346  shortTime: "%H:%M",
10347  AM: "nad ranem",
10348  PM: "po południu",
10349  firstDayOfWeek: 1,
10350  ordinal: function (a) {
10351    return a > 3 && a < 21
10352      ? "ty"
10353      : ["ty", "szy", "gi", "ci", "ty"][Math.min(a % 10, 4)];
10354  },
10355  lessThanMinuteAgo: "mniej niż minute temu",
10356  minuteAgo: "około minutę temu",
10357  minutesAgo: "{delta} minut temu",
10358  hourAgo: "około godzinę temu",
10359  hoursAgo: "około {delta} godzin temu",
10360  dayAgo: "Wczoraj",
10361  daysAgo: "{delta} dni temu",
10362  lessThanMinuteUntil: "za niecałą minutę",
10363  minuteUntil: "za około minutę",
10364  minutesUntil: "za {delta} minut",
10365  hourUntil: "za około godzinę",
10366  hoursUntil: "za około {delta} godzin",
10367  dayUntil: "za 1 dzień",
10368  daysUntil: "za {delta} dni",
10369});
10370Locale.define("pl-PL", "FormValidator", {
10371  required: "To pole jest wymagane.",
10372  minLength:
10373    "Wymagane jest przynajmniej {minLength} znaków (wpisanych zostało tylko {length}).",
10374  maxLength:
10375    "Dozwolone jest nie więcej niż {maxLength} znaków (wpisanych zostało {length})",
10376  integer:
10377    "To pole wymaga liczb całych. Liczby dziesiętne (np. 1.25) są niedozwolone.",
10378  numeric:
10379    'Prosimy używać tylko numerycznych wartości w tym polu (np. "1", "1.1", "-1" lub "-1.1").',
10380  digits:
10381    "Prosimy używać liczb oraz zankow punktuacyjnych w typ polu (dla przykładu, przy numerze telefonu myślniki i kropki są dozwolone).",
10382  alpha:
10383    "Prosimy używać tylko liter (a-z) w tym polu. Spacje oraz inne znaki są niedozwolone.",
10384  alphanum:
10385    "Prosimy używać tylko liter (a-z) lub liczb (0-9) w tym polu. Spacje oraz inne znaki są niedozwolone.",
10386  dateSuchAs: "Prosimy podać prawidłową datę w formacie: {date}",
10387  dateInFormatMDY:
10388    'Prosimy podać poprawną date w formacie DD.MM.RRRR (i.e. "12.01.2009")',
10389  email: 'Prosimy podać prawidłowy adres e-mail, np. "[email protected]".',
10390  url: "Prosimy podać prawidłowy adres URL, np. http://www.example.com.",
10391  currencyDollar:
10392    "Prosimy podać prawidłową sumę w PLN. Dla przykładu: 100.00 PLN.",
10393  oneRequired: "Prosimy wypełnić chociaż jedno z pól.",
10394  errorPrefix: "Błąd: ",
10395  warningPrefix: "Uwaga: ",
10396  noSpace: "W tym polu nie mogą znajdować się spacje.",
10397  reqChkByNode: "Brak zaznaczonych elementów.",
10398  requiredChk: "To pole jest wymagane.",
10399  reqChkByName: "Prosimy wybrać z {label}.",
10400  match: "To pole musi być takie samo jak {matchName}",
10401  startDate: "data początkowa",
10402  endDate: "data końcowa",
10403  currendDate: "aktualna data",
10404  afterDate: "Podana data poinna być taka sama lub po {label}.",
10405  beforeDate: "Podana data poinna być taka sama lub przed {label}.",
10406  startMonth: "Prosimy wybrać początkowy miesiąc.",
10407  sameMonth:
10408    "Te dwie daty muszą być w zakresie tego samego miesiąca - wymagana jest zmiana któregoś z pól.",
10409});
10410Locale.define("pt-PT", "Date", {
10411  months: [
10412    "Janeiro",
10413    "Fevereiro",
10414    "Março",
10415    "Abril",
10416    "Maio",
10417    "Junho",
10418    "Julho",
10419    "Agosto",
10420    "Setembro",
10421    "Outubro",
10422    "Novembro",
10423    "Dezembro",
10424  ],
10425  months_abbr: [
10426    "Jan",
10427    "Fev",
10428    "Mar",
10429    "Abr",
10430    "Mai",
10431    "Jun",
10432    "Jul",
10433    "Ago",
10434    "Set",
10435    "Out",
10436    "Nov",
10437    "Dez",
10438  ],
10439  days: [
10440    "Domingo",
10441    "Segunda-feira",
10442    "Terça-feira",
10443    "Quarta-feira",
10444    "Quinta-feira",
10445    "Sexta-feira",
10446    "Sábado",
10447  ],
10448  days_abbr: ["Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sáb"],
10449  dateOrder: ["date", "month", "year"],
10450  shortDate: "%d-%m-%Y",
10451  shortTime: "%H:%M",
10452  AM: "AM",
10453  PM: "PM",
10454  firstDayOfWeek: 1,
10455  ordinal: "º",
10456  lessThanMinuteAgo: "há menos de um minuto",
10457  minuteAgo: "há cerca de um minuto",
10458  minutesAgo: "há {delta} minutos",
10459  hourAgo: "há cerca de uma hora",
10460  hoursAgo: "há cerca de {delta} horas",
10461  dayAgo: "há um dia",
10462  daysAgo: "há {delta} dias",
10463  weekAgo: "há uma semana",
10464  weeksAgo: "há {delta} semanas",
10465  monthAgo: "há um mês",
10466  monthsAgo: "há {delta} meses",
10467  yearAgo: "há um ano",
10468  yearsAgo: "há {delta} anos",
10469  lessThanMinuteUntil: "em menos de um minuto",
10470  minuteUntil: "em um minuto",
10471  minutesUntil: "em {delta} minutos",
10472  hourUntil: "em uma hora",
10473  hoursUntil: "em {delta} horas",
10474  dayUntil: "em um dia",
10475  daysUntil: "em {delta} dias",
10476  weekUntil: "em uma semana",
10477  weeksUntil: "em {delta} semanas",
10478  monthUntil: "em um mês",
10479  monthsUntil: "em {delta} meses",
10480  yearUntil: "em um ano",
10481  yearsUntil: "em {delta} anos",
10482});
10483Locale.define("pt-BR", "Date", { shortDate: "%d/%m/%Y" }).inherit(
10484  "pt-PT",
10485  "Date"
10486);
10487Locale.define("pt-BR", "FormValidator", {
10488  required: "Este campo é obrigatório.",
10489  minLength:
10490    "Digite pelo menos {minLength} caracteres (tamanho atual: {length}).",
10491  maxLength:
10492    "Não digite mais de {maxLength} caracteres (tamanho atual: {length}).",
10493  integer:
10494    "Por favor digite apenas um número inteiro neste campo. Não são permitidos números decimais (por exemplo, 1,25).",
10495  numeric:
10496    'Por favor digite apenas valores numéricos neste campo (por exemplo, "1" ou "1.1" ou "-1" ou "-1,1").',
10497  digits:
10498    "Por favor use apenas números e pontuação neste campo (por exemplo, um número de telefone com traços ou pontos é permitido).",
10499  alpha:
10500    "Por favor use somente letras (a-z). Espaço e outros caracteres não são permitidos.",
10501  alphanum:
10502    "Use somente letras (a-z) ou números (0-9) neste campo. Espaço e outros caracteres não são permitidos.",
10503  dateSuchAs: "Digite uma data válida, como {date}",
10504  dateInFormatMDY:
10505    'Digite uma data válida, como DD/MM/YYYY (por exemplo, "31/12/1999")',
10506  email: 'Digite um endereço de email válido. Por exemplo "[email protected]".',
10507  url: "Digite uma URL válida. Exemplo: http://www.example.com.",
10508  currencyDollar: "Digite um valor em dinheiro válido. Exemplo: R$100,00 .",
10509  oneRequired: "Digite algo para pelo menos um desses campos.",
10510  errorPrefix: "Erro: ",
10511  warningPrefix: "Aviso: ",
10512  noSpace: "Não é possível digitar espaços neste campo.",
10513  reqChkByNode: "Não foi selecionado nenhum item.",
10514  requiredChk: "Este campo é obrigatório.",
10515  reqChkByName: "Por favor digite um {label}.",
10516  match: "Este campo deve ser igual ao campo {matchName}.",
10517  startDate: "a data inicial",
10518  endDate: "a data final",
10519  currendDate: "a data atual",
10520  afterDate: "A data deve ser igual ou posterior a {label}.",
10521  beforeDate: "A data deve ser igual ou anterior a {label}.",
10522  startMonth: "Por favor selecione uma data inicial.",
10523  sameMonth:
10524    "Estas duas datas devem ter o mesmo mês - você deve modificar uma das duas.",
10525  creditcard:
10526    "O número do cartão de crédito informado é inválido. Por favor verifique o valor e tente novamente. {length} números informados.",
10527});
10528Locale.define("pt-PT", "FormValidator", {
10529  required: "Este campo é necessário.",
10530  minLength:
10531    "Digite pelo menos{minLength} caracteres (comprimento {length} caracteres).",
10532  maxLength:
10533    "Não insira mais de {maxLength} caracteres (comprimento {length} caracteres).",
10534  integer:
10535    "Digite um número inteiro neste domínio. Com números decimais (por exemplo, 1,25), não são permitidas.",
10536  numeric:
10537    'Digite apenas valores numéricos neste domínio (p.ex., "1" ou "1.1" ou "-1" ou "-1,1").',
10538  digits:
10539    "Por favor, use números e pontuação apenas neste campo (p.ex., um número de telefone com traços ou pontos é permitida).",
10540  alpha:
10541    "Por favor use somente letras (a-z), com nesta área. Não utilize espaços nem outros caracteres são permitidos.",
10542  alphanum:
10543    "Use somente letras (a-z) ou números (0-9) neste campo. Não utilize espaços nem outros caracteres são permitidos.",
10544  dateSuchAs: "Digite uma data válida, como {date}",
10545  dateInFormatMDY:
10546    'Digite uma data válida, como DD/MM/YYYY (p.ex. "31/12/1999")',
10547  email: 'Digite um endereço de email válido. Por exemplo "[email protected]".',
10548  url: "Digite uma URL válida, como http://www.example.com.",
10549  currencyDollar: "Digite um valor válido $. Por exemplo $ 100,00. ",
10550  oneRequired: "Digite algo para pelo menos um desses insumos.",
10551  errorPrefix: "Erro: ",
10552  warningPrefix: "Aviso: ",
10553});
10554(function () {
10555  var a = function (h, e, d, g, b) {
10556    var c = h % 10,
10557      f = h % 100;
10558    if (c == 1 && f != 11) {
10559      return e;
10560    } else {
10561      if ((c == 2 || c == 3 || c == 4) && !(f == 12 || f == 13 || f == 14)) {
10562        return d;
10563      } else {
10564        if (
10565          c == 0 ||
10566          c == 5 ||
10567          c == 6 ||
10568          c == 7 ||
10569          c == 8 ||
10570          c == 9 ||
10571          f == 11 ||
10572          f == 12 ||
10573          f == 13 ||
10574          f == 14
10575        ) {
10576          return g;
10577        } else {
10578          return b;
10579        }
10580      }
10581    }
10582  };
10583  Locale.define("ru-RU", "Date", {
10584    months: [
10585      "Январь",
10586      "Февраль",
10587      "Март",
10588      "Апрель",
10589      "Май",
10590      "Июнь",
10591      "Июль",
10592      "Август",
10593      "Сентябрь",
10594      "Октябрь",
10595      "Ноябрь",
10596      "Декабрь",
10597    ],
10598    months_abbr: [
10599      "янв",
10600      "февр",
10601      "март",
10602      "апр",
10603      "май",
10604      "июнь",
10605      "июль",
10606      "авг",
10607      "сент",
10608      "окт",
10609      "нояб",
10610      "дек",
10611    ],
10612    days: [
10613      "Воскресенье",
10614      "Понедельник",
10615      "Вторник",
10616      "Среда",
10617      "Четверг",
10618      "Пятница",
10619      "Суббота",
10620    ],
10621    days_abbr: ["Вс", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб"],
10622    dateOrder: ["date", "month", "year"],
10623    shortDate: "%d.%m.%Y",
10624    shortTime: "%H:%M",
10625    AM: "AM",
10626    PM: "PM",
10627    firstDayOfWeek: 1,
10628    ordinal: "",
10629    lessThanMinuteAgo: "меньше минуты назад",
10630    minuteAgo: "минуту назад",
10631    minutesAgo: function (b) {
10632      return "{delta} " + a(b, "минуту", "минуты", "минут") + " назад";
10633    },
10634    hourAgo: "час назад",
10635    hoursAgo: function (b) {
10636      return "{delta} " + a(b, "час", "часа", "часов") + " назад";
10637    },
10638    dayAgo: "вчера",
10639    daysAgo: function (b) {
10640      return "{delta} " + a(b, "день", "дня", "дней") + " назад";
10641    },
10642    weekAgo: "неделю назад",
10643    weeksAgo: function (b) {
10644      return "{delta} " + a(b, "неделя", "недели", "недель") + " назад";
10645    },
10646    monthAgo: "месяц назад",
10647    monthsAgo: function (b) {
10648      return "{delta} " + a(b, "месяц", "месяца", "месецев") + " назад";
10649    },
10650    yearAgo: "год назад",
10651    yearsAgo: function (b) {
10652      return "{delta} " + a(b, "год", "года", "лет") + " назад";
10653    },
10654    lessThanMinuteUntil: "меньше чем через минуту",
10655    minuteUntil: "через минуту",
10656    minutesUntil: function (b) {
10657      return "через {delta} " + a(b, "час", "часа", "часов") + "";
10658    },
10659    hourUntil: "через час",
10660    hoursUntil: function (b) {
10661      return "через {delta} " + a(b, "час", "часа", "часов") + "";
10662    },
10663    dayUntil: "завтра",
10664    daysUntil: function (b) {
10665      return "через {delta} " + a(b, "день", "дня", "дней") + "";
10666    },
10667    weekUntil: "через неделю",
10668    weeksUntil: function (b) {
10669      return "через {delta} " + a(b, "неделю", "недели", "недель") + "";
10670    },
10671    monthUntil: "через месяц",
10672    monthsUntil: function (b) {
10673      return "через {delta} " + a(b, "месяц", "месяца", "месецев") + "";
10674    },
10675    yearUntil: "через",
10676    yearsUntil: function (b) {
10677      return "через {delta} " + a(b, "год", "года", "лет") + "";
10678    },
10679  });
10680})();
10681Locale.define("ru-RU", "FormValidator", {
10682  required: "Это поле обязательно к заполнению.",
10683  minLength:
10684    "Пожалуйста, введите хотя бы {minLength} символов (Вы ввели {length}).",
10685  maxLength:
10686    "Пожалуйста, введите не больше {maxLength} символов (Вы ввели {length}).",
10687  integer:
10688    "Пожалуйста, введите в это поле число. Дробные числа (например 1.25) тут не разрешены.",
10689  numeric:
10690    'Пожалуйста, введите в это поле число (например "1" или "1.1", или "-1", или "-1.1").',
10691  digits:
10692    "В этом поле Вы можете использовать только цифры и знаки пунктуации (например, телефонный номер со знаками дефиса или с точками).",
10693  alpha:
10694    "В этом поле можно использовать только латинские буквы (a-z). Пробелы и другие символы запрещены.",
10695  alphanum:
10696    "В этом поле можно использовать только латинские буквы (a-z) и цифры (0-9). Пробелы и другие символы запрещены.",
10697  dateSuchAs: "Пожалуйста, введите корректную дату {date}",
10698  dateInFormatMDY:
10699    'Пожалуйста, введите дату в формате ММ/ДД/ГГГГ (например "12/31/1999")',
10700  email:
10701    'Пожалуйста, введите корректный емейл-адрес. Для примера "[email protected]".',
10702  url: "Пожалуйста, введите правильную ссылку вида http://www.example.com.",
10703  currencyDollar: "Пожалуйста, введите сумму в долларах. Например: $100.00 .",
10704  oneRequired: "Пожалуйста, выберите хоть что-нибудь в одном из этих полей.",
10705  errorPrefix: "Ошибка: ",
10706  warningPrefix: "Внимание: ",
10707});
10708(function () {
10709  var a = function (f, d, c, e, b) {
10710    return f >= 1 && f <= 3 ? arguments[f] : b;
10711  };
10712  Locale.define("si-SI", "Date", {
10713    months: [
10714      "januar",
10715      "februar",
10716      "marec",
10717      "april",
10718      "maj",
10719      "junij",
10720      "julij",
10721      "avgust",
10722      "september",
10723      "oktober",
10724      "november",
10725      "december",
10726    ],
10727    months_abbr: [
10728      "jan",
10729      "feb",
10730      "mar",
10731      "apr",
10732      "maj",
10733      "jun",
10734      "jul",
10735      "avg",
10736      "sep",
10737      "okt",
10738      "nov",
10739      "dec",
10740    ],
10741    days: [
10742      "nedelja",
10743      "ponedeljek",
10744      "torek",
10745      "sreda",
10746      "četrtek",
10747      "petek",
10748      "sobota",
10749    ],
10750    days_abbr: ["ned", "pon", "tor", "sre", "čet", "pet", "sob"],
10751    dateOrder: ["date", "month", "year"],
10752    shortDate: "%d.%m.%Y",
10753    shortTime: "%H.%M",
10754    AM: "AM",
10755    PM: "PM",
10756    firstDayOfWeek: 1,
10757    ordinal: ".",
10758    lessThanMinuteAgo: "manj kot minuto nazaj",
10759    minuteAgo: "minuto nazaj",
10760    minutesAgo: function (b) {
10761      return (
10762        "{delta} " + a(b, "minuto", "minuti", "minute", "minut") + " nazaj"
10763      );
10764    },
10765    hourAgo: "uro nazaj",
10766    hoursAgo: function (b) {
10767      return "{delta} " + a(b, "uro", "uri", "ure", "ur") + " nazaj";
10768    },
10769    dayAgo: "dan nazaj",
10770    daysAgo: function (b) {
10771      return "{delta} " + a(b, "dan", "dneva", "dni", "dni") + " nazaj";
10772    },
10773    weekAgo: "teden nazaj",
10774    weeksAgo: function (b) {
10775      return "{delta} " + a(b, "teden", "tedna", "tedne", "tednov") + " nazaj";
10776    },
10777    monthAgo: "mesec nazaj",
10778    monthsAgo: function (b) {
10779      return (
10780        "{delta} " + a(b, "mesec", "meseca", "mesece", "mesecov") + " nazaj"
10781      );
10782    },
10783    yearthAgo: "leto nazaj",
10784    yearsAgo: function (b) {
10785      return "{delta} " + a(b, "leto", "leti", "leta", "let") + " nazaj";
10786    },
10787    lessThanMinuteUntil: "še manj kot minuto",
10788    minuteUntil: "še minuta",
10789    minutesUntil: function (b) {
10790      return "še {delta} " + a(b, "minuta", "minuti", "minute", "minut");
10791    },
10792    hourUntil: "še ura",
10793    hoursUntil: function (b) {
10794      return "še {delta} " + a(b, "ura", "uri", "ure", "ur");
10795    },
10796    dayUntil: "še dan",
10797    daysUntil: function (b) {
10798      return "še {delta} " + a(b, "dan", "dneva", "dnevi", "dni");
10799    },
10800    weekUntil: "še tedn",
10801    weeksUntil: function (b) {
10802      return "še {delta} " + a(b, "teden", "tedna", "tedni", "tednov");
10803    },
10804    monthUntil: "še mesec",
10805    monthsUntil: function (b) {
10806      return "še {delta} " + a(b, "mesec", "meseca", "meseci", "mesecov");
10807    },
10808    yearUntil: "še leto",
10809    yearsUntil: function (b) {
10810      return "še {delta} " + a(b, "leto", "leti", "leta", "let");
10811    },
10812  });
10813})();
10814Locale.define("si-SI", "FormValidator", {
10815  required: "To polje je obvezno",
10816  minLength:
10817    "Prosim, vnesite vsaj {minLength} znakov (vnesli ste {length} znakov).",
10818  maxLength:
10819    "Prosim, ne vnesite več kot {maxLength} znakov (vnesli ste {length} znakov).",
10820  integer:
10821    "Prosim, vnesite celo število. Decimalna števila (kot 1,25) niso dovoljena.",
10822  numeric:
10823    'Prosim, vnesite samo numerične vrednosti (kot "1" ali "1.1" ali "-1" ali "-1.1").',
10824  digits:
10825    "Prosim, uporabite številke in ločila le na tem polju (na primer, dovoljena je telefonska številka z pomišlaji ali pikami).",
10826  alpha:
10827    "Prosim, uporabite le črke v tem plju. Presledki in drugi znaki niso dovoljeni.",
10828  alphanum:
10829    "Prosim, uporabite samo črke ali številke v tem polju. Presledki in drugi znaki niso dovoljeni.",
10830  dateSuchAs: "Prosim, vnesite pravilen datum kot {date}",
10831  dateInFormatMDY:
10832    'Prosim, vnesite pravilen datum kot MM.DD.YYYY (primer "12.31.1999")',
10833  email: 'Prosim, vnesite pravilen email naslov. Na primer "[email protected]".',
10834  url: "Prosim, vnesite pravilen URL kot http://www.example.com.",
10835  currencyDollar: "Prosim, vnesit epravilno vrednost €. Primer 100,00€ .",
10836  oneRequired: "Prosimo, vnesite nekaj za vsaj eno izmed teh polj.",
10837  errorPrefix: "Napaka: ",
10838  warningPrefix: "Opozorilo: ",
10839  noSpace: "To vnosno polje ne dopušča presledkov.",
10840  reqChkByNode: "Nič niste izbrali.",
10841  requiredChk: "To polje je obvezno",
10842  reqChkByName: "Prosim, izberite {label}.",
10843  match: "To polje se mora ujemati z poljem {matchName}",
10844  startDate: "datum začetka",
10845  endDate: "datum konca",
10846  currendDate: "trenuten datum",
10847  afterDate: "Datum bi moral biti isti ali po {label}.",
10848  beforeDate: "Datum bi moral biti isti ali pred {label}.",
10849  startMonth: "Prosim, vnesite začetni datum",
10850  sameMonth:
10851    "Ta dva datuma morata biti v istem mesecu - premeniti morate eno ali drugo.",
10852  creditcard:
10853    "Številka kreditne kartice ni pravilna. Preverite številko ali poskusite še enkrat. Vnešenih {length} znakov.",
10854});
10855Locale.define("sv-SE", "Date", {
10856  months: [
10857    "januari",
10858    "februari",
10859    "mars",
10860    "april",
10861    "maj",
10862    "juni",
10863    "juli",
10864    "augusti",
10865    "september",
10866    "oktober",
10867    "november",
10868    "december",
10869  ],
10870  months_abbr: [
10871    "jan",
10872    "feb",
10873    "mar",
10874    "apr",
10875    "maj",
10876    "jun",
10877    "jul",
10878    "aug",
10879    "sep",
10880    "okt",
10881    "nov",
10882    "dec",
10883  ],
10884  days: ["söndag", "måndag", "tisdag", "onsdag", "torsdag", "fredag", "lördag"],
10885  days_abbr: ["sön", "mån", "tis", "ons", "tor", "fre", "lör"],
10886  dateOrder: ["year", "month", "date"],
10887  shortDate: "%Y-%m-%d",
10888  shortTime: "%H:%M",
10889  AM: "",
10890  PM: "",
10891  firstDayOfWeek: 1,
10892  ordinal: "",
10893  lessThanMinuteAgo: "mindre än en minut sedan",
10894  minuteAgo: "ungefär en minut sedan",
10895  minutesAgo: "{delta} minuter sedan",
10896  hourAgo: "ungefär en timme sedan",
10897  hoursAgo: "ungefär {delta} timmar sedan",
10898  dayAgo: "1 dag sedan",
10899  daysAgo: "{delta} dagar sedan",
10900  lessThanMinuteUntil: "mindre än en minut sedan",
10901  minuteUntil: "ungefär en minut sedan",
10902  minutesUntil: "{delta} minuter sedan",
10903  hourUntil: "ungefär en timme sedan",
10904  hoursUntil: "ungefär {delta} timmar sedan",
10905  dayUntil: "1 dag sedan",
10906  daysUntil: "{delta} dagar sedan",
10907});
10908Locale.define("sv-SE", "FormValidator", {
10909  required: "Fältet är obligatoriskt.",
10910  minLength: "Ange minst {minLength} tecken (du angav {length} tecken).",
10911  maxLength: "Ange högst {maxLength} tecken (du angav {length} tecken). ",
10912  integer:
10913    "Ange ett heltal i fältet. Tal med decimaler (t.ex. 1,25) är inte tillåtna.",
10914  numeric:
10915    'Ange endast numeriska värden i detta fält (t.ex. "1" eller "1.1" eller "-1" eller "-1,1").',
10916  digits:
10917    "Använd endast siffror och skiljetecken i detta fält (till exempel ett telefonnummer med bindestreck tillåtet).",
10918  alpha:
10919    "Använd endast bokstäver (a-ö) i detta fält. Inga mellanslag eller andra tecken är tillåtna.",
10920  alphanum:
10921    "Använd endast bokstäver (a-ö) och siffror (0-9) i detta fält. Inga mellanslag eller andra tecken är tillåtna.",
10922  dateSuchAs: "Ange ett giltigt datum som t.ex. {date}",
10923  dateInFormatMDY:
10924    'Ange ett giltigt datum som t.ex. YYYY-MM-DD (i.e. "1999-12-31")',
10925  email: 'Ange en giltig e-postadress. Till exempel "[email protected]".',
10926  url: "Ange en giltig webbadress som http://www.example.com.",
10927  currencyDollar: "Ange en giltig belopp. Exempelvis 100,00.",
10928  oneRequired: "Vänligen ange minst ett av dessa alternativ.",
10929  errorPrefix: "Fel: ",
10930  warningPrefix: "Varning: ",
10931  noSpace: "Det får inte finnas några mellanslag i detta fält.",
10932  reqChkByNode: "Inga objekt är valda.",
10933  requiredChk: "Detta är ett obligatoriskt fält.",
10934  reqChkByName: "Välj en {label}.",
10935  match: "Detta fält måste matcha {matchName}",
10936  startDate: "startdatumet",
10937  endDate: "slutdatum",
10938  currendDate: "dagens datum",
10939  afterDate: "Datumet bör vara samma eller senare än {label}.",
10940  beforeDate: "Datumet bör vara samma eller tidigare än {label}.",
10941  startMonth: "Välj en start månad",
10942  sameMonth:
10943    "Dessa två datum måste vara i samma månad - du måste ändra det ena eller det andra.",
10944});
10945(function () {
10946  var a = function (j, e, c, i, b) {
10947    var h = (j / 10).toInt(),
10948      g = j % 10,
10949      f = (j / 100).toInt();
10950    if (h == 1 && j > 10) {
10951      return i;
10952    }
10953    if (g == 1) {
10954      return e;
10955    }
10956    if (g > 0 && g < 5) {
10957      return c;
10958    }
10959    return i;
10960  };
10961  Locale.define("uk-UA", "Date", {
10962    months: [
10963      "Січень",
10964      "Лютий",
10965      "Березень",
10966      "Квітень",
10967      "Травень",
10968      "Червень",
10969      "Липень",
10970      "Серпень",
10971      "Вересень",
10972      "Жовтень",
10973      "Листопад",
10974      "Грудень",
10975    ],
10976    months_abbr: [
10977      "Січ",
10978      "Лют",
10979      "Бер",
10980      "Квіт",
10981      "Трав",
10982      "Черв",
10983      "Лип",
10984      "Серп",
10985      "Вер",
10986      "Жовт",
10987      "Лист",
10988      "Груд",
10989    ],
10990    days: [
10991      "Неділя",
10992      "Понеділок",
10993      "Вівторок",
10994      "Середа",
10995      "Четвер",
10996      "П'ятниця",
10997      "Субота",
10998    ],
10999    days_abbr: ["Нд", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб"],
11000    dateOrder: ["date", "month", "year"],
11001    shortDate: "%d/%m/%Y",
11002    shortTime: "%H:%M",
11003    AM: "до полудня",
11004    PM: "по полудню",
11005    firstDayOfWeek: 1,
11006    ordinal: "",
11007    lessThanMinuteAgo: "меньше хвилини тому",
11008    minuteAgo: "хвилину тому",
11009    minutesAgo: function (b) {
11010      return "{delta} " + a(b, "хвилину", "хвилини", "хвилин") + " тому";
11011    },
11012    hourAgo: "годину тому",
11013    hoursAgo: function (b) {
11014      return "{delta} " + a(b, "годину", "години", "годин") + " тому";
11015    },
11016    dayAgo: "вчора",
11017    daysAgo: function (b) {
11018      return "{delta} " + a(b, "день", "дня", "днів") + " тому";
11019    },
11020    weekAgo: "тиждень тому",
11021    weeksAgo: function (b) {
11022      return "{delta} " + a(b, "тиждень", "тижні", "тижнів") + " тому";
11023    },
11024    monthAgo: "місяць тому",
11025    monthsAgo: function (b) {
11026      return "{delta} " + a(b, "місяць", "місяці", "місяців") + " тому";
11027    },
11028    yearAgo: "рік тому",
11029    yearsAgo: function (b) {
11030      return "{delta} " + a(b, "рік", "роки", "років") + " тому";
11031    },
11032    lessThanMinuteUntil: "за мить",
11033    minuteUntil: "через хвилину",
11034    minutesUntil: function (b) {
11035      return "через {delta} " + a(b, "хвилину", "хвилини", "хвилин");
11036    },
11037    hourUntil: "через годину",
11038    hoursUntil: function (b) {
11039      return "через {delta} " + a(b, "годину", "години", "годин");
11040    },
11041    dayUntil: "завтра",
11042    daysUntil: function (b) {
11043      return "через {delta} " + a(b, "день", "дня", "днів");
11044    },
11045    weekUntil: "через тиждень",
11046    weeksUntil: function (b) {
11047      return "через {delta} " + a(b, "тиждень", "тижні", "тижнів");
11048    },
11049    monthUntil: "через місяць",
11050    monthesUntil: function (b) {
11051      return "через {delta} " + a(b, "місяць", "місяці", "місяців");
11052    },
11053    yearUntil: "через рік",
11054    yearsUntil: function (b) {
11055      return "через {delta} " + a(b, "рік", "роки", "років");
11056    },
11057  });
11058})();
11059Locale.define("uk-UA", "FormValidator", {
11060  required: "Це поле повинне бути заповненим.",
11061  minLength: "Введіть хоча б {minLength} символів (Ви ввели {length}).",
11062  maxLength:
11063    "Кількість символів не може бути більше {maxLength} (Ви ввели {length}).",
11064  integer:
11065    "Введіть в це поле число. Дробові числа (наприклад 1.25) не дозволені.",
11066  numeric:
11067    'Введіть в це поле число (наприклад "1" або "1.1", або "-1", або "-1.1").',
11068  digits:
11069    "В цьому полі ви можете використовувати лише цифри і знаки пунктіації (наприклад, телефонний номер з знаками дефізу або з крапками).",
11070  alpha:
11071    "В цьому полі можна використовувати лише латинські літери (a-z). Пробіли і інші символи заборонені.",
11072  alphanum:
11073    "В цьому полі можна використовувати лише латинські літери (a-z) і цифри (0-9). Пробіли і інші символи заборонені.",
11074  dateSuchAs: "Введіть коректну дату {date}.",
11075  dateInFormatMDY:
11076    'Введіть дату в форматі ММ/ДД/РРРР (наприклад "12/31/2009").',
11077  email:
11078    'Введіть коректну адресу електронної пошти (наприклад "[email protected]").',
11079  url: "Введіть коректне інтернет-посилання (наприклад http://www.example.com).",
11080  currencyDollar: 'Введіть суму в доларах (наприклад "$100.00").',
11081  oneRequired: "Заповніть одне з полів.",
11082  errorPrefix: "Помилка: ",
11083  warningPrefix: "Увага: ",
11084  noSpace: "Пробіли заборонені.",
11085  reqChkByNode: "Не відмічено жодного варіанту.",
11086  requiredChk: "Це поле повинне бути віміченим.",
11087  reqChkByName: "Будь ласка, відмітьте {label}.",
11088  match: "Це поле повинно відповідати {matchName}",
11089  startDate: "початкова дата",
11090  endDate: "кінцева дата",
11091  currendDate: "сьогоднішня дата",
11092  afterDate: "Ця дата повинна бути такою ж, або пізнішою за {label}.",
11093  beforeDate: "Ця дата повинна бути такою ж, або ранішою за {label}.",
11094  startMonth: "Будь ласка, виберіть початковий місяць",
11095  sameMonth:
11096    "Ці дати повинні відноситись одного і того ж місяця. Будь ласка, змініть одну з них.",
11097  creditcard:
11098    "Номер кредитної карти введений неправильно. Будь ласка, перевірте його. Введено {length} символів.",
11099});
11100Locale.define("zh-CHS", "Date", {
11101  months: [
11102    "一月",
11103    "二月",
11104    "三月",
11105    "四月",
11106    "五月",
11107    "六月",
11108    "七月",
11109    "八月",
11110    "九月",
11111    "十月",
11112    "十一月",
11113    "十二月",
11114  ],
11115  months_abbr: [
11116    "一",
11117    "二",
11118    "三",
11119    "四",
11120    "五",
11121    "六",
11122    "七",
11123    "八",
11124    "九",
11125    "十",
11126    "十一",
11127    "十二",
11128  ],
11129  days: ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"],
11130  days_abbr: ["日", "一", "二", "三", "四", "五", "六"],
11131  dateOrder: ["year", "month", "date"],
11132  shortDate: "%Y-%m-%d",
11133  shortTime: "%I:%M%p",
11134  AM: "AM",
11135  PM: "PM",
11136  firstDayOfWeek: 1,
11137  ordinal: "",
11138  lessThanMinuteAgo: "不到1分钟前",
11139  minuteAgo: "大约1分钟前",
11140  minutesAgo: "{delta}分钟之前",
11141  hourAgo: "大约1小时前",
11142  hoursAgo: "大约{delta}小时前",
11143  dayAgo: "1天前",
11144  daysAgo: "{delta}天前",
11145  weekAgo: "1星期前",
11146  weeksAgo: "{delta}星期前",
11147  monthAgo: "1个月前",
11148  monthsAgo: "{delta}个月前",
11149  yearAgo: "1年前",
11150  yearsAgo: "{delta}年前",
11151  lessThanMinuteUntil: "从现在开始不到1分钟",
11152  minuteUntil: "从现在开始約1分钟",
11153  minutesUntil: "从现在开始约{delta}分钟",
11154  hourUntil: "从现在开始1小时",
11155  hoursUntil: "从现在开始约{delta}小时",
11156  dayUntil: "从现在开始1天",
11157  daysUntil: "从现在开始{delta}天",
11158  weekUntil: "从现在开始1星期",
11159  weeksUntil: "从现在开始{delta}星期",
11160  monthUntil: "从现在开始一个月",
11161  monthsUntil: "从现在开始{delta}个月",
11162  yearUntil: "从现在开始1年",
11163  yearsUntil: "从现在开始{delta}年",
11164});
11165Locale.define("zh-CHT", "Date", {
11166  months: [
11167    "一月",
11168    "二月",
11169    "三月",
11170    "四月",
11171    "五月",
11172    "六月",
11173    "七月",
11174    "八月",
11175    "九月",
11176    "十月",
11177    "十一月",
11178    "十二月",
11179  ],
11180  months_abbr: [
11181    "一",
11182    "二",
11183    "三",
11184    "四",
11185    "五",
11186    "六",
11187    "七",
11188    "八",
11189    "九",
11190    "十",
11191    "十一",
11192    "十二",
11193  ],
11194  days: ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"],
11195  days_abbr: ["日", "一", "二", "三", "四", "五", "六"],
11196  dateOrder: ["year", "month", "date"],
11197  shortDate: "%Y-%m-%d",
11198  shortTime: "%I:%M%p",
11199  AM: "AM",
11200  PM: "PM",
11201  firstDayOfWeek: 1,
11202  ordinal: "",
11203  lessThanMinuteAgo: "不到1分鐘前",
11204  minuteAgo: "大約1分鐘前",
11205  minutesAgo: "{delta}分鐘之前",
11206  hourAgo: "大約1小時前",
11207  hoursAgo: "大約{delta}小時前",
11208  dayAgo: "1天前",
11209  daysAgo: "{delta}天前",
11210  weekAgo: "1星期前",
11211  weeksAgo: "{delta}星期前",
11212  monthAgo: "1个月前",
11213  monthsAgo: "{delta}个月前",
11214  yearAgo: "1年前",
11215  yearsAgo: "{delta}年前",
11216  lessThanMinuteUntil: "從現在開始不到1分鐘",
11217  minuteUntil: "從現在開始約1分鐘",
11218  minutesUntil: "從現在é–
11218‹å§‹ç´„{delta}分鐘",
11219  hourUntil: "從現在開始1小時",
11220  hoursUntil: "從現在開始約{delta}小時",
11221  dayUntil: "從現在開始1天",
11222  daysUntil: "從現在開始{delta}天",
11223  weekUntil: "從現在開始1星期",
11224  weeksUntil: "從現在開始{delta}星期",
11225  monthUntil: "從現在開始一個月",
11226  monthsUntil: "從現在開始{delta}個月",
11227  yearUntil: "從現在開始1年",
11228  yearsUntil: "從現在開始{delta}年",
11229});
11230Locale.define("zh-CHS", "FormValidator", {
11231  required: "此项必填。",
11232  minLength: "请至少输入 {minLength} 个字符 (已输入 {length} 个)。",
11233  maxLength: "最多只能输入 {maxLength} 个字符 (已输入 {length} 个)。",
11234  integer: '请输入一个整数,不能包含小数点。例如:"1", "200"。',
11235  numeric: '请输入一个数字,例如:"1", "1.1", "-1", "-1.1"。',
11236  digits: "请输入由数字和标点符号组成的内容。例如电话号码。",
11237  alpha: "请输入 A-Z 的 26 个字母,不能包含空格或任何其他字符。",
11238  alphanum:
11239    "请输入 A-Z 的 26 个字母或 0-9 的 10 个数字,不能包含空格或任何其他字符。",
11240  dateSuchAs: "请输入合法的日期格式,如:{date}。",
11241  dateInFormatMDY: '请输入合法的日期格式,例如:YYYY-MM-DD ("2010-12-31")。',
11242  email: '请输入合法的电子信箱地址,例如:"[email protected]"。',
11243  url: "请输入合法的 Url 地址,例如:http://www.example.com。",
11244  currencyDollar: "请输入合法的货币符号,例如:¥100.0",
11245  oneRequired: "请至少选择一项。",
11246  errorPrefix: "错误:",
11247  warningPrefix: "警告:",
11248  noSpace: "不能包含空格。",
11249  reqChkByNode: "未选择任何内容。",
11250  requiredChk: "此项必填。",
11251  reqChkByName: "请选择 {label}.",
11252  match: "必须与{matchName}相匹配",
11253  startDate: "起始日期",
11254  endDate: "结束日期",
11255  currendDate: "当前日期",
11256  afterDate: "日期必须等于或晚于 {label}.",
11257  beforeDate: "日期必须早于或等于 {label}.",
11258  startMonth: "请选择起始月份",
11259  sameMonth: "您必须修改两个日期中的一个,以确保它们在同一月份。",
11260  creditcard: "您输入的信用卡号码不正确。当前已输入{length}个字符。",
11261});
11262Locale.define("zh-CHT", "FormValidator", {
11263  required: "此項必填。 ",
11264  minLength: "請至少輸入{minLength} 個字符(已輸入{length} 個)。 ",
11265  maxLength: "最多只能輸入{maxLength} 個字符(已輸入{length} 個)。 ",
11266  integer: '請輸入一個整數,不能包含小數點。例如:"1", "200"。 ',
11267  numeric: '請輸入一個數字,例如:"1", "1.1", "-1", "-1.1"。 ',
11268  digits: "請輸入由數字和標點符號組成的內容。例如電話號碼。 ",
11269  alpha: "請輸入AZ 的26 個字母,不能包含空格或任何其他字符。 ",
11270  alphanum:
11271    "請輸入AZ 的26 個字母或0-9 的10 個數字,不能包含空格或任何其他字符。 ",
11272  dateSuchAs: "請輸入合法的日期格式,如:{date}。 ",
11273  dateInFormatMDY: '請輸入合法的日期格式,例如:YYYY-MM-DD ("2010-12-31")。 ',
11274  email: '請輸入合法的電子信箱地址,例如:"[email protected]"。 ',
11275  url: "請輸入合法的Url 地址,例如:http://www.example.com。 ",
11276  currencyDollar: "請輸入合法的貨幣符號,例如:¥100.0",
11277  oneRequired: "請至少選擇一項。 ",
11278  errorPrefix: "錯誤:",
11279  warningPrefix: "警告:",
11280  noSpace: "不能包含空格。 ",
11281  reqChkByNode: "未選擇任何內容。 ",
11282  requiredChk: "此項必填。 ",
11283  reqChkByName: "請選擇 {label}.",
11284  match: "必須與{matchName}相匹配",
11285  startDate: "起始日期",
11286  endDate: "結束日期",
11287  currendDate: "當前日期",
11288  afterDate: "日期必須等於或晚於{label}.",
11289  beforeDate: "日期必須早於或等於{label}.",
11290  startMonth: "請選擇起始月份",
11291  sameMonth: "您必須修改兩個日期中的一個,以確保它們在同一月份。 ",
11292  creditcard: "您輸入的信用卡號碼不正確。當前已輸入{length}個字符。 ",
11293});
11294Form.Validator.add("validate-currency-yuan", {
11295  errorMsg: function () {
11296    return Form.Validator.getMsg("currencyYuan");
11297  },
11298  test: function (a) {
11299    return (
11300      Form.Validator.getValidator("IsEmpty").test(a) ||
11301      /^ï¿¥?\-?([1-9]{1}[0-9]{0,2}(\,[0-9]{3})*(\.[0-9]{0,2})?|[1-9]{1}\d*(\.[0-9]{0,2})?|0(\.[0-9]{0,2})?|(\.[0-9]{1,2})?)$/.test(
11302        a.get("value")
11303      )
11304    );
11305  },
11306});

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.