Skip to content
This repository
Browse code

initial commit for git setup

  • Loading branch information...
commit 785954811c035a10c74344dc7c72d2d17b548fb4 1 parent f40e20e
Maik Vlcek authored November 21, 2010

Showing 92 changed files with 4,079 additions and 29,383 deletions. Show diff stats Hide diff stats

  1. 118  {cfe/mootools/1.2 → }/ChangeLog.txt
  2. 108  {cfe/mootools/1.2 → }/INSTALL.txt
  3. 14  README.txt
  4. 141  cfe/{mootools/1.2 → }/addons/cfe.addon.autotab.js
  5. 91  cfe/addons/cfe.addon.dependencies.js
  6. 17  cfe/{mootools/1.2 → }/addons/cfe.addon.toggleCheckboxes.js
  7. 27  cfe/{mootools/1.2 → }/addons/cfe.addon.toolTips.js
  8. 168  cfe/base/cfe.base.js
  9. 96  cfe/cfe.autostart.sample.js
  10. 4,376  cfe/jquery/1.3.2/jquery.js
  11. 5  cfe/lib/README
  12. 357  cfe/lib/mootools-1.2.4-core.js
  13. 201  cfe/lib/mootools-1.2.4-more.js
  14. 636  cfe/modules/button/cfe.module.button.js
  15. 222  cfe/modules/button/cfe.module.image.js
  16. 51  cfe/{mootools/1.2 → }/modules/button/cfe.module.reset.js
  17. 56  cfe/modules/button/cfe.module.submit.js
  18. 125  cfe/modules/check/cfe.module.checkbox.js
  19. 74  cfe/modules/check/cfe.module.radio.js
  20. 235  cfe/modules/file/cfe.module.file.js
  21. 30  cfe/{mootools/1.2 → }/modules/group/cfe.module.fieldset.js
  22. 392  cfe/modules/select/cfe.module.select.js
  23. 113  cfe/modules/select/cfe.module.select.multiple.js
  24. 29  cfe/{mootools/1.2 → }/modules/text/cfe.module.password.js
  25. 22  cfe/modules/text/cfe.module.slider.js
  26. 86  cfe/modules/text/cfe.module.text.js
  27. 42  cfe/{mootools/1.2 → }/modules/text/cfe.module.textarea.js
  28. 18  cfe/mootools/1.1/ChangeLog.txt
  29. 13  cfe/mootools/1.1/README.txt
  30. 78  cfe/mootools/1.1/addons/cfe.addon.dependencies.js
  31. 55  cfe/mootools/1.1/addons/cfe.addon.toolTips.js
  32. 362  cfe/mootools/1.1/base/cfe.base.js
  33. 7,102  cfe/mootools/1.1/lib/mootools.js
  34. 84  cfe/mootools/1.1/modules/cfe.module.checkbox.js
  35. 56  cfe/mootools/1.1/modules/cfe.module.fieldset.js
  36. 109  cfe/mootools/1.1/modules/cfe.module.file.js
  37. 67  cfe/mootools/1.1/modules/cfe.module.image.js
  38. 12  cfe/mootools/1.1/modules/cfe.module.password.js
  39. 50  cfe/mootools/1.1/modules/cfe.module.radio.js
  40. 12  cfe/mootools/1.1/modules/cfe.module.reset.js
  41. 289  cfe/mootools/1.1/modules/cfe.module.select.js
  42. 90  cfe/mootools/1.1/modules/cfe.module.submit.js
  43. 37  cfe/mootools/1.1/modules/cfe.module.text.js
  44. 12  cfe/mootools/1.1/modules/cfe.module.textarea.js
  45. 90  cfe/mootools/1.2/addons/cfe.addon.dependencies.js
  46. 760  cfe/mootools/1.2/base/cfe.base.js
  47. 215  cfe/mootools/1.2/cfe.autostart.sample.js
  48. 4,036  cfe/mootools/1.2/lib/mootools-1.2.3-core.js
  49. 753  cfe/mootools/1.2/lib/mootools-1.2.3-more.js
  50. 198  cfe/mootools/1.2/modules/button/cfe.module.image.js
  51. 95  cfe/mootools/1.2/modules/button/cfe.module.submit.js
  52. 165  cfe/mootools/1.2/modules/check/cfe.module.checkbox.js
  53. 75  cfe/mootools/1.2/modules/check/cfe.module.radio.js
  54. 208  cfe/mootools/1.2/modules/file/cfe.module.file.js
  55. 390  cfe/mootools/1.2/modules/select/cfe.module.select.js
  56. 143  cfe/mootools/1.2/modules/select/cfe.module.select.multiple.js
  57. 16  cfe/mootools/1.2/modules/text/cfe.module.slider.js
  58. 107  cfe/mootools/1.2/modules/text/cfe.module.text.js
  59. 152  cfe/mootools/1.2/replace/cfe.replace.js
  60. 148  cfe/replace/cfe.replace.js
  61. 624  css/cfe.css
  62. 284  css/cfe1.1.css
  63. 58  css/demopage.css
  64. 1  css/fixPrematureIE.css
  65. 406  demo.html
  66. 409  docs/Element.Helpers.html
  67. 162  docs/assets/ac-js
  68. 42  docs/assets/api-js
  69. 337  docs/assets/api.css
  70. 7  docs/assets/reset-fonts-grids-min.css
  71. 163  docs/autotab.html
  72. 202  docs/cfe.addon.autotab.js.html
  73. 222  docs/cfe.addon.dependencies.js.html
  74. 116  docs/cfe.addon.js.html
  75. 142  docs/cfe.addon.themes.html
  76. 168  docs/cfe.addon.themes.js.html
  77. 142  docs/cfe.addon.toggleCheckboxes.html
  78. 162  docs/cfe.addon.toggleCheckboxes.js.html
  79. 142  docs/cfe.addon.toolTips.html
  80. 215  docs/cfe.addon.toolTips.js.html
  81. 335  docs/cfe.autostart.js.html
  82. 887  docs/cfe.base.js.html
  83. 1,549  docs/cfe.generic.html
  84. 293  docs/cfe.module.checkbox.js.html
  85. 176  docs/cfe.module.fieldset.js.html
  86. 334  docs/cfe.module.file.js.html
  87. 888  docs/cfe.module.image.html
  88. 328  docs/cfe.module.image.js.html
  89. 464  docs/cfe.module.password.html
  90. 172  docs/cfe.module.password.js.html
  91. 203  docs/cfe.module.radio.js.html
118  cfe/mootools/1.2/ChangeLog.txt → ChangeLog.txt
... ...
@@ -1,53 +1,65 @@
1  
-CHANGE LOG FOR Custom Form Elements for Mootools 1.2
2  
-****************************************************
3  
-
4  
-###CHANGELOG
5  
-
6  
-# 11/08/09 - 0.9.3
7  
-- fixed #2827036, #2800700, #2768909
8  
-- better select keyboard behaviour (thanks for the detailed information phazei)
9  
-- added minified version plus debugging cfe library file to release
10  
-- updated library files to v 1.2.3
11  
-- noticed small jumping bugs in ie8 > investigating
12  
-
13  
-# 14/05/09 - 0.91
14  
-- support for disabled attribute
15  
-- some css tweaks (thanks joss)
16  
-- fix for width calculation of select multiple, when width is not given by css and scolling is enabled
17  
-
18  
-# 21/03/09 - 0.9
19  
-- cfe.addon.dependencies needs mootools core 1.2.1 - i recommend updating anyhow
20  
-- cfe did a huge leap forward with many enhancements and the possibility, to create cfe by javascript
21  
-- fixed textarea, textfield sliding doors bug
22  
-- textarea now with even more sliding doors to make resizing in every direction possible (hello safari users)
23  
-- heavily refactored code; cfe.base did grew a bit in favour of small module script sizes
24  
-- cfe.base now contains the generic module and some helpers
25  
-- the replacement class for whole forms has been outsourced to cfe.replace
26  
-- better event handling; each element does now support hover, focus and pressed state (button-like)
27  
-- the selectAll/deselectAll checkboxes addon is now separately available as addon
28  
-- tested successfully in Safari 3.2.1, Firefox 3.0.7, Opera 9.64, Chrome 1.0, IE 7 and IE 8 (IE 6 not supported)
29  
-- added cfe.replace.autostart.js for out-of-the-box-use
30  
-
31  
-# 01/16/09 - 0.8.4
32  
-- workaround for opera bug #2207752
33  
-- convenience wrapper for textarea: should now look the same in all browsers when scrolling contents
34  
-- some select improvements
35  
-- fixed ie regression in select field
36  
-
37  
-# 01/16/09 - 0.8.3
38  
-- partially fixed bug #2207752 - scrollbar is still behaving strange due to mootools <> opera getStyle() buggy
39  
-- fixed bug #2088490
40  
-
41  
-#0.8.2
42  
-- addressed bugs 2059807, 2059805, 2059800
43  
-- created Element.disableTextSelection for better reusability
44  
-- random code sweeping (mootools 1.2 port of Element.inject ...)
45  
-
46  
-#0.8.1
47  
-- decoupling of addon tooltips and core
48  
-- select now handles mousewheel scrolling
49  
-- ie still buggy
50  
-- some code sweeping
51  
-
52  
-#0.8b
53  
-- initial port of cfe 0.8b for mootools 1.1
  1
+CHANGE LOG FOR Custom Form Elements for Mootools 1.2
  2
+****************************************************
  3
+
  4
+###CHANGELOG
  5
+
  6
+# XX/XX/XX - 0.9.9
  7
+- improvements in check and radio > smaller code size
  8
+
  9
+# 06/16/10 - 0.9.4
  10
+- instanceID is now obsolete and replaced by an automatic mechanism to count the instances of a cfe-class
  11
+- getAlias has been removed in favour of toElement, which can do some mootools magic for u like: $(myCfe).addClass("foo") instead of myCfe.getAlias().addClass("foo")
  12
+- removed ugly hack fr selection of elements with array name attributes like input[name=radio2[hallo]]
  13
+- cleaned css a bit
  14
+- fixed Opera 10 bug with selectors options not showing
  15
