hoarder-js 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. data/CHANGELOG +2 -0
  2. data/Gemfile.lock +2 -2
  3. data/Manifest +14 -3
  4. data/assets/scripts/coffee/hoarder/form/form.coffee +47 -44
  5. data/assets/scripts/coffee/hoarder/form/form_serializer.coffee +23 -0
  6. data/assets/scripts/coffee/hoarder/form_manager.coffee +35 -19
  7. data/assets/scripts/coffee/hoarder/submitter/form_submitter.coffee +10 -15
  8. data/assets/scripts/coffee/hoarder/submitter/submitters/base_submitter.coffee +11 -0
  9. data/assets/scripts/coffee/hoarder/submitter/submitters/polling_submitter.coffee +30 -27
  10. data/assets/scripts/coffee/hoarder/submitter/submitters/simple_submitter.coffee +11 -21
  11. data/assets/scripts/coffee/hoarder/validator/constraints/alpha_constraint.coffee +8 -14
  12. data/assets/scripts/coffee/hoarder/validator/constraints/alphanumeric_constraint.coffee +8 -14
  13. data/assets/scripts/coffee/hoarder/validator/constraints/base_constraint.coffee +10 -0
  14. data/assets/scripts/coffee/hoarder/validator/constraints/credit_card_constraint.coffee +8 -14
  15. data/assets/scripts/coffee/hoarder/validator/constraints/email_constraint.coffee +8 -14
  16. data/assets/scripts/coffee/hoarder/validator/constraints/max_length_constraint.coffee +8 -14
  17. data/assets/scripts/coffee/hoarder/validator/constraints/min_length_constraint.coffee +8 -14
  18. data/assets/scripts/coffee/hoarder/validator/constraints/numeric_constraint.coffee +8 -14
  19. data/assets/scripts/coffee/hoarder/validator/constraints/phone_constraint.coffee +8 -14
  20. data/assets/scripts/coffee/hoarder/validator/constraints/required_constraint.coffee +8 -14
  21. data/assets/scripts/coffee/hoarder/validator/form_validator.coffee +30 -25
  22. data/assets/scripts/coffee/hoarder/validator/rules/validation_rule.coffee +10 -0
  23. data/assets/scripts/js/lib/bonzo.js +1151 -0
  24. data/assets/scripts/js/lib/qwery.js +369 -0
  25. data/assets/scripts/js/lib/reqwest.js +565 -0
  26. data/assets/scripts/js/patches/event_listeners.js +73 -0
  27. data/bin/hoarder.js +2807 -369
  28. data/hoarder-js.gemspec +3 -3
  29. data/spec/jasmine.yml +3 -0
  30. data/spec/runner.html +44 -34
  31. data/spec/support/fixtures.coffee +19 -0
  32. data/spec/support/lib/jasmine-fixture.js +506 -0
  33. data/spec/support/lib/jquery-1.7.1.min.js +4 -0
  34. data/spec/support/mocks.coffee +12 -37
  35. data/spec/support/requirements.coffee +0 -1
  36. data/spec/tests/form/form_serializer_spec.coffee +78 -0
  37. data/spec/tests/form/form_spec.coffee +127 -0
  38. data/spec/tests/form_manager_spec.coffee +128 -40
  39. data/spec/tests/submitter/form_submitter_spec.coffee +59 -42
  40. data/spec/tests/submitter/submitters/polling_submitter_spec.coffee +102 -57
  41. data/spec/tests/submitter/submitters/simple_submitter_spec.coffee +42 -16
  42. data/spec/tests/validator/constraints_spec.coffee +65 -57
  43. data/spec/tests/validator/form_validator_spec.coffee +39 -23
  44. data/spec/tests/validator/validation_rule_spec.coffee +14 -0
  45. metadata +16 -5
  46. data/assets/scripts/coffee/hoarder/form/form_element.coffee +0 -22
  47. data/assets/scripts/coffee/hoarder/validator/error/validation_error.coffee +0 -9
  48. data/assets/scripts/js/lib/jquery.js +0 -5
@@ -0,0 +1,73 @@
1
+ // this only brings addEventListener into IE8
2
+
3
+ (function() {
4
+ if (!Event.prototype.preventDefault) {
5
+ Event.prototype.preventDefault=function() {
6
+ this.returnValue=false;
7
+ };
8
+ }
9
+ if (!Event.prototype.stopPropagation) {
10
+ Event.prototype.stopPropagation=function() {
11
+ this.cancelBubble=true;
12
+ };
13
+ }
14
+ if (!Element.prototype.addEventListener) {
15
+ var eventListeners=[];
16
+
17
+ var addEventListener=function(type,listener /*, useCapture (will be ignored) */) {
18
+ var self=this;
19
+ var wrapper=function(e) {
20
+ e.target=e.srcElement;
21
+ e.currentTarget=self;
22
+ if (listener.handleEvent) {
23
+ listener.handleEvent(e);
24
+ } else {
25
+ listener.call(self,e);
26
+ }
27
+ };
28
+ if (type=="DOMContentLoaded") {
29
+ var wrapper2=function(e) {
30
+ if (document.readyState=="complete") {
31
+ wrapper(e);
32
+ }
33
+ };
34
+ document.attachEvent("onreadystatechange",wrapper2);
35
+ eventListeners.push({object:this,type:type,listener:listener,wrapper:wrapper2});
36
+
37
+ if (document.readyState=="complete") {
38
+ var e=new Event();
39
+ e.srcElement=window;
40
+ wrapper2(e);
41
+ }
42
+ } else {
43
+ this.attachEvent("on"+type,wrapper);
44
+ eventListeners.push({object:this,type:type,listener:listener,wrapper:wrapper});
45
+ }
46
+ };
47
+ var removeEventListener=function(type,listener /*, useCapture (will be ignored) */) {
48
+ var counter=0;
49
+ while (counter<eventListeners.length) {
50
+ var eventListener=eventListeners[counter];
51
+ if (eventListener.object==this && eventListener.type==type && eventListener.listener==listener) {
52
+ if (type=="DOMContentLoaded") {
53
+ this.detachEvent("onreadystatechange",eventListener.wrapper);
54
+ } else {
55
+ this.detachEvent("on"+type,eventListener.wrapper);
56
+ }
57
+ break;
58
+ }
59
+ ++counter;
60
+ }
61
+ };
62
+ Element.prototype.addEventListener=addEventListener;
63
+ Element.prototype.removeEventListener=removeEventListener;
64
+ if (HTMLDocument) {
65
+ HTMLDocument.prototype.addEventListener=addEventListener;
66
+ HTMLDocument.prototype.removeEventListener=removeEventListener;
67
+ }
68
+ if (Window) {
69
+ Window.prototype.addEventListener=addEventListener;
70
+ Window.prototype.removeEventListener=removeEventListener;
71
+ }
72
+ }
73
+ })();
@@ -4,83 +4,84 @@
4
4
  var formCache = null;
