Fooman_Speedster - Version 1.1.0

Version Notes

fixed canonical url
updated validation file

Download this release

Release Info

Developer Magento Core Team
Extension Fooman_Speedster
Version 1.1.0
Comparing to
See all releases


Code changes from version 1.0.4 to 1.1.0

Files changed (31) hide show
  1. app/code/community/Fooman/Speedster/Block/Page/Html/Head.php +7 -2
  2. app/code/community/Fooman/Speedster/etc/config.xml +1 -1
  3. js/prototype/validation-4min.js +773 -742
  4. lib/minify/HISTORY.txt +12 -0
  5. lib/minify/lib/HTTP/ConditionalGet.php +49 -14
  6. lib/minify/lib/HTTP/Encoder.php +31 -17
  7. lib/minify/lib/JSMin.php +188 -205
  8. lib/minify/lib/JSMinPlus.php +1872 -0
  9. lib/minify/lib/Minify.php +42 -39
  10. lib/minify/lib/Minify/CSS/Compressor.php +6 -1
  11. lib/minify/lib/Minify/CSS/UriRewriter.php +11 -13
  12. lib/minify/lib/Minify/Cache/File.php +10 -0
  13. lib/minify/lib/Minify/Controller/Base.php +2 -2
  14. lib/minify/lib/Minify/Controller/Files.php +8 -1
  15. lib/minify/lib/Minify/Controller/Groups.php +9 -1
  16. lib/minify/lib/Minify/Controller/MinApp.php +9 -1
  17. lib/minify/lib/Minify/Controller/Page.php +3 -6
  18. lib/minify/lib/Minify/ImportProcessor.php +2 -2
  19. lib/minify/lib/Minify/Packer.php +3 -3
  20. lib/minify/lib/Minify/Source.php +22 -12
  21. lib/minify/m.php +1 -0
  22. package.xml +7 -6
  23. var/minifycache/minify_1b6ee19a4c3855472c3e3dd57413cb65 +385 -0
  24. var/minifycache/minify_1b6ee19a4c3855472c3e3dd57413cb65.gz +0 -0
  25. var/minifycache/minify_676fb2e38e9cb2203204bcf556430103 +1030 -0
  26. var/minifycache/minify_676fb2e38e9cb2203204bcf556430103.gz +0 -0
  27. var/minifycache/minify_900559c432c691b50ba33f48b4909a4f +672 -0
  28. var/minifycache/minify_900559c432c691b50ba33f48b4909a4f.gz +0 -0
  29. var/minifycache/minify_95afbee78c0f49b564250d655add1ca9 +655 -0
  30. var/minifycache/minify_95afbee78c0f49b564250d655add1ca9.gz +0 -0
  31. var/minifycache/minify_9c58e36f7d68249efd03de258c77c943 +646 -0
app/code/community/Fooman/Speedster/Block/Page/Html/Head.php CHANGED
@@ -44,8 +44,8 @@ class Fooman_Speedster_Block_Page_Html_Head extends Mage_Page_Block_Html_Head
44
  $html = '';
45
  //$html = "<!--".BP."-->\n";
46
  $script = '<script type="text/javascript" src="%s" %s></script>';
47
- $stylesheet = '<link type="text/css" rel="stylesheet" href="%s" %s></link>';
48
- $alternate = '<link rel="alternate" type="%s" href="%s" %s></link>';
49
 
50
  foreach ($this->_data['items'] as $item) {
51
  if (!is_null($item['cond']) && !$this->getData($item['cond'])) {
@@ -78,6 +78,11 @@ class Fooman_Speedster_Block_Page_Html_Head extends Mage_Page_Block_Html_Head
78
  case 'rss':
79
  $lines[$if]['other'][] = sprintf($alternate, 'application/rss+xml'/*'text/xml' for IE?*/, $item['name'], $item['params']);
80
  break;
 
 
 
 
 
81
  }
82
  }
83
 
44
  $html = '';
45
  //$html = "<!--".BP."-->\n";
46
  $script = '<script type="text/javascript" src="%s" %s></script>';
47
+ $stylesheet = '<link type="text/css" rel="stylesheet" href="%s" %s />';
48
+ $alternate = '<link rel="alternate" type="%s" href="%s" %s />';
49
 
50
  foreach ($this->_data['items'] as $item) {
51
  if (!is_null($item['cond']) && !$this->getData($item['cond'])) {
78
  case 'rss':
79
  $lines[$if]['other'][] = sprintf($alternate, 'application/rss+xml'/*'text/xml' for IE?*/, $item['name'], $item['params']);
80
  break;
81
+
82
+ case 'link_rel':
83
+ $lines[$if]['other'][] = sprintf('<link%s href="%s" />', $item['params'], $item['name']);
84
+ break;
85
+
86
  }
87
  }
88
 
app/code/community/Fooman/Speedster/etc/config.xml CHANGED
@@ -2,7 +2,7 @@
2
  <config>
3
  <modules>
4
  <Fooman_Speedster>
5
- <version>1.0.4</version>
6
  <depends>
7
  <Mage_Page />
8
  <Mage_Adminhtml />
2
  <config>
3
  <modules>
4
  <Fooman_Speedster>
5
+ <version>1.0.5</version>
6
  <depends>
7
  <Mage_Page />
8
  <Mage_Adminhtml />
js/prototype/validation-4min.js CHANGED
@@ -1,742 +1,773 @@
1
- /*
2
- * Really easy field validation with Prototype
3
- * http://tetlaw.id.au/view/javascript/really-easy-field-validation
4
- * Andrew Tetlaw
5
- * Version 1.5.4.1 (2007-01-05)
6
- *
7
- * Copyright (c) 2007 Andrew Tetlaw
8
- * Permission is hereby granted, free of charge, to any person
9
- * obtaining a copy of this software and associated documentation
10
- * files (the "Software"), to deal in the Software without
11
- * restriction, including without limitation the rights to use, copy,
12
- * modify, merge, publish, distribute, sublicense, and/or sell copies
13
- * of the Software, and to permit persons to whom the Software is
14
- * furnished to do so, subject to the following conditions:
15
- *
16
- * The above copyright notice and this permission notice shall be
17
- * included in all copies or substantial portions of the Software.
18
- *
19
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
20
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
21
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
22
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
23
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
24
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
25
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
26
- * SOFTWARE.
27
- *
28
- */
29
- var Validator = Class.create();
30
-
31
- Validator.prototype = {
32
- initialize : function(className, error, test, options) {
33
- if(typeof test == 'function'){
34
- this.options = $H(options);
35
- this._test = test;
36
- } else {
37
- this.options = $H(test);
38
- this._test = function(){return true};
39
- }
40
- this.error = error || 'Validation failed.';
41
- this.className = className;
42
- },
43
- test : function(v, elm) {
44
- return (this._test(v,elm) && this.options.all(function(p){
45
- return Validator.methods[p.key] ? Validator.methods[p.key](v,elm,p.value) : true;
46
- }));
47
- }
48
- }
49
- Validator.methods = {
50
- pattern : function(v,elm,opt) {return Validation.get('IsEmpty').test(v) || opt.test(v)},
51
- minLength : function(v,elm,opt) {return v.length >= opt},
52
- maxLength : function(v,elm,opt) {return v.length <= opt},
53
- min : function(v,elm,opt) {return v >= parseFloat(opt)},
54
- max : function(v,elm,opt) {return v <= parseFloat(opt)},
55
- notOneOf : function(v,elm,opt) {return $A(opt).all(function(value) {
56
- return v != value;
57
- })},
58
- oneOf : function(v,elm,opt) {return $A(opt).any(function(value) {
59
- return v == value;
60
- })},
61
- is : function(v,elm,opt) {return v == opt},
62
- isNot : function(v,elm,opt) {return v != opt},
63
- equalToField : function(v,elm,opt) {return v == $F(opt)},
64
- notEqualToField : function(v,elm,opt) {return v != $F(opt)},
65
- include : function(v,elm,opt) {return $A(opt).all(function(value) {
66
- return Validation.get(value).test(v,elm);
67
- })}
68
- }
69
-
70
- var Validation = Class.create();
71
- Validation.defaultOptions = {
72
- onSubmit : true,
73
- stopOnFirst : false,
74
- immediate : false,
75
- focusOnError : true,
76
- useTitles : false,
77
- addClassNameToContainer: false,
78
- containerClassName: '.input-box',
79
- onFormValidate : function(result, form) {},
80
- onElementValidate : function(result, elm) {}
81
- };
82
-
83
- Validation.prototype = {
84
- initialize : function(form, options){
85
- this.form = $(form);
86
- if (!this.form) {
87
- return;
88
- }
89
- this.options = Object.extend({
90
- onSubmit : Validation.defaultOptions.onSubmit,
91
- stopOnFirst : Validation.defaultOptions.stopOnFirst,
92
- immediate : Validation.defaultOptions.immediate,
93
- focusOnError : Validation.defaultOptions.focusOnError,
94
- useTitles : Validation.defaultOptions.useTitles,
95
- onFormValidate : Validation.defaultOptions.onFormValidate,
96
- onElementValidate : Validation.defaultOptions.onElementValidate
97
- }, options || {});
98
- if(this.options.onSubmit) Event.observe(this.form,'submit',this.onSubmit.bind(this),false);
99
- if(this.options.immediate) {
100
- Form.getElements(this.form).each(function(input) { // Thanks Mike!
101
- if (input.tagName.toLowerCase() == 'select') {
102
- Event.observe(input, 'blur', this.onChange.bindAsEventListener(this));
103
- }
104
- Event.observe(input, 'change', this.onChange.bindAsEventListener(this));
105
- }, this);
106
- }
107
- },
108
- onChange : function (ev) {
109
- Validation.isOnChange = true;
110
- Validation.validate(Event.element(ev),{
111
- useTitle : this.options.useTitles,
112
- onElementValidate : this.options.onElementValidate
113
- });
114
- Validation.isOnChange = false;
115
- },
116
- onSubmit : function(ev){
117
- if(!this.validate()) Event.stop(ev);
118
- },
119
- validate : function() {
120
- var result = false;
121
- var useTitles = this.options.useTitles;
122
- var callback = this.options.onElementValidate;
123
- try {
124
- if(this.options.stopOnFirst) {
125
- result = Form.getElements(this.form).all(function(elm) { return Validation.validate(elm,{useTitle : useTitles, onElementValidate : callback}); });
126
- } else {
127
- result = Form.getElements(this.form).collect(function(elm) { return Validation.validate(elm,{useTitle : useTitles, onElementValidate : callback}); }).all();
128
- }
129
- } catch (e) {
130
-
131
- }
132
- if(!result && this.options.focusOnError) {
133
- try{
134
- Form.getElements(this.form).findAll(function(elm){return $(elm).hasClassName('validation-failed')}).first().focus()
135
- }
136
- catch(e){
137
-
138
- }
139
- }
140
- this.options.onFormValidate(result, this.form);
141
- return result;
142
- },
143
- reset : function() {
144
- Form.getElements(this.form).each(Validation.reset);
145
- }
146
- }
147
-
148
- Object.extend(Validation, {
149
- validate : function(elm, options){
150
- options = Object.extend({
151
- useTitle : false,
152
- onElementValidate : function(result, elm) {}
153
- }, options || {});
154
- elm = $(elm);
155
-
156
- var cn = $w(elm.className);
157
- return result = cn.all(function(value) {
158
- var test = Validation.test(value,elm,options.useTitle);
159
- options.onElementValidate(test, elm);
160
- return test;
161
- });
162
- },
163
- insertAdvice : function(elm, advice){
164
- var container = $(elm).up('.field-row');
165
- if(container){
166
- Element.insert(container, {after: advice});
167
- } else if (elm.up('td.value')) {
168
- elm.up('td.value').insert({bottom: advice});
169
- } else if (elm.advaiceContainer && $(elm.advaiceContainer)) {
170
- $(elm.advaiceContainer).update(advice);
171
- }
172
- else {
173
- switch (elm.type.toLowerCase()) {
174
- case 'checkbox':
175
- case 'radio':
176
- var p = elm.parentNode;
177
- if(p) {
178
- Element.insert(p, {'bottom': advice});
179
- } else {
180
- Element.insert(elm, {'after': advice});
181
- }
182
- break;
183
- default:
184
- Element.insert(elm, {'after': advice});
185
- }
186
- }
187
- },
188
- showAdvice : function(elm, advice, adviceName){
189
- if(!elm.advices){
190
- elm.advices = new Hash();
191
- }
192
- else{
193
- elm.advices.each(function(pair){
194
- this.hideAdvice(elm, pair.value);
195
- }.bind(this));
196
- }
197
- elm.advices.set(adviceName, advice);
198
- if(typeof Effect == 'undefined') {
199
- advice.style.display = 'block';
200
- } else {
201
- if(!advice._adviceAbsolutize) {
202
- new Effect.Appear(advice, {duration : 1 });
203
- } else {
204
- Position.absolutize(advice);
205
- advice.show();
206
- advice.setStyle({
207
- 'top':advice._adviceTop,
208
- 'left': advice._adviceLeft,
209
- 'width': advice._adviceWidth,
210
- 'z-index': 1000
211
- });
212
- advice.addClassName('advice-absolute');
213
- }
214
- }
215
- },
216
- hideAdvice : function(elm, advice){
217
- if(advice != null) advice.hide();
218
- },
219
- updateCallback : function(elm, status) {
220
- if (typeof elm.callbackFunction != 'undefined') {
221
- eval(elm.callbackFunction+'(\''+elm.id+'\',\''+status+'\')');
222
- }
223
- },
224
- ajaxError : function(elm, errorMsg) {
225
- var name = 'validate-ajax';
226
- var advice = Validation.getAdvice(name, elm);
227
- if (advice == null) {
228
- advice = this.createAdvice(name, elm, false, errorMsg);
229
- }
230
- this.showAdvice(elm, advice, 'validate-ajax');
231
- this.updateCallback(elm, 'failed');
232
-
233
- elm.addClassName('validation-failed');
234
- elm.addClassName('validate-ajax');
235
- if (Validation.defaultOptions.addClassNameToContainer && Validation.defaultOptions.containerClassName != '') {
236
- var container = elm.up(Validation.defaultOptions.containerClassName);
237
- if (container && this.allowContainerClassName(elm)) {
238
- container.removeClassName('validation-passed');
239
- container.addClassName('validation-error');
240
- }
241
- }
242
- },
243
- allowContainerClassName: function (elm) {
244
- if (elm.type == 'radio' || elm.type == 'checkbox') {
245
- return elm.hasClassName('change-container-classname');
246
- }
247
-
248
- return true;
249
- },
250
- test : function(name, elm, useTitle) {
251
- var v = Validation.get(name);
252
- var prop = '__advice'+name.camelize();
253
- try {
254
- if(Validation.isVisible(elm) && !v.test($F(elm), elm)) {
255
- //if(!elm[prop]) {
256
- var advice = Validation.getAdvice(name, elm);
257
- if (advice == null) {
258
- advice = this.createAdvice(name, elm, useTitle);
259
- }
260
- this.showAdvice(elm, advice, name);
261
- this.updateCallback(elm, 'failed');
262
- //}
263
- elm[prop] = 1;
264
- if (!elm.advaiceContainer) {
265
- elm.removeClassName('validation-passed');
266
- elm.addClassName('validation-failed');
267
- }
268
-
269
- if (Validation.defaultOptions.addClassNameToContainer && Validation.defaultOptions.containerClassName != '') {
270
- var container = elm.up(Validation.defaultOptions.containerClassName);
271
- if (container && this.allowContainerClassName(elm)) {
272
- container.removeClassName('validation-passed');
273
- container.addClassName('validation-error');
274
- }
275
- }
276
- return false;
277
- } else {
278
- var advice = Validation.getAdvice(name, elm);
279
- this.hideAdvice(elm, advice);
280
- this.updateCallback(elm, 'passed');
281
- elm[prop] = '';
282
- elm.removeClassName('validation-failed');
283
- elm.addClassName('validation-passed');
284
- if (Validation.defaultOptions.addClassNameToContainer && Validation.defaultOptions.containerClassName != '') {
285
- var container = elm.up(Validation.defaultOptions.containerClassName);
286
- if (container && !container.down('.validation-failed') && this.allowContainerClassName(elm)) {
287
- if (!Validation.get('IsEmpty').test(elm.value) || !this.isVisible(elm)) {
288
- container.addClassName('validation-passed');
289
- } else {
290
- container.removeClassName('validation-passed');
291
- }
292
- container.removeClassName('validation-error');
293
- }
294
- }
295
- return true;
296
- }
297
- } catch(e) {
298
- throw(e)
299
- }
300
- },
301
- isVisible : function(elm) {
302
- while(elm.tagName != 'BODY') {
303
- if(!$(elm).visible()) return false;
304
- elm = elm.parentNode;
305
- }
306
- return true;
307
- },
308
- getAdvice : function(name, elm) {
309
- return $('advice-' + name + '-' + Validation.getElmID(elm)) || $('advice-' + Validation.getElmID(elm));
310
- },
311
- createAdvice : function(name, elm, useTitle, customError) {
312
- var v = Validation.get(name);
313
- var errorMsg = useTitle ? ((elm && elm.title) ? elm.title : v.error) : v.error;
314
- if (customError) {
315
- errorMsg = customError;
316
- }
317
- try {
318
- if (Translator){
319
- errorMsg = Translator.translate(errorMsg);
320
- }
321
- }
322
- catch(e){}
323
-
324
- advice = '<div class="validation-advice" id="advice-' + name + '-' + Validation.getElmID(elm) +'" style="display:none">' + errorMsg + '</div>'
325
-
326
-
327
- Validation.insertAdvice(elm, advice);
328
- advice = Validation.getAdvice(name, elm);
329
- if($(elm).hasClassName('absolute-advice')) {
330
- var dimensions = $(elm).getDimensions();
331
- var originalPosition = Position.cumulativeOffset(elm);
332
-
333
- advice._adviceTop = (originalPosition[1] + dimensions.height) + 'px';
334
- advice._adviceLeft = (originalPosition[0]) + 'px';
335
- advice._adviceWidth = (dimensions.width) + 'px';
336
- advice._adviceAbsolutize = true;
337
- }
338
- return advice;
339
- },
340
- getElmID : function(elm) {
341
- return elm.id ? elm.id : elm.name;
342
- },
343
- reset : function(elm) {
344
- elm = $(elm);
345
- var cn = $w(elm.className);
346
- cn.each(function(value) {
347
- var prop = '__advice'+value.camelize();
348
- if(elm[prop]) {
349
- var advice = Validation.getAdvice(value, elm);
350
- if (advice) {
351
- advice.hide();
352
- }
353
- elm[prop] = '';
354
- }
355
- elm.removeClassName('validation-failed');
356
- elm.removeClassName('validation-passed');
357
- if (Validation.defaultOptions.addClassNameToContainer && Validation.defaultOptions.containerClassName != '') {
358
- var container = elm.up(Validation.defaultOptions.containerClassName);
359
- if (container) {
360
- container.removeClassName('validation-passed');
361
- container.removeClassName('validation-error');
362
- }
363
- }
364
- });
365
- },
366
- add : function(className, error, test, options) {
367
- var nv = {};
368
- nv[className] = new Validator(className, error, test, options);
369
- Object.extend(Validation.methods, nv);
370
- },
371
- addAllThese : function(validators) {
372
- var nv = {};
373
- $A(validators).each(function(value) {
374
- nv[value[0]] = new Validator(value[0], value[1], value[2], (value.length > 3 ? value[3] : {}));
375
- });
376
- Object.extend(Validation.methods, nv);
377
- },
378
- get : function(name) {
379
- return Validation.methods[name] ? Validation.methods[name] : Validation.methods['_LikeNoIDIEverSaw_'];
380
- },
381
- methods : {
382
- '_LikeNoIDIEverSaw_' : new Validator('_LikeNoIDIEverSaw_','',{})
383
- }
384
- });
385
-
386
- Validation.add('IsEmpty', '', function(v) {
387
- return (v == '' || (v == null) || (v.length == 0) || /^\s+$/.test(v)); // || /^\s+$/.test(v));
388
- });
389
-
390
- Validation.addAllThese([
391
- ['validate-select', 'Please select an option.', function(v) {
392
- return ((v != "none") && (v != null) && (v.length != 0));
393
- }],
394
- ['required-entry', 'This is a required field.', function(v) {
395
- return !Validation.get('IsEmpty').test(v);
396
- }],
397
- ['validate-number', 'Please enter a valid number in this field.', function(v) {
398
- return Validation.get('IsEmpty').test(v) || (!isNaN(parseNumber(v)) && !/^\s+$/.test(parseNumber(v)));
399
- }],
400
- ['validate-digits', 'Please use numbers only in this field. please avoid spaces or other characters such as dots or commas.', function(v) {
401
- return Validation.get('IsEmpty').test(v) || !/[^\d]/.test(v);
402
- }],
403
- ['validate-alpha', 'Please use letters only (a-z or A-Z) in this field.', function (v) {
404
- return Validation.get('IsEmpty').test(v) || /^[a-zA-Z]+$/.test(v)
405
- }],
406
- ['validate-code', 'Please use only letters (a-z), numbers (0-9) or underscore(_) in this field, first character should be a letter.', function (v) {
407
- return Validation.get('IsEmpty').test(v) || /^[a-z]+[a-z0-9_]+$/.test(v)
408
- }],
409
- ['validate-alphanum', 'Please use only letters (a-z or A-Z) or numbers (0-9) only in this field. No spaces or other characters are allowed.', function(v) {
410
- return Validation.get('IsEmpty').test(v) || /^[a-zA-Z0-9]+$/.test(v) /*!/\W/.test(v)*/
411
- }],
412
- ['validate-street', 'Please use only letters (a-z or A-Z) or numbers (0-9) or spaces and # only in this field.', function(v) {
413
- return Validation.get('IsEmpty').test(v) || /^[ \w]{3,}([A-Za-z]\.)?([ \w]*\#\d+)?(\r\n| )[ \w]{3,}/.test(v)
414
- }],
415
- ['validate-phoneStrict', 'Please enter a valid phone number. For example (123) 456-7890 or 123-456-7890.', function(v) {
416
- return Validation.get('IsEmpty').test(v) || /^(\()?\d{3}(\))?(-|\s)?\d{3}(-|\s)\d{4}$/.test(v);
417
- }],
418
- ['validate-phoneLax', 'Please enter a valid phone number. For example (123) 456-7890 or 123-456-7890.', function(v) {
419
- return Validation.get('IsEmpty').test(v) || /^((\d[-. ]?)?((\(\d{3}\))|\d{3}))?[-. ]?\d{3}[-. ]?\d{4}$/.test(v);
420
- }],
421
- ['validate-fax', 'Please enter a valid fax number. For example (123) 456-7890 or 123-456-7890.', function(v) {
422
- return Validation.get('IsEmpty').test(v) || /^(\()?\d{3}(\))?(-|\s)?\d{3}(-|\s)\d{4}$/.test(v);
423
- }],
424
- ['validate-date', 'Please enter a valid date.', function(v) {
425
- var test = new Date(v);
426
- return Validation.get('IsEmpty').test(v) || !isNaN(test);
427
- }],
428
- ['validate-email', 'Please enter a valid email address. For example johndoe@domain.com.', function (v) {
429
- return Validation.get('IsEmpty').test(v) || /\w{1,}[@][\w\-]{1,}([.]([\w\-]{1,})){1,3}$/.test(v)
430
- //return Validation.get('IsEmpty').test(v) || /^[\!\#$%\*/?|\^\{\}`~&\'\+\-=_a-z0-9][\!\#$%\*/?|\^\{\}`~&\'\+\-=_a-z0-9\.]{1,30}[\!\#$%\*/?|\^\{\}`~&\'\+\-=_a-z0-9]@([a-z0-9_-]{1,30}\.){1,5}[a-z]{2,4}$/i.test(v)
431
- //return Validation.get('IsEmpty').test(v) || /^[a-z0-9,!\#\$%&'\*\+/=\?\^_`\{\|}~-]+(\.[a-z0-9,!#\$%&'\*\+/=\?\^_`\{\|}~-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*\.([a-z]{2,})/i.test(v)
432
- }],
433
- ['validate-emailSender', 'Please use only letters (a-z or A-Z), numbers (0-9) , underscore(_) or spaces in this field.', function (v) {
434
- return Validation.get('IsEmpty').test(v) || /^[a-zA-Z0-9_\s]+$/.test(v)
435
- }],
436
- ['validate-password', 'Please enter 6 or more characters. Leading or trailing spaces will be ignored.', function(v) {
437
- var pass=v.strip(); /*strip leading and trailing spaces*/
438
- return !(pass.length>0 && pass.length < 6);
439
- }],
440
- ['validate-admin-password', 'Please enter 7 or more characters. Password should contain both numeric and alphabetic characters.', function(v) {
441
- var pass=v.strip();
442
- if (0 == pass.length) {
443
- return true;
444
- }
445
- if (!(/[a-z]/i.test(v)) || !(/[0-9]/.test(v))) {
446
- return false;
447
- }
448
- return !(pass.length < 7);
449
- }],
450
- ['validate-cpassword', 'Please make sure your passwords match.', function(v) {
451
- if ($('password')) {
452
- var pass = $('password');
453
- }
454
- else {
455
- var pass = $$('.validate-password').length ? $$('.validate-password')[0] : $$('.validate-admin-password')[0];
456
- }
457
- var conf = $('confirmation') ? $('confirmation') : $$('.validate-cpassword')[0];
458
- return (pass.value == conf.value);
459
- }],
460
- ['validate-url', 'Please enter a valid URL. http:// is required', function (v) {
461
- return Validation.get('IsEmpty').test(v) || /^(http|https|ftp):\/\/(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+)(:(\d+))?\/?/i.test(v)
462
- }],
463
- ['validate-clean-url', 'Please enter a valid URL. For example http://www.example.com or www.example.com', function (v) {
464
- return Validation.get('IsEmpty').test(v) || /^(http|https|ftp):\/\/(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+.(com|org|net|dk|at|us|tv|info|uk|co.uk|biz|se)$)(:(\d+))?\/?/i.test(v) || /^(www)((\.[A-Z0-9][A-Z0-9_-]*)+.(com|org|net|dk|at|us|tv|info|uk|co.uk|biz|se)$)(:(\d+))?\/?/i.test(v)
465
- }],
466
- ['validate-identifier', 'Please enter a valid Identifier. For example example-page, example-page.html or anotherlevel/example-page', function (v) {
467
- return Validation.get('IsEmpty').test(v) || /^[A-Z0-9][A-Z0-9_\/-]+(\.[A-Z0-9_-]+)*$/i.test(v)
468
- }],
469
- ['validate-xml-identifier', 'Please enter a valid XML-identifier. For example something_1, block5, id-4', function (v) {
470
- return Validation.get('IsEmpty').test(v) || /^[A-Z][A-Z0-9_\/-]*$/i.test(v)
471
- }],
472
- ['validate-ssn', 'Please enter a valid social security number. For example 123-45-6789.', function(v) {
473
- return Validation.get('IsEmpty').test(v) || /^\d{3}-?\d{2}-?\d{4}$/.test(v);
474
- }],
475
- ['validate-zip', 'Please enter a valid zip code. For example 90602 or 90602-1234.', function(v) {
476
- return Validation.get('IsEmpty').test(v) || /(^\d{5}$)|(^\d{5}-\d{4}$)/.test(v);
477
- }],
478
- ['validate-zip-international', 'Please enter a valid zip code.', function(v) {
479
- //return Validation.get('IsEmpty').test(v) || /(^[A-z0-9]{2,10}([\s]{0,1}|[\-]{0,1})[A-z0-9]{2,10}$)/.test(v);
480
- return true;
481
- }],
482
- ['validate-date-au', 'Please use this date format: dd/mm/yyyy. For example 17/03/2006 for the 17th of March, 2006.', function(v) {
483
- if(Validation.get('IsEmpty').test(v)) return true;
484
- var regex = /^(\d{2})\/(\d{2})\/(\d{4})$/;
485
- if(!regex.test(v)) return false;
486
- var d = new Date(v.replace(regex, '$2/$1/$3'));
487
- return ( parseInt(RegExp.$2, 10) == (1+d.getMonth()) ) &&
488
- (parseInt(RegExp.$1, 10) == d.getDate()) &&
489
- (parseInt(RegExp.$3, 10) == d.getFullYear() );
490
- }],
491
- ['validate-currency-dollar', 'Please enter a valid $ amount. For example $100.00.', function(v) {
492
- // [$]1[##][,###]+[.##]
493
- // [$]1###+[.##]
494
- // [$]0.##
495
- // [$].##
496
- return Validation.get('IsEmpty').test(v) || /^\$?\-?([1-9]{1}[0-9]{0,2}(\,[0-9]{3})*(\.[0-9]{0,2})?|[1-9]{1}\d*(\.[0-9]{0,2})?|0(\.[0-9]{0,2})?|(\.[0-9]{1,2})?)$/.test(v)
497
- }],
498
- ['validate-one-required', 'Please select one of the above options.', function (v,elm) {
499
- var p = elm.parentNode;
500
- var options = p.getElementsByTagName('INPUT');
501
- return $A(options).any(function(elm) {
502
- return $F(elm);
503
- });
504
- }],
505
- ['validate-one-required-by-name', 'Please select one of the options.', function (v,elm) {
506
- var inputs = $$('input[name="' + elm.name.replace(/([\\"])/g, '\\$1') + '"]');
507
-
508
- var error = 1;
509
- for(var i=0;i<inputs.length;i++) {
510
- if((inputs[i].type == 'checkbox' || inputs[i].type == 'radio') && inputs[i].checked == true) {
511
- error = 0;
512
- }
513
-
514
- if(Validation.isOnChange && (inputs[i].type == 'checkbox' || inputs[i].type == 'radio')) {
515
- Validation.reset(inputs[i]);
516
- }
517
- }
518
-
519
- if( error == 0 ) {
520
- return true;
521
- } else {
522
- return false;
523
- }
524
- }],
525
- ['validate-not-negative-number', 'Please enter a valid number in this field.', function(v) {
526
- v = parseNumber(v);
527
- return (!isNaN(v) && v>=0);
528
- }],
529
- ['validate-state', 'Please select State/Province.', function(v) {
530
- return (v!=0 || v == '');
531
- }],
532
-
533
- ['validate-new-password', 'Please enter 6 or more characters. Leading or trailing spaces will be ignored.', function(v) {
534
- if (!Validation.get('validate-password').test(v)) return false;
535
- if (Validation.get('IsEmpty').test(v) && v != '') return false;
536
- return true;
537
- }],
538
- ['validate-greater-than-zero', 'Please enter a number greater than 0 in this field.', function(v) {
539
- if(v.length)
540
- return parseFloat(v) > 0;
541
- else
542
- return true;
543
- }],
544
- ['validate-zero-or-greater', 'Please enter a number 0 or greater in this field.', function(v) {
545
- if(v.length)
546
- return parseFloat(v) >= 0;
547
- else
548
- return true;
549
- }],
550
- ['validate-cc-number', 'Please enter a valid credit card number.', function(v, elm) {
551
- // remove non-numerics
552
- var ccTypeContainer = $(elm.id.substr(0,elm.id.indexOf('_cc_number')) + '_cc_type');
553
- if (ccTypeContainer && typeof Validation.creditCartTypes.get(ccTypeContainer.value) != 'undefined'
554
- && Validation.creditCartTypes.get(ccTypeContainer.value)[2] == false) {
555
- if (!Validation.get('IsEmpty').test(v) && Validation.get('validate-digits').test(v)) {
556
- return true;
557
- } else {
558
- return false;
559
- }
560
- }
561
- return validateCreditCard(v);
562
- }],
563
- ['validate-cc-type', 'Credit card number doesn\'t match credit card type', function(v, elm) {
564
- // remove credit card number delimiters such as "-" and space
565
- elm.value = removeDelimiters(elm.value);
566
- v = removeDelimiters(v);
567
-
568
- var ccTypeContainer = $(elm.id.substr(0,elm.id.indexOf('_cc_number')) + '_cc_type');
569
- if (!ccTypeContainer) {
570
- return true;
571
- }
572
- var ccType = ccTypeContainer.value;
573
-
574
- if (typeof Validation.creditCartTypes.get(ccType) == 'undefined') {
575
- return false;
576
- }
577
-
578
- // Other card type or switch or solo card
579
- if (Validation.creditCartTypes.get(ccType)[0]==false) {
580
- return true;
581
- }
582
-
583
- // Matched credit card type
584
- var ccMatchedType = '';
585
-
586
- Validation.creditCartTypes.each(function (pair) {
587
- if (pair.value[0] && v.match(pair.value[0])) {
588
- ccMatchedType = pair.key;
589
- throw $break;
590
- }
591
- });
592
-
593
- if(ccMatchedType != ccType) {
594
- return false;
595
- }
596
-
597
- if (ccTypeContainer.hasClassName('validation-failed') && Validation.isOnChange) {
598
- Validation.validate(ccTypeContainer);
599
- }
600
-
601
- return true;
602
- }],
603
- ['validate-cc-type-select', 'Card type doesn\'t match credit card number', function(v, elm) {
604
- var ccNumberContainer = $(elm.id.substr(0,elm.id.indexOf('_cc_type')) + '_cc_number');
605
- if (Validation.isOnChange && Validation.get('IsEmpty').test(ccNumberContainer.value)) {
606
- return true;
607
- }
608
- if (Validation.get('validate-cc-type').test(ccNumberContainer.value, ccNumberContainer)) {
609
- Validation.validate(ccNumberContainer);
610
- }
611
- return Validation.get('validate-cc-type').test(ccNumberContainer.value, ccNumberContainer);
612
- }],
613
- ['validate-cc-exp', 'Incorrect credit card expiration date', function(v, elm) {
614
- var ccExpMonth = v;
615
- var ccExpYear = $('ccsave_expiration_yr').value;
616
- var currentTime = new Date();
617
- var currentMonth = currentTime.getMonth() + 1;
618
- var currentYear = currentTime.getFullYear();
619
- if (ccExpMonth < currentMonth && ccExpYear == currentYear) {
620
- return false;
621
- }
622
- return true;
623
- }],
624
- ['validate-cc-cvn', 'Please enter a valid credit card verification number.', function(v, elm) {
625
- var ccTypeContainer = $(elm.id.substr(0,elm.id.indexOf('_cc_cid')) + '_cc_type');
626
- if (!ccTypeContainer) {
627
- return true;
628
- }
629
- var ccType = ccTypeContainer.value;
630
-
631
- if (typeof Validation.creditCartTypes.get(ccType) == 'undefined') {
632
- return false;
633
- }
634
-
635
- var re = Validation.creditCartTypes.get(ccType)[1];
636
-
637
- if (v.match(re)) {
638
- return true;
639
- }
640
-
641
- return false;
642
- }],
643
- ['validate-ajax', '', function(v, elm) { return true; }],
644
- ['validate-data', 'Please use only letters (a-z or A-Z), numbers (0-9) or underscore(_) in this field, first character should be a letter.', function (v) {
645
- if(v != '' && v) {
646
- return /^[A-Za-z]+[A-Za-z0-9_]+$/.test(v);
647
- }
648
- return true;
649
- }],
650
- ['validate-css-length', 'Please input a valid CSS-length. For example 100px or 77pt or 20em or .5ex or 50%', function (v) {
651
- if (v != '' && v) {
652
- return /^[0-9\.]+(px|pt|em|ex|%)?$/.test(v) && (!(/\..*\./.test(v))) && !(/\.$/.test(v));
653
- }
654
- return true;
655
- }],
656
- ['validate-length', 'Maximum length exceeded.', function (v, elm) {
657
- var re = new RegExp(/^maximum-length-[0-9]+$/);
658
- var result = true;
659
- $w(elm.className).each(function(name, index) {
660
- if (name.match(re) && result) {
661
- var length = name.split('-')[2];
662
- result = (v.length <= length);
663
- }
664
- });
665
- return result;
666
- }]
667
- ]);
668
-
669
-
670
- // Credit Card Validation Javascript
671
- // copyright 12th May 2003, by Stephen Chapman, Felgall Pty Ltd
672
-
673
- // You have permission to copy and use this javascript provided that
674
- // the content of the script is not changed in any way.
675
-
676
- function validateCreditCard(s) {
677
- // remove non-numerics
678
- var v = "0123456789";
679
- var w = "";
680
- for (i=0; i < s.length; i++) {
681
- x = s.charAt(i);
682
- if (v.indexOf(x,0) != -1)
683
- w += x;
684
- }
685
- // validate number
686
- j = w.length / 2;
687
- k = Math.floor(j);
688
- m = Math.ceil(j) - k;
689
- c = 0;
690
- for (i=0; i<k; i++) {
691
- a = w.charAt(i*2+m) * 2;
692
- c += a > 9 ? Math.floor(a/10 + a%10) : a;
693
- }
694
- for (i=0; i<k+m; i++) c += w.charAt(i*2+1-m) * 1;
695
- return (c%10 == 0);
696
- }
697
-
698
- function removeDelimiters (v) {
699
- v = v.replace(/\s/g, '');
700
- v = v.replace(/\-/g, '');
701
- return v;
702
- }
703
-
704
- function parseNumber(v)
705
- {
706
- if (typeof v != 'string') {
707
- return parseFloat(v);
708
- }
709
-
710
- var isDot = v.indexOf('.');
711
- var isComa = v.indexOf(',');
712
-
713
- if (isDot != -1 && isComa != -1) {
714
- if (isComa > isDot) {
715
- v = v.replace('.', '').replace(',', '.');
716
- }
717
- else {
718
- v = v.replace(',', '');
719
- }
720
- }
721
- else if (isComa != -1) {
722
- v = v.replace(',', '.');
723
- }
724
-
725
- return parseFloat(v);
726
- }
727
-
728
- /**
729
- * Hash with credit card types wich can be simply extended in payment modules
730
- * 0 - regexp for card number
731
- * 1 - regexp for cvn
732
- * 2 - check or not credit card number trough Luhn algorithm by
733
- * function validateCreditCard wich you can find above in this file
734
- */
735
- Validation.creditCartTypes = $H({
736
- 'VI': [new RegExp('^4[0-9]{12}([0-9]{3})?$'), new RegExp('^[0-9]{3}$'), true],
737
- 'MC': [new RegExp('^5[1-5][0-9]{14}$'), new RegExp('^[0-9]{3}$'), true],
738
- 'AE': [new RegExp('^3[47][0-9]{13}$'), new RegExp('^[0-9]{4}$'), true],
739
- 'DI': [new RegExp('^6011[0-9]{12}$'), new RegExp('^[0-9]{3}$'), true],
740
- 'SS': [new RegExp('^((6759[0-9]{12})|(49[013][1356][0-9]{13})|(633[34][0-9]{12})|(633110[0-9]{10})|(564182[0-9]{10}))([0-9]{2,3})?$'), new RegExp('^([0-9]{3}|[0-9]{4})?$'), true],
741
- 'OT': [false, new RegExp('^([0-9]{3}|[0-9]{4})?$'), false]
742
- });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * Really easy field validation with Prototype
3
+ * http://tetlaw.id.au/view/javascript/really-easy-field-validation
4
+ * Andrew Tetlaw
5
+ * Version 1.5.4.1 (2007-01-05)
6
+ *
7
+ * Copyright (c) 2007 Andrew Tetlaw
8
+ * Permission is hereby granted, free of charge, to any person
9
+ * obtaining a copy of this software and associated documentation
10
+ * files (the "Software"), to deal in the Software without
11
+ * restriction, including without limitation the rights to use, copy,
12
+ * modify, merge, publish, distribute, sublicense, and/or sell copies
13
+ * of the Software, and to permit persons to whom the Software is
14
+ * furnished to do so, subject to the following conditions:
15
+ *
16
+ * The above copyright notice and this permission notice shall be
17
+ * included in all copies or substantial portions of the Software.
18
+ *
19
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
20
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
21
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
22
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
23
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
24
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
25
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
26
+ * SOFTWARE.
27
+ *
28
+ */
29
+ var Validator = Class.create();
30
+
31
+ Validator.prototype = {
32
+ initialize : function(className, error, test, options) {
33
+ if(typeof test == 'function'){
34
+ this.options = $H(options);
35
+ this._test = test;
36
+ } else {
37
+ this.options = $H(test);
38
+ this._test = function(){return true};
39
+ }
40
+ this.error = error || 'Validation failed.';
41
+ this.className = className;
42
+ },
43
+ test : function(v, elm) {
44
+ return (this._test(v,elm) && this.options.all(function(p){
45
+ return Validator.methods[p.key] ? Validator.methods[p.key](v,elm,p.value) : true;
46
+ }));
47
+ }
48
+ }
49
+ Validator.methods = {
50
+ pattern : function(v,elm,opt) {return Validation.get('IsEmpty').test(v) || opt.test(v)},
51
+ minLength : function(v,elm,opt) {return v.length >= opt},
52
+ maxLength : function(v,elm,opt) {return v.length <= opt},
53
+ min : function(v,elm,opt) {return v >= parseFloat(opt)},
54
+ max : function(v,elm,opt) {return v <= parseFloat(opt)},
55
+ notOneOf : function(v,elm,opt) {return $A(opt).all(function(value) {
56
+ return v != value;
57
+ })},
58
+ oneOf : function(v,elm,opt) {return $A(opt).any(function(value) {
59
+ return v == value;
60
+ })},
61
+ is : function(v,elm,opt) {return v == opt},
62
+ isNot : function(v,elm,opt) {return v != opt},
63
+ equalToField : function(v,elm,opt) {return v == $F(opt)},
64
+ notEqualToField : function(v,elm,opt) {return v != $F(opt)},
65
+ include : function(v,elm,opt) {return $A(opt).all(function(value) {
66
+ return Validation.get(value).test(v,elm);
67
+ })}
68
+ }
69
+
70
+ var Validation = Class.create();
71
+ Validation.defaultOptions = {
72
+ onSubmit : true,
73
+ stopOnFirst : false,
74
+ immediate : false,
75
+ focusOnError : true,
76
+ useTitles : false,
77
+ addClassNameToContainer: false,
78
+ containerClassName: '.input-box',
79
+ onFormValidate : function(result, form) {},
80
+ onElementValidate : function(result, elm) {}
81
+ };
82
+
83
+ Validation.prototype = {
84
+ initialize : function(form, options){
85
+ this.form = $(form);
86
+ if (!this.form) {
87
+ return;
88
+ }
89
+ this.options = Object.extend({
90
+ onSubmit : Validation.defaultOptions.onSubmit,
91
+ stopOnFirst : Validation.defaultOptions.stopOnFirst,
92
+ immediate : Validation.defaultOptions.immediate,
93
+ focusOnError : Validation.defaultOptions.focusOnError,
94
+ useTitles : Validation.defaultOptions.useTitles,
95
+ onFormValidate : Validation.defaultOptions.onFormValidate,
96
+ onElementValidate : Validation.defaultOptions.onElementValidate
97
+ }, options || {});
98
+ if(this.options.onSubmit) Event.observe(this.form,'submit',this.onSubmit.bind(this),false);
99
+ if(this.options.immediate) {
100
+ Form.getElements(this.form).each(function(input) { // Thanks Mike!
101
+ if (input.tagName.toLowerCase() == 'select') {
102
+ Event.observe(input, 'blur', this.onChange.bindAsEventListener(this));
103
+ }
104
+ if (input.type.toLowerCase() == 'radio' || input.type.toLowerCase() == 'checkbox') {
105
+ Event.observe(input, 'click', this.onChange.bindAsEventListener(this));
106
+ } else {
107
+ Event.observe(input, 'change', this.onChange.bindAsEventListener(this));
108
+ }
109
+ }, this);
110
+ }
111
+ },
112
+ onChange : function (ev) {
113
+ Validation.isOnChange = true;
114
+ Validation.validate(Event.element(ev),{
115
+ useTitle : this.options.useTitles,
116
+ onElementValidate : this.options.onElementValidate
117
+ });
118
+ Validation.isOnChange = false;
119
+ },
120
+ onSubmit : function(ev){
121
+ if(!this.validate()) Event.stop(ev);
122
+ },
123
+ validate : function() {
124
+ var result = false;
125
+ var useTitles = this.options.useTitles;
126
+ var callback = this.options.onElementValidate;
127
+ try {
128
+ if(this.options.stopOnFirst) {
129
+ result = Form.getElements(this.form).all(function(elm) {
130
+ if (elm.hasClassName('local-validation') && !this.isElementInForm(elm, this.form)) {
131
+ return true;
132
+ }
133
+ return Validation.validate(elm,{useTitle : useTitles, onElementValidate : callback});
134
+ }, this);
135
+ } else {
136
+ result = Form.getElements(this.form).collect(function(elm) {
137
+ if (elm.hasClassName('local-validation') && !this.isElementInForm(elm, this.form)) {
138
+ return true;
139
+ }
140
+ return Validation.validate(elm,{useTitle : useTitles, onElementValidate : callback});
141
+ }, this).all();
142
+ }
143
+ } catch (e) {
144
+
145
+ }
146
+ if(!result && this.options.focusOnError) {
147
+ try{
148
+ Form.getElements(this.form).findAll(function(elm){return $(elm).hasClassName('validation-failed')}).first().focus()
149
+ }
150
+ catch(e){
151
+
152
+ }
153
+ }
154
+ this.options.onFormValidate(result, this.form);
155
+ return result;
156
+ },
157
+ reset : function() {
158
+ Form.getElements(this.form).each(Validation.reset);
159
+ },
160
+ isElementInForm : function(elm, form) {
161
+ var domForm = elm.up('form');
162
+ if (domForm == form) {
163
+ return true;
164
+ }
165
+ return false;
166
+ }
167
+ }
168
+
169
+ Object.extend(Validation, {
170
+ validate : function(elm, options){
171
+ options = Object.extend({
172
+ useTitle : false,
173
+ onElementValidate : function(result, elm) {}
174
+ }, options || {});
175
+ elm = $(elm);
176
+
177
+ var cn = $w(elm.className);
178
+ return result = cn.all(function(value) {
179
+ var test = Validation.test(value,elm,options.useTitle);
180
+ options.onElementValidate(test, elm);
181
+ return test;
182
+ });
183
+ },
184
+ insertAdvice : function(elm, advice){
185
+ var container = $(elm).up('.field-row');
186
+ if(container){
187
+ Element.insert(container, {after: advice});
188
+ } else if (elm.up('td.value')) {
189
+ elm.up('td.value').insert({bottom: advice});
190
+ } else if (elm.advaiceContainer && $(elm.advaiceContainer)) {
191
+ $(elm.advaiceContainer).update(advice);
192
+ }
193
+ else {
194
+ switch (elm.type.toLowerCase()) {
195
+ case 'checkbox':
196
+ case 'radio':
197
+ var p = elm.parentNode;
198
+ if(p) {
199
+ Element.insert(p, {'bottom': advice});
200
+ } else {
201
+ Element.insert(elm, {'after': advice});
202
+ }
203
+ break;
204
+ default:
205
+ Element.insert(elm, {'after': advice});
206
+ }
207
+ }
208
+ },
209
+ showAdvice : function(elm, advice, adviceName){
210
+ if(!elm.advices){
211
+ elm.advices = new Hash();
212
+ }
213
+ else{
214
+ elm.advices.each(function(pair){
215
+ this.hideAdvice(elm, pair.value);
216
+ }.bind(this));
217
+ }
218
+ elm.advices.set(adviceName, advice);
219
+ if(typeof Effect == 'undefined') {
220
+ advice.style.display = 'block';
221
+ } else {
222
+ if(!advice._adviceAbsolutize) {
223
+ new Effect.Appear(advice, {duration : 1 });
224
+ } else {
225
+ Position.absolutize(advice);
226
+ advice.show();
227
+ advice.setStyle({
228
+ 'top':advice._adviceTop,
229
+ 'left': advice._adviceLeft,
230
+ 'width': advice._adviceWidth,
231
+ 'z-index': 1000
232
+ });
233
+ advice.addClassName('advice-absolute');
234
+ }
235
+ }
236
+ },
237
+ hideAdvice : function(elm, advice){
238
+ if(advice != null) advice.hide();
239
+ },
240
+ updateCallback : function(elm, status) {
241
+ if (typeof elm.callbackFunction != 'undefined') {
242
+ eval(elm.callbackFunction+'(\''+elm.id+'\',\''+status+'\')');
243
+ }
244
+ },
245
+ ajaxError : function(elm, errorMsg) {
246
+ var name = 'validate-ajax';
247
+ var advice = Validation.getAdvice(name, elm);
248
+ if (advice == null) {
249
+ advice = this.createAdvice(name, elm, false, errorMsg);
250
+ }
251
+ this.showAdvice(elm, advice, 'validate-ajax');
252
+ this.updateCallback(elm, 'failed');
253
+
254
+ elm.addClassName('validation-failed');
255
+ elm.addClassName('validate-ajax');
256
+ if (Validation.defaultOptions.addClassNameToContainer && Validation.defaultOptions.containerClassName != '') {
257
+ var container = elm.up(Validation.defaultOptions.containerClassName);
258
+ if (container && this.allowContainerClassName(elm)) {
259
+ container.removeClassName('validation-passed');
260
+ container.addClassName('validation-error');
261
+ }
262
+ }
263
+ },
264
+ allowContainerClassName: function (elm) {
265
+ if (elm.type == 'radio' || elm.type == 'checkbox') {
266
+ return elm.hasClassName('change-container-classname');
267
+ }
268
+
269
+ return true;
270
+ },
271
+ test : function(name, elm, useTitle) {
272
+ var v = Validation.get(name);
273
+ var prop = '__advice'+name.camelize();
274
+ try {
275
+ if(Validation.isVisible(elm) && !v.test($F(elm), elm)) {
276
+ //if(!elm[prop]) {
277
+ var advice = Validation.getAdvice(name, elm);
278
+ if (advice == null) {
279
+ advice = this.createAdvice(name, elm, useTitle);
280
+ }
281
+ this.showAdvice(elm, advice, name);
282
+ this.updateCallback(elm, 'failed');
283
+ //}
284
+ elm[prop] = 1;
285
+ if (!elm.advaiceContainer) {
286
+ elm.removeClassName('validation-passed');
287
+ elm.addClassName('validation-failed');
288
+ }
289
+
290
+ if (Validation.defaultOptions.addClassNameToContainer && Validation.defaultOptions.containerClassName != '') {
291
+ var container = elm.up(Validation.defaultOptions.containerClassName);
292
+ if (container && this.allowContainerClassName(elm)) {
293
+ container.removeClassName('validation-passed');
294
+ container.addClassName('validation-error');
295
+ }
296
+ }
297
+ return false;
298
+ } else {
299
+ var advice = Validation.getAdvice(name, elm);
300
+ this.hideAdvice(elm, advice);
301
+ this.updateCallback(elm, 'passed');
302
+ elm[prop] = '';
303
+ elm.removeClassName('validation-failed');
304
+ elm.addClassName('validation-passed');
305
+ if (Validation.defaultOptions.addClassNameToContainer && Validation.defaultOptions.containerClassName != '') {
306
+ var container = elm.up(Validation.defaultOptions.containerClassName);
307
+ if (container && !container.down('.validation-failed') && this.allowContainerClassName(elm)) {
308
+ if (!Validation.get('IsEmpty').test(elm.value) || !this.isVisible(elm)) {
309
+ container.addClassName('validation-passed');
310
+ } else {
311
+ container.removeClassName('validation-passed');
312
+ }
313
+ container.removeClassName('validation-error');
314
+ }
315
+ }
316
+ return true;
317
+ }
318
+ } catch(e) {
319
+ throw(e)
320
+ }
321
+ },
322
+ isVisible : function(elm) {
323
+ while(elm.tagName != 'BODY') {
324
+ if(!$(elm).visible()) return false;
325
+ elm = elm.parentNode;
326
+ }
327
+ return true;
328
+ },
329
+ getAdvice : function(name, elm) {
330
+ return $('advice-' + name + '-' + Validation.getElmID(elm)) || $('advice-' + Validation.getElmID(elm));
331
+ },
332
+ createAdvice : function(name, elm, useTitle, customError) {
333
+ var v = Validation.get(name);
334
+ var errorMsg = useTitle ? ((elm && elm.title) ? elm.title : v.error) : v.error;
335
+ if (customError) {
336
+ errorMsg = customError;
337
+ }
338
+ try {
339
+ if (Translator){
340
+ errorMsg = Translator.translate(errorMsg);
341
+ }
342
+ }
343
+ catch(e){}
344
+
345
+ advice = '<div class="validation-advice" id="advice-' + name + '-' + Validation.getElmID(elm) +'" style="display:none">' + errorMsg + '</div>'
346
+
347
+
348
+ Validation.insertAdvice(elm, advice);
349
+ advice = Validation.getAdvice(name, elm);
350
+ if($(elm).hasClassName('absolute-advice')) {
351
+ var dimensions = $(elm).getDimensions();
352
+ var originalPosition = Position.cumulativeOffset(elm);
353
+
354
+ advice._adviceTop = (originalPosition[1] + dimensions.height) + 'px';
355
+ advice._adviceLeft = (originalPosition[0]) + 'px';
356
+ advice._adviceWidth = (dimensions.width) + 'px';
357
+ advice._adviceAbsolutize = true;
358
+ }
359
+ return advice;
360
+ },
361
+ getElmID : function(elm) {
362
+ return elm.id ? elm.id : elm.name;
363
+ },
364
+ reset : function(elm) {
365
+ elm = $(elm);
366
+ var cn = $w(elm.className);
367
+ cn.each(function(value) {
368
+ var prop = '__advice'+value.camelize();
369
+ if(elm[prop]) {
370
+ var advice = Validation.getAdvice(value, elm);
371
+ if (advice) {
372
+ advice.hide();
373
+ }
374
+ elm[prop] = '';
375
+ }
376
+ elm.removeClassName('validation-failed');
377
+ elm.removeClassName('validation-passed');
378
+ if (Validation.defaultOptions.addClassNameToContainer && Validation.defaultOptions.containerClassName != '') {
379
+ var container = elm.up(Validation.defaultOptions.containerClassName);
380
+ if (container) {
381
+ container.removeClassName('validation-passed');
382
+ container.removeClassName('validation-error');
383
+ }
384
+ }
385
+ });
386
+ },
387
+ add : function(className, error, test, options) {
388
+ var nv = {};
389
+ nv[className] = new Validator(className, error, test, options);
390
+ Object.extend(Validation.methods, nv);
391
+ },
392
+ addAllThese : function(validators) {
393
+ var nv = {};
394
+ $A(validators).each(function(value) {
395
+ nv[value[0]] = new Validator(value[0], value[1], value[2], (value.length > 3 ? value[3] : {}));
396
+ });
397
+ Object.extend(Validation.methods, nv);
398
+ },
399
+ get : function(name) {
400
+ return Validation.methods[name] ? Validation.methods[name] : Validation.methods['_LikeNoIDIEverSaw_'];
401
+ },
402
+ methods : {
403
+ '_LikeNoIDIEverSaw_' : new Validator('_LikeNoIDIEverSaw_','',{})
404
+ }
405
+ });
406
+
407
+ Validation.add('IsEmpty', '', function(v) {
408
+ return (v == '' || (v == null) || (v.length == 0) || /^\s+$/.test(v)); // || /^\s+$/.test(v));
409
+ });
410
+
411
+ Validation.addAllThese([
412
+ ['validate-select', 'Please select an option.', function(v) {
413
+ return ((v != "none") && (v != null) && (v.length != 0));
414
+ }],
415
+ ['required-entry', 'This is a required field.', function(v) {
416
+ return !Validation.get('IsEmpty').test(v);
417
+ }],
418
+ ['validate-number', 'Please enter a valid number in this field.', function(v) {
419
+ return Validation.get('IsEmpty').test(v) || (!isNaN(parseNumber(v)) && !/^\s+$/.test(parseNumber(v)));
420
+ }],
421
+ ['validate-digits', 'Please use numbers only in this field. please avoid spaces or other characters such as dots or commas.', function(v) {
422
+ return Validation.get('IsEmpty').test(v) || !/[^\d]/.test(v);
423
+ }],
424
+ ['validate-alpha', 'Please use letters only (a-z or A-Z) in this field.', function (v) {
425
+ return Validation.get('IsEmpty').test(v) || /^[a-zA-Z]+$/.test(v)
426
+ }],
427
+ ['validate-code', 'Please use only letters (a-z), numbers (0-9) or underscore(_) in this field, first character should be a letter.', function (v) {
428
+ return Validation.get('IsEmpty').test(v) || /^[a-z]+[a-z0-9_]+$/.test(v)
429
+ }],
430
+ ['validate-alphanum', 'Please use only letters (a-z or A-Z) or numbers (0-9) only in this field. No spaces or other characters are allowed.', function(v) {
431
+ return Validation.get('IsEmpty').test(v) || /^[a-zA-Z0-9]+$/.test(v) /*!/\W/.test(v)*/
432
+ }],
433
+ ['validate-street', 'Please use only letters (a-z or A-Z) or numbers (0-9) or spaces and # only in this field.', function(v) {
434
+ return Validation.get('IsEmpty').test(v) || /^[ \w]{3,}([A-Za-z]\.)?([ \w]*\#\d+)?(\r\n| )[ \w]{3,}/.test(v)
435
+ }],
436
+ ['validate-phoneStrict', 'Please enter a valid phone number. For example (123) 456-7890 or 123-456-7890.', function(v) {
437
+ return Validation.get('IsEmpty').test(v) || /^(\()?\d{3}(\))?(-|\s)?\d{3}(-|\s)\d{4}$/.test(v);
438
+ }],
439
+ ['validate-phoneLax', 'Please enter a valid phone number. For example (123) 456-7890 or 123-456-7890.', function(v) {
440
+ return Validation.get('IsEmpty').test(v) || /^((\d[-. ]?)?((\(\d{3}\))|\d{3}))?[-. ]?\d{3}[-. ]?\d{4}$/.test(v);
441
+ }],
442
+ ['validate-fax', 'Please enter a valid fax number. For example (123) 456-7890 or 123-456-7890.', function(v) {
443
+ return Validation.get('IsEmpty').test(v) || /^(\()?\d{3}(\))?(-|\s)?\d{3}(-|\s)\d{4}$/.test(v);
444
+ }],
445
+ ['validate-date', 'Please enter a valid date.', function(v) {
446
+ var test = new Date(v);
447
+ return Validation.get('IsEmpty').test(v) || !isNaN(test);
448
+ }],
449
+ ['validate-email', 'Please enter a valid email address. For example johndoe@domain.com.', function (v) {
450
+ //return Validation.get('IsEmpty').test(v) || /\w{1,}[@][\w\-]{1,}([.]([\w\-]{1,})){1,3}$/.test(v)
451
+ //return Validation.get('IsEmpty').test(v) || /^[\!\#$%\*/?|\^\{\}`~&\'\+\-=_a-z0-9][\!\#$%\*/?|\^\{\}`~&\'\+\-=_a-z0-9\.]{1,30}[\!\#$%\*/?|\^\{\}`~&\'\+\-=_a-z0-9]@([a-z0-9_-]{1,30}\.){1,5}[a-z]{2,4}$/i.test(v)
452
+ return Validation.get('IsEmpty').test(v) || /^[a-z0-9,!\#\$%&'\*\+\/=\?\^_`\{\|\}~-]+(\.[a-z0-9,!\#\$%&'\*\+\/=\?\^_`\{\|\}~-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*\.([a-z]{2,})/i.test(v)
453
+ }],
454
+ ['validate-emailSender', 'Please use only visible characters and spaces.', function (v) {
455
+ return Validation.get('IsEmpty').test(v) || /^[\S ]+$/.test(v)
456
+ }],
457
+ ['validate-password', 'Please enter 6 or more characters. Leading or trailing spaces will be ignored.', function(v) {
458
+ var pass=v.strip(); /*strip leading and trailing spaces*/
459
+ return !(pass.length>0 && pass.length < 6);
460
+ }],
461
+ ['validate-admin-password', 'Please enter 7 or more characters. Password should contain both numeric and alphabetic characters.', function(v) {
462
+ var pass=v.strip();
463
+ if (0 == pass.length) {
464
+ return true;
465
+ }
466
+ if (!(/[a-z]/i.test(v)) || !(/[0-9]/.test(v))) {
467
+ return false;
468
+ }
469
+ return !(pass.length < 7);
470
+ }],
471
+ ['validate-cpassword', 'Please make sure your passwords match.', function(v) {
472
+ var conf = $('confirmation') ? $('confirmation') : $$('.validate-cpassword')[0];
473
+ var pass = false;
474
+ if ($('password')) {
475
+ pass = $('password');
476
+ }
477
+ var passwordElements = $$('.validate-password');
478
+ for (var i = 0; i < passwordElements.size(); i++) {
479
+ var passwordElement = passwordElements[i];
480
+ if (passwordElement.up('form').id == conf.up('form').id) {
481
+ pass = passwordElement;
482
+ }
483
+ }
484
+ if ($$('.validate-admin-password').size()) {
485
+ pass = $$('.validate-admin-password')[0];
486
+ }
487
+ return (pass.value == conf.value);
488
+ }],
489
+ ['validate-url', 'Please enter a valid URL. http:// is required', function (v) {
490
+ return Validation.get('IsEmpty').test(v) || /^(http|https|ftp):\/\/(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+)(:(\d+))?\/?/i.test(v)
491
+ }],
492
+ ['validate-clean-url', 'Please enter a valid URL. For example http://www.example.com or www.example.com', function (v) {
493
+ return Validation.get('IsEmpty').test(v) || /^(http|https|ftp):\/\/(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+.(com|org|net|dk|at|us|tv|info|uk|co.uk|biz|se)$)(:(\d+))?\/?/i.test(v) || /^(www)((\.[A-Z0-9][A-Z0-9_-]*)+.(com|org|net|dk|at|us|tv|info|uk|co.uk|biz|se)$)(:(\d+))?\/?/i.test(v)
494
+ }],
495
+ ['validate-identifier', 'Please enter a valid URL Key. For example "example-page", "example-page.html" or "anotherlevel/example-page"', function (v) {
496
+ return Validation.get('IsEmpty').test(v) || /^[A-Z0-9][A-Z0-9_\/-]+(\.[A-Z0-9_-]+)*$/i.test(v)
497
+ }],
498
+ ['validate-xml-identifier', 'Please enter a valid XML-identifier. For example something_1, block5, id-4', function (v) {
499
+ return Validation.get('IsEmpty').test(v) || /^[A-Z][A-Z0-9_\/-]*$/i.test(v)
500
+ }],
501
+ ['validate-ssn', 'Please enter a valid social security number. For example 123-45-6789.', function(v) {
502
+ return Validation.get('IsEmpty').test(v) || /^\d{3}-?\d{2}-?\d{4}$/.test(v);
503
+ }],
504
+ ['validate-zip', 'Please enter a valid zip code. For example 90602 or 90602-1234.', function(v) {
505
+ return Validation.get('IsEmpty').test(v) || /(^\d{5}$)|(^\d{5}-\d{4}$)/.test(v);
506
+ }],
507
+ ['validate-zip-international', 'Please enter a valid zip code.', function(v) {
508
+ //return Validation.get('IsEmpty').test(v) || /(^[A-z0-9]{2,10}([\s]{0,1}|[\-]{0,1})[A-z0-9]{2,10}$)/.test(v);
509
+ return true;
510
+ }],
511
+ ['validate-date-au', 'Please use this date format: dd/mm/yyyy. For example 17/03/2006 for the 17th of March, 2006.', function(v) {
512
+ if(Validation.get('IsEmpty').test(v)) return true;
513
+ var regex = /^(\d{2})\/(\d{2})\/(\d{4})$/;
514
+ if(!regex.test(v)) return false;
515
+ var d = new Date(v.replace(regex, '$2/$1/$3'));
516
+ return ( parseInt(RegExp.$2, 10) == (1+d.getMonth()) ) &&
517
+ (parseInt(RegExp.$1, 10) == d.getDate()) &&
518
+ (parseInt(RegExp.$3, 10) == d.getFullYear() );
519
+ }],
520
+ ['validate-currency-dollar', 'Please enter a valid $ amount. For example $100.00.', function(v) {
521
+ // [$]1[##][,###]+[.##]
522
+ // [$]1###+[.##]
523
+ // [$]0.##
524
+ // [$].##
525
+ return Validation.get('IsEmpty').test(v) || /^\$?\-?([1-9]{1}[0-9]{0,2}(\,[0-9]{3})*(\.[0-9]{0,2})?|[1-9]{1}\d*(\.[0-9]{0,2})?|0(\.[0-9]{0,2})?|(\.[0-9]{1,2})?)$/.test(v)
526
+ }],
527
+ ['validate-one-required', 'Please select one of the above options.', function (v,elm) {
528
+ var p = elm.parentNode;
529
+ var options = p.getElementsByTagName('INPUT');
530
+ return $A(options).any(function(elm) {
531
+ return $F(elm);
532
+ });
533
+ }],
534
+ ['validate-one-required-by-name', 'Please select one of the options.', function (v,elm) {
535
+ var inputs = $$('input[name="' + elm.name.replace(/([\\"])/g, '\\$1') + '"]');
536
+
537
+ var error = 1;
538
+ for(var i=0;i<inputs.length;i++) {
539
+ if((inputs[i].type == 'checkbox' || inputs[i].type == 'radio') && inputs[i].checked == true) {
540
+ error = 0;
541
+ }
542
+
543
+ if(Validation.isOnChange && (inputs[i].type == 'checkbox' || inputs[i].type == 'radio')) {
544
+ Validation.reset(inputs[i]);
545
+ }
546
+ }
547
+
548
+ if( error == 0 ) {
549
+ return true;
550
+ } else {
551
+ return false;
552
+ }
553
+ }],
554
+ ['validate-not-negative-number', 'Please enter a valid number in this field.', function(v) {
555
+ v = parseNumber(v);
556
+ return (!isNaN(v) && v>=0);
557
+ }],
558
+ ['validate-state', 'Please select State/Province.', function(v) {
559
+ return (v!=0 || v == '');
560
+ }],
561
+
562
+ ['validate-new-password', 'Please enter 6 or more characters. Leading or trailing spaces will be ignored.', function(v) {
563
+ if (!Validation.get('validate-password').test(v)) return false;
564
+ if (Validation.get('IsEmpty').test(v) && v != '') return false;
565
+ return true;
566
+ }],
567
+ ['validate-greater-than-zero', 'Please enter a number greater than 0 in this field.', function(v) {
568
+ if(v.length)
569
+ return parseFloat(v) > 0;
570
+ else
571
+ return true;
572
+ }],
573
+ ['validate-zero-or-greater', 'Please enter a number 0 or greater in this field.', function(v) {
574
+ if(v.length)
575
+ return parseFloat(v) >= 0;
576
+ else
577
+ return true;
578
+ }],
579
+ ['validate-cc-number', 'Please enter a valid credit card number.', function(v, elm) {
580
+ // remove non-numerics
581
+ var ccTypeContainer = $(elm.id.substr(0,elm.id.indexOf('_cc_number')) + '_cc_type');
582
+ if (ccTypeContainer && typeof Validation.creditCartTypes.get(ccTypeContainer.value) != 'undefined'
583
+ && Validation.creditCartTypes.get(ccTypeContainer.value)[2] == false) {
584
+ if (!Validation.get('IsEmpty').test(v) && Validation.get('validate-digits').test(v)) {
585
+ return true;
586
+ } else {
587
+ return false;
588
+ }
589
+ }
590
+ return validateCreditCard(v);
591
+ }],
592
+ ['validate-cc-type', 'Credit card number doesn\'t match credit card type', function(v, elm) {
593
+ // remove credit card number delimiters such as "-" and space
594
+ elm.value = removeDelimiters(elm.value);
595
+ v = removeDelimiters(v);
596
+
597
+ var ccTypeContainer = $(elm.id.substr(0,elm.id.indexOf('_cc_number')) + '_cc_type');
598
+ if (!ccTypeContainer) {
599
+ return true;
600
+ }
601
+ var ccType = ccTypeContainer.value;
602
+
603
+ if (typeof Validation.creditCartTypes.get(ccType) == 'undefined') {
604
+ return false;
605
+ }
606
+
607
+ // Other card type or switch or solo card
608
+ if (Validation.creditCartTypes.get(ccType)[0]==false) {
609
+ return true;
610
+ }
611
+
612
+ // Matched credit card type
613
+ var ccMatchedType = '';
614
+
615
+ Validation.creditCartTypes.each(function (pair) {
616
+ if (pair.value[0] && v.match(pair.value[0])) {
617
+ ccMatchedType = pair.key;
618
+ throw $break;
619
+ }
620
+ });
621
+
622
+ if(ccMatchedType != ccType) {
623
+ return false;
624
+ }
625
+
626
+ if (ccTypeContainer.hasClassName('validation-failed') && Validation.isOnChange) {
627
+ Validation.validate(ccTypeContainer);
628
+ }
629
+
630
+ return true;
631
+ }],
632
+ ['validate-cc-type-select', 'Card type doesn\'t match credit card number', function(v, elm) {
633
+ var ccNumberContainer = $(elm.id.substr(0,elm.id.indexOf('_cc_type')) + '_cc_number');
634
+ if (Validation.isOnChange && Validation.get('IsEmpty').test(ccNumberContainer.value)) {
635
+ return true;
636
+ }
637
+ if (Validation.get('validate-cc-type').test(ccNumberContainer.value, ccNumberContainer)) {
638
+ Validation.validate(ccNumberContainer);
639
+ }
640
+ return Validation.get('validate-cc-type').test(ccNumberContainer.value, ccNumberContainer);
641
+ }],
642
+ ['validate-cc-exp', 'Incorrect credit card expiration date', function(v, elm) {
643
+ var ccExpMonth = v;
644
+ var ccExpYear = $(elm.id.substr(0,elm.id.indexOf('_expiration')) + '_expiration_yr').value;
645
+ var currentTime = new Date();
646
+ var currentMonth = currentTime.getMonth() + 1;
647
+ var currentYear = currentTime.getFullYear();
648
+ if (ccExpMonth < currentMonth && ccExpYear == currentYear) {
649
+ return false;
650
+ }
651
+ return true;
652
+ }],
653
+ ['validate-cc-cvn', 'Please enter a valid credit card verification number.', function(v, elm) {
654
+ var ccTypeContainer = $(elm.id.substr(0,elm.id.indexOf('_cc_cid')) + '_cc_type');
655
+ if (!ccTypeContainer) {
656
+ return true;
657
+ }
658
+ var ccType = ccTypeContainer.value;
659
+
660
+ if (typeof Validation.creditCartTypes.get(ccType) == 'undefined') {
661
+ return false;
662
+ }
663
+
664
+ var re = Validation.creditCartTypes.get(ccType)[1];
665
+
666
+ if (v.match(re)) {
667
+ return true;
668
+ }
669
+
670
+ return false;
671
+ }],
672
+ ['validate-ajax', '', function(v, elm) { return true; }],
673
+ ['validate-data', 'Please use only letters (a-z or A-Z), numbers (0-9) or underscore(_) in this field, first character should be a letter.', function (v) {
674
+ if(v != '' && v) {
675
+ return /^[A-Za-z]+[A-Za-z0-9_]+$/.test(v);
676
+ }
677
+ return true;
678
+ }],
679
+ ['validate-css-length', 'Please input a valid CSS-length. For example 100px or 77pt or 20em or .5ex or 50%', function (v) {
680
+ if (v != '' && v) {
681
+ return /^[0-9\.]+(px|pt|em|ex|%)?$/.test(v) && (!(/\..*\./.test(v))) && !(/\.$/.test(v));
682
+ }
683
+ return true;
684
+ }],
685
+ ['validate-length', 'Maximum length exceeded.', function (v, elm) {
686
+ var re = new RegExp(/^maximum-length-[0-9]+$/);
687
+ var result = true;
688
+ $w(elm.className).each(function(name, index) {
689
+ if (name.match(re) && result) {
690
+ var length = name.split('-')[2];
691
+ result = (v.length <= length);
692
+ }
693
+ });
694
+ return result;
695
+ }],
696
+ ['validate-percents', 'Please enter a number lower than 100', {max:100}]
697
+
698
+ ]);
699
+
700
+ // Credit Card Validation Javascript
701
+ // copyright 12th May 2003, by Stephen Chapman, Felgall Pty Ltd
702
+
703
+ // You have permission to copy and use this javascript provided that
704
+ // the content of the script is not changed in any way.
705
+
706
+ function validateCreditCard(s) {
707
+ // remove non-numerics
708
+ var v = "0123456789";
709
+ var w = "";
710
+ for (i=0; i < s.length; i++) {
711
+ x = s.charAt(i);
712
+ if (v.indexOf(x,0) != -1)
713
+ w += x;
714
+ }
715
+ // validate number
716
+ j = w.length / 2;
717
+ k = Math.floor(j);
718
+ m = Math.ceil(j) - k;
719
+ c = 0;
720
+ for (i=0; i<k; i++) {
721
+ a = w.charAt(i*2+m) * 2;
722
+ c += a > 9 ? Math.floor(a/10 + a%10) : a;
723
+ }
724
+ for (i=0; i<k+m; i++) c += w.charAt(i*2+1-m) * 1;
725
+ return (c%10 == 0);
726
+ }
727
+
728
+ function removeDelimiters (v) {
729
+ v = v.replace(/\s/g, '');
730
+ v = v.replace(/\-/g, '');
731
+ return v;
732
+ }
733
+
734
+ function parseNumber(v)
735
+ {
736
+ if (typeof v != 'string') {
737
+ return parseFloat(v);
738
+ }
739
+
740
+ var isDot = v.indexOf('.');
741
+ var isComa = v.indexOf(',');
742
+
743
+ if (isDot != -1 && isComa != -1) {
744
+ if (isComa > isDot) {
745
+ v = v.replace('.', '').replace(',', '.');
746
+ }
747
+ else {
748
+ v = v.replace(',', '');
749
+ }
750
+ }
751
+ else if (isComa != -1) {
752
+ v = v.replace(',', '.');
753
+ }
754
+
755
+ return parseFloat(v);
756
+ }
757
+
758
+ /**
759
+ * Hash with credit card types wich can be simply extended in payment modules
760
+ * 0 - regexp for card number
761
+ * 1 - regexp for cvn
762
+ * 2 - check or not credit card number trough Luhn algorithm by
763
+ * function validateCreditCard wich you can find above in this file
764
+ */
765
+ Validation.creditCartTypes = $H({
766
+ 'VI': [new RegExp('^4[0-9]{12}([0-9]{3})?$'), new RegExp('^[0-9]{3}$'), true],
767
+ 'MC': [new RegExp('^5[1-5][0-9]{14}$'), new RegExp('^[0-9]{3}$'), true],
768
+ 'AE': [new RegExp('^3[47][0-9]{13}$'), new RegExp('^[0-9]{4}$'), true],
769
+ 'DI': [new RegExp('^6011[0-9]{12}$'), new RegExp('^[0-9]{3}$'), true],
770
+ 'SS': [new RegExp('^((6759[0-9]{12})|(49[013][1356][0-9]{13})|(633[34][0-9]{12})|(633110[0-9]{10})|(564182[0-9]{10}))([0-9]{2,3})?$'), new RegExp('^([0-9]{3}|[0-9]{4})?$'), true],
771
+ 'OT': [false, new RegExp('^([0-9]{3}|[0-9]{4})?$'), false]
772
+ });
773
+
lib/minify/HISTORY.txt CHANGED
@@ -1,5 +1,17 @@
1
  Minify Release History
2
 
 
 
 
 
 
 
 
 
 
 
 
 
3
  Version 2.1.2
4
  * Javascript fixes
5
  * Debug mode no longer confused by "*/*" in strings/RegExps (jQuery)
1
  Minify Release History
2
 
3
+ Version 2.1.3
4
+ * HTTP fixes
5
+ * ETag generation now valid (different when gzipped)
6
+ * Vary header always sent when Accept-Encoding is sniffed
7
+ * Cache-Control no longer has "must-revalidate" due to webkit bug
8
+ See: http://mrclay.org/index.php/2009/02/24/safari-4-beta-cache-controlmust-revalidate-bug/
9
+ * Dropped deflate encoding. Browser and proxy support could be buggy.
10
+ See: http://stackoverflow.com/questions/883841/
11
+ * File cache now works w/o setting $min_cachePath
12
+ * Allow setting contentType in Minify_Source objects
13
+ * No more 5.3 deprecation warnings: split() removed
14
+
15
  Version 2.1.2
16
  * Javascript fixes
17
  * Debug mode no longer confused by "*/*" in strings/RegExps (jQuery)
lib/minify/lib/HTTP/ConditionalGet.php CHANGED
@@ -82,8 +82,11 @@ class HTTP_ConditionalGet {
82
  * 'lastModifiedTime': (int) if given, both ETag AND Last-Modified headers
83
  * will be sent with content. This is recommended.
84
  *
85
- * 'eTag': (string) if given, this will be used as the ETag header rather
86
- * than values based on lastModifiedTime or contentHash.
 
 
 
87
  *
88
  * 'contentHash': (string) if given, only the ETag header can be sent with
89
  * content (only HTTP1.1 clients can conditionally GET). The given string
@@ -91,6 +94,10 @@ class HTTP_ConditionalGet {
91
  * resource changes (recommend md5()). This is not needed/used if
92
  * lastModifiedTime is given.
93
  *
 
 
 
 
94
  * 'invalidate': (bool) if true, the client cache will be considered invalid
95
  * without testing. Effectively this disables conditional GET.
96
  * (default false)
@@ -120,19 +127,30 @@ class HTTP_ConditionalGet {
120
  $_SERVER['REQUEST_TIME'] + $spec['maxAge']
121
  );
122
  }
 
 
 
 
 
 
 
 
 
 
 
123
  if (isset($spec['lastModifiedTime'])) {
124
  $this->_setLastModified($spec['lastModifiedTime']);
125
  if (isset($spec['eTag'])) { // Use it
126
  $this->_setEtag($spec['eTag'], $scope);
127
  } else { // base both headers on time
128
- $this->_setEtag($spec['lastModifiedTime'], $scope);
129
  }
130
  } elseif (isset($spec['eTag'])) { // Use it
131
  $this->_setEtag($spec['eTag'], $scope);
132
  } elseif (isset($spec['contentHash'])) { // Use the hash as the ETag
133
- $this->_setEtag($spec['contentHash'], $scope);
134
  }
135
- $this->_headers['Cache-Control'] = "max-age={$maxAge}, {$scope}, must-revalidate";
136
  // invalidate cache if disabled, otherwise check
137
  $this->cacheIsValid = (isset($spec['invalidate']) && $spec['invalidate'])
138
  ? false
@@ -148,7 +166,7 @@ class HTTP_ConditionalGet {
148
  * Otherwise something like:
149
  * <code>
150
  * array(
151
- * 'Cache-Control' => 'max-age=0, public, must-revalidate'
152
  * ,'ETag' => '"foobar"'
153
  * )
154
  * </code>
@@ -248,12 +266,11 @@ class HTTP_ConditionalGet {
248
  protected $_headers = array();
249
  protected $_lmTime = null;
250
  protected $_etag = null;
 
251
 
252
  protected function _setEtag($hash, $scope)
253
  {
254
- $this->_etag = '"' . $hash
255
- . substr($scope, 0, 3)
256
- . '"';
257
  $this->_headers['ETag'] = $this->_etag;
258
  }
259
 
@@ -286,17 +303,29 @@ class HTTP_ConditionalGet {
286
  if (!isset($_SERVER['HTTP_IF_NONE_MATCH'])) {
287
  return false;
288
  }
289
- $cachedEtagList = get_magic_quotes_gpc()
290
  ? stripslashes($_SERVER['HTTP_IF_NONE_MATCH'])
291
  : $_SERVER['HTTP_IF_NONE_MATCH'];
292
- $cachedEtags = split(',', $cachedEtagList);
293
- foreach ($cachedEtags as $cachedEtag) {
294
- if (trim($cachedEtag) == $this->_etag) {
 
 
 
 
 
295
  return true;
296
  }
297
  }
298
  return false;
299
  }
 
 
 
 
 
 
 
300
 
301
  protected function resourceNotModified()
302
  {
@@ -308,6 +337,12 @@ class HTTP_ConditionalGet {
308
  // IE has tacked on extra data to this header, strip it
309
  $ifModifiedSince = substr($ifModifiedSince, 0, $semicolon);
310
  }
311
- return ($ifModifiedSince == self::gmtDate($this->_lmTime));
 
 
 
 
 
 
312
  }
313
  }
82
  * 'lastModifiedTime': (int) if given, both ETag AND Last-Modified headers
83
  * will be sent with content. This is recommended.
84
  *
85
+ * 'encoding': (string) if set, the header "Vary: Accept-Encoding" will
86
+ * always be sent and a truncated version of the encoding will be appended
87
+ * to the ETag. E.g. "pub123456;gz". This will also trigger a more lenient
88
+ * checking of the client's If-None-Match header, as the encoding portion of
89
+ * the ETag will be stripped before comparison.
90
  *
91
  * 'contentHash': (string) if given, only the ETag header can be sent with
92
  * content (only HTTP1.1 clients can conditionally GET). The given string
94
  * resource changes (recommend md5()). This is not needed/used if
95
  * lastModifiedTime is given.
96
  *
97
+ * 'eTag': (string) if given, this will be used as the ETag header rather
98
+ * than values based on lastModifiedTime or contentHash. Also the encoding
99
+ * string will not be appended to the given value as described above.
100
+ *
101
  * 'invalidate': (bool) if true, the client cache will be considered invalid
102
  * without testing. Effectively this disables conditional GET.
103
  * (default false)
127
  $_SERVER['REQUEST_TIME'] + $spec['maxAge']
128
  );
129
  }
130
+ $etagAppend = '';
131
+ if (isset($spec['encoding'])) {
132
+ $this->_stripEtag = true;
133
+ $this->_headers['Vary'] = 'Accept-Encoding';
134
+ if ('' !== $spec['encoding']) {
135
+ if (0 === strpos($spec['encoding'], 'x-')) {
136
+ $spec['encoding'] = substr($spec['encoding'], 2);
137
+ }
138
+ $etagAppend = ';' . substr($spec['encoding'], 0, 2);
139
+ }
140
+ }
141
  if (isset($spec['lastModifiedTime'])) {
142
  $this->_setLastModified($spec['lastModifiedTime']);
143
  if (isset($spec['eTag'])) { // Use it
144
  $this->_setEtag($spec['eTag'], $scope);
145
  } else { // base both headers on time
146
+ $this->_setEtag($spec['lastModifiedTime'] . $etagAppend, $scope);
147
  }
148
  } elseif (isset($spec['eTag'])) { // Use it
149
  $this->_setEtag($spec['eTag'], $scope);
150
  } elseif (isset($spec['contentHash'])) { // Use the hash as the ETag
151
+ $this->_setEtag($spec['contentHash'] . $etagAppend, $scope);
152
  }
153
+ $this->_headers['Cache-Control'] = "max-age={$maxAge}, {$scope}";
154
  // invalidate cache if disabled, otherwise check
155
  $this->cacheIsValid = (isset($spec['invalidate']) && $spec['invalidate'])
156
  ? false
166
  * Otherwise something like:
167
  * <code>
168
  * array(
169
+ * 'Cache-Control' => 'max-age=0, public'
170
  * ,'ETag' => '"foobar"'
171
  * )
172
  * </code>
266
  protected $_headers = array();
267
  protected $_lmTime = null;
268
  protected $_etag = null;
269
+ protected $_stripEtag = false;
270
 
271
  protected function _setEtag($hash, $scope)
272
  {
273
+ $this->_etag = '"' . substr($scope, 0, 3) . $hash . '"';
 
 
274
  $this->_headers['ETag'] = $this->_etag;
275
  }
276
 
303
  if (!isset($_SERVER['HTTP_IF_NONE_MATCH'])) {
304
  return false;
305
  }
306
+ $clientEtagList = get_magic_quotes_gpc()
307
  ? stripslashes($_SERVER['HTTP_IF_NONE_MATCH'])
308
  : $_SERVER['HTTP_IF_NONE_MATCH'];
309
+ $clientEtags = explode(',', $clientEtagList);
310
+
311
+ $compareTo = $this->normalizeEtag($this->_etag);
312
+ foreach ($clientEtags as $clientEtag) {
313
+ if ($this->normalizeEtag($clientEtag) === $compareTo) {
314
+ // respond with the client's matched ETag, even if it's not what
315
+ // we would've sent by default
316
+ $this->_headers['ETag'] = trim($clientEtag);
317
  return true;
318
  }
319
  }
320
  return false;
321
  }
322
+
323
+ protected function normalizeEtag($etag) {
324
+ $etag = trim($etag);
325
+ return $this->_stripEtag
326
+ ? preg_replace('/;\\w\\w"$/', '"', $etag)
327
+ : $etag;
328
+ }
329
 
330
  protected function resourceNotModified()
331
  {
337
  // IE has tacked on extra data to this header, strip it
338
  $ifModifiedSince = substr($ifModifiedSince, 0, $semicolon);
339
  }
340
+ if ($ifModifiedSince == self::gmtDate($this->_lmTime)) {
341
+ // Apache 2.2's behavior. If there was no ETag match, send the
342
+ // non-encoded version of the ETag value.
343
+ $this->_headers['ETag'] = $this->normalizeEtag($this->_etag);
344
+ return true;
345
+ }
346
+ return false;
347
  }
348
  }
lib/minify/lib/HTTP/Encoder.php CHANGED
@@ -8,6 +8,9 @@
8
  /**
9
  * Encode and send gzipped/deflated content
10
  *
 
 
 
11
  * <code>
12
  * // Send a CSS file, compressed if possible
13
  * $he = new HTTP_Encoder(array(
@@ -175,16 +178,19 @@ class HTTP_Encoder {
175
  * this will return ('', ''), the "identity" encoding.
176
  *
177
  * A syntax-aware scan is done of the Accept-Encoding, so the method must
178
- * be non 0. The methods are favored in order of deflate, gzip, then
179
- * compress. Yes, deflate is always smaller and faster!
 
180
  *
181
- * @param bool $allowCompress allow the older compress encoding
 
 
182
  *
183
  * @return array two values, 1st is the actual encoding method, 2nd is the
184
  * alias of that method to use in the Content-Encoding header (some browsers
185
  * call gzip "x-gzip" etc.)
186
  */
187
- public static function getAcceptedEncoding($allowCompress = true)
188
  {
189
  // @link http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
190
 
@@ -194,23 +200,31 @@ class HTTP_Encoder {
194
  return array('', '');
195
  }
196
  $ae = $_SERVER['HTTP_ACCEPT_ENCODING'];
197
- $aeRev = strrev($ae);
198
- // Fast tests for common AEs. If these don't pass we have to do
199
- // slow regex parsing
200
- if (0 === strpos($aeRev, 'etalfed ,') // ie, webkit
201
- || 0 === strpos($aeRev, 'etalfed,') // gecko
202
- || 0 === strpos($ae, 'deflate,') // opera 9.5b
203
- // slow parsing
204
- || preg_match(
205
- '@(?:^|,)\\s*deflate\\s*(?:$|,|;\\s*q=(?:0\\.|1))@', $ae)) {
206
- return array('deflate', 'deflate');
207
  }
 
208
  if (preg_match(
209
  '@(?:^|,)\\s*((?:x-)?gzip)\\s*(?:$|,|;\\s*q=(?:0\\.|1))@'
210
  ,$ae
211
  ,$m)) {
212
  return array('gzip', $m[1]);
213
  }
 
 
 
 
 
 
 
 
 
 
 
 
214
  if ($allowCompress && preg_match(
215
  '@(?:^|,)\\s*((?:x-)?compress)\\s*(?:$|,|;\\s*q=(?:0\\.|1))@'
216
  ,$ae
@@ -229,8 +243,8 @@ class HTTP_Encoder {
229
  * Then the appropriate gz_* function is called to compress the content. If
230
  * this fails, false is returned.
231
  *
232
- * If successful, the Content-Length header is updated, and Content-Encoding
233
- * and Vary headers are added.
234
  *
235
  * @param int $compressionLevel given to zlib functions. If not given, the
236
  * class default will be used.
@@ -239,6 +253,7 @@ class HTTP_Encoder {
239
  */
240
  public function encode($compressionLevel = null)
241
  {
 
242
  if (null === $compressionLevel) {
243
  $compressionLevel = self::$compressionLevel;
244
  }
@@ -260,7 +275,6 @@ class HTTP_Encoder {
260
  }
261
  $this->_headers['Content-Length'] = strlen($encoded);
262
  $this->_headers['Content-Encoding'] = $this->_encodeMethod[1];
263
- $this->_headers['Vary'] = 'Accept-Encoding';
264
  $this->_content = $encoded;
265
  return true;
266
  }
8
  /**
9
  * Encode and send gzipped/deflated content
10
  *
11
+ * The "Vary: Accept-Encoding" header is sent. If the client allows encoding,
12
+ * Content-Encoding and Content-Length are added.
13
+ *
14
  * <code>
15
  * // Send a CSS file, compressed if possible
16
  * $he = new HTTP_Encoder(array(
178
  * this will return ('', ''), the "identity" encoding.
179
  *
180
  * A syntax-aware scan is done of the Accept-Encoding, so the method must
181
+ * be non 0. The methods are favored in order of gzip, deflate, then
182
+ * compress. Deflate is always smallest and generally faster, but is
183
+ * rarely sent by servers, so client support could be buggier.
184
  *
185
+ * @param bool $allowCompress allow the older compress encoding
186
+ *
187
+ * @param bool $allowDeflate allow the more recent deflate encoding
188
  *
189
  * @return array two values, 1st is the actual encoding method, 2nd is the
190
  * alias of that method to use in the Content-Encoding header (some browsers
191
  * call gzip "x-gzip" etc.)
192
  */
193
+ public static function getAcceptedEncoding($allowCompress = true, $allowDeflate = true)
194
  {
195
  // @link http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
196
 
200
  return array('', '');
201
  }
202
  $ae = $_SERVER['HTTP_ACCEPT_ENCODING'];
203
+ // gzip checks (quick)
204
+ if (0 === strpos($ae, 'gzip,') // most browsers
205
+ || 0 === strpos($ae, 'deflate, gzip,') // opera
206
+ ) {
207
+ return array('gzip', 'gzip');
 
 
 
 
 
208
  }
209
+ // gzip checks (slow)
210
  if (preg_match(
211
  '@(?:^|,)\\s*((?:x-)?gzip)\\s*(?:$|,|;\\s*q=(?:0\\.|1))@'
212
  ,$ae
213
  ,$m)) {
214
  return array('gzip', $m[1]);
215
  }
216
+ if ($allowDeflate) {
217
+ // deflate checks
218
+ $aeRev = strrev($ae);
219
+ if (0 === strpos($aeRev, 'etalfed ,') // ie, webkit
220
+ || 0 === strpos($aeRev, 'etalfed,') // gecko
221
+ || 0 === strpos($ae, 'deflate,') // opera
222
+ // slow parsing
223
+ || preg_match(
224
+ '@(?:^|,)\\s*deflate\\s*(?:$|,|;\\s*q=(?:0\\.|1))@', $ae)) {
225
+ return array('deflate', 'deflate');
226
+ }
227
+ }
228
  if ($allowCompress && preg_match(
229
  '@(?:^|,)\\s*((?:x-)?compress)\\s*(?:$|,|;\\s*q=(?:0\\.|1))@'
230
  ,$ae
243
  * Then the appropriate gz_* function is called to compress the content. If
244
  * this fails, false is returned.
245
  *
246
+ * The header "Vary: Accept-Encoding" is added. If encoding is successful,
247
+ * the Content-Length header is updated, and Content-Encoding is also added.
248
  *
249
  * @param int $compressionLevel given to zlib functions. If not given, the
250
  * class default will be used.
253
  */
254
  public function encode($compressionLevel = null)
255
  {
256
+ $this->_headers['Vary'] = 'Accept-Encoding';
257
  if (null === $compressionLevel) {
258
  $compressionLevel = self::$compressionLevel;
259
  }
275
  }
276
  $this->_headers['Content-Length'] = strlen($encoded);
277
  $this->_headers['Content-Encoding'] = $this->_encodeMethod[1];
 
278
  $this->_content = $encoded;
279
  return true;
280
  }
lib/minify/lib/JSMin.php CHANGED
@@ -11,11 +11,6 @@
11
  * comments that begin with "/*!" (for documentation purposes). In the latter case
12
  * newlines are inserted around the comment to enhance readability.
13
  *
14
- * Known issue: regular expressions containing quote characters must be proceeded
15
- * by one of the following characters: (,=:[!&|?
16
- * E.g. JSMin will fail on the following: return /'/;
17
- * The simple workaround is to wrap the expression in parenthesis: return (/'/);
18
- *
19
  * PHP 5 or higher is required.
20
  *
21
  * Permission is hereby granted to use this version of the library under the
@@ -56,17 +51,20 @@
56
  */
57
 
58
  class JSMin {
59
- const ORD_LF = 10;
60
- const ORD_SPACE = 32;
61
-
62
- protected $a = '';
 
 
 
63
  protected $b = '';
64
  protected $input = '';
65
  protected $inputIndex = 0;
66
  protected $inputLength = 0;
67
  protected $lookAhead = null;
68
  protected $output = '';
69
-
70
  /**
71
  * Minify Javascript
72
  *
@@ -78,81 +76,141 @@ class JSMin {
78
  $jsmin = new JSMin($js);
79
  return $jsmin->min();
80
  }
81
-
82
- protected function __construct($input)
 
 
 
83
  {
84
  $this->input = str_replace("\r\n", "\n", $input);
85
  $this->inputLength = strlen($this->input);
86
  }
87
-
88
- protected function action($d)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
89
  {
90
- switch ($d) {
91
- case 1:
92
  $this->output .= $this->a;
93
  // fallthrough
94
- case 2:
95
  $this->a = $this->b;
96
- if ($this->a === "'" || $this->a === '"') {
97
- for (;;) {
 
98
  $this->output .= $this->a;
99
  $this->a = $this->get();
100
- if ($this->a === $this->b) {
101
  break;
102
  }
103
  if (ord($this->a) <= self::ORD_LF) {
104
- throw new JSMinException('Unterminated string literal.');
 
105
  }
 
106
  if ($this->a === '\\') {
107
  $this->output .= $this->a;
108
  $this->a = $this->get();
 
109
  }
110
  }
111
  }
112
  // fallthrough
113
- case 3:
114
  $this->b = $this->next();
115
- if ($this->b === '/') {
116
- switch ($this->a) {
117
- case "\n":
118
- case ' ':
119
- if (! $this->spaceBeforeRegExp($this->output)) {
120
- break;
121
- }
122
- case '{':
123
- case ';':
124
- case '(':
125
- case ',':
126
- case '=':
127
- case ':':
128
- case '[':
129
- case '!':
130
- case '&':
131
- case '|':
132
- case '?':
133
- $this->output .= $this->a.$this->b;
134
- for (;;) {
135
- $this->a = $this->get();
136
- if ($this->a === '/') {
137
- break; // for (;;)
138
- } elseif ($this->a === '\\') {
139
- $this->output .= $this->a;
140
- $this->a = $this->get();
141
- } elseif (ord($this->a) <= self::ORD_LF) {
142
- throw new JSMinException('Unterminated regular expression literal.');
143
- }
144
- $this->output .= $this->a;
145
- }
146
- $this->b = $this->next();
147
- break; // switch ($this->a)
148
- // end case ?
149
  }
 
150
  }
151
- break; // switch ($d)
152
- // end case 3
153
  }
154
  }
155
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
156
  protected function get()
157
  {
158
  $c = $this->lookAhead;
@@ -162,170 +220,95 @@ class JSMin {
162
  $c = $this->input[$this->inputIndex];
163
  $this->inputIndex += 1;
164
  } else {
165
- $c = null;
166
  }
167
  }
168
- return ($c === "\r")
169
- ? "\n"
170
- : ($c === null || $c === "\n" || ord($c) >= self::ORD_SPACE
171
- ? $c
172
- : ' ');
 
 
173
  }
174
-
 
 
 
 
 
 
 
 
 
 
 
 
175
  protected function isAlphaNum($c)
176
  {
177
- return (ord($c) > 126
178
- || $c === '\\'
179
- || preg_match('/^[\w\$]$/', $c) === 1);
180
  }
181
-
182
- protected function min()
183
  {
184
- $this->a = "\n";
185
- $this->action(3);
186
-
187
- while ($this->a !== null) {
188
- switch ($this->a) {
189
- case ' ':
190
- if ($this->isAlphaNum($this->b)) {
191
- $this->action(1);
192
- } else {
193
- $this->action(2);
194
- }
195
- break;
196
- case "\n":
197
- switch ($this->b) {
198
- case '{':
199
- case '[':
200
- case '(':
201
- case '+':
202
- case '-':
203
- $this->action(1);
204
- break;
205
- case ' ':
206
- $this->action(3);
207
- break;
208
- default:
209
- if ($this->isAlphaNum($this->b)) {
210
- $this->action(1);
211
- } else {
212
- $this->action(2);
213
- }
214
- }
215
- break;
216
- default:
217
- switch ($this->b) {
218
- case ' ':
219
- if ($this->isAlphaNum($this->a)) {
220
- $this->action(1);
221
- break; // switch ($this->b)
222
- }
223
- $this->action(3);
224
- break; // switch ($this->b)
225
- case "\n":
226
- switch ($this->a) {
227
- case '}':
228
- case ']':
229
- case ')':
230
- case '+':
231
- case '-':
232
- case '"':
233
- case "'":
234
- $this->action(1);
235
- break; // switch ($this->a)
236
- default:
237
- if ($this->isAlphaNum($this->a)) {
238
- $this->action(1);
239
- } else {
240
- $this->action(3);
241
- }
242
- }
243
- break; // switch ($this->b)
244
- default:
245
- $this->action(1);
246
- break; // switch ($this->b)
247
- }
248
- // end default
249
  }
250
  }
251
- return $this->output;
252
  }
253
-
254
- protected function next()
255
  {
256
- $get = $this->get();
257
- if ($get === '/') {
258
- $commentContents = '';
259
- switch ($this->peek()) {
260
- case '/':
261
- // "//" comment
262
- for (;;) {
263
- $get = $this->get();
264
- $commentContents .= $get;
265
- if (ord($get) <= self::ORD_LF) {
266
- return preg_match('/^\\/@(?:cc_on|if|elif|else|end)\\b/', $commentContents)
267
- ? "/{$commentContents}"
268
- : $get;
269
- }
270
- }
271
- case '*':
272
- // "/* */" comment
273
  $this->get();
274
- for (;;) {
275
- $get = $this->get();
276
- switch ($get) {
277
- case '*':
278
- if ($this->peek() === '/') {
279
- $this->get();
280
- if (0 === strpos($commentContents, '!')) {
281
- // YUI Compressor style
282
- return "\n/*" . substr($commentContents, 1) . "*/\n";
283
- }
284
- return preg_match('/^@(?:cc_on|if|elif|else|end)\\b/', $commentContents)
285
- ? "/*{$commentContents}*/" // IE conditional compilation
286
- : ' ';
287
- }
288
- break;
289
- case null:
290
- throw new JSMinException('Unterminated comment.');
291
- }
292
- $commentContents .= $get;
293
  }
294
- default:
295
- return $get;
 
 
296
  }
 
297
  }
298
- return $get;
299
- }
300
-
301
- protected function peek()
302
- {
303
- $this->lookAhead = $this->get();
304
- return $this->lookAhead;
305
  }
306
-
307
- protected function spaceBeforeRegExp($output)
 
 
 
 
308
  {
309
- $length = strlen($output);
310
- $isSpace = false;
311
- $tmp = "";
312
- foreach (array("case", "else", "in", "return", "typeof") as $word) {
313
- if ($length === strlen($word)) {
314
- $isSpace = ($word === $output);
315
- } elseif ($length > strlen($word)) {
316
- $tmp = substr($output, $length - strlen($word) - 1);
317
- $isSpace = (substr($tmp, 1) === $word) && ! $this->isAlphaNum($tmp[0]);
318
- }
319
- if ($isSpace) {
320
- break;
321
- }
322
  }
323
- return ($length < 2)
324
- ? true
325
- : $isSpace;
326
  }
327
  }
328
 
329
- class JSMinException extends Exception {
330
-
331
- }
11
  * comments that begin with "/*!" (for documentation purposes). In the latter case
12
  * newlines are inserted around the comment to enhance readability.
13
  *
 
 
 
 
 
14
  * PHP 5 or higher is required.
15
  *
16
  * Permission is hereby granted to use this version of the library under the
51
  */
52
 
53
  class JSMin {
54
+ const ORD_LF = 10;
55
+ const ORD_SPACE = 32;
56
+ const ACTION_KEEP_A = 1;
57
+ const ACTION_DELETE_A = 2;
58
+ const ACTION_DELETE_A_B = 3;
59
+
60
+ protected $a = "\n";
61
  protected $b = '';
62
  protected $input = '';
63
  protected $inputIndex = 0;
64
  protected $inputLength = 0;
65
  protected $lookAhead = null;
66
  protected $output = '';
67
+
68
  /**
69
  * Minify Javascript
70
  *
76
  $jsmin = new JSMin($js);
77
  return $jsmin->min();
78
  }
79
+
80
+ /**
81
+ * Setup process
82
+ */
83
+ public function __construct($input)
84
  {
85
  $this->input = str_replace("\r\n", "\n", $input);
86
  $this->inputLength = strlen($this->input);
87
  }
88
+
89
+ /**
90
+ * Perform minification, return result
91
+ */
92
+ public function min()
93
+ {
94
+ if ($this->output !== '') { // min already run
95
+ return $this->output;
96
+ }
97
+ $this->action(self::ACTION_DELETE_A_B);
98
+
99
+ while ($this->a !== null) {
100
+ // determine next command
101
+ $command = self::ACTION_KEEP_A; // default
102
+ if ($this->a === ' ') {
103
+ if (! $this->isAlphaNum($this->b)) {
104
+ $command = self::ACTION_DELETE_A;
105
+ }
106
+ } elseif ($this->a === "\n") {
107
+ if ($this->b === ' ') {
108
+ $command = self::ACTION_DELETE_A_B;
109
+ } elseif (false === strpos('{[(+-', $this->b)
110
+ && ! $this->isAlphaNum($this->b)) {
111
+ $command = self::ACTION_DELETE_A;
112
+ }
113
+ } elseif (! $this->isAlphaNum($this->a)) {
114
+ if ($this->b === ' '
115
+ || ($this->b === "\n"
116
+ && (false === strpos('}])+-"\'', $this->a)))) {
117
+ $command = self::ACTION_DELETE_A_B;
118
+ }
119
+ }
120
+ $this->action($command);
121
+ }
122
+ $this->output = trim($this->output);
123
+ return $this->output;
124
+ }
125
+
126
+ /**
127
+ * ACTION_KEEP_A = Output A. Copy B to A. Get the next B.
128
+ * ACTION_DELETE_A = Copy B to A. Get the next B.
129
+ * ACTION_DELETE_A_B = Get the next B.
130
+ */
131
+ protected function action($command)
132
  {
133
+ switch ($command) {
134
+ case self::ACTION_KEEP_A:
135
  $this->output .= $this->a;
136
  // fallthrough
137
+ case self::ACTION_DELETE_A:
138
  $this->a = $this->b;
139
+ if ($this->a === "'" || $this->a === '"') { // string literal
140
+ $str = $this->a; // in case needed for exception
141
+ while (true) {
142
  $this->output .= $this->a;
143
  $this->a = $this->get();
144
+ if ($this->a === $this->b) { // end quote
145
  break;
146
  }
147
  if (ord($this->a) <= self::ORD_LF) {
148
+ throw new JSMin_UnterminatedStringException(
149
+ 'Unterminated String: ' . var_export($str, true));
150
  }
151
+ $str .= $this->a;
152
  if ($this->a === '\\') {
153
  $this->output .= $this->a;
154
  $this->a = $this->get();
155
+ $str .= $this->a;
156
  }
157
  }
158
  }
159
  // fallthrough
160
+ case self::ACTION_DELETE_A_B:
161
  $this->b = $this->next();
162
+ if ($this->b === '/' && $this->isRegexpLiteral()) { // RegExp literal
163
+ $this->output .= $this->a . $this->b;
164
+ $pattern = '/'; // in case needed for exception
165
+ while (true) {
166
+ $this->a = $this->get();
167
+ $pattern .= $this->a;
168
+ if ($this->a === '/') { // end pattern
169
+ break; // while (true)
170
+ } elseif ($this->a === '\\') {
171
+ $this->output .= $this->a;
172
+ $this->a = $this->get();
173
+ $pattern .= $this->a;
174
+ } elseif (ord($this->a) <= self::ORD_LF) {
175
+ throw new JSMin_UnterminatedRegExpException(
176
+ 'Unterminated RegExp: '. var_export($pattern, true));
177
+ }
178
+ $this->output .= $this->a;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
179
  }
180
+ $this->b = $this->next();
181
  }
182
+ // end case ACTION_DELETE_A_B
 
183
  }
184
  }
185
+
186
+ protected function isRegexpLiteral()
187
+ {
188
+ if (false !== strpos("\n{;(,=:[!&|?", $this->a)) { // we aren't dividing
189
+ return true;
190
+ }
191
+ if (' ' === $this->a) {
192
+ $length = strlen($this->output);
193
+ if ($length < 2) { // weird edge case
194
+ return true;
195
+ }
196
+ // you can't divide a keyword
197
+ if (preg_match('/(?:case|else|in|return|typeof)$/', $this->output, $m)) {
198
+ if ($this->output === $m[0]) { // odd but could happen
199
+ return true;
200
+ }
201
+ // make sure it's a keyword, not end of an identifier
202
+ $charBeforeKeyword = substr($this->output, $length - strlen($m[0]) - 1, 1);
203
+ if (! $this->isAlphaNum($charBeforeKeyword)) {
204
+ return true;
205
+ }
206
+ }
207
+ }
208
+ return false;
209
+ }
210
+
211
+ /**
212
+ * Get next char. Convert ctrl char to space.
213
+ */
214
  protected function get()
215
  {
216
  $c = $this->lookAhead;
220
  $c = $this->input[$this->inputIndex];
221
  $this->inputIndex += 1;
222
  } else {
223
+ return null;
224
  }
225
  }
226
+ if ($c === "\r" || $c === "\n") {
227
+ return "\n";
228
+ }
229
+ if (ord($c) < self::ORD_SPACE) { // control char
230
+ return ' ';
231
+ }
232
+ return $c;
233
  }
234
+
235
+ /**
236
+ * Get next char. If is ctrl character, translate to a space or newline.
237
+ */
238
+ protected function peek()
239
+ {
240
+ $this->lookAhead = $this->get();
241
+ return $this->lookAhead;
242
+ }
243
+
244
+ /**
245
+ * Is $c a letter, digit, underscore, dollar sign, escape, or non-ASCII?
246
+ */
247
  protected function isAlphaNum($c)
248
  {
249
+ return (preg_match('/^[0-9a-zA-Z_\\$\\\\]$/', $c) || ord($c) > 126);
 
 
250
  }
251
+
252
+ protected function singleLineComment()
253
  {
254
+ $comment = '';
255
+ while (true) {
256
+ $get = $this->get();
257
+ $comment .= $get;
258
+ if (ord($get) <= self::ORD_LF) { // EOL reached
259
+ // if IE conditional comment
260
+ if (preg_match('/^\\/@(?:cc_on|if|elif|else|end)\\b/', $comment)) {
261
+ return "/{$comment}";
262
+ }
263
+ return $get;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
264
  }
265
  }
 
266
  }
267
+
268
+ protected function multipleLineComment()
269
  {
270
+ $this->get();
271
+ $comment = '';
272
+ while (true) {
273
+ $get = $this->get();
274
+ if ($get === '*') {
275
+ if ($this->peek() === '/') { // end of comment reached
 
 
 
 
 
 
 
 
 
 
 
276
  $this->get();
277
+ // if comment preserved by YUI Compressor
278
+ if (0 === strpos($comment, '!')) {
279
+ return "\n/*" . substr($comment, 1) . "*/\n";
280
+ }
281
+ // if IE conditional comment
282
+ if (preg_match('/^@(?:cc_on|if|elif|else|end)\\b/', $comment)) {
283
+ return "/*{$comment}*/";
 
 
 
 
 
 
 
 
 
 
 
 
284
  }
285
+ return ' ';
286
+ }
287
+ } elseif ($get === null) {
288
+ throw new JSMin_UnterminatedCommentException('Unterminated Comment: ' . var_export('/*' . $comment, true));
289
  }
290
+ $comment .= $get;
291
  }
 
 
 
 
 
 
 
292
  }
293
+
294
+ /**
295
+ * Get the next character, skipping over comments.
296
+ * Some comments may be preserved.
297
+ */
298
+ protected function next()
299
  {
300
+ $get = $this->get();
301
+ if ($get !== '/') {
302
+ return $get;
303
+ }
304
+ switch ($this->peek()) {
305
+ case '/': return $this->singleLineComment();
306
+ case '*': return $this->multipleLineComment();
307
+ default: return $get;
 
 
 
 
 
308
  }
 
 
 
309
  }
310
  }
311
 
312
+ class JSMin_UnterminatedStringException extends Exception {}
313
+ class JSMin_UnterminatedCommentException extends Exception {}
314
+ class JSMin_UnterminatedRegExpException extends Exception {}
lib/minify/lib/JSMinPlus.php ADDED
@@ -0,0 +1,1872 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * JSMinPlus version 1.1
5
+ *
6
+ * Minifies a javascript file using a javascript parser
7
+ *
8
+ * This implements a PHP port of Brendan Eich's Narcissus open source javascript engine (in javascript)
9
+ * References: http://en.wikipedia.org/wiki/Narcissus_(JavaScript_engine)
10
+ * Narcissus sourcecode: http://mxr.mozilla.org/mozilla/source/js/narcissus/
11
+ * JSMinPlus weblog: http://crisp.tweakblogs.net/blog/cat/716
12
+ *
13
+ * Tino Zijdel <crisp@tweakers.net>
14
+ *
15
+ * Usage: $minified = JSMinPlus::minify($script [, $filename])
16
+ *
17
+ * Versionlog (see also changelog.txt):
18
+ * 12-04-2009 - some small bugfixes and performance improvements
19
+ * 09-04-2009 - initial open sourced version 1.0
20
+ *
21
+ * Latest version of this script: http://files.tweakers.net/jsminplus/jsminplus.zip
22
+ *
23
+ */
24
+
25
+ /* ***** BEGIN LICENSE BLOCK *****
26
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
27
+ *
28
+ * The contents of this file are subject to the Mozilla Public License Version
29
+ * 1.1 (the "License"); you may not use this file except in compliance with
30
+ * the License. You may obtain a copy of the License at
31
+ * http://www.mozilla.org/MPL/
32
+ *
33
+ * Software distributed under the License is distributed on an "AS IS" basis,
34
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
35
+ * for the specific language governing rights and limitations under the
36
+ * License.
37
+ *
38
+ * The Original Code is the Narcissus JavaScript engine.
39
+ *
40
+ * The Initial Developer of the Original Code is
41
+ * Brendan Eich <brendan@mozilla.org>.
42
+ * Portions created by the Initial Developer are Copyright (C) 2004
43
+ * the Initial Developer. All Rights Reserved.
44
+ *
45
+ * Contributor(s): Tino Zijdel <crisp@tweakers.net>
46
+ * PHP port, modifications and minifier routine are (C) 2009
47
+ *
48
+ * Alternatively, the contents of this file may be used under the terms of
49
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
50
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
51
+ * in which case the provisions of the GPL or the LGPL are applicable instead
52
+ * of those above. If you wish to allow use of your version of this file only
53
+ * under the terms of either the GPL or the LGPL, and not to allow others to
54
+ * use your version of this file under the terms of the MPL, indicate your
55
+ * decision by deleting the provisions above and replace them with the notice
56
+ * and other provisions required by the GPL or the LGPL. If you do not delete
57
+ * the provisions above, a recipient may use your version of this file under
58
+ * the terms of any one of the MPL, the GPL or the LGPL.
59
+ *
60
+ * ***** END LICENSE BLOCK ***** */
61
+
62
+ define('TOKEN_END', 1);
63
+ define('TOKEN_NUMBER', 2);
64
+ define('TOKEN_IDENTIFIER', 3);
65
+ define('TOKEN_STRING', 4);
66
+ define('TOKEN_REGEXP', 5);
67
+ define('TOKEN_NEWLINE', 6);
68
+ define('TOKEN_CONDCOMMENT_MULTILINE', 7);
69
+
70
+ define('JS_SCRIPT', 100);
71
+ define('JS_BLOCK', 101);
72
+ define('JS_LABEL', 102);
73
+ define('JS_FOR_IN', 103);
74
+ define('JS_CALL', 104);
75
+ define('JS_NEW_WITH_ARGS', 105);
76
+ define('JS_INDEX', 106);
77
+ define('JS_ARRAY_INIT', 107);
78
+ define('JS_OBJECT_INIT', 108);
79
+ define('JS_PROPERTY_INIT', 109);
80
+ define('JS_GETTER', 110);
81
+ define('JS_SETTER', 111);
82
+ define('JS_GROUP', 112);
83
+ define('JS_LIST', 113);
84
+
85
+ define('DECLARED_FORM', 0);
86
+ define('EXPRESSED_FORM', 1);
87
+ define('STATEMENT_FORM', 2);
88
+
89
+ class JSMinPlus
90
+ {
91
+ private $parser;
92
+ private $reserved = array(
93
+ 'break', 'case', 'catch', 'continue', 'default', 'delete', 'do',
94
+ 'else', 'finally', 'for', 'function', 'if', 'in', 'instanceof',
95
+ 'new', 'return', 'switch', 'this', 'throw', 'try', 'typeof', 'var',
96
+ 'void', 'while', 'with',
97
+ // Words reserved for future use
98
+ 'abstract', 'boolean', 'byte', 'char', 'class', 'const', 'debugger',
99
+ 'double', 'enum', 'export', 'extends', 'final', 'float', 'goto',
100
+ 'implements', 'import', 'int', 'interface', 'long', 'native',
101
+ 'package', 'private', 'protected', 'public', 'short', 'static',
102
+ 'super', 'synchronized', 'throws', 'transient', 'volatile',
103
+ // These are not reserved, but should be taken into account
104
+ // in isValidIdentifier (See jslint source code)
105
+ 'arguments', 'eval', 'true', 'false', 'Infinity', 'NaN', 'null', 'undefined'
106
+ );
107
+
108
+ private function __construct()
109
+ {
110
+ $this->parser = new JSParser();
111
+ }
112
+
113
+ public static function minify($js, $filename='')
114
+ {
115
+ static $instance;
116
+
117
+ // this is a singleton
118
+ if(!$instance)
119
+ $instance = new JSMinPlus();
120
+
121
+ return $instance->min($js, $filename);
122
+ }
123
+
124
+ private function min($js, $filename)
125
+ {
126
+ try
127
+ {
128
+ $n = $this->parser->parse($js, $filename, 1);
129
+ return $this->parseTree($n);
130
+ }
131
+ catch(Exception $e)
132
+ {
133
+ echo $e->getMessage() . "\n";
134
+ }
135
+
136
+ return false;
137
+ }
138
+
139
+ private function parseTree($n, $noBlockGrouping = false)
140
+ {
141
+ $s = '';
142
+
143
+ switch ($n->type)
144
+ {
145
+ case KEYWORD_FUNCTION:
146
+ $s .= 'function' . ($n->name ? ' ' . $n->name : '') . '(';
147
+ $params = $n->params;
148
+ for ($i = 0, $j = count($params); $i < $j; $i++)
149
+ $s .= ($i ? ',' : '') . $params[$i];
150
+ $s .= '){' . $this->parseTree($n->body, true) . '}';
151
+ break;
152
+
153
+ case JS_SCRIPT:
154
+ // we do nothing with funDecls or varDecls
155
+ $noBlockGrouping = true;
156
+ // fall through
157
+ case JS_BLOCK:
158
+ $childs = $n->treeNodes;
159
+ for ($c = 0, $i = 0, $j = count($childs); $i < $j; $i++)
160
+ {
161
+ $t = $this->parseTree($childs[$i]);
162
+ if (strlen($t))
163
+ {
164
+ if ($c)
165
+ {
166
+ if ($childs[$i]->type == KEYWORD_FUNCTION && $childs[$i]->functionForm == DECLARED_FORM)
167
+ $s .= "\n"; // put declared functions on a new line
168
+ else
169
+ $s .= ';';
170
+ }
171
+
172
+ $s .= $t;
173
+
174
+ $c++;
175
+ }
176
+ }
177
+
178
+ if ($c > 1 && !$noBlockGrouping)
179
+ {
180
+ $s = '{' . $s . '}';
181
+ }
182
+ break;
183
+
184
+ case KEYWORD_IF:
185
+ $s = 'if(' . $this->parseTree($n->condition) . ')';
186
+ $thenPart = $this->parseTree($n->thenPart);
187
+ $elsePart = $n->elsePart ? $this->parseTree($n->elsePart) : null;
188
+
189
+ // quite a rancid hack to see if we should enclose the thenpart in brackets
190
+ if ($thenPart[0] != '{')
191
+ {
192
+ if (strpos($thenPart, 'if(') !== false)
193
+ $thenPart = '{' . $thenPart . '}';
194
+ elseif ($elsePart)
195
+ $thenPart .= ';';
196
+ }
197
+
198
+ $s .= $thenPart;
199
+
200
+ if ($elsePart)
201
+ {
202
+ $s .= 'else';
203
+
204
+ if ($elsePart[0] != '{')
205
+ $s .= ' ';
206
+
207
+ $s .= $elsePart;
208
+ }
209
+ break;
210
+
211
+ case KEYWORD_SWITCH:
212
+ $s = 'switch(' . $this->parseTree($n->discriminant) . '){';
213
+ $cases = $n->cases;
214
+ for ($i = 0, $j = count($cases); $i < $j; $i++)
215
+ {
216
+ $case = $cases[$i];
217
+ if ($case->type == KEYWORD_CASE)
218
+ $s .= 'case' . ($case->caseLabel->type != TOKEN_STRING ? ' ' : '') . $this->parseTree($case->caseLabel) . ':';
219
+ else
220
+ $s .= 'default:';
221
+
222
+ $statement = $this->parseTree($case->statements);
223
+ if ($statement)
224
+ $s .= $statement . ';';
225
+ }
226
+ $s = rtrim($s, ';') . '}';
227
+ break;
228
+
229
+ case KEYWORD_FOR:
230
+ $s = 'for(' . ($n->setup ? $this->parseTree($n->setup) : '')
231
+ . ';' . ($n->condition ? $this->parseTree($n->condition) : '')
232
+ . ';' . ($n->update ? $this->parseTree($n->update) : '') . ')'
233
+ . $this->parseTree($n->body);
234
+ break;
235
+
236
+ case KEYWORD_WHILE:
237
+ $s = 'while(' . $this->parseTree($n->condition) . ')' . $this->parseTree($n->body);
238
+ break;
239
+
240
+ case JS_FOR_IN:
241
+ $s = 'for(' . ($n->varDecl ? $this->parseTree($n->varDecl) : $this->parseTree($n->iterator)) . ' in ' . $this->parseTree($n->object) . ')' . $this->parseTree($n->body);
242
+ break;
243
+
244
+ case KEYWORD_DO:
245
+ $s = 'do{' . $this->parseTree($n->body, true) . '}while(' . $this->parseTree($n->condition) . ')';
246
+ break;
247
+
248
+ case KEYWORD_BREAK:
249
+ case KEYWORD_CONTINUE:
250
+ $s = $n->value . ($n->label ? ' ' . $n->label : '');
251
+ break;
252
+
253
+ case KEYWORD_TRY:
254
+ $s = 'try{' . $this->parseTree($n->tryBlock, true) . '}';
255
+ $catchClauses = $n->catchClauses;
256
+ for ($i = 0, $j = count($catchClauses); $i < $j; $i++)
257
+ {
258
+ $t = $catchClauses[$i];
259
+ $s .= 'catch(' . $t->varName . ($t->guard ? ' if ' . $this->parseTree($t->guard) : '') . '){' . $this->parseTree($t->block, true) . '}';
260
+ }
261
+ if ($n->finallyBlock)
262
+ $s .= 'finally{' . $this->parseTree($n->finallyBlock, true) . '}';
263
+ break;
264
+
265
+ case KEYWORD_THROW:
266
+ $s = 'throw ' . $this->parseTree($n->exception);
267
+ break;
268
+
269
+ case KEYWORD_RETURN:
270
+ $s = 'return' . ($n->value ? ' ' . $this->parseTree($n->value) : '');
271
+ break;
272
+
273
+ case KEYWORD_WITH:
274
+ $s = 'with(' . $this->parseTree($n->object) . ')' . $this->parseTree($n->body);
275
+ break;
276
+
277
+ case KEYWORD_VAR:
278
+ case KEYWORD_CONST:
279
+ $s = $n->value . ' ';
280
+ $childs = $n->treeNodes;
281
+ for ($i = 0, $j = count($childs); $i < $j; $i++)
282
+ {
283
+ $t = $childs[$i];
284
+ $s .= ($i ? ',' : '') . $t->name;
285
+ $u = $t->initializer;
286
+ if ($u)
287
+ $s .= '=' . $this->parseTree($u);
288
+ }
289
+ break;
290
+
291
+ case KEYWORD_DEBUGGER:
292
+ throw new Exception('NOT IMPLEMENTED: DEBUGGER');
293
+ break;
294
+
295
+ case TOKEN_CONDCOMMENT_MULTILINE:
296
+ $s = $n->value . ' ';
297
+ $childs = $n->treeNodes;
298
+ for ($i = 0, $j = count($childs); $i < $j; $i++)
299
+ $s .= $this->parseTree($childs[$i]);
300
+ break;
301
+
302
+ case OP_SEMICOLON:
303
+ if ($expression = $n->expression)
304
+ $s = $this->parseTree($expression);
305
+ break;
306
+
307
+ case JS_LABEL:
308
+ $s = $n->label . ':' . $this->parseTree($n->statement);
309
+ break;
310
+
311
+ case OP_COMMA:
312
+ $childs = $n->treeNodes;
313
+ for ($i = 0, $j = count($childs); $i < $j; $i++)
314
+ $s .= ($i ? ',' : '') . $this->parseTree($childs[$i]);
315
+ break;
316
+
317
+ case OP_ASSIGN:
318
+ $s = $this->parseTree($n->treeNodes[0]) . $n->value . $this->parseTree($n->treeNodes[1]);
319
+ break;
320
+
321
+ case OP_HOOK:
322
+ $s = $this->parseTree($n->treeNodes[0]) . '?' . $this->parseTree($n->treeNodes[1]) . ':' . $this->parseTree($n->treeNodes[2]);
323
+ break;
324
+
325
+ case OP_OR: case OP_AND:
326
+ case OP_BITWISE_OR: case OP_BITWISE_XOR: case OP_BITWISE_AND:
327
+ case OP_EQ: case OP_NE: case OP_STRICT_EQ: case OP_STRICT_NE:
328
+ case OP_LT: case OP_LE: case OP_GE: case OP_GT:
329
+ case OP_LSH: case OP_RSH: case OP_URSH:
330
+ case OP_MUL: case OP_DIV: case OP_MOD:
331
+ $s = $this->parseTree($n->treeNodes[0]) . $n->type . $this->parseTree($n->treeNodes[1]);
332
+ break;
333
+
334
+ case OP_PLUS:
335
+ case OP_MINUS:
336
+ $s = $this->parseTree($n->treeNodes[0]) . $n->type;
337
+ $nextTokenType = $n->treeNodes[1]->type;
338
+ if ( $nextTokenType == OP_PLUS || $nextTokenType == OP_MINUS ||
339
+ $nextTokenType == OP_INCREMENT || $nextTokenType == OP_DECREMENT ||
340
+ $nextTokenType == OP_UNARY_PLUS || $nextTokenType == OP_UNARY_MINUS
341
+ )
342
+ $s .= ' ';
343
+ $s .= $this->parseTree($n->treeNodes[1]);
344
+ break;
345
+
346
+ case KEYWORD_IN:
347
+ $s = $this->parseTree($n->treeNodes[0]) . ' in ' . $this->parseTree($n->treeNodes[1]);
348
+ break;
349
+
350
+ case KEYWORD_INSTANCEOF:
351
+ $s = $this->parseTree($n->treeNodes[0]) . ' instanceof ' . $this->parseTree($n->treeNodes[1]);
352
+ break;
353
+
354
+ case KEYWORD_DELETE:
355
+ $s = 'delete ' . $this->parseTree($n->treeNodes[0]);
356
+ break;
357
+
358
+ case KEYWORD_VOID:
359
+ $s = 'void(' . $this->parseTree($n->treeNodes[0]) . ')';
360
+ break;
361
+
362
+ case KEYWORD_TYPEOF:
363
+ $s = 'typeof ' . $this->parseTree($n->treeNodes[0]);
364
+ break;
365
+
366
+ case OP_NOT:
367
+ case OP_BITWISE_NOT:
368
+ case OP_UNARY_PLUS:
369
+ case OP_UNARY_MINUS:
370
+ $s = $n->value . $this->parseTree($n->treeNodes[0]);
371
+ break;
372
+
373
+ case OP_INCREMENT:
374
+ case OP_DECREMENT:
375
+ if ($n->postfix)
376
+ $s = $this->parseTree($n->treeNodes[0]) . $n->value;
377
+ else
378
+ $s = $n->value . $this->parseTree($n->treeNodes[0]);
379
+ break;
380
+
381
+ case OP_DOT:
382
+ $s = $this->parseTree($n->treeNodes[0]) . '.' . $this->parseTree($n->treeNodes[1]);
383
+ break;
384
+
385
+ case JS_INDEX:
386
+ $s = $this->parseTree($n->treeNodes[0]);
387
+ // See if we can replace named index with a dot saving 3 bytes
388
+ if ( $n->treeNodes[0]->type == TOKEN_IDENTIFIER &&
389
+ $n->treeNodes[1]->type == TOKEN_STRING &&
390
+ $this->isValidIdentifier(substr($n->treeNodes[1]->value, 1, -1))
391
+ )
392
+ $s .= '.' . substr($n->treeNodes[1]->value, 1, -1);
393
+ else
394
+ $s .= '[' . $this->parseTree($n->treeNodes[1]) . ']';
395
+ break;
396
+
397
+ case JS_LIST:
398
+ $childs = $n->treeNodes;
399
+ for ($i = 0, $j = count($childs); $i < $j; $i++)
400
+ $s .= ($i ? ',' : '') . $this->parseTree($childs[$i]);
401
+ break;
402
+
403
+ case JS_CALL:
404
+ $s = $this->parseTree($n->treeNodes[0]) . '(' . $this->parseTree($n->treeNodes[1]) . ')';
405
+ break;
406
+
407
+ case KEYWORD_NEW:
408
+ case JS_NEW_WITH_ARGS:
409
+ $s = 'new ' . $this->parseTree($n->treeNodes[0]) . '(' . ($n->type == JS_NEW_WITH_ARGS ? $this->parseTree($n->treeNodes[1]) : '') . ')';
410
+ break;
411
+
412
+ case JS_ARRAY_INIT:
413
+ $s = '[';
414
+ $childs = $n->treeNodes;
415
+ for ($i = 0, $j = count($childs); $i < $j; $i++)
416
+ {
417
+ $s .= ($i ? ',' : '') . $this->parseTree($childs[$i]);
418
+ }
419
+ $s .= ']';
420
+ break;
421
+
422
+ case JS_OBJECT_INIT:
423
+ $s = '{';
424
+ $childs = $n->treeNodes;
425
+ for ($i = 0, $j = count($childs); $i < $j; $i++)
426
+ {
427
+ $t = $childs[$i];
428
+ if ($i)
429
+ $s .= ',';
430
+ if ($t->type == JS_PROPERTY_INIT)
431
+ {
432
+ // Ditch the quotes when the index is a valid identifier
433
+ if ( $t->treeNodes[0]->type == TOKEN_STRING &&
434
+ $this->isValidIdentifier(substr($t->treeNodes[0]->value, 1, -1))
435
+ )
436
+ $s .= substr($t->treeNodes[0]->value, 1, -1);
437
+ else
438
+ $s .= $t->treeNodes[0]->value;
439
+
440
+ $s .= ':' . $this->parseTree($t->treeNodes[1]);
441
+ }
442
+ else
443
+ {
444
+ $s .= $t->type == JS_GETTER ? 'get' : 'set';
445
+ $s .= ' ' . $t->name . '(';
446
+ $params = $t->params;
447
+ for ($i = 0, $j = count($params); $i < $j; $i++)
448
+ $s .= ($i ? ',' : '') . $params[$i];
449
+ $s .= '){' . $this->parseTree($t->body, true) . '}';
450
+ }
451
+ }
452
+ $s .= '}';
453
+ break;
454
+
455
+ case KEYWORD_NULL: case KEYWORD_THIS: case KEYWORD_TRUE: case KEYWORD_FALSE:
456
+ case TOKEN_IDENTIFIER: case TOKEN_NUMBER: case TOKEN_STRING: case TOKEN_REGEXP:
457
+ $s = $n->value;
458
+ break;
459
+
460
+ case JS_GROUP:
461
+ $s = '(' . $this->parseTree($n->treeNodes[0]) . ')';
462
+ break;
463
+
464
+ default:
465
+ throw new Exception('UNKNOWN TOKEN TYPE: ' . $n->type);
466
+ }
467
+
468
+ return $s;
469
+ }
470
+
471
+ private function isValidIdentifier($string)
472
+ {
473
+ return preg_match('/^[a-zA-Z_][a-zA-Z0-9_]*$/', $string) && !in_array($string, $this->reserved);
474
+ }
475
+ }
476
+
477
+ class JSParser
478
+ {
479
+ private $t;
480
+
481
+ private $opPrecedence = array(
482
+ ';' => 0,
483
+ ',' => 1,
484
+ '=' => 2, '?' => 2, ':' => 2,
485
+ // The above all have to have the same precedence, see bug 330975.
486
+ '||' => 4,
487
+ '&&' => 5,
488
+ '|' => 6,
489
+ '^' => 7,
490
+ '&' => 8,
491
+ '==' => 9, '!=' => 9, '===' => 9, '!==' => 9,
492
+ '<' => 10, '<=' => 10, '>=' => 10, '>' => 10, 'in' => 10, 'instanceof' => 10,
493
+ '<<' => 11, '>>' => 11, '>>>' => 11,
494
+ '+' => 12, '-' => 12,
495
+ '*' => 13, '/' => 13, '%' => 13,
496
+ 'delete' => 14, 'void' => 14, 'typeof' => 14,
497
+ '!' => 14, '~' => 14, 'U+' => 14, 'U-' => 14,
498
+ '++' => 15, '--' => 15,
499
+ 'new' => 16,
500
+ '.' => 17,
501
+ JS_NEW_WITH_ARGS => 0, JS_INDEX => 0, JS_CALL => 0,
502
+ JS_ARRAY_INIT => 0, JS_OBJECT_INIT => 0, JS_GROUP => 0
503
+ );
504
+
505
+ private $opArity = array(
506
+ ',' => -2,
507
+ '=' => 2,
508
+ '?' => 3,
509
+ '||' => 2,
510
+ '&&' => 2,
511
+ '|' => 2,
512
+ '^' => 2,
513
+ '&' => 2,
514
+ '==' => 2, '!=' => 2, '===' => 2, '!==' => 2,
515
+ '<' => 2, '<=' => 2, '>=' => 2, '>' => 2, 'in' => 2, 'instanceof' => 2,
516
+ '<<' => 2, '>>' => 2, '>>>' => 2,
517
+ '+' => 2, '-' => 2,
518
+ '*' => 2, '/' => 2, '%' => 2,
519
+ 'delete' => 1, 'void' => 1, 'typeof' => 1,
520
+ '!' => 1, '~' => 1, 'U+' => 1, 'U-' => 1,
521
+ '++' => 1, '--' => 1,
522
+ 'new' => 1,
523
+ '.' => 2,
524
+ JS_NEW_WITH_ARGS => 2, JS_INDEX => 2, JS_CALL => 2,
525
+ JS_ARRAY_INIT => 1, JS_OBJECT_INIT => 1, JS_GROUP => 1,
526
+ TOKEN_CONDCOMMENT_MULTILINE => 1
527
+ );
528
+
529
+ public function __construct()
530
+ {
531
+ $this->t = new JSTokenizer();
532
+ }
533
+
534
+ public function parse($s, $f, $l)
535
+ {
536
+ // initialize tokenizer
537
+ $this->t->init($s, $f, $l);
538
+
539
+ $x = new JSCompilerContext(false);
540
+ $n = $this->Script($x);
541
+ if (!$this->t->isDone())
542
+ throw $this->t->newSyntaxError('Syntax error');
543
+
544
+ return $n;
545
+ }
546
+
547
+ private function Script($x)
548
+ {
549
+ $n = $this->Statements($x);
550
+ $n->type = JS_SCRIPT;
551
+ $n->funDecls = $x->funDecls;
552
+ $n->varDecls = $x->varDecls;
553
+
554
+ return $n;
555
+ }
556
+
557
+ private function Statements($x)
558
+ {
559
+ $n = new JSNode($this->t, JS_BLOCK);
560
+ array_push($x->stmtStack, $n);
561
+
562
+ while (!$this->t->isDone() && $this->t->peek() != OP_RIGHT_CURLY)
563
+ $n->addNode($this->Statement($x));
564
+
565
+ array_pop($x->stmtStack);
566
+
567
+ return $n;
568
+ }
569
+
570
+ private function Block($x)
571
+ {
572
+ $this->t->mustMatch(OP_LEFT_CURLY);
573
+ $n = $this->Statements($x);
574
+ $this->t->mustMatch(OP_RIGHT_CURLY);
575
+
576
+ return $n;
577
+ }
578
+
579
+ private function Statement($x)
580
+ {
581
+ $tt = $this->t->get();
582
+ $n2 = null;
583
+
584
+ // Cases for statements ending in a right curly return early, avoiding the
585
+ // common semicolon insertion magic after this switch.
586
+ switch ($tt)
587
+ {
588
+ case KEYWORD_FUNCTION:
589
+ return $this->FunctionDefinition(
590
+ $x,
591
+ true,
592
+ count($x->stmtStack) > 1 ? STATEMENT_FORM : DECLARED_FORM
593
+ );
594
+ break;
595
+
596
+ case OP_LEFT_CURLY:
597
+ $n = $this->Statements($x);
598
+ $this->t->mustMatch(OP_RIGHT_CURLY);
599
+ return $n;
600
+
601
+ case KEYWORD_IF:
602
+ $n = new JSNode($this->t);
603
+ $n->condition = $this->ParenExpression($x);
604
+ array_push($x->stmtStack, $n);
605
+ $n->thenPart = $this->Statement($x);
606
+ $n->elsePart = $this->t->match(KEYWORD_ELSE) ? $this->Statement($x) : null;
607
+ array_pop($x->stmtStack);
608
+ return $n;
609
+
610
+ case KEYWORD_SWITCH:
611
+ $n = new JSNode($this->t);
612
+ $this->t->mustMatch(OP_LEFT_PAREN);
613
+ $n->discriminant = $this->Expression($x);
614
+ $this->t->mustMatch(OP_RIGHT_PAREN);
615
+ $n->cases = array();
616
+ $n->defaultIndex = -1;
617
+
618
+ array_push($x->stmtStack, $n);
619
+
620
+ $this->t->mustMatch(OP_LEFT_CURLY);
621
+
622
+ while (($tt = $this->t->get()) != OP_RIGHT_CURLY)
623
+ {
624
+ switch ($tt)
625
+ {
626
+ case KEYWORD_DEFAULT:
627
+ if ($n->defaultIndex >= 0)
628
+ throw $this->t->newSyntaxError('More than one switch default');
629
+ // FALL THROUGH
630
+ case KEYWORD_CASE:
631
+ $n2 = new JSNode($this->t);
632
+ if ($tt == KEYWORD_DEFAULT)
633
+ $n->defaultIndex = count($n->cases);
634
+ else
635
+ $n2->caseLabel = $this->Expression($x, OP_COLON);
636
+ break;
637
+ default:
638
+ throw $this->t->newSyntaxError('Invalid switch case');
639
+ }
640
+
641
+ $this->t->mustMatch(OP_COLON);
642
+ $n2->statements = new JSNode($this->t, JS_BLOCK);
643
+ while (($tt = $this->t->peek()) != KEYWORD_CASE && $tt != KEYWORD_DEFAULT && $tt != OP_RIGHT_CURLY)
644
+ $n2->statements->addNode($this->Statement($x));
645
+
646
+ array_push($n->cases, $n2);
647
+ }
648
+
649
+ array_pop($x->stmtStack);
650
+ return $n;
651
+
652
+ case KEYWORD_FOR:
653
+ $n = new JSNode($this->t);
654
+ $n->isLoop = true;
655
+ $this->t->mustMatch(OP_LEFT_PAREN);
656
+
657
+ if (($tt = $this->t->peek()) != OP_SEMICOLON)
658
+ {
659
+ $x->inForLoopInit = true;
660
+ if ($tt == KEYWORD_VAR || $tt == KEYWORD_CONST)
661
+ {
662
+ $this->t->get();
663
+ $n2 = $this->Variables($x);
664
+ }
665
+ else
666
+ {
667
+ $n2 = $this->Expression($x);
668
+ }
669
+ $x->inForLoopInit = false;
670
+ }
671
+
672
+ if ($n2 && $this->t->match(KEYWORD_IN))
673
+ {
674
+ $n->type = JS_FOR_IN;
675
+ if ($n2->type == KEYWORD_VAR)
676
+ {
677
+ if (count($n2->treeNodes) != 1)
678
+ {
679
+ throw $this->t->SyntaxError(
680
+ 'Invalid for..in left-hand side',
681
+ $this->t->filename,
682
+ $n2->lineno
683
+ );
684
+ }
685
+
686
+ // NB: n2[0].type == IDENTIFIER and n2[0].value == n2[0].name.
687
+ $n->iterator = $n2->treeNodes[0];
688
+ $n->varDecl = $n2;
689
+ }
690
+ else
691
+ {
692
+ $n->iterator = $n2;
693
+ $n->varDecl = null;
694
+ }
695
+
696
+ $n->object = $this->Expression($x);
697
+ }
698
+ else
699
+ {
700
+ $n->setup = $n2 ? $n2 : null;
701
+ $this->t->mustMatch(OP_SEMICOLON);
702
+ $n->condition = $this->t->peek() == OP_SEMICOLON ? null : $this->Expression($x);
703
+ $this->t->mustMatch(OP_SEMICOLON);
704
+ $n->update = $this->t->peek() == OP_RIGHT_PAREN ? null : $this->Expression($x);
705
+ }
706
+
707
+ $this->t->mustMatch(OP_RIGHT_PAREN);
708
+ $n->body = $this->nest($x, $n);
709
+ return $n;
710
+
711
+ case KEYWORD_WHILE:
712
+ $n = new JSNode($this->t);
713
+ $n->isLoop = true;
714
+ $n->condition = $this->ParenExpression($x);
715
+ $n->body = $this->nest($x, $n);
716
+ return $n;
717
+
718
+ case KEYWORD_DO:
719
+ $n = new JSNode($this->t);
720
+ $n->isLoop = true;
721
+ $n->body = $this->nest($x, $n, KEYWORD_WHILE);
722
+ $n->condition = $this->ParenExpression($x);
723
+ if (!$x->ecmaStrictMode)
724
+ {
725
+ // <script language="JavaScript"> (without version hints) may need
726
+ // automatic semicolon insertion without a newline after do-while.
727
+ // See http://bugzilla.mozilla.org/show_bug.cgi?id=238945.
728
+ $this->t->match(OP_SEMICOLON);
729
+ return $n;
730
+ }
731
+ break;
732
+
733
+ case KEYWORD_BREAK:
734
+ case KEYWORD_CONTINUE:
735
+ $n = new JSNode($this->t);
736
+
737
+ if ($this->t->peekOnSameLine() == TOKEN_IDENTIFIER)
738
+ {
739
+ $this->t->get();
740
+ $n->label = $this->t->currentToken()->value;
741
+ }
742
+
743
+ $ss = $x->stmtStack;
744
+ $i = count($ss);
745
+ $label = $n->label;
746
+ if ($label)
747
+ {
748
+ do
749
+ {
750
+ if (--$i < 0)
751
+ throw $this->t->newSyntaxError('Label not found');
752
+ }
753
+ while ($ss[$i]->label != $label);
754
+ }
755
+ else
756
+ {
757
+ do
758
+ {
759
+ if (--$i < 0)
760
+ throw $this->t->newSyntaxError('Invalid ' . $tt);
761
+ }
762
+ while (!$ss[$i]->isLoop && ($tt != KEYWORD_BREAK || $ss[$i]->type != KEYWORD_SWITCH));
763
+ }
764
+
765
+ $n->target = $ss[$i];
766
+ break;
767
+
768
+ case KEYWORD_TRY:
769
+ $n = new JSNode($this->t);
770
+ $n->tryBlock = $this->Block($x);
771
+ $n->catchClauses = array();
772
+
773
+ while ($this->t->match(KEYWORD_CATCH))
774
+ {
775
+ $n2 = new JSNode($this->t);
776
+ $this->t->mustMatch(OP_LEFT_PAREN);
777
+ $n2->varName = $this->t->mustMatch(TOKEN_IDENTIFIER)->value;
778
+
779
+ if ($this->t->match(KEYWORD_IF))
780
+ {
781
+ if ($x->ecmaStrictMode)
782
+ throw $this->t->newSyntaxError('Illegal catch guard');
783
+
784
+ if (count($n->catchClauses) && !end($n->catchClauses)->guard)
785
+ throw $this->t->newSyntaxError('Guarded catch after unguarded');
786
+
787
+ $n2->guard = $this->Expression($x);
788
+ }
789
+ else
790
+ {
791
+ $n2->guard = null;
792
+ }
793
+
794
+ $this->t->mustMatch(OP_RIGHT_PAREN);
795
+ $n2->block = $this->Block($x);
796
+ array_push($n->catchClauses, $n2);
797
+ }
798
+
799
+ if ($this->t->match(KEYWORD_FINALLY))
800
+ $n->finallyBlock = $this->Block($x);
801
+
802
+ if (!count($n->catchClauses) && !$n->finallyBlock)
803
+ throw $this->t->newSyntaxError('Invalid try statement');
804
+ return $n;
805
+
806
+ case KEYWORD_CATCH:
807
+ case KEYWORD_FINALLY:
808
+ throw $this->t->newSyntaxError($tt + ' without preceding try');
809
+
810
+ case KEYWORD_THROW:
811
+ $n = new JSNode($this->t);
812
+ $n->exception = $this->Expression($x);
813
+ break;
814
+
815
+ case KEYWORD_RETURN:
816
+ if (!$x->inFunction)
817
+ throw $this->t->newSyntaxError('Invalid return');
818
+
819
+ $n = new JSNode($this->t);
820
+ $tt = $this->t->peekOnSameLine();
821
+ if ($tt != TOKEN_END && $tt != TOKEN_NEWLINE && $tt != OP_SEMICOLON && $tt != OP_RIGHT_CURLY)
822
+ $n->value = $this->Expression($x);
823
+ else
824
+ $n->value = null;
825
+ break;
826
+
827
+ case KEYWORD_WITH:
828
+ $n = new JSNode($this->t);
829
+ $n->object = $this->ParenExpression($x);
830
+ $n->body = $this->nest($x, $n);
831
+ return $n;
832
+
833
+ case KEYWORD_VAR:
834
+ case KEYWORD_CONST:
835
+ $n = $this->Variables($x);
836
+ break;
837
+
838
+ case TOKEN_CONDCOMMENT_MULTILINE:
839
+ $n = new JSNode($this->t);
840
+ return $n;
841
+
842
+ case KEYWORD_DEBUGGER:
843
+ $n = new JSNode($this->t);
844
+ break;
845
+
846
+ case TOKEN_NEWLINE:
847
+ case OP_SEMICOLON:
848
+ $n = new JSNode($this->t, OP_SEMICOLON);
849
+ $n->expression = null;
850
+ return $n;
851
+
852
+ default:
853
+ if ($tt == TOKEN_IDENTIFIER)
854
+ {
855
+ $this->t->scanOperand = false;
856
+ $tt = $this->t->peek();
857
+ $this->t->scanOperand = true;
858
+ if ($tt == OP_COLON)
859
+ {
860
+ $label = $this->t->currentToken()->value;
861
+ $ss = $x->stmtStack;
862
+ for ($i = count($ss) - 1; $i >= 0; --$i)
863
+ {
864
+ if ($ss[$i]->label == $label)
865
+ throw $this->t->newSyntaxError('Duplicate label');
866
+ }
867
+
868
+ $this->t->get();
869
+ $n = new JSNode($this->t, JS_LABEL);
870
+ $n->label = $label;
871
+ $n->statement = $this->nest($x, $n);
872
+
873
+ return $n;
874
+ }
875
+ }
876
+
877
+ $n = new JSNode($this->t, OP_SEMICOLON);
878
+ $this->t->unget();
879
+ $n->expression = $this->Expression($x);
880
+ $n->end = $n->expression->end;
881
+ break;
882
+ }
883
+
884
+ if ($this->t->lineno == $this->t->currentToken()->lineno)
885
+ {
886
+ $tt = $this->t->peekOnSameLine();
887
+ if ($tt != TOKEN_END && $tt != TOKEN_NEWLINE && $tt != OP_SEMICOLON && $tt != OP_RIGHT_CURLY)
888
+ throw $this->t->newSyntaxError('Missing ; before statement');
889
+ }
890
+
891
+ $this->t->match(OP_SEMICOLON);
892
+
893
+ return $n;
894
+ }
895
+
896
+ private function FunctionDefinition($x, $requireName, $functionForm)
897
+ {
898
+ $f = new JSNode($this->t);
899
+
900
+ if ($f->type != KEYWORD_FUNCTION)
901
+ $f->type = ($f->value == 'get') ? JS_GETTER : JS_SETTER;
902
+
903
+ if ($this->t->match(TOKEN_IDENTIFIER))
904
+ $f->name = $this->t->currentToken()->value;
905
+ elseif ($requireName)
906
+ throw $this->t->newSyntaxError('Missing function identifier');
907
+
908
+ $this->t->mustMatch(OP_LEFT_PAREN);
909
+ $f->params = array();
910
+
911
+ while (($tt = $this->t->get()) != OP_RIGHT_PAREN)
912
+ {
913
+ if ($tt != TOKEN_IDENTIFIER)
914
+ throw $this->t->newSyntaxError('Missing formal parameter');
915
+
916
+ array_push($f->params, $this->t->currentToken()->value);
917
+
918
+ if ($this->t->peek() != OP_RIGHT_PAREN)
919
+ $this->t->mustMatch(OP_COMMA);
920
+ }
921
+
922
+ $this->t->mustMatch(OP_LEFT_CURLY);
923
+
924
+ $x2 = new JSCompilerContext(true);
925
+ $f->body = $this->Script($x2);
926
+
927
+ $this->t->mustMatch(OP_RIGHT_CURLY);
928
+ $f->end = $this->t->currentToken()->end;
929
+
930
+ $f->functionForm = $functionForm;
931
+ if ($functionForm == DECLARED_FORM)
932
+ array_push($x->funDecls, $f);
933
+
934
+ return $f;
935
+ }
936
+
937
+ private function Variables($x)
938
+ {
939
+ $n = new JSNode($this->t);
940
+
941
+ do
942
+ {
943
+ $this->t->mustMatch(TOKEN_IDENTIFIER);
944
+
945
+ $n2 = new JSNode($this->t);
946
+ $n2->name = $n2->value;
947
+
948
+ if ($this->t->match(OP_ASSIGN))
949
+ {
950
+ if ($this->t->currentToken()->assignOp)
951
+ throw $this->t->newSyntaxError('Invalid variable initialization');
952
+
953
+ $n2->initializer = $this->Expression($x, OP_COMMA);
954
+ }
955
+
956
+ $n2->readOnly = $n->type == KEYWORD_CONST;
957
+
958
+ $n->addNode($n2);
959
+ array_push($x->varDecls, $n2);
960
+ }
961
+ while ($this->t->match(OP_COMMA));
962
+
963
+ return $n;
964
+ }
965
+
966
+ private function Expression($x, $stop=false)
967
+ {
968
+ $operators = array();
969
+ $operands = array();
970
+ $n = false;
971
+
972
+ $bl = $x->bracketLevel;
973
+ $cl = $x->curlyLevel;
974
+ $pl = $x->parenLevel;
975
+ $hl = $x->hookLevel;
976
+
977
+ while (($tt = $this->t->get()) != TOKEN_END)
978
+ {
979
+ if ($tt == $stop &&
980
+ $x->bracketLevel == $bl &&
981
+ $x->curlyLevel == $cl &&
982
+ $x->parenLevel == $pl &&
983
+ $x->hookLevel == $hl
984
+ )
985
+ {
986
+ // Stop only if tt matches the optional stop parameter, and that
987
+ // token is not quoted by some kind of bracket.
988
+ break;
989
+ }
990
+
991
+ switch ($tt)
992
+ {
993
+ case OP_SEMICOLON:
994
+ // NB: cannot be empty, Statement handled that.
995
+ break 2;
996
+
997
+ case OP_ASSIGN:
998
+ case OP_HOOK:
999
+ case OP_COLON:
1000
+ if ($this->t->scanOperand)
1001
+ break 2;
1002
+
1003
+ // Use >, not >=, for right-associative ASSIGN and HOOK/COLON.
1004
+ while ( !empty($operators) &&
1005
+ ( $this->opPrecedence[end($operators)->type] > $this->opPrecedence[$tt] ||
1006
+ ($tt == OP_COLON && end($operators)->type == OP_ASSIGN)
1007
+ )
1008
+ )
1009
+ $this->reduce($operators, $operands);
1010
+
1011
+ if ($tt == OP_COLON)
1012
+ {
1013
+ $n = end($operators);
1014
+ if ($n->type != OP_HOOK)
1015
+ throw $this->t->newSyntaxError('Invalid label');
1016
+
1017
+ --$x->hookLevel;
1018
+ }
1019
+ else
1020
+ {
1021
+ array_push($operators, new JSNode($this->t));
1022
+ if ($tt == OP_ASSIGN)
1023
+ end($operands)->assignOp = $this->t->currentToken()->assignOp;
1024
+ else
1025
+ ++$x->hookLevel;
1026
+ }
1027
+
1028
+ $this->t->scanOperand = true;
1029
+ break;
1030
+
1031
+ case KEYWORD_IN:
1032
+ // An in operator should not be parsed if we're parsing the head of
1033
+ // a for (...) loop, unless it is in the then part of a conditional
1034
+ // expression, or parenthesized somehow.
1035
+ if ($x->inForLoopInit && !$x->hookLevel &&
1036
+ !$x->bracketLevel && !$x->curlyLevel &&
1037
+ !$x->parenLevel
1038
+ )
1039
+ {
1040
+ break 2;
1041
+ }
1042
+ // FALL THROUGH
1043
+ case OP_COMMA:
1044
+ // Treat comma as left-associative so reduce can fold left-heavy
1045
+ // COMMA trees into a single array.
1046
+ // FALL THROUGH
1047
+ case OP_OR:
1048
+ case OP_AND:
1049
+ case OP_BITWISE_OR:
1050
+ case OP_BITWISE_XOR:
1051
+ case OP_BITWISE_AND:
1052
+ case OP_EQ: case OP_NE: case OP_STRICT_EQ: case OP_STRICT_NE:
1053
+ case OP_LT: case OP_LE: case OP_GE: case OP_GT:
1054
+ case KEYWORD_INSTANCEOF:
1055
+ case OP_LSH: case OP_RSH: case OP_URSH:
1056
+ case OP_PLUS: case OP_MINUS:
1057
+ case OP_MUL: case OP_DIV: case OP_MOD:
1058
+ case OP_DOT:
1059
+ if ($this->t->scanOperand)
1060
+ break 2;
1061
+
1062
+ while ( !empty($operators) &&
1063
+ $this->opPrecedence[end($operators)->type] >= $this->opPrecedence[$tt]
1064
+ )
1065
+ $this->reduce($operators, $operands);
1066
+
1067
+ if ($tt == OP_DOT)
1068
+ {
1069
+ $this->t->mustMatch(TOKEN_IDENTIFIER);
1070
+ array_push($operands, new JSNode($this->t, OP_DOT, array_pop($operands), new JSNode($this->t)));
1071
+ }
1072
+ else
1073
+ {
1074
+ array_push($operators, new JSNode($this->t));
1075
+ $this->t->scanOperand = true;
1076
+ }
1077
+ break;
1078
+
1079
+ case KEYWORD_DELETE: case KEYWORD_VOID: case KEYWORD_TYPEOF:
1080
+ case OP_NOT: case OP_BITWISE_NOT: case OP_UNARY_PLUS: case OP_UNARY_MINUS:
1081
+ case KEYWORD_NEW:
1082
+ if (!$this->t->scanOperand)
1083
+ break 2;
1084
+
1085
+ array_push($operators, new JSNode($this->t));
1086
+ break;
1087
+
1088
+ case OP_INCREMENT: case OP_DECREMENT:
1089
+ if ($this->t->scanOperand)
1090
+ {
1091
+ array_push($operators, new JSNode($this->t)); // prefix increment or decrement
1092
+ }
1093
+ else
1094
+ {
1095
+ // Don't cross a line boundary for postfix {in,de}crement.
1096
+ $t = $this->t->tokens[($this->t->tokenIndex + $this->t->lookahead - 1) & 3];
1097
+ if ($t && $t->lineno != $this->t->lineno)
1098
+ break 2;
1099
+
1100
+ if (!empty($operators))
1101
+ {
1102
+ // Use >, not >=, so postfix has higher precedence than prefix.
1103
+ while ($this->opPrecedence[end($operators)->type] > $this->opPrecedence[$tt])
1104
+ $this->reduce($operators, $operands);
1105
+ }
1106
+
1107
+ $n = new JSNode($this->t, $tt, array_pop($operands));
1108
+ $n->postfix = true;
1109
+ array_push($operands, $n);
1110
+ }
1111
+ break;
1112
+
1113
+ case KEYWORD_FUNCTION:
1114
+ if (!$this->t->scanOperand)
1115
+ break 2;
1116
+
1117
+ array_push($operands, $this->FunctionDefinition($x, false, EXPRESSED_FORM));
1118
+ $this->t->scanOperand = false;
1119
+ break;
1120
+
1121
+ case KEYWORD_NULL: case KEYWORD_THIS: case KEYWORD_TRUE: case KEYWORD_FALSE:
1122
+ case TOKEN_IDENTIFIER: case TOKEN_NUMBER: case TOKEN_STRING: case TOKEN_REGEXP:
1123
+ if (!$this->t->scanOperand)
1124
+ break 2;
1125
+
1126
+ array_push($operands, new JSNode($this->t));
1127
+ $this->t->scanOperand = false;
1128
+ break;
1129
+
1130
+ case TOKEN_CONDCOMMENT_MULTILINE:
1131
+ if ($this->t->scanOperand)
1132
+ array_push($operators, new JSNode($this->t));
1133
+ else
1134
+ array_push($operands, new JSNode($this->t));
1135
+ break;
1136
+
1137
+ case OP_LEFT_BRACKET:
1138
+ if ($this->t->scanOperand)
1139
+ {
1140
+ // Array initialiser. Parse using recursive descent, as the
1141
+ // sub-grammar here is not an operator grammar.
1142
+ $n = new JSNode($this->t, JS_ARRAY_INIT);
1143
+ while (($tt = $this->t->peek()) != OP_RIGHT_BRACKET)
1144
+ {
1145
+ if ($tt == OP_COMMA)
1146
+ {
1147
+ $this->t->get();
1148
+ $n->addNode(null);
1149
+ continue;
1150
+ }
1151
+
1152
+ $n->addNode($this->Expression($x, OP_COMMA));
1153
+ if (!$this->t->match(OP_COMMA))
1154
+ break;
1155
+ }
1156
+
1157
+ $this->t->mustMatch(OP_RIGHT_BRACKET);
1158
+ array_push($operands, $n);
1159
+ $this->t->scanOperand = false;
1160
+ }
1161
+ else
1162
+ {
1163
+ // Property indexing operator.
1164
+ array_push($operators, new JSNode($this->t, JS_INDEX));
1165
+ $this->t->scanOperand = true;
1166
+ ++$x->bracketLevel;
1167
+ }
1168
+ break;
1169
+
1170
+ case OP_RIGHT_BRACKET:
1171
+ if ($this->t->scanOperand || $x->bracketLevel == $bl)
1172
+ break 2;
1173
+
1174
+ while ($this->reduce($operators, $operands)->type != JS_INDEX)
1175
+ continue;
1176
+
1177
+ --$x->bracketLevel;
1178
+ break;
1179
+
1180
+ case OP_LEFT_CURLY:
1181
+ if (!$this->t->scanOperand)
1182
+ break 2;
1183
+
1184
+ // Object initialiser. As for array initialisers (see above),
1185
+ // parse using recursive descent.
1186
+ ++$x->curlyLevel;
1187
+ $n = new JSNode($this->t, JS_OBJECT_INIT);
1188
+ while (!$this->t->match(OP_RIGHT_CURLY))
1189
+ {
1190
+ do
1191
+ {
1192
+ $tt = $this->t->get();
1193
+ $tv = $this->t->currentToken()->value;
1194
+ if (($tv == 'get' || $tv == 'set') && $this->t->peek() == TOKEN_IDENTIFIER)
1195
+ {
1196
+ if ($x->ecmaStrictMode)
1197
+ throw $this->t->newSyntaxError('Illegal property accessor');
1198
+
1199
+ $n->addNode($this->FunctionDefinition($x, true, EXPRESSED_FORM));
1200
+ }
1201
+ else
1202
+ {
1203
+ switch ($tt)
1204
+ {
1205
+ case TOKEN_IDENTIFIER:
1206
+ case TOKEN_NUMBER:
1207
+ case TOKEN_STRING:
1208
+ $id = new JSNode($this->t);
1209
+ break;
1210
+
1211
+ case OP_RIGHT_CURLY:
1212
+ if ($x->ecmaStrictMode)
1213
+ throw $this->t->newSyntaxError('Illegal trailing ,');
1214
+ break 3;
1215
+
1216
+ default:
1217
+ throw $this->t->newSyntaxError('Invalid property name');
1218
+ }
1219
+
1220
+ $this->t->mustMatch(OP_COLON);
1221
+ $n->addNode(new JSNode($this->t, JS_PROPERTY_INIT, $id, $this->Expression($x, OP_COMMA)));
1222
+ }
1223
+ }
1224
+ while ($this->t->match(OP_COMMA));
1225
+
1226
+ $this->t->mustMatch(OP_RIGHT_CURLY);
1227
+ break;
1228
+ }
1229
+
1230
+ array_push($operands, $n);
1231
+ $this->t->scanOperand = false;
1232
+ --$x->curlyLevel;
1233
+ break;
1234
+
1235
+ case OP_RIGHT_CURLY:
1236
+ if (!$this->t->scanOperand && $x->curlyLevel != $cl)
1237
+ throw new Exception('PANIC: right curly botch');
1238
+ break 2;
1239
+
1240
+ case OP_LEFT_PAREN:
1241
+ if ($this->t->scanOperand)
1242
+ {
1243
+ array_push($operators, new JSNode($this->t, JS_GROUP));
1244
+ }
1245
+ else
1246
+ {
1247
+ while ( !empty($operators) &&
1248
+ $this->opPrecedence[end($operators)->type] > $this->opPrecedence[KEYWORD_NEW]
1249
+ )
1250
+ $this->reduce($operators, $operands);
1251
+
1252
+ // Handle () now, to regularize the n-ary case for n > 0.
1253
+ // We must set scanOperand in case there are arguments and
1254
+ // the first one is a regexp or unary+/-.
1255
+ $n = end($operators);
1256
+ $this->t->scanOperand = true;
1257
+ if ($this->t->match(OP_RIGHT_PAREN))
1258
+ {
1259
+ if ($n && $n->type == KEYWORD_NEW)
1260
+ {
1261
+ array_pop($operators);
1262
+ $n->addNode(array_pop($operands));
1263
+ }
1264
+ else
1265
+ {
1266
+ $n = new JSNode($this->t, JS_CALL, array_pop($operands), new JSNode($this->t, JS_LIST));
1267
+ }
1268
+
1269
+ array_push($operands, $n);
1270
+ $this->t->scanOperand = false;
1271
+ break;
1272
+ }
1273
+
1274
+ if ($n && $n->type == KEYWORD_NEW)
1275
+ $n->type = JS_NEW_WITH_ARGS;
1276
+ else
1277
+ array_push($operators, new JSNode($this->t, JS_CALL));
1278
+ }
1279
+
1280
+ ++$x->parenLevel;
1281
+ break;
1282
+
1283
+ case OP_RIGHT_PAREN:
1284
+ if ($this->t->scanOperand || $x->parenLevel == $pl)
1285
+ break 2;
1286
+
1287
+ while (($tt = $this->reduce($operators, $operands)->type) != JS_GROUP &&
1288
+ $tt != JS_CALL && $tt != JS_NEW_WITH_ARGS
1289
+ )
1290
+ {
1291
+ continue;
1292
+ }
1293
+
1294
+ if ($tt != JS_GROUP)
1295
+ {
1296
+ $n = end($operands);
1297
+ if ($n->treeNodes[1]->type != OP_COMMA)
1298
+ $n->treeNodes[1] = new JSNode($this->t, JS_LIST, $n->treeNodes[1]);
1299
+ else
1300
+ $n->treeNodes[1]->type = JS_LIST;
1301
+ }
1302
+
1303
+ --$x->parenLevel;
1304
+ break;
1305
+
1306
+ // Automatic semicolon insertion means we may scan across a newline
1307
+ // and into the beginning of another statement. If so, break out of
1308
+ // the while loop and let the t.scanOperand logic handle errors.
1309
+ default:
1310
+ break 2;
1311
+ }
1312
+ }
1313
+
1314
+ if ($x->hookLevel != $hl)
1315
+ throw $this->t->newSyntaxError('Missing : after ?');
1316
+
1317
+ if ($x->parenLevel != $pl)
1318
+ throw $this->t->newSyntaxError('Missing ) in parenthetical');
1319
+
1320
+ if ($x->bracketLevel != $bl)
1321
+ throw $this->t->newSyntaxError('Missing ] in index expression');
1322
+
1323
+ if ($this->t->scanOperand)
1324
+ throw $this->t->newSyntaxError('Missing operand');
1325
+
1326
+ // Resume default mode, scanning for operands, not operators.
1327
+ $this->t->scanOperand = true;
1328
+ $this->t->unget();
1329
+
1330
+ while (count($operators))
1331
+ $this->reduce($operators, $operands);
1332
+
1333
+ return array_pop($operands);
1334
+ }
1335
+
1336
+ private function ParenExpression($x)
1337
+ {
1338
+ $this->t->mustMatch(OP_LEFT_PAREN);
1339
+ $n = $this->Expression($x);
1340
+ $this->t->mustMatch(OP_RIGHT_PAREN);
1341
+
1342
+ return $n;
1343
+ }
1344
+
1345
+ // Statement stack and nested statement handler.
1346
+ private function nest($x, $node, $end = false)
1347
+ {
1348
+ array_push($x->stmtStack, $node);
1349
+ $n = $this->statement($x);
1350
+ array_pop($x->stmtStack);
1351
+
1352
+ if ($end)
1353
+ $this->t->mustMatch($end);
1354
+
1355
+ return $n;
1356
+ }
1357
+
1358
+ private function reduce(&$operators, &$operands)
1359
+ {
1360
+ $n = array_pop($operators);
1361
+ $op = $n->type;
1362
+ $arity = $this->opArity[$op];
1363
+ $c = count($operands);
1364
+ if ($arity == -2)
1365
+ {
1366
+ // Flatten left-associative trees
1367
+ if ($c >= 2)
1368
+ {
1369
+ $left = $operands[$c - 2];
1370
+ if ($left->type == $op)
1371
+ {
1372
+ $right = array_pop($operands);
1373
+ $left->addNode($right);
1374
+ return $left;
1375
+ }
1376
+ }
1377
+ $arity = 2;
1378
+ }
1379
+
1380
+ // Always use push to add operands to n, to update start and end
1381
+ $a = array_splice($operands, $c - $arity);
1382
+ for ($i = 0; $i < $arity; $i++)
1383
+ $n->addNode($a[$i]);
1384
+
1385
+ // Include closing bracket or postfix operator in [start,end]
1386
+ $te = $this->t->currentToken()->end;
1387
+ if ($n->end < $te)
1388
+ $n->end = $te;
1389
+
1390
+ array_push($operands, $n);
1391
+
1392
+ return $n;
1393
+ }
1394
+ }
1395
+
1396
+ class JSCompilerContext
1397
+ {
1398
+ public $inFunction = false;
1399
+ public $inForLoopInit = false;
1400
+ public $ecmaStrictMode = false;
1401
+ public $bracketLevel = 0;
1402
+ public $curlyLevel = 0;
1403
+ public $parenLevel = 0;
1404
+ public $hookLevel = 0;
1405
+
1406
+ public $stmtStack = array();
1407
+ public $funDecls = array();
1408
+ public $varDecls = array();
1409
+
1410
+ public function __construct($inFunction)
1411
+ {
1412
+ $this->inFunction = $inFunction;
1413
+ }
1414
+ }
1415
+
1416
+ class JSNode
1417
+ {
1418
+ private $type;
1419
+ private $value;
1420
+ private $lineno;
1421
+ private $start;
1422
+ private $end;
1423
+
1424
+ public $treeNodes = array();
1425
+ public $funDecls = array();
1426
+ public $varDecls = array();
1427
+
1428
+ public function __construct($t, $type=0)
1429
+ {
1430
+ if ($token = $t->currentToken())
1431
+ {
1432
+ $this->type = $type ? $type : $token->type;
1433
+ $this->value = $token->value;
1434
+ $this->lineno = $token->lineno;
1435
+ $this->start = $token->start;
1436
+ $this->end = $token->end;
1437
+ }
1438
+ else
1439
+ {
1440
+ $this->type = $type;
1441
+ $this->lineno = $t->lineno;
1442
+ }
1443
+
1444
+ if (($numargs = func_num_args()) > 2)
1445
+ {
1446
+ $args = func_get_args();;
1447
+ for ($i = 2; $i < $numargs; $i++)
1448
+ $this->addNode($args[$i]);
1449
+ }
1450
+ }
1451
+
1452
+ // we don't want to bloat our object with all kind of specific properties, so we use overloading
1453
+ public function __set($name, $value)
1454
+ {
1455
+ $this->$name = $value;
1456
+ }
1457
+
1458
+ public function __get($name)
1459
+ {
1460
+ if (isset($this->$name))
1461
+ return $this->$name;
1462
+
1463
+ return null;
1464
+ }
1465
+
1466
+ public function addNode($node)
1467
+ {
1468
+ $this->treeNodes[] = $node;
1469
+ }
1470
+ }
1471
+
1472
+ class JSTokenizer
1473
+ {
1474
+ private $cursor = 0;
1475
+ private $source;
1476
+
1477
+ public $tokens = array();
1478
+ public $tokenIndex = 0;
1479
+ public $lookahead = 0;
1480
+ public $scanNewlines = false;
1481
+ public $scanOperand = true;
1482
+
1483
+ public $filename;
1484
+ public $lineno;
1485
+
1486
+ private $keywords = array(
1487
+ 'break',
1488
+ 'case', 'catch', 'const', 'continue',
1489
+ 'debugger', 'default', 'delete', 'do',
1490
+ 'else', 'enum',
1491
+ 'false', 'finally', 'for', 'function',
1492
+ 'if', 'in', 'instanceof',
1493
+ 'new', 'null',
1494
+ 'return',
1495
+ 'switch',
1496
+ 'this', 'throw', 'true', 'try', 'typeof',
1497
+ 'var', 'void',
1498
+ 'while', 'with'
1499
+ );
1500
+
1501
+ private $opTypeNames = array(
1502
+ ';' => 'SEMICOLON',
1503
+ ',' => 'COMMA',
1504
+ '?' => 'HOOK',
1505
+ ':' => 'COLON',
1506
+ '||' => 'OR',
1507
+ '&&' => 'AND',
1508
+ '|' => 'BITWISE_OR',
1509
+ '^' => 'BITWISE_XOR',
1510
+ '&' => 'BITWISE_AND',
1511
+ '===' => 'STRICT_EQ',
1512
+ '==' => 'EQ',
1513
+ '=' => 'ASSIGN',
1514
+ '!==' => 'STRICT_NE',
1515
+ '!=' => 'NE',
1516
+ '<<' => 'LSH',
1517
+ '<=' => 'LE',
1518
+ '<' => 'LT',
1519
+ '>>>' => 'URSH',
1520
+ '>>' => 'RSH',
1521
+ '>=' => 'GE',
1522
+ '>' => 'GT',
1523
+ '++' => 'INCREMENT',
1524
+ '--' => 'DECREMENT',
1525
+ '+' => 'PLUS',
1526
+ '-' => 'MINUS',
1527
+ '*' => 'MUL',
1528
+ '/' => 'DIV',
1529
+ '%' => 'MOD',
1530
+ '!' => 'NOT',
1531
+ '~' => 'BITWISE_NOT',
1532
+ '.' => 'DOT',
1533
+ '[' => 'LEFT_BRACKET',
1534
+ ']' => 'RIGHT_BRACKET',
1535
+ '{' => 'LEFT_CURLY',
1536
+ '}' => 'RIGHT_CURLY',
1537
+ '(' => 'LEFT_PAREN',
1538
+ ')' => 'RIGHT_PAREN',
1539
+ '@*/' => 'CONDCOMMENT_END'
1540
+ );
1541
+
1542
+ private $assignOps = array('|', '^', '&', '<<', '>>', '>>>', '+', '-', '*', '/', '%');
1543
+ private $opRegExp;
1544
+
1545
+ public function __construct()
1546
+ {
1547
+ $this->opRegExp = '#^(' . implode('|', array_map('preg_quote', array_keys($this->opTypeNames))) . ')#';
1548
+
1549
+ // this is quite a hidden yet convenient place to create the defines for operators and keywords
1550
+ foreach ($this->opTypeNames as $operand => $name)
1551
+ define('OP_' . $name, $operand);
1552
+
1553
+ define('OP_UNARY_PLUS', 'U+');
1554
+ define('OP_UNARY_MINUS', 'U-');
1555
+
1556
+ foreach ($this->keywords as $keyword)
1557
+ define('KEYWORD_' . strtoupper($keyword), $keyword);
1558
+ }
1559
+
1560
+ public function init($source, $filename = '', $lineno = 1)
1561
+ {
1562
+ $this->source = $source;
1563
+ $this->filename = $filename ? $filename : '[inline]';
1564
+ $this->lineno = $lineno;
1565
+
1566
+ $this->cursor = 0;
1567
+ $this->tokens = array();
1568
+ $this->tokenIndex = 0;
1569
+ $this->lookahead = 0;
1570
+ $this->scanNewlines = false;
1571
+ $this->scanOperand = true;
1572
+ }
1573
+
1574
+ public function getInput($chunksize)
1575
+ {
1576
+ if ($chunksize)
1577
+ return substr($this->source, $this->cursor, $chunksize);
1578
+
1579
+ return substr($this->source, $this->cursor);
1580
+ }
1581
+
1582
+ public function isDone()
1583
+ {
1584
+ return $this->peek() == TOKEN_END;
1585
+ }
1586
+
1587
+ public function match($tt)
1588
+ {
1589
+ return $this->get() == $tt || $this->unget();
1590
+ }
1591
+
1592
+ public function mustMatch($tt)
1593
+ {
1594
+ if (!$this->match($tt))
1595
+ throw $this->newSyntaxError('Unexpected token; token ' . $tt . ' expected');
1596
+
1597
+ return $this->currentToken();
1598
+ }
1599
+
1600
+ public function peek()
1601
+ {
1602
+ if ($this->lookahead)
1603
+ {
1604
+ $next = $this->tokens[($this->tokenIndex + $this->lookahead) & 3];
1605
+ if ($this->scanNewlines && $next->lineno != $this->lineno)
1606
+ $tt = TOKEN_NEWLINE;
1607
+ else
1608
+ $tt = $next->type;
1609
+ }
1610
+ else
1611
+ {
1612
+ $tt = $this->get();
1613
+ $this->unget();
1614
+ }
1615
+
1616
+ return $tt;
1617
+ }
1618
+
1619
+ public function peekOnSameLine()
1620
+ {
1621
+ $this->scanNewlines = true;
1622
+ $tt = $this->peek();
1623
+ $this->scanNewlines = false;
1624
+
1625
+ return $tt;
1626
+ }
1627
+
1628
+ public function currentToken()
1629
+ {
1630
+ if (!empty($this->tokens))
1631
+ return $this->tokens[$this->tokenIndex];
1632
+ }
1633
+
1634
+ public function get($chunksize = 1000)
1635
+ {
1636
+ while($this->lookahead)
1637
+ {
1638
+ $this->lookahead--;
1639
+ $this->tokenIndex = ($this->tokenIndex + 1) & 3;
1640
+ $token = $this->tokens[$this->tokenIndex];
1641
+ if ($token->type != TOKEN_NEWLINE || $this->scanNewlines)
1642
+ return $token->type;
1643
+ }
1644
+
1645
+ $conditional_comment = false;
1646
+
1647
+ // strip whitespace and comments
1648
+ while(true)
1649
+ {
1650
+ $input = $this->getInput($chunksize);
1651
+
1652
+ // whitespace handling; gobble up \r as well (effectively we don't have support for MAC newlines!)
1653
+ $re = $this->scanNewlines ? '/^[ \r\t]+/' : '/^\s+/';
1654
+ if (preg_match($re, $input, $match))
1655
+ {
1656
+ $spaces = $match[0];
1657
+ $spacelen = strlen($spaces);
1658
+ $this->cursor += $spacelen;
1659
+ if (!$this->scanNewlines)
1660
+ $this->lineno += substr_count($spaces, "\n");
1661
+
1662
+ if ($spacelen == $chunksize)
1663
+ continue; // complete chunk contained whitespace
1664
+
1665
+ $input = $this->getInput($chunksize);
1666
+ if ($input == '' || $input[0] != '/')
1667
+ break;
1668
+ }
1669
+
1670
+ // Comments
1671
+ if (!preg_match('/^\/(?:\*(@(?:cc_on|if|elif|else|end))?(?:.|\n)*?\*\/|\/.*)/', $input, $match))
1672
+ {
1673
+ if (!$chunksize)
1674
+ break;
1675
+
1676
+ // retry with a full chunk fetch; this also prevents breakage of long regular expressions (which will never match a comment)
1677
+ $chunksize = null;
1678
+ continue;
1679
+ }
1680
+
1681
+ // check if this is a conditional (JScript) comment
1682
+ if (!empty($match[1]))
1683
+ {
1684
+ //$match[0] = '/*' . $match[1];
1685
+ $conditional_comment = true;
1686
+ break;
1687
+ }
1688
+ else
1689
+ {
1690
+ $this->cursor += strlen($match[0]);
1691
+ $this->lineno += substr_count($match[0], "\n");
1692
+ }
1693
+ }
1694
+
1695
+ if ($input == '')
1696
+ {
1697
+ $tt = TOKEN_END;
1698
+ $match = array('');
1699
+ }
1700
+ elseif ($conditional_comment)
1701
+ {
1702
+ $tt = TOKEN_CONDCOMMENT_MULTILINE;
1703
+ }
1704
+ else
1705
+ {
1706
+ switch ($input[0])
1707
+ {
1708
+ case '0': case '1': case '2': case '3': case '4':
1709
+ case '5': case '6': case '7': case '8': case '9':
1710
+ if (preg_match('/^\d+\.\d*(?:[eE][-+]?\d+)?|^\d+(?:\.\d*)?[eE][-+]?\d+/', $input, $match))
1711
+ {
1712
+ $tt = TOKEN_NUMBER;
1713
+ }
1714
+ elseif (preg_match('/^0[xX][\da-fA-F]+|^0[0-7]*|^\d+/', $input, $match))
1715
+ {
1716
+ // this should always match because of \d+
1717
+ $tt = TOKEN_NUMBER;
1718
+ }
1719
+ break;
1720
+
1721
+ case '"':
1722
+ case "'":
1723
+ if (preg_match('/^"(?:\\\\(?:.|\r?\n)|[^\\\\"\r\n])*"|^\'(?:\\\\(?:.|\r?\n)|[^\\\\\'\r\n])*\'/', $input, $match))
1724
+ {
1725
+ $tt = TOKEN_STRING;
1726
+ }
1727
+ else
1728
+ {
1729
+ if ($chunksize)
1730
+ return $this->get(null); // retry with a full chunk fetch
1731
+
1732
+ throw $this->newSyntaxError('Unterminated string literal');
1733
+ }
1734
+ break;
1735
+
1736
+ case '/':
1737
+ if ($this->scanOperand && preg_match('/^\/((?:\\\\.|\[(?:\\\\.|[^\]])*\]|[^\/])+)\/([gimy]*)/', $input, $match))
1738
+ {
1739
+ $tt = TOKEN_REGEXP;
1740
+ break;
1741
+ }
1742
+ // fall through
1743
+
1744
+ case '|':
1745
+ case '^':
1746
+ case '&':
1747
+ case '<':
1748
+ case '>':
1749
+ case '+':
1750
+ case '-':
1751
+ case '*':
1752
+ case '%':
1753
+ case '=':
1754
+ case '!':
1755
+ // should always match
1756
+ preg_match($this->opRegExp, $input, $match);
1757
+ $op = $match[0];
1758
+ if (in_array($op, $this->assignOps) && $input[strlen($op)] == '=')
1759
+ {
1760
+ $tt = OP_ASSIGN;
1761
+ $match[0] .= '=';
1762
+ }
1763
+ else
1764
+ {
1765
+ $tt = $op;
1766
+ if ($this->scanOperand)
1767
+ {
1768
+ if ($op == OP_PLUS)
1769
+ $tt = OP_UNARY_PLUS;
1770
+ elseif ($op == OP_MINUS)
1771
+ $tt = OP_UNARY_MINUS;
1772
+ }
1773
+ $op = null;
1774
+ }
1775
+ break;
1776
+
1777
+ case '.':
1778
+ if (preg_match('/^\.\d+(?:[eE][-+]?\d+)?/', $input, $match))
1779
+ {
1780
+ $tt = TOKEN_NUMBER;
1781
+ break;
1782
+ }
1783
+ // fall through
1784
+
1785
+ case ';':
1786
+ case ',':
1787
+ case '?':
1788
+ case ':':
1789
+ case '~':
1790
+ case '[':
1791
+ case ']':
1792
+ case '{':
1793
+ case '}':
1794
+ case '(':
1795
+ case ')':
1796
+ // these are all single
1797
+ $match = array($input[0]);
1798
+ $tt = $input[0];
1799
+ break;
1800
+
1801
+ case '@':
1802
+ throw $this->newSyntaxError('Illegal token');
1803
+ break;
1804
+
1805
+ case "\n":
1806
+ if ($this->scanNewlines)
1807
+ {
1808
+ $match = array("\n");
1809
+ $tt = TOKEN_NEWLINE;
1810
+ }
1811
+ else
1812
+ throw $this->newSyntaxError('Illegal token');
1813
+ break;
1814
+
1815
+ default:
1816
+ // FIXME: add support for unicode and unicode escape sequence \uHHHH
1817
+ if (preg_match('/^[$\w]+/', $input, $match))
1818
+ {
1819
+ $tt = in_array($match[0], $this->keywords) ? $match[0] : TOKEN_IDENTIFIER;
1820
+ }
1821
+ else
1822
+ throw $this->newSyntaxError('Illegal token');
1823
+ }
1824
+ }
1825
+
1826
+ $this->tokenIndex = ($this->tokenIndex + 1) & 3;
1827
+
1828
+ if (!isset($this->tokens[$this->tokenIndex]))
1829
+ $this->tokens[$this->tokenIndex] = new JSToken();
1830
+
1831
+ $token = $this->tokens[$this->tokenIndex];
1832
+ $token->type = $tt;
1833
+
1834
+ if ($tt == OP_ASSIGN)
1835
+ $token->assignOp = $op;
1836
+
1837
+ $token->start = $this->cursor;
1838
+
1839
+ $token->value = $match[0];
1840
+ $this->cursor += strlen($match[0]);
1841
+
1842
+ $token->end = $this->cursor;
1843
+ $token->lineno = $this->lineno;
1844
+
1845
+ return $tt;
1846
+ }
1847
+
1848
+ public function unget()
1849
+ {
1850
+ if (++$this->lookahead == 4)
1851
+ throw $this->newSyntaxError('PANIC: too much lookahead!');
1852
+
1853
+ $this->tokenIndex = ($this->tokenIndex - 1) & 3;
1854
+ }
1855
+
1856
+ public function newSyntaxError($m)
1857
+ {
1858
+ return new Exception('Parse error: ' . $m . ' in file \'' . $this->filename . '\' on line ' . $this->lineno);
1859
+ }
1860
+ }
1861
+
1862
+ class JSToken
1863
+ {
1864
+ public $type;
1865
+ public $value;
1866
+ public $start;
1867
+ public $end;
1868
+ public $lineno;
1869
+ public $assignOp;
1870
+ }
1871
+
1872
+ ?>
lib/minify/lib/Minify.php CHANGED
@@ -28,7 +28,8 @@ require_once 'Minify/Source.php';
28
  * @link http://code.google.com/p/minify/
29
  */
30
  class Minify {
31
-
 
32
  const TYPE_CSS = 'text/css';
33
  const TYPE_HTML = 'text/html';
34
  // there is some debate over the ideal JS Content-Type, but this is the
@@ -94,16 +95,17 @@ class Minify {
94
  * 'quiet' : set to true to have serve() return an array rather than sending
95
  * any headers/output (default false)
96
  *
97
- * 'encodeOutput' : to disable content encoding, set this to false (default true)
 
98
  *
99
  * 'encodeMethod' : generally you should let this be determined by
100
  * HTTP_Encoder (leave null), but you can force a particular encoding
101
- * to be returned, by setting this to 'gzip', 'deflate', or '' (no encoding)
102
  *
103
  * 'encodeLevel' : level of encoding compression (0 to 9, default 9)
104
  *
105
  * 'contentTypeCharset' : appended to the Content-Type header sent. Set to a falsey
106
- * value to remove. (default 'UTF-8')
107
  *
108
  * 'maxAge' : set this to the number of seconds the client should use its cache
109
  * before revalidating with the server. This sets Cache-Control: max-age and the
@@ -155,7 +157,8 @@ class Minify {
155
  * with keys "success" (bool), "statusCode" (int), "content" (string), and
156
  * "headers" (array).
157
  */
158
- public static function serve($controller, $options = array()) {
 
159
  if (is_string($controller)) {
160
  // make $controller into object
161
  $class = 'Minify_Controller_' . $controller;
@@ -197,11 +200,29 @@ class Minify {
197
  self::$_options['maxAge'] = 0;
198
  }
199
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
200
  // check client cache
201
  require_once 'HTTP/ConditionalGet.php';
202
  $cgOptions = array(
203
  'lastModifiedTime' => self::$_options['lastModifiedTime']
204
  ,'isPublic' => self::$_options['isPublic']
 
205
  );
206
  if (self::$_options['maxAge'] > 0) {
207
  $cgOptions['maxAge'] = self::$_options['maxAge'];
@@ -226,23 +247,6 @@ class Minify {
226
  unset($cg);
227
  }
228
 
229
- // determine encoding
230
- if (self::$_options['encodeOutput']) {
231
- if (self::$_options['encodeMethod'] !== null) {
232
- // controller specifically requested this
233
- $contentEncoding = self::$_options['encodeMethod'];
234
- } else {
235
- // sniff request header
236
- require_once 'HTTP/Encoder.php';
237
- // depending on what the client accepts, $contentEncoding may be
238
- // 'x-gzip' while our internal encodeMethod is 'gzip'. Calling
239
- // getAcceptedEncoding() with false leaves out compress as an option.
240
- list(self::$_options['encodeMethod'], $contentEncoding) = HTTP_Encoder::getAcceptedEncoding(false);
241
- }
242
- } else {
243
- self::$_options['encodeMethod'] = ''; // identity (no encoding)
244
- }
245
-
246
  if (self::$_options['contentType'] === self::TYPE_CSS
247
  && self::$_options['rewriteCssUris']) {
248
  reset($controller->sources);
@@ -263,12 +267,9 @@ class Minify {
263
  // output the content, as they do not require ever loading the file into
264
  // memory.
265
  $cacheId = 'minify_' . self::_getCacheId();
266
- $encodingExtension = self::$_options['encodeMethod']
267
- ? ('deflate' === self::$_options['encodeMethod']
268
- ? '.zd'
269
- : '.zg')
270
- : '';
271
- $fullCacheId = $cacheId . $encodingExtension;
272
  // check cache for valid entry
273
  $cacheIsReady = self::$_cache->isValid($fullCacheId, self::$_options['lastModifiedTime']);
274
  if ($cacheIsReady) {
@@ -277,9 +278,8 @@ class Minify {
277
  // generate & cache content
278
  $content = self::_combineMinify();
279
  self::$_cache->store($cacheId, $content);
280
- if (function_exists('gzdeflate')) {
281
- self::$_cache->store($cacheId . '.zd', gzdeflate($content, self::$_options['encodeLevel']));
282
- self::$_cache->store($cacheId . '.zg', gzencode($content, self::$_options['encodeLevel']));
283
  }
284
  }
285
  } else {
@@ -289,9 +289,7 @@ class Minify {
289
  }
290
  if (! $cacheIsReady && self::$_options['encodeMethod']) {
291
  // still need to encode
292
- $content = ('deflate' === self::$_options['encodeMethod'])
293
- ? gzdeflate($content, self::$_options['encodeLevel'])
294
- : gzencode($content, self::$_options['encodeLevel']);
295
  }
296
 
297
  // add headers
@@ -303,6 +301,8 @@ class Minify {
303
  : self::$_options['contentType'];
304
  if (self::$_options['encodeMethod'] !== '') {
305
  $headers['Content-Encoding'] = $contentEncoding;
 
 
306
  $headers['Vary'] = 'Accept-Encoding';
307
  }
308
 
@@ -368,11 +368,11 @@ class Minify {
368
  if (isset($_SERVER['SERVER_SOFTWARE'])
369
  && 0 === strpos($_SERVER['SERVER_SOFTWARE'], 'Microsoft-IIS/')
370
  ) {
371
- $_SERVER['DOCUMENT_ROOT'] = substr(
372
  $_SERVER['PATH_TRANSLATED']
373
  ,0
374
  ,strlen($_SERVER['PATH_TRANSLATED']) - strlen($_SERVER['SCRIPT_NAME'])
375
- );
376
  if ($unsetPathInfo) {
377
  unset($_SERVER['PATH_INFO']);
378
  }
@@ -419,7 +419,8 @@ class Minify {
419
  *
420
  * @return string
421
  */
422
- protected static function _combineMinify() {
 
423
  $type = self::$_options['contentType']; // ease readability
424
 
425
  // when combining scripts, make sure all statements separated and
@@ -492,7 +493,8 @@ class Minify {
492
  *
493
  * @return string
494
  */
495
- protected static function _getCacheId() {
 
496
  return md5(serialize(array(
497
  Minify_Source::getDigest(self::$_controller->sources)
498
  ,self::$_options['minifiers']
@@ -506,7 +508,8 @@ class Minify {
506
  * Bubble CSS @imports to the top or prepend a warning if an
507
  * @import is detected not at the top.
508
  */
509
- protected static function _handleCssImports($css) {
 
510
  if (self::$_options['bubbleCssImports']) {
511
  // bubble CSS imports
512
  preg_match_all('/@import.*?;/', $css, $imports);
28
  * @link http://code.google.com/p/minify/
29
  */
30
  class Minify {
31
+
32
+ const VERSION = '2.1.3';
33
  const TYPE_CSS = 'text/css';
34
  const TYPE_HTML = 'text/html';
35
  // there is some debate over the ideal JS Content-Type, but this is the
95
  * 'quiet' : set to true to have serve() return an array rather than sending
96
  * any headers/output (default false)
97
  *
98
+ * 'encodeOutput' : set to false to disable content encoding, and not send
99
+ * the Vary header (default true)
100
  *
101
  * 'encodeMethod' : generally you should let this be determined by
102
  * HTTP_Encoder (leave null), but you can force a particular encoding
103
+ * to be returned, by setting this to 'gzip' or '' (no encoding)
104
  *
105
  * 'encodeLevel' : level of encoding compression (0 to 9, default 9)
106
  *
107
  * 'contentTypeCharset' : appended to the Content-Type header sent. Set to a falsey
108
+ * value to remove. (default 'utf-8')
109
  *
110
  * 'maxAge' : set this to the number of seconds the client should use its cache
111
  * before revalidating with the server. This sets Cache-Control: max-age and the
157
  * with keys "success" (bool), "statusCode" (int), "content" (string), and
158
  * "headers" (array).
159
  */
160
+ public static function serve($controller, $options = array())
161
+ {
162
  if (is_string($controller)) {
163
  // make $controller into object
164
  $class = 'Minify_Controller_' . $controller;
200
  self::$_options['maxAge'] = 0;
201
  }
202
 
203
+ // determine encoding
204
+ if (self::$_options['encodeOutput']) {
205
+ if (self::$_options['encodeMethod'] !== null) {
206
+ // controller specifically requested this
207
+ $contentEncoding = self::$_options['encodeMethod'];
208
+ } else {
209
+ // sniff request header
210
+ require_once 'HTTP/Encoder.php';
211
+ // depending on what the client accepts, $contentEncoding may be
212
+ // 'x-gzip' while our internal encodeMethod is 'gzip'. Calling
213
+ // getAcceptedEncoding(false, false) leaves out compress and deflate as options.
214
+ list(self::$_options['encodeMethod'], $contentEncoding) = HTTP_Encoder::getAcceptedEncoding(false, false);
215
+ }
216
+ } else {
217
+ self::$_options['encodeMethod'] = ''; // identity (no encoding)
218
+ }
219
+
220
  // check client cache
221
  require_once 'HTTP/ConditionalGet.php';
222
  $cgOptions = array(
223
  'lastModifiedTime' => self::$_options['lastModifiedTime']
224
  ,'isPublic' => self::$_options['isPublic']
225
+ ,'encoding' => self::$_options['encodeMethod']
226
  );
227
  if (self::$_options['maxAge'] > 0) {
228
  $cgOptions['maxAge'] = self::$_options['maxAge'];
247
  unset($cg);
248
  }
249
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
250
  if (self::$_options['contentType'] === self::TYPE_CSS
251
  && self::$_options['rewriteCssUris']) {
252
  reset($controller->sources);
267
  // output the content, as they do not require ever loading the file into
268
  // memory.
269
  $cacheId = 'minify_' . self::_getCacheId();
270
+ $fullCacheId = (self::$_options['encodeMethod'])
271
+ ? $cacheId . '.gz'
272
+ : $cacheId;
 
 
 
273
  // check cache for valid entry
274
  $cacheIsReady = self::$_cache->isValid($fullCacheId, self::$_options['lastModifiedTime']);
275
  if ($cacheIsReady) {
278
  // generate & cache content
279
  $content = self::_combineMinify();
280
  self::$_cache->store($cacheId, $content);
281
+ if (function_exists('gzencode')) {
282
+ self::$_cache->store($cacheId . '.gz', gzencode($content, self::$_options['encodeLevel']));
 
283
  }
284
  }
285
  } else {
289
  }
290
  if (! $cacheIsReady && self::$_options['encodeMethod']) {
291
  // still need to encode
292
+ $content = gzencode($content, self::$_options['encodeLevel']);
 
 
293
  }
294
 
295
  // add headers
301
  : self::$_options['contentType'];
302
  if (self::$_options['encodeMethod'] !== '') {
303
  $headers['Content-Encoding'] = $contentEncoding;
304
+ }
305
+ if (self::$_options['encodeOutput']) {
306
  $headers['Vary'] = 'Accept-Encoding';
307
  }
308
 
368
  if (isset($_SERVER['SERVER_SOFTWARE'])
369
  && 0 === strpos($_SERVER['SERVER_SOFTWARE'], 'Microsoft-IIS/')
370
  ) {
371
+ $_SERVER['DOCUMENT_ROOT'] = rtrim(substr(
372
  $_SERVER['PATH_TRANSLATED']
373
  ,0
374
  ,strlen($_SERVER['PATH_TRANSLATED']) - strlen($_SERVER['SCRIPT_NAME'])
375
+ ), '\\');
376
  if ($unsetPathInfo) {
377
  unset($_SERVER['PATH_INFO']);
378
  }
419
  *
420
  * @return string
421
  */
422
+ protected static function _combineMinify()
423
+ {
424
  $type = self::$_options['contentType']; // ease readability
425
 
426
  // when combining scripts, make sure all statements separated and
493
  *
494
  * @return string
495
  */
496
+ protected static function _getCacheId()
497
+ {
498
  return md5(serialize(array(
499
  Minify_Source::getDigest(self::$_controller->sources)
500
  ,self::$_options['minifiers']
508
  * Bubble CSS @imports to the top or prepend a warning if an
509
  * @import is detected not at the top.
510
  */
511
+ protected static function _handleCssImports($css)
512
+ {
513
  if (self::$_options['bubbleCssImports']) {
514
  // bubble CSS imports
515
  preg_match_all('/@import.*?;/', $css, $imports);
lib/minify/lib/Minify/CSS/Compressor.php CHANGED
@@ -176,6 +176,7 @@ class Minify_CSS_Compressor {
176
  */
177
  protected function _commentCB($m)
178
  {
 
179
  $m = $m[1];
180
  // $m is the comment content w/o the surrounding tokens,
181
  // but the return value will replace the entire comment.
@@ -219,7 +220,11 @@ class Minify_CSS_Compressor {
219
  $this->_inHack = false;
220
  return '/**/';
221
  }
222
- return ''; // remove all other comments
 
 
 
 
223
  }
224
 
225
  /**
176
  */
177
  protected function _commentCB($m)
178
  {
179
+ $hasSurroundingWs = (trim($m[0]) !== $m[1]);
180
  $m = $m[1];
181
  // $m is the comment content w/o the surrounding tokens,
182
  // but the return value will replace the entire comment.
220
  $this->_inHack = false;
221
  return '/**/';
222
  }
223
+ // Issue 107: if there's any surrounding whitespace, it may be important, so
224
+ // replace the comment with a single space
225
+ return $hasSurroundingWs // remove all other comments
226
+ ? ' '
227
+ : '';
228
  }
229
 
230
  /**
lib/minify/lib/Minify/CSS/UriRewriter.php CHANGED
@@ -236,12 +236,14 @@ class Minify_CSS_UriRewriter {
236
  self::$debugText .= "docroot stripped : {$path}\n";
237
 
238
  // fix to root-relative URI
239
- $uri = strtr($path, DIRECTORY_SEPARATOR, '/');
 
 
240
  // remove /./ and /../ where possible
241
  $uri = str_replace('/./', '/', $uri);
242
  // inspired by patch from Oleg Cherniy
243
  do {
244
- $uri = preg_replace('@/[^/]+/\\.\\./@', '/', $uri, -1, $changed);
245
  } while ($changed);
246
 
247
  self::$debugText .= "traversals removed : {$uri}\n\n";
@@ -249,24 +251,20 @@ class Minify_CSS_UriRewriter {
249
  return $uri;
250
  }
251
 
252
-
253
-
254
  /**
255
- * Get realpath with any trailing slash removed
 
256
  *
257
  * @param string $path
258
  *
259
- * @return mixed real path or false on realpath() failure
260
  */
261
  protected static function _realpath($path)
262
  {
263
- $path = realpath($path);
264
- if (! $path) {
265
- return false;
266
  }
267
- $last = $path[strlen($path) - 1];
268
- return ($last === '/' || $last === '\\')
269
- ? substr($path, 0, strlen($path) - 1)
270
- : $path;
271
  }
272
  }
236
  self::$debugText .= "docroot stripped : {$path}\n";
237
 
238
  // fix to root-relative URI
239
+
240
+ $uri = strtr($path, '/\\', '//');
241
+
242
  // remove /./ and /../ where possible
243
  $uri = str_replace('/./', '/', $uri);
244
  // inspired by patch from Oleg Cherniy
245
  do {
246
+ $uri = preg_replace('@/[^/]+/\\.\\./@', '/', $uri, 1, $changed);
247
  } while ($changed);
248
 
249
  self::$debugText .= "traversals removed : {$uri}\n\n";
251
  return $uri;
252
  }
253
 
 
 
254
  /**
255
+ * Get realpath with any trailing slash removed. If realpath() fails,
256
+ * just remove the trailing slash.
257
  *
258
  * @param string $path
259
  *
260
+ * @return mixed path with no trailing slash
261
  */
262
  protected static function _realpath($path)
263
  {
264
+ $realPath = realpath($path);
265
+ if ($realPath !== false) {
266
+ $path = $realPath;
267
  }
268
+ return rtrim($path, '/\\');
 
 
 
269
  }
270
  }
lib/minify/lib/Minify/Cache/File.php CHANGED
@@ -110,6 +110,16 @@ class Minify_Cache_File {
110
  }
111
  }
112
 
 
 
 
 
 
 
 
 
 
 
113
  private $_path = null;
114
  private $_locking = null;
115
  }
110
  }
111
  }
112
 
113
+ /**
114
+ * Fetch the cache path used
115
+ *
116
+ * @return string
117
+ */
118
+ public function getPath()
119
+ {
120
+ return $this->_path;
121
+ }
122
+
123
  private $_path = null;
124
  private $_locking = null;
125
  }
lib/minify/lib/Minify/Controller/Base.php CHANGED
@@ -45,7 +45,7 @@ abstract class Minify_Controller_Base {
45
  ,'encodeMethod' => null // determine later
46
  ,'encodeLevel' => 9
47
  ,'minifierOptions' => array() // no minifier options
48
- ,'contentTypeCharset' => 'UTF-8'
49
  ,'maxAge' => 1800 // 30 minutes
50
  ,'rewriteCssUris' => true
51
  ,'bubbleCssImports' => false
@@ -71,7 +71,7 @@ abstract class Minify_Controller_Base {
71
  * @return array minifier callbacks for common types
72
  */
73
  public function getDefaultMinifers() {
74
- $ret[Minify::TYPE_JS] = array('Minify_Javascript', 'minify');
75
  $ret[Minify::TYPE_CSS] = array('Minify_CSS', 'minify');
76
  $ret[Minify::TYPE_HTML] = array('Minify_HTML', 'minify');
77
  return $ret;
45
  ,'encodeMethod' => null // determine later
46
  ,'encodeLevel' => 9
47
  ,'minifierOptions' => array() // no minifier options
48
+ ,'contentTypeCharset' => 'utf-8'
49
  ,'maxAge' => 1800 // 30 minutes
50
  ,'rewriteCssUris' => true
51
  ,'bubbleCssImports' => false
71
  * @return array minifier callbacks for common types
72
  */
73
  public function getDefaultMinifers() {
74
+ $ret[Minify::TYPE_JS] = array('JSMin', 'minify');
75
  $ret[Minify::TYPE_CSS] = array('Minify_CSS', 'minify');
76
  $ret[Minify::TYPE_HTML] = array('Minify_HTML', 'minify');
77
  return $ret;
lib/minify/lib/Minify/Controller/Files.php CHANGED
@@ -40,7 +40,14 @@ class Minify_Controller_Files extends Minify_Controller_Base {
40
  */
41
  public function setupSources($options) {
42
  // strip controller options
43
- $files = (array)$options['files'];
 
 
 
 
 
 
 
44
  unset($options['files']);
45
 
46
  $sources = array();
40
  */
41
  public function setupSources($options) {
42
  // strip controller options
43
+
44
+ $files = $options['files'];
45
+ // if $files is a single object, casting will break it
46
+ if (is_object($files)) {
47
+ $files = array($files);
48
+ } elseif (! is_array($files)) {
49
+ $files = (array)$files;
50
+ }
51
  unset($options['files']);
52
 
53
  $sources = array();
lib/minify/lib/Minify/Controller/Groups.php CHANGED
@@ -59,7 +59,15 @@ class Minify_Controller_Groups extends Minify_Controller_Base {
59
  return $options;
60
  }
61
  $sources = array();
62
- foreach ((array)$groups[$pi] as $file) {
 
 
 
 
 
 
 
 
63
  if ($file instanceof Minify_Source) {
64
  $sources[] = $file;
65
  continue;
59
  return $options;
60
  }
61
  $sources = array();
62
+
63
+ $files = $groups[$pi];
64
+ // if $files is a single object, casting will break it
65
+ if (is_object($files)) {
66
+ $files = array($files);
67
+ } elseif (! is_array($files)) {
68
+ $files = (array)$files;
69
+ }
70
+ foreach ($files as $file) {
71
  if ($file instanceof Minify_Source) {
72
  $sources[] = $file;
73
  continue;
lib/minify/lib/Minify/Controller/MinApp.php CHANGED
@@ -40,7 +40,15 @@ class Minify_Controller_MinApp extends Minify_Controller_Base {
40
  $this->log("A group configuration for \"{$_GET['g']}\" was not set");
41
  return $options;
42
  }
43
- foreach ((array)$cOptions['groups'][$_GET['g']] as $file) {
 
 
 
 
 
 
 
 
44
  if ($file instanceof Minify_Source) {
45
  $sources[] = $file;
46
  continue;
40
  $this->log("A group configuration for \"{$_GET['g']}\" was not set");
41
  return $options;
42
  }
43
+
44
+ $files = $cOptions['groups'][$_GET['g']];
45
+ // if $files is a single object, casting will break it
46
+ if (is_object($files)) {
47
+ $files = array($files);
48
+ } elseif (! is_array($files)) {
49
+ $files = (array)$files;
50
+ }
51
+ foreach ($files as $file) {
52
  if ($file instanceof Minify_Source) {
53
  $sources[] = $file;
54
  continue;
lib/minify/lib/Minify/Controller/Page.php CHANGED
@@ -52,16 +52,13 @@ class Minify_Controller_Page extends Minify_Controller_Base {
52
  // this will be the 2nd argument passed to Minify_HTML::minify()
53
  $sourceSpec['minifyOptions'] = array(
54
  'cssMinifier' => array('Minify_CSS', 'minify')
55
- ,'jsMinifier' => array('Minify_Javascript', 'minify')
56
  );
57
  $this->_loadCssJsMinifiers = true;
58
  unset($options['minifyAll']);
59
  }
60
  $this->sources[] = new Minify_Source($sourceSpec);
61
 
62
- // may not be needed
63
- //$options['minifier'] = array('Minify_HTML', 'minify');
64
-
65
  $options['contentType'] = Minify::TYPE_HTML;
66
  return $options;
67
  }
@@ -76,8 +73,8 @@ class Minify_Controller_Page extends Minify_Controller_Base {
76
  if ($this->_loadCssJsMinifiers) {
77
  // Minify will not call for these so we must manually load
78
  // them when Minify/HTML.php is called for.
79
- require 'Minify/CSS.php';
80
- require 'Minify/Javascript.php';
81
  }
82
  parent::loadMinifier($minifierCallback); // load Minify/HTML.php
83
  }
52
  // this will be the 2nd argument passed to Minify_HTML::minify()
53
  $sourceSpec['minifyOptions'] = array(
54
  'cssMinifier' => array('Minify_CSS', 'minify')
55
+ ,'jsMinifier' => array('JSMin', 'minify')
56
  );
57
  $this->_loadCssJsMinifiers = true;
58
  unset($options['minifyAll']);
59
  }
60
  $this->sources[] = new Minify_Source($sourceSpec);
61
 
 
 
 
62
  $options['contentType'] = Minify::TYPE_HTML;
63
  return $options;
64
  }
73
  if ($this->_loadCssJsMinifiers) {
74
  // Minify will not call for these so we must manually load
75
  // them when Minify/HTML.php is called for.
76
+ require_once 'Minify/CSS.php';
77
+ require_once 'JSMin.php';
78
  }
79
  parent::loadMinifier($minifierCallback); // load Minify/HTML.php
80
  }
lib/minify/lib/Minify/ImportProcessor.php CHANGED
@@ -143,12 +143,12 @@ class Minify_ImportProcessor {
143
  // strip doc root
144
  $path = substr($path, strlen(realpath($_SERVER['DOCUMENT_ROOT'])));
145
  // fix to absolute URL
146
- $url = strtr($path, DIRECTORY_SEPARATOR, '/');
147
  // remove /./ and /../ where possible
148
  $url = str_replace('/./', '/', $url);
149
  // inspired by patch from Oleg Cherniy
150
  do {
151
- $url = preg_replace('@/[^/]+/\\.\\./@', '/', $url, -1, $changed);
152
  } while ($changed);
153
  }
154
  }
143
  // strip doc root
144
  $path = substr($path, strlen(realpath($_SERVER['DOCUMENT_ROOT'])));
145
  // fix to absolute URL
146
+ $url = strtr($path, '/\\', '//');
147
  // remove /./ and /../ where possible
148
  $url = str_replace('/./', '/', $url);
149
  // inspired by patch from Oleg Cherniy
150
  do {
151
+ $url = preg_replace('@/[^/]+/\\.\\./@', '/', $url, 1, $changed);
152
  } while ($changed);
153
  }
154
  }
lib/minify/lib/Minify/Packer.php CHANGED
@@ -7,9 +7,9 @@
7
  * include_path).
8
  * @link http://joliclic.free.fr/php/javascript-packer/en/
9
  *
10
- * Be aware that, as long as HTTP encoding is used, scripts minified
11
- * with Minify_Javascript (JSMin) will provide better client-side
12
- * performance, as they need not be unpacked in client-side code.
13
  *
14
  * @package Minify
15
  */
7
  * include_path).
8
  * @link http://joliclic.free.fr/php/javascript-packer/en/
9
  *
10
+ * Be aware that, as long as HTTP encoding is used, scripts minified with JSMin
11
+ * will provide better client-side performance, as they need not be unpacked in
12
+ * client-side code.
13
  *
14
  * @package Minify
15
  */
lib/minify/lib/Minify/Source.php CHANGED
@@ -35,6 +35,11 @@ class Minify_Source {
35
  */
36
  public $filepath = null;
37
 
 
 
 
 
 
38
  /**
39
  * Create a Minify_Source
40
  *
@@ -54,6 +59,17 @@ class Minify_Source {
54
  if (0 === strpos($spec['filepath'], '//')) {
55
  $spec['filepath'] = $_SERVER['DOCUMENT_ROOT'] . substr($spec['filepath'], 1);
56
  }
 
 
 
 
 
 
 
 
 
 
 
57
  $this->filepath = $spec['filepath'];
58
  $this->_id = $spec['filepath'];
59
  $this->lastModified = filemtime($spec['filepath'])
@@ -70,6 +86,9 @@ class Minify_Source {
70
  ? $spec['lastModified']
71
  : time();
72
  }
 
 
 
73
  if (isset($spec['minifier'])) {
74
  $this->minifier = $spec['minifier'];
75
  }
@@ -143,7 +162,7 @@ class Minify_Source {
143
  }
144
 
145
  /**
146
- * Guess content type from the first filename extension available
147
  *
148
  * This is called if the user doesn't pass in a 'contentType' options
149
  *
@@ -153,18 +172,9 @@ class Minify_Source {
153
  */
154
  public static function getContentType($sources)
155
  {
156
- $exts = array(
157
- 'css' => Minify::TYPE_CSS
158
- ,'js' => Minify::TYPE_JS
159
- ,'html' => Minify::TYPE_HTML
160
- );
161
  foreach ($sources as $source) {
162
- if (null !== $source->filepath) {
163
- $segments = explode('.', $source->filepath);
164
- $ext = array_pop($segments);
165
- if (isset($exts[$ext])) {
166
- return $exts[$ext];
167
- }
168
  }
169
  }
170
  return 'text/plain';
35
  */
36
  public $filepath = null;
37
 
38
+ /**
39
+ * @var string HTTP Content Type (Minify requires one of the constants Minify::TYPE_*)
40
+ */
41
+ public $contentType = null;
42
+
43
  /**
44
  * Create a Minify_Source
45
  *
59
  if (0 === strpos($spec['filepath'], '//')) {
60
  $spec['filepath'] = $_SERVER['DOCUMENT_ROOT'] . substr($spec['filepath'], 1);
61
  }
62
+ $segments = explode('.', $spec['filepath']);
63
+ $ext = strtolower(array_pop($segments));
64
+ switch ($ext) {
65
+ case 'js' : $this->contentType = 'application/x-javascript';
66
+ break;
67
+ case 'css' : $this->contentType = 'text/css';
68
+ break;
69
+ case 'htm' : // fallthrough
70
+ case 'html' : $this->contentType = 'text/html';
71
+ break;
72
+ }
73
  $this->filepath = $spec['filepath'];
74
  $this->_id = $spec['filepath'];
75
  $this->lastModified = filemtime($spec['filepath'])
86
  ? $spec['lastModified']
87
  : time();
88
  }
89
+ if (isset($spec['contentType'])) {
90
+ $this->contentType = $spec['contentType'];
91
+ }
92
  if (isset($spec['minifier'])) {
93
  $this->minifier = $spec['minifier'];
94
  }
162
  }
163
 
164
  /**
165
+ * Get content type from a group of sources
166
  *
167
  * This is called if the user doesn't pass in a 'contentType' options
168
  *
172
  */
173
  public static function getContentType($sources)
174
  {
 
 
 
 
 
175
  foreach ($sources as $source) {
176
+ if ($source->contentType !== null) {
177
+ return $source->contentType;
 
 
 
 
178
  }
179
  }
180
  return 'text/plain';
lib/minify/m.php CHANGED
@@ -76,6 +76,7 @@ if (isset($_GET['f'])) {
76
  if (preg_match($filenamePattern, $filename)
77
  && file_exists(BP . $filename)) {
78
  //Minify can't handle the regex for the email addresses - change to file with less demanding regex for email validation
 
79
  $filename = str_replace("validation.js", "validation-4min.js", $filename);
80
  $servefiles[]=BP . $filename;
81
  }
76
  if (preg_match($filenamePattern, $filename)
77
  && file_exists(BP . $filename)) {
78
  //Minify can't handle the regex for the email addresses - change to file with less demanding regex for email validation
79
+ //fixed in Magento 1.4 (keep this workaround in place until support for versions below 1.4 is removed)
80
  $filename = str_replace("validation.js", "validation-4min.js", $filename);
81
  $servefiles[]=BP . $filename;
82
  }
package.xml CHANGED
@@ -1,20 +1,21 @@
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>Fooman_Speedster</name>
4
- <version>1.0.4</version>
5
  <stability>stable</stability>
6
  <license uri="http://www.opensource.org/licenses/osl-3.0.php">OSL v3.0 / BSD see files</license>
7
  <channel>community</channel>
8
  <extends/>
9
  <summary>Speed up your store by combining, compressing and caching JS and CSS.</summary>
10
- <description>&lt;p&gt;FOOMAN Speedster 1.0.3&lt;/p&gt;
11
  &lt;p&gt;Speed up your store by combining, compressing and caching JS and CSS.&lt;/p&gt;
12
  &lt;p&gt;Please read the installation instructions and latest changes &lt;a href="http://www.magentocommerce.com/extension/457/fooman-speedster"&gt;here.&lt;/a&gt;&lt;/p&gt;</description>
13
- <notes>fixed version number</notes>
 
14
  <authors><author><name>Kristof Ringleff</name><user>auto-converted</user><email>kristof@fooman.co.nz</email></author></authors>
15
- <date>2009-06-08</date>
16
- <time>00:37:16</time>
17
- <contents><target name="mage"><dir name="app"><dir name="etc"><dir name="modules"><file name="Fooman_Speedster.xml" hash="94d303cd2552119381411068d2e7809b"/></dir></dir></dir><dir name="js"><dir name="prototype"><file name="validation-4min.js" hash="13c749d40036ae055baa6f7825499c1c"/></dir></dir><dir name="lib"><dir name="minify"><file name=".htaccess" hash="4d6b8833e4ccae2d2393dfeba369b894"/></dir></dir><dir name="var"><dir name="minifycache"><file name="cache.txt" hash="5709c1d6a6f85fb7b7ea2eef23086b46"/></dir></dir></target><target name="magecommunity"><dir name="Fooman"><dir name="Speedster"><dir name="Block"><dir name="Adminhtml"><dir name="Page"><file name="Head.php" hash="d850197d05af7b972eda1ef6bf3da2ed"/></dir></dir><dir name="Page"><dir name="Html"><file name="Head.php" hash="b3e32a0793bcf35dfcfd07ad4d618222"/></dir></dir></dir><dir name="etc"><file name="config.xml" hash="a7597cc1635e00f38823869c5e2eb440"/></dir></dir></dir></target><target name="magelib"><dir name="minify"><dir name="lib"><dir name="HTTP"><file name="ConditionalGet.php" hash="2617a41438dff20749abb9be1793b10f"/><file name="Encoder.php" hash="a2f4ae355c06fb6a98d6b4bd82c34e76"/></dir><dir name="Minify"><dir name="Cache"><file name="APC.php" hash="2766ccf5e1e4d6e38d3ec128dbc4bc6f"/><file name="File.php" hash="dd7545011e50c153a11dd100db35315a"/><file name="Memcache.php" hash="fa208d979196d0479e3aacec853502c8"/></dir><dir name="Controller"><file name="Base.php" hash="070ed4d5f471a88f2f45cf2e93ba720a"/><file name="Files.php" hash="f579a28cea39da5c595057e72fc65967"/><file name="Groups.php" hash="79bb7cbd0b598dc35a93b99adfdbfab6"/><file name="MinApp.php" hash="42803a069db0f5892012991af5ec5334"/><file name="Page.php" hash="113e99f1206cfb3c3a64aedef65554d1"/><file name="Version1.php" hash="4369c8793be1d5cf061a99651b16da26"/></dir><dir name="CSS"><file name="Compressor.php" hash="3a3a65aa92f74958f50d9d43f8827f8a"/><file name="UriRewriter.php" hash="da8f5cdad4726e0370bbe5f351ec9d98"/></dir><file name="Build.php" hash="6e329c2acc80b72cfde52be6918940bb"/><file name="BuildSpeedster.php" hash="b93d3e802e2bf7b31eecf9537d3e92f9"/><file name="CommentPreserver.php" hash="86bab05265083b57935503bdd735ce74"/><file name="CSS.php" hash="cdeb49c0f35a6cef166c6cfee7f1dd95"/><file name="HTML.php" hash="e774a70491041048fef690d4b162e0ce"/><file name="ImportProcessor.php" hash="3d1726a5df7eb2edba8cd6da2cb75eec"/><file name="Javascript.php" hash="1baa1a43818fcecb89c2a08b40a544da"/><file name="Lines.php" hash="80b2932320c98d1e84aa7f48fceb35e8"/><file name="Logger.php" hash="b2844a8c35e028b9ee725be05adbcf7e"/><file name="Packer.php" hash="41878d87ec3b3e3bbd1538291edeb7cf"/><file name="Source.php" hash="a8d9fa9f0ab2ba9e9b37209148375924"/><file name="YUICompressor.php" hash="13840856d6340e70e7289035827b8b7d"/></dir><dir name="Solar"><file name="Dir.php" hash="6c88f363f6830ac4dc3917eac3c9d78c"/></dir><file name="FirePHP.php" hash="f619b5a77fee4b21e4397e98d858fbf4"/><file name="JSMin.php" hash="e9fe7911a2787240d3ed6dd2da9bc95b"/><file name="Minify.php" hash="9ee5b8bb23e3d856faec4358aa887e33"/></dir><file name="HISTORY.txt" hash="70c3e25e9331dc17e5d538bfc3dd8fe1"/><file name="LICENSE.txt" hash="911d374696c0a5e9e6e848e7f20d0ee1"/><file name="m.php" hash="49b12c34094a3ba1090f7b42719706e7"/><file name="README.txt" hash="6e961a626ae6814c72fab53bcad4a4a7"/></dir></target></contents>
18
  <compatible/>
19
  <dependencies/>
20
  </package>
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>Fooman_Speedster</name>
4
+ <version>1.1.0</version>
5
  <stability>stable</stability>
6
  <license uri="http://www.opensource.org/licenses/osl-3.0.php">OSL v3.0 / BSD see files</license>
7
  <channel>community</channel>
8
  <extends/>
9
  <summary>Speed up your store by combining, compressing and caching JS and CSS.</summary>
10
+ <description>&lt;p&gt;FOOMAN Speedster 1.1&lt;/p&gt;
11
  &lt;p&gt;Speed up your store by combining, compressing and caching JS and CSS.&lt;/p&gt;
12
  &lt;p&gt;Please read the installation instructions and latest changes &lt;a href="http://www.magentocommerce.com/extension/457/fooman-speedster"&gt;here.&lt;/a&gt;&lt;/p&gt;</description>
13
+ <notes>fixed canonical url
14
+ updated validation file</notes>
15
  <authors><author><name>Kristof Ringleff</name><user>auto-converted</user><email>kristof@fooman.co.nz</email></author></authors>
16
+ <date>2010-04-01</date>
17
+ <time>14:10:06</time>
18
+ <contents><target name="mage"><dir name="app"><dir name="etc"><dir name="modules"><file name="Fooman_Speedster.xml" hash="94d303cd2552119381411068d2e7809b"/></dir></dir></dir><dir name="js"><dir name="prototype"><file name="validation-4min.js" hash="f8865bb7a07f1a22dc5a08ed362daa83"/></dir></dir><dir name="lib"><dir name="minify"><file name=".htaccess" hash="4d6b8833e4ccae2d2393dfeba369b894"/></dir></dir><dir name="var"><dir name="minifycache"><file name="cache.txt" hash="5709c1d6a6f85fb7b7ea2eef23086b46"/><file name="minify_1b6ee19a4c3855472c3e3dd57413cb65" hash="6a5733db3132a5d49183fc5f124709df"/><file name="minify_1b6ee19a4c3855472c3e3dd57413cb65.gz" hash="fa1b71ed6bf3e1e546a9f1cd440e7f1e"/><file name="minify_9c58e36f7d68249efd03de258c77c943" hash="6e6f08dfd0403115a2aef5743673daff"/><file name="minify_9c58e36f7d68249efd03de258c77c943.gz" hash="a1ebda590e3cce3a56edda99110bc587"/><file name="minify_95afbee78c0f49b564250d655add1ca9" hash="a36015a93d7f6e5c86841fa58de1b5b6"/><file name="minify_95afbee78c0f49b564250d655add1ca9.gz" hash="f4f1e77134b49ff6f7fea41698041925"/><file name="minify_676fb2e38e9cb2203204bcf556430103" hash="bd60df770b2ba3c91871385e19551f1e"/><file name="minify_676fb2e38e9cb2203204bcf556430103.gz" hash="aac811ba6a666e5d4b4ec696f8955c1f"/><file name="minify_900559c432c691b50ba33f48b4909a4f" hash="849466c766e24345e767622c11a64ba5"/><file name="minify_900559c432c691b50ba33f48b4909a4f.gz" hash="725c160ffe2cb85c567ff7785e35c964"/><file name="minify_bcb6d8461d369d3fefce349c1958be75" hash="9ad2f5e606ba9812ee49ca9abd499f7a"/><file name="minify_bcb6d8461d369d3fefce349c1958be75.gz" hash="30e43e9caeb64f61614e1c14d0788548"/><file name="minify_c8063ab3f62bf2c69f8ccbb72f282ebf" hash="88fa754fb2010559e65bca81c7b59032"/><file name="minify_c8063ab3f62bf2c69f8ccbb72f282ebf.gz" hash="1c346c10e08724d917ebe5caf93417f6"/><file name="minify_db8fc92a79f3619bba917ee2a7d54930" hash="d5010324aea35d2271875005dfe87c79"/><file name="minify_db8fc92a79f3619bba917ee2a7d54930.gz" hash="e281dbe66d412a9e2e004ea954cecd1e"/><file name="minify_f98a277d2fb39a774858112e07fed300" hash="3f9b3674fdb30d3b341048da7ba4947d"/><file name="minify_f98a277d2fb39a774858112e07fed300.gz" hash="b9527b7a805a1e1a1af6903cfc4d0bd2"/></dir></dir></target><target name="magecommunity"><dir name="Fooman"><dir name="Speedster"><dir name="Block"><dir name="Adminhtml"><dir name="Page"><file name="Head.php" hash="d850197d05af7b972eda1ef6bf3da2ed"/></dir></dir><dir name="Page"><dir name="Html"><file name="Head.php" hash="11c60b924b64c8c5a1d73ebe0189c94f"/></dir></dir></dir><dir name="etc"><file name="config.xml" hash="ab637511f511e55d290ae4d3f5c7d87e"/></dir></dir></dir></target><target name="magelib"><dir name="minify"><dir name="lib"><dir name="HTTP"><file name="ConditionalGet.php" hash="f9760a41a6688eca78c27e4afd760a02"/><file name="Encoder.php" hash="71d0651830bbf9153191f1749bf54e62"/></dir><dir name="Minify"><dir name="Cache"><file name="APC.php" hash="2766ccf5e1e4d6e38d3ec128dbc4bc6f"/><file name="File.php" hash="26d02518b2035f1b1ae49da001baa26a"/><file name="Memcache.php" hash="fa208d979196d0479e3aacec853502c8"/></dir><dir name="Controller"><file name="Base.php" hash="766127568874bfa7e2a9985bb028321c"/><file name="Files.php" hash="18a48dde08afee8620d3a79b36addb9d"/><file name="Groups.php" hash="12c1e6818e7a7115e38eeb9492970019"/><file name="MinApp.php" hash="88a6eb77b74178d0e29a099e0e6ccc63"/><file name="Page.php" hash="02bc8325362e435d4af75a6ec138c2d4"/><file name="Version1.php" hash="4369c8793be1d5cf061a99651b16da26"/></dir><dir name="CSS"><file name="Compressor.php" hash="b514fdc1f7c010031631994c77a18bf6"/><file name="UriRewriter.php" hash="5ab5dfdb489e28a39a4e9d6ad70117d6"/></dir><file name="Build.php" hash="6e329c2acc80b72cfde52be6918940bb"/><file name="BuildSpeedster.php" hash="b93d3e802e2bf7b31eecf9537d3e92f9"/><file name="CommentPreserver.php" hash="86bab05265083b57935503bdd735ce74"/><file name="CSS.php" hash="cdeb49c0f35a6cef166c6cfee7f1dd95"/><file name="HTML.php" hash="e774a70491041048fef690d4b162e0ce"/><file name="ImportProcessor.php" hash="5ce5f2c30830af408d82d4d1511e0c8a"/><file name="Javascript.php" hash="1baa1a43818fcecb89c2a08b40a544da"/><file name="Lines.php" hash="80b2932320c98d1e84aa7f48fceb35e8"/><file name="Logger.php" hash="b2844a8c35e028b9ee725be05adbcf7e"/><file name="Packer.php" hash="25e6f213205f060853db918c2d67ef06"/><file name="Source.php" hash="f7055f963f00e5ae9f5b0005d5e4a5ec"/><file name="YUICompressor.php" hash="13840856d6340e70e7289035827b8b7d"/></dir><dir name="Solar"><file name="Dir.php" hash="6c88f363f6830ac4dc3917eac3c9d78c"/></dir><file name="FirePHP.php" hash="f619b5a77fee4b21e4397e98d858fbf4"/><file name="JSMin.php" hash="5716028656e1d402c98a43ee18648dd3"/><file name="JSMinPlus.php" hash="9d982f55fe9526105eaf9c0fc661263e"/><file name="Minify.php" hash="091d6a6c852610303b405bcfa363b21f"/></dir><file name="HISTORY.txt" hash="72bf6c9ceb63bab5fc35aff334a79bd2"/><file name="LICENSE.txt" hash="911d374696c0a5e9e6e848e7f20d0ee1"/><file name="m.php" hash="111d3b974d094a156425044a764ce721"/><file name="README.txt" hash="6e961a626ae6814c72fab53bcad4a4a7"/></dir></target></contents>
19
  <compatible/>
20
  <dependencies/>
21
  </package>
var/minifycache/minify_1b6ee19a4c3855472c3e3dd57413cb65 ADDED
@@ -0,0 +1,385 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ var varienTabs=new Class.create();varienTabs.prototype={initialize:function(containerId,destElementId,activeTabId,shadowTabs){this.containerId=containerId;this.destElementId=destElementId;this.activeTab=null;this.tabOnClick=this.tabMouseClick.bindAsEventListener(this);this.tabs=$$('#'+this.containerId+' li a.tab-item-link');this.hideAllTabsContent();for(var tab=0;tab<this.tabs.length;tab++){Event.observe(this.tabs[tab],'click',this.tabOnClick);if($(this.destElementId)){var tabContentElement=$(this.getTabContentElementId(this.tabs[tab]));if(tabContentElement&&tabContentElement.parentNode.id!=this.destElementId){$(this.destElementId).appendChild(tabContentElement);tabContentElement.container=this;tabContentElement.statusBar=this.tabs[tab];tabContentElement.tabObject=this.tabs[tab];this.tabs[tab].contentMoved=true;this.tabs[tab].container=this;this.tabs[tab].show=function(){this.container.showTabContent(this);}
2
+ if(varienGlobalEvents){varienGlobalEvents.fireEvent('moveTab',{tab:this.tabs[tab]});}}}
3
+ if(this.tabs[tab].id&&shadowTabs&&shadowTabs[this.tabs[tab].id]){this.tabs[tab].shadowTabs=shadowTabs[this.tabs[tab].id];}}
4
+ this.displayFirst=activeTabId;Event.observe(window,'load',this.moveTabContentInDest.bind(this));},setSkipDisplayFirstTab:function(){this.displayFirst=null;},moveTabContentInDest:function(){for(var tab=0;tab<this.tabs.length;tab++){if($(this.destElementId)&&!this.tabs[tab].contentMoved){var tabContentElement=$(this.getTabContentElementId(this.tabs[tab]));if(tabContentElement&&tabContentElement.parentNode.id!=this.destElementId){$(this.destElementId).appendChild(tabContentElement);tabContentElement.container=this;tabContentElement.statusBar=this.tabs[tab];tabContentElement.tabObject=this.tabs[tab];this.tabs[tab].container=this;this.tabs[tab].show=function(){this.container.showTabContent(this);}
5
+ if(varienGlobalEvents){varienGlobalEvents.fireEvent('moveTab',{tab:this.tabs[tab]});}}}}
6
+ if(this.displayFirst){this.showTabContent($(this.displayFirst));this.displayFirst=null;}},getTabContentElementId:function(tab){if(tab){return tab.id+'_content';}
7
+ return false;},tabMouseClick:function(event){var tab=Event.findElement(event,'a');if((tab.href.indexOf('#')!=tab.href.length-1)&&!(Element.hasClassName(tab,'ajax'))){location.href=tab.href;}
8
+ else{this.showTabContent(tab);}
9
+ Event.stop(event);},hideAllTabsContent:function(){for(var tab in this.tabs){this.hideTabContent(this.tabs[tab]);}},showTabContentImmediately:function(tab){this.hideAllTabsContent();var tabContentElement=$(this.getTabContentElementId(tab));if(tabContentElement){Element.show(tabContentElement);Element.addClassName(tab,'active');if(tab.shadowTabs&&tab.shadowTabs.length){for(var k in tab.shadowTabs){this.loadShadowTab($(tab.shadowTabs[k]));}}
10
+ if(!Element.hasClassName(tab,'ajax only')){Element.removeClassName(tab,'notloaded');}
11
+ this.activeTab=tab;}
12
+ if(varienGlobalEvents){varienGlobalEvents.fireEvent('showTab',{tab:tab});}},showTabContent:function(tab){var tabContentElement=$(this.getTabContentElementId(tab));if(tabContentElement){if(this.activeTab!=tab){if(varienGlobalEvents){if(varienGlobalEvents.fireEvent('tabChangeBefore',$(this.getTabContentElementId(this.activeTab))).indexOf('cannotchange')!=-1){return;};}}
13
+ var isAjax=Element.hasClassName(tab,'ajax');var isEmpty=tabContentElement.innerHTML==''&&tab.href.indexOf('#')!=tab.href.length-1;var isNotLoaded=Element.hasClassName(tab,'notloaded');if(isAjax&&(isEmpty||isNotLoaded))
14
+ {new Ajax.Request(tab.href,{parameters:{form_key:FORM_KEY},evalScripts:true,onSuccess:function(transport){try{if(transport.responseText.isJSON()){var response=transport.responseText.evalJSON()
15
+ if(response.error){alert(response.message);}
16
+ if(response.ajaxExpired&&response.ajaxRedirect){setLocation(response.ajaxRedirect);}}else{$(tabContentElement.id).update(transport.responseText);this.showTabContentImmediately(tab)}}
17
+ catch(e){$(tabContentElement.id).update(transport.responseText);this.showTabContentImmediately(tab)}}.bind(this)});}
18
+ else{this.showTabContentImmediately(tab);}}},loadShadowTab:function(tab){var tabContentElement=$(this.getTabContentElementId(tab));if(tabContentElement&&Element.hasClassName(tab,'ajax')&&Element.hasClassName(tab,'notloaded')){new Ajax.Request(tab.href,{parameters:{form_key:FORM_KEY},evalScripts:true,onSuccess:function(transport){try{if(transport.responseText.isJSON()){var response=transport.responseText.evalJSON()
19
+ if(response.error){alert(response.message);}
20
+ if(response.ajaxExpired&&response.ajaxRedirect){setLocation(response.ajaxRedirect);}}else{$(tabContentElement.id).update(transport.responseText);if(!Element.hasClassName(tab,'ajax only')){Element.removeClassName(tab,'notloaded');}}}
21
+ catch(e){$(tabContentElement.id).update(transport.responseText);if(!Element.hasClassName(tab,'ajax only')){Element.removeClassName(tab,'notloaded');}}}.bind(this)});}},hideTabContent:function(tab){var tabContentElement=$(this.getTabContentElementId(tab));if($(this.destElementId)&&tabContentElement){Element.hide(tabContentElement);Element.removeClassName(tab,'active');}
22
+ if(varienGlobalEvents){varienGlobalEvents.fireEvent('hideTab',{tab:tab});}}};var varienForm=new Class.create();varienForm.prototype={initialize:function(formId,validationUrl){this.formId=formId;this.validationUrl=validationUrl;this.submitUrl=false;if($(this.formId)){this.validator=new Validation(this.formId,{onElementValidate:this.checkErrors.bind(this)});}
23
+ this.errorSections=$H({});},checkErrors:function(result,elm){if(!result)
24
+ elm.setHasError(true,this);else
25
+ elm.setHasError(false,this);},submit:function(url){if(typeof varienGlobalEvents!=undefined){varienGlobalEvents.fireEvent('formSubmit',this.formId);}
26
+ this.errorSections=$H({});this.canShowError=true;this.submitUrl=url;if(this.validator&&this.validator.validate()){if(this.validationUrl){this._validate();}
27
+ else{this._submit();}
28
+ return true;}
29
+ return false;},_validate:function(){new Ajax.Request(this.validationUrl,{method:'post',parameters:$(this.formId).serialize(),onComplete:this._processValidationResult.bind(this),onFailure:this._processFailure.bind(this)});},_processValidationResult:function(transport){var response=transport.responseText.evalJSON();if(response.error){if($('messages')){$('messages').innerHTML=response.message;}}
30
+ else{this._submit();}},_processFailure:function(transport){location.href=BASE_URL;},_submit:function(){if(this.submitUrl){$(this.formId).action=this.submitUrl;}
31
+ $(this.formId).submit();}}
32
+ Validation.isVisible=function(elm){while(elm&&elm.tagName!='BODY'){if(elm.disabled)return false;if((Element.hasClassName(elm,'template')&&Element.hasClassName(elm,'no-display'))||Element.hasClassName(elm,'ignore-validate')){return false;}
33
+ elm=elm.parentNode;}
34
+ return true;}
35
+ var varienElementMethods={setHasChanges:function(element,event){if($(element)&&$(element).hasClassName('no-changes'))return;var elm=element;while(elm&&elm.tagName!='BODY'){if(elm.statusBar)
36
+ Element.addClassName($(elm.statusBar),'changed')
37
+ elm=elm.parentNode;}},setHasError:function(element,flag,form){var elm=element;while(elm&&elm.tagName!='BODY'){if(elm.statusBar){if(form.errorSections.keys().indexOf(elm.statusBar.id)<0)
38
+ form.errorSections.set(elm.statusBar.id,flag);if(flag){Element.addClassName($(elm.statusBar),'error');if(form.canShowError&&$(elm.statusBar).show){form.canShowError=false;$(elm.statusBar).show();}
39
+ form.errorSections.set(elm.statusBar.id,flag);}
40
+ else if(!form.errorSections.get(elm.statusBar.id)){Element.removeClassName($(elm.statusBar),'error')}}
41
+ elm=elm.parentNode;}
42
+ this.canShowElement=false;}}
43
+ Element.addMethods(varienElementMethods);varienWindowOnloadCache={};function varienWindowOnload(useCache){var dataElements=$$('input','select','textarea');for(var i=0;i<dataElements.length;i++){if(dataElements[i]&&dataElements[i].id){if((!useCache)||(!varienWindowOnloadCache[dataElements[i].id])){Event.observe(dataElements[i],'change',dataElements[i].setHasChanges.bind(dataElements[i]));if(useCache){varienWindowOnloadCache[dataElements[i].id]=true;}}}}}
44
+ Event.observe(window,'load',varienWindowOnload);RegionUpdater=Class.create();RegionUpdater.prototype={initialize:function(countryEl,regionTextEl,regionSelectEl,regions,disableAction,clearRegionValueOnDisable)
45
+ {this.countryEl=$(countryEl);this.regionTextEl=$(regionTextEl);this.regionSelectEl=$(regionSelectEl);this.regions=regions;this.disableAction=(typeof disableAction=='undefined')?'hide':disableAction;this.clearRegionValueOnDisable=(typeof clearRegionValueOnDisable=='undefined')?false:clearRegionValueOnDisable;if(this.regionSelectEl.options.length<=1){this.update();}
46
+ else{this.lastCountryId=this.countryEl.value;}
47
+ this.countryEl.changeUpdater=this.update.bind(this);Event.observe(this.countryEl,'change',this.update.bind(this));},update:function()
48
+ {if(this.regions[this.countryEl.value]){if(this.lastCountryId!=this.countryEl.value){var i,option,region,def;if(this.regionTextEl){def=this.regionTextEl.value.toLowerCase();this.regionTextEl.value='';}
49
+ if(!def){def=this.regionSelectEl.getAttribute('defaultValue');}
50
+ this.regionSelectEl.options.length=1;for(regionId in this.regions[this.countryEl.value]){region=this.regions[this.countryEl.value][regionId];option=document.createElement('OPTION');option.value=regionId;option.text=region.name;if(this.regionSelectEl.options.add){this.regionSelectEl.options.add(option);}else{this.regionSelectEl.appendChild(option);}
51
+ if(regionId==def||region.name.toLowerCase()==def||region.code.toLowerCase()==def){this.regionSelectEl.value=regionId;}}}
52
+ if(this.disableAction=='hide'){if(this.regionTextEl){this.regionTextEl.style.display='none';this.regionTextEl.style.disabled=true;}
53
+ this.regionSelectEl.style.display='';this.regionSelectEl.disabled=false;}else if(this.disableAction=='disable'){if(this.regionTextEl){this.regionTextEl.disabled=true;}
54
+ this.regionSelectEl.disabled=false;}
55
+ this.setMarkDisplay(this.regionSelectEl,true);this.lastCountryId=this.countryEl.value;}else{if(this.disableAction=='hide'){if(this.regionTextEl){this.regionTextEl.style.display='';this.regionTextEl.style.disabled=false;}
56
+ this.regionSelectEl.style.display='none';this.regionSelectEl.disabled=true;}else if(this.disableAction=='disable'){if(this.regionTextEl){this.regionTextEl.disabled=false;}
57
+ this.regionSelectEl.disabled=true;if(this.clearRegionValueOnDisable){this.regionSelectEl.value='';}}else if(this.disableAction=='nullify'){this.regionSelectEl.options.length=1;this.regionSelectEl.value='';this.regionSelectEl.selectedIndex=0;this.lastCountryId='';}
58
+ this.setMarkDisplay(this.regionSelectEl,false);}
59
+ varienGlobalEvents.fireEvent("address_country_changed",this.countryEl);},setMarkDisplay:function(elem,display){if(elem.parentNode.parentNode){var marks=Element.select(elem.parentNode.parentNode,'.required');if(marks[0]){display?marks[0].show():marks[0].hide();}}}}
60
+ regionUpdater=RegionUpdater;Event.pointerX=function(event){try{return event.pageX||(event.clientX+(document.documentElement.scrollLeft||document.body.scrollLeft));}
61
+ catch(e){}}
62
+ Event.pointerY=function(event){try{return event.pageY||(event.clientY+(document.documentElement.scrollTop||document.body.scrollTop));}
63
+ catch(e){}}
64
+ SelectUpdater=Class.create();SelectUpdater.prototype={initialize:function(firstSelect,secondSelect,selectFirstMessage,noValuesMessage,values,selected)
65
+ {this.first=$(firstSelect);this.second=$(secondSelect);this.message=selectFirstMessage;this.values=values;this.noMessage=noValuesMessage;this.selected=selected;this.update();Event.observe(this.first,'change',this.update.bind(this));},update:function()
66
+ {this.second.length=0;this.second.value='';if(this.first.value&&this.values[this.first.value]){for(optionValue in this.values[this.first.value]){optionTitle=this.values[this.first.value][optionValue];this.addOption(this.second,optionValue,optionTitle);}
67
+ this.second.disabled=false;}else if(this.first.value&&!this.values[this.first.value]){this.addOption(this.second,'',this.noMessage);}else{this.addOption(this.second,'',this.message);this.second.disabled=true;}},addOption:function(select,value,text)
68
+ {option=document.createElement('OPTION');option.value=value;option.text=text;if(this.selected&&option.value==this.selected){option.selected=true;this.selected=false;}
69
+ if(select.options.add){select.options.add(option);}else{select.appendChild(option);}}}
70
+ FormElementDependenceController=Class.create();FormElementDependenceController.prototype={initialize:function(elementsMap)
71
+ {for(var idTo in elementsMap){for(var idFrom in elementsMap[idTo]){Event.observe($(idFrom),'change',this.trackChange.bindAsEventListener(this,idTo,elementsMap[idTo]));this.trackChange(null,idTo,elementsMap[idTo]);}}},trackChange:function(e,idTo,valuesFrom)
72
+ {var shouldShowUp=true;for(var idFrom in valuesFrom){if($(idFrom).value!=valuesFrom[idFrom]){shouldShowUp=false;}}
73
+ if(shouldShowUp){$(idTo).up(1).select('input','select').each(function(item){if(!item.type||item.type!='hidden'){item.disabled=false;}});$(idTo).up(1).show();}else{$(idTo).up(1).select('input','select').each(function(item){if(!item.type||item.type!='hidden'){item.disabled=true;}});$(idTo).up(1).hide();}}};var varienAccordion=new Class.create();varienAccordion.prototype={initialize:function(containerId,activeOnlyOne){this.containerId=containerId;this.activeOnlyOne=activeOnlyOne||false;this.container=$(this.containerId);this.items=$$('#'+this.containerId+' dt');this.loader=new varienLoader(true);var links=$$('#'+this.containerId+' dt a');for(var i in links){if(links[i].href){Event.observe(links[i],'click',this.clickItem.bind(this));this.items[i].dd=this.items[i].next('dd');this.items[i].link=links[i];}}
74
+ this.initFromCookie();},initFromCookie:function(){var activeItemId,visibility;if(this.activeOnlyOne&&(activeItemId=Cookie.read(this.cookiePrefix()+'active-item'))!==null){this.hideAllItems();this.showItem(this.getItemById(activeItemId));}else if(!this.activeOnlyOne){this.items.each(function(item){if((visibility=Cookie.read(this.cookiePrefix()+item.id))!==null){if(visibility==0){this.hideItem(item);}else{this.showItem(item);}}}.bind(this));}},cookiePrefix:function(){return'accordion-'+this.containerId+'-';},getItemById:function(itemId){var result=null;this.items.each(function(item){if(item.id==itemId){result=item;throw $break;}});return result;},clickItem:function(event){var item=Event.findElement(event,'dt');if(this.activeOnlyOne){this.hideAllItems();this.showItem(item);Cookie.write(this.cookiePrefix()+'active-item',item.id,30*24*60*60);}
75
+ else{if(this.isItemVisible(item)){this.hideItem(item);Cookie.write(this.cookiePrefix()+item.id,0,30*24*60*60);}
76
+ else{this.showItem(item);Cookie.write(this.cookiePrefix()+item.id,1,30*24*60*60);}}
77
+ Event.stop(event);},showItem:function(item){if(item&&item.link){if(item.link.href){this.loadContent(item);}
78
+ Element.addClassName(item,'open');Element.addClassName(item.dd,'open');}},hideItem:function(item){Element.removeClassName(item,'open');Element.removeClassName(item.dd,'open');},isItemVisible:function(item){return Element.hasClassName(item,'open');},loadContent:function(item){if(item.link.href.indexOf('#')==item.link.href.length-1){return;}
79
+ if(Element.hasClassName(item.link,'ajax')){this.loadingItem=item;this.loader.load(item.link.href,{updaterId:this.loadingItem.dd.id},this.setItemContent.bind(this));return;}
80
+ location.href=item.link.href;},setItemContent:function(content){if(content.isJSON){return;}
81
+ this.loadingItem.dd.innerHTML=content;},hideAllItems:function(){for(var i in this.items){if(this.items[i].id){Element.removeClassName(this.items[i],'open');Element.removeClassName(this.items[i].dd,'open');}}}};function setLocation(url){window.location.href=url;}
82
+ function confirmSetLocation(message,url){if(confirm(message)){setLocation(url);}
83
+ return false;}
84
+ function deleteConfirm(message,url){confirmSetLocation(message,url);}
85
+ function setElementDisable(element,disable){if($(element)){$(element).disabled=disable;}}
86
+ function toggleParentVis(obj){obj=$(obj).parentNode;if(obj.style.display=='none'){obj.style.display='';}else{obj.style.display='none';}}
87
+ function toggleFieldsetVis(obj){id=obj;obj=$(obj);if(obj.style.display=='none'){obj.style.display='';}else{obj.style.display='none';}
88
+ obj=obj.parentNode.childElements();for(var i=0;i<obj.length;i++){if(obj[i].id!=undefined&&obj[i].id==id&&obj[(i-1)].classNames()=='entry-edit-head')
89
+ {if(obj[i-1].style.display=='none'){obj[i-1].style.display='';}else{obj[i-1].style.display='none';}}}}
90
+ function toggleVis(obj){obj=$(obj);if(obj.style.display=='none'){obj.style.display='';}else{obj.style.display='none';}}
91
+ function imagePreview(element){if($(element)){var win=window.open('','preview','width=400,height=400,resizable=1,scrollbars=1');win.document.open();win.document.write('<body style="padding:0;margin:0"><img src="'+$(element).src+'" id="image_preview"/></body>');win.document.close();Event.observe(win,'load',function(){var img=win.document.getElementById('image_preview');win.resizeTo(img.width+40,img.height+80)});}}
92
+ function toggleValueElements(checkbox,container){if(container&&checkbox){var elems=Element.select(container,['select','input','textarea','button','img']);elems.each(function(elem){if(elem!=checkbox){elem.disabled=checkbox.checked;if(checkbox.checked){elem.addClassName('disabled');}else{elem.removeClassName('disabled');}
93
+ if(elem.tagName=='IMG'){checkbox.checked?elem.hide():elem.show();}};})}}
94
+ function submitAndReloadArea(area,url){if($(area)){var fields=$(area).select('input','select','textarea');var data=Form.serializeElements(fields,true);url=url+(url.match(new RegExp('\\?'))?'&isAjax=true':'?isAjax=true');new Ajax.Request(url,{parameters:$H(data),loaderArea:area,onSuccess:function(transport){try{if(transport.responseText.isJSON()){var response=transport.responseText.evalJSON()
95
+ if(response.error){alert(response.message);}
96
+ if(response.ajaxExpired&&response.ajaxRedirect){setLocation(response.ajaxRedirect);}}else{$(area).update(transport.responseText);}}
97
+ catch(e){$(area).update(transport.responseText);}}});}}
98
+ function syncOnchangeValue(baseElem,distElem){var compare={baseElem:baseElem,distElem:distElem}
99
+ Event.observe(baseElem,'change',function(){if($(this.baseElem)&&$(this.distElem)){$(this.distElem).value=$(this.baseElem).value;}}.bind(compare));}
100
+ function updateElementAtCursor(el,value,win){if(win==undefined){win=window.self;}
101
+ if(document.selection){el.focus();sel=win.document.selection.createRange();sel.text=value;}else if(el.selectionStart||el.selectionStart=='0'){var startPos=el.selectionStart;var endPos=el.selectionEnd;el.value=el.value.substring(0,startPos)+value+el.value.substring(endPos,el.value.length);}else{el.value+=value;}}
102
+ function firebugEnabled(){if(window.console&&window.console.firebug){return true;}
103
+ return false;}
104
+ function disableElements(search){$$('.'+search).each(function(elem){elem.disabled=true;elem.addClassName('disabled');});}
105
+ function enableElements(search){$$('.'+search).each(function(elem){elem.disabled=false;elem.removeClassName('disabled');});}
106
+ if(!navigator.appVersion.match('MSIE 6.')){var header,header_offset,header_copy;Event.observe(window,'load',function(){createTopButtonToolbarToggle();});function createTopButtonToolbarToggle()
107
+ {var headers=$$('.content-header');for(var i=0;i<headers.length;i++){if(!headers[i].hasClassName('skip-header')){header=headers[i];}}
108
+ if(!header){return;}
109
+ header_offset=Element.cumulativeOffset(header)[1];var buttons=$$('.content-buttons')[0];if(buttons){Element.insert(buttons,{before:'<div class="content-buttons-placeholder"></div>'});buttons.placeholder=buttons.previous('.content-buttons-placeholder');buttons.remove();buttons.placeholder.appendChild(buttons);header_offset=Element.cumulativeOffset(buttons)[1];}
110
+ header_copy=document.createElement('div');header_copy.appendChild(header.cloneNode(true));document.body.insertBefore(header_copy,document.body.lastChild)
111
+ $(header_copy).addClassName('content-header-floating');if($(header_copy).down('.content-buttons-placeholder')){$(header_copy).down('.content-buttons-placeholder').remove();}}
112
+ function updateTopButtonToolbarToggle()
113
+ {if(header_copy){header_copy.remove();}
114
+ createTopButtonToolbarToggle();floatingTopButtonToolbarToggle();}
115
+ function floatingTopButtonToolbarToggle(){if(!header||!header_copy||!header_copy.parentNode){return;}
116
+ var s;if(self.pageYOffset){s=self.pageYOffset;}else if(document.documentElement&&document.documentElement.scrollTop){s=document.documentElement.scrollTop;}else if(document.body){s=document.body.scrollTop;}
117
+ var buttons=$$('.content-buttons')[0];if(s>header_offset){if(buttons){if(!buttons.oldParent){buttons.oldParent=buttons.parentNode;buttons.oldBefore=buttons.previous();}
118
+ if(buttons.oldParent==buttons.parentNode){var dimensions=buttons.placeholder.getDimensions()
119
+ buttons.placeholder.style.width=dimensions.width+'px';buttons.placeholder.style.height=dimensions.height+'px';buttons.hide();buttons.remove();$(header_copy).down('div').appendChild(buttons);buttons.show();}}
120
+ header_copy.style.display='block';}else{if(buttons&&buttons.oldParent&&buttons.oldParent!=buttons.parentNode){buttons.remove();buttons.oldParent.insertBefore(buttons,buttons.oldBefore);}
121
+ header.style.visibility='visible';header_copy.style.display='none';}}
122
+ Event.observe(window,'scroll',floatingTopButtonToolbarToggle);Event.observe(window,'resize',floatingTopButtonToolbarToggle);}
123
+ var Cookie={all:function(){var pairs=document.cookie.split(';');var cookies={};pairs.each(function(item,index){var pair=item.strip().split('=');cookies[unescape(pair[0])]=unescape(pair[1]);});return cookies;},read:function(cookieName){var cookies=this.all();if(cookies[cookieName]){return cookies[cookieName];}
124
+ return null;},write:function(cookieName,cookieValue,cookieLifeTime){var expires='';if(cookieLifeTime){var date=new Date();date.setTime(date.getTime()+(cookieLifeTime*1000));expires='; expires='+date.toGMTString();}
125
+ var urlPath='/'+BASE_URL.split('/').slice(3).join('/');document.cookie=escape(cookieName)+"="+escape(cookieValue)+expires+"; path="+urlPath;},clear:function(cookieName){this.write(cookieName,'',-1);}};var Fieldset={cookiePrefix:'fh-',applyCollapse:function(containerId){if($(containerId+'-state')){collapsed=$(containerId+'-state').value==1?0:1;}else{collapsed=$(containerId+'-head').collapsed;}
126
+ if(collapsed==1||collapsed===undefined){$(containerId+'-head').removeClassName('open');$(containerId).hide();}else{$(containerId+'-head').addClassName('open');$(containerId).show();}},toggleCollapse:function(containerId,saveThroughAjax){if($(containerId+'-state')){collapsed=$(containerId+'-state').value==1?0:1;}else{collapsed=$(containerId+'-head').collapsed;}
127
+ if(collapsed==1||collapsed===undefined){if($(containerId+'-state')){$(containerId+'-state').value=1;}
128
+ $(containerId+'-head').collapsed=0;}else{if($(containerId+'-state')){$(containerId+'-state').value=0;}
129
+ $(containerId+'-head').collapsed=1;}
130
+ this.applyCollapse(containerId);if(typeof saveThroughAjax!="undefined"){this.saveState(saveThroughAjax,{container:containerId,value:$(containerId+'-state').value});}},addToPrefix:function(value){this.cookiePrefix+=value+'-';},saveState:function(url,parameters){new Ajax.Request(url,{method:'get',parameters:Object.toQueryString(parameters),loaderArea:false});}};var Base64={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",encode:function(input){var output="";var chr1,chr2,chr3,enc1,enc2,enc3,enc4;var i=0;input=Base64._utf8_encode(input);while(i<input.length){chr1=input.charCodeAt(i++);chr2=input.charCodeAt(i++);chr3=input.charCodeAt(i++);enc1=chr1>>2;enc2=((chr1&3)<<4)|(chr2>>4);enc3=((chr2&15)<<2)|(chr3>>6);enc4=chr3&63;if(isNaN(chr2)){enc3=enc4=64;}else if(isNaN(chr3)){enc4=64;}
131
+ output=output+
132
+ this._keyStr.charAt(enc1)+this._keyStr.charAt(enc2)+
133
+ this._keyStr.charAt(enc3)+this._keyStr.charAt(enc4);}
134
+ return output;},decode:function(input){var output="";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;input=input.replace(/[^A-Za-z0-9\+\/\=]/g,"");while(i<input.length){enc1=this._keyStr.indexOf(input.charAt(i++));enc2=this._keyStr.indexOf(input.charAt(i++));enc3=this._keyStr.indexOf(input.charAt(i++));enc4=this._keyStr.indexOf(input.charAt(i++));chr1=(enc1<<2)|(enc2>>4);chr2=((enc2&15)<<4)|(enc3>>2);chr3=((enc3&3)<<6)|enc4;output=output+String.fromCharCode(chr1);if(enc3!=64){output=output+String.fromCharCode(chr2);}
135
+ if(enc4!=64){output=output+String.fromCharCode(chr3);}}
136
+ output=Base64._utf8_decode(output);return output;},mageEncode:function(input){return this.encode(input).replace(/\+/g,'-').replace(/\//g,'_').replace(/=/g,',');},mageDecode:function(output){output=output.replace(/\-/g,'+').replace(/_/g,'/').replace(/,/g,'=');return this.decode(output);},idEncode:function(input){return this.encode(input).replace(/\+/g,':').replace(/\//g,'_').replace(/=/g,'-');},idDecode:function(output){output=output.replace(/\-/g,'=').replace(/_/g,'/').replace(/\:/g,'\+');return this.decode(output);},_utf8_encode:function(string){string=string.replace(/\r\n/g,"\n");var utftext="";for(var n=0;n<string.length;n++){var c=string.charCodeAt(n);if(c<128){utftext+=String.fromCharCode(c);}
137
+ else if((c>127)&&(c<2048)){utftext+=String.fromCharCode((c>>6)|192);utftext+=String.fromCharCode((c&63)|128);}
138
+ else{utftext+=String.fromCharCode((c>>12)|224);utftext+=String.fromCharCode(((c>>6)&63)|128);utftext+=String.fromCharCode((c&63)|128);}}
139
+ return utftext;},_utf8_decode:function(utftext){var string="";var i=0;var c=c1=c2=0;while(i<utftext.length){c=utftext.charCodeAt(i);if(c<128){string+=String.fromCharCode(c);i++;}
140
+ else if((c>191)&&(c<224)){c2=utftext.charCodeAt(i+1);string+=String.fromCharCode(((c&31)<<6)|(c2&63));i+=2;}
141
+ else{c2=utftext.charCodeAt(i+1);c3=utftext.charCodeAt(i+2);string+=String.fromCharCode(((c&15)<<12)|((c2&63)<<6)|(c3&63));i+=3;}}
142
+ return string;}};;function MultiSelector(list_target,field_name,max,new_element_html,delete_text,new_file_input){this.list_target=list_target;this.field_name=field_name;this.count=0;this.id=0;if(max){this.max=max;}else{this.max=-1;};this.new_element_html=new_element_html;this.delete_text=delete_text;this.new_file_input=new_file_input;this.addElement=function(element){if(element.tagName=='INPUT'&&element.type=='file'){this.id++;element.name=this.field_name+'[]';element.multi_selector=this;element.onchange=function(){var new_element=document.createElement('input');new_element.type='file';this.parentNode.insertBefore(new_element,this);this.multi_selector.addElement(new_element);this.multi_selector.addListRow(this);this.style.position='absolute';this.style.left='-1000px';};if(this.max!=-1&&this.count>=this.max){element.disabled=true;};this.count++;this.current_element=element;}else{alert('Error: not a file input element');};};this.addListRow=function(element){var new_row_input=document.createElement('input');new_row_input.type='text';new_row_input.name='general[position_new][]';new_row_input.size='3';new_row_input.value='0';var new_row_button=document.createElement('input');new_row_button.type='checkbox';new_row_button.value='Delete';var new_row_span=document.createElement('span');new_row_span.innerHTML=this.delete_text;table=this.list_target;noOfRows=table.rows.length;noOfCols=table.rows[noOfRows-2].cells.length;var x=table.insertRow(noOfRows-1);for(var j=0;j<noOfCols;j++){newCell=x.insertCell(j);newCell.align="center";newCell.valign="middle";if(j==3){newCell.appendChild(new_row_input);}
143
+ else if(j==4){newCell.appendChild(new_row_button);}
144
+ else{newCell.innerHTML=this.new_file_input.replace(/%id%/g,this.id).replace(/%j%/g,j);}}
145
+ new_row_button.onclick=function(){this.parentNode.element.parentNode.removeChild(this.parentNode.element);this.parentNode.parentNode.removeChild(this.parentNode);this.parentNode.element.multi_selector.count--;this.parentNode.element.multi_selector.current_element.disabled=false;return false;};};this.insRowLast=function(table){noOfRows=table.rows.length;noOfCols=table.rows[noOfRows-1].cells.length;var x=table.insertRow(noOfRows);for(var j=0;j<noOfCols;j++){newCell=x.insertCell(j);newCell.innerHTML="NEW CELL"+j;}};this.deleteRow=function(table,row){table.deleteRow(row);};this.deleteRow=function(table){noOfRows=table.rows.length;table.deleteRow(noOfRows-1);};};;var Product={};Product.Gallery=Class.create();Product.Gallery.prototype={images:[],file2id:{'no_selection':0},idIncrement:1,containerId:'',container:null,uploader:null,imageTypes:{},initialize:function(containerId,uploader,imageTypes){this.containerId=containerId,this.container=$(this.containerId);this.uploader=uploader;this.imageTypes=imageTypes;if(this.uploader){this.uploader.onFilesComplete=this.handleUploadComplete.bind(this);}
146
+ this.images=this.getElement('save').value.evalJSON();this.imagesValues=this.getElement('save_image').value.evalJSON();this.template=new Template('<tr id="__id__" class="preview">'+this.getElement('template').innerHTML+'</tr>',new RegExp('(^|.|\\r|\\n)(__([a-zA-Z0-9_]+)__)',''));this.fixParentTable();this.updateImages();varienGlobalEvents.attachEventHandler('moveTab',this.onImageTabMove.bind(this));},onImageTabMove:function(event){var imagesTab=false;this.container.ancestors().each(function(parentItem){if(parentItem.tabObject){imagesTab=parentItem.tabObject;throw $break;}}.bind(this));if(imagesTab&&event.tab&&event.tab.name&&imagesTab.name==event.tab.name){this.container.select('input[type="radio"]').each(function(radio){radio.observe('change',this.onChangeRadio);}.bind(this));this.updateImages();}},fixParentTable:function(){this.container.ancestors().each(function(parentItem){if(parentItem.tagName.toLowerCase()=='td'){parentItem.style.width='100%';}
147
+ if(parentItem.tagName.toLowerCase()=='table'){parentItem.style.width='100%';throw $break;}});},getElement:function(name){return $(this.containerId+'_'+name);},showUploader:function(){this.getElement('add_images_button').hide();this.getElement('uploader').show();},handleUploadComplete:function(files){files.each(function(item){if(!item.response.isJSON()){try{console.log(item.response);}catch(e2){alert(item.response);}
148
+ return;}
149
+ var response=item.response.evalJSON();if(response.error){return;}
150
+ var newImage={};newImage.url=response.url;newImage.file=response.file;newImage.label='';newImage.position=this.getNextPosition();newImage.disabled=0;newImage.removed=0;this.images.push(newImage);this.uploader.removeFile(item.id);}.bind(this));this.container.setHasChanges();this.updateImages();},updateImages:function(){this.getElement('save').value=this.images.toJSON();$H(this.imageTypes).each(function(pair){this.getFileElement('no_selection','cell-'+pair.key+' input').checked=true;}.bind(this));this.images.each(function(row){if(!$(this.prepareId(row.file))){this.createImageRow(row);}
151
+ this.updateVisualisation(row.file);}.bind(this));this.updateUseDefault(false);},onChangeRadio:function(evt){var element=Event.element(evt);element.setHasChanges();},createImageRow:function(image){var vars=Object.clone(image);vars.id=this.prepareId(image.file);var html=this.template.evaluate(vars);Element.insert(this.getElement('list'),{bottom:html});$(vars.id).select('input[type="radio"]').each(function(radio){radio.observe('change',this.onChangeRadio);}.bind(this));},prepareId:function(file){if(typeof this.file2id[file]=='undefined'){this.file2id[file]=this.idIncrement++;}
152
+ return this.containerId+'-image-'+this.file2id[file];},getNextPosition:function(){var maxPosition=0;this.images.each(function(item){if(parseInt(item.position)>maxPosition){maxPosition=parseInt(item.position);}});return maxPosition+1;},updateImage:function(file){var index=this.getIndexByFile(file);this.images[index].label=this.getFileElement(file,'cell-label input').value;this.images[index].position=this.getFileElement(file,'cell-position input').value;this.images[index].removed=(this.getFileElement(file,'cell-remove input').checked?1:0);this.images[index].disabled=(this.getFileElement(file,'cell-disable input').checked?1:0);this.getElement('save').value=this.images.toJSON();this.updateState(file);this.container.setHasChanges();},loadImage:function(file){var image=this.getImageByFile(file);this.getFileElement(file,'cell-image img').src=image.url;this.getFileElement(file,'cell-image img').show();this.getFileElement(file,'cell-image .place-holder').hide();},setProductImages:function(file){$H(this.imageTypes).each(function(pair){if(this.getFileElement(file,'cell-'+pair.key+' input').checked){this.imagesValues[pair.key]=(file=='no_selection'?null:file);}}.bind(this));this.getElement('save_image').value=$H(this.imagesValues).toJSON();},updateVisualisation:function(file){var image=this.getImageByFile(file);this.getFileElement(file,'cell-label input').value=image.label;this.getFileElement(file,'cell-position input').value=image.position;this.getFileElement(file,'cell-remove input').checked=(image.removed==1);this.getFileElement(file,'cell-disable input').checked=(image.disabled==1);$H(this.imageTypes).each(function(pair){if(this.imagesValues[pair.key]==file){this.getFileElement(file,'cell-'+pair.key+' input').checked=true;}}.bind(this));this.updateState(file);},updateState:function(file){if(this.getFileElement(file,'cell-disable input').checked){this.getFileElement(file,'cell-position input').disabled=true;}else{this.getFileElement(file,'cell-position input').disabled=false;}},getFileElement:function(file,element){var selector='#'+this.prepareId(file)+' .'+element;var elems=$$(selector);if(!elems[0]){try{console.log(selector);}catch(e2){alert(selector);}}
153
+ return $$('#'+this.prepareId(file)+' .'+element)[0];},getImageByFile:function(file){if(this.getIndexByFile(file)===null){return false;}
154
+ return this.images[this.getIndexByFile(file)];},getIndexByFile:function(file){var index;this.images.each(function(item,i){if(item.file==file){index=i;}});return index;},updateUseDefault:function(){if(this.getElement('default')){this.getElement('default').select('input').each(function(input){$(this.containerId).select('.cell-'+input.value+' input').each(function(radio){radio.disabled=input.checked;});}.bind(this));}
155
+ if(arguments.length==0){this.container.setHasChanges();}},handleUploadProgress:function(file){},handleUploadError:function(fileId){}};Product.AttributesBridge={tabsObject:false,bindTabs2Attributes:{},bind:function(tabId,attributesObject){this.bindTabs2Attributes[tabId]=attributesObject;},getAttributes:function(tabId){return this.bindTabs2Attributes[tabId];},setTabsObject:function(tabs){this.tabsObject=tabs;},getTabsObject:function(){return this.tabsObject;},addAttributeRow:function(data){$H(data).each(function(item){if(this.getTabsObject().activeTab.name!=item.key){this.getTabsObject().showTabContent($(item.key));}
156
+ this.getAttributes(item.key).addRow(item.value);}.bind(this));}};Product.Attributes=Class.create();Product.Attributes.prototype={config:{},containerId:null,initialize:function(containerId){this.containerId=containerId;},setConfig:function(config){this.config=config;Product.AttributesBridge.bind(this.getConfig().tab_id,this);},getConfig:function(){return this.config;},create:function(){var win=window.open(this.getConfig().url,'new_attribute','width=900,height=600,resizable=1,scrollbars=1');win.focus();},addRow:function(html){var attributesContainer=$$('#group_fields'+this.getConfig().group_id+' .form-list tbody')[0];Element.insert(attributesContainer,{bottom:html});var childs=attributesContainer.childElements();var element=childs[childs.size()-1].select('input','select','textarea')[0];if(element){window.scrollTo(0,Position.cumulativeOffset(element)[1]
157
+ +element.offsetHeight);}}};Product.Configurable=Class.create();Product.Configurable.prototype={initialize:function(attributes,links,idPrefix,grid,readonly){this.templatesSyntax=new RegExp('(^|.|\\r|\\n)(\'{{\\s*(\\w+)\\s*}}\')',"");this.attributes=attributes;this.idPrefix=idPrefix;this.links=$H(links);this.newProducts=[];this.readonly=readonly;this.addAttributeTemplate=new Template($(idPrefix+'attribute_template').innerHTML.replace(/__id__/g,"'{{html_id}}'").replace(/ template no-display/g,''),this.templatesSyntax);this.addValueTemplate=new Template($(idPrefix+'value_template').innerHTML.replace(/__id__/g,"'{{html_id}}'").replace(/ template no-display/g,''),this.templatesSyntax);this.pricingValueTemplate=new Template($(idPrefix+'simple_pricing').innerHTML,this.templatesSyntax);this.pricingValueViewTemplate=new Template($(idPrefix+'simple_pricing_view').innerHTML,this.templatesSyntax);this.container=$(idPrefix+'attributes');this.onLabelUpdate=this.updateLabel.bindAsEventListener(this);this.onValuePriceUpdate=this.updateValuePrice.bindAsEventListener(this);this.onValueTypeUpdate=this.updateValueType.bindAsEventListener(this);this.onValueDefaultUpdate=this.updateValueUseDefault.bindAsEventListener(this);this.createAttributes();this.grid=grid;this.grid.rowClickCallback=this.rowClick.bind(this);this.grid.initRowCallback=this.rowInit.bind(this);this.grid.checkboxCheckCallback=this.registerProduct.bind(this);this.grid.rows.each(function(row){this.rowInit(this.grid,row);}.bind(this));},createAttributes:function(){this.attributes.each(function(attribute,index){var li=$(document.createElement('LI'));li.className='attribute';li.id=this.idPrefix+'_attribute_'+index;attribute.html_id=li.id;if(attribute&&attribute.label&&attribute.label.blank()){attribute.label='&nbsp;'}
158
+ var label_readonly='';var use_default_checked='';if(attribute.use_default=='1'){use_default_checked=' checked="checked"';label_readonly=' redonly="redonly"';}
159
+ var template=this.addAttributeTemplate.evaluate(attribute);template=template.replace(new RegExp(' readonly="label"','g'),label_readonly);template=template.replace(new RegExp(' checked="use_default"','g'),use_default_checked);li.update(template);li.attributeObject=attribute;this.container.appendChild(li);li.attributeValues=li.down('.attribute-values');if(attribute.values){attribute.values.each(function(value){this.createValueRow(li,value);}.bind(this));}
160
+ Event.observe(li.down('.attribute-label'),'change',this.onLabelUpdate);Event.observe(li.down('.attribute-label'),'keyup',this.onLabelUpdate);Event.observe(li.down('.attribute-use-default-label'),'change',this.onLabelUpdate);}.bind(this));if(!this.readonly){Sortable.create(this.container,{handle:'attribute-name-container',onUpdate:this.updatePositions.bind(this)});}
161
+ this.updateSaveInput();},updateLabel:function(event){var li=Event.findElement(event,'LI');var labelEl=li.down('.attribute-label');var defEl=li.down('.attribute-use-default-label');li.attributeObject.label=labelEl.value;if(defEl.checked){labelEl.readOnly=true;li.attributeObject.use_default=1;}else{labelEl.readOnly=false;li.attributeObject.use_default=0;}
162
+ this.updateSaveInput();},updatePositions:function(param){this.container.childElements().each(function(row,index){row.attributeObject.position=index;});this.updateSaveInput();},addNewProduct:function(productId,attributes){if(this.checkAttributes(attributes)){this.links.set(productId,this.cloneAttributes(attributes));}else{this.newProducts.push(productId);}
163
+ this.updateGrid();this.updateValues();this.grid.reload(null);},createEmptyProduct:function(){this.createPopup(this.createEmptyUrl)},createNewProduct:function(){this.createPopup(this.createNormalUrl);},createPopup:function(url){if(this.win&&!this.win.closed){this.win.close();}
164
+ this.win=window.open(url,'','width=1000,height=700,resizable=1,scrollbars=1');this.win.focus();},registerProduct:function(grid,element,checked){if(checked){if(element.linkAttributes){this.links.set(element.value,element.linkAttributes);}}else{this.links.unset(element.value);}
165
+ this.updateGrid();this.grid.rows.each(function(row){this.revalidateRow(this.grid,row);}.bind(this));this.updateValues();},updateProduct:function(productId,attributes){var isAssociated=false;if(typeof this.links.get(productId)!='undefined'){isAssociated=true;this.links.unset(productId);}
166
+ if(isAssociated&&this.checkAttributes(attributes)){this.links.set(productId,this.cloneAttributes(attributes));}else if(isAssociated){this.newProducts.push(productId);}
167
+ this.updateGrid();this.updateValues();this.grid.reload(null);},cloneAttributes:function(attributes){var newObj=[];for(var i=0,length=attributes.length;i<length;i++){newObj[i]=Object.clone(attributes[i]);}
168
+ return newObj;},rowClick:function(grid,event){var trElement=Event.findElement(event,'tr');var isInput=Event.element(event).tagName.toUpperCase()=='INPUT';if($(Event.findElement(event,'td')).down('a')){return;}
169
+ if(trElement){var checkbox=$(trElement).down('input');if(checkbox&&!checkbox.disabled){var checked=isInput?checkbox.checked:!checkbox.checked;grid.setCheckboxChecked(checkbox,checked);}}},rowInit:function(grid,row){var checkbox=$(row).down('.checkbox');var input=$(row).down('.value-json');if(checkbox&&input){checkbox.linkAttributes=input.value.evalJSON();if(!checkbox.checked){if(!this.checkAttributes(checkbox.linkAttributes)){$(row).addClassName('invalid');checkbox.disable();}else{$(row).removeClassName('invalid');checkbox.enable();}}}},revalidateRow:function(grid,row){var checkbox=$(row).down('.checkbox');if(checkbox){if(!checkbox.checked){if(!this.checkAttributes(checkbox.linkAttributes)){$(row).addClassName('invalid');checkbox.disable();}else{$(row).removeClassName('invalid');checkbox.enable();}}}},checkAttributes:function(attributes){var result=true;this.links.each(function(pair){var fail=false;for(var i=0;i<pair.value.length&&!fail;i++){for(var j=0;j<attributes.length&&!fail;j++){if(pair.value[i].attribute_id==attributes[j].attribute_id&&pair.value[i].value_index!=attributes[j].value_index){fail=true;}}}
170
+ if(!fail){result=false;}});return result;},updateGrid:function(){this.grid.reloadParams={'products[]':this.links.keys().size()?this.links.keys():[0],'new_products[]':this.newProducts};},updateValues:function(){var uniqueAttributeValues=$H({});this.links.each(function(pair){for(var i=0,length=pair.value.length;i<length;i++){var attribute=pair.value[i];if(uniqueAttributeValues.keys().indexOf(attribute.attribute_id)==-1){uniqueAttributeValues.set(attribute.attribute_id,$H({}));}
171
+ uniqueAttributeValues.get(attribute.attribute_id).set(attribute.value_index,attribute);}});this.container.childElements().each(function(row){var attribute=row.attributeObject;for(var i=0,length=attribute.values.length;i<length;i++){if(uniqueAttributeValues.keys().indexOf(attribute.attribute_id)==-1||uniqueAttributeValues.get(attribute.attribute_id).keys().indexOf(attribute.values[i].value_index)==-1){row.attributeValues.childElements().each(function(elem){if(elem.valueObject.value_index==attribute.values[i].value_index){elem.remove();}});attribute.values[i]=undefined;}else{uniqueAttributeValues.get(attribute.attribute_id).unset(attribute.values[i].value_index);}}
172
+ attribute.values=attribute.values.compact();if(uniqueAttributeValues.get(attribute.attribute_id)){uniqueAttributeValues.get(attribute.attribute_id).each(function(pair){attribute.values.push(pair.value);this.createValueRow(row,pair.value);}.bind(this));}}.bind(this));this.updateSaveInput();this.updateSimpleForm();},createValueRow:function(container,value){var templateVariables=$H({});if(!this.valueAutoIndex){this.valueAutoIndex=1;}
173
+ templateVariables.set('html_id',container.id+'_'
174
+ +this.valueAutoIndex);templateVariables.update(value);var pricingValue=parseFloat(templateVariables.get('pricing_value'));if(!isNaN(pricingValue)){templateVariables.set('pricing_value',pricingValue);}else{templateVariables.unset('pricing_value');}
175
+ this.valueAutoIndex++;var li=$(document.createElement('LI'));li.className='attribute-value';li.id=templateVariables.get('html_id');li.update(this.addValueTemplate.evaluate(templateVariables));li.valueObject=value;if(typeof li.valueObject.is_percent=='undefined'){li.valueObject.is_percent=0;}
176
+ if(typeof li.valueObject.pricing_value=='undefined'){li.valueObject.pricing_value='';}
177
+ container.attributeValues.appendChild(li);var priceField=li.down('.attribute-price');var priceTypeField=li.down('.attribute-price-type');if(parseInt(value.is_percent)){priceTypeField.options[1].selected=!(priceTypeField.options[0].selected=false);}else{priceTypeField.options[1].selected=!(priceTypeField.options[0].selected=true);}
178
+ Event.observe(priceField,'keyup',this.onValuePriceUpdate);Event.observe(priceField,'change',this.onValuePriceUpdate);Event.observe(priceTypeField,'change',this.onValueTypeUpdate);var useDefaultEl=li.down('.attribute-use-default-value');if(useDefaultEl){if(li.valueObject.use_default_value){useDefaultEl.checked=true;this.updateUseDefaultRow(useDefaultEl,li);}
179
+ Event.observe(useDefaultEl,'change',this.onValueDefaultUpdate);}},updateValuePrice:function(event){var li=Event.findElement(event,'LI');li.valueObject.pricing_value=(Event.element(event).value.blank()?null:Event.element(event).value);this.updateSimpleForm();this.updateSaveInput();},updateValueType:function(event){var li=Event.findElement(event,'LI');li.valueObject.is_percent=(Event.element(event).value.blank()?null:Event.element(event).value);this.updateSimpleForm();this.updateSaveInput();},updateValueUseDefault:function(event){var li=Event.findElement(event,'LI');var useDefaultEl=Event.element(event);li.valueObject.use_default_value=useDefaultEl.checked;this.updateUseDefaultRow(useDefaultEl,li);},updateUseDefaultRow:function(useDefaultEl,li){var priceField=li.down('.attribute-price');var priceTypeField=li.down('.attribute-price-type');if(useDefaultEl.checked){priceField.disabled=true;priceTypeField.disabled=true;}else{priceField.disabled=false;priceTypeField.disabled=false;}
180
+ this.updateSimpleForm();this.updateSaveInput();},updateSaveInput:function(){$(this.idPrefix+'save_attributes').value=this.attributes.toJSON();$(this.idPrefix+'save_links').value=this.links.toJSON();},initializeAdvicesForSimpleForm:function(){if($(this.idPrefix+'simple_form').advicesInited){return;}
181
+ $(this.idPrefix+'simple_form').select('td.value').each(function(td){var adviceContainer=$(Builder.node('div'));td.appendChild(adviceContainer);td.select('input','select').each(function(element){element.advaiceContainer=adviceContainer;});});$(this.idPrefix+'simple_form').advicesInited=true;},quickCreateNewProduct:function(){this.initializeAdvicesForSimpleForm();$(this.idPrefix+'simple_form').removeClassName('ignore-validate');var validationResult=$(this.idPrefix+'simple_form').select('input','select','textarea').collect(function(elm){return Validation.validate(elm,{useTitle:false,onElementValidate:function(){}});}).all();$(this.idPrefix+'simple_form').addClassName('ignore-validate');if(!validationResult){return;}
182
+ var params=Form.serializeElements($(this.idPrefix+'simple_form').select('input','select','textarea'),true);params.form_key=FORM_KEY;$('messages').update();new Ajax.Request(this.createQuickUrl,{parameters:params,method:'post',area:$(this.idPrefix+'simple_form'),onComplete:this.quickCreateNewProductComplete.bind(this)});},quickCreateNewProductComplete:function(transport){var result=transport.responseText.evalJSON();if(result.error){if(result.error.fields){$(this.idPrefix+'simple_form').removeClassName('ignore-validate');$H(result.error.fields).each(function(pair){$('simple_product_'+pair.key).value=pair.value;$('simple_product_'+pair.key+'_autogenerate').checked=false;toggleValueElements($('simple_product_'+pair.key+'_autogenerate'),$('simple_product_'+pair.key+'_autogenerate').parentNode);Validation.ajaxError($('simple_product_'+pair.key),result.error.message);});$(this.idPrefix+'simple_form').addClassName('ignore-validate');}else{if(result.error.message){alert(result.error.message);}else{alert(result.error);}}
183
+ return;}else if(result.messages){$('messages').update(result.messages);}
184
+ result.attributes.each(function(attribute){var attr=this.getAttributeById(attribute.attribute_id);if(!this.getValueByIndex(attr,attribute.value_index)&&result.pricing&&result.pricing[attr.attribute_code]){attribute.is_percent=result.pricing[attr.attribute_code].is_percent;attribute.pricing_value=(result.pricing[attr.attribute_code].value==null?'':result.pricing[attr.attribute_code].value);}}.bind(this));this.attributes.each(function(attribute){if($('simple_product_'+attribute.attribute_code)){$('simple_product_'+attribute.attribute_code).value='';}}.bind(this));this.links.set(result.product_id,result.attributes);this.updateGrid();this.updateValues();this.grid.reload();},checkCreationUniqueAttributes:function(){var attributes=[];this.attributes.each(function(attribute){attributes.push({attribute_id:attribute.attribute_id,value_index:$('simple_product_'+attribute.attribute_code).value});}.bind(this));return this.checkAttributes(attributes);},getAttributeByCode:function(attributeCode){var attribute=null;this.attributes.each(function(item){if(item.attribute_code==attributeCode){attribute=item;throw $break;}});return attribute;},getAttributeById:function(attributeId){var attribute=null;this.attributes.each(function(item){if(item.attribute_id==attributeId){attribute=item;throw $break;}});return attribute;},getValueByIndex:function(attribute,valueIndex){var result=null;attribute.values.each(function(value){if(value.value_index==valueIndex){result=value;throw $break;}});return result;},showPricing:function(select,attributeCode){var attribute=this.getAttributeByCode(attributeCode);if(!attribute){return;}
185
+ select=$(select);if(select.value&&!$('simple_product_'+attributeCode+'_pricing_container')){Element.insert(select,{after:'<div class="left"></div> <div id="simple_product_'+attributeCode+'_pricing_container" class="left"></div>'});var newContainer=select.next('div');select.parentNode.removeChild(select);newContainer.appendChild(select);$(this.idPrefix+'simple_form').down('.form-list').style.width='100%';}
186
+ var container=$('simple_product_'+attributeCode+'_pricing_container');if(select.value){var value=this.getValueByIndex(attribute,select.value);if(!value){if(!container.down('.attribute-price')){if(value==null){value={};}
187
+ container.update(this.pricingValueTemplate.evaluate(value));var priceValueField=container.down('.attribute-price');var priceTypeField=container.down('.attribute-price-type');priceValueField.attributeCode=attributeCode;priceValueField.priceField=priceValueField;priceValueField.typeField=priceTypeField;priceTypeField.attributeCode=attributeCode;priceTypeField.priceField=priceValueField;priceTypeField.typeField=priceTypeField;Event.observe(priceValueField,'change',this.updateSimplePricing.bindAsEventListener(this));Event.observe(priceValueField,'keyup',this.updateSimplePricing.bindAsEventListener(this));Event.observe(priceTypeField,'change',this.updateSimplePricing.bindAsEventListener(this));$('simple_product_'+attributeCode+'_pricing_value').value=null;$('simple_product_'+attributeCode+'_pricing_type').value=null;}}else if(!isNaN(parseFloat(value.pricing_value))){container.update(this.pricingValueViewTemplate.evaluate({'value':(parseFloat(value.pricing_value)>0?'+':'')
188
+ +parseFloat(value.pricing_value)
189
+ +(parseInt(value.is_percent)>0?'%':'')}));$('simple_product_'+attributeCode+'_pricing_value').value=value.pricing_value;$('simple_product_'+attributeCode+'_pricing_type').value=value.is_percent;}else{container.update('');$('simple_product_'+attributeCode+'_pricing_value').value=null;$('simple_product_'+attributeCode+'_pricing_type').value=null;}}else if(container){container.update('');$('simple_product_'+attributeCode+'_pricing_value').value=null;$('simple_product_'+attributeCode+'_pricing_type').value=null;}},updateSimplePricing:function(evt){var element=Event.element(evt);if(!element.priceField.value.blank()){$('simple_product_'+element.attributeCode+'_pricing_value').value=element.priceField.value;$('simple_product_'+element.attributeCode+'_pricing_type').value=element.typeField.value;}else{$('simple_product_'+element.attributeCode+'_pricing_value').value=null;$('simple_product_'+element.attributeCode+'_pricing_type').value=null;}},updateSimpleForm:function(){this.attributes.each(function(attribute){if($('simple_product_'+attribute.attribute_code)){this.showPricing($('simple_product_'+attribute.attribute_code),attribute.attribute_code);}}.bind(this));},showNoticeMessage:function(){$('assign_product_warrning').show();}}
190
+ var onInitDisableFieldsList=[];function toogleFieldEditMode(toogleIdentifier,fieldContainer){if($(toogleIdentifier).checked){enableFieldEditMode(fieldContainer);}else{disableFieldEditMode(fieldContainer);}}
191
+ function disableFieldEditMode(fieldContainer){$(fieldContainer).disabled=true;if($(fieldContainer+'_hidden')){$(fieldContainer+'_hidden').disabled=true;}}
192
+ function enableFieldEditMode(fieldContainer){$(fieldContainer).disabled=false;if($(fieldContainer+'_hidden')){$(fieldContainer+'_hidden').disabled=false;}}
193
+ function initDisableFields(fieldContainer){onInitDisableFieldsList.push(fieldContainer);}
194
+ function onCompleteDisableInited(){onInitDisableFieldsList.each(function(item){disableFieldEditMode(item);});}
195
+ Event.observe(window,'load',onCompleteDisableInited);;Calendar=function(firstDayOfWeek,dateStr,onSelected,onClose){this.activeDiv=null;this.currentDateEl=null;this.getDateStatus=null;this.getDateToolTip=null;this.getDateText=null;this.timeout=null;this.onSelected=onSelected||null;this.onClose=onClose||null;this.dragging=false;this.hidden=false;this.minYear=1970;this.maxYear=2050;this.dateFormat=Calendar._TT["DEF_DATE_FORMAT"];this.ttDateFormat=Calendar._TT["TT_DATE_FORMAT"];this.isPopup=true;this.weekNumbers=true;this.firstDayOfWeek=typeof firstDayOfWeek=="number"?firstDayOfWeek:Calendar._FD;this.showsOtherMonths=false;this.dateStr=dateStr;this.ar_days=null;this.showsTime=false;this.time24=true;this.yearStep=2;this.hiliteToday=true;this.multiple=null;this.table=null;this.element=null;this.tbody=null;this.firstdayname=null;this.monthsCombo=null;this.yearsCombo=null;this.hilitedMonth=null;this.activeMonth=null;this.hilitedYear=null;this.activeYear=null;this.dateClicked=false;if(typeof Calendar._SDN=="undefined"){if(typeof Calendar._SDN_len=="undefined")
196
+ Calendar._SDN_len=3;var ar=new Array();for(var i=8;i>0;){ar[--i]=Calendar._DN[i].substr(0,Calendar._SDN_len);}
197
+ Calendar._SDN=ar;if(typeof Calendar._SMN_len=="undefined")
198
+ Calendar._SMN_len=3;ar=new Array();for(var i=12;i>0;){ar[--i]=Calendar._MN[i].substr(0,Calendar._SMN_len);}
199
+ Calendar._SMN=ar;}};Calendar._C=null;Calendar.is_ie=(/msie/i.test(navigator.userAgent)&&!/opera/i.test(navigator.userAgent));Calendar.is_ie5=(Calendar.is_ie&&/msie 5\.0/i.test(navigator.userAgent));Calendar.is_opera=/opera/i.test(navigator.userAgent);Calendar.is_khtml=/Konqueror|Safari|KHTML/i.test(navigator.userAgent);Calendar.is_gecko=navigator.userAgent.match(/gecko/i);Calendar.getStyle=function(element,style){if(element.currentStyle){var y=element.currentStyle[style];}else if(window.getComputedStyle){var y=document.defaultView.getComputedStyle(element,null).getPropertyValue(style);}
200
+ return y;};Calendar.getAbsolutePos=function(element){var res=new Object();res.x=0;res.y=0;do{res.x+=element.offsetLeft||0;res.y+=element.offsetTop||0;element=element.offsetParent;if(element){if(element.tagName.toUpperCase()=='BODY')break;var p=Calendar.getStyle(element,'position');if(p!=='static')break;}}while(element);return res;if(element!==null){res.x=element.offsetLeft;res.y=element.offsetTop;var offsetParent=element.offsetParent;var parentNode=element.parentNode;while(offsetParent!==null){res.x+=offsetParent.offsetLeft;res.y+=offsetParent.offsetTop;if(offsetParent!=document.body&&offsetParent!=document.documentElement){res.x-=offsetParent.scrollLeft;res.y-=offsetParent.scrollTop;}
201
+ if(Calendar.is_gecko){while(offsetParent!=parentNode&&parentNode!==null){res.x-=parentNode.scrollLeft;res.y-=parentNode.scrollTop;parentNode=parentNode.parentNode;}}
202
+ parentNode=offsetParent.parentNode;offsetParent=offsetParent.offsetParent;}}
203
+ return res;};Calendar.isRelated=function(el,evt){var related=evt.relatedTarget;if(!related){var type=evt.type;if(type=="mouseover"){related=evt.fromElement;}else if(type=="mouseout"){related=evt.toElement;}}
204
+ while(related){if(related==el){return true;}
205
+ related=related.parentNode;}
206
+ return false;};Calendar.removeClass=function(el,className){if(!(el&&el.className)){return;}
207
+ var cls=el.className.split(" ");var ar=new Array();for(var i=cls.length;i>0;){if(cls[--i]!=className){ar[ar.length]=cls[i];}}
208
+ el.className=ar.join(" ");};Calendar.addClass=function(el,className){Calendar.removeClass(el,className);el.className+=" "+className;};Calendar.getElement=function(ev){var f=Calendar.is_ie?window.event.srcElement:ev.currentTarget;while(f.nodeType!=1||/^div$/i.test(f.tagName))
209
+ f=f.parentNode;return f;};Calendar.getTargetElement=function(ev){var f=Calendar.is_ie?window.event.srcElement:ev.target;while(f.nodeType!=1)
210
+ f=f.parentNode;return f;};Calendar.stopEvent=function(ev){ev||(ev=window.event);if(Calendar.is_ie){ev.cancelBubble=true;ev.returnValue=false;}else{ev.preventDefault();ev.stopPropagation();}
211
+ return false;};Calendar.addEvent=function(el,evname,func){if(el.attachEvent){el.attachEvent("on"+evname,func);}else if(el.addEventListener){el.addEventListener(evname,func,true);}else{el["on"+evname]=func;}};Calendar.removeEvent=function(el,evname,func){if(el.detachEvent){el.detachEvent("on"+evname,func);}else if(el.removeEventListener){el.removeEventListener(evname,func,true);}else{el["on"+evname]=null;}};Calendar.createElement=function(type,parent){var el=null;if(document.createElementNS){el=document.createElementNS("http://www.w3.org/1999/xhtml",type);}else{el=document.createElement(type);}
212
+ if(typeof parent!="undefined"){parent.appendChild(el);}
213
+ return el;};Calendar._add_evs=function(el){with(Calendar){addEvent(el,"mouseover",dayMouseOver);addEvent(el,"mousedown",dayMouseDown);addEvent(el,"mouseout",dayMouseOut);if(is_ie){addEvent(el,"dblclick",dayMouseDblClick);el.setAttribute("unselectable",true);}}};Calendar.findMonth=function(el){if(typeof el.month!="undefined"){return el;}else if(typeof el.parentNode.month!="undefined"){return el.parentNode;}
214
+ return null;};Calendar.findYear=function(el){if(typeof el.year!="undefined"){return el;}else if(typeof el.parentNode.year!="undefined"){return el.parentNode;}
215
+ return null;};Calendar.showMonthsCombo=function(){var cal=Calendar._C;if(!cal){return false;}
216
+ var cal=cal;var cd=cal.activeDiv;var mc=cal.monthsCombo;if(cal.hilitedMonth){Calendar.removeClass(cal.hilitedMonth,"hilite");}
217
+ if(cal.activeMonth){Calendar.removeClass(cal.activeMonth,"active");}
218
+ var mon=cal.monthsCombo.getElementsByTagName("div")[cal.date.getMonth()];Calendar.addClass(mon,"active");cal.activeMonth=mon;var s=mc.style;s.display="block";if(cd.navtype<0)
219
+ s.left=cd.offsetLeft+"px";else{var mcw=mc.offsetWidth;if(typeof mcw=="undefined")
220
+ mcw=50;s.left=(cd.offsetLeft+cd.offsetWidth-mcw)+"px";}
221
+ s.top=(cd.offsetTop+cd.offsetHeight)+"px";};Calendar.showYearsCombo=function(fwd){var cal=Calendar._C;if(!cal){return false;}
222
+ var cal=cal;var cd=cal.activeDiv;var yc=cal.yearsCombo;if(cal.hilitedYear){Calendar.removeClass(cal.hilitedYear,"hilite");}
223
+ if(cal.activeYear){Calendar.removeClass(cal.activeYear,"active");}
224
+ cal.activeYear=null;var Y=cal.date.getFullYear()+(fwd?1:-1);var yr=yc.firstChild;var show=false;for(var i=12;i>0;--i){if(Y>=cal.minYear&&Y<=cal.maxYear){yr.innerHTML=Y;yr.year=Y;yr.style.display="block";show=true;}else{yr.style.display="none";}
225
+ yr=yr.nextSibling;Y+=fwd?cal.yearStep:-cal.yearStep;}
226
+ if(show){var s=yc.style;s.display="block";if(cd.navtype<0)
227
+ s.left=cd.offsetLeft+"px";else{var ycw=yc.offsetWidth;if(typeof ycw=="undefined")
228
+ ycw=50;s.left=(cd.offsetLeft+cd.offsetWidth-ycw)+"px";}
229
+ s.top=(cd.offsetTop+cd.offsetHeight)+"px";}};Calendar.tableMouseUp=function(ev){var cal=Calendar._C;if(!cal){return false;}
230
+ if(cal.timeout){clearTimeout(cal.timeout);}
231
+ var el=cal.activeDiv;if(!el){return false;}
232
+ var target=Calendar.getTargetElement(ev);ev||(ev=window.event);Calendar.removeClass(el,"active");if(target==el||target.parentNode==el){Calendar.cellClick(el,ev);}
233
+ var mon=Calendar.findMonth(target);var date=null;if(mon){date=new CalendarDateObject(cal.date);if(mon.month!=date.getMonth()){date.setMonth(mon.month);cal.setDate(date);cal.dateClicked=false;cal.callHandler();}}else{var year=Calendar.findYear(target);if(year){date=new CalendarDateObject(cal.date);if(year.year!=date.getFullYear()){date.setFullYear(year.year);cal.setDate(date);cal.dateClicked=false;cal.callHandler();}}}
234
+ with(Calendar){removeEvent(document,"mouseup",tableMouseUp);removeEvent(document,"mouseover",tableMouseOver);removeEvent(document,"mousemove",tableMouseOver);cal._hideCombos();_C=null;return stopEvent(ev);}};Calendar.tableMouseOver=function(ev){var cal=Calendar._C;if(!cal){return;}
235
+ var el=cal.activeDiv;var target=Calendar.getTargetElement(ev);if(target==el||target.parentNode==el){Calendar.addClass(el,"hilite active");Calendar.addClass(el.parentNode,"rowhilite");}else{if(typeof el.navtype=="undefined"||(el.navtype!=50&&(el.navtype==0||Math.abs(el.navtype)>2)))
236
+ Calendar.removeClass(el,"active");Calendar.removeClass(el,"hilite");Calendar.removeClass(el.parentNode,"rowhilite");}
237
+ ev||(ev=window.event);if(el.navtype==50&&target!=el){var pos=Calendar.getAbsolutePos(el);var w=el.offsetWidth;var x=ev.clientX;var dx;var decrease=true;if(x>pos.x+w){dx=x-pos.x-w;decrease=false;}else
238
+ dx=pos.x-x;if(dx<0)dx=0;var range=el._range;var current=el._current;var count=Math.floor(dx/10)%range.length;for(var i=range.length;--i>=0;)
239
+ if(range[i]==current)
240
+ break;while(count-->0)
241
+ if(decrease){if(--i<0)
242
+ i=range.length-1;}else if(++i>=range.length)
243
+ i=0;var newval=range[i];el.innerHTML=newval;cal.onUpdateTime();}
244
+ var mon=Calendar.findMonth(target);if(mon){if(mon.month!=cal.date.getMonth()){if(cal.hilitedMonth){Calendar.removeClass(cal.hilitedMonth,"hilite");}
245
+ Calendar.addClass(mon,"hilite");cal.hilitedMonth=mon;}else if(cal.hilitedMonth){Calendar.removeClass(cal.hilitedMonth,"hilite");}}else{if(cal.hilitedMonth){Calendar.removeClass(cal.hilitedMonth,"hilite");}
246
+ var year=Calendar.findYear(target);if(year){if(year.year!=cal.date.getFullYear()){if(cal.hilitedYear){Calendar.removeClass(cal.hilitedYear,"hilite");}
247
+ Calendar.addClass(year,"hilite");cal.hilitedYear=year;}else if(cal.hilitedYear){Calendar.removeClass(cal.hilitedYear,"hilite");}}else if(cal.hilitedYear){Calendar.removeClass(cal.hilitedYear,"hilite");}}
248
+ return Calendar.stopEvent(ev);};Calendar.tableMouseDown=function(ev){if(Calendar.getTargetElement(ev)==Calendar.getElement(ev)){return Calendar.stopEvent(ev);}};Calendar.calDragIt=function(ev){var cal=Calendar._C;if(!(cal&&cal.dragging)){return false;}
249
+ var posX;var posY;if(Calendar.is_ie){posY=window.event.clientY+document.body.scrollTop;posX=window.event.clientX+document.body.scrollLeft;}else{posX=ev.pageX;posY=ev.pageY;}
250
+ cal.hideShowCovered();var st=cal.element.style;st.left=(posX-cal.xOffs)+"px";st.top=(posY-cal.yOffs)+"px";return Calendar.stopEvent(ev);};Calendar.calDragEnd=function(ev){var cal=Calendar._C;if(!cal){return false;}
251
+ cal.dragging=false;with(Calendar){removeEvent(document,"mousemove",calDragIt);removeEvent(document,"mouseup",calDragEnd);tableMouseUp(ev);}
252
+ cal.hideShowCovered();};Calendar.dayMouseDown=function(ev){var el=Calendar.getElement(ev);if(el.disabled){return false;}
253
+ var cal=el.calendar;cal.activeDiv=el;Calendar._C=cal;if(el.navtype!=300)with(Calendar){if(el.navtype==50){el._current=el.innerHTML;addEvent(document,"mousemove",tableMouseOver);}else
254
+ addEvent(document,Calendar.is_ie5?"mousemove":"mouseover",tableMouseOver);addClass(el,"hilite active");addEvent(document,"mouseup",tableMouseUp);}else if(cal.isPopup){cal._dragStart(ev);}
255
+ if(el.navtype==-1||el.navtype==1){if(cal.timeout)clearTimeout(cal.timeout);cal.timeout=setTimeout("Calendar.showMonthsCombo()",250);}else if(el.navtype==-2||el.navtype==2){if(cal.timeout)clearTimeout(cal.timeout);cal.timeout=setTimeout((el.navtype>0)?"Calendar.showYearsCombo(true)":"Calendar.showYearsCombo(false)",250);}else{cal.timeout=null;}
256
+ return Calendar.stopEvent(ev);};Calendar.dayMouseDblClick=function(ev){Calendar.cellClick(Calendar.getElement(ev),ev||window.event);if(Calendar.is_ie){document.selection.empty();}};Calendar.dayMouseOver=function(ev){var el=Calendar.getElement(ev);if(Calendar.isRelated(el,ev)||Calendar._C||el.disabled){return false;}
257
+ if(el.ttip){if(el.ttip.substr(0,1)=="_"){el.ttip=el.caldate.print(el.calendar.ttDateFormat)+el.ttip.substr(1);}
258
+ el.calendar.tooltips.innerHTML=el.ttip;}
259
+ if(el.navtype!=300){Calendar.addClass(el,"hilite");if(el.caldate){Calendar.addClass(el.parentNode,"rowhilite");}}
260
+ return Calendar.stopEvent(ev);};Calendar.dayMouseOut=function(ev){with(Calendar){var el=getElement(ev);if(isRelated(el,ev)||_C||el.disabled)
261
+ return false;removeClass(el,"hilite");if(el.caldate)
262
+ removeClass(el.parentNode,"rowhilite");if(el.calendar)
263
+ el.calendar.tooltips.innerHTML=_TT["SEL_DATE"];return stopEvent(ev);}};Calendar.cellClick=function(el,ev){var cal=el.calendar;var closing=false;var newdate=false;var date=null;if(typeof el.navtype=="undefined"){if(cal.currentDateEl){Calendar.removeClass(cal.currentDateEl,"selected");Calendar.addClass(el,"selected");closing=(cal.currentDateEl==el);if(!closing){cal.currentDateEl=el;}}
264
+ cal.date.setDateOnly(el.caldate);date=cal.date;var other_month=!(cal.dateClicked=!el.otherMonth);if(!other_month&&!cal.currentDateEl)
265
+ cal._toggleMultipleDate(new CalendarDateObject(date));else
266
+ newdate=!el.disabled;if(other_month)
267
+ cal._init(cal.firstDayOfWeek,date);}else{if(el.navtype==200){Calendar.removeClass(el,"hilite");cal.callCloseHandler();return;}
268
+ date=new CalendarDateObject(cal.date);if(el.navtype==0)
269
+ date.setDateOnly(new CalendarDateObject());cal.dateClicked=false;var year=date.getFullYear();var mon=date.getMonth();function setMonth(m){var day=date.getDate();var max=date.getMonthDays(m);if(day>max){date.setDate(max);}
270
+ date.setMonth(m);};switch(el.navtype){case 400:Calendar.removeClass(el,"hilite");var text=Calendar._TT["ABOUT"];if(typeof text!="undefined"){text+=cal.showsTime?Calendar._TT["ABOUT_TIME"]:"";}else{text="Help and about box text is not translated into this language.\n"+"If you know this language and you feel generous please update\n"+"the corresponding file in \"lang\" subdir to match calendar-en.js\n"+"and send it back to <mihai_bazon@yahoo.com> to get it into the distribution ;-)\n\n"+"Thank you!\n"+"http://dynarch.com/mishoo/calendar.epl\n";}
271
+ alert(text);return;case-2:if(year>cal.minYear){date.setFullYear(year-1);}
272
+ break;case-1:if(mon>0){setMonth(mon-1);}else if(year-->cal.minYear){date.setFullYear(year);setMonth(11);}
273
+ break;case 1:if(mon<11){setMonth(mon+1);}else if(year<cal.maxYear){date.setFullYear(year+1);setMonth(0);}
274
+ break;case 2:if(year<cal.maxYear){date.setFullYear(year+1);}
275
+ break;case 100:cal.setFirstDayOfWeek(el.fdow);return;case 50:var range=el._range;var current=el.innerHTML;for(var i=range.length;--i>=0;)
276
+ if(range[i]==current)
277
+ break;if(ev&&ev.shiftKey){if(--i<0)
278
+ i=range.length-1;}else if(++i>=range.length)
279
+ i=0;var newval=range[i];el.innerHTML=newval;cal.onUpdateTime();return;case 0:if((typeof cal.getDateStatus=="function")&&cal.getDateStatus(date,date.getFullYear(),date.getMonth(),date.getDate())){return false;}
280
+ break;}
281
+ if(!date.equalsTo(cal.date)){cal.setDate(date);newdate=true;}else if(el.navtype==0)
282
+ newdate=closing=true;}
283
+ if(newdate){ev&&cal.callHandler();}
284
+ if(closing){Calendar.removeClass(el,"hilite");ev&&cal.callCloseHandler();}};Calendar.prototype.create=function(_par){var parent=null;if(!_par){parent=document.getElementsByTagName("body")[0];this.isPopup=true;}else{parent=_par;this.isPopup=false;}
285
+ this.date=this.dateStr?new CalendarDateObject(this.dateStr):new CalendarDateObject();var table=Calendar.createElement("table");this.table=table;table.cellSpacing=0;table.cellPadding=0;table.calendar=this;Calendar.addEvent(table,"mousedown",Calendar.tableMouseDown);var div=Calendar.createElement("div");this.element=div;div.className="calendar";if(this.isPopup){div.style.position="absolute";div.style.display="none";}
286
+ div.appendChild(table);var thead=Calendar.createElement("thead",table);var cell=null;var row=null;var cal=this;var hh=function(text,cs,navtype){cell=Calendar.createElement("td",row);cell.colSpan=cs;cell.className="button";if(navtype!=0&&Math.abs(navtype)<=2)
287
+ cell.className+=" nav";Calendar._add_evs(cell);cell.calendar=cal;cell.navtype=navtype;cell.innerHTML="<div unselectable='on'>"+text+"</div>";return cell;};row=Calendar.createElement("tr",thead);var title_length=6;(this.isPopup)&&--title_length;(this.weekNumbers)&&++title_length;hh("?",1,400).ttip=Calendar._TT["INFO"];this.title=hh("",title_length,300);this.title.className="title";if(this.isPopup){this.title.ttip=Calendar._TT["DRAG_TO_MOVE"];this.title.style.cursor="move";hh("&#x00d7;",1,200).ttip=Calendar._TT["CLOSE"];}
288
+ row=Calendar.createElement("tr",thead);row.className="headrow";this._nav_py=hh("&#x00ab;",1,-2);this._nav_py.ttip=Calendar._TT["PREV_YEAR"];this._nav_pm=hh("&#x2039;",1,-1);this._nav_pm.ttip=Calendar._TT["PREV_MONTH"];this._nav_now=hh(Calendar._TT["TODAY"],this.weekNumbers?4:3,0);this._nav_now.ttip=Calendar._TT["GO_TODAY"];this._nav_nm=hh("&#x203a;",1,1);this._nav_nm.ttip=Calendar._TT["NEXT_MONTH"];this._nav_ny=hh("&#x00bb;",1,2);this._nav_ny.ttip=Calendar._TT["NEXT_YEAR"];row=Calendar.createElement("tr",thead);row.className="daynames";if(this.weekNumbers){cell=Calendar.createElement("td",row);cell.className="name wn";cell.innerHTML=Calendar._TT["WK"];}
289
+ for(var i=7;i>0;--i){cell=Calendar.createElement("td",row);if(!i){cell.navtype=100;cell.calendar=this;Calendar._add_evs(cell);}}
290
+ this.firstdayname=(this.weekNumbers)?row.firstChild.nextSibling:row.firstChild;this._displayWeekdays();var tbody=Calendar.createElement("tbody",table);this.tbody=tbody;for(i=6;i>0;--i){row=Calendar.createElement("tr",tbody);if(this.weekNumbers){cell=Calendar.createElement("td",row);}
291
+ for(var j=7;j>0;--j){cell=Calendar.createElement("td",row);cell.calendar=this;Calendar._add_evs(cell);}}
292
+ if(this.showsTime){row=Calendar.createElement("tr",tbody);row.className="time";cell=Calendar.createElement("td",row);cell.className="time";cell.colSpan=2;cell.innerHTML=Calendar._TT["TIME"]||"&nbsp;";cell=Calendar.createElement("td",row);cell.className="time";cell.colSpan=this.weekNumbers?4:3;(function(){function makeTimePart(className,init,range_start,range_end){var part=Calendar.createElement("span",cell);part.className=className;part.innerHTML=init;part.calendar=cal;part.ttip=Calendar._TT["TIME_PART"];part.navtype=50;part._range=[];if(typeof range_start!="number")
293
+ part._range=range_start;else{for(var i=range_start;i<=range_end;++i){var txt;if(i<10&&range_end>=10)txt='0'+i;else txt=''+i;part._range[part._range.length]=txt;}}
294
+ Calendar._add_evs(part);return part;};var hrs=cal.date.getHours();var mins=cal.date.getMinutes();var t12=!cal.time24;var pm=(hrs>12);if(t12&&pm)hrs-=12;var H=makeTimePart("hour",hrs,t12?1:0,t12?12:23);var span=Calendar.createElement("span",cell);span.innerHTML=":";span.className="colon";var M=makeTimePart("minute",mins,0,59);var AP=null;cell=Calendar.createElement("td",row);cell.className="time";cell.colSpan=2;if(t12)
295
+ AP=makeTimePart("ampm",pm?"pm":"am",["am","pm"]);else
296
+ cell.innerHTML="&nbsp;";cal.onSetTime=function(){var pm,hrs=this.date.getHours(),mins=this.date.getMinutes();if(t12){pm=(hrs>=12);if(pm)hrs-=12;if(hrs==0)hrs=12;AP.innerHTML=pm?"pm":"am";}
297
+ H.innerHTML=(hrs<10)?("0"+hrs):hrs;M.innerHTML=(mins<10)?("0"+mins):mins;};cal.onUpdateTime=function(){var date=this.date;var h=parseInt(H.innerHTML,10);if(t12){if(/pm/i.test(AP.innerHTML)&&h<12)
298
+ h+=12;else if(/am/i.test(AP.innerHTML)&&h==12)
299
+ h=0;}
300
+ var d=date.getDate();var m=date.getMonth();var y=date.getFullYear();date.setHours(h);date.setMinutes(parseInt(M.innerHTML,10));date.setFullYear(y);date.setMonth(m);date.setDate(d);this.dateClicked=false;this.callHandler();};})();}else{this.onSetTime=this.onUpdateTime=function(){};}
301
+ var tfoot=Calendar.createElement("tfoot",table);row=Calendar.createElement("tr",tfoot);row.className="footrow";cell=hh(Calendar._TT["SEL_DATE"],this.weekNumbers?8:7,300);cell.className="ttip";if(this.isPopup){cell.ttip=Calendar._TT["DRAG_TO_MOVE"];cell.style.cursor="move";}
302
+ this.tooltips=cell;div=Calendar.createElement("div",this.element);this.monthsCombo=div;div.className="combo";for(i=0;i<Calendar._MN.length;++i){var mn=Calendar.createElement("div");mn.className=Calendar.is_ie?"label-IEfix":"label";mn.month=i;mn.innerHTML=Calendar._SMN[i];div.appendChild(mn);}
303
+ div=Calendar.createElement("div",this.element);this.yearsCombo=div;div.className="combo";for(i=12;i>0;--i){var yr=Calendar.createElement("div");yr.className=Calendar.is_ie?"label-IEfix":"label";div.appendChild(yr);}
304
+ this._init(this.firstDayOfWeek,this.date);parent.appendChild(this.element);};Calendar._keyEvent=function(ev){var cal=window._dynarch_popupCalendar;if(!cal||cal.multiple)
305
+ return false;(Calendar.is_ie)&&(ev=window.event);var act=(Calendar.is_ie||ev.type=="keypress"),K=ev.keyCode;if(ev.ctrlKey){switch(K){case 37:act&&Calendar.cellClick(cal._nav_pm);break;case 38:act&&Calendar.cellClick(cal._nav_py);break;case 39:act&&Calendar.cellClick(cal._nav_nm);break;case 40:act&&Calendar.cellClick(cal._nav_ny);break;default:return false;}}else switch(K){case 32:Calendar.cellClick(cal._nav_now);break;case 27:act&&cal.callCloseHandler();break;case 37:case 38:case 39:case 40:if(act){var prev,x,y,ne,el,step;prev=K==37||K==38;step=(K==37||K==39)?1:7;function setVars(){el=cal.currentDateEl;var p=el.pos;x=p&15;y=p>>4;ne=cal.ar_days[y][x];};setVars();function prevMonth(){var date=new CalendarDateObject(cal.date);date.setDate(date.getDate()-step);cal.setDate(date);};function nextMonth(){var date=new CalendarDateObject(cal.date);date.setDate(date.getDate()+step);cal.setDate(date);};while(1){switch(K){case 37:if(--x>=0)
306
+ ne=cal.ar_days[y][x];else{x=6;K=38;continue;}
307
+ break;case 38:if(--y>=0)
308
+ ne=cal.ar_days[y][x];else{prevMonth();setVars();}
309
+ break;case 39:if(++x<7)
310
+ ne=cal.ar_days[y][x];else{x=0;K=40;continue;}
311
+ break;case 40:if(++y<cal.ar_days.length)
312
+ ne=cal.ar_days[y][x];else{nextMonth();setVars();}
313
+ break;}
314
+ break;}
315
+ if(ne){if(!ne.disabled)
316
+ Calendar.cellClick(ne);else if(prev)
317
+ prevMonth();else
318
+ nextMonth();}}
319
+ break;case 13:if(act)
320
+ Calendar.cellClick(cal.currentDateEl,ev);break;default:return false;}
321
+ return Calendar.stopEvent(ev);};Calendar.prototype._init=function(firstDayOfWeek,date){var today=new CalendarDateObject(),TY=today.getFullYear(),TM=today.getMonth(),TD=today.getDate();this.table.style.visibility="hidden";var year=date.getFullYear();if(year<this.minYear){year=this.minYear;date.setFullYear(year);}else if(year>this.maxYear){year=this.maxYear;date.setFullYear(year);}
322
+ this.firstDayOfWeek=firstDayOfWeek;this.date=new CalendarDateObject(date);var month=date.getMonth();var mday=date.getDate();var no_days=date.getMonthDays();date.setDate(1);var day1=(date.getDay()-this.firstDayOfWeek)%7;if(day1<0)
323
+ day1+=7;date.setDate(-day1);date.setDate(date.getDate()+1);var row=this.tbody.firstChild;var MN=Calendar._SMN[month];var ar_days=this.ar_days=new Array();var weekend=Calendar._TT["WEEKEND"];var dates=this.multiple?(this.datesCells={}):null;for(var i=0;i<6;++i,row=row.nextSibling){var cell=row.firstChild;if(this.weekNumbers){cell.className="day wn";cell.innerHTML=date.getWeekNumber();cell=cell.nextSibling;}
324
+ row.className="daysrow";var hasdays=false,iday,dpos=ar_days[i]=[];for(var j=0;j<7;++j,cell=cell.nextSibling,date.setDate(iday+1)){iday=date.getDate();var wday=date.getDay();cell.className="day";cell.pos=i<<4|j;dpos[j]=cell;var current_month=(date.getMonth()==month);if(!current_month){if(this.showsOtherMonths){cell.className+=" othermonth";cell.otherMonth=true;}else{cell.className="emptycell";cell.innerHTML="&nbsp;";cell.disabled=true;continue;}}else{cell.otherMonth=false;hasdays=true;}
325
+ cell.disabled=false;cell.innerHTML=this.getDateText?this.getDateText(date,iday):iday;if(dates)
326
+ dates[date.print("%Y%m%d")]=cell;if(this.getDateStatus){var status=this.getDateStatus(date,year,month,iday);if(this.getDateToolTip){var toolTip=this.getDateToolTip(date,year,month,iday);if(toolTip)
327
+ cell.title=toolTip;}
328
+ if(status===true){cell.className+=" disabled";cell.disabled=true;}else{if(/disabled/i.test(status))
329
+ cell.disabled=true;cell.className+=" "+status;}}
330
+ if(!cell.disabled){cell.caldate=new CalendarDateObject(date);cell.ttip="_";if(!this.multiple&&current_month&&iday==mday&&this.hiliteToday){cell.className+=" selected";this.currentDateEl=cell;}
331
+ if(date.getFullYear()==TY&&date.getMonth()==TM&&iday==TD){cell.className+=" today";cell.ttip+=Calendar._TT["PART_TODAY"];}
332
+ if(weekend.indexOf(wday.toString())!=-1)
333
+ cell.className+=cell.otherMonth?" oweekend":" weekend";}}
334
+ if(!(hasdays||this.showsOtherMonths))
335
+ row.className="emptyrow";}
336
+ this.title.innerHTML=Calendar._MN[month]+", "+year;this.onSetTime();this.table.style.visibility="visible";this._initMultipleDates();};Calendar.prototype._initMultipleDates=function(){if(this.multiple){for(var i in this.multiple){var cell=this.datesCells[i];var d=this.multiple[i];if(!d)
337
+ continue;if(cell)
338
+ cell.className+=" selected";}}};Calendar.prototype._toggleMultipleDate=function(date){if(this.multiple){var ds=date.print("%Y%m%d");var cell=this.datesCells[ds];if(cell){var d=this.multiple[ds];if(!d){Calendar.addClass(cell,"selected");this.multiple[ds]=date;}else{Calendar.removeClass(cell,"selected");delete this.multiple[ds];}}}};Calendar.prototype.setDateToolTipHandler=function(unaryFunction){this.getDateToolTip=unaryFunction;};Calendar.prototype.setDate=function(date){if(!date.equalsTo(this.date)){this._init(this.firstDayOfWeek,date);}};Calendar.prototype.refresh=function(){this._init(this.firstDayOfWeek,this.date);};Calendar.prototype.setFirstDayOfWeek=function(firstDayOfWeek){this._init(firstDayOfWeek,this.date);this._displayWeekdays();};Calendar.prototype.setDateStatusHandler=Calendar.prototype.setDisabledHandler=function(unaryFunction){this.getDateStatus=unaryFunction;};Calendar.prototype.setRange=function(a,z){this.minYear=a;this.maxYear=z;};Calendar.prototype.callHandler=function(){if(this.onSelected){this.onSelected(this,this.date.print(this.dateFormat));}};Calendar.prototype.callCloseHandler=function(){if(this.onClose){this.onClose(this);}
339
+ this.hideShowCovered();};Calendar.prototype.destroy=function(){var el=this.element.parentNode;el.removeChild(this.element);Calendar._C=null;window._dynarch_popupCalendar=null;};Calendar.prototype.reparent=function(new_parent){var el=this.element;el.parentNode.removeChild(el);new_parent.appendChild(el);};Calendar._checkCalendar=function(ev){var calendar=window._dynarch_popupCalendar;if(!calendar){return false;}
340
+ var el=Calendar.is_ie?Calendar.getElement(ev):Calendar.getTargetElement(ev);for(;el!=null&&el!=calendar.element;el=el.parentNode);if(el==null){window._dynarch_popupCalendar.callCloseHandler();return Calendar.stopEvent(ev);}};Calendar.prototype.show=function(){var rows=this.table.getElementsByTagName("tr");for(var i=rows.length;i>0;){var row=rows[--i];Calendar.removeClass(row,"rowhilite");var cells=row.getElementsByTagName("td");for(var j=cells.length;j>0;){var cell=cells[--j];Calendar.removeClass(cell,"hilite");Calendar.removeClass(cell,"active");}}
341
+ this.element.style.display="block";this.hidden=false;if(this.isPopup){window._dynarch_popupCalendar=this;Calendar.addEvent(document,"keydown",Calendar._keyEvent);Calendar.addEvent(document,"keypress",Calendar._keyEvent);Calendar.addEvent(document,"mousedown",Calendar._checkCalendar);}
342
+ this.hideShowCovered();};Calendar.prototype.hide=function(){if(this.isPopup){Calendar.removeEvent(document,"keydown",Calendar._keyEvent);Calendar.removeEvent(document,"keypress",Calendar._keyEvent);Calendar.removeEvent(document,"mousedown",Calendar._checkCalendar);}
343
+ this.element.style.display="none";this.hidden=true;this.hideShowCovered();};Calendar.prototype.showAt=function(x,y){var s=this.element.style;s.left=x+"px";s.top=y+"px";this.show();};Calendar.prototype.showAtElement=function(el,opts){var self=this;var p=Calendar.getAbsolutePos(el);if(!opts||typeof opts!="string"){this.showAt(p.x,p.y+el.offsetHeight);return true;}
344
+ function fixPosition(box){if(box.x<0)
345
+ box.x=0;if(box.y<0)
346
+ box.y=0;var cp=document.createElement("div");var s=cp.style;s.position="absolute";s.right=s.bottom=s.width=s.height="0px";document.body.appendChild(cp);var br=Calendar.getAbsolutePos(cp);document.body.removeChild(cp);if(Calendar.is_ie){br.y+=document.body.scrollTop;br.x+=document.body.scrollLeft;}else{br.y+=window.scrollY;br.x+=window.scrollX;}
347
+ var tmp=box.x+box.width-br.x;if(tmp>0)box.x-=tmp;tmp=box.y+box.height-br.y;if(tmp>0)box.y-=tmp;};this.element.style.display="block";Calendar.continuation_for_the_fucking_khtml_browser=function(){var w=self.element.offsetWidth;var h=self.element.offsetHeight;self.element.style.display="none";var valign=opts.substr(0,1);var halign="l";if(opts.length>1){halign=opts.substr(1,1);}
348
+ switch(valign){case"T":p.y-=h;break;case"B":p.y+=el.offsetHeight;break;case"C":p.y+=(el.offsetHeight-h)/2;break;case"t":p.y+=el.offsetHeight-h;break;case"b":break;}
349
+ switch(halign){case"L":p.x-=w;break;case"R":p.x+=el.offsetWidth;break;case"C":p.x+=(el.offsetWidth-w)/2;break;case"l":p.x+=el.offsetWidth-w;break;case"r":break;}
350
+ p.width=w;p.height=h+40;self.monthsCombo.style.display="none";fixPosition(p);self.showAt(p.x,p.y);};if(Calendar.is_khtml)
351
+ setTimeout("Calendar.continuation_for_the_fucking_khtml_browser()",10);else
352
+ Calendar.continuation_for_the_fucking_khtml_browser();};Calendar.prototype.setDateFormat=function(str){this.dateFormat=str;};Calendar.prototype.setTtDateFormat=function(str){this.ttDateFormat=str;};Calendar.prototype.parseDate=function(str,fmt){if(!fmt)
353
+ fmt=this.dateFormat;this.setDate(Date.parseDate(str,fmt));};Calendar.prototype.hideShowCovered=function(){if(!Calendar.is_ie&&!Calendar.is_opera)
354
+ return;function getVisib(obj){var value=obj.style.visibility;if(!value){if(document.defaultView&&typeof(document.defaultView.getComputedStyle)=="function"){if(!Calendar.is_khtml)
355
+ value=document.defaultView.getComputedStyle(obj,"").getPropertyValue("visibility");else
356
+ value='';}else if(obj.currentStyle){value=obj.currentStyle.visibility;}else
357
+ value='';}
358
+ return value;};var tags=new Array("applet","iframe","select");var el=this.element;var p=Calendar.getAbsolutePos(el);var EX1=p.x;var EX2=el.offsetWidth+EX1;var EY1=p.y;var EY2=el.offsetHeight+EY1;for(var k=tags.length;k>0;){var ar=document.getElementsByTagName(tags[--k]);var cc=null;for(var i=ar.length;i>0;){cc=ar[--i];p=Calendar.getAbsolutePos(cc);var CX1=p.x;var CX2=cc.offsetWidth+CX1;var CY1=p.y;var CY2=cc.offsetHeight+CY1;if(this.hidden||(CX1>EX2)||(CX2<EX1)||(CY1>EY2)||(CY2<EY1)){if(!cc.__msh_save_visibility){cc.__msh_save_visibility=getVisib(cc);}
359
+ cc.style.visibility=cc.__msh_save_visibility;}else{if(!cc.__msh_save_visibility){cc.__msh_save_visibility=getVisib(cc);}
360
+ cc.style.visibility="hidden";}}}};Calendar.prototype._displayWeekdays=function(){var fdow=this.firstDayOfWeek;var cell=this.firstdayname;var weekend=Calendar._TT["WEEKEND"];for(var i=0;i<7;++i){cell.className="day name";var realday=(i+fdow)%7;if(i){cell.ttip=Calendar._TT["DAY_FIRST"].replace("%s",Calendar._DN[realday]);cell.navtype=100;cell.calendar=this;cell.fdow=realday;Calendar._add_evs(cell);}
361
+ if(weekend.indexOf(realday.toString())!=-1){Calendar.addClass(cell,"weekend");}
362
+ cell.innerHTML=Calendar._SDN[(i+fdow)%7];cell=cell.nextSibling;}};Calendar.prototype._hideCombos=function(){this.monthsCombo.style.display="none";this.yearsCombo.style.display="none";};Calendar.prototype._dragStart=function(ev){if(this.dragging){return;}
363
+ this.dragging=true;var posX;var posY;if(Calendar.is_ie){posY=window.event.clientY+document.body.scrollTop;posX=window.event.clientX+document.body.scrollLeft;}else{posY=ev.clientY+window.scrollY;posX=ev.clientX+window.scrollX;}
364
+ var st=this.element.style;this.xOffs=posX-parseInt(st.left);this.yOffs=posY-parseInt(st.top);with(Calendar){addEvent(document,"mousemove",calDragIt);addEvent(document,"mouseup",calDragEnd);}};Date._MD=new Array(31,28,31,30,31,30,31,31,30,31,30,31);Date.SECOND=1000;Date.MINUTE=60*Date.SECOND;Date.HOUR=60*Date.MINUTE;Date.DAY=24*Date.HOUR;Date.WEEK=7*Date.DAY;Date.parseDate=function(str,fmt){var today=new CalendarDateObject();var y=0;var m=-1;var d=0;var a=str;var i;for(i=0;i<Calendar._MN.length;i++){a=a.replace(Calendar._MN[i],enUS.m.wide[i]);}
365
+ for(i=0;i<Calendar._SMN.length;i++){a=a.replace(Calendar._SMN[i],enUS.m.abbr[i]);}
366
+ a=a.replace(Calendar._am,'am');a=a.replace(Calendar._am.toLowerCase(),'am');a=a.replace(Calendar._pm,'pm');a=a.replace(Calendar._pm.toLowerCase(),'pm');a=a.split(/\W+/);var b=fmt.match(/%./g);var i=0,j=0;var hr=0;var min=0;for(i=0;i<a.length;++i){if(!a[i])
367
+ continue;switch(b[i]){case"%d":case"%e":d=parseInt(a[i],10);break;case"%m":m=parseInt(a[i],10)-1;break;case"%Y":case"%y":y=parseInt(a[i],10);(y<100)&&(y+=(y>29)?1900:2000);break;case"%b":for(j=0;j<12;++j){if(enUS.m.abbr[j].substr(0,a[i].length).toLowerCase()==a[i].toLowerCase()){m=j;break;}}
368
+ break;case"%B":for(j=0;j<12;++j){if(enUS.m.wide[j].substr(0,a[i].length).toLowerCase()==a[i].toLowerCase()){m=j;break;}}
369
+ break;case"%H":case"%I":case"%k":case"%l":hr=parseInt(a[i],10);break;case"%P":case"%p":if(/pm/i.test(a[i])&&hr<12)
370
+ hr+=12;else if(/am/i.test(a[i])&&hr>=12)
371
+ hr-=12;break;case"%M":min=parseInt(a[i],10);break;}}
372
+ if(isNaN(y))y=today.getFullYear();if(isNaN(m))m=today.getMonth();if(isNaN(d))d=today.getDate();if(isNaN(hr))hr=today.getHours();if(isNaN(min))min=today.getMinutes();if(y!=0&&m!=-1&&d!=0)
373
+ return new CalendarDateObject(y,m,d,hr,min,0);y=0;m=-1;d=0;for(i=0;i<a.length;++i){if(a[i].search(/[a-zA-Z]+/)!=-1){var t=-1;for(j=0;j<12;++j){if(Calendar._MN[j].substr(0,a[i].length).toLowerCase()==a[i].toLowerCase()){t=j;break;}}
374
+ if(t!=-1){if(m!=-1){d=m+1;}
375
+ m=t;}}else if(parseInt(a[i],10)<=12&&m==-1){m=a[i]-1;}else if(parseInt(a[i],10)>31&&y==0){y=parseInt(a[i],10);(y<100)&&(y+=(y>29)?1900:2000);}else if(d==0){d=a[i];}}
376
+ if(y==0)
377
+ y=today.getFullYear();if(m!=-1&&d!=0)
378
+ return new CalendarDateObject(y,m,d,hr,min,0);return today;};Date.prototype.getMonthDays=function(month){var year=this.getFullYear();if(typeof month=="undefined"){month=this.getMonth();}
379
+ if(((0==(year%4))&&((0!=(year%100))||(0==(year%400))))&&month==1){return 29;}else{return Date._MD[month];}};Date.prototype.getDayOfYear=function(){var now=new CalendarDateObject(this.getFullYear(),this.getMonth(),this.getDate(),0,0,0);var then=new CalendarDateObject(this.getFullYear(),0,0,0,0,0);var time=now-then;return Math.floor(time/Date.DAY);};Date.prototype.getWeekNumber=function(){var d=new CalendarDateObject(this.getFullYear(),this.getMonth(),this.getDate(),0,0,0);var DoW=d.getDay();d.setDate(d.getDate()-(DoW+6)%7+3);var ms=d.valueOf();d.setMonth(0);d.setDate(4);return Math.round((ms-d.valueOf())/(7*864e5))+1;};Date.prototype.equalsTo=function(date){return((this.getFullYear()==date.getFullYear())&&(this.getMonth()==date.getMonth())&&(this.getDate()==date.getDate())&&(this.getHours()==date.getHours())&&(this.getMinutes()==date.getMinutes()));};Date.prototype.setDateOnly=function(date){var tmp=new CalendarDateObject(date);this.setDate(1);this.setFullYear(tmp.getFullYear());this.setMonth(tmp.getMonth());this.setDate(tmp.getDate());};Date.prototype.print=function(str){var m=this.getMonth();var d=this.getDate();var y=this.getFullYear();var wn=this.getWeekNumber();var w=this.getDay();var s={};var hr=this.getHours();var pm=(hr>=12);var ir=(pm)?(hr-12):hr;var dy=this.getDayOfYear();if(ir==0)
380
+ ir=12;var min=this.getMinutes();var sec=this.getSeconds();s["%a"]=Calendar._SDN[w];s["%A"]=Calendar._DN[w];s["%b"]=Calendar._SMN[m];s["%B"]=Calendar._MN[m];s["%C"]=1+Math.floor(y/100);s["%d"]=(d<10)?("0"+d):d;s["%e"]=d;s["%H"]=(hr<10)?("0"+hr):hr;s["%I"]=(ir<10)?("0"+ir):ir;s["%j"]=(dy<100)?((dy<10)?("00"+dy):("0"+dy)):dy;s["%k"]=hr;s["%l"]=ir;s["%m"]=(m<9)?("0"+(1+m)):(1+m);s["%M"]=(min<10)?("0"+min):min;s["%n"]="\n";s["%p"]=pm?Calendar._pm.toUpperCase():Calendar._am.toUpperCase();s["%P"]=pm?Calendar._pm.toLowerCase():Calendar._am.toLowerCase();s["%s"]=Math.floor(this.getTime()/1000);s["%S"]=(sec<10)?("0"+sec):sec;s["%t"]="\t";s["%U"]=s["%W"]=s["%V"]=(wn<10)?("0"+wn):wn;s["%u"]=w+1;s["%w"]=w;s["%y"]=(''+y).substr(2,2);s["%Y"]=y;s["%%"]="%";var re=/%./g;if(!Calendar.is_ie5&&!Calendar.is_khtml)
381
+ return str.replace(re,function(par){return s[par]||par;});var a=str.match(re);for(var i=0;i<a.length;i++){var tmp=s[a[i]];if(tmp){re=new RegExp(a[i],'g');str=str.replace(re,tmp);}}
382
+ return str;};Date.prototype.__msh_oldSetFullYear=Date.prototype.setFullYear;Date.prototype.setFullYear=function(y){var d=new CalendarDateObject(this);d.__msh_oldSetFullYear(y);if(d.getMonth()!=this.getMonth())
383
+ this.setDate(28);this.__msh_oldSetFullYear(y);};CalendarDateObject.prototype=new Date();CalendarDateObject.prototype.constructor=CalendarDateObject;CalendarDateObject.prototype.parent=Date.prototype;function CalendarDateObject(){var dateObj;if(arguments.length>1){dateObj=eval("new this.parent.constructor("+Array.prototype.slice.call(arguments).join(",")+");");}else if(arguments.length>0){dateObj=new this.parent.constructor(arguments[0]);}else{dateObj=new this.parent.constructor();if(typeof(CalendarDateObject._LOCAL_TIMZEONE_OFFSET_SECONDS)!="undefined"){dateObj.setTime(dateObj.getTime()+(CalendarDateObject._LOCAL_TIMZEONE_OFFSET_SECONDS-dateObj.getTimezoneOffset())*1000);}}
384
+ return dateObj;}
385
+ window._dynarch_popupCalendar=null;;Calendar.setup=function(params){function param_default(pname,def){if(typeof params[pname]=="undefined"){params[pname]=def;}};param_default("inputField",null);param_default("displayArea",null);param_default("button",null);param_default("eventName","click");param_default("ifFormat","%Y/%m/%d");param_default("daFormat","%Y/%m/%d");param_default("singleClick",true);param_default("disableFunc",null);param_default("dateStatusFunc",params["disableFunc"]);param_default("dateText",null);param_default("firstDay",null);param_default("align","Br");param_default("range",[1900,2999]);param_default("weekNumbers",true);param_default("flat",null);param_default("flatCallback",null);param_default("onSelect",null);param_default("onClose",null);param_default("onUpdate",null);param_default("date",null);param_default("showsTime",false);param_default("timeFormat","24");param_default("electric",true);param_default("step",2);param_default("position",null);param_default("cache",false);param_default("showOthers",false);param_default("multiple",null);var tmp=["inputField","displayArea","button"];for(var i in tmp){if(typeof params[tmp[i]]=="string"){params[tmp[i]]=document.getElementById(params[tmp[i]]);}}if(!(params.flat||params.multiple||params.inputField||params.displayArea||params.button)){alert("Calendar.setup:\n Nothing to setup (no fields found). Please check your code");return false;}function onSelect(cal){var p=cal.params;var update=(cal.dateClicked||p.electric);if(update&&p.inputField){p.inputField.value=cal.date.print(p.ifFormat);if(typeof p.inputField.onchange=="function")p.inputField.onchange();}if(update&&p.displayArea)p.displayArea.innerHTML=cal.date.print(p.daFormat);if(update&&typeof p.onUpdate=="function")p.onUpdate(cal);if(update&&p.flat){if(typeof p.flatCallback=="function")p.flatCallback(cal);}if(update&&p.singleClick&&cal.dateClicked)cal.callCloseHandler();};if(params.flat!=null){if(typeof params.flat=="string")params.flat=document.getElementById(params.flat);if(!params.flat){alert("Calendar.setup:\n Flat specified but can't find parent.");return false;}var cal=new Calendar(params.firstDay,params.date,params.onSelect||onSelect);cal.showsOtherMonths=params.showOthers;cal.showsTime=params.showsTime;cal.time24=(params.timeFormat=="24");cal.params=params;cal.weekNumbers=params.weekNumbers;cal.setRange(params.range[0],params.range[1]);cal.setDateStatusHandler(params.dateStatusFunc);cal.getDateText=params.dateText;if(params.ifFormat){cal.setDateFormat(params.ifFormat);}if(params.inputField&&typeof params.inputField.value=="string"){cal.parseDate(params.inputField.value);}cal.create(params.flat);cal.show();return false;}var triggerEl=params.button||params.displayArea||params.inputField;triggerEl["on"+params.eventName]=function(){var dateEl=params.inputField||params.displayArea;var dateFmt=params.inputField?params.ifFormat:params.daFormat;var mustCreate=false;var cal=window.calendar;if(dateEl)params.date=Date.parseDate(dateEl.value||dateEl.innerHTML,dateFmt);if(!(cal&&params.cache)){window.calendar=cal=new Calendar(params.firstDay,params.date,params.onSelect||onSelect,params.onClose||function(cal){cal.hide();});cal.showsTime=params.showsTime;cal.time24=(params.timeFormat=="24");cal.weekNumbers=params.weekNumbers;mustCreate=true;}else{if(params.date)cal.setDate(params.date);cal.hide();}if(params.multiple){cal.multiple={};for(var i=params.multiple.length;--i>=0;){var d=params.multiple[i];var ds=d.print("%Y%m%d");cal.multiple[ds]=d;}}cal.showsOtherMonths=params.showOthers;cal.yearStep=params.step;cal.setRange(params.range[0],params.range[1]);cal.params=params;cal.setDateStatusHandler(params.dateStatusFunc);cal.getDateText=params.dateText;cal.setDateFormat(dateFmt);if(mustCreate)cal.create();cal.refresh();if(!params.position)cal.showAtElement(params.button||params.displayArea||params.inputField,params.align);else cal.showAt(params.position[0],params.position[1]);return false;};return cal;};
var/minifycache/minify_1b6ee19a4c3855472c3e3dd57413cb65.gz ADDED
Binary file
var/minifycache/minify_676fb2e38e9cb2203204bcf556430103 ADDED
@@ -0,0 +1,1030 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ var Prototype={Version:'1.6.0.3',Browser:{IE:!!(window.attachEvent&&navigator.userAgent.indexOf('Opera')===-1),Opera:navigator.userAgent.indexOf('Opera')>-1,WebKit:navigator.userAgent.indexOf('AppleWebKit/')>-1,Gecko:navigator.userAgent.indexOf('Gecko')>-1&&navigator.userAgent.indexOf('KHTML')===-1,MobileSafari:!!navigator.userAgent.match(/Apple.*Mobile.*Safari/)},BrowserFeatures:{XPath:!!document.evaluate,SelectorsAPI:!!document.querySelector,ElementExtensions:!!window.HTMLElement,SpecificElementExtensions:document.createElement('div')['__proto__']&&document.createElement('div')['__proto__']!==document.createElement('form')['__proto__']},ScriptFragment:'<script[^>]*>([\\S\\s]*?)<\/script>',JSONFilter:/^\/\*-secure-([\s\S]*)\*\/\s*$/,emptyFunction:function(){},K:function(x){return x}};if(Prototype.Browser.MobileSafari)
2
+ Prototype.BrowserFeatures.SpecificElementExtensions=false;var Class={create:function(){var parent=null,properties=$A(arguments);if(Object.isFunction(properties[0]))
3
+ parent=properties.shift();function klass(){this.initialize.apply(this,arguments);}
4
+ Object.extend(klass,Class.Methods);klass.superclass=parent;klass.subclasses=[];if(parent){var subclass=function(){};subclass.prototype=parent.prototype;klass.prototype=new subclass;parent.subclasses.push(klass);}
5
+ for(var i=0;i<properties.length;i++)
6
+ klass.addMethods(properties[i]);if(!klass.prototype.initialize)
7
+ klass.prototype.initialize=Prototype.emptyFunction;klass.prototype.constructor=klass;return klass;}};Class.Methods={addMethods:function(source){var ancestor=this.superclass&&this.superclass.prototype;var properties=Object.keys(source);if(!Object.keys({toString:true}).length)
8
+ properties.push("toString","valueOf");for(var i=0,length=properties.length;i<length;i++){var property=properties[i],value=source[property];if(ancestor&&Object.isFunction(value)&&value.argumentNames().first()=="$super"){var method=value;value=(function(m){return function(){return ancestor[m].apply(this,arguments)};})(property).wrap(method);value.valueOf=method.valueOf.bind(method);value.toString=method.toString.bind(method);}
9
+ this.prototype[property]=value;}
10
+ return this;}};var Abstract={};Object.extend=function(destination,source){for(var property in source)
11
+ destination[property]=source[property];return destination;};Object.extend(Object,{inspect:function(object){try{if(Object.isUndefined(object))return'undefined';if(object===null)return'null';return object.inspect?object.inspect():String(object);}catch(e){if(e instanceof RangeError)return'...';throw e;}},toJSON:function(object){var type=typeof object;switch(type){case'undefined':case'function':case'unknown':return;case'boolean':return object.toString();}
12
+ if(object===null)return'null';if(object.toJSON)return object.toJSON();if(Object.isElement(object))return;var results=[];for(var property in object){var value=Object.toJSON(object[property]);if(!Object.isUndefined(value))
13
+ results.push(property.toJSON()+': '+value);}
14
+ return'{'+results.join(', ')+'}';},toQueryString:function(object){return $H(object).toQueryString();},toHTML:function(object){return object&&object.toHTML?object.toHTML():String.interpret(object);},keys:function(object){var keys=[];for(var property in object)
15
+ keys.push(property);return keys;},values:function(object){var values=[];for(var property in object)
16
+ values.push(object[property]);return values;},clone:function(object){return Object.extend({},object);},isElement:function(object){return!!(object&&object.nodeType==1);},isArray:function(object){return object!=null&&typeof object=="object"&&'splice'in object&&'join'in object;},isHash:function(object){return object instanceof Hash;},isFunction:function(object){return typeof object=="function";},isString:function(object){return typeof object=="string";},isNumber:function(object){return typeof object=="number";},isUndefined:function(object){return typeof object=="undefined";}});Object.extend(Function.prototype,{argumentNames:function(){var names=this.toString().match(/^[\s\(]*function[^(]*\(([^\)]*)\)/)[1].replace(/\s+/g,'').split(',');return names.length==1&&!names[0]?[]:names;},bind:function(){if(arguments.length<2&&Object.isUndefined(arguments[0]))return this;var __method=this,args=$A(arguments),object=args.shift();return function(){return __method.apply(object,args.concat($A(arguments)));}},bindAsEventListener:function(){var __method=this,args=$A(arguments),object=args.shift();return function(event){return __method.apply(object,[event||window.event].concat(args));}},curry:function(){if(!arguments.length)return this;var __method=this,args=$A(arguments);return function(){return __method.apply(this,args.concat($A(arguments)));}},delay:function(){var __method=this,args=$A(arguments),timeout=args.shift()*1000;return window.setTimeout(function(){return __method.apply(__method,args);},timeout);},defer:function(){var args=[0.01].concat($A(arguments));return this.delay.apply(this,args);},wrap:function(wrapper){var __method=this;return function(){return wrapper.apply(this,[__method.bind(this)].concat($A(arguments)));}},methodize:function(){if(this._methodized)return this._methodized;var __method=this;return this._methodized=function(){return __method.apply(null,[this].concat($A(arguments)));};}});Date.prototype.toJSON=function(){return'"'+this.getUTCFullYear()+'-'+
17
+ (this.getUTCMonth()+1).toPaddedString(2)+'-'+
18
+ this.getUTCDate().toPaddedString(2)+'T'+
19
+ this.getUTCHours().toPaddedString(2)+':'+
20
+ this.getUTCMinutes().toPaddedString(2)+':'+
21
+ this.getUTCSeconds().toPaddedString(2)+'Z"';};var Try={these:function(){var returnValue;for(var i=0,length=arguments.length;i<length;i++){var lambda=arguments[i];try{returnValue=lambda();break;}catch(e){}}
22
+ return returnValue;}};RegExp.prototype.match=RegExp.prototype.test;RegExp.escape=function(str){return String(str).replace(/([.*+?^=!:${}()|[\]\/\\])/g,'\\$1');};var PeriodicalExecuter=Class.create({initialize:function(callback,frequency){this.callback=callback;this.frequency=frequency;this.currentlyExecuting=false;this.registerCallback();},registerCallback:function(){this.timer=setInterval(this.onTimerEvent.bind(this),this.frequency*1000);},execute:function(){this.callback(this);},stop:function(){if(!this.timer)return;clearInterval(this.timer);this.timer=null;},onTimerEvent:function(){if(!this.currentlyExecuting){try{this.currentlyExecuting=true;this.execute();}finally{this.currentlyExecuting=false;}}}});Object.extend(String,{interpret:function(value){return value==null?'':String(value);},specialChar:{'\b':'\\b','\t':'\\t','\n':'\\n','\f':'\\f','\r':'\\r','\\':'\\\\'}});Object.extend(String.prototype,{gsub:function(pattern,replacement){var result='',source=this,match;replacement=arguments.callee.prepareReplacement(replacement);while(source.length>0){if(match=source.match(pattern)){result+=source.slice(0,match.index);result+=String.interpret(replacement(match));source=source.slice(match.index+match[0].length);}else{result+=source,source='';}}
23
+ return result;},sub:function(pattern,replacement,count){replacement=this.gsub.prepareReplacement(replacement);count=Object.isUndefined(count)?1:count;return this.gsub(pattern,function(match){if(--count<0)return match[0];return replacement(match);});},scan:function(pattern,iterator){this.gsub(pattern,iterator);return String(this);},truncate:function(length,truncation){length=length||30;truncation=Object.isUndefined(truncation)?'...':truncation;return this.length>length?this.slice(0,length-truncation.length)+truncation:String(this);},strip:function(){return this.replace(/^\s+/,'').replace(/\s+$/,'');},stripTags:function(){return this.replace(/<\/?[^>]+>/gi,'');},stripScripts:function(){return this.replace(new RegExp(Prototype.ScriptFragment,'img'),'');},extractScripts:function(){var matchAll=new RegExp(Prototype.ScriptFragment,'img');var matchOne=new RegExp(Prototype.ScriptFragment,'im');return(this.match(matchAll)||[]).map(function(scriptTag){return(scriptTag.match(matchOne)||['',''])[1];});},evalScripts:function(){return this.extractScripts().map(function(script){return eval(script)});},escapeHTML:function(){var self=arguments.callee;self.text.data=this;return self.div.innerHTML;},unescapeHTML:function(){var div=new Element('div');div.innerHTML=this.stripTags();return div.childNodes[0]?(div.childNodes.length>1?$A(div.childNodes).inject('',function(memo,node){return memo+node.nodeValue}):div.childNodes[0].nodeValue):'';},toQueryParams:function(separator){var match=this.strip().match(/([^?#]*)(#.*)?$/);if(!match)return{};return match[1].split(separator||'&').inject({},function(hash,pair){if((pair=pair.split('='))[0]){var key=decodeURIComponent(pair.shift());var value=pair.length>1?pair.join('='):pair[0];if(value!=undefined)value=decodeURIComponent(value);if(key in hash){if(!Object.isArray(hash[key]))hash[key]=[hash[key]];hash[key].push(value);}
24
+ else hash[key]=value;}
25
+ return hash;});},toArray:function(){return this.split('');},succ:function(){return this.slice(0,this.length-1)+
26
+ String.fromCharCode(this.charCodeAt(this.length-1)+1);},times:function(count){return count<1?'':new Array(count+1).join(this);},camelize:function(){var parts=this.split('-'),len=parts.length;if(len==1)return parts[0];var camelized=this.charAt(0)=='-'?parts[0].charAt(0).toUpperCase()+parts[0].substring(1):parts[0];for(var i=1;i<len;i++)
27
+ camelized+=parts[i].charAt(0).toUpperCase()+parts[i].substring(1);return camelized;},capitalize:function(){return this.charAt(0).toUpperCase()+this.substring(1).toLowerCase();},underscore:function(){return this.gsub(/::/,'/').gsub(/([A-Z]+)([A-Z][a-z])/,'#{1}_#{2}').gsub(/([a-z\d])([A-Z])/,'#{1}_#{2}').gsub(/-/,'_').toLowerCase();},dasherize:function(){return this.gsub(/_/,'-');},inspect:function(useDoubleQuotes){var escapedString=this.gsub(/[\x00-\x1f\\]/,function(match){var character=String.specialChar[match[0]];return character?character:'\\u00'+match[0].charCodeAt().toPaddedString(2,16);});if(useDoubleQuotes)return'"'+escapedString.replace(/"/g,'\\"')+'"';return"'"+escapedString.replace(/'/g,'\\\'')+"'";},toJSON:function(){return this.inspect(true);},unfilterJSON:function(filter){return this.sub(filter||Prototype.JSONFilter,'#{1}');},isJSON:function(){var str=this;if(str.blank())return false;str=this.replace(/\\./g,'@').replace(/"[^"\\\n\r]*"/g,'');return(/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(str);},evalJSON:function(sanitize){var json=this.unfilterJSON();try{if(!sanitize||json.isJSON())return eval('('+json+')');}catch(e){}
28
+ throw new SyntaxError('Badly formed JSON string: '+this.inspect());},include:function(pattern){return this.indexOf(pattern)>-1;},startsWith:function(pattern){return this.indexOf(pattern)===0;},endsWith:function(pattern){var d=this.length-pattern.length;return d>=0&&this.lastIndexOf(pattern)===d;},empty:function(){return this=='';},blank:function(){return /^\s*$/.test(this);},interpolate:function(object,pattern){return new Template(this,pattern).evaluate(object);}});if(Prototype.Browser.WebKit||Prototype.Browser.IE)Object.extend(String.prototype,{escapeHTML:function(){return this.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');},unescapeHTML:function(){return this.stripTags().replace(/&amp;/g,'&').replace(/&lt;/g,'<').replace(/&gt;/g,'>');}});String.prototype.gsub.prepareReplacement=function(replacement){if(Object.isFunction(replacement))return replacement;var template=new Template(replacement);return function(match){return template.evaluate(match)};};String.prototype.parseQuery=String.prototype.toQueryParams;Object.extend(String.prototype.escapeHTML,{div:document.createElement('div'),text:document.createTextNode('')});String.prototype.escapeHTML.div.appendChild(String.prototype.escapeHTML.text);var Template=Class.create({initialize:function(template,pattern){this.template=template.toString();this.pattern=pattern||Template.Pattern;},evaluate:function(object){if(Object.isFunction(object.toTemplateReplacements))
29
+ object=object.toTemplateReplacements();return this.template.gsub(this.pattern,function(match){if(object==null)return'';var before=match[1]||'';if(before=='\\')return match[2];var ctx=object,expr=match[3];var pattern=/^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/;match=pattern.exec(expr);if(match==null)return before;while(match!=null){var comp=match[1].startsWith('[')?match[2].gsub('\\\\]',']'):match[1];ctx=ctx[comp];if(null==ctx||''==match[3])break;expr=expr.substring('['==match[3]?match[1].length:match[0].length);match=pattern.exec(expr);}
30
+ return before+String.interpret(ctx);});}});Template.Pattern=/(^|.|\r|\n)(#\{(.*?)\})/;var $break={};var Enumerable={each:function(iterator,context){var index=0;try{this._each(function(value){iterator.call(context,value,index++);});}catch(e){if(e!=$break)throw e;}
31
+ return this;},eachSlice:function(number,iterator,context){var index=-number,slices=[],array=this.toArray();if(number<1)return array;while((index+=number)<array.length)
32
+ slices.push(array.slice(index,index+number));return slices.collect(iterator,context);},all:function(iterator,context){iterator=iterator||Prototype.K;var result=true;this.each(function(value,index){result=result&&!!iterator.call(context,value,index);if(!result)throw $break;});return result;},any:function(iterator,context){iterator=iterator||Prototype.K;var result=false;this.each(function(value,index){if(result=!!iterator.call(context,value,index))
33
+ throw $break;});return result;},collect:function(iterator,context){iterator=iterator||Prototype.K;var results=[];this.each(function(value,index){results.push(iterator.call(context,value,index));});return results;},detect:function(iterator,context){var result;this.each(function(value,index){if(iterator.call(context,value,index)){result=value;throw $break;}});return result;},findAll:function(iterator,context){var results=[];this.each(function(value,index){if(iterator.call(context,value,index))
34
+ results.push(value);});return results;},grep:function(filter,iterator,context){iterator=iterator||Prototype.K;var results=[];if(Object.isString(filter))
35
+ filter=new RegExp(filter);this.each(function(value,index){if(filter.match(value))
36
+ results.push(iterator.call(context,value,index));});return results;},include:function(object){if(Object.isFunction(this.indexOf))
37
+ if(this.indexOf(object)!=-1)return true;var found=false;this.each(function(value){if(value==object){found=true;throw $break;}});return found;},inGroupsOf:function(number,fillWith){fillWith=Object.isUndefined(fillWith)?null:fillWith;return this.eachSlice(number,function(slice){while(slice.length<number)slice.push(fillWith);return slice;});},inject:function(memo,iterator,context){this.each(function(value,index){memo=iterator.call(context,memo,value,index);});return memo;},invoke:function(method){var args=$A(arguments).slice(1);return this.map(function(value){return value[method].apply(value,args);});},max:function(iterator,context){iterator=iterator||Prototype.K;var result;this.each(function(value,index){value=iterator.call(context,value,index);if(result==null||value>=result)
38
+ result=value;});return result;},min:function(iterator,context){iterator=iterator||Prototype.K;var result;this.each(function(value,index){value=iterator.call(context,value,index);if(result==null||value<result)
39
+ result=value;});return result;},partition:function(iterator,context){iterator=iterator||Prototype.K;var trues=[],falses=[];this.each(function(value,index){(iterator.call(context,value,index)?trues:falses).push(value);});return[trues,falses];},pluck:function(property){var results=[];this.each(function(value){results.push(value[property]);});return results;},reject:function(iterator,context){var results=[];this.each(function(value,index){if(!iterator.call(context,value,index))
40
+ results.push(value);});return results;},sortBy:function(iterator,context){return this.map(function(value,index){return{value:value,criteria:iterator.call(context,value,index)};}).sort(function(left,right){var a=left.criteria,b=right.criteria;return a<b?-1:a>b?1:0;}).pluck('value');},toArray:function(){return this.map();},zip:function(){var iterator=Prototype.K,args=$A(arguments);if(Object.isFunction(args.last()))
41
+ iterator=args.pop();var collections=[this].concat(args).map($A);return this.map(function(value,index){return iterator(collections.pluck(index));});},size:function(){return this.toArray().length;},inspect:function(){return'#<Enumerable:'+this.toArray().inspect()+'>';}};Object.extend(Enumerable,{map:Enumerable.collect,find:Enumerable.detect,select:Enumerable.findAll,filter:Enumerable.findAll,member:Enumerable.include,entries:Enumerable.toArray,every:Enumerable.all,some:Enumerable.any});function $A(iterable){if(!iterable)return[];if(iterable.toArray)return iterable.toArray();var length=iterable.length||0,results=new Array(length);while(length--)results[length]=iterable[length];return results;}
42
+ if(Prototype.Browser.WebKit){$A=function(iterable){if(!iterable)return[];if(!(typeof iterable==='function'&&typeof iterable.length==='number'&&typeof iterable.item==='function')&&iterable.toArray)
43
+ return iterable.toArray();var length=iterable.length||0,results=new Array(length);while(length--)results[length]=iterable[length];return results;};}
44
+ Array.from=$A;Object.extend(Array.prototype,Enumerable);if(!Array.prototype._reverse)Array.prototype._reverse=Array.prototype.reverse;Object.extend(Array.prototype,{_each:function(iterator){for(var i=0,length=this.length;i<length;i++)
45
+ iterator(this[i]);},clear:function(){this.length=0;return this;},first:function(){return this[0];},last:function(){return this[this.length-1];},compact:function(){return this.select(function(value){return value!=null;});},flatten:function(){return this.inject([],function(array,value){return array.concat(Object.isArray(value)?value.flatten():[value]);});},without:function(){var values=$A(arguments);return this.select(function(value){return!values.include(value);});},reverse:function(inline){return(inline!==false?this:this.toArray())._reverse();},reduce:function(){return this.length>1?this:this[0];},uniq:function(sorted){return this.inject([],function(array,value,index){if(0==index||(sorted?array.last()!=value:!array.include(value)))
46
+ array.push(value);return array;});},intersect:function(array){return this.uniq().findAll(function(item){return array.detect(function(value){return item===value});});},clone:function(){return[].concat(this);},size:function(){return this.length;},inspect:function(){return'['+this.map(Object.inspect).join(', ')+']';},toJSON:function(){var results=[];this.each(function(object){var value=Object.toJSON(object);if(!Object.isUndefined(value))results.push(value);});return'['+results.join(', ')+']';}});if(Object.isFunction(Array.prototype.forEach))
47
+ Array.prototype._each=Array.prototype.forEach;if(!Array.prototype.indexOf)Array.prototype.indexOf=function(item,i){i||(i=0);var length=this.length;if(i<0)i=length+i;for(;i<length;i++)
48
+ if(this[i]===item)return i;return-1;};if(!Array.prototype.lastIndexOf)Array.prototype.lastIndexOf=function(item,i){i=isNaN(i)?this.length:(i<0?this.length+i:i)+1;var n=this.slice(0,i).reverse().indexOf(item);return(n<0)?n:i-n-1;};Array.prototype.toArray=Array.prototype.clone;function $w(string){if(!Object.isString(string))return[];string=string.strip();return string?string.split(/\s+/):[];}
49
+ if(Prototype.Browser.Opera){Array.prototype.concat=function(){var array=[];for(var i=0,length=this.length;i<length;i++)array.push(this[i]);for(var i=0,length=arguments.length;i<length;i++){if(Object.isArray(arguments[i])){for(var j=0,arrayLength=arguments[i].length;j<arrayLength;j++)
50
+ array.push(arguments[i][j]);}else{array.push(arguments[i]);}}
51
+ return array;};}
52
+ Object.extend(Number.prototype,{toColorPart:function(){return this.toPaddedString(2,16);},succ:function(){return this+1;},times:function(iterator,context){$R(0,this,true).each(iterator,context);return this;},toPaddedString:function(length,radix){var string=this.toString(radix||10);return'0'.times(length-string.length)+string;},toJSON:function(){return isFinite(this)?this.toString():'null';}});$w('abs round ceil floor').each(function(method){Number.prototype[method]=Math[method].methodize();});function $H(object){return new Hash(object);};var Hash=Class.create(Enumerable,(function(){function toQueryPair(key,value){if(Object.isUndefined(value))return key;return key+'='+encodeURIComponent(String.interpret(value));}
53
+ return{initialize:function(object){this._object=Object.isHash(object)?object.toObject():Object.clone(object);},_each:function(iterator){for(var key in this._object){var value=this._object[key],pair=[key,value];pair.key=key;pair.value=value;iterator(pair);}},set:function(key,value){return this._object[key]=value;},get:function(key){if(this._object[key]!==Object.prototype[key])
54
+ return this._object[key];},unset:function(key){var value=this._object[key];delete this._object[key];return value;},toObject:function(){return Object.clone(this._object);},keys:function(){return this.pluck('key');},values:function(){return this.pluck('value');},index:function(value){var match=this.detect(function(pair){return pair.value===value;});return match&&match.key;},merge:function(object){return this.clone().update(object);},update:function(object){return new Hash(object).inject(this,function(result,pair){result.set(pair.key,pair.value);return result;});},toQueryString:function(){return this.inject([],function(results,pair){var key=encodeURIComponent(pair.key),values=pair.value;if(values&&typeof values=='object'){if(Object.isArray(values))
55
+ return results.concat(values.map(toQueryPair.curry(key)));}else results.push(toQueryPair(key,values));return results;}).join('&');},inspect:function(){return'#<Hash:{'+this.map(function(pair){return pair.map(Object.inspect).join(': ');}).join(', ')+'}>';},toJSON:function(){return Object.toJSON(this.toObject());},clone:function(){return new Hash(this);}}})());Hash.prototype.toTemplateReplacements=Hash.prototype.toObject;Hash.from=$H;var ObjectRange=Class.create(Enumerable,{initialize:function(start,end,exclusive){this.start=start;this.end=end;this.exclusive=exclusive;},_each:function(iterator){var value=this.start;while(this.include(value)){iterator(value);value=value.succ();}},include:function(value){if(value<this.start)
56
+ return false;if(this.exclusive)
57
+ return value<this.end;return value<=this.end;}});var $R=function(start,end,exclusive){return new ObjectRange(start,end,exclusive);};var Ajax={getTransport:function(){return Try.these(function(){return new XMLHttpRequest()},function(){return new ActiveXObject('Msxml2.XMLHTTP')},function(){return new ActiveXObject('Microsoft.XMLHTTP')})||false;},activeRequestCount:0};Ajax.Responders={responders:[],_each:function(iterator){this.responders._each(iterator);},register:function(responder){if(!this.include(responder))
58
+ this.responders.push(responder);},unregister:function(responder){this.responders=this.responders.without(responder);},dispatch:function(callback,request,transport,json){this.each(function(responder){if(Object.isFunction(responder[callback])){try{responder[callback].apply(responder,[request,transport,json]);}catch(e){}}});}};Object.extend(Ajax.Responders,Enumerable);Ajax.Responders.register({onCreate:function(){Ajax.activeRequestCount++},onComplete:function(){Ajax.activeRequestCount--}});Ajax.Base=Class.create({initialize:function(options){this.options={method:'post',asynchronous:true,contentType:'application/x-www-form-urlencoded',encoding:'UTF-8',parameters:'',evalJSON:true,evalJS:true};Object.extend(this.options,options||{});this.options.method=this.options.method.toLowerCase();if(Object.isString(this.options.parameters))
59
+ this.options.parameters=this.options.parameters.toQueryParams();else if(Object.isHash(this.options.parameters))
60
+ this.options.parameters=this.options.parameters.toObject();}});Ajax.Request=Class.create(Ajax.Base,{_complete:false,initialize:function($super,url,options){$super(options);this.transport=Ajax.getTransport();this.request(url);},request:function(url){this.url=url;this.method=this.options.method;var params=Object.clone(this.options.parameters);if(!['get','post'].include(this.method)){params['_method']=this.method;this.method='post';}
61
+ this.parameters=params;if(params=Object.toQueryString(params)){if(this.method=='get')
62
+ this.url+=(this.url.include('?')?'&':'?')+params;else if(/Konqueror|Safari|KHTML/.test(navigator.userAgent))
63
+ params+='&_=';}
64
+ try{var response=new Ajax.Response(this);if(this.options.onCreate)this.options.onCreate(response);Ajax.Responders.dispatch('onCreate',this,response);this.transport.open(this.method.toUpperCase(),this.url,this.options.asynchronous);if(this.options.asynchronous)this.respondToReadyState.bind(this).defer(1);this.transport.onreadystatechange=this.onStateChange.bind(this);this.setRequestHeaders();this.body=this.method=='post'?(this.options.postBody||params):null;this.transport.send(this.body);if(!this.options.asynchronous&&this.transport.overrideMimeType)
65
+ this.onStateChange();}
66
+ catch(e){this.dispatchException(e);}},onStateChange:function(){var readyState=this.transport.readyState;if(readyState>1&&!((readyState==4)&&this._complete))
67
+ this.respondToReadyState(this.transport.readyState);},setRequestHeaders:function(){var headers={'X-Requested-With':'XMLHttpRequest','X-Prototype-Version':Prototype.Version,'Accept':'text/javascript, text/html, application/xml, text/xml, */*'};if(this.method=='post'){headers['Content-type']=this.options.contentType+
68
+ (this.options.encoding?'; charset='+this.options.encoding:'');if(this.transport.overrideMimeType&&(navigator.userAgent.match(/Gecko\/(\d{4})/)||[0,2005])[1]<2005)
69
+ headers['Connection']='close';}
70
+ if(typeof this.options.requestHeaders=='object'){var extras=this.options.requestHeaders;if(Object.isFunction(extras.push))
71
+ for(var i=0,length=extras.length;i<length;i+=2)
72
+ headers[extras[i]]=extras[i+1];else
73
+ $H(extras).each(function(pair){headers[pair.key]=pair.value});}
74
+ for(var name in headers)
75
+ this.transport.setRequestHeader(name,headers[name]);},success:function(){var status=this.getStatus();return!status||(status>=200&&status<300);},getStatus:function(){try{return this.transport.status||0;}catch(e){return 0}},respondToReadyState:function(readyState){var state=Ajax.Request.Events[readyState],response=new Ajax.Response(this);if(state=='Complete'){try{this._complete=true;(this.options['on'+response.status]||this.options['on'+(this.success()?'Success':'Failure')]||Prototype.emptyFunction)(response,response.headerJSON);}catch(e){this.dispatchException(e);}
76
+ var contentType=response.getHeader('Content-type');if(this.options.evalJS=='force'||(this.options.evalJS&&this.isSameOrigin()&&contentType&&contentType.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i)))
77
+ this.evalResponse();}
78
+ try{(this.options['on'+state]||Prototype.emptyFunction)(response,response.headerJSON);Ajax.Responders.dispatch('on'+state,this,response,response.headerJSON);}catch(e){this.dispatchException(e);}
79
+ if(state=='Complete'){this.transport.onreadystatechange=Prototype.emptyFunction;}},isSameOrigin:function(){var m=this.url.match(/^\s*https?:\/\/[^\/]*/);return!m||(m[0]=='#{protocol}//#{domain}#{port}'.interpolate({protocol:location.protocol,domain:document.domain,port:location.port?':'+location.port:''}));},getHeader:function(name){try{return this.transport.getResponseHeader(name)||null;}catch(e){return null}},evalResponse:function(){try{return eval((this.transport.responseText||'').unfilterJSON());}catch(e){this.dispatchException(e);}},dispatchException:function(exception){(this.options.onException||Prototype.emptyFunction)(this,exception);Ajax.Responders.dispatch('onException',this,exception);}});Ajax.Request.Events=['Uninitialized','Loading','Loaded','Interactive','Complete'];Ajax.Response=Class.create({initialize:function(request){this.request=request;var transport=this.transport=request.transport,readyState=this.readyState=transport.readyState;if((readyState>2&&!Prototype.Browser.IE)||readyState==4){this.status=this.getStatus();this.statusText=this.getStatusText();this.responseText=String.interpret(transport.responseText);this.headerJSON=this._getHeaderJSON();}
80
+ if(readyState==4){var xml=transport.responseXML;this.responseXML=Object.isUndefined(xml)?null:xml;this.responseJSON=this._getResponseJSON();}},status:0,statusText:'',getStatus:Ajax.Request.prototype.getStatus,getStatusText:function(){try{return this.transport.statusText||'';}catch(e){return''}},getHeader:Ajax.Request.prototype.getHeader,getAllHeaders:function(){try{return this.getAllResponseHeaders();}catch(e){return null}},getResponseHeader:function(name){return this.transport.getResponseHeader(name);},getAllResponseHeaders:function(){return this.transport.getAllResponseHeaders();},_getHeaderJSON:function(){var json=this.getHeader('X-JSON');if(!json)return null;json=decodeURIComponent(escape(json));try{return json.evalJSON(this.request.options.sanitizeJSON||!this.request.isSameOrigin());}catch(e){this.request.dispatchException(e);}},_getResponseJSON:function(){var options=this.request.options;if(!options.evalJSON||(options.evalJSON!='force'&&!(this.getHeader('Content-type')||'').include('application/json'))||this.responseText.blank())
81
+ return null;try{return this.responseText.evalJSON(options.sanitizeJSON||!this.request.isSameOrigin());}catch(e){this.request.dispatchException(e);}}});Ajax.Updater=Class.create(Ajax.Request,{initialize:function($super,container,url,options){this.container={success:(container.success||container),failure:(container.failure||(container.success?null:container))};options=Object.clone(options);var onComplete=options.onComplete;options.onComplete=(function(response,json){this.updateContent(response.responseText);if(Object.isFunction(onComplete))onComplete(response,json);}).bind(this);$super(url,options);},updateContent:function(responseText){var receiver=this.container[this.success()?'success':'failure'],options=this.options;if(!options.evalScripts)responseText=responseText.stripScripts();if(receiver=$(receiver)){if(options.insertion){if(Object.isString(options.insertion)){var insertion={};insertion[options.insertion]=responseText;receiver.insert(insertion);}
82
+ else options.insertion(receiver,responseText);}
83
+ else receiver.update(responseText);}}});Ajax.PeriodicalUpdater=Class.create(Ajax.Base,{initialize:function($super,container,url,options){$super(options);this.onComplete=this.options.onComplete;this.frequency=(this.options.frequency||2);this.decay=(this.options.decay||1);this.updater={};this.container=container;this.url=url;this.start();},start:function(){this.options.onComplete=this.updateComplete.bind(this);this.onTimerEvent();},stop:function(){this.updater.options.onComplete=undefined;clearTimeout(this.timer);(this.onComplete||Prototype.emptyFunction).apply(this,arguments);},updateComplete:function(response){if(this.options.decay){this.decay=(response.responseText==this.lastText?this.decay*this.options.decay:1);this.lastText=response.responseText;}
84
+ this.timer=this.onTimerEvent.bind(this).delay(this.decay*this.frequency);},onTimerEvent:function(){this.updater=new Ajax.Updater(this.container,this.url,this.options);}});function $(element){if(arguments.length>1){for(var i=0,elements=[],length=arguments.length;i<length;i++)
85
+ elements.push($(arguments[i]));return elements;}
86
+ if(Object.isString(element))
87
+ element=document.getElementById(element);return Element.extend(element);}
88
+ if(Prototype.BrowserFeatures.XPath){document._getElementsByXPath=function(expression,parentElement){var results=[];var query=document.evaluate(expression,$(parentElement)||document,null,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null);for(var i=0,length=query.snapshotLength;i<length;i++)
89
+ results.push(Element.extend(query.snapshotItem(i)));return results;};}
90
+ if(!window.Node)var Node={};if(!Node.ELEMENT_NODE){Object.extend(Node,{ELEMENT_NODE:1,ATTRIBUTE_NODE:2,TEXT_NODE:3,CDATA_SECTION_NODE:4,ENTITY_REFERENCE_NODE:5,ENTITY_NODE:6,PROCESSING_INSTRUCTION_NODE:7,COMMENT_NODE:8,DOCUMENT_NODE:9,DOCUMENT_TYPE_NODE:10,DOCUMENT_FRAGMENT_NODE:11,NOTATION_NODE:12});}
91
+ (function(){var element=this.Element;this.Element=function(tagName,attributes){attributes=attributes||{};tagName=tagName.toLowerCase();var cache=Element.cache;if(Prototype.Browser.IE&&attributes.name){tagName='<'+tagName+' name="'+attributes.name+'">';delete attributes.name;return Element.writeAttribute(document.createElement(tagName),attributes);}
92
+ if(!cache[tagName])cache[tagName]=Element.extend(document.createElement(tagName));return Element.writeAttribute(cache[tagName].cloneNode(false),attributes);};Object.extend(this.Element,element||{});if(element)this.Element.prototype=element.prototype;}).call(window);Element.cache={};Element.Methods={visible:function(element){return $(element).style.display!='none';},toggle:function(element){element=$(element);Element[Element.visible(element)?'hide':'show'](element);return element;},hide:function(element){element=$(element);element.style.display='none';return element;},show:function(element){element=$(element);element.style.display='';return element;},remove:function(element){element=$(element);element.parentNode.removeChild(element);return element;},update:function(element,content){element=$(element);if(content&&content.toElement)content=content.toElement();if(Object.isElement(content))return element.update().insert(content);content=Object.toHTML(content);element.innerHTML=content.stripScripts();content.evalScripts.bind(content).defer();return element;},replace:function(element,content){element=$(element);if(content&&content.toElement)content=content.toElement();else if(!Object.isElement(content)){content=Object.toHTML(content);var range=element.ownerDocument.createRange();range.selectNode(element);content.evalScripts.bind(content).defer();content=range.createContextualFragment(content.stripScripts());}
93
+ element.parentNode.replaceChild(content,element);return element;},insert:function(element,insertions){element=$(element);if(Object.isString(insertions)||Object.isNumber(insertions)||Object.isElement(insertions)||(insertions&&(insertions.toElement||insertions.toHTML)))
94
+ insertions={bottom:insertions};var content,insert,tagName,childNodes;for(var position in insertions){content=insertions[position];position=position.toLowerCase();insert=Element._insertionTranslations[position];if(content&&content.toElement)content=content.toElement();if(Object.isElement(content)){insert(element,content);continue;}
95
+ content=Object.toHTML(content);tagName=((position=='before'||position=='after')?element.parentNode:element).tagName.toUpperCase();childNodes=Element._getContentFromAnonymousElement(tagName,content.stripScripts());if(position=='top'||position=='after')childNodes.reverse();childNodes.each(insert.curry(element));content.evalScripts.bind(content).defer();}
96
+ return element;},wrap:function(element,wrapper,attributes){element=$(element);if(Object.isElement(wrapper))
97
+ $(wrapper).writeAttribute(attributes||{});else if(Object.isString(wrapper))wrapper=new Element(wrapper,attributes);else wrapper=new Element('div',wrapper);if(element.parentNode)
98
+ element.parentNode.replaceChild(wrapper,element);wrapper.appendChild(element);return wrapper;},inspect:function(element){element=$(element);var result='<'+element.tagName.toLowerCase();$H({'id':'id','className':'class'}).each(function(pair){var property=pair.first(),attribute=pair.last();var value=(element[property]||'').toString();if(value)result+=' '+attribute+'='+value.inspect(true);});return result+'>';},recursivelyCollect:function(element,property){element=$(element);var elements=[];while(element=element[property])
99
+ if(element.nodeType==1)
100
+ elements.push(Element.extend(element));return elements;},ancestors:function(element){return $(element).recursivelyCollect('parentNode');},descendants:function(element){return $(element).select("*");},firstDescendant:function(element){element=$(element).firstChild;while(element&&element.nodeType!=1)element=element.nextSibling;return $(element);},immediateDescendants:function(element){if(!(element=$(element).firstChild))return[];while(element&&element.nodeType!=1)element=element.nextSibling;if(element)return[element].concat($(element).nextSiblings());return[];},previousSiblings:function(element){return $(element).recursivelyCollect('previousSibling');},nextSiblings:function(element){return $(element).recursivelyCollect('nextSibling');},siblings:function(element){element=$(element);return element.previousSiblings().reverse().concat(element.nextSiblings());},match:function(element,selector){if(Object.isString(selector))
101
+ selector=new Selector(selector);return selector.match($(element));},up:function(element,expression,index){element=$(element);if(arguments.length==1)return $(element.parentNode);var ancestors=element.ancestors();return Object.isNumber(expression)?ancestors[expression]:Selector.findElement(ancestors,expression,index);},down:function(element,expression,index){element=$(element);if(arguments.length==1)return element.firstDescendant();return Object.isNumber(expression)?element.descendants()[expression]:Element.select(element,expression)[index||0];},previous:function(element,expression,index){element=$(element);if(arguments.length==1)return $(Selector.handlers.previousElementSibling(element));var previousSiblings=element.previousSiblings();return Object.isNumber(expression)?previousSiblings[expression]:Selector.findElement(previousSiblings,expression,index);},next:function(element,expression,index){element=$(element);if(arguments.length==1)return $(Selector.handlers.nextElementSibling(element));var nextSiblings=element.nextSiblings();return Object.isNumber(expression)?nextSiblings[expression]:Selector.findElement(nextSiblings,expression,index);},select:function(){var args=$A(arguments),element=$(args.shift());return Selector.findChildElements(element,args);},adjacent:function(){var args=$A(arguments),element=$(args.shift());return Selector.findChildElements(element.parentNode,args).without(element);},identify:function(element){element=$(element);var id=element.readAttribute('id'),self=arguments.callee;if(id)return id;do{id='anonymous_element_'+self.counter++}while($(id));element.writeAttribute('id',id);return id;},readAttribute:function(element,name){element=$(element);if(Prototype.Browser.IE){var t=Element._attributeTranslations.read;if(t.values[name])return t.values[name](element,name);if(t.names[name])name=t.names[name];if(name.include(':')){return(!element.attributes||!element.attributes[name])?null:element.attributes[name].value;}}
102
+ return element.getAttribute(name);},writeAttribute:function(element,name,value){element=$(element);var attributes={},t=Element._attributeTranslations.write;if(typeof name=='object')attributes=name;else attributes[name]=Object.isUndefined(value)?true:value;for(var attr in attributes){name=t.names[attr]||attr;value=attributes[attr];if(t.values[attr])name=t.values[attr](element,value);if(value===false||value===null)
103
+ element.removeAttribute(name);else if(value===true)
104
+ element.setAttribute(name,name);else element.setAttribute(name,value);}
105
+ return element;},getHeight:function(element){return $(element).getDimensions().height;},getWidth:function(element){return $(element).getDimensions().width;},classNames:function(element){return new Element.ClassNames(element);},hasClassName:function(element,className){if(!(element=$(element)))return;var elementClassName=element.className;return(elementClassName.length>0&&(elementClassName==className||new RegExp("(^|\\s)"+className+"(\\s|$)").test(elementClassName)));},addClassName:function(element,className){if(!(element=$(element)))return;if(!element.hasClassName(className))
106
+ element.className+=(element.className?' ':'')+className;return element;},removeClassName:function(element,className){if(!(element=$(element)))return;element.className=element.className.replace(new RegExp("(^|\\s+)"+className+"(\\s+|$)"),' ').strip();return element;},toggleClassName:function(element,className){if(!(element=$(element)))return;return element[element.hasClassName(className)?'removeClassName':'addClassName'](className);},cleanWhitespace:function(element){element=$(element);var node=element.firstChild;while(node){var nextNode=node.nextSibling;if(node.nodeType==3&&!/\S/.test(node.nodeValue))
107
+ element.removeChild(node);node=nextNode;}
108
+ return element;},empty:function(element){return $(element).innerHTML.blank();},descendantOf:function(element,ancestor){element=$(element),ancestor=$(ancestor);if(element.compareDocumentPosition)
109
+ return(element.compareDocumentPosition(ancestor)&8)===8;if(ancestor.contains)
110
+ return ancestor.contains(element)&&ancestor!==element;while(element=element.parentNode)
111
+ if(element==ancestor)return true;return false;},scrollTo:function(element){element=$(element);var pos=element.cumulativeOffset();window.scrollTo(pos[0],pos[1]);return element;},getStyle:function(element,style){element=$(element);style=style=='float'?'cssFloat':style.camelize();var value=element.style[style];if(!value||value=='auto'){var css=document.defaultView.getComputedStyle(element,null);value=css?css[style]:null;}
112
+ if(style=='opacity')return value?parseFloat(value):1.0;return value=='auto'?null:value;},getOpacity:function(element){return $(element).getStyle('opacity');},setStyle:function(element,styles){element=$(element);var elementStyle=element.style,match;if(Object.isString(styles)){element.style.cssText+=';'+styles;return styles.include('opacity')?element.setOpacity(styles.match(/opacity:\s*(\d?\.?\d*)/)[1]):element;}
113
+ for(var property in styles)
114
+ if(property=='opacity')element.setOpacity(styles[property]);else
115
+ elementStyle[(property=='float'||property=='cssFloat')?(Object.isUndefined(elementStyle.styleFloat)?'cssFloat':'styleFloat'):property]=styles[property];return element;},setOpacity:function(element,value){element=$(element);element.style.opacity=(value==1||value==='')?'':(value<0.00001)?0:value;return element;},getDimensions:function(element){element=$(element);var display=element.getStyle('display');if(display!='none'&&display!=null)
116
+ return{width:element.offsetWidth,height:element.offsetHeight};var els=element.style;var originalVisibility=els.visibility;var originalPosition=els.position;var originalDisplay=els.display;els.visibility='hidden';els.position='absolute';els.display='block';var originalWidth=element.clientWidth;var originalHeight=element.clientHeight;els.display=originalDisplay;els.position=originalPosition;els.visibility=originalVisibility;return{width:originalWidth,height:originalHeight};},makePositioned:function(element){element=$(element);var pos=Element.getStyle(element,'position');if(pos=='static'||!pos){element._madePositioned=true;element.style.position='relative';if(Prototype.Browser.Opera){element.style.top=0;element.style.left=0;}}
117
+ return element;},undoPositioned:function(element){element=$(element);if(element._madePositioned){element._madePositioned=undefined;element.style.position=element.style.top=element.style.left=element.style.bottom=element.style.right='';}
118
+ return element;},makeClipping:function(element){element=$(element);if(element._overflow)return element;element._overflow=Element.getStyle(element,'overflow')||'auto';if(element._overflow!=='hidden')
119
+ element.style.overflow='hidden';return element;},undoClipping:function(element){element=$(element);if(!element._overflow)return element;element.style.overflow=element._overflow=='auto'?'':element._overflow;element._overflow=null;return element;},cumulativeOffset:function(element){var valueT=0,valueL=0;do{valueT+=element.offsetTop||0;valueL+=element.offsetLeft||0;element=element.offsetParent;}while(element);return Element._returnOffset(valueL,valueT);},positionedOffset:function(element){var valueT=0,valueL=0;do{valueT+=element.offsetTop||0;valueL+=element.offsetLeft||0;element=element.offsetParent;if(element){if(element.tagName.toUpperCase()=='BODY')break;var p=Element.getStyle(element,'position');if(p!=='static')break;}}while(element);return Element._returnOffset(valueL,valueT);},absolutize:function(element){element=$(element);if(element.getStyle('position')=='absolute')return element;var offsets=element.positionedOffset();var top=offsets[1];var left=offsets[0];var width=element.clientWidth;var height=element.clientHeight;element._originalLeft=left-parseFloat(element.style.left||0);element._originalTop=top-parseFloat(element.style.top||0);element._originalWidth=element.style.width;element._originalHeight=element.style.height;element.style.position='absolute';element.style.top=top+'px';element.style.left=left+'px';element.style.width=width+'px';element.style.height=height+'px';return element;},relativize:function(element){element=$(element);if(element.getStyle('position')=='relative')return element;element.style.position='relative';var top=parseFloat(element.style.top||0)-(element._originalTop||0);var left=parseFloat(element.style.left||0)-(element._originalLeft||0);element.style.top=top+'px';element.style.left=left+'px';element.style.height=element._originalHeight;element.style.width=element._originalWidth;return element;},cumulativeScrollOffset:function(element){var valueT=0,valueL=0;do{valueT+=element.scrollTop||0;valueL+=element.scrollLeft||0;element=element.parentNode;}while(element);return Element._returnOffset(valueL,valueT);},getOffsetParent:function(element){if(element.offsetParent)return $(element.offsetParent);if(element==document.body)return $(element);if(element.tagName.toUpperCase()=='HTML')
120
+ return $(document.body);while((element=element.parentNode)&&element!=document.body)
121
+ if(Element.getStyle(element,'position')!='static')
122
+ return $(element);return $(document.body);},viewportOffset:function(forElement){var valueT=0,valueL=0;var element=forElement;do{valueT+=element.offsetTop||0;valueL+=element.offsetLeft||0;if(element.offsetParent==document.body&&Element.getStyle(element,'position')=='absolute')break;}while(element=element.offsetParent);element=forElement;do{if(!Prototype.Browser.Opera||(element.tagName&&(element.tagName.toUpperCase()=='BODY'))){valueT-=element.scrollTop||0;valueL-=element.scrollLeft||0;}}while(element=element.parentNode);return Element._returnOffset(valueL,valueT);},clonePosition:function(element,source){var options=Object.extend({setLeft:true,setTop:true,setWidth:true,setHeight:true,offsetTop:0,offsetLeft:0},arguments[2]||{});source=$(source);var p=source.viewportOffset();element=$(element);var delta=[0,0];var parent=null;if(Element.getStyle(element,'position')=='absolute'){parent=element.getOffsetParent();delta=parent.viewportOffset();}
123
+ if(parent==document.body){delta[0]-=document.body.offsetLeft;delta[1]-=document.body.offsetTop;}
124
+ if(options.setLeft)element.style.left=(p[0]-delta[0]+options.offsetLeft)+'px';if(options.setTop)element.style.top=(p[1]-delta[1]+options.offsetTop)+'px';if(options.setWidth)element.style.width=source.offsetWidth+'px';if(options.setHeight)element.style.height=source.offsetHeight+'px';return element;}};Element.Methods.identify.counter=1;Object.extend(Element.Methods,{getElementsBySelector:Element.Methods.select,childElements:Element.Methods.immediateDescendants});Element._attributeTranslations={write:{names:{className:'class',htmlFor:'for'},values:{}}};if(Prototype.Browser.Opera){Element.Methods.getStyle=Element.Methods.getStyle.wrap(function(proceed,element,style){switch(style){case'left':case'top':case'right':case'bottom':if(proceed(element,'position')==='static')return null;case'height':case'width':if(!Element.visible(element))return null;var dim=parseInt(proceed(element,style),10);if(dim!==element['offset'+style.capitalize()])
125
+ return dim+'px';var properties;if(style==='height'){properties=['border-top-width','padding-top','padding-bottom','border-bottom-width'];}
126
+ else{properties=['border-left-width','padding-left','padding-right','border-right-width'];}
127
+ return properties.inject(dim,function(memo,property){var val=proceed(element,property);return val===null?memo:memo-parseInt(val,10);})+'px';default:return proceed(element,style);}});Element.Methods.readAttribute=Element.Methods.readAttribute.wrap(function(proceed,element,attribute){if(attribute==='title')return element.title;return proceed(element,attribute);});}
128
+ else if(Prototype.Browser.IE){Element.Methods.getOffsetParent=Element.Methods.getOffsetParent.wrap(function(proceed,element){element=$(element);try{element.offsetParent}
129
+ catch(e){return $(document.body)}
130
+ var position=element.getStyle('position');if(position!=='static')return proceed(element);element.setStyle({position:'relative'});var value=proceed(element);element.setStyle({position:position});return value;});$w('positionedOffset viewportOffset').each(function(method){Element.Methods[method]=Element.Methods[method].wrap(function(proceed,element){element=$(element);try{element.offsetParent}
131
+ catch(e){return Element._returnOffset(0,0)}
132
+ var position=element.getStyle('position');if(position!=='static')return proceed(element);var offsetParent=element.getOffsetParent();if(offsetParent&&offsetParent.getStyle('position')==='fixed')
133
+ offsetParent.setStyle({zoom:1});element.setStyle({position:'relative'});var value=proceed(element);element.setStyle({position:position});return value;});});Element.Methods.cumulativeOffset=Element.Methods.cumulativeOffset.wrap(function(proceed,element){try{element.offsetParent}
134
+ catch(e){return Element._returnOffset(0,0)}
135
+ return proceed(element);});Element.Methods.getStyle=function(element,style){element=$(element);style=(style=='float'||style=='cssFloat')?'styleFloat':style.camelize();var value=element.style[style];if(!value&&element.currentStyle)value=element.currentStyle[style];if(style=='opacity'){if(value=(element.getStyle('filter')||'').match(/alpha\(opacity=(.*)\)/))
136
+ if(value[1])return parseFloat(value[1])/100;return 1.0;}
137
+ if(value=='auto'){if((style=='width'||style=='height')&&(element.getStyle('display')!='none'))
138
+ return element['offset'+style.capitalize()]+'px';return null;}
139
+ return value;};Element.Methods.setOpacity=function(element,value){function stripAlpha(filter){return filter.replace(/alpha\([^\)]*\)/gi,'');}
140
+ element=$(element);var currentStyle=element.currentStyle;if((currentStyle&&!currentStyle.hasLayout)||(!currentStyle&&element.style.zoom=='normal'))
141
+ element.style.zoom=1;var filter=element.getStyle('filter'),style=element.style;if(value==1||value===''){(filter=stripAlpha(filter))?style.filter=filter:style.removeAttribute('filter');return element;}else if(value<0.00001)value=0;style.filter=stripAlpha(filter)+'alpha(opacity='+(value*100)+')';return element;};Element._attributeTranslations={read:{names:{'class':'className','for':'htmlFor'},values:{_getAttr:function(element,attribute){return element.getAttribute(attribute,2);},_getAttrNode:function(element,attribute){var node=element.getAttributeNode(attribute);return node?node.value:"";},_getEv:function(element,attribute){attribute=element.getAttribute(attribute);return attribute?attribute.toString().slice(23,-2):null;},_flag:function(element,attribute){return $(element).hasAttribute(attribute)?attribute:null;},style:function(element){return element.style.cssText.toLowerCase();},title:function(element){return element.title;}}}};Element._attributeTranslations.write={names:Object.extend({cellpadding:'cellPadding',cellspacing:'cellSpacing'},Element._attributeTranslations.read.names),values:{checked:function(element,value){element.checked=!!value;},style:function(element,value){element.style.cssText=value?value:'';}}};Element._attributeTranslations.has={};$w('colSpan rowSpan vAlign dateTime accessKey tabIndex '+'encType maxLength readOnly longDesc frameBorder').each(function(attr){Element._attributeTranslations.write.names[attr.toLowerCase()]=attr;Element._attributeTranslations.has[attr.toLowerCase()]=attr;});(function(v){Object.extend(v,{href:v._getAttr,src:v._getAttr,type:v._getAttr,action:v._getAttrNode,disabled:v._flag,checked:v._flag,readonly:v._flag,multiple:v._flag,onload:v._getEv,onunload:v._getEv,onclick:v._getEv,ondblclick:v._getEv,onmousedown:v._getEv,onmouseup:v._getEv,onmouseover:v._getEv,onmousemove:v._getEv,onmouseout:v._getEv,onfocus:v._getEv,onblur:v._getEv,onkeypress:v._getEv,onkeydown:v._getEv,onkeyup:v._getEv,onsubmit:v._getEv,onreset:v._getEv,onselect:v._getEv,onchange:v._getEv});})(Element._attributeTranslations.read.values);}
142
+ else if(Prototype.Browser.Gecko&&/rv:1\.8\.0/.test(navigator.userAgent)){Element.Methods.setOpacity=function(element,value){element=$(element);element.style.opacity=(value==1)?0.999999:(value==='')?'':(value<0.00001)?0:value;return element;};}
143
+ else if(Prototype.Browser.WebKit){Element.Methods.setOpacity=function(element,value){element=$(element);element.style.opacity=(value==1||value==='')?'':(value<0.00001)?0:value;if(value==1)
144
+ if(element.tagName.toUpperCase()=='IMG'&&element.width){element.width++;element.width--;}else try{var n=document.createTextNode(' ');element.appendChild(n);element.removeChild(n);}catch(e){}
145
+ return element;};Element.Methods.cumulativeOffset=function(element){var valueT=0,valueL=0;do{valueT+=element.offsetTop||0;valueL+=element.offsetLeft||0;if(element.offsetParent==document.body)
146
+ if(Element.getStyle(element,'position')=='absolute')break;element=element.offsetParent;}while(element);return Element._returnOffset(valueL,valueT);};}
147
+ if(Prototype.Browser.IE||Prototype.Browser.Opera){Element.Methods.update=function(element,content){element=$(element);if(content&&content.toElement)content=content.toElement();if(Object.isElement(content))return element.update().insert(content);content=Object.toHTML(content);var tagName=element.tagName.toUpperCase();if(tagName in Element._insertionTranslations.tags){$A(element.childNodes).each(function(node){element.removeChild(node)});Element._getContentFromAnonymousElement(tagName,content.stripScripts()).each(function(node){element.appendChild(node)});}
148
+ else element.innerHTML=content.stripScripts();content.evalScripts.bind(content).defer();return element;};}
149
+ if('outerHTML'in document.createElement('div')){Element.Methods.replace=function(element,content){element=$(element);if(content&&content.toElement)content=content.toElement();if(Object.isElement(content)){element.parentNode.replaceChild(content,element);return element;}
150
+ content=Object.toHTML(content);var parent=element.parentNode,tagName=parent.tagName.toUpperCase();if(Element._insertionTranslations.tags[tagName]){var nextSibling=element.next();var fragments=Element._getContentFromAnonymousElement(tagName,content.stripScripts());parent.removeChild(element);if(nextSibling)
151
+ fragments.each(function(node){parent.insertBefore(node,nextSibling)});else
152
+ fragments.each(function(node){parent.appendChild(node)});}
153
+ else element.outerHTML=content.stripScripts();content.evalScripts.bind(content).defer();return element;};}
154
+ Element._returnOffset=function(l,t){var result=[l,t];result.left=l;result.top=t;return result;};Element._getContentFromAnonymousElement=function(tagName,html){var div=new Element('div'),t=Element._insertionTranslations.tags[tagName];if(t){div.innerHTML=t[0]+html+t[1];t[2].times(function(){div=div.firstChild});}else div.innerHTML=html;return $A(div.childNodes);};Element._insertionTranslations={before:function(element,node){element.parentNode.insertBefore(node,element);},top:function(element,node){element.insertBefore(node,element.firstChild);},bottom:function(element,node){element.appendChild(node);},after:function(element,node){element.parentNode.insertBefore(node,element.nextSibling);},tags:{TABLE:['<table>','</table>',1],TBODY:['<table><tbody>','</tbody></table>',2],TR:['<table><tbody><tr>','</tr></tbody></table>',3],TD:['<table><tbody><tr><td>','</td></tr></tbody></table>',4],SELECT:['<select>','</select>',1]}};(function(){Object.extend(this.tags,{THEAD:this.tags.TBODY,TFOOT:this.tags.TBODY,TH:this.tags.TD});}).call(Element._insertionTranslations);Element.Methods.Simulated={hasAttribute:function(element,attribute){attribute=Element._attributeTranslations.has[attribute]||attribute;var node=$(element).getAttributeNode(attribute);return!!(node&&node.specified);}};Element.Methods.ByTag={};Object.extend(Element,Element.Methods);if(!Prototype.BrowserFeatures.ElementExtensions&&document.createElement('div')['__proto__']){window.HTMLElement={};window.HTMLElement.prototype=document.createElement('div')['__proto__'];Prototype.BrowserFeatures.ElementExtensions=true;}
155
+ Element.extend=(function(){if(Prototype.BrowserFeatures.SpecificElementExtensions)
156
+ return Prototype.K;var Methods={},ByTag=Element.Methods.ByTag;var extend=Object.extend(function(element){if(!element||element._extendedByPrototype||element.nodeType!=1||element==window)return element;var methods=Object.clone(Methods),tagName=element.tagName.toUpperCase(),property,value;if(ByTag[tagName])Object.extend(methods,ByTag[tagName]);for(property in methods){value=methods[property];if(Object.isFunction(value)&&!(property in element))
157
+ element[property]=value.methodize();}
158
+ element._extendedByPrototype=Prototype.emptyFunction;return element;},{refresh:function(){if(!Prototype.BrowserFeatures.ElementExtensions){Object.extend(Methods,Element.Methods);Object.extend(Methods,Element.Methods.Simulated);}}});extend.refresh();return extend;})();Element.hasAttribute=function(element,attribute){if(element.hasAttribute)return element.hasAttribute(attribute);return Element.Methods.Simulated.hasAttribute(element,attribute);};Element.addMethods=function(methods){var F=Prototype.BrowserFeatures,T=Element.Methods.ByTag;if(!methods){Object.extend(Form,Form.Methods);Object.extend(Form.Element,Form.Element.Methods);Object.extend(Element.Methods.ByTag,{"FORM":Object.clone(Form.Methods),"INPUT":Object.clone(Form.Element.Methods),"SELECT":Object.clone(Form.Element.Methods),"TEXTAREA":Object.clone(Form.Element.Methods)});}
159
+ if(arguments.length==2){var tagName=methods;methods=arguments[1];}
160
+ if(!tagName)Object.extend(Element.Methods,methods||{});else{if(Object.isArray(tagName))tagName.each(extend);else extend(tagName);}
161
+ function extend(tagName){tagName=tagName.toUpperCase();if(!Element.Methods.ByTag[tagName])
162
+ Element.Methods.ByTag[tagName]={};Object.extend(Element.Methods.ByTag[tagName],methods);}
163
+ function copy(methods,destination,onlyIfAbsent){onlyIfAbsent=onlyIfAbsent||false;for(var property in methods){var value=methods[property];if(!Object.isFunction(value))continue;if(!onlyIfAbsent||!(property in destination))
164
+ destination[property]=value.methodize();}}
165
+ function findDOMClass(tagName){var klass;var trans={"OPTGROUP":"OptGroup","TEXTAREA":"TextArea","P":"Paragraph","FIELDSET":"FieldSet","UL":"UList","OL":"OList","DL":"DList","DIR":"Directory","H1":"Heading","H2":"Heading","H3":"Heading","H4":"Heading","H5":"Heading","H6":"Heading","Q":"Quote","INS":"Mod","DEL":"Mod","A":"Anchor","IMG":"Image","CAPTION":"TableCaption","COL":"TableCol","COLGROUP":"TableCol","THEAD":"TableSection","TFOOT":"TableSection","TBODY":"TableSection","TR":"TableRow","TH":"TableCell","TD":"TableCell","FRAMESET":"FrameSet","IFRAME":"IFrame"};if(trans[tagName])klass='HTML'+trans[tagName]+'Element';if(window[klass])return window[klass];klass='HTML'+tagName+'Element';if(window[klass])return window[klass];klass='HTML'+tagName.capitalize()+'Element';if(window[klass])return window[klass];window[klass]={};window[klass].prototype=document.createElement(tagName)['__proto__'];return window[klass];}
166
+ if(F.ElementExtensions){copy(Element.Methods,HTMLElement.prototype);copy(Element.Methods.Simulated,HTMLElement.prototype,true);}
167
+ if(F.SpecificElementExtensions){for(var tag in Element.Methods.ByTag){var klass=findDOMClass(tag);if(Object.isUndefined(klass))continue;copy(T[tag],klass.prototype);}}
168
+ Object.extend(Element,Element.Methods);delete Element.ByTag;if(Element.extend.refresh)Element.extend.refresh();Element.cache={};};document.viewport={getDimensions:function(){var dimensions={},B=Prototype.Browser;$w('width height').each(function(d){var D=d.capitalize();if(B.WebKit&&!document.evaluate){dimensions[d]=self['inner'+D];}else if(B.Opera&&parseFloat(window.opera.version())<9.5){dimensions[d]=document.body['client'+D]}else{dimensions[d]=document.documentElement['client'+D];}});return dimensions;},getWidth:function(){return this.getDimensions().width;},getHeight:function(){return this.getDimensions().height;},getScrollOffsets:function(){return Element._returnOffset(window.pageXOffset||document.documentElement.scrollLeft||document.body.scrollLeft,window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop);}};var Selector=Class.create({initialize:function(expression){this.expression=expression.strip();if(this.shouldUseSelectorsAPI()){this.mode='selectorsAPI';}else if(this.shouldUseXPath()){this.mode='xpath';this.compileXPathMatcher();}else{this.mode="normal";this.compileMatcher();}},shouldUseXPath:function(){if(!Prototype.BrowserFeatures.XPath)return false;var e=this.expression;if(Prototype.Browser.WebKit&&(e.include("-of-type")||e.include(":empty")))
169
+ return false;if((/(\[[\w-]*?:|:checked)/).test(e))
170
+ return false;return true;},shouldUseSelectorsAPI:function(){if(!Prototype.BrowserFeatures.SelectorsAPI)return false;if(!Selector._div)Selector._div=new Element('div');try{Selector._div.querySelector(this.expression);}catch(e){return false;}
171
+ return true;},compileMatcher:function(){var e=this.expression,ps=Selector.patterns,h=Selector.handlers,c=Selector.criteria,le,p,m;if(Selector._cache[e]){this.matcher=Selector._cache[e];return;}
172
+ this.matcher=["this.matcher = function(root) {","var r = root, h = Selector.handlers, c = false, n;"];while(e&&le!=e&&(/\S/).test(e)){le=e;for(var i in ps){p=ps[i];if(m=e.match(p)){this.matcher.push(Object.isFunction(c[i])?c[i](m):new Template(c[i]).evaluate(m));e=e.replace(m[0],'');break;}}}
173
+ this.matcher.push("return h.unique(n);\n}");eval(this.matcher.join('\n'));Selector._cache[this.expression]=this.matcher;},compileXPathMatcher:function(){var e=this.expression,ps=Selector.patterns,x=Selector.xpath,le,m;if(Selector._cache[e]){this.xpath=Selector._cache[e];return;}
174
+ this.matcher=['.//*'];while(e&&le!=e&&(/\S/).test(e)){le=e;for(var i in ps){if(m=e.match(ps[i])){this.matcher.push(Object.isFunction(x[i])?x[i](m):new Template(x[i]).evaluate(m));e=e.replace(m[0],'');break;}}}
175
+ this.xpath=this.matcher.join('');Selector._cache[this.expression]=this.xpath;},findElements:function(root){root=root||document;var e=this.expression,results;switch(this.mode){case'selectorsAPI':if(root!==document){var oldId=root.id,id=$(root).identify();e="#"+id+" "+e;}
176
+ results=$A(root.querySelectorAll(e)).map(Element.extend);root.id=oldId;return results;case'xpath':return document._getElementsByXPath(this.xpath,root);default:return this.matcher(root);}},match:function(element){this.tokens=[];var e=this.expression,ps=Selector.patterns,as=Selector.assertions;var le,p,m;while(e&&le!==e&&(/\S/).test(e)){le=e;for(var i in ps){p=ps[i];if(m=e.match(p)){if(as[i]){this.tokens.push([i,Object.clone(m)]);e=e.replace(m[0],'');}else{return this.findElements(document).include(element);}}}}
177
+ var match=true,name,matches;for(var i=0,token;token=this.tokens[i];i++){name=token[0],matches=token[1];if(!Selector.assertions[name](element,matches)){match=false;break;}}
178
+ return match;},toString:function(){return this.expression;},inspect:function(){return"#<Selector:"+this.expression.inspect()+">";}});Object.extend(Selector,{_cache:{},xpath:{descendant:"//*",child:"/*",adjacent:"/following-sibling::*[1]",laterSibling:'/following-sibling::*',tagName:function(m){if(m[1]=='*')return'';return"[local-name()='"+m[1].toLowerCase()+"' or local-name()='"+m[1].toUpperCase()+"']";},className:"[contains(concat(' ', @class, ' '), ' #{1} ')]",id:"[@id='#{1}']",attrPresence:function(m){m[1]=m[1].toLowerCase();return new Template("[@#{1}]").evaluate(m);},attr:function(m){m[1]=m[1].toLowerCase();m[3]=m[5]||m[6];return new Template(Selector.xpath.operators[m[2]]).evaluate(m);},pseudo:function(m){var h=Selector.xpath.pseudos[m[1]];if(!h)return'';if(Object.isFunction(h))return h(m);return new Template(Selector.xpath.pseudos[m[1]]).evaluate(m);},operators:{'=':"[@#{1}='#{3}']",'!=':"[@#{1}!='#{3}']",'^=':"[starts-with(@#{1}, '#{3}')]",'$=':"[substring(@#{1}, (string-length(@#{1}) - string-length('#{3}') + 1))='#{3}']",'*=':"[contains(@#{1}, '#{3}')]",'~=':"[contains(concat(' ', @#{1}, ' '), ' #{3} ')]",'|=':"[contains(concat('-', @#{1}, '-'), '-#{3}-')]"},pseudos:{'first-child':'[not(preceding-sibling::*)]','last-child':'[not(following-sibling::*)]','only-child':'[not(preceding-sibling::* or following-sibling::*)]','empty':"[count(*) = 0 and (count(text()) = 0)]",'checked':"[@checked]",'disabled':"[(@disabled) and (@type!='hidden')]",'enabled':"[not(@disabled) and (@type!='hidden')]",'not':function(m){var e=m[6],p=Selector.patterns,x=Selector.xpath,le,v;var exclusion=[];while(e&&le!=e&&(/\S/).test(e)){le=e;for(var i in p){if(m=e.match(p[i])){v=Object.isFunction(x[i])?x[i](m):new Template(x[i]).evaluate(m);exclusion.push("("+v.substring(1,v.length-1)+")");e=e.replace(m[0],'');break;}}}
179
+ return"[not("+exclusion.join(" and ")+")]";},'nth-child':function(m){return Selector.xpath.pseudos.nth("(count(./preceding-sibling::*) + 1) ",m);},'nth-last-child':function(m){return Selector.xpath.pseudos.nth("(count(./following-sibling::*) + 1) ",m);},'nth-of-type':function(m){return Selector.xpath.pseudos.nth("position() ",m);},'nth-last-of-type':function(m){return Selector.xpath.pseudos.nth("(last() + 1 - position()) ",m);},'first-of-type':function(m){m[6]="1";return Selector.xpath.pseudos['nth-of-type'](m);},'last-of-type':function(m){m[6]="1";return Selector.xpath.pseudos['nth-last-of-type'](m);},'only-of-type':function(m){var p=Selector.xpath.pseudos;return p['first-of-type'](m)+p['last-of-type'](m);},nth:function(fragment,m){var mm,formula=m[6],predicate;if(formula=='even')formula='2n+0';if(formula=='odd')formula='2n+1';if(mm=formula.match(/^(\d+)$/))
180
+ return'['+fragment+"= "+mm[1]+']';if(mm=formula.match(/^(-?\d*)?n(([+-])(\d+))?/)){if(mm[1]=="-")mm[1]=-1;var a=mm[1]?Number(mm[1]):1;var b=mm[2]?Number(mm[2]):0;predicate="[((#{fragment} - #{b}) mod #{a} = 0) and "+"((#{fragment} - #{b}) div #{a} >= 0)]";return new Template(predicate).evaluate({fragment:fragment,a:a,b:b});}}}},criteria:{tagName:'n = h.tagName(n, r, "#{1}", c); c = false;',className:'n = h.className(n, r, "#{1}", c); c = false;',id:'n = h.id(n, r, "#{1}", c); c = false;',attrPresence:'n = h.attrPresence(n, r, "#{1}", c); c = false;',attr:function(m){m[3]=(m[5]||m[6]);return new Template('n = h.attr(n, r, "#{1}", "#{3}", "#{2}", c); c = false;').evaluate(m);},pseudo:function(m){if(m[6])m[6]=m[6].replace(/"/g,'\\"');return new Template('n = h.pseudo(n, "#{1}", "#{6}", r, c); c = false;').evaluate(m);},descendant:'c = "descendant";',child:'c = "child";',adjacent:'c = "adjacent";',laterSibling:'c = "laterSibling";'},patterns:{laterSibling:/^\s*~\s*/,child:/^\s*>\s*/,adjacent:/^\s*\+\s*/,descendant:/^\s/,tagName:/^\s*(\*|[\w\-]+)(\b|$)?/,id:/^#([\w\-\*]+)(\b|$)/,className:/^\.([\w\-\*]+)(\b|$)/,pseudo:/^:((first|last|nth|nth-last|only)(-child|-of-type)|empty|checked|(en|dis)abled|not)(\((.*?)\))?(\b|$|(?=\s|[:+~>]))/,attrPresence:/^\[((?:[\w]+:)?[\w]+)\]/,attr:/\[((?:[\w-]*:)?[\w-]+)\s*(?:([!^$*~|]?=)\s*((['"])([^\4]*?)\4|([^'"][^\]]*?)))?\]/},assertions:{tagName:function(element,matches){return matches[1].toUpperCase()==element.tagName.toUpperCase();},className:function(element,matches){return Element.hasClassName(element,matches[1]);},id:function(element,matches){return element.id===matches[1];},attrPresence:function(element,matches){return Element.hasAttribute(element,matches[1]);},attr:function(element,matches){var nodeValue=Element.readAttribute(element,matches[1]);return nodeValue&&Selector.operators[matches[2]](nodeValue,matches[5]||matches[6]);}},handlers:{concat:function(a,b){for(var i=0,node;node=b[i];i++)
181
+ a.push(node);return a;},mark:function(nodes){var _true=Prototype.emptyFunction;for(var i=0,node;node=nodes[i];i++)
182
+ node._countedByPrototype=_true;return nodes;},unmark:function(nodes){for(var i=0,node;node=nodes[i];i++)
183
+ node._countedByPrototype=undefined;return nodes;},index:function(parentNode,reverse,ofType){parentNode._countedByPrototype=Prototype.emptyFunction;if(reverse){for(var nodes=parentNode.childNodes,i=nodes.length-1,j=1;i>=0;i--){var node=nodes[i];if(node.nodeType==1&&(!ofType||node._countedByPrototype))node.nodeIndex=j++;}}else{for(var i=0,j=1,nodes=parentNode.childNodes;node=nodes[i];i++)
184
+ if(node.nodeType==1&&(!ofType||node._countedByPrototype))node.nodeIndex=j++;}},unique:function(nodes){if(nodes.length==0)return nodes;var results=[],n;for(var i=0,l=nodes.length;i<l;i++)
185
+ if(!(n=nodes[i])._countedByPrototype){n._countedByPrototype=Prototype.emptyFunction;results.push(Element.extend(n));}
186
+ return Selector.handlers.unmark(results);},descendant:function(nodes){var h=Selector.handlers;for(var i=0,results=[],node;node=nodes[i];i++)
187
+ h.concat(results,node.getElementsByTagName('*'));return results;},child:function(nodes){var h=Selector.handlers;for(var i=0,results=[],node;node=nodes[i];i++){for(var j=0,child;child=node.childNodes[j];j++)
188
+ if(child.nodeType==1&&child.tagName!='!')results.push(child);}
189
+ return results;},adjacent:function(nodes){for(var i=0,results=[],node;node=nodes[i];i++){var next=this.nextElementSibling(node);if(next)results.push(next);}
190
+ return results;},laterSibling:function(nodes){var h=Selector.handlers;for(var i=0,results=[],node;node=nodes[i];i++)
191
+ h.concat(results,Element.nextSiblings(node));return results;},nextElementSibling:function(node){while(node=node.nextSibling)
192
+ if(node.nodeType==1)return node;return null;},previousElementSibling:function(node){while(node=node.previousSibling)
193
+ if(node.nodeType==1)return node;return null;},tagName:function(nodes,root,tagName,combinator){var uTagName=tagName.toUpperCase();var results=[],h=Selector.handlers;if(nodes){if(combinator){if(combinator=="descendant"){for(var i=0,node;node=nodes[i];i++)
194
+ h.concat(results,node.getElementsByTagName(tagName));return results;}else nodes=this[combinator](nodes);if(tagName=="*")return nodes;}
195
+ for(var i=0,node;node=nodes[i];i++)
196
+ if(node.tagName.toUpperCase()===uTagName)results.push(node);return results;}else return root.getElementsByTagName(tagName);},id:function(nodes,root,id,combinator){var targetNode=$(id),h=Selector.handlers;if(!targetNode)return[];if(!nodes&&root==document)return[targetNode];if(nodes){if(combinator){if(combinator=='child'){for(var i=0,node;node=nodes[i];i++)
197
+ if(targetNode.parentNode==node)return[targetNode];}else if(combinator=='descendant'){for(var i=0,node;node=nodes[i];i++)
198
+ if(Element.descendantOf(targetNode,node))return[targetNode];}else if(combinator=='adjacent'){for(var i=0,node;node=nodes[i];i++)
199
+ if(Selector.handlers.previousElementSibling(targetNode)==node)
200
+ return[targetNode];}else nodes=h[combinator](nodes);}
201
+ for(var i=0,node;node=nodes[i];i++)
202
+ if(node==targetNode)return[targetNode];return[];}
203
+ return(targetNode&&Element.descendantOf(targetNode,root))?[targetNode]:[];},className:function(nodes,root,className,combinator){if(nodes&&combinator)nodes=this[combinator](nodes);return Selector.handlers.byClassName(nodes,root,className);},byClassName:function(nodes,root,className){if(!nodes)nodes=Selector.handlers.descendant([root]);var needle=' '+className+' ';for(var i=0,results=[],node,nodeClassName;node=nodes[i];i++){nodeClassName=node.className;if(nodeClassName.length==0)continue;if(nodeClassName==className||(' '+nodeClassName+' ').include(needle))
204
+ results.push(node);}
205
+ return results;},attrPresence:function(nodes,root,attr,combinator){if(!nodes)nodes=root.getElementsByTagName("*");if(nodes&&combinator)nodes=this[combinator](nodes);var results=[];for(var i=0,node;node=nodes[i];i++)
206
+ if(Element.hasAttribute(node,attr))results.push(node);return results;},attr:function(nodes,root,attr,value,operator,combinator){if(!nodes)nodes=root.getElementsByTagName("*");if(nodes&&combinator)nodes=this[combinator](nodes);var handler=Selector.operators[operator],results=[];for(var i=0,node;node=nodes[i];i++){var nodeValue=Element.readAttribute(node,attr);if(nodeValue===null)continue;if(handler(nodeValue,value))results.push(node);}
207
+ return results;},pseudo:function(nodes,name,value,root,combinator){if(nodes&&combinator)nodes=this[combinator](nodes);if(!nodes)nodes=root.getElementsByTagName("*");return Selector.pseudos[name](nodes,value,root);}},pseudos:{'first-child':function(nodes,value,root){for(var i=0,results=[],node;node=nodes[i];i++){if(Selector.handlers.previousElementSibling(node))continue;results.push(node);}
208
+ return results;},'last-child':function(nodes,value,root){for(var i=0,results=[],node;node=nodes[i];i++){if(Selector.handlers.nextElementSibling(node))continue;results.push(node);}
209
+ return results;},'only-child':function(nodes,value,root){var h=Selector.handlers;for(var i=0,results=[],node;node=nodes[i];i++)
210
+ if(!h.previousElementSibling(node)&&!h.nextElementSibling(node))
211
+ results.push(node);return results;},'nth-child':function(nodes,formula,root){return Selector.pseudos.nth(nodes,formula,root);},'nth-last-child':function(nodes,formula,root){return Selector.pseudos.nth(nodes,formula,root,true);},'nth-of-type':function(nodes,formula,root){return Selector.pseudos.nth(nodes,formula,root,false,true);},'nth-last-of-type':function(nodes,formula,root){return Selector.pseudos.nth(nodes,formula,root,true,true);},'first-of-type':function(nodes,formula,root){return Selector.pseudos.nth(nodes,"1",root,false,true);},'last-of-type':function(nodes,formula,root){return Selector.pseudos.nth(nodes,"1",root,true,true);},'only-of-type':function(nodes,formula,root){var p=Selector.pseudos;return p['last-of-type'](p['first-of-type'](nodes,formula,root),formula,root);},getIndices:function(a,b,total){if(a==0)return b>0?[b]:[];return $R(1,total).inject([],function(memo,i){if(0==(i-b)%a&&(i-b)/a>=0)memo.push(i);return memo;});},nth:function(nodes,formula,root,reverse,ofType){if(nodes.length==0)return[];if(formula=='even')formula='2n+0';if(formula=='odd')formula='2n+1';var h=Selector.handlers,results=[],indexed=[],m;h.mark(nodes);for(var i=0,node;node=nodes[i];i++){if(!node.parentNode._countedByPrototype){h.index(node.parentNode,reverse,ofType);indexed.push(node.parentNode);}}
212
+ if(formula.match(/^\d+$/)){formula=Number(formula);for(var i=0,node;node=nodes[i];i++)
213
+ if(node.nodeIndex==formula)results.push(node);}else if(m=formula.match(/^(-?\d*)?n(([+-])(\d+))?/)){if(m[1]=="-")m[1]=-1;var a=m[1]?Number(m[1]):1;var b=m[2]?Number(m[2]):0;var indices=Selector.pseudos.getIndices(a,b,nodes.length);for(var i=0,node,l=indices.length;node=nodes[i];i++){for(var j=0;j<l;j++)
214
+ if(node.nodeIndex==indices[j])results.push(node);}}
215
+ h.unmark(nodes);h.unmark(indexed);return results;},'empty':function(nodes,value,root){for(var i=0,results=[],node;node=nodes[i];i++){if(node.tagName=='!'||node.firstChild)continue;results.push(node);}
216
+ return results;},'not':function(nodes,selector,root){var h=Selector.handlers,selectorType,m;var exclusions=new Selector(selector).findElements(root);h.mark(exclusions);for(var i=0,results=[],node;node=nodes[i];i++)
217
+ if(!node._countedByPrototype)results.push(node);h.unmark(exclusions);return results;},'enabled':function(nodes,value,root){for(var i=0,results=[],node;node=nodes[i];i++)
218
+ if(!node.disabled&&(!node.type||node.type!=='hidden'))
219
+ results.push(node);return results;},'disabled':function(nodes,value,root){for(var i=0,results=[],node;node=nodes[i];i++)
220
+ if(node.disabled)results.push(node);return results;},'checked':function(nodes,value,root){for(var i=0,results=[],node;node=nodes[i];i++)
221
+ if(node.checked)results.push(node);return results;}},operators:{'=':function(nv,v){return nv==v;},'!=':function(nv,v){return nv!=v;},'^=':function(nv,v){return nv==v||nv&&nv.startsWith(v);},'$=':function(nv,v){return nv==v||nv&&nv.endsWith(v);},'*=':function(nv,v){return nv==v||nv&&nv.include(v);},'$=':function(nv,v){return nv.endsWith(v);},'*=':function(nv,v){return nv.include(v);},'~=':function(nv,v){return(' '+nv+' ').include(' '+v+' ');},'|=':function(nv,v){return('-'+(nv||"").toUpperCase()+'-').include('-'+(v||"").toUpperCase()+'-');}},split:function(expression){var expressions=[];expression.scan(/(([\w#:.~>+()\s-]+|\*|\[.*?\])+)\s*(,|$)/,function(m){expressions.push(m[1].strip());});return expressions;},matchElements:function(elements,expression){var matches=$$(expression),h=Selector.handlers;h.mark(matches);for(var i=0,results=[],element;element=elements[i];i++)
222
+ if(element._countedByPrototype)results.push(element);h.unmark(matches);return results;},findElement:function(elements,expression,index){if(Object.isNumber(expression)){index=expression;expression=false;}
223
+ return Selector.matchElements(elements,expression||'*')[index||0];},findChildElements:function(element,expressions){expressions=Selector.split(expressions.join(','));var results=[],h=Selector.handlers;for(var i=0,l=expressions.length,selector;i<l;i++){selector=new Selector(expressions[i].strip());h.concat(results,selector.findElements(element));}
224
+ return(l>1)?h.unique(results):results;}});if(Prototype.Browser.IE){Object.extend(Selector.handlers,{concat:function(a,b){for(var i=0,node;node=b[i];i++)
225
+ if(node.tagName!=="!")a.push(node);return a;},unmark:function(nodes){for(var i=0,node;node=nodes[i];i++)
226
+ node.removeAttribute('_countedByPrototype');return nodes;}});}
227
+ function $$(){return Selector.findChildElements(document,$A(arguments));}
228
+ var Form={reset:function(form){$(form).reset();return form;},serializeElements:function(elements,options){if(typeof options!='object')options={hash:!!options};else if(Object.isUndefined(options.hash))options.hash=true;var key,value,submitted=false,submit=options.submit;var data=elements.inject({},function(result,element){if(!element.disabled&&element.name){key=element.name;value=$(element).getValue();if(value!=null&&element.type!='file'&&(element.type!='submit'||(!submitted&&submit!==false&&(!submit||key==submit)&&(submitted=true)))){if(key in result){if(!Object.isArray(result[key]))result[key]=[result[key]];result[key].push(value);}
229
+ else result[key]=value;}}
230
+ return result;});return options.hash?data:Object.toQueryString(data);}};Form.Methods={serialize:function(form,options){return Form.serializeElements(Form.getElements(form),options);},getElements:function(form){return $A($(form).getElementsByTagName('*')).inject([],function(elements,child){if(Form.Element.Serializers[child.tagName.toLowerCase()])
231
+ elements.push(Element.extend(child));return elements;});},getInputs:function(form,typeName,name){form=$(form);var inputs=form.getElementsByTagName('input');if(!typeName&&!name)return $A(inputs).map(Element.extend);for(var i=0,matchingInputs=[],length=inputs.length;i<length;i++){var input=inputs[i];if((typeName&&input.type!=typeName)||(name&&input.name!=name))
232
+ continue;matchingInputs.push(Element.extend(input));}
233
+ return matchingInputs;},disable:function(form){form=$(form);Form.getElements(form).invoke('disable');return form;},enable:function(form){form=$(form);Form.getElements(form).invoke('enable');return form;},findFirstElement:function(form){var elements=$(form).getElements().findAll(function(element){return'hidden'!=element.type&&!element.disabled;});var firstByIndex=elements.findAll(function(element){return element.hasAttribute('tabIndex')&&element.tabIndex>=0;}).sortBy(function(element){return element.tabIndex}).first();return firstByIndex?firstByIndex:elements.find(function(element){return['input','select','textarea'].include(element.tagName.toLowerCase());});},focusFirstElement:function(form){form=$(form);form.findFirstElement().activate();return form;},request:function(form,options){form=$(form),options=Object.clone(options||{});var params=options.parameters,action=form.readAttribute('action')||'';if(action.blank())action=window.location.href;options.parameters=form.serialize(true);if(params){if(Object.isString(params))params=params.toQueryParams();Object.extend(options.parameters,params);}
234
+ if(form.hasAttribute('method')&&!options.method)
235
+ options.method=form.method;return new Ajax.Request(action,options);}};Form.Element={focus:function(element){$(element).focus();return element;},select:function(element){$(element).select();return element;}};Form.Element.Methods={serialize:function(element){element=$(element);if(!element.disabled&&element.name){var value=element.getValue();if(value!=undefined){var pair={};pair[element.name]=value;return Object.toQueryString(pair);}}
236
+ return'';},getValue:function(element){element=$(element);var method=element.tagName.toLowerCase();return Form.Element.Serializers[method](element);},setValue:function(element,value){element=$(element);var method=element.tagName.toLowerCase();Form.Element.Serializers[method](element,value);return element;},clear:function(element){$(element).value='';return element;},present:function(element){return $(element).value!='';},activate:function(element){element=$(element);try{element.focus();if(element.select&&(element.tagName.toLowerCase()!='input'||!['button','reset','submit'].include(element.type)))
237
+ element.select();}catch(e){}
238
+ return element;},disable:function(element){element=$(element);element.disabled=true;return element;},enable:function(element){element=$(element);element.disabled=false;return element;}};var Field=Form.Element;var $F=Form.Element.Methods.getValue;Form.Element.Serializers={input:function(element,value){switch(element.type.toLowerCase()){case'checkbox':case'radio':return Form.Element.Serializers.inputSelector(element,value);default:return Form.Element.Serializers.textarea(element,value);}},inputSelector:function(element,value){if(Object.isUndefined(value))return element.checked?element.value:null;else element.checked=!!value;},textarea:function(element,value){if(Object.isUndefined(value))return element.value;else element.value=value;},select:function(element,value){if(Object.isUndefined(value))
239
+ return this[element.type=='select-one'?'selectOne':'selectMany'](element);else{var opt,currentValue,single=!Object.isArray(value);for(var i=0,length=element.length;i<length;i++){opt=element.options[i];currentValue=this.optionValue(opt);if(single){if(currentValue==value){opt.selected=true;return;}}
240
+ else opt.selected=value.include(currentValue);}}},selectOne:function(element){var index=element.selectedIndex;return index>=0?this.optionValue(element.options[index]):null;},selectMany:function(element){var values,length=element.length;if(!length)return null;for(var i=0,values=[];i<length;i++){var opt=element.options[i];if(opt.selected)values.push(this.optionValue(opt));}
241
+ return values;},optionValue:function(opt){return Element.extend(opt).hasAttribute('value')?opt.value:opt.text;}};Abstract.TimedObserver=Class.create(PeriodicalExecuter,{initialize:function($super,element,frequency,callback){$super(callback,frequency);this.element=$(element);this.lastValue=this.getValue();},execute:function(){var value=this.getValue();if(Object.isString(this.lastValue)&&Object.isString(value)?this.lastValue!=value:String(this.lastValue)!=String(value)){this.callback(this.element,value);this.lastValue=value;}}});Form.Element.Observer=Class.create(Abstract.TimedObserver,{getValue:function(){return Form.Element.getValue(this.element);}});Form.Observer=Class.create(Abstract.TimedObserver,{getValue:function(){return Form.serialize(this.element);}});Abstract.EventObserver=Class.create({initialize:function(element,callback){this.element=$(element);this.callback=callback;this.lastValue=this.getValue();if(this.element.tagName.toLowerCase()=='form')
242
+ this.registerFormCallbacks();else
243
+ this.registerCallback(this.element);},onElementEvent:function(){var value=this.getValue();if(this.lastValue!=value){this.callback(this.element,value);this.lastValue=value;}},registerFormCallbacks:function(){Form.getElements(this.element).each(this.registerCallback,this);},registerCallback:function(element){if(element.type){switch(element.type.toLowerCase()){case'checkbox':case'radio':Event.observe(element,'click',this.onElementEvent.bind(this));break;default:Event.observe(element,'change',this.onElementEvent.bind(this));break;}}}});Form.Element.EventObserver=Class.create(Abstract.EventObserver,{getValue:function(){return Form.Element.getValue(this.element);}});Form.EventObserver=Class.create(Abstract.EventObserver,{getValue:function(){return Form.serialize(this.element);}});if(!window.Event)var Event={};Object.extend(Event,{KEY_BACKSPACE:8,KEY_TAB:9,KEY_RETURN:13,KEY_ESC:27,KEY_LEFT:37,KEY_UP:38,KEY_RIGHT:39,KEY_DOWN:40,KEY_DELETE:46,KEY_HOME:36,KEY_END:35,KEY_PAGEUP:33,KEY_PAGEDOWN:34,KEY_INSERT:45,cache:{},relatedTarget:function(event){var element;switch(event.type){case'mouseover':element=event.fromElement;break;case'mouseout':element=event.toElement;break;default:return null;}
244
+ return Element.extend(element);}});Event.Methods=(function(){var isButton;if(Prototype.Browser.IE){var buttonMap={0:1,1:4,2:2};isButton=function(event,code){return event.button==buttonMap[code];};}else if(Prototype.Browser.WebKit){isButton=function(event,code){switch(code){case 0:return event.which==1&&!event.metaKey;case 1:return event.which==1&&event.metaKey;default:return false;}};}else{isButton=function(event,code){return event.which?(event.which===code+1):(event.button===code);};}
245
+ return{isLeftClick:function(event){return isButton(event,0)},isMiddleClick:function(event){return isButton(event,1)},isRightClick:function(event){return isButton(event,2)},element:function(event){event=Event.extend(event);var node=event.target,type=event.type,currentTarget=event.currentTarget;if(currentTarget&&currentTarget.tagName){if(type==='load'||type==='error'||(type==='click'&&currentTarget.tagName.toLowerCase()==='input'&&currentTarget.type==='radio'))
246
+ node=currentTarget;}
247
+ if(node){if(node.nodeType==Node.TEXT_NODE)node=node.parentNode;return Element.extend(node);}else return false;},findElement:function(event,expression){var element=Event.element(event);if(!expression)return element;var elements=[element].concat(element.ancestors());return Selector.findElement(elements,expression,0);},pointer:function(event){var docElement=document.documentElement,body=document.body||{scrollLeft:0,scrollTop:0};return{x:event.pageX||(event.clientX+
248
+ (docElement.scrollLeft||body.scrollLeft)-
249
+ (docElement.clientLeft||0)),y:event.pageY||(event.clientY+
250
+ (docElement.scrollTop||body.scrollTop)-
251
+ (docElement.clientTop||0))};},pointerX:function(event){return Event.pointer(event).x},pointerY:function(event){return Event.pointer(event).y},stop:function(event){Event.extend(event);event.preventDefault();event.stopPropagation();event.stopped=true;}};})();Event.extend=(function(){var methods=Object.keys(Event.Methods).inject({},function(m,name){m[name]=Event.Methods[name].methodize();return m;});if(Prototype.Browser.IE){Object.extend(methods,{stopPropagation:function(){this.cancelBubble=true},preventDefault:function(){this.returnValue=false},inspect:function(){return"[object Event]"}});return function(event){if(!event)return false;if(event._extendedByPrototype)return event;event._extendedByPrototype=Prototype.emptyFunction;var pointer=Event.pointer(event);Object.extend(event,{target:event.srcElement,relatedTarget:Event.relatedTarget(event),pageX:pointer.x,pageY:pointer.y});return Object.extend(event,methods);};}else{Event.prototype=Event.prototype||document.createEvent("HTMLEvents")['__proto__'];Object.extend(Event.prototype,methods);return Prototype.K;}})();Object.extend(Event,(function(){var cache=Event.cache;function getEventID(element){try{if(element._prototypeEventID)return element._prototypeEventID[0];arguments.callee.id=arguments.callee.id||1;return element._prototypeEventID=[++arguments.callee.id];}catch(error){return false;}}
252
+ function getDOMEventName(eventName){if(eventName&&eventName.include(':'))return"dataavailable";return eventName;}
253
+ function getCacheForID(id){return cache[id]=cache[id]||{};}
254
+ function getWrappersForEventName(id,eventName){var c=getCacheForID(id);return c[eventName]=c[eventName]||[];}
255
+ function createWrapper(element,eventName,handler){var id=getEventID(element);var c=getWrappersForEventName(id,eventName);if(c.pluck("handler").include(handler))return false;var wrapper=function(event){if(!Event||!Event.extend||(event.eventName&&event.eventName!=eventName))
256
+ return false;Event.extend(event);handler.call(element,event);};wrapper.handler=handler;c.push(wrapper);return wrapper;}
257
+ function findWrapper(id,eventName,handler){var c=getWrappersForEventName(id,eventName);return c.find(function(wrapper){return wrapper.handler==handler});}
258
+ function destroyWrapper(id,eventName,handler){var c=getCacheForID(id);if(!c[eventName])return false;c[eventName]=c[eventName].without(findWrapper(id,eventName,handler));}
259
+ function destroyCache(){for(var id in cache)
260
+ for(var eventName in cache[id])
261
+ cache[id][eventName]=null;}
262
+ if(window.attachEvent){window.attachEvent("onunload",destroyCache);}
263
+ if(Prototype.Browser.WebKit){window.addEventListener('unload',Prototype.emptyFunction,false);}
264
+ return{observe:function(element,eventName,handler){element=$(element);var name=getDOMEventName(eventName);var wrapper=createWrapper(element,eventName,handler);if(!wrapper)return element;if(element.addEventListener){element.addEventListener(name,wrapper,false);}else{element.attachEvent("on"+name,wrapper);}
265
+ return element;},stopObserving:function(element,eventName,handler){element=$(element);var id=getEventID(element),name=getDOMEventName(eventName);if(!handler&&eventName){getWrappersForEventName(id,eventName).each(function(wrapper){element.stopObserving(eventName,wrapper.handler);});return element;}else if(!eventName){Object.keys(getCacheForID(id)).each(function(eventName){element.stopObserving(eventName);});return element;}
266
+ var wrapper=findWrapper(id,eventName,handler);if(!wrapper)return element;if(element.removeEventListener){element.removeEventListener(name,wrapper,false);}else{element.detachEvent("on"+name,wrapper);}
267
+ destroyWrapper(id,eventName,handler);return element;},fire:function(element,eventName,memo){element=$(element);if(element==document&&document.createEvent&&!element.dispatchEvent)
268
+ element=document.documentElement;var event;if(document.createEvent){event=document.createEvent("HTMLEvents");event.initEvent("dataavailable",true,true);}else{event=document.createEventObject();event.eventType="ondataavailable";}
269
+ event.eventName=eventName;event.memo=memo||{};if(document.createEvent){element.dispatchEvent(event);}else{element.fireEvent(event.eventType,event);}
270
+ return Event.extend(event);}};})());Object.extend(Event,Event.Methods);Element.addMethods({fire:Event.fire,observe:Event.observe,stopObserving:Event.stopObserving});Object.extend(document,{fire:Element.Methods.fire.methodize(),observe:Element.Methods.observe.methodize(),stopObserving:Element.Methods.stopObserving.methodize(),loaded:false});(function(){var timer;function fireContentLoadedEvent(){if(document.loaded)return;if(timer)window.clearInterval(timer);document.fire("dom:loaded");document.loaded=true;}
271
+ if(document.addEventListener){if(Prototype.Browser.WebKit){timer=window.setInterval(function(){if(/loaded|complete/.test(document.readyState))
272
+ fireContentLoadedEvent();},0);Event.observe(window,"load",fireContentLoadedEvent);}else{document.addEventListener("DOMContentLoaded",fireContentLoadedEvent,false);}}else{document.write("<script id=__onDOMContentLoaded defer src=//:><\/script>");$("__onDOMContentLoaded").onreadystatechange=function(){if(this.readyState=="complete"){this.onreadystatechange=null;fireContentLoadedEvent();}};}})();Hash.toQueryString=Object.toQueryString;var Toggle={display:Element.toggle};Element.Methods.childOf=Element.Methods.descendantOf;var Insertion={Before:function(element,content){return Element.insert(element,{before:content});},Top:function(element,content){return Element.insert(element,{top:content});},Bottom:function(element,content){return Element.insert(element,{bottom:content});},After:function(element,content){return Element.insert(element,{after:content});}};var $continue=new Error('"throw $continue" is deprecated, use "return" instead');var Position={includeScrollOffsets:false,prepare:function(){this.deltaX=window.pageXOffset||document.documentElement.scrollLeft||document.body.scrollLeft||0;this.deltaY=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0;},within:function(element,x,y){if(this.includeScrollOffsets)
273
+ return this.withinIncludingScrolloffsets(element,x,y);this.xcomp=x;this.ycomp=y;this.offset=Element.cumulativeOffset(element);return(y>=this.offset[1]&&y<this.offset[1]+element.offsetHeight&&x>=this.offset[0]&&x<this.offset[0]+element.offsetWidth);},withinIncludingScrolloffsets:function(element,x,y){var offsetcache=Element.cumulativeScrollOffset(element);this.xcomp=x+offsetcache[0]-this.deltaX;this.ycomp=y+offsetcache[1]-this.deltaY;this.offset=Element.cumulativeOffset(element);return(this.ycomp>=this.offset[1]&&this.ycomp<this.offset[1]+element.offsetHeight&&this.xcomp>=this.offset[0]&&this.xcomp<this.offset[0]+element.offsetWidth);},overlap:function(mode,element){if(!mode)return 0;if(mode=='vertical')
274
+ return((this.offset[1]+element.offsetHeight)-this.ycomp)/element.offsetHeight;if(mode=='horizontal')
275
+ return((this.offset[0]+element.offsetWidth)-this.xcomp)/element.offsetWidth;},cumulativeOffset:Element.Methods.cumulativeOffset,positionedOffset:Element.Methods.positionedOffset,absolutize:function(element){Position.prepare();return Element.absolutize(element);},relativize:function(element){Position.prepare();return Element.relativize(element);},realOffset:Element.Methods.cumulativeScrollOffset,offsetParent:Element.Methods.getOffsetParent,page:Element.Methods.viewportOffset,clone:function(source,target,options){options=options||{};return Element.clonePosition(target,source,options);}};if(!document.getElementsByClassName)document.getElementsByClassName=function(instanceMethods){function iter(name){return name.blank()?null:"[contains(concat(' ', @class, ' '), ' "+name+" ')]";}
276
+ instanceMethods.getElementsByClassName=Prototype.BrowserFeatures.XPath?function(element,className){className=className.toString().strip();var cond=/\s/.test(className)?$w(className).map(iter).join(''):iter(className);return cond?document._getElementsByXPath('.//*'+cond,element):[];}:function(element,className){className=className.toString().strip();var elements=[],classNames=(/\s/.test(className)?$w(className):null);if(!classNames&&!className)return elements;var nodes=$(element).getElementsByTagName('*');className=' '+className+' ';for(var i=0,child,cn;child=nodes[i];i++){if(child.className&&(cn=' '+child.className+' ')&&(cn.include(className)||(classNames&&classNames.all(function(name){return!name.toString().blank()&&cn.include(' '+name+' ');}))))
277
+ elements.push(Element.extend(child));}
278
+ return elements;};return function(className,parentElement){return $(parentElement||document.body).getElementsByClassName(className);};}(Element.Methods);Element.ClassNames=Class.create();Element.ClassNames.prototype={initialize:function(element){this.element=$(element);},_each:function(iterator){this.element.className.split(/\s+/).select(function(name){return name.length>0;})._each(iterator);},set:function(className){this.element.className=className;},add:function(classNameToAdd){if(this.include(classNameToAdd))return;this.set($A(this).concat(classNameToAdd).join(' '));},remove:function(classNameToRemove){if(!this.include(classNameToRemove))return;this.set($A(this).without(classNameToRemove).join(' '));},toString:function(){return $A(this).join(' ');}};Object.extend(Element.ClassNames.prototype,Enumerable);Element.addMethods();;var Window=Class.create();Window.keepMultiModalWindow=false;Window.hasEffectLib=(typeof Effect!='undefined');Window.resizeEffectDuration=0.4;Window.prototype={initialize:function(){var id;var optionIndex=0;if(arguments.length>0){if(typeof arguments[0]=="string"){id=arguments[0];optionIndex=1;}
279
+ else
280
+ id=arguments[0]?arguments[0].id:null;}
281
+ if(!id)
282
+ id="window_"+new Date().getTime();if($(id))
283
+ alert("Window "+id+" is already registered in the DOM! Make sure you use setDestroyOnClose() or destroyOnClose: true in the constructor");this.options=Object.extend({className:"dialog",blurClassName:null,minWidth:100,minHeight:20,resizable:true,closable:true,minimizable:true,maximizable:true,draggable:true,userData:null,showEffect:(Window.hasEffectLib?Effect.Appear:Element.show),hideEffect:(Window.hasEffectLib?Effect.Fade:Element.hide),showEffectOptions:{},hideEffectOptions:{},effectOptions:null,parent:document.body,title:"&nbsp;",url:null,onload:Prototype.emptyFunction,width:200,height:300,opacity:1,recenterAuto:true,wiredDrag:false,closeOnEsc:true,closeCallback:null,destroyOnClose:false,gridX:1,gridY:1},arguments[optionIndex]||{});if(this.options.blurClassName)
284
+ this.options.focusClassName=this.options.className;if(typeof this.options.top=="undefined"&&typeof this.options.bottom=="undefined")
285
+ this.options.top=this._round(Math.random()*500,this.options.gridY);if(typeof this.options.left=="undefined"&&typeof this.options.right=="undefined")
286
+ this.options.left=this._round(Math.random()*500,this.options.gridX);if(this.options.effectOptions){Object.extend(this.options.hideEffectOptions,this.options.effectOptions);Object.extend(this.options.showEffectOptions,this.options.effectOptions);if(this.options.showEffect==Element.Appear)
287
+ this.options.showEffectOptions.to=this.options.opacity;}
288
+ if(Window.hasEffectLib){if(this.options.showEffect==Effect.Appear)
289
+ this.options.showEffectOptions.to=this.options.opacity;if(this.options.hideEffect==Effect.Fade)
290
+ this.options.hideEffectOptions.from=this.options.opacity;}
291
+ if(this.options.hideEffect==Element.hide)
292
+ this.options.hideEffect=function(){Element.hide(this.element);if(this.options.destroyOnClose)this.destroy();}.bind(this)
293
+ if(this.options.parent!=document.body)
294
+ this.options.parent=$(this.options.parent);this.element=this._createWindow(id);this.element.win=this;this.eventMouseDown=this._initDrag.bindAsEventListener(this);this.eventMouseUp=this._endDrag.bindAsEventListener(this);this.eventMouseMove=this._updateDrag.bindAsEventListener(this);this.eventOnLoad=this._getWindowBorderSize.bindAsEventListener(this);this.eventMouseDownContent=this.toFront.bindAsEventListener(this);this.eventResize=this._recenter.bindAsEventListener(this);this.eventKeyUp=this._keyUp.bindAsEventListener(this);this.topbar=$(this.element.id+"_top");this.bottombar=$(this.element.id+"_bottom");this.content=$(this.element.id+"_content");Event.observe(this.topbar,"mousedown",this.eventMouseDown);Event.observe(this.bottombar,"mousedown",this.eventMouseDown);Event.observe(this.content,"mousedown",this.eventMouseDownContent);Event.observe(window,"load",this.eventOnLoad);Event.observe(window,"resize",this.eventResize);Event.observe(window,"scroll",this.eventResize);Event.observe(document,"keyup",this.eventKeyUp);Event.observe(this.options.parent,"scroll",this.eventResize);if(this.options.draggable){var that=this;[this.topbar,this.topbar.up().previous(),this.topbar.up().next()].each(function(element){element.observe("mousedown",that.eventMouseDown);element.addClassName("top_draggable");});[this.bottombar.up(),this.bottombar.up().previous(),this.bottombar.up().next()].each(function(element){element.observe("mousedown",that.eventMouseDown);element.addClassName("bottom_draggable");});}
295
+ if(this.options.resizable){this.sizer=$(this.element.id+"_sizer");Event.observe(this.sizer,"mousedown",this.eventMouseDown);}
296
+ this.useLeft=null;this.useTop=null;if(typeof this.options.left!="undefined"){this.element.setStyle({left:parseFloat(this.options.left)+'px'});this.useLeft=true;}
297
+ else{this.element.setStyle({right:parseFloat(this.options.right)+'px'});this.useLeft=false;}
298
+ if(typeof this.options.top!="undefined"){this.element.setStyle({top:parseFloat(this.options.top)+'px'});this.useTop=true;}
299
+ else{this.element.setStyle({bottom:parseFloat(this.options.bottom)+'px'});this.useTop=false;}
300
+ this.storedLocation=null;this.setOpacity(this.options.opacity);if(this.options.zIndex)
301
+ this.setZIndex(this.options.zIndex)
302
+ if(this.options.destroyOnClose)
303
+ this.setDestroyOnClose(true);this._getWindowBorderSize();this.width=this.options.width;this.height=this.options.height;this.visible=false;this.constraint=false;this.constraintPad={top:0,left:0,bottom:0,right:0};if(this.width&&this.height)
304
+ this.setSize(this.options.width,this.options.height);this.setTitle(this.options.title)
305
+ Windows.register(this);},destroy:function(){this._notify("onDestroy");Event.stopObserving(this.topbar,"mousedown",this.eventMouseDown);Event.stopObserving(this.bottombar,"mousedown",this.eventMouseDown);Event.stopObserving(this.content,"mousedown",this.eventMouseDownContent);Event.stopObserving(window,"load",this.eventOnLoad);Event.stopObserving(window,"resize",this.eventResize);Event.stopObserving(window,"scroll",this.eventResize);Event.stopObserving(this.content,"load",this.options.onload);Event.stopObserving(document,"keyup",this.eventKeyUp);if(this._oldParent){var content=this.getContent();var originalContent=null;for(var i=0;i<content.childNodes.length;i++){originalContent=content.childNodes[i];if(originalContent.nodeType==1)
306
+ break;originalContent=null;}
307
+ if(originalContent)
308
+ this._oldParent.appendChild(originalContent);this._oldParent=null;}
309
+ if(this.sizer)
310
+ Event.stopObserving(this.sizer,"mousedown",this.eventMouseDown);if(this.options.url)
311
+ this.content.src=null
312
+ if(this.iefix)
313
+ Element.remove(this.iefix);Element.remove(this.element);Windows.unregister(this);},setCloseCallback:function(callback){this.options.closeCallback=callback;},getContent:function(){return this.content;},setContent:function(id,autoresize,autoposition){var element=$(id);if(null==element)throw"Unable to find element '"+id+"' in DOM";this._oldParent=element.parentNode;var d=null;var p=null;if(autoresize)
314
+ d=Element.getDimensions(element);if(autoposition)
315
+ p=Position.cumulativeOffset(element);var content=this.getContent();this.setHTMLContent("");content=this.getContent();content.appendChild(element);element.show();if(autoresize)
316
+ this.setSize(d.width,d.height);if(autoposition)
317
+ this.setLocation(p[1]-this.heightN,p[0]-this.widthW);},setHTMLContent:function(html){if(this.options.url){this.content.src=null;this.options.url=null;var content="<div id=\""+this.getId()+"_content\" class=\""+this.options.className+"_content\"> </div>";$(this.getId()+"_table_content").innerHTML=content;this.content=$(this.element.id+"_content");}
318
+ this.getContent().innerHTML=html;},setAjaxContent:function(url,options,showCentered,showModal){this.showFunction=showCentered?"showCenter":"show";this.showModal=showModal||false;options=options||{};this.setHTMLContent("");this.onComplete=options.onComplete;if(!this._onCompleteHandler)
319
+ this._onCompleteHandler=this._setAjaxContent.bind(this);options.onComplete=this._onCompleteHandler;new Ajax.Request(url,options);options.onComplete=this.onComplete;},_setAjaxContent:function(originalRequest){Element.update(this.getContent(),originalRequest.responseText);if(this.onComplete)
320
+ this.onComplete(originalRequest);this.onComplete=null;this[this.showFunction](this.showModal)},setURL:function(url){if(this.options.url)
321
+ this.content.src=null;this.options.url=url;var content="<iframe frameborder='0' name='"+this.getId()+"_content' id='"+this.getId()+"_content' src='"+url+"' width='"+this.width+"' height='"+this.height+"'> </iframe>";$(this.getId()+"_table_content").innerHTML=content;this.content=$(this.element.id+"_content");},getURL:function(){return this.options.url?this.options.url:null;},refresh:function(){if(this.options.url)
322
+ $(this.element.getAttribute('id')+'_content').src=this.options.url;},setCookie:function(name,expires,path,domain,secure){name=name||this.element.id;this.cookie=[name,expires,path,domain,secure];var value=WindowUtilities.getCookie(name)
323
+ if(value){var values=value.split(',');var x=values[0].split(':');var y=values[1].split(':');var w=parseFloat(values[2]),h=parseFloat(values[3]);var mini=values[4];var maxi=values[5];this.setSize(w,h);if(mini=="true")
324
+ this.doMinimize=true;else if(maxi=="true")
325
+ this.doMaximize=true;this.useLeft=x[0]=="l";this.useTop=y[0]=="t";this.element.setStyle(this.useLeft?{left:x[1]}:{right:x[1]});this.element.setStyle(this.useTop?{top:y[1]}:{bottom:y[1]});}},getId:function(){return this.element.id;},setDestroyOnClose:function(){this.options.destroyOnClose=true;},setConstraint:function(bool,padding){this.constraint=bool;this.constraintPad=Object.extend(this.constraintPad,padding||{});if(this.useTop&&this.useLeft)
326
+ this.setLocation(parseFloat(this.element.style.top),parseFloat(this.element.style.left));},_initDrag:function(event){if(Event.element(event)==this.sizer&&this.isMinimized())
327
+ return;if(Event.element(event)!=this.sizer&&this.isMaximized())
328
+ return;if(Prototype.Browser.IE&&this.heightN==0)
329
+ this._getWindowBorderSize();this.pointer=[this._round(Event.pointerX(event),this.options.gridX),this._round(Event.pointerY(event),this.options.gridY)];if(this.options.wiredDrag)
330
+ this.currentDrag=this._createWiredElement();else
331
+ this.currentDrag=this.element;if(Event.element(event)==this.sizer){this.doResize=true;this.widthOrg=this.width;this.heightOrg=this.height;this.bottomOrg=parseFloat(this.element.getStyle('bottom'));this.rightOrg=parseFloat(this.element.getStyle('right'));this._notify("onStartResize");}
332
+ else{this.doResize=false;var closeButton=$(this.getId()+'_close');if(closeButton&&Position.within(closeButton,this.pointer[0],this.pointer[1])){this.currentDrag=null;return;}
333
+ this.toFront();if(!this.options.draggable)
334
+ return;this._notify("onStartMove");}
335
+ Event.observe(document,"mouseup",this.eventMouseUp,false);Event.observe(document,"mousemove",this.eventMouseMove,false);WindowUtilities.disableScreen('__invisible__','__invisible__',this.overlayOpacity);document.body.ondrag=function(){return false;};document.body.onselectstart=function(){return false;};this.currentDrag.show();Event.stop(event);},_round:function(val,round){return round==1?val:val=Math.floor(val/round)*round;},_updateDrag:function(event){var pointer=[this._round(Event.pointerX(event),this.options.gridX),this._round(Event.pointerY(event),this.options.gridY)];var dx=pointer[0]-this.pointer[0];var dy=pointer[1]-this.pointer[1];if(this.doResize){var w=this.widthOrg+dx;var h=this.heightOrg+dy;dx=this.width-this.widthOrg
336
+ dy=this.height-this.heightOrg
337
+ if(this.useLeft)
338
+ w=this._updateWidthConstraint(w)
339
+ else
340
+ this.currentDrag.setStyle({right:(this.rightOrg-dx)+'px'});if(this.useTop)
341
+ h=this._updateHeightConstraint(h)
342
+ else
343
+ this.currentDrag.setStyle({bottom:(this.bottomOrg-dy)+'px'});this.setSize(w,h);this._notify("onResize");}
344
+ else{this.pointer=pointer;if(this.useLeft){var left=parseFloat(this.currentDrag.getStyle('left'))+dx;var newLeft=this._updateLeftConstraint(left);this.pointer[0]+=newLeft-left;this.currentDrag.setStyle({left:newLeft+'px'});}
345
+ else
346
+ this.currentDrag.setStyle({right:parseFloat(this.currentDrag.getStyle('right'))-dx+'px'});if(this.useTop){var top=parseFloat(this.currentDrag.getStyle('top'))+dy;var newTop=this._updateTopConstraint(top);this.pointer[1]+=newTop-top;this.currentDrag.setStyle({top:newTop+'px'});}
347
+ else
348
+ this.currentDrag.setStyle({bottom:parseFloat(this.currentDrag.getStyle('bottom'))-dy+'px'});this._notify("onMove");}
349
+ if(this.iefix)
350
+ this._fixIEOverlapping();this._removeStoreLocation();Event.stop(event);},_endDrag:function(event){WindowUtilities.enableScreen('__invisible__');if(this.doResize)
351
+ this._notify("onEndResize");else
352
+ this._notify("onEndMove");Event.stopObserving(document,"mouseup",this.eventMouseUp,false);Event.stopObserving(document,"mousemove",this.eventMouseMove,false);Event.stop(event);this._hideWiredElement();this._saveCookie()
353
+ document.body.ondrag=null;document.body.onselectstart=null;},_updateLeftConstraint:function(left){if(this.constraint&&this.useLeft&&this.useTop){var width=this.options.parent==document.body?WindowUtilities.getPageSize().windowWidth:this.options.parent.getDimensions().width;if(left<this.constraintPad.left)
354
+ left=this.constraintPad.left;if(left+this.width+this.widthE+this.widthW>width-this.constraintPad.right)
355
+ left=width-this.constraintPad.right-this.width-this.widthE-this.widthW;}
356
+ return left;},_updateTopConstraint:function(top){if(this.constraint&&this.useLeft&&this.useTop){var height=this.options.parent==document.body?WindowUtilities.getPageSize().windowHeight:this.options.parent.getDimensions().height;var h=this.height+this.heightN+this.heightS;if(top<this.constraintPad.top)
357
+ top=this.constraintPad.top;if(top+h>height-this.constraintPad.bottom)
358
+ top=height-this.constraintPad.bottom-h;}
359
+ return top;},_updateWidthConstraint:function(w){if(this.constraint&&this.useLeft&&this.useTop){var width=this.options.parent==document.body?WindowUtilities.getPageSize().windowWidth:this.options.parent.getDimensions().width;var left=parseFloat(this.element.getStyle("left"));if(left+w+this.widthE+this.widthW>width-this.constraintPad.right)
360
+ w=width-this.constraintPad.right-left-this.widthE-this.widthW;}
361
+ return w;},_updateHeightConstraint:function(h){if(this.constraint&&this.useLeft&&this.useTop){var height=this.options.parent==document.body?WindowUtilities.getPageSize().windowHeight:this.options.parent.getDimensions().height;var top=parseFloat(this.element.getStyle("top"));if(top+h+this.heightN+this.heightS>height-this.constraintPad.bottom)
362
+ h=height-this.constraintPad.bottom-top-this.heightN-this.heightS;}
363
+ return h;},_createWindow:function(id){var className=this.options.className;var win=document.createElement("div");win.setAttribute('id',id);win.className="dialog";var content;if(this.options.url)
364
+ content="<iframe frameborder=\"0\" name=\""+id+"_content\" id=\""+id+"_content\" src=\""+this.options.url+"\"> </iframe>";else
365
+ content="<div id=\""+id+"_content\" class=\""+className+"_content\"> </div>";var closeDiv=this.options.closable?"<div class='"+className+"_close' id='"+id+"_close' onclick='Windows.close(\""+id+"\", event)'> </div>":"";var minDiv=this.options.minimizable?"<div class='"+className+"_minimize' id='"+id+"_minimize' onclick='Windows.minimize(\""+id+"\", event)'> </div>":"";var maxDiv=this.options.maximizable?"<div class='"+className+"_maximize' id='"+id+"_maximize' onclick='Windows.maximize(\""+id+"\", event)'> </div>":"";var seAttributes=this.options.resizable?"class='"+className+"_sizer' id='"+id+"_sizer'":"class='"+className+"_se'";var blank="../themes/default/blank.gif";win.innerHTML=closeDiv+minDiv+maxDiv+"\
366
+ <a href='#' id='"+id+"_focus_anchor'><!-- --></a>\
367
+ <table id='"+id+"_row1' class=\"top table_window\">\
368
+ <tr>\
369
+ <td class='"+className+"_nw'></td>\
370
+ <td class='"+className+"_n'><div id='"+id+"_top' class='"+className+"_title title_window'>"+this.options.title+"</div></td>\
371
+ <td class='"+className+"_ne'></td>\
372
+ </tr>\
373
+ </table>\
374
+ <table id='"+id+"_row2' class=\"mid table_window\">\
375
+ <tr>\
376
+ <td class='"+className+"_w'></td>\
377
+ <td id='"+id+"_table_content' class='"+className+"_content' valign='top'>"+content+"</td>\
378
+ <td class='"+className+"_e'></td>\
379
+ </tr>\
380
+ </table>\
381
+ <table id='"+id+"_row3' class=\"bot table_window\">\
382
+ <tr>\
383
+ <td class='"+className+"_sw'></td>\
384
+ <td class='"+className+"_s'><div id='"+id+"_bottom' class='status_bar'><span style='float:left; width:1px; height:1px'></span></div></td>\
385
+ <td "+seAttributes+"></td>\
386
+ </tr>\
387
+ </table>\
388
+ ";Element.hide(win);this.options.parent.insertBefore(win,this.options.parent.firstChild);Event.observe($(id+"_content"),"load",this.options.onload);return win;},changeClassName:function(newClassName){var className=this.options.className;var id=this.getId();$A(["_close","_minimize","_maximize","_sizer","_content"]).each(function(value){this._toggleClassName($(id+value),className+value,newClassName+value)}.bind(this));this._toggleClassName($(id+"_top"),className+"_title",newClassName+"_title");$$("#"+id+" td").each(function(td){td.className=td.className.sub(className,newClassName);});this.options.className=newClassName;},_toggleClassName:function(element,oldClassName,newClassName){if(element){element.removeClassName(oldClassName);element.addClassName(newClassName);}},setLocation:function(top,left){top=this._updateTopConstraint(top);left=this._updateLeftConstraint(left);var e=this.currentDrag||this.element;e.setStyle({top:top+'px'});e.setStyle({left:left+'px'});this.useLeft=true;this.useTop=true;},getLocation:function(){var location={};if(this.useTop)
389
+ location=Object.extend(location,{top:this.element.getStyle("top")});else
390
+ location=Object.extend(location,{bottom:this.element.getStyle("bottom")});if(this.useLeft)
391
+ location=Object.extend(location,{left:this.element.getStyle("left")});else
392
+ location=Object.extend(location,{right:this.element.getStyle("right")});return location;},getSize:function(){return{width:this.width,height:this.height};},setSize:function(width,height,useEffect){width=parseFloat(width);height=parseFloat(height);if(!this.minimized&&width<this.options.minWidth)
393
+ width=this.options.minWidth;if(!this.minimized&&height<this.options.minHeight)
394
+ height=this.options.minHeight;if(this.options.maxHeight&&height>this.options.maxHeight)
395
+ height=this.options.maxHeight;if(this.options.maxWidth&&width>this.options.maxWidth)
396
+ width=this.options.maxWidth;if(this.useTop&&this.useLeft&&Window.hasEffectLib&&Effect.ResizeWindow&&useEffect){new Effect.ResizeWindow(this,null,null,width,height,{duration:Window.resizeEffectDuration});}else{this.width=width;this.height=height;var e=this.currentDrag?this.currentDrag:this.element;e.setStyle({width:width+this.widthW+this.widthE+"px"})
397
+ e.setStyle({height:height+this.heightN+this.heightS+"px"})
398
+ if(!this.currentDrag||this.currentDrag==this.element){var content=$(this.element.id+'_content');content.setStyle({height:height+'px'});content.setStyle({width:width+'px'});}}},updateHeight:function(){this.setSize(this.width,this.content.scrollHeight,true);},updateWidth:function(){this.setSize(this.content.scrollWidth,this.height,true);},toFront:function(){if(this.element.style.zIndex<Windows.maxZIndex)
399
+ this.setZIndex(Windows.maxZIndex+1);if(this.iefix)
400
+ this._fixIEOverlapping();},getBounds:function(insideOnly){if(!this.width||!this.height||!this.visible)
401
+ this.computeBounds();var w=this.width;var h=this.height;if(!insideOnly){w+=this.widthW+this.widthE;h+=this.heightN+this.heightS;}
402
+ var bounds=Object.extend(this.getLocation(),{width:w+"px",height:h+"px"});return bounds;},computeBounds:function(){if(!this.width||!this.height){var size=WindowUtilities._computeSize(this.content.innerHTML,this.content.id,this.width,this.height,0,this.options.className)
403
+ if(this.height)
404
+ this.width=size+5
405
+ else
406
+ this.height=size+5}
407
+ this.setSize(this.width,this.height);if(this.centered)
408
+ this._center(this.centerTop,this.centerLeft);},show:function(modal){this.visible=true;if(modal){if(typeof this.overlayOpacity=="undefined"){var that=this;setTimeout(function(){that.show(modal)},10);return;}
409
+ Windows.addModalWindow(this);this.modal=true;this.setZIndex(Windows.maxZIndex+1);Windows.unsetOverflow(this);}
410
+ else
411
+ if(!this.element.style.zIndex)
412
+ this.setZIndex(Windows.maxZIndex+1);if(this.oldStyle)
413
+ this.getContent().setStyle({overflow:this.oldStyle});this.computeBounds();this._notify("onBeforeShow");if(this.options.showEffect!=Element.show&&this.options.showEffectOptions)
414
+ this.options.showEffect(this.element,this.options.showEffectOptions);else
415
+ this.options.showEffect(this.element);this._checkIEOverlapping();WindowUtilities.focusedWindow=this
416
+ this._notify("onShow");$(this.element.id+'_focus_anchor').focus();},showCenter:function(modal,top,left){this.centered=true;this.centerTop=top;this.centerLeft=left;this.show(modal);},isVisible:function(){return this.visible;},_center:function(top,left){var windowScroll=WindowUtilities.getWindowScroll(this.options.parent);var pageSize=WindowUtilities.getPageSize(this.options.parent);if(typeof top=="undefined")
417
+ top=(pageSize.windowHeight-(this.height+this.heightN+this.heightS))/2;top+=windowScroll.top
418
+ if(typeof left=="undefined")
419
+ left=(pageSize.windowWidth-(this.width+this.widthW+this.widthE))/2;left+=windowScroll.left
420
+ this.setLocation(top,left);this.toFront();},_recenter:function(event){if(this.centered){var pageSize=WindowUtilities.getPageSize(this.options.parent);var windowScroll=WindowUtilities.getWindowScroll(this.options.parent);if(this.pageSize&&this.pageSize.windowWidth==pageSize.windowWidth&&this.pageSize.windowHeight==pageSize.windowHeight&&this.windowScroll.left==windowScroll.left&&this.windowScroll.top==windowScroll.top)
421
+ return;this.pageSize=pageSize;this.windowScroll=windowScroll;if($('overlay_modal'))
422
+ $('overlay_modal').setStyle({height:(pageSize.pageHeight+'px')});if(this.options.recenterAuto)
423
+ this._center(this.centerTop,this.centerLeft);}},hide:function(){this.visible=false;if(this.modal){Windows.removeModalWindow(this);Windows.resetOverflow();}
424
+ this.oldStyle=this.getContent().getStyle('overflow')||"auto"
425
+ this.getContent().setStyle({overflow:"hidden"});this.options.hideEffect(this.element,this.options.hideEffectOptions);if(this.iefix)
426
+ this.iefix.hide();if(!this.doNotNotifyHide)
427
+ this._notify("onHide");},close:function(){if(this.visible){if(this.options.closeCallback&&!this.options.closeCallback(this))
428
+ return;if(this.options.destroyOnClose){var destroyFunc=this.destroy.bind(this);if(this.options.hideEffectOptions.afterFinish){var func=this.options.hideEffectOptions.afterFinish;this.options.hideEffectOptions.afterFinish=function(){func();destroyFunc()}}
429
+ else
430
+ this.options.hideEffectOptions.afterFinish=function(){destroyFunc()}}
431
+ Windows.updateFocusedWindow();this.doNotNotifyHide=true;this.hide();this.doNotNotifyHide=false;this._notify("onClose");}},minimize:function(){if(this.resizing)
432
+ return;var r2=$(this.getId()+"_row2");if(!this.minimized){this.minimized=true;var dh=r2.getDimensions().height;this.r2Height=dh;var h=this.element.getHeight()-dh;if(this.useLeft&&this.useTop&&Window.hasEffectLib&&Effect.ResizeWindow){new Effect.ResizeWindow(this,null,null,null,this.height-dh,{duration:Window.resizeEffectDuration});}else{this.height-=dh;this.element.setStyle({height:h+"px"});r2.hide();}
433
+ if(!this.useTop){var bottom=parseFloat(this.element.getStyle('bottom'));this.element.setStyle({bottom:(bottom+dh)+'px'});}}
434
+ else{this.minimized=false;var dh=this.r2Height;this.r2Height=null;if(this.useLeft&&this.useTop&&Window.hasEffectLib&&Effect.ResizeWindow){new Effect.ResizeWindow(this,null,null,null,this.height+dh,{duration:Window.resizeEffectDuration});}
435
+ else{var h=this.element.getHeight()+dh;this.height+=dh;this.element.setStyle({height:h+"px"})
436
+ r2.show();}
437
+ if(!this.useTop){var bottom=parseFloat(this.element.getStyle('bottom'));this.element.setStyle({bottom:(bottom-dh)+'px'});}
438
+ this.toFront();}
439
+ this._notify("onMinimize");this._saveCookie()},maximize:function(){if(this.isMinimized()||this.resizing)
440
+ return;if(Prototype.Browser.IE&&this.heightN==0)
441
+ this._getWindowBorderSize();if(this.storedLocation!=null){this._restoreLocation();if(this.iefix)
442
+ this.iefix.hide();}
443
+ else{this._storeLocation();Windows.unsetOverflow(this);var windowScroll=WindowUtilities.getWindowScroll(this.options.parent);var pageSize=WindowUtilities.getPageSize(this.options.parent);var left=windowScroll.left;var top=windowScroll.top;if(this.options.parent!=document.body){windowScroll={top:0,left:0,bottom:0,right:0};var dim=this.options.parent.getDimensions();pageSize.windowWidth=dim.width;pageSize.windowHeight=dim.height;top=0;left=0;}
444
+ if(this.constraint){pageSize.windowWidth-=Math.max(0,this.constraintPad.left)+Math.max(0,this.constraintPad.right);pageSize.windowHeight-=Math.max(0,this.constraintPad.top)+Math.max(0,this.constraintPad.bottom);left+=Math.max(0,this.constraintPad.left);top+=Math.max(0,this.constraintPad.top);}
445
+ var width=pageSize.windowWidth-this.widthW-this.widthE;var height=pageSize.windowHeight-this.heightN-this.heightS;if(this.useLeft&&this.useTop&&Window.hasEffectLib&&Effect.ResizeWindow){new Effect.ResizeWindow(this,top,left,width,height,{duration:Window.resizeEffectDuration});}
446
+ else{this.setSize(width,height);this.element.setStyle(this.useLeft?{left:left}:{right:left});this.element.setStyle(this.useTop?{top:top}:{bottom:top});}
447
+ this.toFront();if(this.iefix)
448
+ this._fixIEOverlapping();}
449
+ this._notify("onMaximize");this._saveCookie()},isMinimized:function(){return this.minimized;},isMaximized:function(){return(this.storedLocation!=null);},setOpacity:function(opacity){if(Element.setOpacity)
450
+ Element.setOpacity(this.element,opacity);},setZIndex:function(zindex){this.element.setStyle({zIndex:zindex});Windows.updateZindex(zindex,this);},setTitle:function(newTitle){if(!newTitle||newTitle=="")
451
+ newTitle="&nbsp;";Element.update(this.element.id+'_top',newTitle);},getTitle:function(){return $(this.element.id+'_top').innerHTML;},setStatusBar:function(element){var statusBar=$(this.getId()+"_bottom");if(typeof(element)=="object"){if(this.bottombar.firstChild)
452
+ this.bottombar.replaceChild(element,this.bottombar.firstChild);else
453
+ this.bottombar.appendChild(element);}
454
+ else
455
+ this.bottombar.innerHTML=element;},_checkIEOverlapping:function(){if(!this.iefix&&(navigator.appVersion.indexOf('MSIE')>0)&&(navigator.userAgent.indexOf('Opera')<0)&&(this.element.getStyle('position')=='absolute')){new Insertion.After(this.element.id,'<iframe id="'+this.element.id+'_iefix" '+'style="display:none;position:absolute;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0);" '+'src="javascript:false;" frameborder="0" scrolling="no"></iframe>');this.iefix=$(this.element.id+'_iefix');}
456
+ if(this.iefix)
457
+ setTimeout(this._fixIEOverlapping.bind(this),50);},_fixIEOverlapping:function(){Position.clone(this.element,this.iefix);this.iefix.style.zIndex=this.element.style.zIndex-1;this.iefix.show();},_keyUp:function(event){if(27==event.keyCode&&this.options.closeOnEsc){this.close();}},_getWindowBorderSize:function(event){var div=this._createHiddenDiv(this.options.className+"_n")
458
+ this.heightN=Element.getDimensions(div).height;div.parentNode.removeChild(div)
459
+ var div=this._createHiddenDiv(this.options.className+"_s")
460
+ this.heightS=Element.getDimensions(div).height;div.parentNode.removeChild(div)
461
+ var div=this._createHiddenDiv(this.options.className+"_e")
462
+ this.widthE=Element.getDimensions(div).width;div.parentNode.removeChild(div)
463
+ var div=this._createHiddenDiv(this.options.className+"_w")
464
+ this.widthW=Element.getDimensions(div).width;div.parentNode.removeChild(div);var div=document.createElement("div");div.className="overlay_"+this.options.className;document.body.appendChild(div);var that=this;setTimeout(function(){that.overlayOpacity=($(div).getStyle("opacity"));div.parentNode.removeChild(div);},10);if(Prototype.Browser.IE){this.heightS=$(this.getId()+"_row3").getDimensions().height;this.heightN=$(this.getId()+"_row1").getDimensions().height;}
465
+ if(Prototype.Browser.WebKit&&Prototype.Browser.WebKitVersion<420)
466
+ this.setSize(this.width,this.height);if(this.doMaximize)
467
+ this.maximize();if(this.doMinimize)
468
+ this.minimize();},_createHiddenDiv:function(className){var objBody=document.body;var win=document.createElement("div");win.setAttribute('id',this.element.id+"_tmp");win.className=className;win.style.display='none';win.innerHTML='';objBody.insertBefore(win,objBody.firstChild);return win;},_storeLocation:function(){if(this.storedLocation==null){this.storedLocation={useTop:this.useTop,useLeft:this.useLeft,top:this.element.getStyle('top'),bottom:this.element.getStyle('bottom'),left:this.element.getStyle('left'),right:this.element.getStyle('right'),width:this.width,height:this.height};}},_restoreLocation:function(){if(this.storedLocation!=null){this.useLeft=this.storedLocation.useLeft;this.useTop=this.storedLocation.useTop;if(this.useLeft&&this.useTop&&Window.hasEffectLib&&Effect.ResizeWindow)
469
+ new Effect.ResizeWindow(this,this.storedLocation.top,this.storedLocation.left,this.storedLocation.width,this.storedLocation.height,{duration:Window.resizeEffectDuration});else{this.element.setStyle(this.useLeft?{left:this.storedLocation.left}:{right:this.storedLocation.right});this.element.setStyle(this.useTop?{top:this.storedLocation.top}:{bottom:this.storedLocation.bottom});this.setSize(this.storedLocation.width,this.storedLocation.height);}
470
+ Windows.resetOverflow();this._removeStoreLocation();}},_removeStoreLocation:function(){this.storedLocation=null;},_saveCookie:function(){if(this.cookie){var value="";if(this.useLeft)
471
+ value+="l:"+(this.storedLocation?this.storedLocation.left:this.element.getStyle('left'))
472
+ else
473
+ value+="r:"+(this.storedLocation?this.storedLocation.right:this.element.getStyle('right'))
474
+ if(this.useTop)
475
+ value+=",t:"+(this.storedLocation?this.storedLocation.top:this.element.getStyle('top'))
476
+ else
477
+ value+=",b:"+(this.storedLocation?this.storedLocation.bottom:this.element.getStyle('bottom'))
478
+ value+=","+(this.storedLocation?this.storedLocation.width:this.width);value+=","+(this.storedLocation?this.storedLocation.height:this.height);value+=","+this.isMinimized();value+=","+this.isMaximized();WindowUtilities.setCookie(value,this.cookie)}},_createWiredElement:function(){if(!this.wiredElement){if(Prototype.Browser.IE)
479
+ this._getWindowBorderSize();var div=document.createElement("div");div.className="wired_frame "+this.options.className+"_wired_frame";div.style.position='absolute';this.options.parent.insertBefore(div,this.options.parent.firstChild);this.wiredElement=$(div);}
480
+ if(this.useLeft)
481
+ this.wiredElement.setStyle({left:this.element.getStyle('left')});else
482
+ this.wiredElement.setStyle({right:this.element.getStyle('right')});if(this.useTop)
483
+ this.wiredElement.setStyle({top:this.element.getStyle('top')});else
484
+ this.wiredElement.setStyle({bottom:this.element.getStyle('bottom')});var dim=this.element.getDimensions();this.wiredElement.setStyle({width:dim.width+"px",height:dim.height+"px"});this.wiredElement.setStyle({zIndex:Windows.maxZIndex+30});return this.wiredElement;},_hideWiredElement:function(){if(!this.wiredElement||!this.currentDrag)
485
+ return;if(this.currentDrag==this.element)
486
+ this.currentDrag=null;else{if(this.useLeft)
487
+ this.element.setStyle({left:this.currentDrag.getStyle('left')});else
488
+ this.element.setStyle({right:this.currentDrag.getStyle('right')});if(this.useTop)
489
+ this.element.setStyle({top:this.currentDrag.getStyle('top')});else
490
+ this.element.setStyle({bottom:this.currentDrag.getStyle('bottom')});this.currentDrag.hide();this.currentDrag=null;if(this.doResize)
491
+ this.setSize(this.width,this.height);}},_notify:function(eventName){if(this.options[eventName])
492
+ this.options[eventName](this);else
493
+ Windows.notify(eventName,this);}};var Windows={windows:[],modalWindows:[],observers:[],focusedWindow:null,maxZIndex:0,overlayShowEffectOptions:{duration:0.5},overlayHideEffectOptions:{duration:0.5},addObserver:function(observer){this.removeObserver(observer);this.observers.push(observer);},removeObserver:function(observer){this.observers=this.observers.reject(function(o){return o==observer});},notify:function(eventName,win){this.observers.each(function(o){if(o[eventName])o[eventName](eventName,win);});},getWindow:function(id){return this.windows.detect(function(d){return d.getId()==id});},getFocusedWindow:function(){return this.focusedWindow;},updateFocusedWindow:function(){this.focusedWindow=this.windows.length>=2?this.windows[this.windows.length-2]:null;},register:function(win){this.windows.push(win);},addModalWindow:function(win){if(this.modalWindows.length==0){WindowUtilities.disableScreen(win.options.className,'overlay_modal',win.overlayOpacity,win.getId(),win.options.parent);}
494
+ else{if(Window.keepMultiModalWindow){$('overlay_modal').style.zIndex=Windows.maxZIndex+1;Windows.maxZIndex+=1;WindowUtilities._hideSelect(this.modalWindows.last().getId());}
495
+ else
496
+ this.modalWindows.last().element.hide();WindowUtilities._showSelect(win.getId());}
497
+ this.modalWindows.push(win);},removeModalWindow:function(win){this.modalWindows.pop();if(this.modalWindows.length==0)
498
+ WindowUtilities.enableScreen();else{if(Window.keepMultiModalWindow){this.modalWindows.last().toFront();WindowUtilities._showSelect(this.modalWindows.last().getId());}
499
+ else
500
+ this.modalWindows.last().element.show();}},register:function(win){this.windows.push(win);},unregister:function(win){this.windows=this.windows.reject(function(d){return d==win});},closeAll:function(){this.windows.each(function(w){Windows.close(w.getId())});},closeAllModalWindows:function(){WindowUtilities.enableScreen();this.modalWindows.each(function(win){if(win)win.close()});},minimize:function(id,event){var win=this.getWindow(id)
501
+ if(win&&win.visible)
502
+ win.minimize();Event.stop(event);},maximize:function(id,event){var win=this.getWindow(id)
503
+ if(win&&win.visible)
504
+ win.maximize();Event.stop(event);},close:function(id,event){var win=this.getWindow(id);if(win)
505
+ win.close();if(event)
506
+ Event.stop(event);},blur:function(id){var win=this.getWindow(id);if(!win)
507
+ return;if(win.options.blurClassName)
508
+ win.changeClassName(win.options.blurClassName);if(this.focusedWindow==win)
509
+ this.focusedWindow=null;win._notify("onBlur");},focus:function(id){var win=this.getWindow(id);if(!win)
510
+ return;if(this.focusedWindow)
511
+ this.blur(this.focusedWindow.getId())
512
+ if(win.options.focusClassName)
513
+ win.changeClassName(win.options.focusClassName);this.focusedWindow=win;win._notify("onFocus");},unsetOverflow:function(except){this.windows.each(function(d){d.oldOverflow=d.getContent().getStyle("overflow")||"auto";d.getContent().setStyle({overflow:"hidden"})});if(except&&except.oldOverflow)
514
+ except.getContent().setStyle({overflow:except.oldOverflow});},resetOverflow:function(){this.windows.each(function(d){if(d.oldOverflow)d.getContent().setStyle({overflow:d.oldOverflow})});},updateZindex:function(zindex,win){if(zindex>this.maxZIndex){this.maxZIndex=zindex;if(this.focusedWindow)
515
+ this.blur(this.focusedWindow.getId())}
516
+ this.focusedWindow=win;if(this.focusedWindow)
517
+ this.focus(this.focusedWindow.getId())}};var Dialog={dialogId:null,onCompleteFunc:null,callFunc:null,parameters:null,confirm:function(content,parameters){if(content&&typeof content!="string"){Dialog._runAjaxRequest(content,parameters,Dialog.confirm);return}
518
+ content=content||"";parameters=parameters||{};var okLabel=parameters.okLabel?parameters.okLabel:"Ok";var cancelLabel=parameters.cancelLabel?parameters.cancelLabel:"Cancel";parameters=Object.extend(parameters,parameters.windowParameters||{});parameters.windowParameters=parameters.windowParameters||{};parameters.className=parameters.className||"alert";var okButtonClass="class ='"+(parameters.buttonClass?parameters.buttonClass+" ":"")+" ok_button'"
519
+ var cancelButtonClass="class ='"+(parameters.buttonClass?parameters.buttonClass+" ":"")+" cancel_button'"
520
+ var content="\
521
+ <div class='"+parameters.className+"_message'>"+content+"</div>\
522
+ <div class='"+parameters.className+"_buttons'>\
523
+ <input type='button' value='"+okLabel+"' onclick='Dialog.okCallback()' "+okButtonClass+"/>\
524
+ <input type='button' value='"+cancelLabel+"' onclick='Dialog.cancelCallback()' "+cancelButtonClass+"/>\
525
+ </div>\
526
+ ";return this._openDialog(content,parameters)},alert:function(content,parameters){if(content&&typeof content!="string"){Dialog._runAjaxRequest(content,parameters,Dialog.alert);return}
527
+ content=content||"";parameters=parameters||{};var okLabel=parameters.okLabel?parameters.okLabel:"Ok";parameters=Object.extend(parameters,parameters.windowParameters||{});parameters.windowParameters=parameters.windowParameters||{};parameters.className=parameters.className||"alert";var okButtonClass="class ='"+(parameters.buttonClass?parameters.buttonClass+" ":"")+" ok_button'"
528
+ var content="\
529
+ <div class='"+parameters.className+"_message'>"+content+"</div>\
530
+ <div class='"+parameters.className+"_buttons'>\
531
+ <input type='button' value='"+okLabel+"' onclick='Dialog.okCallback()' "+okButtonClass+"/>\
532
+ </div>";return this._openDialog(content,parameters)},info:function(content,parameters){if(content&&typeof content!="string"){Dialog._runAjaxRequest(content,parameters,Dialog.info);return}
533
+ content=content||"";parameters=parameters||{};parameters=Object.extend(parameters,parameters.windowParameters||{});parameters.windowParameters=parameters.windowParameters||{};parameters.className=parameters.className||"alert";var content="<div id='modal_dialog_message' class='"+parameters.className+"_message'>"+content+"</div>";if(parameters.showProgress)
534
+ content+="<div id='modal_dialog_progress' class='"+parameters.className+"_progress'> </div>";parameters.ok=null;parameters.cancel=null;return this._openDialog(content,parameters)},setInfoMessage:function(message){$('modal_dialog_message').update(message);},closeInfo:function(){Windows.close(this.dialogId);},_openDialog:function(content,parameters){var className=parameters.className;if(!parameters.height&&!parameters.width){parameters.width=WindowUtilities.getPageSize(parameters.options.parent||document.body).pageWidth/2;}
535
+ if(parameters.id)
536
+ this.dialogId=parameters.id;else{var t=new Date();this.dialogId='modal_dialog_'+t.getTime();parameters.id=this.dialogId;}
537
+ if(!parameters.height||!parameters.width){var size=WindowUtilities._computeSize(content,this.dialogId,parameters.width,parameters.height,5,className)
538
+ if(parameters.height)
539
+ parameters.width=size+5
540
+ else
541
+ parameters.height=size+5}
542
+ parameters.effectOptions=parameters.effectOptions;parameters.resizable=parameters.resizable||false;parameters.minimizable=parameters.minimizable||false;parameters.maximizable=parameters.maximizable||false;parameters.draggable=parameters.draggable||false;parameters.closable=parameters.closable||false;var win=new Window(parameters);win.getContent().innerHTML=content;win.showCenter(true,parameters.top,parameters.left);win.setDestroyOnClose();win.cancelCallback=parameters.onCancel||parameters.cancel;win.okCallback=parameters.onOk||parameters.ok;return win;},_getAjaxContent:function(originalRequest){Dialog.callFunc(originalRequest.responseText,Dialog.parameters)},_runAjaxRequest:function(message,parameters,callFunc){if(message.options==null)
543
+ message.options={}
544
+ Dialog.onCompleteFunc=message.options.onComplete;Dialog.parameters=parameters;Dialog.callFunc=callFunc;message.options.onComplete=Dialog._getAjaxContent;new Ajax.Request(message.url,message.options);},okCallback:function(){var win=Windows.focusedWindow;if(!win.okCallback||win.okCallback(win)){$$("#"+win.getId()+" input").each(function(element){element.onclick=null;})
545
+ win.close();}},cancelCallback:function(){var win=Windows.focusedWindow;$$("#"+win.getId()+" input").each(function(element){element.onclick=null})
546
+ win.close();if(win.cancelCallback)
547
+ win.cancelCallback(win);}}
548
+ if(Prototype.Browser.WebKit){var array=navigator.userAgent.match(new RegExp(/AppleWebKit\/([\d\.\+]*)/));Prototype.Browser.WebKitVersion=parseFloat(array[1]);}
549
+ var WindowUtilities={getWindowScroll:function(parent){var T,L,W,H;parent=parent||document.body;if(parent!=document.body){T=parent.scrollTop;L=parent.scrollLeft;W=parent.scrollWidth;H=parent.scrollHeight;}
550
+ else{var w=window;with(w.document){if(w.document.documentElement&&documentElement.scrollTop){T=documentElement.scrollTop;L=documentElement.scrollLeft;}else if(w.document.body){T=body.scrollTop;L=body.scrollLeft;}
551
+ if(w.innerWidth){W=w.innerWidth;H=w.innerHeight;}else if(w.document.documentElement&&documentElement.clientWidth){W=documentElement.clientWidth;H=documentElement.clientHeight;}else{W=body.offsetWidth;H=body.offsetHeight}}}
552
+ return{top:T,left:L,width:W,height:H};},getPageSize:function(parent){parent=parent||document.body;var windowWidth,windowHeight;var pageHeight,pageWidth;if(parent!=document.body){windowWidth=parent.getWidth();windowHeight=parent.getHeight();pageWidth=parent.scrollWidth;pageHeight=parent.scrollHeight;}
553
+ else{var xScroll,yScroll;if(window.innerHeight&&window.scrollMaxY){xScroll=document.body.scrollWidth;yScroll=window.innerHeight+window.scrollMaxY;}else if(document.body.scrollHeight>document.body.offsetHeight){xScroll=document.body.scrollWidth;yScroll=document.body.scrollHeight;}else{xScroll=document.body.offsetWidth;yScroll=document.body.offsetHeight;}
554
+ if(self.innerHeight){windowWidth=self.innerWidth;windowHeight=self.innerHeight;}else if(document.documentElement&&document.documentElement.clientHeight){windowWidth=document.documentElement.clientWidth;windowHeight=document.documentElement.clientHeight;}else if(document.body){windowWidth=document.body.clientWidth;windowHeight=document.body.clientHeight;}
555
+ if(yScroll<windowHeight){pageHeight=windowHeight;}else{pageHeight=yScroll;}
556
+ if(xScroll<windowWidth){pageWidth=windowWidth;}else{pageWidth=xScroll;}}
557
+ return{pageWidth:pageWidth,pageHeight:pageHeight,windowWidth:windowWidth,windowHeight:windowHeight};},disableScreen:function(className,overlayId,overlayOpacity,contentId,parent){WindowUtilities.initLightbox(overlayId,className,function(){this._disableScreen(className,overlayId,overlayOpacity,contentId)}.bind(this),parent||document.body);},_disableScreen:function(className,overlayId,overlayOpacity,contentId){var objOverlay=$(overlayId);var pageSize=WindowUtilities.getPageSize(objOverlay.parentNode);if(contentId&&Prototype.Browser.IE){WindowUtilities._hideSelect();WindowUtilities._showSelect(contentId);}
558
+ objOverlay.style.height=(pageSize.pageHeight+'px');objOverlay.style.display='none';if(overlayId=="overlay_modal"&&Window.hasEffectLib&&Windows.overlayShowEffectOptions){objOverlay.overlayOpacity=overlayOpacity;new Effect.Appear(objOverlay,Object.extend({from:0,to:overlayOpacity},Windows.overlayShowEffectOptions));}
559
+ else
560
+ objOverlay.style.display="block";},enableScreen:function(id){id=id||'overlay_modal';var objOverlay=$(id);if(objOverlay){if(id=="overlay_modal"&&Window.hasEffectLib&&Windows.overlayHideEffectOptions)
561
+ new Effect.Fade(objOverlay,Object.extend({from:objOverlay.overlayOpacity,to:0},Windows.overlayHideEffectOptions));else{objOverlay.style.display='none';objOverlay.parentNode.removeChild(objOverlay);}
562
+ if(id!="__invisible__")
563
+ WindowUtilities._showSelect();}},_hideSelect:function(id){if(Prototype.Browser.IE){id=id==null?"":"#"+id+" ";$$(id+'select').each(function(element){if(!WindowUtilities.isDefined(element.oldVisibility)){element.oldVisibility=element.style.visibility?element.style.visibility:"visible";element.style.visibility="hidden";}});}},_showSelect:function(id){if(Prototype.Browser.IE){id=id==null?"":"#"+id+" ";$$(id+'select').each(function(element){if(WindowUtilities.isDefined(element.oldVisibility)){try{element.style.visibility=element.oldVisibility;}catch(e){element.style.visibility="visible";}
564
+ element.oldVisibility=null;}
565
+ else{if(element.style.visibility)
566
+ element.style.visibility="visible";}});}},isDefined:function(object){return typeof(object)!="undefined"&&object!=null;},initLightbox:function(id,className,doneHandler,parent){if($(id)){Element.setStyle(id,{zIndex:Windows.maxZIndex+1});Windows.maxZIndex++;doneHandler();}
567
+ else{var objOverlay=document.createElement("div");objOverlay.setAttribute('id',id);objOverlay.className="overlay_"+className
568
+ objOverlay.style.display='none';objOverlay.style.position='absolute';objOverlay.style.top='0';objOverlay.style.left='0';objOverlay.style.zIndex=Windows.maxZIndex+1;Windows.maxZIndex++;objOverlay.style.width='100%';parent.insertBefore(objOverlay,parent.firstChild);if(Prototype.Browser.WebKit&&id=="overlay_modal"){setTimeout(function(){doneHandler()},10);}
569
+ else
570
+ doneHandler();}},setCookie:function(value,parameters){document.cookie=parameters[0]+"="+escape(value)+
571
+ ((parameters[1])?"; expires="+parameters[1].toGMTString():"")+
572
+ ((parameters[2])?"; path="+parameters[2]:"")+
573
+ ((parameters[3])?"; domain="+parameters[3]:"")+
574
+ ((parameters[4])?"; secure":"");},getCookie:function(name){var dc=document.cookie;var prefix=name+"=";var begin=dc.indexOf("; "+prefix);if(begin==-1){begin=dc.indexOf(prefix);if(begin!=0)return null;}else{begin+=2;}
575
+ var end=document.cookie.indexOf(";",begin);if(end==-1){end=dc.length;}
576
+ return unescape(dc.substring(begin+prefix.length,end));},_computeSize:function(content,id,width,height,margin,className){var objBody=document.body;var tmpObj=document.createElement("div");tmpObj.setAttribute('id',id);tmpObj.className=className+"_content";if(height)
577
+ tmpObj.style.height=height+"px"
578
+ else
579
+ tmpObj.style.width=width+"px"
580
+ tmpObj.style.position='absolute';tmpObj.style.top='0';tmpObj.style.left='0';tmpObj.style.display='none';tmpObj.innerHTML=content;objBody.insertBefore(tmpObj,objBody.firstChild);var size;if(height)
581
+ size=$(tmpObj).getDimensions().width+margin;else
582
+ size=$(tmpObj).getDimensions().height+margin;objBody.removeChild(tmpObj);return size;}};var Builder={NODEMAP:{AREA:'map',CAPTION:'table',COL:'table',COLGROUP:'table',LEGEND:'fieldset',OPTGROUP:'select',OPTION:'select',PARAM:'object',TBODY:'table',TD:'table',TFOOT:'table',TH:'table',THEAD:'table',TR:'table'},node:function(elementName){elementName=elementName.toUpperCase();var parentTag=this.NODEMAP[elementName]||'div';var parentElement=document.createElement(parentTag);try{parentElement.innerHTML="<"+elementName+"></"+elementName+">";}catch(e){}
583
+ var element=parentElement.firstChild||null;if(element&&(element.tagName.toUpperCase()!=elementName))
584
+ element=element.getElementsByTagName(elementName)[0];if(!element)element=document.createElement(elementName);if(!element)return;if(arguments[1])
585
+ if(this._isStringOrNumber(arguments[1])||(arguments[1]instanceof Array)||arguments[1].tagName){this._children(element,arguments[1]);}else{var attrs=this._attributes(arguments[1]);if(attrs.length){try{parentElement.innerHTML="<"+elementName+" "+
586
+ attrs+"></"+elementName+">";}catch(e){}
587
+ element=parentElement.firstChild||null;if(!element){element=document.createElement(elementName);for(attr in arguments[1])
588
+ element[attr=='class'?'className':attr]=arguments[1][attr];}
589
+ if(element.tagName.toUpperCase()!=elementName)
590
+ element=parentElement.getElementsByTagName(elementName)[0];}}
591
+ if(arguments[2])
592
+ this._children(element,arguments[2]);return $(element);},_text:function(text){return document.createTextNode(text);},ATTR_MAP:{'className':'class','htmlFor':'for'},_attributes:function(attributes){var attrs=[];for(attribute in attributes)
593
+ attrs.push((attribute in this.ATTR_MAP?this.ATTR_MAP[attribute]:attribute)+'="'+attributes[attribute].toString().escapeHTML().gsub(/"/,'&quot;')+'"');return attrs.join(" ");},_children:function(element,children){if(children.tagName){element.appendChild(children);return;}
594
+ if(typeof children=='object'){children.flatten().each(function(e){if(typeof e=='object')
595
+ element.appendChild(e);else
596
+ if(Builder._isStringOrNumber(e))
597
+ element.appendChild(Builder._text(e));});}else
598
+ if(Builder._isStringOrNumber(children))
599
+ element.appendChild(Builder._text(children));},_isStringOrNumber:function(param){return(typeof param=='string'||typeof param=='number');},build:function(html){var element=this.node('div');$(element).update(html.strip());return element.down();},dump:function(scope){if(typeof scope!='object'&&typeof scope!='function')scope=window;var tags=("A ABBR ACRONYM ADDRESS APPLET AREA B BASE BASEFONT BDO BIG BLOCKQUOTE BODY "+"BR BUTTON CAPTION CENTER CITE CODE COL COLGROUP DD DEL DFN DIR DIV DL DT EM FIELDSET "+"FONT FORM FRAME FRAMESET H1 H2 H3 H4 H5 H6 HEAD HR HTML I IFRAME IMG INPUT INS ISINDEX "+"KBD LABEL LEGEND LI LINK MAP MENU META NOFRAMES NOSCRIPT OBJECT OL OPTGROUP OPTION P "+"PARAM PRE Q S SAMP SCRIPT SELECT SMALL SPAN STRIKE STRONG STYLE SUB SUP TABLE TBODY TD "+"TEXTAREA TFOOT TH THEAD TITLE TR TT U UL VAR").split(/\s+/);tags.each(function(tag){scope[tag]=function(){return Builder.node.apply(Builder,[tag].concat($A(arguments)));};});}};;String.prototype.parseColor=function(){var color='#';if(this.slice(0,4)=='rgb('){var cols=this.slice(4,this.length-1).split(',');var i=0;do{color+=parseInt(cols[i]).toColorPart()}while(++i<3);}else{if(this.slice(0,1)=='#'){if(this.length==4)for(var i=1;i<4;i++)color+=(this.charAt(i)+this.charAt(i)).toLowerCase();if(this.length==7)color=this.toLowerCase();}}
600
+ return(color.length==7?color:(arguments[0]||this));};Element.collectTextNodes=function(element){return $A($(element).childNodes).collect(function(node){return(node.nodeType==3?node.nodeValue:(node.hasChildNodes()?Element.collectTextNodes(node):''));}).flatten().join('');};Element.collectTextNodesIgnoreClass=function(element,className){return $A($(element).childNodes).collect(function(node){return(node.nodeType==3?node.nodeValue:((node.hasChildNodes()&&!Element.hasClassName(node,className))?Element.collectTextNodesIgnoreClass(node,className):''));}).flatten().join('');};Element.setContentZoom=function(element,percent){element=$(element);element.setStyle({fontSize:(percent/100)+'em'});if(Prototype.Browser.WebKit)window.scrollBy(0,0);return element;};Element.getInlineOpacity=function(element){return $(element).style.opacity||'';};Element.forceRerendering=function(element){try{element=$(element);var n=document.createTextNode(' ');element.appendChild(n);element.removeChild(n);}catch(e){}};var Effect={_elementDoesNotExistError:{name:'ElementDoesNotExistError',message:'The specified DOM element does not exist, but is required for this effect to operate'},Transitions:{linear:Prototype.K,sinoidal:function(pos){return(-Math.cos(pos*Math.PI)/2)+.5;},reverse:function(pos){return 1-pos;},flicker:function(pos){var pos=((-Math.cos(pos*Math.PI)/4)+.75)+Math.random()/4;return pos>1?1:pos;},wobble:function(pos){return(-Math.cos(pos*Math.PI*(9*pos))/2)+.5;},pulse:function(pos,pulses){return(-Math.cos((pos*((pulses||5)-.5)*2)*Math.PI)/2)+.5;},spring:function(pos){return 1-(Math.cos(pos*4.5*Math.PI)*Math.exp(-pos*6));},none:function(pos){return 0;},full:function(pos){return 1;}},DefaultOptions:{duration:1.0,fps:100,sync:false,from:0.0,to:1.0,delay:0.0,queue:'parallel'},tagifyText:function(element){var tagifyStyle='position:relative';if(Prototype.Browser.IE)tagifyStyle+=';zoom:1';element=$(element);$A(element.childNodes).each(function(child){if(child.nodeType==3){child.nodeValue.toArray().each(function(character){element.insertBefore(new Element('span',{style:tagifyStyle}).update(character==' '?String.fromCharCode(160):character),child);});Element.remove(child);}});},multiple:function(element,effect){var elements;if(((typeof element=='object')||Object.isFunction(element))&&(element.length))
601
+ elements=element;else
602
+ elements=$(element).childNodes;var options=Object.extend({speed:0.1,delay:0.0},arguments[2]||{});var masterDelay=options.delay;$A(elements).each(function(element,index){new effect(element,Object.extend(options,{delay:index*options.speed+masterDelay}));});},PAIRS:{'slide':['SlideDown','SlideUp'],'blind':['BlindDown','BlindUp'],'appear':['Appear','Fade']},toggle:function(element,effect){element=$(element);effect=(effect||'appear').toLowerCase();var options=Object.extend({queue:{position:'end',scope:(element.id||'global'),limit:1}},arguments[2]||{});Effect[element.visible()?Effect.PAIRS[effect][1]:Effect.PAIRS[effect][0]](element,options);}};Effect.DefaultOptions.transition=Effect.Transitions.sinoidal;Effect.ScopedQueue=Class.create(Enumerable,{initialize:function(){this.effects=[];this.interval=null;},_each:function(iterator){this.effects._each(iterator);},add:function(effect){var timestamp=new Date().getTime();var position=Object.isString(effect.options.queue)?effect.options.queue:effect.options.queue.position;switch(position){case'front':this.effects.findAll(function(e){return e.state=='idle'}).each(function(e){e.startOn+=effect.finishOn;e.finishOn+=effect.finishOn;});break;case'with-last':timestamp=this.effects.pluck('startOn').max()||timestamp;break;case'end':timestamp=this.effects.pluck('finishOn').max()||timestamp;break;}
603
+ effect.startOn+=timestamp;effect.finishOn+=timestamp;if(!effect.options.queue.limit||(this.effects.length<effect.options.queue.limit))
604
+ this.effects.push(effect);if(!this.interval)
605
+ this.interval=setInterval(this.loop.bind(this),15);},remove:function(effect){this.effects=this.effects.reject(function(e){return e==effect});if(this.effects.length==0){clearInterval(this.interval);this.interval=null;}},loop:function(){var timePos=new Date().getTime();for(var i=0,len=this.effects.length;i<len;i++)
606
+ this.effects[i]&&this.effects[i].loop(timePos);}});Effect.Queues={instances:$H(),get:function(queueName){if(!Object.isString(queueName))return queueName;return this.instances.get(queueName)||this.instances.set(queueName,new Effect.ScopedQueue());}};Effect.Queue=Effect.Queues.get('global');Effect.Base=Class.create({position:null,start:function(options){function codeForEvent(options,eventName){return((options[eventName+'Internal']?'this.options.'+eventName+'Internal(this);':'')+
607
+ (options[eventName]?'this.options.'+eventName+'(this);':''));}
608
+ if(options&&options.transition===false)options.transition=Effect.Transitions.linear;this.options=Object.extend(Object.extend({},Effect.DefaultOptions),options||{});this.currentFrame=0;this.state='idle';this.startOn=this.options.delay*1000;this.finishOn=this.startOn+(this.options.duration*1000);this.fromToDelta=this.options.to-this.options.from;this.totalTime=this.finishOn-this.startOn;this.totalFrames=this.options.fps*this.options.duration;this.render=(function(){function dispatch(effect,eventName){if(effect.options[eventName+'Internal'])
609
+ effect.options[eventName+'Internal'](effect);if(effect.options[eventName])
610
+ effect.options[eventName](effect);}
611
+ return function(pos){if(this.state==="idle"){this.state="running";dispatch(this,'beforeSetup');if(this.setup)this.setup();dispatch(this,'afterSetup');}
612
+ if(this.state==="running"){pos=(this.options.transition(pos)*this.fromToDelta)+this.options.from;this.position=pos;dispatch(this,'beforeUpdate');if(this.update)this.update(pos);dispatch(this,'afterUpdate');}};})();this.event('beforeStart');if(!this.options.sync)
613
+ Effect.Queues.get(Object.isString(this.options.queue)?'global':this.options.queue.scope).add(this);},loop:function(timePos){if(timePos>=this.startOn){if(timePos>=this.finishOn){this.render(1.0);this.cancel();this.event('beforeFinish');if(this.finish)this.finish();this.event('afterFinish');return;}
614
+ var pos=(timePos-this.startOn)/this.totalTime,frame=(pos*this.totalFrames).round();if(frame>this.currentFrame){this.render(pos);this.currentFrame=frame;}}},cancel:function(){if(!this.options.sync)
615
+ Effect.Queues.get(Object.isString(this.options.queue)?'global':this.options.queue.scope).remove(this);this.state='finished';},event:function(eventName){if(this.options[eventName+'Internal'])this.options[eventName+'Internal'](this);if(this.options[eventName])this.options[eventName](this);},inspect:function(){var data=$H();for(property in this)
616
+ if(!Object.isFunction(this[property]))data.set(property,this[property]);return'#<Effect:'+data.inspect()+',options:'+$H(this.options).inspect()+'>';}});Effect.Parallel=Class.create(Effect.Base,{initialize:function(effects){this.effects=effects||[];this.start(arguments[1]);},update:function(position){this.effects.invoke('render',position);},finish:function(position){this.effects.each(function(effect){effect.render(1.0);effect.cancel();effect.event('beforeFinish');if(effect.finish)effect.finish(position);effect.event('afterFinish');});}});Effect.Tween=Class.create(Effect.Base,{initialize:function(object,from,to){object=Object.isString(object)?$(object):object;var args=$A(arguments),method=args.last(),options=args.length==5?args[3]:null;this.method=Object.isFunction(method)?method.bind(object):Object.isFunction(object[method])?object[method].bind(object):function(value){object[method]=value};this.start(Object.extend({from:from,to:to},options||{}));},update:function(position){this.method(position);}});Effect.Event=Class.create(Effect.Base,{initialize:function(){this.start(Object.extend({duration:0},arguments[0]||{}));},update:Prototype.emptyFunction});Effect.Opacity=Class.create(Effect.Base,{initialize:function(element){this.element=$(element);if(!this.element)throw(Effect._elementDoesNotExistError);if(Prototype.Browser.IE&&(!this.element.currentStyle.hasLayout))
617
+ this.element.setStyle({zoom:1});var options=Object.extend({from:this.element.getOpacity()||0.0,to:1.0},arguments[1]||{});this.start(options);},update:function(position){this.element.setOpacity(position);}});Effect.Move=Class.create(Effect.Base,{initialize:function(element){this.element=$(element);if(!this.element)throw(Effect._elementDoesNotExistError);var options=Object.extend({x:0,y:0,mode:'relative'},arguments[1]||{});this.start(options);},setup:function(){this.element.makePositioned();this.originalLeft=parseFloat(this.element.getStyle('left')||'0');this.originalTop=parseFloat(this.element.getStyle('top')||'0');if(this.options.mode=='absolute'){this.options.x=this.options.x-this.originalLeft;this.options.y=this.options.y-this.originalTop;}},update:function(position){this.element.setStyle({left:(this.options.x*position+this.originalLeft).round()+'px',top:(this.options.y*position+this.originalTop).round()+'px'});}});Effect.MoveBy=function(element,toTop,toLeft){return new Effect.Move(element,Object.extend({x:toLeft,y:toTop},arguments[3]||{}));};Effect.Scale=Class.create(Effect.Base,{initialize:function(element,percent){this.element=$(element);if(!this.element)throw(Effect._elementDoesNotExistError);var options=Object.extend({scaleX:true,scaleY:true,scaleContent:true,scaleFromCenter:false,scaleMode:'box',scaleFrom:100.0,scaleTo:percent},arguments[2]||{});this.start(options);},setup:function(){this.restoreAfterFinish=this.options.restoreAfterFinish||false;this.elementPositioning=this.element.getStyle('position');this.originalStyle={};['top','left','width','height','fontSize'].each(function(k){this.originalStyle[k]=this.element.style[k];}.bind(this));this.originalTop=this.element.offsetTop;this.originalLeft=this.element.offsetLeft;var fontSize=this.element.getStyle('font-size')||'100%';['em','px','%','pt'].each(function(fontSizeType){if(fontSize.indexOf(fontSizeType)>0){this.fontSize=parseFloat(fontSize);this.fontSizeType=fontSizeType;}}.bind(this));this.factor=(this.options.scaleTo-this.options.scaleFrom)/100;this.dims=null;if(this.options.scaleMode=='box')
618
+ this.dims=[this.element.offsetHeight,this.element.offsetWidth];if(/^content/.test(this.options.scaleMode))
619
+ this.dims=[this.element.scrollHeight,this.element.scrollWidth];if(!this.dims)
620
+ this.dims=[this.options.scaleMode.originalHeight,this.options.scaleMode.originalWidth];},update:function(position){var currentScale=(this.options.scaleFrom/100.0)+(this.factor*position);if(this.options.scaleContent&&this.fontSize)
621
+ this.element.setStyle({fontSize:this.fontSize*currentScale+this.fontSizeType});this.setDimensions(this.dims[0]*currentScale,this.dims[1]*currentScale);},finish:function(position){if(this.restoreAfterFinish)this.element.setStyle(this.originalStyle);},setDimensions:function(height,width){var d={};if(this.options.scaleX)d.width=width.round()+'px';if(this.options.scaleY)d.height=height.round()+'px';if(this.options.scaleFromCenter){var topd=(height-this.dims[0])/2;var leftd=(width-this.dims[1])/2;if(this.elementPositioning=='absolute'){if(this.options.scaleY)d.top=this.originalTop-topd+'px';if(this.options.scaleX)d.left=this.originalLeft-leftd+'px';}else{if(this.options.scaleY)d.top=-topd+'px';if(this.options.scaleX)d.left=-leftd+'px';}}
622
+ this.element.setStyle(d);}});Effect.Highlight=Class.create(Effect.Base,{initialize:function(element){this.element=$(element);if(!this.element)throw(Effect._elementDoesNotExistError);var options=Object.extend({startcolor:'#ffff99'},arguments[1]||{});this.start(options);},setup:function(){if(this.element.getStyle('display')=='none'){this.cancel();return;}
623
+ this.oldStyle={};if(!this.options.keepBackgroundImage){this.oldStyle.backgroundImage=this.element.getStyle('background-image');this.element.setStyle({backgroundImage:'none'});}
624
+ if(!this.options.endcolor)
625
+ this.options.endcolor=this.element.getStyle('background-color').parseColor('#ffffff');if(!this.options.restorecolor)
626
+ this.options.restorecolor=this.element.getStyle('background-color');this._base=$R(0,2).map(function(i){return parseInt(this.options.startcolor.slice(i*2+1,i*2+3),16)}.bind(this));this._delta=$R(0,2).map(function(i){return parseInt(this.options.endcolor.slice(i*2+1,i*2+3),16)-this._base[i]}.bind(this));},update:function(position){this.element.setStyle({backgroundColor:$R(0,2).inject('#',function(m,v,i){return m+((this._base[i]+(this._delta[i]*position)).round().toColorPart());}.bind(this))});},finish:function(){this.element.setStyle(Object.extend(this.oldStyle,{backgroundColor:this.options.restorecolor}));}});Effect.ScrollTo=function(element){var options=arguments[1]||{},scrollOffsets=document.viewport.getScrollOffsets(),elementOffsets=$(element).cumulativeOffset();if(options.offset)elementOffsets[1]+=options.offset;return new Effect.Tween(null,scrollOffsets.top,elementOffsets[1],options,function(p){scrollTo(scrollOffsets.left,p.round());});};Effect.Fade=function(element){element=$(element);var oldOpacity=element.getInlineOpacity();var options=Object.extend({from:element.getOpacity()||1.0,to:0.0,afterFinishInternal:function(effect){if(effect.options.to!=0)return;effect.element.hide().setStyle({opacity:oldOpacity});}},arguments[1]||{});return new Effect.Opacity(element,options);};Effect.Appear=function(element){element=$(element);var options=Object.extend({from:(element.getStyle('display')=='none'?0.0:element.getOpacity()||0.0),to:1.0,afterFinishInternal:function(effect){effect.element.forceRerendering();},beforeSetup:function(effect){effect.element.setOpacity(effect.options.from).show();}},arguments[1]||{});return new Effect.Opacity(element,options);};Effect.Puff=function(element){element=$(element);var oldStyle={opacity:element.getInlineOpacity(),position:element.getStyle('position'),top:element.style.top,left:element.style.left,width:element.style.width,height:element.style.height};return new Effect.Parallel([new Effect.Scale(element,200,{sync:true,scaleFromCenter:true,scaleContent:true,restoreAfterFinish:true}),new Effect.Opacity(element,{sync:true,to:0.0})],Object.extend({duration:1.0,beforeSetupInternal:function(effect){Position.absolutize(effect.effects[0].element);},afterFinishInternal:function(effect){effect.effects[0].element.hide().setStyle(oldStyle);}},arguments[1]||{}));};Effect.BlindUp=function(element){element=$(element);element.makeClipping();return new Effect.Scale(element,0,Object.extend({scaleContent:false,scaleX:false,restoreAfterFinish:true,afterFinishInternal:function(effect){effect.element.hide().undoClipping();}},arguments[1]||{}));};Effect.BlindDown=function(element){element=$(element);var elementDimensions=element.getDimensions();return new Effect.Scale(element,100,Object.extend({scaleContent:false,scaleX:false,scaleFrom:0,scaleMode:{originalHeight:elementDimensions.height,originalWidth:elementDimensions.width},restoreAfterFinish:true,afterSetup:function(effect){effect.element.makeClipping().setStyle({height:'0px'}).show();},afterFinishInternal:function(effect){effect.element.undoClipping();}},arguments[1]||{}));};Effect.SwitchOff=function(element){element=$(element);var oldOpacity=element.getInlineOpacity();return new Effect.Appear(element,Object.extend({duration:0.4,from:0,transition:Effect.Transitions.flicker,afterFinishInternal:function(effect){new Effect.Scale(effect.element,1,{duration:0.3,scaleFromCenter:true,scaleX:false,scaleContent:false,restoreAfterFinish:true,beforeSetup:function(effect){effect.element.makePositioned().makeClipping();},afterFinishInternal:function(effect){effect.element.hide().undoClipping().undoPositioned().setStyle({opacity:oldOpacity});}});}},arguments[1]||{}));};Effect.DropOut=function(element){element=$(element);var oldStyle={top:element.getStyle('top'),left:element.getStyle('left'),opacity:element.getInlineOpacity()};return new Effect.Parallel([new Effect.Move(element,{x:0,y:100,sync:true}),new Effect.Opacity(element,{sync:true,to:0.0})],Object.extend({duration:0.5,beforeSetup:function(effect){effect.effects[0].element.makePositioned();},afterFinishInternal:function(effect){effect.effects[0].element.hide().undoPositioned().setStyle(oldStyle);}},arguments[1]||{}));};Effect.Shake=function(element){element=$(element);var options=Object.extend({distance:20,duration:0.5},arguments[1]||{});var distance=parseFloat(options.distance);var split=parseFloat(options.duration)/10.0;var oldStyle={top:element.getStyle('top'),left:element.getStyle('left')};return new Effect.Move(element,{x:distance,y:0,duration:split,afterFinishInternal:function(effect){new Effect.Move(effect.element,{x:-distance*2,y:0,duration:split*2,afterFinishInternal:function(effect){new Effect.Move(effect.element,{x:distance*2,y:0,duration:split*2,afterFinishInternal:function(effect){new Effect.Move(effect.element,{x:-distance*2,y:0,duration:split*2,afterFinishInternal:function(effect){new Effect.Move(effect.element,{x:distance*2,y:0,duration:split*2,afterFinishInternal:function(effect){new Effect.Move(effect.element,{x:-distance,y:0,duration:split,afterFinishInternal:function(effect){effect.element.undoPositioned().setStyle(oldStyle);}});}});}});}});}});}});};Effect.SlideDown=function(element){element=$(element).cleanWhitespace();var oldInnerBottom=element.down().getStyle('bottom');var elementDimensions=element.getDimensions();return new Effect.Scale(element,100,Object.extend({scaleContent:false,scaleX:false,scaleFrom:window.opera?0:1,scaleMode:{originalHeight:elementDimensions.height,originalWidth:elementDimensions.width},restoreAfterFinish:true,afterSetup:function(effect){effect.element.makePositioned();effect.element.down().makePositioned();if(window.opera)effect.element.setStyle({top:''});effect.element.makeClipping().setStyle({height:'0px'}).show();},afterUpdateInternal:function(effect){effect.element.down().setStyle({bottom:(effect.dims[0]-effect.element.clientHeight)+'px'});},afterFinishInternal:function(effect){effect.element.undoClipping().undoPositioned();effect.element.down().undoPositioned().setStyle({bottom:oldInnerBottom});}},arguments[1]||{}));};Effect.SlideUp=function(element){element=$(element).cleanWhitespace();var oldInnerBottom=element.down().getStyle('bottom');var elementDimensions=element.getDimensions();return new Effect.Scale(element,window.opera?0:1,Object.extend({scaleContent:false,scaleX:false,scaleMode:'box',scaleFrom:100,scaleMode:{originalHeight:elementDimensions.height,originalWidth:elementDimensions.width},restoreAfterFinish:true,afterSetup:function(effect){effect.element.makePositioned();effect.element.down().makePositioned();if(window.opera)effect.element.setStyle({top:''});effect.element.makeClipping().show();},afterUpdateInternal:function(effect){effect.element.down().setStyle({bottom:(effect.dims[0]-effect.element.clientHeight)+'px'});},afterFinishInternal:function(effect){effect.element.hide().undoClipping().undoPositioned();effect.element.down().undoPositioned().setStyle({bottom:oldInnerBottom});}},arguments[1]||{}));};Effect.Squish=function(element){return new Effect.Scale(element,window.opera?1:0,{restoreAfterFinish:true,beforeSetup:function(effect){effect.element.makeClipping();},afterFinishInternal:function(effect){effect.element.hide().undoClipping();}});};Effect.Grow=function(element){element=$(element);var options=Object.extend({direction:'center',moveTransition:Effect.Transitions.sinoidal,scaleTransition:Effect.Transitions.sinoidal,opacityTransition:Effect.Transitions.full},arguments[1]||{});var oldStyle={top:element.style.top,left:element.style.left,height:element.style.height,width:element.style.width,opacity:element.getInlineOpacity()};var dims=element.getDimensions();var initialMoveX,initialMoveY;var moveX,moveY;switch(options.direction){case'top-left':initialMoveX=initialMoveY=moveX=moveY=0;break;case'top-right':initialMoveX=dims.width;initialMoveY=moveY=0;moveX=-dims.width;break;case'bottom-left':initialMoveX=moveX=0;initialMoveY=dims.height;moveY=-dims.height;break;case'bottom-right':initialMoveX=dims.width;initialMoveY=dims.height;moveX=-dims.width;moveY=-dims.height;break;case'center':initialMoveX=dims.width/2;initialMoveY=dims.height/2;moveX=-dims.width/2;moveY=-dims.height/2;break;}
627
+ return new Effect.Move(element,{x:initialMoveX,y:initialMoveY,duration:0.01,beforeSetup:function(effect){effect.element.hide().makeClipping().makePositioned();},afterFinishInternal:function(effect){new Effect.Parallel([new Effect.Opacity(effect.element,{sync:true,to:1.0,from:0.0,transition:options.opacityTransition}),new Effect.Move(effect.element,{x:moveX,y:moveY,sync:true,transition:options.moveTransition}),new Effect.Scale(effect.element,100,{scaleMode:{originalHeight:dims.height,originalWidth:dims.width},sync:true,scaleFrom:window.opera?1:0,transition:options.scaleTransition,restoreAfterFinish:true})],Object.extend({beforeSetup:function(effect){effect.effects[0].element.setStyle({height:'0px'}).show();},afterFinishInternal:function(effect){effect.effects[0].element.undoClipping().undoPositioned().setStyle(oldStyle);}},options));}});};Effect.Shrink=function(element){element=$(element);var options=Object.extend({direction:'center',moveTransition:Effect.Transitions.sinoidal,scaleTransition:Effect.Transitions.sinoidal,opacityTransition:Effect.Transitions.none},arguments[1]||{});var oldStyle={top:element.style.top,left:element.style.left,height:element.style.height,width:element.style.width,opacity:element.getInlineOpacity()};var dims=element.getDimensions();var moveX,moveY;switch(options.direction){case'top-left':moveX=moveY=0;break;case'top-right':moveX=dims.width;moveY=0;break;case'bottom-left':moveX=0;moveY=dims.height;break;case'bottom-right':moveX=dims.width;moveY=dims.height;break;case'center':moveX=dims.width/2;moveY=dims.height/2;break;}
628
+ return new Effect.Parallel([new Effect.Opacity(element,{sync:true,to:0.0,from:1.0,transition:options.opacityTransition}),new Effect.Scale(element,window.opera?1:0,{sync:true,transition:options.scaleTransition,restoreAfterFinish:true}),new Effect.Move(element,{x:moveX,y:moveY,sync:true,transition:options.moveTransition})],Object.extend({beforeStartInternal:function(effect){effect.effects[0].element.makePositioned().makeClipping();},afterFinishInternal:function(effect){effect.effects[0].element.hide().undoClipping().undoPositioned().setStyle(oldStyle);}},options));};Effect.Pulsate=function(element){element=$(element);var options=arguments[1]||{},oldOpacity=element.getInlineOpacity(),transition=options.transition||Effect.Transitions.linear,reverser=function(pos){return 1-transition((-Math.cos((pos*(options.pulses||5)*2)*Math.PI)/2)+.5);};return new Effect.Opacity(element,Object.extend(Object.extend({duration:2.0,from:0,afterFinishInternal:function(effect){effect.element.setStyle({opacity:oldOpacity});}},options),{transition:reverser}));};Effect.Fold=function(element){element=$(element);var oldStyle={top:element.style.top,left:element.style.left,width:element.style.width,height:element.style.height};element.makeClipping();return new Effect.Scale(element,5,Object.extend({scaleContent:false,scaleX:false,afterFinishInternal:function(effect){new Effect.Scale(element,1,{scaleContent:false,scaleY:false,afterFinishInternal:function(effect){effect.element.hide().undoClipping().setStyle(oldStyle);}});}},arguments[1]||{}));};Effect.Morph=Class.create(Effect.Base,{initialize:function(element){this.element=$(element);if(!this.element)throw(Effect._elementDoesNotExistError);var options=Object.extend({style:{}},arguments[1]||{});if(!Object.isString(options.style))this.style=$H(options.style);else{if(options.style.include(':'))
629
+ this.style=options.style.parseStyle();else{this.element.addClassName(options.style);this.style=$H(this.element.getStyles());this.element.removeClassName(options.style);var css=this.element.getStyles();this.style=this.style.reject(function(style){return style.value==css[style.key];});options.afterFinishInternal=function(effect){effect.element.addClassName(effect.options.style);effect.transforms.each(function(transform){effect.element.style[transform.style]='';});};}}
630
+ this.start(options);},setup:function(){function parseColor(color){if(!color||['rgba(0, 0, 0, 0)','transparent'].include(color))color='#ffffff';color=color.parseColor();return $R(0,2).map(function(i){return parseInt(color.slice(i*2+1,i*2+3),16);});}
631
+ this.transforms=this.style.map(function(pair){var property=pair[0],value=pair[1],unit=null;if(value.parseColor('#zzzzzz')!='#zzzzzz'){value=value.parseColor();unit='color';}else if(property=='opacity'){value=parseFloat(value);if(Prototype.Browser.IE&&(!this.element.currentStyle.hasLayout))
632
+ this.element.setStyle({zoom:1});}else if(Element.CSS_LENGTH.test(value)){var components=value.match(/^([\+\-]?[0-9\.]+)(.*)$/);value=parseFloat(components[1]);unit=(components.length==3)?components[2]:null;}
633
+ var originalValue=this.element.getStyle(property);return{style:property.camelize(),originalValue:unit=='color'?parseColor(originalValue):parseFloat(originalValue||0),targetValue:unit=='color'?parseColor(value):value,unit:unit};}.bind(this)).reject(function(transform){return((transform.originalValue==transform.targetValue)||(transform.unit!='color'&&(isNaN(transform.originalValue)||isNaN(transform.targetValue))));});},update:function(position){var style={},transform,i=this.transforms.length;while(i--)
634
+ style[(transform=this.transforms[i]).style]=transform.unit=='color'?'#'+
635
+ (Math.round(transform.originalValue[0]+
636
+ (transform.targetValue[0]-transform.originalValue[0])*position)).toColorPart()+
637
+ (Math.round(transform.originalValue[1]+
638
+ (transform.targetValue[1]-transform.originalValue[1])*position)).toColorPart()+
639
+ (Math.round(transform.originalValue[2]+
640
+ (transform.targetValue[2]-transform.originalValue[2])*position)).toColorPart():(transform.originalValue+
641
+ (transform.targetValue-transform.originalValue)*position).toFixed(3)+
642
+ (transform.unit===null?'':transform.unit);this.element.setStyle(style,true);}});Effect.Transform=Class.create({initialize:function(tracks){this.tracks=[];this.options=arguments[1]||{};this.addTracks(tracks);},addTracks:function(tracks){tracks.each(function(track){track=$H(track);var data=track.values().first();this.tracks.push($H({ids:track.keys().first(),effect:Effect.Morph,options:{style:data}}));}.bind(this));return this;},play:function(){return new Effect.Parallel(this.tracks.map(function(track){var ids=track.get('ids'),effect=track.get('effect'),options=track.get('options');var elements=[$(ids)||$$(ids)].flatten();return elements.map(function(e){return new effect(e,Object.extend({sync:true},options))});}).flatten(),this.options);}});Element.CSS_PROPERTIES=$w('backgroundColor backgroundPosition borderBottomColor borderBottomStyle '+'borderBottomWidth borderLeftColor borderLeftStyle borderLeftWidth '+'borderRightColor borderRightStyle borderRightWidth borderSpacing '+'borderTopColor borderTopStyle borderTopWidth bottom clip color '+'fontSize fontWeight height left letterSpacing lineHeight '+'marginBottom marginLeft marginRight marginTop markerOffset maxHeight '+'maxWidth minHeight minWidth opacity outlineColor outlineOffset '+'outlineWidth paddingBottom paddingLeft paddingRight paddingTop '+'right textIndent top width wordSpacing zIndex');Element.CSS_LENGTH=/^(([\+\-]?[0-9\.]+)(em|ex|px|in|cm|mm|pt|pc|\%))|0$/;String.__parseStyleElement=document.createElement('div');String.prototype.parseStyle=function(){var style,styleRules=$H();if(Prototype.Browser.WebKit)
643
+ style=new Element('div',{style:this}).style;else{String.__parseStyleElement.innerHTML='<div style="'+this+'"></div>';style=String.__parseStyleElement.childNodes[0].style;}
644
+ Element.CSS_PROPERTIES.each(function(property){if(style[property])styleRules.set(property,style[property]);});if(Prototype.Browser.IE&&this.include('opacity'))
645
+ styleRules.set('opacity',this.match(/opacity:\s*((?:0|1)?(?:\.\d*)?)/)[1]);return styleRules;};if(document.defaultView&&document.defaultView.getComputedStyle){Element.getStyles=function(element){var css=document.defaultView.getComputedStyle($(element),null);return Element.CSS_PROPERTIES.inject({},function(styles,property){styles[property]=css[property];return styles;});};}else{Element.getStyles=function(element){element=$(element);var css=element.currentStyle,styles;styles=Element.CSS_PROPERTIES.inject({},function(results,property){results[property]=css[property];return results;});if(!styles.opacity)styles.opacity=element.getOpacity();return styles;};}
646
+ Effect.Methods={morph:function(element,style){element=$(element);new Effect.Morph(element,Object.extend({style:style},arguments[2]||{}));return element;},visualEffect:function(element,effect,options){element=$(element);var s=effect.dasherize().camelize(),klass=s.charAt(0).toUpperCase()+s.substring(1);new Effect[klass](element,options);return element;},highlight:function(element,options){element=$(element);new Effect.Highlight(element,options);return element;}};$w('fade appear grow shrink fold blindUp blindDown slideUp slideDown '+'pulsate shake puff squish switchOff dropOut').each(function(effect){Effect.Methods[effect]=function(element,options){element=$(element);Effect[effect.charAt(0).toUpperCase()+effect.substring(1)](element,options);return element;};});$w('getInlineOpacity forceRerendering setContentZoom collectTextNodes collectTextNodesIgnoreClass getStyles').each(function(f){Effect.Methods[f]=Element[f];});Element.addMethods(Effect.Methods);;if(Object.isUndefined(Effect))
647
+ throw("dragdrop.js requires including script.aculo.us' effects.js library");var Droppables={drops:[],remove:function(element){this.drops=this.drops.reject(function(d){return d.element==$(element)});},add:function(element){element=$(element);var options=Object.extend({greedy:true,hoverclass:null,tree:false},arguments[1]||{});if(options.containment){options._containers=[];var containment=options.containment;if(Object.isArray(containment)){containment.each(function(c){options._containers.push($(c))});}else{options._containers.push($(containment));}}
648
+ if(options.accept)options.accept=[options.accept].flatten();Element.makePositioned(element);options.element=element;this.drops.push(options);},findDeepestChild:function(drops){deepest=drops[0];for(i=1;i<drops.length;++i)
649
+ if(Element.isParent(drops[i].element,deepest.element))
650
+ deepest=drops[i];return deepest;},isContained:function(element,drop){var containmentNode;if(drop.tree){containmentNode=element.treeNode;}else{containmentNode=element.parentNode;}
651
+ return drop._containers.detect(function(c){return containmentNode==c});},isAffected:function(point,element,drop){return((drop.element!=element)&&((!drop._containers)||this.isContained(element,drop))&&((!drop.accept)||(Element.classNames(element).detect(function(v){return drop.accept.include(v)})))&&Position.within(drop.element,point[0],point[1]));},deactivate:function(drop){if(drop.hoverclass)
652
+ Element.removeClassName(drop.element,drop.hoverclass);this.last_active=null;},activate:function(drop){if(drop.hoverclass)
653
+ Element.addClassName(drop.element,drop.hoverclass);this.last_active=drop;},show:function(point,element){if(!this.drops.length)return;var drop,affected=[];this.drops.each(function(drop){if(Droppables.isAffected(point,element,drop))
654
+ affected.push(drop);});if(affected.length>0)
655
+ drop=Droppables.findDeepestChild(affected);if(this.last_active&&this.last_active!=drop)this.deactivate(this.last_active);if(drop){Position.within(drop.element,point[0],point[1]);if(drop.onHover)
656
+ drop.onHover(element,drop.element,Position.overlap(drop.overlap,drop.element));if(drop!=this.last_active)Droppables.activate(drop);}},fire:function(event,element){if(!this.last_active)return;Position.prepare();if(this.isAffected([Event.pointerX(event),Event.pointerY(event)],element,this.last_active))
657
+ if(this.last_active.onDrop){this.last_active.onDrop(element,this.last_active.element,event);return true;}},reset:function(){if(this.last_active)
658
+ this.deactivate(this.last_active);}};var Draggables={drags:[],observers:[],register:function(draggable){if(this.drags.length==0){this.eventMouseUp=this.endDrag.bindAsEventListener(this);this.eventMouseMove=this.updateDrag.bindAsEventListener(this);this.eventKeypress=this.keyPress.bindAsEventListener(this);Event.observe(document,"mouseup",this.eventMouseUp);Event.observe(draggable.element,"mousemove",this.eventMouseMove);Event.observe(document,"keypress",this.eventKeypress);}
659
+ this.drags.push(draggable);},unregister:function(draggable){this.drags=this.drags.reject(function(d){return d==draggable});if(this.drags.length==0){Event.stopObserving(document,"mouseup",this.eventMouseUp);Event.stopObserving(draggable.element,"mousemove",this.eventMouseMove);Event.stopObserving(document,"keypress",this.eventKeypress);}},activate:function(draggable){if(draggable.options.delay){this._timeout=setTimeout(function(){Draggables._timeout=null;window.focus();Draggables.activeDraggable=draggable;}.bind(this),draggable.options.delay);}else{window.focus();this.activeDraggable=draggable;}},deactivate:function(){this.activeDraggable=null;},updateDrag:function(event){if(!this.activeDraggable)return;var pointer=[Event.pointerX(event),Event.pointerY(event)];if(this._lastPointer&&(this._lastPointer.inspect()==pointer.inspect()))return;this._lastPointer=pointer;this.activeDraggable.updateDrag(event,pointer);},endDrag:function(event){if(this._timeout){clearTimeout(this._timeout);this._timeout=null;}
660
+ if(!this.activeDraggable)return;this._lastPointer=null;this.activeDraggable.endDrag(event);this.activeDraggable=null;},keyPress:function(event){if(this.activeDraggable)
661
+ this.activeDraggable.keyPress(event);},addObserver:function(observer){this.observers.push(observer);this._cacheObserverCallbacks();},removeObserver:function(element){this.observers=this.observers.reject(function(o){return o.element==element});this._cacheObserverCallbacks();},notify:function(eventName,draggable,event){if(this[eventName+'Count']>0)
662
+ this.observers.each(function(o){if(o[eventName])o[eventName](eventName,draggable,event);});if(draggable.options[eventName])draggable.options[eventName](draggable,event);},_cacheObserverCallbacks:function(){['onStart','onEnd','onDrag'].each(function(eventName){Draggables[eventName+'Count']=Draggables.observers.select(function(o){return o[eventName];}).length;});}};var Draggable=Class.create({initialize:function(element){var defaults={handle:false,reverteffect:function(element,top_offset,left_offset){var dur=Math.sqrt(Math.abs(top_offset^2)+Math.abs(left_offset^2))*0.02;new Effect.Move(element,{x:-left_offset,y:-top_offset,duration:dur,queue:{scope:'_draggable',position:'end'}});},endeffect:function(element){var toOpacity=Object.isNumber(element._opacity)?element._opacity:1.0;new Effect.Opacity(element,{duration:0.2,from:0.7,to:toOpacity,queue:{scope:'_draggable',position:'end'},afterFinish:function(){Draggable._dragging[element]=false}});},zindex:1000,revert:false,quiet:false,scroll:false,scrollSensitivity:20,scrollSpeed:15,snap:false,delay:0};if(!arguments[1]||Object.isUndefined(arguments[1].endeffect))
663
+ Object.extend(defaults,{starteffect:function(element){element._opacity=Element.getOpacity(element);Draggable._dragging[element]=true;new Effect.Opacity(element,{duration:0.2,from:element._opacity,to:0.7});}});var options=Object.extend(defaults,arguments[1]||{});this.element=$(element);if(options.handle&&Object.isString(options.handle))
664
+ this.handle=this.element.down('.'+options.handle,0);if(!this.handle)this.handle=$(options.handle);if(!this.handle)this.handle=this.element;if(options.scroll&&!options.scroll.scrollTo&&!options.scroll.outerHTML){options.scroll=$(options.scroll);this._isScrollChild=Element.childOf(this.element,options.scroll);}
665
+ Element.makePositioned(this.element);this.options=options;this.dragging=false;this.eventMouseDown=this.initDrag.bindAsEventListener(this);Event.observe(this.handle,"mousedown",this.eventMouseDown);Draggables.register(this);},destroy:function(){Event.stopObserving(this.handle,"mousedown",this.eventMouseDown);Draggables.unregister(this);},currentDelta:function(){return([parseInt(Element.getStyle(this.element,'left')||'0'),parseInt(Element.getStyle(this.element,'top')||'0')]);},initDrag:function(event){if(!Object.isUndefined(Draggable._dragging[this.element])&&Draggable._dragging[this.element])return;if(Event.isLeftClick(event)){var src=Event.element(event);if((tag_name=src.tagName.toUpperCase())&&(tag_name=='INPUT'||tag_name=='SELECT'||tag_name=='OPTION'||tag_name=='BUTTON'||tag_name=='TEXTAREA'))return;var pointer=[Event.pointerX(event),Event.pointerY(event)];var pos=Position.cumulativeOffset(this.element);this.offset=[0,1].map(function(i){return(pointer[i]-pos[i])});Draggables.activate(this);Event.stop(event);}},startDrag:function(event){this.dragging=true;if(!this.delta)
666
+ this.delta=this.currentDelta();if(this.options.zindex){this.originalZ=parseInt(Element.getStyle(this.element,'z-index')||0);this.element.style.zIndex=this.options.zindex;}
667
+ if(this.options.ghosting){this._clone=this.element.cloneNode(true);this._originallyAbsolute=(this.element.getStyle('position')=='absolute');if(!this._originallyAbsolute)
668
+ Position.absolutize(this.element);this.element.parentNode.insertBefore(this._clone,this.element);}
669
+ if(this.options.scroll){if(this.options.scroll==window){var where=this._getWindowScroll(this.options.scroll);this.originalScrollLeft=where.left;this.originalScrollTop=where.top;}else{this.originalScrollLeft=this.options.scroll.scrollLeft;this.originalScrollTop=this.options.scroll.scrollTop;}}
670
+ Draggables.notify('onStart',this,event);if(this.options.starteffect)this.options.starteffect(this.element);},updateDrag:function(event,pointer){if(!this.dragging)this.startDrag(event);if(!this.options.quiet){Position.prepare();Droppables.show(pointer,this.element);}
671
+ Draggables.notify('onDrag',this,event);this.draw(pointer);if(this.options.change)this.options.change(this);if(this.options.scroll){this.stopScrolling();var p;if(this.options.scroll==window){with(this._getWindowScroll(this.options.scroll)){p=[left,top,left+width,top+height];}}else{p=Position.page(this.options.scroll);p[0]+=this.options.scroll.scrollLeft+Position.deltaX;p[1]+=this.options.scroll.scrollTop+Position.deltaY;p.push(p[0]+this.options.scroll.offsetWidth);p.push(p[1]+this.options.scroll.offsetHeight);}
672
+ var speed=[0,0];if(pointer[0]<(p[0]+this.options.scrollSensitivity))speed[0]=pointer[0]-(p[0]+this.options.scrollSensitivity);if(pointer[1]<(p[1]+this.options.scrollSensitivity))speed[1]=pointer[1]-(p[1]+this.options.scrollSensitivity);if(pointer[0]>(p[2]-this.options.scrollSensitivity))speed[0]=pointer[0]-(p[2]-this.options.scrollSensitivity);if(pointer[1]>(p[3]-this.options.scrollSensitivity))speed[1]=pointer[1]-(p[3]-this.options.scrollSensitivity);this.startScrolling(speed);}
673
+ if(Prototype.Browser.WebKit)window.scrollBy(0,0);Event.stop(event);},finishDrag:function(event,success){this.dragging=false;if(this.options.quiet){Position.prepare();var pointer=[Event.pointerX(event),Event.pointerY(event)];Droppables.show(pointer,this.element);}
674
+ if(this.options.ghosting){if(!this._originallyAbsolute)
675
+ Position.relativize(this.element);delete this._originallyAbsolute;Element.remove(this._clone);this._clone=null;}
676
+ var dropped=false;if(success){dropped=Droppables.fire(event,this.element);if(!dropped)dropped=false;}
677
+ if(dropped&&this.options.onDropped)this.options.onDropped(this.element);Draggables.notify('onEnd',this,event);var revert=this.options.revert;if(revert&&Object.isFunction(revert))revert=revert(this.element);var d=this.currentDelta();if(revert&&this.options.reverteffect){if(dropped==0||revert!='failure')
678
+ this.options.reverteffect(this.element,d[1]-this.delta[1],d[0]-this.delta[0]);}else{this.delta=d;}
679
+ if(this.options.zindex)
680
+ this.element.style.zIndex=this.originalZ;if(this.options.endeffect)
681
+ this.options.endeffect(this.element);Draggables.deactivate(this);Droppables.reset();},keyPress:function(event){if(event.keyCode!=Event.KEY_ESC)return;this.finishDrag(event,false);Event.stop(event);},endDrag:function(event){if(!this.dragging)return;this.stopScrolling();this.finishDrag(event,true);Event.stop(event);},draw:function(point){var pos=Position.cumulativeOffset(this.element);if(this.options.ghosting){var r=Position.realOffset(this.element);pos[0]+=r[0]-Position.deltaX;pos[1]+=r[1]-Position.deltaY;}
682
+ var d=this.currentDelta();pos[0]-=d[0];pos[1]-=d[1];if(this.options.scroll&&(this.options.scroll!=window&&this._isScrollChild)){pos[0]-=this.options.scroll.scrollLeft-this.originalScrollLeft;pos[1]-=this.options.scroll.scrollTop-this.originalScrollTop;}
683
+ var p=[0,1].map(function(i){return(point[i]-pos[i]-this.offset[i])}.bind(this));if(this.options.snap){if(Object.isFunction(this.options.snap)){p=this.options.snap(p[0],p[1],this);}else{if(Object.isArray(this.options.snap)){p=p.map(function(v,i){return(v/this.options.snap[i]).round()*this.options.snap[i]}.bind(this));}else{p=p.map(function(v){return(v/this.options.snap).round()*this.options.snap}.bind(this));}}}
684
+ var style=this.element.style;if((!this.options.constraint)||(this.options.constraint=='horizontal'))
685
+ style.left=p[0]+"px";if((!this.options.constraint)||(this.options.constraint=='vertical'))
686
+ style.top=p[1]+"px";if(style.visibility=="hidden")style.visibility="";},stopScrolling:function(){if(this.scrollInterval){clearInterval(this.scrollInterval);this.scrollInterval=null;Draggables._lastScrollPointer=null;}},startScrolling:function(speed){if(!(speed[0]||speed[1]))return;this.scrollSpeed=[speed[0]*this.options.scrollSpeed,speed[1]*this.options.scrollSpeed];this.lastScrolled=new Date();this.scrollInterval=setInterval(this.scroll.bind(this),10);},scroll:function(){var current=new Date();var delta=current-this.lastScrolled;this.lastScrolled=current;if(this.options.scroll==window){with(this._getWindowScroll(this.options.scroll)){if(this.scrollSpeed[0]||this.scrollSpeed[1]){var d=delta/1000;this.options.scroll.scrollTo(left+d*this.scrollSpeed[0],top+d*this.scrollSpeed[1]);}}}else{this.options.scroll.scrollLeft+=this.scrollSpeed[0]*delta/1000;this.options.scroll.scrollTop+=this.scrollSpeed[1]*delta/1000;}
687
+ Position.prepare();Droppables.show(Draggables._lastPointer,this.element);Draggables.notify('onDrag',this);if(this._isScrollChild){Draggables._lastScrollPointer=Draggables._lastScrollPointer||$A(Draggables._lastPointer);Draggables._lastScrollPointer[0]+=this.scrollSpeed[0]*delta/1000;Draggables._lastScrollPointer[1]+=this.scrollSpeed[1]*delta/1000;if(Draggables._lastScrollPointer[0]<0)
688
+ Draggables._lastScrollPointer[0]=0;if(Draggables._lastScrollPointer[1]<0)
689
+ Draggables._lastScrollPointer[1]=0;this.draw(Draggables._lastScrollPointer);}
690
+ if(this.options.change)this.options.change(this);},_getWindowScroll:function(w){var T,L,W,H;with(w.document){if(w.document.documentElement&&documentElement.scrollTop){T=documentElement.scrollTop;L=documentElement.scrollLeft;}else if(w.document.body){T=body.scrollTop;L=body.scrollLeft;}
691
+ if(w.innerWidth){W=w.innerWidth;H=w.innerHeight;}else if(w.document.documentElement&&documentElement.clientWidth){W=documentElement.clientWidth;H=documentElement.clientHeight;}else{W=body.offsetWidth;H=body.offsetHeight;}}
692
+ return{top:T,left:L,width:W,height:H};}});Draggable._dragging={};var SortableObserver=Class.create({initialize:function(element,observer){this.element=$(element);this.observer=observer;this.lastValue=Sortable.serialize(this.element);},onStart:function(){this.lastValue=Sortable.serialize(this.element);},onEnd:function(){Sortable.unmark();if(this.lastValue!=Sortable.serialize(this.element))
693
+ this.observer(this.element)}});var Sortable={SERIALIZE_RULE:/^[^_\-](?:[A-Za-z0-9\-\_]*)[_](.*)$/,sortables:{},_findRootElement:function(element){while(element.tagName.toUpperCase()!="BODY"){if(element.id&&Sortable.sortables[element.id])return element;element=element.parentNode;}},options:function(element){element=Sortable._findRootElement($(element));if(!element)return;return Sortable.sortables[element.id];},destroy:function(element){element=$(element);var s=Sortable.sortables[element.id];if(s){Draggables.removeObserver(s.element);s.droppables.each(function(d){Droppables.remove(d)});s.draggables.invoke('destroy');delete Sortable.sortables[s.element.id];}},create:function(element){element=$(element);var options=Object.extend({element:element,tag:'li',dropOnEmpty:false,tree:false,treeTag:'ul',overlap:'vertical',constraint:'vertical',containment:element,handle:false,only:false,delay:0,hoverclass:null,ghosting:false,quiet:false,scroll:false,scrollSensitivity:20,scrollSpeed:15,format:this.SERIALIZE_RULE,elements:false,handles:false,onChange:Prototype.emptyFunction,onUpdate:Prototype.emptyFunction},arguments[1]||{});this.destroy(element);var options_for_draggable={revert:true,quiet:options.quiet,scroll:options.scroll,scrollSpeed:options.scrollSpeed,scrollSensitivity:options.scrollSensitivity,delay:options.delay,ghosting:options.ghosting,constraint:options.constraint,handle:options.handle};if(options.starteffect)
694
+ options_for_draggable.starteffect=options.starteffect;if(options.reverteffect)
695
+ options_for_draggable.reverteffect=options.reverteffect;else
696
+ if(options.ghosting)options_for_draggable.reverteffect=function(element){element.style.top=0;element.style.left=0;};if(options.endeffect)
697
+ options_for_draggable.endeffect=options.endeffect;if(options.zindex)
698
+ options_for_draggable.zindex=options.zindex;var options_for_droppable={overlap:options.overlap,containment:options.containment,tree:options.tree,hoverclass:options.hoverclass,onHover:Sortable.onHover};var options_for_tree={onHover:Sortable.onEmptyHover,overlap:options.overlap,containment:options.containment,hoverclass:options.hoverclass};Element.cleanWhitespace(element);options.draggables=[];options.droppables=[];if(options.dropOnEmpty||options.tree){Droppables.add(element,options_for_tree);options.droppables.push(element);}
699
+ (options.elements||this.findElements(element,options)||[]).each(function(e,i){var handle=options.handles?$(options.handles[i]):(options.handle?$(e).select('.'+options.handle)[0]:e);options.draggables.push(new Draggable(e,Object.extend(options_for_draggable,{handle:handle})));Droppables.add(e,options_for_droppable);if(options.tree)e.treeNode=element;options.droppables.push(e);});if(options.tree){(Sortable.findTreeElements(element,options)||[]).each(function(e){Droppables.add(e,options_for_tree);e.treeNode=element;options.droppables.push(e);});}
700
+ this.sortables[element.id]=options;Draggables.addObserver(new SortableObserver(element,options.onUpdate));},findElements:function(element,options){return Element.findChildren(element,options.only,options.tree?true:false,options.tag);},findTreeElements:function(element,options){return Element.findChildren(element,options.only,options.tree?true:false,options.treeTag);},onHover:function(element,dropon,overlap){if(Element.isParent(dropon,element))return;if(overlap>.33&&overlap<.66&&Sortable.options(dropon).tree){return;}else if(overlap>0.5){Sortable.mark(dropon,'before');if(dropon.previousSibling!=element){var oldParentNode=element.parentNode;element.style.visibility="hidden";dropon.parentNode.insertBefore(element,dropon);if(dropon.parentNode!=oldParentNode)
701
+ Sortable.options(oldParentNode).onChange(element);Sortable.options(dropon.parentNode).onChange(element);}}else{Sortable.mark(dropon,'after');var nextElement=dropon.nextSibling||null;if(nextElement!=element){var oldParentNode=element.parentNode;element.style.visibility="hidden";dropon.parentNode.insertBefore(element,nextElement);if(dropon.parentNode!=oldParentNode)
702
+ Sortable.options(oldParentNode).onChange(element);Sortable.options(dropon.parentNode).onChange(element);}}},onEmptyHover:function(element,dropon,overlap){var oldParentNode=element.parentNode;var droponOptions=Sortable.options(dropon);if(!Element.isParent(dropon,element)){var index;var children=Sortable.findElements(dropon,{tag:droponOptions.tag,only:droponOptions.only});var child=null;if(children){var offset=Element.offsetSize(dropon,droponOptions.overlap)*(1.0-overlap);for(index=0;index<children.length;index+=1){if(offset-Element.offsetSize(children[index],droponOptions.overlap)>=0){offset-=Element.offsetSize(children[index],droponOptions.overlap);}else if(offset-(Element.offsetSize(children[index],droponOptions.overlap)/2)>=0){child=index+1<children.length?children[index+1]:null;break;}else{child=children[index];break;}}}
703
+ dropon.insertBefore(element,child);Sortable.options(oldParentNode).onChange(element);droponOptions.onChange(element);}},unmark:function(){if(Sortable._marker)Sortable._marker.hide();},mark:function(dropon,position){var sortable=Sortable.options(dropon.parentNode);if(sortable&&!sortable.ghosting)return;if(!Sortable._marker){Sortable._marker=($('dropmarker')||Element.extend(document.createElement('DIV'))).hide().addClassName('dropmarker').setStyle({position:'absolute'});document.getElementsByTagName("body").item(0).appendChild(Sortable._marker);}
704
+ var offsets=Position.cumulativeOffset(dropon);Sortable._marker.setStyle({left:offsets[0]+'px',top:offsets[1]+'px'});if(position=='after')
705
+ if(sortable.overlap=='horizontal')
706
+ Sortable._marker.setStyle({left:(offsets[0]+dropon.clientWidth)+'px'});else
707
+ Sortable._marker.setStyle({top:(offsets[1]+dropon.clientHeight)+'px'});Sortable._marker.show();},_tree:function(element,options,parent){var children=Sortable.findElements(element,options)||[];for(var i=0;i<children.length;++i){var match=children[i].id.match(options.format);if(!match)continue;var child={id:encodeURIComponent(match?match[1]:null),element:element,parent:parent,children:[],position:parent.children.length,container:$(children[i]).down(options.treeTag)};if(child.container)
708
+ this._tree(child.container,options,child);parent.children.push(child);}
709
+ return parent;},tree:function(element){element=$(element);var sortableOptions=this.options(element);var options=Object.extend({tag:sortableOptions.tag,treeTag:sortableOptions.treeTag,only:sortableOptions.only,name:element.id,format:sortableOptions.format},arguments[1]||{});var root={id:null,parent:null,children:[],container:element,position:0};return Sortable._tree(element,options,root);},_constructIndex:function(node){var index='';do{if(node.id)index='['+node.position+']'+index;}while((node=node.parent)!=null);return index;},sequence:function(element){element=$(element);var options=Object.extend(this.options(element),arguments[1]||{});return $(this.findElements(element,options)||[]).map(function(item){return item.id.match(options.format)?item.id.match(options.format)[1]:'';});},setSequence:function(element,new_sequence){element=$(element);var options=Object.extend(this.options(element),arguments[2]||{});var nodeMap={};this.findElements(element,options).each(function(n){if(n.id.match(options.format))
710
+ nodeMap[n.id.match(options.format)[1]]=[n,n.parentNode];n.parentNode.removeChild(n);});new_sequence.each(function(ident){var n=nodeMap[ident];if(n){n[1].appendChild(n[0]);delete nodeMap[ident];}});},serialize:function(element){element=$(element);var options=Object.extend(Sortable.options(element),arguments[1]||{});var name=encodeURIComponent((arguments[1]&&arguments[1].name)?arguments[1].name:element.id);if(options.tree){return Sortable.tree(element,arguments[1]).children.map(function(item){return[name+Sortable._constructIndex(item)+"[id]="+
711
+ encodeURIComponent(item.id)].concat(item.children.map(arguments.callee));}).flatten().join('&');}else{return Sortable.sequence(element,arguments[1]).map(function(item){return name+"[]="+encodeURIComponent(item);}).join('&');}}};Element.isParent=function(child,element){if(!child.parentNode||child==element)return false;if(child.parentNode==element)return true;return Element.isParent(child.parentNode,element);};Element.findChildren=function(element,only,recursive,tagName){if(!element.hasChildNodes())return null;tagName=tagName.toUpperCase();if(only)only=[only].flatten();var elements=[];$A(element.childNodes).each(function(e){if(e.tagName&&e.tagName.toUpperCase()==tagName&&(!only||(Element.classNames(e).detect(function(v){return only.include(v)}))))
712
+ elements.push(e);if(recursive){var grandchildren=Element.findChildren(e,only,recursive,tagName);if(grandchildren)elements.push(grandchildren);}});return(elements.length>0?elements.flatten():[]);};Element.offsetSize=function(element,type){return element['offset'+((type=='vertical'||type=='height')?'Height':'Width')];};;if(typeof Effect=='undefined')
713
+ throw("controls.js requires including script.aculo.us' effects.js library");var Autocompleter={};Autocompleter.Base=Class.create({baseInitialize:function(element,update,options){element=$(element);this.element=element;this.update=$(update);this.hasFocus=false;this.changed=false;this.active=false;this.index=0;this.entryCount=0;this.oldElementValue=this.element.value;if(this.setOptions)
714
+ this.setOptions(options);else
715
+ this.options=options||{};this.options.paramName=this.options.paramName||this.element.name;this.options.tokens=this.options.tokens||[];this.options.frequency=this.options.frequency||0.4;this.options.minChars=this.options.minChars||1;this.options.onShow=this.options.onShow||function(element,update){if(!update.style.position||update.style.position=='absolute'){update.style.position='absolute';Position.clone(element,update,{setHeight:false,offsetTop:element.offsetHeight});}
716
+ Effect.Appear(update,{duration:0.15});};this.options.onHide=this.options.onHide||function(element,update){new Effect.Fade(update,{duration:0.15})};if(typeof(this.options.tokens)=='string')
717
+ this.options.tokens=new Array(this.options.tokens);if(!this.options.tokens.include('\n'))
718
+ this.options.tokens.push('\n');this.observer=null;this.element.setAttribute('autocomplete','off');Element.hide(this.update);Event.observe(this.element,'blur',this.onBlur.bindAsEventListener(this));Event.observe(this.element,'keydown',this.onKeyPress.bindAsEventListener(this));},show:function(){if(Element.getStyle(this.update,'display')=='none')this.options.onShow(this.element,this.update);if(!this.iefix&&(Prototype.Browser.IE)&&(Element.getStyle(this.update,'position')=='absolute')){new Insertion.After(this.update,'<iframe id="'+this.update.id+'_iefix" '+'style="display:none;position:absolute;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0);" '+'src="javascript:false;" frameborder="0" scrolling="no"></iframe>');this.iefix=$(this.update.id+'_iefix');}
719
+ if(this.iefix)setTimeout(this.fixIEOverlapping.bind(this),50);},fixIEOverlapping:function(){Position.clone(this.update,this.iefix,{setTop:(!this.update.style.height)});this.iefix.style.zIndex=1;this.update.style.zIndex=2;Element.show(this.iefix);},hide:function(){this.stopIndicator();if(Element.getStyle(this.update,'display')!='none')this.options.onHide(this.element,this.update);if(this.iefix)Element.hide(this.iefix);},startIndicator:function(){if(this.options.indicator)Element.show(this.options.indicator);},stopIndicator:function(){if(this.options.indicator)Element.hide(this.options.indicator);},onKeyPress:function(event){if(this.active)
720
+ switch(event.keyCode){case Event.KEY_TAB:case Event.KEY_RETURN:this.selectEntry();Event.stop(event);case Event.KEY_ESC:this.hide();this.active=false;Event.stop(event);return;case Event.KEY_LEFT:case Event.KEY_RIGHT:return;case Event.KEY_UP:this.markPrevious();this.render();Event.stop(event);return;case Event.KEY_DOWN:this.markNext();this.render();Event.stop(event);return;}
721
+ else
722
+ if(event.keyCode==Event.KEY_TAB||event.keyCode==Event.KEY_RETURN||(Prototype.Browser.WebKit>0&&event.keyCode==0))return;this.changed=true;this.hasFocus=true;if(this.observer)clearTimeout(this.observer);this.observer=setTimeout(this.onObserverEvent.bind(this),this.options.frequency*1000);},activate:function(){this.changed=false;this.hasFocus=true;this.getUpdatedChoices();},onHover:function(event){var element=Event.findElement(event,'LI');if(this.index!=element.autocompleteIndex)
723
+ {this.index=element.autocompleteIndex;this.render();}
724
+ Event.stop(event);},onClick:function(event){var element=Event.findElement(event,'LI');this.index=element.autocompleteIndex;this.selectEntry();this.hide();},onBlur:function(event){setTimeout(this.hide.bind(this),250);this.hasFocus=false;this.active=false;},render:function(){if(this.entryCount>0){for(var i=0;i<this.entryCount;i++)
725
+ this.index==i?Element.addClassName(this.getEntry(i),"selected"):Element.removeClassName(this.getEntry(i),"selected");if(this.hasFocus){this.show();this.active=true;}}else{this.active=false;this.hide();}},markPrevious:function(){if(this.index>0)this.index--;else this.index=this.entryCount-1;},markNext:function(){if(this.index<this.entryCount-1)this.index++;else this.index=0;this.getEntry(this.index).scrollIntoView(false);},getEntry:function(index){return this.update.firstChild.childNodes[index];},getCurrentEntry:function(){return this.getEntry(this.index);},selectEntry:function(){this.active=false;this.updateElement(this.getCurrentEntry());},updateElement:function(selectedElement){if(this.options.updateElement){this.options.updateElement(selectedElement);return;}
726
+ var value='';if(this.options.select){var nodes=$(selectedElement).select('.'+this.options.select)||[];if(nodes.length>0)value=Element.collectTextNodes(nodes[0],this.options.select);}else
727
+ value=Element.collectTextNodesIgnoreClass(selectedElement,'informal');var bounds=this.getTokenBounds();if(bounds[0]!=-1){var newValue=this.element.value.substr(0,bounds[0]);var whitespace=this.element.value.substr(bounds[0]).match(/^\s+/);if(whitespace)
728
+ newValue+=whitespace[0];this.element.value=newValue+value+this.element.value.substr(bounds[1]);}else{this.element.value=value;}
729
+ this.oldElementValue=this.element.value;this.element.focus();if(this.options.afterUpdateElement)
730
+ this.options.afterUpdateElement(this.element,selectedElement);},updateChoices:function(choices){if(!this.changed&&this.hasFocus){this.update.innerHTML=choices;Element.cleanWhitespace(this.update);Element.cleanWhitespace(this.update.down());if(this.update.firstChild&&this.update.down().childNodes){this.entryCount=this.update.down().childNodes.length;for(var i=0;i<this.entryCount;i++){var entry=this.getEntry(i);entry.autocompleteIndex=i;this.addObservers(entry);}}else{this.entryCount=0;}
731
+ this.stopIndicator();this.index=0;if(this.entryCount==1&&this.options.autoSelect){this.selectEntry();this.hide();}else{this.render();}}},addObservers:function(element){Event.observe(element,"mouseover",this.onHover.bindAsEventListener(this));Event.observe(element,"click",this.onClick.bindAsEventListener(this));},onObserverEvent:function(){this.changed=false;this.tokenBounds=null;if(this.getToken().length>=this.options.minChars){this.getUpdatedChoices();}else{this.active=false;this.hide();}
732
+ this.oldElementValue=this.element.value;},getToken:function(){var bounds=this.getTokenBounds();return this.element.value.substring(bounds[0],bounds[1]).strip();},getTokenBounds:function(){if(null!=this.tokenBounds)return this.tokenBounds;var value=this.element.value;if(value.strip().empty())return[-1,0];var diff=arguments.callee.getFirstDifferencePos(value,this.oldElementValue);var offset=(diff==this.oldElementValue.length?1:0);var prevTokenPos=-1,nextTokenPos=value.length;var tp;for(var index=0,l=this.options.tokens.length;index<l;++index){tp=value.lastIndexOf(this.options.tokens[index],diff+offset-1);if(tp>prevTokenPos)prevTokenPos=tp;tp=value.indexOf(this.options.tokens[index],diff+offset);if(-1!=tp&&tp<nextTokenPos)nextTokenPos=tp;}
733
+ return(this.tokenBounds=[prevTokenPos+1,nextTokenPos]);}});Autocompleter.Base.prototype.getTokenBounds.getFirstDifferencePos=function(newS,oldS){var boundary=Math.min(newS.length,oldS.length);for(var index=0;index<boundary;++index)
734
+ if(newS[index]!=oldS[index])
735
+ return index;return boundary;};Ajax.Autocompleter=Class.create(Autocompleter.Base,{initialize:function(element,update,url,options){this.baseInitialize(element,update,options);this.options.asynchronous=true;this.options.onComplete=this.onComplete.bind(this);this.options.defaultParams=this.options.parameters||null;this.url=url;},getUpdatedChoices:function(){this.startIndicator();var entry=encodeURIComponent(this.options.paramName)+'='+
736
+ encodeURIComponent(this.getToken());this.options.parameters=this.options.callback?this.options.callback(this.element,entry):entry;if(this.options.defaultParams)
737
+ this.options.parameters+='&'+this.options.defaultParams;new Ajax.Request(this.url,this.options);},onComplete:function(request){this.updateChoices(request.responseText);}});Autocompleter.Local=Class.create(Autocompleter.Base,{initialize:function(element,update,array,options){this.baseInitialize(element,update,options);this.options.array=array;},getUpdatedChoices:function(){this.updateChoices(this.options.selector(this));},setOptions:function(options){this.options=Object.extend({choices:10,partialSearch:true,partialChars:2,ignoreCase:true,fullSearch:false,selector:function(instance){var ret=[];var partial=[];var entry=instance.getToken();var count=0;for(var i=0;i<instance.options.array.length&&ret.length<instance.options.choices;i++){var elem=instance.options.array[i];var foundPos=instance.options.ignoreCase?elem.toLowerCase().indexOf(entry.toLowerCase()):elem.indexOf(entry);while(foundPos!=-1){if(foundPos==0&&elem.length!=entry.length){ret.push("<li><strong>"+elem.substr(0,entry.length)+"</strong>"+
738
+ elem.substr(entry.length)+"</li>");break;}else if(entry.length>=instance.options.partialChars&&instance.options.partialSearch&&foundPos!=-1){if(instance.options.fullSearch||/\s/.test(elem.substr(foundPos-1,1))){partial.push("<li>"+elem.substr(0,foundPos)+"<strong>"+
739
+ elem.substr(foundPos,entry.length)+"</strong>"+elem.substr(foundPos+entry.length)+"</li>");break;}}
740
+ foundPos=instance.options.ignoreCase?elem.toLowerCase().indexOf(entry.toLowerCase(),foundPos+1):elem.indexOf(entry,foundPos+1);}}
741
+ if(partial.length)
742
+ ret=ret.concat(partial.slice(0,instance.options.choices-ret.length));return"<ul>"+ret.join('')+"</ul>";}},options||{});}});Field.scrollFreeActivate=function(field){setTimeout(function(){Field.activate(field);},1);};Ajax.InPlaceEditor=Class.create({initialize:function(element,url,options){this.url=url;this.element=element=$(element);this.prepareOptions();this._controls={};arguments.callee.dealWithDeprecatedOptions(options);Object.extend(this.options,options||{});if(!this.options.formId&&this.element.id){this.options.formId=this.element.id+'-inplaceeditor';if($(this.options.formId))
743
+ this.options.formId='';}
744
+ if(this.options.externalControl)
745
+ this.options.externalControl=$(this.options.externalControl);if(!this.options.externalControl)
746
+ this.options.externalControlOnly=false;this._originalBackground=this.element.getStyle('background-color')||'transparent';this.element.title=this.options.clickToEditText;this._boundCancelHandler=this.handleFormCancellation.bind(this);this._boundComplete=(this.options.onComplete||Prototype.emptyFunction).bind(this);this._boundFailureHandler=this.handleAJAXFailure.bind(this);this._boundSubmitHandler=this.handleFormSubmission.bind(this);this._boundWrapperHandler=this.wrapUp.bind(this);this.registerListeners();},checkForEscapeOrReturn:function(e){if(!this._editing||e.ctrlKey||e.altKey||e.shiftKey)return;if(Event.KEY_ESC==e.keyCode)
747
+ this.handleFormCancellation(e);else if(Event.KEY_RETURN==e.keyCode)
748
+ this.handleFormSubmission(e);},createControl:function(mode,handler,extraClasses){var control=this.options[mode+'Control'];var text=this.options[mode+'Text'];if('button'==control){var btn=document.createElement('input');btn.type='submit';btn.value=text;btn.className='editor_'+mode+'_button';if('cancel'==mode)
749
+ btn.onclick=this._boundCancelHandler;this._form.appendChild(btn);this._controls[mode]=btn;}else if('link'==control){var link=document.createElement('a');link.href='#';link.appendChild(document.createTextNode(text));link.onclick='cancel'==mode?this._boundCancelHandler:this._boundSubmitHandler;link.className='editor_'+mode+'_link';if(extraClasses)
750
+ link.className+=' '+extraClasses;this._form.appendChild(link);this._controls[mode]=link;}},createEditField:function(){var text=(this.options.loadTextURL?this.options.loadingText:this.getText());var fld;if(1>=this.options.rows&&!/\r|\n/.test(this.getText())){fld=document.createElement('input');fld.type='text';var size=this.options.size||this.options.cols||0;if(0<size)fld.size=size;}else{fld=document.createElement('textarea');fld.rows=(1>=this.options.rows?this.options.autoRows:this.options.rows);fld.cols=this.options.cols||40;}
751
+ fld.name=this.options.paramName;fld.value=text;fld.className='editor_field';if(this.options.submitOnBlur)
752
+ fld.onblur=this._boundSubmitHandler;this._controls.editor=fld;if(this.options.loadTextURL)
753
+ this.loadExternalText();this._form.appendChild(this._controls.editor);},createForm:function(){var ipe=this;function addText(mode,condition){var text=ipe.options['text'+mode+'Controls'];if(!text||condition===false)return;ipe._form.appendChild(document.createTextNode(text));};this._form=$(document.createElement('form'));this._form.id=this.options.formId;this._form.addClassName(this.options.formClassName);this._form.onsubmit=this._boundSubmitHandler;this.createEditField();if('textarea'==this._controls.editor.tagName.toLowerCase())
754
+ this._form.appendChild(document.createElement('br'));if(this.options.onFormCustomization)
755
+ this.options.onFormCustomization(this,this._form);addText('Before',this.options.okControl||this.options.cancelControl);this.createControl('ok',this._boundSubmitHandler);addText('Between',this.options.okControl&&this.options.cancelControl);this.createControl('cancel',this._boundCancelHandler,'editor_cancel');addText('After',this.options.okControl||this.options.cancelControl);},destroy:function(){if(this._oldInnerHTML)
756
+ this.element.innerHTML=this._oldInnerHTML;this.leaveEditMode();this.unregisterListeners();},enterEditMode:function(e){if(this._saving||this._editing)return;this._editing=true;this.triggerCallback('onEnterEditMode');if(this.options.externalControl)
757
+ this.options.externalControl.hide();this.element.hide();this.createForm();this.element.parentNode.insertBefore(this._form,this.element);if(!this.options.loadTextURL)
758
+ this.postProcessEditField();if(e)Event.stop(e);},enterHover:function(e){if(this.options.hoverClassName)
759
+ this.element.addClassName(this.options.hoverClassName);if(this._saving)return;this.triggerCallback('onEnterHover');},getText:function(){return this.element.innerHTML.unescapeHTML();},handleAJAXFailure:function(transport){this.triggerCallback('onFailure',transport);if(this._oldInnerHTML){this.element.innerHTML=this._oldInnerHTML;this._oldInnerHTML=null;}},handleFormCancellation:function(e){this.wrapUp();if(e)Event.stop(e);},handleFormSubmission:function(e){var form=this._form;var value=$F(this._controls.editor);this.prepareSubmission();var params=this.options.callback(form,value)||'';if(Object.isString(params))
760
+ params=params.toQueryParams();params.editorId=this.element.id;if(this.options.htmlResponse){var options=Object.extend({evalScripts:true},this.options.ajaxOptions);Object.extend(options,{parameters:params,onComplete:this._boundWrapperHandler,onFailure:this._boundFailureHandler});new Ajax.Updater({success:this.element},this.url,options);}else{var options=Object.extend({method:'get'},this.options.ajaxOptions);Object.extend(options,{parameters:params,onComplete:this._boundWrapperHandler,onFailure:this._boundFailureHandler});new Ajax.Request(this.url,options);}
761
+ if(e)Event.stop(e);},leaveEditMode:function(){this.element.removeClassName(this.options.savingClassName);this.removeForm();this.leaveHover();this.element.style.backgroundColor=this._originalBackground;this.element.show();if(this.options.externalControl)
762
+ this.options.externalControl.show();this._saving=false;this._editing=false;this._oldInnerHTML=null;this.triggerCallback('onLeaveEditMode');},leaveHover:function(e){if(this.options.hoverClassName)
763
+ this.element.removeClassName(this.options.hoverClassName);if(this._saving)return;this.triggerCallback('onLeaveHover');},loadExternalText:function(){this._form.addClassName(this.options.loadingClassName);this._controls.editor.disabled=true;var options=Object.extend({method:'get'},this.options.ajaxOptions);Object.extend(options,{parameters:'editorId='+encodeURIComponent(this.element.id),onComplete:Prototype.emptyFunction,onSuccess:function(transport){this._form.removeClassName(this.options.loadingClassName);var text=transport.responseText;if(this.options.stripLoadedTextTags)
764
+ text=text.stripTags();this._controls.editor.value=text;this._controls.editor.disabled=false;this.postProcessEditField();}.bind(this),onFailure:this._boundFailureHandler});new Ajax.Request(this.options.loadTextURL,options);},postProcessEditField:function(){var fpc=this.options.fieldPostCreation;if(fpc)
765
+ $(this._controls.editor)['focus'==fpc?'focus':'activate']();},prepareOptions:function(){this.options=Object.clone(Ajax.InPlaceEditor.DefaultOptions);Object.extend(this.options,Ajax.InPlaceEditor.DefaultCallbacks);[this._extraDefaultOptions].flatten().compact().each(function(defs){Object.extend(this.options,defs);}.bind(this));},prepareSubmission:function(){this._saving=true;this.removeForm();this.leaveHover();this.showSaving();},registerListeners:function(){this._listeners={};var listener;$H(Ajax.InPlaceEditor.Listeners).each(function(pair){listener=this[pair.value].bind(this);this._listeners[pair.key]=listener;if(!this.options.externalControlOnly)
766
+ this.element.observe(pair.key,listener);if(this.options.externalControl)
767
+ this.options.externalControl.observe(pair.key,listener);}.bind(this));},removeForm:function(){if(!this._form)return;this._form.remove();this._form=null;this._controls={};},showSaving:function(){this._oldInnerHTML=this.element.innerHTML;this.element.innerHTML=this.options.savingText;this.element.addClassName(this.options.savingClassName);this.element.style.backgroundColor=this._originalBackground;this.element.show();},triggerCallback:function(cbName,arg){if('function'==typeof this.options[cbName]){this.options[cbName](this,arg);}},unregisterListeners:function(){$H(this._listeners).each(function(pair){if(!this.options.externalControlOnly)
768
+ this.element.stopObserving(pair.key,pair.value);if(this.options.externalControl)
769
+ this.options.externalControl.stopObserving(pair.key,pair.value);}.bind(this));},wrapUp:function(transport){this.leaveEditMode();this._boundComplete(transport,this.element);}});Object.extend(Ajax.InPlaceEditor.prototype,{dispose:Ajax.InPlaceEditor.prototype.destroy});Ajax.InPlaceCollectionEditor=Class.create(Ajax.InPlaceEditor,{initialize:function($super,element,url,options){this._extraDefaultOptions=Ajax.InPlaceCollectionEditor.DefaultOptions;$super(element,url,options);},createEditField:function(){var list=document.createElement('select');list.name=this.options.paramName;list.size=1;this._controls.editor=list;this._collection=this.options.collection||[];if(this.options.loadCollectionURL)
770
+ this.loadCollection();else
771
+ this.checkForExternalText();this._form.appendChild(this._controls.editor);},loadCollection:function(){this._form.addClassName(this.options.loadingClassName);this.showLoadingText(this.options.loadingCollectionText);var options=Object.extend({method:'get'},this.options.ajaxOptions);Object.extend(options,{parameters:'editorId='+encodeURIComponent(this.element.id),onComplete:Prototype.emptyFunction,onSuccess:function(transport){var js=transport.responseText.strip();if(!/^\[.*\]$/.test(js))
772
+ throw('Server returned an invalid collection representation.');this._collection=eval(js);this.checkForExternalText();}.bind(this),onFailure:this.onFailure});new Ajax.Request(this.options.loadCollectionURL,options);},showLoadingText:function(text){this._controls.editor.disabled=true;var tempOption=this._controls.editor.firstChild;if(!tempOption){tempOption=document.createElement('option');tempOption.value='';this._controls.editor.appendChild(tempOption);tempOption.selected=true;}
773
+ tempOption.update((text||'').stripScripts().stripTags());},checkForExternalText:function(){this._text=this.getText();if(this.options.loadTextURL)
774
+ this.loadExternalText();else
775
+ this.buildOptionList();},loadExternalText:function(){this.showLoadingText(this.options.loadingText);var options=Object.extend({method:'get'},this.options.ajaxOptions);Object.extend(options,{parameters:'editorId='+encodeURIComponent(this.element.id),onComplete:Prototype.emptyFunction,onSuccess:function(transport){this._text=transport.responseText.strip();this.buildOptionList();}.bind(this),onFailure:this.onFailure});new Ajax.Request(this.options.loadTextURL,options);},buildOptionList:function(){this._form.removeClassName(this.options.loadingClassName);this._collection=this._collection.map(function(entry){return 2===entry.length?entry:[entry,entry].flatten();});var marker=('value'in this.options)?this.options.value:this._text;var textFound=this._collection.any(function(entry){return entry[0]==marker;}.bind(this));this._controls.editor.update('');var option;this._collection.each(function(entry,index){option=document.createElement('option');option.value=entry[0];option.selected=textFound?entry[0]==marker:0==index;option.appendChild(document.createTextNode(entry[1]));this._controls.editor.appendChild(option);}.bind(this));this._controls.editor.disabled=false;Field.scrollFreeActivate(this._controls.editor);}});Ajax.InPlaceEditor.prototype.initialize.dealWithDeprecatedOptions=function(options){if(!options)return;function fallback(name,expr){if(name in options||expr===undefined)return;options[name]=expr;};fallback('cancelControl',(options.cancelLink?'link':(options.cancelButton?'button':options.cancelLink==options.cancelButton==false?false:undefined)));fallback('okControl',(options.okLink?'link':(options.okButton?'button':options.okLink==options.okButton==false?false:undefined)));fallback('highlightColor',options.highlightcolor);fallback('highlightEndColor',options.highlightendcolor);};Object.extend(Ajax.InPlaceEditor,{DefaultOptions:{ajaxOptions:{},autoRows:3,cancelControl:'link',cancelText:'cancel',clickToEditText:'Click to edit',externalControl:null,externalControlOnly:false,fieldPostCreation:'activate',formClassName:'inplaceeditor-form',formId:null,highlightColor:'#ffff99',highlightEndColor:'#ffffff',hoverClassName:'',htmlResponse:true,loadingClassName:'inplaceeditor-loading',loadingText:'Loading...',okControl:'button',okText:'ok',paramName:'value',rows:1,savingClassName:'inplaceeditor-saving',savingText:'Saving...',size:0,stripLoadedTextTags:false,submitOnBlur:false,textAfterControls:'',textBeforeControls:'',textBetweenControls:''},DefaultCallbacks:{callback:function(form){return Form.serialize(form);},onComplete:function(transport,element){new Effect.Highlight(element,{startcolor:this.options.highlightColor,keepBackgroundImage:true});},onEnterEditMode:null,onEnterHover:function(ipe){ipe.element.style.backgroundColor=ipe.options.highlightColor;if(ipe._effect)
776
+ ipe._effect.cancel();},onFailure:function(transport,ipe){alert('Error communication with the server: '+transport.responseText.stripTags());},onFormCustomization:null,onLeaveEditMode:null,onLeaveHover:function(ipe){ipe._effect=new Effect.Highlight(ipe.element,{startcolor:ipe.options.highlightColor,endcolor:ipe.options.highlightEndColor,restorecolor:ipe._originalBackground,keepBackgroundImage:true});}},Listeners:{click:'enterEditMode',keydown:'checkForEscapeOrReturn',mouseover:'enterHover',mouseout:'leaveHover'}});Ajax.InPlaceCollectionEditor.DefaultOptions={loadingCollectionText:'Loading options...'};Form.Element.DelayedObserver=Class.create({initialize:function(element,delay,callback){this.delay=delay||0.5;this.element=$(element);this.callback=callback;this.timer=null;this.lastValue=$F(this.element);Event.observe(this.element,'keyup',this.delayedListener.bindAsEventListener(this));},delayedListener:function(event){if(this.lastValue==$F(this.element))return;if(this.timer)clearTimeout(this.timer);this.timer=setTimeout(this.onTimerEvent.bind(this),this.delay*1000);this.lastValue=$F(this.element);},onTimerEvent:function(){this.timer=null;this.callback(this.element,$F(this.element));}});;if(!Control)var Control={};Control.Slider=Class.create({initialize:function(handle,track,options){var slider=this;if(Object.isArray(handle)){this.handles=handle.collect(function(e){return $(e)});}else{this.handles=[$(handle)];}
777
+ this.track=$(track);this.options=options||{};this.axis=this.options.axis||'horizontal';this.increment=this.options.increment||1;this.step=parseInt(this.options.step||'1');this.range=this.options.range||$R(0,1);this.value=0;this.values=this.handles.map(function(){return 0});this.spans=this.options.spans?this.options.spans.map(function(s){return $(s)}):false;this.options.startSpan=$(this.options.startSpan||null);this.options.endSpan=$(this.options.endSpan||null);this.restricted=this.options.restricted||false;this.maximum=this.options.maximum||this.range.end;this.minimum=this.options.minimum||this.range.start;this.alignX=parseInt(this.options.alignX||'0');this.alignY=parseInt(this.options.alignY||'0');this.trackLength=this.maximumOffset()-this.minimumOffset();this.handleLength=this.isVertical()?(this.handles[0].offsetHeight!=0?this.handles[0].offsetHeight:this.handles[0].style.height.replace(/px$/,"")):(this.handles[0].offsetWidth!=0?this.handles[0].offsetWidth:this.handles[0].style.width.replace(/px$/,""));this.active=false;this.dragging=false;this.disabled=false;if(this.options.disabled)this.setDisabled();this.allowedValues=this.options.values?this.options.values.sortBy(Prototype.K):false;if(this.allowedValues){this.minimum=this.allowedValues.min();this.maximum=this.allowedValues.max();}
778
+ this.eventMouseDown=this.startDrag.bindAsEventListener(this);this.eventMouseUp=this.endDrag.bindAsEventListener(this);this.eventMouseMove=this.update.bindAsEventListener(this);this.handles.each(function(h,i){i=slider.handles.length-1-i;slider.setValue(parseFloat((Object.isArray(slider.options.sliderValue)?slider.options.sliderValue[i]:slider.options.sliderValue)||slider.range.start),i);h.makePositioned().observe("mousedown",slider.eventMouseDown);});this.track.observe("mousedown",this.eventMouseDown);document.observe("mouseup",this.eventMouseUp);$(this.track.parentNode.parentNode).observe("mousemove",this.eventMouseMove);this.initialized=true;},dispose:function(){var slider=this;Event.stopObserving(this.track,"mousedown",this.eventMouseDown);Event.stopObserving(document,"mouseup",this.eventMouseUp);Event.stopObserving(this.track.parentNode.parentNode,"mousemove",this.eventMouseMove);this.handles.each(function(h){Event.stopObserving(h,"mousedown",slider.eventMouseDown);});},setDisabled:function(){this.disabled=true;this.track.parentNode.className=this.track.parentNode.className+' disabled';},setEnabled:function(){this.disabled=false;},getNearestValue:function(value){if(this.allowedValues){if(value>=this.allowedValues.max())return(this.allowedValues.max());if(value<=this.allowedValues.min())return(this.allowedValues.min());var offset=Math.abs(this.allowedValues[0]-value);var newValue=this.allowedValues[0];this.allowedValues.each(function(v){var currentOffset=Math.abs(v-value);if(currentOffset<=offset){newValue=v;offset=currentOffset;}});return newValue;}
779
+ if(value>this.range.end)return this.range.end;if(value<this.range.start)return this.range.start;return value;},setValue:function(sliderValue,handleIdx){if(!this.active){this.activeHandleIdx=handleIdx||0;this.activeHandle=this.handles[this.activeHandleIdx];this.updateStyles();}
780
+ handleIdx=handleIdx||this.activeHandleIdx||0;if(this.initialized&&this.restricted){if((handleIdx>0)&&(sliderValue<this.values[handleIdx-1]))
781
+ sliderValue=this.values[handleIdx-1];if((handleIdx<(this.handles.length-1))&&(sliderValue>this.values[handleIdx+1]))
782
+ sliderValue=this.values[handleIdx+1];}
783
+ sliderValue=this.getNearestValue(sliderValue);this.values[handleIdx]=sliderValue;this.value=this.values[0];this.handles[handleIdx].style[this.isVertical()?'top':'left']=this.translateToPx(sliderValue);this.drawSpans();if(!this.dragging||!this.event)this.updateFinished();},setValueBy:function(delta,handleIdx){this.setValue(this.values[handleIdx||this.activeHandleIdx||0]+delta,handleIdx||this.activeHandleIdx||0);},translateToPx:function(value){return Math.round(((this.trackLength-this.handleLength)/(this.range.end-this.range.start))*(value-this.range.start))+"px";},translateToValue:function(offset){return((offset/(this.trackLength-this.handleLength)*(this.range.end-this.range.start))+this.range.start);},getRange:function(range){var v=this.values.sortBy(Prototype.K);range=range||0;return $R(v[range],v[range+1]);},minimumOffset:function(){return(this.isVertical()?this.alignY:this.alignX);},maximumOffset:function(){return(this.isVertical()?(this.track.offsetHeight!=0?this.track.offsetHeight:this.track.style.height.replace(/px$/,""))-this.alignY:(this.track.offsetWidth!=0?this.track.offsetWidth:this.track.style.width.replace(/px$/,""))-this.alignX);},isVertical:function(){return(this.axis=='vertical');},drawSpans:function(){var slider=this;if(this.spans)
784
+ $R(0,this.spans.length-1).each(function(r){slider.setSpan(slider.spans[r],slider.getRange(r))});if(this.options.startSpan)
785
+ this.setSpan(this.options.startSpan,$R(0,this.values.length>1?this.getRange(0).min():this.value));if(this.options.endSpan)
786
+ this.setSpan(this.options.endSpan,$R(this.values.length>1?this.getRange(this.spans.length-1).max():this.value,this.maximum));},setSpan:function(span,range){if(this.isVertical()){span.style.top=this.translateToPx(range.start);span.style.height=this.translateToPx(range.end-range.start+this.range.start);}else{span.style.left=this.translateToPx(range.start);span.style.width=this.translateToPx(range.end-range.start+this.range.start);}},updateStyles:function(){this.handles.each(function(h){Element.removeClassName(h,'selected')});Element.addClassName(this.activeHandle,'selected');},startDrag:function(event){if(Event.isLeftClick(event)){if(!this.disabled){this.active=true;var handle=Event.element(event);var pointer=[Event.pointerX(event),Event.pointerY(event)];var track=handle;if(track==this.track){var offsets=Position.cumulativeOffset(this.track);this.event=event;this.setValue(this.translateToValue((this.isVertical()?pointer[1]-offsets[1]:pointer[0]-offsets[0])-(this.handleLength/2)));var offsets=Position.cumulativeOffset(this.activeHandle);this.offsetX=(pointer[0]-offsets[0]);this.offsetY=(pointer[1]-offsets[1]);}else{while((this.handles.indexOf(handle)==-1)&&handle.parentNode)
787
+ handle=handle.parentNode;if(this.handles.indexOf(handle)!=-1){this.activeHandle=handle;this.activeHandleIdx=this.handles.indexOf(this.activeHandle);this.updateStyles();var offsets=Position.cumulativeOffset(this.activeHandle);this.offsetX=(pointer[0]-offsets[0]);this.offsetY=(pointer[1]-offsets[1]);}}}
788
+ Event.stop(event);}},update:function(event){if(this.active){if(!this.dragging)this.dragging=true;this.draw(event);if(Prototype.Browser.WebKit)window.scrollBy(0,0);Event.stop(event);}},draw:function(event){var pointer=[Event.pointerX(event),Event.pointerY(event)];var offsets=Position.cumulativeOffset(this.track);pointer[0]-=this.offsetX+offsets[0];pointer[1]-=this.offsetY+offsets[1];this.event=event;this.setValue(this.translateToValue(this.isVertical()?pointer[1]:pointer[0]));if(this.initialized&&this.options.onSlide)
789
+ this.options.onSlide(this.values.length>1?this.values:this.value,this);},endDrag:function(event){if(this.active&&this.dragging){this.finishDrag(event,true);Event.stop(event);}
790
+ this.active=false;this.dragging=false;},finishDrag:function(event,success){this.active=false;this.dragging=false;this.updateFinished();},updateFinished:function(){if(this.initialized&&this.options.onChange)
791
+ this.options.onChange(this.values.length>1?this.values:this.value,this);this.event=null;}});;var Validator=Class.create();Validator.prototype={initialize:function(className,error,test,options){if(typeof test=='function'){this.options=$H(options);this._test=test;}else{this.options=$H(test);this._test=function(){return true};}
792
+ this.error=error||'Validation failed.';this.className=className;},test:function(v,elm){return(this._test(v,elm)&&this.options.all(function(p){return Validator.methods[p.key]?Validator.methods[p.key](v,elm,p.value):true;}));}}
793
+ Validator.methods={pattern:function(v,elm,opt){return Validation.get('IsEmpty').test(v)||opt.test(v)},minLength:function(v,elm,opt){return v.length>=opt},maxLength:function(v,elm,opt){return v.length<=opt},min:function(v,elm,opt){return v>=parseFloat(opt)},max:function(v,elm,opt){return v<=parseFloat(opt)},notOneOf:function(v,elm,opt){return $A(opt).all(function(value){return v!=value;})},oneOf:function(v,elm,opt){return $A(opt).any(function(value){return v==value;})},is:function(v,elm,opt){return v==opt},isNot:function(v,elm,opt){return v!=opt},equalToField:function(v,elm,opt){return v==$F(opt)},notEqualToField:function(v,elm,opt){return v!=$F(opt)},include:function(v,elm,opt){return $A(opt).all(function(value){return Validation.get(value).test(v,elm);})}}
794
+ var Validation=Class.create();Validation.defaultOptions={onSubmit:true,stopOnFirst:false,immediate:false,focusOnError:true,useTitles:false,addClassNameToContainer:false,containerClassName:'.input-box',onFormValidate:function(result,form){},onElementValidate:function(result,elm){}};Validation.prototype={initialize:function(form,options){this.form=$(form);if(!this.form){return;}
795
+ this.options=Object.extend({onSubmit:Validation.defaultOptions.onSubmit,stopOnFirst:Validation.defaultOptions.stopOnFirst,immediate:Validation.defaultOptions.immediate,focusOnError:Validation.defaultOptions.focusOnError,useTitles:Validation.defaultOptions.useTitles,onFormValidate:Validation.defaultOptions.onFormValidate,onElementValidate:Validation.defaultOptions.onElementValidate},options||{});if(this.options.onSubmit)Event.observe(this.form,'submit',this.onSubmit.bind(this),false);if(this.options.immediate){Form.getElements(this.form).each(function(input){if(input.tagName.toLowerCase()=='select'){Event.observe(input,'blur',this.onChange.bindAsEventListener(this));}
796
+ if(input.type.toLowerCase()=='radio'||input.type.toLowerCase()=='checkbox'){Event.observe(input,'click',this.onChange.bindAsEventListener(this));}else{Event.observe(input,'change',this.onChange.bindAsEventListener(this));}},this);}},onChange:function(ev){Validation.isOnChange=true;Validation.validate(Event.element(ev),{useTitle:this.options.useTitles,onElementValidate:this.options.onElementValidate});Validation.isOnChange=false;},onSubmit:function(ev){if(!this.validate())Event.stop(ev);},validate:function(){var result=false;var useTitles=this.options.useTitles;var callback=this.options.onElementValidate;try{if(this.options.stopOnFirst){result=Form.getElements(this.form).all(function(elm){if(elm.hasClassName('local-validation')&&!this.isElementInForm(elm,this.form)){return true;}
797
+ return Validation.validate(elm,{useTitle:useTitles,onElementValidate:callback});},this);}else{result=Form.getElements(this.form).collect(function(elm){if(elm.hasClassName('local-validation')&&!this.isElementInForm(elm,this.form)){return true;}
798
+ return Validation.validate(elm,{useTitle:useTitles,onElementValidate:callback});},this).all();}}catch(e){}
799
+ if(!result&&this.options.focusOnError){try{Form.getElements(this.form).findAll(function(elm){return $(elm).hasClassName('validation-failed')}).first().focus()}
800
+ catch(e){}}
801
+ this.options.onFormValidate(result,this.form);return result;},reset:function(){Form.getElements(this.form).each(Validation.reset);},isElementInForm:function(elm,form){var domForm=elm.up('form');if(domForm==form){return true;}
802
+ return false;}}
803
+ Object.extend(Validation,{validate:function(elm,options){options=Object.extend({useTitle:false,onElementValidate:function(result,elm){}},options||{});elm=$(elm);var cn=$w(elm.className);return result=cn.all(function(value){var test=Validation.test(value,elm,options.useTitle);options.onElementValidate(test,elm);return test;});},insertAdvice:function(elm,advice){var container=$(elm).up('.field-row');if(container){Element.insert(container,{after:advice});}else if(elm.up('td.value')){elm.up('td.value').insert({bottom:advice});}else if(elm.advaiceContainer&&$(elm.advaiceContainer)){$(elm.advaiceContainer).update(advice);}
804
+ else{switch(elm.type.toLowerCase()){case'checkbox':case'radio':var p=elm.parentNode;if(p){Element.insert(p,{'bottom':advice});}else{Element.insert(elm,{'after':advice});}
805
+ break;default:Element.insert(elm,{'after':advice});}}},showAdvice:function(elm,advice,adviceName){if(!elm.advices){elm.advices=new Hash();}
806
+ else{elm.advices.each(function(pair){this.hideAdvice(elm,pair.value);}.bind(this));}
807
+ elm.advices.set(adviceName,advice);if(typeof Effect=='undefined'){advice.style.display='block';}else{if(!advice._adviceAbsolutize){new Effect.Appear(advice,{duration:1});}else{Position.absolutize(advice);advice.show();advice.setStyle({'top':advice._adviceTop,'left':advice._adviceLeft,'width':advice._adviceWidth,'z-index':1000});advice.addClassName('advice-absolute');}}},hideAdvice:function(elm,advice){if(advice!=null)advice.hide();},updateCallback:function(elm,status){if(typeof elm.callbackFunction!='undefined'){eval(elm.callbackFunction+'(\''+elm.id+'\',\''+status+'\')');}},ajaxError:function(elm,errorMsg){var name='validate-ajax';var advice=Validation.getAdvice(name,elm);if(advice==null){advice=this.createAdvice(name,elm,false,errorMsg);}
808
+ this.showAdvice(elm,advice,'validate-ajax');this.updateCallback(elm,'failed');elm.addClassName('validation-failed');elm.addClassName('validate-ajax');if(Validation.defaultOptions.addClassNameToContainer&&Validation.defaultOptions.containerClassName!=''){var container=elm.up(Validation.defaultOptions.containerClassName);if(container&&this.allowContainerClassName(elm)){container.removeClassName('validation-passed');container.addClassName('validation-error');}}},allowContainerClassName:function(elm){if(elm.type=='radio'||elm.type=='checkbox'){return elm.hasClassName('change-container-classname');}
809
+ return true;},test:function(name,elm,useTitle){var v=Validation.get(name);var prop='__advice'+name.camelize();try{if(Validation.isVisible(elm)&&!v.test($F(elm),elm)){var advice=Validation.getAdvice(name,elm);if(advice==null){advice=this.createAdvice(name,elm,useTitle);}
810
+ this.showAdvice(elm,advice,name);this.updateCallback(elm,'failed');elm[prop]=1;if(!elm.advaiceContainer){elm.removeClassName('validation-passed');elm.addClassName('validation-failed');}
811
+ if(Validation.defaultOptions.addClassNameToContainer&&Validation.defaultOptions.containerClassName!=''){var container=elm.up(Validation.defaultOptions.containerClassName);if(container&&this.allowContainerClassName(elm)){container.removeClassName('validation-passed');container.addClassName('validation-error');}}
812
+ return false;}else{var advice=Validation.getAdvice(name,elm);this.hideAdvice(elm,advice);this.updateCallback(elm,'passed');elm[prop]='';elm.removeClassName('validation-failed');elm.addClassName('validation-passed');if(Validation.defaultOptions.addClassNameToContainer&&Validation.defaultOptions.containerClassName!=''){var container=elm.up(Validation.defaultOptions.containerClassName);if(container&&!container.down('.validation-failed')&&this.allowContainerClassName(elm)){if(!Validation.get('IsEmpty').test(elm.value)||!this.isVisible(elm)){container.addClassName('validation-passed');}else{container.removeClassName('validation-passed');}
813
+ container.removeClassName('validation-error');}}
814
+ return true;}}catch(e){throw(e)}},isVisible:function(elm){while(elm.tagName!='BODY'){if(!$(elm).visible())return false;elm=elm.parentNode;}
815
+ return true;},getAdvice:function(name,elm){return $('advice-'+name+'-'+Validation.getElmID(elm))||$('advice-'+Validation.getElmID(elm));},createAdvice:function(name,elm,useTitle,customError){var v=Validation.get(name);var errorMsg=useTitle?((elm&&elm.title)?elm.title:v.error):v.error;if(customError){errorMsg=customError;}
816
+ try{if(Translator){errorMsg=Translator.translate(errorMsg);}}
817
+ catch(e){}
818
+ advice='<div class="validation-advice" id="advice-'+name+'-'+Validation.getElmID(elm)+'" style="display:none">'+errorMsg+'</div>'
819
+ Validation.insertAdvice(elm,advice);advice=Validation.getAdvice(name,elm);if($(elm).hasClassName('absolute-advice')){var dimensions=$(elm).getDimensions();var originalPosition=Position.cumulativeOffset(elm);advice._adviceTop=(originalPosition[1]+dimensions.height)+'px';advice._adviceLeft=(originalPosition[0])+'px';advice._adviceWidth=(dimensions.width)+'px';advice._adviceAbsolutize=true;}
820
+ return advice;},getElmID:function(elm){return elm.id?elm.id:elm.name;},reset:function(elm){elm=$(elm);var cn=$w(elm.className);cn.each(function(value){var prop='__advice'+value.camelize();if(elm[prop]){var advice=Validation.getAdvice(value,elm);if(advice){advice.hide();}
821
+ elm[prop]='';}
822
+ elm.removeClassName('validation-failed');elm.removeClassName('validation-passed');if(Validation.defaultOptions.addClassNameToContainer&&Validation.defaultOptions.containerClassName!=''){var container=elm.up(Validation.defaultOptions.containerClassName);if(container){container.removeClassName('validation-passed');container.removeClassName('validation-error');}}});},add:function(className,error,test,options){var nv={};nv[className]=new Validator(className,error,test,options);Object.extend(Validation.methods,nv);},addAllThese:function(validators){var nv={};$A(validators).each(function(value){nv[value[0]]=new Validator(value[0],value[1],value[2],(value.length>3?value[3]:{}));});Object.extend(Validation.methods,nv);},get:function(name){return Validation.methods[name]?Validation.methods[name]:Validation.methods['_LikeNoIDIEverSaw_'];},methods:{'_LikeNoIDIEverSaw_':new Validator('_LikeNoIDIEverSaw_','',{})}});Validation.add('IsEmpty','',function(v){return(v==''||(v==null)||(v.length==0)||/^\s+$/.test(v));});Validation.addAllThese([['validate-select','Please select an option.',function(v){return((v!="none")&&(v!=null)&&(v.length!=0));}],['required-entry','This is a required field.',function(v){return!Validation.get('IsEmpty').test(v);}],['validate-number','Please enter a valid number in this field.',function(v){return Validation.get('IsEmpty').test(v)||(!isNaN(parseNumber(v))&&!/^\s+$/.test(parseNumber(v)));}],['validate-digits','Please use numbers only in this field. please avoid spaces or other characters such as dots or commas.',function(v){return Validation.get('IsEmpty').test(v)||!/[^\d]/.test(v);}],['validate-alpha','Please use letters only (a-z or A-Z) in this field.',function(v){return Validation.get('IsEmpty').test(v)||/^[a-zA-Z]+$/.test(v)}],['validate-code','Please use only letters (a-z), numbers (0-9) or underscore(_) in this field, first character should be a letter.',function(v){return Validation.get('IsEmpty').test(v)||/^[a-z]+[a-z0-9_]+$/.test(v)}],['validate-alphanum','Please use only letters (a-z or A-Z) or numbers (0-9) only in this field. No spaces or other characters are allowed.',function(v){return Validation.get('IsEmpty').test(v)||/^[a-zA-Z0-9]+$/.test(v)
823
+ /*/\W/.test(v)*/
824
+ }],['validate-street','Please use only letters (a-z or A-Z) or numbers (0-9) or spaces and # only in this field.',function(v){return Validation.get('IsEmpty').test(v)||/^[ \w]{3,}([A-Za-z]\.)?([ \w]*\#\d+)?(\r\n| )[ \w]{3,}/.test(v)}],['validate-phoneStrict','Please enter a valid phone number. For example (123) 456-7890 or 123-456-7890.',function(v){return Validation.get('IsEmpty').test(v)||/^(\()?\d{3}(\))?(-|\s)?\d{3}(-|\s)\d{4}$/.test(v);}],['validate-phoneLax','Please enter a valid phone number. For example (123) 456-7890 or 123-456-7890.',function(v){return Validation.get('IsEmpty').test(v)||/^((\d[-. ]?)?((\(\d{3}\))|\d{3}))?[-. ]?\d{3}[-. ]?\d{4}$/.test(v);}],['validate-fax','Please enter a valid fax number. For example (123) 456-7890 or 123-456-7890.',function(v){return Validation.get('IsEmpty').test(v)||/^(\()?\d{3}(\))?(-|\s)?\d{3}(-|\s)\d{4}$/.test(v);}],['validate-date','Please enter a valid date.',function(v){var test=new Date(v);return Validation.get('IsEmpty').test(v)||!isNaN(test);}],['validate-email','Please enter a valid email address. For example johndoe@domain.com.',function(v){return Validation.get('IsEmpty').test(v)||/^[a-z0-9,!\#\$%&'\*\+\/=\?\^_`\{\|\}~-]+(\.[a-z0-9,!\#\$%&'\*\+\/=\?\^_`\{\|\}~-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*\.([a-z]{2,})/i.test(v)}],['validate-emailSender','Please use only visible characters and spaces.',function(v){return Validation.get('IsEmpty').test(v)||/^[\S ]+$/.test(v)}],['validate-password','Please enter 6 or more characters. Leading or trailing spaces will be ignored.',function(v){var pass=v.strip();return!(pass.length>0&&pass.length<6);}],['validate-admin-password','Please enter 7 or more characters. Password should contain both numeric and alphabetic characters.',function(v){var pass=v.strip();if(0==pass.length){return true;}
825
+ if(!(/[a-z]/i.test(v))||!(/[0-9]/.test(v))){return false;}
826
+ return!(pass.length<7);}],['validate-cpassword','Please make sure your passwords match.',function(v){var conf=$('confirmation')?$('confirmation'):$$('.validate-cpassword')[0];var pass=false;if($('password')){pass=$('password');}
827
+ var passwordElements=$$('.validate-password');for(var i=0;i<passwordElements.size();i++){var passwordElement=passwordElements[i];if(passwordElement.up('form').id==conf.up('form').id){pass=passwordElement;}}
828
+ if($$('.validate-admin-password').size()){pass=$$('.validate-admin-password')[0];}
829
+ return(pass.value==conf.value);}],['validate-url','Please enter a valid URL. http:// is required',function(v){return Validation.get('IsEmpty').test(v)||/^(http|https|ftp):\/\/(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+)(:(\d+))?\/?/i.test(v)}],['validate-clean-url','Please enter a valid URL. For example http://www.example.com or www.example.com',function(v){return Validation.get('IsEmpty').test(v)||/^(http|https|ftp):\/\/(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+.(com|org|net|dk|at|us|tv|info|uk|co.uk|biz|se)$)(:(\d+))?\/?/i.test(v)||/^(www)((\.[A-Z0-9][A-Z0-9_-]*)+.(com|org|net|dk|at|us|tv|info|uk|co.uk|biz|se)$)(:(\d+))?\/?/i.test(v)}],['validate-identifier','Please enter a valid URL Key. For example "example-page", "example-page.html" or "anotherlevel/example-page"',function(v){return Validation.get('IsEmpty').test(v)||/^[A-Z0-9][A-Z0-9_\/-]+(\.[A-Z0-9_-]+)*$/i.test(v)}],['validate-xml-identifier','Please enter a valid XML-identifier. For example something_1, block5, id-4',function(v){return Validation.get('IsEmpty').test(v)||/^[A-Z][A-Z0-9_\/-]*$/i.test(v)}],['validate-ssn','Please enter a valid social security number. For example 123-45-6789.',function(v){return Validation.get('IsEmpty').test(v)||/^\d{3}-?\d{2}-?\d{4}$/.test(v);}],['validate-zip','Please enter a valid zip code. For example 90602 or 90602-1234.',function(v){return Validation.get('IsEmpty').test(v)||/(^\d{5}$)|(^\d{5}-\d{4}$)/.test(v);}],['validate-zip-international','Please enter a valid zip code.',function(v){return true;}],['validate-date-au','Please use this date format: dd/mm/yyyy. For example 17/03/2006 for the 17th of March, 2006.',function(v){if(Validation.get('IsEmpty').test(v))return true;var regex=/^(\d{2})\/(\d{2})\/(\d{4})$/;if(!regex.test(v))return false;var d=new Date(v.replace(regex,'$2/$1/$3'));return(parseInt(RegExp.$2,10)==(1+d.getMonth()))&&(parseInt(RegExp.$1,10)==d.getDate())&&(parseInt(RegExp.$3,10)==d.getFullYear());}],['validate-currency-dollar','Please enter a valid $ amount. For example $100.00.',function(v){return Validation.get('IsEmpty').test(v)||/^\$?\-?([1-9]{1}[0-9]{0,2}(\,[0-9]{3})*(\.[0-9]{0,2})?|[1-9]{1}\d*(\.[0-9]{0,2})?|0(\.[0-9]{0,2})?|(\.[0-9]{1,2})?)$/.test(v)}],['validate-one-required','Please select one of the above options.',function(v,elm){var p=elm.parentNode;var options=p.getElementsByTagName('INPUT');return $A(options).any(function(elm){return $F(elm);});}],['validate-one-required-by-name','Please select one of the options.',function(v,elm){var inputs=$$('input[name="'+elm.name.replace(/([\\"])/g,'\\$1')+'"]');var error=1;for(var i=0;i<inputs.length;i++){if((inputs[i].type=='checkbox'||inputs[i].type=='radio')&&inputs[i].checked==true){error=0;}
830
+ if(Validation.isOnChange&&(inputs[i].type=='checkbox'||inputs[i].type=='radio')){Validation.reset(inputs[i]);}}
831
+ if(error==0){return true;}else{return false;}}],['validate-not-negative-number','Please enter a valid number in this field.',function(v){v=parseNumber(v);return(!isNaN(v)&&v>=0);}],['validate-state','Please select State/Province.',function(v){return(v!=0||v=='');}],['validate-new-password','Please enter 6 or more characters. Leading or trailing spaces will be ignored.',function(v){if(!Validation.get('validate-password').test(v))return false;if(Validation.get('IsEmpty').test(v)&&v!='')return false;return true;}],['validate-greater-than-zero','Please enter a number greater than 0 in this field.',function(v){if(v.length)
832
+ return parseFloat(v)>0;else
833
+ return true;}],['validate-zero-or-greater','Please enter a number 0 or greater in this field.',function(v){if(v.length)
834
+ return parseFloat(v)>=0;else
835
+ return true;}],['validate-cc-number','Please enter a valid credit card number.',function(v,elm){var ccTypeContainer=$(elm.id.substr(0,elm.id.indexOf('_cc_number'))+'_cc_type');if(ccTypeContainer&&typeof Validation.creditCartTypes.get(ccTypeContainer.value)!='undefined'&&Validation.creditCartTypes.get(ccTypeContainer.value)[2]==false){if(!Validation.get('IsEmpty').test(v)&&Validation.get('validate-digits').test(v)){return true;}else{return false;}}
836
+ return validateCreditCard(v);}],['validate-cc-type','Credit card number doesn\'t match credit card type',function(v,elm){elm.value=removeDelimiters(elm.value);v=removeDelimiters(v);var ccTypeContainer=$(elm.id.substr(0,elm.id.indexOf('_cc_number'))+'_cc_type');if(!ccTypeContainer){return true;}
837
+ var ccType=ccTypeContainer.value;if(typeof Validation.creditCartTypes.get(ccType)=='undefined'){return false;}
838
+ if(Validation.creditCartTypes.get(ccType)[0]==false){return true;}
839
+ var ccMatchedType='';Validation.creditCartTypes.each(function(pair){if(pair.value[0]&&v.match(pair.value[0])){ccMatchedType=pair.key;throw $break;}});if(ccMatchedType!=ccType){return false;}
840
+ if(ccTypeContainer.hasClassName('validation-failed')&&Validation.isOnChange){Validation.validate(ccTypeContainer);}
841
+ return true;}],['validate-cc-type-select','Card type doesn\'t match credit card number',function(v,elm){var ccNumberContainer=$(elm.id.substr(0,elm.id.indexOf('_cc_type'))+'_cc_number');if(Validation.isOnChange&&Validation.get('IsEmpty').test(ccNumberContainer.value)){return true;}
842
+ if(Validation.get('validate-cc-type').test(ccNumberContainer.value,ccNumberContainer)){Validation.validate(ccNumberContainer);}
843
+ return Validation.get('validate-cc-type').test(ccNumberContainer.value,ccNumberContainer);}],['validate-cc-exp','Incorrect credit card expiration date',function(v,elm){var ccExpMonth=v;var ccExpYear=$(elm.id.substr(0,elm.id.indexOf('_expiration'))+'_expiration_yr').value;var currentTime=new Date();var currentMonth=currentTime.getMonth()+1;var currentYear=currentTime.getFullYear();if(ccExpMonth<currentMonth&&ccExpYear==currentYear){return false;}
844
+ return true;}],['validate-cc-cvn','Please enter a valid credit card verification number.',function(v,elm){var ccTypeContainer=$(elm.id.substr(0,elm.id.indexOf('_cc_cid'))+'_cc_type');if(!ccTypeContainer){return true;}
845
+ var ccType=ccTypeContainer.value;if(typeof Validation.creditCartTypes.get(ccType)=='undefined'){return false;}
846
+ var re=Validation.creditCartTypes.get(ccType)[1];if(v.match(re)){return true;}
847
+ return false;}],['validate-ajax','',function(v,elm){return true;}],['validate-data','Please use only letters (a-z or A-Z), numbers (0-9) or underscore(_) in this field, first character should be a letter.',function(v){if(v!=''&&v){return /^[A-Za-z]+[A-Za-z0-9_]+$/.test(v);}
848
+ return true;}],['validate-css-length','Please input a valid CSS-length. For example 100px or 77pt or 20em or .5ex or 50%',function(v){if(v!=''&&v){return /^[0-9\.]+(px|pt|em|ex|%)?$/.test(v)&&(!(/\..*\./.test(v)))&&!(/\.$/.test(v));}
849
+ return true;}],['validate-length','Maximum length exceeded.',function(v,elm){var re=new RegExp(/^maximum-length-[0-9]+$/);var result=true;$w(elm.className).each(function(name,index){if(name.match(re)&&result){var length=name.split('-')[2];result=(v.length<=length);}});return result;}],['validate-percents','Please enter a number lower than 100',{max:100}]]);function validateCreditCard(s){var v="0123456789";var w="";for(i=0;i<s.length;i++){x=s.charAt(i);if(v.indexOf(x,0)!=-1)
850
+ w+=x;}
851
+ j=w.length/2;k=Math.floor(j);m=Math.ceil(j)-k;c=0;for(i=0;i<k;i++){a=w.charAt(i*2+m)*2;c+=a>9?Math.floor(a/10+a%10):a;}
852
+ for(i=0;i<k+m;i++)c+=w.charAt(i*2+1-m)*1;return(c%10==0);}
853
+ function removeDelimiters(v){v=v.replace(/\s/g,'');v=v.replace(/\-/g,'');return v;}
854
+ function parseNumber(v)
855
+ {if(typeof v!='string'){return parseFloat(v);}
856
+ var isDot=v.indexOf('.');var isComa=v.indexOf(',');if(isDot!=-1&&isComa!=-1){if(isComa>isDot){v=v.replace('.','').replace(',','.');}
857
+ else{v=v.replace(',','');}}
858
+ else if(isComa!=-1){v=v.replace(',','.');}
859
+ return parseFloat(v);}
860
+ Validation.creditCartTypes=$H({'VI':[new RegExp('^4[0-9]{12}([0-9]{3})?$'),new RegExp('^[0-9]{3}$'),true],'MC':[new RegExp('^5[1-5][0-9]{14}$'),new RegExp('^[0-9]{3}$'),true],'AE':[new RegExp('^3[47][0-9]{13}$'),new RegExp('^[0-9]{4}$'),true],'DI':[new RegExp('^6011[0-9]{12}$'),new RegExp('^[0-9]{3}$'),true],'SS':[new RegExp('^((6759[0-9]{12})|(49[013][1356][0-9]{13})|(633[34][0-9]{12})|(633110[0-9]{10})|(564182[0-9]{10}))([0-9]{2,3})?$'),new RegExp('^([0-9]{3}|[0-9]{4})?$'),true],'OT':[false,new RegExp('^([0-9]{3}|[0-9]{4})?$'),false]});;function popWin(url,win,para){var win=window.open(url,win,para);win.focus();}
861
+ function setLocation(url){window.location.href=url;}
862
+ function setPLocation(url,setFocus){if(setFocus){window.opener.focus();}
863
+ window.opener.location.href=url;}
864
+ function setLanguageCode(code,fromCode){var href=window.location.href;var after='',dash;if(dash=href.match(/\#(.*)$/)){href=href.replace(/\#(.*)$/,'');after=dash[0];}
865
+ if(href.match(/[?]/)){var re=/([?&]store=)[a-z0-9_]*/;if(href.match(re)){href=href.replace(re,'$1'+code);}else{href+='&store='+code;}
866
+ var re=/([?&]from_store=)[a-z0-9_]*/;if(href.match(re)){href=href.replace(re,'');}}else{href+='?store='+code;}
867
+ if(typeof(fromCode)!='undefined'){href+='&from_store='+fromCode;}
868
+ href+=after;setLocation(href);}
869
+ function decorateGeneric(elements,decorateParams)
870
+ {var allSupportedParams=['odd','even','first','last'];var _decorateParams={};var total=elements.length;if(total){if(typeof(decorateParams)=='undefined'){decorateParams=allSupportedParams;}
871
+ if(!decorateParams.length){return;}
872
+ for(var k in allSupportedParams){_decorateParams[allSupportedParams[k]]=false;}
873
+ for(var k in decorateParams){_decorateParams[decorateParams[k]]=true;}
874
+ if(_decorateParams.first){Element.addClassName(elements[0],'first');}
875
+ if(_decorateParams.last){Element.addClassName(elements[total-1],'last');}
876
+ for(var i=0;i<total;i++){if((i+1)%2==0){if(_decorateParams.even){Element.addClassName(elements[i],'even');}}
877
+ else{if(_decorateParams.odd){Element.addClassName(elements[i],'odd');}}}}}
878
+ function decorateTable(table,options){var table=$(table);if(table){var _options={'tbody':false,'tbody tr':['odd','even','first','last'],'thead tr':['first','last'],'tfoot tr':['first','last'],'tr td':['last']};if(typeof(options)!='undefined'){for(var k in options){_options[k]=options[k];}}
879
+ if(_options['tbody']){decorateGeneric(table.select('tbody'),_options['tbody']);}
880
+ if(_options['tbody tr']){decorateGeneric(table.select('tbody tr'),_options['tbody tr']);}
881
+ if(_options['thead tr']){decorateGeneric(table.select('thead tr'),_options['thead tr']);}
882
+ if(_options['tfoot tr']){decorateGeneric(table.select('tfoot tr'),_options['tfoot tr']);}
883
+ if(_options['tr td']){var allRows=table.select('tr');if(allRows.length){for(var i=0;i<allRows.length;i++){decorateGeneric(allRows[i].getElementsByTagName('TD'),_options['tr td']);}}}}}
884
+ function decorateList(list,nonRecursive){if($(list)){if(typeof(nonRecursive)=='undefined'){var items=$(list).select('li')}
885
+ else{var items=$(list).childElements();}
886
+ decorateGeneric(items,['odd','even','last']);}}
887
+ function decorateDataList(list){list=$(list);if(list){decorateGeneric(list.select('dt'),['odd','even','last']);decorateGeneric(list.select('dd'),['odd','even','last']);}}
888
+ function parseSidUrl(baseUrl,urlExt){sidPos=baseUrl.indexOf('/?SID=');sid='';urlExt=(urlExt!=undefined)?urlExt:'';if(sidPos>-1){sid='?'+baseUrl.substring(sidPos+2);baseUrl=baseUrl.substring(0,sidPos+1);}
889
+ return baseUrl+urlExt+sid;}
890
+ function formatCurrency(price,format,showPlus){precision=isNaN(format.precision=Math.abs(format.precision))?2:format.precision;requiredPrecision=isNaN(format.requiredPrecision=Math.abs(format.requiredPrecision))?2:format.requiredPrecision;precision=requiredPrecision;integerRequired=isNaN(format.integerRequired=Math.abs(format.integerRequired))?1:format.integerRequired;decimalSymbol=format.decimalSymbol==undefined?",":format.decimalSymbol;groupSymbol=format.groupSymbol==undefined?".":format.groupSymbol;groupLength=format.groupLength==undefined?3:format.groupLength;if(showPlus==undefined||showPlus==true){s=price<0?"-":(showPlus?"+":"");}else if(showPlus==false){s='';}
891
+ i=parseInt(price=Math.abs(+price||0).toFixed(precision))+"";pad=(i.length<integerRequired)?(integerRequired-i.length):0;while(pad){i='0'+i;pad--;}
892
+ j=(j=i.length)>groupLength?j%groupLength:0;re=new RegExp("(\\d{"+groupLength+"})(?=\\d)","g");r=(j?i.substr(0,j)+groupSymbol:"")+i.substr(j).replace(re,"$1"+groupSymbol)+(precision?decimalSymbol+Math.abs(price-i).toFixed(precision).replace(/-/,0).slice(2):"")
893
+ if(format.pattern.indexOf('{sign}')==-1){pattern=s+format.pattern;}else{pattern=format.pattern.replace('{sign}',s);}
894
+ return pattern.replace('%s',r).replace(/^\s\s*/,'').replace(/\s\s*$/,'');};function expandDetails(el,childClass){if(Element.hasClassName(el,'show-details')){$$(childClass).each(function(item){item.hide()});Element.removeClassName(el,'show-details');}
895
+ else{$$(childClass).each(function(item){item.show()});Element.addClassName(el,'show-details');}}
896
+ var isIE=navigator.appVersion.match(/MSIE/)=="MSIE";if(!window.Varien)
897
+ var Varien=new Object();Varien.showLoading=function(){Element.show('loading-process');}
898
+ Varien.hideLoading=function(){Element.hide('loading-process');}
899
+ Varien.GlobalHandlers={onCreate:function(){Varien.showLoading();},onComplete:function(){if(Ajax.activeRequestCount==0){Varien.hideLoading();}}};Ajax.Responders.register(Varien.GlobalHandlers);Varien.searchForm=Class.create();Varien.searchForm.prototype={initialize:function(form,field,emptyText){this.form=$(form);this.field=$(field);this.emptyText=emptyText;Event.observe(this.form,'submit',this.submit.bind(this));Event.observe(this.field,'focus',this.focus.bind(this));Event.observe(this.field,'blur',this.blur.bind(this));this.blur();},submit:function(event){if(this.field.value==this.emptyText||this.field.value==''){Event.stop(event);return false;}
900
+ return true;},focus:function(event){if(this.field.value==this.emptyText){this.field.value='';}},blur:function(event){if(this.field.value==''){this.field.value=this.emptyText;}},initAutocomplete:function(url,destinationElement){new Ajax.Autocompleter(this.field,destinationElement,url,{paramName:this.field.name,method:'get',minChars:2,updateElement:this._selectAutocompleteItem.bind(this),onShow:function(element,update){if(!update.style.position||update.style.position=='absolute'){update.style.position='absolute';Position.clone(element,update,{setHeight:false,offsetTop:element.offsetHeight});}
901
+ Effect.Appear(update,{duration:0});}});},_selectAutocompleteItem:function(element){if(element.title){this.field.value=element.title;}
902
+ this.form.submit();}}
903
+ Varien.Tabs=Class.create();Varien.Tabs.prototype={initialize:function(selector){var self=this;$$(selector+' a').each(this.initTab.bind(this));},initTab:function(el){el.href='javascript:void(0)';if($(el.parentNode).hasClassName('active')){this.showContent(el);}
904
+ el.observe('click',this.showContent.bind(this,el));},showContent:function(a){var li=$(a.parentNode),ul=$(li.parentNode);ul.getElementsBySelector('li','ol').each(function(el){var contents=$(el.id+'_contents');if(el==li){el.addClassName('active');contents.show();}else{el.removeClassName('active');contents.hide();}});}}
905
+ Varien.DOB=Class.create();Varien.DOB.prototype={initialize:function(selector,required,format){var el=$$(selector)[0];this.day=Element.select($(el),'.dob-day input')[0];this.month=Element.select($(el),'.dob-month input')[0];this.year=Element.select($(el),'.dob-year input')[0];this.dob=Element.select($(el),'.dob-full input')[0];this.advice=Element.select($(el),'.validation-advice')[0];this.required=required;this.format=format;this.day.validate=this.validate.bind(this);this.month.validate=this.validate.bind(this);this.year.validate=this.validate.bind(this);this.advice.hide();},validate:function(){var error=false;if(this.day.value==''&&this.month.value==''&&this.year.value==''){if(this.required){error='This date is a required value.';}else{this.dob.value='';}}else if(this.day.value==''||this.month.value==''||this.year.value==''){error='Please enter a valid full date.';}else{var date=new Date();if(this.day.value<1||this.day.value>31){error='Please enter a valid day (1-31).';}else if(this.month.value<1||this.month.value>12){error='Please enter a valid month (1-12).';}else if(this.year.value<1900||this.year.value>date.getFullYear()){error='Please enter a valid year (1900-'+date.getFullYear()+').';}else{this.dob.value=this.format.replace(/(%m|%b)/i,this.month.value).replace(/(%d|%e)/i,this.day.value).replace(/%y/i,this.year.value);var testDOB=this.month.value+'/'+this.day.value+'/'+this.year.value;var test=new Date(testDOB);if(isNaN(test)){error='Please enter a valid date.';}}}
906
+ if(error!==false){try{this.advice.innerHTML=Translator.translate(error);}
907
+ catch(e){this.advice.innerHTML=error;}
908
+ this.advice.show();return false;}
909
+ this.advice.hide();return true;}}
910
+ Validation.addAllThese([['validate-custom',' ',function(v,elm){return elm.validate();}]]);function truncateOptions(){$$('.truncated').each(function(element){Event.observe(element,'mouseover',function(){if(element.down('div.truncated_full_value')){element.down('div.truncated_full_value').addClassName('show')}});Event.observe(element,'mouseout',function(){if(element.down('div.truncated_full_value')){element.down('div.truncated_full_value').removeClassName('show')}});});}
911
+ Event.observe(window,'load',function(){truncateOptions();});Element.addMethods({getInnerText:function(element)
912
+ {element=$(element);if(element.innerText&&!Prototype.Browser.Opera){return element.innerText}
913
+ return element.innerHTML.stripScripts().unescapeHTML().replace(/[\n\r\s]+/g,' ');}});if(!("console"in window)||!("firebug"in console))
914
+ {var names=["log","debug","info","warn","error","assert","dir","dirxml","group","groupEnd","time","timeEnd","count","trace","profile","profileEnd"];window.console={};for(var i=0;i<names.length;++i)
915
+ window.console[names[i]]=function(){}};var Translate=Class.create();Translate.prototype={initialize:function(data){this.data=$H(data);},translate:function(){var args=arguments;var text=arguments[0];if(this.data.get(text)){return this.data.get(text);}
916
+ return text;},add:function(){if(arguments.length>1){this.data.set(arguments[0],arguments[1]);}else if(typeof arguments[0]=='object'){$H(arguments[0]).each(function(pair){this.data.set(pair.key,pair.value);}.bind(this));}}};function encode_base64(what)
917
+ {var base64_encodetable="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";var result="";var len=what.length;var x,y;var ptr=0;while(len-->0)
918
+ {x=what.charCodeAt(ptr++);result+=base64_encodetable.charAt((x>>2)&63);if(len--<=0)
919
+ {result+=base64_encodetable.charAt((x<<4)&63);result+="==";break;}
920
+ y=what.charCodeAt(ptr++);result+=base64_encodetable.charAt(((x<<4)|((y>>4)&15))&63);if(len--<=0)
921
+ {result+=base64_encodetable.charAt((y<<2)&63);result+="=";break;}
922
+ x=what.charCodeAt(ptr++);result+=base64_encodetable.charAt(((y<<2)|((x>>6)&3))&63);result+=base64_encodetable.charAt(x&63);}
923
+ return result;}
924
+ function decode_base64(what)
925
+ {var base64_decodetable=new Array(255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,62,255,255,255,63,52,53,54,55,56,57,58,59,60,61,255,255,255,255,255,255,255,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,255,255,255,255,255,255,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,255,255,255,255,255);var result="";var len=what.length;var x,y;var ptr=0;while(!isNaN(x=what.charCodeAt(ptr++)))
926
+ {if(x==13||x==10)
927
+ continue;if((x>127)||((x=base64_decodetable[x])==255))
928
+ return false;if((isNaN(y=what.charCodeAt(ptr++)))||((y=base64_decodetable[y])==255))
929
+ return false;result+=String.fromCharCode((x<<2)|(y>>4));if((x=what.charCodeAt(ptr++))==61)
930
+ {if((what.charCodeAt(ptr++)!=61)||(!isNaN(what.charCodeAt(ptr))))
931
+ return false;}
932
+ else
933
+ {if((x>127)||((x=base64_decodetable[x])==255))
934
+ return false;result+=String.fromCharCode((y<<4)|(x>>2));if((y=what.charCodeAt(ptr++))==61)
935
+ {if(!isNaN(what.charCodeAt(ptr)))
936
+ return false;}
937
+ else
938
+ {if((y>127)||((y=base64_decodetable[y])==255))
939
+ return false;result+=String.fromCharCode((x<<6)|y);}}}
940
+ return result;}
941
+ function wrap76(what)
942
+ {var result="";var i;for(i=0;i<what.length;i+=76)
943
+ {result+=what.substring(i,i+76)+String.fromCharCode(13)+String.fromCharCode(10);}
944
+ return result;};varienEvents=Class.create();varienEvents.prototype={initialize:function(){this.arrEvents={};this.eventPrefix='';},attachEventHandler:function(eventName,handler){if((typeof handler=='undefined')||(handler==null)){return;}
945
+ eventName=eventName+this.eventPrefix;if(this.arrEvents[eventName]==null){this.arrEvents[eventName]=[];}
946
+ var asynchVar=arguments.length>2?arguments[2]:false;var handlerObj={method:handler,asynch:asynchVar};this.arrEvents[eventName].push(handlerObj);},removeEventHandler:function(eventName,handler){eventName=eventName+this.eventPrefix;if(this.arrEvents[eventName]!=null){this.arrEvents[eventName]=this.arrEvents[eventName].reject(function(obj){return obj.method==handler;});}},clearEventHandlers:function(eventName){eventName=eventName+this.eventPrefix;this.arrEvents[eventName]=null;},clearAllEventHandlers:function(){this.arrEvents={};},fireEvent:function(eventName){var evtName=eventName+this.eventPrefix;var results=[];var result;if(this.arrEvents[evtName]!=null){var len=this.arrEvents[evtName].length;for(var i=0;i<len;i++){try{if(arguments.length>1){if(this.arrEvents[evtName][i].asynch){var eventArgs=arguments[1];var method=this.arrEvents[evtName][i].method.bind(this);setTimeout(function(){method(eventArgs)}.bind(this),10);}
947
+ else{result=this.arrEvents[evtName][i].method(arguments[1]);}}
948
+ else{if(this.arrEvents[evtName][i].asynch){var eventHandler=this.arrEvents[evtName][i].method;setTimeout(eventHandler,1);}
949
+ else if(this.arrEvents&&this.arrEvents[evtName]&&this.arrEvents[evtName][i]&&this.arrEvents[evtName][i].method){result=this.arrEvents[evtName][i].method();}}
950
+ results.push(result);}
951
+ catch(e){if(this.id){alert("error: error in "+this.id+".fireEvent():\n\nevent name: "+eventName+"\n\nerror message: "+e.message);}
952
+ else{alert("error: error in [unknown object].fireEvent():\n\nevent name: "+eventName+"\n\nerror message: "+e.message);}}}}
953
+ return results;}};varienGlobalEvents=new varienEvents();;var SessionError=Class.create();SessionError.prototype={initialize:function(errorText){this.errorText=errorText;},toString:function()
954
+ {return'Session Error:'+this.errorText;}};Ajax.Request.addMethods({initialize:function($super,url,options){$super(options);this.transport=Ajax.getTransport();if(!url.match(new RegExp('[?&]isAjax=true',''))){url=url.match(new RegExp('\\?',"g"))?url+'&isAjax=true':url+'?isAjax=true';}
955
+ if(!this.options.parameters){this.options.parameters={form_key:FORM_KEY};}
956
+ if(!this.options.parameters.form_key){this.options.parameters.form_key=FORM_KEY;}
957
+ this.request(url);},respondToReadyState:function(readyState){var state=Ajax.Request.Events[readyState],response=new Ajax.Response(this);if(state=='Complete'){try{this._complete=true;if(response.responseText.isJSON()){var jsonObject=response.responseText.evalJSON();if(jsonObject.ajaxExpired&&jsonObject.ajaxRedirect){window.location.replace(jsonObject.ajaxRedirect);throw new SessionError('session expired');}}
958
+ (this.options['on'+response.status]||this.options['on'+(this.success()?'Success':'Failure')]||Prototype.emptyFunction)(response,response.headerJSON);}catch(e){this.dispatchException(e);if(e instanceof SessionError){return;}}
959
+ var contentType=response.getHeader('Content-type');if(this.options.evalJS=='force'||(this.options.evalJS&&this.isSameOrigin()&&contentType&&contentType.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i))){this.evalResponse();}}
960
+ try{(this.options['on'+state]||Prototype.emptyFunction)(response,response.headerJSON);Ajax.Responders.dispatch('on'+state,this,response,response.headerJSON);}catch(e){this.dispatchException(e);}
961
+ if(state=='Complete'){this.transport.onreadystatechange=Prototype.emptyFunction;}}});Ajax.Updater.respondToReadyState=Ajax.Request.respondToReadyState;var varienLoader=new Class.create();varienLoader.prototype={initialize:function(caching){this.callback=false;this.cache=$H();this.caching=caching||false;this.url=false;},getCache:function(url){if(this.cache.get(url)){return this.cache.get(url)}
962
+ return false;},load:function(url,params,callback){this.url=url;this.callback=callback;if(this.caching){var transport=this.getCache(url);if(transport){this.processResult(transport);return;}}
963
+ if(typeof(params.updaterId)!='undefined'){new varienUpdater(params.updaterId,url,{evalScripts:true,onComplete:this.processResult.bind(this),onFailure:this._processFailure.bind(this)});}
964
+ else{new Ajax.Request(url,{method:'post',parameters:params||{},onComplete:this.processResult.bind(this),onFailure:this._processFailure.bind(this)});}},_processFailure:function(transport){location.href=BASE_URL;},processResult:function(transport){if(this.caching){this.cache.set(this.url,transport);}
965
+ if(this.callback){this.callback(transport.responseText);}}}
966
+ if(!window.varienLoaderHandler)
967
+ var varienLoaderHandler=new Object();varienLoaderHandler.handler={onCreate:function(request){if(request.options.loaderArea===false){return;}
968
+ request.options.loaderArea=$$('#html-body .wrapper')[0];if(request&&request.options.loaderArea){Element.clonePosition($('loading-mask'),$(request.options.loaderArea),{offsetLeft:-2})
969
+ toggleSelectsUnderBlock($('loading-mask'),false);Element.show('loading-mask');setLoaderPosition();if(request.options.loaderArea=='html-body'){}}
970
+ else{}},onComplete:function(transport){if(Ajax.activeRequestCount==0){toggleSelectsUnderBlock($('loading-mask'),true);Element.hide('loading-mask');}}};function setLoaderPosition(){var elem=$('loading_mask_loader');if(elem&&Prototype.Browser.IE){var middle=parseInt(document.body.clientHeight/2)+document.body.scrollTop;elem.style.position='absolute';elem.style.top=middle;}}
971
+ function toggleSelectsUnderBlock(block,flag){if(Prototype.Browser.IE){var selects=document.getElementsByTagName("select");for(var i=0;i<selects.length;i++){if(flag){if(selects[i].needShowOnSuccess){selects[i].needShowOnSuccess=false;selects[i].style.visibility='';}}
972
+ else{if(Element.visible(selects[i])){selects[i].style.visibility='hidden';selects[i].needShowOnSuccess=true;}}}}}
973
+ Ajax.Responders.register(varienLoaderHandler.handler);var varienUpdater=Class.create(Ajax.Updater,{updateContent:function($super,responseText){if(responseText.isJSON()){var responseJSON=responseText.evalJSON();if(responseJSON.ajaxExpired&&responseJSON.ajaxRedirect){window.location.replace(responseJSON.ajaxRedirect);}}else{$super(responseText);}}});;var varienGrid=new Class.create();varienGrid.prototype={initialize:function(containerId,url,pageVar,sortVar,dirVar,filterVar){this.containerId=containerId;this.url=url;this.pageVar=pageVar||false;this.sortVar=sortVar||false;this.dirVar=dirVar||false;this.filterVar=filterVar||false;this.tableSufix='_table';this.useAjax=false;this.rowClickCallback=false;this.checkboxCheckCallback=false;this.preInitCallback=false;this.initCallback=false;this.initRowCallback=false;this.doFilterCallback=false;this.reloadParams=false;this.trOnMouseOver=this.rowMouseOver.bindAsEventListener(this);this.trOnMouseOut=this.rowMouseOut.bindAsEventListener(this);this.trOnClick=this.rowMouseClick.bindAsEventListener(this);this.trOnDblClick=this.rowMouseDblClick.bindAsEventListener(this);this.trOnKeyPress=this.keyPress.bindAsEventListener(this);this.thLinkOnClick=this.doSort.bindAsEventListener(this);this.initGrid();},initGrid:function(){if(this.preInitCallback){this.preInitCallback(this);}
974
+ if($(this.containerId+this.tableSufix)){this.rows=$$('#'+this.containerId+this.tableSufix+' tbody tr');for(var row=0;row<this.rows.length;row++){if(row%2==0){Element.addClassName(this.rows[row],'even');}
975
+ Event.observe(this.rows[row],'mouseover',this.trOnMouseOver);Event.observe(this.rows[row],'mouseout',this.trOnMouseOut);Event.observe(this.rows[row],'click',this.trOnClick);Event.observe(this.rows[row],'dblclick',this.trOnDblClick);}}
976
+ if(this.sortVar&&this.dirVar){var columns=$$('#'+this.containerId+this.tableSufix+' thead a');for(var col=0;col<columns.length;col++){Event.observe(columns[col],'click',this.thLinkOnClick);}}
977
+ this.bindFilterFields();this.bindFieldsChange();if(this.initCallback){try{this.initCallback(this);}
978
+ catch(e){if(console){console.log(e);}}}},initGridAjax:function(){this.initGrid();this.initGridRows();},initGridRows:function(){if(this.initRowCallback){for(var row=0;row<this.rows.length;row++){try{this.initRowCallback(this,this.rows[row]);}catch(e){if(console){console.log(e);}}}}},getContainerId:function(){return this.containerId;},rowMouseOver:function(event){var element=Event.findElement(event,'tr');if(!element.title)return;Element.addClassName(element,'on-mouse');if(!Element.hasClassName('pointer')&&(this.rowClickCallback!==openGridRow||element.title)){if(element.title){Element.addClassName(element,'pointer');}}},rowMouseOut:function(event){var element=Event.findElement(event,'tr');Element.removeClassName(element,'on-mouse');},rowMouseClick:function(event){if(this.rowClickCallback){try{this.rowClickCallback(this,event);}
979
+ catch(e){}}
980
+ varienGlobalEvents.fireEvent('gridRowClick',event);},rowMouseDblClick:function(event){varienGlobalEvents.fireEvent('gridRowDblClick',event);},keyPress:function(event){},doSort:function(event){var element=Event.findElement(event,'a');if(element.name&&element.title){this.addVarToUrl(this.sortVar,element.name);this.addVarToUrl(this.dirVar,element.title);this.reload(this.url);}
981
+ Event.stop(event);return false;},loadByElement:function(element){if(element&&element.name){this.reload(this.addVarToUrl(element.name,element.value));}},reload:function(url){if(!this.reloadParams){this.reloadParams={form_key:FORM_KEY};}
982
+ else{this.reloadParams.form_key=FORM_KEY;}
983
+ url=url||this.url;if(this.useAjax){new Ajax.Request(url+(url.match(new RegExp('\\?'))?'&ajax=true':'?ajax=true'),{loaderArea:this.containerId,parameters:this.reloadParams||{},evalScripts:true,onFailure:this._processFailure.bind(this),onComplete:this.initGridAjax.bind(this),onSuccess:function(transport){try{if(transport.responseText.isJSON()){var response=transport.responseText.evalJSON()
984
+ if(response.error){alert(response.message);}
985
+ if(response.ajaxExpired&&response.ajaxRedirect){setLocation(response.ajaxRedirect);}}else{$(this.containerId).update(transport.responseText);}}
986
+ catch(e){$(this.containerId).update(transport.responseText);}}.bind(this)});return;}
987
+ else{if(this.reloadParams){$H(this.reloadParams).each(function(pair){url=this.addVarToUrl(pair.key,pair.value);}.bind(this));}
988
+ location.href=url;}},_processFailure:function(transport){location.href=BASE_URL;},addVarToUrl:function(varName,varValue){var re=new RegExp('\/('+varName+'\/.*?\/)');var parts=this.url.split(new RegExp('\\?'));this.url=parts[0].replace(re,'/');this.url+=varName+'/'+varValue+'/';if(parts.size()>1){this.url+='?'+parts[1];}
989
+ return this.url;},doExport:function(){if($(this.containerId+'_export')){location.href=$(this.containerId+'_export').value;}},bindFilterFields:function(){var filters=$$('#'+this.containerId+' .filter input','#'+this.containerId+' .filter select');for(var i=0;i<filters.length;i++){Event.observe(filters[i],'keypress',this.filterKeyPress.bind(this));}},bindFieldsChange:function(){if(!$(this.containerId)){return;}
990
+ var dataElements=$(this.containerId+this.tableSufix).down('tbody').select('input','select');for(var i=0;i<dataElements.length;i++){Event.observe(dataElements[i],'change',dataElements[i].setHasChanges.bind(dataElements[i]));}},filterKeyPress:function(event){if(event.keyCode==Event.KEY_RETURN){this.doFilter();}},doFilter:function(){var filters=$$('#'+this.containerId+' .filter input','#'+this.containerId+' .filter select');var elements=[];for(var i in filters){if(filters[i].value&&filters[i].value.length)elements.push(filters[i]);}
991
+ if(!this.doFilterCallback||(this.doFilterCallback&&this.doFilterCallback())){this.reload(this.addVarToUrl(this.filterVar,encode_base64(Form.serializeElements(elements))));}},resetFilter:function(){this.reload(this.addVarToUrl(this.filterVar,''));},checkCheckboxes:function(element){elements=Element.select($(this.containerId),'input[name="'+element.name+'"]');for(var i=0;i<elements.length;i++){this.setCheckboxChecked(elements[i],element.checked);}},setCheckboxChecked:function(element,checked){element.checked=checked;element.setHasChanges({});if(this.checkboxCheckCallback){this.checkboxCheckCallback(this,element,checked);}},inputPage:function(event,maxNum){var element=Event.element(event);var keyCode=event.keyCode||event.which;if(keyCode==Event.KEY_RETURN){this.setPage(element.value);}},setPage:function(pageNumber){this.reload(this.addVarToUrl(this.pageVar,pageNumber));}};function openGridRow(grid,event){var element=Event.findElement(event,'tr');if(['a','input','select','option'].indexOf(Event.element(event).tagName.toLowerCase())!=-1){return;}
992
+ if(element.title){setLocation(element.title);}}
993
+ var varienGridMassaction=Class.create();varienGridMassaction.prototype={checkedValues:$H({}),checkedString:'',oldCallbacks:{},errorText:'',items:{},gridIds:[],currentItem:false,fieldTemplate:new Template('<input type="hidden" name="#{name}" value="#{value}" />'),initialize:function(containerId,grid,checkedValues,formFieldNameInternal,formFieldName){this.setOldCallback('row_click',grid.rowClickCallback);this.setOldCallback('init',grid.initCallback);this.setOldCallback('init_row',grid.initRowCallback);this.setOldCallback('pre_init',grid.preInitCallback);this.useAjax=false;this.grid=grid;this.containerId=containerId;this.initMassactionElements();this.checkedString=checkedValues;this.formFieldName=formFieldName;this.formFieldNameInternal=formFieldNameInternal;this.grid.initCallback=this.onGridInit.bind(this);this.grid.preInitCallback=this.onGridPreInit.bind(this);this.grid.initRowCallback=this.onGridRowInit.bind(this);this.grid.rowClickCallback=this.onGridRowClick.bind(this);this.initCheckboxes();this.checkCheckboxes();},setUseAjax:function(flag){this.useAjax=flag;},initMassactionElements:function(){this.container=$(this.containerId);this.form=$(this.containerId+'-form');this.count=$(this.containerId+'-count');this.validator=new Validation(this.form);this.formHiddens=$(this.containerId+'-form-hiddens');this.formAdditional=$(this.containerId+'-form-additional');this.select=$(this.containerId+'-select');this.select.observe('change',this.onSelectChange.bindAsEventListener(this));},setGridIds:function(gridIds){this.gridIds=gridIds;this.updateCount();},getGridIds:function(){return this.gridIds;},setItems:function(items){this.items=items;this.updateCount();},getItems:function(){return this.items;},getItem:function(itemId){if(this.items[itemId]){return this.items[itemId];}
994
+ return false;},getOldCallback:function(callbackName){return this.oldCallbacks[callbackName]?this.oldCallbacks[callbackName]:Prototype.emptyFunction;},setOldCallback:function(callbackName,callback){this.oldCallbacks[callbackName]=callback;},onGridPreInit:function(grid){this.initMassactionElements();this.getOldCallback('pre_init')(grid);},onGridInit:function(grid){this.initCheckboxes();this.checkCheckboxes();this.updateCount();this.getOldCallback('init')(grid);},onGridRowInit:function(grid,row){this.getOldCallback('init_row')(grid,row);},onGridRowClick:function(grid,evt){var tdElement=Event.findElement(evt,'td');var trElement=Event.findElement(evt,'tr');if(!$(tdElement).down('input')){if($(tdElement).down('a')||$(tdElement).down('select')){return;}
995
+ if(trElement.title){setLocation(trElement.title);}
996
+ else{var checkbox=Element.select(trElement,'input');var isInput=Event.element(evt).tagName=='input';var checked=isInput?checkbox[0].checked:!checkbox[0].checked;if(checked){this.checkedString=varienStringArray.add(checkbox[0].value,this.checkedString);}else{this.checkedString=varienStringArray.remove(checkbox[0].value,this.checkedString);}
997
+ this.grid.setCheckboxChecked(checkbox[0],checked);this.updateCount();}
998
+ return;}
999
+ if(Event.element(evt).isMassactionCheckbox){this.setCheckbox(Event.element(evt));}else if(checkbox=this.findCheckbox(evt)){checkbox.checked=!checkbox.checked;this.setCheckbox(checkbox);}},onSelectChange:function(evt){var item=this.getSelectedItem();if(item){this.formAdditional.update($(this.containerId+'-item-'+item.id+'-block').innerHTML);}else{this.formAdditional.update('');}
1000
+ this.validator.reset();},findCheckbox:function(evt){if(['a','input','select'].indexOf(Event.element(evt).tagName.toLowerCase())!==-1){return false;}
1001
+ checkbox=false;Event.findElement(evt,'tr').select('.massaction-checkbox').each(function(element){if(element.isMassactionCheckbox){checkbox=element;}}.bind(this));return checkbox;},initCheckboxes:function(){this.getCheckboxes().each(function(checkbox){checkbox.isMassactionCheckbox=true;}.bind(this));},checkCheckboxes:function(){this.getCheckboxes().each(function(checkbox){checkbox.checked=varienStringArray.has(checkbox.value,this.checkedString);}.bind(this));},selectAll:function(){this.setCheckedValues(this.getGridIds());this.checkCheckboxes();this.updateCount();return false;},unselectAll:function(){this.setCheckedValues('');this.checkCheckboxes();this.updateCount();return false;},selectVisible:function(){this.setCheckedValues(this.getCheckboxesValuesAsString());this.checkCheckboxes();this.updateCount();return false;},unselectVisible:function(){this.getCheckboxesValues().each(function(key){this.checkedString=varienStringArray.remove(key,this.checkedString);}.bind(this));this.checkCheckboxes();this.updateCount();return false;},setCheckedValues:function(values){this.checkedString=values;},getCheckedValues:function(){return this.checkedString;},getCheckboxes:function(){var result=[];this.grid.rows.each(function(row){var checkboxes=row.select('.massaction-checkbox');checkboxes.each(function(checkbox){result.push(checkbox);});});return result;},getCheckboxesValues:function(){var result=[];this.getCheckboxes().each(function(checkbox){result.push(checkbox.value);}.bind(this));return result;},getCheckboxesValuesAsString:function()
1002
+ {return this.getCheckboxesValues().join(',');},setCheckbox:function(checkbox){if(checkbox.checked){this.checkedString=varienStringArray.add(checkbox.value,this.checkedString);}else{this.checkedString=varienStringArray.remove(checkbox.value,this.checkedString);}
1003
+ this.updateCount();},updateCount:function(){this.count.update(varienStringArray.count(this.checkedString));if(!this.grid.reloadParams){this.grid.reloadParams={};}
1004
+ this.grid.reloadParams[this.formFieldNameInternal]=this.checkedString;},getSelectedItem:function(){if(this.getItem(this.select.value)){return this.getItem(this.select.value);}else{return false;}},apply:function(){if(varienStringArray.count(this.checkedString)==0){alert(this.errorText);return;}
1005
+ var item=this.getSelectedItem();if(!item){this.validator.validate();return;}
1006
+ this.currentItem=item;var fieldName=(item.field?item.field:this.formFieldName);var fieldsHtml='';if(this.currentItem.confirm&&!window.confirm(this.currentItem.confirm)){return;}
1007
+ this.formHiddens.update('');new Insertion.Bottom(this.formHiddens,this.fieldTemplate.evaluate({name:fieldName,value:this.checkedString}));new Insertion.Bottom(this.formHiddens,this.fieldTemplate.evaluate({name:'massaction_prepare_key',value:fieldName}));if(!this.validator.validate()){return;}
1008
+ if(this.useAjax&&item.url){new Ajax.Request(item.url,{'method':'post','parameters':this.form.serialize(true),'onComplete':this.onMassactionComplete.bind(this)});}else if(item.url){this.form.action=item.url;this.form.submit();}},onMassactionComplete:function(transport){if(this.currentItem.complete){try{var listener=this.getListener(this.currentItem.complete)||Prototype.emptyFunction;listener(grid,this,transport);}catch(e){}}},getListener:function(strValue){return eval(strValue);}};var varienGridAction={execute:function(select){if(!select.value||!select.value.isJSON()){return;}
1009
+ var config=select.value.evalJSON();if(config.confirm&&!window.confirm(config.confirm)){select.options[0].selected=true;return;}
1010
+ if(config.popup){var win=window.open(config.href,'action_window','width=500,height=600,resizable=1,scrollbars=1');win.focus();select.options[0].selected=true;}else{setLocation(config.href);}}};var varienStringArray={remove:function(str,haystack)
1011
+ {haystack=','+haystack+',';haystack=haystack.replace(new RegExp(','+str+',','g'),',');return this.trimComma(haystack);},add:function(str,haystack)
1012
+ {haystack=','+haystack+',';if(haystack.search(new RegExp(','+str+',','g'),haystack)===-1){haystack+=str+',';}
1013
+ return this.trimComma(haystack);},has:function(str,haystack)
1014
+ {haystack=','+haystack+',';if(haystack.search(new RegExp(','+str+',','g'),haystack)===-1){return false;}
1015
+ return true;},count:function(haystack)
1016
+ {if(typeof haystack!='string'){return 0;}
1017
+ if(match=haystack.match(new RegExp(',','g'))){return match.length+1;}else if(haystack.length!=0){return 1;}
1018
+ return 0;},each:function(haystack,fnc)
1019
+ {var haystack=haystack.split(',');for(var i=0;i<haystack.length;i++){fnc(haystack[i]);}},trimComma:function(string)
1020
+ {string=string.replace(new RegExp('^(,+)','i'),'');string=string.replace(new RegExp('(,+)$','i'),'');return string;}};var serializerController=Class.create();serializerController.prototype={oldCallbacks:{},initialize:function(hiddenDataHolder,predefinedData,inputsToManage,grid,reloadParamName){this.tabIndex=1000;this.inputsToManage=inputsToManage;this.multidimensionalMode=inputsToManage.length>0;this.gridData=this.getGridDataHash(predefinedData);this.hiddenDataHolder=$(hiddenDataHolder);this.hiddenDataHolder.value=this.serializeObject();this.grid=grid;this.setOldCallback('row_click',this.grid.rowClickCallback);this.setOldCallback('init_row',this.grid.initRowCallback);this.setOldCallback('checkbox_check',this.grid.checkboxCheckCallback);this.reloadParamName=reloadParamName;this.grid.reloadParams={};this.grid.reloadParams[this.reloadParamName+'[]']=this.getDataForReloadParam();this.grid.rowClickCallback=this.rowClick.bind(this);this.grid.initRowCallback=this.rowInit.bind(this);this.grid.checkboxCheckCallback=this.registerData.bind(this);this.grid.rows.each(this.eachRow.bind(this));},setOldCallback:function(callbackName,callback){this.oldCallbacks[callbackName]=callback;},getOldCallback:function(callbackName){return this.oldCallbacks[callbackName]?this.oldCallbacks[callbackName]:Prototype.emptyFunction;},registerData:function(grid,element,checked){if(this.multidimensionalMode){if(checked){if(element.inputElements){this.gridData.set(element.value,{});for(var i=0;i<element.inputElements.length;i++){element.inputElements[i].disabled=false;this.gridData.get(element.value)[element.inputElements[i].name]=element.inputElements[i].value;}}}
1021
+ else{if(element.inputElements){for(var i=0;i<element.inputElements.length;i++){element.inputElements[i].disabled=true;}}
1022
+ this.gridData.unset(element.value);}}
1023
+ else{if(checked){this.gridData.set(element.value,element.value);}
1024
+ else{this.gridData.unset(element.value);}}
1025
+ this.hiddenDataHolder.value=this.serializeObject();this.grid.reloadParams={};this.grid.reloadParams[this.reloadParamName+'[]']=this.getDataForReloadParam();this.getOldCallback('checkbox_check')(grid,element,checked);},eachRow:function(row){this.rowInit(this.grid,row);},rowClick:function(grid,event){var trElement=Event.findElement(event,'tr');var isInput=Event.element(event).tagName=='INPUT';if(trElement){var checkbox=Element.select(trElement,'input');if(checkbox[0]){var checked=isInput?checkbox[0].checked:!checkbox[0].checked;this.grid.setCheckboxChecked(checkbox[0],checked);}}
1026
+ this.getOldCallback('row_click')(grid,event);},inputChange:function(event){var element=Event.element(event);if(element&&element.checkboxElement&&element.checkboxElement.checked){this.gridData.get(element.checkboxElement.value)[element.name]=element.value;this.hiddenDataHolder.value=this.serializeObject();}},rowInit:function(grid,row){if(this.multidimensionalMode){var checkbox=$(row).select('.checkbox')[0];var selectors=this.inputsToManage.map(function(name){return'input[name="'+name+'"]'});var inputs=$(row).select.apply($(row),selectors);if(checkbox&&inputs.length>0){checkbox.inputElements=inputs;for(var i=0;i<inputs.length;i++){inputs[i].checkboxElement=checkbox;if(this.gridData.get(checkbox.value)&&this.gridData.get(checkbox.value)[inputs[i].name]){inputs[i].value=this.gridData.get(checkbox.value)[inputs[i].name];}
1027
+ inputs[i].disabled=!checkbox.checked;inputs[i].tabIndex=this.tabIndex++;Event.observe(inputs[i],'keyup',this.inputChange.bind(this));Event.observe(inputs[i],'change',this.inputChange.bind(this));}}}
1028
+ this.getOldCallback('init_row')(grid,row);},getGridDataHash:function(_object){return $H(this.multidimensionalMode?_object:this.convertArrayToObject(_object))},getDataForReloadParam:function(){return this.multidimensionalMode?this.gridData.keys():this.gridData.values();},serializeObject:function(){if(this.multidimensionalMode){var clone=this.gridData.clone();clone.each(function(pair){clone.set(pair.key,encode_base64(Object.toQueryString(pair.value)));});return clone.toQueryString();}
1029
+ else{return this.gridData.values().join('&');}},convertArrayToObject:function(_array){var _object={};for(var i=0,l=_array.length;i<l;i++){_object[_array[i]]=_array[i];}
1030
+ return _object;}};
var/minifycache/minify_676fb2e38e9cb2203204bcf556430103.gz ADDED
Binary file
var/minifycache/minify_900559c432c691b50ba33f48b4909a4f ADDED
@@ -0,0 +1,672 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ var Prototype={Version:'1.6.0.3',Browser:{IE:!!(window.attachEvent&&navigator.userAgent.indexOf('Opera')===-1),Opera:navigator.userAgent.indexOf('Opera')>-1,WebKit:navigator.userAgent.indexOf('AppleWebKit/')>-1,Gecko:navigator.userAgent.indexOf('Gecko')>-1&&navigator.userAgent.indexOf('KHTML')===-1,MobileSafari:!!navigator.userAgent.match(/Apple.*Mobile.*Safari/)},BrowserFeatures:{XPath:!!document.evaluate,SelectorsAPI:!!document.querySelector,ElementExtensions:!!window.HTMLElement,SpecificElementExtensions:document.createElement('div')['__proto__']&&document.createElement('div')['__proto__']!==document.createElement('form')['__proto__']},ScriptFragment:'<script[^>]*>([\\S\\s]*?)<\/script>',JSONFilter:/^\/\*-secure-([\s\S]*)\*\/\s*$/,emptyFunction:function(){},K:function(x){return x}};if(Prototype.Browser.MobileSafari)
2
+ Prototype.BrowserFeatures.SpecificElementExtensions=false;var Class={create:function(){var parent=null,properties=$A(arguments);if(Object.isFunction(properties[0]))
3
+ parent=properties.shift();function klass(){this.initialize.apply(this,arguments);}
4
+ Object.extend(klass,Class.Methods);klass.superclass=parent;klass.subclasses=[];if(parent){var subclass=function(){};subclass.prototype=parent.prototype;klass.prototype=new subclass;parent.subclasses.push(klass);}
5
+ for(var i=0;i<properties.length;i++)
6
+ klass.addMethods(properties[i]);if(!klass.prototype.initialize)
7
+ klass.prototype.initialize=Prototype.emptyFunction;klass.prototype.constructor=klass;return klass;}};Class.Methods={addMethods:function(source){var ancestor=this.superclass&&this.superclass.prototype;var properties=Object.keys(source);if(!Object.keys({toString:true}).length)
8
+ properties.push("toString","valueOf");for(var i=0,length=properties.length;i<length;i++){var property=properties[i],value=source[property];if(ancestor&&Object.isFunction(value)&&value.argumentNames().first()=="$super"){var method=value;value=(function(m){return function(){return ancestor[m].apply(this,arguments)};})(property).wrap(method);value.valueOf=method.valueOf.bind(method);value.toString=method.toString.bind(method);}
9
+ this.prototype[property]=value;}
10
+ return this;}};var Abstract={};Object.extend=function(destination,source){for(var property in source)
11
+ destination[property]=source[property];return destination;};Object.extend(Object,{inspect:function(object){try{if(Object.isUndefined(object))return'undefined';if(object===null)return'null';return object.inspect?object.inspect():String(object);}catch(e){if(e instanceof RangeError)return'...';throw e;}},toJSON:function(object){var type=typeof object;switch(type){case'undefined':case'function':case'unknown':return;case'boolean':return object.toString();}
12
+ if(object===null)return'null';if(object.toJSON)return object.toJSON();if(Object.isElement(object))return;var results=[];for(var property in object){var value=Object.toJSON(object[property]);if(!Object.isUndefined(value))
13
+ results.push(property.toJSON()+': '+value);}
14
+ return'{'+results.join(', ')+'}';},toQueryString:function(object){return $H(object).toQueryString();},toHTML:function(object){return object&&object.toHTML?object.toHTML():String.interpret(object);},keys:function(object){var keys=[];for(var property in object)
15
+ keys.push(property);return keys;},values:function(object){var values=[];for(var property in object)
16
+ values.push(object[property]);return values;},clone:function(object){return Object.extend({},object);},isElement:function(object){return!!(object&&object.nodeType==1);},isArray:function(object){return object!=null&&typeof object=="object"&&'splice'in object&&'join'in object;},isHash:function(object){return object instanceof Hash;},isFunction:function(object){return typeof object=="function";},isString:function(object){return typeof object=="string";},isNumber:function(object){return typeof object=="number";},isUndefined:function(object){return typeof object=="undefined";}});Object.extend(Function.prototype,{argumentNames:function(){var names=this.toString().match(/^[\s\(]*function[^(]*\(([^\)]*)\)/)[1].replace(/\s+/g,'').split(',');return names.length==1&&!names[0]?[]:names;},bind:function(){if(arguments.length<2&&Object.isUndefined(arguments[0]))return this;var __method=this,args=$A(arguments),object=args.shift();return function(){return __method.apply(object,args.concat($A(arguments)));}},bindAsEventListener:function(){var __method=this,args=$A(arguments),object=args.shift();return function(event){return __method.apply(object,[event||window.event].concat(args));}},curry:function(){if(!arguments.length)return this;var __method=this,args=$A(arguments);return function(){return __method.apply(this,args.concat($A(arguments)));}},delay:function(){var __method=this,args=$A(arguments),timeout=args.shift()*1000;return window.setTimeout(function(){return __method.apply(__method,args);},timeout);},defer:function(){var args=[0.01].concat($A(arguments));return this.delay.apply(this,args);},wrap:function(wrapper){var __method=this;return function(){return wrapper.apply(this,[__method.bind(this)].concat($A(arguments)));}},methodize:function(){if(this._methodized)return this._methodized;var __method=this;return this._methodized=function(){return __method.apply(null,[this].concat($A(arguments)));};}});Date.prototype.toJSON=function(){return'"'+this.getUTCFullYear()+'-'+
17
+ (this.getUTCMonth()+1).toPaddedString(2)+'-'+
18
+ this.getUTCDate().toPaddedString(2)+'T'+
19
+ this.getUTCHours().toPaddedString(2)+':'+
20
+ this.getUTCMinutes().toPaddedString(2)+':'+
21
+ this.getUTCSeconds().toPaddedString(2)+'Z"';};var Try={these:function(){var returnValue;for(var i=0,length=arguments.length;i<length;i++){var lambda=arguments[i];try{returnValue=lambda();break;}catch(e){}}
22
+ return returnValue;}};RegExp.prototype.match=RegExp.prototype.test;RegExp.escape=function(str){return String(str).replace(/([.*+?^=!:${}()|[\]\/\\])/g,'\\$1');};var PeriodicalExecuter=Class.create({initialize:function(callback,frequency){this.callback=callback;this.frequency=frequency;this.currentlyExecuting=false;this.registerCallback();},registerCallback:function(){this.timer=setInterval(this.onTimerEvent.bind(this),this.frequency*1000);},execute:function(){this.callback(this);},stop:function(){if(!this.timer)return;clearInterval(this.timer);this.timer=null;},onTimerEvent:function(){if(!this.currentlyExecuting){try{this.currentlyExecuting=true;this.execute();}finally{this.currentlyExecuting=false;}}}});Object.extend(String,{interpret:function(value){return value==null?'':String(value);},specialChar:{'\b':'\\b','\t':'\\t','\n':'\\n','\f':'\\f','\r':'\\r','\\':'\\\\'}});Object.extend(String.prototype,{gsub:function(pattern,replacement){var result='',source=this,match;replacement=arguments.callee.prepareReplacement(replacement);while(source.length>0){if(match=source.match(pattern)){result+=source.slice(0,match.index);result+=String.interpret(replacement(match));source=source.slice(match.index+match[0].length);}else{result+=source,source='';}}
23
+ return result;},sub:function(pattern,replacement,count){replacement=this.gsub.prepareReplacement(replacement);count=Object.isUndefined(count)?1:count;return this.gsub(pattern,function(match){if(--count<0)return match[0];return replacement(match);});},scan:function(pattern,iterator){this.gsub(pattern,iterator);return String(this);},truncate:function(length,truncation){length=length||30;truncation=Object.isUndefined(truncation)?'...':truncation;return this.length>length?this.slice(0,length-truncation.length)+truncation:String(this);},strip:function(){return this.replace(/^\s+/,'').replace(/\s+$/,'');},stripTags:function(){return this.replace(/<\/?[^>]+>/gi,'');},stripScripts:function(){return this.replace(new RegExp(Prototype.ScriptFragment,'img'),'');},extractScripts:function(){var matchAll=new RegExp(Prototype.ScriptFragment,'img');var matchOne=new RegExp(Prototype.ScriptFragment,'im');return(this.match(matchAll)||[]).map(function(scriptTag){return(scriptTag.match(matchOne)||['',''])[1];});},evalScripts:function(){return this.extractScripts().map(function(script){return eval(script)});},escapeHTML:function(){var self=arguments.callee;self.text.data=this;return self.div.innerHTML;},unescapeHTML:function(){var div=new Element('div');div.innerHTML=this.stripTags();return div.childNodes[0]?(div.childNodes.length>1?$A(div.childNodes).inject('',function(memo,node){return memo+node.nodeValue}):div.childNodes[0].nodeValue):'';},toQueryParams:function(separator){var match=this.strip().match(/([^?#]*)(#.*)?$/);if(!match)return{};return match[1].split(separator||'&').inject({},function(hash,pair){if((pair=pair.split('='))[0]){var key=decodeURIComponent(pair.shift());var value=pair.length>1?pair.join('='):pair[0];if(value!=undefined)value=decodeURIComponent(value);if(key in hash){if(!Object.isArray(hash[key]))hash[key]=[hash[key]];hash[key].push(value);}
24
+ else hash[key]=value;}
25
+ return hash;});},toArray:function(){return this.split('');},succ:function(){return this.slice(0,this.length-1)+
26
+ String.fromCharCode(this.charCodeAt(this.length-1)+1);},times:function(count){return count<1?'':new Array(count+1).join(this);},camelize:function(){var parts=this.split('-'),len=parts.length;if(len==1)return parts[0];var camelized=this.charAt(0)=='-'?parts[0].charAt(0).toUpperCase()+parts[0].substring(1):parts[0];for(var i=1;i<len;i++)
27
+ camelized+=parts[i].charAt(0).toUpperCase()+parts[i].substring(1);return camelized;},capitalize:function(){return this.charAt(0).toUpperCase()+this.substring(1).toLowerCase();},underscore:function(){return this.gsub(/::/,'/').gsub(/([A-Z]+)([A-Z][a-z])/,'#{1}_#{2}').gsub(/([a-z\d])([A-Z])/,'#{1}_#{2}').gsub(/-/,'_').toLowerCase();},dasherize:function(){return this.gsub(/_/,'-');},inspect:function(useDoubleQuotes){var escapedString=this.gsub(/[\x00-\x1f\\]/,function(match){var character=String.specialChar[match[0]];return character?character:'\\u00'+match[0].charCodeAt().toPaddedString(2,16);});if(useDoubleQuotes)return'"'+escapedString.replace(/"/g,'\\"')+'"';return"'"+escapedString.replace(/'/g,'\\\'')+"'";},toJSON:function(){return this.inspect(true);},unfilterJSON:function(filter){return this.sub(filter||Prototype.JSONFilter,'#{1}');},isJSON:function(){var str=this;if(str.blank())return false;str=this.replace(/\\./g,'@').replace(/"[^"\\\n\r]*"/g,'');return(/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(str);},evalJSON:function(sanitize){var json=this.unfilterJSON();try{if(!sanitize||json.isJSON())return eval('('+json+')');}catch(e){}
28
+ throw new SyntaxError('Badly formed JSON string: '+this.inspect());},include:function(pattern){return this.indexOf(pattern)>-1;},startsWith:function(pattern){return this.indexOf(pattern)===0;},endsWith:function(pattern){var d=this.length-pattern.length;return d>=0&&this.lastIndexOf(pattern)===d;},empty:function(){return this=='';},blank:function(){return /^\s*$/.test(this);},interpolate:function(object,pattern){return new Template(this,pattern).evaluate(object);}});if(Prototype.Browser.WebKit||Prototype.Browser.IE)Object.extend(String.prototype,{escapeHTML:function(){return this.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');},unescapeHTML:function(){return this.stripTags().replace(/&amp;/g,'&').replace(/&lt;/g,'<').replace(/&gt;/g,'>');}});String.prototype.gsub.prepareReplacement=function(replacement){if(Object.isFunction(replacement))return replacement;var template=new Template(replacement);return function(match){return template.evaluate(match)};};String.prototype.parseQuery=String.prototype.toQueryParams;Object.extend(String.prototype.escapeHTML,{div:document.createElement('div'),text:document.createTextNode('')});String.prototype.escapeHTML.div.appendChild(String.prototype.escapeHTML.text);var Template=Class.create({initialize:function(template,pattern){this.template=template.toString();this.pattern=pattern||Template.Pattern;},evaluate:function(object){if(Object.isFunction(object.toTemplateReplacements))
29
+ object=object.toTemplateReplacements();return this.template.gsub(this.pattern,function(match){if(object==null)return'';var before=match[1]||'';if(before=='\\')return match[2];var ctx=object,expr=match[3];var pattern=/^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/;match=pattern.exec(expr);if(match==null)return before;while(match!=null){var comp=match[1].startsWith('[')?match[2].gsub('\\\\]',']'):match[1];ctx=ctx[comp];if(null==ctx||''==match[3])break;expr=expr.substring('['==match[3]?match[1].length:match[0].length);match=pattern.exec(expr);}
30
+ return before+String.interpret(ctx);});}});Template.Pattern=/(^|.|\r|\n)(#\{(.*?)\})/;var $break={};var Enumerable={each:function(iterator,context){var index=0;try{this._each(function(value){iterator.call(context,value,index++);});}catch(e){if(e!=$break)throw e;}
31
+ return this;},eachSlice:function(number,iterator,context){var index=-number,slices=[],array=this.toArray();if(number<1)return array;while((index+=number)<array.length)
32
+ slices.push(array.slice(index,index+number));return slices.collect(iterator,context);},all:function(iterator,context){iterator=iterator||Prototype.K;var result=true;this.each(function(value,index){result=result&&!!iterator.call(context,value,index);if(!result)throw $break;});return result;},any:function(iterator,context){iterator=iterator||Prototype.K;var result=false;this.each(function(value,index){if(result=!!iterator.call(context,value,index))
33
+ throw $break;});return result;},collect:function(iterator,context){iterator=iterator||Prototype.K;var results=[];this.each(function(value,index){results.push(iterator.call(context,value,index));});return results;},detect:function(iterator,context){var result;this.each(function(value,index){if(iterator.call(context,value,index)){result=value;throw $break;}});return result;},findAll:function(iterator,context){var results=[];this.each(function(value,index){if(iterator.call(context,value,index))
34
+ results.push(value);});return results;},grep:function(filter,iterator,context){iterator=iterator||Prototype.K;var results=[];if(Object.isString(filter))
35
+ filter=new RegExp(filter);this.each(function(value,index){if(filter.match(value))
36
+ results.push(iterator.call(context,value,index));});return results;},include:function(object){if(Object.isFunction(this.indexOf))
37
+ if(this.indexOf(object)!=-1)return true;var found=false;this.each(function(value){if(value==object){found=true;throw $break;}});return found;},inGroupsOf:function(number,fillWith){fillWith=Object.isUndefined(fillWith)?null:fillWith;return this.eachSlice(number,function(slice){while(slice.length<number)slice.push(fillWith);return slice;});},inject:function(memo,iterator,context){this.each(function(value,index){memo=iterator.call(context,memo,value,index);});return memo;},invoke:function(method){var args=$A(arguments).slice(1);return this.map(function(value){return value[method].apply(value,args);});},max:function(iterator,context){iterator=iterator||Prototype.K;var result;this.each(function(value,index){value=iterator.call(context,value,index);if(result==null||value>=result)
38
+ result=value;});return result;},min:function(iterator,context){iterator=iterator||Prototype.K;var result;this.each(function(value,index){value=iterator.call(context,value,index);if(result==null||value<result)
39
+ result=value;});return result;},partition:function(iterator,context){iterator=iterator||Prototype.K;var trues=[],falses=[];this.each(function(value,index){(iterator.call(context,value,index)?trues:falses).push(value);});return[trues,falses];},pluck:function(property){var results=[];this.each(function(value){results.push(value[property]);});return results;},reject:function(iterator,context){var results=[];this.each(function(value,index){if(!iterator.call(context,value,index))
40
+ results.push(value);});return results;},sortBy:function(iterator,context){return this.map(function(value,index){return{value:value,criteria:iterator.call(context,value,index)};}).sort(function(left,right){var a=left.criteria,b=right.criteria;return a<b?-1:a>b?1:0;}).pluck('value');},toArray:function(){return this.map();},zip:function(){var iterator=Prototype.K,args=$A(arguments);if(Object.isFunction(args.last()))
41
+ iterator=args.pop();var collections=[this].concat(args).map($A);return this.map(function(value,index){return iterator(collections.pluck(index));});},size:function(){return this.toArray().length;},inspect:function(){return'#<Enumerable:'+this.toArray().inspect()+'>';}};Object.extend(Enumerable,{map:Enumerable.collect,find:Enumerable.detect,select:Enumerable.findAll,filter:Enumerable.findAll,member:Enumerable.include,entries:Enumerable.toArray,every:Enumerable.all,some:Enumerable.any});function $A(iterable){if(!iterable)return[];if(iterable.toArray)return iterable.toArray();var length=iterable.length||0,results=new Array(length);while(length--)results[length]=iterable[length];return results;}
42
+ if(Prototype.Browser.WebKit){$A=function(iterable){if(!iterable)return[];if(!(typeof iterable==='function'&&typeof iterable.length==='number'&&typeof iterable.item==='function')&&iterable.toArray)
43
+ return iterable.toArray();var length=iterable.length||0,results=new Array(length);while(length--)results[length]=iterable[length];return results;};}
44
+ Array.from=$A;Object.extend(Array.prototype,Enumerable);if(!Array.prototype._reverse)Array.prototype._reverse=Array.prototype.reverse;Object.extend(Array.prototype,{_each:function(iterator){for(var i=0,length=this.length;i<length;i++)
45
+ iterator(this[i]);},clear:function(){this.length=0;return this;},first:function(){return this[0];},last:function(){return this[this.length-1];},compact:function(){return this.select(function(value){return value!=null;});},flatten:function(){return this.inject([],function(array,value){return array.concat(Object.isArray(value)?value.flatten():[value]);});},without:function(){var values=$A(arguments);return this.select(function(value){return!values.include(value);});},reverse:function(inline){return(inline!==false?this:this.toArray())._reverse();},reduce:function(){return this.length>1?this:this[0];},uniq:function(sorted){return this.inject([],function(array,value,index){if(0==index||(sorted?array.last()!=value:!array.include(value)))
46
+ array.push(value);return array;});},intersect:function(array){return this.uniq().findAll(function(item){return array.detect(function(value){return item===value});});},clone:function(){return[].concat(this);},size:function(){return this.length;},inspect:function(){return'['+this.map(Object.inspect).join(', ')+']';},toJSON:function(){var results=[];this.each(function(object){var value=Object.toJSON(object);if(!Object.isUndefined(value))results.push(value);});return'['+results.join(', ')+']';}});if(Object.isFunction(Array.prototype.forEach))
47
+ Array.prototype._each=Array.prototype.forEach;if(!Array.prototype.indexOf)Array.prototype.indexOf=function(item,i){i||(i=0);var length=this.length;if(i<0)i=length+i;for(;i<length;i++)
48
+ if(this[i]===item)return i;return-1;};if(!Array.prototype.lastIndexOf)Array.prototype.lastIndexOf=function(item,i){i=isNaN(i)?this.length:(i<0?this.length+i:i)+1;var n=this.slice(0,i).reverse().indexOf(item);return(n<0)?n:i-n-1;};Array.prototype.toArray=Array.prototype.clone;function $w(string){if(!Object.isString(string))return[];string=string.strip();return string?string.split(/\s+/):[];}
49
+ if(Prototype.Browser.Opera){Array.prototype.concat=function(){var array=[];for(var i=0,length=this.length;i<length;i++)array.push(this[i]);for(var i=0,length=arguments.length;i<length;i++){if(Object.isArray(arguments[i])){for(var j=0,arrayLength=arguments[i].length;j<arrayLength;j++)
50
+ array.push(arguments[i][j]);}else{array.push(arguments[i]);}}
51
+ return array;};}
52
+ Object.extend(Number.prototype,{toColorPart:function(){return this.toPaddedString(2,16);},succ:function(){return this+1;},times:function(iterator,context){$R(0,this,true).each(iterator,context);return this;},toPaddedString:function(length,radix){var string=this.toString(radix||10);return'0'.times(length-string.length)+string;},toJSON:function(){return isFinite(this)?this.toString():'null';}});$w('abs round ceil floor').each(function(method){Number.prototype[method]=Math[method].methodize();});function $H(object){return new Hash(object);};var Hash=Class.create(Enumerable,(function(){function toQueryPair(key,value){if(Object.isUndefined(value))return key;return key+'='+encodeURIComponent(String.interpret(value));}
53
+ return{initialize:function(object){this._object=Object.isHash(object)?object.toObject():Object.clone(object);},_each:function(iterator){for(var key in this._object){var value=this._object[key],pair=[key,value];pair.key=key;pair.value=value;iterator(pair);}},set:function(key,value){return this._object[key]=value;},get:function(key){if(this._object[key]!==Object.prototype[key])
54
+ return this._object[key];},unset:function(key){var value=this._object[key];delete this._object[key];return value;},toObject:function(){return Object.clone(this._object);},keys:function(){return this.pluck('key');},values:function(){return this.pluck('value');},index:function(value){var match=this.detect(function(pair){return pair.value===value;});return match&&match.key;},merge:function(object){return this.clone().update(object);},update:function(object){return new Hash(object).inject(this,function(result,pair){result.set(pair.key,pair.value);return result;});},toQueryString:function(){return this.inject([],function(results,pair){var key=encodeURIComponent(pair.key),values=pair.value;if(values&&typeof values=='object'){if(Object.isArray(values))
55
+ return results.concat(values.map(toQueryPair.curry(key)));}else results.push(toQueryPair(key,values));return results;}).join('&');},inspect:function(){return'#<Hash:{'+this.map(function(pair){return pair.map(Object.inspect).join(': ');}).join(', ')+'}>';},toJSON:function(){return Object.toJSON(this.toObject());},clone:function(){return new Hash(this);}}})());Hash.prototype.toTemplateReplacements=Hash.prototype.toObject;Hash.from=$H;var ObjectRange=Class.create(Enumerable,{initialize:function(start,end,exclusive){this.start=start;this.end=end;this.exclusive=exclusive;},_each:function(iterator){var value=this.start;while(this.include(value)){iterator(value);value=value.succ();}},include:function(value){if(value<this.start)
56
+ return false;if(this.exclusive)
57
+ return value<this.end;return value<=this.end;}});var $R=function(start,end,exclusive){return new ObjectRange(start,end,exclusive);};var Ajax={getTransport:function(){return Try.these(function(){return new XMLHttpRequest()},function(){return new ActiveXObject('Msxml2.XMLHTTP')},function(){return new ActiveXObject('Microsoft.XMLHTTP')})||false;},activeRequestCount:0};Ajax.Responders={responders:[],_each:function(iterator){this.responders._each(iterator);},register:function(responder){if(!this.include(responder))
58
+ this.responders.push(responder);},unregister:function(responder){this.responders=this.responders.without(responder);},dispatch:function(callback,request,transport,json){this.each(function(responder){if(Object.isFunction(responder[callback])){try{responder[callback].apply(responder,[request,transport,json]);}catch(e){}}});}};Object.extend(Ajax.Responders,Enumerable);Ajax.Responders.register({onCreate:function(){Ajax.activeRequestCount++},onComplete:function(){Ajax.activeRequestCount--}});Ajax.Base=Class.create({initialize:function(options){this.options={method:'post',asynchronous:true,contentType:'application/x-www-form-urlencoded',encoding:'UTF-8',parameters:'',evalJSON:true,evalJS:true};Object.extend(this.options,options||{});this.options.method=this.options.method.toLowerCase();if(Object.isString(this.options.parameters))
59
+ this.options.parameters=this.options.parameters.toQueryParams();else if(Object.isHash(this.options.parameters))
60
+ this.options.parameters=this.options.parameters.toObject();}});Ajax.Request=Class.create(Ajax.Base,{_complete:false,initialize:function($super,url,options){$super(options);this.transport=Ajax.getTransport();this.request(url);},request:function(url){this.url=url;this.method=this.options.method;var params=Object.clone(this.options.parameters);if(!['get','post'].include(this.method)){params['_method']=this.method;this.method='post';}
61
+ this.parameters=params;if(params=Object.toQueryString(params)){if(this.method=='get')
62
+ this.url+=(this.url.include('?')?'&':'?')+params;else if(/Konqueror|Safari|KHTML/.test(navigator.userAgent))
63
+ params+='&_=';}
64
+ try{var response=new Ajax.Response(this);if(this.options.onCreate)this.options.onCreate(response);Ajax.Responders.dispatch('onCreate',this,response);this.transport.open(this.method.toUpperCase(),this.url,this.options.asynchronous);if(this.options.asynchronous)this.respondToReadyState.bind(this).defer(1);this.transport.onreadystatechange=this.onStateChange.bind(this);this.setRequestHeaders();this.body=this.method=='post'?(this.options.postBody||params):null;this.transport.send(this.body);if(!this.options.asynchronous&&this.transport.overrideMimeType)
65
+ this.onStateChange();}
66
+ catch(e){this.dispatchException(e);}},onStateChange:function(){var readyState=this.transport.readyState;if(readyState>1&&!((readyState==4)&&this._complete))
67
+ this.respondToReadyState(this.transport.readyState);},setRequestHeaders:function(){var headers={'X-Requested-With':'XMLHttpRequest','X-Prototype-Version':Prototype.Version,'Accept':'text/javascript, text/html, application/xml, text/xml, */*'};if(this.method=='post'){headers['Content-type']=this.options.contentType+
68
+ (this.options.encoding?'; charset='+this.options.encoding:'');if(this.transport.overrideMimeType&&(navigator.userAgent.match(/Gecko\/(\d{4})/)||[0,2005])[1]<2005)
69
+ headers['Connection']='close';}
70
+ if(typeof this.options.requestHeaders=='object'){var extras=this.options.requestHeaders;if(Object.isFunction(extras.push))
71
+ for(var i=0,length=extras.length;i<length;i+=2)
72
+ headers[extras[i]]=extras[i+1];else
73
+ $H(extras).each(function(pair){headers[pair.key]=pair.value});}
74
+ for(var name in headers)
75
+ this.transport.setRequestHeader(name,headers[name]);},success:function(){var status=this.getStatus();return!status||(status>=200&&status<300);},getStatus:function(){try{return this.transport.status||0;}catch(e){return 0}},respondToReadyState:function(readyState){var state=Ajax.Request.Events[readyState],response=new Ajax.Response(this);if(state=='Complete'){try{this._complete=true;(this.options['on'+response.status]||this.options['on'+(this.success()?'Success':'Failure')]||Prototype.emptyFunction)(response,response.headerJSON);}catch(e){this.dispatchException(e);}
76
+ var contentType=response.getHeader('Content-type');if(this.options.evalJS=='force'||(this.options.evalJS&&this.isSameOrigin()&&contentType&&contentType.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i)))
77
+ this.evalResponse();}
78
+ try{(this.options['on'+state]||Prototype.emptyFunction)(response,response.headerJSON);Ajax.Responders.dispatch('on'+state,this,response,response.headerJSON);}catch(e){this.dispatchException(e);}
79
+ if(state=='Complete'){this.transport.onreadystatechange=Prototype.emptyFunction;}},isSameOrigin:function(){var m=this.url.match(/^\s*https?:\/\/[^\/]*/);return!m||(m[0]=='#{protocol}//#{domain}#{port}'.interpolate({protocol:location.protocol,domain:document.domain,port:location.port?':'+location.port:''}));},getHeader:function(name){try{return this.transport.getResponseHeader(name)||null;}catch(e){return null}},evalResponse:function(){try{return eval((this.transport.responseText||'').unfilterJSON());}catch(e){this.dispatchException(e);}},dispatchException:function(exception){(this.options.onException||Prototype.emptyFunction)(this,exception);Ajax.Responders.dispatch('onException',this,exception);}});Ajax.Request.Events=['Uninitialized','Loading','Loaded','Interactive','Complete'];Ajax.Response=Class.create({initialize:function(request){this.request=request;var transport=this.transport=request.transport,readyState=this.readyState=transport.readyState;if((readyState>2&&!Prototype.Browser.IE)||readyState==4){this.status=this.getStatus();this.statusText=this.getStatusText();this.responseText=String.interpret(transport.responseText);this.headerJSON=this._getHeaderJSON();}
80
+ if(readyState==4){var xml=transport.responseXML;this.responseXML=Object.isUndefined(xml)?null:xml;this.responseJSON=this._getResponseJSON();}},status:0,statusText:'',getStatus:Ajax.Request.prototype.getStatus,getStatusText:function(){try{return this.transport.statusText||'';}catch(e){return''}},getHeader:Ajax.Request.prototype.getHeader,getAllHeaders:function(){try{return this.getAllResponseHeaders();}catch(e){return null}},getResponseHeader:function(name){return this.transport.getResponseHeader(name);},getAllResponseHeaders:function(){return this.transport.getAllResponseHeaders();},_getHeaderJSON:function(){var json=this.getHeader('X-JSON');if(!json)return null;json=decodeURIComponent(escape(json));try{return json.evalJSON(this.request.options.sanitizeJSON||!this.request.isSameOrigin());}catch(e){this.request.dispatchException(e);}},_getResponseJSON:function(){var options=this.request.options;if(!options.evalJSON||(options.evalJSON!='force'&&!(this.getHeader('Content-type')||'').include('application/json'))||this.responseText.blank())
81
+ return null;try{return this.responseText.evalJSON(options.sanitizeJSON||!this.request.isSameOrigin());}catch(e){this.request.dispatchException(e);}}});Ajax.Updater=Class.create(Ajax.Request,{initialize:function($super,container,url,options){this.container={success:(container.success||container),failure:(container.failure||(container.success?null:container))};options=Object.clone(options);var onComplete=options.onComplete;options.onComplete=(function(response,json){this.updateContent(response.responseText);if(Object.isFunction(onComplete))onComplete(response,json);}).bind(this);$super(url,options);},updateContent:function(responseText){var receiver=this.container[this.success()?'success':'failure'],options=this.options;if(!options.evalScripts)responseText=responseText.stripScripts();if(receiver=$(receiver)){if(options.insertion){if(Object.isString(options.insertion)){var insertion={};insertion[options.insertion]=responseText;receiver.insert(insertion);}
82
+ else options.insertion(receiver,responseText);}
83
+ else receiver.update(responseText);}}});Ajax.PeriodicalUpdater=Class.create(Ajax.Base,{initialize:function($super,container,url,options){$super(options);this.onComplete=this.options.onComplete;this.frequency=(this.options.frequency||2);this.decay=(this.options.decay||1);this.updater={};this.container=container;this.url=url;this.start();},start:function(){this.options.onComplete=this.updateComplete.bind(this);this.onTimerEvent();},stop:function(){this.updater.options.onComplete=undefined;clearTimeout(this.timer);(this.onComplete||Prototype.emptyFunction).apply(this,arguments);},updateComplete:function(response){if(this.options.decay){this.decay=(response.responseText==this.lastText?this.decay*this.options.decay:1);this.lastText=response.responseText;}
84
+ this.timer=this.onTimerEvent.bind(this).delay(this.decay*this.frequency);},onTimerEvent:function(){this.updater=new Ajax.Updater(this.container,this.url,this.options);}});function $(element){if(arguments.length>1){for(var i=0,elements=[],length=arguments.length;i<length;i++)
85
+ elements.push($(arguments[i]));return elements;}
86
+ if(Object.isString(element))
87
+ element=document.getElementById(element);return Element.extend(element);}
88
+ if(Prototype.BrowserFeatures.XPath){document._getElementsByXPath=function(expression,parentElement){var results=[];var query=document.evaluate(expression,$(parentElement)||document,null,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null);for(var i=0,length=query.snapshotLength;i<length;i++)
89
+ results.push(Element.extend(query.snapshotItem(i)));return results;};}
90
+ if(!window.Node)var Node={};if(!Node.ELEMENT_NODE){Object.extend(Node,{ELEMENT_NODE:1,ATTRIBUTE_NODE:2,TEXT_NODE:3,CDATA_SECTION_NODE:4,ENTITY_REFERENCE_NODE:5,ENTITY_NODE:6,PROCESSING_INSTRUCTION_NODE:7,COMMENT_NODE:8,DOCUMENT_NODE:9,DOCUMENT_TYPE_NODE:10,DOCUMENT_FRAGMENT_NODE:11,NOTATION_NODE:12});}
91
+ (function(){var element=this.Element;this.Element=function(tagName,attributes){attributes=attributes||{};tagName=tagName.toLowerCase();var cache=Element.cache;if(Prototype.Browser.IE&&attributes.name){tagName='<'+tagName+' name="'+attributes.name+'">';delete attributes.name;return Element.writeAttribute(document.createElement(tagName),attributes);}
92
+ if(!cache[tagName])cache[tagName]=Element.extend(document.createElement(tagName));return Element.writeAttribute(cache[tagName].cloneNode(false),attributes);};Object.extend(this.Element,element||{});if(element)this.Element.prototype=element.prototype;}).call(window);Element.cache={};Element.Methods={visible:function(element){return $(element).style.display!='none';},toggle:function(element){element=$(element);Element[Element.visible(element)?'hide':'show'](element);return element;},hide:function(element){element=$(element);element.style.display='none';return element;},show:function(element){element=$(element);element.style.display='';return element;},remove:function(element){element=$(element);element.parentNode.removeChild(element);return element;},update:function(element,content){element=$(element);if(content&&content.toElement)content=content.toElement();if(Object.isElement(content))return element.update().insert(content);content=Object.toHTML(content);element.innerHTML=content.stripScripts();content.evalScripts.bind(content).defer();return element;},replace:function(element,content){element=$(element);if(content&&content.toElement)content=content.toElement();else if(!Object.isElement(content)){content=Object.toHTML(content);var range=element.ownerDocument.createRange();range.selectNode(element);content.evalScripts.bind(content).defer();content=range.createContextualFragment(content.stripScripts());}
93
+ element.parentNode.replaceChild(content,element);return element;},insert:function(element,insertions){element=$(element);if(Object.isString(insertions)||Object.isNumber(insertions)||Object.isElement(insertions)||(insertions&&(insertions.toElement||insertions.toHTML)))
94
+ insertions={bottom:insertions};var content,insert,tagName,childNodes;for(var position in insertions){content=insertions[position];position=position.toLowerCase();insert=Element._insertionTranslations[position];if(content&&content.toElement)content=content.toElement();if(Object.isElement(content)){insert(element,content);continue;}
95
+ content=Object.toHTML(content);tagName=((position=='before'||position=='after')?element.parentNode:element).tagName.toUpperCase();childNodes=Element._getContentFromAnonymousElement(tagName,content.stripScripts());if(position=='top'||position=='after')childNodes.reverse();childNodes.each(insert.curry(element));content.evalScripts.bind(content).defer();}
96
+ return element;},wrap:function(element,wrapper,attributes){element=$(element);if(Object.isElement(wrapper))
97
+ $(wrapper).writeAttribute(attributes||{});else if(Object.isString(wrapper))wrapper=new Element(wrapper,attributes);else wrapper=new Element('div',wrapper);if(element.parentNode)
98
+ element.parentNode.replaceChild(wrapper,element);wrapper.appendChild(element);return wrapper;},inspect:function(element){element=$(element);var result='<'+element.tagName.toLowerCase();$H({'id':'id','className':'class'}).each(function(pair){var property=pair.first(),attribute=pair.last();var value=(element[property]||'').toString();if(value)result+=' '+attribute+'='+value.inspect(true);});return result+'>';},recursivelyCollect:function(element,property){element=$(element);var elements=[];while(element=element[property])
99
+ if(element.nodeType==1)
100
+ elements.push(Element.extend(element));return elements;},ancestors:function(element){return $(element).recursivelyCollect('parentNode');},descendants:function(element){return $(element).select("*");},firstDescendant:function(element){element=$(element).firstChild;while(element&&element.nodeType!=1)element=element.nextSibling;return $(element);},immediateDescendants:function(element){if(!(element=$(element).firstChild))return[];while(element&&element.nodeType!=1)element=element.nextSibling;if(element)return[element].concat($(element).nextSiblings());return[];},previousSiblings:function(element){return $(element).recursivelyCollect('previousSibling');},nextSiblings:function(element){return $(element).recursivelyCollect('nextSibling');},siblings:function(element){element=$(element);return element.previousSiblings().reverse().concat(element.nextSiblings());},match:function(element,selector){if(Object.isString(selector))
101
+ selector=new Selector(selector);return selector.match($(element));},up:function(element,expression,index){element=$(element);if(arguments.length==1)return $(element.parentNode);var ancestors=element.ancestors();return Object.isNumber(expression)?ancestors[expression]:Selector.findElement(ancestors,expression,index);},down:function(element,expression,index){element=$(element);if(arguments.length==1)return element.firstDescendant();return Object.isNumber(expression)?element.descendants()[expression]:Element.select(element,expression)[index||0];},previous:function(element,expression,index){element=$(element);if(arguments.length==1)return $(Selector.handlers.previousElementSibling(element));var previousSiblings=element.previousSiblings();return Object.isNumber(expression)?previousSiblings[expression]:Selector.findElement(previousSiblings,expression,index);},next:function(element,expression,index){element=$(element);if(arguments.length==1)return $(Selector.handlers.nextElementSibling(element));var nextSiblings=element.nextSiblings();return Object.isNumber(expression)?nextSiblings[expression]:Selector.findElement(nextSiblings,expression,index);},select:function(){var args=$A(arguments),element=$(args.shift());return Selector.findChildElements(element,args);},adjacent:function(){var args=$A(arguments),element=$(args.shift());return Selector.findChildElements(element.parentNode,args).without(element);},identify:function(element){element=$(element);var id=element.readAttribute('id'),self=arguments.callee;if(id)return id;do{id='anonymous_element_'+self.counter++}while($(id));element.writeAttribute('id',id);return id;},readAttribute:function(element,name){element=$(element);if(Prototype.Browser.IE){var t=Element._attributeTranslations.read;if(t.values[name])return t.values[name](element,name);if(t.names[name])name=t.names[name];if(name.include(':')){return(!element.attributes||!element.attributes[name])?null:element.attributes[name].value;}}
102
+ return element.getAttribute(name);},writeAttribute:function(element,name,value){element=$(element);var attributes={},t=Element._attributeTranslations.write;if(typeof name=='object')attributes=name;else attributes[name]=Object.isUndefined(value)?true:value;for(var attr in attributes){name=t.names[attr]||attr;value=attributes[attr];if(t.values[attr])name=t.values[attr](element,value);if(value===false||value===null)
103
+ element.removeAttribute(name);else if(value===true)
104
+ element.setAttribute(name,name);else element.setAttribute(name,value);}
105
+ return element;},getHeight:function(element){return $(element).getDimensions().height;},getWidth:function(element){return $(element).getDimensions().width;},classNames:function(element){return new Element.ClassNames(element);},hasClassName:function(element,className){if(!(element=$(element)))return;var elementClassName=element.className;return(elementClassName.length>0&&(elementClassName==className||new RegExp("(^|\\s)"+className+"(\\s|$)").test(elementClassName)));},addClassName:function(element,className){if(!(element=$(element)))return;if(!element.hasClassName(className))
106
+ element.className+=(element.className?' ':'')+className;return element;},removeClassName:function(element,className){if(!(element=$(element)))return;element.className=element.className.replace(new RegExp("(^|\\s+)"+className+"(\\s+|$)"),' ').strip();return element;},toggleClassName:function(element,className){if(!(element=$(element)))return;return element[element.hasClassName(className)?'removeClassName':'addClassName'](className);},cleanWhitespace:function(element){element=$(element);var node=element.firstChild;while(node){var nextNode=node.nextSibling;if(node.nodeType==3&&!/\S/.test(node.nodeValue))
107
+ element.removeChild(node);node=nextNode;}
108
+ return element;},empty:function(element){return $(element).innerHTML.blank();},descendantOf:function(element,ancestor){element=$(element),ancestor=$(ancestor);if(element.compareDocumentPosition)
109
+ return(element.compareDocumentPosition(ancestor)&8)===8;if(ancestor.contains)
110
+ return ancestor.contains(element)&&ancestor!==element;while(element=element.parentNode)
111
+ if(element==ancestor)return true;return false;},scrollTo:function(element){element=$(element);var pos=element.cumulativeOffset();window.scrollTo(pos[0],pos[1]);return element;},getStyle:function(element,style){element=$(element);style=style=='float'?'cssFloat':style.camelize();var value=element.style[style];if(!value||value=='auto'){var css=document.defaultView.getComputedStyle(element,null);value=css?css[style]:null;}
112
+ if(style=='opacity')return value?parseFloat(value):1.0;return value=='auto'?null:value;},getOpacity:function(element){return $(element).getStyle('opacity');},setStyle:function(element,styles){element=$(element);var elementStyle=element.style,match;if(Object.isString(styles)){element.style.cssText+=';'+styles;return styles.include('opacity')?element.setOpacity(styles.match(/opacity:\s*(\d?\.?\d*)/)[1]):element;}
113
+ for(var property in styles)
114
+ if(property=='opacity')element.setOpacity(styles[property]);else
115
+ elementStyle[(property=='float'||property=='cssFloat')?(Object.isUndefined(elementStyle.styleFloat)?'cssFloat':'styleFloat'):property]=styles[property];return element;},setOpacity:function(element,value){element=$(element);element.style.opacity=(value==1||value==='')?'':(value<0.00001)?0:value;return element;},getDimensions:function(element){element=$(element);var display=element.getStyle('display');if(display!='none'&&display!=null)
116
+ return{width:element.offsetWidth,height:element.offsetHeight};var els=element.style;var originalVisibility=els.visibility;var originalPosition=els.position;var originalDisplay=els.display;els.visibility='hidden';els.position='absolute';els.display='block';var originalWidth=element.clientWidth;var originalHeight=element.clientHeight;els.display=originalDisplay;els.position=originalPosition;els.visibility=originalVisibility;return{width:originalWidth,height:originalHeight};},makePositioned:function(element){element=$(element);var pos=Element.getStyle(element,'position');if(pos=='static'||!pos){element._madePositioned=true;element.style.position='relative';if(Prototype.Browser.Opera){element.style.top=0;element.style.left=0;}}
117
+ return element;},undoPositioned:function(element){element=$(element);if(element._madePositioned){element._madePositioned=undefined;element.style.position=element.style.top=element.style.left=element.style.bottom=element.style.right='';}
118
+ return element;},makeClipping:function(element){element=$(element);if(element._overflow)return element;element._overflow=Element.getStyle(element,'overflow')||'auto';if(element._overflow!=='hidden')
119
+ element.style.overflow='hidden';return element;},undoClipping:function(element){element=$(element);if(!element._overflow)return element;element.style.overflow=element._overflow=='auto'?'':element._overflow;element._overflow=null;return element;},cumulativeOffset:function(element){var valueT=0,valueL=0;do{valueT+=element.offsetTop||0;valueL+=element.offsetLeft||0;element=element.offsetParent;}while(element);return Element._returnOffset(valueL,valueT);},positionedOffset:function(element){var valueT=0,valueL=0;do{valueT+=element.offsetTop||0;valueL+=element.offsetLeft||0;element=element.offsetParent;if(element){if(element.tagName.toUpperCase()=='BODY')break;var p=Element.getStyle(element,'position');if(p!=='static')break;}}while(element);return Element._returnOffset(valueL,valueT);},absolutize:function(element){element=$(element);if(element.getStyle('position')=='absolute')return element;var offsets=element.positionedOffset();var top=offsets[1];var left=offsets[0];var width=element.clientWidth;var height=element.clientHeight;element._originalLeft=left-parseFloat(element.style.left||0);element._originalTop=top-parseFloat(element.style.top||0);element._originalWidth=element.style.width;element._originalHeight=element.style.height;element.style.position='absolute';element.style.top=top+'px';element.style.left=left+'px';element.style.width=width+'px';element.style.height=height+'px';return element;},relativize:function(element){element=$(element);if(element.getStyle('position')=='relative')return element;element.style.position='relative';var top=parseFloat(element.style.top||0)-(element._originalTop||0);var left=parseFloat(element.style.left||0)-(element._originalLeft||0);element.style.top=top+'px';element.style.left=left+'px';element.style.height=element._originalHeight;element.style.width=element._originalWidth;return element;},cumulativeScrollOffset:function(element){var valueT=0,valueL=0;do{valueT+=element.scrollTop||0;valueL+=element.scrollLeft||0;element=element.parentNode;}while(element);return Element._returnOffset(valueL,valueT);},getOffsetParent:function(element){if(element.offsetParent)return $(element.offsetParent);if(element==document.body)return $(element);while((element=element.parentNode)&&element!=document.body)
120
+ if(Element.getStyle(element,'position')!='static')
121
+ return $(element);return $(document.body);},viewportOffset:function(forElement){var valueT=0,valueL=0;var element=forElement;do{valueT+=element.offsetTop||0;valueL+=element.offsetLeft||0;if(element.offsetParent==document.body&&Element.getStyle(element,'position')=='absolute')break;}while(element=element.offsetParent);element=forElement;do{if(!Prototype.Browser.Opera||(element.tagName&&(element.tagName.toUpperCase()=='BODY'))){valueT-=element.scrollTop||0;valueL-=element.scrollLeft||0;}}while(element=element.parentNode);return Element._returnOffset(valueL,valueT);},clonePosition:function(element,source){var options=Object.extend({setLeft:true,setTop:true,setWidth:true,setHeight:true,offsetTop:0,offsetLeft:0},arguments[2]||{});source=$(source);var p=source.viewportOffset();element=$(element);var delta=[0,0];var parent=null;if(Element.getStyle(element,'position')=='absolute'){parent=element.getOffsetParent();delta=parent.viewportOffset();}
122
+ if(parent==document.body){delta[0]-=document.body.offsetLeft;delta[1]-=document.body.offsetTop;}
123
+ if(options.setLeft)element.style.left=(p[0]-delta[0]+options.offsetLeft)+'px';if(options.setTop)element.style.top=(p[1]-delta[1]+options.offsetTop)+'px';if(options.setWidth)element.style.width=source.offsetWidth+'px';if(options.setHeight)element.style.height=source.offsetHeight+'px';return element;}};Element.Methods.identify.counter=1;Object.extend(Element.Methods,{getElementsBySelector:Element.Methods.select,childElements:Element.Methods.immediateDescendants});Element._attributeTranslations={write:{names:{className:'class',htmlFor:'for'},values:{}}};if(Prototype.Browser.Opera){Element.Methods.getStyle=Element.Methods.getStyle.wrap(function(proceed,element,style){switch(style){case'left':case'top':case'right':case'bottom':if(proceed(element,'position')==='static')return null;case'height':case'width':if(!Element.visible(element))return null;var dim=parseInt(proceed(element,style),10);if(dim!==element['offset'+style.capitalize()])
124
+ return dim+'px';var properties;if(style==='height'){properties=['border-top-width','padding-top','padding-bottom','border-bottom-width'];}
125
+ else{properties=['border-left-width','padding-left','padding-right','border-right-width'];}
126
+ return properties.inject(dim,function(memo,property){var val=proceed(element,property);return val===null?memo:memo-parseInt(val,10);})+'px';default:return proceed(element,style);}});Element.Methods.readAttribute=Element.Methods.readAttribute.wrap(function(proceed,element,attribute){if(attribute==='title')return element.title;return proceed(element,attribute);});}
127
+ else if(Prototype.Browser.IE){Element.Methods.getOffsetParent=Element.Methods.getOffsetParent.wrap(function(proceed,element){element=$(element);try{element.offsetParent}
128
+ catch(e){return $(document.body)}
129
+ var position=element.getStyle('position');if(position!=='static')return proceed(element);element.setStyle({position:'relative'});var value=proceed(element);element.setStyle({position:position});return value;});$w('positionedOffset viewportOffset').each(function(method){Element.Methods[method]=Element.Methods[method].wrap(function(proceed,element){element=$(element);try{element.offsetParent}
130
+ catch(e){return Element._returnOffset(0,0)}
131
+ var position=element.getStyle('position');if(position!=='static')return proceed(element);var offsetParent=element.getOffsetParent();if(offsetParent&&offsetParent.getStyle('position')==='fixed')
132
+ offsetParent.setStyle({zoom:1});element.setStyle({position:'relative'});var value=proceed(element);element.setStyle({position:position});return value;});});Element.Methods.cumulativeOffset=Element.Methods.cumulativeOffset.wrap(function(proceed,element){try{element.offsetParent}
133
+ catch(e){return Element._returnOffset(0,0)}
134
+ return proceed(element);});Element.Methods.getStyle=function(element,style){element=$(element);style=(style=='float'||style=='cssFloat')?'styleFloat':style.camelize();var value=element.style[style];if(!value&&element.currentStyle)value=element.currentStyle[style];if(style=='opacity'){if(value=(element.getStyle('filter')||'').match(/alpha\(opacity=(.*)\)/))
135
+ if(value[1])return parseFloat(value[1])/100;return 1.0;}
136
+ if(value=='auto'){if((style=='width'||style=='height')&&(element.getStyle('display')!='none'))
137
+ return element['offset'+style.capitalize()]+'px';return null;}
138
+ return value;};Element.Methods.setOpacity=function(element,value){function stripAlpha(filter){return filter.replace(/alpha\([^\)]*\)/gi,'');}
139
+ element=$(element);var currentStyle=element.currentStyle;if((currentStyle&&!currentStyle.hasLayout)||(!currentStyle&&element.style.zoom=='normal'))
140
+ element.style.zoom=1;var filter=element.getStyle('filter'),style=element.style;if(value==1||value===''){(filter=stripAlpha(filter))?style.filter=filter:style.removeAttribute('filter');return element;}else if(value<0.00001)value=0;style.filter=stripAlpha(filter)+'alpha(opacity='+(value*100)+')';return element;};Element._attributeTranslations={read:{names:{'class':'className','for':'htmlFor'},values:{_getAttr:function(element,attribute){return element.getAttribute(attribute,2);},_getAttrNode:function(element,attribute){var node=element.getAttributeNode(attribute);return node?node.value:"";},_getEv:function(element,attribute){attribute=element.getAttribute(attribute);return attribute?attribute.toString().slice(23,-2):null;},_flag:function(element,attribute){return $(element).hasAttribute(attribute)?attribute:null;},style:function(element){return element.style.cssText.toLowerCase();},title:function(element){return element.title;}}}};Element._attributeTranslations.write={names:Object.extend({cellpadding:'cellPadding',cellspacing:'cellSpacing'},Element._attributeTranslations.read.names),values:{checked:function(element,value){element.checked=!!value;},style:function(element,value){element.style.cssText=value?value:'';}}};Element._attributeTranslations.has={};$w('colSpan rowSpan vAlign dateTime accessKey tabIndex '+'encType maxLength readOnly longDesc frameBorder').each(function(attr){Element._attributeTranslations.write.names[attr.toLowerCase()]=attr;Element._attributeTranslations.has[attr.toLowerCase()]=attr;});(function(v){Object.extend(v,{href:v._getAttr,src:v._getAttr,type:v._getAttr,action:v._getAttrNode,disabled:v._flag,checked:v._flag,readonly:v._flag,multiple:v._flag,onload:v._getEv,onunload:v._getEv,onclick:v._getEv,ondblclick:v._getEv,onmousedown:v._getEv,onmouseup:v._getEv,onmouseover:v._getEv,onmousemove:v._getEv,onmouseout:v._getEv,onfocus:v._getEv,onblur:v._getEv,onkeypress:v._getEv,onkeydown:v._getEv,onkeyup:v._getEv,onsubmit:v._getEv,onreset:v._getEv,onselect:v._getEv,onchange:v._getEv});})(Element._attributeTranslations.read.values);}
141
+ else if(Prototype.Browser.Gecko&&/rv:1\.8\.0/.test(navigator.userAgent)){Element.Methods.setOpacity=function(element,value){element=$(element);element.style.opacity=(value==1)?0.999999:(value==='')?'':(value<0.00001)?0:value;return element;};}
142
+ else if(Prototype.Browser.WebKit){Element.Methods.setOpacity=function(element,value){element=$(element);element.style.opacity=(value==1||value==='')?'':(value<0.00001)?0:value;if(value==1)
143
+ if(element.tagName.toUpperCase()=='IMG'&&element.width){element.width++;element.width--;}else try{var n=document.createTextNode(' ');element.appendChild(n);element.removeChild(n);}catch(e){}
144
+ return element;};Element.Methods.cumulativeOffset=function(element){var valueT=0,valueL=0;do{valueT+=element.offsetTop||0;valueL+=element.offsetLeft||0;if(element.offsetParent==document.body)
145
+ if(Element.getStyle(element,'position')=='absolute')break;element=element.offsetParent;}while(element);return Element._returnOffset(valueL,valueT);};}
146
+ if(Prototype.Browser.IE||Prototype.Browser.Opera){Element.Methods.update=function(element,content){element=$(element);if(content&&content.toElement)content=content.toElement();if(Object.isElement(content))return element.update().insert(content);content=Object.toHTML(content);var tagName=element.tagName.toUpperCase();if(tagName in Element._insertionTranslations.tags){$A(element.childNodes).each(function(node){element.removeChild(node)});Element._getContentFromAnonymousElement(tagName,content.stripScripts()).each(function(node){element.appendChild(node)});}
147
+ else element.innerHTML=content.stripScripts();content.evalScripts.bind(content).defer();return element;};}
148
+ if('outerHTML'in document.createElement('div')){Element.Methods.replace=function(element,content){element=$(element);if(content&&content.toElement)content=content.toElement();if(Object.isElement(content)){element.parentNode.replaceChild(content,element);return element;}
149
+ content=Object.toHTML(content);var parent=element.parentNode,tagName=parent.tagName.toUpperCase();if(Element._insertionTranslations.tags[tagName]){var nextSibling=element.next();var fragments=Element._getContentFromAnonymousElement(tagName,content.stripScripts());parent.removeChild(element);if(nextSibling)
150
+ fragments.each(function(node){parent.insertBefore(node,nextSibling)});else
151
+ fragments.each(function(node){parent.appendChild(node)});}
152
+ else element.outerHTML=content.stripScripts();content.evalScripts.bind(content).defer();return element;};}
153
+ Element._returnOffset=function(l,t){var result=[l,t];result.left=l;result.top=t;return result;};Element._getContentFromAnonymousElement=function(tagName,html){var div=new Element('div'),t=Element._insertionTranslations.tags[tagName];if(t){div.innerHTML=t[0]+html+t[1];t[2].times(function(){div=div.firstChild});}else div.innerHTML=html;return $A(div.childNodes);};Element._insertionTranslations={before:function(element,node){element.parentNode.insertBefore(node,element);},top:function(element,node){element.insertBefore(node,element.firstChild);},bottom:function(element,node){element.appendChild(node);},after:function(element,node){element.parentNode.insertBefore(node,element.nextSibling);},tags:{TABLE:['<table>','</table>',1],TBODY:['<table><tbody>','</tbody></table>',2],TR:['<table><tbody><tr>','</tr></tbody></table>',3],TD:['<table><tbody><tr><td>','</td></tr></tbody></table>',4],SELECT:['<select>','</select>',1]}};(function(){Object.extend(this.tags,{THEAD:this.tags.TBODY,TFOOT:this.tags.TBODY,TH:this.tags.TD});}).call(Element._insertionTranslations);Element.Methods.Simulated={hasAttribute:function(element,attribute){attribute=Element._attributeTranslations.has[attribute]||attribute;var node=$(element).getAttributeNode(attribute);return!!(node&&node.specified);}};Element.Methods.ByTag={};Object.extend(Element,Element.Methods);if(!Prototype.BrowserFeatures.ElementExtensions&&document.createElement('div')['__proto__']){window.HTMLElement={};window.HTMLElement.prototype=document.createElement('div')['__proto__'];Prototype.BrowserFeatures.ElementExtensions=true;}
154
+ Element.extend=(function(){if(Prototype.BrowserFeatures.SpecificElementExtensions)
155
+ return Prototype.K;var Methods={},ByTag=Element.Methods.ByTag;var extend=Object.extend(function(element){if(!element||element._extendedByPrototype||element.nodeType!=1||element==window)return element;var methods=Object.clone(Methods),tagName=element.tagName.toUpperCase(),property,value;if(ByTag[tagName])Object.extend(methods,ByTag[tagName]);for(property in methods){value=methods[property];if(Object.isFunction(value)&&!(property in element))
156
+ element[property]=value.methodize();}
157
+ element._extendedByPrototype=Prototype.emptyFunction;return element;},{refresh:function(){if(!Prototype.BrowserFeatures.ElementExtensions){Object.extend(Methods,Element.Methods);Object.extend(Methods,Element.Methods.Simulated);}}});extend.refresh();return extend;})();Element.hasAttribute=function(element,attribute){if(element.hasAttribute)return element.hasAttribute(attribute);return Element.Methods.Simulated.hasAttribute(element,attribute);};Element.addMethods=function(methods){var F=Prototype.BrowserFeatures,T=Element.Methods.ByTag;if(!methods){Object.extend(Form,Form.Methods);Object.extend(Form.Element,Form.Element.Methods);Object.extend(Element.Methods.ByTag,{"FORM":Object.clone(Form.Methods),"INPUT":Object.clone(Form.Element.Methods),"SELECT":Object.clone(Form.Element.Methods),"TEXTAREA":Object.clone(Form.Element.Methods)});}
158
+ if(arguments.length==2){var tagName=methods;methods=arguments[1];}
159
+ if(!tagName)Object.extend(Element.Methods,methods||{});else{if(Object.isArray(tagName))tagName.each(extend);else extend(tagName);}
160
+ function extend(tagName){tagName=tagName.toUpperCase();if(!Element.Methods.ByTag[tagName])
161
+ Element.Methods.ByTag[tagName]={};Object.extend(Element.Methods.ByTag[tagName],methods);}
162
+ function copy(methods,destination,onlyIfAbsent){onlyIfAbsent=onlyIfAbsent||false;for(var property in methods){var value=methods[property];if(!Object.isFunction(value))continue;if(!onlyIfAbsent||!(property in destination))
163
+ destination[property]=value.methodize();}}
164
+ function findDOMClass(tagName){var klass;var trans={"OPTGROUP":"OptGroup","TEXTAREA":"TextArea","P":"Paragraph","FIELDSET":"FieldSet","UL":"UList","OL":"OList","DL":"DList","DIR":"Directory","H1":"Heading","H2":"Heading","H3":"Heading","H4":"Heading","H5":"Heading","H6":"Heading","Q":"Quote","INS":"Mod","DEL":"Mod","A":"Anchor","IMG":"Image","CAPTION":"TableCaption","COL":"TableCol","COLGROUP":"TableCol","THEAD":"TableSection","TFOOT":"TableSection","TBODY":"TableSection","TR":"TableRow","TH":"TableCell","TD":"TableCell","FRAMESET":"FrameSet","IFRAME":"IFrame"};if(trans[tagName])klass='HTML'+trans[tagName]+'Element';if(window[klass])return window[klass];klass='HTML'+tagName+'Element';if(window[klass])return window[klass];klass='HTML'+tagName.capitalize()+'Element';if(window[klass])return window[klass];window[klass]={};window[klass].prototype=document.createElement(tagName)['__proto__'];return window[klass];}
165
+ if(F.ElementExtensions){copy(Element.Methods,HTMLElement.prototype);copy(Element.Methods.Simulated,HTMLElement.prototype,true);}
166
+ if(F.SpecificElementExtensions){for(var tag in Element.Methods.ByTag){var klass=findDOMClass(tag);if(Object.isUndefined(klass))continue;copy(T[tag],klass.prototype);}}
167
+ Object.extend(Element,Element.Methods);delete Element.ByTag;if(Element.extend.refresh)Element.extend.refresh();Element.cache={};};document.viewport={getDimensions:function(){var dimensions={},B=Prototype.Browser;$w('width height').each(function(d){var D=d.capitalize();if(B.WebKit&&!document.evaluate){dimensions[d]=self['inner'+D];}else if(B.Opera&&parseFloat(window.opera.version())<9.5){dimensions[d]=document.body['client'+D]}else{dimensions[d]=document.documentElement['client'+D];}});return dimensions;},getWidth:function(){return this.getDimensions().width;},getHeight:function(){return this.getDimensions().height;},getScrollOffsets:function(){return Element._returnOffset(window.pageXOffset||document.documentElement.scrollLeft||document.body.scrollLeft,window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop);}};var Selector=Class.create({initialize:function(expression){this.expression=expression.strip();if(this.shouldUseSelectorsAPI()){this.mode='selectorsAPI';}else if(this.shouldUseXPath()){this.mode='xpath';this.compileXPathMatcher();}else{this.mode="normal";this.compileMatcher();}},shouldUseXPath:function(){if(!Prototype.BrowserFeatures.XPath)return false;var e=this.expression;if(Prototype.Browser.WebKit&&(e.include("-of-type")||e.include(":empty")))
168
+ return false;if((/(\[[\w-]*?:|:checked)/).test(e))
169
+ return false;return true;},shouldUseSelectorsAPI:function(){if(!Prototype.BrowserFeatures.SelectorsAPI)return false;if(!Selector._div)Selector._div=new Element('div');try{Selector._div.querySelector(this.expression);}catch(e){return false;}
170
+ return true;},compileMatcher:function(){var e=this.expression,ps=Selector.patterns,h=Selector.handlers,c=Selector.criteria,le,p,m;if(Selector._cache[e]){this.matcher=Selector._cache[e];return;}
171
+ this.matcher=["this.matcher = function(root) {","var r = root, h = Selector.handlers, c = false, n;"];while(e&&le!=e&&(/\S/).test(e)){le=e;for(var i in ps){p=ps[i];if(m=e.match(p)){this.matcher.push(Object.isFunction(c[i])?c[i](m):new Template(c[i]).evaluate(m));e=e.replace(m[0],'');break;}}}
172
+ this.matcher.push("return h.unique(n);\n}");eval(this.matcher.join('\n'));Selector._cache[this.expression]=this.matcher;},compileXPathMatcher:function(){var e=this.expression,ps=Selector.patterns,x=Selector.xpath,le,m;if(Selector._cache[e]){this.xpath=Selector._cache[e];return;}
173
+ this.matcher=['.//*'];while(e&&le!=e&&(/\S/).test(e)){le=e;for(var i in ps){if(m=e.match(ps[i])){this.matcher.push(Object.isFunction(x[i])?x[i](m):new Template(x[i]).evaluate(m));e=e.replace(m[0],'');break;}}}
174
+ this.xpath=this.matcher.join('');Selector._cache[this.expression]=this.xpath;},findElements:function(root){root=root||document;var e=this.expression,results;switch(this.mode){case'selectorsAPI':if(root!==document){var oldId=root.id,id=$(root).identify();e="#"+id+" "+e;}
175
+ results=$A(root.querySelectorAll(e)).map(Element.extend);root.id=oldId;return results;case'xpath':return document._getElementsByXPath(this.xpath,root);default:return this.matcher(root);}},match:function(element){this.tokens=[];var e=this.expression,ps=Selector.patterns,as=Selector.assertions;var le,p,m;while(e&&le!==e&&(/\S/).test(e)){le=e;for(var i in ps){p=ps[i];if(m=e.match(p)){if(as[i]){this.tokens.push([i,Object.clone(m)]);e=e.replace(m[0],'');}else{return this.findElements(document).include(element);}}}}
176
+ var match=true,name,matches;for(var i=0,token;token=this.tokens[i];i++){name=token[0],matches=token[1];if(!Selector.assertions[name](element,matches)){match=false;break;}}
177
+ return match;},toString:function(){return this.expression;},inspect:function(){return"#<Selector:"+this.expression.inspect()+">";}});Object.extend(Selector,{_cache:{},xpath:{descendant:"//*",child:"/*",adjacent:"/following-sibling::*[1]",laterSibling:'/following-sibling::*',tagName:function(m){if(m[1]=='*')return'';return"[local-name()='"+m[1].toLowerCase()+"' or local-name()='"+m[1].toUpperCase()+"']";},className:"[contains(concat(' ', @class, ' '), ' #{1} ')]",id:"[@id='#{1}']",attrPresence:function(m){m[1]=m[1].toLowerCase();return new Template("[@#{1}]").evaluate(m);},attr:function(m){m[1]=m[1].toLowerCase();m[3]=m[5]||m[6];return new Template(Selector.xpath.operators[m[2]]).evaluate(m);},pseudo:function(m){var h=Selector.xpath.pseudos[m[1]];if(!h)return'';if(Object.isFunction(h))return h(m);return new Template(Selector.xpath.pseudos[m[1]]).evaluate(m);},operators:{'=':"[@#{1}='#{3}']",'!=':"[@#{1}!='#{3}']",'^=':"[starts-with(@#{1}, '#{3}')]",'$=':"[substring(@#{1}, (string-length(@#{1}) - string-length('#{3}') + 1))='#{3}']",'*=':"[contains(@#{1}, '#{3}')]",'~=':"[contains(concat(' ', @#{1}, ' '), ' #{3} ')]",'|=':"[contains(concat('-', @#{1}, '-'), '-#{3}-')]"},pseudos:{'first-child':'[not(preceding-sibling::*)]','last-child':'[not(following-sibling::*)]','only-child':'[not(preceding-sibling::* or following-sibling::*)]','empty':"[count(*) = 0 and (count(text()) = 0)]",'checked':"[@checked]",'disabled':"[(@disabled) and (@type!='hidden')]",'enabled':"[not(@disabled) and (@type!='hidden')]",'not':function(m){var e=m[6],p=Selector.patterns,x=Selector.xpath,le,v;var exclusion=[];while(e&&le!=e&&(/\S/).test(e)){le=e;for(var i in p){if(m=e.match(p[i])){v=Object.isFunction(x[i])?x[i](m):new Template(x[i]).evaluate(m);exclusion.push("("+v.substring(1,v.length-1)+")");e=e.replace(m[0],'');break;}}}
178
+ return"[not("+exclusion.join(" and ")+")]";},'nth-child':function(m){return Selector.xpath.pseudos.nth("(count(./preceding-sibling::*) + 1) ",m);},'nth-last-child':function(m){return Selector.xpath.pseudos.nth("(count(./following-sibling::*) + 1) ",m);},'nth-of-type':function(m){return Selector.xpath.pseudos.nth("position() ",m);},'nth-last-of-type':function(m){return Selector.xpath.pseudos.nth("(last() + 1 - position()) ",m);},'first-of-type':function(m){m[6]="1";return Selector.xpath.pseudos['nth-of-type'](m);},'last-of-type':function(m){m[6]="1";return Selector.xpath.pseudos['nth-last-of-type'](m);},'only-of-type':function(m){var p=Selector.xpath.pseudos;return p['first-of-type'](m)+p['last-of-type'](m);},nth:function(fragment,m){var mm,formula=m[6],predicate;if(formula=='even')formula='2n+0';if(formula=='odd')formula='2n+1';if(mm=formula.match(/^(\d+)$/))
179
+ return'['+fragment+"= "+mm[1]+']';if(mm=formula.match(/^(-?\d*)?n(([+-])(\d+))?/)){if(mm[1]=="-")mm[1]=-1;var a=mm[1]?Number(mm[1]):1;var b=mm[2]?Number(mm[2]):0;predicate="[((#{fragment} - #{b}) mod #{a} = 0) and "+"((#{fragment} - #{b}) div #{a} >= 0)]";return new Template(predicate).evaluate({fragment:fragment,a:a,b:b});}}}},criteria:{tagName:'n = h.tagName(n, r, "#{1}", c); c = false;',className:'n = h.className(n, r, "#{1}", c); c = false;',id:'n = h.id(n, r, "#{1}", c); c = false;',attrPresence:'n = h.attrPresence(n, r, "#{1}", c); c = false;',attr:function(m){m[3]=(m[5]||m[6]);return new Template('n = h.attr(n, r, "#{1}", "#{3}", "#{2}", c); c = false;').evaluate(m);},pseudo:function(m){if(m[6])m[6]=m[6].replace(/"/g,'\\"');return new Template('n = h.pseudo(n, "#{1}", "#{6}", r, c); c = false;').evaluate(m);},descendant:'c = "descendant";',child:'c = "child";',adjacent:'c = "adjacent";',laterSibling:'c = "laterSibling";'},patterns:{laterSibling:/^\s*~\s*/,child:/^\s*>\s*/,adjacent:/^\s*\+\s*/,descendant:/^\s/,tagName:/^\s*(\*|[\w\-]+)(\b|$)?/,id:/^#([\w\-\*]+)(\b|$)/,className:/^\.([\w\-\*]+)(\b|$)/,pseudo:/^:((first|last|nth|nth-last|only)(-child|-of-type)|empty|checked|(en|dis)abled|not)(\((.*?)\))?(\b|$|(?=\s|[:+~>]))/,attrPresence:/^\[((?:[\w]+:)?[\w]+)\]/,attr:/\[((?:[\w-]*:)?[\w-]+)\s*(?:([!^$*~|]?=)\s*((['"])([^\4]*?)\4|([^'"][^\]]*?)))?\]/},assertions:{tagName:function(element,matches){return matches[1].toUpperCase()==element.tagName.toUpperCase();},className:function(element,matches){return Element.hasClassName(element,matches[1]);},id:function(element,matches){return element.id===matches[1];},attrPresence:function(element,matches){return Element.hasAttribute(element,matches[1]);},attr:function(element,matches){var nodeValue=Element.readAttribute(element,matches[1]);return nodeValue&&Selector.operators[matches[2]](nodeValue,matches[5]||matches[6]);}},handlers:{concat:function(a,b){for(var i=0,node;node=b[i];i++)
180
+ a.push(node);return a;},mark:function(nodes){var _true=Prototype.emptyFunction;for(var i=0,node;node=nodes[i];i++)
181
+ node._countedByPrototype=_true;return nodes;},unmark:function(nodes){for(var i=0,node;node=nodes[i];i++)
182
+ node._countedByPrototype=undefined;return nodes;},index:function(parentNode,reverse,ofType){parentNode._countedByPrototype=Prototype.emptyFunction;if(reverse){for(var nodes=parentNode.childNodes,i=nodes.length-1,j=1;i>=0;i--){var node=nodes[i];if(node.nodeType==1&&(!ofType||node._countedByPrototype))node.nodeIndex=j++;}}else{for(var i=0,j=1,nodes=parentNode.childNodes;node=nodes[i];i++)
183
+ if(node.nodeType==1&&(!ofType||node._countedByPrototype))node.nodeIndex=j++;}},unique:function(nodes){if(nodes.length==0)return nodes;var results=[],n;for(var i=0,l=nodes.length;i<l;i++)
184
+ if(!(n=nodes[i])._countedByPrototype){n._countedByPrototype=Prototype.emptyFunction;results.push(Element.extend(n));}
185
+ return Selector.handlers.unmark(results);},descendant:function(nodes){var h=Selector.handlers;for(var i=0,results=[],node;node=nodes[i];i++)
186
+ h.concat(results,node.getElementsByTagName('*'));return results;},child:function(nodes){var h=Selector.handlers;for(var i=0,results=[],node;node=nodes[i];i++){for(var j=0,child;child=node.childNodes[j];j++)
187
+ if(child.nodeType==1&&child.tagName!='!')results.push(child);}
188
+ return results;},adjacent:function(nodes){for(var i=0,results=[],node;node=nodes[i];i++){var next=this.nextElementSibling(node);if(next)results.push(next);}
189
+ return results;},laterSibling:function(nodes){var h=Selector.handlers;for(var i=0,results=[],node;node=nodes[i];i++)
190
+ h.concat(results,Element.nextSiblings(node));return results;},nextElementSibling:function(node){while(node=node.nextSibling)
191
+ if(node.nodeType==1)return node;return null;},previousElementSibling:function(node){while(node=node.previousSibling)
192
+ if(node.nodeType==1)return node;return null;},tagName:function(nodes,root,tagName,combinator){var uTagName=tagName.toUpperCase();var results=[],h=Selector.handlers;if(nodes){if(combinator){if(combinator=="descendant"){for(var i=0,node;node=nodes[i];i++)
193
+ h.concat(results,node.getElementsByTagName(tagName));return results;}else nodes=this[combinator](nodes);if(tagName=="*")return nodes;}
194
+ for(var i=0,node;node=nodes[i];i++)
195
+ if(node.tagName.toUpperCase()===uTagName)results.push(node);return results;}else return root.getElementsByTagName(tagName);},id:function(nodes,root,id,combinator){var targetNode=$(id),h=Selector.handlers;if(!targetNode)return[];if(!nodes&&root==document)return[targetNode];if(nodes){if(combinator){if(combinator=='child'){for(var i=0,node;node=nodes[i];i++)
196
+ if(targetNode.parentNode==node)return[targetNode];}else if(combinator=='descendant'){for(var i=0,node;node=nodes[i];i++)
197
+ if(Element.descendantOf(targetNode,node))return[targetNode];}else if(combinator=='adjacent'){for(var i=0,node;node=nodes[i];i++)
198
+ if(Selector.handlers.previousElementSibling(targetNode)==node)
199
+ return[targetNode];}else nodes=h[combinator](nodes);}
200
+ for(var i=0,node;node=nodes[i];i++)
201
+ if(node==targetNode)return[targetNode];return[];}
202
+ return(targetNode&&Element.descendantOf(targetNode,root))?[targetNode]:[];},className:function(nodes,root,className,combinator){if(nodes&&combinator)nodes=this[combinator](nodes);return Selector.handlers.byClassName(nodes,root,className);},byClassName:function(nodes,root,className){if(!nodes)nodes=Selector.handlers.descendant([root]);var needle=' '+className+' ';for(var i=0,results=[],node,nodeClassName;node=nodes[i];i++){nodeClassName=node.className;if(nodeClassName.length==0)continue;if(nodeClassName==className||(' '+nodeClassName+' ').include(needle))
203
+ results.push(node);}
204
+ return results;},attrPresence:function(nodes,root,attr,combinator){if(!nodes)nodes=root.getElementsByTagName("*");if(nodes&&combinator)nodes=this[combinator](nodes);var results=[];for(var i=0,node;node=nodes[i];i++)
205
+ if(Element.hasAttribute(node,attr))results.push(node);return results;},attr:function(nodes,root,attr,value,operator,combinator){if(!nodes)nodes=root.getElementsByTagName("*");if(nodes&&combinator)nodes=this[combinator](nodes);var handler=Selector.operators[operator],results=[];for(var i=0,node;node=nodes[i];i++){var nodeValue=Element.readAttribute(node,attr);if(nodeValue===null)continue;if(handler(nodeValue,value))results.push(node);}
206
+ return results;},pseudo:function(nodes,name,value,root,combinator){if(nodes&&combinator)nodes=this[combinator](nodes);if(!nodes)nodes=root.getElementsByTagName("*");return Selector.pseudos[name](nodes,value,root);}},pseudos:{'first-child':function(nodes,value,root){for(var i=0,results=[],node;node=nodes[i];i++){if(Selector.handlers.previousElementSibling(node))continue;results.push(node);}
207
+ return results;},'last-child':function(nodes,value,root){for(var i=0,results=[],node;node=nodes[i];i++){if(Selector.handlers.nextElementSibling(node))continue;results.push(node);}
208
+ return results;},'only-child':function(nodes,value,root){var h=Selector.handlers;for(var i=0,results=[],node;node=nodes[i];i++)
209
+ if(!h.previousElementSibling(node)&&!h.nextElementSibling(node))
210
+ results.push(node);return results;},'nth-child':function(nodes,formula,root){return Selector.pseudos.nth(nodes,formula,root);},'nth-last-child':function(nodes,formula,root){return Selector.pseudos.nth(nodes,formula,root,true);},'nth-of-type':function(nodes,formula,root){return Selector.pseudos.nth(nodes,formula,root,false,true);},'nth-last-of-type':function(nodes,formula,root){return Selector.pseudos.nth(nodes,formula,root,true,true);},'first-of-type':function(nodes,formula,root){return Selector.pseudos.nth(nodes,"1",root,false,true);},'last-of-type':function(nodes,formula,root){return Selector.pseudos.nth(nodes,"1",root,true,true);},'only-of-type':function(nodes,formula,root){var p=Selector.pseudos;return p['last-of-type'](p['first-of-type'](nodes,formula,root),formula,root);},getIndices:function(a,b,total){if(a==0)return b>0?[b]:[];return $R(1,total).inject([],function(memo,i){if(0==(i-b)%a&&(i-b)/a>=0)memo.push(i);return memo;});},nth:function(nodes,formula,root,reverse,ofType){if(nodes.length==0)return[];if(formula=='even')formula='2n+0';if(formula=='odd')formula='2n+1';var h=Selector.handlers,results=[],indexed=[],m;h.mark(nodes);for(var i=0,node;node=nodes[i];i++){if(!node.parentNode._countedByPrototype){h.index(node.parentNode,reverse,ofType);indexed.push(node.parentNode);}}
211
+ if(formula.match(/^\d+$/)){formula=Number(formula);for(var i=0,node;node=nodes[i];i++)
212
+ if(node.nodeIndex==formula)results.push(node);}else if(m=formula.match(/^(-?\d*)?n(([+-])(\d+))?/)){if(m[1]=="-")m[1]=-1;var a=m[1]?Number(m[1]):1;var b=m[2]?Number(m[2]):0;var indices=Selector.pseudos.getIndices(a,b,nodes.length);for(var i=0,node,l=indices.length;node=nodes[i];i++){for(var j=0;j<l;j++)
213
+ if(node.nodeIndex==indices[j])results.push(node);}}
214
+ h.unmark(nodes);h.unmark(indexed);return results;},'empty':function(nodes,value,root){for(var i=0,results=[],node;node=nodes[i];i++){if(node.tagName=='!'||node.firstChild)continue;results.push(node);}
215
+ return results;},'not':function(nodes,selector,root){var h=Selector.handlers,selectorType,m;var exclusions=new Selector(selector).findElements(root);h.mark(exclusions);for(var i=0,results=[],node;node=nodes[i];i++)
216
+ if(!node._countedByPrototype)results.push(node);h.unmark(exclusions);return results;},'enabled':function(nodes,value,root){for(var i=0,results=[],node;node=nodes[i];i++)
217
+ if(!node.disabled&&(!node.type||node.type!=='hidden'))
218
+ results.push(node);return results;},'disabled':function(nodes,value,root){for(var i=0,results=[],node;node=nodes[i];i++)
219
+ if(node.disabled)results.push(node);return results;},'checked':function(nodes,value,root){for(var i=0,results=[],node;node=nodes[i];i++)
220
+ if(node.checked)results.push(node);return results;}},operators:{'=':function(nv,v){return nv==v;},'!=':function(nv,v){return nv!=v;},'^=':function(nv,v){return nv==v||nv&&nv.startsWith(v);},'$=':function(nv,v){return nv==v||nv&&nv.endsWith(v);},'*=':function(nv,v){return nv==v||nv&&nv.include(v);},'$=':function(nv,v){return nv.endsWith(v);},'*=':function(nv,v){return nv.include(v);},'~=':function(nv,v){return(' '+nv+' ').include(' '+v+' ');},'|=':function(nv,v){return('-'+(nv||"").toUpperCase()+'-').include('-'+(v||"").toUpperCase()+'-');}},split:function(expression){var expressions=[];expression.scan(/(([\w#:.~>+()\s-]+|\*|\[.*?\])+)\s*(,|$)/,function(m){expressions.push(m[1].strip());});return expressions;},matchElements:function(elements,expression){var matches=$$(expression),h=Selector.handlers;h.mark(matches);for(var i=0,results=[],element;element=elements[i];i++)
221
+ if(element._countedByPrototype)results.push(element);h.unmark(matches);return results;},findElement:function(elements,expression,index){if(Object.isNumber(expression)){index=expression;expression=false;}
222
+ return Selector.matchElements(elements,expression||'*')[index||0];},findChildElements:function(element,expressions){expressions=Selector.split(expressions.join(','));var results=[],h=Selector.handlers;for(var i=0,l=expressions.length,selector;i<l;i++){selector=new Selector(expressions[i].strip());h.concat(results,selector.findElements(element));}
223
+ return(l>1)?h.unique(results):results;}});if(Prototype.Browser.IE){Object.extend(Selector.handlers,{concat:function(a,b){for(var i=0,node;node=b[i];i++)
224
+ if(node.tagName!=="!")a.push(node);return a;},unmark:function(nodes){for(var i=0,node;node=nodes[i];i++)
225
+ node.removeAttribute('_countedByPrototype');return nodes;}});}
226
+ function $$(){return Selector.findChildElements(document,$A(arguments));}
227
+ var Form={reset:function(form){$(form).reset();return form;},serializeElements:function(elements,options){if(typeof options!='object')options={hash:!!options};else if(Object.isUndefined(options.hash))options.hash=true;var key,value,submitted=false,submit=options.submit;var data=elements.inject({},function(result,element){if(!element.disabled&&element.name){key=element.name;value=$(element).getValue();if(value!=null&&element.type!='file'&&(element.type!='submit'||(!submitted&&submit!==false&&(!submit||key==submit)&&(submitted=true)))){if(key in result){if(!Object.isArray(result[key]))result[key]=[result[key]];result[key].push(value);}
228
+ else result[key]=value;}}
229
+ return result;});return options.hash?data:Object.toQueryString(data);}};Form.Methods={serialize:function(form,options){return Form.serializeElements(Form.getElements(form),options);},getElements:function(form){return $A($(form).getElementsByTagName('*')).inject([],function(elements,child){if(Form.Element.Serializers[child.tagName.toLowerCase()])
230
+ elements.push(Element.extend(child));return elements;});},getInputs:function(form,typeName,name){form=$(form);var inputs=form.getElementsByTagName('input');if(!typeName&&!name)return $A(inputs).map(Element.extend);for(var i=0,matchingInputs=[],length=inputs.length;i<length;i++){var input=inputs[i];if((typeName&&input.type!=typeName)||(name&&input.name!=name))
231
+ continue;matchingInputs.push(Element.extend(input));}
232
+ return matchingInputs;},disable:function(form){form=$(form);Form.getElements(form).invoke('disable');return form;},enable:function(form){form=$(form);Form.getElements(form).invoke('enable');return form;},findFirstElement:function(form){var elements=$(form).getElements().findAll(function(element){return'hidden'!=element.type&&!element.disabled;});var firstByIndex=elements.findAll(function(element){return element.hasAttribute('tabIndex')&&element.tabIndex>=0;}).sortBy(function(element){return element.tabIndex}).first();return firstByIndex?firstByIndex:elements.find(function(element){return['input','select','textarea'].include(element.tagName.toLowerCase());});},focusFirstElement:function(form){form=$(form);form.findFirstElement().activate();return form;},request:function(form,options){form=$(form),options=Object.clone(options||{});var params=options.parameters,action=form.readAttribute('action')||'';if(action.blank())action=window.location.href;options.parameters=form.serialize(true);if(params){if(Object.isString(params))params=params.toQueryParams();Object.extend(options.parameters,params);}
233
+ if(form.hasAttribute('method')&&!options.method)
234
+ options.method=form.method;return new Ajax.Request(action,options);}};Form.Element={focus:function(element){$(element).focus();return element;},select:function(element){$(element).select();return element;}};Form.Element.Methods={serialize:function(element){element=$(element);if(!element.disabled&&element.name){var value=element.getValue();if(value!=undefined){var pair={};pair[element.name]=value;return Object.toQueryString(pair);}}
235
+ return'';},getValue:function(element){element=$(element);var method=element.tagName.toLowerCase();return Form.Element.Serializers[method](element);},setValue:function(element,value){element=$(element);var method=element.tagName.toLowerCase();Form.Element.Serializers[method](element,value);return element;},clear:function(element){$(element).value='';return element;},present:function(element){return $(element).value!='';},activate:function(element){element=$(element);try{element.focus();if(element.select&&(element.tagName.toLowerCase()!='input'||!['button','reset','submit'].include(element.type)))
236
+ element.select();}catch(e){}
237
+ return element;},disable:function(element){element=$(element);element.disabled=true;return element;},enable:function(element){element=$(element);element.disabled=false;return element;}};var Field=Form.Element;var $F=Form.Element.Methods.getValue;Form.Element.Serializers={input:function(element,value){switch(element.type.toLowerCase()){case'checkbox':case'radio':return Form.Element.Serializers.inputSelector(element,value);default:return Form.Element.Serializers.textarea(element,value);}},inputSelector:function(element,value){if(Object.isUndefined(value))return element.checked?element.value:null;else element.checked=!!value;},textarea:function(element,value){if(Object.isUndefined(value))return element.value;else element.value=value;},select:function(element,value){if(Object.isUndefined(value))
238
+ return this[element.type=='select-one'?'selectOne':'selectMany'](element);else{var opt,currentValue,single=!Object.isArray(value);for(var i=0,length=element.length;i<length;i++){opt=element.options[i];currentValue=this.optionValue(opt);if(single){if(currentValue==value){opt.selected=true;return;}}
239
+ else opt.selected=value.include(currentValue);}}},selectOne:function(element){var index=element.selectedIndex;return index>=0?this.optionValue(element.options[index]):null;},selectMany:function(element){var values,length=element.length;if(!length)return null;for(var i=0,values=[];i<length;i++){var opt=element.options[i];if(opt.selected)values.push(this.optionValue(opt));}
240
+ return values;},optionValue:function(opt){return Element.extend(opt).hasAttribute('value')?opt.value:opt.text;}};Abstract.TimedObserver=Class.create(PeriodicalExecuter,{initialize:function($super,element,frequency,callback){$super(callback,frequency);this.element=$(element);this.lastValue=this.getValue();},execute:function(){var value=this.getValue();if(Object.isString(this.lastValue)&&Object.isString(value)?this.lastValue!=value:String(this.lastValue)!=String(value)){this.callback(this.element,value);this.lastValue=value;}}});Form.Element.Observer=Class.create(Abstract.TimedObserver,{getValue:function(){return Form.Element.getValue(this.element);}});Form.Observer=Class.create(Abstract.TimedObserver,{getValue:function(){return Form.serialize(this.element);}});Abstract.EventObserver=Class.create({initialize:function(element,callback){this.element=$(element);this.callback=callback;this.lastValue=this.getValue();if(this.element.tagName.toLowerCase()=='form')
241
+ this.registerFormCallbacks();else
242
+ this.registerCallback(this.element);},onElementEvent:function(){var value=this.getValue();if(this.lastValue!=value){this.callback(this.element,value);this.lastValue=value;}},registerFormCallbacks:function(){Form.getElements(this.element).each(this.registerCallback,this);},registerCallback:function(element){if(element.type){switch(element.type.toLowerCase()){case'checkbox':case'radio':Event.observe(element,'click',this.onElementEvent.bind(this));break;default:Event.observe(element,'change',this.onElementEvent.bind(this));break;}}}});Form.Element.EventObserver=Class.create(Abstract.EventObserver,{getValue:function(){return Form.Element.getValue(this.element);}});Form.EventObserver=Class.create(Abstract.EventObserver,{getValue:function(){return Form.serialize(this.element);}});if(!window.Event)var Event={};Object.extend(Event,{KEY_BACKSPACE:8,KEY_TAB:9,KEY_RETURN:13,KEY_ESC:27,KEY_LEFT:37,KEY_UP:38,KEY_RIGHT:39,KEY_DOWN:40,KEY_DELETE:46,KEY_HOME:36,KEY_END:35,KEY_PAGEUP:33,KEY_PAGEDOWN:34,KEY_INSERT:45,cache:{},relatedTarget:function(event){var element;switch(event.type){case'mouseover':element=event.fromElement;break;case'mouseout':element=event.toElement;break;default:return null;}
243
+ return Element.extend(element);}});Event.Methods=(function(){var isButton;if(Prototype.Browser.IE){var buttonMap={0:1,1:4,2:2};isButton=function(event,code){return event.button==buttonMap[code];};}else if(Prototype.Browser.WebKit){isButton=function(event,code){switch(code){case 0:return event.which==1&&!event.metaKey;case 1:return event.which==1&&event.metaKey;default:return false;}};}else{isButton=function(event,code){return event.which?(event.which===code+1):(event.button===code);};}
244
+ return{isLeftClick:function(event){return isButton(event,0)},isMiddleClick:function(event){return isButton(event,1)},isRightClick:function(event){return isButton(event,2)},element:function(event){event=Event.extend(event);var node=event.target,type=event.type,currentTarget=event.currentTarget;if(currentTarget&&currentTarget.tagName){if(type==='load'||type==='error'||(type==='click'&&currentTarget.tagName.toLowerCase()==='input'&&currentTarget.type==='radio'))
245
+ node=currentTarget;}
246
+ if(node){if(node.nodeType==Node.TEXT_NODE)node=node.parentNode;return Element.extend(node);}else return false;},findElement:function(event,expression){var element=Event.element(event);if(!expression)return element;var elements=[element].concat(element.ancestors());return Selector.findElement(elements,expression,0);},pointer:function(event){var docElement=document.documentElement,body=document.body||{scrollLeft:0,scrollTop:0};return{x:event.pageX||(event.clientX+
247
+ (docElement.scrollLeft||body.scrollLeft)-
248
+ (docElement.clientLeft||0)),y:event.pageY||(event.clientY+
249
+ (docElement.scrollTop||body.scrollTop)-
250
+ (docElement.clientTop||0))};},pointerX:function(event){return Event.pointer(event).x},pointerY:function(event){return Event.pointer(event).y},stop:function(event){Event.extend(event);event.preventDefault();event.stopPropagation();event.stopped=true;}};})();Event.extend=(function(){var methods=Object.keys(Event.Methods).inject({},function(m,name){m[name]=Event.Methods[name].methodize();return m;});if(Prototype.Browser.IE){Object.extend(methods,{stopPropagation:function(){this.cancelBubble=true},preventDefault:function(){this.returnValue=false},inspect:function(){return"[object Event]"}});return function(event){if(!event)return false;if(event._extendedByPrototype)return event;event._extendedByPrototype=Prototype.emptyFunction;var pointer=Event.pointer(event);Object.extend(event,{target:event.srcElement,relatedTarget:Event.relatedTarget(event),pageX:pointer.x,pageY:pointer.y});return Object.extend(event,methods);};}else{Event.prototype=Event.prototype||document.createEvent("HTMLEvents")['__proto__'];Object.extend(Event.prototype,methods);return Prototype.K;}})();Object.extend(Event,(function(){var cache=Event.cache;function getEventID(element){try{if(element._prototypeEventID)return element._prototypeEventID[0];arguments.callee.id=arguments.callee.id||1;return element._prototypeEventID=[++arguments.callee.id];}catch(error){return false;}}
251
+ function getDOMEventName(eventName){if(eventName&&eventName.include(':'))return"dataavailable";return eventName;}
252
+ function getCacheForID(id){return cache[id]=cache[id]||{};}
253
+ function getWrappersForEventName(id,eventName){var c=getCacheForID(id);return c[eventName]=c[eventName]||[];}
254
+ function createWrapper(element,eventName,handler){var id=getEventID(element);var c=getWrappersForEventName(id,eventName);if(c.pluck("handler").include(handler))return false;var wrapper=function(event){if(!Event||!Event.extend||(event.eventName&&event.eventName!=eventName))
255
+ return false;Event.extend(event);handler.call(element,event);};wrapper.handler=handler;c.push(wrapper);return wrapper;}
256
+ function findWrapper(id,eventName,handler){var c=getWrappersForEventName(id,eventName);return c.find(function(wrapper){return wrapper.handler==handler});}
257
+ function destroyWrapper(id,eventName,handler){var c=getCacheForID(id);if(!c[eventName])return false;c[eventName]=c[eventName].without(findWrapper(id,eventName,handler));}
258
+ function destroyCache(){for(var id in cache)
259
+ for(var eventName in cache[id])
260
+ cache[id][eventName]=null;}
261
+ if(window.attachEvent){window.attachEvent("onunload",destroyCache);}
262
+ if(Prototype.Browser.WebKit){window.addEventListener('unload',Prototype.emptyFunction,false);}
263
+ return{observe:function(element,eventName,handler){element=$(element);var name=getDOMEventName(eventName);var wrapper=createWrapper(element,eventName,handler);if(!wrapper)return element;if(element.addEventListener){element.addEventListener(name,wrapper,false);}else{element.attachEvent("on"+name,wrapper);}
264
+ return element;},stopObserving:function(element,eventName,handler){element=$(element);var id=getEventID(element),name=getDOMEventName(eventName);if(!handler&&eventName){getWrappersForEventName(id,eventName).each(function(wrapper){element.stopObserving(eventName,wrapper.handler);});return element;}else if(!eventName){Object.keys(getCacheForID(id)).each(function(eventName){element.stopObserving(eventName);});return element;}
265
+ var wrapper=findWrapper(id,eventName,handler);if(!wrapper)return element;if(element.removeEventListener){element.removeEventListener(name,wrapper,false);}else{element.detachEvent("on"+name,wrapper);}
266
+ destroyWrapper(id,eventName,handler);return element;},fire:function(element,eventName,memo){element=$(element);if(element==document&&document.createEvent&&!element.dispatchEvent)
267
+ element=document.documentElement;var event;if(document.createEvent){event=document.createEvent("HTMLEvents");event.initEvent("dataavailable",true,true);}else{event=document.createEventObject();event.eventType="ondataavailable";}
268
+ event.eventName=eventName;event.memo=memo||{};if(document.createEvent){element.dispatchEvent(event);}else{element.fireEvent(event.eventType,event);}
269
+ return Event.extend(event);}};})());Object.extend(Event,Event.Methods);Element.addMethods({fire:Event.fire,observe:Event.observe,stopObserving:Event.stopObserving});Object.extend(document,{fire:Element.Methods.fire.methodize(),observe:Element.Methods.observe.methodize(),stopObserving:Element.Methods.stopObserving.methodize(),loaded:false});(function(){var timer;function fireContentLoadedEvent(){if(document.loaded)return;if(timer)window.clearInterval(timer);document.fire("dom:loaded");document.loaded=true;}
270
+ if(document.addEventListener){if(Prototype.Browser.WebKit){timer=window.setInterval(function(){if(/loaded|complete/.test(document.readyState))
271
+ fireContentLoadedEvent();},0);Event.observe(window,"load",fireContentLoadedEvent);}else{document.addEventListener("DOMContentLoaded",fireContentLoadedEvent,false);}}else{document.write("<script id=__onDOMContentLoaded defer src=//:><\/script>");$("__onDOMContentLoaded").onreadystatechange=function(){if(this.readyState=="complete"){this.onreadystatechange=null;fireContentLoadedEvent();}};}})();Hash.toQueryString=Object.toQueryString;var Toggle={display:Element.toggle};Element.Methods.childOf=Element.Methods.descendantOf;var Insertion={Before:function(element,content){return Element.insert(element,{before:content});},Top:function(element,content){return Element.insert(element,{top:content});},Bottom:function(element,content){return Element.insert(element,{bottom:content});},After:function(element,content){return Element.insert(element,{after:content});}};var $continue=new Error('"throw $continue" is deprecated, use "return" instead');var Position={includeScrollOffsets:false,prepare:function(){this.deltaX=window.pageXOffset||document.documentElement.scrollLeft||document.body.scrollLeft||0;this.deltaY=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0;},within:function(element,x,y){if(this.includeScrollOffsets)
272
+ return this.withinIncludingScrolloffsets(element,x,y);this.xcomp=x;this.ycomp=y;this.offset=Element.cumulativeOffset(element);return(y>=this.offset[1]&&y<this.offset[1]+element.offsetHeight&&x>=this.offset[0]&&x<this.offset[0]+element.offsetWidth);},withinIncludingScrolloffsets:function(element,x,y){var offsetcache=Element.cumulativeScrollOffset(element);this.xcomp=x+offsetcache[0]-this.deltaX;this.ycomp=y+offsetcache[1]-this.deltaY;this.offset=Element.cumulativeOffset(element);return(this.ycomp>=this.offset[1]&&this.ycomp<this.offset[1]+element.offsetHeight&&this.xcomp>=this.offset[0]&&this.xcomp<this.offset[0]+element.offsetWidth);},overlap:function(mode,element){if(!mode)return 0;if(mode=='vertical')
273
+ return((this.offset[1]+element.offsetHeight)-this.ycomp)/element.offsetHeight;if(mode=='horizontal')
274
+ return((this.offset[0]+element.offsetWidth)-this.xcomp)/element.offsetWidth;},cumulativeOffset:Element.Methods.cumulativeOffset,positionedOffset:Element.Methods.positionedOffset,absolutize:function(element){Position.prepare();return Element.absolutize(element);},relativize:function(element){Position.prepare();return Element.relativize(element);},realOffset:Element.Methods.cumulativeScrollOffset,offsetParent:Element.Methods.getOffsetParent,page:Element.Methods.viewportOffset,clone:function(source,target,options){options=options||{};return Element.clonePosition(target,source,options);}};if(!document.getElementsByClassName)document.getElementsByClassName=function(instanceMethods){function iter(name){return name.blank()?null:"[contains(concat(' ', @class, ' '), ' "+name+" ')]";}
275
+ instanceMethods.getElementsByClassName=Prototype.BrowserFeatures.XPath?function(element,className){className=className.toString().strip();var cond=/\s/.test(className)?$w(className).map(iter).join(''):iter(className);return cond?document._getElementsByXPath('.//*'+cond,element):[];}:function(element,className){className=className.toString().strip();var elements=[],classNames=(/\s/.test(className)?$w(className):null);if(!classNames&&!className)return elements;var nodes=$(element).getElementsByTagName('*');className=' '+className+' ';for(var i=0,child,cn;child=nodes[i];i++){if(child.className&&(cn=' '+child.className+' ')&&(cn.include(className)||(classNames&&classNames.all(function(name){return!name.toString().blank()&&cn.include(' '+name+' ');}))))
276
+ elements.push(Element.extend(child));}
277
+ return elements;};return function(className,parentElement){return $(parentElement||document.body).getElementsByClassName(className);};}(Element.Methods);Element.ClassNames=Class.create();Element.ClassNames.prototype={initialize:function(element){this.element=$(element);},_each:function(iterator){this.element.className.split(/\s+/).select(function(name){return name.length>0;})._each(iterator);},set:function(className){this.element.className=className;},add:function(classNameToAdd){if(this.include(classNameToAdd))return;this.set($A(this).concat(classNameToAdd).join(' '));},remove:function(classNameToRemove){if(!this.include(classNameToRemove))return;this.set($A(this).without(classNameToRemove).join(' '));},toString:function(){return $A(this).join(' ');}};Object.extend(Element.ClassNames.prototype,Enumerable);Element.addMethods();;var Validator=Class.create();Validator.prototype={initialize:function(className,error,test,options){if(typeof test=='function'){this.options=$H(options);this._test=test;}else{this.options=$H(test);this._test=function(){return true};}
278
+ this.error=error||'Validation failed.';this.className=className;},test:function(v,elm){return(this._test(v,elm)&&this.options.all(function(p){return Validator.methods[p.key]?Validator.methods[p.key](v,elm,p.value):true;}));}}
279
+ Validator.methods={pattern:function(v,elm,opt){return Validation.get('IsEmpty').test(v)||opt.test(v)},minLength:function(v,elm,opt){return v.length>=opt},maxLength:function(v,elm,opt){return v.length<=opt},min:function(v,elm,opt){return v>=parseFloat(opt)},max:function(v,elm,opt){return v<=parseFloat(opt)},notOneOf:function(v,elm,opt){return $A(opt).all(function(value){return v!=value;})},oneOf:function(v,elm,opt){return $A(opt).any(function(value){return v==value;})},is:function(v,elm,opt){return v==opt},isNot:function(v,elm,opt){return v!=opt},equalToField:function(v,elm,opt){return v==$F(opt)},notEqualToField:function(v,elm,opt){return v!=$F(opt)},include:function(v,elm,opt){return $A(opt).all(function(value){return Validation.get(value).test(v,elm);})}}
280
+ var Validation=Class.create();Validation.defaultOptions={onSubmit:true,stopOnFirst:false,immediate:false,focusOnError:true,useTitles:false,addClassNameToContainer:false,containerClassName:'.input-box',onFormValidate:function(result,form){},onElementValidate:function(result,elm){}};Validation.prototype={initialize:function(form,options){this.form=$(form);if(!this.form){return;}
281
+ this.options=Object.extend({onSubmit:Validation.defaultOptions.onSubmit,stopOnFirst:Validation.defaultOptions.stopOnFirst,immediate:Validation.defaultOptions.immediate,focusOnError:Validation.defaultOptions.focusOnError,useTitles:Validation.defaultOptions.useTitles,onFormValidate:Validation.defaultOptions.onFormValidate,onElementValidate:Validation.defaultOptions.onElementValidate},options||{});if(this.options.onSubmit)Event.observe(this.form,'submit',this.onSubmit.bind(this),false);if(this.options.immediate){Form.getElements(this.form).each(function(input){if(input.tagName.toLowerCase()=='select'){Event.observe(input,'blur',this.onChange.bindAsEventListener(this));}
282
+ if(input.type.toLowerCase()=='radio'||input.type.toLowerCase()=='checkbox'){Event.observe(input,'click',this.onChange.bindAsEventListener(this));}else{Event.observe(input,'change',this.onChange.bindAsEventListener(this));}},this);}},onChange:function(ev){Validation.isOnChange=true;Validation.validate(Event.element(ev),{useTitle:this.options.useTitles,onElementValidate:this.options.onElementValidate});Validation.isOnChange=false;},onSubmit:function(ev){if(!this.validate())Event.stop(ev);},validate:function(){var result=false;var useTitles=this.options.useTitles;var callback=this.options.onElementValidate;try{if(this.options.stopOnFirst){result=Form.getElements(this.form).all(function(elm){if(elm.hasClassName('local-validation')&&!this.isElementInForm(elm,this.form)){return true;}
283
+ return Validation.validate(elm,{useTitle:useTitles,onElementValidate:callback});},this);}else{result=Form.getElements(this.form).collect(function(elm){if(elm.hasClassName('local-validation')&&!this.isElementInForm(elm,this.form)){return true;}
284
+ return Validation.validate(elm,{useTitle:useTitles,onElementValidate:callback});},this).all();}}catch(e){}
285
+ if(!result&&this.options.focusOnError){try{Form.getElements(this.form).findAll(function(elm){return $(elm).hasClassName('validation-failed')}).first().focus()}
286
+ catch(e){}}
287
+ this.options.onFormValidate(result,this.form);return result;},reset:function(){Form.getElements(this.form).each(Validation.reset);},isElementInForm:function(elm,form){var domForm=elm.up('form');if(domForm==form){return true;}
288
+ return false;}}
289
+ Object.extend(Validation,{validate:function(elm,options){options=Object.extend({useTitle:false,onElementValidate:function(result,elm){}},options||{});elm=$(elm);var cn=$w(elm.className);return result=cn.all(function(value){var test=Validation.test(value,elm,options.useTitle);options.onElementValidate(test,elm);return test;});},insertAdvice:function(elm,advice){var container=$(elm).up('.field-row');if(container){Element.insert(container,{after:advice});}else if(elm.up('td.value')){elm.up('td.value').insert({bottom:advice});}else if(elm.advaiceContainer&&$(elm.advaiceContainer)){$(elm.advaiceContainer).update(advice);}
290
+ else{switch(elm.type.toLowerCase()){case'checkbox':case'radio':var p=elm.parentNode;if(p){Element.insert(p,{'bottom':advice});}else{Element.insert(elm,{'after':advice});}
291
+ break;default:Element.insert(elm,{'after':advice});}}},showAdvice:function(elm,advice,adviceName){if(!elm.advices){elm.advices=new Hash();}
292
+ else{elm.advices.each(function(pair){this.hideAdvice(elm,pair.value);}.bind(this));}
293
+ elm.advices.set(adviceName,advice);if(typeof Effect=='undefined'){advice.style.display='block';}else{if(!advice._adviceAbsolutize){new Effect.Appear(advice,{duration:1});}else{Position.absolutize(advice);advice.show();advice.setStyle({'top':advice._adviceTop,'left':advice._adviceLeft,'width':advice._adviceWidth,'z-index':1000});advice.addClassName('advice-absolute');}}},hideAdvice:function(elm,advice){if(advice!=null)advice.hide();},updateCallback:function(elm,status){if(typeof elm.callbackFunction!='undefined'){eval(elm.callbackFunction+'(\''+elm.id+'\',\''+status+'\')');}},ajaxError:function(elm,errorMsg){var name='validate-ajax';var advice=Validation.getAdvice(name,elm);if(advice==null){advice=this.createAdvice(name,elm,false,errorMsg);}
294
+ this.showAdvice(elm,advice,'validate-ajax');this.updateCallback(elm,'failed');elm.addClassName('validation-failed');elm.addClassName('validate-ajax');if(Validation.defaultOptions.addClassNameToContainer&&Validation.defaultOptions.containerClassName!=''){var container=elm.up(Validation.defaultOptions.containerClassName);if(container&&this.allowContainerClassName(elm)){container.removeClassName('validation-passed');container.addClassName('validation-error');}}},allowContainerClassName:function(elm){if(elm.type=='radio'||elm.type=='checkbox'){return elm.hasClassName('change-container-classname');}
295
+ return true;},test:function(name,elm,useTitle){var v=Validation.get(name);var prop='__advice'+name.camelize();try{if(Validation.isVisible(elm)&&!v.test($F(elm),elm)){var advice=Validation.getAdvice(name,elm);if(advice==null){advice=this.createAdvice(name,elm,useTitle);}
296
+ this.showAdvice(elm,advice,name);this.updateCallback(elm,'failed');elm[prop]=1;if(!elm.advaiceContainer){elm.removeClassName('validation-passed');elm.addClassName('validation-failed');}
297
+ if(Validation.defaultOptions.addClassNameToContainer&&Validation.defaultOptions.containerClassName!=''){var container=elm.up(Validation.defaultOptions.containerClassName);if(container&&this.allowContainerClassName(elm)){container.removeClassName('validation-passed');container.addClassName('validation-error');}}
298
+ return false;}else{var advice=Validation.getAdvice(name,elm);this.hideAdvice(elm,advice);this.updateCallback(elm,'passed');elm[prop]='';elm.removeClassName('validation-failed');elm.addClassName('validation-passed');if(Validation.defaultOptions.addClassNameToContainer&&Validation.defaultOptions.containerClassName!=''){var container=elm.up(Validation.defaultOptions.containerClassName);if(container&&!container.down('.validation-failed')&&this.allowContainerClassName(elm)){if(!Validation.get('IsEmpty').test(elm.value)||!this.isVisible(elm)){container.addClassName('validation-passed');}else{container.removeClassName('validation-passed');}
299
+ container.removeClassName('validation-error');}}
300
+ return true;}}catch(e){throw(e)}},isVisible:function(elm){while(elm.tagName!='BODY'){if(!$(elm).visible())return false;elm=elm.parentNode;}
301
+ return true;},getAdvice:function(name,elm){return $('advice-'+name+'-'+Validation.getElmID(elm))||$('advice-'+Validation.getElmID(elm));},createAdvice:function(name,elm,useTitle,customError){var v=Validation.get(name);var errorMsg=useTitle?((elm&&elm.title)?elm.title:v.error):v.error;if(customError){errorMsg=customError;}
302
+ try{if(Translator){errorMsg=Translator.translate(errorMsg);}}
303
+ catch(e){}
304
+ advice='<div class="validation-advice" id="advice-'+name+'-'+Validation.getElmID(elm)+'" style="display:none">'+errorMsg+'</div>'
305
+ Validation.insertAdvice(elm,advice);advice=Validation.getAdvice(name,elm);if($(elm).hasClassName('absolute-advice')){var dimensions=$(elm).getDimensions();var originalPosition=Position.cumulativeOffset(elm);advice._adviceTop=(originalPosition[1]+dimensions.height)+'px';advice._adviceLeft=(originalPosition[0])+'px';advice._adviceWidth=(dimensions.width)+'px';advice._adviceAbsolutize=true;}
306
+ return advice;},getElmID:function(elm){return elm.id?elm.id:elm.name;},reset:function(elm){elm=$(elm);var cn=$w(elm.className);cn.each(function(value){var prop='__advice'+value.camelize();if(elm[prop]){var advice=Validation.getAdvice(value,elm);if(advice){advice.hide();}
307
+ elm[prop]='';}
308
+ elm.removeClassName('validation-failed');elm.removeClassName('validation-passed');if(Validation.defaultOptions.addClassNameToContainer&&Validation.defaultOptions.containerClassName!=''){var container=elm.up(Validation.defaultOptions.containerClassName);if(container){container.removeClassName('validation-passed');container.removeClassName('validation-error');}}});},add:function(className,error,test,options){var nv={};nv[className]=new Validator(className,error,test,options);Object.extend(Validation.methods,nv);},addAllThese:function(validators){var nv={};$A(validators).each(function(value){nv[value[0]]=new Validator(value[0],value[1],value[2],(value.length>3?value[3]:{}));});Object.extend(Validation.methods,nv);},get:function(name){return Validation.methods[name]?Validation.methods[name]:Validation.methods['_LikeNoIDIEverSaw_'];},methods:{'_LikeNoIDIEverSaw_':new Validator('_LikeNoIDIEverSaw_','',{})}});Validation.add('IsEmpty','',function(v){return(v==''||(v==null)||(v.length==0)||/^\s+$/.test(v));});Validation.addAllThese([['validate-select','Please select an option.',function(v){return((v!="none")&&(v!=null)&&(v.length!=0));}],['required-entry','This is a required field.',function(v){return!Validation.get('IsEmpty').test(v);}],['validate-number','Please enter a valid number in this field.',function(v){return Validation.get('IsEmpty').test(v)||(!isNaN(parseNumber(v))&&!/^\s+$/.test(parseNumber(v)));}],['validate-digits','Please use numbers only in this field. please avoid spaces or other characters such as dots or commas.',function(v){return Validation.get('IsEmpty').test(v)||!/[^\d]/.test(v);}],['validate-alpha','Please use letters only (a-z or A-Z) in this field.',function(v){return Validation.get('IsEmpty').test(v)||/^[a-zA-Z]+$/.test(v)}],['validate-code','Please use only letters (a-z), numbers (0-9) or underscore(_) in this field, first character should be a letter.',function(v){return Validation.get('IsEmpty').test(v)||/^[a-z]+[a-z0-9_]+$/.test(v)}],['validate-alphanum','Please use only letters (a-z or A-Z) or numbers (0-9) only in this field. No spaces or other characters are allowed.',function(v){return Validation.get('IsEmpty').test(v)||/^[a-zA-Z0-9]+$/.test(v)
309
+ /*/\W/.test(v)*/
310
+ }],['validate-street','Please use only letters (a-z or A-Z) or numbers (0-9) or spaces and # only in this field.',function(v){return Validation.get('IsEmpty').test(v)||/^[ \w]{3,}([A-Za-z]\.)?([ \w]*\#\d+)?(\r\n| )[ \w]{3,}/.test(v)}],['validate-phoneStrict','Please enter a valid phone number. For example (123) 456-7890 or 123-456-7890.',function(v){return Validation.get('IsEmpty').test(v)||/^(\()?\d{3}(\))?(-|\s)?\d{3}(-|\s)\d{4}$/.test(v);}],['validate-phoneLax','Please enter a valid phone number. For example (123) 456-7890 or 123-456-7890.',function(v){return Validation.get('IsEmpty').test(v)||/^((\d[-. ]?)?((\(\d{3}\))|\d{3}))?[-. ]?\d{3}[-. ]?\d{4}$/.test(v);}],['validate-fax','Please enter a valid fax number. For example (123) 456-7890 or 123-456-7890.',function(v){return Validation.get('IsEmpty').test(v)||/^(\()?\d{3}(\))?(-|\s)?\d{3}(-|\s)\d{4}$/.test(v);}],['validate-date','Please enter a valid date.',function(v){var test=new Date(v);return Validation.get('IsEmpty').test(v)||!isNaN(test);}],['validate-email','Please enter a valid email address. For example johndoe@domain.com.',function(v){return Validation.get('IsEmpty').test(v)||/^[a-z0-9,!\#\$%&'\*\+\/=\?\^_`\{\|\}~-]+(\.[a-z0-9,!\#\$%&'\*\+\/=\?\^_`\{\|\}~-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*\.([a-z]{2,})/i.test(v)}],['validate-emailSender','Please use only visible characters and spaces.',function(v){return Validation.get('IsEmpty').test(v)||/^[\S ]+$/.test(v)}],['validate-password','Please enter 6 or more characters. Leading or trailing spaces will be ignored.',function(v){var pass=v.strip();return!(pass.length>0&&pass.length<6);}],['validate-admin-password','Please enter 7 or more characters. Password should contain both numeric and alphabetic characters.',function(v){var pass=v.strip();if(0==pass.length){return true;}
311
+ if(!(/[a-z]/i.test(v))||!(/[0-9]/.test(v))){return false;}
312
+ return!(pass.length<7);}],['validate-cpassword','Please make sure your passwords match.',function(v){var conf=$('confirmation')?$('confirmation'):$$('.validate-cpassword')[0];var pass=false;if($('password')){pass=$('password');}
313
+ var passwordElements=$$('.validate-password');for(var i=0;i<passwordElements.size();i++){var passwordElement=passwordElements[i];if(passwordElement.up('form').id==conf.up('form').id){pass=passwordElement;}}
314
+ if($$('.validate-admin-password').size()){pass=$$('.validate-admin-password')[0];}
315
+ return(pass.value==conf.value);}],['validate-url','Please enter a valid URL. http:// is required',function(v){return Validation.get('IsEmpty').test(v)||/^(http|https|ftp):\/\/(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+)(:(\d+))?\/?/i.test(v)}],['validate-clean-url','Please enter a valid URL. For example http://www.example.com or www.example.com',function(v){return Validation.get('IsEmpty').test(v)||/^(http|https|ftp):\/\/(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+.(com|org|net|dk|at|us|tv|info|uk|co.uk|biz|se)$)(:(\d+))?\/?/i.test(v)||/^(www)((\.[A-Z0-9][A-Z0-9_-]*)+.(com|org|net|dk|at|us|tv|info|uk|co.uk|biz|se)$)(:(\d+))?\/?/i.test(v)}],['validate-identifier','Please enter a valid URL Key. For example "example-page", "example-page.html" or "anotherlevel/example-page"',function(v){return Validation.get('IsEmpty').test(v)||/^[A-Z0-9][A-Z0-9_\/-]+(\.[A-Z0-9_-]+)*$/i.test(v)}],['validate-xml-identifier','Please enter a valid XML-identifier. For example something_1, block5, id-4',function(v){return Validation.get('IsEmpty').test(v)||/^[A-Z][A-Z0-9_\/-]*$/i.test(v)}],['validate-ssn','Please enter a valid social security number. For example 123-45-6789.',function(v){return Validation.get('IsEmpty').test(v)||/^\d{3}-?\d{2}-?\d{4}$/.test(v);}],['validate-zip','Please enter a valid zip code. For example 90602 or 90602-1234.',function(v){return Validation.get('IsEmpty').test(v)||/(^\d{5}$)|(^\d{5}-\d{4}$)/.test(v);}],['validate-zip-international','Please enter a valid zip code.',function(v){return true;}],['validate-date-au','Please use this date format: dd/mm/yyyy. For example 17/03/2006 for the 17th of March, 2006.',function(v){if(Validation.get('IsEmpty').test(v))return true;var regex=/^(\d{2})\/(\d{2})\/(\d{4})$/;if(!regex.test(v))return false;var d=new Date(v.replace(regex,'$2/$1/$3'));return(parseInt(RegExp.$2,10)==(1+d.getMonth()))&&(parseInt(RegExp.$1,10)==d.getDate())&&(parseInt(RegExp.$3,10)==d.getFullYear());}],['validate-currency-dollar','Please enter a valid $ amount. For example $100.00.',function(v){return Validation.get('IsEmpty').test(v)||/^\$?\-?([1-9]{1}[0-9]{0,2}(\,[0-9]{3})*(\.[0-9]{0,2})?|[1-9]{1}\d*(\.[0-9]{0,2})?|0(\.[0-9]{0,2})?|(\.[0-9]{1,2})?)$/.test(v)}],['validate-one-required','Please select one of the above options.',function(v,elm){var p=elm.parentNode;var options=p.getElementsByTagName('INPUT');return $A(options).any(function(elm){return $F(elm);});}],['validate-one-required-by-name','Please select one of the options.',function(v,elm){var inputs=$$('input[name="'+elm.name.replace(/([\\"])/g,'\\$1')+'"]');var error=1;for(var i=0;i<inputs.length;i++){if((inputs[i].type=='checkbox'||inputs[i].type=='radio')&&inputs[i].checked==true){error=0;}
316
+ if(Validation.isOnChange&&(inputs[i].type=='checkbox'||inputs[i].type=='radio')){Validation.reset(inputs[i]);}}
317
+ if(error==0){return true;}else{return false;}}],['validate-not-negative-number','Please enter a valid number in this field.',function(v){v=parseNumber(v);return(!isNaN(v)&&v>=0);}],['validate-state','Please select State/Province.',function(v){return(v!=0||v=='');}],['validate-new-password','Please enter 6 or more characters. Leading or trailing spaces will be ignored.',function(v){if(!Validation.get('validate-password').test(v))return false;if(Validation.get('IsEmpty').test(v)&&v!='')return false;return true;}],['validate-greater-than-zero','Please enter a number greater than 0 in this field.',function(v){if(v.length)
318
+ return parseFloat(v)>0;else
319
+ return true;}],['validate-zero-or-greater','Please enter a number 0 or greater in this field.',function(v){if(v.length)
320
+ return parseFloat(v)>=0;else
321
+ return true;}],['validate-cc-number','Please enter a valid credit card number.',function(v,elm){var ccTypeContainer=$(elm.id.substr(0,elm.id.indexOf('_cc_number'))+'_cc_type');if(ccTypeContainer&&typeof Validation.creditCartTypes.get(ccTypeContainer.value)!='undefined'&&Validation.creditCartTypes.get(ccTypeContainer.value)[2]==false){if(!Validation.get('IsEmpty').test(v)&&Validation.get('validate-digits').test(v)){return true;}else{return false;}}
322
+ return validateCreditCard(v);}],['validate-cc-type','Credit card number doesn\'t match credit card type',function(v,elm){elm.value=removeDelimiters(elm.value);v=removeDelimiters(v);var ccTypeContainer=$(elm.id.substr(0,elm.id.indexOf('_cc_number'))+'_cc_type');if(!ccTypeContainer){return true;}
323
+ var ccType=ccTypeContainer.value;if(typeof Validation.creditCartTypes.get(ccType)=='undefined'){return false;}
324
+ if(Validation.creditCartTypes.get(ccType)[0]==false){return true;}
325
+ var ccMatchedType='';Validation.creditCartTypes.each(function(pair){if(pair.value[0]&&v.match(pair.value[0])){ccMatchedType=pair.key;throw $break;}});if(ccMatchedType!=ccType){return false;}
326
+ if(ccTypeContainer.hasClassName('validation-failed')&&Validation.isOnChange){Validation.validate(ccTypeContainer);}
327
+ return true;}],['validate-cc-type-select','Card type doesn\'t match credit card number',function(v,elm){var ccNumberContainer=$(elm.id.substr(0,elm.id.indexOf('_cc_type'))+'_cc_number');if(Validation.isOnChange&&Validation.get('IsEmpty').test(ccNumberContainer.value)){return true;}
328
+ if(Validation.get('validate-cc-type').test(ccNumberContainer.value,ccNumberContainer)){Validation.validate(ccNumberContainer);}
329
+ return Validation.get('validate-cc-type').test(ccNumberContainer.value,ccNumberContainer);}],['validate-cc-exp','Incorrect credit card expiration date',function(v,elm){var ccExpMonth=v;var ccExpYear=$(elm.id.substr(0,elm.id.indexOf('_expiration'))+'_expiration_yr').value;var currentTime=new Date();var currentMonth=currentTime.getMonth()+1;var currentYear=currentTime.getFullYear();if(ccExpMonth<currentMonth&&ccExpYear==currentYear){return false;}
330
+ return true;}],['validate-cc-cvn','Please enter a valid credit card verification number.',function(v,elm){var ccTypeContainer=$(elm.id.substr(0,elm.id.indexOf('_cc_cid'))+'_cc_type');if(!ccTypeContainer){return true;}
331
+ var ccType=ccTypeContainer.value;if(typeof Validation.creditCartTypes.get(ccType)=='undefined'){return false;}
332
+ var re=Validation.creditCartTypes.get(ccType)[1];if(v.match(re)){return true;}
333
+ return false;}],['validate-ajax','',function(v,elm){return true;}],['validate-data','Please use only letters (a-z or A-Z), numbers (0-9) or underscore(_) in this field, first character should be a letter.',function(v){if(v!=''&&v){return /^[A-Za-z]+[A-Za-z0-9_]+$/.test(v);}
334
+ return true;}],['validate-css-length','Please input a valid CSS-length. For example 100px or 77pt or 20em or .5ex or 50%',function(v){if(v!=''&&v){return /^[0-9\.]+(px|pt|em|ex|%)?$/.test(v)&&(!(/\..*\./.test(v)))&&!(/\.$/.test(v));}
335
+ return true;}],['validate-length','Maximum length exceeded.',function(v,elm){var re=new RegExp(/^maximum-length-[0-9]+$/);var result=true;$w(elm.className).each(function(name,index){if(name.match(re)&&result){var length=name.split('-')[2];result=(v.length<=length);}});return result;}],['validate-percents','Please enter a number lower than 100',{max:100}]]);function validateCreditCard(s){var v="0123456789";var w="";for(i=0;i<s.length;i++){x=s.charAt(i);if(v.indexOf(x,0)!=-1)
336
+ w+=x;}
337
+ j=w.length/2;k=Math.floor(j);m=Math.ceil(j)-k;c=0;for(i=0;i<k;i++){a=w.charAt(i*2+m)*2;c+=a>9?Math.floor(a/10+a%10):a;}
338
+ for(i=0;i<k+m;i++)c+=w.charAt(i*2+1-m)*1;return(c%10==0);}
339
+ function removeDelimiters(v){v=v.replace(/\s/g,'');v=v.replace(/\-/g,'');return v;}
340
+ function parseNumber(v)
341
+ {if(typeof v!='string'){return parseFloat(v);}
342
+ var isDot=v.indexOf('.');var isComa=v.indexOf(',');if(isDot!=-1&&isComa!=-1){if(isComa>isDot){v=v.replace('.','').replace(',','.');}
343
+ else{v=v.replace(',','');}}
344
+ else if(isComa!=-1){v=v.replace(',','.');}
345
+ return parseFloat(v);}
346
+ Validation.creditCartTypes=$H({'VI':[new RegExp('^4[0-9]{12}([0-9]{3})?$'),new RegExp('^[0-9]{3}$'),true],'MC':[new RegExp('^5[1-5][0-9]{14}$'),new RegExp('^[0-9]{3}$'),true],'AE':[new RegExp('^3[47][0-9]{13}$'),new RegExp('^[0-9]{4}$'),true],'DI':[new RegExp('^6011[0-9]{12}$'),new RegExp('^[0-9]{3}$'),true],'SS':[new RegExp('^((6759[0-9]{12})|(49[013][1356][0-9]{13})|(633[34][0-9]{12})|(633110[0-9]{10})|(564182[0-9]{10}))([0-9]{2,3})?$'),new RegExp('^([0-9]{3}|[0-9]{4})?$'),true],'OT':[false,new RegExp('^([0-9]{3}|[0-9]{4})?$'),false]});;var Builder={NODEMAP:{AREA:'map',CAPTION:'table',COL:'table',COLGROUP:'table',LEGEND:'fieldset',OPTGROUP:'select',OPTION:'select',PARAM:'object',TBODY:'table',TD:'table',TFOOT:'table',TH:'table',THEAD:'table',TR:'table'},node:function(elementName){elementName=elementName.toUpperCase();var parentTag=this.NODEMAP[elementName]||'div';var parentElement=document.createElement(parentTag);try{parentElement.innerHTML="<"+elementName+"></"+elementName+">";}catch(e){}
347
+ var element=parentElement.firstChild||null;if(element&&(element.tagName.toUpperCase()!=elementName))
348
+ element=element.getElementsByTagName(elementName)[0];if(!element)element=document.createElement(elementName);if(!element)return;if(arguments[1])
349
+ if(this._isStringOrNumber(arguments[1])||(arguments[1]instanceof Array)||arguments[1].tagName){this._children(element,arguments[1]);}else{var attrs=this._attributes(arguments[1]);if(attrs.length){try{parentElement.innerHTML="<"+elementName+" "+
350
+ attrs+"></"+elementName+">";}catch(e){}
351
+ element=parentElement.firstChild||null;if(!element){element=document.createElement(elementName);for(attr in arguments[1])
352
+ element[attr=='class'?'className':attr]=arguments[1][attr];}
353
+ if(element.tagName.toUpperCase()!=elementName)
354
+ element=parentElement.getElementsByTagName(elementName)[0];}}
355
+ if(arguments[2])
356
+ this._children(element,arguments[2]);return element;},_text:function(text){return document.createTextNode(text);},ATTR_MAP:{'className':'class','htmlFor':'for'},_attributes:function(attributes){var attrs=[];for(attribute in attributes)
357
+ attrs.push((attribute in this.ATTR_MAP?this.ATTR_MAP[attribute]:attribute)+'="'+attributes[attribute].toString().escapeHTML().gsub(/"/,'&quot;')+'"');return attrs.join(" ");},_children:function(element,children){if(children.tagName){element.appendChild(children);return;}
358
+ if(typeof children=='object'){children.flatten().each(function(e){if(typeof e=='object')
359
+ element.appendChild(e)
360
+ else
361
+ if(Builder._isStringOrNumber(e))
362
+ element.appendChild(Builder._text(e));});}else
363
+ if(Builder._isStringOrNumber(children))
364
+ element.appendChild(Builder._text(children));},_isStringOrNumber:function(param){return(typeof param=='string'||typeof param=='number');},build:function(html){var element=this.node('div');$(element).update(html.strip());return element.down();},dump:function(scope){if(typeof scope!='object'&&typeof scope!='function')scope=window;var tags=("A ABBR ACRONYM ADDRESS APPLET AREA B BASE BASEFONT BDO BIG BLOCKQUOTE BODY "+"BR BUTTON CAPTION CENTER CITE CODE COL COLGROUP DD DEL DFN DIR DIV DL DT EM FIELDSET "+"FONT FORM FRAME FRAMESET H1 H2 H3 H4 H5 H6 HEAD HR HTML I IFRAME IMG INPUT INS ISINDEX "+"KBD LABEL LEGEND LI LINK MAP MENU META NOFRAMES NOSCRIPT OBJECT OL OPTGROUP OPTION P "+"PARAM PRE Q S SAMP SCRIPT SELECT SMALL SPAN STRIKE STRONG STYLE SUB SUP TABLE TBODY TD "+"TEXTAREA TFOOT TH THEAD TITLE TR TT U UL VAR").split(/\s+/);tags.each(function(tag){scope[tag]=function(){return Builder.node.apply(Builder,[tag].concat($A(arguments)));}});}};String.prototype.parseColor=function(){var color='#';if(this.slice(0,4)=='rgb('){var cols=this.slice(4,this.length-1).split(',');var i=0;do{color+=parseInt(cols[i]).toColorPart()}while(++i<3);}else{if(this.slice(0,1)=='#'){if(this.length==4)for(var i=1;i<4;i++)color+=(this.charAt(i)+this.charAt(i)).toLowerCase();if(this.length==7)color=this.toLowerCase();}}
365
+ return(color.length==7?color:(arguments[0]||this));}
366
+ Element.collectTextNodes=function(element){return $A($(element).childNodes).collect(function(node){return(node.nodeType==3?node.nodeValue:(node.hasChildNodes()?Element.collectTextNodes(node):''));}).flatten().join('');}
367
+ Element.collectTextNodesIgnoreClass=function(element,className){return $A($(element).childNodes).collect(function(node){return(node.nodeType==3?node.nodeValue:((node.hasChildNodes()&&!Element.hasClassName(node,className))?Element.collectTextNodesIgnoreClass(node,className):''));}).flatten().join('');}
368
+ Element.setContentZoom=function(element,percent){element=$(element);element.setStyle({fontSize:(percent/100)+'em'});if(Prototype.Browser.WebKit)window.scrollBy(0,0);return element;}
369
+ Element.getInlineOpacity=function(element){return $(element).style.opacity||'';}
370
+ Element.forceRerendering=function(element){try{element=$(element);var n=document.createTextNode(' ');element.appendChild(n);element.removeChild(n);}catch(e){}};Array.prototype.call=function(){var args=arguments;this.each(function(f){f.apply(this,args)});}
371
+ var Effect={_elementDoesNotExistError:{name:'ElementDoesNotExistError',message:'The specified DOM element does not exist, but is required for this effect to operate'},tagifyText:function(element){if(typeof Builder=='undefined')
372
+ throw("Effect.tagifyText requires including script.aculo.us' builder.js library");var tagifyStyle='position:relative';if(Prototype.Browser.IE)tagifyStyle+=';zoom:1';element=$(element);$A(element.childNodes).each(function(child){if(child.nodeType==3){child.nodeValue.toArray().each(function(character){element.insertBefore(Builder.node('span',{style:tagifyStyle},character==' '?String.fromCharCode(160):character),child);});Element.remove(child);}});},multiple:function(element,effect){var elements;if(((typeof element=='object')||(typeof element=='function'))&&(element.length))
373
+ elements=element;else
374
+ elements=$(element).childNodes;var options=Object.extend({speed:0.1,delay:0.0},arguments[2]||{});var masterDelay=options.delay;$A(elements).each(function(element,index){new effect(element,Object.extend(options,{delay:index*options.speed+masterDelay}));});},PAIRS:{'slide':['SlideDown','SlideUp'],'blind':['BlindDown','BlindUp'],'appear':['Appear','Fade']},toggle:function(element,effect){element=$(element);effect=(effect||'appear').toLowerCase();var options=Object.extend({queue:{position:'end',scope:(element.id||'global'),limit:1}},arguments[2]||{});Effect[element.visible()?Effect.PAIRS[effect][1]:Effect.PAIRS[effect][0]](element,options);}};var Effect2=Effect;Effect.Transitions={linear:Prototype.K,sinoidal:function(pos){return(-Math.cos(pos*Math.PI)/2)+0.5;},reverse:function(pos){return 1-pos;},flicker:function(pos){var pos=((-Math.cos(pos*Math.PI)/4)+0.75)+Math.random()/4;return(pos>1?1:pos);},wobble:function(pos){return(-Math.cos(pos*Math.PI*(9*pos))/2)+0.5;},pulse:function(pos,pulses){pulses=pulses||5;return(Math.round((pos%(1/pulses))*pulses)==0?((pos*pulses*2)-Math.floor(pos*pulses*2)):1-((pos*pulses*2)-Math.floor(pos*pulses*2)));},none:function(pos){return 0;},full:function(pos){return 1;}};Effect.ScopedQueue=Class.create();Object.extend(Object.extend(Effect.ScopedQueue.prototype,Enumerable),{initialize:function(){this.effects=[];this.interval=null;},_each:function(iterator){this.effects._each(iterator);},add:function(effect){var timestamp=new Date().getTime();var position=(typeof effect.options.queue=='string')?effect.options.queue:effect.options.queue.position;switch(position){case'front':this.effects.findAll(function(e){return e.state=='idle'}).each(function(e){e.startOn+=effect.finishOn;e.finishOn+=effect.finishOn;});break;case'with-last':timestamp=this.effects.pluck('startOn').max()||timestamp;break;case'end':timestamp=this.effects.pluck('finishOn').max()||timestamp;break;}
375
+ effect.startOn+=timestamp;effect.finishOn+=timestamp;if(!effect.options.queue.limit||(this.effects.length<effect.options.queue.limit))
376
+ this.effects.push(effect);if(!this.interval)
377
+ this.interval=setInterval(this.loop.bind(this),15);},remove:function(effect){this.effects=this.effects.reject(function(e){return e==effect});if(this.effects.length==0){clearInterval(this.interval);this.interval=null;}},loop:function(){var timePos=new Date().getTime();for(var i=0,len=this.effects.length;i<len;i++)
378
+ this.effects[i]&&this.effects[i].loop(timePos);}});Effect.Queues={instances:$H(),get:function(queueName){if(typeof queueName!='string')return queueName;if(!this.instances[queueName])
379
+ this.instances[queueName]=new Effect.ScopedQueue();return this.instances[queueName];}}
380
+ Effect.Queue=Effect.Queues.get('global');Effect.DefaultOptions={transition:Effect.Transitions.sinoidal,duration:1.0,fps:100,sync:false,from:0.0,to:1.0,delay:0.0,queue:'parallel'}
381
+ Effect.Base=function(){};Effect.Base.prototype={position:null,start:function(options){function codeForEvent(options,eventName){return((options[eventName+'Internal']?'this.options.'+eventName+'Internal(this);':'')+
382
+ (options[eventName]?'this.options.'+eventName+'(this);':''));}
383
+ if(options.transition===false)options.transition=Effect.Transitions.linear;this.options=Object.extend(Object.extend({},Effect.DefaultOptions),options||{});this.currentFrame=0;this.state='idle';this.startOn=this.options.delay*1000;this.finishOn=this.startOn+(this.options.duration*1000);this.fromToDelta=this.options.to-this.options.from;this.totalTime=this.finishOn-this.startOn;this.totalFrames=this.options.fps*this.options.duration;eval('this.render = function(pos){ '+'if(this.state=="idle"){this.state="running";'+
384
+ codeForEvent(options,'beforeSetup')+
385
+ (this.setup?'this.setup();':'')+
386
+ codeForEvent(options,'afterSetup')+'};if(this.state=="running"){'+'pos=this.options.transition(pos)*'+this.fromToDelta+'+'+this.options.from+';'+'this.position=pos;'+
387
+ codeForEvent(options,'beforeUpdate')+
388
+ (this.update?'this.update(pos);':'')+
389
+ codeForEvent(options,'afterUpdate')+'}}');this.event('beforeStart');if(!this.options.sync)
390
+ Effect.Queues.get(typeof this.options.queue=='string'?'global':this.options.queue.scope).add(this);},loop:function(timePos){if(timePos>=this.startOn){if(timePos>=this.finishOn){this.render(1.0);this.cancel();this.event('beforeFinish');if(this.finish)this.finish();this.event('afterFinish');return;}
391
+ var pos=(timePos-this.startOn)/this.totalTime,frame=Math.round(pos*this.totalFrames);if(frame>this.currentFrame){this.render(pos);this.currentFrame=frame;}}},cancel:function(){if(!this.options.sync)
392
+ Effect.Queues.get(typeof this.options.queue=='string'?'global':this.options.queue.scope).remove(this);this.state='finished';},event:function(eventName){if(this.options[eventName+'Internal'])this.options[eventName+'Internal'](this);if(this.options[eventName])this.options[eventName](this);},inspect:function(){var data=$H();for(property in this)
393
+ if(typeof this[property]!='function')data[property]=this[property];return'#<Effect:'+data.inspect()+',options:'+$H(this.options).inspect()+'>';}}
394
+ Effect.Parallel=Class.create();Object.extend(Object.extend(Effect.Parallel.prototype,Effect.Base.prototype),{initialize:function(effects){this.effects=effects||[];this.start(arguments[1]);},update:function(position){this.effects.invoke('render',position);},finish:function(position){this.effects.each(function(effect){effect.render(1.0);effect.cancel();effect.event('beforeFinish');if(effect.finish)effect.finish(position);effect.event('afterFinish');});}});Effect.Event=Class.create();Object.extend(Object.extend(Effect.Event.prototype,Effect.Base.prototype),{initialize:function(){var options=Object.extend({duration:0},arguments[0]||{});this.start(options);},update:Prototype.emptyFunction});Effect.Opacity=Class.create();Object.extend(Object.extend(Effect.Opacity.prototype,Effect.Base.prototype),{initialize:function(element){this.element=$(element);if(!this.element)throw(Effect._elementDoesNotExistError);if(Prototype.Browser.IE&&(!this.element.currentStyle.hasLayout))
395
+ this.element.setStyle({zoom:1});var options=Object.extend({from:this.element.getOpacity()||0.0,to:1.0},arguments[1]||{});this.start(options);},update:function(position){this.element.setOpacity(position);}});Effect.Move=Class.create();Object.extend(Object.extend(Effect.Move.prototype,Effect.Base.prototype),{initialize:function(element){this.element=$(element);if(!this.element)throw(Effect._elementDoesNotExistError);var options=Object.extend({x:0,y:0,mode:'relative'},arguments[1]||{});this.start(options);},setup:function(){this.element.makePositioned();this.originalLeft=parseFloat(this.element.getStyle('left')||'0');this.originalTop=parseFloat(this.element.getStyle('top')||'0');if(this.options.mode=='absolute'){this.options.x=this.options.x-this.originalLeft;this.options.y=this.options.y-this.originalTop;}},update:function(position){this.element.setStyle({left:Math.round(this.options.x*position+this.originalLeft)+'px',top:Math.round(this.options.y*position+this.originalTop)+'px'});}});Effect.MoveBy=function(element,toTop,toLeft){return new Effect.Move(element,Object.extend({x:toLeft,y:toTop},arguments[3]||{}));};Effect.Scale=Class.create();Object.extend(Object.extend(Effect.Scale.prototype,Effect.Base.prototype),{initialize:function(element,percent){this.element=$(element);if(!this.element)throw(Effect._elementDoesNotExistError);var options=Object.extend({scaleX:true,scaleY:true,scaleContent:true,scaleFromCenter:false,scaleMode:'box',scaleFrom:100.0,scaleTo:percent},arguments[2]||{});this.start(options);},setup:function(){this.restoreAfterFinish=this.options.restoreAfterFinish||false;this.elementPositioning=this.element.getStyle('position');this.originalStyle={};['top','left','width','height','fontSize'].each(function(k){this.originalStyle[k]=this.element.style[k];}.bind(this));this.originalTop=this.element.offsetTop;this.originalLeft=this.element.offsetLeft;var fontSize=this.element.getStyle('font-size')||'100%';['em','px','%','pt'].each(function(fontSizeType){if(fontSize.indexOf(fontSizeType)>0){this.fontSize=parseFloat(fontSize);this.fontSizeType=fontSizeType;}}.bind(this));this.factor=(this.options.scaleTo-this.options.scaleFrom)/100;this.dims=null;if(this.options.scaleMode=='box')
396
+ this.dims=[this.element.offsetHeight,this.element.offsetWidth];if(/^content/.test(this.options.scaleMode))
397
+ this.dims=[this.element.scrollHeight,this.element.scrollWidth];if(!this.dims)
398
+ this.dims=[this.options.scaleMode.originalHeight,this.options.scaleMode.originalWidth];},update:function(position){var currentScale=(this.options.scaleFrom/100.0)+(this.factor*position);if(this.options.scaleContent&&this.fontSize)
399
+ this.element.setStyle({fontSize:this.fontSize*currentScale+this.fontSizeType});this.setDimensions(this.dims[0]*currentScale,this.dims[1]*currentScale);},finish:function(position){if(this.restoreAfterFinish)this.element.setStyle(this.originalStyle);},setDimensions:function(height,width){var d={};if(this.options.scaleX)d.width=Math.round(width)+'px';if(this.options.scaleY)d.height=Math.round(height)+'px';if(this.options.scaleFromCenter){var topd=(height-this.dims[0])/2;var leftd=(width-this.dims[1])/2;if(this.elementPositioning=='absolute'){if(this.options.scaleY)d.top=this.originalTop-topd+'px';if(this.options.scaleX)d.left=this.originalLeft-leftd+'px';}else{if(this.options.scaleY)d.top=-topd+'px';if(this.options.scaleX)d.left=-leftd+'px';}}
400
+ this.element.setStyle(d);}});Effect.Highlight=Class.create();Object.extend(Object.extend(Effect.Highlight.prototype,Effect.Base.prototype),{initialize:function(element){this.element=$(element);if(!this.element)throw(Effect._elementDoesNotExistError);var options=Object.extend({startcolor:'#ffff99'},arguments[1]||{});this.start(options);},setup:function(){if(this.element.getStyle('display')=='none'){this.cancel();return;}
401
+ this.oldStyle={};if(!this.options.keepBackgroundImage){this.oldStyle.backgroundImage=this.element.getStyle('background-image');this.element.setStyle({backgroundImage:'none'});}
402
+ if(!this.options.endcolor)
403
+ this.options.endcolor=this.element.getStyle('background-color').parseColor('#ffffff');if(!this.options.restorecolor)
404
+ this.options.restorecolor=this.element.getStyle('background-color');this._base=$R(0,2).map(function(i){return parseInt(this.options.startcolor.slice(i*2+1,i*2+3),16)}.bind(this));this._delta=$R(0,2).map(function(i){return parseInt(this.options.endcolor.slice(i*2+1,i*2+3),16)-this._base[i]}.bind(this));},update:function(position){this.element.setStyle({backgroundColor:$R(0,2).inject('#',function(m,v,i){return m+(Math.round(this._base[i]+(this._delta[i]*position)).toColorPart());}.bind(this))});},finish:function(){this.element.setStyle(Object.extend(this.oldStyle,{backgroundColor:this.options.restorecolor}));}});Effect.ScrollTo=Class.create();Object.extend(Object.extend(Effect.ScrollTo.prototype,Effect.Base.prototype),{initialize:function(element){this.element=$(element);this.start(arguments[1]||{});},setup:function(){Position.prepare();var offsets=Position.cumulativeOffset(this.element);if(this.options.offset)offsets[1]+=this.options.offset;var max=window.innerHeight?window.height-window.innerHeight:document.body.scrollHeight-
405
+ (document.documentElement.clientHeight?document.documentElement.clientHeight:document.body.clientHeight);this.scrollStart=Position.deltaY;this.delta=(offsets[1]>max?max:offsets[1])-this.scrollStart;},update:function(position){Position.prepare();window.scrollTo(Position.deltaX,this.scrollStart+(position*this.delta));}});Effect.Fade=function(element){element=$(element);var oldOpacity=element.getInlineOpacity();var options=Object.extend({from:element.getOpacity()||1.0,to:0.0,afterFinishInternal:function(effect){if(effect.options.to!=0)return;effect.element.hide().setStyle({opacity:oldOpacity});}},arguments[1]||{});return new Effect.Opacity(element,options);}
406
+ Effect.Appear=function(element){element=$(element);var options=Object.extend({from:(element.getStyle('display')=='none'?0.0:element.getOpacity()||0.0),to:1.0,afterFinishInternal:function(effect){effect.element.forceRerendering();},beforeSetup:function(effect){effect.element.setOpacity(effect.options.from).show();}},arguments[1]||{});return new Effect.Opacity(element,options);}
407
+ Effect.Puff=function(element){element=$(element);var oldStyle={opacity:element.getInlineOpacity(),position:element.getStyle('position'),top:element.style.top,left:element.style.left,width:element.style.width,height:element.style.height};return new Effect.Parallel([new Effect.Scale(element,200,{sync:true,scaleFromCenter:true,scaleContent:true,restoreAfterFinish:true}),new Effect.Opacity(element,{sync:true,to:0.0})],Object.extend({duration:1.0,beforeSetupInternal:function(effect){Position.absolutize(effect.effects[0].element)},afterFinishInternal:function(effect){effect.effects[0].element.hide().setStyle(oldStyle);}},arguments[1]||{}));}
408
+ Effect.BlindUp=function(element){element=$(element);element.makeClipping();return new Effect.Scale(element,0,Object.extend({scaleContent:false,scaleX:false,restoreAfterFinish:true,afterFinishInternal:function(effect){effect.element.hide().undoClipping();}},arguments[1]||{}));}
409
+ Effect.BlindDown=function(element){element=$(element);var elementDimensions=element.getDimensions();return new Effect.Scale(element,100,Object.extend({scaleContent:false,scaleX:false,scaleFrom:0,scaleMode:{originalHeight:elementDimensions.height,originalWidth:elementDimensions.width},restoreAfterFinish:true,afterSetup:function(effect){effect.element.makeClipping().setStyle({height:'0px'}).show();},afterFinishInternal:function(effect){effect.element.undoClipping();}},arguments[1]||{}));}
410
+ Effect.SwitchOff=function(element){element=$(element);var oldOpacity=element.getInlineOpacity();return new Effect.Appear(element,Object.extend({duration:0.4,from:0,transition:Effect.Transitions.flicker,afterFinishInternal:function(effect){new Effect.Scale(effect.element,1,{duration:0.3,scaleFromCenter:true,scaleX:false,scaleContent:false,restoreAfterFinish:true,beforeSetup:function(effect){effect.element.makePositioned().makeClipping();},afterFinishInternal:function(effect){effect.element.hide().undoClipping().undoPositioned().setStyle({opacity:oldOpacity});}})}},arguments[1]||{}));}
411
+ Effect.DropOut=function(element){element=$(element);var oldStyle={top:element.getStyle('top'),left:element.getStyle('left'),opacity:element.getInlineOpacity()};return new Effect.Parallel([new Effect.Move(element,{x:0,y:100,sync:true}),new Effect.Opacity(element,{sync:true,to:0.0})],Object.extend({duration:0.5,beforeSetup:function(effect){effect.effects[0].element.makePositioned();},afterFinishInternal:function(effect){effect.effects[0].element.hide().undoPositioned().setStyle(oldStyle);}},arguments[1]||{}));}
412
+ Effect.Shake=function(element){element=$(element);var oldStyle={top:element.getStyle('top'),left:element.getStyle('left')};return new Effect.Move(element,{x:20,y:0,duration:0.05,afterFinishInternal:function(effect){new Effect.Move(effect.element,{x:-40,y:0,duration:0.1,afterFinishInternal:function(effect){new Effect.Move(effect.element,{x:40,y:0,duration:0.1,afterFinishInternal:function(effect){new Effect.Move(effect.element,{x:-40,y:0,duration:0.1,afterFinishInternal:function(effect){new Effect.Move(effect.element,{x:40,y:0,duration:0.1,afterFinishInternal:function(effect){new Effect.Move(effect.element,{x:-20,y:0,duration:0.05,afterFinishInternal:function(effect){effect.element.undoPositioned().setStyle(oldStyle);}})}})}})}})}})}});}
413
+ Effect.SlideDown=function(element){element=$(element).cleanWhitespace();var oldInnerBottom=element.down().getStyle('bottom');var elementDimensions=element.getDimensions();return new Effect.Scale(element,100,Object.extend({scaleContent:false,scaleX:false,scaleFrom:window.opera?0:1,scaleMode:{originalHeight:elementDimensions.height,originalWidth:elementDimensions.width},restoreAfterFinish:true,afterSetup:function(effect){effect.element.makePositioned();effect.element.down().makePositioned();if(window.opera)effect.element.setStyle({top:''});effect.element.makeClipping().setStyle({height:'0px'}).show();},afterUpdateInternal:function(effect){effect.element.down().setStyle({bottom:(effect.dims[0]-effect.element.clientHeight)+'px'});},afterFinishInternal:function(effect){effect.element.undoClipping().undoPositioned();effect.element.down().undoPositioned().setStyle({bottom:oldInnerBottom});}},arguments[1]||{}));}
414
+ Effect.SlideUp=function(element){element=$(element).cleanWhitespace();var oldInnerBottom=element.down().getStyle('bottom');return new Effect.Scale(element,window.opera?0:1,Object.extend({scaleContent:false,scaleX:false,scaleMode:'box',scaleFrom:100,restoreAfterFinish:true,beforeStartInternal:function(effect){effect.element.makePositioned();effect.element.down().makePositioned();if(window.opera)effect.element.setStyle({top:''});effect.element.makeClipping().show();},afterUpdateInternal:function(effect){effect.element.down().setStyle({bottom:(effect.dims[0]-effect.element.clientHeight)+'px'});},afterFinishInternal:function(effect){effect.element.hide().undoClipping().undoPositioned().setStyle({bottom:oldInnerBottom});effect.element.down().undoPositioned();}},arguments[1]||{}));}
415
+ Effect.Squish=function(element){return new Effect.Scale(element,window.opera?1:0,{restoreAfterFinish:true,beforeSetup:function(effect){effect.element.makeClipping();},afterFinishInternal:function(effect){effect.element.hide().undoClipping();}});}
416
+ Effect.Grow=function(element){element=$(element);var options=Object.extend({direction:'center',moveTransition:Effect.Transitions.sinoidal,scaleTransition:Effect.Transitions.sinoidal,opacityTransition:Effect.Transitions.full},arguments[1]||{});var oldStyle={top:element.style.top,left:element.style.left,height:element.style.height,width:element.style.width,opacity:element.getInlineOpacity()};var dims=element.getDimensions();var initialMoveX,initialMoveY;var moveX,moveY;switch(options.direction){case'top-left':initialMoveX=initialMoveY=moveX=moveY=0;break;case'top-right':initialMoveX=dims.width;initialMoveY=moveY=0;moveX=-dims.width;break;case'bottom-left':initialMoveX=moveX=0;initialMoveY=dims.height;moveY=-dims.height;break;case'bottom-right':initialMoveX=dims.width;initialMoveY=dims.height;moveX=-dims.width;moveY=-dims.height;break;case'center':initialMoveX=dims.width/2;initialMoveY=dims.height/2;moveX=-dims.width/2;moveY=-dims.height/2;break;}
417
+ return new Effect.Move(element,{x:initialMoveX,y:initialMoveY,duration:0.01,beforeSetup:function(effect){effect.element.hide().makeClipping().makePositioned();},afterFinishInternal:function(effect){new Effect.Parallel([new Effect.Opacity(effect.element,{sync:true,to:1.0,from:0.0,transition:options.opacityTransition}),new Effect.Move(effect.element,{x:moveX,y:moveY,sync:true,transition:options.moveTransition}),new Effect.Scale(effect.element,100,{scaleMode:{originalHeight:dims.height,originalWidth:dims.width},sync:true,scaleFrom:window.opera?1:0,transition:options.scaleTransition,restoreAfterFinish:true})],Object.extend({beforeSetup:function(effect){effect.effects[0].element.setStyle({height:'0px'}).show();},afterFinishInternal:function(effect){effect.effects[0].element.undoClipping().undoPositioned().setStyle(oldStyle);}},options))}});}
418
+ Effect.Shrink=function(element){element=$(element);var options=Object.extend({direction:'center',moveTransition:Effect.Transitions.sinoidal,scaleTransition:Effect.Transitions.sinoidal,opacityTransition:Effect.Transitions.none},arguments[1]||{});var oldStyle={top:element.style.top,left:element.style.left,height:element.style.height,width:element.style.width,opacity:element.getInlineOpacity()};var dims=element.getDimensions();var moveX,moveY;switch(options.direction){case'top-left':moveX=moveY=0;break;case'top-right':moveX=dims.width;moveY=0;break;case'bottom-left':moveX=0;moveY=dims.height;break;case'bottom-right':moveX=dims.width;moveY=dims.height;break;case'center':moveX=dims.width/2;moveY=dims.height/2;break;}
419
+ return new Effect.Parallel([new Effect.Opacity(element,{sync:true,to:0.0,from:1.0,transition:options.opacityTransition}),new Effect.Scale(element,window.opera?1:0,{sync:true,transition:options.scaleTransition,restoreAfterFinish:true}),new Effect.Move(element,{x:moveX,y:moveY,sync:true,transition:options.moveTransition})],Object.extend({beforeStartInternal:function(effect){effect.effects[0].element.makePositioned().makeClipping();},afterFinishInternal:function(effect){effect.effects[0].element.hide().undoClipping().undoPositioned().setStyle(oldStyle);}},options));}
420
+ Effect.Pulsate=function(element){element=$(element);var options=arguments[1]||{};var oldOpacity=element.getInlineOpacity();var transition=options.transition||Effect.Transitions.sinoidal;var reverser=function(pos){return transition(1-Effect.Transitions.pulse(pos,options.pulses))};reverser.bind(transition);return new Effect.Opacity(element,Object.extend(Object.extend({duration:2.0,from:0,afterFinishInternal:function(effect){effect.element.setStyle({opacity:oldOpacity});}},options),{transition:reverser}));}
421
+ Effect.Fold=function(element){element=$(element);var oldStyle={top:element.style.top,left:element.style.left,width:element.style.width,height:element.style.height};element.makeClipping();return new Effect.Scale(element,5,Object.extend({scaleContent:false,scaleX:false,afterFinishInternal:function(effect){new Effect.Scale(element,1,{scaleContent:false,scaleY:false,afterFinishInternal:function(effect){effect.element.hide().undoClipping().setStyle(oldStyle);}});}},arguments[1]||{}));};Effect.Morph=Class.create();Object.extend(Object.extend(Effect.Morph.prototype,Effect.Base.prototype),{initialize:function(element){this.element=$(element);if(!this.element)throw(Effect._elementDoesNotExistError);var options=Object.extend({style:{}},arguments[1]||{});if(typeof options.style=='string'){if(options.style.indexOf(':')==-1){var cssText='',selector='.'+options.style;$A(document.styleSheets).reverse().each(function(styleSheet){if(styleSheet.cssRules)cssRules=styleSheet.cssRules;else if(styleSheet.rules)cssRules=styleSheet.rules;$A(cssRules).reverse().each(function(rule){if(selector==rule.selectorText){cssText=rule.style.cssText;throw $break;}});if(cssText)throw $break;});this.style=cssText.parseStyle();options.afterFinishInternal=function(effect){effect.element.addClassName(effect.options.style);effect.transforms.each(function(transform){if(transform.style!='opacity')
422
+ effect.element.style[transform.style]='';});}}else this.style=options.style.parseStyle();}else this.style=$H(options.style)
423
+ this.start(options);},setup:function(){function parseColor(color){if(!color||['rgba(0, 0, 0, 0)','transparent'].include(color))color='#ffffff';color=color.parseColor();return $R(0,2).map(function(i){return parseInt(color.slice(i*2+1,i*2+3),16)});}
424
+ this.transforms=this.style.map(function(pair){var property=pair[0],value=pair[1],unit=null;if(value.parseColor('#zzzzzz')!='#zzzzzz'){value=value.parseColor();unit='color';}else if(property=='opacity'){value=parseFloat(value);if(Prototype.Browser.IE&&(!this.element.currentStyle.hasLayout))
425
+ this.element.setStyle({zoom:1});}else if(Element.CSS_LENGTH.test(value)){var components=value.match(/^([\+\-]?[0-9\.]+)(.*)$/);value=parseFloat(components[1]);unit=(components.length==3)?components[2]:null;}
426
+ var originalValue=this.element.getStyle(property);return{style:property.camelize(),originalValue:unit=='color'?parseColor(originalValue):parseFloat(originalValue||0),targetValue:unit=='color'?parseColor(value):value,unit:unit};}.bind(this)).reject(function(transform){return((transform.originalValue==transform.targetValue)||(transform.unit!='color'&&(isNaN(transform.originalValue)||isNaN(transform.targetValue))))});},update:function(position){var style={},transform,i=this.transforms.length;while(i--)
427
+ style[(transform=this.transforms[i]).style]=transform.unit=='color'?'#'+
428
+ (Math.round(transform.originalValue[0]+
429
+ (transform.targetValue[0]-transform.originalValue[0])*position)).toColorPart()+
430
+ (Math.round(transform.originalValue[1]+
431
+ (transform.targetValue[1]-transform.originalValue[1])*position)).toColorPart()+
432
+ (Math.round(transform.originalValue[2]+
433
+ (transform.targetValue[2]-transform.originalValue[2])*position)).toColorPart():transform.originalValue+Math.round(((transform.targetValue-transform.originalValue)*position)*1000)/1000+transform.unit;this.element.setStyle(style,true);}});Effect.Transform=Class.create();Object.extend(Effect.Transform.prototype,{initialize:function(tracks){this.tracks=[];this.options=arguments[1]||{};this.addTracks(tracks);},addTracks:function(tracks){tracks.each(function(track){var data=$H(track).values().first();this.tracks.push($H({ids:$H(track).keys().first(),effect:Effect.Morph,options:{style:data}}));}.bind(this));return this;},play:function(){return new Effect.Parallel(this.tracks.map(function(track){var elements=[$(track.ids)||$$(track.ids)].flatten();return elements.map(function(e){return new track.effect(e,Object.extend({sync:true},track.options))});}).flatten(),this.options);}});Element.CSS_PROPERTIES=$w('backgroundColor backgroundPosition borderBottomColor borderBottomStyle '+'borderBottomWidth borderLeftColor borderLeftStyle borderLeftWidth '+'borderRightColor borderRightStyle borderRightWidth borderSpacing '+'borderTopColor borderTopStyle borderTopWidth bottom clip color '+'fontSize fontWeight height left letterSpacing lineHeight '+'marginBottom marginLeft marginRight marginTop markerOffset maxHeight '+'maxWidth minHeight minWidth opacity outlineColor outlineOffset '+'outlineWidth paddingBottom paddingLeft paddingRight paddingTop '+'right textIndent top width wordSpacing zIndex');Element.CSS_LENGTH=/^(([\+\-]?[0-9\.]+)(em|ex|px|in|cm|mm|pt|pc|\%))|0$/;String.prototype.parseStyle=function(){var element=document.createElement('div');element.innerHTML='<div style="'+this+'"></div>';var style=element.childNodes[0].style,styleRules=$H();Element.CSS_PROPERTIES.each(function(property){if(style[property])styleRules[property]=style[property];});if(Prototype.Browser.IE&&this.indexOf('opacity')>-1){styleRules.opacity=this.match(/opacity:\s*((?:0|1)?(?:\.\d*)?)/)[1];}
434
+ return styleRules;};Element.morph=function(element,style){new Effect.Morph(element,Object.extend({style:style},arguments[2]||{}));return element;};['getInlineOpacity','forceRerendering','setContentZoom','collectTextNodes','collectTextNodesIgnoreClass','morph'].each(function(f){Element.Methods[f]=Element[f];});Element.Methods.visualEffect=function(element,effect,options){s=effect.dasherize().camelize();effect_class=s.charAt(0).toUpperCase()+s.substring(1);new Effect[effect_class](element,options);return $(element);};Element.addMethods();;if(typeof Effect=='undefined')
435
+ throw("dragdrop.js requires including script.aculo.us' effects.js library");var Droppables={drops:[],remove:function(element){this.drops=this.drops.reject(function(d){return d.element==$(element)});},add:function(element){element=$(element);var options=Object.extend({greedy:true,hoverclass:null,tree:false},arguments[1]||{});if(options.containment){options._containers=[];var containment=options.containment;if((typeof containment=='object')&&(containment.constructor==Array)){containment.each(function(c){options._containers.push($(c))});}else{options._containers.push($(containment));}}
436
+ if(options.accept)options.accept=[options.accept].flatten();Element.makePositioned(element);options.element=element;this.drops.push(options);},findDeepestChild:function(drops){deepest=drops[0];for(i=1;i<drops.length;++i)
437
+ if(Element.isParent(drops[i].element,deepest.element))
438
+ deepest=drops[i];return deepest;},isContained:function(element,drop){var containmentNode;if(drop.tree){containmentNode=element.treeNode;}else{containmentNode=element.parentNode;}
439
+ return drop._containers.detect(function(c){return containmentNode==c});},isAffected:function(point,element,drop){return((drop.element!=element)&&((!drop._containers)||this.isContained(element,drop))&&((!drop.accept)||(Element.classNames(element).detect(function(v){return drop.accept.include(v)})))&&Position.within(drop.element,point[0],point[1]));},deactivate:function(drop){if(drop.hoverclass)
440
+ Element.removeClassName(drop.element,drop.hoverclass);this.last_active=null;},activate:function(drop){if(drop.hoverclass)
441
+ Element.addClassName(drop.element,drop.hoverclass);this.last_active=drop;},show:function(point,element){if(!this.drops.length)return;var affected=[];if(this.last_active)this.deactivate(this.last_active);this.drops.each(function(drop){if(Droppables.isAffected(point,element,drop))
442
+ affected.push(drop);});if(affected.length>0){drop=Droppables.findDeepestChild(affected);Position.within(drop.element,point[0],point[1]);if(drop.onHover)
443
+ drop.onHover(element,drop.element,Position.overlap(drop.overlap,drop.element));Droppables.activate(drop);}},fire:function(event,element){if(!this.last_active)return;Position.prepare();if(this.isAffected([Event.pointerX(event),Event.pointerY(event)],element,this.last_active))
444
+ if(this.last_active.onDrop){this.last_active.onDrop(element,this.last_active.element,event);return true;}},reset:function(){if(this.last_active)
445
+ this.deactivate(this.last_active);}}
446
+ var Draggables={drags:[],observers:[],register:function(draggable){if(this.drags.length==0){this.eventMouseUp=this.endDrag.bindAsEventListener(this);this.eventMouseMove=this.updateDrag.bindAsEventListener(this);this.eventKeypress=this.keyPress.bindAsEventListener(this);Event.observe(document,"mouseup",this.eventMouseUp);Event.observe(draggable.element,"mousemove",this.eventMouseMove);Event.observe(document,"keypress",this.eventKeypress);}
447
+ this.drags.push(draggable);},unregister:function(draggable){this.drags=this.drags.reject(function(d){return d==draggable});if(this.drags.length==0){Event.stopObserving(document,"mouseup",this.eventMouseUp);Event.stopObserving(draggable.element,"mousemove",this.eventMouseMove);Event.stopObserving(document,"keypress",this.eventKeypress);}},activate:function(draggable){if(draggable.options.delay){this._timeout=setTimeout(function(){Draggables._timeout=null;window.focus();Draggables.activeDraggable=draggable;}.bind(this),draggable.options.delay);}else{window.focus();this.activeDraggable=draggable;}},deactivate:function(){this.activeDraggable=null;},updateDrag:function(event){if(!this.activeDraggable)return;var pointer=[Event.pointerX(event),Event.pointerY(event)];if(this._lastPointer&&(this._lastPointer.inspect()==pointer.inspect()))return;this._lastPointer=pointer;this.activeDraggable.updateDrag(event,pointer);},endDrag:function(event){if(this._timeout){clearTimeout(this._timeout);this._timeout=null;}
448
+ if(!this.activeDraggable)return;this._lastPointer=null;this.activeDraggable.endDrag(event);this.activeDraggable=null;},keyPress:function(event){if(this.activeDraggable)
449
+ this.activeDraggable.keyPress(event);},addObserver:function(observer){this.observers.push(observer);this._cacheObserverCallbacks();},removeObserver:function(element){this.observers=this.observers.reject(function(o){return o.element==element});this._cacheObserverCallbacks();},notify:function(eventName,draggable,event){if(this[eventName+'Count']>0)
450
+ this.observers.each(function(o){if(o[eventName])o[eventName](eventName,draggable,event);});if(draggable.options[eventName])draggable.options[eventName](draggable,event);},_cacheObserverCallbacks:function(){['onStart','onEnd','onDrag'].each(function(eventName){Draggables[eventName+'Count']=Draggables.observers.select(function(o){return o[eventName];}).length;});}}
451
+ var Draggable=Class.create();Draggable._dragging={};Draggable.prototype={initialize:function(element){var defaults={handle:false,reverteffect:function(element,top_offset,left_offset){var dur=Math.sqrt(Math.abs(top_offset^2)+Math.abs(left_offset^2))*0.02;new Effect.Move(element,{x:-left_offset,y:-top_offset,duration:dur,queue:{scope:'_draggable',position:'end'}});},endeffect:function(element){var toOpacity=typeof element._opacity=='number'?element._opacity:1.0;new Effect.Opacity(element,{duration:0.2,from:0.7,to:toOpacity,queue:{scope:'_draggable',position:'end'},afterFinish:function(){Draggable._dragging[element]=false}});},zindex:1000,revert:false,quiet:false,scroll:false,scrollSensitivity:20,scrollSpeed:15,snap:false,delay:0};if(!arguments[1]||typeof arguments[1].endeffect=='undefined')
452
+ Object.extend(defaults,{starteffect:function(element){element._opacity=Element.getOpacity(element);Draggable._dragging[element]=true;new Effect.Opacity(element,{duration:0.2,from:element._opacity,to:0.7});}});var options=Object.extend(defaults,arguments[1]||{});this.element=$(element);if(options.handle&&(typeof options.handle=='string'))
453
+ this.handle=this.element.down('.'+options.handle,0);if(!this.handle)this.handle=$(options.handle);if(!this.handle)this.handle=this.element;if(options.scroll&&!options.scroll.scrollTo&&!options.scroll.outerHTML){options.scroll=$(options.scroll);this._isScrollChild=Element.childOf(this.element,options.scroll);}
454
+ Element.makePositioned(this.element);this.delta=this.currentDelta();this.options=options;this.dragging=false;this.eventMouseDown=this.initDrag.bindAsEventListener(this);Event.observe(this.handle,"mousedown",this.eventMouseDown);Draggables.register(this);},destroy:function(){Event.stopObserving(this.handle,"mousedown",this.eventMouseDown);Draggables.unregister(this);},currentDelta:function(){return([parseInt(Element.getStyle(this.element,'left')||'0'),parseInt(Element.getStyle(this.element,'top')||'0')]);},initDrag:function(event){if(typeof Draggable._dragging[this.element]!='undefined'&&Draggable._dragging[this.element])return;if(Event.isLeftClick(event)){var src=Event.element(event);if((tag_name=src.tagName.toUpperCase())&&(tag_name=='INPUT'||tag_name=='SELECT'||tag_name=='OPTION'||tag_name=='BUTTON'||tag_name=='TEXTAREA'))return;var pointer=[Event.pointerX(event),Event.pointerY(event)];var pos=Position.cumulativeOffset(this.element);this.offset=[0,1].map(function(i){return(pointer[i]-pos[i])});Draggables.activate(this);Event.stop(event);}},startDrag:function(event){this.dragging=true;if(this.options.zindex){this.originalZ=parseInt(Element.getStyle(this.element,'z-index')||0);this.element.style.zIndex=this.options.zindex;}
455
+ if(this.options.ghosting){this._clone=this.element.cloneNode(true);Position.absolutize(this.element);this.element.parentNode.insertBefore(this._clone,this.element);}
456
+ if(this.options.scroll){if(this.options.scroll==window){var where=this._getWindowScroll(this.options.scroll);this.originalScrollLeft=where.left;this.originalScrollTop=where.top;}else{this.originalScrollLeft=this.options.scroll.scrollLeft;this.originalScrollTop=this.options.scroll.scrollTop;}}
457
+ Draggables.notify('onStart',this,event);if(this.options.starteffect)this.options.starteffect(this.element);},updateDrag:function(event,pointer){if(!this.dragging)this.startDrag(event);if(!this.options.quiet){Position.prepare();Droppables.show(pointer,this.element);}
458
+ Draggables.notify('onDrag',this,event);this.draw(pointer);if(this.options.change)this.options.change(this);if(this.options.scroll){this.stopScrolling();var p;if(this.options.scroll==window){with(this._getWindowScroll(this.options.scroll)){p=[left,top,left+width,top+height];}}else{p=Position.page(this.options.scroll);p[0]+=this.options.scroll.scrollLeft+Position.deltaX;p[1]+=this.options.scroll.scrollTop+Position.deltaY;p.push(p[0]+this.options.scroll.offsetWidth);p.push(p[1]+this.options.scroll.offsetHeight);}
459
+ var speed=[0,0];if(pointer[0]<(p[0]+this.options.scrollSensitivity))speed[0]=pointer[0]-(p[0]+this.options.scrollSensitivity);if(pointer[1]<(p[1]+this.options.scrollSensitivity))speed[1]=pointer[1]-(p[1]+this.options.scrollSensitivity);if(pointer[0]>(p[2]-this.options.scrollSensitivity))speed[0]=pointer[0]-(p[2]-this.options.scrollSensitivity);if(pointer[1]>(p[3]-this.options.scrollSensitivity))speed[1]=pointer[1]-(p[3]-this.options.scrollSensitivity);this.startScrolling(speed);}
460
+ if(Prototype.Browser.WebKit)window.scrollBy(0,0);Event.stop(event);},finishDrag:function(event,success){this.dragging=false;if(this.options.quiet){Position.prepare();var pointer=[Event.pointerX(event),Event.pointerY(event)];Droppables.show(pointer,this.element);}
461
+ if(this.options.ghosting){Position.relativize(this.element);Element.remove(this._clone);this._clone=null;}
462
+ var dropped=false;if(success){dropped=Droppables.fire(event,this.element);if(!dropped)dropped=false;}
463
+ if(dropped&&this.options.onDropped)this.options.onDropped(this.element);Draggables.notify('onEnd',this,event);var revert=this.options.revert;if(revert&&typeof revert=='function')revert=revert(this.element);var d=this.currentDelta();if(revert&&this.options.reverteffect){if(dropped==0||revert!='failure')
464
+ this.options.reverteffect(this.element,d[1]-this.delta[1],d[0]-this.delta[0]);}else{this.delta=d;}
465
+ if(this.options.zindex)
466
+ this.element.style.zIndex=this.originalZ;if(this.options.endeffect)
467
+ this.options.endeffect(this.element);Draggables.deactivate(this);Droppables.reset();},keyPress:function(event){if(event.keyCode!=Event.KEY_ESC)return;this.finishDrag(event,false);Event.stop(event);},endDrag:function(event){if(!this.dragging)return;this.stopScrolling();this.finishDrag(event,true);Event.stop(event);},draw:function(point){var pos=Position.cumulativeOffset(this.element);if(this.options.ghosting){var r=Position.realOffset(this.element);pos[0]+=r[0]-Position.deltaX;pos[1]+=r[1]-Position.deltaY;}
468
+ var d=this.currentDelta();pos[0]-=d[0];pos[1]-=d[1];if(this.options.scroll&&(this.options.scroll!=window&&this._isScrollChild)){pos[0]-=this.options.scroll.scrollLeft-this.originalScrollLeft;pos[1]-=this.options.scroll.scrollTop-this.originalScrollTop;}
469
+ var p=[0,1].map(function(i){return(point[i]-pos[i]-this.offset[i])}.bind(this));if(this.options.snap){if(typeof this.options.snap=='function'){p=this.options.snap(p[0],p[1],this);}else{if(this.options.snap instanceof Array){p=p.map(function(v,i){return Math.round(v/this.options.snap[i])*this.options.snap[i]}.bind(this))}else{p=p.map(function(v){return Math.round(v/this.options.snap)*this.options.snap}.bind(this))}}}
470
+ var style=this.element.style;if((!this.options.constraint)||(this.options.constraint=='horizontal'))
471
+ style.left=p[0]+"px";if((!this.options.constraint)||(this.options.constraint=='vertical'))
472
+ style.top=p[1]+"px";if(style.visibility=="hidden")style.visibility="";},stopScrolling:function(){if(this.scrollInterval){clearInterval(this.scrollInterval);this.scrollInterval=null;Draggables._lastScrollPointer=null;}},startScrolling:function(speed){if(!(speed[0]||speed[1]))return;this.scrollSpeed=[speed[0]*this.options.scrollSpeed,speed[1]*this.options.scrollSpeed];this.lastScrolled=new Date();this.scrollInterval=setInterval(this.scroll.bind(this),10);},scroll:function(){var current=new Date();var delta=current-this.lastScrolled;this.lastScrolled=current;if(this.options.scroll==window){with(this._getWindowScroll(this.options.scroll)){if(this.scrollSpeed[0]||this.scrollSpeed[1]){var d=delta/1000;this.options.scroll.scrollTo(left+d*this.scrollSpeed[0],top+d*this.scrollSpeed[1]);}}}else{this.options.scroll.scrollLeft+=this.scrollSpeed[0]*delta/1000;this.options.scroll.scrollTop+=this.scrollSpeed[1]*delta/1000;}
473
+ Position.prepare();Droppables.show(Draggables._lastPointer,this.element);Draggables.notify('onDrag',this);if(this._isScrollChild){Draggables._lastScrollPointer=Draggables._lastScrollPointer||$A(Draggables._lastPointer);Draggables._lastScrollPointer[0]+=this.scrollSpeed[0]*delta/1000;Draggables._lastScrollPointer[1]+=this.scrollSpeed[1]*delta/1000;if(Draggables._lastScrollPointer[0]<0)
474
+ Draggables._lastScrollPointer[0]=0;if(Draggables._lastScrollPointer[1]<0)
475
+ Draggables._lastScrollPointer[1]=0;this.draw(Draggables._lastScrollPointer);}
476
+ if(this.options.change)this.options.change(this);},_getWindowScroll:function(w){var T,L,W,H;with(w.document){if(w.document.documentElement&&documentElement.scrollTop){T=documentElement.scrollTop;L=documentElement.scrollLeft;}else if(w.document.body){T=body.scrollTop;L=body.scrollLeft;}
477
+ if(w.innerWidth){W=w.innerWidth;H=w.innerHeight;}else if(w.document.documentElement&&documentElement.clientWidth){W=documentElement.clientWidth;H=documentElement.clientHeight;}else{W=body.offsetWidth;H=body.offsetHeight}}
478
+ return{top:T,left:L,width:W,height:H};}}
479
+ var SortableObserver=Class.create();SortableObserver.prototype={initialize:function(element,observer){this.element=$(element);this.observer=observer;this.lastValue=Sortable.serialize(this.element);},onStart:function(){this.lastValue=Sortable.serialize(this.element);},onEnd:function(){Sortable.unmark();if(this.lastValue!=Sortable.serialize(this.element))
480
+ this.observer(this.element)}}
481
+ var Sortable={SERIALIZE_RULE:/^[^_\-](?:[A-Za-z0-9\-\_]*)[_](.*)$/,sortables:{},_findRootElement:function(element){while(element.tagName.toUpperCase()!="BODY"){if(element.id&&Sortable.sortables[element.id])return element;element=element.parentNode;}},options:function(element){element=Sortable._findRootElement($(element));if(!element)return;return Sortable.sortables[element.id];},destroy:function(element){var s=Sortable.options(element);if(s){Draggables.removeObserver(s.element);s.droppables.each(function(d){Droppables.remove(d)});s.draggables.invoke('destroy');delete Sortable.sortables[s.element.id];}},create:function(element){element=$(element);var options=Object.extend({element:element,tag:'li',dropOnEmpty:false,tree:false,treeTag:'ul',overlap:'vertical',constraint:'vertical',containment:element,handle:false,only:false,delay:0,hoverclass:null,ghosting:false,quiet:false,scroll:false,scrollSensitivity:20,scrollSpeed:15,format:this.SERIALIZE_RULE,elements:false,handles:false,onChange:Prototype.emptyFunction,onUpdate:Prototype.emptyFunction},arguments[1]||{});this.destroy(element);var options_for_draggable={revert:true,quiet:options.quiet,scroll:options.scroll,scrollSpeed:options.scrollSpeed,scrollSensitivity:options.scrollSensitivity,delay:options.delay,ghosting:options.ghosting,constraint:options.constraint,handle:options.handle};if(options.starteffect)
482
+ options_for_draggable.starteffect=options.starteffect;if(options.reverteffect)
483
+ options_for_draggable.reverteffect=options.reverteffect;else
484
+ if(options.ghosting)options_for_draggable.reverteffect=function(element){element.style.top=0;element.style.left=0;};if(options.endeffect)
485
+ options_for_draggable.endeffect=options.endeffect;if(options.zindex)
486
+ options_for_draggable.zindex=options.zindex;var options_for_droppable={overlap:options.overlap,containment:options.containment,tree:options.tree,hoverclass:options.hoverclass,onHover:Sortable.onHover}
487
+ var options_for_tree={onHover:Sortable.onEmptyHover,overlap:options.overlap,containment:options.containment,hoverclass:options.hoverclass}
488
+ Element.cleanWhitespace(element);options.draggables=[];options.droppables=[];if(options.dropOnEmpty||options.tree){Droppables.add(element,options_for_tree);options.droppables.push(element);}
489
+ (options.elements||this.findElements(element,options)||[]).each(function(e,i){var handle=options.handles?$(options.handles[i]):(options.handle?$(e).getElementsByClassName(options.handle)[0]:e);options.draggables.push(new Draggable(e,Object.extend(options_for_draggable,{handle:handle})));Droppables.add(e,options_for_droppable);if(options.tree)e.treeNode=element;options.droppables.push(e);});if(options.tree){(Sortable.findTreeElements(element,options)||[]).each(function(e){Droppables.add(e,options_for_tree);e.treeNode=element;options.droppables.push(e);});}
490
+ this.sortables[element.id]=options;Draggables.addObserver(new SortableObserver(element,options.onUpdate));},findElements:function(element,options){return Element.findChildren(element,options.only,options.tree?true:false,options.tag);},findTreeElements:function(element,options){return Element.findChildren(element,options.only,options.tree?true:false,options.treeTag);},onHover:function(element,dropon,overlap){if(Element.isParent(dropon,element))return;if(overlap>.33&&overlap<.66&&Sortable.options(dropon).tree){return;}else if(overlap>0.5){Sortable.mark(dropon,'before');if(dropon.previousSibling!=element){var oldParentNode=element.parentNode;element.style.visibility="hidden";dropon.parentNode.insertBefore(element,dropon);if(dropon.parentNode!=oldParentNode)
491
+ Sortable.options(oldParentNode).onChange(element);Sortable.options(dropon.parentNode).onChange(element);}}else{Sortable.mark(dropon,'after');var nextElement=dropon.nextSibling||null;if(nextElement!=element){var oldParentNode=element.parentNode;element.style.visibility="hidden";dropon.parentNode.insertBefore(element,nextElement);if(dropon.parentNode!=oldParentNode)
492
+ Sortable.options(oldParentNode).onChange(element);Sortable.options(dropon.parentNode).onChange(element);}}},onEmptyHover:function(element,dropon,overlap){var oldParentNode=element.parentNode;var droponOptions=Sortable.options(dropon);if(!Element.isParent(dropon,element)){var index;var children=Sortable.findElements(dropon,{tag:droponOptions.tag,only:droponOptions.only});var child=null;if(children){var offset=Element.offsetSize(dropon,droponOptions.overlap)*(1.0-overlap);for(index=0;index<children.length;index+=1){if(offset-Element.offsetSize(children[index],droponOptions.overlap)>=0){offset-=Element.offsetSize(children[index],droponOptions.overlap);}else if(offset-(Element.offsetSize(children[index],droponOptions.overlap)/2)>=0){child=index+1<children.length?children[index+1]:null;break;}else{child=children[index];break;}}}
493
+ dropon.insertBefore(element,child);Sortable.options(oldParentNode).onChange(element);droponOptions.onChange(element);}},unmark:function(){if(Sortable._marker)Sortable._marker.hide();},mark:function(dropon,position){var sortable=Sortable.options(dropon.parentNode);if(sortable&&!sortable.ghosting)return;if(!Sortable._marker){Sortable._marker=($('dropmarker')||Element.extend(document.createElement('DIV'))).hide().addClassName('dropmarker').setStyle({position:'absolute'});document.getElementsByTagName("body").item(0).appendChild(Sortable._marker);}
494
+ var offsets=Position.cumulativeOffset(dropon);Sortable._marker.setStyle({left:offsets[0]+'px',top:offsets[1]+'px'});if(position=='after')
495
+ if(sortable.overlap=='horizontal')
496
+ Sortable._marker.setStyle({left:(offsets[0]+dropon.clientWidth)+'px'});else
497
+ Sortable._marker.setStyle({top:(offsets[1]+dropon.clientHeight)+'px'});Sortable._marker.show();},_tree:function(element,options,parent){var children=Sortable.findElements(element,options)||[];for(var i=0;i<children.length;++i){var match=children[i].id.match(options.format);if(!match)continue;var child={id:encodeURIComponent(match?match[1]:null),element:element,parent:parent,children:[],position:parent.children.length,container:$(children[i]).down(options.treeTag)}
498
+ if(child.container)
499
+ this._tree(child.container,options,child)
500
+ parent.children.push(child);}
501
+ return parent;},tree:function(element){element=$(element);var sortableOptions=this.options(element);var options=Object.extend({tag:sortableOptions.tag,treeTag:sortableOptions.treeTag,only:sortableOptions.only,name:element.id,format:sortableOptions.format},arguments[1]||{});var root={id:null,parent:null,children:[],container:element,position:0}
502
+ return Sortable._tree(element,options,root);},_constructIndex:function(node){var index='';do{if(node.id)index='['+node.position+']'+index;}while((node=node.parent)!=null);return index;},sequence:function(element){element=$(element);var options=Object.extend(this.options(element),arguments[1]||{});return $(this.findElements(element,options)||[]).map(function(item){return item.id.match(options.format)?item.id.match(options.format)[1]:'';});},setSequence:function(element,new_sequence){element=$(element);var options=Object.extend(this.options(element),arguments[2]||{});var nodeMap={};this.findElements(element,options).each(function(n){if(n.id.match(options.format))
503
+ nodeMap[n.id.match(options.format)[1]]=[n,n.parentNode];n.parentNode.removeChild(n);});new_sequence.each(function(ident){var n=nodeMap[ident];if(n){n[1].appendChild(n[0]);delete nodeMap[ident];}});},serialize:function(element){element=$(element);var options=Object.extend(Sortable.options(element),arguments[1]||{});var name=encodeURIComponent((arguments[1]&&arguments[1].name)?arguments[1].name:element.id);if(options.tree){return Sortable.tree(element,arguments[1]).children.map(function(item){return[name+Sortable._constructIndex(item)+"[id]="+
504
+ encodeURIComponent(item.id)].concat(item.children.map(arguments.callee));}).flatten().join('&');}else{return Sortable.sequence(element,arguments[1]).map(function(item){return name+"[]="+encodeURIComponent(item);}).join('&');}}}
505
+ Element.isParent=function(child,element){if(!child.parentNode||child==element)return false;if(child.parentNode==element)return true;return Element.isParent(child.parentNode,element);}
506
+ Element.findChildren=function(element,only,recursive,tagName){if(!element.hasChildNodes())return null;tagName=tagName.toUpperCase();if(only)only=[only].flatten();var elements=[];$A(element.childNodes).each(function(e){if(e.tagName&&e.tagName.toUpperCase()==tagName&&(!only||(Element.classNames(e).detect(function(v){return only.include(v)}))))
507
+ elements.push(e);if(recursive){var grandchildren=Element.findChildren(e,only,recursive,tagName);if(grandchildren)elements.push(grandchildren);}});return(elements.length>0?elements.flatten():[]);}
508
+ Element.offsetSize=function(element,type){return element['offset'+((type=='vertical'||type=='height')?'Height':'Width')];};if(typeof Effect=='undefined')
509
+ throw("controls.js requires including script.aculo.us' effects.js library");var Autocompleter={}
510
+ Autocompleter.Base=function(){};Autocompleter.Base.prototype={baseInitialize:function(element,update,options){element=$(element)
511
+ this.element=element;this.update=$(update);this.hasFocus=false;this.changed=false;this.active=false;this.index=0;this.entryCount=0;if(this.setOptions)
512
+ this.setOptions(options);else
513
+ this.options=options||{};this.options.paramName=this.options.paramName||this.element.name;this.options.tokens=this.options.tokens||[];this.options.frequency=this.options.frequency||0.4;this.options.minChars=this.options.minChars||1;this.options.onShow=this.options.onShow||function(element,update){if(!update.style.position||update.style.position=='absolute'){update.style.position='absolute';Position.clone(element,update,{setHeight:false,offsetTop:element.offsetHeight});}
514
+ Effect.Appear(update,{duration:0.15});};this.options.onHide=this.options.onHide||function(element,update){new Effect.Fade(update,{duration:0.15})};if(typeof(this.options.tokens)=='string')
515
+ this.options.tokens=new Array(this.options.tokens);this.observer=null;this.element.setAttribute('autocomplete','off');Element.hide(this.update);Event.observe(this.element,'blur',this.onBlur.bindAsEventListener(this));Event.observe(this.element,'keypress',this.onKeyPress.bindAsEventListener(this));Event.observe(window,'beforeunload',function(){element.setAttribute('autocomplete','on');});},show:function(){if(Element.getStyle(this.update,'display')=='none')this.options.onShow(this.element,this.update);if(!this.iefix&&(Prototype.Browser.IE)&&(Element.getStyle(this.update,'position')=='absolute')){new Insertion.After(this.update,'<iframe id="'+this.update.id+'_iefix" '+'style="display:none;position:absolute;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0);" '+'src="javascript:false;" frameborder="0" scrolling="no"></iframe>');this.iefix=$(this.update.id+'_iefix');}
516
+ if(this.iefix)setTimeout(this.fixIEOverlapping.bind(this),50);},fixIEOverlapping:function(){Position.clone(this.update,this.iefix,{setTop:(!this.update.style.height)});this.iefix.style.zIndex=1;this.update.style.zIndex=2;Element.show(this.iefix);},hide:function(){this.stopIndicator();if(Element.getStyle(this.update,'display')!='none')this.options.onHide(this.element,this.update);if(this.iefix)Element.hide(this.iefix);},startIndicator:function(){if(this.options.indicator)Element.show(this.options.indicator);},stopIndicator:function(){if(this.options.indicator)Element.hide(this.options.indicator);},onKeyPress:function(event){if(this.active)
517
+ switch(event.keyCode){case Event.KEY_TAB:case Event.KEY_RETURN:this.selectEntry();Event.stop(event);case Event.KEY_ESC:this.hide();this.active=false;Event.stop(event);return;case Event.KEY_LEFT:case Event.KEY_RIGHT:return;case Event.KEY_UP:this.markPrevious();this.render();if(Prototype.Browser.WebKit)Event.stop(event);return;case Event.KEY_DOWN:this.markNext();this.render();if(Prototype.Browser.WebKit)Event.stop(event);return;}
518
+ else
519
+ if(event.keyCode==Event.KEY_TAB||event.keyCode==Event.KEY_RETURN||(Prototype.Browser.WebKit>0&&event.keyCode==0))return;this.changed=true;this.hasFocus=true;if(this.observer)clearTimeout(this.observer);this.observer=setTimeout(this.onObserverEvent.bind(this),this.options.frequency*1000);},activate:function(){this.changed=false;this.hasFocus=true;this.getUpdatedChoices();},onHover:function(event){var element=Event.findElement(event,'LI');if(this.index!=element.autocompleteIndex)
520
+ {this.index=element.autocompleteIndex;this.render();}
521
+ Event.stop(event);},onClick:function(event){var element=Event.findElement(event,'LI');this.index=element.autocompleteIndex;this.selectEntry();this.hide();},onBlur:function(event){setTimeout(this.hide.bind(this),250);this.hasFocus=false;this.active=false;},render:function(){if(this.entryCount>0){for(var i=0;i<this.entryCount;i++)
522
+ this.index==i?Element.addClassName(this.getEntry(i),"selected"):Element.removeClassName(this.getEntry(i),"selected");if(this.hasFocus){this.show();this.active=true;}}else{this.active=false;this.hide();}},markPrevious:function(){if(this.index>0)this.index--
523
+ else this.index=this.entryCount-1;this.getEntry(this.index).scrollIntoView(true);},markNext:function(){if(this.index<this.entryCount-1)this.index++
524
+ else this.index=0;this.getEntry(this.index).scrollIntoView(false);},getEntry:function(index){return this.update.firstChild.childNodes[index];},getCurrentEntry:function(){return this.getEntry(this.index);},selectEntry:function(){this.active=false;this.updateElement(this.getCurrentEntry());},updateElement:function(selectedElement){if(this.options.updateElement){this.options.updateElement(selectedElement);return;}
525
+ var value='';if(this.options.select){var nodes=document.getElementsByClassName(this.options.select,selectedElement)||[];if(nodes.length>0)value=Element.collectTextNodes(nodes[0],this.options.select);}else
526
+ value=Element.collectTextNodesIgnoreClass(selectedElement,'informal');var lastTokenPos=this.findLastToken();if(lastTokenPos!=-1){var newValue=this.element.value.substr(0,lastTokenPos+1);var whitespace=this.element.value.substr(lastTokenPos+1).match(/^\s+/);if(whitespace)
527
+ newValue+=whitespace[0];this.element.value=newValue+value;}else{this.element.value=value;}
528
+ this.element.focus();if(this.options.afterUpdateElement)
529
+ this.options.afterUpdateElement(this.element,selectedElement);},updateChoices:function(choices){if(!this.changed&&this.hasFocus){this.update.innerHTML=choices;Element.cleanWhitespace(this.update);Element.cleanWhitespace(this.update.down());if(this.update.firstChild&&this.update.down().childNodes){this.entryCount=this.update.down().childNodes.length;for(var i=0;i<this.entryCount;i++){var entry=this.getEntry(i);entry.autocompleteIndex=i;this.addObservers(entry);}}else{this.entryCount=0;}
530
+ this.stopIndicator();this.index=0;if(this.entryCount==1&&this.options.autoSelect){this.selectEntry();this.hide();}else{this.render();}}},addObservers:function(element){Event.observe(element,"mouseover",this.onHover.bindAsEventListener(this));Event.observe(element,"click",this.onClick.bindAsEventListener(this));},onObserverEvent:function(){this.changed=false;if(this.getToken().length>=this.options.minChars){this.getUpdatedChoices();}else{this.active=false;this.hide();}},getToken:function(){var tokenPos=this.findLastToken();if(tokenPos!=-1)
531
+ var ret=this.element.value.substr(tokenPos+1).replace(/^\s+/,'').replace(/\s+$/,'');else
532
+ var ret=this.element.value;return /\n/.test(ret)?'':ret;},findLastToken:function(){var lastTokenPos=-1;for(var i=0;i<this.options.tokens.length;i++){var thisTokenPos=this.element.value.lastIndexOf(this.options.tokens[i]);if(thisTokenPos>lastTokenPos)
533
+ lastTokenPos=thisTokenPos;}
534
+ return lastTokenPos;}}
535
+ Ajax.Autocompleter=Class.create();Object.extend(Object.extend(Ajax.Autocompleter.prototype,Autocompleter.Base.prototype),{initialize:function(element,update,url,options){this.baseInitialize(element,update,options);this.options.asynchronous=true;this.options.onComplete=this.onComplete.bind(this);this.options.defaultParams=this.options.parameters||null;this.url=url;},getUpdatedChoices:function(){this.startIndicator();var entry=encodeURIComponent(this.options.paramName)+'='+
536
+ encodeURIComponent(this.getToken());this.options.parameters=this.options.callback?this.options.callback(this.element,entry):entry;if(this.options.defaultParams)
537
+ this.options.parameters+='&'+this.options.defaultParams;new Ajax.Request(this.url,this.options);},onComplete:function(request){this.updateChoices(request.responseText);}});Autocompleter.Local=Class.create();Autocompleter.Local.prototype=Object.extend(new Autocompleter.Base(),{initialize:function(element,update,array,options){this.baseInitialize(element,update,options);this.options.array=array;},getUpdatedChoices:function(){this.updateChoices(this.options.selector(this));},setOptions:function(options){this.options=Object.extend({choices:10,partialSearch:true,partialChars:2,ignoreCase:true,fullSearch:false,selector:function(instance){var ret=[];var partial=[];var entry=instance.getToken();var count=0;for(var i=0;i<instance.options.array.length&&ret.length<instance.options.choices;i++){var elem=instance.options.array[i];var foundPos=instance.options.ignoreCase?elem.toLowerCase().indexOf(entry.toLowerCase()):elem.indexOf(entry);while(foundPos!=-1){if(foundPos==0&&elem.length!=entry.length){ret.push("<li><strong>"+elem.substr(0,entry.length)+"</strong>"+
538
+ elem.substr(entry.length)+"</li>");break;}else if(entry.length>=instance.options.partialChars&&instance.options.partialSearch&&foundPos!=-1){if(instance.options.fullSearch||/\s/.test(elem.substr(foundPos-1,1))){partial.push("<li>"+elem.substr(0,foundPos)+"<strong>"+
539
+ elem.substr(foundPos,entry.length)+"</strong>"+elem.substr(foundPos+entry.length)+"</li>");break;}}
540
+ foundPos=instance.options.ignoreCase?elem.toLowerCase().indexOf(entry.toLowerCase(),foundPos+1):elem.indexOf(entry,foundPos+1);}}
541
+ if(partial.length)
542
+ ret=ret.concat(partial.slice(0,instance.options.choices-ret.length))
543
+ return"<ul>"+ret.join('')+"</ul>";}},options||{});}});Field.scrollFreeActivate=function(field){setTimeout(function(){Field.activate(field);},1);}
544
+ Ajax.InPlaceEditor=Class.create();Ajax.InPlaceEditor.defaultHighlightColor="#FFFF99";Ajax.InPlaceEditor.prototype={initialize:function(element,url,options){this.url=url;this.element=$(element);this.options=Object.extend({paramName:"value",okButton:true,okLink:false,okText:"ok",cancelButton:false,cancelLink:true,cancelText:"cancel",textBeforeControls:'',textBetweenControls:'',textAfterControls:'',savingText:"Saving...",clickToEditText:"Click to edit",okText:"ok",rows:1,onComplete:function(transport,element){new Effect.Highlight(element,{startcolor:this.options.highlightcolor});},onFailure:function(transport){alert("Error communicating with the server: "+transport.responseText.stripTags());},callback:function(form){return Form.serialize(form);},handleLineBreaks:true,loadingText:'Loading...',savingClassName:'inplaceeditor-saving',loadingClassName:'inplaceeditor-loading',formClassName:'inplaceeditor-form',highlightcolor:Ajax.InPlaceEditor.defaultHighlightColor,highlightendcolor:"#FFFFFF",externalControl:null,submitOnBlur:false,ajaxOptions:{},evalScripts:false},options||{});if(!this.options.formId&&this.element.id){this.options.formId=this.element.id+"-inplaceeditor";if($(this.options.formId)){this.options.formId=null;}}
545
+ if(this.options.externalControl){this.options.externalControl=$(this.options.externalControl);}
546
+ this.originalBackground=Element.getStyle(this.element,'background-color');if(!this.originalBackground){this.originalBackground="transparent";}
547
+ this.element.title=this.options.clickToEditText;this.onclickListener=this.enterEditMode.bindAsEventListener(this);this.mouseoverListener=this.enterHover.bindAsEventListener(this);this.mouseoutListener=this.leaveHover.bindAsEventListener(this);Event.observe(this.element,'click',this.onclickListener);Event.observe(this.element,'mouseover',this.mouseoverListener);Event.observe(this.element,'mouseout',this.mouseoutListener);if(this.options.externalControl){Event.observe(this.options.externalControl,'click',this.onclickListener);Event.observe(this.options.externalControl,'mouseover',this.mouseoverListener);Event.observe(this.options.externalControl,'mouseout',this.mouseoutListener);}},enterEditMode:function(evt){if(this.saving)return;if(this.editing)return;this.editing=true;this.onEnterEditMode();if(this.options.externalControl){Element.hide(this.options.externalControl);}
548
+ Element.hide(this.element);this.createForm();this.element.parentNode.insertBefore(this.form,this.element);if(!this.options.loadTextURL)Field.scrollFreeActivate(this.editField);if(evt){Event.stop(evt);}
549
+ return false;},createForm:function(){this.form=document.createElement("form");this.form.id=this.options.formId;Element.addClassName(this.form,this.options.formClassName)
550
+ this.form.onsubmit=this.onSubmit.bind(this);this.createEditField();if(this.options.textarea){var br=document.createElement("br");this.form.appendChild(br);}
551
+ if(this.options.textBeforeControls)
552
+ this.form.appendChild(document.createTextNode(this.options.textBeforeControls));if(this.options.okButton){var okButton=document.createElement("input");okButton.type="submit";okButton.value=this.options.okText;okButton.className='editor_ok_button';this.form.appendChild(okButton);}
553
+ if(this.options.okLink){var okLink=document.createElement("a");okLink.href="#";okLink.appendChild(document.createTextNode(this.options.okText));okLink.onclick=this.onSubmit.bind(this);okLink.className='editor_ok_link';this.form.appendChild(okLink);}
554
+ if(this.options.textBetweenControls&&(this.options.okLink||this.options.okButton)&&(this.options.cancelLink||this.options.cancelButton))
555
+ this.form.appendChild(document.createTextNode(this.options.textBetweenControls));if(this.options.cancelButton){var cancelButton=document.createElement("input");cancelButton.type="submit";cancelButton.value=this.options.cancelText;cancelButton.onclick=this.onclickCancel.bind(this);cancelButton.className='editor_cancel_button';this.form.appendChild(cancelButton);}
556
+ if(this.options.cancelLink){var cancelLink=document.createElement("a");cancelLink.href="#";cancelLink.appendChild(document.createTextNode(this.options.cancelText));cancelLink.onclick=this.onclickCancel.bind(this);cancelLink.className='editor_cancel editor_cancel_link';this.form.appendChild(cancelLink);}
557
+ if(this.options.textAfterControls)
558
+ this.form.appendChild(document.createTextNode(this.options.textAfterControls));},hasHTMLLineBreaks:function(string){if(!this.options.handleLineBreaks)return false;return string.match(/<br/i)||string.match(/<p>/i);},convertHTMLLineBreaks:function(string){return string.replace(/<br>/gi,"\n").replace(/<br\/>/gi,"\n").replace(/<\/p>/gi,"\n").replace(/<p>/gi,"");},createEditField:function(){var text;if(this.options.loadTextURL){text=this.options.loadingText;}else{text=this.getText();}
559
+ var obj=this;if(this.options.rows==1&&!this.hasHTMLLineBreaks(text)){this.options.textarea=false;var textField=document.createElement("input");textField.obj=this;textField.type="text";textField.name=this.options.paramName;textField.value=text;textField.style.backgroundColor=this.options.highlightcolor;textField.className='editor_field';var size=this.options.size||this.options.cols||0;if(size!=0)textField.size=size;if(this.options.submitOnBlur)
560
+ textField.onblur=this.onSubmit.bind(this);this.editField=textField;}else{this.options.textarea=true;var textArea=document.createElement("textarea");textArea.obj=this;textArea.name=this.options.paramName;textArea.value=this.convertHTMLLineBreaks(text);textArea.rows=this.options.rows;textArea.cols=this.options.cols||40;textArea.className='editor_field';if(this.options.submitOnBlur)
561
+ textArea.onblur=this.onSubmit.bind(this);this.editField=textArea;}
562
+ if(this.options.loadTextURL){this.loadExternalText();}
563
+ this.form.appendChild(this.editField);},getText:function(){return this.element.innerHTML;},loadExternalText:function(){Element.addClassName(this.form,this.options.loadingClassName);this.editField.disabled=true;new Ajax.Request(this.options.loadTextURL,Object.extend({asynchronous:true,onComplete:this.onLoadedExternalText.bind(this)},this.options.ajaxOptions));},onLoadedExternalText:function(transport){Element.removeClassName(this.form,this.options.loadingClassName);this.editField.disabled=false;this.editField.value=transport.responseText.stripTags();Field.scrollFreeActivate(this.editField);},onclickCancel:function(){this.onComplete();this.leaveEditMode();return false;},onFailure:function(transport){this.options.onFailure(transport);if(this.oldInnerHTML){this.element.innerHTML=this.oldInnerHTML;this.oldInnerHTML=null;}
564
+ return false;},onSubmit:function(){var form=this.form;var value=this.editField.value;this.onLoading();if(this.options.evalScripts){new Ajax.Request(this.url,Object.extend({parameters:this.options.callback(form,value),onComplete:this.onComplete.bind(this),onFailure:this.onFailure.bind(this),asynchronous:true,evalScripts:true},this.options.ajaxOptions));}else{new Ajax.Updater({success:this.element,failure:null},this.url,Object.extend({parameters:this.options.callback(form,value),onComplete:this.onComplete.bind(this),onFailure:this.onFailure.bind(this)},this.options.ajaxOptions));}
565
+ if(arguments.length>1){Event.stop(arguments[0]);}
566
+ return false;},onLoading:function(){this.saving=true;this.removeForm();this.leaveHover();this.showSaving();},showSaving:function(){this.oldInnerHTML=this.element.innerHTML;this.element.innerHTML=this.options.savingText;Element.addClassName(this.element,this.options.savingClassName);this.element.style.backgroundColor=this.originalBackground;Element.show(this.element);},removeForm:function(){if(this.form){if(this.form.parentNode)Element.remove(this.form);this.form=null;}},enterHover:function(){if(this.saving)return;this.element.style.backgroundColor=this.options.highlightcolor;if(this.effect){this.effect.cancel();}
567
+ Element.addClassName(this.element,this.options.hoverClassName)},leaveHover:function(){if(this.options.backgroundColor){this.element.style.backgroundColor=this.oldBackground;}
568
+ Element.removeClassName(this.element,this.options.hoverClassName)
569
+ if(this.saving)return;this.effect=new Effect.Highlight(this.element,{startcolor:this.options.highlightcolor,endcolor:this.options.highlightendcolor,restorecolor:this.originalBackground});},leaveEditMode:function(){Element.removeClassName(this.element,this.options.savingClassName);this.removeForm();this.leaveHover();this.element.style.backgroundColor=this.originalBackground;Element.show(this.element);if(this.options.externalControl){Element.show(this.options.externalControl);}
570
+ this.editing=false;this.saving=false;this.oldInnerHTML=null;this.onLeaveEditMode();},onComplete:function(transport){this.leaveEditMode();this.options.onComplete.bind(this)(transport,this.element);},onEnterEditMode:function(){},onLeaveEditMode:function(){},dispose:function(){if(this.oldInnerHTML){this.element.innerHTML=this.oldInnerHTML;}
571
+ this.leaveEditMode();Event.stopObserving(this.element,'click',this.onclickListener);Event.stopObserving(this.element,'mouseover',this.mouseoverListener);Event.stopObserving(this.element,'mouseout',this.mouseoutListener);if(this.options.externalControl){Event.stopObserving(this.options.externalControl,'click',this.onclickListener);Event.stopObserving(this.options.externalControl,'mouseover',this.mouseoverListener);Event.stopObserving(this.options.externalControl,'mouseout',this.mouseoutListener);}}};Ajax.InPlaceCollectionEditor=Class.create();Object.extend(Ajax.InPlaceCollectionEditor.prototype,Ajax.InPlaceEditor.prototype);Object.extend(Ajax.InPlaceCollectionEditor.prototype,{createEditField:function(){if(!this.cached_selectTag){var selectTag=document.createElement("select");var collection=this.options.collection||[];var optionTag;collection.each(function(e,i){optionTag=document.createElement("option");optionTag.value=(e instanceof Array)?e[0]:e;if((typeof this.options.value=='undefined')&&((e instanceof Array)?this.element.innerHTML==e[1]:e==optionTag.value))optionTag.selected=true;if(this.options.value==optionTag.value)optionTag.selected=true;optionTag.appendChild(document.createTextNode((e instanceof Array)?e[1]:e));selectTag.appendChild(optionTag);}.bind(this));this.cached_selectTag=selectTag;}
572
+ this.editField=this.cached_selectTag;if(this.options.loadTextURL)this.loadExternalText();this.form.appendChild(this.editField);this.options.callback=function(form,value){return"value="+encodeURIComponent(value);}}});Form.Element.DelayedObserver=Class.create();Form.Element.DelayedObserver.prototype={initialize:function(element,delay,callback){this.delay=delay||0.5;this.element=$(element);this.callback=callback;this.timer=null;this.lastValue=$F(this.element);Event.observe(this.element,'keyup',this.delayedListener.bindAsEventListener(this));},delayedListener:function(event){if(this.lastValue==$F(this.element))return;if(this.timer)clearTimeout(this.timer);this.timer=setTimeout(this.onTimerEvent.bind(this),this.delay*1000);this.lastValue=$F(this.element);},onTimerEvent:function(){this.timer=null;this.callback(this.element,$F(this.element));}};;if(!Control)var Control={};Control.Slider=Class.create();Control.Slider.prototype={initialize:function(handle,track,options){var slider=this;if(handle instanceof Array){this.handles=handle.collect(function(e){return $(e)});}else{this.handles=[$(handle)];}
573
+ this.track=$(track);this.options=options||{};this.axis=this.options.axis||'horizontal';this.increment=this.options.increment||1;this.step=parseInt(this.options.step||'1');this.range=this.options.range||$R(0,1);this.value=0;this.values=this.handles.map(function(){return 0});this.spans=this.options.spans?this.options.spans.map(function(s){return $(s)}):false;this.options.startSpan=$(this.options.startSpan||null);this.options.endSpan=$(this.options.endSpan||null);this.restricted=this.options.restricted||false;this.maximum=this.options.maximum||this.range.end;this.minimum=this.options.minimum||this.range.start;this.alignX=parseInt(this.options.alignX||'0');this.alignY=parseInt(this.options.alignY||'0');this.trackLength=this.maximumOffset()-this.minimumOffset();this.handleLength=this.isVertical()?(this.handles[0].offsetHeight!=0?this.handles[0].offsetHeight:this.handles[0].style.height.replace(/px$/,"")):(this.handles[0].offsetWidth!=0?this.handles[0].offsetWidth:this.handles[0].style.width.replace(/px$/,""));this.active=false;this.dragging=false;this.disabled=false;if(this.options.disabled)this.setDisabled();this.allowedValues=this.options.values?this.options.values.sortBy(Prototype.K):false;if(this.allowedValues){this.minimum=this.allowedValues.min();this.maximum=this.allowedValues.max();}
574
+ this.eventMouseDown=this.startDrag.bindAsEventListener(this);this.eventMouseUp=this.endDrag.bindAsEventListener(this);this.eventMouseMove=this.update.bindAsEventListener(this);this.handles.each(function(h,i){i=slider.handles.length-1-i;slider.setValue(parseFloat((slider.options.sliderValue instanceof Array?slider.options.sliderValue[i]:slider.options.sliderValue)||slider.range.start),i);Element.makePositioned(h);Event.observe(h,"mousedown",slider.eventMouseDown);});Event.observe(this.track,"mousedown",this.eventMouseDown);Event.observe(document,"mouseup",this.eventMouseUp);Event.observe(this.track.parentNode.parentNode,"mousemove",this.eventMouseMove);this.initialized=true;},dispose:function(){var slider=this;Event.stopObserving(this.track,"mousedown",this.eventMouseDown);Event.stopObserving(document,"mouseup",this.eventMouseUp);Event.stopObserving(this.track.parentNode.parentNode,"mousemove",this.eventMouseMove);this.handles.each(function(h){Event.stopObserving(h,"mousedown",slider.eventMouseDown);});},setDisabled:function(){this.disabled=true;},setEnabled:function(){this.disabled=false;},getNearestValue:function(value){if(this.allowedValues){if(value>=this.allowedValues.max())return(this.allowedValues.max());if(value<=this.allowedValues.min())return(this.allowedValues.min());var offset=Math.abs(this.allowedValues[0]-value);var newValue=this.allowedValues[0];this.allowedValues.each(function(v){var currentOffset=Math.abs(v-value);if(currentOffset<=offset){newValue=v;offset=currentOffset;}});return newValue;}
575
+ if(value>this.range.end)return this.range.end;if(value<this.range.start)return this.range.start;return value;},setValue:function(sliderValue,handleIdx){if(!this.active){this.activeHandleIdx=handleIdx||0;this.activeHandle=this.handles[this.activeHandleIdx];this.updateStyles();}
576
+ handleIdx=handleIdx||this.activeHandleIdx||0;if(this.initialized&&this.restricted){if((handleIdx>0)&&(sliderValue<this.values[handleIdx-1]))
577
+ sliderValue=this.values[handleIdx-1];if((handleIdx<(this.handles.length-1))&&(sliderValue>this.values[handleIdx+1]))
578
+ sliderValue=this.values[handleIdx+1];}
579
+ sliderValue=this.getNearestValue(sliderValue);this.values[handleIdx]=sliderValue;this.value=this.values[0];this.handles[handleIdx].style[this.isVertical()?'top':'left']=this.translateToPx(sliderValue);this.drawSpans();if(!this.dragging||!this.event)this.updateFinished();},setValueBy:function(delta,handleIdx){this.setValue(this.values[handleIdx||this.activeHandleIdx||0]+delta,handleIdx||this.activeHandleIdx||0);},translateToPx:function(value){return Math.round(((this.trackLength-this.handleLength)/(this.range.end-this.range.start))*(value-this.range.start))+"px";},translateToValue:function(offset){return((offset/(this.trackLength-this.handleLength)*(this.range.end-this.range.start))+this.range.start);},getRange:function(range){var v=this.values.sortBy(Prototype.K);range=range||0;return $R(v[range],v[range+1]);},minimumOffset:function(){return(this.isVertical()?this.alignY:this.alignX);},maximumOffset:function(){return(this.isVertical()?(this.track.offsetHeight!=0?this.track.offsetHeight:this.track.style.height.replace(/px$/,""))-this.alignY:(this.track.offsetWidth!=0?this.track.offsetWidth:this.track.style.width.replace(/px$/,""))-this.alignY);},isVertical:function(){return(this.axis=='vertical');},drawSpans:function(){var slider=this;if(this.spans)
580
+ $R(0,this.spans.length-1).each(function(r){slider.setSpan(slider.spans[r],slider.getRange(r))});if(this.options.startSpan)
581
+ this.setSpan(this.options.startSpan,$R(0,this.values.length>1?this.getRange(0).min():this.value));if(this.options.endSpan)
582
+ this.setSpan(this.options.endSpan,$R(this.values.length>1?this.getRange(this.spans.length-1).max():this.value,this.maximum));},setSpan:function(span,range){if(this.isVertical()){span.style.top=this.translateToPx(range.start);span.style.height=this.translateToPx(range.end-range.start+this.range.start);}else{span.style.left=this.translateToPx(range.start);span.style.width=this.translateToPx(range.end-range.start+this.range.start);}},updateStyles:function(){this.handles.each(function(h){Element.removeClassName(h,'selected')});Element.addClassName(this.activeHandle,'selected');},startDrag:function(event){if(Event.isLeftClick(event)){if(!this.disabled){this.active=true;var handle=Event.element(event);var pointer=[Event.pointerX(event),Event.pointerY(event)];var track=handle;if(track==this.track){var offsets=Position.cumulativeOffset(this.track);this.event=event;this.setValue(this.translateToValue((this.isVertical()?pointer[1]-offsets[1]:pointer[0]-offsets[0])-(this.handleLength/2)));var offsets=Position.cumulativeOffset(this.activeHandle);this.offsetX=(pointer[0]-offsets[0]);this.offsetY=(pointer[1]-offsets[1]);}else{while((this.handles.indexOf(handle)==-1)&&handle.parentNode)
583
+ handle=handle.parentNode;if(this.handles.indexOf(handle)!=-1){this.activeHandle=handle;this.activeHandleIdx=this.handles.indexOf(this.activeHandle);this.updateStyles();var offsets=Position.cumulativeOffset(this.activeHandle);this.offsetX=(pointer[0]-offsets[0]);this.offsetY=(pointer[1]-offsets[1]);}}}
584
+ Event.stop(event);}},update:function(event){if(this.active){if(!this.dragging)this.dragging=true;this.draw(event);if(Prototype.Browser.WebKit)window.scrollBy(0,0);Event.stop(event);}},draw:function(event){var pointer=[Event.pointerX(event),Event.pointerY(event)];var offsets=Position.cumulativeOffset(this.track);pointer[0]-=this.offsetX+offsets[0];pointer[1]-=this.offsetY+offsets[1];this.event=event;this.setValue(this.translateToValue(this.isVertical()?pointer[1]:pointer[0]));if(this.initialized&&this.options.onSlide)
585
+ this.options.onSlide(this.values.length>1?this.values:this.value,this);},endDrag:function(event){if(this.active&&this.dragging){this.finishDrag(event,true);Event.stop(event);}
586
+ this.active=false;this.dragging=false;},finishDrag:function(event,success){this.active=false;this.dragging=false;this.updateFinished();},updateFinished:function(){if(this.initialized&&this.options.onChange)
587
+ this.options.onChange(this.values.length>1?this.values:this.value,this);this.event=null;}};function popWin(url,win,para){var win=window.open(url,win,para);win.focus();}
588
+ function setLocation(url){window.location.href=url;}
589
+ function setPLocation(url,setFocus){if(setFocus){window.opener.focus();}
590
+ window.opener.location.href=url;}
591
+ function setLanguageCode(code,fromCode){var href=window.location.href;var after='',dash;if(dash=href.match(/\#(.*)$/)){href=href.replace(/\#(.*)$/,'');after=dash[0];}
592
+ if(href.match(/[?]/)){var re=/([?&]store=)[a-z0-9_]*/;if(href.match(re)){href=href.replace(re,'$1'+code);}else{href+='&store='+code;}
593
+ var re=/([?&]from_store=)[a-z0-9_]*/;if(href.match(re)){href=href.replace(re,'');}}else{href+='?store='+code;}
594
+ if(typeof(fromCode)!='undefined'){href+='&from_store='+fromCode;}
595
+ href+=after;setLocation(href);}
596
+ function decorateGeneric(elements,decorateParams)
597
+ {var allSupportedParams=['odd','even','first','last'];var _decorateParams={};var total=elements.length;if(total){if(typeof(decorateParams)=='undefined'){decorateParams=allSupportedParams;}
598
+ if(!decorateParams.length){return;}
599
+ for(var k in allSupportedParams){_decorateParams[allSupportedParams[k]]=false;}
600
+ for(var k in decorateParams){_decorateParams[decorateParams[k]]=true;}
601
+ if(_decorateParams.first){Element.addClassName(elements[0],'first');}
602
+ if(_decorateParams.last){Element.addClassName(elements[total-1],'last');}
603
+ for(var i=0;i<total;i++){if((i+1)%2==0){if(_decorateParams.even){Element.addClassName(elements[i],'even');}}
604
+ else{if(_decorateParams.odd){Element.addClassName(elements[i],'odd');}}}}}
605
+ function decorateTable(table,options){var table=$(table);if(table){var _options={'tbody':false,'tbody tr':['odd','even','first','last'],'thead tr':['first','last'],'tfoot tr':['first','last'],'tr td':['last']};if(typeof(options)!='undefined'){for(var k in options){_options[k]=options[k];}}
606
+ if(_options['tbody']){decorateGeneric(table.select('tbody'),_options['tbody']);}
607
+ if(_options['tbody tr']){decorateGeneric(table.select('tbody tr'),_options['tbody tr']);}
608
+ if(_options['thead tr']){decorateGeneric(table.select('thead tr'),_options['thead tr']);}
609
+ if(_options['tfoot tr']){decorateGeneric(table.select('tfoot tr'),_options['tfoot tr']);}
610
+ if(_options['tr td']){var allRows=table.select('tr');if(allRows.length){for(var i=0;i<allRows.length;i++){decorateGeneric(allRows[i].getElementsByTagName('TD'),_options['tr td']);}}}}}
611
+ function decorateList(list,nonRecursive){if($(list)){if(typeof(nonRecursive)=='undefined'){var items=$(list).select('li')}
612
+ else{var items=$(list).childElements();}
613
+ decorateGeneric(items,['odd','even','last']);}}
614
+ function decorateDataList(list){list=$(list);if(list){decorateGeneric(list.select('dt'),['odd','even','last']);decorateGeneric(list.select('dd'),['odd','even','last']);}}
615
+ function formatCurrency(price,format,showPlus){precision=isNaN(format.precision=Math.abs(format.precision))?2:format.precision;requiredPrecision=isNaN(format.requiredPrecision=Math.abs(format.requiredPrecision))?2:format.requiredPrecision;precision=requiredPrecision;integerRequired=isNaN(format.integerRequired=Math.abs(format.integerRequired))?1:format.integerRequired;decimalSymbol=format.decimalSymbol==undefined?",":format.decimalSymbol;groupSymbol=format.groupSymbol==undefined?".":format.groupSymbol;groupLength=format.groupLength==undefined?3:format.groupLength;if(showPlus==undefined||showPlus==true){s=price<0?"-":(showPlus?"+":"");}else if(showPlus==false){s='';}
616
+ i=parseInt(price=Math.abs(+price||0).toFixed(precision))+"";pad=(i.length<integerRequired)?(integerRequired-i.length):0;while(pad){i='0'+i;pad--;}
617
+ j=(j=i.length)>groupLength?j%groupLength:0;re=new RegExp("(\\d{"+groupLength+"})(?=\\d)","g");r=(j?i.substr(0,j)+groupSymbol:"")+i.substr(j).replace(re,"$1"+groupSymbol)+(precision?decimalSymbol+Math.abs(price-i).toFixed(precision).replace(/-/,0).slice(2):"")
618
+ if(format.pattern.indexOf('{sign}')==-1){pattern=s+format.pattern;}else{pattern=format.pattern.replace('{sign}',s);}
619
+ return pattern.replace('%s',r).replace(/^\s\s*/,'').replace(/\s\s*$/,'');};function expandDetails(el,childClass){if(Element.hasClassName(el,'show-details')){$$(childClass).each(function(item){item.hide()});Element.removeClassName(el,'show-details');}
620
+ else{$$(childClass).each(function(item){item.show()});Element.addClassName(el,'show-details');}}
621
+ var isIE=navigator.appVersion.match(/MSIE/)=="MSIE";if(!window.Varien)
622
+ var Varien=new Object();Varien.showLoading=function(){Element.show('loading-process');}
623
+ Varien.hideLoading=function(){Element.hide('loading-process');}
624
+ Varien.GlobalHandlers={onCreate:function(){Varien.showLoading();},onComplete:function(){if(Ajax.activeRequestCount==0){Varien.hideLoading();}}};Ajax.Responders.register(Varien.GlobalHandlers);Varien.searchForm=Class.create();Varien.searchForm.prototype={initialize:function(form,field,emptyText){this.form=$(form);this.field=$(field);this.emptyText=emptyText;Event.observe(this.form,'submit',this.submit.bind(this));Event.observe(this.field,'focus',this.focus.bind(this));Event.observe(this.field,'blur',this.blur.bind(this));this.blur();},submit:function(event){if(this.field.value==this.emptyText||this.field.value==''){Event.stop(event);return false;}
625
+ return true;},focus:function(event){if(this.field.value==this.emptyText){this.field.value='';}},blur:function(event){if(this.field.value==''){this.field.value=this.emptyText;}},initAutocomplete:function(url,destinationElement){new Ajax.Autocompleter(this.field,destinationElement,url,{paramName:this.field.name,minChars:2,updateElement:this._selectAutocompleteItem.bind(this),onShow:function(element,update){if(!update.style.position||update.style.position=='absolute'){update.style.position='absolute';Position.clone(element,update,{setHeight:false,offsetTop:element.offsetHeight});}
626
+ Effect.Appear(update,{duration:0});}});},_selectAutocompleteItem:function(element){if(element.title){this.field.value=element.title;}
627
+ this.form.submit();}}
628
+ Varien.Tabs=Class.create();Varien.Tabs.prototype={initialize:function(selector){var self=this;$$(selector+' a').each(this.initTab.bind(this));},initTab:function(el){el.href='javascript:void(0)';if($(el.parentNode).hasClassName('active')){this.showContent(el);}
629
+ el.observe('click',this.showContent.bind(this,el));},showContent:function(a){var li=$(a.parentNode),ul=$(li.parentNode);ul.getElementsBySelector('li','ol').each(function(el){var contents=$(el.id+'_contents');if(el==li){el.addClassName('active');contents.show();}else{el.removeClassName('active');contents.hide();}});}}
630
+ Varien.DOB=Class.create();Varien.DOB.prototype={initialize:function(selector,required,format){var el=$$(selector)[0];this.day=Element.select($(el),'.dob-day input')[0];this.month=Element.select($(el),'.dob-month input')[0];this.year=Element.select($(el),'.dob-year input')[0];this.dob=Element.select($(el),'.dob-full input')[0];this.advice=Element.select($(el),'.validation-advice')[0];this.required=required;this.format=format;this.day.validate=this.validate.bind(this);this.month.validate=this.validate.bind(this);this.year.validate=this.validate.bind(this);this.advice.hide();},validate:function(){var error=false;if(this.day.value==''&&this.month.value==''&&this.year.value==''){if(this.required){error='This date is a required value.';}else{this.dob.value='';}}else if(this.day.value==''||this.month.value==''||this.year.value==''){error='Please enter a valid full date.';}else{var date=new Date();if(this.day.value<1||this.day.value>31){error='Please enter a valid day (1-31).';}else if(this.month.value<1||this.month.value>12){error='Please enter a valid month (1-12).';}else if(this.year.value<1900||this.year.value>date.getFullYear()){error='Please enter a valid year (1900-'+date.getFullYear()+').';}else{this.dob.value=this.format.replace(/(%m|%b)/i,this.month.value).replace(/(%d|%e)/i,this.day.value).replace(/%y/i,this.year.value);var testDOB=this.month.value+'/'+this.day.value+'/'+this.year.value;var test=new Date(testDOB);if(isNaN(test)){error='Please enter a valid date.';}}}
631
+ if(error!==false){try{this.advice.innerHTML=Translator.translate(error);}
632
+ catch(e){this.advice.innerHTML=error;}
633
+ this.advice.show();return false;}
634
+ this.advice.hide();return true;}}
635
+ Validation.addAllThese([['validate-custom',' ',function(v,elm){return elm.validate();}]]);function truncateOptions(){$$('.truncated').each(function(element){Event.observe(element,'mouseover',function(){if(element.down('div.truncated_full_value')){element.down('div.truncated_full_value').addClassName('show')}});Event.observe(element,'mouseout',function(){if(element.down('div.truncated_full_value')){element.down('div.truncated_full_value').removeClassName('show')}});});}
636
+ Event.observe(window,'load',function(){truncateOptions();});;VarienForm=Class.create();VarienForm.prototype={initialize:function(formId,firstFieldFocus){this.form=$(formId);if(!this.form){return;}
637
+ this.cache=$A();this.currLoader=false;this.currDataIndex=false;this.validator=new Validation(this.form);this.elementFocus=this.elementOnFocus.bindAsEventListener(this);this.elementBlur=this.elementOnBlur.bindAsEventListener(this);this.childLoader=this.onChangeChildLoad.bindAsEventListener(this);this.highlightClass='highlight';this.extraChildParams='';this.firstFieldFocus=firstFieldFocus||false;this.bindElements();if(this.firstFieldFocus){try{Form.Element.focus(Form.findFirstElement(this.form))}
638
+ catch(e){}}},submit:function(url){if(this.validator&&this.validator.validate()){this.form.submit();}
639
+ return false;},bindElements:function(){var elements=Form.getElements(this.form);for(var row in elements){if(elements[row].id){Event.observe(elements[row],'focus',this.elementFocus);Event.observe(elements[row],'blur',this.elementBlur);}}},elementOnFocus:function(event){var element=Event.findElement(event,'fieldset');if(element){Element.addClassName(element,this.highlightClass);}},elementOnBlur:function(event){var element=Event.findElement(event,'fieldset');if(element){Element.removeClassName(element,this.highlightClass);}},setElementsRelation:function(parent,child,dataUrl,first){if(parent=$(parent)){if(!this.cache[parent.id]){this.cache[parent.id]=$A();this.cache[parent.id]['child']=child;this.cache[parent.id]['dataUrl']=dataUrl;this.cache[parent.id]['data']=$A();this.cache[parent.id]['first']=first||false;}
640
+ Event.observe(parent,'change',this.childLoader);}},onChangeChildLoad:function(event){element=Event.element(event);this.elementChildLoad(element);},elementChildLoad:function(element,callback){this.callback=callback||false;if(element.value){this.currLoader=element.id;this.currDataIndex=element.value;if(this.cache[element.id]['data'][element.value]){this.setDataToChild(this.cache[element.id]['data'][element.value]);}
641
+ else{new Ajax.Request(this.cache[this.currLoader]['dataUrl'],{method:'post',parameters:{"parent":element.value},onComplete:this.reloadChildren.bind(this)});}}},reloadChildren:function(transport){var data=eval('('+transport.responseText+')');this.cache[this.currLoader]['data'][this.currDataIndex]=data;this.setDataToChild(data);},setDataToChild:function(data){if(data.length){var child=$(this.cache[this.currLoader]['child']);if(child){var html='<select name="'+child.name+'" id="'+child.id+'" class="'+child.className+'" title="'+child.title+'" '+this.extraChildParams+'>';if(this.cache[this.currLoader]['first']){html+='<option value="">'+this.cache[this.currLoader]['first']+'</option>';}
642
+ for(var i in data){if(data[i].value){html+='<option value="'+data[i].value+'"';if(child.value&&(child.value==data[i].value||child.value==data[i].label)){html+=' selected';}
643
+ html+='>'+data[i].label+'</option>';}}
644
+ html+='</select>';Element.insert(child,{before:html});Element.remove(child);}}
645
+ else{var child=$(this.cache[this.currLoader]['child']);if(child){var html='<input type="text" name="'+child.name+'" id="'+child.id+'" class="'+child.className+'" title="'+child.title+'" '+this.extraChildParams+'>';Element.insert(child,{before:html});Element.remove(child);}}
646
+ this.bindElements();if(this.callback){this.callback();}}}
647
+ RegionUpdater=Class.create();RegionUpdater.prototype={initialize:function(countryEl,regionTextEl,regionSelectEl,regions,disableAction)
648
+ {this.countryEl=$(countryEl);this.regionTextEl=$(regionTextEl);this.regionSelectEl=$(regionSelectEl);this.regions=regions;this.disableAction=(typeof disableAction=='undefined')?'hide':disableAction;if(this.regionSelectEl.options.length<=1){this.update();}
649
+ Event.observe(this.countryEl,'change',this.update.bind(this));},update:function()
650
+ {if(this.regions[this.countryEl.value]){var i,option,region,def;if(this.regionTextEl){def=this.regionTextEl.value.toLowerCase();this.regionTextEl.value='';}
651
+ if(!def){def=this.regionSelectEl.getAttribute('defaultValue');}
652
+ this.regionSelectEl.options.length=1;for(regionId in this.regions[this.countryEl.value]){region=this.regions[this.countryEl.value][regionId];option=document.createElement('OPTION');option.value=regionId;option.text=region.name;if(this.regionSelectEl.options.add){this.regionSelectEl.options.add(option);}else{this.regionSelectEl.appendChild(option);}
653
+ if(regionId==def||region.name.toLowerCase()==def||region.code.toLowerCase()==def){this.regionSelectEl.value=regionId;}}
654
+ if(this.disableAction=='hide'){if(this.regionTextEl){this.regionTextEl.style.display='none';}
655
+ this.regionSelectEl.style.display='';}else if(this.disableAction=='disable'){if(this.regionTextEl){this.regionTextEl.disabled=true;}
656
+ this.regionSelectEl.disabled=false;}
657
+ this.setMarkDisplay(this.regionSelectEl,true);}else{if(this.disableAction=='hide'){if(this.regionTextEl){this.regionTextEl.style.display='';}
658
+ this.regionSelectEl.style.display='none';Validation.reset(this.regionSelectEl);}else if(this.disableAction=='disable'){if(this.regionTextEl){this.regionTextEl.disabled=false;}
659
+ this.regionSelectEl.disabled=true;}else if(this.disableAction=='nullify'){this.regionSelectEl.options.length=1;this.regionSelectEl.value='';this.regionSelectEl.selectedIndex=0;this.lastCountryId='';}
660
+ this.setMarkDisplay(this.regionSelectEl,false);}},setMarkDisplay:function(elem,display){elem=$(elem);var labelElement=elem.up(1).down('label > span.required')||elem.up(2).down('label > span.required')||elem.up(1).down('label.required > em')||elem.up(2).down('label.required > em');if(labelElement){display?labelElement.show():labelElement.hide();}}};function toggleMenu(el,over)
661
+ {if(over){Element.addClassName(el,'over');}
662
+ else{Element.removeClassName(el,'over');}};var Translate=Class.create();Translate.prototype={initialize:function(data){this.data=$H(data);},translate:function(){var args=arguments;var text=arguments[0];if(this.data.get(text)){return this.data.get(text);}
663
+ return text;},add:function(){if(arguments.length>1){this.data.set(arguments[0],arguments[1]);}else if(typeof arguments[0]=='object'){$H(arguments[0]).each(function(pair){this.data.set(pair.key,pair.value);}.bind(this));}}};if(!window.Mage)var Mage={};Mage.Cookies={};Mage.Cookies.set=function(name,value){var argv=arguments;var argc=arguments.length;var expires=(argc>2)?argv[2]:null;var path=(argc>3)?argv[3]:'/';var domain=(argc>4)?argv[4]:null;var secure=(argc>5)?argv[5]:false;document.cookie=name+"="+escape(value)+
664
+ ((expires==null)?"":("; expires="+expires.toGMTString()))+
665
+ ((path==null)?"":("; path="+path))+
666
+ ((domain==null)?"":("; domain="+domain))+
667
+ ((secure==true)?"; secure":"");};Mage.Cookies.get=function(name){var arg=name+"=";var alen=arg.length;var clen=document.cookie.length;var i=0;var j=0;while(i<clen){j=i+alen;if(document.cookie.substring(i,j)==arg)
668
+ return Mage.Cookies.getCookieVal(j);i=document.cookie.indexOf(" ",i)+1;if(i==0)
669
+ break;}
670
+ return null;};Mage.Cookies.clear=function(name){if(Mage.Cookies.get(name)){document.cookie=name+"="+"; expires=Thu, 01-Jan-70 00:00:01 GMT";}};Mage.Cookies.getCookieVal=function(offset){var endstr=document.cookie.indexOf(";",offset);if(endstr==-1){endstr=document.cookie.length;}
671
+ return unescape(document.cookie.substring(offset,endstr));};;function taxToggle(details,switcher,expandedClassName)
672
+ {if($(details).style.display=='none'){$(details).show();$(switcher).addClassName(expandedClassName);}else{$(details).hide();$(switcher).removeClassName(expandedClassName);}}
var/minifycache/minify_900559c432c691b50ba33f48b4909a4f.gz ADDED
Binary file
var/minifycache/minify_95afbee78c0f49b564250d655add1ca9 ADDED
@@ -0,0 +1,655 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ var Prototype={Version:'1.6.0.3',Browser:{IE:!!(window.attachEvent&&navigator.userAgent.indexOf('Opera')===-1),Opera:navigator.userAgent.indexOf('Opera')>-1,WebKit:navigator.userAgent.indexOf('AppleWebKit/')>-1,Gecko:navigator.userAgent.indexOf('Gecko')>-1&&navigator.userAgent.indexOf('KHTML')===-1,MobileSafari:!!navigator.userAgent.match(/Apple.*Mobile.*Safari/)},BrowserFeatures:{XPath:!!document.evaluate,SelectorsAPI:!!document.querySelector,ElementExtensions:!!window.HTMLElement,SpecificElementExtensions:document.createElement('div')['__proto__']&&document.createElement('div')['__proto__']!==document.createElement('form')['__proto__']},ScriptFragment:'<script[^>]*>([\\S\\s]*?)<\/script>',JSONFilter:/^\/\*-secure-([\s\S]*)\*\/\s*$/,emptyFunction:function(){},K:function(x){return x}};if(Prototype.Browser.MobileSafari)
2
+ Prototype.BrowserFeatures.SpecificElementExtensions=false;var Class={create:function(){var parent=null,properties=$A(arguments);if(Object.isFunction(properties[0]))
3
+ parent=properties.shift();function klass(){this.initialize.apply(this,arguments);}
4
+ Object.extend(klass,Class.Methods);klass.superclass=parent;klass.subclasses=[];if(parent){var subclass=function(){};subclass.prototype=parent.prototype;klass.prototype=new subclass;parent.subclasses.push(klass);}
5
+ for(var i=0;i<properties.length;i++)
6
+ klass.addMethods(properties[i]);if(!klass.prototype.initialize)
7
+ klass.prototype.initialize=Prototype.emptyFunction;klass.prototype.constructor=klass;return klass;}};Class.Methods={addMethods:function(source){var ancestor=this.superclass&&this.superclass.prototype;var properties=Object.keys(source);if(!Object.keys({toString:true}).length)
8
+ properties.push("toString","valueOf");for(var i=0,length=properties.length;i<length;i++){var property=properties[i],value=source[property];if(ancestor&&Object.isFunction(value)&&value.argumentNames().first()=="$super"){var method=value;value=(function(m){return function(){return ancestor[m].apply(this,arguments)};})(property).wrap(method);value.valueOf=method.valueOf.bind(method);value.toString=method.toString.bind(method);}
9
+ this.prototype[property]=value;}
10
+ return this;}};var Abstract={};Object.extend=function(destination,source){for(var property in source)
11
+ destination[property]=source[property];return destination;};Object.extend(Object,{inspect:function(object){try{if(Object.isUndefined(object))return'undefined';if(object===null)return'null';return object.inspect?object.inspect():String(object);}catch(e){if(e instanceof RangeError)return'...';throw e;}},toJSON:function(object){var type=typeof object;switch(type){case'undefined':case'function':case'unknown':return;case'boolean':return object.toString();}
12
+ if(object===null)return'null';if(object.toJSON)return object.toJSON();if(Object.isElement(object))return;var results=[];for(var property in object){var value=Object.toJSON(object[property]);if(!Object.isUndefined(value))
13
+ results.push(property.toJSON()+': '+value);}
14
+ return'{'+results.join(', ')+'}';},toQueryString:function(object){return $H(object).toQueryString();},toHTML:function(object){return object&&object.toHTML?object.toHTML():String.interpret(object);},keys:function(object){var keys=[];for(var property in object)
15
+ keys.push(property);return keys;},values:function(object){var values=[];for(var property in object)
16
+ values.push(object[property]);return values;},clone:function(object){return Object.extend({},object);},isElement:function(object){return!!(object&&object.nodeType==1);},isArray:function(object){return object!=null&&typeof object=="object"&&'splice'in object&&'join'in object;},isHash:function(object){return object instanceof Hash;},isFunction:function(object){return typeof object=="function";},isString:function(object){return typeof object=="string";},isNumber:function(object){return typeof object=="number";},isUndefined:function(object){return typeof object=="undefined";}});Object.extend(Function.prototype,{argumentNames:function(){var names=this.toString().match(/^[\s\(]*function[^(]*\(([^\)]*)\)/)[1].replace(/\s+/g,'').split(',');return names.length==1&&!names[0]?[]:names;},bind:function(){if(arguments.length<2&&Object.isUndefined(arguments[0]))return this;var __method=this,args=$A(arguments),object=args.shift();return function(){return __method.apply(object,args.concat($A(arguments)));}},bindAsEventListener:function(){var __method=this,args=$A(arguments),object=args.shift();return function(event){return __method.apply(object,[event||window.event].concat(args));}},curry:function(){if(!arguments.length)return this;var __method=this,args=$A(arguments);return function(){return __method.apply(this,args.concat($A(arguments)));}},delay:function(){var __method=this,args=$A(arguments),timeout=args.shift()*1000;return window.setTimeout(function(){return __method.apply(__method,args);},timeout);},defer:function(){var args=[0.01].concat($A(arguments));return this.delay.apply(this,args);},wrap:function(wrapper){var __method=this;return function(){return wrapper.apply(this,[__method.bind(this)].concat($A(arguments)));}},methodize:function(){if(this._methodized)return this._methodized;var __method=this;return this._methodized=function(){return __method.apply(null,[this].concat($A(arguments)));};}});Date.prototype.toJSON=function(){return'"'+this.getUTCFullYear()+'-'+
17
+ (this.getUTCMonth()+1).toPaddedString(2)+'-'+
18
+ this.getUTCDate().toPaddedString(2)+'T'+
19
+ this.getUTCHours().toPaddedString(2)+':'+
20
+ this.getUTCMinutes().toPaddedString(2)+':'+
21
+ this.getUTCSeconds().toPaddedString(2)+'Z"';};var Try={these:function(){var returnValue;for(var i=0,length=arguments.length;i<length;i++){var lambda=arguments[i];try{returnValue=lambda();break;}catch(e){}}
22
+ return returnValue;}};RegExp.prototype.match=RegExp.prototype.test;RegExp.escape=function(str){return String(str).replace(/([.*+?^=!:${}()|[\]\/\\])/g,'\\$1');};var PeriodicalExecuter=Class.create({initialize:function(callback,frequency){this.callback=callback;this.frequency=frequency;this.currentlyExecuting=false;this.registerCallback();},registerCallback:function(){this.timer=setInterval(this.onTimerEvent.bind(this),this.frequency*1000);},execute:function(){this.callback(this);},stop:function(){if(!this.timer)return;clearInterval(this.timer);this.timer=null;},onTimerEvent:function(){if(!this.currentlyExecuting){try{this.currentlyExecuting=true;this.execute();}finally{this.currentlyExecuting=false;}}}});Object.extend(String,{interpret:function(value){return value==null?'':String(value);},specialChar:{'\b':'\\b','\t':'\\t','\n':'\\n','\f':'\\f','\r':'\\r','\\':'\\\\'}});Object.extend(String.prototype,{gsub:function(pattern,replacement){var result='',source=this,match;replacement=arguments.callee.prepareReplacement(replacement);while(source.length>0){if(match=source.match(pattern)){result+=source.slice(0,match.index);result+=String.interpret(replacement(match));source=source.slice(match.index+match[0].length);}else{result+=source,source='';}}
23
+ return result;},sub:function(pattern,replacement,count){replacement=this.gsub.prepareReplacement(replacement);count=Object.isUndefined(count)?1:count;return this.gsub(pattern,function(match){if(--count<0)return match[0];return replacement(match);});},scan:function(pattern,iterator){this.gsub(pattern,iterator);return String(this);},truncate:function(length,truncation){length=length||30;truncation=Object.isUndefined(truncation)?'...':truncation;return this.length>length?this.slice(0,length-truncation.length)+truncation:String(this);},strip:function(){return this.replace(/^\s+/,'').replace(/\s+$/,'');},stripTags:function(){return this.replace(/<\/?[^>]+>/gi,'');},stripScripts:function(){return this.replace(new RegExp(Prototype.ScriptFragment,'img'),'');},extractScripts:function(){var matchAll=new RegExp(Prototype.ScriptFragment,'img');var matchOne=new RegExp(Prototype.ScriptFragment,'im');return(this.match(matchAll)||[]).map(function(scriptTag){return(scriptTag.match(matchOne)||['',''])[1];});},evalScripts:function(){return this.extractScripts().map(function(script){return eval(script)});},escapeHTML:function(){var self=arguments.callee;self.text.data=this;return self.div.innerHTML;},unescapeHTML:function(){var div=new Element('div');div.innerHTML=this.stripTags();return div.childNodes[0]?(div.childNodes.length>1?$A(div.childNodes).inject('',function(memo,node){return memo+node.nodeValue}):div.childNodes[0].nodeValue):'';},toQueryParams:function(separator){var match=this.strip().match(/([^?#]*)(#.*)?$/);if(!match)return{};return match[1].split(separator||'&').inject({},function(hash,pair){if((pair=pair.split('='))[0]){var key=decodeURIComponent(pair.shift());var value=pair.length>1?pair.join('='):pair[0];if(value!=undefined)value=decodeURIComponent(value);if(key in hash){if(!Object.isArray(hash[key]))hash[key]=[hash[key]];hash[key].push(value);}
24
+ else hash[key]=value;}
25
+ return hash;});},toArray:function(){return this.split('');},succ:function(){return this.slice(0,this.length-1)+
26
+ String.fromCharCode(this.charCodeAt(this.length-1)+1);},times:function(count){return count<1?'':new Array(count+1).join(this);},camelize:function(){var parts=this.split('-'),len=parts.length;if(len==1)return parts[0];var camelized=this.charAt(0)=='-'?parts[0].charAt(0).toUpperCase()+parts[0].substring(1):parts[0];for(var i=1;i<len;i++)
27
+ camelized+=parts[i].charAt(0).toUpperCase()+parts[i].substring(1);return camelized;},capitalize:function(){return this.charAt(0).toUpperCase()+this.substring(1).toLowerCase();},underscore:function(){return this.gsub(/::/,'/').gsub(/([A-Z]+)([A-Z][a-z])/,'#{1}_#{2}').gsub(/([a-z\d])([A-Z])/,'#{1}_#{2}').gsub(/-/,'_').toLowerCase();},dasherize:function(){return this.gsub(/_/,'-');},inspect:function(useDoubleQuotes){var escapedString=this.gsub(/[\x00-\x1f\\]/,function(match){var character=String.specialChar[match[0]];return character?character:'\\u00'+match[0].charCodeAt().toPaddedString(2,16);});if(useDoubleQuotes)return'"'+escapedString.replace(/"/g,'\\"')+'"';return"'"+escapedString.replace(/'/g,'\\\'')+"'";},toJSON:function(){return this.inspect(true);},unfilterJSON:function(filter){return this.sub(filter||Prototype.JSONFilter,'#{1}');},isJSON:function(){var str=this;if(str.blank())return false;str=this.replace(/\\./g,'@').replace(/"[^"\\\n\r]*"/g,'');return(/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(str);},evalJSON:function(sanitize){var json=this.unfilterJSON();try{if(!sanitize||json.isJSON())return eval('('+json+')');}catch(e){}
28
+ throw new SyntaxError('Badly formed JSON string: '+this.inspect());},include:function(pattern){return this.indexOf(pattern)>-1;},startsWith:function(pattern){return this.indexOf(pattern)===0;},endsWith:function(pattern){var d=this.length-pattern.length;return d>=0&&this.lastIndexOf(pattern)===d;},empty:function(){return this=='';},blank:function(){return /^\s*$/.test(this);},interpolate:function(object,pattern){return new Template(this,pattern).evaluate(object);}});if(Prototype.Browser.WebKit||Prototype.Browser.IE)Object.extend(String.prototype,{escapeHTML:function(){return this.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');},unescapeHTML:function(){return this.stripTags().replace(/&amp;/g,'&').replace(/&lt;/g,'<').replace(/&gt;/g,'>');}});String.prototype.gsub.prepareReplacement=function(replacement){if(Object.isFunction(replacement))return replacement;var template=new Template(replacement);return function(match){return template.evaluate(match)};};String.prototype.parseQuery=String.prototype.toQueryParams;Object.extend(String.prototype.escapeHTML,{div:document.createElement('div'),text:document.createTextNode('')});String.prototype.escapeHTML.div.appendChild(String.prototype.escapeHTML.text);var Template=Class.create({initialize:function(template,pattern){this.template=template.toString();this.pattern=pattern||Template.Pattern;},evaluate:function(object){if(Object.isFunction(object.toTemplateReplacements))
29
+ object=object.toTemplateReplacements();return this.template.gsub(this.pattern,function(match){if(object==null)return'';var before=match[1]||'';if(before=='\\')return match[2];var ctx=object,expr=match[3];var pattern=/^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/;match=pattern.exec(expr);if(match==null)return before;while(match!=null){var comp=match[1].startsWith('[')?match[2].gsub('\\\\]',']'):match[1];ctx=ctx[comp];if(null==ctx||''==match[3])break;expr=expr.substring('['==match[3]?match[1].length:match[0].length);match=pattern.exec(expr);}
30
+ return before+String.interpret(ctx);});}});Template.Pattern=/(^|.|\r|\n)(#\{(.*?)\})/;var $break={};var Enumerable={each:function(iterator,context){var index=0;try{this._each(function(value){iterator.call(context,value,index++);});}catch(e){if(e!=$break)throw e;}
31
+ return this;},eachSlice:function(number,iterator,context){var index=-number,slices=[],array=this.toArray();if(number<1)return array;while((index+=number)<array.length)
32
+ slices.push(array.slice(index,index+number));return slices.collect(iterator,context);},all:function(iterator,context){iterator=iterator||Prototype.K;var result=true;this.each(function(value,index){result=result&&!!iterator.call(context,value,index);if(!result)throw $break;});return result;},any:function(iterator,context){iterator=iterator||Prototype.K;var result=false;this.each(function(value,index){if(result=!!iterator.call(context,value,index))
33
+ throw $break;});return result;},collect:function(iterator,context){iterator=iterator||Prototype.K;var results=[];this.each(function(value,index){results.push(iterator.call(context,value,index));});return results;},detect:function(iterator,context){var result;this.each(function(value,index){if(iterator.call(context,value,index)){result=value;throw $break;}});return result;},findAll:function(iterator,context){var results=[];this.each(function(value,index){if(iterator.call(context,value,index))
34
+ results.push(value);});return results;},grep:function(filter,iterator,context){iterator=iterator||Prototype.K;var results=[];if(Object.isString(filter))
35
+ filter=new RegExp(filter);this.each(function(value,index){if(filter.match(value))
36
+ results.push(iterator.call(context,value,index));});return results;},include:function(object){if(Object.isFunction(this.indexOf))
37
+ if(this.indexOf(object)!=-1)return true;var found=false;this.each(function(value){if(value==object){found=true;throw $break;}});return found;},inGroupsOf:function(number,fillWith){fillWith=Object.isUndefined(fillWith)?null:fillWith;return this.eachSlice(number,function(slice){while(slice.length<number)slice.push(fillWith);return slice;});},inject:function(memo,iterator,context){this.each(function(value,index){memo=iterator.call(context,memo,value,index);});return memo;},invoke:function(method){var args=$A(arguments).slice(1);return this.map(function(value){return value[method].apply(value,args);});},max:function(iterator,context){iterator=iterator||Prototype.K;var result;this.each(function(value,index){value=iterator.call(context,value,index);if(result==null||value>=result)
38
+ result=value;});return result;},min:function(iterator,context){iterator=iterator||Prototype.K;var result;this.each(function(value,index){value=iterator.call(context,value,index);if(result==null||value<result)
39
+ result=value;});return result;},partition:function(iterator,context){iterator=iterator||Prototype.K;var trues=[],falses=[];this.each(function(value,index){(iterator.call(context,value,index)?trues:falses).push(value);});return[trues,falses];},pluck:function(property){var results=[];this.each(function(value){results.push(value[property]);});return results;},reject:function(iterator,context){var results=[];this.each(function(value,index){if(!iterator.call(context,value,index))
40
+ results.push(value);});return results;},sortBy:function(iterator,context){return this.map(function(value,index){return{value:value,criteria:iterator.call(context,value,index)};}).sort(function(left,right){var a=left.criteria,b=right.criteria;return a<b?-1:a>b?1:0;}).pluck('value');},toArray:function(){return this.map();},zip:function(){var iterator=Prototype.K,args=$A(arguments);if(Object.isFunction(args.last()))
41
+ iterator=args.pop();var collections=[this].concat(args).map($A);return this.map(function(value,index){return iterator(collections.pluck(index));});},size:function(){return this.toArray().length;},inspect:function(){return'#<Enumerable:'+this.toArray().inspect()+'>';}};Object.extend(Enumerable,{map:Enumerable.collect,find:Enumerable.detect,select:Enumerable.findAll,filter:Enumerable.findAll,member:Enumerable.include,entries:Enumerable.toArray,every:Enumerable.all,some:Enumerable.any});function $A(iterable){if(!iterable)return[];if(iterable.toArray)return iterable.toArray();var length=iterable.length||0,results=new Array(length);while(length--)results[length]=iterable[length];return results;}
42
+ if(Prototype.Browser.WebKit){$A=function(iterable){if(!iterable)return[];if(!(typeof iterable==='function'&&typeof iterable.length==='number'&&typeof iterable.item==='function')&&iterable.toArray)
43
+ return iterable.toArray();var length=iterable.length||0,results=new Array(length);while(length--)results[length]=iterable[length];return results;};}
44
+ Array.from=$A;Object.extend(Array.prototype,Enumerable);if(!Array.prototype._reverse)Array.prototype._reverse=Array.prototype.reverse;Object.extend(Array.prototype,{_each:function(iterator){for(var i=0,length=this.length;i<length;i++)
45
+ iterator(this[i]);},clear:function(){this.length=0;return this;},first:function(){return this[0];},last:function(){return this[this.length-1];},compact:function(){return this.select(function(value){return value!=null;});},flatten:function(){return this.inject([],function(array,value){return array.concat(Object.isArray(value)?value.flatten():[value]);});},without:function(){var values=$A(arguments);return this.select(function(value){return!values.include(value);});},reverse:function(inline){return(inline!==false?this:this.toArray())._reverse();},reduce:function(){return this.length>1?this:this[0];},uniq:function(sorted){return this.inject([],function(array,value,index){if(0==index||(sorted?array.last()!=value:!array.include(value)))
46
+ array.push(value);return array;});},intersect:function(array){return this.uniq().findAll(function(item){return array.detect(function(value){return item===value});});},clone:function(){return[].concat(this);},size:function(){return this.length;},inspect:function(){return'['+this.map(Object.inspect).join(', ')+']';},toJSON:function(){var results=[];this.each(function(object){var value=Object.toJSON(object);if(!Object.isUndefined(value))results.push(value);});return'['+results.join(', ')+']';}});if(Object.isFunction(Array.prototype.forEach))
47
+ Array.prototype._each=Array.prototype.forEach;if(!Array.prototype.indexOf)Array.prototype.indexOf=function(item,i){i||(i=0);var length=this.length;if(i<0)i=length+i;for(;i<length;i++)
48
+ if(this[i]===item)return i;return-1;};if(!Array.prototype.lastIndexOf)Array.prototype.lastIndexOf=function(item,i){i=isNaN(i)?this.length:(i<0?this.length+i:i)+1;var n=this.slice(0,i).reverse().indexOf(item);return(n<0)?n:i-n-1;};Array.prototype.toArray=Array.prototype.clone;function $w(string){if(!Object.isString(string))return[];string=string.strip();return string?string.split(/\s+/):[];}
49
+ if(Prototype.Browser.Opera){Array.prototype.concat=function(){var array=[];for(var i=0,length=this.length;i<length;i++)array.push(this[i]);for(var i=0,length=arguments.length;i<length;i++){if(Object.isArray(arguments[i])){for(var j=0,arrayLength=arguments[i].length;j<arrayLength;j++)
50
+ array.push(arguments[i][j]);}else{array.push(arguments[i]);}}
51
+ return array;};}
52
+ Object.extend(Number.prototype,{toColorPart:function(){return this.toPaddedString(2,16);},succ:function(){return this+1;},times:function(iterator,context){$R(0,this,true).each(iterator,context);return this;},toPaddedString:function(length,radix){var string=this.toString(radix||10);return'0'.times(length-string.length)+string;},toJSON:function(){return isFinite(this)?this.toString():'null';}});$w('abs round ceil floor').each(function(method){Number.prototype[method]=Math[method].methodize();});function $H(object){return new Hash(object);};var Hash=Class.create(Enumerable,(function(){function toQueryPair(key,value){if(Object.isUndefined(value))return key;return key+'='+encodeURIComponent(String.interpret(value));}
53
+ return{initialize:function(object){this._object=Object.isHash(object)?object.toObject():Object.clone(object);},_each:function(iterator){for(var key in this._object){var value=this._object[key],pair=[key,value];pair.key=key;pair.value=value;iterator(pair);}},set:function(key,value){return this._object[key]=value;},get:function(key){if(this._object[key]!==Object.prototype[key])
54
+ return this._object[key];},unset:function(key){var value=this._object[key];delete this._object[key];return value;},toObject:function(){return Object.clone(this._object);},keys:function(){return this.pluck('key');},values:function(){return this.pluck('value');},index:function(value){var match=this.detect(function(pair){return pair.value===value;});return match&&match.key;},merge:function(object){return this.clone().update(object);},update:function(object){return new Hash(object).inject(this,function(result,pair){result.set(pair.key,pair.value);return result;});},toQueryString:function(){return this.inject([],function(results,pair){var key=encodeURIComponent(pair.key),values=pair.value;if(values&&typeof values=='object'){if(Object.isArray(values))
55
+ return results.concat(values.map(toQueryPair.curry(key)));}else results.push(toQueryPair(key,values));return results;}).join('&');},inspect:function(){return'#<Hash:{'+this.map(function(pair){return pair.map(Object.inspect).join(': ');}).join(', ')+'}>';},toJSON:function(){return Object.toJSON(this.toObject());},clone:function(){return new Hash(this);}}})());Hash.prototype.toTemplateReplacements=Hash.prototype.toObject;Hash.from=$H;var ObjectRange=Class.create(Enumerable,{initialize:function(start,end,exclusive){this.start=start;this.end=end;this.exclusive=exclusive;},_each:function(iterator){var value=this.start;while(this.include(value)){iterator(value);value=value.succ();}},include:function(value){if(value<this.start)
56
+ return false;if(this.exclusive)
57
+ return value<this.end;return value<=this.end;}});var $R=function(start,end,exclusive){return new ObjectRange(start,end,exclusive);};var Ajax={getTransport:function(){return Try.these(function(){return new XMLHttpRequest()},function(){return new ActiveXObject('Msxml2.XMLHTTP')},function(){return new ActiveXObject('Microsoft.XMLHTTP')})||false;},activeRequestCount:0};Ajax.Responders={responders:[],_each:function(iterator){this.responders._each(iterator);},register:function(responder){if(!this.include(responder))
58
+ this.responders.push(responder);},unregister:function(responder){this.responders=this.responders.without(responder);},dispatch:function(callback,request,transport,json){this.each(function(responder){if(Object.isFunction(responder[callback])){try{responder[callback].apply(responder,[request,transport,json]);}catch(e){}}});}};Object.extend(Ajax.Responders,Enumerable);Ajax.Responders.register({onCreate:function(){Ajax.activeRequestCount++},onComplete:function(){Ajax.activeRequestCount--}});Ajax.Base=Class.create({initialize:function(options){this.options={method:'post',asynchronous:true,contentType:'application/x-www-form-urlencoded',encoding:'UTF-8',parameters:'',evalJSON:true,evalJS:true};Object.extend(this.options,options||{});this.options.method=this.options.method.toLowerCase();if(Object.isString(this.options.parameters))
59
+ this.options.parameters=this.options.parameters.toQueryParams();else if(Object.isHash(this.options.parameters))
60
+ this.options.parameters=this.options.parameters.toObject();}});Ajax.Request=Class.create(Ajax.Base,{_complete:false,initialize:function($super,url,options){$super(options);this.transport=Ajax.getTransport();this.request(url);},request:function(url){this.url=url;this.method=this.options.method;var params=Object.clone(this.options.parameters);if(!['get','post'].include(this.method)){params['_method']=this.method;this.method='post';}
61
+ this.parameters=params;if(params=Object.toQueryString(params)){if(this.method=='get')
62
+ this.url+=(this.url.include('?')?'&':'?')+params;else if(/Konqueror|Safari|KHTML/.test(navigator.userAgent))
63
+ params+='&_=';}
64
+ try{var response=new Ajax.Response(this);if(this.options.onCreate)this.options.onCreate(response);Ajax.Responders.dispatch('onCreate',this,response);this.transport.open(this.method.toUpperCase(),this.url,this.options.asynchronous);if(this.options.asynchronous)this.respondToReadyState.bind(this).defer(1);this.transport.onreadystatechange=this.onStateChange.bind(this);this.setRequestHeaders();this.body=this.method=='post'?(this.options.postBody||params):null;this.transport.send(this.body);if(!this.options.asynchronous&&this.transport.overrideMimeType)
65
+ this.onStateChange();}
66
+ catch(e){this.dispatchException(e);}},onStateChange:function(){var readyState=this.transport.readyState;if(readyState>1&&!((readyState==4)&&this._complete))
67
+ this.respondToReadyState(this.transport.readyState);},setRequestHeaders:function(){var headers={'X-Requested-With':'XMLHttpRequest','X-Prototype-Version':Prototype.Version,'Accept':'text/javascript, text/html, application/xml, text/xml, */*'};if(this.method=='post'){headers['Content-type']=this.options.contentType+
68
+ (this.options.encoding?'; charset='+this.options.encoding:'');if(this.transport.overrideMimeType&&(navigator.userAgent.match(/Gecko\/(\d{4})/)||[0,2005])[1]<2005)
69
+ headers['Connection']='close';}
70
+ if(typeof this.options.requestHeaders=='object'){var extras=this.options.requestHeaders;if(Object.isFunction(extras.push))
71
+ for(var i=0,length=extras.length;i<length;i+=2)
72
+ headers[extras[i]]=extras[i+1];else
73
+ $H(extras).each(function(pair){headers[pair.key]=pair.value});}
74
+ for(var name in headers)
75
+ this.transport.setRequestHeader(name,headers[name]);},success:function(){var status=this.getStatus();return!status||(status>=200&&status<300);},getStatus:function(){try{return this.transport.status||0;}catch(e){return 0}},respondToReadyState:function(readyState){var state=Ajax.Request.Events[readyState],response=new Ajax.Response(this);if(state=='Complete'){try{this._complete=true;(this.options['on'+response.status]||this.options['on'+(this.success()?'Success':'Failure')]||Prototype.emptyFunction)(response,response.headerJSON);}catch(e){this.dispatchException(e);}
76
+ var contentType=response.getHeader('Content-type');if(this.options.evalJS=='force'||(this.options.evalJS&&this.isSameOrigin()&&contentType&&contentType.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i)))
77
+ this.evalResponse();}
78
+ try{(this.options['on'+state]||Prototype.emptyFunction)(response,response.headerJSON);Ajax.Responders.dispatch('on'+state,this,response,response.headerJSON);}catch(e){this.dispatchException(e);}
79
+ if(state=='Complete'){this.transport.onreadystatechange=Prototype.emptyFunction;}},isSameOrigin:function(){var m=this.url.match(/^\s*https?:\/\/[^\/]*/);return!m||(m[0]=='#{protocol}//#{domain}#{port}'.interpolate({protocol:location.protocol,domain:document.domain,port:location.port?':'+location.port:''}));},getHeader:function(name){try{return this.transport.getResponseHeader(name)||null;}catch(e){return null}},evalResponse:function(){try{return eval((this.transport.responseText||'').unfilterJSON());}catch(e){this.dispatchException(e);}},dispatchException:function(exception){(this.options.onException||Prototype.emptyFunction)(this,exception);Ajax.Responders.dispatch('onException',this,exception);}});Ajax.Request.Events=['Uninitialized','Loading','Loaded','Interactive','Complete'];Ajax.Response=Class.create({initialize:function(request){this.request=request;var transport=this.transport=request.transport,readyState=this.readyState=transport.readyState;if((readyState>2&&!Prototype.Browser.IE)||readyState==4){this.status=this.getStatus();this.statusText=this.getStatusText();this.responseText=String.interpret(transport.responseText);this.headerJSON=this._getHeaderJSON();}
80
+ if(readyState==4){var xml=transport.responseXML;this.responseXML=Object.isUndefined(xml)?null:xml;this.responseJSON=this._getResponseJSON();}},status:0,statusText:'',getStatus:Ajax.Request.prototype.getStatus,getStatusText:function(){try{return this.transport.statusText||'';}catch(e){return''}},getHeader:Ajax.Request.prototype.getHeader,getAllHeaders:function(){try{return this.getAllResponseHeaders();}catch(e){return null}},getResponseHeader:function(name){return this.transport.getResponseHeader(name);},getAllResponseHeaders:function(){return this.transport.getAllResponseHeaders();},_getHeaderJSON:function(){var json=this.getHeader('X-JSON');if(!json)return null;json=decodeURIComponent(escape(json));try{return json.evalJSON(this.request.options.sanitizeJSON||!this.request.isSameOrigin());}catch(e){this.request.dispatchException(e);}},_getResponseJSON:function(){var options=this.request.options;if(!options.evalJSON||(options.evalJSON!='force'&&!(this.getHeader('Content-type')||'').include('application/json'))||this.responseText.blank())
81
+ return null;try{return this.responseText.evalJSON(options.sanitizeJSON||!this.request.isSameOrigin());}catch(e){this.request.dispatchException(e);}}});Ajax.Updater=Class.create(Ajax.Request,{initialize:function($super,container,url,options){this.container={success:(container.success||container),failure:(container.failure||(container.success?null:container))};options=Object.clone(options);var onComplete=options.onComplete;options.onComplete=(function(response,json){this.updateContent(response.responseText);if(Object.isFunction(onComplete))onComplete(response,json);}).bind(this);$super(url,options);},updateContent:function(responseText){var receiver=this.container[this.success()?'success':'failure'],options=this.options;if(!options.evalScripts)responseText=responseText.stripScripts();if(receiver=$(receiver)){if(options.insertion){if(Object.isString(options.insertion)){var insertion={};insertion[options.insertion]=responseText;receiver.insert(insertion);}
82
+ else options.insertion(receiver,responseText);}
83
+ else receiver.update(responseText);}}});Ajax.PeriodicalUpdater=Class.create(Ajax.Base,{initialize:function($super,container,url,options){$super(options);this.onComplete=this.options.onComplete;this.frequency=(this.options.frequency||2);this.decay=(this.options.decay||1);this.updater={};this.container=container;this.url=url;this.start();},start:function(){this.options.onComplete=this.updateComplete.bind(this);this.onTimerEvent();},stop:function(){this.updater.options.onComplete=undefined;clearTimeout(this.timer);(this.onComplete||Prototype.emptyFunction).apply(this,arguments);},updateComplete:function(response){if(this.options.decay){this.decay=(response.responseText==this.lastText?this.decay*this.options.decay:1);this.lastText=response.responseText;}
84
+ this.timer=this.onTimerEvent.bind(this).delay(this.decay*this.frequency);},onTimerEvent:function(){this.updater=new Ajax.Updater(this.container,this.url,this.options);}});function $(element){if(arguments.length>1){for(var i=0,elements=[],length=arguments.length;i<length;i++)
85
+ elements.push($(arguments[i]));return elements;}
86
+ if(Object.isString(element))
87
+ element=document.getElementById(element);return Element.extend(element);}
88
+ if(Prototype.BrowserFeatures.XPath){document._getElementsByXPath=function(expression,parentElement){var results=[];var query=document.evaluate(expression,$(parentElement)||document,null,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null);for(var i=0,length=query.snapshotLength;i<length;i++)
89
+ results.push(Element.extend(query.snapshotItem(i)));return results;};}
90
+ if(!window.Node)var Node={};if(!Node.ELEMENT_NODE){Object.extend(Node,{ELEMENT_NODE:1,ATTRIBUTE_NODE:2,TEXT_NODE:3,CDATA_SECTION_NODE:4,ENTITY_REFERENCE_NODE:5,ENTITY_NODE:6,PROCESSING_INSTRUCTION_NODE:7,COMMENT_NODE:8,DOCUMENT_NODE:9,DOCUMENT_TYPE_NODE:10,DOCUMENT_FRAGMENT_NODE:11,NOTATION_NODE:12});}
91
+ (function(){var element=this.Element;this.Element=function(tagName,attributes){attributes=attributes||{};tagName=tagName.toLowerCase();var cache=Element.cache;if(Prototype.Browser.IE&&attributes.name){tagName='<'+tagName+' name="'+attributes.name+'">';delete attributes.name;return Element.writeAttribute(document.createElement(tagName),attributes);}
92
+ if(!cache[tagName])cache[tagName]=Element.extend(document.createElement(tagName));return Element.writeAttribute(cache[tagName].cloneNode(false),attributes);};Object.extend(this.Element,element||{});if(element)this.Element.prototype=element.prototype;}).call(window);Element.cache={};Element.Methods={visible:function(element){return $(element).style.display!='none';},toggle:function(element){element=$(element);Element[Element.visible(element)?'hide':'show'](element);return element;},hide:function(element){element=$(element);element.style.display='none';return element;},show:function(element){element=$(element);element.style.display='';return element;},remove:function(element){element=$(element);element.parentNode.removeChild(element);return element;},update:function(element,content){element=$(element);if(content&&content.toElement)content=content.toElement();if(Object.isElement(content))return element.update().insert(content);content=Object.toHTML(content);element.innerHTML=content.stripScripts();content.evalScripts.bind(content).defer();return element;},replace:function(element,content){element=$(element);if(content&&content.toElement)content=content.toElement();else if(!Object.isElement(content)){content=Object.toHTML(content);var range=element.ownerDocument.createRange();range.selectNode(element);content.evalScripts.bind(content).defer();content=range.createContextualFragment(content.stripScripts());}
93
+ element.parentNode.replaceChild(content,element);return element;},insert:function(element,insertions){element=$(element);if(Object.isString(insertions)||Object.isNumber(insertions)||Object.isElement(insertions)||(insertions&&(insertions.toElement||insertions.toHTML)))
94
+ insertions={bottom:insertions};var content,insert,tagName,childNodes;for(var position in insertions){content=insertions[position];position=position.toLowerCase();insert=Element._insertionTranslations[position];if(content&&content.toElement)content=content.toElement();if(Object.isElement(content)){insert(element,content);continue;}
95
+ content=Object.toHTML(content);tagName=((position=='before'||position=='after')?element.parentNode:element).tagName.toUpperCase();childNodes=Element._getContentFromAnonymousElement(tagName,content.stripScripts());if(position=='top'||position=='after')childNodes.reverse();childNodes.each(insert.curry(element));content.evalScripts.bind(content).defer();}
96
+ return element;},wrap:function(element,wrapper,attributes){element=$(element);if(Object.isElement(wrapper))
97
+ $(wrapper).writeAttribute(attributes||{});else if(Object.isString(wrapper))wrapper=new Element(wrapper,attributes);else wrapper=new Element('div',wrapper);if(element.parentNode)
98
+ element.parentNode.replaceChild(wrapper,element);wrapper.appendChild(element);return wrapper;},inspect:function(element){element=$(element);var result='<'+element.tagName.toLowerCase();$H({'id':'id','className':'class'}).each(function(pair){var property=pair.first(),attribute=pair.last();var value=(element[property]||'').toString();if(value)result+=' '+attribute+'='+value.inspect(true);});return result+'>';},recursivelyCollect:function(element,property){element=$(element);var elements=[];while(element=element[property])
99
+ if(element.nodeType==1)
100
+ elements.push(Element.extend(element));return elements;},ancestors:function(element){return $(element).recursivelyCollect('parentNode');},descendants:function(element){return $(element).select("*");},firstDescendant:function(element){element=$(element).firstChild;while(element&&element.nodeType!=1)element=element.nextSibling;return $(element);},immediateDescendants:function(element){if(!(element=$(element).firstChild))return[];while(element&&element.nodeType!=1)element=element.nextSibling;if(element)return[element].concat($(element).nextSiblings());return[];},previousSiblings:function(element){return $(element).recursivelyCollect('previousSibling');},nextSiblings:function(element){return $(element).recursivelyCollect('nextSibling');},siblings:function(element){element=$(element);return element.previousSiblings().reverse().concat(element.nextSiblings());},match:function(element,selector){if(Object.isString(selector))
101
+ selector=new Selector(selector);return selector.match($(element));},up:function(element,expression,index){element=$(element);if(arguments.length==1)return $(element.parentNode);var ancestors=element.ancestors();return Object.isNumber(expression)?ancestors[expression]:Selector.findElement(ancestors,expression,index);},down:function(element,expression,index){element=$(element);if(arguments.length==1)return element.firstDescendant();return Object.isNumber(expression)?element.descendants()[expression]:Element.select(element,expression)[index||0];},previous:function(element,expression,index){element=$(element);if(arguments.length==1)return $(Selector.handlers.previousElementSibling(element));var previousSiblings=element.previousSiblings();return Object.isNumber(expression)?previousSiblings[expression]:Selector.findElement(previousSiblings,expression,index);},next:function(element,expression,index){element=$(element);if(arguments.length==1)return $(Selector.handlers.nextElementSibling(element));var nextSiblings=element.nextSiblings();return Object.isNumber(expression)?nextSiblings[expression]:Selector.findElement(nextSiblings,expression,index);},select:function(){var args=$A(arguments),element=$(args.shift());return Selector.findChildElements(element,args);},adjacent:function(){var args=$A(arguments),element=$(args.shift());return Selector.findChildElements(element.parentNode,args).without(element);},identify:function(element){element=$(element);var id=element.readAttribute('id'),self=arguments.callee;if(id)return id;do{id='anonymous_element_'+self.counter++}while($(id));element.writeAttribute('id',id);return id;},readAttribute:function(element,name){element=$(element);if(Prototype.Browser.IE){var t=Element._attributeTranslations.read;if(t.values[name])return t.values[name](element,name);if(t.names[name])name=t.names[name];if(name.include(':')){return(!element.attributes||!element.attributes[name])?null:element.attributes[name].value;}}
102
+ return element.getAttribute(name);},writeAttribute:function(element,name,value){element=$(element);var attributes={},t=Element._attributeTranslations.write;if(typeof name=='object')attributes=name;else attributes[name]=Object.isUndefined(value)?true:value;for(var attr in attributes){name=t.names[attr]||attr;value=attributes[attr];if(t.values[attr])name=t.values[attr](element,value);if(value===false||value===null)
103
+ element.removeAttribute(name);else if(value===true)
104
+ element.setAttribute(name,name);else element.setAttribute(name,value);}
105
+ return element;},getHeight:function(element){return $(element).getDimensions().height;},getWidth:function(element){return $(element).getDimensions().width;},classNames:function(element){return new Element.ClassNames(element);},hasClassName:function(element,className){if(!(element=$(element)))return;var elementClassName=element.className;return(elementClassName.length>0&&(elementClassName==className||new RegExp("(^|\\s)"+className+"(\\s|$)").test(elementClassName)));},addClassName:function(element,className){if(!(element=$(element)))return;if(!element.hasClassName(className))
106
+ element.className+=(element.className?' ':'')+className;return element;},removeClassName:function(element,className){if(!(element=$(element)))return;element.className=element.className.replace(new RegExp("(^|\\s+)"+className+"(\\s+|$)"),' ').strip();return element;},toggleClassName:function(element,className){if(!(element=$(element)))return;return element[element.hasClassName(className)?'removeClassName':'addClassName'](className);},cleanWhitespace:function(element){element=$(element);var node=element.firstChild;while(node){var nextNode=node.nextSibling;if(node.nodeType==3&&!/\S/.test(node.nodeValue))
107
+ element.removeChild(node);node=nextNode;}
108
+ return element;},empty:function(element){return $(element).innerHTML.blank();},descendantOf:function(element,ancestor){element=$(element),ancestor=$(ancestor);if(element.compareDocumentPosition)
109
+ return(element.compareDocumentPosition(ancestor)&8)===8;if(ancestor.contains)
110
+ return ancestor.contains(element)&&ancestor!==element;while(element=element.parentNode)
111
+ if(element==ancestor)return true;return false;},scrollTo:function(element){element=$(element);var pos=element.cumulativeOffset();window.scrollTo(pos[0],pos[1]);return element;},getStyle:function(element,style){element=$(element);style=style=='float'?'cssFloat':style.camelize();var value=element.style[style];if(!value||value=='auto'){var css=document.defaultView.getComputedStyle(element,null);value=css?css[style]:null;}
112
+ if(style=='opacity')return value?parseFloat(value):1.0;return value=='auto'?null:value;},getOpacity:function(element){return $(element).getStyle('opacity');},setStyle:function(element,styles){element=$(element);var elementStyle=element.style,match;if(Object.isString(styles)){element.style.cssText+=';'+styles;return styles.include('opacity')?element.setOpacity(styles.match(/opacity:\s*(\d?\.?\d*)/)[1]):element;}
113
+ for(var property in styles)
114
+ if(property=='opacity')element.setOpacity(styles[property]);else
115
+ elementStyle[(property=='float'||property=='cssFloat')?(Object.isUndefined(elementStyle.styleFloat)?'cssFloat':'styleFloat'):property]=styles[property];return element;},setOpacity:function(element,value){element=$(element);element.style.opacity=(value==1||value==='')?'':(value<0.00001)?0:value;return element;},getDimensions:function(element){element=$(element);var display=element.getStyle('display');if(display!='none'&&display!=null)
116
+ return{width:element.offsetWidth,height:element.offsetHeight};var els=element.style;var originalVisibility=els.visibility;var originalPosition=els.position;var originalDisplay=els.display;els.visibility='hidden';els.position='absolute';els.display='block';var originalWidth=element.clientWidth;var originalHeight=element.clientHeight;els.display=originalDisplay;els.position=originalPosition;els.visibility=originalVisibility;return{width:originalWidth,height:originalHeight};},makePositioned:function(element){element=$(element);var pos=Element.getStyle(element,'position');if(pos=='static'||!pos){element._madePositioned=true;element.style.position='relative';if(Prototype.Browser.Opera){element.style.top=0;element.style.left=0;}}
117
+ return element;},undoPositioned:function(element){element=$(element);if(element._madePositioned){element._madePositioned=undefined;element.style.position=element.style.top=element.style.left=element.style.bottom=element.style.right='';}
118
+ return element;},makeClipping:function(element){element=$(element);if(element._overflow)return element;element._overflow=Element.getStyle(element,'overflow')||'auto';if(element._overflow!=='hidden')
119
+ element.style.overflow='hidden';return element;},undoClipping:function(element){element=$(element);if(!element._overflow)return element;element.style.overflow=element._overflow=='auto'?'':element._overflow;element._overflow=null;return element;},cumulativeOffset:function(element){var valueT=0,valueL=0;do{valueT+=element.offsetTop||0;valueL+=element.offsetLeft||0;element=element.offsetParent;}while(element);return Element._returnOffset(valueL,valueT);},positionedOffset:function(element){var valueT=0,valueL=0;do{valueT+=element.offsetTop||0;valueL+=element.offsetLeft||0;element=element.offsetParent;if(element){if(element.tagName.toUpperCase()=='BODY')break;var p=Element.getStyle(element,'position');if(p!=='static')break;}}while(element);return Element._returnOffset(valueL,valueT);},absolutize:function(element){element=$(element);if(element.getStyle('position')=='absolute')return element;var offsets=element.positionedOffset();var top=offsets[1];var left=offsets[0];var width=element.clientWidth;var height=element.clientHeight;element._originalLeft=left-parseFloat(element.style.left||0);element._originalTop=top-parseFloat(element.style.top||0);element._originalWidth=element.style.width;element._originalHeight=element.style.height;element.style.position='absolute';element.style.top=top+'px';element.style.left=left+'px';element.style.width=width+'px';element.style.height=height+'px';return element;},relativize:function(element){element=$(element);if(element.getStyle('position')=='relative')return element;element.style.position='relative';var top=parseFloat(element.style.top||0)-(element._originalTop||0);var left=parseFloat(element.style.left||0)-(element._originalLeft||0);element.style.top=top+'px';element.style.left=left+'px';element.style.height=element._originalHeight;element.style.width=element._originalWidth;return element;},cumulativeScrollOffset:function(element){var valueT=0,valueL=0;do{valueT+=element.scrollTop||0;valueL+=element.scrollLeft||0;element=element.parentNode;}while(element);return Element._returnOffset(valueL,valueT);},getOffsetParent:function(element){if(element.offsetParent)return $(element.offsetParent);if(element==document.body)return $(element);if(element.tagName.toUpperCase()=='HTML')
120
+ return $(document.body);while((element=element.parentNode)&&element!=document.body)
121
+ if(Element.getStyle(element,'position')!='static')
122
+ return $(element);return $(document.body);},viewportOffset:function(forElement){var valueT=0,valueL=0;var element=forElement;do{valueT+=element.offsetTop||0;valueL+=element.offsetLeft||0;if(element.offsetParent==document.body&&Element.getStyle(element,'position')=='absolute')break;}while(element=element.offsetParent);element=forElement;do{if(!Prototype.Browser.Opera||(element.tagName&&(element.tagName.toUpperCase()=='BODY'))){valueT-=element.scrollTop||0;valueL-=element.scrollLeft||0;}}while(element=element.parentNode);return Element._returnOffset(valueL,valueT);},clonePosition:function(element,source){var options=Object.extend({setLeft:true,setTop:true,setWidth:true,setHeight:true,offsetTop:0,offsetLeft:0},arguments[2]||{});source=$(source);var p=source.viewportOffset();element=$(element);var delta=[0,0];var parent=null;if(Element.getStyle(element,'position')=='absolute'){parent=element.getOffsetParent();delta=parent.viewportOffset();}
123
+ if(parent==document.body){delta[0]-=document.body.offsetLeft;delta[1]-=document.body.offsetTop;}
124
+ if(options.setLeft)element.style.left=(p[0]-delta[0]+options.offsetLeft)+'px';if(options.setTop)element.style.top=(p[1]-delta[1]+options.offsetTop)+'px';if(options.setWidth)element.style.width=source.offsetWidth+'px';if(options.setHeight)element.style.height=source.offsetHeight+'px';return element;}};Element.Methods.identify.counter=1;Object.extend(Element.Methods,{getElementsBySelector:Element.Methods.select,childElements:Element.Methods.immediateDescendants});Element._attributeTranslations={write:{names:{className:'class',htmlFor:'for'},values:{}}};if(Prototype.Browser.Opera){Element.Methods.getStyle=Element.Methods.getStyle.wrap(function(proceed,element,style){switch(style){case'left':case'top':case'right':case'bottom':if(proceed(element,'position')==='static')return null;case'height':case'width':if(!Element.visible(element))return null;var dim=parseInt(proceed(element,style),10);if(dim!==element['offset'+style.capitalize()])
125
+ return dim+'px';var properties;if(style==='height'){properties=['border-top-width','padding-top','padding-bottom','border-bottom-width'];}
126
+ else{properties=['border-left-width','padding-left','padding-right','border-right-width'];}
127
+ return properties.inject(dim,function(memo,property){var val=proceed(element,property);return val===null?memo:memo-parseInt(val,10);})+'px';default:return proceed(element,style);}});Element.Methods.readAttribute=Element.Methods.readAttribute.wrap(function(proceed,element,attribute){if(attribute==='title')return element.title;return proceed(element,attribute);});}
128
+ else if(Prototype.Browser.IE){Element.Methods.getOffsetParent=Element.Methods.getOffsetParent.wrap(function(proceed,element){element=$(element);try{element.offsetParent}
129
+ catch(e){return $(document.body)}
130
+ var position=element.getStyle('position');if(position!=='static')return proceed(element);element.setStyle({position:'relative'});var value=proceed(element);element.setStyle({position:position});return value;});$w('positionedOffset viewportOffset').each(function(method){Element.Methods[method]=Element.Methods[method].wrap(function(proceed,element){element=$(element);try{element.offsetParent}
131
+ catch(e){return Element._returnOffset(0,0)}
132
+ var position=element.getStyle('position');if(position!=='static')return proceed(element);var offsetParent=element.getOffsetParent();if(offsetParent&&offsetParent.getStyle('position')==='fixed')
133
+ offsetParent.setStyle({zoom:1});element.setStyle({position:'relative'});var value=proceed(element);element.setStyle({position:position});return value;});});Element.Methods.cumulativeOffset=Element.Methods.cumulativeOffset.wrap(function(proceed,element){try{element.offsetParent}
134
+ catch(e){return Element._returnOffset(0,0)}
135
+ return proceed(element);});Element.Methods.getStyle=function(element,style){element=$(element);style=(style=='float'||style=='cssFloat')?'styleFloat':style.camelize();var value=element.style[style];if(!value&&element.currentStyle)value=element.currentStyle[style];if(style=='opacity'){if(value=(element.getStyle('filter')||'').match(/alpha\(opacity=(.*)\)/))
136
+ if(value[1])return parseFloat(value[1])/100;return 1.0;}
137
+ if(value=='auto'){if((style=='width'||style=='height')&&(element.getStyle('display')!='none'))
138
+ return element['offset'+style.capitalize()]+'px';return null;}
139
+ return value;};Element.Methods.setOpacity=function(element,value){function stripAlpha(filter){return filter.replace(/alpha\([^\)]*\)/gi,'');}
140
+ element=$(element);var currentStyle=element.currentStyle;if((currentStyle&&!currentStyle.hasLayout)||(!currentStyle&&element.style.zoom=='normal'))
141
+ element.style.zoom=1;var filter=element.getStyle('filter'),style=element.style;if(value==1||value===''){(filter=stripAlpha(filter))?style.filter=filter:style.removeAttribute('filter');return element;}else if(value<0.00001)value=0;style.filter=stripAlpha(filter)+'alpha(opacity='+(value*100)+')';return element;};Element._attributeTranslations={read:{names:{'class':'className','for':'htmlFor'},values:{_getAttr:function(element,attribute){return element.getAttribute(attribute,2);},_getAttrNode:function(element,attribute){var node=element.getAttributeNode(attribute);return node?node.value:"";},_getEv:function(element,attribute){attribute=element.getAttribute(attribute);return attribute?attribute.toString().slice(23,-2):null;},_flag:function(element,attribute){return $(element).hasAttribute(attribute)?attribute:null;},style:function(element){return element.style.cssText.toLowerCase();},title:function(element){return element.title;}}}};Element._attributeTranslations.write={names:Object.extend({cellpadding:'cellPadding',cellspacing:'cellSpacing'},Element._attributeTranslations.read.names),values:{checked:function(element,value){element.checked=!!value;},style:function(element,value){element.style.cssText=value?value:'';}}};Element._attributeTranslations.has={};$w('colSpan rowSpan vAlign dateTime accessKey tabIndex '+'encType maxLength readOnly longDesc frameBorder').each(function(attr){Element._attributeTranslations.write.names[attr.toLowerCase()]=attr;Element._attributeTranslations.has[attr.toLowerCase()]=attr;});(function(v){Object.extend(v,{href:v._getAttr,src:v._getAttr,type:v._getAttr,action:v._getAttrNode,disabled:v._flag,checked:v._flag,readonly:v._flag,multiple:v._flag,onload:v._getEv,onunload:v._getEv,onclick:v._getEv,ondblclick:v._getEv,onmousedown:v._getEv,onmouseup:v._getEv,onmouseover:v._getEv,onmousemove:v._getEv,onmouseout:v._getEv,onfocus:v._getEv,onblur:v._getEv,onkeypress:v._getEv,onkeydown:v._getEv,onkeyup:v._getEv,onsubmit:v._getEv,onreset:v._getEv,onselect:v._getEv,onchange:v._getEv});})(Element._attributeTranslations.read.values);}
142
+ else if(Prototype.Browser.Gecko&&/rv:1\.8\.0/.test(navigator.userAgent)){Element.Methods.setOpacity=function(element,value){element=$(element);element.style.opacity=(value==1)?0.999999:(value==='')?'':(value<0.00001)?0:value;return element;};}
143
+ else if(Prototype.Browser.WebKit){Element.Methods.setOpacity=function(element,value){element=$(element);element.style.opacity=(value==1||value==='')?'':(value<0.00001)?0:value;if(value==1)
144
+ if(element.tagName.toUpperCase()=='IMG'&&element.width){element.width++;element.width--;}else try{var n=document.createTextNode(' ');element.appendChild(n);element.removeChild(n);}catch(e){}
145
+ return element;};Element.Methods.cumulativeOffset=function(element){var valueT=0,valueL=0;do{valueT+=element.offsetTop||0;valueL+=element.offsetLeft||0;if(element.offsetParent==document.body)
146
+ if(Element.getStyle(element,'position')=='absolute')break;element=element.offsetParent;}while(element);return Element._returnOffset(valueL,valueT);};}
147
+ if(Prototype.Browser.IE||Prototype.Browser.Opera){Element.Methods.update=function(element,content){element=$(element);if(content&&content.toElement)content=content.toElement();if(Object.isElement(content))return element.update().insert(content);content=Object.toHTML(content);var tagName=element.tagName.toUpperCase();if(tagName in Element._insertionTranslations.tags){$A(element.childNodes).each(function(node){element.removeChild(node)});Element._getContentFromAnonymousElement(tagName,content.stripScripts()).each(function(node){element.appendChild(node)});}
148
+ else element.innerHTML=content.stripScripts();content.evalScripts.bind(content).defer();return element;};}
149
+ if('outerHTML'in document.createElement('div')){Element.Methods.replace=function(element,content){element=$(element);if(content&&content.toElement)content=content.toElement();if(Object.isElement(content)){element.parentNode.replaceChild(content,element);return element;}
150
+ content=Object.toHTML(content);var parent=element.parentNode,tagName=parent.tagName.toUpperCase();if(Element._insertionTranslations.tags[tagName]){var nextSibling=element.next();var fragments=Element._getContentFromAnonymousElement(tagName,content.stripScripts());parent.removeChild(element);if(nextSibling)
151
+ fragments.each(function(node){parent.insertBefore(node,nextSibling)});else
152
+ fragments.each(function(node){parent.appendChild(node)});}
153
+ else element.outerHTML=content.stripScripts();content.evalScripts.bind(content).defer();return element;};}
154
+ Element._returnOffset=function(l,t){var result=[l,t];result.left=l;result.top=t;return result;};Element._getContentFromAnonymousElement=function(tagName,html){var div=new Element('div'),t=Element._insertionTranslations.tags[tagName];if(t){div.innerHTML=t[0]+html+t[1];t[2].times(function(){div=div.firstChild});}else div.innerHTML=html;return $A(div.childNodes);};Element._insertionTranslations={before:function(element,node){element.parentNode.insertBefore(node,element);},top:function(element,node){element.insertBefore(node,element.firstChild);},bottom:function(element,node){element.appendChild(node);},after:function(element,node){element.parentNode.insertBefore(node,element.nextSibling);},tags:{TABLE:['<table>','</table>',1],TBODY:['<table><tbody>','</tbody></table>',2],TR:['<table><tbody><tr>','</tr></tbody></table>',3],TD:['<table><tbody><tr><td>','</td></tr></tbody></table>',4],SELECT:['<select>','</select>',1]}};(function(){Object.extend(this.tags,{THEAD:this.tags.TBODY,TFOOT:this.tags.TBODY,TH:this.tags.TD});}).call(Element._insertionTranslations);Element.Methods.Simulated={hasAttribute:function(element,attribute){attribute=Element._attributeTranslations.has[attribute]||attribute;var node=$(element).getAttributeNode(attribute);return!!(node&&node.specified);}};Element.Methods.ByTag={};Object.extend(Element,Element.Methods);if(!Prototype.BrowserFeatures.ElementExtensions&&document.createElement('div')['__proto__']){window.HTMLElement={};window.HTMLElement.prototype=document.createElement('div')['__proto__'];Prototype.BrowserFeatures.ElementExtensions=true;}
155
+ Element.extend=(function(){if(Prototype.BrowserFeatures.SpecificElementExtensions)
156
+ return Prototype.K;var Methods={},ByTag=Element.Methods.ByTag;var extend=Object.extend(function(element){if(!element||element._extendedByPrototype||element.nodeType!=1||element==window)return element;var methods=Object.clone(Methods),tagName=element.tagName.toUpperCase(),property,value;if(ByTag[tagName])Object.extend(methods,ByTag[tagName]);for(property in methods){value=methods[property];if(Object.isFunction(value)&&!(property in element))
157
+ element[property]=value.methodize();}
158
+ element._extendedByPrototype=Prototype.emptyFunction;return element;},{refresh:function(){if(!Prototype.BrowserFeatures.ElementExtensions){Object.extend(Methods,Element.Methods);Object.extend(Methods,Element.Methods.Simulated);}}});extend.refresh();return extend;})();Element.hasAttribute=function(element,attribute){if(element.hasAttribute)return element.hasAttribute(attribute);return Element.Methods.Simulated.hasAttribute(element,attribute);};Element.addMethods=function(methods){var F=Prototype.BrowserFeatures,T=Element.Methods.ByTag;if(!methods){Object.extend(Form,Form.Methods);Object.extend(Form.Element,Form.Element.Methods);Object.extend(Element.Methods.ByTag,{"FORM":Object.clone(Form.Methods),"INPUT":Object.clone(Form.Element.Methods),"SELECT":Object.clone(Form.Element.Methods),"TEXTAREA":Object.clone(Form.Element.Methods)});}
159
+ if(arguments.length==2){var tagName=methods;methods=arguments[1];}
160
+ if(!tagName)Object.extend(Element.Methods,methods||{});else{if(Object.isArray(tagName))tagName.each(extend);else extend(tagName);}
161
+ function extend(tagName){tagName=tagName.toUpperCase();if(!Element.Methods.ByTag[tagName])
162
+ Element.Methods.ByTag[tagName]={};Object.extend(Element.Methods.ByTag[tagName],methods);}
163
+ function copy(methods,destination,onlyIfAbsent){onlyIfAbsent=onlyIfAbsent||false;for(var property in methods){var value=methods[property];if(!Object.isFunction(value))continue;if(!onlyIfAbsent||!(property in destination))
164
+ destination[property]=value.methodize();}}
165
+ function findDOMClass(tagName){var klass;var trans={"OPTGROUP":"OptGroup","TEXTAREA":"TextArea","P":"Paragraph","FIELDSET":"FieldSet","UL":"UList","OL":"OList","DL":"DList","DIR":"Directory","H1":"Heading","H2":"Heading","H3":"Heading","H4":"Heading","H5":"Heading","H6":"Heading","Q":"Quote","INS":"Mod","DEL":"Mod","A":"Anchor","IMG":"Image","CAPTION":"TableCaption","COL":"TableCol","COLGROUP":"TableCol","THEAD":"TableSection","TFOOT":"TableSection","TBODY":"TableSection","TR":"TableRow","TH":"TableCell","TD":"TableCell","FRAMESET":"FrameSet","IFRAME":"IFrame"};if(trans[tagName])klass='HTML'+trans[tagName]+'Element';if(window[klass])return window[klass];klass='HTML'+tagName+'Element';if(window[klass])return window[klass];klass='HTML'+tagName.capitalize()+'Element';if(window[klass])return window[klass];window[klass]={};window[klass].prototype=document.createElement(tagName)['__proto__'];return window[klass];}
166
+ if(F.ElementExtensions){copy(Element.Methods,HTMLElement.prototype);copy(Element.Methods.Simulated,HTMLElement.prototype,true);}
167
+ if(F.SpecificElementExtensions){for(var tag in Element.Methods.ByTag){var klass=findDOMClass(tag);if(Object.isUndefined(klass))continue;copy(T[tag],klass.prototype);}}
168
+ Object.extend(Element,Element.Methods);delete Element.ByTag;if(Element.extend.refresh)Element.extend.refresh();Element.cache={};};document.viewport={getDimensions:function(){var dimensions={},B=Prototype.Browser;$w('width height').each(function(d){var D=d.capitalize();if(B.WebKit&&!document.evaluate){dimensions[d]=self['inner'+D];}else if(B.Opera&&parseFloat(window.opera.version())<9.5){dimensions[d]=document.body['client'+D]}else{dimensions[d]=document.documentElement['client'+D];}});return dimensions;},getWidth:function(){return this.getDimensions().width;},getHeight:function(){return this.getDimensions().height;},getScrollOffsets:function(){return Element._returnOffset(window.pageXOffset||document.documentElement.scrollLeft||document.body.scrollLeft,window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop);}};var Selector=Class.create({initialize:function(expression){this.expression=expression.strip();if(this.shouldUseSelectorsAPI()){this.mode='selectorsAPI';}else if(this.shouldUseXPath()){this.mode='xpath';this.compileXPathMatcher();}else{this.mode="normal";this.compileMatcher();}},shouldUseXPath:function(){if(!Prototype.BrowserFeatures.XPath)return false;var e=this.expression;if(Prototype.Browser.WebKit&&(e.include("-of-type")||e.include(":empty")))
169
+ return false;if((/(\[[\w-]*?:|:checked)/).test(e))
170
+ return false;return true;},shouldUseSelectorsAPI:function(){if(!Prototype.BrowserFeatures.SelectorsAPI)return false;if(!Selector._div)Selector._div=new Element('div');try{Selector._div.querySelector(this.expression);}catch(e){return false;}
171
+ return true;},compileMatcher:function(){var e=this.expression,ps=Selector.patterns,h=Selector.handlers,c=Selector.criteria,le,p,m;if(Selector._cache[e]){this.matcher=Selector._cache[e];return;}
172
+ this.matcher=["this.matcher = function(root) {","var r = root, h = Selector.handlers, c = false, n;"];while(e&&le!=e&&(/\S/).test(e)){le=e;for(var i in ps){p=ps[i];if(m=e.match(p)){this.matcher.push(Object.isFunction(c[i])?c[i](m):new Template(c[i]).evaluate(m));e=e.replace(m[0],'');break;}}}
173
+ this.matcher.push("return h.unique(n);\n}");eval(this.matcher.join('\n'));Selector._cache[this.expression]=this.matcher;},compileXPathMatcher:function(){var e=this.expression,ps=Selector.patterns,x=Selector.xpath,le,m;if(Selector._cache[e]){this.xpath=Selector._cache[e];return;}
174
+ this.matcher=['.//*'];while(e&&le!=e&&(/\S/).test(e)){le=e;for(var i in ps){if(m=e.match(ps[i])){this.matcher.push(Object.isFunction(x[i])?x[i](m):new Template(x[i]).evaluate(m));e=e.replace(m[0],'');break;}}}
175
+ this.xpath=this.matcher.join('');Selector._cache[this.expression]=this.xpath;},findElements:function(root){root=root||document;var e=this.expression,results;switch(this.mode){case'selectorsAPI':if(root!==document){var oldId=root.id,id=$(root).identify();e="#"+id+" "+e;}
176
+ results=$A(root.querySelectorAll(e)).map(Element.extend);root.id=oldId;return results;case'xpath':return document._getElementsByXPath(this.xpath,root);default:return this.matcher(root);}},match:function(element){this.tokens=[];var e=this.expression,ps=Selector.patterns,as=Selector.assertions;var le,p,m;while(e&&le!==e&&(/\S/).test(e)){le=e;for(var i in ps){p=ps[i];if(m=e.match(p)){if(as[i]){this.tokens.push([i,Object.clone(m)]);e=e.replace(m[0],'');}else{return this.findElements(document).include(element);}}}}
177
+ var match=true,name,matches;for(var i=0,token;token=this.tokens[i];i++){name=token[0],matches=token[1];if(!Selector.assertions[name](element,matches)){match=false;break;}}
178
+ return match;},toString:function(){return this.expression;},inspect:function(){return"#<Selector:"+this.expression.inspect()+">";}});Object.extend(Selector,{_cache:{},xpath:{descendant:"//*",child:"/*",adjacent:"/following-sibling::*[1]",laterSibling:'/following-sibling::*',tagName:function(m){if(m[1]=='*')return'';return"[local-name()='"+m[1].toLowerCase()+"' or local-name()='"+m[1].toUpperCase()+"']";},className:"[contains(concat(' ', @class, ' '), ' #{1} ')]",id:"[@id='#{1}']",attrPresence:function(m){m[1]=m[1].toLowerCase();return new Template("[@#{1}]").evaluate(m);},attr:function(m){m[1]=m[1].toLowerCase();m[3]=m[5]||m[6];return new Template(Selector.xpath.operators[m[2]]).evaluate(m);},pseudo:function(m){var h=Selector.xpath.pseudos[m[1]];if(!h)return'';if(Object.isFunction(h))return h(m);return new Template(Selector.xpath.pseudos[m[1]]).evaluate(m);},operators:{'=':"[@#{1}='#{3}']",'!=':"[@#{1}!='#{3}']",'^=':"[starts-with(@#{1}, '#{3}')]",'$=':"[substring(@#{1}, (string-length(@#{1}) - string-length('#{3}') + 1))='#{3}']",'*=':"[contains(@#{1}, '#{3}')]",'~=':"[contains(concat(' ', @#{1}, ' '), ' #{3} ')]",'|=':"[contains(concat('-', @#{1}, '-'), '-#{3}-')]"},pseudos:{'first-child':'[not(preceding-sibling::*)]','last-child':'[not(following-sibling::*)]','only-child':'[not(preceding-sibling::* or following-sibling::*)]','empty':"[count(*) = 0 and (count(text()) = 0)]",'checked':"[@checked]",'disabled':"[(@disabled) and (@type!='hidden')]",'enabled':"[not(@disabled) and (@type!='hidden')]",'not':function(m){var e=m[6],p=Selector.patterns,x=Selector.xpath,le,v;var exclusion=[];while(e&&le!=e&&(/\S/).test(e)){le=e;for(var i in p){if(m=e.match(p[i])){v=Object.isFunction(x[i])?x[i](m):new Template(x[i]).evaluate(m);exclusion.push("("+v.substring(1,v.length-1)+")");e=e.replace(m[0],'');break;}}}
179
+ return"[not("+exclusion.join(" and ")+")]";},'nth-child':function(m){return Selector.xpath.pseudos.nth("(count(./preceding-sibling::*) + 1) ",m);},'nth-last-child':function(m){return Selector.xpath.pseudos.nth("(count(./following-sibling::*) + 1) ",m);},'nth-of-type':function(m){return Selector.xpath.pseudos.nth("position() ",m);},'nth-last-of-type':function(m){return Selector.xpath.pseudos.nth("(last() + 1 - position()) ",m);},'first-of-type':function(m){m[6]="1";return Selector.xpath.pseudos['nth-of-type'](m);},'last-of-type':function(m){m[6]="1";return Selector.xpath.pseudos['nth-last-of-type'](m);},'only-of-type':function(m){var p=Selector.xpath.pseudos;return p['first-of-type'](m)+p['last-of-type'](m);},nth:function(fragment,m){var mm,formula=m[6],predicate;if(formula=='even')formula='2n+0';if(formula=='odd')formula='2n+1';if(mm=formula.match(/^(\d+)$/))
180
+ return'['+fragment+"= "+mm[1]+']';if(mm=formula.match(/^(-?\d*)?n(([+-])(\d+))?/)){if(mm[1]=="-")mm[1]=-1;var a=mm[1]?Number(mm[1]):1;var b=mm[2]?Number(mm[2]):0;predicate="[((#{fragment} - #{b}) mod #{a} = 0) and "+"((#{fragment} - #{b}) div #{a} >= 0)]";return new Template(predicate).evaluate({fragment:fragment,a:a,b:b});}}}},criteria:{tagName:'n = h.tagName(n, r, "#{1}", c); c = false;',className:'n = h.className(n, r, "#{1}", c); c = false;',id:'n = h.id(n, r, "#{1}", c); c = false;',attrPresence:'n = h.attrPresence(n, r, "#{1}", c); c = false;',attr:function(m){m[3]=(m[5]||m[6]);return new Template('n = h.attr(n, r, "#{1}", "#{3}", "#{2}", c); c = false;').evaluate(m);},pseudo:function(m){if(m[6])m[6]=m[6].replace(/"/g,'\\"');return new Template('n = h.pseudo(n, "#{1}", "#{6}", r, c); c = false;').evaluate(m);},descendant:'c = "descendant";',child:'c = "child";',adjacent:'c = "adjacent";',laterSibling:'c = "laterSibling";'},patterns:{laterSibling:/^\s*~\s*/,child:/^\s*>\s*/,adjacent:/^\s*\+\s*/,descendant:/^\s/,tagName:/^\s*(\*|[\w\-]+)(\b|$)?/,id:/^#([\w\-\*]+)(\b|$)/,className:/^\.([\w\-\*]+)(\b|$)/,pseudo:/^:((first|last|nth|nth-last|only)(-child|-of-type)|empty|checked|(en|dis)abled|not)(\((.*?)\))?(\b|$|(?=\s|[:+~>]))/,attrPresence:/^\[((?:[\w]+:)?[\w]+)\]/,attr:/\[((?:[\w-]*:)?[\w-]+)\s*(?:([!^$*~|]?=)\s*((['"])([^\4]*?)\4|([^'"][^\]]*?)))?\]/},assertions:{tagName:function(element,matches){return matches[1].toUpperCase()==element.tagName.toUpperCase();},className:function(element,matches){return Element.hasClassName(element,matches[1]);},id:function(element,matches){return element.id===matches[1];},attrPresence:function(element,matches){return Element.hasAttribute(element,matches[1]);},attr:function(element,matches){var nodeValue=Element.readAttribute(element,matches[1]);return nodeValue&&Selector.operators[matches[2]](nodeValue,matches[5]||matches[6]);}},handlers:{concat:function(a,b){for(var i=0,node;node=b[i];i++)
181
+ a.push(node);return a;},mark:function(nodes){var _true=Prototype.emptyFunction;for(var i=0,node;node=nodes[i];i++)
182
+ node._countedByPrototype=_true;return nodes;},unmark:function(nodes){for(var i=0,node;node=nodes[i];i++)
183
+ node._countedByPrototype=undefined;return nodes;},index:function(parentNode,reverse,ofType){parentNode._countedByPrototype=Prototype.emptyFunction;if(reverse){for(var nodes=parentNode.childNodes,i=nodes.length-1,j=1;i>=0;i--){var node=nodes[i];if(node.nodeType==1&&(!ofType||node._countedByPrototype))node.nodeIndex=j++;}}else{for(var i=0,j=1,nodes=parentNode.childNodes;node=nodes[i];i++)
184
+ if(node.nodeType==1&&(!ofType||node._countedByPrototype))node.nodeIndex=j++;}},unique:function(nodes){if(nodes.length==0)return nodes;var results=[],n;for(var i=0,l=nodes.length;i<l;i++)
185
+ if(!(n=nodes[i])._countedByPrototype){n._countedByPrototype=Prototype.emptyFunction;results.push(Element.extend(n));}
186
+ return Selector.handlers.unmark(results);},descendant:function(nodes){var h=Selector.handlers;for(var i=0,results=[],node;node=nodes[i];i++)
187
+ h.concat(results,node.getElementsByTagName('*'));return results;},child:function(nodes){var h=Selector.handlers;for(var i=0,results=[],node;node=nodes[i];i++){for(var j=0,child;child=node.childNodes[j];j++)
188
+ if(child.nodeType==1&&child.tagName!='!')results.push(child);}
189
+ return results;},adjacent:function(nodes){for(var i=0,results=[],node;node=nodes[i];i++){var next=this.nextElementSibling(node);if(next)results.push(next);}
190
+ return results;},laterSibling:function(nodes){var h=Selector.handlers;for(var i=0,results=[],node;node=nodes[i];i++)
191
+ h.concat(results,Element.nextSiblings(node));return results;},nextElementSibling:function(node){while(node=node.nextSibling)
192
+ if(node.nodeType==1)return node;return null;},previousElementSibling:function(node){while(node=node.previousSibling)
193
+ if(node.nodeType==1)return node;return null;},tagName:function(nodes,root,tagName,combinator){var uTagName=tagName.toUpperCase();var results=[],h=Selector.handlers;if(nodes){if(combinator){if(combinator=="descendant"){for(var i=0,node;node=nodes[i];i++)
194
+ h.concat(results,node.getElementsByTagName(tagName));return results;}else nodes=this[combinator](nodes);if(tagName=="*")return nodes;}
195
+ for(var i=0,node;node=nodes[i];i++)
196
+ if(node.tagName.toUpperCase()===uTagName)results.push(node);return results;}else return root.getElementsByTagName(tagName);},id:function(nodes,root,id,combinator){var targetNode=$(id),h=Selector.handlers;if(!targetNode)return[];if(!nodes&&root==document)return[targetNode];if(nodes){if(combinator){if(combinator=='child'){for(var i=0,node;node=nodes[i];i++)
197
+ if(targetNode.parentNode==node)return[targetNode];}else if(combinator=='descendant'){for(var i=0,node;node=nodes[i];i++)
198
+ if(Element.descendantOf(targetNode,node))return[targetNode];}else if(combinator=='adjacent'){for(var i=0,node;node=nodes[i];i++)
199
+ if(Selector.handlers.previousElementSibling(targetNode)==node)
200
+ return[targetNode];}else nodes=h[combinator](nodes);}
201
+ for(var i=0,node;node=nodes[i];i++)
202
+ if(node==targetNode)return[targetNode];return[];}
203
+ return(targetNode&&Element.descendantOf(targetNode,root))?[targetNode]:[];},className:function(nodes,root,className,combinator){if(nodes&&combinator)nodes=this[combinator](nodes);return Selector.handlers.byClassName(nodes,root,className);},byClassName:function(nodes,root,className){if(!nodes)nodes=Selector.handlers.descendant([root]);var needle=' '+className+' ';for(var i=0,results=[],node,nodeClassName;node=nodes[i];i++){nodeClassName=node.className;if(nodeClassName.length==0)continue;if(nodeClassName==className||(' '+nodeClassName+' ').include(needle))
204
+ results.push(node);}
205
+ return results;},attrPresence:function(nodes,root,attr,combinator){if(!nodes)nodes=root.getElementsByTagName("*");if(nodes&&combinator)nodes=this[combinator](nodes);var results=[];for(var i=0,node;node=nodes[i];i++)
206
+ if(Element.hasAttribute(node,attr))results.push(node);return results;},attr:function(nodes,root,attr,value,operator,combinator){if(!nodes)nodes=root.getElementsByTagName("*");if(nodes&&combinator)nodes=this[combinator](nodes);var handler=Selector.operators[operator],results=[];for(var i=0,node;node=nodes[i];i++){var nodeValue=Element.readAttribute(node,attr);if(nodeValue===null)continue;if(handler(nodeValue,value))results.push(node);}
207
+ return results;},pseudo:function(nodes,name,value,root,combinator){if(nodes&&combinator)nodes=this[combinator](nodes);if(!nodes)nodes=root.getElementsByTagName("*");return Selector.pseudos[name](nodes,value,root);}},pseudos:{'first-child':function(nodes,value,root){for(var i=0,results=[],node;node=nodes[i];i++){if(Selector.handlers.previousElementSibling(node))continue;results.push(node);}
208
+ return results;},'last-child':function(nodes,value,root){for(var i=0,results=[],node;node=nodes[i];i++){if(Selector.handlers.nextElementSibling(node))continue;results.push(node);}
209
+ return results;},'only-child':function(nodes,value,root){var h=Selector.handlers;for(var i=0,results=[],node;node=nodes[i];i++)
210
+ if(!h.previousElementSibling(node)&&!h.nextElementSibling(node))
211
+ results.push(node);return results;},'nth-child':function(nodes,formula,root){return Selector.pseudos.nth(nodes,formula,root);},'nth-last-child':function(nodes,formula,root){return Selector.pseudos.nth(nodes,formula,root,true);},'nth-of-type':function(nodes,formula,root){return Selector.pseudos.nth(nodes,formula,root,false,true);},'nth-last-of-type':function(nodes,formula,root){return Selector.pseudos.nth(nodes,formula,root,true,true);},'first-of-type':function(nodes,formula,root){return Selector.pseudos.nth(nodes,"1",root,false,true);},'last-of-type':function(nodes,formula,root){return Selector.pseudos.nth(nodes,"1",root,true,true);},'only-of-type':function(nodes,formula,root){var p=Selector.pseudos;return p['last-of-type'](p['first-of-type'](nodes,formula,root),formula,root);},getIndices:function(a,b,total){if(a==0)return b>0?[b]:[];return $R(1,total).inject([],function(memo,i){if(0==(i-b)%a&&(i-b)/a>=0)memo.push(i);return memo;});},nth:function(nodes,formula,root,reverse,ofType){if(nodes.length==0)return[];if(formula=='even')formula='2n+0';if(formula=='odd')formula='2n+1';var h=Selector.handlers,results=[],indexed=[],m;h.mark(nodes);for(var i=0,node;node=nodes[i];i++){if(!node.parentNode._countedByPrototype){h.index(node.parentNode,reverse,ofType);indexed.push(node.parentNode);}}
212
+ if(formula.match(/^\d+$/)){formula=Number(formula);for(var i=0,node;node=nodes[i];i++)
213
+ if(node.nodeIndex==formula)results.push(node);}else if(m=formula.match(/^(-?\d*)?n(([+-])(\d+))?/)){if(m[1]=="-")m[1]=-1;var a=m[1]?Number(m[1]):1;var b=m[2]?Number(m[2]):0;var indices=Selector.pseudos.getIndices(a,b,nodes.length);for(var i=0,node,l=indices.length;node=nodes[i];i++){for(var j=0;j<l;j++)
214
+ if(node.nodeIndex==indices[j])results.push(node);}}
215
+ h.unmark(nodes);h.unmark(indexed);return results;},'empty':function(nodes,value,root){for(var i=0,results=[],node;node=nodes[i];i++){if(node.tagName=='!'||node.firstChild)continue;results.push(node);}
216
+ return results;},'not':function(nodes,selector,root){var h=Selector.handlers,selectorType,m;var exclusions=new Selector(selector).findElements(root);h.mark(exclusions);for(var i=0,results=[],node;node=nodes[i];i++)
217
+ if(!node._countedByPrototype)results.push(node);h.unmark(exclusions);return results;},'enabled':function(nodes,value,root){for(var i=0,results=[],node;node=nodes[i];i++)
218
+ if(!node.disabled&&(!node.type||node.type!=='hidden'))
219
+ results.push(node);return results;},'disabled':function(nodes,value,root){for(var i=0,results=[],node;node=nodes[i];i++)
220
+ if(node.disabled)results.push(node);return results;},'checked':function(nodes,value,root){for(var i=0,results=[],node;node=nodes[i];i++)
221
+ if(node.checked)results.push(node);return results;}},operators:{'=':function(nv,v){return nv==v;},'!=':function(nv,v){return nv!=v;},'^=':function(nv,v){return nv==v||nv&&nv.startsWith(v);},'$=':function(nv,v){return nv==v||nv&&nv.endsWith(v);},'*=':function(nv,v){return nv==v||nv&&nv.include(v);},'$=':function(nv,v){return nv.endsWith(v);},'*=':function(nv,v){return nv.include(v);},'~=':function(nv,v){return(' '+nv+' ').include(' '+v+' ');},'|=':function(nv,v){return('-'+(nv||"").toUpperCase()+'-').include('-'+(v||"").toUpperCase()+'-');}},split:function(expression){var expressions=[];expression.scan(/(([\w#:.~>+()\s-]+|\*|\[.*?\])+)\s*(,|$)/,function(m){expressions.push(m[1].strip());});return expressions;},matchElements:function(elements,expression){var matches=$$(expression),h=Selector.handlers;h.mark(matches);for(var i=0,results=[],element;element=elements[i];i++)
222
+ if(element._countedByPrototype)results.push(element);h.unmark(matches);return results;},findElement:function(elements,expression,index){if(Object.isNumber(expression)){index=expression;expression=false;}
223
+ return Selector.matchElements(elements,expression||'*')[index||0];},findChildElements:function(element,expressions){expressions=Selector.split(expressions.join(','));var results=[],h=Selector.handlers;for(var i=0,l=expressions.length,selector;i<l;i++){selector=new Selector(expressions[i].strip());h.concat(results,selector.findElements(element));}
224
+ return(l>1)?h.unique(results):results;}});if(Prototype.Browser.IE){Object.extend(Selector.handlers,{concat:function(a,b){for(var i=0,node;node=b[i];i++)
225
+ if(node.tagName!=="!")a.push(node);return a;},unmark:function(nodes){for(var i=0,node;node=nodes[i];i++)
226
+ node.removeAttribute('_countedByPrototype');return nodes;}});}
227
+ function $$(){return Selector.findChildElements(document,$A(arguments));}
228
+ var Form={reset:function(form){$(form).reset();return form;},serializeElements:function(elements,options){if(typeof options!='object')options={hash:!!options};else if(Object.isUndefined(options.hash))options.hash=true;var key,value,submitted=false,submit=options.submit;var data=elements.inject({},function(result,element){if(!element.disabled&&element.name){key=element.name;value=$(element).getValue();if(value!=null&&element.type!='file'&&(element.type!='submit'||(!submitted&&submit!==false&&(!submit||key==submit)&&(submitted=true)))){if(key in result){if(!Object.isArray(result[key]))result[key]=[result[key]];result[key].push(value);}
229
+ else result[key]=value;}}
230
+ return result;});return options.hash?data:Object.toQueryString(data);}};Form.Methods={serialize:function(form,options){return Form.serializeElements(Form.getElements(form),options);},getElements:function(form){return $A($(form).getElementsByTagName('*')).inject([],function(elements,child){if(Form.Element.Serializers[child.tagName.toLowerCase()])
231
+ elements.push(Element.extend(child));return elements;});},getInputs:function(form,typeName,name){form=$(form);var inputs=form.getElementsByTagName('input');if(!typeName&&!name)return $A(inputs).map(Element.extend);for(var i=0,matchingInputs=[],length=inputs.length;i<length;i++){var input=inputs[i];if((typeName&&input.type!=typeName)||(name&&input.name!=name))
232
+ continue;matchingInputs.push(Element.extend(input));}
233
+ return matchingInputs;},disable:function(form){form=$(form);Form.getElements(form).invoke('disable');return form;},enable:function(form){form=$(form);Form.getElements(form).invoke('enable');return form;},findFirstElement:function(form){var elements=$(form).getElements().findAll(function(element){return'hidden'!=element.type&&!element.disabled;});var firstByIndex=elements.findAll(function(element){return element.hasAttribute('tabIndex')&&element.tabIndex>=0;}).sortBy(function(element){return element.tabIndex}).first();return firstByIndex?firstByIndex:elements.find(function(element){return['input','select','textarea'].include(element.tagName.toLowerCase());});},focusFirstElement:function(form){form=$(form);form.findFirstElement().activate();return form;},request:function(form,options){form=$(form),options=Object.clone(options||{});var params=options.parameters,action=form.readAttribute('action')||'';if(action.blank())action=window.location.href;options.parameters=form.serialize(true);if(params){if(Object.isString(params))params=params.toQueryParams();Object.extend(options.parameters,params);}
234
+ if(form.hasAttribute('method')&&!options.method)
235
+ options.method=form.method;return new Ajax.Request(action,options);}};Form.Element={focus:function(element){$(element).focus();return element;},select:function(element){$(element).select();return element;}};Form.Element.Methods={serialize:function(element){element=$(element);if(!element.disabled&&element.name){var value=element.getValue();if(value!=undefined){var pair={};pair[element.name]=value;return Object.toQueryString(pair);}}
236
+ return'';},getValue:function(element){element=$(element);var method=element.tagName.toLowerCase();return Form.Element.Serializers[method](element);},setValue:function(element,value){element=$(element);var method=element.tagName.toLowerCase();Form.Element.Serializers[method](element,value);return element;},clear:function(element){$(element).value='';return element;},present:function(element){return $(element).value!='';},activate:function(element){element=$(element);try{element.focus();if(element.select&&(element.tagName.toLowerCase()!='input'||!['button','reset','submit'].include(element.type)))
237
+ element.select();}catch(e){}
238
+ return element;},disable:function(element){element=$(element);element.disabled=true;return element;},enable:function(element){element=$(element);element.disabled=false;return element;}};var Field=Form.Element;var $F=Form.Element.Methods.getValue;Form.Element.Serializers={input:function(element,value){switch(element.type.toLowerCase()){case'checkbox':case'radio':return Form.Element.Serializers.inputSelector(element,value);default:return Form.Element.Serializers.textarea(element,value);}},inputSelector:function(element,value){if(Object.isUndefined(value))return element.checked?element.value:null;else element.checked=!!value;},textarea:function(element,value){if(Object.isUndefined(value))return element.value;else element.value=value;},select:function(element,value){if(Object.isUndefined(value))
239
+ return this[element.type=='select-one'?'selectOne':'selectMany'](element);else{var opt,currentValue,single=!Object.isArray(value);for(var i=0,length=element.length;i<length;i++){opt=element.options[i];currentValue=this.optionValue(opt);if(single){if(currentValue==value){opt.selected=true;return;}}
240
+ else opt.selected=value.include(currentValue);}}},selectOne:function(element){var index=element.selectedIndex;return index>=0?this.optionValue(element.options[index]):null;},selectMany:function(element){var values,length=element.length;if(!length)return null;for(var i=0,values=[];i<length;i++){var opt=element.options[i];if(opt.selected)values.push(this.optionValue(opt));}
241
+ return values;},optionValue:function(opt){return Element.extend(opt).hasAttribute('value')?opt.value:opt.text;}};Abstract.TimedObserver=Class.create(PeriodicalExecuter,{initialize:function($super,element,frequency,callback){$super(callback,frequency);this.element=$(element);this.lastValue=this.getValue();},execute:function(){var value=this.getValue();if(Object.isString(this.lastValue)&&Object.isString(value)?this.lastValue!=value:String(this.lastValue)!=String(value)){this.callback(this.element,value);this.lastValue=value;}}});Form.Element.Observer=Class.create(Abstract.TimedObserver,{getValue:function(){return Form.Element.getValue(this.element);}});Form.Observer=Class.create(Abstract.TimedObserver,{getValue:function(){return Form.serialize(this.element);}});Abstract.EventObserver=Class.create({initialize:function(element,callback){this.element=$(element);this.callback=callback;this.lastValue=this.getValue();if(this.element.tagName.toLowerCase()=='form')
242
+ this.registerFormCallbacks();else
243
+ this.registerCallback(this.element);},onElementEvent:function(){var value=this.getValue();if(this.lastValue!=value){this.callback(this.element,value);this.lastValue=value;}},registerFormCallbacks:function(){Form.getElements(this.element).each(this.registerCallback,this);},registerCallback:function(element){if(element.type){switch(element.type.toLowerCase()){case'checkbox':case'radio':Event.observe(element,'click',this.onElementEvent.bind(this));break;default:Event.observe(element,'change',this.onElementEvent.bind(this));break;}}}});Form.Element.EventObserver=Class.create(Abstract.EventObserver,{getValue:function(){return Form.Element.getValue(this.element);}});Form.EventObserver=Class.create(Abstract.EventObserver,{getValue:function(){return Form.serialize(this.element);}});if(!window.Event)var Event={};Object.extend(Event,{KEY_BACKSPACE:8,KEY_TAB:9,KEY_RETURN:13,KEY_ESC:27,KEY_LEFT:37,KEY_UP:38,KEY_RIGHT:39,KEY_DOWN:40,KEY_DELETE:46,KEY_HOME:36,KEY_END:35,KEY_PAGEUP:33,KEY_PAGEDOWN:34,KEY_INSERT:45,cache:{},relatedTarget:function(event){var element;switch(event.type){case'mouseover':element=event.fromElement;break;case'mouseout':element=event.toElement;break;default:return null;}
244
+ return Element.extend(element);}});Event.Methods=(function(){var isButton;if(Prototype.Browser.IE){var buttonMap={0:1,1:4,2:2};isButton=function(event,code){return event.button==buttonMap[code];};}else if(Prototype.Browser.WebKit){isButton=function(event,code){switch(code){case 0:return event.which==1&&!event.metaKey;case 1:return event.which==1&&event.metaKey;default:return false;}};}else{isButton=function(event,code){return event.which?(event.which===code+1):(event.button===code);};}
245
+ return{isLeftClick:function(event){return isButton(event,0)},isMiddleClick:function(event){return isButton(event,1)},isRightClick:function(event){return isButton(event,2)},element:function(event){event=Event.extend(event);var node=event.target,type=event.type,currentTarget=event.currentTarget;if(currentTarget&&currentTarget.tagName){if(type==='load'||type==='error'||(type==='click'&&currentTarget.tagName.toLowerCase()==='input'&&currentTarget.type==='radio'))
246
+ node=currentTarget;}
247
+ if(node){if(node.nodeType==Node.TEXT_NODE)node=node.parentNode;return Element.extend(node);}else return false;},findElement:function(event,expression){var element=Event.element(event);if(!expression)return element;var elements=[element].concat(element.ancestors());return Selector.findElement(elements,expression,0);},pointer:function(event){var docElement=document.documentElement,body=document.body||{scrollLeft:0,scrollTop:0};return{x:event.pageX||(event.clientX+
248
+ (docElement.scrollLeft||body.scrollLeft)-
249
+ (docElement.clientLeft||0)),y:event.pageY||(event.clientY+
250
+ (docElement.scrollTop||body.scrollTop)-
251
+ (docElement.clientTop||0))};},pointerX:function(event){return Event.pointer(event).x},pointerY:function(event){return Event.pointer(event).y},stop:function(event){Event.extend(event);event.preventDefault();event.stopPropagation();event.stopped=true;}};})();Event.extend=(function(){var methods=Object.keys(Event.Methods).inject({},function(m,name){m[name]=Event.Methods[name].methodize();return m;});if(Prototype.Browser.IE){Object.extend(methods,{stopPropagation:function(){this.cancelBubble=true},preventDefault:function(){this.returnValue=false},inspect:function(){return"[object Event]"}});return function(event){if(!event)return false;if(event._extendedByPrototype)return event;event._extendedByPrototype=Prototype.emptyFunction;var pointer=Event.pointer(event);Object.extend(event,{target:event.srcElement,relatedTarget:Event.relatedTarget(event),pageX:pointer.x,pageY:pointer.y});return Object.extend(event,methods);};}else{Event.prototype=Event.prototype||document.createEvent("HTMLEvents")['__proto__'];Object.extend(Event.prototype,methods);return Prototype.K;}})();Object.extend(Event,(function(){var cache=Event.cache;function getEventID(element){try{if(element._prototypeEventID)return element._prototypeEventID[0];arguments.callee.id=arguments.callee.id||1;return element._prototypeEventID=[++arguments.callee.id];}catch(error){return false;}}
252
+ function getDOMEventName(eventName){if(eventName&&eventName.include(':'))return"dataavailable";return eventName;}
253
+ function getCacheForID(id){return cache[id]=cache[id]||{};}
254
+ function getWrappersForEventName(id,eventName){var c=getCacheForID(id);return c[eventName]=c[eventName]||[];}
255
+ function createWrapper(element,eventName,handler){var id=getEventID(element);var c=getWrappersForEventName(id,eventName);if(c.pluck("handler").include(handler))return false;var wrapper=function(event){if(!Event||!Event.extend||(event.eventName&&event.eventName!=eventName))
256
+ return false;Event.extend(event);handler.call(element,event);};wrapper.handler=handler;c.push(wrapper);return wrapper;}
257
+ function findWrapper(id,eventName,handler){var c=getWrappersForEventName(id,eventName);return c.find(function(wrapper){return wrapper.handler==handler});}
258
+ function destroyWrapper(id,eventName,handler){var c=getCacheForID(id);if(!c[eventName])return false;c[eventName]=c[eventName].without(findWrapper(id,eventName,handler));}
259
+ function destroyCache(){for(var id in cache)
260
+ for(var eventName in cache[id])
261
+ cache[id][eventName]=null;}
262
+ if(window.attachEvent){window.attachEvent("onunload",destroyCache);}
263
+ if(Prototype.Browser.WebKit){window.addEventListener('unload',Prototype.emptyFunction,false);}
264
+ return{observe:function(element,eventName,handler){element=$(element);var name=getDOMEventName(eventName);var wrapper=createWrapper(element,eventName,handler);if(!wrapper)return element;if(element.addEventListener){element.addEventListener(name,wrapper,false);}else{element.attachEvent("on"+name,wrapper);}
265
+ return element;},stopObserving:function(element,eventName,handler){element=$(element);var id=getEventID(element),name=getDOMEventName(eventName);if(!handler&&eventName){getWrappersForEventName(id,eventName).each(function(wrapper){element.stopObserving(eventName,wrapper.handler);});return element;}else if(!eventName){Object.keys(getCacheForID(id)).each(function(eventName){element.stopObserving(eventName);});return element;}
266
+ var wrapper=findWrapper(id,eventName,handler);if(!wrapper)return element;if(element.removeEventListener){element.removeEventListener(name,wrapper,false);}else{element.detachEvent("on"+name,wrapper);}
267
+ destroyWrapper(id,eventName,handler);return element;},fire:function(element,eventName,memo){element=$(element);if(element==document&&document.createEvent&&!element.dispatchEvent)
268
+ element=document.documentElement;var event;if(document.createEvent){event=document.createEvent("HTMLEvents");event.initEvent("dataavailable",true,true);}else{event=document.createEventObject();event.eventType="ondataavailable";}
269
+ event.eventName=eventName;event.memo=memo||{};if(document.createEvent){element.dispatchEvent(event);}else{element.fireEvent(event.eventType,event);}
270
+ return Event.extend(event);}};})());Object.extend(Event,Event.Methods);Element.addMethods({fire:Event.fire,observe:Event.observe,stopObserving:Event.stopObserving});Object.extend(document,{fire:Element.Methods.fire.methodize(),observe:Element.Methods.observe.methodize(),stopObserving:Element.Methods.stopObserving.methodize(),loaded:false});(function(){var timer;function fireContentLoadedEvent(){if(document.loaded)return;if(timer)window.clearInterval(timer);document.fire("dom:loaded");document.loaded=true;}
271
+ if(document.addEventListener){if(Prototype.Browser.WebKit){timer=window.setInterval(function(){if(/loaded|complete/.test(document.readyState))
272
+ fireContentLoadedEvent();},0);Event.observe(window,"load",fireContentLoadedEvent);}else{document.addEventListener("DOMContentLoaded",fireContentLoadedEvent,false);}}else{document.write("<script id=__onDOMContentLoaded defer src=//:><\/script>");$("__onDOMContentLoaded").onreadystatechange=function(){if(this.readyState=="complete"){this.onreadystatechange=null;fireContentLoadedEvent();}};}})();Hash.toQueryString=Object.toQueryString;var Toggle={display:Element.toggle};Element.Methods.childOf=Element.Methods.descendantOf;var Insertion={Before:function(element,content){return Element.insert(element,{before:content});},Top:function(element,content){return Element.insert(element,{top:content});},Bottom:function(element,content){return Element.insert(element,{bottom:content});},After:function(element,content){return Element.insert(element,{after:content});}};var $continue=new Error('"throw $continue" is deprecated, use "return" instead');var Position={includeScrollOffsets:false,prepare:function(){this.deltaX=window.pageXOffset||document.documentElement.scrollLeft||document.body.scrollLeft||0;this.deltaY=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0;},within:function(element,x,y){if(this.includeScrollOffsets)
273
+ return this.withinIncludingScrolloffsets(element,x,y);this.xcomp=x;this.ycomp=y;this.offset=Element.cumulativeOffset(element);return(y>=this.offset[1]&&y<this.offset[1]+element.offsetHeight&&x>=this.offset[0]&&x<this.offset[0]+element.offsetWidth);},withinIncludingScrolloffsets:function(element,x,y){var offsetcache=Element.cumulativeScrollOffset(element);this.xcomp=x+offsetcache[0]-this.deltaX;this.ycomp=y+offsetcache[1]-this.deltaY;this.offset=Element.cumulativeOffset(element);return(this.ycomp>=this.offset[1]&&this.ycomp<this.offset[1]+element.offsetHeight&&this.xcomp>=this.offset[0]&&this.xcomp<this.offset[0]+element.offsetWidth);},overlap:function(mode,element){if(!mode)return 0;if(mode=='vertical')
274
+ return((this.offset[1]+element.offsetHeight)-this.ycomp)/element.offsetHeight;if(mode=='horizontal')
275
+ return((this.offset[0]+element.offsetWidth)-this.xcomp)/element.offsetWidth;},cumulativeOffset:Element.Methods.cumulativeOffset,positionedOffset:Element.Methods.positionedOffset,absolutize:function(element){Position.prepare();return Element.absolutize(element);},relativize:function(element){Position.prepare();return Element.relativize(element);},realOffset:Element.Methods.cumulativeScrollOffset,offsetParent:Element.Methods.getOffsetParent,page:Element.Methods.viewportOffset,clone:function(source,target,options){options=options||{};return Element.clonePosition(target,source,options);}};if(!document.getElementsByClassName)document.getElementsByClassName=function(instanceMethods){function iter(name){return name.blank()?null:"[contains(concat(' ', @class, ' '), ' "+name+" ')]";}
276
+ instanceMethods.getElementsByClassName=Prototype.BrowserFeatures.XPath?function(element,className){className=className.toString().strip();var cond=/\s/.test(className)?$w(className).map(iter).join(''):iter(className);return cond?document._getElementsByXPath('.//*'+cond,element):[];}:function(element,className){className=className.toString().strip();var elements=[],classNames=(/\s/.test(className)?$w(className):null);if(!classNames&&!className)return elements;var nodes=$(element).getElementsByTagName('*');className=' '+className+' ';for(var i=0,child,cn;child=nodes[i];i++){if(child.className&&(cn=' '+child.className+' ')&&(cn.include(className)||(classNames&&classNames.all(function(name){return!name.toString().blank()&&cn.include(' '+name+' ');}))))
277
+ elements.push(Element.extend(child));}
278
+ return elements;};return function(className,parentElement){return $(parentElement||document.body).getElementsByClassName(className);};}(Element.Methods);Element.ClassNames=Class.create();Element.ClassNames.prototype={initialize:function(element){this.element=$(element);},_each:function(iterator){this.element.className.split(/\s+/).select(function(name){return name.length>0;})._each(iterator);},set:function(className){this.element.className=className;},add:function(classNameToAdd){if(this.include(classNameToAdd))return;this.set($A(this).concat(classNameToAdd).join(' '));},remove:function(classNameToRemove){if(!this.include(classNameToRemove))return;this.set($A(this).without(classNameToRemove).join(' '));},toString:function(){return $A(this).join(' ');}};Object.extend(Element.ClassNames.prototype,Enumerable);Element.addMethods();;var Validator=Class.create();Validator.prototype={initialize:function(className,error,test,options){if(typeof test=='function'){this.options=$H(options);this._test=test;}else{this.options=$H(test);this._test=function(){return true};}
279
+ this.error=error||'Validation failed.';this.className=className;},test:function(v,elm){return(this._test(v,elm)&&this.options.all(function(p){return Validator.methods[p.key]?Validator.methods[p.key](v,elm,p.value):true;}));}}
280
+ Validator.methods={pattern:function(v,elm,opt){return Validation.get('IsEmpty').test(v)||opt.test(v)},minLength:function(v,elm,opt){return v.length>=opt},maxLength:function(v,elm,opt){return v.length<=opt},min:function(v,elm,opt){return v>=parseFloat(opt)},max:function(v,elm,opt){return v<=parseFloat(opt)},notOneOf:function(v,elm,opt){return $A(opt).all(function(value){return v!=value;})},oneOf:function(v,elm,opt){return $A(opt).any(function(value){return v==value;})},is:function(v,elm,opt){return v==opt},isNot:function(v,elm,opt){return v!=opt},equalToField:function(v,elm,opt){return v==$F(opt)},notEqualToField:function(v,elm,opt){return v!=$F(opt)},include:function(v,elm,opt){return $A(opt).all(function(value){return Validation.get(value).test(v,elm);})}}
281
+ var Validation=Class.create();Validation.defaultOptions={onSubmit:true,stopOnFirst:false,immediate:false,focusOnError:true,useTitles:false,addClassNameToContainer:false,containerClassName:'.input-box',onFormValidate:function(result,form){},onElementValidate:function(result,elm){}};Validation.prototype={initialize:function(form,options){this.form=$(form);if(!this.form){return;}
282
+ this.options=Object.extend({onSubmit:Validation.defaultOptions.onSubmit,stopOnFirst:Validation.defaultOptions.stopOnFirst,immediate:Validation.defaultOptions.immediate,focusOnError:Validation.defaultOptions.focusOnError,useTitles:Validation.defaultOptions.useTitles,onFormValidate:Validation.defaultOptions.onFormValidate,onElementValidate:Validation.defaultOptions.onElementValidate},options||{});if(this.options.onSubmit)Event.observe(this.form,'submit',this.onSubmit.bind(this),false);if(this.options.immediate){Form.getElements(this.form).each(function(input){if(input.tagName.toLowerCase()=='select'){Event.observe(input,'blur',this.onChange.bindAsEventListener(this));}
283
+ if(input.type.toLowerCase()=='radio'||input.type.toLowerCase()=='checkbox'){Event.observe(input,'click',this.onChange.bindAsEventListener(this));}else{Event.observe(input,'change',this.onChange.bindAsEventListener(this));}},this);}},onChange:function(ev){Validation.isOnChange=true;Validation.validate(Event.element(ev),{useTitle:this.options.useTitles,onElementValidate:this.options.onElementValidate});Validation.isOnChange=false;},onSubmit:function(ev){if(!this.validate())Event.stop(ev);},validate:function(){var result=false;var useTitles=this.options.useTitles;var callback=this.options.onElementValidate;try{if(this.options.stopOnFirst){result=Form.getElements(this.form).all(function(elm){if(elm.hasClassName('local-validation')&&!this.isElementInForm(elm,this.form)){return true;}
284
+ return Validation.validate(elm,{useTitle:useTitles,onElementValidate:callback});},this);}else{result=Form.getElements(this.form).collect(function(elm){if(elm.hasClassName('local-validation')&&!this.isElementInForm(elm,this.form)){return true;}
285
+ return Validation.validate(elm,{useTitle:useTitles,onElementValidate:callback});},this).all();}}catch(e){}
286
+ if(!result&&this.options.focusOnError){try{Form.getElements(this.form).findAll(function(elm){return $(elm).hasClassName('validation-failed')}).first().focus()}
287
+ catch(e){}}
288
+ this.options.onFormValidate(result,this.form);return result;},reset:function(){Form.getElements(this.form).each(Validation.reset);},isElementInForm:function(elm,form){var domForm=elm.up('form');if(domForm==form){return true;}
289
+ return false;}}
290
+ Object.extend(Validation,{validate:function(elm,options){options=Object.extend({useTitle:false,onElementValidate:function(result,elm){}},options||{});elm=$(elm);var cn=$w(elm.className);return result=cn.all(function(value){var test=Validation.test(value,elm,options.useTitle);options.onElementValidate(test,elm);return test;});},insertAdvice:function(elm,advice){var container=$(elm).up('.field-row');if(container){Element.insert(container,{after:advice});}else if(elm.up('td.value')){elm.up('td.value').insert({bottom:advice});}else if(elm.advaiceContainer&&$(elm.advaiceContainer)){$(elm.advaiceContainer).update(advice);}
291
+ else{switch(elm.type.toLowerCase()){case'checkbox':case'radio':var p=elm.parentNode;if(p){Element.insert(p,{'bottom':advice});}else{Element.insert(elm,{'after':advice});}
292
+ break;default:Element.insert(elm,{'after':advice});}}},showAdvice:function(elm,advice,adviceName){if(!elm.advices){elm.advices=new Hash();}
293
+ else{elm.advices.each(function(pair){this.hideAdvice(elm,pair.value);}.bind(this));}
294
+ elm.advices.set(adviceName,advice);if(typeof Effect=='undefined'){advice.style.display='block';}else{if(!advice._adviceAbsolutize){new Effect.Appear(advice,{duration:1});}else{Position.absolutize(advice);advice.show();advice.setStyle({'top':advice._adviceTop,'left':advice._adviceLeft,'width':advice._adviceWidth,'z-index':1000});advice.addClassName('advice-absolute');}}},hideAdvice:function(elm,advice){if(advice!=null)advice.hide();},updateCallback:function(elm,status){if(typeof elm.callbackFunction!='undefined'){eval(elm.callbackFunction+'(\''+elm.id+'\',\''+status+'\')');}},ajaxError:function(elm,errorMsg){var name='validate-ajax';var advice=Validation.getAdvice(name,elm);if(advice==null){advice=this.createAdvice(name,elm,false,errorMsg);}
295
+ this.showAdvice(elm,advice,'validate-ajax');this.updateCallback(elm,'failed');elm.addClassName('validation-failed');elm.addClassName('validate-ajax');if(Validation.defaultOptions.addClassNameToContainer&&Validation.defaultOptions.containerClassName!=''){var container=elm.up(Validation.defaultOptions.containerClassName);if(container&&this.allowContainerClassName(elm)){container.removeClassName('validation-passed');container.addClassName('validation-error');}}},allowContainerClassName:function(elm){if(elm.type=='radio'||elm.type=='checkbox'){return elm.hasClassName('change-container-classname');}
296
+ return true;},test:function(name,elm,useTitle){var v=Validation.get(name);var prop='__advice'+name.camelize();try{if(Validation.isVisible(elm)&&!v.test($F(elm),elm)){var advice=Validation.getAdvice(name,elm);if(advice==null){advice=this.createAdvice(name,elm,useTitle);}
297
+ this.showAdvice(elm,advice,name);this.updateCallback(elm,'failed');elm[prop]=1;if(!elm.advaiceContainer){elm.removeClassName('validation-passed');elm.addClassName('validation-failed');}
298
+ if(Validation.defaultOptions.addClassNameToContainer&&Validation.defaultOptions.containerClassName!=''){var container=elm.up(Validation.defaultOptions.containerClassName);if(container&&this.allowContainerClassName(elm)){container.removeClassName('validation-passed');container.addClassName('validation-error');}}
299
+ return false;}else{var advice=Validation.getAdvice(name,elm);this.hideAdvice(elm,advice);this.updateCallback(elm,'passed');elm[prop]='';elm.removeClassName('validation-failed');elm.addClassName('validation-passed');if(Validation.defaultOptions.addClassNameToContainer&&Validation.defaultOptions.containerClassName!=''){var container=elm.up(Validation.defaultOptions.containerClassName);if(container&&!container.down('.validation-failed')&&this.allowContainerClassName(elm)){if(!Validation.get('IsEmpty').test(elm.value)||!this.isVisible(elm)){container.addClassName('validation-passed');}else{container.removeClassName('validation-passed');}
300
+ container.removeClassName('validation-error');}}
301
+ return true;}}catch(e){throw(e)}},isVisible:function(elm){while(elm.tagName!='BODY'){if(!$(elm).visible())return false;elm=elm.parentNode;}
302
+ return true;},getAdvice:function(name,elm){return $('advice-'+name+'-'+Validation.getElmID(elm))||$('advice-'+Validation.getElmID(elm));},createAdvice:function(name,elm,useTitle,customError){var v=Validation.get(name);var errorMsg=useTitle?((elm&&elm.title)?elm.title:v.error):v.error;if(customError){errorMsg=customError;}
303
+ try{if(Translator){errorMsg=Translator.translate(errorMsg);}}
304
+ catch(e){}
305
+ advice='<div class="validation-advice" id="advice-'+name+'-'+Validation.getElmID(elm)+'" style="display:none">'+errorMsg+'</div>'
306
+ Validation.insertAdvice(elm,advice);advice=Validation.getAdvice(name,elm);if($(elm).hasClassName('absolute-advice')){var dimensions=$(elm).getDimensions();var originalPosition=Position.cumulativeOffset(elm);advice._adviceTop=(originalPosition[1]+dimensions.height)+'px';advice._adviceLeft=(originalPosition[0])+'px';advice._adviceWidth=(dimensions.width)+'px';advice._adviceAbsolutize=true;}
307
+ return advice;},getElmID:function(elm){return elm.id?elm.id:elm.name;},reset:function(elm){elm=$(elm);var cn=$w(elm.className);cn.each(function(value){var prop='__advice'+value.camelize();if(elm[prop]){var advice=Validation.getAdvice(value,elm);if(advice){advice.hide();}
308
+ elm[prop]='';}
309
+ elm.removeClassName('validation-failed');elm.removeClassName('validation-passed');if(Validation.defaultOptions.addClassNameToContainer&&Validation.defaultOptions.containerClassName!=''){var container=elm.up(Validation.defaultOptions.containerClassName);if(container){container.removeClassName('validation-passed');container.removeClassName('validation-error');}}});},add:function(className,error,test,options){var nv={};nv[className]=new Validator(className,error,test,options);Object.extend(Validation.methods,nv);},addAllThese:function(validators){var nv={};$A(validators).each(function(value){nv[value[0]]=new Validator(value[0],value[1],value[2],(value.length>3?value[3]:{}));});Object.extend(Validation.methods,nv);},get:function(name){return Validation.methods[name]?Validation.methods[name]:Validation.methods['_LikeNoIDIEverSaw_'];},methods:{'_LikeNoIDIEverSaw_':new Validator('_LikeNoIDIEverSaw_','',{})}});Validation.add('IsEmpty','',function(v){return(v==''||(v==null)||(v.length==0)||/^\s+$/.test(v));});Validation.addAllThese([['validate-select','Please select an option.',function(v){return((v!="none")&&(v!=null)&&(v.length!=0));}],['required-entry','This is a required field.',function(v){return!Validation.get('IsEmpty').test(v);}],['validate-number','Please enter a valid number in this field.',function(v){return Validation.get('IsEmpty').test(v)||(!isNaN(parseNumber(v))&&!/^\s+$/.test(parseNumber(v)));}],['validate-digits','Please use numbers only in this field. please avoid spaces or other characters such as dots or commas.',function(v){return Validation.get('IsEmpty').test(v)||!/[^\d]/.test(v);}],['validate-alpha','Please use letters only (a-z or A-Z) in this field.',function(v){return Validation.get('IsEmpty').test(v)||/^[a-zA-Z]+$/.test(v)}],['validate-code','Please use only letters (a-z), numbers (0-9) or underscore(_) in this field, first character should be a letter.',function(v){return Validation.get('IsEmpty').test(v)||/^[a-z]+[a-z0-9_]+$/.test(v)}],['validate-alphanum','Please use only letters (a-z or A-Z) or numbers (0-9) only in this field. No spaces or other characters are allowed.',function(v){return Validation.get('IsEmpty').test(v)||/^[a-zA-Z0-9]+$/.test(v)
310
+ /*/\W/.test(v)*/
311
+ }],['validate-street','Please use only letters (a-z or A-Z) or numbers (0-9) or spaces and # only in this field.',function(v){return Validation.get('IsEmpty').test(v)||/^[ \w]{3,}([A-Za-z]\.)?([ \w]*\#\d+)?(\r\n| )[ \w]{3,}/.test(v)}],['validate-phoneStrict','Please enter a valid phone number. For example (123) 456-7890 or 123-456-7890.',function(v){return Validation.get('IsEmpty').test(v)||/^(\()?\d{3}(\))?(-|\s)?\d{3}(-|\s)\d{4}$/.test(v);}],['validate-phoneLax','Please enter a valid phone number. For example (123) 456-7890 or 123-456-7890.',function(v){return Validation.get('IsEmpty').test(v)||/^((\d[-. ]?)?((\(\d{3}\))|\d{3}))?[-. ]?\d{3}[-. ]?\d{4}$/.test(v);}],['validate-fax','Please enter a valid fax number. For example (123) 456-7890 or 123-456-7890.',function(v){return Validation.get('IsEmpty').test(v)||/^(\()?\d{3}(\))?(-|\s)?\d{3}(-|\s)\d{4}$/.test(v);}],['validate-date','Please enter a valid date.',function(v){var test=new Date(v);return Validation.get('IsEmpty').test(v)||!isNaN(test);}],['validate-email','Please enter a valid email address. For example johndoe@domain.com.',function(v){return Validation.get('IsEmpty').test(v)||/^[a-z0-9,!\#\$%&'\*\+\/=\?\^_`\{\|\}~-]+(\.[a-z0-9,!\#\$%&'\*\+\/=\?\^_`\{\|\}~-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*\.([a-z]{2,})/i.test(v)}],['validate-emailSender','Please use only visible characters and spaces.',function(v){return Validation.get('IsEmpty').test(v)||/^[\S ]+$/.test(v)}],['validate-password','Please enter 6 or more characters. Leading or trailing spaces will be ignored.',function(v){var pass=v.strip();return!(pass.length>0&&pass.length<6);}],['validate-admin-password','Please enter 7 or more characters. Password should contain both numeric and alphabetic characters.',function(v){var pass=v.strip();if(0==pass.length){return true;}
312
+ if(!(/[a-z]/i.test(v))||!(/[0-9]/.test(v))){return false;}
313
+ return!(pass.length<7);}],['validate-cpassword','Please make sure your passwords match.',function(v){var conf=$('confirmation')?$('confirmation'):$$('.validate-cpassword')[0];var pass=false;if($('password')){pass=$('password');}
314
+ var passwordElements=$$('.validate-password');for(var i=0;i<passwordElements.size();i++){var passwordElement=passwordElements[i];if(passwordElement.up('form').id==conf.up('form').id){pass=passwordElement;}}
315
+ if($$('.validate-admin-password').size()){pass=$$('.validate-admin-password')[0];}
316
+ return(pass.value==conf.value);}],['validate-url','Please enter a valid URL. http:// is required',function(v){return Validation.get('IsEmpty').test(v)||/^(http|https|ftp):\/\/(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+)(:(\d+))?\/?/i.test(v)}],['validate-clean-url','Please enter a valid URL. For example http://www.example.com or www.example.com',function(v){return Validation.get('IsEmpty').test(v)||/^(http|https|ftp):\/\/(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+.(com|org|net|dk|at|us|tv|info|uk|co.uk|biz|se)$)(:(\d+))?\/?/i.test(v)||/^(www)((\.[A-Z0-9][A-Z0-9_-]*)+.(com|org|net|dk|at|us|tv|info|uk|co.uk|biz|se)$)(:(\d+))?\/?/i.test(v)}],['validate-identifier','Please enter a valid URL Key. For example "example-page", "example-page.html" or "anotherlevel/example-page"',function(v){return Validation.get('IsEmpty').test(v)||/^[A-Z0-9][A-Z0-9_\/-]+(\.[A-Z0-9_-]+)*$/i.test(v)}],['validate-xml-identifier','Please enter a valid XML-identifier. For example something_1, block5, id-4',function(v){return Validation.get('IsEmpty').test(v)||/^[A-Z][A-Z0-9_\/-]*$/i.test(v)}],['validate-ssn','Please enter a valid social security number. For example 123-45-6789.',function(v){return Validation.get('IsEmpty').test(v)||/^\d{3}-?\d{2}-?\d{4}$/.test(v);}],['validate-zip','Please enter a valid zip code. For example 90602 or 90602-1234.',function(v){return Validation.get('IsEmpty').test(v)||/(^\d{5}$)|(^\d{5}-\d{4}$)/.test(v);}],['validate-zip-international','Please enter a valid zip code.',function(v){return true;}],['validate-date-au','Please use this date format: dd/mm/yyyy. For example 17/03/2006 for the 17th of March, 2006.',function(v){if(Validation.get('IsEmpty').test(v))return true;var regex=/^(\d{2})\/(\d{2})\/(\d{4})$/;if(!regex.test(v))return false;var d=new Date(v.replace(regex,'$2/$1/$3'));return(parseInt(RegExp.$2,10)==(1+d.getMonth()))&&(parseInt(RegExp.$1,10)==d.getDate())&&(parseInt(RegExp.$3,10)==d.getFullYear());}],['validate-currency-dollar','Please enter a valid $ amount. For example $100.00.',function(v){return Validation.get('IsEmpty').test(v)||/^\$?\-?([1-9]{1}[0-9]{0,2}(\,[0-9]{3})*(\.[0-9]{0,2})?|[1-9]{1}\d*(\.[0-9]{0,2})?|0(\.[0-9]{0,2})?|(\.[0-9]{1,2})?)$/.test(v)}],['validate-one-required','Please select one of the above options.',function(v,elm){var p=elm.parentNode;var options=p.getElementsByTagName('INPUT');return $A(options).any(function(elm){return $F(elm);});}],['validate-one-required-by-name','Please select one of the options.',function(v,elm){var inputs=$$('input[name="'+elm.name.replace(/([\\"])/g,'\\$1')+'"]');var error=1;for(var i=0;i<inputs.length;i++){if((inputs[i].type=='checkbox'||inputs[i].type=='radio')&&inputs[i].checked==true){error=0;}
317
+ if(Validation.isOnChange&&(inputs[i].type=='checkbox'||inputs[i].type=='radio')){Validation.reset(inputs[i]);}}
318
+ if(error==0){return true;}else{return false;}}],['validate-not-negative-number','Please enter a valid number in this field.',function(v){v=parseNumber(v);return(!isNaN(v)&&v>=0);}],['validate-state','Please select State/Province.',function(v){return(v!=0||v=='');}],['validate-new-password','Please enter 6 or more characters. Leading or trailing spaces will be ignored.',function(v){if(!Validation.get('validate-password').test(v))return false;if(Validation.get('IsEmpty').test(v)&&v!='')return false;return true;}],['validate-greater-than-zero','Please enter a number greater than 0 in this field.',function(v){if(v.length)
319
+ return parseFloat(v)>0;else
320
+ return true;}],['validate-zero-or-greater','Please enter a number 0 or greater in this field.',function(v){if(v.length)
321
+ return parseFloat(v)>=0;else
322
+ return true;}],['validate-cc-number','Please enter a valid credit card number.',function(v,elm){var ccTypeContainer=$(elm.id.substr(0,elm.id.indexOf('_cc_number'))+'_cc_type');if(ccTypeContainer&&typeof Validation.creditCartTypes.get(ccTypeContainer.value)!='undefined'&&Validation.creditCartTypes.get(ccTypeContainer.value)[2]==false){if(!Validation.get('IsEmpty').test(v)&&Validation.get('validate-digits').test(v)){return true;}else{return false;}}
323
+ return validateCreditCard(v);}],['validate-cc-type','Credit card number doesn\'t match credit card type',function(v,elm){elm.value=removeDelimiters(elm.value);v=removeDelimiters(v);var ccTypeContainer=$(elm.id.substr(0,elm.id.indexOf('_cc_number'))+'_cc_type');if(!ccTypeContainer){return true;}
324
+ var ccType=ccTypeContainer.value;if(typeof Validation.creditCartTypes.get(ccType)=='undefined'){return false;}
325
+ if(Validation.creditCartTypes.get(ccType)[0]==false){return true;}
326
+ var ccMatchedType='';Validation.creditCartTypes.each(function(pair){if(pair.value[0]&&v.match(pair.value[0])){ccMatchedType=pair.key;throw $break;}});if(ccMatchedType!=ccType){return false;}
327
+ if(ccTypeContainer.hasClassName('validation-failed')&&Validation.isOnChange){Validation.validate(ccTypeContainer);}
328
+ return true;}],['validate-cc-type-select','Card type doesn\'t match credit card number',function(v,elm){var ccNumberContainer=$(elm.id.substr(0,elm.id.indexOf('_cc_type'))+'_cc_number');if(Validation.isOnChange&&Validation.get('IsEmpty').test(ccNumberContainer.value)){return true;}
329
+ if(Validation.get('validate-cc-type').test(ccNumberContainer.value,ccNumberContainer)){Validation.validate(ccNumberContainer);}
330
+ return Validation.get('validate-cc-type').test(ccNumberContainer.value,ccNumberContainer);}],['validate-cc-exp','Incorrect credit card expiration date',function(v,elm){var ccExpMonth=v;var ccExpYear=$(elm.id.substr(0,elm.id.indexOf('_expiration'))+'_expiration_yr').value;var currentTime=new Date();var currentMonth=currentTime.getMonth()+1;var currentYear=currentTime.getFullYear();if(ccExpMonth<currentMonth&&ccExpYear==currentYear){return false;}
331
+ return true;}],['validate-cc-cvn','Please enter a valid credit card verification number.',function(v,elm){var ccTypeContainer=$(elm.id.substr(0,elm.id.indexOf('_cc_cid'))+'_cc_type');if(!ccTypeContainer){return true;}
332
+ var ccType=ccTypeContainer.value;if(typeof Validation.creditCartTypes.get(ccType)=='undefined'){return false;}
333
+ var re=Validation.creditCartTypes.get(ccType)[1];if(v.match(re)){return true;}
334
+ return false;}],['validate-ajax','',function(v,elm){return true;}],['validate-data','Please use only letters (a-z or A-Z), numbers (0-9) or underscore(_) in this field, first character should be a letter.',function(v){if(v!=''&&v){return /^[A-Za-z]+[A-Za-z0-9_]+$/.test(v);}
335
+ return true;}],['validate-css-length','Please input a valid CSS-length. For example 100px or 77pt or 20em or .5ex or 50%',function(v){if(v!=''&&v){return /^[0-9\.]+(px|pt|em|ex|%)?$/.test(v)&&(!(/\..*\./.test(v)))&&!(/\.$/.test(v));}
336
+ return true;}],['validate-length','Maximum length exceeded.',function(v,elm){var re=new RegExp(/^maximum-length-[0-9]+$/);var result=true;$w(elm.className).each(function(name,index){if(name.match(re)&&result){var length=name.split('-')[2];result=(v.length<=length);}});return result;}],['validate-percents','Please enter a number lower than 100',{max:100}]]);function validateCreditCard(s){var v="0123456789";var w="";for(i=0;i<s.length;i++){x=s.charAt(i);if(v.indexOf(x,0)!=-1)
337
+ w+=x;}
338
+ j=w.length/2;k=Math.floor(j);m=Math.ceil(j)-k;c=0;for(i=0;i<k;i++){a=w.charAt(i*2+m)*2;c+=a>9?Math.floor(a/10+a%10):a;}
339
+ for(i=0;i<k+m;i++)c+=w.charAt(i*2+1-m)*1;return(c%10==0);}
340
+ function removeDelimiters(v){v=v.replace(/\s/g,'');v=v.replace(/\-/g,'');return v;}
341
+ function parseNumber(v)
342
+ {if(typeof v!='string'){return parseFloat(v);}
343
+ var isDot=v.indexOf('.');var isComa=v.indexOf(',');if(isDot!=-1&&isComa!=-1){if(isComa>isDot){v=v.replace('.','').replace(',','.');}
344
+ else{v=v.replace(',','');}}
345
+ else if(isComa!=-1){v=v.replace(',','.');}
346
+ return parseFloat(v);}
347
+ Validation.creditCartTypes=$H({'VI':[new RegExp('^4[0-9]{12}([0-9]{3})?$'),new RegExp('^[0-9]{3}$'),true],'MC':[new RegExp('^5[1-5][0-9]{14}$'),new RegExp('^[0-9]{3}$'),true],'AE':[new RegExp('^3[47][0-9]{13}$'),new RegExp('^[0-9]{4}$'),true],'DI':[new RegExp('^6011[0-9]{12}$'),new RegExp('^[0-9]{3}$'),true],'SS':[new RegExp('^((6759[0-9]{12})|(49[013][1356][0-9]{13})|(633[34][0-9]{12})|(633110[0-9]{10})|(564182[0-9]{10}))([0-9]{2,3})?$'),new RegExp('^([0-9]{3}|[0-9]{4})?$'),true],'OT':[false,new RegExp('^([0-9]{3}|[0-9]{4})?$'),false]});;var Builder={NODEMAP:{AREA:'map',CAPTION:'table',COL:'table',COLGROUP:'table',LEGEND:'fieldset',OPTGROUP:'select',OPTION:'select',PARAM:'object',TBODY:'table',TD:'table',TFOOT:'table',TH:'table',THEAD:'table',TR:'table'},node:function(elementName){elementName=elementName.toUpperCase();var parentTag=this.NODEMAP[elementName]||'div';var parentElement=document.createElement(parentTag);try{parentElement.innerHTML="<"+elementName+"></"+elementName+">";}catch(e){}
348
+ var element=parentElement.firstChild||null;if(element&&(element.tagName.toUpperCase()!=elementName))
349
+ element=element.getElementsByTagName(elementName)[0];if(!element)element=document.createElement(elementName);if(!element)return;if(arguments[1])
350
+ if(this._isStringOrNumber(arguments[1])||(arguments[1]instanceof Array)||arguments[1].tagName){this._children(element,arguments[1]);}else{var attrs=this._attributes(arguments[1]);if(attrs.length){try{parentElement.innerHTML="<"+elementName+" "+
351
+ attrs+"></"+elementName+">";}catch(e){}
352
+ element=parentElement.firstChild||null;if(!element){element=document.createElement(elementName);for(attr in arguments[1])
353
+ element[attr=='class'?'className':attr]=arguments[1][attr];}
354
+ if(element.tagName.toUpperCase()!=elementName)
355
+ element=parentElement.getElementsByTagName(elementName)[0];}}
356
+ if(arguments[2])
357
+ this._children(element,arguments[2]);return $(element);},_text:function(text){return document.createTextNode(text);},ATTR_MAP:{'className':'class','htmlFor':'for'},_attributes:function(attributes){var attrs=[];for(attribute in attributes)
358
+ attrs.push((attribute in this.ATTR_MAP?this.ATTR_MAP[attribute]:attribute)+'="'+attributes[attribute].toString().escapeHTML().gsub(/"/,'&quot;')+'"');return attrs.join(" ");},_children:function(element,children){if(children.tagName){element.appendChild(children);return;}
359
+ if(typeof children=='object'){children.flatten().each(function(e){if(typeof e=='object')
360
+ element.appendChild(e);else
361
+ if(Builder._isStringOrNumber(e))
362
+ element.appendChild(Builder._text(e));});}else
363
+ if(Builder._isStringOrNumber(children))
364
+ element.appendChild(Builder._text(children));},_isStringOrNumber:function(param){return(typeof param=='string'||typeof param=='number');},build:function(html){var element=this.node('div');$(element).update(html.strip());return element.down();},dump:function(scope){if(typeof scope!='object'&&typeof scope!='function')scope=window;var tags=("A ABBR ACRONYM ADDRESS APPLET AREA B BASE BASEFONT BDO BIG BLOCKQUOTE BODY "+"BR BUTTON CAPTION CENTER CITE CODE COL COLGROUP DD DEL DFN DIR DIV DL DT EM FIELDSET "+"FONT FORM FRAME FRAMESET H1 H2 H3 H4 H5 H6 HEAD HR HTML I IFRAME IMG INPUT INS ISINDEX "+"KBD LABEL LEGEND LI LINK MAP MENU META NOFRAMES NOSCRIPT OBJECT OL OPTGROUP OPTION P "+"PARAM PRE Q S SAMP SCRIPT SELECT SMALL SPAN STRIKE STRONG STYLE SUB SUP TABLE TBODY TD "+"TEXTAREA TFOOT TH THEAD TITLE TR TT U UL VAR").split(/\s+/);tags.each(function(tag){scope[tag]=function(){return Builder.node.apply(Builder,[tag].concat($A(arguments)));};});}};;String.prototype.parseColor=function(){var color='#';if(this.slice(0,4)=='rgb('){var cols=this.slice(4,this.length-1).split(',');var i=0;do{color+=parseInt(cols[i]).toColorPart()}while(++i<3);}else{if(this.slice(0,1)=='#'){if(this.length==4)for(var i=1;i<4;i++)color+=(this.charAt(i)+this.charAt(i)).toLowerCase();if(this.length==7)color=this.toLowerCase();}}
365
+ return(color.length==7?color:(arguments[0]||this));};Element.collectTextNodes=function(element){return $A($(element).childNodes).collect(function(node){return(node.nodeType==3?node.nodeValue:(node.hasChildNodes()?Element.collectTextNodes(node):''));}).flatten().join('');};Element.collectTextNodesIgnoreClass=function(element,className){return $A($(element).childNodes).collect(function(node){return(node.nodeType==3?node.nodeValue:((node.hasChildNodes()&&!Element.hasClassName(node,className))?Element.collectTextNodesIgnoreClass(node,className):''));}).flatten().join('');};Element.setContentZoom=function(element,percent){element=$(element);element.setStyle({fontSize:(percent/100)+'em'});if(Prototype.Browser.WebKit)window.scrollBy(0,0);return element;};Element.getInlineOpacity=function(element){return $(element).style.opacity||'';};Element.forceRerendering=function(element){try{element=$(element);var n=document.createTextNode(' ');element.appendChild(n);element.removeChild(n);}catch(e){}};var Effect={_elementDoesNotExistError:{name:'ElementDoesNotExistError',message:'The specified DOM element does not exist, but is required for this effect to operate'},Transitions:{linear:Prototype.K,sinoidal:function(pos){return(-Math.cos(pos*Math.PI)/2)+.5;},reverse:function(pos){return 1-pos;},flicker:function(pos){var pos=((-Math.cos(pos*Math.PI)/4)+.75)+Math.random()/4;return pos>1?1:pos;},wobble:function(pos){return(-Math.cos(pos*Math.PI*(9*pos))/2)+.5;},pulse:function(pos,pulses){return(-Math.cos((pos*((pulses||5)-.5)*2)*Math.PI)/2)+.5;},spring:function(pos){return 1-(Math.cos(pos*4.5*Math.PI)*Math.exp(-pos*6));},none:function(pos){return 0;},full:function(pos){return 1;}},DefaultOptions:{duration:1.0,fps:100,sync:false,from:0.0,to:1.0,delay:0.0,queue:'parallel'},tagifyText:function(element){var tagifyStyle='position:relative';if(Prototype.Browser.IE)tagifyStyle+=';zoom:1';element=$(element);$A(element.childNodes).each(function(child){if(child.nodeType==3){child.nodeValue.toArray().each(function(character){element.insertBefore(new Element('span',{style:tagifyStyle}).update(character==' '?String.fromCharCode(160):character),child);});Element.remove(child);}});},multiple:function(element,effect){var elements;if(((typeof element=='object')||Object.isFunction(element))&&(element.length))
366
+ elements=element;else
367
+ elements=$(element).childNodes;var options=Object.extend({speed:0.1,delay:0.0},arguments[2]||{});var masterDelay=options.delay;$A(elements).each(function(element,index){new effect(element,Object.extend(options,{delay:index*options.speed+masterDelay}));});},PAIRS:{'slide':['SlideDown','SlideUp'],'blind':['BlindDown','BlindUp'],'appear':['Appear','Fade']},toggle:function(element,effect){element=$(element);effect=(effect||'appear').toLowerCase();var options=Object.extend({queue:{position:'end',scope:(element.id||'global'),limit:1}},arguments[2]||{});Effect[element.visible()?Effect.PAIRS[effect][1]:Effect.PAIRS[effect][0]](element,options);}};Effect.DefaultOptions.transition=Effect.Transitions.sinoidal;Effect.ScopedQueue=Class.create(Enumerable,{initialize:function(){this.effects=[];this.interval=null;},_each:function(iterator){this.effects._each(iterator);},add:function(effect){var timestamp=new Date().getTime();var position=Object.isString(effect.options.queue)?effect.options.queue:effect.options.queue.position;switch(position){case'front':this.effects.findAll(function(e){return e.state=='idle'}).each(function(e){e.startOn+=effect.finishOn;e.finishOn+=effect.finishOn;});break;case'with-last':timestamp=this.effects.pluck('startOn').max()||timestamp;break;case'end':timestamp=this.effects.pluck('finishOn').max()||timestamp;break;}
368
+ effect.startOn+=timestamp;effect.finishOn+=timestamp;if(!effect.options.queue.limit||(this.effects.length<effect.options.queue.limit))
369
+ this.effects.push(effect);if(!this.interval)
370
+ this.interval=setInterval(this.loop.bind(this),15);},remove:function(effect){this.effects=this.effects.reject(function(e){return e==effect});if(this.effects.length==0){clearInterval(this.interval);this.interval=null;}},loop:function(){var timePos=new Date().getTime();for(var i=0,len=this.effects.length;i<len;i++)
371
+ this.effects[i]&&this.effects[i].loop(timePos);}});Effect.Queues={instances:$H(),get:function(queueName){if(!Object.isString(queueName))return queueName;return this.instances.get(queueName)||this.instances.set(queueName,new Effect.ScopedQueue());}};Effect.Queue=Effect.Queues.get('global');Effect.Base=Class.create({position:null,start:function(options){function codeForEvent(options,eventName){return((options[eventName+'Internal']?'this.options.'+eventName+'Internal(this);':'')+
372
+ (options[eventName]?'this.options.'+eventName+'(this);':''));}
373
+ if(options&&options.transition===false)options.transition=Effect.Transitions.linear;this.options=Object.extend(Object.extend({},Effect.DefaultOptions),options||{});this.currentFrame=0;this.state='idle';this.startOn=this.options.delay*1000;this.finishOn=this.startOn+(this.options.duration*1000);this.fromToDelta=this.options.to-this.options.from;this.totalTime=this.finishOn-this.startOn;this.totalFrames=this.options.fps*this.options.duration;this.render=(function(){function dispatch(effect,eventName){if(effect.options[eventName+'Internal'])
374
+ effect.options[eventName+'Internal'](effect);if(effect.options[eventName])
375
+ effect.options[eventName](effect);}
376
+ return function(pos){if(this.state==="idle"){this.state="running";dispatch(this,'beforeSetup');if(this.setup)this.setup();dispatch(this,'afterSetup');}
377
+ if(this.state==="running"){pos=(this.options.transition(pos)*this.fromToDelta)+this.options.from;this.position=pos;dispatch(this,'beforeUpdate');if(this.update)this.update(pos);dispatch(this,'afterUpdate');}};})();this.event('beforeStart');if(!this.options.sync)
378
+ Effect.Queues.get(Object.isString(this.options.queue)?'global':this.options.queue.scope).add(this);},loop:function(timePos){if(timePos>=this.startOn){if(timePos>=this.finishOn){this.render(1.0);this.cancel();this.event('beforeFinish');if(this.finish)this.finish();this.event('afterFinish');return;}
379
+ var pos=(timePos-this.startOn)/this.totalTime,frame=(pos*this.totalFrames).round();if(frame>this.currentFrame){this.render(pos);this.currentFrame=frame;}}},cancel:function(){if(!this.options.sync)
380
+ Effect.Queues.get(Object.isString(this.options.queue)?'global':this.options.queue.scope).remove(this);this.state='finished';},event:function(eventName){if(this.options[eventName+'Internal'])this.options[eventName+'Internal'](this);if(this.options[eventName])this.options[eventName](this);},inspect:function(){var data=$H();for(property in this)
381
+ if(!Object.isFunction(this[property]))data.set(property,this[property]);return'#<Effect:'+data.inspect()+',options:'+$H(this.options).inspect()+'>';}});Effect.Parallel=Class.create(Effect.Base,{initialize:function(effects){this.effects=effects||[];this.start(arguments[1]);},update:function(position){this.effects.invoke('render',position);},finish:function(position){this.effects.each(function(effect){effect.render(1.0);effect.cancel();effect.event('beforeFinish');if(effect.finish)effect.finish(position);effect.event('afterFinish');});}});Effect.Tween=Class.create(Effect.Base,{initialize:function(object,from,to){object=Object.isString(object)?$(object):object;var args=$A(arguments),method=args.last(),options=args.length==5?args[3]:null;this.method=Object.isFunction(method)?method.bind(object):Object.isFunction(object[method])?object[method].bind(object):function(value){object[method]=value};this.start(Object.extend({from:from,to:to},options||{}));},update:function(position){this.method(position);}});Effect.Event=Class.create(Effect.Base,{initialize:function(){this.start(Object.extend({duration:0},arguments[0]||{}));},update:Prototype.emptyFunction});Effect.Opacity=Class.create(Effect.Base,{initialize:function(element){this.element=$(element);if(!this.element)throw(Effect._elementDoesNotExistError);if(Prototype.Browser.IE&&(!this.element.currentStyle.hasLayout))
382
+ this.element.setStyle({zoom:1});var options=Object.extend({from:this.element.getOpacity()||0.0,to:1.0},arguments[1]||{});this.start(options);},update:function(position){this.element.setOpacity(position);}});Effect.Move=Class.create(Effect.Base,{initialize:function(element){this.element=$(element);if(!this.element)throw(Effect._elementDoesNotExistError);var options=Object.extend({x:0,y:0,mode:'relative'},arguments[1]||{});this.start(options);},setup:function(){this.element.makePositioned();this.originalLeft=parseFloat(this.element.getStyle('left')||'0');this.originalTop=parseFloat(this.element.getStyle('top')||'0');if(this.options.mode=='absolute'){this.options.x=this.options.x-this.originalLeft;this.options.y=this.options.y-this.originalTop;}},update:function(position){this.element.setStyle({left:(this.options.x*position+this.originalLeft).round()+'px',top:(this.options.y*position+this.originalTop).round()+'px'});}});Effect.MoveBy=function(element,toTop,toLeft){return new Effect.Move(element,Object.extend({x:toLeft,y:toTop},arguments[3]||{}));};Effect.Scale=Class.create(Effect.Base,{initialize:function(element,percent){this.element=$(element);if(!this.element)throw(Effect._elementDoesNotExistError);var options=Object.extend({scaleX:true,scaleY:true,scaleContent:true,scaleFromCenter:false,scaleMode:'box',scaleFrom:100.0,scaleTo:percent},arguments[2]||{});this.start(options);},setup:function(){this.restoreAfterFinish=this.options.restoreAfterFinish||false;this.elementPositioning=this.element.getStyle('position');this.originalStyle={};['top','left','width','height','fontSize'].each(function(k){this.originalStyle[k]=this.element.style[k];}.bind(this));this.originalTop=this.element.offsetTop;this.originalLeft=this.element.offsetLeft;var fontSize=this.element.getStyle('font-size')||'100%';['em','px','%','pt'].each(function(fontSizeType){if(fontSize.indexOf(fontSizeType)>0){this.fontSize=parseFloat(fontSize);this.fontSizeType=fontSizeType;}}.bind(this));this.factor=(this.options.scaleTo-this.options.scaleFrom)/100;this.dims=null;if(this.options.scaleMode=='box')
383
+ this.dims=[this.element.offsetHeight,this.element.offsetWidth];if(/^content/.test(this.options.scaleMode))
384
+ this.dims=[this.element.scrollHeight,this.element.scrollWidth];if(!this.dims)
385
+ this.dims=[this.options.scaleMode.originalHeight,this.options.scaleMode.originalWidth];},update:function(position){var currentScale=(this.options.scaleFrom/100.0)+(this.factor*position);if(this.options.scaleContent&&this.fontSize)
386
+ this.element.setStyle({fontSize:this.fontSize*currentScale+this.fontSizeType});this.setDimensions(this.dims[0]*currentScale,this.dims[1]*currentScale);},finish:function(position){if(this.restoreAfterFinish)this.element.setStyle(this.originalStyle);},setDimensions:function(height,width){var d={};if(this.options.scaleX)d.width=width.round()+'px';if(this.options.scaleY)d.height=height.round()+'px';if(this.options.scaleFromCenter){var topd=(height-this.dims[0])/2;var leftd=(width-this.dims[1])/2;if(this.elementPositioning=='absolute'){if(this.options.scaleY)d.top=this.originalTop-topd+'px';if(this.options.scaleX)d.left=this.originalLeft-leftd+'px';}else{if(this.options.scaleY)d.top=-topd+'px';if(this.options.scaleX)d.left=-leftd+'px';}}
387
+ this.element.setStyle(d);}});Effect.Highlight=Class.create(Effect.Base,{initialize:function(element){this.element=$(element);if(!this.element)throw(Effect._elementDoesNotExistError);var options=Object.extend({startcolor:'#ffff99'},arguments[1]||{});this.start(options);},setup:function(){if(this.element.getStyle('display')=='none'){this.cancel();return;}
388
+ this.oldStyle={};if(!this.options.keepBackgroundImage){this.oldStyle.backgroundImage=this.element.getStyle('background-image');this.element.setStyle({backgroundImage:'none'});}
389
+ if(!this.options.endcolor)
390
+ this.options.endcolor=this.element.getStyle('background-color').parseColor('#ffffff');if(!this.options.restorecolor)
391
+ this.options.restorecolor=this.element.getStyle('background-color');this._base=$R(0,2).map(function(i){return parseInt(this.options.startcolor.slice(i*2+1,i*2+3),16)}.bind(this));this._delta=$R(0,2).map(function(i){return parseInt(this.options.endcolor.slice(i*2+1,i*2+3),16)-this._base[i]}.bind(this));},update:function(position){this.element.setStyle({backgroundColor:$R(0,2).inject('#',function(m,v,i){return m+((this._base[i]+(this._delta[i]*position)).round().toColorPart());}.bind(this))});},finish:function(){this.element.setStyle(Object.extend(this.oldStyle,{backgroundColor:this.options.restorecolor}));}});Effect.ScrollTo=function(element){var options=arguments[1]||{},scrollOffsets=document.viewport.getScrollOffsets(),elementOffsets=$(element).cumulativeOffset();if(options.offset)elementOffsets[1]+=options.offset;return new Effect.Tween(null,scrollOffsets.top,elementOffsets[1],options,function(p){scrollTo(scrollOffsets.left,p.round());});};Effect.Fade=function(element){element=$(element);var oldOpacity=element.getInlineOpacity();var options=Object.extend({from:element.getOpacity()||1.0,to:0.0,afterFinishInternal:function(effect){if(effect.options.to!=0)return;effect.element.hide().setStyle({opacity:oldOpacity});}},arguments[1]||{});return new Effect.Opacity(element,options);};Effect.Appear=function(element){element=$(element);var options=Object.extend({from:(element.getStyle('display')=='none'?0.0:element.getOpacity()||0.0),to:1.0,afterFinishInternal:function(effect){effect.element.forceRerendering();},beforeSetup:function(effect){effect.element.setOpacity(effect.options.from).show();}},arguments[1]||{});return new Effect.Opacity(element,options);};Effect.Puff=function(element){element=$(element);var oldStyle={opacity:element.getInlineOpacity(),position:element.getStyle('position'),top:element.style.top,left:element.style.left,width:element.style.width,height:element.style.height};return new Effect.Parallel([new Effect.Scale(element,200,{sync:true,scaleFromCenter:true,scaleContent:true,restoreAfterFinish:true}),new Effect.Opacity(element,{sync:true,to:0.0})],Object.extend({duration:1.0,beforeSetupInternal:function(effect){Position.absolutize(effect.effects[0].element);},afterFinishInternal:function(effect){effect.effects[0].element.hide().setStyle(oldStyle);}},arguments[1]||{}));};Effect.BlindUp=function(element){element=$(element);element.makeClipping();return new Effect.Scale(element,0,Object.extend({scaleContent:false,scaleX:false,restoreAfterFinish:true,afterFinishInternal:function(effect){effect.element.hide().undoClipping();}},arguments[1]||{}));};Effect.BlindDown=function(element){element=$(element);var elementDimensions=element.getDimensions();return new Effect.Scale(element,100,Object.extend({scaleContent:false,scaleX:false,scaleFrom:0,scaleMode:{originalHeight:elementDimensions.height,originalWidth:elementDimensions.width},restoreAfterFinish:true,afterSetup:function(effect){effect.element.makeClipping().setStyle({height:'0px'}).show();},afterFinishInternal:function(effect){effect.element.undoClipping();}},arguments[1]||{}));};Effect.SwitchOff=function(element){element=$(element);var oldOpacity=element.getInlineOpacity();return new Effect.Appear(element,Object.extend({duration:0.4,from:0,transition:Effect.Transitions.flicker,afterFinishInternal:function(effect){new Effect.Scale(effect.element,1,{duration:0.3,scaleFromCenter:true,scaleX:false,scaleContent:false,restoreAfterFinish:true,beforeSetup:function(effect){effect.element.makePositioned().makeClipping();},afterFinishInternal:function(effect){effect.element.hide().undoClipping().undoPositioned().setStyle({opacity:oldOpacity});}});}},arguments[1]||{}));};Effect.DropOut=function(element){element=$(element);var oldStyle={top:element.getStyle('top'),left:element.getStyle('left'),opacity:element.getInlineOpacity()};return new Effect.Parallel([new Effect.Move(element,{x:0,y:100,sync:true}),new Effect.Opacity(element,{sync:true,to:0.0})],Object.extend({duration:0.5,beforeSetup:function(effect){effect.effects[0].element.makePositioned();},afterFinishInternal:function(effect){effect.effects[0].element.hide().undoPositioned().setStyle(oldStyle);}},arguments[1]||{}));};Effect.Shake=function(element){element=$(element);var options=Object.extend({distance:20,duration:0.5},arguments[1]||{});var distance=parseFloat(options.distance);var split=parseFloat(options.duration)/10.0;var oldStyle={top:element.getStyle('top'),left:element.getStyle('left')};return new Effect.Move(element,{x:distance,y:0,duration:split,afterFinishInternal:function(effect){new Effect.Move(effect.element,{x:-distance*2,y:0,duration:split*2,afterFinishInternal:function(effect){new Effect.Move(effect.element,{x:distance*2,y:0,duration:split*2,afterFinishInternal:function(effect){new Effect.Move(effect.element,{x:-distance*2,y:0,duration:split*2,afterFinishInternal:function(effect){new Effect.Move(effect.element,{x:distance*2,y:0,duration:split*2,afterFinishInternal:function(effect){new Effect.Move(effect.element,{x:-distance,y:0,duration:split,afterFinishInternal:function(effect){effect.element.undoPositioned().setStyle(oldStyle);}});}});}});}});}});}});};Effect.SlideDown=function(element){element=$(element).cleanWhitespace();var oldInnerBottom=element.down().getStyle('bottom');var elementDimensions=element.getDimensions();return new Effect.Scale(element,100,Object.extend({scaleContent:false,scaleX:false,scaleFrom:window.opera?0:1,scaleMode:{originalHeight:elementDimensions.height,originalWidth:elementDimensions.width},restoreAfterFinish:true,afterSetup:function(effect){effect.element.makePositioned();effect.element.down().makePositioned();if(window.opera)effect.element.setStyle({top:''});effect.element.makeClipping().setStyle({height:'0px'}).show();},afterUpdateInternal:function(effect){effect.element.down().setStyle({bottom:(effect.dims[0]-effect.element.clientHeight)+'px'});},afterFinishInternal:function(effect){effect.element.undoClipping().undoPositioned();effect.element.down().undoPositioned().setStyle({bottom:oldInnerBottom});}},arguments[1]||{}));};Effect.SlideUp=function(element){element=$(element).cleanWhitespace();var oldInnerBottom=element.down().getStyle('bottom');var elementDimensions=element.getDimensions();return new Effect.Scale(element,window.opera?0:1,Object.extend({scaleContent:false,scaleX:false,scaleMode:'box',scaleFrom:100,scaleMode:{originalHeight:elementDimensions.height,originalWidth:elementDimensions.width},restoreAfterFinish:true,afterSetup:function(effect){effect.element.makePositioned();effect.element.down().makePositioned();if(window.opera)effect.element.setStyle({top:''});effect.element.makeClipping().show();},afterUpdateInternal:function(effect){effect.element.down().setStyle({bottom:(effect.dims[0]-effect.element.clientHeight)+'px'});},afterFinishInternal:function(effect){effect.element.hide().undoClipping().undoPositioned();effect.element.down().undoPositioned().setStyle({bottom:oldInnerBottom});}},arguments[1]||{}));};Effect.Squish=function(element){return new Effect.Scale(element,window.opera?1:0,{restoreAfterFinish:true,beforeSetup:function(effect){effect.element.makeClipping();},afterFinishInternal:function(effect){effect.element.hide().undoClipping();}});};Effect.Grow=function(element){element=$(element);var options=Object.extend({direction:'center',moveTransition:Effect.Transitions.sinoidal,scaleTransition:Effect.Transitions.sinoidal,opacityTransition:Effect.Transitions.full},arguments[1]||{});var oldStyle={top:element.style.top,left:element.style.left,height:element.style.height,width:element.style.width,opacity:element.getInlineOpacity()};var dims=element.getDimensions();var initialMoveX,initialMoveY;var moveX,moveY;switch(options.direction){case'top-left':initialMoveX=initialMoveY=moveX=moveY=0;break;case'top-right':initialMoveX=dims.width;initialMoveY=moveY=0;moveX=-dims.width;break;case'bottom-left':initialMoveX=moveX=0;initialMoveY=dims.height;moveY=-dims.height;break;case'bottom-right':initialMoveX=dims.width;initialMoveY=dims.height;moveX=-dims.width;moveY=-dims.height;break;case'center':initialMoveX=dims.width/2;initialMoveY=dims.height/2;moveX=-dims.width/2;moveY=-dims.height/2;break;}
392
+ return new Effect.Move(element,{x:initialMoveX,y:initialMoveY,duration:0.01,beforeSetup:function(effect){effect.element.hide().makeClipping().makePositioned();},afterFinishInternal:function(effect){new Effect.Parallel([new Effect.Opacity(effect.element,{sync:true,to:1.0,from:0.0,transition:options.opacityTransition}),new Effect.Move(effect.element,{x:moveX,y:moveY,sync:true,transition:options.moveTransition}),new Effect.Scale(effect.element,100,{scaleMode:{originalHeight:dims.height,originalWidth:dims.width},sync:true,scaleFrom:window.opera?1:0,transition:options.scaleTransition,restoreAfterFinish:true})],Object.extend({beforeSetup:function(effect){effect.effects[0].element.setStyle({height:'0px'}).show();},afterFinishInternal:function(effect){effect.effects[0].element.undoClipping().undoPositioned().setStyle(oldStyle);}},options));}});};Effect.Shrink=function(element){element=$(element);var options=Object.extend({direction:'center',moveTransition:Effect.Transitions.sinoidal,scaleTransition:Effect.Transitions.sinoidal,opacityTransition:Effect.Transitions.none},arguments[1]||{});var oldStyle={top:element.style.top,left:element.style.left,height:element.style.height,width:element.style.width,opacity:element.getInlineOpacity()};var dims=element.getDimensions();var moveX,moveY;switch(options.direction){case'top-left':moveX=moveY=0;break;case'top-right':moveX=dims.width;moveY=0;break;case'bottom-left':moveX=0;moveY=dims.height;break;case'bottom-right':moveX=dims.width;moveY=dims.height;break;case'center':moveX=dims.width/2;moveY=dims.height/2;break;}
393
+ return new Effect.Parallel([new Effect.Opacity(element,{sync:true,to:0.0,from:1.0,transition:options.opacityTransition}),new Effect.Scale(element,window.opera?1:0,{sync:true,transition:options.scaleTransition,restoreAfterFinish:true}),new Effect.Move(element,{x:moveX,y:moveY,sync:true,transition:options.moveTransition})],Object.extend({beforeStartInternal:function(effect){effect.effects[0].element.makePositioned().makeClipping();},afterFinishInternal:function(effect){effect.effects[0].element.hide().undoClipping().undoPositioned().setStyle(oldStyle);}},options));};Effect.Pulsate=function(element){element=$(element);var options=arguments[1]||{},oldOpacity=element.getInlineOpacity(),transition=options.transition||Effect.Transitions.linear,reverser=function(pos){return 1-transition((-Math.cos((pos*(options.pulses||5)*2)*Math.PI)/2)+.5);};return new Effect.Opacity(element,Object.extend(Object.extend({duration:2.0,from:0,afterFinishInternal:function(effect){effect.element.setStyle({opacity:oldOpacity});}},options),{transition:reverser}));};Effect.Fold=function(element){element=$(element);var oldStyle={top:element.style.top,left:element.style.left,width:element.style.width,height:element.style.height};element.makeClipping();return new Effect.Scale(element,5,Object.extend({scaleContent:false,scaleX:false,afterFinishInternal:function(effect){new Effect.Scale(element,1,{scaleContent:false,scaleY:false,afterFinishInternal:function(effect){effect.element.hide().undoClipping().setStyle(oldStyle);}});}},arguments[1]||{}));};Effect.Morph=Class.create(Effect.Base,{initialize:function(element){this.element=$(element);if(!this.element)throw(Effect._elementDoesNotExistError);var options=Object.extend({style:{}},arguments[1]||{});if(!Object.isString(options.style))this.style=$H(options.style);else{if(options.style.include(':'))
394
+ this.style=options.style.parseStyle();else{this.element.addClassName(options.style);this.style=$H(this.element.getStyles());this.element.removeClassName(options.style);var css=this.element.getStyles();this.style=this.style.reject(function(style){return style.value==css[style.key];});options.afterFinishInternal=function(effect){effect.element.addClassName(effect.options.style);effect.transforms.each(function(transform){effect.element.style[transform.style]='';});};}}
395
+ this.start(options);},setup:function(){function parseColor(color){if(!color||['rgba(0, 0, 0, 0)','transparent'].include(color))color='#ffffff';color=color.parseColor();return $R(0,2).map(function(i){return parseInt(color.slice(i*2+1,i*2+3),16);});}
396
+ this.transforms=this.style.map(function(pair){var property=pair[0],value=pair[1],unit=null;if(value.parseColor('#zzzzzz')!='#zzzzzz'){value=value.parseColor();unit='color';}else if(property=='opacity'){value=parseFloat(value);if(Prototype.Browser.IE&&(!this.element.currentStyle.hasLayout))
397
+ this.element.setStyle({zoom:1});}else if(Element.CSS_LENGTH.test(value)){var components=value.match(/^([\+\-]?[0-9\.]+)(.*)$/);value=parseFloat(components[1]);unit=(components.length==3)?components[2]:null;}
398
+ var originalValue=this.element.getStyle(property);return{style:property.camelize(),originalValue:unit=='color'?parseColor(originalValue):parseFloat(originalValue||0),targetValue:unit=='color'?parseColor(value):value,unit:unit};}.bind(this)).reject(function(transform){return((transform.originalValue==transform.targetValue)||(transform.unit!='color'&&(isNaN(transform.originalValue)||isNaN(transform.targetValue))));});},update:function(position){var style={},transform,i=this.transforms.length;while(i--)
399
+ style[(transform=this.transforms[i]).style]=transform.unit=='color'?'#'+
400
+ (Math.round(transform.originalValue[0]+
401
+ (transform.targetValue[0]-transform.originalValue[0])*position)).toColorPart()+
402
+ (Math.round(transform.originalValue[1]+
403
+ (transform.targetValue[1]-transform.originalValue[1])*position)).toColorPart()+
404
+ (Math.round(transform.originalValue[2]+
405
+ (transform.targetValue[2]-transform.originalValue[2])*position)).toColorPart():(transform.originalValue+
406
+ (transform.targetValue-transform.originalValue)*position).toFixed(3)+
407
+ (transform.unit===null?'':transform.unit);this.element.setStyle(style,true);}});Effect.Transform=Class.create({initialize:function(tracks){this.tracks=[];this.options=arguments[1]||{};this.addTracks(tracks);},addTracks:function(tracks){tracks.each(function(track){track=$H(track);var data=track.values().first();this.tracks.push($H({ids:track.keys().first(),effect:Effect.Morph,options:{style:data}}));}.bind(this));return this;},play:function(){return new Effect.Parallel(this.tracks.map(function(track){var ids=track.get('ids'),effect=track.get('effect'),options=track.get('options');var elements=[$(ids)||$$(ids)].flatten();return elements.map(function(e){return new effect(e,Object.extend({sync:true},options))});}).flatten(),this.options);}});Element.CSS_PROPERTIES=$w('backgroundColor backgroundPosition borderBottomColor borderBottomStyle '+'borderBottomWidth borderLeftColor borderLeftStyle borderLeftWidth '+'borderRightColor borderRightStyle borderRightWidth borderSpacing '+'borderTopColor borderTopStyle borderTopWidth bottom clip color '+'fontSize fontWeight height left letterSpacing lineHeight '+'marginBottom marginLeft marginRight marginTop markerOffset maxHeight '+'maxWidth minHeight minWidth opacity outlineColor outlineOffset '+'outlineWidth paddingBottom paddingLeft paddingRight paddingTop '+'right textIndent top width wordSpacing zIndex');Element.CSS_LENGTH=/^(([\+\-]?[0-9\.]+)(em|ex|px|in|cm|mm|pt|pc|\%))|0$/;String.__parseStyleElement=document.createElement('div');String.prototype.parseStyle=function(){var style,styleRules=$H();if(Prototype.Browser.WebKit)
408
+ style=new Element('div',{style:this}).style;else{String.__parseStyleElement.innerHTML='<div style="'+this+'"></div>';style=String.__parseStyleElement.childNodes[0].style;}
409
+ Element.CSS_PROPERTIES.each(function(property){if(style[property])styleRules.set(property,style[property]);});if(Prototype.Browser.IE&&this.include('opacity'))
410
+ styleRules.set('opacity',this.match(/opacity:\s*((?:0|1)?(?:\.\d*)?)/)[1]);return styleRules;};if(document.defaultView&&document.defaultView.getComputedStyle){Element.getStyles=function(element){var css=document.defaultView.getComputedStyle($(element),null);return Element.CSS_PROPERTIES.inject({},function(styles,property){styles[property]=css[property];return styles;});};}else{Element.getStyles=function(element){element=$(element);var css=element.currentStyle,styles;styles=Element.CSS_PROPERTIES.inject({},function(results,property){results[property]=css[property];return results;});if(!styles.opacity)styles.opacity=element.getOpacity();return styles;};}
411
+ Effect.Methods={morph:function(element,style){element=$(element);new Effect.Morph(element,Object.extend({style:style},arguments[2]||{}));return element;},visualEffect:function(element,effect,options){element=$(element);var s=effect.dasherize().camelize(),klass=s.charAt(0).toUpperCase()+s.substring(1);new Effect[klass](element,options);return element;},highlight:function(element,options){element=$(element);new Effect.Highlight(element,options);return element;}};$w('fade appear grow shrink fold blindUp blindDown slideUp slideDown '+'pulsate shake puff squish switchOff dropOut').each(function(effect){Effect.Methods[effect]=function(element,options){element=$(element);Effect[effect.charAt(0).toUpperCase()+effect.substring(1)](element,options);return element;};});$w('getInlineOpacity forceRerendering setContentZoom collectTextNodes collectTextNodesIgnoreClass getStyles').each(function(f){Effect.Methods[f]=Element[f];});Element.addMethods(Effect.Methods);;if(Object.isUndefined(Effect))
412
+ throw("dragdrop.js requires including script.aculo.us' effects.js library");var Droppables={drops:[],remove:function(element){this.drops=this.drops.reject(function(d){return d.element==$(element)});},add:function(element){element=$(element);var options=Object.extend({greedy:true,hoverclass:null,tree:false},arguments[1]||{});if(options.containment){options._containers=[];var containment=options.containment;if(Object.isArray(containment)){containment.each(function(c){options._containers.push($(c))});}else{options._containers.push($(containment));}}
413
+ if(options.accept)options.accept=[options.accept].flatten();Element.makePositioned(element);options.element=element;this.drops.push(options);},findDeepestChild:function(drops){deepest=drops[0];for(i=1;i<drops.length;++i)
414
+ if(Element.isParent(drops[i].element,deepest.element))
415
+ deepest=drops[i];return deepest;},isContained:function(element,drop){var containmentNode;if(drop.tree){containmentNode=element.treeNode;}else{containmentNode=element.parentNode;}
416
+ return drop._containers.detect(function(c){return containmentNode==c});},isAffected:function(point,element,drop){return((drop.element!=element)&&((!drop._containers)||this.isContained(element,drop))&&((!drop.accept)||(Element.classNames(element).detect(function(v){return drop.accept.include(v)})))&&Position.within(drop.element,point[0],point[1]));},deactivate:function(drop){if(drop.hoverclass)
417
+ Element.removeClassName(drop.element,drop.hoverclass);this.last_active=null;},activate:function(drop){if(drop.hoverclass)
418
+ Element.addClassName(drop.element,drop.hoverclass);this.last_active=drop;},show:function(point,element){if(!this.drops.length)return;var drop,affected=[];this.drops.each(function(drop){if(Droppables.isAffected(point,element,drop))
419
+ affected.push(drop);});if(affected.length>0)
420
+ drop=Droppables.findDeepestChild(affected);if(this.last_active&&this.last_active!=drop)this.deactivate(this.last_active);if(drop){Position.within(drop.element,point[0],point[1]);if(drop.onHover)
421
+ drop.onHover(element,drop.element,Position.overlap(drop.overlap,drop.element));if(drop!=this.last_active)Droppables.activate(drop);}},fire:function(event,element){if(!this.last_active)return;Position.prepare();if(this.isAffected([Event.pointerX(event),Event.pointerY(event)],element,this.last_active))
422
+ if(this.last_active.onDrop){this.last_active.onDrop(element,this.last_active.element,event);return true;}},reset:function(){if(this.last_active)
423
+ this.deactivate(this.last_active);}};var Draggables={drags:[],observers:[],register:function(draggable){if(this.drags.length==0){this.eventMouseUp=this.endDrag.bindAsEventListener(this);this.eventMouseMove=this.updateDrag.bindAsEventListener(this);this.eventKeypress=this.keyPress.bindAsEventListener(this);Event.observe(document,"mouseup",this.eventMouseUp);Event.observe(draggable.element,"mousemove",this.eventMouseMove);Event.observe(document,"keypress",this.eventKeypress);}
424
+ this.drags.push(draggable);},unregister:function(draggable){this.drags=this.drags.reject(function(d){return d==draggable});if(this.drags.length==0){Event.stopObserving(document,"mouseup",this.eventMouseUp);Event.stopObserving(draggable.element,"mousemove",this.eventMouseMove);Event.stopObserving(document,"keypress",this.eventKeypress);}},activate:function(draggable){if(draggable.options.delay){this._timeout=setTimeout(function(){Draggables._timeout=null;window.focus();Draggables.activeDraggable=draggable;}.bind(this),draggable.options.delay);}else{window.focus();this.activeDraggable=draggable;}},deactivate:function(){this.activeDraggable=null;},updateDrag:function(event){if(!this.activeDraggable)return;var pointer=[Event.pointerX(event),Event.pointerY(event)];if(this._lastPointer&&(this._lastPointer.inspect()==pointer.inspect()))return;this._lastPointer=pointer;this.activeDraggable.updateDrag(event,pointer);},endDrag:function(event){if(this._timeout){clearTimeout(this._timeout);this._timeout=null;}
425
+ if(!this.activeDraggable)return;this._lastPointer=null;this.activeDraggable.endDrag(event);this.activeDraggable=null;},keyPress:function(event){if(this.activeDraggable)
426
+ this.activeDraggable.keyPress(event);},addObserver:function(observer){this.observers.push(observer);this._cacheObserverCallbacks();},removeObserver:function(element){this.observers=this.observers.reject(function(o){return o.element==element});this._cacheObserverCallbacks();},notify:function(eventName,draggable,event){if(this[eventName+'Count']>0)
427
+ this.observers.each(function(o){if(o[eventName])o[eventName](eventName,draggable,event);});if(draggable.options[eventName])draggable.options[eventName](draggable,event);},_cacheObserverCallbacks:function(){['onStart','onEnd','onDrag'].each(function(eventName){Draggables[eventName+'Count']=Draggables.observers.select(function(o){return o[eventName];}).length;});}};var Draggable=Class.create({initialize:function(element){var defaults={handle:false,reverteffect:function(element,top_offset,left_offset){var dur=Math.sqrt(Math.abs(top_offset^2)+Math.abs(left_offset^2))*0.02;new Effect.Move(element,{x:-left_offset,y:-top_offset,duration:dur,queue:{scope:'_draggable',position:'end'}});},endeffect:function(element){var toOpacity=Object.isNumber(element._opacity)?element._opacity:1.0;new Effect.Opacity(element,{duration:0.2,from:0.7,to:toOpacity,queue:{scope:'_draggable',position:'end'},afterFinish:function(){Draggable._dragging[element]=false}});},zindex:1000,revert:false,quiet:false,scroll:false,scrollSensitivity:20,scrollSpeed:15,snap:false,delay:0};if(!arguments[1]||Object.isUndefined(arguments[1].endeffect))
428
+ Object.extend(defaults,{starteffect:function(element){element._opacity=Element.getOpacity(element);Draggable._dragging[element]=true;new Effect.Opacity(element,{duration:0.2,from:element._opacity,to:0.7});}});var options=Object.extend(defaults,arguments[1]||{});this.element=$(element);if(options.handle&&Object.isString(options.handle))
429
+ this.handle=this.element.down('.'+options.handle,0);if(!this.handle)this.handle=$(options.handle);if(!this.handle)this.handle=this.element;if(options.scroll&&!options.scroll.scrollTo&&!options.scroll.outerHTML){options.scroll=$(options.scroll);this._isScrollChild=Element.childOf(this.element,options.scroll);}
430
+ Element.makePositioned(this.element);this.options=options;this.dragging=false;this.eventMouseDown=this.initDrag.bindAsEventListener(this);Event.observe(this.handle,"mousedown",this.eventMouseDown);Draggables.register(this);},destroy:function(){Event.stopObserving(this.handle,"mousedown",this.eventMouseDown);Draggables.unregister(this);},currentDelta:function(){return([parseInt(Element.getStyle(this.element,'left')||'0'),parseInt(Element.getStyle(this.element,'top')||'0')]);},initDrag:function(event){if(!Object.isUndefined(Draggable._dragging[this.element])&&Draggable._dragging[this.element])return;if(Event.isLeftClick(event)){var src=Event.element(event);if((tag_name=src.tagName.toUpperCase())&&(tag_name=='INPUT'||tag_name=='SELECT'||tag_name=='OPTION'||tag_name=='BUTTON'||tag_name=='TEXTAREA'))return;var pointer=[Event.pointerX(event),Event.pointerY(event)];var pos=Position.cumulativeOffset(this.element);this.offset=[0,1].map(function(i){return(pointer[i]-pos[i])});Draggables.activate(this);Event.stop(event);}},startDrag:function(event){this.dragging=true;if(!this.delta)
431
+ this.delta=this.currentDelta();if(this.options.zindex){this.originalZ=parseInt(Element.getStyle(this.element,'z-index')||0);this.element.style.zIndex=this.options.zindex;}
432
+ if(this.options.ghosting){this._clone=this.element.cloneNode(true);this._originallyAbsolute=(this.element.getStyle('position')=='absolute');if(!this._originallyAbsolute)
433
+ Position.absolutize(this.element);this.element.parentNode.insertBefore(this._clone,this.element);}
434
+ if(this.options.scroll){if(this.options.scroll==window){var where=this._getWindowScroll(this.options.scroll);this.originalScrollLeft=where.left;this.originalScrollTop=where.top;}else{this.originalScrollLeft=this.options.scroll.scrollLeft;this.originalScrollTop=this.options.scroll.scrollTop;}}
435
+ Draggables.notify('onStart',this,event);if(this.options.starteffect)this.options.starteffect(this.element);},updateDrag:function(event,pointer){if(!this.dragging)this.startDrag(event);if(!this.options.quiet){Position.prepare();Droppables.show(pointer,this.element);}
436
+ Draggables.notify('onDrag',this,event);this.draw(pointer);if(this.options.change)this.options.change(this);if(this.options.scroll){this.stopScrolling();var p;if(this.options.scroll==window){with(this._getWindowScroll(this.options.scroll)){p=[left,top,left+width,top+height];}}else{p=Position.page(this.options.scroll);p[0]+=this.options.scroll.scrollLeft+Position.deltaX;p[1]+=this.options.scroll.scrollTop+Position.deltaY;p.push(p[0]+this.options.scroll.offsetWidth);p.push(p[1]+this.options.scroll.offsetHeight);}
437
+ var speed=[0,0];if(pointer[0]<(p[0]+this.options.scrollSensitivity))speed[0]=pointer[0]-(p[0]+this.options.scrollSensitivity);if(pointer[1]<(p[1]+this.options.scrollSensitivity))speed[1]=pointer[1]-(p[1]+this.options.scrollSensitivity);if(pointer[0]>(p[2]-this.options.scrollSensitivity))speed[0]=pointer[0]-(p[2]-this.options.scrollSensitivity);if(pointer[1]>(p[3]-this.options.scrollSensitivity))speed[1]=pointer[1]-(p[3]-this.options.scrollSensitivity);this.startScrolling(speed);}
438
+ if(Prototype.Browser.WebKit)window.scrollBy(0,0);Event.stop(event);},finishDrag:function(event,success){this.dragging=false;if(this.options.quiet){Position.prepare();var pointer=[Event.pointerX(event),Event.pointerY(event)];Droppables.show(pointer,this.element);}
439
+ if(this.options.ghosting){if(!this._originallyAbsolute)
440
+ Position.relativize(this.element);delete this._originallyAbsolute;Element.remove(this._clone);this._clone=null;}
441
+ var dropped=false;if(success){dropped=Droppables.fire(event,this.element);if(!dropped)dropped=false;}
442
+ if(dropped&&this.options.onDropped)this.options.onDropped(this.element);Draggables.notify('onEnd',this,event);var revert=this.options.revert;if(revert&&Object.isFunction(revert))revert=revert(this.element);var d=this.currentDelta();if(revert&&this.options.reverteffect){if(dropped==0||revert!='failure')
443
+ this.options.reverteffect(this.element,d[1]-this.delta[1],d[0]-this.delta[0]);}else{this.delta=d;}
444
+ if(this.options.zindex)
445
+ this.element.style.zIndex=this.originalZ;if(this.options.endeffect)
446
+ this.options.endeffect(this.element);Draggables.deactivate(this);Droppables.reset();},keyPress:function(event){if(event.keyCode!=Event.KEY_ESC)return;this.finishDrag(event,false);Event.stop(event);},endDrag:function(event){if(!this.dragging)return;this.stopScrolling();this.finishDrag(event,true);Event.stop(event);},draw:function(point){var pos=Position.cumulativeOffset(this.element);if(this.options.ghosting){var r=Position.realOffset(this.element);pos[0]+=r[0]-Position.deltaX;pos[1]+=r[1]-Position.deltaY;}
447
+ var d=this.currentDelta();pos[0]-=d[0];pos[1]-=d[1];if(this.options.scroll&&(this.options.scroll!=window&&this._isScrollChild)){pos[0]-=this.options.scroll.scrollLeft-this.originalScrollLeft;pos[1]-=this.options.scroll.scrollTop-this.originalScrollTop;}
448
+ var p=[0,1].map(function(i){return(point[i]-pos[i]-this.offset[i])}.bind(this));if(this.options.snap){if(Object.isFunction(this.options.snap)){p=this.options.snap(p[0],p[1],this);}else{if(Object.isArray(this.options.snap)){p=p.map(function(v,i){return(v/this.options.snap[i]).round()*this.options.snap[i]}.bind(this));}else{p=p.map(function(v){return(v/this.options.snap).round()*this.options.snap}.bind(this));}}}
449
+ var style=this.element.style;if((!this.options.constraint)||(this.options.constraint=='horizontal'))
450
+ style.left=p[0]+"px";if((!this.options.constraint)||(this.options.constraint=='vertical'))
451
+ style.top=p[1]+"px";if(style.visibility=="hidden")style.visibility="";},stopScrolling:function(){if(this.scrollInterval){clearInterval(this.scrollInterval);this.scrollInterval=null;Draggables._lastScrollPointer=null;}},startScrolling:function(speed){if(!(speed[0]||speed[1]))return;this.scrollSpeed=[speed[0]*this.options.scrollSpeed,speed[1]*this.options.scrollSpeed];this.lastScrolled=new Date();this.scrollInterval=setInterval(this.scroll.bind(this),10);},scroll:function(){var current=new Date();var delta=current-this.lastScrolled;this.lastScrolled=current;if(this.options.scroll==window){with(this._getWindowScroll(this.options.scroll)){if(this.scrollSpeed[0]||this.scrollSpeed[1]){var d=delta/1000;this.options.scroll.scrollTo(left+d*this.scrollSpeed[0],top+d*this.scrollSpeed[1]);}}}else{this.options.scroll.scrollLeft+=this.scrollSpeed[0]*delta/1000;this.options.scroll.scrollTop+=this.scrollSpeed[1]*delta/1000;}
452
+ Position.prepare();Droppables.show(Draggables._lastPointer,this.element);Draggables.notify('onDrag',this);if(this._isScrollChild){Draggables._lastScrollPointer=Draggables._lastScrollPointer||$A(Draggables._lastPointer);Draggables._lastScrollPointer[0]+=this.scrollSpeed[0]*delta/1000;Draggables._lastScrollPointer[1]+=this.scrollSpeed[1]*delta/1000;if(Draggables._lastScrollPointer[0]<0)
453
+ Draggables._lastScrollPointer[0]=0;if(Draggables._lastScrollPointer[1]<0)
454
+ Draggables._lastScrollPointer[1]=0;this.draw(Draggables._lastScrollPointer);}
455
+ if(this.options.change)this.options.change(this);},_getWindowScroll:function(w){var T,L,W,H;with(w.document){if(w.document.documentElement&&documentElement.scrollTop){T=documentElement.scrollTop;L=documentElement.scrollLeft;}else if(w.document.body){T=body.scrollTop;L=body.scrollLeft;}
456
+ if(w.innerWidth){W=w.innerWidth;H=w.innerHeight;}else if(w.document.documentElement&&documentElement.clientWidth){W=documentElement.clientWidth;H=documentElement.clientHeight;}else{W=body.offsetWidth;H=body.offsetHeight;}}
457
+ return{top:T,left:L,width:W,height:H};}});Draggable._dragging={};var SortableObserver=Class.create({initialize:function(element,observer){this.element=$(element);this.observer=observer;this.lastValue=Sortable.serialize(this.element);},onStart:function(){this.lastValue=Sortable.serialize(this.element);},onEnd:function(){Sortable.unmark();if(this.lastValue!=Sortable.serialize(this.element))
458
+ this.observer(this.element)}});var Sortable={SERIALIZE_RULE:/^[^_\-](?:[A-Za-z0-9\-\_]*)[_](.*)$/,sortables:{},_findRootElement:function(element){while(element.tagName.toUpperCase()!="BODY"){if(element.id&&Sortable.sortables[element.id])return element;element=element.parentNode;}},options:function(element){element=Sortable._findRootElement($(element));if(!element)return;return Sortable.sortables[element.id];},destroy:function(element){element=$(element);var s=Sortable.sortables[element.id];if(s){Draggables.removeObserver(s.element);s.droppables.each(function(d){Droppables.remove(d)});s.draggables.invoke('destroy');delete Sortable.sortables[s.element.id];}},create:function(element){element=$(element);var options=Object.extend({element:element,tag:'li',dropOnEmpty:false,tree:false,treeTag:'ul',overlap:'vertical',constraint:'vertical',containment:element,handle:false,only:false,delay:0,hoverclass:null,ghosting:false,quiet:false,scroll:false,scrollSensitivity:20,scrollSpeed:15,format:this.SERIALIZE_RULE,elements:false,handles:false,onChange:Prototype.emptyFunction,onUpdate:Prototype.emptyFunction},arguments[1]||{});this.destroy(element);var options_for_draggable={revert:true,quiet:options.quiet,scroll:options.scroll,scrollSpeed:options.scrollSpeed,scrollSensitivity:options.scrollSensitivity,delay:options.delay,ghosting:options.ghosting,constraint:options.constraint,handle:options.handle};if(options.starteffect)
459
+ options_for_draggable.starteffect=options.starteffect;if(options.reverteffect)
460
+ options_for_draggable.reverteffect=options.reverteffect;else
461
+ if(options.ghosting)options_for_draggable.reverteffect=function(element){element.style.top=0;element.style.left=0;};if(options.endeffect)
462
+ options_for_draggable.endeffect=options.endeffect;if(options.zindex)
463
+ options_for_draggable.zindex=options.zindex;var options_for_droppable={overlap:options.overlap,containment:options.containment,tree:options.tree,hoverclass:options.hoverclass,onHover:Sortable.onHover};var options_for_tree={onHover:Sortable.onEmptyHover,overlap:options.overlap,containment:options.containment,hoverclass:options.hoverclass};Element.cleanWhitespace(element);options.draggables=[];options.droppables=[];if(options.dropOnEmpty||options.tree){Droppables.add(element,options_for_tree);options.droppables.push(element);}
464
+ (options.elements||this.findElements(element,options)||[]).each(function(e,i){var handle=options.handles?$(options.handles[i]):(options.handle?$(e).select('.'+options.handle)[0]:e);options.draggables.push(new Draggable(e,Object.extend(options_for_draggable,{handle:handle})));Droppables.add(e,options_for_droppable);if(options.tree)e.treeNode=element;options.droppables.push(e);});if(options.tree){(Sortable.findTreeElements(element,options)||[]).each(function(e){Droppables.add(e,options_for_tree);e.treeNode=element;options.droppables.push(e);});}
465
+ this.sortables[element.id]=options;Draggables.addObserver(new SortableObserver(element,options.onUpdate));},findElements:function(element,options){return Element.findChildren(element,options.only,options.tree?true:false,options.tag);},findTreeElements:function(element,options){return Element.findChildren(element,options.only,options.tree?true:false,options.treeTag);},onHover:function(element,dropon,overlap){if(Element.isParent(dropon,element))return;if(overlap>.33&&overlap<.66&&Sortable.options(dropon).tree){return;}else if(overlap>0.5){Sortable.mark(dropon,'before');if(dropon.previousSibling!=element){var oldParentNode=element.parentNode;element.style.visibility="hidden";dropon.parentNode.insertBefore(element,dropon);if(dropon.parentNode!=oldParentNode)
466
+ Sortable.options(oldParentNode).onChange(element);Sortable.options(dropon.parentNode).onChange(element);}}else{Sortable.mark(dropon,'after');var nextElement=dropon.nextSibling||null;if(nextElement!=element){var oldParentNode=element.parentNode;element.style.visibility="hidden";dropon.parentNode.insertBefore(element,nextElement);if(dropon.parentNode!=oldParentNode)
467
+ Sortable.options(oldParentNode).onChange(element);Sortable.options(dropon.parentNode).onChange(element);}}},onEmptyHover:function(element,dropon,overlap){var oldParentNode=element.parentNode;var droponOptions=Sortable.options(dropon);if(!Element.isParent(dropon,element)){var index;var children=Sortable.findElements(dropon,{tag:droponOptions.tag,only:droponOptions.only});var child=null;if(children){var offset=Element.offsetSize(dropon,droponOptions.overlap)*(1.0-overlap);for(index=0;index<children.length;index+=1){if(offset-Element.offsetSize(children[index],droponOptions.overlap)>=0){offset-=Element.offsetSize(children[index],droponOptions.overlap);}else if(offset-(Element.offsetSize(children[index],droponOptions.overlap)/2)>=0){child=index+1<children.length?children[index+1]:null;break;}else{child=children[index];break;}}}
468
+ dropon.insertBefore(element,child);Sortable.options(oldParentNode).onChange(element);droponOptions.onChange(element);}},unmark:function(){if(Sortable._marker)Sortable._marker.hide();},mark:function(dropon,position){var sortable=Sortable.options(dropon.parentNode);if(sortable&&!sortable.ghosting)return;if(!Sortable._marker){Sortable._marker=($('dropmarker')||Element.extend(document.createElement('DIV'))).hide().addClassName('dropmarker').setStyle({position:'absolute'});document.getElementsByTagName("body").item(0).appendChild(Sortable._marker);}
469
+ var offsets=Position.cumulativeOffset(dropon);Sortable._marker.setStyle({left:offsets[0]+'px',top:offsets[1]+'px'});if(position=='after')
470
+ if(sortable.overlap=='horizontal')
471
+ Sortable._marker.setStyle({left:(offsets[0]+dropon.clientWidth)+'px'});else
472
+ Sortable._marker.setStyle({top:(offsets[1]+dropon.clientHeight)+'px'});Sortable._marker.show();},_tree:function(element,options,parent){var children=Sortable.findElements(element,options)||[];for(var i=0;i<children.length;++i){var match=children[i].id.match(options.format);if(!match)continue;var child={id:encodeURIComponent(match?match[1]:null),element:element,parent:parent,children:[],position:parent.children.length,container:$(children[i]).down(options.treeTag)};if(child.container)
473
+ this._tree(child.container,options,child);parent.children.push(child);}
474
+ return parent;},tree:function(element){element=$(element);var sortableOptions=this.options(element);var options=Object.extend({tag:sortableOptions.tag,treeTag:sortableOptions.treeTag,only:sortableOptions.only,name:element.id,format:sortableOptions.format},arguments[1]||{});var root={id:null,parent:null,children:[],container:element,position:0};return Sortable._tree(element,options,root);},_constructIndex:function(node){var index='';do{if(node.id)index='['+node.position+']'+index;}while((node=node.parent)!=null);return index;},sequence:function(element){element=$(element);var options=Object.extend(this.options(element),arguments[1]||{});return $(this.findElements(element,options)||[]).map(function(item){return item.id.match(options.format)?item.id.match(options.format)[1]:'';});},setSequence:function(element,new_sequence){element=$(element);var options=Object.extend(this.options(element),arguments[2]||{});var nodeMap={};this.findElements(element,options).each(function(n){if(n.id.match(options.format))
475
+ nodeMap[n.id.match(options.format)[1]]=[n,n.parentNode];n.parentNode.removeChild(n);});new_sequence.each(function(ident){var n=nodeMap[ident];if(n){n[1].appendChild(n[0]);delete nodeMap[ident];}});},serialize:function(element){element=$(element);var options=Object.extend(Sortable.options(element),arguments[1]||{});var name=encodeURIComponent((arguments[1]&&arguments[1].name)?arguments[1].name:element.id);if(options.tree){return Sortable.tree(element,arguments[1]).children.map(function(item){return[name+Sortable._constructIndex(item)+"[id]="+
476
+ encodeURIComponent(item.id)].concat(item.children.map(arguments.callee));}).flatten().join('&');}else{return Sortable.sequence(element,arguments[1]).map(function(item){return name+"[]="+encodeURIComponent(item);}).join('&');}}};Element.isParent=function(child,element){if(!child.parentNode||child==element)return false;if(child.parentNode==element)return true;return Element.isParent(child.parentNode,element);};Element.findChildren=function(element,only,recursive,tagName){if(!element.hasChildNodes())return null;tagName=tagName.toUpperCase();if(only)only=[only].flatten();var elements=[];$A(element.childNodes).each(function(e){if(e.tagName&&e.tagName.toUpperCase()==tagName&&(!only||(Element.classNames(e).detect(function(v){return only.include(v)}))))
477
+ elements.push(e);if(recursive){var grandchildren=Element.findChildren(e,only,recursive,tagName);if(grandchildren)elements.push(grandchildren);}});return(elements.length>0?elements.flatten():[]);};Element.offsetSize=function(element,type){return element['offset'+((type=='vertical'||type=='height')?'Height':'Width')];};;if(typeof Effect=='undefined')
478
+ throw("controls.js requires including script.aculo.us' effects.js library");var Autocompleter={};Autocompleter.Base=Class.create({baseInitialize:function(element,update,options){element=$(element);this.element=element;this.update=$(update);this.hasFocus=false;this.changed=false;this.active=false;this.index=0;this.entryCount=0;this.oldElementValue=this.element.value;if(this.setOptions)
479
+ this.setOptions(options);else
480
+ this.options=options||{};this.options.paramName=this.options.paramName||this.element.name;this.options.tokens=this.options.tokens||[];this.options.frequency=this.options.frequency||0.4;this.options.minChars=this.options.minChars||1;this.options.onShow=this.options.onShow||function(element,update){if(!update.style.position||update.style.position=='absolute'){update.style.position='absolute';Position.clone(element,update,{setHeight:false,offsetTop:element.offsetHeight});}
481
+ Effect.Appear(update,{duration:0.15});};this.options.onHide=this.options.onHide||function(element,update){new Effect.Fade(update,{duration:0.15})};if(typeof(this.options.tokens)=='string')
482
+ this.options.tokens=new Array(this.options.tokens);if(!this.options.tokens.include('\n'))
483
+ this.options.tokens.push('\n');this.observer=null;this.element.setAttribute('autocomplete','off');Element.hide(this.update);Event.observe(this.element,'blur',this.onBlur.bindAsEventListener(this));Event.observe(this.element,'keydown',this.onKeyPress.bindAsEventListener(this));},show:function(){if(Element.getStyle(this.update,'display')=='none')this.options.onShow(this.element,this.update);if(!this.iefix&&(Prototype.Browser.IE)&&(Element.getStyle(this.update,'position')=='absolute')){new Insertion.After(this.update,'<iframe id="'+this.update.id+'_iefix" '+'style="display:none;position:absolute;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0);" '+'src="javascript:false;" frameborder="0" scrolling="no"></iframe>');this.iefix=$(this.update.id+'_iefix');}
484
+ if(this.iefix)setTimeout(this.fixIEOverlapping.bind(this),50);},fixIEOverlapping:function(){Position.clone(this.update,this.iefix,{setTop:(!this.update.style.height)});this.iefix.style.zIndex=1;this.update.style.zIndex=2;Element.show(this.iefix);},hide:function(){this.stopIndicator();if(Element.getStyle(this.update,'display')!='none')this.options.onHide(this.element,this.update);if(this.iefix)Element.hide(this.iefix);},startIndicator:function(){if(this.options.indicator)Element.show(this.options.indicator);},stopIndicator:function(){if(this.options.indicator)Element.hide(this.options.indicator);},onKeyPress:function(event){if(this.active)
485
+ switch(event.keyCode){case Event.KEY_TAB:case Event.KEY_RETURN:this.selectEntry();Event.stop(event);case Event.KEY_ESC:this.hide();this.active=false;Event.stop(event);return;case Event.KEY_LEFT:case Event.KEY_RIGHT:return;case Event.KEY_UP:this.markPrevious();this.render();Event.stop(event);return;case Event.KEY_DOWN:this.markNext();this.render();Event.stop(event);return;}
486
+ else
487
+ if(event.keyCode==Event.KEY_TAB||event.keyCode==Event.KEY_RETURN||(Prototype.Browser.WebKit>0&&event.keyCode==0))return;this.changed=true;this.hasFocus=true;if(this.observer)clearTimeout(this.observer);this.observer=setTimeout(this.onObserverEvent.bind(this),this.options.frequency*1000);},activate:function(){this.changed=false;this.hasFocus=true;this.getUpdatedChoices();},onHover:function(event){var element=Event.findElement(event,'LI');if(this.index!=element.autocompleteIndex)
488
+ {this.index=element.autocompleteIndex;this.render();}
489
+ Event.stop(event);},onClick:function(event){var element=Event.findElement(event,'LI');this.index=element.autocompleteIndex;this.selectEntry();this.hide();},onBlur:function(event){setTimeout(this.hide.bind(this),250);this.hasFocus=false;this.active=false;},render:function(){if(this.entryCount>0){for(var i=0;i<this.entryCount;i++)
490
+ this.index==i?Element.addClassName(this.getEntry(i),"selected"):Element.removeClassName(this.getEntry(i),"selected");if(this.hasFocus){this.show();this.active=true;}}else{this.active=false;this.hide();}},markPrevious:function(){if(this.index>0)this.index--;else this.index=this.entryCount-1;},markNext:function(){if(this.index<this.entryCount-1)this.index++;else this.index=0;this.getEntry(this.index).scrollIntoView(false);},getEntry:function(index){return this.update.firstChild.childNodes[index];},getCurrentEntry:function(){return this.getEntry(this.index);},selectEntry:function(){this.active=false;this.updateElement(this.getCurrentEntry());},updateElement:function(selectedElement){if(this.options.updateElement){this.options.updateElement(selectedElement);return;}
491
+ var value='';if(this.options.select){var nodes=$(selectedElement).select('.'+this.options.select)||[];if(nodes.length>0)value=Element.collectTextNodes(nodes[0],this.options.select);}else
492
+ value=Element.collectTextNodesIgnoreClass(selectedElement,'informal');var bounds=this.getTokenBounds();if(bounds[0]!=-1){var newValue=this.element.value.substr(0,bounds[0]);var whitespace=this.element.value.substr(bounds[0]).match(/^\s+/);if(whitespace)
493
+ newValue+=whitespace[0];this.element.value=newValue+value+this.element.value.substr(bounds[1]);}else{this.element.value=value;}
494
+ this.oldElementValue=this.element.value;this.element.focus();if(this.options.afterUpdateElement)
495
+ this.options.afterUpdateElement(this.element,selectedElement);},updateChoices:function(choices){if(!this.changed&&this.hasFocus){this.update.innerHTML=choices;Element.cleanWhitespace(this.update);Element.cleanWhitespace(this.update.down());if(this.update.firstChild&&this.update.down().childNodes){this.entryCount=this.update.down().childNodes.length;for(var i=0;i<this.entryCount;i++){var entry=this.getEntry(i);entry.autocompleteIndex=i;this.addObservers(entry);}}else{this.entryCount=0;}
496
+ this.stopIndicator();this.index=0;if(this.entryCount==1&&this.options.autoSelect){this.selectEntry();this.hide();}else{this.render();}}},addObservers:function(element){Event.observe(element,"mouseover",this.onHover.bindAsEventListener(this));Event.observe(element,"click",this.onClick.bindAsEventListener(this));},onObserverEvent:function(){this.changed=false;this.tokenBounds=null;if(this.getToken().length>=this.options.minChars){this.getUpdatedChoices();}else{this.active=false;this.hide();}
497
+ this.oldElementValue=this.element.value;},getToken:function(){var bounds=this.getTokenBounds();return this.element.value.substring(bounds[0],bounds[1]).strip();},getTokenBounds:function(){if(null!=this.tokenBounds)return this.tokenBounds;var value=this.element.value;if(value.strip().empty())return[-1,0];var diff=arguments.callee.getFirstDifferencePos(value,this.oldElementValue);var offset=(diff==this.oldElementValue.length?1:0);var prevTokenPos=-1,nextTokenPos=value.length;var tp;for(var index=0,l=this.options.tokens.length;index<l;++index){tp=value.lastIndexOf(this.options.tokens[index],diff+offset-1);if(tp>prevTokenPos)prevTokenPos=tp;tp=value.indexOf(this.options.tokens[index],diff+offset);if(-1!=tp&&tp<nextTokenPos)nextTokenPos=tp;}
498
+ return(this.tokenBounds=[prevTokenPos+1,nextTokenPos]);}});Autocompleter.Base.prototype.getTokenBounds.getFirstDifferencePos=function(newS,oldS){var boundary=Math.min(newS.length,oldS.length);for(var index=0;index<boundary;++index)
499
+ if(newS[index]!=oldS[index])
500
+ return index;return boundary;};Ajax.Autocompleter=Class.create(Autocompleter.Base,{initialize:function(element,update,url,options){this.baseInitialize(element,update,options);this.options.asynchronous=true;this.options.onComplete=this.onComplete.bind(this);this.options.defaultParams=this.options.parameters||null;this.url=url;},getUpdatedChoices:function(){this.startIndicator();var entry=encodeURIComponent(this.options.paramName)+'='+
501
+ encodeURIComponent(this.getToken());this.options.parameters=this.options.callback?this.options.callback(this.element,entry):entry;if(this.options.defaultParams)
502
+ this.options.parameters+='&'+this.options.defaultParams;new Ajax.Request(this.url,this.options);},onComplete:function(request){this.updateChoices(request.responseText);}});Autocompleter.Local=Class.create(Autocompleter.Base,{initialize:function(element,update,array,options){this.baseInitialize(element,update,options);this.options.array=array;},getUpdatedChoices:function(){this.updateChoices(this.options.selector(this));},setOptions:function(options){this.options=Object.extend({choices:10,partialSearch:true,partialChars:2,ignoreCase:true,fullSearch:false,selector:function(instance){var ret=[];var partial=[];var entry=instance.getToken();var count=0;for(var i=0;i<instance.options.array.length&&ret.length<instance.options.choices;i++){var elem=instance.options.array[i];var foundPos=instance.options.ignoreCase?elem.toLowerCase().indexOf(entry.toLowerCase()):elem.indexOf(entry);while(foundPos!=-1){if(foundPos==0&&elem.length!=entry.length){ret.push("<li><strong>"+elem.substr(0,entry.length)+"</strong>"+
503
+ elem.substr(entry.length)+"</li>");break;}else if(entry.length>=instance.options.partialChars&&instance.options.partialSearch&&foundPos!=-1){if(instance.options.fullSearch||/\s/.test(elem.substr(foundPos-1,1))){partial.push("<li>"+elem.substr(0,foundPos)+"<strong>"+
504
+ elem.substr(foundPos,entry.length)+"</strong>"+elem.substr(foundPos+entry.length)+"</li>");break;}}
505
+ foundPos=instance.options.ignoreCase?elem.toLowerCase().indexOf(entry.toLowerCase(),foundPos+1):elem.indexOf(entry,foundPos+1);}}
506
+ if(partial.length)
507
+ ret=ret.concat(partial.slice(0,instance.options.choices-ret.length));return"<ul>"+ret.join('')+"</ul>";}},options||{});}});Field.scrollFreeActivate=function(field){setTimeout(function(){Field.activate(field);},1);};Ajax.InPlaceEditor=Class.create({initialize:function(element,url,options){this.url=url;this.element=element=$(element);this.prepareOptions();this._controls={};arguments.callee.dealWithDeprecatedOptions(options);Object.extend(this.options,options||{});if(!this.options.formId&&this.element.id){this.options.formId=this.element.id+'-inplaceeditor';if($(this.options.formId))
508
+ this.options.formId='';}
509
+ if(this.options.externalControl)
510
+ this.options.externalControl=$(this.options.externalControl);if(!this.options.externalControl)
511
+ this.options.externalControlOnly=false;this._originalBackground=this.element.getStyle('background-color')||'transparent';this.element.title=this.options.clickToEditText;this._boundCancelHandler=this.handleFormCancellation.bind(this);this._boundComplete=(this.options.onComplete||Prototype.emptyFunction).bind(this);this._boundFailureHandler=this.handleAJAXFailure.bind(this);this._boundSubmitHandler=this.handleFormSubmission.bind(this);this._boundWrapperHandler=this.wrapUp.bind(this);this.registerListeners();},checkForEscapeOrReturn:function(e){if(!this._editing||e.ctrlKey||e.altKey||e.shiftKey)return;if(Event.KEY_ESC==e.keyCode)
512
+ this.handleFormCancellation(e);else if(Event.KEY_RETURN==e.keyCode)
513
+ this.handleFormSubmission(e);},createControl:function(mode,handler,extraClasses){var control=this.options[mode+'Control'];var text=this.options[mode+'Text'];if('button'==control){var btn=document.createElement('input');btn.type='submit';btn.value=text;btn.className='editor_'+mode+'_button';if('cancel'==mode)
514
+ btn.onclick=this._boundCancelHandler;this._form.appendChild(btn);this._controls[mode]=btn;}else if('link'==control){var link=document.createElement('a');link.href='#';link.appendChild(document.createTextNode(text));link.onclick='cancel'==mode?this._boundCancelHandler:this._boundSubmitHandler;link.className='editor_'+mode+'_link';if(extraClasses)
515
+ link.className+=' '+extraClasses;this._form.appendChild(link);this._controls[mode]=link;}},createEditField:function(){var text=(this.options.loadTextURL?this.options.loadingText:this.getText());var fld;if(1>=this.options.rows&&!/\r|\n/.test(this.getText())){fld=document.createElement('input');fld.type='text';var size=this.options.size||this.options.cols||0;if(0<size)fld.size=size;}else{fld=document.createElement('textarea');fld.rows=(1>=this.options.rows?this.options.autoRows:this.options.rows);fld.cols=this.options.cols||40;}
516
+ fld.name=this.options.paramName;fld.value=text;fld.className='editor_field';if(this.options.submitOnBlur)
517
+ fld.onblur=this._boundSubmitHandler;this._controls.editor=fld;if(this.options.loadTextURL)
518
+ this.loadExternalText();this._form.appendChild(this._controls.editor);},createForm:function(){var ipe=this;function addText(mode,condition){var text=ipe.options['text'+mode+'Controls'];if(!text||condition===false)return;ipe._form.appendChild(document.createTextNode(text));};this._form=$(document.createElement('form'));this._form.id=this.options.formId;this._form.addClassName(this.options.formClassName);this._form.onsubmit=this._boundSubmitHandler;this.createEditField();if('textarea'==this._controls.editor.tagName.toLowerCase())
519
+ this._form.appendChild(document.createElement('br'));if(this.options.onFormCustomization)
520
+ this.options.onFormCustomization(this,this._form);addText('Before',this.options.okControl||this.options.cancelControl);this.createControl('ok',this._boundSubmitHandler);addText('Between',this.options.okControl&&this.options.cancelControl);this.createControl('cancel',this._boundCancelHandler,'editor_cancel');addText('After',this.options.okControl||this.options.cancelControl);},destroy:function(){if(this._oldInnerHTML)
521
+ this.element.innerHTML=this._oldInnerHTML;this.leaveEditMode();this.unregisterListeners();},enterEditMode:function(e){if(this._saving||this._editing)return;this._editing=true;this.triggerCallback('onEnterEditMode');if(this.options.externalControl)
522
+ this.options.externalControl.hide();this.element.hide();this.createForm();this.element.parentNode.insertBefore(this._form,this.element);if(!this.options.loadTextURL)
523
+ this.postProcessEditField();if(e)Event.stop(e);},enterHover:function(e){if(this.options.hoverClassName)
524
+ this.element.addClassName(this.options.hoverClassName);if(this._saving)return;this.triggerCallback('onEnterHover');},getText:function(){return this.element.innerHTML.unescapeHTML();},handleAJAXFailure:function(transport){this.triggerCallback('onFailure',transport);if(this._oldInnerHTML){this.element.innerHTML=this._oldInnerHTML;this._oldInnerHTML=null;}},handleFormCancellation:function(e){this.wrapUp();if(e)Event.stop(e);},handleFormSubmission:function(e){var form=this._form;var value=$F(this._controls.editor);this.prepareSubmission();var params=this.options.callback(form,value)||'';if(Object.isString(params))
525
+ params=params.toQueryParams();params.editorId=this.element.id;if(this.options.htmlResponse){var options=Object.extend({evalScripts:true},this.options.ajaxOptions);Object.extend(options,{parameters:params,onComplete:this._boundWrapperHandler,onFailure:this._boundFailureHandler});new Ajax.Updater({success:this.element},this.url,options);}else{var options=Object.extend({method:'get'},this.options.ajaxOptions);Object.extend(options,{parameters:params,onComplete:this._boundWrapperHandler,onFailure:this._boundFailureHandler});new Ajax.Request(this.url,options);}
526
+ if(e)Event.stop(e);},leaveEditMode:function(){this.element.removeClassName(this.options.savingClassName);this.removeForm();this.leaveHover();this.element.style.backgroundColor=this._originalBackground;this.element.show();if(this.options.externalControl)
527
+ this.options.externalControl.show();this._saving=false;this._editing=false;this._oldInnerHTML=null;this.triggerCallback('onLeaveEditMode');},leaveHover:function(e){if(this.options.hoverClassName)
528
+ this.element.removeClassName(this.options.hoverClassName);if(this._saving)return;this.triggerCallback('onLeaveHover');},loadExternalText:function(){this._form.addClassName(this.options.loadingClassName);this._controls.editor.disabled=true;var options=Object.extend({method:'get'},this.options.ajaxOptions);Object.extend(options,{parameters:'editorId='+encodeURIComponent(this.element.id),onComplete:Prototype.emptyFunction,onSuccess:function(transport){this._form.removeClassName(this.options.loadingClassName);var text=transport.responseText;if(this.options.stripLoadedTextTags)
529
+ text=text.stripTags();this._controls.editor.value=text;this._controls.editor.disabled=false;this.postProcessEditField();}.bind(this),onFailure:this._boundFailureHandler});new Ajax.Request(this.options.loadTextURL,options);},postProcessEditField:function(){var fpc=this.options.fieldPostCreation;if(fpc)
530
+ $(this._controls.editor)['focus'==fpc?'focus':'activate']();},prepareOptions:function(){this.options=Object.clone(Ajax.InPlaceEditor.DefaultOptions);Object.extend(this.options,Ajax.InPlaceEditor.DefaultCallbacks);[this._extraDefaultOptions].flatten().compact().each(function(defs){Object.extend(this.options,defs);}.bind(this));},prepareSubmission:function(){this._saving=true;this.removeForm();this.leaveHover();this.showSaving();},registerListeners:function(){this._listeners={};var listener;$H(Ajax.InPlaceEditor.Listeners).each(function(pair){listener=this[pair.value].bind(this);this._listeners[pair.key]=listener;if(!this.options.externalControlOnly)
531
+ this.element.observe(pair.key,listener);if(this.options.externalControl)
532
+ this.options.externalControl.observe(pair.key,listener);}.bind(this));},removeForm:function(){if(!this._form)return;this._form.remove();this._form=null;this._controls={};},showSaving:function(){this._oldInnerHTML=this.element.innerHTML;this.element.innerHTML=this.options.savingText;this.element.addClassName(this.options.savingClassName);this.element.style.backgroundColor=this._originalBackground;this.element.show();},triggerCallback:function(cbName,arg){if('function'==typeof this.options[cbName]){this.options[cbName](this,arg);}},unregisterListeners:function(){$H(this._listeners).each(function(pair){if(!this.options.externalControlOnly)
533
+ this.element.stopObserving(pair.key,pair.value);if(this.options.externalControl)
534
+ this.options.externalControl.stopObserving(pair.key,pair.value);}.bind(this));},wrapUp:function(transport){this.leaveEditMode();this._boundComplete(transport,this.element);}});Object.extend(Ajax.InPlaceEditor.prototype,{dispose:Ajax.InPlaceEditor.prototype.destroy});Ajax.InPlaceCollectionEditor=Class.create(Ajax.InPlaceEditor,{initialize:function($super,element,url,options){this._extraDefaultOptions=Ajax.InPlaceCollectionEditor.DefaultOptions;$super(element,url,options);},createEditField:function(){var list=document.createElement('select');list.name=this.options.paramName;list.size=1;this._controls.editor=list;this._collection=this.options.collection||[];if(this.options.loadCollectionURL)
535
+ this.loadCollection();else
536
+ this.checkForExternalText();this._form.appendChild(this._controls.editor);},loadCollection:function(){this._form.addClassName(this.options.loadingClassName);this.showLoadingText(this.options.loadingCollectionText);var options=Object.extend({method:'get'},this.options.ajaxOptions);Object.extend(options,{parameters:'editorId='+encodeURIComponent(this.element.id),onComplete:Prototype.emptyFunction,onSuccess:function(transport){var js=transport.responseText.strip();if(!/^\[.*\]$/.test(js))
537
+ throw('Server returned an invalid collection representation.');this._collection=eval(js);this.checkForExternalText();}.bind(this),onFailure:this.onFailure});new Ajax.Request(this.options.loadCollectionURL,options);},showLoadingText:function(text){this._controls.editor.disabled=true;var tempOption=this._controls.editor.firstChild;if(!tempOption){tempOption=document.createElement('option');tempOption.value='';this._controls.editor.appendChild(tempOption);tempOption.selected=true;}
538
+ tempOption.update((text||'').stripScripts().stripTags());},checkForExternalText:function(){this._text=this.getText();if(this.options.loadTextURL)
539
+ this.loadExternalText();else
540
+ this.buildOptionList();},loadExternalText:function(){this.showLoadingText(this.options.loadingText);var options=Object.extend({method:'get'},this.options.ajaxOptions);Object.extend(options,{parameters:'editorId='+encodeURIComponent(this.element.id),onComplete:Prototype.emptyFunction,onSuccess:function(transport){this._text=transport.responseText.strip();this.buildOptionList();}.bind(this),onFailure:this.onFailure});new Ajax.Request(this.options.loadTextURL,options);},buildOptionList:function(){this._form.removeClassName(this.options.loadingClassName);this._collection=this._collection.map(function(entry){return 2===entry.length?entry:[entry,entry].flatten();});var marker=('value'in this.options)?this.options.value:this._text;var textFound=this._collection.any(function(entry){return entry[0]==marker;}.bind(this));this._controls.editor.update('');var option;this._collection.each(function(entry,index){option=document.createElement('option');option.value=entry[0];option.selected=textFound?entry[0]==marker:0==index;option.appendChild(document.createTextNode(entry[1]));this._controls.editor.appendChild(option);}.bind(this));this._controls.editor.disabled=false;Field.scrollFreeActivate(this._controls.editor);}});Ajax.InPlaceEditor.prototype.initialize.dealWithDeprecatedOptions=function(options){if(!options)return;function fallback(name,expr){if(name in options||expr===undefined)return;options[name]=expr;};fallback('cancelControl',(options.cancelLink?'link':(options.cancelButton?'button':options.cancelLink==options.cancelButton==false?false:undefined)));fallback('okControl',(options.okLink?'link':(options.okButton?'button':options.okLink==options.okButton==false?false:undefined)));fallback('highlightColor',options.highlightcolor);fallback('highlightEndColor',options.highlightendcolor);};Object.extend(Ajax.InPlaceEditor,{DefaultOptions:{ajaxOptions:{},autoRows:3,cancelControl:'link',cancelText:'cancel',clickToEditText:'Click to edit',externalControl:null,externalControlOnly:false,fieldPostCreation:'activate',formClassName:'inplaceeditor-form',formId:null,highlightColor:'#ffff99',highlightEndColor:'#ffffff',hoverClassName:'',htmlResponse:true,loadingClassName:'inplaceeditor-loading',loadingText:'Loading...',okControl:'button',okText:'ok',paramName:'value',rows:1,savingClassName:'inplaceeditor-saving',savingText:'Saving...',size:0,stripLoadedTextTags:false,submitOnBlur:false,textAfterControls:'',textBeforeControls:'',textBetweenControls:''},DefaultCallbacks:{callback:function(form){return Form.serialize(form);},onComplete:function(transport,element){new Effect.Highlight(element,{startcolor:this.options.highlightColor,keepBackgroundImage:true});},onEnterEditMode:null,onEnterHover:function(ipe){ipe.element.style.backgroundColor=ipe.options.highlightColor;if(ipe._effect)
541
+ ipe._effect.cancel();},onFailure:function(transport,ipe){alert('Error communication with the server: '+transport.responseText.stripTags());},onFormCustomization:null,onLeaveEditMode:null,onLeaveHover:function(ipe){ipe._effect=new Effect.Highlight(ipe.element,{startcolor:ipe.options.highlightColor,endcolor:ipe.options.highlightEndColor,restorecolor:ipe._originalBackground,keepBackgroundImage:true});}},Listeners:{click:'enterEditMode',keydown:'checkForEscapeOrReturn',mouseover:'enterHover',mouseout:'leaveHover'}});Ajax.InPlaceCollectionEditor.DefaultOptions={loadingCollectionText:'Loading options...'};Form.Element.DelayedObserver=Class.create({initialize:function(element,delay,callback){this.delay=delay||0.5;this.element=$(element);this.callback=callback;this.timer=null;this.lastValue=$F(this.element);Event.observe(this.element,'keyup',this.delayedListener.bindAsEventListener(this));},delayedListener:function(event){if(this.lastValue==$F(this.element))return;if(this.timer)clearTimeout(this.timer);this.timer=setTimeout(this.onTimerEvent.bind(this),this.delay*1000);this.lastValue=$F(this.element);},onTimerEvent:function(){this.timer=null;this.callback(this.element,$F(this.element));}});;if(!Control)var Control={};Control.Slider=Class.create({initialize:function(handle,track,options){var slider=this;if(Object.isArray(handle)){this.handles=handle.collect(function(e){return $(e)});}else{this.handles=[$(handle)];}
542
+ this.track=$(track);this.options=options||{};this.axis=this.options.axis||'horizontal';this.increment=this.options.increment||1;this.step=parseInt(this.options.step||'1');this.range=this.options.range||$R(0,1);this.value=0;this.values=this.handles.map(function(){return 0});this.spans=this.options.spans?this.options.spans.map(function(s){return $(s)}):false;this.options.startSpan=$(this.options.startSpan||null);this.options.endSpan=$(this.options.endSpan||null);this.restricted=this.options.restricted||false;this.maximum=this.options.maximum||this.range.end;this.minimum=this.options.minimum||this.range.start;this.alignX=parseInt(this.options.alignX||'0');this.alignY=parseInt(this.options.alignY||'0');this.trackLength=this.maximumOffset()-this.minimumOffset();this.handleLength=this.isVertical()?(this.handles[0].offsetHeight!=0?this.handles[0].offsetHeight:this.handles[0].style.height.replace(/px$/,"")):(this.handles[0].offsetWidth!=0?this.handles[0].offsetWidth:this.handles[0].style.width.replace(/px$/,""));this.active=false;this.dragging=false;this.disabled=false;if(this.options.disabled)this.setDisabled();this.allowedValues=this.options.values?this.options.values.sortBy(Prototype.K):false;if(this.allowedValues){this.minimum=this.allowedValues.min();this.maximum=this.allowedValues.max();}
543
+ this.eventMouseDown=this.startDrag.bindAsEventListener(this);this.eventMouseUp=this.endDrag.bindAsEventListener(this);this.eventMouseMove=this.update.bindAsEventListener(this);this.handles.each(function(h,i){i=slider.handles.length-1-i;slider.setValue(parseFloat((Object.isArray(slider.options.sliderValue)?slider.options.sliderValue[i]:slider.options.sliderValue)||slider.range.start),i);h.makePositioned().observe("mousedown",slider.eventMouseDown);});this.track.observe("mousedown",this.eventMouseDown);document.observe("mouseup",this.eventMouseUp);$(this.track.parentNode.parentNode).observe("mousemove",this.eventMouseMove);this.initialized=true;},dispose:function(){var slider=this;Event.stopObserving(this.track,"mousedown",this.eventMouseDown);Event.stopObserving(document,"mouseup",this.eventMouseUp);Event.stopObserving(this.track.parentNode.parentNode,"mousemove",this.eventMouseMove);this.handles.each(function(h){Event.stopObserving(h,"mousedown",slider.eventMouseDown);});},setDisabled:function(){this.disabled=true;this.track.parentNode.className=this.track.parentNode.className+' disabled';},setEnabled:function(){this.disabled=false;},getNearestValue:function(value){if(this.allowedValues){if(value>=this.allowedValues.max())return(this.allowedValues.max());if(value<=this.allowedValues.min())return(this.allowedValues.min());var offset=Math.abs(this.allowedValues[0]-value);var newValue=this.allowedValues[0];this.allowedValues.each(function(v){var currentOffset=Math.abs(v-value);if(currentOffset<=offset){newValue=v;offset=currentOffset;}});return newValue;}
544
+ if(value>this.range.end)return this.range.end;if(value<this.range.start)return this.range.start;return value;},setValue:function(sliderValue,handleIdx){if(!this.active){this.activeHandleIdx=handleIdx||0;this.activeHandle=this.handles[this.activeHandleIdx];this.updateStyles();}
545
+ handleIdx=handleIdx||this.activeHandleIdx||0;if(this.initialized&&this.restricted){if((handleIdx>0)&&(sliderValue<this.values[handleIdx-1]))
546
+ sliderValue=this.values[handleIdx-1];if((handleIdx<(this.handles.length-1))&&(sliderValue>this.values[handleIdx+1]))
547
+ sliderValue=this.values[handleIdx+1];}
548
+ sliderValue=this.getNearestValue(sliderValue);this.values[handleIdx]=sliderValue;this.value=this.values[0];this.handles[handleIdx].style[this.isVertical()?'top':'left']=this.translateToPx(sliderValue);this.drawSpans();if(!this.dragging||!this.event)this.updateFinished();},setValueBy:function(delta,handleIdx){this.setValue(this.values[handleIdx||this.activeHandleIdx||0]+delta,handleIdx||this.activeHandleIdx||0);},translateToPx:function(value){return Math.round(((this.trackLength-this.handleLength)/(this.range.end-this.range.start))*(value-this.range.start))+"px";},translateToValue:function(offset){return((offset/(this.trackLength-this.handleLength)*(this.range.end-this.range.start))+this.range.start);},getRange:function(range){var v=this.values.sortBy(Prototype.K);range=range||0;return $R(v[range],v[range+1]);},minimumOffset:function(){return(this.isVertical()?this.alignY:this.alignX);},maximumOffset:function(){return(this.isVertical()?(this.track.offsetHeight!=0?this.track.offsetHeight:this.track.style.height.replace(/px$/,""))-this.alignY:(this.track.offsetWidth!=0?this.track.offsetWidth:this.track.style.width.replace(/px$/,""))-this.alignX);},isVertical:function(){return(this.axis=='vertical');},drawSpans:function(){var slider=this;if(this.spans)
549
+ $R(0,this.spans.length-1).each(function(r){slider.setSpan(slider.spans[r],slider.getRange(r))});if(this.options.startSpan)
550
+ this.setSpan(this.options.startSpan,$R(0,this.values.length>1?this.getRange(0).min():this.value));if(this.options.endSpan)
551
+ this.setSpan(this.options.endSpan,$R(this.values.length>1?this.getRange(this.spans.length-1).max():this.value,this.maximum));},setSpan:function(span,range){if(this.isVertical()){span.style.top=this.translateToPx(range.start);span.style.height=this.translateToPx(range.end-range.start+this.range.start);}else{span.style.left=this.translateToPx(range.start);span.style.width=this.translateToPx(range.end-range.start+this.range.start);}},updateStyles:function(){this.handles.each(function(h){Element.removeClassName(h,'selected')});Element.addClassName(this.activeHandle,'selected');},startDrag:function(event){if(Event.isLeftClick(event)){if(!this.disabled){this.active=true;var handle=Event.element(event);var pointer=[Event.pointerX(event),Event.pointerY(event)];var track=handle;if(track==this.track){var offsets=Position.cumulativeOffset(this.track);this.event=event;this.setValue(this.translateToValue((this.isVertical()?pointer[1]-offsets[1]:pointer[0]-offsets[0])-(this.handleLength/2)));var offsets=Position.cumulativeOffset(this.activeHandle);this.offsetX=(pointer[0]-offsets[0]);this.offsetY=(pointer[1]-offsets[1]);}else{while((this.handles.indexOf(handle)==-1)&&handle.parentNode)
552
+ handle=handle.parentNode;if(this.handles.indexOf(handle)!=-1){this.activeHandle=handle;this.activeHandleIdx=this.handles.indexOf(this.activeHandle);this.updateStyles();var offsets=Position.cumulativeOffset(this.activeHandle);this.offsetX=(pointer[0]-offsets[0]);this.offsetY=(pointer[1]-offsets[1]);}}}
553
+ Event.stop(event);}},update:function(event){if(this.active){if(!this.dragging)this.dragging=true;this.draw(event);if(Prototype.Browser.WebKit)window.scrollBy(0,0);Event.stop(event);}},draw:function(event){var pointer=[Event.pointerX(event),Event.pointerY(event)];var offsets=Position.cumulativeOffset(this.track);pointer[0]-=this.offsetX+offsets[0];pointer[1]-=this.offsetY+offsets[1];this.event=event;this.setValue(this.translateToValue(this.isVertical()?pointer[1]:pointer[0]));if(this.initialized&&this.options.onSlide)
554
+ this.options.onSlide(this.values.length>1?this.values:this.value,this);},endDrag:function(event){if(this.active&&this.dragging){this.finishDrag(event,true);Event.stop(event);}
555
+ this.active=false;this.dragging=false;},finishDrag:function(event,success){this.active=false;this.dragging=false;this.updateFinished();},updateFinished:function(){if(this.initialized&&this.options.onChange)
556
+ this.options.onChange(this.values.length>1?this.values:this.value,this);this.event=null;}});;function popWin(url,win,para){var win=window.open(url,win,para);win.focus();}
557
+ function setLocation(url){window.location.href=url;}
558
+ function setPLocation(url,setFocus){if(setFocus){window.opener.focus();}
559
+ window.opener.location.href=url;}
560
+ function setLanguageCode(code,fromCode){var href=window.location.href;var after='',dash;if(dash=href.match(/\#(.*)$/)){href=href.replace(/\#(.*)$/,'');after=dash[0];}
561
+ if(href.match(/[?]/)){var re=/([?&]store=)[a-z0-9_]*/;if(href.match(re)){href=href.replace(re,'$1'+code);}else{href+='&store='+code;}
562
+ var re=/([?&]from_store=)[a-z0-9_]*/;if(href.match(re)){href=href.replace(re,'');}}else{href+='?store='+code;}
563
+ if(typeof(fromCode)!='undefined'){href+='&from_store='+fromCode;}
564
+ href+=after;setLocation(href);}
565
+ function decorateGeneric(elements,decorateParams)
566
+ {var allSupportedParams=['odd','even','first','last'];var _decorateParams={};var total=elements.length;if(total){if(typeof(decorateParams)=='undefined'){decorateParams=allSupportedParams;}
567
+ if(!decorateParams.length){return;}
568
+ for(var k in allSupportedParams){_decorateParams[allSupportedParams[k]]=false;}
569
+ for(var k in decorateParams){_decorateParams[decorateParams[k]]=true;}
570
+ if(_decorateParams.first){Element.addClassName(elements[0],'first');}
571
+ if(_decorateParams.last){Element.addClassName(elements[total-1],'last');}
572
+ for(var i=0;i<total;i++){if((i+1)%2==0){if(_decorateParams.even){Element.addClassName(elements[i],'even');}}
573
+ else{if(_decorateParams.odd){Element.addClassName(elements[i],'odd');}}}}}
574
+ function decorateTable(table,options){var table=$(table);if(table){var _options={'tbody':false,'tbody tr':['odd','even','first','last'],'thead tr':['first','last'],'tfoot tr':['first','last'],'tr td':['last']};if(typeof(options)!='undefined'){for(var k in options){_options[k]=options[k];}}
575
+ if(_options['tbody']){decorateGeneric(table.select('tbody'),_options['tbody']);}
576
+ if(_options['tbody tr']){decorateGeneric(table.select('tbody tr'),_options['tbody tr']);}
577
+ if(_options['thead tr']){decorateGeneric(table.select('thead tr'),_options['thead tr']);}
578
+ if(_options['tfoot tr']){decorateGeneric(table.select('tfoot tr'),_options['tfoot tr']);}
579
+ if(_options['tr td']){var allRows=table.select('tr');if(allRows.length){for(var i=0;i<allRows.length;i++){decorateGeneric(allRows[i].getElementsByTagName('TD'),_options['tr td']);}}}}}
580
+ function decorateList(list,nonRecursive){if($(list)){if(typeof(nonRecursive)=='undefined'){var items=$(list).select('li')}
581
+ else{var items=$(list).childElements();}
582
+ decorateGeneric(items,['odd','even','last']);}}
583
+ function decorateDataList(list){list=$(list);if(list){decorateGeneric(list.select('dt'),['odd','even','last']);decorateGeneric(list.select('dd'),['odd','even','last']);}}
584
+ function parseSidUrl(baseUrl,urlExt){sidPos=baseUrl.indexOf('/?SID=');sid='';urlExt=(urlExt!=undefined)?urlExt:'';if(sidPos>-1){sid='?'+baseUrl.substring(sidPos+2);baseUrl=baseUrl.substring(0,sidPos+1);}
585
+ return baseUrl+urlExt+sid;}
586
+ function formatCurrency(price,format,showPlus){precision=isNaN(format.precision=Math.abs(format.precision))?2:format.precision;requiredPrecision=isNaN(format.requiredPrecision=Math.abs(format.requiredPrecision))?2:format.requiredPrecision;precision=requiredPrecision;integerRequired=isNaN(format.integerRequired=Math.abs(format.integerRequired))?1:format.integerRequired;decimalSymbol=format.decimalSymbol==undefined?",":format.decimalSymbol;groupSymbol=format.groupSymbol==undefined?".":format.groupSymbol;groupLength=format.groupLength==undefined?3:format.groupLength;if(showPlus==undefined||showPlus==true){s=price<0?"-":(showPlus?"+":"");}else if(showPlus==false){s='';}
587
+ i=parseInt(price=Math.abs(+price||0).toFixed(precision))+"";pad=(i.length<integerRequired)?(integerRequired-i.length):0;while(pad){i='0'+i;pad--;}
588
+ j=(j=i.length)>groupLength?j%groupLength:0;re=new RegExp("(\\d{"+groupLength+"})(?=\\d)","g");r=(j?i.substr(0,j)+groupSymbol:"")+i.substr(j).replace(re,"$1"+groupSymbol)+(precision?decimalSymbol+Math.abs(price-i).toFixed(precision).replace(/-/,0).slice(2):"")
589
+ if(format.pattern.indexOf('{sign}')==-1){pattern=s+format.pattern;}else{pattern=format.pattern.replace('{sign}',s);}
590
+ return pattern.replace('%s',r).replace(/^\s\s*/,'').replace(/\s\s*$/,'');};function expandDetails(el,childClass){if(Element.hasClassName(el,'show-details')){$$(childClass).each(function(item){item.hide()});Element.removeClassName(el,'show-details');}
591
+ else{$$(childClass).each(function(item){item.show()});Element.addClassName(el,'show-details');}}
592
+ var isIE=navigator.appVersion.match(/MSIE/)=="MSIE";if(!window.Varien)
593
+ var Varien=new Object();Varien.showLoading=function(){Element.show('loading-process');}
594
+ Varien.hideLoading=function(){Element.hide('loading-process');}
595
+ Varien.GlobalHandlers={onCreate:function(){Varien.showLoading();},onComplete:function(){if(Ajax.activeRequestCount==0){Varien.hideLoading();}}};Ajax.Responders.register(Varien.GlobalHandlers);Varien.searchForm=Class.create();Varien.searchForm.prototype={initialize:function(form,field,emptyText){this.form=$(form);this.field=$(field);this.emptyText=emptyText;Event.observe(this.form,'submit',this.submit.bind(this));Event.observe(this.field,'focus',this.focus.bind(this));Event.observe(this.field,'blur',this.blur.bind(this));this.blur();},submit:function(event){if(this.field.value==this.emptyText||this.field.value==''){Event.stop(event);return false;}
596
+ return true;},focus:function(event){if(this.field.value==this.emptyText){this.field.value='';}},blur:function(event){if(this.field.value==''){this.field.value=this.emptyText;}},initAutocomplete:function(url,destinationElement){new Ajax.Autocompleter(this.field,destinationElement,url,{paramName:this.field.name,method:'get',minChars:2,updateElement:this._selectAutocompleteItem.bind(this),onShow:function(element,update){if(!update.style.position||update.style.position=='absolute'){update.style.position='absolute';Position.clone(element,update,{setHeight:false,offsetTop:element.offsetHeight});}
597
+ Effect.Appear(update,{duration:0});}});},_selectAutocompleteItem:function(element){if(element.title){this.field.value=element.title;}
598
+ this.form.submit();}}
599
+ Varien.Tabs=Class.create();Varien.Tabs.prototype={initialize:function(selector){var self=this;$$(selector+' a').each(this.initTab.bind(this));},initTab:function(el){el.href='javascript:void(0)';if($(el.parentNode).hasClassName('active')){this.showContent(el);}
600
+ el.observe('click',this.showContent.bind(this,el));},showContent:function(a){var li=$(a.parentNode),ul=$(li.parentNode);ul.getElementsBySelector('li','ol').each(function(el){var contents=$(el.id+'_contents');if(el==li){el.addClassName('active');contents.show();}else{el.removeClassName('active');contents.hide();}});}}
601
+ Varien.DOB=Class.create();Varien.DOB.prototype={initialize:function(selector,required,format){var el=$$(selector)[0];this.day=Element.select($(el),'.dob-day input')[0];this.month=Element.select($(el),'.dob-month input')[0];this.year=Element.select($(el),'.dob-year input')[0];this.dob=Element.select($(el),'.dob-full input')[0];this.advice=Element.select($(el),'.validation-advice')[0];this.required=required;this.format=format;this.day.validate=this.validate.bind(this);this.month.validate=this.validate.bind(this);this.year.validate=this.validate.bind(this);this.advice.hide();},validate:function(){var error=false;if(this.day.value==''&&this.month.value==''&&this.year.value==''){if(this.required){error='This date is a required value.';}else{this.dob.value='';}}else if(this.day.value==''||this.month.value==''||this.year.value==''){error='Please enter a valid full date.';}else{var date=new Date();if(this.day.value<1||this.day.value>31){error='Please enter a valid day (1-31).';}else if(this.month.value<1||this.month.value>12){error='Please enter a valid month (1-12).';}else if(this.year.value<1900||this.year.value>date.getFullYear()){error='Please enter a valid year (1900-'+date.getFullYear()+').';}else{this.dob.value=this.format.replace(/(%m|%b)/i,this.month.value).replace(/(%d|%e)/i,this.day.value).replace(/%y/i,this.year.value);var testDOB=this.month.value+'/'+this.day.value+'/'+this.year.value;var test=new Date(testDOB);if(isNaN(test)){error='Please enter a valid date.';}}}
602
+ if(error!==false){try{this.advice.innerHTML=Translator.translate(error);}
603
+ catch(e){this.advice.innerHTML=error;}
604
+ this.advice.show();return false;}
605
+ this.advice.hide();return true;}}
606
+ Validation.addAllThese([['validate-custom',' ',function(v,elm){return elm.validate();}]]);function truncateOptions(){$$('.truncated').each(function(element){Event.observe(element,'mouseover',function(){if(element.down('div.truncated_full_value')){element.down('div.truncated_full_value').addClassName('show')}});Event.observe(element,'mouseout',function(){if(element.down('div.truncated_full_value')){element.down('div.truncated_full_value').removeClassName('show')}});});}
607
+ Event.observe(window,'load',function(){truncateOptions();});Element.addMethods({getInnerText:function(element)
608
+ {element=$(element);if(element.innerText&&!Prototype.Browser.Opera){return element.innerText}
609
+ return element.innerHTML.stripScripts().unescapeHTML().replace(/[\n\r\s]+/g,' ');}});if(!("console"in window)||!("firebug"in console))
610
+ {var names=["log","debug","info","warn","error","assert","dir","dirxml","group","groupEnd","time","timeEnd","count","trace","profile","profileEnd"];window.console={};for(var i=0;i<names.length;++i)
611
+ window.console[names[i]]=function(){}};VarienForm=Class.create();VarienForm.prototype={initialize:function(formId,firstFieldFocus){this.form=$(formId);if(!this.form){return;}
612
+ this.cache=$A();this.currLoader=false;this.currDataIndex=false;this.validator=new Validation(this.form);this.elementFocus=this.elementOnFocus.bindAsEventListener(this);this.elementBlur=this.elementOnBlur.bindAsEventListener(this);this.childLoader=this.onChangeChildLoad.bindAsEventListener(this);this.highlightClass='highlight';this.extraChildParams='';this.firstFieldFocus=firstFieldFocus||false;this.bindElements();if(this.firstFieldFocus){try{Form.Element.focus(Form.findFirstElement(this.form))}
613
+ catch(e){}}},submit:function(url){if(this.validator&&this.validator.validate()){this.form.submit();}
614
+ return false;},bindElements:function(){var elements=Form.getElements(this.form);for(var row in elements){if(elements[row].id){Event.observe(elements[row],'focus',this.elementFocus);Event.observe(elements[row],'blur',this.elementBlur);}}},elementOnFocus:function(event){var element=Event.findElement(event,'fieldset');if(element){Element.addClassName(element,this.highlightClass);}},elementOnBlur:function(event){var element=Event.findElement(event,'fieldset');if(element){Element.removeClassName(element,this.highlightClass);}},setElementsRelation:function(parent,child,dataUrl,first){if(parent=$(parent)){if(!this.cache[parent.id]){this.cache[parent.id]=$A();this.cache[parent.id]['child']=child;this.cache[parent.id]['dataUrl']=dataUrl;this.cache[parent.id]['data']=$A();this.cache[parent.id]['first']=first||false;}
615
+ Event.observe(parent,'change',this.childLoader);}},onChangeChildLoad:function(event){element=Event.element(event);this.elementChildLoad(element);},elementChildLoad:function(element,callback){this.callback=callback||false;if(element.value){this.currLoader=element.id;this.currDataIndex=element.value;if(this.cache[element.id]['data'][element.value]){this.setDataToChild(this.cache[element.id]['data'][element.value]);}
616
+ else{new Ajax.Request(this.cache[this.currLoader]['dataUrl'],{method:'post',parameters:{"parent":element.value},onComplete:this.reloadChildren.bind(this)});}}},reloadChildren:function(transport){var data=eval('('+transport.responseText+')');this.cache[this.currLoader]['data'][this.currDataIndex]=data;this.setDataToChild(data);},setDataToChild:function(data){if(data.length){var child=$(this.cache[this.currLoader]['child']);if(child){var html='<select name="'+child.name+'" id="'+child.id+'" class="'+child.className+'" title="'+child.title+'" '+this.extraChildParams+'>';if(this.cache[this.currLoader]['first']){html+='<option value="">'+this.cache[this.currLoader]['first']+'</option>';}
617
+ for(var i in data){if(data[i].value){html+='<option value="'+data[i].value+'"';if(child.value&&(child.value==data[i].value||child.value==data[i].label)){html+=' selected';}
618
+ html+='>'+data[i].label+'</option>';}}
619
+ html+='</select>';Element.insert(child,{before:html});Element.remove(child);}}
620
+ else{var child=$(this.cache[this.currLoader]['child']);if(child){var html='<input type="text" name="'+child.name+'" id="'+child.id+'" class="'+child.className+'" title="'+child.title+'" '+this.extraChildParams+'>';Element.insert(child,{before:html});Element.remove(child);}}
621
+ this.bindElements();if(this.callback){this.callback();}}}
622
+ RegionUpdater=Class.create();RegionUpdater.prototype={initialize:function(countryEl,regionTextEl,regionSelectEl,regions,disableAction,zipEl)
623
+ {this.countryEl=$(countryEl);this.regionTextEl=$(regionTextEl);this.regionSelectEl=$(regionSelectEl);this.zipEl=$(zipEl);this.regions=regions;this.disableAction=(typeof disableAction=='undefined')?'hide':disableAction;this.zipOptions=(typeof zipOptions=='undefined')?false:zipOptions;if(this.regionSelectEl.options.length<=1){this.update();}
624
+ Event.observe(this.countryEl,'change',this.update.bind(this));},update:function()
625
+ {if(this.regions[this.countryEl.value]){var i,option,region,def;if(this.regionTextEl){def=this.regionTextEl.value.toLowerCase();this.regionTextEl.value='';}
626
+ if(!def){def=this.regionSelectEl.getAttribute('defaultValue');}
627
+ this.regionSelectEl.options.length=1;for(regionId in this.regions[this.countryEl.value]){region=this.regions[this.countryEl.value][regionId];option=document.createElement('OPTION');option.value=regionId;option.text=region.name;if(this.regionSelectEl.options.add){this.regionSelectEl.options.add(option);}else{this.regionSelectEl.appendChild(option);}
628
+ if(regionId==def||region.name.toLowerCase()==def||region.code.toLowerCase()==def){this.regionSelectEl.value=regionId;}}
629
+ if(this.disableAction=='hide'){if(this.regionTextEl){this.regionTextEl.style.display='none';}
630
+ this.regionSelectEl.style.display='';}else if(this.disableAction=='disable'){if(this.regionTextEl){this.regionTextEl.disabled=true;}
631
+ this.regionSelectEl.disabled=false;}
632
+ this.setMarkDisplay(this.regionSelectEl,true);}else{if(this.disableAction=='hide'){if(this.regionTextEl){this.regionTextEl.style.display='';}
633
+ this.regionSelectEl.style.display='none';Validation.reset(this.regionSelectEl);}else if(this.disableAction=='disable'){if(this.regionTextEl){this.regionTextEl.disabled=false;}
634
+ this.regionSelectEl.disabled=true;}else if(this.disableAction=='nullify'){this.regionSelectEl.options.length=1;this.regionSelectEl.value='';this.regionSelectEl.selectedIndex=0;this.lastCountryId='';}
635
+ this.setMarkDisplay(this.regionSelectEl,false);}
636
+ var zipUpdater=new ZipUpdater(this.countryEl.value,this.zipEl);zipUpdater.update();},setMarkDisplay:function(elem,display){elem=$(elem);var labelElement=elem.up(0).down('label > span.required')||elem.up(1).down('label > span.required')||elem.up(0).down('label.required > em')||elem.up(1).down('label.required > em');if(labelElement){inputElement=labelElement.up().next('input');if(display){labelElement.show();if(inputElement){inputElement.addClassName('required-entry');}}else{labelElement.hide();if(inputElement){inputElement.removeClassName('required-entry');}}}}}
637
+ ZipUpdater=Class.create();ZipUpdater.prototype={initialize:function(country,zipElement)
638
+ {this.country=country;this.zipElement=$(zipElement);},update:function()
639
+ {if(typeof optionalZipCountries=='undefined'){return false;}
640
+ if(this.zipElement!=undefined){this._setPostcodeOptional();}else{Event.observe(window,"load",this._setPostcodeOptional.bind(this));}},_setPostcodeOptional:function()
641
+ {this.zipElement=$(this.zipElement);if(this.zipElement==undefined){return false;}
642
+ var label=$$('label[for="'+this.zipElement.id+'"]')[0];if(label!=undefined){var wildCard=label.down('em')||label.down('span.required');}
643
+ if(optionalZipCountries.indexOf(this.country)!=-1){while(this.zipElement.hasClassName('required-entry')){this.zipElement.removeClassName('required-entry');}
644
+ if(wildCard!=undefined){wildCard.hide();}}else{this.zipElement.addClassName('required-entry');if(wildCard!=undefined){wildCard.show();}}}};function toggleMenu(el,over)
645
+ {if(over){Element.addClassName(el,'over');}
646
+ else{Element.removeClassName(el,'over');}};var Translate=Class.create();Translate.prototype={initialize:function(data){this.data=$H(data);},translate:function(){var args=arguments;var text=arguments[0];if(this.data.get(text)){return this.data.get(text);}
647
+ return text;},add:function(){if(arguments.length>1){this.data.set(arguments[0],arguments[1]);}else if(typeof arguments[0]=='object'){$H(arguments[0]).each(function(pair){this.data.set(pair.key,pair.value);}.bind(this));}}};if(!window.Mage)var Mage={};Mage.Cookies={};Mage.Cookies.expires=null;Mage.Cookies.path='/';Mage.Cookies.domain=null;Mage.Cookies.secure=false;Mage.Cookies.set=function(name,value){var argv=arguments;var argc=arguments.length;var expires=(argc>2)?argv[2]:Mage.Cookies.expires;var path=(argc>3)?argv[3]:Mage.Cookies.path;var domain=(argc>4)?argv[4]:Mage.Cookies.domain;var secure=(argc>5)?argv[5]:Mage.Cookies.secure;document.cookie=name+"="+escape(value)+
648
+ ((expires==null)?"":("; expires="+expires.toGMTString()))+
649
+ ((path==null)?"":("; path="+path))+
650
+ ((domain==null)?"":("; domain="+domain))+
651
+ ((secure==true)?"; secure":"");};Mage.Cookies.get=function(name){var arg=name+"=";var alen=arg.length;var clen=document.cookie.length;var i=0;var j=0;while(i<clen){j=i+alen;if(document.cookie.substring(i,j)==arg)
652
+ return Mage.Cookies.getCookieVal(j);i=document.cookie.indexOf(" ",i)+1;if(i==0)
653
+ break;}
654
+ return null;};Mage.Cookies.clear=function(name){if(Mage.Cookies.get(name)){document.cookie=name+"="+"; expires=Thu, 01-Jan-70 00:00:01 GMT";}};Mage.Cookies.getCookieVal=function(offset){var endstr=document.cookie.indexOf(";",offset);if(endstr==-1){endstr=document.cookie.length;}
655
+ return unescape(document.cookie.substring(offset,endstr));};
var/minifycache/minify_95afbee78c0f49b564250d655add1ca9.gz ADDED
Binary file
var/minifycache/minify_9c58e36f7d68249efd03de258c77c943 ADDED
@@ -0,0 +1,1097 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .widget{display:inline}.widget .widget-title{clear:both;padding:15px
2
+ 0 0;margin:0
3
+ 0 7px}.widget .widget-title
4
+ h2{font-size:15px;font-weight:bold;color:#e25203}.widget .mini-products-images-list .product-image{display:block;width:76px;height:76px;border:1px
5
+ solid #a9a9a9;margin:0
6
+ auto}.widget .mini-products-images-list
7
+ li.item{float:left;width:77px;height:77px}.widget-new-products{display:block}.col-main .widget-new-products{margin:7px
8
+ 0}.widget-new-products .products-grid .product-image,
9
+ .widget-new-products .products-list .product-image{width:85px;height:85px}.widget-new-products .products-list .product-shop{margin-left:100px}.sidebar .widget-new-products
10
+ .block{font-size:11px;line-height:1.25}.sidebar .widget-new-products .block-title
11
+ strong{background:url(/FM0015_Speedster/skin/frontend/base/default/images/widgets/i_widget-new.gif) 0 1px no-repeat;padding-left:21px;color:#dc5033}.widget-viewed{display:block}.col-main .widget-viewed{margin:7px
12
+ 0}.widget-viewed .products-grid .product-image,
13
+ .widget-viewed .products-list .product-image{width:85px;height:85px}.widget-viewed .products-list .product-shop{margin-left:100px}.sidebar .widget-viewed
14
+ .block{font-size:11px;line-height:1.25}.sidebar .widget-viewed .block-title
15
+ strong{background:url(/FM0015_Speedster/skin/frontend/base/default/images/widgets/i_block-list.gif) 0 0 no-repeat;padding-left:21px}.widget-compared{display:block}.col-main .widget-compared{margin:7px
16
+ 0}.widget-compared .products-grid .product-image,
17
+ .widget-compared .products-list .product-image{width:85px;height:85px}.widget-compared .products-list .product-shop{margin-left:100px}.sidebar .widget-compared
18
+ .block{font-size:11px;line-height:1.25}.sidebar .widget-compared .block-title
19
+ strong{background:url(/FM0015_Speedster/skin/frontend/base/default/images/widgets/i_block-list.gif) 0 0 no-repeat;padding-left:21px}.widget-static-block{}.sidebar .widget-static-block{display:block;margin:0
20
+ 0 15px}.top-container .widget
21
+ a{padding:0
22
+ 0 0 7px}.bottom-container .widget
23
+ a{padding:0
24
+ 3px}.widget-product-link-inline{display:inline}.col-main .widget-product-link{display:block;text-align:right;margin:7px
25
+ 0}.col-main .widget-product-link
26
+ a{background:url(/FM0015_Speedster/skin/frontend/base/default/images/widgets/i_widget-link.gif) 100% 4px no-repeat;padding-right:15px}.sidebar .widget-product-link{display:block;margin:0
27
+ 0 15px;padding:0
28
+ 10px}.sidebar .widget-product-link
29
+ a{background:url(/FM0015_Speedster/skin/frontend/base/default/images/widgets/i_widget-link.gif) 100% 4px no-repeat;padding:0
30
+ 15px 0 0}.widget-category-link-inline{display:inline}.col-main .widget-category-link{display:block;text-align:right;margin:7px
31
+ 0}.col-main .widget-category-link
32
+ a{background:url(/FM0015_Speedster/skin/frontend/base/default/images/widgets/i_widget-link.gif) 100% 4px no-repeat;padding-right:15px}.sidebar .widget-category-link{display:block;margin:0
33
+ 0 15px;padding:0
34
+ 10px}.sidebar .widget-category-link
35
+ a{background:url(/FM0015_Speedster/skin/frontend/base/default/images/widgets/i_widget-link.gif) 100% 4px no-repeat;padding:0
36
+ 15px 0 0}.widget-cms-link-inline{display:inline}.col-main .widget-cms-link{display:block;text-align:right;margin:7px
37
+ 0}.col-main .widget-cms-link
38
+ a{background:url(/FM0015_Speedster/skin/frontend/base/default/images/widgets/i_widget-link.gif) 100% 4px no-repeat;padding-right:15px}.sidebar .widget-cms-link{display:block;margin:0
39
+ 0 15px;padding:0
40
+ 10px}.sidebar .widget-cms-link
41
+ a{background:url(/FM0015_Speedster/skin/frontend/base/default/images/widgets/i_widget-link.gif) 100% 4px no-repeat;padding:0
42
+ 15px 0 0}*{margin:0;padding:0}body{background:#496778 url(/FM0015_Speedster/skin/frontend/default/default/images/bkg_body.gif) 50% 0 repeat-y;font:12px/1.55 Arial,Helvetica,sans-serif;color:#2f2f2f;text-align:center}img{border:0;vertical-align:top}a{color:#1e7ec8;text-decoration:underline}a:hover{text-decoration:none}:focus{outline:0}h1,h2,h3,h4,h5,h6{margin:0
43
+ 0 5px;line-height:1.35;color:#0a263c}h1{font-size:20px;font-weight:normal}h2{font-size:18px;font-weight:normal}h3{font-size:16px;font-weight:bold}h4{font-size:14px;font-weight:bold}h5{font-size:12px;font-weight:bold}h6{font-size:11px;font-weight:bold}form{display:inline}fieldset{border:0}legend{display:none}table{border:0;border-spacing:0;empty-cells:show;font-size:100%}caption,th,td{vertical-align:top;text-align:left;font-weight:normal}p{margin:0
44
+ 0 10px}strong{font-weight:bold}address{font-style:normal;line-height:1.35}cite{font-style:normal}q,blockquote{quotes:none}q:before,q:after{content:''}small,big{font-size:1em}ul,ol{list-style:none}.hidden{display:block !important;border:0
45
+ !important;margin:0
46
+ !important;padding:0
47
+ !important;font-size:0 !important;line-height:0 !important;width:0 !important;height:0 !important;overflow:hidden !important}.nobr{white-space:nowrap !important}.wrap{white-space:normal !important}.a-left{text-align:left !important}.a-center{text-align:center !important}.a-right{text-align:right !important}.v-top{vertical-align:top}.v-middle{vertical-align:middle}.f-left,.left{float:left !important}.f-right,.right{float:right !important}.f-none{float:none !important}.f-fix{float:left;width:100%}.no-display{display:none}.no-margin{margin:0
48
+ !important}.no-padding{padding:0
49
+ !important}.no-bg{background:none !important}.wrapper{min-width:954px}.page{}.page-print{background:#fff;padding:25px
50
+ 30px;text-align:left}.page-empty{background:#fff;padding:20px;text-align:left}.page-popup{background:#fff;padding:25px
51
+ 30px;text-align:left}.main-container{background:#fbfaf6 url(/FM0015_Speedster/skin/frontend/default/default/images/bkg_main1.gif) 50% 0 no-repeat}.main{width:900px;margin:0
52
+ auto;min-height:400px;padding:25px
53
+ 25px 80px;background:#fffffe url(/FM0015_Speedster/skin/frontend/default/default/images/bkg_main2.gif) 0 0 no-repeat;text-align:left}.col-left{float:left;width:195px;padding:0
54
+ 0 1px}.col-main{float:left;width:685px;padding:0
55
+ 0 1px}.col-right{float:right;width:195px;padding:0
56
+ 0 1px}.col1-layout .col-main{float:none;width:auto}.col2-left-layout .col-main{float:right}.col2-right-layout .col-main{}.col3-layout .col-main{width:475px;margin-left:17px}.col3-layout .col-wrapper{float:left;width:687px}.col3-layout .col-wrapper .col-main{float:right}.col2-set .col-1{float:left;width:48.5%}.col2-set .col-2{float:right;width:48.5%}.col2-set .col-narrow{width:32%}.col2-set .col-wide{width:65%}.col3-set .col-1{float:left;width:32%}.col3-set .col-2{float:left;width:32%;margin-left:2%}.col3-set .col-3{float:right;width:32%}.col4-set .col-1{float:left;width:23.5%}.col4-set .col-2{float:left;width:23.5%;margin:0
57
+ 2%}.col4-set .col-3{float:left;width:23.5%}.col4-set .col-4{float:right;width:23.5%}input,select,textarea,button{font:12px/15px Arial,Helvetica,sans-serif;vertical-align:middle;color:#2f2f2f}input.input-text,select,textarea{background:#fff;border:1px
58
+ solid #b6b6b6}input.input-text,textarea{padding:2px}select{padding:1px}select
59
+ option{padding-right:10px}select.multiselect
60
+ option{border-bottom:1px solid #b6b6b6;padding:2px
61
+ 5px}select.multiselect option:last-child{border-bottom:0}textarea{overflow:auto}input.radio{margin-right:3px}input.checkbox{margin-right:3px}input.qty{width:2.5em !important}button.button::-moz-focus-inner{padding:0;border:0}button.button{-webkit-border-fit:lines}button.button{overflow:visible;width:auto;border:0;padding:0;margin:0;background:transparent;cursor:pointer}button.button
62
+ span{display:block;height:19px;border:1px
63
+ solid #de5400;background:#f18200;padding:0
64
+ 8px;font:bold 12px/19px Arial, Helvetica, sans-serif;text-align:center;white-space:nowrap;color:#fff}button.button span
65
+ span{border:0;padding:0}button.disabled
66
+ span{border-color:#bbb !important;background:#bbb !important}button.btn-checkout
67
+ span{height:40px;border:0;background:url(/FM0015_Speedster/skin/frontend/default/default/images/btn_checkout.gif) 0 0 no-repeat;padding:0
68
+ 0 0 9px;font:bold 15px/40px Arial, Helvetica, sans-serif;color:#fff}button.btn-checkout span
69
+ span{background-position:100% 0;padding:0
70
+ 25px 0 16px}button.btn-checkout.no-checkout
71
+ span{background-position:0 100%;color:#b8baba}button.btn-checkout.no-checkout span
72
+ span{background-position:100% 100%}p.control input.checkbox,
73
+ p.control
74
+ input.radio{margin-right:6px}input.input-text:focus,select:focus,textarea:focus{background-color:#edf7fd}.form-list
75
+ li{margin:0
76
+ 0 8px}.form-list
77
+ label{float:left;color:#666;font-weight:bold;position:relative;z-index:0}.form-list
78
+ label.required{}.form-list label.required
79
+ em{float:right;font-style:normal;color:#eb340a;position:absolute;top:0;right:-8px}.form-list li.control
80
+ label{float:none}.form-list li.control input.radio,
81
+ .form-list li.control
82
+ input.checkbox{margin-right:6px}.form-list li.control .input-box{clear:none;display:inline;width:auto}.form-list .input-box{display:block;clear:both;width:260px}.form-list
83
+ .field{float:left;width:275px}.form-list input.input-text{width:254px}.form-list
84
+ textarea{width:254px;height:10em}.form-list
85
+ select{width:260px}.form-list li.wide .input-box{width:535px}.form-list li.wide input.input-text{width:529px}.form-list li.wide
86
+ textarea{width:529px}.form-list li.wide
87
+ select{width:535px}.form-list li.additional-row{border-top:1px solid #ccc;margin-top:10px;padding-top:7px}.form-list li.additional-row .btn-remove{float:right;margin:5px
88
+ 0 0}.form-list .input-range input.input-text{width:74px}.form-list .customer-name-prefix .input-box,
89
+ .form-list .customer-name-suffix .input-box,
90
+ .form-list .customer-name-prefix-suffix .input-box,
91
+ .form-list .customer-name-prefix-middlename .input-box,
92
+ .form-list .customer-name-middlename-suffix .input-box,
93
+ .form-list .customer-name-prefix-middlename-suffix .input-box{width:auto}.form-list .name-prefix{width:65px}.form-list .name-prefix
94
+ select{width:55px}.form-list .name-prefix input.input-text{width:49px}.form-list .name-suffix{width:65px}.form-list .name-suffix
95
+ select{width:55px}.form-list .name-suffix input.input-text{width:49px}.form-list .name-middlename{width:70px}.form-list .name-middlename input.input-text{width:49px}.form-list .customer-name-prefix-middlename-suffix .name-firstname,
96
+ .form-list .customer-name-prefix-middlename .name-firstname{width:140px}.form-list .customer-name-prefix-middlename-suffix .name-firstname input.input-text,
97
+ .form-list .customer-name-prefix-middlename .name-firstname input.input-text{width:124px}.form-list .customer-name-prefix-middlename-suffix .name-lastname{width:205px}.form-list .customer-name-prefix-middlename-suffix .name-lastname input.input-text{width:189px}.form-list .customer-name-prefix-suffix .name-firstname{width:210px}.form-list .customer-name-prefix-suffix .name-lastname{width:205px}.form-list .customer-name-prefix-suffix .name-firstname input.input-text,
98
+ .form-list .customer-name-prefix-suffix .name-lastname input.input-text{width:189px}.form-list .customer-name-prefix-suffix .name-firstname{width:210px}.form-list .customer-name-prefix-suffix .name-lastname{width:205px}.form-list .customer-name-prefix-suffix .name-firstname input.input-text,
99
+ .form-list .customer-name-prefix-suffix .name-lastname input.input-text{width:189px}.form-list .customer-name-prefix .name-firstname,
100
+ .form-list .customer-name-middlename .name-firstname{width:210px}.form-list .customer-name-suffix .name-lastname,
101
+ .form-list .customer-name-middlename .name-firstname,
102
+ .form-list .customer-name-middlename-suffix .name-firstname,
103
+ .form-list .customer-name-middlename-suffix .name-lastname{width:205px}.form-list .customer-name-prefix .name-firstname input.input-text,
104
+ .form-list .customer-name-suffix .name-lastname input.input-text,
105
+ .form-list .customer-name-middlename .name-firstname input.input-text,
106
+ .form-list .customer-name-middlename-suffix .name-firstname input.input-text,
107
+ .form-list .customer-name-middlename-suffix .name-lastname input.input-text{width:189px}.form-list .customer-dob .dob-month,
108
+ .form-list .customer-dob .dob-day,
109
+ .form-list .customer-dob .dob-year{float:left;width:85px}.form-list .customer-dob input.input-text{display:block;width:74px}.form-list .customer-dob
110
+ label{font-size:10px;font-weight:normal;color:#888}.form-list .customer-dob .dob-day,
111
+ .form-list .customer-dob .dob-month{width:60px}.form-list .customer-dob .dob-day input.input-text,
112
+ .form-list .customer-dob .dob-month input.input-text{width:46px}.form-list .customer-dob .dob-year{width:140px}.form-list .customer-dob .dob-year input.input-text{width:134px}.buttons-set{clear:both;margin:4em
113
+ 0 0;padding:8px
114
+ 0 0;border-top:1px solid #e4e4e4;text-align:right}.buttons-set
115
+ p.required{margin:0
116
+ 0 10px}.buttons-set .back-link{float:left;margin:0}.buttons-set
117
+ button.button{float:right;margin-left:5px}.buttons-set-order{margin:10px
118
+ 0 0}.buttons-set-order .please-wait{padding:12px
119
+ 7px 0 0}.fieldset{border:1px
120
+ solid #bbafa0;background:#fbfaf6;padding:22px
121
+ 25px 12px 33px;margin:28px
122
+ 0}.fieldset
123
+ .legend{float:left;font-weight:bold;font-size:13px;border:1px
124
+ solid #f19900;background:#f9f3e3;color:#e76200;margin:-33px 0 0 -10px;padding:0
125
+ 8px;position:relative}.validation-advice{clear:both;min-height:13px;margin:3px
126
+ 0 0;padding-left:17px;font-size:11px;font-weight:bold;line-height:13px;background:url(/FM0015_Speedster/skin/frontend/default/default/images/validation_advice_bg.gif) 2px 0 no-repeat;color:#eb340a}.validation-failed{border:1px
127
+ dashed #eb340a !important;background:#faebe7 !important}.validation-passed{}p.required{font-size:11px;text-align:right;color:#EB340A}.v-fix{float:left}.v-fix .validation-advice{display:block;width:12em;margin-right:-12em;position:relative}.success{color:#3d6611;font-weight:bold}.error{color:#df280a;font-weight:bold}.notice{color:#e26703}.messages,
128
+ .messages
129
+ ul{list-style:none !important;margin:0
130
+ !important;padding:0
131
+ !important}.messages{width:100%;overflow:hidden}.messages
132
+ li{margin:0
133
+ 0 10px !important}.messages li
134
+ li{margin:0
135
+ 0 3px !important}.error-msg,.success-msg,.note-msg,.notice-msg{border-style:solid !important;border-width:1px !important;background-position:10px 9px !important;background-repeat:no-repeat !important;min-height:24px !important;padding:8px
136
+ 8px 8px 32px !important;font-size:11px !important;font-weight:bold !important}.error-msg{border-color:#f16048;background-color:#faebe7;background-image:url(/FM0015_Speedster/skin/frontend/default/default/images/i_msg-error.gif);color:#df280a}.success-msg{border-color:#446423;background-color:#eff5ea;background-image:url(/FM0015_Speedster/skin/frontend/default/default/images/i_msg-success.gif);color:#3d6611}.note-msg,.notice-msg{border-color:#fcd344;background-color:#fafaec;background-image:url(/FM0015_Speedster/skin/frontend/default/default/images/i_msg-note.gif);color:#3d6611}.breadcrumbs{font-size:11px;line-height:1.25;margin:0
137
+ 0 13px}.breadcrumbs
138
+ li{display:inline}.breadcrumbs li
139
+ strong{font-weight:bold}.page-title{width:100%;overflow:hidden;border-bottom:1px solid #ccc;margin:0
140
+ 0 25px}.page-title h1,
141
+ .page-title
142
+ h2{margin:0;font-size:20px;color:#0a263c}.page-title
143
+ .separator{margin:0
144
+ 3px}.page-title .link-rss{float:right;margin:7px
145
+ 0 0}.title-buttons{text-align:right}.title-buttons h1,
146
+ .title-buttons h2,
147
+ .title-buttons h3,
148
+ .title-buttons h4,
149
+ .title-buttons h5,
150
+ .title-buttons
151
+ h6{float:left}.subtitle{clear:both;padding:15px
152
+ 0 0;font-size:15px;font-weight:bold;margin:0
153
+ 0 6px;color:#e25203}.pager{font-size:11px;background:#fff url(/FM0015_Speedster/skin/frontend/default/default/images/bkg_toolbar.gif) 0 100% repeat-x;padding:4px
154
+ 8px;border-top:1px solid #e2e2e2;text-align:center}.pager
155
+ .amount{float:left;margin:0}.pager
156
+ .limiter{float:right}.pager .limiter
157
+ label{vertical-align:middle}.pager .limiter
158
+ select{padding:0;margin:0
159
+ 0 1px;vertical-align:middle}.pager
160
+ .pages{margin:0
161
+ 140px}.pager .pages
162
+ ol{display:inline}.pager .pages
163
+ li{display:inline;margin:0
164
+ 2px}.pager .pages
165
+ .current{}.sorter{font-size:11px;background:#fff url(/FM0015_Speedster/skin/frontend/default/default/images/bkg_toolbar.gif) 0 100% repeat-x;padding:3px
166
+ 8px;border-top:1px solid #e2e2e2}.sorter .view-mode{float:left;margin:0}.sorter .sort-by{float:right;padding-right:36px}.sorter .sort-by
167
+ label{vertical-align:middle}.sorter .sort-by
168
+ select{padding:0;margin:0
169
+ 0 1px;vertical-align:middle}.sorter .link-feed{}.toolbar{}.toolbar
170
+ .pager{padding:3px
171
+ 8px;border-bottom:1px solid #fff}.toolbar
172
+ .sorter{border-bottom:1px solid #fff}.toolbar-bottom{}.data-table{width:100%;border:1px
173
+ solid #bebcb7}.data-table
174
+ .odd{background:#f8f7f5}.data-table
175
+ .even{background:#eeeded}.data-table td.last,
176
+ .data-table
177
+ th.last{border-right:0}.data-table tr.last th,
178
+ .data-table tr.last
179
+ td{border-bottom:0 !important}.data-table
180
+ th{padding:3px
181
+ 8px;font-weight:bold}.data-table
182
+ td{padding:3px
183
+ 8px}.data-table thead
184
+ th{font-weight:bold;border-right:1px solid #c2d3e0;padding:2px
185
+ 8px;color:#0a263c;white-space:nowrap;vertical-align:middle}.data-table thead
186
+ th.wrap{white-space:normal}.data-table thead th a,
187
+ .data-table thead th a:hover{color:#fff}.data-table thead
188
+ th{background:url(/FM0015_Speedster/skin/frontend/default/default/images/bkg_th.gif) repeat-x 0 100% #d9e5ee}.data-table thead th .tax-flag{font-size:11px;white-space:nowrap}.data-table
189
+ tfoot{border-bottom:1px solid #d9dde3}.data-table tfoot
190
+ tr.first{background:url(/FM0015_Speedster/skin/frontend/default/default/images/bkg_tfoot.gif) 0 0 repeat-x}.data-table tfoot
191
+ tr{background-color:#dee5e8 !important}.data-table tfoot
192
+ td{padding-top:1px;padding-bottom:1px;border-bottom:0;border-right:1px solid #d9dde3}.data-table tfoot
193
+ strong{font-size:16px}.data-table tbody th,
194
+ .data-table tbody
195
+ td{border-bottom:1px solid #d9dde3;border-right:1px solid #d9dde3}.data-table tbody.odd
196
+ tr{background:#f8f7f5 !important}.data-table tbody.even
197
+ tr{background:#f6f6f6 !important}.data-table tbody.odd tr td,
198
+ .data-table tbody.even tr
199
+ td{border-bottom:0}.data-table tbody.odd tr.border td,
200
+ .data-table tbody.even tr.border
201
+ td{border-bottom:1px solid #d9dde3}.data-table tbody td .option-label{font-weight:bold;font-style:italic}.data-table tbody td .option-value{padding-left:10px}tr.tax-total{cursor:pointer}tr.tax-total
202
+ td{}tr.tax-total .tax-collapse{float:right;text-align:right;padding-left:20px;background:url(/FM0015_Speedster/skin/frontend/default/default/images/bkg_collapse.gif) 0 5px no-repeat;cursor:pointer}tr.show-details .tax-collapse{background-position:0 -52px}tr.show-details
203
+ td{}tr.tax-details
204
+ td{font-size:11px;background-color:#dae1e4;color:#626465}tr.tax-details-first
205
+ td{border-top:1px solid #d2d8db}.cart-tax-info{display:block}.cart-tax-info,
206
+ .cart-tax-info .cart-price{padding-right:20px}.cart-tax-total{display:block;padding-right:20px;background:url(/FM0015_Speedster/skin/frontend/default/default/images/bkg_collapse.gif) 100% 5px no-repeat;cursor:pointer}.cart-tax-info .price,
207
+ .cart-tax-total
208
+ .price{display:inline !important;font-weight:normal !important}.cart-tax-total-expanded{background-position:100% -52px}.std
209
+ .subtitle{padding:0}.std
210
+ ol.ol{list-style:decimal outside;padding-left:1.5em}.std
211
+ ul.disc{margin:0
212
+ 0 10px}.std
213
+ ul.disc{list-style:disc outside;padding-left:18px}.std dl
214
+ dt{font-weight:bold}.std dl
215
+ dd{margin:0
216
+ 0 10px}.links
217
+ li{display:inline}.links
218
+ li.first{padding-left:0 !important}.links
219
+ li.last{background:none !important;padding-right:0 !important}.link-cart{color:#dc6809 !important;font-weight:bold}.link-wishlist{color:#dc6809 !important;font-weight:bold}.link-reorder{font-weight:bold;color:#dc6809 !important}.link-compare{font-weight:bold}.link-print{font-weight:bold;color:#dc6809}.link-rss{background:url(/FM0015_Speedster/skin/frontend/default/default/images/i_rss.gif) 0 2px no-repeat;padding-left:18px;line-height:14px;white-space:nowrap}.btn-remove{display:block;width:11px;height:11px;font-size:0;line-height:0;background:url(/FM0015_Speedster/skin/frontend/default/default/images/btn_remove.gif) 0 0 no-repeat;text-indent:-999em;overflow:hidden}.btn-remove2{display:block;width:16px;height:16px;font-size:0;line-height:0;background:url(/FM0015_Speedster/skin/frontend/default/default/images/btn_trash.gif) 0 0 no-repeat;text-indent:-999em;overflow:hidden}.separator{margin:0
220
+ 3px}.divider{clear:both;display:block;font-size:0;line-height:0;height:1px;margin:10px
221
+ 0;background:url(/FM0015_Speedster/skin/frontend/default/default/images/bkg_divider1.gif) 0 50% repeat-x;text-indent:-999em;overflow:hidden}.noscript{border:1px
222
+ solid #ddd;border-width:0 0 1px;background:#ffff90;font-size:12px;line-height:1.25;text-align:center;color:#2f2f2f}.noscript .noscript-inner{width:950px;margin:0
223
+ auto;padding:12px
224
+ 0 12px;background:url(/FM0015_Speedster/skin/frontend/default/default/images/i_notice.gif) 20px 50% no-repeat}.noscript
225
+ p{margin:0}.demo-notice{margin:0;padding:6px
226
+ 10px;background:#d75f07;font-size:12px;line-height:1.15;text-align:center;color:#fff}.logo{float:left}.header-container{border-top:5px solid #0d2131;border-bottom:1px solid #415966;background:url(/FM0015_Speedster/skin/frontend/default/default/images/bkg_header.jpg) 50% 0 repeat}.header{width:930px;margin:0
227
+ auto;padding:10px;text-align:right;position:relative;z-index:10}.header
228
+ .logo{float:left;margin:3px
229
+ 0 10px 12px;text-decoration:none !important}.header .logo
230
+ strong{position:absolute;top:-999em;left:-999em;width:0;height:0;font-size:0;line-height:0;text-indent:-999em;overflow:hidden}.header
231
+ h1.logo{margin:0}.header .quick-access{float:right;width:600px;padding:28px
232
+ 10px 0 0}.header .welcome-msg{margin:0;color:#fff;text-align:right}.header .form-search{position:absolute;top:0;right:29px;width:315px;height:30px;background:url(/FM0015_Speedster/skin/frontend/default/default/images/bkg_form-search.gif) 0 0 no-repeat;padding:1px
233
+ 0 0 16px}.header .form-search
234
+ label{float:left;width:24px;height:21px;text-align:left;text-indent:-999em;overflow:hidden}.header .form-search input.input-text{float:left;border-color:#5c7989;width:209px;margin-right:4px}.header .form-search
235
+ button.button{float:left}.header .form-search button.button
236
+ span{border:0;height:21px;background:url(/FM0015_Speedster/skin/frontend/default/default/images/btn_search.gif) 0 0 no-repeat;padding:0
237
+ 0 0 3px;font:bold 11px/21px Tahoma, Verdana, Arial, sans-serif}.header .form-search button.button span
238
+ span{background-position:100% 0;padding:0
239
+ 6px 0 3px}.header .form-search .search-autocomplete{z-index:999;left:40px !important;top:22px !important}.header .form-search .search-autocomplete
240
+ ul{border:1px
241
+ solid #5c7989;background-color:#f9f5f0}.header .form-search .search-autocomplete
242
+ li{text-align:left;border-bottom:1px solid #f4eee7;padding:2px
243
+ 8px 1px 8px;cursor:pointer}.header .form-search .search-autocomplete li
244
+ .amount{float:right;font-weight:bold}.header .form-search .search-autocomplete
245
+ li.odd{background-color:#fffefb}.header .form-search .search-autocomplete
246
+ li.selected{background-color:#f7e8dd}.header .form-language{clear:both;padding:5px
247
+ 0 0;text-align:right}.header .form-language
248
+ label{font-weight:bold;padding-right:5px;color:#a7c6dd;vertical-align:middle}.header .form-language
249
+ select{padding:0}.header .form-language select.flags
250
+ option{background-position:4px 50%;background-repeat:no-repeat;padding-left:25px}.header
251
+ .links{float:right;margin:0
252
+ 0 6px}.header .links
253
+ li{float:left;font-size:11px;background:url(/FM0015_Speedster/skin/frontend/default/default/images/bkg_pipe1.gif) 100% 60% no-repeat;padding:0
254
+ 8px 0 7px}.header .links
255
+ a{color:#ebbc58}.header-container .top-container{clear:both;padding:5px
256
+ 10px 0 12px;text-align:right}.header-container .top-container
257
+ a{font-size:11px;color:#ebbc58}.nav-container{background:#0a263d url(/FM0015_Speedster/skin/frontend/default/default/images/bkg_nav0.jpg) 50% 0 repeat-y}#nav{width:918px;margin:0
258
+ auto;padding:0
259
+ 16px;font-size:13px}#nav
260
+ li{position:relative;text-align:left}#nav
261
+ li.over{z-index:999}#nav a,
262
+ #nav a:hover{display:block;line-height:1.3em;text-decoration:none}#nav
263
+ span{display:block;cursor:pointer;white-space:nowrap}#nav li ul
264
+ span{white-space:normal}#nav
265
+ li{float:left}#nav li.active
266
+ a{color:#d96708}#nav
267
+ a{float:left;padding:5px
268
+ 12px 6px 8px;color:#a7c6dd;font-weight:bold}#nav li.over a,
269
+ #nav a:hover{color:#d96708}#nav ul li,
270
+ #nav ul
271
+ li.active{float:none;margin:0;padding-bottom:1px;background:#ecf3f6 url(/FM0015_Speedster/skin/frontend/default/default/images/bkg_nav1.gif) 0 100% repeat-x}#nav ul
272
+ li.last{background:#ecf3f6;padding-bottom:0}#nav ul a,
273
+ #nav ul a:hover{float:none;padding:0;background:none}#nav ul li
274
+ a{font-weight:normal !important}#nav
275
+ ul{position:absolute;width:15em;top:27px;left:-10000px;border:1px
276
+ solid #899ba5}#nav li.over>ul{left:0}#nav li.over > ul li.over>ul{left:100px}#nav li.over ul
277
+ ul{left:-10000px}#nav ul li
278
+ a{background:#ecf3f6}#nav ul li a:hover{background:#d5e4eb}#nav ul li a,
279
+ #nav ul li a:hover{color:#2f2f2f !important}#nav ul span, #nav ul li.last li
280
+ span{padding:3px
281
+ 15px 4px 15px}#nav ul
282
+ ul{top:5px}.block{border:1px
283
+ solid #c4c1bc;margin:0
284
+ 0 15px}.block .block-title{background:url(/FM0015_Speedster/skin/frontend/default/default/images/bkg_block-title.gif) 0 0 repeat-x;border-bottom:1px solid #ddd;padding:2px
285
+ 9px}.block .block-title
286
+ strong{display:block;font:bold 12px/16px Arial, Helvetica, sans-serif;min-height:16px;padding:1px
287
+ 0 1px;text-transform:uppercase;color:#e26703}.block .block-title strong
288
+ span{}.block .block-title
289
+ a{text-decoration:none !important}.block .block-subtitle{margin:0;padding:5px
290
+ 9px;font-size:1em;font-weight:bold;color:#0a263c}.block .block-content{background:#f8f7f5}.block .block-content
291
+ li.item{padding:7px
292
+ 9px}.block .btn-remove{float:right;margin:1px
293
+ 0 2px 5px}.block
294
+ .actions{background:#dee5e8 url(/FM0015_Speedster/skin/frontend/default/default/images/bkg_block-actions.gif) 0 0 repeat-x;padding:6px
295
+ 9px;text-align:right}.block .actions
296
+ a{float:left}.block .actions
297
+ button.button{float:right}.block
298
+ .empty{margin:0;padding:5px
299
+ 9px}.block
300
+ li.odd{background-color:#f4f3f3}.block
301
+ li.even{background-color:#fafafa}.block-cart,.block-wishlist,.block-subscribe,.block-compare,.block-reorder,.block-poll,.block-viewed,.block-compared,.block-related,.block-tags,.block-login{font-size:11px;line-height:1.25}.block-cart .block-title strong,
302
+ .block-wishlist .block-title strong,
303
+ .block-subscribe .block-title strong,
304
+ .block-compare .block-title strong,
305
+ .block-reorder .block-title strong,
306
+ .block-poll .block-title strong,
307
+ .block-viewed .block-title strong,
308
+ .block-compared .block-title strong,
309
+ .block-related .block-title strong,
310
+ .block-tags .block-title strong,
311
+ .block-login .block-title
312
+ strong{background-position:0 0;background-repeat:no-repeat;padding-left:21px}.mini-products-list .product-image{float:left;width:50px;border:1px
313
+ solid #a9a9a9}.mini-products-list .product-details{margin-left:60px}.block-account{border-color:#bbb}.block-account .block-title{background:#fc9d36 url(/FM0015_Speedster/skin/frontend/default/default/images/bkg_block-title-account.gif) 0 100% repeat-x;border:0;padding:3px
314
+ 10px}.block-account .block-title
315
+ strong{font-size:13px;color:#fff}.block-account .block-content{background:#fbfaf6;padding:7px
316
+ 10px 7px}.block-account .block-content li
317
+ a{display:block;border-bottom:1px solid #ddd;padding:3px
318
+ 0;color:#5f5d5c;text-decoration:none !important}.block-account .block-content li a:hover{color:#ea7900}.block-account .block-content li.last
319
+ a{border-bottom:0}.block-account .block-content
320
+ li.current{border-bottom:1px solid #ddd;padding:3px
321
+ 0;color:#ea7900}.block-account .block-content
322
+ li.current.last{border-bottom:0}.block-currency{border:0;background:url(/FM0015_Speedster/skin/frontend/default/default/images/bkg_block-currency.gif) 0 0 no-repeat;padding:7px
323
+ 12px 10px;height:51px}.block-currency .block-title{background:none;border:0;padding:0;margin:0
324
+ 0 5px}.block-currency .block-title
325
+ strong{font:bold 13px/21px Arial, Helvetica, sans-serif;background:url(/FM0015_Speedster/skin/frontend/default/default/images/i_block-currency.gif) 0 50% no-repeat;padding:0
326
+ 0 0 21px;text-transform:none;color:#fff}.block-currency .block-content{background:none;padding:0}.block-currency .block-content
327
+ select{width:100%;padding:0}.block-layered-nav{border:0}.block-layered-nav .block-title{border:0;padding:0;height:24px;background:url(/FM0015_Speedster/skin/frontend/default/default/images/bkg_block-layered-title.gif) 0 0 no-repeat;text-indent:-999em;overflow:hidden}.block-layered-nav .block-subtitle{line-height:1.35;background:#d5e8ff url(/FM0015_Speedster/skin/frontend/default/default/images/bkg_block-layered1.gif) 0 50% repeat;padding:3px
328
+ 9px;border:1px
329
+ solid #b9ccdd;border-width:1px 0;text-transform:uppercase;color:#1f5070}.block-layered-nav .block-content{border:1px
330
+ solid #a0b3c3;background:#e7f1f4}.block-layered-nav
331
+ dt{background:url(/FM0015_Speedster/skin/frontend/default/default/images/bkg_block-layered-dt.gif) 9px 11px no-repeat;padding:7px
332
+ 10px 0 28px;font-weight:bold;text-transform:uppercase}.block-layered-nav
333
+ dd{padding:0
334
+ 12px 12px;background:url(/FM0015_Speedster/skin/frontend/default/default/images/bkg_block-layered-dd.gif) 0 100% repeat-x}.block-layered-nav
335
+ dd.last{background:none}.block-layered-nav .currently
336
+ li{background:#fff url(/FM0015_Speedster/skin/frontend/default/default/images/bkg_block-layered-li.gif) 0 100% repeat-x;padding:4px
337
+ 6px 4px 10px}.block-layered-nav .currently
338
+ .label{font-weight:bold;padding-left:18px;background:url(/FM0015_Speedster/skin/frontend/default/default/images/bkg_block-layered-label.gif) 0 3px no-repeat;text-transform:uppercase}.block-layered-nav .currently .btn-remove{margin:3px
339
+ 0 0}.block-layered-nav
340
+ .actions{font-size:11px;padding:4px
341
+ 9px;background:#cad6e4;border:1px
342
+ solid #dee5e8;border-width:1px 0;text-align:right}.block-layered-nav .actions
343
+ a{float:none}.block-cart .block-title{}.block-cart .block-title
344
+ strong{background-image:url(/FM0015_Speedster/skin/frontend/default/default/images/i_block-cart.gif)}.block-cart
345
+ .summary{background:#fff;padding:2px
346
+ 8px 8px;margin:-1px 0 0;position:relative;z-index:1}.block-cart
347
+ .amount{margin:0}.block-cart .amount
348
+ a{font-weight:bold}.block-cart
349
+ .subtotal{margin:5px
350
+ 0 0;padding:2px
351
+ 0;background:#fbebd9;text-align:center}.block-cart .subtotal
352
+ .price{font-weight:bold}.block-cart
353
+ .actions{border-bottom:1px solid #c2c2c2}.block-wishlist .block-title
354
+ strong{background-image:url(/FM0015_Speedster/skin/frontend/default/default/images/i_block-wishlist.gif)}.block-wishlist
355
+ .actions{text-align:right}.block-wishlist .actions
356
+ a{float:none}.block-related .block-title
357
+ strong{background-image:url(/FM0015_Speedster/skin/frontend/default/default/images/i_block-related.gif);background-position:0 1px}.block-related
358
+ input.checkbox{float:left}.block-related
359
+ .product{margin-left:20px}.block-compare .block-title
360
+ strong{background-image:url(/FM0015_Speedster/skin/frontend/default/default/images/i_block-list.gif);background-position:0 1px}.block-compare button.button
361
+ span{border-color:#406a83;background:#618499}.page-popup .link-print{background:url(/FM0015_Speedster/skin/frontend/default/default/images/i_print.gif) 0 2px no-repeat;padding:2px
362
+ 0 2px 25px;font-weight:bold;color:#1e7ec8}.compare-table{border:0}.compare-table thead tr.first th,
363
+ .compare-table thead tr.first
364
+ td{border:0;background:none;padding:0;font-size:0;line-height:0}.compare-table .btn-remove{float:right;background-image:url(/FM0015_Speedster/skin/frontend/default/default/images/btn_remove2.gif);width:72px;height:15px}.compare-table tbody
365
+ th{background:#d9e5ee url(/FM0015_Speedster/skin/frontend/default/default/images/bkg_th-v.gif) 100% 0 repeat-y}.compare-table tbody th,
366
+ .compare-table tbody
367
+ td{padding:10px;border:0;border-top:1px solid #ccc;border-left:1px solid #ccc}.compare-table tbody
368
+ td.last{border-right:1px solid #ccc}.compare-table tbody tr.last th,
369
+ .compare-table tbody tr.last
370
+ td{border-bottom:1px solid #ccc !important}.compare-table tr.add-to-row
371
+ td{background:#fffada;text-align:center}.compare-table tr.first
372
+ td{text-align:center}.compare-table tr.first td .product-name{font-size:13px;font-weight:bold;margin:0
373
+ 0 5px;color:#203548}.compare-table tr.first td .product-name
374
+ a{color:#203548}.compare-table tr.first td
375
+ .ratings{width:69px;margin:0
376
+ auto}.compare-table tr.first td p,
377
+ .compare-table tr.add-to-row td
378
+ p{margin:0}.block-viewed .block-title
379
+ strong{background-image:url(/FM0015_Speedster/skin/frontend/default/default/images/i_block-viewed.gif)}.block-compared .block-title
380
+ strong{background-image:url(/FM0015_Speedster/skin/frontend/default/default/images/i_block-list.gif);background-position:0 1px}.block-poll .block-title
381
+ strong{background-image:url(/FM0015_Speedster/skin/frontend/default/default/images/i_block-poll.gif)}.block-poll .block-subtitle{font-size:12px}.block-poll
382
+ label{color:#777;font-weight:bold}.block-poll
383
+ input.radio{float:left;margin:1px
384
+ -18px 0 0}.block-poll
385
+ .label{display:block;margin-left:18px}.block-poll
386
+ li{padding:3px
387
+ 9px}.block-poll
388
+ .actions{margin:5px
389
+ 0 0}.block-poll button.button
390
+ span{border-color:#406a83;background:#618499}.block-poll
391
+ .answer{font-weight:bold}.block-poll
392
+ .votes{float:right;margin-left:10px}.block-tags .block-title
393
+ strong{background-image:url(/FM0015_Speedster/skin/frontend/default/default/images/i_block-tags.gif)}.block-tags .block-content
394
+ ul{font-size:12px;padding:10px}.block-tags .block-content
395
+ li{display:inline;padding-right:4px}.block-tags .block-content
396
+ a{color:#1b2d3b}.block-tags
397
+ .actions{text-align:right}.block-tags .actions
398
+ a{float:none}.block-subscribe .block-content{padding:5px
399
+ 10px}.block-subscribe .block-title
400
+ strong{background-image:url(/FM0015_Speedster/skin/frontend/default/default/images/i_block-subscribe.gif)}.block-subscribe
401
+ label{font-weight:bold;color:#666}.block-subscribe input.input-text{display:block;width:167px;margin:3px
402
+ 0}.block-subscribe
403
+ .actions{background:none;padding:0;margin:3px
404
+ 0 0;text-align:left}.block-subscribe .actions
405
+ button.button{float:none}.block-subscribe .actions button.button
406
+ span{border-color:#406a83;background:#618499}.block-reorder .block-title
407
+ strong{background-image:url(/FM0015_Speedster/skin/frontend/default/default/images/i_block-list.gif)}.block-reorder
408
+ input.checkbox{float:left;margin:2px
409
+ -20px 0 0}.block-reorder .product-name{margin-left:20px}.block-reorder .validation-advice{margin:3px
410
+ 9px 7px}.block-banner{border:0}.block-banner .block-content{padding:0;text-align:center}.block-login .block-title
411
+ strong{background-image:url(/FM0015_Speedster/skin/frontend/default/default/images/i_ma-info.gif)}.block-login .block-content{padding:5px
412
+ 10px}.block-login
413
+ label{font-weight:bold;color:#666}.block-login input.input-text{display:block;width:167px;margin:3px
414
+ 0}.block-login
415
+ .actions{background:none;padding:0;margin:3px
416
+ 0 0}.block-login .actions button.button
417
+ span{border-color:#406a83;background:#618499}.category-title{border:0;margin:0
418
+ 0 7px}.category-image{width:100%;overflow:hidden;margin:0
419
+ 0 10px;text-align:center}.category-image
420
+ img{}.category-description{margin:0
421
+ 0 10px}.category-products{}.products-grid{border-bottom:1px solid #d9ddd3;background:url(/FM0015_Speedster/skin/frontend/default/default/images/bkg_grid.gif) 0 0 repeat;position:relative}.products-grid.last{border-bottom:0}.products-grid
422
+ li.item{float:left;width:138px;padding:12px
423
+ 10px 80px}.products-grid .product-image{display:block;width:135px;height:135px;margin:0
424
+ 0 10px}.products-grid .product-name{margin:0
425
+ 0 5px;font-weight:bold;font-size:13px;color:#203548}.products-grid .product-name
426
+ a{color:#203548}.products-grid .price-box{margin:5px
427
+ 0}.products-grid
428
+ .availability{line-height:21px}.products-grid
429
+ .actions{position:absolute;bottom:12px}.col2-left-layout .products-grid,
430
+ .col2-right-layout .products-grid{width:632px;margin:0
431
+ auto}.col1-layout .products-grid{width:790px;margin:0
432
+ auto}.products-list
433
+ li.item{border-bottom:1px solid #d9ddd3;padding:12px
434
+ 10px}.products-list
435
+ li.item.last{border-bottom:0}.products-list .product-image{float:left;width:135px;height:135px;margin:0
436
+ 0 10px}.products-list .product-shop{margin-left:150px}.products-list .product-name{margin:0
437
+ 0 5px;font-weight:bold;font-size:13px;color:#203548}.products-list .product-name
438
+ a{color:#203548}.products-list .price-box{float:left;margin:3px
439
+ 13px 5px 0}.products-list
440
+ .availability{float:left;margin:3px
441
+ 0 0}.products-list
442
+ .desc{clear:both;padding:6px
443
+ 0 0;margin:0
444
+ 0 15px;line-height:1.35}.products-list .desc .link-more{font-size:11px}.products-list .add-to-links{clear:both}.products-list .add-to-links
445
+ li{display:inline}.products-list .add-to-links
446
+ .separator{display:inline;margin:0
447
+ 2px}.no-rating{margin:0}.ratings{font-size:11px;line-height:1.25;margin:7px
448
+ 0}.ratings
449
+ strong{float:left;margin:1px
450
+ 3px 0 0}.ratings .rating-links{margin:0}.ratings .rating-links
451
+ .separator{margin:0
452
+ 2px}.ratings
453
+ dt{}.ratings
454
+ dd{}.rating-box{width:69px;height:13px;font-size:0;line-height:0;background:url(/FM0015_Speedster/skin/frontend/default/default/images/bkg_rating.gif) 0 0 repeat-x;text-indent:-999em;overflow:hidden}.rating-box
455
+ .rating{float:left;height:13px;background:url(/FM0015_Speedster/skin/frontend/default/default/images/bkg_rating.gif) 0 100% repeat-x}.ratings .rating-box{float:left;margin-right:3px}.ratings
456
+ .amount{}.ratings-table th,
457
+ .ratings-table
458
+ td{font-size:11px;line-height:1.15;padding:3px
459
+ 0}.ratings-table
460
+ th{font-weight:bold;padding-right:8px}.availability{margin:0}.availability
461
+ span{font-weight:bold}.availability.in-stock
462
+ span{}.availability.out-of-stock
463
+ span{color:#d83820}.product-view .product-shop
464
+ .availability{font-size:11px}.product-view .product-shop .availability
465
+ span{font-weight:normal}.email-friend{margin:0}.alert-price{margin:0;font-size:11px}.alert-stock{margin:0;font-size:11px}.price{white-space:nowrap !important}.price-box{margin:5px
466
+ 0}.price-box
467
+ .price{font-weight:bold;color:#c76200}.regular-price{color:#c76200}.regular-price
468
+ .price{font-weight:bold;font-size:13px;color:#c76200}.block .regular-price,
469
+ .block .regular-price
470
+ .price{color:#2f2f2f}.old-price{margin:0}.old-price .price-label{white-space:nowrap;color:#999}.old-price
471
+ .price{font-weight:bold;color:#c76200;text-decoration:line-through}.special-price{margin:0;padding:3px
472
+ 0}.special-price .price-label{font-size:13px;font-weight:bold;white-space:nowrap;color:#cd5033}.special-price
473
+ .price{font-size:13px;font-weight:bold;color:#c76200}.minimal-price{margin:0}.minimal-price .price-label{font-weight:bold;white-space:nowrap}.minimal-price-link{display:block}.minimal-price-link
474
+ .label{color:#1e7ec8}.minimal-price-link
475
+ .price{font-weight:normal;color:#1e7ec8}.price-excluding-tax{display:block;color:#999}.price-excluding-tax
476
+ .label{white-space:nowrap;color:#999}.price-excluding-tax
477
+ .price{font-size:13px;font-weight:normal;color:#c76200}.price-including-tax{display:block;color:#999}.price-including-tax
478
+ .label{white-space:nowrap;color:#999}.price-including-tax
479
+ .price{font-size:13px;font-weight:bold;color:#c76200}.weee{display:block;font-size:11px;color:#444}.weee
480
+ .price{font-size:11px;font-weight:normal}.price-excl-tax{display:block}.price-excl-tax
481
+ .label{display:block;white-space:nowrap}.price-excl-tax
482
+ .price{display:block}.price-incl-tax{display:block}.price-incl-tax
483
+ .label{display:block;white-space:nowrap}.price-incl-tax
484
+ .price{display:block;font-weight:bold}.price-from{margin:0}.price-from .price-label{font-weight:bold;white-space:nowrap}.price-to{margin:0}.price-to .price-label{font-weight:bold;white-space:nowrap}.price-notice{padding-left:10px;color:#999}.price-notice
485
+ .price{font-weight:bold;color:#2f2f2f}.price-as-configured{margin:0}.price-as-configured .price-label{font-weight:bold;white-space:nowrap}.price-box-bundle{padding:0
486
+ 0 10px 0}.price-box-bundle .price-box{margin:0
487
+ !important;padding:0
488
+ !important}.price-box-bundle
489
+ .price{color:#555}.tier-prices{margin:10px
490
+ 0;padding:10px;background-color:#f4f7f7;border:1px
491
+ solid #dadddd}.tier-prices
492
+ li{line-height:1.4;background:url(/FM0015_Speedster/skin/frontend/default/default/images/i_tier.gif) no-repeat 0 3px;padding:2px
493
+ 0 2px 10px;color:#424242}.tier-prices
494
+ .benefit{font-style:italic;font-weight:bold;color:#2f2f2f}.tier-prices
495
+ .price{font-weight:bold;color:#2f2f2f}.tier-prices-grouped
496
+ li{padding:2px
497
+ 0;color:#e26703}.tier-prices-grouped li
498
+ .price{font-weight:bold}.add-to-links{font-size:11px;margin:5px
499
+ 0 0}.add-to-links
500
+ .separator{display:none}.add-to-cart
501
+ label{float:left;margin-right:5px;font-weight:bold;color:#666}.add-to-cart
502
+ .qty{float:left;margin-right:5px}.add-to-cart
503
+ button.button{float:left}.add-to-box{margin:10px
504
+ 0}.add-to-box .add-to-cart{float:left}.add-to-box
505
+ .or{float:left;font-weight:bold;margin:0
506
+ 7px;color:#666}.add-to-box .add-to-links{float:left;margin:0;font-size:12px !important;line-height:1.25 !important;text-align:left !important}.add-to-box .add-to-links
507
+ li{display:block !important}.add-to-box .add-to-links li
508
+ .separator{display:none !important}.product-view{border:1px
509
+ solid #c4c6c8}.product-essential{padding:25px;background:#fff url(/FM0015_Speedster/skin/frontend/default/default/images/bkg_product-view.gif) 100% 0 no-repeat}.product-essential
510
+ h2{font:bold 13px/1.35 Arial,Helvetica,sans-serif}.product-collateral{background:#faf7ee url(/FM0015_Speedster/skin/frontend/default/default/images/bkg_product_collateral.gif) 0 0 repeat-x;padding:25px}.product-collateral
511
+ h2{font-weight:bold;font-size:15px;color:#e26703;border-bottom:1px solid #e5dcc3;padding:0
512
+ 0 1px;margin:0
513
+ 0 15px}.product-collateral .box-collateral{margin:0
514
+ 0 25px}.product-view .product-img-box{float:left;width:267px}.col3-layout .product-view .product-img-box{float:none;margin:0
515
+ auto}.product-view .product-img-box .product-image{margin:0
516
+ 0 13px}.product-view .product-img-box .product-image-zoom{position:relative;width:265px;height:265px;overflow:hidden;z-index:9}.product-view .product-img-box .product-image-zoom
517
+ img{position:absolute;left:0;top:0;cursor:move}.product-view .product-img-box .zoom-notice{font-size:11px;margin:0
518
+ 0 5px;text-align:center}.product-view .product-img-box
519
+ .zoom{position:relative;z-index:9;height:18px;margin:0
520
+ auto 13px;padding:0
521
+ 28px;background:url(/FM0015_Speedster/skin/frontend/default/default/images/slider_bg.gif) 50% 50% no-repeat;cursor:pointer}.product-view .product-img-box
522
+ .zoom.disabled{-moz-opacity:.3;-webkit-opacity:.3;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=30)";opacity:.3}.product-view .product-img-box .zoom
523
+ #track{position:relative;height:18px}.product-view .product-img-box .zoom
524
+ #handle{position:absolute;left:0;top:-1px;width:9px;height:22px;background:url(/FM0015_Speedster/skin/frontend/default/default/images/magnifier_handle.gif) 0 0 no-repeat}.product-view .product-img-box .zoom .btn-zoom-out{position:absolute;left:2px;top:0}.product-view .product-img-box .zoom .btn-zoom-in{position:absolute;right:2px;top:0}.product-view .product-img-box .more-views
525
+ h2{font-size:11px;border-bottom:1px solid #ccc;margin:0
526
+ 0 8px;text-transform:uppercase}.product-view .product-img-box .more-views
527
+ ul{margin-left:-9px}.product-view .product-img-box .more-views
528
+ li{float:left;margin:0
529
+ 0 8px 9px}.product-view .product-img-box .more-views li
530
+ a{float:left;width:56px;height:56px;border:2px
531
+ solid #ddd;overflow:hidden}.product-image-popup{margin:0
532
+ auto}.product-image-popup
533
+ .nav{font-weight:bold;text-align:center}.product-image-popup
534
+ .image{display:block;margin:10px
535
+ 0}.product-image-popup .image-label{font-size:13px;font-weight:bold;margin:0
536
+ 0 10px;color:#2f2f2f}.product-view .product-shop{float:right;width:330px}.col1-layout .product-view .product-shop{float:right;width:545px}.col3-layout .product-view .product-shop{float:none;width:auto}.product-view .product-shop .product-name{margin:0
537
+ 0 5px}.product-view .product-shop .product-name
538
+ h1{margin:0;font:bold 15px/1.35 Arial, Helvetica, sans-serif}.product-view .product-shop
539
+ .availability{margin:10px
540
+ 0}.product-view .product-shop .short-description{margin:10px
541
+ 0;background:url(/FM0015_Speedster/skin/frontend/default/default/images/bkg_divider1.gif) 0 0 repeat-x;padding:10px
542
+ 0 0}.product-view .product-shop .price-box{margin:10px
543
+ 0}.product-view .product-shop .add-to-links{margin:0}.product-view .product-shop .add-to-links{font-size:12px;text-align:right}.product-view .product-shop .add-to-links li,
544
+ .product-view .product-shop .add-to-links li
545
+ .separator{display:inline}.product-view .product-shop .add-to-links
546
+ a{color:#1E7EC8 !important;font-weight:normal !important}.product-options{margin:20px
547
+ 0 0;padding:10px
548
+ 15px 20px;background-color:#f6f6f6;border:1px
549
+ solid #e4e4e4}.product-options
550
+ dt{padding:10px
551
+ 0 0;font-weight:normal}.product-options dt
552
+ label{font-weight:bold;color:#2f2f2f}.product-options dt
553
+ span.required{color:#eb340a}.product-options dt .qty-holder{float:right;margin-right:15px}.product-options dt .qty-holder
554
+ label{vertical-align:middle}.product-options dt .qty-disabled{background:none;border:0;padding:3px;color:#2f2f2f}.product-options
555
+ dd{padding:5px
556
+ 10px 15px;margin:0
557
+ 0 5px;border-bottom:1px solid #e4e4e4}.product-options dl.last
558
+ dd.last{border-bottom:0;padding-bottom:5px;margin-bottom:0}.product-options dd input.input-text{width:98%}.product-options dd input.datetime-picker{width:150px}.product-options dd
559
+ textarea{width:98%;height:8em}.product-options dd
560
+ select{width:99%}.product-options dd .multiselect
561
+ option{border-bottom:1px dotted #d9e5ee;padding:2px
562
+ 4px}.product-options ul.options-list{margin-right:5px}.product-options ul.options-list
563
+ li{line-height:1.5;padding:2px
564
+ 0}.product-options ul.options-list
565
+ input.radio{float:left;margin-top:3px}.product-options ul.options-list
566
+ input.checkbox{float:left;margin-top:3px}.product-options ul.options-list
567
+ .label{display:block;margin-left:18px}.product-options ul.options-list
568
+ label{font-weight:normal}.product-options ul.validation-failed{padding:0
569
+ 7px}.product-options
570
+ p.note{margin:0;font-size:11px}.product-options
571
+ p.required{margin-bottom:0;padding:15px
572
+ 0 0}.product-options-bottom{background-color:#fffada;padding:15px
573
+ 20px;border:1px
574
+ solid #e4e4e4;border-top:0}.product-options-bottom .tier-prices{margin:0;padding:0
575
+ 0 10px;border:0;background:0}.product-options-bottom .tier-prices
576
+ li{background:0;padding:2px
577
+ 0;color:#e26703}.product-options-bottom .tier-prices .price,
578
+ .product-options-bottom .tier-prices
579
+ .benefit{color:#e26703}.product-options-bottom .price-box{float:left;margin:0;padding:0}.product-options-bottom .price-label{float:left;padding-right:5px}.product-options-bottom .price-tax{float:left}.product-options-bottom .add-to-cart{float:right}.product-shop .product-options-bottom{margin:0
580
+ 0 10px}.product-shop .product-options-bottom .price-box{float:none;margin:0
581
+ 0 5px}.product-shop .product-options-bottom .price-label{float:none;padding-right:0}.product-shop .product-options-bottom .price-tax{float:none}.product-shop .product-options-bottom .add-to-cart-box{clear:both;float:left;padding-top:12px}.product-view .grouped-items-table .price-box{margin:0;padding:0}.product-view .box-description{}.product-view .box-additional .data-table th,
582
+ .product-view .box-additional .data-table
583
+ td{line-height:1.25}.product-view .box-up-sell
584
+ h2{border-bottom:0;padding:0;margin:0
585
+ 0 8px}.product-view .box-up-sell .products-grid{width:100%;border:1px
586
+ solid #e5dcc3}.product-view .box-up-sell .products-grid
587
+ td{width:25%;background:#f6f2e7;border-right:1px solid #e5dcc3;border-bottom:1px solid #e5dcc3;padding:15px
588
+ 10px 12px;line-height:1.6em}.product-view .box-up-sell .products-grid tr.last
589
+ td{border-bottom:0}.product-view .box-up-sell .products-grid
590
+ td.last{border-right:0}.product-view .box-up-sell .products-grid td
591
+ img{border:1px
592
+ solid #e5dcc3}.product-view .box-up-sell .products-grid .product-image{text-align:center}.product-view .box-up-sell .products-grid
593
+ td.empty{border-right:0;background:#f1ecdb}.product-view .box-up-sell .products-grid .ratings .rating-box{float:none;display:block;margin:0
594
+ 0 3px}.product-view .box-tags{margin:0}.product-view .box-tags
595
+ h3{font-size:13px}.product-view .box-tags .product-tags{display:block;margin:0
596
+ 0 15px}.product-view .box-tags .product-tags
597
+ li{display:inline;background:url(/FM0015_Speedster/skin/frontend/default/default/images/bkg_pipe3.gif) 100% 4px no-repeat;padding:0
598
+ 7px 0 4px}.product-view .box-tags .product-tags
599
+ li.first{padding-left:0}.product-view .box-tags .product-tags
600
+ li.last{background:none;padding-right:0}.product-view .box-tags .form-add
601
+ label{display:block;font-size:13px;font-weight:bold;margin:0
602
+ 0 5px;color:#0a263c}.product-view .box-tags .form-add .input-box{float:left;width:305px;margin:0
603
+ 5px 0 0;background:url(/FM0015_Speedster/skin/frontend/default/default/images/i_tag_add.gif) 0 2px no-repeat;padding:0
604
+ 0 0 23px}.product-view .box-tags .form-add input.input-text{width:299px}.product-view .box-tags .form-add button.button
605
+ span{border-color:#406a83;background:#618499}.product-view .box-tags
606
+ .note{margin:3px
607
+ 0 0;padding:0
608
+ 0 0 23px;font-size:11px}.product-view .box-reviews
609
+ dl{margin:15px
610
+ 0}.product-view .box-reviews dt a,
611
+ .product-view .box-reviews dt
612
+ span{font-weight:bold}.product-view .box-reviews
613
+ dd{margin:0
614
+ 0 15px}.product-view .box-reviews dd
615
+ small{font-style:italic}.product-view .box-reviews .form-add{margin:15px
616
+ 0 0}.product-view .box-reviews .form-add
617
+ h3{font-size:13px;font-weight:normal}.product-view .box-reviews .form-add h3
618
+ span{font-weight:bold}.product-view .box-reviews .form-add
619
+ h4{font-size:12px}.product-view .box-reviews .form-add .data-table
620
+ td{text-align:center}.product-view .box-reviews .form-add .form-list{margin:15px
621
+ 0 0}.product-view .box-reviews .form-add .form-list .input-box{width:360px}.product-view .box-reviews .form-add .form-list input.input-text,
622
+ .product-view .box-reviews .form-add .form-list
623
+ textarea{width:354px}.send-friend .form-list{width:615px;overflow:hidden}.send-friend .form-list
624
+ li{margin-right:-15px}.send-friend .form-list li
625
+ p{margin:0
626
+ 15px 0 0}.send-friend .form-list
627
+ .field{width:315px}.send-friend .form-list .input-box{width:300px}.send-friend .form-list input.input-text,
628
+ .send-friend .form-list
629
+ textarea{width:294px}.send-friend .form-list li.wide .input-box{width:612px}.send-friend .form-list li.wide
630
+ textarea{width:609px}.send-friend .buttons-set
631
+ .limit{float:right;margin:0
632
+ 7px 0 0;font-size:11px;line-height:21px}.product-name{margin:0;font-size:1em;font-weight:normal}.product-name
633
+ a{color:#1e7ec8}.tags-list{display:block;font-size:13px;border:1px
634
+ solid #c1c4bc;background:#f8f7f5;padding:10px}.tags-list
635
+ li{display:inline !important;margin:0
636
+ 4px 0 0}.tags-list li
637
+ a{color:#1b2d3b}.advanced-search .form-list
638
+ label{width:160px;padding-right:10px}.advanced-search .form-list .input-box,
639
+ .advanced-search .form-list .input-range{float:left;clear:none}.advanced-search-amount{margin:0
640
+ 0 10px}.advanced-search-summary{margin:10px
641
+ 0;border:1px
642
+ solid #e9d7c9;background:#fff6f1;padding:10px}.advanced-search-summary
643
+ ul{float:left;width:49%}.advanced-search-summary
644
+ strong{color:#E17C24;padding-left:15px;background:url(/FM0015_Speedster/skin/frontend/default/default/images/i_search_criteria.gif) 0 3px no-repeat}.advanced-search-summary
645
+ p{clear:both;font-weight:bold;margin:0}.cms-home
646
+ .subtit