+- updated mootools lib to 1.2.4
  16
+- IE 8+: fixes bug with events being fired multiple times for checkboxes with implicit label
  17
+
  18
+# 11/08/09 - 0.9.3
  19
+- fixed #2827036, #2800700, #2768909
  20
+- better select keyboard behaviour (thanks for the detailed information phazei)
  21
+- added minified version plus debugging cfe library file to release
  22
+- updated library files to v 1.2.3
  23
+- noticed small jumping bugs in ie8 > investigating
  24
+
  25
+# 14/05/09 - 0.91
  26
+- support for disabled attribute
  27
+- some css tweaks (thanks joss)
  28
+- fix for width calculation of select multiple, when width is not given by css and scolling is enabled
  29
+
  30
+# 21/03/09 - 0.9
  31
+- cfe.addon.dependencies needs mootools core 1.2.1 - i recommend updating anyhow
  32
+- cfe did a huge leap forward with many enhancements and the possibility, to create cfe by javascript
  33
+- fixed textarea, textfield sliding doors bug
  34
+- textarea now with even more sliding doors to make resizing in every direction possible (hello safari users)
  35
+- heavily refactored code; cfe.base did grew a bit in favour of small module script sizes
  36
+- cfe.base now contains the generic module and some helpers
  37
+- the replacement class for whole forms has been outsourced to cfe.replace
  38
+- better event handling; each element does now support hover, focus and pressed state (button-like)
  39
+- the selectAll/deselectAll checkboxes addon is now separately available as addon
  40
+- tested successfully in Safari 3.2.1, Firefox 3.0.7, Opera 9.64, Chrome 1.0, IE 7 and IE 8 (IE 6 not supported)
  41
+- added cfe.replace.autostart.js for out-of-the-box-use
  42
+
  43
+# 01/16/09 - 0.8.4
  44
+- workaround for opera bug #2207752
  45
+- convenience wrapper for textarea: should now look the same in all browsers when scrolling contents
  46
+- some select improvements
  47
+- fixed ie regression in select field
  48
+
  49
+# 01/16/09 - 0.8.3
  50
+- partially fixed bug #2207752 - scrollbar is still behaving strange due to mootools <> opera getStyle() buggy
  51
+- fixed bug #2088490
  52
+
  53
+#0.8.2
  54
+- addressed bugs 2059807, 2059805, 2059800
  55
+- created Element.disableTextSelection for better reusability
  56
+- random code sweeping (mootools 1.2 port of Element.inject ...)
  57
+
  58
+#0.8.1
  59
+- decoupling of addon tooltips and core
  60
+- select now handles mousewheel scrolling
  61
+- ie still buggy
  62
+- some code sweeping
  63
+
  64
+#0.8b
  65
+- initial port of cfe 0.8b for mootools 1.1
108  cfe/mootools/1.2/INSTALL.txt → INSTALL.txt
... ...
@@ -1,55 +1,55 @@
1  
-INSTALLATION NOTES for Custom Form Elements
2  
-****************************************************
3  
-
4  
-Once you copied all the files to your project's directory, you are able to use the power of CFE right away
5  
-(Just unpack the supplied cfe package in your website root).
6  
-
7  
-
8  
-°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
9  
-Just include the CSS and Javascript files
10  
-- add css in <head>-section
11  
-- add javascript files right before the (closing) </body>-tag
12  
-°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
13  
-
14  
-<!-- add css -->
15  
-<link rel="stylesheet" type="text/css" href="css/cfe.css" />
16  
-
17  
-JS Variant [A]
18  
-<script type="text/javascript" src="js/cfe/cfe-min.js"></script>
19  
-
20  
-JS Variant [B]
21  
-<!-- add cfe base -->
22  
-<script type="text/javascript" src="js/cfe/base/cfe.base.js"></script>
23  
-<!-- add cfe replacement script -->
24  
-<script type="text/javascript" src="js/cfe/base/cfe.replace.js"></script>
25  
-
26  
-<!-- add modules -->
27  
-<script type="text/javascript" src="js/cfe/modules/cfe.module.checkbox.js"></script>
28  
-<script type="text/javascript" src="js/cfe/modules/cfe.module.radio.js"></script>
29  
-<script type="text/javascript" src="js/cfe/modules/cfe.module.text.js"></script>
30  
-<script type="text/javascript" src="js/cfe/modules/cfe.module.select.js"></script>
31  
-[...and so on - just include the modules you want to use]
32  
-
33  
- <!-- add addons -->
34  
-<script type="text/javascript" src="js/cfe/addons/cfe.addon.toolTips.js"></script>
35  
- <script type="text/javascript" src="js/cfe/addons/cfe.addon.dependencies.js"></script>
36  
-
37  
-
38  
-window.addEvent('domready', function(){
39  
-     // path to a 1x1 pixel transparent gif
40  
-    cfe.spacer = "gfx/spacer.gif";
41  
-
42  
-    // create a cfe replacement instance
43  
-    var myCfe = new cfe.replace();
44  
-
45  
-    // now you may set options [see cfe.autostart.sample for details]
46  
-
47  
-    // initialize cfe
48  
-    myCfe.init();
49  
-});
50  
-
51  
-°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
52  
-Advanced user? More options? More configuration?
53  
-°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
54  
-View Demopage for sample integration with fancy effects and more configuration => http://customformelements.net/demo.php
  1
+INSTALLATION NOTES for Custom Form Elements
  2
+****************************************************
  3
+
  4
+Once you copied all the files to your project's directory, you are able to use the power of CFE right away
  5
+(Just unpack the supplied cfe package in your website root).
  6
+
  7
+
  8
+°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
  9
+Just include the CSS and Javascript files
  10
+- add css in <head>-section
  11
+- add javascript files right before the (closing) </body>-tag
  12
+°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
  13
+
  14
+<!-- add css -->
  15
+<link rel="stylesheet" type="text/css" href="css/cfe.css" />
  16
+
  17
+JS Variant [A]
  18
+<script type="text/javascript" src="js/cfe/cfe-min.js"></script>
  19
+
  20
+JS Variant [B]
  21
+<!-- add cfe base -->
  22
+<script type="text/javascript" src="js/cfe/base/cfe.base.js"></script>
  23
+<!-- add cfe replacement script -->
  24
+<script type="text/javascript" src="js/cfe/base/cfe.replace.js"></script>
  25
+
  26
+<!-- add modules -->
  27
+<script type="text/javascript" src="js/cfe/modules/cfe.module.checkbox.js"></script>
  28
+<script type="text/javascript" src="js/cfe/modules/cfe.module.radio.js"></script>
  29
+<script type="text/javascript" src="js/cfe/modules/cfe.module.text.js"></script>
  30
+<script type="text/javascript" src="js/cfe/modules/cfe.module.select.js"></script>
  31
+[...and so on - just include the modules you want to use]
  32
+
  33
+ <!-- add addons -->
  34
+<script type="text/javascript" src="js/cfe/addons/cfe.addon.toolTips.js"></script>
  35
+ <script type="text/javascript" src="js/cfe/addons/cfe.addon.dependencies.js"></script>
  36
+
  37
+
  38
+window.addEvent('domready', function(){
  39
+     // path to a 1x1 pixel transparent gif
  40
+    cfe.spacer = "gfx/spacer.gif";
  41
+
  42
+    // create a cfe replacement instance
  43
+    var myCfe = new cfe.replace();
  44
+
  45
+    // now you may set options [see cfe.autostart.sample for details]
  46
+
  47
+    // initialize cfe
  48
+    myCfe.init();
  49
+});
  50
+
  51
+°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
  52
+Advanced user? More options? More configuration?
  53
+°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
  54
+View Demopage for sample integration with fancy effects and more configuration => http://customformelements.net/demo.php
55 55
 For a complete API documentation and developer docs, check => http://customformelements.net/api-docs.php.
14  README.txt
@@ -19,7 +19,7 @@ Custom Form Elements are based on various Javascript Framworks. Currently these
19 19
 3. What should you do if you have a problem?
20 20
 °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
21 21
 Found any bugs? Please report using the bugtracker on SouceForge.net => http://sourceforge.net/tracker/?group_id=225918
22  
-Get help or help others in the forum of cfe on SouceForge.net => http://sourceforge.net/forum/?group_id=225918
  22
+Get help or help others in the forum of cfe on SouceForge.net => http://sourceforge.net/projects/cfe/forums
23 23
 Browse the freshest code fragments on SouceForge.net => http://cfe.svn.sourceforge.net/viewvc/cfe/ [NOTE: may be unstable; use at own risk]
24 24
 
25 25
 X. Kudos
@@ -32,11 +32,11 @@ as you build the basement for all this!
32 32
 Kudos to all developers!
33 33
 
34 34
 