5
5
  var formFunc = function() {
6
6
  return (function() {
7
- var Form, FormElement;
7
+ var Form, FormSerializer;
8
8
 
9
- require("lib/jquery");
10
-
11
- FormElement = require("hoarder/form/form_element");
9
+ FormSerializer = require('hoarder/form/form_serializer');
12
10
 
13
11
  Form = (function() {
14
- function Form(formId, type) {
15
- this.type = type != null ? type : "simple";
16
- this.form = $("#" + formId);
17
- this.form.submit(function(e) {
18
- return e.preventDefault();
19
- });
20
- this.action = this.form.attr("action");
21
- this.method = this.form.attr("method");
12
+ var createElement;
13
+
14
+ function Form(formElement) {
15
+ this.formElement = formElement;
22
16
  this.addedElements = [];
23
17
  }
24
18
 
25
19
  Form.prototype.elements = function() {
26
- var element, elements, formElements, inputs, rule, selector, selects, textareas, validationRules, _i, _len;
20
+ var index, _i, _ref, _ref1, _ref2, _results;
27
21
 
28
- elements = [];
29
- inputs = this.form.find("input");
30
- if (inputs.length > 0) {
31
- elements = elements.concat(inputs.toArray());
32
- }
33
- selects = this.form.find("select");
34
- if (selects.length > 0) {
35
- elements = elements.concat(selects.toArray());
36
- }
37
- textareas = this.form.find("textarea");
38
- if (textareas.length > 0) {
39
- elements = elements.concat(textareas.toArray());
22
+ _results = [];
23
+ for (index = _i = 0, _ref = this.formElement.length; 0 <= _ref ? _i <= _ref : _i >= _ref; index = 0 <= _ref ? ++_i : --_i) {
24
+ if ((_ref1 = (_ref2 = this.formElement[index]) != null ? _ref2.nodeName : void 0) === 'INPUT' || _ref1 === 'SELECT' || _ref1 === 'TEXTAREA') {
25
+ _results.push(this.formElement[index]);
26
+ }
40
27
  }
41
- formElements = [];
42
- for (_i = 0, _len = elements.length; _i < _len; _i++) {
43
- element = elements[_i];
44
- validationRules = element.getAttribute("data-validation") != null ? (function() {
45
- var _j, _len1, _ref, _results;
28
+ return _results;
29
+ };
46
30
 
47
- _ref = element.getAttribute("data-validation").split(',');
48
- _results = [];
49
- for (_j = 0, _len1 = _ref.length; _j < _len1; _j++) {
50
- rule = _ref[_j];
51
- _results.push(rule.trim());
52
- }
53
- return _results;
54
- })() : [];
55
- selector = "" + element.nodeName + "[data-bind='" + (element.getAttribute("data-bind")) + "']";
56
- formElements.push(new FormElement(element.name, element.value, selector, validationRules));
57
- }
58
- return formElements;
31
+ Form.prototype.action = function() {
32
+ return this.formElement.action;
59
33
  };
60
34
 
61
- Form.prototype.addElement = function(name, value, isRemovable) {
62
- if (isRemovable == null) {
63
- isRemovable = true;
64
- }
65
- this.form.append("<input type='hidden' name='" + name + "' value='" + value + "'/>");
66
- if (isRemovable) {
67
- return this.addedElements.push($("input[name='" + name + "']", this.form));
35
+ Form.prototype.method = function() {
36
+ return this.formElement.method;
37
+ };
38
+
39
+ Form.prototype.addElement = function(name, value) {
40
+ var element;
41
+
42
+ if (this.hasElement(name)) {
43
+ throw new Error("'" + name + "' already exists as an element on the form.");
68
44
  }
45
+ element = createElement(name, value);
46
+ this.formElement.appendChild(element);
47
+ this.addedElements.push(element);
48
+ return element;
69
49
  };
70
50
 
71
51
  Form.prototype.addElements = function(elements) {
72
- var element, _i, _len, _results;
52
+ var e, element, errors, _i, _len;
73
53
 
74
- _results = [];
54
+ errors = [];
75
55
  for (_i = 0, _len = elements.length; _i < _len; _i++) {
76
56
  element = elements[_i];
77
- _results.push(this.addElement(element.name, element.value));
57
+ try {
58
+ this.addElement(element.name, element.value);
59
+ } catch (_error) {
60
+ e = _error;
61
+ errors.push(e);
62
+ }
63
+ }
64
+ if (errors.length) {
65
+ throw errors[0];
66
+ }
67
+ };
68
+
69
+ Form.prototype.hasElement = function(name) {
70
+ return this.getElement(name) != null;
71
+ };
72
+
73
+ Form.prototype.getElement = function(name) {
74
+ if (this.formElement[name] instanceof HTMLElement) {
75
+ return this.formElement[name];
78
76
  }
79
- return _results;
80
77
  };
81
78
 
82
79
  Form.prototype.updateAddedElement = function(name, value) {
83
- return this.form.find("input[name='" + name + "']").val(value);
80
+ if (this.formElement[name] != null) {
81
+ return this.formElement[name].value = value;
82
+ } else {
83
+ return this.addElement(name, value);
84
+ }
84
85
  };
85
86
 
86
87
  Form.prototype.clearAddedElements = function() {
@@ -89,13 +90,23 @@
89
90
  _ref = this.addedElements;
90
91
  for (_i = 0, _len = _ref.length; _i < _len; _i++) {
91
92
  element = _ref[_i];
92
- element.remove();
93
+ this.formElement.removeChild(element);
93
94
  }
94
95
  return this.addedElements = [];
95
96
  };
96
97
 
97
98
  Form.prototype.serialize = function() {
98
- return this.form.serialize();
99
+ return FormSerializer.toString(this);
100
+ };
101
+
102
+ createElement = function(name, value) {
103
+ var element;
104
+
105
+ element = document.createElement("input");
106
+ element.type = "hidden";
107
+ element.name = name;
108
+ element.value = value;
109
+ return element;
99
110
  };
100
111
 
101
112
  return Form;
@@ -118,52 +129,97 @@
118
129
 
119
130
  (function() {
120
131
  var modules = window.modules || [];
121
- var form_elementCache = null;
122
- var form_elementFunc = function() {
132
+ var form_serializerCache = null;
133
+ var form_serializerFunc = function() {
123
134
  return (function() {
124
- var FormElement;
135
+ var Serializer;
125
136
 
126
- require("lib/jquery");
137
+ Serializer = (function() {
138
+ var isCheckable, isComplicated, isFile, isMultiSelect, removeNulls, serializeElement;
127
139
 
128
- FormElement = (function() {
129
- function FormElement(name, value, selector, validationRules) {
130
- this.name = name;
131
- this.value = value;
132
- this.selector = selector;
133
- this.validationRules = validationRules != null ? validationRules : [];
134
- }
140
+ function Serializer() {}
135
141
 
136
- FormElement.prototype.addError = function(error) {
137
- $(this.selector).closest("li").addClass("invalid");
138
- $(this.selector).closest("li").find("aside.tooltip").html(error.message);
139
- $(this.selector).focus(function() {
140
- return $(this).closest("li").addClass("focused");
141
- });
142
- return $(this.selector).blur(function() {
143
- return $(this).closest("li").removeClass("focused");
144
- });
142
+ Serializer.toString = function(form) {
143
+ var element;
144
+
145
+ return removeNulls((function() {
146
+ var _i, _len, _ref, _results;
147
+
148
+ _ref = form.elements();
149
+ _results = [];
150
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
151
+ element = _ref[_i];
152
+ _results.push(serializeElement(element));
153
+ }
154
+ return _results;
155
+ })()).join("&");
156
+ };
157
+
158
+ serializeElement = function(element) {
159
+ var option;
160
+
161
+ if (!isComplicated(element)) {
162
+ return "" + element.name + "=" + (encodeURIComponent(element.value));
163
+ }
164
+ if (isCheckable(element) && element.checked) {
165
+ return "" + element.name + "=" + (encodeURIComponent(element.value));
166
+ }
167
+ if (isMultiSelect(element)) {
168
+ return ((function() {
169
+ var _i, _len, _ref, _results;
170
+
171
+ _ref = element.options;
172
+ _results = [];
173
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
174
+ option = _ref[_i];
175
+ if (option.selected) {
176
+ _results.push("" + element.name + "=" + (encodeURIComponent(option.value)));
177
+ }
178
+ }
179
+ return _results;
180
+ })()).join("&");
181
+ }
182
+ return null;
183
+ };
184
+
185
+ isComplicated = function(element) {
186
+ return isCheckable(element) || isMultiSelect(element) || isFile(element);
187
+ };
188
+
189
+ isCheckable = function(element) {
190
+ var _ref;
191
+
192
+ return element.nodeName === "INPUT" && ((_ref = element.type) === "checkbox" || _ref === "radio");
193
+ };
194
+
195
+ isMultiSelect = function(element) {
196
+ return element.nodeName === "SELECT" && element.type === "select-multiple";
197
+ };
198
+
199
+ isFile = function(element) {
200
+ return element.nodeName === "INPUT" && element.type === "file";
145
201
  };
146
202
 
147
- FormElement.prototype.clearError = function() {
148
- $(this.selector).closest("li").removeClass("invalid");
149
- $(this.selector).closest("li").find("aside.tooltip").html("");
150
- return $(this.selector).unbind("focus").unbind("blur");
203
+ removeNulls = function(array) {
204
+ return array.filter(function(e) {
205
+ return e;
206
+ });
151
207
  };
152
208
 
153
- return FormElement;
209
+ return Serializer;
154
210
 
155
211
  })();
156
212
 
157
- return FormElement;
213
+ return Serializer;
158
214
 
159
215
  }).call(this);
160
216
 
161
217
  };
162
- modules.hoarder__form__form_element = function() {
163
- if (form_elementCache === null) {
164
- form_elementCache = form_elementFunc();
218
+ modules.hoarder__form__form_serializer = function() {
219
+ if (form_serializerCache === null) {
220
+ form_serializerCache = form_serializerFunc();
165
221
  }
166
- return form_elementCache;
222
+ return form_serializerCache;
167
223
  };
168
224
  window.modules = modules;
169
225
  })();
@@ -173,44 +229,89 @@
173
229
  var form_managerCache = null;
174
230
  var form_managerFunc = function() {
175
231
  return (function() {
176
- var FormManager, FormSubmitter, FormValidator, Signal, SignalRelay;
232
+ var Form, FormManager, FormSubmitter, FormValidator, Signal, SignalRelay;
233
+
234
+ require('patches/event_listeners');
177
235
 
178
236
  Signal = require("cronus/signal");
179
237
 
180
238
  SignalRelay = require("cronus/signal_relay");
181
239
 
240
+ Form = require('hoarder/form/form');
241
+
182
242
  FormSubmitter = require('hoarder/submitter/form_submitter');
183
243
 
184
244
  FormValidator = require('hoarder/validator/form_validator');
185
245
 
186
246
  FormManager = (function() {
247
+ var getForm, submit;
248
+
249
+ FormManager.create = function(pollingUrl, pollFrequency) {
250
+ if (pollingUrl == null) {
251
+ pollingUrl = "";
252
+ }
253
+ if (pollFrequency == null) {
254
+ pollFrequency = 1000;
255
+ }
256
+ return new this(FormSubmitter.create(pollingUrl, pollFrequency), FormValidator.create());
257
+ };
258
+
187
259
  function FormManager(formSubmitter, formValidator) {
188
260
  this.formSubmitter = formSubmitter;
189
261
  this.formValidator = formValidator;
190
262
  this.validatedWithErrors = new Signal();
191
263
  this.submittedWithSuccess = new SignalRelay(this.formSubmitter.submittedWithSuccess);
192
264
  this.submittedWithError = new SignalRelay(this.formSubmitter.submittedWithError);
265
+ this._forms = [];
266
+ this._listeners = {};
193
267
  }
194
268
 
195
- FormManager["default"] = function(pollingUrl) {
196
- if (pollingUrl == null) {
197
- pollingUrl = "";
269
+ FormManager.prototype.manage = function(formId, type) {
270
+ var form, formElement,
271
+ _this = this;
272
+
273
+ if (type == null) {
274
+ type = 'simple';
198
275
  }
199
- return new this(FormSubmitter["default"](pollingUrl), FormValidator["default"]());
276
+ if (getForm.call(this, formId) != null) {
277
+ throw new Error("'" + formId + "' is already a managed form.");
278
+ }
279
+ formElement = document.getElementById(formId);
280
+ form = new Form(formElement);
281
+ formElement.addEventListener('submit', this._listeners[formId] = function(event) {
282
+ event.preventDefault();
283
+ return submit.call(_this, form, type);
284
+ });
285
+ this._forms.push(form);
286
+ return form;
200
287
  };
201
288
 
202
- FormManager.prototype.validateForm = function(form) {
203
- return this.formValidator.validateForm(form);
289
+ FormManager.prototype.release = function(formId) {
290
+ var form;
291
+
292
+ form = getForm.call(this, formId);
293
+ form.formElement.removeEventListener('submit', this._listeners[formId]);
294
+ delete this._listeners[formId];
295
+ return this._forms.splice(this._forms.indexOf(form), 1);
204
296
  };
205
297
 
206
- FormManager.prototype.submitForm = function(form) {
207
- var errors;
298
+ getForm = function(formId) {
299
+ var form, _i, _len, _ref;
300
+
301
+ _ref = this._forms;
302
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
303
+ form = _ref[_i];
304
+ if (form.formElement.id === formId) {
305
+ return form;
306
+ }
307
+ }
308
+ };
208
309
 
209
- errors = this.validateForm(form);
210
- if (errors.length > 0) {
211
- return this.validatedWithErrors.dispatch(errors);
310
+ submit = function(form, type) {
311
+ if (this.formValidator.validateForm(form)) {
312
+ return this.formSubmitter.submit(form, type);
212
313
  } else {
213
- return this.formSubmitter.submitForm(form);
314
+ return this.validatedWithErrors.dispatch(form);
214
315
  }
215
316
  };
216
317
 
@@ -246,35 +347,53 @@
246
347
  PollingSubmitter = require("hoarder/submitter/submitters/polling_submitter");
247
348
 
248
349
  FormSubmitter = (function() {
350
+ FormSubmitter.create = function(pollingUrl, pollFrequency) {
351
+ if (pollFrequency == null) {
352
+ pollFrequency = 1000;
353
+ }
354
+ return new this([new SimpleSubmitter(), new PollingSubmitter(pollingUrl, pollFrequency)]);
355
+ };
356
+
249
357
  function FormSubmitter(submitters) {
250
- var errorSignals, submitter, successSignals, _i, _len, _ref;
358
+ var errorSignals, submitter, successSignals;
251
359
 
252
360
  this.submitters = submitters;
253
- successSignals = [];
254
- errorSignals = [];
255
- _ref = this.submitters;
256
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {
257
- submitter = _ref[_i];
258
- successSignals.push(submitter.submittedWithSuccess);
259
- errorSignals.push(submitter.submittedWithError);
260
- }
361
+ successSignals = (function() {
362
+ var _i, _len, _ref, _results;
363
+
364
+ _ref = this.submitters;
365
+ _results = [];
366
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
367
+ submitter = _ref[_i];
368
+ _results.push(submitter.submittedWithSuccess);
369
+ }
370
+ return _results;
371
+ }).call(this);
372
+ errorSignals = (function() {
373
+ var _i, _len, _ref, _results;
374
+
375
+ _ref = this.submitters;
376
+ _results = [];
377
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
378
+ submitter = _ref[_i];
379
+ _results.push(submitter.submittedWithError);
380
+ }
381
+ return _results;
382
+ }).call(this);
261
383
  this.submittedWithSuccess = new MultiSignalRelay(successSignals);
262
384
  this.submittedWithError = new MultiSignalRelay(errorSignals);
263
385
  }
264
386
 
265
- FormSubmitter["default"] = function(pollingUrl) {
266
- return new this([new SimpleSubmitter(), new PollingSubmitter(pollingUrl, 1000)]);
267
- };
268
-
269
- FormSubmitter.prototype.submitForm = function(form) {
387
+ FormSubmitter.prototype.submit = function(form, type) {
270
388
  var submitter, _i, _len, _ref, _results;
271
389
 
272
390
  _ref = this.submitters;
273
391
  _results = [];
274
392
  for (_i = 0, _len = _ref.length; _i < _len; _i++) {
275
393
  submitter = _ref[_i];
276
- if (submitter.canSubmit(form)) {
277
- _results.push(submitter.submitForm(form));
394
+ if (submitter.canSubmit(type)) {
395
+ submitter.submit(form);
396
+ break;
278
397
  } else {
279
398
  _results.push(void 0);
280
399
  }
@@ -300,72 +419,117 @@
300
419
  window.modules = modules;
301
420
  })();
302
421
 
422
+ (function() {
423
+ var modules = window.modules || [];
424
+ var base_submitterCache = null;
425
+ var base_submitterFunc = function() {
426
+ return (function() {
427
+ var BaseSubmitter, Signal;
428
+
429
+ Signal = require('cronus/signal');
430
+
431
+ BaseSubmitter = (function() {
432
+ function BaseSubmitter() {
433
+ this.submittedWithSuccess = new Signal();
434
+ this.submittedWithError = new Signal();
435
+ }
436
+
437
+ BaseSubmitter.prototype.canSubmit = function(type) {
438
+ return type === this.type;
439
+ };
440
+
441
+ return BaseSubmitter;
442
+
443
+ })();
444
+
445
+ return BaseSubmitter;
446
+
447
+ }).call(this);
448
+
449
+ };
450
+ modules.hoarder__submitter__submitters__base_submitter = function() {
451
+ if (base_submitterCache === null) {
452
+ base_submitterCache = base_submitterFunc();
453
+ }
454
+ return base_submitterCache;
455
+ };
456
+ window.modules = modules;
457
+ })();
458
+
303
459
  (function() {
304
460
  var modules = window.modules || [];
305
461
  var polling_submitterCache = null;
306
462
  var polling_submitterFunc = function() {
307
463
  return (function() {
308
- var PollingSubmitter, SimpleSubmitter,
464
+ var BaseSubmitter, PollingSubmitter,
309
465
  __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },
310
466
  __hasProp = {}.hasOwnProperty,
311
467
  __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
312
468
 
313
- SimpleSubmitter = require("hoarder/submitter/submitters/simple_submitter");
469
+ require('lib/reqwest');
470
+
471
+ BaseSubmitter = require("hoarder/submitter/submitters/base_submitter");
314
472
 
315
473
  PollingSubmitter = (function(_super) {
474
+ var pollSuccess;
475
+
316
476
  __extends(PollingSubmitter, _super);
317
477
 
318
478
  function PollingSubmitter(pollUrl, pollFrequency) {
319
479
  this.pollUrl = pollUrl;
320
480
  this.pollFrequency = pollFrequency;
321
- this.pollSuccess = __bind(this.pollSuccess, this);
322
- this.queryPoll = __bind(this.queryPoll, this);
481
+ this.poll = __bind(this.poll, this);
323
482
  PollingSubmitter.__super__.constructor.call(this);
483
+ this.type = 'polling';
324
484
  }
325
485
 
326
- PollingSubmitter.prototype.canSubmit = function(form) {
327
- return form.type === "polling";
328
- };
329
-
330
- PollingSubmitter.prototype.submitSuccess = function(form, data) {
486
+ PollingSubmitter.prototype.submit = function(form) {
331
487
  var _this = this;
332
488
 
333
- this.interval = setInterval(function() {
334
- return _this.queryPoll(form, data.pollId);
335
- }, this.pollFrequency);
336
- return this.queryPoll(form, data.pollId);
489
+ return reqwest({
490
+ url: form.action,
491
+ type: form.method,
492
+ data: form.serialize(),
493
+ success: function(data) {
494
+ return _this.poll(form, data.processId);
495
+ },
496
+ error: function(xhr, text) {
497
+ return _this.submittedWithError.dispatch(form, text);
498
+ }
499
+ });
337
500
  };
338
501
 
339
- PollingSubmitter.prototype.queryPoll = function(form, pollId) {
502
+ PollingSubmitter.prototype.poll = function(form, processId) {
340
503
  var _this = this;
341
504
 
342
- if (!this.executing) {
343
- this.executing = true;
344
- return $.ajax({
345
- url: this.pollUrl,
346
- type: "POST",
347
- data: "pollId=" + pollId,
348
- success: function(data) {
349
- return _this.pollSuccess(form, pollId, data);
350
- },
351
- error: function(xhr, text) {
352
- return _this.submitError(form, xhr, text);
353
- }
354
- });
355
- }
505
+ return reqwest({
506
+ url: this.pollUrl,
507
+ type: "POST",
508
+ data: "processId=" + processId,
509
+ success: function(data) {
510
+ return pollSuccess.call(_this, form, processId, data);
511
+ },
512
+ error: function(xhr, text) {
513
+ return _this.submittedWithError.dispatch(form, text);
514
+ }
515
+ });
356
516
  };
357
517
 
358
- PollingSubmitter.prototype.pollSuccess = function(form, pollId, data) {
359
- this.executing = false;
360
- if (data.pollCompleted) {
361
- clearInterval(this.interval);
362
- return this.submittedWithSuccess.dispatch(form, data.pollData);
518
+ pollSuccess = function(form, processId, data) {
519
+ var _this = this;
520
+
521
+ if (data.processCompleted) {
522
+ return this.submittedWithSuccess.dispatch(form, data.processData);
523
+ } else {
524
+ return setTimeout(function() {
525
+ return _this.poll(form, data.processId);
526
+ }, this.pollFrequency);
363
527
  }
364
528
  };
365
529
 
366
530
  return PollingSubmitter;
367
531
 
368
- })(SimpleSubmitter);
532
+ })(BaseSubmitter);
369
533
 
370
534
  return PollingSubmitter;
371
535
 
@@ -386,49 +550,41 @@
386
550
  var simple_submitterCache = null;
387
551
  var simple_submitterFunc = function() {
388
552
  return (function() {
389
- var Signal, SimpleSubmitter;
553
+ var BaseSubmitter, SimpleSubmitter,
554
+ __hasProp = {}.hasOwnProperty,
555
+ __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
390
556
 
391
- require("lib/jquery");
557
+ require('lib/reqwest');
392
558
 
393
- Signal = require("cronus/signal");
559
+ BaseSubmitter = require('hoarder/submitter/submitters/base_submitter');
560
+
561
+ SimpleSubmitter = (function(_super) {
562
+ __extends(SimpleSubmitter, _super);
394
563
 
395
- SimpleSubmitter = (function() {
396
564
  function SimpleSubmitter() {
397
- this.submittedWithSuccess = new Signal();
398
- this.submittedWithError = new Signal();
565
+ SimpleSubmitter.__super__.constructor.call(this);
566
+ this.type = 'simple';
399
567
  }
400
568
 
401
- SimpleSubmitter.prototype.canSubmit = function(form) {
402
- return form.type === "simple";
403
- };
404
-
405
- SimpleSubmitter.prototype.submitForm = function(form) {
569
+ SimpleSubmitter.prototype.submit = function(form) {
406
570
  var _this = this;
407
571
 
408
- return $.ajax({
572
+ return reqwest({
409
573
  url: form.action,
410
574
  type: form.method,
411
575
  data: form.serialize(),
412
576
  success: function(data) {
413
- return _this.submitSuccess(form, data);
577
+ return _this.submittedWithSuccess.dispatch(form, data);
414
578
  },
415
579
  error: function(xhr, text) {
416
- return _this.submitError(form, xhr, text);
580
+ return _this.submittedWithError.dispatch(form, text);
417
581
  }
418
582
  });
419
583
  };
420
584
 
421
- SimpleSubmitter.prototype.submitSuccess = function(form, data) {
422
- return this.submittedWithSuccess.dispatch(form, data);
423
- };
424
-
425
- SimpleSubmitter.prototype.submitError = function(form, xhr, text) {
426
- return this.submittedWithError.dispatch(form, text);
427
- };
428
-
429
585
  return SimpleSubmitter;
430
586
 
431
- })();
587
+ })(BaseSubmitter);
432
588
 
433
589
  return SimpleSubmitter;
434
590
 
@@ -449,22 +605,30 @@
449
605
  var alpha_constraintCache = null;
450
606
  var alpha_constraintFunc = function() {
451
607
  return (function() {
452
- var AlphaConstraint, ValidationError;
608
+ var AlphaConstraint, BaseConstraint,
609
+ __hasProp = {}.hasOwnProperty,
610
+ __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
611
+
612
+ BaseConstraint = require('hoarder/validator/constraints/base_constraint');
453
613
 
454
- ValidationError = require("hoarder/validator/error/validation_error");
614
+ AlphaConstraint = (function(_super) {
615
+ __extends(AlphaConstraint, _super);
455
616
 
456
- AlphaConstraint = (function() {
457
- function AlphaConstraint() {}
617
+ function AlphaConstraint() {
618
+ this.type = "alpha";
619
+ }
458
620
 
459
- AlphaConstraint.prototype.canHandle = function(type) {
460
- return type === "alpha";
621
+ AlphaConstraint.prototype.rulePasses = function(element) {
622
+ return element.value.match(/^[A-Za-z\s]*$/);
461
623
  };
462
624
 
463
- AlphaConstraint.prototype.handle = function(element) {};
625
+ AlphaConstraint.prototype.errorMessage = function() {
626
+ return "This field only accepts numbers and characters (0-9, A-Z, a-z).";
627
+ };
464
628
 
465
629
  return AlphaConstraint;
466
630
 
467
- })();
631
+ })(BaseConstraint);
468
632
 
469
633
  return AlphaConstraint;
470
634
 
@@ -485,28 +649,30 @@
485
649
  var alphanumeric_constraintCache = null;
486
650
  var alphanumeric_constraintFunc = function() {
487
651
  return (function() {
488
- var AlphanumericConstraint, ValidationError;
652
+ var AlphanumericConstraint, BaseConstraint,
653
+ __hasProp = {}.hasOwnProperty,
654
+ __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
655
+
656
+ BaseConstraint = require('hoarder/validator/constraints/base_constraint');
489
657
 
490
- ValidationError = require("hoarder/validator/error/validation_error");
658
+ AlphanumericConstraint = (function(_super) {
659
+ __extends(AlphanumericConstraint, _super);
491
660
 
492
- AlphanumericConstraint = (function() {
493
- function AlphanumericConstraint() {}
661
+ function AlphanumericConstraint() {
662
+ this.type = "alphanumeric";
663
+ }
494
664
 
495
- AlphanumericConstraint.prototype.canHandle = function(type) {
496
- return type === "alphanumeric";
665
+ AlphanumericConstraint.prototype.rulePasses = function(element) {
666
+ return element.value.match(/^[A-Za-z0-9\s]*$/);
497
667
  };
498
668
 
499
- AlphanumericConstraint.prototype.handle = function(element) {
500
- if (element.value.match(/^[A-Za-z0-9\s]*$/)) {
501
- return [];
502
- } else {
503
- return [new ValidationError("This field only accepts numbers and characters (0-9, A-Z, a-z).")];
504
- }
669
+ AlphanumericConstraint.prototype.errorMessage = function() {
670
+ return "This field only accepts numbers and characters (0-9, A-Z, a-z).";
505
671
  };
506
672
 
507
673
  return AlphanumericConstraint;
508
674
 
509
- })();
675
+ })(BaseConstraint);
510
676
 
511
677
  return AlphanumericConstraint;
512
678
 
@@ -522,33 +688,75 @@
522
688
  window.modules = modules;
523
689
  })();
524
690
 
691
+ (function() {
692
+ var modules = window.modules || [];
693
+ var base_constraintCache = null;
694
+ var base_constraintFunc = function() {
695
+ return (function() {
696
+ var BaseConstraint;
697
+
698
+ BaseConstraint = (function() {
699
+ function BaseConstraint() {
700
+ this.type = null;
701
+ }
702
+
703
+ BaseConstraint.prototype.canHandle = function(rule) {
704
+ return rule.type === this.type;
705
+ };
706
+
707
+ BaseConstraint.prototype.handle = function(element, rule) {
708
+ if (!this.rulePasses(element, rule)) {
709
+ return element.setCustomValidity(this.errorMessage(rule, element));
710
+ }
711
+ };
712
+
713
+ return BaseConstraint;
714
+
715
+ })();
716
+
717
+ return BaseConstraint;
718
+
719
+ }).call(this);
720
+
721
+ };
722
+ modules.hoarder__validator__constraints__base_constraint = function() {
723
+ if (base_constraintCache === null) {
724
+ base_constraintCache = base_constraintFunc();
725
+ }
726
+ return base_constraintCache;
727
+ };
728
+ window.modules = modules;
729
+ })();
730
+
525
731
  (function() {
526
732
  var modules = window.modules || [];
527
733
  var credit_card_constraintCache = null;
528
734
  var credit_card_constraintFunc = function() {
529
735
  return (function() {
530
- var CreditCardConstraint, ValidationError;
736
+ var BaseConstraint, CreditCardConstraint,
737
+ __hasProp = {}.hasOwnProperty,
738
+ __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
531
739
 
532
- ValidationError = require("hoarder/validator/error/validation_error");
740
+ BaseConstraint = require('hoarder/validator/constraints/base_constraint');
533
741
 
534
- CreditCardConstraint = (function() {
535
- function CreditCardConstraint() {}
742
+ CreditCardConstraint = (function(_super) {
743
+ __extends(CreditCardConstraint, _super);
536
744
 
537
- CreditCardConstraint.prototype.canHandle = function(type) {
538
- return type === "creditCard";
745
+ function CreditCardConstraint() {
746
+ this.type = "creditCard";
747
+ }
748
+
749
+ CreditCardConstraint.prototype.rulePasses = function(element) {
750
+ return element.value.match(/^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\d{3})\d{11})$/);
539
751
  };
540
752
 
541
- CreditCardConstraint.prototype.handle = function(element) {
542
- if (element.value.match(/^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\d{3})\d{11})$/)) {
543
- return [];
544
- } else {
545
- return [new ValidationError("Please enter a valid credit card number.")];
546
- }
753
+ CreditCardConstraint.prototype.errorMessage = function() {
754
+ return "Please enter a valid credit card number.";
547
755
  };
548
756
 
549
757
  return CreditCardConstraint;
550
758
 
551
- })();
759
+ })(BaseConstraint);
552
760
 
553
761
  return CreditCardConstraint;
554
762
 
@@ -569,28 +777,30 @@
569
777
  var email_constraintCache = null;
570
778
  var email_constraintFunc = function() {
571
779
  return (function() {
572
- var EmailConstraint, ValidationError;
780
+ var BaseConstraint, EmailConstraint,
781
+ __hasProp = {}.hasOwnProperty,
782
+ __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
573
783
 
574
- ValidationError = require("hoarder/validator/error/validation_error");
784
+ BaseConstraint = require('hoarder/validator/constraints/base_constraint');
575
785
 
576
- EmailConstraint = (function() {
577
- function EmailConstraint() {}
786
+ EmailConstraint = (function(_super) {
787
+ __extends(EmailConstraint, _super);
578
788
 
579
- EmailConstraint.prototype.canHandle = function(type) {
580
- return type === "email";
789
+ function EmailConstraint() {
790
+ this.type = "email";
791
+ }
792
+
793
+ EmailConstraint.prototype.rulePasses = function(element) {
794
+ return element.value.match(/^([a-zA-Z0-9_-]+)@([a-zA-Z0-9.-]+)\.([a-zA-Z]{2,4})$/i);
581
795
  };
582
796
 
583
- EmailConstraint.prototype.handle = function(element) {
584
- if (element.value.match(/^([a-zA-Z0-9_-]+)@([a-zA-Z0-9.-]+)\.([a-zA-Z]{2,4})$/i)) {
585
- return [];
586
- } else {
587
- return [new ValidationError("Please enter a valid email address.")];
588
- }
797
+ EmailConstraint.prototype.errorMessage = function() {
798
+ return "Please enter a valid email address.";
589
799
  };
590
800
 
591
801
  return EmailConstraint;
592
802
 
593
- })();
803
+ })(BaseConstraint);
594
804
 
595
805
  return EmailConstraint;
596
806
 
@@ -611,28 +821,30 @@
611
821
  var max_length_constraintCache = null;
612
822
  var max_length_constraintFunc = function() {
613
823
  return (function() {
614
- var MaxLengthConstraint, ValidationError;
824
+ var BaseConstraint, MaxLengthConstraint,
825
+ __hasProp = {}.hasOwnProperty,
826
+ __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
615
827
 
616
- ValidationError = require("hoarder/validator/error/validation_error");
828
+ BaseConstraint = require("hoarder/validator/constraints/base_constraint");
617
829
 
618
- MaxLengthConstraint = (function() {
619
- function MaxLengthConstraint() {}
830
+ MaxLengthConstraint = (function(_super) {
831
+ __extends(MaxLengthConstraint, _super);
620
832
 
621
- MaxLengthConstraint.prototype.canHandle = function(type) {
622
- return type === "maxLength";
833
+ function MaxLengthConstraint() {
834
+ this.type = "maxLength";
835
+ }
836
+
837
+ MaxLengthConstraint.prototype.rulePasses = function(element, rule) {
838
+ return element.value.length <= rule.context;
623
839
  };
624
840
 
625
- MaxLengthConstraint.prototype.handle = function(element, context) {
626
- if (element.value.length <= context.value) {
627
- return [];
628
- } else {
629
- return [new ValidationError("The maximum length of this field is " + context.value + ".")];
630
- }
841
+ MaxLengthConstraint.prototype.errorMessage = function(rule) {
842
+ return "The maximum length of this field is " + rule.context + ".";
631
843
  };
632
844
 
633
845
  return MaxLengthConstraint;
634
846
 
635
- })();
847
+ })(BaseConstraint);
636
848
 
637
849
  return MaxLengthConstraint;
638
850
 
@@ -653,28 +865,30 @@
653
865
  var min_length_constraintCache = null;
654
866
  var min_length_constraintFunc = function() {
655
867
  return (function() {
656
- var MinLengthConstraint, ValidationError;
868
+ var BaseConstraint, MinLengthConstraint,
869
+ __hasProp = {}.hasOwnProperty,
870
+ __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
657
871
 
658
- ValidationError = require("hoarder/validator/error/validation_error");
872
+ BaseConstraint = require("hoarder/validator/constraints/base_constraint");
659
873
 
660
- MinLengthConstraint = (function() {
661
- function MinLengthConstraint() {}
874
+ MinLengthConstraint = (function(_super) {
875
+ __extends(MinLengthConstraint, _super);
662
876
 
663
- MinLengthConstraint.prototype.canHandle = function(type) {
664
- return type === "minLength";
877
+ function MinLengthConstraint() {
878
+ this.type = "minLength";
879
+ }
880
+
881
+ MinLengthConstraint.prototype.rulePasses = function(element, rule) {
882
+ return element.value.length >= rule.context;
665
883
  };
666
884
 
667
- MinLengthConstraint.prototype.handle = function(element, context) {
668
- if (element.value.length >= context.value) {
669
- return [];
670
- } else {
671
- return [new ValidationError("The minimum length of this field is " + context.value + ".")];
672
- }
885
+ MinLengthConstraint.prototype.errorMessage = function(rule) {
886
+ return "The minimum length of this field is " + rule.context + ".";
673
887
  };
674
888
 
675
889
  return MinLengthConstraint;
676
890
 
677
- })();
891
+ })(BaseConstraint);
678
892
 
679
893
  return MinLengthConstraint;
680
894
 
@@ -695,28 +909,30 @@
695
909
  var numeric_constraintCache = null;
696
910
  var numeric_constraintFunc = function() {
697
911
  return (function() {
698
- var NumericConstraint, ValidationError;
912
+ var BaseConstraint, NumericConstraint,
913
+ __hasProp = {}.hasOwnProperty,
914
+ __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
699
915
 
700
- ValidationError = require("hoarder/validator/error/validation_error");
916
+ BaseConstraint = require("hoarder/validator/constraints/base_constraint");
701
917
 
702
- NumericConstraint = (function() {
703
- function NumericConstraint() {}
918
+ NumericConstraint = (function(_super) {
919
+ __extends(NumericConstraint, _super);
704
920
 
705
- NumericConstraint.prototype.canHandle = function(type) {
706
- return type === "numeric";
921
+ function NumericConstraint() {
922
+ this.type = "numeric";
923
+ }
924
+
925
+ NumericConstraint.prototype.rulePasses = function(element) {
926
+ return element.value.match(/^[0-9]*$/);
707
927
  };
708
928
 
709
- NumericConstraint.prototype.handle = function(element) {
710
- if (element.value.match(/^[0-9]*$/)) {
711
- return [];
712
- } else {
713
- return [new ValidationError("This field only accepts numbers (0-9).")];
714
- }
929
+ NumericConstraint.prototype.errorMessage = function() {
930
+ return "This field only accepts numbers (0-9).";
715
931
  };
716
932
 
717
933
  return NumericConstraint;
718
934
 
719
- })();
935
+ })(BaseConstraint);
720
936
 
721
937
  return NumericConstraint;
722
938
 
@@ -737,28 +953,30 @@
737
953
  var phone_constraintCache = null;
738
954
  var phone_constraintFunc = function() {
739
955
  return (function() {
740
- var PhoneConstraint, ValidationError;
956
+ var BaseConstraint, PhoneConstraint,
957
+ __hasProp = {}.hasOwnProperty,
958
+ __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
741
959
 
742
- ValidationError = require("hoarder/validator/error/validation_error");
960
+ BaseConstraint = require('hoarder/validator/constraints/base_constraint');
743
961
 
744
- PhoneConstraint = (function() {
745
- function PhoneConstraint() {}
962
+ PhoneConstraint = (function(_super) {
963
+ __extends(PhoneConstraint, _super);
746
964
 
747
- PhoneConstraint.prototype.canHandle = function(type) {
748
- return type === "phone";
965
+ function PhoneConstraint() {
966
+ this.type = "phone";
967
+ }
968
+
969
+ PhoneConstraint.prototype.rulePasses = function(element) {
970
+ return element.value.match(/^\d?[.(\-]?\d\d\d[.)\-]?\d\d\d[.\-]?\d\d\d\d$/);
749
971
  };
750
972
 
751
- PhoneConstraint.prototype.handle = function(element) {
752
- if (element.value.match(/^\d?[.(\-]?\d\d\d[.)\-]?\d\d\d[.\-]?\d\d\d\d$/)) {
753
- return [];
754
- } else {
755
- return [new ValidationError("Please enter a valid phone number.")];
756
- }
973
+ PhoneConstraint.prototype.errorMessage = function() {
974
+ return "Please enter a valid phone number.";
757
975
  };
758
976
 
759
977
  return PhoneConstraint;
760
978
 
761
- })();
979
+ })(BaseConstraint);
762
980
 
763
981
  return PhoneConstraint;
764
982
 
@@ -779,28 +997,30 @@
779
997
  var required_constraintCache = null;
780
998
  var required_constraintFunc = function() {
781
999
  return (function() {
782
- var RequiredConstraint, ValidationError;
1000
+ var BaseConstraint, RequiredConstraint,
1001
+ __hasProp = {}.hasOwnProperty,
1002
+ __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
783
1003
 
784
- ValidationError = require("hoarder/validator/error/validation_error");
1004
+ BaseConstraint = require('hoarder/validator/constraints/base_constraint');
785
1005
 
786
- RequiredConstraint = (function() {
787
- function RequiredConstraint() {}
1006
+ RequiredConstraint = (function(_super) {
1007
+ __extends(RequiredConstraint, _super);
788
1008
 
789
- RequiredConstraint.prototype.canHandle = function(type) {
790
- return type === "required";
1009
+ function RequiredConstraint() {
1010
+ this.type = "required";
1011
+ }
1012
+
1013
+ RequiredConstraint.prototype.rulePasses = function(element) {
1014
+ return (element.value != null) && element.value !== "";
791
1015
  };
792
1016
 
793
- RequiredConstraint.prototype.handle = function(element) {
794
- if ((element.value != null) && element.value !== "") {
795
- return [];
796
- } else {
797
- return [new ValidationError("This field is required.")];
798
- }
1017
+ RequiredConstraint.prototype.errorMessage = function() {
1018
+ return "This field is required.";
799
1019
  };
800
1020
 
801
1021
  return RequiredConstraint;
802
1022
 
803
- })();
1023
+ })(BaseConstraint);
804
1024
 
805
1025
  return RequiredConstraint;
806
1026
 
@@ -818,46 +1038,20 @@
818
1038
 
819
1039
  (function() {
820
1040
  var modules = window.modules || [];
821
- var validation_errorCache = null;
822
- var validation_errorFunc = function() {
1041
+ var form_validatorCache = null;
1042
+ var form_validatorFunc = function() {
823
1043
  return (function() {
824
- var ValidationError;
1044
+ var AlphaConstraint, AlphanumericConstraint, CreditCardConstraint, EmailConstraint, FormValidator, MaxLengthConstraint, MinLengthConstraint, NumericConstraint, PhoneConstraint, RequiredConstraint, ValidationRule;
825
1045
 
826
- ValidationError = (function() {
827
- function ValidationError(message) {
828
- this.message = message;
829
- }
1046
+ ValidationRule = require('hoarder/validator/rules/validation_rule');
830
1047
 
831
- return ValidationError;
1048
+ AlphaConstraint = require("hoarder/validator/constraints/alpha_constraint");
832
1049
 
833
- })();
1050
+ AlphanumericConstraint = require("hoarder/validator/constraints/alphanumeric_constraint");
834
1051
 
835
- return ValidationError;
1052
+ CreditCardConstraint = require("hoarder/validator/constraints/credit_card_constraint");
836
1053
 
837
- }).call(this);
838
-
839
- };
840
- modules.hoarder__validator__error__validation_error = function() {
841
- if (validation_errorCache === null) {
842
- validation_errorCache = validation_errorFunc();
843
- }
844
- return validation_errorCache;
845
- };
846
- window.modules = modules;
847
- })();
848
-
849
- (function() {
850
- var modules = window.modules || [];
851
- var form_validatorCache = null;
852
- var form_validatorFunc = function() {
853
- return (function() {
854
- var AlphanumericConstraint, CreditCardConstraint, EmailConstraint, FormValidator, MaxLengthConstraint, MinLengthConstraint, NumericConstraint, PhoneConstraint, RequiredConstraint;
855
-
856
- AlphanumericConstraint = require("hoarder/validator/constraints/alphanumeric_constraint");
857
-
858
- CreditCardConstraint = require("hoarder/validator/constraints/credit_card_constraint");
859
-
860
- EmailConstraint = require("hoarder/validator/constraints/email_constraint");
1054
+ EmailConstraint = require("hoarder/validator/constraints/email_constraint");
861
1055
 
862
1056
  MaxLengthConstraint = require("hoarder/validator/constraints/max_length_constraint");
863
1057
 
@@ -870,51 +1064,74 @@
870
1064
  RequiredConstraint = require("hoarder/validator/constraints/required_constraint");
871
1065
 
872
1066
  FormValidator = (function() {
1067
+ var isValid, validationStringsFrom;
1068
+
1069
+ FormValidator.libraryConstraints = [new AlphaConstraint(), new AlphanumericConstraint(), new CreditCardConstraint(), new EmailConstraint(), new MaxLengthConstraint(), new MinLengthConstraint(), new NumericConstraint(), new PhoneConstraint(), new RequiredConstraint()];
1070
+
1071
+ FormValidator.create = function() {
1072
+ return new this(FormValidator.libraryConstraints);
1073
+ };
1074
+
873
1075
  function FormValidator(constraints) {
874
1076
  this.constraints = constraints;
875
1077
  }
876
1078
 
877
- FormValidator["default"] = function() {
878
- return new this([new AlphanumericConstraint(), new CreditCardConstraint(), new EmailConstraint(), new MaxLengthConstraint(), new MinLengthConstraint(), new NumericConstraint(), new PhoneConstraint(), new RequiredConstraint()]);
879
- };
880
-
881
1079
  FormValidator.prototype.validateForm = function(form) {
882
- var element, errors, _i, _len, _ref;
1080
+ var element, isValid, _i, _len, _ref;
883
1081
 
884
- errors = [];
1082
+ isValid = true;
885
1083
  _ref = form.elements();
886
1084
  for (_i = 0, _len = _ref.length; _i < _len; _i++) {
887
1085
  element = _ref[_i];
888
- errors = errors.concat(this.validateElement(element));
1086
+ if (!this.validateElement(element)) {
1087
+ isValid = false;
1088
+ }
889
1089
  }
890
- return errors;
1090
+ return isValid;
891
1091
  };
892
1092
 
893
1093
  FormValidator.prototype.validateElement = function(element) {
894
- var constraint, context, errors, rule, ruleParts, type, _i, _j, _len, _len1, _ref, _ref1;
1094
+ var constraint, rule, ruleString, _i, _j, _len, _len1, _ref, _ref1;
895
1095
 
896
- _ref = element.validationRules;
1096
+ _ref = validationStringsFrom(element);
897
1097
  for (_i = 0, _len = _ref.length; _i < _len; _i++) {
898
- rule = _ref[_i];
899
- ruleParts = rule.split('=');
900
- type = ruleParts[0];
901
- context = {};
902
- if (ruleParts.length > 1) {
903
- context.value = ruleParts[1];
904
- }
1098
+ ruleString = _ref[_i];
1099
+ rule = ValidationRule.fromString(ruleString);
905
1100
  _ref1 = this.constraints;
906
1101
  for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {
907
1102
  constraint = _ref1[_j];
908
- if (constraint.canHandle(type)) {
909
- errors = constraint.handle(element, context);
910
- if (errors.length > 0) {
911
- element.addError(errors[0]);
912
- return errors;
913
- }
1103
+ if (constraint.canHandle(rule)) {
1104
+ constraint.handle(element, rule);
914
1105
  }
1106
+ if (!isValid(element)) {
1107
+ break;
1108
+ }
1109
+ }
1110
+ if (!isValid(element)) {
1111
+ break;
915
1112
  }
916
1113
  }
917
- return [];
1114
+ return isValid(element);
1115
+ };
1116
+
1117
+ validationStringsFrom = function(element) {
1118
+ var ruleString, validationAttribute, _i, _len, _ref, _results;
1119
+
1120
+ validationAttribute = element.getAttribute("data-validation");
1121
+ if (validationAttribute == null) {
1122
+ return [];
1123
+ }
1124
+ _ref = validationAttribute.split(',');
1125
+ _results = [];
1126
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
1127
+ ruleString = _ref[_i];
1128
+ _results.push(ruleString.trim());
1129
+ }
1130
+ return _results;
1131
+ };
1132
+
1133
+ isValid = function(element) {
1134
+ return !element.validity.customError;
918
1135
  };
919
1136
 
920
1137
  return FormValidator;
@@ -937,19 +1154,2256 @@
937
1154
 
938
1155
  (function() {
939
1156
  var modules = window.modules || [];
940
- var jqueryCache = null;
941
- var jqueryFunc = function() {
942
- /*! jQuery v1.9.1 | (c) 2005, 2012 jQuery Foundation, Inc. | jquery.org/license
943
- //@ sourceMappingURL=jquery.min.map
944
- */(function(e,t){var n,r,i=typeof t,o=e.document,a=e.location,s=e.jQuery,u=e.$,l={},c=[],p="1.9.1",f=c.concat,d=c.push,h=c.slice,g=c.indexOf,m=l.toString,y=l.hasOwnProperty,v=p.trim,b=function(e,t){return new b.fn.init(e,t,r)},x=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,w=/\S+/g,T=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,N=/^(?:(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,k=/^[\],:{}\s]*$/,E=/(?:^|:|,)(?:\s*\[)+/g,S=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,A=/"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,j=/^-ms-/,D=/-([\da-z])/gi,L=function(e,t){return t.toUpperCase()},H=function(e){(o.addEventListener||"load"===e.type||"complete"===o.readyState)&&(q(),b.ready())},q=function(){o.addEventListener?(o.removeEventListener("DOMContentLoaded",H,!1),e.removeEventListener("load",H,!1)):(o.detachEvent("onreadystatechange",H),e.detachEvent("onload",H))};b.fn=b.prototype={jquery:p,constructor:b,init:function(e,n,r){var i,a;if(!e)return this;if("string"==typeof e){if(i="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:N.exec(e),!i||!i[1]&&n)return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e);if(i[1]){if(n=n instanceof b?n[0]:n,b.merge(this,b.parseHTML(i[1],n&&n.nodeType?n.ownerDocument||n:o,!0)),C.test(i[1])&&b.isPlainObject(n))for(i in n)b.isFunction(this[i])?this[i](n[i]):this.attr(i,n[i]);return this}if(a=o.getElementById(i[2]),a&&a.parentNode){if(a.id!==i[2])return r.find(e);this.length=1,this[0]=a}return this.context=o,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):b.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),b.makeArray(e,this))},selector:"",length:0,size:function(){return this.length},toArray:function(){return h.call(this)},get:function(e){return null==e?this.toArray():0>e?this[this.length+e]:this[e]},pushStack:function(e){var t=b.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return b.each(this,e,t)},ready:function(e){return b.ready.promise().done(e),this},slice:function(){return this.pushStack(h.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},map:function(e){return this.pushStack(b.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:d,sort:[].sort,splice:[].splice},b.fn.init.prototype=b.fn,b.extend=b.fn.extend=function(){var e,n,r,i,o,a,s=arguments[0]||{},u=1,l=arguments.length,c=!1;for("boolean"==typeof s&&(c=s,s=arguments[1]||{},u=2),"object"==typeof s||b.isFunction(s)||(s={}),l===u&&(s=this,--u);l>u;u++)if(null!=(o=arguments[u]))for(i in o)e=s[i],r=o[i],s!==r&&(c&&r&&(b.isPlainObject(r)||(n=b.isArray(r)))?(n?(n=!1,a=e&&b.isArray(e)?e:[]):a=e&&b.isPlainObject(e)?e:{},s[i]=b.extend(c,a,r)):r!==t&&(s[i]=r));return s},b.extend({noConflict:function(t){return e.$===b&&(e.$=u),t&&e.jQuery===b&&(e.jQuery=s),b},isReady:!1,readyWait:1,holdReady:function(e){e?b.readyWait++:b.ready(!0)},ready:function(e){if(e===!0?!--b.readyWait:!b.isReady){if(!o.body)return setTimeout(b.ready);b.isReady=!0,e!==!0&&--b.readyWait>0||(n.resolveWith(o,[b]),b.fn.trigger&&b(o).trigger("ready").off("ready"))}},isFunction:function(e){return"function"===b.type(e)},isArray:Array.isArray||function(e){return"array"===b.type(e)},isWindow:function(e){return null!=e&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?l[m.call(e)]||"object":typeof e},isPlainObject:function(e){if(!e||"object"!==b.type(e)||e.nodeType||b.isWindow(e))return!1;try{if(e.constructor&&!y.call(e,"constructor")&&!y.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(n){return!1}var r;for(r in e);return r===t||y.call(e,r)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||o;var r=C.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=b.buildFragment([e],t,i),i&&b(i).remove(),b.merge([],r.childNodes))},parseJSON:function(n){return e.JSON&&e.JSON.parse?e.JSON.parse(n):null===n?n:"string"==typeof n&&(n=b.trim(n),n&&k.test(n.replace(S,"@").replace(A,"]").replace(E,"")))?Function("return "+n)():(b.error("Invalid JSON: "+n),t)},parseXML:function(n){var r,i;if(!n||"string"!=typeof n)return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,"text/xml")):(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(n))}catch(o){r=t}return r&&r.documentElement&&!r.getElementsByTagName("parsererror").length||b.error("Invalid XML: "+n),r},noop:function(){},globalEval:function(t){t&&b.trim(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(j,"ms-").replace(D,L)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r,i=0,o=e.length,a=M(e);if(n){if(a){for(;o>i;i++)if(r=t.apply(e[i],n),r===!1)break}else for(i in e)if(r=t.apply(e[i],n),r===!1)break}else if(a){for(;o>i;i++)if(r=t.call(e[i],i,e[i]),r===!1)break}else for(i in e)if(r=t.call(e[i],i,e[i]),r===!1)break;return e},trim:v&&!v.call("\ufeff\u00a0")?function(e){return null==e?"":v.call(e)}:function(e){return null==e?"":(e+"").replace(T,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(M(Object(e))?b.merge(n,"string"==typeof e?[e]:e):d.call(n,e)),n},inArray:function(e,t,n){var r;if(t){if(g)return g.call(t,e,n);for(r=t.length,n=n?0>n?Math.max(0,r+n):n:0;r>n;n++)if(n in t&&t[n]===e)return n}return-1},merge:function(e,n){var r=n.length,i=e.length,o=0;if("number"==typeof r)for(;r>o;o++)e[i++]=n[o];else while(n[o]!==t)e[i++]=n[o++];return e.length=i,e},grep:function(e,t,n){var r,i=[],o=0,a=e.length;for(n=!!n;a>o;o++)r=!!t(e[o],o),n!==r&&i.push(e[o]);return i},map:function(e,t,n){var r,i=0,o=e.length,a=M(e),s=[];if(a)for(;o>i;i++)r=t(e[i],i,n),null!=r&&(s[s.length]=r);else for(i in e)r=t(e[i],i,n),null!=r&&(s[s.length]=r);return f.apply([],s)},guid:1,proxy:function(e,n){var r,i,o;return"string"==typeof n&&(o=e[n],n=e,e=o),b.isFunction(e)?(r=h.call(arguments,2),i=function(){return e.apply(n||this,r.concat(h.call(arguments)))},i.guid=e.guid=e.guid||b.guid++,i):t},access:function(e,n,r,i,o,a,s){var u=0,l=e.length,c=null==r;if("object"===b.type(r)){o=!0;for(u in r)b.access(e,n,u,r[u],!0,a,s)}else if(i!==t&&(o=!0,b.isFunction(i)||(s=!0),c&&(s?(n.call(e,i),n=null):(c=n,n=function(e,t,n){return c.call(b(e),n)})),n))for(;l>u;u++)n(e[u],r,s?i:i.call(e[u],u,n(e[u],r)));return o?e:c?n.call(e):l?n(e[0],r):a},now:function(){return(new Date).getTime()}}),b.ready.promise=function(t){if(!n)if(n=b.Deferred(),"complete"===o.readyState)setTimeout(b.ready);else if(o.addEventListener)o.addEventListener("DOMContentLoaded",H,!1),e.addEventListener("load",H,!1);else{o.attachEvent("onreadystatechange",H),e.attachEvent("onload",H);var r=!1;try{r=null==e.frameElement&&o.documentElement}catch(i){}r&&r.doScroll&&function a(){if(!b.isReady){try{r.doScroll("left")}catch(e){return setTimeout(a,50)}q(),b.ready()}}()}return n.promise(t)},b.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(e,t){l["[object "+t+"]"]=t.toLowerCase()});function M(e){var t=e.length,n=b.type(e);return b.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||"function"!==n&&(0===t||"number"==typeof t&&t>0&&t-1 in e)}r=b(o);var _={};function F(e){var t=_[e]={};return b.each(e.match(w)||[],function(e,n){t[n]=!0}),t}b.Callbacks=function(e){e="string"==typeof e?_[e]||F(e):b.extend({},e);var n,r,i,o,a,s,u=[],l=!e.once&&[],c=function(t){for(r=e.memory&&t,i=!0,a=s||0,s=0,o=u.length,n=!0;u&&o>a;a++)if(u[a].apply(t[0],t[1])===!1&&e.stopOnFalse){r=!1;break}n=!1,u&&(l?l.length&&c(l.shift()):r?u=[]:p.disable())},p={add:function(){if(u){var t=u.length;(function i(t){b.each(t,function(t,n){var r=b.type(n);"function"===r?e.unique&&p.has(n)||u.push(n):n&&n.length&&"string"!==r&&i(n)})})(arguments),n?o=u.length:r&&(s=t,c(r))}return this},remove:function(){return u&&b.each(arguments,function(e,t){var r;while((r=b.inArray(t,u,r))>-1)u.splice(r,1),n&&(o>=r&&o--,a>=r&&a--)}),this},has:function(e){return e?b.inArray(e,u)>-1:!(!u||!u.length)},empty:function(){return u=[],this},disable:function(){return u=l=r=t,this},disabled:function(){return!u},lock:function(){return l=t,r||p.disable(),this},locked:function(){return!l},fireWith:function(e,t){return t=t||[],t=[e,t.slice?t.slice():t],!u||i&&!l||(n?l.push(t):c(t)),this},fire:function(){return p.fireWith(this,arguments),this},fired:function(){return!!i}};return p},b.extend({Deferred:function(e){var t=[["resolve","done",b.Callbacks("once memory"),"resolved"],["reject","fail",b.Callbacks("once memory"),"rejected"],["notify","progress",b.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return b.Deferred(function(n){b.each(t,function(t,o){var a=o[0],s=b.isFunction(e[t])&&e[t];i[o[1]](function(){var e=s&&s.apply(this,arguments);e&&b.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[a+"With"](this===r?n.promise():this,s?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?b.extend(e,r):r}},i={};return r.pipe=r.then,b.each(t,function(e,o){var a=o[2],s=o[3];r[o[1]]=a.add,s&&a.add(function(){n=s},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+"With"](this===i?r:this,arguments),this},i[o[0]+"With"]=a.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=h.call(arguments),r=n.length,i=1!==r||e&&b.isFunction(e.promise)?r:0,o=1===i?e:b.Deferred(),a=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?h.call(arguments):r,n===s?o.notifyWith(t,n):--i||o.resolveWith(t,n)}},s,u,l;if(r>1)for(s=Array(r),u=Array(r),l=Array(r);r>t;t++)n[t]&&b.isFunction(n[t].promise)?n[t].promise().done(a(t,l,n)).fail(o.reject).progress(a(t,u,s)):--i;return i||o.resolveWith(l,n),o.promise()}}),b.support=function(){var t,n,r,a,s,u,l,c,p,f,d=o.createElement("div");if(d.setAttribute("className","t"),d.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",n=d.getElementsByTagName("*"),r=d.getElementsByTagName("a")[0],!n||!r||!n.length)return{};s=o.createElement("select"),l=s.appendChild(o.createElement("option")),a=d.getElementsByTagName("input")[0],r.style.cssText="top:1px;float:left;opacity:.5",t={getSetAttribute:"t"!==d.className,leadingWhitespace:3===d.firstChild.nodeType,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/top/.test(r.getAttribute("style")),hrefNormalized:"/a"===r.getAttribute("href"),opacity:/^0.5/.test(r.style.opacity),cssFloat:!!r.style.cssFloat,checkOn:!!a.value,optSelected:l.selected,enctype:!!o.createElement("form").enctype,html5Clone:"<:nav></:nav>"!==o.createElement("nav").cloneNode(!0).outerHTML,boxModel:"CSS1Compat"===o.compatMode,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},a.checked=!0,t.noCloneChecked=a.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!l.disabled;try{delete d.test}catch(h){t.deleteExpando=!1}a=o.createElement("input"),a.setAttribute("value",""),t.input=""===a.getAttribute("value"),a.value="t",a.setAttribute("type","radio"),t.radioValue="t"===a.value,a.setAttribute("checked","t"),a.setAttribute("name","t"),u=o.createDocumentFragment(),u.appendChild(a),t.appendChecked=a.checked,t.checkClone=u.cloneNode(!0).cloneNode(!0).lastChild.checked,d.attachEvent&&(d.attachEvent("onclick",function(){t.noCloneEvent=!1}),d.cloneNode(!0).click());for(f in{submit:!0,change:!0,focusin:!0})d.setAttribute(c="on"+f,"t"),t[f+"Bubbles"]=c in e||d.attributes[c].expando===!1;return d.style.backgroundClip="content-box",d.cloneNode(!0).style.backgroundClip="",t.clearCloneStyle="content-box"===d.style.backgroundClip,b(function(){var n,r,a,s="padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",u=o.getElementsByTagName("body")[0];u&&(n=o.createElement("div"),n.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",u.appendChild(n).appendChild(d),d.innerHTML="<table><tr><td></td><td>t</td></tr></table>",a=d.getElementsByTagName("td"),a[0].style.cssText="padding:0;margin:0;border:0;display:none",p=0===a[0].offsetHeight,a[0].style.display="",a[1].style.display="none",t.reliableHiddenOffsets=p&&0===a[0].offsetHeight,d.innerHTML="",d.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",t.boxSizing=4===d.offsetWidth,t.doesNotIncludeMarginInBodyOffset=1!==u.offsetTop,e.getComputedStyle&&(t.pixelPosition="1%"!==(e.getComputedStyle(d,null)||{}).top,t.boxSizingReliable="4px"===(e.getComputedStyle(d,null)||{width:"4px"}).width,r=d.appendChild(o.createElement("div")),r.style.cssText=d.style.cssText=s,r.style.marginRight=r.style.width="0",d.style.width="1px",t.reliableMarginRight=!parseFloat((e.getComputedStyle(r,null)||{}).marginRight)),typeof d.style.zoom!==i&&(d.innerHTML="",d.style.cssText=s+"width:1px;padding:1px;display:inline;zoom:1",t.inlineBlockNeedsLayout=3===d.offsetWidth,d.style.display="block",d.innerHTML="<div></div>",d.firstChild.style.width="5px",t.shrinkWrapBlocks=3!==d.offsetWidth,t.inlineBlockNeedsLayout&&(u.style.zoom=1)),u.removeChild(n),n=d=a=r=null)}),n=s=u=l=r=a=null,t}();var O=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,B=/([A-Z])/g;function P(e,n,r,i){if(b.acceptData(e)){var o,a,s=b.expando,u="string"==typeof n,l=e.nodeType,p=l?b.cache:e,f=l?e[s]:e[s]&&s;if(f&&p[f]&&(i||p[f].data)||!u||r!==t)return f||(l?e[s]=f=c.pop()||b.guid++:f=s),p[f]||(p[f]={},l||(p[f].toJSON=b.noop)),("object"==typeof n||"function"==typeof n)&&(i?p[f]=b.extend(p[f],n):p[f].data=b.extend(p[f].data,n)),o=p[f],i||(o.data||(o.data={}),o=o.data),r!==t&&(o[b.camelCase(n)]=r),u?(a=o[n],null==a&&(a=o[b.camelCase(n)])):a=o,a}}function R(e,t,n){if(b.acceptData(e)){var r,i,o,a=e.nodeType,s=a?b.cache:e,u=a?e[b.expando]:b.expando;if(s[u]){if(t&&(o=n?s[u]:s[u].data)){b.isArray(t)?t=t.concat(b.map(t,b.camelCase)):t in o?t=[t]:(t=b.camelCase(t),t=t in o?[t]:t.split(" "));for(r=0,i=t.length;i>r;r++)delete o[t[r]];if(!(n?$:b.isEmptyObject)(o))return}(n||(delete s[u].data,$(s[u])))&&(a?b.cleanData([e],!0):b.support.deleteExpando||s!=s.window?delete s[u]:s[u]=null)}}}b.extend({cache:{},expando:"jQuery"+(p+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(e){return e=e.nodeType?b.cache[e[b.expando]]:e[b.expando],!!e&&!$(e)},data:function(e,t,n){return P(e,t,n)},removeData:function(e,t){return R(e,t)},_data:function(e,t,n){return P(e,t,n,!0)},_removeData:function(e,t){return R(e,t,!0)},acceptData:function(e){if(e.nodeType&&1!==e.nodeType&&9!==e.nodeType)return!1;var t=e.nodeName&&b.noData[e.nodeName.toLowerCase()];return!t||t!==!0&&e.getAttribute("classid")===t}}),b.fn.extend({data:function(e,n){var r,i,o=this[0],a=0,s=null;if(e===t){if(this.length&&(s=b.data(o),1===o.nodeType&&!b._data(o,"parsedAttrs"))){for(r=o.attributes;r.length>a;a++)i=r[a].name,i.indexOf("data-")||(i=b.camelCase(i.slice(5)),W(o,i,s[i]));b._data(o,"parsedAttrs",!0)}return s}return"object"==typeof e?this.each(function(){b.data(this,e)}):b.access(this,function(n){return n===t?o?W(o,e,b.data(o,e)):null:(this.each(function(){b.data(this,e,n)}),t)},null,n,arguments.length>1,null,!0)},removeData:function(e){return this.each(function(){b.removeData(this,e)})}});function W(e,n,r){if(r===t&&1===e.nodeType){var i="data-"+n.replace(B,"-$1").toLowerCase();if(r=e.getAttribute(i),"string"==typeof r){try{r="true"===r?!0:"false"===r?!1:"null"===r?null:+r+""===r?+r:O.test(r)?b.parseJSON(r):r}catch(o){}b.data(e,n,r)}else r=t}return r}function $(e){var t;for(t in e)if(("data"!==t||!b.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}b.extend({queue:function(e,n,r){var i;return e?(n=(n||"fx")+"queue",i=b._data(e,n),r&&(!i||b.isArray(r)?i=b._data(e,n,b.makeArray(r)):i.push(r)),i||[]):t},dequeue:function(e,t){t=t||"fx";var n=b.queue(e,t),r=n.length,i=n.shift(),o=b._queueHooks(e,t),a=function(){b.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),o.cur=i,i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return b._data(e,n)||b._data(e,n,{empty:b.Callbacks("once memory").add(function(){b._removeData(e,t+"queue"),b._removeData(e,n)})})}}),b.fn.extend({queue:function(e,n){var r=2;return"string"!=typeof e&&(n=e,e="fx",r--),r>arguments.length?b.queue(this[0],e):n===t?this:this.each(function(){var t=b.queue(this,e,n);b._queueHooks(this,e),"fx"===e&&"inprogress"!==t[0]&&b.dequeue(this,e)})},dequeue:function(e){return this.each(function(){b.dequeue(this,e)})},delay:function(e,t){return e=b.fx?b.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,n){var r,i=1,o=b.Deferred(),a=this,s=this.length,u=function(){--i||o.resolveWith(a,[a])};"string"!=typeof e&&(n=e,e=t),e=e||"fx";while(s--)r=b._data(a[s],e+"queueHooks"),r&&r.empty&&(i++,r.empty.add(u));return u(),o.promise(n)}});var I,z,X=/[\t\r\n]/g,U=/\r/g,V=/^(?:input|select|textarea|button|object)$/i,Y=/^(?:a|area)$/i,J=/^(?:checked|selected|autofocus|autoplay|async|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped)$/i,G=/^(?:checked|selected)$/i,Q=b.support.getSetAttribute,K=b.support.input;b.fn.extend({attr:function(e,t){return b.access(this,b.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){b.removeAttr(this,e)})},prop:function(e,t){return b.access(this,b.prop,e,t,arguments.length>1)},removeProp:function(e){return e=b.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,o,a=0,s=this.length,u="string"==typeof e&&e;if(b.isFunction(e))return this.each(function(t){b(this).addClass(e.call(this,t,this.className))});if(u)for(t=(e||"").match(w)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(X," "):" ")){o=0;while(i=t[o++])0>r.indexOf(" "+i+" ")&&(r+=i+" ");n.className=b.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,a=0,s=this.length,u=0===arguments.length||"string"==typeof e&&e;if(b.isFunction(e))return this.each(function(t){b(this).removeClass(e.call(this,t,this.className))});if(u)for(t=(e||"").match(w)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(X," "):"")){o=0;while(i=t[o++])while(r.indexOf(" "+i+" ")>=0)r=r.replace(" "+i+" "," ");n.className=e?b.trim(r):""}return this},toggleClass:function(e,t){var n=typeof e,r="boolean"==typeof t;return b.isFunction(e)?this.each(function(n){b(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if("string"===n){var o,a=0,s=b(this),u=t,l=e.match(w)||[];while(o=l[a++])u=r?u:!s.hasClass(o),s[u?"addClass":"removeClass"](o)}else(n===i||"boolean"===n)&&(this.className&&b._data(this,"__className__",this.className),this.className=this.className||e===!1?"":b._data(this,"__className__")||"")})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;r>n;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(X," ").indexOf(t)>=0)return!0;return!1},val:function(e){var n,r,i,o=this[0];{if(arguments.length)return i=b.isFunction(e),this.each(function(n){var o,a=b(this);1===this.nodeType&&(o=i?e.call(this,n,a.val()):e,null==o?o="":"number"==typeof o?o+="":b.isArray(o)&&(o=b.map(o,function(e){return null==e?"":e+""})),r=b.valHooks[this.type]||b.valHooks[this.nodeName.toLowerCase()],r&&"set"in r&&r.set(this,o,"value")!==t||(this.value=o))});if(o)return r=b.valHooks[o.type]||b.valHooks[o.nodeName.toLowerCase()],r&&"get"in r&&(n=r.get(o,"value"))!==t?n:(n=o.value,"string"==typeof n?n.replace(U,""):null==n?"":n)}}}),b.extend({valHooks:{option:{get:function(e){var t=e.attributes.value;return!t||t.specified?e.value:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,o="select-one"===e.type||0>i,a=o?null:[],s=o?i+1:r.length,u=0>i?s:o?i:0;for(;s>u;u++)if(n=r[u],!(!n.selected&&u!==i||(b.support.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&b.nodeName(n.parentNode,"optgroup"))){if(t=b(n).val(),o)return t;a.push(t)}return a},set:function(e,t){var n=b.makeArray(t);return b(e).find("option").each(function(){this.selected=b.inArray(b(this).val(),n)>=0}),n.length||(e.selectedIndex=-1),n}}},attr:function(e,n,r){var o,a,s,u=e.nodeType;if(e&&3!==u&&8!==u&&2!==u)return typeof e.getAttribute===i?b.prop(e,n,r):(a=1!==u||!b.isXMLDoc(e),a&&(n=n.toLowerCase(),o=b.attrHooks[n]||(J.test(n)?z:I)),r===t?o&&a&&"get"in o&&null!==(s=o.get(e,n))?s:(typeof e.getAttribute!==i&&(s=e.getAttribute(n)),null==s?t:s):null!==r?o&&a&&"set"in o&&(s=o.set(e,r,n))!==t?s:(e.setAttribute(n,r+""),r):(b.removeAttr(e,n),t))},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(w);if(o&&1===e.nodeType)while(n=o[i++])r=b.propFix[n]||n,J.test(n)?!Q&&G.test(n)?e[b.camelCase("default-"+n)]=e[r]=!1:e[r]=!1:b.attr(e,n,""),e.removeAttribute(Q?n:r)},attrHooks:{type:{set:function(e,t){if(!b.support.radioValue&&"radio"===t&&b.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(e,n,r){var i,o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return a=1!==s||!b.isXMLDoc(e),a&&(n=b.propFix[n]||n,o=b.propHooks[n]),r!==t?o&&"set"in o&&(i=o.set(e,r,n))!==t?i:e[n]=r:o&&"get"in o&&null!==(i=o.get(e,n))?i:e[n]},propHooks:{tabIndex:{get:function(e){var n=e.getAttributeNode("tabindex");return n&&n.specified?parseInt(n.value,10):V.test(e.nodeName)||Y.test(e.nodeName)&&e.href?0:t}}}}),z={get:function(e,n){var r=b.prop(e,n),i="boolean"==typeof r&&e.getAttribute(n),o="boolean"==typeof r?K&&Q?null!=i:G.test(n)?e[b.camelCase("default-"+n)]:!!i:e.getAttributeNode(n);return o&&o.value!==!1?n.toLowerCase():t},set:function(e,t,n){return t===!1?b.removeAttr(e,n):K&&Q||!G.test(n)?e.setAttribute(!Q&&b.propFix[n]||n,n):e[b.camelCase("default-"+n)]=e[n]=!0,n}},K&&Q||(b.attrHooks.value={get:function(e,n){var r=e.getAttributeNode(n);return b.nodeName(e,"input")?e.defaultValue:r&&r.specified?r.value:t},set:function(e,n,r){return b.nodeName(e,"input")?(e.defaultValue=n,t):I&&I.set(e,n,r)}}),Q||(I=b.valHooks.button={get:function(e,n){var r=e.getAttributeNode(n);return r&&("id"===n||"name"===n||"coords"===n?""!==r.value:r.specified)?r.value:t},set:function(e,n,r){var i=e.getAttributeNode(r);return i||e.setAttributeNode(i=e.ownerDocument.createAttribute(r)),i.value=n+="","value"===r||n===e.getAttribute(r)?n:t}},b.attrHooks.contenteditable={get:I.get,set:function(e,t,n){I.set(e,""===t?!1:t,n)}},b.each(["width","height"],function(e,n){b.attrHooks[n]=b.extend(b.attrHooks[n],{set:function(e,r){return""===r?(e.setAttribute(n,"auto"),r):t}})})),b.support.hrefNormalized||(b.each(["href","src","width","height"],function(e,n){b.attrHooks[n]=b.extend(b.attrHooks[n],{get:function(e){var r=e.getAttribute(n,2);return null==r?t:r}})}),b.each(["href","src"],function(e,t){b.propHooks[t]={get:function(e){return e.getAttribute(t,4)}}})),b.support.style||(b.attrHooks.style={get:function(e){return e.style.cssText||t},set:function(e,t){return e.style.cssText=t+""}}),b.support.optSelected||(b.propHooks.selected=b.extend(b.propHooks.selected,{get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null}})),b.support.enctype||(b.propFix.enctype="encoding"),b.support.checkOn||b.each(["radio","checkbox"],function(){b.valHooks[this]={get:function(e){return null===e.getAttribute("value")?"on":e.value}}}),b.each(["radio","checkbox"],function(){b.valHooks[this]=b.extend(b.valHooks[this],{set:function(e,n){return b.isArray(n)?e.checked=b.inArray(b(e).val(),n)>=0:t}})});var Z=/^(?:input|select|textarea)$/i,et=/^key/,tt=/^(?:mouse|contextmenu)|click/,nt=/^(?:focusinfocus|focusoutblur)$/,rt=/^([^.]*)(?:\.(.+)|)$/;function it(){return!0}function ot(){return!1}b.event={global:{},add:function(e,n,r,o,a){var s,u,l,c,p,f,d,h,g,m,y,v=b._data(e);if(v){r.handler&&(c=r,r=c.handler,a=c.selector),r.guid||(r.guid=b.guid++),(u=v.events)||(u=v.events={}),(f=v.handle)||(f=v.handle=function(e){return typeof b===i||e&&b.event.triggered===e.type?t:b.event.dispatch.apply(f.elem,arguments)},f.elem=e),n=(n||"").match(w)||[""],l=n.length;while(l--)s=rt.exec(n[l])||[],g=y=s[1],m=(s[2]||"").split(".").sort(),p=b.event.special[g]||{},g=(a?p.delegateType:p.bindType)||g,p=b.event.special[g]||{},d=b.extend({type:g,origType:y,data:o,handler:r,guid:r.guid,selector:a,needsContext:a&&b.expr.match.needsContext.test(a),namespace:m.join(".")},c),(h=u[g])||(h=u[g]=[],h.delegateCount=0,p.setup&&p.setup.call(e,o,m,f)!==!1||(e.addEventListener?e.addEventListener(g,f,!1):e.attachEvent&&e.attachEvent("on"+g,f))),p.add&&(p.add.call(e,d),d.handler.guid||(d.handler.guid=r.guid)),a?h.splice(h.delegateCount++,0,d):h.push(d),b.event.global[g]=!0;e=null}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,p,f,d,h,g,m=b.hasData(e)&&b._data(e);if(m&&(c=m.events)){t=(t||"").match(w)||[""],l=t.length;while(l--)if(s=rt.exec(t[l])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){p=b.event.special[d]||{},d=(r?p.delegateType:p.bindType)||d,f=c[d]||[],s=s[2]&&RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),u=o=f.length;while(o--)a=f[o],!i&&g!==a.origType||n&&n.guid!==a.guid||s&&!s.test(a.namespace)||r&&r!==a.selector&&("**"!==r||!a.selector)||(f.splice(o,1),a.selector&&f.delegateCount--,p.remove&&p.remove.call(e,a));u&&!f.length&&(p.teardown&&p.teardown.call(e,h,m.handle)!==!1||b.removeEvent(e,d,m.handle),delete c[d])}else for(d in c)b.event.remove(e,d+t[l],n,r,!0);b.isEmptyObject(c)&&(delete m.handle,b._removeData(e,"events"))}},trigger:function(n,r,i,a){var s,u,l,c,p,f,d,h=[i||o],g=y.call(n,"type")?n.type:n,m=y.call(n,"namespace")?n.namespace.split("."):[];if(l=f=i=i||o,3!==i.nodeType&&8!==i.nodeType&&!nt.test(g+b.event.triggered)&&(g.indexOf(".")>=0&&(m=g.split("."),g=m.shift(),m.sort()),u=0>g.indexOf(":")&&"on"+g,n=n[b.expando]?n:new b.Event(g,"object"==typeof n&&n),n.isTrigger=!0,n.namespace=m.join("."),n.namespace_re=n.namespace?RegExp("(^|\\.)"+m.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,n.result=t,n.target||(n.target=i),r=null==r?[n]:b.makeArray(r,[n]),p=b.event.special[g]||{},a||!p.trigger||p.trigger.apply(i,r)!==!1)){if(!a&&!p.noBubble&&!b.isWindow(i)){for(c=p.delegateType||g,nt.test(c+g)||(l=l.parentNode);l;l=l.parentNode)h.push(l),f=l;f===(i.ownerDocument||o)&&h.push(f.defaultView||f.parentWindow||e)}d=0;while((l=h[d++])&&!n.isPropagationStopped())n.type=d>1?c:p.bindType||g,s=(b._data(l,"events")||{})[n.type]&&b._data(l,"handle"),s&&s.apply(l,r),s=u&&l[u],s&&b.acceptData(l)&&s.apply&&s.apply(l,r)===!1&&n.preventDefault();if(n.type=g,!(a||n.isDefaultPrevented()||p._default&&p._default.apply(i.ownerDocument,r)!==!1||"click"===g&&b.nodeName(i,"a")||!b.acceptData(i)||!u||!i[g]||b.isWindow(i))){f=i[u],f&&(i[u]=null),b.event.triggered=g;try{i[g]()}catch(v){}b.event.triggered=t,f&&(i[u]=f)}return n.result}},dispatch:function(e){e=b.event.fix(e);var n,r,i,o,a,s=[],u=h.call(arguments),l=(b._data(this,"events")||{})[e.type]||[],c=b.event.special[e.type]||{};if(u[0]=e,e.delegateTarget=this,!c.preDispatch||c.preDispatch.call(this,e)!==!1){s=b.event.handlers.call(this,e,l),n=0;while((o=s[n++])&&!e.isPropagationStopped()){e.currentTarget=o.elem,a=0;while((i=o.handlers[a++])&&!e.isImmediatePropagationStopped())(!e.namespace_re||e.namespace_re.test(i.namespace))&&(e.handleObj=i,e.data=i.data,r=((b.event.special[i.origType]||{}).handle||i.handler).apply(o.elem,u),r!==t&&(e.result=r)===!1&&(e.preventDefault(),e.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,e),e.result}},handlers:function(e,n){var r,i,o,a,s=[],u=n.delegateCount,l=e.target;if(u&&l.nodeType&&(!e.button||"click"!==e.type))for(;l!=this;l=l.parentNode||this)if(1===l.nodeType&&(l.disabled!==!0||"click"!==e.type)){for(o=[],a=0;u>a;a++)i=n[a],r=i.selector+" ",o[r]===t&&(o[r]=i.needsContext?b(r,this).index(l)>=0:b.find(r,this,null,[l]).length),o[r]&&o.push(i);o.length&&s.push({elem:l,handlers:o})}return n.length>u&&s.push({elem:this,handlers:n.slice(u)}),s},fix:function(e){if(e[b.expando])return e;var t,n,r,i=e.type,a=e,s=this.fixHooks[i];s||(this.fixHooks[i]=s=tt.test(i)?this.mouseHooks:et.test(i)?this.keyHooks:{}),r=s.props?this.props.concat(s.props):this.props,e=new b.Event(a),t=r.length;while(t--)n=r[t],e[n]=a[n];return e.target||(e.target=a.srcElement||o),3===e.target.nodeType&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,s.filter?s.filter(e,a):e},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,n){var r,i,a,s=n.button,u=n.fromElement;return null==e.pageX&&null!=n.clientX&&(i=e.target.ownerDocument||o,a=i.documentElement,r=i.body,e.pageX=n.clientX+(a&&a.scrollLeft||r&&r.scrollLeft||0)-(a&&a.clientLeft||r&&r.clientLeft||0),e.pageY=n.clientY+(a&&a.scrollTop||r&&r.scrollTop||0)-(a&&a.clientTop||r&&r.clientTop||0)),!e.relatedTarget&&u&&(e.relatedTarget=u===e.target?n.toElement:u),e.which||s===t||(e.which=1&s?1:2&s?3:4&s?2:0),e}},special:{load:{noBubble:!0},click:{trigger:function(){return b.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):t}},focus:{trigger:function(){if(this!==o.activeElement&&this.focus)try{return this.focus(),!1}catch(e){}},delegateType:"focusin"},blur:{trigger:function(){return this===o.activeElement&&this.blur?(this.blur(),!1):t},delegateType:"focusout"},beforeunload:{postDispatch:function(e){e.result!==t&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var i=b.extend(new b.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?b.event.trigger(i,null,t):b.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},b.removeEvent=o.removeEventListener?function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}:function(e,t,n){var r="on"+t;e.detachEvent&&(typeof e[r]===i&&(e[r]=null),e.detachEvent(r,n))},b.Event=function(e,n){return this instanceof b.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.returnValue===!1||e.getPreventDefault&&e.getPreventDefault()?it:ot):this.type=e,n&&b.extend(this,n),this.timeStamp=e&&e.timeStamp||b.now(),this[b.expando]=!0,t):new b.Event(e,n)},b.Event.prototype={isDefaultPrevented:ot,isPropagationStopped:ot,isImmediatePropagationStopped:ot,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=it,e&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=it,e&&(e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=it,this.stopPropagation()}},b.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){b.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;
945
- return(!i||i!==r&&!b.contains(r,i))&&(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),b.support.submitBubbles||(b.event.special.submit={setup:function(){return b.nodeName(this,"form")?!1:(b.event.add(this,"click._submit keypress._submit",function(e){var n=e.target,r=b.nodeName(n,"input")||b.nodeName(n,"button")?n.form:t;r&&!b._data(r,"submitBubbles")&&(b.event.add(r,"submit._submit",function(e){e._submit_bubble=!0}),b._data(r,"submitBubbles",!0))}),t)},postDispatch:function(e){e._submit_bubble&&(delete e._submit_bubble,this.parentNode&&!e.isTrigger&&b.event.simulate("submit",this.parentNode,e,!0))},teardown:function(){return b.nodeName(this,"form")?!1:(b.event.remove(this,"._submit"),t)}}),b.support.changeBubbles||(b.event.special.change={setup:function(){return Z.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(b.event.add(this,"propertychange._change",function(e){"checked"===e.originalEvent.propertyName&&(this._just_changed=!0)}),b.event.add(this,"click._change",function(e){this._just_changed&&!e.isTrigger&&(this._just_changed=!1),b.event.simulate("change",this,e,!0)})),!1):(b.event.add(this,"beforeactivate._change",function(e){var t=e.target;Z.test(t.nodeName)&&!b._data(t,"changeBubbles")&&(b.event.add(t,"change._change",function(e){!this.parentNode||e.isSimulated||e.isTrigger||b.event.simulate("change",this.parentNode,e,!0)}),b._data(t,"changeBubbles",!0))}),t)},handle:function(e){var n=e.target;return this!==n||e.isSimulated||e.isTrigger||"radio"!==n.type&&"checkbox"!==n.type?e.handleObj.handler.apply(this,arguments):t},teardown:function(){return b.event.remove(this,"._change"),!Z.test(this.nodeName)}}),b.support.focusinBubbles||b.each({focus:"focusin",blur:"focusout"},function(e,t){var n=0,r=function(e){b.event.simulate(t,e.target,b.event.fix(e),!0)};b.event.special[t]={setup:function(){0===n++&&o.addEventListener(e,r,!0)},teardown:function(){0===--n&&o.removeEventListener(e,r,!0)}}}),b.fn.extend({on:function(e,n,r,i,o){var a,s;if("object"==typeof e){"string"!=typeof n&&(r=r||n,n=t);for(a in e)this.on(a,n,r,e[a],o);return this}if(null==r&&null==i?(i=n,r=n=t):null==i&&("string"==typeof n?(i=r,r=t):(i=r,r=n,n=t)),i===!1)i=ot;else if(!i)return this;return 1===o&&(s=i,i=function(e){return b().off(e),s.apply(this,arguments)},i.guid=s.guid||(s.guid=b.guid++)),this.each(function(){b.event.add(this,e,i,r,n)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,n,r){var i,o;if(e&&e.preventDefault&&e.handleObj)return i=e.handleObj,b(e.delegateTarget).off(i.namespace?i.origType+"."+i.namespace:i.origType,i.selector,i.handler),this;if("object"==typeof e){for(o in e)this.off(o,n,e[o]);return this}return(n===!1||"function"==typeof n)&&(r=n,n=t),r===!1&&(r=ot),this.each(function(){b.event.remove(this,e,r,n)})},bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},trigger:function(e,t){return this.each(function(){b.event.trigger(e,t,this)})},triggerHandler:function(e,n){var r=this[0];return r?b.event.trigger(e,n,r,!0):t}}),function(e,t){var n,r,i,o,a,s,u,l,c,p,f,d,h,g,m,y,v,x="sizzle"+-new Date,w=e.document,T={},N=0,C=0,k=it(),E=it(),S=it(),A=typeof t,j=1<<31,D=[],L=D.pop,H=D.push,q=D.slice,M=D.indexOf||function(e){var t=0,n=this.length;for(;n>t;t++)if(this[t]===e)return t;return-1},_="[\\x20\\t\\r\\n\\f]",F="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",O=F.replace("w","w#"),B="([*^$|!~]?=)",P="\\["+_+"*("+F+")"+_+"*(?:"+B+_+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+O+")|)|)"+_+"*\\]",R=":("+F+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+P.replace(3,8)+")*)|.*)\\)|)",W=RegExp("^"+_+"+|((?:^|[^\\\\])(?:\\\\.)*)"+_+"+$","g"),$=RegExp("^"+_+"*,"+_+"*"),I=RegExp("^"+_+"*([\\x20\\t\\r\\n\\f>+~])"+_+"*"),z=RegExp(R),X=RegExp("^"+O+"$"),U={ID:RegExp("^#("+F+")"),CLASS:RegExp("^\\.("+F+")"),NAME:RegExp("^\\[name=['\"]?("+F+")['\"]?\\]"),TAG:RegExp("^("+F.replace("w","w*")+")"),ATTR:RegExp("^"+P),PSEUDO:RegExp("^"+R),CHILD:RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+_+"*(even|odd|(([+-]|)(\\d*)n|)"+_+"*(?:([+-]|)"+_+"*(\\d+)|))"+_+"*\\)|)","i"),needsContext:RegExp("^"+_+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+_+"*((?:-\\d)?\\d*)"+_+"*\\)|)(?=[^-]|$)","i")},V=/[\x20\t\r\n\f]*[+~]/,Y=/^[^{]+\{\s*\[native code/,J=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,G=/^(?:input|select|textarea|button)$/i,Q=/^h\d$/i,K=/'|\\/g,Z=/\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,et=/\\([\da-fA-F]{1,6}[\x20\t\r\n\f]?|.)/g,tt=function(e,t){var n="0x"+t-65536;return n!==n?t:0>n?String.fromCharCode(n+65536):String.fromCharCode(55296|n>>10,56320|1023&n)};try{q.call(w.documentElement.childNodes,0)[0].nodeType}catch(nt){q=function(e){var t,n=[];while(t=this[e++])n.push(t);return n}}function rt(e){return Y.test(e+"")}function it(){var e,t=[];return e=function(n,r){return t.push(n+=" ")>i.cacheLength&&delete e[t.shift()],e[n]=r}}function ot(e){return e[x]=!0,e}function at(e){var t=p.createElement("div");try{return e(t)}catch(n){return!1}finally{t=null}}function st(e,t,n,r){var i,o,a,s,u,l,f,g,m,v;if((t?t.ownerDocument||t:w)!==p&&c(t),t=t||p,n=n||[],!e||"string"!=typeof e)return n;if(1!==(s=t.nodeType)&&9!==s)return[];if(!d&&!r){if(i=J.exec(e))if(a=i[1]){if(9===s){if(o=t.getElementById(a),!o||!o.parentNode)return n;if(o.id===a)return n.push(o),n}else if(t.ownerDocument&&(o=t.ownerDocument.getElementById(a))&&y(t,o)&&o.id===a)return n.push(o),n}else{if(i[2])return H.apply(n,q.call(t.getElementsByTagName(e),0)),n;if((a=i[3])&&T.getByClassName&&t.getElementsByClassName)return H.apply(n,q.call(t.getElementsByClassName(a),0)),n}if(T.qsa&&!h.test(e)){if(f=!0,g=x,m=t,v=9===s&&e,1===s&&"object"!==t.nodeName.toLowerCase()){l=ft(e),(f=t.getAttribute("id"))?g=f.replace(K,"\\$&"):t.setAttribute("id",g),g="[id='"+g+"'] ",u=l.length;while(u--)l[u]=g+dt(l[u]);m=V.test(e)&&t.parentNode||t,v=l.join(",")}if(v)try{return H.apply(n,q.call(m.querySelectorAll(v),0)),n}catch(b){}finally{f||t.removeAttribute("id")}}}return wt(e.replace(W,"$1"),t,n,r)}a=st.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},c=st.setDocument=function(e){var n=e?e.ownerDocument||e:w;return n!==p&&9===n.nodeType&&n.documentElement?(p=n,f=n.documentElement,d=a(n),T.tagNameNoComments=at(function(e){return e.appendChild(n.createComment("")),!e.getElementsByTagName("*").length}),T.attributes=at(function(e){e.innerHTML="<select></select>";var t=typeof e.lastChild.getAttribute("multiple");return"boolean"!==t&&"string"!==t}),T.getByClassName=at(function(e){return e.innerHTML="<div class='hidden e'></div><div class='hidden'></div>",e.getElementsByClassName&&e.getElementsByClassName("e").length?(e.lastChild.className="e",2===e.getElementsByClassName("e").length):!1}),T.getByName=at(function(e){e.id=x+0,e.innerHTML="<a name='"+x+"'></a><div name='"+x+"'></div>",f.insertBefore(e,f.firstChild);var t=n.getElementsByName&&n.getElementsByName(x).length===2+n.getElementsByName(x+0).length;return T.getIdNotName=!n.getElementById(x),f.removeChild(e),t}),i.attrHandle=at(function(e){return e.innerHTML="<a href='#'></a>",e.firstChild&&typeof e.firstChild.getAttribute!==A&&"#"===e.firstChild.getAttribute("href")})?{}:{href:function(e){return e.getAttribute("href",2)},type:function(e){return e.getAttribute("type")}},T.getIdNotName?(i.find.ID=function(e,t){if(typeof t.getElementById!==A&&!d){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},i.filter.ID=function(e){var t=e.replace(et,tt);return function(e){return e.getAttribute("id")===t}}):(i.find.ID=function(e,n){if(typeof n.getElementById!==A&&!d){var r=n.getElementById(e);return r?r.id===e||typeof r.getAttributeNode!==A&&r.getAttributeNode("id").value===e?[r]:t:[]}},i.filter.ID=function(e){var t=e.replace(et,tt);return function(e){var n=typeof e.getAttributeNode!==A&&e.getAttributeNode("id");return n&&n.value===t}}),i.find.TAG=T.tagNameNoComments?function(e,n){return typeof n.getElementsByTagName!==A?n.getElementsByTagName(e):t}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},i.find.NAME=T.getByName&&function(e,n){return typeof n.getElementsByName!==A?n.getElementsByName(name):t},i.find.CLASS=T.getByClassName&&function(e,n){return typeof n.getElementsByClassName===A||d?t:n.getElementsByClassName(e)},g=[],h=[":focus"],(T.qsa=rt(n.querySelectorAll))&&(at(function(e){e.innerHTML="<select><option selected=''></option></select>",e.querySelectorAll("[selected]").length||h.push("\\["+_+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),e.querySelectorAll(":checked").length||h.push(":checked")}),at(function(e){e.innerHTML="<input type='hidden' i=''/>",e.querySelectorAll("[i^='']").length&&h.push("[*^$]="+_+"*(?:\"\"|'')"),e.querySelectorAll(":enabled").length||h.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),h.push(",.*:")})),(T.matchesSelector=rt(m=f.matchesSelector||f.mozMatchesSelector||f.webkitMatchesSelector||f.oMatchesSelector||f.msMatchesSelector))&&at(function(e){T.disconnectedMatch=m.call(e,"div"),m.call(e,"[s!='']:x"),g.push("!=",R)}),h=RegExp(h.join("|")),g=RegExp(g.join("|")),y=rt(f.contains)||f.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},v=f.compareDocumentPosition?function(e,t){var r;return e===t?(u=!0,0):(r=t.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(t))?1&r||e.parentNode&&11===e.parentNode.nodeType?e===n||y(w,e)?-1:t===n||y(w,t)?1:0:4&r?-1:1:e.compareDocumentPosition?-1:1}:function(e,t){var r,i=0,o=e.parentNode,a=t.parentNode,s=[e],l=[t];if(e===t)return u=!0,0;if(!o||!a)return e===n?-1:t===n?1:o?-1:a?1:0;if(o===a)return ut(e,t);r=e;while(r=r.parentNode)s.unshift(r);r=t;while(r=r.parentNode)l.unshift(r);while(s[i]===l[i])i++;return i?ut(s[i],l[i]):s[i]===w?-1:l[i]===w?1:0},u=!1,[0,0].sort(v),T.detectDuplicates=u,p):p},st.matches=function(e,t){return st(e,null,null,t)},st.matchesSelector=function(e,t){if((e.ownerDocument||e)!==p&&c(e),t=t.replace(Z,"='$1']"),!(!T.matchesSelector||d||g&&g.test(t)||h.test(t)))try{var n=m.call(e,t);if(n||T.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(r){}return st(t,p,null,[e]).length>0},st.contains=function(e,t){return(e.ownerDocument||e)!==p&&c(e),y(e,t)},st.attr=function(e,t){var n;return(e.ownerDocument||e)!==p&&c(e),d||(t=t.toLowerCase()),(n=i.attrHandle[t])?n(e):d||T.attributes?e.getAttribute(t):((n=e.getAttributeNode(t))||e.getAttribute(t))&&e[t]===!0?t:n&&n.specified?n.value:null},st.error=function(e){throw Error("Syntax error, unrecognized expression: "+e)},st.uniqueSort=function(e){var t,n=[],r=1,i=0;if(u=!T.detectDuplicates,e.sort(v),u){for(;t=e[r];r++)t===e[r-1]&&(i=n.push(r));while(i--)e.splice(n[i],1)}return e};function ut(e,t){var n=t&&e,r=n&&(~t.sourceIndex||j)-(~e.sourceIndex||j);if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function lt(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function ct(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function pt(e){return ot(function(t){return t=+t,ot(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}o=st.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=o(t);return n},i=st.selectors={cacheLength:50,createPseudo:ot,match:U,find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(et,tt),e[3]=(e[4]||e[5]||"").replace(et,tt),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||st.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&st.error(e[0]),e},PSEUDO:function(e){var t,n=!e[5]&&e[2];return U.CHILD.test(e[0])?null:(e[4]?e[2]=e[4]:n&&z.test(n)&&(t=ft(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){return"*"===e?function(){return!0}:(e=e.replace(et,tt).toLowerCase(),function(t){return t.nodeName&&t.nodeName.toLowerCase()===e})},CLASS:function(e){var t=k[e+" "];return t||(t=RegExp("(^|"+_+")"+e+"("+_+"|$)"))&&k(e,function(e){return t.test(e.className||typeof e.getAttribute!==A&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=st.attr(r,e);return null==i?"!="===t:t?(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i+" ").indexOf(n)>-1:"|="===t?i===n||i.slice(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,p,f,d,h,g=o!==a?"nextSibling":"previousSibling",m=t.parentNode,y=s&&t.nodeName.toLowerCase(),v=!u&&!s;if(m){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===y:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?m.firstChild:m.lastChild],a&&v){c=m[x]||(m[x]={}),l=c[e]||[],d=l[0]===N&&l[1],f=l[0]===N&&l[2],p=d&&m.childNodes[d];while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if(1===p.nodeType&&++f&&p===t){c[e]=[N,d,f];break}}else if(v&&(l=(t[x]||(t[x]={}))[e])&&l[0]===N)f=l[1];else while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===y:1===p.nodeType)&&++f&&(v&&((p[x]||(p[x]={}))[e]=[N,f]),p===t))break;return f-=i,f===r||0===f%r&&f/r>=0}}},PSEUDO:function(e,t){var n,r=i.pseudos[e]||i.setFilters[e.toLowerCase()]||st.error("unsupported pseudo: "+e);return r[x]?r(t):r.length>1?(n=[e,e,"",t],i.setFilters.hasOwnProperty(e.toLowerCase())?ot(function(e,n){var i,o=r(e,t),a=o.length;while(a--)i=M.call(e,o[a]),e[i]=!(n[i]=o[a])}):function(e){return r(e,0,n)}):r}},pseudos:{not:ot(function(e){var t=[],n=[],r=s(e.replace(W,"$1"));return r[x]?ot(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),!n.pop()}}),has:ot(function(e){return function(t){return st(e,t).length>0}}),contains:ot(function(e){return function(t){return(t.textContent||t.innerText||o(t)).indexOf(e)>-1}}),lang:ot(function(e){return X.test(e||"")||st.error("unsupported lang: "+e),e=e.replace(et,tt).toLowerCase(),function(t){var n;do if(n=d?t.getAttribute("xml:lang")||t.getAttribute("lang"):t.lang)return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===f},focus:function(e){return e===p.activeElement&&(!p.hasFocus||p.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>"@"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!i.pseudos.empty(e)},header:function(e){return Q.test(e.nodeName)},input:function(e){return G.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||t.toLowerCase()===e.type)},first:pt(function(){return[0]}),last:pt(function(e,t){return[t-1]}),eq:pt(function(e,t,n){return[0>n?n+t:n]}),even:pt(function(e,t){var n=0;for(;t>n;n+=2)e.push(n);return e}),odd:pt(function(e,t){var n=1;for(;t>n;n+=2)e.push(n);return e}),lt:pt(function(e,t,n){var r=0>n?n+t:n;for(;--r>=0;)e.push(r);return e}),gt:pt(function(e,t,n){var r=0>n?n+t:n;for(;t>++r;)e.push(r);return e})}};for(n in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})i.pseudos[n]=lt(n);for(n in{submit:!0,reset:!0})i.pseudos[n]=ct(n);function ft(e,t){var n,r,o,a,s,u,l,c=E[e+" "];if(c)return t?0:c.slice(0);s=e,u=[],l=i.preFilter;while(s){(!n||(r=$.exec(s)))&&(r&&(s=s.slice(r[0].length)||s),u.push(o=[])),n=!1,(r=I.exec(s))&&(n=r.shift(),o.push({value:n,type:r[0].replace(W," ")}),s=s.slice(n.length));for(a in i.filter)!(r=U[a].exec(s))||l[a]&&!(r=l[a](r))||(n=r.shift(),o.push({value:n,type:a,matches:r}),s=s.slice(n.length));if(!n)break}return t?s.length:s?st.error(e):E(e,u).slice(0)}function dt(e){var t=0,n=e.length,r="";for(;n>t;t++)r+=e[t].value;return r}function ht(e,t,n){var i=t.dir,o=n&&"parentNode"===i,a=C++;return t.first?function(t,n,r){while(t=t[i])if(1===t.nodeType||o)return e(t,n,r)}:function(t,n,s){var u,l,c,p=N+" "+a;if(s){while(t=t[i])if((1===t.nodeType||o)&&e(t,n,s))return!0}else while(t=t[i])if(1===t.nodeType||o)if(c=t[x]||(t[x]={}),(l=c[i])&&l[0]===p){if((u=l[1])===!0||u===r)return u===!0}else if(l=c[i]=[p],l[1]=e(t,n,s)||r,l[1]===!0)return!0}}function gt(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function mt(e,t,n,r,i){var o,a=[],s=0,u=e.length,l=null!=t;for(;u>s;s++)(o=e[s])&&(!n||n(o,r,i))&&(a.push(o),l&&t.push(s));return a}function yt(e,t,n,r,i,o){return r&&!r[x]&&(r=yt(r)),i&&!i[x]&&(i=yt(i,o)),ot(function(o,a,s,u){var l,c,p,f=[],d=[],h=a.length,g=o||xt(t||"*",s.nodeType?[s]:s,[]),m=!e||!o&&t?g:mt(g,f,e,s,u),y=n?i||(o?e:h||r)?[]:a:m;if(n&&n(m,y,s,u),r){l=mt(y,d),r(l,[],s,u),c=l.length;while(c--)(p=l[c])&&(y[d[c]]=!(m[d[c]]=p))}if(o){if(i||e){if(i){l=[],c=y.length;while(c--)(p=y[c])&&l.push(m[c]=p);i(null,y=[],l,u)}c=y.length;while(c--)(p=y[c])&&(l=i?M.call(o,p):f[c])>-1&&(o[l]=!(a[l]=p))}}else y=mt(y===a?y.splice(h,y.length):y),i?i(null,a,y,u):H.apply(a,y)})}function vt(e){var t,n,r,o=e.length,a=i.relative[e[0].type],s=a||i.relative[" "],u=a?1:0,c=ht(function(e){return e===t},s,!0),p=ht(function(e){return M.call(t,e)>-1},s,!0),f=[function(e,n,r){return!a&&(r||n!==l)||((t=n).nodeType?c(e,n,r):p(e,n,r))}];for(;o>u;u++)if(n=i.relative[e[u].type])f=[ht(gt(f),n)];else{if(n=i.filter[e[u].type].apply(null,e[u].matches),n[x]){for(r=++u;o>r;r++)if(i.relative[e[r].type])break;return yt(u>1&&gt(f),u>1&&dt(e.slice(0,u-1)).replace(W,"$1"),n,r>u&&vt(e.slice(u,r)),o>r&&vt(e=e.slice(r)),o>r&&dt(e))}f.push(n)}return gt(f)}function bt(e,t){var n=0,o=t.length>0,a=e.length>0,s=function(s,u,c,f,d){var h,g,m,y=[],v=0,b="0",x=s&&[],w=null!=d,T=l,C=s||a&&i.find.TAG("*",d&&u.parentNode||u),k=N+=null==T?1:Math.random()||.1;for(w&&(l=u!==p&&u,r=n);null!=(h=C[b]);b++){if(a&&h){g=0;while(m=e[g++])if(m(h,u,c)){f.push(h);break}w&&(N=k,r=++n)}o&&((h=!m&&h)&&v--,s&&x.push(h))}if(v+=b,o&&b!==v){g=0;while(m=t[g++])m(x,y,u,c);if(s){if(v>0)while(b--)x[b]||y[b]||(y[b]=L.call(f));y=mt(y)}H.apply(f,y),w&&!s&&y.length>0&&v+t.length>1&&st.uniqueSort(f)}return w&&(N=k,l=T),x};return o?ot(s):s}s=st.compile=function(e,t){var n,r=[],i=[],o=S[e+" "];if(!o){t||(t=ft(e)),n=t.length;while(n--)o=vt(t[n]),o[x]?r.push(o):i.push(o);o=S(e,bt(i,r))}return o};function xt(e,t,n){var r=0,i=t.length;for(;i>r;r++)st(e,t[r],n);return n}function wt(e,t,n,r){var o,a,u,l,c,p=ft(e);if(!r&&1===p.length){if(a=p[0]=p[0].slice(0),a.length>2&&"ID"===(u=a[0]).type&&9===t.nodeType&&!d&&i.relative[a[1].type]){if(t=i.find.ID(u.matches[0].replace(et,tt),t)[0],!t)return n;e=e.slice(a.shift().value.length)}o=U.needsContext.test(e)?0:a.length;while(o--){if(u=a[o],i.relative[l=u.type])break;if((c=i.find[l])&&(r=c(u.matches[0].replace(et,tt),V.test(a[0].type)&&t.parentNode||t))){if(a.splice(o,1),e=r.length&&dt(a),!e)return H.apply(n,q.call(r,0)),n;break}}}return s(e,p)(r,t,d,n,V.test(e)),n}i.pseudos.nth=i.pseudos.eq;function Tt(){}i.filters=Tt.prototype=i.pseudos,i.setFilters=new Tt,c(),st.attr=b.attr,b.find=st,b.expr=st.selectors,b.expr[":"]=b.expr.pseudos,b.unique=st.uniqueSort,b.text=st.getText,b.isXMLDoc=st.isXML,b.contains=st.contains}(e);var at=/Until$/,st=/^(?:parents|prev(?:Until|All))/,ut=/^.[^:#\[\.,]*$/,lt=b.expr.match.needsContext,ct={children:!0,contents:!0,next:!0,prev:!0};b.fn.extend({find:function(e){var t,n,r,i=this.length;if("string"!=typeof e)return r=this,this.pushStack(b(e).filter(function(){for(t=0;i>t;t++)if(b.contains(r[t],this))return!0}));for(n=[],t=0;i>t;t++)b.find(e,this[t],n);return n=this.pushStack(i>1?b.unique(n):n),n.selector=(this.selector?this.selector+" ":"")+e,n},has:function(e){var t,n=b(e,this),r=n.length;return this.filter(function(){for(t=0;r>t;t++)if(b.contains(this,n[t]))return!0})},not:function(e){return this.pushStack(ft(this,e,!1))},filter:function(e){return this.pushStack(ft(this,e,!0))},is:function(e){return!!e&&("string"==typeof e?lt.test(e)?b(e,this.context).index(this[0])>=0:b.filter(e,this).length>0:this.filter(e).length>0)},closest:function(e,t){var n,r=0,i=this.length,o=[],a=lt.test(e)||"string"!=typeof e?b(e,t||this.context):0;for(;i>r;r++){n=this[r];while(n&&n.ownerDocument&&n!==t&&11!==n.nodeType){if(a?a.index(n)>-1:b.find.matchesSelector(n,e)){o.push(n);break}n=n.parentNode}}return this.pushStack(o.length>1?b.unique(o):o)},index:function(e){return e?"string"==typeof e?b.inArray(this[0],b(e)):b.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){var n="string"==typeof e?b(e,t):b.makeArray(e&&e.nodeType?[e]:e),r=b.merge(this.get(),n);return this.pushStack(b.unique(r))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),b.fn.andSelf=b.fn.addBack;function pt(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}b.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return b.dir(e,"parentNode")},parentsUntil:function(e,t,n){return b.dir(e,"parentNode",n)},next:function(e){return pt(e,"nextSibling")},prev:function(e){return pt(e,"previousSibling")},nextAll:function(e){return b.dir(e,"nextSibling")},prevAll:function(e){return b.dir(e,"previousSibling")},nextUntil:function(e,t,n){return b.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return b.dir(e,"previousSibling",n)},siblings:function(e){return b.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return b.sibling(e.firstChild)},contents:function(e){return b.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:b.merge([],e.childNodes)}},function(e,t){b.fn[e]=function(n,r){var i=b.map(this,t,n);return at.test(e)||(r=n),r&&"string"==typeof r&&(i=b.filter(r,i)),i=this.length>1&&!ct[e]?b.unique(i):i,this.length>1&&st.test(e)&&(i=i.reverse()),this.pushStack(i)}}),b.extend({filter:function(e,t,n){return n&&(e=":not("+e+")"),1===t.length?b.find.matchesSelector(t[0],e)?[t[0]]:[]:b.find.matches(e,t)},dir:function(e,n,r){var i=[],o=e[n];while(o&&9!==o.nodeType&&(r===t||1!==o.nodeType||!b(o).is(r)))1===o.nodeType&&i.push(o),o=o[n];return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}});function ft(e,t,n){if(t=t||0,b.isFunction(t))return b.grep(e,function(e,r){var i=!!t.call(e,r,e);return i===n});if(t.nodeType)return b.grep(e,function(e){return e===t===n});if("string"==typeof t){var r=b.grep(e,function(e){return 1===e.nodeType});if(ut.test(t))return b.filter(t,r,!n);t=b.filter(t,r)}return b.grep(e,function(e){return b.inArray(e,t)>=0===n})}function dt(e){var t=ht.split("|"),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}var ht="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",gt=/ jQuery\d+="(?:null|\d+)"/g,mt=RegExp("<(?:"+ht+")[\\s/>]","i"),yt=/^\s+/,vt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bt=/<([\w:]+)/,xt=/<tbody/i,wt=/<|&#?\w+;/,Tt=/<(?:script|style|link)/i,Nt=/^(?:checkbox|radio)$/i,Ct=/checked\s*(?:[^=]|=\s*.checked.)/i,kt=/^$|\/(?:java|ecma)script/i,Et=/^true\/(.*)/,St=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,At={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:b.support.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},jt=dt(o),Dt=jt.appendChild(o.createElement("div"));At.optgroup=At.option,At.tbody=At.tfoot=At.colgroup=At.caption=At.thead,At.th=At.td,b.fn.extend({text:function(e){return b.access(this,function(e){return e===t?b.text(this):this.empty().append((this[0]&&this[0].ownerDocument||o).createTextNode(e))},null,e,arguments.length)},wrapAll:function(e){if(b.isFunction(e))return this.each(function(t){b(this).wrapAll(e.call(this,t))});if(this[0]){var t=b(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&&1===e.firstChild.nodeType)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return b.isFunction(e)?this.each(function(t){b(this).wrapInner(e.call(this,t))}):this.each(function(){var t=b(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=b.isFunction(e);return this.each(function(n){b(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){b.nodeName(this,"body")||b(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(e){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&this.appendChild(e)})},prepend:function(){return this.domManip(arguments,!0,function(e){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&this.insertBefore(e,this.firstChild)})},before:function(){return this.domManip(arguments,!1,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,!1,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){var n,r=0;for(;null!=(n=this[r]);r++)(!e||b.filter(e,[n]).length>0)&&(t||1!==n.nodeType||b.cleanData(Ot(n)),n.parentNode&&(t&&b.contains(n.ownerDocument,n)&&Mt(Ot(n,"script")),n.parentNode.removeChild(n)));return this},empty:function(){var e,t=0;for(;null!=(e=this[t]);t++){1===e.nodeType&&b.cleanData(Ot(e,!1));while(e.firstChild)e.removeChild(e.firstChild);e.options&&b.nodeName(e,"select")&&(e.options.length=0)}return this},clone:function(e,t){return e=null==e?!1:e,t=null==t?e:t,this.map(function(){return b.clone(this,e,t)})},html:function(e){return b.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return 1===n.nodeType?n.innerHTML.replace(gt,""):t;if(!("string"!=typeof e||Tt.test(e)||!b.support.htmlSerialize&&mt.test(e)||!b.support.leadingWhitespace&&yt.test(e)||At[(bt.exec(e)||["",""])[1].toLowerCase()])){e=e.replace(vt,"<$1></$2>");try{for(;i>r;r++)n=this[r]||{},1===n.nodeType&&(b.cleanData(Ot(n,!1)),n.innerHTML=e);n=0}catch(o){}}n&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(e){var t=b.isFunction(e);return t||"string"==typeof e||(e=b(e).not(this).detach()),this.domManip([e],!0,function(e){var t=this.nextSibling,n=this.parentNode;n&&(b(this).remove(),n.insertBefore(e,t))})},detach:function(e){return this.remove(e,!0)},domManip:function(e,n,r){e=f.apply([],e);var i,o,a,s,u,l,c=0,p=this.length,d=this,h=p-1,g=e[0],m=b.isFunction(g);if(m||!(1>=p||"string"!=typeof g||b.support.checkClone)&&Ct.test(g))return this.each(function(i){var o=d.eq(i);m&&(e[0]=g.call(this,i,n?o.html():t)),o.domManip(e,n,r)});if(p&&(l=b.buildFragment(e,this[0].ownerDocument,!1,this),i=l.firstChild,1===l.childNodes.length&&(l=i),i)){for(n=n&&b.nodeName(i,"tr"),s=b.map(Ot(l,"script"),Ht),a=s.length;p>c;c++)o=l,c!==h&&(o=b.clone(o,!0,!0),a&&b.merge(s,Ot(o,"script"))),r.call(n&&b.nodeName(this[c],"table")?Lt(this[c],"tbody"):this[c],o,c);if(a)for(u=s[s.length-1].ownerDocument,b.map(s,qt),c=0;a>c;c++)o=s[c],kt.test(o.type||"")&&!b._data(o,"globalEval")&&b.contains(u,o)&&(o.src?b.ajax({url:o.src,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0}):b.globalEval((o.text||o.textContent||o.innerHTML||"").replace(St,"")));l=i=null}return this}});function Lt(e,t){return e.getElementsByTagName(t)[0]||e.appendChild(e.ownerDocument.createElement(t))}function Ht(e){var t=e.getAttributeNode("type");return e.type=(t&&t.specified)+"/"+e.type,e}function qt(e){var t=Et.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function Mt(e,t){var n,r=0;for(;null!=(n=e[r]);r++)b._data(n,"globalEval",!t||b._data(t[r],"globalEval"))}function _t(e,t){if(1===t.nodeType&&b.hasData(e)){var n,r,i,o=b._data(e),a=b._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(r=0,i=s[n].length;i>r;r++)b.event.add(t,n,s[n][r])}a.data&&(a.data=b.extend({},a.data))}}function Ft(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!b.support.noCloneEvent&&t[b.expando]){i=b._data(t);for(r in i.events)b.removeEvent(t,r,i.handle);t.removeAttribute(b.expando)}"script"===n&&t.text!==e.text?(Ht(t).text=e.text,qt(t)):"object"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),b.support.html5Clone&&e.innerHTML&&!b.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):"input"===n&&Nt.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):"option"===n?t.defaultSelected=t.selected=e.defaultSelected:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}}b.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){b.fn[e]=function(e){var n,r=0,i=[],o=b(e),a=o.length-1;for(;a>=r;r++)n=r===a?this:this.clone(!0),b(o[r])[t](n),d.apply(i,n.get());return this.pushStack(i)}});function Ot(e,n){var r,o,a=0,s=typeof e.getElementsByTagName!==i?e.getElementsByTagName(n||"*"):typeof e.querySelectorAll!==i?e.querySelectorAll(n||"*"):t;if(!s)for(s=[],r=e.childNodes||e;null!=(o=r[a]);a++)!n||b.nodeName(o,n)?s.push(o):b.merge(s,Ot(o,n));return n===t||n&&b.nodeName(e,n)?b.merge([e],s):s}function Bt(e){Nt.test(e.type)&&(e.defaultChecked=e.checked)}b.extend({clone:function(e,t,n){var r,i,o,a,s,u=b.contains(e.ownerDocument,e);if(b.support.html5Clone||b.isXMLDoc(e)||!mt.test("<"+e.nodeName+">")?o=e.cloneNode(!0):(Dt.innerHTML=e.outerHTML,Dt.removeChild(o=Dt.firstChild)),!(b.support.noCloneEvent&&b.support.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||b.isXMLDoc(e)))for(r=Ot(o),s=Ot(e),a=0;null!=(i=s[a]);++a)r[a]&&Ft(i,r[a]);if(t)if(n)for(s=s||Ot(e),r=r||Ot(o),a=0;null!=(i=s[a]);a++)_t(i,r[a]);else _t(e,o);return r=Ot(o,"script"),r.length>0&&Mt(r,!u&&Ot(e,"script")),r=s=i=null,o},buildFragment:function(e,t,n,r){var i,o,a,s,u,l,c,p=e.length,f=dt(t),d=[],h=0;for(;p>h;h++)if(o=e[h],o||0===o)if("object"===b.type(o))b.merge(d,o.nodeType?[o]:o);else if(wt.test(o)){s=s||f.appendChild(t.createElement("div")),u=(bt.exec(o)||["",""])[1].toLowerCase(),c=At[u]||At._default,s.innerHTML=c[1]+o.replace(vt,"<$1></$2>")+c[2],i=c[0];while(i--)s=s.lastChild;if(!b.support.leadingWhitespace&&yt.test(o)&&d.push(t.createTextNode(yt.exec(o)[0])),!b.support.tbody){o="table"!==u||xt.test(o)?"<table>"!==c[1]||xt.test(o)?0:s:s.firstChild,i=o&&o.childNodes.length;while(i--)b.nodeName(l=o.childNodes[i],"tbody")&&!l.childNodes.length&&o.removeChild(l)
946
- }b.merge(d,s.childNodes),s.textContent="";while(s.firstChild)s.removeChild(s.firstChild);s=f.lastChild}else d.push(t.createTextNode(o));s&&f.removeChild(s),b.support.appendChecked||b.grep(Ot(d,"input"),Bt),h=0;while(o=d[h++])if((!r||-1===b.inArray(o,r))&&(a=b.contains(o.ownerDocument,o),s=Ot(f.appendChild(o),"script"),a&&Mt(s),n)){i=0;while(o=s[i++])kt.test(o.type||"")&&n.push(o)}return s=null,f},cleanData:function(e,t){var n,r,o,a,s=0,u=b.expando,l=b.cache,p=b.support.deleteExpando,f=b.event.special;for(;null!=(n=e[s]);s++)if((t||b.acceptData(n))&&(o=n[u],a=o&&l[o])){if(a.events)for(r in a.events)f[r]?b.event.remove(n,r):b.removeEvent(n,r,a.handle);l[o]&&(delete l[o],p?delete n[u]:typeof n.removeAttribute!==i?n.removeAttribute(u):n[u]=null,c.push(o))}}});var Pt,Rt,Wt,$t=/alpha\([^)]*\)/i,It=/opacity\s*=\s*([^)]*)/,zt=/^(top|right|bottom|left)$/,Xt=/^(none|table(?!-c[ea]).+)/,Ut=/^margin/,Vt=RegExp("^("+x+")(.*)$","i"),Yt=RegExp("^("+x+")(?!px)[a-z%]+$","i"),Jt=RegExp("^([+-])=("+x+")","i"),Gt={BODY:"block"},Qt={position:"absolute",visibility:"hidden",display:"block"},Kt={letterSpacing:0,fontWeight:400},Zt=["Top","Right","Bottom","Left"],en=["Webkit","O","Moz","ms"];function tn(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=en.length;while(i--)if(t=en[i]+n,t in e)return t;return r}function nn(e,t){return e=t||e,"none"===b.css(e,"display")||!b.contains(e.ownerDocument,e)}function rn(e,t){var n,r,i,o=[],a=0,s=e.length;for(;s>a;a++)r=e[a],r.style&&(o[a]=b._data(r,"olddisplay"),n=r.style.display,t?(o[a]||"none"!==n||(r.style.display=""),""===r.style.display&&nn(r)&&(o[a]=b._data(r,"olddisplay",un(r.nodeName)))):o[a]||(i=nn(r),(n&&"none"!==n||!i)&&b._data(r,"olddisplay",i?n:b.css(r,"display"))));for(a=0;s>a;a++)r=e[a],r.style&&(t&&"none"!==r.style.display&&""!==r.style.display||(r.style.display=t?o[a]||"":"none"));return e}b.fn.extend({css:function(e,n){return b.access(this,function(e,n,r){var i,o,a={},s=0;if(b.isArray(n)){for(o=Rt(e),i=n.length;i>s;s++)a[n[s]]=b.css(e,n[s],!1,o);return a}return r!==t?b.style(e,n,r):b.css(e,n)},e,n,arguments.length>1)},show:function(){return rn(this,!0)},hide:function(){return rn(this)},toggle:function(e){var t="boolean"==typeof e;return this.each(function(){(t?e:nn(this))?b(this).show():b(this).hide()})}}),b.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Wt(e,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":b.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,a,s,u=b.camelCase(n),l=e.style;if(n=b.cssProps[u]||(b.cssProps[u]=tn(l,u)),s=b.cssHooks[n]||b.cssHooks[u],r===t)return s&&"get"in s&&(o=s.get(e,!1,i))!==t?o:l[n];if(a=typeof r,"string"===a&&(o=Jt.exec(r))&&(r=(o[1]+1)*o[2]+parseFloat(b.css(e,n)),a="number"),!(null==r||"number"===a&&isNaN(r)||("number"!==a||b.cssNumber[u]||(r+="px"),b.support.clearCloneStyle||""!==r||0!==n.indexOf("background")||(l[n]="inherit"),s&&"set"in s&&(r=s.set(e,r,i))===t)))try{l[n]=r}catch(c){}}},css:function(e,n,r,i){var o,a,s,u=b.camelCase(n);return n=b.cssProps[u]||(b.cssProps[u]=tn(e.style,u)),s=b.cssHooks[n]||b.cssHooks[u],s&&"get"in s&&(a=s.get(e,!0,r)),a===t&&(a=Wt(e,n,i)),"normal"===a&&n in Kt&&(a=Kt[n]),""===r||r?(o=parseFloat(a),r===!0||b.isNumeric(o)?o||0:a):a},swap:function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i}}),e.getComputedStyle?(Rt=function(t){return e.getComputedStyle(t,null)},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),u=s?s.getPropertyValue(n)||s[n]:t,l=e.style;return s&&(""!==u||b.contains(e.ownerDocument,e)||(u=b.style(e,n)),Yt.test(u)&&Ut.test(n)&&(i=l.width,o=l.minWidth,a=l.maxWidth,l.minWidth=l.maxWidth=l.width=u,u=s.width,l.width=i,l.minWidth=o,l.maxWidth=a)),u}):o.documentElement.currentStyle&&(Rt=function(e){return e.currentStyle},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),u=s?s[n]:t,l=e.style;return null==u&&l&&l[n]&&(u=l[n]),Yt.test(u)&&!zt.test(n)&&(i=l.left,o=e.runtimeStyle,a=o&&o.left,a&&(o.left=e.currentStyle.left),l.left="fontSize"===n?"1em":u,u=l.pixelLeft+"px",l.left=i,a&&(o.left=a)),""===u?"auto":u});function on(e,t,n){var r=Vt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function an(e,t,n,r,i){var o=n===(r?"border":"content")?4:"width"===t?1:0,a=0;for(;4>o;o+=2)"margin"===n&&(a+=b.css(e,n+Zt[o],!0,i)),r?("content"===n&&(a-=b.css(e,"padding"+Zt[o],!0,i)),"margin"!==n&&(a-=b.css(e,"border"+Zt[o]+"Width",!0,i))):(a+=b.css(e,"padding"+Zt[o],!0,i),"padding"!==n&&(a+=b.css(e,"border"+Zt[o]+"Width",!0,i)));return a}function sn(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=Rt(e),a=b.support.boxSizing&&"border-box"===b.css(e,"boxSizing",!1,o);if(0>=i||null==i){if(i=Wt(e,t,o),(0>i||null==i)&&(i=e.style[t]),Yt.test(i))return i;r=a&&(b.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+an(e,t,n||(a?"border":"content"),r,o)+"px"}function un(e){var t=o,n=Gt[e];return n||(n=ln(e,t),"none"!==n&&n||(Pt=(Pt||b("<iframe frameborder='0' width='0' height='0'/>").css("cssText","display:block !important")).appendTo(t.documentElement),t=(Pt[0].contentWindow||Pt[0].contentDocument).document,t.write("<!doctype html><html><body>"),t.close(),n=ln(e,t),Pt.detach()),Gt[e]=n),n}function ln(e,t){var n=b(t.createElement(e)).appendTo(t.body),r=b.css(n[0],"display");return n.remove(),r}b.each(["height","width"],function(e,n){b.cssHooks[n]={get:function(e,r,i){return r?0===e.offsetWidth&&Xt.test(b.css(e,"display"))?b.swap(e,Qt,function(){return sn(e,n,i)}):sn(e,n,i):t},set:function(e,t,r){var i=r&&Rt(e);return on(e,t,r?an(e,n,r,b.support.boxSizing&&"border-box"===b.css(e,"boxSizing",!1,i),i):0)}}}),b.support.opacity||(b.cssHooks.opacity={get:function(e,t){return It.test((t&&e.currentStyle?e.currentStyle.filter:e.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":t?"1":""},set:function(e,t){var n=e.style,r=e.currentStyle,i=b.isNumeric(t)?"alpha(opacity="+100*t+")":"",o=r&&r.filter||n.filter||"";n.zoom=1,(t>=1||""===t)&&""===b.trim(o.replace($t,""))&&n.removeAttribute&&(n.removeAttribute("filter"),""===t||r&&!r.filter)||(n.filter=$t.test(o)?o.replace($t,i):o+" "+i)}}),b(function(){b.support.reliableMarginRight||(b.cssHooks.marginRight={get:function(e,n){return n?b.swap(e,{display:"inline-block"},Wt,[e,"marginRight"]):t}}),!b.support.pixelPosition&&b.fn.position&&b.each(["top","left"],function(e,n){b.cssHooks[n]={get:function(e,r){return r?(r=Wt(e,n),Yt.test(r)?b(e).position()[n]+"px":r):t}}})}),b.expr&&b.expr.filters&&(b.expr.filters.hidden=function(e){return 0>=e.offsetWidth&&0>=e.offsetHeight||!b.support.reliableHiddenOffsets&&"none"===(e.style&&e.style.display||b.css(e,"display"))},b.expr.filters.visible=function(e){return!b.expr.filters.hidden(e)}),b.each({margin:"",padding:"",border:"Width"},function(e,t){b.cssHooks[e+t]={expand:function(n){var r=0,i={},o="string"==typeof n?n.split(" "):[n];for(;4>r;r++)i[e+Zt[r]+t]=o[r]||o[r-2]||o[0];return i}},Ut.test(e)||(b.cssHooks[e+t].set=on)});var cn=/%20/g,pn=/\[\]$/,fn=/\r?\n/g,dn=/^(?:submit|button|image|reset|file)$/i,hn=/^(?:input|select|textarea|keygen)/i;b.fn.extend({serialize:function(){return b.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=b.prop(this,"elements");return e?b.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!b(this).is(":disabled")&&hn.test(this.nodeName)&&!dn.test(e)&&(this.checked||!Nt.test(e))}).map(function(e,t){var n=b(this).val();return null==n?null:b.isArray(n)?b.map(n,function(e){return{name:t.name,value:e.replace(fn,"\r\n")}}):{name:t.name,value:n.replace(fn,"\r\n")}}).get()}}),b.param=function(e,n){var r,i=[],o=function(e,t){t=b.isFunction(t)?t():null==t?"":t,i[i.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};if(n===t&&(n=b.ajaxSettings&&b.ajaxSettings.traditional),b.isArray(e)||e.jquery&&!b.isPlainObject(e))b.each(e,function(){o(this.name,this.value)});else for(r in e)gn(r,e[r],n,o);return i.join("&").replace(cn,"+")};function gn(e,t,n,r){var i;if(b.isArray(t))b.each(t,function(t,i){n||pn.test(e)?r(e,i):gn(e+"["+("object"==typeof i?t:"")+"]",i,n,r)});else if(n||"object"!==b.type(t))r(e,t);else for(i in t)gn(e+"["+i+"]",t[i],n,r)}b.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(e,t){b.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),b.fn.hover=function(e,t){return this.mouseenter(e).mouseleave(t||e)};var mn,yn,vn=b.now(),bn=/\?/,xn=/#.*$/,wn=/([?&])_=[^&]*/,Tn=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Nn=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Cn=/^(?:GET|HEAD)$/,kn=/^\/\//,En=/^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,Sn=b.fn.load,An={},jn={},Dn="*/".concat("*");try{yn=a.href}catch(Ln){yn=o.createElement("a"),yn.href="",yn=yn.href}mn=En.exec(yn.toLowerCase())||[];function Hn(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(w)||[];if(b.isFunction(n))while(r=o[i++])"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function qn(e,n,r,i){var o={},a=e===jn;function s(u){var l;return o[u]=!0,b.each(e[u]||[],function(e,u){var c=u(n,r,i);return"string"!=typeof c||a||o[c]?a?!(l=c):t:(n.dataTypes.unshift(c),s(c),!1)}),l}return s(n.dataTypes[0])||!o["*"]&&s("*")}function Mn(e,n){var r,i,o=b.ajaxSettings.flatOptions||{};for(i in n)n[i]!==t&&((o[i]?e:r||(r={}))[i]=n[i]);return r&&b.extend(!0,e,r),e}b.fn.load=function(e,n,r){if("string"!=typeof e&&Sn)return Sn.apply(this,arguments);var i,o,a,s=this,u=e.indexOf(" ");return u>=0&&(i=e.slice(u,e.length),e=e.slice(0,u)),b.isFunction(n)?(r=n,n=t):n&&"object"==typeof n&&(a="POST"),s.length>0&&b.ajax({url:e,type:a,dataType:"html",data:n}).done(function(e){o=arguments,s.html(i?b("<div>").append(b.parseHTML(e)).find(i):e)}).complete(r&&function(e,t){s.each(r,o||[e.responseText,t,e])}),this},b.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){b.fn[t]=function(e){return this.on(t,e)}}),b.each(["get","post"],function(e,n){b[n]=function(e,r,i,o){return b.isFunction(r)&&(o=o||i,i=r,r=t),b.ajax({url:e,type:n,dataType:o,data:r,success:i})}}),b.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:yn,type:"GET",isLocal:Nn.test(mn[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Dn,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":e.String,"text html":!0,"text json":b.parseJSON,"text xml":b.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Mn(Mn(e,b.ajaxSettings),t):Mn(b.ajaxSettings,e)},ajaxPrefilter:Hn(An),ajaxTransport:Hn(jn),ajax:function(e,n){"object"==typeof e&&(n=e,e=t),n=n||{};var r,i,o,a,s,u,l,c,p=b.ajaxSetup({},n),f=p.context||p,d=p.context&&(f.nodeType||f.jquery)?b(f):b.event,h=b.Deferred(),g=b.Callbacks("once memory"),m=p.statusCode||{},y={},v={},x=0,T="canceled",N={readyState:0,getResponseHeader:function(e){var t;if(2===x){if(!c){c={};while(t=Tn.exec(a))c[t[1].toLowerCase()]=t[2]}t=c[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return 2===x?a:null},setRequestHeader:function(e,t){var n=e.toLowerCase();return x||(e=v[n]=v[n]||e,y[e]=t),this},overrideMimeType:function(e){return x||(p.mimeType=e),this},statusCode:function(e){var t;if(e)if(2>x)for(t in e)m[t]=[m[t],e[t]];else N.always(e[N.status]);return this},abort:function(e){var t=e||T;return l&&l.abort(t),k(0,t),this}};if(h.promise(N).complete=g.add,N.success=N.done,N.error=N.fail,p.url=((e||p.url||yn)+"").replace(xn,"").replace(kn,mn[1]+"//"),p.type=n.method||n.type||p.method||p.type,p.dataTypes=b.trim(p.dataType||"*").toLowerCase().match(w)||[""],null==p.crossDomain&&(r=En.exec(p.url.toLowerCase()),p.crossDomain=!(!r||r[1]===mn[1]&&r[2]===mn[2]&&(r[3]||("http:"===r[1]?80:443))==(mn[3]||("http:"===mn[1]?80:443)))),p.data&&p.processData&&"string"!=typeof p.data&&(p.data=b.param(p.data,p.traditional)),qn(An,p,n,N),2===x)return N;u=p.global,u&&0===b.active++&&b.event.trigger("ajaxStart"),p.type=p.type.toUpperCase(),p.hasContent=!Cn.test(p.type),o=p.url,p.hasContent||(p.data&&(o=p.url+=(bn.test(o)?"&":"?")+p.data,delete p.data),p.cache===!1&&(p.url=wn.test(o)?o.replace(wn,"$1_="+vn++):o+(bn.test(o)?"&":"?")+"_="+vn++)),p.ifModified&&(b.lastModified[o]&&N.setRequestHeader("If-Modified-Since",b.lastModified[o]),b.etag[o]&&N.setRequestHeader("If-None-Match",b.etag[o])),(p.data&&p.hasContent&&p.contentType!==!1||n.contentType)&&N.setRequestHeader("Content-Type",p.contentType),N.setRequestHeader("Accept",p.dataTypes[0]&&p.accepts[p.dataTypes[0]]?p.accepts[p.dataTypes[0]]+("*"!==p.dataTypes[0]?", "+Dn+"; q=0.01":""):p.accepts["*"]);for(i in p.headers)N.setRequestHeader(i,p.headers[i]);if(p.beforeSend&&(p.beforeSend.call(f,N,p)===!1||2===x))return N.abort();T="abort";for(i in{success:1,error:1,complete:1})N[i](p[i]);if(l=qn(jn,p,n,N)){N.readyState=1,u&&d.trigger("ajaxSend",[N,p]),p.async&&p.timeout>0&&(s=setTimeout(function(){N.abort("timeout")},p.timeout));try{x=1,l.send(y,k)}catch(C){if(!(2>x))throw C;k(-1,C)}}else k(-1,"No Transport");function k(e,n,r,i){var c,y,v,w,T,C=n;2!==x&&(x=2,s&&clearTimeout(s),l=t,a=i||"",N.readyState=e>0?4:0,r&&(w=_n(p,N,r)),e>=200&&300>e||304===e?(p.ifModified&&(T=N.getResponseHeader("Last-Modified"),T&&(b.lastModified[o]=T),T=N.getResponseHeader("etag"),T&&(b.etag[o]=T)),204===e?(c=!0,C="nocontent"):304===e?(c=!0,C="notmodified"):(c=Fn(p,w),C=c.state,y=c.data,v=c.error,c=!v)):(v=C,(e||!C)&&(C="error",0>e&&(e=0))),N.status=e,N.statusText=(n||C)+"",c?h.resolveWith(f,[y,C,N]):h.rejectWith(f,[N,C,v]),N.statusCode(m),m=t,u&&d.trigger(c?"ajaxSuccess":"ajaxError",[N,p,c?y:v]),g.fireWith(f,[N,C]),u&&(d.trigger("ajaxComplete",[N,p]),--b.active||b.event.trigger("ajaxStop")))}return N},getScript:function(e,n){return b.get(e,t,n,"script")},getJSON:function(e,t,n){return b.get(e,t,n,"json")}});function _n(e,n,r){var i,o,a,s,u=e.contents,l=e.dataTypes,c=e.responseFields;for(s in c)s in r&&(n[c[s]]=r[s]);while("*"===l[0])l.shift(),o===t&&(o=e.mimeType||n.getResponseHeader("Content-Type"));if(o)for(s in u)if(u[s]&&u[s].test(o)){l.unshift(s);break}if(l[0]in r)a=l[0];else{for(s in r){if(!l[0]||e.converters[s+" "+l[0]]){a=s;break}i||(i=s)}a=a||i}return a?(a!==l[0]&&l.unshift(a),r[a]):t}function Fn(e,t){var n,r,i,o,a={},s=0,u=e.dataTypes.slice(),l=u[0];if(e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u[1])for(i in e.converters)a[i.toLowerCase()]=e.converters[i];for(;r=u[++s];)if("*"!==r){if("*"!==l&&l!==r){if(i=a[l+" "+r]||a["* "+r],!i)for(n in a)if(o=n.split(" "),o[1]===r&&(i=a[l+" "+o[0]]||a["* "+o[0]])){i===!0?i=a[n]:a[n]!==!0&&(r=o[0],u.splice(s--,0,r));break}if(i!==!0)if(i&&e["throws"])t=i(t);else try{t=i(t)}catch(c){return{state:"parsererror",error:i?c:"No conversion from "+l+" to "+r}}}l=r}return{state:"success",data:t}}b.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(e){return b.globalEval(e),e}}}),b.ajaxPrefilter("script",function(e){e.cache===t&&(e.cache=!1),e.crossDomain&&(e.type="GET",e.global=!1)}),b.ajaxTransport("script",function(e){if(e.crossDomain){var n,r=o.head||b("head")[0]||o.documentElement;return{send:function(t,i){n=o.createElement("script"),n.async=!0,e.scriptCharset&&(n.charset=e.scriptCharset),n.src=e.url,n.onload=n.onreadystatechange=function(e,t){(t||!n.readyState||/loaded|complete/.test(n.readyState))&&(n.onload=n.onreadystatechange=null,n.parentNode&&n.parentNode.removeChild(n),n=null,t||i(200,"success"))},r.insertBefore(n,r.firstChild)},abort:function(){n&&n.onload(t,!0)}}}});var On=[],Bn=/(=)\?(?=&|$)|\?\?/;b.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=On.pop()||b.expando+"_"+vn++;return this[e]=!0,e}}),b.ajaxPrefilter("json jsonp",function(n,r,i){var o,a,s,u=n.jsonp!==!1&&(Bn.test(n.url)?"url":"string"==typeof n.data&&!(n.contentType||"").indexOf("application/x-www-form-urlencoded")&&Bn.test(n.data)&&"data");return u||"jsonp"===n.dataTypes[0]?(o=n.jsonpCallback=b.isFunction(n.jsonpCallback)?n.jsonpCallback():n.jsonpCallback,u?n[u]=n[u].replace(Bn,"$1"+o):n.jsonp!==!1&&(n.url+=(bn.test(n.url)?"&":"?")+n.jsonp+"="+o),n.converters["script json"]=function(){return s||b.error(o+" was not called"),s[0]},n.dataTypes[0]="json",a=e[o],e[o]=function(){s=arguments},i.always(function(){e[o]=a,n[o]&&(n.jsonpCallback=r.jsonpCallback,On.push(o)),s&&b.isFunction(a)&&a(s[0]),s=a=t}),"script"):t});var Pn,Rn,Wn=0,$n=e.ActiveXObject&&function(){var e;for(e in Pn)Pn[e](t,!0)};function In(){try{return new e.XMLHttpRequest}catch(t){}}function zn(){try{return new e.ActiveXObject("Microsoft.XMLHTTP")}catch(t){}}b.ajaxSettings.xhr=e.ActiveXObject?function(){return!this.isLocal&&In()||zn()}:In,Rn=b.ajaxSettings.xhr(),b.support.cors=!!Rn&&"withCredentials"in Rn,Rn=b.support.ajax=!!Rn,Rn&&b.ajaxTransport(function(n){if(!n.crossDomain||b.support.cors){var r;return{send:function(i,o){var a,s,u=n.xhr();if(n.username?u.open(n.type,n.url,n.async,n.username,n.password):u.open(n.type,n.url,n.async),n.xhrFields)for(s in n.xhrFields)u[s]=n.xhrFields[s];n.mimeType&&u.overrideMimeType&&u.overrideMimeType(n.mimeType),n.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");try{for(s in i)u.setRequestHeader(s,i[s])}catch(l){}u.send(n.hasContent&&n.data||null),r=function(e,i){var s,l,c,p;try{if(r&&(i||4===u.readyState))if(r=t,a&&(u.onreadystatechange=b.noop,$n&&delete Pn[a]),i)4!==u.readyState&&u.abort();else{p={},s=u.status,l=u.getAllResponseHeaders(),"string"==typeof u.responseText&&(p.text=u.responseText);try{c=u.statusText}catch(f){c=""}s||!n.isLocal||n.crossDomain?1223===s&&(s=204):s=p.text?200:404}}catch(d){i||o(-1,d)}p&&o(s,c,p,l)},n.async?4===u.readyState?setTimeout(r):(a=++Wn,$n&&(Pn||(Pn={},b(e).unload($n)),Pn[a]=r),u.onreadystatechange=r):r()},abort:function(){r&&r(t,!0)}}}});var Xn,Un,Vn=/^(?:toggle|show|hide)$/,Yn=RegExp("^(?:([+-])=|)("+x+")([a-z%]*)$","i"),Jn=/queueHooks$/,Gn=[nr],Qn={"*":[function(e,t){var n,r,i=this.createTween(e,t),o=Yn.exec(t),a=i.cur(),s=+a||0,u=1,l=20;if(o){if(n=+o[2],r=o[3]||(b.cssNumber[e]?"":"px"),"px"!==r&&s){s=b.css(i.elem,e,!0)||n||1;do u=u||".5",s/=u,b.style(i.elem,e,s+r);while(u!==(u=i.cur()/a)&&1!==u&&--l)}i.unit=r,i.start=s,i.end=o[1]?s+(o[1]+1)*n:n}return i}]};function Kn(){return setTimeout(function(){Xn=t}),Xn=b.now()}function Zn(e,t){b.each(t,function(t,n){var r=(Qn[t]||[]).concat(Qn["*"]),i=0,o=r.length;for(;o>i;i++)if(r[i].call(e,t,n))return})}function er(e,t,n){var r,i,o=0,a=Gn.length,s=b.Deferred().always(function(){delete u.elem}),u=function(){if(i)return!1;var t=Xn||Kn(),n=Math.max(0,l.startTime+l.duration-t),r=n/l.duration||0,o=1-r,a=0,u=l.tweens.length;for(;u>a;a++)l.tweens[a].run(o);return s.notifyWith(e,[l,o,n]),1>o&&u?n:(s.resolveWith(e,[l]),!1)},l=s.promise({elem:e,props:b.extend({},t),opts:b.extend(!0,{specialEasing:{}},n),originalProperties:t,originalOptions:n,startTime:Xn||Kn(),duration:n.duration,tweens:[],createTween:function(t,n){var r=b.Tween(e,l.opts,t,n,l.opts.specialEasing[t]||l.opts.easing);return l.tweens.push(r),r},stop:function(t){var n=0,r=t?l.tweens.length:0;if(i)return this;for(i=!0;r>n;n++)l.tweens[n].run(1);return t?s.resolveWith(e,[l,t]):s.rejectWith(e,[l,t]),this}}),c=l.props;for(tr(c,l.opts.specialEasing);a>o;o++)if(r=Gn[o].call(l,e,c,l.opts))return r;return Zn(l,c),b.isFunction(l.opts.start)&&l.opts.start.call(e,l),b.fx.timer(b.extend(u,{elem:e,anim:l,queue:l.opts.queue})),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always)}function tr(e,t){var n,r,i,o,a;for(i in e)if(r=b.camelCase(i),o=t[r],n=e[i],b.isArray(n)&&(o=n[1],n=e[i]=n[0]),i!==r&&(e[r]=n,delete e[i]),a=b.cssHooks[r],a&&"expand"in a){n=a.expand(n),delete e[r];for(i in n)i in e||(e[i]=n[i],t[i]=o)}else t[r]=o}b.Animation=b.extend(er,{tweener:function(e,t){b.isFunction(e)?(t=e,e=["*"]):e=e.split(" ");var n,r=0,i=e.length;for(;i>r;r++)n=e[r],Qn[n]=Qn[n]||[],Qn[n].unshift(t)},prefilter:function(e,t){t?Gn.unshift(e):Gn.push(e)}});function nr(e,t,n){var r,i,o,a,s,u,l,c,p,f=this,d=e.style,h={},g=[],m=e.nodeType&&nn(e);n.queue||(c=b._queueHooks(e,"fx"),null==c.unqueued&&(c.unqueued=0,p=c.empty.fire,c.empty.fire=function(){c.unqueued||p()}),c.unqueued++,f.always(function(){f.always(function(){c.unqueued--,b.queue(e,"fx").length||c.empty.fire()})})),1===e.nodeType&&("height"in t||"width"in t)&&(n.overflow=[d.overflow,d.overflowX,d.overflowY],"inline"===b.css(e,"display")&&"none"===b.css(e,"float")&&(b.support.inlineBlockNeedsLayout&&"inline"!==un(e.nodeName)?d.zoom=1:d.display="inline-block")),n.overflow&&(d.overflow="hidden",b.support.shrinkWrapBlocks||f.always(function(){d.overflow=n.overflow[0],d.overflowX=n.overflow[1],d.overflowY=n.overflow[2]}));for(i in t)if(a=t[i],Vn.exec(a)){if(delete t[i],u=u||"toggle"===a,a===(m?"hide":"show"))continue;g.push(i)}if(o=g.length){s=b._data(e,"fxshow")||b._data(e,"fxshow",{}),"hidden"in s&&(m=s.hidden),u&&(s.hidden=!m),m?b(e).show():f.done(function(){b(e).hide()}),f.done(function(){var t;b._removeData(e,"fxshow");for(t in h)b.style(e,t,h[t])});for(i=0;o>i;i++)r=g[i],l=f.createTween(r,m?s[r]:0),h[r]=s[r]||b.style(e,r),r in s||(s[r]=l.start,m&&(l.end=l.start,l.start="width"===r||"height"===r?1:0))}}function rr(e,t,n,r,i){return new rr.prototype.init(e,t,n,r,i)}b.Tween=rr,rr.prototype={constructor:rr,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||"swing",this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(b.cssNumber[n]?"":"px")},cur:function(){var e=rr.propHooks[this.prop];return e&&e.get?e.get(this):rr.propHooks._default.get(this)},run:function(e){var t,n=rr.propHooks[this.prop];return this.pos=t=this.options.duration?b.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):rr.propHooks._default.set(this),this}},rr.prototype.init.prototype=rr.prototype,rr.propHooks={_default:{get:function(e){var t;return null==e.elem[e.prop]||e.elem.style&&null!=e.elem.style[e.prop]?(t=b.css(e.elem,e.prop,""),t&&"auto"!==t?t:0):e.elem[e.prop]},set:function(e){b.fx.step[e.prop]?b.fx.step[e.prop](e):e.elem.style&&(null!=e.elem.style[b.cssProps[e.prop]]||b.cssHooks[e.prop])?b.style(e.elem,e.prop,e.now+e.unit):e.elem[e.prop]=e.now}}},rr.propHooks.scrollTop=rr.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},b.each(["toggle","show","hide"],function(e,t){var n=b.fn[t];b.fn[t]=function(e,r,i){return null==e||"boolean"==typeof e?n.apply(this,arguments):this.animate(ir(t,!0),e,r,i)}}),b.fn.extend({fadeTo:function(e,t,n,r){return this.filter(nn).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=b.isEmptyObject(e),o=b.speed(t,n,r),a=function(){var t=er(this,b.extend({},e),o);a.finish=function(){t.stop(!0)},(i||b._data(this,"finish"))&&t.stop(!0)};return a.finish=a,i||o.queue===!1?this.each(a):this.queue(o.queue,a)},stop:function(e,n,r){var i=function(e){var t=e.stop;delete e.stop,t(r)};return"string"!=typeof e&&(r=n,n=e,e=t),n&&e!==!1&&this.queue(e||"fx",[]),this.each(function(){var t=!0,n=null!=e&&e+"queueHooks",o=b.timers,a=b._data(this);if(n)a[n]&&a[n].stop&&i(a[n]);else for(n in a)a[n]&&a[n].stop&&Jn.test(n)&&i(a[n]);for(n=o.length;n--;)o[n].elem!==this||null!=e&&o[n].queue!==e||(o[n].anim.stop(r),t=!1,o.splice(n,1));(t||!r)&&b.dequeue(this,e)})},finish:function(e){return e!==!1&&(e=e||"fx"),this.each(function(){var t,n=b._data(this),r=n[e+"queue"],i=n[e+"queueHooks"],o=b.timers,a=r?r.length:0;for(n.finish=!0,b.queue(this,e,[]),i&&i.cur&&i.cur.finish&&i.cur.finish.call(this),t=o.length;t--;)o[t].elem===this&&o[t].queue===e&&(o[t].anim.stop(!0),o.splice(t,1));for(t=0;a>t;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}});function ir(e,t){var n,r={height:e},i=0;for(t=t?1:0;4>i;i+=2-t)n=Zt[i],r["margin"+n]=r["padding"+n]=e;return t&&(r.opacity=r.width=e),r}b.each({slideDown:ir("show"),slideUp:ir("hide"),slideToggle:ir("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,t){b.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),b.speed=function(e,t,n){var r=e&&"object"==typeof e?b.extend({},e):{complete:n||!n&&t||b.isFunction(e)&&e,duration:e,easing:n&&t||t&&!b.isFunction(t)&&t};return r.duration=b.fx.off?0:"number"==typeof r.duration?r.duration:r.duration in b.fx.speeds?b.fx.speeds[r.duration]:b.fx.speeds._default,(null==r.queue||r.queue===!0)&&(r.queue="fx"),r.old=r.complete,r.complete=function(){b.isFunction(r.old)&&r.old.call(this),r.queue&&b.dequeue(this,r.queue)},r},b.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2}},b.timers=[],b.fx=rr.prototype.init,b.fx.tick=function(){var e,n=b.timers,r=0;for(Xn=b.now();n.length>r;r++)e=n[r],e()||n[r]!==e||n.splice(r--,1);n.length||b.fx.stop(),Xn=t},b.fx.timer=function(e){e()&&b.timers.push(e)&&b.fx.start()},b.fx.interval=13,b.fx.start=function(){Un||(Un=setInterval(b.fx.tick,b.fx.interval))},b.fx.stop=function(){clearInterval(Un),Un=null},b.fx.speeds={slow:600,fast:200,_default:400},b.fx.step={},b.expr&&b.expr.filters&&(b.expr.filters.animated=function(e){return b.grep(b.timers,function(t){return e===t.elem}).length}),b.fn.offset=function(e){if(arguments.length)return e===t?this:this.each(function(t){b.offset.setOffset(this,e,t)});var n,r,o={top:0,left:0},a=this[0],s=a&&a.ownerDocument;if(s)return n=s.documentElement,b.contains(n,a)?(typeof a.getBoundingClientRect!==i&&(o=a.getBoundingClientRect()),r=or(s),{top:o.top+(r.pageYOffset||n.scrollTop)-(n.clientTop||0),left:o.left+(r.pageXOffset||n.scrollLeft)-(n.clientLeft||0)}):o},b.offset={setOffset:function(e,t,n){var r=b.css(e,"position");"static"===r&&(e.style.position="relative");var i=b(e),o=i.offset(),a=b.css(e,"top"),s=b.css(e,"left"),u=("absolute"===r||"fixed"===r)&&b.inArray("auto",[a,s])>-1,l={},c={},p,f;u?(c=i.position(),p=c.top,f=c.left):(p=parseFloat(a)||0,f=parseFloat(s)||0),b.isFunction(t)&&(t=t.call(e,n,o)),null!=t.top&&(l.top=t.top-o.top+p),null!=t.left&&(l.left=t.left-o.left+f),"using"in t?t.using.call(e,l):i.css(l)}},b.fn.extend({position:function(){if(this[0]){var e,t,n={top:0,left:0},r=this[0];return"fixed"===b.css(r,"position")?t=r.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),b.nodeName(e[0],"html")||(n=e.offset()),n.top+=b.css(e[0],"borderTopWidth",!0),n.left+=b.css(e[0],"borderLeftWidth",!0)),{top:t.top-n.top-b.css(r,"marginTop",!0),left:t.left-n.left-b.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||o.documentElement;while(e&&!b.nodeName(e,"html")&&"static"===b.css(e,"position"))e=e.offsetParent;return e||o.documentElement})}}),b.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,n){var r=/Y/.test(n);b.fn[e]=function(i){return b.access(this,function(e,i,o){var a=or(e);return o===t?a?n in a?a[n]:a.document.documentElement[i]:e[i]:(a?a.scrollTo(r?b(a).scrollLeft():o,r?o:b(a).scrollTop()):e[i]=o,t)},e,i,arguments.length,null)}});function or(e){return b.isWindow(e)?e:9===e.nodeType?e.defaultView||e.parentWindow:!1}b.each({Height:"height",Width:"width"},function(e,n){b.each({padding:"inner"+e,content:n,"":"outer"+e},function(r,i){b.fn[i]=function(i,o){var a=arguments.length&&(r||"boolean"!=typeof i),s=r||(i===!0||o===!0?"margin":"border");return b.access(this,function(n,r,i){var o;return b.isWindow(n)?n.document.documentElement["client"+e]:9===n.nodeType?(o=n.documentElement,Math.max(n.body["scroll"+e],o["scroll"+e],n.body["offset"+e],o["offset"+e],o["client"+e])):i===t?b.css(n,r,s):b.style(n,r,i,s)},n,a?i:t,a,null)}})}),e.jQuery=e.$=b,"function"==typeof define&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return b})})(window);
1157
+ var validation_ruleCache = null;
1158
+ var validation_ruleFunc = function() {
1159
+ return (function() {
1160
+ var ValidationRule;
1161
+
1162
+ ValidationRule = (function() {
1163
+ function ValidationRule(type, context) {
1164
+ this.type = type;
1165
+ this.context = context != null ? context : null;
1166
+ }
1167
+
1168
+ ValidationRule.fromString = function(ruleString) {
1169
+ var context, ruleParts;
1170
+
1171
+ ruleParts = ruleString.split('=');
1172
+ context = ruleParts[1] != null ? ruleParts[1] : null;
1173
+ return new this(ruleParts[0], context);
1174
+ };
1175
+
1176
+ return ValidationRule;
1177
+
1178
+ })();
1179
+
1180
+ return ValidationRule;
1181
+
1182
+ }).call(this);
1183
+
947
1184
  };
948
- modules.lib__jquery = function() {
949
- if (jqueryCache === null) {
950
- jqueryCache = jqueryFunc();
1185
+ modules.hoarder__validator__rules__validation_rule = function() {
1186
+ if (validation_ruleCache === null) {
1187
+ validation_ruleCache = validation_ruleFunc();
951
1188
  }
952
- return jqueryCache;
1189
+ return validation_ruleCache;
1190
+ };
1191
+ window.modules = modules;
1192
+ })();
1193
+
1194
+ (function() {
1195
+ var modules = window.modules || [];
1196
+ var bonzoCache = null;
1197
+ var bonzoFunc = function() {
1198
+ /*!
1199
+ * Bonzo: DOM Utility (c) Dustin Diaz 2012
1200
+ * https://github.com/ded/bonzo
1201
+ * License MIT
1202
+ */
1203
+ (function (name, context, definition) {
1204
+ if (typeof module != 'undefined' && module.exports) module.exports = definition()
1205
+ else if (typeof define == 'function' && define.amd) define(definition)
1206
+ else context[name] = definition()
1207
+ })('bonzo', this, function() {
1208
+ var win = window
1209
+ , doc = win.document
1210
+ , html = doc.documentElement
1211
+ , parentNode = 'parentNode'
1212
+ , specialAttributes = /^(checked|value|selected|disabled)$/i
1213
+ // tags that we have trouble inserting *into*
1214
+ , specialTags = /^(select|fieldset|table|tbody|tfoot|td|tr|colgroup)$/i
1215
+ , simpleScriptTagRe = /\s*<script +src=['"]([^'"]+)['"]>/
1216
+ , table = ['<table>', '</table>', 1]
1217
+ , td = ['<table><tbody><tr>', '</tr></tbody></table>', 3]
1218
+ , option = ['<select>', '</select>', 1]
1219
+ , noscope = ['_', '', 0, 1]
1220
+ , tagMap = { // tags that we have trouble *inserting*
1221
+ thead: table, tbody: table, tfoot: table, colgroup: table, caption: table
1222
+ , tr: ['<table><tbody>', '</tbody></table>', 2]
1223
+ , th: td , td: td
1224
+ , col: ['<table><colgroup>', '</colgroup></table>', 2]
1225
+ , fieldset: ['<form>', '</form>', 1]
1226
+ , legend: ['<form><fieldset>', '</fieldset></form>', 2]
1227
+ , option: option, optgroup: option
1228
+ , script: noscope, style: noscope, link: noscope, param: noscope, base: noscope
1229
+ }
1230
+ , stateAttributes = /^(checked|selected|disabled)$/
1231
+ , ie = /msie/i.test(navigator.userAgent)
1232
+ , hasClass, addClass, removeClass
1233
+ , uidMap = {}
1234
+ , uuids = 0
1235
+ , digit = /^-?[\d\.]+$/
1236
+ , dattr = /^data-(.+)$/
1237
+ , px = 'px'
1238
+ , setAttribute = 'setAttribute'
1239
+ , getAttribute = 'getAttribute'
1240
+ , byTag = 'getElementsByTagName'
1241
+ , features = function() {
1242
+ var e = doc.createElement('p')
1243
+ e.innerHTML = '<a href="#x">x</a><table style="float:left;"></table>'
1244
+ return {
1245
+ hrefExtended: e[byTag]('a')[0][getAttribute]('href') != '#x' // IE < 8
1246
+ , autoTbody: e[byTag]('tbody').length !== 0 // IE < 8
1247
+ , computedStyle: doc.defaultView && doc.defaultView.getComputedStyle
1248
+ , cssFloat: e[byTag]('table')[0].style.styleFloat ? 'styleFloat' : 'cssFloat'
1249
+ , transform: function () {
1250
+ var props = ['transform', 'webkitTransform', 'MozTransform', 'OTransform', 'msTransform'], i
1251
+ for (i = 0; i < props.length; i++) {
1252
+ if (props[i] in e.style) return props[i]
1253
+ }
1254
+ }()
1255
+ , classList: 'classList' in e
1256
+ , opasity: function () {
1257
+ return typeof doc.createElement('a').style.opacity !== 'undefined'
1258
+ }()
1259
+ }
1260
+ }()
1261
+ , trimReplace = /(^\s*|\s*$)/g
1262
+ , whitespaceRegex = /\s+/
1263
+ , toString = String.prototype.toString
1264
+ , unitless = { lineHeight: 1, zoom: 1, zIndex: 1, opacity: 1, boxFlex: 1, WebkitBoxFlex: 1, MozBoxFlex: 1 }
1265
+ , query = doc.querySelectorAll && function (selector) { return doc.querySelectorAll(selector) }
1266
+ , trim = String.prototype.trim ?
1267
+ function (s) {
1268
+ return s.trim()
1269
+ } :
1270
+ function (s) {
1271
+ return s.replace(trimReplace, '')
1272
+ }
1273
+
1274
+ , getStyle = features.computedStyle
1275
+ ? function (el, property) {
1276
+ var value = null
1277
+ , computed = doc.defaultView.getComputedStyle(el, '')
1278
+ computed && (value = computed[property])
1279
+ return el.style[property] || value
1280
+ }
1281
+ : !(ie && html.currentStyle)
1282
+ ? function (el, property) {
1283
+ return el.style[property]
1284
+ }
1285
+ :
1286
+ /**
1287
+ * @param {Element} el
1288
+ * @param {string} property
1289
+ * @return {string|number}
1290
+ */
1291
+ function (el, property) {
1292
+ var val, value
1293
+ if (property == 'opacity' && !features.opasity) {
1294
+ val = 100
1295
+ try {
1296
+ val = el['filters']['DXImageTransform.Microsoft.Alpha'].opacity
1297
+ } catch (e1) {
1298
+ try {
1299
+ val = el['filters']('alpha').opacity
1300
+ } catch (e2) {}
1301
+ }
1302
+ return val / 100
1303
+ }
1304
+ value = el.currentStyle ? el.currentStyle[property] : null
1305
+ return el.style[property] || value
1306
+ }
1307
+
1308
+ function isNode(node) {
1309
+ return node && node.nodeName && (node.nodeType == 1 || node.nodeType == 11)
1310
+ }
1311
+
1312
+
1313
+ function normalize(node, host, clone) {
1314
+ var i, l, ret
1315
+ if (typeof node == 'string') return bonzo.create(node)
1316
+ if (isNode(node)) node = [ node ]
1317
+ if (clone) {
1318
+ ret = [] // don't change original array
1319
+ for (i = 0, l = node.length; i < l; i++) ret[i] = cloneNode(host, node[i])
1320
+ return ret
1321
+ }
1322
+ return node
1323
+ }
1324
+
1325
+ /**
1326
+ * @param {string} c a class name to test
1327
+ * @return {boolean}
1328
+ */
1329
+ function classReg(c) {
1330
+ return new RegExp('(^|\\s+)' + c + '(\\s+|$)')
1331
+ }
1332
+
1333
+
1334
+ /**
1335
+ * @param {Bonzo|Array} ar
1336
+ * @param {function(Object, number, (Bonzo|Array))} fn
1337
+ * @param {Object=} opt_scope
1338
+ * @param {boolean=} opt_rev
1339
+ * @return {Bonzo|Array}
1340
+ */
1341
+ function each(ar, fn, opt_scope, opt_rev) {
1342
+ var ind, i = 0, l = ar.length
1343
+ for (; i < l; i++) {
1344
+ ind = opt_rev ? ar.length - i - 1 : i
1345
+ fn.call(opt_scope || ar[ind], ar[ind], ind, ar)
1346
+ }
1347
+ return ar
1348
+ }
1349
+
1350
+
1351
+ /**
1352
+ * @param {Bonzo|Array} ar
1353
+ * @param {function(Object, number, (Bonzo|Array))} fn
1354
+ * @param {Object=} opt_scope
1355
+ * @return {Bonzo|Array}
1356
+ */
1357
+ function deepEach(ar, fn, opt_scope) {
1358
+ for (var i = 0, l = ar.length; i < l; i++) {
1359
+ if (isNode(ar[i])) {
1360
+ deepEach(ar[i].childNodes, fn, opt_scope)
1361
+ fn.call(opt_scope || ar[i], ar[i], i, ar)
1362
+ }
1363
+ }
1364
+ return ar
1365
+ }
1366
+
1367
+
1368
+ /**
1369
+ * @param {string} s
1370
+ * @return {string}
1371
+ */
1372
+ function camelize(s) {
1373
+ return s.replace(/-(.)/g, function (m, m1) {
1374
+ return m1.toUpperCase()
1375
+ })
1376
+ }
1377
+
1378
+
1379
+ /**
1380
+ * @param {string} s
1381
+ * @return {string}
1382
+ */
1383
+ function decamelize(s) {
1384
+ return s ? s.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase() : s
1385
+ }
1386
+
1387
+
1388
+ /**
1389
+ * @param {Element} el
1390
+ * @return {*}
1391
+ */
1392
+ function data(el) {
1393
+ el[getAttribute]('data-node-uid') || el[setAttribute]('data-node-uid', ++uuids)
1394
+ var uid = el[getAttribute]('data-node-uid')
1395
+ return uidMap[uid] || (uidMap[uid] = {})
1396
+ }
1397
+
1398
+
1399
+ /**
1400
+ * removes the data associated with an element
1401
+ * @param {Element} el
1402
+ */
1403
+ function clearData(el) {
1404
+ var uid = el[getAttribute]('data-node-uid')
1405
+ if (uid) delete uidMap[uid]
1406
+ }
1407
+
1408
+
1409
+ function dataValue(d) {
1410
+ var f
1411
+ try {
1412
+ return (d === null || d === undefined) ? undefined :
1413
+ d === 'true' ? true :
1414
+ d === 'false' ? false :
1415
+ d === 'null' ? null :
1416
+ (f = parseFloat(d)) == d ? f : d;
1417
+ } catch(e) {}
1418
+ return undefined
1419
+ }
1420
+
1421
+
1422
+ /**
1423
+ * @param {Bonzo|Array} ar
1424
+ * @param {function(Object, number, (Bonzo|Array))} fn
1425
+ * @param {Object=} opt_scope
1426
+ * @return {boolean} whether `some`thing was found
1427
+ */
1428
+ function some(ar, fn, opt_scope) {
1429
+ for (var i = 0, j = ar.length; i < j; ++i) if (fn.call(opt_scope || null, ar[i], i, ar)) return true
1430
+ return false
1431
+ }
1432
+
1433
+
1434
+ /**
1435
+ * this could be a giant enum of CSS properties
1436
+ * but in favor of file size sans-closure deadcode optimizations
1437
+ * we're just asking for any ol string
1438
+ * then it gets transformed into the appropriate style property for JS access
1439
+ * @param {string} p
1440
+ * @return {string}
1441
+ */
1442
+ function styleProperty(p) {
1443
+ (p == 'transform' && (p = features.transform)) ||
1444
+ (/^transform-?[Oo]rigin$/.test(p) && (p = features.transform + 'Origin')) ||
1445
+ (p == 'float' && (p = features.cssFloat))
1446
+ return p ? camelize(p) : null
1447
+ }
1448
+
1449
+ // this insert method is intense
1450
+ function insert(target, host, fn, rev) {
1451
+ var i = 0, self = host || this, r = []
1452
+ // target nodes could be a css selector if it's a string and a selector engine is present
1453
+ // otherwise, just use target
1454
+ , nodes = query && typeof target == 'string' && target.charAt(0) != '<' ? query(target) : target
1455
+ // normalize each node in case it's still a string and we need to create nodes on the fly
1456
+ each(normalize(nodes), function (t, j) {
1457
+ each(self, function (el) {
1458
+ fn(t, r[i++] = j > 0 ? cloneNode(self, el) : el)
1459
+ }, null, rev)
1460
+ }, this, rev)
1461
+ self.length = i
1462
+ each(r, function (e) {
1463
+ self[--i] = e
1464
+ }, null, !rev)
1465
+ return self
1466
+ }
1467
+
1468
+
1469
+ /**
1470
+ * sets an element to an explicit x/y position on the page
1471
+ * @param {Element} el
1472
+ * @param {?number} x
1473
+ * @param {?number} y
1474
+ */
1475
+ function xy(el, x, y) {
1476
+ var $el = bonzo(el)
1477
+ , style = $el.css('position')
1478
+ , offset = $el.offset()
1479
+ , rel = 'relative'
1480
+ , isRel = style == rel
1481
+ , delta = [parseInt($el.css('left'), 10), parseInt($el.css('top'), 10)]
1482
+
1483
+ if (style == 'static') {
1484
+ $el.css('position', rel)
1485
+ style = rel
1486
+ }
1487
+
1488
+ isNaN(delta[0]) && (delta[0] = isRel ? 0 : el.offsetLeft)
1489
+ isNaN(delta[1]) && (delta[1] = isRel ? 0 : el.offsetTop)
1490
+
1491
+ x != null && (el.style.left = x - offset.left + delta[0] + px)
1492
+ y != null && (el.style.top = y - offset.top + delta[1] + px)
1493
+
1494
+ }
1495
+
1496
+ // classList support for class management
1497
+ // altho to be fair, the api sucks because it won't accept multiple classes at once
1498
+ if (features.classList) {
1499
+ hasClass = function (el, c) {
1500
+ return el.classList.contains(c)
1501
+ }
1502
+ addClass = function (el, c) {
1503
+ el.classList.add(c)
1504
+ }
1505
+ removeClass = function (el, c) {
1506
+ el.classList.remove(c)
1507
+ }
1508
+ }
1509
+ else {
1510
+ hasClass = function (el, c) {
1511
+ return classReg(c).test(el.className)
1512
+ }
1513
+ addClass = function (el, c) {
1514
+ el.className = trim(el.className + ' ' + c)
1515
+ }
1516
+ removeClass = function (el, c) {
1517
+ el.className = trim(el.className.replace(classReg(c), ' '))
1518
+ }
1519
+ }
1520
+
1521
+
1522
+ /**
1523
+ * this allows method calling for setting values
1524
+ *
1525
+ * @example
1526
+ * bonzo(elements).css('color', function (el) {
1527
+ * return el.getAttribute('data-original-color')
1528
+ * })
1529
+ *
1530
+ * @param {Element} el
1531
+ * @param {function (Element)|string}
1532
+ * @return {string}
1533
+ */
1534
+ function setter(el, v) {
1535
+ return typeof v == 'function' ? v(el) : v
1536
+ }
1537
+
1538
+ function scroll(x, y, type) {
1539
+ var el = this[0]
1540
+ if (!el) return this
1541
+ if (x == null && y == null) {
1542
+ return (isBody(el) ? getWindowScroll() : { x: el.scrollLeft, y: el.scrollTop })[type]
1543
+ }
1544
+ if (isBody(el)) {
1545
+ win.scrollTo(x, y)
1546
+ } else {
1547
+ x != null && (el.scrollLeft = x)
1548
+ y != null && (el.scrollTop = y)
1549
+ }
1550
+ return this
1551
+ }
1552
+
1553
+ /**
1554
+ * @constructor
1555
+ * @param {Array.<Element>|Element|Node|string} elements
1556
+ */
1557
+ function Bonzo(elements) {
1558
+ this.length = 0
1559
+ if (elements) {
1560
+ elements = typeof elements !== 'string' &&
1561
+ !elements.nodeType &&
1562
+ typeof elements.length !== 'undefined' ?
1563
+ elements :
1564
+ [elements]
1565
+ this.length = elements.length
1566
+ for (var i = 0; i < elements.length; i++) this[i] = elements[i]
1567
+ }
1568
+ }
1569
+
1570
+ Bonzo.prototype = {
1571
+
1572
+ /**
1573
+ * @param {number} index
1574
+ * @return {Element|Node}
1575
+ */
1576
+ get: function (index) {
1577
+ return this[index] || null
1578
+ }
1579
+
1580
+ // itetators
1581
+ /**
1582
+ * @param {function(Element|Node)} fn
1583
+ * @param {Object=} opt_scope
1584
+ * @return {Bonzo}
1585
+ */
1586
+ , each: function (fn, opt_scope) {
1587
+ return each(this, fn, opt_scope)
1588
+ }
1589
+
1590
+ /**
1591
+ * @param {Function} fn
1592
+ * @param {Object=} opt_scope
1593
+ * @return {Bonzo}
1594
+ */
1595
+ , deepEach: function (fn, opt_scope) {
1596
+ return deepEach(this, fn, opt_scope)
1597
+ }
1598
+
1599
+
1600
+ /**
1601
+ * @param {Function} fn
1602
+ * @param {Function=} opt_reject
1603
+ * @return {Array}
1604
+ */
1605
+ , map: function (fn, opt_reject) {
1606
+ var m = [], n, i
1607
+ for (i = 0; i < this.length; i++) {
1608
+ n = fn.call(this, this[i], i)
1609
+ opt_reject ? (opt_reject(n) && m.push(n)) : m.push(n)
1610
+ }
1611
+ return m
1612
+ }
1613
+
1614
+ // text and html inserters!
1615
+
1616
+ /**
1617
+ * @param {string} h the HTML to insert
1618
+ * @param {boolean=} opt_text whether to set or get text content
1619
+ * @return {Bonzo|string}
1620
+ */
1621
+ , html: function (h, opt_text) {
1622
+ var method = opt_text
1623
+ ? html.textContent === undefined ? 'innerText' : 'textContent'
1624
+ : 'innerHTML'
1625
+ , that = this
1626
+ , append = function (el, i) {
1627
+ each(normalize(h, that, i), function (node) {
1628
+ el.appendChild(node)
1629
+ })
1630
+ }
1631
+ , updateElement = function (el, i) {
1632
+ try {
1633
+ if (opt_text || (typeof h == 'string' && !specialTags.test(el.tagName))) {
1634
+ return el[method] = h
1635
+ }
1636
+ } catch (e) {}
1637
+ append(el, i)
1638
+ }
1639
+ return typeof h != 'undefined'
1640
+ ? this.empty().each(updateElement)
1641
+ : this[0] ? this[0][method] : ''
1642
+ }
1643
+
1644
+ /**
1645
+ * @param {string=} opt_text the text to set, otherwise this is a getter
1646
+ * @return {Bonzo|string}
1647
+ */
1648
+ , text: function (opt_text) {
1649
+ return this.html(opt_text, true)
1650
+ }
1651
+
1652
+ // more related insertion methods
1653
+
1654
+ /**
1655
+ * @param {Bonzo|string|Element|Array} node
1656
+ * @return {Bonzo}
1657
+ */
1658
+ , append: function (node) {
1659
+ var that = this
1660
+ return this.each(function (el, i) {
1661
+ each(normalize(node, that, i), function (i) {
1662
+ el.appendChild(i)
1663
+ })
1664
+ })
1665
+ }
1666
+
1667
+
1668
+ /**
1669
+ * @param {Bonzo|string|Element|Array} node
1670
+ * @return {Bonzo}
1671
+ */
1672
+ , prepend: function (node) {
1673
+ var that = this
1674
+ return this.each(function (el, i) {
1675
+ var first = el.firstChild
1676
+ each(normalize(node, that, i), function (i) {
1677
+ el.insertBefore(i, first)
1678
+ })
1679
+ })
1680
+ }
1681
+
1682
+
1683
+ /**
1684
+ * @param {Bonzo|string|Element|Array} target the location for which you'll insert your new content
1685
+ * @param {Object=} opt_host an optional host scope (primarily used when integrated with Ender)
1686
+ * @return {Bonzo}
1687
+ */
1688
+ , appendTo: function (target, opt_host) {
1689
+ return insert.call(this, target, opt_host, function (t, el) {
1690
+ t.appendChild(el)
1691
+ })
1692
+ }
1693
+
1694
+
1695
+ /**
1696
+ * @param {Bonzo|string|Element|Array} target the location for which you'll insert your new content
1697
+ * @param {Object=} opt_host an optional host scope (primarily used when integrated with Ender)
1698
+ * @return {Bonzo}
1699
+ */
1700
+ , prependTo: function (target, opt_host) {
1701
+ return insert.call(this, target, opt_host, function (t, el) {
1702
+ t.insertBefore(el, t.firstChild)
1703
+ }, 1)
1704
+ }
1705
+
1706
+
1707
+ /**
1708
+ * @param {Bonzo|string|Element|Array} node
1709
+ * @return {Bonzo}
1710
+ */
1711
+ , before: function (node) {
1712
+ var that = this
1713
+ return this.each(function (el, i) {
1714
+ each(normalize(node, that, i), function (i) {
1715
+ el[parentNode].insertBefore(i, el)
1716
+ })
1717
+ })
1718
+ }
1719
+
1720
+
1721
+ /**
1722
+ * @param {Bonzo|string|Element|Array} node
1723
+ * @return {Bonzo}
1724
+ */
1725
+ , after: function (node) {
1726
+ var that = this
1727
+ return this.each(function (el, i) {
1728
+ each(normalize(node, that, i), function (i) {
1729
+ el[parentNode].insertBefore(i, el.nextSibling)
1730
+ }, null, 1)
1731
+ })
1732
+ }
1733
+
1734
+
1735
+ /**
1736
+ * @param {Bonzo|string|Element|Array} target the location for which you'll insert your new content
1737
+ * @param {Object=} opt_host an optional host scope (primarily used when integrated with Ender)
1738
+ * @return {Bonzo}
1739
+ */
1740
+ , insertBefore: function (target, opt_host) {
1741
+ return insert.call(this, target, opt_host, function (t, el) {
1742
+ t[parentNode].insertBefore(el, t)
1743
+ })
1744
+ }
1745
+
1746
+
1747
+ /**
1748
+ * @param {Bonzo|string|Element|Array} target the location for which you'll insert your new content
1749
+ * @param {Object=} opt_host an optional host scope (primarily used when integrated with Ender)
1750
+ * @return {Bonzo}
1751
+ */
1752
+ , insertAfter: function (target, opt_host) {
1753
+ return insert.call(this, target, opt_host, function (t, el) {
1754
+ var sibling = t.nextSibling
1755
+ sibling ?
1756
+ t[parentNode].insertBefore(el, sibling) :
1757
+ t[parentNode].appendChild(el)
1758
+ }, 1)
1759
+ }
1760
+
1761
+
1762
+ /**
1763
+ * @param {Bonzo|string|Element|Array} node
1764
+ * @return {Bonzo}
1765
+ */
1766
+ , replaceWith: function (node) {
1767
+ bonzo(normalize(node)).insertAfter(this)
1768
+ return this.remove()
1769
+ }
1770
+
1771
+ /**
1772
+ * @param {Object=} opt_host an optional host scope (primarily used when integrated with Ender)
1773
+ * @return {Bonzo}
1774
+ */
1775
+ , clone: function (opt_host) {
1776
+ var ret = [] // don't change original array
1777
+ , l, i
1778
+ for (i = 0, l = this.length; i < l; i++) ret[i] = cloneNode(opt_host || this, this[i])
1779
+ return bonzo(ret)
1780
+ }
1781
+
1782
+ // class management
1783
+
1784
+ /**
1785
+ * @param {string} c
1786
+ * @return {Bonzo}
1787
+ */
1788
+ , addClass: function (c) {
1789
+ c = toString.call(c).split(whitespaceRegex)
1790
+ return this.each(function (el) {
1791
+ // we `each` here so you can do $el.addClass('foo bar')
1792
+ each(c, function (c) {
1793
+ if (c && !hasClass(el, setter(el, c)))
1794
+ addClass(el, setter(el, c))
1795
+ })
1796
+ })
1797
+ }
1798
+
1799
+
1800
+ /**
1801
+ * @param {string} c
1802
+ * @return {Bonzo}
1803
+ */
1804
+ , removeClass: function (c) {
1805
+ c = toString.call(c).split(whitespaceRegex)
1806
+ return this.each(function (el) {
1807
+ each(c, function (c) {
1808
+ if (c && hasClass(el, setter(el, c)))
1809
+ removeClass(el, setter(el, c))
1810
+ })
1811
+ })
1812
+ }
1813
+
1814
+
1815
+ /**
1816
+ * @param {string} c
1817
+ * @return {boolean}
1818
+ */
1819
+ , hasClass: function (c) {
1820
+ c = toString.call(c).split(whitespaceRegex)
1821
+ return some(this, function (el) {
1822
+ return some(c, function (c) {
1823
+ return c && hasClass(el, c)
1824
+ })
1825
+ })
1826
+ }
1827
+
1828
+
1829
+ /**
1830
+ * @param {string} c classname to toggle
1831
+ * @param {boolean=} opt_condition whether to add or remove the class straight away
1832
+ * @return {Bonzo}
1833
+ */
1834
+ , toggleClass: function (c, opt_condition) {
1835
+ c = toString.call(c).split(whitespaceRegex)
1836
+ return this.each(function (el) {
1837
+ each(c, function (c) {
1838
+ if (c) {
1839
+ typeof opt_condition !== 'undefined' ?
1840
+ opt_condition ? !hasClass(el, c) && addClass(el, c) : removeClass(el, c) :
1841
+ hasClass(el, c) ? removeClass(el, c) : addClass(el, c)
1842
+ }
1843
+ })
1844
+ })
1845
+ }
1846
+
1847
+ // display togglers
1848
+
1849
+ /**
1850
+ * @param {string=} opt_type useful to set back to anything other than an empty string
1851
+ * @return {Bonzo}
1852
+ */
1853
+ , show: function (opt_type) {
1854
+ opt_type = typeof opt_type == 'string' ? opt_type : ''
1855
+ return this.each(function (el) {
1856
+ el.style.display = opt_type
1857
+ })
1858
+ }
1859
+
1860
+
1861
+ /**
1862
+ * @return {Bonzo}
1863
+ */
1864
+ , hide: function () {
1865
+ return this.each(function (el) {
1866
+ el.style.display = 'none'
1867
+ })
1868
+ }
1869
+
1870
+
1871
+ /**
1872
+ * @param {Function=} opt_callback
1873
+ * @param {string=} opt_type
1874
+ * @return {Bonzo}
1875
+ */
1876
+ , toggle: function (opt_callback, opt_type) {
1877
+ opt_type = typeof opt_type == 'string' ? opt_type : '';
1878
+ typeof opt_callback != 'function' && (opt_callback = null)
1879
+ return this.each(function (el) {
1880
+ el.style.display = (el.offsetWidth || el.offsetHeight) ? 'none' : opt_type;
1881
+ opt_callback && opt_callback.call(el)
1882
+ })
1883
+ }
1884
+
1885
+
1886
+ // DOM Walkers & getters
1887
+
1888
+ /**
1889
+ * @return {Element|Node}
1890
+ */
1891
+ , first: function () {
1892
+ return bonzo(this.length ? this[0] : [])
1893
+ }
1894
+
1895
+
1896
+ /**
1897
+ * @return {Element|Node}
1898
+ */
1899
+ , last: function () {
1900
+ return bonzo(this.length ? this[this.length - 1] : [])
1901
+ }
1902
+
1903
+
1904
+ /**
1905
+ * @return {Element|Node}
1906
+ */
1907
+ , next: function () {
1908
+ return this.related('nextSibling')
1909
+ }
1910
+
1911
+
1912
+ /**
1913
+ * @return {Element|Node}
1914
+ */
1915
+ , previous: function () {
1916
+ return this.related('previousSibling')
1917
+ }
1918
+
1919
+
1920
+ /**
1921
+ * @return {Element|Node}
1922
+ */
1923
+ , parent: function() {
1924
+ return this.related(parentNode)
1925
+ }
1926
+
1927
+
1928
+ /**
1929
+ * @private
1930
+ * @param {string} method the directional DOM method
1931
+ * @return {Element|Node}
1932
+ */
1933
+ , related: function (method) {
1934
+ return bonzo(this.map(
1935
+ function (el) {
1936
+ el = el[method]
1937
+ while (el && el.nodeType !== 1) {
1938
+ el = el[method]
1939
+ }
1940
+ return el || 0
1941
+ },
1942
+ function (el) {
1943
+ return el
1944
+ }
1945
+ ))
1946
+ }
1947
+
1948
+
1949
+ /**
1950
+ * @return {Bonzo}
1951
+ */
1952
+ , focus: function () {
1953
+ this.length && this[0].focus()
1954
+ return this
1955
+ }
1956
+
1957
+
1958
+ /**
1959
+ * @return {Bonzo}
1960
+ */
1961
+ , blur: function () {
1962
+ this.length && this[0].blur()
1963
+ return this
1964
+ }
1965
+
1966
+ // style getter setter & related methods
1967
+
1968
+ /**
1969
+ * @param {Object|string} o
1970
+ * @param {string=} opt_v
1971
+ * @return {Bonzo|string}
1972
+ */
1973
+ , css: function (o, opt_v) {
1974
+ var p, iter = o
1975
+ // is this a request for just getting a style?
1976
+ if (opt_v === undefined && typeof o == 'string') {
1977
+ // repurpose 'v'
1978
+ opt_v = this[0]
1979
+ if (!opt_v) return null
1980
+ if (opt_v === doc || opt_v === win) {
1981
+ p = (opt_v === doc) ? bonzo.doc() : bonzo.viewport()
1982
+ return o == 'width' ? p.width : o == 'height' ? p.height : ''
1983
+ }
1984
+ return (o = styleProperty(o)) ? getStyle(opt_v, o) : null
1985
+ }
1986
+
1987
+ if (typeof o == 'string') {
1988
+ iter = {}
1989
+ iter[o] = opt_v
1990
+ }
1991
+
1992
+ if (ie && iter.opacity) {
1993
+ // oh this 'ol gamut
1994
+ iter.filter = 'alpha(opacity=' + (iter.opacity * 100) + ')'
1995
+ // give it layout
1996
+ iter.zoom = o.zoom || 1;
1997
+ delete iter.opacity;
1998
+ }
1999
+
2000
+ function fn(el, p, v) {
2001
+ for (var k in iter) {
2002
+ if (iter.hasOwnProperty(k)) {
2003
+ v = iter[k];
2004
+ // change "5" to "5px" - unless you're line-height, which is allowed
2005
+ (p = styleProperty(k)) && digit.test(v) && !(p in unitless) && (v += px)
2006
+ try { el.style[p] = setter(el, v) } catch(e) {}
2007
+ }
2008
+ }
2009
+ }
2010
+ return this.each(fn)
2011
+ }
2012
+
2013
+
2014
+ /**
2015
+ * @param {number=} opt_x
2016
+ * @param {number=} opt_y
2017
+ * @return {Bonzo|number}
2018
+ */
2019
+ , offset: function (opt_x, opt_y) {
2020
+ if (opt_x && typeof opt_x == 'object' && (typeof opt_x.top == 'number' || typeof opt_x.left == 'number')) {
2021
+ return this.each(function (el) {
2022
+ xy(el, opt_x.left, opt_x.top)
2023
+ })
2024
+ } else if (typeof opt_x == 'number' || typeof opt_y == 'number') {
2025
+ return this.each(function (el) {
2026
+ xy(el, opt_x, opt_y)
2027
+ })
2028
+ }
2029
+ if (!this[0]) return {
2030
+ top: 0
2031
+ , left: 0
2032
+ , height: 0
2033
+ , width: 0
2034
+ }
2035
+ var el = this[0]
2036
+ , de = el.ownerDocument.documentElement
2037
+ , bcr = el.getBoundingClientRect()
2038
+ , scroll = getWindowScroll()
2039
+ , width = el.offsetWidth
2040
+ , height = el.offsetHeight
2041
+ , top = bcr.top + scroll.y - Math.max(0, de && de.clientTop, doc.body.clientTop)
2042
+ , left = bcr.left + scroll.x - Math.max(0, de && de.clientLeft, doc.body.clientLeft)
2043
+
2044
+ return {
2045
+ top: top
2046
+ , left: left
2047
+ , height: height
2048
+ , width: width
2049
+ }
2050
+ }
2051
+
2052
+
2053
+ /**
2054
+ * @return {number}
2055
+ */
2056
+ , dim: function () {
2057
+ if (!this.length) return { height: 0, width: 0 }
2058
+ var el = this[0]
2059
+ , de = el.nodeType == 9 && el.documentElement // document
2060
+ , orig = !de && !!el.style && !el.offsetWidth && !el.offsetHeight ?
2061
+ // el isn't visible, can't be measured properly, so fix that
2062
+ function (t) {
2063
+ var s = {
2064
+ position: el.style.position || ''
2065
+ , visibility: el.style.visibility || ''
2066
+ , display: el.style.display || ''
2067
+ }
2068
+ t.first().css({
2069
+ position: 'absolute'
2070
+ , visibility: 'hidden'
2071
+ , display: 'block'
2072
+ })
2073
+ return s
2074
+ }(this) : null
2075
+ , width = de
2076
+ ? Math.max(el.body.scrollWidth, el.body.offsetWidth, de.scrollWidth, de.offsetWidth, de.clientWidth)
2077
+ : el.offsetWidth
2078
+ , height = de
2079
+ ? Math.max(el.body.scrollHeight, el.body.offsetHeight, de.scrollHeight, de.offsetHeight, de.clientHeight)
2080
+ : el.offsetHeight
2081
+
2082
+ orig && this.first().css(orig)
2083
+ return {
2084
+ height: height
2085
+ , width: width
2086
+ }
2087
+ }
2088
+
2089
+ // attributes are hard. go shopping
2090
+
2091
+ /**
2092
+ * @param {string} k an attribute to get or set
2093
+ * @param {string=} opt_v the value to set
2094
+ * @return {Bonzo|string}
2095
+ */
2096
+ , attr: function (k, opt_v) {
2097
+ var el = this[0]
2098
+ , n
2099
+
2100
+ if (typeof k != 'string' && !(k instanceof String)) {
2101
+ for (n in k) {
2102
+ k.hasOwnProperty(n) && this.attr(n, k[n])
2103
+ }
2104
+ return this
2105
+ }
2106
+
2107
+ return typeof opt_v == 'undefined' ?
2108
+ !el ? null : specialAttributes.test(k) ?
2109
+ stateAttributes.test(k) && typeof el[k] == 'string' ?
2110
+ true : el[k] : (k == 'href' || k =='src') && features.hrefExtended ?
2111
+ el[getAttribute](k, 2) : el[getAttribute](k) :
2112
+ this.each(function (el) {
2113
+ specialAttributes.test(k) ? (el[k] = setter(el, opt_v)) : el[setAttribute](k, setter(el, opt_v))
2114
+ })
2115
+ }
2116
+
2117
+
2118
+ /**
2119
+ * @param {string} k
2120
+ * @return {Bonzo}
2121
+ */
2122
+ , removeAttr: function (k) {
2123
+ return this.each(function (el) {
2124
+ stateAttributes.test(k) ? (el[k] = false) : el.removeAttribute(k)
2125
+ })
2126
+ }
2127
+
2128
+
2129
+ /**
2130
+ * @param {string=} opt_s
2131
+ * @return {Bonzo|string}
2132
+ */
2133
+ , val: function (s) {
2134
+ return (typeof s == 'string') ?
2135
+ this.attr('value', s) :
2136
+ this.length ? this[0].value : null
2137
+ }
2138
+
2139
+ // use with care and knowledge. this data() method uses data attributes on the DOM nodes
2140
+ // to do this differently costs a lot more code. c'est la vie
2141
+ /**
2142
+ * @param {string|Object=} opt_k the key for which to get or set data
2143
+ * @param {Object=} opt_v
2144
+ * @return {Bonzo|Object}
2145
+ */
2146
+ , data: function (opt_k, opt_v) {
2147
+ var el = this[0], o, m
2148
+ if (typeof opt_v === 'undefined') {
2149
+ if (!el) return null
2150
+ o = data(el)
2151
+ if (typeof opt_k === 'undefined') {
2152
+ each(el.attributes, function (a) {
2153
+ (m = ('' + a.name).match(dattr)) && (o[camelize(m[1])] = dataValue(a.value))
2154
+ })
2155
+ return o
2156
+ } else {
2157
+ if (typeof o[opt_k] === 'undefined')
2158
+ o[opt_k] = dataValue(this.attr('data-' + decamelize(opt_k)))
2159
+ return o[opt_k]
2160
+ }
2161
+ } else {
2162
+ return this.each(function (el) { data(el)[opt_k] = opt_v })
2163
+ }
2164
+ }
2165
+
2166
+ // DOM detachment & related
2167
+
2168
+ /**
2169
+ * @return {Bonzo}
2170
+ */
2171
+ , remove: function () {
2172
+ this.deepEach(clearData)
2173
+ return this.detach()
2174
+ }
2175
+
2176
+
2177
+ /**
2178
+ * @return {Bonzo}
2179
+ */
2180
+ , empty: function () {
2181
+ return this.each(function (el) {
2182
+ deepEach(el.childNodes, clearData)
2183
+
2184
+ while (el.firstChild) {
2185
+ el.removeChild(el.firstChild)
2186
+ }
2187
+ })
2188
+ }
2189
+
2190
+
2191
+ /**
2192
+ * @return {Bonzo}
2193
+ */
2194
+ , detach: function () {
2195
+ return this.each(function (el) {
2196
+ el[parentNode] && el[parentNode].removeChild(el)
2197
+ })
2198
+ }
2199
+
2200
+ // who uses a mouse anyway? oh right.
2201
+
2202
+ /**
2203
+ * @param {number} y
2204
+ */
2205
+ , scrollTop: function (y) {
2206
+ return scroll.call(this, null, y, 'y')
2207
+ }
2208
+
2209
+
2210
+ /**
2211
+ * @param {number} x
2212
+ */
2213
+ , scrollLeft: function (x) {
2214
+ return scroll.call(this, x, null, 'x')
2215
+ }
2216
+
2217
+ }
2218
+
2219
+
2220
+ function cloneNode(host, el) {
2221
+ var c = el.cloneNode(true)
2222
+ , cloneElems
2223
+ , elElems
2224
+ , i
2225
+
2226
+ // check for existence of an event cloner
2227
+ // preferably https://github.com/fat/bean
2228
+ // otherwise Bonzo won't do this for you
2229
+ if (host.$ && typeof host.cloneEvents == 'function') {
2230
+ host.$(c).cloneEvents(el)
2231
+
2232
+ // clone events from every child node
2233
+ cloneElems = host.$(c).find('*')
2234
+ elElems = host.$(el).find('*')
2235
+
2236
+ for (i = 0; i < elElems.length; i++)
2237
+ host.$(cloneElems[i]).cloneEvents(elElems[i])
2238
+ }
2239
+ return c
2240
+ }
2241
+
2242
+ function isBody(element) {
2243
+ return element === win || (/^(?:body|html)$/i).test(element.tagName)
2244
+ }
2245
+
2246
+ function getWindowScroll() {
2247
+ return { x: win.pageXOffset || html.scrollLeft, y: win.pageYOffset || html.scrollTop }
2248
+ }
2249
+
2250
+ function createScriptFromHtml(html) {
2251
+ var scriptEl = document.createElement('script')
2252
+ , matches = html.match(simpleScriptTagRe)
2253
+ scriptEl.src = matches[1]
2254
+ return scriptEl
2255
+ }
2256
+
2257
+ /**
2258
+ * @param {Array.<Element>|Element|Node|string} els
2259
+ * @return {Bonzo}
2260
+ */
2261
+ function bonzo(els) {
2262
+ return new Bonzo(els)
2263
+ }
2264
+
2265
+ bonzo.setQueryEngine = function (q) {
2266
+ query = q;
2267
+ delete bonzo.setQueryEngine
2268
+ }
2269
+
2270
+ bonzo.aug = function (o, target) {
2271
+ // for those standalone bonzo users. this love is for you.
2272
+ for (var k in o) {
2273
+ o.hasOwnProperty(k) && ((target || Bonzo.prototype)[k] = o[k])
2274
+ }
2275
+ }
2276
+
2277
+ bonzo.create = function (node) {
2278
+ // hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
2279
+ return typeof node == 'string' && node !== '' ?
2280
+ function () {
2281
+ if (simpleScriptTagRe.test(node)) return [createScriptFromHtml(node)]
2282
+ var tag = node.match(/^\s*<([^\s>]+)/)
2283
+ , el = doc.createElement('div')
2284
+ , els = []
2285
+ , p = tag ? tagMap[tag[1].toLowerCase()] : null
2286
+ , dep = p ? p[2] + 1 : 1
2287
+ , ns = p && p[3]
2288
+ , pn = parentNode
2289
+ , tb = features.autoTbody && p && p[0] == '<table>' && !(/<tbody/i).test(node)
2290
+
2291
+ el.innerHTML = p ? (p[0] + node + p[1]) : node
2292
+ while (dep--) el = el.firstChild
2293
+ // for IE NoScope, we may insert cruft at the begining just to get it to work
2294
+ if (ns && el && el.nodeType !== 1) el = el.nextSibling
2295
+ do {
2296
+ // tbody special case for IE<8, creates tbody on any empty table
2297
+ // we don't want it if we're just after a <thead>, <caption>, etc.
2298
+ if ((!tag || el.nodeType == 1) && (!tb || (el.tagName && el.tagName != 'TBODY'))) {
2299
+ els.push(el)
2300
+ }
2301
+ } while (el = el.nextSibling)
2302
+ // IE < 9 gives us a parentNode which messes up insert() check for cloning
2303
+ // `dep` > 1 can also cause problems with the insert() check (must do this last)
2304
+ each(els, function(el) { el[pn] && el[pn].removeChild(el) })
2305
+ return els
2306
+ }() : isNode(node) ? [node.cloneNode(true)] : []
2307
+ }
2308
+
2309
+ bonzo.doc = function () {
2310
+ var vp = bonzo.viewport()
2311
+ return {
2312
+ width: Math.max(doc.body.scrollWidth, html.scrollWidth, vp.width)
2313
+ , height: Math.max(doc.body.scrollHeight, html.scrollHeight, vp.height)
2314
+ }
2315
+ }
2316
+
2317
+ bonzo.firstChild = function (el) {
2318
+ for (var c = el.childNodes, i = 0, j = (c && c.length) || 0, e; i < j; i++) {
2319
+ if (c[i].nodeType === 1) e = c[j = i]
2320
+ }
2321
+ return e
2322
+ }
2323
+
2324
+ bonzo.viewport = function () {
2325
+ return {
2326
+ width: ie ? html.clientWidth : self.innerWidth
2327
+ , height: ie ? html.clientHeight : self.innerHeight
2328
+ }
2329
+ }
2330
+
2331
+ bonzo.isAncestor = 'compareDocumentPosition' in html ?
2332
+ function (container, element) {
2333
+ return (container.compareDocumentPosition(element) & 16) == 16
2334
+ } : 'contains' in html ?
2335
+ function (container, element) {
2336
+ return container !== element && container.contains(element);
2337
+ } :
2338
+ function (container, element) {
2339
+ while (element = element[parentNode]) {
2340
+ if (element === container) {
2341
+ return true
2342
+ }
2343
+ }
2344
+ return false
2345
+ }
2346
+
2347
+ return bonzo
2348
+ }); // the only line we care about using a semi-colon. placed here for concatenation tools
2349
+
2350
+ };
2351
+ modules.lib__bonzo = function() {
2352
+ if (bonzoCache === null) {
2353
+ bonzoCache = bonzoFunc();
2354
+ }
2355
+ return bonzoCache;
2356
+ };
2357
+ window.modules = modules;
2358
+ })();
2359
+
2360
+ (function() {
2361
+ var modules = window.modules || [];
2362
+ var qweryCache = null;
2363
+ var qweryFunc = function() {
2364
+ /*!
2365
+ * @preserve Qwery - A Blazing Fast query selector engine
2366
+ * https://github.com/ded/qwery
2367
+ * copyright Dustin Diaz 2012
2368
+ * MIT License
2369
+ */
2370
+
2371
+ (function (name, context, definition) {
2372
+ if (typeof module != 'undefined' && module.exports) module.exports = definition()
2373
+ else if (typeof define == 'function' && define.amd) define(definition)
2374
+ else context[name] = definition()
2375
+ })('qwery', this, function () {
2376
+ var doc = document
2377
+ , html = doc.documentElement
2378
+ , byClass = 'getElementsByClassName'
2379
+ , byTag = 'getElementsByTagName'
2380
+ , qSA = 'querySelectorAll'
2381
+ , useNativeQSA = 'useNativeQSA'
2382
+ , tagName = 'tagName'
2383
+ , nodeType = 'nodeType'
2384
+ , select // main select() method, assign later
2385
+
2386
+ , id = /#([\w\-]+)/
2387
+ , clas = /\.[\w\-]+/g
2388
+ , idOnly = /^#([\w\-]+)$/
2389
+ , classOnly = /^\.([\w\-]+)$/
2390
+ , tagOnly = /^([\w\-]+)$/
2391
+ , tagAndOrClass = /^([\w]+)?\.([\w\-]+)$/
2392
+ , splittable = /(^|,)\s*[>~+]/
2393
+ , normalizr = /^\s+|\s*([,\s\+\~>]|$)\s*/g
2394
+ , splitters = /[\s\>\+\~]/
2395
+ , splittersMore = /(?![\s\w\-\/\?\&\=\:\.\(\)\!,@#%<>\{\}\$\*\^'"]*\]|[\s\w\+\-]*\))/
2396
+ , specialChars = /([.*+?\^=!:${}()|\[\]\/\\])/g
2397
+ , simple = /^(\*|[a-z0-9]+)?(?:([\.\#]+[\w\-\.#]+)?)/
2398
+ , attr = /\[([\w\-]+)(?:([\|\^\$\*\~]?\=)['"]?([ \w\-\/\?\&\=\:\.\(\)\!,@#%<>\{\}\$\*\^]+)["']?)?\]/
2399
+ , pseudo = /:([\w\-]+)(\(['"]?([^()]+)['"]?\))?/
2400
+ , easy = new RegExp(idOnly.source + '|' + tagOnly.source + '|' + classOnly.source)
2401
+ , dividers = new RegExp('(' + splitters.source + ')' + splittersMore.source, 'g')
2402
+ , tokenizr = new RegExp(splitters.source + splittersMore.source)
2403
+ , chunker = new RegExp(simple.source + '(' + attr.source + ')?' + '(' + pseudo.source + ')?')
2404
+
2405
+ var walker = {
2406
+ ' ': function (node) {
2407
+ return node && node !== html && node.parentNode
2408
+ }
2409
+ , '>': function (node, contestant) {
2410
+ return node && node.parentNode == contestant.parentNode && node.parentNode
2411
+ }
2412
+ , '~': function (node) {
2413
+ return node && node.previousSibling
2414
+ }
2415
+ , '+': function (node, contestant, p1, p2) {
2416
+ if (!node) return false
2417
+ return (p1 = previous(node)) && (p2 = previous(contestant)) && p1 == p2 && p1
2418
+ }
2419
+ }
2420
+
2421
+ function cache() {
2422
+ this.c = {}
2423
+ }
2424
+ cache.prototype = {
2425
+ g: function (k) {
2426
+ return this.c[k] || undefined
2427
+ }
2428
+ , s: function (k, v, r) {
2429
+ v = r ? new RegExp(v) : v
2430
+ return (this.c[k] = v)
2431
+ }
2432
+ }
2433
+
2434
+ var classCache = new cache()
2435
+ , cleanCache = new cache()
2436
+ , attrCache = new cache()
2437
+ , tokenCache = new cache()
2438
+
2439
+ function classRegex(c) {
2440
+ return classCache.g(c) || classCache.s(c, '(^|\\s+)' + c + '(\\s+|$)', 1)
2441
+ }
2442
+
2443
+ // not quite as fast as inline loops in older browsers so don't use liberally
2444
+ function each(a, fn) {
2445
+ var i = 0, l = a.length
2446
+ for (; i < l; i++) fn(a[i])
2447
+ }
2448
+
2449
+ function flatten(ar) {
2450
+ for (var r = [], i = 0, l = ar.length; i < l; ++i) arrayLike(ar[i]) ? (r = r.concat(ar[i])) : (r[r.length] = ar[i])
2451
+ return r
2452
+ }
2453
+
2454
+ function arrayify(ar) {
2455
+ var i = 0, l = ar.length, r = []
2456
+ for (; i < l; i++) r[i] = ar[i]
2457
+ return r
2458
+ }
2459
+
2460
+ function previous(n) {
2461
+ while (n = n.previousSibling) if (n[nodeType] == 1) break;
2462
+ return n
2463
+ }
2464
+
2465
+ function q(query) {
2466
+ return query.match(chunker)
2467
+ }
2468
+
2469
+ // called using `this` as element and arguments from regex group results.
2470
+ // given => div.hello[title="world"]:foo('bar')
2471
+ // div.hello[title="world"]:foo('bar'), div, .hello, [title="world"], title, =, world, :foo('bar'), foo, ('bar'), bar]
2472
+ function interpret(whole, tag, idsAndClasses, wholeAttribute, attribute, qualifier, value, wholePseudo, pseudo, wholePseudoVal, pseudoVal) {
2473
+ var i, m, k, o, classes
2474
+ if (this[nodeType] !== 1) return false
2475
+ if (tag && tag !== '*' && this[tagName] && this[tagName].toLowerCase() !== tag) return false
2476
+ if (idsAndClasses && (m = idsAndClasses.match(id)) && m[1] !== this.id) return false
2477
+ if (idsAndClasses && (classes = idsAndClasses.match(clas))) {
2478
+ for (i = classes.length; i--;) if (!classRegex(classes[i].slice(1)).test(this.className)) return false
2479
+ }
2480
+ if (pseudo && qwery.pseudos[pseudo] && !qwery.pseudos[pseudo](this, pseudoVal)) return false
2481
+ if (wholeAttribute && !value) { // select is just for existance of attrib
2482
+ o = this.attributes
2483
+ for (k in o) {
2484
+ if (Object.prototype.hasOwnProperty.call(o, k) && (o[k].name || k) == attribute) {
2485
+ return this
2486
+ }
2487
+ }
2488
+ }
2489
+ if (wholeAttribute && !checkAttr(qualifier, getAttr(this, attribute) || '', value)) {
2490
+ // select is for attrib equality
2491
+ return false
2492
+ }
2493
+ return this
2494
+ }
2495
+
2496
+ function clean(s) {
2497
+ return cleanCache.g(s) || cleanCache.s(s, s.replace(specialChars, '\\$1'))
2498
+ }
2499
+
2500
+ function checkAttr(qualify, actual, val) {
2501
+ switch (qualify) {
2502
+ case '=':
2503
+ return actual == val
2504
+ case '^=':
2505
+ return actual.match(attrCache.g('^=' + val) || attrCache.s('^=' + val, '^' + clean(val), 1))
2506
+ case '$=':
2507
+ return actual.match(attrCache.g('$=' + val) || attrCache.s('$=' + val, clean(val) + '$', 1))
2508
+ case '*=':
2509
+ return actual.match(attrCache.g(val) || attrCache.s(val, clean(val), 1))
2510
+ case '~=':
2511
+ return actual.match(attrCache.g('~=' + val) || attrCache.s('~=' + val, '(?:^|\\s+)' + clean(val) + '(?:\\s+|$)', 1))
2512
+ case '|=':
2513
+ return actual.match(attrCache.g('|=' + val) || attrCache.s('|=' + val, '^' + clean(val) + '(-|$)', 1))
2514
+ }
2515
+ return 0
2516
+ }
2517
+
2518
+ // given a selector, first check for simple cases then collect all base candidate matches and filter
2519
+ function _qwery(selector, _root) {
2520
+ var r = [], ret = [], i, l, m, token, tag, els, intr, item, root = _root
2521
+ , tokens = tokenCache.g(selector) || tokenCache.s(selector, selector.split(tokenizr))
2522
+ , dividedTokens = selector.match(dividers)
2523
+
2524
+ if (!tokens.length) return r
2525
+
2526
+ token = (tokens = tokens.slice(0)).pop() // copy cached tokens, take the last one
2527
+ if (tokens.length && (m = tokens[tokens.length - 1].match(idOnly))) root = byId(_root, m[1])
2528
+ if (!root) return r
2529
+
2530
+ intr = q(token)
2531
+ // collect base candidates to filter
2532
+ els = root !== _root && root[nodeType] !== 9 && dividedTokens && /^[+~]$/.test(dividedTokens[dividedTokens.length - 1]) ?
2533
+ function (r) {
2534
+ while (root = root.nextSibling) {
2535
+ root[nodeType] == 1 && (intr[1] ? intr[1] == root[tagName].toLowerCase() : 1) && (r[r.length] = root)
2536
+ }
2537
+ return r
2538
+ }([]) :
2539
+ root[byTag](intr[1] || '*')
2540
+ // filter elements according to the right-most part of the selector
2541
+ for (i = 0, l = els.length; i < l; i++) {
2542
+ if (item = interpret.apply(els[i], intr)) r[r.length] = item
2543
+ }
2544
+ if (!tokens.length) return r
2545
+
2546
+ // filter further according to the rest of the selector (the left side)
2547
+ each(r, function (e) { if (ancestorMatch(e, tokens, dividedTokens)) ret[ret.length] = e })
2548
+ return ret
2549
+ }
2550
+
2551
+ // compare element to a selector
2552
+ function is(el, selector, root) {
2553
+ if (isNode(selector)) return el == selector
2554
+ if (arrayLike(selector)) return !!~flatten(selector).indexOf(el) // if selector is an array, is el a member?
2555
+
2556
+ var selectors = selector.split(','), tokens, dividedTokens
2557
+ while (selector = selectors.pop()) {
2558
+ tokens = tokenCache.g(selector) || tokenCache.s(selector, selector.split(tokenizr))
2559
+ dividedTokens = selector.match(dividers)
2560
+ tokens = tokens.slice(0) // copy array
2561
+ if (interpret.apply(el, q(tokens.pop())) && (!tokens.length || ancestorMatch(el, tokens, dividedTokens, root))) {
2562
+ return true
2563
+ }
2564
+ }
2565
+ return false
2566
+ }
2567
+
2568
+ // given elements matching the right-most part of a selector, filter out any that don't match the rest
2569
+ function ancestorMatch(el, tokens, dividedTokens, root) {
2570
+ var cand
2571
+ // recursively work backwards through the tokens and up the dom, covering all options
2572
+ function crawl(e, i, p) {
2573
+ while (p = walker[dividedTokens[i]](p, e)) {
2574
+ if (isNode(p) && (interpret.apply(p, q(tokens[i])))) {
2575
+ if (i) {
2576
+ if (cand = crawl(p, i - 1, p)) return cand
2577
+ } else return p
2578
+ }
2579
+ }
2580
+ }
2581
+ return (cand = crawl(el, tokens.length - 1, el)) && (!root || isAncestor(cand, root))
2582
+ }
2583
+
2584
+ function isNode(el, t) {
2585
+ return el && typeof el === 'object' && (t = el[nodeType]) && (t == 1 || t == 9)
2586
+ }
2587
+
2588
+ function uniq(ar) {
2589
+ var a = [], i, j;
2590
+ o:
2591
+ for (i = 0; i < ar.length; ++i) {
2592
+ for (j = 0; j < a.length; ++j) if (a[j] == ar[i]) continue o
2593
+ a[a.length] = ar[i]
2594
+ }
2595
+ return a
2596
+ }
2597
+
2598
+ function arrayLike(o) {
2599
+ return (typeof o === 'object' && isFinite(o.length))
2600
+ }
2601
+
2602
+ function normalizeRoot(root) {
2603
+ if (!root) return doc
2604
+ if (typeof root == 'string') return qwery(root)[0]
2605
+ if (!root[nodeType] && arrayLike(root)) return root[0]
2606
+ return root
2607
+ }
2608
+
2609
+ function byId(root, id, el) {
2610
+ // if doc, query on it, else query the parent doc or if a detached fragment rewrite the query and run on the fragment
2611
+ return root[nodeType] === 9 ? root.getElementById(id) :
2612
+ root.ownerDocument &&
2613
+ (((el = root.ownerDocument.getElementById(id)) && isAncestor(el, root) && el) ||
2614
+ (!isAncestor(root, root.ownerDocument) && select('[id="' + id + '"]', root)[0]))
2615
+ }
2616
+
2617
+ function qwery(selector, _root) {
2618
+ var m, el, root = normalizeRoot(_root)
2619
+
2620
+ // easy, fast cases that we can dispatch with simple DOM calls
2621
+ if (!root || !selector) return []
2622
+ if (selector === window || isNode(selector)) {
2623
+ return !_root || (selector !== window && isNode(root) && isAncestor(selector, root)) ? [selector] : []
2624
+ }
2625
+ if (selector && arrayLike(selector)) return flatten(selector)
2626
+ if (m = selector.match(easy)) {
2627
+ if (m[1]) return (el = byId(root, m[1])) ? [el] : []
2628
+ if (m[2]) return arrayify(root[byTag](m[2]))
2629
+ if (hasByClass && m[3]) return arrayify(root[byClass](m[3]))
2630
+ }
2631
+
2632
+ return select(selector, root)
2633
+ }
2634
+
2635
+ // where the root is not document and a relationship selector is first we have to
2636
+ // do some awkward adjustments to get it to work, even with qSA
2637
+ function collectSelector(root, collector) {
2638
+ return function (s) {
2639
+ var oid, nid
2640
+ if (splittable.test(s)) {
2641
+ if (root[nodeType] !== 9) {
2642
+ // make sure the el has an id, rewrite the query, set root to doc and run it
2643
+ if (!(nid = oid = root.getAttribute('id'))) root.setAttribute('id', nid = '__qwerymeupscotty')
2644
+ s = '[id="' + nid + '"]' + s // avoid byId and allow us to match context element
2645
+ collector(root.parentNode || root, s, true)
2646
+ oid || root.removeAttribute('id')
2647
+ }
2648
+ return;
2649
+ }
2650
+ s.length && collector(root, s, false)
2651
+ }
2652
+ }
2653
+
2654
+ var isAncestor = 'compareDocumentPosition' in html ?
2655
+ function (element, container) {
2656
+ return (container.compareDocumentPosition(element) & 16) == 16
2657
+ } : 'contains' in html ?
2658
+ function (element, container) {
2659
+ container = container[nodeType] === 9 || container == window ? html : container
2660
+ return container !== element && container.contains(element)
2661
+ } :
2662
+ function (element, container) {
2663
+ while (element = element.parentNode) if (element === container) return 1
2664
+ return 0
2665
+ }
2666
+ , getAttr = function () {
2667
+ // detect buggy IE src/href getAttribute() call
2668
+ var e = doc.createElement('p')
2669
+ return ((e.innerHTML = '<a href="#x">x</a>') && e.firstChild.getAttribute('href') != '#x') ?
2670
+ function (e, a) {
2671
+ return a === 'class' ? e.className : (a === 'href' || a === 'src') ?
2672
+ e.getAttribute(a, 2) : e.getAttribute(a)
2673
+ } :
2674
+ function (e, a) { return e.getAttribute(a) }
2675
+ }()
2676
+ , hasByClass = !!doc[byClass]
2677
+ // has native qSA support
2678
+ , hasQSA = doc.querySelector && doc[qSA]
2679
+ // use native qSA
2680
+ , selectQSA = function (selector, root) {
2681
+ var result = [], ss, e
2682
+ try {
2683
+ if (root[nodeType] === 9 || !splittable.test(selector)) {
2684
+ // most work is done right here, defer to qSA
2685
+ return arrayify(root[qSA](selector))
2686
+ }
2687
+ // special case where we need the services of `collectSelector()`
2688
+ each(ss = selector.split(','), collectSelector(root, function (ctx, s) {
2689
+ e = ctx[qSA](s)
2690
+ if (e.length == 1) result[result.length] = e.item(0)
2691
+ else if (e.length) result = result.concat(arrayify(e))
2692
+ }))
2693
+ return ss.length > 1 && result.length > 1 ? uniq(result) : result
2694
+ } catch (ex) { }
2695
+ return selectNonNative(selector, root)
2696
+ }
2697
+ // no native selector support
2698
+ , selectNonNative = function (selector, root) {
2699
+ var result = [], items, m, i, l, r, ss
2700
+ selector = selector.replace(normalizr, '$1')
2701
+ if (m = selector.match(tagAndOrClass)) {
2702
+ r = classRegex(m[2])
2703
+ items = root[byTag](m[1] || '*')
2704
+ for (i = 0, l = items.length; i < l; i++) {
2705
+ if (r.test(items[i].className)) result[result.length] = items[i]
2706
+ }
2707
+ return result
2708
+ }
2709
+ // more complex selector, get `_qwery()` to do the work for us
2710
+ each(ss = selector.split(','), collectSelector(root, function (ctx, s, rewrite) {
2711
+ r = _qwery(s, ctx)
2712
+ for (i = 0, l = r.length; i < l; i++) {
2713
+ if (ctx[nodeType] === 9 || rewrite || isAncestor(r[i], root)) result[result.length] = r[i]
2714
+ }
2715
+ }))
2716
+ return ss.length > 1 && result.length > 1 ? uniq(result) : result
2717
+ }
2718
+ , configure = function (options) {
2719
+ // configNativeQSA: use fully-internal selector or native qSA where present
2720
+ if (typeof options[useNativeQSA] !== 'undefined')
2721
+ select = !options[useNativeQSA] ? selectNonNative : hasQSA ? selectQSA : selectNonNative
2722
+ }
2723
+
2724
+ configure({ useNativeQSA: true })
2725
+
2726
+ qwery.configure = configure
2727
+ qwery.uniq = uniq
2728
+ qwery.is = is
2729
+ qwery.pseudos = {}
2730
+
2731
+ return qwery
2732
+ });
2733
+
2734
+ };
2735
+ modules.lib__qwery = function() {
2736
+ if (qweryCache === null) {
2737
+ qweryCache = qweryFunc();
2738
+ }
2739
+ return qweryCache;
2740
+ };
2741
+ window.modules = modules;
2742
+ })();
2743
+
2744
+ (function() {
2745
+ var modules = window.modules || [];
2746
+ var reqwestCache = null;
2747
+ var reqwestFunc = function() {
2748
+ /*!
2749
+ * Reqwest! A general purpose XHR connection manager
2750
+ * (c) Dustin Diaz 2013
2751
+ * https://github.com/ded/reqwest
2752
+ * license MIT
2753
+ */
2754
+ !function (name, context, definition) {
2755
+ if (typeof module != 'undefined' && module.exports) module.exports = definition()
2756
+ else if (typeof define == 'function' && define.amd) define(definition)
2757
+ else context[name] = definition()
2758
+ }('reqwest', this, function () {
2759
+
2760
+ var win = window
2761
+ , doc = document
2762
+ , twoHundo = /^20\d$/
2763
+ , byTag = 'getElementsByTagName'
2764
+ , readyState = 'readyState'
2765
+ , contentType = 'Content-Type'
2766
+ , requestedWith = 'X-Requested-With'
2767
+ , head = doc[byTag]('head')[0]
2768
+ , uniqid = 0
2769
+ , callbackPrefix = 'reqwest_' + (+new Date())
2770
+ , lastValue // data stored by the most recent JSONP callback
2771
+ , xmlHttpRequest = 'XMLHttpRequest'
2772
+ , noop = function () {}
2773
+
2774
+ , isArray = typeof Array.isArray == 'function'
2775
+ ? Array.isArray
2776
+ : function (a) {
2777
+ return a instanceof Array
2778
+ }
2779
+
2780
+ , defaultHeaders = {
2781
+ contentType: 'application/x-www-form-urlencoded'
2782
+ , requestedWith: xmlHttpRequest
2783
+ , accept: {
2784
+ '*': 'text/javascript, text/html, application/xml, text/xml, */*'
2785
+ , xml: 'application/xml, text/xml'
2786
+ , html: 'text/html'
2787
+ , text: 'text/plain'
2788
+ , json: 'application/json, text/javascript'
2789
+ , js: 'application/javascript, text/javascript'
2790
+ }
2791
+ }
2792
+
2793
+ , xhr = win[xmlHttpRequest]
2794
+ ? function () {
2795
+ return new XMLHttpRequest()
2796
+ }
2797
+ : function () {
2798
+ return new ActiveXObject('Microsoft.XMLHTTP')
2799
+ }
2800
+ , globalSetupOptions = {
2801
+ dataFilter: function (data) {
2802
+ return data
2803
+ }
2804
+ }
2805
+
2806
+ function handleReadyState(r, success, error) {
2807
+ return function () {
2808
+ // use _aborted to mitigate against IE err c00c023f
2809
+ // (can't read props on aborted request objects)
2810
+ if (r._aborted) return error(r.request)
2811
+ if (r.request && r.request[readyState] == 4) {
2812
+ r.request.onreadystatechange = noop
2813
+ if (twoHundo.test(r.request.status))
2814
+ success(r.request)
2815
+ else
2816
+ error(r.request)
2817
+ }
2818
+ }
2819
+ }
2820
+
2821
+ function setHeaders(http, o) {
2822
+ var headers = o.headers || {}
2823
+ , h
2824
+
2825
+ headers.Accept = headers.Accept
2826
+ || defaultHeaders.accept[o.type]
2827
+ || defaultHeaders.accept['*']
2828
+
2829
+ // breaks cross-origin requests with legacy browsers
2830
+ if (!o.crossOrigin && !headers[requestedWith]) headers[requestedWith] = defaultHeaders.requestedWith
2831
+ if (!headers[contentType]) headers[contentType] = o.contentType || defaultHeaders.contentType
2832
+ for (h in headers)
2833
+ headers.hasOwnProperty(h) && http.setRequestHeader(h, headers[h])
2834
+ }
2835
+
2836
+ function setCredentials(http, o) {
2837
+ if (typeof o.withCredentials !== 'undefined' && typeof http.withCredentials !== 'undefined') {
2838
+ http.withCredentials = !!o.withCredentials
2839
+ }
2840
+ }
2841
+
2842
+ function generalCallback(data) {
2843
+ lastValue = data
2844
+ }
2845
+
2846
+ function urlappend (url, s) {
2847
+ return url + (/\?/.test(url) ? '&' : '?') + s
2848
+ }
2849
+
2850
+ function handleJsonp(o, fn, err, url) {
2851
+ var reqId = uniqid++
2852
+ , cbkey = o.jsonpCallback || 'callback' // the 'callback' key
2853
+ , cbval = o.jsonpCallbackName || reqwest.getcallbackPrefix(reqId)
2854
+ // , cbval = o.jsonpCallbackName || ('reqwest_' + reqId) // the 'callback' value
2855
+ , cbreg = new RegExp('((^|\\?|&)' + cbkey + ')=([^&]+)')
2856
+ , match = url.match(cbreg)
2857
+ , script = doc.createElement('script')
2858
+ , loaded = 0
2859
+ , isIE10 = navigator.userAgent.indexOf('MSIE 10.0') !== -1
2860
+
2861
+ if (match) {
2862
+ if (match[3] === '?') {
2863
+ url = url.replace(cbreg, '$1=' + cbval) // wildcard callback func name
2864
+ } else {
2865
+ cbval = match[3] // provided callback func name
2866
+ }
2867
+ } else {
2868
+ url = urlappend(url, cbkey + '=' + cbval) // no callback details, add 'em
2869
+ }
2870
+
2871
+ win[cbval] = generalCallback
2872
+
2873
+ script.type = 'text/javascript'
2874
+ script.src = url
2875
+ script.async = true
2876
+ if (typeof script.onreadystatechange !== 'undefined' && !isIE10) {
2877
+ // need this for IE due to out-of-order onreadystatechange(), binding script
2878
+ // execution to an event listener gives us control over when the script
2879
+ // is executed. See http://jaubourg.net/2010/07/loading-script-as-onclick-handler-of.html
2880
+ //
2881
+ // if this hack is used in IE10 jsonp callback are never called
2882
+ script.event = 'onclick'
2883
+ script.htmlFor = script.id = '_reqwest_' + reqId
2884
+ }
2885
+
2886
+ script.onload = script.onreadystatechange = function () {
2887
+ if ((script[readyState] && script[readyState] !== 'complete' && script[readyState] !== 'loaded') || loaded) {
2888
+ return false
2889
+ }
2890
+ script.onload = script.onreadystatechange = null
2891
+ script.onclick && script.onclick()
2892
+ // Call the user callback with the last value stored and clean up values and scripts.
2893
+ fn(lastValue)
2894
+ lastValue = undefined
2895
+ head.removeChild(script)
2896
+ loaded = 1
2897
+ }
2898
+
2899
+ // Add the script to the DOM head
2900
+ head.appendChild(script)
2901
+
2902
+ // Enable JSONP timeout
2903
+ return {
2904
+ abort: function () {
2905
+ script.onload = script.onreadystatechange = null
2906
+ err({}, 'Request is aborted: timeout', {})
2907
+ lastValue = undefined
2908
+ head.removeChild(script)
2909
+ loaded = 1
2910
+ }
2911
+ }
2912
+ }
2913
+
2914
+ function getRequest(fn, err) {
2915
+ var o = this.o
2916
+ , method = (o.method || 'GET').toUpperCase()
2917
+ , url = typeof o === 'string' ? o : o.url
2918
+ // convert non-string objects to query-string form unless o.processData is false
2919
+ , data = (o.processData !== false && o.data && typeof o.data !== 'string')
2920
+ ? reqwest.toQueryString(o.data)
2921
+ : (o.data || null)
2922
+ , http
2923
+
2924
+ // if we're working on a GET request and we have data then we should append
2925
+ // query string to end of URL and not post data
2926
+ if ((o.type == 'jsonp' || method == 'GET') && data) {
2927
+ url = urlappend(url, data)
2928
+ data = null
2929
+ }
2930
+
2931
+ if (o.type == 'jsonp') return handleJsonp(o, fn, err, url)
2932
+
2933
+ http = xhr()
2934
+ http.open(method, url, o.async === false ? false : true)
2935
+ setHeaders(http, o)
2936
+ setCredentials(http, o)
2937
+ http.onreadystatechange = handleReadyState(this, fn, err)
2938
+ o.before && o.before(http)
2939
+ http.send(data)
2940
+ return http
2941
+ }
2942
+
2943
+ function Reqwest(o, fn) {
2944
+ this.o = o
2945
+ this.fn = fn
2946
+
2947
+ init.apply(this, arguments)
2948
+ }
2949
+
2950
+ function setType(url) {
2951
+ var m = url.match(/\.(json|jsonp|html|xml)(\?|$)/)
2952
+ return m ? m[1] : 'js'
2953
+ }
2954
+
2955
+ function init(o, fn) {
2956
+
2957
+ this.url = typeof o == 'string' ? o : o.url
2958
+ this.timeout = null
2959
+
2960
+ // whether request has been fulfilled for purpose
2961
+ // of tracking the Promises
2962
+ this._fulfilled = false
2963
+ // success handlers
2964
+ this._fulfillmentHandlers = []
2965
+ // error handlers
2966
+ this._errorHandlers = []
2967
+ // complete (both success and fail) handlers
2968
+ this._completeHandlers = []
2969
+ this._erred = false
2970
+ this._responseArgs = {}
2971
+
2972
+ var self = this
2973
+ , type = o.type || setType(this.url)
2974
+
2975
+ fn = fn || function () {}
2976
+
2977
+ if (o.timeout) {
2978
+ this.timeout = setTimeout(function () {
2979
+ self.abort()
2980
+ }, o.timeout)
2981
+ }
2982
+
2983
+ if (o.success) {
2984
+ this._fulfillmentHandlers.push(function () {
2985
+ o.success.apply(o, arguments)
2986
+ })
2987
+ }
2988
+
2989
+ if (o.error) {
2990
+ this._errorHandlers.push(function () {
2991
+ o.error.apply(o, arguments)
2992
+ })
2993
+ }
2994
+
2995
+ if (o.complete) {
2996
+ this._completeHandlers.push(function () {
2997
+ o.complete.apply(o, arguments)
2998
+ })
2999
+ }
3000
+
3001
+ function complete (resp) {
3002
+ o.timeout && clearTimeout(self.timeout)
3003
+ self.timeout = null
3004
+ while (self._completeHandlers.length > 0) {
3005
+ self._completeHandlers.shift()(resp)
3006
+ }
3007
+ }
3008
+
3009
+ function success (resp) {
3010
+ // use global data filter on response text
3011
+ var filteredResponse = globalSetupOptions.dataFilter(resp.responseText, type)
3012
+ , r = filteredResponse
3013
+ try {
3014
+ resp.responseText = r
3015
+ } catch (e) {
3016
+ // can't assign this in IE<=8, just ignore
3017
+ }
3018
+ if (r) {
3019
+ switch (type) {
3020
+ case 'json':
3021
+ try {
3022
+ resp = win.JSON ? win.JSON.parse(r) : eval('(' + r + ')')
3023
+ } catch (err) {
3024
+ return error(resp, 'Could not parse JSON in response', err)
3025
+ }
3026
+ break
3027
+ case 'js':
3028
+ resp = eval(r)
3029
+ break
3030
+ case 'html':
3031
+ resp = r
3032
+ break
3033
+ case 'xml':
3034
+ resp = resp.responseXML
3035
+ && resp.responseXML.parseError // IE trololo
3036
+ && resp.responseXML.parseError.errorCode
3037
+ && resp.responseXML.parseError.reason
3038
+ ? null
3039
+ : resp.responseXML
3040
+ break
3041
+ }
3042
+ }
3043
+
3044
+ self._responseArgs.resp = resp
3045
+ self._fulfilled = true
3046
+ fn(resp)
3047
+ while (self._fulfillmentHandlers.length > 0) {
3048
+ self._fulfillmentHandlers.shift()(resp)
3049
+ }
3050
+
3051
+ complete(resp)
3052
+ }
3053
+
3054
+ function error(resp, msg, t) {
3055
+ self._responseArgs.resp = resp
3056
+ self._responseArgs.msg = msg
3057
+ self._responseArgs.t = t
3058
+ self._erred = true
3059
+ while (self._errorHandlers.length > 0) {
3060
+ self._errorHandlers.shift()(resp, msg, t)
3061
+ }
3062
+ complete(resp)
3063
+ }
3064
+
3065
+ this.request = getRequest.call(this, success, error)
3066
+ }
3067
+
3068
+ Reqwest.prototype = {
3069
+ abort: function () {
3070
+ this._aborted = true
3071
+ this.request.abort()
3072
+ }
3073
+
3074
+ , retry: function () {
3075
+ init.call(this, this.o, this.fn)
3076
+ }
3077
+
3078
+ /**
3079
+ * Small deviation from the Promises A CommonJs specification
3080
+ * http://wiki.commonjs.org/wiki/Promises/A
3081
+ */
3082
+
3083
+ /**
3084
+ * `then` will execute upon successful requests
3085
+ */
3086
+ , then: function (success, fail) {
3087
+ success = success || function () {}
3088
+ fail = fail || function () {}
3089
+ if (this._fulfilled) {
3090
+ success(this._responseArgs.resp)
3091
+ } else if (this._erred) {
3092
+ fail(this._responseArgs.resp, this._responseArgs.msg, this._responseArgs.t)
3093
+ } else {
3094
+ this._fulfillmentHandlers.push(success)
3095
+ this._errorHandlers.push(fail)
3096
+ }
3097
+ return this
3098
+ }
3099
+
3100
+ /**
3101
+ * `always` will execute whether the request succeeds or fails
3102
+ */
3103
+ , always: function (fn) {
3104
+ if (this._fulfilled || this._erred) {
3105
+ fn(this._responseArgs.resp)
3106
+ } else {
3107
+ this._completeHandlers.push(fn)
3108
+ }
3109
+ return this
3110
+ }
3111
+
3112
+ /**
3113
+ * `fail` will execute when the request fails
3114
+ */
3115
+ , fail: function (fn) {
3116
+ if (this._erred) {
3117
+ fn(this._responseArgs.resp, this._responseArgs.msg, this._responseArgs.t)
3118
+ } else {
3119
+ this._errorHandlers.push(fn)
3120
+ }
3121
+ return this
3122
+ }
3123
+ }
3124
+
3125
+ function reqwest(o, fn) {
3126
+ return new Reqwest(o, fn)
3127
+ }
3128
+
3129
+ // normalize newline variants according to spec -> CRLF
3130
+ function normalize(s) {
3131
+ return s ? s.replace(/\r?\n/g, '\r\n') : ''
3132
+ }
3133
+
3134
+ function serial(el, cb) {
3135
+ var n = el.name
3136
+ , t = el.tagName.toLowerCase()
3137
+ , optCb = function (o) {
3138
+ // IE gives value="" even where there is no value attribute
3139
+ // 'specified' ref: http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-862529273
3140
+ if (o && !o.disabled)
3141
+ cb(n, normalize(o.attributes.value && o.attributes.value.specified ? o.value : o.text))
3142
+ }
3143
+ , ch, ra, val, i
3144
+
3145
+ // don't serialize elements that are disabled or without a name
3146
+ if (el.disabled || !n) return
3147
+
3148
+ switch (t) {
3149
+ case 'input':
3150
+ if (!/reset|button|image|file/i.test(el.type)) {
3151
+ ch = /checkbox/i.test(el.type)
3152
+ ra = /radio/i.test(el.type)
3153
+ val = el.value
3154
+ // WebKit gives us "" instead of "on" if a checkbox has no value, so correct it here
3155
+ ;(!(ch || ra) || el.checked) && cb(n, normalize(ch && val === '' ? 'on' : val))
3156
+ }
3157
+ break
3158
+ case 'textarea':
3159
+ cb(n, normalize(el.value))
3160
+ break
3161
+ case 'select':
3162
+ if (el.type.toLowerCase() === 'select-one') {
3163
+ optCb(el.selectedIndex >= 0 ? el.options[el.selectedIndex] : null)
3164
+ } else {
3165
+ for (i = 0; el.length && i < el.length; i++) {
3166
+ el.options[i].selected && optCb(el.options[i])
3167
+ }
3168
+ }
3169
+ break
3170
+ }
3171
+ }
3172
+
3173
+ // collect up all form elements found from the passed argument elements all
3174
+ // the way down to child elements; pass a '<form>' or form fields.
3175
+ // called with 'this'=callback to use for serial() on each element
3176
+ function eachFormElement() {
3177
+ var cb = this
3178
+ , e, i
3179
+ , serializeSubtags = function (e, tags) {
3180
+ var i, j, fa
3181
+ for (i = 0; i < tags.length; i++) {
3182
+ fa = e[byTag](tags[i])
3183
+ for (j = 0; j < fa.length; j++) serial(fa[j], cb)
3184
+ }
3185
+ }
3186
+
3187
+ for (i = 0; i < arguments.length; i++) {
3188
+ e = arguments[i]
3189
+ if (/input|select|textarea/i.test(e.tagName)) serial(e, cb)
3190
+ serializeSubtags(e, [ 'input', 'select', 'textarea' ])
3191
+ }
3192
+ }
3193
+
3194
+ // standard query string style serialization
3195
+ function serializeQueryString() {
3196
+ return reqwest.toQueryString(reqwest.serializeArray.apply(null, arguments))
3197
+ }
3198
+
3199
+ // { 'name': 'value', ... } style serialization
3200
+ function serializeHash() {
3201
+ var hash = {}
3202
+ eachFormElement.apply(function (name, value) {
3203
+ if (name in hash) {
3204
+ hash[name] && !isArray(hash[name]) && (hash[name] = [hash[name]])
3205
+ hash[name].push(value)
3206
+ } else hash[name] = value
3207
+ }, arguments)
3208
+ return hash
3209
+ }
3210
+
3211
+ // [ { name: 'name', value: 'value' }, ... ] style serialization
3212
+ reqwest.serializeArray = function () {
3213
+ var arr = []
3214
+ eachFormElement.apply(function (name, value) {
3215
+ arr.push({name: name, value: value})
3216
+ }, arguments)
3217
+ return arr
3218
+ }
3219
+
3220
+ reqwest.serialize = function () {
3221
+ if (arguments.length === 0) return ''
3222
+ var opt, fn
3223
+ , args = Array.prototype.slice.call(arguments, 0)
3224
+
3225
+ opt = args.pop()
3226
+ opt && opt.nodeType && args.push(opt) && (opt = null)
3227
+ opt && (opt = opt.type)
3228
+
3229
+ if (opt == 'map') fn = serializeHash
3230
+ else if (opt == 'array') fn = reqwest.serializeArray
3231
+ else fn = serializeQueryString
3232
+
3233
+ return fn.apply(null, args)
3234
+ }
3235
+
3236
+ reqwest.toQueryString = function (o, trad) {
3237
+ var prefix, i
3238
+ , traditional = trad || false
3239
+ , s = []
3240
+ , enc = encodeURIComponent
3241
+ , add = function (key, value) {
3242
+ // If value is a function, invoke it and return its value
3243
+ value = ('function' === typeof value) ? value() : (value == null ? '' : value)
3244
+ s[s.length] = enc(key) + '=' + enc(value)
3245
+ }
3246
+ // If an array was passed in, assume that it is an array of form elements.
3247
+ if (isArray(o)) {
3248
+ for (i = 0; o && i < o.length; i++) add(o[i].name, o[i].value)
3249
+ } else {
3250
+ // If traditional, encode the "old" way (the way 1.3.2 or older
3251
+ // did it), otherwise encode params recursively.
3252
+ for (prefix in o) {
3253
+ buildParams(prefix, o[prefix], traditional, add)
3254
+ }
3255
+ }
3256
+
3257
+ // spaces should be + according to spec
3258
+ return s.join('&').replace(/%20/g, '+')
3259
+ }
3260
+
3261
+ function buildParams(prefix, obj, traditional, add) {
3262
+ var name, i, v
3263
+ , rbracket = /\[\]$/
3264
+
3265
+ if (isArray(obj)) {
3266
+ // Serialize array item.
3267
+ for (i = 0; obj && i < obj.length; i++) {
3268
+ v = obj[i]
3269
+ if (traditional || rbracket.test(prefix)) {
3270
+ // Treat each array item as a scalar.
3271
+ add(prefix, v)
3272
+ } else {
3273
+ buildParams(prefix + '[' + (typeof v === 'object' ? i : '') + ']', v, traditional, add)
3274
+ }
3275
+ }
3276
+ } else if (obj && obj.toString() === '[object Object]') {
3277
+ // Serialize object item.
3278
+ for (name in obj) {
3279
+ buildParams(prefix + '[' + name + ']', obj[name], traditional, add)
3280
+ }
3281
+
3282
+ } else {
3283
+ // Serialize scalar item.
3284
+ add(prefix, obj)
3285
+ }
3286
+ }
3287
+
3288
+ reqwest.getcallbackPrefix = function () {
3289
+ return callbackPrefix
3290
+ }
3291
+
3292
+ // jQuery and Zepto compatibility, differences can be remapped here so you can call
3293
+ // .ajax.compat(options, callback)
3294
+ reqwest.compat = function (o, fn) {
3295
+ if (o) {
3296
+ o.type && (o.method = o.type) && delete o.type
3297
+ o.dataType && (o.type = o.dataType)
3298
+ o.jsonpCallback && (o.jsonpCallbackName = o.jsonpCallback) && delete o.jsonpCallback
3299
+ o.jsonp && (o.jsonpCallback = o.jsonp)
3300
+ }
3301
+ return new Reqwest(o, fn)
3302
+ }
3303
+
3304
+ reqwest.ajaxSetup = function (options) {
3305
+ options = options || {}
3306
+ for (var k in options) {
3307
+ globalSetupOptions[k] = options[k]
3308
+ }
3309
+ }
3310
+
3311
+ return reqwest
3312
+ });
3313
+
3314
+ };
3315
+ modules.lib__reqwest = function() {
3316
+ if (reqwestCache === null) {
3317
+ reqwestCache = reqwestFunc();
3318
+ }
3319
+ return reqwestCache;
3320
+ };
3321
+ window.modules = modules;
3322
+ })();
3323
+
3324
+ (function() {
3325
+ var modules = window.modules || [];
3326
+ var event_listenersCache = null;
3327
+ var event_listenersFunc = function() {
3328
+ // this only brings addEventListener into IE8
3329
+
3330
+ (function() {
3331
+ if (!Event.prototype.preventDefault) {
3332
+ Event.prototype.preventDefault=function() {
3333
+ this.returnValue=false;
3334
+ };
3335
+ }
3336
+ if (!Event.prototype.stopPropagation) {
3337
+ Event.prototype.stopPropagation=function() {
3338
+ this.cancelBubble=true;
3339
+ };
3340
+ }
3341
+ if (!Element.prototype.addEventListener) {
3342
+ var eventListeners=[];
3343
+
3344
+ var addEventListener=function(type,listener /*, useCapture (will be ignored) */) {
3345
+ var self=this;
3346
+ var wrapper=function(e) {
3347
+ e.target=e.srcElement;
3348
+ e.currentTarget=self;
3349
+ if (listener.handleEvent) {
3350
+ listener.handleEvent(e);
3351
+ } else {
3352
+ listener.call(self,e);
3353
+ }
3354
+ };
3355
+ if (type=="DOMContentLoaded") {
3356
+ var wrapper2=function(e) {
3357
+ if (document.readyState=="complete") {
3358
+ wrapper(e);
3359
+ }
3360
+ };
3361
+ document.attachEvent("onreadystatechange",wrapper2);
3362
+ eventListeners.push({object:this,type:type,listener:listener,wrapper:wrapper2});
3363
+
3364
+ if (document.readyState=="complete") {
3365
+ var e=new Event();
3366
+ e.srcElement=window;
3367
+ wrapper2(e);
3368
+ }
3369
+ } else {
3370
+ this.attachEvent("on"+type,wrapper);
3371
+ eventListeners.push({object:this,type:type,listener:listener,wrapper:wrapper});
3372
+ }
3373
+ };
3374
+ var removeEventListener=function(type,listener /*, useCapture (will be ignored) */) {
3375
+ var counter=0;
3376
+ while (counter<eventListeners.length) {
3377
+ var eventListener=eventListeners[counter];
3378
+ if (eventListener.object==this && eventListener.type==type && eventListener.listener==listener) {
3379
+ if (type=="DOMContentLoaded") {
3380
+ this.detachEvent("onreadystatechange",eventListener.wrapper);
3381
+ } else {
3382
+ this.detachEvent("on"+type,eventListener.wrapper);
3383
+ }
3384
+ break;
3385
+ }
3386
+ ++counter;
3387
+ }
3388
+ };
3389
+ Element.prototype.addEventListener=addEventListener;
3390
+ Element.prototype.removeEventListener=removeEventListener;
3391
+ if (HTMLDocument) {
3392
+ HTMLDocument.prototype.addEventListener=addEventListener;
3393
+ HTMLDocument.prototype.removeEventListener=removeEventListener;
3394
+ }
3395
+ if (Window) {
3396
+ Window.prototype.addEventListener=addEventListener;
3397
+ Window.prototype.removeEventListener=removeEventListener;
3398
+ }
3399
+ }
3400
+ })();
3401
+ };
3402
+ modules.patches__event_listeners = function() {
3403
+ if (event_listenersCache === null) {
3404
+ event_listenersCache = event_listenersFunc();
3405
+ }
3406
+ return event_listenersCache;
953
3407
  };
954
3408
  window.modules = modules;
955
3409
  })();
@@ -1179,19 +3633,3 @@ return(!i||i!==r&&!b.contains(r,i))&&(e.type=o.origType,n=o.handler.apply(this,a
1179
3633
  };
1180
3634
  window.modules = modules;
1181
3635
  })();
1182
-
1183
- (function() {
1184
- var modules = window.modules || [];
1185
- window.require = function(path) {
1186
- var transformedPath = path.replace(/\//g, '__');
1187
- if (transformedPath.indexOf('__') === -1) {
1188
- transformedPath = '__' + transformedPath;
1189
- }
1190
- var factory = modules[transformedPath];
1191
- if (factory === null) {
1192
- return null;
1193
- } else {
1194
- return modules[transformedPath]();
1195
- }
1196
- };
1197
- })();