35  
-Custom Form Elements uses icons from the silk icon set, which are
36  
-distrubuted by Mark James on http://www.famfamfam.com/lab/icons/silk/ under the
37  
-Creative Commons Attribution 2.5 License [http://creativecommons.org/licenses/by/2.5/]
  35
+Custom Form Elements uses icons from the Fugue icon set, which are
  36
+distrubuted by Yusuke Kamiyamane on http://p.yusukekamiyamane.com/ under the
  37
+Creative Commons Attribution 3.0 license [http://creativecommons.org/licenses/by/3.0/]
38 38
 
39  
-Great work Mark!! 
  39
+Great work Yusuke!!
40 40
 
41  
-NOTE: If you use those icons on your site, you've got to somehow link back to Mark (famfamfam.com)
42  
-as his work is licenced under Creative Commons Attribution 2.5 License
  41
+NOTE: If you use those icons on your site, you've got to somehow link back to him
  42
+as his work is licenced under Creative Commons Attribution 3.0 License
141  cfe/mootools/1.2/addons/cfe.addon.autotab.js → cfe/addons/cfe.addon.autotab.js
... ...
@@ -1,70 +1,73 @@
1  
-/**
2  
- * @module addon
3  
- */
4  
-
5  
-/**
6  
- * this adds autotabbing functionality to cfe - alpha
7  
- * @class autotab
8  
- */
9  
-cfe.addon.autotab = new Class({
10  
-	
11  
-    initAutoTabbing: function(){
12  
-		
13  
-        $$('input[class*="autotab-"]').each(function(el, i){
14  
-			
15  
-            var atOptions = el.get("class").match(/autotab-(\w*\d*)-?(\d)?-?(\w*\d*)?/);
16  
-			
17  
-            if(atOptions[2]){
18  
-											
19  
-                el.store("cfeAutoTabOptions", atOptions);
20  
-								
21  
-                el.addEvent("keyup", function(e){
22  
-
23  
-                    var opt = this.retrieve("cfeAutoTabOptions");
24  
-					
25  
-                    if(this.get("value").length >= opt[2] && e.code != 16 && !e.shift && e.key != "tab" && e.key != "left" && e.key != "right"){
26  
-						
27  
-                        this.set("value",this.get("value").substr(0, opt[2]));
28  
-						
29  
-                        var groupies = $$('input[class*="autotab-'+opt[1]+'"]');
30  
-                        var next = groupies[groupies.indexOf(this)+1]?groupies[groupies.indexOf(this)+1]:opt[3]?$(opt[3]):false;
31  
-						
32  
-                        if(next)
33  
-                        {
34  
-                            next.focus();
35  
-                        }else
36  
-                        {
37  
-                            this.blur();
38  
-                        }
39  
-                    }else if(e.key == "backspace" && this.get("value").length == 0){
40  
-						
41  
-                        var groupies = $$('input[class*="autotab-'+opt[1]+'"]');
42  
-                        var prev = groupies[groupies.indexOf(this)-1]?groupies[groupies.indexOf(this)-1]:false;
43  
-						
44  
-                        if(prev)
45  
-                        {
46  
-                            prev.focus();
47  
-                        }
48  
-							
49  
-                    }
50  
-                });
51  
-				
52  
-                el.addEvent("focus", function(e){
53  
-					
54  
-                    var opt = this.retrieve("cfeAutoTabOptions");
55  
-					
56  
-                    if(this.get("value").length >= opt[2])
57  
-                    {
58  
-                        this.select();
59  
-                    }
60  
-                })
61  
-            }
62  
-        });
63  
-    }
64  
-});
65  
-
66  
-cfe.replace.implement(new cfe.addon.autotab);
67  
-cfe.replace.prototype.addEvent("onComplete", function()
68  
-{
69  
-    this.initAutoTabbing();
  1
+/**
  2
+ * @module Addon
  3
+ */
  4
+
  5
+/**
  6
+ * enables auto-jumping from textfield to textfield
  7
+ *
  8
+ * @class Autotab
  9
+ * @namespace cfe.addon
  10
+ *
  11
+ */
  12
+cfe.addon.Autotab = new Class({
  13
+	
  14
+    initAutoTabbing: function(){
  15
+		
  16
+        $$('input[class*="autotab-"]').each(function(el, i){
  17
+			
  18
+            var atOptions = el.get("class").match(/autotab-(\w*\d*)-?(\d)?-?(\w*\d*)?/);
  19
+			
  20
+            if(atOptions[2]){
  21
+											
  22
+                el.store("cfeAutoTabOptions", atOptions);
  23
+								
  24
+                el.addEvent("keyup", function(e){
  25
+
  26
+                    var opt = this.retrieve("cfeAutoTabOptions");
  27
+					
  28
+                    if(this.get("value").length >= opt[2] && e.code != 16 && !e.shift && e.key != "tab" && e.key != "left" && e.key != "right"){
  29
+						
  30
+                        this.set("value",this.get("value").substr(0, opt[2]));
  31
+						
  32
+                        var groupies = $$('input[class*="autotab-'+opt[1]+'"]');
  33
+                        var next = groupies[groupies.indexOf(this)+1]?groupies[groupies.indexOf(this)+1]:opt[3]?$(opt[3]):false;
  34
+						
  35
+                        if(next)
  36
+                        {
  37
+                            next.focus();
  38
+                        }else
  39
+                        {
  40
+                            this.blur();
  41
+                        }
  42
+                    }else if(e.key == "backspace" && this.get("value").length == 0){
  43
+						
  44
+                        var groupies = $$('input[class*="autotab-'+opt[1]+'"]');
  45
+                        var prev = groupies[groupies.indexOf(this)-1]?groupies[groupies.indexOf(this)-1]:false;
  46
+						
  47
+                        if(prev)
  48
+                        {
  49
+                            prev.focus();
  50
+                        }
  51
+							
  52
+                    }
  53
+                });
  54
+				
  55
+                el.addEvent("focus", function(e){
  56
+					
  57
+                    var opt = this.retrieve("cfeAutoTabOptions");
  58
+					
  59
+                    if(this.get("value").length >= opt[2])
  60
+                    {
  61
+                        this.select();
  62
+                    }
  63
+                })
  64
+            }
  65
+        });
  66
+    }
  67
+});
  68
+
  69
+cfe.replace.implement(new cfe.addon.autotab);
  70
+cfe.replace.prototype.addEvent("onComplete", function()
  71
+{
  72
+    this.initAutoTabbing();
70 73
 });
91  cfe/addons/cfe.addon.dependencies.js
... ...
@@ -0,0 +1,91 @@
  1
+/**
  2
+ * @module Addon
  3
+ */
  4
+
  5
+/**
  6
+ * adds dependencies to checkboxes
  7
+ *
  8
+ * @class Dependencies
  9
+ * @namespace cfe.addon
  10
+ *
  11
+ */
  12
+cfe.addon.Dependencies = new Class({
  13
+	
  14
+    /**
  15
+	 * adds dependencies for an element 
  16
+	 * @param {Object} el
  17
+	 * @param {Array} dep
  18
+	 */
  19
+    addDependencies: function(el, deps){
  20
+        $each(deps,function(dep){
  21
+            this.addDependency(el,dep);
  22
+        }.bind(this));
  23
+    },
  24
+	
  25
+    /**
  26
+	 * adds dependency for an element 
  27
+	 * @param {Object} el
  28
+	 * @param {Object} dep
  29
+	 */
  30
+    addDependency: function(el, dep){
  31
+		
  32
+        // create an array if needed
  33
+        if($type( el.retrieve('deps') ) !== "array"){
  34
+            el.store('deps', []);
  35
+        }
  36
+		
  37
+        // deps may be objects or strings > if a string was given, try to interpret it as id and fetch element by $()
  38
+        if($type(dep) === "string" || $type(dep) === "element"){
  39
+            el.retrieve('deps').push( $(dep) );
  40
+            return true;
  41
+        }
  42
+		
  43
+        return false;
  44
+    },
  45
+	
  46
+    getDependencies: function(el)
  47
+    {
  48
+        return el.retrieve('deps');
  49
+    },
  50
+	
  51
+    /**
  52
+	 * this is called when a new item of a cfemodule gets initialized
  53
+	 * it checks, whether there are dependencies for this element and adds them to its options
  54
+	 * 
  55
+	 * @param {Object} el
  56
+	 */
  57
+    attachDependencies: function(el,i,baseOptions)
  58
+    {
  59
+        var deps = this.getDependencies(el);
  60
+		
  61
+        if($type(deps) === "array"){
  62
+            baseOptions.deps = deps;
  63
+            return true;
  64
+        }
  65
+	
  66
+        return false;
  67
+    }
  68
+		
  69
+});
  70
+cfe.Replace.implement(new cfe.addon.Dependencies);
  71
+cfe.Replace.prototype.addEvent("onBeforeInitSingle", cfe.Replace.prototype.attachDependencies);
  72
+
  73
+cfe.addon.Dependencies.Helper = new Class({
  74
+    resolveDependencies: function()
  75
+    {
  76
+        var deps = this.o.retrieve('deps');
  77
+		
  78
+        if(deps){
  79
+            $each(deps, function(dep,i){
  80
+                dep.checked = true;
  81
+                dep.fireEvent("change");
  82
+            }.bind(this));
  83
+        }
  84
+    }
  85
+});
  86
+
  87
+// support for checkboxes
  88
+cfe.module.Checkbox.implement(new cfe.addon.Dependencies.Helper);
  89
+cfe.module.Checkbox.prototype.addEvent("onCheck", function(){
  90
+    this.resolveDependencies();
  91
+});
17  ...mootools/1.2/addons/cfe.addon.toggleCheckboxes.js → cfe/addons/cfe.addon.toggleCheckboxes.js
... ...
@@ -1,12 +1,18 @@
1 1
 /**
  2
+ * @module Addon
  3
+ */
  4
+
  5
+/**
2 6
  * implements selectAll/deselectAll functionality into custom form elements
3  
- * @class toggleCheckboxes
  7
+ *
  8
+ * @class ToggleCheckboxes
  9
+ * @namespace cfe.addon
4 10
  *
5 11
  */
6  
-cfe.addon.toggleCheckboxes = new Class({
  12
+cfe.addon.ToggleCheckboxes = new Class({
7 13
 
8 14
     // select all checkboxes in scope
9  
-    selectAll: function(scope){
  15
+    selectAllCheckboxes: function(scope){
10 16
         (scope || $(document.body)).getElements("input[type=checkbox]")[0].each(function(el){
11 17
             if(el.checked != true)
12 18
             {
@@ -17,7 +23,7 @@ cfe.addon.toggleCheckboxes = new Class({
17 23
     },
18 24
 
19 25
     // deselect all checkboxes in scope
20  
-    deselectAll: function(scope){
  26
+    deselectAllCheckboxes: function(scope){
21 27
         (scope || $(document.body)).getElements("input[type=checkbox]")[0].each(function(el){
22 28
             if(el.checked != false)
23 29
             {
@@ -27,4 +33,5 @@ cfe.addon.toggleCheckboxes = new Class({
27 33
         });
28 34
     }
29 35
 });
30  
-cfe.replace.implement(new cfe.addon.toggleCheckboxes);
  36
+
  37
+cfe.Replace.implement(new cfe.addon.ToggleCheckboxes);
27  cfe/mootools/1.2/addons/cfe.addon.toolTips.js → cfe/addons/cfe.addon.toolTips.js
... ...
@@ -1,13 +1,21 @@
1 1
 /**
2  
- * @class toolTips
3  
- * @author Maik
  2
+ * @module Addon
4 3
  */
5  
-cfe.addon.toolTips = new Class({
  4
+
  5
+/**
  6
+ * pretty simple integration of auto-generated tooltips (from title-attribute)
  7
+ * depends on mootools Tips
  8
+ *
  9
+ * @class Tips
  10
+ * @namespace cfe.addon
  11
+ *
  12
+ */
  13
+cfe.addon.Tips = new Class({
6 14
 	
7 15
     options: $merge(this.parent, {
8 16
         enableTips: true,
9 17
         ttStyle: "label",
10  
-        ttClass: "jsQM"
  18
+        ttClass: cfe.prefix+"Tip"
11 19
     }),
12 20
 	
13 21
     initToolTips: function(){
@@ -32,7 +40,7 @@ cfe.addon.toolTips = new Class({
32 40
         var labels = this.options.scope.getElements('label');
33 41
         		
34 42
         labels.each(function(lbl,i){
35  
-			
  43
+
36 44
             forEl = lbl.getProperty("for");
37 45
 			
38 46
             if(!forEl){
@@ -59,14 +67,13 @@ cfe.addon.toolTips = new Class({
59 67
 					
60 68
                     el.setProperty("title","").setProperty("hint", qmTitle)
61 69
 					
62  
-                    var qm = new Element("img",{
63  
-                        "src": this.options.spacer,
  70
+                    var qm = new Element("span",{
64 71
                         "class": this.options.ttClass,
65 72
                         "title": qmTitle
66 73
                     });
67 74
                     
68 75
                     // check if implicit label span is present
69  
-                    var impLabel = lbl.getElement("span[class=label]");
  76
+                    var impLabel = lbl.getFirst("span[class=label]");
70 77
                     
71 78
                     qm.injectInside($chk(impLabel)?impLabel:lbl);
72 79
                 }
@@ -77,7 +84,7 @@ cfe.addon.toolTips = new Class({
77 84
     }
78 85
 });
79 86
 
80  
-cfe.replace.implement(new cfe.addon.toolTips);
81  
-cfe.replace.prototype.addEvent("onComplete", function(){
  87
+cfe.Replace.implement(new cfe.addon.Tips);
  88
+cfe.Replace.prototype.addEvent("onComplete", function(){
82 89
     this.initToolTips();
83 90
 });
168  cfe/base/cfe.base.js
... ...
@@ -0,0 +1,168 @@
  1
+/**
  2
+ * The core of custom form elements. Includes cfe.Generic and some slight addons to the native Element object. 
  3
+ *
  4
+ * @module Core
  5
+ * @namespace cfe
  6
+ */
  7
+
  8
+var cfe = {
  9
+  version: "0.9.9",
  10
+  prefix: "cfe",
  11
+  module: {},
  12
+  addon: {}
  13
+};
  14
+
  15
+/**
  16
+ * extend Elements with some Helper functions
  17
+ * @class Helpers
  18
+ * @namespace Element
  19
+ */
  20
+Element.Helpers = new Class({
  21
+
  22
+  /**
  23
+     * cross-browser method for disabling the text selection by setting css attributes
  24
+     * 
  25
+     * @method disableTextSelection
  26
+     */
  27
+  disableTextSelection: function(){
  28
+    if(Browser.Engine.trident || Browser.Engine.presto){
  29
+      this.setProperty("unselectable","on");
  30
+    }
  31
+    else if(Browser.Engine.gecko){
  32
+      this.setStyle("MozUserSelect","none");
  33
+    }
  34
+    else if(Browser.Engine.webkit){
  35
+      this.setStyle("KhtmlUserSelect","none");
  36
+    }
  37
+
  38
+    return this;
  39
+  },
  40
+
  41
+  /**
  42
+     * disables a HTMLElement if its a form element by setting the disabled attribute to true
  43
+     *
  44
+     * @method disable
  45
+     * @return boolean true, if element could be disabled
  46
+     */
  47
+  disable: function()
  48
+  {
  49
+    if($type(this) === "element" && ["button", "input", "option", "optgroup", "select", "textarea"].contains( this.get("tag") )            )
  50
+    {
  51
+      this.setProperty("disabled", true);
  52
+      this.fireEvent("onDisable");
  53
+    }
  54
+
  55
+    return this;
  56
+  },
  57
+
  58
+  /**
  59
+     * enables a HTMLElement if its a form element by setting the disabled attribute to false
  60
+     *
  61
+     * @method enable
  62
+     * @return {boolean} true, if element could be enabled
  63
+     */
  64
+  enable: function()
  65
+  {
  66
+    if($type(this) === "element" && ["button", "input", "option", "optgroup", "select", "textarea"].contains( this.get("tag") )            )
  67
+    {
  68
+      this.setProperty("disabled", false);
  69
+      this.fireEvent("onEnable");
  70
+    }
  71
+
  72
+    return this;
  73
+  },
  74
+
  75
+  /**
  76
+     * enables or disabled a HTMLElement if its a form element depending on it's current state
  77
+     *
  78
+     * @method toggleDisabled
  79
+     * @return {boolean} true, if element could be toggled
  80
+     */
  81
+  toggleDisabled: function()
  82
+  {
  83
+    if($type(this) === "element" && ["button", "input", "option", "optgroup", "select", "textarea"].contains( this.get("tag") )            )
  84
+    {
  85
+      this.setProperty("disabled", !this.getProperty("disabled") );
  86
+      this.fireEvent(this.getProperty("disabled")?"onDisable":"onEnable");
  87
+    }
  88
+    return this;
  89
+  },
  90
+
  91
+  /**
  92
+     * returns the label-element which belongs to this element
  93
+     *
  94
+     * @method getLabel
  95
+     * @return HTMLElement or NULL
  96
+     */
  97
+  getLabel: function()
  98
+  {
  99
+    var label = null;
  100
+
  101
+    // get label by id/for-combo
  102
+    if(this.id) label = $$("label[for="+this.id+"]")[0];
  103
+        
  104
+    // no label was found for id/for, let's see if it's implicitly labelled
  105
+    if(!label)
  106
+    {
  107
+      label = this.getParent('label');
  108
+
  109
+      if(label) this.implicitLabel = true;
  110
+    }
  111
+
  112
+    return label;
  113
+  },
  114
+
  115
+  /**
  116
+     * generates the markup used by sliding doors css technique to use with this element
  117
+     *
  118
+     * @method setSlidingDoors
  119
+     *
  120
+     * @param count
  121
+     * @param type
  122
+     * @param prefix
  123
+     * 
  124
+     * @return HTMLElement or NULL the wrapped HTMLElement
  125
+     */
  126
+  setSlidingDoors: function(count, type, prefix, suffixes)
  127
+  {
  128
+    var slide = null;
  129
+    var wrapped = this;
  130
+    prefix = $pick(prefix, "sd");
  131
+
  132
+    suffixes = $pick(suffixes, []);
  133
+
  134
+    for(var i = count; i > 0; --i)
  135
+    {
  136
+      wrapped.addClass( prefix+"Slide"+( (i == 1 && count == i) ? "" : (suffixes[i] || i) ));
  137
+      slide = new Element(type);
  138
+      try{
  139
+        wrapped = slide.wraps(wrapped);
  140
+      }catch(e){
  141
+        wrapped = slide.grab(wrapped);
  142
+      }
  143
+    }
  144
+
  145
+    wrapped = null;
  146
+
  147
+    return slide;
  148
+  },
  149
+
  150
+  /**
  151
+     * hide an element but keep it's vertical position and leave it tab- & screenreader-able :)
  152
+     *
  153
+     * @method hideInPlace
  154
+     *
  155
+     * @return HTMLElement
  156
+     */
  157
+  hideInPlace: function()
  158
+  {
  159
+    return this.setStyles({
  160
+      position: "absolute",
  161
+      left: -99999,
  162
+      width: 1,
  163
+      height: 1
  164
+    });
  165
+  }
  166
+});
  167
+
  168
+Element.implement(new Element.Helpers);
96  cfe/cfe.autostart.sample.js
... ...
@@ -0,0 +1,96 @@
  1
+/**
  2
+ * If you pass no scope parameter, then cfe tries to replace all form elements on the whole page
  3
+ */
  4
+window.addEvent('domready', function()
  5
+{
  6
+    var myCfe = new cfe.Replace();
  7
+
  8
+    // initialize cfe for form with id=seachform
  9
+    if($('searchform'))
  10
+        myCfe.engage({
  11
+            scope: $('searchform')
  12
+        });
  13
+
  14
+    // initialize cfe for form with id=commentform
  15
+    if($('commentform'))
  16
+        myCfe.engage({
  17
+            scope: $('commentform')
  18
+        });
  19
+
  20
+    // initialize cfe for form with id=form
  21
+    // set some options in advance
  22
+    if( $('form') ){
  23
+
  24
+        // add dependencies for checkbox with id 'chb23' by passing input elements
  25
+        myCfe.addDependencies($("chb23"),["chb22","chb21"]);
  26
+
  27
+        // set some options for select and file modules
  28
+        myCfe.setModuleOptions("Select",{
  29
+            scrolling: true,
  30
+            scollSteps: 5
  31
+        });
  32
+
  33
+        myCfe.setModuleOptions("File",{
  34
+            fileIcons: true,
  35
+            trimFilePath: true
  36
+            //hides the select file button, when a file is selected
  37
+            ,onUpdate: function(){
  38
+                if(this.o.value != ""){
  39
+                    this.a.addClass("hidden");
  40
+                }else{
  41
+                    this.a.removeClass("hidden");
  42
+                }
  43
+            }
  44
+        });
  45
+
  46
+        myCfe.engage({
  47
+            scope: $('form')
  48
+        });
  49
+
  50
+        // add selectAll/deselectAll functionality to links
  51
+        $('selectAll').addEvent("click", function(e){
  52
+            e.stop();
  53
+            this.selectAllCheckboxes($$("fieldset.chb1"));
  54
+        }.bind(myCfe));
  55
+
  56
+        $('deselectAll').addEvent("click", function(e){
  57
+            e.stop();
  58
+            this.deselectAllCheckboxes($$("fieldset.chb1"));
  59
+        }.bind(myCfe));
  60
+
  61
+        //mt 1.2 sample to tween label on hover and back onUnhover => use custom events
  62
+        $('chb1').retrieve("cfe").addEvent("mouseOver", function(){
  63
+            this.l.tween('margin-left', 10);
  64
+        });
  65
+
  66
+        $('chb1').retrieve("cfe").addEvent("mouseOut", function(){
  67
+            this.l.tween('margin-left', 0);
  68
+        });
  69
+
  70
+        // sample for triggering disabled/enabled attribute on specific elements
  71
+        $("trigger").addEvent("click", function(e){
  72
+            e.stop();
  73
+            $("chb4").toggleDisabled();
  74
+        });
  75
+
  76
+        $("trigger2").addEvent("click", function(e){
  77
+            e.stop();
  78
+            $("sel-norm3").toggleDisabled();
  79
+        });
  80
+
  81
+        $("trigger3").addEvent("click", function(e){
  82
+            e.stop();
  83
+            $("sel-mult2").toggleDisabled();
  84
+        });
  85
+
  86
+        $("triggertxt").addEvent("click", function(e){
  87
+            e.stop();
  88
+            $("input4").toggleDisabled();
  89
+        });
  90
+
  91
+        $("triggerta").addEvent("click", function(e){
  92
+            e.stop();
  93
+            $("textarea2").toggleDisabled();
  94
+        });
  95
+    }
  96
+});
4,376  cfe/jquery/1.3.2/jquery.js
0 additions, 4376 deletions not shown
5  cfe/lib/README
... ...
@@ -0,0 +1,5 @@
  1
+Find the Mootools Library at http://mootools.net
  2
+
  3
+Dependencies:
  4
+	* Core 
  5
+	* More
357  cfe/lib/mootools-1.2.4-core.js
... ...
@@ -0,0 +1,357 @@
  1
+//MooTools, <http://mootools.net>, My Object Oriented (JavaScript) Tools. Copyright (c) 2006-2009 Valerio Proietti, <http://mad4milk.net>, MIT Style License.
  2
+
  3
+var MooTools={version:"1.2.4",build:"0d9113241a90b9cd5643b926795852a2026710d4"};var Native=function(k){k=k||{};var a=k.name;var i=k.legacy;var b=k.protect;
  4
+var c=k.implement;var h=k.generics;var f=k.initialize;var g=k.afterImplement||function(){};var d=f||i;h=h!==false;d.constructor=Native;d.$family={name:"native"};
  5
+if(i&&f){d.prototype=i.prototype;}d.prototype.constructor=d;if(a){var e=a.toLowerCase();d.prototype.$family={name:e};Native.typize(d,e);}var j=function(n,l,o,m){if(!b||m||!n.prototype[l]){n.prototype[l]=o;
  6
+}if(h){Native.genericize(n,l,b);}g.call(n,l,o);return n;};d.alias=function(n,l,p){if(typeof n=="string"){var o=this.prototype[n];if((n=o)){return j(this,l,n,p);
  7
+}}for(var m in n){this.alias(m,n[m],l);}return this;};d.implement=function(m,l,o){if(typeof m=="string"){return j(this,m,l,o);}for(var n in m){j(this,n,m[n],l);
  8
+}return this;};if(c){d.implement(c);}return d;};Native.genericize=function(b,c,a){if((!a||!b[c])&&typeof b.prototype[c]=="function"){b[c]=function(){var d=Array.prototype.slice.call(arguments);
  9
+return b.prototype[c].apply(d.shift(),d);};}};Native.implement=function(d,c){for(var b=0,a=d.length;b<a;b++){d[b].implement(c);}};Native.typize=function(a,b){if(!a.type){a.type=function(c){return($type(c)===b);
  10
+};}};(function(){var a={Array:Array,Date:Date,Function:Function,Number:Number,RegExp:RegExp,String:String};for(var h in a){new Native({name:h,initialize:a[h],protect:true});
  11
+}var d={"boolean":Boolean,"native":Native,object:Object};for(var c in d){Native.typize(d[c],c);}var f={Array:["concat","indexOf","join","lastIndexOf","pop","push","reverse","shift","slice","sort","splice","toString","unshift","valueOf"],String:["charAt","charCodeAt","concat","indexOf","lastIndexOf","match","replace","search","slice","split","substr","substring","toLowerCase","toUpperCase","valueOf"]};
  12
+for(var e in f){for(var b=f[e].length;b--;){Native.genericize(a[e],f[e][b],true);}}})();var Hash=new Native({name:"Hash",initialize:function(a){if($type(a)=="hash"){a=$unlink(a.getClean());
  13
+}for(var b in a){this[b]=a[b];}return this;}});Hash.implement({forEach:function(b,c){for(var a in this){if(this.hasOwnProperty(a)){b.call(c,this[a],a,this);
  14
+}}},getClean:function(){var b={};for(var a in this){if(this.hasOwnProperty(a)){b[a]=this[a];}}return b;},getLength:function(){var b=0;for(var a in this){if(this.hasOwnProperty(a)){b++;
  15
+}}return b;}});Hash.alias("forEach","each");Array.implement({forEach:function(c,d){for(var b=0,a=this.length;b<a;b++){c.call(d,this[b],b,this);}}});Array.alias("forEach","each");
  16
+function $A(b){if(b.item){var a=b.length,c=new Array(a);while(a--){c[a]=b[a];}return c;}return Array.prototype.slice.call(b);}function $arguments(a){return function(){return arguments[a];
  17
+};}function $chk(a){return !!(a||a===0);}function $clear(a){clearTimeout(a);clearInterval(a);return null;}function $defined(a){return(a!=undefined);}function $each(c,b,d){var a=$type(c);
  18
+((a=="arguments"||a=="collection"||a=="array")?Array:Hash).each(c,b,d);}function $empty(){}function $extend(c,a){for(var b in (a||{})){c[b]=a[b];}return c;
  19
+}function $H(a){return new Hash(a);}function $lambda(a){return($type(a)=="function")?a:function(){return a;};}function $merge(){var a=Array.slice(arguments);
  20
+a.unshift({});return $mixin.apply(null,a);}function $mixin(e){for(var d=1,a=arguments.length;d<a;d++){var b=arguments[d];if($type(b)!="object"){continue;
  21
+}for(var c in b){var g=b[c],f=e[c];e[c]=(f&&$type(g)=="object"&&$type(f)=="object")?$mixin(f,g):$unlink(g);}}return e;}function $pick(){for(var b=0,a=arguments.length;
  22
+b<a;b++){if(arguments[b]!=undefined){return arguments[b];}}return null;}function $random(b,a){return Math.floor(Math.random()*(a-b+1)+b);}function $splat(b){var a=$type(b);
  23
+return(a)?((a!="array"&&a!="arguments")?[b]:b):[];}var $time=Date.now||function(){return +new Date;};function $try(){for(var b=0,a=arguments.length;b<a;
  24
+b++){try{return arguments[b]();}catch(c){}}return null;}function $type(a){if(a==undefined){return false;}if(a.$family){return(a.$family.name=="number"&&!isFinite(a))?false:a.$family.name;
  25
+}if(a.nodeName){switch(a.nodeType){case 1:return"element";case 3:return(/\S/).test(a.nodeValue)?"textnode":"whitespace";}}else{if(typeof a.length=="number"){if(a.callee){return"arguments";
  26
+}else{if(a.item){return"collection";}}}}return typeof a;}function $unlink(c){var b;switch($type(c)){case"object":b={};for(var e in c){b[e]=$unlink(c[e]);
  27
+}break;case"hash":b=new Hash(c);break;case"array":b=[];for(var d=0,a=c.length;d<a;d++){b[d]=$unlink(c[d]);}break;default:return c;}return b;}var Browser=$merge({Engine:{name:"unknown",version:0},Platform:{name:(window.orientation!=undefined)?"ipod":(navigator.platform.match(/mac|win|linux/i)||["other"])[0].toLowerCase()},Features:{xpath:!!(document.evaluate),air:!!(window.runtime),query:!!(document.querySelector)},Plugins:{},Engines:{presto:function(){return(!window.opera)?false:((arguments.callee.caller)?960:((document.getElementsByClassName)?950:925));
  28
+},trident:function(){return(!window.ActiveXObject)?false:((window.XMLHttpRequest)?((document.querySelectorAll)?6:5):4);},webkit:function(){return(navigator.taintEnabled)?false:((Browser.Features.xpath)?((Browser.Features.query)?525:420):419);
  29
+},gecko:function(){return(!document.getBoxObjectFor&&window.mozInnerScreenX==null)?false:((document.getElementsByClassName)?19:18);}}},Browser||{});Browser.Platform[Browser.Platform.name]=true;
  30
+Browser.detect=function(){for(var b in this.Engines){var a=this.Engines[b]();if(a){this.Engine={name:b,version:a};this.Engine[b]=this.Engine[b+a]=true;
  31
+break;}}return{name:b,version:a};};Browser.detect();Browser.Request=function(){return $try(function(){return new XMLHttpRequest();},function(){return new ActiveXObject("MSXML2.XMLHTTP");
  32
+},function(){return new ActiveXObject("Microsoft.XMLHTTP");});};Browser.Features.xhr=!!(Browser.Request());Browser.Plugins.Flash=(function(){var a=($try(function(){return navigator.plugins["Shockwave Flash"].description;
  33
+},function(){return new ActiveXObject("ShockwaveFlash.ShockwaveFlash").GetVariable("$version");})||"0 r0").match(/\d+/g);return{version:parseInt(a[0]||0+"."+a[1],10)||0,build:parseInt(a[2],10)||0};
  34
+})();function $exec(b){if(!b){return b;}if(window.execScript){window.execScript(b);}else{var a=document.createElement("script");a.setAttribute("type","text/javascript");
  35
+a[(Browser.Engine.webkit&&Browser.Engine.version<420)?"innerText":"text"]=b;document.head.appendChild(a);document.head.removeChild(a);}return b;}Native.UID=1;
  36
+var $uid=(Browser.Engine.trident)?function(a){return(a.uid||(a.uid=[Native.UID++]))[0];}:function(a){return a.uid||(a.uid=Native.UID++);};var Window=new Native({name:"Window",legacy:(Browser.Engine.trident)?null:window.Window,initialize:function(a){$uid(a);
  37
+if(!a.Element){a.Element=$empty;if(Browser.Engine.webkit){a.document.createElement("iframe");}a.Element.prototype=(Browser.Engine.webkit)?window["[[DOMElement.prototype]]"]:{};
  38
+}a.document.window=a;return $extend(a,Window.Prototype);},afterImplement:function(b,a){window[b]=Window.Prototype[b]=a;}});Window.Prototype={$family:{name:"window"}};
  39
+new Window(window);var Document=new Native({name:"Document",legacy:(Browser.Engine.trident)?null:window.Document,initialize:function(a){$uid(a);a.head=a.getElementsByTagName("head")[0];
  40
+a.html=a.getElementsByTagName("html")[0];if(Browser.Engine.trident&&Browser.Engine.version<=4){$try(function(){a.execCommand("BackgroundImageCache",false,true);
  41
+});}if(Browser.Engine.trident){a.window.attachEvent("onunload",function(){a.window.detachEvent("onunload",arguments.callee);a.head=a.html=a.window=null;
  42
+});}return $extend(a,Document.Prototype);},afterImplement:function(b,a){document[b]=Document.Prototype[b]=a;}});Document.Prototype={$family:{name:"document"}};
  43
+new Document(document);Array.implement({every:function(c,d){for(var b=0,a=this.length;b<a;b++){if(!c.call(d,this[b],b,this)){return false;}}return true;
  44
+},filter:function(d,e){var c=[];for(var b=0,a=this.length;b<a;b++){if(d.call(e,this[b],b,this)){c.push(this[b]);}}return c;},clean:function(){return this.filter($defined);
  45
+},indexOf:function(c,d){var a=this.length;for(var b=(d<0)?Math.max(0,a+d):d||0;b<a;b++){if(this[b]===c){return b;}}return -1;},map:function(d,e){var c=[];
  46
+for(var b=0,a=this.length;b<a;b++){c[b]=d.call(e,this[b],b,this);}return c;},some:function(c,d){for(var b=0,a=this.length;b<a;b++){if(c.call(d,this[b],b,this)){return true;
  47
+}}return false;},associate:function(c){var d={},b=Math.min(this.length,c.length);for(var a=0;a<b;a++){d[c[a]]=this[a];}return d;},link:function(c){var a={};
  48
+for(var e=0,b=this.length;e<b;e++){for(var d in c){if(c[d](this[e])){a[d]=this[e];delete c[d];break;}}}return a;},contains:function(a,b){return this.indexOf(a,b)!=-1;
  49
+},extend:function(c){for(var b=0,a=c.length;b<a;b++){this.push(c[b]);}return this;},getLast:function(){return(this.length)?this[this.length-1]:null;},getRandom:function(){return(this.length)?this[$random(0,this.length-1)]:null;
  50
+},include:function(a){if(!this.contains(a)){this.push(a);}return this;},combine:function(c){for(var b=0,a=c.length;b<a;b++){this.include(c[b]);}return this;
  51
+},erase:function(b){for(var a=this.length;a--;a){if(this[a]===b){this.splice(a,1);}}return this;},empty:function(){this.length=0;return this;},flatten:function(){var d=[];
  52
+for(var b=0,a=this.length;b<a;b++){var c=$type(this[b]);if(!c){continue;}d=d.concat((c=="array"||c=="collection"||c=="arguments")?Array.flatten(this[b]):this[b]);
  53
+}return d;},hexToRgb:function(b){if(this.length!=3){return null;}var a=this.map(function(c){if(c.length==1){c+=c;}return c.toInt(16);});return(b)?a:"rgb("+a+")";
  54
+},rgbToHex:function(d){if(this.length<3){return null;}if(this.length==4&&this[3]==0&&!d){return"transparent";}var b=[];for(var a=0;a<3;a++){var c=(this[a]-0).toString(16);
  55
+b.push((c.length==1)?"0"+c:c);}return(d)?b:"#"+b.join("");}});Function.implement({extend:function(a){for(var b in a){this[b]=a[b];}return this;},create:function(b){var a=this;
  56
+b=b||{};return function(d){var c=b.arguments;c=(c!=undefined)?$splat(c):Array.slice(arguments,(b.event)?1:0);if(b.event){c=[d||window.event].extend(c);
  57
+}var e=function(){return a.apply(b.bind||null,c);};if(b.delay){return setTimeout(e,b.delay);}if(b.periodical){return setInterval(e,b.periodical);}if(b.attempt){return $try(e);
  58
+}return e();};},run:function(a,b){return this.apply(b,$splat(a));},pass:function(a,b){return this.create({bind:b,arguments:a});},bind:function(b,a){return this.create({bind:b,arguments:a});
  59
+},bindWithEvent:function(b,a){return this.create({bind:b,arguments:a,event:true});},attempt:function(a,b){return this.create({bind:b,arguments:a,attempt:true})();
  60
+},delay:function(b,c,a){return this.create({bind:c,arguments:a,delay:b})();},periodical:function(c,b,a){return this.create({bind:b,arguments:a,periodical:c})();
  61
+}});Number.implement({limit:function(b,a){return Math.min(a,Math.max(b,this));},round:function(a){a=Math.pow(10,a||0);return Math.round(this*a)/a;},times:function(b,c){for(var a=0;
  62
+a<this;a++){b.call(c,a,this);}},toFloat:function(){return parseFloat(this);},toInt:function(a){return parseInt(this,a||10);}});Number.alias("times","each");
  63
+(function(b){var a={};b.each(function(c){if(!Number[c]){a[c]=function(){return Math[c].apply(null,[this].concat($A(arguments)));};}});Number.implement(a);
  64
+})(["abs","acos","asin","atan","atan2","ceil","cos","exp","floor","log","max","min","pow","sin","sqrt","tan"]);String.implement({test:function(a,b){return((typeof a=="string")?new RegExp(a,b):a).test(this);
  65
+},contains:function(a,b){return(b)?(b+this+b).indexOf(b+a+b)>-1:this.indexOf(a)>-1;},trim:function(){return this.replace(/^\s+|\s+$/g,"");},clean:function(){return this.replace(/\s+/g," ").trim();
  66
+},camelCase:function(){return this.replace(/-\D/g,function(a){return a.charAt(1).toUpperCase();});},hyphenate:function(){return this.replace(/[A-Z]/g,function(a){return("-"+a.charAt(0).toLowerCase());
  67
+});},capitalize:function(){return this.replace(/\b[a-z]/g,function(a){return a.toUpperCase();});},escapeRegExp:function(){return this.replace(/([-.*+?^${}()|[\]\/\\])/g,"\\$1");
  68
+},toInt:function(a){return parseInt(this,a||10);},toFloat:function(){return parseFloat(this);},hexToRgb:function(b){var a=this.match(/^#?(\w{1,2})(\w{1,2})(\w{1,2})$/);
  69
+return(a)?a.slice(1).hexToRgb(b):null;},rgbToHex:function(b){var a=this.match(/\d{1,3}/g);return(a)?a.rgbToHex(b):null;},stripScripts:function(b){var a="";
  70
+var c=this.replace(/<script[^>]*>([\s\S]*?)<\/script>/gi,function(){a+=arguments[1]+"\n";return"";});if(b===true){$exec(a);}else{if($type(b)=="function"){b(a,c);
  71
+}}return c;},substitute:function(a,b){return this.replace(b||(/\\?\{([^{}]+)\}/g),function(d,c){if(d.charAt(0)=="\\"){return d.slice(1);}return(a[c]!=undefined)?a[c]:"";
  72
+});}});Hash.implement({has:Object.prototype.hasOwnProperty,keyOf:function(b){for(var a in this){if(this.hasOwnProperty(a)&&this[a]===b){return a;}}return null;
  73
+},hasValue:function(a){return(Hash.keyOf(this,a)!==null);},extend:function(a){Hash.each(a||{},function(c,b){Hash.set(this,b,c);},this);return this;},combine:function(a){Hash.each(a||{},function(c,b){Hash.include(this,b,c);
  74
+},this);return this;},erase:function(a){if(this.hasOwnProperty(a)){delete this[a];}return this;},get:function(a){return(this.hasOwnProperty(a))?this[a]:null;
  75
+},set:function(a,b){if(!this[a]||this.hasOwnProperty(a)){this[a]=b;}return this;},empty:function(){Hash.each(this,function(b,a){delete this[a];},this);
  76
+return this;},include:function(a,b){if(this[a]==undefined){this[a]=b;}return this;},map:function(b,c){var a=new Hash;Hash.each(this,function(e,d){a.set(d,b.call(c,e,d,this));
  77
+},this);return a;},filter:function(b,c){var a=new Hash;Hash.each(this,function(e,d){if(b.call(c,e,d,this)){a.set(d,e);}},this);return a;},every:function(b,c){for(var a in this){if(this.hasOwnProperty(a)&&!b.call(c,this[a],a)){return false;
  78
+}}return true;},some:function(b,c){for(var a in this){if(this.hasOwnProperty(a)&&b.call(c,this[a],a)){return true;}}return false;},getKeys:function(){var a=[];
  79
+Hash.each(this,function(c,b){a.push(b);});return a;},getValues:function(){var a=[];Hash.each(this,function(b){a.push(b);});return a;},toQueryString:function(a){var b=[];
  80
+Hash.each(this,function(f,e){if(a){e=a+"["+e+"]";}var d;switch($type(f)){case"object":d=Hash.toQueryString(f,e);break;case"array":var c={};f.each(function(h,g){c[g]=h;
  81
+});d=Hash.toQueryString(c,e);break;default:d=e+"="+encodeURIComponent(f);}if(f!=undefined){b.push(d);}});return b.join("&");}});Hash.alias({keyOf:"indexOf",hasValue:"contains"});
  82
+var Event=new Native({name:"Event",initialize:function(a,f){f=f||window;var k=f.document;a=a||f.event;if(a.$extended){return a;}this.$extended=true;var j=a.type;
  83
+var g=a.target||a.srcElement;while(g&&g.nodeType==3){g=g.parentNode;}if(j.test(/key/)){var b=a.which||a.keyCode;var m=Event.Keys.keyOf(b);if(j=="keydown"){var d=b-111;
  84
+if(d>0&&d<13){m="f"+d;}}m=m||String.fromCharCode(b).toLowerCase();}else{if(j.match(/(click|mouse|menu)/i)){k=(!k.compatMode||k.compatMode=="CSS1Compat")?k.html:k.body;
  85
+var i={x:a.pageX||a.clientX+k.scrollLeft,y:a.pageY||a.clientY+k.scrollTop};var c={x:(a.pageX)?a.pageX-f.pageXOffset:a.clientX,y:(a.pageY)?a.pageY-f.pageYOffset:a.clientY};
  86
+if(j.match(/DOMMouseScroll|mousewheel/)){var h=(a.wheelDelta)?a.wheelDelta/120:-(a.detail||0)/3;}var e=(a.which==3)||(a.button==2);var l=null;if(j.match(/over|out/)){switch(j){case"mouseover":l=a.relatedTarget||a.fromElement;
  87
+break;case"mouseout":l=a.relatedTarget||a.toElement;}if(!(function(){while(l&&l.nodeType==3){l=l.parentNode;}return true;}).create({attempt:Browser.Engine.gecko})()){l=false;
  88
+}}}}return $extend(this,{event:a,type:j,page:i,client:c,rightClick:e,wheel:h,relatedTarget:l,target:g,code:b,key:m,shift:a.shiftKey,control:a.ctrlKey,alt:a.altKey,meta:a.metaKey});
  89
+}});Event.Keys=new Hash({enter:13,up:38,down:40,left:37,right:39,esc:27,space:32,backspace:8,tab:9,"delete":46});Event.implement({stop:function(){return this.stopPropagation().preventDefault();
  90
+},stopPropagation:function(){if(this.event.stopPropagation){this.event.stopPropagation();}else{this.event.cancelBubble=true;}return this;},preventDefault:function(){if(this.event.preventDefault){this.event.preventDefault();
  91
+}else{this.event.returnValue=false;}return this;}});function Class(b){if(b instanceof Function){b={initialize:b};}var a=function(){Object.reset(this);if(a._prototyping){return this;
  92
+}this._current=$empty;var c=(this.initialize)?this.initialize.apply(this,arguments):this;delete this._current;delete this.caller;return c;}.extend(this);
  93
+a.implement(b);a.constructor=Class;a.prototype.constructor=a;return a;}Function.prototype.protect=function(){this._protected=true;return this;};Object.reset=function(a,c){if(c==null){for(var e in a){Object.reset(a,e);
  94
+}return a;}delete a[c];switch($type(a[c])){case"object":var d=function(){};d.prototype=a[c];var b=new d;a[c]=Object.reset(b);break;case"array":a[c]=$unlink(a[c]);
  95
+break;}return a;};new Native({name:"Class",initialize:Class}).extend({instantiate:function(b){b._prototyping=true;var a=new b;delete b._prototyping;return a;
  96
+},wrap:function(a,b,c){if(c._origin){c=c._origin;}return function(){if(c._protected&&this._current==null){throw new Error('The method "'+b+'" cannot be called.');
  97
+}var e=this.caller,f=this._current;this.caller=f;this._current=arguments.callee;var d=c.apply(this,arguments);this._current=f;this.caller=e;return d;}.extend({_owner:a,_origin:c,_name:b});
  98
+}});Class.implement({implement:function(a,d){if($type(a)=="object"){for(var e in a){this.implement(e,a[e]);}return this;}var f=Class.Mutators[a];if(f){d=f.call(this,d);
  99
+if(d==null){return this;}}var c=this.prototype;switch($type(d)){case"function":if(d._hidden){return this;}c[a]=Class.wrap(this,a,d);break;case"object":var b=c[a];
  100
+if($type(b)=="object"){$mixin(b,d);}else{c[a]=$unlink(d);}break;case"array":c[a]=$unlink(d);break;default:c[a]=d;}return this;}});Class.Mutators={Extends:function(a){this.parent=a;
  101
+this.prototype=Class.instantiate(a);this.implement("parent",function(){var b=this.caller._name,c=this.caller._owner.parent.prototype[b];if(!c){throw new Error('The method "'+b+'" has no parent.');
  102
+}return c.apply(this,arguments);}.protect());},Implements:function(a){$splat(a).each(function(b){if(b instanceof Function){b=Class.instantiate(b);}this.implement(b);
  103
+},this);}};var Chain=new Class({$chain:[],chain:function(){this.$chain.extend(Array.flatten(arguments));return this;},callChain:function(){return(this.$chain.length)?this.$chain.shift().apply(this,arguments):false;
  104
+},clearChain:function(){this.$chain.empty();return this;}});var Events=new Class({$events:{},addEvent:function(c,b,a){c=Events.removeOn(c);if(b!=$empty){this.$events[c]=this.$events[c]||[];
  105
+this.$events[c].include(b);if(a){b.internal=true;}}return this;},addEvents:function(a){for(var b in a){this.addEvent(b,a[b]);}return this;},fireEvent:function(c,b,a){c=Events.removeOn(c);
  106
+if(!this.$events||!this.$events[c]){return this;}this.$events[c].each(function(d){d.create({bind:this,delay:a,"arguments":b})();},this);return this;},removeEvent:function(b,a){b=Events.removeOn(b);
  107
+if(!this.$events[b]){return this;}if(!a.internal){this.$events[b].erase(a);}return this;},removeEvents:function(c){var d;if($type(c)=="object"){for(d in c){this.removeEvent(d,c[d]);
  108
+}return this;}if(c){c=Events.removeOn(c);}for(d in this.$events){if(c&&c!=d){continue;}var b=this.$events[d];for(var a=b.length;a--;a){this.removeEvent(d,b[a]);
  109
+}}return this;}});Events.removeOn=function(a){return a.replace(/^on([A-Z])/,function(b,c){return c.toLowerCase();});};var Options=new Class({setOptions:function(){this.options=$merge.run([this.options].extend(arguments));
  110
+if(!this.addEvent){return this;}for(var a in this.options){if($type(this.options[a])!="function"||!(/^on[A-Z]/).test(a)){continue;}this.addEvent(a,this.options[a]);
  111
+delete this.options[a];}return this;}});var Element=new Native({name:"Element",legacy:window.Element,initialize:function(a,b){var c=Element.Constructors.get(a);
  112
+if(c){return c(b);}if(typeof a=="string"){return document.newElement(a,b);}return document.id(a).set(b);},afterImplement:function(a,b){Element.Prototype[a]=b;
  113
+if(Array[a]){return;}Elements.implement(a,function(){var c=[],g=true;for(var e=0,d=this.length;e<d;e++){var f=this[e][a].apply(this[e],arguments);c.push(f);
  114
+if(g){g=($type(f)=="element");}}return(g)?new Elements(c):c;});}});Element.Prototype={$family:{name:"element"}};Element.Constructors=new Hash;var IFrame=new Native({name:"IFrame",generics:false,initialize:function(){var f=Array.link(arguments,{properties:Object.type,iframe:$defined});
  115
+var d=f.properties||{};var c=document.id(f.iframe);var e=d.onload||$empty;delete d.onload;d.id=d.name=$pick(d.id,d.name,c?(c.id||c.name):"IFrame_"+$time());
  116
+c=new Element(c||"iframe",d);var b=function(){var g=$try(function(){return c.contentWindow.location.host;});if(!g||g==window.location.host){var h=new Window(c.contentWindow);
  117
+new Document(c.contentWindow.document);$extend(h.Element.prototype,Element.Prototype);}e.call(c.contentWindow,c.contentWindow.document);};var a=$try(function(){return c.contentWindow;
  118
+});((a&&a.document.body)||window.frames[d.id])?b():c.addListener("load",b);return c;}});var Elements=new Native({initialize:function(f,b){b=$extend({ddup:true,cash:true},b);
  119
+f=f||[];if(b.ddup||b.cash){var g={},e=[];for(var c=0,a=f.length;c<a;c++){var d=document.id(f[c],!b.cash);if(b.ddup){if(g[d.uid]){continue;}g[d.uid]=true;
  120
+}if(d){e.push(d);}}f=e;}return(b.cash)?$extend(f,this):f;}});Elements.implement({filter:function(a,b){if(!a){return this;}return new Elements(Array.filter(this,(typeof a=="string")?function(c){return c.match(a);
  121
+}:a,b));}});Document.implement({newElement:function(a,b){if(Browser.Engine.trident&&b){["name","type","checked"].each(function(c){if(!b[c]){return;}a+=" "+c+'="'+b[c]+'"';
  122
+if(c!="checked"){delete b[c];}});a="<"+a+">";}return document.id(this.createElement(a)).set(b);},newTextNode:function(a){return this.createTextNode(a);
  123
+},getDocument:function(){return this;},getWindow:function(){return this.window;},id:(function(){var a={string:function(d,c,b){d=b.getElementById(d);return(d)?a.element(d,c):null;
  124
+},element:function(b,e){$uid(b);if(!e&&!b.$family&&!(/^object|embed$/i).test(b.tagName)){var c=Element.Prototype;for(var d in c){b[d]=c[d];}}return b;},object:function(c,d,b){if(c.toElement){return a.element(c.toElement(b),d);
  125
+}return null;}};a.textnode=a.whitespace=a.window=a.document=$arguments(0);return function(c,e,d){if(c&&c.$family&&c.uid){return c;}var b=$type(c);return(a[b])?a[b](c,e,d||document):null;
  126
+};})()});if(window.$==null){Window.implement({$:function(a,b){return document.id(a,b,this.document);}});}Window.implement({$$:function(a){if(arguments.length==1&&typeof a=="string"){return this.document.getElements(a);
  127
+}var f=[];var c=Array.flatten(arguments);for(var d=0,b=c.length;d<b;d++){var e=c[d];switch($type(e)){case"element":f.push(e);break;case"string":f.extend(this.document.getElements(e,true));
  128
+}}return new Elements(f);},getDocument:function(){return this.document;},getWindow:function(){return this;}});Native.implement([Element,Document],{getElement:function(a,b){return document.id(this.getElements(a,true)[0]||null,b);
  129
+},getElements:function(a,d){a=a.split(",");var c=[];var b=(a.length>1);a.each(function(e){var f=this.getElementsByTagName(e.trim());(b)?c.extend(f):c=f;
  130
+},this);return new Elements(c,{ddup:b,cash:!d});}});(function(){var h={},f={};var i={input:"checked",option:"selected",textarea:(Browser.Engine.webkit&&Browser.Engine.version<420)?"innerHTML":"value"};
  131
+var c=function(l){return(f[l]||(f[l]={}));};var g=function(n,l){if(!n){return;}var m=n.uid;if(Browser.Engine.trident){if(n.clearAttributes){var q=l&&n.cloneNode(false);
  132
+n.clearAttributes();if(q){n.mergeAttributes(q);}}else{if(n.removeEvents){n.removeEvents();}}if((/object/i).test(n.tagName)){for(var o in n){if(typeof n[o]=="function"){n[o]=$empty;
  133
+}}Element.dispose(n);}}if(!m){return;}h[m]=f[m]=null;};var d=function(){Hash.each(h,g);if(Browser.Engine.trident){$A(document.getElementsByTagName("object")).each(g);
  134
+}if(window.CollectGarbage){CollectGarbage();}h=f=null;};var j=function(n,l,s,m,p,r){var o=n[s||l];var q=[];while(o){if(o.nodeType==1&&(!m||Element.match(o,m))){if(!p){return document.id(o,r);
  135
+}q.push(o);}o=o[l];}return(p)?new Elements(q,{ddup:false,cash:!r}):null;};var e={html:"innerHTML","class":"className","for":"htmlFor",defaultValue:"defaultValue",text:(Browser.Engine.trident||(Browser.Engine.webkit&&Browser.Engine.version<420))?"innerText":"textContent"};
  136
+var b=["compact","nowrap","ismap","declare","noshade","checked","disabled","readonly","multiple","selected","noresize","defer"];var k=["value","type","defaultValue","accessKey","cellPadding","cellSpacing","colSpan","frameBorder","maxLength","readOnly","rowSpan","tabIndex","useMap"];
  137
+b=b.associate(b);Hash.extend(e,b);Hash.extend(e,k.associate(k.map(String.toLowerCase)));var a={before:function(m,l){if(l.parentNode){l.parentNode.insertBefore(m,l);
  138
+}},after:function(m,l){if(!l.parentNode){return;}var n=l.nextSibling;(n)?l.parentNode.insertBefore(m,n):l.parentNode.appendChild(m);},bottom:function(m,l){l.appendChild(m);
  139
+},top:function(m,l){var n=l.firstChild;(n)?l.insertBefore(m,n):l.appendChild(m);}};a.inside=a.bottom;Hash.each(a,function(l,m){m=m.capitalize();Element.implement("inject"+m,function(n){l(this,document.id(n,true));
  140
+return this;});Element.implement("grab"+m,function(n){l(document.id(n,true),this);return this;});});Element.implement({set:function(o,m){switch($type(o)){case"object":for(var n in o){this.set(n,o[n]);
  141
+}break;case"string":var l=Element.Properties.get(o);(l&&l.set)?l.set.apply(this,Array.slice(arguments,1)):this.setProperty(o,m);}return this;},get:function(m){var l=Element.Properties.get(m);
  142
+return(l&&l.get)?l.get.apply(this,Array.slice(arguments,1)):this.getProperty(m);},erase:function(m){var l=Element.Properties.get(m);(l&&l.erase)?l.erase.apply(this):this.removeProperty(m);
  143
+return this;},setProperty:function(m,n){var l=e[m];if(n==undefined){return this.removeProperty(m);}if(l&&b[m]){n=!!n;}(l)?this[l]=n:this.setAttribute(m,""+n);
  144
+return this;},setProperties:function(l){for(var m in l){this.setProperty(m,l[m]);}return this;},getProperty:function(m){var l=e[m];var n=(l)?this[l]:this.getAttribute(m,2);
  145
+return(b[m])?!!n:(l)?n:n||null;},getProperties:function(){var l=$A(arguments);return l.map(this.getProperty,this).associate(l);},removeProperty:function(m){var l=e[m];
  146
+(l)?this[l]=(l&&b[m])?false:"":this.removeAttribute(m);return this;},removeProperties:function(){Array.each(arguments,this.removeProperty,this);return this;
  147
+},hasClass:function(l){return this.className.contains(l," ");},addClass:function(l){if(!this.hasClass(l)){this.className=(this.className+" "+l).clean();
  148
+}return this;},removeClass:function(l){this.className=this.className.replace(new RegExp("(^|\\s)"+l+"(?:\\s|$)"),"$1");return this;},toggleClass:function(l){return this.hasClass(l)?this.removeClass(l):this.addClass(l);
  149
+},adopt:function(){Array.flatten(arguments).each(function(l){l=document.id(l,true);if(l){this.appendChild(l);}},this);return this;},appendText:function(m,l){return this.grab(this.getDocument().newTextNode(m),l);
  150
+},grab:function(m,l){a[l||"bottom"](document.id(m,true),this);return this;},inject:function(m,l){a[l||"bottom"](this,document.id(m,true));return this;},replaces:function(l){l=document.id(l,true);
  151
+l.parentNode.replaceChild(this,l);return this;},wraps:function(m,l){m=document.id(m,true);return this.replaces(m).grab(m,l);},getPrevious:function(l,m){return j(this,"previousSibling",null,l,false,m);
  152
+},getAllPrevious:function(l,m){return j(this,"previousSibling",null,l,true,m);},getNext:function(l,m){return j(this,"nextSibling",null,l,false,m);},getAllNext:function(l,m){return j(this,"nextSibling",null,l,true,m);
  153
+},getFirst:function(l,m){return j(this,"nextSibling","firstChild",l,false,m);},getLast:function(l,m){return j(this,"previousSibling","lastChild",l,false,m);
  154
+},getParent:function(l,m){return j(this,"parentNode",null,l,false,m);},getParents:function(l,m){return j(this,"parentNode",null,l,true,m);},getSiblings:function(l,m){return this.getParent().getChildren(l,m).erase(this);
  155
+},getChildren:function(l,m){return j(this,"nextSibling","firstChild",l,true,m);},getWindow:function(){return this.ownerDocument.window;},getDocument:function(){return this.ownerDocument;
  156
+},getElementById:function(o,n){var m=this.ownerDocument.getElementById(o);if(!m){return null;}for(var l=m.parentNode;l!=this;l=l.parentNode){if(!l){return null;
  157
+}}return document.id(m,n);},getSelected:function(){return new Elements($A(this.options).filter(function(l){return l.selected;}));},getComputedStyle:function(m){if(this.currentStyle){return this.currentStyle[m.camelCase()];
  158
+}var l=this.getDocument().defaultView.getComputedStyle(this,null);return(l)?l.getPropertyValue([m.hyphenate()]):null;},toQueryString:function(){var l=[];
  159
+this.getElements("input, select, textarea",true).each(function(m){if(!m.name||m.disabled||m.type=="submit"||m.type=="reset"||m.type=="file"){return;}var n=(m.tagName.toLowerCase()=="select")?Element.getSelected(m).map(function(o){return o.value;
  160
+}):((m.type=="radio"||m.type=="checkbox")&&!m.checked)?null:m.value;$splat(n).each(function(o){if(typeof o!="undefined"){l.push(m.name+"="+encodeURIComponent(o));
  161
+}});});return l.join("&");},clone:function(o,l){o=o!==false;var r=this.cloneNode(o);var n=function(v,u){if(!l){v.removeAttribute("id");}if(Browser.Engine.trident){v.clearAttributes();
  162
+v.mergeAttributes(u);v.removeAttribute("uid");if(v.options){var w=v.options,s=u.options;for(var t=w.length;t--;){w[t].selected=s[t].selected;}}}var x=i[u.tagName.toLowerCase()];
  163
+if(x&&u[x]){v[x]=u[x];}};if(o){var p=r.getElementsByTagName("*"),q=this.getElementsByTagName("*");for(var m=p.length;m--;){n(p[m],q[m]);}}n(r,this);return document.id(r);
  164
+},destroy:function(){Element.empty(this);Element.dispose(this);g(this,true);return null;},empty:function(){$A(this.childNodes).each(function(l){Element.destroy(l);
  165
+});return this;},dispose:function(){return(this.parentNode)?this.parentNode.removeChild(this):this;},hasChild:function(l){l=document.id(l,true);if(!l){return false;
  166
+}if(Browser.Engine.webkit&&Browser.Engine.version<420){return $A(this.getElementsByTagName(l.tagName)).contains(l);}return(this.contains)?(this!=l&&this.contains(l)):!!(this.compareDocumentPosition(l)&16);
  167
+},match:function(l){return(!l||(l==this)||(Element.get(this,"tag")==l));}});Native.implement([Element,Window,Document],{addListener:function(o,n){if(o=="unload"){var l=n,m=this;
  168
+n=function(){m.removeListener("unload",n);l();};}else{h[this.uid]=this;}if(this.addEventListener){this.addEventListener(o,n,false);}else{this.attachEvent("on"+o,n);
  169
+}return this;},removeListener:function(m,l){if(this.removeEventListener){this.removeEventListener(m,l,false);}else{this.detachEvent("on"+m,l);}return this;
  170
+},retrieve:function(m,l){var o=c(this.uid),n=o[m];if(l!=undefined&&n==undefined){n=o[m]=l;}return $pick(n);},store:function(m,l){var n=c(this.uid);n[m]=l;
  171
+return this;},eliminate:function(l){var m=c(this.uid);delete m[l];return this;}});window.addListener("unload",d);})();Element.Properties=new Hash;Element.Properties.style={set:function(a){this.style.cssText=a;
  172
+},get:function(){return this.style.cssText;},erase:function(){this.style.cssText="";}};Element.Properties.tag={get:function(){return this.tagName.toLowerCase();
  173